Merge tag 'docs-4.12-2' of git://git.lwn.net/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 11 May 2017 18:29:52 +0000 (11:29 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 11 May 2017 18:29:52 +0000 (11:29 -0700)
Pull more documentation updates from Jonathan Corbet:
 "Connect the newly RST-formatted documentation to the rest; this had to
  wait until the input pull was done. There's also a few small fixes
  that wandered in"

* tag 'docs-4.12-2' of git://git.lwn.net/linux:
  doc: replace FTP URL to kernel.org with HTTPS one
  docs: update references to the device io book
  Documentation: earlycon: fix Marvell Armada 3700 UART name
  docs-rst: add input docs at main index and use kernel-figure

1073 files changed:
.gitignore
Documentation/00-INDEX
Documentation/RCU/00-INDEX
Documentation/RCU/Design/Data-Structures/Data-Structures.html
Documentation/RCU/Design/Data-Structures/nxtlist.svg
Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.html
Documentation/RCU/Design/Requirements/Requirements.html
Documentation/RCU/rcu_dereference.txt
Documentation/RCU/rculist_nulls.txt
Documentation/RCU/stallwarn.txt
Documentation/RCU/whatisRCU.txt
Documentation/admin-guide/kernel-parameters.txt
Documentation/arm64/tagged-pointers.txt
Documentation/block/bfq-iosched.txt
Documentation/devicetree/bindings/arm/firmware/linaro,optee-tz.txt [new file with mode: 0644]
Documentation/devicetree/bindings/arm/mediatek/mediatek,apmixedsys.txt
Documentation/devicetree/bindings/arm/mediatek/mediatek,imgsys.txt
Documentation/devicetree/bindings/arm/mediatek/mediatek,infracfg.txt
Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.txt
Documentation/devicetree/bindings/arm/mediatek/mediatek,topckgen.txt
Documentation/devicetree/bindings/arm/mediatek/mediatek,vdecsys.txt
Documentation/devicetree/bindings/arm/mediatek/mediatek,vencsys.txt
Documentation/devicetree/bindings/clock/idt,versaclock5.txt
Documentation/devicetree/bindings/clock/rockchip,rv1108-cru.txt [moved from Documentation/devicetree/bindings/clock/rockchip,rk1108-cru.txt with 83% similarity]
Documentation/devicetree/bindings/clock/sunxi-ccu.txt
Documentation/devicetree/bindings/display/imx/fsl,imx-fb.txt
Documentation/devicetree/bindings/iommu/arm,smmu.txt
Documentation/devicetree/bindings/mtd/atmel-nand.txt
Documentation/devicetree/bindings/mtd/denali-nand.txt
Documentation/devicetree/bindings/mtd/gpio-control-nand.txt
Documentation/devicetree/bindings/mtd/stm32-quadspi.txt [new file with mode: 0644]
Documentation/devicetree/bindings/power/power_domain.txt
Documentation/devicetree/bindings/pwm/atmel-pwm.txt
Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.txt
Documentation/devicetree/bindings/pwm/pwm-mediatek.txt [new file with mode: 0644]
Documentation/devicetree/bindings/rtc/cpcap-rtc.txt [new file with mode: 0644]
Documentation/devicetree/bindings/rtc/rtc-sh.txt [new file with mode: 0644]
Documentation/devicetree/bindings/trivial-devices.txt
Documentation/devicetree/bindings/usb/da8xx-usb.txt
Documentation/devicetree/bindings/vendor-prefixes.txt
Documentation/filesystems/nfs/pnfs.txt
Documentation/filesystems/overlayfs.txt
Documentation/ioctl/ioctl-number.txt
Documentation/kbuild/makefiles.txt
Documentation/memory-barriers.txt
Documentation/tee.txt [new file with mode: 0644]
Documentation/virtual/kvm/devices/arm-vgic-its.txt
Documentation/virtual/kvm/devices/arm-vgic-v3.txt
Kbuild
MAINTAINERS
Makefile
arch/Kconfig
arch/alpha/include/uapi/asm/Kbuild
arch/alpha/lib/Makefile
arch/arc/Makefile
arch/arc/include/uapi/asm/Kbuild
arch/arm/Makefile
arch/arm/boot/dts/rk1108.dtsi
arch/arm/include/uapi/asm/Kbuild
arch/arm/include/uapi/asm/kvm.h
arch/arm/kernel/module.c
arch/arm/kvm/Makefile
arch/arm/kvm/trace.h
arch/arm/mach-omap2/clkt2xxx_dpllcore.c
arch/arm/mach-omap2/clock.c
arch/arm/mach-omap2/clock.h
arch/arm/mach-omap2/cm.h
arch/arm/mach-omap2/cm2xxx.c
arch/arm/mach-omap2/cm3xxx.c
arch/arm/mach-omap2/cm_common.c
arch/arm/mm/dma-mapping.c
arch/arm/plat-samsung/devs.c
arch/arm64/Makefile
arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts
arch/arm64/include/asm/asm-uaccess.h
arch/arm64/include/asm/atomic_lse.h
arch/arm64/include/asm/barrier.h
arch/arm64/include/asm/cmpxchg.h
arch/arm64/include/asm/kvm_emulate.h
arch/arm64/include/asm/uaccess.h
arch/arm64/include/uapi/asm/Kbuild
arch/arm64/include/uapi/asm/kvm.h
arch/arm64/kernel/armv8_deprecated.c
arch/arm64/kernel/entry.S
arch/arm64/kernel/hw_breakpoint.c
arch/arm64/kernel/module.c
arch/arm64/kernel/traps.c
arch/arm64/kvm/Makefile
arch/arm64/kvm/sys_regs.c
arch/arm64/mm/dma-mapping.c
arch/blackfin/include/uapi/asm/Kbuild
arch/c6x/include/uapi/asm/Kbuild
arch/cris/arch-v32/drivers/Kconfig
arch/cris/include/arch-v10/arch/Kbuild [deleted file]
arch/cris/include/arch-v32/arch/Kbuild [deleted file]
arch/cris/include/uapi/arch-v10/arch/Kbuild [deleted file]
arch/cris/include/uapi/arch-v32/arch/Kbuild [deleted file]
arch/cris/include/uapi/asm/Kbuild
arch/frv/include/uapi/asm/Kbuild
arch/frv/kernel/asm-offsets.c
arch/h8300/include/uapi/asm/Kbuild
arch/h8300/include/uapi/asm/bitsperlong.h [moved from arch/h8300/include/asm/bitsperlong.h with 67% similarity]
arch/hexagon/include/asm/Kbuild
arch/hexagon/include/uapi/asm/Kbuild
arch/ia64/include/uapi/asm/Kbuild
arch/ia64/kernel/Makefile
arch/ia64/kernel/Makefile.gate
arch/m32r/include/uapi/asm/Kbuild
arch/m68k/include/uapi/asm/Kbuild
arch/metag/include/asm/uaccess.h
arch/metag/include/uapi/asm/Kbuild
arch/metag/lib/usercopy.c
arch/metag/mm/mmu-meta1.c
arch/microblaze/include/uapi/asm/Kbuild
arch/mips/include/uapi/asm/Kbuild
arch/mn10300/include/uapi/asm/Kbuild
arch/nios2/include/uapi/asm/Kbuild
arch/openrisc/include/asm/Kbuild
arch/openrisc/include/uapi/asm/Kbuild
arch/parisc/include/uapi/asm/Kbuild
arch/powerpc/Kconfig
arch/powerpc/include/asm/kvm_book3s_asm.h
arch/powerpc/include/asm/kvm_host.h
arch/powerpc/include/asm/kvm_ppc.h
arch/powerpc/include/asm/xive.h
arch/powerpc/include/uapi/asm/Kbuild
arch/powerpc/kernel/asm-offsets.c
arch/powerpc/kvm/Kconfig
arch/powerpc/kvm/Makefile
arch/powerpc/kvm/book3s.c
arch/powerpc/kvm/book3s_hv.c
arch/powerpc/kvm/book3s_hv_builtin.c
arch/powerpc/kvm/book3s_hv_rm_xics.c
arch/powerpc/kvm/book3s_hv_rm_xive.c [new file with mode: 0644]
arch/powerpc/kvm/book3s_hv_rmhandlers.S
arch/powerpc/kvm/book3s_rtas.c
arch/powerpc/kvm/book3s_xics.c
arch/powerpc/kvm/book3s_xics.h
arch/powerpc/kvm/book3s_xive.c [new file with mode: 0644]
arch/powerpc/kvm/book3s_xive.h [new file with mode: 0644]
arch/powerpc/kvm/book3s_xive_template.c [new file with mode: 0644]
arch/powerpc/kvm/irq.h
arch/powerpc/kvm/powerpc.c
arch/powerpc/platforms/powernv/opal.c
arch/powerpc/sysdev/xive/common.c
arch/powerpc/sysdev/xive/native.c
arch/s390/include/uapi/asm/Kbuild
arch/score/include/asm/Kbuild
arch/score/include/uapi/asm/Kbuild
arch/sh/Makefile
arch/sh/include/uapi/asm/Kbuild
arch/sparc/include/uapi/asm/Kbuild
arch/sparc/kernel/head_64.S
arch/sparc/kernel/led.c
arch/sparc/kernel/setup_32.c
arch/sparc/kernel/setup_64.c
arch/sparc/lib/GENbzero.S
arch/sparc/lib/NGbzero.S
arch/tile/include/arch/Kbuild [deleted file]
arch/tile/include/asm/Kbuild
arch/tile/include/uapi/arch/Kbuild [deleted file]
arch/tile/include/uapi/asm/Kbuild
arch/unicore32/Makefile
arch/unicore32/include/uapi/asm/Kbuild
arch/x86/include/asm/kvm_host.h
arch/x86/include/uapi/asm/Kbuild
arch/x86/kernel/i8259.c
arch/x86/kernel/tboot.c
arch/x86/kvm/mmu.c
arch/x86/kvm/mmu.h
arch/x86/kvm/paging_tmpl.h
arch/x86/kvm/vmx.c
arch/x86/mm/testmmiotrace.c
arch/xtensa/include/uapi/asm/Kbuild
block/bfq-iosched.c
block/bfq-wf2q.c
block/blk-core.c
block/blk-mq.c
block/blk-stat.c
block/elevator.c
drivers/Kconfig
drivers/Makefile
drivers/acpi/Makefile
drivers/acpi/acpi_apd.c
drivers/acpi/acpi_lpss.c
drivers/acpi/acpica/Makefile
drivers/acpi/acpica/acconvert.h [new file with mode: 0644]
drivers/acpi/acpica/acglobal.h
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/acmacros.h
drivers/acpi/acpica/acopcode.h
drivers/acpi/acpica/amlcode.h
drivers/acpi/acpica/dbmethod.c
drivers/acpi/acpica/dbxface.c
drivers/acpi/acpica/dscontrol.c
drivers/acpi/acpica/dsmthdat.c
drivers/acpi/acpica/dsobject.c
drivers/acpi/acpica/dsopcode.c
drivers/acpi/acpica/dsutils.c
drivers/acpi/acpica/dswexec.c
drivers/acpi/acpica/dswload2.c
drivers/acpi/acpica/exmisc.c
drivers/acpi/acpica/exnames.c
drivers/acpi/acpica/exoparg1.c
drivers/acpi/acpica/exoparg2.c
drivers/acpi/acpica/exoparg6.c
drivers/acpi/acpica/exresolv.c
drivers/acpi/acpica/exstore.c
drivers/acpi/acpica/exstoren.c
drivers/acpi/acpica/hwvalid.c
drivers/acpi/acpica/nsaccess.c
drivers/acpi/acpica/nsrepair.c
drivers/acpi/acpica/nsrepair2.c
drivers/acpi/acpica/nsutils.c
drivers/acpi/acpica/psargs.c
drivers/acpi/acpica/psloop.c
drivers/acpi/acpica/psobject.c
drivers/acpi/acpica/psopcode.c
drivers/acpi/acpica/psopinfo.c
drivers/acpi/acpica/psparse.c
drivers/acpi/acpica/pstree.c
drivers/acpi/acpica/psutils.c
drivers/acpi/acpica/utalloc.c
drivers/acpi/acpica/utcache.c
drivers/acpi/acpica/utdebug.c
drivers/acpi/acpica/utresrc.c
drivers/acpi/acpica/utxferror.c
drivers/acpi/arm64/iort.c
drivers/acpi/battery.c
drivers/acpi/bus.c
drivers/acpi/button.c
drivers/acpi/device_pm.c
drivers/acpi/glue.c
drivers/acpi/pmic/intel_pmic_xpower.c
drivers/acpi/power.c
drivers/acpi/scan.c
drivers/acpi/sleep.c
drivers/acpi/sleep.h
drivers/acpi/x86/utils.c [new file with mode: 0644]
drivers/base/dd.c
drivers/base/dma-mapping.c
drivers/base/power/main.c
drivers/base/power/wakeup.c
drivers/block/rbd.c
drivers/block/virtio_blk.c
drivers/char/applicom.c
drivers/char/ipmi/ipmi_si_intf.c
drivers/char/mwave/mwavedd.c
drivers/char/virtio_console.c
drivers/clk/Kconfig
drivers/clk/Makefile
drivers/clk/at91/clk-pll.c
drivers/clk/bcm/clk-iproc-pll.c
drivers/clk/bcm/clk-ns2.c
drivers/clk/clk-cs2000-cp.c
drivers/clk/clk-hi655x.c [new file with mode: 0644]
drivers/clk/clk-nomadik.c
drivers/clk/clk-si5351.c
drivers/clk/clk-stm32f4.c
drivers/clk/clk-versaclock5.c
drivers/clk/clk.c
drivers/clk/hisilicon/clk-hi3620.c
drivers/clk/hisilicon/clk-hi6220.c
drivers/clk/hisilicon/clk.c
drivers/clk/imx/clk-imx6ul.c
drivers/clk/imx/clk-imx7d.c
drivers/clk/mediatek/Kconfig
drivers/clk/mediatek/Makefile
drivers/clk/mediatek/clk-mt2701-eth.c
drivers/clk/mediatek/clk-mt6797-img.c [new file with mode: 0644]
drivers/clk/mediatek/clk-mt6797-mm.c [new file with mode: 0644]
drivers/clk/mediatek/clk-mt6797-vdec.c [new file with mode: 0644]
drivers/clk/mediatek/clk-mt6797-venc.c [new file with mode: 0644]
drivers/clk/mediatek/clk-mt6797.c [new file with mode: 0644]
drivers/clk/meson/Makefile
drivers/clk/meson/clk-audio-divider.c [new file with mode: 0644]
drivers/clk/meson/clk-mpll.c
drivers/clk/meson/clk-pll.c
drivers/clk/meson/clkc.h
drivers/clk/meson/gxbb.c
drivers/clk/meson/gxbb.h
drivers/clk/meson/meson8b.c
drivers/clk/meson/meson8b.h
drivers/clk/mvebu/clk-cpu.c
drivers/clk/mvebu/common.c
drivers/clk/qcom/clk-smd-rpm.c
drivers/clk/qcom/mmcc-msm8996.c
drivers/clk/renesas/r8a7795-cpg-mssr.c
drivers/clk/renesas/r8a7796-cpg-mssr.c
drivers/clk/renesas/rcar-gen3-cpg.c
drivers/clk/renesas/rcar-gen3-cpg.h
drivers/clk/renesas/renesas-cpg-mssr.c
drivers/clk/renesas/renesas-cpg-mssr.h
drivers/clk/rockchip/Makefile
drivers/clk/rockchip/clk-pll.c
drivers/clk/rockchip/clk-rk3328.c
drivers/clk/rockchip/clk-rk3368.c
drivers/clk/rockchip/clk-rk3399.c
drivers/clk/rockchip/clk-rv1108.c [moved from drivers/clk/rockchip/clk-rk1108.c with 57% similarity]
drivers/clk/rockchip/clk.h
drivers/clk/spear/spear6xx_clock.c
drivers/clk/sunxi-ng/Kconfig
drivers/clk/sunxi-ng/Makefile
drivers/clk/sunxi-ng/ccu-sun5i.c
drivers/clk/sunxi-ng/ccu-sun8i-a33.c
drivers/clk/sunxi-ng/ccu-sun8i-h3.c
drivers/clk/sunxi-ng/ccu-sun8i-h3.h
drivers/clk/sunxi-ng/ccu-sun8i-r.c [new file with mode: 0644]
drivers/clk/sunxi-ng/ccu-sun8i-r.h [new file with mode: 0644]
drivers/clk/sunxi-ng/ccu-sun9i-a80.c
drivers/clk/sunxi-ng/ccu_common.c
drivers/clk/sunxi-ng/ccu_gate.c
drivers/clk/sunxi-ng/ccu_mult.c
drivers/clk/sunxi-ng/ccu_mult.h
drivers/clk/sunxi-ng/ccu_nk.c
drivers/clk/sunxi-ng/ccu_nkm.c
drivers/clk/sunxi-ng/ccu_nkmp.c
drivers/clk/sunxi-ng/ccu_nm.c
drivers/clk/tegra/clk-id.h
drivers/clk/tegra/clk-periph-gate.c
drivers/clk/tegra/clk-periph.c
drivers/clk/tegra/clk-pll.c
drivers/clk/tegra/clk-super.c
drivers/clk/tegra/clk-tegra-audio.c
drivers/clk/tegra/clk-tegra-periph.c
drivers/clk/tegra/clk-tegra-pmc.c
drivers/clk/tegra/clk-tegra114.c
drivers/clk/tegra/clk-tegra124.c
drivers/clk/tegra/clk-tegra210.c
drivers/clk/tegra/clk-tegra30.c
drivers/clk/tegra/clk.c
drivers/clk/tegra/clk.h
drivers/clk/ti/apll.c
drivers/clk/ti/autoidle.c
drivers/clk/ti/clk-3xxx.c
drivers/clk/ti/clk-44xx.c
drivers/clk/ti/clk-dra7-atl.c
drivers/clk/ti/clk.c
drivers/clk/ti/clkt_dflt.c
drivers/clk/ti/clkt_dpll.c
drivers/clk/ti/clkt_iclk.c
drivers/clk/ti/clock.h
drivers/clk/ti/clockdomain.c
drivers/clk/ti/composite.c
drivers/clk/ti/divider.c
drivers/clk/ti/dpll.c
drivers/clk/ti/dpll3xxx.c
drivers/clk/ti/dpll44xx.c
drivers/clk/ti/fixed-factor.c
drivers/clk/ti/gate.c
drivers/clk/ti/interface.c
drivers/clk/ti/mux.c
drivers/clk/x86/clk-pmc-atom.c
drivers/clk/zte/clk-zx296718.c
drivers/clk/zte/clk.c
drivers/clk/zte/clk.h
drivers/clocksource/cs5535-clockevt.c
drivers/cpufreq/speedstep-smi.c
drivers/cpuidle/cpuidle.c
drivers/crypto/virtio/virtio_crypto_core.c
drivers/dma/Kconfig
drivers/dma/amba-pl08x.c
drivers/dma/cppi41.c
drivers/dma/dmatest.c
drivers/dma/imx-sdma.c
drivers/dma/ioat/init.c
drivers/dma/mv_xor.c
drivers/dma/pl330.c
drivers/dma/qcom/hidma.c
drivers/dma/qcom/hidma_ll.c
drivers/dma/sh/rcar-dmac.c
drivers/dma/stm32-dma.c
drivers/dma/sun4i-dma.c
drivers/dma/virt-dma.c
drivers/dma/xilinx/xilinx_dma.c
drivers/gpio/gpio-104-dio-48e.c
drivers/gpio/gpio-104-idi-48.c
drivers/gpio/gpio-104-idio-16.c
drivers/gpio/gpio-gpio-mm.c
drivers/gpio/gpio-ws16c48.c
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_gem_request.h
drivers/gpu/drm/i915/selftests/mock_gem_device.c
drivers/gpu/drm/virtio/virtgpu_kms.c
drivers/i2c/busses/i2c-ali15x3.c
drivers/i2c/busses/i2c-designware-platdrv.c
drivers/i2c/busses/i2c-elektor.c
drivers/i2c/busses/i2c-parport-light.c
drivers/i2c/busses/i2c-pca-isa.c
drivers/i2c/busses/i2c-piix4.c
drivers/i2c/busses/i2c-sis5595.c
drivers/i2c/busses/i2c-viapro.c
drivers/i2c/busses/scx200_acb.c
drivers/ide/ide-io.c
drivers/ide/ide-probe.c
drivers/idle/intel_idle.c
drivers/iio/adc/stx104.c
drivers/iio/dac/cio-dac.c
drivers/infiniband/hw/qedr/main.c
drivers/input/mouse/inport.c
drivers/input/mouse/logibm.c
drivers/input/touchscreen/mk712.c
drivers/iommu/amd_iommu_v2.c
drivers/iommu/arm-smmu-v3.c
drivers/iommu/arm-smmu.c
drivers/iommu/dma-iommu.c
drivers/iommu/dmar.c
drivers/iommu/exynos-iommu.c
drivers/iommu/fsl_pamu.h
drivers/iommu/intel-iommu.c
drivers/iommu/intel_irq_remapping.c
drivers/iommu/io-pgtable-arm.c
drivers/iommu/iommu.c
drivers/iommu/iova.c
drivers/iommu/mtk_iommu_v1.c
drivers/iommu/of_iommu.c
drivers/iommu/omap-iommu.c
drivers/iommu/omap-iommu.h
drivers/iommu/rockchip-iommu.c
drivers/iommu/tegra-smmu.c
drivers/isdn/hardware/avm/b1isa.c
drivers/isdn/hardware/avm/t1isa.c
drivers/isdn/hisax/config.c
drivers/media/pci/zoran/zoran_card.c
drivers/media/platform/mtk-vpu/mtk_vpu.c
drivers/media/platform/omap3isp/isp.c
drivers/media/platform/omap3isp/isp.h
drivers/media/rc/serial_ir.c
drivers/memory/Kconfig
drivers/misc/dummy-irq.c
drivers/misc/mic/vop/vop_main.c
drivers/mmc/host/wbsd.c
drivers/mtd/chips/cfi_cmdset_0002.c
drivers/mtd/maps/Makefile
drivers/mtd/maps/physmap_of_core.c [moved from drivers/mtd/maps/physmap_of.c with 96% similarity]
drivers/mtd/mtdswap.c
drivers/mtd/nand/Kconfig
drivers/mtd/nand/Makefile
drivers/mtd/nand/atmel/Makefile [new file with mode: 0644]
drivers/mtd/nand/atmel/nand-controller.c [new file with mode: 0644]
drivers/mtd/nand/atmel/pmecc.c [new file with mode: 0644]
drivers/mtd/nand/atmel/pmecc.h [new file with mode: 0644]
drivers/mtd/nand/atmel_nand.c [deleted file]
drivers/mtd/nand/atmel_nand_ecc.h [deleted file]
drivers/mtd/nand/atmel_nand_nfc.h [deleted file]
drivers/mtd/nand/brcmnand/brcmnand.c
drivers/mtd/nand/cmx270_nand.c
drivers/mtd/nand/davinci_nand.c
drivers/mtd/nand/denali.c
drivers/mtd/nand/denali.h
drivers/mtd/nand/denali_dt.c
drivers/mtd/nand/fsmc_nand.c
drivers/mtd/nand/gpio.c
drivers/mtd/nand/nand_amd.c [new file with mode: 0644]
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/nand_hynix.c [new file with mode: 0644]
drivers/mtd/nand/nand_ids.c
drivers/mtd/nand/nand_macronix.c [new file with mode: 0644]
drivers/mtd/nand/nand_micron.c [new file with mode: 0644]
drivers/mtd/nand/nand_samsung.c [new file with mode: 0644]
drivers/mtd/nand/nand_toshiba.c [new file with mode: 0644]
drivers/mtd/nand/nandsim.c
drivers/mtd/nand/omap2.c
drivers/mtd/nand/orion_nand.c
drivers/mtd/nand/oxnas_nand.c
drivers/mtd/nand/sunxi_nand.c
drivers/mtd/nand/tango_nand.c
drivers/mtd/ofpart.c
drivers/mtd/spi-nor/Kconfig
drivers/mtd/spi-nor/Makefile
drivers/mtd/spi-nor/hisi-sfc.c
drivers/mtd/spi-nor/intel-spi.c
drivers/mtd/spi-nor/mtk-quadspi.c
drivers/mtd/spi-nor/spi-nor.c
drivers/mtd/spi-nor/stm32-quadspi.c [new file with mode: 0644]
drivers/net/appletalk/cops.c
drivers/net/appletalk/ltpc.c
drivers/net/arcnet/com20020-isa.c
drivers/net/arcnet/com90io.c
drivers/net/arcnet/com90xx.c
drivers/net/bonding/bond_netlink.c
drivers/net/caif/caif_virtio.c
drivers/net/can/cc770/cc770_isa.c
drivers/net/can/sja1000/sja1000_isa.c
drivers/net/dsa/dsa_loop.c
drivers/net/ethernet/3com/3c509.c
drivers/net/ethernet/3com/3c59x.c
drivers/net/ethernet/8390/ne.c
drivers/net/ethernet/8390/smc-ultra.c
drivers/net/ethernet/8390/wd.c
drivers/net/ethernet/amd/lance.c
drivers/net/ethernet/amd/ni65.c
drivers/net/ethernet/aquantia/atlantic/aq_nic.c
drivers/net/ethernet/atheros/alx/main.c
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/brocade/bna/bfa_ioc.c
drivers/net/ethernet/brocade/bna/bnad_ethtool.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
drivers/net/ethernet/cirrus/cs89x0.c
drivers/net/ethernet/dec/tulip/de4x5.c
drivers/net/ethernet/hp/hp100.c
drivers/net/ethernet/mellanox/mlx4/cmd.c
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
drivers/net/ethernet/mellanox/mlx4/en_rx.c
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
drivers/net/ethernet/qlogic/qed/qed_cxt.c
drivers/net/ethernet/qlogic/qed/qed_dev.c
drivers/net/ethernet/qlogic/qed/qed_main.c
drivers/net/ethernet/qlogic/qede/qede_filter.c
drivers/net/ethernet/qlogic/qede/qede_main.c
drivers/net/ethernet/qlogic/qlge/qlge_dbg.c
drivers/net/ethernet/realtek/atp.c
drivers/net/ethernet/smsc/smc9194.c
drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
drivers/net/ethernet/ti/cpsw.c
drivers/net/hamradio/baycom_epp.c
drivers/net/hamradio/baycom_par.c
drivers/net/hamradio/baycom_ser_fdx.c
drivers/net/hamradio/baycom_ser_hdx.c
drivers/net/hamradio/dmascc.c
drivers/net/hamradio/yam.c
drivers/net/hippi/rrunner.c
drivers/net/irda/ali-ircc.c
drivers/net/irda/nsc-ircc.c
drivers/net/irda/smsc-ircc2.c
drivers/net/irda/w83977af_ir.c
drivers/net/phy/mdio-mux-bcm-iproc.c
drivers/net/usb/cdc_ncm.c
drivers/net/virtio_net.c
drivers/net/wan/cosa.c
drivers/net/wan/hostess_sv11.c
drivers/net/wan/sbni.c
drivers/net/wan/sealevel.c
drivers/net/wimax/i2400m/i2400m-usb.h
drivers/net/wireless/ath/ath9k/ar9003_mac.c
drivers/net/wireless/ath/ath9k/mac.c
drivers/net/wireless/cisco/airo.c
drivers/net/wireless/intel/iwlegacy/4965-mac.c
drivers/net/wireless/intel/iwlwifi/dvm/rx.c
drivers/net/wireless/mac80211_hwsim.c
drivers/nvme/host/lightnvm.c
drivers/of/device.c
drivers/of/platform.c
drivers/parport/parport_pc.c
drivers/pci/hotplug/cpcihp_generic.c
drivers/pci/probe.c
drivers/pcmcia/i82365.c
drivers/pcmcia/tcic.c
drivers/powercap/intel_rapl.c
drivers/pwm/Kconfig
drivers/pwm/Makefile
drivers/pwm/pwm-atmel-hlcdc.c
drivers/pwm/pwm-atmel.c
drivers/pwm/pwm-mediatek.c [new file with mode: 0644]
drivers/pwm/pwm-pca9685.c
drivers/pwm/pwm-tegra.c
drivers/remoteproc/remoteproc_virtio.c
drivers/rpmsg/virtio_rpmsg_bus.c
drivers/rtc/Kconfig
drivers/rtc/Makefile
drivers/rtc/rtc-bq32k.c
drivers/rtc/rtc-cmos.c
drivers/rtc/rtc-cpcap.c [new file with mode: 0644]
drivers/rtc/rtc-ds1307.c
drivers/rtc/rtc-ds1374.c
drivers/rtc/rtc-ds1672.c
drivers/rtc/rtc-ds3232.c
drivers/rtc/rtc-gemini.c
drivers/rtc/rtc-hid-sensor-time.c
drivers/rtc/rtc-isl1208.c
drivers/rtc/rtc-m41t80.c
drivers/rtc/rtc-omap.c
drivers/rtc/rtc-rs5c372.c
drivers/rtc/rtc-rv3029c2.c
drivers/rtc/rtc-rv8803.c
drivers/rtc/rtc-rx8010.c
drivers/rtc/rtc-rx8581.c
drivers/rtc/rtc-s35390a.c
drivers/rtc/rtc-sh.c
drivers/rtc/rtc-snvs.c
drivers/rtc/rtc-wm8350.c
drivers/s390/virtio/kvm_virtio.c
drivers/s390/virtio/virtio_ccw.c
drivers/scsi/aha152x.c
drivers/scsi/aha1542.c
drivers/scsi/g_NCR5380.c
drivers/scsi/gdth.c
drivers/scsi/qlogicfas.c
drivers/scsi/virtio_scsi.c
drivers/soc/fsl/qbman/qman_priv.h
drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c
drivers/staging/speakup/speakup_acntpc.c
drivers/staging/speakup/speakup_dtlk.c
drivers/staging/speakup/speakup_keypc.c
drivers/staging/vme/devices/vme_pio2_core.c
drivers/tee/Kconfig [new file with mode: 0644]
drivers/tee/Makefile [new file with mode: 0644]
drivers/tee/optee/Kconfig [new file with mode: 0644]
drivers/tee/optee/Makefile [new file with mode: 0644]
drivers/tee/optee/call.c [new file with mode: 0644]
drivers/tee/optee/core.c [new file with mode: 0644]
drivers/tee/optee/optee_msg.h [new file with mode: 0644]
drivers/tee/optee/optee_private.h [new file with mode: 0644]
drivers/tee/optee/optee_smc.h [new file with mode: 0644]
drivers/tee/optee/rpc.c [new file with mode: 0644]
drivers/tee/optee/supp.c [new file with mode: 0644]
drivers/tee/tee_core.c [new file with mode: 0644]
drivers/tee/tee_private.h [new file with mode: 0644]
drivers/tee/tee_shm.c [new file with mode: 0644]
drivers/tee/tee_shm_pool.c [new file with mode: 0644]
drivers/tty/cyclades.c
drivers/tty/moxa.c
drivers/tty/mxser.c
drivers/tty/rocket.c
drivers/tty/serial/8250/8250_core.c
drivers/tty/synclink.c
drivers/video/Makefile
drivers/video/console/Kconfig
drivers/video/fbdev/Kconfig
drivers/video/fbdev/acornfb.c
drivers/video/fbdev/amba-clcd.c
drivers/video/fbdev/arcfb.c
drivers/video/fbdev/aty/radeon_base.c
drivers/video/fbdev/core/fbmon.c
drivers/video/fbdev/i810/i810_main.c
drivers/video/fbdev/imxfb.c
drivers/video/fbdev/n411.c
drivers/video/fbdev/omap/lcd_mipid.c
drivers/video/fbdev/omap2/omapfb/dss/dss.c
drivers/video/fbdev/pmag-aa-fb.c
drivers/video/fbdev/pmag-ba-fb.c
drivers/video/fbdev/pmagb-b-fb.c
drivers/video/fbdev/pxafb.c
drivers/video/fbdev/sm501fb.c
drivers/video/fbdev/udlfb.c
drivers/video/fbdev/xen-fbfront.c
drivers/video/logo/logo.c
drivers/virtio/virtio_balloon.c
drivers/virtio/virtio_input.c
drivers/virtio/virtio_mmio.c
drivers/virtio/virtio_pci_common.c
drivers/virtio/virtio_pci_common.h
drivers/virtio/virtio_pci_legacy.c
drivers/virtio/virtio_pci_modern.c
drivers/virtio/virtio_ring.c
drivers/watchdog/cpu5wdt.c
drivers/watchdog/eurotechwdt.c
drivers/watchdog/pc87413_wdt.c
drivers/watchdog/sc1200wdt.c
drivers/watchdog/wdt.c
fs/btrfs/backref.c
fs/btrfs/btrfs_inode.h
fs/btrfs/compression.c
fs/btrfs/ctree.c
fs/btrfs/ctree.h
fs/btrfs/delayed-inode.c
fs/btrfs/delayed-inode.h
fs/btrfs/delayed-ref.c
fs/btrfs/delayed-ref.h
fs/btrfs/dev-replace.c
fs/btrfs/disk-io.c
fs/btrfs/disk-io.h
fs/btrfs/extent-tree.c
fs/btrfs/extent_io.c
fs/btrfs/extent_io.h
fs/btrfs/extent_map.c
fs/btrfs/extent_map.h
fs/btrfs/file.c
fs/btrfs/free-space-cache.c
fs/btrfs/inode.c
fs/btrfs/ioctl.c
fs/btrfs/ordered-data.c
fs/btrfs/ordered-data.h
fs/btrfs/qgroup.c
fs/btrfs/qgroup.h
fs/btrfs/raid56.c
fs/btrfs/reada.c
fs/btrfs/root-tree.c
fs/btrfs/scrub.c
fs/btrfs/send.c
fs/btrfs/super.c
fs/btrfs/tests/btrfs-tests.c
fs/btrfs/transaction.c
fs/btrfs/transaction.h
fs/btrfs/tree-log.c
fs/btrfs/volumes.c
fs/btrfs/volumes.h
fs/ceph/addr.c
fs/ceph/caps.c
fs/ceph/debugfs.c
fs/ceph/dir.c
fs/ceph/file.c
fs/ceph/inode.c
fs/ceph/mds_client.c
fs/ceph/mds_client.h
fs/ceph/mdsmap.c
fs/ceph/snap.c
fs/ceph/super.c
fs/ceph/super.h
fs/ceph/xattr.c
fs/fuse/dev.c
fs/fuse/file.c
fs/fuse/fuse_i.h
fs/fuse/inode.c
fs/jbd2/journal.c
fs/jffs2/readinode.c
fs/lockd/clntlock.c
fs/lockd/clntproc.c
fs/lockd/svc.c
fs/lockd/svclock.c
fs/locks.c
fs/nfs/Kconfig
fs/nfs/Makefile
fs/nfs/callback.c
fs/nfs/callback_proc.c
fs/nfs/callback_xdr.c
fs/nfs/client.c
fs/nfs/dir.c
fs/nfs/direct.c
fs/nfs/file.c
fs/nfs/filelayout/filelayout.c
fs/nfs/flexfilelayout/flexfilelayout.c
fs/nfs/flexfilelayout/flexfilelayoutdev.c
fs/nfs/inode.c
fs/nfs/internal.h
fs/nfs/namespace.c
fs/nfs/nfs3proc.c
fs/nfs/nfs42proc.c
fs/nfs/nfs42xdr.c
fs/nfs/nfs4client.c
fs/nfs/nfs4getroot.c
fs/nfs/nfs4namespace.c
fs/nfs/nfs4proc.c
fs/nfs/nfs4state.c
fs/nfs/nfs4xdr.c
fs/nfs/objlayout/Kbuild [deleted file]
fs/nfs/objlayout/objio_osd.c [deleted file]
fs/nfs/objlayout/objlayout.c [deleted file]
fs/nfs/objlayout/objlayout.h [deleted file]
fs/nfs/objlayout/pnfs_osd_xdr_cli.c [deleted file]
fs/nfs/pagelist.c
fs/nfs/pnfs.c
fs/nfs/pnfs.h
fs/nfs/pnfs_nfs.c
fs/nfs/proc.c
fs/nfs/read.c
fs/nfs/write.c
fs/nfsd/nfs3xdr.c
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4state.c
fs/nfsd/nfs4xdr.c
fs/nfsd/nfsxdr.c
fs/nfsd/vfs.c
fs/open.c
fs/overlayfs/copy_up.c
fs/overlayfs/dir.c
fs/overlayfs/inode.c
fs/overlayfs/namei.c
fs/overlayfs/overlayfs.h
fs/overlayfs/ovl_entry.h
fs/overlayfs/super.c
fs/overlayfs/util.c
fs/pstore/ram.c
fs/signalfd.c
include/Kbuild [deleted file]
include/acpi/acconfig.h
include/acpi/acpi_bus.h
include/acpi/acpixf.h
include/acpi/actbl2.h
include/asm-generic/Kbuild.asm [deleted file]
include/asm-generic/vmlinux.lds.h
include/dt-bindings/clock/hi6220-clock.h
include/dt-bindings/clock/mt6797-clk.h [new file with mode: 0644]
include/dt-bindings/clock/r8a7795-cpg-mssr.h
include/dt-bindings/clock/rk3328-cru.h
include/dt-bindings/clock/rk3368-cru.h
include/dt-bindings/clock/rv1108-cru.h [moved from include/dt-bindings/clock/rk1108-cru.h with 97% similarity]
include/dt-bindings/clock/sun8i-h3-ccu.h
include/dt-bindings/clock/sun8i-r-ccu.h [new file with mode: 0644]
include/dt-bindings/clock/tegra114-car.h
include/dt-bindings/clock/tegra124-car-common.h
include/dt-bindings/clock/tegra210-car.h
include/dt-bindings/clock/tegra30-car.h
include/dt-bindings/reset/mt2701-resets.h
include/dt-bindings/reset/sun8i-h3-ccu.h
include/dt-bindings/reset/sun8i-r-ccu.h [new file with mode: 0644]
include/dt-bindings/reset/tegra210-car.h [new file with mode: 0644]
include/kvm/arm_vgic.h
include/linux/acpi.h
include/linux/acpi_iort.h
include/linux/amba/pl080.h
include/linux/amba/pl330.h [deleted file]
include/linux/ceph/ceph_features.h
include/linux/ceph/ceph_fs.h
include/linux/ceph/cls_lock_client.h
include/linux/ceph/libceph.h
include/linux/ceph/mdsmap.h
include/linux/ceph/osd_client.h
include/linux/ceph/pagelist.h
include/linux/clk/tegra.h
include/linux/clk/ti.h
include/linux/dma-fence.h
include/linux/dma-iommu.h
include/linux/dma-mapping.h
include/linux/dma_remapping.h
include/linux/fs.h
include/linux/intel-iommu.h
include/linux/iommu.h
include/linux/irqchip/arm-gic-v3.h
include/linux/kbuild.h
include/linux/kvm_host.h
include/linux/lockd/bind.h
include/linux/lockd/lockd.h
include/linux/moduleparam.h
include/linux/mtd/mtd.h
include/linux/mtd/nand.h
include/linux/nfs_fs.h
include/linux/nfs_fs_sb.h
include/linux/nfs_page.h
include/linux/nfs_xdr.h
include/linux/of_device.h
include/linux/platform_data/iommu-omap.h
include/linux/platform_data/video-imxfb.h
include/linux/pm_wakeup.h
include/linux/ptr_ring.h
include/linux/rcu_node_tree.h [new file with mode: 0644]
include/linux/rcu_segcblist.h [new file with mode: 0644]
include/linux/rculist.h
include/linux/rcupdate.h
include/linux/rcutiny.h
include/linux/rcutree.h
include/linux/slab.h
include/linux/srcu.h
include/linux/srcuclassic.h [new file with mode: 0644]
include/linux/srcutiny.h [new file with mode: 0644]
include/linux/srcutree.h [new file with mode: 0644]
include/linux/sunrpc/rpc_rdma.h
include/linux/sunrpc/svc.h
include/linux/sunrpc/svc_rdma.h
include/linux/suspend.h
include/linux/tee_drv.h [new file with mode: 0644]
include/linux/types.h
include/linux/virtio.h
include/linux/virtio_config.h
include/linux/virtio_ring.h
include/net/addrconf.h
include/net/cfg80211.h
include/net/mac80211.h
include/net/secure_seq.h
include/net/sock.h
include/net/tcp.h
include/rdma/ib_verbs.h
include/scsi/fc/Kbuild [deleted file]
include/trace/events/btrfs.h
include/trace/events/iommu.h
include/uapi/Kbuild [deleted file]
include/uapi/asm-generic/Kbuild [deleted file]
include/uapi/asm-generic/Kbuild.asm
include/uapi/drm/Kbuild [deleted file]
include/uapi/linux/Kbuild
include/uapi/linux/android/Kbuild [deleted file]
include/uapi/linux/bcache.h
include/uapi/linux/btrfs.h
include/uapi/linux/btrfs_tree.h
include/uapi/linux/byteorder/Kbuild [deleted file]
include/uapi/linux/caif/Kbuild [deleted file]
include/uapi/linux/can/Kbuild [deleted file]
include/uapi/linux/cryptouser.h
include/uapi/linux/dvb/Kbuild [deleted file]
include/uapi/linux/hdlc/Kbuild [deleted file]
include/uapi/linux/hsi/Kbuild [deleted file]
include/uapi/linux/iio/Kbuild [deleted file]
include/uapi/linux/isdn/Kbuild [deleted file]
include/uapi/linux/mmc/Kbuild [deleted file]
include/uapi/linux/netfilter/Kbuild [deleted file]
include/uapi/linux/netfilter/ipset/Kbuild [deleted file]
include/uapi/linux/netfilter_arp/Kbuild [deleted file]
include/uapi/linux/netfilter_bridge/Kbuild [deleted file]
include/uapi/linux/netfilter_ipv4/Kbuild [deleted file]
include/uapi/linux/netfilter_ipv6/Kbuild [deleted file]
include/uapi/linux/nfsd/Kbuild [deleted file]
include/uapi/linux/nfsd/cld.h
include/uapi/linux/pr.h
include/uapi/linux/qrtr.h
include/uapi/linux/raid/Kbuild [deleted file]
include/uapi/linux/smc_diag.h
include/uapi/linux/spi/Kbuild [deleted file]
include/uapi/linux/sunrpc/Kbuild [deleted file]
include/uapi/linux/tc_act/Kbuild [deleted file]
include/uapi/linux/tc_ematch/Kbuild [deleted file]
include/uapi/linux/tee.h [new file with mode: 0644]
include/uapi/linux/usb/Kbuild [deleted file]
include/uapi/linux/wimax/Kbuild [deleted file]
include/uapi/misc/Kbuild [deleted file]
include/uapi/mtd/Kbuild [deleted file]
include/uapi/rdma/Kbuild [deleted file]
include/uapi/rdma/bnxt_re-abi.h
include/uapi/rdma/hfi/Kbuild [deleted file]
include/uapi/rdma/ib_user_verbs.h
include/uapi/scsi/Kbuild [deleted file]
include/uapi/scsi/fc/Kbuild [deleted file]
include/uapi/sound/Kbuild [deleted file]
include/uapi/video/Kbuild [deleted file]
include/uapi/xen/Kbuild [deleted file]
include/video/Kbuild [deleted file]
init/Kconfig
kernel/bpf/verifier.c
kernel/fork.c
kernel/locking/lockdep.c
kernel/locking/rtmutex-debug.c
kernel/power/process.c
kernel/power/suspend.c
kernel/rcu/Makefile
kernel/rcu/rcu.h
kernel/rcu/rcu_segcblist.c [new file with mode: 0644]
kernel/rcu/rcu_segcblist.h [new file with mode: 0644]
kernel/rcu/rcutorture.c
kernel/rcu/srcu.c
kernel/rcu/srcutiny.c [new file with mode: 0644]
kernel/rcu/srcutree.c [new file with mode: 0644]
kernel/rcu/tiny.c
kernel/rcu/tiny_plugin.h
kernel/rcu/tree.c
kernel/rcu/tree.h
kernel/rcu/tree_exp.h
kernel/rcu/tree_plugin.h
kernel/rcu/tree_trace.c
kernel/rcu/update.c
kernel/sched/core.c
kernel/signal.c
kernel/trace/trace.c
lib/dma-debug.c
mm/kasan/kasan.c
mm/kmemcheck.c
mm/mmu_notifier.c
mm/rmap.c
mm/slab.c
mm/slab.h
mm/slab_common.c
mm/slob.c
mm/slub.c
mm/vmalloc.c
net/8021q/vlan_dev.c
net/bridge/br_netlink.c
net/ceph/ceph_common.c
net/ceph/cls_lock_client.c
net/ceph/debugfs.c
net/ceph/osd_client.c
net/ceph/pagelist.c
net/ceph/snapshot.c
net/core/secure_seq.c
net/dccp/ipv4.c
net/dccp/ipv6.c
net/decnet/dn_neigh.c
net/ipv4/inet_connection_sock.c
net/ipv4/ip_vti.c
net/ipv4/syncookies.c
net/ipv4/tcp_input.c
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_output.c
net/ipv6/addrconf.c
net/ipv6/route.c
net/ipv6/syncookies.c
net/ipv6/tcp_ipv6.c
net/llc/af_llc.c
net/llc/llc_conn.c
net/llc/llc_sap.c
net/mac80211/ibss.c
net/mac80211/mlme.c
net/netfilter/nf_conntrack_core.c
net/smc/af_smc.c
net/sunrpc/Kconfig
net/sunrpc/clnt.c
net/sunrpc/sched.c
net/sunrpc/svc.c
net/sunrpc/xdr.c
net/sunrpc/xprt.c
net/sunrpc/xprtrdma/Makefile
net/sunrpc/xprtrdma/rpc_rdma.c
net/sunrpc/xprtrdma/svc_rdma.c
net/sunrpc/xprtrdma/svc_rdma_backchannel.c
net/sunrpc/xprtrdma/svc_rdma_marshal.c
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
net/sunrpc/xprtrdma/svc_rdma_rw.c [new file with mode: 0644]
net/sunrpc/xprtrdma/svc_rdma_sendto.c
net/sunrpc/xprtrdma/svc_rdma_transport.c
net/sunrpc/xprtrdma/transport.c
net/sunrpc/xprtrdma/verbs.c
net/sunrpc/xprtrdma/xprt_rdma.h
net/vmw_vsock/virtio_transport.c
net/wireless/nl80211.c
scripts/Kbuild.include
scripts/Makefile.build
scripts/Makefile.dtbinst
scripts/Makefile.extrawarn
scripts/Makefile.headersinst
scripts/Makefile.lib
scripts/genksyms/parse.tab.c_shipped
scripts/genksyms/parse.y
scripts/mod/Makefile
scripts/objdiff
scripts/package/builddeb
sound/drivers/mpu401/mpu401.c
sound/drivers/mtpav.c
sound/drivers/serial-u16550.c
sound/isa/ad1848/ad1848.c
sound/isa/adlib.c
sound/isa/cmi8328.c
sound/isa/cmi8330.c
sound/isa/cs423x/cs4231.c
sound/isa/cs423x/cs4236.c
sound/isa/es1688/es1688.c
sound/isa/es18xx.c
sound/isa/galaxy/galaxy.c
sound/isa/gus/gusclassic.c
sound/isa/gus/gusextreme.c
sound/isa/gus/gusmax.c
sound/isa/gus/interwave.c
sound/isa/msnd/msnd_pinnacle.c
sound/isa/opl3sa2.c
sound/isa/opti9xx/miro.c
sound/isa/opti9xx/opti92x-ad1848.c
sound/isa/sb/jazz16.c
sound/isa/sb/sb16.c
sound/isa/sb/sb8.c
sound/isa/sc6000.c
sound/isa/sscape.c
sound/isa/wavefront/wavefront.c
sound/oss/ad1848.c
sound/oss/aedsp16.c
sound/oss/mpu401.c
sound/oss/msnd_pinnacle.c
sound/oss/opl3.c
sound/oss/pas2_card.c
sound/oss/pss.c
sound/oss/sb_card.c
sound/oss/trix.c
sound/oss/uart401.c
sound/oss/uart6850.c
sound/oss/waveartist.c
sound/pci/als4000.c
sound/pci/cmipci.c
sound/pci/ens1370.c
sound/pci/riptide/riptide.c
sound/pci/sonicvibes.c
sound/pci/via82xx.c
sound/pci/ymfpci/ymfpci.c
tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh
tools/virtio/linux/virtio.h
tools/virtio/ringtest/main.c
tools/virtio/ringtest/main.h
tools/virtio/ringtest/ptr_ring.c
tools/virtio/virtio_test.c
tools/virtio/vringh_test.c
virt/kvm/arm/arm.c [moved from arch/arm/kvm/arm.c with 99% similarity]
virt/kvm/arm/mmio.c [moved from arch/arm/kvm/mmio.c with 100% similarity]
virt/kvm/arm/mmu.c [moved from arch/arm/kvm/mmu.c with 100% similarity]
virt/kvm/arm/perf.c [moved from arch/arm/kvm/perf.c with 100% similarity]
virt/kvm/arm/psci.c [moved from arch/arm/kvm/psci.c with 100% similarity]
virt/kvm/arm/trace.h
virt/kvm/arm/vgic/trace.h [new file with mode: 0644]
virt/kvm/arm/vgic/vgic-init.c
virt/kvm/arm/vgic/vgic-its.c
virt/kvm/arm/vgic/vgic-kvm-device.c
virt/kvm/arm/vgic/vgic-mmio-v3.c
virt/kvm/arm/vgic/vgic-mmio.c
virt/kvm/arm/vgic/vgic-mmio.h
virt/kvm/arm/vgic/vgic-v3.c
virt/kvm/arm/vgic/vgic.c
virt/kvm/arm/vgic/vgic.h
virt/kvm/kvm_main.c

index c2ed4ecb0acd28126d8703e17e86775ccbed1bb6..0c39aa20b6ba8d2afbc69670636b9223b3bf23fa 100644 (file)
@@ -33,6 +33,7 @@
 *.lzo
 *.patch
 *.gcno
+*.ll
 modules.builtin
 Module.symvers
 *.dwo
index 793acf999e9eac87057af3214ca1f98ad65b922f..ed3e5e949fce303efec625259b527d503cf82f8d 100644 (file)
@@ -412,6 +412,8 @@ sysctl/
        - directory with info on the /proc/sys/* files.
 target/
        - directory with info on generating TCM v4 fabric .ko modules
+tee.txt
+       - info on the TEE subsystem and drivers
 this_cpu_ops.txt
        - List rationale behind and the way to use this_cpu operations.
 thermal/
index f773a264ae02918ef6b79f002ff17d0bd4e5df65..1672573b037a73ebe4b169f7044e525b7a4bf246 100644 (file)
@@ -17,7 +17,7 @@ rcu_dereference.txt
 rcubarrier.txt
        - RCU and Unloadable Modules
 rculist_nulls.txt
-       - RCU list primitives for use with SLAB_DESTROY_BY_RCU
+       - RCU list primitives for use with SLAB_TYPESAFE_BY_RCU
 rcuref.txt
        - Reference-count design for elements of lists/arrays protected by RCU
 rcu.txt
index d583c653a703f0645c10c11cd8c1dfe761095cd6..38d6d800761f7cd944c7b290eeea19dbc0d3866e 100644 (file)
@@ -19,6 +19,8 @@ to each other.
        The <tt>rcu_state</tt> Structure</a>
 <li>   <a href="#The rcu_node Structure">
        The <tt>rcu_node</tt> Structure</a>
+<li>   <a href="#The rcu_segcblist Structure">
+       The <tt>rcu_segcblist</tt> Structure</a>
 <li>   <a href="#The rcu_data Structure">
        The <tt>rcu_data</tt> Structure</a>
 <li>   <a href="#The rcu_dynticks Structure">
@@ -841,6 +843,134 @@ for lockdep lock-class names.
 Finally, lines&nbsp;64-66 produce an error if the maximum number of
 CPUs is too large for the specified fanout.
 
+<h3><a name="The rcu_segcblist Structure">
+The <tt>rcu_segcblist</tt> Structure</a></h3>
+
+The <tt>rcu_segcblist</tt> structure maintains a segmented list of
+callbacks as follows:
+
+<pre>
+ 1 #define RCU_DONE_TAIL        0
+ 2 #define RCU_WAIT_TAIL        1
+ 3 #define RCU_NEXT_READY_TAIL  2
+ 4 #define RCU_NEXT_TAIL        3
+ 5 #define RCU_CBLIST_NSEGS     4
+ 6
+ 7 struct rcu_segcblist {
+ 8   struct rcu_head *head;
+ 9   struct rcu_head **tails[RCU_CBLIST_NSEGS];
+10   unsigned long gp_seq[RCU_CBLIST_NSEGS];
+11   long len;
+12   long len_lazy;
+13 };
+</pre>
+
+<p>
+The segments are as follows:
+
+<ol>
+<li>   <tt>RCU_DONE_TAIL</tt>: Callbacks whose grace periods have elapsed.
+       These callbacks are ready to be invoked.
+<li>   <tt>RCU_WAIT_TAIL</tt>: Callbacks that are waiting for the
+       current grace period.
+       Note that different CPUs can have different ideas about which
+       grace period is current, hence the <tt>-&gt;gp_seq</tt> field.
+<li>   <tt>RCU_NEXT_READY_TAIL</tt>: Callbacks waiting for the next
+       grace period to start.
+<li>   <tt>RCU_NEXT_TAIL</tt>: Callbacks that have not yet been
+       associated with a grace period.
+</ol>
+
+<p>
+The <tt>-&gt;head</tt> pointer references the first callback or
+is <tt>NULL</tt> if the list contains no callbacks (which is
+<i>not</i> the same as being empty).
+Each element of the <tt>-&gt;tails[]</tt> array references the
+<tt>-&gt;next</tt> pointer of the last callback in the corresponding
+segment of the list, or the list's <tt>-&gt;head</tt> pointer if
+that segment and all previous segments are empty.
+If the corresponding segment is empty but some previous segment is
+not empty, then the array element is identical to its predecessor.
+Older callbacks are closer to the head of the list, and new callbacks
+are added at the tail.
+This relationship between the <tt>-&gt;head</tt> pointer, the
+<tt>-&gt;tails[]</tt> array, and the callbacks is shown in this
+diagram:
+
+</p><p><img src="nxtlist.svg" alt="nxtlist.svg" width="40%">
+
+</p><p>In this figure, the <tt>-&gt;head</tt> pointer references the
+first
+RCU callback in the list.
+The <tt>-&gt;tails[RCU_DONE_TAIL]</tt> array element references
+the <tt>-&gt;head</tt> pointer itself, indicating that none
+of the callbacks is ready to invoke.
+The <tt>-&gt;tails[RCU_WAIT_TAIL]</tt> array element references callback
+CB&nbsp;2's <tt>-&gt;next</tt> pointer, which indicates that
+CB&nbsp;1 and CB&nbsp;2 are both waiting on the current grace period,
+give or take possible disagreements about exactly which grace period
+is the current one.
+The <tt>-&gt;tails[RCU_NEXT_READY_TAIL]</tt> array element
+references the same RCU callback that <tt>-&gt;tails[RCU_WAIT_TAIL]</tt>
+does, which indicates that there are no callbacks waiting on the next
+RCU grace period.
+The <tt>-&gt;tails[RCU_NEXT_TAIL]</tt> array element references
+CB&nbsp;4's <tt>-&gt;next</tt> pointer, indicating that all the
+remaining RCU callbacks have not yet been assigned to an RCU grace
+period.
+Note that the <tt>-&gt;tails[RCU_NEXT_TAIL]</tt> array element
+always references the last RCU callback's <tt>-&gt;next</tt> pointer
+unless the callback list is empty, in which case it references
+the <tt>-&gt;head</tt> pointer.
+
+<p>
+There is one additional important special case for the
+<tt>-&gt;tails[RCU_NEXT_TAIL]</tt> array element: It can be <tt>NULL</tt>
+when this list is <i>disabled</i>.
+Lists are disabled when the corresponding CPU is offline or when
+the corresponding CPU's callbacks are offloaded to a kthread,
+both of which are described elsewhere.
+
+</p><p>CPUs advance their callbacks from the
+<tt>RCU_NEXT_TAIL</tt> to the <tt>RCU_NEXT_READY_TAIL</tt> to the
+<tt>RCU_WAIT_TAIL</tt> to the <tt>RCU_DONE_TAIL</tt> list segments
+as grace periods advance.
+
+</p><p>The <tt>-&gt;gp_seq[]</tt> array records grace-period
+numbers corresponding to the list segments.
+This is what allows different CPUs to have different ideas as to
+which is the current grace period while still avoiding premature
+invocation of their callbacks.
+In particular, this allows CPUs that go idle for extended periods
+to determine which of their callbacks are ready to be invoked after
+reawakening.
+
+</p><p>The <tt>-&gt;len</tt> counter contains the number of
+callbacks in <tt>-&gt;head</tt>, and the
+<tt>-&gt;len_lazy</tt> contains the number of those callbacks that
+are known to only free memory, and whose invocation can therefore
+be safely deferred.
+
+<p><b>Important note</b>: It is the <tt>-&gt;len</tt> field that
+determines whether or not there are callbacks associated with
+this <tt>rcu_segcblist</tt> structure, <i>not</i> the <tt>-&gt;head</tt>
+pointer.
+The reason for this is that all the ready-to-invoke callbacks
+(that is, those in the <tt>RCU_DONE_TAIL</tt> segment) are extracted
+all at once at callback-invocation time.
+If callback invocation must be postponed, for example, because a
+high-priority process just woke up on this CPU, then the remaining
+callbacks are placed back on the <tt>RCU_DONE_TAIL</tt> segment.
+Either way, the <tt>-&gt;len</tt> and <tt>-&gt;len_lazy</tt> counts
+are adjusted after the corresponding callbacks have been invoked, and so
+again it is the <tt>-&gt;len</tt> count that accurately reflects whether
+or not there are callbacks associated with this <tt>rcu_segcblist</tt>
+structure.
+Of course, off-CPU sampling of the <tt>-&gt;len</tt> count requires
+the use of appropriate synchronization, for example, memory barriers.
+This synchronization can be a bit subtle, particularly in the case
+of <tt>rcu_barrier()</tt>.
+
 <h3><a name="The rcu_data Structure">
 The <tt>rcu_data</tt> Structure</a></h3>
 
@@ -983,62 +1113,18 @@ choice.
 as follows:
 
 <pre>
- 1 struct rcu_head *nxtlist;
- 2 struct rcu_head **nxttail[RCU_NEXT_SIZE];
- 3 unsigned long nxtcompleted[RCU_NEXT_SIZE];
- 4 long qlen_lazy;
- 5 long qlen;
- 6 long qlen_last_fqs_check;
+ 1 struct rcu_segcblist cblist;
+ 2 long qlen_last_fqs_check;
+ 3 unsigned long n_cbs_invoked;
+ 4 unsigned long n_nocbs_invoked;
+ 5 unsigned long n_cbs_orphaned;
+ 6 unsigned long n_cbs_adopted;
  7 unsigned long n_force_qs_snap;
- 8 unsigned long n_cbs_invoked;
- 9 unsigned long n_cbs_orphaned;
-10 unsigned long n_cbs_adopted;
-11 long blimit;
+ 8 long blimit;
 </pre>
 
-<p>The <tt>-&gt;nxtlist</tt> pointer and the
-<tt>-&gt;nxttail[]</tt> array form a four-segment list with
-older callbacks near the head and newer ones near the tail.
-Each segment contains callbacks with the corresponding relationship
-to the current grace period.
-The pointer out of the end of each of the four segments is referenced
-by the element of the <tt>-&gt;nxttail[]</tt> array indexed by
-<tt>RCU_DONE_TAIL</tt> (for callbacks handled by a prior grace period),
-<tt>RCU_WAIT_TAIL</tt> (for callbacks waiting on the current grace period),
-<tt>RCU_NEXT_READY_TAIL</tt> (for callbacks that will wait on the next
-grace period), and
-<tt>RCU_NEXT_TAIL</tt> (for callbacks that are not yet associated
-with a specific grace period)
-respectively, as shown in the following figure.
-
-</p><p><img src="nxtlist.svg" alt="nxtlist.svg" width="40%">
-
-</p><p>In this figure, the <tt>-&gt;nxtlist</tt> pointer references the
-first
-RCU callback in the list.
-The <tt>-&gt;nxttail[RCU_DONE_TAIL]</tt> array element references
-the <tt>-&gt;nxtlist</tt> pointer itself, indicating that none
-of the callbacks is ready to invoke.
-The <tt>-&gt;nxttail[RCU_WAIT_TAIL]</tt> array element references callback
-CB&nbsp;2's <tt>-&gt;next</tt> pointer, which indicates that
-CB&nbsp;1 and CB&nbsp;2 are both waiting on the current grace period.
-The <tt>-&gt;nxttail[RCU_NEXT_READY_TAIL]</tt> array element
-references the same RCU callback that <tt>-&gt;nxttail[RCU_WAIT_TAIL]</tt>
-does, which indicates that there are no callbacks waiting on the next
-RCU grace period.
-The <tt>-&gt;nxttail[RCU_NEXT_TAIL]</tt> array element references
-CB&nbsp;4's <tt>-&gt;next</tt> pointer, indicating that all the
-remaining RCU callbacks have not yet been assigned to an RCU grace
-period.
-Note that the <tt>-&gt;nxttail[RCU_NEXT_TAIL]</tt> array element
-always references the last RCU callback's <tt>-&gt;next</tt> pointer
-unless the callback list is empty, in which case it references
-the <tt>-&gt;nxtlist</tt> pointer.
-
-</p><p>CPUs advance their callbacks from the
-<tt>RCU_NEXT_TAIL</tt> to the <tt>RCU_NEXT_READY_TAIL</tt> to the
-<tt>RCU_WAIT_TAIL</tt> to the <tt>RCU_DONE_TAIL</tt> list segments
-as grace periods advance.
+<p>The <tt>-&gt;cblist</tt> structure is the segmented callback list
+described earlier.
 The CPU advances the callbacks in its <tt>rcu_data</tt> structure
 whenever it notices that another RCU grace period has completed.
 The CPU detects the completion of an RCU grace period by noticing
@@ -1049,16 +1135,7 @@ Recall that each <tt>rcu_node</tt> structure's
 <tt>-&gt;completed</tt> field is updated at the end of each
 grace period.
 
-</p><p>The <tt>-&gt;nxtcompleted[]</tt> array records grace-period
-numbers corresponding to the list segments.
-This allows CPUs that go idle for extended periods to determine
-which of their callbacks are ready to be invoked after reawakening.
-
-</p><p>The <tt>-&gt;qlen</tt> counter contains the number of
-callbacks in <tt>-&gt;nxtlist</tt>, and the
-<tt>-&gt;qlen_lazy</tt> contains the number of those callbacks that
-are known to only free memory, and whose invocation can therefore
-be safely deferred.
+<p>
 The <tt>-&gt;qlen_last_fqs_check</tt> and
 <tt>-&gt;n_force_qs_snap</tt> coordinate the forcing of quiescent
 states from <tt>call_rcu()</tt> and friends when callback
@@ -1069,6 +1146,10 @@ lists grow excessively long.
 fields count the number of callbacks invoked,
 sent to other CPUs when this CPU goes offline,
 and received from other CPUs when those other CPUs go offline.
+The <tt>-&gt;n_nocbs_invoked</tt> is used when the CPU's callbacks
+are offloaded to a kthread.
+
+<p>
 Finally, the <tt>-&gt;blimit</tt> counter is the maximum number of
 RCU callbacks that may be invoked at a given time.
 
@@ -1104,6 +1185,9 @@ Its fields are as follows:
   1   int dynticks_nesting;
   2   int dynticks_nmi_nesting;
   3   atomic_t dynticks;
+  4   bool rcu_need_heavy_qs;
+  5   unsigned long rcu_qs_ctr;
+  6   bool rcu_urgent_qs;
 </pre>
 
 <p>The <tt>-&gt;dynticks_nesting</tt> field counts the
@@ -1117,11 +1201,32 @@ NMIs are counted by the <tt>-&gt;dynticks_nmi_nesting</tt>
 field, except that NMIs that interrupt non-dyntick-idle execution
 are not counted.
 
-</p><p>Finally, the <tt>-&gt;dynticks</tt> field counts the corresponding
+</p><p>The <tt>-&gt;dynticks</tt> field counts the corresponding
 CPU's transitions to and from dyntick-idle mode, so that this counter
 has an even value when the CPU is in dyntick-idle mode and an odd
 value otherwise.
 
+</p><p>The <tt>-&gt;rcu_need_heavy_qs</tt> field is used
+to record the fact that the RCU core code would really like to
+see a quiescent state from the corresponding CPU, so much so that
+it is willing to call for heavy-weight dyntick-counter operations.
+This flag is checked by RCU's context-switch and <tt>cond_resched()</tt>
+code, which provide a momentary idle sojourn in response.
+
+</p><p>The <tt>-&gt;rcu_qs_ctr</tt> field is used to record
+quiescent states from <tt>cond_resched()</tt>.
+Because <tt>cond_resched()</tt> can execute quite frequently, this
+must be quite lightweight, as in a non-atomic increment of this
+per-CPU field.
+
+</p><p>Finally, the <tt>-&gt;rcu_urgent_qs</tt> field is used to record
+the fact that the RCU core code would really like to see a quiescent
+state from the corresponding CPU, with the various other fields indicating
+just how badly RCU wants this quiescent state.
+This flag is checked by RCU's context-switch and <tt>cond_resched()</tt>
+code, which, if nothing else, non-atomically increment <tt>-&gt;rcu_qs_ctr</tt>
+in response.
+
 <table>
 <tr><th>&nbsp;</th></tr>
 <tr><th align="left">Quick Quiz:</th></tr>
index abc4cc73a0977195317d7a0397f1f5e7c52f35b3..0223e79c38e0036373dcfc919b7296bd87fa300e 100644 (file)
@@ -19,7 +19,7 @@
    id="svg2"
    version="1.1"
    inkscape:version="0.48.4 r9939"
-   sodipodi:docname="nxtlist.fig">
+   sodipodi:docname="segcblist.svg">
   <metadata
      id="metadata94">
     <rdf:RDF>
@@ -28,7 +28,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
+        <dc:title />
       </cc:Work>
     </rdf:RDF>
   </metadata>
        xml:space="preserve"
        x="225"
        y="675"
-       fill="#000000"
-       font-family="Courier"
        font-style="normal"
        font-weight="bold"
        font-size="324"
-       text-anchor="start"
-       id="text64">nxtlist</text>
+       id="text64"
+       style="font-size:324px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;font-family:Courier">-&gt;head</text>
     <!-- Text -->
     <text
        xml:space="preserve"
        x="225"
        y="1800"
-       fill="#000000"
-       font-family="Courier"
        font-style="normal"
        font-weight="bold"
        font-size="324"
-       text-anchor="start"
-       id="text66">nxttail[RCU_DONE_TAIL]</text>
+       id="text66"
+       style="font-size:324px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;font-family:Courier">-&gt;tails[RCU_DONE_TAIL]</text>
     <!-- Text -->
     <text
        xml:space="preserve"
        x="225"
        y="2925"
-       fill="#000000"
-       font-family="Courier"
        font-style="normal"
        font-weight="bold"
        font-size="324"
-       text-anchor="start"
-       id="text68">nxttail[RCU_WAIT_TAIL]</text>
+       id="text68"
+       style="font-size:324px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;font-family:Courier">-&gt;tails[RCU_WAIT_TAIL]</text>
     <!-- Text -->
     <text
        xml:space="preserve"
        x="225"
        y="4050"
-       fill="#000000"
-       font-family="Courier"
        font-style="normal"
        font-weight="bold"
        font-size="324"
-       text-anchor="start"
-       id="text70">nxttail[RCU_NEXT_READY_TAIL]</text>
+       id="text70"
+       style="font-size:324px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;font-family:Courier">-&gt;tails[RCU_NEXT_READY_TAIL]</text>
     <!-- Text -->
     <text
        xml:space="preserve"
        x="225"
        y="5175"
-       fill="#000000"
-       font-family="Courier"
        font-style="normal"
        font-weight="bold"
        font-size="324"
-       text-anchor="start"
-       id="text72">nxttail[RCU_NEXT_TAIL]</text>
+       id="text72"
+       style="font-size:324px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;font-family:Courier">-&gt;tails[RCU_NEXT_TAIL]</text>
     <!-- Text -->
     <text
        xml:space="preserve"
index 7a3194c5559a52c5d38994192e61c19ba45cbee2..e5d0bbd0230b4954a8d6aae50f77ce9446640255 100644 (file)
@@ -284,6 +284,7 @@ Expedited Grace Period Refinements</a></h2>
        Funnel locking and wait/wakeup</a>.
 <li>   <a href="#Use of Workqueues">Use of Workqueues</a>.
 <li>   <a href="#Stall Warnings">Stall warnings</a>.
+<li>   <a href="#Mid-Boot Operation">Mid-boot operation</a>.
 </ol>
 
 <h3><a name="Idle-CPU Checks">Idle-CPU Checks</a></h3>
@@ -524,7 +525,7 @@ their grace periods and carrying out their wakeups.
 In earlier implementations, the task requesting the expedited
 grace period also drove it to completion.
 This straightforward approach had the disadvantage of needing to
-account for signals sent to user tasks,
+account for POSIX signals sent to user tasks,
 so more recent implemementations use the Linux kernel's
 <a href="https://www.kernel.org/doc/Documentation/workqueue.txt">workqueues</a>.
 
@@ -533,8 +534,8 @@ The requesting task still does counter snapshotting and funnel-lock
 processing, but the task reaching the top of the funnel lock
 does a <tt>schedule_work()</tt> (from <tt>_synchronize_rcu_expedited()</tt>
 so that a workqueue kthread does the actual grace-period processing.
-Because workqueue kthreads do not accept signals, grace-period-wait
-processing need not allow for signals.
+Because workqueue kthreads do not accept POSIX signals, grace-period-wait
+processing need not allow for POSIX signals.
 
 In addition, this approach allows wakeups for the previous expedited
 grace period to be overlapped with processing for the next expedited
@@ -586,6 +587,46 @@ blocking the current grace period are printed.
 Each stall warning results in another pass through the loop, but the
 second and subsequent passes use longer stall times.
 
+<h3><a name="Mid-Boot Operation">Mid-boot operation</a></h3>
+
+<p>
+The use of workqueues has the advantage that the expedited
+grace-period code need not worry about POSIX signals.
+Unfortunately, it has the
+corresponding disadvantage that workqueues cannot be used until
+they are initialized, which does not happen until some time after
+the scheduler spawns the first task.
+Given that there are parts of the kernel that really do want to
+execute grace periods during this mid-boot &ldquo;dead zone&rdquo;,
+expedited grace periods must do something else during thie time.
+
+<p>
+What they do is to fall back to the old practice of requiring that the
+requesting task drive the expedited grace period, as was the case
+before the use of workqueues.
+However, the requesting task is only required to drive the grace period
+during the mid-boot dead zone.
+Before mid-boot, a synchronous grace period is a no-op.
+Some time after mid-boot, workqueues are used.
+
+<p>
+Non-expedited non-SRCU synchronous grace periods must also operate
+normally during mid-boot.
+This is handled by causing non-expedited grace periods to take the
+expedited code path during mid-boot.
+
+<p>
+The current code assumes that there are no POSIX signals during
+the mid-boot dead zone.
+However, if an overwhelming need for POSIX signals somehow arises,
+appropriate adjustments can be made to the expedited stall-warning code.
+One such adjustment would reinstate the pre-workqueue stall-warning
+checks, but only during the mid-boot dead zone.
+
+<p>
+With this refinement, synchronous grace periods can now be used from
+task context pretty much any time during the life of the kernel.
+
 <h3><a name="Summary">
 Summary</a></h3>
 
index 21593496aca6f617957b667f4f3aa5d627e86c4d..f60adf112663aad038e928e7b7cce04a65752277 100644 (file)
@@ -659,8 +659,9 @@ systems with more than one CPU:
        In other words, a given instance of <tt>synchronize_rcu()</tt>
        can avoid waiting on a given RCU read-side critical section only
        if it can prove that <tt>synchronize_rcu()</tt> started first.
+       </font>
 
-       <p>
+       <p><font color="ffffff">
        A related question is &ldquo;When <tt>rcu_read_lock()</tt>
        doesn't generate any code, why does it matter how it relates
        to a grace period?&rdquo;
@@ -675,8 +676,9 @@ systems with more than one CPU:
        within the critical section, in which case none of the accesses
        within the critical section may observe the effects of any
        access following the grace period.
+       </font>
 
-       <p>
+       <p><font color="ffffff">
        As of late 2016, mathematical models of RCU take this
        viewpoint, for example, see slides&nbsp;62 and&nbsp;63
        of the
@@ -1616,8 +1618,8 @@ CPUs should at least make reasonable forward progress.
 In return for its shorter latencies, <tt>synchronize_rcu_expedited()</tt>
 is permitted to impose modest degradation of real-time latency
 on non-idle online CPUs.
-That said, it will likely be necessary to take further steps to reduce this
-degradation, hopefully to roughly that of a scheduling-clock interrupt.
+Here, &ldquo;modest&rdquo; means roughly the same latency
+degradation as a scheduling-clock interrupt.
 
 <p>
 There are a number of situations where even
@@ -1913,12 +1915,9 @@ This requirement is another factor driving batching of grace periods,
 but it is also the driving force behind the checks for large numbers
 of queued RCU callbacks in the <tt>call_rcu()</tt> code path.
 Finally, high update rates should not delay RCU read-side critical
-sections, although some read-side delays can occur when using
+sections, although some small read-side delays can occur when using
 <tt>synchronize_rcu_expedited()</tt>, courtesy of this function's use
-of <tt>try_stop_cpus()</tt>.
-(In the future, <tt>synchronize_rcu_expedited()</tt> will be
-converted to use lighter-weight inter-processor interrupts (IPIs),
-but this will still disturb readers, though to a much smaller degree.)
+of <tt>smp_call_function_single()</tt>.
 
 <p>
 Although all three of these corner cases were understood in the early
@@ -2154,7 +2153,8 @@ as will <tt>rcu_assign_pointer()</tt>.
 <p>
 Although <tt>call_rcu()</tt> may be invoked at any
 time during boot, callbacks are not guaranteed to be invoked until after
-the scheduler is fully up and running.
+all of RCU's kthreads have been spawned, which occurs at
+<tt>early_initcall()</tt> time.
 This delay in callback invocation is due to the fact that RCU does not
 invoke callbacks until it is fully initialized, and this full initialization
 cannot occur until after the scheduler has initialized itself to the
@@ -2167,8 +2167,10 @@ on what operations those callbacks could invoke.
 Perhaps surprisingly, <tt>synchronize_rcu()</tt>,
 <a href="#Bottom-Half Flavor"><tt>synchronize_rcu_bh()</tt></a>
 (<a href="#Bottom-Half Flavor">discussed below</a>),
-and
-<a href="#Sched Flavor"><tt>synchronize_sched()</tt></a>
+<a href="#Sched Flavor"><tt>synchronize_sched()</tt></a>,
+<tt>synchronize_rcu_expedited()</tt>,
+<tt>synchronize_rcu_bh_expedited()</tt>, and
+<tt>synchronize_sched_expedited()</tt>
 will all operate normally
 during very early boot, the reason being that there is only one CPU
 and preemption is disabled.
@@ -2178,45 +2180,59 @@ state and thus a grace period, so the early-boot implementation can
 be a no-op.
 
 <p>
-Both <tt>synchronize_rcu_bh()</tt> and <tt>synchronize_sched()</tt>
-continue to operate normally through the remainder of boot, courtesy
-of the fact that preemption is disabled across their RCU read-side
-critical sections and also courtesy of the fact that there is still
-only one CPU.
-However, once the scheduler starts initializing, preemption is enabled.
-There is still only a single CPU, but the fact that preemption is enabled
-means that the no-op implementation of <tt>synchronize_rcu()</tt> no
-longer works in <tt>CONFIG_PREEMPT=y</tt> kernels.
-Therefore, as soon as the scheduler starts initializing, the early-boot
-fastpath is disabled.
-This means that <tt>synchronize_rcu()</tt> switches to its runtime
-mode of operation where it posts callbacks, which in turn means that
-any call to <tt>synchronize_rcu()</tt> will block until the corresponding
-callback is invoked.
-Unfortunately, the callback cannot be invoked until RCU's runtime
-grace-period machinery is up and running, which cannot happen until
-the scheduler has initialized itself sufficiently to allow RCU's
-kthreads to be spawned.
-Therefore, invoking <tt>synchronize_rcu()</tt> during scheduler
-initialization can result in deadlock.
+However, once the scheduler has spawned its first kthread, this early
+boot trick fails for <tt>synchronize_rcu()</tt> (as well as for
+<tt>synchronize_rcu_expedited()</tt>) in <tt>CONFIG_PREEMPT=y</tt>
+kernels.
+The reason is that an RCU read-side critical section might be preempted,
+which means that a subsequent <tt>synchronize_rcu()</tt> really does have
+to wait for something, as opposed to simply returning immediately.
+Unfortunately, <tt>synchronize_rcu()</tt> can't do this until all of
+its kthreads are spawned, which doesn't happen until some time during
+<tt>early_initcalls()</tt> time.
+But this is no excuse:  RCU is nevertheless required to correctly handle
+synchronous grace periods during this time period.
+Once all of its kthreads are up and running, RCU starts running
+normally.
 
 <table>
 <tr><th>&nbsp;</th></tr>
 <tr><th align="left">Quick Quiz:</th></tr>
 <tr><td>
-       So what happens with <tt>synchronize_rcu()</tt> during
-       scheduler initialization for <tt>CONFIG_PREEMPT=n</tt>
-       kernels?
+       How can RCU possibly handle grace periods before all of its
+       kthreads have been spawned???
 </td></tr>
 <tr><th align="left">Answer:</th></tr>
 <tr><td bgcolor="#ffffff"><font color="ffffff">
-       In <tt>CONFIG_PREEMPT=n</tt> kernel, <tt>synchronize_rcu()</tt>
-       maps directly to <tt>synchronize_sched()</tt>.
-       Therefore, <tt>synchronize_rcu()</tt> works normally throughout
-       boot in <tt>CONFIG_PREEMPT=n</tt> kernels.
-       However, your code must also work in <tt>CONFIG_PREEMPT=y</tt> kernels,
-       so it is still necessary to avoid invoking <tt>synchronize_rcu()</tt>
-       during scheduler initialization.
+       Very carefully!
+       </font>
+
+       <p><font color="ffffff">
+       During the &ldquo;dead zone&rdquo; between the time that the
+       scheduler spawns the first task and the time that all of RCU's
+       kthreads have been spawned, all synchronous grace periods are
+       handled by the expedited grace-period mechanism.
+       At runtime, this expedited mechanism relies on workqueues, but
+       during the dead zone the requesting task itself drives the
+       desired expedited grace period.
+       Because dead-zone execution takes place within task context,
+       everything works.
+       Once the dead zone ends, expedited grace periods go back to
+       using workqueues, as is required to avoid problems that would
+       otherwise occur when a user task received a POSIX signal while
+       driving an expedited grace period.
+       </font>
+
+       <p><font color="ffffff">
+       And yes, this does mean that it is unhelpful to send POSIX
+       signals to random tasks between the time that the scheduler
+       spawns its first kthread and the time that RCU's kthreads
+       have all been spawned.
+       If there ever turns out to be a good reason for sending POSIX
+       signals during that time, appropriate adjustments will be made.
+       (If it turns out that POSIX signals are sent during this time for
+       no good reason, other adjustments will be made, appropriate
+       or otherwise.)
 </font></td></tr>
 <tr><td>&nbsp;</td></tr>
 </table>
@@ -2295,12 +2311,61 @@ situation, and Dipankar Sarma incorporated <tt>rcu_barrier()</tt> into RCU.
 The need for <tt>rcu_barrier()</tt> for module unloading became
 apparent later.
 
+<p>
+<b>Important note</b>: The <tt>rcu_barrier()</tt> function is not,
+repeat, <i>not</i>, obligated to wait for a grace period.
+It is instead only required to wait for RCU callbacks that have
+already been posted.
+Therefore, if there are no RCU callbacks posted anywhere in the system,
+<tt>rcu_barrier()</tt> is within its rights to return immediately.
+Even if there are callbacks posted, <tt>rcu_barrier()</tt> does not
+necessarily need to wait for a grace period.
+
+<table>
+<tr><th>&nbsp;</th></tr>
+<tr><th align="left">Quick Quiz:</th></tr>
+<tr><td>
+       Wait a minute!
+       Each RCU callbacks must wait for a grace period to complete,
+       and <tt>rcu_barrier()</tt> must wait for each pre-existing
+       callback to be invoked.
+       Doesn't <tt>rcu_barrier()</tt> therefore need to wait for
+       a full grace period if there is even one callback posted anywhere
+       in the system?
+</td></tr>
+<tr><th align="left">Answer:</th></tr>
+<tr><td bgcolor="#ffffff"><font color="ffffff">
+       Absolutely not!!!
+       </font>
+
+       <p><font color="ffffff">
+       Yes, each RCU callbacks must wait for a grace period to complete,
+       but it might well be partly (or even completely) finished waiting
+       by the time <tt>rcu_barrier()</tt> is invoked.
+       In that case, <tt>rcu_barrier()</tt> need only wait for the
+       remaining portion of the grace period to elapse.
+       So even if there are quite a few callbacks posted,
+       <tt>rcu_barrier()</tt> might well return quite quickly.
+       </font>
+
+       <p><font color="ffffff">
+       So if you need to wait for a grace period as well as for all
+       pre-existing callbacks, you will need to invoke both
+       <tt>synchronize_rcu()</tt> and <tt>rcu_barrier()</tt>.
+       If latency is a concern, you can always use workqueues
+       to invoke them concurrently.
+</font></td></tr>
+<tr><td>&nbsp;</td></tr>
+</table>
+
 <h3><a name="Hotplug CPU">Hotplug CPU</a></h3>
 
 <p>
 The Linux kernel supports CPU hotplug, which means that CPUs
 can come and go.
-It is of course illegal to use any RCU API member from an offline CPU.
+It is of course illegal to use any RCU API member from an offline CPU,
+with the exception of <a href="#Sleepable RCU">SRCU</a> read-side
+critical sections.
 This requirement was present from day one in DYNIX/ptx, but
 on the other hand, the Linux kernel's CPU-hotplug implementation
 is &ldquo;interesting.&rdquo;
@@ -2310,19 +2375,18 @@ The Linux-kernel CPU-hotplug implementation has notifiers that
 are used to allow the various kernel subsystems (including RCU)
 to respond appropriately to a given CPU-hotplug operation.
 Most RCU operations may be invoked from CPU-hotplug notifiers,
-including even normal synchronous grace-period operations
-such as <tt>synchronize_rcu()</tt>.
-However, expedited grace-period operations such as
-<tt>synchronize_rcu_expedited()</tt> are not supported,
-due to the fact that current implementations block CPU-hotplug
-operations, which could result in deadlock.
+including even synchronous grace-period operations such as
+<tt>synchronize_rcu()</tt> and <tt>synchronize_rcu_expedited()</tt>.
 
 <p>
-In addition, all-callback-wait operations such as
+However, all-callback-wait operations such as
 <tt>rcu_barrier()</tt> are also not supported, due to the
 fact that there are phases of CPU-hotplug operations where
 the outgoing CPU's callbacks will not be invoked until after
 the CPU-hotplug operation ends, which could also result in deadlock.
+Furthermore, <tt>rcu_barrier()</tt> blocks CPU-hotplug operations
+during its execution, which results in another type of deadlock
+when invoked from a CPU-hotplug notifier.
 
 <h3><a name="Scheduler and RCU">Scheduler and RCU</a></h3>
 
@@ -2863,6 +2927,27 @@ It also motivates the <tt>smp_mb__after_srcu_read_unlock()</tt>
 API, which, in combination with <tt>srcu_read_unlock()</tt>,
 guarantees a full memory barrier.
 
+<p>
+Also unlike other RCU flavors, SRCU's callbacks-wait function
+<tt>srcu_barrier()</tt> may be invoked from CPU-hotplug notifiers,
+though this is not necessarily a good idea.
+The reason that this is possible is that SRCU is insensitive
+to whether or not a CPU is online, which means that <tt>srcu_barrier()</tt>
+need not exclude CPU-hotplug operations.
+
+<p>
+As of v4.12, SRCU's callbacks are maintained per-CPU, eliminating
+a locking bottleneck present in prior kernel versions.
+Although this will allow users to put much heavier stress on
+<tt>call_srcu()</tt>, it is important to note that SRCU does not
+yet take any special steps to deal with callback flooding.
+So if you are posting (say) 10,000 SRCU callbacks per second per CPU,
+you are probably totally OK, but if you intend to post (say) 1,000,000
+SRCU callbacks per second per CPU, please run some tests first.
+SRCU just might need a few adjustment to deal with that sort of load.
+Of course, your mileage may vary based on the speed of your CPUs and
+the size of your memory.
+
 <p>
 The
 <a href="https://lwn.net/Articles/609973/#RCU Per-Flavor API Table">SRCU API</a>
@@ -3021,8 +3106,8 @@ to do some redesign to avoid this scalability problem.
 
 <p>
 RCU disables CPU hotplug in a few places, perhaps most notably in the
-expedited grace-period and <tt>rcu_barrier()</tt> operations.
-If there is a strong reason to use expedited grace periods in CPU-hotplug
+<tt>rcu_barrier()</tt> operations.
+If there is a strong reason to use <tt>rcu_barrier()</tt> in CPU-hotplug
 notifiers, it will be necessary to avoid disabling CPU hotplug.
 This would introduce some complexity, so there had better be a <i>very</i>
 good reason.
@@ -3096,9 +3181,5 @@ Andy Lutomirski for their help in rendering
 this article human readable, and to Michelle Rankin for her support
 of this effort.
 Other contributions are acknowledged in the Linux kernel's git archive.
-The cartoon is copyright (c) 2013 by Melissa Broussard,
-and is provided
-under the terms of the Creative Commons Attribution-Share Alike 3.0
-United States license.
 
 </body></html>
index c0bf2441a2baf5f254ed64d6e4c117dda808fd2c..b2a613f16d747828e35fd182a0c9fe06c1107d0f 100644 (file)
@@ -138,6 +138,15 @@ o  Be very careful about comparing pointers obtained from
                This sort of comparison occurs frequently when scanning
                RCU-protected circular linked lists.
 
+               Note that if checks for being within an RCU read-side
+               critical section are not required and the pointer is never
+               dereferenced, rcu_access_pointer() should be used in place
+               of rcu_dereference(). The rcu_access_pointer() primitive
+               does not require an enclosing read-side critical section,
+               and also omits the smp_read_barrier_depends() included in
+               rcu_dereference(), which in turn should provide a small
+               performance gain in some CPUs (e.g., the DEC Alpha).
+
        o       The comparison is against a pointer that references memory
                that was initialized "a long time ago."  The reason
                this is safe is that even if misordering occurs, the
index 18f9651ff23d411e96737ec070d4fc6bc29c50fe..8151f0195f7688386e8057ad34fdc9cc153b7fb8 100644 (file)
@@ -1,5 +1,5 @@
 Using hlist_nulls to protect read-mostly linked lists and
-objects using SLAB_DESTROY_BY_RCU allocations.
+objects using SLAB_TYPESAFE_BY_RCU allocations.
 
 Please read the basics in Documentation/RCU/listRCU.txt
 
@@ -7,7 +7,7 @@ Using special makers (called 'nulls') is a convenient way
 to solve following problem :
 
 A typical RCU linked list managing objects which are
-allocated with SLAB_DESTROY_BY_RCU kmem_cache can
+allocated with SLAB_TYPESAFE_BY_RCU kmem_cache can
 use following algos :
 
 1) Lookup algo
@@ -96,7 +96,7 @@ unlock_chain(); // typically a spin_unlock()
 3) Remove algo
 --------------
 Nothing special here, we can use a standard RCU hlist deletion.
-But thanks to SLAB_DESTROY_BY_RCU, beware a deleted object can be reused
+But thanks to SLAB_TYPESAFE_BY_RCU, beware a deleted object can be reused
 very very fast (before the end of RCU grace period)
 
 if (put_last_reference_on(obj) {
index e93d04133fe7ae58cfb6c3da3e0717b0640f3b9a..96a3d81837e1b120098eccfd1b95b0bfc4947be9 100644 (file)
@@ -1,9 +1,102 @@
 Using RCU's CPU Stall Detector
 
-The rcu_cpu_stall_suppress module parameter enables RCU's CPU stall
-detector, which detects conditions that unduly delay RCU grace periods.
-This module parameter enables CPU stall detection by default, but
-may be overridden via boot-time parameter or at runtime via sysfs.
+This document first discusses what sorts of issues RCU's CPU stall
+detector can locate, and then discusses kernel parameters and Kconfig
+options that can be used to fine-tune the detector's operation.  Finally,
+this document explains the stall detector's "splat" format.
+
+
+What Causes RCU CPU Stall Warnings?
+
+So your kernel printed an RCU CPU stall warning.  The next question is
+"What caused it?"  The following problems can result in RCU CPU stall
+warnings:
+
+o      A CPU looping in an RCU read-side critical section.
+
+o      A CPU looping with interrupts disabled.
+
+o      A CPU looping with preemption disabled.  This condition can
+       result in RCU-sched stalls and, if ksoftirqd is in use, RCU-bh
+       stalls.
+
+o      A CPU looping with bottom halves disabled.  This condition can
+       result in RCU-sched and RCU-bh stalls.
+
+o      For !CONFIG_PREEMPT kernels, a CPU looping anywhere in the
+       kernel without invoking schedule().  Note that cond_resched()
+       does not necessarily prevent RCU CPU stall warnings.  Therefore,
+       if the looping in the kernel is really expected and desirable
+       behavior, you might need to replace some of the cond_resched()
+       calls with calls to cond_resched_rcu_qs().
+
+o      Booting Linux using a console connection that is too slow to
+       keep up with the boot-time console-message rate.  For example,
+       a 115Kbaud serial console can be -way- too slow to keep up
+       with boot-time message rates, and will frequently result in
+       RCU CPU stall warning messages.  Especially if you have added
+       debug printk()s.
+
+o      Anything that prevents RCU's grace-period kthreads from running.
+       This can result in the "All QSes seen" console-log message.
+       This message will include information on when the kthread last
+       ran and how often it should be expected to run.
+
+o      A CPU-bound real-time task in a CONFIG_PREEMPT kernel, which might
+       happen to preempt a low-priority task in the middle of an RCU
+       read-side critical section.   This is especially damaging if
+       that low-priority task is not permitted to run on any other CPU,
+       in which case the next RCU grace period can never complete, which
+       will eventually cause the system to run out of memory and hang.
+       While the system is in the process of running itself out of
+       memory, you might see stall-warning messages.
+
+o      A CPU-bound real-time task in a CONFIG_PREEMPT_RT kernel that
+       is running at a higher priority than the RCU softirq threads.
+       This will prevent RCU callbacks from ever being invoked,
+       and in a CONFIG_PREEMPT_RCU kernel will further prevent
+       RCU grace periods from ever completing.  Either way, the
+       system will eventually run out of memory and hang.  In the
+       CONFIG_PREEMPT_RCU case, you might see stall-warning
+       messages.
+
+o      A hardware or software issue shuts off the scheduler-clock
+       interrupt on a CPU that is not in dyntick-idle mode.  This
+       problem really has happened, and seems to be most likely to
+       result in RCU CPU stall warnings for CONFIG_NO_HZ_COMMON=n kernels.
+
+o      A bug in the RCU implementation.
+
+o      A hardware failure.  This is quite unlikely, but has occurred
+       at least once in real life.  A CPU failed in a running system,
+       becoming unresponsive, but not causing an immediate crash.
+       This resulted in a series of RCU CPU stall warnings, eventually
+       leading the realization that the CPU had failed.
+
+The RCU, RCU-sched, RCU-bh, and RCU-tasks implementations have CPU stall
+warning.  Note that SRCU does -not- have CPU stall warnings.  Please note
+that RCU only detects CPU stalls when there is a grace period in progress.
+No grace period, no CPU stall warnings.
+
+To diagnose the cause of the stall, inspect the stack traces.
+The offending function will usually be near the top of the stack.
+If you have a series of stall warnings from a single extended stall,
+comparing the stack traces can often help determine where the stall
+is occurring, which will usually be in the function nearest the top of
+that portion of the stack which remains the same from trace to trace.
+If you can reliably trigger the stall, ftrace can be quite helpful.
+
+RCU bugs can often be debugged with the help of CONFIG_RCU_TRACE
+and with RCU's event tracing.  For information on RCU's event tracing,
+see include/trace/events/rcu.h.
+
+
+Fine-Tuning the RCU CPU Stall Detector
+
+The rcuupdate.rcu_cpu_stall_suppress module parameter disables RCU's
+CPU stall detector, which detects conditions that unduly delay RCU grace
+periods.  This module parameter enables CPU stall detection by default,
+but may be overridden via boot-time parameter or at runtime via sysfs.
 The stall detector's idea of what constitutes "unduly delayed" is
 controlled by a set of kernel configuration variables and cpp macros:
 
@@ -56,6 +149,9 @@ rcupdate.rcu_task_stall_timeout
        And continues with the output of sched_show_task() for each
        task stalling the current RCU-tasks grace period.
 
+
+Interpreting RCU's CPU Stall-Detector "Splats"
+
 For non-RCU-tasks flavors of RCU, when a CPU detects that it is stalling,
 it will print a message similar to the following:
 
@@ -178,89 +274,3 @@ grace period is in flight.
 
 It is entirely possible to see stall warnings from normal and from
 expedited grace periods at about the same time from the same run.
-
-
-What Causes RCU CPU Stall Warnings?
-
-So your kernel printed an RCU CPU stall warning.  The next question is
-"What caused it?"  The following problems can result in RCU CPU stall
-warnings:
-
-o      A CPU looping in an RCU read-side critical section.
-       
-o      A CPU looping with interrupts disabled.  This condition can
-       result in RCU-sched and RCU-bh stalls.
-
-o      A CPU looping with preemption disabled.  This condition can
-       result in RCU-sched stalls and, if ksoftirqd is in use, RCU-bh
-       stalls.
-
-o      A CPU looping with bottom halves disabled.  This condition can
-       result in RCU-sched and RCU-bh stalls.
-
-o      For !CONFIG_PREEMPT kernels, a CPU looping anywhere in the
-       kernel without invoking schedule().  Note that cond_resched()
-       does not necessarily prevent RCU CPU stall warnings.  Therefore,
-       if the looping in the kernel is really expected and desirable
-       behavior, you might need to replace some of the cond_resched()
-       calls with calls to cond_resched_rcu_qs().
-
-o      Booting Linux using a console connection that is too slow to
-       keep up with the boot-time console-message rate.  For example,
-       a 115Kbaud serial console can be -way- too slow to keep up
-       with boot-time message rates, and will frequently result in
-       RCU CPU stall warning messages.  Especially if you have added
-       debug printk()s.
-
-o      Anything that prevents RCU's grace-period kthreads from running.
-       This can result in the "All QSes seen" console-log message.
-       This message will include information on when the kthread last
-       ran and how often it should be expected to run.
-
-o      A CPU-bound real-time task in a CONFIG_PREEMPT kernel, which might
-       happen to preempt a low-priority task in the middle of an RCU
-       read-side critical section.   This is especially damaging if
-       that low-priority task is not permitted to run on any other CPU,
-       in which case the next RCU grace period can never complete, which
-       will eventually cause the system to run out of memory and hang.
-       While the system is in the process of running itself out of
-       memory, you might see stall-warning messages.
-
-o      A CPU-bound real-time task in a CONFIG_PREEMPT_RT kernel that
-       is running at a higher priority than the RCU softirq threads.
-       This will prevent RCU callbacks from ever being invoked,
-       and in a CONFIG_PREEMPT_RCU kernel will further prevent
-       RCU grace periods from ever completing.  Either way, the
-       system will eventually run out of memory and hang.  In the
-       CONFIG_PREEMPT_RCU case, you might see stall-warning
-       messages.
-
-o      A hardware or software issue shuts off the scheduler-clock
-       interrupt on a CPU that is not in dyntick-idle mode.  This
-       problem really has happened, and seems to be most likely to
-       result in RCU CPU stall warnings for CONFIG_NO_HZ_COMMON=n kernels.
-
-o      A bug in the RCU implementation.
-
-o      A hardware failure.  This is quite unlikely, but has occurred
-       at least once in real life.  A CPU failed in a running system,
-       becoming unresponsive, but not causing an immediate crash.
-       This resulted in a series of RCU CPU stall warnings, eventually
-       leading the realization that the CPU had failed.
-
-The RCU, RCU-sched, RCU-bh, and RCU-tasks implementations have CPU stall
-warning.  Note that SRCU does -not- have CPU stall warnings.  Please note
-that RCU only detects CPU stalls when there is a grace period in progress.
-No grace period, no CPU stall warnings.
-
-To diagnose the cause of the stall, inspect the stack traces.
-The offending function will usually be near the top of the stack.
-If you have a series of stall warnings from a single extended stall,
-comparing the stack traces can often help determine where the stall
-is occurring, which will usually be in the function nearest the top of
-that portion of the stack which remains the same from trace to trace.
-If you can reliably trigger the stall, ftrace can be quite helpful.
-
-RCU bugs can often be debugged with the help of CONFIG_RCU_TRACE
-and with RCU's event tracing.  For information on RCU's event tracing,
-see include/trace/events/rcu.h.
index 5cbd8b2395b811489c68acb7da4616b4a1ef9523..8ed6c9f6133c45a54c442d04ed0814dc2dcd1a45 100644 (file)
@@ -562,7 +562,9 @@ This section presents a "toy" RCU implementation that is based on
 familiar locking primitives.  Its overhead makes it a non-starter for
 real-life use, as does its lack of scalability.  It is also unsuitable
 for realtime use, since it allows scheduling latency to "bleed" from
-one read-side critical section to another.
+one read-side critical section to another.  It also assumes recursive
+reader-writer locks:  If you try this with non-recursive locks, and
+you allow nested rcu_read_lock() calls, you can deadlock.
 
 However, it is probably the easiest implementation to relate to, so is
 a good starting point.
@@ -587,20 +589,21 @@ It is extremely simple:
                write_unlock(&rcu_gp_mutex);
        }
 
-[You can ignore rcu_assign_pointer() and rcu_dereference() without
-missing much.  But here they are anyway.  And whatever you do, don't
-forget about them when submitting patches making use of RCU!]
+[You can ignore rcu_assign_pointer() and rcu_dereference() without missing
+much.  But here are simplified versions anyway.  And whatever you do,
+don't forget about them when submitting patches making use of RCU!]
 
-       #define rcu_assign_pointer(p, v)        ({ \
-                                                       smp_wmb(); \
-                                                       (p) = (v); \
-                                               })
+       #define rcu_assign_pointer(p, v) \
+       ({ \
+               smp_store_release(&(p), (v)); \
+       })
 
-       #define rcu_dereference(p)     ({ \
-                                       typeof(p) _________p1 = p; \
-                                       smp_read_barrier_depends(); \
-                                       (_________p1); \
-                                       })
+       #define rcu_dereference(p) \
+       ({ \
+               typeof(p) _________p1 = p; \
+               smp_read_barrier_depends(); \
+               (_________p1); \
+       })
 
 
 The rcu_read_lock() and rcu_read_unlock() primitive read-acquire
@@ -925,7 +928,8 @@ d.  Do you need RCU grace periods to complete even in the face
 
 e.     Is your workload too update-intensive for normal use of
        RCU, but inappropriate for other synchronization mechanisms?
-       If so, consider SLAB_DESTROY_BY_RCU.  But please be careful!
+       If so, consider SLAB_TYPESAFE_BY_RCU (which was originally
+       named SLAB_DESTROY_BY_RCU).  But please be careful!
 
 f.     Do you need read-side critical sections that are respected
        even though they are in the middle of the idle loop, during
index 230b03caee5587df8d8e5801c795437785a7b412..15f79c27748df1611b1643b77ca68e2a5e7cfaab 100644 (file)
                        extended tables themselves, and also PASID support. With
                        this option set, extended tables will not be used even
                        on hardware which claims to support them.
+               tboot_noforce [Default Off]
+                       Do not force the Intel IOMMU enabled under tboot.
+                       By default, tboot will force Intel IOMMU on, which
+                       could harm performance of some high-throughput
+                       devices like 40GBit network cards, even if identity
+                       mapping is enabled.
+                       Note that using this option lowers the security
+                       provided by tboot because it makes the system
+                       vulnerable to DMA attacks.
 
        intel_idle.max_cstate=  [KNL,HW,ACPI,X86]
                        0       disables intel_idle and fall back on acpi_idle.
                nobypass        [PPC/POWERNV]
                        Disable IOMMU bypass, using IOMMU for PCI devices.
 
+       iommu.passthrough=
+                       [ARM64] Configure DMA to bypass the IOMMU by default.
+                       Format: { "0" | "1" }
+                       0 - Use IOMMU translation for DMA.
+                       1 - Bypass the IOMMU for DMA.
+                       unset - Use IOMMU translation for DMA.
 
        io7=            [HW] IO7 for Marvel based alpha systems
                        See comment before marvel_specify_io7 in
                        and gids from such clients.  This is intended to ease
                        migration from NFSv2/v3.
 
-       objlayoutdriver.osd_login_prog=
-                       [NFS] [OBJLAYOUT] sets the pathname to the program which
-                       is used to automatically discover and login into new
-                       osd-targets. Please see:
-                       Documentation/filesystems/pnfs.txt for more explanations
-
        nmi_debug=      [KNL,SH] Specify one or more actions to take
                        when a NMI is triggered.
                        Format: [state][,regs][,debounce][,die]
        spia_pedr=
        spia_peddr=
 
+       srcutree.exp_holdoff [KNL]
+                       Specifies how many nanoseconds must elapse
+                       since the end of the last SRCU grace period for
+                       a given srcu_struct until the next normal SRCU
+                       grace period will be considered for automatic
+                       expediting.  Set to zero to disable automatic
+                       expediting.
+
        stacktrace      [FTRACE]
                        Enabled the stack tracer on boot up.
 
index d9995f1f51b3eb9e678a557a471e4d387db49ca8..a25a99e82bb1c9811ee3e8cb111d356fa53fc979 100644 (file)
@@ -11,24 +11,56 @@ in AArch64 Linux.
 The kernel configures the translation tables so that translations made
 via TTBR0 (i.e. userspace mappings) have the top byte (bits 63:56) of
 the virtual address ignored by the translation hardware. This frees up
-this byte for application use, with the following caveats:
+this byte for application use.
 
-       (1) The kernel requires that all user addresses passed to EL1
-           are tagged with tag 0x00. This means that any syscall
-           parameters containing user virtual addresses *must* have
-           their top byte cleared before trapping to the kernel.
 
-       (2) Non-zero tags are not preserved when delivering signals.
-           This means that signal handlers in applications making use
-           of tags cannot rely on the tag information for user virtual
-           addresses being maintained for fields inside siginfo_t.
-           One exception to this rule is for signals raised in response
-           to watchpoint debug exceptions, where the tag information
-           will be preserved.
+Passing tagged addresses to the kernel
+--------------------------------------
 
-       (3) Special care should be taken when using tagged pointers,
-           since it is likely that C compilers will not hazard two
-           virtual addresses differing only in the upper byte.
+All interpretation of userspace memory addresses by the kernel assumes
+an address tag of 0x00.
+
+This includes, but is not limited to, addresses found in:
+
+ - pointer arguments to system calls, including pointers in structures
+   passed to system calls,
+
+ - the stack pointer (sp), e.g. when interpreting it to deliver a
+   signal,
+
+ - the frame pointer (x29) and frame records, e.g. when interpreting
+   them to generate a backtrace or call graph.
+
+Using non-zero address tags in any of these locations may result in an
+error code being returned, a (fatal) signal being raised, or other modes
+of failure.
+
+For these reasons, passing non-zero address tags to the kernel via
+system calls is forbidden, and using a non-zero address tag for sp is
+strongly discouraged.
+
+Programs maintaining a frame pointer and frame records that use non-zero
+address tags may suffer impaired or inaccurate debug and profiling
+visibility.
+
+
+Preserving tags
+---------------
+
+Non-zero tags are not preserved when delivering signals. This means that
+signal handlers in applications making use of tags cannot rely on the
+tag information for user virtual addresses being maintained for fields
+inside siginfo_t. One exception to this rule is for signals raised in
+response to watchpoint debug exceptions, where the tag information will
+be preserved.
 
 The architecture prevents the use of a tagged PC, so the upper byte will
 be set to a sign-extension of bit 55 on exception return.
+
+
+Other considerations
+--------------------
+
+Special care should be taken when using tagged pointers, since it is
+likely that C compilers will not hazard two virtual addresses differing
+only in the upper byte.
index 1b87df6cd4761ab0e548d0cc0611c2c5b74725eb..05e2822a80b34d0f31649cfb486ade2b4679f9e8 100644 (file)
@@ -11,6 +11,13 @@ controllers), BFQ's main features are:
   groups (switching back to time distribution when needed to keep
   throughput high).
 
+In its default configuration, BFQ privileges latency over
+throughput. So, when needed for achieving a lower latency, BFQ builds
+schedules that may lead to a lower throughput. If your main or only
+goal, for a given device, is to achieve the maximum-possible
+throughput at all times, then do switch off all low-latency heuristics
+for that device, by setting low_latency to 0. Full details in Section 3.
+
 On average CPUs, the current version of BFQ can handle devices
 performing at most ~30K IOPS; at most ~50 KIOPS on faster CPUs. As a
 reference, 30-50 KIOPS correspond to very high bandwidths with
@@ -375,11 +382,19 @@ default, low latency mode is enabled. If enabled, interactive and soft
 real-time applications are privileged and experience a lower latency,
 as explained in more detail in the description of how BFQ works.
 
-DO NOT enable this mode if you need full control on bandwidth
+DISABLE this mode if you need full control on bandwidth
 distribution. In fact, if it is enabled, then BFQ automatically
 increases the bandwidth share of privileged applications, as the main
 means to guarantee a lower latency to them.
 
+In addition, as already highlighted at the beginning of this document,
+DISABLE this mode if your only goal is to achieve a high throughput.
+In fact, privileging the I/O of some application over the rest may
+entail a lower throughput. To achieve the highest-possible throughput
+on a non-rotational device, setting slice_idle to 0 may be needed too
+(at the cost of giving up any strong guarantee on fairness and low
+latency).
+
 timeout_sync
 ------------
 
diff --git a/Documentation/devicetree/bindings/arm/firmware/linaro,optee-tz.txt b/Documentation/devicetree/bindings/arm/firmware/linaro,optee-tz.txt
new file mode 100644 (file)
index 0000000..d38834c
--- /dev/null
@@ -0,0 +1,31 @@
+OP-TEE Device Tree Bindings
+
+OP-TEE is a piece of software using hardware features to provide a Trusted
+Execution Environment. The security can be provided with ARM TrustZone, but
+also by virtualization or a separate chip.
+
+We're using "linaro" as the first part of the compatible property for
+the reference implementation maintained by Linaro.
+
+* OP-TEE based on ARM TrustZone required properties:
+
+- compatible     : should contain "linaro,optee-tz"
+
+- method         : The method of calling the OP-TEE Trusted OS. Permitted
+                   values are:
+
+                   "smc" : SMC #0, with the register assignments specified
+                          in drivers/tee/optee/optee_smc.h
+
+                   "hvc" : HVC #0, with the register assignments specified
+                          in drivers/tee/optee/optee_smc.h
+
+
+
+Example:
+       firmware {
+               optee {
+                       compatible = "linaro,optee-tz";
+                       method = "smc";
+               };
+       };
index cb0054ac7121e54a747f147844b3f698c380c0e1..cd977db7630c50a6e118e60edd96256efa138ac9 100644 (file)
@@ -7,6 +7,7 @@ Required Properties:
 
 - compatible: Should be one of:
        - "mediatek,mt2701-apmixedsys"
+       - "mediatek,mt6797-apmixedsys"
        - "mediatek,mt8135-apmixedsys"
        - "mediatek,mt8173-apmixedsys"
 - #clock-cells: Must be 1
index f6a916686f4c4a94515d703ebcca0506343a4ba9..047b11ae5f45c0a7e020a231a4e87ce656b3842e 100644 (file)
@@ -7,6 +7,7 @@ Required Properties:
 
 - compatible: Should be one of:
        - "mediatek,mt2701-imgsys", "syscon"
+       - "mediatek,mt6797-imgsys", "syscon"
        - "mediatek,mt8173-imgsys", "syscon"
 - #clock-cells: Must be 1
 
index 1620ec2a5a3f12872d828d18fa04e02a9eafd315..58d58e2006b83324502d3d39739ab6537552649b 100644 (file)
@@ -8,6 +8,7 @@ Required Properties:
 
 - compatible: Should be one of:
        - "mediatek,mt2701-infracfg", "syscon"
+       - "mediatek,mt6797-infracfg", "syscon"
        - "mediatek,mt8135-infracfg", "syscon"
        - "mediatek,mt8173-infracfg", "syscon"
 - #clock-cells: Must be 1
index 67dd2e473d25fbe7189d788f47edfb3f09d19dcd..70529e0b58e9a15927a552ada8106434c1627100 100644 (file)
@@ -7,6 +7,7 @@ Required Properties:
 
 - compatible: Should be one of:
        - "mediatek,mt2701-mmsys", "syscon"
+       - "mediatek,mt6797-mmsys", "syscon"
        - "mediatek,mt8173-mmsys", "syscon"
 - #clock-cells: Must be 1
 
index 9f2fe7860114d65cb1a07ed70a6ec3242b57303f..ec93ecbb9f3c2fb72bf461d8d57275d8c57ac79a 100644 (file)
@@ -7,6 +7,7 @@ Required Properties:
 
 - compatible: Should be one of:
        - "mediatek,mt2701-topckgen"
+       - "mediatek,mt6797-topckgen"
        - "mediatek,mt8135-topckgen"
        - "mediatek,mt8173-topckgen"
 - #clock-cells: Must be 1
index 2440f73450c365895a0ec62e6f87c21281d1b0ef..d150104f928a4f7c023a724a3e646eb11b49d83a 100644 (file)
@@ -7,6 +7,7 @@ Required Properties:
 
 - compatible: Should be one of:
        - "mediatek,mt2701-vdecsys", "syscon"
+       - "mediatek,mt6797-vdecsys", "syscon"
        - "mediatek,mt8173-vdecsys", "syscon"
 - #clock-cells: Must be 1
 
index 5bb2866a2b50acebabf714868386aa9223186542..8a93be643647d429c39ba3c978e6e1a02f94d1c4 100644 (file)
@@ -5,7 +5,8 @@ The Mediatek vencsys controller provides various clocks to the system.
 
 Required Properties:
 
-- compatible: Should be:
+- compatible: Should be one of:
+       - "mediatek,mt6797-vencsys", "syscon"
        - "mediatek,mt8173-vencsys", "syscon"
 - #clock-cells: Must be 1
 
index 87e9c47a89a399fc3d8ef30623697d58cd956741..53d7e50ed875ae0db438af18f9f3354c2548c705 100644 (file)
--- a/