From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.linutronix.de (146.0.238.70:993) by crypto-ml.lab.linutronix.de with IMAP4-SSL for ; 24 Feb 2019 15:12:54 -0000 Received: from mga05.intel.com ([192.55.52.43]) by Galois.linutronix.de with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1gxvNp-0001Qt-8s for speck@linutronix.de; Sun, 24 Feb 2019 16:08:02 +0100 From: Andi Kleen Subject: [MODERATED] [PATCH v6 00/43] MDSv6 Date: Sun, 24 Feb 2019 07:07:06 -0800 Message-Id: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit MIME-Version: 1.0 To: speck@linutronix.de Cc: Andi Kleen List-ID: Here's a new version of flushing CPU buffers for group 4 for single thread. I would be mainly interested in feedback on the lazy approach, so please focus on the later patches. There didn't seem to be much interest in it, so I wonder if it still makes sense to continue with it? Or could we just stay with the full approach? The lazy approach is faster, but not by that much and may not be worth the short and long term impact all over the tree. This version is based on my earlier base patches, with the mds=full implementation being at the beginning, and a lazy implementation building on top of it. The patch can be rebased on the rewrite once it matures. Even the base has some features not in Thomas' version which would need to be ported (e.g. more complete virtualization support and EBPF mitigation) This patch implements the "full tree audit" approach that was suggested by several reviewers. We (me and Mark Gross) went through most asynchronous code in the kernel and marked the functions that touch user or IO data. This leaves most asynchronous interrupts etc. to not schedule a clear. However this would need to be continuously enforced for new code too. It also implements various other review suggestions and improvements. clearcpu.txt is now clarified in many ways. Before reviewing please read Documentation/clearcpu.txt Some performance data for lazy: Kernel build: ~+1% (slightly faster, but that's within noise) loopback apache -1% (within noise) ebizzy -0.3% (within noise) aim7 -5.0% netperf rr -0.7% netperf stream 0.0% In comparison an older version of mds=full showed: kernel build -2.4% ebizzy -3.3% apache loopback -10.0% For networking workloads there is practically no regression now. AIM7 is showing some regression. I assume this is due to the context switch overhead. mds=full is a bit slower, but not that much. The only real outlier is apache loopback, which is probably not too realistic a workload because it mainly does tight loops over some syscalls. No changelog against previous versions, too many changes. Andi Kleen (42): x86/speculation/mds: Add basic bug infrastructure for MDS x86/speculation/mds: Clear CPU on every kernel exit x86/speculation/mds: Clear CPU buffers on entering idle x86/speculation/mds: Add command line options to control mds x86/speculation/mds: Add sysfs reporting mds: Add some administrator documentation x86/speculation/mds: Export MD_CLEAR CPUID to KVM guests. x86/cpufeatures: Add word 20 for additional features x86/speculation/mds: Handle VMENTRY clear for CPUs without l1tf mds: Add documentation for clear cpu usage x86/speculation/mds: Introduce lazy_clear_cpu x86/speculation/mds: Add basic implementation of mds=full x86/speculation/mds: Check lazy clear in kernel exit x86/speculation/mds: Add tracing for clear_cpu x86/speculation/mds: Schedule cpu clear on context switch mds: Force clear cpu on kernel preemption mds: Clear cpu in memzero_explicit and kzfree mds: Support cpu clear in interrupts mds: Support cpu clear after tasklets mds: Support cpu clearing in timers mds: Clear cpu for string io/memcpy_*io in interrupts mds: Schedule clear cpu in swiotlb mds: Instrument skb functions to clear cpu automatically mds: Clear cpu for kmap_atomic in interrupts mds: Support cpu clearing for BPF mds sweep: Schedule clear cpus in sound core mds sweep: Make MPU401 interrupts clear cpu mds sweep: Clear cpu on processing input layer data mds sweep: Clear cpu for tty input mds sweep: Clear cpu for usbmon intercepts mds sweep: Clear cpu in some Xen drivers mds sweep: Clear cpu in DVB software filters mds sweep: Mark all DRM interrupts to clear cpu mds sweep: Make all old style IDE driver interrupts clear cpu mds sweep: Make Amazon ena driver management interrupt clear cpu mds sweep: Make all PCMCIA interrupts clear cpu mds sweep: Mark common functions in comedi as clear cpu mds sweep: Make usb hcd poll clear cpu x86/speculation/mds: Switch mds=auto to lazy mds sweep: Mark interrupts that touch user data mds sweep: Mark timer handlers that touch user data mds sweep: Mark tasklets that touch user data Mark Gross (1): mds sweep: Clear cpu in sg_copy_from_buffer for SCSI .../ABI/testing/sysfs-devices-system-cpu | 1 + .../admin-guide/kernel-parameters.txt | 11 + Documentation/admin-guide/mds.rst | 95 +++++++ Documentation/clearcpu.txt | 261 ++++++++++++++++++ arch/Kconfig | 3 + arch/x86/Kconfig | 1 + arch/x86/entry/common.c | 8 + arch/x86/events/intel/uncore.c | 3 +- arch/x86/include/asm/clearbpf.h | 29 ++ arch/x86/include/asm/clearcpu.h | 83 ++++++ arch/x86/include/asm/cpufeature.h | 6 +- arch/x86/include/asm/cpufeatures.h | 9 +- arch/x86/include/asm/disabled-features.h | 3 +- arch/x86/include/asm/floppy.h | 6 +- arch/x86/include/asm/io.h | 3 + arch/x86/include/asm/msr-index.h | 1 + arch/x86/include/asm/required-features.h | 3 +- arch/x86/include/asm/trace/clearcpu.h | 27 ++ arch/x86/kernel/acpi/cstate.c | 2 + arch/x86/kernel/cpu/bugs.c | 82 ++++++ arch/x86/kernel/cpu/common.c | 25 ++ arch/x86/kernel/kvm.c | 3 + arch/x86/kernel/nmi.c | 6 +- arch/x86/kernel/process.c | 5 + arch/x86/kernel/process.h | 1 + arch/x86/kernel/smpboot.c | 3 + arch/x86/kvm/cpuid.c | 3 +- arch/x86/kvm/vmx/vmx.c | 20 +- arch/x86/mm/highmem_32.c | 3 + arch/x86/mm/tlb.c | 14 + drivers/acpi/acpi_pad.c | 2 + drivers/acpi/processor_idle.c | 3 + drivers/atm/eni.c | 3 +- drivers/atm/he.c | 3 +- drivers/atm/lanai.c | 4 +- drivers/atm/nicstar.c | 4 +- drivers/auxdisplay/img-ascii-lcd.c | 2 +- drivers/base/cpu.c | 8 + drivers/block/xsysace.c | 5 +- drivers/char/ipmi/ipmi_si_intf.c | 6 +- drivers/char/sonypi.c | 3 +- drivers/crypto/ixp4xx_crypto.c | 3 +- drivers/crypto/qat/qat_common/adf_isr.c | 7 +- drivers/crypto/qat/qat_common/adf_sriov.c | 6 +- drivers/crypto/qat/qat_common/adf_vf_isr.c | 10 +- drivers/dma/dw/core.c | 3 +- drivers/dma/ioat/init.c | 3 +- drivers/dma/virt-dma.c | 3 +- drivers/firewire/core-transaction.c | 5 +- drivers/firewire/nosy.c | 3 +- drivers/gpu/drm/drm_irq.c | 3 +- drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c | 3 +- drivers/gpu/drm/i915/i915_pmu.c | 3 +- drivers/gpu/drm/i915/intel_lrc.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pci/base.c | 3 +- drivers/hv/channel_mgmt.c | 4 +- drivers/hv/hv.c | 4 +- drivers/i2c/busses/i2c-emev2.c | 5 +- drivers/i2c/busses/i2c-i801.c | 2 +- drivers/i2c/busses/i2c-pxa.c | 4 +- drivers/i2c/busses/i2c-rk3x.c | 3 +- drivers/ide/ide-probe.c | 5 +- drivers/idle/intel_idle.c | 5 + drivers/iio/trigger/iio-trig-hrtimer.c | 3 +- drivers/infiniband/hw/bnxt_re/qplib_fp.c | 4 +- drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 4 +- drivers/infiniband/hw/i40iw/i40iw_main.c | 9 +- drivers/infiniband/hw/mthca/mthca_eq.c | 14 +- drivers/infiniband/hw/qib/qib_sdma.c | 4 +- drivers/infiniband/sw/rxe/rxe_cq.c | 3 +- drivers/input/ff-memless.c | 2 +- drivers/input/input.c | 5 +- drivers/input/misc/xen-kbdfront.c | 3 +- drivers/input/serio/hil_mlc.c | 2 +- drivers/input/serio/i8042.c | 13 +- drivers/input/serio/serio.c | 3 + drivers/ipack/carriers/tpci200.c | 6 +- drivers/isdn/capi/capidrv.c | 2 +- drivers/isdn/gigaset/bas-gigaset.c | 8 +- drivers/isdn/gigaset/common.c | 4 +- drivers/isdn/gigaset/ser-gigaset.c | 4 +- drivers/isdn/gigaset/usb-gigaset.c | 4 +- drivers/isdn/hardware/avm/b1isa.c | 4 +- drivers/isdn/hardware/avm/b1pci.c | 6 +- drivers/isdn/hardware/avm/b1pcmcia.c | 3 +- drivers/isdn/hardware/avm/c4.c | 3 +- drivers/isdn/hardware/avm/t1isa.c | 4 +- drivers/isdn/hardware/avm/t1pci.c | 3 +- drivers/isdn/hardware/mISDN/avmfritz.c | 4 +- drivers/isdn/hardware/mISDN/hfcmulti.c | 3 +- drivers/isdn/hardware/mISDN/hfcpci.c | 2 +- drivers/isdn/hardware/mISDN/mISDNinfineon.c | 3 +- drivers/isdn/hardware/mISDN/netjet.c | 2 +- drivers/isdn/hardware/mISDN/speedfax.c | 3 +- drivers/isdn/hardware/mISDN/w6692.c | 2 +- drivers/isdn/hisax/config.c | 2 +- drivers/isdn/hisax/hfc4s8s_l1.c | 3 +- drivers/isdn/hisax/hisax_fcpcipnp.c | 13 +- drivers/isdn/i4l/isdn_common.c | 2 +- drivers/media/cec/cec-pin.c | 3 +- drivers/media/common/saa7146/saa7146_core.c | 4 +- drivers/media/dvb-core/dvb_demux.c | 3 + drivers/media/pci/b2c2/flexcop-pci.c | 3 +- drivers/media/pci/bt8xx/bttv-driver.c | 2 +- drivers/media/pci/bt8xx/bttv-input.c | 5 +- drivers/media/pci/bt8xx/dvb-bt8xx.c | 3 +- drivers/media/pci/cobalt/cobalt-driver.c | 3 +- drivers/media/pci/cx18/cx18-driver.c | 3 +- drivers/media/pci/cx25821/cx25821-core.c | 2 +- drivers/media/pci/cx88/cx88-alsa.c | 3 +- drivers/media/pci/cx88/cx88-mpeg.c | 2 +- drivers/media/pci/cx88/cx88-video.c | 2 +- drivers/media/pci/dt3155/dt3155.c | 2 +- drivers/media/pci/intel/ipu3/ipu3-cio2.c | 2 +- drivers/media/pci/ivtv/ivtv-driver.c | 3 +- drivers/media/pci/mantis/mantis_dvb.c | 3 +- drivers/media/pci/meye/meye.c | 3 +- .../pci/netup_unidvb/netup_unidvb_core.c | 3 +- drivers/media/pci/ngene/ngene-core.c | 5 +- drivers/media/pci/pluto2/pluto2.c | 3 +- drivers/media/pci/saa7134/saa7134-alsa.c | 4 +- drivers/media/pci/saa7134/saa7134-core.c | 2 +- drivers/media/pci/saa7134/saa7134-input.c | 3 +- drivers/media/pci/saa7134/saa7134-ts.c | 3 +- drivers/media/pci/saa7134/saa7134-vbi.c | 3 +- drivers/media/pci/saa7134/saa7134-video.c | 3 +- drivers/media/pci/saa7164/saa7164-core.c | 7 +- drivers/media/pci/smipcie/smipcie-main.c | 3 +- drivers/media/pci/solo6x10/solo6x10-core.c | 4 +- drivers/media/pci/sta2x11/sta2x11_vip.c | 5 +- drivers/media/pci/ttpci/av7110.c | 12 +- drivers/media/pci/ttpci/av7110_ir.c | 3 +- drivers/media/pci/ttpci/budget-ci.c | 9 +- drivers/media/pci/ttpci/budget-core.c | 3 +- drivers/media/pci/tw5864/tw5864-video.c | 4 +- drivers/media/pci/tw68/tw68-core.c | 2 +- drivers/media/pci/tw686x/tw686x-core.c | 4 +- drivers/media/platform/aspeed-video.c | 5 +- .../media/platform/marvell-ccic/cafe-driver.c | 3 +- .../media/platform/marvell-ccic/mcam-core.c | 4 +- drivers/media/radio/radio-cadet.c | 2 +- drivers/media/radio/wl128x/fmdrv_common.c | 9 +- drivers/media/rc/fintek-cir.c | 3 +- drivers/media/rc/gpio-ir-recv.c | 2 +- drivers/media/rc/img-ir/img-ir-raw.c | 2 +- drivers/media/rc/ir-hix5hd2.c | 3 +- drivers/media/rc/ir-rx51.c | 3 +- drivers/media/rc/ite-cir.c | 3 +- drivers/media/rc/nuvoton-cir.c | 3 +- drivers/media/rc/serial_ir.c | 2 +- drivers/media/rc/sir_ir.c | 3 +- drivers/media/rc/winbond-cir.c | 2 +- drivers/media/usb/au0828/au0828-video.c | 6 +- drivers/media/usb/ttusb-dec/ttusb_dec.c | 5 +- drivers/memstick/host/jmb38x_ms.c | 6 +- drivers/message/fusion/mptbase.c | 3 +- drivers/mfd/ezx-pcap.c | 4 +- drivers/misc/ibmasm/module.c | 4 +- drivers/misc/sgi-gru/grufile.c | 7 +- drivers/misc/sgi-xp/xpc_uv.c | 3 +- drivers/misc/vmw_vmci/vmci_guest.c | 8 +- drivers/mmc/host/mtk-sd.c | 3 +- drivers/mmc/host/wbsd.c | 20 +- drivers/net/appletalk/cops.c | 2 +- drivers/net/arcnet/arc-rimi.c | 2 +- drivers/net/arcnet/com20020.c | 3 +- drivers/net/arcnet/com90io.c | 3 +- drivers/net/arcnet/com90xx.c | 2 +- drivers/net/caif/caif_hsi.c | 9 +- drivers/net/can/cc770/cc770.c | 4 +- drivers/net/can/peak_canfd/peak_pciefd_main.c | 8 +- drivers/net/can/sja1000/ems_pcmcia.c | 4 +- drivers/net/can/sja1000/peak_pcmcia.c | 3 +- drivers/net/can/sja1000/sja1000.c | 5 +- drivers/net/ethernet/3com/3c509.c | 3 +- drivers/net/ethernet/3com/3c515.c | 6 +- drivers/net/ethernet/8390/axnet_cs.c | 3 +- drivers/net/ethernet/8390/ne.c | 3 +- drivers/net/ethernet/8390/ne2k-pci.c | 3 +- drivers/net/ethernet/8390/pcnet_cs.c | 3 +- drivers/net/ethernet/8390/smc-ultra.c | 3 +- drivers/net/ethernet/8390/wd.c | 3 +- drivers/net/ethernet/agere/et131x.c | 4 +- drivers/net/ethernet/amazon/ena/ena_netdev.c | 5 +- drivers/net/ethernet/amazon/ena/ena_netdev.h | 1 + drivers/net/ethernet/amd/lance.c | 2 +- drivers/net/ethernet/amd/ni65.c | 5 +- drivers/net/ethernet/atheros/atlx/atl1.c | 4 +- drivers/net/ethernet/atheros/atlx/atl2.c | 4 +- drivers/net/ethernet/broadcom/cnic.c | 8 +- drivers/net/ethernet/cadence/macb_main.c | 4 +- .../net/ethernet/chelsio/cxgb3/cxgb3_main.c | 16 +- drivers/net/ethernet/micrel/ks8842.c | 7 +- drivers/net/ethernet/micrel/ks8851_mll.c | 3 +- drivers/net/ethernet/microchip/lan743x_main.c | 7 +- drivers/net/ethernet/realtek/atp.c | 3 +- drivers/net/fddi/skfp/skfddi.c | 4 +- drivers/net/hamradio/6pack.c | 4 +- drivers/net/hamradio/baycom_ser_fdx.c | 3 +- drivers/net/hamradio/baycom_ser_hdx.c | 3 +- drivers/net/hamradio/scc.c | 8 +- drivers/net/hamradio/yam.c | 6 +- drivers/net/hippi/rrunner.c | 2 +- drivers/net/ieee802154/at86rf230.c | 6 +- drivers/net/ieee802154/ca8210.c | 10 +- drivers/net/ieee802154/mcr20a.c | 3 +- drivers/net/ieee802154/mrf24j40.c | 3 +- drivers/net/ppp/ppp_async.c | 3 +- drivers/net/ppp/ppp_synctty.c | 3 +- drivers/net/slip/slip.c | 4 +- drivers/net/usb/cdc_ncm.c | 3 +- drivers/net/usb/hso.c | 6 +- drivers/net/wan/cosa.c | 2 +- drivers/net/wan/farsync.c | 6 +- drivers/net/wan/hostess_sv11.c | 3 +- drivers/net/wan/sbni.c | 2 +- drivers/net/wan/sdla.c | 4 +- drivers/net/wan/sealevel.c | 3 +- drivers/net/wireless/ath/ath9k/init.c | 5 +- drivers/net/wireless/ath/carl9170/usb.c | 4 +- .../net/wireless/broadcom/b43legacy/main.c | 8 +- drivers/net/wireless/broadcom/b43legacy/pio.c | 4 +- .../broadcom/brcm80211/brcmfmac/bcmsdh.c | 7 +- .../broadcom/brcm80211/brcmsmac/mac80211_if.c | 3 +- drivers/net/wireless/cisco/airo.c | 4 +- drivers/net/wireless/intel/ipw2x00/ipw2100.c | 9 +- drivers/net/wireless/intel/ipw2x00/ipw2200.c | 8 +- .../net/wireless/intel/iwlegacy/3945-mac.c | 9 +- .../net/wireless/intel/iwlegacy/4965-mac.c | 9 +- .../net/wireless/intersil/hostap/hostap_ap.c | 2 +- .../net/wireless/intersil/hostap/hostap_pci.c | 3 +- .../net/wireless/intersil/hostap/hostap_plx.c | 3 +- drivers/net/wireless/intersil/orinoco/main.c | 4 +- .../intersil/orinoco/orinoco_nortel.c | 4 +- .../wireless/intersil/orinoco/orinoco_pci.c | 4 +- .../wireless/intersil/orinoco/orinoco_plx.c | 4 +- .../wireless/intersil/orinoco/orinoco_tmd.c | 4 +- drivers/net/wireless/intersil/p54/p54pci.c | 2 +- drivers/net/wireless/intersil/p54/p54spi.c | 4 +- .../intersil/prism54/islpci_hotplug.c | 2 +- drivers/net/wireless/mac80211_hwsim.c | 6 +- drivers/net/wireless/marvell/libertas/if_cs.c | 2 +- .../net/wireless/marvell/libertas/if_spi.c | 3 +- .../wireless/marvell/mwifiex/11n_rxreorder.c | 3 +- drivers/net/wireless/marvell/mwifiex/main.c | 5 +- drivers/net/wireless/marvell/mwifiex/pcie.c | 8 +- drivers/net/wireless/marvell/mwifiex/usb.c | 2 +- drivers/net/wireless/marvell/mwl8k.c | 10 +- .../net/wireless/mediatek/mt76/mt76x0/pci.c | 3 +- .../net/wireless/mediatek/mt76/mt76x2/pci.c | 3 +- .../quantenna/qtnfmac/pcie/pearl_pcie.c | 3 +- .../quantenna/qtnfmac/pcie/topaz_pcie.c | 3 +- .../net/wireless/ralink/rt2x00/rt2x00mmio.c | 6 +- .../wireless/realtek/rtl818x/rtl8180/dev.c | 6 +- drivers/net/wireless/realtek/rtlwifi/pci.c | 16 +- drivers/net/wireless/ti/wl1251/sdio.c | 4 +- drivers/net/wireless/ti/wl1251/spi.c | 5 +- drivers/ntb/hw/amd/ntb_hw_amd.c | 12 +- drivers/ntb/hw/intel/ntb_hw_gen1.c | 12 +- drivers/ntb/hw/mscc/ntb_hw_switchtec.c | 8 +- drivers/parport/parport_ax88796.c | 3 +- drivers/parport/parport_pc.c | 3 +- drivers/pci/controller/pcie-xilinx.c | 2 +- drivers/pci/controller/vmd.c | 11 +- drivers/pci/hotplug/cpci_hotplug_core.c | 6 +- drivers/pci/hotplug/cpqphp_core.c | 3 +- drivers/pci/hotplug/shpchp_hpc.c | 5 +- drivers/pci/pcie/pme.c | 3 +- drivers/pci/switch/switchtec.c | 10 +- drivers/pcmcia/i82092.c | 2 +- drivers/pcmcia/i82365.c | 9 +- drivers/pcmcia/pcmcia_resource.c | 9 +- drivers/pcmcia/pd6729.c | 8 +- drivers/pcmcia/tcic.c | 7 +- drivers/pcmcia/yenta_socket.c | 7 +- drivers/pinctrl/intel/pinctrl-intel.c | 2 +- drivers/pinctrl/pinctrl-amd.c | 3 +- drivers/pinctrl/pinctrl-single.c | 3 +- drivers/platform/goldfish/goldfish_pipe.c | 6 +- drivers/platform/mellanox/mlxreg-hotplug.c | 5 +- drivers/platform/x86/fujitsu-tablet.c | 3 +- drivers/platform/x86/intel_int0002_vgpio.c | 2 +- drivers/platform/x86/intel_ips.c | 3 +- drivers/platform/x86/intel_pmc_ipc.c | 8 +- drivers/platform/x86/intel_punit_ipc.c | 4 +- drivers/platform/x86/intel_scu_ipc.c | 5 +- drivers/platform/x86/sony-laptop.c | 5 +- drivers/pnp/resource.c | 3 +- drivers/power/reset/ltc2952-poweroff.c | 6 +- drivers/power/supply/act8945a_charger.c | 6 +- drivers/power/supply/goldfish_battery.c | 5 +- .../power/supply/max14656_charger_detector.c | 2 +- drivers/power/supply/pda_power.c | 6 +- drivers/power/supply/wm97xx_battery.c | 5 +- drivers/pps/clients/pps-gpio.c | 3 +- drivers/ptp/ptp_pch.c | 3 +- drivers/rapidio/devices/tsi721.c | 25 +- drivers/rapidio/devices/tsi721_dma.c | 8 +- drivers/regulator/qcom_spmi-regulator.c | 5 +- drivers/rpmsg/qcom_glink_native.c | 5 +- drivers/rtc/rtc-cmos.c | 5 +- drivers/rtc/rtc-ds1305.c | 3 +- drivers/rtc/rtc-ds1374.c | 5 +- drivers/rtc/rtc-ds1511.c | 3 +- drivers/rtc/rtc-ds1553.c | 4 +- drivers/rtc/rtc-ds1685.c | 3 +- drivers/rtc/rtc-ftrtc010.c | 2 +- drivers/rtc/rtc-m48t59.c | 5 +- drivers/rtc/rtc-mrst.c | 3 +- drivers/rtc/rtc-pcap.c | 10 +- drivers/rtc/rtc-r7301.c | 3 +- drivers/rtc/rtc-snvs.c | 3 +- drivers/rtc/rtc-stk17ta8.c | 5 +- drivers/rtc/rtc-zynqmp.c | 6 +- drivers/scsi/3w-9xxx.c | 6 +- drivers/scsi/3w-sas.c | 6 +- drivers/scsi/3w-xxxx.c | 3 +- drivers/scsi/BusLogic.c | 3 +- drivers/scsi/a100u2w.c | 4 +- drivers/scsi/aacraid/commsup.c | 8 +- drivers/scsi/aacraid/rx.c | 3 +- drivers/scsi/aacraid/sa.c | 3 +- drivers/scsi/aacraid/src.c | 3 +- drivers/scsi/advansys.c | 4 +- drivers/scsi/aha152x.c | 4 +- drivers/scsi/aha1542.c | 2 +- drivers/scsi/aha1740.c | 3 +- drivers/scsi/aic7xxx/aic7770_osm.c | 3 +- drivers/scsi/aic7xxx/aic79xx_osm_pci.c | 2 +- drivers/scsi/aic7xxx/aic7xxx_osm_pci.c | 2 +- drivers/scsi/aic94xx/aic94xx_hwi.c | 4 +- drivers/scsi/aic94xx/aic94xx_init.c | 5 +- drivers/scsi/am53c974.c | 4 +- drivers/scsi/arcmsr/arcmsr_hba.c | 3 +- drivers/scsi/atp870u.c | 3 +- drivers/scsi/be2iscsi/be_main.c | 12 +- drivers/scsi/bfa/bfad.c | 9 +- drivers/scsi/csiostor/csio_isr.c | 16 +- drivers/scsi/dpt_i2o.c | 2 +- drivers/scsi/esas2r/esas2r_init.c | 8 +- drivers/scsi/fnic/fnic_isr.c | 13 +- drivers/scsi/g_NCR5380.c | 7 +- drivers/scsi/gdth.c | 8 +- drivers/scsi/hpsa.c | 19 +- drivers/scsi/hptiop.c | 3 +- drivers/scsi/initio.c | 3 +- drivers/scsi/ipr.c | 23 +- drivers/scsi/ips.c | 4 +- drivers/scsi/isci/init.c | 8 +- drivers/scsi/lpfc/lpfc_init.c | 35 ++- drivers/scsi/megaraid.c | 4 +- drivers/scsi/megaraid/megaraid_mbox.c | 3 +- drivers/scsi/megaraid/megaraid_sas_base.c | 8 +- drivers/scsi/mpt3sas/mpt3sas_base.c | 2 +- drivers/scsi/mvsas/mv_init.c | 4 +- drivers/scsi/mvumi.c | 8 +- drivers/scsi/myrb.c | 2 +- drivers/scsi/myrs.c | 2 +- drivers/scsi/nsp32.c | 3 +- drivers/scsi/pcmcia/qlogic_stub.c | 2 +- drivers/scsi/pcmcia/sym53c500_cs.c | 2 +- drivers/scsi/pm8001/pm8001_init.c | 10 +- drivers/scsi/pmcraid.c | 5 +- drivers/scsi/qedf/qedf_main.c | 4 +- drivers/scsi/qedi/qedi_main.c | 3 +- drivers/scsi/qla1280.c | 3 +- drivers/scsi/qla2xxx/qla_isr.c | 22 +- drivers/scsi/qla4xxx/ql4_isr.c | 5 +- drivers/scsi/qla4xxx/ql4_nx.c | 10 +- drivers/scsi/qlogicfas.c | 2 +- drivers/scsi/sim710.c | 2 +- drivers/scsi/smartpqi/smartpqi_init.c | 11 +- drivers/scsi/snic/snic_isr.c | 5 +- drivers/scsi/stex.c | 4 +- drivers/scsi/sym53c8xx_2/sym_glue.c | 3 +- drivers/scsi/ufs/ufshcd.c | 7 +- drivers/scsi/vmw_pvscsi.c | 9 +- drivers/scsi/wd719x.c | 4 +- drivers/slimbus/qcom-ctrl.c | 3 +- drivers/spi/spi-altera.c | 3 +- drivers/spi/spi-axi-spi-engine.c | 3 +- drivers/spi/spi-cadence.c | 3 +- drivers/spi/spi-dw.c | 4 +- drivers/spi/spi-fsl-spi.c | 3 +- drivers/spi/spi-oc-tiny.c | 3 +- drivers/spi/spi-pxa2xx.c | 4 +- drivers/spi/spi-topcliff-pch.c | 5 +- drivers/spi/spi-xilinx.c | 5 +- drivers/spi/spi-zynqmp-gqspi.c | 3 +- drivers/staging/android/vsoc.c | 3 +- drivers/staging/axis-fifo/axis-fifo.c | 3 +- drivers/staging/comedi/comedi_buf.c | 5 + .../staging/comedi/drivers/addi_apci_1032.c | 3 +- .../staging/comedi/drivers/addi_apci_1500.c | 3 +- .../staging/comedi/drivers/addi_apci_1564.c | 3 +- .../staging/comedi/drivers/addi_apci_2032.c | 3 +- .../staging/comedi/drivers/addi_apci_3120.c | 3 +- .../staging/comedi/drivers/addi_apci_3xxx.c | 3 +- drivers/staging/comedi/drivers/adl_pci9111.c | 3 +- drivers/staging/comedi/drivers/adl_pci9118.c | 3 +- drivers/staging/comedi/drivers/adv_pci1710.c | 3 +- drivers/staging/comedi/drivers/aio_iiro_16.c | 3 +- .../comedi/drivers/amplc_dio200_common.c | 3 +- .../comedi/drivers/amplc_pc236_common.c | 3 +- drivers/staging/comedi/drivers/amplc_pci224.c | 3 +- drivers/staging/comedi/drivers/amplc_pci230.c | 3 +- drivers/staging/comedi/drivers/cb_pcidas.c | 4 +- drivers/staging/comedi/drivers/cb_pcidas64.c | 5 +- .../staging/comedi/drivers/comedi_parport.c | 3 +- drivers/staging/comedi/drivers/comedi_test.c | 6 +- drivers/staging/comedi/drivers/das16m1.c | 3 +- drivers/staging/comedi/drivers/das1800.c | 3 +- drivers/staging/comedi/drivers/das6402.c | 3 +- drivers/staging/comedi/drivers/das800.c | 5 +- drivers/staging/comedi/drivers/dmm32at.c | 3 +- drivers/staging/comedi/drivers/dt2811.c | 3 +- drivers/staging/comedi/drivers/dt2814.c | 3 +- drivers/staging/comedi/drivers/dt282x.c | 2 +- drivers/staging/comedi/drivers/dt3000.c | 3 +- drivers/staging/comedi/drivers/gsc_hpdi.c | 3 +- drivers/staging/comedi/drivers/jr3_pci.c | 2 +- drivers/staging/comedi/drivers/me4000.c | 3 +- drivers/staging/comedi/drivers/ni_6527.c | 4 +- drivers/staging/comedi/drivers/ni_65xx.c | 3 +- drivers/staging/comedi/drivers/ni_660x.c | 4 +- drivers/staging/comedi/drivers/ni_at_a2150.c | 2 +- drivers/staging/comedi/drivers/ni_atmio.c | 3 +- drivers/staging/comedi/drivers/ni_atmio16d.c | 3 +- .../staging/comedi/drivers/ni_labpc_common.c | 5 +- drivers/staging/comedi/drivers/ni_pcidio.c | 3 +- drivers/staging/comedi/drivers/ni_pcimio.c | 3 +- drivers/staging/comedi/drivers/pcl711.c | 3 +- drivers/staging/comedi/drivers/pcl726.c | 3 +- drivers/staging/comedi/drivers/pcl812.c | 3 +- drivers/staging/comedi/drivers/pcl816.c | 2 +- drivers/staging/comedi/drivers/pcl818.c | 3 +- drivers/staging/comedi/drivers/pcmmio.c | 3 +- drivers/staging/comedi/drivers/pcmuio.c | 6 +- drivers/staging/comedi/drivers/rtd520.c | 3 +- drivers/staging/comedi/drivers/s626.c | 3 +- drivers/staging/gasket/gasket_interrupt.c | 3 +- drivers/staging/goldfish/goldfish_audio.c | 5 +- drivers/staging/iio/adc/ad7606.c | 3 +- drivers/staging/ks7010/ks_hostif.c | 3 +- drivers/staging/media/bcm2048/radio-bcm2048.c | 4 +- drivers/staging/media/zoran/zoran_card.c | 2 +- drivers/staging/most/dim2/dim2.c | 6 +- drivers/staging/most/i2c/i2c.c | 3 +- drivers/staging/olpc_dcon/olpc_dcon_xo_1.c | 2 +- drivers/staging/olpc_dcon/olpc_dcon_xo_1_5.c | 2 +- drivers/staging/pi433/pi433_if.c | 6 +- drivers/staging/rtl8188eu/core/rtw_recv.c | 2 +- .../staging/rtl8188eu/hal/rtl8188eu_recv.c | 6 +- .../staging/rtl8188eu/hal/rtl8188eu_xmit.c | 6 +- drivers/staging/rtl8188eu/os_dep/mlme_linux.c | 17 +- drivers/staging/rtl8188eu/os_dep/recv_linux.c | 2 +- drivers/staging/rtl8192e/rtl8192e/rtl_core.c | 20 +- drivers/staging/rtl8192e/rtllib_softmac.c | 6 +- .../rtl8192u/ieee80211/ieee80211_module.c | 2 +- .../rtl8192u/ieee80211/ieee80211_softmac.c | 6 +- drivers/staging/rtl8712/rtl8712_recv.c | 6 +- drivers/staging/rtl8712/rtl871x_xmit.c | 6 +- .../staging/rtl8723bs/hal/rtl8723bs_recv.c | 8 +- drivers/staging/rtl8723bs/os_dep/mlme_linux.c | 22 +- drivers/staging/rtl8723bs/os_dep/recv_linux.c | 2 +- drivers/staging/rtlwifi/pci.c | 4 +- drivers/staging/rts5208/rtsx.c | 4 +- drivers/staging/speakup/main.c | 2 +- drivers/staging/speakup/serialio.c | 5 +- drivers/staging/vt6655/device_main.c | 2 +- drivers/thermal/ti-soc-thermal/ti-bandgap.c | 6 +- drivers/thunderbolt/nhi.c | 6 +- drivers/tty/cyclades.c | 9 +- drivers/tty/goldfish.c | 4 +- drivers/tty/hvc/hvc_irq.c | 4 +- drivers/tty/ipwireless/hardware.c | 3 +- drivers/tty/isicom.c | 4 +- drivers/tty/moxa.c | 2 +- drivers/tty/mxser.c | 4 +- drivers/tty/n_gsm.c | 5 +- drivers/tty/n_r3964.c | 2 +- drivers/tty/rocket.c | 2 +- drivers/tty/serial/8250/8250_core.c | 6 +- drivers/tty/serial/8250/8250_exar.c | 2 +- drivers/tty/serial/8250/8250_port.c | 4 +- drivers/tty/serial/altera_jtaguart.c | 4 +- drivers/tty/serial/altera_uart.c | 5 +- drivers/tty/serial/arc_uart.c | 2 +- drivers/tty/serial/digicolor-usart.c | 3 +- drivers/tty/serial/fsl_lpuart.c | 12 +- drivers/tty/serial/ifx6x60.c | 11 +- drivers/tty/serial/jsm/jsm_driver.c | 3 +- drivers/tty/serial/max3100.c | 5 +- drivers/tty/serial/men_z135_uart.c | 4 +- drivers/tty/serial/mux.c | 2 +- drivers/tty/serial/pch_uart.c | 4 +- drivers/tty/serial/pnx8xxx_uart.c | 3 +- drivers/tty/serial/rp2.c | 2 +- drivers/tty/serial/sc16is7xx.c | 2 +- drivers/tty/serial/sccnxp.c | 2 +- drivers/tty/serial/sh-sci.c | 9 +- drivers/tty/serial/timbuart.c | 4 +- drivers/tty/serial/uartlite.c | 3 +- drivers/tty/serial/xilinx_uartps.c | 4 +- drivers/tty/synclink.c | 3 +- drivers/tty/synclink_gt.c | 6 +- drivers/tty/synclinkmp.c | 7 +- drivers/tty/tty_buffer.c | 5 +- drivers/tty/vcc.c | 4 +- drivers/tty/vt/keyboard.c | 2 +- drivers/uio/uio.c | 3 +- drivers/usb/atm/usbatm.c | 6 +- drivers/usb/c67x00/c67x00-drv.c | 3 +- drivers/usb/chipidea/core.c | 5 +- drivers/usb/chipidea/otg_fsm.c | 3 +- drivers/usb/core/hcd.c | 8 +- drivers/usb/dwc2/gadget.c | 3 +- drivers/usb/dwc2/hcd_queue.c | 6 +- drivers/usb/dwc2/platform.c | 3 +- drivers/usb/gadget/function/f_midi.c | 3 +- drivers/usb/gadget/function/f_ncm.c | 3 +- drivers/usb/gadget/udc/amd5536udc_pci.c | 2 +- drivers/usb/gadget/udc/bdc/bdc_udc.c | 3 +- drivers/usb/gadget/udc/dummy_hcd.c | 4 +- drivers/usb/gadget/udc/fotg210-udc.c | 4 +- drivers/usb/gadget/udc/fusb300_udc.c | 6 +- drivers/usb/gadget/udc/goku_udc.c | 3 +- drivers/usb/gadget/udc/m66592-udc.c | 6 +- drivers/usb/gadget/udc/mv_u3d_core.c | 3 +- drivers/usb/gadget/udc/mv_udc_core.c | 3 +- drivers/usb/gadget/udc/net2272.c | 3 +- drivers/usb/gadget/udc/net2280.c | 3 +- drivers/usb/gadget/udc/pch_udc.c | 8 +- drivers/usb/gadget/udc/pxa27x_udc.c | 3 +- drivers/usb/gadget/udc/r8a66597-udc.c | 7 +- drivers/usb/gadget/udc/snps_udc_plat.c | 4 +- drivers/usb/gadget/udc/udc-xilinx.c | 3 +- drivers/usb/host/max3421-hcd.c | 3 +- drivers/usb/host/xhci.c | 12 +- drivers/usb/isp1760/isp1760-udc.c | 3 +- drivers/usb/musb/musb_core.c | 2 +- drivers/usb/phy/phy-gpio-vbus-usb.c | 4 +- drivers/usb/serial/mos7720.c | 4 +- drivers/usb/usbip/vudc_transfer.c | 2 +- drivers/uwb/neh.c | 2 +- drivers/uwb/rsv.c | 5 +- drivers/uwb/whc-rc.c | 5 +- drivers/vfio/pci/vfio_pci_intrs.c | 5 +- drivers/video/fbdev/arcfb.c | 3 +- drivers/video/fbdev/aty/atyfb_base.c | 2 +- drivers/video/fbdev/goldfishfb.c | 4 +- drivers/video/fbdev/matrox/matroxfb_base.c | 3 +- drivers/video/fbdev/mb862xx/mb862xxfbdrv.c | 7 +- drivers/video/fbdev/via/via-core.c | 3 +- drivers/video/fbdev/xen-fbfront.c | 2 + drivers/virt/vboxguest/vboxguest_linux.c | 5 +- drivers/virtio/virtio_mmio.c | 4 +- drivers/virtio/virtio_pci_common.c | 20 +- drivers/visorbus/visorbus_main.c | 2 +- drivers/vme/bridges/vme_ca91cx42.c | 5 +- drivers/vme/bridges/vme_tsi148.c | 7 +- drivers/w1/masters/ds1wm.c | 3 +- drivers/xen/events/events_base.c | 12 +- drivers/xen/platform-pci.c | 4 +- drivers/xen/pvcalls-front.c | 2 + drivers/xen/xen-pciback/pciback_ops.c | 6 +- include/asm-generic/io.h | 3 + include/linux/clearcpu.h | 36 +++ include/linux/filter.h | 21 +- include/linux/highmem.h | 2 + include/linux/hrtimer.h | 4 + include/linux/interrupt.h | 18 +- include/linux/skbuff.h | 2 + include/linux/timer.h | 14 +- include/linux/tty_flip.h | 4 + include/linux/usb/hcd.h | 5 +- kernel/bpf/core.c | 2 + kernel/bpf/cpumap.c | 3 + kernel/dma/swiotlb.c | 2 + kernel/irq/handle.c | 4 + kernel/irq/manage.c | 1 + kernel/sched/core.c | 9 + kernel/softirq.c | 25 +- kernel/time/alarmtimer.c | 2 +- kernel/time/hrtimer.c | 5 + kernel/time/timer.c | 8 + lib/random32.c | 2 +- lib/scatterlist.c | 2 + lib/string.c | 6 + mm/slab_common.c | 5 +- net/atm/pppoatm.c | 2 +- net/core/skbuff.c | 32 +++ net/mac80211/main.c | 14 +- net/rds/ib_cm.c | 8 +- net/wireless/lib80211.c | 2 +- net/xfrm/xfrm_state.c | 3 +- samples/v4l/v4l2-pci-skeleton.c | 5 +- security/keys/gc.c | 2 +- sound/core/hrtimer.c | 3 +- sound/core/pcm_lib.c | 3 + sound/core/rawmidi.c | 3 + sound/core/timer.c | 7 +- sound/drivers/mpu401/mpu401_uart.c | 8 +- sound/drivers/mtpav.c | 5 +- sound/drivers/pcsp/pcsp.c | 3 +- sound/drivers/serial-u16550.c | 6 +- sound/isa/ad1816a/ad1816a_lib.c | 2 +- sound/isa/es1688/es1688_lib.c | 4 +- sound/isa/es18xx.c | 3 +- sound/isa/gus/gus_main.c | 2 +- sound/isa/gus/gusmax.c | 2 +- sound/isa/gus/interwave.c | 3 +- sound/isa/msnd/msnd_pinnacle.c | 3 +- sound/isa/opl3sa2.c | 4 +- sound/isa/opti9xx/opti92x-ad1848.c | 3 +- sound/isa/sb/emu8000_pcm.c | 2 +- sound/isa/sb/sb8_midi.c | 3 +- sound/isa/sb/sb_common.c | 6 +- sound/isa/wavefront/wavefront.c | 3 +- sound/isa/wavefront/wavefront_midi.c | 4 +- sound/isa/wss/wss_lib.c | 3 +- sound/pci/ad1889.c | 3 +- sound/pci/ali5451/ali5451.c | 3 +- sound/pci/als300.c | 3 +- sound/pci/asihpi/asihpi.c | 4 +- sound/pci/asihpi/hpioctl.c | 3 +- sound/pci/atiixp.c | 3 +- sound/pci/atiixp_modem.c | 3 +- sound/pci/aw2/aw2-alsa.c | 3 +- sound/pci/azt3328.c | 3 +- sound/pci/bt87x.c | 4 +- sound/pci/ca0106/ca0106_main.c | 3 +- sound/pci/cmipci.c | 3 +- sound/pci/cs4281.c | 3 +- sound/pci/cs46xx/cs46xx_lib.c | 3 +- sound/pci/cs5535audio/cs5535audio.c | 3 +- sound/pci/ctxfi/cthw20k1.c | 3 +- sound/pci/ctxfi/cthw20k2.c | 3 +- sound/pci/echoaudio/midi.c | 2 +- sound/pci/emu10k1/emu10k1_main.c | 3 +- sound/pci/emu10k1/emu10k1x.c | 3 +- sound/pci/ens1370.c | 3 +- sound/pci/es1938.c | 6 +- sound/pci/es1968.c | 3 +- sound/pci/fm801.c | 3 +- sound/pci/hda/hda_intel.c | 4 +- sound/pci/ice1712/ice1712.c | 3 +- sound/pci/ice1712/ice1724.c | 3 +- sound/pci/intel8x0.c | 6 +- sound/pci/intel8x0m.c | 6 +- sound/pci/korg1212/korg1212.c | 4 +- sound/pci/lola/lola.c | 3 +- sound/pci/maestro3.c | 3 +- sound/pci/nm256/nm256.c | 3 +- sound/pci/oxygen/oxygen_lib.c | 4 +- sound/pci/riptide/riptide.c | 3 +- sound/pci/rme32.c | 3 +- sound/pci/rme96.c | 3 +- sound/pci/rme9652/hdsp.c | 8 +- sound/pci/rme9652/hdspm.c | 10 +- sound/pci/rme9652/rme9652.c | 3 +- sound/pci/sis7019.c | 7 +- sound/pci/sonicvibes.c | 3 +- sound/pci/trident/trident_main.c | 3 +- sound/pci/via82xx.c | 6 +- sound/pci/via82xx_modem.c | 3 +- sound/pci/ymfpci/ymfpci_main.c | 3 +- sound/soc/amd/acp-pcm-dma.c | 3 +- sound/soc/amd/raven/acp3x-pcm-dma.c | 3 +- sound/soc/codecs/rt5640.c | 4 +- sound/soc/codecs/rt5651.c | 4 +- sound/soc/codecs/rt5663.c | 4 +- sound/soc/dwc/dwc-i2s.c | 5 +- sound/soc/fsl/fsl_asrc.c | 3 +- sound/soc/fsl/fsl_esai.c | 3 +- sound/soc/fsl/fsl_sai.c | 3 +- sound/soc/fsl/fsl_spdif.c | 3 +- sound/soc/fsl/fsl_ssi.c | 3 +- sound/usb/midi.c | 6 +- sound/usb/misc/ua101.c | 4 +- sound/x86/intel_hdmi_audio.c | 5 +- 681 files changed, 2457 insertions(+), 1308 deletions(-) create mode 100644 Documentation/admin-guide/mds.rst create mode 100644 Documentation/clearcpu.txt create mode 100644 arch/x86/include/asm/clearbpf.h create mode 100644 arch/x86/include/asm/clearcpu.h create mode 100644 arch/x86/include/asm/trace/clearcpu.h create mode 100644 include/linux/clearcpu.h -- 2.17.2