aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2018-06-26 03:02:41 -0400
committerIngo Molnar <mingo@kernel.org>2018-06-26 03:02:41 -0400
commitf446474889c06883a3879faa0896e2359e812a6b (patch)
tree95634685d56dd532d1e9b73fbd07ca389296911b
parent01bdee64f9cf8e15f998bf52789ed9d0ebdfa621 (diff)
parent6f0d349d922ba44e4348a17a78ea51b7135965b1 (diff)
Merge branch 'linus' into perf/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--Documentation/admin-guide/pm/intel_pstate.rst2
-rw-r--r--Documentation/networking/e100.rst112
-rw-r--r--Documentation/networking/e1000.rst76
-rw-r--r--Documentation/networking/strparser.txt2
-rw-r--r--Documentation/trace/histogram.txt23
-rw-r--r--Documentation/virtual/kvm/api.txt2
-rw-r--r--MAINTAINERS2
-rw-r--r--Makefile2
-rw-r--r--arch/alpha/Kconfig5
-rw-r--r--arch/alpha/lib/Makefile2
-rw-r--r--arch/alpha/lib/dec_and_lock.c44
-rw-r--r--arch/arm/kernel/signal.c4
-rw-r--r--arch/arm/xen/enlighten.c7
-rw-r--r--arch/arm64/crypto/aes-glue.c2
-rw-r--r--arch/arm64/include/asm/kvm_host.h1
-rw-r--r--arch/arm64/include/asm/sysreg.h11
-rw-r--r--arch/arm64/kernel/cpufeature.c2
-rw-r--r--arch/arm64/kernel/smp.c2
-rw-r--r--arch/arm64/kvm/fpsimd.c36
-rw-r--r--arch/arm64/mm/dma-mapping.c9
-rw-r--r--arch/arm64/mm/proc.S5
-rw-r--r--arch/mips/Kconfig1
-rw-r--r--arch/mips/ath79/mach-pb44.c2
-rw-r--r--arch/mips/bcm47xx/setup.c6
-rw-r--r--arch/mips/include/asm/io.h2
-rw-r--r--arch/mips/include/asm/mipsregs.h3
-rw-r--r--arch/mips/include/uapi/asm/unistd.h18
-rw-r--r--arch/mips/kernel/entry.S8
-rw-r--r--arch/mips/kernel/mcount.S27
-rw-r--r--arch/mips/kernel/scall32-o32.S2
-rw-r--r--arch/mips/kernel/scall64-64.S2
-rw-r--r--arch/mips/kernel/scall64-n32.S2
-rw-r--r--arch/mips/kernel/scall64-o32.S2
-rw-r--r--arch/mips/kernel/signal.c3
-rw-r--r--arch/powerpc/Makefile1
-rw-r--r--arch/powerpc/include/asm/book3s/32/pgalloc.h1
-rw-r--r--arch/powerpc/include/asm/book3s/64/pgtable-4k.h21
-rw-r--r--arch/powerpc/include/asm/book3s/64/pgtable-64k.h9
-rw-r--r--arch/powerpc/include/asm/book3s/64/pgtable.h5
-rw-r--r--arch/powerpc/include/asm/nmi.h2
-rw-r--r--arch/powerpc/include/asm/nohash/32/pgalloc.h1
-rw-r--r--arch/powerpc/include/asm/nohash/64/pgalloc.h1
-rw-r--r--arch/powerpc/kernel/dt_cpu_ftrs.c3
-rw-r--r--arch/powerpc/kernel/setup-common.c12
-rw-r--r--arch/powerpc/kernel/setup_64.c8
-rw-r--r--arch/powerpc/kernel/signal.c4
-rw-r--r--arch/powerpc/kernel/smp.c6
-rw-r--r--arch/powerpc/kernel/stacktrace.c4
-rw-r--r--arch/powerpc/mm/hugetlbpage.c3
-rw-r--r--arch/powerpc/mm/pgtable-book3s64.c12
-rw-r--r--arch/powerpc/mm/tlb-radix.c98
-rw-r--r--arch/x86/Makefile6
-rw-r--r--arch/x86/boot/compressed/eboot.c2
-rw-r--r--arch/x86/entry/common.c2
-rw-r--r--arch/x86/include/asm/barrier.h2
-rw-r--r--arch/x86/include/asm/vmx.h3
-rw-r--r--arch/x86/kernel/apic/x2apic_uv_x.c60
-rw-r--r--arch/x86/kernel/cpu/bugs.c4
-rw-r--r--arch/x86/kernel/cpu/cacheinfo.c2
-rw-r--r--arch/x86/kernel/cpu/common.c3
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce-severity.c5
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce.c44
-rw-r--r--arch/x86/kernel/cpu/microcode/intel.c5
-rw-r--r--arch/x86/kernel/head64.c2
-rw-r--r--arch/x86/kernel/quirks.c11
-rw-r--r--arch/x86/kernel/signal.c2
-rw-r--r--arch/x86/kernel/traps.c14
-rw-r--r--arch/x86/kernel/uprobes.c2
-rw-r--r--arch/x86/kvm/vmx.c67
-rw-r--r--arch/x86/kvm/x86.h9
-rw-r--r--arch/x86/mm/init_64.c20
-rw-r--r--arch/x86/xen/enlighten.c7
-rw-r--r--arch/x86/xen/enlighten_pv.c1
-rw-r--r--arch/x86/xen/enlighten_pvh.c1
-rw-r--r--arch/x86/xen/smp_pv.c5
-rw-r--r--block/bio.c3
-rw-r--r--block/blk-core.c8
-rw-r--r--block/blk-mq-debugfs.c2
-rw-r--r--block/blk-mq.c1
-rw-r--r--block/blk-softirq.c1
-rw-r--r--block/blk-timeout.c1
-rw-r--r--block/sed-opal.c4
-rw-r--r--crypto/morus640.c3
-rw-r--r--crypto/sha3_generic.c2
-rw-r--r--drivers/acpi/acpi_lpss.c18
-rw-r--r--drivers/acpi/ec.c20
-rw-r--r--drivers/base/core.c15
-rw-r--r--drivers/block/nbd.c42
-rw-r--r--drivers/block/null_blk.c2
-rw-r--r--drivers/char/hw_random/core.c11
-rw-r--r--drivers/clocksource/timer-stm32.c4
-rw-r--r--drivers/cpufreq/intel_pstate.c27
-rw-r--r--drivers/cpufreq/qcom-cpufreq-kryo.c25
-rw-r--r--drivers/crypto/chelsio/chtls/chtls_io.c5
-rw-r--r--drivers/firmware/efi/libstub/tpm.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c10
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_object.c24
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c14
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c39
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c2
-rw-r--r--drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c2
-rw-r--r--drivers/gpu/drm/bridge/sil-sii8620.c309
-rw-r--r--drivers/gpu/drm/drm_drv.c14
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h21
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c57
-rw-r--r--drivers/gpu/drm/i915/i915_gem_context.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_execbuffer.c49
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c12
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h5
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c20
-rw-r--r--drivers/gpu/drm/i915/intel_display.c16
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c34
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c6
-rw-r--r--drivers/gpu/drm/i915/intel_dsi.c6
-rw-r--r--drivers/gpu/drm/i915/intel_dvo.c6
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c6
-rw-r--r--drivers/gpu/drm/i915/intel_lrc.c18
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c5
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c6
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c12
-rw-r--r--drivers/gpu/drm/nouveau/dispnv50/curs507a.c2
-rw-r--r--drivers/gpu/drm/nouveau/dispnv50/wndw.c13
-rw-r--r--drivers/gpu/drm/qxl/qxl_display.c7
-rw-r--r--drivers/gpu/drm/sun4i/sun4i_tcon.c25
-rw-r--r--drivers/hwmon/dell-smm-hwmon.c7
-rw-r--r--drivers/hwmon/nct6775.c2
-rw-r--r--drivers/irqchip/irq-gic-v2m.c2
-rw-r--r--drivers/irqchip/irq-gic-v3-its.c62
-rw-r--r--drivers/irqchip/irq-ls-scfg-msi.c10
-rw-r--r--drivers/lightnvm/Kconfig2
-rw-r--r--drivers/net/ethernet/amd/Kconfig2
-rw-r--r--drivers/net/ethernet/apm/xgene-v2/Kconfig1
-rw-r--r--drivers/net/ethernet/apm/xgene/Kconfig1
-rw-r--r--drivers/net/ethernet/arc/Kconfig6
-rw-r--r--drivers/net/ethernet/broadcom/Kconfig2
-rw-r--r--drivers/net/ethernet/cadence/macb_ptp.c5
-rw-r--r--drivers/net/ethernet/calxeda/Kconfig2
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c2
-rw-r--r--drivers/net/ethernet/hisilicon/Kconfig2
-rw-r--r--drivers/net/ethernet/marvell/Kconfig8
-rw-r--r--drivers/net/ethernet/marvell/mvneta.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/Kconfig2
-rw-r--r--drivers/net/ethernet/mscc/ocelot.c11
-rw-r--r--drivers/net/ethernet/realtek/r8169.c2
-rw-r--r--drivers/net/ethernet/renesas/Kconfig2
-rw-r--r--drivers/net/ethernet/sfc/efx.c1
-rw-r--r--drivers/net/ethernet/ti/davinci_cpdma.c2
-rw-r--r--drivers/net/ethernet/ti/davinci_emac.c4
-rw-r--r--drivers/net/ipvlan/ipvlan_main.c3
-rw-r--r--drivers/net/usb/qmi_wwan.c1
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/Kconfig1
-rw-r--r--drivers/net/wireless/quantenna/qtnfmac/Kconfig2
-rw-r--r--drivers/net/xen-netfront.c11
-rw-r--r--drivers/nvme/host/core.c1
-rw-r--r--drivers/nvme/host/fc.c6
-rw-r--r--drivers/nvme/host/nvme.h1
-rw-r--r--drivers/nvme/host/pci.c44
-rw-r--r--drivers/nvme/host/rdma.c73
-rw-r--r--drivers/nvme/target/core.c8
-rw-r--r--drivers/opp/core.c2
-rw-r--r--drivers/pinctrl/actions/pinctrl-owl.c2
-rw-r--r--drivers/pinctrl/devicetree.c7
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mt7622.c6
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mtk-common.c5
-rw-r--r--drivers/pinctrl/pinctrl-single.c14
-rw-r--r--drivers/scsi/scsi_transport_fc.c2
-rw-r--r--drivers/scsi/xen-scsifront.c33
-rw-r--r--drivers/vhost/net.c3
-rw-r--r--drivers/xen/Makefile2
-rw-r--r--drivers/xen/events/events_base.c2
-rw-r--r--drivers/xen/grant-table.c4
-rw-r--r--drivers/xen/manage.c18
-rw-r--r--drivers/xen/privcmd-buf.c210
-rw-r--r--drivers/xen/privcmd.c9
-rw-r--r--drivers/xen/privcmd.h3
-rw-r--r--drivers/xen/xen-scsiback.c16
-rw-r--r--fs/ext2/ext2.h2
-rw-r--r--fs/ext2/super.c6
-rw-r--r--fs/nfs/delegation.c4
-rw-r--r--fs/nfs/flexfilelayout/flexfilelayout.c21
-rw-r--r--fs/nfs/nfs4proc.c33
-rw-r--r--fs/nfs/pnfs.h5
-rw-r--r--fs/quota/dquot.c7
-rw-r--r--fs/udf/balloc.c5
-rw-r--r--fs/udf/directory.c8
-rw-r--r--fs/udf/inode.c8
-rw-r--r--fs/udf/namei.c14
-rw-r--r--fs/udf/udfdecl.h9
-rw-r--r--include/acpi/processor.h3
-rw-r--r--include/asm-generic/qspinlock_types.h2
-rw-r--r--include/linux/backing-dev-defs.h2
-rw-r--r--include/linux/filter.h4
-rw-r--r--include/linux/irq.h1
-rw-r--r--include/linux/irqdesc.h5
-rw-r--r--include/linux/kernel.h2
-rw-r--r--include/linux/memory.h1
-rw-r--r--include/linux/nfs_xdr.h2
-rw-r--r--include/linux/refcount.h4
-rw-r--r--include/linux/sched.h23
-rw-r--r--include/linux/spinlock.h5
-rw-r--r--include/uapi/linux/nbd.h3
-rw-r--r--include/xen/xen.h6
-rw-r--r--kernel/events/ring_buffer.c6
-rw-r--r--kernel/irq/debugfs.c1
-rw-r--r--kernel/locking/lockdep.c12
-rw-r--r--kernel/locking/rwsem.c1
-rw-r--r--kernel/rseq.c7
-rw-r--r--kernel/softirq.c6
-rw-r--r--kernel/time/hrtimer.c2
-rw-r--r--kernel/time/posix-cpu-timers.c2
-rw-r--r--kernel/time/time.c6
-rw-r--r--kernel/trace/trace.c6
-rw-r--r--kernel/trace/trace_events_filter.c10
-rw-r--r--lib/Makefile6
-rw-r--r--lib/dec_and_lock.c16
-rw-r--r--lib/refcount.c28
-rw-r--r--mm/backing-dev.c20
-rw-r--r--net/bpfilter/Makefile2
-rw-r--r--net/dccp/ccids/ccid3.c16
-rw-r--r--net/ipv6/mcast.c9
-rw-r--r--net/packet/af_packet.c16
-rw-r--r--net/sched/cls_flower.c21
-rw-r--r--net/sched/sch_hfsc.c4
-rw-r--r--net/sctp/chunk.c4
-rw-r--r--net/strparser/strparser.c5
-rw-r--r--net/sunrpc/xprt.c10
-rw-r--r--net/vmw_vsock/virtio_transport.c2
-rw-r--r--scripts/Makefile.build2
-rw-r--r--tools/objtool/check.c1
-rw-r--r--tools/perf/Documentation/perf-stat.txt3
-rw-r--r--tools/perf/builtin-c2c.c10
-rw-r--r--tools/perf/builtin-script.c12
-rw-r--r--tools/perf/builtin-stat.c48
-rw-r--r--tools/perf/ui/gtk/hists.c2
-rw-r--r--tools/perf/util/hist.c12
-rw-r--r--tools/perf/util/hist.h4
-rw-r--r--tools/perf/util/parse-events.y5
-rw-r--r--tools/perf/util/sort.h4
-rw-r--r--tools/power/x86/turbostat/turbostat.82
-rw-r--r--tools/power/x86/turbostat/turbostat.c240
-rw-r--r--tools/testing/selftests/net/.gitignore1
-rw-r--r--tools/testing/selftests/net/config2
-rwxr-xr-xtools/testing/selftests/pstore/pstore_post_reboot_tests5
-rw-r--r--tools/testing/selftests/rseq/param_test.c24
-rw-r--r--tools/testing/selftests/rseq/rseq-arm.h1
-rw-r--r--tools/testing/selftests/rseq/rseq-mips.h725
-rw-r--r--tools/testing/selftests/rseq/rseq.h2
-rwxr-xr-x[-rw-r--r--]tools/testing/selftests/rseq/run_param_test.sh0
-rw-r--r--tools/testing/selftests/sparc64/Makefile20
-rw-r--r--tools/testing/selftests/sparc64/drivers/Makefile2
-rwxr-xr-xtools/testing/selftests/static_keys/test_static_keys.sh13
-rw-r--r--tools/testing/selftests/sync/config4
-rwxr-xr-xtools/testing/selftests/sysctl/sysctl.sh20
-rwxr-xr-xtools/testing/selftests/user/test_user_copy.sh7
-rw-r--r--tools/testing/selftests/vm/compaction_test.c4
-rw-r--r--tools/testing/selftests/vm/mlock2-tests.c12
-rwxr-xr-xtools/testing/selftests/vm/run_vmtests5
-rw-r--r--tools/testing/selftests/vm/userfaultfd.c4
-rwxr-xr-xtools/testing/selftests/zram/zram.sh5
-rwxr-xr-xtools/testing/selftests/zram/zram_lib.sh5
-rw-r--r--virt/kvm/Kconfig2
-rw-r--r--virt/kvm/arm/mmu.c2
-rw-r--r--virt/kvm/arm/vgic/vgic-v3.c5
-rw-r--r--virt/kvm/kvm_main.c19
266 files changed, 3002 insertions, 1106 deletions
diff --git a/Documentation/admin-guide/pm/intel_pstate.rst b/Documentation/admin-guide/pm/intel_pstate.rst
index ab2fe0eda1d7..8b9164990956 100644
--- a/Documentation/admin-guide/pm/intel_pstate.rst
+++ b/Documentation/admin-guide/pm/intel_pstate.rst
@@ -410,7 +410,7 @@ argument is passed to the kernel in the command line.
410 That only is supported in some configurations, though (for example, if 410 That only is supported in some configurations, though (for example, if
411 the `HWP feature is enabled in the processor <Active Mode With HWP_>`_, 411 the `HWP feature is enabled in the processor <Active Mode With HWP_>`_,
412 the operation mode of the driver cannot be changed), and if it is not 412 the operation mode of the driver cannot be changed), and if it is not
413 supported in the current configuration, writes to this attribute with 413 supported in the current configuration, writes to this attribute will
414 fail with an appropriate error. 414 fail with an appropriate error.
415 415
416Interpretation of Policy Attributes 416Interpretation of Policy Attributes
diff --git a/Documentation/networking/e100.rst b/Documentation/networking/e100.rst
index d4d837027925..9708f5fa76de 100644
--- a/Documentation/networking/e100.rst
+++ b/Documentation/networking/e100.rst
@@ -1,3 +1,4 @@
1==============================================================
1Linux* Base Driver for the Intel(R) PRO/100 Family of Adapters 2Linux* Base Driver for the Intel(R) PRO/100 Family of Adapters
2============================================================== 3==============================================================
3 4
@@ -86,83 +87,84 @@ Event Log Message Level: The driver uses the message level flag to log events
86Additional Configurations 87Additional Configurations
87========================= 88=========================
88 89
89 Configuring the Driver on Different Distributions 90Configuring the Driver on Different Distributions
90 ------------------------------------------------- 91-------------------------------------------------
91 92
92 Configuring a network driver to load properly when the system is started is 93Configuring a network driver to load properly when the system is started
93 distribution dependent. Typically, the configuration process involves adding 94is distribution dependent. Typically, the configuration process involves
94 an alias line to /etc/modprobe.d/*.conf as well as editing other system 95adding an alias line to /etc/modprobe.d/*.conf as well as editing other
95 startup scripts and/or configuration files. Many popular Linux 96system startup scripts and/or configuration files. Many popular Linux
96 distributions ship with tools to make these changes for you. To learn the 97distributions ship with tools to make these changes for you. To learn
97 proper way to configure a network device for your system, refer to your 98the proper way to configure a network device for your system, refer to
98 distribution documentation. If during this process you are asked for the 99your distribution documentation. If during this process you are asked
99 driver or module name, the name for the Linux Base Driver for the Intel 100for the driver or module name, the name for the Linux Base Driver for
100 PRO/100 Family of Adapters is e100. 101the Intel PRO/100 Family of Adapters is e100.
101 102
102 As an example, if you install the e100 driver for two PRO/100 adapters 103As an example, if you install the e100 driver for two PRO/100 adapters
103 (eth0 and eth1), add the following to a configuration file in /etc/modprobe.d/ 104(eth0 and eth1), add the following to a configuration file in
105/etc/modprobe.d/::
104 106
105 alias eth0 e100 107 alias eth0 e100
106 alias eth1 e100 108 alias eth1 e100
107 109
108 Viewing Link Messages 110Viewing Link Messages
109 --------------------- 111---------------------
110 In order to see link messages and other Intel driver information on your
111 console, you must set the dmesg level up to six. This can be done by
112 entering the following on the command line before loading the e100 driver::
113
114 dmesg -n 6
115 112
116 If you wish to see all messages issued by the driver, including debug 113In order to see link messages and other Intel driver information on your
117 messages, set the dmesg level to eight. 114console, you must set the dmesg level up to six. This can be done by
115entering the following on the command line before loading the e100
116driver::
118 117
119 NOTE: This setting is not saved across reboots. 118 dmesg -n 6
120 119
120If you wish to see all messages issued by the driver, including debug
121messages, set the dmesg level to eight.
121 122
122 ethtool 123NOTE: This setting is not saved across reboots.
123 -------
124 124
125 The driver utilizes the ethtool interface for driver configuration and 125ethtool
126 diagnostics, as well as displaying statistical information. The ethtool 126-------
127 version 1.6 or later is required for this functionality.
128 127
129 The latest release of ethtool can be found from 128The driver utilizes the ethtool interface for driver configuration and
130 https://www.kernel.org/pub/software/network/ethtool/ 129diagnostics, as well as displaying statistical information. The ethtool
130version 1.6 or later is required for this functionality.
131 131
132 Enabling Wake on LAN* (WoL) 132The latest release of ethtool can be found from
133 --------------------------- 133https://www.kernel.org/pub/software/network/ethtool/
134 WoL is provided through the ethtool* utility. For instructions on enabling
135 WoL with ethtool, refer to the ethtool man page.
136 134
137 WoL will be enabled on the system during the next shut down or reboot. For 135Enabling Wake on LAN* (WoL)
138 this driver version, in order to enable WoL, the e100 driver must be 136---------------------------
139 loaded when shutting down or rebooting the system. 137WoL is provided through the ethtool* utility. For instructions on
138enabling WoL with ethtool, refer to the ethtool man page. WoL will be
139enabled on the system during the next shut down or reboot. For this
140driver version, in order to enable WoL, the e100 driver must be loaded
141when shutting down or rebooting the system.
140 142
141 NAPI 143NAPI
142 ---- 144----
143 145
144 NAPI (Rx polling mode) is supported in the e100 driver. 146NAPI (Rx polling mode) is supported in the e100 driver.
145 147
146 See https://wiki.linuxfoundation.org/networking/napi for more information 148See https://wiki.linuxfoundation.org/networking/napi for more
147 on NAPI. 149information on NAPI.
148 150
149 Multiple Interfaces on Same Ethernet Broadcast Network 151Multiple Interfaces on Same Ethernet Broadcast Network
150 ------------------------------------------------------ 152------------------------------------------------------
151 153
152 Due to the default ARP behavior on Linux, it is not possible to have 154Due to the default ARP behavior on Linux, it is not possible to have one
153 one system on two IP networks in the same Ethernet broadcast domain 155system on two IP networks in the same Ethernet broadcast domain
154 (non-partitioned switch) behave as expected. All Ethernet interfaces 156(non-partitioned switch) behave as expected. All Ethernet interfaces
155 will respond to IP traffic for any IP address assigned to the system. 157will respond to IP traffic for any IP address assigned to the system.
156 This results in unbalanced receive traffic. 158This results in unbalanced receive traffic.
157 159
158 If you have multiple interfaces in a server, either turn on ARP 160If you have multiple interfaces in a server, either turn on ARP
159 filtering by 161filtering by
160 162
161 (1) entering:: echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter 163(1) entering:: echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
162 (this only works if your kernel's version is higher than 2.4.5), or 164 (this only works if your kernel's version is higher than 2.4.5), or
163 165
164 (2) installing the interfaces in separate broadcast domains (either 166(2) installing the interfaces in separate broadcast domains (either
165 in different switches or in a switch partitioned to VLANs). 167 in different switches or in a switch partitioned to VLANs).
166 168
167 169
168Support 170Support
diff --git a/Documentation/networking/e1000.rst b/Documentation/networking/e1000.rst
index 616848940e63..144b87eef153 100644
--- a/Documentation/networking/e1000.rst
+++ b/Documentation/networking/e1000.rst
@@ -1,3 +1,4 @@
1===========================================================
1Linux* Base Driver for Intel(R) Ethernet Network Connection 2Linux* Base Driver for Intel(R) Ethernet Network Connection
2=========================================================== 3===========================================================
3 4
@@ -354,57 +355,58 @@ previously mentioned to force the adapter to the same speed and duplex.
354Additional Configurations 355Additional Configurations
355========================= 356=========================
356 357
357 Jumbo Frames 358Jumbo Frames
358 ------------ 359------------
359 Jumbo Frames support is enabled by changing the MTU to a value larger than 360Jumbo Frames support is enabled by changing the MTU to a value larger
360 the default of 1500. Use the ifconfig command to increase the MTU size. 361than the default of 1500. Use the ifconfig command to increase the MTU
361 For example:: 362size. For example::
362 363
363 ifconfig eth<x> mtu 9000 up 364 ifconfig eth<x> mtu 9000 up
364 365
365 This setting is not saved across reboots. It can be made permanent if 366This setting is not saved across reboots. It can be made permanent if
366 you add:: 367you add::
367 368
368 MTU=9000 369 MTU=9000
369 370
370 to the file /etc/sysconfig/network-scripts/ifcfg-eth<x>. This example 371to the file /etc/sysconfig/network-scripts/ifcfg-eth<x>. This example
371 applies to the Red Hat distributions; other distributions may store this 372applies to the Red Hat distributions; other distributions may store this
372 setting in a different location. 373setting in a different location.
374
375Notes: Degradation in throughput performance may be observed in some
376Jumbo frames environments. If this is observed, increasing the
377application's socket buffer size and/or increasing the
378/proc/sys/net/ipv4/tcp_*mem entry values may help. See the specific
379application manual and /usr/src/linux*/Documentation/
380networking/ip-sysctl.txt for more details.
373 381
374 Notes: 382- The maximum MTU setting for Jumbo Frames is 16110. This value
375 Degradation in throughput performance may be observed in some Jumbo frames 383 coincides with the maximum Jumbo Frames size of 16128.
376 environments. If this is observed, increasing the application's socket buffer
377 size and/or increasing the /proc/sys/net/ipv4/tcp_*mem entry values may help.
378 See the specific application manual and /usr/src/linux*/Documentation/
379 networking/ip-sysctl.txt for more details.
380 384
381 - The maximum MTU setting for Jumbo Frames is 16110. This value coincides 385- Using Jumbo frames at 10 or 100 Mbps is not supported and may result
382 with the maximum Jumbo Frames size of 16128. 386 in poor performance or loss of link.
383 387
384 - Using Jumbo frames at 10 or 100 Mbps is not supported and may result in 388- Adapters based on the Intel(R) 82542 and 82573V/E controller do not
385 poor performance or loss of link. 389 support Jumbo Frames. These correspond to the following product names:
390 Intel(R) PRO/1000 Gigabit Server Adapter Intel(R) PRO/1000 PM Network
391 Connection
386 392
387 - Adapters based on the Intel(R) 82542 and 82573V/E controller do not 393ethtool
388 support Jumbo Frames. These correspond to the following product names: 394-------
389 Intel(R) PRO/1000 Gigabit Server Adapter 395The driver utilizes the ethtool interface for driver configuration and
390 Intel(R) PRO/1000 PM Network Connection 396diagnostics, as well as displaying statistical information. The ethtool
397version 1.6 or later is required for this functionality.
391 398
392 ethtool 399The latest release of ethtool can be found from
393 ------- 400https://www.kernel.org/pub/software/network/ethtool/
394 The driver utilizes the ethtool interface for driver configuration and
395 diagnostics, as well as displaying statistical information. The ethtool
396 version 1.6 or later is required for this functionality.
397 401
398 The latest release of ethtool can be found from 402Enabling Wake on LAN* (WoL)
399 https://www.kernel.org/pub/software/network/ethtool/ 403---------------------------
404WoL is configured through the ethtool* utility.
400 405
401 Enabling Wake on LAN* (WoL) 406WoL will be enabled on the system during the next shut down or reboot.
402 --------------------------- 407For this driver version, in order to enable WoL, the e1000 driver must be
403 WoL is configured through the ethtool* utility. 408loaded when shutting down or rebooting the system.
404 409
405 WoL will be enabled on the system during the next shut down or reboot.
406 For this driver version, in order to enable WoL, the e1000 driver must be
407 loaded when shutting down or rebooting the system.
408 410
409Support 411Support
410======= 412=======
diff --git a/Documentation/networking/strparser.txt b/Documentation/networking/strparser.txt
index 13081b3decef..a7d354ddda7b 100644
--- a/Documentation/networking/strparser.txt
+++ b/Documentation/networking/strparser.txt
@@ -48,7 +48,7 @@ void strp_pause(struct strparser *strp)
48 Temporarily pause a stream parser. Message parsing is suspended 48 Temporarily pause a stream parser. Message parsing is suspended
49 and no new messages are delivered to the upper layer. 49 and no new messages are delivered to the upper layer.
50 50
51void strp_pause(struct strparser *strp) 51void strp_unpause(struct strparser *strp)
52 52
53 Unpause a paused stream parser. 53 Unpause a paused stream parser.
54 54
diff --git a/Documentation/trace/histogram.txt b/Documentation/trace/histogram.txt
index e73bcf9cb5f3..7ffea6aa22e3 100644
--- a/Documentation/trace/histogram.txt
+++ b/Documentation/trace/histogram.txt
@@ -1729,35 +1729,35 @@ If a variable isn't a key variable or prefixed with 'vals=', the
1729associated event field will be saved in a variable but won't be summed 1729associated event field will be saved in a variable but won't be summed
1730as a value: 1730as a value:
1731 1731
1732 # echo 'hist:keys=next_pid:ts1=common_timestamp ... >> event/trigger 1732 # echo 'hist:keys=next_pid:ts1=common_timestamp ...' >> event/trigger
1733 1733
1734Multiple variables can be assigned at the same time. The below would 1734Multiple variables can be assigned at the same time. The below would
1735result in both ts0 and b being created as variables, with both 1735result in both ts0 and b being created as variables, with both
1736common_timestamp and field1 additionally being summed as values: 1736common_timestamp and field1 additionally being summed as values:
1737 1737
1738 # echo 'hist:keys=pid:vals=$ts0,$b:ts0=common_timestamp,b=field1 ... >> \ 1738 # echo 'hist:keys=pid:vals=$ts0,$b:ts0=common_timestamp,b=field1 ...' >> \
1739 event/trigger 1739 event/trigger
1740 1740
1741Note that variable assignments can appear either preceding or 1741Note that variable assignments can appear either preceding or
1742following their use. The command below behaves identically to the 1742following their use. The command below behaves identically to the
1743command above: 1743command above:
1744 1744
1745 # echo 'hist:keys=pid:ts0=common_timestamp,b=field1:vals=$ts0,$b ... >> \ 1745 # echo 'hist:keys=pid:ts0=common_timestamp,b=field1:vals=$ts0,$b ...' >> \
1746 event/trigger 1746 event/trigger
1747 1747
1748Any number of variables not bound to a 'vals=' prefix can also be 1748Any number of variables not bound to a 'vals=' prefix can also be
1749assigned by simply separating them with colons. Below is the same 1749assigned by simply separating them with colons. Below is the same
1750thing but without the values being summed in the histogram: 1750thing but without the values being summed in the histogram:
1751 1751
1752 # echo 'hist:keys=pid:ts0=common_timestamp:b=field1 ... >> event/trigger 1752 # echo 'hist:keys=pid:ts0=common_timestamp:b=field1 ...' >> event/trigger
1753 1753
1754Variables set as above can be referenced and used in expressions on 1754Variables set as above can be referenced and used in expressions on
1755another event. 1755another event.
1756 1756
1757For example, here's how a latency can be calculated: 1757For example, here's how a latency can be calculated:
1758 1758
1759 # echo 'hist:keys=pid,prio:ts0=common_timestamp ... >> event1/trigger 1759 # echo 'hist:keys=pid,prio:ts0=common_timestamp ...' >> event1/trigger
1760 # echo 'hist:keys=next_pid:wakeup_lat=common_timestamp-$ts0 ... >> event2/trigger 1760 # echo 'hist:keys=next_pid:wakeup_lat=common_timestamp-$ts0 ...' >> event2/trigger
1761 1761
1762In the first line above, the event's timetamp is saved into the 1762In the first line above, the event's timetamp is saved into the
1763variable ts0. In the next line, ts0 is subtracted from the second 1763variable ts0. In the next line, ts0 is subtracted from the second
@@ -1766,7 +1766,7 @@ yet another variable, 'wakeup_lat'. The hist trigger below in turn
1766makes use of the wakeup_lat variable to compute a combined latency 1766makes use of the wakeup_lat variable to compute a combined latency
1767using the same key and variable from yet another event: 1767using the same key and variable from yet another event:
1768 1768
1769 # echo 'hist:key=pid:wakeupswitch_lat=$wakeup_lat+$switchtime_lat ... >> event3/trigger 1769 # echo 'hist:key=pid:wakeupswitch_lat=$wakeup_lat+$switchtime_lat ...' >> event3/trigger
1770 1770
17712.2.2 Synthetic Events 17712.2.2 Synthetic Events
1772---------------------- 1772----------------------
@@ -1807,10 +1807,11 @@ the command that defined it with a '!':
1807At this point, there isn't yet an actual 'wakeup_latency' event 1807At this point, there isn't yet an actual 'wakeup_latency' event
1808instantiated in the event subsytem - for this to happen, a 'hist 1808instantiated in the event subsytem - for this to happen, a 'hist
1809trigger action' needs to be instantiated and bound to actual fields 1809trigger action' needs to be instantiated and bound to actual fields
1810and variables defined on other events (see Section 6.3.3 below). 1810and variables defined on other events (see Section 2.2.3 below on
1811how that is done using hist trigger 'onmatch' action). Once that is
1812done, the 'wakeup_latency' synthetic event instance is created.
1811 1813
1812Once that is done, an event instance is created, and a histogram can 1814A histogram can now be defined for the new synthetic event:
1813be defined using it:
1814 1815
1815 # echo 'hist:keys=pid,prio,lat.log2:sort=pid,lat' >> \ 1816 # echo 'hist:keys=pid,prio,lat.log2:sort=pid,lat' >> \
1816 /sys/kernel/debug/tracing/events/synthetic/wakeup_latency/trigger 1817 /sys/kernel/debug/tracing/events/synthetic/wakeup_latency/trigger
@@ -1960,7 +1961,7 @@ hist trigger specification.
1960 back to that pid, the timestamp difference is calculated. If the 1961 back to that pid, the timestamp difference is calculated. If the
1961 resulting latency, stored in wakeup_lat, exceeds the current 1962 resulting latency, stored in wakeup_lat, exceeds the current
1962 maximum latency, the values specified in the save() fields are 1963 maximum latency, the values specified in the save() fields are
1963 recoreded: 1964 recorded:
1964 1965
1965 # echo 'hist:keys=pid:ts0=common_timestamp.usecs \ 1966 # echo 'hist:keys=pid:ts0=common_timestamp.usecs \
1966 if comm=="cyclictest"' >> \ 1967 if comm=="cyclictest"' >> \
diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
index 495b7742ab58..d10944e619d3 100644
--- a/Documentation/virtual/kvm/api.txt
+++ b/Documentation/virtual/kvm/api.txt
@@ -4610,7 +4610,7 @@ This capability indicates that kvm will implement the interfaces to handle
4610reset, migration and nested KVM for branch prediction blocking. The stfle 4610reset, migration and nested KVM for branch prediction blocking. The stfle
4611facility 82 should not be provided to the guest without this capability. 4611facility 82 should not be provided to the guest without this capability.
4612 4612
46138.14 KVM_CAP_HYPERV_TLBFLUSH 46138.18 KVM_CAP_HYPERV_TLBFLUSH
4614 4614
4615Architectures: x86 4615Architectures: x86
4616 4616
diff --git a/MAINTAINERS b/MAINTAINERS
index edf3cf5ea691..e19ec6d90a44 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9882,6 +9882,7 @@ M: Andrew Lunn <andrew@lunn.ch>
9882M: Vivien Didelot <vivien.didelot@savoirfairelinux.com> 9882M: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
9883M: Florian Fainelli <f.fainelli@gmail.com> 9883M: Florian Fainelli <f.fainelli@gmail.com>
9884S: Maintained 9884S: Maintained
9885F: Documentation/devicetree/bindings/net/dsa/
9885F: net/dsa/ 9886F: net/dsa/
9886F: include/net/dsa.h 9887F: include/net/dsa.h
9887F: include/linux/dsa/ 9888F: include/linux/dsa/
@@ -15572,6 +15573,7 @@ M: x86@kernel.org
15572L: linux-kernel@vger.kernel.org 15573L: linux-kernel@vger.kernel.org
15573T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core 15574T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core
15574S: Maintained 15575S: Maintained
15576F: Documentation/devicetree/bindings/x86/
15575F: Documentation/x86/ 15577F: Documentation/x86/
15576F: arch/x86/ 15578F: arch/x86/
15577 15579
diff --git a/Makefile b/Makefile
index ca2af1ab91eb..c9132594860b 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
2VERSION = 4 2VERSION = 4
3PATCHLEVEL = 18 3PATCHLEVEL = 18
4SUBLEVEL = 0 4SUBLEVEL = 0
5EXTRAVERSION = -rc1 5EXTRAVERSION = -rc2
6NAME = Merciless Moray 6NAME = Merciless Moray
7 7
8# *DOCUMENTATION* 8# *DOCUMENTATION*
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
index 0c4805a572c8..04a4a138ed13 100644
--- a/arch/alpha/Kconfig
+++ b/arch/alpha/Kconfig
@@ -555,11 +555,6 @@ config SMP
555 555
556 If you don't know what to do here, say N. 556 If you don't know what to do here, say N.
557 557
558config HAVE_DEC_LOCK
559 bool
560 depends on SMP
561 default y
562
563config NR_CPUS 558config NR_CPUS
564 int "Maximum number of CPUs (2-32)" 559 int "Maximum number of CPUs (2-32)"
565 range 2 32 560 range 2 32
diff --git a/arch/alpha/lib/Makefile b/arch/alpha/lib/Makefile
index 04f9729de57c..854d5e79979e 100644
--- a/arch/alpha/lib/Makefile
+++ b/arch/alpha/lib/Makefile
@@ -35,8 +35,6 @@ lib-y = __divqu.o __remqu.o __divlu.o __remlu.o \
35 callback_srm.o srm_puts.o srm_printk.o \ 35 callback_srm.o srm_puts.o srm_printk.o \
36 fls.o 36 fls.o
37 37
38lib-$(CONFIG_SMP) += dec_and_lock.o
39
40# The division routines are built from single source, with different defines. 38# The division routines are built from single source, with different defines.
41AFLAGS___divqu.o = -DDIV 39AFLAGS___divqu.o = -DDIV
42AFLAGS___remqu.o = -DREM 40AFLAGS___remqu.o = -DREM
diff --git a/arch/alpha/lib/dec_and_lock.c b/arch/alpha/lib/dec_and_lock.c
deleted file mode 100644
index a117707f57fe..000000000000
--- a/arch/alpha/lib/dec_and_lock.c
+++ /dev/null
@@ -1,44 +0,0 @@
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * arch/alpha/lib/dec_and_lock.c
4 *
5 * ll/sc version of atomic_dec_and_lock()
6 *
7 */
8
9#include <linux/spinlock.h>
10#include <linux/atomic.h>
11#include <linux/export.h>
12
13 asm (".text \n\
14 .global _atomic_dec_and_lock \n\
15 .ent _atomic_dec_and_lock \n\
16 .align 4 \n\
17_atomic_dec_and_lock: \n\
18 .prologue 0 \n\
191: ldl_l $1, 0($16) \n\
20 subl $1, 1, $1 \n\
21 beq $1, 2f \n\
22 stl_c $1, 0($16) \n\
23 beq $1, 4f \n\
24 mb \n\
25 clr $0 \n\
26 ret \n\
272: br $29, 3f \n\
283: ldgp $29, 0($29) \n\
29 br $atomic_dec_and_lock_1..ng \n\
30 .subsection 2 \n\
314: br 1b \n\
32 .previous \n\
33 .end _atomic_dec_and_lock");
34
35static int __used atomic_dec_and_lock_1(atomic_t *atomic, spinlock_t *lock)
36{
37 /* Slow path */
38 spin_lock(lock);
39 if (atomic_dec_and_test(atomic))
40 return 1;
41 spin_unlock(lock);
42 return 0;
43}
44EXPORT_SYMBOL(_atomic_dec_and_lock);
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index f09e9d66d605..dec130e7078c 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -544,7 +544,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
544 * Increment event counter and perform fixup for the pre-signal 544 * Increment event counter and perform fixup for the pre-signal
545 * frame. 545 * frame.
546 */ 546 */
547 rseq_signal_deliver(regs); 547 rseq_signal_deliver(ksig, regs);
548 548
549 /* 549 /*
550 * Set up the stack frame 550 * Set up the stack frame
@@ -666,7 +666,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
666 } else { 666 } else {
667 clear_thread_flag(TIF_NOTIFY_RESUME); 667 clear_thread_flag(TIF_NOTIFY_RESUME);
668 tracehook_notify_resume(regs); 668 tracehook_notify_resume(regs);
669 rseq_handle_notify_resume(regs); 669 rseq_handle_notify_resume(NULL, regs);
670 } 670 }
671 } 671 }
672 local_irq_disable(); 672 local_irq_disable();
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
index 8073625371f5..07060e5b5864 100644
--- a/arch/arm/xen/enlighten.c
+++ b/arch/arm/xen/enlighten.c
@@ -59,6 +59,9 @@ struct xen_memory_region xen_extra_mem[XEN_EXTRA_MEM_MAX_REGIONS] __initdata;
59 59
60static __read_mostly unsigned int xen_events_irq; 60static __read_mostly unsigned int xen_events_irq;
61 61
62uint32_t xen_start_flags;
63EXPORT_SYMBOL(xen_start_flags);
64
62int xen_remap_domain_gfn_array(struct vm_area_struct *vma, 65int xen_remap_domain_gfn_array(struct vm_area_struct *vma,
63 unsigned long addr, 66 unsigned long addr,
64 xen_pfn_t *gfn, int nr, 67 xen_pfn_t *gfn, int nr,
@@ -293,9 +296,7 @@ void __init xen_early_init(void)
293 xen_setup_features(); 296 xen_setup_features();
294 297
295 if (xen_feature(XENFEAT_dom0)) 298 if (xen_feature(XENFEAT_dom0))
296 xen_start_info->flags |= SIF_INITDOMAIN|SIF_PRIVILEGED; 299 xen_start_flags |= SIF_INITDOMAIN|SIF_PRIVILEGED;
297 else
298 xen_start_info->flags &= ~(SIF_INITDOMAIN|SIF_PRIVILEGED);
299 300
300 if (!console_set_on_cmdline && !xen_initial_domain()) 301 if (!console_set_on_cmdline && !xen_initial_domain())
301 add_preferred_console("hvc", 0, NULL); 302 add_preferred_console("hvc", 0, NULL);
diff --git a/arch/arm64/crypto/aes-glue.c b/arch/arm64/crypto/aes-glue.c
index 253188fb8cb0..e3e50950a863 100644
--- a/arch/arm64/crypto/aes-glue.c
+++ b/arch/arm64/crypto/aes-glue.c
@@ -223,8 +223,8 @@ static int ctr_encrypt(struct skcipher_request *req)
223 kernel_neon_begin(); 223 kernel_neon_begin();
224 aes_ctr_encrypt(walk.dst.virt.addr, walk.src.virt.addr, 224 aes_ctr_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
225 (u8 *)ctx->key_enc, rounds, blocks, walk.iv); 225 (u8 *)ctx->key_enc, rounds, blocks, walk.iv);
226 err = skcipher_walk_done(&walk, walk.nbytes % AES_BLOCK_SIZE);
227 kernel_neon_end(); 226 kernel_neon_end();
227 err = skcipher_walk_done(&walk, walk.nbytes % AES_BLOCK_SIZE);
228 } 228 }
229 if (walk.nbytes) { 229 if (walk.nbytes) {
230 u8 __aligned(8) tail[AES_BLOCK_SIZE]; 230 u8 __aligned(8) tail[AES_BLOCK_SIZE];
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index fda9a8ca48be..fe8777b12f86 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -306,6 +306,7 @@ struct kvm_vcpu_arch {
306#define KVM_ARM64_FP_ENABLED (1 << 1) /* guest FP regs loaded */ 306#define KVM_ARM64_FP_ENABLED (1 << 1) /* guest FP regs loaded */
307#define KVM_ARM64_FP_HOST (1 << 2) /* host FP regs loaded */ 307#define KVM_ARM64_FP_HOST (1 << 2) /* host FP regs loaded */
308#define KVM_ARM64_HOST_SVE_IN_USE (1 << 3) /* backup for host TIF_SVE */ 308#define KVM_ARM64_HOST_SVE_IN_USE (1 << 3) /* backup for host TIF_SVE */
309#define KVM_ARM64_HOST_SVE_ENABLED (1 << 4) /* SVE enabled for EL0 */
309 310
310#define vcpu_gp_regs(v) (&(v)->arch.ctxt.gp_regs) 311#define vcpu_gp_regs(v) (&(v)->arch.ctxt.gp_regs)
311 312
diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
index 6171178075dc..a8f84812c6e8 100644
--- a/arch/arm64/include/asm/sysreg.h
+++ b/arch/arm64/include/asm/sysreg.h
@@ -728,6 +728,17 @@ asm(
728 asm volatile("msr_s " __stringify(r) ", %x0" : : "rZ" (__val)); \ 728 asm volatile("msr_s " __stringify(r) ", %x0" : : "rZ" (__val)); \
729} while (0) 729} while (0)
730 730
731/*
732 * Modify bits in a sysreg. Bits in the clear mask are zeroed, then bits in the
733 * set mask are set. Other bits are left as-is.
734 */
735#define sysreg_clear_set(sysreg, clear, set) do { \
736 u64 __scs_val = read_sysreg(sysreg); \
737 u64 __scs_new = (__scs_val & ~(u64)(clear)) | (set); \
738 if (__scs_new != __scs_val) \
739 write_sysreg(__scs_new, sysreg); \
740} while (0)
741
731static inline void config_sctlr_el1(u32 clear, u32 set) 742static inline void config_sctlr_el1(u32 clear, u32 set)
732{ 743{
733 u32 val; 744 u32 val;
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
index d2856b129097..f24892a40d2c 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -937,7 +937,7 @@ static int __init parse_kpti(char *str)
937 __kpti_forced = enabled ? 1 : -1; 937 __kpti_forced = enabled ? 1 : -1;
938 return 0; 938 return 0;
939} 939}
940__setup("kpti=", parse_kpti); 940early_param("kpti", parse_kpti);
941#endif /* CONFIG_UNMAP_KERNEL_AT_EL0 */ 941#endif /* CONFIG_UNMAP_KERNEL_AT_EL0 */
942 942
943#ifdef CONFIG_ARM64_HW_AFDBM 943#ifdef CONFIG_ARM64_HW_AFDBM
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index f3e2e3aec0b0..2faa9863d2e5 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -179,7 +179,7 @@ int __cpu_up(unsigned int cpu, struct task_struct *idle)
179 * This is the secondary CPU boot entry. We're using this CPUs 179 * This is the secondary CPU boot entry. We're using this CPUs
180 * idle thread stack, but a set of temporary page tables. 180 * idle thread stack, but a set of temporary page tables.
181 */ 181 */
182asmlinkage void secondary_start_kernel(void) 182asmlinkage notrace void secondary_start_kernel(void)
183{ 183{
184 u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK; 184 u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK;
185 struct mm_struct *mm = &init_mm; 185 struct mm_struct *mm = &init_mm;
diff --git a/arch/arm64/kvm/fpsimd.c b/arch/arm64/kvm/fpsimd.c
index dc6ecfa5a2d2..aac7808ce216 100644
--- a/arch/arm64/kvm/fpsimd.c
+++ b/arch/arm64/kvm/fpsimd.c
@@ -5,13 +5,14 @@
5 * Copyright 2018 Arm Limited 5 * Copyright 2018 Arm Limited
6 * Author: Dave Martin <Dave.Martin@arm.com> 6 * Author: Dave Martin <Dave.Martin@arm.com>
7 */ 7 */
8#include <linux/bottom_half.h> 8#include <linux/irqflags.h>
9#include <linux/sched.h> 9#include <linux/sched.h>
10#include <linux/thread_info.h> 10#include <linux/thread_info.h>
11#include <linux/kvm_host.h> 11#include <linux/kvm_host.h>
12#include <asm/kvm_asm.h> 12#include <asm/kvm_asm.h>
13#include <asm/kvm_host.h> 13#include <asm/kvm_host.h>
14#include <asm/kvm_mmu.h> 14#include <asm/kvm_mmu.h>
15#include <asm/sysreg.h>
15 16
16/* 17/*
17 * Called on entry to KVM_RUN unless this vcpu previously ran at least 18 * Called on entry to KVM_RUN unless this vcpu previously ran at least
@@ -61,10 +62,16 @@ void kvm_arch_vcpu_load_fp(struct kvm_vcpu *vcpu)
61{ 62{
62 BUG_ON(!current->mm); 63 BUG_ON(!current->mm);
63 64
64 vcpu->arch.flags &= ~(KVM_ARM64_FP_ENABLED | KVM_ARM64_HOST_SVE_IN_USE); 65 vcpu->arch.flags &= ~(KVM_ARM64_FP_ENABLED |
66 KVM_ARM64_HOST_SVE_IN_USE |
67 KVM_ARM64_HOST_SVE_ENABLED);
65 vcpu->arch.flags |= KVM_ARM64_FP_HOST; 68 vcpu->arch.flags |= KVM_ARM64_FP_HOST;
69
66 if (test_thread_flag(TIF_SVE)) 70 if (test_thread_flag(TIF_SVE))
67 vcpu->arch.flags |= KVM_ARM64_HOST_SVE_IN_USE; 71 vcpu->arch.flags |= KVM_ARM64_HOST_SVE_IN_USE;
72
73 if (read_sysreg(cpacr_el1) & CPACR_EL1_ZEN_EL0EN)
74 vcpu->arch.flags |= KVM_ARM64_HOST_SVE_ENABLED;
68} 75}
69 76
70/* 77/*
@@ -92,19 +99,30 @@ void kvm_arch_vcpu_ctxsync_fp(struct kvm_vcpu *vcpu)
92 */ 99 */
93void kvm_arch_vcpu_put_fp(struct kvm_vcpu *vcpu) 100void kvm_arch_vcpu_put_fp(struct kvm_vcpu *vcpu)
94{ 101{
95 local_bh_disable(); 102 unsigned long flags;
96 103
97 update_thread_flag(TIF_SVE, 104 local_irq_save(flags);
98 vcpu->arch.flags & KVM_ARM64_HOST_SVE_IN_USE);
99 105
100 if (vcpu->arch.flags & KVM_ARM64_FP_ENABLED) { 106 if (vcpu->arch.flags & KVM_ARM64_FP_ENABLED) {
101 /* Clean guest FP state to memory and invalidate cpu view */ 107 /* Clean guest FP state to memory and invalidate cpu view */
102 fpsimd_save(); 108 fpsimd_save();
103 fpsimd_flush_cpu_state(); 109 fpsimd_flush_cpu_state();
104 } else if (!test_thread_flag(TIF_FOREIGN_FPSTATE)) { 110 } else if (system_supports_sve()) {
105 /* Ensure user trap controls are correctly restored */ 111 /*
106 fpsimd_bind_task_to_cpu(); 112 * The FPSIMD/SVE state in the CPU has not been touched, and we
113 * have SVE (and VHE): CPACR_EL1 (alias CPTR_EL2) has been
114 * reset to CPACR_EL1_DEFAULT by the Hyp code, disabling SVE
115 * for EL0. To avoid spurious traps, restore the trap state
116 * seen by kvm_arch_vcpu_load_fp():
117 */
118 if (vcpu->arch.flags & KVM_ARM64_HOST_SVE_ENABLED)
119 sysreg_clear_set(CPACR_EL1, 0, CPACR_EL1_ZEN_EL0EN);
120 else
121 sysreg_clear_set(CPACR_EL1, CPACR_EL1_ZEN_EL0EN, 0);
107 } 122 }
108 123
109 local_bh_enable(); 124 update_thread_flag(TIF_SVE,
125 vcpu->arch.flags & KVM_ARM64_HOST_SVE_IN_USE);
126
127 local_irq_restore(flags);
110} 128}
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index 49e217ac7e1e..61e93f0b5482 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -583,13 +583,14 @@ static void *__iommu_alloc_attrs(struct device *dev, size_t size,
583 size >> PAGE_SHIFT); 583 size >> PAGE_SHIFT);
584 return NULL; 584 return NULL;
585 } 585 }
586 if (!coherent)
587 __dma_flush_area(page_to_virt(page), iosize);
588
589 addr = dma_common_contiguous_remap(page, size, VM_USERMAP, 586 addr = dma_common_contiguous_remap(page, size, VM_USERMAP,
590 prot, 587 prot,
591 __builtin_return_address(0)); 588 __builtin_return_address(0));
592 if (!addr) { 589 if (addr) {
590 memset(addr, 0, size);
591 if (!coherent)
592 __dma_flush_area(page_to_virt(page), iosize);
593 } else {
593 iommu_dma_unmap_page(dev, *handle, iosize, 0, attrs); 594 iommu_dma_unmap_page(dev, *handle, iosize, 0, attrs);
594 dma_release_from_contiguous(dev, page, 595 dma_release_from_contiguous(dev, page,
595 size >> PAGE_SHIFT); 596 size >> PAGE_SHIFT);
diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
index 5f9a73a4452c..03646e6a2ef4 100644
--- a/arch/arm64/mm/proc.S
+++ b/arch/arm64/mm/proc.S
@@ -217,8 +217,9 @@ ENDPROC(idmap_cpu_replace_ttbr1)
217 217
218 .macro __idmap_kpti_put_pgtable_ent_ng, type 218 .macro __idmap_kpti_put_pgtable_ent_ng, type
219 orr \type, \type, #PTE_NG // Same bit for blocks and pages 219 orr \type, \type, #PTE_NG // Same bit for blocks and pages
220 str \type, [cur_\()\type\()p] // Update the entry and ensure it 220 str \type, [cur_\()\type\()p] // Update the entry and ensure
221 dc civac, cur_\()\type\()p // is visible to all CPUs. 221 dmb sy // that it is visible to all
222 dc civac, cur_\()\type\()p // CPUs.
222 .endm 223 .endm
223 224
224/* 225/*
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 3f9deec70b92..08c10c518f83 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -65,6 +65,7 @@ config MIPS
65 select HAVE_OPROFILE 65 select HAVE_OPROFILE
66 select HAVE_PERF_EVENTS 66 select HAVE_PERF_EVENTS
67 select HAVE_REGS_AND_STACK_ACCESS_API 67 select HAVE_REGS_AND_STACK_ACCESS_API
68 select HAVE_RSEQ
68 select HAVE_STACKPROTECTOR 69 select HAVE_STACKPROTECTOR
69 select HAVE_SYSCALL_TRACEPOINTS 70 select HAVE_SYSCALL_TRACEPOINTS
70 select HAVE_VIRT_CPU_ACCOUNTING_GEN if 64BIT || !SMP 71 select HAVE_VIRT_CPU_ACCOUNTING_GEN if 64BIT || !SMP
diff --git a/arch/mips/ath79/mach-pb44.c b/arch/mips/ath79/mach-pb44.c
index 6b2c6f3baefa..75fb96ca61db 100644
--- a/arch/mips/ath79/mach-pb44.c
+++ b/arch/mips/ath79/mach-pb44.c
@@ -34,7 +34,7 @@
34#define PB44_KEYS_DEBOUNCE_INTERVAL (3 * PB44_KEYS_POLL_INTERVAL) 34#define PB44_KEYS_DEBOUNCE_INTERVAL (3 * PB44_KEYS_POLL_INTERVAL)
35 35
36static struct gpiod_lookup_table pb44_i2c_gpiod_table = { 36static struct gpiod_lookup_table pb44_i2c_gpiod_table = {
37 .dev_id = "i2c-gpio", 37 .dev_id = "i2c-gpio.0",
38 .table = { 38 .table = {
39 GPIO_LOOKUP_IDX("ath79-gpio", PB44_GPIO_I2C_SDA, 39 GPIO_LOOKUP_IDX("ath79-gpio", PB44_GPIO_I2C_SDA,
40 NULL, 0, GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN), 40 NULL, 0, GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c
index 6054d49e608e..8c9cbf13d32a 100644
--- a/arch/mips/bcm47xx/setup.c
+++ b/arch/mips/bcm47xx/setup.c
@@ -212,6 +212,12 @@ static int __init bcm47xx_cpu_fixes(void)
212 */ 212 */
213 if (bcm47xx_bus.bcma.bus.chipinfo.id == BCMA_CHIP_ID_BCM4706) 213 if (bcm47xx_bus.bcma.bus.chipinfo.id == BCMA_CHIP_ID_BCM4706)
214 cpu_wait = NULL; 214 cpu_wait = NULL;
215
216 /*
217 * BCM47XX Erratum "R10: PCIe Transactions Periodically Fail"
218 * Enable ExternalSync for sync instruction to take effect
219 */
220 set_c0_config7(MIPS_CONF7_ES);
215 break; 221 break;
216#endif 222#endif
217 } 223 }
diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
index a7d0b836f2f7..cea8ad864b3f 100644
--- a/arch/mips/include/asm/io.h
+++ b/arch/mips/include/asm/io.h
@@ -414,6 +414,8 @@ static inline type pfx##in##bwlq##p(unsigned long port) \
414 __val = *__addr; \ 414 __val = *__addr; \
415 slow; \ 415 slow; \
416 \ 416 \
417 /* prevent prefetching of coherent DMA data prematurely */ \
418 rmb(); \
417 return pfx##ioswab##bwlq(__addr, __val); \ 419 return pfx##ioswab##bwlq(__addr, __val); \
418} 420}
419 421
diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h
index ae461d91cd1f..0bc270806ec5 100644
--- a/arch/mips/include/asm/mipsregs.h
+++ b/arch/mips/include/asm/mipsregs.h
@@ -681,6 +681,8 @@
681#define MIPS_CONF7_WII (_ULCAST_(1) << 31) 681#define MIPS_CONF7_WII (_ULCAST_(1) << 31)
682 682
683#define MIPS_CONF7_RPS (_ULCAST_(1) << 2) 683#define MIPS_CONF7_RPS (_ULCAST_(1) << 2)
684/* ExternalSync */
685#define MIPS_CONF7_ES (_ULCAST_(1) << 8)
684 686
685#define MIPS_CONF7_IAR (_ULCAST_(1) << 10) 687#define MIPS_CONF7_IAR (_ULCAST_(1) << 10)
686#define MIPS_CONF7_AR (_ULCAST_(1) << 16) 688#define MIPS_CONF7_AR (_ULCAST_(1) << 16)
@@ -2765,6 +2767,7 @@ __BUILD_SET_C0(status)
2765__BUILD_SET_C0(cause) 2767__BUILD_SET_C0(cause)
2766__BUILD_SET_C0(config) 2768__BUILD_SET_C0(config)
2767__BUILD_SET_C0(config5) 2769__BUILD_SET_C0(config5)
2770__BUILD_SET_C0(config7)
2768__BUILD_SET_C0(intcontrol) 2771__BUILD_SET_C0(intcontrol)
2769__BUILD_SET_C0(intctl) 2772__BUILD_SET_C0(intctl)
2770__BUILD_SET_C0(srsmap) 2773__BUILD_SET_C0(srsmap)
diff --git a/arch/mips/include/uapi/asm/unistd.h b/arch/mips/include/uapi/asm/unistd.h
index bb05e9916a5f..f25dd1d83fb7 100644
--- a/arch/mips/include/uapi/asm/unistd.h
+++ b/arch/mips/include/uapi/asm/unistd.h
@@ -388,17 +388,19 @@
388#define __NR_pkey_alloc (__NR_Linux + 364) 388#define __NR_pkey_alloc (__NR_Linux + 364)
389#define __NR_pkey_free (__NR_Linux + 365) 389#define __NR_pkey_free (__NR_Linux + 365)
390#define __NR_statx (__NR_Linux + 366) 390#define __NR_statx (__NR_Linux + 366)
391#define __NR_rseq (__NR_Linux + 367)
392#define __NR_io_pgetevents (__NR_Linux + 368)
391 393
392 394
393/* 395/*
394 * Offset of the last Linux o32 flavoured syscall 396 * Offset of the last Linux o32 flavoured syscall
395 */ 397 */
396#define __NR_Linux_syscalls 366 398#define __NR_Linux_syscalls 368
397 399
398#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ 400#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
399 401
400#define __NR_O32_Linux 4000 402#define __NR_O32_Linux 4000
401#define __NR_O32_Linux_syscalls 366 403#define __NR_O32_Linux_syscalls 368
402 404
403#if _MIPS_SIM == _MIPS_SIM_ABI64 405#if _MIPS_SIM == _MIPS_SIM_ABI64
404 406
@@ -733,16 +735,18 @@
733#define __NR_pkey_alloc (__NR_Linux + 324) 735#define __NR_pkey_alloc (__NR_Linux + 324)
734#define __NR_pkey_free (__NR_Linux + 325) 736#define __NR_pkey_free (__NR_Linux + 325)
735#define __NR_statx (__NR_Linux + 326) 737#define __NR_statx (__NR_Linux + 326)
738#define __NR_rseq (__NR_Linux + 327)
739#define __NR_io_pgetevents (__NR_Linux + 328)
736 740
737/* 741/*
738 * Offset of the last Linux 64-bit flavoured syscall 742 * Offset of the last Linux 64-bit flavoured syscall
739 */ 743 */
740#define __NR_Linux_syscalls 326 744#define __NR_Linux_syscalls 328
741 745
742#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ 746#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
743 747
744#define __NR_64_Linux 5000 748#define __NR_64_Linux 5000
745#define __NR_64_Linux_syscalls 326 749#define __NR_64_Linux_syscalls 328
746 750
747#if _MIPS_SIM == _MIPS_SIM_NABI32 751#if _MIPS_SIM == _MIPS_SIM_NABI32
748 752
@@ -1081,15 +1085,17 @@
1081#define __NR_pkey_alloc (__NR_Linux + 328) 1085#define __NR_pkey_alloc (__NR_Linux + 328)
1082#define __NR_pkey_free (__NR_Linux + 329) 1086#define __NR_pkey_free (__NR_Linux + 329)
1083#define __NR_statx (__NR_Linux + 330) 1087#define __NR_statx (__NR_Linux + 330)
1088#define __NR_rseq (__NR_Linux + 331)
1089#define __NR_io_pgetevents (__NR_Linux + 332)
1084 1090
1085/* 1091/*
1086 * Offset of the last N32 flavoured syscall 1092 * Offset of the last N32 flavoured syscall
1087 */ 1093 */
1088#define __NR_Linux_syscalls 330 1094#define __NR_Linux_syscalls 332
1089 1095
1090#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ 1096#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
1091 1097
1092#define __NR_N32_Linux 6000 1098#define __NR_N32_Linux 6000
1093#define __NR_N32_Linux_syscalls 330 1099#define __NR_N32_Linux_syscalls 332
1094 1100
1095#endif /* _UAPI_ASM_UNISTD_H */ 1101#endif /* _UAPI_ASM_UNISTD_H */
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S
index 38a302919e6b..d7de8adcfcc8 100644
--- a/arch/mips/kernel/entry.S
+++ b/arch/mips/kernel/entry.S
@@ -79,6 +79,10 @@ FEXPORT(ret_from_fork)
79 jal schedule_tail # a0 = struct task_struct *prev 79 jal schedule_tail # a0 = struct task_struct *prev
80 80
81FEXPORT(syscall_exit) 81FEXPORT(syscall_exit)
82#ifdef CONFIG_DEBUG_RSEQ
83 move a0, sp
84 jal rseq_syscall
85#endif
82 local_irq_disable # make sure need_resched and 86 local_irq_disable # make sure need_resched and
83 # signals dont change between 87 # signals dont change between
84 # sampling and return 88 # sampling and return
@@ -141,6 +145,10 @@ work_notifysig: # deal with pending signals and
141 j resume_userspace_check 145 j resume_userspace_check
142 146
143FEXPORT(syscall_exit_partial) 147FEXPORT(syscall_exit_partial)
148#ifdef CONFIG_DEBUG_RSEQ
149 move a0, sp
150 jal rseq_syscall
151#endif
144 local_irq_disable # make sure need_resched doesn't 152 local_irq_disable # make sure need_resched doesn't
145 # change between and return 153 # change between and return
146 LONG_L a2, TI_FLAGS($28) # current->work 154 LONG_L a2, TI_FLAGS($28) # current->work
diff --git a/arch/mips/kernel/mcount.S b/arch/mips/kernel/mcount.S
index f2ee7e1e3342..cff52b283e03 100644
--- a/arch/mips/kernel/mcount.S
+++ b/arch/mips/kernel/mcount.S
@@ -119,10 +119,20 @@ NESTED(_mcount, PT_SIZE, ra)
119EXPORT_SYMBOL(_mcount) 119EXPORT_SYMBOL(_mcount)
120 PTR_LA t1, ftrace_stub 120 PTR_LA t1, ftrace_stub
121 PTR_L t2, ftrace_trace_function /* Prepare t2 for (1) */ 121 PTR_L t2, ftrace_trace_function /* Prepare t2 for (1) */
122 bne t1, t2, static_trace 122 beq t1, t2, fgraph_trace
123 nop 123 nop
124 124
125 MCOUNT_SAVE_REGS
126
127 move a0, ra /* arg1: self return address */
128 jalr t2 /* (1) call *ftrace_trace_function */
129 move a1, AT /* arg2: parent's return address */
130
131 MCOUNT_RESTORE_REGS
132
133fgraph_trace:
125#ifdef CONFIG_FUNCTION_GRAPH_TRACER 134#ifdef CONFIG_FUNCTION_GRAPH_TRACER
135 PTR_LA t1, ftrace_stub
126 PTR_L t3, ftrace_graph_return 136 PTR_L t3, ftrace_graph_return
127 bne t1, t3, ftrace_graph_caller 137 bne t1, t3, ftrace_graph_caller
128 nop 138 nop
@@ -131,24 +141,11 @@ EXPORT_SYMBOL(_mcount)
131 bne t1, t3, ftrace_graph_caller 141 bne t1, t3, ftrace_graph_caller
132 nop 142 nop
133#endif 143#endif
134 b ftrace_stub
135#ifdef CONFIG_32BIT
136 addiu sp, sp, 8
137#else
138 nop
139#endif
140 144
141static_trace:
142 MCOUNT_SAVE_REGS
143
144 move a0, ra /* arg1: self return address */
145 jalr t2 /* (1) call *ftrace_trace_function */
146 move a1, AT /* arg2: parent's return address */
147
148 MCOUNT_RESTORE_REGS
149#ifdef CONFIG_32BIT 145#ifdef CONFIG_32BIT
150 addiu sp, sp, 8 146 addiu sp, sp, 8
151#endif 147#endif
148
152 .globl ftrace_stub 149 .globl ftrace_stub
153ftrace_stub: 150ftrace_stub:
154 RETURN_BACK 151 RETURN_BACK
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
index a9a7d78803cd..91d3c8c46097 100644
--- a/arch/mips/kernel/scall32-o32.S
+++ b/arch/mips/kernel/scall32-o32.S
@@ -590,3 +590,5 @@ EXPORT(sys_call_table)
590 PTR sys_pkey_alloc 590 PTR sys_pkey_alloc
591 PTR sys_pkey_free /* 4365 */ 591 PTR sys_pkey_free /* 4365 */
592 PTR sys_statx 592 PTR sys_statx
593 PTR sys_rseq
594 PTR sys_io_pgetevents
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S
index 65d5aeeb9bdb..358d9599983d 100644
--- a/arch/mips/kernel/scall64-64.S
+++ b/arch/mips/kernel/scall64-64.S
@@ -439,4 +439,6 @@ EXPORT(sys_call_table)
439 PTR sys_pkey_alloc 439 PTR sys_pkey_alloc
440 PTR sys_pkey_free /* 5325 */ 440 PTR sys_pkey_free /* 5325 */
441 PTR sys_statx 441 PTR sys_statx
442 PTR sys_rseq
443 PTR sys_io_pgetevents
442 .size sys_call_table,.-sys_call_table 444 .size sys_call_table,.-sys_call_table
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
index cbf190ef9e8a..c65eaacc1abf 100644
--- a/arch/mips/kernel/scall64-n32.S
+++ b/arch/mips/kernel/scall64-n32.S
@@ -434,4 +434,6 @@ EXPORT(sysn32_call_table)
434 PTR sys_pkey_alloc 434 PTR sys_pkey_alloc
435 PTR sys_pkey_free 435 PTR sys_pkey_free
436 PTR sys_statx /* 6330 */ 436 PTR sys_statx /* 6330 */
437 PTR sys_rseq
438 PTR compat_sys_io_pgetevents
437 .size sysn32_call_table,.-sysn32_call_table 439 .size sysn32_call_table,.-sysn32_call_table
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
index 9ebe3e2403b1..73913f072e39 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -583,4 +583,6 @@ EXPORT(sys32_call_table)
583 PTR sys_pkey_alloc 583 PTR sys_pkey_alloc
584 PTR sys_pkey_free /* 4365 */ 584 PTR sys_pkey_free /* 4365 */
585 PTR sys_statx 585 PTR sys_statx
586 PTR sys_rseq
587 PTR compat_sys_io_pgetevents
586 .size sys32_call_table,.-sys32_call_table 588 .size sys32_call_table,.-sys32_call_table
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
index 9e224469c788..00f2535d2226 100644
--- a/arch/mips/kernel/signal.c
+++ b/arch/mips/kernel/signal.c
@@ -801,6 +801,8 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
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);
805
804 if (sig_uses_siginfo(&ksig->ka, abi)) 806 if (sig_uses_siginfo(&ksig->ka, abi))
805 ret = abi->setup_rt_frame(vdso + abi->vdso->off_rt_sigreturn, 807 ret = abi->setup_rt_frame(vdso + abi->vdso->off_rt_sigreturn,
806 ksig, regs, oldset); 808 ksig, regs, oldset);
@@ -868,6 +870,7 @@ asmlinkage void do_notify_resume(struct pt_regs *regs, void *unused,
868 if (thread_info_flags & _TIF_NOTIFY_RESUME) { 870 if (thread_info_flags & _TIF_NOTIFY_RESUME) {
869 clear_thread_flag(TIF_NOTIFY_RESUME); 871 clear_thread_flag(TIF_NOTIFY_RESUME);
870 tracehook_notify_resume(regs); 872 tracehook_notify_resume(regs);
873 rseq_handle_notify_resume(regs);
871 } 874 }
872 875
873 user_enter(); 876 user_enter();
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index bd06a3ccda31..2ea575cb3401 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -244,6 +244,7 @@ cpu-as-$(CONFIG_4xx) += -Wa,-m405
244cpu-as-$(CONFIG_ALTIVEC) += $(call as-option,-Wa$(comma)-maltivec) 244cpu-as-$(CONFIG_ALTIVEC) += $(call as-option,-Wa$(comma)-maltivec)
245cpu-as-$(CONFIG_E200) += -Wa,-me200 245cpu-as-$(CONFIG_E200) += -Wa,-me200
246cpu-as-$(CONFIG_PPC_BOOK3S_64) += -Wa,-mpower4 246cpu-as-$(CONFIG_PPC_BOOK3S_64) += -Wa,-mpower4
247cpu-as-$(CONFIG_PPC_E500MC) += $(call as-option,-Wa$(comma)-me500mc)
247 248
248KBUILD_AFLAGS += $(cpu-as-y) 249KBUILD_AFLAGS += $(cpu-as-y)
249KBUILD_CFLAGS += $(cpu-as-y) 250KBUILD_CFLAGS += $(cpu-as-y)
diff --git a/arch/powerpc/include/asm/book3s/32/pgalloc.h b/arch/powerpc/include/asm/book3s/32/pgalloc.h
index 6a6673907e45..e4633803fe43 100644
--- a/arch/powerpc/include/asm/book3s/32/pgalloc.h
+++ b/arch/powerpc/include/asm/book3s/32/pgalloc.h
@@ -108,6 +108,7 @@ static inline void pgtable_free(void *table, unsigned index_size)
108} 108}
109 109
110#define check_pgt_cache() do { } while (0) 110#define check_pgt_cache() do { } while (0)
111#define get_hugepd_cache_index(x) (x)
111 112
112#ifdef CONFIG_SMP 113#ifdef CONFIG_SMP
113static inline void pgtable_free_tlb(struct mmu_gather *tlb, 114static inline void pgtable_free_tlb(struct mmu_gather *tlb,
diff --git a/arch/powerpc/include/asm/book3s/64/pgtable-4k.h b/arch/powerpc/include/asm/book3s/64/pgtable-4k.h
index af5f2baac80f..a069dfcac9a9 100644
--- a/arch/powerpc/include/asm/book3s/64/pgtable-4k.h
+++ b/arch/powerpc/include/asm/book3s/64/pgtable-4k.h
@@ -49,6 +49,27 @@ static inline int hugepd_ok(hugepd_t hpd)
49} 49}
50#define is_hugepd(hpd) (hugepd_ok(hpd)) 50#define is_hugepd(hpd) (hugepd_ok(hpd))
51 51
52/*
53 * 16M and 16G huge page directory tables are allocated from slab cache
54 *
55 */
56#define H_16M_CACHE_INDEX (PAGE_SHIFT + H_PTE_INDEX_SIZE + H_PMD_INDEX_SIZE - 24)
57#define H_16G_CACHE_INDEX \
58 (PAGE_SHIFT + H_PTE_INDEX_SIZE + H_PMD_INDEX_SIZE + H_PUD_INDEX_SIZE - 34)
59
60static inline int get_hugepd_cache_index(int index)
61{
62 switch (index) {
63 case H_16M_CACHE_INDEX:
64 return HTLB_16M_INDEX;
65 case H_16G_CACHE_INDEX:
66 return HTLB_16G_INDEX;
67 default:
68 BUG();
69 }
70 /* should not reach */
71}
72
52#else /* !CONFIG_HUGETLB_PAGE */ 73#else /* !CONFIG_HUGETLB_PAGE */
53static inline int pmd_huge(pmd_t pmd) { return 0; } 74static inline int pmd_huge(pmd_t pmd) { return 0; }
54static inline int pud_huge(pud_t pud) { return 0; } 75static inline int pud_huge(pud_t pud) { return 0; }
diff --git a/arch/powerpc/include/asm/book3s/64/pgtable-64k.h b/arch/powerpc/include/asm/book3s/64/pgtable-64k.h
index fb4b3ba52339..d7ee249d6890 100644
--- a/arch/powerpc/include/asm/book3s/64/pgtable-64k.h
+++ b/arch/powerpc/include/asm/book3s/64/pgtable-64k.h
@@ -45,8 +45,17 @@ static inline int hugepd_ok(hugepd_t hpd)
45{ 45{
46 return 0; 46 return 0;
47} 47}
48
48#define is_hugepd(pdep) 0 49#define is_hugepd(pdep) 0
49 50
51/*
52 * This should never get called
53 */
54static inline int get_hugepd_cache_index(int index)
55{
56 BUG();
57}
58
50#else /* !CONFIG_HUGETLB_PAGE */ 59#else /* !CONFIG_HUGETLB_PAGE */
51static inline int pmd_huge(pmd_t pmd) { return 0; } 60static inline int pmd_huge(pmd_t pmd) { return 0; }
52static inline int pud_huge(pud_t pud) { return 0; } 61static inline int pud_huge(pud_t pud) { return 0; }
diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h
index 63cee159022b..42aafba7a308 100644
--- a/arch/powerpc/include/asm/book3s/64/pgtable.h
+++ b/arch/powerpc/include/asm/book3s/64/pgtable.h
@@ -287,6 +287,11 @@ enum pgtable_index {
287 PMD_INDEX, 287 PMD_INDEX,
288 PUD_INDEX, 288 PUD_INDEX,
289 PGD_INDEX, 289 PGD_INDEX,
290 /*
291 * Below are used with 4k page size and hugetlb
292 */
293 HTLB_16M_INDEX,
294 HTLB_16G_INDEX,
290}; 295};
291 296
292extern unsigned long __vmalloc_start; 297extern unsigned long __vmalloc_start;
diff --git a/arch/powerpc/include/asm/nmi.h b/arch/powerpc/include/asm/nmi.h
index 0f571e0ebca1..bd9ba8defd72 100644
--- a/arch/powerpc/include/asm/nmi.h
+++ b/arch/powerpc/include/asm/nmi.h
@@ -8,7 +8,7 @@ extern void arch_touch_nmi_watchdog(void);
8static inline void arch_touch_nmi_watchdog(void) {} 8static inline void arch_touch_nmi_watchdog(void) {}
9#endif 9#endif
10 10
11#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_STACKTRACE) 11#if defined(CONFIG_NMI_IPI) && defined(CONFIG_STACKTRACE)
12extern void arch_trigger_cpumask_backtrace(const cpumask_t *mask, 12extern void arch_trigger_cpumask_backtrace(const cpumask_t *mask,
13 bool exclude_self); 13 bool exclude_self);
14#define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace 14#define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace
diff --git a/arch/powerpc/include/asm/nohash/32/pgalloc.h b/arch/powerpc/include/asm/nohash/32/pgalloc.h
index 1707781d2f20..9de40eb614da 100644
--- a/arch/powerpc/include/asm/nohash/32/pgalloc.h
+++ b/arch/powerpc/include/asm/nohash/32/pgalloc.h
@@ -109,6 +109,7 @@ static inline void pgtable_free(void *table, unsigned index_size)
109} 109}
110 110
111#define check_pgt_cache() do { } while (0) 111#define check_pgt_cache() do { } while (0)
112#define get_hugepd_cache_index(x) (x)
112 113
113#ifdef CONFIG_SMP 114#ifdef CONFIG_SMP
114static inline void pgtable_free_tlb(struct mmu_gather *tlb, 115static inline void pgtable_free_tlb(struct mmu_gather *tlb,
diff --git a/arch/powerpc/include/asm/nohash/64/pgalloc.h b/arch/powerpc/include/asm/nohash/64/pgalloc.h
index 0e693f322cb2..e2d62d033708 100644
--- a/arch/powerpc/include/asm/nohash/64/pgalloc.h
+++ b/arch/powerpc/include/asm/nohash/64/pgalloc.h
@@ -141,6 +141,7 @@ static inline void pgtable_free(void *table, int shift)
141 } 141 }
142} 142}
143 143
144#define get_hugepd_cache_index(x) (x)
144#ifdef CONFIG_SMP 145#ifdef CONFIG_SMP
145static inline void pgtable_free_tlb(struct mmu_gather *tlb, void *table, int shift) 146static inline void pgtable_free_tlb(struct mmu_gather *tlb, void *table, int shift)
146{ 147{
diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
index 4be1c0de9406..96dd3d871986 100644
--- a/arch/powerpc/kernel/dt_cpu_ftrs.c
+++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
@@ -711,7 +711,8 @@ static __init void cpufeatures_cpu_quirks(void)
711 cur_cpu_spec->cpu_features |= CPU_FTR_P9_TM_HV_ASSIST; 711 cur_cpu_spec->cpu_features |= CPU_FTR_P9_TM_HV_ASSIST;
712 cur_cpu_spec->cpu_features |= CPU_FTR_P9_TM_XER_SO_BUG; 712 cur_cpu_spec->cpu_features |= CPU_FTR_P9_TM_XER_SO_BUG;
713 cur_cpu_spec->cpu_features |= CPU_FTR_POWER9_DD2_1; 713 cur_cpu_spec->cpu_features |= CPU_FTR_POWER9_DD2_1;
714 } else /* DD2.1 and up have DD2_1 */ 714 } else if ((version & 0xffff0000) == 0x004e0000)
715 /* DD2.1 and up have DD2_1 */
715 cur_cpu_spec->cpu_features |= CPU_FTR_POWER9_DD2_1; 716 cur_cpu_spec->cpu_features |= CPU_FTR_POWER9_DD2_1;
716 717
717 if ((version & 0xffff0000) == 0x004e0000) { 718 if ((version & 0xffff0000) == 0x004e0000) {
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index 62b1a40d8957..40b44bb53a4e 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -701,11 +701,18 @@ static int ppc_panic_event(struct notifier_block *this,
701 unsigned long event, void *ptr) 701 unsigned long event, void *ptr)
702{ 702{
703 /* 703 /*
704 * panic does a local_irq_disable, but we really
705 * want interrupts to be hard disabled.
706 */
707 hard_irq_disable();
708
709 /*
704 * If firmware-assisted dump has been registered then trigger 710 * If firmware-assisted dump has been registered then trigger
705 * firmware-assisted dump and let firmware handle everything else. 711 * firmware-assisted dump and let firmware handle everything else.
706 */ 712 */
707 crash_fadump(NULL, ptr); 713 crash_fadump(NULL, ptr);
708 ppc_md.panic(ptr); /* May not return */ 714 if (ppc_md.panic)
715 ppc_md.panic(ptr); /* May not return */
709 return NOTIFY_DONE; 716 return NOTIFY_DONE;
710} 717}
711 718
@@ -716,7 +723,8 @@ static struct notifier_block ppc_panic_block = {
716 723
717void __init setup_panic(void) 724void __init setup_panic(void)
718{ 725{
719 if (!ppc_md.panic) 726 /* PPC64 always does a hard irq disable in its panic handler */
727 if (!IS_ENABLED(CONFIG_PPC64) && !ppc_md.panic)
720 return; 728 return;
721 atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block); 729 atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block);
722} 730}
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 7a7ce8ad455e..225bc5f91049 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -387,6 +387,14 @@ void early_setup_secondary(void)
387 387
388#endif /* CONFIG_SMP */ 388#endif /* CONFIG_SMP */
389 389
390void panic_smp_self_stop(void)
391{
392 hard_irq_disable();
393 spin_begin();
394 while (1)
395 spin_cpu_relax();
396}
397
390#if defined(CONFIG_SMP) || defined(CONFIG_KEXEC_CORE) 398#if defined(CONFIG_SMP) || defined(CONFIG_KEXEC_CORE)
391static bool use_spinloop(void) 399static bool use_spinloop(void)
392{ 400{
diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c
index 17fe4339ba59..b3e8db376ecd 100644
--- a/arch/powerpc/kernel/signal.c
+++ b/arch/powerpc/kernel/signal.c
@@ -134,7 +134,7 @@ static void do_signal(struct task_struct *tsk)
134 /* Re-enable the breakpoints for the signal stack */ 134 /* Re-enable the breakpoints for the signal stack */
135 thread_change_pc(tsk, tsk->thread.regs); 135 thread_change_pc(tsk, tsk->thread.regs);
136 136
137 rseq_signal_deliver(tsk->thread.regs); 137 rseq_signal_deliver(&ksig, tsk->thread.regs);
138 138
139 if (is32) { 139 if (is32) {
140 if (ksig.ka.sa.sa_flags & SA_SIGINFO) 140 if (ksig.ka.sa.sa_flags & SA_SIGINFO)
@@ -170,7 +170,7 @@ void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags)
170 if (thread_info_flags & _TIF_NOTIFY_RESUME) { 170 if (thread_info_flags & _TIF_NOTIFY_RESUME) {
171 clear_thread_flag(TIF_NOTIFY_RESUME); 171 clear_thread_flag(TIF_NOTIFY_RESUME);
172 tracehook_notify_resume(regs); 172 tracehook_notify_resume(regs);
173 rseq_handle_notify_resume(regs); 173 rseq_handle_notify_resume(NULL, regs);
174 } 174 }
175 175
176 user_enter(); 176 user_enter();
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 5eadfffabe35..4794d6b4f4d2 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -600,9 +600,6 @@ static void nmi_stop_this_cpu(struct pt_regs *regs)
600 nmi_ipi_busy_count--; 600 nmi_ipi_busy_count--;
601 nmi_ipi_unlock(); 601 nmi_ipi_unlock();
602 602
603 /* Remove this CPU */
604 set_cpu_online(smp_processor_id(), false);
605
606 spin_begin(); 603 spin_begin();
607 while (1) 604 while (1)
608 spin_cpu_relax(); 605 spin_cpu_relax();
@@ -617,9 +614,6 @@ void smp_send_stop(void)
617 614
618static void stop_this_cpu(void *dummy) 615static void stop_this_cpu(void *dummy)
619{ 616{
620 /* Remove this CPU */
621 set_cpu_online(smp_processor_id(), false);
622
623 hard_irq_disable(); 617 hard_irq_disable();
624 spin_begin(); 618 spin_begin();
625 while (1) 619 while (1)
diff --git a/arch/powerpc/kernel/stacktrace.c b/arch/powerpc/kernel/stacktrace.c
index 07e97f289c52..e2c50b55138f 100644
--- a/arch/powerpc/kernel/stacktrace.c
+++ b/arch/powerpc/kernel/stacktrace.c
@@ -196,7 +196,7 @@ save_stack_trace_tsk_reliable(struct task_struct *tsk,
196EXPORT_SYMBOL_GPL(save_stack_trace_tsk_reliable); 196EXPORT_SYMBOL_GPL(save_stack_trace_tsk_reliable);
197#endif /* CONFIG_HAVE_RELIABLE_STACKTRACE */ 197#endif /* CONFIG_HAVE_RELIABLE_STACKTRACE */
198 198
199#ifdef CONFIG_PPC_BOOK3S_64 199#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_NMI_IPI)
200static void handle_backtrace_ipi(struct pt_regs *regs) 200static void handle_backtrace_ipi(struct pt_regs *regs)
201{ 201{
202 nmi_cpu_backtrace(regs); 202 nmi_cpu_backtrace(regs);
@@ -242,4 +242,4 @@ void arch_trigger_cpumask_backtrace(const cpumask_t *mask, bool exclude_self)
242{ 242{
243 nmi_trigger_cpumask_backtrace(mask, exclude_self, raise_backtrace_ipi); 243 nmi_trigger_cpumask_backtrace(mask, exclude_self, raise_backtrace_ipi);
244} 244}
245#endif /* CONFIG_PPC64 */ 245#endif /* defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_NMI_IPI) */
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 7c5f479c5c00..8a9a49c13865 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -337,7 +337,8 @@ static void free_hugepd_range(struct mmu_gather *tlb, hugepd_t *hpdp, int pdshif
337 if (shift >= pdshift) 337 if (shift >= pdshift)
338 hugepd_free(tlb, hugepte); 338 hugepd_free(tlb, hugepte);
339 else 339 else
340 pgtable_free_tlb(tlb, hugepte, pdshift - shift); 340 pgtable_free_tlb(tlb, hugepte,
341 get_hugepd_cache_index(pdshift - shift));
341} 342}
342 343
343static void hugetlb_free_pmd_range(struct mmu_gather *tlb, pud_t *pud, 344static void hugetlb_free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
diff --git a/arch/powerpc/mm/pgtable-book3s64.c b/arch/powerpc/mm/pgtable-book3s64.c
index c1f4ca45c93a..4afbfbb64bfd 100644
--- a/arch/powerpc/mm/pgtable-book3s64.c
+++ b/arch/powerpc/mm/pgtable-book3s64.c
@@ -409,6 +409,18 @@ static inline void pgtable_free(void *table, int index)
409 case PUD_INDEX: 409 case PUD_INDEX:
410 kmem_cache_free(PGT_CACHE(PUD_CACHE_INDEX), table); 410 kmem_cache_free(PGT_CACHE(PUD_CACHE_INDEX), table);
411 break; 411 break;
412#if defined(CONFIG_PPC_4K_PAGES) && defined(CONFIG_HUGETLB_PAGE)
413 /* 16M hugepd directory at pud level */
414 case HTLB_16M_INDEX:
415 BUILD_BUG_ON(H_16M_CACHE_INDEX <= 0);
416 kmem_cache_free(PGT_CACHE(H_16M_CACHE_INDEX), table);
417 break;
418 /* 16G hugepd directory at the pgd level */
419 case HTLB_16G_INDEX:
420 BUILD_BUG_ON(H_16G_CACHE_INDEX <= 0);
421 kmem_cache_free(PGT_CACHE(H_16G_CACHE_INDEX), table);
422 break;
423#endif
412 /* We don't free pgd table via RCU callback */ 424 /* We don't free pgd table via RCU callback */
413 default: 425 default:
414 BUG(); 426 BUG();
diff --git a/arch/powerpc/mm/tlb-radix.c b/arch/powerpc/mm/tlb-radix.c
index 67a6e86d3e7e..1135b43a597c 100644
--- a/arch/powerpc/mm/tlb-radix.c
+++ b/arch/powerpc/mm/tlb-radix.c
@@ -689,22 +689,17 @@ EXPORT_SYMBOL(radix__flush_tlb_kernel_range);
689static unsigned long tlb_single_page_flush_ceiling __read_mostly = 33; 689static unsigned long tlb_single_page_flush_ceiling __read_mostly = 33;
690static unsigned long tlb_local_single_page_flush_ceiling __read_mostly = POWER9_TLB_SETS_RADIX * 2; 690static unsigned long tlb_local_single_page_flush_ceiling __read_mostly = POWER9_TLB_SETS_RADIX * 2;
691 691
692void radix__flush_tlb_range(struct vm_area_struct *vma, unsigned long start, 692static inline void __radix__flush_tlb_range(struct mm_struct *mm,
693 unsigned long end) 693 unsigned long start, unsigned long end,
694 bool flush_all_sizes)
694 695
695{ 696{
696 struct mm_struct *mm = vma->vm_mm;
697 unsigned long pid; 697 unsigned long pid;
698 unsigned int page_shift = mmu_psize_defs[mmu_virtual_psize].shift; 698 unsigned int page_shift = mmu_psize_defs[mmu_virtual_psize].shift;
699 unsigned long page_size = 1UL << page_shift; 699 unsigned long page_size = 1UL << page_shift;
700 unsigned long nr_pages = (end - start) >> page_shift; 700 unsigned long nr_pages = (end - start) >> page_shift;
701 bool local, full; 701 bool local, full;
702 702
703#ifdef CONFIG_HUGETLB_PAGE
704 if (is_vm_hugetlb_page(vma))
705 return radix__flush_hugetlb_tlb_range(vma, start, end);
706#endif
707
708 pid = mm->context.id; 703 pid = mm->context.id;
709 if (unlikely(pid == MMU_NO_CONTEXT)) 704 if (unlikely(pid == MMU_NO_CONTEXT))
710 return; 705 return;
@@ -738,37 +733,64 @@ is_local:
738 _tlbie_pid(pid, RIC_FLUSH_TLB); 733 _tlbie_pid(pid, RIC_FLUSH_TLB);
739 } 734 }
740 } else { 735 } else {
741 bool hflush = false; 736 bool hflush = flush_all_sizes;
737 bool gflush = flush_all_sizes;
742 unsigned long hstart, hend; 738 unsigned long hstart, hend;
739 unsigned long gstart, gend;
743 740
744#ifdef CONFIG_TRANSPARENT_HUGEPAGE 741 if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
745 hstart = (start + HPAGE_PMD_SIZE - 1) >> HPAGE_PMD_SHIFT;
746 hend = end >> HPAGE_PMD_SHIFT;
747 if (hstart < hend) {
748 hstart <<= HPAGE_PMD_SHIFT;
749 hend <<= HPAGE_PMD_SHIFT;
750 hflush = true; 742 hflush = true;
743
744 if (hflush) {
745 hstart = (start + PMD_SIZE - 1) & PMD_MASK;
746 hend = end & PMD_MASK;
747 if (hstart == hend)
748 hflush = false;
749 }
750
751 if (gflush) {
752 gstart = (start + PUD_SIZE - 1) & PUD_MASK;
753 gend = end & PUD_MASK;
754 if (gstart == gend)
755 gflush = false;
751 } 756 }
752#endif
753 757
754 asm volatile("ptesync": : :"memory"); 758 asm volatile("ptesync": : :"memory");
755 if (local) { 759 if (local) {
756 __tlbiel_va_range(start, end, pid, page_size, mmu_virtual_psize); 760 __tlbiel_va_range(start, end, pid, page_size, mmu_virtual_psize);
757 if (hflush) 761 if (hflush)
758 __tlbiel_va_range(hstart, hend, pid, 762 __tlbiel_va_range(hstart, hend, pid,
759 HPAGE_PMD_SIZE, MMU_PAGE_2M); 763 PMD_SIZE, MMU_PAGE_2M);
764 if (gflush)
765 __tlbiel_va_range(gstart, gend, pid,
766 PUD_SIZE, MMU_PAGE_1G);
760 asm volatile("ptesync": : :"memory"); 767 asm volatile("ptesync": : :"memory");
761 } else { 768 } else {
762 __tlbie_va_range(start, end, pid, page_size, mmu_virtual_psize); 769 __tlbie_va_range(start, end, pid, page_size, mmu_virtual_psize);
763 if (hflush) 770 if (hflush)
764 __tlbie_va_range(hstart, hend, pid, 771 __tlbie_va_range(hstart, hend, pid,
765 HPAGE_PMD_SIZE, MMU_PAGE_2M); 772 PMD_SIZE, MMU_PAGE_2M);
773 if (gflush)
774 __tlbie_va_range(gstart, gend, pid,
775 PUD_SIZE, MMU_PAGE_1G);
766 fixup_tlbie(); 776 fixup_tlbie();
767 asm volatile("eieio; tlbsync; ptesync": : :"memory"); 777 asm volatile("eieio; tlbsync; ptesync": : :"memory");
768 } 778 }
769 } 779 }
770 preempt_enable(); 780 preempt_enable();
771} 781}
782
783void radix__flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
784 unsigned long end)
785
786{
787#ifdef CONFIG_HUGETLB_PAGE
788 if (is_vm_hugetlb_page(vma))
789 return radix__flush_hugetlb_tlb_range(vma, start, end);
790#endif
791
792 __radix__flush_tlb_range(vma->vm_mm, start, end, false);
793}
772EXPORT_SYMBOL(radix__flush_tlb_range); 794EXPORT_SYMBOL(radix__flush_tlb_range);
773 795
774static int radix_get_mmu_psize(int page_size) 796static int radix_get_mmu_psize(int page_size)
@@ -837,6 +859,8 @@ void radix__tlb_flush(struct mmu_gather *tlb)
837 int psize = 0; 859 int psize = 0;
838 struct mm_struct *mm = tlb->mm; 860 struct mm_struct *mm = tlb->mm;
839 int page_size = tlb->page_size; 861 int page_size = tlb->page_size;
862 unsigned long start = tlb->start;
863 unsigned long end = tlb->end;
840 864
841 /* 865 /*
842 * if page size is not something we understand, do a full mm flush 866 * if page size is not something we understand, do a full mm flush
@@ -847,15 +871,45 @@ void radix__tlb_flush(struct mmu_gather *tlb)
847 */ 871 */
848 if (tlb->fullmm) { 872 if (tlb->fullmm) {
849 __flush_all_mm(mm, true); 873 __flush_all_mm(mm, true);
874#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLB_PAGE)
875 } else if (mm_tlb_flush_nested(mm)) {
876 /*
877 * If there is a concurrent invalidation that is clearing ptes,
878 * then it's possible this invalidation will miss one of those
879 * cleared ptes and miss flushing the TLB. If this invalidate
880 * returns before the other one flushes TLBs, that can result
881 * in it returning while there are still valid TLBs inside the
882 * range to be invalidated.
883 *
884 * See mm/memory.c:tlb_finish_mmu() for more details.
885 *
886 * The solution to this is ensure the entire range is always
887 * flushed here. The problem for powerpc is that the flushes
888 * are page size specific, so this "forced flush" would not
889 * do the right thing if there are a mix of page sizes in
890 * the range to be invalidated. So use __flush_tlb_range
891 * which invalidates all possible page sizes in the range.
892 *
893 * PWC flush probably is not be required because the core code
894 * shouldn't free page tables in this path, but accounting
895 * for the possibility makes us a bit more robust.
896 *
897 * need_flush_all is an uncommon case because page table
898 * teardown should be done with exclusive locks held (but
899 * after locks are dropped another invalidate could come
900 * in), it could be optimized further if necessary.
901 */
902 if (!tlb->need_flush_all)
903 __radix__flush_tlb_range(mm, start, end, true);
904 else
905 radix__flush_all_mm(mm);
906#endif
850 } else if ( (psize = radix_get_mmu_psize(page_size)) == -1) { 907 } else if ( (psize = radix_get_mmu_psize(page_size)) == -1) {
851 if (!tlb->need_flush_all) 908 if (!tlb->need_flush_all)
852 radix__flush_tlb_mm(mm); 909 radix__flush_tlb_mm(mm);
853 else 910 else
854 radix__flush_all_mm(mm); 911 radix__flush_all_mm(mm);
855 } else { 912 } else {
856 unsigned long start = tlb->start;
857 unsigned long end = tlb->end;
858
859 if (!tlb->need_flush_all) 913 if (!tlb->need_flush_all)
860 radix__flush_tlb_range_psize(mm, start, end, psize); 914 radix__flush_tlb_range_psize(mm, start, end, psize);
861 else 915 else
@@ -1043,6 +1097,8 @@ extern void radix_kvm_prefetch_workaround(struct mm_struct *mm)
1043 for (; sib <= cpu_last_thread_sibling(cpu) && !flush; sib++) { 1097 for (; sib <= cpu_last_thread_sibling(cpu) && !flush; sib++) {
1044 if (sib == cpu) 1098 if (sib == cpu)
1045 continue; 1099 continue;
1100 if (!cpu_possible(sib))
1101 continue;
1046 if (paca_ptrs[sib]->kvm_hstate.kvm_vcpu) 1102 if (paca_ptrs[sib]->kvm_hstate.kvm_vcpu)
1047 flush = true; 1103 flush = true;
1048 } 1104 }
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index f0a6ea22429d..a08e82856563 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -258,11 +258,6 @@ archscripts: scripts_basic
258archheaders: 258archheaders:
259 $(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all 259 $(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all
260 260
261archprepare:
262ifeq ($(CONFIG_KEXEC_FILE),y)
263 $(Q)$(MAKE) $(build)=arch/x86/purgatory arch/x86/purgatory/kexec-purgatory.c
264endif
265
266### 261###
267# Kernel objects 262# Kernel objects
268 263
@@ -327,7 +322,6 @@ archclean:
327 $(Q)rm -rf $(objtree)/arch/x86_64 322 $(Q)rm -rf $(objtree)/arch/x86_64
328 $(Q)$(MAKE) $(clean)=$(boot) 323 $(Q)$(MAKE) $(clean)=$(boot)
329 $(Q)$(MAKE) $(clean)=arch/x86/tools 324 $(Q)$(MAKE) $(clean)=arch/x86/tools
330 $(Q)$(MAKE) $(clean)=arch/x86/purgatory
331 325
332define archhelp 326define archhelp
333 echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)' 327 echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
index a8a8642d2b0b..e57665b4ba1c 100644
--- a/arch/x86/boot/compressed/eboot.c
+++ b/arch/x86/boot/compressed/eboot.c
@@ -118,7 +118,7 @@ __setup_efi_pci(efi_pci_io_protocol_t *pci, struct pci_setup_rom **__rom)
118 void *romimage; 118 void *romimage;
119 119
120 status = efi_call_proto(efi_pci_io_protocol, attributes, pci, 120 status = efi_call_proto(efi_pci_io_protocol, attributes, pci,
121 EfiPciIoAttributeOperationGet, 0, 0, 121 EfiPciIoAttributeOperationGet, 0ULL,
122 &attributes); 122 &attributes);
123 if (status != EFI_SUCCESS) 123 if (status != EFI_SUCCESS)
124 return status; 124 return status;
diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
index 92190879b228..3b2490b81918 100644
--- a/arch/x86/entry/common.c
+++ b/arch/x86/entry/common.c
@@ -164,7 +164,7 @@ static void exit_to_usermode_loop(struct pt_regs *regs, u32 cached_flags)
164 if (cached_flags & _TIF_NOTIFY_RESUME) { 164 if (cached_flags & _TIF_NOTIFY_RESUME) {
165 clear_thread_flag(TIF_NOTIFY_RESUME); 165 clear_thread_flag(TIF_NOTIFY_RESUME);
166 tracehook_notify_resume(regs); 166 tracehook_notify_resume(regs);
167 rseq_handle_notify_resume(regs); 167 rseq_handle_notify_resume(NULL, regs);
168 } 168 }
169 169
170 if (cached_flags & _TIF_USER_RETURN_NOTIFY) 170 if (cached_flags & _TIF_USER_RETURN_NOTIFY)
diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h
index 042b5e892ed1..14de0432d288 100644
--- a/arch/x86/include/asm/barrier.h
+++ b/arch/x86/include/asm/barrier.h
@@ -38,7 +38,7 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,
38{ 38{
39 unsigned long mask; 39 unsigned long mask;
40 40
41 asm ("cmp %1,%2; sbb %0,%0;" 41 asm volatile ("cmp %1,%2; sbb %0,%0;"
42 :"=r" (mask) 42 :"=r" (mask)
43 :"g"(size),"r" (index) 43 :"g"(size),"r" (index)
44 :"cc"); 44 :"cc");
diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h
index 425e6b8b9547..6aa8499e1f62 100644
--- a/arch/x86/include/asm/vmx.h
+++ b/arch/x86/include/asm/vmx.h
@@ -114,6 +114,7 @@
114#define VMX_MISC_PREEMPTION_TIMER_RATE_MASK 0x0000001f 114#define VMX_MISC_PREEMPTION_TIMER_RATE_MASK 0x0000001f
115#define VMX_MISC_SAVE_EFER_LMA 0x00000020 115#define VMX_MISC_SAVE_EFER_LMA 0x00000020
116#define VMX_MISC_ACTIVITY_HLT 0x00000040 116#define VMX_MISC_ACTIVITY_HLT 0x00000040
117#define VMX_MISC_ZERO_LEN_INS 0x40000000
117 118
118/* VMFUNC functions */ 119/* VMFUNC functions */
119#define VMX_VMFUNC_EPTP_SWITCHING 0x00000001 120#define VMX_VMFUNC_EPTP_SWITCHING 0x00000001
@@ -351,11 +352,13 @@ enum vmcs_field {
351#define VECTORING_INFO_VALID_MASK INTR_INFO_VALID_MASK 352#define VECTORING_INFO_VALID_MASK INTR_INFO_VALID_MASK
352 353
353#define INTR_TYPE_EXT_INTR (0 << 8) /* external interrupt */ 354#define INTR_TYPE_EXT_INTR (0 << 8) /* external interrupt */
355#define INTR_TYPE_RESERVED (1 << 8) /* reserved */
354#define INTR_TYPE_NMI_INTR (2 << 8) /* NMI */ 356#define INTR_TYPE_NMI_INTR (2 << 8) /* NMI */
355#define INTR_TYPE_HARD_EXCEPTION (3 << 8) /* processor exception */ 357#define INTR_TYPE_HARD_EXCEPTION (3 << 8) /* processor exception */
356#define INTR_TYPE_SOFT_INTR (4 << 8) /* software interrupt */ 358#define INTR_TYPE_SOFT_INTR (4 << 8) /* software interrupt */
357#define INTR_TYPE_PRIV_SW_EXCEPTION (5 << 8) /* ICE breakpoint - undocumented */ 359#define INTR_TYPE_PRIV_SW_EXCEPTION (5 << 8) /* ICE breakpoint - undocumented */
358#define INTR_TYPE_SOFT_EXCEPTION (6 << 8) /* software exception */ 360#define INTR_TYPE_SOFT_EXCEPTION (6 << 8) /* software exception */
361#define INTR_TYPE_OTHER_EVENT (7 << 8) /* other event */
359 362
360/* GUEST_INTERRUPTIBILITY_INFO flags. */ 363/* GUEST_INTERRUPTIBILITY_INFO flags. */
361#define GUEST_INTR_STATE_STI 0x00000001 364#define GUEST_INTR_STATE_STI 0x00000001
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
index efaf2d4f9c3c..d492752f79e1 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -26,6 +26,7 @@
26#include <linux/delay.h> 26#include <linux/delay.h>
27#include <linux/crash_dump.h> 27#include <linux/crash_dump.h>
28#include <linux/reboot.h> 28#include <linux/reboot.h>
29#include <linux/memory.h>
29 30
30#include <asm/uv/uv_mmrs.h> 31#include <asm/uv/uv_mmrs.h>
31#include <asm/uv/uv_hub.h> 32#include <asm/uv/uv_hub.h>
@@ -392,6 +393,51 @@ extern int uv_hub_info_version(void)
392} 393}
393EXPORT_SYMBOL(uv_hub_info_version); 394EXPORT_SYMBOL(uv_hub_info_version);
394 395
396/* Default UV memory block size is 2GB */
397static unsigned long mem_block_size = (2UL << 30);
398
399/* Kernel parameter to specify UV mem block size */
400static int parse_mem_block_size(char *ptr)
401{
402 unsigned long size = memparse(ptr, NULL);
403
404 /* Size will be rounded down by set_block_size() below */
405 mem_block_size = size;
406 return 0;
407}
408early_param("uv_memblksize", parse_mem_block_size);
409
410static __init int adj_blksize(u32 lgre)
411{
412 unsigned long base = (unsigned long)lgre << UV_GAM_RANGE_SHFT;
413 unsigned long size;
414
415 for (size = mem_block_size; size > MIN_MEMORY_BLOCK_SIZE; size >>= 1)
416 if (IS_ALIGNED(base, size))
417 break;
418
419 if (size >= mem_block_size)
420 return 0;
421
422 mem_block_size = size;
423 return 1;
424}
425
426static __init void set_block_size(void)
427{
428 unsigned int order = ffs(mem_block_size);
429
430 if (order) {
431 /* adjust for ffs return of 1..64 */
432 set_memory_block_size_order(order - 1);
433 pr_info("UV: mem_block_size set to 0x%lx\n", mem_block_size);
434 } else {
435 /* bad or zero value, default to 1UL << 31 (2GB) */
436 pr_err("UV: mem_block_size error with 0x%lx\n", mem_block_size);
437 set_memory_block_size_order(31);
438 }
439}
440
395/* Build GAM range lookup table: */ 441/* Build GAM range lookup table: */
396static __init void build_uv_gr_table(void) 442static __init void build_uv_gr_table(void)
397{ 443{
@@ -1180,23 +1226,30 @@ static void __init decode_gam_rng_tbl(unsigned long ptr)
1180 << UV_GAM_RANGE_SHFT); 1226 << UV_GAM_RANGE_SHFT);
1181 int order = 0; 1227 int order = 0;
1182 char suffix[] = " KMGTPE"; 1228 char suffix[] = " KMGTPE";
1229 int flag = ' ';
1183 1230
1184 while (size > 9999 && order < sizeof(suffix)) { 1231 while (size > 9999 && order < sizeof(suffix)) {
1185 size /= 1024; 1232 size /= 1024;
1186 order++; 1233 order++;
1187 } 1234 }
1188 1235
1236 /* adjust max block size to current range start */
1237 if (gre->type == 1 || gre->type == 2)
1238 if (adj_blksize(lgre))
1239 flag = '*';
1240
1189 if (!index) { 1241 if (!index) {
1190 pr_info("UV: GAM Range Table...\n"); 1242 pr_info("UV: GAM Range Table...\n");
1191 pr_info("UV: # %20s %14s %5s %4s %5s %3s %2s\n", "Range", "", "Size", "Type", "NASID", "SID", "PN"); 1243 pr_info("UV: # %20s %14s %6s %4s %5s %3s %2s\n", "Range", "", "Size", "Type", "NASID", "SID", "PN");
1192 } 1244 }
1193 pr_info("UV: %2d: 0x%014lx-0x%014lx %5lu%c %3d %04x %02x %02x\n", 1245 pr_info("UV: %2d: 0x%014lx-0x%014lx%c %5lu%c %3d %04x %02x %02x\n",
1194 index++, 1246 index++,
1195 (unsigned long)lgre << UV_GAM_RANGE_SHFT, 1247 (unsigned long)lgre << UV_GAM_RANGE_SHFT,
1196 (unsigned long)gre->limit << UV_GAM_RANGE_SHFT, 1248 (unsigned long)gre->limit << UV_GAM_RANGE_SHFT,
1197 size, suffix[order], 1249 flag, size, suffix[order],
1198 gre->type, gre->nasid, gre->sockid, gre->pnode); 1250 gre->type, gre->nasid, gre->sockid, gre->pnode);
1199 1251
1252 /* update to next range start */
1200 lgre = gre->limit; 1253 lgre = gre->limit;
1201 if (sock_min > gre->sockid) 1254 if (sock_min > gre->sockid)
1202 sock_min = gre->sockid; 1255 sock_min = gre->sockid;
@@ -1427,6 +1480,7 @@ static void __init uv_system_init_hub(void)
1427 1480
1428 build_socket_tables(); 1481 build_socket_tables();
1429 build_uv_gr_table(); 1482 build_uv_gr_table();
1483 set_block_size();
1430 uv_init_hub_info(&hub_info); 1484 uv_init_hub_info(&hub_info);
1431 uv_possible_blades = num_possible_nodes(); 1485 uv_possible_blades = num_possible_nodes();
1432 if (!_node_to_pnode) 1486 if (!_node_to_pnode)
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index cd0fda1fff6d..404df26b7de8 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -27,6 +27,7 @@
27#include <asm/pgtable.h> 27#include <asm/pgtable.h>
28#include <asm/set_memory.h> 28#include <asm/set_memory.h>
29#include <asm/intel-family.h> 29#include <asm/intel-family.h>
30#include <asm/hypervisor.h>
30 31
31static void __init spectre_v2_select_mitigation(void); 32static void __init spectre_v2_select_mitigation(void);
32static void __init ssb_select_mitigation(void); 33static void __init ssb_select_mitigation(void);
@@ -664,6 +665,9 @@ static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr
664 if (boot_cpu_has(X86_FEATURE_PTI)) 665 if (boot_cpu_has(X86_FEATURE_PTI))
665 return sprintf(buf, "Mitigation: PTI\n"); 666 return sprintf(buf, "Mitigation: PTI\n");
666 667
668 if (hypervisor_is_type(X86_HYPER_XEN_PV))
669 return sprintf(buf, "Unknown (XEN PV detected, hypervisor mitigation required)\n");
670
667 break; 671 break;
668 672
669 case X86_BUG_SPECTRE_V1: 673 case X86_BUG_SPECTRE_V1:
diff --git a/arch/x86/kernel/cpu/cacheinfo.c b/arch/x86/kernel/cpu/cacheinfo.c
index 38354c66df81..0c5fcbd998cf 100644
--- a/arch/x86/kernel/cpu/cacheinfo.c
+++ b/arch/x86/kernel/cpu/cacheinfo.c
@@ -671,7 +671,7 @@ void cacheinfo_amd_init_llc_id(struct cpuinfo_x86 *c, int cpu, u8 node_id)
671 num_sharing_cache = ((eax >> 14) & 0xfff) + 1; 671 num_sharing_cache = ((eax >> 14) & 0xfff) + 1;
672 672
673 if (num_sharing_cache) { 673 if (num_sharing_cache) {
674 int bits = get_count_order(num_sharing_cache) - 1; 674 int bits = get_count_order(num_sharing_cache);
675 675
676 per_cpu(cpu_llc_id, cpu) = c->apicid >> bits; 676 per_cpu(cpu_llc_id, cpu) = c->apicid >> bits;
677 } 677 }
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 0df7151cfef4..eb4cb3efd20e 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -1,3 +1,6 @@
1/* cpu_feature_enabled() cannot be used this early */
2#define USE_EARLY_PGTABLE_L5
3
1#include <linux/bootmem.h> 4#include <linux/bootmem.h>
2#include <linux/linkage.h> 5#include <linux/linkage.h>
3#include <linux/bitops.h> 6#include <linux/bitops.h>
diff --git a/arch/x86/kernel/cpu/mcheck/mce-severity.c b/arch/x86/kernel/cpu/mcheck/mce-severity.c
index 5bbd06f38ff6..f34d89c01edc 100644
--- a/arch/x86/kernel/cpu/mcheck/mce-severity.c
+++ b/arch/x86/kernel/cpu/mcheck/mce-severity.c
@@ -160,6 +160,11 @@ static struct severity {
160 SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR|MCI_ADDR|MCACOD, MCI_UC_SAR|MCI_ADDR|MCACOD_INSTR), 160 SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR|MCI_ADDR|MCACOD, MCI_UC_SAR|MCI_ADDR|MCACOD_INSTR),
161 USER 161 USER
162 ), 162 ),
163 MCESEV(
164 PANIC, "Data load in unrecoverable area of kernel",
165 SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR|MCI_ADDR|MCACOD, MCI_UC_SAR|MCI_ADDR|MCACOD_DATA),
166 KERNEL
167 ),
163#endif 168#endif
164 MCESEV( 169 MCESEV(
165 PANIC, "Action required: unknown MCACOD", 170 PANIC, "Action required: unknown MCACOD",
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index e4cf6ff1c2e1..c102ad51025e 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -772,23 +772,25 @@ EXPORT_SYMBOL_GPL(machine_check_poll);
772static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp, 772static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp,
773 struct pt_regs *regs) 773 struct pt_regs *regs)
774{ 774{
775 int i, ret = 0;
776 char *tmp; 775 char *tmp;
776 int i;
777 777
778 for (i = 0; i < mca_cfg.banks; i++) { 778 for (i = 0; i < mca_cfg.banks; i++) {
779 m->status = mce_rdmsrl(msr_ops.status(i)); 779 m->status = mce_rdmsrl(msr_ops.status(i));
780 if (m->status & MCI_STATUS_VAL) { 780 if (!(m->status & MCI_STATUS_VAL))
781 __set_bit(i, validp); 781 continue;
782 if (quirk_no_way_out) 782
783 quirk_no_way_out(i, m, regs); 783 __set_bit(i, validp);
784 } 784 if (quirk_no_way_out)
785 quirk_no_way_out(i, m, regs);
785 786
786 if (mce_severity(m, mca_cfg.tolerant, &tmp, true) >= MCE_PANIC_SEVERITY) { 787 if (mce_severity(m, mca_cfg.tolerant, &tmp, true) >= MCE_PANIC_SEVERITY) {
788 mce_read_aux(m, i);
787 *msg = tmp; 789 *msg = tmp;
788 ret = 1; 790 return 1;
789 } 791 }
790 } 792 }
791 return ret; 793 return 0;
792} 794}
793 795
794/* 796/*
@@ -1205,13 +1207,18 @@ void do_machine_check(struct pt_regs *regs, long error_code)
1205 lmce = m.mcgstatus & MCG_STATUS_LMCES; 1207 lmce = m.mcgstatus & MCG_STATUS_LMCES;
1206 1208
1207 /* 1209 /*
1210 * Local machine check may already know that we have to panic.
1211 * Broadcast machine check begins rendezvous in mce_start()
1208 * Go through all banks in exclusion of the other CPUs. This way we 1212 * Go through all banks in exclusion of the other CPUs. This way we
1209 * don't report duplicated events on shared banks because the first one 1213 * don't report duplicated events on shared banks because the first one
1210 * to see it will clear it. If this is a Local MCE, then no need to 1214 * to see it will clear it.
1211 * perform rendezvous.
1212 */ 1215 */
1213 if (!lmce) 1216 if (lmce) {
1217 if (no_way_out)
1218 mce_panic("Fatal local machine check", &m, msg);
1219 } else {
1214 order = mce_start(&no_way_out); 1220 order = mce_start(&no_way_out);
1221 }
1215 1222
1216 for (i = 0; i < cfg->banks; i++) { 1223 for (i = 0; i < cfg->banks; i++) {
1217 __clear_bit(i, toclear); 1224 __clear_bit(i, toclear);
@@ -1287,12 +1294,17 @@ void do_machine_check(struct pt_regs *regs, long error_code)
1287 no_way_out = worst >= MCE_PANIC_SEVERITY; 1294 no_way_out = worst >= MCE_PANIC_SEVERITY;
1288 } else { 1295 } else {
1289 /* 1296 /*
1290 * Local MCE skipped calling mce_reign() 1297 * If there was a fatal machine check we should have
1291 * If we found a fatal error, we need to panic here. 1298 * already called mce_panic earlier in this function.
1299 * Since we re-read the banks, we might have found
1300 * something new. Check again to see if we found a
1301 * fatal error. We call "mce_severity()" again to
1302 * make sure we have the right "msg".
1292 */ 1303 */
1293 if (worst >= MCE_PANIC_SEVERITY && mca_cfg.tolerant < 3) 1304 if (worst >= MCE_PANIC_SEVERITY && mca_cfg.tolerant < 3) {
1294 mce_panic("Machine check from unknown source", 1305 mce_severity(&m, cfg->tolerant, &msg, true);
1295 NULL, NULL); 1306 mce_panic("Local fatal machine check!", &m, msg);
1307 }
1296 } 1308 }
1297 1309
1298 /* 1310 /*
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
index 1c2cfa0644aa..97ccf4c3b45b 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -190,8 +190,11 @@ static void save_microcode_patch(void *data, unsigned int size)
190 p = memdup_patch(data, size); 190 p = memdup_patch(data, size);
191 if (!p) 191 if (!p)
192 pr_err("Error allocating buffer %p\n", data); 192 pr_err("Error allocating buffer %p\n", data);
193 else 193 else {
194 list_replace(&iter->plist, &p->plist); 194 list_replace(&iter->plist, &p->plist);
195 kfree(iter->data);
196 kfree(iter);
197 }
195 } 198 }
196 } 199 }
197 200
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
index a21d6ace648e..8047379e575a 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -44,7 +44,7 @@ static unsigned int __initdata next_early_pgt;
44pmdval_t early_pmd_flags = __PAGE_KERNEL_LARGE & ~(_PAGE_GLOBAL | _PAGE_NX); 44pmdval_t early_pmd_flags = __PAGE_KERNEL_LARGE & ~(_PAGE_GLOBAL | _PAGE_NX);
45 45
46#ifdef CONFIG_X86_5LEVEL 46#ifdef CONFIG_X86_5LEVEL
47unsigned int __pgtable_l5_enabled __initdata; 47unsigned int __pgtable_l5_enabled __ro_after_init;
48unsigned int pgdir_shift __ro_after_init = 39; 48unsigned int pgdir_shift __ro_after_init = 39;
49EXPORT_SYMBOL(pgdir_shift); 49EXPORT_SYMBOL(pgdir_shift);
50unsigned int ptrs_per_p4d __ro_after_init = 1; 50unsigned int ptrs_per_p4d __ro_after_init = 1;
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c
index 697a4ce04308..736348ead421 100644
--- a/arch/x86/kernel/quirks.c
+++ b/arch/x86/kernel/quirks.c
@@ -645,12 +645,19 @@ static void quirk_intel_brickland_xeon_ras_cap(struct pci_dev *pdev)
645/* Skylake */ 645/* Skylake */
646static void quirk_intel_purley_xeon_ras_cap(struct pci_dev *pdev) 646static void quirk_intel_purley_xeon_ras_cap(struct pci_dev *pdev)
647{ 647{
648 u32 capid0; 648 u32 capid0, capid5;
649 649
650 pci_read_config_dword(pdev, 0x84, &capid0); 650 pci_read_config_dword(pdev, 0x84, &capid0);
651 pci_read_config_dword(pdev, 0x98, &capid5);
651 652
652 if ((capid0 & 0xc0) == 0xc0) 653 /*
654 * CAPID0{7:6} indicate whether this is an advanced RAS SKU
655 * CAPID5{8:5} indicate that various NVDIMM usage modes are
656 * enabled, so memory machine check recovery is also enabled.
657 */
658 if ((capid0 & 0xc0) == 0xc0 || (capid5 & 0x1e0))
653 static_branch_inc(&mcsafe_key); 659 static_branch_inc(&mcsafe_key);
660
654} 661}
655DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x0ec3, quirk_intel_brickland_xeon_ras_cap); 662DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x0ec3, quirk_intel_brickland_xeon_ras_cap);
656DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2fc0, quirk_intel_brickland_xeon_ras_cap); 663DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2fc0, quirk_intel_brickland_xeon_ras_cap);
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index 445ca11ff863..92a3b312a53c 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -692,7 +692,7 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
692 * Increment event counter and perform fixup for the pre-signal 692 * Increment event counter and perform fixup for the pre-signal
693 * frame. 693 * frame.
694 */ 694 */
695 rseq_signal_deliver(regs); 695 rseq_signal_deliver(ksig, regs);
696 696
697 /* Set up the stack frame */ 697 /* Set up the stack frame */
698 if (is_ia32_frame(ksig)) { 698 if (is_ia32_frame(ksig)) {
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index a535dd64de63..e6db475164ed 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -835,16 +835,18 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
835 char *str = (trapnr == X86_TRAP_MF) ? "fpu exception" : 835 char *str = (trapnr == X86_TRAP_MF) ? "fpu exception" :
836 "simd exception"; 836 "simd exception";
837 837
838 if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, SIGFPE) == NOTIFY_STOP)
839 return;
840 cond_local_irq_enable(regs); 838 cond_local_irq_enable(regs);
841 839
842 if (!user_mode(regs)) { 840 if (!user_mode(regs)) {
843 if (!fixup_exception(regs, trapnr)) { 841 if (fixup_exception(regs, trapnr))
844 task->thread.error_code = error_code; 842 return;
845 task->thread.trap_nr = trapnr; 843
844 task->thread.error_code = error_code;
845 task->thread.trap_nr = trapnr;
846
847 if (notify_die(DIE_TRAP, str, regs, error_code,
848 trapnr, SIGFPE) != NOTIFY_STOP)
846 die(str, regs, error_code); 849 die(str, regs, error_code);
847 }
848 return; 850 return;
849 } 851 }
850 852
diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c
index 58d8d800875d..deb576b23b7c 100644
--- a/arch/x86/kernel/uprobes.c
+++ b/arch/x86/kernel/uprobes.c
@@ -293,7 +293,7 @@ static int uprobe_init_insn(struct arch_uprobe *auprobe, struct insn *insn, bool
293 insn_init(insn, auprobe->insn, sizeof(auprobe->insn), x86_64); 293 insn_init(insn, auprobe->insn, sizeof(auprobe->insn), x86_64);
294 /* has the side-effect of processing the entire instruction */ 294 /* has the side-effect of processing the entire instruction */
295 insn_get_length(insn); 295 insn_get_length(insn);
296 if (WARN_ON_ONCE(!insn_complete(insn))) 296 if (!insn_complete(insn))
297 return -ENOEXEC; 297 return -ENOEXEC;
298 298
299 if (is_prefix_bad(insn)) 299 if (is_prefix_bad(insn))
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 559a12b6184d..1689f433f3a0 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -1705,6 +1705,17 @@ static inline bool nested_cpu_has_vmwrite_any_field(struct kvm_vcpu *vcpu)
1705 MSR_IA32_VMX_MISC_VMWRITE_SHADOW_RO_FIELDS; 1705 MSR_IA32_VMX_MISC_VMWRITE_SHADOW_RO_FIELDS;
1706} 1706}
1707 1707
1708static inline bool nested_cpu_has_zero_length_injection(struct kvm_vcpu *vcpu)
1709{
1710 return to_vmx(vcpu)->nested.msrs.misc_low & VMX_MISC_ZERO_LEN_INS;
1711}
1712
1713static inline bool nested_cpu_supports_monitor_trap_flag(struct kvm_vcpu *vcpu)
1714{
1715 return to_vmx(vcpu)->nested.msrs.procbased_ctls_high &
1716 CPU_BASED_MONITOR_TRAP_FLAG;
1717}
1718
1708static inline bool nested_cpu_has(struct vmcs12 *vmcs12, u32 bit) 1719static inline bool nested_cpu_has(struct vmcs12 *vmcs12, u32 bit)
1709{ 1720{
1710 return vmcs12->cpu_based_vm_exec_control & bit; 1721 return vmcs12->cpu_based_vm_exec_control & bit;
@@ -11620,6 +11631,62 @@ static int check_vmentry_prereqs(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12)
11620 !nested_cr3_valid(vcpu, vmcs12->host_cr3)) 11631 !nested_cr3_valid(vcpu, vmcs12->host_cr3))
11621 return VMXERR_ENTRY_INVALID_HOST_STATE_FIELD; 11632 return VMXERR_ENTRY_INVALID_HOST_STATE_FIELD;
11622 11633
11634 /*
11635 * From the Intel SDM, volume 3:
11636 * Fields relevant to VM-entry event injection must be set properly.
11637 * These fields are the VM-entry interruption-information field, the
11638 * VM-entry exception error code, and the VM-entry instruction length.
11639 */
11640 if (vmcs12->vm_entry_intr_info_field & INTR_INFO_VALID_MASK) {
11641 u32 intr_info = vmcs12->vm_entry_intr_info_field;
11642 u8 vector = intr_info & INTR_INFO_VECTOR_MASK;
11643 u32 intr_type = intr_info & INTR_INFO_INTR_TYPE_MASK;
11644 bool has_error_code = intr_info & INTR_INFO_DELIVER_CODE_MASK;
11645 bool should_have_error_code;
11646 bool urg = nested_cpu_has2(vmcs12,
11647 SECONDARY_EXEC_UNRESTRICTED_GUEST);
11648 bool prot_mode = !urg || vmcs12->guest_cr0 & X86_CR0_PE;
11649
11650 /* VM-entry interruption-info field: interruption type */
11651 if (intr_type == INTR_TYPE_RESERVED ||
11652 (intr_type == INTR_TYPE_OTHER_EVENT &&
11653 !nested_cpu_supports_monitor_trap_flag(vcpu)))
11654 return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
11655
11656 /* VM-entry interruption-info field: vector */
11657 if ((intr_type == INTR_TYPE_NMI_INTR && vector != NMI_VECTOR) ||
11658 (intr_type == INTR_TYPE_HARD_EXCEPTION && vector > 31) ||
11659 (intr_type == INTR_TYPE_OTHER_EVENT && vector != 0))
11660 return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
11661
11662 /* VM-entry interruption-info field: deliver error code */
11663 should_have_error_code =
11664 intr_type == INTR_TYPE_HARD_EXCEPTION && prot_mode &&
11665 x86_exception_has_error_code(vector);
11666 if (has_error_code != should_have_error_code)
11667 return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
11668
11669 /* VM-entry exception error code */
11670 if (has_error_code &&
11671 vmcs12->vm_entry_exception_error_code & GENMASK(31, 15))
11672 return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
11673
11674 /* VM-entry interruption-info field: reserved bits */
11675 if (intr_info & INTR_INFO_RESVD_BITS_MASK)
11676 return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
11677
11678 /* VM-entry instruction length */
11679 switch (intr_type) {
11680 case INTR_TYPE_SOFT_EXCEPTION:
11681 case INTR_TYPE_SOFT_INTR:
11682 case INTR_TYPE_PRIV_SW_EXCEPTION:
11683 if ((vmcs12->vm_entry_instruction_len > 15) ||
11684 (vmcs12->vm_entry_instruction_len == 0 &&
11685 !nested_cpu_has_zero_length_injection(vcpu)))
11686 return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
11687 }
11688 }
11689
11623 return 0; 11690 return 0;
11624} 11691}
11625 11692
diff --git a/arch/x86/kvm/x86.h b/arch/x86/kvm/x86.h
index 331993c49dae..257f27620bc2 100644
--- a/arch/x86/kvm/x86.h
+++ b/arch/x86/kvm/x86.h
@@ -110,6 +110,15 @@ static inline bool is_la57_mode(struct kvm_vcpu *vcpu)
110#endif 110#endif
111} 111}
112 112
113static inline bool x86_exception_has_error_code(unsigned int vector)
114{
115 static u32 exception_has_error_code = BIT(DF_VECTOR) | BIT(TS_VECTOR) |
116 BIT(NP_VECTOR) | BIT(SS_VECTOR) | BIT(GP_VECTOR) |
117 BIT(PF_VECTOR) | BIT(AC_VECTOR);
118
119 return (1U << vector) & exception_has_error_code;
120}
121
113static inline bool mmu_is_nested(struct kvm_vcpu *vcpu) 122static inline bool mmu_is_nested(struct kvm_vcpu *vcpu)
114{ 123{
115 return vcpu->arch.walk_mmu == &vcpu->arch.nested_mmu; 124 return vcpu->arch.walk_mmu == &vcpu->arch.nested_mmu;
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 045f492d5f68..a688617c727e 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1350,16 +1350,28 @@ int kern_addr_valid(unsigned long addr)
1350/* Amount of ram needed to start using large blocks */ 1350/* Amount of ram needed to start using large blocks */
1351#define MEM_SIZE_FOR_LARGE_BLOCK (64UL << 30) 1351#define MEM_SIZE_FOR_LARGE_BLOCK (64UL << 30)
1352 1352
1353/* Adjustable memory block size */
1354static unsigned long set_memory_block_size;
1355int __init set_memory_block_size_order(unsigned int order)
1356{
1357 unsigned long size = 1UL << order;
1358
1359 if (size > MEM_SIZE_FOR_LARGE_BLOCK || size < MIN_MEMORY_BLOCK_SIZE)
1360 return -EINVAL;
1361
1362 set_memory_block_size = size;
1363 return 0;
1364}
1365
1353static unsigned long probe_memory_block_size(void) 1366static unsigned long probe_memory_block_size(void)
1354{ 1367{
1355 unsigned long boot_mem_end = max_pfn << PAGE_SHIFT; 1368 unsigned long boot_mem_end = max_pfn << PAGE_SHIFT;
1356 unsigned long bz; 1369 unsigned long bz;
1357 1370
1358 /* If this is UV system, always set 2G block size */ 1371 /* If memory block size has been set, then use it */
1359 if (is_uv_system()) { 1372 bz = set_memory_block_size;
1360 bz = MAX_BLOCK_SIZE; 1373 if (bz)
1361 goto done; 1374 goto done;
1362 }
1363 1375
1364 /* Use regular block if RAM is smaller than MEM_SIZE_FOR_LARGE_BLOCK */ 1376 /* Use regular block if RAM is smaller than MEM_SIZE_FOR_LARGE_BLOCK */
1365 if (boot_mem_end < MEM_SIZE_FOR_LARGE_BLOCK) { 1377 if (boot_mem_end < MEM_SIZE_FOR_LARGE_BLOCK) {
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index c9081c6671f0..3b5318505c69 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -65,6 +65,13 @@ __read_mostly int xen_have_vector_callback;
65EXPORT_SYMBOL_GPL(xen_have_vector_callback); 65EXPORT_SYMBOL_GPL(xen_have_vector_callback);
66 66
67/* 67/*
68 * NB: needs to live in .data because it's used by xen_prepare_pvh which runs
69 * before clearing the bss.
70 */
71uint32_t xen_start_flags __attribute__((section(".data"))) = 0;
72EXPORT_SYMBOL(xen_start_flags);
73
74/*
68 * Point at some empty memory to start with. We map the real shared_info 75 * Point at some empty memory to start with. We map the real shared_info
69 * page as soon as fixmap is up and running. 76 * page as soon as fixmap is up and running.
70 */ 77 */
diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c
index 357969a3697c..8d4e2e1ae60b 100644
--- a/arch/x86/xen/enlighten_pv.c
+++ b/arch/x86/xen/enlighten_pv.c
@@ -1203,6 +1203,7 @@ asmlinkage __visible void __init xen_start_kernel(void)
1203 return; 1203 return;
1204 1204
1205 xen_domain_type = XEN_PV_DOMAIN; 1205 xen_domain_type = XEN_PV_DOMAIN;
1206 xen_start_flags = xen_start_info->flags;
1206 1207
1207 xen_setup_features(); 1208 xen_setup_features();
1208 1209
diff --git a/arch/x86/xen/enlighten_pvh.c b/arch/x86/xen/enlighten_pvh.c
index aa1c6a6831a9..c85d1a88f476 100644
--- a/arch/x86/xen/enlighten_pvh.c
+++ b/arch/x86/xen/enlighten_pvh.c
@@ -97,6 +97,7 @@ void __init xen_prepare_pvh(void)
97 } 97 }
98 98
99 xen_pvh = 1; 99 xen_pvh = 1;
100 xen_start_flags = pvh_start_info.flags;
100 101
101 msr = cpuid_ebx(xen_cpuid_base() + 2); 102 msr = cpuid_ebx(xen_cpuid_base() + 2);
102 pfn = __pa(hypercall_page); 103 pfn = __pa(hypercall_page);
diff --git a/arch/x86/xen/smp_pv.c b/arch/x86/xen/smp_pv.c
index 2e20ae2fa2d6..e3b18ad49889 100644
--- a/arch/x86/xen/smp_pv.c
+++ b/arch/x86/xen/smp_pv.c
@@ -32,6 +32,7 @@
32#include <xen/interface/vcpu.h> 32#include <xen/interface/vcpu.h>
33#include <xen/interface/xenpmu.h> 33#include <xen/interface/xenpmu.h>
34 34
35#include <asm/spec-ctrl.h>
35#include <asm/xen/interface.h> 36#include <asm/xen/interface.h>
36#include <asm/xen/hypercall.h> 37#include <asm/xen/hypercall.h>
37 38
@@ -70,6 +71,8 @@ static void cpu_bringup(void)
70 cpu_data(cpu).x86_max_cores = 1; 71 cpu_data(cpu).x86_max_cores = 1;
71 set_cpu_sibling_map(cpu); 72 set_cpu_sibling_map(cpu);
72 73
74 speculative_store_bypass_ht_init();
75
73 xen_setup_cpu_clockevents(); 76 xen_setup_cpu_clockevents();
74 77
75 notify_cpu_starting(cpu); 78 notify_cpu_starting(cpu);
@@ -250,6 +253,8 @@ static void __init xen_pv_smp_prepare_cpus(unsigned int max_cpus)
250 } 253 }
251 set_cpu_sibling_map(0); 254 set_cpu_sibling_map(0);
252 255
256 speculative_store_bypass_ht_init();
257
253 xen_pmu_init(0); 258 xen_pmu_init(0);
254 259
255 if (xen_smp_intr_init(0) || xen_smp_intr_init_pv(0)) 260 if (xen_smp_intr_init(0) || xen_smp_intr_init_pv(0))
diff --git a/block/bio.c b/block/bio.c
index 9710e275f230..67eff5eddc49 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -1807,9 +1807,6 @@ again:
1807 if (!bio_integrity_endio(bio)) 1807 if (!bio_integrity_endio(bio))
1808 return; 1808 return;
1809 1809
1810 if (WARN_ONCE(bio->bi_next, "driver left bi_next not NULL"))
1811 bio->bi_next = NULL;
1812
1813 /* 1810 /*
1814 * Need to have a real endio function for chained bios, otherwise 1811 * Need to have a real endio function for chained bios, otherwise
1815 * various corner cases will break (like stacking block devices that 1812 * various corner cases will break (like stacking block devices that
diff --git a/block/blk-core.c b/block/blk-core.c
index cf0ee764b908..afd2596ea3d3 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -273,10 +273,6 @@ static void req_bio_endio(struct request *rq, struct bio *bio,
273 bio_advance(bio, nbytes); 273 bio_advance(bio, nbytes);
274 274
275 /* don't actually finish bio if it's part of flush sequence */ 275 /* don't actually finish bio if it's part of flush sequence */
276 /*
277 * XXX this code looks suspicious - it's not consistent with advancing
278 * req->bio in caller
279 */
280 if (bio->bi_iter.bi_size == 0 && !(rq->rq_flags & RQF_FLUSH_SEQ)) 276 if (bio->bi_iter.bi_size == 0 && !(rq->rq_flags & RQF_FLUSH_SEQ))
281 bio_endio(bio); 277 bio_endio(bio);
282} 278}
@@ -3081,10 +3077,8 @@ bool blk_update_request(struct request *req, blk_status_t error,
3081 struct bio *bio = req->bio; 3077 struct bio *bio = req->bio;
3082 unsigned bio_bytes = min(bio->bi_iter.bi_size, nr_bytes); 3078 unsigned bio_bytes = min(bio->bi_iter.bi_size, nr_bytes);
3083 3079
3084 if (bio_bytes == bio->bi_iter.bi_size) { 3080 if (bio_bytes == bio->bi_iter.bi_size)
3085 req->bio = bio->bi_next; 3081 req->bio = bio->bi_next;
3086 bio->bi_next = NULL;
3087 }
3088 3082
3089 /* Completion has already been traced */ 3083 /* Completion has already been traced */
3090 bio_clear_flag(bio, BIO_TRACE_COMPLETION); 3084 bio_clear_flag(bio, BIO_TRACE_COMPLETION);
diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index ffa622366922..1c4532e92938 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -356,7 +356,7 @@ static const char *const blk_mq_rq_state_name_array[] = {
356 356
357static const char *blk_mq_rq_state_name(enum mq_rq_state rq_state) 357static const char *blk_mq_rq_state_name(enum mq_rq_state rq_state)
358{ 358{
359 if (WARN_ON_ONCE((unsigned int)rq_state > 359 if (WARN_ON_ONCE((unsigned int)rq_state >=
360 ARRAY_SIZE(blk_mq_rq_state_name_array))) 360 ARRAY_SIZE(blk_mq_rq_state_name_array)))
361 return "(?)"; 361 return "(?)";
362 return blk_mq_rq_state_name_array[rq_state]; 362 return blk_mq_rq_state_name_array[rq_state];
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 70c65bb6c013..b429d515b568 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -781,7 +781,6 @@ static void blk_mq_rq_timed_out(struct request *req, bool reserved)
781 WARN_ON_ONCE(ret != BLK_EH_RESET_TIMER); 781 WARN_ON_ONCE(ret != BLK_EH_RESET_TIMER);
782 } 782 }
783 783
784 req->rq_flags &= ~RQF_TIMED_OUT;
785 blk_add_timer(req); 784 blk_add_timer(req);
786} 785}
787 786
diff --git a/block/blk-softirq.c b/block/blk-softirq.c
index 01e2b353a2b9..15c1f5e12eb8 100644
--- a/block/blk-softirq.c
+++ b/block/blk-softirq.c
@@ -144,6 +144,7 @@ do_local:
144 144
145 local_irq_restore(flags); 145 local_irq_restore(flags);
146} 146}
147EXPORT_SYMBOL(__blk_complete_request);
147 148
148/** 149/**
149 * blk_complete_request - end I/O on a request 150 * blk_complete_request - end I/O on a request
diff --git a/block/blk-timeout.c b/block/blk-timeout.c
index 4b8a48d48ba1..f2cfd56e1606 100644
--- a/block/blk-timeout.c
+++ b/block/blk-timeout.c
@@ -210,6 +210,7 @@ void blk_add_timer(struct request *req)
210 if (!req->timeout) 210 if (!req->timeout)
211 req->timeout = q->rq_timeout; 211 req->timeout = q->rq_timeout;
212 212
213 req->rq_flags &= ~RQF_TIMED_OUT;
213 blk_rq_set_deadline(req, jiffies + req->timeout); 214 blk_rq_set_deadline(req, jiffies + req->timeout);
214 215
215 /* 216 /*
diff --git a/block/sed-opal.c b/block/sed-opal.c
index 945f4b8610e0..e0de4dd448b3 100644
--- a/block/sed-opal.c
+++ b/block/sed-opal.c
@@ -877,7 +877,7 @@ static size_t response_get_string(const struct parsed_resp *resp, int n,
877 return 0; 877 return 0;
878 } 878 }
879 879
880 if (n > resp->num) { 880 if (n >= resp->num) {
881 pr_debug("Response has %d tokens. Can't access %d\n", 881 pr_debug("Response has %d tokens. Can't access %d\n",
882 resp->num, n); 882 resp->num, n);
883 return 0; 883 return 0;
@@ -916,7 +916,7 @@ static u64 response_get_u64(const struct parsed_resp *resp, int n)
916 return 0; 916 return 0;
917 } 917 }
918 918
919 if (n > resp->num) { 919 if (n >= resp->num) {
920 pr_debug("Response has %d tokens. Can't access %d\n", 920 pr_debug("Response has %d tokens. Can't access %d\n",
921 resp->num, n); 921 resp->num, n);
922 return 0; 922 return 0;
diff --git a/crypto/morus640.c b/crypto/morus640.c
index 9fbcde307daf..5eede3749e64 100644
--- a/crypto/morus640.c
+++ b/crypto/morus640.c
@@ -274,8 +274,9 @@ static void crypto_morus640_decrypt_chunk(struct morus640_state *state, u8 *dst,
274 union morus640_block_in tail; 274 union morus640_block_in tail;
275 275
276 memcpy(tail.bytes, src, size); 276 memcpy(tail.bytes, src, size);
277 memset(tail.bytes + size, 0, MORUS640_BLOCK_SIZE - size);
277 278
278 crypto_morus640_load_a(&m, src); 279 crypto_morus640_load_a(&m, tail.bytes);
279 crypto_morus640_core(state, &m); 280 crypto_morus640_core(state, &m);
280 crypto_morus640_store_a(tail.bytes, &m); 281 crypto_morus640_store_a(tail.bytes, &m);
281 memset(tail.bytes + size, 0, MORUS640_BLOCK_SIZE - size); 282 memset(tail.bytes + size, 0, MORUS640_BLOCK_SIZE - size);
diff --git a/crypto/sha3_generic.c b/crypto/sha3_generic.c
index 264ec12c0b9c..7f6735d9003f 100644
--- a/crypto/sha3_generic.c
+++ b/crypto/sha3_generic.c
@@ -152,7 +152,7 @@ static SHA3_INLINE void keccakf_round(u64 st[25])
152 st[24] ^= bc[ 4]; 152 st[24] ^= bc[ 4];
153} 153}
154 154
155static void __optimize("O3") keccakf(u64 st[25]) 155static void keccakf(u64 st[25])
156{ 156{
157 int round; 157 int round;
158 158
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index 38a286975c31..f8fecfec5df9 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -22,6 +22,7 @@
22#include <linux/pm_domain.h> 22#include <linux/pm_domain.h>
23#include <linux/pm_runtime.h> 23#include <linux/pm_runtime.h>
24#include <linux/pwm.h> 24#include <linux/pwm.h>
25#include <linux/suspend.h>
25#include <linux/delay.h> 26#include <linux/delay.h>
26 27
27#include "internal.h" 28#include "internal.h"
@@ -946,9 +947,10 @@ static void lpss_iosf_exit_d3_state(void)
946 mutex_unlock(&lpss_iosf_mutex); 947 mutex_unlock(&lpss_iosf_mutex);
947} 948}
948 949
949static int acpi_lpss_suspend(struct device *dev, bool wakeup) 950static int acpi_lpss_suspend(struct device *dev, bool runtime)
950{ 951{
951 struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev)); 952 struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
953 bool wakeup = runtime || device_may_wakeup(dev);
952 int ret; 954 int ret;
953 955
954 if (pdata->dev_desc->flags & LPSS_SAVE_CTX) 956 if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
@@ -961,13 +963,14 @@ static int acpi_lpss_suspend(struct device *dev, bool wakeup)
961 * wrong status for devices being about to be powered off. See 963 * wrong status for devices being about to be powered off. See
962 * lpss_iosf_enter_d3_state() for further information. 964 * lpss_iosf_enter_d3_state() for further information.
963 */ 965 */
964 if (lpss_quirks & LPSS_QUIRK_ALWAYS_POWER_ON && iosf_mbi_available()) 966 if ((runtime || !pm_suspend_via_firmware()) &&
967 lpss_quirks & LPSS_QUIRK_ALWAYS_POWER_ON && iosf_mbi_available())
965 lpss_iosf_enter_d3_state(); 968 lpss_iosf_enter_d3_state();
966 969
967 return ret; 970 return ret;
968} 971}
969 972
970static int acpi_lpss_resume(struct device *dev) 973static int acpi_lpss_resume(struct device *dev, bool runtime)
971{ 974{
972 struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev)); 975 struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
973 int ret; 976 int ret;
@@ -976,7 +979,8 @@ static int acpi_lpss_resume(struct device *dev)
976 * This call is kept first to be in symmetry with 979 * This call is kept first to be in symmetry with
977 * acpi_lpss_runtime_suspend() one. 980 * acpi_lpss_runtime_suspend() one.
978 */ 981 */
979 if (lpss_quirks & LPSS_QUIRK_ALWAYS_POWER_ON && iosf_mbi_available()) 982 if ((runtime || !pm_resume_via_firmware()) &&
983 lpss_quirks & LPSS_QUIRK_ALWAYS_POWER_ON && iosf_mbi_available())
980 lpss_iosf_exit_d3_state(); 984 lpss_iosf_exit_d3_state();
981 985
982 ret = acpi_dev_resume(dev); 986 ret = acpi_dev_resume(dev);
@@ -1000,12 +1004,12 @@ static int acpi_lpss_suspend_late(struct device *dev)
1000 return 0; 1004 return 0;
1001 1005
1002 ret = pm_generic_suspend_late(dev); 1006 ret = pm_generic_suspend_late(dev);
1003 return ret ? ret : acpi_lpss_suspend(dev, device_may_wakeup(dev)); 1007 return ret ? ret : acpi_lpss_suspend(dev, false);
1004} 1008}
1005 1009
1006static int acpi_lpss_resume_early(struct device *dev) 1010static int acpi_lpss_resume_early(struct device *dev)
1007{ 1011{
1008 int ret = acpi_lpss_resume(dev); 1012 int ret = acpi_lpss_resume(dev, false);
1009 1013
1010 return ret ? ret : pm_generic_resume_early(dev); 1014 return ret ? ret : pm_generic_resume_early(dev);
1011} 1015}
@@ -1020,7 +1024,7 @@ static int acpi_lpss_runtime_suspend(struct device *dev)
1020 1024
1021static int acpi_lpss_runtime_resume(struct device *dev) 1025static int acpi_lpss_runtime_resume(struct device *dev)
1022{ 1026{
1023 int ret = acpi_lpss_resume(dev); 1027 int ret = acpi_lpss_resume(dev, true);
1024 1028
1025 return ret ? ret : pm_generic_runtime_resume(dev); 1029 return ret ? ret : pm_generic_runtime_resume(dev);
1026} 1030}
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index bb94cf0731fe..442a9e24f439 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -2037,6 +2037,17 @@ static inline void acpi_ec_query_exit(void)
2037 } 2037 }
2038} 2038}
2039 2039
2040static const struct dmi_system_id acpi_ec_no_wakeup[] = {
2041 {
2042 .ident = "Thinkpad X1 Carbon 6th",
2043 .matches = {
2044 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
2045 DMI_MATCH(DMI_PRODUCT_NAME, "20KGS3JF01"),
2046 },
2047 },
2048 { },
2049};
2050
2040int __init acpi_ec_init(void) 2051int __init acpi_ec_init(void)
2041{ 2052{
2042 int result; 2053 int result;
@@ -2047,6 +2058,15 @@ int __init acpi_ec_init(void)
2047 if (result) 2058 if (result)
2048 return result; 2059 return result;
2049 2060
2061 /*
2062 * Disable EC wakeup on following systems to prevent periodic
2063 * wakeup from EC GPE.
2064 */
2065 if (dmi_check_system(acpi_ec_no_wakeup)) {
2066 ec_no_wakeup = true;
2067 pr_debug("Disabling EC wakeup on suspend-to-idle\n");
2068 }
2069
2050 /* Drivers must be started after acpi_ec_query_init() */ 2070 /* Drivers must be started after acpi_ec_query_init() */
2051 dsdt_fail = acpi_bus_register_driver(&acpi_ec_driver); 2071 dsdt_fail = acpi_bus_register_driver(&acpi_ec_driver);
2052 /* 2072 /*
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 36622b52e419..df3e1a44707a 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -236,6 +236,13 @@ struct device_link *device_link_add(struct device *consumer,
236 link->rpm_active = true; 236 link->rpm_active = true;
237 } 237 }
238 pm_runtime_new_link(consumer); 238 pm_runtime_new_link(consumer);
239 /*
240 * If the link is being added by the consumer driver at probe
241 * time, balance the decrementation of the supplier's runtime PM
242 * usage counter after consumer probe in driver_probe_device().
243 */
244 if (consumer->links.status == DL_DEV_PROBING)
245 pm_runtime_get_noresume(supplier);
239 } 246 }
240 get_device(supplier); 247 get_device(supplier);
241 link->supplier = supplier; 248 link->supplier = supplier;
@@ -255,12 +262,12 @@ struct device_link *device_link_add(struct device *consumer,
255 switch (consumer->links.status) { 262 switch (consumer->links.status) {
256 case DL_DEV_PROBING: 263 case DL_DEV_PROBING:
257 /* 264 /*
258 * Balance the decrementation of the supplier's 265 * Some callers expect the link creation during
259 * runtime PM usage counter after consumer probe 266 * consumer driver probe to resume the supplier
260 * in driver_probe_device(). 267 * even without DL_FLAG_RPM_ACTIVE.
261 */ 268 */
262 if (flags & DL_FLAG_PM_RUNTIME) 269 if (flags & DL_FLAG_PM_RUNTIME)
263 pm_runtime_get_sync(supplier); 270 pm_runtime_resume(supplier);
264 271
265 link->status = DL_STATE_CONSUMER_PROBE; 272 link->status = DL_STATE_CONSUMER_PROBE;
266 break; 273 break;
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 3b7083b8ecbb..74a05561b620 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -76,6 +76,7 @@ struct link_dead_args {
76#define NBD_HAS_CONFIG_REF 4 76#define NBD_HAS_CONFIG_REF 4
77#define NBD_BOUND 5 77#define NBD_BOUND 5
78#define NBD_DESTROY_ON_DISCONNECT 6 78#define NBD_DESTROY_ON_DISCONNECT 6
79#define NBD_DISCONNECT_ON_CLOSE 7
79 80
80struct nbd_config { 81struct nbd_config {
81 u32 flags; 82 u32 flags;
@@ -138,6 +139,7 @@ static void nbd_config_put(struct nbd_device *nbd);
138static void nbd_connect_reply(struct genl_info *info, int index); 139static void nbd_connect_reply(struct genl_info *info, int index);
139static int nbd_genl_status(struct sk_buff *skb, struct genl_info *info); 140static int nbd_genl_status(struct sk_buff *skb, struct genl_info *info);
140static void nbd_dead_link_work(struct work_struct *work); 141static void nbd_dead_link_work(struct work_struct *work);
142static void nbd_disconnect_and_put(struct nbd_device *nbd);
141 143
142static inline struct device *nbd_to_dev(struct nbd_device *nbd) 144static inline struct device *nbd_to_dev(struct nbd_device *nbd)
143{ 145{
@@ -1305,6 +1307,12 @@ out:
1305static void nbd_release(struct gendisk *disk, fmode_t mode) 1307static void nbd_release(struct gendisk *disk, fmode_t mode)
1306{ 1308{
1307 struct nbd_device *nbd = disk->private_data; 1309 struct nbd_device *nbd = disk->private_data;
1310 struct block_device *bdev = bdget_disk(disk, 0);
1311
1312 if (test_bit(NBD_DISCONNECT_ON_CLOSE, &nbd->config->runtime_flags) &&
1313 bdev->bd_openers == 0)
1314 nbd_disconnect_and_put(nbd);
1315
1308 nbd_config_put(nbd); 1316 nbd_config_put(nbd);
1309 nbd_put(nbd); 1317 nbd_put(nbd);
1310} 1318}
@@ -1705,6 +1713,10 @@ again:
1705 &config->runtime_flags); 1713 &config->runtime_flags);
1706 put_dev = true; 1714 put_dev = true;
1707 } 1715 }
1716 if (flags & NBD_CFLAG_DISCONNECT_ON_CLOSE) {
1717 set_bit(NBD_DISCONNECT_ON_CLOSE,
1718 &config->runtime_flags);
1719 }
1708 } 1720 }
1709 1721
1710 if (info->attrs[NBD_ATTR_SOCKETS]) { 1722 if (info->attrs[NBD_ATTR_SOCKETS]) {
@@ -1749,6 +1761,17 @@ out:
1749 return ret; 1761 return ret;
1750} 1762}
1751 1763
1764static void nbd_disconnect_and_put(struct nbd_device *nbd)
1765{
1766 mutex_lock(&nbd->config_lock);
1767 nbd_disconnect(nbd);
1768 nbd_clear_sock(nbd);
1769 mutex_unlock(&nbd->config_lock);
1770 if (test_and_clear_bit(NBD_HAS_CONFIG_REF,
1771 &nbd->config->runtime_flags))
1772 nbd_config_put(nbd);
1773}
1774
1752static int nbd_genl_disconnect(struct sk_buff *skb, struct genl_info *info) 1775static int nbd_genl_disconnect(struct sk_buff *skb, struct genl_info *info)
1753{ 1776{
1754 struct nbd_device *nbd; 1777 struct nbd_device *nbd;
@@ -1781,13 +1804,7 @@ static int nbd_genl_disconnect(struct sk_buff *skb, struct genl_info *info)
1781 nbd_put(nbd); 1804 nbd_put(nbd);
1782 return 0; 1805 return 0;
1783 } 1806 }
1784 mutex_lock(&nbd->config_lock); 1807 nbd_disconnect_and_put(nbd);
1785 nbd_disconnect(nbd);
1786 nbd_clear_sock(nbd);
1787 mutex_unlock(&nbd->config_lock);
1788 if (test_and_clear_bit(NBD_HAS_CONFIG_REF,
1789 &nbd->config->runtime_flags))
1790 nbd_config_put(nbd);
1791 nbd_config_put(nbd); 1808 nbd_config_put(nbd);
1792 nbd_put(nbd); 1809 nbd_put(nbd);
1793 return 0; 1810 return 0;
@@ -1798,7 +1815,7 @@ static int nbd_genl_reconfigure(struct sk_buff *skb, struct genl_info *info)
1798 struct nbd_device *nbd = NULL; 1815 struct nbd_device *nbd = NULL;
1799 struct nbd_config *config; 1816 struct nbd_config *config;
1800 int index; 1817 int index;
1801 int ret = -EINVAL; 1818 int ret = 0;
1802 bool put_dev = false; 1819 bool put_dev = false;
1803 1820
1804 if (!netlink_capable(skb, CAP_SYS_ADMIN)) 1821 if (!netlink_capable(skb, CAP_SYS_ADMIN))
@@ -1838,6 +1855,7 @@ static int nbd_genl_reconfigure(struct sk_buff *skb, struct genl_info *info)
1838 !nbd->task_recv) { 1855 !nbd->task_recv) {
1839 dev_err(nbd_to_dev(nbd), 1856 dev_err(nbd_to_dev(nbd),
1840 "not configured, cannot reconfigure\n"); 1857 "not configured, cannot reconfigure\n");
1858 ret = -EINVAL;
1841 goto out; 1859 goto out;
1842 } 1860 }
1843 1861
@@ -1862,6 +1880,14 @@ static int nbd_genl_reconfigure(struct sk_buff *skb, struct genl_info *info)
1862 &config->runtime_flags)) 1880 &config->runtime_flags))
1863 refcount_inc(&nbd->refs); 1881 refcount_inc(&nbd->refs);
1864 } 1882 }
1883
1884 if (flags & NBD_CFLAG_DISCONNECT_ON_CLOSE) {
1885 set_bit(NBD_DISCONNECT_ON_CLOSE,
1886 &config->runtime_flags);
1887 } else {
1888 clear_bit(NBD_DISCONNECT_ON_CLOSE,
1889 &config->runtime_flags);
1890 }
1865 } 1891 }
1866 1892
1867 if (info->attrs[NBD_ATTR_SOCKETS]) { 1893 if (info->attrs[NBD_ATTR_SOCKETS]) {
diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c
index 7948049f6c43..042c778e5a4e 100644
--- a/drivers/block/null_blk.c
+++ b/drivers/block/null_blk.c
@@ -1365,7 +1365,7 @@ static blk_qc_t null_queue_bio(struct request_queue *q, struct bio *bio)
1365static enum blk_eh_timer_return null_rq_timed_out_fn(struct request *rq) 1365static enum blk_eh_timer_return null_rq_timed_out_fn(struct request *rq)
1366{ 1366{
1367 pr_info("null: rq %p timed out\n", rq); 1367 pr_info("null: rq %p timed out\n", rq);
1368 blk_mq_complete_request(rq); 1368 __blk_complete_request(rq);
1369 return BLK_EH_DONE; 1369 return BLK_EH_DONE;
1370} 1370}
1371 1371
diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
index 91bb98c42a1c..aaf9e5afaad4 100644
--- a/drivers/char/hw_random/core.c
+++ b/drivers/char/hw_random/core.c
@@ -516,11 +516,18 @@ EXPORT_SYMBOL_GPL(hwrng_register);
516 516
517void hwrng_unregister(struct hwrng *rng) 517void hwrng_unregister(struct hwrng *rng)
518{ 518{
519 int err;
520
519 mutex_lock(&rng_mutex); 521 mutex_lock(&rng_mutex);
520 522
521 list_del(&rng->list); 523 list_del(&rng->list);
522 if (current_rng == rng) 524 if (current_rng == rng) {
523 enable_best_rng(); 525 err = enable_best_rng();
526 if (err) {
527 drop_current_rng();
528 cur_rng_set_by_user = 0;
529 }
530 }
524 531
525 if (list_empty(&rng_list)) { 532 if (list_empty(&rng_list)) {
526 mutex_unlock(&rng_mutex); 533 mutex_unlock(&rng_mutex);
diff --git a/drivers/clocksource/timer-stm32.c b/drivers/clocksource/timer-stm32.c
index e5cdc3af684c..2717f88c7904 100644
--- a/drivers/clocksource/timer-stm32.c
+++ b/drivers/clocksource/timer-stm32.c
@@ -304,8 +304,10 @@ static int __init stm32_timer_init(struct device_node *node)
304 304
305 to->private_data = kzalloc(sizeof(struct stm32_timer_private), 305 to->private_data = kzalloc(sizeof(struct stm32_timer_private),
306 GFP_KERNEL); 306 GFP_KERNEL);
307 if (!to->private_data) 307 if (!to->private_data) {
308 ret = -ENOMEM;
308 goto deinit; 309 goto deinit;
310 }
309 311
310 rstc = of_reset_control_get(node, NULL); 312 rstc = of_reset_control_get(node, NULL);
311 if (!IS_ERR(rstc)) { 313 if (!IS_ERR(rstc)) {
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index 1de5ec8d5ea3..ece120da3353 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -294,6 +294,7 @@ struct pstate_funcs {
294static struct pstate_funcs pstate_funcs __read_mostly; 294static struct pstate_funcs pstate_funcs __read_mostly;
295 295
296static int hwp_active __read_mostly; 296static int hwp_active __read_mostly;
297static int hwp_mode_bdw __read_mostly;
297static bool per_cpu_limits __read_mostly; 298static bool per_cpu_limits __read_mostly;
298static bool hwp_boost __read_mostly; 299static bool hwp_boost __read_mostly;
299 300
@@ -1413,7 +1414,15 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
1413 cpu->pstate.turbo_pstate = pstate_funcs.get_turbo(); 1414 cpu->pstate.turbo_pstate = pstate_funcs.get_turbo();
1414 cpu->pstate.scaling = pstate_funcs.get_scaling(); 1415 cpu->pstate.scaling = pstate_funcs.get_scaling();
1415 cpu->pstate.max_freq = cpu->pstate.max_pstate * cpu->pstate.scaling; 1416 cpu->pstate.max_freq = cpu->pstate.max_pstate * cpu->pstate.scaling;
1416 cpu->pstate.turbo_freq = cpu->pstate.turbo_pstate * cpu->pstate.scaling; 1417
1418 if (hwp_active && !hwp_mode_bdw) {
1419 unsigned int phy_max, current_max;
1420
1421 intel_pstate_get_hwp_max(cpu->cpu, &phy_max, &current_max);
1422 cpu->pstate.turbo_freq = phy_max * cpu->pstate.scaling;
1423 } else {
1424 cpu->pstate.turbo_freq = cpu->pstate.turbo_pstate * cpu->pstate.scaling;
1425 }
1417 1426
1418 if (pstate_funcs.get_aperf_mperf_shift) 1427 if (pstate_funcs.get_aperf_mperf_shift)
1419 cpu->aperf_mperf_shift = pstate_funcs.get_aperf_mperf_shift(); 1428 cpu->aperf_mperf_shift = pstate_funcs.get_aperf_mperf_shift();
@@ -2467,28 +2476,36 @@ static inline bool intel_pstate_has_acpi_ppc(void) { return false; }
2467static inline void intel_pstate_request_control_from_smm(void) {} 2476static inline void intel_pstate_request_control_from_smm(void) {}
2468#endif /* CONFIG_ACPI */ 2477#endif /* CONFIG_ACPI */
2469 2478
2479#define INTEL_PSTATE_HWP_BROADWELL 0x01
2480
2481#define ICPU_HWP(model, hwp_mode) \
2482 { X86_VENDOR_INTEL, 6, model, X86_FEATURE_HWP, hwp_mode }
2483
2470static const struct x86_cpu_id hwp_support_ids[] __initconst = { 2484static const struct x86_cpu_id hwp_support_ids[] __initconst = {
2471 { X86_VENDOR_INTEL, 6, X86_MODEL_ANY, X86_FEATURE_HWP }, 2485 ICPU_HWP(INTEL_FAM6_BROADWELL_X, INTEL_PSTATE_HWP_BROADWELL),
2486 ICPU_HWP(INTEL_FAM6_BROADWELL_XEON_D, INTEL_PSTATE_HWP_BROADWELL),
2487 ICPU_HWP(X86_MODEL_ANY, 0),
2472 {} 2488 {}
2473}; 2489};
2474 2490
2475static int __init intel_pstate_init(void) 2491static int __init intel_pstate_init(void)
2476{ 2492{
2493 const struct x86_cpu_id *id;
2477 int rc; 2494 int rc;
2478 2495
2479 if (no_load) 2496 if (no_load)
2480 return -ENODEV; 2497 return -ENODEV;
2481 2498
2482 if (x86_match_cpu(hwp_support_ids)) { 2499 id = x86_match_cpu(hwp_support_ids);
2500 if (id) {
2483 copy_cpu_funcs(&core_funcs); 2501 copy_cpu_funcs(&core_funcs);
2484 if (!no_hwp) { 2502 if (!no_hwp) {
2485 hwp_active++; 2503 hwp_active++;
2504 hwp_mode_bdw = id->driver_data;
2486 intel_pstate.attr = hwp_cpufreq_attrs; 2505 intel_pstate.attr = hwp_cpufreq_attrs;
2487 goto hwp_cpu_matched; 2506 goto hwp_cpu_matched;
2488 } 2507 }
2489 } else { 2508 } else {
2490 const struct x86_cpu_id *id;
2491
2492 id = x86_match_cpu(intel_pstate_cpu_ids); 2509 id = x86_match_cpu(intel_pstate_cpu_ids);
2493 if (!id) 2510 if (!id)
2494 return -ENODEV; 2511 return -ENODEV;
diff --git a/drivers/cpufreq/qcom-cpufreq-kryo.c b/drivers/cpufreq/qcom-cpufreq-kryo.c
index d049fe4b80c4..01bddacf5c3b 100644
--- a/drivers/cpufreq/qcom-cpufreq-kryo.c
+++ b/drivers/cpufreq/qcom-cpufreq-kryo.c
@@ -42,6 +42,8 @@ enum _msm8996_version {
42 NUM_OF_MSM8996_VERSIONS, 42 NUM_OF_MSM8996_VERSIONS,
43}; 43};
44 44
45struct platform_device *cpufreq_dt_pdev, *kryo_cpufreq_pdev;
46
45static enum _msm8996_version __init qcom_cpufreq_kryo_get_msm_id(void) 47static enum _msm8996_version __init qcom_cpufreq_kryo_get_msm_id(void)
46{ 48{
47 size_t len; 49 size_t len;
@@ -74,7 +76,6 @@ static enum _msm8996_version __init qcom_cpufreq_kryo_get_msm_id(void)
74static int qcom_cpufreq_kryo_probe(struct platform_device *pdev) 76static int qcom_cpufreq_kryo_probe(struct platform_device *pdev)
75{ 77{
76 struct opp_table *opp_tables[NR_CPUS] = {0}; 78 struct opp_table *opp_tables[NR_CPUS] = {0};
77 struct platform_device *cpufreq_dt_pdev;
78 enum _msm8996_version msm8996_version; 79 enum _msm8996_version msm8996_version;
79 struct nvmem_cell *speedbin_nvmem; 80 struct nvmem_cell *speedbin_nvmem;
80 struct device_node *np; 81 struct device_node *np;
@@ -115,6 +116,8 @@ static int qcom_cpufreq_kryo_probe(struct platform_device *pdev)
115 116
116 speedbin = nvmem_cell_read(speedbin_nvmem, &len); 117 speedbin = nvmem_cell_read(speedbin_nvmem, &len);
117 nvmem_cell_put(speedbin_nvmem); 118 nvmem_cell_put(speedbin_nvmem);
119 if (IS_ERR(speedbin))
120 return PTR_ERR(speedbin);
118 121
119 switch (msm8996_version) { 122 switch (msm8996_version) {
120 case MSM8996_V3: 123 case MSM8996_V3:
@@ -127,6 +130,7 @@ static int qcom_cpufreq_kryo_probe(struct platform_device *pdev)
127 BUG(); 130 BUG();
128 break; 131 break;
129 } 132 }
133 kfree(speedbin);
130 134
131 for_each_possible_cpu(cpu) { 135 for_each_possible_cpu(cpu) {
132 cpu_dev = get_cpu_device(cpu); 136 cpu_dev = get_cpu_device(cpu);
@@ -162,8 +166,15 @@ free_opp:
162 return ret; 166 return ret;
163} 167}
164 168
169static int qcom_cpufreq_kryo_remove(struct platform_device *pdev)
170{
171 platform_device_unregister(cpufreq_dt_pdev);
172 return 0;
173}
174
165static struct platform_driver qcom_cpufreq_kryo_driver = { 175static struct platform_driver qcom_cpufreq_kryo_driver = {
166 .probe = qcom_cpufreq_kryo_probe, 176 .probe = qcom_cpufreq_kryo_probe,
177 .remove = qcom_cpufreq_kryo_remove,
167 .driver = { 178 .driver = {
168 .name = "qcom-cpufreq-kryo", 179 .name = "qcom-cpufreq-kryo",
169 }, 180 },
@@ -198,8 +209,9 @@ static int __init qcom_cpufreq_kryo_init(void)
198 if (unlikely(ret < 0)) 209 if (unlikely(ret < 0))
199 return ret; 210 return ret;
200 211
201 ret = PTR_ERR_OR_ZERO(platform_device_register_simple( 212 kryo_cpufreq_pdev = platform_device_register_simple(
202 "qcom-cpufreq-kryo", -1, NULL, 0)); 213 "qcom-cpufreq-kryo", -1, NULL, 0);
214 ret = PTR_ERR_OR_ZERO(kryo_cpufreq_pdev);
203 if (0 == ret) 215 if (0 == ret)
204 return 0; 216 return 0;
205 217
@@ -208,5 +220,12 @@ static int __init qcom_cpufreq_kryo_init(void)
208} 220}
209module_init(qcom_cpufreq_kryo_init); 221module_init(qcom_cpufreq_kryo_init);
210 222
223static void __init qcom_cpufreq_kryo_exit(void)
224{
225 platform_device_unregister(kryo_cpufreq_pdev);
226 platform_driver_unregister(&qcom_cpufreq_kryo_driver);
227}
228module_exit(qcom_cpufreq_kryo_exit);
229
211MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Kryo CPUfreq driver"); 230MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Kryo CPUfreq driver");
212MODULE_LICENSE("GPL v2"); 231MODULE_LICENSE("GPL v2");
diff --git a/drivers/crypto/chelsio/chtls/chtls_io.c b/drivers/crypto/chelsio/chtls/chtls_io.c
index 00c7aab8e7d0..afebbd87c4aa 100644
--- a/drivers/crypto/chelsio/chtls/chtls_io.c
+++ b/drivers/crypto/chelsio/chtls/chtls_io.c
@@ -1548,15 +1548,14 @@ skip_copy:
1548 tp->urg_data = 0; 1548 tp->urg_data = 0;
1549 1549
1550 if ((avail + offset) >= skb->len) { 1550 if ((avail + offset) >= skb->len) {
1551 if (likely(skb))
1552 chtls_free_skb(sk, skb);
1553 buffers_freed++;
1554 if (ULP_SKB_CB(skb)->flags & ULPCB_FLAG_TLS_HDR) { 1551 if (ULP_SKB_CB(skb)->flags & ULPCB_FLAG_TLS_HDR) {
1555 tp->copied_seq += skb->len; 1552 tp->copied_seq += skb->len;
1556 hws->rcvpld = skb->hdr_len; 1553 hws->rcvpld = skb->hdr_len;
1557 } else { 1554 } else {
1558 tp->copied_seq += hws->rcvpld; 1555 tp->copied_seq += hws->rcvpld;
1559 } 1556 }
1557 chtls_free_skb(sk, skb);
1558 buffers_freed++;
1560 hws->copied_seq = 0; 1559 hws->copied_seq = 0;
1561 if (copied >= target && 1560 if (copied >= target &&
1562 !skb_peek(&sk->sk_receive_queue)) 1561 !skb_peek(&sk->sk_receive_queue))
diff --git a/drivers/firmware/efi/libstub/tpm.c b/drivers/firmware/efi/libstub/tpm.c
index caa37a6dd9d4..a90b0b8fc69a 100644
--- a/drivers/firmware/efi/libstub/tpm.c
+++ b/drivers/firmware/efi/libstub/tpm.c
@@ -64,7 +64,7 @@ static void efi_retrieve_tpm2_eventlog_1_2(efi_system_table_t *sys_table_arg)
64 efi_guid_t tcg2_guid = EFI_TCG2_PROTOCOL_GUID; 64 efi_guid_t tcg2_guid = EFI_TCG2_PROTOCOL_GUID;
65 efi_guid_t linux_eventlog_guid = LINUX_EFI_TPM_EVENT_LOG_GUID; 65 efi_guid_t linux_eventlog_guid = LINUX_EFI_TPM_EVENT_LOG_GUID;
66 efi_status_t status; 66 efi_status_t status;
67 efi_physical_addr_t log_location, log_last_entry; 67 efi_physical_addr_t log_location = 0, log_last_entry = 0;
68 struct linux_efi_tpm_eventlog *log_tbl = NULL; 68 struct linux_efi_tpm_eventlog *log_tbl = NULL;
69 unsigned long first_entry_addr, last_entry_addr; 69 unsigned long first_entry_addr, last_entry_addr;
70 size_t log_size, last_entry_size; 70 size_t log_size, last_entry_size;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 3317d1536f4f..6e5284e6c028 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2158,10 +2158,18 @@ bool amdgpu_device_asic_has_dc_support(enum amd_asic_type asic_type)
2158 switch (asic_type) { 2158 switch (asic_type) {
2159#if defined(CONFIG_DRM_AMD_DC) 2159#if defined(CONFIG_DRM_AMD_DC)
2160 case CHIP_BONAIRE: 2160 case CHIP_BONAIRE:
2161 case CHIP_HAWAII:
2162 case CHIP_KAVERI: 2161 case CHIP_KAVERI:
2163 case CHIP_KABINI: 2162 case CHIP_KABINI:
2164 case CHIP_MULLINS: 2163 case CHIP_MULLINS:
2164 /*
2165 * We have systems in the wild with these ASICs that require
2166 * LVDS and VGA support which is not supported with DC.
2167 *
2168 * Fallback to the non-DC driver here by default so as not to
2169 * cause regressions.
2170 */
2171 return amdgpu_dc > 0;
2172 case CHIP_HAWAII:
2165 case CHIP_CARRIZO: 2173 case CHIP_CARRIZO:
2166 case CHIP_STONEY: 2174 case CHIP_STONEY:
2167 case CHIP_POLARIS10: 2175 case CHIP_POLARIS10:
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 5e4e1bd90383..3526efa8960e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -762,8 +762,7 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
762 domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type); 762 domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type);
763 if (domain == AMDGPU_GEM_DOMAIN_VRAM) { 763 if (domain == AMDGPU_GEM_DOMAIN_VRAM) {
764 adev->vram_pin_size += amdgpu_bo_size(bo); 764 adev->vram_pin_size += amdgpu_bo_size(bo);
765 if (bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS) 765 adev->invisible_pin_size += amdgpu_vram_mgr_bo_invisible_size(bo);
766 adev->invisible_pin_size += amdgpu_bo_size(bo);
767 } else if (domain == AMDGPU_GEM_DOMAIN_GTT) { 766 } else if (domain == AMDGPU_GEM_DOMAIN_GTT) {
768 adev->gart_pin_size += amdgpu_bo_size(bo); 767 adev->gart_pin_size += amdgpu_bo_size(bo);
769 } 768 }
@@ -790,25 +789,22 @@ int amdgpu_bo_unpin(struct amdgpu_bo *bo)
790 bo->pin_count--; 789 bo->pin_count--;
791 if (bo->pin_count) 790 if (bo->pin_count)
792 return 0; 791 return 0;
793 for (i = 0; i < bo->placement.num_placement; i++) {
794 bo->placements[i].lpfn = 0;
795 bo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT;
796 }
797 r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
798 if (unlikely(r)) {
799 dev_err(adev->dev, "%p validate failed for unpin\n", bo);
800 goto error;
801 }
802 792
803 if (bo->tbo.mem.mem_type == TTM_PL_VRAM) { 793 if (bo->tbo.mem.mem_type == TTM_PL_VRAM) {
804 adev->vram_pin_size -= amdgpu_bo_size(bo); 794 adev->vram_pin_size -= amdgpu_bo_size(bo);
805 if (bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS) 795 adev->invisible_pin_size -= amdgpu_vram_mgr_bo_invisible_size(bo);
806 adev->invisible_pin_size -= amdgpu_bo_size(bo);
807 } else if (bo->tbo.mem.mem_type == TTM_PL_TT) { 796 } else if (bo->tbo.mem.mem_type == TTM_PL_TT) {
808 adev->gart_pin_size -= amdgpu_bo_size(bo); 797 adev->gart_pin_size -= amdgpu_bo_size(bo);
809 } 798 }
810 799
811error: 800 for (i = 0; i < bo->placement.num_placement; i++) {
801 bo->placements[i].lpfn = 0;
802 bo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT;
803 }
804 r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
805 if (unlikely(r))
806 dev_err(adev->dev, "%p validate failed for unpin\n", bo);
807
812 return r; 808 return r;
813} 809}
814 810
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
index e969c879d87e..e5da4654b630 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
@@ -73,6 +73,7 @@ bool amdgpu_gtt_mgr_has_gart_addr(struct ttm_mem_reg *mem);
73uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man); 73uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man);
74int amdgpu_gtt_mgr_recover(struct ttm_mem_type_manager *man); 74int amdgpu_gtt_mgr_recover(struct ttm_mem_type_manager *man);
75 75
76u64 amdgpu_vram_mgr_bo_invisible_size(struct amdgpu_bo *bo);
76uint64_t amdgpu_vram_mgr_usage(struct ttm_mem_type_manager *man); 77uint64_t amdgpu_vram_mgr_usage(struct ttm_mem_type_manager *man);
77uint64_t amdgpu_vram_mgr_vis_usage(struct ttm_mem_type_manager *man); 78uint64_t amdgpu_vram_mgr_vis_usage(struct ttm_mem_type_manager *man);
78 79
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index bcf68f80bbf0..3ff08e326838 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -130,7 +130,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
130 unsigned version_major, version_minor, family_id; 130 unsigned version_major, version_minor, family_id;
131 int i, j, r; 131 int i, j, r;
132 132
133 INIT_DELAYED_WORK(&adev->uvd.inst->idle_work, amdgpu_uvd_idle_work_handler); 133 INIT_DELAYED_WORK(&adev->uvd.idle_work, amdgpu_uvd_idle_work_handler);
134 134
135 switch (adev->asic_type) { 135 switch (adev->asic_type) {
136#ifdef CONFIG_DRM_AMDGPU_CIK 136#ifdef CONFIG_DRM_AMDGPU_CIK
@@ -314,12 +314,12 @@ int amdgpu_uvd_suspend(struct amdgpu_device *adev)
314 void *ptr; 314 void *ptr;
315 int i, j; 315 int i, j;
316 316
317 cancel_delayed_work_sync(&adev->uvd.idle_work);
318
317 for (j = 0; j < adev->uvd.num_uvd_inst; ++j) { 319 for (j = 0; j < adev->uvd.num_uvd_inst; ++j) {
318 if (adev->uvd.inst[j].vcpu_bo == NULL) 320 if (adev->uvd.inst[j].vcpu_bo == NULL)
319 continue; 321 continue;
320 322
321 cancel_delayed_work_sync(&adev->uvd.inst[j].idle_work);
322
323 /* only valid for physical mode */ 323 /* only valid for physical mode */
324 if (adev->asic_type < CHIP_POLARIS10) { 324 if (adev->asic_type < CHIP_POLARIS10) {
325 for (i = 0; i < adev->uvd.max_handles; ++i) 325 for (i = 0; i < adev->uvd.max_handles; ++i)
@@ -1145,7 +1145,7 @@ int amdgpu_uvd_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
1145static void amdgpu_uvd_idle_work_handler(struct work_struct *work) 1145static void amdgpu_uvd_idle_work_handler(struct work_struct *work)
1146{ 1146{
1147 struct amdgpu_device *adev = 1147 struct amdgpu_device *adev =
1148 container_of(work, struct amdgpu_device, uvd.inst->idle_work.work); 1148 container_of(work, struct amdgpu_device, uvd.idle_work.work);
1149 unsigned fences = 0, i, j; 1149 unsigned fences = 0, i, j;
1150 1150
1151 for (i = 0; i < adev->uvd.num_uvd_inst; ++i) { 1151 for (i = 0; i < adev->uvd.num_uvd_inst; ++i) {
@@ -1167,7 +1167,7 @@ static void amdgpu_uvd_idle_work_handler(struct work_struct *work)
1167 AMD_CG_STATE_GATE); 1167 AMD_CG_STATE_GATE);
1168 } 1168 }
1169 } else { 1169 } else {
1170 schedule_delayed_work(&adev->uvd.inst->idle_work, UVD_IDLE_TIMEOUT); 1170 schedule_delayed_work(&adev->uvd.idle_work, UVD_IDLE_TIMEOUT);
1171 } 1171 }
1172} 1172}
1173 1173
@@ -1179,7 +1179,7 @@ void amdgpu_uvd_ring_begin_use(struct amdgpu_ring *ring)
1179 if (amdgpu_sriov_vf(adev)) 1179 if (amdgpu_sriov_vf(adev))
1180 return; 1180 return;
1181 1181
1182 set_clocks = !cancel_delayed_work_sync(&adev->uvd.inst->idle_work); 1182 set_clocks = !cancel_delayed_work_sync(&adev->uvd.idle_work);
1183 if (set_clocks) { 1183 if (set_clocks) {
1184 if (adev->pm.dpm_enabled) { 1184 if (adev->pm.dpm_enabled) {
1185 amdgpu_dpm_enable_uvd(adev, true); 1185 amdgpu_dpm_enable_uvd(adev, true);
@@ -1196,7 +1196,7 @@ void amdgpu_uvd_ring_begin_use(struct amdgpu_ring *ring)
1196void amdgpu_uvd_ring_end_use(struct amdgpu_ring *ring) 1196void amdgpu_uvd_ring_end_use(struct amdgpu_ring *ring)
1197{ 1197{
1198 if (!amdgpu_sriov_vf(ring->adev)) 1198 if (!amdgpu_sriov_vf(ring->adev))
1199 schedule_delayed_work(&ring->adev->uvd.inst->idle_work, UVD_IDLE_TIMEOUT); 1199 schedule_delayed_work(&ring->adev->uvd.idle_work, UVD_IDLE_TIMEOUT);
1200} 1200}
1201 1201
1202/** 1202/**
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h
index b1579fba134c..8b23a1b00c76 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h
@@ -44,7 +44,6 @@ struct amdgpu_uvd_inst {
44 void *saved_bo; 44 void *saved_bo;
45 atomic_t handles[AMDGPU_MAX_UVD_HANDLES]; 45 atomic_t handles[AMDGPU_MAX_UVD_HANDLES];
46 struct drm_file *filp[AMDGPU_MAX_UVD_HANDLES]; 46 struct drm_file *filp[AMDGPU_MAX_UVD_HANDLES];
47 struct delayed_work idle_work;
48 struct amdgpu_ring ring; 47 struct amdgpu_ring ring;
49 struct amdgpu_ring ring_enc[AMDGPU_MAX_UVD_ENC_RINGS]; 48 struct amdgpu_ring ring_enc[AMDGPU_MAX_UVD_ENC_RINGS];
50 struct amdgpu_irq_src irq; 49 struct amdgpu_irq_src irq;
@@ -62,6 +61,7 @@ struct amdgpu_uvd {
62 bool address_64_bit; 61 bool address_64_bit;
63 bool use_ctx_buf; 62 bool use_ctx_buf;
64 struct amdgpu_uvd_inst inst[AMDGPU_MAX_UVD_INSTANCES]; 63 struct amdgpu_uvd_inst inst[AMDGPU_MAX_UVD_INSTANCES];
64 struct delayed_work idle_work;
65}; 65};
66 66
67int amdgpu_uvd_sw_init(struct amdgpu_device *adev); 67int amdgpu_uvd_sw_init(struct amdgpu_device *adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
index 9aca653bec07..b6333f92ba45 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
@@ -97,6 +97,38 @@ static u64 amdgpu_vram_mgr_vis_size(struct amdgpu_device *adev,
97} 97}
98 98
99/** 99/**
100 * amdgpu_vram_mgr_bo_invisible_size - CPU invisible BO size
101 *
102 * @bo: &amdgpu_bo buffer object (must be in VRAM)
103 *
104 * Returns:
105 * How much of the given &amdgpu_bo buffer object lies in CPU invisible VRAM.
106 */
107u64 amdgpu_vram_mgr_bo_invisible_size(struct amdgpu_bo *bo)
108{
109 struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
110 struct ttm_mem_reg *mem = &bo->tbo.mem;
111 struct drm_mm_node *nodes = mem->mm_node;
112 unsigned pages = mem->num_pages;
113 u64 usage = 0;
114
115 if (adev->gmc.visible_vram_size == adev->gmc.real_vram_size)
116 return 0;
117
118 if (mem->start >= adev->gmc.visible_vram_size >> PAGE_SHIFT)
119 return amdgpu_bo_size(bo);
120
121 while (nodes && pages) {
122 usage += nodes->size << PAGE_SHIFT;
123 usage -= amdgpu_vram_mgr_vis_size(adev, nodes);
124 pages -= nodes->size;
125 ++nodes;
126 }
127
128 return usage;
129}
130
131/**
100 * amdgpu_vram_mgr_new - allocate new ranges 132 * amdgpu_vram_mgr_new - allocate new ranges
101 * 133 *
102 * @man: TTM memory type manager 134 * @man: TTM memory type manager
@@ -135,7 +167,8 @@ static int amdgpu_vram_mgr_new(struct ttm_mem_type_manager *man,
135 num_nodes = DIV_ROUND_UP(mem->num_pages, pages_per_node); 167 num_nodes = DIV_ROUND_UP(mem->num_pages, pages_per_node);
136 } 168 }
137 169
138 nodes = kcalloc(num_nodes, sizeof(*nodes), GFP_KERNEL); 170 nodes = kvmalloc_array(num_nodes, sizeof(*nodes),
171 GFP_KERNEL | __GFP_ZERO);
139 if (!nodes) 172 if (!nodes)
140 return -ENOMEM; 173 return -ENOMEM;
141 174
@@ -190,7 +223,7 @@ error:
190 drm_mm_remove_node(&nodes[i]); 223 drm_mm_remove_node(&nodes[i]);
191 spin_unlock(&mgr->lock); 224 spin_unlock(&mgr->lock);
192 225
193 kfree(nodes); 226 kvfree(nodes);
194 return r == -ENOSPC ? 0 : r; 227 return r == -ENOSPC ? 0 : r;
195} 228}
196 229
@@ -229,7 +262,7 @@ static void amdgpu_vram_mgr_del(struct ttm_mem_type_manager *man,
229 atomic64_sub(usage, &mgr->usage); 262 atomic64_sub(usage, &mgr->usage);
230 atomic64_sub(vis_usage, &mgr->vis_usage); 263 atomic64_sub(vis_usage, &mgr->vis_usage);
231 264
232 kfree(mem->mm_node); 265 kvfree(mem->mm_node);
233 mem->mm_node = NULL; 266 mem->mm_node = NULL;
234} 267}
235 268
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
index dbe4b1f66784..22364875a943 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
@@ -1090,7 +1090,7 @@ static int vega10_disable_se_edc_config(struct pp_hwmgr *hwmgr)
1090static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr) 1090static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
1091{ 1091{
1092 struct amdgpu_device *adev = hwmgr->adev; 1092 struct amdgpu_device *adev = hwmgr->adev;
1093 int result; 1093 int result = 0;
1094 uint32_t num_se = 0; 1094 uint32_t num_se = 0;
1095 uint32_t count, data; 1095 uint32_t count, data;
1096 1096
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
index 73c875db45f4..47e0992f3908 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
@@ -839,7 +839,7 @@ static int atmel_hlcdc_plane_init_properties(struct atmel_hlcdc_plane *plane)
839 return ret; 839 return ret;
840 } 840 }
841 841
842 if (desc->layout.xstride && desc->layout.pstride) { 842 if (desc->layout.xstride[0] && desc->layout.pstride[0]) {
843 int ret; 843 int ret;
844 844
845 ret = drm_plane_create_rotation_property(&plane->base, 845 ret = drm_plane_create_rotation_property(&plane->base,
diff --git a/drivers/gpu/drm/bridge/sil-sii8620.c b/drivers/gpu/drm/bridge/sil-sii8620.c
index 7ab36042a822..250effa0e6b8 100644
--- a/drivers/gpu/drm/bridge/sil-sii8620.c
+++ b/drivers/gpu/drm/bridge/sil-sii8620.c
@@ -36,8 +36,11 @@
36 36
37#define SII8620_BURST_BUF_LEN 288 37#define SII8620_BURST_BUF_LEN 288
38#define VAL_RX_HDMI_CTRL2_DEFVAL VAL_RX_HDMI_CTRL2_IDLE_CNT(3) 38#define VAL_RX_HDMI_CTRL2_DEFVAL VAL_RX_HDMI_CTRL2_IDLE_CNT(3)
39#define MHL1_MAX_LCLK 225000 39
40#define MHL3_MAX_LCLK 600000 40#define MHL1_MAX_PCLK 75000
41#define MHL1_MAX_PCLK_PP_MODE 150000
42#define MHL3_MAX_PCLK 200000
43#define MHL3_MAX_PCLK_PP_MODE 300000
41 44
42enum sii8620_mode { 45enum sii8620_mode {
43 CM_DISCONNECTED, 46 CM_DISCONNECTED,
@@ -80,6 +83,9 @@ struct sii8620 {
80 u8 devcap[MHL_DCAP_SIZE]; 83 u8 devcap[MHL_DCAP_SIZE];
81 u8 xdevcap[MHL_XDC_SIZE]; 84 u8 xdevcap[MHL_XDC_SIZE];
82 u8 avif[HDMI_INFOFRAME_SIZE(AVI)]; 85 u8 avif[HDMI_INFOFRAME_SIZE(AVI)];
86 bool feature_complete;
87 bool devcap_read;
88 bool sink_detected;
83 struct edid *edid; 89 struct edid *edid;
84 unsigned int gen2_write_burst:1; 90 unsigned int gen2_write_burst:1;
85 enum sii8620_mt_state mt_state; 91 enum sii8620_mt_state mt_state;
@@ -476,7 +482,7 @@ static void sii8620_update_array(u8 *dst, u8 *src, int count)
476 } 482 }
477} 483}
478 484
479static void sii8620_sink_detected(struct sii8620 *ctx, int ret) 485static void sii8620_identify_sink(struct sii8620 *ctx)
480{ 486{
481 static const char * const sink_str[] = { 487 static const char * const sink_str[] = {
482 [SINK_NONE] = "NONE", 488 [SINK_NONE] = "NONE",
@@ -487,7 +493,7 @@ static void sii8620_sink_detected(struct sii8620 *ctx, int ret)
487 char sink_name[20]; 493 char sink_name[20];
488 struct device *dev = ctx->dev; 494 struct device *dev = ctx->dev;
489 495
490 if (ret < 0) 496 if (!ctx->sink_detected || !ctx->devcap_read)
491 return; 497 return;
492 498
493 sii8620_fetch_edid(ctx); 499 sii8620_fetch_edid(ctx);
@@ -496,6 +502,7 @@ static void sii8620_sink_detected(struct sii8620 *ctx, int ret)
496 sii8620_mhl_disconnected(ctx); 502 sii8620_mhl_disconnected(ctx);
497 return; 503 return;
498 } 504 }
505 sii8620_set_upstream_edid(ctx);
499 506
500 if (drm_detect_hdmi_monitor(ctx->edid)) 507 if (drm_detect_hdmi_monitor(ctx->edid))
501 ctx->sink_type = SINK_HDMI; 508 ctx->sink_type = SINK_HDMI;
@@ -508,53 +515,6 @@ static void sii8620_sink_detected(struct sii8620 *ctx, int ret)
508 sink_str[ctx->sink_type], sink_name); 515 sink_str[ctx->sink_type], sink_name);
509} 516}
510 517
511static void sii8620_hsic_init(struct sii8620 *ctx)
512{
513 if (!sii8620_is_mhl3(ctx))
514 return;
515
516 sii8620_write(ctx, REG_FCGC,
517 BIT_FCGC_HSIC_HOSTMODE | BIT_FCGC_HSIC_ENABLE);
518 sii8620_setbits(ctx, REG_HRXCTRL3,
519 BIT_HRXCTRL3_HRX_STAY_RESET | BIT_HRXCTRL3_STATUS_EN, ~0);
520 sii8620_setbits(ctx, REG_TTXNUMB, MSK_TTXNUMB_TTX_NUMBPS, 4);
521 sii8620_setbits(ctx, REG_TRXCTRL, BIT_TRXCTRL_TRX_FROM_SE_COC, ~0);
522 sii8620_setbits(ctx, REG_HTXCTRL, BIT_HTXCTRL_HTX_DRVCONN1, 0);
523 sii8620_setbits(ctx, REG_KEEPER, MSK_KEEPER_MODE, VAL_KEEPER_MODE_HOST);
524 sii8620_write_seq_static(ctx,
525 REG_TDMLLCTL, 0,
526 REG_UTSRST, BIT_UTSRST_HRX_SRST | BIT_UTSRST_HTX_SRST |
527 BIT_UTSRST_KEEPER_SRST | BIT_UTSRST_FC_SRST,
528 REG_UTSRST, BIT_UTSRST_HRX_SRST | BIT_UTSRST_HTX_SRST,
529 REG_HRXINTL, 0xff,
530 REG_HRXINTH, 0xff,
531 REG_TTXINTL, 0xff,
532 REG_TTXINTH, 0xff,
533 REG_TRXINTL, 0xff,
534 REG_TRXINTH, 0xff,
535 REG_HTXINTL, 0xff,
536 REG_HTXINTH, 0xff,
537 REG_FCINTR0, 0xff,
538 REG_FCINTR1, 0xff,
539 REG_FCINTR2, 0xff,
540 REG_FCINTR3, 0xff,
541 REG_FCINTR4, 0xff,
542 REG_FCINTR5, 0xff,
543 REG_FCINTR6, 0xff,
544 REG_FCINTR7, 0xff
545 );
546}
547
548static void sii8620_edid_read(struct sii8620 *ctx, int ret)
549{
550 if (ret < 0)
551 return;
552
553 sii8620_set_upstream_edid(ctx);
554 sii8620_hsic_init(ctx);
555 sii8620_enable_hpd(ctx);
556}
557
558static void sii8620_mr_devcap(struct sii8620 *ctx) 518static void sii8620_mr_devcap(struct sii8620 *ctx)
559{ 519{
560 u8 dcap[MHL_DCAP_SIZE]; 520 u8 dcap[MHL_DCAP_SIZE];
@@ -570,6 +530,8 @@ static void sii8620_mr_devcap(struct sii8620 *ctx)
570 dcap[MHL_DCAP_ADOPTER_ID_H], dcap[MHL_DCAP_ADOPTER_ID_L], 530 dcap[MHL_DCAP_ADOPTER_ID_H], dcap[MHL_DCAP_ADOPTER_ID_L],
571 dcap[MHL_DCAP_DEVICE_ID_H], dcap[MHL_DCAP_DEVICE_ID_L]); 531 dcap[MHL_DCAP_DEVICE_ID_H], dcap[MHL_DCAP_DEVICE_ID_L]);
572 sii8620_update_array(ctx->devcap, dcap, MHL_DCAP_SIZE); 532 sii8620_update_array(ctx->devcap, dcap, MHL_DCAP_SIZE);
533 ctx->devcap_read = true;
534 sii8620_identify_sink(ctx);
573} 535}
574 536
575static void sii8620_mr_xdevcap(struct sii8620 *ctx) 537static void sii8620_mr_xdevcap(struct sii8620 *ctx)
@@ -807,6 +769,7 @@ static void sii8620_burst_rx_all(struct sii8620 *ctx)
807static void sii8620_fetch_edid(struct sii8620 *ctx) 769static void sii8620_fetch_edid(struct sii8620 *ctx)
808{ 770{
809 u8 lm_ddc, ddc_cmd, int3, cbus; 771 u8 lm_ddc, ddc_cmd, int3, cbus;
772 unsigned long timeout;
810 int fetched, i; 773 int fetched, i;
811 int edid_len = EDID_LENGTH; 774 int edid_len = EDID_LENGTH;
812 u8 *edid; 775 u8 *edid;
@@ -856,23 +819,31 @@ static void sii8620_fetch_edid(struct sii8620 *ctx)
856 REG_DDC_CMD, ddc_cmd | VAL_DDC_CMD_ENH_DDC_READ_NO_ACK 819 REG_DDC_CMD, ddc_cmd | VAL_DDC_CMD_ENH_DDC_READ_NO_ACK
857 ); 820 );
858 821
859 do { 822 int3 = 0;
860 int3 = sii8620_readb(ctx, REG_INTR3); 823 timeout = jiffies + msecs_to_jiffies(200);
824 for (;;) {
861 cbus = sii8620_readb(ctx, REG_CBUS_STATUS); 825 cbus = sii8620_readb(ctx, REG_CBUS_STATUS);
862 826 if (~cbus & BIT_CBUS_STATUS_CBUS_CONNECTED) {
863 if (int3 & BIT_DDC_CMD_DONE) 827 kfree(edid);
864 break; 828 edid = NULL;
865 829 goto end;
866 if (!(cbus & BIT_CBUS_STATUS_CBUS_CONNECTED)) { 830 }
831 if (int3 & BIT_DDC_CMD_DONE) {
832 if (sii8620_readb(ctx, REG_DDC_DOUT_CNT)
833 >= FETCH_SIZE)
834 break;
835 } else {
836 int3 = sii8620_readb(ctx, REG_INTR3);
837 }
838 if (time_is_before_jiffies(timeout)) {
839 ctx->error = -ETIMEDOUT;
840 dev_err(ctx->dev, "timeout during EDID read\n");
867 kfree(edid); 841 kfree(edid);
868 edid = NULL; 842 edid = NULL;
869 goto end; 843 goto end;
870 } 844 }
871 } while (1);
872
873 sii8620_readb(ctx, REG_DDC_STATUS);
874 while (sii8620_readb(ctx, REG_DDC_DOUT_CNT) < FETCH_SIZE)
875 usleep_range(10, 20); 845 usleep_range(10, 20);
846 }
876 847
877 sii8620_read_buf(ctx, REG_DDC_DATA, edid + fetched, FETCH_SIZE); 848 sii8620_read_buf(ctx, REG_DDC_DATA, edid + fetched, FETCH_SIZE);
878 if (fetched + FETCH_SIZE == EDID_LENGTH) { 849 if (fetched + FETCH_SIZE == EDID_LENGTH) {
@@ -971,8 +942,17 @@ static int sii8620_hw_on(struct sii8620 *ctx)
971 ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); 942 ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
972 if (ret) 943 if (ret)
973 return ret; 944 return ret;
945
974 usleep_range(10000, 20000); 946 usleep_range(10000, 20000);
975 return clk_prepare_enable(ctx->clk_xtal); 947 ret = clk_prepare_enable(ctx->clk_xtal);
948 if (ret)
949 return ret;
950
951 msleep(100);
952 gpiod_set_value(ctx->gpio_reset, 0);
953 msleep(100);
954
955 return 0;
976} 956}
977 957
978static int sii8620_hw_off(struct sii8620 *ctx) 958static int sii8620_hw_off(struct sii8620 *ctx)
@@ -982,17 +962,6 @@ static int sii8620_hw_off(struct sii8620 *ctx)
982 return regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); 962 return regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
983} 963}
984 964
985static void sii8620_hw_reset(struct sii8620 *ctx)
986{
987 usleep_range(10000, 20000);
988 gpiod_set_value(ctx->gpio_reset, 0);
989 usleep_range(5000, 20000);
990 gpiod_set_value(ctx->gpio_reset, 1);
991 usleep_range(10000, 20000);
992 gpiod_set_value(ctx->gpio_reset, 0);
993 msleep(300);
994}
995
996static void sii8620_cbus_reset(struct sii8620 *ctx) 965static void sii8620_cbus_reset(struct sii8620 *ctx)
997{ 966{
998 sii8620_write(ctx, REG_PWD_SRST, BIT_PWD_SRST_CBUS_RST 967 sii8620_write(ctx, REG_PWD_SRST, BIT_PWD_SRST_CBUS_RST
@@ -1048,20 +1017,11 @@ static void sii8620_stop_video(struct sii8620 *ctx)
1048 1017
1049static void sii8620_set_format(struct sii8620 *ctx) 1018static void sii8620_set_format(struct sii8620 *ctx)
1050{ 1019{
1051 u8 out_fmt;
1052
1053 if (sii8620_is_mhl3(ctx)) { 1020 if (sii8620_is_mhl3(ctx)) {
1054 sii8620_setbits(ctx, REG_M3_P0CTRL, 1021 sii8620_setbits(ctx, REG_M3_P0CTRL,
1055 BIT_M3_P0CTRL_MHL3_P0_PIXEL_MODE_PACKED, 1022 BIT_M3_P0CTRL_MHL3_P0_PIXEL_MODE_PACKED,
1056 ctx->use_packed_pixel ? ~0 : 0); 1023 ctx->use_packed_pixel ? ~0 : 0);
1057 } else { 1024 } else {
1058 if (ctx->use_packed_pixel)
1059 sii8620_write_seq_static(ctx,
1060 REG_VID_MODE, BIT_VID_MODE_M1080P,
1061 REG_MHL_TOP_CTL, BIT_MHL_TOP_CTL_MHL_PP_SEL | 1,
1062 REG_MHLTX_CTL6, 0x60
1063 );
1064 else
1065 sii8620_write_seq_static(ctx, 1025 sii8620_write_seq_static(ctx,
1066 REG_VID_MODE, 0, 1026 REG_VID_MODE, 0,
1067 REG_MHL_TOP_CTL, 1, 1027 REG_MHL_TOP_CTL, 1,
@@ -1069,15 +1029,9 @@ static void sii8620_set_format(struct sii8620 *ctx)
1069 ); 1029 );
1070 } 1030 }
1071 1031
1072 if (ctx->use_packed_pixel)
1073 out_fmt = VAL_TPI_FORMAT(YCBCR422, FULL) |
1074 BIT_TPI_OUTPUT_CSCMODE709;
1075 else
1076 out_fmt = VAL_TPI_FORMAT(RGB, FULL);
1077
1078 sii8620_write_seq(ctx, 1032 sii8620_write_seq(ctx,
1079 REG_TPI_INPUT, VAL_TPI_FORMAT(RGB, FULL), 1033 REG_TPI_INPUT, VAL_TPI_FORMAT(RGB, FULL),
1080 REG_TPI_OUTPUT, out_fmt, 1034 REG_TPI_OUTPUT, VAL_TPI_FORMAT(RGB, FULL),
1081 ); 1035 );
1082} 1036}
1083 1037
@@ -1216,7 +1170,7 @@ static void sii8620_start_video(struct sii8620 *ctx)
1216 int clk = ctx->pixel_clock * (ctx->use_packed_pixel ? 2 : 3); 1170 int clk = ctx->pixel_clock * (ctx->use_packed_pixel ? 2 : 3);
1217 int i; 1171 int i;
1218 1172
1219 for (i = 0; i < ARRAY_SIZE(clk_spec); ++i) 1173 for (i = 0; i < ARRAY_SIZE(clk_spec) - 1; ++i)
1220 if (clk < clk_spec[i].max_clk) 1174 if (clk < clk_spec[i].max_clk)
1221 break; 1175 break;
1222 1176
@@ -1534,6 +1488,16 @@ static void sii8620_set_mode(struct sii8620 *ctx, enum sii8620_mode mode)
1534 ); 1488 );
1535} 1489}
1536 1490
1491static void sii8620_hpd_unplugged(struct sii8620 *ctx)
1492{
1493 sii8620_disable_hpd(ctx);
1494 ctx->sink_type = SINK_NONE;
1495 ctx->sink_detected = false;
1496 ctx->feature_complete = false;
1497 kfree(ctx->edid);
1498 ctx->edid = NULL;
1499}
1500
1537static void sii8620_disconnect(struct sii8620 *ctx) 1501static void sii8620_disconnect(struct sii8620 *ctx)
1538{ 1502{
1539 sii8620_disable_gen2_write_burst(ctx); 1503 sii8620_disable_gen2_write_burst(ctx);
@@ -1561,7 +1525,7 @@ static void sii8620_disconnect(struct sii8620 *ctx)
1561 REG_MHL_DP_CTL6, 0x2A, 1525 REG_MHL_DP_CTL6, 0x2A,
1562 REG_MHL_DP_CTL7, 0x03 1526 REG_MHL_DP_CTL7, 0x03
1563 ); 1527 );
1564 sii8620_disable_hpd(ctx); 1528 sii8620_hpd_unplugged(ctx);
1565 sii8620_write_seq_static(ctx, 1529 sii8620_write_seq_static(ctx,
1566 REG_M3_CTRL, VAL_M3_CTRL_MHL3_VALUE, 1530 REG_M3_CTRL, VAL_M3_CTRL_MHL3_VALUE,
1567 REG_MHL_COC_CTL1, 0x07, 1531 REG_MHL_COC_CTL1, 0x07,
@@ -1609,10 +1573,8 @@ static void sii8620_disconnect(struct sii8620 *ctx)
1609 memset(ctx->xstat, 0, sizeof(ctx->xstat)); 1573 memset(ctx->xstat, 0, sizeof(ctx->xstat));
1610 memset(ctx->devcap, 0, sizeof(ctx->devcap)); 1574 memset(ctx->devcap, 0, sizeof(ctx->devcap));
1611 memset(ctx->xdevcap, 0, sizeof(ctx->xdevcap)); 1575 memset(ctx->xdevcap, 0, sizeof(ctx->xdevcap));
1576 ctx->devcap_read = false;
1612 ctx->cbus_status = 0; 1577 ctx->cbus_status = 0;
1613 ctx->sink_type = SINK_NONE;
1614 kfree(ctx->edid);
1615 ctx->edid = NULL;
1616 sii8620_mt_cleanup(ctx); 1578 sii8620_mt_cleanup(ctx);
1617} 1579}
1618 1580
@@ -1703,9 +1665,6 @@ static void sii8620_status_changed_path(struct sii8620 *ctx)
1703 sii8620_mt_write_stat(ctx, MHL_DST_REG(LINK_MODE), 1665 sii8620_mt_write_stat(ctx, MHL_DST_REG(LINK_MODE),
1704 MHL_DST_LM_CLK_MODE_NORMAL 1666 MHL_DST_LM_CLK_MODE_NORMAL
1705 | MHL_DST_LM_PATH_ENABLED); 1667 | MHL_DST_LM_PATH_ENABLED);
1706 if (!sii8620_is_mhl3(ctx))
1707 sii8620_mt_read_devcap(ctx, false);
1708 sii8620_mt_set_cont(ctx, sii8620_sink_detected);
1709 } else { 1668 } else {
1710 sii8620_mt_write_stat(ctx, MHL_DST_REG(LINK_MODE), 1669 sii8620_mt_write_stat(ctx, MHL_DST_REG(LINK_MODE),
1711 MHL_DST_LM_CLK_MODE_NORMAL); 1670 MHL_DST_LM_CLK_MODE_NORMAL);
@@ -1722,9 +1681,14 @@ static void sii8620_msc_mr_write_stat(struct sii8620 *ctx)
1722 sii8620_update_array(ctx->stat, st, MHL_DST_SIZE); 1681 sii8620_update_array(ctx->stat, st, MHL_DST_SIZE);
1723 sii8620_update_array(ctx->xstat, xst, MHL_XDS_SIZE); 1682 sii8620_update_array(ctx->xstat, xst, MHL_XDS_SIZE);
1724 1683
1725 if (ctx->stat[MHL_DST_CONNECTED_RDY] & MHL_DST_CONN_DCAP_RDY) 1684 if (ctx->stat[MHL_DST_CONNECTED_RDY] & st[MHL_DST_CONNECTED_RDY] &
1685 MHL_DST_CONN_DCAP_RDY) {
1726 sii8620_status_dcap_ready(ctx); 1686 sii8620_status_dcap_ready(ctx);
1727 1687
1688 if (!sii8620_is_mhl3(ctx))
1689 sii8620_mt_read_devcap(ctx, false);
1690 }
1691
1728 if (st[MHL_DST_LINK_MODE] & MHL_DST_LM_PATH_ENABLED) 1692 if (st[MHL_DST_LINK_MODE] & MHL_DST_LM_PATH_ENABLED)
1729 sii8620_status_changed_path(ctx); 1693 sii8620_status_changed_path(ctx);
1730} 1694}
@@ -1808,8 +1772,11 @@ static void sii8620_msc_mr_set_int(struct sii8620 *ctx)
1808 } 1772 }
1809 if (ints[MHL_INT_RCHANGE] & MHL_INT_RC_FEAT_REQ) 1773 if (ints[MHL_INT_RCHANGE] & MHL_INT_RC_FEAT_REQ)
1810 sii8620_send_features(ctx); 1774 sii8620_send_features(ctx);
1811 if (ints[MHL_INT_RCHANGE] & MHL_INT_RC_FEAT_COMPLETE) 1775 if (ints[MHL_INT_RCHANGE] & MHL_INT_RC_FEAT_COMPLETE) {
1812 sii8620_edid_read(ctx, 0); 1776 ctx->feature_complete = true;
1777 if (ctx->edid)
1778 sii8620_enable_hpd(ctx);
1779 }
1813} 1780}
1814 1781
1815static struct sii8620_mt_msg *sii8620_msc_msg_first(struct sii8620 *ctx) 1782static struct sii8620_mt_msg *sii8620_msc_msg_first(struct sii8620 *ctx)
@@ -1884,6 +1851,15 @@ static void sii8620_irq_msc(struct sii8620 *ctx)
1884 if (stat & BIT_CBUS_MSC_MR_WRITE_STAT) 1851 if (stat & BIT_CBUS_MSC_MR_WRITE_STAT)
1885 sii8620_msc_mr_write_stat(ctx); 1852 sii8620_msc_mr_write_stat(ctx);
1886 1853
1854 if (stat & BIT_CBUS_HPD_CHG) {
1855 if (ctx->cbus_status & BIT_CBUS_STATUS_CBUS_HPD) {
1856 ctx->sink_detected = true;
1857 sii8620_identify_sink(ctx);
1858 } else {
1859 sii8620_hpd_unplugged(ctx);
1860 }
1861 }
1862
1887 if (stat & BIT_CBUS_MSC_MR_SET_INT) 1863 if (stat & BIT_CBUS_MSC_MR_SET_INT)
1888 sii8620_msc_mr_set_int(ctx); 1864 sii8620_msc_mr_set_int(ctx);
1889 1865
@@ -1931,14 +1907,6 @@ static void sii8620_irq_edid(struct sii8620 *ctx)
1931 ctx->mt_state = MT_STATE_DONE; 1907 ctx->mt_state = MT_STATE_DONE;
1932} 1908}
1933 1909
1934static void sii8620_scdt_high(struct sii8620 *ctx)
1935{
1936 sii8620_write_seq_static(ctx,
1937 REG_INTR8_MASK, BIT_CEA_NEW_AVI | BIT_CEA_NEW_VSI,
1938 REG_TPI_SC, BIT_TPI_SC_TPI_OUTPUT_MODE_0_HDMI,
1939 );
1940}
1941
1942static void sii8620_irq_scdt(struct sii8620 *ctx) 1910static void sii8620_irq_scdt(struct sii8620 *ctx)
1943{ 1911{
1944 u8 stat = sii8620_readb(ctx, REG_INTR5); 1912 u8 stat = sii8620_readb(ctx, REG_INTR5);
@@ -1946,53 +1914,13 @@ static void sii8620_irq_scdt(struct sii8620 *ctx)
1946 if (stat & BIT_INTR_SCDT_CHANGE) { 1914 if (stat & BIT_INTR_SCDT_CHANGE) {
1947 u8 cstat = sii8620_readb(ctx, REG_TMDS_CSTAT_P3); 1915 u8 cstat = sii8620_readb(ctx, REG_TMDS_CSTAT_P3);
1948 1916
1949 if (cstat & BIT_TMDS_CSTAT_P3_SCDT) { 1917 if (cstat & BIT_TMDS_CSTAT_P3_SCDT)
1950 if (ctx->sink_type == SINK_HDMI) 1918 sii8620_start_video(ctx);
1951 /* enable infoframe interrupt */
1952 sii8620_scdt_high(ctx);
1953 else
1954 sii8620_start_video(ctx);
1955 }
1956 } 1919 }
1957 1920
1958 sii8620_write(ctx, REG_INTR5, stat); 1921 sii8620_write(ctx, REG_INTR5, stat);
1959} 1922}
1960 1923
1961static void sii8620_new_vsi(struct sii8620 *ctx)
1962{
1963 u8 vsif[11];
1964
1965 sii8620_write(ctx, REG_RX_HDMI_CTRL2,
1966 VAL_RX_HDMI_CTRL2_DEFVAL |
1967 BIT_RX_HDMI_CTRL2_VSI_MON_SEL_VSI);
1968 sii8620_read_buf(ctx, REG_RX_HDMI_MON_PKT_HEADER1, vsif,
1969 ARRAY_SIZE(vsif));
1970}
1971
1972static void sii8620_new_avi(struct sii8620 *ctx)
1973{
1974 sii8620_write(ctx, REG_RX_HDMI_CTRL2, VAL_RX_HDMI_CTRL2_DEFVAL);
1975 sii8620_read_buf(ctx, REG_RX_HDMI_MON_PKT_HEADER1, ctx->avif,
1976 ARRAY_SIZE(ctx->avif));
1977}
1978
1979static void sii8620_irq_infr(struct sii8620 *ctx)
1980{
1981 u8 stat = sii8620_readb(ctx, REG_INTR8)
1982 & (BIT_CEA_NEW_VSI | BIT_CEA_NEW_AVI);
1983
1984 sii8620_write(ctx, REG_INTR8, stat);
1985
1986 if (stat & BIT_CEA_NEW_VSI)
1987 sii8620_new_vsi(ctx);
1988
1989 if (stat & BIT_CEA_NEW_AVI)
1990 sii8620_new_avi(ctx);
1991
1992 if (stat & (BIT_CEA_NEW_VSI | BIT_CEA_NEW_AVI))
1993 sii8620_start_video(ctx);
1994}
1995
1996static void sii8620_got_xdevcap(struct sii8620 *ctx, int ret) 1924static void sii8620_got_xdevcap(struct sii8620 *ctx, int ret)
1997{ 1925{
1998 if (ret < 0) 1926 if (ret < 0)
@@ -2043,11 +1971,11 @@ static void sii8620_irq_ddc(struct sii8620 *ctx)
2043 1971
2044 if (stat & BIT_DDC_CMD_DONE) { 1972 if (stat & BIT_DDC_CMD_DONE) {
2045 sii8620_write(ctx, REG_INTR3_MASK, 0); 1973 sii8620_write(ctx, REG_INTR3_MASK, 0);
2046 if (sii8620_is_mhl3(ctx)) 1974 if (sii8620_is_mhl3(ctx) && !ctx->feature_complete)
2047 sii8620_mt_set_int(ctx, MHL_INT_REG(RCHANGE), 1975 sii8620_mt_set_int(ctx, MHL_INT_REG(RCHANGE),
2048 MHL_INT_RC_FEAT_REQ); 1976 MHL_INT_RC_FEAT_REQ);
2049 else 1977 else
2050 sii8620_edid_read(ctx, 0); 1978 sii8620_enable_hpd(ctx);
2051 } 1979 }
2052 sii8620_write(ctx, REG_INTR3, stat); 1980 sii8620_write(ctx, REG_INTR3, stat);
2053} 1981}
@@ -2074,7 +2002,6 @@ static irqreturn_t sii8620_irq_thread(int irq, void *data)
2074 { BIT_FAST_INTR_STAT_EDID, sii8620_irq_edid }, 2002 { BIT_FAST_INTR_STAT_EDID, sii8620_irq_edid },
2075 { BIT_FAST_INTR_STAT_DDC, sii8620_irq_ddc }, 2003 { BIT_FAST_INTR_STAT_DDC, sii8620_irq_ddc },
2076 { BIT_FAST_INTR_STAT_SCDT, sii8620_irq_scdt }, 2004 { BIT_FAST_INTR_STAT_SCDT, sii8620_irq_scdt },
2077 { BIT_FAST_INTR_STAT_INFR, sii8620_irq_infr },
2078 }; 2005 };
2079 struct sii8620 *ctx = data; 2006 struct sii8620 *ctx = data;
2080 u8 stats[LEN_FAST_INTR_STAT]; 2007 u8 stats[LEN_FAST_INTR_STAT];
@@ -2112,7 +2039,6 @@ static void sii8620_cable_in(struct sii8620 *ctx)
2112 dev_err(dev, "Error powering on, %d.\n", ret); 2039 dev_err(dev, "Error powering on, %d.\n", ret);
2113 return; 2040 return;
2114 } 2041 }
2115 sii8620_hw_reset(ctx);
2116 2042
2117 sii8620_read_buf(ctx, REG_VND_IDL, ver, ARRAY_SIZE(ver)); 2043 sii8620_read_buf(ctx, REG_VND_IDL, ver, ARRAY_SIZE(ver));
2118 ret = sii8620_clear_error(ctx); 2044 ret = sii8620_clear_error(ctx);
@@ -2268,17 +2194,43 @@ static void sii8620_detach(struct drm_bridge *bridge)
2268 rc_unregister_device(ctx->rc_dev); 2194 rc_unregister_device(ctx->rc_dev);
2269} 2195}
2270 2196
2197static int sii8620_is_packing_required(struct sii8620 *ctx,
2198 const struct drm_display_mode *mode)
2199{
2200 int max_pclk, max_pclk_pp_mode;
2201
2202 if (sii8620_is_mhl3(ctx)) {
2203 max_pclk = MHL3_MAX_PCLK;
2204 max_pclk_pp_mode = MHL3_MAX_PCLK_PP_MODE;
2205 } else {
2206 max_pclk = MHL1_MAX_PCLK;
2207 max_pclk_pp_mode = MHL1_MAX_PCLK_PP_MODE;
2208 }
2209
2210 if (mode->clock < max_pclk)
2211 return 0;
2212 else if (mode->clock < max_pclk_pp_mode)
2213 return 1;
2214 else
2215 return -1;
2216}
2217
2271static enum drm_mode_status sii8620_mode_valid(struct drm_bridge *bridge, 2218static enum drm_mode_status sii8620_mode_valid(struct drm_bridge *bridge,
2272 const struct drm_display_mode *mode) 2219 const struct drm_display_mode *mode)
2273{ 2220{
2274 struct sii8620 *ctx = bridge_to_sii8620(bridge); 2221 struct sii8620 *ctx = bridge_to_sii8620(bridge);
2222 int pack_required = sii8620_is_packing_required(ctx, mode);
2275 bool can_pack = ctx->devcap[MHL_DCAP_VID_LINK_MODE] & 2223 bool can_pack = ctx->devcap[MHL_DCAP_VID_LINK_MODE] &
2276 MHL_DCAP_VID_LINK_PPIXEL; 2224 MHL_DCAP_VID_LINK_PPIXEL;
2277 unsigned int max_pclk = sii8620_is_mhl3(ctx) ? MHL3_MAX_LCLK :
2278 MHL1_MAX_LCLK;
2279 max_pclk /= can_pack ? 2 : 3;
2280 2225
2281 return (mode->clock > max_pclk) ? MODE_CLOCK_HIGH : MODE_OK; 2226 switch (pack_required) {
2227 case 0:
2228 return MODE_OK;
2229 case 1:
2230 return (can_pack) ? MODE_OK : MODE_CLOCK_HIGH;
2231 default:
2232 return MODE_CLOCK_HIGH;
2233 }
2282} 2234}
2283 2235
2284static bool sii8620_mode_fixup(struct drm_bridge *bridge, 2236static bool sii8620_mode_fixup(struct drm_bridge *bridge,
@@ -2286,43 +2238,16 @@ static bool sii8620_mode_fixup(struct drm_bridge *bridge,
2286 struct drm_display_mode *adjusted_mode) 2238 struct drm_display_mode *adjusted_mode)
2287{ 2239{
2288 struct sii8620 *ctx = bridge_to_sii8620(bridge); 2240 struct sii8620 *ctx = bridge_to_sii8620(bridge);
2289 int max_lclk;
2290 bool ret = true;
2291 2241
2292 mutex_lock(&ctx->lock); 2242 mutex_lock(&ctx->lock);
2293 2243
2294 max_lclk = sii8620_is_mhl3(ctx) ? MHL3_MAX_LCLK : MHL1_MAX_LCLK; 2244 ctx->use_packed_pixel = sii8620_is_packing_required(ctx, adjusted_mode);
2295 if (max_lclk > 3 * adjusted_mode->clock) { 2245 ctx->video_code = drm_match_cea_mode(adjusted_mode);
2296 ctx->use_packed_pixel = 0; 2246 ctx->pixel_clock = adjusted_mode->clock;
2297 goto end; 2247
2298 }
2299 if ((ctx->devcap[MHL_DCAP_VID_LINK_MODE] & MHL_DCAP_VID_LINK_PPIXEL) &&
2300 max_lclk > 2 * adjusted_mode->clock) {
2301 ctx->use_packed_pixel = 1;
2302 goto end;
2303 }
2304 ret = false;
2305end:
2306 if (ret) {
2307 u8 vic = drm_match_cea_mode(adjusted_mode);
2308
2309 if (!vic) {
2310 union hdmi_infoframe frm;
2311 u8 mhl_vic[] = { 0, 95, 94, 93, 98 };
2312
2313 /* FIXME: We need the connector here */
2314 drm_hdmi_vendor_infoframe_from_display_mode(
2315 &frm.vendor.hdmi, NULL, adjusted_mode);
2316 vic = frm.vendor.hdmi.vic;
2317 if (vic >= ARRAY_SIZE(mhl_vic))
2318 vic = 0;
2319 vic = mhl_vic[vic];
2320 }
2321 ctx->video_code = vic;
2322 ctx->pixel_clock = adjusted_mode->clock;
2323 }
2324 mutex_unlock(&ctx->lock); 2248 mutex_unlock(&ctx->lock);
2325 return ret; 2249
2250 return true;
2326} 2251}
2327 2252
2328static const struct drm_bridge_funcs sii8620_bridge_funcs = { 2253static const struct drm_bridge_funcs sii8620_bridge_funcs = {
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index b553a6f2ff0e..7af748ed1c58 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -369,13 +369,6 @@ EXPORT_SYMBOL(drm_dev_exit);
369 */ 369 */
370void drm_dev_unplug(struct drm_device *dev) 370void drm_dev_unplug(struct drm_device *dev)
371{ 371{
372 drm_dev_unregister(dev);
373
374 mutex_lock(&drm_global_mutex);
375 if (dev->open_count == 0)
376 drm_dev_put(dev);
377 mutex_unlock(&drm_global_mutex);
378
379 /* 372 /*
380 * After synchronizing any critical read section is guaranteed to see 373 * After synchronizing any critical read section is guaranteed to see
381 * the new value of ->unplugged, and any critical section which might 374 * the new value of ->unplugged, and any critical section which might
@@ -384,6 +377,13 @@ void drm_dev_unplug(struct drm_device *dev)
384 */ 377 */
385 dev->unplugged = true; 378 dev->unplugged = true;
386 synchronize_srcu(&drm_unplug_srcu); 379 synchronize_srcu(&drm_unplug_srcu);
380
381 drm_dev_unregister(dev);
382
383 mutex_lock(&drm_global_mutex);
384 if (dev->open_count == 0)
385 drm_dev_put(dev);
386 mutex_unlock(&drm_global_mutex);
387} 387}
388EXPORT_SYMBOL(drm_dev_unplug); 388EXPORT_SYMBOL(drm_dev_unplug);
389 389
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 34c125e2d90c..7014a96546f4 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -340,14 +340,21 @@ struct drm_i915_file_private {
340 340
341 unsigned int bsd_engine; 341 unsigned int bsd_engine;
342 342
343/* Client can have a maximum of 3 contexts banned before 343/*
344 * it is denied of creating new contexts. As one context 344 * Every context ban increments per client ban score. Also
345 * ban needs 4 consecutive hangs, and more if there is 345 * hangs in short succession increments ban score. If ban threshold
346 * progress in between, this is a last resort stop gap measure 346 * is reached, client is considered banned and submitting more work
347 * to limit the badly behaving clients access to gpu. 347 * will fail. This is a stop gap measure to limit the badly behaving
348 * clients access to gpu. Note that unbannable contexts never increment
349 * the client ban score.
348 */ 350 */
349#define I915_MAX_CLIENT_CONTEXT_BANS 3 351#define I915_CLIENT_SCORE_HANG_FAST 1
350 atomic_t context_bans; 352#define I915_CLIENT_FAST_HANG_JIFFIES (60 * HZ)
353#define I915_CLIENT_SCORE_CONTEXT_BAN 3
354#define I915_CLIENT_SCORE_BANNED 9
355 /** ban_score: Accumulated score of all ctx bans and fast hangs. */
356 atomic_t ban_score;
357 unsigned long hang_timestamp;
351}; 358};
352 359
353/* Interface history: 360/* Interface history:
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 3704f4c0c2c9..d44ad7bc1e94 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2933,32 +2933,54 @@ i915_gem_object_pwrite_gtt(struct drm_i915_gem_object *obj,
2933 return 0; 2933 return 0;
2934} 2934}
2935 2935
2936static void i915_gem_client_mark_guilty(struct drm_i915_file_private *file_priv,
2937 const struct i915_gem_context *ctx)
2938{
2939 unsigned int score;
2940 unsigned long prev_hang;
2941
2942 if (i915_gem_context_is_banned(ctx))
2943 score = I915_CLIENT_SCORE_CONTEXT_BAN;
2944 else
2945 score = 0;
2946
2947 prev_hang = xchg(&file_priv->hang_timestamp, jiffies);
2948 if (time_before(jiffies, prev_hang + I915_CLIENT_FAST_HANG_JIFFIES))
2949 score += I915_CLIENT_SCORE_HANG_FAST;
2950
2951 if (score) {
2952 atomic_add(score, &file_priv->ban_score);
2953
2954 DRM_DEBUG_DRIVER("client %s: gained %u ban score, now %u\n",
2955 ctx->name, score,
2956 atomic_read(&file_priv->ban_score));
2957 }
2958}
2959
2936static void i915_gem_context_mark_guilty(struct i915_gem_context *ctx) 2960static void i915_gem_context_mark_guilty(struct i915_gem_context *ctx)
2937{ 2961{
2938 bool banned; 2962 unsigned int score;
2963 bool banned, bannable;
2939 2964
2940 atomic_inc(&ctx->guilty_count); 2965 atomic_inc(&ctx->guilty_count);
2941 2966
2942 banned = false; 2967 bannable = i915_gem_context_is_bannable(ctx);
2943 if (i915_gem_context_is_bannable(ctx)) { 2968 score = atomic_add_return(CONTEXT_SCORE_GUILTY, &ctx->ban_score);
2944 unsigned int score; 2969 banned = score >= CONTEXT_SCORE_BAN_THRESHOLD;
2945 2970
2946 score = atomic_add_return(CONTEXT_SCORE_GUILTY, 2971 DRM_DEBUG_DRIVER("context %s: guilty %d, score %u, ban %s\n",
2947 &ctx->ban_score); 2972 ctx->name, atomic_read(&ctx->guilty_count),
2948 banned = score >= CONTEXT_SCORE_BAN_THRESHOLD; 2973 score, yesno(banned && bannable));
2949 2974
2950 DRM_DEBUG_DRIVER("context %s marked guilty (score %d) banned? %s\n", 2975 /* Cool contexts don't accumulate client ban score */
2951 ctx->name, score, yesno(banned)); 2976 if (!bannable)
2952 }
2953 if (!banned)
2954 return; 2977 return;
2955 2978
2956 i915_gem_context_set_banned(ctx); 2979 if (banned)
2957 if (!IS_ERR_OR_NULL(ctx->file_priv)) { 2980 i915_gem_context_set_banned(ctx);
2958 atomic_inc(&ctx->file_priv->context_bans); 2981
2959 DRM_DEBUG_DRIVER("client %s has had %d context banned\n", 2982 if (!IS_ERR_OR_NULL(ctx->file_priv))
2960 ctx->name, atomic_read(&ctx->file_priv->context_bans)); 2983 i915_gem_client_mark_guilty(ctx->file_priv, ctx);
2961 }
2962} 2984}
2963 2985
2964static void i915_gem_context_mark_innocent(struct i915_gem_context *ctx) 2986static void i915_gem_context_mark_innocent(struct i915_gem_context *ctx)
@@ -5736,6 +5758,7 @@ int i915_gem_open(struct drm_i915_private *i915, struct drm_file *file)
5736 INIT_LIST_HEAD(&file_priv->mm.request_list); 5758 INIT_LIST_HEAD(&file_priv->mm.request_list);
5737 5759
5738 file_priv->bsd_engine = -1; 5760 file_priv->bsd_engine = -1;
5761 file_priv->hang_timestamp = jiffies;
5739 5762
5740 ret = i915_gem_context_open(i915, file); 5763 ret = i915_gem_context_open(i915, file);
5741 if (ret) 5764 if (ret)
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index 33f8a4b3c981..060335d3d9e0 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -652,7 +652,7 @@ int i915_gem_switch_to_kernel_context(struct drm_i915_private *dev_priv)
652 652
653static bool client_is_banned(struct drm_i915_file_private *file_priv) 653static bool client_is_banned(struct drm_i915_file_private *file_priv)
654{ 654{
655 return atomic_read(&file_priv->context_bans) > I915_MAX_CLIENT_CONTEXT_BANS; 655 return atomic_read(&file_priv->ban_score) >= I915_CLIENT_SCORE_BANNED;
656} 656}
657 657
658int i915_gem_context_create_ioctl(struct drm_device *dev, void *data, 658int i915_gem_context_create_ioctl(struct drm_device *dev, void *data,
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index f627a8c47c58..22df17c8ca9b 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -489,7 +489,9 @@ eb_validate_vma(struct i915_execbuffer *eb,
489} 489}
490 490
491static int 491static int
492eb_add_vma(struct i915_execbuffer *eb, unsigned int i, struct i915_vma *vma) 492eb_add_vma(struct i915_execbuffer *eb,
493 unsigned int i, unsigned batch_idx,
494 struct i915_vma *vma)
493{ 495{
494 struct drm_i915_gem_exec_object2 *entry = &eb->exec[i]; 496 struct drm_i915_gem_exec_object2 *entry = &eb->exec[i];
495 int err; 497 int err;
@@ -522,6 +524,24 @@ eb_add_vma(struct i915_execbuffer *eb, unsigned int i, struct i915_vma *vma)
522 eb->flags[i] = entry->flags; 524 eb->flags[i] = entry->flags;
523 vma->exec_flags = &eb->flags[i]; 525 vma->exec_flags = &eb->flags[i];
524 526
527 /*
528 * SNA is doing fancy tricks with compressing batch buffers, which leads
529 * to negative relocation deltas. Usually that works out ok since the
530 * relocate address is still positive, except when the batch is placed
531 * very low in the GTT. Ensure this doesn't happen.
532 *
533 * Note that actual hangs have only been observed on gen7, but for
534 * paranoia do it everywhere.
535 */
536 if (i == batch_idx) {
537 if (!(eb->flags[i] & EXEC_OBJECT_PINNED))
538 eb->flags[i] |= __EXEC_OBJECT_NEEDS_BIAS;
539 if (eb->reloc_cache.has_fence)
540 eb->flags[i] |= EXEC_OBJECT_NEEDS_FENCE;
541
542 eb->batch = vma;
543 }
544
525 err = 0; 545 err = 0;
526 if (eb_pin_vma(eb, entry, vma)) { 546 if (eb_pin_vma(eb, entry, vma)) {
527 if (entry->offset != vma->node.start) { 547 if (entry->offset != vma->node.start) {
@@ -716,7 +736,7 @@ static int eb_lookup_vmas(struct i915_execbuffer *eb)
716{ 736{
717 struct radix_tree_root *handles_vma = &eb->ctx->handles_vma; 737 struct radix_tree_root *handles_vma = &eb->ctx->handles_vma;
718 struct drm_i915_gem_object *obj; 738 struct drm_i915_gem_object *obj;
719 unsigned int i; 739 unsigned int i, batch;
720 int err; 740 int err;
721 741
722 if (unlikely(i915_gem_context_is_closed(eb->ctx))) 742 if (unlikely(i915_gem_context_is_closed(eb->ctx)))
@@ -728,6 +748,8 @@ static int eb_lookup_vmas(struct i915_execbuffer *eb)
728 INIT_LIST_HEAD(&eb->relocs); 748 INIT_LIST_HEAD(&eb->relocs);
729 INIT_LIST_HEAD(&eb->unbound); 749 INIT_LIST_HEAD(&eb->unbound);
730 750
751 batch = eb_batch_index(eb);
752
731 for (i = 0; i < eb->buffer_count; i++) { 753 for (i = 0; i < eb->buffer_count; i++) {
732 u32 handle = eb->exec[i].handle; 754 u32 handle = eb->exec[i].handle;
733 struct i915_lut_handle *lut; 755 struct i915_lut_handle *lut;
@@ -770,33 +792,16 @@ static int eb_lookup_vmas(struct i915_execbuffer *eb)
770 lut->handle = handle; 792 lut->handle = handle;
771 793
772add_vma: 794add_vma:
773 err = eb_add_vma(eb, i, vma); 795 err = eb_add_vma(eb, i, batch, vma);
774 if (unlikely(err)) 796 if (unlikely(err))
775 goto err_vma; 797 goto err_vma;
776 798
777 GEM_BUG_ON(vma != eb->vma[i]); 799 GEM_BUG_ON(vma != eb->vma[i]);
778 GEM_BUG_ON(vma->exec_flags != &eb->flags[i]); 800 GEM_BUG_ON(vma->exec_flags != &eb->flags[i]);
801 GEM_BUG_ON(drm_mm_node_allocated(&vma->node) &&
802 eb_vma_misplaced(&eb->exec[i], vma, eb->flags[i]));
779 } 803 }
780 804
781 /* take note of the batch buffer before we might reorder the lists */
782 i = eb_batch_index(eb);
783 eb->batch = eb->vma[i];
784 GEM_BUG_ON(eb->batch->exec_flags != &eb->flags[i]);
785
786 /*
787 * SNA is doing fancy tricks with compressing batch buffers, which leads
788 * to negative relocation deltas. Usually that works out ok since the
789 * relocate address is still positive, except when the batch is placed
790 * very low in the GTT. Ensure this doesn't happen.
791 *
792 * Note that actual hangs have only been observed on gen7, but for
793 * paranoia do it everywhere.
794 */
795 if (!(eb->flags[i] & EXEC_OBJECT_PINNED))
796 eb->flags[i] |= __EXEC_OBJECT_NEEDS_BIAS;
797 if (eb->reloc_cache.has_fence)
798 eb->flags[i] |= EXEC_OBJECT_NEEDS_FENCE;
799
800 eb->args->flags |= __EXEC_VALIDATED; 805 eb->args->flags |= __EXEC_VALIDATED;
801 return eb_reserve(eb); 806 return eb_reserve(eb);
802 807
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index f9bc3aaa90d0..4a02747ac658 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1893,9 +1893,17 @@ static void i9xx_pipestat_irq_ack(struct drm_i915_private *dev_priv,
1893 1893
1894 /* 1894 /*
1895 * Clear the PIPE*STAT regs before the IIR 1895 * Clear the PIPE*STAT regs before the IIR
1896 *
1897 * Toggle the enable bits to make sure we get an
1898 * edge in the ISR pipe event bit if we don't clear
1899 * all the enabled status bits. Otherwise the edge
1900 * triggered IIR on i965/g4x wouldn't notice that
1901 * an interrupt is still pending.
1896 */ 1902 */
1897 if (pipe_stats[pipe]) 1903 if (pipe_stats[pipe]) {
1898 I915_WRITE(reg, enable_mask | pipe_stats[pipe]); 1904 I915_WRITE(reg, pipe_stats[pipe]);
1905 I915_WRITE(reg, enable_mask);
1906 }
1899 } 1907 }
1900 spin_unlock(&dev_priv->irq_lock); 1908 spin_unlock(&dev_priv->irq_lock);
1901} 1909}
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index f11bb213ec07..7720569f2024 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -2425,12 +2425,17 @@ enum i915_power_well_id {
2425#define _3D_CHICKEN _MMIO(0x2084) 2425#define _3D_CHICKEN _MMIO(0x2084)
2426#define _3D_CHICKEN_HIZ_PLANE_DISABLE_MSAA_4X_SNB (1 << 10) 2426#define _3D_CHICKEN_HIZ_PLANE_DISABLE_MSAA_4X_SNB (1 << 10)
2427#define _3D_CHICKEN2 _MMIO(0x208c) 2427#define _3D_CHICKEN2 _MMIO(0x208c)
2428
2429#define FF_SLICE_CHICKEN _MMIO(0x2088)
2430#define FF_SLICE_CHICKEN_CL_PROVOKING_VERTEX_FIX (1 << 1)
2431
2428/* Disables pipelining of read flushes past the SF-WIZ interface. 2432/* Disables pipelining of read flushes past the SF-WIZ interface.
2429 * Required on all Ironlake steppings according to the B-Spec, but the 2433 * Required on all Ironlake steppings according to the B-Spec, but the
2430 * particular danger of not doing so is not specified. 2434 * particular danger of not doing so is not specified.
2431 */ 2435 */
2432# define _3D_CHICKEN2_WM_READ_PIPELINED (1 << 14) 2436# define _3D_CHICKEN2_WM_READ_PIPELINED (1 << 14)
2433#define _3D_CHICKEN3 _MMIO(0x2090) 2437#define _3D_CHICKEN3 _MMIO(0x2090)
2438#define _3D_CHICKEN_SF_PROVOKING_VERTEX_FIX (1 << 12)
2434#define _3D_CHICKEN_SF_DISABLE_OBJEND_CULL (1 << 10) 2439#define _3D_CHICKEN_SF_DISABLE_OBJEND_CULL (1 << 10)
2435#define _3D_CHICKEN3_AA_LINE_QUALITY_FIX_ENABLE (1 << 5) 2440#define _3D_CHICKEN3_AA_LINE_QUALITY_FIX_ENABLE (1 << 5)
2436#define _3D_CHICKEN3_SF_DISABLE_FASTCLIP_CULL (1 << 5) 2441#define _3D_CHICKEN3_SF_DISABLE_FASTCLIP_CULL (1 << 5)
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index de0e22322c76..072b326d5ee0 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -304,6 +304,9 @@ intel_crt_mode_valid(struct drm_connector *connector,
304 int max_dotclk = dev_priv->max_dotclk_freq; 304 int max_dotclk = dev_priv->max_dotclk_freq;
305 int max_clock; 305 int max_clock;
306 306
307 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
308 return MODE_NO_DBLESCAN;
309
307 if (mode->clock < 25000) 310 if (mode->clock < 25000)
308 return MODE_CLOCK_LOW; 311 return MODE_CLOCK_LOW;
309 312
@@ -337,6 +340,12 @@ static bool intel_crt_compute_config(struct intel_encoder *encoder,
337 struct intel_crtc_state *pipe_config, 340 struct intel_crtc_state *pipe_config,
338 struct drm_connector_state *conn_state) 341 struct drm_connector_state *conn_state)
339{ 342{
343 struct drm_display_mode *adjusted_mode =
344 &pipe_config->base.adjusted_mode;
345
346 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
347 return false;
348
340 return true; 349 return true;
341} 350}
342 351
@@ -344,6 +353,12 @@ static bool pch_crt_compute_config(struct intel_encoder *encoder,
344 struct intel_crtc_state *pipe_config, 353 struct intel_crtc_state *pipe_config,
345 struct drm_connector_state *conn_state) 354 struct drm_connector_state *conn_state)
346{ 355{
356 struct drm_display_mode *adjusted_mode =
357 &pipe_config->base.adjusted_mode;
358
359 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
360 return false;
361
347 pipe_config->has_pch_encoder = true; 362 pipe_config->has_pch_encoder = true;
348 363
349 return true; 364 return true;
@@ -354,6 +369,11 @@ static bool hsw_crt_compute_config(struct intel_encoder *encoder,
354 struct drm_connector_state *conn_state) 369 struct drm_connector_state *conn_state)
355{ 370{
356 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 371 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
372 struct drm_display_mode *adjusted_mode =
373 &pipe_config->base.adjusted_mode;
374
375 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
376 return false;
357 377
358 pipe_config->has_pch_encoder = true; 378 pipe_config->has_pch_encoder = true;
359 379
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index dee3a8e659f1..2cc6faa1daa8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -14469,12 +14469,22 @@ static enum drm_mode_status
14469intel_mode_valid(struct drm_device *dev, 14469intel_mode_valid(struct drm_device *dev,
14470 const struct drm_display_mode *mode) 14470 const struct drm_display_mode *mode)
14471{ 14471{
14472 /*
14473 * Can't reject DBLSCAN here because Xorg ddxen can add piles
14474 * of DBLSCAN modes to the output's mode list when they detect
14475 * the scaling mode property on the connector. And they don't
14476 * ask the kernel to validate those modes in any way until
14477 * modeset time at which point the client gets a protocol error.
14478 * So in order to not upset those clients we silently ignore the
14479 * DBLSCAN flag on such connectors. For other connectors we will
14480 * reject modes with the DBLSCAN flag in encoder->compute_config().
14481 * And we always reject DBLSCAN modes in connector->mode_valid()
14482 * as we never want such modes on the connector's mode list.
14483 */
14484
14472 if (mode->vscan > 1) 14485 if (mode->vscan > 1)
14473 return MODE_NO_VSCAN; 14486 return MODE_NO_VSCAN;
14474 14487
14475 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
14476 return MODE_NO_DBLESCAN;
14477
14478 if (mode->flags & DRM_MODE_FLAG_HSKEW) 14488 if (mode->flags & DRM_MODE_FLAG_HSKEW)
14479 return MODE_H_ILLEGAL; 14489 return MODE_H_ILLEGAL;
14480 14490
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 8320f0e8e3be..16faea30114a 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -420,6 +420,9 @@ intel_dp_mode_valid(struct drm_connector *connector,
420 int max_rate, mode_rate, max_lanes, max_link_clock; 420 int max_rate, mode_rate, max_lanes, max_link_clock;
421 int max_dotclk; 421 int max_dotclk;
422 422
423 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
424 return MODE_NO_DBLESCAN;
425
423 max_dotclk = intel_dp_downstream_max_dotclock(intel_dp); 426 max_dotclk = intel_dp_downstream_max_dotclock(intel_dp);
424 427
425 if (intel_dp_is_edp(intel_dp) && fixed_mode) { 428 if (intel_dp_is_edp(intel_dp) && fixed_mode) {
@@ -1862,7 +1865,10 @@ intel_dp_compute_config(struct intel_encoder *encoder,
1862 conn_state->scaling_mode); 1865 conn_state->scaling_mode);
1863 } 1866 }
1864 1867
1865 if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) && 1868 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
1869 return false;
1870
1871 if (HAS_GMCH_DISPLAY(dev_priv) &&
1866 adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) 1872 adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
1867 return false; 1873 return false;
1868 1874
@@ -2784,16 +2790,6 @@ static void g4x_disable_dp(struct intel_encoder *encoder,
2784 const struct drm_connector_state *old_conn_state) 2790 const struct drm_connector_state *old_conn_state)
2785{ 2791{
2786 intel_disable_dp(encoder, old_crtc_state, old_conn_state); 2792 intel_disable_dp(encoder, old_crtc_state, old_conn_state);
2787
2788 /* disable the port before the pipe on g4x */
2789 intel_dp_link_down(encoder, old_crtc_state);
2790}
2791
2792static void ilk_disable_dp(struct intel_encoder *encoder,
2793 const struct intel_crtc_state *old_crtc_state,
2794 const struct drm_connector_state *old_conn_state)
2795{
2796 intel_disable_dp(encoder, old_crtc_state, old_conn_state);
2797} 2793}
2798 2794
2799static void vlv_disable_dp(struct intel_encoder *encoder, 2795static void vlv_disable_dp(struct intel_encoder *encoder,
@@ -2807,13 +2803,19 @@ static void vlv_disable_dp(struct intel_encoder *encoder,
2807 intel_disable_dp(encoder, old_crtc_state, old_conn_state); 2803 intel_disable_dp(encoder, old_crtc_state, old_conn_state);
2808} 2804}
2809 2805
2810static void ilk_post_disable_dp(struct intel_encoder *encoder, 2806static void g4x_post_disable_dp(struct intel_encoder *encoder,
2811 const struct intel_crtc_state *old_crtc_state, 2807 const struct intel_crtc_state *old_crtc_state,
2812 const struct drm_connector_state *old_conn_state) 2808 const struct drm_connector_state *old_conn_state)
2813{ 2809{
2814 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 2810 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2815 enum port port = encoder->port; 2811 enum port port = encoder->port;
2816 2812
2813 /*
2814 * Bspec does not list a specific disable sequence for g4x DP.
2815 * Follow the ilk+ sequence (disable pipe before the port) for
2816 * g4x DP as it does not suffer from underruns like the normal
2817 * g4x modeset sequence (disable pipe after the port).
2818 */
2817 intel_dp_link_down(encoder, old_crtc_state); 2819 intel_dp_link_down(encoder, old_crtc_state);
2818 2820
2819 /* Only ilk+ has port A */ 2821 /* Only ilk+ has port A */
@@ -6337,7 +6339,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
6337 drm_connector_init(dev, connector, &intel_dp_connector_funcs, type); 6339 drm_connector_init(dev, connector, &intel_dp_connector_funcs, type);
6338 drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs); 6340 drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs);
6339 6341
6340 if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv)) 6342 if (!HAS_GMCH_DISPLAY(dev_priv))
6341 connector->interlace_allowed = true; 6343 connector->interlace_allowed = true;
6342 connector->doublescan_allowed = 0; 6344 connector->doublescan_allowed = 0;
6343 6345
@@ -6436,15 +6438,11 @@ bool intel_dp_init(struct drm_i915_private *dev_priv,
6436 intel_encoder->enable = vlv_enable_dp; 6438 intel_encoder->enable = vlv_enable_dp;
6437 intel_encoder->disable = vlv_disable_dp; 6439 intel_encoder->disable = vlv_disable_dp;
6438 intel_encoder->post_disable = vlv_post_disable_dp; 6440 intel_encoder->post_disable = vlv_post_disable_dp;
6439 } else if (INTEL_GEN(dev_priv) >= 5) {
6440 intel_encoder->pre_enable = g4x_pre_enable_dp;
6441 intel_encoder->enable = g4x_enable_dp;
6442 intel_encoder->disable = ilk_disable_dp;
6443 intel_encoder->post_disable = ilk_post_disable_dp;
6444 } else { 6441 } else {
6445 intel_encoder->pre_enable = g4x_pre_enable_dp; 6442 intel_encoder->pre_enable = g4x_pre_enable_dp;
6446 intel_encoder->enable = g4x_enable_dp; 6443 intel_encoder->enable = g4x_enable_dp;
6447 intel_encoder->disable = g4x_disable_dp; 6444 intel_encoder->disable = g4x_disable_dp;
6445 intel_encoder->post_disable = g4x_post_disable_dp;
6448 } 6446 }
6449 6447
6450 intel_dig_port->dp.output_reg = output_reg; 6448 intel_dig_port->dp.output_reg = output_reg;
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 9e6956c08688..5890500a3a8b 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -48,6 +48,9 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
48 bool reduce_m_n = drm_dp_has_quirk(&intel_dp->desc, 48 bool reduce_m_n = drm_dp_has_quirk(&intel_dp->desc,
49 DP_DPCD_QUIRK_LIMITED_M_N); 49 DP_DPCD_QUIRK_LIMITED_M_N);
50 50
51 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
52 return false;
53
51 pipe_config->has_pch_encoder = false; 54 pipe_config->has_pch_encoder = false;
52 bpp = 24; 55 bpp = 24;
53 if (intel_dp->compliance.test_data.bpc) { 56 if (intel_dp->compliance.test_data.bpc) {
@@ -366,6 +369,9 @@ intel_dp_mst_mode_valid(struct drm_connector *connector,
366 if (!intel_dp) 369 if (!intel_dp)
367 return MODE_ERROR; 370 return MODE_ERROR;
368 371
372 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
373 return MODE_NO_DBLESCAN;
374
369 max_link_clock = intel_dp_max_link_rate(intel_dp); 375 max_link_clock = intel_dp_max_link_rate(intel_dp);
370 max_lanes = intel_dp_max_lane_count(intel_dp); 376 max_lanes = intel_dp_max_lane_count(intel_dp);
371 377
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index cf39ca90d887..f349b3920199 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -326,6 +326,9 @@ static bool intel_dsi_compute_config(struct intel_encoder *encoder,
326 conn_state->scaling_mode); 326 conn_state->scaling_mode);
327 } 327 }
328 328
329 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
330 return false;
331
329 /* DSI uses short packets for sync events, so clear mode flags for DSI */ 332 /* DSI uses short packets for sync events, so clear mode flags for DSI */
330 adjusted_mode->flags = 0; 333 adjusted_mode->flags = 0;
331 334
@@ -1266,6 +1269,9 @@ intel_dsi_mode_valid(struct drm_connector *connector,
1266 1269
1267 DRM_DEBUG_KMS("\n"); 1270 DRM_DEBUG_KMS("\n");
1268 1271
1272 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
1273 return MODE_NO_DBLESCAN;
1274
1269 if (fixed_mode) { 1275 if (fixed_mode) {
1270 if (mode->hdisplay > fixed_mode->hdisplay) 1276 if (mode->hdisplay > fixed_mode->hdisplay)
1271 return MODE_PANEL; 1277 return MODE_PANEL;
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index a70d767313aa..61d908e0df0e 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -219,6 +219,9 @@ intel_dvo_mode_valid(struct drm_connector *connector,
219 int max_dotclk = to_i915(connector->dev)->max_dotclk_freq; 219 int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
220 int target_clock = mode->clock; 220 int target_clock = mode->clock;
221 221
222 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
223 return MODE_NO_DBLESCAN;
224
222 /* XXX: Validate clock range */ 225 /* XXX: Validate clock range */
223 226
224 if (fixed_mode) { 227 if (fixed_mode) {
@@ -254,6 +257,9 @@ static bool intel_dvo_compute_config(struct intel_encoder *encoder,
254 if (fixed_mode) 257 if (fixed_mode)
255 intel_fixed_panel_mode(fixed_mode, adjusted_mode); 258 intel_fixed_panel_mode(fixed_mode, adjusted_mode);
256 259
260 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
261 return false;
262
257 return true; 263 return true;
258} 264}
259 265
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index ee929f31f7db..d8cb53ef4351 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1557,6 +1557,9 @@ intel_hdmi_mode_valid(struct drm_connector *connector,
1557 bool force_dvi = 1557 bool force_dvi =
1558 READ_ONCE(to_intel_digital_connector_state(connector->state)->force_audio) == HDMI_AUDIO_OFF_DVI; 1558 READ_ONCE(to_intel_digital_connector_state(connector->state)->force_audio) == HDMI_AUDIO_OFF_DVI;
1559 1559
1560 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
1561 return MODE_NO_DBLESCAN;
1562
1560 clock = mode->clock; 1563 clock = mode->clock;
1561 1564
1562 if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING) 1565 if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING)
@@ -1677,6 +1680,9 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
1677 int desired_bpp; 1680 int desired_bpp;
1678 bool force_dvi = intel_conn_state->force_audio == HDMI_AUDIO_OFF_DVI; 1681 bool force_dvi = intel_conn_state->force_audio == HDMI_AUDIO_OFF_DVI;
1679 1682
1683 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
1684 return false;
1685
1680 pipe_config->has_hdmi_sink = !force_dvi && intel_hdmi->has_hdmi_sink; 1686 pipe_config->has_hdmi_sink = !force_dvi && intel_hdmi->has_hdmi_sink;
1681 1687
1682 if (pipe_config->has_hdmi_sink) 1688 if (pipe_config->has_hdmi_sink)
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 15434cad5430..7c4c8fb1dae4 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -1545,11 +1545,21 @@ static u32 *gen9_init_indirectctx_bb(struct intel_engine_cs *engine, u32 *batch)
1545 /* WaFlushCoherentL3CacheLinesAtContextSwitch:skl,bxt,glk */ 1545 /* WaFlushCoherentL3CacheLinesAtContextSwitch:skl,bxt,glk */
1546 batch = gen8_emit_flush_coherentl3_wa(engine, batch); 1546 batch = gen8_emit_flush_coherentl3_wa(engine, batch);
1547 1547
1548 *batch++ = MI_LOAD_REGISTER_IMM(3);
1549
1548 /* WaDisableGatherAtSetShaderCommonSlice:skl,bxt,kbl,glk */ 1550 /* WaDisableGatherAtSetShaderCommonSlice:skl,bxt,kbl,glk */
1549 *batch++ = MI_LOAD_REGISTER_IMM(1);
1550 *batch++ = i915_mmio_reg_offset(COMMON_SLICE_CHICKEN2); 1551 *batch++ = i915_mmio_reg_offset(COMMON_SLICE_CHICKEN2);
1551 *batch++ = _MASKED_BIT_DISABLE( 1552 *batch++ = _MASKED_BIT_DISABLE(
1552 GEN9_DISABLE_GATHER_AT_SET_SHADER_COMMON_SLICE); 1553 GEN9_DISABLE_GATHER_AT_SET_SHADER_COMMON_SLICE);
1554
1555 /* BSpec: 11391 */
1556 *batch++ = i915_mmio_reg_offset(FF_SLICE_CHICKEN);
1557 *batch++ = _MASKED_BIT_ENABLE(FF_SLICE_CHICKEN_CL_PROVOKING_VERTEX_FIX);
1558
1559 /* BSpec: 11299 */
1560 *batch++ = i915_mmio_reg_offset(_3D_CHICKEN3);
1561 *batch++ = _MASKED_BIT_ENABLE(_3D_CHICKEN_SF_PROVOKING_VERTEX_FIX);
1562
1553 *batch++ = MI_NOOP; 1563 *batch++ = MI_NOOP;
1554 1564
1555 /* WaClearSlmSpaceAtContextSwitch:kbl */ 1565 /* WaClearSlmSpaceAtContextSwitch:kbl */
@@ -2641,10 +2651,8 @@ static int execlists_context_deferred_alloc(struct i915_gem_context *ctx,
2641 context_size += LRC_HEADER_PAGES * PAGE_SIZE; 2651 context_size += LRC_HEADER_PAGES * PAGE_SIZE;
2642 2652
2643 ctx_obj = i915_gem_object_create(ctx->i915, context_size); 2653 ctx_obj = i915_gem_object_create(ctx->i915, context_size);
2644 if (IS_ERR(ctx_obj)) { 2654 if (IS_ERR(ctx_obj))
2645 ret = PTR_ERR(ctx_obj); 2655 return PTR_ERR(ctx_obj);
2646 goto error_deref_obj;
2647 }
2648 2656
2649 vma = i915_vma_instance(ctx_obj, &ctx->i915->ggtt.base, NULL); 2657 vma = i915_vma_instance(ctx_obj, &ctx->i915->ggtt.base, NULL);
2650 if (IS_ERR(vma)) { 2658 if (IS_ERR(vma)) {
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index d278f24ba6ae..48f618dc9abb 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -380,6 +380,8 @@ intel_lvds_mode_valid(struct drm_connector *connector,
380 struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode; 380 struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode;
381 int max_pixclk = to_i915(connector->dev)->max_dotclk_freq; 381 int max_pixclk = to_i915(connector->dev)->max_dotclk_freq;
382 382
383 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
384 return MODE_NO_DBLESCAN;
383 if (mode->hdisplay > fixed_mode->hdisplay) 385 if (mode->hdisplay > fixed_mode->hdisplay)
384 return MODE_PANEL; 386 return MODE_PANEL;
385 if (mode->vdisplay > fixed_mode->vdisplay) 387 if (mode->vdisplay > fixed_mode->vdisplay)
@@ -429,6 +431,9 @@ static bool intel_lvds_compute_config(struct intel_encoder *intel_encoder,
429 intel_fixed_panel_mode(intel_connector->panel.fixed_mode, 431 intel_fixed_panel_mode(intel_connector->panel.fixed_mode,
430 adjusted_mode); 432 adjusted_mode);
431 433
434 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
435 return false;
436
432 if (HAS_PCH_SPLIT(dev_priv)) { 437 if (HAS_PCH_SPLIT(dev_priv)) {
433 pipe_config->has_pch_encoder = true; 438 pipe_config->has_pch_encoder = true;
434 439
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 25005023c243..26975df4e593 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -1160,6 +1160,9 @@ static bool intel_sdvo_compute_config(struct intel_encoder *encoder,
1160 adjusted_mode); 1160 adjusted_mode);
1161 } 1161 }
1162 1162
1163 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
1164 return false;
1165
1163 /* 1166 /*
1164 * Make the CRTC code factor in the SDVO pixel multiplier. The 1167 * Make the CRTC code factor in the SDVO pixel multiplier. The
1165 * SDVO device will factor out the multiplier during mode_set. 1168 * SDVO device will factor out the multiplier during mode_set.
@@ -1621,6 +1624,9 @@ intel_sdvo_mode_valid(struct drm_connector *connector,
1621 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); 1624 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
1622 int max_dotclk = to_i915(connector->dev)->max_dotclk_freq; 1625 int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
1623 1626
1627 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
1628 return MODE_NO_DBLESCAN;
1629
1624 if (intel_sdvo->pixel_clock_min > mode->clock) 1630 if (intel_sdvo->pixel_clock_min > mode->clock)
1625 return MODE_CLOCK_LOW; 1631 return MODE_CLOCK_LOW;
1626 1632
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index 885fc3809f7f..b55b5c157e38 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -850,6 +850,9 @@ intel_tv_mode_valid(struct drm_connector *connector,
850 const struct tv_mode *tv_mode = intel_tv_mode_find(connector->state); 850 const struct tv_mode *tv_mode = intel_tv_mode_find(connector->state);
851 int max_dotclk = to_i915(connector->dev)->max_dotclk_freq; 851 int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
852 852
853 if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
854 return MODE_NO_DBLESCAN;
855
853 if (mode->clock > max_dotclk) 856 if (mode->clock > max_dotclk)
854 return MODE_CLOCK_HIGH; 857 return MODE_CLOCK_HIGH;
855 858
@@ -877,16 +880,21 @@ intel_tv_compute_config(struct intel_encoder *encoder,
877 struct drm_connector_state *conn_state) 880 struct drm_connector_state *conn_state)
878{ 881{
879 const struct tv_mode *tv_mode = intel_tv_mode_find(conn_state); 882 const struct tv_mode *tv_mode = intel_tv_mode_find(conn_state);
883 struct drm_display_mode *adjusted_mode =
884 &pipe_config->base.adjusted_mode;
880 885
881 if (!tv_mode) 886 if (!tv_mode)
882 return false; 887 return false;
883 888
884 pipe_config->base.adjusted_mode.crtc_clock = tv_mode->clock; 889 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
890 return false;
891
892 adjusted_mode->crtc_clock = tv_mode->clock;
885 DRM_DEBUG_KMS("forcing bpc to 8 for TV\n"); 893 DRM_DEBUG_KMS("forcing bpc to 8 for TV\n");
886 pipe_config->pipe_bpp = 8*3; 894 pipe_config->pipe_bpp = 8*3;
887 895
888 /* TV has it's own notion of sync and other mode flags, so clear them. */ 896 /* TV has it's own notion of sync and other mode flags, so clear them. */
889 pipe_config->base.adjusted_mode.flags = 0; 897 adjusted_mode->flags = 0;
890 898
891 /* 899 /*
892 * FIXME: We don't check whether the input mode is actually what we want 900 * FIXME: We don't check whether the input mode is actually what we want
diff --git a/drivers/gpu/drm/nouveau/dispnv50/curs507a.c b/drivers/gpu/drm/nouveau/dispnv50/curs507a.c
index 291c08117ab6..397143b639c6 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/curs507a.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/curs507a.c
@@ -132,7 +132,7 @@ curs507a_new_(const struct nv50_wimm_func *func, struct nouveau_drm *drm,
132 132
133 nvif_object_map(&wndw->wimm.base.user, NULL, 0); 133 nvif_object_map(&wndw->wimm.base.user, NULL, 0);
134 wndw->immd = func; 134 wndw->immd = func;
135 wndw->ctxdma.parent = &disp->core->chan.base.user; 135 wndw->ctxdma.parent = NULL;
136 return 0; 136 return 0;
137} 137}
138 138
diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndw.c b/drivers/gpu/drm/nouveau/dispnv50/wndw.c
index 224963b533a6..c5a9bc1af5af 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/wndw.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/wndw.c
@@ -444,14 +444,17 @@ nv50_wndw_prepare_fb(struct drm_plane *plane, struct drm_plane_state *state)
444 if (ret) 444 if (ret)
445 return ret; 445 return ret;
446 446
447 ctxdma = nv50_wndw_ctxdma_new(wndw, fb); 447 if (wndw->ctxdma.parent) {
448 if (IS_ERR(ctxdma)) { 448 ctxdma = nv50_wndw_ctxdma_new(wndw, fb);
449 nouveau_bo_unpin(fb->nvbo); 449 if (IS_ERR(ctxdma)) {
450 return PTR_ERR(ctxdma); 450 nouveau_bo_unpin(fb->nvbo);
451 return PTR_ERR(ctxdma);
452 }
453
454 asyw->image.handle[0] = ctxdma->object.handle;
451 } 455 }
452 456
453 asyw->state.fence = reservation_object_get_excl_rcu(fb->nvbo->bo.resv); 457 asyw->state.fence = reservation_object_get_excl_rcu(fb->nvbo->bo.resv);
454 asyw->image.handle[0] = ctxdma->object.handle;
455 asyw->image.offset[0] = fb->nvbo->bo.offset; 458 asyw->image.offset[0] = fb->nvbo->bo.offset;
456 459
457 if (wndw->func->prepare) { 460 if (wndw->func->prepare) {
diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index b8cda9449241..768207fbbae3 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -623,7 +623,7 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
623 struct qxl_cursor_cmd *cmd; 623 struct qxl_cursor_cmd *cmd;
624 struct qxl_cursor *cursor; 624 struct qxl_cursor *cursor;
625 struct drm_gem_object *obj; 625 struct drm_gem_object *obj;
626 struct qxl_bo *cursor_bo = NULL, *user_bo = NULL; 626 struct qxl_bo *cursor_bo = NULL, *user_bo = NULL, *old_cursor_bo = NULL;
627 int ret; 627 int ret;
628 void *user_ptr; 628 void *user_ptr;
629 int size = 64*64*4; 629 int size = 64*64*4;
@@ -677,7 +677,7 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
677 cursor_bo, 0); 677 cursor_bo, 0);
678 cmd->type = QXL_CURSOR_SET; 678 cmd->type = QXL_CURSOR_SET;
679 679
680 qxl_bo_unref(&qcrtc->cursor_bo); 680 old_cursor_bo = qcrtc->cursor_bo;
681 qcrtc->cursor_bo = cursor_bo; 681 qcrtc->cursor_bo = cursor_bo;
682 cursor_bo = NULL; 682 cursor_bo = NULL;
683 } else { 683 } else {
@@ -697,6 +697,9 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
697 qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); 697 qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
698 qxl_release_fence_buffer_objects(release); 698 qxl_release_fence_buffer_objects(release);
699 699
700 if (old_cursor_bo)
701 qxl_bo_unref(&old_cursor_bo);
702
700 qxl_bo_unref(&cursor_bo); 703 qxl_bo_unref(&cursor_bo);
701 704
702 return; 705 return;
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index 08747fc3ee71..8232b39e16ca 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -17,7 +17,6 @@
17#include <drm/drm_encoder.h> 17#include <drm/drm_encoder.h>
18#include <drm/drm_modes.h> 18#include <drm/drm_modes.h>
19#include <drm/drm_of.h> 19#include <drm/drm_of.h>
20#include <drm/drm_panel.h>
21 20
22#include <uapi/drm/drm_mode.h> 21#include <uapi/drm/drm_mode.h>
23 22
@@ -418,9 +417,6 @@ static void sun4i_tcon0_mode_set_lvds(struct sun4i_tcon *tcon,
418static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon, 417static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
419 const struct drm_display_mode *mode) 418 const struct drm_display_mode *mode)
420{ 419{
421 struct drm_panel *panel = tcon->panel;
422 struct drm_connector *connector = panel->connector;
423 struct drm_display_info display_info = connector->display_info;
424 unsigned int bp, hsync, vsync; 420 unsigned int bp, hsync, vsync;
425 u8 clk_delay; 421 u8 clk_delay;
426 u32 val = 0; 422 u32 val = 0;
@@ -478,27 +474,6 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
478 if (mode->flags & DRM_MODE_FLAG_PVSYNC) 474 if (mode->flags & DRM_MODE_FLAG_PVSYNC)
479 val |= SUN4I_TCON0_IO_POL_VSYNC_POSITIVE; 475 val |= SUN4I_TCON0_IO_POL_VSYNC_POSITIVE;
480 476
481 /*
482 * On A20 and similar SoCs, the only way to achieve Positive Edge
483 * (Rising Edge), is setting dclk clock phase to 2/3(240°).
484 * By default TCON works in Negative Edge(Falling Edge),
485 * this is why phase is set to 0 in that case.
486 * Unfortunately there's no way to logically invert dclk through
487 * IO_POL register.
488 * The only acceptable way to work, triple checked with scope,
489 * is using clock phase set to 0° for Negative Edge and set to 240°
490 * for Positive Edge.
491 * On A33 and similar SoCs there would be a 90° phase option,
492 * but it divides also dclk by 2.
493 * Following code is a way to avoid quirks all around TCON
494 * and DOTCLOCK drivers.
495 */
496 if (display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_POSEDGE)
497 clk_set_phase(tcon->dclk, 240);
498
499 if (display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_NEGEDGE)
500 clk_set_phase(tcon->dclk, 0);
501
502 regmap_update_bits(tcon->regs, SUN4I_TCON0_IO_POL_REG, 477 regmap_update_bits(tcon->regs, SUN4I_TCON0_IO_POL_REG,
503 SUN4I_TCON0_IO_POL_HSYNC_POSITIVE | SUN4I_TCON0_IO_POL_VSYNC_POSITIVE, 478 SUN4I_TCON0_IO_POL_HSYNC_POSITIVE | SUN4I_TCON0_IO_POL_VSYNC_POSITIVE,
504 val); 479 val);
diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
index bf3bb7e1adab..9d3ef879dc51 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
@@ -1074,6 +1074,13 @@ static struct dmi_system_id i8k_blacklist_fan_support_dmi_table[] __initdata = {
1074 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Vostro 3360"), 1074 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Vostro 3360"),
1075 }, 1075 },
1076 }, 1076 },
1077 {
1078 .ident = "Dell XPS13 9333",
1079 .matches = {
1080 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
1081 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "XPS13 9333"),
1082 },
1083 },
1077 { } 1084 { }
1078}; 1085};
1079 1086
diff --git a/drivers/hwmon/nct6775.c b/drivers/hwmon/nct6775.c
index 155d4d1d1585..f9d1349c3286 100644
--- a/drivers/hwmon/nct6775.c
+++ b/drivers/hwmon/nct6775.c
@@ -4175,7 +4175,7 @@ static int nct6775_probe(struct platform_device *pdev)
4175 * The temperature is already monitored if the respective bit in <mask> 4175 * The temperature is already monitored if the respective bit in <mask>
4176 * is set. 4176 * is set.
4177 */ 4177 */
4178 for (i = 0; i < 32; i++) { 4178 for (i = 0; i < 31; i++) {
4179 if (!(data->temp_mask & BIT(i + 1))) 4179 if (!(data->temp_mask & BIT(i + 1)))
4180 continue; 4180 continue;
4181 if (!reg_temp_alternate[i]) 4181 if (!reg_temp_alternate[i])
diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c
index 0f52d44b3f69..f5fe0100f9ff 100644
--- a/drivers/irqchip/irq-gic-v2m.c
+++ b/drivers/irqchip/irq-gic-v2m.c
@@ -199,7 +199,7 @@ static int gicv2m_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
199 199
200fail: 200fail:
201 irq_domain_free_irqs_parent(domain, virq, nr_irqs); 201 irq_domain_free_irqs_parent(domain, virq, nr_irqs);
202 gicv2m_unalloc_msi(v2m, hwirq, get_count_order(nr_irqs)); 202 gicv2m_unalloc_msi(v2m, hwirq, nr_irqs);
203 return err; 203 return err;
204} 204}
205 205
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 5377d7e2afba..d7842d312d3e 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -182,6 +182,22 @@ static struct its_collection *dev_event_to_col(struct its_device *its_dev,
182 return its->collections + its_dev->event_map.col_map[event]; 182 return its->collections + its_dev->event_map.col_map[event];
183} 183}
184 184
185static struct its_collection *valid_col(struct its_collection *col)
186{
187 if (WARN_ON_ONCE(col->target_address & GENMASK_ULL(0, 15)))
188 return NULL;
189
190 return col;
191}
192
193static struct its_vpe *valid_vpe(struct its_node *its, struct its_vpe *vpe)
194{
195 if (valid_col(its->collections + vpe->col_idx))
196 return vpe;
197
198 return NULL;
199}
200
185/* 201/*
186 * ITS command descriptors - parameters to be encoded in a command 202 * ITS command descriptors - parameters to be encoded in a command
187 * block. 203 * block.
@@ -439,7 +455,7 @@ static struct its_collection *its_build_mapti_cmd(struct its_node *its,
439 455
440 its_fixup_cmd(cmd); 456 its_fixup_cmd(cmd);
441 457
442 return col; 458 return valid_col(col);
443} 459}
444 460
445static struct its_collection *its_build_movi_cmd(struct its_node *its, 461static struct its_collection *its_build_movi_cmd(struct its_node *its,
@@ -458,7 +474,7 @@ static struct its_collection *its_build_movi_cmd(struct its_node *its,
458 474
459 its_fixup_cmd(cmd); 475 its_fixup_cmd(cmd);
460 476
461 return col; 477 return valid_col(col);
462} 478}
463 479
464static struct its_collection *its_build_discard_cmd(struct its_node *its, 480static struct its_collection *its_build_discard_cmd(struct its_node *its,
@@ -476,7 +492,7 @@ static struct its_collection *its_build_discard_cmd(struct its_node *its,
476 492
477 its_fixup_cmd(cmd); 493 its_fixup_cmd(cmd);
478 494
479 return col; 495 return valid_col(col);
480} 496}
481 497
482static struct its_collection *its_build_inv_cmd(struct its_node *its, 498static struct its_collection *its_build_inv_cmd(struct its_node *its,
@@ -494,7 +510,7 @@ static struct its_collection *its_build_inv_cmd(struct its_node *its,
494 510
495 its_fixup_cmd(cmd); 511 its_fixup_cmd(cmd);
496 512
497 return col; 513 return valid_col(col);
498} 514}
499 515
500static struct its_collection *its_build_int_cmd(struct its_node *its, 516static struct its_collection *its_build_int_cmd(struct its_node *its,
@@ -512,7 +528,7 @@ static struct its_collection *its_build_int_cmd(struct its_node *its,
512 528
513 its_fixup_cmd(cmd); 529 its_fixup_cmd(cmd);
514 530
515 return col; 531 return valid_col(col);
516} 532}
517 533
518static struct its_collection *its_build_clear_cmd(struct its_node *its, 534static struct its_collection *its_build_clear_cmd(struct its_node *its,
@@ -530,7 +546,7 @@ static struct its_collection *its_build_clear_cmd(struct its_node *its,
530 546
531 its_fixup_cmd(cmd); 547 its_fixup_cmd(cmd);
532 548
533 return col; 549 return valid_col(col);
534} 550}
535 551
536static struct its_collection *its_build_invall_cmd(struct its_node *its, 552static struct its_collection *its_build_invall_cmd(struct its_node *its,
@@ -554,7 +570,7 @@ static struct its_vpe *its_build_vinvall_cmd(struct its_node *its,
554 570
555 its_fixup_cmd(cmd); 571 its_fixup_cmd(cmd);
556 572
557 return desc->its_vinvall_cmd.vpe; 573 return valid_vpe(its, desc->its_vinvall_cmd.vpe);
558} 574}
559 575
560static struct its_vpe *its_build_vmapp_cmd(struct its_node *its, 576static struct its_vpe *its_build_vmapp_cmd(struct its_node *its,
@@ -576,7 +592,7 @@ static struct its_vpe *its_build_vmapp_cmd(struct its_node *its,
576 592
577 its_fixup_cmd(cmd); 593 its_fixup_cmd(cmd);
578 594
579 return desc->its_vmapp_cmd.vpe; 595 return valid_vpe(its, desc->its_vmapp_cmd.vpe);
580} 596}
581 597
582static struct its_vpe *its_build_vmapti_cmd(struct its_node *its, 598static struct its_vpe *its_build_vmapti_cmd(struct its_node *its,
@@ -599,7 +615,7 @@ static struct its_vpe *its_build_vmapti_cmd(struct its_node *its,
599 615
600 its_fixup_cmd(cmd); 616 its_fixup_cmd(cmd);
601 617
602 return desc->its_vmapti_cmd.vpe; 618 return valid_vpe(its, desc->its_vmapti_cmd.vpe);
603} 619}
604 620
605static struct its_vpe *its_build_vmovi_cmd(struct its_node *its, 621static struct its_vpe *its_build_vmovi_cmd(struct its_node *its,
@@ -622,7 +638,7 @@ static struct its_vpe *its_build_vmovi_cmd(struct its_node *its,
622 638
623 its_fixup_cmd(cmd); 639 its_fixup_cmd(cmd);
624 640
625 return desc->its_vmovi_cmd.vpe; 641 return valid_vpe(its, desc->its_vmovi_cmd.vpe);
626} 642}
627 643
628static struct its_vpe *its_build_vmovp_cmd(struct its_node *its, 644static struct its_vpe *its_build_vmovp_cmd(struct its_node *its,
@@ -640,7 +656,7 @@ static struct its_vpe *its_build_vmovp_cmd(struct its_node *its,
640 656
641 its_fixup_cmd(cmd); 657 its_fixup_cmd(cmd);
642 658
643 return desc->its_vmovp_cmd.vpe; 659 return valid_vpe(its, desc->its_vmovp_cmd.vpe);
644} 660}
645 661
646static u64 its_cmd_ptr_to_offset(struct its_node *its, 662static u64 its_cmd_ptr_to_offset(struct its_node *its,
@@ -1824,11 +1840,16 @@ static int its_alloc_tables(struct its_node *its)
1824 1840
1825static int its_alloc_collections(struct its_node *its) 1841static int its_alloc_collections(struct its_node *its)
1826{ 1842{
1843 int i;
1844
1827 its->collections = kcalloc(nr_cpu_ids, sizeof(*its->collections), 1845 its->collections = kcalloc(nr_cpu_ids, sizeof(*its->collections),
1828 GFP_KERNEL); 1846 GFP_KERNEL);
1829 if (!its->collections) 1847 if (!its->collections)
1830 return -ENOMEM; 1848 return -ENOMEM;
1831 1849
1850 for (i = 0; i < nr_cpu_ids; i++)
1851 its->collections[i].target_address = ~0ULL;
1852
1832 return 0; 1853 return 0;
1833} 1854}
1834 1855
@@ -2310,7 +2331,14 @@ static int its_irq_domain_activate(struct irq_domain *domain,
2310 cpu_mask = cpumask_of_node(its_dev->its->numa_node); 2331 cpu_mask = cpumask_of_node(its_dev->its->numa_node);
2311 2332
2312 /* Bind the LPI to the first possible CPU */ 2333 /* Bind the LPI to the first possible CPU */
2313 cpu = cpumask_first(cpu_mask); 2334 cpu = cpumask_first_and(cpu_mask, cpu_online_mask);
2335 if (cpu >= nr_cpu_ids) {
2336 if (its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144)
2337 return -EINVAL;
2338
2339 cpu = cpumask_first(cpu_online_mask);
2340 }
2341
2314 its_dev->event_map.col_map[event] = cpu; 2342 its_dev->event_map.col_map[event] = cpu;
2315 irq_data_update_effective_affinity(d, cpumask_of(cpu)); 2343 irq_data_update_effective_affinity(d, cpumask_of(cpu));
2316 2344
@@ -3399,6 +3427,16 @@ static int redist_disable_lpis(void)
3399 u64 timeout = USEC_PER_SEC; 3427 u64 timeout = USEC_PER_SEC;
3400 u64 val; 3428 u64 val;
3401 3429
3430 /*
3431 * If coming via a CPU hotplug event, we don't need to disable
3432 * LPIs before trying to re-enable them. They are already
3433 * configured and all is well in the world. Detect this case
3434 * by checking the allocation of the pending table for the
3435 * current CPU.
3436 */
3437 if (gic_data_rdist()->pend_page)
3438 return 0;
3439
3402 if (!gic_rdists_supports_plpis()) { 3440 if (!gic_rdists_supports_plpis()) {
3403 pr_info("CPU%d: LPIs not supported\n", smp_processor_id()); 3441 pr_info("CPU%d: LPIs not supported\n", smp_processor_id());
3404 return -ENXIO; 3442 return -ENXIO;
diff --git a/drivers/irqchip/irq-ls-scfg-msi.c b/drivers/irqchip/irq-ls-scfg-msi.c
index 1ec3bfe56693..c671b3212010 100644
--- a/drivers/irqchip/irq-ls-scfg-msi.c
+++ b/drivers/irqchip/irq-ls-scfg-msi.c
@@ -93,8 +93,12 @@ static void ls_scfg_msi_compose_msg(struct irq_data *data, struct msi_msg *msg)
93 msg->address_lo = lower_32_bits(msi_data->msiir_addr); 93 msg->address_lo = lower_32_bits(msi_data->msiir_addr);
94 msg->data = data->hwirq; 94 msg->data = data->hwirq;
95 95
96 if (msi_affinity_flag) 96 if (msi_affinity_flag) {
97 msg->data |= cpumask_first(data->common->affinity); 97 const struct cpumask *mask;
98
99 mask = irq_data_get_effective_affinity_mask(data);
100 msg->data |= cpumask_first(mask);
101 }
98 102
99 iommu_dma_map_msi_msg(data->irq, msg); 103 iommu_dma_map_msi_msg(data->irq, msg);
100} 104}
@@ -121,7 +125,7 @@ static int ls_scfg_msi_set_affinity(struct irq_data *irq_data,
121 return -EINVAL; 125 return -EINVAL;
122 } 126 }
123 127
124 cpumask_copy(irq_data->common->affinity, mask); 128 irq_data_update_effective_affinity(irq_data, cpumask_of(cpu));
125 129
126 return IRQ_SET_MASK_OK; 130 return IRQ_SET_MASK_OK;
127} 131}
diff --git a/drivers/lightnvm/Kconfig b/drivers/lightnvm/Kconfig
index 10c08982185a..9c03f35d9df1 100644
--- a/drivers/lightnvm/Kconfig
+++ b/drivers/lightnvm/Kconfig
@@ -4,7 +4,7 @@
4 4
5menuconfig NVM 5menuconfig NVM
6 bool "Open-Channel SSD target support" 6 bool "Open-Channel SSD target support"
7 depends on BLOCK && HAS_DMA && PCI 7 depends on BLOCK && PCI
8 select BLK_DEV_NVME 8 select BLK_DEV_NVME
9 help 9 help
10 Say Y here to get to enable Open-channel SSDs. 10 Say Y here to get to enable Open-channel SSDs.
diff --git a/drivers/net/ethernet/amd/Kconfig b/drivers/net/ethernet/amd/Kconfig
index d5c15e8bb3de..f273af136fc7 100644
--- a/drivers/net/ethernet/amd/Kconfig
+++ b/drivers/net/ethernet/amd/Kconfig
@@ -173,7 +173,7 @@ config SUNLANCE
173 173
174config AMD_XGBE 174config AMD_XGBE
175 tristate "AMD 10GbE Ethernet driver" 175 tristate "AMD 10GbE Ethernet driver"
176 depends on ((OF_NET && OF_ADDRESS) || ACPI || PCI) && HAS_IOMEM && HAS_DMA 176 depends on ((OF_NET && OF_ADDRESS) || ACPI || PCI) && HAS_IOMEM
177 depends on X86 || ARM64 || COMPILE_TEST 177 depends on X86 || ARM64 || COMPILE_TEST
178 select BITREVERSE 178 select BITREVERSE
179 select CRC32 179 select CRC32
diff --git a/drivers/net/ethernet/apm/xgene-v2/Kconfig b/drivers/net/ethernet/apm/xgene-v2/Kconfig
index 1205861b6318..eedd3f3dd22e 100644
--- a/drivers/net/ethernet/apm/xgene-v2/Kconfig
+++ b/drivers/net/ethernet/apm/xgene-v2/Kconfig
@@ -1,6 +1,5 @@
1config NET_XGENE_V2 1config NET_XGENE_V2
2 tristate "APM X-Gene SoC Ethernet-v2 Driver" 2 tristate "APM X-Gene SoC Ethernet-v2 Driver"
3 depends on HAS_DMA
4 depends on ARCH_XGENE || COMPILE_TEST 3 depends on ARCH_XGENE || COMPILE_TEST
5 help 4 help
6 This is the Ethernet driver for the on-chip ethernet interface 5 This is the Ethernet driver for the on-chip ethernet interface
diff --git a/drivers/net/ethernet/apm/xgene/Kconfig b/drivers/net/ethernet/apm/xgene/Kconfig
index afccb033177b..e4e33c900b57 100644
--- a/drivers/net/ethernet/apm/xgene/Kconfig
+++ b/drivers/net/ethernet/apm/xgene/Kconfig
@@ -1,6 +1,5 @@
1config NET_XGENE 1config NET_XGENE
2 tristate "APM X-Gene SoC Ethernet Driver" 2 tristate "APM X-Gene SoC Ethernet Driver"
3 depends on HAS_DMA
4 depends on ARCH_XGENE || COMPILE_TEST 3 depends on ARCH_XGENE || COMPILE_TEST
5 select PHYLIB 4 select PHYLIB
6 select MDIO_XGENE 5 select MDIO_XGENE
diff --git a/drivers/net/ethernet/arc/Kconfig b/drivers/net/ethernet/arc/Kconfig
index e743ddf46343..5d0ab8e74b68 100644
--- a/drivers/net/ethernet/arc/Kconfig
+++ b/drivers/net/ethernet/arc/Kconfig
@@ -24,7 +24,8 @@ config ARC_EMAC_CORE
24config ARC_EMAC 24config ARC_EMAC
25 tristate "ARC EMAC support" 25 tristate "ARC EMAC support"
26 select ARC_EMAC_CORE 26 select ARC_EMAC_CORE
27 depends on OF_IRQ && OF_NET && HAS_DMA && (ARC || COMPILE_TEST) 27 depends on OF_IRQ && OF_NET
28 depends on ARC || COMPILE_TEST
28 ---help--- 29 ---help---
29 On some legacy ARC (Synopsys) FPGA boards such as ARCAngel4/ML50x 30 On some legacy ARC (Synopsys) FPGA boards such as ARCAngel4/ML50x
30 non-standard on-chip ethernet device ARC EMAC 10/100 is used. 31 non-standard on-chip ethernet device ARC EMAC 10/100 is used.
@@ -33,7 +34,8 @@ config ARC_EMAC
33config EMAC_ROCKCHIP 34config EMAC_ROCKCHIP
34 tristate "Rockchip EMAC support" 35 tristate "Rockchip EMAC support"
35 select ARC_EMAC_CORE 36 select ARC_EMAC_CORE
36 depends on OF_IRQ && OF_NET && REGULATOR && HAS_DMA && (ARCH_ROCKCHIP || COMPILE_TEST) 37 depends on OF_IRQ && OF_NET && REGULATOR
38 depends on ARCH_ROCKCHIP || COMPILE_TEST
37 ---help--- 39 ---help---
38 Support for Rockchip RK3036/RK3066/RK3188 EMAC ethernet controllers. 40 Support for Rockchip RK3036/RK3066/RK3188 EMAC ethernet controllers.
39 This selects Rockchip SoC glue layer support for the 41 This selects Rockchip SoC glue layer support for the
diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig
index af75156919ed..4c3bfde6e8de 100644
--- a/drivers/net/ethernet/broadcom/Kconfig
+++ b/drivers/net/ethernet/broadcom/Kconfig
@@ -157,7 +157,6 @@ config BGMAC
157config BGMAC_BCMA 157config BGMAC_BCMA
158 tristate "Broadcom iProc GBit BCMA support" 158 tristate "Broadcom iProc GBit BCMA support"
159 depends on BCMA && BCMA_HOST_SOC 159 depends on BCMA && BCMA_HOST_SOC
160 depends on HAS_DMA
161 depends on BCM47XX || ARCH_BCM_5301X || COMPILE_TEST 160 depends on BCM47XX || ARCH_BCM_5301X || COMPILE_TEST
162 select BGMAC 161 select BGMAC
163 select PHYLIB 162 select PHYLIB
@@ -170,7 +169,6 @@ config BGMAC_BCMA
170 169
171config BGMAC_PLATFORM 170config BGMAC_PLATFORM
172 tristate "Broadcom iProc GBit platform support" 171 tristate "Broadcom iProc GBit platform support"
173 depends on HAS_DMA
174 depends on ARCH_BCM_IPROC || COMPILE_TEST 172 depends on ARCH_BCM_IPROC || COMPILE_TEST
175 depends on OF 173 depends on OF
176 select BGMAC 174 select BGMAC
diff --git a/drivers/net/ethernet/cadence/macb_ptp.c b/drivers/net/ethernet/cadence/macb_ptp.c
index 2220c771092b..678835136bf8 100644
--- a/drivers/net/ethernet/cadence/macb_ptp.c
+++ b/drivers/net/ethernet/cadence/macb_ptp.c
@@ -170,10 +170,7 @@ static int gem_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
170 170
171 if (delta > TSU_NSEC_MAX_VAL) { 171 if (delta > TSU_NSEC_MAX_VAL) {
172 gem_tsu_get_time(&bp->ptp_clock_info, &now); 172 gem_tsu_get_time(&bp->ptp_clock_info, &now);
173 if (sign) 173 now = timespec64_add(now, then);
174 now = timespec64_sub(now, then);
175 else
176 now = timespec64_add(now, then);
177 174
178 gem_tsu_set_time(&bp->ptp_clock_info, 175 gem_tsu_set_time(&bp->ptp_clock_info,
179 (const struct timespec64 *)&now); 176 (const struct timespec64 *)&now);
diff --git a/drivers/net/ethernet/calxeda/Kconfig b/drivers/net/ethernet/calxeda/Kconfig
index 07d2201530d2..9fdd496b90ff 100644
--- a/drivers/net/ethernet/calxeda/Kconfig
+++ b/drivers/net/ethernet/calxeda/Kconfig
@@ -1,6 +1,6 @@
1config NET_CALXEDA_XGMAC 1config NET_CALXEDA_XGMAC
2 tristate "Calxeda 1G/10G XGMAC Ethernet driver" 2 tristate "Calxeda 1G/10G XGMAC Ethernet driver"
3 depends on HAS_IOMEM && HAS_DMA 3 depends on HAS_IOMEM
4 depends on ARCH_HIGHBANK || COMPILE_TEST 4 depends on ARCH_HIGHBANK || COMPILE_TEST
5 select CRC32 5 select CRC32
6 help 6 help
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index dd04a2f89ce6..bc03c175a3cd 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -263,7 +263,7 @@ static void dcb_tx_queue_prio_enable(struct net_device *dev, int enable)
263 "Can't %s DCB Priority on port %d, TX Queue %d: err=%d\n", 263 "Can't %s DCB Priority on port %d, TX Queue %d: err=%d\n",
264 enable ? "set" : "unset", pi->port_id, i, -err); 264 enable ? "set" : "unset", pi->port_id, i, -err);
265 else 265 else
266 txq->dcb_prio = value; 266 txq->dcb_prio = enable ? value : 0;
267 } 267 }
268} 268}
269 269
diff --git a/drivers/net/ethernet/hisilicon/Kconfig b/drivers/net/ethernet/hisilicon/Kconfig
index 8bcf470ff5f3..fb1a7251f45d 100644
--- a/drivers/net/ethernet/hisilicon/Kconfig
+++ b/drivers/net/ethernet/hisilicon/Kconfig
@@ -5,7 +5,7 @@
5config NET_VENDOR_HISILICON 5config NET_VENDOR_HISILICON
6 bool "Hisilicon devices" 6 bool "Hisilicon devices"
7 default y 7 default y
8 depends on (OF || ACPI) && HAS_DMA 8 depends on OF || ACPI
9 depends on ARM || ARM64 || COMPILE_TEST 9 depends on ARM || ARM64 || COMPILE_TEST
10 ---help--- 10 ---help---
11 If you have a network (Ethernet) card belonging to this class, say Y. 11 If you have a network (Ethernet) card belonging to this class, say Y.
diff --git a/drivers/net/ethernet/marvell/Kconfig b/drivers/net/ethernet/marvell/Kconfig
index cc2f7701e71e..f33fd22b351c 100644
--- a/drivers/net/ethernet/marvell/Kconfig
+++ b/drivers/net/ethernet/marvell/Kconfig
@@ -18,8 +18,8 @@ if NET_VENDOR_MARVELL
18 18
19config MV643XX_ETH 19config MV643XX_ETH
20 tristate "Marvell Discovery (643XX) and Orion ethernet support" 20 tristate "Marvell Discovery (643XX) and Orion ethernet support"
21 depends on (MV64X60 || PPC32 || PLAT_ORION || COMPILE_TEST) && INET 21 depends on MV64X60 || PPC32 || PLAT_ORION || COMPILE_TEST
22 depends on HAS_DMA 22 depends on INET
23 select PHYLIB 23 select PHYLIB
24 select MVMDIO 24 select MVMDIO
25 ---help--- 25 ---help---
@@ -58,7 +58,6 @@ config MVNETA_BM_ENABLE
58config MVNETA 58config MVNETA
59 tristate "Marvell Armada 370/38x/XP/37xx network interface support" 59 tristate "Marvell Armada 370/38x/XP/37xx network interface support"
60 depends on ARCH_MVEBU || COMPILE_TEST 60 depends on ARCH_MVEBU || COMPILE_TEST
61 depends on HAS_DMA
62 select MVMDIO 61 select MVMDIO
63 select PHYLINK 62 select PHYLINK
64 ---help--- 63 ---help---
@@ -84,7 +83,6 @@ config MVNETA_BM
84config MVPP2 83config MVPP2
85 tristate "Marvell Armada 375/7K/8K network interface support" 84 tristate "Marvell Armada 375/7K/8K network interface support"
86 depends on ARCH_MVEBU || COMPILE_TEST 85 depends on ARCH_MVEBU || COMPILE_TEST
87 depends on HAS_DMA
88 select MVMDIO 86 select MVMDIO
89 select PHYLINK 87 select PHYLINK
90 ---help--- 88 ---help---
@@ -93,7 +91,7 @@ config MVPP2
93 91
94config PXA168_ETH 92config PXA168_ETH
95 tristate "Marvell pxa168 ethernet support" 93 tristate "Marvell pxa168 ethernet support"
96 depends on HAS_IOMEM && HAS_DMA 94 depends on HAS_IOMEM
97 depends on CPU_PXA168 || ARCH_BERLIN || COMPILE_TEST 95 depends on CPU_PXA168 || ARCH_BERLIN || COMPILE_TEST
98 select PHYLIB 96 select PHYLIB
99 ---help--- 97 ---help---
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index 17a904cc6a5e..0ad2f3f7da85 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -1932,7 +1932,7 @@ static int mvneta_rx_swbm(struct mvneta_port *pp, int rx_todo,
1932 rx_bytes = rx_desc->data_size - (ETH_FCS_LEN + MVNETA_MH_SIZE); 1932 rx_bytes = rx_desc->data_size - (ETH_FCS_LEN + MVNETA_MH_SIZE);
1933 index = rx_desc - rxq->descs; 1933 index = rx_desc - rxq->descs;
1934 data = rxq->buf_virt_addr[index]; 1934 data = rxq->buf_virt_addr[index];
1935 phys_addr = rx_desc->buf_phys_addr; 1935 phys_addr = rx_desc->buf_phys_addr - pp->rx_offset_correction;
1936 1936
1937 if (!mvneta_rxq_desc_is_first_last(rx_status) || 1937 if (!mvneta_rxq_desc_is_first_last(rx_status) ||
1938 (rx_status & MVNETA_RXD_ERR_SUMMARY)) { 1938 (rx_status & MVNETA_RXD_ERR_SUMMARY)) {
diff --git a/drivers/net/ethernet/mellanox/mlxsw/Kconfig b/drivers/net/ethernet/mellanox/mlxsw/Kconfig
index f4d9c9975ac3..82827a8d3d67 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/Kconfig
+++ b/drivers/net/ethernet/mellanox/mlxsw/Kconfig
@@ -30,7 +30,7 @@ config MLXSW_CORE_THERMAL
30 30
31config MLXSW_PCI 31config MLXSW_PCI
32 tristate "PCI bus implementation for Mellanox Technologies Switch ASICs" 32 tristate "PCI bus implementation for Mellanox Technologies Switch ASICs"
33 depends on PCI && HAS_DMA && HAS_IOMEM && MLXSW_CORE 33 depends on PCI && HAS_IOMEM && MLXSW_CORE
34 default m 34 default m
35 ---help--- 35 ---help---
36 This is PCI bus implementation for Mellanox Technologies Switch ASICs. 36 This is PCI bus implementation for Mellanox Technologies Switch ASICs.
diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc/ocelot.c
index fb2c8f8071e6..776a8a9be8e3 100644
--- a/drivers/net/ethernet/mscc/ocelot.c
+++ b/drivers/net/ethernet/mscc/ocelot.c
@@ -344,10 +344,9 @@ static int ocelot_port_stop(struct net_device *dev)
344static int ocelot_gen_ifh(u32 *ifh, struct frame_info *info) 344static int ocelot_gen_ifh(u32 *ifh, struct frame_info *info)
345{ 345{
346 ifh[0] = IFH_INJ_BYPASS; 346 ifh[0] = IFH_INJ_BYPASS;
347 ifh[1] = (0xff00 & info->port) >> 8; 347 ifh[1] = (0xf00 & info->port) >> 8;
348 ifh[2] = (0xff & info->port) << 24; 348 ifh[2] = (0xff & info->port) << 24;
349 ifh[3] = IFH_INJ_POP_CNT_DISABLE | (info->cpuq << 20) | 349 ifh[3] = (info->tag_type << 16) | info->vid;
350 (info->tag_type << 16) | info->vid;
351 350
352 return 0; 351 return 0;
353} 352}
@@ -370,11 +369,13 @@ static int ocelot_port_xmit(struct sk_buff *skb, struct net_device *dev)
370 QS_INJ_CTRL_SOF, QS_INJ_CTRL, grp); 369 QS_INJ_CTRL_SOF, QS_INJ_CTRL, grp);
371 370
372 info.port = BIT(port->chip_port); 371 info.port = BIT(port->chip_port);
373 info.cpuq = 0xff; 372 info.tag_type = IFH_TAG_TYPE_C;
373 info.vid = skb_vlan_tag_get(skb);
374 ocelot_gen_ifh(ifh, &info); 374 ocelot_gen_ifh(ifh, &info);
375 375
376 for (i = 0; i < IFH_LEN; i++) 376 for (i = 0; i < IFH_LEN; i++)
377 ocelot_write_rix(ocelot, ifh[i], QS_INJ_WR, grp); 377 ocelot_write_rix(ocelot, (__force u32)cpu_to_be32(ifh[i]),
378 QS_INJ_WR, grp);
378 379
379 count = (skb->len + 3) / 4; 380 count = (skb->len + 3) / 4;
380 last = skb->len % 4; 381 last = skb->len % 4;
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 75dfac0248f4..f4cae2be0fda 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -7148,7 +7148,7 @@ static void rtl8169_netpoll(struct net_device *dev)
7148{ 7148{
7149 struct rtl8169_private *tp = netdev_priv(dev); 7149 struct rtl8169_private *tp = netdev_priv(dev);
7150 7150
7151 rtl8169_interrupt(pci_irq_vector(tp->pci_dev, 0), dev); 7151 rtl8169_interrupt(pci_irq_vector(tp->pci_dev, 0), tp);
7152} 7152}
7153#endif 7153#endif
7154 7154
diff --git a/drivers/net/ethernet/renesas/Kconfig b/drivers/net/ethernet/renesas/Kconfig
index 27be51f0a421..f3f7477043ce 100644
--- a/drivers/net/ethernet/renesas/Kconfig
+++ b/drivers/net/ethernet/renesas/Kconfig
@@ -17,7 +17,6 @@ if NET_VENDOR_RENESAS
17 17
18config SH_ETH 18config SH_ETH
19 tristate "Renesas SuperH Ethernet support" 19 tristate "Renesas SuperH Ethernet support"
20 depends on HAS_DMA
21 depends on ARCH_RENESAS || SUPERH || COMPILE_TEST 20 depends on ARCH_RENESAS || SUPERH || COMPILE_TEST
22 select CRC32 21 select CRC32
23 select MII 22 select MII
@@ -31,7 +30,6 @@ config SH_ETH
31 30
32config RAVB 31config RAVB
33 tristate "Renesas Ethernet AVB support" 32 tristate "Renesas Ethernet AVB support"
34 depends on HAS_DMA
35 depends on ARCH_RENESAS || COMPILE_TEST 33 depends on ARCH_RENESAS || COMPILE_TEST
36 select CRC32 34 select CRC32
37 select MII 35 select MII
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
index ad4a354ce570..570ec72266f3 100644
--- a/drivers/net/ethernet/sfc/efx.c
+++ b/drivers/net/ethernet/sfc/efx.c
@@ -3180,6 +3180,7 @@ bool efx_rps_check_rule(struct efx_arfs_rule *rule, unsigned int filter_idx,
3180 return true; 3180 return true;
3181} 3181}
3182 3182
3183static
3183struct hlist_head *efx_rps_hash_bucket(struct efx_nic *efx, 3184struct hlist_head *efx_rps_hash_bucket(struct efx_nic *efx,
3184 const struct efx_filter_spec *spec) 3185 const struct efx_filter_spec *spec)
3185{ 3186{
diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c
index cdbddf16dd29..4f1267477aa4 100644
--- a/drivers/net/ethernet/ti/davinci_cpdma.c
+++ b/drivers/net/ethernet/ti/davinci_cpdma.c
@@ -205,7 +205,7 @@ static void cpdma_desc_pool_destroy(struct cpdma_ctlr *ctlr)
205 * devices (e.g. cpsw switches) use plain old memory. Descriptor pools 205 * devices (e.g. cpsw switches) use plain old memory. Descriptor pools
206 * abstract out these details 206 * abstract out these details
207 */ 207 */
208int cpdma_desc_pool_create(struct cpdma_ctlr *ctlr) 208static int cpdma_desc_pool_create(struct cpdma_ctlr *ctlr)
209{ 209{
210 struct cpdma_params *cpdma_params = &ctlr->params; 210 struct cpdma_params *cpdma_params = &ctlr->params;
211 struct cpdma_desc_pool *pool; 211 struct cpdma_desc_pool *pool;
diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c
index a1a6445b5a7e..f270beebb428 100644
--- a/drivers/net/ethernet/ti/davinci_emac.c
+++ b/drivers/net/ethernet/ti/davinci_emac.c
@@ -1387,6 +1387,10 @@ static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
1387 1387
1388static int match_first_device(struct device *dev, void *data) 1388static int match_first_device(struct device *dev, void *data)
1389{ 1389{
1390 if (dev->parent && dev->parent->of_node)
1391 return of_device_is_compatible(dev->parent->of_node,
1392 "ti,davinci_mdio");
1393
1390 return !strncmp(dev_name(dev), "davinci_mdio", 12); 1394 return !strncmp(dev_name(dev), "davinci_mdio", 12);
1391} 1395}
1392 1396
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
index d02f0a7c534e..23c1d6600241 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -594,7 +594,8 @@ int ipvlan_link_new(struct net *src_net, struct net_device *dev,
594 ipvlan->phy_dev = phy_dev; 594 ipvlan->phy_dev = phy_dev;
595 ipvlan->dev = dev; 595 ipvlan->dev = dev;
596 ipvlan->sfeatures = IPVLAN_FEATURES; 596 ipvlan->sfeatures = IPVLAN_FEATURES;
597 ipvlan_adjust_mtu(ipvlan, phy_dev); 597 if (!tb[IFLA_MTU])
598 ipvlan_adjust_mtu(ipvlan, phy_dev);
598 INIT_LIST_HEAD(&ipvlan->addrs); 599 INIT_LIST_HEAD(&ipvlan->addrs);
599 spin_lock_init(&ipvlan->addrs_lock); 600 spin_lock_init(&ipvlan->addrs_lock);
600 601
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 8e8b51f171f4..8fac8e132c5b 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -1246,6 +1246,7 @@ static const struct usb_device_id products[] = {
1246 {QMI_FIXED_INTF(0x413c, 0x81b3, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */ 1246 {QMI_FIXED_INTF(0x413c, 0x81b3, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */
1247 {QMI_FIXED_INTF(0x413c, 0x81b6, 8)}, /* Dell Wireless 5811e */ 1247 {QMI_FIXED_INTF(0x413c, 0x81b6, 8)}, /* Dell Wireless 5811e */
1248 {QMI_FIXED_INTF(0x413c, 0x81b6, 10)}, /* Dell Wireless 5811e */ 1248 {QMI_FIXED_INTF(0x413c, 0x81b6, 10)}, /* Dell Wireless 5811e */
1249 {QMI_FIXED_INTF(0x413c, 0x81d7, 1)}, /* Dell Wireless 5821e */
1249 {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */ 1250 {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */
1250 {QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */ 1251 {QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */
1251 {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */ 1252 {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
diff --git a/drivers/net/wireless/broadcom/brcm80211/Kconfig b/drivers/net/wireless/broadcom/brcm80211/Kconfig
index 9d99eb42d917..6acba67bca07 100644
--- a/drivers/net/wireless/broadcom/brcm80211/Kconfig
+++ b/drivers/net/wireless/broadcom/brcm80211/Kconfig
@@ -60,7 +60,6 @@ config BRCMFMAC_PCIE
60 bool "PCIE bus interface support for FullMAC driver" 60 bool "PCIE bus interface support for FullMAC driver"
61 depends on BRCMFMAC 61 depends on BRCMFMAC
62 depends on PCI 62 depends on PCI
63 depends on HAS_DMA
64 select BRCMFMAC_PROTO_MSGBUF 63 select BRCMFMAC_PROTO_MSGBUF
65 select FW_LOADER 64 select FW_LOADER
66 ---help--- 65 ---help---
diff --git a/drivers/net/wireless/quantenna/qtnfmac/Kconfig b/drivers/net/wireless/quantenna/qtnfmac/Kconfig
index 025fa6018550..8d1492a90bd1 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/Kconfig
+++ b/drivers/net/wireless/quantenna/qtnfmac/Kconfig
@@ -7,7 +7,7 @@ config QTNFMAC
7config QTNFMAC_PEARL_PCIE 7config QTNFMAC_PEARL_PCIE
8 tristate "Quantenna QSR10g PCIe support" 8 tristate "Quantenna QSR10g PCIe support"
9 default n 9 default n
10 depends on HAS_DMA && PCI && CFG80211 10 depends on PCI && CFG80211
11 select QTNFMAC 11 select QTNFMAC
12 select FW_LOADER 12 select FW_LOADER
13 select CRC32 13 select CRC32
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index 922ce0abf5cf..a57daecf1d57 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -1810,7 +1810,7 @@ static int talk_to_netback(struct xenbus_device *dev,
1810 err = xen_net_read_mac(dev, info->netdev->dev_addr); 1810 err = xen_net_read_mac(dev, info->netdev->dev_addr);
1811 if (err) { 1811 if (err) {
1812 xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename); 1812 xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename);
1813 goto out; 1813 goto out_unlocked;
1814 } 1814 }
1815 1815
1816 rtnl_lock(); 1816 rtnl_lock();
@@ -1925,6 +1925,7 @@ abort_transaction_no_dev_fatal:
1925 xennet_destroy_queues(info); 1925 xennet_destroy_queues(info);
1926 out: 1926 out:
1927 rtnl_unlock(); 1927 rtnl_unlock();
1928out_unlocked:
1928 device_unregister(&dev->dev); 1929 device_unregister(&dev->dev);
1929 return err; 1930 return err;
1930} 1931}
@@ -1950,10 +1951,6 @@ static int xennet_connect(struct net_device *dev)
1950 /* talk_to_netback() sets the correct number of queues */ 1951 /* talk_to_netback() sets the correct number of queues */
1951 num_queues = dev->real_num_tx_queues; 1952 num_queues = dev->real_num_tx_queues;
1952 1953
1953 rtnl_lock();
1954 netdev_update_features(dev);
1955 rtnl_unlock();
1956
1957 if (dev->reg_state == NETREG_UNINITIALIZED) { 1954 if (dev->reg_state == NETREG_UNINITIALIZED) {
1958 err = register_netdev(dev); 1955 err = register_netdev(dev);
1959 if (err) { 1956 if (err) {
@@ -1963,6 +1960,10 @@ static int xennet_connect(struct net_device *dev)
1963 } 1960 }
1964 } 1961 }
1965 1962
1963 rtnl_lock();
1964 netdev_update_features(dev);
1965 rtnl_unlock();
1966
1966 /* 1967 /*
1967 * All public and private state should now be sane. Get 1968 * All public and private state should now be sane. Get
1968 * ready to start sending and receiving packets and give the driver 1969 * ready to start sending and receiving packets and give the driver
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 21710a7460c8..46df030b2c3f 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -1808,6 +1808,7 @@ static void nvme_set_queue_limits(struct nvme_ctrl *ctrl,
1808 u32 max_segments = 1808 u32 max_segments =
1809 (ctrl->max_hw_sectors / (ctrl->page_size >> 9)) + 1; 1809 (ctrl->max_hw_sectors / (ctrl->page_size >> 9)) + 1;
1810 1810
1811 max_segments = min_not_zero(max_segments, ctrl->max_segments);
1811 blk_queue_max_hw_sectors(q, ctrl->max_hw_sectors); 1812 blk_queue_max_hw_sectors(q, ctrl->max_hw_sectors);
1812 blk_queue_max_segments(q, min_t(u32, max_segments, USHRT_MAX)); 1813 blk_queue_max_segments(q, min_t(u32, max_segments, USHRT_MAX));
1813 } 1814 }
diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
index b528a2f5826c..41d45a1b5c62 100644
--- a/drivers/nvme/host/fc.c
+++ b/drivers/nvme/host/fc.c
@@ -2790,6 +2790,9 @@ nvme_fc_delete_association(struct nvme_fc_ctrl *ctrl)
2790 /* re-enable the admin_q so anything new can fast fail */ 2790 /* re-enable the admin_q so anything new can fast fail */
2791 blk_mq_unquiesce_queue(ctrl->ctrl.admin_q); 2791 blk_mq_unquiesce_queue(ctrl->ctrl.admin_q);
2792 2792
2793 /* resume the io queues so that things will fast fail */
2794 nvme_start_queues(&ctrl->ctrl);
2795
2793 nvme_fc_ctlr_inactive_on_rport(ctrl); 2796 nvme_fc_ctlr_inactive_on_rport(ctrl);
2794} 2797}
2795 2798
@@ -2804,9 +2807,6 @@ nvme_fc_delete_ctrl(struct nvme_ctrl *nctrl)
2804 * waiting for io to terminate 2807 * waiting for io to terminate
2805 */ 2808 */
2806 nvme_fc_delete_association(ctrl); 2809 nvme_fc_delete_association(ctrl);
2807
2808 /* resume the io queues so that things will fast fail */
2809 nvme_start_queues(nctrl);
2810} 2810}
2811 2811
2812static void 2812static void
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index 231807cbc849..0c4a33df3b2f 100644
--- a/drivers/nvme/host/nvme.h
+++ b/drivers/nvme/host/nvme.h
@@ -170,6 +170,7 @@ struct nvme_ctrl {
170 u64 cap; 170 u64 cap;
171 u32 page_size; 171 u32 page_size;
172 u32 max_hw_sectors; 172 u32 max_hw_sectors;
173 u32 max_segments;
173 u16 oncs; 174 u16 oncs;
174 u16 oacs; 175 u16 oacs;
175 u16 nssa; 176 u16 nssa;
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index fc33804662e7..ba943f211687 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -38,6 +38,13 @@
38 38
39#define SGES_PER_PAGE (PAGE_SIZE / sizeof(struct nvme_sgl_desc)) 39#define SGES_PER_PAGE (PAGE_SIZE / sizeof(struct nvme_sgl_desc))
40 40
41/*
42 * These can be higher, but we need to ensure that any command doesn't
43 * require an sg allocation that needs more than a page of data.
44 */
45#define NVME_MAX_KB_SZ 4096
46#define NVME_MAX_SEGS 127
47
41static int use_threaded_interrupts; 48static int use_threaded_interrupts;
42module_param(use_threaded_interrupts, int, 0); 49module_param(use_threaded_interrupts, int, 0);
43 50
@@ -100,6 +107,8 @@ struct nvme_dev {
100 struct nvme_ctrl ctrl; 107 struct nvme_ctrl ctrl;
101 struct completion ioq_wait; 108 struct completion ioq_wait;
102 109
110 mempool_t *iod_mempool;
111
103 /* shadow doorbell buffer support: */ 112 /* shadow doorbell buffer support: */
104 u32 *dbbuf_dbs; 113 u32 *dbbuf_dbs;
105 dma_addr_t dbbuf_dbs_dma_addr; 114 dma_addr_t dbbuf_dbs_dma_addr;
@@ -477,10 +486,7 @@ static blk_status_t nvme_init_iod(struct request *rq, struct nvme_dev *dev)
477 iod->use_sgl = nvme_pci_use_sgls(dev, rq); 486 iod->use_sgl = nvme_pci_use_sgls(dev, rq);
478 487
479 if (nseg > NVME_INT_PAGES || size > NVME_INT_BYTES(dev)) { 488 if (nseg > NVME_INT_PAGES || size > NVME_INT_BYTES(dev)) {
480 size_t alloc_size = nvme_pci_iod_alloc_size(dev, size, nseg, 489 iod->sg = mempool_alloc(dev->iod_mempool, GFP_ATOMIC);
481 iod->use_sgl);
482
483 iod->sg = kmalloc(alloc_size, GFP_ATOMIC);
484 if (!iod->sg) 490 if (!iod->sg)
485 return BLK_STS_RESOURCE; 491 return BLK_STS_RESOURCE;
486 } else { 492 } else {
@@ -526,7 +532,7 @@ static void nvme_free_iod(struct nvme_dev *dev, struct request *req)
526 } 532 }
527 533
528 if (iod->sg != iod->inline_sg) 534 if (iod->sg != iod->inline_sg)
529 kfree(iod->sg); 535 mempool_free(iod->sg, dev->iod_mempool);
530} 536}
531 537
532#ifdef CONFIG_BLK_DEV_INTEGRITY 538#ifdef CONFIG_BLK_DEV_INTEGRITY
@@ -2280,6 +2286,7 @@ static void nvme_pci_free_ctrl(struct nvme_ctrl *ctrl)
2280 blk_put_queue(dev->ctrl.admin_q); 2286 blk_put_queue(dev->ctrl.admin_q);
2281 kfree(dev->queues); 2287 kfree(dev->queues);
2282 free_opal_dev(dev->ctrl.opal_dev); 2288 free_opal_dev(dev->ctrl.opal_dev);
2289 mempool_destroy(dev->iod_mempool);
2283 kfree(dev); 2290 kfree(dev);
2284} 2291}
2285 2292
@@ -2289,6 +2296,7 @@ static void nvme_remove_dead_ctrl(struct nvme_dev *dev, int status)
2289 2296
2290 nvme_get_ctrl(&dev->ctrl); 2297 nvme_get_ctrl(&dev->ctrl);
2291 nvme_dev_disable(dev, false); 2298 nvme_dev_disable(dev, false);
2299 nvme_kill_queues(&dev->ctrl);
2292 if (!queue_work(nvme_wq, &dev->remove_work)) 2300 if (!queue_work(nvme_wq, &dev->remove_work))
2293 nvme_put_ctrl(&dev->ctrl); 2301 nvme_put_ctrl(&dev->ctrl);
2294} 2302}
@@ -2333,6 +2341,13 @@ static void nvme_reset_work(struct work_struct *work)
2333 if (result) 2341 if (result)
2334 goto out; 2342 goto out;
2335 2343
2344 /*
2345 * Limit the max command size to prevent iod->sg allocations going
2346 * over a single page.
2347 */
2348 dev->ctrl.max_hw_sectors = NVME_MAX_KB_SZ << 1;
2349 dev->ctrl.max_segments = NVME_MAX_SEGS;
2350
2336 result = nvme_init_identify(&dev->ctrl); 2351 result = nvme_init_identify(&dev->ctrl);
2337 if (result) 2352 if (result)
2338 goto out; 2353 goto out;
@@ -2405,7 +2420,6 @@ static void nvme_remove_dead_ctrl_work(struct work_struct *work)
2405 struct nvme_dev *dev = container_of(work, struct nvme_dev, remove_work); 2420 struct nvme_dev *dev = container_of(work, struct nvme_dev, remove_work);
2406 struct pci_dev *pdev = to_pci_dev(dev->dev); 2421 struct pci_dev *pdev = to_pci_dev(dev->dev);
2407 2422
2408 nvme_kill_queues(&dev->ctrl);
2409 if (pci_get_drvdata(pdev)) 2423 if (pci_get_drvdata(pdev))
2410 device_release_driver(&pdev->dev); 2424 device_release_driver(&pdev->dev);
2411 nvme_put_ctrl(&dev->ctrl); 2425 nvme_put_ctrl(&dev->ctrl);
@@ -2509,6 +2523,7 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2509 int node, result = -ENOMEM; 2523 int node, result = -ENOMEM;
2510 struct nvme_dev *dev; 2524 struct nvme_dev *dev;
2511 unsigned long quirks = id->driver_data; 2525 unsigned long quirks = id->driver_data;
2526 size_t alloc_size;
2512 2527
2513 node = dev_to_node(&pdev->dev); 2528 node = dev_to_node(&pdev->dev);
2514 if (node == NUMA_NO_NODE) 2529 if (node == NUMA_NO_NODE)
@@ -2546,6 +2561,23 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2546 if (result) 2561 if (result)
2547 goto release_pools; 2562 goto release_pools;
2548 2563
2564 /*
2565 * Double check that our mempool alloc size will cover the biggest
2566 * command we support.
2567 */
2568 alloc_size = nvme_pci_iod_alloc_size(dev, NVME_MAX_KB_SZ,
2569 NVME_MAX_SEGS, true);
2570 WARN_ON_ONCE(alloc_size > PAGE_SIZE);
2571
2572 dev->iod_mempool = mempool_create_node(1, mempool_kmalloc,
2573 mempool_kfree,
2574 (void *) alloc_size,
2575 GFP_KERNEL, node);
2576 if (!dev->iod_mempool) {
2577 result = -ENOMEM;
2578 goto release_pools;
2579 }
2580
2549 dev_info(dev->ctrl.device, "pci function %s\n", dev_name(&pdev->dev)); 2581 dev_info(dev->ctrl.device, "pci function %s\n", dev_name(&pdev->dev));
2550 2582
2551 nvme_get_ctrl(&dev->ctrl); 2583 nvme_get_ctrl(&dev->ctrl);
diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
index c9424da0d23e..9544625c0b7d 100644
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -560,12 +560,6 @@ static void nvme_rdma_free_queue(struct nvme_rdma_queue *queue)
560 if (!test_and_clear_bit(NVME_RDMA_Q_ALLOCATED, &queue->flags)) 560 if (!test_and_clear_bit(NVME_RDMA_Q_ALLOCATED, &queue->flags))
561 return; 561 return;
562 562
563 if (nvme_rdma_queue_idx(queue) == 0) {
564 nvme_rdma_free_qe(queue->device->dev,
565 &queue->ctrl->async_event_sqe,
566 sizeof(struct nvme_command), DMA_TO_DEVICE);
567 }
568
569 nvme_rdma_destroy_queue_ib(queue); 563 nvme_rdma_destroy_queue_ib(queue);
570 rdma_destroy_id(queue->cm_id); 564 rdma_destroy_id(queue->cm_id);
571} 565}
@@ -698,7 +692,7 @@ static struct blk_mq_tag_set *nvme_rdma_alloc_tagset(struct nvme_ctrl *nctrl,
698 set = &ctrl->tag_set; 692 set = &ctrl->tag_set;
699 memset(set, 0, sizeof(*set)); 693 memset(set, 0, sizeof(*set));
700 set->ops = &nvme_rdma_mq_ops; 694 set->ops = &nvme_rdma_mq_ops;
701 set->queue_depth = nctrl->opts->queue_size; 695 set->queue_depth = nctrl->sqsize + 1;
702 set->reserved_tags = 1; /* fabric connect */ 696 set->reserved_tags = 1; /* fabric connect */
703 set->numa_node = NUMA_NO_NODE; 697 set->numa_node = NUMA_NO_NODE;
704 set->flags = BLK_MQ_F_SHOULD_MERGE; 698 set->flags = BLK_MQ_F_SHOULD_MERGE;
@@ -734,11 +728,12 @@ out:
734static void nvme_rdma_destroy_admin_queue(struct nvme_rdma_ctrl *ctrl, 728static void nvme_rdma_destroy_admin_queue(struct nvme_rdma_ctrl *ctrl,
735 bool remove) 729 bool remove)
736{ 730{
737 nvme_rdma_stop_queue(&ctrl->queues[0]);
738 if (remove) { 731 if (remove) {
739 blk_cleanup_queue(ctrl->ctrl.admin_q); 732 blk_cleanup_queue(ctrl->ctrl.admin_q);
740 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset); 733 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset);
741 } 734 }
735 nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,
736 sizeof(struct nvme_command), DMA_TO_DEVICE);
742 nvme_rdma_free_queue(&ctrl->queues[0]); 737 nvme_rdma_free_queue(&ctrl->queues[0]);
743} 738}
744 739
@@ -755,11 +750,16 @@ static int nvme_rdma_configure_admin_queue(struct nvme_rdma_ctrl *ctrl,
755 750
756 ctrl->max_fr_pages = nvme_rdma_get_max_fr_pages(ctrl->device->dev); 751 ctrl->max_fr_pages = nvme_rdma_get_max_fr_pages(ctrl->device->dev);
757 752
753 error = nvme_rdma_alloc_qe(ctrl->device->dev, &ctrl->async_event_sqe,
754 sizeof(struct nvme_command), DMA_TO_DEVICE);
755 if (error)
756 goto out_free_queue;
757
758 if (new) { 758 if (new) {
759 ctrl->ctrl.admin_tagset = nvme_rdma_alloc_tagset(&ctrl->ctrl, true); 759 ctrl->ctrl.admin_tagset = nvme_rdma_alloc_tagset(&ctrl->ctrl, true);
760 if (IS_ERR(ctrl->ctrl.admin_tagset)) { 760 if (IS_ERR(ctrl->ctrl.admin_tagset)) {
761 error = PTR_ERR(ctrl->ctrl.admin_tagset); 761 error = PTR_ERR(ctrl->ctrl.admin_tagset);
762 goto out_free_queue; 762 goto out_free_async_qe;
763 } 763 }
764 764
765 ctrl->ctrl.admin_q = blk_mq_init_queue(&ctrl->admin_tag_set); 765 ctrl->ctrl.admin_q = blk_mq_init_queue(&ctrl->admin_tag_set);
@@ -795,12 +795,6 @@ static int nvme_rdma_configure_admin_queue(struct nvme_rdma_ctrl *ctrl,
795 if (error) 795 if (error)
796 goto out_stop_queue; 796 goto out_stop_queue;
797 797
798 error = nvme_rdma_alloc_qe(ctrl->queues[0].device->dev,
799 &ctrl->async_event_sqe, sizeof(struct nvme_command),
800 DMA_TO_DEVICE);
801 if (error)
802 goto out_stop_queue;
803
804 return 0; 798 return 0;
805 799
806out_stop_queue: 800out_stop_queue:
@@ -811,6 +805,9 @@ out_cleanup_queue:
811out_free_tagset: 805out_free_tagset:
812 if (new) 806 if (new)
813 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset); 807 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset);
808out_free_async_qe:
809 nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,
810 sizeof(struct nvme_command), DMA_TO_DEVICE);
814out_free_queue: 811out_free_queue:
815 nvme_rdma_free_queue(&ctrl->queues[0]); 812 nvme_rdma_free_queue(&ctrl->queues[0]);
816 return error; 813 return error;
@@ -819,7 +816,6 @@ out_free_queue:
819static void nvme_rdma_destroy_io_queues(struct nvme_rdma_ctrl *ctrl, 816static void nvme_rdma_destroy_io_queues(struct nvme_rdma_ctrl *ctrl,
820 bool remove) 817 bool remove)
821{ 818{
822 nvme_rdma_stop_io_queues(ctrl);
823 if (remove) { 819 if (remove) {
824 blk_cleanup_queue(ctrl->ctrl.connect_q); 820 blk_cleanup_queue(ctrl->ctrl.connect_q);
825 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.tagset); 821 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.tagset);
@@ -888,9 +884,9 @@ static void nvme_rdma_free_ctrl(struct nvme_ctrl *nctrl)
888 list_del(&ctrl->list); 884 list_del(&ctrl->list);
889 mutex_unlock(&nvme_rdma_ctrl_mutex); 885 mutex_unlock(&nvme_rdma_ctrl_mutex);
890 886
891 kfree(ctrl->queues);
892 nvmf_free_options(nctrl->opts); 887 nvmf_free_options(nctrl->opts);
893free_ctrl: 888free_ctrl:
889 kfree(ctrl->queues);
894 kfree(ctrl); 890 kfree(ctrl);
895} 891}
896 892
@@ -949,6 +945,7 @@ static void nvme_rdma_reconnect_ctrl_work(struct work_struct *work)
949 return; 945 return;
950 946
951destroy_admin: 947destroy_admin:
948 nvme_rdma_stop_queue(&ctrl->queues[0]);
952 nvme_rdma_destroy_admin_queue(ctrl, false); 949 nvme_rdma_destroy_admin_queue(ctrl, false);
953requeue: 950requeue:
954 dev_info(ctrl->ctrl.device, "Failed reconnect attempt %d\n", 951 dev_info(ctrl->ctrl.device, "Failed reconnect attempt %d\n",
@@ -965,12 +962,14 @@ static void nvme_rdma_error_recovery_work(struct work_struct *work)
965 962
966 if (ctrl->ctrl.queue_count > 1) { 963 if (ctrl->ctrl.queue_count > 1) {
967 nvme_stop_queues(&ctrl->ctrl); 964 nvme_stop_queues(&ctrl->ctrl);
965 nvme_rdma_stop_io_queues(ctrl);
968 blk_mq_tagset_busy_iter(&ctrl->tag_set, 966 blk_mq_tagset_busy_iter(&ctrl->tag_set,
969 nvme_cancel_request, &ctrl->ctrl); 967 nvme_cancel_request, &ctrl->ctrl);
970 nvme_rdma_destroy_io_queues(ctrl, false); 968 nvme_rdma_destroy_io_queues(ctrl, false);
971 } 969 }
972 970
973 blk_mq_quiesce_queue(ctrl->ctrl.admin_q); 971 blk_mq_quiesce_queue(ctrl->ctrl.admin_q);
972 nvme_rdma_stop_queue(&ctrl->queues[0]);
974 blk_mq_tagset_busy_iter(&ctrl->admin_tag_set, 973 blk_mq_tagset_busy_iter(&ctrl->admin_tag_set,
975 nvme_cancel_request, &ctrl->ctrl); 974 nvme_cancel_request, &ctrl->ctrl);
976 nvme_rdma_destroy_admin_queue(ctrl, false); 975 nvme_rdma_destroy_admin_queue(ctrl, false);
@@ -1736,6 +1735,7 @@ static void nvme_rdma_shutdown_ctrl(struct nvme_rdma_ctrl *ctrl, bool shutdown)
1736{ 1735{
1737 if (ctrl->ctrl.queue_count > 1) { 1736 if (ctrl->ctrl.queue_count > 1) {
1738 nvme_stop_queues(&ctrl->ctrl); 1737 nvme_stop_queues(&ctrl->ctrl);
1738 nvme_rdma_stop_io_queues(ctrl);
1739 blk_mq_tagset_busy_iter(&ctrl->tag_set, 1739 blk_mq_tagset_busy_iter(&ctrl->tag_set,
1740 nvme_cancel_request, &ctrl->ctrl); 1740 nvme_cancel_request, &ctrl->ctrl);
1741 nvme_rdma_destroy_io_queues(ctrl, shutdown); 1741 nvme_rdma_destroy_io_queues(ctrl, shutdown);
@@ -1747,6 +1747,7 @@ static void nvme_rdma_shutdown_ctrl(struct nvme_rdma_ctrl *ctrl, bool shutdown)
1747 nvme_disable_ctrl(&ctrl->ctrl, ctrl->ctrl.cap); 1747 nvme_disable_ctrl(&ctrl->ctrl, ctrl->ctrl.cap);
1748 1748
1749 blk_mq_quiesce_queue(ctrl->ctrl.admin_q); 1749 blk_mq_quiesce_queue(ctrl->ctrl.admin_q);
1750 nvme_rdma_stop_queue(&ctrl->queues[0]);
1750 blk_mq_tagset_busy_iter(&ctrl->admin_tag_set, 1751 blk_mq_tagset_busy_iter(&ctrl->admin_tag_set,
1751 nvme_cancel_request, &ctrl->ctrl); 1752 nvme_cancel_request, &ctrl->ctrl);
1752 blk_mq_unquiesce_queue(ctrl->ctrl.admin_q); 1753 blk_mq_unquiesce_queue(ctrl->ctrl.admin_q);
@@ -1932,11 +1933,6 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
1932 goto out_free_ctrl; 1933 goto out_free_ctrl;
1933 } 1934 }
1934 1935
1935 ret = nvme_init_ctrl(&ctrl->ctrl, dev, &nvme_rdma_ctrl_ops,
1936 0 /* no quirks, we're perfect! */);
1937 if (ret)
1938 goto out_free_ctrl;
1939
1940 INIT_DELAYED_WORK(&ctrl->reconnect_work, 1936 INIT_DELAYED_WORK(&ctrl->reconnect_work,
1941 nvme_rdma_reconnect_ctrl_work); 1937 nvme_rdma_reconnect_ctrl_work);
1942 INIT_WORK(&ctrl->err_work, nvme_rdma_error_recovery_work); 1938 INIT_WORK(&ctrl->err_work, nvme_rdma_error_recovery_work);
@@ -1950,14 +1946,19 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
1950 ctrl->queues = kcalloc(ctrl->ctrl.queue_count, sizeof(*ctrl->queues), 1946 ctrl->queues = kcalloc(ctrl->ctrl.queue_count, sizeof(*ctrl->queues),
1951 GFP_KERNEL); 1947 GFP_KERNEL);
1952 if (!ctrl->queues) 1948 if (!ctrl->queues)
1953 goto out_uninit_ctrl; 1949 goto out_free_ctrl;
1950
1951 ret = nvme_init_ctrl(&ctrl->ctrl, dev, &nvme_rdma_ctrl_ops,
1952 0 /* no quirks, we're perfect! */);
1953 if (ret)
1954 goto out_kfree_queues;
1954 1955
1955 changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING); 1956 changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING);
1956 WARN_ON_ONCE(!changed); 1957 WARN_ON_ONCE(!changed);
1957 1958
1958 ret = nvme_rdma_configure_admin_queue(ctrl, true); 1959 ret = nvme_rdma_configure_admin_queue(ctrl, true);
1959 if (ret) 1960 if (ret)
1960 goto out_kfree_queues; 1961 goto out_uninit_ctrl;
1961 1962
1962 /* sanity check icdoff */ 1963 /* sanity check icdoff */
1963 if (ctrl->ctrl.icdoff) { 1964 if (ctrl->ctrl.icdoff) {
@@ -1974,20 +1975,19 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
1974 goto out_remove_admin_queue; 1975 goto out_remove_admin_queue;
1975 } 1976 }
1976 1977
1977 if (opts->queue_size > ctrl->ctrl.maxcmd) { 1978 /* only warn if argument is too large here, will clamp later */
1978 /* warn if maxcmd is lower than queue_size */
1979 dev_warn(ctrl->ctrl.device,
1980 "queue_size %zu > ctrl maxcmd %u, clamping down\n",
1981 opts->queue_size, ctrl->ctrl.maxcmd);
1982 opts->queue_size = ctrl->ctrl.maxcmd;
1983 }
1984
1985 if (opts->queue_size > ctrl->ctrl.sqsize + 1) { 1979 if (opts->queue_size > ctrl->ctrl.sqsize + 1) {
1986 /* warn if sqsize is lower than queue_size */
1987 dev_warn(ctrl->ctrl.device, 1980 dev_warn(ctrl->ctrl.device,
1988 "queue_size %zu > ctrl sqsize %u, clamping down\n", 1981 "queue_size %zu > ctrl sqsize %u, clamping down\n",
1989 opts->queue_size, ctrl->ctrl.sqsize + 1); 1982 opts->queue_size, ctrl->ctrl.sqsize + 1);
1990 opts->queue_size = ctrl->ctrl.sqsize + 1; 1983 }
1984
1985 /* warn if maxcmd is lower than sqsize+1 */
1986 if (ctrl->ctrl.sqsize + 1 > ctrl->ctrl.maxcmd) {
1987 dev_warn(ctrl->ctrl.device,
1988 "sqsize %u > ctrl maxcmd %u, clamping down\n",
1989 ctrl->ctrl.sqsize + 1, ctrl->ctrl.maxcmd);
1990 ctrl->ctrl.sqsize = ctrl->ctrl.maxcmd - 1;
1991 } 1991 }
1992 1992
1993 if (opts->nr_io_queues) { 1993 if (opts->nr_io_queues) {
@@ -2013,15 +2013,16 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
2013 return &ctrl->ctrl; 2013 return &ctrl->ctrl;
2014 2014
2015out_remove_admin_queue: 2015out_remove_admin_queue:
2016 nvme_rdma_stop_queue(&ctrl->queues[0]);
2016 nvme_rdma_destroy_admin_queue(ctrl, true); 2017 nvme_rdma_destroy_admin_queue(ctrl, true);
2017out_kfree_queues:
2018 kfree(ctrl->queues);
2019out_uninit_ctrl: 2018out_uninit_ctrl:
2020 nvme_uninit_ctrl(&ctrl->ctrl); 2019 nvme_uninit_ctrl(&ctrl->ctrl);
2021 nvme_put_ctrl(&ctrl->ctrl); 2020 nvme_put_ctrl(&ctrl->ctrl);
2022 if (ret > 0) 2021 if (ret > 0)
2023 ret = -EIO; 2022 ret = -EIO;
2024 return ERR_PTR(ret); 2023 return ERR_PTR(ret);
2024out_kfree_queues:
2025 kfree(ctrl->queues);
2025out_free_ctrl: 2026out_free_ctrl:
2026 kfree(ctrl); 2027 kfree(ctrl);
2027 return ERR_PTR(ret); 2028 return ERR_PTR(ret);
diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
index a03da764ecae..74d4b785d2da 100644
--- a/drivers/nvme/target/core.c
+++ b/drivers/nvme/target/core.c
@@ -686,6 +686,14 @@ static void nvmet_start_ctrl(struct nvmet_ctrl *ctrl)
686 } 686 }
687 687
688 ctrl->csts = NVME_CSTS_RDY; 688 ctrl->csts = NVME_CSTS_RDY;
689
690 /*
691 * Controllers that are not yet enabled should not really enforce the
692 * keep alive timeout, but we still want to track a timeout and cleanup
693 * in case a host died before it enabled the controller. Hence, simply
694 * reset the keep alive timer when the controller is enabled.
695 */
696 mod_delayed_work(system_wq, &ctrl->ka_work, ctrl->kato * HZ);
689} 697}
690 698
691static void nvmet_clear_ctrl(struct nvmet_ctrl *ctrl) 699static void nvmet_clear_ctrl(struct nvmet_ctrl *ctrl)
diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index ab2f3fead6b1..31ff03dbeb83 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -598,7 +598,7 @@ static int _generic_set_opp_regulator(const struct opp_table *opp_table,
598 } 598 }
599 599
600 /* Scaling up? Scale voltage before frequency */ 600 /* Scaling up? Scale voltage before frequency */
601 if (freq > old_freq) { 601 if (freq >= old_freq) {
602 ret = _set_opp_voltage(dev, reg, new_supply); 602 ret = _set_opp_voltage(dev, reg, new_supply);
603 if (ret) 603 if (ret)
604 goto restore_voltage; 604 goto restore_voltage;
diff --git a/drivers/pinctrl/actions/pinctrl-owl.c b/drivers/pinctrl/actions/pinctrl-owl.c
index 76243caa08c6..b5c880b50bb3 100644
--- a/drivers/pinctrl/actions/pinctrl-owl.c
+++ b/drivers/pinctrl/actions/pinctrl-owl.c
@@ -333,7 +333,7 @@ static int owl_pin_config_set(struct pinctrl_dev *pctrldev,
333 unsigned long flags; 333 unsigned long flags;
334 unsigned int param; 334 unsigned int param;
335 u32 reg, bit, width, arg; 335 u32 reg, bit, width, arg;
336 int ret, i; 336 int ret = 0, i;
337 337
338 info = &pctrl->soc->padinfo[pin]; 338 info = &pctrl->soc->padinfo[pin];
339 339
diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c
index b601039d6c69..c4aa411f5935 100644
--- a/drivers/pinctrl/devicetree.c
+++ b/drivers/pinctrl/devicetree.c
@@ -101,10 +101,11 @@ struct pinctrl_dev *of_pinctrl_get(struct device_node *np)
101} 101}
102 102
103static int dt_to_map_one_config(struct pinctrl *p, 103static int dt_to_map_one_config(struct pinctrl *p,
104 struct pinctrl_dev *pctldev, 104 struct pinctrl_dev *hog_pctldev,
105 const char *statename, 105 const char *statename,
106 struct device_node *np_config) 106 struct device_node *np_config)
107{ 107{
108 struct pinctrl_dev *pctldev = NULL;
108 struct device_node *np_pctldev; 109 struct device_node *np_pctldev;
109 const struct pinctrl_ops *ops; 110 const struct pinctrl_ops *ops;
110 int ret; 111 int ret;
@@ -123,8 +124,10 @@ static int dt_to_map_one_config(struct pinctrl *p,
123 return -EPROBE_DEFER; 124 return -EPROBE_DEFER;
124 } 125 }
125 /* If we're creating a hog we can use the passed pctldev */ 126 /* If we're creating a hog we can use the passed pctldev */
126 if (pctldev && (np_pctldev == p->dev->of_node)) 127 if (hog_pctldev && (np_pctldev == p->dev->of_node)) {
128 pctldev = hog_pctldev;
127 break; 129 break;
130 }
128 pctldev = get_pinctrl_dev_from_of_node(np_pctldev); 131 pctldev = get_pinctrl_dev_from_of_node(np_pctldev);
129 if (pctldev) 132 if (pctldev)
130 break; 133 break;
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7622.c b/drivers/pinctrl/mediatek/pinctrl-mt7622.c
index ad6da1184c9f..e3f1ab2290fc 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt7622.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt7622.c
@@ -1459,6 +1459,9 @@ static int mtk_gpio_to_irq(struct gpio_chip *chip, unsigned int offset)
1459 struct mtk_pinctrl *hw = gpiochip_get_data(chip); 1459 struct mtk_pinctrl *hw = gpiochip_get_data(chip);
1460 unsigned long eint_n; 1460 unsigned long eint_n;
1461 1461
1462 if (!hw->eint)
1463 return -ENOTSUPP;
1464
1462 eint_n = offset; 1465 eint_n = offset;
1463 1466
1464 return mtk_eint_find_irq(hw->eint, eint_n); 1467 return mtk_eint_find_irq(hw->eint, eint_n);
@@ -1471,7 +1474,8 @@ static int mtk_gpio_set_config(struct gpio_chip *chip, unsigned int offset,
1471 unsigned long eint_n; 1474 unsigned long eint_n;
1472 u32 debounce; 1475 u32 debounce;
1473 1476
1474 if (pinconf_to_config_param(config) != PIN_CONFIG_INPUT_DEBOUNCE) 1477 if (!hw->eint ||
1478 pinconf_to_config_param(config) != PIN_CONFIG_INPUT_DEBOUNCE)
1475 return -ENOTSUPP; 1479 return -ENOTSUPP;
1476 1480
1477 debounce = pinconf_to_config_argument(config); 1481 debounce = pinconf_to_config_argument(config);
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
index b3799695d8db..16ff56f93501 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
@@ -1000,11 +1000,6 @@ static int mtk_eint_init(struct mtk_pinctrl *pctl, struct platform_device *pdev)
1000 return -ENOMEM; 1000 return -ENOMEM;
1001 1001
1002 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1002 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1003 if (!res) {
1004 dev_err(&pdev->dev, "Unable to get eint resource\n");
1005 return -ENODEV;
1006 }
1007
1008 pctl->eint->base = devm_ioremap_resource(&pdev->dev, res); 1003 pctl->eint->base = devm_ioremap_resource(&pdev->dev, res);
1009 if (IS_ERR(pctl->eint->base)) 1004 if (IS_ERR(pctl->eint->base))
1010 return PTR_ERR(pctl->eint->base); 1005 return PTR_ERR(pctl->eint->base);
diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
index b3153c095199..e5647dac0818 100644
--- a/drivers/pinctrl/pinctrl-single.c
+++ b/drivers/pinctrl/pinctrl-single.c
@@ -1590,8 +1590,11 @@ static int pcs_save_context(struct pcs_device *pcs)
1590 1590
1591 mux_bytes = pcs->width / BITS_PER_BYTE; 1591 mux_bytes = pcs->width / BITS_PER_BYTE;
1592 1592
1593 if (!pcs->saved_vals) 1593 if (!pcs->saved_vals) {
1594 pcs->saved_vals = devm_kzalloc(pcs->dev, pcs->size, GFP_ATOMIC); 1594 pcs->saved_vals = devm_kzalloc(pcs->dev, pcs->size, GFP_ATOMIC);
1595 if (!pcs->saved_vals)
1596 return -ENOMEM;
1597 }
1595 1598
1596 switch (pcs->width) { 1599 switch (pcs->width) {
1597 case 64: 1600 case 64:
@@ -1651,8 +1654,13 @@ static int pinctrl_single_suspend(struct platform_device *pdev,
1651 if (!pcs) 1654 if (!pcs)
1652 return -EINVAL; 1655 return -EINVAL;
1653 1656
1654 if (pcs->flags & PCS_CONTEXT_LOSS_OFF) 1657 if (pcs->flags & PCS_CONTEXT_LOSS_OFF) {
1655 pcs_save_context(pcs); 1658 int ret;
1659
1660 ret = pcs_save_context(pcs);
1661 if (ret < 0)
1662 return ret;
1663 }
1656 1664
1657 return pinctrl_force_sleep(pcs->pctl); 1665 return pinctrl_force_sleep(pcs->pctl);
1658} 1666}
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
index 1da3d71e9f61..13948102ca29 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
@@ -3592,7 +3592,7 @@ fc_bsg_job_timeout(struct request *req)
3592 3592
3593 /* the blk_end_sync_io() doesn't check the error */ 3593 /* the blk_end_sync_io() doesn't check the error */
3594 if (inflight) 3594 if (inflight)
3595 blk_mq_complete_request(req); 3595 __blk_complete_request(req);
3596 return BLK_EH_DONE; 3596 return BLK_EH_DONE;
3597} 3597}
3598 3598
diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c
index 36f59a1be7e9..61389bdc7926 100644
--- a/drivers/scsi/xen-scsifront.c
+++ b/drivers/scsi/xen-scsifront.c
@@ -654,10 +654,17 @@ static int scsifront_dev_reset_handler(struct scsi_cmnd *sc)
654static int scsifront_sdev_configure(struct scsi_device *sdev) 654static int scsifront_sdev_configure(struct scsi_device *sdev)
655{ 655{
656 struct vscsifrnt_info *info = shost_priv(sdev->host); 656 struct vscsifrnt_info *info = shost_priv(sdev->host);
657 int err;
657 658
658 if (info && current == info->curr) 659 if (info && current == info->curr) {
659 xenbus_printf(XBT_NIL, info->dev->nodename, 660 err = xenbus_printf(XBT_NIL, info->dev->nodename,
660 info->dev_state_path, "%d", XenbusStateConnected); 661 info->dev_state_path, "%d", XenbusStateConnected);
662 if (err) {
663 xenbus_dev_error(info->dev, err,
664 "%s: writing dev_state_path", __func__);
665 return err;
666 }
667 }
661 668
662 return 0; 669 return 0;
663} 670}
@@ -665,10 +672,15 @@ static int scsifront_sdev_configure(struct scsi_device *sdev)
665static void scsifront_sdev_destroy(struct scsi_device *sdev) 672static void scsifront_sdev_destroy(struct scsi_device *sdev)
666{ 673{
667 struct vscsifrnt_info *info = shost_priv(sdev->host); 674 struct vscsifrnt_info *info = shost_priv(sdev->host);
675 int err;
668 676
669 if (info && current == info->curr) 677 if (info && current == info->curr) {
670 xenbus_printf(XBT_NIL, info->dev->nodename, 678 err = xenbus_printf(XBT_NIL, info->dev->nodename,
671 info->dev_state_path, "%d", XenbusStateClosed); 679 info->dev_state_path, "%d", XenbusStateClosed);
680 if (err)
681 xenbus_dev_error(info->dev, err,
682 "%s: writing dev_state_path", __func__);
683 }
672} 684}
673 685
674static struct scsi_host_template scsifront_sht = { 686static struct scsi_host_template scsifront_sht = {
@@ -1003,9 +1015,12 @@ static void scsifront_do_lun_hotplug(struct vscsifrnt_info *info, int op)
1003 1015
1004 if (scsi_add_device(info->host, chn, tgt, lun)) { 1016 if (scsi_add_device(info->host, chn, tgt, lun)) {
1005 dev_err(&dev->dev, "scsi_add_device\n"); 1017 dev_err(&dev->dev, "scsi_add_device\n");
1006 xenbus_printf(XBT_NIL, dev->nodename, 1018 err = xenbus_printf(XBT_NIL, dev->nodename,
1007 info->dev_state_path, 1019 info->dev_state_path,
1008 "%d", XenbusStateClosed); 1020 "%d", XenbusStateClosed);
1021 if (err)
1022 xenbus_dev_error(dev, err,
1023 "%s: writing dev_state_path", __func__);
1009 } 1024 }
1010 break; 1025 break;
1011 case VSCSIFRONT_OP_DEL_LUN: 1026 case VSCSIFRONT_OP_DEL_LUN:
@@ -1019,10 +1034,14 @@ static void scsifront_do_lun_hotplug(struct vscsifrnt_info *info, int op)
1019 } 1034 }
1020 break; 1035 break;
1021 case VSCSIFRONT_OP_READD_LUN: 1036 case VSCSIFRONT_OP_READD_LUN:
1022 if (device_state == XenbusStateConnected) 1037 if (device_state == XenbusStateConnected) {
1023 xenbus_printf(XBT_NIL, dev->nodename, 1038 err = xenbus_printf(XBT_NIL, dev->nodename,
1024 info->dev_state_path, 1039 info->dev_state_path,
1025 "%d", XenbusStateConnected); 1040 "%d", XenbusStateConnected);
1041 if (err)
1042 xenbus_dev_error(dev, err,
1043 "%s: writing dev_state_path", __func__);
1044 }
1026 break; 1045 break;
1027 default: 1046 default:
1028 break; 1047 break;
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 686dc670fd29..29756d88799b 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -1226,7 +1226,8 @@ err_used:
1226 if (ubufs) 1226 if (ubufs)
1227 vhost_net_ubuf_put_wait_and_free(ubufs); 1227 vhost_net_ubuf_put_wait_and_free(ubufs);
1228err_ubufs: 1228err_ubufs:
1229 sockfd_put(sock); 1229 if (sock)
1230 sockfd_put(sock);
1230err_vq: 1231err_vq:
1231 mutex_unlock(&vq->mutex); 1232 mutex_unlock(&vq->mutex);
1232err: 1233err:
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
index 451e833f5931..48b154276179 100644
--- a/drivers/xen/Makefile
+++ b/drivers/xen/Makefile
@@ -41,4 +41,4 @@ obj-$(CONFIG_XEN_PVCALLS_FRONTEND) += pvcalls-front.o
41xen-evtchn-y := evtchn.o 41xen-evtchn-y := evtchn.o
42xen-gntdev-y := gntdev.o 42xen-gntdev-y := gntdev.o
43xen-gntalloc-y := gntalloc.o 43xen-gntalloc-y := gntalloc.o
44xen-privcmd-y := privcmd.o 44xen-privcmd-y := privcmd.o privcmd-buf.o
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
index 762378f1811c..08e4af04d6f2 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -628,8 +628,6 @@ static void __unbind_from_irq(unsigned int irq)
628 xen_irq_info_cleanup(info); 628 xen_irq_info_cleanup(info);
629 } 629 }
630 630
631 BUG_ON(info_for_irq(irq)->type == IRQT_UNBOUND);
632
633 xen_free_irq(irq); 631 xen_free_irq(irq);
634} 632}
635 633
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index 2473b0a9e6e4..ba9f3eec2bd0 100644
--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -799,7 +799,7 @@ int gnttab_alloc_pages(int nr_pages, struct page **pages)
799 799
800 return 0; 800 return 0;
801} 801}
802EXPORT_SYMBOL(gnttab_alloc_pages); 802EXPORT_SYMBOL_GPL(gnttab_alloc_pages);
803 803
804/** 804/**
805 * gnttab_free_pages - free pages allocated by gnttab_alloc_pages() 805 * gnttab_free_pages - free pages allocated by gnttab_alloc_pages()
@@ -820,7 +820,7 @@ void gnttab_free_pages(int nr_pages, struct page **pages)
820 } 820 }
821 free_xenballooned_pages(nr_pages, pages); 821 free_xenballooned_pages(nr_pages, pages);
822} 822}
823EXPORT_SYMBOL(gnttab_free_pages); 823EXPORT_SYMBOL_GPL(gnttab_free_pages);
824 824
825/* Handling of paged out grant targets (GNTST_eagain) */ 825/* Handling of paged out grant targets (GNTST_eagain) */
826#define MAX_DELAY 256 826#define MAX_DELAY 256
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
index 8835065029d3..c93d8ef8df34 100644
--- a/drivers/xen/manage.c
+++ b/drivers/xen/manage.c
@@ -289,8 +289,15 @@ static void sysrq_handler(struct xenbus_watch *watch, const char *path,
289 return; 289 return;
290 } 290 }
291 291
292 if (sysrq_key != '\0') 292 if (sysrq_key != '\0') {
293 xenbus_printf(xbt, "control", "sysrq", "%c", '\0'); 293 err = xenbus_printf(xbt, "control", "sysrq", "%c", '\0');
294 if (err) {
295 pr_err("%s: Error %d writing sysrq in control/sysrq\n",
296 __func__, err);
297 xenbus_transaction_end(xbt, 1);
298 return;
299 }
300 }
294 301
295 err = xenbus_transaction_end(xbt, 0); 302 err = xenbus_transaction_end(xbt, 0);
296 if (err == -EAGAIN) 303 if (err == -EAGAIN)
@@ -342,7 +349,12 @@ static int setup_shutdown_watcher(void)
342 continue; 349 continue;
343 snprintf(node, FEATURE_PATH_SIZE, "feature-%s", 350 snprintf(node, FEATURE_PATH_SIZE, "feature-%s",
344 shutdown_handlers[idx].command); 351 shutdown_handlers[idx].command);
345 xenbus_printf(XBT_NIL, "control", node, "%u", 1); 352 err = xenbus_printf(XBT_NIL, "control", node, "%u", 1);
353 if (err) {
354 pr_err("%s: Error %d writing %s\n", __func__,
355 err, node);
356 return err;
357 }
346 } 358 }
347 359
348 return 0; 360 return 0;
diff --git a/drivers/xen/privcmd-buf.c b/drivers/xen/privcmd-buf.c
new file mode 100644
index 000000000000..df1ed37c3269
--- /dev/null
+++ b/drivers/xen/privcmd-buf.c
@@ -0,0 +1,210 @@
1// SPDX-License-Identifier: GPL-2.0 OR MIT
2
3/******************************************************************************
4 * privcmd-buf.c
5 *
6 * Mmap of hypercall buffers.
7 *
8 * Copyright (c) 2018 Juergen Gross
9 */
10
11#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
12
13#include <linux/kernel.h>
14#include <linux/module.h>
15#include <linux/list.h>
16#include <linux/miscdevice.h>
17#include <linux/mm.h>
18#include <linux/slab.h>
19
20#include "privcmd.h"
21
22MODULE_LICENSE("GPL");
23
24static unsigned int limit = 64;
25module_param(limit, uint, 0644);
26MODULE_PARM_DESC(limit, "Maximum number of pages that may be allocated by "
27 "the privcmd-buf device per open file");
28
29struct privcmd_buf_private {
30 struct mutex lock;
31 struct list_head list;
32 unsigned int allocated;
33};
34
35struct privcmd_buf_vma_private {
36 struct privcmd_buf_private *file_priv;
37 struct list_head list;
38 unsigned int users;
39 unsigned int n_pages;
40 struct page *pages[];
41};
42
43static int privcmd_buf_open(struct inode *ino, struct file *file)
44{
45 struct privcmd_buf_private *file_priv;
46
47 file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
48 if (!file_priv)
49 return -ENOMEM;
50
51 mutex_init(&file_priv->lock);
52 INIT_LIST_HEAD(&file_priv->list);
53
54 file->private_data = file_priv;
55
56 return 0;
57}
58
59static void privcmd_buf_vmapriv_free(struct privcmd_buf_vma_private *vma_priv)
60{
61 unsigned int i;
62
63 vma_priv->file_priv->allocated -= vma_priv->n_pages;
64
65 list_del(&vma_priv->list);
66
67 for (i = 0; i < vma_priv->n_pages; i++)
68 if (vma_priv->pages[i])
69 __free_page(vma_priv->pages[i]);
70
71 kfree(vma_priv);
72}
73
74static int privcmd_buf_release(struct inode *ino, struct file *file)
75{
76 struct privcmd_buf_private *file_priv = file->private_data;
77 struct privcmd_buf_vma_private *vma_priv;
78
79 mutex_lock(&file_priv->lock);
80
81 while (!list_empty(&file_priv->list)) {
82 vma_priv = list_first_entry(&file_priv->list,
83 struct privcmd_buf_vma_private,
84 list);
85 privcmd_buf_vmapriv_free(vma_priv);
86 }
87
88 mutex_unlock(&file_priv->lock);
89
90 kfree(file_priv);
91
92 return 0;
93}
94
95static void privcmd_buf_vma_open(struct vm_area_struct *vma)
96{
97 struct privcmd_buf_vma_private *vma_priv = vma->vm_private_data;
98
99 if (!vma_priv)
100 return;
101
102 mutex_lock(&vma_priv->file_priv->lock);
103 vma_priv->users++;
104 mutex_unlock(&vma_priv->file_priv->lock);
105}
106
107static void privcmd_buf_vma_close(struct vm_area_struct *vma)
108{
109 struct privcmd_buf_vma_private *vma_priv = vma->vm_private_data;
110 struct privcmd_buf_private *file_priv;
111
112 if (!vma_priv)
113 return;
114
115 file_priv = vma_priv->file_priv;
116
117 mutex_lock(&file_priv->lock);
118
119 vma_priv->users--;
120 if (!vma_priv->users)
121 privcmd_buf_vmapriv_free(vma_priv);
122
123 mutex_unlock(&file_priv->lock);
124}
125
126static vm_fault_t privcmd_buf_vma_fault(struct vm_fault *vmf)
127{
128 pr_debug("fault: vma=%p %lx-%lx, pgoff=%lx, uv=%p\n",
129 vmf->vma, vmf->vma->vm_start, vmf->vma->vm_end,
130 vmf->pgoff, (void *)vmf->address);
131
132 return VM_FAULT_SIGBUS;
133}
134
135static const struct vm_operations_struct privcmd_buf_vm_ops = {
136 .open = privcmd_buf_vma_open,
137 .close = privcmd_buf_vma_close,
138 .fault = privcmd_buf_vma_fault,
139};
140
141static int privcmd_buf_mmap(struct file *file, struct vm_area_struct *vma)
142{
143 struct privcmd_buf_private *file_priv = file->private_data;
144 struct privcmd_buf_vma_private *vma_priv;
145 unsigned long count = vma_pages(vma);
146 unsigned int i;
147 int ret = 0;
148
149 if (!(vma->vm_flags & VM_SHARED) || count > limit ||
150 file_priv->allocated + count > limit)
151 return -EINVAL;
152
153 vma_priv = kzalloc(sizeof(*vma_priv) + count * sizeof(void *),
154 GFP_KERNEL);
155 if (!vma_priv)
156 return -ENOMEM;
157
158 vma_priv->n_pages = count;
159 count = 0;
160 for (i = 0; i < vma_priv->n_pages; i++) {
161 vma_priv->pages[i] = alloc_page(GFP_KERNEL | __GFP_ZERO);
162 if (!vma_priv->pages[i])
163 break;
164 count++;
165 }
166
167 mutex_lock(&file_priv->lock);
168
169 file_priv->allocated += count;
170
171 vma_priv->file_priv = file_priv;
172 vma_priv->users = 1;
173
174 vma->vm_flags |= VM_IO | VM_DONTEXPAND;
175 vma->vm_ops = &privcmd_buf_vm_ops;
176 vma->vm_private_data = vma_priv;
177
178 list_add(&vma_priv->list, &file_priv->list);
179
180 if (vma_priv->n_pages != count)
181 ret = -ENOMEM;
182 else
183 for (i = 0; i < vma_priv->n_pages; i++) {
184 ret = vm_insert_page(vma, vma->vm_start + i * PAGE_SIZE,
185 vma_priv->pages[i]);
186 if (ret)
187 break;
188 }
189
190 if (ret)
191 privcmd_buf_vmapriv_free(vma_priv);
192
193 mutex_unlock(&file_priv->lock);
194
195 return ret;
196}
197
198const struct file_operations xen_privcmdbuf_fops = {
199 .owner = THIS_MODULE,
200 .open = privcmd_buf_open,
201 .release = privcmd_buf_release,
202 .mmap = privcmd_buf_mmap,
203};
204EXPORT_SYMBOL_GPL(xen_privcmdbuf_fops);
205
206struct miscdevice xen_privcmdbuf_dev = {
207 .minor = MISC_DYNAMIC_MINOR,
208 .name = "xen/hypercall",
209 .fops = &xen_privcmdbuf_fops,
210};
diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
index 8ae0349d9f0a..7e6e682104dc 100644
--- a/drivers/xen/privcmd.c
+++ b/drivers/xen/privcmd.c
@@ -1007,12 +1007,21 @@ static int __init privcmd_init(void)
1007 pr_err("Could not register Xen privcmd device\n"); 1007 pr_err("Could not register Xen privcmd device\n");
1008 return err; 1008 return err;
1009 } 1009 }
1010
1011 err = misc_register(&xen_privcmdbuf_dev);
1012 if (err != 0) {
1013 pr_err("Could not register Xen hypercall-buf device\n");
1014 misc_deregister(&privcmd_dev);
1015 return err;
1016 }
1017
1010 return 0; 1018 return 0;
1011} 1019}
1012 1020
1013static void __exit privcmd_exit(void) 1021static void __exit privcmd_exit(void)
1014{ 1022{
1015 misc_deregister(&privcmd_dev); 1023 misc_deregister(&privcmd_dev);
1024 misc_deregister(&xen_privcmdbuf_dev);
1016} 1025}
1017 1026
1018module_init(privcmd_init); 1027module_init(privcmd_init);
diff --git a/drivers/xen/privcmd.h b/drivers/xen/privcmd.h
index 14facaeed36f..0dd9f8f67ee3 100644
--- a/drivers/xen/privcmd.h
+++ b/drivers/xen/privcmd.h
@@ -1,3 +1,6 @@
1#include <linux/fs.h> 1#include <linux/fs.h>
2 2
3extern const struct file_operations xen_privcmd_fops; 3extern const struct file_operations xen_privcmd_fops;
4extern const struct file_operations xen_privcmdbuf_fops;
5
6extern struct miscdevice xen_privcmdbuf_dev;
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c
index 7bc88fd43cfc..e2f3e8b0fba9 100644
--- a/drivers/xen/xen-scsiback.c
+++ b/drivers/xen/xen-scsiback.c
@@ -1012,6 +1012,7 @@ static void scsiback_do_add_lun(struct vscsibk_info *info, const char *state,
1012{ 1012{
1013 struct v2p_entry *entry; 1013 struct v2p_entry *entry;
1014 unsigned long flags; 1014 unsigned long flags;
1015 int err;
1015 1016
1016 if (try) { 1017 if (try) {
1017 spin_lock_irqsave(&info->v2p_lock, flags); 1018 spin_lock_irqsave(&info->v2p_lock, flags);
@@ -1027,8 +1028,11 @@ static void scsiback_do_add_lun(struct vscsibk_info *info, const char *state,
1027 scsiback_del_translation_entry(info, vir); 1028 scsiback_del_translation_entry(info, vir);
1028 } 1029 }
1029 } else if (!try) { 1030 } else if (!try) {
1030 xenbus_printf(XBT_NIL, info->dev->nodename, state, 1031 err = xenbus_printf(XBT_NIL, info->dev->nodename, state,
1031 "%d", XenbusStateClosed); 1032 "%d", XenbusStateClosed);
1033 if (err)
1034 xenbus_dev_error(info->dev, err,
1035 "%s: writing %s", __func__, state);
1032 } 1036 }
1033} 1037}
1034 1038
@@ -1067,8 +1071,11 @@ static void scsiback_do_1lun_hotplug(struct vscsibk_info *info, int op,
1067 snprintf(str, sizeof(str), "vscsi-devs/%s/p-dev", ent); 1071 snprintf(str, sizeof(str), "vscsi-devs/%s/p-dev", ent);
1068 val = xenbus_read(XBT_NIL, dev->nodename, str, NULL); 1072 val = xenbus_read(XBT_NIL, dev->nodename, str, NULL);
1069 if (IS_ERR(val)) { 1073 if (IS_ERR(val)) {
1070 xenbus_printf(XBT_NIL, dev->nodename, state, 1074 err = xenbus_printf(XBT_NIL, dev->nodename, state,
1071 "%d", XenbusStateClosed); 1075 "%d", XenbusStateClosed);
1076 if (err)
1077 xenbus_dev_error(info->dev, err,
1078 "%s: writing %s", __func__, state);
1072 return; 1079 return;
1073 } 1080 }
1074 strlcpy(phy, val, VSCSI_NAMELEN); 1081 strlcpy(phy, val, VSCSI_NAMELEN);
@@ -1079,8 +1086,11 @@ static void scsiback_do_1lun_hotplug(struct vscsibk_info *info, int op,
1079 err = xenbus_scanf(XBT_NIL, dev->nodename, str, "%u:%u:%u:%u", 1086 err = xenbus_scanf(XBT_NIL, dev->nodename, str, "%u:%u:%u:%u",
1080 &vir.hst, &vir.chn, &vir.tgt, &vir.lun); 1087 &vir.hst, &vir.chn, &vir.tgt, &vir.lun);
1081 if (XENBUS_EXIST_ERR(err)) { 1088 if (XENBUS_EXIST_ERR(err)) {
1082 xenbus_printf(XBT_NIL, dev->nodename, state, 1089 err = xenbus_printf(XBT_NIL, dev->nodename, state,
1083 "%d", XenbusStateClosed); 1090 "%d", XenbusStateClosed);
1091 if (err)
1092 xenbus_dev_error(info->dev, err,
1093 "%s: writing %s", __func__, state);
1084 return; 1094 return;
1085 } 1095 }
1086 1096
diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h
index cc40802ddfa8..00e759f05161 100644
--- a/fs/ext2/ext2.h
+++ b/fs/ext2/ext2.h
@@ -748,7 +748,6 @@ extern void ext2_free_blocks (struct inode *, unsigned long,
748 unsigned long); 748 unsigned long);
749extern unsigned long ext2_count_free_blocks (struct super_block *); 749extern unsigned long ext2_count_free_blocks (struct super_block *);
750extern unsigned long ext2_count_dirs (struct super_block *); 750extern unsigned long ext2_count_dirs (struct super_block *);
751extern void ext2_check_blocks_bitmap (struct super_block *);
752extern struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb, 751extern struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
753 unsigned int block_group, 752 unsigned int block_group,
754 struct buffer_head ** bh); 753 struct buffer_head ** bh);
@@ -771,7 +770,6 @@ extern void ext2_set_link(struct inode *, struct ext2_dir_entry_2 *, struct page
771extern struct inode * ext2_new_inode (struct inode *, umode_t, const struct qstr *); 770extern struct inode * ext2_new_inode (struct inode *, umode_t, const struct qstr *);
772extern void ext2_free_inode (struct inode *); 771extern void ext2_free_inode (struct inode *);
773extern unsigned long ext2_count_free_inodes (struct super_block *); 772extern unsigned long ext2_count_free_inodes (struct super_block *);
774extern void ext2_check_inodes_bitmap (struct super_block *);
775extern unsigned long ext2_count_free (struct buffer_head *, unsigned); 773extern unsigned long ext2_count_free (struct buffer_head *, unsigned);
776 774
777/* inode.c */ 775/* inode.c */
diff --git a/fs/ext2/super.c b/fs/ext2/super.c
index 25ab1274090f..8ff53f8da3bc 100644
--- a/fs/ext2/super.c
+++ b/fs/ext2/super.c
@@ -557,6 +557,9 @@ static int parse_options(char *options, struct super_block *sb,
557 set_opt (opts->s_mount_opt, NO_UID32); 557 set_opt (opts->s_mount_opt, NO_UID32);
558 break; 558 break;
559 case Opt_nocheck: 559 case Opt_nocheck:
560 ext2_msg(sb, KERN_WARNING,
561 "Option nocheck/check=none is deprecated and"
562 " will be removed in June 2020.");
560 clear_opt (opts->s_mount_opt, CHECK); 563 clear_opt (opts->s_mount_opt, CHECK);
561 break; 564 break;
562 case Opt_debug: 565 case Opt_debug:
@@ -1335,9 +1338,6 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
1335 new_opts.s_resgid = sbi->s_resgid; 1338 new_opts.s_resgid = sbi->s_resgid;
1336 spin_unlock(&sbi->s_lock); 1339 spin_unlock(&sbi->s_lock);
1337 1340
1338 /*
1339 * Allow the "check" option to be passed as a remount option.
1340 */
1341 if (!parse_options(data, sb, &new_opts)) 1341 if (!parse_options(data, sb, &new_opts))
1342 return -EINVAL; 1342 return -EINVAL;
1343 1343
diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
index bbd0465535eb..f033f3a69a3b 100644
--- a/fs/nfs/delegation.c
+++ b/fs/nfs/delegation.c
@@ -883,8 +883,10 @@ struct inode *nfs_delegation_find_inode(struct nfs_client *clp,
883 rcu_read_lock(); 883 rcu_read_lock();
884 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { 884 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) {
885 res = nfs_delegation_find_inode_server(server, fhandle); 885 res = nfs_delegation_find_inode_server(server, fhandle);
886 if (res != ERR_PTR(-ENOENT)) 886 if (res != ERR_PTR(-ENOENT)) {
887 rcu_read_unlock();
887 return res; 888 return res;
889 }
888 } 890 }
889 rcu_read_unlock(); 891 rcu_read_unlock();
890 return ERR_PTR(-ENOENT); 892 return ERR_PTR(-ENOENT);
diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
index d4a07acad598..8f003792ccde 100644
--- a/fs/nfs/flexfilelayout/flexfilelayout.c
+++ b/fs/nfs/flexfilelayout/flexfilelayout.c
@@ -1243,17 +1243,18 @@ static int ff_layout_read_done_cb(struct rpc_task *task,
1243 hdr->ds_clp, hdr->lseg, 1243 hdr->ds_clp, hdr->lseg,
1244 hdr->pgio_mirror_idx); 1244 hdr->pgio_mirror_idx);
1245 1245
1246 clear_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags);
1247 clear_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags);
1246 switch (err) { 1248 switch (err) {
1247 case -NFS4ERR_RESET_TO_PNFS: 1249 case -NFS4ERR_RESET_TO_PNFS:
1248 if (ff_layout_choose_best_ds_for_read(hdr->lseg, 1250 if (ff_layout_choose_best_ds_for_read(hdr->lseg,
1249 hdr->pgio_mirror_idx + 1, 1251 hdr->pgio_mirror_idx + 1,
1250 &hdr->pgio_mirror_idx)) 1252 &hdr->pgio_mirror_idx))
1251 goto out_eagain; 1253 goto out_eagain;
1252 ff_layout_read_record_layoutstats_done(task, hdr); 1254 set_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags);
1253 pnfs_read_resend_pnfs(hdr);
1254 return task->tk_status; 1255 return task->tk_status;
1255 case -NFS4ERR_RESET_TO_MDS: 1256 case -NFS4ERR_RESET_TO_MDS:
1256 ff_layout_reset_read(hdr); 1257 set_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags);
1257 return task->tk_status; 1258 return task->tk_status;
1258 case -EAGAIN: 1259 case -EAGAIN:
1259 goto out_eagain; 1260 goto out_eagain;
@@ -1403,6 +1404,10 @@ static void ff_layout_read_release(void *data)
1403 struct nfs_pgio_header *hdr = data; 1404 struct nfs_pgio_header *hdr = data;
1404 1405
1405 ff_layout_read_record_layoutstats_done(&hdr->task, hdr); 1406 ff_layout_read_record_layoutstats_done(&hdr->task, hdr);
1407 if (test_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags))
1408 pnfs_read_resend_pnfs(hdr);
1409 else if (test_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags))
1410 ff_layout_reset_read(hdr);
1406 pnfs_generic_rw_release(data); 1411 pnfs_generic_rw_release(data);
1407} 1412}
1408 1413
@@ -1423,12 +1428,14 @@ static int ff_layout_write_done_cb(struct rpc_task *task,
1423 hdr->ds_clp, hdr->lseg, 1428 hdr->ds_clp, hdr->lseg,
1424 hdr->pgio_mirror_idx); 1429 hdr->pgio_mirror_idx);
1425 1430
1431 clear_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags);
1432 clear_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags);
1426 switch (err) { 1433 switch (err) {
1427 case -NFS4ERR_RESET_TO_PNFS: 1434 case -NFS4ERR_RESET_TO_PNFS:
1428 ff_layout_reset_write(hdr, true); 1435 set_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags);
1429 return task->tk_status; 1436 return task->tk_status;
1430 case -NFS4ERR_RESET_TO_MDS: 1437 case -NFS4ERR_RESET_TO_MDS:
1431 ff_layout_reset_write(hdr, false); 1438 set_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags);
1432 return task->tk_status; 1439 return task->tk_status;
1433 case -EAGAIN: 1440 case -EAGAIN:
1434 return -EAGAIN; 1441 return -EAGAIN;
@@ -1575,6 +1582,10 @@ static void ff_layout_write_release(void *data)
1575 struct nfs_pgio_header *hdr = data; 1582 struct nfs_pgio_header *hdr = data;
1576 1583
1577 ff_layout_write_record_layoutstats_done(&hdr->task, hdr); 1584 ff_layout_write_record_layoutstats_done(&hdr->task, hdr);
1585 if (test_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags))
1586 ff_layout_reset_write(hdr, true);
1587 else if (test_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags))
1588 ff_layout_reset_write(hdr, false);
1578 pnfs_generic_rw_release(data); 1589 pnfs_generic_rw_release(data);
1579} 1590}
1580 1591
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index ed45090e4df6..6dd146885da9 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -3294,6 +3294,7 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
3294 struct nfs4_closedata *calldata = data; 3294 struct nfs4_closedata *calldata = data;
3295 struct nfs4_state *state = calldata->state; 3295 struct nfs4_state *state = calldata->state;
3296 struct inode *inode = calldata->inode; 3296 struct inode *inode = calldata->inode;
3297 struct pnfs_layout_hdr *lo;
3297 bool is_rdonly, is_wronly, is_rdwr; 3298 bool is_rdonly, is_wronly, is_rdwr;
3298 int call_close = 0; 3299 int call_close = 0;
3299 3300
@@ -3337,6 +3338,12 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
3337 goto out_wait; 3338 goto out_wait;
3338 } 3339 }
3339 3340
3341 lo = calldata->arg.lr_args ? calldata->arg.lr_args->layout : NULL;
3342 if (lo && !pnfs_layout_is_valid(lo)) {
3343 calldata->arg.lr_args = NULL;
3344 calldata->res.lr_res = NULL;
3345 }
3346
3340 if (calldata->arg.fmode == 0) 3347 if (calldata->arg.fmode == 0)
3341 task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CLOSE]; 3348 task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CLOSE];
3342 3349
@@ -5972,12 +5979,19 @@ static void nfs4_delegreturn_release(void *calldata)
5972static void nfs4_delegreturn_prepare(struct rpc_task *task, void *data) 5979static void nfs4_delegreturn_prepare(struct rpc_task *task, void *data)
5973{ 5980{
5974 struct nfs4_delegreturndata *d_data; 5981 struct nfs4_delegreturndata *d_data;
5982 struct pnfs_layout_hdr *lo;
5975 5983
5976 d_data = (struct nfs4_delegreturndata *)data; 5984 d_data = (struct nfs4_delegreturndata *)data;
5977 5985
5978 if (!d_data->lr.roc && nfs4_wait_on_layoutreturn(d_data->inode, task)) 5986 if (!d_data->lr.roc && nfs4_wait_on_layoutreturn(d_data->inode, task))
5979 return; 5987 return;
5980 5988
5989 lo = d_data->args.lr_args ? d_data->args.lr_args->layout : NULL;
5990 if (lo && !pnfs_layout_is_valid(lo)) {
5991 d_data->args.lr_args = NULL;
5992 d_data->res.lr_res = NULL;
5993 }
5994
5981 nfs4_setup_sequence(d_data->res.server->nfs_client, 5995 nfs4_setup_sequence(d_data->res.server->nfs_client,
5982 &d_data->args.seq_args, 5996 &d_data->args.seq_args,
5983 &d_data->res.seq_res, 5997 &d_data->res.seq_res,
@@ -8650,6 +8664,8 @@ nfs4_layoutget_handle_exception(struct rpc_task *task,
8650 8664
8651 dprintk("--> %s tk_status => %d\n", __func__, -task->tk_status); 8665 dprintk("--> %s tk_status => %d\n", __func__, -task->tk_status);
8652 8666
8667 nfs4_sequence_free_slot(&lgp->res.seq_res);
8668
8653 switch (nfs4err) { 8669 switch (nfs4err) {
8654 case 0: 8670 case 0:
8655 goto out; 8671 goto out;
@@ -8714,7 +8730,6 @@ nfs4_layoutget_handle_exception(struct rpc_task *task,
8714 goto out; 8730 goto out;
8715 } 8731 }
8716 8732
8717 nfs4_sequence_free_slot(&lgp->res.seq_res);
8718 err = nfs4_handle_exception(server, nfs4err, exception); 8733 err = nfs4_handle_exception(server, nfs4err, exception);
8719 if (!status) { 8734 if (!status) {
8720 if (exception->retry) 8735 if (exception->retry)
@@ -8786,20 +8801,22 @@ nfs4_proc_layoutget(struct nfs4_layoutget *lgp, long *timeout)
8786 if (IS_ERR(task)) 8801 if (IS_ERR(task))
8787 return ERR_CAST(task); 8802 return ERR_CAST(task);
8788 status = rpc_wait_for_completion_task(task); 8803 status = rpc_wait_for_completion_task(task);
8789 if (status == 0) { 8804 if (status != 0)
8805 goto out;
8806
8807 /* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */
8808 if (task->tk_status < 0 || lgp->res.layoutp->len == 0) {
8790 status = nfs4_layoutget_handle_exception(task, lgp, &exception); 8809 status = nfs4_layoutget_handle_exception(task, lgp, &exception);
8791 *timeout = exception.timeout; 8810 *timeout = exception.timeout;
8792 } 8811 } else
8793 8812 lseg = pnfs_layout_process(lgp);
8813out:
8794 trace_nfs4_layoutget(lgp->args.ctx, 8814 trace_nfs4_layoutget(lgp->args.ctx,
8795 &lgp->args.range, 8815 &lgp->args.range,
8796 &lgp->res.range, 8816 &lgp->res.range,
8797 &lgp->res.stateid, 8817 &lgp->res.stateid,
8798 status); 8818 status);
8799 8819
8800 /* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */
8801 if (status == 0 && lgp->res.layoutp->len)
8802 lseg = pnfs_layout_process(lgp);
8803 rpc_put_task(task); 8820 rpc_put_task(task);
8804 dprintk("<-- %s status=%d\n", __func__, status); 8821 dprintk("<-- %s status=%d\n", __func__, status);
8805 if (status) 8822 if (status)
@@ -8817,6 +8834,8 @@ nfs4_layoutreturn_prepare(struct rpc_task *task, void *calldata)
8817 &lrp->args.seq_args, 8834 &lrp->args.seq_args,
8818 &lrp->res.seq_res, 8835 &lrp->res.seq_res,
8819 task); 8836 task);
8837 if (!pnfs_layout_is_valid(lrp->args.layout))
8838 rpc_exit(task, 0);
8820} 8839}
8821 8840
8822static void nfs4_layoutreturn_done(struct rpc_task *task, void *calldata) 8841static void nfs4_layoutreturn_done(struct rpc_task *task, void *calldata)
diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
index a8f5e6b16749..3fe81424337d 100644
--- a/fs/nfs/pnfs.h
+++ b/fs/nfs/pnfs.h
@@ -801,6 +801,11 @@ static inline void nfs4_lgopen_release(struct nfs4_layoutget *lgp)
801{ 801{
802} 802}
803 803
804static inline bool pnfs_layout_is_valid(const struct pnfs_layout_hdr *lo)
805{
806 return false;
807}
808
804#endif /* CONFIG_NFS_V4_1 */ 809#endif /* CONFIG_NFS_V4_1 */
805 810
806#if IS_ENABLED(CONFIG_NFS_V4_2) 811#if IS_ENABLED(CONFIG_NFS_V4_2)
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index d88231e3b2be..fc20e06c56ba 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -711,21 +711,18 @@ EXPORT_SYMBOL(dquot_quota_sync);
711static unsigned long 711static unsigned long
712dqcache_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) 712dqcache_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
713{ 713{
714 struct list_head *head;
715 struct dquot *dquot; 714 struct dquot *dquot;
716 unsigned long freed = 0; 715 unsigned long freed = 0;
717 716
718 spin_lock(&dq_list_lock); 717 spin_lock(&dq_list_lock);
719 head = free_dquots.prev; 718 while (!list_empty(&free_dquots) && sc->nr_to_scan) {
720 while (head != &free_dquots && sc->nr_to_scan) { 719 dquot = list_first_entry(&free_dquots, struct dquot, dq_free);
721 dquot = list_entry(head, struct dquot, dq_free);
722 remove_dquot_hash(dquot); 720 remove_dquot_hash(dquot);
723 remove_free_dquot(dquot); 721 remove_free_dquot(dquot);
724 remove_inuse(dquot); 722 remove_inuse(dquot);
725 do_destroy_dquot(dquot); 723 do_destroy_dquot(dquot);
726 sc->nr_to_scan--; 724 sc->nr_to_scan--;
727 freed++; 725 freed++;
728 head = free_dquots.prev;
729 } 726 }
730 spin_unlock(&dq_list_lock); 727 spin_unlock(&dq_list_lock);
731 return freed; 728 return freed;
diff --git a/fs/udf/balloc.c b/fs/udf/balloc.c
index 1b961b1d9699..fcda0fc97b90 100644
--- a/fs/udf/balloc.c
+++ b/fs/udf/balloc.c
@@ -533,8 +533,7 @@ static int udf_table_prealloc_blocks(struct super_block *sb,
533 udf_write_aext(table, &epos, &eloc, 533 udf_write_aext(table, &epos, &eloc,
534 (etype << 30) | elen, 1); 534 (etype << 30) | elen, 1);
535 } else 535 } else
536 udf_delete_aext(table, epos, eloc, 536 udf_delete_aext(table, epos);
537 (etype << 30) | elen);
538 } else { 537 } else {
539 alloc_count = 0; 538 alloc_count = 0;
540 } 539 }
@@ -630,7 +629,7 @@ static udf_pblk_t udf_table_new_block(struct super_block *sb,
630 if (goal_elen) 629 if (goal_elen)
631 udf_write_aext(table, &goal_epos, &goal_eloc, goal_elen, 1); 630 udf_write_aext(table, &goal_epos, &goal_eloc, goal_elen, 1);
632 else 631 else
633 udf_delete_aext(table, goal_epos, goal_eloc, goal_elen); 632 udf_delete_aext(table, goal_epos);
634 brelse(goal_epos.bh); 633 brelse(goal_epos.bh);
635 634
636 udf_add_free_space(sb, partition, -1); 635 udf_add_free_space(sb, partition, -1);
diff --git a/fs/udf/directory.c b/fs/udf/directory.c
index 0a98a2369738..d9523013096f 100644
--- a/fs/udf/directory.c
+++ b/fs/udf/directory.c
@@ -141,10 +141,7 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
141 fibh->ebh->b_data, 141 fibh->ebh->b_data,
142 sizeof(struct fileIdentDesc) + fibh->soffset); 142 sizeof(struct fileIdentDesc) + fibh->soffset);
143 143
144 fi_len = (sizeof(struct fileIdentDesc) + 144 fi_len = udf_dir_entry_len(cfi);
145 cfi->lengthFileIdent +
146 le16_to_cpu(cfi->lengthOfImpUse) + 3) & ~3;
147
148 *nf_pos += fi_len - (fibh->eoffset - fibh->soffset); 145 *nf_pos += fi_len - (fibh->eoffset - fibh->soffset);
149 fibh->eoffset = fibh->soffset + fi_len; 146 fibh->eoffset = fibh->soffset + fi_len;
150 } else { 147 } else {
@@ -152,6 +149,9 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
152 sizeof(struct fileIdentDesc)); 149 sizeof(struct fileIdentDesc));
153 } 150 }
154 } 151 }
152 /* Got last entry outside of dir size - fs is corrupted! */
153 if (*nf_pos > dir->i_size)
154 return NULL;
155 return fi; 155 return fi;
156} 156}
157 157
diff --git a/fs/udf/inode.c b/fs/udf/inode.c
index 7f39d17352c9..9915a58fbabd 100644
--- a/fs/udf/inode.c
+++ b/fs/udf/inode.c
@@ -1147,8 +1147,7 @@ static void udf_update_extents(struct inode *inode, struct kernel_long_ad *laarr
1147 1147
1148 if (startnum > endnum) { 1148 if (startnum > endnum) {
1149 for (i = 0; i < (startnum - endnum); i++) 1149 for (i = 0; i < (startnum - endnum); i++)
1150 udf_delete_aext(inode, *epos, laarr[i].extLocation, 1150 udf_delete_aext(inode, *epos);
1151 laarr[i].extLength);
1152 } else if (startnum < endnum) { 1151 } else if (startnum < endnum) {
1153 for (i = 0; i < (endnum - startnum); i++) { 1152 for (i = 0; i < (endnum - startnum); i++) {
1154 udf_insert_aext(inode, *epos, laarr[i].extLocation, 1153 udf_insert_aext(inode, *epos, laarr[i].extLocation,
@@ -2176,14 +2175,15 @@ static int8_t udf_insert_aext(struct inode *inode, struct extent_position epos,
2176 return (nelen >> 30); 2175 return (nelen >> 30);
2177} 2176}
2178 2177
2179int8_t udf_delete_aext(struct inode *inode, struct extent_position epos, 2178int8_t udf_delete_aext(struct inode *inode, struct extent_position epos)
2180 struct kernel_lb_addr eloc, uint32_t elen)
2181{ 2179{
2182 struct extent_position oepos; 2180 struct extent_position oepos;
2183 int adsize; 2181 int adsize;
2184 int8_t etype; 2182 int8_t etype;
2185 struct allocExtDesc *aed; 2183 struct allocExtDesc *aed;
2186 struct udf_inode_info *iinfo; 2184 struct udf_inode_info *iinfo;
2185 struct kernel_lb_addr eloc;
2186 uint32_t elen;
2187 2187
2188 if (epos.bh) { 2188 if (epos.bh) {
2189 get_bh(epos.bh); 2189 get_bh(epos.bh);
diff --git a/fs/udf/namei.c b/fs/udf/namei.c
index c586026508db..06f37ddd2997 100644
--- a/fs/udf/namei.c
+++ b/fs/udf/namei.c
@@ -351,8 +351,6 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
351 loff_t f_pos; 351 loff_t f_pos;
352 loff_t size = udf_ext0_offset(dir) + dir->i_size; 352 loff_t size = udf_ext0_offset(dir) + dir->i_size;
353 int nfidlen; 353 int nfidlen;
354 uint8_t lfi;
355 uint16_t liu;
356 udf_pblk_t block; 354 udf_pblk_t block;
357 struct kernel_lb_addr eloc; 355 struct kernel_lb_addr eloc;
358 uint32_t elen = 0; 356 uint32_t elen = 0;
@@ -383,7 +381,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
383 namelen = 0; 381 namelen = 0;
384 } 382 }
385 383
386 nfidlen = (sizeof(struct fileIdentDesc) + namelen + 3) & ~3; 384 nfidlen = ALIGN(sizeof(struct fileIdentDesc) + namelen, UDF_NAME_PAD);
387 385
388 f_pos = udf_ext0_offset(dir); 386 f_pos = udf_ext0_offset(dir);
389 387
@@ -424,12 +422,8 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
424 goto out_err; 422 goto out_err;
425 } 423 }
426 424
427 liu = le16_to_cpu(cfi->lengthOfImpUse);
428 lfi = cfi->lengthFileIdent;
429
430 if ((cfi->fileCharacteristics & FID_FILE_CHAR_DELETED) != 0) { 425 if ((cfi->fileCharacteristics & FID_FILE_CHAR_DELETED) != 0) {
431 if (((sizeof(struct fileIdentDesc) + 426 if (udf_dir_entry_len(cfi) == nfidlen) {
432 liu + lfi + 3) & ~3) == nfidlen) {
433 cfi->descTag.tagSerialNum = cpu_to_le16(1); 427 cfi->descTag.tagSerialNum = cpu_to_le16(1);
434 cfi->fileVersionNum = cpu_to_le16(1); 428 cfi->fileVersionNum = cpu_to_le16(1);
435 cfi->fileCharacteristics = 0; 429 cfi->fileCharacteristics = 0;
@@ -1201,9 +1195,7 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry,
1201 1195
1202 if (dir_fi) { 1196 if (dir_fi) {
1203 dir_fi->icb.extLocation = cpu_to_lelb(UDF_I(new_dir)->i_location); 1197 dir_fi->icb.extLocation = cpu_to_lelb(UDF_I(new_dir)->i_location);
1204 udf_update_tag((char *)dir_fi, 1198 udf_update_tag((char *)dir_fi, udf_dir_entry_len(dir_fi));
1205 (sizeof(struct fileIdentDesc) +
1206 le16_to_cpu(dir_fi->lengthOfImpUse) + 3) & ~3);
1207 if (old_iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 1199 if (old_iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
1208 mark_inode_dirty(old_inode); 1200 mark_inode_dirty(old_inode);
1209 else 1201 else
diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h
index bae311b59400..84c47dde4d26 100644
--- a/fs/udf/udfdecl.h
+++ b/fs/udf/udfdecl.h
@@ -132,6 +132,12 @@ struct inode *udf_find_metadata_inode_efe(struct super_block *sb,
132extern int udf_write_fi(struct inode *inode, struct fileIdentDesc *, 132extern int udf_write_fi(struct inode *inode, struct fileIdentDesc *,
133 struct fileIdentDesc *, struct udf_fileident_bh *, 133 struct fileIdentDesc *, struct udf_fileident_bh *,
134 uint8_t *, uint8_t *); 134 uint8_t *, uint8_t *);
135static inline unsigned int udf_dir_entry_len(struct fileIdentDesc *cfi)
136{
137 return ALIGN(sizeof(struct fileIdentDesc) +
138 le16_to_cpu(cfi->lengthOfImpUse) + cfi->lengthFileIdent,
139 UDF_NAME_PAD);
140}
135 141
136/* file.c */ 142/* file.c */
137extern long udf_ioctl(struct file *, unsigned int, unsigned long); 143extern long udf_ioctl(struct file *, unsigned int, unsigned long);
@@ -167,8 +173,7 @@ extern int udf_add_aext(struct inode *, struct extent_position *,
167 struct kernel_lb_addr *, uint32_t, int); 173 struct kernel_lb_addr *, uint32_t, int);
168extern void udf_write_aext(struct inode *, struct extent_position *, 174extern void udf_write_aext(struct inode *, struct extent_position *,
169 struct kernel_lb_addr *, uint32_t, int); 175 struct kernel_lb_addr *, uint32_t, int);
170extern int8_t udf_delete_aext(struct inode *, struct extent_position, 176extern int8_t udf_delete_aext(struct inode *, struct extent_position);
171 struct kernel_lb_addr, uint32_t);
172extern int8_t udf_next_aext(struct inode *, struct extent_position *, 177extern int8_t udf_next_aext(struct inode *, struct extent_position *,
173 struct kernel_lb_addr *, uint32_t *, int); 178 struct kernel_lb_addr *, uint32_t *, int);
174extern int8_t udf_current_aext(struct inode *, struct extent_position *, 179extern int8_t udf_current_aext(struct inode *, struct extent_position *,
diff --git a/include/acpi/processor.h b/include/acpi/processor.h
index 40a916efd7c0..1194a4c78d55 100644
--- a/include/acpi/processor.h
+++ b/include/acpi/processor.h
@@ -309,7 +309,7 @@ static inline void acpi_processor_ppc_exit(void)
309{ 309{
310 return; 310 return;
311} 311}
312static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr, 312static inline void acpi_processor_ppc_has_changed(struct acpi_processor *pr,
313 int event_flag) 313 int event_flag)
314{ 314{
315 static unsigned int printout = 1; 315 static unsigned int printout = 1;
@@ -320,7 +320,6 @@ static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr,
320 "Consider compiling CPUfreq support into your kernel.\n"); 320 "Consider compiling CPUfreq support into your kernel.\n");
321 printout = 0; 321 printout = 0;
322 } 322 }
323 return 0;
324} 323}
325static inline int acpi_processor_get_bios_limit(int cpu, unsigned int *limit) 324static inline int acpi_processor_get_bios_limit(int cpu, unsigned int *limit)
326{ 325{
diff --git a/include/asm-generic/qspinlock_types.h b/include/asm-generic/qspinlock_types.h
index 0763f065b975..d10f1e7d6ba8 100644
--- a/include/asm-generic/qspinlock_types.h
+++ b/include/asm-generic/qspinlock_types.h
@@ -63,7 +63,7 @@ typedef struct qspinlock {
63/* 63/*
64 * Initializier 64 * Initializier
65 */ 65 */
66#define __ARCH_SPIN_LOCK_UNLOCKED { .val = ATOMIC_INIT(0) } 66#define __ARCH_SPIN_LOCK_UNLOCKED { { .val = ATOMIC_INIT(0) } }
67 67
68/* 68/*
69 * Bitfields in the atomic value: 69 * Bitfields in the atomic value:
diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h
index 0bd432a4d7bd..24251762c20c 100644
--- a/include/linux/backing-dev-defs.h
+++ b/include/linux/backing-dev-defs.h
@@ -22,7 +22,6 @@ struct dentry;
22 */ 22 */
23enum wb_state { 23enum wb_state {
24 WB_registered, /* bdi_register() was done */ 24 WB_registered, /* bdi_register() was done */
25 WB_shutting_down, /* wb_shutdown() in progress */
26 WB_writeback_running, /* Writeback is in progress */ 25 WB_writeback_running, /* Writeback is in progress */
27 WB_has_dirty_io, /* Dirty inodes on ->b_{dirty|io|more_io} */ 26 WB_has_dirty_io, /* Dirty inodes on ->b_{dirty|io|more_io} */
28 WB_start_all, /* nr_pages == 0 (all) work pending */ 27 WB_start_all, /* nr_pages == 0 (all) work pending */
@@ -189,6 +188,7 @@ struct backing_dev_info {
189#ifdef CONFIG_CGROUP_WRITEBACK 188#ifdef CONFIG_CGROUP_WRITEBACK
190 struct radix_tree_root cgwb_tree; /* radix tree of active cgroup wbs */ 189 struct radix_tree_root cgwb_tree; /* radix tree of active cgroup wbs */
191 struct rb_root cgwb_congested_tree; /* their congested states */ 190 struct rb_root cgwb_congested_tree; /* their congested states */
191 struct mutex cgwb_release_mutex; /* protect shutdown of wb structs */
192#else 192#else
193 struct bdi_writeback_congested *wb_congested; 193 struct bdi_writeback_congested *wb_congested;
194#endif 194#endif
diff --git a/include/linux/filter.h b/include/linux/filter.h
index b615df57b7d5..20f2659dd829 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -472,7 +472,9 @@ struct sock_fprog_kern {
472struct bpf_binary_header { 472struct bpf_binary_header {
473 u16 pages; 473 u16 pages;
474 u16 locked:1; 474 u16 locked:1;
475 u8 image[]; 475
476 /* Some arches need word alignment for their instructions */
477 u8 image[] __aligned(4);
476}; 478};
477 479
478struct bpf_prog { 480struct bpf_prog {
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 4bd2f34947f4..201de12a9957 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -503,6 +503,7 @@ struct irq_chip {
503 * IRQCHIP_SKIP_SET_WAKE: Skip chip.irq_set_wake(), for this irq chip 503 * IRQCHIP_SKIP_SET_WAKE: Skip chip.irq_set_wake(), for this irq chip
504 * IRQCHIP_ONESHOT_SAFE: One shot does not require mask/unmask 504 * IRQCHIP_ONESHOT_SAFE: One shot does not require mask/unmask
505 * IRQCHIP_EOI_THREADED: Chip requires eoi() on unmask in threaded mode 505 * IRQCHIP_EOI_THREADED: Chip requires eoi() on unmask in threaded mode
506 * IRQCHIP_SUPPORTS_LEVEL_MSI Chip can provide two doorbells for Level MSIs
506 */ 507 */
507enum { 508enum {
508 IRQCHIP_SET_TYPE_MASKED = (1 << 0), 509 IRQCHIP_SET_TYPE_MASKED = (1 << 0),
diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h
index 25b33b664537..dd1e40ddac7d 100644
--- a/include/linux/irqdesc.h
+++ b/include/linux/irqdesc.h
@@ -145,11 +145,6 @@ static inline void *irq_desc_get_handler_data(struct irq_desc *desc)
145 return desc->irq_common_data.handler_data; 145 return desc->irq_common_data.handler_data;
146} 146}
147 147
148static inline struct msi_desc *irq_desc_get_msi_desc(struct irq_desc *desc)
149{
150 return desc->irq_common_data.msi_desc;
151}
152
153/* 148/*
154 * Architectures call this to let the generic IRQ layer 149 * Architectures call this to let the generic IRQ layer
155 * handle an interrupt. 150 * handle an interrupt.
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index d23123238534..941dc0a5a877 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -666,7 +666,7 @@ do { \
666 * your code. (Extra memory is used for special buffers that are 666 * your code. (Extra memory is used for special buffers that are
667 * allocated when trace_printk() is used.) 667 * allocated when trace_printk() is used.)
668 * 668 *
669 * A little optization trick is done here. If there's only one 669 * A little optimization trick is done here. If there's only one
670 * argument, there's no need to scan the string for printf formats. 670 * argument, there's no need to scan the string for printf formats.
671 * The trace_puts() will suffice. But how can we take advantage of 671 * The trace_puts() will suffice. But how can we take advantage of
672 * using trace_puts() when trace_printk() has only one argument? 672 * using trace_puts() when trace_printk() has only one argument?
diff --git a/include/linux/memory.h b/include/linux/memory.h
index 31ca3e28b0eb..a6ddefc60517 100644
--- a/include/linux/memory.h
+++ b/include/linux/memory.h
@@ -38,6 +38,7 @@ struct memory_block {
38 38
39int arch_get_memory_phys_device(unsigned long start_pfn); 39int arch_get_memory_phys_device(unsigned long start_pfn);
40unsigned long memory_block_size_bytes(void); 40unsigned long memory_block_size_bytes(void);
41int set_memory_block_size_order(unsigned int order);
41 42
42/* These states are exposed to userspace as text strings in sysfs */ 43/* These states are exposed to userspace as text strings in sysfs */
43#define MEM_ONLINE (1<<0) /* exposed to userspace */ 44#define MEM_ONLINE (1<<0) /* exposed to userspace */
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index 9dee3c23895d..712eed156d09 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1438,6 +1438,8 @@ enum {
1438 NFS_IOHDR_EOF, 1438 NFS_IOHDR_EOF,
1439 NFS_IOHDR_REDO, 1439 NFS_IOHDR_REDO,
1440 NFS_IOHDR_STAT, 1440 NFS_IOHDR_STAT,
1441 NFS_IOHDR_RESEND_PNFS,
1442 NFS_IOHDR_RESEND_MDS,
1441}; 1443};
1442 1444
1443struct nfs_io_completion; 1445struct nfs_io_completion;
diff --git a/include/linux/refcount.h b/include/linux/refcount.h
index 4193c41e383a..a685da2c4522 100644
--- a/include/linux/refcount.h
+++ b/include/linux/refcount.h
@@ -98,5 +98,7 @@ extern __must_check bool refcount_dec_if_one(refcount_t *r);
98extern __must_check bool refcount_dec_not_one(refcount_t *r); 98extern __must_check bool refcount_dec_not_one(refcount_t *r);
99extern __must_check bool refcount_dec_and_mutex_lock(refcount_t *r, struct mutex *lock); 99extern __must_check bool refcount_dec_and_mutex_lock(refcount_t *r, struct mutex *lock);
100extern __must_check bool refcount_dec_and_lock(refcount_t *r, spinlock_t *lock); 100extern __must_check bool refcount_dec_and_lock(refcount_t *r, spinlock_t *lock);
101 101extern __must_check bool refcount_dec_and_lock_irqsave(refcount_t *r,
102 spinlock_t *lock,
103 unsigned long *flags);
102#endif /* _LINUX_REFCOUNT_H */ 104#endif /* _LINUX_REFCOUNT_H */
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 87bf02d93a27..9256118bd40c 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1799,20 +1799,22 @@ static inline void rseq_set_notify_resume(struct task_struct *t)
1799 set_tsk_thread_flag(t, TIF_NOTIFY_RESUME); 1799 set_tsk_thread_flag(t, TIF_NOTIFY_RESUME);
1800} 1800}
1801 1801
1802void __rseq_handle_notify_resume(struct pt_regs *regs); 1802void __rseq_handle_notify_resume(struct ksignal *sig, struct pt_regs *regs);
1803 1803
1804static inline void rseq_handle_notify_resume(struct pt_regs *regs) 1804static inline void rseq_handle_notify_resume(struct ksignal *ksig,
1805 struct pt_regs *regs)
1805{ 1806{
1806 if (current->rseq) 1807 if (current->rseq)
1807 __rseq_handle_notify_resume(regs); 1808 __rseq_handle_notify_resume(ksig, regs);
1808} 1809}
1809 1810
1810static inline void rseq_signal_deliver(struct pt_regs *regs) 1811static inline void rseq_signal_deliver(struct ksignal *ksig,
1812 struct pt_regs *regs)
1811{ 1813{
1812 preempt_disable(); 1814 preempt_disable();
1813 __set_bit(RSEQ_EVENT_SIGNAL_BIT, &current->rseq_event_mask); 1815 __set_bit(RSEQ_EVENT_SIGNAL_BIT, &current->rseq_event_mask);
1814 preempt_enable(); 1816 preempt_enable();
1815 rseq_handle_notify_resume(regs); 1817 rseq_handle_notify_resume(ksig, regs);
1816} 1818}
1817 1819
1818/* rseq_preempt() requires preemption to be disabled. */ 1820/* rseq_preempt() requires preemption to be disabled. */
@@ -1831,9 +1833,7 @@ static inline void rseq_migrate(struct task_struct *t)
1831 1833
1832/* 1834/*
1833 * If parent process has a registered restartable sequences area, the 1835 * If parent process has a registered restartable sequences area, the
1834 * child inherits. Only applies when forking a process, not a thread. In 1836 * child inherits. Only applies when forking a process, not a thread.
1835 * case a parent fork() in the middle of a restartable sequence, set the
1836 * resume notifier to force the child to retry.
1837 */ 1837 */
1838static inline void rseq_fork(struct task_struct *t, unsigned long clone_flags) 1838static inline void rseq_fork(struct task_struct *t, unsigned long clone_flags)
1839{ 1839{
@@ -1847,7 +1847,6 @@ static inline void rseq_fork(struct task_struct *t, unsigned long clone_flags)
1847 t->rseq_len = current->rseq_len; 1847 t->rseq_len = current->rseq_len;
1848 t->rseq_sig = current->rseq_sig; 1848 t->rseq_sig = current->rseq_sig;
1849 t->rseq_event_mask = current->rseq_event_mask; 1849 t->rseq_event_mask = current->rseq_event_mask;
1850 rseq_preempt(t);
1851 } 1850 }
1852} 1851}
1853 1852
@@ -1864,10 +1863,12 @@ static inline void rseq_execve(struct task_struct *t)
1864static inline void rseq_set_notify_resume(struct task_struct *t) 1863static inline void rseq_set_notify_resume(struct task_struct *t)
1865{ 1864{
1866} 1865}
1867static inline void rseq_handle_notify_resume(struct pt_regs *regs) 1866static inline void rseq_handle_notify_resume(struct ksignal *ksig,
1867 struct pt_regs *regs)
1868{ 1868{
1869} 1869}
1870static inline void rseq_signal_deliver(struct pt_regs *regs) 1870static inline void rseq_signal_deliver(struct ksignal *ksig,
1871 struct pt_regs *regs)
1871{ 1872{
1872} 1873}
1873static inline void rseq_preempt(struct task_struct *t) 1874static inline void rseq_preempt(struct task_struct *t)
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h
index 1e8a46435838..fd57888d4942 100644
--- a/include/linux/spinlock.h
+++ b/include/linux/spinlock.h
@@ -427,6 +427,11 @@ extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
427#define atomic_dec_and_lock(atomic, lock) \ 427#define atomic_dec_and_lock(atomic, lock) \
428 __cond_lock(lock, _atomic_dec_and_lock(atomic, lock)) 428 __cond_lock(lock, _atomic_dec_and_lock(atomic, lock))
429 429
430extern int _atomic_dec_and_lock_irqsave(atomic_t *atomic, spinlock_t *lock,
431 unsigned long *flags);
432#define atomic_dec_and_lock_irqsave(atomic, lock, flags) \
433 __cond_lock(lock, _atomic_dec_and_lock_irqsave(atomic, lock, &(flags)))
434
430int alloc_bucket_spinlocks(spinlock_t **locks, unsigned int *lock_mask, 435int alloc_bucket_spinlocks(spinlock_t **locks, unsigned int *lock_mask,
431 size_t max_size, unsigned int cpu_mult, 436 size_t max_size, unsigned int cpu_mult,
432 gfp_t gfp); 437 gfp_t gfp);
diff --git a/include/uapi/linux/nbd.h b/include/uapi/linux/nbd.h
index 85a3fb65e40a..20d6cc91435d 100644
--- a/include/uapi/linux/nbd.h
+++ b/include/uapi/linux/nbd.h
@@ -53,6 +53,9 @@ enum {
53/* These are client behavior specific flags. */ 53/* These are client behavior specific flags. */
54#define NBD_CFLAG_DESTROY_ON_DISCONNECT (1 << 0) /* delete the nbd device on 54#define NBD_CFLAG_DESTROY_ON_DISCONNECT (1 << 0) /* delete the nbd device on
55 disconnect. */ 55 disconnect. */
56#define NBD_CFLAG_DISCONNECT_ON_CLOSE (1 << 1) /* disconnect the nbd device on
57 * close by last opener.
58 */
56 59
57/* userspace doesn't need the nbd_device structure */ 60/* userspace doesn't need the nbd_device structure */
58 61
diff --git a/include/xen/xen.h b/include/xen/xen.h
index 9d4340c907d1..1e1d9bd0bd37 100644
--- a/include/xen/xen.h
+++ b/include/xen/xen.h
@@ -25,12 +25,16 @@ extern bool xen_pvh;
25#define xen_hvm_domain() (xen_domain_type == XEN_HVM_DOMAIN) 25#define xen_hvm_domain() (xen_domain_type == XEN_HVM_DOMAIN)
26#define xen_pvh_domain() (xen_pvh) 26#define xen_pvh_domain() (xen_pvh)
27 27
28#include <linux/types.h>
29
30extern uint32_t xen_start_flags;
31
28#ifdef CONFIG_XEN_DOM0 32#ifdef CONFIG_XEN_DOM0
29#include <xen/interface/xen.h> 33#include <xen/interface/xen.h>
30#include <asm/xen/hypervisor.h> 34#include <asm/xen/hypervisor.h>
31 35
32#define xen_initial_domain() (xen_domain() && \ 36#define xen_initial_domain() (xen_domain() && \
33 xen_start_info && xen_start_info->flags & SIF_INITDOMAIN) 37 (xen_start_flags & SIF_INITDOMAIN))
34#else /* !CONFIG_XEN_DOM0 */ 38#else /* !CONFIG_XEN_DOM0 */
35#define xen_initial_domain() (0) 39#define xen_initial_domain() (0)
36#endif /* CONFIG_XEN_DOM0 */ 40#endif /* CONFIG_XEN_DOM0 */
diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
index 045a37e9ddee..5d3cf407e374 100644
--- a/kernel/events/ring_buffer.c
+++ b/kernel/events/ring_buffer.c
@@ -103,7 +103,7 @@ out:
103 preempt_enable(); 103 preempt_enable();
104} 104}
105 105
106static bool __always_inline 106static __always_inline bool
107ring_buffer_has_space(unsigned long head, unsigned long tail, 107ring_buffer_has_space(unsigned long head, unsigned long tail,
108 unsigned long data_size, unsigned int size, 108 unsigned long data_size, unsigned int size,
109 bool backward) 109 bool backward)
@@ -114,7 +114,7 @@ ring_buffer_has_space(unsigned long head, unsigned long tail,
114 return CIRC_SPACE(tail, head, data_size) >= size; 114 return CIRC_SPACE(tail, head, data_size) >= size;
115} 115}
116 116
117static int __always_inline 117static __always_inline int
118__perf_output_begin(struct perf_output_handle *handle, 118__perf_output_begin(struct perf_output_handle *handle,
119 struct perf_event *event, unsigned int size, 119 struct perf_event *event, unsigned int size,
120 bool backward) 120 bool backward)
@@ -414,7 +414,7 @@ err:
414} 414}
415EXPORT_SYMBOL_GPL(perf_aux_output_begin); 415EXPORT_SYMBOL_GPL(perf_aux_output_begin);
416 416
417static bool __always_inline rb_need_aux_wakeup(struct ring_buffer *rb) 417static __always_inline bool rb_need_aux_wakeup(struct ring_buffer *rb)
418{ 418{
419 if (rb->aux_overwrite) 419 if (rb->aux_overwrite)
420 return false; 420 return false;
diff --git a/kernel/irq/debugfs.c b/kernel/irq/debugfs.c
index 4dadeb3d6666..6f636136cccc 100644
--- a/kernel/irq/debugfs.c
+++ b/kernel/irq/debugfs.c
@@ -55,6 +55,7 @@ static const struct irq_bit_descr irqchip_flags[] = {
55 BIT_MASK_DESCR(IRQCHIP_SKIP_SET_WAKE), 55 BIT_MASK_DESCR(IRQCHIP_SKIP_SET_WAKE),
56 BIT_MASK_DESCR(IRQCHIP_ONESHOT_SAFE), 56 BIT_MASK_DESCR(IRQCHIP_ONESHOT_SAFE),
57 BIT_MASK_DESCR(IRQCHIP_EOI_THREADED), 57 BIT_MASK_DESCR(IRQCHIP_EOI_THREADED),
58 BIT_MASK_DESCR(IRQCHIP_SUPPORTS_LEVEL_MSI),
58}; 59};
59 60
60static void 61static void
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index edcac5de7ebc..5fa4d3138bf1 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -1265,11 +1265,11 @@ unsigned long lockdep_count_forward_deps(struct lock_class *class)
1265 this.parent = NULL; 1265 this.parent = NULL;
1266 this.class = class; 1266 this.class = class;
1267 1267
1268 local_irq_save(flags); 1268 raw_local_irq_save(flags);
1269 arch_spin_lock(&lockdep_lock); 1269 arch_spin_lock(&lockdep_lock);
1270 ret = __lockdep_count_forward_deps(&this); 1270 ret = __lockdep_count_forward_deps(&this);
1271 arch_spin_unlock(&lockdep_lock); 1271 arch_spin_unlock(&lockdep_lock);
1272 local_irq_restore(flags); 1272 raw_local_irq_restore(flags);
1273 1273
1274 return ret; 1274 return ret;
1275} 1275}
@@ -1292,11 +1292,11 @@ unsigned long lockdep_count_backward_deps(struct lock_class *class)
1292 this.parent = NULL; 1292 this.parent = NULL;
1293 this.class = class; 1293 this.class = class;
1294 1294
1295 local_irq_save(flags); 1295 raw_local_irq_save(flags);
1296 arch_spin_lock(&lockdep_lock); 1296 arch_spin_lock(&lockdep_lock);
1297 ret = __lockdep_count_backward_deps(&this); 1297 ret = __lockdep_count_backward_deps(&this);
1298 arch_spin_unlock(&lockdep_lock); 1298 arch_spin_unlock(&lockdep_lock);
1299 local_irq_restore(flags); 1299 raw_local_irq_restore(flags);
1300 1300
1301 return ret; 1301 return ret;
1302} 1302}
@@ -4411,7 +4411,7 @@ void debug_check_no_locks_freed(const void *mem_from, unsigned long mem_len)
4411 if (unlikely(!debug_locks)) 4411 if (unlikely(!debug_locks))
4412 return; 4412 return;
4413 4413
4414 local_irq_save(flags); 4414 raw_local_irq_save(flags);
4415 for (i = 0; i < curr->lockdep_depth; i++) { 4415 for (i = 0; i < curr->lockdep_depth; i++) {
4416 hlock = curr->held_locks + i; 4416 hlock = curr->held_locks + i;
4417 4417
@@ -4422,7 +4422,7 @@ void debug_check_no_locks_freed(const void *mem_from, unsigned long mem_len)
4422 print_freed_lock_bug(curr, mem_from, mem_from + mem_len, hlock); 4422 print_freed_lock_bug(curr, mem_from, mem_from + mem_len, hlock);
4423 break; 4423 break;
4424 } 4424 }
4425 local_irq_restore(flags); 4425 raw_local_irq_restore(flags);
4426} 4426}
4427EXPORT_SYMBOL_GPL(debug_check_no_locks_freed); 4427EXPORT_SYMBOL_GPL(debug_check_no_locks_freed);
4428 4428
diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
index bc1e507be9ff..776308d2fa9e 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -181,6 +181,7 @@ void down_read_non_owner(struct rw_semaphore *sem)
181 might_sleep(); 181 might_sleep();
182 182
183 __down_read(sem); 183 __down_read(sem);
184 rwsem_set_reader_owned(sem);
184} 185}
185 186
186EXPORT_SYMBOL(down_read_non_owner); 187EXPORT_SYMBOL(down_read_non_owner);
diff --git a/kernel/rseq.c b/kernel/rseq.c
index ae306f90c514..22b6acf1ad63 100644
--- a/kernel/rseq.c
+++ b/kernel/rseq.c
@@ -251,10 +251,10 @@ static int rseq_ip_fixup(struct pt_regs *regs)
251 * respect to other threads scheduled on the same CPU, and with respect 251 * respect to other threads scheduled on the same CPU, and with respect
252 * to signal handlers. 252 * to signal handlers.
253 */ 253 */
254void __rseq_handle_notify_resume(struct pt_regs *regs) 254void __rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs)
255{ 255{
256 struct task_struct *t = current; 256 struct task_struct *t = current;
257 int ret; 257 int ret, sig;
258 258
259 if (unlikely(t->flags & PF_EXITING)) 259 if (unlikely(t->flags & PF_EXITING))
260 return; 260 return;
@@ -268,7 +268,8 @@ void __rseq_handle_notify_resume(struct pt_regs *regs)
268 return; 268 return;
269 269
270error: 270error:
271 force_sig(SIGSEGV, t); 271 sig = ksig ? ksig->sig : 0;
272 force_sigsegv(sig, t);
272} 273}
273 274
274#ifdef CONFIG_DEBUG_RSEQ 275#ifdef CONFIG_DEBUG_RSEQ
diff --git a/kernel/softirq.c b/kernel/softirq.c
index de2f57fddc04..900dcfee542c 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -139,9 +139,13 @@ static void __local_bh_enable(unsigned int cnt)
139{ 139{
140 lockdep_assert_irqs_disabled(); 140 lockdep_assert_irqs_disabled();
141 141
142 if (preempt_count() == cnt)
143 trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip());
144
142 if (softirq_count() == (cnt & SOFTIRQ_MASK)) 145 if (softirq_count() == (cnt & SOFTIRQ_MASK))
143 trace_softirqs_on(_RET_IP_); 146 trace_softirqs_on(_RET_IP_);
144 preempt_count_sub(cnt); 147
148 __preempt_count_sub(cnt);
145} 149}
146 150
147/* 151/*
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index 055a4a728c00..3e93c54bd3a1 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -1659,7 +1659,7 @@ EXPORT_SYMBOL_GPL(hrtimer_init_sleeper);
1659int nanosleep_copyout(struct restart_block *restart, struct timespec64 *ts) 1659int nanosleep_copyout(struct restart_block *restart, struct timespec64 *ts)
1660{ 1660{
1661 switch(restart->nanosleep.type) { 1661 switch(restart->nanosleep.type) {
1662#ifdef CONFIG_COMPAT 1662#ifdef CONFIG_COMPAT_32BIT_TIME
1663 case TT_COMPAT: 1663 case TT_COMPAT:
1664 if (compat_put_timespec64(ts, restart->nanosleep.compat_rmtp)) 1664 if (compat_put_timespec64(ts, restart->nanosleep.compat_rmtp))
1665 return -EFAULT; 1665 return -EFAULT;
diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
index 5a6251ac6f7a..9cdf54b04ca8 100644
--- a/kernel/time/posix-cpu-timers.c
+++ b/kernel/time/posix-cpu-timers.c
@@ -604,7 +604,6 @@ static int posix_cpu_timer_set(struct k_itimer *timer, int timer_flags,
604 /* 604 /*
605 * Disarm any old timer after extracting its expiry time. 605 * Disarm any old timer after extracting its expiry time.
606 */ 606 */
607 lockdep_assert_irqs_disabled();
608 607
609 ret = 0; 608 ret = 0;
610 old_incr = timer->it.cpu.incr; 609 old_incr = timer->it.cpu.incr;
@@ -1049,7 +1048,6 @@ static void posix_cpu_timer_rearm(struct k_itimer *timer)
1049 /* 1048 /*
1050 * Now re-arm for the new expiry time. 1049 * Now re-arm for the new expiry time.
1051 */ 1050 */
1052 lockdep_assert_irqs_disabled();
1053 arm_timer(timer); 1051 arm_timer(timer);
1054unlock: 1052unlock:
1055 unlock_task_sighand(p, &flags); 1053 unlock_task_sighand(p, &flags);
diff --git a/kernel/time/time.c b/kernel/time/time.c
index 6fa99213fc72..2b41e8e2d31d 100644
--- a/kernel/time/time.c
+++ b/kernel/time/time.c
@@ -28,6 +28,7 @@
28 */ 28 */
29 29
30#include <linux/export.h> 30#include <linux/export.h>
31#include <linux/kernel.h>
31#include <linux/timex.h> 32#include <linux/timex.h>
32#include <linux/capability.h> 33#include <linux/capability.h>
33#include <linux/timekeeper_internal.h> 34#include <linux/timekeeper_internal.h>
@@ -314,9 +315,10 @@ unsigned int jiffies_to_msecs(const unsigned long j)
314 return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC); 315 return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
315#else 316#else
316# if BITS_PER_LONG == 32 317# if BITS_PER_LONG == 32
317 return (HZ_TO_MSEC_MUL32 * j) >> HZ_TO_MSEC_SHR32; 318 return (HZ_TO_MSEC_MUL32 * j + (1ULL << HZ_TO_MSEC_SHR32) - 1) >>
319 HZ_TO_MSEC_SHR32;
318# else 320# else
319 return (j * HZ_TO_MSEC_NUM) / HZ_TO_MSEC_DEN; 321 return DIV_ROUND_UP(j * HZ_TO_MSEC_NUM, HZ_TO_MSEC_DEN);
320# endif 322# endif
321#endif 323#endif
322} 324}
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index c9336e98ac59..a0079b4c7a49 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -1360,8 +1360,6 @@ __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1360void 1360void
1361update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) 1361update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1362{ 1362{
1363 struct ring_buffer *buf;
1364
1365 if (tr->stop_count) 1363 if (tr->stop_count)
1366 return; 1364 return;
1367 1365
@@ -1375,9 +1373,7 @@ update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1375 1373
1376 arch_spin_lock(&tr->max_lock); 1374 arch_spin_lock(&tr->max_lock);
1377 1375
1378 buf = tr->trace_buffer.buffer; 1376 swap(tr->trace_buffer.buffer, tr->max_buffer.buffer);
1379 tr->trace_buffer.buffer = tr->max_buffer.buffer;
1380 tr->max_buffer.buffer = buf;
1381 1377
1382 __update_max_tr(tr, tsk, cpu); 1378 __update_max_tr(tr, tsk, cpu);
1383 arch_spin_unlock(&tr->max_lock); 1379 arch_spin_unlock(&tr->max_lock);
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index e1c818dbc0d7..0dceb77d1d42 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -78,7 +78,8 @@ static const char * ops[] = { OPS };
78 C(TOO_MANY_PREDS, "Too many terms in predicate expression"), \ 78 C(TOO_MANY_PREDS, "Too many terms in predicate expression"), \
79 C(INVALID_FILTER, "Meaningless filter expression"), \ 79 C(INVALID_FILTER, "Meaningless filter expression"), \
80 C(IP_FIELD_ONLY, "Only 'ip' field is supported for function trace"), \ 80 C(IP_FIELD_ONLY, "Only 'ip' field is supported for function trace"), \
81 C(INVALID_VALUE, "Invalid value (did you forget quotes)?"), 81 C(INVALID_VALUE, "Invalid value (did you forget quotes)?"), \
82 C(NO_FILTER, "No filter found"),
82 83
83#undef C 84#undef C
84#define C(a, b) FILT_ERR_##a 85#define C(a, b) FILT_ERR_##a
@@ -550,6 +551,13 @@ predicate_parse(const char *str, int nr_parens, int nr_preds,
550 goto out_free; 551 goto out_free;
551 } 552 }
552 553
554 if (!N) {
555 /* No program? */
556 ret = -EINVAL;
557 parse_error(pe, FILT_ERR_NO_FILTER, ptr - str);
558 goto out_free;
559 }
560
553 prog[N].pred = NULL; /* #13 */ 561 prog[N].pred = NULL; /* #13 */
554 prog[N].target = 1; /* TRUE */ 562 prog[N].target = 1; /* TRUE */
555 prog[N+1].pred = NULL; 563 prog[N+1].pred = NULL;
diff --git a/lib/Makefile b/lib/Makefile
index 8153fdab287f..90dc5520b784 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -23,7 +23,7 @@ lib-y := ctype.o string.o vsprintf.o cmdline.o \
23 sha1.o chacha20.o irq_regs.o argv_split.o \ 23 sha1.o chacha20.o irq_regs.o argv_split.o \
24 flex_proportions.o ratelimit.o show_mem.o \ 24 flex_proportions.o ratelimit.o show_mem.o \
25 is_single_threaded.o plist.o decompress.o kobject_uevent.o \ 25 is_single_threaded.o plist.o decompress.o kobject_uevent.o \
26 earlycpio.o seq_buf.o siphash.o \ 26 earlycpio.o seq_buf.o siphash.o dec_and_lock.o \
27 nmi_backtrace.o nodemask.o win_minmax.o 27 nmi_backtrace.o nodemask.o win_minmax.o
28 28
29lib-$(CONFIG_PRINTK) += dump_stack.o 29lib-$(CONFIG_PRINTK) += dump_stack.o
@@ -95,10 +95,6 @@ obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o
95obj-$(CONFIG_DEBUG_LIST) += list_debug.o 95obj-$(CONFIG_DEBUG_LIST) += list_debug.o
96obj-$(CONFIG_DEBUG_OBJECTS) += debugobjects.o 96obj-$(CONFIG_DEBUG_OBJECTS) += debugobjects.o
97 97
98ifneq ($(CONFIG_HAVE_DEC_LOCK),y)
99 lib-y += dec_and_lock.o
100endif
101
102obj-$(CONFIG_BITREVERSE) += bitrev.o 98obj-$(CONFIG_BITREVERSE) += bitrev.o
103obj-$(CONFIG_RATIONAL) += rational.o 99obj-$(CONFIG_RATIONAL) += rational.o
104obj-$(CONFIG_CRC_CCITT) += crc-ccitt.o 100obj-$(CONFIG_CRC_CCITT) += crc-ccitt.o
diff --git a/lib/dec_and_lock.c b/lib/dec_and_lock.c
index 347fa7ac2e8a..9555b68bb774 100644
--- a/lib/dec_and_lock.c
+++ b/lib/dec_and_lock.c
@@ -33,3 +33,19 @@ int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock)
33} 33}
34 34
35EXPORT_SYMBOL(_atomic_dec_and_lock); 35EXPORT_SYMBOL(_atomic_dec_and_lock);
36
37int _atomic_dec_and_lock_irqsave(atomic_t *atomic, spinlock_t *lock,
38 unsigned long *flags)
39{
40 /* Subtract 1 from counter unless that drops it to 0 (ie. it was 1) */
41 if (atomic_add_unless(atomic, -1, 1))
42 return 0;
43
44 /* Otherwise do it the slow way */
45 spin_lock_irqsave(lock, *flags);
46 if (atomic_dec_and_test(atomic))
47 return 1;
48 spin_unlock_irqrestore(lock, *flags);
49 return 0;
50}
51EXPORT_SYMBOL(_atomic_dec_and_lock_irqsave);
diff --git a/lib/refcount.c b/lib/refcount.c
index 0eb48353abe3..d3b81cefce91 100644
--- a/lib/refcount.c
+++ b/lib/refcount.c
@@ -350,3 +350,31 @@ bool refcount_dec_and_lock(refcount_t *r, spinlock_t *lock)
350} 350}
351EXPORT_SYMBOL(refcount_dec_and_lock); 351EXPORT_SYMBOL(refcount_dec_and_lock);
352 352
353/**
354 * refcount_dec_and_lock_irqsave - return holding spinlock with disabled
355 * interrupts if able to decrement refcount to 0
356 * @r: the refcount
357 * @lock: the spinlock to be locked
358 * @flags: saved IRQ-flags if the is acquired
359 *
360 * Same as refcount_dec_and_lock() above except that the spinlock is acquired
361 * with disabled interupts.
362 *
363 * Return: true and hold spinlock if able to decrement refcount to 0, false
364 * otherwise
365 */
366bool refcount_dec_and_lock_irqsave(refcount_t *r, spinlock_t *lock,
367 unsigned long *flags)
368{
369 if (refcount_dec_not_one(r))
370 return false;
371
372 spin_lock_irqsave(lock, *flags);
373 if (!refcount_dec_and_test(r)) {
374 spin_unlock_irqrestore(lock, *flags);
375 return false;
376 }
377
378 return true;
379}
380EXPORT_SYMBOL(refcount_dec_and_lock_irqsave);
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index 347cc834c04a..2e5d3df0853d 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -359,15 +359,8 @@ static void wb_shutdown(struct bdi_writeback *wb)
359 spin_lock_bh(&wb->work_lock); 359 spin_lock_bh(&wb->work_lock);
360 if (!test_and_clear_bit(WB_registered, &wb->state)) { 360 if (!test_and_clear_bit(WB_registered, &wb->state)) {
361 spin_unlock_bh(&wb->work_lock); 361 spin_unlock_bh(&wb->work_lock);
362 /*
363 * Wait for wb shutdown to finish if someone else is just
364 * running wb_shutdown(). Otherwise we could proceed to wb /
365 * bdi destruction before wb_shutdown() is finished.
366 */
367 wait_on_bit(&wb->state, WB_shutting_down, TASK_UNINTERRUPTIBLE);
368 return; 362 return;
369 } 363 }
370 set_bit(WB_shutting_down, &wb->state);
371 spin_unlock_bh(&wb->work_lock); 364 spin_unlock_bh(&wb->work_lock);
372 365
373 cgwb_remove_from_bdi_list(wb); 366 cgwb_remove_from_bdi_list(wb);
@@ -379,12 +372,6 @@ static void wb_shutdown(struct bdi_writeback *wb)
379 mod_delayed_work(bdi_wq, &wb->dwork, 0); 372 mod_delayed_work(bdi_wq, &wb->dwork, 0);
380 flush_delayed_work(&wb->dwork); 373 flush_delayed_work(&wb->dwork);
381 WARN_ON(!list_empty(&wb->work_list)); 374 WARN_ON(!list_empty(&wb->work_list));
382 /*
383 * Make sure bit gets cleared after shutdown is finished. Matches with
384 * the barrier provided by test_and_clear_bit() above.
385 */
386 smp_wmb();
387 clear_and_wake_up_bit(WB_shutting_down, &wb->state);
388} 375}
389 376
390static void wb_exit(struct bdi_writeback *wb) 377static void wb_exit(struct bdi_writeback *wb)
@@ -508,10 +495,12 @@ static void cgwb_release_workfn(struct work_struct *work)
508 struct bdi_writeback *wb = container_of(work, struct bdi_writeback, 495 struct bdi_writeback *wb = container_of(work, struct bdi_writeback,
509 release_work); 496 release_work);
510 497
498 mutex_lock(&wb->bdi->cgwb_release_mutex);
511 wb_shutdown(wb); 499 wb_shutdown(wb);
512 500
513 css_put(wb->memcg_css); 501 css_put(wb->memcg_css);
514 css_put(wb->blkcg_css); 502 css_put(wb->blkcg_css);
503 mutex_unlock(&wb->bdi->cgwb_release_mutex);
515 504
516 fprop_local_destroy_percpu(&wb->memcg_completions); 505 fprop_local_destroy_percpu(&wb->memcg_completions);
517 percpu_ref_exit(&wb->refcnt); 506 percpu_ref_exit(&wb->refcnt);
@@ -697,6 +686,7 @@ static int cgwb_bdi_init(struct backing_dev_info *bdi)
697 686
698 INIT_RADIX_TREE(&bdi->cgwb_tree, GFP_ATOMIC); 687 INIT_RADIX_TREE(&bdi->cgwb_tree, GFP_ATOMIC);
699 bdi->cgwb_congested_tree = RB_ROOT; 688 bdi->cgwb_congested_tree = RB_ROOT;
689 mutex_init(&bdi->cgwb_release_mutex);
700 690
701 ret = wb_init(&bdi->wb, bdi, 1, GFP_KERNEL); 691 ret = wb_init(&bdi->wb, bdi, 1, GFP_KERNEL);
702 if (!ret) { 692 if (!ret) {
@@ -717,7 +707,10 @@ static void cgwb_bdi_unregister(struct backing_dev_info *bdi)
717 spin_lock_irq(&cgwb_lock); 707 spin_lock_irq(&cgwb_lock);
718 radix_tree_for_each_slot(slot, &bdi->cgwb_tree, &iter, 0) 708 radix_tree_for_each_slot(slot, &bdi->cgwb_tree, &iter, 0)
719 cgwb_kill(*slot); 709 cgwb_kill(*slot);
710 spin_unlock_irq(&cgwb_lock);
720 711
712 mutex_lock(&bdi->cgwb_release_mutex);
713 spin_lock_irq(&cgwb_lock);
721 while (!list_empty(&bdi->wb_list)) { 714 while (!list_empty(&bdi->wb_list)) {
722 wb = list_first_entry(&bdi->wb_list, struct bdi_writeback, 715 wb = list_first_entry(&bdi->wb_list, struct bdi_writeback,
723 bdi_node); 716 bdi_node);
@@ -726,6 +719,7 @@ static void cgwb_bdi_unregister(struct backing_dev_info *bdi)
726 spin_lock_irq(&cgwb_lock); 719 spin_lock_irq(&cgwb_lock);
727 } 720 }
728 spin_unlock_irq(&cgwb_lock); 721 spin_unlock_irq(&cgwb_lock);
722 mutex_unlock(&bdi->cgwb_release_mutex);
729} 723}
730 724
731/** 725/**
diff --git a/net/bpfilter/Makefile b/net/bpfilter/Makefile
index dd86b022eff0..051dc18b8ccb 100644
--- a/net/bpfilter/Makefile
+++ b/net/bpfilter/Makefile
@@ -22,7 +22,7 @@ endif
22quiet_cmd_copy_umh = GEN $@ 22quiet_cmd_copy_umh = GEN $@
23 cmd_copy_umh = echo ':' > $(obj)/.bpfilter_umh.o.cmd; \ 23 cmd_copy_umh = echo ':' > $(obj)/.bpfilter_umh.o.cmd; \
24 $(OBJCOPY) -I binary \ 24 $(OBJCOPY) -I binary \
25 `LC_ALL=C objdump -f net/bpfilter/bpfilter_umh \ 25 `LC_ALL=C $(OBJDUMP) -f net/bpfilter/bpfilter_umh \
26 |awk -F' |,' '/file format/{print "-O",$$NF} \ 26 |awk -F' |,' '/file format/{print "-O",$$NF} \
27 /^architecture:/{print "-B",$$2}'` \ 27 /^architecture:/{print "-B",$$2}'` \
28 --rename-section .data=.init.rodata $< $@ 28 --rename-section .data=.init.rodata $< $@
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c
index 8b5ba6dffac7..12877a1514e7 100644
--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -600,7 +600,7 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk,
600{ 600{
601 struct ccid3_hc_rx_sock *hc = ccid3_hc_rx_sk(sk); 601 struct ccid3_hc_rx_sock *hc = ccid3_hc_rx_sk(sk);
602 struct dccp_sock *dp = dccp_sk(sk); 602 struct dccp_sock *dp = dccp_sk(sk);
603 ktime_t now = ktime_get_real(); 603 ktime_t now = ktime_get();
604 s64 delta = 0; 604 s64 delta = 0;
605 605
606 switch (fbtype) { 606 switch (fbtype) {
@@ -625,15 +625,14 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk,
625 case CCID3_FBACK_PERIODIC: 625 case CCID3_FBACK_PERIODIC:
626 delta = ktime_us_delta(now, hc->rx_tstamp_last_feedback); 626 delta = ktime_us_delta(now, hc->rx_tstamp_last_feedback);
627 if (delta <= 0) 627 if (delta <= 0)
628 DCCP_BUG("delta (%ld) <= 0", (long)delta); 628 delta = 1;
629 else 629 hc->rx_x_recv = scaled_div32(hc->rx_bytes_recv, delta);
630 hc->rx_x_recv = scaled_div32(hc->rx_bytes_recv, delta);
631 break; 630 break;
632 default: 631 default:
633 return; 632 return;
634 } 633 }
635 634
636 ccid3_pr_debug("Interval %ldusec, X_recv=%u, 1/p=%u\n", (long)delta, 635 ccid3_pr_debug("Interval %lldusec, X_recv=%u, 1/p=%u\n", delta,
637 hc->rx_x_recv, hc->rx_pinv); 636 hc->rx_x_recv, hc->rx_pinv);
638 637
639 hc->rx_tstamp_last_feedback = now; 638 hc->rx_tstamp_last_feedback = now;
@@ -680,7 +679,8 @@ static int ccid3_hc_rx_insert_options(struct sock *sk, struct sk_buff *skb)
680static u32 ccid3_first_li(struct sock *sk) 679static u32 ccid3_first_li(struct sock *sk)
681{ 680{
682 struct ccid3_hc_rx_sock *hc = ccid3_hc_rx_sk(sk); 681 struct ccid3_hc_rx_sock *hc = ccid3_hc_rx_sk(sk);
683 u32 x_recv, p, delta; 682 u32 x_recv, p;
683 s64 delta;
684 u64 fval; 684 u64 fval;
685 685
686 if (hc->rx_rtt == 0) { 686 if (hc->rx_rtt == 0) {
@@ -688,7 +688,9 @@ static u32 ccid3_first_li(struct sock *sk)
688 hc->rx_rtt = DCCP_FALLBACK_RTT; 688 hc->rx_rtt = DCCP_FALLBACK_RTT;
689 } 689 }
690 690
691 delta = ktime_to_us(net_timedelta(hc->rx_tstamp_last_feedback)); 691 delta = ktime_us_delta(ktime_get(), hc->rx_tstamp_last_feedback);
692 if (delta <= 0)
693 delta = 1;
692 x_recv = scaled_div32(hc->rx_bytes_recv, delta); 694 x_recv = scaled_div32(hc->rx_bytes_recv, delta);
693 if (x_recv == 0) { /* would also trigger divide-by-zero */ 695 if (x_recv == 0) { /* would also trigger divide-by-zero */
694 DCCP_WARN("X_recv==0\n"); 696 DCCP_WARN("X_recv==0\n");
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index 975021df7c1c..c0c74088f2af 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -2082,7 +2082,8 @@ void ipv6_mc_dad_complete(struct inet6_dev *idev)
2082 mld_send_initial_cr(idev); 2082 mld_send_initial_cr(idev);
2083 idev->mc_dad_count--; 2083 idev->mc_dad_count--;
2084 if (idev->mc_dad_count) 2084 if (idev->mc_dad_count)
2085 mld_dad_start_timer(idev, idev->mc_maxdelay); 2085 mld_dad_start_timer(idev,
2086 unsolicited_report_interval(idev));
2086 } 2087 }
2087} 2088}
2088 2089
@@ -2094,7 +2095,8 @@ static void mld_dad_timer_expire(struct timer_list *t)
2094 if (idev->mc_dad_count) { 2095 if (idev->mc_dad_count) {
2095 idev->mc_dad_count--; 2096 idev->mc_dad_count--;
2096 if (idev->mc_dad_count) 2097 if (idev->mc_dad_count)
2097 mld_dad_start_timer(idev, idev->mc_maxdelay); 2098 mld_dad_start_timer(idev,
2099 unsolicited_report_interval(idev));
2098 } 2100 }
2099 in6_dev_put(idev); 2101 in6_dev_put(idev);
2100} 2102}
@@ -2452,7 +2454,8 @@ static void mld_ifc_timer_expire(struct timer_list *t)
2452 if (idev->mc_ifc_count) { 2454 if (idev->mc_ifc_count) {
2453 idev->mc_ifc_count--; 2455 idev->mc_ifc_count--;
2454 if (idev->mc_ifc_count) 2456 if (idev->mc_ifc_count)
2455 mld_ifc_start_timer(idev, idev->mc_maxdelay); 2457 mld_ifc_start_timer(idev,
2458 unsolicited_report_interval(idev));
2456 } 2459 }
2457 in6_dev_put(idev); 2460 in6_dev_put(idev);
2458} 2461}
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 50809748c127..ff8e7e245c37 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -2262,6 +2262,13 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
2262 if (po->stats.stats1.tp_drops) 2262 if (po->stats.stats1.tp_drops)
2263 status |= TP_STATUS_LOSING; 2263 status |= TP_STATUS_LOSING;
2264 } 2264 }
2265
2266 if (do_vnet &&
2267 virtio_net_hdr_from_skb(skb, h.raw + macoff -
2268 sizeof(struct virtio_net_hdr),
2269 vio_le(), true, 0))
2270 goto drop_n_account;
2271
2265 po->stats.stats1.tp_packets++; 2272 po->stats.stats1.tp_packets++;
2266 if (copy_skb) { 2273 if (copy_skb) {
2267 status |= TP_STATUS_COPY; 2274 status |= TP_STATUS_COPY;
@@ -2269,15 +2276,6 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
2269 } 2276 }
2270 spin_unlock(&sk->sk_receive_queue.lock); 2277 spin_unlock(&sk->sk_receive_queue.lock);
2271 2278
2272 if (do_vnet) {
2273 if (virtio_net_hdr_from_skb(skb, h.raw + macoff -
2274 sizeof(struct virtio_net_hdr),
2275 vio_le(), true, 0)) {
2276 spin_lock(&sk->sk_receive_queue.lock);
2277 goto drop_n_account;
2278 }
2279 }
2280
2281 skb_copy_bits(skb, 0, h.raw + macoff, snaplen); 2279 skb_copy_bits(skb, 0, h.raw + macoff, snaplen);
2282 2280
2283 if (!(ts_status = tpacket_get_timestamp(skb, &ts, po->tp_tstamp))) 2281 if (!(ts_status = tpacket_get_timestamp(skb, &ts, po->tp_tstamp)))
diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index 2b5be42a9f1c..9e8b26a80fb3 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -66,7 +66,7 @@ struct fl_flow_mask {
66 struct rhashtable_params filter_ht_params; 66 struct rhashtable_params filter_ht_params;
67 struct flow_dissector dissector; 67 struct flow_dissector dissector;
68 struct list_head filters; 68 struct list_head filters;
69 struct rcu_head rcu; 69 struct rcu_work rwork;
70 struct list_head list; 70 struct list_head list;
71}; 71};
72 72
@@ -203,6 +203,20 @@ static int fl_init(struct tcf_proto *tp)
203 return rhashtable_init(&head->ht, &mask_ht_params); 203 return rhashtable_init(&head->ht, &mask_ht_params);
204} 204}
205 205
206static void fl_mask_free(struct fl_flow_mask *mask)
207{
208 rhashtable_destroy(&mask->ht);
209 kfree(mask);
210}
211
212static void fl_mask_free_work(struct work_struct *work)
213{
214 struct fl_flow_mask *mask = container_of(to_rcu_work(work),
215 struct fl_flow_mask, rwork);
216
217 fl_mask_free(mask);
218}
219
206static bool fl_mask_put(struct cls_fl_head *head, struct fl_flow_mask *mask, 220static bool fl_mask_put(struct cls_fl_head *head, struct fl_flow_mask *mask,
207 bool async) 221 bool async)
208{ 222{
@@ -210,12 +224,11 @@ static bool fl_mask_put(struct cls_fl_head *head, struct fl_flow_mask *mask,
210 return false; 224 return false;
211 225
212 rhashtable_remove_fast(&head->ht, &mask->ht_node, mask_ht_params); 226 rhashtable_remove_fast(&head->ht, &mask->ht_node, mask_ht_params);
213 rhashtable_destroy(&mask->ht);
214 list_del_rcu(&mask->list); 227 list_del_rcu(&mask->list);
215 if (async) 228 if (async)
216 kfree_rcu(mask, rcu); 229 tcf_queue_work(&mask->rwork, fl_mask_free_work);
217 else 230 else
218 kfree(mask); 231 fl_mask_free(mask);
219 232
220 return true; 233 return true;
221} 234}
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c
index 3ae9877ea205..3278a76f6861 100644
--- a/net/sched/sch_hfsc.c
+++ b/net/sched/sch_hfsc.c
@@ -1385,8 +1385,8 @@ hfsc_schedule_watchdog(struct Qdisc *sch)
1385 if (next_time == 0 || next_time > q->root.cl_cfmin) 1385 if (next_time == 0 || next_time > q->root.cl_cfmin)
1386 next_time = q->root.cl_cfmin; 1386 next_time = q->root.cl_cfmin;
1387 } 1387 }
1388 WARN_ON(next_time == 0); 1388 if (next_time)
1389 qdisc_watchdog_schedule(&q->watchdog, next_time); 1389 qdisc_watchdog_schedule(&q->watchdog, next_time);
1390} 1390}
1391 1391
1392static int 1392static int
diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c
index 79daa98208c3..bfb9f812e2ef 100644
--- a/net/sctp/chunk.c
+++ b/net/sctp/chunk.c
@@ -237,7 +237,9 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,
237 /* Account for a different sized first fragment */ 237 /* Account for a different sized first fragment */
238 if (msg_len >= first_len) { 238 if (msg_len >= first_len) {
239 msg->can_delay = 0; 239 msg->can_delay = 0;
240 SCTP_INC_STATS(sock_net(asoc->base.sk), SCTP_MIB_FRAGUSRMSGS); 240 if (msg_len > first_len)
241 SCTP_INC_STATS(sock_net(asoc->base.sk),
242 SCTP_MIB_FRAGUSRMSGS);
241 } else { 243 } else {
242 /* Which may be the only one... */ 244 /* Which may be the only one... */
243 first_len = msg_len; 245 first_len = msg_len;
diff --git a/net/strparser/strparser.c b/net/strparser/strparser.c
index 1a9695183599..373836615c57 100644
--- a/net/strparser/strparser.c
+++ b/net/strparser/strparser.c
@@ -392,7 +392,7 @@ static int strp_read_sock(struct strparser *strp)
392/* Lower sock lock held */ 392/* Lower sock lock held */
393void strp_data_ready(struct strparser *strp) 393void strp_data_ready(struct strparser *strp)
394{ 394{
395 if (unlikely(strp->stopped)) 395 if (unlikely(strp->stopped) || strp->paused)
396 return; 396 return;
397 397
398 /* This check is needed to synchronize with do_strp_work. 398 /* This check is needed to synchronize with do_strp_work.
@@ -407,9 +407,6 @@ void strp_data_ready(struct strparser *strp)
407 return; 407 return;
408 } 408 }
409 409
410 if (strp->paused)
411 return;
412
413 if (strp->need_bytes) { 410 if (strp->need_bytes) {
414 if (strp_peek_len(strp) < strp->need_bytes) 411 if (strp_peek_len(strp) < strp->need_bytes)
415 return; 412 return;
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 3c85af058227..3fabf9f6a0f9 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -987,8 +987,6 @@ bool xprt_prepare_transmit(struct rpc_task *task)
987 task->tk_status = -EAGAIN; 987 task->tk_status = -EAGAIN;
988 goto out_unlock; 988 goto out_unlock;
989 } 989 }
990 if (!bc_prealloc(req) && !req->rq_xmit_bytes_sent)
991 req->rq_xid = xprt_alloc_xid(xprt);
992 ret = true; 990 ret = true;
993out_unlock: 991out_unlock:
994 spin_unlock_bh(&xprt->transport_lock); 992 spin_unlock_bh(&xprt->transport_lock);
@@ -1298,7 +1296,12 @@ void xprt_retry_reserve(struct rpc_task *task)
1298 1296
1299static inline __be32 xprt_alloc_xid(struct rpc_xprt *xprt) 1297static inline __be32 xprt_alloc_xid(struct rpc_xprt *xprt)
1300{ 1298{
1301 return (__force __be32)xprt->xid++; 1299 __be32 xid;
1300
1301 spin_lock(&xprt->reserve_lock);
1302 xid = (__force __be32)xprt->xid++;
1303 spin_unlock(&xprt->reserve_lock);
1304 return xid;
1302} 1305}
1303 1306
1304static inline void xprt_init_xid(struct rpc_xprt *xprt) 1307static inline void xprt_init_xid(struct rpc_xprt *xprt)
@@ -1316,6 +1319,7 @@ void xprt_request_init(struct rpc_task *task)
1316 req->rq_task = task; 1319 req->rq_task = task;
1317 req->rq_xprt = xprt; 1320 req->rq_xprt = xprt;
1318 req->rq_buffer = NULL; 1321 req->rq_buffer = NULL;
1322 req->rq_xid = xprt_alloc_xid(xprt);
1319 req->rq_connect_cookie = xprt->connect_cookie - 1; 1323 req->rq_connect_cookie = xprt->connect_cookie - 1;
1320 req->rq_bytes_sent = 0; 1324 req->rq_bytes_sent = 0;
1321 req->rq_snd_buf.len = 0; 1325 req->rq_snd_buf.len = 0;
diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
index 8e03bd3f3668..5d3cce9e8744 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -201,7 +201,7 @@ virtio_transport_send_pkt(struct virtio_vsock_pkt *pkt)
201 return -ENODEV; 201 return -ENODEV;
202 } 202 }
203 203
204 if (le32_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) 204 if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid)
205 return virtio_transport_send_pkt_loopback(vsock, pkt); 205 return virtio_transport_send_pkt_loopback(vsock, pkt);
206 206
207 if (pkt->reply) 207 if (pkt->reply)
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 34d9e9ce97c2..e7889f486ca1 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -239,6 +239,7 @@ cmd_record_mcount = \
239 "$(CC_FLAGS_FTRACE)" ]; then \ 239 "$(CC_FLAGS_FTRACE)" ]; then \
240 $(sub_cmd_record_mcount) \ 240 $(sub_cmd_record_mcount) \
241 fi; 241 fi;
242endif # -record-mcount
242endif # CONFIG_FTRACE_MCOUNT_RECORD 243endif # CONFIG_FTRACE_MCOUNT_RECORD
243 244
244ifdef CONFIG_STACK_VALIDATION 245ifdef CONFIG_STACK_VALIDATION
@@ -263,7 +264,6 @@ ifneq ($(RETPOLINE_CFLAGS),)
263 objtool_args += --retpoline 264 objtool_args += --retpoline
264endif 265endif
265endif 266endif
266endif
267 267
268 268
269ifdef CONFIG_MODVERSIONS 269ifdef CONFIG_MODVERSIONS
diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index 38047c6aa575..f4a25bd1871f 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -164,6 +164,7 @@ static int __dead_end_function(struct objtool_file *file, struct symbol *func,
164 "lbug_with_loc", 164 "lbug_with_loc",
165 "fortify_panic", 165 "fortify_panic",
166 "usercopy_abort", 166 "usercopy_abort",
167 "machine_real_restart",
167 }; 168 };
168 169
169 if (func->bind == STB_WEAK) 170 if (func->bind == STB_WEAK)
diff --git a/tools/perf/Documentation/perf-stat.txt b/tools/perf/Documentation/perf-stat.txt
index 5dfe102fb5b5..b10a90b6a718 100644
--- a/tools/perf/Documentation/perf-stat.txt
+++ b/tools/perf/Documentation/perf-stat.txt
@@ -178,6 +178,9 @@ Print count deltas for fixed number of times.
178This option should be used together with "-I" option. 178This option should be used together with "-I" option.
179 example: 'perf stat -I 1000 --interval-count 2 -e cycles -a' 179 example: 'perf stat -I 1000 --interval-count 2 -e cycles -a'
180 180
181--interval-clear::
182Clear the screen before next interval.
183
181--timeout msecs:: 184--timeout msecs::
182Stop the 'perf stat' session and print count deltas after N milliseconds (minimum: 10 ms). 185Stop the 'perf stat' session and print count deltas after N milliseconds (minimum: 10 ms).
183This option is not supported with the "-I" option. 186This option is not supported with the "-I" option.
diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
index 307b3594525f..6a8738f7ead3 100644
--- a/tools/perf/builtin-c2c.c
+++ b/tools/perf/builtin-c2c.c
@@ -56,16 +56,16 @@ struct c2c_hist_entry {
56 56
57 struct compute_stats cstats; 57 struct compute_stats cstats;
58 58
59 unsigned long paddr;
60 unsigned long paddr_cnt;
61 bool paddr_zero;
62 char *nodestr;
63
59 /* 64 /*
60 * must be at the end, 65 * must be at the end,
61 * because of its callchain dynamic entry 66 * because of its callchain dynamic entry
62 */ 67 */
63 struct hist_entry he; 68 struct hist_entry he;
64
65 unsigned long paddr;
66 unsigned long paddr_cnt;
67 bool paddr_zero;
68 char *nodestr;
69}; 69};
70 70
71static char const *coalesce_default = "pid,iaddr"; 71static char const *coalesce_default = "pid,iaddr";
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index b3bf35512d21..a31d7082188e 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -180,6 +180,18 @@ static struct {
180 PERF_OUTPUT_EVNAME | PERF_OUTPUT_TRACE 180 PERF_OUTPUT_EVNAME | PERF_OUTPUT_TRACE
181 }, 181 },
182 182
183 [PERF_TYPE_HW_CACHE] = {
184 .user_set = false,
185
186 .fields = PERF_OUTPUT_COMM | PERF_OUTPUT_TID |
187 PERF_OUTPUT_CPU | PERF_OUTPUT_TIME |
188 PERF_OUTPUT_EVNAME | PERF_OUTPUT_IP |
189 PERF_OUTPUT_SYM | PERF_OUTPUT_SYMOFFSET |
190 PERF_OUTPUT_DSO | PERF_OUTPUT_PERIOD,
191
192 .invalid_fields = PERF_OUTPUT_TRACE | PERF_OUTPUT_BPF_OUTPUT,
193 },
194
183 [PERF_TYPE_RAW] = { 195 [PERF_TYPE_RAW] = {
184 .user_set = false, 196 .user_set = false,
185 197
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 096ccb25c11f..22547a490e1f 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -65,6 +65,7 @@
65#include "util/tool.h" 65#include "util/tool.h"
66#include "util/string2.h" 66#include "util/string2.h"
67#include "util/metricgroup.h" 67#include "util/metricgroup.h"
68#include "util/top.h"
68#include "asm/bug.h" 69#include "asm/bug.h"
69 70
70#include <linux/time64.h> 71#include <linux/time64.h>
@@ -144,6 +145,8 @@ static struct target target = {
144 145
145typedef int (*aggr_get_id_t)(struct cpu_map *m, int cpu); 146typedef int (*aggr_get_id_t)(struct cpu_map *m, int cpu);
146 147
148#define METRIC_ONLY_LEN 20
149
147static int run_count = 1; 150static int run_count = 1;
148static bool no_inherit = false; 151static bool no_inherit = false;
149static volatile pid_t child_pid = -1; 152static volatile pid_t child_pid = -1;
@@ -173,6 +176,7 @@ static struct cpu_map *aggr_map;
173static aggr_get_id_t aggr_get_id; 176static aggr_get_id_t aggr_get_id;
174static bool append_file; 177static bool append_file;
175static bool interval_count; 178static bool interval_count;
179static bool interval_clear;
176static const char *output_name; 180static const char *output_name;
177static int output_fd; 181static int output_fd;
178static int print_free_counters_hint; 182static int print_free_counters_hint;
@@ -180,6 +184,7 @@ static int print_mixed_hw_group_error;
180static u64 *walltime_run; 184static u64 *walltime_run;
181static bool ru_display = false; 185static bool ru_display = false;
182static struct rusage ru_data; 186static struct rusage ru_data;
187static unsigned int metric_only_len = METRIC_ONLY_LEN;
183 188
184struct perf_stat { 189struct perf_stat {
185 bool record; 190 bool record;
@@ -967,8 +972,6 @@ static void print_metric_csv(void *ctx,
967 fprintf(out, "%s%s%s%s", csv_sep, vals, csv_sep, unit); 972 fprintf(out, "%s%s%s%s", csv_sep, vals, csv_sep, unit);
968} 973}
969 974
970#define METRIC_ONLY_LEN 20
971
972/* Filter out some columns that don't work well in metrics only mode */ 975/* Filter out some columns that don't work well in metrics only mode */
973 976
974static bool valid_only_metric(const char *unit) 977static bool valid_only_metric(const char *unit)
@@ -999,22 +1002,20 @@ static void print_metric_only(void *ctx, const char *color, const char *fmt,
999{ 1002{
1000 struct outstate *os = ctx; 1003 struct outstate *os = ctx;
1001 FILE *out = os->fh; 1004 FILE *out = os->fh;
1002 int n; 1005 char buf[1024], str[1024];
1003 char buf[1024]; 1006 unsigned mlen = metric_only_len;
1004 unsigned mlen = METRIC_ONLY_LEN;
1005 1007
1006 if (!valid_only_metric(unit)) 1008 if (!valid_only_metric(unit))
1007 return; 1009 return;
1008 unit = fixunit(buf, os->evsel, unit); 1010 unit = fixunit(buf, os->evsel, unit);
1009 if (color)
1010 n = color_fprintf(out, color, fmt, val);
1011 else
1012 n = fprintf(out, fmt, val);
1013 if (n > METRIC_ONLY_LEN)
1014 n = METRIC_ONLY_LEN;
1015 if (mlen < strlen(unit)) 1011 if (mlen < strlen(unit))
1016 mlen = strlen(unit) + 1; 1012 mlen = strlen(unit) + 1;
1017 fprintf(out, "%*s", mlen - n, ""); 1013
1014 if (color)
1015 mlen += strlen(color) + sizeof(PERF_COLOR_RESET) - 1;
1016
1017 color_snprintf(str, sizeof(str), color ?: "", fmt, val);
1018 fprintf(out, "%*s ", mlen, str);
1018} 1019}
1019 1020
1020static void print_metric_only_csv(void *ctx, const char *color __maybe_unused, 1021static void print_metric_only_csv(void *ctx, const char *color __maybe_unused,
@@ -1054,7 +1055,7 @@ static void print_metric_header(void *ctx, const char *color __maybe_unused,
1054 if (csv_output) 1055 if (csv_output)
1055 fprintf(os->fh, "%s%s", unit, csv_sep); 1056 fprintf(os->fh, "%s%s", unit, csv_sep);
1056 else 1057 else
1057 fprintf(os->fh, "%-*s ", METRIC_ONLY_LEN, unit); 1058 fprintf(os->fh, "%*s ", metric_only_len, unit);
1058} 1059}
1059 1060
1060static void nsec_printout(int id, int nr, struct perf_evsel *evsel, double avg) 1061static void nsec_printout(int id, int nr, struct perf_evsel *evsel, double avg)
@@ -1704,9 +1705,12 @@ static void print_interval(char *prefix, struct timespec *ts)
1704 FILE *output = stat_config.output; 1705 FILE *output = stat_config.output;
1705 static int num_print_interval; 1706 static int num_print_interval;
1706 1707
1708 if (interval_clear)
1709 puts(CONSOLE_CLEAR);
1710
1707 sprintf(prefix, "%6lu.%09lu%s", ts->tv_sec, ts->tv_nsec, csv_sep); 1711 sprintf(prefix, "%6lu.%09lu%s", ts->tv_sec, ts->tv_nsec, csv_sep);
1708 1712
1709 if (num_print_interval == 0 && !csv_output) { 1713 if ((num_print_interval == 0 && !csv_output) || interval_clear) {
1710 switch (stat_config.aggr_mode) { 1714 switch (stat_config.aggr_mode) {
1711 case AGGR_SOCKET: 1715 case AGGR_SOCKET:
1712 fprintf(output, "# time socket cpus"); 1716 fprintf(output, "# time socket cpus");
@@ -1719,7 +1723,7 @@ static void print_interval(char *prefix, struct timespec *ts)
1719 fprintf(output, " counts %*s events\n", unit_width, "unit"); 1723 fprintf(output, " counts %*s events\n", unit_width, "unit");
1720 break; 1724 break;
1721 case AGGR_NONE: 1725 case AGGR_NONE:
1722 fprintf(output, "# time CPU"); 1726 fprintf(output, "# time CPU ");
1723 if (!metric_only) 1727 if (!metric_only)
1724 fprintf(output, " counts %*s events\n", unit_width, "unit"); 1728 fprintf(output, " counts %*s events\n", unit_width, "unit");
1725 break; 1729 break;
@@ -1738,7 +1742,7 @@ static void print_interval(char *prefix, struct timespec *ts)
1738 } 1742 }
1739 } 1743 }
1740 1744
1741 if (num_print_interval == 0 && metric_only) 1745 if ((num_print_interval == 0 && metric_only) || interval_clear)
1742 print_metric_headers(" ", true); 1746 print_metric_headers(" ", true);
1743 if (++num_print_interval == 25) 1747 if (++num_print_interval == 25)
1744 num_print_interval = 0; 1748 num_print_interval = 0;
@@ -2057,6 +2061,8 @@ static const struct option stat_options[] = {
2057 "(overhead is possible for values <= 100ms)"), 2061 "(overhead is possible for values <= 100ms)"),
2058 OPT_INTEGER(0, "interval-count", &stat_config.times, 2062 OPT_INTEGER(0, "interval-count", &stat_config.times,
2059 "print counts for fixed number of times"), 2063 "print counts for fixed number of times"),
2064 OPT_BOOLEAN(0, "interval-clear", &interval_clear,
2065 "clear screen in between new interval"),
2060 OPT_UINTEGER(0, "timeout", &stat_config.timeout, 2066 OPT_UINTEGER(0, "timeout", &stat_config.timeout,
2061 "stop workload and print counts after a timeout period in ms (>= 10ms)"), 2067 "stop workload and print counts after a timeout period in ms (>= 10ms)"),
2062 OPT_SET_UINT(0, "per-socket", &stat_config.aggr_mode, 2068 OPT_SET_UINT(0, "per-socket", &stat_config.aggr_mode,
@@ -2436,14 +2442,13 @@ static int add_default_attributes(void)
2436 (PERF_COUNT_HW_CACHE_OP_PREFETCH << 8) | 2442 (PERF_COUNT_HW_CACHE_OP_PREFETCH << 8) |
2437 (PERF_COUNT_HW_CACHE_RESULT_MISS << 16) }, 2443 (PERF_COUNT_HW_CACHE_RESULT_MISS << 16) },
2438}; 2444};
2445 struct parse_events_error errinfo;
2439 2446
2440 /* Set attrs if no event is selected and !null_run: */ 2447 /* Set attrs if no event is selected and !null_run: */
2441 if (null_run) 2448 if (null_run)
2442 return 0; 2449 return 0;
2443 2450
2444 if (transaction_run) { 2451 if (transaction_run) {
2445 struct parse_events_error errinfo;
2446
2447 if (pmu_have_event("cpu", "cycles-ct") && 2452 if (pmu_have_event("cpu", "cycles-ct") &&
2448 pmu_have_event("cpu", "el-start")) 2453 pmu_have_event("cpu", "el-start"))
2449 err = parse_events(evsel_list, transaction_attrs, 2454 err = parse_events(evsel_list, transaction_attrs,
@@ -2454,6 +2459,7 @@ static int add_default_attributes(void)
2454 &errinfo); 2459 &errinfo);
2455 if (err) { 2460 if (err) {
2456 fprintf(stderr, "Cannot set up transaction events\n"); 2461 fprintf(stderr, "Cannot set up transaction events\n");
2462 parse_events_print_error(&errinfo, transaction_attrs);
2457 return -1; 2463 return -1;
2458 } 2464 }
2459 return 0; 2465 return 0;
@@ -2479,10 +2485,11 @@ static int add_default_attributes(void)
2479 pmu_have_event("msr", "smi")) { 2485 pmu_have_event("msr", "smi")) {
2480 if (!force_metric_only) 2486 if (!force_metric_only)
2481 metric_only = true; 2487 metric_only = true;
2482 err = parse_events(evsel_list, smi_cost_attrs, NULL); 2488 err = parse_events(evsel_list, smi_cost_attrs, &errinfo);
2483 } else { 2489 } else {
2484 fprintf(stderr, "To measure SMI cost, it needs " 2490 fprintf(stderr, "To measure SMI cost, it needs "
2485 "msr/aperf/, msr/smi/ and cpu/cycles/ support\n"); 2491 "msr/aperf/, msr/smi/ and cpu/cycles/ support\n");
2492 parse_events_print_error(&errinfo, smi_cost_attrs);
2486 return -1; 2493 return -1;
2487 } 2494 }
2488 if (err) { 2495 if (err) {
@@ -2517,12 +2524,13 @@ static int add_default_attributes(void)
2517 if (topdown_attrs[0] && str) { 2524 if (topdown_attrs[0] && str) {
2518 if (warn) 2525 if (warn)
2519 arch_topdown_group_warn(); 2526 arch_topdown_group_warn();
2520 err = parse_events(evsel_list, str, NULL); 2527 err = parse_events(evsel_list, str, &errinfo);
2521 if (err) { 2528 if (err) {
2522 fprintf(stderr, 2529 fprintf(stderr,
2523 "Cannot set up top down events %s: %d\n", 2530 "Cannot set up top down events %s: %d\n",
2524 str, err); 2531 str, err);
2525 free(str); 2532 free(str);
2533 parse_events_print_error(&errinfo, str);
2526 return -1; 2534 return -1;
2527 } 2535 }
2528 } else { 2536 } else {
diff --git a/tools/perf/ui/gtk/hists.c b/tools/perf/ui/gtk/hists.c
index b085f1b3e34d..4ab663ec3e5e 100644
--- a/tools/perf/ui/gtk/hists.c
+++ b/tools/perf/ui/gtk/hists.c
@@ -382,7 +382,7 @@ static void perf_gtk__show_hists(GtkWidget *window, struct hists *hists,
382 gtk_tree_store_set(store, &iter, col_idx++, s, -1); 382 gtk_tree_store_set(store, &iter, col_idx++, s, -1);
383 } 383 }
384 384
385 if (hists__has_callchains(hists) && 385 if (hist_entry__has_callchains(h) &&
386 symbol_conf.use_callchain && hists__has(hists, sym)) { 386 symbol_conf.use_callchain && hists__has(hists, sym)) {
387 if (callchain_param.mode == CHAIN_GRAPH_REL) 387 if (callchain_param.mode == CHAIN_GRAPH_REL)
388 total = symbol_conf.cumulate_callchain ? 388 total = symbol_conf.cumulate_callchain ?
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index 52e8fda93a47..828cb9794c76 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -370,9 +370,11 @@ void hists__delete_entries(struct hists *hists)
370 370
371static int hist_entry__init(struct hist_entry *he, 371static int hist_entry__init(struct hist_entry *he,
372 struct hist_entry *template, 372 struct hist_entry *template,
373 bool sample_self) 373 bool sample_self,
374 size_t callchain_size)
374{ 375{
375 *he = *template; 376 *he = *template;
377 he->callchain_size = callchain_size;
376 378
377 if (symbol_conf.cumulate_callchain) { 379 if (symbol_conf.cumulate_callchain) {
378 he->stat_acc = malloc(sizeof(he->stat)); 380 he->stat_acc = malloc(sizeof(he->stat));
@@ -473,7 +475,7 @@ static struct hist_entry *hist_entry__new(struct hist_entry *template,
473 475
474 he = ops->new(callchain_size); 476 he = ops->new(callchain_size);
475 if (he) { 477 if (he) {
476 err = hist_entry__init(he, template, sample_self); 478 err = hist_entry__init(he, template, sample_self, callchain_size);
477 if (err) { 479 if (err) {
478 ops->free(he); 480 ops->free(he);
479 he = NULL; 481 he = NULL;
@@ -619,9 +621,11 @@ __hists__add_entry(struct hists *hists,
619 .raw_data = sample->raw_data, 621 .raw_data = sample->raw_data,
620 .raw_size = sample->raw_size, 622 .raw_size = sample->raw_size,
621 .ops = ops, 623 .ops = ops,
622 }; 624 }, *he = hists__findnew_entry(hists, &entry, al, sample_self);
623 625
624 return hists__findnew_entry(hists, &entry, al, sample_self); 626 if (!hists->has_callchains && he && he->callchain_size != 0)
627 hists->has_callchains = true;
628 return he;
625} 629}
626 630
627struct hist_entry *hists__add_entry(struct hists *hists, 631struct hist_entry *hists__add_entry(struct hists *hists,
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index 06607c434949..73049f7f0f60 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -85,6 +85,7 @@ struct hists {
85 struct events_stats stats; 85 struct events_stats stats;
86 u64 event_stream; 86 u64 event_stream;
87 u16 col_len[HISTC_NR_COLS]; 87 u16 col_len[HISTC_NR_COLS];
88 bool has_callchains;
88 int socket_filter; 89 int socket_filter;
89 struct perf_hpp_list *hpp_list; 90 struct perf_hpp_list *hpp_list;
90 struct list_head hpp_formats; 91 struct list_head hpp_formats;
@@ -222,8 +223,7 @@ static inline struct hists *evsel__hists(struct perf_evsel *evsel)
222 223
223static __pure inline bool hists__has_callchains(struct hists *hists) 224static __pure inline bool hists__has_callchains(struct hists *hists)
224{ 225{
225 const struct perf_evsel *evsel = hists_to_evsel(hists); 226 return hists->has_callchains;
226 return evsel__has_callchain(evsel);
227} 227}
228 228
229int hists__init(void); 229int hists__init(void);
diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
index 155d2570274f..da8fe57691b8 100644
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -227,11 +227,16 @@ event_def: event_pmu |
227event_pmu: 227event_pmu:
228PE_NAME opt_pmu_config 228PE_NAME opt_pmu_config
229{ 229{
230 struct parse_events_state *parse_state = _parse_state;
231 struct parse_events_error *error = parse_state->error;
230 struct list_head *list, *orig_terms, *terms; 232 struct list_head *list, *orig_terms, *terms;
231 233
232 if (parse_events_copy_term_list($2, &orig_terms)) 234 if (parse_events_copy_term_list($2, &orig_terms))
233 YYABORT; 235 YYABORT;
234 236
237 if (error)
238 error->idx = @1.first_column;
239
235 ALLOC_LIST(list); 240 ALLOC_LIST(list);
236 if (parse_events_add_pmu(_parse_state, list, $1, $2, false, false)) { 241 if (parse_events_add_pmu(_parse_state, list, $1, $2, false, false)) {
237 struct perf_pmu *pmu = NULL; 242 struct perf_pmu *pmu = NULL;
diff --git a/tools/perf/util/sort.h b/tools/perf/util/sort.h
index 7cf2d5cc038e..8bf302cafcec 100644
--- a/tools/perf/util/sort.h
+++ b/tools/perf/util/sort.h
@@ -112,6 +112,8 @@ struct hist_entry {
112 112
113 char level; 113 char level;
114 u8 filtered; 114 u8 filtered;
115
116 u16 callchain_size;
115 union { 117 union {
116 /* 118 /*
117 * Since perf diff only supports the stdio output, TUI 119 * Since perf diff only supports the stdio output, TUI
@@ -153,7 +155,7 @@ struct hist_entry {
153 155
154static __pure inline bool hist_entry__has_callchains(struct hist_entry *he) 156static __pure inline bool hist_entry__has_callchains(struct hist_entry *he)
155{ 157{
156 return hists__has_callchains(he->hists); 158 return he->callchain_size != 0;
157} 159}
158 160
159static inline bool hist_entry__has_pairs(struct hist_entry *he) 161static inline bool hist_entry__has_pairs(struct hist_entry *he)
diff --git a/tools/power/x86/turbostat/turbostat.8 b/tools/power/x86/turbostat/turbostat.8
index ca9ef7017624..d39e4ff7d0bf 100644
--- a/tools/power/x86/turbostat/turbostat.8
+++ b/tools/power/x86/turbostat/turbostat.8
@@ -56,7 +56,7 @@ name as necessary to disambiguate it from others is necessary. Note that option
56.PP 56.PP
57\fB--hide column\fP do not show the specified built-in columns. May be invoked multiple times, or with a comma-separated list of column names. Use "--hide sysfs" to hide the sysfs statistics columns as a group. 57\fB--hide column\fP do not show the specified built-in columns. May be invoked multiple times, or with a comma-separated list of column names. Use "--hide sysfs" to hide the sysfs statistics columns as a group.
58.PP 58.PP
59\fB--enable column\fP show the specified built-in columns, which are otherwise disabled, by default. Currently the only built-in counters disabled by default are "usec" and "Time_Of_Day_Seconds". 59\fB--enable column\fP show the specified built-in columns, which are otherwise disabled, by default. Currently the only built-in counters disabled by default are "usec", "Time_Of_Day_Seconds", "APIC" and "X2APIC".
60The column name "all" can be used to enable all disabled-by-default built-in counters. 60The column name "all" can be used to enable all disabled-by-default built-in counters.
61.PP 61.PP
62\fB--show column\fP show only the specified built-in columns. May be invoked multiple times, or with a comma-separated list of column names. Use "--show sysfs" to show the sysfs statistics columns as a group. 62\fB--show column\fP show only the specified built-in columns. May be invoked multiple times, or with a comma-separated list of column names. Use "--show sysfs" to show the sysfs statistics columns as a group.
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index d6cff3070ebd..4d14bbbf9b63 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -109,6 +109,7 @@ unsigned int has_hwp_activity_window; /* IA32_HWP_REQUEST[bits 41:32] */
109unsigned int has_hwp_epp; /* IA32_HWP_REQUEST[bits 31:24] */ 109unsigned int has_hwp_epp; /* IA32_HWP_REQUEST[bits 31:24] */
110unsigned int has_hwp_pkg; /* IA32_HWP_REQUEST_PKG */ 110unsigned int has_hwp_pkg; /* IA32_HWP_REQUEST_PKG */
111unsigned int has_misc_feature_control; 111unsigned int has_misc_feature_control;
112unsigned int first_counter_read = 1;
112 113
113#define RAPL_PKG (1 << 0) 114#define RAPL_PKG (1 << 0)
114 /* 0x610 MSR_PKG_POWER_LIMIT */ 115 /* 0x610 MSR_PKG_POWER_LIMIT */
@@ -170,6 +171,8 @@ struct thread_data {
170 unsigned long long irq_count; 171 unsigned long long irq_count;
171 unsigned int smi_count; 172 unsigned int smi_count;
172 unsigned int cpu_id; 173 unsigned int cpu_id;
174 unsigned int apic_id;
175 unsigned int x2apic_id;
173 unsigned int flags; 176 unsigned int flags;
174#define CPU_IS_FIRST_THREAD_IN_CORE 0x2 177#define CPU_IS_FIRST_THREAD_IN_CORE 0x2
175#define CPU_IS_FIRST_CORE_IN_PACKAGE 0x4 178#define CPU_IS_FIRST_CORE_IN_PACKAGE 0x4
@@ -381,19 +384,23 @@ int get_msr(int cpu, off_t offset, unsigned long long *msr)
381} 384}
382 385
383/* 386/*
384 * Each string in this array is compared in --show and --hide cmdline. 387 * This list matches the column headers, except
385 * Thus, strings that are proper sub-sets must follow their more specific peers. 388 * 1. built-in only, the sysfs counters are not here -- we learn of those at run-time
389 * 2. Core and CPU are moved to the end, we can't have strings that contain them
390 * matching on them for --show and --hide.
386 */ 391 */
387struct msr_counter bic[] = { 392struct msr_counter bic[] = {
388 { 0x0, "usec" }, 393 { 0x0, "usec" },
389 { 0x0, "Time_Of_Day_Seconds" }, 394 { 0x0, "Time_Of_Day_Seconds" },
390 { 0x0, "Package" }, 395 { 0x0, "Package" },
396 { 0x0, "Node" },
391 { 0x0, "Avg_MHz" }, 397 { 0x0, "Avg_MHz" },
398 { 0x0, "Busy%" },
392 { 0x0, "Bzy_MHz" }, 399 { 0x0, "Bzy_MHz" },
393 { 0x0, "TSC_MHz" }, 400 { 0x0, "TSC_MHz" },
394 { 0x0, "IRQ" }, 401 { 0x0, "IRQ" },
395 { 0x0, "SMI", "", 32, 0, FORMAT_DELTA, NULL}, 402 { 0x0, "SMI", "", 32, 0, FORMAT_DELTA, NULL},
396 { 0x0, "Busy%" }, 403 { 0x0, "sysfs" },
397 { 0x0, "CPU%c1" }, 404 { 0x0, "CPU%c1" },
398 { 0x0, "CPU%c3" }, 405 { 0x0, "CPU%c3" },
399 { 0x0, "CPU%c6" }, 406 { 0x0, "CPU%c6" },
@@ -424,73 +431,73 @@ struct msr_counter bic[] = {
424 { 0x0, "Cor_J" }, 431 { 0x0, "Cor_J" },
425 { 0x0, "GFX_J" }, 432 { 0x0, "GFX_J" },
426 { 0x0, "RAM_J" }, 433 { 0x0, "RAM_J" },
427 { 0x0, "Core" },
428 { 0x0, "CPU" },
429 { 0x0, "Mod%c6" }, 434 { 0x0, "Mod%c6" },
430 { 0x0, "sysfs" },
431 { 0x0, "Totl%C0" }, 435 { 0x0, "Totl%C0" },
432 { 0x0, "Any%C0" }, 436 { 0x0, "Any%C0" },
433 { 0x0, "GFX%C0" }, 437 { 0x0, "GFX%C0" },
434 { 0x0, "CPUGFX%" }, 438 { 0x0, "CPUGFX%" },
435 { 0x0, "Node%" }, 439 { 0x0, "Core" },
440 { 0x0, "CPU" },
441 { 0x0, "APIC" },
442 { 0x0, "X2APIC" },
436}; 443};
437 444
438
439
440#define MAX_BIC (sizeof(bic) / sizeof(struct msr_counter)) 445#define MAX_BIC (sizeof(bic) / sizeof(struct msr_counter))
441#define BIC_USEC (1ULL << 0) 446#define BIC_USEC (1ULL << 0)
442#define BIC_TOD (1ULL << 1) 447#define BIC_TOD (1ULL << 1)
443#define BIC_Package (1ULL << 2) 448#define BIC_Package (1ULL << 2)
444#define BIC_Avg_MHz (1ULL << 3) 449#define BIC_Node (1ULL << 3)
445#define BIC_Bzy_MHz (1ULL << 4) 450#define BIC_Avg_MHz (1ULL << 4)
446#define BIC_TSC_MHz (1ULL << 5) 451#define BIC_Busy (1ULL << 5)
447#define BIC_IRQ (1ULL << 6) 452#define BIC_Bzy_MHz (1ULL << 6)
448#define BIC_SMI (1ULL << 7) 453#define BIC_TSC_MHz (1ULL << 7)
449#define BIC_Busy (1ULL << 8) 454#define BIC_IRQ (1ULL << 8)
450#define BIC_CPU_c1 (1ULL << 9) 455#define BIC_SMI (1ULL << 9)
451#define BIC_CPU_c3 (1ULL << 10) 456#define BIC_sysfs (1ULL << 10)
452#define BIC_CPU_c6 (1ULL << 11) 457#define BIC_CPU_c1 (1ULL << 11)
453#define BIC_CPU_c7 (1ULL << 12) 458#define BIC_CPU_c3 (1ULL << 12)
454#define BIC_ThreadC (1ULL << 13) 459#define BIC_CPU_c6 (1ULL << 13)
455#define BIC_CoreTmp (1ULL << 14) 460#define BIC_CPU_c7 (1ULL << 14)
456#define BIC_CoreCnt (1ULL << 15) 461#define BIC_ThreadC (1ULL << 15)
457#define BIC_PkgTmp (1ULL << 16) 462#define BIC_CoreTmp (1ULL << 16)
458#define BIC_GFX_rc6 (1ULL << 17) 463#define BIC_CoreCnt (1ULL << 17)
459#define BIC_GFXMHz (1ULL << 18) 464#define BIC_PkgTmp (1ULL << 18)
460#define BIC_Pkgpc2 (1ULL << 19) 465#define BIC_GFX_rc6 (1ULL << 19)
461#define BIC_Pkgpc3 (1ULL << 20) 466#define BIC_GFXMHz (1ULL << 20)
462#define BIC_Pkgpc6 (1ULL << 21) 467#define BIC_Pkgpc2 (1ULL << 21)
463#define BIC_Pkgpc7 (1ULL << 22) 468#define BIC_Pkgpc3 (1ULL << 22)
464#define BIC_Pkgpc8 (1ULL << 23) 469#define BIC_Pkgpc6 (1ULL << 23)
465#define BIC_Pkgpc9 (1ULL << 24) 470#define BIC_Pkgpc7 (1ULL << 24)
466#define BIC_Pkgpc10 (1ULL << 25) 471#define BIC_Pkgpc8 (1ULL << 25)
467#define BIC_CPU_LPI (1ULL << 26) 472#define BIC_Pkgpc9 (1ULL << 26)
468#define BIC_SYS_LPI (1ULL << 27) 473#define BIC_Pkgpc10 (1ULL << 27)
469#define BIC_PkgWatt (1ULL << 26) 474#define BIC_CPU_LPI (1ULL << 28)
470#define BIC_CorWatt (1ULL << 27) 475#define BIC_SYS_LPI (1ULL << 29)
471#define BIC_GFXWatt (1ULL << 28) 476#define BIC_PkgWatt (1ULL << 30)
472#define BIC_PkgCnt (1ULL << 29) 477#define BIC_CorWatt (1ULL << 31)
473#define BIC_RAMWatt (1ULL << 30) 478#define BIC_GFXWatt (1ULL << 32)
474#define BIC_PKG__ (1ULL << 31) 479#define BIC_PkgCnt (1ULL << 33)
475#define BIC_RAM__ (1ULL << 32) 480#define BIC_RAMWatt (1ULL << 34)
476#define BIC_Pkg_J (1ULL << 33) 481#define BIC_PKG__ (1ULL << 35)
477#define BIC_Cor_J (1ULL << 34) 482#define BIC_RAM__ (1ULL << 36)
478#define BIC_GFX_J (1ULL << 35) 483#define BIC_Pkg_J (1ULL << 37)
479#define BIC_RAM_J (1ULL << 36) 484#define BIC_Cor_J (1ULL << 38)
480#define BIC_Core (1ULL << 37) 485#define BIC_GFX_J (1ULL << 39)
481#define BIC_CPU (1ULL << 38) 486#define BIC_RAM_J (1ULL << 40)
482#define BIC_Mod_c6 (1ULL << 39) 487#define BIC_Mod_c6 (1ULL << 41)
483#define BIC_sysfs (1ULL << 40) 488#define BIC_Totl_c0 (1ULL << 42)
484#define BIC_Totl_c0 (1ULL << 41) 489#define BIC_Any_c0 (1ULL << 43)
485#define BIC_Any_c0 (1ULL << 42) 490#define BIC_GFX_c0 (1ULL << 44)
486#define BIC_GFX_c0 (1ULL << 43) 491#define BIC_CPUGFX (1ULL << 45)
487#define BIC_CPUGFX (1ULL << 44) 492#define BIC_Core (1ULL << 46)
488#define BIC_Node (1ULL << 45) 493#define BIC_CPU (1ULL << 47)
489 494#define BIC_APIC (1ULL << 48)
490#define BIC_DISABLED_BY_DEFAULT (BIC_USEC | BIC_TOD) 495#define BIC_X2APIC (1ULL << 49)
496
497#define BIC_DISABLED_BY_DEFAULT (BIC_USEC | BIC_TOD | BIC_APIC | BIC_X2APIC)
491 498
492unsigned long long bic_enabled = (0xFFFFFFFFFFFFFFFFULL & ~BIC_DISABLED_BY_DEFAULT); 499unsigned long long bic_enabled = (0xFFFFFFFFFFFFFFFFULL & ~BIC_DISABLED_BY_DEFAULT);
493unsigned long long bic_present = BIC_USEC | BIC_TOD | BIC_sysfs; 500unsigned long long bic_present = BIC_USEC | BIC_TOD | BIC_sysfs | BIC_APIC | BIC_X2APIC;
494 501
495#define DO_BIC(COUNTER_NAME) (bic_enabled & bic_present & COUNTER_NAME) 502#define DO_BIC(COUNTER_NAME) (bic_enabled & bic_present & COUNTER_NAME)
496#define ENABLE_BIC(COUNTER_NAME) (bic_enabled |= COUNTER_NAME) 503#define ENABLE_BIC(COUNTER_NAME) (bic_enabled |= COUNTER_NAME)
@@ -517,17 +524,34 @@ void help(void)
517 "when COMMAND completes.\n" 524 "when COMMAND completes.\n"
518 "If no COMMAND is specified, turbostat wakes every 5-seconds\n" 525 "If no COMMAND is specified, turbostat wakes every 5-seconds\n"
519 "to print statistics, until interrupted.\n" 526 "to print statistics, until interrupted.\n"
520 "--add add a counter\n" 527 " -a, --add add a counter\n"
521 " eg. --add msr0x10,u64,cpu,delta,MY_TSC\n" 528 " eg. --add msr0x10,u64,cpu,delta,MY_TSC\n"
522 "--cpu cpu-set limit output to summary plus cpu-set:\n" 529 " -c, --cpu cpu-set limit output to summary plus cpu-set:\n"
523 " {core | package | j,k,l..m,n-p }\n" 530 " {core | package | j,k,l..m,n-p }\n"
524 "--quiet skip decoding system configuration header\n" 531 " -d, --debug displays usec, Time_Of_Day_Seconds and more debugging\n"
525 "--interval sec.subsec Override default 5-second measurement interval\n" 532 " -D, --Dump displays the raw counter values\n"
526 "--help print this help message\n" 533 " -e, --enable [all | column]\n"
527 "--list list column headers only\n" 534 " shows all or the specified disabled column\n"
528 "--num_iterations num number of the measurement iterations\n" 535 " -H, --hide [column|column,column,...]\n"
529 "--out file create or truncate \"file\" for all output\n" 536 " hide the specified column(s)\n"
530 "--version print version information\n" 537 " -i, --interval sec.subsec\n"
538 " Override default 5-second measurement interval\n"
539 " -J, --Joules displays energy in Joules instead of Watts\n"
540 " -l, --list list column headers only\n"
541 " -n, --num_iterations num\n"
542 " number of the measurement iterations\n"
543 " -o, --out file\n"
544 " create or truncate \"file\" for all output\n"
545 " -q, --quiet skip decoding system configuration header\n"
546 " -s, --show [column|column,column,...]\n"
547 " show only the specified column(s)\n"
548 " -S, --Summary\n"
549 " limits output to 1-line system summary per interval\n"
550 " -T, --TCC temperature\n"
551 " sets the Thermal Control Circuit temperature in\n"
552 " degrees Celsius\n"
553 " -h, --help print this help message\n"
554 " -v, --version print version information\n"
531 "\n" 555 "\n"
532 "For more help, run \"man turbostat\"\n"); 556 "For more help, run \"man turbostat\"\n");
533} 557}
@@ -601,6 +625,10 @@ void print_header(char *delim)
601 outp += sprintf(outp, "%sCore", (printed++ ? delim : "")); 625 outp += sprintf(outp, "%sCore", (printed++ ? delim : ""));
602 if (DO_BIC(BIC_CPU)) 626 if (DO_BIC(BIC_CPU))
603 outp += sprintf(outp, "%sCPU", (printed++ ? delim : "")); 627 outp += sprintf(outp, "%sCPU", (printed++ ? delim : ""));
628 if (DO_BIC(BIC_APIC))
629 outp += sprintf(outp, "%sAPIC", (printed++ ? delim : ""));
630 if (DO_BIC(BIC_X2APIC))
631 outp += sprintf(outp, "%sX2APIC", (printed++ ? delim : ""));
604 if (DO_BIC(BIC_Avg_MHz)) 632 if (DO_BIC(BIC_Avg_MHz))
605 outp += sprintf(outp, "%sAvg_MHz", (printed++ ? delim : "")); 633 outp += sprintf(outp, "%sAvg_MHz", (printed++ ? delim : ""));
606 if (DO_BIC(BIC_Busy)) 634 if (DO_BIC(BIC_Busy))
@@ -880,6 +908,10 @@ int format_counters(struct thread_data *t, struct core_data *c,
880 outp += sprintf(outp, "%s-", (printed++ ? delim : "")); 908 outp += sprintf(outp, "%s-", (printed++ ? delim : ""));
881 if (DO_BIC(BIC_CPU)) 909 if (DO_BIC(BIC_CPU))
882 outp += sprintf(outp, "%s-", (printed++ ? delim : "")); 910 outp += sprintf(outp, "%s-", (printed++ ? delim : ""));
911 if (DO_BIC(BIC_APIC))
912 outp += sprintf(outp, "%s-", (printed++ ? delim : ""));
913 if (DO_BIC(BIC_X2APIC))
914 outp += sprintf(outp, "%s-", (printed++ ? delim : ""));
883 } else { 915 } else {
884 if (DO_BIC(BIC_Package)) { 916 if (DO_BIC(BIC_Package)) {
885 if (p) 917 if (p)
@@ -904,6 +936,10 @@ int format_counters(struct thread_data *t, struct core_data *c,
904 } 936 }
905 if (DO_BIC(BIC_CPU)) 937 if (DO_BIC(BIC_CPU))
906 outp += sprintf(outp, "%s%d", (printed++ ? delim : ""), t->cpu_id); 938 outp += sprintf(outp, "%s%d", (printed++ ? delim : ""), t->cpu_id);
939 if (DO_BIC(BIC_APIC))
940 outp += sprintf(outp, "%s%d", (printed++ ? delim : ""), t->apic_id);
941 if (DO_BIC(BIC_X2APIC))
942 outp += sprintf(outp, "%s%d", (printed++ ? delim : ""), t->x2apic_id);
907 } 943 }
908 944
909 if (DO_BIC(BIC_Avg_MHz)) 945 if (DO_BIC(BIC_Avg_MHz))
@@ -1231,6 +1267,12 @@ delta_thread(struct thread_data *new, struct thread_data *old,
1231 int i; 1267 int i;
1232 struct msr_counter *mp; 1268 struct msr_counter *mp;
1233 1269
1270 /* we run cpuid just the 1st time, copy the results */
1271 if (DO_BIC(BIC_APIC))
1272 new->apic_id = old->apic_id;
1273 if (DO_BIC(BIC_X2APIC))
1274 new->x2apic_id = old->x2apic_id;
1275
1234 /* 1276 /*
1235 * the timestamps from start of measurement interval are in "old" 1277 * the timestamps from start of measurement interval are in "old"
1236 * the timestamp from end of measurement interval are in "new" 1278 * the timestamp from end of measurement interval are in "new"
@@ -1393,6 +1435,12 @@ int sum_counters(struct thread_data *t, struct core_data *c,
1393 int i; 1435 int i;
1394 struct msr_counter *mp; 1436 struct msr_counter *mp;
1395 1437
1438 /* copy un-changing apic_id's */
1439 if (DO_BIC(BIC_APIC))
1440 average.threads.apic_id = t->apic_id;
1441 if (DO_BIC(BIC_X2APIC))
1442 average.threads.x2apic_id = t->x2apic_id;
1443
1396 /* remember first tv_begin */ 1444 /* remember first tv_begin */
1397 if (average.threads.tv_begin.tv_sec == 0) 1445 if (average.threads.tv_begin.tv_sec == 0)
1398 average.threads.tv_begin = t->tv_begin; 1446 average.threads.tv_begin = t->tv_begin;
@@ -1619,6 +1667,34 @@ int get_mp(int cpu, struct msr_counter *mp, unsigned long long *counterp)
1619 return 0; 1667 return 0;
1620} 1668}
1621 1669
1670void get_apic_id(struct thread_data *t)
1671{
1672 unsigned int eax, ebx, ecx, edx, max_level;
1673
1674 eax = ebx = ecx = edx = 0;
1675
1676 if (!genuine_intel)
1677 return;
1678
1679 __cpuid(0, max_level, ebx, ecx, edx);
1680
1681 __cpuid(1, eax, ebx, ecx, edx);
1682 t->apic_id = (ebx >> 24) & 0xf;
1683
1684 if (max_level < 0xb)
1685 return;
1686
1687 if (!DO_BIC(BIC_X2APIC))
1688 return;
1689
1690 ecx = 0;
1691 __cpuid(0xb, eax, ebx, ecx, edx);
1692 t->x2apic_id = edx;
1693
1694 if (debug && (t->apic_id != t->x2apic_id))
1695 fprintf(stderr, "cpu%d: apic 0x%x x2apic 0x%x\n", t->cpu_id, t->apic_id, t->x2apic_id);
1696}
1697
1622/* 1698/*
1623 * get_counters(...) 1699 * get_counters(...)
1624 * migrate to cpu 1700 * migrate to cpu
@@ -1632,7 +1708,6 @@ int get_counters(struct thread_data *t, struct core_data *c, struct pkg_data *p)
1632 struct msr_counter *mp; 1708 struct msr_counter *mp;
1633 int i; 1709 int i;
1634 1710
1635
1636 gettimeofday(&t->tv_begin, (struct timezone *)NULL); 1711 gettimeofday(&t->tv_begin, (struct timezone *)NULL);
1637 1712
1638 if (cpu_migrate(cpu)) { 1713 if (cpu_migrate(cpu)) {
@@ -1640,6 +1715,8 @@ int get_counters(struct thread_data *t, struct core_data *c, struct pkg_data *p)
1640 return -1; 1715 return -1;
1641 } 1716 }
1642 1717
1718 if (first_counter_read)
1719 get_apic_id(t);
1643retry: 1720retry:
1644 t->tsc = rdtsc(); /* we are running on local CPU of interest */ 1721 t->tsc = rdtsc(); /* we are running on local CPU of interest */
1645 1722
@@ -2432,6 +2509,12 @@ void set_node_data(void)
2432 if (pni[pkg].count > topo.nodes_per_pkg) 2509 if (pni[pkg].count > topo.nodes_per_pkg)
2433 topo.nodes_per_pkg = pni[0].count; 2510 topo.nodes_per_pkg = pni[0].count;
2434 2511
2512 /* Fake 1 node per pkg for machines that don't
2513 * expose nodes and thus avoid -nan results
2514 */
2515 if (topo.nodes_per_pkg == 0)
2516 topo.nodes_per_pkg = 1;
2517
2435 for (cpu = 0; cpu < topo.num_cpus; cpu++) { 2518 for (cpu = 0; cpu < topo.num_cpus; cpu++) {
2436 pkg = cpus[cpu].physical_package_id; 2519 pkg = cpus[cpu].physical_package_id;
2437 node = cpus[cpu].physical_node_id; 2520 node = cpus[cpu].physical_node_id;
@@ -2879,6 +2962,7 @@ void do_sleep(void)
2879 } 2962 }
2880} 2963}
2881 2964
2965
2882void turbostat_loop() 2966void turbostat_loop()
2883{ 2967{
2884 int retval; 2968 int retval;
@@ -2892,6 +2976,7 @@ restart:
2892 2976
2893 snapshot_proc_sysfs_files(); 2977 snapshot_proc_sysfs_files();
2894 retval = for_all_cpus(get_counters, EVEN_COUNTERS); 2978 retval = for_all_cpus(get_counters, EVEN_COUNTERS);
2979 first_counter_read = 0;
2895 if (retval < -1) { 2980 if (retval < -1) {
2896 exit(retval); 2981 exit(retval);
2897 } else if (retval == -1) { 2982 } else if (retval == -1) {
@@ -4392,7 +4477,7 @@ void process_cpuid()
4392 if (!quiet) { 4477 if (!quiet) {
4393 fprintf(outf, "%d CPUID levels; family:model:stepping 0x%x:%x:%x (%d:%d:%d)\n", 4478 fprintf(outf, "%d CPUID levels; family:model:stepping 0x%x:%x:%x (%d:%d:%d)\n",
4394 max_level, family, model, stepping, family, model, stepping); 4479 max_level, family, model, stepping, family, model, stepping);
4395 fprintf(outf, "CPUID(1): %s %s %s %s %s %s %s %s %s\n", 4480 fprintf(outf, "CPUID(1): %s %s %s %s %s %s %s %s %s %s\n",
4396 ecx & (1 << 0) ? "SSE3" : "-", 4481 ecx & (1 << 0) ? "SSE3" : "-",
4397 ecx & (1 << 3) ? "MONITOR" : "-", 4482 ecx & (1 << 3) ? "MONITOR" : "-",
4398 ecx & (1 << 6) ? "SMX" : "-", 4483 ecx & (1 << 6) ? "SMX" : "-",
@@ -4401,6 +4486,7 @@ void process_cpuid()
4401 edx & (1 << 4) ? "TSC" : "-", 4486 edx & (1 << 4) ? "TSC" : "-",
4402 edx & (1 << 5) ? "MSR" : "-", 4487 edx & (1 << 5) ? "MSR" : "-",
4403 edx & (1 << 22) ? "ACPI-TM" : "-", 4488 edx & (1 << 22) ? "ACPI-TM" : "-",
4489 edx & (1 << 28) ? "HT" : "-",
4404 edx & (1 << 29) ? "TM" : "-"); 4490 edx & (1 << 29) ? "TM" : "-");
4405 } 4491 }
4406 4492
@@ -4652,7 +4738,6 @@ void process_cpuid()
4652 return; 4738 return;
4653} 4739}
4654 4740
4655
4656/* 4741/*
4657 * in /dev/cpu/ return success for names that are numbers 4742 * in /dev/cpu/ return success for names that are numbers
4658 * ie. filter out ".", "..", "microcode". 4743 * ie. filter out ".", "..", "microcode".
@@ -4842,6 +4927,13 @@ void init_counter(struct thread_data *thread_base, struct core_data *core_base,
4842 struct core_data *c; 4927 struct core_data *c;
4843 struct pkg_data *p; 4928 struct pkg_data *p;
4844 4929
4930
4931 /* Workaround for systems where physical_node_id==-1
4932 * and logical_node_id==(-1 - topo.num_cpus)
4933 */
4934 if (node_id < 0)
4935 node_id = 0;
4936
4845 t = GET_THREAD(thread_base, thread_id, core_id, node_id, pkg_id); 4937 t = GET_THREAD(thread_base, thread_id, core_id, node_id, pkg_id);
4846 c = GET_CORE(core_base, core_id, node_id, pkg_id); 4938 c = GET_CORE(core_base, core_id, node_id, pkg_id);
4847 p = GET_PKG(pkg_base, pkg_id); 4939 p = GET_PKG(pkg_base, pkg_id);
@@ -4946,6 +5038,7 @@ int fork_it(char **argv)
4946 5038
4947 snapshot_proc_sysfs_files(); 5039 snapshot_proc_sysfs_files();
4948 status = for_all_cpus(get_counters, EVEN_COUNTERS); 5040 status = for_all_cpus(get_counters, EVEN_COUNTERS);
5041 first_counter_read = 0;
4949 if (status) 5042 if (status)
4950 exit(status); 5043 exit(status);
4951 /* clear affinity side-effect of get_counters() */ 5044 /* clear affinity side-effect of get_counters() */
@@ -5009,7 +5102,7 @@ int get_and_dump_counters(void)
5009} 5102}
5010 5103
5011void print_version() { 5104void print_version() {
5012 fprintf(outf, "turbostat version 18.06.01" 5105 fprintf(outf, "turbostat version 18.06.20"
5013 " - Len Brown <lenb@kernel.org>\n"); 5106 " - Len Brown <lenb@kernel.org>\n");
5014} 5107}
5015 5108
@@ -5381,7 +5474,7 @@ void cmdline(int argc, char **argv)
5381 break; 5474 break;
5382 case 'e': 5475 case 'e':
5383 /* --enable specified counter */ 5476 /* --enable specified counter */
5384 bic_enabled |= bic_lookup(optarg, SHOW_LIST); 5477 bic_enabled = bic_enabled | bic_lookup(optarg, SHOW_LIST);
5385 break; 5478 break;
5386 case 'd': 5479 case 'd':
5387 debug++; 5480 debug++;
@@ -5465,7 +5558,6 @@ void cmdline(int argc, char **argv)
5465int main(int argc, char **argv) 5558int main(int argc, char **argv)
5466{ 5559{
5467 outf = stderr; 5560 outf = stderr;
5468
5469 cmdline(argc, argv); 5561 cmdline(argc, argv);
5470 5562
5471 if (!quiet) 5563 if (!quiet)
diff --git a/tools/testing/selftests/net/.gitignore b/tools/testing/selftests/net/.gitignore
index 128e548aa377..1a0ac3a29ec5 100644
--- a/tools/testing/selftests/net/.gitignore
+++ b/tools/testing/selftests/net/.gitignore
@@ -12,3 +12,4 @@ tcp_mmap
12udpgso 12udpgso
13udpgso_bench_rx 13udpgso_bench_rx
14udpgso_bench_tx 14udpgso_bench_tx
15tcp_inq
diff --git a/tools/testing/selftests/net/config b/tools/testing/selftests/net/config
index 7ba089b33e8b..cd3a2f1545b5 100644
--- a/tools/testing/selftests/net/config
+++ b/tools/testing/selftests/net/config
@@ -12,3 +12,5 @@ CONFIG_NET_IPVTI=y
12CONFIG_INET6_XFRM_MODE_TUNNEL=y 12CONFIG_INET6_XFRM_MODE_TUNNEL=y
13CONFIG_IPV6_VTI=y 13CONFIG_IPV6_VTI=y
14CONFIG_DUMMY=y 14CONFIG_DUMMY=y
15CONFIG_BRIDGE=y
16CONFIG_VLAN_8021Q=y
diff --git a/tools/testing/selftests/pstore/pstore_post_reboot_tests b/tools/testing/selftests/pstore/pstore_post_reboot_tests
index 6ccb154cb4aa..22f8df1ad7d4 100755
--- a/tools/testing/selftests/pstore/pstore_post_reboot_tests
+++ b/tools/testing/selftests/pstore/pstore_post_reboot_tests
@@ -7,13 +7,16 @@
7# 7#
8# Released under the terms of the GPL v2. 8# Released under the terms of the GPL v2.
9 9
10# Kselftest framework requirement - SKIP code is 4.
11ksft_skip=4
12
10. ./common_tests 13. ./common_tests
11 14
12if [ -e $REBOOT_FLAG ]; then 15if [ -e $REBOOT_FLAG ]; then
13 rm $REBOOT_FLAG 16 rm $REBOOT_FLAG
14else 17else
15 prlog "pstore_crash_test has not been executed yet. we skip further tests." 18 prlog "pstore_crash_test has not been executed yet. we skip further tests."
16 exit 0 19 exit $ksft_skip
17fi 20fi
18 21
19prlog -n "Mounting pstore filesystem ... " 22prlog -n "Mounting pstore filesystem ... "
diff --git a/tools/testing/selftests/rseq/param_test.c b/tools/testing/selftests/rseq/param_test.c
index 6a9f602a8718..615252331813 100644
--- a/tools/testing/selftests/rseq/param_test.c
+++ b/tools/testing/selftests/rseq/param_test.c
@@ -137,6 +137,30 @@ unsigned int yield_mod_cnt, nr_abort;
137 "subic. %%" INJECT_ASM_REG ", %%" INJECT_ASM_REG ", 1\n\t" \ 137 "subic. %%" INJECT_ASM_REG ", %%" INJECT_ASM_REG ", 1\n\t" \
138 "bne 222b\n\t" \ 138 "bne 222b\n\t" \
139 "333:\n\t" 139 "333:\n\t"
140
141#elif defined(__mips__)
142
143#define RSEQ_INJECT_INPUT \
144 , [loop_cnt_1]"m"(loop_cnt[1]) \
145 , [loop_cnt_2]"m"(loop_cnt[2]) \
146 , [loop_cnt_3]"m"(loop_cnt[3]) \
147 , [loop_cnt_4]"m"(loop_cnt[4]) \
148 , [loop_cnt_5]"m"(loop_cnt[5]) \
149 , [loop_cnt_6]"m"(loop_cnt[6])
150
151#define INJECT_ASM_REG "$5"
152
153#define RSEQ_INJECT_CLOBBER \
154 , INJECT_ASM_REG
155
156#define RSEQ_INJECT_ASM(n) \
157 "lw " INJECT_ASM_REG ", %[loop_cnt_" #n "]\n\t" \
158 "beqz " INJECT_ASM_REG ", 333f\n\t" \
159 "222:\n\t" \
160 "addiu " INJECT_ASM_REG ", -1\n\t" \
161 "bnez " INJECT_ASM_REG ", 222b\n\t" \
162 "333:\n\t"
163
140#else 164#else
141#error unsupported target 165#error unsupported target
142#endif 166#endif
diff --git a/tools/testing/selftests/rseq/rseq-arm.h b/tools/testing/selftests/rseq/rseq-arm.h
index 3b055f9aeaab..3cea19877227 100644
--- a/tools/testing/selftests/rseq/rseq-arm.h
+++ b/tools/testing/selftests/rseq/rseq-arm.h
@@ -57,6 +57,7 @@ do { \
57#define __RSEQ_ASM_DEFINE_ABORT(table_label, label, teardown, \ 57#define __RSEQ_ASM_DEFINE_ABORT(table_label, label, teardown, \
58 abort_label, version, flags, \ 58 abort_label, version, flags, \
59 start_ip, post_commit_offset, abort_ip) \ 59 start_ip, post_commit_offset, abort_ip) \
60 ".balign 32\n\t" \
60 __rseq_str(table_label) ":\n\t" \ 61 __rseq_str(table_label) ":\n\t" \
61 ".word " __rseq_str(version) ", " __rseq_str(flags) "\n\t" \ 62 ".word " __rseq_str(version) ", " __rseq_str(flags) "\n\t" \
62 ".word " __rseq_str(start_ip) ", 0x0, " __rseq_str(post_commit_offset) ", 0x0, " __rseq_str(abort_ip) ", 0x0\n\t" \ 63 ".word " __rseq_str(start_ip) ", 0x0, " __rseq_str(post_commit_offset) ", 0x0, " __rseq_str(abort_ip) ", 0x0\n\t" \
diff --git a/tools/testing/selftests/rseq/rseq-mips.h b/tools/testing/selftests/rseq/rseq-mips.h
new file mode 100644
index 000000000000..7f48ecf46994
--- /dev/null
+++ b/tools/testing/selftests/rseq/rseq-mips.h
@@ -0,0 +1,725 @@
1/* SPDX-License-Identifier: LGPL-2.1 OR MIT */
2/*
3 * Author: Paul Burton <paul.burton@mips.com>
4 * (C) Copyright 2018 MIPS Tech LLC
5 *
6 * Based on rseq-arm.h:
7 * (C) Copyright 2016-2018 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
8 */
9
10#define RSEQ_SIG 0x53053053
11
12#define rseq_smp_mb() __asm__ __volatile__ ("sync" ::: "memory")
13#define rseq_smp_rmb() rseq_smp_mb()
14#define rseq_smp_wmb() rseq_smp_mb()
15
16#define rseq_smp_load_acquire(p) \
17__extension__ ({ \
18 __typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \
19 rseq_smp_mb(); \
20 ____p1; \
21})
22
23#define rseq_smp_acquire__after_ctrl_dep() rseq_smp_rmb()
24
25#define rseq_smp_store_release(p, v) \
26do { \
27 rseq_smp_mb(); \
28 RSEQ_WRITE_ONCE(*p, v); \
29} while (0)
30
31#ifdef RSEQ_SKIP_FASTPATH
32#include "rseq-skip.h"
33#else /* !RSEQ_SKIP_FASTPATH */
34
35#if _MIPS_SZLONG == 64
36# define LONG ".dword"
37# define LONG_LA "dla"
38# define LONG_L "ld"
39# define LONG_S "sd"
40# define LONG_ADDI "daddiu"
41# define U32_U64_PAD(x) x
42#elif _MIPS_SZLONG == 32
43# define LONG ".word"
44# define LONG_LA "la"
45# define LONG_L "lw"
46# define LONG_S "sw"
47# define LONG_ADDI "addiu"
48# ifdef __BIG_ENDIAN
49# define U32_U64_PAD(x) "0x0, " x
50# else
51# define U32_U64_PAD(x) x ", 0x0"
52# endif
53#else
54# error unsupported _MIPS_SZLONG
55#endif
56
57#define __RSEQ_ASM_DEFINE_TABLE(version, flags, start_ip, \
58 post_commit_offset, abort_ip) \
59 ".pushsection __rseq_table, \"aw\"\n\t" \
60 ".balign 32\n\t" \
61 ".word " __rseq_str(version) ", " __rseq_str(flags) "\n\t" \
62 LONG " " U32_U64_PAD(__rseq_str(start_ip)) "\n\t" \
63 LONG " " U32_U64_PAD(__rseq_str(post_commit_offset)) "\n\t" \
64 LONG " " U32_U64_PAD(__rseq_str(abort_ip)) "\n\t" \
65 ".popsection\n\t"
66
67#define RSEQ_ASM_DEFINE_TABLE(start_ip, post_commit_ip, abort_ip) \
68 __RSEQ_ASM_DEFINE_TABLE(0x0, 0x0, start_ip, \
69 (post_commit_ip - start_ip), abort_ip)
70
71#define RSEQ_ASM_STORE_RSEQ_CS(label, cs_label, rseq_cs) \
72 RSEQ_INJECT_ASM(1) \
73 LONG_LA " $4, " __rseq_str(cs_label) "\n\t" \
74 LONG_S " $4, %[" __rseq_str(rseq_cs) "]\n\t" \
75 __rseq_str(label) ":\n\t"
76
77#define RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, label) \
78 RSEQ_INJECT_ASM(2) \
79 "lw $4, %[" __rseq_str(current_cpu_id) "]\n\t" \
80 "bne $4, %[" __rseq_str(cpu_id) "], " __rseq_str(label) "\n\t"
81
82#define __RSEQ_ASM_DEFINE_ABORT(table_label, label, teardown, \
83 abort_label, version, flags, \
84 start_ip, post_commit_offset, abort_ip) \
85 ".balign 32\n\t" \
86 __rseq_str(table_label) ":\n\t" \
87 ".word " __rseq_str(version) ", " __rseq_str(flags) "\n\t" \
88 LONG " " U32_U64_PAD(__rseq_str(start_ip)) "\n\t" \
89 LONG " " U32_U64_PAD(__rseq_str(post_commit_offset)) "\n\t" \
90 LONG " " U32_U64_PAD(__rseq_str(abort_ip)) "\n\t" \
91 ".word " __rseq_str(RSEQ_SIG) "\n\t" \
92 __rseq_str(label) ":\n\t" \
93 teardown \
94 "b %l[" __rseq_str(abort_label) "]\n\t"
95
96#define RSEQ_ASM_DEFINE_ABORT(table_label, label, teardown, abort_label, \
97 start_ip, post_commit_ip, abort_ip) \
98 __RSEQ_ASM_DEFINE_ABORT(table_label, label, teardown, \
99 abort_label, 0x0, 0x0, start_ip, \
100 (post_commit_ip - start_ip), abort_ip)
101
102#define RSEQ_ASM_DEFINE_CMPFAIL(label, teardown, cmpfail_label) \
103 __rseq_str(label) ":\n\t" \
104 teardown \
105 "b %l[" __rseq_str(cmpfail_label) "]\n\t"
106
107#define rseq_workaround_gcc_asm_size_guess() __asm__ __volatile__("")
108
109static inline __attribute__((always_inline))
110int rseq_cmpeqv_storev(intptr_t *v, intptr_t expect, intptr_t newv, int cpu)
111{
112 RSEQ_INJECT_C(9)
113
114 rseq_workaround_gcc_asm_size_guess();
115 __asm__ __volatile__ goto (
116 RSEQ_ASM_DEFINE_TABLE(1f, 2f, 4f) /* start, commit, abort */
117 /* Start rseq by storing table entry pointer into rseq_cs. */
118 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
119 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, 4f)
120 RSEQ_INJECT_ASM(3)
121 LONG_L " $4, %[v]\n\t"
122 "bne $4, %[expect], %l[cmpfail]\n\t"
123 RSEQ_INJECT_ASM(4)
124#ifdef RSEQ_COMPARE_TWICE
125 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, %l[error1])
126 LONG_L " $4, %[v]\n\t"
127 "bne $4, %[expect], %l[error2]\n\t"
128#endif
129 /* final store */
130 LONG_S " %[newv], %[v]\n\t"
131 "2:\n\t"
132 RSEQ_INJECT_ASM(5)
133 "b 5f\n\t"
134 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f)
135 "5:\n\t"
136 : /* gcc asm goto does not allow outputs */
137 : [cpu_id] "r" (cpu),
138 [current_cpu_id] "m" (__rseq_abi.cpu_id),
139 [rseq_cs] "m" (__rseq_abi.rseq_cs),
140 [v] "m" (*v),
141 [expect] "r" (expect),
142 [newv] "r" (newv)
143 RSEQ_INJECT_INPUT
144 : "$4", "memory"
145 RSEQ_INJECT_CLOBBER
146 : abort, cmpfail
147#ifdef RSEQ_COMPARE_TWICE
148 , error1, error2
149#endif
150 );
151 rseq_workaround_gcc_asm_size_guess();
152 return 0;
153abort:
154 rseq_workaround_gcc_asm_size_guess();
155 RSEQ_INJECT_FAILED
156 return -1;
157cmpfail:
158 rseq_workaround_gcc_asm_size_guess();
159 return 1;
160#ifdef RSEQ_COMPARE_TWICE
161error1:
162 rseq_bug("cpu_id comparison failed");
163error2:
164 rseq_bug("expected value comparison failed");
165#endif
166}
167
168static inline __attribute__((always_inline))
169int rseq_cmpnev_storeoffp_load(intptr_t *v, intptr_t expectnot,
170 off_t voffp, intptr_t *load, int cpu)
171{
172 RSEQ_INJECT_C(9)
173
174 rseq_workaround_gcc_asm_size_guess();
175 __asm__ __volatile__ goto (
176 RSEQ_ASM_DEFINE_TABLE(1f, 2f, 4f) /* start, commit, abort */
177 /* Start rseq by storing table entry pointer into rseq_cs. */
178 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
179 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, 4f)
180 RSEQ_INJECT_ASM(3)
181 LONG_L " $4, %[v]\n\t"
182 "beq $4, %[expectnot], %l[cmpfail]\n\t"
183 RSEQ_INJECT_ASM(4)
184#ifdef RSEQ_COMPARE_TWICE
185 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, %l[error1])
186 LONG_L " $4, %[v]\n\t"
187 "beq $4, %[expectnot], %l[error2]\n\t"
188#endif
189 LONG_S " $4, %[load]\n\t"
190 LONG_ADDI " $4, %[voffp]\n\t"
191 LONG_L " $4, 0($4)\n\t"
192 /* final store */
193 LONG_S " $4, %[v]\n\t"
194 "2:\n\t"
195 RSEQ_INJECT_ASM(5)
196 "b 5f\n\t"
197 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f)
198 "5:\n\t"
199 : /* gcc asm goto does not allow outputs */
200 : [cpu_id] "r" (cpu),
201 [current_cpu_id] "m" (__rseq_abi.cpu_id),
202 [rseq_cs] "m" (__rseq_abi.rseq_cs),
203 /* final store input */
204 [v] "m" (*v),
205 [expectnot] "r" (expectnot),
206 [voffp] "Ir" (voffp),
207 [load] "m" (*load)
208 RSEQ_INJECT_INPUT
209 : "$4", "memory"
210 RSEQ_INJECT_CLOBBER
211 : abort, cmpfail
212#ifdef RSEQ_COMPARE_TWICE
213 , error1, error2
214#endif
215 );
216 rseq_workaround_gcc_asm_size_guess();
217 return 0;
218abort:
219 rseq_workaround_gcc_asm_size_guess();
220 RSEQ_INJECT_FAILED
221 return -1;
222cmpfail:
223 rseq_workaround_gcc_asm_size_guess();
224 return 1;
225#ifdef RSEQ_COMPARE_TWICE
226error1:
227 rseq_bug("cpu_id comparison failed");
228error2:
229 rseq_bug("expected value comparison failed");
230#endif
231}
232
233static inline __attribute__((always_inline))
234int rseq_addv(intptr_t *v, intptr_t count, int cpu)
235{
236 RSEQ_INJECT_C(9)
237
238 rseq_workaround_gcc_asm_size_guess();
239 __asm__ __volatile__ goto (
240 RSEQ_ASM_DEFINE_TABLE(1f, 2f, 4f) /* start, commit, abort */
241 /* Start rseq by storing table entry pointer into rseq_cs. */
242 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
243 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, 4f)
244 RSEQ_INJECT_ASM(3)
245#ifdef RSEQ_COMPARE_TWICE
246 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, %l[error1])
247#endif
248 LONG_L " $4, %[v]\n\t"
249 LONG_ADDI " $4, %[count]\n\t"
250 /* final store */
251 LONG_S " $4, %[v]\n\t"
252 "2:\n\t"
253 RSEQ_INJECT_ASM(4)
254 "b 5f\n\t"
255 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f)
256 "5:\n\t"
257 : /* gcc asm goto does not allow outputs */
258 : [cpu_id] "r" (cpu),
259 [current_cpu_id] "m" (__rseq_abi.cpu_id),
260 [rseq_cs] "m" (__rseq_abi.rseq_cs),
261 [v] "m" (*v),
262 [count] "Ir" (count)
263 RSEQ_INJECT_INPUT
264 : "$4", "memory"
265 RSEQ_INJECT_CLOBBER
266 : abort
267#ifdef RSEQ_COMPARE_TWICE
268 , error1
269#endif
270 );
271 rseq_workaround_gcc_asm_size_guess();
272 return 0;
273abort:
274 rseq_workaround_gcc_asm_size_guess();
275 RSEQ_INJECT_FAILED
276 return -1;
277#ifdef RSEQ_COMPARE_TWICE
278error1:
279 rseq_bug("cpu_id comparison failed");
280#endif
281}
282
283static inline __attribute__((always_inline))
284int rseq_cmpeqv_trystorev_storev(intptr_t *v, intptr_t expect,
285 intptr_t *v2, intptr_t newv2,
286 intptr_t newv, int cpu)
287{
288 RSEQ_INJECT_C(9)
289
290 rseq_workaround_gcc_asm_size_guess();
291 __asm__ __volatile__ goto (
292 RSEQ_ASM_DEFINE_TABLE(1f, 2f, 4f) /* start, commit, abort */
293 /* Start rseq by storing table entry pointer into rseq_cs. */
294 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
295 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, 4f)
296 RSEQ_INJECT_ASM(3)
297 LONG_L " $4, %[v]\n\t"
298 "bne $4, %[expect], %l[cmpfail]\n\t"
299 RSEQ_INJECT_ASM(4)
300#ifdef RSEQ_COMPARE_TWICE
301 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, %l[error1])
302 LONG_L " $4, %[v]\n\t"
303 "bne $4, %[expect], %l[error2]\n\t"
304#endif
305 /* try store */
306 LONG_S " %[newv2], %[v2]\n\t"
307 RSEQ_INJECT_ASM(5)
308 /* final store */
309 LONG_S " %[newv], %[v]\n\t"
310 "2:\n\t"
311 RSEQ_INJECT_ASM(6)
312 "b 5f\n\t"
313 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f)
314 "5:\n\t"
315 : /* gcc asm goto does not allow outputs */
316 : [cpu_id] "r" (cpu),
317 [current_cpu_id] "m" (__rseq_abi.cpu_id),
318 [rseq_cs] "m" (__rseq_abi.rseq_cs),
319 /* try store input */
320 [v2] "m" (*v2),
321 [newv2] "r" (newv2),
322 /* final store input */
323 [v] "m" (*v),
324 [expect] "r" (expect),
325 [newv] "r" (newv)
326 RSEQ_INJECT_INPUT
327 : "$4", "memory"
328 RSEQ_INJECT_CLOBBER
329 : abort, cmpfail
330#ifdef RSEQ_COMPARE_TWICE
331 , error1, error2
332#endif
333 );
334 rseq_workaround_gcc_asm_size_guess();
335 return 0;
336abort:
337 rseq_workaround_gcc_asm_size_guess();
338 RSEQ_INJECT_FAILED
339 return -1;
340cmpfail:
341 rseq_workaround_gcc_asm_size_guess();
342 return 1;
343#ifdef RSEQ_COMPARE_TWICE
344error1:
345 rseq_bug("cpu_id comparison failed");
346error2:
347 rseq_bug("expected value comparison failed");
348#endif
349}
350
351static inline __attribute__((always_inline))
352int rseq_cmpeqv_trystorev_storev_release(intptr_t *v, intptr_t expect,
353 intptr_t *v2, intptr_t newv2,
354 intptr_t newv, int cpu)
355{
356 RSEQ_INJECT_C(9)
357
358 rseq_workaround_gcc_asm_size_guess();
359 __asm__ __volatile__ goto (
360 RSEQ_ASM_DEFINE_TABLE(1f, 2f, 4f) /* start, commit, abort */
361 /* Start rseq by storing table entry pointer into rseq_cs. */
362 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
363 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, 4f)
364 RSEQ_INJECT_ASM(3)
365 LONG_L " $4, %[v]\n\t"
366 "bne $4, %[expect], %l[cmpfail]\n\t"
367 RSEQ_INJECT_ASM(4)
368#ifdef RSEQ_COMPARE_TWICE
369 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, %l[error1])
370 LONG_L " $4, %[v]\n\t"
371 "bne $4, %[expect], %l[error2]\n\t"
372#endif
373 /* try store */
374 LONG_S " %[newv2], %[v2]\n\t"
375 RSEQ_INJECT_ASM(5)
376 "sync\n\t" /* full sync provides store-release */
377 /* final store */
378 LONG_S " %[newv], %[v]\n\t"
379 "2:\n\t"
380 RSEQ_INJECT_ASM(6)
381 "b 5f\n\t"
382 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f)
383 "5:\n\t"
384 : /* gcc asm goto does not allow outputs */
385 : [cpu_id] "r" (cpu),
386 [current_cpu_id] "m" (__rseq_abi.cpu_id),
387 [rseq_cs] "m" (__rseq_abi.rseq_cs),
388 /* try store input */
389 [v2] "m" (*v2),
390 [newv2] "r" (newv2),
391 /* final store input */
392 [v] "m" (*v),
393 [expect] "r" (expect),
394 [newv] "r" (newv)
395 RSEQ_INJECT_INPUT
396 : "$4", "memory"
397 RSEQ_INJECT_CLOBBER
398 : abort, cmpfail
399#ifdef RSEQ_COMPARE_TWICE
400 , error1, error2
401#endif
402 );
403 rseq_workaround_gcc_asm_size_guess();
404 return 0;
405abort:
406 rseq_workaround_gcc_asm_size_guess();
407 RSEQ_INJECT_FAILED
408 return -1;
409cmpfail:
410 rseq_workaround_gcc_asm_size_guess();
411 return 1;
412#ifdef RSEQ_COMPARE_TWICE
413error1:
414 rseq_bug("cpu_id comparison failed");
415error2:
416 rseq_bug("expected value comparison failed");
417#endif
418}
419
420static inline __attribute__((always_inline))
421int rseq_cmpeqv_cmpeqv_storev(intptr_t *v, intptr_t expect,
422 intptr_t *v2, intptr_t expect2,
423 intptr_t newv, int cpu)
424{
425 RSEQ_INJECT_C(9)
426
427 rseq_workaround_gcc_asm_size_guess();
428 __asm__ __volatile__ goto (
429 RSEQ_ASM_DEFINE_TABLE(1f, 2f, 4f) /* start, commit, abort */
430 /* Start rseq by storing table entry pointer into rseq_cs. */
431 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
432 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, 4f)
433 RSEQ_INJECT_ASM(3)
434 LONG_L " $4, %[v]\n\t"
435 "bne $4, %[expect], %l[cmpfail]\n\t"
436 RSEQ_INJECT_ASM(4)
437 LONG_L " $4, %[v2]\n\t"
438 "bne $4, %[expect2], %l[cmpfail]\n\t"
439 RSEQ_INJECT_ASM(5)
440#ifdef RSEQ_COMPARE_TWICE
441 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, %l[error1])
442 LONG_L " $4, %[v]\n\t"
443 "bne $4, %[expect], %l[error2]\n\t"
444 LONG_L " $4, %[v2]\n\t"
445 "bne $4, %[expect2], %l[error3]\n\t"
446#endif
447 /* final store */
448 LONG_S " %[newv], %[v]\n\t"
449 "2:\n\t"
450 RSEQ_INJECT_ASM(6)
451 "b 5f\n\t"
452 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f)
453 "5:\n\t"
454 : /* gcc asm goto does not allow outputs */
455 : [cpu_id] "r" (cpu),
456 [current_cpu_id] "m" (__rseq_abi.cpu_id),
457 [rseq_cs] "m" (__rseq_abi.rseq_cs),
458 /* cmp2 input */
459 [v2] "m" (*v2),
460 [expect2] "r" (expect2),
461 /* final store input */
462 [v] "m" (*v),
463 [expect] "r" (expect),
464 [newv] "r" (newv)
465 RSEQ_INJECT_INPUT
466 : "$4", "memory"
467 RSEQ_INJECT_CLOBBER
468 : abort, cmpfail
469#ifdef RSEQ_COMPARE_TWICE
470 , error1, error2, error3
471#endif
472 );
473 rseq_workaround_gcc_asm_size_guess();
474 return 0;
475abort:
476 rseq_workaround_gcc_asm_size_guess();
477 RSEQ_INJECT_FAILED
478 return -1;
479cmpfail:
480 rseq_workaround_gcc_asm_size_guess();
481 return 1;
482#ifdef RSEQ_COMPARE_TWICE
483error1:
484 rseq_bug("cpu_id comparison failed");
485error2:
486 rseq_bug("1st expected value comparison failed");
487error3:
488 rseq_bug("2nd expected value comparison failed");
489#endif
490}
491
492static inline __attribute__((always_inline))
493int rseq_cmpeqv_trymemcpy_storev(intptr_t *v, intptr_t expect,
494 void *dst, void *src, size_t len,
495 intptr_t newv, int cpu)
496{
497 uintptr_t rseq_scratch[3];
498
499 RSEQ_INJECT_C(9)
500
501 rseq_workaround_gcc_asm_size_guess();
502 __asm__ __volatile__ goto (
503 RSEQ_ASM_DEFINE_TABLE(1f, 2f, 4f) /* start, commit, abort */
504 LONG_S " %[src], %[rseq_scratch0]\n\t"
505 LONG_S " %[dst], %[rseq_scratch1]\n\t"
506 LONG_S " %[len], %[rseq_scratch2]\n\t"
507 /* Start rseq by storing table entry pointer into rseq_cs. */
508 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
509 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, 4f)
510 RSEQ_INJECT_ASM(3)
511 LONG_L " $4, %[v]\n\t"
512 "bne $4, %[expect], 5f\n\t"
513 RSEQ_INJECT_ASM(4)
514#ifdef RSEQ_COMPARE_TWICE
515 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, 6f)
516 LONG_L " $4, %[v]\n\t"
517 "bne $4, %[expect], 7f\n\t"
518#endif
519 /* try memcpy */
520 "beqz %[len], 333f\n\t" \
521 "222:\n\t" \
522 "lb $4, 0(%[src])\n\t" \
523 "sb $4, 0(%[dst])\n\t" \
524 LONG_ADDI " %[src], 1\n\t" \
525 LONG_ADDI " %[dst], 1\n\t" \
526 LONG_ADDI " %[len], -1\n\t" \
527 "bnez %[len], 222b\n\t" \
528 "333:\n\t" \
529 RSEQ_INJECT_ASM(5)
530 /* final store */
531 LONG_S " %[newv], %[v]\n\t"
532 "2:\n\t"
533 RSEQ_INJECT_ASM(6)
534 /* teardown */
535 LONG_L " %[len], %[rseq_scratch2]\n\t"
536 LONG_L " %[dst], %[rseq_scratch1]\n\t"
537 LONG_L " %[src], %[rseq_scratch0]\n\t"
538 "b 8f\n\t"
539 RSEQ_ASM_DEFINE_ABORT(3, 4,
540 /* teardown */
541 LONG_L " %[len], %[rseq_scratch2]\n\t"
542 LONG_L " %[dst], %[rseq_scratch1]\n\t"
543 LONG_L " %[src], %[rseq_scratch0]\n\t",
544 abort, 1b, 2b, 4f)
545 RSEQ_ASM_DEFINE_CMPFAIL(5,
546 /* teardown */
547 LONG_L " %[len], %[rseq_scratch2]\n\t"
548 LONG_L " %[dst], %[rseq_scratch1]\n\t"
549 LONG_L " %[src], %[rseq_scratch0]\n\t",
550 cmpfail)
551#ifdef RSEQ_COMPARE_TWICE
552 RSEQ_ASM_DEFINE_CMPFAIL(6,
553 /* teardown */
554 LONG_L " %[len], %[rseq_scratch2]\n\t"
555 LONG_L " %[dst], %[rseq_scratch1]\n\t"
556 LONG_L " %[src], %[rseq_scratch0]\n\t",
557 error1)
558 RSEQ_ASM_DEFINE_CMPFAIL(7,
559 /* teardown */
560 LONG_L " %[len], %[rseq_scratch2]\n\t"
561 LONG_L " %[dst], %[rseq_scratch1]\n\t"
562 LONG_L " %[src], %[rseq_scratch0]\n\t",
563 error2)
564#endif
565 "8:\n\t"
566 : /* gcc asm goto does not allow outputs */
567 : [cpu_id] "r" (cpu),
568 [current_cpu_id] "m" (__rseq_abi.cpu_id),
569 [rseq_cs] "m" (__rseq_abi.rseq_cs),
570 /* final store input */
571 [v] "m" (*v),
572 [expect] "r" (expect),
573 [newv] "r" (newv),
574 /* try memcpy input */
575 [dst] "r" (dst),
576 [src] "r" (src),
577 [len] "r" (len),
578 [rseq_scratch0] "m" (rseq_scratch[0]),
579 [rseq_scratch1] "m" (rseq_scratch[1]),
580 [rseq_scratch2] "m" (rseq_scratch[2])
581 RSEQ_INJECT_INPUT
582 : "$4", "memory"
583 RSEQ_INJECT_CLOBBER
584 : abort, cmpfail
585#ifdef RSEQ_COMPARE_TWICE
586 , error1, error2
587#endif
588 );
589 rseq_workaround_gcc_asm_size_guess();
590 return 0;
591abort:
592 rseq_workaround_gcc_asm_size_guess();
593 RSEQ_INJECT_FAILED
594 return -1;
595cmpfail:
596 rseq_workaround_gcc_asm_size_guess();
597 return 1;
598#ifdef RSEQ_COMPARE_TWICE
599error1:
600 rseq_workaround_gcc_asm_size_guess();
601 rseq_bug("cpu_id comparison failed");
602error2:
603 rseq_workaround_gcc_asm_size_guess();
604 rseq_bug("expected value comparison failed");
605#endif
606}
607
608static inline __attribute__((always_inline))
609int rseq_cmpeqv_trymemcpy_storev_release(intptr_t *v, intptr_t expect,
610 void *dst, void *src, size_t len,
611 intptr_t newv, int cpu)
612{
613 uintptr_t rseq_scratch[3];
614
615 RSEQ_INJECT_C(9)
616
617 rseq_workaround_gcc_asm_size_guess();
618 __asm__ __volatile__ goto (
619 RSEQ_ASM_DEFINE_TABLE(1f, 2f, 4f) /* start, commit, abort */
620 LONG_S " %[src], %[rseq_scratch0]\n\t"
621 LONG_S " %[dst], %[rseq_scratch1]\n\t"
622 LONG_S " %[len], %[rseq_scratch2]\n\t"
623 /* Start rseq by storing table entry pointer into rseq_cs. */
624 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs)
625 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, 4f)
626 RSEQ_INJECT_ASM(3)
627 LONG_L " $4, %[v]\n\t"
628 "bne $4, %[expect], 5f\n\t"
629 RSEQ_INJECT_ASM(4)
630#ifdef RSEQ_COMPARE_TWICE
631 RSEQ_ASM_CMP_CPU_ID(cpu_id, current_cpu_id, 6f)
632 LONG_L " $4, %[v]\n\t"
633 "bne $4, %[expect], 7f\n\t"
634#endif
635 /* try memcpy */
636 "beqz %[len], 333f\n\t" \
637 "222:\n\t" \
638 "lb $4, 0(%[src])\n\t" \
639 "sb $4, 0(%[dst])\n\t" \
640 LONG_ADDI " %[src], 1\n\t" \
641 LONG_ADDI " %[dst], 1\n\t" \
642 LONG_ADDI " %[len], -1\n\t" \
643 "bnez %[len], 222b\n\t" \
644 "333:\n\t" \
645 RSEQ_INJECT_ASM(5)
646 "sync\n\t" /* full sync provides store-release */
647 /* final store */
648 LONG_S " %[newv], %[v]\n\t"
649 "2:\n\t"
650 RSEQ_INJECT_ASM(6)
651 /* teardown */
652 LONG_L " %[len], %[rseq_scratch2]\n\t"
653 LONG_L " %[dst], %[rseq_scratch1]\n\t"
654 LONG_L " %[src], %[rseq_scratch0]\n\t"
655 "b 8f\n\t"
656 RSEQ_ASM_DEFINE_ABORT(3, 4,
657 /* teardown */
658 LONG_L " %[len], %[rseq_scratch2]\n\t"
659 LONG_L " %[dst], %[rseq_scratch1]\n\t"
660 LONG_L " %[src], %[rseq_scratch0]\n\t",
661 abort, 1b, 2b, 4f)
662 RSEQ_ASM_DEFINE_CMPFAIL(5,
663 /* teardown */
664 LONG_L " %[len], %[rseq_scratch2]\n\t"
665 LONG_L " %[dst], %[rseq_scratch1]\n\t"
666 LONG_L " %[src], %[rseq_scratch0]\n\t",
667 cmpfail)
668#ifdef RSEQ_COMPARE_TWICE
669 RSEQ_ASM_DEFINE_CMPFAIL(6,
670 /* teardown */
671 LONG_L " %[len], %[rseq_scratch2]\n\t"
672 LONG_L " %[dst], %[rseq_scratch1]\n\t"
673 LONG_L " %[src], %[rseq_scratch0]\n\t",
674 error1)
675 RSEQ_ASM_DEFINE_CMPFAIL(7,
676 /* teardown */
677 LONG_L " %[len], %[rseq_scratch2]\n\t"
678 LONG_L " %[dst], %[rseq_scratch1]\n\t"
679 LONG_L " %[src], %[rseq_scratch0]\n\t",
680 error2)
681#endif
682 "8:\n\t"
683 : /* gcc asm goto does not allow outputs */
684 : [cpu_id] "r" (cpu),
685 [current_cpu_id] "m" (__rseq_abi.cpu_id),
686 [rseq_cs] "m" (__rseq_abi.rseq_cs),
687 /* final store input */
688 [v] "m" (*v),
689 [expect] "r" (expect),
690 [newv] "r" (newv),
691 /* try memcpy input */
692 [dst] "r" (dst),
693 [src] "r" (src),
694 [len] "r" (len),
695 [rseq_scratch0] "m" (rseq_scratch[0]),
696 [rseq_scratch1] "m" (rseq_scratch[1]),
697 [rseq_scratch2] "m" (rseq_scratch[2])
698 RSEQ_INJECT_INPUT
699 : "$4", "memory"
700 RSEQ_INJECT_CLOBBER
701 : abort, cmpfail
702#ifdef RSEQ_COMPARE_TWICE
703 , error1, error2
704#endif
705 );
706 rseq_workaround_gcc_asm_size_guess();
707 return 0;
708abort:
709 rseq_workaround_gcc_asm_size_guess();
710 RSEQ_INJECT_FAILED
711 return -1;
712cmpfail:
713 rseq_workaround_gcc_asm_size_guess();
714 return 1;
715#ifdef RSEQ_COMPARE_TWICE
716error1:
717 rseq_workaround_gcc_asm_size_guess();
718 rseq_bug("cpu_id comparison failed");
719error2:
720 rseq_workaround_gcc_asm_size_guess();
721 rseq_bug("expected value comparison failed");
722#endif
723}
724
725#endif /* !RSEQ_SKIP_FASTPATH */
diff --git a/tools/testing/selftests/rseq/rseq.h b/tools/testing/selftests/rseq/rseq.h
index 0a808575cbc4..a4684112676c 100644
--- a/tools/testing/selftests/rseq/rseq.h
+++ b/tools/testing/selftests/rseq/rseq.h
@@ -73,6 +73,8 @@ extern __thread volatile struct rseq __rseq_abi;
73#include <rseq-arm.h> 73#include <rseq-arm.h>
74#elif defined(__PPC__) 74#elif defined(__PPC__)
75#include <rseq-ppc.h> 75#include <rseq-ppc.h>
76#elif defined(__mips__)
77#include <rseq-mips.h>
76#else 78#else
77#error unsupported target 79#error unsupported target
78#endif 80#endif
diff --git a/tools/testing/selftests/rseq/run_param_test.sh b/tools/testing/selftests/rseq/run_param_test.sh
index 3acd6d75ff9f..3acd6d75ff9f 100644..100755
--- a/tools/testing/selftests/rseq/run_param_test.sh
+++ b/tools/testing/selftests/rseq/run_param_test.sh
diff --git a/tools/testing/selftests/sparc64/Makefile b/tools/testing/selftests/sparc64/Makefile
index 2082eeffd779..a19531dba4dc 100644
--- a/tools/testing/selftests/sparc64/Makefile
+++ b/tools/testing/selftests/sparc64/Makefile
@@ -1,7 +1,18 @@
1# SPDX-License-Identifier: GPL-2.0
2uname_M := $(shell uname -m 2>/dev/null || echo not)
3ARCH ?= $(shell echo $(uname_M) | sed -e s/x86_64/x86/)
4
5ifneq ($(ARCH),sparc64)
6nothing:
7.PHONY: all clean run_tests install
8.SILENT:
9else
10
1SUBDIRS := drivers 11SUBDIRS := drivers
2 12
3TEST_PROGS := run.sh 13TEST_PROGS := run.sh
4 14
15
5.PHONY: all clean 16.PHONY: all clean
6 17
7include ../lib.mk 18include ../lib.mk
@@ -18,10 +29,6 @@ all:
18 fi \ 29 fi \
19 done 30 done
20 31
21override define RUN_TESTS
22 @cd $(OUTPUT); ./run.sh
23endef
24
25override define INSTALL_RULE 32override define INSTALL_RULE
26 mkdir -p $(INSTALL_PATH) 33 mkdir -p $(INSTALL_PATH)
27 install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) 34 install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES)
@@ -33,10 +40,6 @@ override define INSTALL_RULE
33 done; 40 done;
34endef 41endef
35 42
36override define EMIT_TESTS
37 echo "./run.sh"
38endef
39
40override define CLEAN 43override define CLEAN
41 @for DIR in $(SUBDIRS); do \ 44 @for DIR in $(SUBDIRS); do \
42 BUILD_TARGET=$(OUTPUT)/$$DIR; \ 45 BUILD_TARGET=$(OUTPUT)/$$DIR; \
@@ -44,3 +47,4 @@ override define CLEAN
44 make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\ 47 make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
45 done 48 done
46endef 49endef
50endif
diff --git a/tools/testing/selftests/sparc64/drivers/Makefile b/tools/testing/selftests/sparc64/drivers/Makefile
index 6264f40bbdbc..deb0df415565 100644
--- a/tools/testing/selftests/sparc64/drivers/Makefile
+++ b/tools/testing/selftests/sparc64/drivers/Makefile
@@ -1,4 +1,4 @@
1 1# SPDX-License-Identifier: GPL-2.0
2INCLUDEDIR := -I. 2INCLUDEDIR := -I.
3CFLAGS := $(CFLAGS) $(INCLUDEDIR) -Wall -O2 -g 3CFLAGS := $(CFLAGS) $(INCLUDEDIR) -Wall -O2 -g
4 4
diff --git a/tools/testing/selftests/static_keys/test_static_keys.sh b/tools/testing/selftests/static_keys/test_static_keys.sh
index 24cff498b31a..fc9f8cde7d42 100755
--- a/tools/testing/selftests/static_keys/test_static_keys.sh
+++ b/tools/testing/selftests/static_keys/test_static_keys.sh
@@ -2,6 +2,19 @@
2# SPDX-License-Identifier: GPL-2.0 2# SPDX-License-Identifier: GPL-2.0
3# Runs static keys kernel module tests 3# Runs static keys kernel module tests
4 4
5# Kselftest framework requirement - SKIP code is 4.
6ksft_skip=4
7
8if ! /sbin/modprobe -q -n test_static_key_base; then
9 echo "static_key: module test_static_key_base is not found [SKIP]"
10 exit $ksft_skip
11fi
12
13if ! /sbin/modprobe -q -n test_static_keys; then
14 echo "static_key: module test_static_keys is not found [SKIP]"
15 exit $ksft_skip
16fi
17
5if /sbin/modprobe -q test_static_key_base; then 18if /sbin/modprobe -q test_static_key_base; then
6 if /sbin/modprobe -q test_static_keys; then 19 if /sbin/modprobe -q test_static_keys; then
7 echo "static_key: ok" 20 echo "static_key: ok"
diff --git a/tools/testing/selftests/sync/config b/tools/testing/selftests/sync/config
new file mode 100644
index 000000000000..1ab7e8130db2
--- /dev/null
+++ b/tools/testing/selftests/sync/config
@@ -0,0 +1,4 @@
1CONFIG_STAGING=y
2CONFIG_ANDROID=y
3CONFIG_SYNC=y
4CONFIG_SW_SYNC=y
diff --git a/tools/testing/selftests/sysctl/sysctl.sh b/tools/testing/selftests/sysctl/sysctl.sh
index ec232c3cfcaa..584eb8ea780a 100755
--- a/tools/testing/selftests/sysctl/sysctl.sh
+++ b/tools/testing/selftests/sysctl/sysctl.sh
@@ -14,6 +14,9 @@
14 14
15# This performs a series tests against the proc sysctl interface. 15# This performs a series tests against the proc sysctl interface.
16 16
17# Kselftest framework requirement - SKIP code is 4.
18ksft_skip=4
19
17TEST_NAME="sysctl" 20TEST_NAME="sysctl"
18TEST_DRIVER="test_${TEST_NAME}" 21TEST_DRIVER="test_${TEST_NAME}"
19TEST_DIR=$(dirname $0) 22TEST_DIR=$(dirname $0)
@@ -41,7 +44,7 @@ test_modprobe()
41 echo "$0: $DIR not present" >&2 44 echo "$0: $DIR not present" >&2
42 echo "You must have the following enabled in your kernel:" >&2 45 echo "You must have the following enabled in your kernel:" >&2
43 cat $TEST_DIR/config >&2 46 cat $TEST_DIR/config >&2
44 exit 1 47 exit $ksft_skip
45 fi 48 fi
46} 49}
47 50
@@ -98,28 +101,30 @@ test_reqs()
98 uid=$(id -u) 101 uid=$(id -u)
99 if [ $uid -ne 0 ]; then 102 if [ $uid -ne 0 ]; then
100 echo $msg must be run as root >&2 103 echo $msg must be run as root >&2
101 exit 0 104 exit $ksft_skip
102 fi 105 fi
103 106
104 if ! which perl 2> /dev/null > /dev/null; then 107 if ! which perl 2> /dev/null > /dev/null; then
105 echo "$0: You need perl installed" 108 echo "$0: You need perl installed"
106 exit 1 109 exit $ksft_skip
107 fi 110 fi
108 if ! which getconf 2> /dev/null > /dev/null; then 111 if ! which getconf 2> /dev/null > /dev/null; then
109 echo "$0: You need getconf installed" 112 echo "$0: You need getconf installed"
110 exit 1 113 exit $ksft_skip
111 fi 114 fi
112 if ! which diff 2> /dev/null > /dev/null; then 115 if ! which diff 2> /dev/null > /dev/null; then
113 echo "$0: You need diff installed" 116 echo "$0: You need diff installed"
114 exit 1 117 exit $ksft_skip
115 fi 118 fi
116} 119}
117 120
118function load_req_mod() 121function load_req_mod()
119{ 122{
120 trap "test_modprobe" EXIT
121
122 if [ ! -d $DIR ]; then 123 if [ ! -d $DIR ]; then
124 if ! modprobe -q -n $TEST_DRIVER; then
125 echo "$0: module $TEST_DRIVER not found [SKIP]"
126 exit $ksft_skip
127 fi
123 modprobe $TEST_DRIVER 128 modprobe $TEST_DRIVER
124 if [ $? -ne 0 ]; then 129 if [ $? -ne 0 ]; then
125 exit 130 exit
@@ -765,6 +770,7 @@ function parse_args()
765test_reqs 770test_reqs
766allow_user_defaults 771allow_user_defaults
767check_production_sysctl_writes_strict 772check_production_sysctl_writes_strict
773test_modprobe
768load_req_mod 774load_req_mod
769 775
770trap "test_finish" EXIT 776trap "test_finish" EXIT
diff --git a/tools/testing/selftests/user/test_user_copy.sh b/tools/testing/selftests/user/test_user_copy.sh
index d60506fc77f8..f9b31a57439b 100755
--- a/tools/testing/selftests/user/test_user_copy.sh
+++ b/tools/testing/selftests/user/test_user_copy.sh
@@ -2,6 +2,13 @@
2# SPDX-License-Identifier: GPL-2.0 2# SPDX-License-Identifier: GPL-2.0
3# Runs copy_to/from_user infrastructure using test_user_copy kernel module 3# Runs copy_to/from_user infrastructure using test_user_copy kernel module
4 4
5# Kselftest framework requirement - SKIP code is 4.
6ksft_skip=4
7
8if ! /sbin/modprobe -q -n test_user_copy; then
9 echo "user: module test_user_copy is not found [SKIP]"
10 exit $ksft_skip
11fi
5if /sbin/modprobe -q test_user_copy; then 12if /sbin/modprobe -q test_user_copy; then
6 /sbin/modprobe -q -r test_user_copy 13 /sbin/modprobe -q -r test_user_copy
7 echo "user_copy: ok" 14 echo "user_copy: ok"
diff --git a/tools/testing/selftests/vm/compaction_test.c b/tools/testing/selftests/vm/compaction_test.c
index 1097f04e4d80..bcec71250873 100644
--- a/tools/testing/selftests/vm/compaction_test.c
+++ b/tools/testing/selftests/vm/compaction_test.c
@@ -16,6 +16,8 @@
16#include <unistd.h> 16#include <unistd.h>
17#include <string.h> 17#include <string.h>
18 18
19#include "../kselftest.h"
20
19#define MAP_SIZE 1048576 21#define MAP_SIZE 1048576
20 22
21struct map_list { 23struct map_list {
@@ -169,7 +171,7 @@ int main(int argc, char **argv)
169 printf("Either the sysctl compact_unevictable_allowed is not\n" 171 printf("Either the sysctl compact_unevictable_allowed is not\n"
170 "set to 1 or couldn't read the proc file.\n" 172 "set to 1 or couldn't read the proc file.\n"
171 "Skipping the test\n"); 173 "Skipping the test\n");
172 return 0; 174 return KSFT_SKIP;
173 } 175 }
174 176
175 lim.rlim_cur = RLIM_INFINITY; 177 lim.rlim_cur = RLIM_INFINITY;
diff --git a/tools/testing/selftests/vm/mlock2-tests.c b/tools/testing/selftests/vm/mlock2-tests.c
index 4997b9222cfa..637b6d0ac0d0 100644
--- a/tools/testing/selftests/vm/mlock2-tests.c
+++ b/tools/testing/selftests/vm/mlock2-tests.c
@@ -9,6 +9,8 @@
9#include <stdbool.h> 9#include <stdbool.h>
10#include "mlock2.h" 10#include "mlock2.h"
11 11
12#include "../kselftest.h"
13
12struct vm_boundaries { 14struct vm_boundaries {
13 unsigned long start; 15 unsigned long start;
14 unsigned long end; 16 unsigned long end;
@@ -303,7 +305,7 @@ static int test_mlock_lock()
303 if (mlock2_(map, 2 * page_size, 0)) { 305 if (mlock2_(map, 2 * page_size, 0)) {
304 if (errno == ENOSYS) { 306 if (errno == ENOSYS) {
305 printf("Cannot call new mlock family, skipping test\n"); 307 printf("Cannot call new mlock family, skipping test\n");
306 _exit(0); 308 _exit(KSFT_SKIP);
307 } 309 }
308 perror("mlock2(0)"); 310 perror("mlock2(0)");
309 goto unmap; 311 goto unmap;
@@ -412,7 +414,7 @@ static int test_mlock_onfault()
412 if (mlock2_(map, 2 * page_size, MLOCK_ONFAULT)) { 414 if (mlock2_(map, 2 * page_size, MLOCK_ONFAULT)) {
413 if (errno == ENOSYS) { 415 if (errno == ENOSYS) {
414 printf("Cannot call new mlock family, skipping test\n"); 416 printf("Cannot call new mlock family, skipping test\n");
415 _exit(0); 417 _exit(KSFT_SKIP);
416 } 418 }
417 perror("mlock2(MLOCK_ONFAULT)"); 419 perror("mlock2(MLOCK_ONFAULT)");
418 goto unmap; 420 goto unmap;
@@ -425,7 +427,7 @@ static int test_mlock_onfault()
425 if (munlock(map, 2 * page_size)) { 427 if (munlock(map, 2 * page_size)) {
426 if (errno == ENOSYS) { 428 if (errno == ENOSYS) {
427 printf("Cannot call new mlock family, skipping test\n"); 429 printf("Cannot call new mlock family, skipping test\n");
428 _exit(0); 430 _exit(KSFT_SKIP);
429 } 431 }
430 perror("munlock()"); 432 perror("munlock()");
431 goto unmap; 433 goto unmap;
@@ -457,7 +459,7 @@ static int test_lock_onfault_of_present()
457 if (mlock2_(map, 2 * page_size, MLOCK_ONFAULT)) { 459 if (mlock2_(map, 2 * page_size, MLOCK_ONFAULT)) {
458 if (errno == ENOSYS) { 460 if (errno == ENOSYS) {
459 printf("Cannot call new mlock family, skipping test\n"); 461 printf("Cannot call new mlock family, skipping test\n");
460 _exit(0); 462 _exit(KSFT_SKIP);
461 } 463 }
462 perror("mlock2(MLOCK_ONFAULT)"); 464 perror("mlock2(MLOCK_ONFAULT)");
463 goto unmap; 465 goto unmap;
@@ -583,7 +585,7 @@ static int test_vma_management(bool call_mlock)
583 if (call_mlock && mlock2_(map, 3 * page_size, MLOCK_ONFAULT)) { 585 if (call_mlock && mlock2_(map, 3 * page_size, MLOCK_ONFAULT)) {
584 if (errno == ENOSYS) { 586 if (errno == ENOSYS) {
585 printf("Cannot call new mlock family, skipping test\n"); 587 printf("Cannot call new mlock family, skipping test\n");
586 _exit(0); 588 _exit(KSFT_SKIP);
587 } 589 }
588 perror("mlock(ONFAULT)\n"); 590 perror("mlock(ONFAULT)\n");
589 goto out; 591 goto out;
diff --git a/tools/testing/selftests/vm/run_vmtests b/tools/testing/selftests/vm/run_vmtests
index 22d564673830..88cbe5575f0c 100755
--- a/tools/testing/selftests/vm/run_vmtests
+++ b/tools/testing/selftests/vm/run_vmtests
@@ -2,6 +2,9 @@
2# SPDX-License-Identifier: GPL-2.0 2# SPDX-License-Identifier: GPL-2.0
3#please run as root 3#please run as root
4 4
5# Kselftest framework requirement - SKIP code is 4.
6ksft_skip=4
7
5mnt=./huge 8mnt=./huge
6exitcode=0 9exitcode=0
7 10
@@ -36,7 +39,7 @@ if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then
36 echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages 39 echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
37 if [ $? -ne 0 ]; then 40 if [ $? -ne 0 ]; then
38 echo "Please run this test as root" 41 echo "Please run this test as root"
39 exit 1 42 exit $ksft_skip
40 fi 43 fi
41 while read name size unit; do 44 while read name size unit; do
42 if [ "$name" = "HugePages_Free:" ]; then 45 if [ "$name" = "HugePages_Free:" ]; then
diff --git a/tools/testing/selftests/vm/userfaultfd.c b/tools/testing/selftests/vm/userfaultfd.c
index de2f9ec8a87f..7b8171e3128a 100644
--- a/tools/testing/selftests/vm/userfaultfd.c
+++ b/tools/testing/selftests/vm/userfaultfd.c
@@ -69,6 +69,8 @@
69#include <setjmp.h> 69#include <setjmp.h>
70#include <stdbool.h> 70#include <stdbool.h>
71 71
72#include "../kselftest.h"
73
72#ifdef __NR_userfaultfd 74#ifdef __NR_userfaultfd
73 75
74static unsigned long nr_cpus, nr_pages, nr_pages_per_cpu, page_size; 76static unsigned long nr_cpus, nr_pages, nr_pages_per_cpu, page_size;
@@ -1322,7 +1324,7 @@ int main(int argc, char **argv)
1322int main(void) 1324int main(void)
1323{ 1325{
1324 printf("skip: Skipping userfaultfd test (missing __NR_userfaultfd)\n"); 1326 printf("skip: Skipping userfaultfd test (missing __NR_userfaultfd)\n");
1325 return 0; 1327 return KSFT_SKIP;
1326} 1328}
1327 1329
1328#endif /* __NR_userfaultfd */ 1330#endif /* __NR_userfaultfd */
diff --git a/tools/testing/selftests/zram/zram.sh b/tools/testing/selftests/zram/zram.sh
index 754de7da426a..232e958ec454 100755
--- a/tools/testing/selftests/zram/zram.sh
+++ b/tools/testing/selftests/zram/zram.sh
@@ -2,6 +2,9 @@
2# SPDX-License-Identifier: GPL-2.0 2# SPDX-License-Identifier: GPL-2.0
3TCID="zram.sh" 3TCID="zram.sh"
4 4
5# Kselftest framework requirement - SKIP code is 4.
6ksft_skip=4
7
5. ./zram_lib.sh 8. ./zram_lib.sh
6 9
7run_zram () { 10run_zram () {
@@ -24,5 +27,5 @@ elif [ -b /dev/zram0 ]; then
24else 27else
25 echo "$TCID : No zram.ko module or /dev/zram0 device file not found" 28 echo "$TCID : No zram.ko module or /dev/zram0 device file not found"
26 echo "$TCID : CONFIG_ZRAM is not set" 29 echo "$TCID : CONFIG_ZRAM is not set"
27 exit 1 30 exit $ksft_skip
28fi 31fi
diff --git a/tools/testing/selftests/zram/zram_lib.sh b/tools/testing/selftests/zram/zram_lib.sh
index f6a9c73e7a44..9e73a4fb9b0a 100755
--- a/tools/testing/selftests/zram/zram_lib.sh
+++ b/tools/testing/selftests/zram/zram_lib.sh
@@ -18,6 +18,9 @@ MODULE=0
18dev_makeswap=-1 18dev_makeswap=-1
19dev_mounted=-1 19dev_mounted=-1
20 20
21# Kselftest framework requirement - SKIP code is 4.
22ksft_skip=4
23
21trap INT 24trap INT
22 25
23check_prereqs() 26check_prereqs()
@@ -27,7 +30,7 @@ check_prereqs()
27 30
28 if [ $uid -ne 0 ]; then 31 if [ $uid -ne 0 ]; then
29 echo $msg must be run as root >&2 32 echo $msg must be run as root >&2
30 exit 0 33 exit $ksft_skip
31 fi 34 fi
32} 35}
33 36
diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig
index 72143cfaf6ec..ea434ddc8499 100644
--- a/virt/kvm/Kconfig
+++ b/virt/kvm/Kconfig
@@ -47,7 +47,7 @@ config KVM_GENERIC_DIRTYLOG_READ_PROTECT
47 47
48config KVM_COMPAT 48config KVM_COMPAT
49 def_bool y 49 def_bool y
50 depends on KVM && COMPAT && !S390 50 depends on KVM && COMPAT && !(S390 || ARM64)
51 51
52config HAVE_KVM_IRQ_BYPASS 52config HAVE_KVM_IRQ_BYPASS
53 bool 53 bool
diff --git a/virt/kvm/arm/mmu.c b/virt/kvm/arm/mmu.c
index 8d90de213ce9..1d90d79706bd 100644
--- a/virt/kvm/arm/mmu.c
+++ b/virt/kvm/arm/mmu.c
@@ -297,6 +297,8 @@ static void unmap_stage2_range(struct kvm *kvm, phys_addr_t start, u64 size)
297 phys_addr_t next; 297 phys_addr_t next;
298 298
299 assert_spin_locked(&kvm->mmu_lock); 299 assert_spin_locked(&kvm->mmu_lock);
300 WARN_ON(size & ~PAGE_MASK);
301
300 pgd = kvm->arch.pgd + stage2_pgd_index(addr); 302 pgd = kvm->arch.pgd + stage2_pgd_index(addr);
301 do { 303 do {
302 /* 304 /*
diff --git a/virt/kvm/arm/vgic/vgic-v3.c b/virt/kvm/arm/vgic/vgic-v3.c
index ff7dc890941a..cdce653e3c47 100644
--- a/virt/kvm/arm/vgic/vgic-v3.c
+++ b/virt/kvm/arm/vgic/vgic-v3.c
@@ -617,11 +617,6 @@ int vgic_v3_probe(const struct gic_kvm_info *info)
617 pr_warn("GICV physical address 0x%llx not page aligned\n", 617 pr_warn("GICV physical address 0x%llx not page aligned\n",
618 (unsigned long long)info->vcpu.start); 618 (unsigned long long)info->vcpu.start);
619 kvm_vgic_global_state.vcpu_base = 0; 619 kvm_vgic_global_state.vcpu_base = 0;
620 } else if (!PAGE_ALIGNED(resource_size(&info->vcpu))) {
621 pr_warn("GICV size 0x%llx not a multiple of page size 0x%lx\n",
622 (unsigned long long)resource_size(&info->vcpu),
623 PAGE_SIZE);
624 kvm_vgic_global_state.vcpu_base = 0;
625 } else { 620 } else {
626 kvm_vgic_global_state.vcpu_base = info->vcpu.start; 621 kvm_vgic_global_state.vcpu_base = info->vcpu.start;
627 kvm_vgic_global_state.can_emulate_gicv2 = true; 622 kvm_vgic_global_state.can_emulate_gicv2 = true;
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index ada21f47f22b..8b47507faab5 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -116,6 +116,11 @@ static long kvm_vcpu_ioctl(struct file *file, unsigned int ioctl,
116#ifdef CONFIG_KVM_COMPAT 116#ifdef CONFIG_KVM_COMPAT
117static long kvm_vcpu_compat_ioctl(struct file *file, unsigned int ioctl, 117static long kvm_vcpu_compat_ioctl(struct file *file, unsigned int ioctl,
118 unsigned long arg); 118 unsigned long arg);
119#define KVM_COMPAT(c) .compat_ioctl = (c)
120#else
121static long kvm_no_compat_ioctl(struct file *file, unsigned int ioctl,
122 unsigned long arg) { return -EINVAL; }
123#define KVM_COMPAT(c) .compat_ioctl = kvm_no_compat_ioctl
119#endif 124#endif
120static int hardware_enable_all(void); 125static int hardware_enable_all(void);
121static void hardware_disable_all(void); 126static void hardware_disable_all(void);
@@ -2396,11 +2401,9 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp)
2396static struct file_operations kvm_vcpu_fops = { 2401static struct file_operations kvm_vcpu_fops = {
2397 .release = kvm_vcpu_release, 2402 .release = kvm_vcpu_release,
2398 .unlocked_ioctl = kvm_vcpu_ioctl, 2403 .unlocked_ioctl = kvm_vcpu_ioctl,
2399#ifdef CONFIG_KVM_COMPAT
2400 .compat_ioctl = kvm_vcpu_compat_ioctl,
2401#endif
2402 .mmap = kvm_vcpu_mmap, 2404 .mmap = kvm_vcpu_mmap,
2403 .llseek = noop_llseek, 2405 .llseek = noop_llseek,
2406 KVM_COMPAT(kvm_vcpu_compat_ioctl),
2404}; 2407};
2405 2408
2406/* 2409/*
@@ -2824,10 +2827,8 @@ static int kvm_device_release(struct inode *inode, struct file *filp)
2824 2827
2825static const struct file_operations kvm_device_fops = { 2828static const struct file_operations kvm_device_fops = {
2826 .unlocked_ioctl = kvm_device_ioctl, 2829 .unlocked_ioctl = kvm_device_ioctl,
2827#ifdef CONFIG_KVM_COMPAT
2828 .compat_ioctl = kvm_device_ioctl,
2829#endif
2830 .release = kvm_device_release, 2830 .release = kvm_device_release,
2831 KVM_COMPAT(kvm_device_ioctl),
2831}; 2832};
2832 2833
2833struct kvm_device *kvm_device_from_filp(struct file *filp) 2834struct kvm_device *kvm_device_from_filp(struct file *filp)
@@ -3165,10 +3166,8 @@ static long kvm_vm_compat_ioctl(struct file *filp,
3165static struct file_operations kvm_vm_fops = { 3166static struct file_operations kvm_vm_fops = {
3166 .release = kvm_vm_release, 3167 .release = kvm_vm_release,
3167 .unlocked_ioctl = kvm_vm_ioctl, 3168 .unlocked_ioctl = kvm_vm_ioctl,
3168#ifdef CONFIG_KVM_COMPAT
3169 .compat_ioctl = kvm_vm_compat_ioctl,
3170#endif
3171 .llseek = noop_llseek, 3169 .llseek = noop_llseek,
3170 KVM_COMPAT(kvm_vm_compat_ioctl),
3172}; 3171};
3173 3172
3174static int kvm_dev_ioctl_create_vm(unsigned long type) 3173static int kvm_dev_ioctl_create_vm(unsigned long type)
@@ -3259,8 +3258,8 @@ out:
3259 3258
3260static struct file_operations kvm_chardev_ops = { 3259static struct file_operations kvm_chardev_ops = {
3261 .unlocked_ioctl = kvm_dev_ioctl, 3260 .unlocked_ioctl = kvm_dev_ioctl,
3262 .compat_ioctl = kvm_dev_ioctl,
3263 .llseek = noop_llseek, 3261 .llseek = noop_llseek,
3262 KVM_COMPAT(kvm_dev_ioctl),
3264}; 3263};
3265 3264
3266static struct miscdevice kvm_dev = { 3265static struct miscdevice kvm_dev = {