aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2017-07-03 13:51:42 -0400
committerTakashi Iwai <tiwai@suse.de>2017-07-03 13:51:42 -0400
commit818a23e3882b1bf65d1719e407be04716e69a4d5 (patch)
tree6e4267b570541f779e7d85c11eb14312fa86fbb1
parenta178232ddab55048e347b43b697bfa5013ef819e (diff)
parentb821d298f8864dc3c3d42643812df43289159507 (diff)
Merge tag 'asoc-v4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Updates for v4.13 The big news with this release is the of-graph card, this provides a replacement for simple-card that is much more flexibile and scalable, allowing many more systems to use a generic sound card than was possible before: - The of-graph card, finally merged after a long and dedicated effort by Morimoto-san. - New widget types intended mainly for use with DSPs. - New drivers for Allwinner V3s SoCs, Ensonic ES8316, several classes of x86 machine, Rockchip PDM controllers, STM32 I2S and S/PDIF controllers and ZTE AUD96P22 CODECs.
-rw-r--r--Documentation/acpi/acpi-lid.txt16
-rw-r--r--Documentation/admin-guide/kernel-parameters.txt16
-rw-r--r--Documentation/admin-guide/pm/cpufreq.rst19
-rw-r--r--Documentation/admin-guide/pm/index.rst1
-rw-r--r--Documentation/admin-guide/pm/intel_pstate.rst755
-rw-r--r--Documentation/cpu-freq/intel-pstate.txt281
-rw-r--r--Documentation/devicetree/bindings/clock/sunxi-ccu.txt7
-rw-r--r--Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt8
-rw-r--r--Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.txt9
-rw-r--r--Documentation/devicetree/bindings/gpio/gpio-mvebu.txt6
-rw-r--r--Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt2
-rw-r--r--Documentation/devicetree/bindings/mfd/hisilicon,hi655x.txt6
-rw-r--r--Documentation/devicetree/bindings/mfd/stm32-timers.txt2
-rw-r--r--Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt2
-rw-r--r--Documentation/devicetree/bindings/net/dsa/b53.txt2
-rw-r--r--Documentation/devicetree/bindings/net/dsa/marvell.txt4
-rw-r--r--Documentation/devicetree/bindings/net/fsl-fec.txt4
-rw-r--r--Documentation/devicetree/bindings/net/smsc911x.txt1
-rw-r--r--Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt2
-rw-r--r--Documentation/devicetree/bindings/sound/audio-graph-card.txt129
-rw-r--r--Documentation/devicetree/bindings/sound/audio-graph-scu-card.txt122
-rw-r--r--Documentation/devicetree/bindings/sound/cs35l35.txt3
-rw-r--r--Documentation/devicetree/bindings/sound/nau8825.txt3
-rw-r--r--Documentation/devicetree/bindings/sound/renesas,rsnd.txt37
-rw-r--r--Documentation/devicetree/bindings/sound/rockchip,pdm.txt39
-rw-r--r--Documentation/devicetree/bindings/sound/rockchip-spdif.txt2
-rw-r--r--Documentation/devicetree/bindings/sound/samsung,odroid.txt15
-rw-r--r--Documentation/devicetree/bindings/sound/simple-scu-card.txt67
-rw-r--r--Documentation/devicetree/bindings/sound/st,stm32-i2s.txt62
-rw-r--r--Documentation/devicetree/bindings/sound/st,stm32-sai.txt41
-rw-r--r--Documentation/devicetree/bindings/sound/st,stm32-spdifrx.txt56
-rw-r--r--Documentation/devicetree/bindings/sound/sun4i-codec.txt11
-rw-r--r--Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt1
-rw-r--r--Documentation/devicetree/bindings/sound/zte,zx-aud96p22.txt24
-rw-r--r--Documentation/devicetree/bindings/usb/dwc2.txt1
-rw-r--r--Documentation/input/devices/edt-ft5x06.rst2
-rw-r--r--Documentation/networking/dpaa.txt194
-rw-r--r--Documentation/networking/scaling.txt2
-rw-r--r--Documentation/networking/tcp.txt31
-rw-r--r--Documentation/sound/soc/dapm.rst18
-rw-r--r--MAINTAINERS35
-rw-r--r--Makefile4
-rw-r--r--arch/arc/include/asm/processor.h2
-rw-r--r--arch/arc/mm/mmap.c2
-rw-r--r--arch/arm/Kconfig1
-rw-r--r--arch/arm/boot/compressed/efi-header.S5
-rw-r--r--arch/arm/boot/compressed/head.S17
-rw-r--r--arch/arm/boot/dts/am335x-sl50.dts8
-rw-r--r--arch/arm/boot/dts/bcm283x.dtsi5
-rw-r--r--arch/arm/boot/dts/imx6ul-14x14-evk.dts6
-rw-r--r--arch/arm/boot/dts/keystone-k2l-netcp.dtsi4
-rw-r--r--arch/arm/boot/dts/keystone-k2l.dtsi8
-rw-r--r--arch/arm/boot/dts/sunxi-h3-h5.dtsi7
-rw-r--r--arch/arm/boot/dts/versatile-pb.dts2
-rw-r--r--arch/arm/common/mcpm_entry.c6
-rw-r--r--arch/arm/include/asm/device.h3
-rw-r--r--arch/arm/include/asm/pgtable-nommu.h1
-rw-r--r--arch/arm/kernel/setup.c2
-rw-r--r--arch/arm/kvm/init.S5
-rw-r--r--arch/arm/mach-at91/Kconfig1
-rw-r--r--arch/arm/mach-davinci/pm.c7
-rw-r--r--arch/arm/mm/dma-mapping.c29
-rw-r--r--arch/arm/mm/mmap.c4
-rw-r--r--arch/arm/mm/mmu.c8
-rw-r--r--arch/arm64/Kconfig4
-rw-r--r--arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi5
-rw-r--r--arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi2
l---------arch/arm64/boot/dts/allwinner/sunxi-h3-h5.dtsi1
-rw-r--r--arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts78
-rw-r--r--arch/arm64/boot/dts/hisilicon/hi6220.dtsi31
-rw-r--r--arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi3
-rw-r--r--arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi3
-rw-r--r--arch/arm64/configs/defconfig10
-rw-r--r--arch/arm64/include/asm/acpi.h6
-rw-r--r--arch/arm64/include/asm/sysreg.h4
-rw-r--r--arch/arm64/kernel/pci.c4
-rw-r--r--arch/arm64/kernel/vdso.c5
-rw-r--r--arch/arm64/kernel/vdso/gettimeofday.S1
-rw-r--r--arch/arm64/kvm/hyp-init.S11
-rw-r--r--arch/arm64/kvm/vgic-sys-reg-v3.c10
-rw-r--r--arch/arm64/net/bpf_jit_comp.c7
-rw-r--r--arch/blackfin/include/asm/processor.h5
-rw-r--r--arch/c6x/include/asm/processor.h5
-rw-r--r--arch/cris/arch-v10/kernel/process.c8
-rw-r--r--arch/cris/arch-v32/kernel/process.c8
-rw-r--r--arch/cris/include/asm/processor.h2
-rw-r--r--arch/frv/include/asm/processor.h5
-rw-r--r--arch/frv/include/asm/timex.h6
-rw-r--r--arch/frv/kernel/process.c9
-rw-r--r--arch/frv/mm/elf-fdpic.c2
-rw-r--r--arch/h8300/include/asm/processor.h4
-rw-r--r--arch/h8300/kernel/process.c5
-rw-r--r--arch/hexagon/include/asm/processor.h3
-rw-r--r--arch/hexagon/kernel/process.c8
-rw-r--r--arch/hexagon/mm/uaccess.c5
-rw-r--r--arch/ia64/include/asm/processor.h17
-rw-r--r--arch/m32r/include/asm/processor.h2
-rw-r--r--arch/m32r/kernel/process.c8
-rw-r--r--arch/m68k/include/asm/processor.h2
-rw-r--r--arch/m68k/kernel/process.c14
-rw-r--r--arch/microblaze/include/asm/processor.h6
-rw-r--r--arch/microblaze/kernel/process.c17
-rw-r--r--arch/mips/boot/Makefile10
-rw-r--r--arch/mips/include/asm/highmem.h5
-rw-r--r--arch/mips/include/asm/kprobes.h3
-rw-r--r--arch/mips/include/asm/pgtable-32.h7
-rw-r--r--arch/mips/kernel/branch.c4
-rw-r--r--arch/mips/kernel/entry.S3
-rw-r--r--arch/mips/kernel/ftrace.c24
-rw-r--r--arch/mips/kernel/head.S2
-rw-r--r--arch/mips/kernel/perf_event_mipsxx.c6
-rw-r--r--arch/mips/kernel/pm-cps.c9
-rw-r--r--arch/mips/kernel/process.c1
-rw-r--r--arch/mips/kernel/traps.c2
-rw-r--r--arch/mips/kvm/tlb.c6
-rw-r--r--arch/mips/math-emu/dp_maddf.c5
-rw-r--r--arch/mips/math-emu/sp_maddf.c5
-rw-r--r--arch/mips/mm/dma-default.c23
-rw-r--r--arch/mips/mm/mmap.c2
-rw-r--r--arch/mips/mm/pgtable-32.c6
-rw-r--r--arch/mn10300/include/asm/processor.h5
-rw-r--r--arch/mn10300/kernel/process.c8
-rw-r--r--arch/nios2/include/asm/processor.h3
-rw-r--r--arch/openrisc/include/asm/processor.h5
-rw-r--r--arch/openrisc/kernel/process.c7
-rw-r--r--arch/parisc/include/asm/processor.h5
-rw-r--r--arch/parisc/kernel/process.c5
-rw-r--r--arch/parisc/kernel/sys_parisc.c15
-rw-r--r--arch/powerpc/Kconfig21
-rw-r--r--arch/powerpc/include/asm/book3s/64/hash-4k.h2
-rw-r--r--arch/powerpc/include/asm/bug.h2
-rw-r--r--arch/powerpc/include/asm/cputable.h3
-rw-r--r--arch/powerpc/include/asm/kprobes.h1
-rw-r--r--arch/powerpc/include/asm/processor.h31
-rw-r--r--arch/powerpc/include/asm/topology.h14
-rw-r--r--arch/powerpc/include/asm/uaccess.h8
-rw-r--r--arch/powerpc/include/asm/xive.h12
-rw-r--r--arch/powerpc/include/uapi/asm/cputable.h2
-rw-r--r--arch/powerpc/kernel/cputable.c3
-rw-r--r--arch/powerpc/kernel/dt_cpu_ftrs.c58
-rw-r--r--arch/powerpc/kernel/exceptions-64s.S11
-rw-r--r--arch/powerpc/kernel/kprobes.c17
-rw-r--r--arch/powerpc/kernel/process.c3
-rw-r--r--arch/powerpc/kernel/prom.c2
-rw-r--r--arch/powerpc/kernel/setup-common.c2
-rw-r--r--arch/powerpc/kernel/setup_64.c35
-rw-r--r--arch/powerpc/kernel/trace/ftrace_64_mprofile.S59
-rw-r--r--arch/powerpc/kvm/book3s_hv.c51
-rw-r--r--arch/powerpc/kvm/book3s_hv_interrupts.S12
-rw-r--r--arch/powerpc/kvm/book3s_hv_rmhandlers.S75
-rw-r--r--arch/powerpc/kvm/book3s_xive_template.c4
-rw-r--r--arch/powerpc/mm/hugetlbpage-radix.c2
-rw-r--r--arch/powerpc/mm/mmap.c4
-rw-r--r--arch/powerpc/mm/mmu_context_book3s64.c2
-rw-r--r--arch/powerpc/mm/slice.c2
-rw-r--r--arch/powerpc/perf/perf_regs.c3
-rw-r--r--arch/powerpc/perf/power9-pmu.c4
-rw-r--r--arch/powerpc/platforms/Kconfig11
-rw-r--r--arch/powerpc/platforms/cell/spu_base.c4
-rw-r--r--arch/powerpc/platforms/cell/spufs/coredump.c2
-rw-r--r--arch/powerpc/platforms/powernv/npu-dma.c102
-rw-r--r--arch/powerpc/platforms/powernv/subcore.c8
-rw-r--r--arch/powerpc/platforms/pseries/hotplug-memory.c2
-rw-r--r--arch/powerpc/sysdev/simple_gpio.c3
-rw-r--r--arch/powerpc/sysdev/xive/common.c2
-rw-r--r--arch/s390/Kconfig3
-rw-r--r--arch/s390/configs/default_defconfig39
-rw-r--r--arch/s390/configs/gcov_defconfig28
-rw-r--r--arch/s390/configs/performance_defconfig27
-rw-r--r--arch/s390/configs/zfcpdump_defconfig6
-rw-r--r--arch/s390/defconfig8
-rw-r--r--arch/s390/include/asm/kvm_host.h1
-rw-r--r--arch/s390/include/asm/processor.h5
-rw-r--r--arch/s390/kernel/entry.S19
-rw-r--r--arch/s390/kernel/ipl.c7
-rw-r--r--arch/s390/kernel/process.c25
-rw-r--r--arch/s390/kvm/gaccess.c15
-rw-r--r--arch/s390/kvm/interrupt.c4
-rw-r--r--arch/s390/kvm/kvm-s390.c2
-rw-r--r--arch/s390/mm/mmap.c4
-rw-r--r--arch/score/include/asm/processor.h1
-rw-r--r--arch/score/kernel/process.c5
-rw-r--r--arch/sh/mm/mmap.c4
-rw-r--r--arch/sparc/Kconfig15
-rw-r--r--arch/sparc/include/asm/mmu_64.h2
-rw-r--r--arch/sparc/include/asm/mmu_context_64.h32
-rw-r--r--arch/sparc/include/asm/pil.h1
-rw-r--r--arch/sparc/include/asm/processor_32.h3
-rw-r--r--arch/sparc/include/asm/processor_64.h2
-rw-r--r--arch/sparc/include/asm/vio.h1
-rw-r--r--arch/sparc/kernel/ds.c2
-rw-r--r--arch/sparc/kernel/irq_64.c17
-rw-r--r--arch/sparc/kernel/kernel.h1
-rw-r--r--arch/sparc/kernel/process_32.c8
-rw-r--r--arch/sparc/kernel/process_64.c19
-rw-r--r--arch/sparc/kernel/smp_64.c31
-rw-r--r--arch/sparc/kernel/sys_sparc_64.c4
-rw-r--r--arch/sparc/kernel/tsb.S11
-rw-r--r--arch/sparc/kernel/ttable_64.S2
-rw-r--r--arch/sparc/kernel/vio.c68
-rw-r--r--arch/sparc/lib/Makefile1
-rw-r--r--arch/sparc/lib/multi3.S35
-rw-r--r--arch/sparc/mm/hugetlbpage.c2
-rw-r--r--arch/sparc/mm/init_64.c89
-rw-r--r--arch/sparc/mm/tsb.c7
-rw-r--r--arch/sparc/mm/ultra.S5
-rw-r--r--arch/tile/include/asm/processor.h7
-rw-r--r--arch/tile/mm/hugetlbpage.c2
-rw-r--r--arch/um/include/asm/processor-generic.h2
-rw-r--r--arch/um/kernel/um_arch.c6
-rw-r--r--arch/x86/Kconfig6
-rw-r--r--arch/x86/Makefile2
-rw-r--r--arch/x86/boot/compressed/Makefile2
-rw-r--r--arch/x86/boot/compressed/kaslr.c3
-rw-r--r--arch/x86/boot/compressed/misc.c6
-rw-r--r--arch/x86/boot/compressed/misc.h2
-rw-r--r--arch/x86/entry/entry_32.S30
-rw-r--r--arch/x86/entry/entry_64.S11
-rw-r--r--arch/x86/events/intel/core.c4
-rw-r--r--arch/x86/events/intel/uncore.c2
-rw-r--r--arch/x86/include/asm/extable.h1
-rw-r--r--arch/x86/include/asm/kvm_emulate.h1
-rw-r--r--arch/x86/include/asm/mce.h1
-rw-r--r--arch/x86/include/asm/mshyperv.h3
-rw-r--r--arch/x86/include/asm/processor.h2
-rw-r--r--arch/x86/kernel/alternative.c9
-rw-r--r--arch/x86/kernel/cpu/cyrix.c1
-rw-r--r--arch/x86/kernel/cpu/intel_rdt_rdtgroup.c4
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce.c13
-rw-r--r--arch/x86/kernel/cpu/microcode/amd.c16
-rw-r--r--arch/x86/kernel/cpu/microcode/intel.c3
-rw-r--r--arch/x86/kernel/ftrace.c20
-rw-r--r--arch/x86/kernel/kprobes/core.c9
-rw-r--r--arch/x86/kernel/kvm.c2
-rw-r--r--arch/x86/kernel/process.c11
-rw-r--r--arch/x86/kernel/process_32.c2
-rw-r--r--arch/x86/kernel/setup.c4
-rw-r--r--arch/x86/kernel/sys_x86_64.c4
-rw-r--r--arch/x86/kernel/tboot.c2
-rw-r--r--arch/x86/kernel/traps.c2
-rw-r--r--arch/x86/kernel/unwind_frame.c49
-rw-r--r--arch/x86/kvm/cpuid.c20
-rw-r--r--arch/x86/kvm/emulate.c1
-rw-r--r--arch/x86/kvm/lapic.c5
-rw-r--r--arch/x86/kvm/mmu.c7
-rw-r--r--arch/x86/kvm/mmu.h1
-rw-r--r--arch/x86/kvm/svm.c26
-rw-r--r--arch/x86/kvm/vmx.c149
-rw-r--r--arch/x86/kvm/x86.c72
-rw-r--r--arch/x86/mm/extable.c3
-rw-r--r--arch/x86/mm/hugetlbpage.c2
-rw-r--r--arch/x86/mm/init.c6
-rw-r--r--arch/x86/mm/init_64.c8
-rw-r--r--arch/x86/mm/pageattr.c2
-rw-r--r--arch/x86/platform/efi/efi.c6
-rw-r--r--arch/x86/platform/efi/efi_64.c79
-rw-r--r--arch/x86/platform/efi/quirks.c3
-rw-r--r--arch/xtensa/include/asm/irq.h3
-rw-r--r--arch/xtensa/include/asm/processor.h2
-rw-r--r--arch/xtensa/kernel/irq.c5
-rw-r--r--arch/xtensa/kernel/setup.c3
-rw-r--r--arch/xtensa/kernel/syscall.c2
-rw-r--r--arch/xtensa/kernel/vmlinux.lds.S6
-rw-r--r--arch/xtensa/platforms/iss/simdisk.c3
-rw-r--r--arch/xtensa/platforms/xtfpga/include/platform/hardware.h6
-rw-r--r--arch/xtensa/platforms/xtfpga/setup.c10
-rw-r--r--block/bfq-cgroup.c116
-rw-r--r--block/bfq-iosched.c2
-rw-r--r--block/bfq-iosched.h23
-rw-r--r--block/bio-integrity.c3
-rw-r--r--block/bio.c12
-rw-r--r--block/blk-cgroup.c2
-rw-r--r--block/blk-core.c10
-rw-r--r--block/blk-mq-sched.c58
-rw-r--r--block/blk-mq-sched.h9
-rw-r--r--block/blk-mq.c70
-rw-r--r--block/blk-sysfs.c42
-rw-r--r--block/blk-throttle.c184
-rw-r--r--block/blk.h2
-rw-r--r--block/cfq-iosched.c17
-rw-r--r--block/partition-generic.c4
-rw-r--r--block/partitions/msdos.c2
-rw-r--r--crypto/asymmetric_keys/public_key.c2
-rw-r--r--crypto/asymmetric_keys/verify_pefile.c4
-rw-r--r--crypto/asymmetric_keys/x509_cert_parser.c1
-rw-r--r--crypto/drbg.c5
-rw-r--r--crypto/gcm.c6
-rw-r--r--crypto/skcipher.c40
-rw-r--r--drivers/acpi/acpica/tbutils.c38
-rw-r--r--drivers/acpi/acpica/utresrc.c9
-rw-r--r--drivers/acpi/arm64/iort.c22
-rw-r--r--drivers/acpi/battery.c2
-rw-r--r--drivers/acpi/button.c16
-rw-r--r--drivers/acpi/device_pm.c3
-rw-r--r--drivers/acpi/nfit/mce.c2
-rw-r--r--drivers/acpi/scan.c71
-rw-r--r--drivers/acpi/sleep.c28
-rw-r--r--drivers/acpi/sysfs.c7
-rw-r--r--drivers/ata/ahci.c38
-rw-r--r--drivers/ata/libahci_platform.c5
-rw-r--r--drivers/ata/libata-core.c2
-rw-r--r--drivers/ata/sata_mv.c13
-rw-r--r--drivers/ata/sata_rcar.c15
-rw-r--r--drivers/base/power/main.c5
-rw-r--r--drivers/base/power/wakeup.c29
-rw-r--r--drivers/block/loop.c3
-rw-r--r--drivers/block/nbd.c15
-rw-r--r--drivers/block/rbd.c2
-rw-r--r--drivers/block/xen-blkback/blkback.c26
-rw-r--r--drivers/block/xen-blkback/common.h26
-rw-r--r--drivers/block/xen-blkback/xenbus.c15
-rw-r--r--drivers/char/mem.c2
-rw-r--r--drivers/char/pcmcia/cm4040_cs.c6
-rw-r--r--drivers/char/random.c51
-rw-r--r--drivers/clk/meson/Kconfig1
-rw-r--r--drivers/clk/sunxi-ng/Kconfig1
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun50i-a64.h4
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun5i.c2
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun6i-a31.c2
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun8i-h3.h4
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun8i-v3s.c2
-rw-r--r--drivers/clocksource/arm_arch_timer.c4
-rw-r--r--drivers/clocksource/cadence_ttc_timer.c1
-rw-r--r--drivers/clocksource/timer-sun5i.c1
-rw-r--r--drivers/cpufreq/Kconfig.arm9
-rw-r--r--drivers/cpufreq/Makefile2
-rw-r--r--drivers/cpufreq/cpufreq.c1
-rw-r--r--drivers/cpufreq/cpufreq_conservative.c4
-rw-r--r--drivers/cpufreq/intel_pstate.c5
-rw-r--r--drivers/cpufreq/kirkwood-cpufreq.c19
-rw-r--r--drivers/cpuidle/dt_idle_states.c4
-rw-r--r--drivers/dax/super.c9
-rw-r--r--drivers/devfreq/event/exynos-nocp.c6
-rw-r--r--drivers/devfreq/event/exynos-ppmu.c8
-rw-r--r--drivers/dma/ep93xx_dma.c39
-rw-r--r--drivers/dma/mv_xor_v2.c109
-rw-r--r--drivers/dma/pl330.c3
-rw-r--r--drivers/dma/sh/rcar-dmac.c3
-rw-r--r--drivers/dma/sh/usb-dmac.c2
-rw-r--r--drivers/firmware/dmi-id.c2
-rw-r--r--drivers/firmware/dmi_scan.c50
-rw-r--r--drivers/firmware/efi/efi-bgrt.c27
-rw-r--r--drivers/firmware/efi/efi-pstore.c17
-rw-r--r--drivers/firmware/efi/libstub/secureboot.c4
-rw-r--r--drivers/firmware/google/vpd.c8
-rw-r--r--drivers/gpio/gpio-aspeed.c3
-rw-r--r--drivers/gpio/gpio-crystalcove.c54
-rw-r--r--drivers/gpio/gpio-mvebu.c15
-rw-r--r--drivers/gpio/gpiolib-acpi.c2
-rw-r--r--drivers/gpio/gpiolib.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c24
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c10
-rw-r--r--drivers/gpu/drm/amd/amdgpu/atombios_crtc.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/ci_dpm.c6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v10_0.c7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v11_0.c7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v6_0.c7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v8_0.c7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c15
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c15
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c15
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c16
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vce_v3_0.c95
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c32
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c2
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c20
-rw-r--r--drivers/gpu/drm/bridge/adv7511/adv7511_audio.c22
-rw-r--r--drivers/gpu/drm/bridge/synopsys/Kconfig1
-rw-r--r--drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c21
-rw-r--r--drivers/gpu/drm/drm_atomic_helper.c11
-rw-r--r--drivers/gpu/drm/drm_connector.c38
-rw-r--r--drivers/gpu/drm/drm_dp_helper.c83
-rw-r--r--drivers/gpu/drm/drm_drv.c7
-rw-r--r--drivers/gpu/drm/drm_plane.c5
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_gem.h3
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c2
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_drv.c8
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_drv.h5
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_dsi.c26
-rw-r--r--drivers/gpu/drm/gma500/psb_intel_lvds.c18
-rw-r--r--drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c2
-rw-r--r--drivers/gpu/drm/i915/gvt/execlist.c30
-rw-r--r--drivers/gpu/drm/i915/gvt/handlers.c30
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c6
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c13
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h13
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c67
-rw-r--r--drivers/gpu/drm/i915/i915_gem_execbuffer.c17
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c108
-rw-r--r--drivers/gpu/drm/i915/i915_gem_request.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_shrinker.c5
-rw-r--r--drivers/gpu/drm/i915/i915_gem_tiling.c2
-rw-r--r--drivers/gpu/drm/i915/i915_guc_submission.c4
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c15
-rw-r--r--drivers/gpu/drm/i915/i915_pci.c3
-rw-r--r--drivers/gpu/drm/i915/i915_pvinfo.h8
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h2
-rw-r--r--drivers/gpu/drm/i915/i915_vgpu.c10
-rw-r--r--drivers/gpu/drm/i915/i915_vma.c5
-rw-r--r--drivers/gpu/drm/i915/intel_display.c75
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c45
-rw-r--r--drivers/gpu/drm/i915/intel_dp_aux_backlight.c2
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c5
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h13
-rw-r--r--drivers/gpu/drm/i915/intel_engine_cs.c20
-rw-r--r--drivers/gpu/drm/i915/intel_fbc.c19
-rw-r--r--drivers/gpu/drm/i915/intel_lpe_audio.c36
-rw-r--r--drivers/gpu/drm/i915/intel_lrc.c8
-rw-r--r--drivers/gpu/drm/i915/intel_lspcon.c2
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c45
-rw-r--r--drivers/gpu/drm/i915/intel_psr.c5
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c41
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.h19
-rw-r--r--drivers/gpu/drm/i915/intel_sprite.c21
-rw-r--r--drivers/gpu/drm/i915/intel_uc.h2
-rw-r--r--drivers/gpu/drm/i915/selftests/i915_gem_context.c8
-rw-r--r--drivers/gpu/drm/imx/imx-ldb.c2
-rw-r--r--drivers/gpu/drm/mediatek/mtk_dsi.c15
-rw-r--r--drivers/gpu/drm/mediatek/mtk_hdmi.c2
-rw-r--r--drivers/gpu/drm/meson/meson_drv.c20
-rw-r--r--drivers/gpu/drm/mgag200/mgag200_mode.c9
-rw-r--r--drivers/gpu/drm/msm/Kconfig1
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_mdss.c2
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c9
-rw-r--r--drivers/gpu/drm/msm/msm_drv.c1
-rw-r--r--drivers/gpu/drm/msm/msm_drv.h1
-rw-r--r--drivers/gpu/drm/msm/msm_fence.c10
-rw-r--r--drivers/gpu/drm/msm/msm_gem.c6
-rw-r--r--drivers/gpu/drm/msm/msm_gem_prime.c7
-rw-r--r--drivers/gpu/drm/msm/msm_gem_submit.c14
-rw-r--r--drivers/gpu/drm/msm/msm_gpu.c4
-rw-r--r--drivers/gpu/drm/mxsfb/mxsfb_crtc.c42
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h1
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_drm.c38
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_drv.h3
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_vga.c13
-rw-r--r--drivers/gpu/drm/nouveau/nv50_display.c3
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c7
-rw-r--r--drivers/gpu/drm/qxl/qxl_display.c4
-rw-r--r--drivers/gpu/drm/radeon/ci_dpm.c6
-rw-r--r--drivers/gpu/drm/radeon/cik.c11
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c11
-rw-r--r--drivers/gpu/drm/radeon/r600.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon_combios.c7
-rw-r--r--drivers/gpu/drm/radeon/radeon_device.c4
-rw-r--r--drivers/gpu/drm/radeon/radeon_kms.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon_uvd.c2
-rw-r--r--drivers/gpu/drm/radeon/si.c11
-rw-r--r--drivers/gpu/drm/rockchip/analogix_dp-rockchip.c12
-rw-r--r--drivers/gpu/drm/rockchip/cdn-dp-core.c9
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_drm_vop.c8
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_drm_vop.h3
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_vop_reg.c2
-rw-r--r--drivers/gpu/drm/tegra/drm.c22
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c1
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_drv.h4
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c2
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_kms.c115
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_kms.h15
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c27
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_surface.c23
-rw-r--r--drivers/gpu/host1x/dev.c2
-rw-r--r--drivers/gpu/ipu-v3/ipu-common.c15
-rw-r--r--drivers/gpu/ipu-v3/ipu-pre.c13
-rw-r--r--drivers/hid/Kconfig6
-rw-r--r--drivers/hid/hid-asus.c12
-rw-r--r--drivers/hid/hid-core.c285
-rw-r--r--drivers/hid/hid-elecom.c62
-rw-r--r--drivers/hid/hid-ids.h6
-rw-r--r--drivers/hid/i2c-hid/i2c-hid.c13
-rw-r--r--drivers/hid/usbhid/hid-quirks.c1
-rw-r--r--drivers/hid/wacom_wac.c45
-rw-r--r--drivers/hsi/clients/ssi_protocol.c2
-rw-r--r--drivers/hwmon/Kconfig1
-rw-r--r--drivers/hwmon/aspeed-pwm-tacho.c65
-rw-r--r--drivers/i2c/busses/i2c-designware-platdrv.c2
-rw-r--r--drivers/i2c/busses/i2c-imx.c8
-rw-r--r--drivers/i2c/busses/i2c-ismt.c2
-rw-r--r--drivers/i2c/busses/i2c-rcar.c2
-rw-r--r--drivers/i2c/busses/i2c-tiny-usb.c25
-rw-r--r--drivers/iio/adc/bcm_iproc_adc.c8
-rw-r--r--drivers/iio/adc/max9611.c10
-rw-r--r--drivers/iio/adc/meson_saradc.c4
-rw-r--r--drivers/iio/adc/mxs-lradc-adc.c7
-rw-r--r--drivers/iio/adc/sun4i-gpadc-iio.c38
-rw-r--r--drivers/iio/adc/ti_am335x_adc.c2
-rw-r--r--drivers/iio/buffer/industrialio-buffer-dma.c1
-rw-r--r--drivers/iio/buffer/industrialio-buffer-dmaengine.c1
-rw-r--r--drivers/iio/imu/inv_mpu6050/inv_mpu_core.c39
-rw-r--r--drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h3
-rw-r--r--drivers/iio/industrialio-trigger.c3
-rw-r--r--drivers/iio/light/ltr501.c4
-rw-r--r--drivers/iio/proximity/as3935.c14
-rw-r--r--drivers/infiniband/core/addr.c10
-rw-r--r--drivers/infiniband/core/cm.c4
-rw-r--r--drivers/infiniband/core/cma.c13
-rw-r--r--drivers/infiniband/core/core_priv.h10
-rw-r--r--drivers/infiniband/core/netlink.c2
-rw-r--r--drivers/infiniband/core/sa_query.c6
-rw-r--r--drivers/infiniband/core/umem.c2
-rw-r--r--drivers/infiniband/core/umem_odp.c6
-rw-r--r--drivers/infiniband/core/uverbs_marshall.c8
-rw-r--r--drivers/infiniband/hw/bnxt_re/bnxt_re.h4
-rw-r--r--drivers/infiniband/hw/bnxt_re/ib_verbs.c471
-rw-r--r--drivers/infiniband/hw/bnxt_re/ib_verbs.h22
-rw-r--r--drivers/infiniband/hw/bnxt_re/main.c4
-rw-r--r--drivers/infiniband/hw/bnxt_re/qplib_fp.c384
-rw-r--r--drivers/infiniband/hw/bnxt_re/qplib_fp.h18
-rw-r--r--drivers/infiniband/hw/bnxt_re/qplib_rcfw.c314
-rw-r--r--drivers/infiniband/hw/bnxt_re/qplib_rcfw.h61
-rw-r--r--drivers/infiniband/hw/bnxt_re/qplib_res.h4
-rw-r--r--drivers/infiniband/hw/bnxt_re/qplib_sp.c333
-rw-r--r--drivers/infiniband/hw/bnxt_re/qplib_sp.h2
-rw-r--r--drivers/infiniband/hw/cxgb4/cm.c9
-rw-r--r--drivers/infiniband/hw/cxgb4/device.c12
-rw-r--r--drivers/infiniband/hw/hfi1/chip.c67
-rw-r--r--drivers/infiniband/hw/hfi1/chip_registers.h2
-rw-r--r--drivers/infiniband/hw/hfi1/hfi.h11
-rw-r--r--drivers/infiniband/hw/hfi1/intr.c3
-rw-r--r--drivers/infiniband/hw/hfi1/pcie.c4
-rw-r--r--drivers/infiniband/hw/hfi1/rc.c5
-rw-r--r--drivers/infiniband/hw/hfi1/sysfs.c3
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_cm.c3
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_ctrl.c12
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_main.c20
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_osdep.h1
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_type.h2
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_utils.c17
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_virtchnl.c5
-rw-r--r--drivers/infiniband/hw/mlx4/mad.c1
-rw-r--r--drivers/infiniband/hw/mlx5/main.c20
-rw-r--r--drivers/infiniband/hw/mlx5/mlx5_ib.h3
-rw-r--r--drivers/infiniband/hw/mlx5/qp.c59
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.c3
-rw-r--r--drivers/infiniband/hw/qedr/qedr.h5
-rw-r--r--drivers/infiniband/hw/qedr/qedr_cm.c10
-rw-r--r--drivers/infiniband/hw/qedr/verbs.c68
-rw-r--r--drivers/infiniband/hw/qib/qib_rc.c4
-rw-r--r--drivers/infiniband/sw/rxe/rxe.h5
-rw-r--r--drivers/infiniband/sw/rxe/rxe_verbs.c9
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_ethtool.c2
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_ib.c1
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c17
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_vlan.c11
-rw-r--r--drivers/infiniband/ulp/srp/ib_srp.c4
-rw-r--r--drivers/input/keyboard/tm2-touchkey.c2
-rw-r--r--drivers/input/misc/axp20x-pek.c44
-rw-r--r--drivers/input/misc/soc_button_array.c20
-rw-r--r--drivers/input/mouse/elan_i2c_i2c.c30
-rw-r--r--drivers/input/mouse/elantech.c16
-rw-r--r--drivers/input/mouse/synaptics.c37
-rw-r--r--drivers/input/rmi4/rmi_f03.c2
-rw-r--r--drivers/input/rmi4/rmi_f54.c17
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h7
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c1
-rw-r--r--drivers/input/touchscreen/edt-ft5x06.c2
-rw-r--r--drivers/input/touchscreen/silead.c3
-rw-r--r--drivers/iommu/amd_iommu.c6
-rw-r--r--drivers/iommu/of_iommu.c7
-rw-r--r--drivers/irqchip/irq-mips-gic.c6
-rw-r--r--drivers/irqchip/irq-xtensa-mx.c2
-rw-r--r--drivers/irqchip/irq-xtensa-pic.c2
-rw-r--r--drivers/isdn/i4l/isdn_ppp.c2
-rw-r--r--drivers/isdn/mISDN/stack.c2
-rw-r--r--drivers/leds/leds-bcm6328.c4
-rw-r--r--drivers/leds/leds-pca955x.c2
-rw-r--r--drivers/leds/trigger/ledtrig-heartbeat.c31
-rw-r--r--drivers/md/bitmap.c8
-rw-r--r--drivers/md/dm-bufio.c2
-rw-r--r--drivers/md/dm-integrity.c42
-rw-r--r--drivers/md/dm-io.c4
-rw-r--r--drivers/md/dm-ioctl.c5
-rw-r--r--drivers/md/dm-raid.c17
-rw-r--r--drivers/md/dm-raid1.c23
-rw-r--r--drivers/md/dm-snap-persistent.c3
-rw-r--r--drivers/md/dm-thin.c26
-rw-r--r--drivers/md/dm-verity-target.c4
-rw-r--r--drivers/md/dm.c2
-rw-r--r--drivers/md/md-cluster.c4
-rw-r--r--drivers/md/md.c18
-rw-r--r--drivers/md/md.h1
-rw-r--r--drivers/md/raid1.c2
-rw-r--r--drivers/md/raid10.c3
-rw-r--r--drivers/md/raid5-cache.c4
-rw-r--r--drivers/md/raid5-ppl.c4
-rw-r--r--drivers/md/raid5.c21
-rw-r--r--drivers/media/Kconfig6
-rw-r--r--drivers/media/Makefile4
-rw-r--r--drivers/media/cec/Kconfig15
-rw-r--r--drivers/media/cec/Makefile2
-rw-r--r--drivers/media/cec/cec-adap.c2
-rw-r--r--drivers/media/cec/cec-api.c8
-rw-r--r--drivers/media/cec/cec-core.c8
-rw-r--r--drivers/media/i2c/Kconfig9
-rw-r--r--drivers/media/i2c/tc358743.c2
-rw-r--r--drivers/media/platform/Kconfig10
-rw-r--r--drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c8
-rw-r--r--drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c8
-rw-r--r--drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c8
-rw-r--r--drivers/media/platform/vivid/Kconfig3
-rw-r--r--drivers/media/rc/rc-ir-raw.c13
-rw-r--r--drivers/media/rc/sir_ir.c6
-rw-r--r--drivers/media/usb/pulse8-cec/Kconfig3
-rw-r--r--drivers/media/usb/rainshadow-cec/Kconfig3
-rw-r--r--drivers/media/usb/rainshadow-cec/rainshadow-cec.c3
-rw-r--r--drivers/media/v4l2-core/videobuf2-core.c2
-rw-r--r--drivers/memory/atmel-ebi.c2
-rw-r--r--drivers/mfd/arizona-core.c3
-rw-r--r--drivers/misc/cxl/context.c6
-rw-r--r--drivers/misc/cxl/cxl.h18
-rw-r--r--drivers/misc/cxl/fault.c23
-rw-r--r--drivers/misc/cxl/file.c7
-rw-r--r--drivers/misc/cxl/main.c17
-rw-r--r--drivers/misc/cxl/native.c43
-rw-r--r--drivers/misc/cxl/pci.c11
-rw-r--r--drivers/misc/mei/bus.c4
-rw-r--r--drivers/misc/sgi-xp/xp.h12
-rw-r--r--drivers/misc/sgi-xp/xp_main.c36
-rw-r--r--drivers/mmc/core/pwrseq_simple.c7
-rw-r--r--drivers/mmc/host/cavium-octeon.c15
-rw-r--r--drivers/mmc/host/cavium-thunderx.c6
-rw-r--r--drivers/mmc/host/cavium.c25
-rw-r--r--drivers/mmc/host/meson-gx-mmc.c9
-rw-r--r--drivers/mmc/host/sdhci-iproc.c3
-rw-r--r--drivers/mmc/host/sdhci-xenon-phy.c14
-rw-r--r--drivers/mmc/host/sdhci-xenon.c6
-rw-r--r--drivers/mmc/host/sdhci-xenon.h1
-rw-r--r--drivers/mtd/nand/nand_base.c46
-rw-r--r--drivers/mtd/nand/nand_ids.c1
-rw-r--r--drivers/mtd/nand/nand_samsung.c3
-rw-r--r--drivers/mtd/nand/tango_nand.c23
-rw-r--r--drivers/net/arcnet/arcnet.c7
-rw-r--r--drivers/net/arcnet/capmode.c2
-rw-r--r--drivers/net/arcnet/com20020-pci.c6
-rw-r--r--drivers/net/arcnet/com20020.c2
-rw-r--r--drivers/net/bonding/bond_3ad.c29
-rw-r--r--drivers/net/bonding/bond_main.c22
-rw-r--r--drivers/net/caif/caif_hsi.c2
-rw-r--r--drivers/net/caif/caif_serial.c2
-rw-r--r--drivers/net/caif/caif_spi.c2
-rw-r--r--drivers/net/caif/caif_virtio.c2
-rw-r--r--drivers/net/can/dev.c3
-rw-r--r--drivers/net/can/peak_canfd/peak_canfd.c2
-rw-r--r--drivers/net/can/slcan.c7
-rw-r--r--drivers/net/can/usb/gs_usb.c2
-rw-r--r--drivers/net/can/usb/peak_usb/pcan_usb_core.c4
-rw-r--r--drivers/net/can/vcan.c4
-rw-r--r--drivers/net/can/vxcan.c4
-rw-r--r--drivers/net/dsa/mv88e6xxx/global2.h6
-rw-r--r--drivers/net/dummy.c4
-rw-r--r--drivers/net/ethernet/8390/ax88796.c7
-rw-r--r--drivers/net/ethernet/amazon/ena/ena_com.c35
-rw-r--r--drivers/net/ethernet/amazon/ena/ena_ethtool.c2
-rw-r--r--drivers/net/ethernet/amazon/ena/ena_netdev.c179
-rw-r--r--drivers/net/ethernet/amazon/ena/ena_netdev.h18
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-desc.c5
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h3
-rw-r--r--drivers/net/ethernet/atheros/atlx/atl2.c8
-rw-r--r--drivers/net/ethernet/broadcom/bcmsysport.c7
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c21
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c15
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h1
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c61
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.h6
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c35
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_hw.c9
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4fw_version.h6
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c4
-rw-r--r--drivers/net/ethernet/ethoc.c3
-rw-r--r--drivers/net/ethernet/freescale/dpaa/dpaa_eth.c2
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c16
-rw-r--r--drivers/net/ethernet/freescale/fman/Kconfig1
-rw-r--r--drivers/net/ethernet/freescale/fman/mac.c2
-rw-r--r--drivers/net/ethernet/freescale/fsl_pq_mdio.c9
-rw-r--r--drivers/net/ethernet/hisilicon/hns/hns_ethtool.c16
-rw-r--r--drivers/net/ethernet/ibm/emac/core.c67
-rw-r--r--drivers/net/ethernet/ibm/ibmvnic.c8
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e.h1
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_ethtool.c4
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_main.c43
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_txrx.c7
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c2
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40e_txrx.c3
-rw-r--r--drivers/net/ethernet/marvell/mvpp2.c76
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_ethtool.c5
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mcg.c15
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/qp.c19
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/resource_tracker.c16
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/cmd.c41
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en.h8
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c8
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_main.c3
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_rep.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_rx.c8
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c45
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_stats.h11
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_tc.c61
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/eq.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c77
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/fs_core.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/health.c13
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/main.c34
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c3
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_debug.c2
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_main.c3
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic.h26
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c2
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c2
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c2
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c2
-rw-r--r--drivers/net/ethernet/qualcomm/emac/emac-mac.c2
-rw-r--r--drivers/net/ethernet/qualcomm/emac/emac-phy.c75
-rw-r--r--drivers/net/ethernet/qualcomm/emac/emac.c22
-rw-r--r--drivers/net/ethernet/renesas/ravb_main.c24
-rw-r--r--drivers/net/ethernet/rocker/rocker_ofdpa.c2
-rw-r--r--drivers/net/ethernet/sfc/ef10.c15
-rw-r--r--drivers/net/ethernet/sfc/ef10_sriov.c2
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c6
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c11
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_main.c52
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h3
-rw-r--r--drivers/net/ethernet/ti/cpsw-common.c2
-rw-r--r--drivers/net/geneve.c12
-rw-r--r--drivers/net/gtp.c4
-rw-r--r--drivers/net/hamradio/6pack.c2
-rw-r--r--drivers/net/hamradio/bpqether.c2
-rw-r--r--drivers/net/hamradio/hdlcdrv.c2
-rw-r--r--drivers/net/hyperv/hyperv_net.h5
-rw-r--r--drivers/net/hyperv/netvsc_drv.c58
-rw-r--r--drivers/net/hyperv/rndis_filter.c30
-rw-r--r--drivers/net/ifb.c4
-rw-r--r--drivers/net/ipvlan/ipvlan_main.c2
-rw-r--r--drivers/net/loopback.c4
-rw-r--r--drivers/net/macsec.c4
-rw-r--r--drivers/net/macvlan.c87
-rw-r--r--drivers/net/netconsole.c2
-rw-r--r--drivers/net/nlmon.c2
-rw-r--r--drivers/net/phy/Kconfig3
-rw-r--r--drivers/net/phy/dp83640.c2
-rw-r--r--drivers/net/phy/marvell.c68
-rw-r--r--drivers/net/phy/mdio_bus.c13
-rw-r--r--drivers/net/phy/micrel.c44
-rw-r--r--drivers/net/phy/phy.c4
-rw-r--r--drivers/net/slip/slip.c7
-rw-r--r--drivers/net/team/team.c4
-rw-r--r--drivers/net/tun.c4
-rw-r--r--drivers/net/usb/ax88179_178a.c16
-rw-r--r--drivers/net/usb/cdc-phonet.c2
-rw-r--r--drivers/net/usb/cdc_ether.c31
-rw-r--r--drivers/net/usb/qmi_wwan.c6
-rw-r--r--drivers/net/usb/r8152.c2
-rw-r--r--drivers/net/usb/smsc95xx.c13
-rw-r--r--drivers/net/veth.c8
-rw-r--r--drivers/net/virtio_net.c7
-rw-r--r--drivers/net/vrf.c38
-rw-r--r--drivers/net/vsockmon.c2
-rw-r--r--drivers/net/vxlan.c41
-rw-r--r--drivers/net/wan/dlci.c2
-rw-r--r--drivers/net/wan/hdlc_fr.c2
-rw-r--r--drivers/net/wan/lapbether.c2
-rw-r--r--drivers/net/wireless/ath/ath6kl/main.c2
-rw-r--r--drivers/net/wireless/ath/wcn36xx/main.c2
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c1
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c3
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c35
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h4
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c2
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c17
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c20
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c9
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-7000.c4
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-8000.c4
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-prph.h1
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rs.h5
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h3
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/fw-dbg.c12
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c2
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mvm.h6
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/ops.c32
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/rs.c46
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/rs.h15
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/sta.c26
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/sta.h2
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/tt.c8
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/tx.c12
-rw-r--r--drivers/net/wireless/intel/iwlwifi/pcie/trans.c6
-rw-r--r--drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c9
-rw-r--r--drivers/net/wireless/intersil/hostap/hostap_main.c2
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c2
-rw-r--r--drivers/net/wireless/marvell/mwifiex/main.c2
-rw-r--r--drivers/net/xen-netback/common.h1
-rw-r--r--drivers/net/xen-netback/interface.c6
-rw-r--r--drivers/net/xen-netback/netback.c6
-rw-r--r--drivers/ntb/hw/intel/ntb_hw_intel.c2
-rw-r--r--drivers/ntb/ntb_transport.c58
-rw-r--r--drivers/ntb/test/ntb_perf.c4
-rw-r--r--drivers/nvme/host/core.c86
-rw-r--r--drivers/nvme/host/fc.c165
-rw-r--r--drivers/nvme/host/nvme.h4
-rw-r--r--drivers/nvme/host/pci.c31
-rw-r--r--drivers/nvme/host/rdma.c64
-rw-r--r--drivers/nvme/target/loop.c2
-rw-r--r--drivers/of/base.c62
-rw-r--r--drivers/of/device.c4
-rw-r--r--drivers/of/platform.c3
-rw-r--r--drivers/pci/access.c12
-rw-r--r--drivers/pci/dwc/pci-imx6.c33
-rw-r--r--drivers/pci/endpoint/Kconfig1
-rw-r--r--drivers/pci/endpoint/functions/Kconfig1
-rw-r--r--drivers/pci/pci.c3
-rw-r--r--drivers/pci/switch/switchtec.c16
-rw-r--r--drivers/perf/arm_pmu_acpi.c11
-rw-r--r--drivers/phy/phy-qcom-qmp.c14
-rw-r--r--drivers/pinctrl/core.c20
-rw-r--r--drivers/pinctrl/freescale/pinctrl-mxs.c16
-rw-r--r--drivers/pinctrl/intel/pinctrl-cherryview.c24
-rw-r--r--drivers/pinctrl/pinconf-generic.c3
-rw-r--r--drivers/pinctrl/pinctrl-amd.c91
-rw-r--r--drivers/pinctrl/pinctrl-rockchip.c44
-rw-r--r--drivers/pinctrl/pinmux.c21
-rw-r--r--drivers/pinctrl/stm32/pinctrl-stm32.c2
-rw-r--r--drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c2
-rw-r--r--drivers/platform/goldfish/goldfish_pipe.c2
-rw-r--r--drivers/platform/x86/intel_telemetry_debugfs.c16
-rw-r--r--drivers/powercap/powercap_sys.c1
-rw-r--r--drivers/reset/hisilicon/hi6220_reset.c2
-rw-r--r--drivers/rtc/rtc-cmos.c2
-rw-r--r--drivers/s390/cio/vfio_ccw_ops.c12
-rw-r--r--drivers/s390/crypto/ap_bus.c38
-rw-r--r--drivers/s390/crypto/ap_card.c9
-rw-r--r--drivers/s390/crypto/ap_queue.c9
-rw-r--r--drivers/s390/net/netiucv.c4
-rw-r--r--drivers/scsi/bnx2fc/bnx2fc.h1
-rw-r--r--drivers/scsi/bnx2fc/bnx2fc_fcoe.c10
-rw-r--r--drivers/scsi/csiostor/csio_hw.c5
-rw-r--r--drivers/scsi/cxgbi/cxgb4i/cxgb4i.c1
-rw-r--r--drivers/scsi/cxgbi/libcxgbi.c54
-rw-r--r--drivers/scsi/cxgbi/libcxgbi.h17
-rw-r--r--drivers/scsi/device_handler/scsi_dh_rdac.c10
-rw-r--r--drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c27
-rw-r--r--drivers/scsi/libfc/fc_rport.c2
-rw-r--r--drivers/scsi/lpfc/lpfc.h23
-rw-r--r--drivers/scsi/lpfc/lpfc_attr.c47
-rw-r--r--drivers/scsi/lpfc/lpfc_crtn.h13
-rw-r--r--drivers/scsi/lpfc/lpfc_ct.c6
-rw-r--r--drivers/scsi/lpfc/lpfc_debugfs.c69
-rw-r--r--drivers/scsi/lpfc/lpfc_disc.h1
-rw-r--r--drivers/scsi/lpfc/lpfc_els.c26
-rw-r--r--drivers/scsi/lpfc/lpfc_hbadisc.c9
-rw-r--r--drivers/scsi/lpfc/lpfc_hw4.h16
-rw-r--r--drivers/scsi/lpfc/lpfc_init.c137
-rw-r--r--drivers/scsi/lpfc/lpfc_mem.c100
-rw-r--r--drivers/scsi/lpfc/lpfc_nportdisc.c13
-rw-r--r--drivers/scsi/lpfc/lpfc_nvmet.c418
-rw-r--r--drivers/scsi/lpfc/lpfc_nvmet.h14
-rw-r--r--drivers/scsi/lpfc/lpfc_sli.c357
-rw-r--r--drivers/scsi/lpfc/lpfc_sli4.h19
-rw-r--r--drivers/scsi/lpfc/lpfc_version.h2
-rw-r--r--drivers/scsi/qedi/qedi.h3
-rw-r--r--drivers/scsi/qedi/qedi_fw.c3
-rw-r--r--drivers/scsi/qedi/qedi_iscsi.c7
-rw-r--r--drivers/scsi/qedi/qedi_main.c29
-rw-r--r--drivers/scsi/qla2xxx/qla_bsg.c9
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.c4
-rw-r--r--drivers/scsi/qla2xxx/qla_def.h1
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c5
-rw-r--r--drivers/scsi/qla2xxx/qla_inline.h26
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c2
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c13
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c46
-rw-r--r--drivers/scsi/qla2xxx/qla_target.c8
-rw-r--r--drivers/scsi/qla2xxx/qla_tmpl.c2
-rw-r--r--drivers/scsi/scsi_debug.c2
-rw-r--r--drivers/scsi/scsi_lib.c2
-rw-r--r--drivers/scsi/sd.c63
-rw-r--r--drivers/scsi/sg.c5
-rw-r--r--drivers/scsi/ufs/ufshcd.c7
-rw-r--r--drivers/staging/ccree/Kconfig2
-rw-r--r--drivers/staging/ccree/ssi_buffer_mgr.c3
-rw-r--r--drivers/staging/iio/cdc/ad7152.c6
-rw-r--r--drivers/staging/lustre/lustre/lov/lov_pack.c9
-rw-r--r--drivers/staging/media/atomisp/i2c/Makefile2
-rw-r--r--drivers/staging/media/atomisp/i2c/imx/Makefile2
-rw-r--r--drivers/staging/media/atomisp/i2c/ov5693/Makefile2
-rw-r--r--drivers/staging/media/atomisp/pci/atomisp2/Makefile2
-rw-r--r--drivers/staging/rtl8188eu/os_dep/mon.c2
-rw-r--r--drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c3
-rw-r--r--drivers/staging/rtl8723bs/os_dep/os_intfs.c2
-rw-r--r--drivers/staging/rtl8723bs/os_dep/osdep_service.c2
-rw-r--r--drivers/target/iscsi/iscsi_target.c52
-rw-r--r--drivers/target/iscsi/iscsi_target_erl0.c6
-rw-r--r--drivers/target/iscsi/iscsi_target_erl0.h2
-rw-r--r--drivers/target/iscsi/iscsi_target_login.c4
-rw-r--r--drivers/target/iscsi/iscsi_target_nego.c194
-rw-r--r--drivers/target/target_core_internal.h2
-rw-r--r--drivers/target/target_core_tmr.c16
-rw-r--r--drivers/target/target_core_transport.c32
-rw-r--r--drivers/target/target_core_user.c46
-rw-r--r--drivers/thermal/broadcom/Kconfig9
-rw-r--r--drivers/thermal/qoriq_thermal.c3
-rw-r--r--drivers/thermal/thermal_core.c2
-rw-r--r--drivers/thermal/ti-soc-thermal/ti-bandgap.c14
-rw-r--r--drivers/tty/ehv_bytechan.c17
-rw-r--r--drivers/tty/serdev/core.c12
-rw-r--r--drivers/tty/serdev/serdev-ttyport.c21
-rw-r--r--drivers/tty/serial/8250/8250_port.c21
-rw-r--r--drivers/tty/serial/altera_jtaguart.c1
-rw-r--r--drivers/tty/serial/altera_uart.c1
-rw-r--r--drivers/tty/serial/efm32-uart.c11
-rw-r--r--drivers/tty/serial/ifx6x60.c2
-rw-r--r--drivers/tty/serial/imx.c14
-rw-r--r--drivers/tty/serial/serial_core.c6
-rw-r--r--drivers/tty/tty_port.c73
-rw-r--r--drivers/usb/chipidea/core.c5
-rw-r--r--drivers/usb/chipidea/debug.c3
-rw-r--r--drivers/usb/chipidea/udc.c8
-rw-r--r--drivers/usb/chipidea/usbmisc_imx.c41
-rw-r--r--drivers/usb/dwc2/params.c2
-rw-r--r--drivers/usb/gadget/composite.c11
-rw-r--r--drivers/usb/gadget/function/f_mass_storage.c13
-rw-r--r--drivers/usb/gadget/function/f_phonet.c2
-rw-r--r--drivers/usb/gadget/legacy/inode.c9
-rw-r--r--drivers/usb/gadget/udc/dummy_hcd.c13
-rw-r--r--drivers/usb/gadget/udc/net2280.c9
-rw-r--r--drivers/usb/gadget/udc/renesas_usb3.c45
-rw-r--r--drivers/usb/host/xhci-mem.c7
-rw-r--r--drivers/usb/host/xhci-pci.c3
-rw-r--r--drivers/usb/musb/musb_dsps.c5
-rw-r--r--drivers/video/fbdev/core/fbmon.c2
-rw-r--r--drivers/video/fbdev/smscufx.c5
-rw-r--r--drivers/video/fbdev/udlfb.c9
-rw-r--r--drivers/video/fbdev/via/viafbdev.c8
-rw-r--r--drivers/virtio/virtio_balloon.c7
-rw-r--r--drivers/xen/privcmd.c4
-rw-r--r--fs/autofs4/dev-ioctl.c2
-rw-r--r--fs/block_dev.c5
-rw-r--r--fs/btrfs/ctree.h4
-rw-r--r--fs/btrfs/dir-item.c2
-rw-r--r--fs/btrfs/disk-io.c10
-rw-r--r--fs/btrfs/extent-tree.c7
-rw-r--r--fs/btrfs/extent_io.c126
-rw-r--r--fs/btrfs/hash.c5
-rw-r--r--fs/btrfs/inode.c6
-rw-r--r--fs/ceph/acl.c1
-rw-r--r--fs/ceph/export.c4
-rw-r--r--fs/ceph/file.c6
-rw-r--r--fs/ceph/inode.c5
-rw-r--r--fs/ceph/mds_client.c4
-rw-r--r--fs/cifs/file.c2
-rw-r--r--fs/cifs/misc.c2
-rw-r--r--fs/cifs/smb1ops.c9
-rw-r--r--fs/cifs/smb2ops.c8
-rw-r--r--fs/cifs/xattr.c2
-rw-r--r--fs/configfs/item.c8
-rw-r--r--fs/configfs/symlink.c3
-rw-r--r--fs/dax.c24
-rw-r--r--fs/dcache.c10
-rw-r--r--fs/exec.c28
-rw-r--r--fs/ext4/acl.c4
-rw-r--r--fs/ext4/ext4.h2
-rw-r--r--fs/ext4/extents.c85
-rw-r--r--fs/ext4/file.c54
-rw-r--r--fs/ext4/inline.c5
-rw-r--r--fs/ext4/inode.c30
-rw-r--r--fs/ext4/mballoc.c23
-rw-r--r--fs/ext4/namei.c13
-rw-r--r--fs/ext4/super.c17
-rw-r--r--fs/ext4/xattr.c8
-rw-r--r--fs/f2fs/f2fs.h5
-rw-r--r--fs/gfs2/log.c2
-rw-r--r--fs/hugetlbfs/inode.c2
-rw-r--r--fs/jbd2/transaction.c6
-rw-r--r--fs/namespace.c2
-rw-r--r--fs/nfs/callback_xdr.c1
-rw-r--r--fs/nfs/dir.c51
-rw-r--r--fs/nfs/flexfilelayout/flexfilelayout.c1
-rw-r--r--fs/nfs/internal.h2
-rw-r--r--fs/nfs/namespace.c2
-rw-r--r--fs/nfs/nfs42proc.c2
-rw-r--r--fs/nfs/nfs4client.c1
-rw-r--r--fs/nfs/nfs4proc.c5
-rw-r--r--fs/nfs/nfs4state.c2
-rw-r--r--fs/nfs/pnfs.c25
-rw-r--r--fs/nfs/pnfs.h10
-rw-r--r--fs/nfs/super.c5
-rw-r--r--fs/nfsd/nfs3xdr.c23
-rw-r--r--fs/nfsd/nfs4proc.c13
-rw-r--r--fs/nfsd/nfsxdr.c13
-rw-r--r--fs/ntfs/namei.c2
-rw-r--r--fs/ocfs2/dlmglue.c4
-rw-r--r--fs/ocfs2/export.c2
-rw-r--r--fs/ocfs2/xattr.c23
-rw-r--r--fs/overlayfs/Kconfig1
-rw-r--r--fs/overlayfs/copy_up.c57
-rw-r--r--fs/overlayfs/dir.c61
-rw-r--r--fs/overlayfs/inode.c12
-rw-r--r--fs/overlayfs/namei.c16
-rw-r--r--fs/overlayfs/overlayfs.h16
-rw-r--r--fs/overlayfs/ovl_entry.h2
-rw-r--r--fs/overlayfs/super.c18
-rw-r--r--fs/overlayfs/util.c72
-rw-r--r--fs/proc/base.c2
-rw-r--r--fs/proc/task_mmu.c4
-rw-r--r--fs/quota/dquot.c16
-rw-r--r--fs/read_write.c2
-rw-r--r--fs/reiserfs/journal.c4
-rw-r--r--fs/stat.c1
-rw-r--r--fs/ufs/balloc.c70
-rw-r--r--fs/ufs/inode.c96
-rw-r--r--fs/ufs/super.c96
-rw-r--r--fs/ufs/ufs_fs.h9
-rw-r--r--fs/ufs/util.c17
-rw-r--r--fs/ufs/util.h19
-rw-r--r--fs/userfaultfd.c29
-rw-r--r--fs/xfs/libxfs/xfs_bmap.c9
-rw-r--r--fs/xfs/libxfs/xfs_btree.c2
-rw-r--r--fs/xfs/libxfs/xfs_refcount.c43
-rw-r--r--fs/xfs/xfs_aops.c7
-rw-r--r--fs/xfs/xfs_bmap_util.c10
-rw-r--r--fs/xfs/xfs_buf.c38
-rw-r--r--fs/xfs/xfs_buf.h5
-rw-r--r--fs/xfs/xfs_file.c71
-rw-r--r--fs/xfs/xfs_fsmap.c5
-rw-r--r--fs/xfs/xfs_icache.c5
-rw-r--r--include/acpi/acpi_bus.h3
-rw-r--r--include/acpi/actbl.h14
-rw-r--r--include/drm/drm_dp_helper.h51
-rw-r--r--include/dt-bindings/clock/sun50i-a64-ccu.h2
-rw-r--r--include/dt-bindings/clock/sun8i-h3-ccu.h2
-rw-r--r--include/linux/bio.h1
-rw-r--r--include/linux/blk-mq.h1
-rw-r--r--include/linux/blkdev.h4
-rw-r--r--include/linux/ceph/ceph_debug.h6
-rw-r--r--include/linux/cgroup-defs.h1
-rw-r--r--include/linux/cgroup.h20
-rw-r--r--include/linux/compiler-clang.h8
-rw-r--r--include/linux/configfs.h3
-rw-r--r--include/linux/dma-iommu.h1
-rw-r--r--include/linux/dmi.h2
-rw-r--r--include/linux/elevator.h2
-rw-r--r--include/linux/filter.h10
-rw-r--r--include/linux/gfp.h2
-rw-r--r--include/linux/gpio/machine.h7
-rw-r--r--include/linux/hashtable.h1
-rw-r--r--include/linux/if_vlan.h18
-rw-r--r--include/linux/irqchip/arm-gic-v3.h4
-rw-r--r--include/linux/irqchip/arm-gic.h28
-rw-r--r--include/linux/jiffies.h6
-rw-r--r--include/linux/key.h1
-rw-r--r--include/linux/memblock.h8
-rw-r--r--include/linux/mlx4/qp.h1
-rw-r--r--include/linux/mlx5/device.h10
-rw-r--r--include/linux/mlx5/driver.h7
-rw-r--r--include/linux/mlx5/mlx5_ifc.h10
-rw-r--r--include/linux/mm.h64
-rw-r--r--include/linux/mmzone.h1
-rw-r--r--include/linux/mod_devicetable.h1
-rw-r--r--include/linux/moduleparam.h2
-rw-r--r--include/linux/netdevice.h15
-rw-r--r--include/linux/netfilter/x_tables.h2
-rw-r--r--include/linux/netfilter_bridge/ebtables.h5
-rw-r--r--include/linux/of_graph.h21
-rw-r--r--include/linux/of_platform.h1
-rw-r--r--include/linux/pci.h11
-rw-r--r--include/linux/pinctrl/pinconf-generic.h3
-rw-r--r--include/linux/ptrace.h7
-rw-r--r--include/linux/quotaops.h6
-rw-r--r--include/linux/serdev.h19
-rw-r--r--include/linux/slub_def.h1
-rw-r--r--include/linux/srcu.h2
-rw-r--r--include/linux/sunrpc/svc.h3
-rw-r--r--include/linux/suspend.h7
-rw-r--r--include/linux/timekeeper_internal.h5
-rw-r--r--include/linux/tty.h9
-rw-r--r--include/linux/usb/usbnet.h1
-rw-r--r--include/media/cec-notifier.h12
-rw-r--r--include/media/cec.h6
-rw-r--r--include/net/dst.h8
-rw-r--r--include/net/ip_fib.h10
-rw-r--r--include/net/ipv6.h1
-rw-r--r--include/net/netfilter/nf_conntrack_helper.h4
-rw-r--r--include/net/netfilter/nf_tables.h2
-rw-r--r--include/net/tc_act/tc_csum.h15
-rw-r--r--include/net/tcp.h2
-rw-r--r--include/net/wext.h4
-rw-r--r--include/net/xfrm.h17
-rw-r--r--include/rdma/ib_sa.h25
-rw-r--r--include/rdma/rdma_netlink.h10
-rw-r--r--include/sound/cs35l35.h2
-rw-r--r--include/sound/designware_i2s.h1
-rw-r--r--include/sound/hdmi-codec.h9
-rw-r--r--include/sound/rt5645.h6
-rw-r--r--include/sound/simple_card_utils.h43
-rw-r--r--include/sound/soc-dapm.h7
-rw-r--r--include/sound/soc-topology.h5
-rw-r--r--include/sound/soc.h3
-rw-r--r--include/target/iscsi/iscsi_target_core.h1
-rw-r--r--include/uapi/linux/a.out.h26
-rw-r--r--include/uapi/linux/ethtool.h6
-rw-r--r--include/uapi/linux/keyctl.h4
-rw-r--r--include/uapi/linux/openvswitch.h1
-rw-r--r--include/uapi/sound/asoc.h10
-rw-r--r--include/uapi/sound/snd_sst_tokens.h8
-rw-r--r--kernel/bpf/arraymap.c1
-rw-r--r--kernel/bpf/lpm_trie.c1
-rw-r--r--kernel/bpf/stackmap.c1
-rw-r--r--kernel/bpf/verifier.c73
-rw-r--r--kernel/cgroup/cgroup.c5
-rw-r--r--kernel/cgroup/cpuset.c4
-rw-r--r--kernel/cpu.c4
-rw-r--r--kernel/events/core.c21
-rw-r--r--kernel/events/ring_buffer.c2
-rw-r--r--kernel/fork.c17
-rw-r--r--kernel/irq/manage.c4
-rw-r--r--kernel/kprobes.c2
-rw-r--r--kernel/livepatch/Kconfig1
-rw-r--r--kernel/livepatch/patch.c8
-rw-r--r--kernel/livepatch/transition.c36
-rw-r--r--kernel/locking/rtmutex.c24
-rw-r--r--kernel/power/process.c2
-rw-r--r--kernel/power/snapshot.c2
-rw-r--r--kernel/power/suspend.c29
-rw-r--r--kernel/printk/printk.c46
-rw-r--r--kernel/ptrace.c20
-rw-r--r--kernel/rcu/srcu.c5
-rw-r--r--kernel/rcu/srcutiny.c7
-rw-r--r--kernel/rcu/srcutree.c5
-rw-r--r--kernel/sched/core.c2
-rw-r--r--kernel/sched/cpufreq_schedutil.c10
-rw-r--r--kernel/sched/fair.c2
-rw-r--r--kernel/signal.c20
-rw-r--r--kernel/time/alarmtimer.c14
-rw-r--r--kernel/time/posix-cpu-timers.c24
-rw-r--r--kernel/time/tick-broadcast.c4
-rw-r--r--kernel/time/tick-internal.h2
-rw-r--r--kernel/time/timekeeping.c71
-rw-r--r--kernel/trace/ftrace.c5
-rw-r--r--kernel/trace/trace.c3
-rw-r--r--kernel/trace/trace_functions.c12
-rw-r--r--kernel/trace/trace_kprobe.c14
-rw-r--r--kernel/trace/trace_stack.c6
-rw-r--r--lib/cmdline.c6
-rw-r--r--lib/libcrc32c.c6
-rw-r--r--lib/test_bpf.c38
-rw-r--r--mm/gup.c25
-rw-r--r--mm/huge_memory.c8
-rw-r--r--mm/hugetlb.c5
-rw-r--r--mm/khugepaged.c1
-rw-r--r--mm/ksm.c3
-rw-r--r--mm/memblock.c23
-rw-r--r--mm/memory-failure.c13
-rw-r--r--mm/memory.c78
-rw-r--r--mm/mlock.c5
-rw-r--r--mm/mmap.c160
-rw-r--r--mm/page_alloc.c37
-rw-r--r--mm/slub.c46
-rw-r--r--mm/swap_cgroup.c3
-rw-r--r--mm/util.c7
-rw-r--r--mm/vmalloc.c15
-rw-r--r--mm/vmpressure.c6
-rw-r--r--net/8021q/vlan.c3
-rw-r--r--net/8021q/vlan_dev.c4
-rw-r--r--net/batman-adv/distributed-arp-table.c5
-rw-r--r--net/batman-adv/routing.c2
-rw-r--r--net/batman-adv/soft-interface.c5
-rw-r--r--net/bluetooth/6lowpan.c2
-rw-r--r--net/bridge/br_device.c2
-rw-r--r--net/bridge/br_netlink.c2
-rw-r--r--net/bridge/br_stp_if.c2
-rw-r--r--net/bridge/br_stp_timer.c2
-rw-r--r--net/bridge/netfilter/ebt_arpreply.c3
-rw-r--r--net/bridge/netfilter/ebtables.c9
-rw-r--r--net/caif/caif_socket.c4
-rw-r--r--net/caif/cfpkt_skbuff.c6
-rw-r--r--net/caif/chnl_net.c4
-rw-r--r--net/can/af_can.c3
-rw-r--r--net/ceph/auth_x.c13
-rw-r--r--net/ceph/ceph_common.c13
-rw-r--r--net/ceph/messenger.c26
-rw-r--r--net/ceph/mon_client.c4
-rw-r--r--net/ceph/osdmap.c1
-rw-r--r--net/core/dev.c74
-rw-r--r--net/core/dev_ioctl.c19
-rw-r--r--net/core/devlink.c8
-rw-r--r--net/core/dst.c37
-rw-r--r--net/core/fib_rules.c21
-rw-r--r--net/core/filter.c1
-rw-r--r--net/core/net_namespace.c19
-rw-r--r--net/core/rtnetlink.c12
-rw-r--r--net/core/skbuff.c5
-rw-r--r--net/core/sysctl_net_core.c2
-rw-r--r--net/decnet/dn_route.c14
-rw-r--r--net/decnet/netfilter/dn_rtmsg.c4
-rw-r--r--net/dsa/dsa.c47
-rw-r--r--net/dsa/dsa2.c4
-rw-r--r--net/dsa/legacy.c47
-rw-r--r--net/hsr/hsr_device.c4
-rw-r--r--net/hsr/hsr_forward.c3
-rw-r--r--net/hsr/hsr_framereg.c9
-rw-r--r--net/hsr/hsr_framereg.h2
-rw-r--r--net/ieee802154/6lowpan/core.c2
-rw-r--r--net/ipv4/af_inet.c2
-rw-r--r--net/ipv4/arp.c56
-rw-r--r--net/ipv4/esp4.c5
-rw-r--r--net/ipv4/fib_semantics.c17
-rw-r--r--net/ipv4/icmp.c8
-rw-r--r--net/ipv4/igmp.c22
-rw-r--r--net/ipv4/ip_output.c3
-rw-r--r--net/ipv4/ip_tunnel.c6
-rw-r--r--net/ipv4/ipmr.c34
-rw-r--r--net/ipv4/route.c10
-rw-r--r--net/ipv4/tcp.c19
-rw-r--r--net/ipv4/tcp_cong.c1
-rw-r--r--net/ipv6/addrconf.c11
-rw-r--r--net/ipv6/calipso.c6
-rw-r--r--net/ipv6/datagram.c8
-rw-r--r--net/ipv6/esp6_offload.c25
-rw-r--r--net/ipv6/fib6_rules.c22
-rw-r--r--net/ipv6/icmp.c2
-rw-r--r--net/ipv6/ila/ila_xlat.c1
-rw-r--r--net/ipv6/ip6_fib.c3
-rw-r--r--net/ipv6/ip6_gre.c22
-rw-r--r--net/ipv6/ip6_offload.c4
-rw-r--r--net/ipv6/ip6_output.c17
-rw-r--r--net/ipv6/ip6_tunnel.c34
-rw-r--r--net/ipv6/ip6_vti.c8
-rw-r--r--net/ipv6/ip6mr.c2
-rw-r--r--net/ipv6/ping.c2
-rw-r--r--net/ipv6/proc.c2
-rw-r--r--net/ipv6/raw.c2
-rw-r--r--net/ipv6/route.c7
-rw-r--r--net/ipv6/sit.c8
-rw-r--r--net/ipv6/udp.c3
-rw-r--r--net/ipv6/xfrm6_input.c2
-rw-r--r--net/ipv6/xfrm6_mode_ro.c2
-rw-r--r--net/ipv6/xfrm6_mode_transport.c2
-rw-r--r--net/irda/irlan/irlan_eth.c2
-rw-r--r--net/key/af_key.c21
-rw-r--r--net/l2tp/l2tp_eth.c15
-rw-r--r--net/llc/af_llc.c3
-rw-r--r--net/mac80211/agg-tx.c128
-rw-r--r--net/mac80211/cfg.c2
-rw-r--r--net/mac80211/ht.c16
-rw-r--r--net/mac80211/ieee80211_i.h16
-rw-r--r--net/mac80211/iface.c18
-rw-r--r--net/mac80211/mlme.c62
-rw-r--r--net/mac80211/rx.c9
-rw-r--r--net/mac80211/sta_info.c2
-rw-r--r--net/mac80211/sta_info.h2
-rw-r--r--net/mac80211/wpa.c9
-rw-r--r--net/mac802154/iface.c7
-rw-r--r--net/mpls/af_mpls.c2
-rw-r--r--net/netfilter/ipvs/ip_vs_core.c19
-rw-r--r--net/netfilter/nf_conntrack_helper.c12
-rw-r--r--net/netfilter/nf_conntrack_netlink.c18
-rw-r--r--net/netfilter/nf_conntrack_proto_sctp.c9
-rw-r--r--net/netfilter/nf_nat_core.c6
-rw-r--r--net/netfilter/nf_tables_api.c160
-rw-r--r--net/netfilter/nfnetlink_cthelper.c17
-rw-r--r--net/netfilter/nft_bitwise.c19
-rw-r--r--net/netfilter/nft_cmp.c12
-rw-r--r--net/netfilter/nft_ct.c4
-rw-r--r--net/netfilter/nft_immediate.c5
-rw-r--r--net/netfilter/nft_range.c4
-rw-r--r--net/netfilter/nft_set_hash.c2
-rw-r--r--net/netfilter/nft_set_rbtree.c22
-rw-r--r--net/netfilter/x_tables.c24
-rw-r--r--net/netfilter/xt_CT.c6
-rw-r--r--net/netlink/af_netlink.c4
-rw-r--r--net/openvswitch/conntrack.c4
-rw-r--r--net/openvswitch/vport-internal_dev.c4
-rw-r--r--net/phonet/pep-gprs.c2
-rw-r--r--net/rxrpc/key.c64
-rw-r--r--net/sched/act_pedit.c4
-rw-r--r--net/sched/act_police.c8
-rw-r--r--net/sched/cls_matchall.c1
-rw-r--r--net/sched/sch_api.c3
-rw-r--r--net/sctp/associola.c4
-rw-r--r--net/sctp/endpointola.c1
-rw-r--r--net/sctp/input.c16
-rw-r--r--net/sctp/sctp_diag.c5
-rw-r--r--net/sctp/sm_make_chunk.c13
-rw-r--r--net/sctp/sm_statefuns.c3
-rw-r--r--net/sctp/socket.c9
-rw-r--r--net/sunrpc/xprtrdma/backchannel.c6
-rw-r--r--net/sunrpc/xprtsock.c7
-rw-r--r--net/tipc/msg.c2
-rw-r--r--net/unix/af_unix.c7
-rw-r--r--net/vmw_vsock/af_vsock.c21
-rw-r--r--net/wireless/scan.c8
-rw-r--r--net/wireless/util.c10
-rw-r--r--net/wireless/wext-core.c22
-rw-r--r--net/xfrm/Makefile3
-rw-r--r--net/xfrm/xfrm_device.c4
-rw-r--r--net/xfrm/xfrm_policy.c51
-rw-r--r--net/xfrm/xfrm_state.c2
-rw-r--r--net/xfrm/xfrm_user.c1
-rw-r--r--scripts/Makefile.headersinst10
-rw-r--r--scripts/gdb/linux/dmesg.py9
-rw-r--r--scripts/genksyms/genksyms.h2
-rw-r--r--scripts/kconfig/Makefile2
-rw-r--r--scripts/kconfig/nconf.c12
-rw-r--r--scripts/kconfig/nconf.gui.c4
-rwxr-xr-xscripts/tags.sh1
-rw-r--r--security/keys/Kconfig6
-rw-r--r--security/keys/dh.c300
-rw-r--r--security/keys/encrypted-keys/encrypted.c204
-rw-r--r--security/keys/gc.c4
-rw-r--r--security/keys/key.c16
-rw-r--r--security/keys/keyctl.c16
-rw-r--r--security/keys/keyring.c12
-rw-r--r--security/keys/process_keys.c7
-rw-r--r--security/keys/trusted.c50
-rw-r--r--security/keys/user_defined.c16
-rw-r--r--security/selinux/hooks.c5
-rw-r--r--sound/soc/atmel/atmel-pcm.h6
-rw-r--r--sound/soc/atmel/tse850-pcm5142.c4
-rw-r--r--sound/soc/codecs/Kconfig10
-rw-r--r--sound/soc/codecs/Makefile4
-rw-r--r--sound/soc/codecs/ak4613.c95
-rw-r--r--sound/soc/codecs/ak4642.c4
-rw-r--r--sound/soc/codecs/cs35l34.c4
-rw-r--r--sound/soc/codecs/cs35l35.c94
-rw-r--r--sound/soc/codecs/cs35l35.h6
-rw-r--r--sound/soc/codecs/cs4271.c2
-rw-r--r--sound/soc/codecs/cs53l30.c2
-rw-r--r--sound/soc/codecs/da7213.c37
-rw-r--r--sound/soc/codecs/da7218.c2
-rw-r--r--sound/soc/codecs/da7219-aad.c31
-rw-r--r--sound/soc/codecs/da7219.c53
-rw-r--r--sound/soc/codecs/da7219.h5
-rw-r--r--sound/soc/codecs/es8316.c637
-rw-r--r--sound/soc/codecs/es8316.h129
-rw-r--r--sound/soc/codecs/hdmi-codec.c92
-rw-r--r--sound/soc/codecs/max9867.c2
-rw-r--r--sound/soc/codecs/msm8916-wcd-analog.c6
-rw-r--r--sound/soc/codecs/nau8824.c52
-rw-r--r--sound/soc/codecs/nau8824.h12
-rw-r--r--sound/soc/codecs/nau8825.c76
-rw-r--r--sound/soc/codecs/nau8825.h1
-rw-r--r--sound/soc/codecs/rt5514.c37
-rw-r--r--sound/soc/codecs/rt5514.h6
-rw-r--r--sound/soc/codecs/rt5645.c97
-rw-r--r--sound/soc/codecs/rt5651.c44
-rw-r--r--sound/soc/codecs/rt5663.c4
-rw-r--r--sound/soc/codecs/rt5663.h4
-rw-r--r--sound/soc/codecs/rt5665.c158
-rw-r--r--sound/soc/codecs/rt5670.c25
-rw-r--r--sound/soc/codecs/rt5677.c32
-rw-r--r--sound/soc/codecs/sgtl5000.c89
-rw-r--r--sound/soc/codecs/tlv320aic31xx.c2
-rw-r--r--sound/soc/codecs/wm_adsp.c6
-rw-r--r--sound/soc/codecs/zx_aud96p22.c403
-rw-r--r--sound/soc/davinci/davinci-mcasp.c12
-rw-r--r--sound/soc/dwc/dwc-i2s.c6
-rw-r--r--sound/soc/fsl/mpc5200_dma.c1
-rw-r--r--sound/soc/generic/Kconfig17
-rw-r--r--sound/soc/generic/Makefile4
-rw-r--r--sound/soc/generic/audio-graph-card.c338
-rw-r--r--sound/soc/generic/audio-graph-scu-card.c411
-rw-r--r--sound/soc/generic/simple-card-utils.c198
-rw-r--r--sound/soc/generic/simple-card.c69
-rw-r--r--sound/soc/generic/simple-scu-card.c55
-rw-r--r--sound/soc/hisilicon/hi6210-i2s.c11
-rw-r--r--sound/soc/intel/Kconfig42
-rw-r--r--sound/soc/intel/atom/sst-mfld-platform-pcm.c2
-rw-r--r--sound/soc/intel/atom/sst/sst.c59
-rw-r--r--sound/soc/intel/atom/sst/sst.h30
-rw-r--r--sound/soc/intel/atom/sst/sst_acpi.c232
-rw-r--r--sound/soc/intel/boards/Makefile6
-rw-r--r--sound/soc/intel/boards/bdw-rt5677.c26
-rw-r--r--sound/soc/intel/boards/bxt_da7219_max98357a.c26
-rw-r--r--sound/soc/intel/boards/bxt_rt298.c19
-rw-r--r--sound/soc/intel/boards/byt-max98090.c24
-rw-r--r--sound/soc/intel/boards/bytcht_es8316.c300
-rw-r--r--sound/soc/intel/boards/bytcht_nocodec.c4
-rw-r--r--sound/soc/intel/boards/bytcr_rt5651.c4
-rw-r--r--sound/soc/intel/boards/cht_bsw_max98090_ti.c12
-rw-r--r--sound/soc/intel/boards/cht_bsw_rt5672.c89
-rw-r--r--sound/soc/intel/boards/kbl_rt5663_max98927.c687
-rw-r--r--sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c640
-rw-r--r--sound/soc/intel/boards/skl_nau88l25_max98357a.c16
-rw-r--r--sound/soc/intel/boards/skl_nau88l25_ssm4567.c16
-rw-r--r--sound/soc/intel/boards/skl_rt286.c30
-rw-r--r--sound/soc/intel/common/sst-acpi.h23
-rw-r--r--sound/soc/intel/common/sst-dsp-priv.h4
-rw-r--r--sound/soc/intel/common/sst-match-acpi.c47
-rw-r--r--sound/soc/intel/skylake/Makefile4
-rw-r--r--sound/soc/intel/skylake/bxt-sst.c4
-rw-r--r--sound/soc/intel/skylake/skl-debug.c261
-rw-r--r--sound/soc/intel/skylake/skl-messages.c31
-rw-r--r--sound/soc/intel/skylake/skl-pcm.c6
-rw-r--r--sound/soc/intel/skylake/skl-sst.c5
-rw-r--r--sound/soc/intel/skylake/skl-topology.c187
-rw-r--r--sound/soc/intel/skylake/skl-topology.h21
-rw-r--r--sound/soc/intel/skylake/skl-tplg-interface.h2
-rw-r--r--sound/soc/intel/skylake/skl.c114
-rw-r--r--sound/soc/intel/skylake/skl.h23
-rw-r--r--sound/soc/mediatek/mt2701/mt2701-cs42448.c2
-rw-r--r--sound/soc/omap/mcbsp.c12
-rw-r--r--sound/soc/pxa/Kconfig2
-rw-r--r--sound/soc/rockchip/Kconfig9
-rw-r--r--sound/soc/rockchip/Makefile2
-rw-r--r--sound/soc/rockchip/rockchip_i2s.c41
-rw-r--r--sound/soc/rockchip/rockchip_i2s.h3
-rw-r--r--sound/soc/rockchip/rockchip_pdm.c516
-rw-r--r--sound/soc/rockchip/rockchip_pdm.h83
-rw-r--r--sound/soc/rockchip/rockchip_spdif.c4
-rw-r--r--sound/soc/samsung/s3c24xx_uda134x.c2
-rw-r--r--sound/soc/sh/Kconfig2
-rw-r--r--sound/soc/sh/fsi.c13
-rw-r--r--sound/soc/sh/rcar/adg.c61
-rw-r--r--sound/soc/sh/rcar/cmd.c7
-rw-r--r--sound/soc/sh/rcar/core.c494
-rw-r--r--sound/soc/sh/rcar/ctu.c6
-rw-r--r--sound/soc/sh/rcar/dma.c32
-rw-r--r--sound/soc/sh/rcar/dvc.c12
-rw-r--r--sound/soc/sh/rcar/gen.c2
-rw-r--r--sound/soc/sh/rcar/rsnd.h68
-rw-r--r--sound/soc/sh/rcar/src.c20
-rw-r--r--sound/soc/sh/rcar/ssi.c241
-rw-r--r--sound/soc/sh/rcar/ssiu.c37
-rw-r--r--sound/soc/soc-compress.c6
-rw-r--r--sound/soc/soc-core.c86
-rw-r--r--sound/soc/soc-topology.c37
-rw-r--r--sound/soc/stm/Kconfig29
-rw-r--r--sound/soc/stm/Makefile12
-rw-r--r--sound/soc/stm/stm32_i2s.c946
-rw-r--r--sound/soc/stm/stm32_sai.c15
-rw-r--r--sound/soc/stm/stm32_sai.h73
-rw-r--r--sound/soc/stm/stm32_sai_sub.c143
-rw-r--r--sound/soc/stm/stm32_spdifrx.c998
-rw-r--r--sound/soc/sunxi/sun4i-codec.c63
-rw-r--r--sound/soc/sunxi/sun8i-codec-analog.c145
-rw-r--r--sound/soc/zte/zx-i2s.c15
-rw-r--r--tools/arch/arm/include/uapi/asm/kvm.h10
-rw-r--r--tools/arch/arm64/include/uapi/asm/kvm.h10
-rw-r--r--tools/arch/powerpc/include/uapi/asm/kvm.h3
-rw-r--r--tools/arch/s390/include/uapi/asm/kvm.h26
-rw-r--r--tools/arch/x86/include/asm/cpufeatures.h2
-rw-r--r--tools/arch/x86/include/asm/disabled-features.h8
-rw-r--r--tools/arch/x86/include/asm/required-features.h8
-rw-r--r--tools/arch/x86/include/uapi/asm/kvm.h3
-rw-r--r--tools/arch/x86/include/uapi/asm/vmx.h25
-rw-r--r--tools/include/linux/filter.h10
-rw-r--r--tools/include/uapi/linux/stat.h8
-rw-r--r--tools/objtool/builtin-check.c3
-rw-r--r--tools/perf/Documentation/perf-probe.txt8
-rw-r--r--tools/perf/Documentation/perf-script-perl.txt2
-rw-r--r--tools/perf/Documentation/perf-script-python.txt23
-rw-r--r--tools/perf/Documentation/perf-script.txt4
-rw-r--r--tools/perf/Makefile.config38
-rw-r--r--tools/perf/Makefile.perf2
-rw-r--r--tools/perf/arch/Build2
-rw-r--r--tools/perf/arch/common.c1
-rw-r--r--tools/perf/builtin-script.c2
-rw-r--r--tools/perf/builtin-stat.c5
-rw-r--r--tools/perf/builtin-trace.c4
-rw-r--r--tools/perf/pmu-events/Build4
-rw-r--r--tools/perf/tests/Build2
-rw-r--r--tools/perf/tests/bp_signal.c14
-rw-r--r--tools/perf/tests/builtin-test.c7
-rw-r--r--tools/perf/tests/code-reading.c20
-rw-r--r--tools/perf/tests/task-exit.c2
-rw-r--r--tools/perf/tests/tests.h3
-rw-r--r--tools/perf/ui/hist.c2
-rw-r--r--tools/perf/util/annotate.c72
-rw-r--r--tools/perf/util/build-id.c45
-rw-r--r--tools/perf/util/build-id.h1
-rw-r--r--tools/perf/util/callchain.c13
-rw-r--r--tools/perf/util/dso.c100
-rw-r--r--tools/perf/util/dso.h9
-rw-r--r--tools/perf/util/evsel.c12
-rw-r--r--tools/perf/util/evsel_fprintf.c33
-rw-r--r--tools/perf/util/header.c14
-rw-r--r--tools/perf/util/machine.c21
-rw-r--r--tools/perf/util/probe-event.c2
-rw-r--r--tools/perf/util/scripting-engines/trace-event-python.c2
-rw-r--r--tools/perf/util/srcline.c49
-rw-r--r--tools/perf/util/symbol-elf.c41
-rw-r--r--tools/perf/util/symbol.c4
-rw-r--r--tools/perf/util/unwind-libdw.c22
-rw-r--r--tools/perf/util/unwind-libunwind-local.c11
-rw-r--r--tools/power/acpi/.gitignore4
-rw-r--r--tools/testing/selftests/bpf/bpf_endian.h41
-rw-r--r--tools/testing/selftests/bpf/test_verifier.c305
-rw-r--r--tools/testing/selftests/ftrace/test.d/kprobe/multiple_kprobes.tc21
-rwxr-xr-xtools/testing/selftests/ntb/ntb_test.sh2
-rw-r--r--tools/testing/selftests/powerpc/tm/tm-resched-dscr.c2
-rw-r--r--usr/Kconfig1
-rw-r--r--virt/kvm/arm/hyp/vgic-v3-sr.c2
-rw-r--r--virt/kvm/arm/mmu.c3
-rw-r--r--virt/kvm/arm/vgic/vgic-mmio-v2.c16
-rw-r--r--virt/kvm/arm/vgic/vgic-v2.c28
-rw-r--r--virt/kvm/arm/vgic/vgic-v3.c47
-rw-r--r--virt/kvm/arm/vgic/vgic.h12
1501 files changed, 24726 insertions, 9790 deletions
diff --git a/Documentation/acpi/acpi-lid.txt b/Documentation/acpi/acpi-lid.txt
index 22cb3091f297..effe7af3a5af 100644
--- a/Documentation/acpi/acpi-lid.txt
+++ b/Documentation/acpi/acpi-lid.txt
@@ -59,20 +59,28 @@ button driver uses the following 3 modes in order not to trigger issues.
59If the userspace hasn't been prepared to ignore the unreliable "opened" 59If the userspace hasn't been prepared to ignore the unreliable "opened"
60events and the unreliable initial state notification, Linux users can use 60events and the unreliable initial state notification, Linux users can use
61the following kernel parameters to handle the possible issues: 61the following kernel parameters to handle the possible issues:
62A. button.lid_init_state=open: 62A. button.lid_init_state=method:
63 When this option is specified, the ACPI button driver reports the
64 initial lid state using the returning value of the _LID control method
65 and whether the "opened"/"closed" events are paired fully relies on the
66 firmware implementation.
67 This option can be used to fix some platforms where the returning value
68 of the _LID control method is reliable but the initial lid state
69 notification is missing.
70 This option is the default behavior during the period the userspace
71 isn't ready to handle the buggy AML tables.
72B. button.lid_init_state=open:
63 When this option is specified, the ACPI button driver always reports the 73 When this option is specified, the ACPI button driver always reports the
64 initial lid state as "opened" and whether the "opened"/"closed" events 74 initial lid state as "opened" and whether the "opened"/"closed" events
65 are paired fully relies on the firmware implementation. 75 are paired fully relies on the firmware implementation.
66 This may fix some platforms where the returning value of the _LID 76 This may fix some platforms where the returning value of the _LID
67 control method is not reliable and the initial lid state notification is 77 control method is not reliable and the initial lid state notification is
68 missing. 78 missing.
69 This option is the default behavior during the period the userspace
70 isn't ready to handle the buggy AML tables.
71 79
72If the userspace has been prepared to ignore the unreliable "opened" events 80If the userspace has been prepared to ignore the unreliable "opened" events
73and the unreliable initial state notification, Linux users should always 81and the unreliable initial state notification, Linux users should always
74use the following kernel parameter: 82use the following kernel parameter:
75B. button.lid_init_state=ignore: 83C. button.lid_init_state=ignore:
76 When this option is specified, the ACPI button driver never reports the 84 When this option is specified, the ACPI button driver never reports the
77 initial lid state and there is a compensation mechanism implemented to 85 initial lid state and there is a compensation mechanism implemented to
78 ensure that the reliable "closed" notifications can always be delievered 86 ensure that the reliable "closed" notifications can always be delievered
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 15f79c27748d..7737ab5d04b2 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -866,6 +866,15 @@
866 866
867 dscc4.setup= [NET] 867 dscc4.setup= [NET]
868 868
869 dt_cpu_ftrs= [PPC]
870 Format: {"off" | "known"}
871 Control how the dt_cpu_ftrs device-tree binding is
872 used for CPU feature discovery and setup (if it
873 exists).
874 off: Do not use it, fall back to legacy cpu table.
875 known: Do not pass through unknown features to guests
876 or userspace, only those that the kernel is aware of.
877
869 dump_apple_properties [X86] 878 dump_apple_properties [X86]
870 Dump name and content of EFI device properties on 879 Dump name and content of EFI device properties on
871 x86 Macs. Useful for driver authors to determine 880 x86 Macs. Useful for driver authors to determine
@@ -3802,6 +3811,13 @@
3802 expediting. Set to zero to disable automatic 3811 expediting. Set to zero to disable automatic
3803 expediting. 3812 expediting.
3804 3813
3814 stack_guard_gap= [MM]
3815 override the default stack gap protection. The value
3816 is in page units and it defines how many pages prior
3817 to (for stacks growing down) resp. after (for stacks
3818 growing up) the main stack are reserved for no other
3819 mapping. Default value is 256 pages.
3820
3805 stacktrace [FTRACE] 3821 stacktrace [FTRACE]
3806 Enabled the stack tracer on boot up. 3822 Enabled the stack tracer on boot up.
3807 3823
diff --git a/Documentation/admin-guide/pm/cpufreq.rst b/Documentation/admin-guide/pm/cpufreq.rst
index 289c80f7760e..09aa2e949787 100644
--- a/Documentation/admin-guide/pm/cpufreq.rst
+++ b/Documentation/admin-guide/pm/cpufreq.rst
@@ -1,4 +1,5 @@
1.. |struct cpufreq_policy| replace:: :c:type:`struct cpufreq_policy <cpufreq_policy>` 1.. |struct cpufreq_policy| replace:: :c:type:`struct cpufreq_policy <cpufreq_policy>`
2.. |intel_pstate| replace:: :doc:`intel_pstate <intel_pstate>`
2 3
3======================= 4=======================
4CPU Performance Scaling 5CPU Performance Scaling
@@ -75,7 +76,7 @@ feedback registers, as that information is typically specific to the hardware
75interface it comes from and may not be easily represented in an abstract, 76interface it comes from and may not be easily represented in an abstract,
76platform-independent way. For this reason, ``CPUFreq`` allows scaling drivers 77platform-independent way. For this reason, ``CPUFreq`` allows scaling drivers
77to bypass the governor layer and implement their own performance scaling 78to bypass the governor layer and implement their own performance scaling
78algorithms. That is done by the ``intel_pstate`` scaling driver. 79algorithms. That is done by the |intel_pstate| scaling driver.
79 80
80 81
81``CPUFreq`` Policy Objects 82``CPUFreq`` Policy Objects
@@ -174,13 +175,13 @@ necessary to restart the scaling governor so that it can take the new online CPU
174into account. That is achieved by invoking the governor's ``->stop`` and 175into account. That is achieved by invoking the governor's ``->stop`` and
175``->start()`` callbacks, in this order, for the entire policy. 176``->start()`` callbacks, in this order, for the entire policy.
176 177
177As mentioned before, the ``intel_pstate`` scaling driver bypasses the scaling 178As mentioned before, the |intel_pstate| scaling driver bypasses the scaling
178governor layer of ``CPUFreq`` and provides its own P-state selection algorithms. 179governor layer of ``CPUFreq`` and provides its own P-state selection algorithms.
179Consequently, if ``intel_pstate`` is used, scaling governors are not attached to 180Consequently, if |intel_pstate| is used, scaling governors are not attached to
180new policy objects. Instead, the driver's ``->setpolicy()`` callback is invoked 181new policy objects. Instead, the driver's ``->setpolicy()`` callback is invoked
181to register per-CPU utilization update callbacks for each policy. These 182to register per-CPU utilization update callbacks for each policy. These
182callbacks are invoked by the CPU scheduler in the same way as for scaling 183callbacks are invoked by the CPU scheduler in the same way as for scaling
183governors, but in the ``intel_pstate`` case they both determine the P-state to 184governors, but in the |intel_pstate| case they both determine the P-state to
184use and change the hardware configuration accordingly in one go from scheduler 185use and change the hardware configuration accordingly in one go from scheduler
185context. 186context.
186 187
@@ -257,7 +258,7 @@ are the following:
257 258
258``scaling_available_governors`` 259``scaling_available_governors``
259 List of ``CPUFreq`` scaling governors present in the kernel that can 260 List of ``CPUFreq`` scaling governors present in the kernel that can
260 be attached to this policy or (if the ``intel_pstate`` scaling driver is 261 be attached to this policy or (if the |intel_pstate| scaling driver is
261 in use) list of scaling algorithms provided by the driver that can be 262 in use) list of scaling algorithms provided by the driver that can be
262 applied to this policy. 263 applied to this policy.
263 264
@@ -274,7 +275,7 @@ are the following:
274 the CPU is actually running at (due to hardware design and other 275 the CPU is actually running at (due to hardware design and other
275 limitations). 276 limitations).
276 277
277 Some scaling drivers (e.g. ``intel_pstate``) attempt to provide 278 Some scaling drivers (e.g. |intel_pstate|) attempt to provide
278 information more precisely reflecting the current CPU frequency through 279 information more precisely reflecting the current CPU frequency through
279 this attribute, but that still may not be the exact current CPU 280 this attribute, but that still may not be the exact current CPU
280 frequency as seen by the hardware at the moment. 281 frequency as seen by the hardware at the moment.
@@ -284,13 +285,13 @@ are the following:
284 285
285``scaling_governor`` 286``scaling_governor``
286 The scaling governor currently attached to this policy or (if the 287 The scaling governor currently attached to this policy or (if the
287 ``intel_pstate`` scaling driver is in use) the scaling algorithm 288 |intel_pstate| scaling driver is in use) the scaling algorithm
288 provided by the driver that is currently applied to this policy. 289 provided by the driver that is currently applied to this policy.
289 290
290 This attribute is read-write and writing to it will cause a new scaling 291 This attribute is read-write and writing to it will cause a new scaling
291 governor to be attached to this policy or a new scaling algorithm 292 governor to be attached to this policy or a new scaling algorithm
292 provided by the scaling driver to be applied to it (in the 293 provided by the scaling driver to be applied to it (in the
293 ``intel_pstate`` case), as indicated by the string written to this 294 |intel_pstate| case), as indicated by the string written to this
294 attribute (which must be one of the names listed by the 295 attribute (which must be one of the names listed by the
295 ``scaling_available_governors`` attribute described above). 296 ``scaling_available_governors`` attribute described above).
296 297
@@ -619,7 +620,7 @@ This file is located under :file:`/sys/devices/system/cpu/cpufreq/` and controls
619the "boost" setting for the whole system. It is not present if the underlying 620the "boost" setting for the whole system. It is not present if the underlying
620scaling driver does not support the frequency boost mechanism (or supports it, 621scaling driver does not support the frequency boost mechanism (or supports it,
621but provides a driver-specific interface for controlling it, like 622but provides a driver-specific interface for controlling it, like
622``intel_pstate``). 623|intel_pstate|).
623 624
624If the value in this file is 1, the frequency boost mechanism is enabled. This 625If the value in this file is 1, the frequency boost mechanism is enabled. This
625means that either the hardware can be put into states in which it is able to 626means that either the hardware can be put into states in which it is able to
diff --git a/Documentation/admin-guide/pm/index.rst b/Documentation/admin-guide/pm/index.rst
index c80f087321fc..7f148f76f432 100644
--- a/Documentation/admin-guide/pm/index.rst
+++ b/Documentation/admin-guide/pm/index.rst
@@ -6,6 +6,7 @@ Power Management
6 :maxdepth: 2 6 :maxdepth: 2
7 7
8 cpufreq 8 cpufreq
9 intel_pstate
9 10
10.. only:: subproject and html 11.. only:: subproject and html
11 12
diff --git a/Documentation/admin-guide/pm/intel_pstate.rst b/Documentation/admin-guide/pm/intel_pstate.rst
new file mode 100644
index 000000000000..33d703989ea8
--- /dev/null
+++ b/Documentation/admin-guide/pm/intel_pstate.rst
@@ -0,0 +1,755 @@
1===============================================
2``intel_pstate`` CPU Performance Scaling Driver
3===============================================
4
5::
6
7 Copyright (c) 2017 Intel Corp., Rafael J. Wysocki <rafael.j.wysocki@intel.com>
8
9
10General Information
11===================
12
13``intel_pstate`` is a part of the
14:doc:`CPU performance scaling subsystem <cpufreq>` in the Linux kernel
15(``CPUFreq``). It is a scaling driver for the Sandy Bridge and later
16generations of Intel processors. Note, however, that some of those processors
17may not be supported. [To understand ``intel_pstate`` it is necessary to know
18how ``CPUFreq`` works in general, so this is the time to read :doc:`cpufreq` if
19you have not done that yet.]
20
21For the processors supported by ``intel_pstate``, the P-state concept is broader
22than just an operating frequency or an operating performance point (see the
23`LinuxCon Europe 2015 presentation by Kristen Accardi <LCEU2015_>`_ for more
24information about that). For this reason, the representation of P-states used
25by ``intel_pstate`` internally follows the hardware specification (for details
26refer to `Intel® 64 and IA-32 Architectures Software Developer’s Manual
27Volume 3: System Programming Guide <SDM_>`_). However, the ``CPUFreq`` core
28uses frequencies for identifying operating performance points of CPUs and
29frequencies are involved in the user space interface exposed by it, so
30``intel_pstate`` maps its internal representation of P-states to frequencies too
31(fortunately, that mapping is unambiguous). At the same time, it would not be
32practical for ``intel_pstate`` to supply the ``CPUFreq`` core with a table of
33available frequencies due to the possible size of it, so the driver does not do
34that. Some functionality of the core is limited by that.
35
36Since the hardware P-state selection interface used by ``intel_pstate`` is
37available at the logical CPU level, the driver always works with individual
38CPUs. Consequently, if ``intel_pstate`` is in use, every ``CPUFreq`` policy
39object corresponds to one logical CPU and ``CPUFreq`` policies are effectively
40equivalent to CPUs. In particular, this means that they become "inactive" every
41time the corresponding CPU is taken offline and need to be re-initialized when
42it goes back online.
43
44``intel_pstate`` is not modular, so it cannot be unloaded, which means that the
45only way to pass early-configuration-time parameters to it is via the kernel
46command line. However, its configuration can be adjusted via ``sysfs`` to a
47great extent. In some configurations it even is possible to unregister it via
48``sysfs`` which allows another ``CPUFreq`` scaling driver to be loaded and
49registered (see `below <status_attr_>`_).
50
51
52Operation Modes
53===============
54
55``intel_pstate`` can operate in three different modes: in the active mode with
56or without hardware-managed P-states support and in the passive mode. Which of
57them will be in effect depends on what kernel command line options are used and
58on the capabilities of the processor.
59
60Active Mode
61-----------
62
63This is the default operation mode of ``intel_pstate``. If it works in this
64mode, the ``scaling_driver`` policy attribute in ``sysfs`` for all ``CPUFreq``
65policies contains the string "intel_pstate".
66
67In this mode the driver bypasses the scaling governors layer of ``CPUFreq`` and
68provides its own scaling algorithms for P-state selection. Those algorithms
69can be applied to ``CPUFreq`` policies in the same way as generic scaling
70governors (that is, through the ``scaling_governor`` policy attribute in
71``sysfs``). [Note that different P-state selection algorithms may be chosen for
72different policies, but that is not recommended.]
73
74They are not generic scaling governors, but their names are the same as the
75names of some of those governors. Moreover, confusingly enough, they generally
76do not work in the same way as the generic governors they share the names with.
77For example, the ``powersave`` P-state selection algorithm provided by
78``intel_pstate`` is not a counterpart of the generic ``powersave`` governor
79(roughly, it corresponds to the ``schedutil`` and ``ondemand`` governors).
80
81There are two P-state selection algorithms provided by ``intel_pstate`` in the
82active mode: ``powersave`` and ``performance``. The way they both operate
83depends on whether or not the hardware-managed P-states (HWP) feature has been
84enabled in the processor and possibly on the processor model.
85
86Which of the P-state selection algorithms is used by default depends on the
87:c:macro:`CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE` kernel configuration option.
88Namely, if that option is set, the ``performance`` algorithm will be used by
89default, and the other one will be used by default if it is not set.
90
91Active Mode With HWP
92~~~~~~~~~~~~~~~~~~~~
93
94If the processor supports the HWP feature, it will be enabled during the
95processor initialization and cannot be disabled after that. It is possible
96to avoid enabling it by passing the ``intel_pstate=no_hwp`` argument to the
97kernel in the command line.
98
99If the HWP feature has been enabled, ``intel_pstate`` relies on the processor to
100select P-states by itself, but still it can give hints to the processor's
101internal P-state selection logic. What those hints are depends on which P-state
102selection algorithm has been applied to the given policy (or to the CPU it
103corresponds to).
104
105Even though the P-state selection is carried out by the processor automatically,
106``intel_pstate`` registers utilization update callbacks with the CPU scheduler
107in this mode. However, they are not used for running a P-state selection
108algorithm, but for periodic updates of the current CPU frequency information to
109be made available from the ``scaling_cur_freq`` policy attribute in ``sysfs``.
110
111HWP + ``performance``
112.....................
113
114In this configuration ``intel_pstate`` will write 0 to the processor's
115Energy-Performance Preference (EPP) knob (if supported) or its
116Energy-Performance Bias (EPB) knob (otherwise), which means that the processor's
117internal P-state selection logic is expected to focus entirely on performance.
118
119This will override the EPP/EPB setting coming from the ``sysfs`` interface
120(see `Energy vs Performance Hints`_ below).
121
122Also, in this configuration the range of P-states available to the processor's
123internal P-state selection logic is always restricted to the upper boundary
124(that is, the maximum P-state that the driver is allowed to use).
125
126HWP + ``powersave``
127...................
128
129In this configuration ``intel_pstate`` will set the processor's
130Energy-Performance Preference (EPP) knob (if supported) or its
131Energy-Performance Bias (EPB) knob (otherwise) to whatever value it was
132previously set to via ``sysfs`` (or whatever default value it was
133set to by the platform firmware). This usually causes the processor's
134internal P-state selection logic to be less performance-focused.
135
136Active Mode Without HWP
137~~~~~~~~~~~~~~~~~~~~~~~
138
139This is the default operation mode for processors that do not support the HWP
140feature. It also is used by default with the ``intel_pstate=no_hwp`` argument
141in the kernel command line. However, in this mode ``intel_pstate`` may refuse
142to work with the given processor if it does not recognize it. [Note that
143``intel_pstate`` will never refuse to work with any processor with the HWP
144feature enabled.]
145
146In this mode ``intel_pstate`` registers utilization update callbacks with the
147CPU scheduler in order to run a P-state selection algorithm, either
148``powersave`` or ``performance``, depending on the ``scaling_cur_freq`` policy
149setting in ``sysfs``. The current CPU frequency information to be made
150available from the ``scaling_cur_freq`` policy attribute in ``sysfs`` is
151periodically updated by those utilization update callbacks too.
152
153``performance``
154...............
155
156Without HWP, this P-state selection algorithm is always the same regardless of
157the processor model and platform configuration.
158
159It selects the maximum P-state it is allowed to use, subject to limits set via
160``sysfs``, every time the P-state selection computations are carried out by the
161driver's utilization update callback for the given CPU (that does not happen
162more often than every 10 ms), but the hardware configuration will not be changed
163if the new P-state is the same as the current one.
164
165This is the default P-state selection algorithm if the
166:c:macro:`CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE` kernel configuration option
167is set.
168
169``powersave``
170.............
171
172Without HWP, this P-state selection algorithm generally depends on the
173processor model and/or the system profile setting in the ACPI tables and there
174are two variants of it.
175
176One of them is used with processors from the Atom line and (regardless of the
177processor model) on platforms with the system profile in the ACPI tables set to
178"mobile" (laptops mostly), "tablet", "appliance PC", "desktop", or
179"workstation". It is also used with processors supporting the HWP feature if
180that feature has not been enabled (that is, with the ``intel_pstate=no_hwp``
181argument in the kernel command line). It is similar to the algorithm
182implemented by the generic ``schedutil`` scaling governor except that the
183utilization metric used by it is based on numbers coming from feedback
184registers of the CPU. It generally selects P-states proportional to the
185current CPU utilization, so it is referred to as the "proportional" algorithm.
186
187The second variant of the ``powersave`` P-state selection algorithm, used in all
188of the other cases (generally, on processors from the Core line, so it is
189referred to as the "Core" algorithm), is based on the values read from the APERF
190and MPERF feedback registers and the previously requested target P-state.
191It does not really take CPU utilization into account explicitly, but as a rule
192it causes the CPU P-state to ramp up very quickly in response to increased
193utilization which is generally desirable in server environments.
194
195Regardless of the variant, this algorithm is run by the driver's utilization
196update callback for the given CPU when it is invoked by the CPU scheduler, but
197not more often than every 10 ms (that can be tweaked via ``debugfs`` in `this
198particular case <Tuning Interface in debugfs_>`_). Like in the ``performance``
199case, the hardware configuration is not touched if the new P-state turns out to
200be the same as the current one.
201
202This is the default P-state selection algorithm if the
203:c:macro:`CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE` kernel configuration option
204is not set.
205
206Passive Mode
207------------
208
209This mode is used if the ``intel_pstate=passive`` argument is passed to the
210kernel in the command line (it implies the ``intel_pstate=no_hwp`` setting too).
211Like in the active mode without HWP support, in this mode ``intel_pstate`` may
212refuse to work with the given processor if it does not recognize it.
213
214If the driver works in this mode, the ``scaling_driver`` policy attribute in
215``sysfs`` for all ``CPUFreq`` policies contains the string "intel_cpufreq".
216Then, the driver behaves like a regular ``CPUFreq`` scaling driver. That is,
217it is invoked by generic scaling governors when necessary to talk to the
218hardware in order to change the P-state of a CPU (in particular, the
219``schedutil`` governor can invoke it directly from scheduler context).
220
221While in this mode, ``intel_pstate`` can be used with all of the (generic)
222scaling governors listed by the ``scaling_available_governors`` policy attribute
223in ``sysfs`` (and the P-state selection algorithms described above are not
224used). Then, it is responsible for the configuration of policy objects
225corresponding to CPUs and provides the ``CPUFreq`` core (and the scaling
226governors attached to the policy objects) with accurate information on the
227maximum and minimum operating frequencies supported by the hardware (including
228the so-called "turbo" frequency ranges). In other words, in the passive mode
229the entire range of available P-states is exposed by ``intel_pstate`` to the
230``CPUFreq`` core. However, in this mode the driver does not register
231utilization update callbacks with the CPU scheduler and the ``scaling_cur_freq``
232information comes from the ``CPUFreq`` core (and is the last frequency selected
233by the current scaling governor for the given policy).
234
235
236.. _turbo:
237
238Turbo P-states Support
239======================
240
241In the majority of cases, the entire range of P-states available to
242``intel_pstate`` can be divided into two sub-ranges that correspond to
243different types of processor behavior, above and below a boundary that
244will be referred to as the "turbo threshold" in what follows.
245
246The P-states above the turbo threshold are referred to as "turbo P-states" and
247the whole sub-range of P-states they belong to is referred to as the "turbo
248range". These names are related to the Turbo Boost technology allowing a
249multicore processor to opportunistically increase the P-state of one or more
250cores if there is enough power to do that and if that is not going to cause the
251thermal envelope of the processor package to be exceeded.
252
253Specifically, if software sets the P-state of a CPU core within the turbo range
254(that is, above the turbo threshold), the processor is permitted to take over
255performance scaling control for that core and put it into turbo P-states of its
256choice going forward. However, that permission is interpreted differently by
257different processor generations. Namely, the Sandy Bridge generation of
258processors will never use any P-states above the last one set by software for
259the given core, even if it is within the turbo range, whereas all of the later
260processor generations will take it as a license to use any P-states from the
261turbo range, even above the one set by software. In other words, on those
262processors setting any P-state from the turbo range will enable the processor
263to put the given core into all turbo P-states up to and including the maximum
264supported one as it sees fit.
265
266One important property of turbo P-states is that they are not sustainable. More
267precisely, there is no guarantee that any CPUs will be able to stay in any of
268those states indefinitely, because the power distribution within the processor
269package may change over time or the thermal envelope it was designed for might
270be exceeded if a turbo P-state was used for too long.
271
272In turn, the P-states below the turbo threshold generally are sustainable. In
273fact, if one of them is set by software, the processor is not expected to change
274it to a lower one unless in a thermal stress or a power limit violation
275situation (a higher P-state may still be used if it is set for another CPU in
276the same package at the same time, for example).
277
278Some processors allow multiple cores to be in turbo P-states at the same time,
279but the maximum P-state that can be set for them generally depends on the number
280of cores running concurrently. The maximum turbo P-state that can be set for 3
281cores at the same time usually is lower than the analogous maximum P-state for
2822 cores, which in turn usually is lower than the maximum turbo P-state that can
283be set for 1 core. The one-core maximum turbo P-state is thus the maximum
284supported one overall.
285
286The maximum supported turbo P-state, the turbo threshold (the maximum supported
287non-turbo P-state) and the minimum supported P-state are specific to the
288processor model and can be determined by reading the processor's model-specific
289registers (MSRs). Moreover, some processors support the Configurable TDP
290(Thermal Design Power) feature and, when that feature is enabled, the turbo
291threshold effectively becomes a configurable value that can be set by the
292platform firmware.
293
294Unlike ``_PSS`` objects in the ACPI tables, ``intel_pstate`` always exposes
295the entire range of available P-states, including the whole turbo range, to the
296``CPUFreq`` core and (in the passive mode) to generic scaling governors. This
297generally causes turbo P-states to be set more often when ``intel_pstate`` is
298used relative to ACPI-based CPU performance scaling (see `below <acpi-cpufreq_>`_
299for more information).
300
301Moreover, since ``intel_pstate`` always knows what the real turbo threshold is
302(even if the Configurable TDP feature is enabled in the processor), its
303``no_turbo`` attribute in ``sysfs`` (described `below <no_turbo_attr_>`_) should
304work as expected in all cases (that is, if set to disable turbo P-states, it
305always should prevent ``intel_pstate`` from using them).
306
307
308Processor Support
309=================
310
311To handle a given processor ``intel_pstate`` requires a number of different
312pieces of information on it to be known, including:
313
314 * The minimum supported P-state.
315
316 * The maximum supported `non-turbo P-state <turbo_>`_.
317
318 * Whether or not turbo P-states are supported at all.
319
320 * The maximum supported `one-core turbo P-state <turbo_>`_ (if turbo P-states
321 are supported).
322
323 * The scaling formula to translate the driver's internal representation
324 of P-states into frequencies and the other way around.
325
326Generally, ways to obtain that information are specific to the processor model
327or family. Although it often is possible to obtain all of it from the processor
328itself (using model-specific registers), there are cases in which hardware
329manuals need to be consulted to get to it too.
330
331For this reason, there is a list of supported processors in ``intel_pstate`` and
332the driver initialization will fail if the detected processor is not in that
333list, unless it supports the `HWP feature <Active Mode_>`_. [The interface to
334obtain all of the information listed above is the same for all of the processors
335supporting the HWP feature, which is why they all are supported by
336``intel_pstate``.]
337
338
339User Space Interface in ``sysfs``
340=================================
341
342Global Attributes
343-----------------
344
345``intel_pstate`` exposes several global attributes (files) in ``sysfs`` to
346control its functionality at the system level. They are located in the
347``/sys/devices/system/cpu/cpufreq/intel_pstate/`` directory and affect all
348CPUs.
349
350Some of them are not present if the ``intel_pstate=per_cpu_perf_limits``
351argument is passed to the kernel in the command line.
352
353``max_perf_pct``
354 Maximum P-state the driver is allowed to set in percent of the
355 maximum supported performance level (the highest supported `turbo
356 P-state <turbo_>`_).
357
358 This attribute will not be exposed if the
359 ``intel_pstate=per_cpu_perf_limits`` argument is present in the kernel
360 command line.
361
362``min_perf_pct``
363 Minimum P-state the driver is allowed to set in percent of the
364 maximum supported performance level (the highest supported `turbo
365 P-state <turbo_>`_).
366
367 This attribute will not be exposed if the
368 ``intel_pstate=per_cpu_perf_limits`` argument is present in the kernel
369 command line.
370
371``num_pstates``
372 Number of P-states supported by the processor (between 0 and 255
373 inclusive) including both turbo and non-turbo P-states (see
374 `Turbo P-states Support`_).
375
376 The value of this attribute is not affected by the ``no_turbo``
377 setting described `below <no_turbo_attr_>`_.
378
379 This attribute is read-only.
380
381``turbo_pct``
382 Ratio of the `turbo range <turbo_>`_ size to the size of the entire
383 range of supported P-states, in percent.
384
385 This attribute is read-only.
386
387.. _no_turbo_attr:
388
389``no_turbo``
390 If set (equal to 1), the driver is not allowed to set any turbo P-states
391 (see `Turbo P-states Support`_). If unset (equalt to 0, which is the
392 default), turbo P-states can be set by the driver.
393 [Note that ``intel_pstate`` does not support the general ``boost``
394 attribute (supported by some other scaling drivers) which is replaced
395 by this one.]
396
397 This attrubute does not affect the maximum supported frequency value
398 supplied to the ``CPUFreq`` core and exposed via the policy interface,
399 but it affects the maximum possible value of per-policy P-state limits
400 (see `Interpretation of Policy Attributes`_ below for details).
401
402.. _status_attr:
403
404``status``
405 Operation mode of the driver: "active", "passive" or "off".
406
407 "active"
408 The driver is functional and in the `active mode
409 <Active Mode_>`_.
410
411 "passive"
412 The driver is functional and in the `passive mode
413 <Passive Mode_>`_.
414
415 "off"
416 The driver is not functional (it is not registered as a scaling
417 driver with the ``CPUFreq`` core).
418
419 This attribute can be written to in order to change the driver's
420 operation mode or to unregister it. The string written to it must be
421 one of the possible values of it and, if successful, the write will
422 cause the driver to switch over to the operation mode represented by
423 that string - or to be unregistered in the "off" case. [Actually,
424 switching over from the active mode to the passive mode or the other
425 way around causes the driver to be unregistered and registered again
426 with a different set of callbacks, so all of its settings (the global
427 as well as the per-policy ones) are then reset to their default
428 values, possibly depending on the target operation mode.]
429
430 That only is supported in some configurations, though (for example, if
431 the `HWP feature is enabled in the processor <Active Mode With HWP_>`_,
432 the operation mode of the driver cannot be changed), and if it is not
433 supported in the current configuration, writes to this attribute with
434 fail with an appropriate error.
435
436Interpretation of Policy Attributes
437-----------------------------------
438
439The interpretation of some ``CPUFreq`` policy attributes described in
440:doc:`cpufreq` is special with ``intel_pstate`` as the current scaling driver
441and it generally depends on the driver's `operation mode <Operation Modes_>`_.
442
443First of all, the values of the ``cpuinfo_max_freq``, ``cpuinfo_min_freq`` and
444``scaling_cur_freq`` attributes are produced by applying a processor-specific
445multiplier to the internal P-state representation used by ``intel_pstate``.
446Also, the values of the ``scaling_max_freq`` and ``scaling_min_freq``
447attributes are capped by the frequency corresponding to the maximum P-state that
448the driver is allowed to set.
449
450If the ``no_turbo`` `global attribute <no_turbo_attr_>`_ is set, the driver is
451not allowed to use turbo P-states, so the maximum value of ``scaling_max_freq``
452and ``scaling_min_freq`` is limited to the maximum non-turbo P-state frequency.
453Accordingly, setting ``no_turbo`` causes ``scaling_max_freq`` and
454``scaling_min_freq`` to go down to that value if they were above it before.
455However, the old values of ``scaling_max_freq`` and ``scaling_min_freq`` will be
456restored after unsetting ``no_turbo``, unless these attributes have been written
457to after ``no_turbo`` was set.
458
459If ``no_turbo`` is not set, the maximum possible value of ``scaling_max_freq``
460and ``scaling_min_freq`` corresponds to the maximum supported turbo P-state,
461which also is the value of ``cpuinfo_max_freq`` in either case.
462
463Next, the following policy attributes have special meaning if
464``intel_pstate`` works in the `active mode <Active Mode_>`_:
465
466``scaling_available_governors``
467 List of P-state selection algorithms provided by ``intel_pstate``.
468
469``scaling_governor``
470 P-state selection algorithm provided by ``intel_pstate`` currently in
471 use with the given policy.
472
473``scaling_cur_freq``
474 Frequency of the average P-state of the CPU represented by the given
475 policy for the time interval between the last two invocations of the
476 driver's utilization update callback by the CPU scheduler for that CPU.
477
478The meaning of these attributes in the `passive mode <Passive Mode_>`_ is the
479same as for other scaling drivers.
480
481Additionally, the value of the ``scaling_driver`` attribute for ``intel_pstate``
482depends on the operation mode of the driver. Namely, it is either
483"intel_pstate" (in the `active mode <Active Mode_>`_) or "intel_cpufreq" (in the
484`passive mode <Passive Mode_>`_).
485
486Coordination of P-State Limits
487------------------------------
488
489``intel_pstate`` allows P-state limits to be set in two ways: with the help of
490the ``max_perf_pct`` and ``min_perf_pct`` `global attributes
491<Global Attributes_>`_ or via the ``scaling_max_freq`` and ``scaling_min_freq``
492``CPUFreq`` policy attributes. The coordination between those limits is based
493on the following rules, regardless of the current operation mode of the driver:
494
495 1. All CPUs are affected by the global limits (that is, none of them can be
496 requested to run faster than the global maximum and none of them can be
497 requested to run slower than the global minimum).
498
499 2. Each individual CPU is affected by its own per-policy limits (that is, it
500 cannot be requested to run faster than its own per-policy maximum and it
501 cannot be requested to run slower than its own per-policy minimum).
502
503 3. The global and per-policy limits can be set independently.
504
505If the `HWP feature is enabled in the processor <Active Mode With HWP_>`_, the
506resulting effective values are written into its registers whenever the limits
507change in order to request its internal P-state selection logic to always set
508P-states within these limits. Otherwise, the limits are taken into account by
509scaling governors (in the `passive mode <Passive Mode_>`_) and by the driver
510every time before setting a new P-state for a CPU.
511
512Additionally, if the ``intel_pstate=per_cpu_perf_limits`` command line argument
513is passed to the kernel, ``max_perf_pct`` and ``min_perf_pct`` are not exposed
514at all and the only way to set the limits is by using the policy attributes.
515
516
517Energy vs Performance Hints
518---------------------------
519
520If ``intel_pstate`` works in the `active mode with the HWP feature enabled
521<Active Mode With HWP_>`_ in the processor, additional attributes are present
522in every ``CPUFreq`` policy directory in ``sysfs``. They are intended to allow
523user space to help ``intel_pstate`` to adjust the processor's internal P-state
524selection logic by focusing it on performance or on energy-efficiency, or
525somewhere between the two extremes:
526
527``energy_performance_preference``
528 Current value of the energy vs performance hint for the given policy
529 (or the CPU represented by it).
530
531 The hint can be changed by writing to this attribute.
532
533``energy_performance_available_preferences``
534 List of strings that can be written to the
535 ``energy_performance_preference`` attribute.
536
537 They represent different energy vs performance hints and should be
538 self-explanatory, except that ``default`` represents whatever hint
539 value was set by the platform firmware.
540
541Strings written to the ``energy_performance_preference`` attribute are
542internally translated to integer values written to the processor's
543Energy-Performance Preference (EPP) knob (if supported) or its
544Energy-Performance Bias (EPB) knob.
545
546[Note that tasks may by migrated from one CPU to another by the scheduler's
547load-balancing algorithm and if different energy vs performance hints are
548set for those CPUs, that may lead to undesirable outcomes. To avoid such
549issues it is better to set the same energy vs performance hint for all CPUs
550or to pin every task potentially sensitive to them to a specific CPU.]
551
552.. _acpi-cpufreq:
553
554``intel_pstate`` vs ``acpi-cpufreq``
555====================================
556
557On the majority of systems supported by ``intel_pstate``, the ACPI tables
558provided by the platform firmware contain ``_PSS`` objects returning information
559that can be used for CPU performance scaling (refer to the `ACPI specification`_
560for details on the ``_PSS`` objects and the format of the information returned
561by them).
562
563The information returned by the ACPI ``_PSS`` objects is used by the
564``acpi-cpufreq`` scaling driver. On systems supported by ``intel_pstate``
565the ``acpi-cpufreq`` driver uses the same hardware CPU performance scaling
566interface, but the set of P-states it can use is limited by the ``_PSS``
567output.
568
569On those systems each ``_PSS`` object returns a list of P-states supported by
570the corresponding CPU which basically is a subset of the P-states range that can
571be used by ``intel_pstate`` on the same system, with one exception: the whole
572`turbo range <turbo_>`_ is represented by one item in it (the topmost one). By
573convention, the frequency returned by ``_PSS`` for that item is greater by 1 MHz
574than the frequency of the highest non-turbo P-state listed by it, but the
575corresponding P-state representation (following the hardware specification)
576returned for it matches the maximum supported turbo P-state (or is the
577special value 255 meaning essentially "go as high as you can get").
578
579The list of P-states returned by ``_PSS`` is reflected by the table of
580available frequencies supplied by ``acpi-cpufreq`` to the ``CPUFreq`` core and
581scaling governors and the minimum and maximum supported frequencies reported by
582it come from that list as well. In particular, given the special representation
583of the turbo range described above, this means that the maximum supported
584frequency reported by ``acpi-cpufreq`` is higher by 1 MHz than the frequency
585of the highest supported non-turbo P-state listed by ``_PSS`` which, of course,
586affects decisions made by the scaling governors, except for ``powersave`` and
587``performance``.
588
589For example, if a given governor attempts to select a frequency proportional to
590estimated CPU load and maps the load of 100% to the maximum supported frequency
591(possibly multiplied by a constant), then it will tend to choose P-states below
592the turbo threshold if ``acpi-cpufreq`` is used as the scaling driver, because
593in that case the turbo range corresponds to a small fraction of the frequency
594band it can use (1 MHz vs 1 GHz or more). In consequence, it will only go to
595the turbo range for the highest loads and the other loads above 50% that might
596benefit from running at turbo frequencies will be given non-turbo P-states
597instead.
598
599One more issue related to that may appear on systems supporting the
600`Configurable TDP feature <turbo_>`_ allowing the platform firmware to set the
601turbo threshold. Namely, if that is not coordinated with the lists of P-states
602returned by ``_PSS`` properly, there may be more than one item corresponding to
603a turbo P-state in those lists and there may be a problem with avoiding the
604turbo range (if desirable or necessary). Usually, to avoid using turbo
605P-states overall, ``acpi-cpufreq`` simply avoids using the topmost state listed
606by ``_PSS``, but that is not sufficient when there are other turbo P-states in
607the list returned by it.
608
609Apart from the above, ``acpi-cpufreq`` works like ``intel_pstate`` in the
610`passive mode <Passive Mode_>`_, except that the number of P-states it can set
611is limited to the ones listed by the ACPI ``_PSS`` objects.
612
613
614Kernel Command Line Options for ``intel_pstate``
615================================================
616
617Several kernel command line options can be used to pass early-configuration-time
618parameters to ``intel_pstate`` in order to enforce specific behavior of it. All
619of them have to be prepended with the ``intel_pstate=`` prefix.
620
621``disable``
622 Do not register ``intel_pstate`` as the scaling driver even if the
623 processor is supported by it.
624
625``passive``
626 Register ``intel_pstate`` in the `passive mode <Passive Mode_>`_ to
627 start with.
628
629 This option implies the ``no_hwp`` one described below.
630
631``force``
632 Register ``intel_pstate`` as the scaling driver instead of
633 ``acpi-cpufreq`` even if the latter is preferred on the given system.
634
635 This may prevent some platform features (such as thermal controls and
636 power capping) that rely on the availability of ACPI P-states
637 information from functioning as expected, so it should be used with
638 caution.
639
640 This option does not work with processors that are not supported by
641 ``intel_pstate`` and on platforms where the ``pcc-cpufreq`` scaling
642 driver is used instead of ``acpi-cpufreq``.
643
644``no_hwp``
645 Do not enable the `hardware-managed P-states (HWP) feature
646 <Active Mode With HWP_>`_ even if it is supported by the processor.
647
648``hwp_only``
649 Register ``intel_pstate`` as the scaling driver only if the
650 `hardware-managed P-states (HWP) feature <Active Mode With HWP_>`_ is
651 supported by the processor.
652
653``support_acpi_ppc``
654 Take ACPI ``_PPC`` performance limits into account.
655
656 If the preferred power management profile in the FADT (Fixed ACPI
657 Description Table) is set to "Enterprise Server" or "Performance
658 Server", the ACPI ``_PPC`` limits are taken into account by default
659 and this option has no effect.
660
661``per_cpu_perf_limits``
662 Use per-logical-CPU P-State limits (see `Coordination of P-state
663 Limits`_ for details).
664
665
666Diagnostics and Tuning
667======================
668
669Trace Events
670------------
671
672There are two static trace events that can be used for ``intel_pstate``
673diagnostics. One of them is the ``cpu_frequency`` trace event generally used
674by ``CPUFreq``, and the other one is the ``pstate_sample`` trace event specific
675to ``intel_pstate``. Both of them are triggered by ``intel_pstate`` only if
676it works in the `active mode <Active Mode_>`_.
677
678The following sequence of shell commands can be used to enable them and see
679their output (if the kernel is generally configured to support event tracing)::
680
681 # cd /sys/kernel/debug/tracing/
682 # echo 1 > events/power/pstate_sample/enable
683 # echo 1 > events/power/cpu_frequency/enable
684 # cat trace
685 gnome-terminal--4510 [001] ..s. 1177.680733: pstate_sample: core_busy=107 scaled=94 from=26 to=26 mperf=1143818 aperf=1230607 tsc=29838618 freq=2474476
686 cat-5235 [002] ..s. 1177.681723: cpu_frequency: state=2900000 cpu_id=2
687
688If ``intel_pstate`` works in the `passive mode <Passive Mode_>`_, the
689``cpu_frequency`` trace event will be triggered either by the ``schedutil``
690scaling governor (for the policies it is attached to), or by the ``CPUFreq``
691core (for the policies with other scaling governors).
692
693``ftrace``
694----------
695
696The ``ftrace`` interface can be used for low-level diagnostics of
697``intel_pstate``. For example, to check how often the function to set a
698P-state is called, the ``ftrace`` filter can be set to to
699:c:func:`intel_pstate_set_pstate`::
700
701 # cd /sys/kernel/debug/tracing/
702 # cat available_filter_functions | grep -i pstate
703 intel_pstate_set_pstate
704 intel_pstate_cpu_init
705 ...
706 # echo intel_pstate_set_pstate > set_ftrace_filter
707 # echo function > current_tracer
708 # cat trace | head -15
709 # tracer: function
710 #
711 # entries-in-buffer/entries-written: 80/80 #P:4
712 #
713 # _-----=> irqs-off
714 # / _----=> need-resched
715 # | / _---=> hardirq/softirq
716 # || / _--=> preempt-depth
717 # ||| / delay
718 # TASK-PID CPU# |||| TIMESTAMP FUNCTION
719 # | | | |||| | |
720 Xorg-3129 [000] ..s. 2537.644844: intel_pstate_set_pstate <-intel_pstate_timer_func
721 gnome-terminal--4510 [002] ..s. 2537.649844: intel_pstate_set_pstate <-intel_pstate_timer_func
722 gnome-shell-3409 [001] ..s. 2537.650850: intel_pstate_set_pstate <-intel_pstate_timer_func
723 <idle>-0 [000] ..s. 2537.654843: intel_pstate_set_pstate <-intel_pstate_timer_func
724
725Tuning Interface in ``debugfs``
726-------------------------------
727
728The ``powersave`` algorithm provided by ``intel_pstate`` for `the Core line of
729processors in the active mode <powersave_>`_ is based on a `PID controller`_
730whose parameters were chosen to address a number of different use cases at the
731same time. However, it still is possible to fine-tune it to a specific workload
732and the ``debugfs`` interface under ``/sys/kernel/debug/pstate_snb/`` is
733provided for this purpose. [Note that the ``pstate_snb`` directory will be
734present only if the specific P-state selection algorithm matching the interface
735in it actually is in use.]
736
737The following files present in that directory can be used to modify the PID
738controller parameters at run time:
739
740| ``deadband``
741| ``d_gain_pct``
742| ``i_gain_pct``
743| ``p_gain_pct``
744| ``sample_rate_ms``
745| ``setpoint``
746
747Note, however, that achieving desirable results this way generally requires
748expert-level understanding of the power vs performance tradeoff, so extra care
749is recommended when attempting to do that.
750
751
752.. _LCEU2015: http://events.linuxfoundation.org/sites/events/files/slides/LinuxConEurope_2015.pdf
753.. _SDM: http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-system-programming-manual-325384.html
754.. _ACPI specification: http://www.uefi.org/sites/default/files/resources/ACPI_6_1.pdf
755.. _PID controller: https://en.wikipedia.org/wiki/PID_controller
diff --git a/Documentation/cpu-freq/intel-pstate.txt b/Documentation/cpu-freq/intel-pstate.txt
deleted file mode 100644
index 3fdcdfd968ba..000000000000
--- a/Documentation/cpu-freq/intel-pstate.txt
+++ /dev/null
@@ -1,281 +0,0 @@
1Intel P-State driver
2--------------------
3
4This driver provides an interface to control the P-State selection for the
5SandyBridge+ Intel processors.
6
7The following document explains P-States:
8http://events.linuxfoundation.org/sites/events/files/slides/LinuxConEurope_2015.pdf
9As stated in the document, P-State doesn’t exactly mean a frequency. However, for
10the sake of the relationship with cpufreq, P-State and frequency are used
11interchangeably.
12
13Understanding the cpufreq core governors and policies are important before
14discussing more details about the Intel P-State driver. Based on what callbacks
15a cpufreq driver provides to the cpufreq core, it can support two types of
16drivers:
17- with target_index() callback: In this mode, the drivers using cpufreq core
18simply provide the minimum and maximum frequency limits and an additional
19interface target_index() to set the current frequency. The cpufreq subsystem
20has a number of scaling governors ("performance", "powersave", "ondemand",
21etc.). Depending on which governor is in use, cpufreq core will call for
22transitions to a specific frequency using target_index() callback.
23- setpolicy() callback: In this mode, drivers do not provide target_index()
24callback, so cpufreq core can't request a transition to a specific frequency.
25The driver provides minimum and maximum frequency limits and callbacks to set a
26policy. The policy in cpufreq sysfs is referred to as the "scaling governor".
27The cpufreq core can request the driver to operate in any of the two policies:
28"performance" and "powersave". The driver decides which frequency to use based
29on the above policy selection considering minimum and maximum frequency limits.
30
31The Intel P-State driver falls under the latter category, which implements the
32setpolicy() callback. This driver decides what P-State to use based on the
33requested policy from the cpufreq core. If the processor is capable of
34selecting its next P-State internally, then the driver will offload this
35responsibility to the processor (aka HWP: Hardware P-States). If not, the
36driver implements algorithms to select the next P-State.
37
38Since these policies are implemented in the driver, they are not same as the
39cpufreq scaling governors implementation, even if they have the same name in
40the cpufreq sysfs (scaling_governors). For example the "performance" policy is
41similar to cpufreq’s "performance" governor, but "powersave" is completely
42different than the cpufreq "powersave" governor. The strategy here is similar
43to cpufreq "ondemand", where the requested P-State is related to the system load.
44
45Sysfs Interface
46
47In addition to the frequency-controlling interfaces provided by the cpufreq
48core, the driver provides its own sysfs files to control the P-State selection.
49These files have been added to /sys/devices/system/cpu/intel_pstate/.
50Any changes made to these files are applicable to all CPUs (even in a
51multi-package system, Refer to later section on placing "Per-CPU limits").
52
53 max_perf_pct: Limits the maximum P-State that will be requested by
54 the driver. It states it as a percentage of the available performance. The
55 available (P-State) performance may be reduced by the no_turbo
56 setting described below.
57
58 min_perf_pct: Limits the minimum P-State that will be requested by
59 the driver. It states it as a percentage of the max (non-turbo)
60 performance level.
61
62 no_turbo: Limits the driver to selecting P-State below the turbo
63 frequency range.
64
65 turbo_pct: Displays the percentage of the total performance that
66 is supported by hardware that is in the turbo range. This number
67 is independent of whether turbo has been disabled or not.
68
69 num_pstates: Displays the number of P-States that are supported
70 by hardware. This number is independent of whether turbo has
71 been disabled or not.
72
73For example, if a system has these parameters:
74 Max 1 core turbo ratio: 0x21 (Max 1 core ratio is the maximum P-State)
75 Max non turbo ratio: 0x17
76 Minimum ratio : 0x08 (Here the ratio is called max efficiency ratio)
77
78Sysfs will show :
79 max_perf_pct:100, which corresponds to 1 core ratio
80 min_perf_pct:24, max_efficiency_ratio / max 1 Core ratio
81 no_turbo:0, turbo is not disabled
82 num_pstates:26 = (max 1 Core ratio - Max Efficiency Ratio + 1)
83 turbo_pct:39 = (max 1 core ratio - max non turbo ratio) / num_pstates
84
85Refer to "Intel® 64 and IA-32 Architectures Software Developer’s Manual
86Volume 3: System Programming Guide" to understand ratios.
87
88There is one more sysfs attribute in /sys/devices/system/cpu/intel_pstate/
89that can be used for controlling the operation mode of the driver:
90
91 status: Three settings are possible:
92 "off" - The driver is not in use at this time.
93 "active" - The driver works as a P-state governor (default).
94 "passive" - The driver works as a regular cpufreq one and collaborates
95 with the generic cpufreq governors (it sets P-states as
96 requested by those governors).
97 The current setting is returned by reads from this attribute. Writing one
98 of the above strings to it changes the operation mode as indicated by that
99 string, if possible. If HW-managed P-states (HWP) are enabled, it is not
100 possible to change the driver's operation mode and attempts to write to
101 this attribute will fail.
102
103cpufreq sysfs for Intel P-State
104
105Since this driver registers with cpufreq, cpufreq sysfs is also presented.
106There are some important differences, which need to be considered.
107
108scaling_cur_freq: This displays the real frequency which was used during
109the last sample period instead of what is requested. Some other cpufreq driver,
110like acpi-cpufreq, displays what is requested (Some changes are on the
111way to fix this for acpi-cpufreq driver). The same is true for frequencies
112displayed at /proc/cpuinfo.
113
114scaling_governor: This displays current active policy. Since each CPU has a
115cpufreq sysfs, it is possible to set a scaling governor to each CPU. But this
116is not possible with Intel P-States, as there is one common policy for all
117CPUs. Here, the last requested policy will be applicable to all CPUs. It is
118suggested that one use the cpupower utility to change policy to all CPUs at the
119same time.
120
121scaling_setspeed: This attribute can never be used with Intel P-State.
122
123scaling_max_freq/scaling_min_freq: This interface can be used similarly to
124the max_perf_pct/min_perf_pct of Intel P-State sysfs. However since frequencies
125are converted to nearest possible P-State, this is prone to rounding errors.
126This method is not preferred to limit performance.
127
128affected_cpus: Not used
129related_cpus: Not used
130
131For contemporary Intel processors, the frequency is controlled by the
132processor itself and the P-State exposed to software is related to
133performance levels. The idea that frequency can be set to a single
134frequency is fictional for Intel Core processors. Even if the scaling
135driver selects a single P-State, the actual frequency the processor
136will run at is selected by the processor itself.
137
138Per-CPU limits
139
140The kernel command line option "intel_pstate=per_cpu_perf_limits" forces
141the intel_pstate driver to use per-CPU performance limits. When it is set,
142the sysfs control interface described above is subject to limitations.
143- The following controls are not available for both read and write
144 /sys/devices/system/cpu/intel_pstate/max_perf_pct
145 /sys/devices/system/cpu/intel_pstate/min_perf_pct
146- The following controls can be used to set performance limits, as far as the
147architecture of the processor permits:
148 /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
149 /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq
150 /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
151- User can still observe turbo percent and number of P-States from
152 /sys/devices/system/cpu/intel_pstate/turbo_pct
153 /sys/devices/system/cpu/intel_pstate/num_pstates
154- User can read write system wide turbo status
155 /sys/devices/system/cpu/no_turbo
156
157Support of energy performance hints
158It is possible to provide hints to the HWP algorithms in the processor
159to be more performance centric to more energy centric. When the driver
160is using HWP, two additional cpufreq sysfs attributes are presented for
161each logical CPU.
162These attributes are:
163 - energy_performance_available_preferences
164 - energy_performance_preference
165
166To get list of supported hints:
167$ cat energy_performance_available_preferences
168 default performance balance_performance balance_power power
169
170The current preference can be read or changed via cpufreq sysfs
171attribute "energy_performance_preference". Reading from this attribute
172will display current effective setting. User can write any of the valid
173preference string to this attribute. User can always restore to power-on
174default by writing "default".
175
176Since threads can migrate to different CPUs, this is possible that the
177new CPU may have different energy performance preference than the previous
178one. To avoid such issues, either threads can be pinned to specific CPUs
179or set the same energy performance preference value to all CPUs.
180
181Tuning Intel P-State driver
182
183When the performance can be tuned using PID (Proportional Integral
184Derivative) controller, debugfs files are provided for adjusting performance.
185They are presented under:
186/sys/kernel/debug/pstate_snb/
187
188The PID tunable parameters are:
189 deadband
190 d_gain_pct
191 i_gain_pct
192 p_gain_pct
193 sample_rate_ms
194 setpoint
195
196To adjust these parameters, some understanding of driver implementation is
197necessary. There are some tweeks described here, but be very careful. Adjusting
198them requires expert level understanding of power and performance relationship.
199These limits are only useful when the "powersave" policy is active.
200
201-To make the system more responsive to load changes, sample_rate_ms can
202be adjusted (current default is 10ms).
203-To make the system use higher performance, even if the load is lower, setpoint
204can be adjusted to a lower number. This will also lead to faster ramp up time
205to reach the maximum P-State.
206If there are no derivative and integral coefficients, The next P-State will be
207equal to:
208 current P-State - ((setpoint - current cpu load) * p_gain_pct)
209
210For example, if the current PID parameters are (Which are defaults for the core
211processors like SandyBridge):
212 deadband = 0
213 d_gain_pct = 0
214 i_gain_pct = 0
215 p_gain_pct = 20
216 sample_rate_ms = 10
217 setpoint = 97
218
219If the current P-State = 0x08 and current load = 100, this will result in the
220next P-State = 0x08 - ((97 - 100) * 0.2) = 8.6 (rounded to 9). Here the P-State
221goes up by only 1. If during next sample interval the current load doesn't
222change and still 100, then P-State goes up by one again. This process will
223continue as long as the load is more than the setpoint until the maximum P-State
224is reached.
225
226For the same load at setpoint = 60, this will result in the next P-State
227= 0x08 - ((60 - 100) * 0.2) = 16
228So by changing the setpoint from 97 to 60, there is an increase of the
229next P-State from 9 to 16. So this will make processor execute at higher
230P-State for the same CPU load. If the load continues to be more than the
231setpoint during next sample intervals, then P-State will go up again till the
232maximum P-State is reached. But the ramp up time to reach the maximum P-State
233will be much faster when the setpoint is 60 compared to 97.
234
235Debugging Intel P-State driver
236
237Event tracing
238To debug P-State transition, the Linux event tracing interface can be used.
239There are two specific events, which can be enabled (Provided the kernel
240configs related to event tracing are enabled).
241
242# cd /sys/kernel/debug/tracing/
243# echo 1 > events/power/pstate_sample/enable
244# echo 1 > events/power/cpu_frequency/enable
245# cat trace
246gnome-terminal--4510 [001] ..s. 1177.680733: pstate_sample: core_busy=107
247 scaled=94 from=26 to=26 mperf=1143818 aperf=1230607 tsc=29838618
248 freq=2474476
249cat-5235 [002] ..s. 1177.681723: cpu_frequency: state=2900000 cpu_id=2
250
251
252Using ftrace
253
254If function level tracing is required, the Linux ftrace interface can be used.
255For example if we want to check how often a function to set a P-State is
256called, we can set ftrace filter to intel_pstate_set_pstate.
257
258# cd /sys/kernel/debug/tracing/
259# cat available_filter_functions | grep -i pstate
260intel_pstate_set_pstate
261intel_pstate_cpu_init
262...
263
264# echo intel_pstate_set_pstate > set_ftrace_filter
265# echo function > current_tracer
266# cat trace | head -15
267# tracer: function
268#
269# entries-in-buffer/entries-written: 80/80 #P:4
270#
271# _-----=> irqs-off
272# / _----=> need-resched
273# | / _---=> hardirq/softirq
274# || / _--=> preempt-depth
275# ||| / delay
276# TASK-PID CPU# |||| TIMESTAMP FUNCTION
277# | | | |||| | |
278 Xorg-3129 [000] ..s. 2537.644844: intel_pstate_set_pstate <-intel_pstate_timer_func
279 gnome-terminal--4510 [002] ..s. 2537.649844: intel_pstate_set_pstate <-intel_pstate_timer_func
280 gnome-shell-3409 [001] ..s. 2537.650850: intel_pstate_set_pstate <-intel_pstate_timer_func
281 <idle>-0 [000] ..s. 2537.654843: intel_pstate_set_pstate <-intel_pstate_timer_func
diff --git a/Documentation/devicetree/bindings/clock/sunxi-ccu.txt b/Documentation/devicetree/bindings/clock/sunxi-ccu.txt
index e9c5a1d9834a..f465647a4dd2 100644
--- a/Documentation/devicetree/bindings/clock/sunxi-ccu.txt
+++ b/Documentation/devicetree/bindings/clock/sunxi-ccu.txt
@@ -22,7 +22,8 @@ Required properties :
22- #clock-cells : must contain 1 22- #clock-cells : must contain 1
23- #reset-cells : must contain 1 23- #reset-cells : must contain 1
24 24
25For the PRCM CCUs on H3/A64, one more clock is needed: 25For the PRCM CCUs on H3/A64, two more clocks are needed:
26- "pll-periph": the SoC's peripheral PLL from the main CCU
26- "iosc": the SoC's internal frequency oscillator 27- "iosc": the SoC's internal frequency oscillator
27 28
28Example for generic CCU: 29Example for generic CCU:
@@ -39,8 +40,8 @@ Example for PRCM CCU:
39r_ccu: clock@01f01400 { 40r_ccu: clock@01f01400 {
40 compatible = "allwinner,sun50i-a64-r-ccu"; 41 compatible = "allwinner,sun50i-a64-r-ccu";
41 reg = <0x01f01400 0x100>; 42 reg = <0x01f01400 0x100>;
42 clocks = <&osc24M>, <&osc32k>, <&iosc>; 43 clocks = <&osc24M>, <&osc32k>, <&iosc>, <&ccu CLK_PLL_PERIPH0>;
43 clock-names = "hosc", "losc", "iosc"; 44 clock-names = "hosc", "losc", "iosc", "pll-periph";
44 #clock-cells = <1>; 45 #clock-cells = <1>;
45 #reset-cells = <1>; 46 #reset-cells = <1>;
46}; 47};
diff --git a/Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt b/Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt
index 00ea670b8c4d..06668bca7ffc 100644
--- a/Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt
+++ b/Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt
@@ -78,6 +78,7 @@ graph bindings specified in Documentation/devicetree/bindings/graph.txt.
78 remote endpoint phandle should be a reference to a valid mipi_dsi_host device 78 remote endpoint phandle should be a reference to a valid mipi_dsi_host device
79 node. 79 node.
80- Video port 1 for the HDMI output 80- Video port 1 for the HDMI output
81- Audio port 2 for the HDMI audio input
81 82
82 83
83Example 84Example
@@ -112,5 +113,12 @@ Example
112 remote-endpoint = <&hdmi_connector_in>; 113 remote-endpoint = <&hdmi_connector_in>;
113 }; 114 };
114 }; 115 };
116
117 port@2 {
118 reg = <2>;
119 codec_endpoint: endpoint {
120 remote-endpoint = <&i2s0_cpu_endpoint>;
121 };
122 };
115 }; 123 };
116 }; 124 };
diff --git a/Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.txt b/Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.txt
index f6b3f36d422b..81b68580e199 100644
--- a/Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.txt
+++ b/Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.txt
@@ -25,7 +25,8 @@ Required properties:
25- clock-names: Shall contain "iahb" and "isfr" as defined in dw_hdmi.txt. 25- clock-names: Shall contain "iahb" and "isfr" as defined in dw_hdmi.txt.
26- ports: See dw_hdmi.txt. The DWC HDMI shall have one port numbered 0 26- ports: See dw_hdmi.txt. The DWC HDMI shall have one port numbered 0
27 corresponding to the video input of the controller and one port numbered 1 27 corresponding to the video input of the controller and one port numbered 1
28 corresponding to its HDMI output. Each port shall have a single endpoint. 28 corresponding to its HDMI output, and one port numbered 2 corresponding to
29 sound input of the controller. Each port shall have a single endpoint.
29 30
30Optional properties: 31Optional properties:
31 32
@@ -59,6 +60,12 @@ Example:
59 remote-endpoint = <&hdmi0_con>; 60 remote-endpoint = <&hdmi0_con>;
60 }; 61 };
61 }; 62 };
63 port@2 {
64 reg = <2>;
65 rcar_dw_hdmi0_sound_in: endpoint {
66 remote-endpoint = <&hdmi_sound_out>;
67 };
68 };
62 }; 69 };
63 }; 70 };
64 71
diff --git a/Documentation/devicetree/bindings/gpio/gpio-mvebu.txt b/Documentation/devicetree/bindings/gpio/gpio-mvebu.txt
index 42c3bb2d53e8..01e331a5f3e7 100644
--- a/Documentation/devicetree/bindings/gpio/gpio-mvebu.txt
+++ b/Documentation/devicetree/bindings/gpio/gpio-mvebu.txt
@@ -41,9 +41,9 @@ Required properties:
41Optional properties: 41Optional properties:
42 42
43In order to use the GPIO lines in PWM mode, some additional optional 43In order to use the GPIO lines in PWM mode, some additional optional
44properties are required. Only Armada 370 and XP support these properties. 44properties are required.
45 45
46- compatible: Must contain "marvell,armada-370-xp-gpio" 46- compatible: Must contain "marvell,armada-370-gpio"
47 47
48- reg: an additional register set is needed, for the GPIO Blink 48- reg: an additional register set is needed, for the GPIO Blink
49 Counter on/off registers. 49 Counter on/off registers.
@@ -71,7 +71,7 @@ Example:
71 }; 71 };
72 72
73 gpio1: gpio@18140 { 73 gpio1: gpio@18140 {
74 compatible = "marvell,armada-370-xp-gpio"; 74 compatible = "marvell,armada-370-gpio";
75 reg = <0x18140 0x40>, <0x181c8 0x08>; 75 reg = <0x18140 0x40>, <0x181c8 0x08>;
76 reg-names = "gpio", "pwm"; 76 reg-names = "gpio", "pwm";
77 ngpios = <17>; 77 ngpios = <17>;
diff --git a/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt b/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
index 6db22103e2dd..025cf8c9324a 100644
--- a/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
+++ b/Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
@@ -36,7 +36,7 @@ Optional properties:
36 control gpios 36 control gpios
37 37
38 - threshold: allows setting the "click"-threshold in the range 38 - threshold: allows setting the "click"-threshold in the range
39 from 20 to 80. 39 from 0 to 80.
40 40
41 - gain: allows setting the sensitivity in the range from 0 to 41 - gain: allows setting the sensitivity in the range from 0 to
42 31. Note that lower values indicate higher 42 31. Note that lower values indicate higher
diff --git a/Documentation/devicetree/bindings/mfd/hisilicon,hi655x.txt b/Documentation/devicetree/bindings/mfd/hisilicon,hi655x.txt
index 05485699d70e..9630ac0e4b56 100644
--- a/Documentation/devicetree/bindings/mfd/hisilicon,hi655x.txt
+++ b/Documentation/devicetree/bindings/mfd/hisilicon,hi655x.txt
@@ -16,6 +16,11 @@ Required properties:
16- reg: Base address of PMIC on Hi6220 SoC. 16- reg: Base address of PMIC on Hi6220 SoC.
17- interrupt-controller: Hi655x has internal IRQs (has own IRQ domain). 17- interrupt-controller: Hi655x has internal IRQs (has own IRQ domain).
18- pmic-gpios: The GPIO used by PMIC IRQ. 18- pmic-gpios: The GPIO used by PMIC IRQ.
19- #clock-cells: From common clock binding; shall be set to 0
20
21Optional properties:
22- clock-output-names: From common clock binding to override the
23 default output clock name
19 24
20Example: 25Example:
21 pmic: pmic@f8000000 { 26 pmic: pmic@f8000000 {
@@ -24,4 +29,5 @@ Example:
24 interrupt-controller; 29 interrupt-controller;
25 #interrupt-cells = <2>; 30 #interrupt-cells = <2>;
26 pmic-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; 31 pmic-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
32 #clock-cells = <0>;
27 } 33 }
diff --git a/Documentation/devicetree/bindings/mfd/stm32-timers.txt b/Documentation/devicetree/bindings/mfd/stm32-timers.txt
index bbd083f5600a..1db6e0057a63 100644
--- a/Documentation/devicetree/bindings/mfd/stm32-timers.txt
+++ b/Documentation/devicetree/bindings/mfd/stm32-timers.txt
@@ -31,7 +31,7 @@ Example:
31 compatible = "st,stm32-timers"; 31 compatible = "st,stm32-timers";
32 reg = <0x40010000 0x400>; 32 reg = <0x40010000 0x400>;
33 clocks = <&rcc 0 160>; 33 clocks = <&rcc 0 160>;
34 clock-names = "clk_int"; 34 clock-names = "int";
35 35
36 pwm { 36 pwm {
37 compatible = "st,stm32-pwm"; 37 compatible = "st,stm32-pwm";
diff --git a/Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt b/Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt
index e25436861867..9029b45b8a22 100644
--- a/Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt
+++ b/Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt
@@ -18,6 +18,8 @@ Optional properties:
18 "ext_clock" (External clock provided to the card). 18 "ext_clock" (External clock provided to the card).
19- post-power-on-delay-ms : Delay in ms after powering the card and 19- post-power-on-delay-ms : Delay in ms after powering the card and
20 de-asserting the reset-gpios (if any) 20 de-asserting the reset-gpios (if any)
21- power-off-delay-us : Delay in us after asserting the reset-gpios (if any)
22 during power off of the card.
21 23
22Example: 24Example:
23 25
diff --git a/Documentation/devicetree/bindings/net/dsa/b53.txt b/Documentation/devicetree/bindings/net/dsa/b53.txt
index d6c6e41648d4..8ec2ca21adeb 100644
--- a/Documentation/devicetree/bindings/net/dsa/b53.txt
+++ b/Documentation/devicetree/bindings/net/dsa/b53.txt
@@ -34,7 +34,7 @@ Required properties:
34 "brcm,bcm6328-switch" 34 "brcm,bcm6328-switch"
35 "brcm,bcm6368-switch" and the mandatory "brcm,bcm63xx-switch" 35 "brcm,bcm6368-switch" and the mandatory "brcm,bcm63xx-switch"
36 36
37See Documentation/devicetree/bindings/dsa/dsa.txt for a list of additional 37See Documentation/devicetree/bindings/net/dsa/dsa.txt for a list of additional
38required and optional properties. 38required and optional properties.
39 39
40Examples: 40Examples:
diff --git a/Documentation/devicetree/bindings/net/dsa/marvell.txt b/Documentation/devicetree/bindings/net/dsa/marvell.txt
index 7ef9dbb08957..1d4d0f49c9d0 100644
--- a/Documentation/devicetree/bindings/net/dsa/marvell.txt
+++ b/Documentation/devicetree/bindings/net/dsa/marvell.txt
@@ -26,6 +26,10 @@ Optional properties:
26- interrupt-controller : Indicates the switch is itself an interrupt 26- interrupt-controller : Indicates the switch is itself an interrupt
27 controller. This is used for the PHY interrupts. 27 controller. This is used for the PHY interrupts.
28#interrupt-cells = <2> : Controller uses two cells, number and flag 28#interrupt-cells = <2> : Controller uses two cells, number and flag
29- eeprom-length : Set to the length of an EEPROM connected to the
30 switch. Must be set if the switch can not detect
31 the presence and/or size of a connected EEPROM,
32 otherwise optional.
29- mdio : Container of PHY and devices on the switches MDIO 33- mdio : Container of PHY and devices on the switches MDIO
30 bus. 34 bus.
31- mdio? : Container of PHYs and devices on the external MDIO 35- mdio? : Container of PHYs and devices on the external MDIO
diff --git a/Documentation/devicetree/bindings/net/fsl-fec.txt b/Documentation/devicetree/bindings/net/fsl-fec.txt
index a1e3693cca16..6f55bdd52f8a 100644
--- a/Documentation/devicetree/bindings/net/fsl-fec.txt
+++ b/Documentation/devicetree/bindings/net/fsl-fec.txt
@@ -15,6 +15,10 @@ Optional properties:
15- phy-reset-active-high : If present then the reset sequence using the GPIO 15- phy-reset-active-high : If present then the reset sequence using the GPIO
16 specified in the "phy-reset-gpios" property is reversed (H=reset state, 16 specified in the "phy-reset-gpios" property is reversed (H=reset state,
17 L=operation state). 17 L=operation state).
18- phy-reset-post-delay : Post reset delay in milliseconds. If present then
19 a delay of phy-reset-post-delay milliseconds will be observed after the
20 phy-reset-gpios has been toggled. Can be omitted thus no delay is
21 observed. Delay is in range of 1ms to 1000ms. Other delays are invalid.
18- phy-supply : regulator that powers the Ethernet PHY. 22- phy-supply : regulator that powers the Ethernet PHY.
19- phy-handle : phandle to the PHY device connected to this device. 23- phy-handle : phandle to the PHY device connected to this device.
20- fixed-link : Assume a fixed link. See fixed-link.txt in the same directory. 24- fixed-link : Assume a fixed link. See fixed-link.txt in the same directory.
diff --git a/Documentation/devicetree/bindings/net/smsc911x.txt b/Documentation/devicetree/bindings/net/smsc911x.txt
index 16c3a9501f5d..acfafc8e143c 100644
--- a/Documentation/devicetree/bindings/net/smsc911x.txt
+++ b/Documentation/devicetree/bindings/net/smsc911x.txt
@@ -27,6 +27,7 @@ Optional properties:
27 of the device. On many systems this is wired high so the device goes 27 of the device. On many systems this is wired high so the device goes
28 out of reset at power-on, but if it is under program control, this 28 out of reset at power-on, but if it is under program control, this
29 optional GPIO can wake up in response to it. 29 optional GPIO can wake up in response to it.
30- vdd33a-supply, vddvario-supply : 3.3V analog and IO logic power supplies
30 31
31Examples: 32Examples:
32 33
diff --git a/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt b/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
index 71a3c134af1b..f01d154090da 100644
--- a/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
+++ b/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
@@ -247,7 +247,6 @@ bias-bus-hold - latch weakly
247bias-pull-up - pull up the pin 247bias-pull-up - pull up the pin
248bias-pull-down - pull down the pin 248bias-pull-down - pull down the pin
249bias-pull-pin-default - use pin-default pull state 249bias-pull-pin-default - use pin-default pull state
250bi-directional - pin supports simultaneous input/output operations
251drive-push-pull - drive actively high and low 250drive-push-pull - drive actively high and low
252drive-open-drain - drive with open drain 251drive-open-drain - drive with open drain
253drive-open-source - drive with open source 252drive-open-source - drive with open source
@@ -260,7 +259,6 @@ input-debounce - debounce mode with debound time X
260power-source - select between different power supplies 259power-source - select between different power supplies
261low-power-enable - enable low power mode 260low-power-enable - enable low power mode
262low-power-disable - disable low power mode 261low-power-disable - disable low power mode
263output-enable - enable output on pin regardless of output value
264output-low - set the pin to output mode with low level 262output-low - set the pin to output mode with low level
265output-high - set the pin to output mode with high level 263output-high - set the pin to output mode with high level
266slew-rate - set the slew rate 264slew-rate - set the slew rate
diff --git a/Documentation/devicetree/bindings/sound/audio-graph-card.txt b/Documentation/devicetree/bindings/sound/audio-graph-card.txt
new file mode 100644
index 000000000000..6e6720aa33f1
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/audio-graph-card.txt
@@ -0,0 +1,129 @@
1Audio Graph Card:
2
3Audio Graph Card specifies audio DAI connections of SoC <-> codec.
4It is based on common bindings for device graphs.
5see ${LINUX}/Documentation/devicetree/bindings/graph.txt
6
7Basically, Audio Graph Card property is same as Simple Card.
8see ${LINUX}/Documentation/devicetree/bindings/sound/simple-card.txt
9
10Below are same as Simple-Card.
11
12- label
13- widgets
14- routing
15- dai-format
16- frame-master
17- bitclock-master
18- bitclock-inversion
19- frame-inversion
20- dai-tdm-slot-num
21- dai-tdm-slot-width
22- clocks / system-clock-frequency
23
24Required properties:
25
26- compatible : "audio-graph-card";
27- dais : list of CPU DAI port{s}
28
29Optional properties:
30- pa-gpios: GPIO used to control external amplifier.
31
32Example: Single DAI case
33
34 sound_card {
35 compatible = "audio-graph-card";
36
37 dais = <&cpu_port>;
38 };
39
40 dai-controller {
41 ...
42 cpu_port: port {
43 cpu_endpoint: endpoint {
44 remote-endpoint = <&codec_endpoint>;
45
46 dai-format = "left_j";
47 ...
48 };
49 };
50 };
51
52 audio-codec {
53 ...
54 port {
55 codec_endpoint: endpoint {
56 remote-endpoint = <&cpu_endpoint>;
57 };
58 };
59 };
60
61Example: Multi DAI case
62
63 sound-card {
64 compatible = "audio-graph-card";
65
66 label = "sound-card";
67
68 dais = <&cpu_port0
69 &cpu_port1
70 &cpu_port2>;
71 };
72
73 audio-codec@0 {
74 ...
75 port {
76 codec0_endpoint: endpoint {
77 remote-endpoint = <&cpu_endpoint0>;
78 };
79 };
80 };
81
82 audio-codec@1 {
83 ...
84 port {
85 codec1_endpoint: endpoint {
86 remote-endpoint = <&cpu_endpoint1>;
87 };
88 };
89 };
90
91 audio-codec@2 {
92 ...
93 port {
94 codec2_endpoint: endpoint {
95 remote-endpoint = <&cpu_endpoint2>;
96 };
97 };
98 };
99
100 dai-controller {
101 ...
102 ports {
103 cpu_port0: port@0 {
104 cpu_endpoint0: endpoint {
105 remote-endpoint = <&codec0_endpoint>;
106
107 dai-format = "left_j";
108 ...
109 };
110 };
111 cpu_port1: port@1 {
112 cpu_endpoint1: endpoint {
113 remote-endpoint = <&codec1_endpoint>;
114
115 dai-format = "i2s";
116 ...
117 };
118 };
119 cpu_port2: port@2 {
120 cpu_endpoint2: endpoint {
121 remote-endpoint = <&codec2_endpoint>;
122
123 dai-format = "i2s";
124 ...
125 };
126 };
127 };
128 };
129
diff --git a/Documentation/devicetree/bindings/sound/audio-graph-scu-card.txt b/Documentation/devicetree/bindings/sound/audio-graph-scu-card.txt
new file mode 100644
index 000000000000..8b8afe9fcb31
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/audio-graph-scu-card.txt
@@ -0,0 +1,122 @@
1Audio-Graph-SCU-Card:
2
3Audio-Graph-SCU-Card is "Audio-Graph-Card" + "ALSA DPCM".
4
5It is based on common bindings for device graphs.
6see ${LINUX}/Documentation/devicetree/bindings/graph.txt
7
8Basically, Audio-Graph-SCU-Card property is same as
9Simple-Card / Simple-SCU-Card / Audio-Graph-Card.
10see ${LINUX}/Documentation/devicetree/bindings/sound/simple-card.txt
11 ${LINUX}/Documentation/devicetree/bindings/sound/simple-scu-card.txt
12 ${LINUX}/Documentation/devicetree/bindings/sound/audio-graph-card.txt
13
14Below are same as Simple-Card / Audio-Graph-Card.
15
16- label
17- dai-format
18- frame-master
19- bitclock-master
20- bitclock-inversion
21- frame-inversion
22- dai-tdm-slot-num
23- dai-tdm-slot-width
24- clocks / system-clock-frequency
25
26Below are same as Simple-SCU-Card.
27
28- convert-rate
29- convert-channels
30- prefix
31- routing
32
33Required properties:
34
35- compatible : "audio-graph-scu-card";
36- dais : list of CPU DAI port{s}
37
38Example 1. Sampling Rate Conversion
39
40 sound_card {
41 compatible = "audio-graph-scu-card";
42
43 label = "sound-card";
44 prefix = "codec";
45 routing = "codec Playback", "DAI0 Playback",
46 "codec Playback", "DAI1 Playback";
47 convert-rate = <48000>;
48
49 dais = <&cpu_port>;
50 };
51
52 audio-codec {
53 ...
54
55 port {
56 codec_endpoint: endpoint {
57 remote-endpoint = <&cpu_endpoint>;
58 };
59 };
60 };
61
62 dai-controller {
63 ...
64 cpu_port: port {
65 cpu_endpoint: endpoint {
66 remote-endpoint = <&codec_endpoint>;
67
68 dai-format = "left_j";
69 ...
70 };
71 };
72 };
73
74Example 2. 2 CPU 1 Codec (Mixing)
75
76 sound_card {
77 compatible = "audio-graph-scu-card";
78
79 label = "sound-card";
80 prefix = "codec";
81 routing = "codec Playback", "DAI0 Playback",
82 "codec Playback", "DAI1 Playback";
83 convert-rate = <48000>;
84
85 dais = <&cpu_port0
86 &cpu_port1>;
87 };
88
89 audio-codec {
90 ...
91
92 port {
93 codec_endpoint0: endpoint {
94 remote-endpoint = <&cpu_endpoint0>;
95 };
96 codec_endpoint1: endpoint {
97 remote-endpoint = <&cpu_endpoint1>;
98 };
99 };
100 };
101
102 dai-controller {
103 ...
104 ports {
105 cpu_port0: port {
106 cpu_endpoint0: endpoint {
107 remote-endpoint = <&codec_endpoint0>;
108
109 dai-format = "left_j";
110 ...
111 };
112 };
113 cpu_port1: port {
114 cpu_endpoint1: endpoint {
115 remote-endpoint = <&codec_endpoint1>;
116
117 dai-format = "left_j";
118 ...
119 };
120 };
121 };
122 };
diff --git a/Documentation/devicetree/bindings/sound/cs35l35.txt b/Documentation/devicetree/bindings/sound/cs35l35.txt
index 016b768bc722..77ee75c39233 100644
--- a/Documentation/devicetree/bindings/sound/cs35l35.txt
+++ b/Documentation/devicetree/bindings/sound/cs35l35.txt
@@ -16,6 +16,9 @@ Required properties:
16 (See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt 16 (See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
17 for further information relating to interrupt properties) 17 for further information relating to interrupt properties)
18 18
19 - cirrus,boost-ind-nanohenry: Inductor value for boost converter. The value is
20 in nH and they can be values of 1000nH, 1200nH, 1500nH, and 2200nH.
21
19Optional properties: 22Optional properties:
20 - reset-gpios : gpio used to reset the amplifier 23 - reset-gpios : gpio used to reset the amplifier
21 24
diff --git a/Documentation/devicetree/bindings/sound/nau8825.txt b/Documentation/devicetree/bindings/sound/nau8825.txt
index d3374231c871..2f5e973285a6 100644
--- a/Documentation/devicetree/bindings/sound/nau8825.txt
+++ b/Documentation/devicetree/bindings/sound/nau8825.txt
@@ -69,6 +69,8 @@ Optional properties:
69 - nuvoton,jack-insert-debounce: number from 0 to 7 that sets debounce time to 2^(n+2) ms 69 - nuvoton,jack-insert-debounce: number from 0 to 7 that sets debounce time to 2^(n+2) ms
70 - nuvoton,jack-eject-debounce: number from 0 to 7 that sets debounce time to 2^(n+2) ms 70 - nuvoton,jack-eject-debounce: number from 0 to 7 that sets debounce time to 2^(n+2) ms
71 71
72 - nuvoton,crosstalk-bypass: make crosstalk function bypass if set.
73
72 - clocks: list of phandle and clock specifier pairs according to common clock bindings for the 74 - clocks: list of phandle and clock specifier pairs according to common clock bindings for the
73 clocks described in clock-names 75 clocks described in clock-names
74 - clock-names: should include "mclk" for the MCLK master clock 76 - clock-names: should include "mclk" for the MCLK master clock
@@ -96,6 +98,7 @@ Example:
96 nuvoton,short-key-debounce = <2>; 98 nuvoton,short-key-debounce = <2>;
97 nuvoton,jack-insert-debounce = <7>; 99 nuvoton,jack-insert-debounce = <7>;
98 nuvoton,jack-eject-debounce = <7>; 100 nuvoton,jack-eject-debounce = <7>;
101 nuvoton,crosstalk-bypass;
99 102
100 clock-names = "mclk"; 103 clock-names = "mclk";
101 clocks = <&tegra_car TEGRA210_CLK_CLK_OUT_2>; 104 clocks = <&tegra_car TEGRA210_CLK_CLK_OUT_2>;
diff --git a/Documentation/devicetree/bindings/sound/renesas,rsnd.txt b/Documentation/devicetree/bindings/sound/renesas,rsnd.txt
index 15a7316e4c91..7246bb268bf9 100644
--- a/Documentation/devicetree/bindings/sound/renesas,rsnd.txt
+++ b/Documentation/devicetree/bindings/sound/renesas,rsnd.txt
@@ -83,11 +83,11 @@ SRC can convert [xx]Hz to [yy]Hz. Then, it has below 2 modes
83** Asynchronous mode 83** Asynchronous mode
84------------------ 84------------------
85 85
86You need to use "renesas,rsrc-card" sound card for it. 86You need to use "simple-scu-audio-card" sound card for it.
87example) 87example)
88 88
89 sound { 89 sound {
90 compatible = "renesas,rsrc-card"; 90 compatible = "simple-scu-audio-card";
91 ... 91 ...
92 /* 92 /*
93 * SRC Asynchronous mode setting 93 * SRC Asynchronous mode setting
@@ -97,12 +97,12 @@ example)
97 * Inputed 48kHz data will be converted to 97 * Inputed 48kHz data will be converted to
98 * system specified Hz 98 * system specified Hz
99 */ 99 */
100 convert-rate = <48000>; 100 simple-audio-card,convert-rate = <48000>;
101 ... 101 ...
102 cpu { 102 simple-audio-card,cpu {
103 sound-dai = <&rcar_sound>; 103 sound-dai = <&rcar_sound>;
104 }; 104 };
105 codec { 105 simple-audio-card,codec {
106 ... 106 ...
107 }; 107 };
108 }; 108 };
@@ -141,23 +141,23 @@ For more detail information, see below
141 ${LINUX}/sound/soc/sh/rcar/ctu.c 141 ${LINUX}/sound/soc/sh/rcar/ctu.c
142 - comment of header 142 - comment of header
143 143
144You need to use "renesas,rsrc-card" sound card for it. 144You need to use "simple-scu-audio-card" sound card for it.
145example) 145example)
146 146
147 sound { 147 sound {
148 compatible = "renesas,rsrc-card"; 148 compatible = "simple-scu-audio-card";
149 ... 149 ...
150 /* 150 /*
151 * CTU setting 151 * CTU setting
152 * All input data will be converted to 2ch 152 * All input data will be converted to 2ch
153 * as output data 153 * as output data
154 */ 154 */
155 convert-channels = <2>; 155 simple-audio-card,convert-channels = <2>;
156 ... 156 ...
157 cpu { 157 simple-audio-card,cpu {
158 sound-dai = <&rcar_sound>; 158 sound-dai = <&rcar_sound>;
159 }; 159 };
160 codec { 160 simple-audio-card,codec {
161 ... 161 ...
162 }; 162 };
163 }; 163 };
@@ -190,22 +190,22 @@ and these sounds will be merged by MIX.
190 aplay -D plughw:0,0 xxxx.wav & 190 aplay -D plughw:0,0 xxxx.wav &
191 aplay -D plughw:0,1 yyyy.wav 191 aplay -D plughw:0,1 yyyy.wav
192 192
193You need to use "renesas,rsrc-card" sound card for it. 193You need to use "simple-scu-audio-card" sound card for it.
194Ex) 194Ex)
195 [MEM] -> [SRC1] -> [CTU02] -+-> [MIX0] -> [DVC0] -> [SSI0] 195 [MEM] -> [SRC1] -> [CTU02] -+-> [MIX0] -> [DVC0] -> [SSI0]
196 | 196 |
197 [MEM] -> [SRC2] -> [CTU03] -+ 197 [MEM] -> [SRC2] -> [CTU03] -+
198 198
199 sound { 199 sound {
200 compatible = "renesas,rsrc-card"; 200 compatible = "simple-scu-audio-card";
201 ... 201 ...
202 cpu@0 { 202 simple-audio-card,cpu@0 {
203 sound-dai = <&rcar_sound 0>; 203 sound-dai = <&rcar_sound 0>;
204 }; 204 };
205 cpu@1 { 205 simple-audio-card,cpu@1 {
206 sound-dai = <&rcar_sound 1>; 206 sound-dai = <&rcar_sound 1>;
207 }; 207 };
208 codec { 208 simple-audio-card,codec {
209 ... 209 ...
210 }; 210 };
211 }; 211 };
@@ -368,6 +368,10 @@ Required properties:
368 see below for detail. 368 see below for detail.
369- #sound-dai-cells : it must be 0 if your system is using single DAI 369- #sound-dai-cells : it must be 0 if your system is using single DAI
370 it must be 1 if your system is using multi DAI 370 it must be 1 if your system is using multi DAI
371- clocks : References to SSI/SRC/MIX/CTU/DVC/AUDIO_CLK clocks.
372- clock-names : List of necessary clock names.
373 "ssi-all", "ssi.X", "src.X", "mix.X", "ctu.X",
374 "dvc.X", "clk_a", "clk_b", "clk_c", "clk_i"
371 375
372Optional properties: 376Optional properties:
373- #clock-cells : it must be 0 if your system has audio_clkout 377- #clock-cells : it must be 0 if your system has audio_clkout
@@ -375,6 +379,9 @@ Optional properties:
375- clock-frequency : for all audio_clkout0/1/2/3 379- clock-frequency : for all audio_clkout0/1/2/3
376- clkout-lr-asynchronous : boolean property. it indicates that audio_clkoutn 380- clkout-lr-asynchronous : boolean property. it indicates that audio_clkoutn
377 is asynchronizes with lr-clock. 381 is asynchronizes with lr-clock.
382- resets : References to SSI resets.
383- reset-names : List of valid reset names.
384 "ssi-all", "ssi.X"
378 385
379SSI subnode properties: 386SSI subnode properties:
380- interrupts : Should contain SSI interrupt for PIO transfer 387- interrupts : Should contain SSI interrupt for PIO transfer
diff --git a/Documentation/devicetree/bindings/sound/rockchip,pdm.txt b/Documentation/devicetree/bindings/sound/rockchip,pdm.txt
new file mode 100644
index 000000000000..921729de7346
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/rockchip,pdm.txt
@@ -0,0 +1,39 @@
1* Rockchip PDM controller
2
3Required properties:
4
5- compatible: "rockchip,pdm"
6- reg: physical base address of the controller and length of memory mapped
7 region.
8- dmas: DMA specifiers for rx dma. See the DMA client binding,
9 Documentation/devicetree/bindings/dma/dma.txt
10- dma-names: should include "rx".
11- clocks: a list of phandle + clock-specifer pairs, one for each entry in clock-names.
12- clock-names: should contain following:
13 - "pdm_hclk": clock for PDM BUS
14 - "pdm_clk" : clock for PDM controller
15- pinctrl-names: Must contain a "default" entry.
16- pinctrl-N: One property must exist for each entry in
17 pinctrl-names. See ../pinctrl/pinctrl-bindings.txt
18 for details of the property values.
19
20Example for rk3328 PDM controller:
21
22pdm: pdm@ff040000 {
23 compatible = "rockchip,pdm";
24 reg = <0x0 0xff040000 0x0 0x1000>;
25 clocks = <&clk_pdm>, <&clk_gates28 0>;
26 clock-names = "pdm_clk", "pdm_hclk";
27 dmas = <&pdma 16>;
28 #dma-cells = <1>;
29 dma-names = "rx";
30 pinctrl-names = "default", "sleep";
31 pinctrl-0 = <&pdmm0_clk
32 &pdmm0_fsync
33 &pdmm0_sdi0
34 &pdmm0_sdi1
35 &pdmm0_sdi2
36 &pdmm0_sdi3>;
37 pinctrl-1 = <&pdmm0_sleep>;
38 status = "disabled";
39};
diff --git a/Documentation/devicetree/bindings/sound/rockchip-spdif.txt b/Documentation/devicetree/bindings/sound/rockchip-spdif.txt
index 11046429a118..4706b96d450b 100644
--- a/Documentation/devicetree/bindings/sound/rockchip-spdif.txt
+++ b/Documentation/devicetree/bindings/sound/rockchip-spdif.txt
@@ -9,7 +9,9 @@ Required properties:
9- compatible: should be one of the following: 9- compatible: should be one of the following:
10 - "rockchip,rk3066-spdif" 10 - "rockchip,rk3066-spdif"
11 - "rockchip,rk3188-spdif" 11 - "rockchip,rk3188-spdif"
12 - "rockchip,rk3228-spdif"
12 - "rockchip,rk3288-spdif" 13 - "rockchip,rk3288-spdif"
14 - "rockchip,rk3328-spdif"
13 - "rockchip,rk3366-spdif" 15 - "rockchip,rk3366-spdif"
14 - "rockchip,rk3368-spdif" 16 - "rockchip,rk3368-spdif"
15 - "rockchip,rk3399-spdif" 17 - "rockchip,rk3399-spdif"
diff --git a/Documentation/devicetree/bindings/sound/samsung,odroid.txt b/Documentation/devicetree/bindings/sound/samsung,odroid.txt
index c1ac70cb0afb..c30934dd975b 100644
--- a/Documentation/devicetree/bindings/sound/samsung,odroid.txt
+++ b/Documentation/devicetree/bindings/sound/samsung,odroid.txt
@@ -5,11 +5,6 @@ Required properties:
5 - compatible - "samsung,odroidxu3-audio" - for Odroid XU3 board, 5 - compatible - "samsung,odroidxu3-audio" - for Odroid XU3 board,
6 "samsung,odroidxu4-audio" - for Odroid XU4 board 6 "samsung,odroidxu4-audio" - for Odroid XU4 board
7 - model - the user-visible name of this sound complex 7 - model - the user-visible name of this sound complex
8 - 'cpu' subnode with a 'sound-dai' property containing the phandle of the I2S
9 controller
10 - 'codec' subnode with a 'sound-dai' property containing list of phandles
11 to the CODEC nodes, first entry must be corresponding to the MAX98090
12 CODEC and the second entry must be the phandle of the HDMI IP block node
13 - clocks - should contain entries matching clock names in the clock-names 8 - clocks - should contain entries matching clock names in the clock-names
14 property 9 property
15 - clock-names - should contain following entries: 10 - clock-names - should contain following entries:
@@ -32,12 +27,18 @@ Required properties:
32 For Odroid XU4: 27 For Odroid XU4:
33 no entries 28 no entries
34 29
30Required sub-nodes:
31
32 - 'cpu' subnode with a 'sound-dai' property containing the phandle of the I2S
33 controller
34 - 'codec' subnode with a 'sound-dai' property containing list of phandles
35 to the CODEC nodes, first entry must be corresponding to the MAX98090
36 CODEC and the second entry must be the phandle of the HDMI IP block node
37
35Example: 38Example:
36 39
37sound { 40sound {
38 compatible = "samsung,odroidxu3-audio"; 41 compatible = "samsung,odroidxu3-audio";
39 samsung,cpu-dai = <&i2s0>;
40 samsung,codec-dai = <&max98090>;
41 model = "Odroid-XU3"; 42 model = "Odroid-XU3";
42 samsung,audio-routing = 43 samsung,audio-routing =
43 "Headphone Jack", "HPL", 44 "Headphone Jack", "HPL",
diff --git a/Documentation/devicetree/bindings/sound/simple-scu-card.txt b/Documentation/devicetree/bindings/sound/simple-scu-card.txt
index d6fe47ed09af..327d229a51b2 100644
--- a/Documentation/devicetree/bindings/sound/simple-scu-card.txt
+++ b/Documentation/devicetree/bindings/sound/simple-scu-card.txt
@@ -1,35 +1,29 @@
1ASoC simple SCU Sound Card 1ASoC Simple SCU Sound Card
2 2
3Simple-Card specifies audio DAI connections of SoC <-> codec. 3Simple SCU Sound Card is "Simple Sound Card" + "ALSA DPCM".
4For example, you can use this driver if you want to exchange sampling rate convert,
5Mixing, etc...
4 6
5Required properties: 7Required properties:
6 8
7- compatible : "simple-scu-audio-card" 9- compatible : "simple-scu-audio-card"
8 "renesas,rsrc-card" 10 "renesas,rsrc-card"
9
10Optional properties: 11Optional properties:
11 12
12- simple-audio-card,name : User specified audio sound card name, one string 13- simple-audio-card,name : see simple-audio-card.txt
13 property. 14- simple-audio-card,cpu : see simple-audio-card.txt
14- simple-audio-card,cpu : CPU sub-node 15- simple-audio-card,codec : see simple-audio-card.txt
15- simple-audio-card,codec : CODEC sub-node
16 16
17Optional subnode properties: 17Optional subnode properties:
18 18
19- simple-audio-card,format : CPU/CODEC common audio format. 19- simple-audio-card,format : see simple-audio-card.txt
20 "i2s", "right_j", "left_j" , "dsp_a" 20- simple-audio-card,frame-master : see simple-audio-card.txt
21 "dsp_b", "ac97", "pdm", "msb", "lsb" 21- simple-audio-card,bitclock-master : see simple-audio-card.txt
22- simple-audio-card,frame-master : Indicates dai-link frame master. 22- simple-audio-card,bitclock-inversion : see simple-audio-card.txt
23 phandle to a cpu or codec subnode. 23- simple-audio-card,frame-inversion : see simple-audio-card.txt
24- simple-audio-card,bitclock-master : Indicates dai-link bit clock master.
25 phandle to a cpu or codec subnode.
26- simple-audio-card,bitclock-inversion : bool property. Add this if the
27 dai-link uses bit clock inversion.
28- simple-audio-card,frame-inversion : bool property. Add this if the
29 dai-link uses frame clock inversion.
30- simple-audio-card,convert-rate : platform specified sampling rate convert 24- simple-audio-card,convert-rate : platform specified sampling rate convert
31- simple-audio-card,convert-channels : platform specified converted channel size (2 - 8 ch) 25- simple-audio-card,convert-channels : platform specified converted channel size (2 - 8 ch)
32- simple-audio-card,prefix : see audio-routing 26- simple-audio-card,prefix : see routing
33- simple-audio-card,routing : A list of the connections between audio components. 27- simple-audio-card,routing : A list of the connections between audio components.
34 Each entry is a pair of strings, the first being the connection's sink, 28 Each entry is a pair of strings, the first being the connection's sink,
35 the second being the connection's source. Valid names for sources. 29 the second being the connection's source. Valid names for sources.
@@ -38,32 +32,23 @@ Optional subnode properties:
38 32
39Required CPU/CODEC subnodes properties: 33Required CPU/CODEC subnodes properties:
40 34
41- sound-dai : phandle and port of CPU/CODEC 35- sound-dai : see simple-audio-card.txt
42 36
43Optional CPU/CODEC subnodes properties: 37Optional CPU/CODEC subnodes properties:
44 38
45- clocks / system-clock-frequency : specify subnode's clock if needed. 39- clocks / system-clock-frequency : see simple-audio-card.txt
46 it can be specified via "clocks" if system has
47 clock node (= common clock), or "system-clock-frequency"
48 (if system doens't support common clock)
49 If a clock is specified, it is
50 enabled with clk_prepare_enable()
51 in dai startup() and disabled with
52 clk_disable_unprepare() in dai
53 shutdown().
54 40
55Example 1. Sampling Rate Covert 41Example 1. Sampling Rate Conversion
56 42
57sound { 43sound {
58 compatible = "simple-scu-audio-card"; 44 compatible = "simple-scu-audio-card";
59 45
60 simple-audio-card,name = "rsnd-ak4643"; 46 simple-audio-card,name = "rsnd-ak4643";
61 simple-audio-card,format = "left_j"; 47 simple-audio-card,format = "left_j";
62 simple-audio-card,format = "left_j";
63 simple-audio-card,bitclock-master = <&sndcodec>; 48 simple-audio-card,bitclock-master = <&sndcodec>;
64 simple-audio-card,frame-master = <&sndcodec>; 49 simple-audio-card,frame-master = <&sndcodec>;
65 50
66 simple-audio-card,convert-rate = <48000>; /* see audio_clk_a */ 51 simple-audio-card,convert-rate = <48000>;
67 52
68 simple-audio-card,prefix = "ak4642"; 53 simple-audio-card,prefix = "ak4642";
69 simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback", 54 simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
@@ -79,20 +64,18 @@ sound {
79 }; 64 };
80}; 65};
81 66
82Example 2. 2 CPU 1 Codec 67Example 2. 2 CPU 1 Codec (Mixing)
83 68
84sound { 69sound {
85 compatible = "renesas,rsrc-card"; 70 compatible = "simple-scu-audio-card";
86
87 card-name = "rsnd-ak4643";
88 format = "left_j";
89 bitclock-master = <&dpcmcpu>;
90 frame-master = <&dpcmcpu>;
91 71
92 convert-rate = <48000>; /* see audio_clk_a */ 72 simple-audio-card,name = "rsnd-ak4643";
73 simple-audio-card,format = "left_j";
74 simple-audio-card,bitclock-master = <&dpcmcpu>;
75 simple-audio-card,frame-master = <&dpcmcpu>;
93 76
94 audio-prefix = "ak4642"; 77 simple-audio-card,prefix = "ak4642";
95 audio-routing = "ak4642 Playback", "DAI0 Playback", 78 simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
96 "ak4642 Playback", "DAI1 Playback"; 79 "ak4642 Playback", "DAI1 Playback";
97 80
98 dpcmcpu: cpu@0 { 81 dpcmcpu: cpu@0 {
diff --git a/Documentation/devicetree/bindings/sound/st,stm32-i2s.txt b/Documentation/devicetree/bindings/sound/st,stm32-i2s.txt
new file mode 100644
index 000000000000..4bda52042402
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/st,stm32-i2s.txt
@@ -0,0 +1,62 @@
1STMicroelectronics STM32 SPI/I2S Controller
2
3The SPI/I2S block supports I2S/PCM protocols when configured on I2S mode.
4Only some SPI instances support I2S.
5
6Required properties:
7 - compatible: Must be "st,stm32h7-i2s"
8 - reg: Offset and length of the device's register set.
9 - interrupts: Must contain the interrupt line id.
10 - clocks: Must contain phandle and clock specifier pairs for each entry
11 in clock-names.
12 - clock-names: Must contain "i2sclk", "pclk", "x8k" and "x11k".
13 "i2sclk": clock which feeds the internal clock generator
14 "pclk": clock which feeds the peripheral bus interface
15 "x8k": I2S parent clock for sampling rates multiple of 8kHz.
16 "x11k": I2S parent clock for sampling rates multiple of 11.025kHz.
17 - dmas: DMA specifiers for tx and rx dma.
18 See Documentation/devicetree/bindings/dma/stm32-dma.txt.
19 - dma-names: Identifier for each DMA request line. Must be "tx" and "rx".
20 - pinctrl-names: should contain only value "default"
21 - pinctrl-0: see Documentation/devicetree/bindings/pinctrl/pinctrl-stm32.txt
22
23Optional properties:
24 - resets: Reference to a reset controller asserting the reset controller
25
26The device node should contain one 'port' child node with one child 'endpoint'
27node, according to the bindings defined in Documentation/devicetree/bindings/
28graph.txt.
29
30Example:
31sound_card {
32 compatible = "audio-graph-card";
33 dais = <&i2s2_port>;
34};
35
36i2s2: audio-controller@40003800 {
37 compatible = "st,stm32h7-i2s";
38 reg = <0x40003800 0x400>;
39 interrupts = <36>;
40 clocks = <&rcc PCLK1>, <&rcc SPI2_CK>, <&rcc PLL1_Q>, <&rcc PLL2_P>;
41 clock-names = "pclk", "i2sclk", "x8k", "x11k";
42 dmas = <&dmamux2 2 39 0x400 0x1>,
43 <&dmamux2 3 40 0x400 0x1>;
44 dma-names = "rx", "tx";
45 pinctrl-names = "default";
46 pinctrl-0 = <&pinctrl_i2s2>;
47
48 i2s2_port: port@0 {
49 cpu_endpoint: endpoint {
50 remote-endpoint = <&codec_endpoint>;
51 format = "i2s";
52 };
53 };
54};
55
56audio-codec {
57 codec_port: port@0 {
58 codec_endpoint: endpoint {
59 remote-endpoint = <&cpu_endpoint>;
60 };
61 };
62};
diff --git a/Documentation/devicetree/bindings/sound/st,stm32-sai.txt b/Documentation/devicetree/bindings/sound/st,stm32-sai.txt
index c59a3d779e06..f1c5ae59e7c9 100644
--- a/Documentation/devicetree/bindings/sound/st,stm32-sai.txt
+++ b/Documentation/devicetree/bindings/sound/st,stm32-sai.txt
@@ -6,7 +6,7 @@ The SAI contains two independent audio sub-blocks. Each sub-block has
6its own clock generator and I/O lines controller. 6its own clock generator and I/O lines controller.
7 7
8Required properties: 8Required properties:
9 - compatible: Should be "st,stm32f4-sai" 9 - compatible: Should be "st,stm32f4-sai" or "st,stm32h7-sai"
10 - reg: Base address and size of SAI common register set. 10 - reg: Base address and size of SAI common register set.
11 - clocks: Must contain phandle and clock specifier pairs for each entry 11 - clocks: Must contain phandle and clock specifier pairs for each entry
12 in clock-names. 12 in clock-names.
@@ -36,6 +36,10 @@ SAI subnodes required properties:
36 - pinctrl-names: should contain only value "default" 36 - pinctrl-names: should contain only value "default"
37 - pinctrl-0: see Documentation/devicetree/bindings/pinctrl/pinctrl-stm32.txt 37 - pinctrl-0: see Documentation/devicetree/bindings/pinctrl/pinctrl-stm32.txt
38 38
39The device node should contain one 'port' child node with one child 'endpoint'
40node, according to the bindings defined in Documentation/devicetree/bindings/
41graph.txt.
42
39Example: 43Example:
40sound_card { 44sound_card {
41 compatible = "audio-graph-card"; 45 compatible = "audio-graph-card";
@@ -43,38 +47,29 @@ sound_card {
43}; 47};
44 48
45sai1: sai1@40015800 { 49sai1: sai1@40015800 {
46 compatible = "st,stm32f4-sai"; 50 compatible = "st,stm32h7-sai";
47 #address-cells = <1>; 51 #address-cells = <1>;
48 #size-cells = <1>; 52 #size-cells = <1>;
49 ranges; 53 ranges = <0 0x40015800 0x400>;
50 reg = <0x40015800 0x4>; 54 reg = <0x40015800 0x4>;
51 clocks = <&rcc 1 CLK_SAIQ_PDIV>, <&rcc 1 CLK_I2SQ_PDIV>; 55 clocks = <&rcc PLL1_Q>, <&rcc PLL2_P>;
52 clock-names = "x8k", "x11k"; 56 clock-names = "x8k", "x11k";
53 interrupts = <87>; 57 interrupts = <87>;
54 58
55 sai1b: audio-controller@40015824 { 59 sai1a: audio-controller@40015804 {
56 #sound-dai-cells = <0>; 60 compatible = "st,stm32-sai-sub-a";
57 compatible = "st,stm32-sai-sub-b"; 61 reg = <0x4 0x1C>;
58 reg = <0x40015824 0x1C>; 62 clocks = <&rcc SAI1_CK>;
59 clocks = <&rcc 1 CLK_SAI2>;
60 clock-names = "sai_ck"; 63 clock-names = "sai_ck";
61 dmas = <&dma2 5 0 0x400 0x0>; 64 dmas = <&dmamux1 1 87 0x400 0x0>;
62 dma-names = "tx"; 65 dma-names = "tx";
63 pinctrl-names = "default"; 66 pinctrl-names = "default";
64 pinctrl-0 = <&pinctrl_sai1b>; 67 pinctrl-0 = <&pinctrl_sai1a>;
65
66 ports {
67 #address-cells = <1>;
68 #size-cells = <0>;
69 68
70 sai1b_port: port@0 { 69 sai1b_port: port {
71 reg = <0>; 70 cpu_endpoint: endpoint {
72 cpu_endpoint: endpoint { 71 remote-endpoint = <&codec_endpoint>;
73 remote-endpoint = <&codec_endpoint>; 72 format = "i2s";
74 audio-graph-card,format = "i2s";
75 audio-graph-card,bitclock-master = <&codec_endpoint>;
76 audio-graph-card,frame-master = <&codec_endpoint>;
77 };
78 }; 73 };
79 }; 74 };
80 }; 75 };
diff --git a/Documentation/devicetree/bindings/sound/st,stm32-spdifrx.txt b/Documentation/devicetree/bindings/sound/st,stm32-spdifrx.txt
new file mode 100644
index 000000000000..33826f2459fa
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/st,stm32-spdifrx.txt
@@ -0,0 +1,56 @@
1STMicroelectronics STM32 S/PDIF receiver (SPDIFRX).
2
3The SPDIFRX peripheral, is designed to receive an S/PDIF flow compliant with
4IEC-60958 and IEC-61937.
5
6Required properties:
7 - compatible: should be "st,stm32h7-spdifrx"
8 - reg: cpu DAI IP base address and size
9 - clocks: must contain an entry for kclk (used as S/PDIF signal reference)
10 - clock-names: must contain "kclk"
11 - interrupts: cpu DAI interrupt line
12 - dmas: DMA specifiers for audio data DMA and iec control flow DMA
13 See STM32 DMA bindings, Documentation/devicetree/bindings/dma/stm32-dma.txt
14 - dma-names: two dmas have to be defined, "rx" and "rx-ctrl"
15
16Optional properties:
17 - resets: Reference to a reset controller asserting the SPDIFRX
18
19The device node should contain one 'port' child node with one child 'endpoint'
20node, according to the bindings defined in Documentation/devicetree/bindings/
21graph.txt.
22
23Example:
24spdifrx: spdifrx@40004000 {
25 compatible = "st,stm32h7-spdifrx";
26 reg = <0x40004000 0x400>;
27 clocks = <&rcc SPDIFRX_CK>;
28 clock-names = "kclk";
29 interrupts = <97>;
30 dmas = <&dmamux1 2 93 0x400 0x0>,
31 <&dmamux1 3 94 0x400 0x0>;
32 dma-names = "rx", "rx-ctrl";
33 pinctrl-0 = <&spdifrx_pins>;
34 pinctrl-names = "default";
35
36 spdifrx_port: port {
37 cpu_endpoint: endpoint {
38 remote-endpoint = <&codec_endpoint>;
39 };
40 };
41};
42
43spdif_in: spdif-in {
44 compatible = "linux,spdif-dir";
45
46 codec_port: port {
47 codec_endpoint: endpoint {
48 remote-endpoint = <&cpu_endpoint>;
49 };
50 };
51};
52
53soundcard {
54 compatible = "audio-graph-card";
55 dais = <&spdifrx_port>;
56};
diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
index 3863531d1e6d..2d4e10deb6f4 100644
--- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
+++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
@@ -7,6 +7,7 @@ Required properties:
7 - "allwinner,sun7i-a20-codec" 7 - "allwinner,sun7i-a20-codec"
8 - "allwinner,sun8i-a23-codec" 8 - "allwinner,sun8i-a23-codec"
9 - "allwinner,sun8i-h3-codec" 9 - "allwinner,sun8i-h3-codec"
10 - "allwinner,sun8i-v3s-codec"
10- reg: must contain the registers location and length 11- reg: must contain the registers location and length
11- interrupts: must contain the codec interrupt 12- interrupts: must contain the codec interrupt
12- dmas: DMA channels for tx and rx dma. See the DMA client binding, 13- dmas: DMA channels for tx and rx dma. See the DMA client binding,
@@ -25,6 +26,7 @@ Required properties for the following compatibles:
25 - "allwinner,sun6i-a31-codec" 26 - "allwinner,sun6i-a31-codec"
26 - "allwinner,sun8i-a23-codec" 27 - "allwinner,sun8i-a23-codec"
27 - "allwinner,sun8i-h3-codec" 28 - "allwinner,sun8i-h3-codec"
29 - "allwinner,sun8i-v3s-codec"
28- resets: phandle to the reset control for this device 30- resets: phandle to the reset control for this device
29- allwinner,audio-routing: A list of the connections between audio components. 31- allwinner,audio-routing: A list of the connections between audio components.
30 Each entry is a pair of strings, the first being the 32 Each entry is a pair of strings, the first being the
@@ -34,15 +36,15 @@ Required properties for the following compatibles:
34 Audio pins on the SoC: 36 Audio pins on the SoC:
35 "HP" 37 "HP"
36 "HPCOM" 38 "HPCOM"
37 "LINEIN" 39 "LINEIN" (not on sun8i-v3s)
38 "LINEOUT" (not on sun8i-a23) 40 "LINEOUT" (not on sun8i-a23 or sun8i-v3s)
39 "MIC1" 41 "MIC1"
40 "MIC2" 42 "MIC2" (not on sun8i-v3s)
41 "MIC3" (sun6i-a31 only) 43 "MIC3" (sun6i-a31 only)
42 44
43 Microphone biases from the SoC: 45 Microphone biases from the SoC:
44 "HBIAS" 46 "HBIAS"
45 "MBIAS" 47 "MBIAS" (not on sun8i-v3s)
46 48
47 Board connectors: 49 Board connectors:
48 "Headphone" 50 "Headphone"
@@ -55,6 +57,7 @@ Required properties for the following compatibles:
55Required properties for the following compatibles: 57Required properties for the following compatibles:
56 - "allwinner,sun8i-a23-codec" 58 - "allwinner,sun8i-a23-codec"
57 - "allwinner,sun8i-h3-codec" 59 - "allwinner,sun8i-h3-codec"
60 - "allwinner,sun8i-v3s-codec"
58- allwinner,codec-analog-controls: A phandle to the codec analog controls 61- allwinner,codec-analog-controls: A phandle to the codec analog controls
59 block in the PRCM. 62 block in the PRCM.
60 63
diff --git a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
index 779b735781ba..1b6e7c4e50ab 100644
--- a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
+++ b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
@@ -4,6 +4,7 @@ Required properties:
4- compatible: must be one of the following compatibles: 4- compatible: must be one of the following compatibles:
5 - "allwinner,sun8i-a23-codec-analog" 5 - "allwinner,sun8i-a23-codec-analog"
6 - "allwinner,sun8i-h3-codec-analog" 6 - "allwinner,sun8i-h3-codec-analog"
7 - "allwinner,sun8i-v3s-codec-analog"
7 8
8Required properties if not a sub-node of the PRCM node: 9Required properties if not a sub-node of the PRCM node:
9- reg: must contain the registers location and length 10- reg: must contain the registers location and length
diff --git a/Documentation/devicetree/bindings/sound/zte,zx-aud96p22.txt b/Documentation/devicetree/bindings/sound/zte,zx-aud96p22.txt
new file mode 100644
index 000000000000..41bb1040eb71
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/zte,zx-aud96p22.txt
@@ -0,0 +1,24 @@
1ZTE ZX AUD96P22 Audio Codec
2
3Required properties:
4 - compatible: Must be "zte,zx-aud96p22"
5 - #sound-dai-cells: Should be 0
6 - reg: I2C bus slave address of AUD96P22
7
8Example:
9
10 i2c0: i2c@1486000 {
11 compatible = "zte,zx296718-i2c";
12 reg = <0x01486000 0x1000>;
13 interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
14 #address-cells = <1>;
15 #size-cells = <0>;
16 clocks = <&audiocrm AUDIO_I2C0_WCLK>;
17 clock-frequency = <1600000>;
18
19 aud96p22: codec@22 {
20 compatible = "zte,zx-aud96p22";
21 #sound-dai-cells = <0>;
22 reg = <0x22>;
23 };
24 };
diff --git a/Documentation/devicetree/bindings/usb/dwc2.txt b/Documentation/devicetree/bindings/usb/dwc2.txt
index 00bea038639e..fcf199b64d3d 100644
--- a/Documentation/devicetree/bindings/usb/dwc2.txt
+++ b/Documentation/devicetree/bindings/usb/dwc2.txt
@@ -10,6 +10,7 @@ Required properties:
10 - "rockchip,rk3288-usb", "rockchip,rk3066-usb", "snps,dwc2": for rk3288 Soc; 10 - "rockchip,rk3288-usb", "rockchip,rk3066-usb", "snps,dwc2": for rk3288 Soc;
11 - "lantiq,arx100-usb": The DWC2 USB controller instance in Lantiq ARX SoCs; 11 - "lantiq,arx100-usb": The DWC2 USB controller instance in Lantiq ARX SoCs;
12 - "lantiq,xrx200-usb": The DWC2 USB controller instance in Lantiq XRX SoCs; 12 - "lantiq,xrx200-usb": The DWC2 USB controller instance in Lantiq XRX SoCs;
13 - "amlogic,meson8-usb": The DWC2 USB controller instance in Amlogic Meson8 SoCs;
13 - "amlogic,meson8b-usb": The DWC2 USB controller instance in Amlogic Meson8b SoCs; 14 - "amlogic,meson8b-usb": The DWC2 USB controller instance in Amlogic Meson8b SoCs;
14 - "amlogic,meson-gxbb-usb": The DWC2 USB controller instance in Amlogic S905 SoCs; 15 - "amlogic,meson-gxbb-usb": The DWC2 USB controller instance in Amlogic S905 SoCs;
15 - "amcc,dwc-otg": The DWC2 USB controller instance in AMCC Canyonlands 460EX SoCs; 16 - "amcc,dwc-otg": The DWC2 USB controller instance in AMCC Canyonlands 460EX SoCs;
diff --git a/Documentation/input/devices/edt-ft5x06.rst b/Documentation/input/devices/edt-ft5x06.rst
index 2032f0b7a8fa..1ccc94b192b7 100644
--- a/Documentation/input/devices/edt-ft5x06.rst
+++ b/Documentation/input/devices/edt-ft5x06.rst
@@ -15,7 +15,7 @@ It has been tested with the following devices:
15The driver allows configuration of the touch screen via a set of sysfs files: 15The driver allows configuration of the touch screen via a set of sysfs files:
16 16
17/sys/class/input/eventX/device/device/threshold: 17/sys/class/input/eventX/device/device/threshold:
18 allows setting the "click"-threshold in the range from 20 to 80. 18 allows setting the "click"-threshold in the range from 0 to 80.
19 19
20/sys/class/input/eventX/device/device/gain: 20/sys/class/input/eventX/device/device/gain:
21 allows setting the sensitivity in the range from 0 to 31. Note that 21 allows setting the sensitivity in the range from 0 to 31. Note that
diff --git a/Documentation/networking/dpaa.txt b/Documentation/networking/dpaa.txt
new file mode 100644
index 000000000000..76e016d4d344
--- /dev/null
+++ b/Documentation/networking/dpaa.txt
@@ -0,0 +1,194 @@
1The QorIQ DPAA Ethernet Driver
2==============================
3
4Authors:
5Madalin Bucur <madalin.bucur@nxp.com>
6Camelia Groza <camelia.groza@nxp.com>
7
8Contents
9========
10
11 - DPAA Ethernet Overview
12 - DPAA Ethernet Supported SoCs
13 - Configuring DPAA Ethernet in your kernel
14 - DPAA Ethernet Frame Processing
15 - DPAA Ethernet Features
16 - Debugging
17
18DPAA Ethernet Overview
19======================
20
21DPAA stands for Data Path Acceleration Architecture and it is a
22set of networking acceleration IPs that are available on several
23generations of SoCs, both on PowerPC and ARM64.
24
25The Freescale DPAA architecture consists of a series of hardware blocks
26that support Ethernet connectivity. The Ethernet driver depends upon the
27following drivers in the Linux kernel:
28
29 - Peripheral Access Memory Unit (PAMU) (* needed only for PPC platforms)
30 drivers/iommu/fsl_*
31 - Frame Manager (FMan)
32 drivers/net/ethernet/freescale/fman
33 - Queue Manager (QMan), Buffer Manager (BMan)
34 drivers/soc/fsl/qbman
35
36A simplified view of the dpaa_eth interfaces mapped to FMan MACs:
37
38 dpaa_eth /eth0\ ... /ethN\
39 driver | | | |
40 ------------- ---- ----------- ---- -------------
41 -Ports / Tx Rx \ ... / Tx Rx \
42 FMan | | | |
43 -MACs | MAC0 | | MACN |
44 / dtsec0 \ ... / dtsecN \ (or tgec)
45 / \ / \(or memac)
46 --------- -------------- --- -------------- ---------
47 FMan, FMan Port, FMan SP, FMan MURAM drivers
48 ---------------------------------------------------------
49 FMan HW blocks: MURAM, MACs, Ports, SP
50 ---------------------------------------------------------
51
52The dpaa_eth relation to the QMan, BMan and FMan:
53 ________________________________
54 dpaa_eth / eth0 \
55 driver / \
56 --------- -^- -^- -^- --- ---------
57 QMan driver / \ / \ / \ \ / | BMan |
58 |Rx | |Rx | |Tx | |Tx | | driver |
59 --------- |Dfl| |Err| |Cnf| |FQs| | |
60 QMan HW |FQ | |FQ | |FQs| | | | |
61 / \ / \ / \ \ / | |
62 --------- --- --- --- -v- ---------
63 | FMan QMI | |
64 | FMan HW FMan BMI | BMan HW |
65 ----------------------- --------
66
67where the acronyms used above (and in the code) are:
68DPAA = Data Path Acceleration Architecture
69FMan = DPAA Frame Manager
70QMan = DPAA Queue Manager
71BMan = DPAA Buffers Manager
72QMI = QMan interface in FMan
73BMI = BMan interface in FMan
74FMan SP = FMan Storage Profiles
75MURAM = Multi-user RAM in FMan
76FQ = QMan Frame Queue
77Rx Dfl FQ = default reception FQ
78Rx Err FQ = Rx error frames FQ
79Tx Cnf FQ = Tx confirmation FQs
80Tx FQs = transmission frame queues
81dtsec = datapath three speed Ethernet controller (10/100/1000 Mbps)
82tgec = ten gigabit Ethernet controller (10 Gbps)
83memac = multirate Ethernet MAC (10/100/1000/10000)
84
85DPAA Ethernet Supported SoCs
86============================
87
88The DPAA drivers enable the Ethernet controllers present on the following SoCs:
89
90# PPC
91P1023
92P2041
93P3041
94P4080
95P5020
96P5040
97T1023
98T1024
99T1040
100T1042
101T2080
102T4240
103B4860
104
105# ARM
106LS1043A
107LS1046A
108
109Configuring DPAA Ethernet in your kernel
110========================================
111
112To enable the DPAA Ethernet driver, the following Kconfig options are required:
113
114# common for arch/arm64 and arch/powerpc platforms
115CONFIG_FSL_DPAA=y
116CONFIG_FSL_FMAN=y
117CONFIG_FSL_DPAA_ETH=y
118CONFIG_FSL_XGMAC_MDIO=y
119
120# for arch/powerpc only
121CONFIG_FSL_PAMU=y
122
123# common options needed for the PHYs used on the RDBs
124CONFIG_VITESSE_PHY=y
125CONFIG_REALTEK_PHY=y
126CONFIG_AQUANTIA_PHY=y
127
128DPAA Ethernet Frame Processing
129==============================
130
131On Rx, buffers for the incoming frames are retrieved from one of the three
132existing buffers pools. The driver initializes and seeds these, each with
133buffers of different sizes: 1KB, 2KB and 4KB.
134
135On Tx, all transmitted frames are returned to the driver through Tx
136confirmation frame queues. The driver is then responsible for freeing the
137buffers. In order to do this properly, a backpointer is added to the buffer
138before transmission that points to the skb. When the buffer returns to the
139driver on a confirmation FQ, the skb can be correctly consumed.
140
141DPAA Ethernet Features
142======================
143
144Currently the DPAA Ethernet driver enables the basic features required for
145a Linux Ethernet driver. The support for advanced features will be added
146gradually.
147
148The driver has Rx and Tx checksum offloading for UDP and TCP. Currently the Rx
149checksum offload feature is enabled by default and cannot be controlled through
150ethtool.
151
152The driver has support for multiple prioritized Tx traffic classes. Priorities
153range from 0 (lowest) to 3 (highest). These are mapped to HW workqueues with
154strict priority levels. Each traffic class contains NR_CPU TX queues. By
155default, only one traffic class is enabled and the lowest priority Tx queues
156are used. Higher priority traffic classes can be enabled with the mqprio
157qdisc. For example, all four traffic classes are enabled on an interface with
158the following command. Furthermore, skb priority levels are mapped to traffic
159classes as follows:
160
161 * priorities 0 to 3 - traffic class 0 (low priority)
162 * priorities 4 to 7 - traffic class 1 (medium-low priority)
163 * priorities 8 to 11 - traffic class 2 (medium-high priority)
164 * priorities 12 to 15 - traffic class 3 (high priority)
165
166tc qdisc add dev <int> root handle 1: \
167 mqprio num_tc 4 map 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 hw 1
168
169Debugging
170=========
171
172The following statistics are exported for each interface through ethtool:
173
174 - interrupt count per CPU
175 - Rx packets count per CPU
176 - Tx packets count per CPU
177 - Tx confirmed packets count per CPU
178 - Tx S/G frames count per CPU
179 - Tx error count per CPU
180 - Rx error count per CPU
181 - Rx error count per type
182 - congestion related statistics:
183 - congestion status
184 - time spent in congestion
185 - number of time the device entered congestion
186 - dropped packets count per cause
187
188The driver also exports the following information in sysfs:
189
190 - the FQ IDs for each FQ type
191 /sys/devices/platform/dpaa-ethernet.0/net/<int>/fqids
192
193 - the IDs of the buffer pools in use
194 /sys/devices/platform/dpaa-ethernet.0/net/<int>/bpids
diff --git a/Documentation/networking/scaling.txt b/Documentation/networking/scaling.txt
index 59f4db2a0c85..f55639d71d35 100644
--- a/Documentation/networking/scaling.txt
+++ b/Documentation/networking/scaling.txt
@@ -122,7 +122,7 @@ associated flow of the packet. The hash is either provided by hardware
122or will be computed in the stack. Capable hardware can pass the hash in 122or will be computed in the stack. Capable hardware can pass the hash in
123the receive descriptor for the packet; this would usually be the same 123the receive descriptor for the packet; this would usually be the same
124hash used for RSS (e.g. computed Toeplitz hash). The hash is saved in 124hash used for RSS (e.g. computed Toeplitz hash). The hash is saved in
125skb->rx_hash and can be used elsewhere in the stack as a hash of the 125skb->hash and can be used elsewhere in the stack as a hash of the
126packet’s flow. 126packet’s flow.
127 127
128Each receive hardware queue has an associated list of CPUs to which 128Each receive hardware queue has an associated list of CPUs to which
diff --git a/Documentation/networking/tcp.txt b/Documentation/networking/tcp.txt
index bdc4c0db51e1..9c7139d57e57 100644
--- a/Documentation/networking/tcp.txt
+++ b/Documentation/networking/tcp.txt
@@ -1,7 +1,7 @@
1TCP protocol 1TCP protocol
2============ 2============
3 3
4Last updated: 9 February 2008 4Last updated: 3 June 2017
5 5
6Contents 6Contents
7======== 7========
@@ -29,18 +29,19 @@ As of 2.6.13, Linux supports pluggable congestion control algorithms.
29A congestion control mechanism can be registered through functions in 29A congestion control mechanism can be registered through functions in
30tcp_cong.c. The functions used by the congestion control mechanism are 30tcp_cong.c. The functions used by the congestion control mechanism are
31registered via passing a tcp_congestion_ops struct to 31registered via passing a tcp_congestion_ops struct to
32tcp_register_congestion_control. As a minimum name, ssthresh, 32tcp_register_congestion_control. As a minimum, the congestion control
33cong_avoid must be valid. 33mechanism must provide a valid name and must implement either ssthresh,
34cong_avoid and undo_cwnd hooks or the "omnipotent" cong_control hook.
34 35
35Private data for a congestion control mechanism is stored in tp->ca_priv. 36Private data for a congestion control mechanism is stored in tp->ca_priv.
36tcp_ca(tp) returns a pointer to this space. This is preallocated space - it 37tcp_ca(tp) returns a pointer to this space. This is preallocated space - it
37is important to check the size of your private data will fit this space, or 38is important to check the size of your private data will fit this space, or
38alternatively space could be allocated elsewhere and a pointer to it could 39alternatively, space could be allocated elsewhere and a pointer to it could
39be stored here. 40be stored here.
40 41
41There are three kinds of congestion control algorithms currently: The 42There are three kinds of congestion control algorithms currently: The
42simplest ones are derived from TCP reno (highspeed, scalable) and just 43simplest ones are derived from TCP reno (highspeed, scalable) and just
43provide an alternative the congestion window calculation. More complex 44provide an alternative congestion window calculation. More complex
44ones like BIC try to look at other events to provide better 45ones like BIC try to look at other events to provide better
45heuristics. There are also round trip time based algorithms like 46heuristics. There are also round trip time based algorithms like
46Vegas and Westwood+. 47Vegas and Westwood+.
@@ -49,21 +50,15 @@ Good TCP congestion control is a complex problem because the algorithm
49needs to maintain fairness and performance. Please review current 50needs to maintain fairness and performance. Please review current
50research and RFC's before developing new modules. 51research and RFC's before developing new modules.
51 52
52The method that is used to determine which congestion control mechanism is 53The default congestion control mechanism is chosen based on the
53determined by the setting of the sysctl net.ipv4.tcp_congestion_control. 54DEFAULT_TCP_CONG Kconfig parameter. If you really want a particular default
54The default congestion control will be the last one registered (LIFO); 55value then you can set it using sysctl net.ipv4.tcp_congestion_control. The
55so if you built everything as modules, the default will be reno. If you 56module will be autoloaded if needed and you will get the expected protocol. If
56build with the defaults from Kconfig, then CUBIC will be builtin (not a 57you ask for an unknown congestion method, then the sysctl attempt will fail.
57module) and it will end up the default.
58 58
59If you really want a particular default value then you will need 59If you remove a TCP congestion control module, then you will get the next
60to set it with the sysctl. If you use a sysctl, the module will be autoloaded
61if needed and you will get the expected protocol. If you ask for an
62unknown congestion method, then the sysctl attempt will fail.
63
64If you remove a tcp congestion control module, then you will get the next
65available one. Since reno cannot be built as a module, and cannot be 60available one. Since reno cannot be built as a module, and cannot be
66deleted, it will always be available. 61removed, it will always be available.
67 62
68How the new TCP output machine [nyi] works. 63How the new TCP output machine [nyi] works.
69=========================================== 64===========================================
diff --git a/Documentation/sound/soc/dapm.rst b/Documentation/sound/soc/dapm.rst
index a27f42befa4d..8e44107933ab 100644
--- a/Documentation/sound/soc/dapm.rst
+++ b/Documentation/sound/soc/dapm.rst
@@ -105,6 +105,24 @@ Pre
105 Special PRE widget (exec before all others) 105 Special PRE widget (exec before all others)
106Post 106Post
107 Special POST widget (exec after all others) 107 Special POST widget (exec after all others)
108Buffer
109 Inter widget audio data buffer within a DSP.
110Scheduler
111 DSP internal scheduler that schedules component/pipeline processing
112 work.
113Effect
114 Widget that performs an audio processing effect.
115SRC
116 Sample Rate Converter within DSP or CODEC
117ASRC
118 Asynchronous Sample Rate Converter within DSP or CODEC
119Encoder
120 Widget that encodes audio data from one format (usually PCM) to another
121 usually more compressed format.
122Decoder
123 Widget that decodes audio data from a compressed format to an
124 uncompressed format like PCM.
125
108 126
109(Widgets are defined in include/sound/soc-dapm.h) 127(Widgets are defined in include/sound/soc-dapm.h)
110 128
diff --git a/MAINTAINERS b/MAINTAINERS
index 01dc6a4fb16c..767e9d202adf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1172,7 +1172,7 @@ N: clps711x
1172 1172
1173ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE 1173ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE
1174M: Hartley Sweeten <hsweeten@visionengravers.com> 1174M: Hartley Sweeten <hsweeten@visionengravers.com>
1175M: Ryan Mallon <rmallon@gmail.com> 1175M: Alexander Sverdlin <alexander.sverdlin@gmail.com>
1176L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1176L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1177S: Maintained 1177S: Maintained
1178F: arch/arm/mach-ep93xx/ 1178F: arch/arm/mach-ep93xx/
@@ -1489,13 +1489,15 @@ M: Gregory Clement <gregory.clement@free-electrons.com>
1489M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> 1489M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
1490L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1490L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1491S: Maintained 1491S: Maintained
1492F: arch/arm/mach-mvebu/
1493F: drivers/rtc/rtc-armada38x.c
1494F: arch/arm/boot/dts/armada* 1492F: arch/arm/boot/dts/armada*
1495F: arch/arm/boot/dts/kirkwood* 1493F: arch/arm/boot/dts/kirkwood*
1494F: arch/arm/configs/mvebu_*_defconfig
1495F: arch/arm/mach-mvebu/
1496F: arch/arm64/boot/dts/marvell/armada* 1496F: arch/arm64/boot/dts/marvell/armada*
1497F: drivers/cpufreq/mvebu-cpufreq.c 1497F: drivers/cpufreq/mvebu-cpufreq.c
1498F: arch/arm/configs/mvebu_*_defconfig 1498F: drivers/irqchip/irq-armada-370-xp.c
1499F: drivers/irqchip/irq-mvebu-*
1500F: drivers/rtc/rtc-armada38x.c
1499 1501
1500ARM/Marvell Berlin SoC support 1502ARM/Marvell Berlin SoC support
1501M: Jisheng Zhang <jszhang@marvell.com> 1503M: Jisheng Zhang <jszhang@marvell.com>
@@ -1721,7 +1723,6 @@ N: rockchip
1721ARM/SAMSUNG EXYNOS ARM ARCHITECTURES 1723ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
1722M: Kukjin Kim <kgene@kernel.org> 1724M: Kukjin Kim <kgene@kernel.org>
1723M: Krzysztof Kozlowski <krzk@kernel.org> 1725M: Krzysztof Kozlowski <krzk@kernel.org>
1724R: Javier Martinez Canillas <javier@osg.samsung.com>
1725L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1726L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1726L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers) 1727L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
1727Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/ 1728Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/
@@ -1829,7 +1830,6 @@ F: drivers/edac/altera_edac.
1829ARM/STI ARCHITECTURE 1830ARM/STI ARCHITECTURE
1830M: Patrice Chotard <patrice.chotard@st.com> 1831M: Patrice Chotard <patrice.chotard@st.com>
1831L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1832L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1832L: kernel@stlinux.com
1833W: http://www.stlinux.com 1833W: http://www.stlinux.com
1834S: Maintained 1834S: Maintained
1835F: arch/arm/mach-sti/ 1835F: arch/arm/mach-sti/
@@ -2964,7 +2964,7 @@ F: sound/pci/oxygen/
2964 2964
2965C6X ARCHITECTURE 2965C6X ARCHITECTURE
2966M: Mark Salter <msalter@redhat.com> 2966M: Mark Salter <msalter@redhat.com>
2967M: Aurelien Jacquiot <a-jacquiot@ti.com> 2967M: Aurelien Jacquiot <jacquiot.aurelien@gmail.com>
2968L: linux-c6x-dev@linux-c6x.org 2968L: linux-c6x-dev@linux-c6x.org
2969W: http://www.linux-c6x.org/wiki/index.php/Main_Page 2969W: http://www.linux-c6x.org/wiki/index.php/Main_Page
2970S: Maintained 2970S: Maintained
@@ -5622,7 +5622,7 @@ F: scripts/get_maintainer.pl
5622 5622
5623GENWQE (IBM Generic Workqueue Card) 5623GENWQE (IBM Generic Workqueue Card)
5624M: Frank Haverkamp <haver@linux.vnet.ibm.com> 5624M: Frank Haverkamp <haver@linux.vnet.ibm.com>
5625M: Gabriel Krisman Bertazi <krisman@linux.vnet.ibm.com> 5625M: Guilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com>
5626S: Supported 5626S: Supported
5627F: drivers/misc/genwqe/ 5627F: drivers/misc/genwqe/
5628 5628
@@ -5667,7 +5667,6 @@ F: tools/testing/selftests/gpio/
5667 5667
5668GPIO SUBSYSTEM 5668GPIO SUBSYSTEM
5669M: Linus Walleij <linus.walleij@linaro.org> 5669M: Linus Walleij <linus.walleij@linaro.org>
5670M: Alexandre Courbot <gnurou@gmail.com>
5671L: linux-gpio@vger.kernel.org 5670L: linux-gpio@vger.kernel.org
5672T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git 5671T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
5673S: Maintained 5672S: Maintained
@@ -7143,7 +7142,7 @@ S: Maintained
7143F: drivers/media/platform/rcar_jpu.c 7142F: drivers/media/platform/rcar_jpu.c
7144 7143
7145JSM Neo PCI based serial card 7144JSM Neo PCI based serial card
7146M: Gabriel Krisman Bertazi <krisman@linux.vnet.ibm.com> 7145M: Guilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com>
7147L: linux-serial@vger.kernel.org 7146L: linux-serial@vger.kernel.org
7148S: Maintained 7147S: Maintained
7149F: drivers/tty/serial/jsm/ 7148F: drivers/tty/serial/jsm/
@@ -7707,7 +7706,7 @@ F: drivers/platform/x86/hp_accel.c
7707 7706
7708LIVE PATCHING 7707LIVE PATCHING
7709M: Josh Poimboeuf <jpoimboe@redhat.com> 7708M: Josh Poimboeuf <jpoimboe@redhat.com>
7710M: Jessica Yu <jeyu@redhat.com> 7709M: Jessica Yu <jeyu@kernel.org>
7711M: Jiri Kosina <jikos@kernel.org> 7710M: Jiri Kosina <jikos@kernel.org>
7712M: Miroslav Benes <mbenes@suse.cz> 7711M: Miroslav Benes <mbenes@suse.cz>
7713R: Petr Mladek <pmladek@suse.com> 7712R: Petr Mladek <pmladek@suse.com>
@@ -8508,7 +8507,7 @@ S: Odd Fixes
8508F: drivers/media/radio/radio-miropcm20* 8507F: drivers/media/radio/radio-miropcm20*
8509 8508
8510MELLANOX MLX4 core VPI driver 8509MELLANOX MLX4 core VPI driver
8511M: Yishai Hadas <yishaih@mellanox.com> 8510M: Tariq Toukan <tariqt@mellanox.com>
8512L: netdev@vger.kernel.org 8511L: netdev@vger.kernel.org
8513L: linux-rdma@vger.kernel.org 8512L: linux-rdma@vger.kernel.org
8514W: http://www.mellanox.com 8513W: http://www.mellanox.com
@@ -8516,7 +8515,6 @@ Q: http://patchwork.ozlabs.org/project/netdev/list/
8516S: Supported 8515S: Supported
8517F: drivers/net/ethernet/mellanox/mlx4/ 8516F: drivers/net/ethernet/mellanox/mlx4/
8518F: include/linux/mlx4/ 8517F: include/linux/mlx4/
8519F: include/uapi/rdma/mlx4-abi.h
8520 8518
8521MELLANOX MLX4 IB driver 8519MELLANOX MLX4 IB driver
8522M: Yishai Hadas <yishaih@mellanox.com> 8520M: Yishai Hadas <yishaih@mellanox.com>
@@ -8526,6 +8524,7 @@ Q: http://patchwork.kernel.org/project/linux-rdma/list/
8526S: Supported 8524S: Supported
8527F: drivers/infiniband/hw/mlx4/ 8525F: drivers/infiniband/hw/mlx4/
8528F: include/linux/mlx4/ 8526F: include/linux/mlx4/
8527F: include/uapi/rdma/mlx4-abi.h
8529 8528
8530MELLANOX MLX5 core VPI driver 8529MELLANOX MLX5 core VPI driver
8531M: Saeed Mahameed <saeedm@mellanox.com> 8530M: Saeed Mahameed <saeedm@mellanox.com>
@@ -8538,7 +8537,6 @@ Q: http://patchwork.ozlabs.org/project/netdev/list/
8538S: Supported 8537S: Supported
8539F: drivers/net/ethernet/mellanox/mlx5/core/ 8538F: drivers/net/ethernet/mellanox/mlx5/core/
8540F: include/linux/mlx5/ 8539F: include/linux/mlx5/
8541F: include/uapi/rdma/mlx5-abi.h
8542 8540
8543MELLANOX MLX5 IB driver 8541MELLANOX MLX5 IB driver
8544M: Matan Barak <matanb@mellanox.com> 8542M: Matan Barak <matanb@mellanox.com>
@@ -8549,6 +8547,7 @@ Q: http://patchwork.kernel.org/project/linux-rdma/list/
8549S: Supported 8547S: Supported
8550F: drivers/infiniband/hw/mlx5/ 8548F: drivers/infiniband/hw/mlx5/
8551F: include/linux/mlx5/ 8549F: include/linux/mlx5/
8550F: include/uapi/rdma/mlx5-abi.h
8552 8551
8553MELEXIS MLX90614 DRIVER 8552MELEXIS MLX90614 DRIVER
8554M: Crt Mori <cmo@melexis.com> 8553M: Crt Mori <cmo@melexis.com>
@@ -8588,7 +8587,7 @@ S: Maintained
8588F: drivers/media/dvb-frontends/mn88473* 8587F: drivers/media/dvb-frontends/mn88473*
8589 8588
8590MODULE SUPPORT 8589MODULE SUPPORT
8591M: Jessica Yu <jeyu@redhat.com> 8590M: Jessica Yu <jeyu@kernel.org>
8592M: Rusty Russell <rusty@rustcorp.com.au> 8591M: Rusty Russell <rusty@rustcorp.com.au>
8593T: git git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux.git modules-next 8592T: git git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux.git modules-next
8594S: Maintained 8593S: Maintained
@@ -10450,7 +10449,7 @@ S: Orphan
10450 10449
10451PXA RTC DRIVER 10450PXA RTC DRIVER
10452M: Robert Jarzmik <robert.jarzmik@free.fr> 10451M: Robert Jarzmik <robert.jarzmik@free.fr>
10453L: rtc-linux@googlegroups.com 10452L: linux-rtc@vger.kernel.org
10454S: Maintained 10453S: Maintained
10455 10454
10456QAT DRIVER 10455QAT DRIVER
@@ -10757,7 +10756,7 @@ X: kernel/torture.c
10757REAL TIME CLOCK (RTC) SUBSYSTEM 10756REAL TIME CLOCK (RTC) SUBSYSTEM
10758M: Alessandro Zummo <a.zummo@towertech.it> 10757M: Alessandro Zummo <a.zummo@towertech.it>
10759M: Alexandre Belloni <alexandre.belloni@free-electrons.com> 10758M: Alexandre Belloni <alexandre.belloni@free-electrons.com>
10760L: rtc-linux@googlegroups.com 10759L: linux-rtc@vger.kernel.org
10761Q: http://patchwork.ozlabs.org/project/rtc-linux/list/ 10760Q: http://patchwork.ozlabs.org/project/rtc-linux/list/
10762T: git git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git 10761T: git git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git
10763S: Maintained 10762S: Maintained
@@ -11268,7 +11267,6 @@ F: drivers/media/rc/serial_ir.c
11268 11267
11269STI CEC DRIVER 11268STI CEC DRIVER
11270M: Benjamin Gaignard <benjamin.gaignard@linaro.org> 11269M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
11271L: kernel@stlinux.com
11272S: Maintained 11270S: Maintained
11273F: drivers/staging/media/st-cec/ 11271F: drivers/staging/media/st-cec/
11274F: Documentation/devicetree/bindings/media/stih-cec.txt 11272F: Documentation/devicetree/bindings/media/stih-cec.txt
@@ -11778,6 +11776,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/nsekhar/linux-davinci.git
11778S: Supported 11776S: Supported
11779F: arch/arm/mach-davinci/ 11777F: arch/arm/mach-davinci/
11780F: drivers/i2c/busses/i2c-davinci.c 11778F: drivers/i2c/busses/i2c-davinci.c
11779F: arch/arm/boot/dts/da850*
11781 11780
11782TI DAVINCI SERIES MEDIA DRIVER 11781TI DAVINCI SERIES MEDIA DRIVER
11783M: "Lad, Prabhakar" <prabhakar.csengg@gmail.com> 11782M: "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
diff --git a/Makefile b/Makefile
index 63e10bd4f14a..283c6236438e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
1VERSION = 4 1VERSION = 4
2PATCHLEVEL = 12 2PATCHLEVEL = 12
3SUBLEVEL = 0 3SUBLEVEL = 0
4EXTRAVERSION = -rc2 4EXTRAVERSION =
5NAME = Fearless Coyote 5NAME = Fearless Coyote
6 6
7# *DOCUMENTATION* 7# *DOCUMENTATION*
@@ -1437,7 +1437,7 @@ help:
1437 @echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build' 1437 @echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
1438 @echo ' make V=2 [targets] 2 => give reason for rebuild of target' 1438 @echo ' make V=2 [targets] 2 => give reason for rebuild of target'
1439 @echo ' make O=dir [targets] Locate all output files in "dir", including .config' 1439 @echo ' make O=dir [targets] Locate all output files in "dir", including .config'
1440 @echo ' make C=1 [targets] Check all c source with $$CHECK (sparse by default)' 1440 @echo ' make C=1 [targets] Check re-compiled c source with $$CHECK (sparse by default)'
1441 @echo ' make C=2 [targets] Force check of all c source with $$CHECK' 1441 @echo ' make C=2 [targets] Force check of all c source with $$CHECK'
1442 @echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections' 1442 @echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
1443 @echo ' make W=n [targets] Enable extra gcc checks, n=1,2,3 where' 1443 @echo ' make W=n [targets] Enable extra gcc checks, n=1,2,3 where'
diff --git a/arch/arc/include/asm/processor.h b/arch/arc/include/asm/processor.h
index 6e1242da0159..4104a0839214 100644
--- a/arch/arc/include/asm/processor.h
+++ b/arch/arc/include/asm/processor.h
@@ -86,8 +86,6 @@ struct task_struct;
86#define TSK_K_BLINK(tsk) TSK_K_REG(tsk, 4) 86#define TSK_K_BLINK(tsk) TSK_K_REG(tsk, 4)
87#define TSK_K_FP(tsk) TSK_K_REG(tsk, 0) 87#define TSK_K_FP(tsk) TSK_K_REG(tsk, 0)
88 88
89#define thread_saved_pc(tsk) TSK_K_BLINK(tsk)
90
91extern void start_thread(struct pt_regs * regs, unsigned long pc, 89extern void start_thread(struct pt_regs * regs, unsigned long pc,
92 unsigned long usp); 90 unsigned long usp);
93 91
diff --git a/arch/arc/mm/mmap.c b/arch/arc/mm/mmap.c
index 3e25e8d6486b..2e13683dfb24 100644
--- a/arch/arc/mm/mmap.c
+++ b/arch/arc/mm/mmap.c
@@ -65,7 +65,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
65 65
66 vma = find_vma(mm, addr); 66 vma = find_vma(mm, addr);
67 if (TASK_SIZE - len >= addr && 67 if (TASK_SIZE - len >= addr &&
68 (!vma || addr + len <= vma->vm_start)) 68 (!vma || addr + len <= vm_start_gap(vma)))
69 return addr; 69 return addr;
70 } 70 }
71 71
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 4c1a35f15838..c0fcab6a5504 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1416,6 +1416,7 @@ choice
1416 config VMSPLIT_3G 1416 config VMSPLIT_3G
1417 bool "3G/1G user/kernel split" 1417 bool "3G/1G user/kernel split"
1418 config VMSPLIT_3G_OPT 1418 config VMSPLIT_3G_OPT
1419 depends on !ARM_LPAE
1419 bool "3G/1G user/kernel split (for full 1G low memory)" 1420 bool "3G/1G user/kernel split (for full 1G low memory)"
1420 config VMSPLIT_2G 1421 config VMSPLIT_2G
1421 bool "2G/2G user/kernel split" 1422 bool "2G/2G user/kernel split"
diff --git a/arch/arm/boot/compressed/efi-header.S b/arch/arm/boot/compressed/efi-header.S
index 9d5dc4fda3c1..a17ca8d78656 100644
--- a/arch/arm/boot/compressed/efi-header.S
+++ b/arch/arm/boot/compressed/efi-header.S
@@ -17,14 +17,13 @@
17 @ there. 17 @ there.
18 .inst 'M' | ('Z' << 8) | (0x1310 << 16) @ tstne r0, #0x4d000 18 .inst 'M' | ('Z' << 8) | (0x1310 << 16) @ tstne r0, #0x4d000
19#else 19#else
20 mov r0, r0 20 AR_CLASS( mov r0, r0 )
21 M_CLASS( nop.w )
21#endif 22#endif
22 .endm 23 .endm
23 24
24 .macro __EFI_HEADER 25 .macro __EFI_HEADER
25#ifdef CONFIG_EFI_STUB 26#ifdef CONFIG_EFI_STUB
26 b __efi_start
27
28 .set start_offset, __efi_start - start 27 .set start_offset, __efi_start - start
29 .org start + 0x3c 28 .org start + 0x3c
30 @ 29 @
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index 7c711ba61417..8a756870c238 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -130,19 +130,22 @@ start:
130 .rept 7 130 .rept 7
131 __nop 131 __nop
132 .endr 132 .endr
133 ARM( mov r0, r0 ) 133#ifndef CONFIG_THUMB2_KERNEL
134 ARM( b 1f ) 134 mov r0, r0
135 THUMB( badr r12, 1f ) 135#else
136 THUMB( bx r12 ) 136 AR_CLASS( sub pc, pc, #3 ) @ A/R: switch to Thumb2 mode
137 M_CLASS( nop.w ) @ M: already in Thumb2 mode
138 .thumb
139#endif
140 W(b) 1f
137 141
138 .word _magic_sig @ Magic numbers to help the loader 142 .word _magic_sig @ Magic numbers to help the loader
139 .word _magic_start @ absolute load/run zImage address 143 .word _magic_start @ absolute load/run zImage address
140 .word _magic_end @ zImage end address 144 .word _magic_end @ zImage end address
141 .word 0x04030201 @ endianness flag 145 .word 0x04030201 @ endianness flag
142 146
143 THUMB( .thumb ) 147 __EFI_HEADER
1441: __EFI_HEADER 1481:
145
146 ARM_BE8( setend be ) @ go BE8 if compiled for BE8 149 ARM_BE8( setend be ) @ go BE8 if compiled for BE8
147 AR_CLASS( mrs r9, cpsr ) 150 AR_CLASS( mrs r9, cpsr )
148#ifdef CONFIG_ARM_VIRT_EXT 151#ifdef CONFIG_ARM_VIRT_EXT
diff --git a/arch/arm/boot/dts/am335x-sl50.dts b/arch/arm/boot/dts/am335x-sl50.dts
index c5d2589c55fc..fc864a855991 100644
--- a/arch/arm/boot/dts/am335x-sl50.dts
+++ b/arch/arm/boot/dts/am335x-sl50.dts
@@ -220,7 +220,7 @@
220 220
221 mmc1_pins: pinmux_mmc1_pins { 221 mmc1_pins: pinmux_mmc1_pins {
222 pinctrl-single,pins = < 222 pinctrl-single,pins = <
223 AM33XX_IOPAD(0x960, PIN_INPUT | MUX_MODE7) /* spi0_cs1.gpio0_6 */ 223 AM33XX_IOPAD(0x96c, PIN_INPUT | MUX_MODE7) /* uart0_rtsn.gpio1_9 */
224 >; 224 >;
225 }; 225 };
226 226
@@ -280,10 +280,6 @@
280 AM33XX_IOPAD(0x834, PIN_INPUT_PULLUP | MUX_MODE7) /* nKbdReset - gpmc_ad13.gpio1_13 */ 280 AM33XX_IOPAD(0x834, PIN_INPUT_PULLUP | MUX_MODE7) /* nKbdReset - gpmc_ad13.gpio1_13 */
281 AM33XX_IOPAD(0x838, PIN_INPUT_PULLUP | MUX_MODE7) /* nDispReset - gpmc_ad14.gpio1_14 */ 281 AM33XX_IOPAD(0x838, PIN_INPUT_PULLUP | MUX_MODE7) /* nDispReset - gpmc_ad14.gpio1_14 */
282 AM33XX_IOPAD(0x844, PIN_INPUT_PULLUP | MUX_MODE7) /* USB1_enPower - gpmc_a1.gpio1_17 */ 282 AM33XX_IOPAD(0x844, PIN_INPUT_PULLUP | MUX_MODE7) /* USB1_enPower - gpmc_a1.gpio1_17 */
283 /* AVR Programming - SPI Bus (bit bang) - Screen and Keyboard */
284 AM33XX_IOPAD(0x954, PIN_INPUT_PULLUP | MUX_MODE7) /* Kbd/Disp/BattMOSI spi0_d0.gpio0_3 */
285 AM33XX_IOPAD(0x958, PIN_INPUT_PULLUP | MUX_MODE7) /* Kbd/Disp/BattMISO spi0_d1.gpio0_4 */
286 AM33XX_IOPAD(0x950, PIN_INPUT_PULLUP | MUX_MODE7) /* Kbd/Disp/BattSCLK spi0_clk.gpio0_2 */
287 /* PDI Bus - Battery system */ 283 /* PDI Bus - Battery system */
288 AM33XX_IOPAD(0x840, PIN_INPUT_PULLUP | MUX_MODE7) /* nBattReset gpmc_a0.gpio1_16 */ 284 AM33XX_IOPAD(0x840, PIN_INPUT_PULLUP | MUX_MODE7) /* nBattReset gpmc_a0.gpio1_16 */
289 AM33XX_IOPAD(0x83c, PIN_INPUT_PULLUP | MUX_MODE7) /* BattPDIData gpmc_ad15.gpio1_15 */ 285 AM33XX_IOPAD(0x83c, PIN_INPUT_PULLUP | MUX_MODE7) /* BattPDIData gpmc_ad15.gpio1_15 */
@@ -384,7 +380,7 @@
384 pinctrl-names = "default"; 380 pinctrl-names = "default";
385 pinctrl-0 = <&mmc1_pins>; 381 pinctrl-0 = <&mmc1_pins>;
386 bus-width = <4>; 382 bus-width = <4>;
387 cd-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; 383 cd-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
388 vmmc-supply = <&vmmcsd_fixed>; 384 vmmc-supply = <&vmmcsd_fixed>;
389}; 385};
390 386
diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
index 561f27d8d922..9444a9a9ba10 100644
--- a/arch/arm/boot/dts/bcm283x.dtsi
+++ b/arch/arm/boot/dts/bcm283x.dtsi
@@ -3,6 +3,11 @@
3#include <dt-bindings/clock/bcm2835-aux.h> 3#include <dt-bindings/clock/bcm2835-aux.h>
4#include <dt-bindings/gpio/gpio.h> 4#include <dt-bindings/gpio/gpio.h>
5 5
6/* firmware-provided startup stubs live here, where the secondary CPUs are
7 * spinning.
8 */
9/memreserve/ 0x00000000 0x00001000;
10
6/* This include file covers the common peripherals and configuration between 11/* This include file covers the common peripherals and configuration between
7 * bcm2835 and bcm2836 implementations, leaving the CPU configuration to 12 * bcm2835 and bcm2836 implementations, leaving the CPU configuration to
8 * bcm2835.dtsi and bcm2836.dtsi. 13 * bcm2835.dtsi and bcm2836.dtsi.
diff --git a/arch/arm/boot/dts/imx6ul-14x14-evk.dts b/arch/arm/boot/dts/imx6ul-14x14-evk.dts
index f18e1f1d0ce2..d2be8aa3370b 100644
--- a/arch/arm/boot/dts/imx6ul-14x14-evk.dts
+++ b/arch/arm/boot/dts/imx6ul-14x14-evk.dts
@@ -120,10 +120,16 @@
120 120
121 ethphy0: ethernet-phy@2 { 121 ethphy0: ethernet-phy@2 {
122 reg = <2>; 122 reg = <2>;
123 micrel,led-mode = <1>;
124 clocks = <&clks IMX6UL_CLK_ENET_REF>;
125 clock-names = "rmii-ref";
123 }; 126 };
124 127
125 ethphy1: ethernet-phy@1 { 128 ethphy1: ethernet-phy@1 {
126 reg = <1>; 129 reg = <1>;
130 micrel,led-mode = <1>;
131 clocks = <&clks IMX6UL_CLK_ENET2_REF>;
132 clock-names = "rmii-ref";
127 }; 133 };
128 }; 134 };
129}; 135};
diff --git a/arch/arm/boot/dts/keystone-k2l-netcp.dtsi b/arch/arm/boot/dts/keystone-k2l-netcp.dtsi
index b6f26824e83a..66f615a74118 100644
--- a/arch/arm/boot/dts/keystone-k2l-netcp.dtsi
+++ b/arch/arm/boot/dts/keystone-k2l-netcp.dtsi
@@ -137,8 +137,8 @@ netcp: netcp@26000000 {
137 /* NetCP address range */ 137 /* NetCP address range */
138 ranges = <0 0x26000000 0x1000000>; 138 ranges = <0 0x26000000 0x1000000>;
139 139
140 clocks = <&clkpa>, <&clkcpgmac>, <&chipclk12>, <&clkosr>; 140 clocks = <&clkpa>, <&clkcpgmac>, <&chipclk12>;
141 clock-names = "pa_clk", "ethss_clk", "cpts", "osr_clk"; 141 clock-names = "pa_clk", "ethss_clk", "cpts";
142 dma-coherent; 142 dma-coherent;
143 143
144 ti,navigator-dmas = <&dma_gbe 0>, 144 ti,navigator-dmas = <&dma_gbe 0>,
diff --git a/arch/arm/boot/dts/keystone-k2l.dtsi b/arch/arm/boot/dts/keystone-k2l.dtsi
index b58e7ebc0919..148650406cf7 100644
--- a/arch/arm/boot/dts/keystone-k2l.dtsi
+++ b/arch/arm/boot/dts/keystone-k2l.dtsi
@@ -232,6 +232,14 @@
232 }; 232 };
233 }; 233 };
234 234
235 osr: sram@70000000 {
236 compatible = "mmio-sram";
237 reg = <0x70000000 0x10000>;
238 #address-cells = <1>;
239 #size-cells = <1>;
240 clocks = <&clkosr>;
241 };
242
235 dspgpio0: keystone_dsp_gpio@02620240 { 243 dspgpio0: keystone_dsp_gpio@02620240 {
236 compatible = "ti,keystone-dsp-gpio"; 244 compatible = "ti,keystone-dsp-gpio";
237 gpio-controller; 245 gpio-controller;
diff --git a/arch/arm/boot/dts/sunxi-h3-h5.dtsi b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
index 1aeeacb3a884..d4f600dbb7eb 100644
--- a/arch/arm/boot/dts/sunxi-h3-h5.dtsi
+++ b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
@@ -558,10 +558,11 @@
558 }; 558 };
559 559
560 r_ccu: clock@1f01400 { 560 r_ccu: clock@1f01400 {
561 compatible = "allwinner,sun50i-a64-r-ccu"; 561 compatible = "allwinner,sun8i-h3-r-ccu";
562 reg = <0x01f01400 0x100>; 562 reg = <0x01f01400 0x100>;
563 clocks = <&osc24M>, <&osc32k>, <&iosc>; 563 clocks = <&osc24M>, <&osc32k>, <&iosc>,
564 clock-names = "hosc", "losc", "iosc"; 564 <&ccu 9>;
565 clock-names = "hosc", "losc", "iosc", "pll-periph";
565 #clock-cells = <1>; 566 #clock-cells = <1>;
566 #reset-cells = <1>; 567 #reset-cells = <1>;
567 }; 568 };
diff --git a/arch/arm/boot/dts/versatile-pb.dts b/arch/arm/boot/dts/versatile-pb.dts
index 33a8eb28374e..06e2331f666d 100644
--- a/arch/arm/boot/dts/versatile-pb.dts
+++ b/arch/arm/boot/dts/versatile-pb.dts
@@ -1,4 +1,4 @@
1#include <versatile-ab.dts> 1#include "versatile-ab.dts"
2 2
3/ { 3/ {
4 model = "ARM Versatile PB"; 4 model = "ARM Versatile PB";
diff --git a/arch/arm/common/mcpm_entry.c b/arch/arm/common/mcpm_entry.c
index cf062472e07b..2b913f17d50f 100644
--- a/arch/arm/common/mcpm_entry.c
+++ b/arch/arm/common/mcpm_entry.c
@@ -235,7 +235,7 @@ int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster)
235 return ret; 235 return ret;
236} 236}
237 237
238typedef void (*phys_reset_t)(unsigned long); 238typedef typeof(cpu_reset) phys_reset_t;
239 239
240void mcpm_cpu_power_down(void) 240void mcpm_cpu_power_down(void)
241{ 241{
@@ -300,7 +300,7 @@ void mcpm_cpu_power_down(void)
300 * on the CPU. 300 * on the CPU.
301 */ 301 */
302 phys_reset = (phys_reset_t)(unsigned long)__pa_symbol(cpu_reset); 302 phys_reset = (phys_reset_t)(unsigned long)__pa_symbol(cpu_reset);
303 phys_reset(__pa_symbol(mcpm_entry_point)); 303 phys_reset(__pa_symbol(mcpm_entry_point), false);
304 304
305 /* should never get here */ 305 /* should never get here */
306 BUG(); 306 BUG();
@@ -389,7 +389,7 @@ static int __init nocache_trampoline(unsigned long _arg)
389 __mcpm_cpu_down(cpu, cluster); 389 __mcpm_cpu_down(cpu, cluster);
390 390
391 phys_reset = (phys_reset_t)(unsigned long)__pa_symbol(cpu_reset); 391 phys_reset = (phys_reset_t)(unsigned long)__pa_symbol(cpu_reset);
392 phys_reset(__pa_symbol(mcpm_entry_point)); 392 phys_reset(__pa_symbol(mcpm_entry_point), false);
393 BUG(); 393 BUG();
394} 394}
395 395
diff --git a/arch/arm/include/asm/device.h b/arch/arm/include/asm/device.h
index 36ec9c8f6e16..3234fe9bba6e 100644
--- a/arch/arm/include/asm/device.h
+++ b/arch/arm/include/asm/device.h
@@ -19,7 +19,8 @@ struct dev_archdata {
19#ifdef CONFIG_XEN 19#ifdef CONFIG_XEN
20 const struct dma_map_ops *dev_dma_ops; 20 const struct dma_map_ops *dev_dma_ops;
21#endif 21#endif
22 bool dma_coherent; 22 unsigned int dma_coherent:1;
23 unsigned int dma_ops_setup:1;
23}; 24};
24 25
25struct omap_device; 26struct omap_device;
diff --git a/arch/arm/include/asm/pgtable-nommu.h b/arch/arm/include/asm/pgtable-nommu.h
index 302240c19a5a..a0d726a47c8a 100644
--- a/arch/arm/include/asm/pgtable-nommu.h
+++ b/arch/arm/include/asm/pgtable-nommu.h
@@ -66,6 +66,7 @@ typedef pte_t *pte_addr_t;
66#define pgprot_noncached(prot) (prot) 66#define pgprot_noncached(prot) (prot)
67#define pgprot_writecombine(prot) (prot) 67#define pgprot_writecombine(prot) (prot)
68#define pgprot_dmacoherent(prot) (prot) 68#define pgprot_dmacoherent(prot) (prot)
69#define pgprot_device(prot) (prot)
69 70
70 71
71/* 72/*
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 32e1a9513dc7..4e80bf7420d4 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -315,7 +315,7 @@ static void __init cacheid_init(void)
315 if (arch >= CPU_ARCH_ARMv6) { 315 if (arch >= CPU_ARCH_ARMv6) {
316 unsigned int cachetype = read_cpuid_cachetype(); 316 unsigned int cachetype = read_cpuid_cachetype();
317 317
318 if ((arch == CPU_ARCH_ARMv7M) && !cachetype) { 318 if ((arch == CPU_ARCH_ARMv7M) && !(cachetype & 0xf000f)) {
319 cacheid = 0; 319 cacheid = 0;
320 } else if ((cachetype & (7 << 29)) == 4 << 29) { 320 } else if ((cachetype & (7 << 29)) == 4 << 29) {
321 /* ARMv7 register format */ 321 /* ARMv7 register format */
diff --git a/arch/arm/kvm/init.S b/arch/arm/kvm/init.S
index 570ed4a9c261..5386528665b5 100644
--- a/arch/arm/kvm/init.S
+++ b/arch/arm/kvm/init.S
@@ -104,7 +104,6 @@ __do_hyp_init:
104 @ - Write permission implies XN: disabled 104 @ - Write permission implies XN: disabled
105 @ - Instruction cache: enabled 105 @ - Instruction cache: enabled
106 @ - Data/Unified cache: enabled 106 @ - Data/Unified cache: enabled
107 @ - Memory alignment checks: enabled
108 @ - MMU: enabled (this code must be run from an identity mapping) 107 @ - MMU: enabled (this code must be run from an identity mapping)
109 mrc p15, 4, r0, c1, c0, 0 @ HSCR 108 mrc p15, 4, r0, c1, c0, 0 @ HSCR
110 ldr r2, =HSCTLR_MASK 109 ldr r2, =HSCTLR_MASK
@@ -112,8 +111,8 @@ __do_hyp_init:
112 mrc p15, 0, r1, c1, c0, 0 @ SCTLR 111 mrc p15, 0, r1, c1, c0, 0 @ SCTLR
113 ldr r2, =(HSCTLR_EE | HSCTLR_FI | HSCTLR_I | HSCTLR_C) 112 ldr r2, =(HSCTLR_EE | HSCTLR_FI | HSCTLR_I | HSCTLR_C)
114 and r1, r1, r2 113 and r1, r1, r2
115 ARM( ldr r2, =(HSCTLR_M | HSCTLR_A) ) 114 ARM( ldr r2, =(HSCTLR_M) )
116 THUMB( ldr r2, =(HSCTLR_M | HSCTLR_A | HSCTLR_TE) ) 115 THUMB( ldr r2, =(HSCTLR_M | HSCTLR_TE) )
117 orr r1, r1, r2 116 orr r1, r1, r2
118 orr r0, r0, r1 117 orr r0, r0, r1
119 mcr p15, 4, r0, c1, c0, 0 @ HSCR 118 mcr p15, 4, r0, c1, c0, 0 @ HSCR
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
index 841e924143f9..cbd959b73654 100644
--- a/arch/arm/mach-at91/Kconfig
+++ b/arch/arm/mach-at91/Kconfig
@@ -1,6 +1,7 @@
1menuconfig ARCH_AT91 1menuconfig ARCH_AT91
2 bool "Atmel SoCs" 2 bool "Atmel SoCs"
3 depends on ARCH_MULTI_V4T || ARCH_MULTI_V5 || ARCH_MULTI_V7 3 depends on ARCH_MULTI_V4T || ARCH_MULTI_V5 || ARCH_MULTI_V7
4 select ARM_CPU_SUSPEND if PM
4 select COMMON_CLK_AT91 5 select COMMON_CLK_AT91
5 select GPIOLIB 6 select GPIOLIB
6 select PINCTRL 7 select PINCTRL
diff --git a/arch/arm/mach-davinci/pm.c b/arch/arm/mach-davinci/pm.c
index efb80354f303..b5cc05dc2cb2 100644
--- a/arch/arm/mach-davinci/pm.c
+++ b/arch/arm/mach-davinci/pm.c
@@ -153,7 +153,8 @@ int __init davinci_pm_init(void)
153 davinci_sram_suspend = sram_alloc(davinci_cpu_suspend_sz, NULL); 153 davinci_sram_suspend = sram_alloc(davinci_cpu_suspend_sz, NULL);
154 if (!davinci_sram_suspend) { 154 if (!davinci_sram_suspend) {
155 pr_err("PM: cannot allocate SRAM memory\n"); 155 pr_err("PM: cannot allocate SRAM memory\n");
156 return -ENOMEM; 156 ret = -ENOMEM;
157 goto no_sram_mem;
157 } 158 }
158 159
159 davinci_sram_push(davinci_sram_suspend, davinci_cpu_suspend, 160 davinci_sram_push(davinci_sram_suspend, davinci_cpu_suspend,
@@ -161,6 +162,10 @@ int __init davinci_pm_init(void)
161 162
162 suspend_set_ops(&davinci_pm_ops); 163 suspend_set_ops(&davinci_pm_ops);
163 164
165 return 0;
166
167no_sram_mem:
168 iounmap(pm_config.ddrpsc_reg_base);
164no_ddrpsc_mem: 169no_ddrpsc_mem:
165 iounmap(pm_config.ddrpll_reg_base); 170 iounmap(pm_config.ddrpll_reg_base);
166no_ddrpll_mem: 171no_ddrpll_mem:
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index c742dfd2967b..bd83c531828a 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -2311,7 +2311,14 @@ int arm_iommu_attach_device(struct device *dev,
2311} 2311}
2312EXPORT_SYMBOL_GPL(arm_iommu_attach_device); 2312EXPORT_SYMBOL_GPL(arm_iommu_attach_device);
2313 2313
2314static void __arm_iommu_detach_device(struct device *dev) 2314/**
2315 * arm_iommu_detach_device
2316 * @dev: valid struct device pointer
2317 *
2318 * Detaches the provided device from a previously attached map.
2319 * This voids the dma operations (dma_map_ops pointer)
2320 */
2321void arm_iommu_detach_device(struct device *dev)
2315{ 2322{
2316 struct dma_iommu_mapping *mapping; 2323 struct dma_iommu_mapping *mapping;
2317 2324
@@ -2324,22 +2331,10 @@ static void __arm_iommu_detach_device(struct device *dev)
2324 iommu_detach_device(mapping->domain, dev); 2331 iommu_detach_device(mapping->domain, dev);
2325 kref_put(&mapping->kref, release_iommu_mapping); 2332 kref_put(&mapping->kref, release_iommu_mapping);
2326 to_dma_iommu_mapping(dev) = NULL; 2333 to_dma_iommu_mapping(dev) = NULL;
2334 set_dma_ops(dev, NULL);
2327 2335
2328 pr_debug("Detached IOMMU controller from %s device.\n", dev_name(dev)); 2336 pr_debug("Detached IOMMU controller from %s device.\n", dev_name(dev));
2329} 2337}
2330
2331/**
2332 * arm_iommu_detach_device
2333 * @dev: valid struct device pointer
2334 *
2335 * Detaches the provided device from a previously attached map.
2336 * This voids the dma operations (dma_map_ops pointer)
2337 */
2338void arm_iommu_detach_device(struct device *dev)
2339{
2340 __arm_iommu_detach_device(dev);
2341 set_dma_ops(dev, NULL);
2342}
2343EXPORT_SYMBOL_GPL(arm_iommu_detach_device); 2338EXPORT_SYMBOL_GPL(arm_iommu_detach_device);
2344 2339
2345static const struct dma_map_ops *arm_get_iommu_dma_map_ops(bool coherent) 2340static const struct dma_map_ops *arm_get_iommu_dma_map_ops(bool coherent)
@@ -2379,7 +2374,7 @@ static void arm_teardown_iommu_dma_ops(struct device *dev)
2379 if (!mapping) 2374 if (!mapping)
2380 return; 2375 return;
2381 2376
2382 __arm_iommu_detach_device(dev); 2377 arm_iommu_detach_device(dev);
2383 arm_iommu_release_mapping(mapping); 2378 arm_iommu_release_mapping(mapping);
2384} 2379}
2385 2380
@@ -2430,9 +2425,13 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
2430 dev->dma_ops = xen_dma_ops; 2425 dev->dma_ops = xen_dma_ops;
2431 } 2426 }
2432#endif 2427#endif
2428 dev->archdata.dma_ops_setup = true;
2433} 2429}
2434 2430
2435void arch_teardown_dma_ops(struct device *dev) 2431void arch_teardown_dma_ops(struct device *dev)
2436{ 2432{
2433 if (!dev->archdata.dma_ops_setup)
2434 return;
2435
2437 arm_teardown_iommu_dma_ops(dev); 2436 arm_teardown_iommu_dma_ops(dev);
2438} 2437}
diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c
index 2239fde10b80..f0701d8d24df 100644
--- a/arch/arm/mm/mmap.c
+++ b/arch/arm/mm/mmap.c
@@ -90,7 +90,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
90 90
91 vma = find_vma(mm, addr); 91 vma = find_vma(mm, addr);
92 if (TASK_SIZE - len >= addr && 92 if (TASK_SIZE - len >= addr &&
93 (!vma || addr + len <= vma->vm_start)) 93 (!vma || addr + len <= vm_start_gap(vma)))
94 return addr; 94 return addr;
95 } 95 }
96 96
@@ -141,7 +141,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
141 addr = PAGE_ALIGN(addr); 141 addr = PAGE_ALIGN(addr);
142 vma = find_vma(mm, addr); 142 vma = find_vma(mm, addr);
143 if (TASK_SIZE - len >= addr && 143 if (TASK_SIZE - len >= addr &&
144 (!vma || addr + len <= vma->vm_start)) 144 (!vma || addr + len <= vm_start_gap(vma)))
145 return addr; 145 return addr;
146 } 146 }
147 147
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 31af3cb59a60..e46a6a446cdd 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1218,15 +1218,15 @@ void __init adjust_lowmem_bounds(void)
1218 1218
1219 high_memory = __va(arm_lowmem_limit - 1) + 1; 1219 high_memory = __va(arm_lowmem_limit - 1) + 1;
1220 1220
1221 if (!memblock_limit)
1222 memblock_limit = arm_lowmem_limit;
1223
1221 /* 1224 /*
1222 * Round the memblock limit down to a pmd size. This 1225 * Round the memblock limit down to a pmd size. This
1223 * helps to ensure that we will allocate memory from the 1226 * helps to ensure that we will allocate memory from the
1224 * last full pmd, which should be mapped. 1227 * last full pmd, which should be mapped.
1225 */ 1228 */
1226 if (memblock_limit) 1229 memblock_limit = round_down(memblock_limit, PMD_SIZE);
1227 memblock_limit = round_down(memblock_limit, PMD_SIZE);
1228 if (!memblock_limit)
1229 memblock_limit = arm_lowmem_limit;
1230 1230
1231 if (!IS_ENABLED(CONFIG_HIGHMEM) || cache_is_vipt_aliasing()) { 1231 if (!IS_ENABLED(CONFIG_HIGHMEM) || cache_is_vipt_aliasing()) {
1232 if (memblock_end_of_DRAM() > arm_lowmem_limit) { 1232 if (memblock_end_of_DRAM() > arm_lowmem_limit) {
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 3dcd7ec69bca..b2024db225a9 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -1084,10 +1084,6 @@ config SYSVIPC_COMPAT
1084 def_bool y 1084 def_bool y
1085 depends on COMPAT && SYSVIPC 1085 depends on COMPAT && SYSVIPC
1086 1086
1087config KEYS_COMPAT
1088 def_bool y
1089 depends on COMPAT && KEYS
1090
1091endmenu 1087endmenu
1092 1088
1093menu "Power management options" 1089menu "Power management options"
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
index c7f669f5884f..166c9ef884dc 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
@@ -406,8 +406,9 @@
406 r_ccu: clock@1f01400 { 406 r_ccu: clock@1f01400 {
407 compatible = "allwinner,sun50i-a64-r-ccu"; 407 compatible = "allwinner,sun50i-a64-r-ccu";
408 reg = <0x01f01400 0x100>; 408 reg = <0x01f01400 0x100>;
409 clocks = <&osc24M>, <&osc32k>, <&iosc>; 409 clocks = <&osc24M>, <&osc32k>, <&iosc>,
410 clock-names = "hosc", "losc", "iosc"; 410 <&ccu 11>;
411 clock-names = "hosc", "losc", "iosc", "pll-periph";
411 #clock-cells = <1>; 412 #clock-cells = <1>;
412 #reset-cells = <1>; 413 #reset-cells = <1>;
413 }; 414 };
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi
index 4d314a253fd9..732e2e06f503 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi
+++ b/arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi
@@ -40,7 +40,7 @@
40 * OTHER DEALINGS IN THE SOFTWARE. 40 * OTHER DEALINGS IN THE SOFTWARE.
41 */ 41 */
42 42
43#include "sunxi-h3-h5.dtsi" 43#include <arm/sunxi-h3-h5.dtsi>
44 44
45/ { 45/ {
46 cpus { 46 cpus {
diff --git a/arch/arm64/boot/dts/allwinner/sunxi-h3-h5.dtsi b/arch/arm64/boot/dts/allwinner/sunxi-h3-h5.dtsi
deleted file mode 120000
index 036f01dc2b9b..000000000000
--- a/arch/arm64/boot/dts/allwinner/sunxi-h3-h5.dtsi
+++ /dev/null
@@ -1 +0,0 @@
1../../../../arm/boot/dts/sunxi-h3-h5.dtsi \ No newline at end of file
diff --git a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts
index 75bce2d0b1a8..49f6a6242cf9 100644
--- a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts
+++ b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts
@@ -81,6 +81,45 @@
81 }; 81 };
82 }; 82 };
83 83
84 reg_sys_5v: regulator@0 {
85 compatible = "regulator-fixed";
86 regulator-name = "SYS_5V";
87 regulator-min-microvolt = <5000000>;
88 regulator-max-microvolt = <5000000>;
89 regulator-boot-on;
90 regulator-always-on;
91 };
92
93 reg_vdd_3v3: regulator@1 {
94 compatible = "regulator-fixed";
95 regulator-name = "VDD_3V3";
96 regulator-min-microvolt = <3300000>;
97 regulator-max-microvolt = <3300000>;
98 regulator-boot-on;
99 regulator-always-on;
100 vin-supply = <&reg_sys_5v>;
101 };
102
103 reg_5v_hub: regulator@2 {
104 compatible = "regulator-fixed";
105 regulator-name = "5V_HUB";
106 regulator-min-microvolt = <5000000>;
107 regulator-max-microvolt = <5000000>;
108 regulator-boot-on;
109 gpio = <&gpio0 7 0>;
110 regulator-always-on;
111 vin-supply = <&reg_sys_5v>;
112 };
113
114 wl1835_pwrseq: wl1835-pwrseq {
115 compatible = "mmc-pwrseq-simple";
116 /* WLAN_EN GPIO */
117 reset-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
118 clocks = <&pmic>;
119 clock-names = "ext_clock";
120 power-off-delay-us = <10>;
121 };
122
84 soc { 123 soc {
85 spi0: spi@f7106000 { 124 spi0: spi@f7106000 {
86 status = "ok"; 125 status = "ok";
@@ -256,11 +295,31 @@
256 295
257 /* GPIO blocks 16 thru 19 do not appear to be routed to pins */ 296 /* GPIO blocks 16 thru 19 do not appear to be routed to pins */
258 297
298 dwmmc_0: dwmmc0@f723d000 {
299 cap-mmc-highspeed;
300 non-removable;
301 bus-width = <0x8>;
302 vmmc-supply = <&ldo19>;
303 };
304
305 dwmmc_1: dwmmc1@f723e000 {
306 card-detect-delay = <200>;
307 cap-sd-highspeed;
308 sd-uhs-sdr12;
309 sd-uhs-sdr25;
310 sd-uhs-sdr50;
311 vqmmc-supply = <&ldo7>;
312 vmmc-supply = <&ldo10>;
313 bus-width = <0x4>;
314 disable-wp;
315 cd-gpios = <&gpio1 0 1>;
316 };
317
259 dwmmc_2: dwmmc2@f723f000 { 318 dwmmc_2: dwmmc2@f723f000 {
260 ti,non-removable; 319 bus-width = <0x4>;
261 non-removable; 320 non-removable;
262 /* WL_EN */ 321 vmmc-supply = <&reg_vdd_3v3>;
263 vmmc-supply = <&wlan_en_reg>; 322 mmc-pwrseq = <&wl1835_pwrseq>;
264 323
265 #address-cells = <0x1>; 324 #address-cells = <0x1>;
266 #size-cells = <0x0>; 325 #size-cells = <0x0>;
@@ -272,18 +331,6 @@
272 interrupts = <3 IRQ_TYPE_EDGE_RISING>; 331 interrupts = <3 IRQ_TYPE_EDGE_RISING>;
273 }; 332 };
274 }; 333 };
275
276 wlan_en_reg: regulator@1 {
277 compatible = "regulator-fixed";
278 regulator-name = "wlan-en-regulator";
279 regulator-min-microvolt = <1800000>;
280 regulator-max-microvolt = <1800000>;
281 /* WLAN_EN GPIO */
282 gpio = <&gpio0 5 0>;
283 /* WLAN card specific delay */
284 startup-delay-us = <70000>;
285 enable-active-high;
286 };
287 }; 334 };
288 335
289 leds { 336 leds {
@@ -330,6 +377,7 @@
330 pmic: pmic@f8000000 { 377 pmic: pmic@f8000000 {
331 compatible = "hisilicon,hi655x-pmic"; 378 compatible = "hisilicon,hi655x-pmic";
332 reg = <0x0 0xf8000000 0x0 0x1000>; 379 reg = <0x0 0xf8000000 0x0 0x1000>;
380 #clock-cells = <0>;
333 interrupt-controller; 381 interrupt-controller;
334 #interrupt-cells = <2>; 382 #interrupt-cells = <2>;
335 pmic-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; 383 pmic-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
diff --git a/arch/arm64/boot/dts/hisilicon/hi6220.dtsi b/arch/arm64/boot/dts/hisilicon/hi6220.dtsi
index 1e5129b19280..5013e4b2ea71 100644
--- a/arch/arm64/boot/dts/hisilicon/hi6220.dtsi
+++ b/arch/arm64/boot/dts/hisilicon/hi6220.dtsi
@@ -725,20 +725,10 @@
725 status = "disabled"; 725 status = "disabled";
726 }; 726 };
727 727
728 fixed_5v_hub: regulator@0 {
729 compatible = "regulator-fixed";
730 regulator-name = "fixed_5v_hub";
731 regulator-min-microvolt = <5000000>;
732 regulator-max-microvolt = <5000000>;
733 regulator-boot-on;
734 gpio = <&gpio0 7 0>;
735 regulator-always-on;
736 };
737
738 usb_phy: usbphy { 728 usb_phy: usbphy {
739 compatible = "hisilicon,hi6220-usb-phy"; 729 compatible = "hisilicon,hi6220-usb-phy";
740 #phy-cells = <0>; 730 #phy-cells = <0>;
741 phy-supply = <&fixed_5v_hub>; 731 phy-supply = <&reg_5v_hub>;
742 hisilicon,peripheral-syscon = <&sys_ctrl>; 732 hisilicon,peripheral-syscon = <&sys_ctrl>;
743 }; 733 };
744 734
@@ -766,17 +756,12 @@
766 756
767 dwmmc_0: dwmmc0@f723d000 { 757 dwmmc_0: dwmmc0@f723d000 {
768 compatible = "hisilicon,hi6220-dw-mshc"; 758 compatible = "hisilicon,hi6220-dw-mshc";
769 num-slots = <0x1>;
770 cap-mmc-highspeed;
771 non-removable;
772 reg = <0x0 0xf723d000 0x0 0x1000>; 759 reg = <0x0 0xf723d000 0x0 0x1000>;
773 interrupts = <0x0 0x48 0x4>; 760 interrupts = <0x0 0x48 0x4>;
774 clocks = <&sys_ctrl 2>, <&sys_ctrl 1>; 761 clocks = <&sys_ctrl 2>, <&sys_ctrl 1>;
775 clock-names = "ciu", "biu"; 762 clock-names = "ciu", "biu";
776 resets = <&sys_ctrl PERIPH_RSTDIS0_MMC0>; 763 resets = <&sys_ctrl PERIPH_RSTDIS0_MMC0>;
777 reset-names = "reset"; 764 reset-names = "reset";
778 bus-width = <0x8>;
779 vmmc-supply = <&ldo19>;
780 pinctrl-names = "default"; 765 pinctrl-names = "default";
781 pinctrl-0 = <&emmc_pmx_func &emmc_clk_cfg_func 766 pinctrl-0 = <&emmc_pmx_func &emmc_clk_cfg_func
782 &emmc_cfg_func &emmc_rst_cfg_func>; 767 &emmc_cfg_func &emmc_rst_cfg_func>;
@@ -784,13 +769,7 @@
784 769
785 dwmmc_1: dwmmc1@f723e000 { 770 dwmmc_1: dwmmc1@f723e000 {
786 compatible = "hisilicon,hi6220-dw-mshc"; 771 compatible = "hisilicon,hi6220-dw-mshc";
787 num-slots = <0x1>;
788 card-detect-delay = <200>;
789 hisilicon,peripheral-syscon = <&ao_ctrl>; 772 hisilicon,peripheral-syscon = <&ao_ctrl>;
790 cap-sd-highspeed;
791 sd-uhs-sdr12;
792 sd-uhs-sdr25;
793 sd-uhs-sdr50;
794 reg = <0x0 0xf723e000 0x0 0x1000>; 773 reg = <0x0 0xf723e000 0x0 0x1000>;
795 interrupts = <0x0 0x49 0x4>; 774 interrupts = <0x0 0x49 0x4>;
796 #address-cells = <0x1>; 775 #address-cells = <0x1>;
@@ -799,11 +778,6 @@
799 clock-names = "ciu", "biu"; 778 clock-names = "ciu", "biu";
800 resets = <&sys_ctrl PERIPH_RSTDIS0_MMC1>; 779 resets = <&sys_ctrl PERIPH_RSTDIS0_MMC1>;
801 reset-names = "reset"; 780 reset-names = "reset";
802 vqmmc-supply = <&ldo7>;
803 vmmc-supply = <&ldo10>;
804 bus-width = <0x4>;
805 disable-wp;
806 cd-gpios = <&gpio1 0 1>;
807 pinctrl-names = "default", "idle"; 781 pinctrl-names = "default", "idle";
808 pinctrl-0 = <&sd_pmx_func &sd_clk_cfg_func &sd_cfg_func>; 782 pinctrl-0 = <&sd_pmx_func &sd_clk_cfg_func &sd_cfg_func>;
809 pinctrl-1 = <&sd_pmx_idle &sd_clk_cfg_idle &sd_cfg_idle>; 783 pinctrl-1 = <&sd_pmx_idle &sd_clk_cfg_idle &sd_cfg_idle>;
@@ -811,15 +785,12 @@
811 785
812 dwmmc_2: dwmmc2@f723f000 { 786 dwmmc_2: dwmmc2@f723f000 {
813 compatible = "hisilicon,hi6220-dw-mshc"; 787 compatible = "hisilicon,hi6220-dw-mshc";
814 num-slots = <0x1>;
815 reg = <0x0 0xf723f000 0x0 0x1000>; 788 reg = <0x0 0xf723f000 0x0 0x1000>;
816 interrupts = <0x0 0x4a 0x4>; 789 interrupts = <0x0 0x4a 0x4>;
817 clocks = <&sys_ctrl HI6220_MMC2_CIUCLK>, <&sys_ctrl HI6220_MMC2_CLK>; 790 clocks = <&sys_ctrl HI6220_MMC2_CIUCLK>, <&sys_ctrl HI6220_MMC2_CLK>;
818 clock-names = "ciu", "biu"; 791 clock-names = "ciu", "biu";
819 resets = <&sys_ctrl PERIPH_RSTDIS0_MMC2>; 792 resets = <&sys_ctrl PERIPH_RSTDIS0_MMC2>;
820 reset-names = "reset"; 793 reset-names = "reset";
821 bus-width = <0x4>;
822 broken-cd;
823 pinctrl-names = "default", "idle"; 794 pinctrl-names = "default", "idle";
824 pinctrl-0 = <&sdio_pmx_func &sdio_clk_cfg_func &sdio_cfg_func>; 795 pinctrl-0 = <&sdio_pmx_func &sdio_clk_cfg_func &sdio_cfg_func>;
825 pinctrl-1 = <&sdio_pmx_idle &sdio_clk_cfg_idle &sdio_cfg_idle>; 796 pinctrl-1 = <&sdio_pmx_idle &sdio_clk_cfg_idle &sdio_cfg_idle>;
diff --git a/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi b/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
index ac8df5201cd6..b4bc42ece754 100644
--- a/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
+++ b/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
@@ -231,8 +231,7 @@
231 cpm_crypto: crypto@800000 { 231 cpm_crypto: crypto@800000 {
232 compatible = "inside-secure,safexcel-eip197"; 232 compatible = "inside-secure,safexcel-eip197";
233 reg = <0x800000 0x200000>; 233 reg = <0x800000 0x200000>;
234 interrupts = <GIC_SPI 34 (IRQ_TYPE_EDGE_RISING 234 interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
235 | IRQ_TYPE_LEVEL_HIGH)>,
236 <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>, 235 <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
237 <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>, 236 <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
238 <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>, 237 <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
diff --git a/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi b/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
index 7740a75a8230..6e2058847ddc 100644
--- a/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
+++ b/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
@@ -221,8 +221,7 @@
221 cps_crypto: crypto@800000 { 221 cps_crypto: crypto@800000 {
222 compatible = "inside-secure,safexcel-eip197"; 222 compatible = "inside-secure,safexcel-eip197";
223 reg = <0x800000 0x200000>; 223 reg = <0x800000 0x200000>;
224 interrupts = <GIC_SPI 34 (IRQ_TYPE_EDGE_RISING 224 interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
225 | IRQ_TYPE_LEVEL_HIGH)>,
226 <GIC_SPI 278 IRQ_TYPE_LEVEL_HIGH>, 225 <GIC_SPI 278 IRQ_TYPE_LEVEL_HIGH>,
227 <GIC_SPI 279 IRQ_TYPE_LEVEL_HIGH>, 226 <GIC_SPI 279 IRQ_TYPE_LEVEL_HIGH>,
228 <GIC_SPI 280 IRQ_TYPE_LEVEL_HIGH>, 227 <GIC_SPI 280 IRQ_TYPE_LEVEL_HIGH>,
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index 65cdd878cfbd..97c123e09e45 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -68,6 +68,7 @@ CONFIG_PCIE_QCOM=y
68CONFIG_PCIE_ARMADA_8K=y 68CONFIG_PCIE_ARMADA_8K=y
69CONFIG_PCI_AARDVARK=y 69CONFIG_PCI_AARDVARK=y
70CONFIG_PCIE_RCAR=y 70CONFIG_PCIE_RCAR=y
71CONFIG_PCIE_ROCKCHIP=m
71CONFIG_PCI_HOST_GENERIC=y 72CONFIG_PCI_HOST_GENERIC=y
72CONFIG_PCI_XGENE=y 73CONFIG_PCI_XGENE=y
73CONFIG_ARM64_VA_BITS_48=y 74CONFIG_ARM64_VA_BITS_48=y
@@ -208,6 +209,8 @@ CONFIG_BRCMFMAC=m
208CONFIG_WL18XX=m 209CONFIG_WL18XX=m
209CONFIG_WLCORE_SDIO=m 210CONFIG_WLCORE_SDIO=m
210CONFIG_INPUT_EVDEV=y 211CONFIG_INPUT_EVDEV=y
212CONFIG_KEYBOARD_ADC=m
213CONFIG_KEYBOARD_CROS_EC=y
211CONFIG_KEYBOARD_GPIO=y 214CONFIG_KEYBOARD_GPIO=y
212CONFIG_INPUT_MISC=y 215CONFIG_INPUT_MISC=y
213CONFIG_INPUT_PM8941_PWRKEY=y 216CONFIG_INPUT_PM8941_PWRKEY=y
@@ -263,6 +266,7 @@ CONFIG_SPI_MESON_SPIFC=m
263CONFIG_SPI_ORION=y 266CONFIG_SPI_ORION=y
264CONFIG_SPI_PL022=y 267CONFIG_SPI_PL022=y
265CONFIG_SPI_QUP=y 268CONFIG_SPI_QUP=y
269CONFIG_SPI_ROCKCHIP=y
266CONFIG_SPI_S3C64XX=y 270CONFIG_SPI_S3C64XX=y
267CONFIG_SPI_SPIDEV=m 271CONFIG_SPI_SPIDEV=m
268CONFIG_SPMI=y 272CONFIG_SPMI=y
@@ -292,6 +296,7 @@ CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
292CONFIG_CPU_THERMAL=y 296CONFIG_CPU_THERMAL=y
293CONFIG_THERMAL_EMULATION=y 297CONFIG_THERMAL_EMULATION=y
294CONFIG_EXYNOS_THERMAL=y 298CONFIG_EXYNOS_THERMAL=y
299CONFIG_ROCKCHIP_THERMAL=m
295CONFIG_WATCHDOG=y 300CONFIG_WATCHDOG=y
296CONFIG_S3C2410_WATCHDOG=y 301CONFIG_S3C2410_WATCHDOG=y
297CONFIG_MESON_GXBB_WATCHDOG=m 302CONFIG_MESON_GXBB_WATCHDOG=m
@@ -300,12 +305,14 @@ CONFIG_RENESAS_WDT=y
300CONFIG_BCM2835_WDT=y 305CONFIG_BCM2835_WDT=y
301CONFIG_MFD_CROS_EC=y 306CONFIG_MFD_CROS_EC=y
302CONFIG_MFD_CROS_EC_I2C=y 307CONFIG_MFD_CROS_EC_I2C=y
308CONFIG_MFD_CROS_EC_SPI=y
303CONFIG_MFD_EXYNOS_LPASS=m 309CONFIG_MFD_EXYNOS_LPASS=m
304CONFIG_MFD_HI655X_PMIC=y 310CONFIG_MFD_HI655X_PMIC=y
305CONFIG_MFD_MAX77620=y 311CONFIG_MFD_MAX77620=y
306CONFIG_MFD_SPMI_PMIC=y 312CONFIG_MFD_SPMI_PMIC=y
307CONFIG_MFD_RK808=y 313CONFIG_MFD_RK808=y
308CONFIG_MFD_SEC_CORE=y 314CONFIG_MFD_SEC_CORE=y
315CONFIG_REGULATOR_FAN53555=y
309CONFIG_REGULATOR_FIXED_VOLTAGE=y 316CONFIG_REGULATOR_FIXED_VOLTAGE=y
310CONFIG_REGULATOR_GPIO=y 317CONFIG_REGULATOR_GPIO=y
311CONFIG_REGULATOR_HI655X=y 318CONFIG_REGULATOR_HI655X=y
@@ -473,8 +480,10 @@ CONFIG_ARCH_TEGRA_186_SOC=y
473CONFIG_EXTCON_USB_GPIO=y 480CONFIG_EXTCON_USB_GPIO=y
474CONFIG_IIO=y 481CONFIG_IIO=y
475CONFIG_EXYNOS_ADC=y 482CONFIG_EXYNOS_ADC=y
483CONFIG_ROCKCHIP_SARADC=m
476CONFIG_PWM=y 484CONFIG_PWM=y
477CONFIG_PWM_BCM2835=m 485CONFIG_PWM_BCM2835=m
486CONFIG_PWM_CROS_EC=m
478CONFIG_PWM_MESON=m 487CONFIG_PWM_MESON=m
479CONFIG_PWM_ROCKCHIP=y 488CONFIG_PWM_ROCKCHIP=y
480CONFIG_PWM_SAMSUNG=y 489CONFIG_PWM_SAMSUNG=y
@@ -484,6 +493,7 @@ CONFIG_PHY_HI6220_USB=y
484CONFIG_PHY_SUN4I_USB=y 493CONFIG_PHY_SUN4I_USB=y
485CONFIG_PHY_ROCKCHIP_INNO_USB2=y 494CONFIG_PHY_ROCKCHIP_INNO_USB2=y
486CONFIG_PHY_ROCKCHIP_EMMC=y 495CONFIG_PHY_ROCKCHIP_EMMC=y
496CONFIG_PHY_ROCKCHIP_PCIE=m
487CONFIG_PHY_XGENE=y 497CONFIG_PHY_XGENE=y
488CONFIG_PHY_TEGRA_XUSB=y 498CONFIG_PHY_TEGRA_XUSB=y
489CONFIG_ARM_SCPI_PROTOCOL=y 499CONFIG_ARM_SCPI_PROTOCOL=y
diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h
index 0e99978da3f0..59cca1d6ec54 100644
--- a/arch/arm64/include/asm/acpi.h
+++ b/arch/arm64/include/asm/acpi.h
@@ -23,9 +23,9 @@
23#define ACPI_MADT_GICC_LENGTH \ 23#define ACPI_MADT_GICC_LENGTH \
24 (acpi_gbl_FADT.header.revision < 6 ? 76 : 80) 24 (acpi_gbl_FADT.header.revision < 6 ? 76 : 80)
25 25
26#define BAD_MADT_GICC_ENTRY(entry, end) \ 26#define BAD_MADT_GICC_ENTRY(entry, end) \
27 (!(entry) || (unsigned long)(entry) + sizeof(*(entry)) > (end) || \ 27 (!(entry) || (entry)->header.length != ACPI_MADT_GICC_LENGTH || \
28 (entry)->header.length != ACPI_MADT_GICC_LENGTH) 28 (unsigned long)(entry) + ACPI_MADT_GICC_LENGTH > (end))
29 29
30/* Basic configuration for ACPI */ 30/* Basic configuration for ACPI */
31#ifdef CONFIG_ACPI 31#ifdef CONFIG_ACPI
diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
index 15c142ce991c..b4d13d9267ff 100644
--- a/arch/arm64/include/asm/sysreg.h
+++ b/arch/arm64/include/asm/sysreg.h
@@ -286,6 +286,10 @@
286#define SCTLR_ELx_A (1 << 1) 286#define SCTLR_ELx_A (1 << 1)
287#define SCTLR_ELx_M 1 287#define SCTLR_ELx_M 1
288 288
289#define SCTLR_EL2_RES1 ((1 << 4) | (1 << 5) | (1 << 11) | (1 << 16) | \
290 (1 << 16) | (1 << 18) | (1 << 22) | (1 << 23) | \
291 (1 << 28) | (1 << 29))
292
289#define SCTLR_ELx_FLAGS (SCTLR_ELx_M | SCTLR_ELx_A | SCTLR_ELx_C | \ 293#define SCTLR_ELx_FLAGS (SCTLR_ELx_M | SCTLR_ELx_A | SCTLR_ELx_C | \
290 SCTLR_ELx_SA | SCTLR_ELx_I) 294 SCTLR_ELx_SA | SCTLR_ELx_I)
291 295
diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
index 4f0e3ebfea4b..c7e3e6387a49 100644
--- a/arch/arm64/kernel/pci.c
+++ b/arch/arm64/kernel/pci.c
@@ -191,8 +191,10 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
191 return NULL; 191 return NULL;
192 192
193 root_ops = kzalloc_node(sizeof(*root_ops), GFP_KERNEL, node); 193 root_ops = kzalloc_node(sizeof(*root_ops), GFP_KERNEL, node);
194 if (!root_ops) 194 if (!root_ops) {
195 kfree(ri);
195 return NULL; 196 return NULL;
197 }
196 198
197 ri->cfg = pci_acpi_setup_ecam_mapping(root); 199 ri->cfg = pci_acpi_setup_ecam_mapping(root);
198 if (!ri->cfg) { 200 if (!ri->cfg) {
diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
index 41b6e31f8f55..d0cb007fa482 100644
--- a/arch/arm64/kernel/vdso.c
+++ b/arch/arm64/kernel/vdso.c
@@ -221,10 +221,11 @@ void update_vsyscall(struct timekeeper *tk)
221 /* tkr_mono.cycle_last == tkr_raw.cycle_last */ 221 /* tkr_mono.cycle_last == tkr_raw.cycle_last */
222 vdso_data->cs_cycle_last = tk->tkr_mono.cycle_last; 222 vdso_data->cs_cycle_last = tk->tkr_mono.cycle_last;
223 vdso_data->raw_time_sec = tk->raw_time.tv_sec; 223 vdso_data->raw_time_sec = tk->raw_time.tv_sec;
224 vdso_data->raw_time_nsec = tk->raw_time.tv_nsec; 224 vdso_data->raw_time_nsec = (tk->raw_time.tv_nsec <<
225 tk->tkr_raw.shift) +
226 tk->tkr_raw.xtime_nsec;
225 vdso_data->xtime_clock_sec = tk->xtime_sec; 227 vdso_data->xtime_clock_sec = tk->xtime_sec;
226 vdso_data->xtime_clock_nsec = tk->tkr_mono.xtime_nsec; 228 vdso_data->xtime_clock_nsec = tk->tkr_mono.xtime_nsec;
227 /* tkr_raw.xtime_nsec == 0 */
228 vdso_data->cs_mono_mult = tk->tkr_mono.mult; 229 vdso_data->cs_mono_mult = tk->tkr_mono.mult;
229 vdso_data->cs_raw_mult = tk->tkr_raw.mult; 230 vdso_data->cs_raw_mult = tk->tkr_raw.mult;
230 /* tkr_mono.shift == tkr_raw.shift */ 231 /* tkr_mono.shift == tkr_raw.shift */
diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S
index e00b4671bd7c..76320e920965 100644
--- a/arch/arm64/kernel/vdso/gettimeofday.S
+++ b/arch/arm64/kernel/vdso/gettimeofday.S
@@ -256,7 +256,6 @@ monotonic_raw:
256 seqcnt_check fail=monotonic_raw 256 seqcnt_check fail=monotonic_raw
257 257
258 /* All computations are done with left-shifted nsecs. */ 258 /* All computations are done with left-shifted nsecs. */
259 lsl x14, x14, x12
260 get_nsec_per_sec res=x9 259 get_nsec_per_sec res=x9
261 lsl x9, x9, x12 260 lsl x9, x9, x12
262 261
diff --git a/arch/arm64/kvm/hyp-init.S b/arch/arm64/kvm/hyp-init.S
index 839425c24b1c..3f9615582377 100644
--- a/arch/arm64/kvm/hyp-init.S
+++ b/arch/arm64/kvm/hyp-init.S
@@ -106,10 +106,13 @@ __do_hyp_init:
106 tlbi alle2 106 tlbi alle2
107 dsb sy 107 dsb sy
108 108
109 mrs x4, sctlr_el2 109 /*
110 and x4, x4, #SCTLR_ELx_EE // preserve endianness of EL2 110 * Preserve all the RES1 bits while setting the default flags,
111 ldr x5, =SCTLR_ELx_FLAGS 111 * as well as the EE bit on BE. Drop the A flag since the compiler
112 orr x4, x4, x5 112 * is allowed to generate unaligned accesses.
113 */
114 ldr x4, =(SCTLR_EL2_RES1 | (SCTLR_ELx_FLAGS & ~SCTLR_ELx_A))
115CPU_BE( orr x4, x4, #SCTLR_ELx_EE)
113 msr sctlr_el2, x4 116 msr sctlr_el2, x4
114 isb 117 isb
115 118
diff --git a/arch/arm64/kvm/vgic-sys-reg-v3.c b/arch/arm64/kvm/vgic-sys-reg-v3.c
index 79f37e37d367..6260b69e5622 100644
--- a/arch/arm64/kvm/vgic-sys-reg-v3.c
+++ b/arch/arm64/kvm/vgic-sys-reg-v3.c
@@ -65,8 +65,8 @@ static bool access_gic_ctlr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
65 * Here set VMCR.CTLR in ICC_CTLR_EL1 layout. 65 * Here set VMCR.CTLR in ICC_CTLR_EL1 layout.
66 * The vgic_set_vmcr() will convert to ICH_VMCR layout. 66 * The vgic_set_vmcr() will convert to ICH_VMCR layout.
67 */ 67 */
68 vmcr.ctlr = val & ICC_CTLR_EL1_CBPR_MASK; 68 vmcr.cbpr = (val & ICC_CTLR_EL1_CBPR_MASK) >> ICC_CTLR_EL1_CBPR_SHIFT;
69 vmcr.ctlr |= val & ICC_CTLR_EL1_EOImode_MASK; 69 vmcr.eoim = (val & ICC_CTLR_EL1_EOImode_MASK) >> ICC_CTLR_EL1_EOImode_SHIFT;
70 vgic_set_vmcr(vcpu, &vmcr); 70 vgic_set_vmcr(vcpu, &vmcr);
71 } else { 71 } else {
72 val = 0; 72 val = 0;
@@ -83,8 +83,8 @@ static bool access_gic_ctlr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
83 * The VMCR.CTLR value is in ICC_CTLR_EL1 layout. 83 * The VMCR.CTLR value is in ICC_CTLR_EL1 layout.
84 * Extract it directly using ICC_CTLR_EL1 reg definitions. 84 * Extract it directly using ICC_CTLR_EL1 reg definitions.
85 */ 85 */
86 val |= vmcr.ctlr & ICC_CTLR_EL1_CBPR_MASK; 86 val |= (vmcr.cbpr << ICC_CTLR_EL1_CBPR_SHIFT) & ICC_CTLR_EL1_CBPR_MASK;
87 val |= vmcr.ctlr & ICC_CTLR_EL1_EOImode_MASK; 87 val |= (vmcr.eoim << ICC_CTLR_EL1_EOImode_SHIFT) & ICC_CTLR_EL1_EOImode_MASK;
88 88
89 p->regval = val; 89 p->regval = val;
90 } 90 }
@@ -135,7 +135,7 @@ static bool access_gic_bpr1(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
135 p->regval = 0; 135 p->regval = 0;
136 136
137 vgic_get_vmcr(vcpu, &vmcr); 137 vgic_get_vmcr(vcpu, &vmcr);
138 if (!((vmcr.ctlr & ICH_VMCR_CBPR_MASK) >> ICH_VMCR_CBPR_SHIFT)) { 138 if (!vmcr.cbpr) {
139 if (p->is_write) { 139 if (p->is_write) {
140 vmcr.abpr = (p->regval & ICC_BPR1_EL1_MASK) >> 140 vmcr.abpr = (p->regval & ICC_BPR1_EL1_MASK) >>
141 ICC_BPR1_EL1_SHIFT; 141 ICC_BPR1_EL1_SHIFT;
diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
index 71f930501ade..c870d6f01ac2 100644
--- a/arch/arm64/net/bpf_jit_comp.c
+++ b/arch/arm64/net/bpf_jit_comp.c
@@ -36,6 +36,7 @@ int bpf_jit_enable __read_mostly;
36#define TMP_REG_1 (MAX_BPF_JIT_REG + 0) 36#define TMP_REG_1 (MAX_BPF_JIT_REG + 0)
37#define TMP_REG_2 (MAX_BPF_JIT_REG + 1) 37#define TMP_REG_2 (MAX_BPF_JIT_REG + 1)
38#define TCALL_CNT (MAX_BPF_JIT_REG + 2) 38#define TCALL_CNT (MAX_BPF_JIT_REG + 2)
39#define TMP_REG_3 (MAX_BPF_JIT_REG + 3)
39 40
40/* Map BPF registers to A64 registers */ 41/* Map BPF registers to A64 registers */
41static const int bpf2a64[] = { 42static const int bpf2a64[] = {
@@ -57,6 +58,7 @@ static const int bpf2a64[] = {
57 /* temporary registers for internal BPF JIT */ 58 /* temporary registers for internal BPF JIT */
58 [TMP_REG_1] = A64_R(10), 59 [TMP_REG_1] = A64_R(10),
59 [TMP_REG_2] = A64_R(11), 60 [TMP_REG_2] = A64_R(11),
61 [TMP_REG_3] = A64_R(12),
60 /* tail_call_cnt */ 62 /* tail_call_cnt */
61 [TCALL_CNT] = A64_R(26), 63 [TCALL_CNT] = A64_R(26),
62 /* temporary register for blinding constants */ 64 /* temporary register for blinding constants */
@@ -319,6 +321,7 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
319 const u8 src = bpf2a64[insn->src_reg]; 321 const u8 src = bpf2a64[insn->src_reg];
320 const u8 tmp = bpf2a64[TMP_REG_1]; 322 const u8 tmp = bpf2a64[TMP_REG_1];
321 const u8 tmp2 = bpf2a64[TMP_REG_2]; 323 const u8 tmp2 = bpf2a64[TMP_REG_2];
324 const u8 tmp3 = bpf2a64[TMP_REG_3];
322 const s16 off = insn->off; 325 const s16 off = insn->off;
323 const s32 imm = insn->imm; 326 const s32 imm = insn->imm;
324 const int i = insn - ctx->prog->insnsi; 327 const int i = insn - ctx->prog->insnsi;
@@ -689,10 +692,10 @@ emit_cond_jmp:
689 emit(A64_PRFM(tmp, PST, L1, STRM), ctx); 692 emit(A64_PRFM(tmp, PST, L1, STRM), ctx);
690 emit(A64_LDXR(isdw, tmp2, tmp), ctx); 693 emit(A64_LDXR(isdw, tmp2, tmp), ctx);
691 emit(A64_ADD(isdw, tmp2, tmp2, src), ctx); 694 emit(A64_ADD(isdw, tmp2, tmp2, src), ctx);
692 emit(A64_STXR(isdw, tmp2, tmp, tmp2), ctx); 695 emit(A64_STXR(isdw, tmp2, tmp, tmp3), ctx);
693 jmp_offset = -3; 696 jmp_offset = -3;
694 check_imm19(jmp_offset); 697 check_imm19(jmp_offset);
695 emit(A64_CBNZ(0, tmp2, jmp_offset), ctx); 698 emit(A64_CBNZ(0, tmp3, jmp_offset), ctx);
696 break; 699 break;
697 700
698 /* R0 = ntohx(*(size *)(((struct sk_buff *)R6)->data + imm)) */ 701 /* R0 = ntohx(*(size *)(((struct sk_buff *)R6)->data + imm)) */
diff --git a/arch/blackfin/include/asm/processor.h b/arch/blackfin/include/asm/processor.h
index 85d4af97c986..dbdbb8a558df 100644
--- a/arch/blackfin/include/asm/processor.h
+++ b/arch/blackfin/include/asm/processor.h
@@ -75,11 +75,6 @@ static inline void release_thread(struct task_struct *dead_task)
75{ 75{
76} 76}
77 77
78/*
79 * Return saved PC of a blocked thread.
80 */
81#define thread_saved_pc(tsk) (tsk->thread.pc)
82
83unsigned long get_wchan(struct task_struct *p); 78unsigned long get_wchan(struct task_struct *p);
84 79
85#define KSTK_EIP(tsk) \ 80#define KSTK_EIP(tsk) \
diff --git a/arch/c6x/include/asm/processor.h b/arch/c6x/include/asm/processor.h
index b9eb3da7f278..7c87b5be53b5 100644
--- a/arch/c6x/include/asm/processor.h
+++ b/arch/c6x/include/asm/processor.h
@@ -96,11 +96,6 @@ static inline void release_thread(struct task_struct *dead_task)
96#define release_segments(mm) do { } while (0) 96#define release_segments(mm) do { } while (0)
97 97
98/* 98/*
99 * saved PC of a blocked thread.
100 */
101#define thread_saved_pc(tsk) (task_pt_regs(tsk)->pc)
102
103/*
104 * saved kernel SP and DP of a blocked thread. 99 * saved kernel SP and DP of a blocked thread.
105 */ 100 */
106#ifdef _BIG_ENDIAN 101#ifdef _BIG_ENDIAN
diff --git a/arch/cris/arch-v10/kernel/process.c b/arch/cris/arch-v10/kernel/process.c
index e299d30105b5..a2cdb1521aca 100644
--- a/arch/cris/arch-v10/kernel/process.c
+++ b/arch/cris/arch-v10/kernel/process.c
@@ -69,14 +69,6 @@ void hard_reset_now (void)
69 while(1) /* waiting for RETRIBUTION! */ ; 69 while(1) /* waiting for RETRIBUTION! */ ;
70} 70}
71 71
72/*
73 * Return saved PC of a blocked thread.
74 */
75unsigned long thread_saved_pc(struct task_struct *t)
76{
77 return task_pt_regs(t)->irp;
78}
79
80/* setup the child's kernel stack with a pt_regs and switch_stack on it. 72/* setup the child's kernel stack with a pt_regs and switch_stack on it.
81 * it will be un-nested during _resume and _ret_from_sys_call when the 73 * it will be un-nested during _resume and _ret_from_sys_call when the
82 * new thread is scheduled. 74 * new thread is scheduled.
diff --git a/arch/cris/arch-v32/kernel/process.c b/arch/cris/arch-v32/kernel/process.c
index c530a8fa87ce..fe87b383fbf3 100644
--- a/arch/cris/arch-v32/kernel/process.c
+++ b/arch/cris/arch-v32/kernel/process.c
@@ -85,14 +85,6 @@ hard_reset_now(void)
85} 85}
86 86
87/* 87/*
88 * Return saved PC of a blocked thread.
89 */
90unsigned long thread_saved_pc(struct task_struct *t)
91{
92 return task_pt_regs(t)->erp;
93}
94
95/*
96 * Setup the child's kernel stack with a pt_regs and call switch_stack() on it. 88 * Setup the child's kernel stack with a pt_regs and call switch_stack() on it.
97 * It will be unnested during _resume and _ret_from_sys_call when the new thread 89 * It will be unnested during _resume and _ret_from_sys_call when the new thread
98 * is scheduled. 90 * is scheduled.
diff --git a/arch/cris/include/asm/processor.h b/arch/cris/include/asm/processor.h
index 15b815df29c1..bc2729e4b2c9 100644
--- a/arch/cris/include/asm/processor.h
+++ b/arch/cris/include/asm/processor.h
@@ -52,8 +52,6 @@ unsigned long get_wchan(struct task_struct *p);
52 52
53#define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp) 53#define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp)
54 54
55extern unsigned long thread_saved_pc(struct task_struct *tsk);
56
57/* Free all resources held by a thread. */ 55/* Free all resources held by a thread. */
58static inline void release_thread(struct task_struct *dead_task) 56static inline void release_thread(struct task_struct *dead_task)
59{ 57{
diff --git a/arch/frv/include/asm/processor.h b/arch/frv/include/asm/processor.h
index ddaeb9cc9143..e4d08d74ed9f 100644
--- a/arch/frv/include/asm/processor.h
+++ b/arch/frv/include/asm/processor.h
@@ -96,11 +96,6 @@ extern asmlinkage void *restore_user_regs(const struct user_context *target, ...
96#define release_segments(mm) do { } while (0) 96#define release_segments(mm) do { } while (0)
97#define forget_segments() do { } while (0) 97#define forget_segments() do { } while (0)
98 98
99/*
100 * Return saved PC of a blocked thread.
101 */
102extern unsigned long thread_saved_pc(struct task_struct *tsk);
103
104unsigned long get_wchan(struct task_struct *p); 99unsigned long get_wchan(struct task_struct *p);
105 100
106#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc) 101#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)
diff --git a/arch/frv/include/asm/timex.h b/arch/frv/include/asm/timex.h
index a89bddefdacf..139093fab326 100644
--- a/arch/frv/include/asm/timex.h
+++ b/arch/frv/include/asm/timex.h
@@ -16,5 +16,11 @@ static inline cycles_t get_cycles(void)
16#define vxtime_lock() do {} while (0) 16#define vxtime_lock() do {} while (0)
17#define vxtime_unlock() do {} while (0) 17#define vxtime_unlock() do {} while (0)
18 18
19/* This attribute is used in include/linux/jiffies.h alongside with
20 * __cacheline_aligned_in_smp. It is assumed that __cacheline_aligned_in_smp
21 * for frv does not contain another section specification.
22 */
23#define __jiffy_arch_data __attribute__((__section__(".data")))
24
19#endif 25#endif
20 26
diff --git a/arch/frv/kernel/process.c b/arch/frv/kernel/process.c
index 5a4c92abc99e..a957b374e3a6 100644
--- a/arch/frv/kernel/process.c
+++ b/arch/frv/kernel/process.c
@@ -198,15 +198,6 @@ unsigned long get_wchan(struct task_struct *p)
198 return 0; 198 return 0;
199} 199}
200 200
201unsigned long thread_saved_pc(struct task_struct *tsk)
202{
203 /* Check whether the thread is blocked in resume() */
204 if (in_sched_functions(tsk->thread.pc))
205 return ((unsigned long *)tsk->thread.fp)[2];
206 else
207 return tsk->thread.pc;
208}
209
210int elf_check_arch(const struct elf32_hdr *hdr) 201int elf_check_arch(const struct elf32_hdr *hdr)
211{ 202{
212 unsigned long hsr0 = __get_HSR(0); 203 unsigned long hsr0 = __get_HSR(0);
diff --git a/arch/frv/mm/elf-fdpic.c b/arch/frv/mm/elf-fdpic.c
index da82c25301e7..46aa289c5102 100644
--- a/arch/frv/mm/elf-fdpic.c
+++ b/arch/frv/mm/elf-fdpic.c
@@ -75,7 +75,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi
75 addr = PAGE_ALIGN(addr); 75 addr = PAGE_ALIGN(addr);
76 vma = find_vma(current->mm, addr); 76 vma = find_vma(current->mm, addr);
77 if (TASK_SIZE - len >= addr && 77 if (TASK_SIZE - len >= addr &&
78 (!vma || addr + len <= vma->vm_start)) 78 (!vma || addr + len <= vm_start_gap(vma)))
79 goto success; 79 goto success;
80 } 80 }
81 81
diff --git a/arch/h8300/include/asm/processor.h b/arch/h8300/include/asm/processor.h
index 65132d7ae9e5..afa53147e66a 100644
--- a/arch/h8300/include/asm/processor.h
+++ b/arch/h8300/include/asm/processor.h
@@ -110,10 +110,6 @@ static inline void release_thread(struct task_struct *dead_task)
110{ 110{
111} 111}
112 112
113/*
114 * Return saved PC of a blocked thread.
115 */
116unsigned long thread_saved_pc(struct task_struct *tsk);
117unsigned long get_wchan(struct task_struct *p); 113unsigned long get_wchan(struct task_struct *p);
118 114
119#define KSTK_EIP(tsk) \ 115#define KSTK_EIP(tsk) \
diff --git a/arch/h8300/kernel/process.c b/arch/h8300/kernel/process.c
index 0f5db5bb561b..d1ddcabbbe83 100644
--- a/arch/h8300/kernel/process.c
+++ b/arch/h8300/kernel/process.c
@@ -129,11 +129,6 @@ int copy_thread(unsigned long clone_flags,
129 return 0; 129 return 0;
130} 130}
131 131
132unsigned long thread_saved_pc(struct task_struct *tsk)
133{
134 return ((struct pt_regs *)tsk->thread.esp0)->pc;
135}
136
137unsigned long get_wchan(struct task_struct *p) 132unsigned long get_wchan(struct task_struct *p)
138{ 133{
139 unsigned long fp, pc; 134 unsigned long fp, pc;
diff --git a/arch/hexagon/include/asm/processor.h b/arch/hexagon/include/asm/processor.h
index 45a825402f63..ce67940860a5 100644
--- a/arch/hexagon/include/asm/processor.h
+++ b/arch/hexagon/include/asm/processor.h
@@ -33,9 +33,6 @@
33/* task_struct, defined elsewhere, is the "process descriptor" */ 33/* task_struct, defined elsewhere, is the "process descriptor" */
34struct task_struct; 34struct task_struct;
35 35
36/* this is defined in arch/process.c */
37extern unsigned long thread_saved_pc(struct task_struct *tsk);
38
39extern void start_thread(struct pt_regs *, unsigned long, unsigned long); 36extern void start_thread(struct pt_regs *, unsigned long, unsigned long);
40 37
41/* 38/*
diff --git a/arch/hexagon/kernel/process.c b/arch/hexagon/kernel/process.c
index de715bab7956..656050c2e6a0 100644
--- a/arch/hexagon/kernel/process.c
+++ b/arch/hexagon/kernel/process.c
@@ -61,14 +61,6 @@ void arch_cpu_idle(void)
61} 61}
62 62
63/* 63/*
64 * Return saved PC of a blocked thread
65 */
66unsigned long thread_saved_pc(struct task_struct *tsk)
67{
68 return 0;
69}
70
71/*
72 * Copy architecture-specific thread state 64 * Copy architecture-specific thread state
73 */ 65 */
74int copy_thread(unsigned long clone_flags, unsigned long usp, 66int copy_thread(unsigned long clone_flags, unsigned long usp,
diff --git a/arch/hexagon/mm/uaccess.c b/arch/hexagon/mm/uaccess.c
index ec90afdb3ad0..c599eb126c9e 100644
--- a/arch/hexagon/mm/uaccess.c
+++ b/arch/hexagon/mm/uaccess.c
@@ -37,15 +37,14 @@ __kernel_size_t __clear_user_hexagon(void __user *dest, unsigned long count)
37 long uncleared; 37 long uncleared;
38 38
39 while (count > PAGE_SIZE) { 39 while (count > PAGE_SIZE) {
40 uncleared = __copy_to_user_hexagon(dest, &empty_zero_page, 40 uncleared = raw_copy_to_user(dest, &empty_zero_page, PAGE_SIZE);
41 PAGE_SIZE);
42 if (uncleared) 41 if (uncleared)
43 return count - (PAGE_SIZE - uncleared); 42 return count - (PAGE_SIZE - uncleared);
44 count -= PAGE_SIZE; 43 count -= PAGE_SIZE;
45 dest += PAGE_SIZE; 44 dest += PAGE_SIZE;
46 } 45 }
47 if (count) 46 if (count)
48 count = __copy_to_user_hexagon(dest, &empty_zero_page, count); 47 count = raw_copy_to_user(dest, &empty_zero_page, count);
49 48
50 return count; 49 return count;
51} 50}
diff --git a/arch/ia64/include/asm/processor.h b/arch/ia64/include/asm/processor.h
index 26a63d69c599..ab982f07ea68 100644
--- a/arch/ia64/include/asm/processor.h
+++ b/arch/ia64/include/asm/processor.h
@@ -602,23 +602,6 @@ ia64_set_unat (__u64 *unat, void *spill_addr, unsigned long nat)
602} 602}
603 603
604/* 604/*
605 * Return saved PC of a blocked thread.
606 * Note that the only way T can block is through a call to schedule() -> switch_to().
607 */
608static inline unsigned long
609thread_saved_pc (struct task_struct *t)
610{
611 struct unw_frame_info info;
612 unsigned long ip;
613
614 unw_init_from_blocked_task(&info, t);
615 if (unw_unwind(&info) < 0)
616 return 0;
617 unw_get_ip(&info, &ip);
618 return ip;
619}
620
621/*
622 * Get the current instruction/program counter value. 605 * Get the current instruction/program counter value.
623 */ 606 */
624#define current_text_addr() \ 607#define current_text_addr() \
diff --git a/arch/m32r/include/asm/processor.h b/arch/m32r/include/asm/processor.h
index 5767367550c6..657874eeeccc 100644
--- a/arch/m32r/include/asm/processor.h
+++ b/arch/m32r/include/asm/processor.h
@@ -122,8 +122,6 @@ extern void release_thread(struct task_struct *);
122extern void copy_segments(struct task_struct *p, struct mm_struct * mm); 122extern void copy_segments(struct task_struct *p, struct mm_struct * mm);
123extern void release_segments(struct mm_struct * mm); 123extern void release_segments(struct mm_struct * mm);
124 124
125extern unsigned long thread_saved_pc(struct task_struct *);
126
127/* Copy and release all segment info associated with a VM */ 125/* Copy and release all segment info associated with a VM */
128#define copy_segments(p, mm) do { } while (0) 126#define copy_segments(p, mm) do { } while (0)
129#define release_segments(mm) do { } while (0) 127#define release_segments(mm) do { } while (0)
diff --git a/arch/m32r/kernel/process.c b/arch/m32r/kernel/process.c
index d8ffcfec599c..8cd7e03f4370 100644
--- a/arch/m32r/kernel/process.c
+++ b/arch/m32r/kernel/process.c
@@ -39,14 +39,6 @@
39 39
40#include <linux/err.h> 40#include <linux/err.h>
41 41
42/*
43 * Return saved PC of a blocked thread.
44 */
45unsigned long thread_saved_pc(struct task_struct *tsk)
46{
47 return tsk->thread.lr;
48}
49
50void (*pm_power_off)(void) = NULL; 42void (*pm_power_off)(void) = NULL;
51EXPORT_SYMBOL(pm_power_off); 43EXPORT_SYMBOL(pm_power_off);
52 44
diff --git a/arch/m68k/include/asm/processor.h b/arch/m68k/include/asm/processor.h
index 77239e81379b..94c36030440c 100644
--- a/arch/m68k/include/asm/processor.h
+++ b/arch/m68k/include/asm/processor.h
@@ -130,8 +130,6 @@ static inline void release_thread(struct task_struct *dead_task)
130{ 130{
131} 131}
132 132
133extern unsigned long thread_saved_pc(struct task_struct *tsk);
134
135unsigned long get_wchan(struct task_struct *p); 133unsigned long get_wchan(struct task_struct *p);
136 134
137#define KSTK_EIP(tsk) \ 135#define KSTK_EIP(tsk) \
diff --git a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c
index e475c945c8b2..7df92f8b0781 100644
--- a/arch/m68k/kernel/process.c
+++ b/arch/m68k/kernel/process.c
@@ -40,20 +40,6 @@
40asmlinkage void ret_from_fork(void); 40asmlinkage void ret_from_fork(void);
41asmlinkage void ret_from_kernel_thread(void); 41asmlinkage void ret_from_kernel_thread(void);
42 42
43
44/*
45 * Return saved PC from a blocked thread
46 */
47unsigned long thread_saved_pc(struct task_struct *tsk)
48{
49 struct switch_stack *sw = (struct switch_stack *)tsk->thread.ksp;
50 /* Check whether the thread is blocked in resume() */
51 if (in_sched_functions(sw->retpc))
52 return ((unsigned long *)sw->a6)[1];
53 else
54 return sw->retpc;
55}
56
57void arch_cpu_idle(void) 43void arch_cpu_idle(void)
58{ 44{
59#if defined(MACH_ATARI_ONLY) 45#if defined(MACH_ATARI_ONLY)
diff --git a/arch/microblaze/include/asm/processor.h b/arch/microblaze/include/asm/processor.h
index 37ef196e4519..330d556860ba 100644
--- a/arch/microblaze/include/asm/processor.h
+++ b/arch/microblaze/include/asm/processor.h
@@ -69,8 +69,6 @@ static inline void release_thread(struct task_struct *dead_task)
69{ 69{
70} 70}
71 71
72extern unsigned long thread_saved_pc(struct task_struct *t);
73
74extern unsigned long get_wchan(struct task_struct *p); 72extern unsigned long get_wchan(struct task_struct *p);
75 73
76# define KSTK_EIP(tsk) (0) 74# define KSTK_EIP(tsk) (0)
@@ -121,10 +119,6 @@ static inline void release_thread(struct task_struct *dead_task)
121{ 119{
122} 120}
123 121
124/* Return saved (kernel) PC of a blocked thread. */
125# define thread_saved_pc(tsk) \
126 ((tsk)->thread.regs ? (tsk)->thread.regs->r15 : 0)
127
128unsigned long get_wchan(struct task_struct *p); 122unsigned long get_wchan(struct task_struct *p);
129 123
130/* The size allocated for kernel stacks. This _must_ be a power of two! */ 124/* The size allocated for kernel stacks. This _must_ be a power of two! */
diff --git a/arch/microblaze/kernel/process.c b/arch/microblaze/kernel/process.c
index e92a817e645f..6527ec22f158 100644
--- a/arch/microblaze/kernel/process.c
+++ b/arch/microblaze/kernel/process.c
@@ -119,23 +119,6 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
119 return 0; 119 return 0;
120} 120}
121 121
122#ifndef CONFIG_MMU
123/*
124 * Return saved PC of a blocked thread.
125 */
126unsigned long thread_saved_pc(struct task_struct *tsk)
127{
128 struct cpu_context *ctx =
129 &(((struct thread_info *)(tsk->stack))->cpu_context);
130
131 /* Check whether the thread is blocked in resume() */
132 if (in_sched_functions(ctx->r15))
133 return (unsigned long)ctx->r15;
134 else
135 return ctx->r14;
136}
137#endif
138
139unsigned long get_wchan(struct task_struct *p) 122unsigned long get_wchan(struct task_struct *p)
140{ 123{
141/* TBD (used by procfs) */ 124/* TBD (used by procfs) */
diff --git a/arch/mips/boot/Makefile b/arch/mips/boot/Makefile
index 2728a9a9c7c5..145b5ce8eb7e 100644
--- a/arch/mips/boot/Makefile
+++ b/arch/mips/boot/Makefile
@@ -128,19 +128,19 @@ quiet_cmd_cpp_its_S = ITS $@
128 -DADDR_BITS=$(ADDR_BITS) \ 128 -DADDR_BITS=$(ADDR_BITS) \
129 -DADDR_CELLS=$(itb_addr_cells) 129 -DADDR_CELLS=$(itb_addr_cells)
130 130
131$(obj)/vmlinux.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE 131$(obj)/vmlinux.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
132 $(call if_changed_dep,cpp_its_S,none,vmlinux.bin) 132 $(call if_changed_dep,cpp_its_S,none,vmlinux.bin)
133 133
134$(obj)/vmlinux.gz.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE 134$(obj)/vmlinux.gz.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
135 $(call if_changed_dep,cpp_its_S,gzip,vmlinux.bin.gz) 135 $(call if_changed_dep,cpp_its_S,gzip,vmlinux.bin.gz)
136 136
137$(obj)/vmlinux.bz2.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE 137$(obj)/vmlinux.bz2.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
138 $(call if_changed_dep,cpp_its_S,bzip2,vmlinux.bin.bz2) 138 $(call if_changed_dep,cpp_its_S,bzip2,vmlinux.bin.bz2)
139 139
140$(obj)/vmlinux.lzma.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE 140$(obj)/vmlinux.lzma.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
141 $(call if_changed_dep,cpp_its_S,lzma,vmlinux.bin.lzma) 141 $(call if_changed_dep,cpp_its_S,lzma,vmlinux.bin.lzma)
142 142
143$(obj)/vmlinux.lzo.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE 143$(obj)/vmlinux.lzo.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
144 $(call if_changed_dep,cpp_its_S,lzo,vmlinux.bin.lzo) 144 $(call if_changed_dep,cpp_its_S,lzo,vmlinux.bin.lzo)
145 145
146quiet_cmd_itb-image = ITB $@ 146quiet_cmd_itb-image = ITB $@
diff --git a/arch/mips/include/asm/highmem.h b/arch/mips/include/asm/highmem.h
index d34536e7653f..279b6d14ffeb 100644
--- a/arch/mips/include/asm/highmem.h
+++ b/arch/mips/include/asm/highmem.h
@@ -35,7 +35,12 @@ extern pte_t *pkmap_page_table;
35 * easily, subsequent pte tables have to be allocated in one physical 35 * easily, subsequent pte tables have to be allocated in one physical
36 * chunk of RAM. 36 * chunk of RAM.
37 */ 37 */
38#ifdef CONFIG_PHYS_ADDR_T_64BIT
39#define LAST_PKMAP 512
40#else
38#define LAST_PKMAP 1024 41#define LAST_PKMAP 1024
42#endif
43
39#define LAST_PKMAP_MASK (LAST_PKMAP-1) 44#define LAST_PKMAP_MASK (LAST_PKMAP-1)
40#define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) 45#define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT)
41#define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) 46#define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT))
diff --git a/arch/mips/include/asm/kprobes.h b/arch/mips/include/asm/kprobes.h
index 291846d9ba83..ad1a99948f27 100644
--- a/arch/mips/include/asm/kprobes.h
+++ b/arch/mips/include/asm/kprobes.h
@@ -43,7 +43,8 @@ typedef union mips_instruction kprobe_opcode_t;
43 43
44#define flush_insn_slot(p) \ 44#define flush_insn_slot(p) \
45do { \ 45do { \
46 flush_icache_range((unsigned long)p->addr, \ 46 if (p->addr) \
47 flush_icache_range((unsigned long)p->addr, \
47 (unsigned long)p->addr + \ 48 (unsigned long)p->addr + \
48 (MAX_INSN_SIZE * sizeof(kprobe_opcode_t))); \ 49 (MAX_INSN_SIZE * sizeof(kprobe_opcode_t))); \
49} while (0) 50} while (0)
diff --git a/arch/mips/include/asm/pgtable-32.h b/arch/mips/include/asm/pgtable-32.h
index 6f94bed571c4..74afe8c76bdd 100644
--- a/arch/mips/include/asm/pgtable-32.h
+++ b/arch/mips/include/asm/pgtable-32.h
@@ -19,6 +19,10 @@
19#define __ARCH_USE_5LEVEL_HACK 19#define __ARCH_USE_5LEVEL_HACK
20#include <asm-generic/pgtable-nopmd.h> 20#include <asm-generic/pgtable-nopmd.h>
21 21
22#ifdef CONFIG_HIGHMEM
23#include <asm/highmem.h>
24#endif
25
22extern int temp_tlb_entry; 26extern int temp_tlb_entry;
23 27
24/* 28/*
@@ -62,7 +66,8 @@ extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1,
62 66
63#define VMALLOC_START MAP_BASE 67#define VMALLOC_START MAP_BASE
64 68
65#define PKMAP_BASE (0xfe000000UL) 69#define PKMAP_END ((FIXADDR_START) & ~((LAST_PKMAP << PAGE_SHIFT)-1))
70#define PKMAP_BASE (PKMAP_END - PAGE_SIZE * LAST_PKMAP)
66 71
67#ifdef CONFIG_HIGHMEM 72#ifdef CONFIG_HIGHMEM
68# define VMALLOC_END (PKMAP_BASE-2*PAGE_SIZE) 73# define VMALLOC_END (PKMAP_BASE-2*PAGE_SIZE)
diff --git a/arch/mips/kernel/branch.c b/arch/mips/kernel/branch.c
index b11facd11c9d..f702a459a830 100644
--- a/arch/mips/kernel/branch.c
+++ b/arch/mips/kernel/branch.c
@@ -804,8 +804,10 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
804 break; 804 break;
805 } 805 }
806 /* Compact branch: BNEZC || JIALC */ 806 /* Compact branch: BNEZC || JIALC */
807 if (insn.i_format.rs) 807 if (!insn.i_format.rs) {
808 /* JIALC: set $31/ra */
808 regs->regs[31] = epc + 4; 809 regs->regs[31] = epc + 4;
810 }
809 regs->cp0_epc += 8; 811 regs->cp0_epc += 8;
810 break; 812 break;
811#endif 813#endif
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S
index 8d83fc2a96b7..38a302919e6b 100644
--- a/arch/mips/kernel/entry.S
+++ b/arch/mips/kernel/entry.S
@@ -11,6 +11,7 @@
11#include <asm/asm.h> 11#include <asm/asm.h>
12#include <asm/asmmacro.h> 12#include <asm/asmmacro.h>
13#include <asm/compiler.h> 13#include <asm/compiler.h>
14#include <asm/irqflags.h>
14#include <asm/regdef.h> 15#include <asm/regdef.h>
15#include <asm/mipsregs.h> 16#include <asm/mipsregs.h>
16#include <asm/stackframe.h> 17#include <asm/stackframe.h>
@@ -119,6 +120,7 @@ work_pending:
119 andi t0, a2, _TIF_NEED_RESCHED # a2 is preloaded with TI_FLAGS 120 andi t0, a2, _TIF_NEED_RESCHED # a2 is preloaded with TI_FLAGS
120 beqz t0, work_notifysig 121 beqz t0, work_notifysig
121work_resched: 122work_resched:
123 TRACE_IRQS_OFF
122 jal schedule 124 jal schedule
123 125
124 local_irq_disable # make sure need_resched and 126 local_irq_disable # make sure need_resched and
@@ -155,6 +157,7 @@ syscall_exit_work:
155 beqz t0, work_pending # trace bit set? 157 beqz t0, work_pending # trace bit set?
156 local_irq_enable # could let syscall_trace_leave() 158 local_irq_enable # could let syscall_trace_leave()
157 # call schedule() instead 159 # call schedule() instead
160 TRACE_IRQS_ON
158 move a0, sp 161 move a0, sp
159 jal syscall_trace_leave 162 jal syscall_trace_leave
160 b resume_userspace 163 b resume_userspace
diff --git a/arch/mips/kernel/ftrace.c b/arch/mips/kernel/ftrace.c
index 30a3b75e88eb..9d9b8fbae202 100644
--- a/arch/mips/kernel/ftrace.c
+++ b/arch/mips/kernel/ftrace.c
@@ -38,20 +38,6 @@ void arch_ftrace_update_code(int command)
38 38
39#endif 39#endif
40 40
41/*
42 * Check if the address is in kernel space
43 *
44 * Clone core_kernel_text() from kernel/extable.c, but doesn't call
45 * init_kernel_text() for Ftrace doesn't trace functions in init sections.
46 */
47static inline int in_kernel_space(unsigned long ip)
48{
49 if (ip >= (unsigned long)_stext &&
50 ip <= (unsigned long)_etext)
51 return 1;
52 return 0;
53}
54
55#ifdef CONFIG_DYNAMIC_FTRACE 41#ifdef CONFIG_DYNAMIC_FTRACE
56 42
57#define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */ 43#define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */
@@ -198,7 +184,7 @@ int ftrace_make_nop(struct module *mod,
198 * If ip is in kernel space, no long call, otherwise, long call is 184 * If ip is in kernel space, no long call, otherwise, long call is
199 * needed. 185 * needed.
200 */ 186 */
201 new = in_kernel_space(ip) ? INSN_NOP : INSN_B_1F; 187 new = core_kernel_text(ip) ? INSN_NOP : INSN_B_1F;
202#ifdef CONFIG_64BIT 188#ifdef CONFIG_64BIT
203 return ftrace_modify_code(ip, new); 189 return ftrace_modify_code(ip, new);
204#else 190#else
@@ -218,12 +204,12 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
218 unsigned int new; 204 unsigned int new;
219 unsigned long ip = rec->ip; 205 unsigned long ip = rec->ip;
220 206
221 new = in_kernel_space(ip) ? insn_jal_ftrace_caller : insn_la_mcount[0]; 207 new = core_kernel_text(ip) ? insn_jal_ftrace_caller : insn_la_mcount[0];
222 208
223#ifdef CONFIG_64BIT 209#ifdef CONFIG_64BIT
224 return ftrace_modify_code(ip, new); 210 return ftrace_modify_code(ip, new);
225#else 211#else
226 return ftrace_modify_code_2r(ip, new, in_kernel_space(ip) ? 212 return ftrace_modify_code_2r(ip, new, core_kernel_text(ip) ?
227 INSN_NOP : insn_la_mcount[1]); 213 INSN_NOP : insn_la_mcount[1]);
228#endif 214#endif
229} 215}
@@ -289,7 +275,7 @@ unsigned long ftrace_get_parent_ra_addr(unsigned long self_ra, unsigned long
289 * instruction "lui v1, hi_16bit_of_mcount"(offset is 24), but for 275 * instruction "lui v1, hi_16bit_of_mcount"(offset is 24), but for
290 * kernel, move after the instruction "move ra, at"(offset is 16) 276 * kernel, move after the instruction "move ra, at"(offset is 16)
291 */ 277 */
292 ip = self_ra - (in_kernel_space(self_ra) ? 16 : 24); 278 ip = self_ra - (core_kernel_text(self_ra) ? 16 : 24);
293 279
294 /* 280 /*
295 * search the text until finding the non-store instruction or "s{d,w} 281 * search the text until finding the non-store instruction or "s{d,w}
@@ -394,7 +380,7 @@ void prepare_ftrace_return(unsigned long *parent_ra_addr, unsigned long self_ra,
394 * entries configured through the tracing/set_graph_function interface. 380 * entries configured through the tracing/set_graph_function interface.
395 */ 381 */
396 382
397 insns = in_kernel_space(self_ra) ? 2 : MCOUNT_OFFSET_INSNS + 1; 383 insns = core_kernel_text(self_ra) ? 2 : MCOUNT_OFFSET_INSNS + 1;
398 trace.func = self_ra - (MCOUNT_INSN_SIZE * insns); 384 trace.func = self_ra - (MCOUNT_INSN_SIZE * insns);
399 385
400 /* Only trace if the calling function expects to */ 386 /* Only trace if the calling function expects to */
diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S
index cf052204eb0a..d1bb506adc10 100644
--- a/arch/mips/kernel/head.S
+++ b/arch/mips/kernel/head.S
@@ -106,8 +106,8 @@ NESTED(kernel_entry, 16, sp) # kernel entry point
106 beq t0, t1, dtb_found 106 beq t0, t1, dtb_found
107#endif 107#endif
108 li t1, -2 108 li t1, -2
109 beq a0, t1, dtb_found
110 move t2, a1 109 move t2, a1
110 beq a0, t1, dtb_found
111 111
112 li t2, 0 112 li t2, 0
113dtb_found: 113dtb_found:
diff --git a/arch/mips/kernel/perf_event_mipsxx.c b/arch/mips/kernel/perf_event_mipsxx.c
index 313a88b2973f..f3e301f95aef 100644
--- a/arch/mips/kernel/perf_event_mipsxx.c
+++ b/arch/mips/kernel/perf_event_mipsxx.c
@@ -1597,7 +1597,6 @@ static const struct mips_perf_event *mipsxx_pmu_map_raw_event(u64 config)
1597 break; 1597 break;
1598 case CPU_P5600: 1598 case CPU_P5600:
1599 case CPU_P6600: 1599 case CPU_P6600:
1600 case CPU_I6400:
1601 /* 8-bit event numbers */ 1600 /* 8-bit event numbers */
1602 raw_id = config & 0x1ff; 1601 raw_id = config & 0x1ff;
1603 base_id = raw_id & 0xff; 1602 base_id = raw_id & 0xff;
@@ -1610,6 +1609,11 @@ static const struct mips_perf_event *mipsxx_pmu_map_raw_event(u64 config)
1610 raw_event.range = P; 1609 raw_event.range = P;
1611#endif 1610#endif
1612 break; 1611 break;
1612 case CPU_I6400:
1613 /* 8-bit event numbers */
1614 base_id = config & 0xff;
1615 raw_event.cntr_mask = CNTR_EVEN | CNTR_ODD;
1616 break;
1613 case CPU_1004K: 1617 case CPU_1004K:
1614 if (IS_BOTH_COUNTERS_1004K_EVENT(base_id)) 1618 if (IS_BOTH_COUNTERS_1004K_EVENT(base_id))
1615 raw_event.cntr_mask = CNTR_EVEN | CNTR_ODD; 1619 raw_event.cntr_mask = CNTR_EVEN | CNTR_ODD;
diff --git a/arch/mips/kernel/pm-cps.c b/arch/mips/kernel/pm-cps.c
index 5f928c34c148..d99416094ba9 100644
--- a/arch/mips/kernel/pm-cps.c
+++ b/arch/mips/kernel/pm-cps.c
@@ -56,7 +56,6 @@ DECLARE_BITMAP(state_support, CPS_PM_STATE_COUNT);
56 * state. Actually per-core rather than per-CPU. 56 * state. Actually per-core rather than per-CPU.
57 */ 57 */
58static DEFINE_PER_CPU_ALIGNED(u32*, ready_count); 58static DEFINE_PER_CPU_ALIGNED(u32*, ready_count);
59static DEFINE_PER_CPU_ALIGNED(void*, ready_count_alloc);
60 59
61/* Indicates online CPUs coupled with the current CPU */ 60/* Indicates online CPUs coupled with the current CPU */
62static DEFINE_PER_CPU_ALIGNED(cpumask_t, online_coupled); 61static DEFINE_PER_CPU_ALIGNED(cpumask_t, online_coupled);
@@ -642,7 +641,6 @@ static int cps_pm_online_cpu(unsigned int cpu)
642{ 641{
643 enum cps_pm_state state; 642 enum cps_pm_state state;
644 unsigned core = cpu_data[cpu].core; 643 unsigned core = cpu_data[cpu].core;
645 unsigned dlinesz = cpu_data[cpu].dcache.linesz;
646 void *entry_fn, *core_rc; 644 void *entry_fn, *core_rc;
647 645
648 for (state = CPS_PM_NC_WAIT; state < CPS_PM_STATE_COUNT; state++) { 646 for (state = CPS_PM_NC_WAIT; state < CPS_PM_STATE_COUNT; state++) {
@@ -662,16 +660,11 @@ static int cps_pm_online_cpu(unsigned int cpu)
662 } 660 }
663 661
664 if (!per_cpu(ready_count, core)) { 662 if (!per_cpu(ready_count, core)) {
665 core_rc = kmalloc(dlinesz * 2, GFP_KERNEL); 663 core_rc = kmalloc(sizeof(u32), GFP_KERNEL);
666 if (!core_rc) { 664 if (!core_rc) {
667 pr_err("Failed allocate core %u ready_count\n", core); 665 pr_err("Failed allocate core %u ready_count\n", core);
668 return -ENOMEM; 666 return -ENOMEM;
669 } 667 }
670 per_cpu(ready_count_alloc, core) = core_rc;
671
672 /* Ensure ready_count is aligned to a cacheline boundary */
673 core_rc += dlinesz - 1;
674 core_rc = (void *)((unsigned long)core_rc & ~(dlinesz - 1));
675 per_cpu(ready_count, core) = core_rc; 668 per_cpu(ready_count, core) = core_rc;
676 } 669 }
677 670
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
index 918d4c73e951..5351e1f3950d 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -120,7 +120,6 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long usp,
120 struct thread_info *ti = task_thread_info(p); 120 struct thread_info *ti = task_thread_info(p);
121 struct pt_regs *childregs, *regs = current_pt_regs(); 121 struct pt_regs *childregs, *regs = current_pt_regs();
122 unsigned long childksp; 122 unsigned long childksp;
123 p->set_child_tid = p->clear_child_tid = NULL;
124 123
125 childksp = (unsigned long)task_stack_page(p) + THREAD_SIZE - 32; 124 childksp = (unsigned long)task_stack_page(p) + THREAD_SIZE - 32;
126 125
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index 9681b5877140..38dfa27730ff 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -201,6 +201,8 @@ void show_stack(struct task_struct *task, unsigned long *sp)
201{ 201{
202 struct pt_regs regs; 202 struct pt_regs regs;
203 mm_segment_t old_fs = get_fs(); 203 mm_segment_t old_fs = get_fs();
204
205 regs.cp0_status = KSU_KERNEL;
204 if (sp) { 206 if (sp) {
205 regs.regs[29] = (unsigned long)sp; 207 regs.regs[29] = (unsigned long)sp;
206 regs.regs[31] = 0; 208 regs.regs[31] = 0;
diff --git a/arch/mips/kvm/tlb.c b/arch/mips/kvm/tlb.c
index 7c6336dd2638..7cd92166a0b9 100644
--- a/arch/mips/kvm/tlb.c
+++ b/arch/mips/kvm/tlb.c
@@ -166,7 +166,11 @@ static int _kvm_mips_host_tlb_inv(unsigned long entryhi)
166int kvm_mips_host_tlb_inv(struct kvm_vcpu *vcpu, unsigned long va, 166int kvm_mips_host_tlb_inv(struct kvm_vcpu *vcpu, unsigned long va,
167 bool user, bool kernel) 167 bool user, bool kernel)
168{ 168{
169 int idx_user, idx_kernel; 169 /*
170 * Initialize idx_user and idx_kernel to workaround bogus
171 * maybe-initialized warning when using GCC 6.
172 */
173 int idx_user = 0, idx_kernel = 0;
170 unsigned long flags, old_entryhi; 174 unsigned long flags, old_entryhi;
171 175
172 local_irq_save(flags); 176 local_irq_save(flags);
diff --git a/arch/mips/math-emu/dp_maddf.c b/arch/mips/math-emu/dp_maddf.c
index 4a2d03c72959..caa62f20a888 100644
--- a/arch/mips/math-emu/dp_maddf.c
+++ b/arch/mips/math-emu/dp_maddf.c
@@ -54,7 +54,7 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
54 return ieee754dp_nanxcpt(z); 54 return ieee754dp_nanxcpt(z);
55 case IEEE754_CLASS_DNORM: 55 case IEEE754_CLASS_DNORM:
56 DPDNORMZ; 56 DPDNORMZ;
57 /* QNAN is handled separately below */ 57 /* QNAN and ZERO cases are handled separately below */
58 } 58 }
59 59
60 switch (CLPAIR(xc, yc)) { 60 switch (CLPAIR(xc, yc)) {
@@ -210,6 +210,9 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
210 } 210 }
211 assert(rm & (DP_HIDDEN_BIT << 3)); 211 assert(rm & (DP_HIDDEN_BIT << 3));
212 212
213 if (zc == IEEE754_CLASS_ZERO)
214 return ieee754dp_format(rs, re, rm);
215
213 /* And now the addition */ 216 /* And now the addition */
214 assert(zm & DP_HIDDEN_BIT); 217 assert(zm & DP_HIDDEN_BIT);
215 218
diff --git a/arch/mips/math-emu/sp_maddf.c b/arch/mips/math-emu/sp_maddf.c
index a8cd8b4f235e..c91d5e5d9b5f 100644
--- a/arch/mips/math-emu/sp_maddf.c
+++ b/arch/mips/math-emu/sp_maddf.c
@@ -54,7 +54,7 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
54 return ieee754sp_nanxcpt(z); 54 return ieee754sp_nanxcpt(z);
55 case IEEE754_CLASS_DNORM: 55 case IEEE754_CLASS_DNORM:
56 SPDNORMZ; 56 SPDNORMZ;
57 /* QNAN is handled separately below */ 57 /* QNAN and ZERO cases are handled separately below */
58 } 58 }
59 59
60 switch (CLPAIR(xc, yc)) { 60 switch (CLPAIR(xc, yc)) {
@@ -203,6 +203,9 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
203 } 203 }
204 assert(rm & (SP_HIDDEN_BIT << 3)); 204 assert(rm & (SP_HIDDEN_BIT << 3));
205 205
206 if (zc == IEEE754_CLASS_ZERO)
207 return ieee754sp_format(rs, re, rm);
208
206 /* And now the addition */ 209 /* And now the addition */
207 210
208 assert(zm & SP_HIDDEN_BIT); 211 assert(zm & SP_HIDDEN_BIT);
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
index fe8df14b6169..e08598c70b3e 100644
--- a/arch/mips/mm/dma-default.c
+++ b/arch/mips/mm/dma-default.c
@@ -68,12 +68,25 @@ static inline struct page *dma_addr_to_page(struct device *dev,
68 * systems and only the R10000 and R12000 are used in such systems, the 68 * systems and only the R10000 and R12000 are used in such systems, the
69 * SGI IP28 Indigo² rsp. SGI IP32 aka O2. 69 * SGI IP28 Indigo² rsp. SGI IP32 aka O2.
70 */ 70 */
71static inline int cpu_needs_post_dma_flush(struct device *dev) 71static inline bool cpu_needs_post_dma_flush(struct device *dev)
72{ 72{
73 return !plat_device_is_coherent(dev) && 73 if (plat_device_is_coherent(dev))
74 (boot_cpu_type() == CPU_R10000 || 74 return false;
75 boot_cpu_type() == CPU_R12000 || 75
76 boot_cpu_type() == CPU_BMIPS5000); 76 switch (boot_cpu_type()) {
77 case CPU_R10000:
78 case CPU_R12000:
79 case CPU_BMIPS5000:
80 return true;
81
82 default:
83 /*
84 * Presence of MAARs suggests that the CPU supports
85 * speculatively prefetching data, and therefore requires
86 * the post-DMA flush/invalidate.
87 */
88 return cpu_has_maar;
89 }
77} 90}
78 91
79static gfp_t massage_gfp_flags(const struct device *dev, gfp_t gfp) 92static gfp_t massage_gfp_flags(const struct device *dev, gfp_t gfp)
diff --git a/arch/mips/mm/mmap.c b/arch/mips/mm/mmap.c
index 64dd8bdd92c3..28adeabe851f 100644
--- a/arch/mips/mm/mmap.c
+++ b/arch/mips/mm/mmap.c
@@ -93,7 +93,7 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp,
93 93
94 vma = find_vma(mm, addr); 94 vma = find_vma(mm, addr);
95 if (TASK_SIZE - len >= addr && 95 if (TASK_SIZE - len >= addr &&
96 (!vma || addr + len <= vma->vm_start)) 96 (!vma || addr + len <= vm_start_gap(vma)))
97 return addr; 97 return addr;
98 } 98 }
99 99
diff --git a/arch/mips/mm/pgtable-32.c b/arch/mips/mm/pgtable-32.c
index adc6911ba748..b19a3c506b1e 100644
--- a/arch/mips/mm/pgtable-32.c
+++ b/arch/mips/mm/pgtable-32.c
@@ -51,15 +51,15 @@ void __init pagetable_init(void)
51 /* 51 /*
52 * Fixed mappings: 52 * Fixed mappings:
53 */ 53 */
54 vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; 54 vaddr = __fix_to_virt(__end_of_fixed_addresses - 1);
55 fixrange_init(vaddr, vaddr + FIXADDR_SIZE, pgd_base); 55 fixrange_init(vaddr & PMD_MASK, vaddr + FIXADDR_SIZE, pgd_base);
56 56
57#ifdef CONFIG_HIGHMEM 57#ifdef CONFIG_HIGHMEM
58 /* 58 /*
59 * Permanent kmaps: 59 * Permanent kmaps:
60 */ 60 */
61 vaddr = PKMAP_BASE; 61 vaddr = PKMAP_BASE;
62 fixrange_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base); 62 fixrange_init(vaddr & PMD_MASK, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);
63 63
64 pgd = swapper_pg_dir + __pgd_offset(vaddr); 64 pgd = swapper_pg_dir + __pgd_offset(vaddr);
65 pud = pud_offset(pgd, vaddr); 65 pud = pud_offset(pgd, vaddr);
diff --git a/arch/mn10300/include/asm/processor.h b/arch/mn10300/include/asm/processor.h
index 18e17abf7664..3ae479117b42 100644
--- a/arch/mn10300/include/asm/processor.h
+++ b/arch/mn10300/include/asm/processor.h
@@ -132,11 +132,6 @@ static inline void start_thread(struct pt_regs *regs,
132/* Free all resources held by a thread. */ 132/* Free all resources held by a thread. */
133extern void release_thread(struct task_struct *); 133extern void release_thread(struct task_struct *);
134 134
135/*
136 * Return saved PC of a blocked thread.
137 */
138extern unsigned long thread_saved_pc(struct task_struct *tsk);
139
140unsigned long get_wchan(struct task_struct *p); 135unsigned long get_wchan(struct task_struct *p);
141 136
142#define task_pt_regs(task) ((task)->thread.uregs) 137#define task_pt_regs(task) ((task)->thread.uregs)
diff --git a/arch/mn10300/kernel/process.c b/arch/mn10300/kernel/process.c
index c9fa42619c6a..89e8027e07fb 100644
--- a/arch/mn10300/kernel/process.c
+++ b/arch/mn10300/kernel/process.c
@@ -40,14 +40,6 @@
40#include "internal.h" 40#include "internal.h"
41 41
42/* 42/*
43 * return saved PC of a blocked thread.
44 */
45unsigned long thread_saved_pc(struct task_struct *tsk)
46{
47 return ((unsigned long *) tsk->thread.sp)[3];
48}
49
50/*
51 * power off function, if any 43 * power off function, if any
52 */ 44 */
53void (*pm_power_off)(void); 45void (*pm_power_off)(void);
diff --git a/arch/nios2/include/asm/processor.h b/arch/nios2/include/asm/processor.h
index 3bbbc3d798e5..4944e2e1d8b0 100644
--- a/arch/nios2/include/asm/processor.h
+++ b/arch/nios2/include/asm/processor.h
@@ -75,9 +75,6 @@ static inline void release_thread(struct task_struct *dead_task)
75{ 75{
76} 76}
77 77
78/* Return saved PC of a blocked thread. */
79#define thread_saved_pc(tsk) ((tsk)->thread.kregs->ea)
80
81extern unsigned long get_wchan(struct task_struct *p); 78extern unsigned long get_wchan(struct task_struct *p);
82 79
83#define task_pt_regs(p) \ 80#define task_pt_regs(p) \
diff --git a/arch/openrisc/include/asm/processor.h b/arch/openrisc/include/asm/processor.h
index a908e6c30a00..396d8f306c21 100644
--- a/arch/openrisc/include/asm/processor.h
+++ b/arch/openrisc/include/asm/processor.h
@@ -84,11 +84,6 @@ void start_thread(struct pt_regs *regs, unsigned long nip, unsigned long sp);
84void release_thread(struct task_struct *); 84void release_thread(struct task_struct *);
85unsigned long get_wchan(struct task_struct *p); 85unsigned long get_wchan(struct task_struct *p);
86 86
87/*
88 * Return saved PC of a blocked thread. For now, this is the "user" PC
89 */
90extern unsigned long thread_saved_pc(struct task_struct *t);
91
92#define init_stack (init_thread_union.stack) 87#define init_stack (init_thread_union.stack)
93 88
94#define cpu_relax() barrier() 89#define cpu_relax() barrier()
diff --git a/arch/openrisc/kernel/process.c b/arch/openrisc/kernel/process.c
index f8da545854f9..f9b77003f113 100644
--- a/arch/openrisc/kernel/process.c
+++ b/arch/openrisc/kernel/process.c
@@ -110,11 +110,6 @@ void show_regs(struct pt_regs *regs)
110 show_registers(regs); 110 show_registers(regs);
111} 111}
112 112
113unsigned long thread_saved_pc(struct task_struct *t)
114{
115 return (unsigned long)user_regs(t->stack)->pc;
116}
117
118void release_thread(struct task_struct *dead_task) 113void release_thread(struct task_struct *dead_task)
119{ 114{
120} 115}
@@ -167,8 +162,6 @@ copy_thread(unsigned long clone_flags, unsigned long usp,
167 162
168 top_of_kernel_stack = sp; 163 top_of_kernel_stack = sp;
169 164
170 p->set_child_tid = p->clear_child_tid = NULL;
171
172 /* Locate userspace context on stack... */ 165 /* Locate userspace context on stack... */
173 sp -= STACK_FRAME_OVERHEAD; /* redzone */ 166 sp -= STACK_FRAME_OVERHEAD; /* redzone */
174 sp -= sizeof(struct pt_regs); 167 sp -= sizeof(struct pt_regs);
diff --git a/arch/parisc/include/asm/processor.h b/arch/parisc/include/asm/processor.h
index a3661ee6b060..4c6694b4e77e 100644
--- a/arch/parisc/include/asm/processor.h
+++ b/arch/parisc/include/asm/processor.h
@@ -163,12 +163,7 @@ struct thread_struct {
163 .flags = 0 \ 163 .flags = 0 \
164 } 164 }
165 165
166/*
167 * Return saved PC of a blocked thread. This is used by ps mostly.
168 */
169
170struct task_struct; 166struct task_struct;
171unsigned long thread_saved_pc(struct task_struct *t);
172void show_trace(struct task_struct *task, unsigned long *stack); 167void show_trace(struct task_struct *task, unsigned long *stack);
173 168
174/* 169/*
diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c
index 4516a5b53f38..b64d7d21646e 100644
--- a/arch/parisc/kernel/process.c
+++ b/arch/parisc/kernel/process.c
@@ -239,11 +239,6 @@ copy_thread(unsigned long clone_flags, unsigned long usp,
239 return 0; 239 return 0;
240} 240}
241 241
242unsigned long thread_saved_pc(struct task_struct *t)
243{
244 return t->thread.regs.kpc;
245}
246
247unsigned long 242unsigned long
248get_wchan(struct task_struct *p) 243get_wchan(struct task_struct *p)
249{ 244{
diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c
index e5288638a1d9..378a754ca186 100644
--- a/arch/parisc/kernel/sys_parisc.c
+++ b/arch/parisc/kernel/sys_parisc.c
@@ -90,7 +90,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
90 unsigned long len, unsigned long pgoff, unsigned long flags) 90 unsigned long len, unsigned long pgoff, unsigned long flags)
91{ 91{
92 struct mm_struct *mm = current->mm; 92 struct mm_struct *mm = current->mm;
93 struct vm_area_struct *vma; 93 struct vm_area_struct *vma, *prev;
94 unsigned long task_size = TASK_SIZE; 94 unsigned long task_size = TASK_SIZE;
95 int do_color_align, last_mmap; 95 int do_color_align, last_mmap;
96 struct vm_unmapped_area_info info; 96 struct vm_unmapped_area_info info;
@@ -117,9 +117,10 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
117 else 117 else
118 addr = PAGE_ALIGN(addr); 118 addr = PAGE_ALIGN(addr);
119 119
120 vma = find_vma(mm, addr); 120 vma = find_vma_prev(mm, addr, &prev);
121 if (task_size - len >= addr && 121 if (task_size - len >= addr &&
122 (!vma || addr + len <= vma->vm_start)) 122 (!vma || addr + len <= vm_start_gap(vma)) &&
123 (!prev || addr >= vm_end_gap(prev)))
123 goto found_addr; 124 goto found_addr;
124 } 125 }
125 126
@@ -143,7 +144,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
143 const unsigned long len, const unsigned long pgoff, 144 const unsigned long len, const unsigned long pgoff,
144 const unsigned long flags) 145 const unsigned long flags)
145{ 146{
146 struct vm_area_struct *vma; 147 struct vm_area_struct *vma, *prev;
147 struct mm_struct *mm = current->mm; 148 struct mm_struct *mm = current->mm;
148 unsigned long addr = addr0; 149 unsigned long addr = addr0;
149 int do_color_align, last_mmap; 150 int do_color_align, last_mmap;
@@ -177,9 +178,11 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
177 addr = COLOR_ALIGN(addr, last_mmap, pgoff); 178 addr = COLOR_ALIGN(addr, last_mmap, pgoff);
178 else 179 else
179 addr = PAGE_ALIGN(addr); 180 addr = PAGE_ALIGN(addr);
180 vma = find_vma(mm, addr); 181
182 vma = find_vma_prev(mm, addr, &prev);
181 if (TASK_SIZE - len >= addr && 183 if (TASK_SIZE - len >= addr &&
182 (!vma || addr + len <= vma->vm_start)) 184 (!vma || addr + len <= vm_start_gap(vma)) &&
185 (!prev || addr >= vm_end_gap(prev)))
183 goto found_addr; 186 goto found_addr;
184 } 187 }
185 188
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index f7c8f9972f61..bf4391d18923 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -380,22 +380,6 @@ source "arch/powerpc/platforms/Kconfig"
380 380
381menu "Kernel options" 381menu "Kernel options"
382 382
383config PPC_DT_CPU_FTRS
384 bool "Device-tree based CPU feature discovery & setup"
385 depends on PPC_BOOK3S_64
386 default n
387 help
388 This enables code to use a new device tree binding for describing CPU
389 compatibility and features. Saying Y here will attempt to use the new
390 binding if the firmware provides it. Currently only the skiboot
391 firmware provides this binding.
392 If you're not sure say Y.
393
394config PPC_CPUFEATURES_ENABLE_UNKNOWN
395 bool "cpufeatures pass through unknown features to guest/userspace"
396 depends on PPC_DT_CPU_FTRS
397 default y
398
399config HIGHMEM 383config HIGHMEM
400 bool "High memory support" 384 bool "High memory support"
401 depends on PPC32 385 depends on PPC32
@@ -1215,11 +1199,6 @@ source "arch/powerpc/Kconfig.debug"
1215 1199
1216source "security/Kconfig" 1200source "security/Kconfig"
1217 1201
1218config KEYS_COMPAT
1219 bool
1220 depends on COMPAT && KEYS
1221 default y
1222
1223source "crypto/Kconfig" 1202source "crypto/Kconfig"
1224 1203
1225config PPC_LIB_RHEAP 1204config PPC_LIB_RHEAP
diff --git a/arch/powerpc/include/asm/book3s/64/hash-4k.h b/arch/powerpc/include/asm/book3s/64/hash-4k.h
index b4b5e6b671ca..0c4e470571ca 100644
--- a/arch/powerpc/include/asm/book3s/64/hash-4k.h
+++ b/arch/powerpc/include/asm/book3s/64/hash-4k.h
@@ -8,7 +8,7 @@
8#define H_PTE_INDEX_SIZE 9 8#define H_PTE_INDEX_SIZE 9
9#define H_PMD_INDEX_SIZE 7 9#define H_PMD_INDEX_SIZE 7
10#define H_PUD_INDEX_SIZE 9 10#define H_PUD_INDEX_SIZE 9
11#define H_PGD_INDEX_SIZE 12 11#define H_PGD_INDEX_SIZE 9
12 12
13#ifndef __ASSEMBLY__ 13#ifndef __ASSEMBLY__
14#define H_PTE_TABLE_SIZE (sizeof(pte_t) << H_PTE_INDEX_SIZE) 14#define H_PTE_TABLE_SIZE (sizeof(pte_t) << H_PTE_INDEX_SIZE)
diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h
index f2c562a0a427..0151af6c2a50 100644
--- a/arch/powerpc/include/asm/bug.h
+++ b/arch/powerpc/include/asm/bug.h
@@ -104,7 +104,7 @@
104 "1: "PPC_TLNEI" %4,0\n" \ 104 "1: "PPC_TLNEI" %4,0\n" \
105 _EMIT_BUG_ENTRY \ 105 _EMIT_BUG_ENTRY \
106 : : "i" (__FILE__), "i" (__LINE__), \ 106 : : "i" (__FILE__), "i" (__LINE__), \
107 "i" (BUGFLAG_TAINT(TAINT_WARN)), \ 107 "i" (BUGFLAG_WARNING|BUGFLAG_TAINT(TAINT_WARN)),\
108 "i" (sizeof(struct bug_entry)), \ 108 "i" (sizeof(struct bug_entry)), \
109 "r" (__ret_warn_on)); \ 109 "r" (__ret_warn_on)); \
110 } \ 110 } \
diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h
index c2d509584a98..d02ad93bf708 100644
--- a/arch/powerpc/include/asm/cputable.h
+++ b/arch/powerpc/include/asm/cputable.h
@@ -214,7 +214,6 @@ enum {
214#define CPU_FTR_DAWR LONG_ASM_CONST(0x0400000000000000) 214#define CPU_FTR_DAWR LONG_ASM_CONST(0x0400000000000000)
215#define CPU_FTR_DABRX LONG_ASM_CONST(0x0800000000000000) 215#define CPU_FTR_DABRX LONG_ASM_CONST(0x0800000000000000)
216#define CPU_FTR_PMAO_BUG LONG_ASM_CONST(0x1000000000000000) 216#define CPU_FTR_PMAO_BUG LONG_ASM_CONST(0x1000000000000000)
217#define CPU_FTR_SUBCORE LONG_ASM_CONST(0x2000000000000000)
218#define CPU_FTR_POWER9_DD1 LONG_ASM_CONST(0x4000000000000000) 217#define CPU_FTR_POWER9_DD1 LONG_ASM_CONST(0x4000000000000000)
219 218
220#ifndef __ASSEMBLY__ 219#ifndef __ASSEMBLY__
@@ -463,7 +462,7 @@ enum {
463 CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ 462 CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \
464 CPU_FTR_ICSWX | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ 463 CPU_FTR_ICSWX | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \
465 CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_DAWR | \ 464 CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_DAWR | \
466 CPU_FTR_ARCH_207S | CPU_FTR_TM_COMP | CPU_FTR_SUBCORE) 465 CPU_FTR_ARCH_207S | CPU_FTR_TM_COMP)
467#define CPU_FTRS_POWER8E (CPU_FTRS_POWER8 | CPU_FTR_PMAO_BUG) 466#define CPU_FTRS_POWER8E (CPU_FTRS_POWER8 | CPU_FTR_PMAO_BUG)
468#define CPU_FTRS_POWER8_DD1 (CPU_FTRS_POWER8 & ~CPU_FTR_DBELL) 467#define CPU_FTRS_POWER8_DD1 (CPU_FTRS_POWER8 & ~CPU_FTR_DBELL)
469#define CPU_FTRS_POWER9 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ 468#define CPU_FTRS_POWER9 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
diff --git a/arch/powerpc/include/asm/kprobes.h b/arch/powerpc/include/asm/kprobes.h
index a83821f33ea3..8814a7249ceb 100644
--- a/arch/powerpc/include/asm/kprobes.h
+++ b/arch/powerpc/include/asm/kprobes.h
@@ -103,6 +103,7 @@ extern int kprobe_exceptions_notify(struct notifier_block *self,
103extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr); 103extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
104extern int kprobe_handler(struct pt_regs *regs); 104extern int kprobe_handler(struct pt_regs *regs);
105extern int kprobe_post_handler(struct pt_regs *regs); 105extern int kprobe_post_handler(struct pt_regs *regs);
106extern int is_current_kprobe_addr(unsigned long addr);
106#ifdef CONFIG_KPROBES_ON_FTRACE 107#ifdef CONFIG_KPROBES_ON_FTRACE
107extern int skip_singlestep(struct kprobe *p, struct pt_regs *regs, 108extern int skip_singlestep(struct kprobe *p, struct pt_regs *regs,
108 struct kprobe_ctlblk *kcb); 109 struct kprobe_ctlblk *kcb);
diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h
index a2123f291ab0..1189d04f3bd1 100644
--- a/arch/powerpc/include/asm/processor.h
+++ b/arch/powerpc/include/asm/processor.h
@@ -110,13 +110,18 @@ void release_thread(struct task_struct *);
110#define TASK_SIZE_128TB (0x0000800000000000UL) 110#define TASK_SIZE_128TB (0x0000800000000000UL)
111#define TASK_SIZE_512TB (0x0002000000000000UL) 111#define TASK_SIZE_512TB (0x0002000000000000UL)
112 112
113#ifdef CONFIG_PPC_BOOK3S_64 113/*
114 * For now 512TB is only supported with book3s and 64K linux page size.
115 */
116#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_PPC_64K_PAGES)
114/* 117/*
115 * Max value currently used: 118 * Max value currently used:
116 */ 119 */
117#define TASK_SIZE_USER64 TASK_SIZE_512TB 120#define TASK_SIZE_USER64 TASK_SIZE_512TB
121#define DEFAULT_MAP_WINDOW_USER64 TASK_SIZE_128TB
118#else 122#else
119#define TASK_SIZE_USER64 TASK_SIZE_64TB 123#define TASK_SIZE_USER64 TASK_SIZE_64TB
124#define DEFAULT_MAP_WINDOW_USER64 TASK_SIZE_64TB
120#endif 125#endif
121 126
122/* 127/*
@@ -132,7 +137,7 @@ void release_thread(struct task_struct *);
132 * space during mmap's. 137 * space during mmap's.
133 */ 138 */
134#define TASK_UNMAPPED_BASE_USER32 (PAGE_ALIGN(TASK_SIZE_USER32 / 4)) 139#define TASK_UNMAPPED_BASE_USER32 (PAGE_ALIGN(TASK_SIZE_USER32 / 4))
135#define TASK_UNMAPPED_BASE_USER64 (PAGE_ALIGN(TASK_SIZE_128TB / 4)) 140#define TASK_UNMAPPED_BASE_USER64 (PAGE_ALIGN(DEFAULT_MAP_WINDOW_USER64 / 4))
136 141
137#define TASK_UNMAPPED_BASE ((is_32bit_task()) ? \ 142#define TASK_UNMAPPED_BASE ((is_32bit_task()) ? \
138 TASK_UNMAPPED_BASE_USER32 : TASK_UNMAPPED_BASE_USER64 ) 143 TASK_UNMAPPED_BASE_USER32 : TASK_UNMAPPED_BASE_USER64 )
@@ -143,21 +148,15 @@ void release_thread(struct task_struct *);
143 * with 128TB and conditionally enable upto 512TB 148 * with 128TB and conditionally enable upto 512TB
144 */ 149 */
145#ifdef CONFIG_PPC_BOOK3S_64 150#ifdef CONFIG_PPC_BOOK3S_64
146#define DEFAULT_MAP_WINDOW ((is_32bit_task()) ? \ 151#define DEFAULT_MAP_WINDOW ((is_32bit_task()) ? \
147 TASK_SIZE_USER32 : TASK_SIZE_128TB) 152 TASK_SIZE_USER32 : DEFAULT_MAP_WINDOW_USER64)
148#else 153#else
149#define DEFAULT_MAP_WINDOW TASK_SIZE 154#define DEFAULT_MAP_WINDOW TASK_SIZE
150#endif 155#endif
151 156
152#ifdef __powerpc64__ 157#ifdef __powerpc64__
153 158
154#ifdef CONFIG_PPC_BOOK3S_64 159#define STACK_TOP_USER64 DEFAULT_MAP_WINDOW_USER64
155/* Limit stack to 128TB */
156#define STACK_TOP_USER64 TASK_SIZE_128TB
157#else
158#define STACK_TOP_USER64 TASK_SIZE_USER64
159#endif
160
161#define STACK_TOP_USER32 TASK_SIZE_USER32 160#define STACK_TOP_USER32 TASK_SIZE_USER32
162 161
163#define STACK_TOP (is_32bit_task() ? \ 162#define STACK_TOP (is_32bit_task() ? \
@@ -379,12 +378,6 @@ struct thread_struct {
379} 378}
380#endif 379#endif
381 380
382/*
383 * Return saved PC of a blocked thread. For now, this is the "user" PC
384 */
385#define thread_saved_pc(tsk) \
386 ((tsk)->thread.regs? (tsk)->thread.regs->nip: 0)
387
388#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.regs) 381#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.regs)
389 382
390unsigned long get_wchan(struct task_struct *p); 383unsigned long get_wchan(struct task_struct *p);
diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
index 8b3b46b7b0f2..329771559cbb 100644
--- a/arch/powerpc/include/asm/topology.h
+++ b/arch/powerpc/include/asm/topology.h
@@ -44,8 +44,22 @@ extern void __init dump_numa_cpu_topology(void);
44extern int sysfs_add_device_to_node(struct device *dev, int nid); 44extern int sysfs_add_device_to_node(struct device *dev, int nid);
45extern void sysfs_remove_device_from_node(struct device *dev, int nid); 45extern void sysfs_remove_device_from_node(struct device *dev, int nid);
46 46
47static inline int early_cpu_to_node(int cpu)
48{
49 int nid;
50
51 nid = numa_cpu_lookup_table[cpu];
52
53 /*
54 * Fall back to node 0 if nid is unset (it should be, except bugs).
55 * This allows callers to safely do NODE_DATA(early_cpu_to_node(cpu)).
56 */
57 return (nid < 0) ? 0 : nid;
58}
47#else 59#else
48 60
61static inline int early_cpu_to_node(int cpu) { return 0; }
62
49static inline void dump_numa_cpu_topology(void) {} 63static inline void dump_numa_cpu_topology(void) {}
50 64
51static inline int sysfs_add_device_to_node(struct device *dev, int nid) 65static inline int sysfs_add_device_to_node(struct device *dev, int nid)
diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h
index 5c0d8a8cdae5..41e88d3ce36b 100644
--- a/arch/powerpc/include/asm/uaccess.h
+++ b/arch/powerpc/include/asm/uaccess.h
@@ -267,13 +267,7 @@ do { \
267extern unsigned long __copy_tofrom_user(void __user *to, 267extern unsigned long __copy_tofrom_user(void __user *to,
268 const void __user *from, unsigned long size); 268 const void __user *from, unsigned long size);
269 269
270#ifndef __powerpc64__ 270#ifdef __powerpc64__
271
272#define INLINE_COPY_FROM_USER
273#define INLINE_COPY_TO_USER
274
275#else /* __powerpc64__ */
276
277static inline unsigned long 271static inline unsigned long
278raw_copy_in_user(void __user *to, const void __user *from, unsigned long n) 272raw_copy_in_user(void __user *to, const void __user *from, unsigned long n)
279{ 273{
diff --git a/arch/powerpc/include/asm/xive.h b/arch/powerpc/include/asm/xive.h
index c8a822acf962..c23ff4389ca2 100644
--- a/arch/powerpc/include/asm/xive.h
+++ b/arch/powerpc/include/asm/xive.h
@@ -94,11 +94,13 @@ struct xive_q {
94 * store at 0 and some ESBs support doing a trigger via a 94 * store at 0 and some ESBs support doing a trigger via a
95 * separate trigger page. 95 * separate trigger page.
96 */ 96 */
97#define XIVE_ESB_GET 0x800 97#define XIVE_ESB_STORE_EOI 0x400 /* Store */
98#define XIVE_ESB_SET_PQ_00 0xc00 98#define XIVE_ESB_LOAD_EOI 0x000 /* Load */
99#define XIVE_ESB_SET_PQ_01 0xd00 99#define XIVE_ESB_GET 0x800 /* Load */
100#define XIVE_ESB_SET_PQ_10 0xe00 100#define XIVE_ESB_SET_PQ_00 0xc00 /* Load */
101#define XIVE_ESB_SET_PQ_11 0xf00 101#define XIVE_ESB_SET_PQ_01 0xd00 /* Load */
102#define XIVE_ESB_SET_PQ_10 0xe00 /* Load */
103#define XIVE_ESB_SET_PQ_11 0xf00 /* Load */
102 104
103#define XIVE_ESB_VAL_P 0x2 105#define XIVE_ESB_VAL_P 0x2
104#define XIVE_ESB_VAL_Q 0x1 106#define XIVE_ESB_VAL_Q 0x1
diff --git a/arch/powerpc/include/uapi/asm/cputable.h b/arch/powerpc/include/uapi/asm/cputable.h
index 3e7ce86d5c13..4d877144f377 100644
--- a/arch/powerpc/include/uapi/asm/cputable.h
+++ b/arch/powerpc/include/uapi/asm/cputable.h
@@ -46,6 +46,8 @@
46#define PPC_FEATURE2_HTM_NOSC 0x01000000 46#define PPC_FEATURE2_HTM_NOSC 0x01000000
47#define PPC_FEATURE2_ARCH_3_00 0x00800000 /* ISA 3.00 */ 47#define PPC_FEATURE2_ARCH_3_00 0x00800000 /* ISA 3.00 */
48#define PPC_FEATURE2_HAS_IEEE128 0x00400000 /* VSX IEEE Binary Float 128-bit */ 48#define PPC_FEATURE2_HAS_IEEE128 0x00400000 /* VSX IEEE Binary Float 128-bit */
49#define PPC_FEATURE2_DARN 0x00200000 /* darn random number insn */
50#define PPC_FEATURE2_SCV 0x00100000 /* scv syscall */
49 51
50/* 52/*
51 * IMPORTANT! 53 * IMPORTANT!
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
index 9b3e88b1a9c8..6f849832a669 100644
--- a/arch/powerpc/kernel/cputable.c
+++ b/arch/powerpc/kernel/cputable.c
@@ -124,7 +124,8 @@ extern void __restore_cpu_e6500(void);
124#define COMMON_USER_POWER9 COMMON_USER_POWER8 124#define COMMON_USER_POWER9 COMMON_USER_POWER8
125#define COMMON_USER2_POWER9 (COMMON_USER2_POWER8 | \ 125#define COMMON_USER2_POWER9 (COMMON_USER2_POWER8 | \
126 PPC_FEATURE2_ARCH_3_00 | \ 126 PPC_FEATURE2_ARCH_3_00 | \
127 PPC_FEATURE2_HAS_IEEE128) 127 PPC_FEATURE2_HAS_IEEE128 | \
128 PPC_FEATURE2_DARN )
128 129
129#ifdef CONFIG_PPC_BOOK3E_64 130#ifdef CONFIG_PPC_BOOK3E_64
130#define COMMON_USER_BOOKE (COMMON_USER_PPC64 | PPC_FEATURE_BOOKE) 131#define COMMON_USER_BOOKE (COMMON_USER_PPC64 | PPC_FEATURE_BOOKE)
diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
index fcc7588a96d6..4c7656dc4e04 100644
--- a/arch/powerpc/kernel/dt_cpu_ftrs.c
+++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
@@ -8,6 +8,7 @@
8#include <linux/export.h> 8#include <linux/export.h>
9#include <linux/init.h> 9#include <linux/init.h>
10#include <linux/jump_label.h> 10#include <linux/jump_label.h>
11#include <linux/libfdt.h>
11#include <linux/memblock.h> 12#include <linux/memblock.h>
12#include <linux/printk.h> 13#include <linux/printk.h>
13#include <linux/sched.h> 14#include <linux/sched.h>
@@ -642,7 +643,6 @@ static struct dt_cpu_feature_match __initdata
642 {"processor-control-facility", feat_enable_dbell, CPU_FTR_DBELL}, 643 {"processor-control-facility", feat_enable_dbell, CPU_FTR_DBELL},
643 {"processor-control-facility-v3", feat_enable_dbell, CPU_FTR_DBELL}, 644 {"processor-control-facility-v3", feat_enable_dbell, CPU_FTR_DBELL},
644 {"processor-utilization-of-resources-register", feat_enable_purr, 0}, 645 {"processor-utilization-of-resources-register", feat_enable_purr, 0},
645 {"subcore", feat_enable, CPU_FTR_SUBCORE},
646 {"no-execute", feat_enable, 0}, 646 {"no-execute", feat_enable, 0},
647 {"strong-access-ordering", feat_enable, CPU_FTR_SAO}, 647 {"strong-access-ordering", feat_enable, CPU_FTR_SAO},
648 {"cache-inhibited-large-page", feat_enable_large_ci, 0}, 648 {"cache-inhibited-large-page", feat_enable_large_ci, 0},
@@ -671,12 +671,24 @@ static struct dt_cpu_feature_match __initdata
671 {"wait-v3", feat_enable, 0}, 671 {"wait-v3", feat_enable, 0},
672}; 672};
673 673
674/* XXX: how to configure this? Default + boot time? */ 674static bool __initdata using_dt_cpu_ftrs;
675#ifdef CONFIG_PPC_CPUFEATURES_ENABLE_UNKNOWN 675static bool __initdata enable_unknown = true;
676#define CPU_FEATURE_ENABLE_UNKNOWN 1 676
677#else 677static int __init dt_cpu_ftrs_parse(char *str)
678#define CPU_FEATURE_ENABLE_UNKNOWN 0 678{
679#endif 679 if (!str)
680 return 0;
681
682 if (!strcmp(str, "off"))
683 using_dt_cpu_ftrs = false;
684 else if (!strcmp(str, "known"))
685 enable_unknown = false;
686 else
687 return 1;
688
689 return 0;
690}
691early_param("dt_cpu_ftrs", dt_cpu_ftrs_parse);
680 692
681static void __init cpufeatures_setup_start(u32 isa) 693static void __init cpufeatures_setup_start(u32 isa)
682{ 694{
@@ -707,7 +719,7 @@ static bool __init cpufeatures_process_feature(struct dt_cpu_feature *f)
707 } 719 }
708 } 720 }
709 721
710 if (!known && CPU_FEATURE_ENABLE_UNKNOWN) { 722 if (!known && enable_unknown) {
711 if (!feat_try_enable_unknown(f)) { 723 if (!feat_try_enable_unknown(f)) {
712 pr_info("not enabling: %s (unknown and unsupported by kernel)\n", 724 pr_info("not enabling: %s (unknown and unsupported by kernel)\n",
713 f->name); 725 f->name);
@@ -756,6 +768,26 @@ static void __init cpufeatures_setup_finished(void)
756 cur_cpu_spec->cpu_features, cur_cpu_spec->mmu_features); 768 cur_cpu_spec->cpu_features, cur_cpu_spec->mmu_features);
757} 769}
758 770
771static int __init disabled_on_cmdline(void)
772{
773 unsigned long root, chosen;
774 const char *p;
775
776 root = of_get_flat_dt_root();
777 chosen = of_get_flat_dt_subnode_by_name(root, "chosen");
778 if (chosen == -FDT_ERR_NOTFOUND)
779 return false;
780
781 p = of_get_flat_dt_prop(chosen, "bootargs", NULL);
782 if (!p)
783 return false;
784
785 if (strstr(p, "dt_cpu_ftrs=off"))
786 return true;
787
788 return false;
789}
790
759static int __init fdt_find_cpu_features(unsigned long node, const char *uname, 791static int __init fdt_find_cpu_features(unsigned long node, const char *uname,
760 int depth, void *data) 792 int depth, void *data)
761{ 793{
@@ -766,8 +798,6 @@ static int __init fdt_find_cpu_features(unsigned long node, const char *uname,
766 return 0; 798 return 0;
767} 799}
768 800
769static bool __initdata using_dt_cpu_ftrs = false;
770
771bool __init dt_cpu_ftrs_in_use(void) 801bool __init dt_cpu_ftrs_in_use(void)
772{ 802{
773 return using_dt_cpu_ftrs; 803 return using_dt_cpu_ftrs;
@@ -775,6 +805,8 @@ bool __init dt_cpu_ftrs_in_use(void)
775 805
776bool __init dt_cpu_ftrs_init(void *fdt) 806bool __init dt_cpu_ftrs_init(void *fdt)
777{ 807{
808 using_dt_cpu_ftrs = false;
809
778 /* Setup and verify the FDT, if it fails we just bail */ 810 /* Setup and verify the FDT, if it fails we just bail */
779 if (!early_init_dt_verify(fdt)) 811 if (!early_init_dt_verify(fdt))
780 return false; 812 return false;
@@ -782,6 +814,9 @@ bool __init dt_cpu_ftrs_init(void *fdt)
782 if (!of_scan_flat_dt(fdt_find_cpu_features, NULL)) 814 if (!of_scan_flat_dt(fdt_find_cpu_features, NULL))
783 return false; 815 return false;
784 816
817 if (disabled_on_cmdline())
818 return false;
819
785 cpufeatures_setup_cpu(); 820 cpufeatures_setup_cpu();
786 821
787 using_dt_cpu_ftrs = true; 822 using_dt_cpu_ftrs = true;
@@ -1027,5 +1062,8 @@ static int __init dt_cpu_ftrs_scan_callback(unsigned long node, const char
1027 1062
1028void __init dt_cpu_ftrs_scan(void) 1063void __init dt_cpu_ftrs_scan(void)
1029{ 1064{
1065 if (!using_dt_cpu_ftrs)
1066 return;
1067
1030 of_scan_flat_dt(dt_cpu_ftrs_scan_callback, NULL); 1068 of_scan_flat_dt(dt_cpu_ftrs_scan_callback, NULL);
1031} 1069}
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index ae418b85c17c..b886795060fd 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -1411,10 +1411,8 @@ USE_TEXT_SECTION()
1411 .balign IFETCH_ALIGN_BYTES 1411 .balign IFETCH_ALIGN_BYTES
1412do_hash_page: 1412do_hash_page:
1413#ifdef CONFIG_PPC_STD_MMU_64 1413#ifdef CONFIG_PPC_STD_MMU_64
1414 andis. r0,r4,0xa410 /* weird error? */ 1414 andis. r0,r4,0xa450 /* weird error? */
1415 bne- handle_page_fault /* if not, try to insert a HPTE */ 1415 bne- handle_page_fault /* if not, try to insert a HPTE */
1416 andis. r0,r4,DSISR_DABRMATCH@h
1417 bne- handle_dabr_fault
1418 CURRENT_THREAD_INFO(r11, r1) 1416 CURRENT_THREAD_INFO(r11, r1)
1419 lwz r0,TI_PREEMPT(r11) /* If we're in an "NMI" */ 1417 lwz r0,TI_PREEMPT(r11) /* If we're in an "NMI" */
1420 andis. r0,r0,NMI_MASK@h /* (i.e. an irq when soft-disabled) */ 1418 andis. r0,r0,NMI_MASK@h /* (i.e. an irq when soft-disabled) */
@@ -1438,11 +1436,16 @@ do_hash_page:
1438 1436
1439 /* Error */ 1437 /* Error */
1440 blt- 13f 1438 blt- 13f
1439
1440 /* Reload DSISR into r4 for the DABR check below */
1441 ld r4,_DSISR(r1)
1441#endif /* CONFIG_PPC_STD_MMU_64 */ 1442#endif /* CONFIG_PPC_STD_MMU_64 */
1442 1443
1443/* Here we have a page fault that hash_page can't handle. */ 1444/* Here we have a page fault that hash_page can't handle. */
1444handle_page_fault: 1445handle_page_fault:
144511: ld r4,_DAR(r1) 144611: andis. r0,r4,DSISR_DABRMATCH@h
1447 bne- handle_dabr_fault
1448 ld r4,_DAR(r1)
1446 ld r5,_DSISR(r1) 1449 ld r5,_DSISR(r1)
1447 addi r3,r1,STACK_FRAME_OVERHEAD 1450 addi r3,r1,STACK_FRAME_OVERHEAD
1448 bl do_page_fault 1451 bl do_page_fault
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
index fc4343514bed..01addfb0ed0a 100644
--- a/arch/powerpc/kernel/kprobes.c
+++ b/arch/powerpc/kernel/kprobes.c
@@ -43,6 +43,12 @@ DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
43 43
44struct kretprobe_blackpoint kretprobe_blacklist[] = {{NULL, NULL}}; 44struct kretprobe_blackpoint kretprobe_blacklist[] = {{NULL, NULL}};
45 45
46int is_current_kprobe_addr(unsigned long addr)
47{
48 struct kprobe *p = kprobe_running();
49 return (p && (unsigned long)p->addr == addr) ? 1 : 0;
50}
51
46bool arch_within_kprobe_blacklist(unsigned long addr) 52bool arch_within_kprobe_blacklist(unsigned long addr)
47{ 53{
48 return (addr >= (unsigned long)__kprobes_text_start && 54 return (addr >= (unsigned long)__kprobes_text_start &&
@@ -617,6 +623,15 @@ int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
617 regs->gpr[2] = (unsigned long)(((func_descr_t *)jp->entry)->toc); 623 regs->gpr[2] = (unsigned long)(((func_descr_t *)jp->entry)->toc);
618#endif 624#endif
619 625
626 /*
627 * jprobes use jprobe_return() which skips the normal return
628 * path of the function, and this messes up the accounting of the
629 * function graph tracer.
630 *
631 * Pause function graph tracing while performing the jprobe function.
632 */
633 pause_graph_tracing();
634
620 return 1; 635 return 1;
621} 636}
622NOKPROBE_SYMBOL(setjmp_pre_handler); 637NOKPROBE_SYMBOL(setjmp_pre_handler);
@@ -642,6 +657,8 @@ int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
642 * saved regs... 657 * saved regs...
643 */ 658 */
644 memcpy(regs, &kcb->jprobe_saved_regs, sizeof(struct pt_regs)); 659 memcpy(regs, &kcb->jprobe_saved_regs, sizeof(struct pt_regs));
660 /* It's OK to start function graph tracing again */
661 unpause_graph_tracing();
645 preempt_enable_no_resched(); 662 preempt_enable_no_resched();
646 return 1; 663 return 1;
647} 664}
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index baae104b16c7..2ad725ef4368 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -1666,6 +1666,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
1666#ifdef CONFIG_VSX 1666#ifdef CONFIG_VSX
1667 current->thread.used_vsr = 0; 1667 current->thread.used_vsr = 0;
1668#endif 1668#endif
1669 current->thread.load_fp = 0;
1669 memset(&current->thread.fp_state, 0, sizeof(current->thread.fp_state)); 1670 memset(&current->thread.fp_state, 0, sizeof(current->thread.fp_state));
1670 current->thread.fp_save_area = NULL; 1671 current->thread.fp_save_area = NULL;
1671#ifdef CONFIG_ALTIVEC 1672#ifdef CONFIG_ALTIVEC
@@ -1674,6 +1675,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
1674 current->thread.vr_save_area = NULL; 1675 current->thread.vr_save_area = NULL;
1675 current->thread.vrsave = 0; 1676 current->thread.vrsave = 0;
1676 current->thread.used_vr = 0; 1677 current->thread.used_vr = 0;
1678 current->thread.load_vec = 0;
1677#endif /* CONFIG_ALTIVEC */ 1679#endif /* CONFIG_ALTIVEC */
1678#ifdef CONFIG_SPE 1680#ifdef CONFIG_SPE
1679 memset(current->thread.evr, 0, sizeof(current->thread.evr)); 1681 memset(current->thread.evr, 0, sizeof(current->thread.evr));
@@ -1685,6 +1687,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
1685 current->thread.tm_tfhar = 0; 1687 current->thread.tm_tfhar = 0;
1686 current->thread.tm_texasr = 0; 1688 current->thread.tm_texasr = 0;
1687 current->thread.tm_tfiar = 0; 1689 current->thread.tm_tfiar = 0;
1690 current->thread.load_tm = 0;
1688#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */ 1691#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
1689} 1692}
1690EXPORT_SYMBOL(start_thread); 1693EXPORT_SYMBOL(start_thread);
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 40c4887c27b6..f83056297441 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -161,7 +161,9 @@ static struct ibm_pa_feature {
161 { .pabyte = 0, .pabit = 3, .cpu_features = CPU_FTR_CTRL }, 161 { .pabyte = 0, .pabit = 3, .cpu_features = CPU_FTR_CTRL },
162 { .pabyte = 0, .pabit = 6, .cpu_features = CPU_FTR_NOEXECUTE }, 162 { .pabyte = 0, .pabit = 6, .cpu_features = CPU_FTR_NOEXECUTE },
163 { .pabyte = 1, .pabit = 2, .mmu_features = MMU_FTR_CI_LARGE_PAGE }, 163 { .pabyte = 1, .pabit = 2, .mmu_features = MMU_FTR_CI_LARGE_PAGE },
164#ifdef CONFIG_PPC_RADIX_MMU
164 { .pabyte = 40, .pabit = 0, .mmu_features = MMU_FTR_TYPE_RADIX }, 165 { .pabyte = 40, .pabit = 0, .mmu_features = MMU_FTR_TYPE_RADIX },
166#endif
165 { .pabyte = 1, .pabit = 1, .invert = 1, .cpu_features = CPU_FTR_NODSISRALIGN }, 167 { .pabyte = 1, .pabit = 1, .invert = 1, .cpu_features = CPU_FTR_NODSISRALIGN },
166 { .pabyte = 5, .pabit = 0, .cpu_features = CPU_FTR_REAL_LE, 168 { .pabyte = 5, .pabit = 0, .cpu_features = CPU_FTR_REAL_LE,
167 .cpu_user_ftrs = PPC_FEATURE_TRUE_LE }, 169 .cpu_user_ftrs = PPC_FEATURE_TRUE_LE },
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index 71dcda91755d..857129acf960 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -928,7 +928,7 @@ void __init setup_arch(char **cmdline_p)
928 928
929#ifdef CONFIG_PPC_MM_SLICES 929#ifdef CONFIG_PPC_MM_SLICES
930#ifdef CONFIG_PPC64 930#ifdef CONFIG_PPC64
931 init_mm.context.addr_limit = TASK_SIZE_128TB; 931 init_mm.context.addr_limit = DEFAULT_MAP_WINDOW_USER64;
932#else 932#else
933#error "context.addr_limit not initialized." 933#error "context.addr_limit not initialized."
934#endif 934#endif
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index f35ff9dea4fb..4640f6d64f8b 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -616,6 +616,24 @@ void __init exc_lvl_early_init(void)
616#endif 616#endif
617 617
618/* 618/*
619 * Emergency stacks are used for a range of things, from asynchronous
620 * NMIs (system reset, machine check) to synchronous, process context.
621 * We set preempt_count to zero, even though that isn't necessarily correct. To
622 * get the right value we'd need to copy it from the previous thread_info, but
623 * doing that might fault causing more problems.
624 * TODO: what to do with accounting?
625 */
626static void emerg_stack_init_thread_info(struct thread_info *ti, int cpu)
627{
628 ti->task = NULL;
629 ti->cpu = cpu;
630 ti->preempt_count = 0;
631 ti->local_flags = 0;
632 ti->flags = 0;
633 klp_init_thread_info(ti);
634}
635
636/*
619 * Stack space used when we detect a bad kernel stack pointer, and 637 * Stack space used when we detect a bad kernel stack pointer, and
620 * early in SMP boots before relocation is enabled. Exclusive emergency 638 * early in SMP boots before relocation is enabled. Exclusive emergency
621 * stack for machine checks. 639 * stack for machine checks.
@@ -633,24 +651,31 @@ void __init emergency_stack_init(void)
633 * Since we use these as temporary stacks during secondary CPU 651 * Since we use these as temporary stacks during secondary CPU
634 * bringup, we need to get at them in real mode. This means they 652 * bringup, we need to get at them in real mode. This means they
635 * must also be within the RMO region. 653 * must also be within the RMO region.
654 *
655 * The IRQ stacks allocated elsewhere in this file are zeroed and
656 * initialized in kernel/irq.c. These are initialized here in order
657 * to have emergency stacks available as early as possible.
636 */ 658 */
637 limit = min(safe_stack_limit(), ppc64_rma_size); 659 limit = min(safe_stack_limit(), ppc64_rma_size);
638 660
639 for_each_possible_cpu(i) { 661 for_each_possible_cpu(i) {
640 struct thread_info *ti; 662 struct thread_info *ti;
641 ti = __va(memblock_alloc_base(THREAD_SIZE, THREAD_SIZE, limit)); 663 ti = __va(memblock_alloc_base(THREAD_SIZE, THREAD_SIZE, limit));
642 klp_init_thread_info(ti); 664 memset(ti, 0, THREAD_SIZE);
665 emerg_stack_init_thread_info(ti, i);
643 paca[i].emergency_sp = (void *)ti + THREAD_SIZE; 666 paca[i].emergency_sp = (void *)ti + THREAD_SIZE;
644 667
645#ifdef CONFIG_PPC_BOOK3S_64 668#ifdef CONFIG_PPC_BOOK3S_64
646 /* emergency stack for NMI exception handling. */ 669 /* emergency stack for NMI exception handling. */
647 ti = __va(memblock_alloc_base(THREAD_SIZE, THREAD_SIZE, limit)); 670 ti = __va(memblock_alloc_base(THREAD_SIZE, THREAD_SIZE, limit));
648 klp_init_thread_info(ti); 671 memset(ti, 0, THREAD_SIZE);
672 emerg_stack_init_thread_info(ti, i);
649 paca[i].nmi_emergency_sp = (void *)ti + THREAD_SIZE; 673 paca[i].nmi_emergency_sp = (void *)ti + THREAD_SIZE;
650 674
651 /* emergency stack for machine check exception handling. */ 675 /* emergency stack for machine check exception handling. */
652 ti = __va(memblock_alloc_base(THREAD_SIZE, THREAD_SIZE, limit)); 676 ti = __va(memblock_alloc_base(THREAD_SIZE, THREAD_SIZE, limit));
653 klp_init_thread_info(ti); 677 memset(ti, 0, THREAD_SIZE);
678 emerg_stack_init_thread_info(ti, i);
654 paca[i].mc_emergency_sp = (void *)ti + THREAD_SIZE; 679 paca[i].mc_emergency_sp = (void *)ti + THREAD_SIZE;
655#endif 680#endif
656 } 681 }
@@ -661,7 +686,7 @@ void __init emergency_stack_init(void)
661 686
662static void * __init pcpu_fc_alloc(unsigned int cpu, size_t size, size_t align) 687static void * __init pcpu_fc_alloc(unsigned int cpu, size_t size, size_t align)
663{ 688{
664 return __alloc_bootmem_node(NODE_DATA(cpu_to_node(cpu)), size, align, 689 return __alloc_bootmem_node(NODE_DATA(early_cpu_to_node(cpu)), size, align,
665 __pa(MAX_DMA_ADDRESS)); 690 __pa(MAX_DMA_ADDRESS));
666} 691}
667 692
@@ -672,7 +697,7 @@ static void __init pcpu_fc_free(void *ptr, size_t size)
672 697
673static int pcpu_cpu_distance(unsigned int from, unsigned int to) 698static int pcpu_cpu_distance(unsigned int from, unsigned int to)
674{ 699{
675 if (cpu_to_node(from) == cpu_to_node(to)) 700 if (early_cpu_to_node(from) == early_cpu_to_node(to))
676 return LOCAL_DISTANCE; 701 return LOCAL_DISTANCE;
677 else 702 else
678 return REMOTE_DISTANCE; 703 return REMOTE_DISTANCE;
diff --git a/arch/powerpc/kernel/trace/ftrace_64_mprofile.S b/arch/powerpc/kernel/trace/ftrace_64_mprofile.S
index 7c933a99f5d5..c98e90b4ea7b 100644
--- a/arch/powerpc/kernel/trace/ftrace_64_mprofile.S
+++ b/arch/powerpc/kernel/trace/ftrace_64_mprofile.S
@@ -45,10 +45,14 @@ _GLOBAL(ftrace_caller)
45 stdu r1,-SWITCH_FRAME_SIZE(r1) 45 stdu r1,-SWITCH_FRAME_SIZE(r1)
46 46
47 /* Save all gprs to pt_regs */ 47 /* Save all gprs to pt_regs */
48 SAVE_8GPRS(0,r1) 48 SAVE_GPR(0, r1)
49 SAVE_8GPRS(8,r1) 49 SAVE_10GPRS(2, r1)
50 SAVE_8GPRS(16,r1) 50 SAVE_10GPRS(12, r1)
51 SAVE_8GPRS(24,r1) 51 SAVE_10GPRS(22, r1)
52
53 /* Save previous stack pointer (r1) */
54 addi r8, r1, SWITCH_FRAME_SIZE
55 std r8, GPR1(r1)
52 56
53 /* Load special regs for save below */ 57 /* Load special regs for save below */
54 mfmsr r8 58 mfmsr r8
@@ -95,18 +99,44 @@ ftrace_call:
95 bl ftrace_stub 99 bl ftrace_stub
96 nop 100 nop
97 101
98 /* Load ctr with the possibly modified NIP */ 102 /* Load the possibly modified NIP */
99 ld r3, _NIP(r1) 103 ld r15, _NIP(r1)
100 mtctr r3 104
101#ifdef CONFIG_LIVEPATCH 105#ifdef CONFIG_LIVEPATCH
102 cmpd r14,r3 /* has NIP been altered? */ 106 cmpd r14, r15 /* has NIP been altered? */
107#endif
108
109#if defined(CONFIG_LIVEPATCH) && defined(CONFIG_KPROBES_ON_FTRACE)
110 /* NIP has not been altered, skip over further checks */
111 beq 1f
112
113 /* Check if there is an active kprobe on us */
114 subi r3, r14, 4
115 bl is_current_kprobe_addr
116 nop
117
118 /*
119 * If r3 == 1, then this is a kprobe/jprobe.
120 * else, this is livepatched function.
121 *
122 * The conditional branch for livepatch_handler below will use the
123 * result of this comparison. For kprobe/jprobe, we just need to branch to
124 * the new NIP, not call livepatch_handler. The branch below is bne, so we
125 * want CR0[EQ] to be true if this is a kprobe/jprobe. Which means we want
126 * CR0[EQ] = (r3 == 1).
127 */
128 cmpdi r3, 1
1291:
103#endif 130#endif
104 131
132 /* Load CTR with the possibly modified NIP */
133 mtctr r15
134
105 /* Restore gprs */ 135 /* Restore gprs */
106 REST_8GPRS(0,r1) 136 REST_GPR(0,r1)
107 REST_8GPRS(8,r1) 137 REST_10GPRS(2,r1)
108 REST_8GPRS(16,r1) 138 REST_10GPRS(12,r1)
109 REST_8GPRS(24,r1) 139 REST_10GPRS(22,r1)
110 140
111 /* Restore possibly modified LR */ 141 /* Restore possibly modified LR */
112 ld r0, _LINK(r1) 142 ld r0, _LINK(r1)
@@ -119,7 +149,10 @@ ftrace_call:
119 addi r1, r1, SWITCH_FRAME_SIZE 149 addi r1, r1, SWITCH_FRAME_SIZE
120 150
121#ifdef CONFIG_LIVEPATCH 151#ifdef CONFIG_LIVEPATCH
122 /* Based on the cmpd above, if the NIP was altered handle livepatch */ 152 /*
153 * Based on the cmpd or cmpdi above, if the NIP was altered and we're
154 * not on a kprobe/jprobe, then handle livepatch.
155 */
123 bne- livepatch_handler 156 bne- livepatch_handler
124#endif 157#endif
125 158
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
index 42b7a4fd57d9..8d1a365b8edc 100644
--- a/arch/powerpc/kvm/book3s_hv.c
+++ b/arch/powerpc/kvm/book3s_hv.c
@@ -1486,6 +1486,14 @@ static int kvmppc_set_one_reg_hv(struct kvm_vcpu *vcpu, u64 id,
1486 r = set_vpa(vcpu, &vcpu->arch.dtl, addr, len); 1486 r = set_vpa(vcpu, &vcpu->arch.dtl, addr, len);
1487 break; 1487 break;
1488 case KVM_REG_PPC_TB_OFFSET: 1488 case KVM_REG_PPC_TB_OFFSET:
1489 /*
1490 * POWER9 DD1 has an erratum where writing TBU40 causes
1491 * the timebase to lose ticks. So we don't let the
1492 * timebase offset be changed on P9 DD1. (It is
1493 * initialized to zero.)
1494 */
1495 if (cpu_has_feature(CPU_FTR_POWER9_DD1))
1496 break;
1489 /* round up to multiple of 2^24 */ 1497 /* round up to multiple of 2^24 */
1490 vcpu->arch.vcore->tb_offset = 1498 vcpu->arch.vcore->tb_offset =
1491 ALIGN(set_reg_val(id, *val), 1UL << 24); 1499 ALIGN(set_reg_val(id, *val), 1UL << 24);
@@ -2907,12 +2915,36 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
2907{ 2915{
2908 int r; 2916 int r;
2909 int srcu_idx; 2917 int srcu_idx;
2918 unsigned long ebb_regs[3] = {}; /* shut up GCC */
2919 unsigned long user_tar = 0;
2920 unsigned int user_vrsave;
2910 2921
2911 if (!vcpu->arch.sane) { 2922 if (!vcpu->arch.sane) {
2912 run->exit_reason = KVM_EXIT_INTERNAL_ERROR; 2923 run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
2913 return -EINVAL; 2924 return -EINVAL;
2914 } 2925 }
2915 2926
2927 /*
2928 * Don't allow entry with a suspended transaction, because
2929 * the guest entry/exit code will lose it.
2930 * If the guest has TM enabled, save away their TM-related SPRs
2931 * (they will get restored by the TM unavailable interrupt).
2932 */
2933#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
2934 if (cpu_has_feature(CPU_FTR_TM) && current->thread.regs &&
2935 (current->thread.regs->msr & MSR_TM)) {
2936 if (MSR_TM_ACTIVE(current->thread.regs->msr)) {
2937 run->exit_reason = KVM_EXIT_FAIL_ENTRY;
2938 run->fail_entry.hardware_entry_failure_reason = 0;
2939 return -EINVAL;
2940 }
2941 current->thread.tm_tfhar = mfspr(SPRN_TFHAR);
2942 current->thread.tm_tfiar = mfspr(SPRN_TFIAR);
2943 current->thread.tm_texasr = mfspr(SPRN_TEXASR);
2944 current->thread.regs->msr &= ~MSR_TM;
2945 }
2946#endif
2947
2916 kvmppc_core_prepare_to_enter(vcpu); 2948 kvmppc_core_prepare_to_enter(vcpu);
2917 2949
2918 /* No need to go into the guest when all we'll do is come back out */ 2950 /* No need to go into the guest when all we'll do is come back out */
@@ -2934,6 +2966,15 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
2934 2966
2935 flush_all_to_thread(current); 2967 flush_all_to_thread(current);
2936 2968
2969 /* Save userspace EBB and other register values */
2970 if (cpu_has_feature(CPU_FTR_ARCH_207S)) {
2971 ebb_regs[0] = mfspr(SPRN_EBBHR);
2972 ebb_regs[1] = mfspr(SPRN_EBBRR);
2973 ebb_regs[2] = mfspr(SPRN_BESCR);
2974 user_tar = mfspr(SPRN_TAR);
2975 }
2976 user_vrsave = mfspr(SPRN_VRSAVE);
2977
2937 vcpu->arch.wqp = &vcpu->arch.vcore->wq; 2978 vcpu->arch.wqp = &vcpu->arch.vcore->wq;
2938 vcpu->arch.pgdir = current->mm->pgd; 2979 vcpu->arch.pgdir = current->mm->pgd;
2939 vcpu->arch.state = KVMPPC_VCPU_BUSY_IN_HOST; 2980 vcpu->arch.state = KVMPPC_VCPU_BUSY_IN_HOST;
@@ -2960,6 +3001,16 @@ static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
2960 } 3001 }
2961 } while (is_kvmppc_resume_guest(r)); 3002 } while (is_kvmppc_resume_guest(r));
2962 3003
3004 /* Restore userspace EBB and other register values */
3005 if (cpu_has_feature(CPU_FTR_ARCH_207S)) {
3006 mtspr(SPRN_EBBHR, ebb_regs[0]);
3007 mtspr(SPRN_EBBRR, ebb_regs[1]);
3008 mtspr(SPRN_BESCR, ebb_regs[2]);
3009 mtspr(SPRN_TAR, user_tar);
3010 mtspr(SPRN_FSCR, current->thread.fscr);
3011 }
3012 mtspr(SPRN_VRSAVE, user_vrsave);
3013
2963 out: 3014 out:
2964 vcpu->arch.state = KVMPPC_VCPU_NOTREADY; 3015 vcpu->arch.state = KVMPPC_VCPU_NOTREADY;
2965 atomic_dec(&vcpu->kvm->arch.vcpus_running); 3016 atomic_dec(&vcpu->kvm->arch.vcpus_running);
diff --git a/arch/powerpc/kvm/book3s_hv_interrupts.S b/arch/powerpc/kvm/book3s_hv_interrupts.S
index 0fdc4a28970b..404deb512844 100644
--- a/arch/powerpc/kvm/book3s_hv_interrupts.S
+++ b/arch/powerpc/kvm/book3s_hv_interrupts.S
@@ -121,10 +121,20 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
121 * Put whatever is in the decrementer into the 121 * Put whatever is in the decrementer into the
122 * hypervisor decrementer. 122 * hypervisor decrementer.
123 */ 123 */
124BEGIN_FTR_SECTION
125 ld r5, HSTATE_KVM_VCORE(r13)
126 ld r6, VCORE_KVM(r5)
127 ld r9, KVM_HOST_LPCR(r6)
128 andis. r9, r9, LPCR_LD@h
129END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
124 mfspr r8,SPRN_DEC 130 mfspr r8,SPRN_DEC
125 mftb r7 131 mftb r7
126 mtspr SPRN_HDEC,r8 132BEGIN_FTR_SECTION
133 /* On POWER9, don't sign-extend if host LPCR[LD] bit is set */
134 bne 32f
135END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
127 extsw r8,r8 136 extsw r8,r8
13732: mtspr SPRN_HDEC,r8
128 add r8,r8,r7 138 add r8,r8,r7
129 std r8,HSTATE_DECEXP(r13) 139 std r8,HSTATE_DECEXP(r13)
130 140
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
index bdb3f76ceb6b..4888dd494604 100644
--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
+++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
@@ -32,12 +32,29 @@
32#include <asm/opal.h> 32#include <asm/opal.h>
33#include <asm/xive-regs.h> 33#include <asm/xive-regs.h>
34 34
35/* Sign-extend HDEC if not on POWER9 */
36#define EXTEND_HDEC(reg) \
37BEGIN_FTR_SECTION; \
38 extsw reg, reg; \
39END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
40
35#define VCPU_GPRS_TM(reg) (((reg) * ULONG_SIZE) + VCPU_GPR_TM) 41#define VCPU_GPRS_TM(reg) (((reg) * ULONG_SIZE) + VCPU_GPR_TM)
36 42
37/* Values in HSTATE_NAPPING(r13) */ 43/* Values in HSTATE_NAPPING(r13) */
38#define NAPPING_CEDE 1 44#define NAPPING_CEDE 1
39#define NAPPING_NOVCPU 2 45#define NAPPING_NOVCPU 2
40 46
47/* Stack frame offsets for kvmppc_hv_entry */
48#define SFS 144
49#define STACK_SLOT_TRAP (SFS-4)
50#define STACK_SLOT_TID (SFS-16)
51#define STACK_SLOT_PSSCR (SFS-24)
52#define STACK_SLOT_PID (SFS-32)
53#define STACK_SLOT_IAMR (SFS-40)
54#define STACK_SLOT_CIABR (SFS-48)
55#define STACK_SLOT_DAWR (SFS-56)
56#define STACK_SLOT_DAWRX (SFS-64)
57
41/* 58/*
42 * Call kvmppc_hv_entry in real mode. 59 * Call kvmppc_hv_entry in real mode.
43 * Must be called with interrupts hard-disabled. 60 * Must be called with interrupts hard-disabled.
@@ -214,6 +231,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
214kvmppc_primary_no_guest: 231kvmppc_primary_no_guest:
215 /* We handle this much like a ceded vcpu */ 232 /* We handle this much like a ceded vcpu */
216 /* put the HDEC into the DEC, since HDEC interrupts don't wake us */ 233 /* put the HDEC into the DEC, since HDEC interrupts don't wake us */
234 /* HDEC may be larger than DEC for arch >= v3.00, but since the */
235 /* HDEC value came from DEC in the first place, it will fit */
217 mfspr r3, SPRN_HDEC 236 mfspr r3, SPRN_HDEC
218 mtspr SPRN_DEC, r3 237 mtspr SPRN_DEC, r3
219 /* 238 /*
@@ -295,8 +314,9 @@ kvm_novcpu_wakeup:
295 314
296 /* See if our timeslice has expired (HDEC is negative) */ 315 /* See if our timeslice has expired (HDEC is negative) */
297 mfspr r0, SPRN_HDEC 316 mfspr r0, SPRN_HDEC
317 EXTEND_HDEC(r0)
298 li r12, BOOK3S_INTERRUPT_HV_DECREMENTER 318 li r12, BOOK3S_INTERRUPT_HV_DECREMENTER
299 cmpwi r0, 0 319 cmpdi r0, 0
300 blt kvm_novcpu_exit 320 blt kvm_novcpu_exit
301 321
302 /* Got an IPI but other vcpus aren't yet exiting, must be a latecomer */ 322 /* Got an IPI but other vcpus aren't yet exiting, must be a latecomer */
@@ -319,10 +339,10 @@ kvm_novcpu_exit:
319 bl kvmhv_accumulate_time 339 bl kvmhv_accumulate_time
320#endif 340#endif
32113: mr r3, r12 34113: mr r3, r12
322 stw r12, 112-4(r1) 342 stw r12, STACK_SLOT_TRAP(r1)
323 bl kvmhv_commence_exit 343 bl kvmhv_commence_exit
324 nop 344 nop
325 lwz r12, 112-4(r1) 345 lwz r12, STACK_SLOT_TRAP(r1)
326 b kvmhv_switch_to_host 346 b kvmhv_switch_to_host
327 347
328/* 348/*
@@ -390,8 +410,8 @@ kvm_secondary_got_guest:
390 lbz r4, HSTATE_PTID(r13) 410 lbz r4, HSTATE_PTID(r13)
391 cmpwi r4, 0 411 cmpwi r4, 0
392 bne 63f 412 bne 63f
393 lis r6, 0x7fff 413 LOAD_REG_ADDR(r6, decrementer_max)
394 ori r6, r6, 0xffff 414 ld r6, 0(r6)
395 mtspr SPRN_HDEC, r6 415 mtspr SPRN_HDEC, r6
396 /* and set per-LPAR registers, if doing dynamic micro-threading */ 416 /* and set per-LPAR registers, if doing dynamic micro-threading */
397 ld r6, HSTATE_SPLIT_MODE(r13) 417 ld r6, HSTATE_SPLIT_MODE(r13)
@@ -545,11 +565,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
545 * * 565 * *
546 *****************************************************************************/ 566 *****************************************************************************/
547 567
548/* Stack frame offsets */
549#define STACK_SLOT_TID (112-16)
550#define STACK_SLOT_PSSCR (112-24)
551#define STACK_SLOT_PID (112-32)
552
553.global kvmppc_hv_entry 568.global kvmppc_hv_entry
554kvmppc_hv_entry: 569kvmppc_hv_entry:
555 570
@@ -565,7 +580,7 @@ kvmppc_hv_entry:
565 */ 580 */
566 mflr r0 581 mflr r0
567 std r0, PPC_LR_STKOFF(r1) 582 std r0, PPC_LR_STKOFF(r1)
568 stdu r1, -112(r1) 583 stdu r1, -SFS(r1)
569 584
570 /* Save R1 in the PACA */ 585 /* Save R1 in the PACA */
571 std r1, HSTATE_HOST_R1(r13) 586 std r1, HSTATE_HOST_R1(r13)
@@ -749,10 +764,20 @@ BEGIN_FTR_SECTION
749 mfspr r5, SPRN_TIDR 764 mfspr r5, SPRN_TIDR
750 mfspr r6, SPRN_PSSCR 765 mfspr r6, SPRN_PSSCR
751 mfspr r7, SPRN_PID 766 mfspr r7, SPRN_PID
767 mfspr r8, SPRN_IAMR
752 std r5, STACK_SLOT_TID(r1) 768 std r5, STACK_SLOT_TID(r1)
753 std r6, STACK_SLOT_PSSCR(r1) 769 std r6, STACK_SLOT_PSSCR(r1)
754 std r7, STACK_SLOT_PID(r1) 770 std r7, STACK_SLOT_PID(r1)
771 std r8, STACK_SLOT_IAMR(r1)
755END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300) 772END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
773BEGIN_FTR_SECTION
774 mfspr r5, SPRN_CIABR
775 mfspr r6, SPRN_DAWR
776 mfspr r7, SPRN_DAWRX
777 std r5, STACK_SLOT_CIABR(r1)
778 std r6, STACK_SLOT_DAWR(r1)
779 std r7, STACK_SLOT_DAWRX(r1)
780END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
756 781
757BEGIN_FTR_SECTION 782BEGIN_FTR_SECTION
758 /* Set partition DABR */ 783 /* Set partition DABR */
@@ -968,7 +993,8 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_300)
968 993
969 /* Check if HDEC expires soon */ 994 /* Check if HDEC expires soon */
970 mfspr r3, SPRN_HDEC 995 mfspr r3, SPRN_HDEC
971 cmpwi r3, 512 /* 1 microsecond */ 996 EXTEND_HDEC(r3)
997 cmpdi r3, 512 /* 1 microsecond */
972 blt hdec_soon 998 blt hdec_soon
973 999
974#ifdef CONFIG_KVM_XICS 1000#ifdef CONFIG_KVM_XICS
@@ -1505,11 +1531,10 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_300)
1505 * set by the guest could disrupt the host. 1531 * set by the guest could disrupt the host.
1506 */ 1532 */
1507 li r0, 0 1533 li r0, 0
1508 mtspr SPRN_IAMR, r0 1534 mtspr SPRN_PSPB, r0
1509 mtspr SPRN_CIABR, r0
1510 mtspr SPRN_DAWRX, r0
1511 mtspr SPRN_WORT, r0 1535 mtspr SPRN_WORT, r0
1512BEGIN_FTR_SECTION 1536BEGIN_FTR_SECTION
1537 mtspr SPRN_IAMR, r0
1513 mtspr SPRN_TCSCR, r0 1538 mtspr SPRN_TCSCR, r0
1514 /* Set MMCRS to 1<<31 to freeze and disable the SPMC counters */ 1539 /* Set MMCRS to 1<<31 to freeze and disable the SPMC counters */
1515 li r0, 1 1540 li r0, 1
@@ -1525,6 +1550,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
1525 std r6,VCPU_UAMOR(r9) 1550 std r6,VCPU_UAMOR(r9)
1526 li r6,0 1551 li r6,0
1527 mtspr SPRN_AMR,r6 1552 mtspr SPRN_AMR,r6
1553 mtspr SPRN_UAMOR, r6
1528 1554
1529 /* Switch DSCR back to host value */ 1555 /* Switch DSCR back to host value */
1530 mfspr r8, SPRN_DSCR 1556 mfspr r8, SPRN_DSCR
@@ -1670,12 +1696,22 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
1670 1696
1671 /* Restore host values of some registers */ 1697 /* Restore host values of some registers */
1672BEGIN_FTR_SECTION 1698BEGIN_FTR_SECTION
1699 ld r5, STACK_SLOT_CIABR(r1)
1700 ld r6, STACK_SLOT_DAWR(r1)
1701 ld r7, STACK_SLOT_DAWRX(r1)
1702 mtspr SPRN_CIABR, r5
1703 mtspr SPRN_DAWR, r6
1704 mtspr SPRN_DAWRX, r7
1705END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
1706BEGIN_FTR_SECTION
1673 ld r5, STACK_SLOT_TID(r1) 1707 ld r5, STACK_SLOT_TID(r1)
1674 ld r6, STACK_SLOT_PSSCR(r1) 1708 ld r6, STACK_SLOT_PSSCR(r1)
1675 ld r7, STACK_SLOT_PID(r1) 1709 ld r7, STACK_SLOT_PID(r1)
1710 ld r8, STACK_SLOT_IAMR(r1)
1676 mtspr SPRN_TIDR, r5 1711 mtspr SPRN_TIDR, r5
1677 mtspr SPRN_PSSCR, r6 1712 mtspr SPRN_PSSCR, r6
1678 mtspr SPRN_PID, r7 1713 mtspr SPRN_PID, r7
1714 mtspr SPRN_IAMR, r8
1679END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300) 1715END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
1680BEGIN_FTR_SECTION 1716BEGIN_FTR_SECTION
1681 PPC_INVALIDATE_ERAT 1717 PPC_INVALIDATE_ERAT
@@ -1819,8 +1855,8 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_TYPE_RADIX)
1819 li r0, KVM_GUEST_MODE_NONE 1855 li r0, KVM_GUEST_MODE_NONE
1820 stb r0, HSTATE_IN_GUEST(r13) 1856 stb r0, HSTATE_IN_GUEST(r13)
1821 1857
1822 ld r0, 112+PPC_LR_STKOFF(r1) 1858 ld r0, SFS+PPC_LR_STKOFF(r1)
1823 addi r1, r1, 112 1859 addi r1, r1, SFS
1824 mtlr r0 1860 mtlr r0
1825 blr 1861 blr
1826 1862
@@ -2366,12 +2402,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_TM)
2366 mfspr r3, SPRN_DEC 2402 mfspr r3, SPRN_DEC
2367 mfspr r4, SPRN_HDEC 2403 mfspr r4, SPRN_HDEC
2368 mftb r5 2404 mftb r5
2369 cmpw r3, r4 2405 extsw r3, r3
2406 EXTEND_HDEC(r4)
2407 cmpd r3, r4
2370 ble 67f 2408 ble 67f
2371 mtspr SPRN_DEC, r4 2409 mtspr SPRN_DEC, r4
237267: 241067:
2373 /* save expiry time of guest decrementer */ 2411 /* save expiry time of guest decrementer */
2374 extsw r3, r3
2375 add r3, r3, r5 2412 add r3, r3, r5
2376 ld r4, HSTATE_KVM_VCPU(r13) 2413 ld r4, HSTATE_KVM_VCPU(r13)
2377 ld r5, HSTATE_KVM_VCORE(r13) 2414 ld r5, HSTATE_KVM_VCORE(r13)
diff --git a/arch/powerpc/kvm/book3s_xive_template.c b/arch/powerpc/kvm/book3s_xive_template.c
index 023a31133c37..4636ca6e7d38 100644
--- a/arch/powerpc/kvm/book3s_xive_template.c
+++ b/arch/powerpc/kvm/book3s_xive_template.c
@@ -69,7 +69,7 @@ static void GLUE(X_PFX,source_eoi)(u32 hw_irq, struct xive_irq_data *xd)
69{ 69{
70 /* If the XIVE supports the new "store EOI facility, use it */ 70 /* If the XIVE supports the new "store EOI facility, use it */
71 if (xd->flags & XIVE_IRQ_FLAG_STORE_EOI) 71 if (xd->flags & XIVE_IRQ_FLAG_STORE_EOI)
72 __x_writeq(0, __x_eoi_page(xd)); 72 __x_writeq(0, __x_eoi_page(xd) + XIVE_ESB_STORE_EOI);
73 else if (hw_irq && xd->flags & XIVE_IRQ_FLAG_EOI_FW) { 73 else if (hw_irq && xd->flags & XIVE_IRQ_FLAG_EOI_FW) {
74 opal_int_eoi(hw_irq); 74 opal_int_eoi(hw_irq);
75 } else { 75 } else {
@@ -89,7 +89,7 @@ static void GLUE(X_PFX,source_eoi)(u32 hw_irq, struct xive_irq_data *xd)
89 * properly. 89 * properly.
90 */ 90 */
91 if (xd->flags & XIVE_IRQ_FLAG_LSI) 91 if (xd->flags & XIVE_IRQ_FLAG_LSI)
92 __x_readq(__x_eoi_page(xd)); 92 __x_readq(__x_eoi_page(xd) + XIVE_ESB_LOAD_EOI);
93 else { 93 else {
94 eoi_val = GLUE(X_PFX,esb_load)(xd, XIVE_ESB_SET_PQ_00); 94 eoi_val = GLUE(X_PFX,esb_load)(xd, XIVE_ESB_SET_PQ_00);
95 95
diff --git a/arch/powerpc/mm/hugetlbpage-radix.c b/arch/powerpc/mm/hugetlbpage-radix.c
index 6575b9aabef4..a12e86395025 100644
--- a/arch/powerpc/mm/hugetlbpage-radix.c
+++ b/arch/powerpc/mm/hugetlbpage-radix.c
@@ -68,7 +68,7 @@ radix__hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
68 addr = ALIGN(addr, huge_page_size(h)); 68 addr = ALIGN(addr, huge_page_size(h));
69 vma = find_vma(mm, addr); 69 vma = find_vma(mm, addr);
70 if (mm->task_size - len >= addr && 70 if (mm->task_size - len >= addr &&
71 (!vma || addr + len <= vma->vm_start)) 71 (!vma || addr + len <= vm_start_gap(vma)))
72 return addr; 72 return addr;
73 } 73 }
74 /* 74 /*
diff --git a/arch/powerpc/mm/mmap.c b/arch/powerpc/mm/mmap.c
index 9dbd2a733d6b..0ee6be4f1ba4 100644
--- a/arch/powerpc/mm/mmap.c
+++ b/arch/powerpc/mm/mmap.c
@@ -112,7 +112,7 @@ radix__arch_get_unmapped_area(struct file *filp, unsigned long addr,
112 addr = PAGE_ALIGN(addr); 112 addr = PAGE_ALIGN(addr);
113 vma = find_vma(mm, addr); 113 vma = find_vma(mm, addr);
114 if (mm->task_size - len >= addr && addr >= mmap_min_addr && 114 if (mm->task_size - len >= addr && addr >= mmap_min_addr &&
115 (!vma || addr + len <= vma->vm_start)) 115 (!vma || addr + len <= vm_start_gap(vma)))
116 return addr; 116 return addr;
117 } 117 }
118 118
@@ -157,7 +157,7 @@ radix__arch_get_unmapped_area_topdown(struct file *filp,
157 addr = PAGE_ALIGN(addr); 157 addr = PAGE_ALIGN(addr);
158 vma = find_vma(mm, addr); 158 vma = find_vma(mm, addr);
159 if (mm->task_size - len >= addr && addr >= mmap_min_addr && 159 if (mm->task_size - len >= addr && addr >= mmap_min_addr &&
160 (!vma || addr + len <= vma->vm_start)) 160 (!vma || addr + len <= vm_start_gap(vma)))
161 return addr; 161 return addr;
162 } 162 }
163 163
diff --git a/arch/powerpc/mm/mmu_context_book3s64.c b/arch/powerpc/mm/mmu_context_book3s64.c
index c6dca2ae78ef..a3edf813d455 100644
--- a/arch/powerpc/mm/mmu_context_book3s64.c
+++ b/arch/powerpc/mm/mmu_context_book3s64.c
@@ -99,7 +99,7 @@ static int hash__init_new_context(struct mm_struct *mm)
99 * mm->context.addr_limit. Default to max task size so that we copy the 99 * mm->context.addr_limit. Default to max task size so that we copy the
100 * default values to paca which will help us to handle slb miss early. 100 * default values to paca which will help us to handle slb miss early.
101 */ 101 */
102 mm->context.addr_limit = TASK_SIZE_128TB; 102 mm->context.addr_limit = DEFAULT_MAP_WINDOW_USER64;
103 103
104 /* 104 /*
105 * The old code would re-promote on fork, we don't do that when using 105 * The old code would re-promote on fork, we don't do that when using
diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
index 966b9fccfa66..45f6740dd407 100644
--- a/arch/powerpc/mm/slice.c
+++ b/arch/powerpc/mm/slice.c
@@ -99,7 +99,7 @@ static int slice_area_is_free(struct mm_struct *mm, unsigned long addr,
99 if ((mm->task_size - len) < addr) 99 if ((mm->task_size - len) < addr)
100 return 0; 100 return 0;
101 vma = find_vma(mm, addr); 101 vma = find_vma(mm, addr);
102 return (!vma || (addr + len) <= vma->vm_start); 102 return (!vma || (addr + len) <= vm_start_gap(vma));
103} 103}
104 104
105static int slice_low_has_vma(struct mm_struct *mm, unsigned long slice) 105static int slice_low_has_vma(struct mm_struct *mm, unsigned long slice)
diff --git a/arch/powerpc/perf/perf_regs.c b/arch/powerpc/perf/perf_regs.c
index cbd82fde5770..09ceea6175ba 100644
--- a/arch/powerpc/perf/perf_regs.c
+++ b/arch/powerpc/perf/perf_regs.c
@@ -101,5 +101,6 @@ void perf_get_regs_user(struct perf_regs *regs_user,
101 struct pt_regs *regs_user_copy) 101 struct pt_regs *regs_user_copy)
102{ 102{
103 regs_user->regs = task_pt_regs(current); 103 regs_user->regs = task_pt_regs(current);
104 regs_user->abi = perf_reg_abi(current); 104 regs_user->abi = (regs_user->regs) ? perf_reg_abi(current) :
105 PERF_SAMPLE_REGS_ABI_NONE;
105} 106}
diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c
index 018f8e90ac35..bb28e1a41257 100644
--- a/arch/powerpc/perf/power9-pmu.c
+++ b/arch/powerpc/perf/power9-pmu.c
@@ -402,7 +402,7 @@ static struct power_pmu power9_isa207_pmu = {
402 .name = "POWER9", 402 .name = "POWER9",
403 .n_counter = MAX_PMU_COUNTERS, 403 .n_counter = MAX_PMU_COUNTERS,
404 .add_fields = ISA207_ADD_FIELDS, 404 .add_fields = ISA207_ADD_FIELDS,
405 .test_adder = ISA207_TEST_ADDER, 405 .test_adder = P9_DD1_TEST_ADDER,
406 .compute_mmcr = isa207_compute_mmcr, 406 .compute_mmcr = isa207_compute_mmcr,
407 .config_bhrb = power9_config_bhrb, 407 .config_bhrb = power9_config_bhrb,
408 .bhrb_filter_map = power9_bhrb_filter_map, 408 .bhrb_filter_map = power9_bhrb_filter_map,
@@ -421,7 +421,7 @@ static struct power_pmu power9_pmu = {
421 .name = "POWER9", 421 .name = "POWER9",
422 .n_counter = MAX_PMU_COUNTERS, 422 .n_counter = MAX_PMU_COUNTERS,
423 .add_fields = ISA207_ADD_FIELDS, 423 .add_fields = ISA207_ADD_FIELDS,
424 .test_adder = P9_DD1_TEST_ADDER, 424 .test_adder = ISA207_TEST_ADDER,
425 .compute_mmcr = isa207_compute_mmcr, 425 .compute_mmcr = isa207_compute_mmcr,
426 .config_bhrb = power9_config_bhrb, 426 .config_bhrb = power9_config_bhrb,
427 .bhrb_filter_map = power9_bhrb_filter_map, 427 .bhrb_filter_map = power9_bhrb_filter_map,
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index 33244e3d9375..4fd64d3f5c44 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -59,6 +59,17 @@ config PPC_OF_BOOT_TRAMPOLINE
59 59
60 In case of doubt, say Y 60 In case of doubt, say Y
61 61
62config PPC_DT_CPU_FTRS
63 bool "Device-tree based CPU feature discovery & setup"
64 depends on PPC_BOOK3S_64
65 default y
66 help
67 This enables code to use a new device tree binding for describing CPU
68 compatibility and features. Saying Y here will attempt to use the new
69 binding if the firmware provides it. Currently only the skiboot
70 firmware provides this binding.
71 If you're not sure say Y.
72
62config UDBG_RTAS_CONSOLE 73config UDBG_RTAS_CONSOLE
63 bool "RTAS based debug console" 74 bool "RTAS based debug console"
64 depends on PPC_RTAS 75 depends on PPC_RTAS
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c
index 96c2b8a40630..0c45cdbac4cf 100644
--- a/arch/powerpc/platforms/cell/spu_base.c
+++ b/arch/powerpc/platforms/cell/spu_base.c
@@ -197,7 +197,9 @@ static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr)
197 (REGION_ID(ea) != USER_REGION_ID)) { 197 (REGION_ID(ea) != USER_REGION_ID)) {
198 198
199 spin_unlock(&spu->register_lock); 199 spin_unlock(&spu->register_lock);
200 ret = hash_page(ea, _PAGE_PRESENT | _PAGE_READ, 0x300, dsisr); 200 ret = hash_page(ea,
201 _PAGE_PRESENT | _PAGE_READ | _PAGE_PRIVILEGED,
202 0x300, dsisr);
201 spin_lock(&spu->register_lock); 203 spin_lock(&spu->register_lock);
202 204
203 if (!ret) { 205 if (!ret) {
diff --git a/arch/powerpc/platforms/cell/spufs/coredump.c b/arch/powerpc/platforms/cell/spufs/coredump.c
index e5a891ae80ee..84b7ac926ce6 100644
--- a/arch/powerpc/platforms/cell/spufs/coredump.c
+++ b/arch/powerpc/platforms/cell/spufs/coredump.c
@@ -175,6 +175,8 @@ static int spufs_arch_write_note(struct spu_context *ctx, int i,
175 skip = roundup(cprm->pos - total + sz, 4) - cprm->pos; 175 skip = roundup(cprm->pos - total + sz, 4) - cprm->pos;
176 if (!dump_skip(cprm, skip)) 176 if (!dump_skip(cprm, skip))
177 goto Eio; 177 goto Eio;
178
179 rc = 0;
178out: 180out:
179 free_page((unsigned long)buf); 181 free_page((unsigned long)buf);
180 return rc; 182 return rc;
diff --git a/arch/powerpc/platforms/powernv/npu-dma.c b/arch/powerpc/platforms/powernv/npu-dma.c
index 067defeea691..b5d960d6db3d 100644
--- a/arch/powerpc/platforms/powernv/npu-dma.c
+++ b/arch/powerpc/platforms/powernv/npu-dma.c
@@ -75,7 +75,8 @@ struct pci_dev *pnv_pci_get_npu_dev(struct pci_dev *gpdev, int index)
75 if (WARN_ON(!gpdev)) 75 if (WARN_ON(!gpdev))
76 return NULL; 76 return NULL;
77 77
78 if (WARN_ON(!gpdev->dev.of_node)) 78 /* Not all PCI devices have device-tree nodes */
79 if (!gpdev->dev.of_node)
79 return NULL; 80 return NULL;
80 81
81 /* Get assoicated PCI device */ 82 /* Get assoicated PCI device */
@@ -448,7 +449,7 @@ static int mmio_launch_invalidate(struct npu *npu, unsigned long launch,
448 return mmio_atsd_reg; 449 return mmio_atsd_reg;
449} 450}
450 451
451static int mmio_invalidate_pid(struct npu *npu, unsigned long pid) 452static int mmio_invalidate_pid(struct npu *npu, unsigned long pid, bool flush)
452{ 453{
453 unsigned long launch; 454 unsigned long launch;
454 455
@@ -464,12 +465,15 @@ static int mmio_invalidate_pid(struct npu *npu, unsigned long pid)
464 /* PID */ 465 /* PID */
465 launch |= pid << PPC_BITLSHIFT(38); 466 launch |= pid << PPC_BITLSHIFT(38);
466 467
468 /* No flush */
469 launch |= !flush << PPC_BITLSHIFT(39);
470
467 /* Invalidating the entire process doesn't use a va */ 471 /* Invalidating the entire process doesn't use a va */
468 return mmio_launch_invalidate(npu, launch, 0); 472 return mmio_launch_invalidate(npu, launch, 0);
469} 473}
470 474
471static int mmio_invalidate_va(struct npu *npu, unsigned long va, 475static int mmio_invalidate_va(struct npu *npu, unsigned long va,
472 unsigned long pid) 476 unsigned long pid, bool flush)
473{ 477{
474 unsigned long launch; 478 unsigned long launch;
475 479
@@ -485,26 +489,60 @@ static int mmio_invalidate_va(struct npu *npu, unsigned long va,
485 /* PID */ 489 /* PID */
486 launch |= pid << PPC_BITLSHIFT(38); 490 launch |= pid << PPC_BITLSHIFT(38);
487 491
492 /* No flush */
493 launch |= !flush << PPC_BITLSHIFT(39);
494
488 return mmio_launch_invalidate(npu, launch, va); 495 return mmio_launch_invalidate(npu, launch, va);
489} 496}
490 497
491#define mn_to_npu_context(x) container_of(x, struct npu_context, mn) 498#define mn_to_npu_context(x) container_of(x, struct npu_context, mn)
492 499
500struct mmio_atsd_reg {
501 struct npu *npu;
502 int reg;
503};
504
505static void mmio_invalidate_wait(
506 struct mmio_atsd_reg mmio_atsd_reg[NV_MAX_NPUS], bool flush)
507{
508 struct npu *npu;
509 int i, reg;
510
511 /* Wait for all invalidations to complete */
512 for (i = 0; i <= max_npu2_index; i++) {
513 if (mmio_atsd_reg[i].reg < 0)
514 continue;
515
516 /* Wait for completion */
517 npu = mmio_atsd_reg[i].npu;
518 reg = mmio_atsd_reg[i].reg;
519 while (__raw_readq(npu->mmio_atsd_regs[reg] + XTS_ATSD_STAT))
520 cpu_relax();
521
522 put_mmio_atsd_reg(npu, reg);
523
524 /*
525 * The GPU requires two flush ATSDs to ensure all entries have
526 * been flushed. We use PID 0 as it will never be used for a
527 * process on the GPU.
528 */
529 if (flush)
530 mmio_invalidate_pid(npu, 0, true);
531 }
532}
533
493/* 534/*
494 * Invalidate either a single address or an entire PID depending on 535 * Invalidate either a single address or an entire PID depending on
495 * the value of va. 536 * the value of va.
496 */ 537 */
497static void mmio_invalidate(struct npu_context *npu_context, int va, 538static void mmio_invalidate(struct npu_context *npu_context, int va,
498 unsigned long address) 539 unsigned long address, bool flush)
499{ 540{
500 int i, j, reg; 541 int i, j;
501 struct npu *npu; 542 struct npu *npu;
502 struct pnv_phb *nphb; 543 struct pnv_phb *nphb;
503 struct pci_dev *npdev; 544 struct pci_dev *npdev;
504 struct { 545 struct mmio_atsd_reg mmio_atsd_reg[NV_MAX_NPUS];
505 struct npu *npu;
506 int reg;
507 } mmio_atsd_reg[NV_MAX_NPUS];
508 unsigned long pid = npu_context->mm->context.id; 546 unsigned long pid = npu_context->mm->context.id;
509 547
510 /* 548 /*
@@ -524,10 +562,11 @@ static void mmio_invalidate(struct npu_context *npu_context, int va,
524 562
525 if (va) 563 if (va)
526 mmio_atsd_reg[i].reg = 564 mmio_atsd_reg[i].reg =
527 mmio_invalidate_va(npu, address, pid); 565 mmio_invalidate_va(npu, address, pid,
566 flush);
528 else 567 else
529 mmio_atsd_reg[i].reg = 568 mmio_atsd_reg[i].reg =
530 mmio_invalidate_pid(npu, pid); 569 mmio_invalidate_pid(npu, pid, flush);
531 570
532 /* 571 /*
533 * The NPU hardware forwards the shootdown to all GPUs 572 * The NPU hardware forwards the shootdown to all GPUs
@@ -543,18 +582,10 @@ static void mmio_invalidate(struct npu_context *npu_context, int va,
543 */ 582 */
544 flush_tlb_mm(npu_context->mm); 583 flush_tlb_mm(npu_context->mm);
545 584
546 /* Wait for all invalidations to complete */ 585 mmio_invalidate_wait(mmio_atsd_reg, flush);
547 for (i = 0; i <= max_npu2_index; i++) { 586 if (flush)
548 if (mmio_atsd_reg[i].reg < 0) 587 /* Wait for the flush to complete */
549 continue; 588 mmio_invalidate_wait(mmio_atsd_reg, false);
550
551 /* Wait for completion */
552 npu = mmio_atsd_reg[i].npu;
553 reg = mmio_atsd_reg[i].reg;
554 while (__raw_readq(npu->mmio_atsd_regs[reg] + XTS_ATSD_STAT))
555 cpu_relax();
556 put_mmio_atsd_reg(npu, reg);
557 }
558} 589}
559 590
560static void pnv_npu2_mn_release(struct mmu_notifier *mn, 591static void pnv_npu2_mn_release(struct mmu_notifier *mn,
@@ -570,7 +601,7 @@ static void pnv_npu2_mn_release(struct mmu_notifier *mn,
570 * There should be no more translation requests for this PID, but we 601 * There should be no more translation requests for this PID, but we
571 * need to ensure any entries for it are removed from the TLB. 602 * need to ensure any entries for it are removed from the TLB.
572 */ 603 */
573 mmio_invalidate(npu_context, 0, 0); 604 mmio_invalidate(npu_context, 0, 0, true);
574} 605}
575 606
576static void pnv_npu2_mn_change_pte(struct mmu_notifier *mn, 607static void pnv_npu2_mn_change_pte(struct mmu_notifier *mn,
@@ -580,7 +611,7 @@ static void pnv_npu2_mn_change_pte(struct mmu_notifier *mn,
580{ 611{
581 struct npu_context *npu_context = mn_to_npu_context(mn); 612 struct npu_context *npu_context = mn_to_npu_context(mn);
582 613
583 mmio_invalidate(npu_context, 1, address); 614 mmio_invalidate(npu_context, 1, address, true);
584} 615}
585 616
586static void pnv_npu2_mn_invalidate_page(struct mmu_notifier *mn, 617static void pnv_npu2_mn_invalidate_page(struct mmu_notifier *mn,
@@ -589,7 +620,7 @@ static void pnv_npu2_mn_invalidate_page(struct mmu_notifier *mn,
589{ 620{
590 struct npu_context *npu_context = mn_to_npu_context(mn); 621 struct npu_context *npu_context = mn_to_npu_context(mn);
591 622
592 mmio_invalidate(npu_context, 1, address); 623 mmio_invalidate(npu_context, 1, address, true);
593} 624}
594 625
595static void pnv_npu2_mn_invalidate_range(struct mmu_notifier *mn, 626static void pnv_npu2_mn_invalidate_range(struct mmu_notifier *mn,
@@ -599,8 +630,11 @@ static void pnv_npu2_mn_invalidate_range(struct mmu_notifier *mn,
599 struct npu_context *npu_context = mn_to_npu_context(mn); 630 struct npu_context *npu_context = mn_to_npu_context(mn);
600 unsigned long address; 631 unsigned long address;
601 632
602 for (address = start; address <= end; address += PAGE_SIZE) 633 for (address = start; address < end; address += PAGE_SIZE)
603 mmio_invalidate(npu_context, 1, address); 634 mmio_invalidate(npu_context, 1, address, false);
635
636 /* Do the flush only on the final addess == end */
637 mmio_invalidate(npu_context, 1, address, true);
604} 638}
605 639
606static const struct mmu_notifier_ops nv_nmmu_notifier_ops = { 640static const struct mmu_notifier_ops nv_nmmu_notifier_ops = {
@@ -650,8 +684,11 @@ struct npu_context *pnv_npu2_init_context(struct pci_dev *gpdev,
650 /* No nvlink associated with this GPU device */ 684 /* No nvlink associated with this GPU device */
651 return ERR_PTR(-ENODEV); 685 return ERR_PTR(-ENODEV);
652 686
653 if (!mm) { 687 if (!mm || mm->context.id == 0) {
654 /* kernel thread contexts are not supported */ 688 /*
689 * Kernel thread contexts are not supported and context id 0 is
690 * reserved on the GPU.
691 */
655 return ERR_PTR(-EINVAL); 692 return ERR_PTR(-EINVAL);
656 } 693 }
657 694
@@ -714,7 +751,7 @@ static void pnv_npu2_release_context(struct kref *kref)
714void pnv_npu2_destroy_context(struct npu_context *npu_context, 751void pnv_npu2_destroy_context(struct npu_context *npu_context,
715 struct pci_dev *gpdev) 752 struct pci_dev *gpdev)
716{ 753{
717 struct pnv_phb *nphb, *phb; 754 struct pnv_phb *nphb;
718 struct npu *npu; 755 struct npu *npu;
719 struct pci_dev *npdev = pnv_pci_get_npu_dev(gpdev, 0); 756 struct pci_dev *npdev = pnv_pci_get_npu_dev(gpdev, 0);
720 struct device_node *nvlink_dn; 757 struct device_node *nvlink_dn;
@@ -728,13 +765,12 @@ void pnv_npu2_destroy_context(struct npu_context *npu_context,
728 765
729 nphb = pci_bus_to_host(npdev->bus)->private_data; 766 nphb = pci_bus_to_host(npdev->bus)->private_data;
730 npu = &nphb->npu; 767 npu = &nphb->npu;
731 phb = pci_bus_to_host(gpdev->bus)->private_data;
732 nvlink_dn = of_parse_phandle(npdev->dev.of_node, "ibm,nvlink", 0); 768 nvlink_dn = of_parse_phandle(npdev->dev.of_node, "ibm,nvlink", 0);
733 if (WARN_ON(of_property_read_u32(nvlink_dn, "ibm,npu-link-index", 769 if (WARN_ON(of_property_read_u32(nvlink_dn, "ibm,npu-link-index",
734 &nvlink_index))) 770 &nvlink_index)))
735 return; 771 return;
736 npu_context->npdev[npu->index][nvlink_index] = NULL; 772 npu_context->npdev[npu->index][nvlink_index] = NULL;
737 opal_npu_destroy_context(phb->opal_id, npu_context->mm->context.id, 773 opal_npu_destroy_context(nphb->opal_id, npu_context->mm->context.id,
738 PCI_DEVID(gpdev->bus->number, gpdev->devfn)); 774 PCI_DEVID(gpdev->bus->number, gpdev->devfn));
739 kref_put(&npu_context->kref, pnv_npu2_release_context); 775 kref_put(&npu_context->kref, pnv_npu2_release_context);
740} 776}
diff --git a/arch/powerpc/platforms/powernv/subcore.c b/arch/powerpc/platforms/powernv/subcore.c
index 0babef11136f..8c6119280c13 100644
--- a/arch/powerpc/platforms/powernv/subcore.c
+++ b/arch/powerpc/platforms/powernv/subcore.c
@@ -407,7 +407,13 @@ static DEVICE_ATTR(subcores_per_core, 0644,
407 407
408static int subcore_init(void) 408static int subcore_init(void)
409{ 409{
410 if (!cpu_has_feature(CPU_FTR_SUBCORE)) 410 unsigned pvr_ver;
411
412 pvr_ver = PVR_VER(mfspr(SPRN_PVR));
413
414 if (pvr_ver != PVR_POWER8 &&
415 pvr_ver != PVR_POWER8E &&
416 pvr_ver != PVR_POWER8NVL)
411 return 0; 417 return 0;
412 418
413 /* 419 /*
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
index e104c71ea44a..1fb162ba9d1c 100644
--- a/arch/powerpc/platforms/pseries/hotplug-memory.c
+++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
@@ -124,6 +124,7 @@ static struct property *dlpar_clone_drconf_property(struct device_node *dn)
124 for (i = 0; i < num_lmbs; i++) { 124 for (i = 0; i < num_lmbs; i++) {
125 lmbs[i].base_addr = be64_to_cpu(lmbs[i].base_addr); 125 lmbs[i].base_addr = be64_to_cpu(lmbs[i].base_addr);
126 lmbs[i].drc_index = be32_to_cpu(lmbs[i].drc_index); 126 lmbs[i].drc_index = be32_to_cpu(lmbs[i].drc_index);
127 lmbs[i].aa_index = be32_to_cpu(lmbs[i].aa_index);
127 lmbs[i].flags = be32_to_cpu(lmbs[i].flags); 128 lmbs[i].flags = be32_to_cpu(lmbs[i].flags);
128 } 129 }
129 130
@@ -147,6 +148,7 @@ static void dlpar_update_drconf_property(struct device_node *dn,
147 for (i = 0; i < num_lmbs; i++) { 148 for (i = 0; i < num_lmbs; i++) {
148 lmbs[i].base_addr = cpu_to_be64(lmbs[i].base_addr); 149 lmbs[i].base_addr = cpu_to_be64(lmbs[i].base_addr);
149 lmbs[i].drc_index = cpu_to_be32(lmbs[i].drc_index); 150 lmbs[i].drc_index = cpu_to_be32(lmbs[i].drc_index);
151 lmbs[i].aa_index = cpu_to_be32(lmbs[i].aa_index);
150 lmbs[i].flags = cpu_to_be32(lmbs[i].flags); 152 lmbs[i].flags = cpu_to_be32(lmbs[i].flags);
151 } 153 }
152 154
diff --git a/arch/powerpc/sysdev/simple_gpio.c b/arch/powerpc/sysdev/simple_gpio.c
index ef470b470b04..6afddae2fb47 100644
--- a/arch/powerpc/sysdev/simple_gpio.c
+++ b/arch/powerpc/sysdev/simple_gpio.c
@@ -75,7 +75,8 @@ static int u8_gpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
75 75
76static void u8_gpio_save_regs(struct of_mm_gpio_chip *mm_gc) 76static void u8_gpio_save_regs(struct of_mm_gpio_chip *mm_gc)
77{ 77{
78 struct u8_gpio_chip *u8_gc = gpiochip_get_data(&mm_gc->gc); 78 struct u8_gpio_chip *u8_gc =
79 container_of(mm_gc, struct u8_gpio_chip, mm_gc);
79 80
80 u8_gc->data = in_8(mm_gc->regs); 81 u8_gc->data = in_8(mm_gc->regs);
81} 82}
diff --git a/arch/powerpc/sysdev/xive/common.c b/arch/powerpc/sysdev/xive/common.c
index 913825086b8d..8f5e3035483b 100644
--- a/arch/powerpc/sysdev/xive/common.c
+++ b/arch/powerpc/sysdev/xive/common.c
@@ -297,7 +297,7 @@ void xive_do_source_eoi(u32 hw_irq, struct xive_irq_data *xd)
297{ 297{
298 /* If the XIVE supports the new "store EOI facility, use it */ 298 /* If the XIVE supports the new "store EOI facility, use it */
299 if (xd->flags & XIVE_IRQ_FLAG_STORE_EOI) 299 if (xd->flags & XIVE_IRQ_FLAG_STORE_EOI)
300 out_be64(xd->eoi_mmio, 0); 300 out_be64(xd->eoi_mmio + XIVE_ESB_STORE_EOI, 0);
301 else if (hw_irq && xd->flags & XIVE_IRQ_FLAG_EOI_FW) { 301 else if (hw_irq && xd->flags & XIVE_IRQ_FLAG_EOI_FW) {
302 /* 302 /*
303 * The FW told us to call it. This happens for some 303 * The FW told us to call it. This happens for some
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index e161fafb495b..6967addc6a89 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -363,9 +363,6 @@ config COMPAT
363config SYSVIPC_COMPAT 363config SYSVIPC_COMPAT
364 def_bool y if COMPAT && SYSVIPC 364 def_bool y if COMPAT && SYSVIPC
365 365
366config KEYS_COMPAT
367 def_bool y if COMPAT && KEYS
368
369config SMP 366config SMP
370 def_bool y 367 def_bool y
371 prompt "Symmetric multi-processing support" 368 prompt "Symmetric multi-processing support"
diff --git a/arch/s390/configs/default_defconfig b/arch/s390/configs/default_defconfig
index a5039fa89314..282072206df7 100644
--- a/arch/s390/configs/default_defconfig
+++ b/arch/s390/configs/default_defconfig
@@ -30,6 +30,7 @@ CONFIG_USER_NS=y
30CONFIG_SCHED_AUTOGROUP=y 30CONFIG_SCHED_AUTOGROUP=y
31CONFIG_BLK_DEV_INITRD=y 31CONFIG_BLK_DEV_INITRD=y
32CONFIG_EXPERT=y 32CONFIG_EXPERT=y
33# CONFIG_SYSFS_SYSCALL is not set
33CONFIG_BPF_SYSCALL=y 34CONFIG_BPF_SYSCALL=y
34CONFIG_USERFAULTFD=y 35CONFIG_USERFAULTFD=y
35# CONFIG_COMPAT_BRK is not set 36# CONFIG_COMPAT_BRK is not set
@@ -44,7 +45,10 @@ CONFIG_MODULE_UNLOAD=y
44CONFIG_MODULE_FORCE_UNLOAD=y 45CONFIG_MODULE_FORCE_UNLOAD=y
45CONFIG_MODVERSIONS=y 46CONFIG_MODVERSIONS=y
46CONFIG_MODULE_SRCVERSION_ALL=y 47CONFIG_MODULE_SRCVERSION_ALL=y
48CONFIG_BLK_DEV_INTEGRITY=y
47CONFIG_BLK_DEV_THROTTLING=y 49CONFIG_BLK_DEV_THROTTLING=y
50CONFIG_BLK_WBT=y
51CONFIG_BLK_WBT_SQ=y
48CONFIG_PARTITION_ADVANCED=y 52CONFIG_PARTITION_ADVANCED=y
49CONFIG_IBM_PARTITION=y 53CONFIG_IBM_PARTITION=y
50CONFIG_BSD_DISKLABEL=y 54CONFIG_BSD_DISKLABEL=y
@@ -90,6 +94,8 @@ CONFIG_UNIX=y
90CONFIG_UNIX_DIAG=m 94CONFIG_UNIX_DIAG=m
91CONFIG_XFRM_USER=m 95CONFIG_XFRM_USER=m
92CONFIG_NET_KEY=m 96CONFIG_NET_KEY=m
97CONFIG_SMC=m
98CONFIG_SMC_DIAG=m
93CONFIG_INET=y 99CONFIG_INET=y
94CONFIG_IP_MULTICAST=y 100CONFIG_IP_MULTICAST=y
95CONFIG_IP_ADVANCED_ROUTER=y 101CONFIG_IP_ADVANCED_ROUTER=y
@@ -359,6 +365,7 @@ CONFIG_NET_ACT_SIMP=m
359CONFIG_NET_ACT_SKBEDIT=m 365CONFIG_NET_ACT_SKBEDIT=m
360CONFIG_NET_ACT_CSUM=m 366CONFIG_NET_ACT_CSUM=m
361CONFIG_DNS_RESOLVER=y 367CONFIG_DNS_RESOLVER=y
368CONFIG_NETLINK_DIAG=m
362CONFIG_CGROUP_NET_PRIO=y 369CONFIG_CGROUP_NET_PRIO=y
363CONFIG_BPF_JIT=y 370CONFIG_BPF_JIT=y
364CONFIG_NET_PKTGEN=m 371CONFIG_NET_PKTGEN=m
@@ -367,16 +374,19 @@ CONFIG_DEVTMPFS=y
367CONFIG_DMA_CMA=y 374CONFIG_DMA_CMA=y
368CONFIG_CMA_SIZE_MBYTES=0 375CONFIG_CMA_SIZE_MBYTES=0
369CONFIG_CONNECTOR=y 376CONFIG_CONNECTOR=y
377CONFIG_ZRAM=m
370CONFIG_BLK_DEV_LOOP=m 378CONFIG_BLK_DEV_LOOP=m
371CONFIG_BLK_DEV_CRYPTOLOOP=m 379CONFIG_BLK_DEV_CRYPTOLOOP=m
380CONFIG_BLK_DEV_DRBD=m
372CONFIG_BLK_DEV_NBD=m 381CONFIG_BLK_DEV_NBD=m
373CONFIG_BLK_DEV_OSD=m 382CONFIG_BLK_DEV_OSD=m
374CONFIG_BLK_DEV_RAM=y 383CONFIG_BLK_DEV_RAM=y
375CONFIG_BLK_DEV_RAM_SIZE=32768 384CONFIG_BLK_DEV_RAM_SIZE=32768
376CONFIG_CDROM_PKTCDVD=m 385CONFIG_BLK_DEV_RAM_DAX=y
377CONFIG_ATA_OVER_ETH=m
378CONFIG_VIRTIO_BLK=y 386CONFIG_VIRTIO_BLK=y
387CONFIG_BLK_DEV_RBD=m
379CONFIG_ENCLOSURE_SERVICES=m 388CONFIG_ENCLOSURE_SERVICES=m
389CONFIG_GENWQE=m
380CONFIG_RAID_ATTRS=m 390CONFIG_RAID_ATTRS=m
381CONFIG_SCSI=y 391CONFIG_SCSI=y
382CONFIG_BLK_DEV_SD=y 392CONFIG_BLK_DEV_SD=y
@@ -442,6 +452,8 @@ CONFIG_NLMON=m
442# CONFIG_NET_VENDOR_INTEL is not set 452# CONFIG_NET_VENDOR_INTEL is not set
443# CONFIG_NET_VENDOR_MARVELL is not set 453# CONFIG_NET_VENDOR_MARVELL is not set
444CONFIG_MLX4_EN=m 454CONFIG_MLX4_EN=m
455CONFIG_MLX5_CORE=m
456CONFIG_MLX5_CORE_EN=y
445# CONFIG_NET_VENDOR_NATSEMI is not set 457# CONFIG_NET_VENDOR_NATSEMI is not set
446CONFIG_PPP=m 458CONFIG_PPP=m
447CONFIG_PPP_BSDCOMP=m 459CONFIG_PPP_BSDCOMP=m
@@ -452,7 +464,6 @@ CONFIG_PPTP=m
452CONFIG_PPPOL2TP=m 464CONFIG_PPPOL2TP=m
453CONFIG_PPP_ASYNC=m 465CONFIG_PPP_ASYNC=m
454CONFIG_PPP_SYNC_TTY=m 466CONFIG_PPP_SYNC_TTY=m
455# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
456# CONFIG_INPUT_KEYBOARD is not set 467# CONFIG_INPUT_KEYBOARD is not set
457# CONFIG_INPUT_MOUSE is not set 468# CONFIG_INPUT_MOUSE is not set
458# CONFIG_SERIO is not set 469# CONFIG_SERIO is not set
@@ -471,6 +482,7 @@ CONFIG_DIAG288_WATCHDOG=m
471CONFIG_INFINIBAND=m 482CONFIG_INFINIBAND=m
472CONFIG_INFINIBAND_USER_ACCESS=m 483CONFIG_INFINIBAND_USER_ACCESS=m
473CONFIG_MLX4_INFINIBAND=m 484CONFIG_MLX4_INFINIBAND=m
485CONFIG_MLX5_INFINIBAND=m
474CONFIG_VIRTIO_BALLOON=m 486CONFIG_VIRTIO_BALLOON=m
475CONFIG_EXT4_FS=y 487CONFIG_EXT4_FS=y
476CONFIG_EXT4_FS_POSIX_ACL=y 488CONFIG_EXT4_FS_POSIX_ACL=y
@@ -487,12 +499,18 @@ CONFIG_XFS_POSIX_ACL=y
487CONFIG_XFS_RT=y 499CONFIG_XFS_RT=y
488CONFIG_XFS_DEBUG=y 500CONFIG_XFS_DEBUG=y
489CONFIG_GFS2_FS=m 501CONFIG_GFS2_FS=m
502CONFIG_GFS2_FS_LOCKING_DLM=y
490CONFIG_OCFS2_FS=m 503CONFIG_OCFS2_FS=m
491CONFIG_BTRFS_FS=y 504CONFIG_BTRFS_FS=y
492CONFIG_BTRFS_FS_POSIX_ACL=y 505CONFIG_BTRFS_FS_POSIX_ACL=y
506CONFIG_BTRFS_DEBUG=y
493CONFIG_NILFS2_FS=m 507CONFIG_NILFS2_FS=m
508CONFIG_FS_DAX=y
509CONFIG_EXPORTFS_BLOCK_OPS=y
494CONFIG_FANOTIFY=y 510CONFIG_FANOTIFY=y
511CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
495CONFIG_QUOTA_NETLINK_INTERFACE=y 512CONFIG_QUOTA_NETLINK_INTERFACE=y
513CONFIG_QUOTA_DEBUG=y
496CONFIG_QFMT_V1=m 514CONFIG_QFMT_V1=m
497CONFIG_QFMT_V2=m 515CONFIG_QFMT_V2=m
498CONFIG_AUTOFS4_FS=m 516CONFIG_AUTOFS4_FS=m
@@ -558,6 +576,7 @@ CONFIG_HEADERS_CHECK=y
558CONFIG_DEBUG_SECTION_MISMATCH=y 576CONFIG_DEBUG_SECTION_MISMATCH=y
559CONFIG_MAGIC_SYSRQ=y 577CONFIG_MAGIC_SYSRQ=y
560CONFIG_DEBUG_PAGEALLOC=y 578CONFIG_DEBUG_PAGEALLOC=y
579CONFIG_DEBUG_RODATA_TEST=y
561CONFIG_DEBUG_OBJECTS=y 580CONFIG_DEBUG_OBJECTS=y
562CONFIG_DEBUG_OBJECTS_SELFTEST=y 581CONFIG_DEBUG_OBJECTS_SELFTEST=y
563CONFIG_DEBUG_OBJECTS_FREE=y 582CONFIG_DEBUG_OBJECTS_FREE=y
@@ -580,7 +599,6 @@ CONFIG_DETECT_HUNG_TASK=y
580CONFIG_WQ_WATCHDOG=y 599CONFIG_WQ_WATCHDOG=y
581CONFIG_PANIC_ON_OOPS=y 600CONFIG_PANIC_ON_OOPS=y
582CONFIG_DEBUG_TIMEKEEPING=y 601CONFIG_DEBUG_TIMEKEEPING=y
583CONFIG_TIMER_STATS=y
584CONFIG_DEBUG_RT_MUTEXES=y 602CONFIG_DEBUG_RT_MUTEXES=y
585CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y 603CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
586CONFIG_PROVE_LOCKING=y 604CONFIG_PROVE_LOCKING=y
@@ -595,6 +613,7 @@ CONFIG_RCU_TORTURE_TEST=m
595CONFIG_RCU_CPU_STALL_TIMEOUT=300 613CONFIG_RCU_CPU_STALL_TIMEOUT=300
596CONFIG_NOTIFIER_ERROR_INJECTION=m 614CONFIG_NOTIFIER_ERROR_INJECTION=m
597CONFIG_PM_NOTIFIER_ERROR_INJECT=m 615CONFIG_PM_NOTIFIER_ERROR_INJECT=m
616CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=m
598CONFIG_FAULT_INJECTION=y 617CONFIG_FAULT_INJECTION=y
599CONFIG_FAILSLAB=y 618CONFIG_FAILSLAB=y
600CONFIG_FAIL_PAGE_ALLOC=y 619CONFIG_FAIL_PAGE_ALLOC=y
@@ -616,13 +635,12 @@ CONFIG_HIST_TRIGGERS=y
616CONFIG_TRACE_ENUM_MAP_FILE=y 635CONFIG_TRACE_ENUM_MAP_FILE=y
617CONFIG_LKDTM=m 636CONFIG_LKDTM=m
618CONFIG_TEST_LIST_SORT=y 637CONFIG_TEST_LIST_SORT=y
638CONFIG_TEST_SORT=y
619CONFIG_KPROBES_SANITY_TEST=y 639CONFIG_KPROBES_SANITY_TEST=y
620CONFIG_RBTREE_TEST=y 640CONFIG_RBTREE_TEST=y
621CONFIG_INTERVAL_TREE_TEST=m 641CONFIG_INTERVAL_TREE_TEST=m
622CONFIG_PERCPU_TEST=m 642CONFIG_PERCPU_TEST=m
623CONFIG_ATOMIC64_SELFTEST=y 643CONFIG_ATOMIC64_SELFTEST=y
624CONFIG_TEST_STRING_HELPERS=y
625CONFIG_TEST_KSTRTOX=y
626CONFIG_DMA_API_DEBUG=y 644CONFIG_DMA_API_DEBUG=y
627CONFIG_TEST_BPF=m 645CONFIG_TEST_BPF=m
628CONFIG_BUG_ON_DATA_CORRUPTION=y 646CONFIG_BUG_ON_DATA_CORRUPTION=y
@@ -630,6 +648,7 @@ CONFIG_S390_PTDUMP=y
630CONFIG_ENCRYPTED_KEYS=m 648CONFIG_ENCRYPTED_KEYS=m
631CONFIG_SECURITY=y 649CONFIG_SECURITY=y
632CONFIG_SECURITY_NETWORK=y 650CONFIG_SECURITY_NETWORK=y
651CONFIG_HARDENED_USERCOPY=y
633CONFIG_SECURITY_SELINUX=y 652CONFIG_SECURITY_SELINUX=y
634CONFIG_SECURITY_SELINUX_BOOTPARAM=y 653CONFIG_SECURITY_SELINUX_BOOTPARAM=y
635CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 654CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
@@ -640,7 +659,9 @@ CONFIG_CRYPTO_RSA=m
640CONFIG_CRYPTO_DH=m 659CONFIG_CRYPTO_DH=m
641CONFIG_CRYPTO_ECDH=m 660CONFIG_CRYPTO_ECDH=m
642CONFIG_CRYPTO_USER=m 661CONFIG_CRYPTO_USER=m
662CONFIG_CRYPTO_PCRYPT=m
643CONFIG_CRYPTO_CRYPTD=m 663CONFIG_CRYPTO_CRYPTD=m
664CONFIG_CRYPTO_MCRYPTD=m
644CONFIG_CRYPTO_TEST=m 665CONFIG_CRYPTO_TEST=m
645CONFIG_CRYPTO_CCM=m 666CONFIG_CRYPTO_CCM=m
646CONFIG_CRYPTO_GCM=m 667CONFIG_CRYPTO_GCM=m
@@ -648,6 +669,7 @@ CONFIG_CRYPTO_CHACHA20POLY1305=m
648CONFIG_CRYPTO_LRW=m 669CONFIG_CRYPTO_LRW=m
649CONFIG_CRYPTO_PCBC=m 670CONFIG_CRYPTO_PCBC=m
650CONFIG_CRYPTO_KEYWRAP=m 671CONFIG_CRYPTO_KEYWRAP=m
672CONFIG_CRYPTO_CMAC=m
651CONFIG_CRYPTO_XCBC=m 673CONFIG_CRYPTO_XCBC=m
652CONFIG_CRYPTO_VMAC=m 674CONFIG_CRYPTO_VMAC=m
653CONFIG_CRYPTO_CRC32=m 675CONFIG_CRYPTO_CRC32=m
@@ -657,8 +679,10 @@ CONFIG_CRYPTO_RMD160=m
657CONFIG_CRYPTO_RMD256=m 679CONFIG_CRYPTO_RMD256=m
658CONFIG_CRYPTO_RMD320=m 680CONFIG_CRYPTO_RMD320=m
659CONFIG_CRYPTO_SHA512=m 681CONFIG_CRYPTO_SHA512=m
682CONFIG_CRYPTO_SHA3=m
660CONFIG_CRYPTO_TGR192=m 683CONFIG_CRYPTO_TGR192=m
661CONFIG_CRYPTO_WP512=m 684CONFIG_CRYPTO_WP512=m
685CONFIG_CRYPTO_AES_TI=m
662CONFIG_CRYPTO_ANUBIS=m 686CONFIG_CRYPTO_ANUBIS=m
663CONFIG_CRYPTO_BLOWFISH=m 687CONFIG_CRYPTO_BLOWFISH=m
664CONFIG_CRYPTO_CAMELLIA=m 688CONFIG_CRYPTO_CAMELLIA=m
@@ -674,6 +698,7 @@ CONFIG_CRYPTO_TWOFISH=m
674CONFIG_CRYPTO_842=m 698CONFIG_CRYPTO_842=m
675CONFIG_CRYPTO_LZ4=m 699CONFIG_CRYPTO_LZ4=m
676CONFIG_CRYPTO_LZ4HC=m 700CONFIG_CRYPTO_LZ4HC=m
701CONFIG_CRYPTO_ANSI_CPRNG=m
677CONFIG_CRYPTO_USER_API_HASH=m 702CONFIG_CRYPTO_USER_API_HASH=m
678CONFIG_CRYPTO_USER_API_SKCIPHER=m 703CONFIG_CRYPTO_USER_API_SKCIPHER=m
679CONFIG_CRYPTO_USER_API_RNG=m 704CONFIG_CRYPTO_USER_API_RNG=m
@@ -685,6 +710,7 @@ CONFIG_CRYPTO_SHA256_S390=m
685CONFIG_CRYPTO_SHA512_S390=m 710CONFIG_CRYPTO_SHA512_S390=m
686CONFIG_CRYPTO_DES_S390=m 711CONFIG_CRYPTO_DES_S390=m
687CONFIG_CRYPTO_AES_S390=m 712CONFIG_CRYPTO_AES_S390=m
713CONFIG_CRYPTO_PAES_S390=m
688CONFIG_CRYPTO_GHASH_S390=m 714CONFIG_CRYPTO_GHASH_S390=m
689CONFIG_CRYPTO_CRC32_S390=y 715CONFIG_CRYPTO_CRC32_S390=y
690CONFIG_ASYMMETRIC_KEY_TYPE=y 716CONFIG_ASYMMETRIC_KEY_TYPE=y
@@ -692,6 +718,7 @@ CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
692CONFIG_X509_CERTIFICATE_PARSER=m 718CONFIG_X509_CERTIFICATE_PARSER=m
693CONFIG_CRC7=m 719CONFIG_CRC7=m
694CONFIG_CRC8=m 720CONFIG_CRC8=m
721CONFIG_RANDOM32_SELFTEST=y
695CONFIG_CORDIC=m 722CONFIG_CORDIC=m
696CONFIG_CMM=m 723CONFIG_CMM=m
697CONFIG_APPLDATA_BASE=y 724CONFIG_APPLDATA_BASE=y
diff --git a/arch/s390/configs/gcov_defconfig b/arch/s390/configs/gcov_defconfig
index 83970b5afb2b..3c6b78189fbc 100644
--- a/arch/s390/configs/gcov_defconfig
+++ b/arch/s390/configs/gcov_defconfig
@@ -31,6 +31,7 @@ CONFIG_USER_NS=y
31CONFIG_SCHED_AUTOGROUP=y 31CONFIG_SCHED_AUTOGROUP=y
32CONFIG_BLK_DEV_INITRD=y 32CONFIG_BLK_DEV_INITRD=y
33CONFIG_EXPERT=y 33CONFIG_EXPERT=y
34# CONFIG_SYSFS_SYSCALL is not set
34CONFIG_BPF_SYSCALL=y 35CONFIG_BPF_SYSCALL=y
35CONFIG_USERFAULTFD=y 36CONFIG_USERFAULTFD=y
36# CONFIG_COMPAT_BRK is not set 37# CONFIG_COMPAT_BRK is not set
@@ -46,7 +47,10 @@ CONFIG_MODULE_UNLOAD=y
46CONFIG_MODULE_FORCE_UNLOAD=y 47CONFIG_MODULE_FORCE_UNLOAD=y
47CONFIG_MODVERSIONS=y 48CONFIG_MODVERSIONS=y
48CONFIG_MODULE_SRCVERSION_ALL=y 49CONFIG_MODULE_SRCVERSION_ALL=y
50CONFIG_BLK_DEV_INTEGRITY=y
49CONFIG_BLK_DEV_THROTTLING=y 51CONFIG_BLK_DEV_THROTTLING=y
52CONFIG_BLK_WBT=y
53CONFIG_BLK_WBT_SQ=y
50CONFIG_PARTITION_ADVANCED=y 54CONFIG_PARTITION_ADVANCED=y
51CONFIG_IBM_PARTITION=y 55CONFIG_IBM_PARTITION=y
52CONFIG_BSD_DISKLABEL=y 56CONFIG_BSD_DISKLABEL=y
@@ -88,6 +92,8 @@ CONFIG_UNIX=y
88CONFIG_UNIX_DIAG=m 92CONFIG_UNIX_DIAG=m
89CONFIG_XFRM_USER=m 93CONFIG_XFRM_USER=m
90CONFIG_NET_KEY=m 94CONFIG_NET_KEY=m
95CONFIG_SMC=m
96CONFIG_SMC_DIAG=m
91CONFIG_INET=y 97CONFIG_INET=y
92CONFIG_IP_MULTICAST=y 98CONFIG_IP_MULTICAST=y
93CONFIG_IP_ADVANCED_ROUTER=y 99CONFIG_IP_ADVANCED_ROUTER=y
@@ -356,6 +362,7 @@ CONFIG_NET_ACT_SIMP=m
356CONFIG_NET_ACT_SKBEDIT=m 362CONFIG_NET_ACT_SKBEDIT=m
357CONFIG_NET_ACT_CSUM=m 363CONFIG_NET_ACT_CSUM=m
358CONFIG_DNS_RESOLVER=y 364CONFIG_DNS_RESOLVER=y
365CONFIG_NETLINK_DIAG=m
359CONFIG_CGROUP_NET_PRIO=y 366CONFIG_CGROUP_NET_PRIO=y
360CONFIG_BPF_JIT=y 367CONFIG_BPF_JIT=y
361CONFIG_NET_PKTGEN=m 368CONFIG_NET_PKTGEN=m
@@ -364,16 +371,18 @@ CONFIG_DEVTMPFS=y
364CONFIG_DMA_CMA=y 371CONFIG_DMA_CMA=y
365CONFIG_CMA_SIZE_MBYTES=0 372CONFIG_CMA_SIZE_MBYTES=0
366CONFIG_CONNECTOR=y 373CONFIG_CONNECTOR=y
374CONFIG_ZRAM=m
367CONFIG_BLK_DEV_LOOP=m 375CONFIG_BLK_DEV_LOOP=m
368CONFIG_BLK_DEV_CRYPTOLOOP=m 376CONFIG_BLK_DEV_CRYPTOLOOP=m
377CONFIG_BLK_DEV_DRBD=m
369CONFIG_BLK_DEV_NBD=m 378CONFIG_BLK_DEV_NBD=m
370CONFIG_BLK_DEV_OSD=m 379CONFIG_BLK_DEV_OSD=m
371CONFIG_BLK_DEV_RAM=y 380CONFIG_BLK_DEV_RAM=y
372CONFIG_BLK_DEV_RAM_SIZE=32768 381CONFIG_BLK_DEV_RAM_SIZE=32768
373CONFIG_CDROM_PKTCDVD=m 382CONFIG_BLK_DEV_RAM_DAX=y
374CONFIG_ATA_OVER_ETH=m
375CONFIG_VIRTIO_BLK=y 383CONFIG_VIRTIO_BLK=y
376CONFIG_ENCLOSURE_SERVICES=m 384CONFIG_ENCLOSURE_SERVICES=m
385CONFIG_GENWQE=m
377CONFIG_RAID_ATTRS=m 386CONFIG_RAID_ATTRS=m
378CONFIG_SCSI=y 387CONFIG_SCSI=y
379CONFIG_BLK_DEV_SD=y 388CONFIG_BLK_DEV_SD=y
@@ -439,6 +448,8 @@ CONFIG_NLMON=m
439# CONFIG_NET_VENDOR_INTEL is not set 448# CONFIG_NET_VENDOR_INTEL is not set
440# CONFIG_NET_VENDOR_MARVELL is not set 449# CONFIG_NET_VENDOR_MARVELL is not set
441CONFIG_MLX4_EN=m 450CONFIG_MLX4_EN=m
451CONFIG_MLX5_CORE=m
452CONFIG_MLX5_CORE_EN=y
442# CONFIG_NET_VENDOR_NATSEMI is not set 453# CONFIG_NET_VENDOR_NATSEMI is not set
443CONFIG_PPP=m 454CONFIG_PPP=m
444CONFIG_PPP_BSDCOMP=m 455CONFIG_PPP_BSDCOMP=m
@@ -449,7 +460,6 @@ CONFIG_PPTP=m
449CONFIG_PPPOL2TP=m 460CONFIG_PPPOL2TP=m
450CONFIG_PPP_ASYNC=m 461CONFIG_PPP_ASYNC=m
451CONFIG_PPP_SYNC_TTY=m 462CONFIG_PPP_SYNC_TTY=m
452# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
453# CONFIG_INPUT_KEYBOARD is not set 463# CONFIG_INPUT_KEYBOARD is not set
454# CONFIG_INPUT_MOUSE is not set 464# CONFIG_INPUT_MOUSE is not set
455# CONFIG_SERIO is not set 465# CONFIG_SERIO is not set
@@ -468,6 +478,7 @@ CONFIG_DIAG288_WATCHDOG=m
468CONFIG_INFINIBAND=m 478CONFIG_INFINIBAND=m
469CONFIG_INFINIBAND_USER_ACCESS=m 479CONFIG_INFINIBAND_USER_ACCESS=m
470CONFIG_MLX4_INFINIBAND=m 480CONFIG_MLX4_INFINIBAND=m
481CONFIG_MLX5_INFINIBAND=m
471CONFIG_VIRTIO_BALLOON=m 482CONFIG_VIRTIO_BALLOON=m
472CONFIG_EXT4_FS=y 483CONFIG_EXT4_FS=y
473CONFIG_EXT4_FS_POSIX_ACL=y 484CONFIG_EXT4_FS_POSIX_ACL=y
@@ -483,11 +494,15 @@ CONFIG_XFS_QUOTA=y
483CONFIG_XFS_POSIX_ACL=y 494CONFIG_XFS_POSIX_ACL=y
484CONFIG_XFS_RT=y 495CONFIG_XFS_RT=y
485CONFIG_GFS2_FS=m 496CONFIG_GFS2_FS=m
497CONFIG_GFS2_FS_LOCKING_DLM=y
486CONFIG_OCFS2_FS=m 498CONFIG_OCFS2_FS=m
487CONFIG_BTRFS_FS=y 499CONFIG_BTRFS_FS=y
488CONFIG_BTRFS_FS_POSIX_ACL=y 500CONFIG_BTRFS_FS_POSIX_ACL=y
489CONFIG_NILFS2_FS=m 501CONFIG_NILFS2_FS=m
502CONFIG_FS_DAX=y
503CONFIG_EXPORTFS_BLOCK_OPS=y
490CONFIG_FANOTIFY=y 504CONFIG_FANOTIFY=y
505CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
491CONFIG_QUOTA_NETLINK_INTERFACE=y 506CONFIG_QUOTA_NETLINK_INTERFACE=y
492CONFIG_QFMT_V1=m 507CONFIG_QFMT_V1=m
493CONFIG_QFMT_V2=m 508CONFIG_QFMT_V2=m
@@ -553,7 +568,6 @@ CONFIG_UNUSED_SYMBOLS=y
553CONFIG_MAGIC_SYSRQ=y 568CONFIG_MAGIC_SYSRQ=y
554CONFIG_DEBUG_MEMORY_INIT=y 569CONFIG_DEBUG_MEMORY_INIT=y
555CONFIG_PANIC_ON_OOPS=y 570CONFIG_PANIC_ON_OOPS=y
556CONFIG_TIMER_STATS=y
557CONFIG_RCU_TORTURE_TEST=m 571CONFIG_RCU_TORTURE_TEST=m
558CONFIG_RCU_CPU_STALL_TIMEOUT=60 572CONFIG_RCU_CPU_STALL_TIMEOUT=60
559CONFIG_LATENCYTOP=y 573CONFIG_LATENCYTOP=y
@@ -576,6 +590,7 @@ CONFIG_BIG_KEYS=y
576CONFIG_ENCRYPTED_KEYS=m 590CONFIG_ENCRYPTED_KEYS=m
577CONFIG_SECURITY=y 591CONFIG_SECURITY=y
578CONFIG_SECURITY_NETWORK=y 592CONFIG_SECURITY_NETWORK=y
593CONFIG_HARDENED_USERCOPY=y
579CONFIG_SECURITY_SELINUX=y 594CONFIG_SECURITY_SELINUX=y
580CONFIG_SECURITY_SELINUX_BOOTPARAM=y 595CONFIG_SECURITY_SELINUX_BOOTPARAM=y
581CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 596CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
@@ -599,6 +614,7 @@ CONFIG_CRYPTO_CHACHA20POLY1305=m
599CONFIG_CRYPTO_LRW=m 614CONFIG_CRYPTO_LRW=m
600CONFIG_CRYPTO_PCBC=m 615CONFIG_CRYPTO_PCBC=m
601CONFIG_CRYPTO_KEYWRAP=m 616CONFIG_CRYPTO_KEYWRAP=m
617CONFIG_CRYPTO_CMAC=m
602CONFIG_CRYPTO_XCBC=m 618CONFIG_CRYPTO_XCBC=m
603CONFIG_CRYPTO_VMAC=m 619CONFIG_CRYPTO_VMAC=m
604CONFIG_CRYPTO_CRC32=m 620CONFIG_CRYPTO_CRC32=m
@@ -611,6 +627,7 @@ CONFIG_CRYPTO_SHA512=m
611CONFIG_CRYPTO_SHA3=m 627CONFIG_CRYPTO_SHA3=m
612CONFIG_CRYPTO_TGR192=m 628CONFIG_CRYPTO_TGR192=m
613CONFIG_CRYPTO_WP512=m 629CONFIG_CRYPTO_WP512=m
630CONFIG_CRYPTO_AES_TI=m
614CONFIG_CRYPTO_ANUBIS=m 631CONFIG_CRYPTO_ANUBIS=m
615CONFIG_CRYPTO_BLOWFISH=m 632CONFIG_CRYPTO_BLOWFISH=m
616CONFIG_CRYPTO_CAMELLIA=m 633CONFIG_CRYPTO_CAMELLIA=m
@@ -626,16 +643,19 @@ CONFIG_CRYPTO_TWOFISH=m
626CONFIG_CRYPTO_842=m 643CONFIG_CRYPTO_842=m
627CONFIG_CRYPTO_LZ4=m 644CONFIG_CRYPTO_LZ4=m
628CONFIG_CRYPTO_LZ4HC=m 645CONFIG_CRYPTO_LZ4HC=m
646CONFIG_CRYPTO_ANSI_CPRNG=m
629CONFIG_CRYPTO_USER_API_HASH=m 647CONFIG_CRYPTO_USER_API_HASH=m
630CONFIG_CRYPTO_USER_API_SKCIPHER=m 648CONFIG_CRYPTO_USER_API_SKCIPHER=m
631CONFIG_CRYPTO_USER_API_RNG=m 649CONFIG_CRYPTO_USER_API_RNG=m
632CONFIG_CRYPTO_USER_API_AEAD=m 650CONFIG_CRYPTO_USER_API_AEAD=m
633CONFIG_ZCRYPT=m 651CONFIG_ZCRYPT=m
652CONFIG_PKEY=m
634CONFIG_CRYPTO_SHA1_S390=m 653CONFIG_CRYPTO_SHA1_S390=m
635CONFIG_CRYPTO_SHA256_S390=m 654CONFIG_CRYPTO_SHA256_S390=m
636CONFIG_CRYPTO_SHA512_S390=m 655CONFIG_CRYPTO_SHA512_S390=m
637CONFIG_CRYPTO_DES_S390=m 656CONFIG_CRYPTO_DES_S390=m
638CONFIG_CRYPTO_AES_S390=m 657CONFIG_CRYPTO_AES_S390=m
658CONFIG_CRYPTO_PAES_S390=m
639CONFIG_CRYPTO_GHASH_S390=m 659CONFIG_CRYPTO_GHASH_S390=m
640CONFIG_CRYPTO_CRC32_S390=y 660CONFIG_CRYPTO_CRC32_S390=y
641CONFIG_CRC7=m 661CONFIG_CRC7=m
diff --git a/arch/s390/configs/performance_defconfig b/arch/s390/configs/performance_defconfig
index fbc6542aaf59..653d72bcc007 100644
--- a/arch/s390/configs/performance_defconfig
+++ b/arch/s390/configs/performance_defconfig
@@ -31,6 +31,7 @@ CONFIG_USER_NS=y
31CONFIG_SCHED_AUTOGROUP=y 31CONFIG_SCHED_AUTOGROUP=y
32CONFIG_BLK_DEV_INITRD=y 32CONFIG_BLK_DEV_INITRD=y
33CONFIG_EXPERT=y 33CONFIG_EXPERT=y
34# CONFIG_SYSFS_SYSCALL is not set
34CONFIG_BPF_SYSCALL=y 35CONFIG_BPF_SYSCALL=y
35CONFIG_USERFAULTFD=y 36CONFIG_USERFAULTFD=y
36# CONFIG_COMPAT_BRK is not set 37# CONFIG_COMPAT_BRK is not set
@@ -44,7 +45,10 @@ CONFIG_MODULE_UNLOAD=y
44CONFIG_MODULE_FORCE_UNLOAD=y 45CONFIG_MODULE_FORCE_UNLOAD=y
45CONFIG_MODVERSIONS=y 46CONFIG_MODVERSIONS=y
46CONFIG_MODULE_SRCVERSION_ALL=y 47CONFIG_MODULE_SRCVERSION_ALL=y
48CONFIG_BLK_DEV_INTEGRITY=y
47CONFIG_BLK_DEV_THROTTLING=y 49CONFIG_BLK_DEV_THROTTLING=y
50CONFIG_BLK_WBT=y
51CONFIG_BLK_WBT_SQ=y
48CONFIG_PARTITION_ADVANCED=y 52CONFIG_PARTITION_ADVANCED=y
49CONFIG_IBM_PARTITION=y 53CONFIG_IBM_PARTITION=y
50CONFIG_BSD_DISKLABEL=y 54CONFIG_BSD_DISKLABEL=y
@@ -86,6 +90,8 @@ CONFIG_UNIX=y
86CONFIG_UNIX_DIAG=m 90CONFIG_UNIX_DIAG=m
87CONFIG_XFRM_USER=m 91CONFIG_XFRM_USER=m
88CONFIG_NET_KEY=m 92CONFIG_NET_KEY=m
93CONFIG_SMC=m
94CONFIG_SMC_DIAG=m
89CONFIG_INET=y 95CONFIG_INET=y
90CONFIG_IP_MULTICAST=y 96CONFIG_IP_MULTICAST=y
91CONFIG_IP_ADVANCED_ROUTER=y 97CONFIG_IP_ADVANCED_ROUTER=y
@@ -354,6 +360,7 @@ CONFIG_NET_ACT_SIMP=m
354CONFIG_NET_ACT_SKBEDIT=m 360CONFIG_NET_ACT_SKBEDIT=m
355CONFIG_NET_ACT_CSUM=m 361CONFIG_NET_ACT_CSUM=m
356CONFIG_DNS_RESOLVER=y 362CONFIG_DNS_RESOLVER=y
363CONFIG_NETLINK_DIAG=m
357CONFIG_CGROUP_NET_PRIO=y 364CONFIG_CGROUP_NET_PRIO=y
358CONFIG_BPF_JIT=y 365CONFIG_BPF_JIT=y
359CONFIG_NET_PKTGEN=m 366CONFIG_NET_PKTGEN=m
@@ -362,16 +369,18 @@ CONFIG_DEVTMPFS=y
362CONFIG_DMA_CMA=y 369CONFIG_DMA_CMA=y
363CONFIG_CMA_SIZE_MBYTES=0 370CONFIG_CMA_SIZE_MBYTES=0
364CONFIG_CONNECTOR=y 371CONFIG_CONNECTOR=y
372CONFIG_ZRAM=m
365CONFIG_BLK_DEV_LOOP=m 373CONFIG_BLK_DEV_LOOP=m
366CONFIG_BLK_DEV_CRYPTOLOOP=m 374CONFIG_BLK_DEV_CRYPTOLOOP=m
375CONFIG_BLK_DEV_DRBD=m
367CONFIG_BLK_DEV_NBD=m 376CONFIG_BLK_DEV_NBD=m
368CONFIG_BLK_DEV_OSD=m 377CONFIG_BLK_DEV_OSD=m
369CONFIG_BLK_DEV_RAM=y 378CONFIG_BLK_DEV_RAM=y
370CONFIG_BLK_DEV_RAM_SIZE=32768 379CONFIG_BLK_DEV_RAM_SIZE=32768
371CONFIG_CDROM_PKTCDVD=m 380CONFIG_BLK_DEV_RAM_DAX=y
372CONFIG_ATA_OVER_ETH=m
373CONFIG_VIRTIO_BLK=y 381CONFIG_VIRTIO_BLK=y
374CONFIG_ENCLOSURE_SERVICES=m 382CONFIG_ENCLOSURE_SERVICES=m
383CONFIG_GENWQE=m
375CONFIG_RAID_ATTRS=m 384CONFIG_RAID_ATTRS=m
376CONFIG_SCSI=y 385CONFIG_SCSI=y
377CONFIG_BLK_DEV_SD=y 386CONFIG_BLK_DEV_SD=y
@@ -437,6 +446,8 @@ CONFIG_NLMON=m
437# CONFIG_NET_VENDOR_INTEL is not set 446# CONFIG_NET_VENDOR_INTEL is not set
438# CONFIG_NET_VENDOR_MARVELL is not set 447# CONFIG_NET_VENDOR_MARVELL is not set
439CONFIG_MLX4_EN=m 448CONFIG_MLX4_EN=m
449CONFIG_MLX5_CORE=m
450CONFIG_MLX5_CORE_EN=y
440# CONFIG_NET_VENDOR_NATSEMI is not set 451# CONFIG_NET_VENDOR_NATSEMI is not set
441CONFIG_PPP=m 452CONFIG_PPP=m
442CONFIG_PPP_BSDCOMP=m 453CONFIG_PPP_BSDCOMP=m
@@ -447,7 +458,6 @@ CONFIG_PPTP=m
447CONFIG_PPPOL2TP=m 458CONFIG_PPPOL2TP=m
448CONFIG_PPP_ASYNC=m 459CONFIG_PPP_ASYNC=m
449CONFIG_PPP_SYNC_TTY=m 460CONFIG_PPP_SYNC_TTY=m
450# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
451# CONFIG_INPUT_KEYBOARD is not set 461# CONFIG_INPUT_KEYBOARD is not set
452# CONFIG_INPUT_MOUSE is not set 462# CONFIG_INPUT_MOUSE is not set
453# CONFIG_SERIO is not set 463# CONFIG_SERIO is not set
@@ -466,6 +476,7 @@ CONFIG_DIAG288_WATCHDOG=m
466CONFIG_INFINIBAND=m 476CONFIG_INFINIBAND=m
467CONFIG_INFINIBAND_USER_ACCESS=m 477CONFIG_INFINIBAND_USER_ACCESS=m
468CONFIG_MLX4_INFINIBAND=m 478CONFIG_MLX4_INFINIBAND=m
479CONFIG_MLX5_INFINIBAND=m
469CONFIG_VIRTIO_BALLOON=m 480CONFIG_VIRTIO_BALLOON=m
470CONFIG_EXT4_FS=y 481CONFIG_EXT4_FS=y
471CONFIG_EXT4_FS_POSIX_ACL=y 482CONFIG_EXT4_FS_POSIX_ACL=y
@@ -481,11 +492,15 @@ CONFIG_XFS_QUOTA=y
481CONFIG_XFS_POSIX_ACL=y 492CONFIG_XFS_POSIX_ACL=y
482CONFIG_XFS_RT=y 493CONFIG_XFS_RT=y
483CONFIG_GFS2_FS=m 494CONFIG_GFS2_FS=m
495CONFIG_GFS2_FS_LOCKING_DLM=y
484CONFIG_OCFS2_FS=m 496CONFIG_OCFS2_FS=m
485CONFIG_BTRFS_FS=y 497CONFIG_BTRFS_FS=y
486CONFIG_BTRFS_FS_POSIX_ACL=y 498CONFIG_BTRFS_FS_POSIX_ACL=y
487CONFIG_NILFS2_FS=m 499CONFIG_NILFS2_FS=m
500CONFIG_FS_DAX=y
501CONFIG_EXPORTFS_BLOCK_OPS=y
488CONFIG_FANOTIFY=y 502CONFIG_FANOTIFY=y
503CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
489CONFIG_QUOTA_NETLINK_INTERFACE=y 504CONFIG_QUOTA_NETLINK_INTERFACE=y
490CONFIG_QFMT_V1=m 505CONFIG_QFMT_V1=m
491CONFIG_QFMT_V2=m 506CONFIG_QFMT_V2=m
@@ -551,7 +566,6 @@ CONFIG_UNUSED_SYMBOLS=y
551CONFIG_MAGIC_SYSRQ=y 566CONFIG_MAGIC_SYSRQ=y
552CONFIG_DEBUG_MEMORY_INIT=y 567CONFIG_DEBUG_MEMORY_INIT=y
553CONFIG_PANIC_ON_OOPS=y 568CONFIG_PANIC_ON_OOPS=y
554CONFIG_TIMER_STATS=y
555CONFIG_RCU_TORTURE_TEST=m 569CONFIG_RCU_TORTURE_TEST=m
556CONFIG_RCU_CPU_STALL_TIMEOUT=60 570CONFIG_RCU_CPU_STALL_TIMEOUT=60
557CONFIG_LATENCYTOP=y 571CONFIG_LATENCYTOP=y
@@ -574,6 +588,7 @@ CONFIG_BIG_KEYS=y
574CONFIG_ENCRYPTED_KEYS=m 588CONFIG_ENCRYPTED_KEYS=m
575CONFIG_SECURITY=y 589CONFIG_SECURITY=y
576CONFIG_SECURITY_NETWORK=y 590CONFIG_SECURITY_NETWORK=y
591CONFIG_HARDENED_USERCOPY=y
577CONFIG_SECURITY_SELINUX=y 592CONFIG_SECURITY_SELINUX=y
578CONFIG_SECURITY_SELINUX_BOOTPARAM=y 593CONFIG_SECURITY_SELINUX_BOOTPARAM=y
579CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 594CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
@@ -597,6 +612,7 @@ CONFIG_CRYPTO_CHACHA20POLY1305=m
597CONFIG_CRYPTO_LRW=m 612CONFIG_CRYPTO_LRW=m
598CONFIG_CRYPTO_PCBC=m 613CONFIG_CRYPTO_PCBC=m
599CONFIG_CRYPTO_KEYWRAP=m 614CONFIG_CRYPTO_KEYWRAP=m
615CONFIG_CRYPTO_CMAC=m
600CONFIG_CRYPTO_XCBC=m 616CONFIG_CRYPTO_XCBC=m
601CONFIG_CRYPTO_VMAC=m 617CONFIG_CRYPTO_VMAC=m
602CONFIG_CRYPTO_CRC32=m 618CONFIG_CRYPTO_CRC32=m
@@ -609,6 +625,7 @@ CONFIG_CRYPTO_SHA512=m
609CONFIG_CRYPTO_SHA3=m 625CONFIG_CRYPTO_SHA3=m
610CONFIG_CRYPTO_TGR192=m 626CONFIG_CRYPTO_TGR192=m
611CONFIG_CRYPTO_WP512=m 627CONFIG_CRYPTO_WP512=m
628CONFIG_CRYPTO_AES_TI=m
612CONFIG_CRYPTO_ANUBIS=m 629CONFIG_CRYPTO_ANUBIS=m
613CONFIG_CRYPTO_BLOWFISH=m 630CONFIG_CRYPTO_BLOWFISH=m
614CONFIG_CRYPTO_CAMELLIA=m 631CONFIG_CRYPTO_CAMELLIA=m
@@ -624,6 +641,7 @@ CONFIG_CRYPTO_TWOFISH=m
624CONFIG_CRYPTO_842=m 641CONFIG_CRYPTO_842=m
625CONFIG_CRYPTO_LZ4=m 642CONFIG_CRYPTO_LZ4=m
626CONFIG_CRYPTO_LZ4HC=m 643CONFIG_CRYPTO_LZ4HC=m
644CONFIG_CRYPTO_ANSI_CPRNG=m
627CONFIG_CRYPTO_USER_API_HASH=m 645CONFIG_CRYPTO_USER_API_HASH=m
628CONFIG_CRYPTO_USER_API_SKCIPHER=m 646CONFIG_CRYPTO_USER_API_SKCIPHER=m
629CONFIG_CRYPTO_USER_API_RNG=m 647CONFIG_CRYPTO_USER_API_RNG=m
@@ -635,6 +653,7 @@ CONFIG_CRYPTO_SHA256_S390=m
635CONFIG_CRYPTO_SHA512_S390=m 653CONFIG_CRYPTO_SHA512_S390=m
636CONFIG_CRYPTO_DES_S390=m 654CONFIG_CRYPTO_DES_S390=m
637CONFIG_CRYPTO_AES_S390=m 655CONFIG_CRYPTO_AES_S390=m
656CONFIG_CRYPTO_PAES_S390=m
638CONFIG_CRYPTO_GHASH_S390=m 657CONFIG_CRYPTO_GHASH_S390=m
639CONFIG_CRYPTO_CRC32_S390=y 658CONFIG_CRYPTO_CRC32_S390=y
640CONFIG_CRC7=m 659CONFIG_CRC7=m
diff --git a/arch/s390/configs/zfcpdump_defconfig b/arch/s390/configs/zfcpdump_defconfig
index e23d97c13735..afa46a7406ea 100644
--- a/arch/s390/configs/zfcpdump_defconfig
+++ b/arch/s390/configs/zfcpdump_defconfig
@@ -12,8 +12,10 @@ CONFIG_TUNE_ZEC12=y
12CONFIG_NR_CPUS=2 12CONFIG_NR_CPUS=2
13# CONFIG_HOTPLUG_CPU is not set 13# CONFIG_HOTPLUG_CPU is not set
14CONFIG_HZ_100=y 14CONFIG_HZ_100=y
15# CONFIG_ARCH_RANDOM is not set
15# CONFIG_COMPACTION is not set 16# CONFIG_COMPACTION is not set
16# CONFIG_MIGRATION is not set 17# CONFIG_MIGRATION is not set
18# CONFIG_BOUNCE is not set
17# CONFIG_CHECK_STACK is not set 19# CONFIG_CHECK_STACK is not set
18# CONFIG_CHSC_SCH is not set 20# CONFIG_CHSC_SCH is not set
19# CONFIG_SCM_BUS is not set 21# CONFIG_SCM_BUS is not set
@@ -36,11 +38,11 @@ CONFIG_SCSI_CONSTANTS=y
36CONFIG_SCSI_LOGGING=y 38CONFIG_SCSI_LOGGING=y
37CONFIG_SCSI_FC_ATTRS=y 39CONFIG_SCSI_FC_ATTRS=y
38CONFIG_ZFCP=y 40CONFIG_ZFCP=y
39# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
40# CONFIG_INPUT_KEYBOARD is not set 41# CONFIG_INPUT_KEYBOARD is not set
41# CONFIG_INPUT_MOUSE is not set 42# CONFIG_INPUT_MOUSE is not set
42# CONFIG_SERIO is not set 43# CONFIG_SERIO is not set
43# CONFIG_HVC_IUCV is not set 44# CONFIG_HVC_IUCV is not set
45# CONFIG_HW_RANDOM_S390 is not set
44CONFIG_RAW_DRIVER=y 46CONFIG_RAW_DRIVER=y
45# CONFIG_SCLP_ASYNC is not set 47# CONFIG_SCLP_ASYNC is not set
46# CONFIG_HMC_DRV is not set 48# CONFIG_HMC_DRV is not set
@@ -54,9 +56,9 @@ CONFIG_RAW_DRIVER=y
54# CONFIG_INOTIFY_USER is not set 56# CONFIG_INOTIFY_USER is not set
55CONFIG_CONFIGFS_FS=y 57CONFIG_CONFIGFS_FS=y
56# CONFIG_MISC_FILESYSTEMS is not set 58# CONFIG_MISC_FILESYSTEMS is not set
59# CONFIG_NETWORK_FILESYSTEMS is not set
57CONFIG_PRINTK_TIME=y 60CONFIG_PRINTK_TIME=y
58CONFIG_DEBUG_INFO=y 61CONFIG_DEBUG_INFO=y
59CONFIG_DEBUG_FS=y
60CONFIG_DEBUG_KERNEL=y 62CONFIG_DEBUG_KERNEL=y
61CONFIG_PANIC_ON_OOPS=y 63CONFIG_PANIC_ON_OOPS=y
62# CONFIG_SCHED_DEBUG is not set 64# CONFIG_SCHED_DEBUG is not set
diff --git a/arch/s390/defconfig b/arch/s390/defconfig
index 97189dbaf34b..20244a38c886 100644
--- a/arch/s390/defconfig
+++ b/arch/s390/defconfig
@@ -28,6 +28,7 @@ CONFIG_NAMESPACES=y
28CONFIG_USER_NS=y 28CONFIG_USER_NS=y
29CONFIG_BLK_DEV_INITRD=y 29CONFIG_BLK_DEV_INITRD=y
30CONFIG_EXPERT=y 30CONFIG_EXPERT=y
31# CONFIG_SYSFS_SYSCALL is not set
31CONFIG_BPF_SYSCALL=y 32CONFIG_BPF_SYSCALL=y
32CONFIG_USERFAULTFD=y 33CONFIG_USERFAULTFD=y
33# CONFIG_COMPAT_BRK is not set 34# CONFIG_COMPAT_BRK is not set
@@ -108,7 +109,6 @@ CONFIG_ZFCP=y
108CONFIG_SCSI_VIRTIO=y 109CONFIG_SCSI_VIRTIO=y
109CONFIG_MD=y 110CONFIG_MD=y
110CONFIG_MD_LINEAR=m 111CONFIG_MD_LINEAR=m
111CONFIG_MD_RAID0=m
112CONFIG_MD_MULTIPATH=m 112CONFIG_MD_MULTIPATH=m
113CONFIG_BLK_DEV_DM=y 113CONFIG_BLK_DEV_DM=y
114CONFIG_DM_CRYPT=m 114CONFIG_DM_CRYPT=m
@@ -131,6 +131,7 @@ CONFIG_TUN=m
131CONFIG_VIRTIO_NET=y 131CONFIG_VIRTIO_NET=y
132# CONFIG_NET_VENDOR_ALACRITECH is not set 132# CONFIG_NET_VENDOR_ALACRITECH is not set
133# CONFIG_NET_VENDOR_SOLARFLARE is not set 133# CONFIG_NET_VENDOR_SOLARFLARE is not set
134# CONFIG_NET_VENDOR_SYNOPSYS is not set
134# CONFIG_INPUT is not set 135# CONFIG_INPUT is not set
135# CONFIG_SERIO is not set 136# CONFIG_SERIO is not set
136CONFIG_DEVKMEM=y 137CONFIG_DEVKMEM=y
@@ -162,7 +163,6 @@ CONFIG_MAGIC_SYSRQ=y
162CONFIG_DEBUG_PAGEALLOC=y 163CONFIG_DEBUG_PAGEALLOC=y
163CONFIG_DETECT_HUNG_TASK=y 164CONFIG_DETECT_HUNG_TASK=y
164CONFIG_PANIC_ON_OOPS=y 165CONFIG_PANIC_ON_OOPS=y
165CONFIG_TIMER_STATS=y
166CONFIG_DEBUG_RT_MUTEXES=y 166CONFIG_DEBUG_RT_MUTEXES=y
167CONFIG_PROVE_LOCKING=y 167CONFIG_PROVE_LOCKING=y
168CONFIG_LOCK_STAT=y 168CONFIG_LOCK_STAT=y
@@ -172,14 +172,12 @@ CONFIG_DEBUG_LIST=y
172CONFIG_DEBUG_SG=y 172CONFIG_DEBUG_SG=y
173CONFIG_DEBUG_NOTIFIERS=y 173CONFIG_DEBUG_NOTIFIERS=y
174CONFIG_RCU_CPU_STALL_TIMEOUT=60 174CONFIG_RCU_CPU_STALL_TIMEOUT=60
175CONFIG_RCU_TRACE=y
176CONFIG_LATENCYTOP=y 175CONFIG_LATENCYTOP=y
177CONFIG_SCHED_TRACER=y 176CONFIG_SCHED_TRACER=y
178CONFIG_FTRACE_SYSCALLS=y 177CONFIG_FTRACE_SYSCALLS=y
179CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y 178CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
180CONFIG_STACK_TRACER=y 179CONFIG_STACK_TRACER=y
181CONFIG_BLK_DEV_IO_TRACE=y 180CONFIG_BLK_DEV_IO_TRACE=y
182CONFIG_UPROBE_EVENTS=y
183CONFIG_FUNCTION_PROFILER=y 181CONFIG_FUNCTION_PROFILER=y
184CONFIG_TRACE_ENUM_MAP_FILE=y 182CONFIG_TRACE_ENUM_MAP_FILE=y
185CONFIG_KPROBES_SANITY_TEST=y 183CONFIG_KPROBES_SANITY_TEST=y
@@ -190,7 +188,6 @@ CONFIG_CRYPTO_CCM=m
190CONFIG_CRYPTO_GCM=m 188CONFIG_CRYPTO_GCM=m
191CONFIG_CRYPTO_CBC=y 189CONFIG_CRYPTO_CBC=y
192CONFIG_CRYPTO_CTS=m 190CONFIG_CRYPTO_CTS=m
193CONFIG_CRYPTO_ECB=m
194CONFIG_CRYPTO_LRW=m 191CONFIG_CRYPTO_LRW=m
195CONFIG_CRYPTO_PCBC=m 192CONFIG_CRYPTO_PCBC=m
196CONFIG_CRYPTO_XTS=m 193CONFIG_CRYPTO_XTS=m
@@ -230,6 +227,7 @@ CONFIG_CRYPTO_USER_API_SKCIPHER=m
230CONFIG_CRYPTO_USER_API_RNG=m 227CONFIG_CRYPTO_USER_API_RNG=m
231CONFIG_ZCRYPT=m 228CONFIG_ZCRYPT=m
232CONFIG_PKEY=m 229CONFIG_PKEY=m
230CONFIG_CRYPTO_PAES_S390=m
233CONFIG_CRYPTO_SHA1_S390=m 231CONFIG_CRYPTO_SHA1_S390=m
234CONFIG_CRYPTO_SHA256_S390=m 232CONFIG_CRYPTO_SHA256_S390=m
235CONFIG_CRYPTO_SHA512_S390=m 233CONFIG_CRYPTO_SHA512_S390=m
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
index 426614a882a9..65d07ac34647 100644
--- a/arch/s390/include/asm/kvm_host.h
+++ b/arch/s390/include/asm/kvm_host.h
@@ -541,7 +541,6 @@ struct kvm_s390_float_interrupt {
541 struct mutex ais_lock; 541 struct mutex ais_lock;
542 u8 simm; 542 u8 simm;
543 u8 nimm; 543 u8 nimm;
544 int ais_enabled;
545}; 544};
546 545
547struct kvm_hw_wp_info_arch { 546struct kvm_hw_wp_info_arch {
diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h
index 60d395fdc864..aeac013968f2 100644
--- a/arch/s390/include/asm/processor.h
+++ b/arch/s390/include/asm/processor.h
@@ -221,11 +221,6 @@ extern void release_thread(struct task_struct *);
221/* Free guarded storage control block for current */ 221/* Free guarded storage control block for current */
222void exit_thread_gs(void); 222void exit_thread_gs(void);
223 223
224/*
225 * Return saved PC of a blocked thread.
226 */
227extern unsigned long thread_saved_pc(struct task_struct *t);
228
229unsigned long get_wchan(struct task_struct *p); 224unsigned long get_wchan(struct task_struct *p);
230#define task_pt_regs(tsk) ((struct pt_regs *) \ 225#define task_pt_regs(tsk) ((struct pt_regs *) \
231 (task_stack_page(tsk) + THREAD_SIZE) - 1) 226 (task_stack_page(tsk) + THREAD_SIZE) - 1)
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index e408d9cc5b96..6315037335ba 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -231,12 +231,17 @@ ENTRY(sie64a)
231 lctlg %c1,%c1,__LC_USER_ASCE # load primary asce 231 lctlg %c1,%c1,__LC_USER_ASCE # load primary asce
232.Lsie_done: 232.Lsie_done:
233# some program checks are suppressing. C code (e.g. do_protection_exception) 233# some program checks are suppressing. C code (e.g. do_protection_exception)
234# will rewind the PSW by the ILC, which is 4 bytes in case of SIE. Other 234# will rewind the PSW by the ILC, which is often 4 bytes in case of SIE. There
235# instructions between sie64a and .Lsie_done should not cause program 235# are some corner cases (e.g. runtime instrumentation) where ILC is unpredictable.
236# interrupts. So lets use a nop (47 00 00 00) as a landing pad. 236# Other instructions between sie64a and .Lsie_done should not cause program
237# interrupts. So lets use 3 nops as a landing pad for all possible rewinds.
237# See also .Lcleanup_sie 238# See also .Lcleanup_sie
238.Lrewind_pad: 239.Lrewind_pad6:
239 nop 0 240 nopr 7
241.Lrewind_pad4:
242 nopr 7
243.Lrewind_pad2:
244 nopr 7
240 .globl sie_exit 245 .globl sie_exit
241sie_exit: 246sie_exit:
242 lg %r14,__SF_EMPTY+8(%r15) # load guest register save area 247 lg %r14,__SF_EMPTY+8(%r15) # load guest register save area
@@ -249,7 +254,9 @@ sie_exit:
249 stg %r14,__SF_EMPTY+16(%r15) # set exit reason code 254 stg %r14,__SF_EMPTY+16(%r15) # set exit reason code
250 j sie_exit 255 j sie_exit
251 256
252 EX_TABLE(.Lrewind_pad,.Lsie_fault) 257 EX_TABLE(.Lrewind_pad6,.Lsie_fault)
258 EX_TABLE(.Lrewind_pad4,.Lsie_fault)
259 EX_TABLE(.Lrewind_pad2,.Lsie_fault)
253 EX_TABLE(sie_exit,.Lsie_fault) 260 EX_TABLE(sie_exit,.Lsie_fault)
254EXPORT_SYMBOL(sie64a) 261EXPORT_SYMBOL(sie64a)
255EXPORT_SYMBOL(sie_exit) 262EXPORT_SYMBOL(sie_exit)
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index e545ffe5155a..8e622bb52f7a 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -564,8 +564,6 @@ static struct kset *ipl_kset;
564 564
565static void __ipl_run(void *unused) 565static void __ipl_run(void *unused)
566{ 566{
567 if (MACHINE_IS_LPAR && ipl_info.type == IPL_TYPE_CCW)
568 diag308(DIAG308_LOAD_NORMAL_DUMP, NULL);
569 diag308(DIAG308_LOAD_CLEAR, NULL); 567 diag308(DIAG308_LOAD_CLEAR, NULL);
570 if (MACHINE_IS_VM) 568 if (MACHINE_IS_VM)
571 __cpcmd("IPL", NULL, 0, NULL); 569 __cpcmd("IPL", NULL, 0, NULL);
@@ -1088,10 +1086,7 @@ static void __reipl_run(void *unused)
1088 break; 1086 break;
1089 case REIPL_METHOD_CCW_DIAG: 1087 case REIPL_METHOD_CCW_DIAG:
1090 diag308(DIAG308_SET, reipl_block_ccw); 1088 diag308(DIAG308_SET, reipl_block_ccw);
1091 if (MACHINE_IS_LPAR) 1089 diag308(DIAG308_LOAD_CLEAR, NULL);
1092 diag308(DIAG308_LOAD_NORMAL_DUMP, NULL);
1093 else
1094 diag308(DIAG308_LOAD_CLEAR, NULL);
1095 break; 1090 break;
1096 case REIPL_METHOD_FCP_RW_DIAG: 1091 case REIPL_METHOD_FCP_RW_DIAG:
1097 diag308(DIAG308_SET, reipl_block_fcp); 1092 diag308(DIAG308_SET, reipl_block_fcp);
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
index 999d7154bbdc..bb32b8618bf6 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -41,31 +41,6 @@
41 41
42asmlinkage void ret_from_fork(void) asm ("ret_from_fork"); 42asmlinkage void ret_from_fork(void) asm ("ret_from_fork");
43 43
44/*
45 * Return saved PC of a blocked thread. used in kernel/sched.
46 * resume in entry.S does not create a new stack frame, it
47 * just stores the registers %r6-%r15 to the frame given by
48 * schedule. We want to return the address of the caller of
49 * schedule, so we have to walk the backchain one time to
50 * find the frame schedule() store its return address.
51 */
52unsigned long thread_saved_pc(struct task_struct *tsk)
53{
54 struct stack_frame *sf, *low, *high;
55
56 if (!tsk || !task_stack_page(tsk))
57 return 0;
58 low = task_stack_page(tsk);
59 high = (struct stack_frame *) task_pt_regs(tsk);
60 sf = (struct stack_frame *) tsk->thread.ksp;
61 if (sf <= low || sf > high)
62 return 0;
63 sf = (struct stack_frame *) sf->back_chain;
64 if (sf <= low || sf > high)
65 return 0;
66 return sf->gprs[8];
67}
68
69extern void kernel_thread_starter(void); 44extern void kernel_thread_starter(void);
70 45
71/* 46/*
diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/gaccess.c
index 9da243d94cc3..3b297fa3aa67 100644
--- a/arch/s390/kvm/gaccess.c
+++ b/arch/s390/kvm/gaccess.c
@@ -977,11 +977,12 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
977 ptr = asce.origin * 4096; 977 ptr = asce.origin * 4096;
978 if (asce.r) { 978 if (asce.r) {
979 *fake = 1; 979 *fake = 1;
980 ptr = 0;
980 asce.dt = ASCE_TYPE_REGION1; 981 asce.dt = ASCE_TYPE_REGION1;
981 } 982 }
982 switch (asce.dt) { 983 switch (asce.dt) {
983 case ASCE_TYPE_REGION1: 984 case ASCE_TYPE_REGION1:
984 if (vaddr.rfx01 > asce.tl && !asce.r) 985 if (vaddr.rfx01 > asce.tl && !*fake)
985 return PGM_REGION_FIRST_TRANS; 986 return PGM_REGION_FIRST_TRANS;
986 break; 987 break;
987 case ASCE_TYPE_REGION2: 988 case ASCE_TYPE_REGION2:
@@ -1009,8 +1010,7 @@ static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
1009 union region1_table_entry rfte; 1010 union region1_table_entry rfte;
1010 1011
1011 if (*fake) { 1012 if (*fake) {
1012 /* offset in 16EB guest memory block */ 1013 ptr += (unsigned long) vaddr.rfx << 53;
1013 ptr = ptr + ((unsigned long) vaddr.rsx << 53UL);
1014 rfte.val = ptr; 1014 rfte.val = ptr;
1015 goto shadow_r2t; 1015 goto shadow_r2t;
1016 } 1016 }
@@ -1036,8 +1036,7 @@ shadow_r2t:
1036 union region2_table_entry rste; 1036 union region2_table_entry rste;
1037 1037
1038 if (*fake) { 1038 if (*fake) {
1039 /* offset in 8PB guest memory block */ 1039 ptr += (unsigned long) vaddr.rsx << 42;
1040 ptr = ptr + ((unsigned long) vaddr.rtx << 42UL);
1041 rste.val = ptr; 1040 rste.val = ptr;
1042 goto shadow_r3t; 1041 goto shadow_r3t;
1043 } 1042 }
@@ -1064,8 +1063,7 @@ shadow_r3t:
1064 union region3_table_entry rtte; 1063 union region3_table_entry rtte;
1065 1064
1066 if (*fake) { 1065 if (*fake) {
1067 /* offset in 4TB guest memory block */ 1066 ptr += (unsigned long) vaddr.rtx << 31;
1068 ptr = ptr + ((unsigned long) vaddr.sx << 31UL);
1069 rtte.val = ptr; 1067 rtte.val = ptr;
1070 goto shadow_sgt; 1068 goto shadow_sgt;
1071 } 1069 }
@@ -1101,8 +1099,7 @@ shadow_sgt:
1101 union segment_table_entry ste; 1099 union segment_table_entry ste;
1102 1100
1103 if (*fake) { 1101 if (*fake) {
1104 /* offset in 2G guest memory block */ 1102 ptr += (unsigned long) vaddr.sx << 20;
1105 ptr = ptr + ((unsigned long) vaddr.sx << 20UL);
1106 ste.val = ptr; 1103 ste.val = ptr;
1107 goto shadow_pgt; 1104 goto shadow_pgt;
1108 } 1105 }
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index caf15c8a8948..2d120fef7d90 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -2160,7 +2160,7 @@ static int modify_ais_mode(struct kvm *kvm, struct kvm_device_attr *attr)
2160 struct kvm_s390_ais_req req; 2160 struct kvm_s390_ais_req req;
2161 int ret = 0; 2161 int ret = 0;
2162 2162
2163 if (!fi->ais_enabled) 2163 if (!test_kvm_facility(kvm, 72))
2164 return -ENOTSUPP; 2164 return -ENOTSUPP;
2165 2165
2166 if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req))) 2166 if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req)))
@@ -2204,7 +2204,7 @@ static int kvm_s390_inject_airq(struct kvm *kvm,
2204 }; 2204 };
2205 int ret = 0; 2205 int ret = 0;
2206 2206
2207 if (!fi->ais_enabled || !adapter->suppressible) 2207 if (!test_kvm_facility(kvm, 72) || !adapter->suppressible)
2208 return kvm_s390_inject_vm(kvm, &s390int); 2208 return kvm_s390_inject_vm(kvm, &s390int);
2209 2209
2210 mutex_lock(&fi->ais_lock); 2210 mutex_lock(&fi->ais_lock);
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 689ac48361c6..f28e2e776931 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -558,7 +558,6 @@ static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
558 } else { 558 } else {
559 set_kvm_facility(kvm->arch.model.fac_mask, 72); 559 set_kvm_facility(kvm->arch.model.fac_mask, 72);
560 set_kvm_facility(kvm->arch.model.fac_list, 72); 560 set_kvm_facility(kvm->arch.model.fac_list, 72);
561 kvm->arch.float_int.ais_enabled = 1;
562 r = 0; 561 r = 0;
563 } 562 }
564 mutex_unlock(&kvm->lock); 563 mutex_unlock(&kvm->lock);
@@ -1533,7 +1532,6 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
1533 mutex_init(&kvm->arch.float_int.ais_lock); 1532 mutex_init(&kvm->arch.float_int.ais_lock);
1534 kvm->arch.float_int.simm = 0; 1533 kvm->arch.float_int.simm = 0;
1535 kvm->arch.float_int.nimm = 0; 1534 kvm->arch.float_int.nimm = 0;
1536 kvm->arch.float_int.ais_enabled = 0;
1537 spin_lock_init(&kvm->arch.float_int.lock); 1535 spin_lock_init(&kvm->arch.float_int.lock);
1538 for (i = 0; i < FIRQ_LIST_COUNT; i++) 1536 for (i = 0; i < FIRQ_LIST_COUNT; i++)
1539 INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]); 1537 INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]);
diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c
index b017daed6887..b854b1da281a 100644
--- a/arch/s390/mm/mmap.c
+++ b/arch/s390/mm/mmap.c
@@ -101,7 +101,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
101 addr = PAGE_ALIGN(addr); 101 addr = PAGE_ALIGN(addr);
102 vma = find_vma(mm, addr); 102 vma = find_vma(mm, addr);
103 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr && 103 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
104 (!vma || addr + len <= vma->vm_start)) 104 (!vma || addr + len <= vm_start_gap(vma)))
105 goto check_asce_limit; 105 goto check_asce_limit;
106 } 106 }
107 107
@@ -151,7 +151,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
151 addr = PAGE_ALIGN(addr); 151 addr = PAGE_ALIGN(addr);
152 vma = find_vma(mm, addr); 152 vma = find_vma(mm, addr);
153 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr && 153 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
154 (!vma || addr + len <= vma->vm_start)) 154 (!vma || addr + len <= vm_start_gap(vma)))
155 goto check_asce_limit; 155 goto check_asce_limit;
156 } 156 }
157 157
diff --git a/arch/score/include/asm/processor.h b/arch/score/include/asm/processor.h
index d9a922d8711b..299274581968 100644
--- a/arch/score/include/asm/processor.h
+++ b/arch/score/include/asm/processor.h
@@ -13,7 +13,6 @@ struct task_struct;
13 */ 13 */
14extern void (*cpu_wait)(void); 14extern void (*cpu_wait)(void);
15 15
16extern unsigned long thread_saved_pc(struct task_struct *tsk);
17extern void start_thread(struct pt_regs *regs, 16extern void start_thread(struct pt_regs *regs,
18 unsigned long pc, unsigned long sp); 17 unsigned long pc, unsigned long sp);
19extern unsigned long get_wchan(struct task_struct *p); 18extern unsigned long get_wchan(struct task_struct *p);
diff --git a/arch/score/kernel/process.c b/arch/score/kernel/process.c
index eb64d7a677cb..6e20241a1ed4 100644
--- a/arch/score/kernel/process.c
+++ b/arch/score/kernel/process.c
@@ -101,11 +101,6 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *r)
101 return 1; 101 return 1;
102} 102}
103 103
104unsigned long thread_saved_pc(struct task_struct *tsk)
105{
106 return task_pt_regs(tsk)->cp0_epc;
107}
108
109unsigned long get_wchan(struct task_struct *task) 104unsigned long get_wchan(struct task_struct *task)
110{ 105{
111 if (!task || task == current || task->state == TASK_RUNNING) 106 if (!task || task == current || task->state == TASK_RUNNING)
diff --git a/arch/sh/mm/mmap.c b/arch/sh/mm/mmap.c
index 08e7af0be4a7..6a1a1297baae 100644
--- a/arch/sh/mm/mmap.c
+++ b/arch/sh/mm/mmap.c
@@ -64,7 +64,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
64 64
65 vma = find_vma(mm, addr); 65 vma = find_vma(mm, addr);
66 if (TASK_SIZE - len >= addr && 66 if (TASK_SIZE - len >= addr &&
67 (!vma || addr + len <= vma->vm_start)) 67 (!vma || addr + len <= vm_start_gap(vma)))
68 return addr; 68 return addr;
69 } 69 }
70 70
@@ -114,7 +114,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
114 114
115 vma = find_vma(mm, addr); 115 vma = find_vma(mm, addr);
116 if (TASK_SIZE - len >= addr && 116 if (TASK_SIZE - len >= addr &&
117 (!vma || addr + len <= vma->vm_start)) 117 (!vma || addr + len <= vm_start_gap(vma)))
118 return addr; 118 return addr;
119 } 119 }
120 120
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index 58243b0d21c0..5639c9fe5b55 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -192,9 +192,9 @@ config NR_CPUS
192 int "Maximum number of CPUs" 192 int "Maximum number of CPUs"
193 depends on SMP 193 depends on SMP
194 range 2 32 if SPARC32 194 range 2 32 if SPARC32
195 range 2 1024 if SPARC64 195 range 2 4096 if SPARC64
196 default 32 if SPARC32 196 default 32 if SPARC32
197 default 64 if SPARC64 197 default 4096 if SPARC64
198 198
199source kernel/Kconfig.hz 199source kernel/Kconfig.hz
200 200
@@ -295,9 +295,13 @@ config NUMA
295 depends on SPARC64 && SMP 295 depends on SPARC64 && SMP
296 296
297config NODES_SHIFT 297config NODES_SHIFT
298 int 298 int "Maximum NUMA Nodes (as a power of 2)"
299 default "4" 299 range 4 5 if SPARC64
300 default "5"
300 depends on NEED_MULTIPLE_NODES 301 depends on NEED_MULTIPLE_NODES
302 help
303 Specify the maximum number of NUMA Nodes available on the target
304 system. Increases memory reserved to accommodate various tables.
301 305
302# Some NUMA nodes have memory ranges that span 306# Some NUMA nodes have memory ranges that span
303# other nodes. Even though a pfn is valid and 307# other nodes. Even though a pfn is valid and
@@ -573,9 +577,6 @@ config SYSVIPC_COMPAT
573 depends on COMPAT && SYSVIPC 577 depends on COMPAT && SYSVIPC
574 default y 578 default y
575 579
576config KEYS_COMPAT
577 def_bool y if COMPAT && KEYS
578
579endmenu 580endmenu
580 581
581source "net/Kconfig" 582source "net/Kconfig"
diff --git a/arch/sparc/include/asm/mmu_64.h b/arch/sparc/include/asm/mmu_64.h
index f7de0dbc38af..83b36a5371ff 100644
--- a/arch/sparc/include/asm/mmu_64.h
+++ b/arch/sparc/include/asm/mmu_64.h
@@ -52,7 +52,7 @@
52#define CTX_NR_MASK TAG_CONTEXT_BITS 52#define CTX_NR_MASK TAG_CONTEXT_BITS
53#define CTX_HW_MASK (CTX_NR_MASK | CTX_PGSZ_MASK) 53#define CTX_HW_MASK (CTX_NR_MASK | CTX_PGSZ_MASK)
54 54
55#define CTX_FIRST_VERSION ((_AC(1,UL) << CTX_VERSION_SHIFT) + _AC(1,UL)) 55#define CTX_FIRST_VERSION BIT(CTX_VERSION_SHIFT)
56#define CTX_VALID(__ctx) \ 56#define CTX_VALID(__ctx) \
57 (!(((__ctx.sparc64_ctx_val) ^ tlb_context_cache) & CTX_VERSION_MASK)) 57 (!(((__ctx.sparc64_ctx_val) ^ tlb_context_cache) & CTX_VERSION_MASK))
58#define CTX_HWBITS(__ctx) ((__ctx.sparc64_ctx_val) & CTX_HW_MASK) 58#define CTX_HWBITS(__ctx) ((__ctx.sparc64_ctx_val) & CTX_HW_MASK)
diff --git a/arch/sparc/include/asm/mmu_context_64.h b/arch/sparc/include/asm/mmu_context_64.h
index 22fede6eba11..2cddcda4f85f 100644
--- a/arch/sparc/include/asm/mmu_context_64.h
+++ b/arch/sparc/include/asm/mmu_context_64.h
@@ -19,13 +19,8 @@ extern spinlock_t ctx_alloc_lock;
19extern unsigned long tlb_context_cache; 19extern unsigned long tlb_context_cache;
20extern unsigned long mmu_context_bmap[]; 20extern unsigned long mmu_context_bmap[];
21 21
22DECLARE_PER_CPU(struct mm_struct *, per_cpu_secondary_mm);
22void get_new_mmu_context(struct mm_struct *mm); 23void get_new_mmu_context(struct mm_struct *mm);
23#ifdef CONFIG_SMP
24void smp_new_mmu_context_version(void);
25#else
26#define smp_new_mmu_context_version() do { } while (0)
27#endif
28
29int init_new_context(struct task_struct *tsk, struct mm_struct *mm); 24int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
30void destroy_context(struct mm_struct *mm); 25void destroy_context(struct mm_struct *mm);
31 26
@@ -76,8 +71,9 @@ void __flush_tlb_mm(unsigned long, unsigned long);
76static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, struct task_struct *tsk) 71static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, struct task_struct *tsk)
77{ 72{
78 unsigned long ctx_valid, flags; 73 unsigned long ctx_valid, flags;
79 int cpu; 74 int cpu = smp_processor_id();
80 75
76 per_cpu(per_cpu_secondary_mm, cpu) = mm;
81 if (unlikely(mm == &init_mm)) 77 if (unlikely(mm == &init_mm))
82 return; 78 return;
83 79
@@ -123,7 +119,6 @@ static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, str
123 * for the first time, we must flush that context out of the 119 * for the first time, we must flush that context out of the
124 * local TLB. 120 * local TLB.
125 */ 121 */
126 cpu = smp_processor_id();
127 if (!ctx_valid || !cpumask_test_cpu(cpu, mm_cpumask(mm))) { 122 if (!ctx_valid || !cpumask_test_cpu(cpu, mm_cpumask(mm))) {
128 cpumask_set_cpu(cpu, mm_cpumask(mm)); 123 cpumask_set_cpu(cpu, mm_cpumask(mm));
129 __flush_tlb_mm(CTX_HWBITS(mm->context), 124 __flush_tlb_mm(CTX_HWBITS(mm->context),
@@ -133,26 +128,7 @@ static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, str
133} 128}
134 129
135#define deactivate_mm(tsk,mm) do { } while (0) 130#define deactivate_mm(tsk,mm) do { } while (0)
136 131#define activate_mm(active_mm, mm) switch_mm(active_mm, mm, NULL)
137/* Activate a new MM instance for the current task. */
138static inline void activate_mm(struct mm_struct *active_mm, struct mm_struct *mm)
139{
140 unsigned long flags;
141 int cpu;
142
143 spin_lock_irqsave(&mm->context.lock, flags);
144 if (!CTX_VALID(mm->context))
145 get_new_mmu_context(mm);
146 cpu = smp_processor_id();
147 if (!cpumask_test_cpu(cpu, mm_cpumask(mm)))
148 cpumask_set_cpu(cpu, mm_cpumask(mm));
149
150 load_secondary_context(mm);
151 __flush_tlb_mm(CTX_HWBITS(mm->context), SECONDARY_CONTEXT);
152 tsb_context_switch(mm);
153 spin_unlock_irqrestore(&mm->context.lock, flags);
154}
155
156#endif /* !(__ASSEMBLY__) */ 132#endif /* !(__ASSEMBLY__) */
157 133
158#endif /* !(__SPARC64_MMU_CONTEXT_H) */ 134#endif /* !(__SPARC64_MMU_CONTEXT_H) */
diff --git a/arch/sparc/include/asm/pil.h b/arch/sparc/include/asm/pil.h
index 266937030546..522b43db2ed3 100644
--- a/arch/sparc/include/asm/pil.h
+++ b/arch/sparc/include/asm/pil.h
@@ -20,7 +20,6 @@
20#define PIL_SMP_CALL_FUNC 1 20#define PIL_SMP_CALL_FUNC 1
21#define PIL_SMP_RECEIVE_SIGNAL 2 21#define PIL_SMP_RECEIVE_SIGNAL 2
22#define PIL_SMP_CAPTURE 3 22#define PIL_SMP_CAPTURE 3
23#define PIL_SMP_CTX_NEW_VERSION 4
24#define PIL_DEVICE_IRQ 5 23#define PIL_DEVICE_IRQ 5
25#define PIL_SMP_CALL_FUNC_SNGL 6 24#define PIL_SMP_CALL_FUNC_SNGL 6
26#define PIL_DEFERRED_PCR_WORK 7 25#define PIL_DEFERRED_PCR_WORK 7
diff --git a/arch/sparc/include/asm/processor_32.h b/arch/sparc/include/asm/processor_32.h
index dd27159819eb..b395e5620c0b 100644
--- a/arch/sparc/include/asm/processor_32.h
+++ b/arch/sparc/include/asm/processor_32.h
@@ -67,9 +67,6 @@ struct thread_struct {
67 .current_ds = KERNEL_DS, \ 67 .current_ds = KERNEL_DS, \
68} 68}
69 69
70/* Return saved PC of a blocked thread. */
71unsigned long thread_saved_pc(struct task_struct *t);
72
73/* Do necessary setup to start up a newly executed thread. */ 70/* Do necessary setup to start up a newly executed thread. */
74static inline void start_thread(struct pt_regs * regs, unsigned long pc, 71static inline void start_thread(struct pt_regs * regs, unsigned long pc,
75 unsigned long sp) 72 unsigned long sp)
diff --git a/arch/sparc/include/asm/processor_64.h b/arch/sparc/include/asm/processor_64.h
index b58ee9018433..f04dc5a43062 100644
--- a/arch/sparc/include/asm/processor_64.h
+++ b/arch/sparc/include/asm/processor_64.h
@@ -89,9 +89,7 @@ struct thread_struct {
89#include <linux/types.h> 89#include <linux/types.h>
90#include <asm/fpumacro.h> 90#include <asm/fpumacro.h>
91 91
92/* Return saved PC of a blocked thread. */
93struct task_struct; 92struct task_struct;
94unsigned long thread_saved_pc(struct task_struct *);
95 93
96/* On Uniprocessor, even in RMO processes see TSO semantics */ 94/* On Uniprocessor, even in RMO processes see TSO semantics */
97#ifdef CONFIG_SMP 95#ifdef CONFIG_SMP
diff --git a/arch/sparc/include/asm/vio.h b/arch/sparc/include/asm/vio.h
index 8174f6cdbbbb..9dca7a892978 100644
--- a/arch/sparc/include/asm/vio.h
+++ b/arch/sparc/include/asm/vio.h
@@ -327,6 +327,7 @@ struct vio_dev {
327 int compat_len; 327 int compat_len;
328 328
329 u64 dev_no; 329 u64 dev_no;
330 u64 id;
330 331
331 unsigned long channel_id; 332 unsigned long channel_id;
332 333
diff --git a/arch/sparc/kernel/ds.c b/arch/sparc/kernel/ds.c
index b542cc7c8d94..f87265afb175 100644
--- a/arch/sparc/kernel/ds.c
+++ b/arch/sparc/kernel/ds.c
@@ -909,7 +909,7 @@ static int register_services(struct ds_info *dp)
909 pbuf.req.handle = cp->handle; 909 pbuf.req.handle = cp->handle;
910 pbuf.req.major = 1; 910 pbuf.req.major = 1;
911 pbuf.req.minor = 0; 911 pbuf.req.minor = 0;
912 strcpy(pbuf.req.svc_id, cp->service_id); 912 strcpy(pbuf.id_buf, cp->service_id);
913 913
914 err = __ds_send(lp, &pbuf, msg_len); 914 err = __ds_send(lp, &pbuf, msg_len);
915 if (err > 0) 915 if (err > 0)
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index 4d0248aa0928..99dd133a029f 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -1034,17 +1034,26 @@ static void __init init_cpu_send_mondo_info(struct trap_per_cpu *tb)
1034{ 1034{
1035#ifdef CONFIG_SMP 1035#ifdef CONFIG_SMP
1036 unsigned long page; 1036 unsigned long page;
1037 void *mondo, *p;
1037 1038
1038 BUILD_BUG_ON((NR_CPUS * sizeof(u16)) > (PAGE_SIZE - 64)); 1039 BUILD_BUG_ON((NR_CPUS * sizeof(u16)) > PAGE_SIZE);
1040
1041 /* Make sure mondo block is 64byte aligned */
1042 p = kzalloc(127, GFP_KERNEL);
1043 if (!p) {
1044 prom_printf("SUN4V: Error, cannot allocate mondo block.\n");
1045 prom_halt();
1046 }
1047 mondo = (void *)(((unsigned long)p + 63) & ~0x3f);
1048 tb->cpu_mondo_block_pa = __pa(mondo);
1039 1049
1040 page = get_zeroed_page(GFP_KERNEL); 1050 page = get_zeroed_page(GFP_KERNEL);
1041 if (!page) { 1051 if (!page) {
1042 prom_printf("SUN4V: Error, cannot allocate cpu mondo page.\n"); 1052 prom_printf("SUN4V: Error, cannot allocate cpu list page.\n");
1043 prom_halt(); 1053 prom_halt();
1044 } 1054 }
1045 1055
1046 tb->cpu_mondo_block_pa = __pa(page); 1056 tb->cpu_list_pa = __pa(page);
1047 tb->cpu_list_pa = __pa(page + 64);
1048#endif 1057#endif
1049} 1058}
1050 1059
diff --git a/arch/sparc/kernel/kernel.h b/arch/sparc/kernel/kernel.h
index c9804551262c..6ae1e77be0bf 100644
--- a/arch/sparc/kernel/kernel.h
+++ b/arch/sparc/kernel/kernel.h
@@ -37,7 +37,6 @@ void handle_stdfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr
37/* smp_64.c */ 37/* smp_64.c */
38void __irq_entry smp_call_function_client(int irq, struct pt_regs *regs); 38void __irq_entry smp_call_function_client(int irq, struct pt_regs *regs);
39void __irq_entry smp_call_function_single_client(int irq, struct pt_regs *regs); 39void __irq_entry smp_call_function_single_client(int irq, struct pt_regs *regs);
40void __irq_entry smp_new_mmu_context_version_client(int irq, struct pt_regs *regs);
41void __irq_entry smp_penguin_jailcell(int irq, struct pt_regs *regs); 40void __irq_entry smp_penguin_jailcell(int irq, struct pt_regs *regs);
42void __irq_entry smp_receive_signal_client(int irq, struct pt_regs *regs); 41void __irq_entry smp_receive_signal_client(int irq, struct pt_regs *regs);
43 42
diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c
index b6dac8e980f0..9245f93398c7 100644
--- a/arch/sparc/kernel/process_32.c
+++ b/arch/sparc/kernel/process_32.c
@@ -177,14 +177,6 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
177} 177}
178 178
179/* 179/*
180 * Note: sparc64 has a pretty intricated thread_saved_pc, check it out.
181 */
182unsigned long thread_saved_pc(struct task_struct *tsk)
183{
184 return task_thread_info(tsk)->kpc;
185}
186
187/*
188 * Free current thread data structures etc.. 180 * Free current thread data structures etc..
189 */ 181 */
190void exit_thread(struct task_struct *tsk) 182void exit_thread(struct task_struct *tsk)
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
index 1badc493e62e..b96104da5bd6 100644
--- a/arch/sparc/kernel/process_64.c
+++ b/arch/sparc/kernel/process_64.c
@@ -400,25 +400,6 @@ core_initcall(sparc_sysrq_init);
400 400
401#endif 401#endif
402 402
403unsigned long thread_saved_pc(struct task_struct *tsk)
404{
405 struct thread_info *ti = task_thread_info(tsk);
406 unsigned long ret = 0xdeadbeefUL;
407
408 if (ti && ti->ksp) {
409 unsigned long *sp;
410 sp = (unsigned long *)(ti->ksp + STACK_BIAS);
411 if (((unsigned long)sp & (sizeof(long) - 1)) == 0UL &&
412 sp[14]) {
413 unsigned long *fp;
414 fp = (unsigned long *)(sp[14] + STACK_BIAS);
415 if (((unsigned long)fp & (sizeof(long) - 1)) == 0UL)
416 ret = fp[15];
417 }
418 }
419 return ret;
420}
421
422/* Free current thread data structures etc.. */ 403/* Free current thread data structures etc.. */
423void exit_thread(struct task_struct *tsk) 404void exit_thread(struct task_struct *tsk)
424{ 405{
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
index b3bc0ac757cc..fdf31040a7dc 100644
--- a/arch/sparc/kernel/smp_64.c
+++ b/arch/sparc/kernel/smp_64.c
@@ -964,37 +964,6 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
964 preempt_enable(); 964 preempt_enable();
965} 965}
966 966
967void __irq_entry smp_new_mmu_context_version_client(int irq, struct pt_regs *regs)
968{
969 struct mm_struct *mm;
970 unsigned long flags;
971
972 clear_softint(1 << irq);
973
974 /* See if we need to allocate a new TLB context because
975 * the version of the one we are using is now out of date.
976 */
977 mm = current->active_mm;
978 if (unlikely(!mm || (mm == &init_mm)))
979 return;
980
981 spin_lock_irqsave(&mm->context.lock, flags);
982
983 if (unlikely(!CTX_VALID(mm->context)))
984 get_new_mmu_context(mm);
985
986 spin_unlock_irqrestore(&mm->context.lock, flags);
987
988 load_secondary_context(mm);
989 __flush_tlb_mm(CTX_HWBITS(mm->context),
990 SECONDARY_CONTEXT);
991}
992
993void smp_new_mmu_context_version(void)
994{
995 smp_cross_call(&xcall_new_mmu_context_version, 0, 0, 0);
996}
997
998#ifdef CONFIG_KGDB 967#ifdef CONFIG_KGDB
999void kgdb_roundup_cpus(unsigned long flags) 968void kgdb_roundup_cpus(unsigned long flags)
1000{ 969{
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
index ef4520efc813..043544d0cda3 100644
--- a/arch/sparc/kernel/sys_sparc_64.c
+++ b/arch/sparc/kernel/sys_sparc_64.c
@@ -120,7 +120,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi
120 120
121 vma = find_vma(mm, addr); 121 vma = find_vma(mm, addr);
122 if (task_size - len >= addr && 122 if (task_size - len >= addr &&
123 (!vma || addr + len <= vma->vm_start)) 123 (!vma || addr + len <= vm_start_gap(vma)))
124 return addr; 124 return addr;
125 } 125 }
126 126
@@ -183,7 +183,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
183 183
184 vma = find_vma(mm, addr); 184 vma = find_vma(mm, addr);
185 if (task_size - len >= addr && 185 if (task_size - len >= addr &&
186 (!vma || addr + len <= vma->vm_start)) 186 (!vma || addr + len <= vm_start_gap(vma)))
187 return addr; 187 return addr;
188 } 188 }
189 189
diff --git a/arch/sparc/kernel/tsb.S b/arch/sparc/kernel/tsb.S
index 10689cfd0ad4..07c0df924960 100644
--- a/arch/sparc/kernel/tsb.S
+++ b/arch/sparc/kernel/tsb.S
@@ -455,13 +455,16 @@ __tsb_context_switch:
455 .type copy_tsb,#function 455 .type copy_tsb,#function
456copy_tsb: /* %o0=old_tsb_base, %o1=old_tsb_size 456copy_tsb: /* %o0=old_tsb_base, %o1=old_tsb_size
457 * %o2=new_tsb_base, %o3=new_tsb_size 457 * %o2=new_tsb_base, %o3=new_tsb_size
458 * %o4=page_size_shift
458 */ 459 */
459 sethi %uhi(TSB_PASS_BITS), %g7 460 sethi %uhi(TSB_PASS_BITS), %g7
460 srlx %o3, 4, %o3 461 srlx %o3, 4, %o3
461 add %o0, %o1, %g1 /* end of old tsb */ 462 add %o0, %o1, %o1 /* end of old tsb */
462 sllx %g7, 32, %g7 463 sllx %g7, 32, %g7
463 sub %o3, 1, %o3 /* %o3 == new tsb hash mask */ 464 sub %o3, 1, %o3 /* %o3 == new tsb hash mask */
464 465
466 mov %o4, %g1 /* page_size_shift */
467
465661: prefetcha [%o0] ASI_N, #one_read 468661: prefetcha [%o0] ASI_N, #one_read
466 .section .tsb_phys_patch, "ax" 469 .section .tsb_phys_patch, "ax"
467 .word 661b 470 .word 661b
@@ -486,9 +489,9 @@ copy_tsb: /* %o0=old_tsb_base, %o1=old_tsb_size
486 /* This can definitely be computed faster... */ 489 /* This can definitely be computed faster... */
487 srlx %o0, 4, %o5 /* Build index */ 490 srlx %o0, 4, %o5 /* Build index */
488 and %o5, 511, %o5 /* Mask index */ 491 and %o5, 511, %o5 /* Mask index */
489 sllx %o5, PAGE_SHIFT, %o5 /* Put into vaddr position */ 492 sllx %o5, %g1, %o5 /* Put into vaddr position */
490 or %o4, %o5, %o4 /* Full VADDR. */ 493 or %o4, %o5, %o4 /* Full VADDR. */
491 srlx %o4, PAGE_SHIFT, %o4 /* Shift down to create index */ 494 srlx %o4, %g1, %o4 /* Shift down to create index */
492 and %o4, %o3, %o4 /* Mask with new_tsb_nents-1 */ 495 and %o4, %o3, %o4 /* Mask with new_tsb_nents-1 */
493 sllx %o4, 4, %o4 /* Shift back up into tsb ent offset */ 496 sllx %o4, 4, %o4 /* Shift back up into tsb ent offset */
494 TSB_STORE(%o2 + %o4, %g2) /* Store TAG */ 497 TSB_STORE(%o2 + %o4, %g2) /* Store TAG */
@@ -496,7 +499,7 @@ copy_tsb: /* %o0=old_tsb_base, %o1=old_tsb_size
496 TSB_STORE(%o2 + %o4, %g3) /* Store TTE */ 499 TSB_STORE(%o2 + %o4, %g3) /* Store TTE */
497 500
49880: add %o0, 16, %o0 50180: add %o0, 16, %o0
499 cmp %o0, %g1 502 cmp %o0, %o1
500 bne,pt %xcc, 90b 503 bne,pt %xcc, 90b
501 nop 504 nop
502 505
diff --git a/arch/sparc/kernel/ttable_64.S b/arch/sparc/kernel/ttable_64.S
index 7bd8f6556352..efe93ab4a9c0 100644
--- a/arch/sparc/kernel/ttable_64.S
+++ b/arch/sparc/kernel/ttable_64.S
@@ -50,7 +50,7 @@ tl0_resv03e: BTRAP(0x3e) BTRAP(0x3f) BTRAP(0x40)
50tl0_irq1: TRAP_IRQ(smp_call_function_client, 1) 50tl0_irq1: TRAP_IRQ(smp_call_function_client, 1)
51tl0_irq2: TRAP_IRQ(smp_receive_signal_client, 2) 51tl0_irq2: TRAP_IRQ(smp_receive_signal_client, 2)
52tl0_irq3: TRAP_IRQ(smp_penguin_jailcell, 3) 52tl0_irq3: TRAP_IRQ(smp_penguin_jailcell, 3)
53tl0_irq4: TRAP_IRQ(smp_new_mmu_context_version_client, 4) 53tl0_irq4: BTRAP(0x44)
54#else 54#else
55tl0_irq1: BTRAP(0x41) 55tl0_irq1: BTRAP(0x41)
56tl0_irq2: BTRAP(0x42) 56tl0_irq2: BTRAP(0x42)
diff --git a/arch/sparc/kernel/vio.c b/arch/sparc/kernel/vio.c
index f6bb857254fc..075d38980dee 100644
--- a/arch/sparc/kernel/vio.c
+++ b/arch/sparc/kernel/vio.c
@@ -302,13 +302,16 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
302 if (!id) { 302 if (!id) {
303 dev_set_name(&vdev->dev, "%s", bus_id_name); 303 dev_set_name(&vdev->dev, "%s", bus_id_name);
304 vdev->dev_no = ~(u64)0; 304 vdev->dev_no = ~(u64)0;
305 vdev->id = ~(u64)0;
305 } else if (!cfg_handle) { 306 } else if (!cfg_handle) {
306 dev_set_name(&vdev->dev, "%s-%llu", bus_id_name, *id); 307 dev_set_name(&vdev->dev, "%s-%llu", bus_id_name, *id);
307 vdev->dev_no = *id; 308 vdev->dev_no = *id;
309 vdev->id = ~(u64)0;
308 } else { 310 } else {
309 dev_set_name(&vdev->dev, "%s-%llu-%llu", bus_id_name, 311 dev_set_name(&vdev->dev, "%s-%llu-%llu", bus_id_name,
310 *cfg_handle, *id); 312 *cfg_handle, *id);
311 vdev->dev_no = *cfg_handle; 313 vdev->dev_no = *cfg_handle;
314 vdev->id = *id;
312 } 315 }
313 316
314 vdev->dev.parent = parent; 317 vdev->dev.parent = parent;
@@ -351,27 +354,84 @@ static void vio_add(struct mdesc_handle *hp, u64 node)
351 (void) vio_create_one(hp, node, &root_vdev->dev); 354 (void) vio_create_one(hp, node, &root_vdev->dev);
352} 355}
353 356
357struct vio_md_node_query {
358 const char *type;
359 u64 dev_no;
360 u64 id;
361};
362
354static int vio_md_node_match(struct device *dev, void *arg) 363static int vio_md_node_match(struct device *dev, void *arg)
355{ 364{
365 struct vio_md_node_query *query = (struct vio_md_node_query *) arg;
356 struct vio_dev *vdev = to_vio_dev(dev); 366 struct vio_dev *vdev = to_vio_dev(dev);
357 367
358 if (vdev->mp == (u64) arg) 368 if (vdev->dev_no != query->dev_no)
359 return 1; 369 return 0;
370 if (vdev->id != query->id)
371 return 0;
372 if (strcmp(vdev->type, query->type))
373 return 0;
360 374
361 return 0; 375 return 1;
362} 376}
363 377
364static void vio_remove(struct mdesc_handle *hp, u64 node) 378static void vio_remove(struct mdesc_handle *hp, u64 node)
365{ 379{
380 const char *type;
381 const u64 *id, *cfg_handle;
382 u64 a;
383 struct vio_md_node_query query;
366 struct device *dev; 384 struct device *dev;
367 385
368 dev = device_find_child(&root_vdev->dev, (void *) node, 386 type = mdesc_get_property(hp, node, "device-type", NULL);
387 if (!type) {
388 type = mdesc_get_property(hp, node, "name", NULL);
389 if (!type)
390 type = mdesc_node_name(hp, node);
391 }
392
393 query.type = type;
394
395 id = mdesc_get_property(hp, node, "id", NULL);
396 cfg_handle = NULL;
397 mdesc_for_each_arc(a, hp, node, MDESC_ARC_TYPE_BACK) {
398 u64 target;
399
400 target = mdesc_arc_target(hp, a);
401 cfg_handle = mdesc_get_property(hp, target,
402 "cfg-handle", NULL);
403 if (cfg_handle)
404 break;
405 }
406
407 if (!id) {
408 query.dev_no = ~(u64)0;
409 query.id = ~(u64)0;
410 } else if (!cfg_handle) {
411 query.dev_no = *id;
412 query.id = ~(u64)0;
413 } else {
414 query.dev_no = *cfg_handle;
415 query.id = *id;
416 }
417
418 dev = device_find_child(&root_vdev->dev, &query,
369 vio_md_node_match); 419 vio_md_node_match);
370 if (dev) { 420 if (dev) {
371 printk(KERN_INFO "VIO: Removing device %s\n", dev_name(dev)); 421 printk(KERN_INFO "VIO: Removing device %s\n", dev_name(dev));
372 422
373 device_unregister(dev); 423 device_unregister(dev);
374 put_device(dev); 424 put_device(dev);
425 } else {
426 if (!id)
427 printk(KERN_ERR "VIO: Removed unknown %s node.\n",
428 type);
429 else if (!cfg_handle)
430 printk(KERN_ERR "VIO: Removed unknown %s node %llu.\n",
431 type, *id);
432 else
433 printk(KERN_ERR "VIO: Removed unknown %s node %llu-%llu.\n",
434 type, *cfg_handle, *id);
375 } 435 }
376} 436}
377 437
diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile
index 69912d2f8b54..07c03e72d812 100644
--- a/arch/sparc/lib/Makefile
+++ b/arch/sparc/lib/Makefile
@@ -15,6 +15,7 @@ lib-$(CONFIG_SPARC32) += copy_user.o locks.o
15lib-$(CONFIG_SPARC64) += atomic_64.o 15lib-$(CONFIG_SPARC64) += atomic_64.o
16lib-$(CONFIG_SPARC32) += lshrdi3.o ashldi3.o 16lib-$(CONFIG_SPARC32) += lshrdi3.o ashldi3.o
17lib-$(CONFIG_SPARC32) += muldi3.o bitext.o cmpdi2.o 17lib-$(CONFIG_SPARC32) += muldi3.o bitext.o cmpdi2.o
18lib-$(CONFIG_SPARC64) += multi3.o
18 19
19lib-$(CONFIG_SPARC64) += copy_page.o clear_page.o bzero.o 20lib-$(CONFIG_SPARC64) += copy_page.o clear_page.o bzero.o
20lib-$(CONFIG_SPARC64) += csum_copy.o csum_copy_from_user.o csum_copy_to_user.o 21lib-$(CONFIG_SPARC64) += csum_copy.o csum_copy_from_user.o csum_copy_to_user.o
diff --git a/arch/sparc/lib/multi3.S b/arch/sparc/lib/multi3.S
new file mode 100644
index 000000000000..d6b6c97fe3c7
--- /dev/null
+++ b/arch/sparc/lib/multi3.S
@@ -0,0 +1,35 @@
1#include <linux/linkage.h>
2#include <asm/export.h>
3
4 .text
5 .align 4
6ENTRY(__multi3) /* %o0 = u, %o1 = v */
7 mov %o1, %g1
8 srl %o3, 0, %g4
9 mulx %g4, %g1, %o1
10 srlx %g1, 0x20, %g3
11 mulx %g3, %g4, %g5
12 sllx %g5, 0x20, %o5
13 srl %g1, 0, %g4
14 sub %o1, %o5, %o5
15 srlx %o5, 0x20, %o5
16 addcc %g5, %o5, %g5
17 srlx %o3, 0x20, %o5
18 mulx %g4, %o5, %g4
19 mulx %g3, %o5, %o5
20 sethi %hi(0x80000000), %g3
21 addcc %g5, %g4, %g5
22 srlx %g5, 0x20, %g5
23 add %g3, %g3, %g3
24 movcc %xcc, %g0, %g3
25 addcc %o5, %g5, %o5
26 sllx %g4, 0x20, %g4
27 add %o1, %g4, %o1
28 add %o5, %g3, %g2
29 mulx %g1, %o2, %g1
30 add %g1, %g2, %g1
31 mulx %o0, %o3, %o0
32 retl
33 add %g1, %o0, %o0
34ENDPROC(__multi3)
35EXPORT_SYMBOL(__multi3)
diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c
index 7c29d38e6b99..88855e383b34 100644
--- a/arch/sparc/mm/hugetlbpage.c
+++ b/arch/sparc/mm/hugetlbpage.c
@@ -120,7 +120,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
120 addr = ALIGN(addr, huge_page_size(h)); 120 addr = ALIGN(addr, huge_page_size(h));
121 vma = find_vma(mm, addr); 121 vma = find_vma(mm, addr);
122 if (task_size - len >= addr && 122 if (task_size - len >= addr &&
123 (!vma || addr + len <= vma->vm_start)) 123 (!vma || addr + len <= vm_start_gap(vma)))
124 return addr; 124 return addr;
125 } 125 }
126 if (mm->get_unmapped_area == arch_get_unmapped_area) 126 if (mm->get_unmapped_area == arch_get_unmapped_area)
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 0cda653ae007..3c40ebd50f92 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -358,7 +358,8 @@ static int __init setup_hugepagesz(char *string)
358 } 358 }
359 359
360 if ((hv_pgsz_mask & cpu_pgsz_mask) == 0U) { 360 if ((hv_pgsz_mask & cpu_pgsz_mask) == 0U) {
361 pr_warn("hugepagesz=%llu not supported by MMU.\n", 361 hugetlb_bad_size();
362 pr_err("hugepagesz=%llu not supported by MMU.\n",
362 hugepage_size); 363 hugepage_size);
363 goto out; 364 goto out;
364 } 365 }
@@ -706,10 +707,58 @@ EXPORT_SYMBOL(__flush_dcache_range);
706 707
707/* get_new_mmu_context() uses "cache + 1". */ 708/* get_new_mmu_context() uses "cache + 1". */
708DEFINE_SPINLOCK(ctx_alloc_lock); 709DEFINE_SPINLOCK(ctx_alloc_lock);
709unsigned long tlb_context_cache = CTX_FIRST_VERSION - 1; 710unsigned long tlb_context_cache = CTX_FIRST_VERSION;
710#define MAX_CTX_NR (1UL << CTX_NR_BITS) 711#define MAX_CTX_NR (1UL << CTX_NR_BITS)
711#define CTX_BMAP_SLOTS BITS_TO_LONGS(MAX_CTX_NR) 712#define CTX_BMAP_SLOTS BITS_TO_LONGS(MAX_CTX_NR)
712DECLARE_BITMAP(mmu_context_bmap, MAX_CTX_NR); 713DECLARE_BITMAP(mmu_context_bmap, MAX_CTX_NR);
714DEFINE_PER_CPU(struct mm_struct *, per_cpu_secondary_mm) = {0};
715
716static void mmu_context_wrap(void)
717{
718 unsigned long old_ver = tlb_context_cache & CTX_VERSION_MASK;
719 unsigned long new_ver, new_ctx, old_ctx;
720 struct mm_struct *mm;
721 int cpu;
722
723 bitmap_zero(mmu_context_bmap, 1 << CTX_NR_BITS);
724
725 /* Reserve kernel context */
726 set_bit(0, mmu_context_bmap);
727
728 new_ver = (tlb_context_cache & CTX_VERSION_MASK) + CTX_FIRST_VERSION;
729 if (unlikely(new_ver == 0))
730 new_ver = CTX_FIRST_VERSION;
731 tlb_context_cache = new_ver;
732
733 /*
734 * Make sure that any new mm that are added into per_cpu_secondary_mm,
735 * are going to go through get_new_mmu_context() path.
736 */
737 mb();
738
739 /*
740 * Updated versions to current on those CPUs that had valid secondary
741 * contexts
742 */
743 for_each_online_cpu(cpu) {
744 /*
745 * If a new mm is stored after we took this mm from the array,
746 * it will go into get_new_mmu_context() path, because we
747 * already bumped the version in tlb_context_cache.
748 */
749 mm = per_cpu(per_cpu_secondary_mm, cpu);
750
751 if (unlikely(!mm || mm == &init_mm))
752 continue;
753
754 old_ctx = mm->context.sparc64_ctx_val;
755 if (likely((old_ctx & CTX_VERSION_MASK) == old_ver)) {
756 new_ctx = (old_ctx & ~CTX_VERSION_MASK) | new_ver;
757 set_bit(new_ctx & CTX_NR_MASK, mmu_context_bmap);
758 mm->context.sparc64_ctx_val = new_ctx;
759 }
760 }
761}
713 762
714/* Caller does TLB context flushing on local CPU if necessary. 763/* Caller does TLB context flushing on local CPU if necessary.
715 * The caller also ensures that CTX_VALID(mm->context) is false. 764 * The caller also ensures that CTX_VALID(mm->context) is false.
@@ -725,48 +774,30 @@ void get_new_mmu_context(struct mm_struct *mm)
725{ 774{
726 unsigned long ctx, new_ctx; 775 unsigned long ctx, new_ctx;
727 unsigned long orig_pgsz_bits; 776 unsigned long orig_pgsz_bits;
728 int new_version;
729 777
730 spin_lock(&ctx_alloc_lock); 778 spin_lock(&ctx_alloc_lock);
779retry:
780 /* wrap might have happened, test again if our context became valid */
781 if (unlikely(CTX_VALID(mm->context)))
782 goto out;
731 orig_pgsz_bits = (mm->context.sparc64_ctx_val & CTX_PGSZ_MASK); 783 orig_pgsz_bits = (mm->context.sparc64_ctx_val & CTX_PGSZ_MASK);
732 ctx = (tlb_context_cache + 1) & CTX_NR_MASK; 784 ctx = (tlb_context_cache + 1) & CTX_NR_MASK;
733 new_ctx = find_next_zero_bit(mmu_context_bmap, 1 << CTX_NR_BITS, ctx); 785 new_ctx = find_next_zero_bit(mmu_context_bmap, 1 << CTX_NR_BITS, ctx);
734 new_version = 0;
735 if (new_ctx >= (1 << CTX_NR_BITS)) { 786 if (new_ctx >= (1 << CTX_NR_BITS)) {
736 new_ctx = find_next_zero_bit(mmu_context_bmap, ctx, 1); 787 new_ctx = find_next_zero_bit(mmu_context_bmap, ctx, 1);
737 if (new_ctx >= ctx) { 788 if (new_ctx >= ctx) {
738 int i; 789 mmu_context_wrap();
739 new_ctx = (tlb_context_cache & CTX_VERSION_MASK) + 790 goto retry;
740 CTX_FIRST_VERSION;
741 if (new_ctx == 1)
742 new_ctx = CTX_FIRST_VERSION;
743
744 /* Don't call memset, for 16 entries that's just
745 * plain silly...
746 */
747 mmu_context_bmap[0] = 3;
748 mmu_context_bmap[1] = 0;
749 mmu_context_bmap[2] = 0;
750 mmu_context_bmap[3] = 0;
751 for (i = 4; i < CTX_BMAP_SLOTS; i += 4) {
752 mmu_context_bmap[i + 0] = 0;
753 mmu_context_bmap[i + 1] = 0;
754 mmu_context_bmap[i + 2] = 0;
755 mmu_context_bmap[i + 3] = 0;
756 }
757 new_version = 1;
758 goto out;
759 } 791 }
760 } 792 }
793 if (mm->context.sparc64_ctx_val)
794 cpumask_clear(mm_cpumask(mm));
761 mmu_context_bmap[new_ctx>>6] |= (1UL << (new_ctx & 63)); 795 mmu_context_bmap[new_ctx>>6] |= (1UL << (new_ctx & 63));
762 new_ctx |= (tlb_context_cache & CTX_VERSION_MASK); 796 new_ctx |= (tlb_context_cache & CTX_VERSION_MASK);
763out:
764 tlb_context_cache = new_ctx; 797 tlb_context_cache = new_ctx;
765 mm->context.sparc64_ctx_val = new_ctx | orig_pgsz_bits; 798 mm->context.sparc64_ctx_val = new_ctx | orig_pgsz_bits;
799out:
766 spin_unlock(&ctx_alloc_lock); 800 spin_unlock(&ctx_alloc_lock);
767
768 if (unlikely(new_version))
769 smp_new_mmu_context_version();
770} 801}
771 802
772static int numa_enabled = 1; 803static int numa_enabled = 1;
diff --git a/arch/sparc/mm/tsb.c b/arch/sparc/mm/tsb.c
index bedf08b22a47..0d4b998c7d7b 100644
--- a/arch/sparc/mm/tsb.c
+++ b/arch/sparc/mm/tsb.c
@@ -496,7 +496,8 @@ retry_tsb_alloc:
496 extern void copy_tsb(unsigned long old_tsb_base, 496 extern void copy_tsb(unsigned long old_tsb_base,
497 unsigned long old_tsb_size, 497 unsigned long old_tsb_size,
498 unsigned long new_tsb_base, 498 unsigned long new_tsb_base,
499 unsigned long new_tsb_size); 499 unsigned long new_tsb_size,
500 unsigned long page_size_shift);
500 unsigned long old_tsb_base = (unsigned long) old_tsb; 501 unsigned long old_tsb_base = (unsigned long) old_tsb;
501 unsigned long new_tsb_base = (unsigned long) new_tsb; 502 unsigned long new_tsb_base = (unsigned long) new_tsb;
502 503
@@ -504,7 +505,9 @@ retry_tsb_alloc:
504 old_tsb_base = __pa(old_tsb_base); 505 old_tsb_base = __pa(old_tsb_base);
505 new_tsb_base = __pa(new_tsb_base); 506 new_tsb_base = __pa(new_tsb_base);
506 } 507 }
507 copy_tsb(old_tsb_base, old_size, new_tsb_base, new_size); 508 copy_tsb(old_tsb_base, old_size, new_tsb_base, new_size,
509 tsb_index == MM_TSB_BASE ?
510 PAGE_SHIFT : REAL_HPAGE_SHIFT);
508 } 511 }
509 512
510 mm->context.tsb_block[tsb_index].tsb = new_tsb; 513 mm->context.tsb_block[tsb_index].tsb = new_tsb;
diff --git a/arch/sparc/mm/ultra.S b/arch/sparc/mm/ultra.S
index 5d2fd6cd3189..fcf4d27a38fb 100644
--- a/arch/sparc/mm/ultra.S
+++ b/arch/sparc/mm/ultra.S
@@ -971,11 +971,6 @@ xcall_capture:
971 wr %g0, (1 << PIL_SMP_CAPTURE), %set_softint 971 wr %g0, (1 << PIL_SMP_CAPTURE), %set_softint
972 retry 972 retry
973 973
974 .globl xcall_new_mmu_context_version
975xcall_new_mmu_context_version:
976 wr %g0, (1 << PIL_SMP_CTX_NEW_VERSION), %set_softint
977 retry
978
979#ifdef CONFIG_KGDB 974#ifdef CONFIG_KGDB
980 .globl xcall_kgdb_capture 975 .globl xcall_kgdb_capture
981xcall_kgdb_capture: 976xcall_kgdb_capture:
diff --git a/arch/tile/include/asm/processor.h b/arch/tile/include/asm/processor.h
index 0bc9968b97a1..f71e5206650b 100644
--- a/arch/tile/include/asm/processor.h
+++ b/arch/tile/include/asm/processor.h
@@ -214,13 +214,6 @@ static inline void release_thread(struct task_struct *dead_task)
214 214
215extern void prepare_exit_to_usermode(struct pt_regs *regs, u32 flags); 215extern void prepare_exit_to_usermode(struct pt_regs *regs, u32 flags);
216 216
217
218/*
219 * Return saved (kernel) PC of a blocked thread.
220 * Only used in a printk() in kernel/sched/core.c, so don't work too hard.
221 */
222#define thread_saved_pc(t) ((t)->thread.pc)
223
224unsigned long get_wchan(struct task_struct *p); 217unsigned long get_wchan(struct task_struct *p);
225 218
226/* Return initial ksp value for given task. */ 219/* Return initial ksp value for given task. */
diff --git a/arch/tile/mm/hugetlbpage.c b/arch/tile/mm/hugetlbpage.c
index cb10153b5c9f..03e5cc4e76e4 100644
--- a/arch/tile/mm/hugetlbpage.c
+++ b/arch/tile/mm/hugetlbpage.c
@@ -233,7 +233,7 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
233 addr = ALIGN(addr, huge_page_size(h)); 233 addr = ALIGN(addr, huge_page_size(h));
234 vma = find_vma(mm, addr); 234 vma = find_vma(mm, addr);
235 if (TASK_SIZE - len >= addr && 235 if (TASK_SIZE - len >= addr &&
236 (!vma || addr + len <= vma->vm_start)) 236 (!vma || addr + len <= vm_start_gap(vma)))
237 return addr; 237 return addr;
238 } 238 }
239 if (current->mm->get_unmapped_area == arch_get_unmapped_area) 239 if (current->mm->get_unmapped_area == arch_get_unmapped_area)
diff --git a/arch/um/include/asm/processor-generic.h b/arch/um/include/asm/processor-generic.h
index 2d1e0dd5bb0b..f6d1a3f747a9 100644
--- a/arch/um/include/asm/processor-generic.h
+++ b/arch/um/include/asm/processor-generic.h
@@ -58,8 +58,6 @@ static inline void release_thread(struct task_struct *task)
58{ 58{
59} 59}
60 60
61extern unsigned long thread_saved_pc(struct task_struct *t);
62
63static inline void mm_copy_segments(struct mm_struct *from_mm, 61static inline void mm_copy_segments(struct mm_struct *from_mm,
64 struct mm_struct *new_mm) 62 struct mm_struct *new_mm)
65{ 63{
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
index 64a1fd06f3fd..7b5640117325 100644
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -56,12 +56,6 @@ union thread_union cpu0_irqstack
56 __attribute__((__section__(".data..init_irqstack"))) = 56 __attribute__((__section__(".data..init_irqstack"))) =
57 { INIT_THREAD_INFO(init_task) }; 57 { INIT_THREAD_INFO(init_task) };
58 58
59unsigned long thread_saved_pc(struct task_struct *task)
60{
61 /* FIXME: Need to look up userspace_pid by cpu */
62 return os_process_pc(userspace_pid[0]);
63}
64
65/* Changed in setup_arch, which is called in early boot */ 59/* Changed in setup_arch, which is called in early boot */
66static char host_info[(__NEW_UTS_LEN + 1) * 5]; 60static char host_info[(__NEW_UTS_LEN + 1) * 5];
67 61
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index cd18994a9555..0efb4c9497bc 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -360,7 +360,7 @@ config SMP
360 Management" code will be disabled if you say Y here. 360 Management" code will be disabled if you say Y here.
361 361
362 See also <file:Documentation/x86/i386/IO-APIC.txt>, 362 See also <file:Documentation/x86/i386/IO-APIC.txt>,
363 <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at 363 <file:Documentation/lockup-watchdogs.txt> and the SMP-HOWTO available at
364 <http://www.tldp.org/docs.html#howto>. 364 <http://www.tldp.org/docs.html#howto>.
365 365
366 If you don't know what to do here, say N. 366 If you don't know what to do here, say N.
@@ -2776,10 +2776,6 @@ config COMPAT_FOR_U64_ALIGNMENT
2776config SYSVIPC_COMPAT 2776config SYSVIPC_COMPAT
2777 def_bool y 2777 def_bool y
2778 depends on SYSVIPC 2778 depends on SYSVIPC
2779
2780config KEYS_COMPAT
2781 def_bool y
2782 depends on KEYS
2783endif 2779endif
2784 2780
2785endmenu 2781endmenu
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 5851411e60fb..bf240b920473 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -159,7 +159,7 @@ ifdef CONFIG_FUNCTION_GRAPH_TRACER
159 # If '-Os' is enabled, disable it and print a warning. 159 # If '-Os' is enabled, disable it and print a warning.
160 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE 160 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
161 undefine CONFIG_CC_OPTIMIZE_FOR_SIZE 161 undefine CONFIG_CC_OPTIMIZE_FOR_SIZE
162 $(warning Disabling CONFIG_CC_OPTIMIZE_FOR_SIZE. Your compiler does not have -mfentry so you cannot optimize for size with CONFIG_FUNCTION_GRAPH_TRACER.) 162 $(warning Disabling CONFIG_CC_OPTIMIZE_FOR_SIZE. Your compiler does not have -mfentry so you cannot optimize for size with CONFIG_FUNCTION_GRAPH_TRACER.)
163 endif 163 endif
164 164
165 endif 165 endif
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
index 44163e8c3868..2c860ad4fe06 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
@@ -94,7 +94,7 @@ vmlinux-objs-$(CONFIG_EFI_MIXED) += $(obj)/efi_thunk_$(BITS).o
94quiet_cmd_check_data_rel = DATAREL $@ 94quiet_cmd_check_data_rel = DATAREL $@
95define cmd_check_data_rel 95define cmd_check_data_rel
96 for obj in $(filter %.o,$^); do \ 96 for obj in $(filter %.o,$^); do \
97 readelf -S $$obj | grep -qF .rel.local && { \ 97 ${CROSS_COMPILE}readelf -S $$obj | grep -qF .rel.local && { \
98 echo "error: $$obj has data relocations!" >&2; \ 98 echo "error: $$obj has data relocations!" >&2; \
99 exit 1; \ 99 exit 1; \
100 } || true; \ 100 } || true; \
diff --git a/arch/x86/boot/compressed/kaslr.c b/arch/x86/boot/compressed/kaslr.c
index 54c24f0a43d3..56a7e9201741 100644
--- a/arch/x86/boot/compressed/kaslr.c
+++ b/arch/x86/boot/compressed/kaslr.c
@@ -564,9 +564,6 @@ void choose_random_location(unsigned long input,
564{ 564{
565 unsigned long random_addr, min_addr; 565 unsigned long random_addr, min_addr;
566 566
567 /* By default, keep output position unchanged. */
568 *virt_addr = *output;
569
570 if (cmdline_find_option_bool("nokaslr")) { 567 if (cmdline_find_option_bool("nokaslr")) {
571 warn("KASLR disabled: 'nokaslr' on cmdline."); 568 warn("KASLR disabled: 'nokaslr' on cmdline.");
572 return; 569 return;
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
index b3c5a5f030ce..00241c815524 100644
--- a/arch/x86/boot/compressed/misc.c
+++ b/arch/x86/boot/compressed/misc.c
@@ -338,7 +338,7 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
338 unsigned long output_len) 338 unsigned long output_len)
339{ 339{
340 const unsigned long kernel_total_size = VO__end - VO__text; 340 const unsigned long kernel_total_size = VO__end - VO__text;
341 unsigned long virt_addr = (unsigned long)output; 341 unsigned long virt_addr = LOAD_PHYSICAL_ADDR;
342 342
343 /* Retain x86 boot parameters pointer passed from startup_32/64. */ 343 /* Retain x86 boot parameters pointer passed from startup_32/64. */
344 boot_params = rmode; 344 boot_params = rmode;
@@ -390,6 +390,8 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
390#ifdef CONFIG_X86_64 390#ifdef CONFIG_X86_64
391 if (heap > 0x3fffffffffffUL) 391 if (heap > 0x3fffffffffffUL)
392 error("Destination address too large"); 392 error("Destination address too large");
393 if (virt_addr + max(output_len, kernel_total_size) > KERNEL_IMAGE_SIZE)
394 error("Destination virtual address is beyond the kernel mapping area");
393#else 395#else
394 if (heap > ((-__PAGE_OFFSET-(128<<20)-1) & 0x7fffffff)) 396 if (heap > ((-__PAGE_OFFSET-(128<<20)-1) & 0x7fffffff))
395 error("Destination address too large"); 397 error("Destination address too large");
@@ -397,7 +399,7 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
397#ifndef CONFIG_RELOCATABLE 399#ifndef CONFIG_RELOCATABLE
398 if ((unsigned long)output != LOAD_PHYSICAL_ADDR) 400 if ((unsigned long)output != LOAD_PHYSICAL_ADDR)
399 error("Destination address does not match LOAD_PHYSICAL_ADDR"); 401 error("Destination address does not match LOAD_PHYSICAL_ADDR");
400 if ((unsigned long)output != virt_addr) 402 if (virt_addr != LOAD_PHYSICAL_ADDR)
401 error("Destination virtual address changed when not relocatable"); 403 error("Destination virtual address changed when not relocatable");
402#endif 404#endif
403 405
diff --git a/arch/x86/boot/compressed/misc.h b/arch/x86/boot/compressed/misc.h
index 1c8355eadbd1..766a5211f827 100644
--- a/arch/x86/boot/compressed/misc.h
+++ b/arch/x86/boot/compressed/misc.h
@@ -81,8 +81,6 @@ static inline void choose_random_location(unsigned long input,
81 unsigned long output_size, 81 unsigned long output_size,
82 unsigned long *virt_addr) 82 unsigned long *virt_addr)
83{ 83{
84 /* No change from existing output location. */
85 *virt_addr = *output;
86} 84}
87#endif 85#endif
88 86
diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index 50bc26949e9e..48ef7bb32c42 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -252,6 +252,23 @@ ENTRY(__switch_to_asm)
252END(__switch_to_asm) 252END(__switch_to_asm)
253 253
254/* 254/*
255 * The unwinder expects the last frame on the stack to always be at the same
256 * offset from the end of the page, which allows it to validate the stack.
257 * Calling schedule_tail() directly would break that convention because its an
258 * asmlinkage function so its argument has to be pushed on the stack. This
259 * wrapper creates a proper "end of stack" frame header before the call.
260 */
261ENTRY(schedule_tail_wrapper)
262 FRAME_BEGIN
263
264 pushl %eax
265 call schedule_tail
266 popl %eax
267
268 FRAME_END
269 ret
270ENDPROC(schedule_tail_wrapper)
271/*
255 * A newly forked process directly context switches into this address. 272 * A newly forked process directly context switches into this address.
256 * 273 *
257 * eax: prev task we switched from 274 * eax: prev task we switched from
@@ -259,24 +276,15 @@ END(__switch_to_asm)
259 * edi: kernel thread arg 276 * edi: kernel thread arg
260 */ 277 */
261ENTRY(ret_from_fork) 278ENTRY(ret_from_fork)
262 FRAME_BEGIN /* help unwinder find end of stack */ 279 call schedule_tail_wrapper
263
264 /*
265 * schedule_tail() is asmlinkage so we have to put its 'prev' argument
266 * on the stack.
267 */
268 pushl %eax
269 call schedule_tail
270 popl %eax
271 280
272 testl %ebx, %ebx 281 testl %ebx, %ebx
273 jnz 1f /* kernel threads are uncommon */ 282 jnz 1f /* kernel threads are uncommon */
274 283
2752: 2842:
276 /* When we fork, we trace the syscall return in the child, too. */ 285 /* When we fork, we trace the syscall return in the child, too. */
277 leal FRAME_OFFSET(%esp), %eax 286 movl %esp, %eax
278 call syscall_return_slowpath 287 call syscall_return_slowpath
279 FRAME_END
280 jmp restore_all 288 jmp restore_all
281 289
282 /* kernel thread */ 290 /* kernel thread */
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
index 607d72c4a485..4a4c0834f965 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -36,7 +36,6 @@
36#include <asm/smap.h> 36#include <asm/smap.h>
37#include <asm/pgtable_types.h> 37#include <asm/pgtable_types.h>
38#include <asm/export.h> 38#include <asm/export.h>
39#include <asm/frame.h>
40#include <linux/err.h> 39#include <linux/err.h>
41 40
42.code64 41.code64
@@ -406,19 +405,17 @@ END(__switch_to_asm)
406 * r12: kernel thread arg 405 * r12: kernel thread arg
407 */ 406 */
408ENTRY(ret_from_fork) 407ENTRY(ret_from_fork)
409 FRAME_BEGIN /* help unwinder find end of stack */
410 movq %rax, %rdi 408 movq %rax, %rdi
411 call schedule_tail /* rdi: 'prev' task parameter */ 409 call schedule_tail /* rdi: 'prev' task parameter */
412 410
413 testq %rbx, %rbx /* from kernel_thread? */ 411 testq %rbx, %rbx /* from kernel_thread? */
414 jnz 1f /* kernel threads are uncommon */ 412 jnz 1f /* kernel threads are uncommon */
415 413
4162: 4142:
417 leaq FRAME_OFFSET(%rsp),%rdi /* pt_regs pointer */ 415 movq %rsp, %rdi
418 call syscall_return_slowpath /* returns with IRQs disabled */ 416 call syscall_return_slowpath /* returns with IRQs disabled */
419 TRACE_IRQS_ON /* user mode is traced as IRQS on */ 417 TRACE_IRQS_ON /* user mode is traced as IRQS on */
420 SWAPGS 418 SWAPGS
421 FRAME_END
422 jmp restore_regs_and_iret 419 jmp restore_regs_and_iret
423 420
4241: 4211:
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
index a6d91d4e37a1..110ce8238466 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -431,11 +431,11 @@ static __initconst const u64 skl_hw_cache_event_ids
431 [ C(DTLB) ] = { 431 [ C(DTLB) ] = {
432 [ C(OP_READ) ] = { 432 [ C(OP_READ) ] = {
433 [ C(RESULT_ACCESS) ] = 0x81d0, /* MEM_INST_RETIRED.ALL_LOADS */ 433 [ C(RESULT_ACCESS) ] = 0x81d0, /* MEM_INST_RETIRED.ALL_LOADS */
434 [ C(RESULT_MISS) ] = 0x608, /* DTLB_LOAD_MISSES.WALK_COMPLETED */ 434 [ C(RESULT_MISS) ] = 0xe08, /* DTLB_LOAD_MISSES.WALK_COMPLETED */
435 }, 435 },
436 [ C(OP_WRITE) ] = { 436 [ C(OP_WRITE) ] = {
437 [ C(RESULT_ACCESS) ] = 0x82d0, /* MEM_INST_RETIRED.ALL_STORES */ 437 [ C(RESULT_ACCESS) ] = 0x82d0, /* MEM_INST_RETIRED.ALL_STORES */
438 [ C(RESULT_MISS) ] = 0x649, /* DTLB_STORE_MISSES.WALK_COMPLETED */ 438 [ C(RESULT_MISS) ] = 0xe49, /* DTLB_STORE_MISSES.WALK_COMPLETED */
439 }, 439 },
440 [ C(OP_PREFETCH) ] = { 440 [ C(OP_PREFETCH) ] = {
441 [ C(RESULT_ACCESS) ] = 0x0, 441 [ C(RESULT_ACCESS) ] = 0x0,
diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c
index 758c1aa5009d..44ec523287f6 100644
--- a/arch/x86/events/intel/uncore.c
+++ b/arch/x86/events/intel/uncore.c
@@ -1170,7 +1170,7 @@ static int uncore_event_cpu_online(unsigned int cpu)
1170 pmu = type->pmus; 1170 pmu = type->pmus;
1171 for (i = 0; i < type->num_boxes; i++, pmu++) { 1171 for (i = 0; i < type->num_boxes; i++, pmu++) {
1172 box = pmu->boxes[pkg]; 1172 box = pmu->boxes[pkg];
1173 if (!box && atomic_inc_return(&box->refcnt) == 1) 1173 if (box && atomic_inc_return(&box->refcnt) == 1)
1174 uncore_box_init(box); 1174 uncore_box_init(box);
1175 } 1175 }
1176 } 1176 }
diff --git a/arch/x86/include/asm/extable.h b/arch/x86/include/asm/extable.h
index b8ad261d11dc..c66d19e3c23e 100644
--- a/arch/x86/include/asm/extable.h
+++ b/arch/x86/include/asm/extable.h
@@ -29,6 +29,7 @@ struct pt_regs;
29 } while (0) 29 } while (0)
30 30
31extern int fixup_exception(struct pt_regs *regs, int trapnr); 31extern int fixup_exception(struct pt_regs *regs, int trapnr);
32extern int fixup_bug(struct pt_regs *regs, int trapnr);
32extern bool ex_has_fault_handler(unsigned long ip); 33extern bool ex_has_fault_handler(unsigned long ip);
33extern void early_fixup_exception(struct pt_regs *regs, int trapnr); 34extern void early_fixup_exception(struct pt_regs *regs, int trapnr);
34 35
diff --git a/arch/x86/include/asm/kvm_emulate.h b/arch/x86/include/asm/kvm_emulate.h
index 055962615779..722d0e568863 100644
--- a/arch/x86/include/asm/kvm_emulate.h
+++ b/arch/x86/include/asm/kvm_emulate.h
@@ -296,6 +296,7 @@ struct x86_emulate_ctxt {
296 296
297 bool perm_ok; /* do not check permissions if true */ 297 bool perm_ok; /* do not check permissions if true */
298 bool ud; /* inject an #UD if host doesn't support insn */ 298 bool ud; /* inject an #UD if host doesn't support insn */
299 bool tf; /* TF value before instruction (after for syscall/sysret) */
299 300
300 bool have_exception; 301 bool have_exception;
301 struct x86_exception exception; 302 struct x86_exception exception;
diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h
index 4fd5195deed0..3f9a3d2a5209 100644
--- a/arch/x86/include/asm/mce.h
+++ b/arch/x86/include/asm/mce.h
@@ -266,6 +266,7 @@ static inline int umc_normaddr_to_sysaddr(u64 norm_addr, u16 nid, u8 umc, u64 *s
266#endif 266#endif
267 267
268int mce_available(struct cpuinfo_x86 *c); 268int mce_available(struct cpuinfo_x86 *c);
269bool mce_is_memory_error(struct mce *m);
269 270
270DECLARE_PER_CPU(unsigned, mce_exception_count); 271DECLARE_PER_CPU(unsigned, mce_exception_count);
271DECLARE_PER_CPU(unsigned, mce_poll_count); 272DECLARE_PER_CPU(unsigned, mce_poll_count);
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index fba100713924..d5acc27ed1cc 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -2,8 +2,7 @@
2#define _ASM_X86_MSHYPER_H 2#define _ASM_X86_MSHYPER_H
3 3
4#include <linux/types.h> 4#include <linux/types.h>
5#include <linux/interrupt.h> 5#include <linux/atomic.h>
6#include <linux/clocksource.h>
7#include <asm/hyperv.h> 6#include <asm/hyperv.h>
8 7
9/* 8/*
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 3cada998a402..a28b671f1549 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -860,8 +860,6 @@ extern unsigned long KSTK_ESP(struct task_struct *task);
860 860
861#endif /* CONFIG_X86_64 */ 861#endif /* CONFIG_X86_64 */
862 862
863extern unsigned long thread_saved_pc(struct task_struct *tsk);
864
865extern void start_thread(struct pt_regs *regs, unsigned long new_ip, 863extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
866 unsigned long new_sp); 864 unsigned long new_sp);
867 865
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index c5b8f760473c..32e14d137416 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -409,8 +409,13 @@ void __init_or_module noinline apply_alternatives(struct alt_instr *start,
409 memcpy(insnbuf, replacement, a->replacementlen); 409 memcpy(insnbuf, replacement, a->replacementlen);
410 insnbuf_sz = a->replacementlen; 410 insnbuf_sz = a->replacementlen;
411 411
412 /* 0xe8 is a relative jump; fix the offset. */ 412 /*
413 if (*insnbuf == 0xe8 && a->replacementlen == 5) { 413 * 0xe8 is a relative jump; fix the offset.
414 *
415 * Instruction length is checked before the opcode to avoid
416 * accessing uninitialized bytes for zero-length replacements.
417 */
418 if (a->replacementlen == 5 && *insnbuf == 0xe8) {
414 *(s32 *)(insnbuf + 1) += replacement - instr; 419 *(s32 *)(insnbuf + 1) += replacement - instr;
415 DPRINTK("Fix CALL offset: 0x%x, CALL 0x%lx", 420 DPRINTK("Fix CALL offset: 0x%x, CALL 0x%lx",
416 *(s32 *)(insnbuf + 1), 421 *(s32 *)(insnbuf + 1),
diff --git a/arch/x86/kernel/cpu/cyrix.c b/arch/x86/kernel/cpu/cyrix.c
index a70fd61095f8..6f077445647a 100644
--- a/arch/x86/kernel/cpu/cyrix.c
+++ b/arch/x86/kernel/cpu/cyrix.c
@@ -255,6 +255,7 @@ static void init_cyrix(struct cpuinfo_x86 *c)
255 break; 255 break;
256 256
257 case 4: /* MediaGX/GXm or Geode GXM/GXLV/GX1 */ 257 case 4: /* MediaGX/GXm or Geode GXM/GXLV/GX1 */
258 case 11: /* GX1 with inverted Device ID */
258#ifdef CONFIG_PCI 259#ifdef CONFIG_PCI
259 { 260 {
260 u32 vendor, device; 261 u32 vendor, device;
diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
index f5af0cc7eb0d..9257bd9dc664 100644
--- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
+++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
@@ -856,11 +856,13 @@ static struct dentry *rdt_mount(struct file_system_type *fs_type,
856 dentry = kernfs_mount(fs_type, flags, rdt_root, 856 dentry = kernfs_mount(fs_type, flags, rdt_root,
857 RDTGROUP_SUPER_MAGIC, NULL); 857 RDTGROUP_SUPER_MAGIC, NULL);
858 if (IS_ERR(dentry)) 858 if (IS_ERR(dentry))
859 goto out_cdp; 859 goto out_destroy;
860 860
861 static_branch_enable(&rdt_enable_key); 861 static_branch_enable(&rdt_enable_key);
862 goto out; 862 goto out;
863 863
864out_destroy:
865 kernfs_remove(kn_info);
864out_cdp: 866out_cdp:
865 cdp_disable(); 867 cdp_disable();
866out: 868out:
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index 5abd4bf73d6e..5cfbaeb6529a 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -499,16 +499,14 @@ static int mce_usable_address(struct mce *m)
499 return 1; 499 return 1;
500} 500}
501 501
502static bool memory_error(struct mce *m) 502bool mce_is_memory_error(struct mce *m)
503{ 503{
504 struct cpuinfo_x86 *c = &boot_cpu_data; 504 if (m->cpuvendor == X86_VENDOR_AMD) {
505
506 if (c->x86_vendor == X86_VENDOR_AMD) {
507 /* ErrCodeExt[20:16] */ 505 /* ErrCodeExt[20:16] */
508 u8 xec = (m->status >> 16) & 0x1f; 506 u8 xec = (m->status >> 16) & 0x1f;
509 507
510 return (xec == 0x0 || xec == 0x8); 508 return (xec == 0x0 || xec == 0x8);
511 } else if (c->x86_vendor == X86_VENDOR_INTEL) { 509 } else if (m->cpuvendor == X86_VENDOR_INTEL) {
512 /* 510 /*
513 * Intel SDM Volume 3B - 15.9.2 Compound Error Codes 511 * Intel SDM Volume 3B - 15.9.2 Compound Error Codes
514 * 512 *
@@ -529,6 +527,7 @@ static bool memory_error(struct mce *m)
529 527
530 return false; 528 return false;
531} 529}
530EXPORT_SYMBOL_GPL(mce_is_memory_error);
532 531
533static bool cec_add_mce(struct mce *m) 532static bool cec_add_mce(struct mce *m)
534{ 533{
@@ -536,7 +535,7 @@ static bool cec_add_mce(struct mce *m)
536 return false; 535 return false;
537 536
538 /* We eat only correctable DRAM errors with usable addresses. */ 537 /* We eat only correctable DRAM errors with usable addresses. */
539 if (memory_error(m) && 538 if (mce_is_memory_error(m) &&
540 !(m->status & MCI_STATUS_UC) && 539 !(m->status & MCI_STATUS_UC) &&
541 mce_usable_address(m)) 540 mce_usable_address(m))
542 if (!cec_add_elem(m->addr >> PAGE_SHIFT)) 541 if (!cec_add_elem(m->addr >> PAGE_SHIFT))
@@ -713,7 +712,7 @@ bool machine_check_poll(enum mcp_flags flags, mce_banks_t *b)
713 712
714 severity = mce_severity(&m, mca_cfg.tolerant, NULL, false); 713 severity = mce_severity(&m, mca_cfg.tolerant, NULL, false);
715 714
716 if (severity == MCE_DEFERRED_SEVERITY && memory_error(&m)) 715 if (severity == MCE_DEFERRED_SEVERITY && mce_is_memory_error(&m))
717 if (m.status & MCI_STATUS_ADDRV) 716 if (m.status & MCI_STATUS_ADDRV)
718 m.severity = severity; 717 m.severity = severity;
719 718
diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c
index 45db4d2ebd01..e9f4d762aa5b 100644
--- a/arch/x86/kernel/cpu/microcode/amd.c
+++ b/arch/x86/kernel/cpu/microcode/amd.c
@@ -320,7 +320,7 @@ void load_ucode_amd_ap(unsigned int cpuid_1_eax)
320} 320}
321 321
322static enum ucode_state 322static enum ucode_state
323load_microcode_amd(int cpu, u8 family, const u8 *data, size_t size); 323load_microcode_amd(bool save, u8 family, const u8 *data, size_t size);
324 324
325int __init save_microcode_in_initrd_amd(unsigned int cpuid_1_eax) 325int __init save_microcode_in_initrd_amd(unsigned int cpuid_1_eax)
326{ 326{
@@ -338,8 +338,7 @@ int __init save_microcode_in_initrd_amd(unsigned int cpuid_1_eax)
338 if (!desc.mc) 338 if (!desc.mc)
339 return -EINVAL; 339 return -EINVAL;
340 340
341 ret = load_microcode_amd(smp_processor_id(), x86_family(cpuid_1_eax), 341 ret = load_microcode_amd(true, x86_family(cpuid_1_eax), desc.data, desc.size);
342 desc.data, desc.size);
343 if (ret != UCODE_OK) 342 if (ret != UCODE_OK)
344 return -EINVAL; 343 return -EINVAL;
345 344
@@ -675,7 +674,7 @@ static enum ucode_state __load_microcode_amd(u8 family, const u8 *data,
675} 674}
676 675
677static enum ucode_state 676static enum ucode_state
678load_microcode_amd(int cpu, u8 family, const u8 *data, size_t size) 677load_microcode_amd(bool save, u8 family, const u8 *data, size_t size)
679{ 678{
680 enum ucode_state ret; 679 enum ucode_state ret;
681 680
@@ -689,8 +688,8 @@ load_microcode_amd(int cpu, u8 family, const u8 *data, size_t size)
689 688
690#ifdef CONFIG_X86_32 689#ifdef CONFIG_X86_32
691 /* save BSP's matching patch for early load */ 690 /* save BSP's matching patch for early load */
692 if (cpu_data(cpu).cpu_index == boot_cpu_data.cpu_index) { 691 if (save) {
693 struct ucode_patch *p = find_patch(cpu); 692 struct ucode_patch *p = find_patch(0);
694 if (p) { 693 if (p) {
695 memset(amd_ucode_patch, 0, PATCH_MAX_SIZE); 694 memset(amd_ucode_patch, 0, PATCH_MAX_SIZE);
696 memcpy(amd_ucode_patch, p->data, min_t(u32, ksize(p->data), 695 memcpy(amd_ucode_patch, p->data, min_t(u32, ksize(p->data),
@@ -722,11 +721,12 @@ static enum ucode_state request_microcode_amd(int cpu, struct device *device,
722{ 721{
723 char fw_name[36] = "amd-ucode/microcode_amd.bin"; 722 char fw_name[36] = "amd-ucode/microcode_amd.bin";
724 struct cpuinfo_x86 *c = &cpu_data(cpu); 723 struct cpuinfo_x86 *c = &cpu_data(cpu);
724 bool bsp = c->cpu_index == boot_cpu_data.cpu_index;
725 enum ucode_state ret = UCODE_NFOUND; 725 enum ucode_state ret = UCODE_NFOUND;
726 const struct firmware *fw; 726 const struct firmware *fw;
727 727
728 /* reload ucode container only on the boot cpu */ 728 /* reload ucode container only on the boot cpu */
729 if (!refresh_fw || c->cpu_index != boot_cpu_data.cpu_index) 729 if (!refresh_fw || !bsp)
730 return UCODE_OK; 730 return UCODE_OK;
731 731
732 if (c->x86 >= 0x15) 732 if (c->x86 >= 0x15)
@@ -743,7 +743,7 @@ static enum ucode_state request_microcode_amd(int cpu, struct device *device,
743 goto fw_release; 743 goto fw_release;
744 } 744 }
745 745
746 ret = load_microcode_amd(cpu, c->x86, fw->data, fw->size); 746 ret = load_microcode_amd(bsp, c->x86, fw->data, fw->size);
747 747
748 fw_release: 748 fw_release:
749 release_firmware(fw); 749 release_firmware(fw);
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
index afdfd237b59f..f522415bf9e5 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -619,6 +619,9 @@ int __init save_microcode_in_initrd_intel(void)
619 619
620 show_saved_mc(); 620 show_saved_mc();
621 621
622 /* initrd is going away, clear patch ptr. */
623 intel_ucode_patch = NULL;
624
622 return 0; 625 return 0;
623} 626}
624 627
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index 0651e974dcb3..9bef1bbeba63 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -689,8 +689,12 @@ static inline void *alloc_tramp(unsigned long size)
689{ 689{
690 return module_alloc(size); 690 return module_alloc(size);
691} 691}
692static inline void tramp_free(void *tramp) 692static inline void tramp_free(void *tramp, int size)
693{ 693{
694 int npages = PAGE_ALIGN(size) >> PAGE_SHIFT;
695
696 set_memory_nx((unsigned long)tramp, npages);
697 set_memory_rw((unsigned long)tramp, npages);
694 module_memfree(tramp); 698 module_memfree(tramp);
695} 699}
696#else 700#else
@@ -699,7 +703,7 @@ static inline void *alloc_tramp(unsigned long size)
699{ 703{
700 return NULL; 704 return NULL;
701} 705}
702static inline void tramp_free(void *tramp) { } 706static inline void tramp_free(void *tramp, int size) { }
703#endif 707#endif
704 708
705/* Defined as markers to the end of the ftrace default trampolines */ 709/* Defined as markers to the end of the ftrace default trampolines */
@@ -771,7 +775,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
771 /* Copy ftrace_caller onto the trampoline memory */ 775 /* Copy ftrace_caller onto the trampoline memory */
772 ret = probe_kernel_read(trampoline, (void *)start_offset, size); 776 ret = probe_kernel_read(trampoline, (void *)start_offset, size);
773 if (WARN_ON(ret < 0)) { 777 if (WARN_ON(ret < 0)) {
774 tramp_free(trampoline); 778 tramp_free(trampoline, *tramp_size);
775 return 0; 779 return 0;
776 } 780 }
777 781
@@ -797,7 +801,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
797 801
798 /* Are we pointing to the reference? */ 802 /* Are we pointing to the reference? */
799 if (WARN_ON(memcmp(op_ptr.op, op_ref, 3) != 0)) { 803 if (WARN_ON(memcmp(op_ptr.op, op_ref, 3) != 0)) {
800 tramp_free(trampoline); 804 tramp_free(trampoline, *tramp_size);
801 return 0; 805 return 0;
802 } 806 }
803 807
@@ -839,7 +843,7 @@ void arch_ftrace_update_trampoline(struct ftrace_ops *ops)
839 unsigned long offset; 843 unsigned long offset;
840 unsigned long ip; 844 unsigned long ip;
841 unsigned int size; 845 unsigned int size;
842 int ret; 846 int ret, npages;
843 847
844 if (ops->trampoline) { 848 if (ops->trampoline) {
845 /* 849 /*
@@ -848,11 +852,14 @@ void arch_ftrace_update_trampoline(struct ftrace_ops *ops)
848 */ 852 */
849 if (!(ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP)) 853 if (!(ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP))
850 return; 854 return;
855 npages = PAGE_ALIGN(ops->trampoline_size) >> PAGE_SHIFT;
856 set_memory_rw(ops->trampoline, npages);
851 } else { 857 } else {
852 ops->trampoline = create_trampoline(ops, &size); 858 ops->trampoline = create_trampoline(ops, &size);
853 if (!ops->trampoline) 859 if (!ops->trampoline)
854 return; 860 return;
855 ops->trampoline_size = size; 861 ops->trampoline_size = size;
862 npages = PAGE_ALIGN(size) >> PAGE_SHIFT;
856 } 863 }
857 864
858 offset = calc_trampoline_call_offset(ops->flags & FTRACE_OPS_FL_SAVE_REGS); 865 offset = calc_trampoline_call_offset(ops->flags & FTRACE_OPS_FL_SAVE_REGS);
@@ -863,6 +870,7 @@ void arch_ftrace_update_trampoline(struct ftrace_ops *ops)
863 /* Do a safe modify in case the trampoline is executing */ 870 /* Do a safe modify in case the trampoline is executing */
864 new = ftrace_call_replace(ip, (unsigned long)func); 871 new = ftrace_call_replace(ip, (unsigned long)func);
865 ret = update_ftrace_func(ip, new); 872 ret = update_ftrace_func(ip, new);
873 set_memory_ro(ops->trampoline, npages);
866 874
867 /* The update should never fail */ 875 /* The update should never fail */
868 WARN_ON(ret); 876 WARN_ON(ret);
@@ -939,7 +947,7 @@ void arch_ftrace_trampoline_free(struct ftrace_ops *ops)
939 if (!ops || !(ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP)) 947 if (!ops || !(ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP))
940 return; 948 return;
941 949
942 tramp_free((void *)ops->trampoline); 950 tramp_free((void *)ops->trampoline, ops->trampoline_size);
943 ops->trampoline = 0; 951 ops->trampoline = 0;
944} 952}
945 953
diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
index 5b2bbfbb3712..6b877807598b 100644
--- a/arch/x86/kernel/kprobes/core.c
+++ b/arch/x86/kernel/kprobes/core.c
@@ -52,6 +52,7 @@
52#include <linux/ftrace.h> 52#include <linux/ftrace.h>
53#include <linux/frame.h> 53#include <linux/frame.h>
54#include <linux/kasan.h> 54#include <linux/kasan.h>
55#include <linux/moduleloader.h>
55 56
56#include <asm/text-patching.h> 57#include <asm/text-patching.h>
57#include <asm/cacheflush.h> 58#include <asm/cacheflush.h>
@@ -417,6 +418,14 @@ static void prepare_boost(struct kprobe *p, struct insn *insn)
417 } 418 }
418} 419}
419 420
421/* Recover page to RW mode before releasing it */
422void free_insn_page(void *page)
423{
424 set_memory_nx((unsigned long)page & PAGE_MASK, 1);
425 set_memory_rw((unsigned long)page & PAGE_MASK, 1);
426 module_memfree(page);
427}
428
420static int arch_copy_kprobe(struct kprobe *p) 429static int arch_copy_kprobe(struct kprobe *p)
421{ 430{
422 struct insn insn; 431 struct insn insn;
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index da5c09789984..43e10d6fdbed 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -161,8 +161,8 @@ void kvm_async_pf_task_wait(u32 token)
161 */ 161 */
162 rcu_irq_exit(); 162 rcu_irq_exit();
163 native_safe_halt(); 163 native_safe_halt();
164 rcu_irq_enter();
165 local_irq_disable(); 164 local_irq_disable();
165 rcu_irq_enter();
166 } 166 }
167 } 167 }
168 if (!n.halted) 168 if (!n.halted)
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index 0bb88428cbf2..3ca198080ea9 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -545,17 +545,6 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
545} 545}
546 546
547/* 547/*
548 * Return saved PC of a blocked thread.
549 * What is this good for? it will be always the scheduler or ret_from_fork.
550 */
551unsigned long thread_saved_pc(struct task_struct *tsk)
552{
553 struct inactive_task_frame *frame =
554 (struct inactive_task_frame *) READ_ONCE(tsk->thread.sp);
555 return READ_ONCE_NOCHECK(frame->ret_addr);
556}
557
558/*
559 * Called from fs/proc with a reference on @p to find the function 548 * Called from fs/proc with a reference on @p to find the function
560 * which called into schedule(). This needs to be done carefully 549 * which called into schedule(). This needs to be done carefully
561 * because the task might wake up and we might look at a stack 550 * because the task might wake up and we might look at a stack
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
index ff40e74c9181..ffeae818aa7a 100644
--- a/arch/x86/kernel/process_32.c
+++ b/arch/x86/kernel/process_32.c
@@ -78,7 +78,7 @@ void __show_regs(struct pt_regs *regs, int all)
78 78
79 printk(KERN_DEFAULT "EIP: %pS\n", (void *)regs->ip); 79 printk(KERN_DEFAULT "EIP: %pS\n", (void *)regs->ip);
80 printk(KERN_DEFAULT "EFLAGS: %08lx CPU: %d\n", regs->flags, 80 printk(KERN_DEFAULT "EFLAGS: %08lx CPU: %d\n", regs->flags,
81 smp_processor_id()); 81 raw_smp_processor_id());
82 82
83 printk(KERN_DEFAULT "EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", 83 printk(KERN_DEFAULT "EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
84 regs->ax, regs->bx, regs->cx, regs->dx); 84 regs->ax, regs->bx, regs->cx, regs->dx);
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 0b4d3c686b1e..f81823695014 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -980,8 +980,6 @@ void __init setup_arch(char **cmdline_p)
980 */ 980 */
981 x86_configure_nx(); 981 x86_configure_nx();
982 982
983 simple_udelay_calibration();
984
985 parse_early_param(); 983 parse_early_param();
986 984
987#ifdef CONFIG_MEMORY_HOTPLUG 985#ifdef CONFIG_MEMORY_HOTPLUG
@@ -1041,6 +1039,8 @@ void __init setup_arch(char **cmdline_p)
1041 */ 1039 */
1042 init_hypervisor_platform(); 1040 init_hypervisor_platform();
1043 1041
1042 simple_udelay_calibration();
1043
1044 x86_init.resources.probe_roms(); 1044 x86_init.resources.probe_roms();
1045 1045
1046 /* after parse_early_param, so could debug it */ 1046 /* after parse_early_param, so could debug it */
diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c
index 207b8f2582c7..213ddf3e937d 100644
--- a/arch/x86/kernel/sys_x86_64.c
+++ b/arch/x86/kernel/sys_x86_64.c
@@ -144,7 +144,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
144 addr = PAGE_ALIGN(addr); 144 addr = PAGE_ALIGN(addr);
145 vma = find_vma(mm, addr); 145 vma = find_vma(mm, addr);
146 if (end - len >= addr && 146 if (end - len >= addr &&
147 (!vma || addr + len <= vma->vm_start)) 147 (!vma || addr + len <= vm_start_gap(vma)))
148 return addr; 148 return addr;
149 } 149 }
150 150
@@ -187,7 +187,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
187 addr = PAGE_ALIGN(addr); 187 addr = PAGE_ALIGN(addr);
188 vma = find_vma(mm, addr); 188 vma = find_vma(mm, addr);
189 if (TASK_SIZE - len >= addr && 189 if (TASK_SIZE - len >= addr &&
190 (!vma || addr + len <= vma->vm_start)) 190 (!vma || addr + len <= vm_start_gap(vma)))
191 return addr; 191 return addr;
192 } 192 }
193 193
diff --git a/arch/x86/kernel/tboot.c b/arch/x86/kernel/tboot.c
index 4b1724059909..a4eb27918ceb 100644
--- a/arch/x86/kernel/tboot.c
+++ b/arch/x86/kernel/tboot.c
@@ -514,7 +514,7 @@ int tboot_force_iommu(void)
514 if (!tboot_enabled()) 514 if (!tboot_enabled())
515 return 0; 515 return 0;
516 516
517 if (!intel_iommu_tboot_noforce) 517 if (intel_iommu_tboot_noforce)
518 return 1; 518 return 1;
519 519
520 if (no_iommu || swiotlb || dmar_disabled) 520 if (no_iommu || swiotlb || dmar_disabled)
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index 3995d3a777d4..bf54309b85da 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -182,7 +182,7 @@ int is_valid_bugaddr(unsigned long addr)
182 return ud == INSN_UD0 || ud == INSN_UD2; 182 return ud == INSN_UD0 || ud == INSN_UD2;
183} 183}
184 184
185static int fixup_bug(struct pt_regs *regs, int trapnr) 185int fixup_bug(struct pt_regs *regs, int trapnr)
186{ 186{
187 if (trapnr != X86_TRAP_UD) 187 if (trapnr != X86_TRAP_UD)
188 return 0; 188 return 0;
diff --git a/arch/x86/kernel/unwind_frame.c b/arch/x86/kernel/unwind_frame.c
index 82c6d7f1fd73..b9389d72b2f7 100644
--- a/arch/x86/kernel/unwind_frame.c
+++ b/arch/x86/kernel/unwind_frame.c
@@ -104,6 +104,11 @@ static inline unsigned long *last_frame(struct unwind_state *state)
104 return (unsigned long *)task_pt_regs(state->task) - 2; 104 return (unsigned long *)task_pt_regs(state->task) - 2;
105} 105}
106 106
107static bool is_last_frame(struct unwind_state *state)
108{
109 return state->bp == last_frame(state);
110}
111
107#ifdef CONFIG_X86_32 112#ifdef CONFIG_X86_32
108#define GCC_REALIGN_WORDS 3 113#define GCC_REALIGN_WORDS 3
109#else 114#else
@@ -115,16 +120,15 @@ static inline unsigned long *last_aligned_frame(struct unwind_state *state)
115 return last_frame(state) - GCC_REALIGN_WORDS; 120 return last_frame(state) - GCC_REALIGN_WORDS;
116} 121}
117 122
118static bool is_last_task_frame(struct unwind_state *state) 123static bool is_last_aligned_frame(struct unwind_state *state)
119{ 124{
120 unsigned long *last_bp = last_frame(state); 125 unsigned long *last_bp = last_frame(state);
121 unsigned long *aligned_bp = last_aligned_frame(state); 126 unsigned long *aligned_bp = last_aligned_frame(state);
122 127
123 /* 128 /*
124 * We have to check for the last task frame at two different locations 129 * GCC can occasionally decide to realign the stack pointer and change
125 * because gcc can occasionally decide to realign the stack pointer and 130 * the offset of the stack frame in the prologue of a function called
126 * change the offset of the stack frame in the prologue of a function 131 * by head/entry code. Examples:
127 * called by head/entry code. Examples:
128 * 132 *
129 * <start_secondary>: 133 * <start_secondary>:
130 * push %edi 134 * push %edi
@@ -141,11 +145,38 @@ static bool is_last_task_frame(struct unwind_state *state)
141 * push %rbp 145 * push %rbp
142 * mov %rsp,%rbp 146 * mov %rsp,%rbp
143 * 147 *
144 * Note that after aligning the stack, it pushes a duplicate copy of 148 * After aligning the stack, it pushes a duplicate copy of the return
145 * the return address before pushing the frame pointer. 149 * address before pushing the frame pointer.
150 */
151 return (state->bp == aligned_bp && *(aligned_bp + 1) == *(last_bp + 1));
152}
153
154static bool is_last_ftrace_frame(struct unwind_state *state)
155{
156 unsigned long *last_bp = last_frame(state);
157 unsigned long *last_ftrace_bp = last_bp - 3;
158
159 /*
160 * When unwinding from an ftrace handler of a function called by entry
161 * code, the stack layout of the last frame is:
162 *
163 * bp
164 * parent ret addr
165 * bp
166 * function ret addr
167 * parent ret addr
168 * pt_regs
169 * -----------------
146 */ 170 */
147 return (state->bp == last_bp || 171 return (state->bp == last_ftrace_bp &&
148 (state->bp == aligned_bp && *(aligned_bp+1) == *(last_bp+1))); 172 *state->bp == *(state->bp + 2) &&
173 *(state->bp + 1) == *(state->bp + 4));
174}
175
176static bool is_last_task_frame(struct unwind_state *state)
177{
178 return is_last_frame(state) || is_last_aligned_frame(state) ||
179 is_last_ftrace_frame(state);
149} 180}
150 181
151/* 182/*
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index a181ae76c71c..59ca2eea522c 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -780,18 +780,20 @@ out:
780static int move_to_next_stateful_cpuid_entry(struct kvm_vcpu *vcpu, int i) 780static int move_to_next_stateful_cpuid_entry(struct kvm_vcpu *vcpu, int i)
781{ 781{
782 struct kvm_cpuid_entry2 *e = &vcpu->arch.cpuid_entries[i]; 782 struct kvm_cpuid_entry2 *e = &vcpu->arch.cpuid_entries[i];
783 int j, nent = vcpu->arch.cpuid_nent; 783 struct kvm_cpuid_entry2 *ej;
784 int j = i;
785 int nent = vcpu->arch.cpuid_nent;
784 786
785 e->flags &= ~KVM_CPUID_FLAG_STATE_READ_NEXT; 787 e->flags &= ~KVM_CPUID_FLAG_STATE_READ_NEXT;
786 /* when no next entry is found, the current entry[i] is reselected */ 788 /* when no next entry is found, the current entry[i] is reselected */
787 for (j = i + 1; ; j = (j + 1) % nent) { 789 do {
788 struct kvm_cpuid_entry2 *ej = &vcpu->arch.cpuid_entries[j]; 790 j = (j + 1) % nent;
789 if (ej->function == e->function) { 791 ej = &vcpu->arch.cpuid_entries[j];
790 ej->flags |= KVM_CPUID_FLAG_STATE_READ_NEXT; 792 } while (ej->function != e->function);
791 return j; 793
792 } 794 ej->flags |= KVM_CPUID_FLAG_STATE_READ_NEXT;
793 } 795
794 return 0; /* silence gcc, even though control never reaches here */ 796 return j;
795} 797}
796 798
797/* find an entry with matching function, matching index (if needed), and that 799/* find an entry with matching function, matching index (if needed), and that
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 0816ab2e8adc..80890dee66ce 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -2742,6 +2742,7 @@ static int em_syscall(struct x86_emulate_ctxt *ctxt)
2742 ctxt->eflags &= ~(X86_EFLAGS_VM | X86_EFLAGS_IF); 2742 ctxt->eflags &= ~(X86_EFLAGS_VM | X86_EFLAGS_IF);
2743 } 2743 }
2744 2744
2745 ctxt->tf = (ctxt->eflags & X86_EFLAGS_TF) != 0;
2745 return X86EMUL_CONTINUE; 2746 return X86EMUL_CONTINUE;
2746} 2747}
2747 2748
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index c329d2894905..d24c8742d9b0 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -1495,8 +1495,10 @@ EXPORT_SYMBOL_GPL(kvm_lapic_hv_timer_in_use);
1495 1495
1496static void cancel_hv_timer(struct kvm_lapic *apic) 1496static void cancel_hv_timer(struct kvm_lapic *apic)
1497{ 1497{
1498 preempt_disable();
1498 kvm_x86_ops->cancel_hv_timer(apic->vcpu); 1499 kvm_x86_ops->cancel_hv_timer(apic->vcpu);
1499 apic->lapic_timer.hv_timer_in_use = false; 1500 apic->lapic_timer.hv_timer_in_use = false;
1501 preempt_enable();
1500} 1502}
1501 1503
1502static bool start_hv_timer(struct kvm_lapic *apic) 1504static bool start_hv_timer(struct kvm_lapic *apic)
@@ -1934,7 +1936,8 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu, bool init_event)
1934 for (i = 0; i < KVM_APIC_LVT_NUM; i++) 1936 for (i = 0; i < KVM_APIC_LVT_NUM; i++)
1935 kvm_lapic_set_reg(apic, APIC_LVTT + 0x10 * i, APIC_LVT_MASKED); 1937 kvm_lapic_set_reg(apic, APIC_LVTT + 0x10 * i, APIC_LVT_MASKED);
1936 apic_update_lvtt(apic); 1938 apic_update_lvtt(apic);
1937 if (kvm_check_has_quirk(vcpu->kvm, KVM_X86_QUIRK_LINT0_REENABLED)) 1939 if (kvm_vcpu_is_reset_bsp(vcpu) &&
1940 kvm_check_has_quirk(vcpu->kvm, KVM_X86_QUIRK_LINT0_REENABLED))
1938 kvm_lapic_set_reg(apic, APIC_LVT0, 1941 kvm_lapic_set_reg(apic, APIC_LVT0,
1939 SET_APIC_DELIVERY_MODE(0, APIC_MODE_EXTINT)); 1942 SET_APIC_DELIVERY_MODE(0, APIC_MODE_EXTINT));
1940 apic_manage_nmi_watchdog(apic, kvm_lapic_get_reg(apic, APIC_LVT0)); 1943 apic_manage_nmi_watchdog(apic, kvm_lapic_get_reg(apic, APIC_LVT0));
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 5d3376f67794..cb8225969255 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -3698,12 +3698,15 @@ static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn)
3698 return kvm_setup_async_pf(vcpu, gva, kvm_vcpu_gfn_to_hva(vcpu, gfn), &arch); 3698 return kvm_setup_async_pf(vcpu, gva, kvm_vcpu_gfn_to_hva(vcpu, gfn), &arch);
3699} 3699}
3700 3700
3701static bool can_do_async_pf(struct kvm_vcpu *vcpu) 3701bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu)
3702{ 3702{
3703 if (unlikely(!lapic_in_kernel(vcpu) || 3703 if (unlikely(!lapic_in_kernel(vcpu) ||
3704 kvm_event_needs_reinjection(vcpu))) 3704 kvm_event_needs_reinjection(vcpu)))
3705 return false; 3705 return false;
3706 3706
3707 if (is_guest_mode(vcpu))
3708 return false;
3709
3707 return kvm_x86_ops->interrupt_allowed(vcpu); 3710 return kvm_x86_ops->interrupt_allowed(vcpu);
3708} 3711}
3709 3712
@@ -3719,7 +3722,7 @@ static bool try_async_pf(struct kvm_vcpu *vcpu, bool prefault, gfn_t gfn,
3719 if (!async) 3722 if (!async)
3720 return false; /* *pfn has correct page already */ 3723 return false; /* *pfn has correct page already */
3721 3724
3722 if (!prefault && can_do_async_pf(vcpu)) { 3725 if (!prefault && kvm_can_do_async_pf(vcpu)) {
3723 trace_kvm_try_async_get_page(gva, gfn); 3726 trace_kvm_try_async_get_page(gva, gfn);
3724 if (kvm_find_async_pf_gfn(vcpu, gfn)) { 3727 if (kvm_find_async_pf_gfn(vcpu, gfn)) {
3725 trace_kvm_async_pf_doublefault(gva, gfn); 3728 trace_kvm_async_pf_doublefault(gva, gfn);
diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h
index 27975807cc64..330bf3a811fb 100644
--- a/arch/x86/kvm/mmu.h
+++ b/arch/x86/kvm/mmu.h
@@ -76,6 +76,7 @@ int handle_mmio_page_fault(struct kvm_vcpu *vcpu, u64 addr, bool direct);
76void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu); 76void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu);
77void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly, 77void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly,
78 bool accessed_dirty); 78 bool accessed_dirty);
79bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu);
79 80
80static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm) 81static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm)
81{ 82{
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 183ddb235fb4..ba9891ac5c56 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -1807,7 +1807,7 @@ static void svm_get_segment(struct kvm_vcpu *vcpu,
1807 * AMD's VMCB does not have an explicit unusable field, so emulate it 1807 * AMD's VMCB does not have an explicit unusable field, so emulate it
1808 * for cross vendor migration purposes by "not present" 1808 * for cross vendor migration purposes by "not present"
1809 */ 1809 */
1810 var->unusable = !var->present || (var->type == 0); 1810 var->unusable = !var->present;
1811 1811
1812 switch (seg) { 1812 switch (seg) {
1813 case VCPU_SREG_TR: 1813 case VCPU_SREG_TR:
@@ -1840,6 +1840,7 @@ static void svm_get_segment(struct kvm_vcpu *vcpu,
1840 */ 1840 */
1841 if (var->unusable) 1841 if (var->unusable)
1842 var->db = 0; 1842 var->db = 0;
1843 /* This is symmetric with svm_set_segment() */
1843 var->dpl = to_svm(vcpu)->vmcb->save.cpl; 1844 var->dpl = to_svm(vcpu)->vmcb->save.cpl;
1844 break; 1845 break;
1845 } 1846 }
@@ -1980,18 +1981,14 @@ static void svm_set_segment(struct kvm_vcpu *vcpu,
1980 s->base = var->base; 1981 s->base = var->base;
1981 s->limit = var->limit; 1982 s->limit = var->limit;
1982 s->selector = var->selector; 1983 s->selector = var->selector;
1983 if (var->unusable) 1984 s->attrib = (var->type & SVM_SELECTOR_TYPE_MASK);
1984 s->attrib = 0; 1985 s->attrib |= (var->s & 1) << SVM_SELECTOR_S_SHIFT;
1985 else { 1986 s->attrib |= (var->dpl & 3) << SVM_SELECTOR_DPL_SHIFT;
1986 s->attrib = (var->type & SVM_SELECTOR_TYPE_MASK); 1987 s->attrib |= ((var->present & 1) && !var->unusable) << SVM_SELECTOR_P_SHIFT;
1987 s->attrib |= (var->s & 1) << SVM_SELECTOR_S_SHIFT; 1988 s->attrib |= (var->avl & 1) << SVM_SELECTOR_AVL_SHIFT;
1988 s->attrib |= (var->dpl & 3) << SVM_SELECTOR_DPL_SHIFT; 1989 s->attrib |= (var->l & 1) << SVM_SELECTOR_L_SHIFT;
1989 s->attrib |= (var->present & 1) << SVM_SELECTOR_P_SHIFT; 1990 s->attrib |= (var->db & 1) << SVM_SELECTOR_DB_SHIFT;
1990 s->attrib |= (var->avl & 1) << SVM_SELECTOR_AVL_SHIFT; 1991 s->attrib |= (var->g & 1) << SVM_SELECTOR_G_SHIFT;
1991 s->attrib |= (var->l & 1) << SVM_SELECTOR_L_SHIFT;
1992 s->attrib |= (var->db & 1) << SVM_SELECTOR_DB_SHIFT;
1993 s->attrib |= (var->g & 1) << SVM_SELECTOR_G_SHIFT;
1994 }
1995 1992
1996 /* 1993 /*
1997 * This is always accurate, except if SYSRET returned to a segment 1994 * This is always accurate, except if SYSRET returned to a segment
@@ -2000,7 +1997,8 @@ static void svm_set_segment(struct kvm_vcpu *vcpu,
2000 * would entail passing the CPL to userspace and back. 1997 * would entail passing the CPL to userspace and back.
2001 */ 1998 */
2002 if (seg == VCPU_SREG_SS) 1999 if (seg == VCPU_SREG_SS)
2003 svm->vmcb->save.cpl = (s->attrib >> SVM_SELECTOR_DPL_SHIFT) & 3; 2000 /* This is symmetric with svm_get_segment() */
2001 svm->vmcb->save.cpl = (var->dpl & 3);
2004 2002
2005 mark_dirty(svm->vmcb, VMCB_SEG); 2003 mark_dirty(svm->vmcb, VMCB_SEG);
2006} 2004}
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 72f78396bc09..ca5d2b93385c 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -2425,7 +2425,7 @@ static int nested_vmx_check_exception(struct kvm_vcpu *vcpu, unsigned nr)
2425 if (!(vmcs12->exception_bitmap & (1u << nr))) 2425 if (!(vmcs12->exception_bitmap & (1u << nr)))
2426 return 0; 2426 return 0;
2427 2427
2428 nested_vmx_vmexit(vcpu, to_vmx(vcpu)->exit_reason, 2428 nested_vmx_vmexit(vcpu, EXIT_REASON_EXCEPTION_NMI,
2429 vmcs_read32(VM_EXIT_INTR_INFO), 2429 vmcs_read32(VM_EXIT_INTR_INFO),
2430 vmcs_readl(EXIT_QUALIFICATION)); 2430 vmcs_readl(EXIT_QUALIFICATION));
2431 return 1; 2431 return 1;
@@ -6914,97 +6914,21 @@ static int get_vmx_mem_address(struct kvm_vcpu *vcpu,
6914 return 0; 6914 return 0;
6915} 6915}
6916 6916
6917/* 6917static int nested_vmx_get_vmptr(struct kvm_vcpu *vcpu, gpa_t *vmpointer)
6918 * This function performs the various checks including
6919 * - if it's 4KB aligned
6920 * - No bits beyond the physical address width are set
6921 * - Returns 0 on success or else 1
6922 * (Intel SDM Section 30.3)
6923 */
6924static int nested_vmx_check_vmptr(struct kvm_vcpu *vcpu, int exit_reason,
6925 gpa_t *vmpointer)
6926{ 6918{
6927 gva_t gva; 6919 gva_t gva;
6928 gpa_t vmptr;
6929 struct x86_exception e; 6920 struct x86_exception e;
6930 struct page *page;
6931 struct vcpu_vmx *vmx = to_vmx(vcpu);
6932 int maxphyaddr = cpuid_maxphyaddr(vcpu);
6933 6921
6934 if (get_vmx_mem_address(vcpu, vmcs_readl(EXIT_QUALIFICATION), 6922 if (get_vmx_mem_address(vcpu, vmcs_readl(EXIT_QUALIFICATION),
6935 vmcs_read32(VMX_INSTRUCTION_INFO), false, &gva)) 6923 vmcs_read32(VMX_INSTRUCTION_INFO), false, &gva))
6936 return 1; 6924 return 1;
6937 6925
6938 if (kvm_read_guest_virt(&vcpu->arch.emulate_ctxt, gva, &vmptr, 6926 if (kvm_read_guest_virt(&vcpu->arch.emulate_ctxt, gva, vmpointer,
6939 sizeof(vmptr), &e)) { 6927 sizeof(*vmpointer), &e)) {
6940 kvm_inject_page_fault(vcpu, &e); 6928 kvm_inject_page_fault(vcpu, &e);
6941 return 1; 6929 return 1;
6942 } 6930 }
6943 6931
6944 switch (exit_reason) {
6945 case EXIT_REASON_VMON:
6946 /*
6947 * SDM 3: 24.11.5
6948 * The first 4 bytes of VMXON region contain the supported
6949 * VMCS revision identifier
6950 *
6951 * Note - IA32_VMX_BASIC[48] will never be 1
6952 * for the nested case;
6953 * which replaces physical address width with 32
6954 *
6955 */
6956 if (!PAGE_ALIGNED(vmptr) || (vmptr >> maxphyaddr)) {
6957 nested_vmx_failInvalid(vcpu);
6958 return kvm_skip_emulated_instruction(vcpu);
6959 }
6960
6961 page = nested_get_page(vcpu, vmptr);
6962 if (page == NULL) {
6963 nested_vmx_failInvalid(vcpu);
6964 return kvm_skip_emulated_instruction(vcpu);
6965 }
6966 if (*(u32 *)kmap(page) != VMCS12_REVISION) {
6967 kunmap(page);
6968 nested_release_page_clean(page);
6969 nested_vmx_failInvalid(vcpu);
6970 return kvm_skip_emulated_instruction(vcpu);
6971 }
6972 kunmap(page);
6973 nested_release_page_clean(page);
6974 vmx->nested.vmxon_ptr = vmptr;
6975 break;
6976 case EXIT_REASON_VMCLEAR:
6977 if (!PAGE_ALIGNED(vmptr) || (vmptr >> maxphyaddr)) {
6978 nested_vmx_failValid(vcpu,
6979 VMXERR_VMCLEAR_INVALID_ADDRESS);
6980 return kvm_skip_emulated_instruction(vcpu);
6981 }
6982
6983 if (vmptr == vmx->nested.vmxon_ptr) {
6984 nested_vmx_failValid(vcpu,
6985 VMXERR_VMCLEAR_VMXON_POINTER);
6986 return kvm_skip_emulated_instruction(vcpu);
6987 }
6988 break;
6989 case EXIT_REASON_VMPTRLD:
6990 if (!PAGE_ALIGNED(vmptr) || (vmptr >> maxphyaddr)) {
6991 nested_vmx_failValid(vcpu,
6992 VMXERR_VMPTRLD_INVALID_ADDRESS);
6993 return kvm_skip_emulated_instruction(vcpu);
6994 }
6995
6996 if (vmptr == vmx->nested.vmxon_ptr) {
6997 nested_vmx_failValid(vcpu,
6998 VMXERR_VMPTRLD_VMXON_POINTER);
6999 return kvm_skip_emulated_instruction(vcpu);
7000 }
7001 break;
7002 default:
7003 return 1; /* shouldn't happen */
7004 }
7005
7006 if (vmpointer)
7007 *vmpointer = vmptr;
7008 return 0; 6932 return 0;
7009} 6933}
7010 6934
@@ -7066,6 +6990,8 @@ out_msr_bitmap:
7066static int handle_vmon(struct kvm_vcpu *vcpu) 6990static int handle_vmon(struct kvm_vcpu *vcpu)
7067{ 6991{
7068 int ret; 6992 int ret;
6993 gpa_t vmptr;
6994 struct page *page;
7069 struct vcpu_vmx *vmx = to_vmx(vcpu); 6995 struct vcpu_vmx *vmx = to_vmx(vcpu);
7070 const u64 VMXON_NEEDED_FEATURES = FEATURE_CONTROL_LOCKED 6996 const u64 VMXON_NEEDED_FEATURES = FEATURE_CONTROL_LOCKED
7071 | FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX; 6997 | FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX;
@@ -7095,9 +7021,37 @@ static int handle_vmon(struct kvm_vcpu *vcpu)
7095 return 1; 7021 return 1;
7096 } 7022 }
7097 7023
7098 if (nested_vmx_check_vmptr(vcpu, EXIT_REASON_VMON, NULL)) 7024 if (nested_vmx_get_vmptr(vcpu, &vmptr))
7099 return 1; 7025 return 1;
7100 7026
7027 /*
7028 * SDM 3: 24.11.5
7029 * The first 4 bytes of VMXON region contain the supported
7030 * VMCS revision identifier
7031 *
7032 * Note - IA32_VMX_BASIC[48] will never be 1 for the nested case;
7033 * which replaces physical address width with 32
7034 */
7035 if (!PAGE_ALIGNED(vmptr) || (vmptr >> cpuid_maxphyaddr(vcpu))) {
7036 nested_vmx_failInvalid(vcpu);
7037 return kvm_skip_emulated_instruction(vcpu);
7038 }
7039
7040 page = nested_get_page(vcpu, vmptr);
7041 if (page == NULL) {
7042 nested_vmx_failInvalid(vcpu);
7043 return kvm_skip_emulated_instruction(vcpu);
7044 }
7045 if (*(u32 *)kmap(page) != VMCS12_REVISION) {
7046 kunmap(page);
7047 nested_release_page_clean(page);
7048 nested_vmx_failInvalid(vcpu);
7049 return kvm_skip_emulated_instruction(vcpu);
7050 }
7051 kunmap(page);
7052 nested_release_page_clean(page);
7053
7054 vmx->nested.vmxon_ptr = vmptr;
7101 ret = enter_vmx_operation(vcpu); 7055 ret = enter_vmx_operation(vcpu);
7102 if (ret) 7056 if (ret)
7103 return ret; 7057 return ret;
@@ -7213,9 +7167,19 @@ static int handle_vmclear(struct kvm_vcpu *vcpu)
7213 if (!nested_vmx_check_permission(vcpu)) 7167 if (!nested_vmx_check_permission(vcpu))
7214 return 1; 7168 return 1;
7215 7169
7216 if (nested_vmx_check_vmptr(vcpu, EXIT_REASON_VMCLEAR, &vmptr)) 7170 if (nested_vmx_get_vmptr(vcpu, &vmptr))
7217 return 1; 7171 return 1;
7218 7172
7173 if (!PAGE_ALIGNED(vmptr) || (vmptr >> cpuid_maxphyaddr(vcpu))) {
7174 nested_vmx_failValid(vcpu, VMXERR_VMCLEAR_INVALID_ADDRESS);
7175 return kvm_skip_emulated_instruction(vcpu);
7176 }
7177
7178 if (vmptr == vmx->nested.vmxon_ptr) {
7179 nested_vmx_failValid(vcpu, VMXERR_VMCLEAR_VMXON_POINTER);
7180 return kvm_skip_emulated_instruction(vcpu);
7181 }
7182
7219 if (vmptr == vmx->nested.current_vmptr) 7183 if (vmptr == vmx->nested.current_vmptr)
7220 nested_release_vmcs12(vmx); 7184 nested_release_vmcs12(vmx);
7221 7185
@@ -7545,9 +7509,19 @@ static int handle_vmptrld(struct kvm_vcpu *vcpu)
7545 if (!nested_vmx_check_permission(vcpu)) 7509 if (!nested_vmx_check_permission(vcpu))
7546 return 1; 7510 return 1;
7547 7511
7548 if (nested_vmx_check_vmptr(vcpu, EXIT_REASON_VMPTRLD, &vmptr)) 7512 if (nested_vmx_get_vmptr(vcpu, &vmptr))
7549 return 1; 7513 return 1;
7550 7514
7515 if (!PAGE_ALIGNED(vmptr) || (vmptr >> cpuid_maxphyaddr(vcpu))) {
7516 nested_vmx_failValid(vcpu, VMXERR_VMPTRLD_INVALID_ADDRESS);
7517 return kvm_skip_emulated_instruction(vcpu);
7518 }
7519
7520 if (vmptr == vmx->nested.vmxon_ptr) {
7521 nested_vmx_failValid(vcpu, VMXERR_VMPTRLD_VMXON_POINTER);
7522 return kvm_skip_emulated_instruction(vcpu);
7523 }
7524
7551 if (vmx->nested.current_vmptr != vmptr) { 7525 if (vmx->nested.current_vmptr != vmptr) {
7552 struct vmcs12 *new_vmcs12; 7526 struct vmcs12 *new_vmcs12;
7553 struct page *page; 7527 struct page *page;
@@ -7913,11 +7887,13 @@ static bool nested_vmx_exit_handled_cr(struct kvm_vcpu *vcpu,
7913{ 7887{
7914 unsigned long exit_qualification = vmcs_readl(EXIT_QUALIFICATION); 7888 unsigned long exit_qualification = vmcs_readl(EXIT_QUALIFICATION);
7915 int cr = exit_qualification & 15; 7889 int cr = exit_qualification & 15;
7916 int reg = (exit_qualification >> 8) & 15; 7890 int reg;
7917 unsigned long val = kvm_register_readl(vcpu, reg); 7891 unsigned long val;
7918 7892
7919 switch ((exit_qualification >> 4) & 3) { 7893 switch ((exit_qualification >> 4) & 3) {
7920 case 0: /* mov to cr */ 7894 case 0: /* mov to cr */
7895 reg = (exit_qualification >> 8) & 15;
7896 val = kvm_register_readl(vcpu, reg);
7921 switch (cr) { 7897 switch (cr) {
7922 case 0: 7898 case 0:
7923 if (vmcs12->cr0_guest_host_mask & 7899 if (vmcs12->cr0_guest_host_mask &
@@ -7972,6 +7948,7 @@ static bool nested_vmx_exit_handled_cr(struct kvm_vcpu *vcpu,
7972 * lmsw can change bits 1..3 of cr0, and only set bit 0 of 7948 * lmsw can change bits 1..3 of cr0, and only set bit 0 of
7973 * cr0. Other attempted changes are ignored, with no exit. 7949 * cr0. Other attempted changes are ignored, with no exit.
7974 */ 7950 */
7951 val = (exit_qualification >> LMSW_SOURCE_DATA_SHIFT) & 0x0f;
7975 if (vmcs12->cr0_guest_host_mask & 0xe & 7952 if (vmcs12->cr0_guest_host_mask & 0xe &
7976 (val ^ vmcs12->cr0_read_shadow)) 7953 (val ^ vmcs12->cr0_read_shadow))
7977 return true; 7954 return true;
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 02363e37d4a6..0e846f0cb83b 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -5313,6 +5313,8 @@ static void init_emulate_ctxt(struct kvm_vcpu *vcpu)
5313 kvm_x86_ops->get_cs_db_l_bits(vcpu, &cs_db, &cs_l); 5313 kvm_x86_ops->get_cs_db_l_bits(vcpu, &cs_db, &cs_l);
5314 5314
5315 ctxt->eflags = kvm_get_rflags(vcpu); 5315 ctxt->eflags = kvm_get_rflags(vcpu);
5316 ctxt->tf = (ctxt->eflags & X86_EFLAGS_TF) != 0;
5317
5316 ctxt->eip = kvm_rip_read(vcpu); 5318 ctxt->eip = kvm_rip_read(vcpu);
5317 ctxt->mode = (!is_protmode(vcpu)) ? X86EMUL_MODE_REAL : 5319 ctxt->mode = (!is_protmode(vcpu)) ? X86EMUL_MODE_REAL :
5318 (ctxt->eflags & X86_EFLAGS_VM) ? X86EMUL_MODE_VM86 : 5320 (ctxt->eflags & X86_EFLAGS_VM) ? X86EMUL_MODE_VM86 :
@@ -5528,36 +5530,25 @@ static int kvm_vcpu_check_hw_bp(unsigned long addr, u32 type, u32 dr7,
5528 return dr6; 5530 return dr6;
5529} 5531}
5530 5532
5531static void kvm_vcpu_check_singlestep(struct kvm_vcpu *vcpu, unsigned long rflags, int *r) 5533static void kvm_vcpu_do_singlestep(struct kvm_vcpu *vcpu, int *r)
5532{ 5534{
5533 struct kvm_run *kvm_run = vcpu->run; 5535 struct kvm_run *kvm_run = vcpu->run;
5534 5536
5535 /* 5537 if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) {
5536 * rflags is the old, "raw" value of the flags. The new value has 5538 kvm_run->debug.arch.dr6 = DR6_BS | DR6_FIXED_1 | DR6_RTM;
5537 * not been saved yet. 5539 kvm_run->debug.arch.pc = vcpu->arch.singlestep_rip;
5538 * 5540 kvm_run->debug.arch.exception = DB_VECTOR;
5539 * This is correct even for TF set by the guest, because "the 5541 kvm_run->exit_reason = KVM_EXIT_DEBUG;
5540 * processor will not generate this exception after the instruction 5542 *r = EMULATE_USER_EXIT;
5541 * that sets the TF flag". 5543 } else {
5542 */ 5544 /*
5543 if (unlikely(rflags & X86_EFLAGS_TF)) { 5545 * "Certain debug exceptions may clear bit 0-3. The
5544 if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) { 5546 * remaining contents of the DR6 register are never
5545 kvm_run->debug.arch.dr6 = DR6_BS | DR6_FIXED_1 | 5547 * cleared by the processor".
5546 DR6_RTM; 5548 */
5547 kvm_run->debug.arch.pc = vcpu->arch.singlestep_rip; 5549 vcpu->arch.dr6 &= ~15;
5548 kvm_run->debug.arch.exception = DB_VECTOR; 5550 vcpu->arch.dr6 |= DR6_BS | DR6_RTM;
5549 kvm_run->exit_reason = KVM_EXIT_DEBUG; 5551 kvm_queue_exception(vcpu, DB_VECTOR);
5550 *r = EMULATE_USER_EXIT;
5551 } else {
5552 /*
5553 * "Certain debug exceptions may clear bit 0-3. The
5554 * remaining contents of the DR6 register are never
5555 * cleared by the processor".
5556 */
5557 vcpu->arch.dr6 &= ~15;
5558 vcpu->arch.dr6 |= DR6_BS | DR6_RTM;
5559 kvm_queue_exception(vcpu, DB_VECTOR);
5560 }
5561 } 5552 }
5562} 5553}
5563 5554
@@ -5567,7 +5558,17 @@ int kvm_skip_emulated_instruction(struct kvm_vcpu *vcpu)
5567 int r = EMULATE_DONE; 5558 int r = EMULATE_DONE;
5568 5559
5569 kvm_x86_ops->skip_emulated_instruction(vcpu); 5560 kvm_x86_ops->skip_emulated_instruction(vcpu);
5570 kvm_vcpu_check_singlestep(vcpu, rflags, &r); 5561
5562 /*
5563 * rflags is the old, "raw" value of the flags. The new value has
5564 * not been saved yet.
5565 *
5566 * This is correct even for TF set by the guest, because "the
5567 * processor will not generate this exception after the instruction
5568 * that sets the TF flag".
5569 */
5570 if (unlikely(rflags & X86_EFLAGS_TF))
5571 kvm_vcpu_do_singlestep(vcpu, &r);
5571 return r == EMULATE_DONE; 5572 return r == EMULATE_DONE;
5572} 5573}
5573EXPORT_SYMBOL_GPL(kvm_skip_emulated_instruction); 5574EXPORT_SYMBOL_GPL(kvm_skip_emulated_instruction);
@@ -5726,8 +5727,9 @@ restart:
5726 toggle_interruptibility(vcpu, ctxt->interruptibility); 5727 toggle_interruptibility(vcpu, ctxt->interruptibility);
5727 vcpu->arch.emulate_regs_need_sync_to_vcpu = false; 5728 vcpu->arch.emulate_regs_need_sync_to_vcpu = false;
5728 kvm_rip_write(vcpu, ctxt->eip); 5729 kvm_rip_write(vcpu, ctxt->eip);
5729 if (r == EMULATE_DONE) 5730 if (r == EMULATE_DONE &&
5730 kvm_vcpu_check_singlestep(vcpu, rflags, &r); 5731 (ctxt->tf || (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP)))
5732 kvm_vcpu_do_singlestep(vcpu, &r);
5731 if (!ctxt->have_exception || 5733 if (!ctxt->have_exception ||
5732 exception_type(ctxt->exception.vector) == EXCPT_TRAP) 5734 exception_type(ctxt->exception.vector) == EXCPT_TRAP)
5733 __kvm_set_rflags(vcpu, ctxt->eflags); 5735 __kvm_set_rflags(vcpu, ctxt->eflags);
@@ -8394,10 +8396,13 @@ static inline bool kvm_vcpu_has_events(struct kvm_vcpu *vcpu)
8394 if (vcpu->arch.pv.pv_unhalted) 8396 if (vcpu->arch.pv.pv_unhalted)
8395 return true; 8397 return true;
8396 8398
8397 if (atomic_read(&vcpu->arch.nmi_queued)) 8399 if (kvm_test_request(KVM_REQ_NMI, vcpu) ||
8400 (vcpu->arch.nmi_pending &&
8401 kvm_x86_ops->nmi_allowed(vcpu)))
8398 return true; 8402 return true;
8399 8403
8400 if (kvm_test_request(KVM_REQ_SMI, vcpu)) 8404 if (kvm_test_request(KVM_REQ_SMI, vcpu) ||
8405 (vcpu->arch.smi_pending && !is_smm(vcpu)))
8401 return true; 8406 return true;
8402 8407
8403 if (kvm_arch_interrupt_allowed(vcpu) && 8408 if (kvm_arch_interrupt_allowed(vcpu) &&
@@ -8604,8 +8609,7 @@ bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu)
8604 if (!(vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED)) 8609 if (!(vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED))
8605 return true; 8610 return true;
8606 else 8611 else
8607 return !kvm_event_needs_reinjection(vcpu) && 8612 return kvm_can_do_async_pf(vcpu);
8608 kvm_x86_ops->interrupt_allowed(vcpu);
8609} 8613}
8610 8614
8611void kvm_arch_start_assignment(struct kvm *kvm) 8615void kvm_arch_start_assignment(struct kvm *kvm)
diff --git a/arch/x86/mm/extable.c b/arch/x86/mm/extable.c
index 35ea061010a1..0ea8afcb929c 100644
--- a/arch/x86/mm/extable.c
+++ b/arch/x86/mm/extable.c
@@ -162,6 +162,9 @@ void __init early_fixup_exception(struct pt_regs *regs, int trapnr)
162 if (fixup_exception(regs, trapnr)) 162 if (fixup_exception(regs, trapnr))
163 return; 163 return;
164 164
165 if (fixup_bug(regs, trapnr))
166 return;
167
165fail: 168fail:
166 early_printk("PANIC: early exception 0x%02x IP %lx:%lx error %lx cr2 0x%lx\n", 169 early_printk("PANIC: early exception 0x%02x IP %lx:%lx error %lx cr2 0x%lx\n",
167 (unsigned)trapnr, (unsigned long)regs->cs, regs->ip, 170 (unsigned)trapnr, (unsigned long)regs->cs, regs->ip,
diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c
index 302f43fd9c28..adad702b39cd 100644
--- a/arch/x86/mm/hugetlbpage.c
+++ b/arch/x86/mm/hugetlbpage.c
@@ -148,7 +148,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
148 addr = ALIGN(addr, huge_page_size(h)); 148 addr = ALIGN(addr, huge_page_size(h));
149 vma = find_vma(mm, addr); 149 vma = find_vma(mm, addr);
150 if (TASK_SIZE - len >= addr && 150 if (TASK_SIZE - len >= addr &&
151 (!vma || addr + len <= vma->vm_start)) 151 (!vma || addr + len <= vm_start_gap(vma)))
152 return addr; 152 return addr;
153 } 153 }
154 if (mm->get_unmapped_area == arch_get_unmapped_area) 154 if (mm->get_unmapped_area == arch_get_unmapped_area)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index cbc87ea98751..9b3f9fa5b283 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -161,16 +161,16 @@ static int page_size_mask;
161 161
162static void __init probe_page_size_mask(void) 162static void __init probe_page_size_mask(void)
163{ 163{
164#if !defined(CONFIG_KMEMCHECK)
165 /* 164 /*
166 * For CONFIG_KMEMCHECK or pagealloc debugging, identity mapping will 165 * For CONFIG_KMEMCHECK or pagealloc debugging, identity mapping will
167 * use small pages. 166 * use small pages.
168 * This will simplify cpa(), which otherwise needs to support splitting 167 * This will simplify cpa(), which otherwise needs to support splitting
169 * large pages into small in interrupt context, etc. 168 * large pages into small in interrupt context, etc.
170 */ 169 */
171 if (boot_cpu_has(X86_FEATURE_PSE) && !debug_pagealloc_enabled()) 170 if (boot_cpu_has(X86_FEATURE_PSE) && !debug_pagealloc_enabled() && !IS_ENABLED(CONFIG_KMEMCHECK))
172 page_size_mask |= 1 << PG_LEVEL_2M; 171 page_size_mask |= 1 << PG_LEVEL_2M;
173#endif 172 else
173 direct_gbpages = 0;
174 174
175 /* Enable PSE if available */ 175 /* Enable PSE if available */
176 if (boot_cpu_has(X86_FEATURE_PSE)) 176 if (boot_cpu_has(X86_FEATURE_PSE))
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 95651dc58e09..0a59daf799f8 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -990,7 +990,13 @@ remove_p4d_table(p4d_t *p4d_start, unsigned long addr, unsigned long end,
990 990
991 pud_base = pud_offset(p4d, 0); 991 pud_base = pud_offset(p4d, 0);
992 remove_pud_table(pud_base, addr, next, direct); 992 remove_pud_table(pud_base, addr, next, direct);
993 free_pud_table(pud_base, p4d); 993 /*
994 * For 4-level page tables we do not want to free PUDs, but in the
995 * 5-level case we should free them. This code will have to change
996 * to adapt for boot-time switching between 4 and 5 level page tables.
997 */
998 if (CONFIG_PGTABLE_LEVELS == 5)
999 free_pud_table(pud_base, p4d);
994 } 1000 }
995 1001
996 if (direct) 1002 if (direct)
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index 1dcd2be4cce4..c8520b2c62d2 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -186,7 +186,7 @@ static void cpa_flush_range(unsigned long start, int numpages, int cache)
186 unsigned int i, level; 186 unsigned int i, level;
187 unsigned long addr; 187 unsigned long addr;
188 188
189 BUG_ON(irqs_disabled()); 189 BUG_ON(irqs_disabled() && !early_boot_irqs_disabled);
190 WARN_ON(PAGE_ALIGN(start) != start); 190 WARN_ON(PAGE_ALIGN(start) != start);
191 191
192 on_each_cpu(__cpa_flush_range, NULL, 1); 192 on_each_cpu(__cpa_flush_range, NULL, 1);
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index 7e76a4d8304b..43b96f5f78ba 100644
--- a/arch/x86/platform/efi/efi.c
+++ b/arch/x86/platform/efi/efi.c
@@ -828,9 +828,11 @@ static void __init kexec_enter_virtual_mode(void)
828 828
829 /* 829 /*
830 * We don't do virtual mode, since we don't do runtime services, on 830 * We don't do virtual mode, since we don't do runtime services, on
831 * non-native EFI 831 * non-native EFI. With efi=old_map, we don't do runtime services in
832 * kexec kernel because in the initial boot something else might
833 * have been mapped at these virtual addresses.
832 */ 834 */
833 if (!efi_is_native()) { 835 if (!efi_is_native() || efi_enabled(EFI_OLD_MEMMAP)) {
834 efi_memmap_unmap(); 836 efi_memmap_unmap();
835 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags); 837 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
836 return; 838 return;
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
index c488625c9712..eb8dff15a7f6 100644
--- a/arch/x86/platform/efi/efi_64.c
+++ b/arch/x86/platform/efi/efi_64.c
@@ -71,11 +71,13 @@ static void __init early_code_mapping_set_exec(int executable)
71 71
72pgd_t * __init efi_call_phys_prolog(void) 72pgd_t * __init efi_call_phys_prolog(void)
73{ 73{
74 unsigned long vaddress; 74 unsigned long vaddr, addr_pgd, addr_p4d, addr_pud;
75 pgd_t *save_pgd; 75 pgd_t *save_pgd, *pgd_k, *pgd_efi;
76 p4d_t *p4d, *p4d_k, *p4d_efi;
77 pud_t *pud;
76 78
77 int pgd; 79 int pgd;
78 int n_pgds; 80 int n_pgds, i, j;
79 81
80 if (!efi_enabled(EFI_OLD_MEMMAP)) { 82 if (!efi_enabled(EFI_OLD_MEMMAP)) {
81 save_pgd = (pgd_t *)read_cr3(); 83 save_pgd = (pgd_t *)read_cr3();
@@ -88,10 +90,49 @@ pgd_t * __init efi_call_phys_prolog(void)
88 n_pgds = DIV_ROUND_UP((max_pfn << PAGE_SHIFT), PGDIR_SIZE); 90 n_pgds = DIV_ROUND_UP((max_pfn << PAGE_SHIFT), PGDIR_SIZE);
89 save_pgd = kmalloc_array(n_pgds, sizeof(*save_pgd), GFP_KERNEL); 91 save_pgd = kmalloc_array(n_pgds, sizeof(*save_pgd), GFP_KERNEL);
90 92
93 /*
94 * Build 1:1 identity mapping for efi=old_map usage. Note that
95 * PAGE_OFFSET is PGDIR_SIZE aligned when KASLR is disabled, while
96 * it is PUD_SIZE ALIGNED with KASLR enabled. So for a given physical
97 * address X, the pud_index(X) != pud_index(__va(X)), we can only copy
98 * PUD entry of __va(X) to fill in pud entry of X to build 1:1 mapping.
99 * This means here we can only reuse the PMD tables of the direct mapping.
100 */
91 for (pgd = 0; pgd < n_pgds; pgd++) { 101 for (pgd = 0; pgd < n_pgds; pgd++) {
92 save_pgd[pgd] = *pgd_offset_k(pgd * PGDIR_SIZE); 102 addr_pgd = (unsigned long)(pgd * PGDIR_SIZE);
93 vaddress = (unsigned long)__va(pgd * PGDIR_SIZE); 103 vaddr = (unsigned long)__va(pgd * PGDIR_SIZE);
94 set_pgd(pgd_offset_k(pgd * PGDIR_SIZE), *pgd_offset_k(vaddress)); 104 pgd_efi = pgd_offset_k(addr_pgd);
105 save_pgd[pgd] = *pgd_efi;
106
107 p4d = p4d_alloc(&init_mm, pgd_efi, addr_pgd);
108 if (!p4d) {
109 pr_err("Failed to allocate p4d table!\n");
110 goto out;
111 }
112
113 for (i = 0; i < PTRS_PER_P4D; i++) {
114 addr_p4d = addr_pgd + i * P4D_SIZE;
115 p4d_efi = p4d + p4d_index(addr_p4d);
116
117 pud = pud_alloc(&init_mm, p4d_efi, addr_p4d);
118 if (!pud) {
119 pr_err("Failed to allocate pud table!\n");
120 goto out;
121 }
122
123 for (j = 0; j < PTRS_PER_PUD; j++) {
124 addr_pud = addr_p4d + j * PUD_SIZE;
125
126 if (addr_pud > (max_pfn << PAGE_SHIFT))
127 break;
128
129 vaddr = (unsigned long)__va(addr_pud);
130
131 pgd_k = pgd_offset_k(vaddr);
132 p4d_k = p4d_offset(pgd_k, vaddr);
133 pud[j] = *pud_offset(p4d_k, vaddr);
134 }
135 }
95 } 136 }
96out: 137out:
97 __flush_tlb_all(); 138 __flush_tlb_all();
@@ -104,8 +145,11 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd)
104 /* 145 /*
105 * After the lock is released, the original page table is restored. 146 * After the lock is released, the original page table is restored.
106 */ 147 */
107 int pgd_idx; 148 int pgd_idx, i;
108 int nr_pgds; 149 int nr_pgds;
150 pgd_t *pgd;
151 p4d_t *p4d;
152 pud_t *pud;
109 153
110 if (!efi_enabled(EFI_OLD_MEMMAP)) { 154 if (!efi_enabled(EFI_OLD_MEMMAP)) {
111 write_cr3((unsigned long)save_pgd); 155 write_cr3((unsigned long)save_pgd);
@@ -115,9 +159,28 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd)
115 159
116 nr_pgds = DIV_ROUND_UP((max_pfn << PAGE_SHIFT) , PGDIR_SIZE); 160 nr_pgds = DIV_ROUND_UP((max_pfn << PAGE_SHIFT) , PGDIR_SIZE);
117 161
118 for (pgd_idx = 0; pgd_idx < nr_pgds; pgd_idx++) 162 for (pgd_idx = 0; pgd_idx < nr_pgds; pgd_idx++) {
163 pgd = pgd_offset_k(pgd_idx * PGDIR_SIZE);
119 set_pgd(pgd_offset_k(pgd_idx * PGDIR_SIZE), save_pgd[pgd_idx]); 164 set_pgd(pgd_offset_k(pgd_idx * PGDIR_SIZE), save_pgd[pgd_idx]);
120 165
166 if (!(pgd_val(*pgd) & _PAGE_PRESENT))
167 continue;
168
169 for (i = 0; i < PTRS_PER_P4D; i++) {
170 p4d = p4d_offset(pgd,
171 pgd_idx * PGDIR_SIZE + i * P4D_SIZE);
172
173 if (!(p4d_val(*p4d) & _PAGE_PRESENT))
174 continue;
175
176 pud = (pud_t *)p4d_page_vaddr(*p4d);
177 pud_free(&init_mm, pud);
178 }
179
180 p4d = (p4d_t *)pgd_page_vaddr(*pgd);
181 p4d_free(&init_mm, p4d);
182 }
183
121 kfree(save_pgd); 184 kfree(save_pgd);
122 185
123 __flush_tlb_all(); 186 __flush_tlb_all();
diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c
index 26615991d69c..e0cf95a83f3f 100644
--- a/arch/x86/platform/efi/quirks.c
+++ b/arch/x86/platform/efi/quirks.c
@@ -360,6 +360,9 @@ void __init efi_free_boot_services(void)
360 free_bootmem_late(start, size); 360 free_bootmem_late(start, size);
361 } 361 }
362 362
363 if (!num_entries)
364 return;
365
363 new_size = efi.memmap.desc_size * num_entries; 366 new_size = efi.memmap.desc_size * num_entries;
364 new_phys = efi_memmap_alloc(num_entries); 367 new_phys = efi_memmap_alloc(num_entries);
365 if (!new_phys) { 368 if (!new_phys) {
diff --git a/arch/xtensa/include/asm/irq.h b/arch/xtensa/include/asm/irq.h
index f71f88ea7646..19707db966f1 100644
--- a/arch/xtensa/include/asm/irq.h
+++ b/arch/xtensa/include/asm/irq.h
@@ -29,7 +29,8 @@ static inline void variant_irq_disable(unsigned int irq) { }
29# define PLATFORM_NR_IRQS 0 29# define PLATFORM_NR_IRQS 0
30#endif 30#endif
31#define XTENSA_NR_IRQS XCHAL_NUM_INTERRUPTS 31#define XTENSA_NR_IRQS XCHAL_NUM_INTERRUPTS
32#define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS) 32#define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS + 1)
33#define XTENSA_PIC_LINUX_IRQ(hwirq) ((hwirq) + 1)
33 34
34#if VARIANT_NR_IRQS == 0 35#if VARIANT_NR_IRQS == 0
35static inline void variant_init_irq(void) { } 36static inline void variant_init_irq(void) { }
diff --git a/arch/xtensa/include/asm/processor.h b/arch/xtensa/include/asm/processor.h
index 003eeee3fbc6..30ee8c608853 100644
--- a/arch/xtensa/include/asm/processor.h
+++ b/arch/xtensa/include/asm/processor.h
@@ -213,8 +213,6 @@ struct mm_struct;
213#define release_segments(mm) do { } while(0) 213#define release_segments(mm) do { } while(0)
214#define forget_segments() do { } while (0) 214#define forget_segments() do { } while (0)
215 215
216#define thread_saved_pc(tsk) (task_pt_regs(tsk)->pc)
217
218extern unsigned long get_wchan(struct task_struct *p); 216extern unsigned long get_wchan(struct task_struct *p);
219 217
220#define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc) 218#define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc)
diff --git a/arch/xtensa/kernel/irq.c b/arch/xtensa/kernel/irq.c
index a265edd6ac37..99341028cc77 100644
--- a/arch/xtensa/kernel/irq.c
+++ b/arch/xtensa/kernel/irq.c
@@ -34,11 +34,6 @@ asmlinkage void do_IRQ(int hwirq, struct pt_regs *regs)
34{ 34{
35 int irq = irq_find_mapping(NULL, hwirq); 35 int irq = irq_find_mapping(NULL, hwirq);
36 36
37 if (hwirq >= NR_IRQS) {
38 printk(KERN_EMERG "%s: cannot handle IRQ %d\n",
39 __func__, hwirq);
40 }
41
42#ifdef CONFIG_DEBUG_STACKOVERFLOW 37#ifdef CONFIG_DEBUG_STACKOVERFLOW
43 /* Debugging check for stack overflow: is there less than 1KB free? */ 38 /* Debugging check for stack overflow: is there less than 1KB free? */
44 { 39 {
diff --git a/arch/xtensa/kernel/setup.c b/arch/xtensa/kernel/setup.c
index 394ef08300b6..33bfa5270d95 100644
--- a/arch/xtensa/kernel/setup.c
+++ b/arch/xtensa/kernel/setup.c
@@ -593,8 +593,7 @@ c_show(struct seq_file *f, void *slot)
593 (ccount_freq/10000) % 100, 593 (ccount_freq/10000) % 100,
594 loops_per_jiffy/(500000/HZ), 594 loops_per_jiffy/(500000/HZ),
595 (loops_per_jiffy/(5000/HZ)) % 100); 595 (loops_per_jiffy/(5000/HZ)) % 100);
596 596 seq_puts(f, "flags\t\t: "
597 seq_printf(f,"flags\t\t: "
598#if XCHAL_HAVE_NMI 597#if XCHAL_HAVE_NMI
599 "nmi " 598 "nmi "
600#endif 599#endif
diff --git a/arch/xtensa/kernel/syscall.c b/arch/xtensa/kernel/syscall.c
index 06937928cb72..74afbf02d07e 100644
--- a/arch/xtensa/kernel/syscall.c
+++ b/arch/xtensa/kernel/syscall.c
@@ -88,7 +88,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
88 /* At this point: (!vmm || addr < vmm->vm_end). */ 88 /* At this point: (!vmm || addr < vmm->vm_end). */
89 if (TASK_SIZE - len < addr) 89 if (TASK_SIZE - len < addr)
90 return -ENOMEM; 90 return -ENOMEM;
91 if (!vmm || addr + len <= vmm->vm_start) 91 if (!vmm || addr + len <= vm_start_gap(vmm))
92 return addr; 92 return addr;
93 addr = vmm->vm_end; 93 addr = vmm->vm_end;
94 if (flags & MAP_SHARED) 94 if (flags & MAP_SHARED)
diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S
index 30d9fc21e076..162c77e53ca8 100644
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -118,7 +118,7 @@ SECTIONS
118 SECTION_VECTOR (.KernelExceptionVector.text, KERNEL_VECTOR_VADDR) 118 SECTION_VECTOR (.KernelExceptionVector.text, KERNEL_VECTOR_VADDR)
119 SECTION_VECTOR (.UserExceptionVector.literal, USER_VECTOR_VADDR - 4) 119 SECTION_VECTOR (.UserExceptionVector.literal, USER_VECTOR_VADDR - 4)
120 SECTION_VECTOR (.UserExceptionVector.text, USER_VECTOR_VADDR) 120 SECTION_VECTOR (.UserExceptionVector.text, USER_VECTOR_VADDR)
121 SECTION_VECTOR (.DoubleExceptionVector.literal, DOUBLEEXC_VECTOR_VADDR - 48) 121 SECTION_VECTOR (.DoubleExceptionVector.literal, DOUBLEEXC_VECTOR_VADDR - 20)
122 SECTION_VECTOR (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR) 122 SECTION_VECTOR (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR)
123#endif 123#endif
124 124
@@ -306,13 +306,13 @@ SECTIONS
306 .UserExceptionVector.literal) 306 .UserExceptionVector.literal)
307 SECTION_VECTOR (_DoubleExceptionVector_literal, 307 SECTION_VECTOR (_DoubleExceptionVector_literal,
308 .DoubleExceptionVector.literal, 308 .DoubleExceptionVector.literal,
309 DOUBLEEXC_VECTOR_VADDR - 48, 309 DOUBLEEXC_VECTOR_VADDR - 20,
310 SIZEOF(.UserExceptionVector.text), 310 SIZEOF(.UserExceptionVector.text),
311 .UserExceptionVector.text) 311 .UserExceptionVector.text)
312 SECTION_VECTOR (_DoubleExceptionVector_text, 312 SECTION_VECTOR (_DoubleExceptionVector_text,
313 .DoubleExceptionVector.text, 313 .DoubleExceptionVector.text,
314 DOUBLEEXC_VECTOR_VADDR, 314 DOUBLEEXC_VECTOR_VADDR,
315 48, 315 20,
316 .DoubleExceptionVector.literal) 316 .DoubleExceptionVector.literal)
317 317
318 . = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3; 318 . = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3;
diff --git a/arch/xtensa/platforms/iss/simdisk.c b/arch/xtensa/platforms/iss/simdisk.c
index 02e94bb3ad3e..c45b90bb9339 100644
--- a/arch/xtensa/platforms/iss/simdisk.c
+++ b/arch/xtensa/platforms/iss/simdisk.c
@@ -317,8 +317,7 @@ static int __init simdisk_init(void)
317 if (simdisk_count > MAX_SIMDISK_COUNT) 317 if (simdisk_count > MAX_SIMDISK_COUNT)
318 simdisk_count = MAX_SIMDISK_COUNT; 318 simdisk_count = MAX_SIMDISK_COUNT;
319 319
320 sddev = kmalloc(simdisk_count * sizeof(struct simdisk), 320 sddev = kmalloc_array(simdisk_count, sizeof(*sddev), GFP_KERNEL);
321 GFP_KERNEL);
322 if (sddev == NULL) 321 if (sddev == NULL)
323 goto out_unregister; 322 goto out_unregister;
324 323
diff --git a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
index dbeea2b440a1..1fda7e20dfcb 100644
--- a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
+++ b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
@@ -24,16 +24,18 @@
24 24
25/* Interrupt configuration. */ 25/* Interrupt configuration. */
26 26
27#define PLATFORM_NR_IRQS 10 27#define PLATFORM_NR_IRQS 0
28 28
29/* Default assignment of LX60 devices to external interrupts. */ 29/* Default assignment of LX60 devices to external interrupts. */
30 30
31#ifdef CONFIG_XTENSA_MX 31#ifdef CONFIG_XTENSA_MX
32#define DUART16552_INTNUM XCHAL_EXTINT3_NUM 32#define DUART16552_INTNUM XCHAL_EXTINT3_NUM
33#define OETH_IRQ XCHAL_EXTINT4_NUM 33#define OETH_IRQ XCHAL_EXTINT4_NUM
34#define C67X00_IRQ XCHAL_EXTINT8_NUM
34#else 35#else
35#define DUART16552_INTNUM XCHAL_EXTINT0_NUM 36#define DUART16552_INTNUM XCHAL_EXTINT0_NUM
36#define OETH_IRQ XCHAL_EXTINT1_NUM 37#define OETH_IRQ XCHAL_EXTINT1_NUM
38#define C67X00_IRQ XCHAL_EXTINT5_NUM
37#endif 39#endif
38 40
39/* 41/*
@@ -63,5 +65,5 @@
63 65
64#define C67X00_PADDR (XCHAL_KIO_PADDR + 0x0D0D0000) 66#define C67X00_PADDR (XCHAL_KIO_PADDR + 0x0D0D0000)
65#define C67X00_SIZE 0x10 67#define C67X00_SIZE 0x10
66#define C67X00_IRQ 5 68
67#endif /* __XTENSA_XTAVNET_HARDWARE_H */ 69#endif /* __XTENSA_XTAVNET_HARDWARE_H */
diff --git a/arch/xtensa/platforms/xtfpga/setup.c b/arch/xtensa/platforms/xtfpga/setup.c
index 779be723eb2b..42285f35d313 100644
--- a/arch/xtensa/platforms/xtfpga/setup.c
+++ b/arch/xtensa/platforms/xtfpga/setup.c
@@ -175,8 +175,8 @@ static struct resource ethoc_res[] = {
175 .flags = IORESOURCE_MEM, 175 .flags = IORESOURCE_MEM,
176 }, 176 },
177 [2] = { /* IRQ number */ 177 [2] = { /* IRQ number */
178 .start = OETH_IRQ, 178 .start = XTENSA_PIC_LINUX_IRQ(OETH_IRQ),
179 .end = OETH_IRQ, 179 .end = XTENSA_PIC_LINUX_IRQ(OETH_IRQ),
180 .flags = IORESOURCE_IRQ, 180 .flags = IORESOURCE_IRQ,
181 }, 181 },
182}; 182};
@@ -213,8 +213,8 @@ static struct resource c67x00_res[] = {
213 .flags = IORESOURCE_MEM, 213 .flags = IORESOURCE_MEM,
214 }, 214 },
215 [1] = { /* IRQ number */ 215 [1] = { /* IRQ number */
216 .start = C67X00_IRQ, 216 .start = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ),
217 .end = C67X00_IRQ, 217 .end = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ),
218 .flags = IORESOURCE_IRQ, 218 .flags = IORESOURCE_IRQ,
219 }, 219 },
220}; 220};
@@ -247,7 +247,7 @@ static struct resource serial_resource = {
247static struct plat_serial8250_port serial_platform_data[] = { 247static struct plat_serial8250_port serial_platform_data[] = {
248 [0] = { 248 [0] = {
249 .mapbase = DUART16552_PADDR, 249 .mapbase = DUART16552_PADDR,
250 .irq = DUART16552_INTNUM, 250 .irq = XTENSA_PIC_LINUX_IRQ(DUART16552_INTNUM),
251 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | 251 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
252 UPF_IOREMAP, 252 UPF_IOREMAP,
253 .iotype = XCHAL_HAVE_BE ? UPIO_MEM32BE : UPIO_MEM32, 253 .iotype = XCHAL_HAVE_BE ? UPIO_MEM32BE : UPIO_MEM32,
diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c
index c8a32fb345cf..78b2e0db4fb2 100644
--- a/block/bfq-cgroup.c
+++ b/block/bfq-cgroup.c
@@ -52,7 +52,7 @@ BFQG_FLAG_FNS(idling)
52BFQG_FLAG_FNS(empty) 52BFQG_FLAG_FNS(empty)
53#undef BFQG_FLAG_FNS 53#undef BFQG_FLAG_FNS
54 54
55/* This should be called with the queue_lock held. */ 55/* This should be called with the scheduler lock held. */
56static void bfqg_stats_update_group_wait_time(struct bfqg_stats *stats) 56static void bfqg_stats_update_group_wait_time(struct bfqg_stats *stats)
57{ 57{
58 unsigned long long now; 58 unsigned long long now;
@@ -67,7 +67,7 @@ static void bfqg_stats_update_group_wait_time(struct bfqg_stats *stats)
67 bfqg_stats_clear_waiting(stats); 67 bfqg_stats_clear_waiting(stats);
68} 68}
69 69
70/* This should be called with the queue_lock held. */ 70/* This should be called with the scheduler lock held. */
71static void bfqg_stats_set_start_group_wait_time(struct bfq_group *bfqg, 71static void bfqg_stats_set_start_group_wait_time(struct bfq_group *bfqg,
72 struct bfq_group *curr_bfqg) 72 struct bfq_group *curr_bfqg)
73{ 73{
@@ -81,7 +81,7 @@ static void bfqg_stats_set_start_group_wait_time(struct bfq_group *bfqg,
81 bfqg_stats_mark_waiting(stats); 81 bfqg_stats_mark_waiting(stats);
82} 82}
83 83
84/* This should be called with the queue_lock held. */ 84/* This should be called with the scheduler lock held. */
85static void bfqg_stats_end_empty_time(struct bfqg_stats *stats) 85static void bfqg_stats_end_empty_time(struct bfqg_stats *stats)
86{ 86{
87 unsigned long long now; 87 unsigned long long now;
@@ -203,12 +203,30 @@ struct bfq_group *bfqq_group(struct bfq_queue *bfqq)
203 203
204static void bfqg_get(struct bfq_group *bfqg) 204static void bfqg_get(struct bfq_group *bfqg)
205{ 205{
206 return blkg_get(bfqg_to_blkg(bfqg)); 206 bfqg->ref++;
207} 207}
208 208
209void bfqg_put(struct bfq_group *bfqg) 209void bfqg_put(struct bfq_group *bfqg)
210{ 210{
211 return blkg_put(bfqg_to_blkg(bfqg)); 211 bfqg->ref--;
212
213 if (bfqg->ref == 0)
214 kfree(bfqg);
215}
216
217static void bfqg_and_blkg_get(struct bfq_group *bfqg)
218{
219 /* see comments in bfq_bic_update_cgroup for why refcounting bfqg */
220 bfqg_get(bfqg);
221
222 blkg_get(bfqg_to_blkg(bfqg));
223}
224
225void bfqg_and_blkg_put(struct bfq_group *bfqg)
226{
227 bfqg_put(bfqg);
228
229 blkg_put(bfqg_to_blkg(bfqg));
212} 230}
213 231
214void bfqg_stats_update_io_add(struct bfq_group *bfqg, struct bfq_queue *bfqq, 232void bfqg_stats_update_io_add(struct bfq_group *bfqg, struct bfq_queue *bfqq,
@@ -312,7 +330,11 @@ void bfq_init_entity(struct bfq_entity *entity, struct bfq_group *bfqg)
312 if (bfqq) { 330 if (bfqq) {
313 bfqq->ioprio = bfqq->new_ioprio; 331 bfqq->ioprio = bfqq->new_ioprio;
314 bfqq->ioprio_class = bfqq->new_ioprio_class; 332 bfqq->ioprio_class = bfqq->new_ioprio_class;
315 bfqg_get(bfqg); 333 /*
334 * Make sure that bfqg and its associated blkg do not
335 * disappear before entity.
336 */
337 bfqg_and_blkg_get(bfqg);
316 } 338 }
317 entity->parent = bfqg->my_entity; /* NULL for root group */ 339 entity->parent = bfqg->my_entity; /* NULL for root group */
318 entity->sched_data = &bfqg->sched_data; 340 entity->sched_data = &bfqg->sched_data;
@@ -399,6 +421,8 @@ struct blkg_policy_data *bfq_pd_alloc(gfp_t gfp, int node)
399 return NULL; 421 return NULL;
400 } 422 }
401 423
424 /* see comments in bfq_bic_update_cgroup for why refcounting */
425 bfqg_get(bfqg);
402 return &bfqg->pd; 426 return &bfqg->pd;
403} 427}
404 428
@@ -426,7 +450,7 @@ void bfq_pd_free(struct blkg_policy_data *pd)
426 struct bfq_group *bfqg = pd_to_bfqg(pd); 450 struct bfq_group *bfqg = pd_to_bfqg(pd);
427 451
428 bfqg_stats_exit(&bfqg->stats); 452 bfqg_stats_exit(&bfqg->stats);
429 return kfree(bfqg); 453 bfqg_put(bfqg);
430} 454}
431 455
432void bfq_pd_reset_stats(struct blkg_policy_data *pd) 456void bfq_pd_reset_stats(struct blkg_policy_data *pd)
@@ -496,9 +520,10 @@ struct bfq_group *bfq_find_set_group(struct bfq_data *bfqd,
496 * Move @bfqq to @bfqg, deactivating it from its old group and reactivating 520 * Move @bfqq to @bfqg, deactivating it from its old group and reactivating
497 * it on the new one. Avoid putting the entity on the old group idle tree. 521 * it on the new one. Avoid putting the entity on the old group idle tree.
498 * 522 *
499 * Must be called under the queue lock; the cgroup owning @bfqg must 523 * Must be called under the scheduler lock, to make sure that the blkg
500 * not disappear (by now this just means that we are called under 524 * owning @bfqg does not disappear (see comments in
501 * rcu_read_lock()). 525 * bfq_bic_update_cgroup on guaranteeing the consistency of blkg
526 * objects).
502 */ 527 */
503void bfq_bfqq_move(struct bfq_data *bfqd, struct bfq_queue *bfqq, 528void bfq_bfqq_move(struct bfq_data *bfqd, struct bfq_queue *bfqq,
504 struct bfq_group *bfqg) 529 struct bfq_group *bfqg)
@@ -519,16 +544,12 @@ void bfq_bfqq_move(struct bfq_data *bfqd, struct bfq_queue *bfqq,
519 bfq_deactivate_bfqq(bfqd, bfqq, false, false); 544 bfq_deactivate_bfqq(bfqd, bfqq, false, false);
520 else if (entity->on_st) 545 else if (entity->on_st)
521 bfq_put_idle_entity(bfq_entity_service_tree(entity), entity); 546 bfq_put_idle_entity(bfq_entity_service_tree(entity), entity);
522 bfqg_put(bfqq_group(bfqq)); 547 bfqg_and_blkg_put(bfqq_group(bfqq));
523 548
524 /*
525 * Here we use a reference to bfqg. We don't need a refcounter
526 * as the cgroup reference will not be dropped, so that its
527 * destroy() callback will not be invoked.
528 */
529 entity->parent = bfqg->my_entity; 549 entity->parent = bfqg->my_entity;
530 entity->sched_data = &bfqg->sched_data; 550 entity->sched_data = &bfqg->sched_data;
531 bfqg_get(bfqg); 551 /* pin down bfqg and its associated blkg */
552 bfqg_and_blkg_get(bfqg);
532 553
533 if (bfq_bfqq_busy(bfqq)) { 554 if (bfq_bfqq_busy(bfqq)) {
534 bfq_pos_tree_add_move(bfqd, bfqq); 555 bfq_pos_tree_add_move(bfqd, bfqq);
@@ -545,8 +566,9 @@ void bfq_bfqq_move(struct bfq_data *bfqd, struct bfq_queue *bfqq,
545 * @bic: the bic to move. 566 * @bic: the bic to move.
546 * @blkcg: the blk-cgroup to move to. 567 * @blkcg: the blk-cgroup to move to.
547 * 568 *
548 * Move bic to blkcg, assuming that bfqd->queue is locked; the caller 569 * Move bic to blkcg, assuming that bfqd->lock is held; which makes
549 * has to make sure that the reference to cgroup is valid across the call. 570 * sure that the reference to cgroup is valid across the call (see
571 * comments in bfq_bic_update_cgroup on this issue)
550 * 572 *
551 * NOTE: an alternative approach might have been to store the current 573 * NOTE: an alternative approach might have been to store the current
552 * cgroup in bfqq and getting a reference to it, reducing the lookup 574 * cgroup in bfqq and getting a reference to it, reducing the lookup
@@ -604,6 +626,57 @@ void bfq_bic_update_cgroup(struct bfq_io_cq *bic, struct bio *bio)
604 goto out; 626 goto out;
605 627
606 bfqg = __bfq_bic_change_cgroup(bfqd, bic, bio_blkcg(bio)); 628 bfqg = __bfq_bic_change_cgroup(bfqd, bic, bio_blkcg(bio));
629 /*
630 * Update blkg_path for bfq_log_* functions. We cache this
631 * path, and update it here, for the following
632 * reasons. Operations on blkg objects in blk-cgroup are
633 * protected with the request_queue lock, and not with the
634 * lock that protects the instances of this scheduler
635 * (bfqd->lock). This exposes BFQ to the following sort of
636 * race.
637 *
638 * The blkg_lookup performed in bfq_get_queue, protected
639 * through rcu, may happen to return the address of a copy of
640 * the original blkg. If this is the case, then the
641 * bfqg_and_blkg_get performed in bfq_get_queue, to pin down
642 * the blkg, is useless: it does not prevent blk-cgroup code
643 * from destroying both the original blkg and all objects
644 * directly or indirectly referred by the copy of the
645 * blkg.
646 *
647 * On the bright side, destroy operations on a blkg invoke, as
648 * a first step, hooks of the scheduler associated with the
649 * blkg. And these hooks are executed with bfqd->lock held for
650 * BFQ. As a consequence, for any blkg associated with the
651 * request queue this instance of the scheduler is attached
652 * to, we are guaranteed that such a blkg is not destroyed, and
653 * that all the pointers it contains are consistent, while we
654 * are holding bfqd->lock. A blkg_lookup performed with
655 * bfqd->lock held then returns a fully consistent blkg, which
656 * remains consistent until this lock is held.
657 *
658 * Thanks to the last fact, and to the fact that: (1) bfqg has
659 * been obtained through a blkg_lookup in the above
660 * assignment, and (2) bfqd->lock is being held, here we can
661 * safely use the policy data for the involved blkg (i.e., the
662 * field bfqg->pd) to get to the blkg associated with bfqg,
663 * and then we can safely use any field of blkg. After we
664 * release bfqd->lock, even just getting blkg through this
665 * bfqg may cause dangling references to be traversed, as
666 * bfqg->pd may not exist any more.
667 *
668 * In view of the above facts, here we cache, in the bfqg, any
669 * blkg data we may need for this bic, and for its associated
670 * bfq_queue. As of now, we need to cache only the path of the
671 * blkg, which is used in the bfq_log_* functions.
672 *
673 * Finally, note that bfqg itself needs to be protected from
674 * destruction on the blkg_free of the original blkg (which
675 * invokes bfq_pd_free). We use an additional private
676 * refcounter for bfqg, to let it disappear only after no
677 * bfq_queue refers to it any longer.
678 */
679 blkg_path(bfqg_to_blkg(bfqg), bfqg->blkg_path, sizeof(bfqg->blkg_path));
607 bic->blkcg_serial_nr = serial_nr; 680 bic->blkcg_serial_nr = serial_nr;
608out: 681out:
609 rcu_read_unlock(); 682 rcu_read_unlock();
@@ -640,8 +713,6 @@ static void bfq_reparent_leaf_entity(struct bfq_data *bfqd,
640 * @bfqd: the device data structure with the root group. 713 * @bfqd: the device data structure with the root group.
641 * @bfqg: the group to move from. 714 * @bfqg: the group to move from.
642 * @st: the service tree with the entities. 715 * @st: the service tree with the entities.
643 *
644 * Needs queue_lock to be taken and reference to be valid over the call.
645 */ 716 */
646static void bfq_reparent_active_entities(struct bfq_data *bfqd, 717static void bfq_reparent_active_entities(struct bfq_data *bfqd,
647 struct bfq_group *bfqg, 718 struct bfq_group *bfqg,
@@ -692,8 +763,7 @@ void bfq_pd_offline(struct blkg_policy_data *pd)
692 /* 763 /*
693 * The idle tree may still contain bfq_queues belonging 764 * The idle tree may still contain bfq_queues belonging
694 * to exited task because they never migrated to a different 765 * to exited task because they never migrated to a different
695 * cgroup from the one being destroyed now. No one else 766 * cgroup from the one being destroyed now.
696 * can access them so it's safe to act without any lock.
697 */ 767 */
698 bfq_flush_idle_tree(st); 768 bfq_flush_idle_tree(st);
699 769
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
index 08ce45096350..ed93da2462ab 100644
--- a/block/bfq-iosched.c
+++ b/block/bfq-iosched.c
@@ -3665,7 +3665,7 @@ void bfq_put_queue(struct bfq_queue *bfqq)
3665 3665
3666 kmem_cache_free(bfq_pool, bfqq); 3666 kmem_cache_free(bfq_pool, bfqq);
3667#ifdef CONFIG_BFQ_GROUP_IOSCHED 3667#ifdef CONFIG_BFQ_GROUP_IOSCHED
3668 bfqg_put(bfqg); 3668 bfqg_and_blkg_put(bfqg);
3669#endif 3669#endif
3670} 3670}
3671 3671
diff --git a/block/bfq-iosched.h b/block/bfq-iosched.h
index ae783c06dfd9..5c3bf9861492 100644
--- a/block/bfq-iosched.h
+++ b/block/bfq-iosched.h
@@ -759,6 +759,12 @@ struct bfq_group {
759 /* must be the first member */ 759 /* must be the first member */
760 struct blkg_policy_data pd; 760 struct blkg_policy_data pd;
761 761
762 /* cached path for this blkg (see comments in bfq_bic_update_cgroup) */
763 char blkg_path[128];
764
765 /* reference counter (see comments in bfq_bic_update_cgroup) */
766 int ref;
767
762 struct bfq_entity entity; 768 struct bfq_entity entity;
763 struct bfq_sched_data sched_data; 769 struct bfq_sched_data sched_data;
764 770
@@ -838,7 +844,7 @@ struct bfq_group *bfq_find_set_group(struct bfq_data *bfqd,
838struct blkcg_gq *bfqg_to_blkg(struct bfq_group *bfqg); 844struct blkcg_gq *bfqg_to_blkg(struct bfq_group *bfqg);
839struct bfq_group *bfqq_group(struct bfq_queue *bfqq); 845struct bfq_group *bfqq_group(struct bfq_queue *bfqq);
840struct bfq_group *bfq_create_group_hierarchy(struct bfq_data *bfqd, int node); 846struct bfq_group *bfq_create_group_hierarchy(struct bfq_data *bfqd, int node);
841void bfqg_put(struct bfq_group *bfqg); 847void bfqg_and_blkg_put(struct bfq_group *bfqg);
842 848
843#ifdef CONFIG_BFQ_GROUP_IOSCHED 849#ifdef CONFIG_BFQ_GROUP_IOSCHED
844extern struct cftype bfq_blkcg_legacy_files[]; 850extern struct cftype bfq_blkcg_legacy_files[];
@@ -910,20 +916,13 @@ void bfq_add_bfqq_busy(struct bfq_data *bfqd, struct bfq_queue *bfqq);
910struct bfq_group *bfqq_group(struct bfq_queue *bfqq); 916struct bfq_group *bfqq_group(struct bfq_queue *bfqq);
911 917
912#define bfq_log_bfqq(bfqd, bfqq, fmt, args...) do { \ 918#define bfq_log_bfqq(bfqd, bfqq, fmt, args...) do { \
913 char __pbuf[128]; \ 919 blk_add_trace_msg((bfqd)->queue, "bfq%d%c %s " fmt, (bfqq)->pid,\
914 \
915 blkg_path(bfqg_to_blkg(bfqq_group(bfqq)), __pbuf, sizeof(__pbuf)); \
916 blk_add_trace_msg((bfqd)->queue, "bfq%d%c %s " fmt, (bfqq)->pid, \
917 bfq_bfqq_sync((bfqq)) ? 'S' : 'A', \ 920 bfq_bfqq_sync((bfqq)) ? 'S' : 'A', \
918 __pbuf, ##args); \ 921 bfqq_group(bfqq)->blkg_path, ##args); \
919} while (0) 922} while (0)
920 923
921#define bfq_log_bfqg(bfqd, bfqg, fmt, args...) do { \ 924#define bfq_log_bfqg(bfqd, bfqg, fmt, args...) \
922 char __pbuf[128]; \ 925 blk_add_trace_msg((bfqd)->queue, "%s " fmt, (bfqg)->blkg_path, ##args)
923 \
924 blkg_path(bfqg_to_blkg(bfqg), __pbuf, sizeof(__pbuf)); \
925 blk_add_trace_msg((bfqd)->queue, "%s " fmt, __pbuf, ##args); \
926} while (0)
927 926
928#else /* CONFIG_BFQ_GROUP_IOSCHED */ 927#else /* CONFIG_BFQ_GROUP_IOSCHED */
929 928
diff --git a/block/bio-integrity.c b/block/bio-integrity.c
index 5384713d48bc..b5009a896a7f 100644
--- a/block/bio-integrity.c
+++ b/block/bio-integrity.c
@@ -175,6 +175,9 @@ bool bio_integrity_enabled(struct bio *bio)
175 if (bio_op(bio) != REQ_OP_READ && bio_op(bio) != REQ_OP_WRITE) 175 if (bio_op(bio) != REQ_OP_READ && bio_op(bio) != REQ_OP_WRITE)
176 return false; 176 return false;
177 177
178 if (!bio_sectors(bio))
179 return false;
180
178 /* Already protected? */ 181 /* Already protected? */
179 if (bio_integrity(bio)) 182 if (bio_integrity(bio))
180 return false; 183 return false;
diff --git a/block/bio.c b/block/bio.c
index 888e7801c638..26b0810fb8ea 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -240,20 +240,21 @@ fallback:
240 return bvl; 240 return bvl;
241} 241}
242 242
243static void __bio_free(struct bio *bio) 243void bio_uninit(struct bio *bio)
244{ 244{
245 bio_disassociate_task(bio); 245 bio_disassociate_task(bio);
246 246
247 if (bio_integrity(bio)) 247 if (bio_integrity(bio))
248 bio_integrity_free(bio); 248 bio_integrity_free(bio);
249} 249}
250EXPORT_SYMBOL(bio_uninit);
250 251
251static void bio_free(struct bio *bio) 252static void bio_free(struct bio *bio)
252{ 253{
253 struct bio_set *bs = bio->bi_pool; 254 struct bio_set *bs = bio->bi_pool;
254 void *p; 255 void *p;
255 256
256 __bio_free(bio); 257 bio_uninit(bio);
257 258
258 if (bs) { 259 if (bs) {
259 bvec_free(bs->bvec_pool, bio->bi_io_vec, BVEC_POOL_IDX(bio)); 260 bvec_free(bs->bvec_pool, bio->bi_io_vec, BVEC_POOL_IDX(bio));
@@ -271,6 +272,11 @@ static void bio_free(struct bio *bio)
271 } 272 }
272} 273}
273 274
275/*
276 * Users of this function have their own bio allocation. Subsequently,
277 * they must remember to pair any call to bio_init() with bio_uninit()
278 * when IO has completed, or when the bio is released.
279 */
274void bio_init(struct bio *bio, struct bio_vec *table, 280void bio_init(struct bio *bio, struct bio_vec *table,
275 unsigned short max_vecs) 281 unsigned short max_vecs)
276{ 282{
@@ -297,7 +303,7 @@ void bio_reset(struct bio *bio)
297{ 303{
298 unsigned long flags = bio->bi_flags & (~0UL << BIO_RESET_BITS); 304 unsigned long flags = bio->bi_flags & (~0UL << BIO_RESET_BITS);
299 305
300 __bio_free(bio); 306 bio_uninit(bio);
301 307
302 memset(bio, 0, BIO_RESET_BYTES); 308 memset(bio, 0, BIO_RESET_BYTES);
303 bio->bi_flags = flags; 309 bio->bi_flags = flags;
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index 7c2947128f58..0480892e97e5 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -74,7 +74,7 @@ static void blkg_free(struct blkcg_gq *blkg)
74 blkcg_policy[i]->pd_free_fn(blkg->pd[i]); 74 blkcg_policy[i]->pd_free_fn(blkg->pd[i]);
75 75
76 if (blkg->blkcg != &blkcg_root) 76 if (blkg->blkcg != &blkcg_root)
77 blk_exit_rl(&blkg->rl); 77 blk_exit_rl(blkg->q, &blkg->rl);
78 78
79 blkg_rwstat_exit(&blkg->stat_ios); 79 blkg_rwstat_exit(&blkg->stat_ios);
80 blkg_rwstat_exit(&blkg->stat_bytes); 80 blkg_rwstat_exit(&blkg->stat_bytes);
diff --git a/block/blk-core.c b/block/blk-core.c
index c7068520794b..a7421b772d0e 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -648,13 +648,19 @@ int blk_init_rl(struct request_list *rl, struct request_queue *q,
648 if (!rl->rq_pool) 648 if (!rl->rq_pool)
649 return -ENOMEM; 649 return -ENOMEM;
650 650
651 if (rl != &q->root_rl)
652 WARN_ON_ONCE(!blk_get_queue(q));
653
651 return 0; 654 return 0;
652} 655}
653 656
654void blk_exit_rl(struct request_list *rl) 657void blk_exit_rl(struct request_queue *q, struct request_list *rl)
655{ 658{
656 if (rl->rq_pool) 659 if (rl->rq_pool) {
657 mempool_destroy(rl->rq_pool); 660 mempool_destroy(rl->rq_pool);
661 if (rl != &q->root_rl)
662 blk_put_queue(q);
663 }
658} 664}
659 665
660struct request_queue *blk_alloc_queue(gfp_t gfp_mask) 666struct request_queue *blk_alloc_queue(gfp_t gfp_mask)
diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
index 1f5b692526ae..0ded5e846335 100644
--- a/block/blk-mq-sched.c
+++ b/block/blk-mq-sched.c
@@ -68,6 +68,45 @@ static void blk_mq_sched_assign_ioc(struct request_queue *q,
68 __blk_mq_sched_assign_ioc(q, rq, bio, ioc); 68 __blk_mq_sched_assign_ioc(q, rq, bio, ioc);
69} 69}
70 70
71/*
72 * Mark a hardware queue as needing a restart. For shared queues, maintain
73 * a count of how many hardware queues are marked for restart.
74 */
75static void blk_mq_sched_mark_restart_hctx(struct blk_mq_hw_ctx *hctx)
76{
77 if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
78 return;
79
80 if (hctx->flags & BLK_MQ_F_TAG_SHARED) {
81 struct request_queue *q = hctx->queue;
82
83 if (!test_and_set_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
84 atomic_inc(&q->shared_hctx_restart);
85 } else
86 set_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
87}
88
89static bool blk_mq_sched_restart_hctx(struct blk_mq_hw_ctx *hctx)
90{
91 if (!test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
92 return false;
93
94 if (hctx->flags & BLK_MQ_F_TAG_SHARED) {
95 struct request_queue *q = hctx->queue;
96
97 if (test_and_clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
98 atomic_dec(&q->shared_hctx_restart);
99 } else
100 clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
101
102 if (blk_mq_hctx_has_pending(hctx)) {
103 blk_mq_run_hw_queue(hctx, true);
104 return true;
105 }
106
107 return false;
108}
109
71struct request *blk_mq_sched_get_request(struct request_queue *q, 110struct request *blk_mq_sched_get_request(struct request_queue *q,
72 struct bio *bio, 111 struct bio *bio,
73 unsigned int op, 112 unsigned int op,
@@ -266,18 +305,6 @@ static bool blk_mq_sched_bypass_insert(struct blk_mq_hw_ctx *hctx,
266 return true; 305 return true;
267} 306}
268 307
269static bool blk_mq_sched_restart_hctx(struct blk_mq_hw_ctx *hctx)
270{
271 if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state)) {
272 clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
273 if (blk_mq_hctx_has_pending(hctx)) {
274 blk_mq_run_hw_queue(hctx, true);
275 return true;
276 }
277 }
278 return false;
279}
280
281/** 308/**
282 * list_for_each_entry_rcu_rr - iterate in a round-robin fashion over rcu list 309 * list_for_each_entry_rcu_rr - iterate in a round-robin fashion over rcu list
283 * @pos: loop cursor. 310 * @pos: loop cursor.
@@ -309,6 +336,13 @@ void blk_mq_sched_restart(struct blk_mq_hw_ctx *const hctx)
309 unsigned int i, j; 336 unsigned int i, j;
310 337
311 if (set->flags & BLK_MQ_F_TAG_SHARED) { 338 if (set->flags & BLK_MQ_F_TAG_SHARED) {
339 /*
340 * If this is 0, then we know that no hardware queues
341 * have RESTART marked. We're done.
342 */
343 if (!atomic_read(&queue->shared_hctx_restart))
344 return;
345
312 rcu_read_lock(); 346 rcu_read_lock();
313 list_for_each_entry_rcu_rr(q, queue, &set->tag_list, 347 list_for_each_entry_rcu_rr(q, queue, &set->tag_list,
314 tag_set_list) { 348 tag_set_list) {
diff --git a/block/blk-mq-sched.h b/block/blk-mq-sched.h
index edafb5383b7b..5007edece51a 100644
--- a/block/blk-mq-sched.h
+++ b/block/blk-mq-sched.h
@@ -115,15 +115,6 @@ static inline bool blk_mq_sched_has_work(struct blk_mq_hw_ctx *hctx)
115 return false; 115 return false;
116} 116}
117 117
118/*
119 * Mark a hardware queue as needing a restart.
120 */
121static inline void blk_mq_sched_mark_restart_hctx(struct blk_mq_hw_ctx *hctx)
122{
123 if (!test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
124 set_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
125}
126
127static inline bool blk_mq_sched_needs_restart(struct blk_mq_hw_ctx *hctx) 118static inline bool blk_mq_sched_needs_restart(struct blk_mq_hw_ctx *hctx)
128{ 119{
129 return test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state); 120 return test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
diff --git a/block/blk-mq.c b/block/blk-mq.c
index a69ad122ed66..958cedaff8b8 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -628,25 +628,6 @@ void blk_mq_delay_kick_requeue_list(struct request_queue *q,
628} 628}
629EXPORT_SYMBOL(blk_mq_delay_kick_requeue_list); 629EXPORT_SYMBOL(blk_mq_delay_kick_requeue_list);
630 630
631void blk_mq_abort_requeue_list(struct request_queue *q)
632{
633 unsigned long flags;
634 LIST_HEAD(rq_list);
635
636 spin_lock_irqsave(&q->requeue_lock, flags);
637 list_splice_init(&q->requeue_list, &rq_list);
638 spin_unlock_irqrestore(&q->requeue_lock, flags);
639
640 while (!list_empty(&rq_list)) {
641 struct request *rq;
642
643 rq = list_first_entry(&rq_list, struct request, queuelist);
644 list_del_init(&rq->queuelist);
645 blk_mq_end_request(rq, -EIO);
646 }
647}
648EXPORT_SYMBOL(blk_mq_abort_requeue_list);
649
650struct request *blk_mq_tag_to_rq(struct blk_mq_tags *tags, unsigned int tag) 631struct request *blk_mq_tag_to_rq(struct blk_mq_tags *tags, unsigned int tag)
651{ 632{
652 if (tag < tags->nr_tags) { 633 if (tag < tags->nr_tags) {
@@ -1480,22 +1461,28 @@ static blk_qc_t request_to_qc_t(struct blk_mq_hw_ctx *hctx, struct request *rq)
1480 return blk_tag_to_qc_t(rq->internal_tag, hctx->queue_num, true); 1461 return blk_tag_to_qc_t(rq->internal_tag, hctx->queue_num, true);
1481} 1462}
1482 1463
1483static void __blk_mq_try_issue_directly(struct request *rq, blk_qc_t *cookie, 1464static void __blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
1484 bool may_sleep) 1465 struct request *rq,
1466 blk_qc_t *cookie, bool may_sleep)
1485{ 1467{
1486 struct request_queue *q = rq->q; 1468 struct request_queue *q = rq->q;
1487 struct blk_mq_queue_data bd = { 1469 struct blk_mq_queue_data bd = {
1488 .rq = rq, 1470 .rq = rq,
1489 .last = true, 1471 .last = true,
1490 }; 1472 };
1491 struct blk_mq_hw_ctx *hctx;
1492 blk_qc_t new_cookie; 1473 blk_qc_t new_cookie;
1493 int ret; 1474 int ret;
1475 bool run_queue = true;
1476
1477 if (blk_mq_hctx_stopped(hctx)) {
1478 run_queue = false;
1479 goto insert;
1480 }
1494 1481
1495 if (q->elevator) 1482 if (q->elevator)
1496 goto insert; 1483 goto insert;
1497 1484
1498 if (!blk_mq_get_driver_tag(rq, &hctx, false)) 1485 if (!blk_mq_get_driver_tag(rq, NULL, false))
1499 goto insert; 1486 goto insert;
1500 1487
1501 new_cookie = request_to_qc_t(hctx, rq); 1488 new_cookie = request_to_qc_t(hctx, rq);
@@ -1519,7 +1506,7 @@ static void __blk_mq_try_issue_directly(struct request *rq, blk_qc_t *cookie,
1519 1506
1520 __blk_mq_requeue_request(rq); 1507 __blk_mq_requeue_request(rq);
1521insert: 1508insert:
1522 blk_mq_sched_insert_request(rq, false, true, false, may_sleep); 1509 blk_mq_sched_insert_request(rq, false, run_queue, false, may_sleep);
1523} 1510}
1524 1511
1525static void blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx, 1512static void blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
@@ -1527,7 +1514,7 @@ static void blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
1527{ 1514{
1528 if (!(hctx->flags & BLK_MQ_F_BLOCKING)) { 1515 if (!(hctx->flags & BLK_MQ_F_BLOCKING)) {
1529 rcu_read_lock(); 1516 rcu_read_lock();
1530 __blk_mq_try_issue_directly(rq, cookie, false); 1517 __blk_mq_try_issue_directly(hctx, rq, cookie, false);
1531 rcu_read_unlock(); 1518 rcu_read_unlock();
1532 } else { 1519 } else {
1533 unsigned int srcu_idx; 1520 unsigned int srcu_idx;
@@ -1535,7 +1522,7 @@ static void blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
1535 might_sleep(); 1522 might_sleep();
1536 1523
1537 srcu_idx = srcu_read_lock(&hctx->queue_rq_srcu); 1524 srcu_idx = srcu_read_lock(&hctx->queue_rq_srcu);
1538 __blk_mq_try_issue_directly(rq, cookie, true); 1525 __blk_mq_try_issue_directly(hctx, rq, cookie, true);
1539 srcu_read_unlock(&hctx->queue_rq_srcu, srcu_idx); 1526 srcu_read_unlock(&hctx->queue_rq_srcu, srcu_idx);
1540 } 1527 }
1541} 1528}
@@ -1638,9 +1625,12 @@ static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio)
1638 1625
1639 blk_mq_put_ctx(data.ctx); 1626 blk_mq_put_ctx(data.ctx);
1640 1627
1641 if (same_queue_rq) 1628 if (same_queue_rq) {
1629 data.hctx = blk_mq_map_queue(q,
1630 same_queue_rq->mq_ctx->cpu);
1642 blk_mq_try_issue_directly(data.hctx, same_queue_rq, 1631 blk_mq_try_issue_directly(data.hctx, same_queue_rq,
1643 &cookie); 1632 &cookie);
1633 }
1644 } else if (q->nr_hw_queues > 1 && is_sync) { 1634 } else if (q->nr_hw_queues > 1 && is_sync) {
1645 blk_mq_put_ctx(data.ctx); 1635 blk_mq_put_ctx(data.ctx);
1646 blk_mq_bio_to_request(rq, bio); 1636 blk_mq_bio_to_request(rq, bio);
@@ -2113,20 +2103,30 @@ static void blk_mq_map_swqueue(struct request_queue *q,
2113 } 2103 }
2114} 2104}
2115 2105
2106/*
2107 * Caller needs to ensure that we're either frozen/quiesced, or that
2108 * the queue isn't live yet.
2109 */
2116static void queue_set_hctx_shared(struct request_queue *q, bool shared) 2110static void queue_set_hctx_shared(struct request_queue *q, bool shared)
2117{ 2111{
2118 struct blk_mq_hw_ctx *hctx; 2112 struct blk_mq_hw_ctx *hctx;
2119 int i; 2113 int i;
2120 2114
2121 queue_for_each_hw_ctx(q, hctx, i) { 2115 queue_for_each_hw_ctx(q, hctx, i) {
2122 if (shared) 2116 if (shared) {
2117 if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
2118 atomic_inc(&q->shared_hctx_restart);
2123 hctx->flags |= BLK_MQ_F_TAG_SHARED; 2119 hctx->flags |= BLK_MQ_F_TAG_SHARED;
2124 else 2120 } else {
2121 if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
2122 atomic_dec(&q->shared_hctx_restart);
2125 hctx->flags &= ~BLK_MQ_F_TAG_SHARED; 2123 hctx->flags &= ~BLK_MQ_F_TAG_SHARED;
2124 }
2126 } 2125 }
2127} 2126}
2128 2127
2129static void blk_mq_update_tag_set_depth(struct blk_mq_tag_set *set, bool shared) 2128static void blk_mq_update_tag_set_depth(struct blk_mq_tag_set *set,
2129 bool shared)
2130{ 2130{
2131 struct request_queue *q; 2131 struct request_queue *q;
2132 2132
@@ -2660,7 +2660,8 @@ int blk_mq_update_nr_requests(struct request_queue *q, unsigned int nr)
2660 return ret; 2660 return ret;
2661} 2661}
2662 2662
2663void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues) 2663static void __blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set,
2664 int nr_hw_queues)
2664{ 2665{
2665 struct request_queue *q; 2666 struct request_queue *q;
2666 2667
@@ -2684,6 +2685,13 @@ void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues)
2684 list_for_each_entry(q, &set->tag_list, tag_set_list) 2685 list_for_each_entry(q, &set->tag_list, tag_set_list)
2685 blk_mq_unfreeze_queue(q); 2686 blk_mq_unfreeze_queue(q);
2686} 2687}
2688
2689void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues)
2690{
2691 mutex_lock(&set->tag_list_lock);
2692 __blk_mq_update_nr_hw_queues(set, nr_hw_queues);
2693 mutex_unlock(&set->tag_list_lock);
2694}
2687EXPORT_SYMBOL_GPL(blk_mq_update_nr_hw_queues); 2695EXPORT_SYMBOL_GPL(blk_mq_update_nr_hw_queues);
2688 2696
2689/* Enable polling stats and return whether they were already enabled. */ 2697/* Enable polling stats and return whether they were already enabled. */
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index 504fee940052..27aceab1cc31 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -777,24 +777,25 @@ static void blk_free_queue_rcu(struct rcu_head *rcu_head)
777} 777}
778 778
779/** 779/**
780 * blk_release_queue: - release a &struct request_queue when it is no longer needed 780 * __blk_release_queue - release a request queue when it is no longer needed
781 * @kobj: the kobj belonging to the request queue to be released 781 * @work: pointer to the release_work member of the request queue to be released
782 * 782 *
783 * Description: 783 * Description:
784 * blk_release_queue is the pair to blk_init_queue() or 784 * blk_release_queue is the counterpart of blk_init_queue(). It should be
785 * blk_queue_make_request(). It should be called when a request queue is 785 * called when a request queue is being released; typically when a block
786 * being released; typically when a block device is being de-registered. 786 * device is being de-registered. Its primary task it to free the queue
787 * Currently, its primary task it to free all the &struct request 787 * itself.
788 * structures that were allocated to the queue and the queue itself.
789 * 788 *
790 * Note: 789 * Notes:
791 * The low level driver must have finished any outstanding requests first 790 * The low level driver must have finished any outstanding requests first
792 * via blk_cleanup_queue(). 791 * via blk_cleanup_queue().
793 **/ 792 *
794static void blk_release_queue(struct kobject *kobj) 793 * Although blk_release_queue() may be called with preemption disabled,
794 * __blk_release_queue() may sleep.
795 */
796static void __blk_release_queue(struct work_struct *work)
795{ 797{
796 struct request_queue *q = 798 struct request_queue *q = container_of(work, typeof(*q), release_work);
797 container_of(kobj, struct request_queue, kobj);
798 799
799 if (test_bit(QUEUE_FLAG_POLL_STATS, &q->queue_flags)) 800 if (test_bit(QUEUE_FLAG_POLL_STATS, &q->queue_flags))
800 blk_stat_remove_callback(q, q->poll_cb); 801 blk_stat_remove_callback(q, q->poll_cb);
@@ -809,7 +810,7 @@ static void blk_release_queue(struct kobject *kobj)
809 810
810 blk_free_queue_stats(q->stats); 811 blk_free_queue_stats(q->stats);
811 812
812 blk_exit_rl(&q->root_rl); 813 blk_exit_rl(q, &q->root_rl);
813 814
814 if (q->queue_tags) 815 if (q->queue_tags)
815 __blk_queue_free_tags(q); 816 __blk_queue_free_tags(q);
@@ -834,6 +835,15 @@ static void blk_release_queue(struct kobject *kobj)
834 call_rcu(&q->rcu_head, blk_free_queue_rcu); 835 call_rcu(&q->rcu_head, blk_free_queue_rcu);
835} 836}
836 837
838static void blk_release_queue(struct kobject *kobj)
839{
840 struct request_queue *q =
841 container_of(kobj, struct request_queue, kobj);
842
843 INIT_WORK(&q->release_work, __blk_release_queue);
844 schedule_work(&q->release_work);
845}
846
837static const struct sysfs_ops queue_sysfs_ops = { 847static const struct sysfs_ops queue_sysfs_ops = {
838 .show = queue_attr_show, 848 .show = queue_attr_show,
839 .store = queue_attr_store, 849 .store = queue_attr_store,
@@ -887,10 +897,10 @@ int blk_register_queue(struct gendisk *disk)
887 goto unlock; 897 goto unlock;
888 } 898 }
889 899
890 if (q->mq_ops) 900 if (q->mq_ops) {
891 __blk_mq_register_dev(dev, q); 901 __blk_mq_register_dev(dev, q);
892 902 blk_mq_debugfs_register(q);
893 blk_mq_debugfs_register(q); 903 }
894 904
895 kobject_uevent(&q->kobj, KOBJ_ADD); 905 kobject_uevent(&q->kobj, KOBJ_ADD);
896 906
diff --git a/block/blk-throttle.c b/block/blk-throttle.c
index b78db2e5fdff..a7285bf2831c 100644
--- a/block/blk-throttle.c
+++ b/block/blk-throttle.c
@@ -22,11 +22,18 @@ static int throtl_quantum = 32;
22#define DFL_THROTL_SLICE_HD (HZ / 10) 22#define DFL_THROTL_SLICE_HD (HZ / 10)
23#define DFL_THROTL_SLICE_SSD (HZ / 50) 23#define DFL_THROTL_SLICE_SSD (HZ / 50)
24#define MAX_THROTL_SLICE (HZ) 24#define MAX_THROTL_SLICE (HZ)
25#define DFL_IDLE_THRESHOLD_SSD (1000L) /* 1 ms */
26#define DFL_IDLE_THRESHOLD_HD (100L * 1000) /* 100 ms */
27#define MAX_IDLE_TIME (5L * 1000 * 1000) /* 5 s */ 25#define MAX_IDLE_TIME (5L * 1000 * 1000) /* 5 s */
28/* default latency target is 0, eg, guarantee IO latency by default */ 26#define MIN_THROTL_BPS (320 * 1024)
29#define DFL_LATENCY_TARGET (0) 27#define MIN_THROTL_IOPS (10)
28#define DFL_LATENCY_TARGET (-1L)
29#define DFL_IDLE_THRESHOLD (0)
30#define DFL_HD_BASELINE_LATENCY (4000L) /* 4ms */
31#define LATENCY_FILTERED_SSD (0)
32/*
33 * For HD, very small latency comes from sequential IO. Such IO is helpless to
34 * help determine if its IO is impacted by others, hence we ignore the IO
35 */
36#define LATENCY_FILTERED_HD (1000L) /* 1ms */
30 37
31#define SKIP_LATENCY (((u64)1) << BLK_STAT_RES_SHIFT) 38#define SKIP_LATENCY (((u64)1) << BLK_STAT_RES_SHIFT)
32 39
@@ -157,6 +164,7 @@ struct throtl_grp {
157 unsigned long last_check_time; 164 unsigned long last_check_time;
158 165
159 unsigned long latency_target; /* us */ 166 unsigned long latency_target; /* us */
167 unsigned long latency_target_conf; /* us */
160 /* When did we start a new slice */ 168 /* When did we start a new slice */
161 unsigned long slice_start[2]; 169 unsigned long slice_start[2];
162 unsigned long slice_end[2]; 170 unsigned long slice_end[2];
@@ -165,6 +173,7 @@ struct throtl_grp {
165 unsigned long checked_last_finish_time; /* ns / 1024 */ 173 unsigned long checked_last_finish_time; /* ns / 1024 */
166 unsigned long avg_idletime; /* ns / 1024 */ 174 unsigned long avg_idletime; /* ns / 1024 */
167 unsigned long idletime_threshold; /* us */ 175 unsigned long idletime_threshold; /* us */
176 unsigned long idletime_threshold_conf; /* us */
168 177
169 unsigned int bio_cnt; /* total bios */ 178 unsigned int bio_cnt; /* total bios */
170 unsigned int bad_bio_cnt; /* bios exceeding latency threshold */ 179 unsigned int bad_bio_cnt; /* bios exceeding latency threshold */
@@ -201,8 +210,6 @@ struct throtl_data
201 unsigned int limit_index; 210 unsigned int limit_index;
202 bool limit_valid[LIMIT_CNT]; 211 bool limit_valid[LIMIT_CNT];
203 212
204 unsigned long dft_idletime_threshold; /* us */
205
206 unsigned long low_upgrade_time; 213 unsigned long low_upgrade_time;
207 unsigned long low_downgrade_time; 214 unsigned long low_downgrade_time;
208 215
@@ -212,6 +219,7 @@ struct throtl_data
212 struct avg_latency_bucket avg_buckets[LATENCY_BUCKET_SIZE]; 219 struct avg_latency_bucket avg_buckets[LATENCY_BUCKET_SIZE];
213 struct latency_bucket __percpu *latency_buckets; 220 struct latency_bucket __percpu *latency_buckets;
214 unsigned long last_calculate_time; 221 unsigned long last_calculate_time;
222 unsigned long filtered_latency;
215 223
216 bool track_bio_latency; 224 bool track_bio_latency;
217}; 225};
@@ -294,8 +302,14 @@ static uint64_t tg_bps_limit(struct throtl_grp *tg, int rw)
294 302
295 td = tg->td; 303 td = tg->td;
296 ret = tg->bps[rw][td->limit_index]; 304 ret = tg->bps[rw][td->limit_index];
297 if (ret == 0 && td->limit_index == LIMIT_LOW) 305 if (ret == 0 && td->limit_index == LIMIT_LOW) {
298 return tg->bps[rw][LIMIT_MAX]; 306 /* intermediate node or iops isn't 0 */
307 if (!list_empty(&blkg->blkcg->css.children) ||
308 tg->iops[rw][td->limit_index])
309 return U64_MAX;
310 else
311 return MIN_THROTL_BPS;
312 }
299 313
300 if (td->limit_index == LIMIT_MAX && tg->bps[rw][LIMIT_LOW] && 314 if (td->limit_index == LIMIT_MAX && tg->bps[rw][LIMIT_LOW] &&
301 tg->bps[rw][LIMIT_LOW] != tg->bps[rw][LIMIT_MAX]) { 315 tg->bps[rw][LIMIT_LOW] != tg->bps[rw][LIMIT_MAX]) {
@@ -315,10 +329,17 @@ static unsigned int tg_iops_limit(struct throtl_grp *tg, int rw)
315 329
316 if (cgroup_subsys_on_dfl(io_cgrp_subsys) && !blkg->parent) 330 if (cgroup_subsys_on_dfl(io_cgrp_subsys) && !blkg->parent)
317 return UINT_MAX; 331 return UINT_MAX;
332
318 td = tg->td; 333 td = tg->td;
319 ret = tg->iops[rw][td->limit_index]; 334 ret = tg->iops[rw][td->limit_index];
320 if (ret == 0 && tg->td->limit_index == LIMIT_LOW) 335 if (ret == 0 && tg->td->limit_index == LIMIT_LOW) {
321 return tg->iops[rw][LIMIT_MAX]; 336 /* intermediate node or bps isn't 0 */
337 if (!list_empty(&blkg->blkcg->css.children) ||
338 tg->bps[rw][td->limit_index])
339 return UINT_MAX;
340 else
341 return MIN_THROTL_IOPS;
342 }
322 343
323 if (td->limit_index == LIMIT_MAX && tg->iops[rw][LIMIT_LOW] && 344 if (td->limit_index == LIMIT_MAX && tg->iops[rw][LIMIT_LOW] &&
324 tg->iops[rw][LIMIT_LOW] != tg->iops[rw][LIMIT_MAX]) { 345 tg->iops[rw][LIMIT_LOW] != tg->iops[rw][LIMIT_MAX]) {
@@ -482,6 +503,9 @@ static struct blkg_policy_data *throtl_pd_alloc(gfp_t gfp, int node)
482 /* LIMIT_LOW will have default value 0 */ 503 /* LIMIT_LOW will have default value 0 */
483 504
484 tg->latency_target = DFL_LATENCY_TARGET; 505 tg->latency_target = DFL_LATENCY_TARGET;
506 tg->latency_target_conf = DFL_LATENCY_TARGET;
507 tg->idletime_threshold = DFL_IDLE_THRESHOLD;
508 tg->idletime_threshold_conf = DFL_IDLE_THRESHOLD;
485 509
486 return &tg->pd; 510 return &tg->pd;
487} 511}
@@ -510,8 +534,6 @@ static void throtl_pd_init(struct blkg_policy_data *pd)
510 if (cgroup_subsys_on_dfl(io_cgrp_subsys) && blkg->parent) 534 if (cgroup_subsys_on_dfl(io_cgrp_subsys) && blkg->parent)
511 sq->parent_sq = &blkg_to_tg(blkg->parent)->service_queue; 535 sq->parent_sq = &blkg_to_tg(blkg->parent)->service_queue;
512 tg->td = td; 536 tg->td = td;
513
514 tg->idletime_threshold = td->dft_idletime_threshold;
515} 537}
516 538
517/* 539/*
@@ -684,7 +706,7 @@ static void throtl_dequeue_tg(struct throtl_grp *tg)
684static void throtl_schedule_pending_timer(struct throtl_service_queue *sq, 706static void throtl_schedule_pending_timer(struct throtl_service_queue *sq,
685 unsigned long expires) 707 unsigned long expires)
686{ 708{
687 unsigned long max_expire = jiffies + 8 * sq_to_tg(sq)->td->throtl_slice; 709 unsigned long max_expire = jiffies + 8 * sq_to_td(sq)->throtl_slice;
688 710
689 /* 711 /*
690 * Since we are adjusting the throttle limit dynamically, the sleep 712 * Since we are adjusting the throttle limit dynamically, the sleep
@@ -1349,7 +1371,7 @@ static int tg_print_conf_uint(struct seq_file *sf, void *v)
1349 return 0; 1371 return 0;
1350} 1372}
1351 1373
1352static void tg_conf_updated(struct throtl_grp *tg) 1374static void tg_conf_updated(struct throtl_grp *tg, bool global)
1353{ 1375{
1354 struct throtl_service_queue *sq = &tg->service_queue; 1376 struct throtl_service_queue *sq = &tg->service_queue;
1355 struct cgroup_subsys_state *pos_css; 1377 struct cgroup_subsys_state *pos_css;
@@ -1367,8 +1389,26 @@ static void tg_conf_updated(struct throtl_grp *tg)
1367 * restrictions in the whole hierarchy and allows them to bypass 1389 * restrictions in the whole hierarchy and allows them to bypass
1368 * blk-throttle. 1390 * blk-throttle.
1369 */ 1391 */
1370 blkg_for_each_descendant_pre(blkg, pos_css, tg_to_blkg(tg)) 1392 blkg_for_each_descendant_pre(blkg, pos_css,
1371 tg_update_has_rules(blkg_to_tg(blkg)); 1393 global ? tg->td->queue->root_blkg : tg_to_blkg(tg)) {
1394 struct throtl_grp *this_tg = blkg_to_tg(blkg);
1395 struct throtl_grp *parent_tg;
1396
1397 tg_update_has_rules(this_tg);
1398 /* ignore root/second level */
1399 if (!cgroup_subsys_on_dfl(io_cgrp_subsys) || !blkg->parent ||
1400 !blkg->parent->parent)
1401 continue;
1402 parent_tg = blkg_to_tg(blkg->parent);
1403 /*
1404 * make sure all children has lower idle time threshold and
1405 * higher latency target
1406 */
1407 this_tg->idletime_threshold = min(this_tg->idletime_threshold,
1408 parent_tg->idletime_threshold);
1409 this_tg->latency_target = max(this_tg->latency_target,
1410 parent_tg->latency_target);
1411 }
1372 1412
1373 /* 1413 /*
1374 * We're already holding queue_lock and know @tg is valid. Let's 1414 * We're already holding queue_lock and know @tg is valid. Let's
@@ -1413,7 +1453,7 @@ static ssize_t tg_set_conf(struct kernfs_open_file *of,
1413 else 1453 else
1414 *(unsigned int *)((void *)tg + of_cft(of)->private) = v; 1454 *(unsigned int *)((void *)tg + of_cft(of)->private) = v;
1415 1455
1416 tg_conf_updated(tg); 1456 tg_conf_updated(tg, false);
1417 ret = 0; 1457 ret = 0;
1418out_finish: 1458out_finish:
1419 blkg_conf_finish(&ctx); 1459 blkg_conf_finish(&ctx);
@@ -1497,34 +1537,34 @@ static u64 tg_prfill_limit(struct seq_file *sf, struct blkg_policy_data *pd,
1497 tg->iops_conf[READ][off] == iops_dft && 1537 tg->iops_conf[READ][off] == iops_dft &&
1498 tg->iops_conf[WRITE][off] == iops_dft && 1538 tg->iops_conf[WRITE][off] == iops_dft &&
1499 (off != LIMIT_LOW || 1539 (off != LIMIT_LOW ||
1500 (tg->idletime_threshold == tg->td->dft_idletime_threshold && 1540 (tg->idletime_threshold_conf == DFL_IDLE_THRESHOLD &&
1501 tg->latency_target == DFL_LATENCY_TARGET))) 1541 tg->latency_target_conf == DFL_LATENCY_TARGET)))
1502 return 0; 1542 return 0;
1503 1543
1504 if (tg->bps_conf[READ][off] != bps_dft) 1544 if (tg->bps_conf[READ][off] != U64_MAX)
1505 snprintf(bufs[0], sizeof(bufs[0]), "%llu", 1545 snprintf(bufs[0], sizeof(bufs[0]), "%llu",
1506 tg->bps_conf[READ][off]); 1546 tg->bps_conf[READ][off]);
1507 if (tg->bps_conf[WRITE][off] != bps_dft) 1547 if (tg->bps_conf[WRITE][off] != U64_MAX)
1508 snprintf(bufs[1], sizeof(bufs[1]), "%llu", 1548 snprintf(bufs[1], sizeof(bufs[1]), "%llu",
1509 tg->bps_conf[WRITE][off]); 1549 tg->bps_conf[WRITE][off]);
1510 if (tg->iops_conf[READ][off] != iops_dft) 1550 if (tg->iops_conf[READ][off] != UINT_MAX)
1511 snprintf(bufs[2], sizeof(bufs[2]), "%u", 1551 snprintf(bufs[2], sizeof(bufs[2]), "%u",
1512 tg->iops_conf[READ][off]); 1552 tg->iops_conf[READ][off]);
1513 if (tg->iops_conf[WRITE][off] != iops_dft) 1553 if (tg->iops_conf[WRITE][off] != UINT_MAX)
1514 snprintf(bufs[3], sizeof(bufs[3]), "%u", 1554 snprintf(bufs[3], sizeof(bufs[3]), "%u",
1515 tg->iops_conf[WRITE][off]); 1555 tg->iops_conf[WRITE][off]);
1516 if (off == LIMIT_LOW) { 1556 if (off == LIMIT_LOW) {
1517 if (tg->idletime_threshold == ULONG_MAX) 1557 if (tg->idletime_threshold_conf == ULONG_MAX)
1518 strcpy(idle_time, " idle=max"); 1558 strcpy(idle_time, " idle=max");
1519 else 1559 else
1520 snprintf(idle_time, sizeof(idle_time), " idle=%lu", 1560 snprintf(idle_time, sizeof(idle_time), " idle=%lu",
1521 tg->idletime_threshold); 1561 tg->idletime_threshold_conf);
1522 1562
1523 if (tg->latency_target == ULONG_MAX) 1563 if (tg->latency_target_conf == ULONG_MAX)
1524 strcpy(latency_time, " latency=max"); 1564 strcpy(latency_time, " latency=max");
1525 else 1565 else
1526 snprintf(latency_time, sizeof(latency_time), 1566 snprintf(latency_time, sizeof(latency_time),
1527 " latency=%lu", tg->latency_target); 1567 " latency=%lu", tg->latency_target_conf);
1528 } 1568 }
1529 1569
1530 seq_printf(sf, "%s rbps=%s wbps=%s riops=%s wiops=%s%s%s\n", 1570 seq_printf(sf, "%s rbps=%s wbps=%s riops=%s wiops=%s%s%s\n",
@@ -1563,8 +1603,8 @@ static ssize_t tg_set_limit(struct kernfs_open_file *of,
1563 v[2] = tg->iops_conf[READ][index]; 1603 v[2] = tg->iops_conf[READ][index];
1564 v[3] = tg->iops_conf[WRITE][index]; 1604 v[3] = tg->iops_conf[WRITE][index];
1565 1605
1566 idle_time = tg->idletime_threshold; 1606 idle_time = tg->idletime_threshold_conf;
1567 latency_time = tg->latency_target; 1607 latency_time = tg->latency_target_conf;
1568 while (true) { 1608 while (true) {
1569 char tok[27]; /* wiops=18446744073709551616 */ 1609 char tok[27]; /* wiops=18446744073709551616 */
1570 char *p; 1610 char *p;
@@ -1623,17 +1663,33 @@ static ssize_t tg_set_limit(struct kernfs_open_file *of,
1623 tg->iops_conf[READ][LIMIT_MAX]); 1663 tg->iops_conf[READ][LIMIT_MAX]);
1624 tg->iops[WRITE][LIMIT_LOW] = min(tg->iops_conf[WRITE][LIMIT_LOW], 1664 tg->iops[WRITE][LIMIT_LOW] = min(tg->iops_conf[WRITE][LIMIT_LOW],
1625 tg->iops_conf[WRITE][LIMIT_MAX]); 1665 tg->iops_conf[WRITE][LIMIT_MAX]);
1666 tg->idletime_threshold_conf = idle_time;
1667 tg->latency_target_conf = latency_time;
1668
1669 /* force user to configure all settings for low limit */
1670 if (!(tg->bps[READ][LIMIT_LOW] || tg->iops[READ][LIMIT_LOW] ||
1671 tg->bps[WRITE][LIMIT_LOW] || tg->iops[WRITE][LIMIT_LOW]) ||
1672 tg->idletime_threshold_conf == DFL_IDLE_THRESHOLD ||
1673 tg->latency_target_conf == DFL_LATENCY_TARGET) {
1674 tg->bps[READ][LIMIT_LOW] = 0;
1675 tg->bps[WRITE][LIMIT_LOW] = 0;
1676 tg->iops[READ][LIMIT_LOW] = 0;
1677 tg->iops[WRITE][LIMIT_LOW] = 0;
1678 tg->idletime_threshold = DFL_IDLE_THRESHOLD;
1679 tg->latency_target = DFL_LATENCY_TARGET;
1680 } else if (index == LIMIT_LOW) {
1681 tg->idletime_threshold = tg->idletime_threshold_conf;
1682 tg->latency_target = tg->latency_target_conf;
1683 }
1626 1684
1627 if (index == LIMIT_LOW) { 1685 blk_throtl_update_limit_valid(tg->td);
1628 blk_throtl_update_limit_valid(tg->td); 1686 if (tg->td->limit_valid[LIMIT_LOW]) {
1629 if (tg->td->limit_valid[LIMIT_LOW]) 1687 if (index == LIMIT_LOW)
1630 tg->td->limit_index = LIMIT_LOW; 1688 tg->td->limit_index = LIMIT_LOW;
1631 tg->idletime_threshold = (idle_time == ULONG_MAX) ? 1689 } else
1632 ULONG_MAX : idle_time; 1690 tg->td->limit_index = LIMIT_MAX;
1633 tg->latency_target = (latency_time == ULONG_MAX) ? 1691 tg_conf_updated(tg, index == LIMIT_LOW &&
1634 ULONG_MAX : latency_time; 1692 tg->td->limit_valid[LIMIT_LOW]);
1635 }
1636 tg_conf_updated(tg);
1637 ret = 0; 1693 ret = 0;
1638out_finish: 1694out_finish:
1639 blkg_conf_finish(&ctx); 1695 blkg_conf_finish(&ctx);
@@ -1722,17 +1778,25 @@ static bool throtl_tg_is_idle(struct throtl_grp *tg)
1722 /* 1778 /*
1723 * cgroup is idle if: 1779 * cgroup is idle if:
1724 * - single idle is too long, longer than a fixed value (in case user 1780 * - single idle is too long, longer than a fixed value (in case user
1725 * configure a too big threshold) or 4 times of slice 1781 * configure a too big threshold) or 4 times of idletime threshold
1726 * - average think time is more than threshold 1782 * - average think time is more than threshold
1727 * - IO latency is largely below threshold 1783 * - IO latency is largely below threshold
1728 */ 1784 */
1729 unsigned long time = jiffies_to_usecs(4 * tg->td->throtl_slice); 1785 unsigned long time;
1730 1786 bool ret;
1731 time = min_t(unsigned long, MAX_IDLE_TIME, time); 1787
1732 return (ktime_get_ns() >> 10) - tg->last_finish_time > time || 1788 time = min_t(unsigned long, MAX_IDLE_TIME, 4 * tg->idletime_threshold);
1733 tg->avg_idletime > tg->idletime_threshold || 1789 ret = tg->latency_target == DFL_LATENCY_TARGET ||
1734 (tg->latency_target && tg->bio_cnt && 1790 tg->idletime_threshold == DFL_IDLE_THRESHOLD ||
1791 (ktime_get_ns() >> 10) - tg->last_finish_time > time ||
1792 tg->avg_idletime > tg->idletime_threshold ||
1793 (tg->latency_target && tg->bio_cnt &&
1735 tg->bad_bio_cnt * 5 < tg->bio_cnt); 1794 tg->bad_bio_cnt * 5 < tg->bio_cnt);
1795 throtl_log(&tg->service_queue,
1796 "avg_idle=%ld, idle_threshold=%ld, bad_bio=%d, total_bio=%d, is_idle=%d, scale=%d",
1797 tg->avg_idletime, tg->idletime_threshold, tg->bad_bio_cnt,
1798 tg->bio_cnt, ret, tg->td->scale);
1799 return ret;
1736} 1800}
1737 1801
1738static bool throtl_tg_can_upgrade(struct throtl_grp *tg) 1802static bool throtl_tg_can_upgrade(struct throtl_grp *tg)
@@ -1828,6 +1892,7 @@ static void throtl_upgrade_state(struct throtl_data *td)
1828 struct cgroup_subsys_state *pos_css; 1892 struct cgroup_subsys_state *pos_css;
1829 struct blkcg_gq *blkg; 1893 struct blkcg_gq *blkg;
1830 1894
1895 throtl_log(&td->service_queue, "upgrade to max");
1831 td->limit_index = LIMIT_MAX; 1896 td->limit_index = LIMIT_MAX;
1832 td->low_upgrade_time = jiffies; 1897 td->low_upgrade_time = jiffies;
1833 td->scale = 0; 1898 td->scale = 0;
@@ -1850,6 +1915,7 @@ static void throtl_downgrade_state(struct throtl_data *td, int new)
1850{ 1915{
1851 td->scale /= 2; 1916 td->scale /= 2;
1852 1917
1918 throtl_log(&td->service_queue, "downgrade, scale %d", td->scale);
1853 if (td->scale) { 1919 if (td->scale) {
1854 td->low_upgrade_time = jiffies - td->scale * td->throtl_slice; 1920 td->low_upgrade_time = jiffies - td->scale * td->throtl_slice;
1855 return; 1921 return;
@@ -2023,6 +2089,11 @@ static void throtl_update_latency_buckets(struct throtl_data *td)
2023 td->avg_buckets[i].valid = true; 2089 td->avg_buckets[i].valid = true;
2024 last_latency = td->avg_buckets[i].latency; 2090 last_latency = td->avg_buckets[i].latency;
2025 } 2091 }
2092
2093 for (i = 0; i < LATENCY_BUCKET_SIZE; i++)
2094 throtl_log(&td->service_queue,
2095 "Latency bucket %d: latency=%ld, valid=%d", i,
2096 td->avg_buckets[i].latency, td->avg_buckets[i].valid);
2026} 2097}
2027#else 2098#else
2028static inline void throtl_update_latency_buckets(struct throtl_data *td) 2099static inline void throtl_update_latency_buckets(struct throtl_data *td)
@@ -2218,7 +2289,7 @@ void blk_throtl_bio_endio(struct bio *bio)
2218 throtl_track_latency(tg->td, blk_stat_size(&bio->bi_issue_stat), 2289 throtl_track_latency(tg->td, blk_stat_size(&bio->bi_issue_stat),
2219 bio_op(bio), lat); 2290 bio_op(bio), lat);
2220 2291
2221 if (tg->latency_target) { 2292 if (tg->latency_target && lat >= tg->td->filtered_latency) {
2222 int bucket; 2293 int bucket;
2223 unsigned int threshold; 2294 unsigned int threshold;
2224 2295
@@ -2354,18 +2425,19 @@ void blk_throtl_exit(struct request_queue *q)
2354void blk_throtl_register_queue(struct request_queue *q) 2425void blk_throtl_register_queue(struct request_queue *q)
2355{ 2426{
2356 struct throtl_data *td; 2427 struct throtl_data *td;
2357 struct cgroup_subsys_state *pos_css; 2428 int i;
2358 struct blkcg_gq *blkg;
2359 2429
2360 td = q->td; 2430 td = q->td;
2361 BUG_ON(!td); 2431 BUG_ON(!td);
2362 2432
2363 if (blk_queue_nonrot(q)) { 2433 if (blk_queue_nonrot(q)) {
2364 td->throtl_slice = DFL_THROTL_SLICE_SSD; 2434 td->throtl_slice = DFL_THROTL_SLICE_SSD;
2365 td->dft_idletime_threshold = DFL_IDLE_THRESHOLD_SSD; 2435 td->filtered_latency = LATENCY_FILTERED_SSD;
2366 } else { 2436 } else {
2367 td->throtl_slice = DFL_THROTL_SLICE_HD; 2437 td->throtl_slice = DFL_THROTL_SLICE_HD;
2368 td->dft_idletime_threshold = DFL_IDLE_THRESHOLD_HD; 2438 td->filtered_latency = LATENCY_FILTERED_HD;
2439 for (i = 0; i < LATENCY_BUCKET_SIZE; i++)
2440 td->avg_buckets[i].latency = DFL_HD_BASELINE_LATENCY;
2369 } 2441 }
2370#ifndef CONFIG_BLK_DEV_THROTTLING_LOW 2442#ifndef CONFIG_BLK_DEV_THROTTLING_LOW
2371 /* if no low limit, use previous default */ 2443 /* if no low limit, use previous default */
@@ -2375,18 +2447,6 @@ void blk_throtl_register_queue(struct request_queue *q)
2375 td->track_bio_latency = !q->mq_ops && !q->request_fn; 2447 td->track_bio_latency = !q->mq_ops && !q->request_fn;
2376 if (!td->track_bio_latency) 2448 if (!td->track_bio_latency)
2377 blk_stat_enable_accounting(q); 2449 blk_stat_enable_accounting(q);
2378
2379 /*
2380 * some tg are created before queue is fully initialized, eg, nonrot
2381 * isn't initialized yet
2382 */
2383 rcu_read_lock();
2384 blkg_for_each_descendant_post(blkg, pos_css, q->root_blkg) {
2385 struct throtl_grp *tg = blkg_to_tg(blkg);
2386
2387 tg->idletime_threshold = td->dft_idletime_threshold;
2388 }
2389 rcu_read_unlock();
2390} 2450}
2391 2451
2392#ifdef CONFIG_BLK_DEV_THROTTLING_LOW 2452#ifdef CONFIG_BLK_DEV_THROTTLING_LOW
diff --git a/block/blk.h b/block/blk.h
index 2ed70228e44f..83c8e1100525 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -59,7 +59,7 @@ void blk_free_flush_queue(struct blk_flush_queue *q);
59 59
60int blk_init_rl(struct request_list *rl, struct request_queue *q, 60int blk_init_rl(struct request_list *rl, struct request_queue *q,
61 gfp_t gfp_mask); 61 gfp_t gfp_mask);
62void blk_exit_rl(struct request_list *rl); 62void blk_exit_rl(struct request_queue *q, struct request_list *rl);
63void blk_rq_bio_prep(struct request_queue *q, struct request *rq, 63void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
64 struct bio *bio); 64 struct bio *bio);
65void blk_queue_bypass_start(struct request_queue *q); 65void blk_queue_bypass_start(struct request_queue *q);
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index da69b079725f..b7e9c7feeab2 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -38,9 +38,13 @@ static const u64 cfq_target_latency = (u64)NSEC_PER_SEC * 3/10; /* 300 ms */
38static const int cfq_hist_divisor = 4; 38static const int cfq_hist_divisor = 4;
39 39
40/* 40/*
41 * offset from end of service tree 41 * offset from end of queue service tree for idle class
42 */ 42 */
43#define CFQ_IDLE_DELAY (NSEC_PER_SEC / 5) 43#define CFQ_IDLE_DELAY (NSEC_PER_SEC / 5)
44/* offset from end of group service tree under time slice mode */
45#define CFQ_SLICE_MODE_GROUP_DELAY (NSEC_PER_SEC / 5)
46/* offset from end of group service under IOPS mode */
47#define CFQ_IOPS_MODE_GROUP_DELAY (HZ / 5)
44 48
45/* 49/*
46 * below this threshold, we consider thinktime immediate 50 * below this threshold, we consider thinktime immediate
@@ -1362,6 +1366,14 @@ cfq_group_service_tree_add(struct cfq_rb_root *st, struct cfq_group *cfqg)
1362 cfqg->vfraction = max_t(unsigned, vfr, 1); 1366 cfqg->vfraction = max_t(unsigned, vfr, 1);
1363} 1367}
1364 1368
1369static inline u64 cfq_get_cfqg_vdisktime_delay(struct cfq_data *cfqd)
1370{
1371 if (!iops_mode(cfqd))
1372 return CFQ_SLICE_MODE_GROUP_DELAY;
1373 else
1374 return CFQ_IOPS_MODE_GROUP_DELAY;
1375}
1376
1365static void 1377static void
1366cfq_group_notify_queue_add(struct cfq_data *cfqd, struct cfq_group *cfqg) 1378cfq_group_notify_queue_add(struct cfq_data *cfqd, struct cfq_group *cfqg)
1367{ 1379{
@@ -1381,7 +1393,8 @@ cfq_group_notify_queue_add(struct cfq_data *cfqd, struct cfq_group *cfqg)
1381 n = rb_last(&st->rb); 1393 n = rb_last(&st->rb);
1382 if (n) { 1394 if (n) {
1383 __cfqg = rb_entry_cfqg(n); 1395 __cfqg = rb_entry_cfqg(n);
1384 cfqg->vdisktime = __cfqg->vdisktime + CFQ_IDLE_DELAY; 1396 cfqg->vdisktime = __cfqg->vdisktime +
1397 cfq_get_cfqg_vdisktime_delay(cfqd);
1385 } else 1398 } else
1386 cfqg->vdisktime = st->min_vdisktime; 1399 cfqg->vdisktime = st->min_vdisktime;
1387 cfq_group_service_tree_add(st, cfqg); 1400 cfq_group_service_tree_add(st, cfqg);
diff --git a/block/partition-generic.c b/block/partition-generic.c
index ff07b9143ca4..c5ec8246e25e 100644
--- a/block/partition-generic.c
+++ b/block/partition-generic.c
@@ -320,8 +320,10 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno,
320 320
321 if (info) { 321 if (info) {
322 struct partition_meta_info *pinfo = alloc_part_info(disk); 322 struct partition_meta_info *pinfo = alloc_part_info(disk);
323 if (!pinfo) 323 if (!pinfo) {
324 err = -ENOMEM;
324 goto out_free_stats; 325 goto out_free_stats;
326 }
325 memcpy(pinfo, info, sizeof(*info)); 327 memcpy(pinfo, info, sizeof(*info));
326 p->info = pinfo; 328 p->info = pinfo;
327 } 329 }
diff --git a/block/partitions/msdos.c b/block/partitions/msdos.c
index 93e7c1b32edd..5610cd537da7 100644
--- a/block/partitions/msdos.c
+++ b/block/partitions/msdos.c
@@ -300,6 +300,8 @@ static void parse_bsd(struct parsed_partitions *state,
300 continue; 300 continue;
301 bsd_start = le32_to_cpu(p->p_offset); 301 bsd_start = le32_to_cpu(p->p_offset);
302 bsd_size = le32_to_cpu(p->p_size); 302 bsd_size = le32_to_cpu(p->p_size);
303 if (memcmp(flavour, "bsd\0", 4) == 0)
304 bsd_start += offset;
303 if (offset == bsd_start && size == bsd_size) 305 if (offset == bsd_start && size == bsd_size)
304 /* full parent partition, we have it already */ 306 /* full parent partition, we have it already */
305 continue; 307 continue;
diff --git a/crypto/asymmetric_keys/public_key.c b/crypto/asymmetric_keys/public_key.c
index d3a989e718f5..3cd6e12cfc46 100644
--- a/crypto/asymmetric_keys/public_key.c
+++ b/crypto/asymmetric_keys/public_key.c
@@ -141,7 +141,7 @@ int public_key_verify_signature(const struct public_key *pkey,
141 * signature and returns that to us. 141 * signature and returns that to us.
142 */ 142 */
143 ret = crypto_akcipher_verify(req); 143 ret = crypto_akcipher_verify(req);
144 if (ret == -EINPROGRESS) { 144 if ((ret == -EINPROGRESS) || (ret == -EBUSY)) {
145 wait_for_completion(&compl.completion); 145 wait_for_completion(&compl.completion);
146 ret = compl.err; 146 ret = compl.err;
147 } 147 }
diff --git a/crypto/asymmetric_keys/verify_pefile.c b/crypto/asymmetric_keys/verify_pefile.c
index 672a94c2c3ff..d178650fd524 100644
--- a/crypto/asymmetric_keys/verify_pefile.c
+++ b/crypto/asymmetric_keys/verify_pefile.c
@@ -381,7 +381,7 @@ static int pefile_digest_pe(const void *pebuf, unsigned int pelen,
381 } 381 }
382 382
383error: 383error:
384 kfree(desc); 384 kzfree(desc);
385error_no_desc: 385error_no_desc:
386 crypto_free_shash(tfm); 386 crypto_free_shash(tfm);
387 kleave(" = %d", ret); 387 kleave(" = %d", ret);
@@ -450,6 +450,6 @@ int verify_pefile_signature(const void *pebuf, unsigned pelen,
450 ret = pefile_digest_pe(pebuf, pelen, &ctx); 450 ret = pefile_digest_pe(pebuf, pelen, &ctx);
451 451
452error: 452error:
453 kfree(ctx.digest); 453 kzfree(ctx.digest);
454 return ret; 454 return ret;
455} 455}
diff --git a/crypto/asymmetric_keys/x509_cert_parser.c b/crypto/asymmetric_keys/x509_cert_parser.c
index c80765b211cf..dd03fead1ca3 100644
--- a/crypto/asymmetric_keys/x509_cert_parser.c
+++ b/crypto/asymmetric_keys/x509_cert_parser.c
@@ -102,6 +102,7 @@ struct x509_certificate *x509_cert_parse(const void *data, size_t datalen)
102 } 102 }
103 } 103 }
104 104
105 ret = -ENOMEM;
105 cert->pub->key = kmemdup(ctx->key, ctx->key_size, GFP_KERNEL); 106 cert->pub->key = kmemdup(ctx->key, ctx->key_size, GFP_KERNEL);
106 if (!cert->pub->key) 107 if (!cert->pub->key)
107 goto error_decode; 108 goto error_decode;
diff --git a/crypto/drbg.c b/crypto/drbg.c
index fa749f470135..cdb27ac4b226 100644
--- a/crypto/drbg.c
+++ b/crypto/drbg.c
@@ -1767,9 +1767,8 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
1767 break; 1767 break;
1768 case -EINPROGRESS: 1768 case -EINPROGRESS:
1769 case -EBUSY: 1769 case -EBUSY:
1770 ret = wait_for_completion_interruptible( 1770 wait_for_completion(&drbg->ctr_completion);
1771 &drbg->ctr_completion); 1771 if (!drbg->ctr_async_err) {
1772 if (!ret && !drbg->ctr_async_err) {
1773 reinit_completion(&drbg->ctr_completion); 1772 reinit_completion(&drbg->ctr_completion);
1774 break; 1773 break;
1775 } 1774 }
diff --git a/crypto/gcm.c b/crypto/gcm.c
index b7ad808be3d4..3841b5eafa7e 100644
--- a/crypto/gcm.c
+++ b/crypto/gcm.c
@@ -152,10 +152,8 @@ static int crypto_gcm_setkey(struct crypto_aead *aead, const u8 *key,
152 152
153 err = crypto_skcipher_encrypt(&data->req); 153 err = crypto_skcipher_encrypt(&data->req);
154 if (err == -EINPROGRESS || err == -EBUSY) { 154 if (err == -EINPROGRESS || err == -EBUSY) {
155 err = wait_for_completion_interruptible( 155 wait_for_completion(&data->result.completion);
156 &data->result.completion); 156 err = data->result.err;
157 if (!err)
158 err = data->result.err;
159 } 157 }
160 158
161 if (err) 159 if (err)
diff --git a/crypto/skcipher.c b/crypto/skcipher.c
index 014af741fc6a..4faa0fd53b0c 100644
--- a/crypto/skcipher.c
+++ b/crypto/skcipher.c
@@ -764,6 +764,44 @@ static int crypto_init_skcipher_ops_ablkcipher(struct crypto_tfm *tfm)
764 return 0; 764 return 0;
765} 765}
766 766
767static int skcipher_setkey_unaligned(struct crypto_skcipher *tfm,
768 const u8 *key, unsigned int keylen)
769{
770 unsigned long alignmask = crypto_skcipher_alignmask(tfm);
771 struct skcipher_alg *cipher = crypto_skcipher_alg(tfm);
772 u8 *buffer, *alignbuffer;
773 unsigned long absize;
774 int ret;
775
776 absize = keylen + alignmask;
777 buffer = kmalloc(absize, GFP_ATOMIC);
778 if (!buffer)
779 return -ENOMEM;
780
781 alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
782 memcpy(alignbuffer, key, keylen);
783 ret = cipher->setkey(tfm, alignbuffer, keylen);
784 kzfree(buffer);
785 return ret;
786}
787
788static int skcipher_setkey(struct crypto_skcipher *tfm, const u8 *key,
789 unsigned int keylen)
790{
791 struct skcipher_alg *cipher = crypto_skcipher_alg(tfm);
792 unsigned long alignmask = crypto_skcipher_alignmask(tfm);
793
794 if (keylen < cipher->min_keysize || keylen > cipher->max_keysize) {
795 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN);
796 return -EINVAL;
797 }
798
799 if ((unsigned long)key & alignmask)
800 return skcipher_setkey_unaligned(tfm, key, keylen);
801
802 return cipher->setkey(tfm, key, keylen);
803}
804
767static void crypto_skcipher_exit_tfm(struct crypto_tfm *tfm) 805static void crypto_skcipher_exit_tfm(struct crypto_tfm *tfm)
768{ 806{
769 struct crypto_skcipher *skcipher = __crypto_skcipher_cast(tfm); 807 struct crypto_skcipher *skcipher = __crypto_skcipher_cast(tfm);
@@ -784,7 +822,7 @@ static int crypto_skcipher_init_tfm(struct crypto_tfm *tfm)
784 tfm->__crt_alg->cra_type == &crypto_givcipher_type) 822 tfm->__crt_alg->cra_type == &crypto_givcipher_type)
785 return crypto_init_skcipher_ops_ablkcipher(tfm); 823 return crypto_init_skcipher_ops_ablkcipher(tfm);
786 824
787 skcipher->setkey = alg->setkey; 825 skcipher->setkey = skcipher_setkey;
788 skcipher->encrypt = alg->encrypt; 826 skcipher->encrypt = alg->encrypt;
789 skcipher->decrypt = alg->decrypt; 827 skcipher->decrypt = alg->decrypt;
790 skcipher->ivsize = alg->ivsize; 828 skcipher->ivsize = alg->ivsize;
diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c
index 5a968a78652b..0d2e98920069 100644
--- a/drivers/acpi/acpica/tbutils.c
+++ b/drivers/acpi/acpica/tbutils.c
@@ -416,13 +416,18 @@ acpi_tb_get_table(struct acpi_table_desc *table_desc,
416 } 416 }
417 } 417 }
418 418
419 table_desc->validation_count++; 419 if (table_desc->validation_count < ACPI_MAX_TABLE_VALIDATIONS) {
420 if (table_desc->validation_count == 0) { 420 table_desc->validation_count++;
421 ACPI_ERROR((AE_INFO, 421
422 "Table %p, Validation count is zero after increment\n", 422 /*
423 table_desc)); 423 * Detect validation_count overflows to ensure that the warning
424 table_desc->validation_count--; 424 * message will only be printed once.
425 return_ACPI_STATUS(AE_LIMIT); 425 */
426 if (table_desc->validation_count >= ACPI_MAX_TABLE_VALIDATIONS) {
427 ACPI_WARNING((AE_INFO,
428 "Table %p, Validation count overflows\n",
429 table_desc));
430 }
426 } 431 }
427 432
428 *out_table = table_desc->pointer; 433 *out_table = table_desc->pointer;
@@ -449,13 +454,20 @@ void acpi_tb_put_table(struct acpi_table_desc *table_desc)
449 454
450 ACPI_FUNCTION_TRACE(acpi_tb_put_table); 455 ACPI_FUNCTION_TRACE(acpi_tb_put_table);
451 456
452 if (table_desc->validation_count == 0) { 457 if (table_desc->validation_count < ACPI_MAX_TABLE_VALIDATIONS) {
453 ACPI_WARNING((AE_INFO, 458 table_desc->validation_count--;
454 "Table %p, Validation count is zero before decrement\n", 459
455 table_desc)); 460 /*
456 return_VOID; 461 * Detect validation_count underflows to ensure that the warning
462 * message will only be printed once.
463 */
464 if (table_desc->validation_count >= ACPI_MAX_TABLE_VALIDATIONS) {
465 ACPI_WARNING((AE_INFO,
466 "Table %p, Validation count underflows\n",
467 table_desc));
468 return_VOID;
469 }
457 } 470 }
458 table_desc->validation_count--;
459 471
460 if (table_desc->validation_count == 0) { 472 if (table_desc->validation_count == 0) {
461 473
diff --git a/drivers/acpi/acpica/utresrc.c b/drivers/acpi/acpica/utresrc.c
index e0587c85bafd..ff096d9755b9 100644
--- a/drivers/acpi/acpica/utresrc.c
+++ b/drivers/acpi/acpica/utresrc.c
@@ -474,15 +474,6 @@ acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state,
474 return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); 474 return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
475 } 475 }
476 476
477 /*
478 * The end_tag opcode must be followed by a zero byte.
479 * Although this byte is technically defined to be a checksum,
480 * in practice, all ASL compilers set this byte to zero.
481 */
482 if (*(aml + 1) != 0) {
483 return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
484 }
485
486 /* Return the pointer to the end_tag if requested */ 477 /* Return the pointer to the end_tag if requested */
487 478
488 if (!user_function) { 479 if (!user_function) {
diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index c5fecf97ee2f..797b28dc7b34 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -666,14 +666,6 @@ static const struct iommu_ops *iort_iommu_xlate(struct device *dev,
666 int ret = -ENODEV; 666 int ret = -ENODEV;
667 struct fwnode_handle *iort_fwnode; 667 struct fwnode_handle *iort_fwnode;
668 668
669 /*
670 * If we already translated the fwspec there
671 * is nothing left to do, return the iommu_ops.
672 */
673 ops = iort_fwspec_iommu_ops(dev->iommu_fwspec);
674 if (ops)
675 return ops;
676
677 if (node) { 669 if (node) {
678 iort_fwnode = iort_get_fwnode(node); 670 iort_fwnode = iort_get_fwnode(node);
679 if (!iort_fwnode) 671 if (!iort_fwnode)
@@ -735,6 +727,14 @@ const struct iommu_ops *iort_iommu_configure(struct device *dev)
735 u32 streamid = 0; 727 u32 streamid = 0;
736 int err; 728 int err;
737 729
730 /*
731 * If we already translated the fwspec there
732 * is nothing left to do, return the iommu_ops.
733 */
734 ops = iort_fwspec_iommu_ops(dev->iommu_fwspec);
735 if (ops)
736 return ops;
737
738 if (dev_is_pci(dev)) { 738 if (dev_is_pci(dev)) {
739 struct pci_bus *bus = to_pci_dev(dev)->bus; 739 struct pci_bus *bus = to_pci_dev(dev)->bus;
740 u32 rid; 740 u32 rid;
@@ -782,6 +782,12 @@ const struct iommu_ops *iort_iommu_configure(struct device *dev)
782 if (err) 782 if (err)
783 ops = ERR_PTR(err); 783 ops = ERR_PTR(err);
784 784
785 /* Ignore all other errors apart from EPROBE_DEFER */
786 if (IS_ERR(ops) && (PTR_ERR(ops) != -EPROBE_DEFER)) {
787 dev_dbg(dev, "Adding to IOMMU failed: %ld\n", PTR_ERR(ops));
788 ops = NULL;
789 }
790
785 return ops; 791 return ops;
786} 792}
787 793
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index a9a9ab3399d4..d42eeef9d928 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -782,7 +782,7 @@ static int acpi_battery_update(struct acpi_battery *battery, bool resume)
782 if ((battery->state & ACPI_BATTERY_STATE_CRITICAL) || 782 if ((battery->state & ACPI_BATTERY_STATE_CRITICAL) ||
783 (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) && 783 (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) &&
784 (battery->capacity_now <= battery->alarm))) 784 (battery->capacity_now <= battery->alarm)))
785 pm_wakeup_hard_event(&battery->device->dev); 785 pm_wakeup_event(&battery->device->dev, 0);
786 786
787 return result; 787 return result;
788} 788}
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c
index b7c2a06963d6..e19f530f1083 100644
--- a/drivers/acpi/button.c
+++ b/drivers/acpi/button.c
@@ -57,6 +57,7 @@
57 57
58#define ACPI_BUTTON_LID_INIT_IGNORE 0x00 58#define ACPI_BUTTON_LID_INIT_IGNORE 0x00
59#define ACPI_BUTTON_LID_INIT_OPEN 0x01 59#define ACPI_BUTTON_LID_INIT_OPEN 0x01
60#define ACPI_BUTTON_LID_INIT_METHOD 0x02
60 61
61#define _COMPONENT ACPI_BUTTON_COMPONENT 62#define _COMPONENT ACPI_BUTTON_COMPONENT
62ACPI_MODULE_NAME("button"); 63ACPI_MODULE_NAME("button");
@@ -112,7 +113,7 @@ struct acpi_button {
112 113
113static BLOCKING_NOTIFIER_HEAD(acpi_lid_notifier); 114static BLOCKING_NOTIFIER_HEAD(acpi_lid_notifier);
114static struct acpi_device *lid_device; 115static struct acpi_device *lid_device;
115static u8 lid_init_state = ACPI_BUTTON_LID_INIT_OPEN; 116static u8 lid_init_state = ACPI_BUTTON_LID_INIT_METHOD;
116 117
117static unsigned long lid_report_interval __read_mostly = 500; 118static unsigned long lid_report_interval __read_mostly = 500;
118module_param(lid_report_interval, ulong, 0644); 119module_param(lid_report_interval, ulong, 0644);
@@ -216,7 +217,7 @@ static int acpi_lid_notify_state(struct acpi_device *device, int state)
216 } 217 }
217 218
218 if (state) 219 if (state)
219 pm_wakeup_hard_event(&device->dev); 220 pm_wakeup_event(&device->dev, 0);
220 221
221 ret = blocking_notifier_call_chain(&acpi_lid_notifier, state, device); 222 ret = blocking_notifier_call_chain(&acpi_lid_notifier, state, device);
222 if (ret == NOTIFY_DONE) 223 if (ret == NOTIFY_DONE)
@@ -376,6 +377,9 @@ static void acpi_lid_initialize_state(struct acpi_device *device)
376 case ACPI_BUTTON_LID_INIT_OPEN: 377 case ACPI_BUTTON_LID_INIT_OPEN:
377 (void)acpi_lid_notify_state(device, 1); 378 (void)acpi_lid_notify_state(device, 1);
378 break; 379 break;
380 case ACPI_BUTTON_LID_INIT_METHOD:
381 (void)acpi_lid_update_state(device);
382 break;
379 case ACPI_BUTTON_LID_INIT_IGNORE: 383 case ACPI_BUTTON_LID_INIT_IGNORE:
380 default: 384 default:
381 break; 385 break;
@@ -398,7 +402,7 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
398 } else { 402 } else {
399 int keycode; 403 int keycode;
400 404
401 pm_wakeup_hard_event(&device->dev); 405 pm_wakeup_event(&device->dev, 0);
402 if (button->suspended) 406 if (button->suspended)
403 break; 407 break;
404 408
@@ -530,7 +534,6 @@ static int acpi_button_add(struct acpi_device *device)
530 lid_device = device; 534 lid_device = device;
531 } 535 }
532 536
533 device_init_wakeup(&device->dev, true);
534 printk(KERN_INFO PREFIX "%s [%s]\n", name, acpi_device_bid(device)); 537 printk(KERN_INFO PREFIX "%s [%s]\n", name, acpi_device_bid(device));
535 return 0; 538 return 0;
536 539
@@ -560,6 +563,9 @@ static int param_set_lid_init_state(const char *val, struct kernel_param *kp)
560 if (!strncmp(val, "open", sizeof("open") - 1)) { 563 if (!strncmp(val, "open", sizeof("open") - 1)) {
561 lid_init_state = ACPI_BUTTON_LID_INIT_OPEN; 564 lid_init_state = ACPI_BUTTON_LID_INIT_OPEN;
562 pr_info("Notify initial lid state as open\n"); 565 pr_info("Notify initial lid state as open\n");
566 } else if (!strncmp(val, "method", sizeof("method") - 1)) {
567 lid_init_state = ACPI_BUTTON_LID_INIT_METHOD;
568 pr_info("Notify initial lid state with _LID return value\n");
563 } else if (!strncmp(val, "ignore", sizeof("ignore") - 1)) { 569 } else if (!strncmp(val, "ignore", sizeof("ignore") - 1)) {
564 lid_init_state = ACPI_BUTTON_LID_INIT_IGNORE; 570 lid_init_state = ACPI_BUTTON_LID_INIT_IGNORE;
565 pr_info("Do not notify initial lid state\n"); 571 pr_info("Do not notify initial lid state\n");
@@ -573,6 +579,8 @@ static int param_get_lid_init_state(char *buffer, struct kernel_param *kp)
573 switch (lid_init_state) { 579 switch (lid_init_state) {
574 case ACPI_BUTTON_LID_INIT_OPEN: 580 case ACPI_BUTTON_LID_INIT_OPEN:
575 return sprintf(buffer, "open"); 581 return sprintf(buffer, "open");
582 case ACPI_BUTTON_LID_INIT_METHOD:
583 return sprintf(buffer, "method");
576 case ACPI_BUTTON_LID_INIT_IGNORE: 584 case ACPI_BUTTON_LID_INIT_IGNORE:
577 return sprintf(buffer, "ignore"); 585 return sprintf(buffer, "ignore");
578 default: 586 default:
diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
index 798d5003a039..993fd31394c8 100644
--- a/drivers/acpi/device_pm.c
+++ b/drivers/acpi/device_pm.c
@@ -24,7 +24,6 @@
24#include <linux/pm_qos.h> 24#include <linux/pm_qos.h>
25#include <linux/pm_domain.h> 25#include <linux/pm_domain.h>
26#include <linux/pm_runtime.h> 26#include <linux/pm_runtime.h>
27#include <linux/suspend.h>
28 27
29#include "internal.h" 28#include "internal.h"
30 29
@@ -400,7 +399,7 @@ static void acpi_pm_notify_handler(acpi_handle handle, u32 val, void *not_used)
400 mutex_lock(&acpi_pm_notifier_lock); 399 mutex_lock(&acpi_pm_notifier_lock);
401 400
402 if (adev->wakeup.flags.notifier_present) { 401 if (adev->wakeup.flags.notifier_present) {
403 pm_wakeup_ws_event(adev->wakeup.ws, 0, true); 402 __pm_wakeup_event(adev->wakeup.ws, 0);
404 if (adev->wakeup.context.work.func) 403 if (adev->wakeup.context.work.func)
405 queue_pm_work(&adev->wakeup.context.work); 404 queue_pm_work(&adev->wakeup.context.work);
406 } 405 }
diff --git a/drivers/acpi/nfit/mce.c b/drivers/acpi/nfit/mce.c
index 3ba1c3472cf9..fd86bec98dea 100644
--- a/drivers/acpi/nfit/mce.c
+++ b/drivers/acpi/nfit/mce.c
@@ -26,7 +26,7 @@ static int nfit_handle_mce(struct notifier_block *nb, unsigned long val,
26 struct nfit_spa *nfit_spa; 26 struct nfit_spa *nfit_spa;
27 27
28 /* We only care about memory errors */ 28 /* We only care about memory errors */
29 if (!(mce->status & MCACOD)) 29 if (!mce_is_memory_error(mce))
30 return NOTIFY_DONE; 30 return NOTIFY_DONE;
31 31
32 /* 32 /*
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index e39ec7b7cb67..d53162997f32 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1371,8 +1371,8 @@ int acpi_dma_configure(struct device *dev, enum dev_dma_attr attr)
1371 iort_set_dma_mask(dev); 1371 iort_set_dma_mask(dev);
1372 1372
1373 iommu = iort_iommu_configure(dev); 1373 iommu = iort_iommu_configure(dev);
1374 if (IS_ERR(iommu)) 1374 if (IS_ERR(iommu) && PTR_ERR(iommu) == -EPROBE_DEFER)
1375 return PTR_ERR(iommu); 1375 return -EPROBE_DEFER;
1376 1376
1377 size = max(dev->coherent_dma_mask, dev->coherent_dma_mask + 1); 1377 size = max(dev->coherent_dma_mask, dev->coherent_dma_mask + 1);
1378 /* 1378 /*
@@ -1428,6 +1428,37 @@ static void acpi_init_coherency(struct acpi_device *adev)
1428 adev->flags.coherent_dma = cca; 1428 adev->flags.coherent_dma = cca;
1429} 1429}
1430 1430
1431static int acpi_check_spi_i2c_slave(struct acpi_resource *ares, void *data)
1432{
1433 bool *is_spi_i2c_slave_p = data;
1434
1435 if (ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS)
1436 return 1;
1437
1438 /*
1439 * devices that are connected to UART still need to be enumerated to
1440 * platform bus
1441 */
1442 if (ares->data.common_serial_bus.type != ACPI_RESOURCE_SERIAL_TYPE_UART)
1443 *is_spi_i2c_slave_p = true;
1444
1445 /* no need to do more checking */
1446 return -1;
1447}
1448
1449static bool acpi_is_spi_i2c_slave(struct acpi_device *device)
1450{
1451 struct list_head resource_list;
1452 bool is_spi_i2c_slave = false;
1453
1454 INIT_LIST_HEAD(&resource_list);
1455 acpi_dev_get_resources(device, &resource_list, acpi_check_spi_i2c_slave,
1456 &is_spi_i2c_slave);
1457 acpi_dev_free_resource_list(&resource_list);
1458
1459 return is_spi_i2c_slave;
1460}
1461
1431void acpi_init_device_object(struct acpi_device *device, acpi_handle handle, 1462void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
1432 int type, unsigned long long sta) 1463 int type, unsigned long long sta)
1433{ 1464{
@@ -1443,6 +1474,7 @@ void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
1443 acpi_bus_get_flags(device); 1474 acpi_bus_get_flags(device);
1444 device->flags.match_driver = false; 1475 device->flags.match_driver = false;
1445 device->flags.initialized = true; 1476 device->flags.initialized = true;
1477 device->flags.spi_i2c_slave = acpi_is_spi_i2c_slave(device);
1446 acpi_device_clear_enumerated(device); 1478 acpi_device_clear_enumerated(device);
1447 device_initialize(&device->dev); 1479 device_initialize(&device->dev);
1448 dev_set_uevent_suppress(&device->dev, true); 1480 dev_set_uevent_suppress(&device->dev, true);
@@ -1727,38 +1759,13 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl_not_used,
1727 return AE_OK; 1759 return AE_OK;
1728} 1760}
1729 1761
1730static int acpi_check_spi_i2c_slave(struct acpi_resource *ares, void *data)
1731{
1732 bool *is_spi_i2c_slave_p = data;
1733
1734 if (ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS)
1735 return 1;
1736
1737 /*
1738 * devices that are connected to UART still need to be enumerated to
1739 * platform bus
1740 */
1741 if (ares->data.common_serial_bus.type != ACPI_RESOURCE_SERIAL_TYPE_UART)
1742 *is_spi_i2c_slave_p = true;
1743
1744 /* no need to do more checking */
1745 return -1;
1746}
1747
1748static void acpi_default_enumeration(struct acpi_device *device) 1762static void acpi_default_enumeration(struct acpi_device *device)
1749{ 1763{
1750 struct list_head resource_list;
1751 bool is_spi_i2c_slave = false;
1752
1753 /* 1764 /*
1754 * Do not enumerate SPI/I2C slaves as they will be enumerated by their 1765 * Do not enumerate SPI/I2C slaves as they will be enumerated by their
1755 * respective parents. 1766 * respective parents.
1756 */ 1767 */
1757 INIT_LIST_HEAD(&resource_list); 1768 if (!device->flags.spi_i2c_slave) {
1758 acpi_dev_get_resources(device, &resource_list, acpi_check_spi_i2c_slave,
1759 &is_spi_i2c_slave);
1760 acpi_dev_free_resource_list(&resource_list);
1761 if (!is_spi_i2c_slave) {
1762 acpi_create_platform_device(device, NULL); 1769 acpi_create_platform_device(device, NULL);
1763 acpi_device_set_enumerated(device); 1770 acpi_device_set_enumerated(device);
1764 } else { 1771 } else {
@@ -1854,7 +1861,7 @@ static void acpi_bus_attach(struct acpi_device *device)
1854 return; 1861 return;
1855 1862
1856 device->flags.match_driver = true; 1863 device->flags.match_driver = true;
1857 if (ret > 0) { 1864 if (ret > 0 && !device->flags.spi_i2c_slave) {
1858 acpi_device_set_enumerated(device); 1865 acpi_device_set_enumerated(device);
1859 goto ok; 1866 goto ok;
1860 } 1867 }
@@ -1863,10 +1870,10 @@ static void acpi_bus_attach(struct acpi_device *device)
1863 if (ret < 0) 1870 if (ret < 0)
1864 return; 1871 return;
1865 1872
1866 if (device->pnp.type.platform_id) 1873 if (!device->pnp.type.platform_id && !device->flags.spi_i2c_slave)
1867 acpi_default_enumeration(device);
1868 else
1869 acpi_device_set_enumerated(device); 1874 acpi_device_set_enumerated(device);
1875 else
1876 acpi_default_enumeration(device);
1870 1877
1871 ok: 1878 ok:
1872 list_for_each_entry(child, &device->children, node) 1879 list_for_each_entry(child, &device->children, node)
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index a6574d626340..097d630ab886 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -663,40 +663,14 @@ static int acpi_freeze_prepare(void)
663 acpi_os_wait_events_complete(); 663 acpi_os_wait_events_complete();
664 if (acpi_sci_irq_valid()) 664 if (acpi_sci_irq_valid())
665 enable_irq_wake(acpi_sci_irq); 665 enable_irq_wake(acpi_sci_irq);
666
667 return 0; 666 return 0;
668} 667}
669 668
670static void acpi_freeze_wake(void)
671{
672 /*
673 * If IRQD_WAKEUP_ARMED is not set for the SCI at this point, it means
674 * that the SCI has triggered while suspended, so cancel the wakeup in
675 * case it has not been a wakeup event (the GPEs will be checked later).
676 */
677 if (acpi_sci_irq_valid() &&
678 !irqd_is_wakeup_armed(irq_get_irq_data(acpi_sci_irq)))
679 pm_system_cancel_wakeup();
680}
681
682static void acpi_freeze_sync(void)
683{
684 /*
685 * Process all pending events in case there are any wakeup ones.
686 *
687 * The EC driver uses the system workqueue, so that one needs to be
688 * flushed too.
689 */
690 acpi_os_wait_events_complete();
691 flush_scheduled_work();
692}
693
694static void acpi_freeze_restore(void) 669static void acpi_freeze_restore(void)
695{ 670{
696 acpi_disable_wakeup_devices(ACPI_STATE_S0); 671 acpi_disable_wakeup_devices(ACPI_STATE_S0);
697 if (acpi_sci_irq_valid()) 672 if (acpi_sci_irq_valid())
698 disable_irq_wake(acpi_sci_irq); 673 disable_irq_wake(acpi_sci_irq);
699
700 acpi_enable_all_runtime_gpes(); 674 acpi_enable_all_runtime_gpes();
701} 675}
702 676
@@ -708,8 +682,6 @@ static void acpi_freeze_end(void)
708static const struct platform_freeze_ops acpi_freeze_ops = { 682static const struct platform_freeze_ops acpi_freeze_ops = {
709 .begin = acpi_freeze_begin, 683 .begin = acpi_freeze_begin,
710 .prepare = acpi_freeze_prepare, 684 .prepare = acpi_freeze_prepare,
711 .wake = acpi_freeze_wake,
712 .sync = acpi_freeze_sync,
713 .restore = acpi_freeze_restore, 685 .restore = acpi_freeze_restore,
714 .end = acpi_freeze_end, 686 .end = acpi_freeze_end,
715}; 687};
diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
index 1b5ee1e0e5a3..e414fabf7315 100644
--- a/drivers/acpi/sysfs.c
+++ b/drivers/acpi/sysfs.c
@@ -333,14 +333,17 @@ static ssize_t acpi_table_show(struct file *filp, struct kobject *kobj,
333 container_of(bin_attr, struct acpi_table_attr, attr); 333 container_of(bin_attr, struct acpi_table_attr, attr);
334 struct acpi_table_header *table_header = NULL; 334 struct acpi_table_header *table_header = NULL;
335 acpi_status status; 335 acpi_status status;
336 ssize_t rc;
336 337
337 status = acpi_get_table(table_attr->name, table_attr->instance, 338 status = acpi_get_table(table_attr->name, table_attr->instance,
338 &table_header); 339 &table_header);
339 if (ACPI_FAILURE(status)) 340 if (ACPI_FAILURE(status))
340 return -ENODEV; 341 return -ENODEV;
341 342
342 return memory_read_from_buffer(buf, count, &offset, 343 rc = memory_read_from_buffer(buf, count, &offset, table_header,
343 table_header, table_header->length); 344 table_header->length);
345 acpi_put_table(table_header);
346 return rc;
344} 347}
345 348
346static int acpi_table_attr_init(struct kobject *tables_obj, 349static int acpi_table_attr_init(struct kobject *tables_obj,
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 2fc52407306c..c69954023c2e 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -1364,6 +1364,40 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host)
1364{} 1364{}
1365#endif 1365#endif
1366 1366
1367/*
1368 * On the Acer Aspire Switch Alpha 12, sometimes all SATA ports are detected
1369 * as DUMMY, or detected but eventually get a "link down" and never get up
1370 * again. When this happens, CAP.NP may hold a value of 0x00 or 0x01, and the
1371 * port_map may hold a value of 0x00.
1372 *
1373 * Overriding CAP.NP to 0x02 and the port_map to 0x7 will reveal all 3 ports
1374 * and can significantly reduce the occurrence of the problem.
1375 *
1376 * https://bugzilla.kernel.org/show_bug.cgi?id=189471
1377 */
1378static void acer_sa5_271_workaround(struct ahci_host_priv *hpriv,
1379 struct pci_dev *pdev)
1380{
1381 static const struct dmi_system_id sysids[] = {
1382 {
1383 .ident = "Acer Switch Alpha 12",
1384 .matches = {
1385 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
1386 DMI_MATCH(DMI_PRODUCT_NAME, "Switch SA5-271")
1387 },
1388 },
1389 { }
1390 };
1391
1392 if (dmi_check_system(sysids)) {
1393 dev_info(&pdev->dev, "enabling Acer Switch Alpha 12 workaround\n");
1394 if ((hpriv->saved_cap & 0xC734FF00) == 0xC734FF00) {
1395 hpriv->port_map = 0x7;
1396 hpriv->cap = 0xC734FF02;
1397 }
1398 }
1399}
1400
1367#ifdef CONFIG_ARM64 1401#ifdef CONFIG_ARM64
1368/* 1402/*
1369 * Due to ERRATA#22536, ThunderX needs to handle HOST_IRQ_STAT differently. 1403 * Due to ERRATA#22536, ThunderX needs to handle HOST_IRQ_STAT differently.
@@ -1636,6 +1670,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1636 "online status unreliable, applying workaround\n"); 1670 "online status unreliable, applying workaround\n");
1637 } 1671 }
1638 1672
1673
1674 /* Acer SA5-271 workaround modifies private_data */
1675 acer_sa5_271_workaround(hpriv, pdev);
1676
1639 /* CAP.NP sometimes indicate the index of the last enabled 1677 /* CAP.NP sometimes indicate the index of the last enabled
1640 * port, at other times, that of the last possible port, so 1678 * port, at other times, that of the last possible port, so
1641 * determining the maximum port number requires looking at 1679 * determining the maximum port number requires looking at
diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c
index aaa761b9081c..cd2eab6aa92e 100644
--- a/drivers/ata/libahci_platform.c
+++ b/drivers/ata/libahci_platform.c
@@ -514,8 +514,9 @@ int ahci_platform_init_host(struct platform_device *pdev,
514 514
515 irq = platform_get_irq(pdev, 0); 515 irq = platform_get_irq(pdev, 0);
516 if (irq <= 0) { 516 if (irq <= 0) {
517 dev_err(dev, "no irq\n"); 517 if (irq != -EPROBE_DEFER)
518 return -EINVAL; 518 dev_err(dev, "no irq\n");
519 return irq;
519 } 520 }
520 521
521 hpriv->irq = irq; 522 hpriv->irq = irq;
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 2d83b8c75965..e157a0e44419 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -6800,7 +6800,7 @@ static int __init ata_parse_force_one(char **cur,
6800 } 6800 }
6801 6801
6802 force_ent->port = simple_strtoul(id, &endp, 10); 6802 force_ent->port = simple_strtoul(id, &endp, 10);
6803 if (p == endp || *endp != '\0') { 6803 if (id == endp || *endp != '\0') {
6804 *reason = "invalid port/link"; 6804 *reason = "invalid port/link";
6805 return -EINVAL; 6805 return -EINVAL;
6806 } 6806 }
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index b66bcda88320..3b2246dded74 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -4067,7 +4067,6 @@ static int mv_platform_probe(struct platform_device *pdev)
4067 struct ata_host *host; 4067 struct ata_host *host;
4068 struct mv_host_priv *hpriv; 4068 struct mv_host_priv *hpriv;
4069 struct resource *res; 4069 struct resource *res;
4070 void __iomem *mmio;
4071 int n_ports = 0, irq = 0; 4070 int n_ports = 0, irq = 0;
4072 int rc; 4071 int rc;
4073 int port; 4072 int port;
@@ -4086,9 +4085,8 @@ static int mv_platform_probe(struct platform_device *pdev)
4086 * Get the register base first 4085 * Get the register base first
4087 */ 4086 */
4088 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 4087 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
4089 mmio = devm_ioremap_resource(&pdev->dev, res); 4088 if (res == NULL)
4090 if (IS_ERR(mmio)) 4089 return -EINVAL;
4091 return PTR_ERR(mmio);
4092 4090
4093 /* allocate host */ 4091 /* allocate host */
4094 if (pdev->dev.of_node) { 4092 if (pdev->dev.of_node) {
@@ -4132,7 +4130,12 @@ static int mv_platform_probe(struct platform_device *pdev)
4132 hpriv->board_idx = chip_soc; 4130 hpriv->board_idx = chip_soc;
4133 4131
4134 host->iomap = NULL; 4132 host->iomap = NULL;
4135 hpriv->base = mmio - SATAHC0_REG_BASE; 4133 hpriv->base = devm_ioremap(&pdev->dev, res->start,
4134 resource_size(res));
4135 if (!hpriv->base)
4136 return -ENOMEM;
4137
4138 hpriv->base -= SATAHC0_REG_BASE;
4136 4139
4137 hpriv->clk = clk_get(&pdev->dev, NULL); 4140 hpriv->clk = clk_get(&pdev->dev, NULL);
4138 if (IS_ERR(hpriv->clk)) 4141 if (IS_ERR(hpriv->clk))
diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c
index 5d38245a7a73..b7939a2c1fab 100644
--- a/drivers/ata/sata_rcar.c
+++ b/drivers/ata/sata_rcar.c
@@ -890,7 +890,10 @@ static int sata_rcar_probe(struct platform_device *pdev)
890 dev_err(&pdev->dev, "failed to get access to sata clock\n"); 890 dev_err(&pdev->dev, "failed to get access to sata clock\n");
891 return PTR_ERR(priv->clk); 891 return PTR_ERR(priv->clk);
892 } 892 }
893 clk_prepare_enable(priv->clk); 893
894 ret = clk_prepare_enable(priv->clk);
895 if (ret)
896 return ret;
894 897
895 host = ata_host_alloc(&pdev->dev, 1); 898 host = ata_host_alloc(&pdev->dev, 1);
896 if (!host) { 899 if (!host) {
@@ -970,8 +973,11 @@ static int sata_rcar_resume(struct device *dev)
970 struct ata_host *host = dev_get_drvdata(dev); 973 struct ata_host *host = dev_get_drvdata(dev);
971 struct sata_rcar_priv *priv = host->private_data; 974 struct sata_rcar_priv *priv = host->private_data;
972 void __iomem *base = priv->base; 975 void __iomem *base = priv->base;
976 int ret;
973 977
974 clk_prepare_enable(priv->clk); 978 ret = clk_prepare_enable(priv->clk);
979 if (ret)
980 return ret;
975 981
976 /* ack and mask */ 982 /* ack and mask */
977 iowrite32(0, base + SATAINTSTAT_REG); 983 iowrite32(0, base + SATAINTSTAT_REG);
@@ -988,8 +994,11 @@ static int sata_rcar_restore(struct device *dev)
988{ 994{
989 struct ata_host *host = dev_get_drvdata(dev); 995 struct ata_host *host = dev_get_drvdata(dev);
990 struct sata_rcar_priv *priv = host->private_data; 996 struct sata_rcar_priv *priv = host->private_data;
997 int ret;
991 998
992 clk_prepare_enable(priv->clk); 999 ret = clk_prepare_enable(priv->clk);
1000 if (ret)
1001 return ret;
993 1002
994 sata_rcar_setup_port(host); 1003 sata_rcar_setup_port(host);
995 1004
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index e987a6f55d36..9faee1c893e5 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -1091,6 +1091,11 @@ static int __device_suspend_noirq(struct device *dev, pm_message_t state, bool a
1091 if (async_error) 1091 if (async_error)
1092 goto Complete; 1092 goto Complete;
1093 1093
1094 if (pm_wakeup_pending()) {
1095 async_error = -EBUSY;
1096 goto Complete;
1097 }
1098
1094 if (dev->power.syscore || dev->power.direct_complete) 1099 if (dev->power.syscore || dev->power.direct_complete)
1095 goto Complete; 1100 goto Complete;
1096 1101
diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
index f62082fdd670..c313b600d356 100644
--- a/drivers/base/power/wakeup.c
+++ b/drivers/base/power/wakeup.c
@@ -28,8 +28,8 @@ bool events_check_enabled __read_mostly;
28/* First wakeup IRQ seen by the kernel in the last cycle. */ 28/* First wakeup IRQ seen by the kernel in the last cycle. */
29unsigned int pm_wakeup_irq __read_mostly; 29unsigned int pm_wakeup_irq __read_mostly;
30 30
31/* If greater than 0 and the system is suspending, terminate the suspend. */ 31/* If set and the system is suspending, terminate the suspend. */
32static atomic_t pm_abort_suspend __read_mostly; 32static bool pm_abort_suspend __read_mostly;
33 33
34/* 34/*
35 * Combined counters of registered wakeup events and wakeup events in progress. 35 * Combined counters of registered wakeup events and wakeup events in progress.
@@ -512,13 +512,12 @@ static bool wakeup_source_not_registered(struct wakeup_source *ws)
512/** 512/**
513 * wakup_source_activate - Mark given wakeup source as active. 513 * wakup_source_activate - Mark given wakeup source as active.
514 * @ws: Wakeup source to handle. 514 * @ws: Wakeup source to handle.
515 * @hard: If set, abort suspends in progress and wake up from suspend-to-idle.
516 * 515 *
517 * Update the @ws' statistics and, if @ws has just been activated, notify the PM 516 * Update the @ws' statistics and, if @ws has just been activated, notify the PM
518 * core of the event by incrementing the counter of of wakeup events being 517 * core of the event by incrementing the counter of of wakeup events being
519 * processed. 518 * processed.
520 */ 519 */
521static void wakeup_source_activate(struct wakeup_source *ws, bool hard) 520static void wakeup_source_activate(struct wakeup_source *ws)
522{ 521{
523 unsigned int cec; 522 unsigned int cec;
524 523
@@ -526,9 +525,6 @@ static void wakeup_source_activate(struct wakeup_source *ws, bool hard)
526 "unregistered wakeup source\n")) 525 "unregistered wakeup source\n"))
527 return; 526 return;
528 527
529 if (hard)
530 pm_system_wakeup();
531
532 ws->active = true; 528 ws->active = true;
533 ws->active_count++; 529 ws->active_count++;
534 ws->last_time = ktime_get(); 530 ws->last_time = ktime_get();
@@ -554,7 +550,10 @@ static void wakeup_source_report_event(struct wakeup_source *ws, bool hard)
554 ws->wakeup_count++; 550 ws->wakeup_count++;
555 551
556 if (!ws->active) 552 if (!ws->active)
557 wakeup_source_activate(ws, hard); 553 wakeup_source_activate(ws);
554
555 if (hard)
556 pm_system_wakeup();
558} 557}
559 558
560/** 559/**
@@ -856,26 +855,20 @@ bool pm_wakeup_pending(void)
856 pm_print_active_wakeup_sources(); 855 pm_print_active_wakeup_sources();
857 } 856 }
858 857
859 return ret || atomic_read(&pm_abort_suspend) > 0; 858 return ret || pm_abort_suspend;
860} 859}
861 860
862void pm_system_wakeup(void) 861void pm_system_wakeup(void)
863{ 862{
864 atomic_inc(&pm_abort_suspend); 863 pm_abort_suspend = true;
865 freeze_wake(); 864 freeze_wake();
866} 865}
867EXPORT_SYMBOL_GPL(pm_system_wakeup); 866EXPORT_SYMBOL_GPL(pm_system_wakeup);
868 867
869void pm_system_cancel_wakeup(void) 868void pm_wakeup_clear(void)
870{
871 atomic_dec(&pm_abort_suspend);
872}
873
874void pm_wakeup_clear(bool reset)
875{ 869{
870 pm_abort_suspend = false;
876 pm_wakeup_irq = 0; 871 pm_wakeup_irq = 0;
877 if (reset)
878 atomic_set(&pm_abort_suspend, 0);
879} 872}
880 873
881void pm_system_irq_wakeup(unsigned int irq_number) 874void pm_system_irq_wakeup(unsigned int irq_number)
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 28d932906f24..ebbd0c3fe0ed 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -608,6 +608,9 @@ static int loop_switch(struct loop_device *lo, struct file *file)
608 */ 608 */
609static int loop_flush(struct loop_device *lo) 609static int loop_flush(struct loop_device *lo)
610{ 610{
611 /* loop not yet configured, no running thread, nothing to flush */
612 if (lo->lo_state != Lo_bound)
613 return 0;
611 return loop_switch(lo, NULL); 614 return loop_switch(lo, NULL);
612} 615}
613 616
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 9a7bb2c29447..f3f191ba8ca4 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -937,14 +937,6 @@ static int nbd_reconnect_socket(struct nbd_device *nbd, unsigned long arg)
937 return -ENOSPC; 937 return -ENOSPC;
938} 938}
939 939
940/* Reset all properties of an NBD device */
941static void nbd_reset(struct nbd_device *nbd)
942{
943 nbd->config = NULL;
944 nbd->tag_set.timeout = 0;
945 queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue);
946}
947
948static void nbd_bdev_reset(struct block_device *bdev) 940static void nbd_bdev_reset(struct block_device *bdev)
949{ 941{
950 if (bdev->bd_openers > 1) 942 if (bdev->bd_openers > 1)
@@ -1029,7 +1021,11 @@ static void nbd_config_put(struct nbd_device *nbd)
1029 } 1021 }
1030 kfree(config->socks); 1022 kfree(config->socks);
1031 } 1023 }
1032 nbd_reset(nbd); 1024 kfree(nbd->config);
1025 nbd->config = NULL;
1026
1027 nbd->tag_set.timeout = 0;
1028 queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue);
1033 1029
1034 mutex_unlock(&nbd->config_lock); 1030 mutex_unlock(&nbd->config_lock);
1035 nbd_put(nbd); 1031 nbd_put(nbd);
@@ -1483,7 +1479,6 @@ static int nbd_dev_add(int index)
1483 disk->fops = &nbd_fops; 1479 disk->fops = &nbd_fops;
1484 disk->private_data = nbd; 1480 disk->private_data = nbd;
1485 sprintf(disk->disk_name, "nbd%d", index); 1481 sprintf(disk->disk_name, "nbd%d", index);
1486 nbd_reset(nbd);
1487 add_disk(disk); 1482 add_disk(disk);
1488 nbd_total_devices++; 1483 nbd_total_devices++;
1489 return index; 1484 return index;
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 454bf9c34882..c16f74547804 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -4023,6 +4023,7 @@ static void rbd_queue_workfn(struct work_struct *work)
4023 4023
4024 switch (req_op(rq)) { 4024 switch (req_op(rq)) {
4025 case REQ_OP_DISCARD: 4025 case REQ_OP_DISCARD:
4026 case REQ_OP_WRITE_ZEROES:
4026 op_type = OBJ_OP_DISCARD; 4027 op_type = OBJ_OP_DISCARD;
4027 break; 4028 break;
4028 case REQ_OP_WRITE: 4029 case REQ_OP_WRITE:
@@ -4420,6 +4421,7 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
4420 q->limits.discard_granularity = segment_size; 4421 q->limits.discard_granularity = segment_size;
4421 q->limits.discard_alignment = segment_size; 4422 q->limits.discard_alignment = segment_size;
4422 blk_queue_max_discard_sectors(q, segment_size / SECTOR_SIZE); 4423 blk_queue_max_discard_sectors(q, segment_size / SECTOR_SIZE);
4424 blk_queue_max_write_zeroes_sectors(q, segment_size / SECTOR_SIZE);
4423 4425
4424 if (!ceph_test_opt(rbd_dev->rbd_client->client, NOCRC)) 4426 if (!ceph_test_opt(rbd_dev->rbd_client->client, NOCRC))
4425 q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES; 4427 q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES;
diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
index 726c32e35db9..0e824091a12f 100644
--- a/drivers/block/xen-blkback/blkback.c
+++ b/drivers/block/xen-blkback/blkback.c
@@ -609,8 +609,6 @@ int xen_blkif_schedule(void *arg)
609 unsigned long timeout; 609 unsigned long timeout;
610 int ret; 610 int ret;
611 611
612 xen_blkif_get(blkif);
613
614 set_freezable(); 612 set_freezable();
615 while (!kthread_should_stop()) { 613 while (!kthread_should_stop()) {
616 if (try_to_freeze()) 614 if (try_to_freeze())
@@ -665,7 +663,6 @@ purge_gnt_list:
665 print_stats(ring); 663 print_stats(ring);
666 664
667 ring->xenblkd = NULL; 665 ring->xenblkd = NULL;
668 xen_blkif_put(blkif);
669 666
670 return 0; 667 return 0;
671} 668}
@@ -1436,34 +1433,35 @@ static int dispatch_rw_block_io(struct xen_blkif_ring *ring,
1436static void make_response(struct xen_blkif_ring *ring, u64 id, 1433static void make_response(struct xen_blkif_ring *ring, u64 id,
1437 unsigned short op, int st) 1434 unsigned short op, int st)
1438{ 1435{
1439 struct blkif_response resp; 1436 struct blkif_response *resp;
1440 unsigned long flags; 1437 unsigned long flags;
1441 union blkif_back_rings *blk_rings; 1438 union blkif_back_rings *blk_rings;
1442 int notify; 1439 int notify;
1443 1440
1444 resp.id = id;
1445 resp.operation = op;
1446 resp.status = st;
1447
1448 spin_lock_irqsave(&ring->blk_ring_lock, flags); 1441 spin_lock_irqsave(&ring->blk_ring_lock, flags);
1449 blk_rings = &ring->blk_rings; 1442 blk_rings = &ring->blk_rings;
1450 /* Place on the response ring for the relevant domain. */ 1443 /* Place on the response ring for the relevant domain. */
1451 switch (ring->blkif->blk_protocol) { 1444 switch (ring->blkif->blk_protocol) {
1452 case BLKIF_PROTOCOL_NATIVE: 1445 case BLKIF_PROTOCOL_NATIVE:
1453 memcpy(RING_GET_RESPONSE(&blk_rings->native, blk_rings->native.rsp_prod_pvt), 1446 resp = RING_GET_RESPONSE(&blk_rings->native,
1454 &resp, sizeof(resp)); 1447 blk_rings->native.rsp_prod_pvt);
1455 break; 1448 break;
1456 case BLKIF_PROTOCOL_X86_32: 1449 case BLKIF_PROTOCOL_X86_32:
1457 memcpy(RING_GET_RESPONSE(&blk_rings->x86_32, blk_rings->x86_32.rsp_prod_pvt), 1450 resp = RING_GET_RESPONSE(&blk_rings->x86_32,
1458 &resp, sizeof(resp)); 1451 blk_rings->x86_32.rsp_prod_pvt);
1459 break; 1452 break;
1460 case BLKIF_PROTOCOL_X86_64: 1453 case BLKIF_PROTOCOL_X86_64:
1461 memcpy(RING_GET_RESPONSE(&blk_rings->x86_64, blk_rings->x86_64.rsp_prod_pvt), 1454 resp = RING_GET_RESPONSE(&blk_rings->x86_64,
1462 &resp, sizeof(resp)); 1455 blk_rings->x86_64.rsp_prod_pvt);
1463 break; 1456 break;
1464 default: 1457 default:
1465 BUG(); 1458 BUG();
1466 } 1459 }
1460
1461 resp->id = id;
1462 resp->operation = op;
1463 resp->status = st;
1464
1467 blk_rings->common.rsp_prod_pvt++; 1465 blk_rings->common.rsp_prod_pvt++;
1468 RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&blk_rings->common, notify); 1466 RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&blk_rings->common, notify);
1469 spin_unlock_irqrestore(&ring->blk_ring_lock, flags); 1467 spin_unlock_irqrestore(&ring->blk_ring_lock, flags);
diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
index dea61f6ab8cb..ecb35fe8ca8d 100644
--- a/drivers/block/xen-blkback/common.h
+++ b/drivers/block/xen-blkback/common.h
@@ -75,9 +75,8 @@ extern unsigned int xenblk_max_queues;
75struct blkif_common_request { 75struct blkif_common_request {
76 char dummy; 76 char dummy;
77}; 77};
78struct blkif_common_response { 78
79 char dummy; 79/* i386 protocol version */
80};
81 80
82struct blkif_x86_32_request_rw { 81struct blkif_x86_32_request_rw {
83 uint8_t nr_segments; /* number of segments */ 82 uint8_t nr_segments; /* number of segments */
@@ -129,14 +128,6 @@ struct blkif_x86_32_request {
129 } u; 128 } u;
130} __attribute__((__packed__)); 129} __attribute__((__packed__));
131 130
132/* i386 protocol version */
133#pragma pack(push, 4)
134struct blkif_x86_32_response {
135 uint64_t id; /* copied from request */
136 uint8_t operation; /* copied from request */
137 int16_t status; /* BLKIF_RSP_??? */
138};
139#pragma pack(pop)
140/* x86_64 protocol version */ 131/* x86_64 protocol version */
141 132
142struct blkif_x86_64_request_rw { 133struct blkif_x86_64_request_rw {
@@ -193,18 +184,12 @@ struct blkif_x86_64_request {
193 } u; 184 } u;
194} __attribute__((__packed__)); 185} __attribute__((__packed__));
195 186
196struct blkif_x86_64_response {
197 uint64_t __attribute__((__aligned__(8))) id;
198 uint8_t operation; /* copied from request */
199 int16_t status; /* BLKIF_RSP_??? */
200};
201
202DEFINE_RING_TYPES(blkif_common, struct blkif_common_request, 187DEFINE_RING_TYPES(blkif_common, struct blkif_common_request,
203 struct blkif_common_response); 188 struct blkif_response);
204DEFINE_RING_TYPES(blkif_x86_32, struct blkif_x86_32_request, 189DEFINE_RING_TYPES(blkif_x86_32, struct blkif_x86_32_request,
205 struct blkif_x86_32_response); 190 struct blkif_response __packed);
206DEFINE_RING_TYPES(blkif_x86_64, struct blkif_x86_64_request, 191DEFINE_RING_TYPES(blkif_x86_64, struct blkif_x86_64_request,
207 struct blkif_x86_64_response); 192 struct blkif_response);
208 193
209union blkif_back_rings { 194union blkif_back_rings {
210 struct blkif_back_ring native; 195 struct blkif_back_ring native;
@@ -281,6 +266,7 @@ struct xen_blkif_ring {
281 266
282 wait_queue_head_t wq; 267 wait_queue_head_t wq;
283 atomic_t inflight; 268 atomic_t inflight;
269 bool active;
284 /* One thread per blkif ring. */ 270 /* One thread per blkif ring. */
285 struct task_struct *xenblkd; 271 struct task_struct *xenblkd;
286 unsigned int waiting_reqs; 272 unsigned int waiting_reqs;
diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
index 1f3dfaa54d87..792da683e70d 100644
--- a/drivers/block/xen-blkback/xenbus.c
+++ b/drivers/block/xen-blkback/xenbus.c
@@ -159,7 +159,7 @@ static int xen_blkif_alloc_rings(struct xen_blkif *blkif)
159 init_waitqueue_head(&ring->shutdown_wq); 159 init_waitqueue_head(&ring->shutdown_wq);
160 ring->blkif = blkif; 160 ring->blkif = blkif;
161 ring->st_print = jiffies; 161 ring->st_print = jiffies;
162 xen_blkif_get(blkif); 162 ring->active = true;
163 } 163 }
164 164
165 return 0; 165 return 0;
@@ -249,10 +249,12 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
249 struct xen_blkif_ring *ring = &blkif->rings[r]; 249 struct xen_blkif_ring *ring = &blkif->rings[r];
250 unsigned int i = 0; 250 unsigned int i = 0;
251 251
252 if (!ring->active)
253 continue;
254
252 if (ring->xenblkd) { 255 if (ring->xenblkd) {
253 kthread_stop(ring->xenblkd); 256 kthread_stop(ring->xenblkd);
254 wake_up(&ring->shutdown_wq); 257 wake_up(&ring->shutdown_wq);
255 ring->xenblkd = NULL;
256 } 258 }
257 259
258 /* The above kthread_stop() guarantees that at this point we 260 /* The above kthread_stop() guarantees that at this point we
@@ -296,7 +298,7 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
296 BUG_ON(ring->free_pages_num != 0); 298 BUG_ON(ring->free_pages_num != 0);
297 BUG_ON(ring->persistent_gnt_c != 0); 299 BUG_ON(ring->persistent_gnt_c != 0);
298 WARN_ON(i != (XEN_BLKIF_REQS_PER_PAGE * blkif->nr_ring_pages)); 300 WARN_ON(i != (XEN_BLKIF_REQS_PER_PAGE * blkif->nr_ring_pages));
299 xen_blkif_put(blkif); 301 ring->active = false;
300 } 302 }
301 blkif->nr_ring_pages = 0; 303 blkif->nr_ring_pages = 0;
302 /* 304 /*
@@ -312,9 +314,10 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
312 314
313static void xen_blkif_free(struct xen_blkif *blkif) 315static void xen_blkif_free(struct xen_blkif *blkif)
314{ 316{
315 317 WARN_ON(xen_blkif_disconnect(blkif));
316 xen_blkif_disconnect(blkif);
317 xen_vbd_free(&blkif->vbd); 318 xen_vbd_free(&blkif->vbd);
319 kfree(blkif->be->mode);
320 kfree(blkif->be);
318 321
319 /* Make sure everything is drained before shutting down */ 322 /* Make sure everything is drained before shutting down */
320 kmem_cache_free(xen_blkif_cachep, blkif); 323 kmem_cache_free(xen_blkif_cachep, blkif);
@@ -511,8 +514,6 @@ static int xen_blkbk_remove(struct xenbus_device *dev)
511 xen_blkif_put(be->blkif); 514 xen_blkif_put(be->blkif);
512 } 515 }
513 516
514 kfree(be->mode);
515 kfree(be);
516 return 0; 517 return 0;
517} 518}
518 519
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
index 6e0cbe092220..593a8818aca9 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -343,7 +343,7 @@ static int mmap_mem(struct file *file, struct vm_area_struct *vma)
343 phys_addr_t offset = (phys_addr_t)vma->vm_pgoff << PAGE_SHIFT; 343 phys_addr_t offset = (phys_addr_t)vma->vm_pgoff << PAGE_SHIFT;
344 344
345 /* It's illegal to wrap around the end of the physical address space. */ 345 /* It's illegal to wrap around the end of the physical address space. */
346 if (offset + (phys_addr_t)size < offset) 346 if (offset + (phys_addr_t)size - 1 < offset)
347 return -EINVAL; 347 return -EINVAL;
348 348
349 if (!valid_mmap_phys_addr_range(vma->vm_pgoff, size)) 349 if (!valid_mmap_phys_addr_range(vma->vm_pgoff, size))
diff --git a/drivers/char/pcmcia/cm4040_cs.c b/drivers/char/pcmcia/cm4040_cs.c
index d4dbd8d8e524..382c864814d9 100644
--- a/drivers/char/pcmcia/cm4040_cs.c
+++ b/drivers/char/pcmcia/cm4040_cs.c
@@ -374,7 +374,7 @@ static ssize_t cm4040_write(struct file *filp, const char __user *buf,
374 374
375 rc = write_sync_reg(SCR_HOST_TO_READER_START, dev); 375 rc = write_sync_reg(SCR_HOST_TO_READER_START, dev);
376 if (rc <= 0) { 376 if (rc <= 0) {
377 DEBUGP(5, dev, "write_sync_reg c=%.2Zx\n", rc); 377 DEBUGP(5, dev, "write_sync_reg c=%.2zx\n", rc);
378 DEBUGP(2, dev, "<- cm4040_write (failed)\n"); 378 DEBUGP(2, dev, "<- cm4040_write (failed)\n");
379 if (rc == -ERESTARTSYS) 379 if (rc == -ERESTARTSYS)
380 return rc; 380 return rc;
@@ -387,7 +387,7 @@ static ssize_t cm4040_write(struct file *filp, const char __user *buf,
387 for (i = 0; i < bytes_to_write; i++) { 387 for (i = 0; i < bytes_to_write; i++) {
388 rc = wait_for_bulk_out_ready(dev); 388 rc = wait_for_bulk_out_ready(dev);
389 if (rc <= 0) { 389 if (rc <= 0) {
390 DEBUGP(5, dev, "wait_for_bulk_out_ready rc=%.2Zx\n", 390 DEBUGP(5, dev, "wait_for_bulk_out_ready rc=%.2zx\n",
391 rc); 391 rc);
392 DEBUGP(2, dev, "<- cm4040_write (failed)\n"); 392 DEBUGP(2, dev, "<- cm4040_write (failed)\n");
393 if (rc == -ERESTARTSYS) 393 if (rc == -ERESTARTSYS)
@@ -403,7 +403,7 @@ static ssize_t cm4040_write(struct file *filp, const char __user *buf,
403 rc = write_sync_reg(SCR_HOST_TO_READER_DONE, dev); 403 rc = write_sync_reg(SCR_HOST_TO_READER_DONE, dev);
404 404
405 if (rc <= 0) { 405 if (rc <= 0) {
406 DEBUGP(5, dev, "write_sync_reg c=%.2Zx\n", rc); 406 DEBUGP(5, dev, "write_sync_reg c=%.2zx\n", rc);
407 DEBUGP(2, dev, "<- cm4040_write (failed)\n"); 407 DEBUGP(2, dev, "<- cm4040_write (failed)\n");
408 if (rc == -ERESTARTSYS) 408 if (rc == -ERESTARTSYS)
409 return rc; 409 return rc;
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 0ab024918907..01a260f67437 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1,6 +1,9 @@
1/* 1/*
2 * random.c -- A strong random number generator 2 * random.c -- A strong random number generator
3 * 3 *
4 * Copyright (C) 2017 Jason A. Donenfeld <Jason@zx2c4.com>. All
5 * Rights Reserved.
6 *
4 * Copyright Matt Mackall <mpm@selenic.com>, 2003, 2004, 2005 7 * Copyright Matt Mackall <mpm@selenic.com>, 2003, 2004, 2005
5 * 8 *
6 * Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All 9 * Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All
@@ -762,6 +765,8 @@ static DECLARE_WAIT_QUEUE_HEAD(crng_init_wait);
762static struct crng_state **crng_node_pool __read_mostly; 765static struct crng_state **crng_node_pool __read_mostly;
763#endif 766#endif
764 767
768static void invalidate_batched_entropy(void);
769
765static void crng_initialize(struct crng_state *crng) 770static void crng_initialize(struct crng_state *crng)
766{ 771{
767 int i; 772 int i;
@@ -798,12 +803,13 @@ static int crng_fast_load(const char *cp, size_t len)
798 p[crng_init_cnt % CHACHA20_KEY_SIZE] ^= *cp; 803 p[crng_init_cnt % CHACHA20_KEY_SIZE] ^= *cp;
799 cp++; crng_init_cnt++; len--; 804 cp++; crng_init_cnt++; len--;
800 } 805 }
806 spin_unlock_irqrestore(&primary_crng.lock, flags);
801 if (crng_init_cnt >= CRNG_INIT_CNT_THRESH) { 807 if (crng_init_cnt >= CRNG_INIT_CNT_THRESH) {
808 invalidate_batched_entropy();
802 crng_init = 1; 809 crng_init = 1;
803 wake_up_interruptible(&crng_init_wait); 810 wake_up_interruptible(&crng_init_wait);
804 pr_notice("random: fast init done\n"); 811 pr_notice("random: fast init done\n");
805 } 812 }
806 spin_unlock_irqrestore(&primary_crng.lock, flags);
807 return 1; 813 return 1;
808} 814}
809 815
@@ -835,13 +841,14 @@ static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
835 } 841 }
836 memzero_explicit(&buf, sizeof(buf)); 842 memzero_explicit(&buf, sizeof(buf));
837 crng->init_time = jiffies; 843 crng->init_time = jiffies;
844 spin_unlock_irqrestore(&primary_crng.lock, flags);
838 if (crng == &primary_crng && crng_init < 2) { 845 if (crng == &primary_crng && crng_init < 2) {
846 invalidate_batched_entropy();
839 crng_init = 2; 847 crng_init = 2;
840 process_random_ready_list(); 848 process_random_ready_list();
841 wake_up_interruptible(&crng_init_wait); 849 wake_up_interruptible(&crng_init_wait);
842 pr_notice("random: crng init done\n"); 850 pr_notice("random: crng init done\n");
843 } 851 }
844 spin_unlock_irqrestore(&primary_crng.lock, flags);
845} 852}
846 853
847static inline void crng_wait_ready(void) 854static inline void crng_wait_ready(void)
@@ -1097,12 +1104,16 @@ static void add_interrupt_bench(cycles_t start)
1097static __u32 get_reg(struct fast_pool *f, struct pt_regs *regs) 1104static __u32 get_reg(struct fast_pool *f, struct pt_regs *regs)
1098{ 1105{
1099 __u32 *ptr = (__u32 *) regs; 1106 __u32 *ptr = (__u32 *) regs;
1107 unsigned int idx;
1100 1108
1101 if (regs == NULL) 1109 if (regs == NULL)
1102 return 0; 1110 return 0;
1103 if (f->reg_idx >= sizeof(struct pt_regs) / sizeof(__u32)) 1111 idx = READ_ONCE(f->reg_idx);
1104 f->reg_idx = 0; 1112 if (idx >= sizeof(struct pt_regs) / sizeof(__u32))
1105 return *(ptr + f->reg_idx++); 1113 idx = 0;
1114 ptr += idx++;
1115 WRITE_ONCE(f->reg_idx, idx);
1116 return *ptr;
1106} 1117}
1107 1118
1108void add_interrupt_randomness(int irq, int irq_flags) 1119void add_interrupt_randomness(int irq, int irq_flags)
@@ -2019,6 +2030,7 @@ struct batched_entropy {
2019 }; 2030 };
2020 unsigned int position; 2031 unsigned int position;
2021}; 2032};
2033static rwlock_t batched_entropy_reset_lock = __RW_LOCK_UNLOCKED(batched_entropy_reset_lock);
2022 2034
2023/* 2035/*
2024 * Get a random word for internal kernel use only. The quality of the random 2036 * Get a random word for internal kernel use only. The quality of the random
@@ -2029,6 +2041,8 @@ static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u64);
2029u64 get_random_u64(void) 2041u64 get_random_u64(void)
2030{ 2042{
2031 u64 ret; 2043 u64 ret;
2044 bool use_lock = READ_ONCE(crng_init) < 2;
2045 unsigned long flags = 0;
2032 struct batched_entropy *batch; 2046 struct batched_entropy *batch;
2033 2047
2034#if BITS_PER_LONG == 64 2048#if BITS_PER_LONG == 64
@@ -2041,11 +2055,15 @@ u64 get_random_u64(void)
2041#endif 2055#endif
2042 2056
2043 batch = &get_cpu_var(batched_entropy_u64); 2057 batch = &get_cpu_var(batched_entropy_u64);
2058 if (use_lock)
2059 read_lock_irqsave(&batched_entropy_reset_lock, flags);
2044 if (batch->position % ARRAY_SIZE(batch->entropy_u64) == 0) { 2060 if (batch->position % ARRAY_SIZE(batch->entropy_u64) == 0) {
2045 extract_crng((u8 *)batch->entropy_u64); 2061 extract_crng((u8 *)batch->entropy_u64);
2046 batch->position = 0; 2062 batch->position = 0;
2047 } 2063 }
2048 ret = batch->entropy_u64[batch->position++]; 2064 ret = batch->entropy_u64[batch->position++];
2065 if (use_lock)
2066 read_unlock_irqrestore(&batched_entropy_reset_lock, flags);
2049 put_cpu_var(batched_entropy_u64); 2067 put_cpu_var(batched_entropy_u64);
2050 return ret; 2068 return ret;
2051} 2069}
@@ -2055,22 +2073,45 @@ static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u32);
2055u32 get_random_u32(void) 2073u32 get_random_u32(void)
2056{ 2074{
2057 u32 ret; 2075 u32 ret;
2076 bool use_lock = READ_ONCE(crng_init) < 2;
2077 unsigned long flags = 0;
2058 struct batched_entropy *batch; 2078 struct batched_entropy *batch;
2059 2079
2060 if (arch_get_random_int(&ret)) 2080 if (arch_get_random_int(&ret))
2061 return ret; 2081 return ret;
2062 2082
2063 batch = &get_cpu_var(batched_entropy_u32); 2083 batch = &get_cpu_var(batched_entropy_u32);
2084 if (use_lock)
2085 read_lock_irqsave(&batched_entropy_reset_lock, flags);
2064 if (batch->position % ARRAY_SIZE(batch->entropy_u32) == 0) { 2086 if (batch->position % ARRAY_SIZE(batch->entropy_u32) == 0) {
2065 extract_crng((u8 *)batch->entropy_u32); 2087 extract_crng((u8 *)batch->entropy_u32);
2066 batch->position = 0; 2088 batch->position = 0;
2067 } 2089 }
2068 ret = batch->entropy_u32[batch->position++]; 2090 ret = batch->entropy_u32[batch->position++];
2091 if (use_lock)
2092 read_unlock_irqrestore(&batched_entropy_reset_lock, flags);
2069 put_cpu_var(batched_entropy_u32); 2093 put_cpu_var(batched_entropy_u32);
2070 return ret; 2094 return ret;
2071} 2095}
2072EXPORT_SYMBOL(get_random_u32); 2096EXPORT_SYMBOL(get_random_u32);
2073 2097
2098/* It's important to invalidate all potential batched entropy that might
2099 * be stored before the crng is initialized, which we can do lazily by
2100 * simply resetting the counter to zero so that it's re-extracted on the
2101 * next usage. */
2102static void invalidate_batched_entropy(void)
2103{
2104 int cpu;
2105 unsigned long flags;
2106
2107 write_lock_irqsave(&batched_entropy_reset_lock, flags);
2108 for_each_possible_cpu (cpu) {
2109 per_cpu_ptr(&batched_entropy_u32, cpu)->position = 0;
2110 per_cpu_ptr(&batched_entropy_u64, cpu)->position = 0;
2111 }
2112 write_unlock_irqrestore(&batched_entropy_reset_lock, flags);
2113}
2114
2074/** 2115/**
2075 * randomize_page - Generate a random, page aligned address 2116 * randomize_page - Generate a random, page aligned address
2076 * @start: The smallest acceptable address the caller will take. 2117 * @start: The smallest acceptable address the caller will take.
diff --git a/drivers/clk/meson/Kconfig b/drivers/clk/meson/Kconfig
index 19480bcc7046..2f29ee1a4d00 100644
--- a/drivers/clk/meson/Kconfig
+++ b/drivers/clk/meson/Kconfig
@@ -14,6 +14,7 @@ config COMMON_CLK_MESON8B
14config COMMON_CLK_GXBB 14config COMMON_CLK_GXBB
15 bool 15 bool
16 depends on COMMON_CLK_AMLOGIC 16 depends on COMMON_CLK_AMLOGIC
17 select RESET_CONTROLLER
17 help 18 help
18 Support for the clock controller on AmLogic S905 devices, aka gxbb. 19 Support for the clock controller on AmLogic S905 devices, aka gxbb.
19 Say Y if you want peripherals and CPU frequency scaling to work. 20 Say Y if you want peripherals and CPU frequency scaling to work.
diff --git a/drivers/clk/sunxi-ng/Kconfig b/drivers/clk/sunxi-ng/Kconfig
index b0d551a8efe4..eb89c7801f00 100644
--- a/drivers/clk/sunxi-ng/Kconfig
+++ b/drivers/clk/sunxi-ng/Kconfig
@@ -156,6 +156,7 @@ config SUN8I_R_CCU
156 bool "Support for Allwinner SoCs' PRCM CCUs" 156 bool "Support for Allwinner SoCs' PRCM CCUs"
157 select SUNXI_CCU_DIV 157 select SUNXI_CCU_DIV
158 select SUNXI_CCU_GATE 158 select SUNXI_CCU_GATE
159 select SUNXI_CCU_MP
159 default MACH_SUN8I || (ARCH_SUNXI && ARM64) 160 default MACH_SUN8I || (ARCH_SUNXI && ARM64)
160 161
161endif 162endif
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-a64.h b/drivers/clk/sunxi-ng/ccu-sun50i-a64.h
index 9b3cd24b78d2..061b6fbb4f95 100644
--- a/drivers/clk/sunxi-ng/ccu-sun50i-a64.h
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-a64.h
@@ -31,7 +31,9 @@
31#define CLK_PLL_VIDEO0_2X 8 31#define CLK_PLL_VIDEO0_2X 8
32#define CLK_PLL_VE 9 32#define CLK_PLL_VE 9
33#define CLK_PLL_DDR0 10 33#define CLK_PLL_DDR0 10
34#define CLK_PLL_PERIPH0 11 34
35/* PLL_PERIPH0 exported for PRCM */
36
35#define CLK_PLL_PERIPH0_2X 12 37#define CLK_PLL_PERIPH0_2X 12
36#define CLK_PLL_PERIPH1 13 38#define CLK_PLL_PERIPH1 13
37#define CLK_PLL_PERIPH1_2X 14 39#define CLK_PLL_PERIPH1_2X 14
diff --git a/drivers/clk/sunxi-ng/ccu-sun5i.c b/drivers/clk/sunxi-ng/ccu-sun5i.c
index 5c476f966a72..5372bf8be5e6 100644
--- a/drivers/clk/sunxi-ng/ccu-sun5i.c
+++ b/drivers/clk/sunxi-ng/ccu-sun5i.c
@@ -243,7 +243,7 @@ static SUNXI_CCU_GATE(ahb_ss_clk, "ahb-ss", "ahb",
243static SUNXI_CCU_GATE(ahb_dma_clk, "ahb-dma", "ahb", 243static SUNXI_CCU_GATE(ahb_dma_clk, "ahb-dma", "ahb",
244 0x060, BIT(6), 0); 244 0x060, BIT(6), 0);
245static SUNXI_CCU_GATE(ahb_bist_clk, "ahb-bist", "ahb", 245static SUNXI_CCU_GATE(ahb_bist_clk, "ahb-bist", "ahb",
246 0x060, BIT(6), 0); 246 0x060, BIT(7), 0);
247static SUNXI_CCU_GATE(ahb_mmc0_clk, "ahb-mmc0", "ahb", 247static SUNXI_CCU_GATE(ahb_mmc0_clk, "ahb-mmc0", "ahb",
248 0x060, BIT(8), 0); 248 0x060, BIT(8), 0);
249static SUNXI_CCU_GATE(ahb_mmc1_clk, "ahb-mmc1", "ahb", 249static SUNXI_CCU_GATE(ahb_mmc1_clk, "ahb-mmc1", "ahb",
diff --git a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
index 89e68d29bf45..df97e25aec76 100644
--- a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
+++ b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
@@ -556,7 +556,7 @@ static SUNXI_CCU_M_WITH_MUX_GATE(lcd0_ch1_clk, "lcd0-ch1", lcd_ch1_parents,
556 0x12c, 0, 4, 24, 3, BIT(31), 556 0x12c, 0, 4, 24, 3, BIT(31),
557 CLK_SET_RATE_PARENT); 557 CLK_SET_RATE_PARENT);
558static SUNXI_CCU_M_WITH_MUX_GATE(lcd1_ch1_clk, "lcd1-ch1", lcd_ch1_parents, 558static SUNXI_CCU_M_WITH_MUX_GATE(lcd1_ch1_clk, "lcd1-ch1", lcd_ch1_parents,
559 0x12c, 0, 4, 24, 3, BIT(31), 559 0x130, 0, 4, 24, 3, BIT(31),
560 CLK_SET_RATE_PARENT); 560 CLK_SET_RATE_PARENT);
561 561
562static const char * const csi_sclk_parents[] = { "pll-video0", "pll-video1", 562static const char * const csi_sclk_parents[] = { "pll-video0", "pll-video1",
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-h3.h b/drivers/clk/sunxi-ng/ccu-sun8i-h3.h
index 85973d1e8165..1b4baea37d81 100644
--- a/drivers/clk/sunxi-ng/ccu-sun8i-h3.h
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-h3.h
@@ -29,7 +29,9 @@
29#define CLK_PLL_VIDEO 6 29#define CLK_PLL_VIDEO 6
30#define CLK_PLL_VE 7 30#define CLK_PLL_VE 7
31#define CLK_PLL_DDR 8 31#define CLK_PLL_DDR 8
32#define CLK_PLL_PERIPH0 9 32
33/* PLL_PERIPH0 exported for PRCM */
34
33#define CLK_PLL_PERIPH0_2X 10 35#define CLK_PLL_PERIPH0_2X 10
34#define CLK_PLL_GPU 11 36#define CLK_PLL_GPU 11
35#define CLK_PLL_PERIPH1 12 37#define CLK_PLL_PERIPH1 12
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c b/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
index e58706b40ae9..6297add857b5 100644
--- a/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
@@ -537,7 +537,7 @@ static struct ccu_reset_map sun8i_v3s_ccu_resets[] = {
537 [RST_BUS_EMAC] = { 0x2c0, BIT(17) }, 537 [RST_BUS_EMAC] = { 0x2c0, BIT(17) },
538 [RST_BUS_HSTIMER] = { 0x2c0, BIT(19) }, 538 [RST_BUS_HSTIMER] = { 0x2c0, BIT(19) },
539 [RST_BUS_SPI0] = { 0x2c0, BIT(20) }, 539 [RST_BUS_SPI0] = { 0x2c0, BIT(20) },
540 [RST_BUS_OTG] = { 0x2c0, BIT(23) }, 540 [RST_BUS_OTG] = { 0x2c0, BIT(24) },
541 [RST_BUS_EHCI0] = { 0x2c0, BIT(26) }, 541 [RST_BUS_EHCI0] = { 0x2c0, BIT(26) },
542 [RST_BUS_OHCI0] = { 0x2c0, BIT(29) }, 542 [RST_BUS_OHCI0] = { 0x2c0, BIT(29) },
543 543
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 4bed671e490e..8b5c30062d99 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -1209,9 +1209,9 @@ arch_timer_mem_frame_get_cntfrq(struct arch_timer_mem_frame *frame)
1209 return 0; 1209 return 0;
1210 } 1210 }
1211 1211
1212 rate = readl_relaxed(frame + CNTFRQ); 1212 rate = readl_relaxed(base + CNTFRQ);
1213 1213
1214 iounmap(frame); 1214 iounmap(base);
1215 1215
1216 return rate; 1216 return rate;
1217} 1217}
diff --git a/drivers/clocksource/cadence_ttc_timer.c b/drivers/clocksource/cadence_ttc_timer.c
index 44e5e951583b..8e64b8460f11 100644
--- a/drivers/clocksource/cadence_ttc_timer.c
+++ b/drivers/clocksource/cadence_ttc_timer.c
@@ -18,6 +18,7 @@
18#include <linux/clk.h> 18#include <linux/clk.h>
19#include <linux/interrupt.h> 19#include <linux/interrupt.h>
20#include <linux/clockchips.h> 20#include <linux/clockchips.h>
21#include <linux/clocksource.h>
21#include <linux/of_address.h> 22#include <linux/of_address.h>
22#include <linux/of_irq.h> 23#include <linux/of_irq.h>
23#include <linux/slab.h> 24#include <linux/slab.h>
diff --git a/drivers/clocksource/timer-sun5i.c b/drivers/clocksource/timer-sun5i.c
index 2e9c830ae1cd..c4656c4d44a6 100644
--- a/drivers/clocksource/timer-sun5i.c
+++ b/drivers/clocksource/timer-sun5i.c
@@ -12,6 +12,7 @@
12 12
13#include <linux/clk.h> 13#include <linux/clk.h>
14#include <linux/clockchips.h> 14#include <linux/clockchips.h>
15#include <linux/clocksource.h>
15#include <linux/delay.h> 16#include <linux/delay.h>
16#include <linux/interrupt.h> 17#include <linux/interrupt.h>
17#include <linux/irq.h> 18#include <linux/irq.h>
diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm
index 74ed7e9a7f27..2011fec2d6ad 100644
--- a/drivers/cpufreq/Kconfig.arm
+++ b/drivers/cpufreq/Kconfig.arm
@@ -71,6 +71,15 @@ config ARM_HIGHBANK_CPUFREQ
71 71
72 If in doubt, say N. 72 If in doubt, say N.
73 73
74config ARM_DB8500_CPUFREQ
75 tristate "ST-Ericsson DB8500 cpufreq" if COMPILE_TEST && !ARCH_U8500
76 default ARCH_U8500
77 depends on HAS_IOMEM
78 depends on !CPU_THERMAL || THERMAL
79 help
80 This adds the CPUFreq driver for ST-Ericsson Ux500 (DB8500) SoC
81 series.
82
74config ARM_IMX6Q_CPUFREQ 83config ARM_IMX6Q_CPUFREQ
75 tristate "Freescale i.MX6 cpufreq support" 84 tristate "Freescale i.MX6 cpufreq support"
76 depends on ARCH_MXC 85 depends on ARCH_MXC
diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile
index b7e78f063c4f..ab3a42cd29ef 100644
--- a/drivers/cpufreq/Makefile
+++ b/drivers/cpufreq/Makefile
@@ -53,7 +53,7 @@ obj-$(CONFIG_ARM_DT_BL_CPUFREQ) += arm_big_little_dt.o
53 53
54obj-$(CONFIG_ARM_BRCMSTB_AVS_CPUFREQ) += brcmstb-avs-cpufreq.o 54obj-$(CONFIG_ARM_BRCMSTB_AVS_CPUFREQ) += brcmstb-avs-cpufreq.o
55obj-$(CONFIG_ARCH_DAVINCI) += davinci-cpufreq.o 55obj-$(CONFIG_ARCH_DAVINCI) += davinci-cpufreq.o
56obj-$(CONFIG_UX500_SOC_DB8500) += dbx500-cpufreq.o 56obj-$(CONFIG_ARM_DB8500_CPUFREQ) += dbx500-cpufreq.o
57obj-$(CONFIG_ARM_EXYNOS5440_CPUFREQ) += exynos5440-cpufreq.o 57obj-$(CONFIG_ARM_EXYNOS5440_CPUFREQ) += exynos5440-cpufreq.o
58obj-$(CONFIG_ARM_HIGHBANK_CPUFREQ) += highbank-cpufreq.o 58obj-$(CONFIG_ARM_HIGHBANK_CPUFREQ) += highbank-cpufreq.o
59obj-$(CONFIG_ARM_IMX6Q_CPUFREQ) += imx6q-cpufreq.o 59obj-$(CONFIG_ARM_IMX6Q_CPUFREQ) += imx6q-cpufreq.o
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 0e3f6496524d..26b643d57847 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -2468,6 +2468,7 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
2468 if (!(cpufreq_driver->flags & CPUFREQ_STICKY) && 2468 if (!(cpufreq_driver->flags & CPUFREQ_STICKY) &&
2469 list_empty(&cpufreq_policy_list)) { 2469 list_empty(&cpufreq_policy_list)) {
2470 /* if all ->init() calls failed, unregister */ 2470 /* if all ->init() calls failed, unregister */
2471 ret = -ENODEV;
2471 pr_debug("%s: No CPU initialized for driver %s\n", __func__, 2472 pr_debug("%s: No CPU initialized for driver %s\n", __func__,
2472 driver_data->name); 2473 driver_data->name);
2473 goto err_if_unreg; 2474 goto err_if_unreg;
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
index 992f7c20760f..88220ff3e1c2 100644
--- a/drivers/cpufreq/cpufreq_conservative.c
+++ b/drivers/cpufreq/cpufreq_conservative.c
@@ -185,8 +185,8 @@ static ssize_t store_down_threshold(struct gov_attr_set *attr_set,
185 int ret; 185 int ret;
186 ret = sscanf(buf, "%u", &input); 186 ret = sscanf(buf, "%u", &input);
187 187
188 /* cannot be lower than 11 otherwise freq will not fall */ 188 /* cannot be lower than 1 otherwise freq will not fall */
189 if (ret != 1 || input < 11 || input > 100 || 189 if (ret != 1 || input < 1 || input > 100 ||
190 input >= dbs_data->up_threshold) 190 input >= dbs_data->up_threshold)
191 return -EINVAL; 191 return -EINVAL;
192 192
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index b7de5bd76a31..eb1158532de3 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -571,9 +571,10 @@ static inline void update_turbo_state(void)
571static int min_perf_pct_min(void) 571static int min_perf_pct_min(void)
572{ 572{
573 struct cpudata *cpu = all_cpu_data[0]; 573 struct cpudata *cpu = all_cpu_data[0];
574 int turbo_pstate = cpu->pstate.turbo_pstate;
574 575
575 return DIV_ROUND_UP(cpu->pstate.min_pstate * 100, 576 return turbo_pstate ?
576 cpu->pstate.turbo_pstate); 577 DIV_ROUND_UP(cpu->pstate.min_pstate * 100, turbo_pstate) : 0;
577} 578}
578 579
579static s16 intel_pstate_get_epb(struct cpudata *cpu_data) 580static s16 intel_pstate_get_epb(struct cpudata *cpu_data)
diff --git a/drivers/cpufreq/kirkwood-cpufreq.c b/drivers/cpufreq/kirkwood-cpufreq.c
index 1b9bcd76c60e..c2dd43f3f5d8 100644
--- a/drivers/cpufreq/kirkwood-cpufreq.c
+++ b/drivers/cpufreq/kirkwood-cpufreq.c
@@ -127,7 +127,12 @@ static int kirkwood_cpufreq_probe(struct platform_device *pdev)
127 return PTR_ERR(priv.cpu_clk); 127 return PTR_ERR(priv.cpu_clk);
128 } 128 }
129 129
130 clk_prepare_enable(priv.cpu_clk); 130 err = clk_prepare_enable(priv.cpu_clk);
131 if (err) {
132 dev_err(priv.dev, "Unable to prepare cpuclk\n");
133 return err;
134 }
135
131 kirkwood_freq_table[0].frequency = clk_get_rate(priv.cpu_clk) / 1000; 136 kirkwood_freq_table[0].frequency = clk_get_rate(priv.cpu_clk) / 1000;
132 137
133 priv.ddr_clk = of_clk_get_by_name(np, "ddrclk"); 138 priv.ddr_clk = of_clk_get_by_name(np, "ddrclk");
@@ -137,7 +142,11 @@ static int kirkwood_cpufreq_probe(struct platform_device *pdev)
137 goto out_cpu; 142 goto out_cpu;
138 } 143 }
139 144
140 clk_prepare_enable(priv.ddr_clk); 145 err = clk_prepare_enable(priv.ddr_clk);
146 if (err) {
147 dev_err(priv.dev, "Unable to prepare ddrclk\n");
148 goto out_cpu;
149 }
141 kirkwood_freq_table[1].frequency = clk_get_rate(priv.ddr_clk) / 1000; 150 kirkwood_freq_table[1].frequency = clk_get_rate(priv.ddr_clk) / 1000;
142 151
143 priv.powersave_clk = of_clk_get_by_name(np, "powersave"); 152 priv.powersave_clk = of_clk_get_by_name(np, "powersave");
@@ -146,7 +155,11 @@ static int kirkwood_cpufreq_probe(struct platform_device *pdev)
146 err = PTR_ERR(priv.powersave_clk); 155 err = PTR_ERR(priv.powersave_clk);
147 goto out_ddr; 156 goto out_ddr;
148 } 157 }
149 clk_prepare_enable(priv.powersave_clk); 158 err = clk_prepare_enable(priv.powersave_clk);
159 if (err) {
160 dev_err(priv.dev, "Unable to prepare powersave clk\n");
161 goto out_ddr;
162 }
150 163
151 of_node_put(np); 164 of_node_put(np);
152 np = NULL; 165 np = NULL;
diff --git a/drivers/cpuidle/dt_idle_states.c b/drivers/cpuidle/dt_idle_states.c
index ffca4fc0061d..ae8eb0359889 100644
--- a/drivers/cpuidle/dt_idle_states.c
+++ b/drivers/cpuidle/dt_idle_states.c
@@ -180,8 +180,10 @@ int dt_init_idle_driver(struct cpuidle_driver *drv,
180 if (!state_node) 180 if (!state_node)
181 break; 181 break;
182 182
183 if (!of_device_is_available(state_node)) 183 if (!of_device_is_available(state_node)) {
184 of_node_put(state_node);
184 continue; 185 continue;
186 }
185 187
186 if (!idle_state_valid(state_node, i, cpumask)) { 188 if (!idle_state_valid(state_node, i, cpumask)) {
187 pr_warn("%s idle state not valid, bailing out\n", 189 pr_warn("%s idle state not valid, bailing out\n",
diff --git a/drivers/dax/super.c b/drivers/dax/super.c
index 6ed32aac8bbe..922d0823f8ec 100644
--- a/drivers/dax/super.c
+++ b/drivers/dax/super.c
@@ -210,9 +210,12 @@ EXPORT_SYMBOL_GPL(kill_dax);
210static struct inode *dax_alloc_inode(struct super_block *sb) 210static struct inode *dax_alloc_inode(struct super_block *sb)
211{ 211{
212 struct dax_device *dax_dev; 212 struct dax_device *dax_dev;
213 struct inode *inode;
213 214
214 dax_dev = kmem_cache_alloc(dax_cache, GFP_KERNEL); 215 dax_dev = kmem_cache_alloc(dax_cache, GFP_KERNEL);
215 return &dax_dev->inode; 216 inode = &dax_dev->inode;
217 inode->i_rdev = 0;
218 return inode;
216} 219}
217 220
218static struct dax_device *to_dax_dev(struct inode *inode) 221static struct dax_device *to_dax_dev(struct inode *inode)
@@ -227,7 +230,8 @@ static void dax_i_callback(struct rcu_head *head)
227 230
228 kfree(dax_dev->host); 231 kfree(dax_dev->host);
229 dax_dev->host = NULL; 232 dax_dev->host = NULL;
230 ida_simple_remove(&dax_minor_ida, MINOR(inode->i_rdev)); 233 if (inode->i_rdev)
234 ida_simple_remove(&dax_minor_ida, MINOR(inode->i_rdev));
231 kmem_cache_free(dax_cache, dax_dev); 235 kmem_cache_free(dax_cache, dax_dev);
232} 236}
233 237
@@ -423,6 +427,7 @@ static void init_once(void *_dax_dev)
423 struct dax_device *dax_dev = _dax_dev; 427 struct dax_device *dax_dev = _dax_dev;
424 struct inode *inode = &dax_dev->inode; 428 struct inode *inode = &dax_dev->inode;
425 429
430 memset(dax_dev, 0, sizeof(*dax_dev));
426 inode_init_once(inode); 431 inode_init_once(inode);
427} 432}
428 433
diff --git a/drivers/devfreq/event/exynos-nocp.c b/drivers/devfreq/event/exynos-nocp.c
index 5c3e7b11e8a6..f6e7956fc91a 100644
--- a/drivers/devfreq/event/exynos-nocp.c
+++ b/drivers/devfreq/event/exynos-nocp.c
@@ -267,7 +267,11 @@ static int exynos_nocp_probe(struct platform_device *pdev)
267 } 267 }
268 platform_set_drvdata(pdev, nocp); 268 platform_set_drvdata(pdev, nocp);
269 269
270 clk_prepare_enable(nocp->clk); 270 ret = clk_prepare_enable(nocp->clk);
271 if (ret) {
272 dev_err(&pdev->dev, "failed to prepare ppmu clock\n");
273 return ret;
274 }
271 275
272 pr_info("exynos-nocp: new NoC Probe device registered: %s\n", 276 pr_info("exynos-nocp: new NoC Probe device registered: %s\n",
273 dev_name(dev)); 277 dev_name(dev));
diff --git a/drivers/devfreq/event/exynos-ppmu.c b/drivers/devfreq/event/exynos-ppmu.c
index 9b7350935b73..d96e3dc71cf8 100644
--- a/drivers/devfreq/event/exynos-ppmu.c
+++ b/drivers/devfreq/event/exynos-ppmu.c
@@ -44,7 +44,7 @@ struct exynos_ppmu {
44 { "ppmu-event2-"#name, PPMU_PMNCNT2 }, \ 44 { "ppmu-event2-"#name, PPMU_PMNCNT2 }, \
45 { "ppmu-event3-"#name, PPMU_PMNCNT3 } 45 { "ppmu-event3-"#name, PPMU_PMNCNT3 }
46 46
47struct __exynos_ppmu_events { 47static struct __exynos_ppmu_events {
48 char *name; 48 char *name;
49 int id; 49 int id;
50} ppmu_events[] = { 50} ppmu_events[] = {
@@ -648,7 +648,11 @@ static int exynos_ppmu_probe(struct platform_device *pdev)
648 dev_name(&pdev->dev), desc[i].name); 648 dev_name(&pdev->dev), desc[i].name);
649 } 649 }
650 650
651 clk_prepare_enable(info->ppmu.clk); 651 ret = clk_prepare_enable(info->ppmu.clk);
652 if (ret) {
653 dev_err(&pdev->dev, "failed to prepare ppmu clock\n");
654 return ret;
655 }
652 656
653 return 0; 657 return 0;
654} 658}
diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
index d37e8dda8079..ec240592f5c8 100644
--- a/drivers/dma/ep93xx_dma.c
+++ b/drivers/dma/ep93xx_dma.c
@@ -201,6 +201,7 @@ struct ep93xx_dma_engine {
201 struct dma_device dma_dev; 201 struct dma_device dma_dev;
202 bool m2m; 202 bool m2m;
203 int (*hw_setup)(struct ep93xx_dma_chan *); 203 int (*hw_setup)(struct ep93xx_dma_chan *);
204 void (*hw_synchronize)(struct ep93xx_dma_chan *);
204 void (*hw_shutdown)(struct ep93xx_dma_chan *); 205 void (*hw_shutdown)(struct ep93xx_dma_chan *);
205 void (*hw_submit)(struct ep93xx_dma_chan *); 206 void (*hw_submit)(struct ep93xx_dma_chan *);
206 int (*hw_interrupt)(struct ep93xx_dma_chan *); 207 int (*hw_interrupt)(struct ep93xx_dma_chan *);
@@ -323,6 +324,8 @@ static int m2p_hw_setup(struct ep93xx_dma_chan *edmac)
323 | M2P_CONTROL_ENABLE; 324 | M2P_CONTROL_ENABLE;
324 m2p_set_control(edmac, control); 325 m2p_set_control(edmac, control);
325 326
327 edmac->buffer = 0;
328
326 return 0; 329 return 0;
327} 330}
328 331
@@ -331,21 +334,27 @@ static inline u32 m2p_channel_state(struct ep93xx_dma_chan *edmac)
331 return (readl(edmac->regs + M2P_STATUS) >> 4) & 0x3; 334 return (readl(edmac->regs + M2P_STATUS) >> 4) & 0x3;
332} 335}
333 336
334static void m2p_hw_shutdown(struct ep93xx_dma_chan *edmac) 337static void m2p_hw_synchronize(struct ep93xx_dma_chan *edmac)
335{ 338{
339 unsigned long flags;
336 u32 control; 340 u32 control;
337 341
342 spin_lock_irqsave(&edmac->lock, flags);
338 control = readl(edmac->regs + M2P_CONTROL); 343 control = readl(edmac->regs + M2P_CONTROL);
339 control &= ~(M2P_CONTROL_STALLINT | M2P_CONTROL_NFBINT); 344 control &= ~(M2P_CONTROL_STALLINT | M2P_CONTROL_NFBINT);
340 m2p_set_control(edmac, control); 345 m2p_set_control(edmac, control);
346 spin_unlock_irqrestore(&edmac->lock, flags);
341 347
342 while (m2p_channel_state(edmac) >= M2P_STATE_ON) 348 while (m2p_channel_state(edmac) >= M2P_STATE_ON)
343 cpu_relax(); 349 schedule();
350}
344 351
352static void m2p_hw_shutdown(struct ep93xx_dma_chan *edmac)
353{
345 m2p_set_control(edmac, 0); 354 m2p_set_control(edmac, 0);
346 355
347 while (m2p_channel_state(edmac) == M2P_STATE_STALL) 356 while (m2p_channel_state(edmac) != M2P_STATE_IDLE)
348 cpu_relax(); 357 dev_warn(chan2dev(edmac), "M2P: Not yet IDLE\n");
349} 358}
350 359
351static void m2p_fill_desc(struct ep93xx_dma_chan *edmac) 360static void m2p_fill_desc(struct ep93xx_dma_chan *edmac)
@@ -1161,6 +1170,26 @@ fail:
1161} 1170}
1162 1171
1163/** 1172/**
1173 * ep93xx_dma_synchronize - Synchronizes the termination of transfers to the
1174 * current context.
1175 * @chan: channel
1176 *
1177 * Synchronizes the DMA channel termination to the current context. When this
1178 * function returns it is guaranteed that all transfers for previously issued
1179 * descriptors have stopped and and it is safe to free the memory associated
1180 * with them. Furthermore it is guaranteed that all complete callback functions
1181 * for a previously submitted descriptor have finished running and it is safe to
1182 * free resources accessed from within the complete callbacks.
1183 */
1184static void ep93xx_dma_synchronize(struct dma_chan *chan)
1185{
1186 struct ep93xx_dma_chan *edmac = to_ep93xx_dma_chan(chan);
1187
1188 if (edmac->edma->hw_synchronize)
1189 edmac->edma->hw_synchronize(edmac);
1190}
1191
1192/**
1164 * ep93xx_dma_terminate_all - terminate all transactions 1193 * ep93xx_dma_terminate_all - terminate all transactions
1165 * @chan: channel 1194 * @chan: channel
1166 * 1195 *
@@ -1323,6 +1352,7 @@ static int __init ep93xx_dma_probe(struct platform_device *pdev)
1323 dma_dev->device_prep_slave_sg = ep93xx_dma_prep_slave_sg; 1352 dma_dev->device_prep_slave_sg = ep93xx_dma_prep_slave_sg;
1324 dma_dev->device_prep_dma_cyclic = ep93xx_dma_prep_dma_cyclic; 1353 dma_dev->device_prep_dma_cyclic = ep93xx_dma_prep_dma_cyclic;
1325 dma_dev->device_config = ep93xx_dma_slave_config; 1354 dma_dev->device_config = ep93xx_dma_slave_config;
1355 dma_dev->device_synchronize = ep93xx_dma_synchronize;
1326 dma_dev->device_terminate_all = ep93xx_dma_terminate_all; 1356 dma_dev->device_terminate_all = ep93xx_dma_terminate_all;
1327 dma_dev->device_issue_pending = ep93xx_dma_issue_pending; 1357 dma_dev->device_issue_pending = ep93xx_dma_issue_pending;
1328 dma_dev->device_tx_status = ep93xx_dma_tx_status; 1358 dma_dev->device_tx_status = ep93xx_dma_tx_status;
@@ -1340,6 +1370,7 @@ static int __init ep93xx_dma_probe(struct platform_device *pdev)
1340 } else { 1370 } else {
1341 dma_cap_set(DMA_PRIVATE, dma_dev->cap_mask); 1371 dma_cap_set(DMA_PRIVATE, dma_dev->cap_mask);
1342 1372
1373 edma->hw_synchronize = m2p_hw_synchronize;
1343 edma->hw_setup = m2p_hw_setup; 1374 edma->hw_setup = m2p_hw_setup;
1344 edma->hw_shutdown = m2p_hw_shutdown; 1375 edma->hw_shutdown = m2p_hw_shutdown;
1345 edma->hw_submit = m2p_hw_submit; 1376 edma->hw_submit = m2p_hw_submit;
diff --git a/drivers/dma/mv_xor_v2.c b/drivers/dma/mv_xor_v2.c
index a28a01fcba67..f3e211f8f6c5 100644
--- a/drivers/dma/mv_xor_v2.c
+++ b/drivers/dma/mv_xor_v2.c
@@ -161,6 +161,7 @@ struct mv_xor_v2_device {
161 struct mv_xor_v2_sw_desc *sw_desq; 161 struct mv_xor_v2_sw_desc *sw_desq;
162 int desc_size; 162 int desc_size;
163 unsigned int npendings; 163 unsigned int npendings;
164 unsigned int hw_queue_idx;
164}; 165};
165 166
166/** 167/**
@@ -214,18 +215,6 @@ static void mv_xor_v2_set_data_buffers(struct mv_xor_v2_device *xor_dev,
214} 215}
215 216
216/* 217/*
217 * Return the next available index in the DESQ.
218 */
219static int mv_xor_v2_get_desq_write_ptr(struct mv_xor_v2_device *xor_dev)
220{
221 /* read the index for the next available descriptor in the DESQ */
222 u32 reg = readl(xor_dev->dma_base + MV_XOR_V2_DMA_DESQ_ALLOC_OFF);
223
224 return ((reg >> MV_XOR_V2_DMA_DESQ_ALLOC_WRPTR_SHIFT)
225 & MV_XOR_V2_DMA_DESQ_ALLOC_WRPTR_MASK);
226}
227
228/*
229 * notify the engine of new descriptors, and update the available index. 218 * notify the engine of new descriptors, and update the available index.
230 */ 219 */
231static void mv_xor_v2_add_desc_to_desq(struct mv_xor_v2_device *xor_dev, 220static void mv_xor_v2_add_desc_to_desq(struct mv_xor_v2_device *xor_dev,
@@ -257,22 +246,6 @@ static int mv_xor_v2_set_desc_size(struct mv_xor_v2_device *xor_dev)
257 return MV_XOR_V2_EXT_DESC_SIZE; 246 return MV_XOR_V2_EXT_DESC_SIZE;
258} 247}
259 248
260/*
261 * Set the IMSG threshold
262 */
263static inline
264void mv_xor_v2_set_imsg_thrd(struct mv_xor_v2_device *xor_dev, int thrd_val)
265{
266 u32 reg;
267
268 reg = readl(xor_dev->dma_base + MV_XOR_V2_DMA_IMSG_THRD_OFF);
269
270 reg &= (~MV_XOR_V2_DMA_IMSG_THRD_MASK << MV_XOR_V2_DMA_IMSG_THRD_SHIFT);
271 reg |= (thrd_val << MV_XOR_V2_DMA_IMSG_THRD_SHIFT);
272
273 writel(reg, xor_dev->dma_base + MV_XOR_V2_DMA_IMSG_THRD_OFF);
274}
275
276static irqreturn_t mv_xor_v2_interrupt_handler(int irq, void *data) 249static irqreturn_t mv_xor_v2_interrupt_handler(int irq, void *data)
277{ 250{
278 struct mv_xor_v2_device *xor_dev = data; 251 struct mv_xor_v2_device *xor_dev = data;
@@ -288,12 +261,6 @@ static irqreturn_t mv_xor_v2_interrupt_handler(int irq, void *data)
288 if (!ndescs) 261 if (!ndescs)
289 return IRQ_NONE; 262 return IRQ_NONE;
290 263
291 /*
292 * Update IMSG threshold, to disable new IMSG interrupts until
293 * end of the tasklet
294 */
295 mv_xor_v2_set_imsg_thrd(xor_dev, MV_XOR_V2_DESC_NUM);
296
297 /* schedule a tasklet to handle descriptors callbacks */ 264 /* schedule a tasklet to handle descriptors callbacks */
298 tasklet_schedule(&xor_dev->irq_tasklet); 265 tasklet_schedule(&xor_dev->irq_tasklet);
299 266
@@ -306,7 +273,6 @@ static irqreturn_t mv_xor_v2_interrupt_handler(int irq, void *data)
306static dma_cookie_t 273static dma_cookie_t
307mv_xor_v2_tx_submit(struct dma_async_tx_descriptor *tx) 274mv_xor_v2_tx_submit(struct dma_async_tx_descriptor *tx)
308{ 275{
309 int desq_ptr;
310 void *dest_hw_desc; 276 void *dest_hw_desc;
311 dma_cookie_t cookie; 277 dma_cookie_t cookie;
312 struct mv_xor_v2_sw_desc *sw_desc = 278 struct mv_xor_v2_sw_desc *sw_desc =
@@ -322,15 +288,15 @@ mv_xor_v2_tx_submit(struct dma_async_tx_descriptor *tx)
322 spin_lock_bh(&xor_dev->lock); 288 spin_lock_bh(&xor_dev->lock);
323 cookie = dma_cookie_assign(tx); 289 cookie = dma_cookie_assign(tx);
324 290
325 /* get the next available slot in the DESQ */
326 desq_ptr = mv_xor_v2_get_desq_write_ptr(xor_dev);
327
328 /* copy the HW descriptor from the SW descriptor to the DESQ */ 291 /* copy the HW descriptor from the SW descriptor to the DESQ */
329 dest_hw_desc = xor_dev->hw_desq_virt + desq_ptr; 292 dest_hw_desc = xor_dev->hw_desq_virt + xor_dev->hw_queue_idx;
330 293
331 memcpy(dest_hw_desc, &sw_desc->hw_desc, xor_dev->desc_size); 294 memcpy(dest_hw_desc, &sw_desc->hw_desc, xor_dev->desc_size);
332 295
333 xor_dev->npendings++; 296 xor_dev->npendings++;
297 xor_dev->hw_queue_idx++;
298 if (xor_dev->hw_queue_idx >= MV_XOR_V2_DESC_NUM)
299 xor_dev->hw_queue_idx = 0;
334 300
335 spin_unlock_bh(&xor_dev->lock); 301 spin_unlock_bh(&xor_dev->lock);
336 302
@@ -344,6 +310,7 @@ static struct mv_xor_v2_sw_desc *
344mv_xor_v2_prep_sw_desc(struct mv_xor_v2_device *xor_dev) 310mv_xor_v2_prep_sw_desc(struct mv_xor_v2_device *xor_dev)
345{ 311{
346 struct mv_xor_v2_sw_desc *sw_desc; 312 struct mv_xor_v2_sw_desc *sw_desc;
313 bool found = false;
347 314
348 /* Lock the channel */ 315 /* Lock the channel */
349 spin_lock_bh(&xor_dev->lock); 316 spin_lock_bh(&xor_dev->lock);
@@ -355,19 +322,23 @@ mv_xor_v2_prep_sw_desc(struct mv_xor_v2_device *xor_dev)
355 return NULL; 322 return NULL;
356 } 323 }
357 324
358 /* get a free SW descriptor from the SW DESQ */ 325 list_for_each_entry(sw_desc, &xor_dev->free_sw_desc, free_list) {
359 sw_desc = list_first_entry(&xor_dev->free_sw_desc, 326 if (async_tx_test_ack(&sw_desc->async_tx)) {
360 struct mv_xor_v2_sw_desc, free_list); 327 found = true;
328 break;
329 }
330 }
331
332 if (!found) {
333 spin_unlock_bh(&xor_dev->lock);
334 return NULL;
335 }
336
361 list_del(&sw_desc->free_list); 337 list_del(&sw_desc->free_list);
362 338
363 /* Release the channel */ 339 /* Release the channel */
364 spin_unlock_bh(&xor_dev->lock); 340 spin_unlock_bh(&xor_dev->lock);
365 341
366 /* set the async tx descriptor */
367 dma_async_tx_descriptor_init(&sw_desc->async_tx, &xor_dev->dmachan);
368 sw_desc->async_tx.tx_submit = mv_xor_v2_tx_submit;
369 async_tx_ack(&sw_desc->async_tx);
370
371 return sw_desc; 342 return sw_desc;
372} 343}
373 344
@@ -389,6 +360,8 @@ mv_xor_v2_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest,
389 __func__, len, &src, &dest, flags); 360 __func__, len, &src, &dest, flags);
390 361
391 sw_desc = mv_xor_v2_prep_sw_desc(xor_dev); 362 sw_desc = mv_xor_v2_prep_sw_desc(xor_dev);
363 if (!sw_desc)
364 return NULL;
392 365
393 sw_desc->async_tx.flags = flags; 366 sw_desc->async_tx.flags = flags;
394 367
@@ -443,6 +416,8 @@ mv_xor_v2_prep_dma_xor(struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src,
443 __func__, src_cnt, len, &dest, flags); 416 __func__, src_cnt, len, &dest, flags);
444 417
445 sw_desc = mv_xor_v2_prep_sw_desc(xor_dev); 418 sw_desc = mv_xor_v2_prep_sw_desc(xor_dev);
419 if (!sw_desc)
420 return NULL;
446 421
447 sw_desc->async_tx.flags = flags; 422 sw_desc->async_tx.flags = flags;
448 423
@@ -491,6 +466,8 @@ mv_xor_v2_prep_dma_interrupt(struct dma_chan *chan, unsigned long flags)
491 container_of(chan, struct mv_xor_v2_device, dmachan); 466 container_of(chan, struct mv_xor_v2_device, dmachan);
492 467
493 sw_desc = mv_xor_v2_prep_sw_desc(xor_dev); 468 sw_desc = mv_xor_v2_prep_sw_desc(xor_dev);
469 if (!sw_desc)
470 return NULL;
494 471
495 /* set the HW descriptor */ 472 /* set the HW descriptor */
496 hw_descriptor = &sw_desc->hw_desc; 473 hw_descriptor = &sw_desc->hw_desc;
@@ -554,7 +531,6 @@ static void mv_xor_v2_tasklet(unsigned long data)
554{ 531{
555 struct mv_xor_v2_device *xor_dev = (struct mv_xor_v2_device *) data; 532 struct mv_xor_v2_device *xor_dev = (struct mv_xor_v2_device *) data;
556 int pending_ptr, num_of_pending, i; 533 int pending_ptr, num_of_pending, i;
557 struct mv_xor_v2_descriptor *next_pending_hw_desc = NULL;
558 struct mv_xor_v2_sw_desc *next_pending_sw_desc = NULL; 534 struct mv_xor_v2_sw_desc *next_pending_sw_desc = NULL;
559 535
560 dev_dbg(xor_dev->dmadev.dev, "%s %d\n", __func__, __LINE__); 536 dev_dbg(xor_dev->dmadev.dev, "%s %d\n", __func__, __LINE__);
@@ -562,17 +538,10 @@ static void mv_xor_v2_tasklet(unsigned long data)
562 /* get the pending descriptors parameters */ 538 /* get the pending descriptors parameters */
563 num_of_pending = mv_xor_v2_get_pending_params(xor_dev, &pending_ptr); 539 num_of_pending = mv_xor_v2_get_pending_params(xor_dev, &pending_ptr);
564 540
565 /* next HW descriptor */
566 next_pending_hw_desc = xor_dev->hw_desq_virt + pending_ptr;
567
568 /* loop over free descriptors */ 541 /* loop over free descriptors */
569 for (i = 0; i < num_of_pending; i++) { 542 for (i = 0; i < num_of_pending; i++) {
570 543 struct mv_xor_v2_descriptor *next_pending_hw_desc =
571 if (pending_ptr > MV_XOR_V2_DESC_NUM) 544 xor_dev->hw_desq_virt + pending_ptr;
572 pending_ptr = 0;
573
574 if (next_pending_sw_desc != NULL)
575 next_pending_hw_desc++;
576 545
577 /* get the SW descriptor related to the HW descriptor */ 546 /* get the SW descriptor related to the HW descriptor */
578 next_pending_sw_desc = 547 next_pending_sw_desc =
@@ -608,15 +577,14 @@ static void mv_xor_v2_tasklet(unsigned long data)
608 577
609 /* increment the next descriptor */ 578 /* increment the next descriptor */
610 pending_ptr++; 579 pending_ptr++;
580 if (pending_ptr >= MV_XOR_V2_DESC_NUM)
581 pending_ptr = 0;
611 } 582 }
612 583
613 if (num_of_pending != 0) { 584 if (num_of_pending != 0) {
614 /* free the descriptores */ 585 /* free the descriptores */
615 mv_xor_v2_free_desc_from_desq(xor_dev, num_of_pending); 586 mv_xor_v2_free_desc_from_desq(xor_dev, num_of_pending);
616 } 587 }
617
618 /* Update IMSG threshold, to enable new IMSG interrupts */
619 mv_xor_v2_set_imsg_thrd(xor_dev, 0);
620} 588}
621 589
622/* 590/*
@@ -648,9 +616,6 @@ static int mv_xor_v2_descq_init(struct mv_xor_v2_device *xor_dev)
648 writel((xor_dev->hw_desq & 0xFFFF00000000) >> 32, 616 writel((xor_dev->hw_desq & 0xFFFF00000000) >> 32,
649 xor_dev->dma_base + MV_XOR_V2_DMA_DESQ_BAHR_OFF); 617 xor_dev->dma_base + MV_XOR_V2_DMA_DESQ_BAHR_OFF);
650 618
651 /* enable the DMA engine */
652 writel(0, xor_dev->dma_base + MV_XOR_V2_DMA_DESQ_STOP_OFF);
653
654 /* 619 /*
655 * This is a temporary solution, until we activate the 620 * This is a temporary solution, until we activate the
656 * SMMU. Set the attributes for reading & writing data buffers 621 * SMMU. Set the attributes for reading & writing data buffers
@@ -694,6 +659,9 @@ static int mv_xor_v2_descq_init(struct mv_xor_v2_device *xor_dev)
694 reg |= MV_XOR_V2_GLOB_PAUSE_AXI_TIME_DIS_VAL; 659 reg |= MV_XOR_V2_GLOB_PAUSE_AXI_TIME_DIS_VAL;
695 writel(reg, xor_dev->glob_base + MV_XOR_V2_GLOB_PAUSE); 660 writel(reg, xor_dev->glob_base + MV_XOR_V2_GLOB_PAUSE);
696 661
662 /* enable the DMA engine */
663 writel(0, xor_dev->dma_base + MV_XOR_V2_DMA_DESQ_STOP_OFF);
664
697 return 0; 665 return 0;
698} 666}
699 667
@@ -725,6 +693,10 @@ static int mv_xor_v2_probe(struct platform_device *pdev)
725 693
726 platform_set_drvdata(pdev, xor_dev); 694 platform_set_drvdata(pdev, xor_dev);
727 695
696 ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(40));
697 if (ret)
698 return ret;
699
728 xor_dev->clk = devm_clk_get(&pdev->dev, NULL); 700 xor_dev->clk = devm_clk_get(&pdev->dev, NULL);
729 if (IS_ERR(xor_dev->clk) && PTR_ERR(xor_dev->clk) == -EPROBE_DEFER) 701 if (IS_ERR(xor_dev->clk) && PTR_ERR(xor_dev->clk) == -EPROBE_DEFER)
730 return -EPROBE_DEFER; 702 return -EPROBE_DEFER;
@@ -785,8 +757,15 @@ static int mv_xor_v2_probe(struct platform_device *pdev)
785 757
786 /* add all SW descriptors to the free list */ 758 /* add all SW descriptors to the free list */
787 for (i = 0; i < MV_XOR_V2_DESC_NUM; i++) { 759 for (i = 0; i < MV_XOR_V2_DESC_NUM; i++) {
788 xor_dev->sw_desq[i].idx = i; 760 struct mv_xor_v2_sw_desc *sw_desc =
789 list_add(&xor_dev->sw_desq[i].free_list, 761 xor_dev->sw_desq + i;
762 sw_desc->idx = i;
763 dma_async_tx_descriptor_init(&sw_desc->async_tx,
764 &xor_dev->dmachan);
765 sw_desc->async_tx.tx_submit = mv_xor_v2_tx_submit;
766 async_tx_ack(&sw_desc->async_tx);
767
768 list_add(&sw_desc->free_list,
790 &xor_dev->free_sw_desc); 769 &xor_dev->free_sw_desc);
791 } 770 }
792 771
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index 8b0da7fa520d..e90a7a0d760a 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -3008,7 +3008,8 @@ static int pl330_remove(struct amba_device *adev)
3008 3008
3009 for (i = 0; i < AMBA_NR_IRQS; i++) { 3009 for (i = 0; i < AMBA_NR_IRQS; i++) {
3010 irq = adev->irq[i]; 3010 irq = adev->irq[i];
3011 devm_free_irq(&adev->dev, irq, pl330); 3011 if (irq)
3012 devm_free_irq(&adev->dev, irq, pl330);
3012 } 3013 }
3013 3014
3014 dma_async_device_unregister(&pl330->ddma); 3015 dma_async_device_unregister(&pl330->ddma);
diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c
index db41795fe42a..bd261c9e9664 100644
--- a/drivers/dma/sh/rcar-dmac.c
+++ b/drivers/dma/sh/rcar-dmac.c
@@ -1287,6 +1287,9 @@ static unsigned int rcar_dmac_chan_get_residue(struct rcar_dmac_chan *chan,
1287 if (desc->hwdescs.use) { 1287 if (desc->hwdescs.use) {
1288 dptr = (rcar_dmac_chan_read(chan, RCAR_DMACHCRB) & 1288 dptr = (rcar_dmac_chan_read(chan, RCAR_DMACHCRB) &
1289 RCAR_DMACHCRB_DPTR_MASK) >> RCAR_DMACHCRB_DPTR_SHIFT; 1289 RCAR_DMACHCRB_DPTR_MASK) >> RCAR_DMACHCRB_DPTR_SHIFT;
1290 if (dptr == 0)
1291 dptr = desc->nchunks;
1292 dptr--;
1290 WARN_ON(dptr >= desc->nchunks); 1293 WARN_ON(dptr >= desc->nchunks);
1291 } else { 1294 } else {
1292 running = desc->running; 1295 running = desc->running;
diff --git a/drivers/dma/sh/usb-dmac.c b/drivers/dma/sh/usb-dmac.c
index 72c649713ace..31a145154e9f 100644
--- a/drivers/dma/sh/usb-dmac.c
+++ b/drivers/dma/sh/usb-dmac.c
@@ -117,7 +117,7 @@ struct usb_dmac {
117#define USB_DMASWR 0x0008 117#define USB_DMASWR 0x0008
118#define USB_DMASWR_SWR (1 << 0) 118#define USB_DMASWR_SWR (1 << 0)
119#define USB_DMAOR 0x0060 119#define USB_DMAOR 0x0060
120#define USB_DMAOR_AE (1 << 2) 120#define USB_DMAOR_AE (1 << 1)
121#define USB_DMAOR_DME (1 << 0) 121#define USB_DMAOR_DME (1 << 0)
122 122
123#define USB_DMASAR 0x0000 123#define USB_DMASAR 0x0000
diff --git a/drivers/firmware/dmi-id.c b/drivers/firmware/dmi-id.c
index 44c01390d035..951b6c79f166 100644
--- a/drivers/firmware/dmi-id.c
+++ b/drivers/firmware/dmi-id.c
@@ -47,6 +47,7 @@ DEFINE_DMI_ATTR_WITH_SHOW(product_name, 0444, DMI_PRODUCT_NAME);
47DEFINE_DMI_ATTR_WITH_SHOW(product_version, 0444, DMI_PRODUCT_VERSION); 47DEFINE_DMI_ATTR_WITH_SHOW(product_version, 0444, DMI_PRODUCT_VERSION);
48DEFINE_DMI_ATTR_WITH_SHOW(product_serial, 0400, DMI_PRODUCT_SERIAL); 48DEFINE_DMI_ATTR_WITH_SHOW(product_serial, 0400, DMI_PRODUCT_SERIAL);
49DEFINE_DMI_ATTR_WITH_SHOW(product_uuid, 0400, DMI_PRODUCT_UUID); 49DEFINE_DMI_ATTR_WITH_SHOW(product_uuid, 0400, DMI_PRODUCT_UUID);
50DEFINE_DMI_ATTR_WITH_SHOW(product_family, 0444, DMI_PRODUCT_FAMILY);
50DEFINE_DMI_ATTR_WITH_SHOW(board_vendor, 0444, DMI_BOARD_VENDOR); 51DEFINE_DMI_ATTR_WITH_SHOW(board_vendor, 0444, DMI_BOARD_VENDOR);
51DEFINE_DMI_ATTR_WITH_SHOW(board_name, 0444, DMI_BOARD_NAME); 52DEFINE_DMI_ATTR_WITH_SHOW(board_name, 0444, DMI_BOARD_NAME);
52DEFINE_DMI_ATTR_WITH_SHOW(board_version, 0444, DMI_BOARD_VERSION); 53DEFINE_DMI_ATTR_WITH_SHOW(board_version, 0444, DMI_BOARD_VERSION);
@@ -191,6 +192,7 @@ static void __init dmi_id_init_attr_table(void)
191 ADD_DMI_ATTR(product_version, DMI_PRODUCT_VERSION); 192 ADD_DMI_ATTR(product_version, DMI_PRODUCT_VERSION);
192 ADD_DMI_ATTR(product_serial, DMI_PRODUCT_SERIAL); 193 ADD_DMI_ATTR(product_serial, DMI_PRODUCT_SERIAL);
193 ADD_DMI_ATTR(product_uuid, DMI_PRODUCT_UUID); 194 ADD_DMI_ATTR(product_uuid, DMI_PRODUCT_UUID);
195 ADD_DMI_ATTR(product_family, DMI_PRODUCT_FAMILY);
194 ADD_DMI_ATTR(board_vendor, DMI_BOARD_VENDOR); 196 ADD_DMI_ATTR(board_vendor, DMI_BOARD_VENDOR);
195 ADD_DMI_ATTR(board_name, DMI_BOARD_NAME); 197 ADD_DMI_ATTR(board_name, DMI_BOARD_NAME);
196 ADD_DMI_ATTR(board_version, DMI_BOARD_VERSION); 198 ADD_DMI_ATTR(board_version, DMI_BOARD_VERSION);
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index 54be60ead08f..783041964439 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -144,7 +144,7 @@ static int __init dmi_walk_early(void (*decode)(const struct dmi_header *,
144 144
145 buf = dmi_early_remap(dmi_base, orig_dmi_len); 145 buf = dmi_early_remap(dmi_base, orig_dmi_len);
146 if (buf == NULL) 146 if (buf == NULL)
147 return -1; 147 return -ENOMEM;
148 148
149 dmi_decode_table(buf, decode, NULL); 149 dmi_decode_table(buf, decode, NULL);
150 150
@@ -178,7 +178,7 @@ static void __init dmi_save_ident(const struct dmi_header *dm, int slot,
178 const char *d = (const char *) dm; 178 const char *d = (const char *) dm;
179 const char *p; 179 const char *p;
180 180
181 if (dmi_ident[slot]) 181 if (dmi_ident[slot] || dm->length <= string)
182 return; 182 return;
183 183
184 p = dmi_string(dm, d[string]); 184 p = dmi_string(dm, d[string]);
@@ -191,13 +191,14 @@ static void __init dmi_save_ident(const struct dmi_header *dm, int slot,
191static void __init dmi_save_uuid(const struct dmi_header *dm, int slot, 191static void __init dmi_save_uuid(const struct dmi_header *dm, int slot,
192 int index) 192 int index)
193{ 193{
194 const u8 *d = (u8 *) dm + index; 194 const u8 *d;
195 char *s; 195 char *s;
196 int is_ff = 1, is_00 = 1, i; 196 int is_ff = 1, is_00 = 1, i;
197 197
198 if (dmi_ident[slot]) 198 if (dmi_ident[slot] || dm->length <= index + 16)
199 return; 199 return;
200 200
201 d = (u8 *) dm + index;
201 for (i = 0; i < 16 && (is_ff || is_00); i++) { 202 for (i = 0; i < 16 && (is_ff || is_00); i++) {
202 if (d[i] != 0x00) 203 if (d[i] != 0x00)
203 is_00 = 0; 204 is_00 = 0;
@@ -228,16 +229,17 @@ static void __init dmi_save_uuid(const struct dmi_header *dm, int slot,
228static void __init dmi_save_type(const struct dmi_header *dm, int slot, 229static void __init dmi_save_type(const struct dmi_header *dm, int slot,
229 int index) 230 int index)
230{ 231{
231 const u8 *d = (u8 *) dm + index; 232 const u8 *d;
232 char *s; 233 char *s;
233 234
234 if (dmi_ident[slot]) 235 if (dmi_ident[slot] || dm->length <= index)
235 return; 236 return;
236 237
237 s = dmi_alloc(4); 238 s = dmi_alloc(4);
238 if (!s) 239 if (!s)
239 return; 240 return;
240 241
242 d = (u8 *) dm + index;
241 sprintf(s, "%u", *d & 0x7F); 243 sprintf(s, "%u", *d & 0x7F);
242 dmi_ident[slot] = s; 244 dmi_ident[slot] = s;
243} 245}
@@ -278,9 +280,13 @@ static void __init dmi_save_devices(const struct dmi_header *dm)
278 280
279static void __init dmi_save_oem_strings_devices(const struct dmi_header *dm) 281static void __init dmi_save_oem_strings_devices(const struct dmi_header *dm)
280{ 282{
281 int i, count = *(u8 *)(dm + 1); 283 int i, count;
282 struct dmi_device *dev; 284 struct dmi_device *dev;
283 285
286 if (dm->length < 0x05)
287 return;
288
289 count = *(u8 *)(dm + 1);
284 for (i = 1; i <= count; i++) { 290 for (i = 1; i <= count; i++) {
285 const char *devname = dmi_string(dm, i); 291 const char *devname = dmi_string(dm, i);
286 292
@@ -353,6 +359,9 @@ static void __init dmi_save_extended_devices(const struct dmi_header *dm)
353 const char *name; 359 const char *name;
354 const u8 *d = (u8 *)dm; 360 const u8 *d = (u8 *)dm;
355 361
362 if (dm->length < 0x0B)
363 return;
364
356 /* Skip disabled device */ 365 /* Skip disabled device */
357 if ((d[0x5] & 0x80) == 0) 366 if ((d[0x5] & 0x80) == 0)
358 return; 367 return;
@@ -387,7 +396,7 @@ static void __init save_mem_devices(const struct dmi_header *dm, void *v)
387 const char *d = (const char *)dm; 396 const char *d = (const char *)dm;
388 static int nr; 397 static int nr;
389 398
390 if (dm->type != DMI_ENTRY_MEM_DEVICE) 399 if (dm->type != DMI_ENTRY_MEM_DEVICE || dm->length < 0x12)
391 return; 400 return;
392 if (nr >= dmi_memdev_nr) { 401 if (nr >= dmi_memdev_nr) {
393 pr_warn(FW_BUG "Too many DIMM entries in SMBIOS table\n"); 402 pr_warn(FW_BUG "Too many DIMM entries in SMBIOS table\n");
@@ -430,6 +439,7 @@ static void __init dmi_decode(const struct dmi_header *dm, void *dummy)
430 dmi_save_ident(dm, DMI_PRODUCT_VERSION, 6); 439 dmi_save_ident(dm, DMI_PRODUCT_VERSION, 6);
431 dmi_save_ident(dm, DMI_PRODUCT_SERIAL, 7); 440 dmi_save_ident(dm, DMI_PRODUCT_SERIAL, 7);
432 dmi_save_uuid(dm, DMI_PRODUCT_UUID, 8); 441 dmi_save_uuid(dm, DMI_PRODUCT_UUID, 8);
442 dmi_save_ident(dm, DMI_PRODUCT_FAMILY, 26);
433 break; 443 break;
434 case 2: /* Base Board Information */ 444 case 2: /* Base Board Information */
435 dmi_save_ident(dm, DMI_BOARD_VENDOR, 4); 445 dmi_save_ident(dm, DMI_BOARD_VENDOR, 4);
@@ -649,6 +659,21 @@ void __init dmi_scan_machine(void)
649 goto error; 659 goto error;
650 660
651 /* 661 /*
662 * Same logic as above, look for a 64-bit entry point
663 * first, and if not found, fall back to 32-bit entry point.
664 */
665 memcpy_fromio(buf, p, 16);
666 for (q = p + 16; q < p + 0x10000; q += 16) {
667 memcpy_fromio(buf + 16, q, 16);
668 if (!dmi_smbios3_present(buf)) {
669 dmi_available = 1;
670 dmi_early_unmap(p, 0x10000);
671 goto out;
672 }
673 memcpy(buf, buf + 16, 16);
674 }
675
676 /*
652 * Iterate over all possible DMI header addresses q. 677 * Iterate over all possible DMI header addresses q.
653 * Maintain the 32 bytes around q in buf. On the 678 * Maintain the 32 bytes around q in buf. On the
654 * first iteration, substitute zero for the 679 * first iteration, substitute zero for the
@@ -658,7 +683,7 @@ void __init dmi_scan_machine(void)
658 memset(buf, 0, 16); 683 memset(buf, 0, 16);
659 for (q = p; q < p + 0x10000; q += 16) { 684 for (q = p; q < p + 0x10000; q += 16) {
660 memcpy_fromio(buf + 16, q, 16); 685 memcpy_fromio(buf + 16, q, 16);
661 if (!dmi_smbios3_present(buf) || !dmi_present(buf)) { 686 if (!dmi_present(buf)) {
662 dmi_available = 1; 687 dmi_available = 1;
663 dmi_early_unmap(p, 0x10000); 688 dmi_early_unmap(p, 0x10000);
664 goto out; 689 goto out;
@@ -992,7 +1017,8 @@ EXPORT_SYMBOL(dmi_get_date);
992 * @decode: Callback function 1017 * @decode: Callback function
993 * @private_data: Private data to be passed to the callback function 1018 * @private_data: Private data to be passed to the callback function
994 * 1019 *
995 * Returns -1 when the DMI table can't be reached, 0 on success. 1020 * Returns 0 on success, -ENXIO if DMI is not selected or not present,
1021 * or a different negative error code if DMI walking fails.
996 */ 1022 */
997int dmi_walk(void (*decode)(const struct dmi_header *, void *), 1023int dmi_walk(void (*decode)(const struct dmi_header *, void *),
998 void *private_data) 1024 void *private_data)
@@ -1000,11 +1026,11 @@ int dmi_walk(void (*decode)(const struct dmi_header *, void *),
1000 u8 *buf; 1026 u8 *buf;
1001 1027
1002 if (!dmi_available) 1028 if (!dmi_available)
1003 return -1; 1029 return -ENXIO;
1004 1030
1005 buf = dmi_remap(dmi_base, dmi_len); 1031 buf = dmi_remap(dmi_base, dmi_len);
1006 if (buf == NULL) 1032 if (buf == NULL)
1007 return -1; 1033 return -ENOMEM;
1008 1034
1009 dmi_decode_table(buf, decode, private_data); 1035 dmi_decode_table(buf, decode, private_data);
1010 1036
diff --git a/drivers/firmware/efi/efi-bgrt.c b/drivers/firmware/efi/efi-bgrt.c
index 04ca8764f0c0..b58233e4ed71 100644
--- a/drivers/firmware/efi/efi-bgrt.c
+++ b/drivers/firmware/efi/efi-bgrt.c
@@ -27,6 +27,26 @@ struct bmp_header {
27 u32 size; 27 u32 size;
28} __packed; 28} __packed;
29 29
30static bool efi_bgrt_addr_valid(u64 addr)
31{
32 efi_memory_desc_t *md;
33
34 for_each_efi_memory_desc(md) {
35 u64 size;
36 u64 end;
37
38 if (md->type != EFI_BOOT_SERVICES_DATA)
39 continue;
40
41 size = md->num_pages << EFI_PAGE_SHIFT;
42 end = md->phys_addr + size;
43 if (addr >= md->phys_addr && addr < end)
44 return true;
45 }
46
47 return false;
48}
49
30void __init efi_bgrt_init(struct acpi_table_header *table) 50void __init efi_bgrt_init(struct acpi_table_header *table)
31{ 51{
32 void *image; 52 void *image;
@@ -36,6 +56,9 @@ void __init efi_bgrt_init(struct acpi_table_header *table)
36 if (acpi_disabled) 56 if (acpi_disabled)
37 return; 57 return;
38 58
59 if (!efi_enabled(EFI_MEMMAP))
60 return;
61
39 if (table->length < sizeof(bgrt_tab)) { 62 if (table->length < sizeof(bgrt_tab)) {
40 pr_notice("Ignoring BGRT: invalid length %u (expected %zu)\n", 63 pr_notice("Ignoring BGRT: invalid length %u (expected %zu)\n",
41 table->length, sizeof(bgrt_tab)); 64 table->length, sizeof(bgrt_tab));
@@ -62,6 +85,10 @@ void __init efi_bgrt_init(struct acpi_table_header *table)
62 goto out; 85 goto out;
63 } 86 }
64 87
88 if (!efi_bgrt_addr_valid(bgrt->image_address)) {
89 pr_notice("Ignoring BGRT: invalid image address\n");
90 goto out;
91 }
65 image = early_memremap(bgrt->image_address, sizeof(bmp_header)); 92 image = early_memremap(bgrt->image_address, sizeof(bmp_header));
66 if (!image) { 93 if (!image) {
67 pr_notice("Ignoring BGRT: failed to map image header memory\n"); 94 pr_notice("Ignoring BGRT: failed to map image header memory\n");
diff --git a/drivers/firmware/efi/efi-pstore.c b/drivers/firmware/efi/efi-pstore.c
index ab3a951a17e6..ef1fafdad400 100644
--- a/drivers/firmware/efi/efi-pstore.c
+++ b/drivers/firmware/efi/efi-pstore.c
@@ -53,6 +53,7 @@ static int efi_pstore_read_func(struct efivar_entry *entry,
53 if (sscanf(name, "dump-type%u-%u-%d-%lu-%c", 53 if (sscanf(name, "dump-type%u-%u-%d-%lu-%c",
54 &record->type, &part, &cnt, &time, &data_type) == 5) { 54 &record->type, &part, &cnt, &time, &data_type) == 5) {
55 record->id = generic_id(time, part, cnt); 55 record->id = generic_id(time, part, cnt);
56 record->part = part;
56 record->count = cnt; 57 record->count = cnt;
57 record->time.tv_sec = time; 58 record->time.tv_sec = time;
58 record->time.tv_nsec = 0; 59 record->time.tv_nsec = 0;
@@ -64,6 +65,7 @@ static int efi_pstore_read_func(struct efivar_entry *entry,
64 } else if (sscanf(name, "dump-type%u-%u-%d-%lu", 65 } else if (sscanf(name, "dump-type%u-%u-%d-%lu",
65 &record->type, &part, &cnt, &time) == 4) { 66 &record->type, &part, &cnt, &time) == 4) {
66 record->id = generic_id(time, part, cnt); 67 record->id = generic_id(time, part, cnt);
68 record->part = part;
67 record->count = cnt; 69 record->count = cnt;
68 record->time.tv_sec = time; 70 record->time.tv_sec = time;
69 record->time.tv_nsec = 0; 71 record->time.tv_nsec = 0;
@@ -77,6 +79,7 @@ static int efi_pstore_read_func(struct efivar_entry *entry,
77 * multiple logs, remains. 79 * multiple logs, remains.
78 */ 80 */
79 record->id = generic_id(time, part, 0); 81 record->id = generic_id(time, part, 0);
82 record->part = part;
80 record->count = 0; 83 record->count = 0;
81 record->time.tv_sec = time; 84 record->time.tv_sec = time;
82 record->time.tv_nsec = 0; 85 record->time.tv_nsec = 0;
@@ -241,9 +244,15 @@ static int efi_pstore_write(struct pstore_record *record)
241 efi_guid_t vendor = LINUX_EFI_CRASH_GUID; 244 efi_guid_t vendor = LINUX_EFI_CRASH_GUID;
242 int i, ret = 0; 245 int i, ret = 0;
243 246
247 record->time.tv_sec = get_seconds();
248 record->time.tv_nsec = 0;
249
250 record->id = generic_id(record->time.tv_sec, record->part,
251 record->count);
252
244 snprintf(name, sizeof(name), "dump-type%u-%u-%d-%lu-%c", 253 snprintf(name, sizeof(name), "dump-type%u-%u-%d-%lu-%c",
245 record->type, record->part, record->count, 254 record->type, record->part, record->count,
246 get_seconds(), record->compressed ? 'C' : 'D'); 255 record->time.tv_sec, record->compressed ? 'C' : 'D');
247 256
248 for (i = 0; i < DUMP_NAME_LEN; i++) 257 for (i = 0; i < DUMP_NAME_LEN; i++)
249 efi_name[i] = name[i]; 258 efi_name[i] = name[i];
@@ -255,7 +264,6 @@ static int efi_pstore_write(struct pstore_record *record)
255 if (record->reason == KMSG_DUMP_OOPS) 264 if (record->reason == KMSG_DUMP_OOPS)
256 efivar_run_worker(); 265 efivar_run_worker();
257 266
258 record->id = record->part;
259 return ret; 267 return ret;
260}; 268};
261 269
@@ -287,7 +295,7 @@ static int efi_pstore_erase_func(struct efivar_entry *entry, void *data)
287 * holding multiple logs, remains. 295 * holding multiple logs, remains.
288 */ 296 */
289 snprintf(name_old, sizeof(name_old), "dump-type%u-%u-%lu", 297 snprintf(name_old, sizeof(name_old), "dump-type%u-%u-%lu",
290 ed->record->type, (unsigned int)ed->record->id, 298 ed->record->type, ed->record->part,
291 ed->record->time.tv_sec); 299 ed->record->time.tv_sec);
292 300
293 for (i = 0; i < DUMP_NAME_LEN; i++) 301 for (i = 0; i < DUMP_NAME_LEN; i++)
@@ -320,10 +328,7 @@ static int efi_pstore_erase(struct pstore_record *record)
320 char name[DUMP_NAME_LEN]; 328 char name[DUMP_NAME_LEN];
321 efi_char16_t efi_name[DUMP_NAME_LEN]; 329 efi_char16_t efi_name[DUMP_NAME_LEN];
322 int found, i; 330 int found, i;
323 unsigned int part;
324 331
325 do_div(record->id, 1000);
326 part = do_div(record->id, 100);
327 snprintf(name, sizeof(name), "dump-type%u-%u-%d-%lu", 332 snprintf(name, sizeof(name), "dump-type%u-%u-%d-%lu",
328 record->type, record->part, record->count, 333 record->type, record->part, record->count,
329 record->time.tv_sec); 334 record->time.tv_sec);
diff --git a/drivers/firmware/efi/libstub/secureboot.c b/drivers/firmware/efi/libstub/secureboot.c
index 8c34d50a4d80..959777ec8a77 100644
--- a/drivers/firmware/efi/libstub/secureboot.c
+++ b/drivers/firmware/efi/libstub/secureboot.c
@@ -16,10 +16,10 @@
16 16
17/* BIOS variables */ 17/* BIOS variables */
18static const efi_guid_t efi_variable_guid = EFI_GLOBAL_VARIABLE_GUID; 18static const efi_guid_t efi_variable_guid = EFI_GLOBAL_VARIABLE_GUID;
19static const efi_char16_t const efi_SecureBoot_name[] = { 19static const efi_char16_t efi_SecureBoot_name[] = {
20 'S', 'e', 'c', 'u', 'r', 'e', 'B', 'o', 'o', 't', 0 20 'S', 'e', 'c', 'u', 'r', 'e', 'B', 'o', 'o', 't', 0
21}; 21};
22static const efi_char16_t const efi_SetupMode_name[] = { 22static const efi_char16_t efi_SetupMode_name[] = {
23 'S', 'e', 't', 'u', 'p', 'M', 'o', 'd', 'e', 0 23 'S', 'e', 't', 'u', 'p', 'M', 'o', 'd', 'e', 0
24}; 24};
25 25
diff --git a/drivers/firmware/google/vpd.c b/drivers/firmware/google/vpd.c
index 1e7860f02f4f..31058d400bda 100644
--- a/drivers/firmware/google/vpd.c
+++ b/drivers/firmware/google/vpd.c
@@ -136,12 +136,12 @@ static int vpd_section_attrib_add(const u8 *key, s32 key_len,
136 info->value = value; 136 info->value = value;
137 137
138 INIT_LIST_HEAD(&info->list); 138 INIT_LIST_HEAD(&info->list);
139 list_add_tail(&info->list, &sec->attribs);
140 139
141 ret = sysfs_create_bin_file(sec->kobj, &info->bin_attr); 140 ret = sysfs_create_bin_file(sec->kobj, &info->bin_attr);
142 if (ret) 141 if (ret)
143 goto free_info_key; 142 goto free_info_key;
144 143
144 list_add_tail(&info->list, &sec->attribs);
145 return 0; 145 return 0;
146 146
147free_info_key: 147free_info_key:
@@ -158,8 +158,8 @@ static void vpd_section_attrib_destroy(struct vpd_section *sec)
158 struct vpd_attrib_info *temp; 158 struct vpd_attrib_info *temp;
159 159
160 list_for_each_entry_safe(info, temp, &sec->attribs, list) { 160 list_for_each_entry_safe(info, temp, &sec->attribs, list) {
161 kfree(info->key);
162 sysfs_remove_bin_file(sec->kobj, &info->bin_attr); 161 sysfs_remove_bin_file(sec->kobj, &info->bin_attr);
162 kfree(info->key);
163 kfree(info); 163 kfree(info);
164 } 164 }
165} 165}
@@ -244,7 +244,7 @@ static int vpd_section_destroy(struct vpd_section *sec)
244{ 244{
245 if (sec->enabled) { 245 if (sec->enabled) {
246 vpd_section_attrib_destroy(sec); 246 vpd_section_attrib_destroy(sec);
247 kobject_del(sec->kobj); 247 kobject_put(sec->kobj);
248 sysfs_remove_bin_file(vpd_kobj, &sec->bin_attr); 248 sysfs_remove_bin_file(vpd_kobj, &sec->bin_attr);
249 kfree(sec->raw_name); 249 kfree(sec->raw_name);
250 iounmap(sec->baseaddr); 250 iounmap(sec->baseaddr);
@@ -331,7 +331,7 @@ static void __exit vpd_platform_exit(void)
331{ 331{
332 vpd_section_destroy(&ro_vpd); 332 vpd_section_destroy(&ro_vpd);
333 vpd_section_destroy(&rw_vpd); 333 vpd_section_destroy(&rw_vpd);
334 kobject_del(vpd_kobj); 334 kobject_put(vpd_kobj);
335} 335}
336 336
337module_init(vpd_platform_init); 337module_init(vpd_platform_init);
diff --git a/drivers/gpio/gpio-aspeed.c b/drivers/gpio/gpio-aspeed.c
index ccea609676ee..4ca436e66bdb 100644
--- a/drivers/gpio/gpio-aspeed.c
+++ b/drivers/gpio/gpio-aspeed.c
@@ -646,6 +646,9 @@ static int enable_debounce(struct gpio_chip *chip, unsigned int offset,
646 int rc; 646 int rc;
647 int i; 647 int i;
648 648
649 if (!gpio->clk)
650 return -EINVAL;
651
649 rc = usecs_to_cycles(gpio, usecs, &requested_cycles); 652 rc = usecs_to_cycles(gpio, usecs, &requested_cycles);
650 if (rc < 0) { 653 if (rc < 0) {
651 dev_warn(chip->parent, "Failed to convert %luus to cycles at %luHz: %d\n", 654 dev_warn(chip->parent, "Failed to convert %luus to cycles at %luHz: %d\n",
diff --git a/drivers/gpio/gpio-crystalcove.c b/drivers/gpio/gpio-crystalcove.c
index 2197368cc899..e60156ec0c18 100644
--- a/drivers/gpio/gpio-crystalcove.c
+++ b/drivers/gpio/gpio-crystalcove.c
@@ -90,8 +90,18 @@ static inline int to_reg(int gpio, enum ctrl_register reg_type)
90{ 90{
91 int reg; 91 int reg;
92 92
93 if (gpio == 94) 93 if (gpio >= CRYSTALCOVE_GPIO_NUM) {
94 return GPIOPANELCTL; 94 /*
95 * Virtual GPIO called from ACPI, for now we only support
96 * the panel ctl.
97 */
98 switch (gpio) {
99 case 0x5e:
100 return GPIOPANELCTL;
101 default:
102 return -EOPNOTSUPP;
103 }
104 }
95 105
96 if (reg_type == CTRL_IN) { 106 if (reg_type == CTRL_IN) {
97 if (gpio < 8) 107 if (gpio < 8)
@@ -130,36 +140,36 @@ static void crystalcove_update_irq_ctrl(struct crystalcove_gpio *cg, int gpio)
130static int crystalcove_gpio_dir_in(struct gpio_chip *chip, unsigned gpio) 140static int crystalcove_gpio_dir_in(struct gpio_chip *chip, unsigned gpio)
131{ 141{
132 struct crystalcove_gpio *cg = gpiochip_get_data(chip); 142 struct crystalcove_gpio *cg = gpiochip_get_data(chip);
143 int reg = to_reg(gpio, CTRL_OUT);
133 144
134 if (gpio > CRYSTALCOVE_VGPIO_NUM) 145 if (reg < 0)
135 return 0; 146 return 0;
136 147
137 return regmap_write(cg->regmap, to_reg(gpio, CTRL_OUT), 148 return regmap_write(cg->regmap, reg, CTLO_INPUT_SET);
138 CTLO_INPUT_SET);
139} 149}
140 150
141static int crystalcove_gpio_dir_out(struct gpio_chip *chip, unsigned gpio, 151static int crystalcove_gpio_dir_out(struct gpio_chip *chip, unsigned gpio,
142 int value) 152 int value)
143{ 153{
144 struct crystalcove_gpio *cg = gpiochip_get_data(chip); 154 struct crystalcove_gpio *cg = gpiochip_get_data(chip);
155 int reg = to_reg(gpio, CTRL_OUT);
145 156
146 if (gpio > CRYSTALCOVE_VGPIO_NUM) 157 if (reg < 0)
147 return 0; 158 return 0;
148 159
149 return regmap_write(cg->regmap, to_reg(gpio, CTRL_OUT), 160 return regmap_write(cg->regmap, reg, CTLO_OUTPUT_SET | value);
150 CTLO_OUTPUT_SET | value);
151} 161}
152 162
153static int crystalcove_gpio_get(struct gpio_chip *chip, unsigned gpio) 163static int crystalcove_gpio_get(struct gpio_chip *chip, unsigned gpio)
154{ 164{
155 struct crystalcove_gpio *cg = gpiochip_get_data(chip); 165 struct crystalcove_gpio *cg = gpiochip_get_data(chip);
156 int ret;
157 unsigned int val; 166 unsigned int val;
167 int ret, reg = to_reg(gpio, CTRL_IN);
158 168
159 if (gpio > CRYSTALCOVE_VGPIO_NUM) 169 if (reg < 0)
160 return 0; 170 return 0;
161 171
162 ret = regmap_read(cg->regmap, to_reg(gpio, CTRL_IN), &val); 172 ret = regmap_read(cg->regmap, reg, &val);
163 if (ret) 173 if (ret)
164 return ret; 174 return ret;
165 175
@@ -170,14 +180,15 @@ static void crystalcove_gpio_set(struct gpio_chip *chip,
170 unsigned gpio, int value) 180 unsigned gpio, int value)
171{ 181{
172 struct crystalcove_gpio *cg = gpiochip_get_data(chip); 182 struct crystalcove_gpio *cg = gpiochip_get_data(chip);
183 int reg = to_reg(gpio, CTRL_OUT);
173 184
174 if (gpio > CRYSTALCOVE_VGPIO_NUM) 185 if (reg < 0)
175 return; 186 return;
176 187
177 if (value) 188 if (value)
178 regmap_update_bits(cg->regmap, to_reg(gpio, CTRL_OUT), 1, 1); 189 regmap_update_bits(cg->regmap, reg, 1, 1);
179 else 190 else
180 regmap_update_bits(cg->regmap, to_reg(gpio, CTRL_OUT), 1, 0); 191 regmap_update_bits(cg->regmap, reg, 1, 0);
181} 192}
182 193
183static int crystalcove_irq_type(struct irq_data *data, unsigned type) 194static int crystalcove_irq_type(struct irq_data *data, unsigned type)
@@ -185,6 +196,9 @@ static int crystalcove_irq_type(struct irq_data *data, unsigned type)
185 struct crystalcove_gpio *cg = 196 struct crystalcove_gpio *cg =
186 gpiochip_get_data(irq_data_get_irq_chip_data(data)); 197 gpiochip_get_data(irq_data_get_irq_chip_data(data));
187 198
199 if (data->hwirq >= CRYSTALCOVE_GPIO_NUM)
200 return 0;
201
188 switch (type) { 202 switch (type) {
189 case IRQ_TYPE_NONE: 203 case IRQ_TYPE_NONE:
190 cg->intcnt_value = CTLI_INTCNT_DIS; 204 cg->intcnt_value = CTLI_INTCNT_DIS;
@@ -235,8 +249,10 @@ static void crystalcove_irq_unmask(struct irq_data *data)
235 struct crystalcove_gpio *cg = 249 struct crystalcove_gpio *cg =
236 gpiochip_get_data(irq_data_get_irq_chip_data(data)); 250 gpiochip_get_data(irq_data_get_irq_chip_data(data));
237 251
238 cg->set_irq_mask = false; 252 if (data->hwirq < CRYSTALCOVE_GPIO_NUM) {
239 cg->update |= UPDATE_IRQ_MASK; 253 cg->set_irq_mask = false;
254 cg->update |= UPDATE_IRQ_MASK;
255 }
240} 256}
241 257
242static void crystalcove_irq_mask(struct irq_data *data) 258static void crystalcove_irq_mask(struct irq_data *data)
@@ -244,8 +260,10 @@ static void crystalcove_irq_mask(struct irq_data *data)
244 struct crystalcove_gpio *cg = 260 struct crystalcove_gpio *cg =
245 gpiochip_get_data(irq_data_get_irq_chip_data(data)); 261 gpiochip_get_data(irq_data_get_irq_chip_data(data));
246 262
247 cg->set_irq_mask = true; 263 if (data->hwirq < CRYSTALCOVE_GPIO_NUM) {
248 cg->update |= UPDATE_IRQ_MASK; 264 cg->set_irq_mask = true;
265 cg->update |= UPDATE_IRQ_MASK;
266 }
249} 267}
250 268
251static struct irq_chip crystalcove_irqchip = { 269static struct irq_chip crystalcove_irqchip = {
diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
index 19a92efabbef..c83ea68be792 100644
--- a/drivers/gpio/gpio-mvebu.c
+++ b/drivers/gpio/gpio-mvebu.c
@@ -721,7 +721,7 @@ static int mvebu_pwm_probe(struct platform_device *pdev,
721 u32 set; 721 u32 set;
722 722
723 if (!of_device_is_compatible(mvchip->chip.of_node, 723 if (!of_device_is_compatible(mvchip->chip.of_node,
724 "marvell,armada-370-xp-gpio")) 724 "marvell,armada-370-gpio"))
725 return 0; 725 return 0;
726 726
727 if (IS_ERR(mvchip->clk)) 727 if (IS_ERR(mvchip->clk))
@@ -747,7 +747,7 @@ static int mvebu_pwm_probe(struct platform_device *pdev,
747 set = U32_MAX; 747 set = U32_MAX;
748 else 748 else
749 return -EINVAL; 749 return -EINVAL;
750 writel_relaxed(0, mvebu_gpioreg_blink_counter_select(mvchip)); 750 writel_relaxed(set, mvebu_gpioreg_blink_counter_select(mvchip));
751 751
752 mvpwm = devm_kzalloc(dev, sizeof(struct mvebu_pwm), GFP_KERNEL); 752 mvpwm = devm_kzalloc(dev, sizeof(struct mvebu_pwm), GFP_KERNEL);
753 if (!mvpwm) 753 if (!mvpwm)
@@ -768,6 +768,13 @@ static int mvebu_pwm_probe(struct platform_device *pdev,
768 mvpwm->chip.dev = dev; 768 mvpwm->chip.dev = dev;
769 mvpwm->chip.ops = &mvebu_pwm_ops; 769 mvpwm->chip.ops = &mvebu_pwm_ops;
770 mvpwm->chip.npwm = mvchip->chip.ngpio; 770 mvpwm->chip.npwm = mvchip->chip.ngpio;
771 /*
772 * There may already be some PWM allocated, so we can't force
773 * mvpwm->chip.base to a fixed point like mvchip->chip.base.
774 * So, we let pwmchip_add() do the numbering and take the next free
775 * region.
776 */
777 mvpwm->chip.base = -1;
771 778
772 spin_lock_init(&mvpwm->lock); 779 spin_lock_init(&mvpwm->lock);
773 780
@@ -845,7 +852,7 @@ static const struct of_device_id mvebu_gpio_of_match[] = {
845 .data = (void *) MVEBU_GPIO_SOC_VARIANT_ARMADAXP, 852 .data = (void *) MVEBU_GPIO_SOC_VARIANT_ARMADAXP,
846 }, 853 },
847 { 854 {
848 .compatible = "marvell,armada-370-xp-gpio", 855 .compatible = "marvell,armada-370-gpio",
849 .data = (void *) MVEBU_GPIO_SOC_VARIANT_ORION, 856 .data = (void *) MVEBU_GPIO_SOC_VARIANT_ORION,
850 }, 857 },
851 { 858 {
@@ -1121,7 +1128,7 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
1121 mvchip); 1128 mvchip);
1122 } 1129 }
1123 1130
1124 /* Armada 370/XP has simple PWM support for GPIO lines */ 1131 /* Some MVEBU SoCs have simple PWM support for GPIO lines */
1125 if (IS_ENABLED(CONFIG_PWM)) 1132 if (IS_ENABLED(CONFIG_PWM))
1126 return mvebu_pwm_probe(pdev, mvchip, id); 1133 return mvebu_pwm_probe(pdev, mvchip, id);
1127 1134
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
index 2185232da823..8fa5fcd00e9a 100644
--- a/drivers/gpio/gpiolib-acpi.c
+++ b/drivers/gpio/gpiolib-acpi.c
@@ -201,7 +201,7 @@ static acpi_status acpi_gpiochip_request_interrupt(struct acpi_resource *ares,
201 handler = acpi_gpio_irq_handler_evt; 201 handler = acpi_gpio_irq_handler_evt;
202 } 202 }
203 if (!handler) 203 if (!handler)
204 return AE_BAD_PARAMETER; 204 return AE_OK;
205 205
206 pin = acpi_gpiochip_pin_to_gpio_offset(chip->gpiodev, pin); 206 pin = acpi_gpiochip_pin_to_gpio_offset(chip->gpiodev, pin);
207 if (pin < 0) 207 if (pin < 0)
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 5db44139cef8..a42a1eea5714 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -708,7 +708,8 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p)
708 708
709 ge.timestamp = ktime_get_real_ns(); 709 ge.timestamp = ktime_get_real_ns();
710 710
711 if (le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES) { 711 if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE
712 && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) {
712 int level = gpiod_get_value_cansleep(le->desc); 713 int level = gpiod_get_value_cansleep(le->desc);
713 714
714 if (level) 715 if (level)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
index 1cf78f4dd339..1e8e1123ddf4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
@@ -693,6 +693,10 @@ int amdgpu_atombios_get_clock_info(struct amdgpu_device *adev)
693 DRM_INFO("Changing default dispclk from %dMhz to 600Mhz\n", 693 DRM_INFO("Changing default dispclk from %dMhz to 600Mhz\n",
694 adev->clock.default_dispclk / 100); 694 adev->clock.default_dispclk / 100);
695 adev->clock.default_dispclk = 60000; 695 adev->clock.default_dispclk = 60000;
696 } else if (adev->clock.default_dispclk <= 60000) {
697 DRM_INFO("Changing default dispclk from %dMhz to 625Mhz\n",
698 adev->clock.default_dispclk / 100);
699 adev->clock.default_dispclk = 62500;
696 } 700 }
697 adev->clock.dp_extclk = 701 adev->clock.dp_extclk =
698 le16_to_cpu(firmware_info->info_21.usUniphyDPModeExtClkFreq); 702 le16_to_cpu(firmware_info->info_21.usUniphyDPModeExtClkFreq);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index f2d705e6a75a..ab6b0d0febab 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -449,6 +449,7 @@ static const struct pci_device_id pciidlist[] = {
449 {0x1002, 0x6986, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12}, 449 {0x1002, 0x6986, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
450 {0x1002, 0x6987, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12}, 450 {0x1002, 0x6987, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
451 {0x1002, 0x6995, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12}, 451 {0x1002, 0x6995, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
452 {0x1002, 0x6997, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
452 {0x1002, 0x699F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12}, 453 {0x1002, 0x699F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
453 /* Vega 10 */ 454 /* Vega 10 */
454 {0x1002, 0x6860, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT}, 455 {0x1002, 0x6860, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10|AMD_EXP_HW_SUPPORT},
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
index 236d9950221b..c0d8c6ff6380 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
@@ -425,10 +425,15 @@ bool amdgpu_fbdev_robj_is_fb(struct amdgpu_device *adev, struct amdgpu_bo *robj)
425 425
426void amdgpu_fbdev_restore_mode(struct amdgpu_device *adev) 426void amdgpu_fbdev_restore_mode(struct amdgpu_device *adev)
427{ 427{
428 struct amdgpu_fbdev *afbdev = adev->mode_info.rfbdev; 428 struct amdgpu_fbdev *afbdev;
429 struct drm_fb_helper *fb_helper; 429 struct drm_fb_helper *fb_helper;
430 int ret; 430 int ret;
431 431
432 if (!adev)
433 return;
434
435 afbdev = adev->mode_info.rfbdev;
436
432 if (!afbdev) 437 if (!afbdev)
433 return; 438 return;
434 439
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 07ff3b1514f1..8ecf82c5fe74 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -634,7 +634,7 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job)
634 mutex_unlock(&id_mgr->lock); 634 mutex_unlock(&id_mgr->lock);
635 } 635 }
636 636
637 if (gds_switch_needed) { 637 if (ring->funcs->emit_gds_switch && gds_switch_needed) {
638 id->gds_base = job->gds_base; 638 id->gds_base = job->gds_base;
639 id->gds_size = job->gds_size; 639 id->gds_size = job->gds_size;
640 id->gws_base = job->gws_base; 640 id->gws_base = job->gws_base;
@@ -672,6 +672,7 @@ void amdgpu_vm_reset_id(struct amdgpu_device *adev, unsigned vmhub,
672 struct amdgpu_vm_id_manager *id_mgr = &adev->vm_manager.id_mgr[vmhub]; 672 struct amdgpu_vm_id_manager *id_mgr = &adev->vm_manager.id_mgr[vmhub];
673 struct amdgpu_vm_id *id = &id_mgr->ids[vmid]; 673 struct amdgpu_vm_id *id = &id_mgr->ids[vmid];
674 674
675 atomic64_set(&id->owner, 0);
675 id->gds_base = 0; 676 id->gds_base = 0;
676 id->gds_size = 0; 677 id->gds_size = 0;
677 id->gws_base = 0; 678 id->gws_base = 0;
@@ -681,6 +682,26 @@ void amdgpu_vm_reset_id(struct amdgpu_device *adev, unsigned vmhub,
681} 682}
682 683
683/** 684/**
685 * amdgpu_vm_reset_all_id - reset VMID to zero
686 *
687 * @adev: amdgpu device structure
688 *
689 * Reset VMID to force flush on next use
690 */
691void amdgpu_vm_reset_all_ids(struct amdgpu_device *adev)
692{
693 unsigned i, j;
694
695 for (i = 0; i < AMDGPU_MAX_VMHUBS; ++i) {
696 struct amdgpu_vm_id_manager *id_mgr =
697 &adev->vm_manager.id_mgr[i];
698
699 for (j = 1; j < id_mgr->num_ids; ++j)
700 amdgpu_vm_reset_id(adev, i, j);
701 }
702}
703
704/**
684 * amdgpu_vm_bo_find - find the bo_va for a specific vm & bo 705 * amdgpu_vm_bo_find - find the bo_va for a specific vm & bo
685 * 706 *
686 * @vm: requested vm 707 * @vm: requested vm
@@ -2270,7 +2291,6 @@ void amdgpu_vm_manager_init(struct amdgpu_device *adev)
2270 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) 2291 for (i = 0; i < AMDGPU_MAX_RINGS; ++i)
2271 adev->vm_manager.seqno[i] = 0; 2292 adev->vm_manager.seqno[i] = 0;
2272 2293
2273
2274 atomic_set(&adev->vm_manager.vm_pte_next_ring, 0); 2294 atomic_set(&adev->vm_manager.vm_pte_next_ring, 0);
2275 atomic64_set(&adev->vm_manager.client_counter, 0); 2295 atomic64_set(&adev->vm_manager.client_counter, 0);
2276 spin_lock_init(&adev->vm_manager.prt_lock); 2296 spin_lock_init(&adev->vm_manager.prt_lock);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
index d97e28b4bdc4..e1d951ece433 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
@@ -204,6 +204,7 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring,
204int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job); 204int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job);
205void amdgpu_vm_reset_id(struct amdgpu_device *adev, unsigned vmhub, 205void amdgpu_vm_reset_id(struct amdgpu_device *adev, unsigned vmhub,
206 unsigned vmid); 206 unsigned vmid);
207void amdgpu_vm_reset_all_ids(struct amdgpu_device *adev);
207int amdgpu_vm_update_directories(struct amdgpu_device *adev, 208int amdgpu_vm_update_directories(struct amdgpu_device *adev,
208 struct amdgpu_vm *vm); 209 struct amdgpu_vm *vm);
209int amdgpu_vm_clear_freed(struct amdgpu_device *adev, 210int amdgpu_vm_clear_freed(struct amdgpu_device *adev,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
index a4831fe0223b..a2c59a08b2bd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
@@ -220,9 +220,9 @@ static void amdgpu_vram_mgr_debug(struct ttm_mem_type_manager *man,
220} 220}
221 221
222const struct ttm_mem_type_manager_func amdgpu_vram_mgr_func = { 222const struct ttm_mem_type_manager_func amdgpu_vram_mgr_func = {
223 amdgpu_vram_mgr_init, 223 .init = amdgpu_vram_mgr_init,
224 amdgpu_vram_mgr_fini, 224 .takedown = amdgpu_vram_mgr_fini,
225 amdgpu_vram_mgr_new, 225 .get_node = amdgpu_vram_mgr_new,
226 amdgpu_vram_mgr_del, 226 .put_node = amdgpu_vram_mgr_del,
227 amdgpu_vram_mgr_debug 227 .debug = amdgpu_vram_mgr_debug
228}; 228};
diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c b/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c
index 8c9bc75a9c2d..8a0818b23ea4 100644
--- a/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c
+++ b/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c
@@ -165,7 +165,7 @@ void amdgpu_atombios_crtc_powergate(struct drm_crtc *crtc, int state)
165 struct drm_device *dev = crtc->dev; 165 struct drm_device *dev = crtc->dev;
166 struct amdgpu_device *adev = dev->dev_private; 166 struct amdgpu_device *adev = dev->dev_private;
167 int index = GetIndexIntoMasterTable(COMMAND, EnableDispPowerGating); 167 int index = GetIndexIntoMasterTable(COMMAND, EnableDispPowerGating);
168 ENABLE_DISP_POWER_GATING_PARAMETERS_V2_1 args; 168 ENABLE_DISP_POWER_GATING_PS_ALLOCATION args;
169 169
170 memset(&args, 0, sizeof(args)); 170 memset(&args, 0, sizeof(args));
171 171
@@ -178,7 +178,7 @@ void amdgpu_atombios_crtc_powergate(struct drm_crtc *crtc, int state)
178void amdgpu_atombios_crtc_powergate_init(struct amdgpu_device *adev) 178void amdgpu_atombios_crtc_powergate_init(struct amdgpu_device *adev)
179{ 179{
180 int index = GetIndexIntoMasterTable(COMMAND, EnableDispPowerGating); 180 int index = GetIndexIntoMasterTable(COMMAND, EnableDispPowerGating);
181 ENABLE_DISP_POWER_GATING_PARAMETERS_V2_1 args; 181 ENABLE_DISP_POWER_GATING_PS_ALLOCATION args;
182 182
183 memset(&args, 0, sizeof(args)); 183 memset(&args, 0, sizeof(args));
184 184
diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
index 6dc1410b380f..ec93714e4524 100644
--- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
+++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
@@ -906,6 +906,12 @@ static bool ci_dpm_vblank_too_short(struct amdgpu_device *adev)
906 u32 vblank_time = amdgpu_dpm_get_vblank_time(adev); 906 u32 vblank_time = amdgpu_dpm_get_vblank_time(adev);
907 u32 switch_limit = adev->mc.vram_type == AMDGPU_VRAM_TYPE_GDDR5 ? 450 : 300; 907 u32 switch_limit = adev->mc.vram_type == AMDGPU_VRAM_TYPE_GDDR5 ? 450 : 300;
908 908
909 /* disable mclk switching if the refresh is >120Hz, even if the
910 * blanking period would allow it
911 */
912 if (amdgpu_dpm_get_vrefresh(adev) > 120)
913 return true;
914
909 if (vblank_time < switch_limit) 915 if (vblank_time < switch_limit)
910 return true; 916 return true;
911 else 917 else
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index 0cdeb6a2e4a0..5dffa27afa45 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -1207,8 +1207,11 @@ static void dce_v10_0_program_watermarks(struct amdgpu_device *adev,
1207 u32 tmp, wm_mask, lb_vblank_lead_lines = 0; 1207 u32 tmp, wm_mask, lb_vblank_lead_lines = 0;
1208 1208
1209 if (amdgpu_crtc->base.enabled && num_heads && mode) { 1209 if (amdgpu_crtc->base.enabled && num_heads && mode) {
1210 active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock; 1210 active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
1211 line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535); 1211 (u32)mode->clock);
1212 line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
1213 (u32)mode->clock);
1214 line_time = min(line_time, (u32)65535);
1212 1215
1213 /* watermark for high clocks */ 1216 /* watermark for high clocks */
1214 if (adev->pm.dpm_enabled) { 1217 if (adev->pm.dpm_enabled) {
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index 773654a19749..47bbc87f96d2 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -1176,8 +1176,11 @@ static void dce_v11_0_program_watermarks(struct amdgpu_device *adev,
1176 u32 tmp, wm_mask, lb_vblank_lead_lines = 0; 1176 u32 tmp, wm_mask, lb_vblank_lead_lines = 0;
1177 1177
1178 if (amdgpu_crtc->base.enabled && num_heads && mode) { 1178 if (amdgpu_crtc->base.enabled && num_heads && mode) {
1179 active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock; 1179 active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
1180 line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535); 1180 (u32)mode->clock);
1181 line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
1182 (u32)mode->clock);
1183 line_time = min(line_time, (u32)65535);
1181 1184
1182 /* watermark for high clocks */ 1185 /* watermark for high clocks */
1183 if (adev->pm.dpm_enabled) { 1186 if (adev->pm.dpm_enabled) {
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
index 1f3552967ba3..d8c9a959493e 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
@@ -983,8 +983,11 @@ static void dce_v6_0_program_watermarks(struct amdgpu_device *adev,
983 fixed20_12 a, b, c; 983 fixed20_12 a, b, c;
984 984
985 if (amdgpu_crtc->base.enabled && num_heads && mode) { 985 if (amdgpu_crtc->base.enabled && num_heads && mode) {
986 active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock; 986 active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
987 line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535); 987 (u32)mode->clock);
988 line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
989 (u32)mode->clock);
990 line_time = min(line_time, (u32)65535);
988 priority_a_cnt = 0; 991 priority_a_cnt = 0;
989 priority_b_cnt = 0; 992 priority_b_cnt = 0;
990 993
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
index 3c558c170e5e..db30c6ba563a 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -1091,8 +1091,11 @@ static void dce_v8_0_program_watermarks(struct amdgpu_device *adev,
1091 u32 tmp, wm_mask, lb_vblank_lead_lines = 0; 1091 u32 tmp, wm_mask, lb_vblank_lead_lines = 0;
1092 1092
1093 if (amdgpu_crtc->base.enabled && num_heads && mode) { 1093 if (amdgpu_crtc->base.enabled && num_heads && mode) {
1094 active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock; 1094 active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
1095 line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535); 1095 (u32)mode->clock);
1096 line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
1097 (u32)mode->clock);
1098 line_time = min(line_time, (u32)65535);
1096 1099
1097 /* watermark for high clocks */ 1100 /* watermark for high clocks */
1098 if (adev->pm.dpm_enabled) { 1101 if (adev->pm.dpm_enabled) {
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index a572979f186c..d860939152df 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -950,10 +950,6 @@ static int gmc_v6_0_suspend(void *handle)
950{ 950{
951 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 951 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
952 952
953 if (adev->vm_manager.enabled) {
954 gmc_v6_0_vm_fini(adev);
955 adev->vm_manager.enabled = false;
956 }
957 gmc_v6_0_hw_fini(adev); 953 gmc_v6_0_hw_fini(adev);
958 954
959 return 0; 955 return 0;
@@ -968,16 +964,9 @@ static int gmc_v6_0_resume(void *handle)
968 if (r) 964 if (r)
969 return r; 965 return r;
970 966
971 if (!adev->vm_manager.enabled) { 967 amdgpu_vm_reset_all_ids(adev);
972 r = gmc_v6_0_vm_init(adev);
973 if (r) {
974 dev_err(adev->dev, "vm manager initialization failed (%d).\n", r);
975 return r;
976 }
977 adev->vm_manager.enabled = true;
978 }
979 968
980 return r; 969 return 0;
981} 970}
982 971
983static bool gmc_v6_0_is_idle(void *handle) 972static bool gmc_v6_0_is_idle(void *handle)
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index a9083a16a250..2750e5c23813 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -1117,10 +1117,6 @@ static int gmc_v7_0_suspend(void *handle)
1117{ 1117{
1118 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 1118 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1119 1119
1120 if (adev->vm_manager.enabled) {
1121 gmc_v7_0_vm_fini(adev);
1122 adev->vm_manager.enabled = false;
1123 }
1124 gmc_v7_0_hw_fini(adev); 1120 gmc_v7_0_hw_fini(adev);
1125 1121
1126 return 0; 1122 return 0;
@@ -1135,16 +1131,9 @@ static int gmc_v7_0_resume(void *handle)
1135 if (r) 1131 if (r)
1136 return r; 1132 return r;
1137 1133
1138 if (!adev->vm_manager.enabled) { 1134 amdgpu_vm_reset_all_ids(adev);
1139 r = gmc_v7_0_vm_init(adev);
1140 if (r) {
1141 dev_err(adev->dev, "vm manager initialization failed (%d).\n", r);
1142 return r;
1143 }
1144 adev->vm_manager.enabled = true;
1145 }
1146 1135
1147 return r; 1136 return 0;
1148} 1137}
1149 1138
1150static bool gmc_v7_0_is_idle(void *handle) 1139static bool gmc_v7_0_is_idle(void *handle)
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index 4ac99784160a..f56b4089ee9f 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -1209,10 +1209,6 @@ static int gmc_v8_0_suspend(void *handle)
1209{ 1209{
1210 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 1210 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1211 1211
1212 if (adev->vm_manager.enabled) {
1213 gmc_v8_0_vm_fini(adev);
1214 adev->vm_manager.enabled = false;
1215 }
1216 gmc_v8_0_hw_fini(adev); 1212 gmc_v8_0_hw_fini(adev);
1217 1213
1218 return 0; 1214 return 0;
@@ -1227,16 +1223,9 @@ static int gmc_v8_0_resume(void *handle)
1227 if (r) 1223 if (r)
1228 return r; 1224 return r;
1229 1225
1230 if (!adev->vm_manager.enabled) { 1226 amdgpu_vm_reset_all_ids(adev);
1231 r = gmc_v8_0_vm_init(adev);
1232 if (r) {
1233 dev_err(adev->dev, "vm manager initialization failed (%d).\n", r);
1234 return r;
1235 }
1236 adev->vm_manager.enabled = true;
1237 }
1238 1227
1239 return r; 1228 return 0;
1240} 1229}
1241 1230
1242static bool gmc_v8_0_is_idle(void *handle) 1231static bool gmc_v8_0_is_idle(void *handle)
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index dc1e1c1d6b24..f936332a069d 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -791,10 +791,6 @@ static int gmc_v9_0_suspend(void *handle)
791{ 791{
792 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 792 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
793 793
794 if (adev->vm_manager.enabled) {
795 gmc_v9_0_vm_fini(adev);
796 adev->vm_manager.enabled = false;
797 }
798 gmc_v9_0_hw_fini(adev); 794 gmc_v9_0_hw_fini(adev);
799 795
800 return 0; 796 return 0;
@@ -809,17 +805,9 @@ static int gmc_v9_0_resume(void *handle)
809 if (r) 805 if (r)
810 return r; 806 return r;
811 807
812 if (!adev->vm_manager.enabled) { 808 amdgpu_vm_reset_all_ids(adev);
813 r = gmc_v9_0_vm_init(adev);
814 if (r) {
815 dev_err(adev->dev,
816 "vm manager initialization failed (%d).\n", r);
817 return r;
818 }
819 adev->vm_manager.enabled = true;
820 }
821 809
822 return r; 810 return 0;
823} 811}
824 812
825static bool gmc_v9_0_is_idle(void *handle) 813static bool gmc_v9_0_is_idle(void *handle)
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
index fb0819359909..90332f55cfba 100644
--- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
@@ -77,13 +77,26 @@ static int vce_v3_0_set_clockgating_state(void *handle,
77static uint64_t vce_v3_0_ring_get_rptr(struct amdgpu_ring *ring) 77static uint64_t vce_v3_0_ring_get_rptr(struct amdgpu_ring *ring)
78{ 78{
79 struct amdgpu_device *adev = ring->adev; 79 struct amdgpu_device *adev = ring->adev;
80 u32 v;
81
82 mutex_lock(&adev->grbm_idx_mutex);
83 if (adev->vce.harvest_config == 0 ||
84 adev->vce.harvest_config == AMDGPU_VCE_HARVEST_VCE1)
85 WREG32(mmGRBM_GFX_INDEX, GET_VCE_INSTANCE(0));
86 else if (adev->vce.harvest_config == AMDGPU_VCE_HARVEST_VCE0)
87 WREG32(mmGRBM_GFX_INDEX, GET_VCE_INSTANCE(1));
80 88
81 if (ring == &adev->vce.ring[0]) 89 if (ring == &adev->vce.ring[0])
82 return RREG32(mmVCE_RB_RPTR); 90 v = RREG32(mmVCE_RB_RPTR);
83 else if (ring == &adev->vce.ring[1]) 91 else if (ring == &adev->vce.ring[1])
84 return RREG32(mmVCE_RB_RPTR2); 92 v = RREG32(mmVCE_RB_RPTR2);
85 else 93 else
86 return RREG32(mmVCE_RB_RPTR3); 94 v = RREG32(mmVCE_RB_RPTR3);
95
96 WREG32(mmGRBM_GFX_INDEX, mmGRBM_GFX_INDEX_DEFAULT);
97 mutex_unlock(&adev->grbm_idx_mutex);
98
99 return v;
87} 100}
88 101
89/** 102/**
@@ -96,13 +109,26 @@ static uint64_t vce_v3_0_ring_get_rptr(struct amdgpu_ring *ring)
96static uint64_t vce_v3_0_ring_get_wptr(struct amdgpu_ring *ring) 109static uint64_t vce_v3_0_ring_get_wptr(struct amdgpu_ring *ring)
97{ 110{
98 struct amdgpu_device *adev = ring->adev; 111 struct amdgpu_device *adev = ring->adev;
112 u32 v;
113
114 mutex_lock(&adev->grbm_idx_mutex);
115 if (adev->vce.harvest_config == 0 ||
116 adev->vce.harvest_config == AMDGPU_VCE_HARVEST_VCE1)
117 WREG32(mmGRBM_GFX_INDEX, GET_VCE_INSTANCE(0));
118 else if (adev->vce.harvest_config == AMDGPU_VCE_HARVEST_VCE0)
119 WREG32(mmGRBM_GFX_INDEX, GET_VCE_INSTANCE(1));
99 120
100 if (ring == &adev->vce.ring[0]) 121 if (ring == &adev->vce.ring[0])
101 return RREG32(mmVCE_RB_WPTR); 122 v = RREG32(mmVCE_RB_WPTR);
102 else if (ring == &adev->vce.ring[1]) 123 else if (ring == &adev->vce.ring[1])
103 return RREG32(mmVCE_RB_WPTR2); 124 v = RREG32(mmVCE_RB_WPTR2);
104 else 125 else
105 return RREG32(mmVCE_RB_WPTR3); 126 v = RREG32(mmVCE_RB_WPTR3);
127
128 WREG32(mmGRBM_GFX_INDEX, mmGRBM_GFX_INDEX_DEFAULT);
129 mutex_unlock(&adev->grbm_idx_mutex);
130
131 return v;
106} 132}
107 133
108/** 134/**
@@ -116,12 +142,22 @@ static void vce_v3_0_ring_set_wptr(struct amdgpu_ring *ring)
116{ 142{
117 struct amdgpu_device *adev = ring->adev; 143 struct amdgpu_device *adev = ring->adev;
118 144
145 mutex_lock(&adev->grbm_idx_mutex);
146 if (adev->vce.harvest_config == 0 ||
147 adev->vce.harvest_config == AMDGPU_VCE_HARVEST_VCE1)
148 WREG32(mmGRBM_GFX_INDEX, GET_VCE_INSTANCE(0));
149 else if (adev->vce.harvest_config == AMDGPU_VCE_HARVEST_VCE0)
150 WREG32(mmGRBM_GFX_INDEX, GET_VCE_INSTANCE(1));
151
119 if (ring == &adev->vce.ring[0]) 152 if (ring == &adev->vce.ring[0])
120 WREG32(mmVCE_RB_WPTR, lower_32_bits(ring->wptr)); 153 WREG32(mmVCE_RB_WPTR, lower_32_bits(ring->wptr));
121 else if (ring == &adev->vce.ring[1]) 154 else if (ring == &adev->vce.ring[1])
122 WREG32(mmVCE_RB_WPTR2, lower_32_bits(ring->wptr)); 155 WREG32(mmVCE_RB_WPTR2, lower_32_bits(ring->wptr));
123 else 156 else
124 WREG32(mmVCE_RB_WPTR3, lower_32_bits(ring->wptr)); 157 WREG32(mmVCE_RB_WPTR3, lower_32_bits(ring->wptr));
158
159 WREG32(mmGRBM_GFX_INDEX, mmGRBM_GFX_INDEX_DEFAULT);
160 mutex_unlock(&adev->grbm_idx_mutex);
125} 161}
126 162
127static void vce_v3_0_override_vce_clock_gating(struct amdgpu_device *adev, bool override) 163static void vce_v3_0_override_vce_clock_gating(struct amdgpu_device *adev, bool override)
@@ -231,33 +267,38 @@ static int vce_v3_0_start(struct amdgpu_device *adev)
231 struct amdgpu_ring *ring; 267 struct amdgpu_ring *ring;
232 int idx, r; 268 int idx, r;
233 269
234 ring = &adev->vce.ring[0];
235 WREG32(mmVCE_RB_RPTR, lower_32_bits(ring->wptr));
236 WREG32(mmVCE_RB_WPTR, lower_32_bits(ring->wptr));
237 WREG32(mmVCE_RB_BASE_LO, ring->gpu_addr);
238 WREG32(mmVCE_RB_BASE_HI, upper_32_bits(ring->gpu_addr));
239 WREG32(mmVCE_RB_SIZE, ring->ring_size / 4);
240
241 ring = &adev->vce.ring[1];
242 WREG32(mmVCE_RB_RPTR2, lower_32_bits(ring->wptr));
243 WREG32(mmVCE_RB_WPTR2, lower_32_bits(ring->wptr));
244 WREG32(mmVCE_RB_BASE_LO2, ring->gpu_addr);
245 WREG32(mmVCE_RB_BASE_HI2, upper_32_bits(ring->gpu_addr));
246 WREG32(mmVCE_RB_SIZE2, ring->ring_size / 4);
247
248 ring = &adev->vce.ring[2];
249 WREG32(mmVCE_RB_RPTR3, lower_32_bits(ring->wptr));
250 WREG32(mmVCE_RB_WPTR3, lower_32_bits(ring->wptr));
251 WREG32(mmVCE_RB_BASE_LO3, ring->gpu_addr);
252 WREG32(mmVCE_RB_BASE_HI3, upper_32_bits(ring->gpu_addr));
253 WREG32(mmVCE_RB_SIZE3, ring->ring_size / 4);
254
255 mutex_lock(&adev->grbm_idx_mutex); 270 mutex_lock(&adev->grbm_idx_mutex);
256 for (idx = 0; idx < 2; ++idx) { 271 for (idx = 0; idx < 2; ++idx) {
257 if (adev->vce.harvest_config & (1 << idx)) 272 if (adev->vce.harvest_config & (1 << idx))
258 continue; 273 continue;
259 274
260 WREG32(mmGRBM_GFX_INDEX, GET_VCE_INSTANCE(idx)); 275 WREG32(mmGRBM_GFX_INDEX, GET_VCE_INSTANCE(idx));
276
277 /* Program instance 0 reg space for two instances or instance 0 case
278 program instance 1 reg space for only instance 1 available case */
279 if (idx != 1 || adev->vce.harvest_config == AMDGPU_VCE_HARVEST_VCE0) {
280 ring = &adev->vce.ring[0];
281 WREG32(mmVCE_RB_RPTR, lower_32_bits(ring->wptr));
282 WREG32(mmVCE_RB_WPTR, lower_32_bits(ring->wptr));
283 WREG32(mmVCE_RB_BASE_LO, ring->gpu_addr);
284 WREG32(mmVCE_RB_BASE_HI, upper_32_bits(ring->gpu_addr));
285 WREG32(mmVCE_RB_SIZE, ring->ring_size / 4);
286
287 ring = &adev->vce.ring[1];
288 WREG32(mmVCE_RB_RPTR2, lower_32_bits(ring->wptr));
289 WREG32(mmVCE_RB_WPTR2, lower_32_bits(ring->wptr));
290 WREG32(mmVCE_RB_BASE_LO2, ring->gpu_addr);
291 WREG32(mmVCE_RB_BASE_HI2, upper_32_bits(ring->gpu_addr));
292 WREG32(mmVCE_RB_SIZE2, ring->ring_size / 4);
293
294 ring = &adev->vce.ring[2];
295 WREG32(mmVCE_RB_RPTR3, lower_32_bits(ring->wptr));
296 WREG32(mmVCE_RB_WPTR3, lower_32_bits(ring->wptr));
297 WREG32(mmVCE_RB_BASE_LO3, ring->gpu_addr);
298 WREG32(mmVCE_RB_BASE_HI3, upper_32_bits(ring->gpu_addr));
299 WREG32(mmVCE_RB_SIZE3, ring->ring_size / 4);
300 }
301
261 vce_v3_0_mc_resume(adev, idx); 302 vce_v3_0_mc_resume(adev, idx);
262 WREG32_FIELD(VCE_STATUS, JOB_BUSY, 1); 303 WREG32_FIELD(VCE_STATUS, JOB_BUSY, 1);
263 304
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
index a74a3db3056c..102eb6d029fa 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
@@ -2655,6 +2655,28 @@ static int smu7_get_power_state_size(struct pp_hwmgr *hwmgr)
2655 return sizeof(struct smu7_power_state); 2655 return sizeof(struct smu7_power_state);
2656} 2656}
2657 2657
2658static int smu7_vblank_too_short(struct pp_hwmgr *hwmgr,
2659 uint32_t vblank_time_us)
2660{
2661 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
2662 uint32_t switch_limit_us;
2663
2664 switch (hwmgr->chip_id) {
2665 case CHIP_POLARIS10:
2666 case CHIP_POLARIS11:
2667 case CHIP_POLARIS12:
2668 switch_limit_us = data->is_memory_gddr5 ? 190 : 150;
2669 break;
2670 default:
2671 switch_limit_us = data->is_memory_gddr5 ? 450 : 150;
2672 break;
2673 }
2674
2675 if (vblank_time_us < switch_limit_us)
2676 return true;
2677 else
2678 return false;
2679}
2658 2680
2659static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr, 2681static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr,
2660 struct pp_power_state *request_ps, 2682 struct pp_power_state *request_ps,
@@ -2669,6 +2691,7 @@ static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr,
2669 bool disable_mclk_switching; 2691 bool disable_mclk_switching;
2670 bool disable_mclk_switching_for_frame_lock; 2692 bool disable_mclk_switching_for_frame_lock;
2671 struct cgs_display_info info = {0}; 2693 struct cgs_display_info info = {0};
2694 struct cgs_mode_info mode_info = {0};
2672 const struct phm_clock_and_voltage_limits *max_limits; 2695 const struct phm_clock_and_voltage_limits *max_limits;
2673 uint32_t i; 2696 uint32_t i;
2674 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); 2697 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
@@ -2677,6 +2700,7 @@ static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr,
2677 int32_t count; 2700 int32_t count;
2678 int32_t stable_pstate_sclk = 0, stable_pstate_mclk = 0; 2701 int32_t stable_pstate_sclk = 0, stable_pstate_mclk = 0;
2679 2702
2703 info.mode_info = &mode_info;
2680 data->battery_state = (PP_StateUILabel_Battery == 2704 data->battery_state = (PP_StateUILabel_Battery ==
2681 request_ps->classification.ui_label); 2705 request_ps->classification.ui_label);
2682 2706
@@ -2703,8 +2727,6 @@ static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr,
2703 2727
2704 cgs_get_active_displays_info(hwmgr->device, &info); 2728 cgs_get_active_displays_info(hwmgr->device, &info);
2705 2729
2706 /*TO DO result = PHM_CheckVBlankTime(hwmgr, &vblankTooShort);*/
2707
2708 minimum_clocks.engineClock = hwmgr->display_config.min_core_set_clock; 2730 minimum_clocks.engineClock = hwmgr->display_config.min_core_set_clock;
2709 minimum_clocks.memoryClock = hwmgr->display_config.min_mem_set_clock; 2731 minimum_clocks.memoryClock = hwmgr->display_config.min_mem_set_clock;
2710 2732
@@ -2769,8 +2791,10 @@ static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr,
2769 PHM_PlatformCaps_DisableMclkSwitchingForFrameLock); 2791 PHM_PlatformCaps_DisableMclkSwitchingForFrameLock);
2770 2792
2771 2793
2772 disable_mclk_switching = (1 < info.display_count) || 2794 disable_mclk_switching = ((1 < info.display_count) ||
2773 disable_mclk_switching_for_frame_lock; 2795 disable_mclk_switching_for_frame_lock ||
2796 smu7_vblank_too_short(hwmgr, mode_info.vblank_time_us) ||
2797 (mode_info.refresh_rate > 120));
2774 2798
2775 sclk = smu7_ps->performance_levels[0].engine_clock; 2799 sclk = smu7_ps->performance_levels[0].engine_clock;
2776 mclk = smu7_ps->performance_levels[0].memory_clock; 2800 mclk = smu7_ps->performance_levels[0].memory_clock;
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
index ad30f5d3a10d..2614af2f553f 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
@@ -4186,7 +4186,7 @@ static int vega10_force_clock_level(struct pp_hwmgr *hwmgr,
4186 enum pp_clock_type type, uint32_t mask) 4186 enum pp_clock_type type, uint32_t mask)
4187{ 4187{
4188 struct vega10_hwmgr *data = (struct vega10_hwmgr *)(hwmgr->backend); 4188 struct vega10_hwmgr *data = (struct vega10_hwmgr *)(hwmgr->backend);
4189 uint32_t i; 4189 int i;
4190 4190
4191 if (hwmgr->dpm_level != AMD_DPM_FORCED_LEVEL_MANUAL) 4191 if (hwmgr->dpm_level != AMD_DPM_FORCED_LEVEL_MANUAL)
4192 return -EINVAL; 4192 return -EINVAL;
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c
index d5f53d04fa08..83e40fe51b62 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c
@@ -709,17 +709,17 @@ static int tf_vega10_thermal_disable_alert(struct pp_hwmgr *hwmgr,
709 709
710static struct phm_master_table_item 710static struct phm_master_table_item
711vega10_thermal_start_thermal_controller_master_list[] = { 711vega10_thermal_start_thermal_controller_master_list[] = {
712 {NULL, tf_vega10_thermal_initialize}, 712 { .tableFunction = tf_vega10_thermal_initialize },
713 {NULL, tf_vega10_thermal_set_temperature_range}, 713 { .tableFunction = tf_vega10_thermal_set_temperature_range },
714 {NULL, tf_vega10_thermal_enable_alert}, 714 { .tableFunction = tf_vega10_thermal_enable_alert },
715/* We should restrict performance levels to low before we halt the SMC. 715/* We should restrict performance levels to low before we halt the SMC.
716 * On the other hand we are still in boot state when we do this 716 * On the other hand we are still in boot state when we do this
717 * so it would be pointless. 717 * so it would be pointless.
718 * If this assumption changes we have to revisit this table. 718 * If this assumption changes we have to revisit this table.
719 */ 719 */
720 {NULL, tf_vega10_thermal_setup_fan_table}, 720 { .tableFunction = tf_vega10_thermal_setup_fan_table },
721 {NULL, tf_vega10_thermal_start_smc_fan_control}, 721 { .tableFunction = tf_vega10_thermal_start_smc_fan_control },
722 {NULL, NULL} 722 { }
723}; 723};
724 724
725static struct phm_master_table_header 725static struct phm_master_table_header
@@ -731,10 +731,10 @@ vega10_thermal_start_thermal_controller_master = {
731 731
732static struct phm_master_table_item 732static struct phm_master_table_item
733vega10_thermal_set_temperature_range_master_list[] = { 733vega10_thermal_set_temperature_range_master_list[] = {
734 {NULL, tf_vega10_thermal_disable_alert}, 734 { .tableFunction = tf_vega10_thermal_disable_alert },
735 {NULL, tf_vega10_thermal_set_temperature_range}, 735 { .tableFunction = tf_vega10_thermal_set_temperature_range },
736 {NULL, tf_vega10_thermal_enable_alert}, 736 { .tableFunction = tf_vega10_thermal_enable_alert },
737 {NULL, NULL} 737 { }
738}; 738};
739 739
740struct phm_master_table_header 740struct phm_master_table_header
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c b/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
index cf92ebfe6ab7..67469c26bae8 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
@@ -11,6 +11,7 @@
11#include <sound/hdmi-codec.h> 11#include <sound/hdmi-codec.h>
12#include <sound/pcm.h> 12#include <sound/pcm.h>
13#include <sound/soc.h> 13#include <sound/soc.h>
14#include <linux/of_graph.h>
14 15
15#include "adv7511.h" 16#include "adv7511.h"
16 17
@@ -182,10 +183,31 @@ static void audio_shutdown(struct device *dev, void *data)
182{ 183{
183} 184}
184 185
186static int adv7511_hdmi_i2s_get_dai_id(struct snd_soc_component *component,
187 struct device_node *endpoint)
188{
189 struct of_endpoint of_ep;
190 int ret;
191
192 ret = of_graph_parse_endpoint(endpoint, &of_ep);
193 if (ret < 0)
194 return ret;
195
196 /*
197 * HDMI sound should be located as reg = <2>
198 * Then, it is sound port 0
199 */
200 if (of_ep.port == 2)
201 return 0;
202
203 return -EINVAL;
204}
205
185static const struct hdmi_codec_ops adv7511_codec_ops = { 206static const struct hdmi_codec_ops adv7511_codec_ops = {
186 .hw_params = adv7511_hdmi_hw_params, 207 .hw_params = adv7511_hdmi_hw_params,
187 .audio_shutdown = audio_shutdown, 208 .audio_shutdown = audio_shutdown,
188 .audio_startup = audio_startup, 209 .audio_startup = audio_startup,
210 .get_dai_id = adv7511_hdmi_i2s_get_dai_id,
189}; 211};
190 212
191static struct hdmi_codec_pdata codec_data = { 213static struct hdmi_codec_pdata codec_data = {
diff --git a/drivers/gpu/drm/bridge/synopsys/Kconfig b/drivers/gpu/drm/bridge/synopsys/Kconfig
index 40d2827a6d19..53e78d092d18 100644
--- a/drivers/gpu/drm/bridge/synopsys/Kconfig
+++ b/drivers/gpu/drm/bridge/synopsys/Kconfig
@@ -1,6 +1,7 @@
1config DRM_DW_HDMI 1config DRM_DW_HDMI
2 tristate 2 tristate
3 select DRM_KMS_HELPER 3 select DRM_KMS_HELPER
4 select REGMAP_MMIO
4 5
5config DRM_DW_HDMI_AHB_AUDIO 6config DRM_DW_HDMI_AHB_AUDIO
6 tristate "Synopsys Designware AHB Audio interface" 7 tristate "Synopsys Designware AHB Audio interface"
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
index aaf287d2e91d..b2cf59f54c88 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
@@ -82,9 +82,30 @@ static void dw_hdmi_i2s_audio_shutdown(struct device *dev, void *data)
82 hdmi_write(audio, HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0); 82 hdmi_write(audio, HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0);
83} 83}
84 84
85static int dw_hdmi_i2s_get_dai_id(struct snd_soc_component *component,
86 struct device_node *endpoint)
87{
88 struct of_endpoint of_ep;
89 int ret;
90
91 ret = of_graph_parse_endpoint(endpoint, &of_ep);
92 if (ret < 0)
93 return ret;
94
95 /*
96 * HDMI sound should be located as reg = <2>
97 * Then, it is sound port 0
98 */
99 if (of_ep.port == 2)
100 return 0;
101
102 return -EINVAL;
103}
104
85static struct hdmi_codec_ops dw_hdmi_i2s_ops = { 105static struct hdmi_codec_ops dw_hdmi_i2s_ops = {
86 .hw_params = dw_hdmi_i2s_hw_params, 106 .hw_params = dw_hdmi_i2s_hw_params,
87 .audio_shutdown = dw_hdmi_i2s_audio_shutdown, 107 .audio_shutdown = dw_hdmi_i2s_audio_shutdown,
108 .get_dai_id = dw_hdmi_i2s_get_dai_id,
88}; 109};
89 110
90static int snd_dw_hdmi_probe(struct platform_device *pdev) 111static int snd_dw_hdmi_probe(struct platform_device *pdev)
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 8be9719284b0..aa885a614e27 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -508,6 +508,8 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
508 bool has_connectors = 508 bool has_connectors =
509 !!new_crtc_state->connector_mask; 509 !!new_crtc_state->connector_mask;
510 510
511 WARN_ON(!drm_modeset_is_locked(&crtc->mutex));
512
511 if (!drm_mode_equal(&old_crtc_state->mode, &new_crtc_state->mode)) { 513 if (!drm_mode_equal(&old_crtc_state->mode, &new_crtc_state->mode)) {
512 DRM_DEBUG_ATOMIC("[CRTC:%d:%s] mode changed\n", 514 DRM_DEBUG_ATOMIC("[CRTC:%d:%s] mode changed\n",
513 crtc->base.id, crtc->name); 515 crtc->base.id, crtc->name);
@@ -551,6 +553,8 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
551 for_each_oldnew_connector_in_state(state, connector, old_connector_state, new_connector_state, i) { 553 for_each_oldnew_connector_in_state(state, connector, old_connector_state, new_connector_state, i) {
552 const struct drm_connector_helper_funcs *funcs = connector->helper_private; 554 const struct drm_connector_helper_funcs *funcs = connector->helper_private;
553 555
556 WARN_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));
557
554 /* 558 /*
555 * This only sets crtc->connectors_changed for routing changes, 559 * This only sets crtc->connectors_changed for routing changes,
556 * drivers must set crtc->connectors_changed themselves when 560 * drivers must set crtc->connectors_changed themselves when
@@ -650,6 +654,8 @@ drm_atomic_helper_check_planes(struct drm_device *dev,
650 for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, i) { 654 for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, i) {
651 const struct drm_plane_helper_funcs *funcs; 655 const struct drm_plane_helper_funcs *funcs;
652 656
657 WARN_ON(!drm_modeset_is_locked(&plane->mutex));
658
653 funcs = plane->helper_private; 659 funcs = plane->helper_private;
654 660
655 drm_atomic_helper_plane_changed(state, old_plane_state, new_plane_state, plane); 661 drm_atomic_helper_plane_changed(state, old_plane_state, new_plane_state, plane);
@@ -2663,7 +2669,12 @@ int drm_atomic_helper_resume(struct drm_device *dev,
2663 2669
2664 drm_modeset_acquire_init(&ctx, 0); 2670 drm_modeset_acquire_init(&ctx, 0);
2665 while (1) { 2671 while (1) {
2672 err = drm_modeset_lock_all_ctx(dev, &ctx);
2673 if (err)
2674 goto out;
2675
2666 err = drm_atomic_helper_commit_duplicated_state(state, &ctx); 2676 err = drm_atomic_helper_commit_duplicated_state(state, &ctx);
2677out:
2667 if (err != -EDEADLK) 2678 if (err != -EDEADLK)
2668 break; 2679 break;
2669 2680
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 9f847615ac74..48ca2457df8c 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -1229,21 +1229,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
1229 if (!connector) 1229 if (!connector)
1230 return -ENOENT; 1230 return -ENOENT;
1231 1231
1232 drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
1233 encoder = drm_connector_get_encoder(connector);
1234 if (encoder)
1235 out_resp->encoder_id = encoder->base.id;
1236 else
1237 out_resp->encoder_id = 0;
1238
1239 ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
1240 (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
1241 (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
1242 &out_resp->count_props);
1243 drm_modeset_unlock(&dev->mode_config.connection_mutex);
1244 if (ret)
1245 goto out_unref;
1246
1247 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) 1232 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
1248 if (connector->encoder_ids[i] != 0) 1233 if (connector->encoder_ids[i] != 0)
1249 encoders_count++; 1234 encoders_count++;
@@ -1256,7 +1241,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
1256 if (put_user(connector->encoder_ids[i], 1241 if (put_user(connector->encoder_ids[i],
1257 encoder_ptr + copied)) { 1242 encoder_ptr + copied)) {
1258 ret = -EFAULT; 1243 ret = -EFAULT;
1259 goto out_unref; 1244 goto out;
1260 } 1245 }
1261 copied++; 1246 copied++;
1262 } 1247 }
@@ -1300,15 +1285,32 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
1300 if (copy_to_user(mode_ptr + copied, 1285 if (copy_to_user(mode_ptr + copied,
1301 &u_mode, sizeof(u_mode))) { 1286 &u_mode, sizeof(u_mode))) {
1302 ret = -EFAULT; 1287 ret = -EFAULT;
1288 mutex_unlock(&dev->mode_config.mutex);
1289
1303 goto out; 1290 goto out;
1304 } 1291 }
1305 copied++; 1292 copied++;
1306 } 1293 }
1307 } 1294 }
1308 out_resp->count_modes = mode_count; 1295 out_resp->count_modes = mode_count;
1309out:
1310 mutex_unlock(&dev->mode_config.mutex); 1296 mutex_unlock(&dev->mode_config.mutex);
1311out_unref: 1297
1298 drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
1299 encoder = drm_connector_get_encoder(connector);
1300 if (encoder)
1301 out_resp->encoder_id = encoder->base.id;
1302 else
1303 out_resp->encoder_id = 0;
1304
1305 /* Only grab properties after probing, to make sure EDID and other
1306 * properties reflect the latest status. */
1307 ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
1308 (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
1309 (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
1310 &out_resp->count_props);
1311 drm_modeset_unlock(&dev->mode_config.connection_mutex);
1312
1313out:
1312 drm_connector_put(connector); 1314 drm_connector_put(connector);
1313 1315
1314 return ret; 1316 return ret;
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
index 3e5f52110ea1..213fb837e1c4 100644
--- a/drivers/gpu/drm/drm_dp_helper.c
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -1208,3 +1208,86 @@ int drm_dp_stop_crc(struct drm_dp_aux *aux)
1208 return 0; 1208 return 0;
1209} 1209}
1210EXPORT_SYMBOL(drm_dp_stop_crc); 1210EXPORT_SYMBOL(drm_dp_stop_crc);
1211
1212struct dpcd_quirk {
1213 u8 oui[3];
1214 bool is_branch;
1215 u32 quirks;
1216};
1217
1218#define OUI(first, second, third) { (first), (second), (third) }
1219
1220static const struct dpcd_quirk dpcd_quirk_list[] = {
1221 /* Analogix 7737 needs reduced M and N at HBR2 link rates */
1222 { OUI(0x00, 0x22, 0xb9), true, BIT(DP_DPCD_QUIRK_LIMITED_M_N) },
1223};
1224
1225#undef OUI
1226
1227/*
1228 * Get a bit mask of DPCD quirks for the sink/branch device identified by
1229 * ident. The quirk data is shared but it's up to the drivers to act on the
1230 * data.
1231 *
1232 * For now, only the OUI (first three bytes) is used, but this may be extended
1233 * to device identification string and hardware/firmware revisions later.
1234 */
1235static u32
1236drm_dp_get_quirks(const struct drm_dp_dpcd_ident *ident, bool is_branch)
1237{
1238 const struct dpcd_quirk *quirk;
1239 u32 quirks = 0;
1240 int i;
1241
1242 for (i = 0; i < ARRAY_SIZE(dpcd_quirk_list); i++) {
1243 quirk = &dpcd_quirk_list[i];
1244
1245 if (quirk->is_branch != is_branch)
1246 continue;
1247
1248 if (memcmp(quirk->oui, ident->oui, sizeof(ident->oui)) != 0)
1249 continue;
1250
1251 quirks |= quirk->quirks;
1252 }
1253
1254 return quirks;
1255}
1256
1257/**
1258 * drm_dp_read_desc - read sink/branch descriptor from DPCD
1259 * @aux: DisplayPort AUX channel
1260 * @desc: Device decriptor to fill from DPCD
1261 * @is_branch: true for branch devices, false for sink devices
1262 *
1263 * Read DPCD 0x400 (sink) or 0x500 (branch) into @desc. Also debug log the
1264 * identification.
1265 *
1266 * Returns 0 on success or a negative error code on failure.
1267 */
1268int drm_dp_read_desc(struct drm_dp_aux *aux, struct drm_dp_desc *desc,
1269 bool is_branch)
1270{
1271 struct drm_dp_dpcd_ident *ident = &desc->ident;
1272 unsigned int offset = is_branch ? DP_BRANCH_OUI : DP_SINK_OUI;
1273 int ret, dev_id_len;
1274
1275 ret = drm_dp_dpcd_read(aux, offset, ident, sizeof(*ident));
1276 if (ret < 0)
1277 return ret;
1278
1279 desc->quirks = drm_dp_get_quirks(ident, is_branch);
1280
1281 dev_id_len = strnlen(ident->device_id, sizeof(ident->device_id));
1282
1283 DRM_DEBUG_KMS("DP %s: OUI %*phD dev-ID %*pE HW-rev %d.%d SW-rev %d.%d quirks 0x%04x\n",
1284 is_branch ? "branch" : "sink",
1285 (int)sizeof(ident->oui), ident->oui,
1286 dev_id_len, ident->device_id,
1287 ident->hw_rev >> 4, ident->hw_rev & 0xf,
1288 ident->sw_major_rev, ident->sw_minor_rev,
1289 desc->quirks);
1290
1291 return 0;
1292}
1293EXPORT_SYMBOL(drm_dp_read_desc);
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index b5c6bb46a425..37b8ad3e30d8 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -358,7 +358,12 @@ EXPORT_SYMBOL(drm_put_dev);
358void drm_unplug_dev(struct drm_device *dev) 358void drm_unplug_dev(struct drm_device *dev)
359{ 359{
360 /* for a USB device */ 360 /* for a USB device */
361 drm_dev_unregister(dev); 361 if (drm_core_check_feature(dev, DRIVER_MODESET))
362 drm_modeset_unregister_all(dev);
363
364 drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
365 drm_minor_unregister(dev, DRM_MINOR_RENDER);
366 drm_minor_unregister(dev, DRM_MINOR_CONTROL);
362 367
363 mutex_lock(&drm_global_mutex); 368 mutex_lock(&drm_global_mutex);
364 369
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index fedd4d60d9cd..5dc8c4350602 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -948,8 +948,6 @@ retry:
948 } 948 }
949 949
950out: 950out:
951 if (ret && crtc->funcs->page_flip_target)
952 drm_crtc_vblank_put(crtc);
953 if (fb) 951 if (fb)
954 drm_framebuffer_put(fb); 952 drm_framebuffer_put(fb);
955 if (crtc->primary->old_fb) 953 if (crtc->primary->old_fb)
@@ -964,5 +962,8 @@ out:
964 drm_modeset_drop_locks(&ctx); 962 drm_modeset_drop_locks(&ctx);
965 drm_modeset_acquire_fini(&ctx); 963 drm_modeset_acquire_fini(&ctx);
966 964
965 if (ret && crtc->funcs->page_flip_target)
966 drm_crtc_vblank_put(crtc);
967
967 return ret; 968 return ret;
968} 969}
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.h b/drivers/gpu/drm/etnaviv/etnaviv_gem.h
index c4a091e87426..e437fba1209d 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.h
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.h
@@ -106,9 +106,10 @@ struct etnaviv_gem_submit {
106 struct etnaviv_gpu *gpu; 106 struct etnaviv_gpu *gpu;
107 struct ww_acquire_ctx ticket; 107 struct ww_acquire_ctx ticket;
108 struct dma_fence *fence; 108 struct dma_fence *fence;
109 u32 flags;
109 unsigned int nr_bos; 110 unsigned int nr_bos;
110 struct etnaviv_gem_submit_bo bos[0]; 111 struct etnaviv_gem_submit_bo bos[0];
111 u32 flags; 112 /* No new members here, the previous one is variable-length! */
112}; 113};
113 114
114int etnaviv_gem_wait_bo(struct etnaviv_gpu *gpu, struct drm_gem_object *obj, 115int etnaviv_gem_wait_bo(struct etnaviv_gpu *gpu, struct drm_gem_object *obj,
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
index de80ee1b71df..1013765274da 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
@@ -172,7 +172,7 @@ static int submit_fence_sync(const struct etnaviv_gem_submit *submit)
172 for (i = 0; i < submit->nr_bos; i++) { 172 for (i = 0; i < submit->nr_bos; i++) {
173 struct etnaviv_gem_object *etnaviv_obj = submit->bos[i].obj; 173 struct etnaviv_gem_object *etnaviv_obj = submit->bos[i].obj;
174 bool write = submit->bos[i].flags & ETNA_SUBMIT_BO_WRITE; 174 bool write = submit->bos[i].flags & ETNA_SUBMIT_BO_WRITE;
175 bool explicit = !(submit->flags & ETNA_SUBMIT_NO_IMPLICIT); 175 bool explicit = !!(submit->flags & ETNA_SUBMIT_NO_IMPLICIT);
176 176
177 ret = etnaviv_gpu_fence_sync_obj(etnaviv_obj, context, write, 177 ret = etnaviv_gpu_fence_sync_obj(etnaviv_obj, context, write,
178 explicit); 178 explicit);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 09d3c4c3c858..50294a7bd29d 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -82,14 +82,9 @@ err_file_priv_free:
82 return ret; 82 return ret;
83} 83}
84 84
85static void exynos_drm_preclose(struct drm_device *dev,
86 struct drm_file *file)
87{
88 exynos_drm_subdrv_close(dev, file);
89}
90
91static void exynos_drm_postclose(struct drm_device *dev, struct drm_file *file) 85static void exynos_drm_postclose(struct drm_device *dev, struct drm_file *file)
92{ 86{
87 exynos_drm_subdrv_close(dev, file);
93 kfree(file->driver_priv); 88 kfree(file->driver_priv);
94 file->driver_priv = NULL; 89 file->driver_priv = NULL;
95} 90}
@@ -145,7 +140,6 @@ static struct drm_driver exynos_drm_driver = {
145 .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME 140 .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME
146 | DRIVER_ATOMIC | DRIVER_RENDER, 141 | DRIVER_ATOMIC | DRIVER_RENDER,
147 .open = exynos_drm_open, 142 .open = exynos_drm_open,
148 .preclose = exynos_drm_preclose,
149 .lastclose = exynos_drm_lastclose, 143 .lastclose = exynos_drm_lastclose,
150 .postclose = exynos_drm_postclose, 144 .postclose = exynos_drm_postclose,
151 .gem_free_object_unlocked = exynos_drm_gem_free_object, 145 .gem_free_object_unlocked = exynos_drm_gem_free_object,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h b/drivers/gpu/drm/exynos/exynos_drm_drv.h
index cb3176930596..39c740572034 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h
@@ -160,12 +160,9 @@ struct exynos_drm_clk {
160 * drm framework doesn't support multiple irq yet. 160 * drm framework doesn't support multiple irq yet.
161 * we can refer to the crtc to current hardware interrupt occurred through 161 * we can refer to the crtc to current hardware interrupt occurred through
162 * this pipe value. 162 * this pipe value.
163 * @enabled: if the crtc is enabled or not
164 * @event: vblank event that is currently queued for flip
165 * @wait_update: wait all pending planes updates to finish
166 * @pending_update: number of pending plane updates in this crtc
167 * @ops: pointer to callbacks for exynos drm specific functionality 163 * @ops: pointer to callbacks for exynos drm specific functionality
168 * @ctx: A pointer to the crtc's implementation specific context 164 * @ctx: A pointer to the crtc's implementation specific context
165 * @pipe_clk: A pointer to the crtc's pipeline clock.
169 */ 166 */
170struct exynos_drm_crtc { 167struct exynos_drm_crtc {
171 struct drm_crtc base; 168 struct drm_crtc base;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index fc4fda738906..d404de86d5f9 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1633,7 +1633,6 @@ static int exynos_dsi_parse_dt(struct exynos_dsi *dsi)
1633{ 1633{
1634 struct device *dev = dsi->dev; 1634 struct device *dev = dsi->dev;
1635 struct device_node *node = dev->of_node; 1635 struct device_node *node = dev->of_node;
1636 struct device_node *ep;
1637 int ret; 1636 int ret;
1638 1637
1639 ret = exynos_dsi_of_read_u32(node, "samsung,pll-clock-frequency", 1638 ret = exynos_dsi_of_read_u32(node, "samsung,pll-clock-frequency",
@@ -1641,32 +1640,21 @@ static int exynos_dsi_parse_dt(struct exynos_dsi *dsi)
1641 if (ret < 0) 1640 if (ret < 0)
1642 return ret; 1641 return ret;
1643 1642
1644 ep = of_graph_get_endpoint_by_regs(node, DSI_PORT_OUT, 0); 1643 ret = exynos_dsi_of_read_u32(node, "samsung,burst-clock-frequency",
1645 if (!ep) {
1646 dev_err(dev, "no output port with endpoint specified\n");
1647 return -EINVAL;
1648 }
1649
1650 ret = exynos_dsi_of_read_u32(ep, "samsung,burst-clock-frequency",
1651 &dsi->burst_clk_rate); 1644 &dsi->burst_clk_rate);
1652 if (ret < 0) 1645 if (ret < 0)
1653 goto end; 1646 return ret;
1654 1647
1655 ret = exynos_dsi_of_read_u32(ep, "samsung,esc-clock-frequency", 1648 ret = exynos_dsi_of_read_u32(node, "samsung,esc-clock-frequency",
1656 &dsi->esc_clk_rate); 1649 &dsi->esc_clk_rate);
1657 if (ret < 0) 1650 if (ret < 0)
1658 goto end; 1651 return ret;
1659
1660 of_node_put(ep);
1661 1652
1662 dsi->bridge_node = of_graph_get_remote_node(node, DSI_PORT_OUT, 0); 1653 dsi->bridge_node = of_graph_get_remote_node(node, DSI_PORT_OUT, 0);
1663 if (!dsi->bridge_node) 1654 if (!dsi->bridge_node)
1664 return -EINVAL; 1655 return -EINVAL;
1665 1656
1666end: 1657 return 0;
1667 of_node_put(ep);
1668
1669 return ret;
1670} 1658}
1671 1659
1672static int exynos_dsi_bind(struct device *dev, struct device *master, 1660static int exynos_dsi_bind(struct device *dev, struct device *master,
@@ -1817,6 +1805,10 @@ static int exynos_dsi_probe(struct platform_device *pdev)
1817 1805
1818static int exynos_dsi_remove(struct platform_device *pdev) 1806static int exynos_dsi_remove(struct platform_device *pdev)
1819{ 1807{
1808 struct exynos_dsi *dsi = platform_get_drvdata(pdev);
1809
1810 of_node_put(dsi->bridge_node);
1811
1820 pm_runtime_disable(&pdev->dev); 1812 pm_runtime_disable(&pdev->dev);
1821 1813
1822 component_del(&pdev->dev, &exynos_dsi_component_ops); 1814 component_del(&pdev->dev, &exynos_dsi_component_ops);
diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c
index 0066fe7e622e..be3eefec5152 100644
--- a/drivers/gpu/drm/gma500/psb_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c
@@ -759,20 +759,23 @@ void psb_intel_lvds_init(struct drm_device *dev,
759 if (scan->type & DRM_MODE_TYPE_PREFERRED) { 759 if (scan->type & DRM_MODE_TYPE_PREFERRED) {
760 mode_dev->panel_fixed_mode = 760 mode_dev->panel_fixed_mode =
761 drm_mode_duplicate(dev, scan); 761 drm_mode_duplicate(dev, scan);
762 DRM_DEBUG_KMS("Using mode from DDC\n");
762 goto out; /* FIXME: check for quirks */ 763 goto out; /* FIXME: check for quirks */
763 } 764 }
764 } 765 }
765 766
766 /* Failed to get EDID, what about VBT? do we need this? */ 767 /* Failed to get EDID, what about VBT? do we need this? */
767 if (mode_dev->vbt_mode) 768 if (dev_priv->lfp_lvds_vbt_mode) {
768 mode_dev->panel_fixed_mode = 769 mode_dev->panel_fixed_mode =
769 drm_mode_duplicate(dev, mode_dev->vbt_mode); 770 drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
770 771
771 if (!mode_dev->panel_fixed_mode) 772 if (mode_dev->panel_fixed_mode) {
772 if (dev_priv->lfp_lvds_vbt_mode) 773 mode_dev->panel_fixed_mode->type |=
773 mode_dev->panel_fixed_mode = 774 DRM_MODE_TYPE_PREFERRED;
774 drm_mode_duplicate(dev, 775 DRM_DEBUG_KMS("Using mode from VBT\n");
775 dev_priv->lfp_lvds_vbt_mode); 776 goto out;
777 }
778 }
776 779
777 /* 780 /*
778 * If we didn't get EDID, try checking if the panel is already turned 781 * If we didn't get EDID, try checking if the panel is already turned
@@ -789,6 +792,7 @@ void psb_intel_lvds_init(struct drm_device *dev,
789 if (mode_dev->panel_fixed_mode) { 792 if (mode_dev->panel_fixed_mode) {
790 mode_dev->panel_fixed_mode->type |= 793 mode_dev->panel_fixed_mode->type |=
791 DRM_MODE_TYPE_PREFERRED; 794 DRM_MODE_TYPE_PREFERRED;
795 DRM_DEBUG_KMS("Using pre-programmed mode\n");
792 goto out; /* FIXME: check for quirks */ 796 goto out; /* FIXME: check for quirks */
793 } 797 }
794 } 798 }
diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
index 5abc69c9630f..f77dcfaade6c 100644
--- a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
+++ b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
@@ -760,7 +760,7 @@ static int dsi_parse_dt(struct platform_device *pdev, struct dw_dsi *dsi)
760 * Get the endpoint node. In our case, dsi has one output port1 760 * Get the endpoint node. In our case, dsi has one output port1
761 * to which the external HDMI bridge is connected. 761 * to which the external HDMI bridge is connected.
762 */ 762 */
763 ret = drm_of_find_panel_or_bridge(np, 0, 0, NULL, &dsi->bridge); 763 ret = drm_of_find_panel_or_bridge(np, 1, 0, NULL, &dsi->bridge);
764 if (ret) 764 if (ret)
765 return ret; 765 return ret;
766 766
diff --git a/drivers/gpu/drm/i915/gvt/execlist.c b/drivers/gpu/drm/i915/gvt/execlist.c
index dca989eb2d42..24fe04d6307b 100644
--- a/drivers/gpu/drm/i915/gvt/execlist.c
+++ b/drivers/gpu/drm/i915/gvt/execlist.c
@@ -779,8 +779,26 @@ static void init_vgpu_execlist(struct intel_vgpu *vgpu, int ring_id)
779 vgpu_vreg(vgpu, ctx_status_ptr_reg) = ctx_status_ptr.dw; 779 vgpu_vreg(vgpu, ctx_status_ptr_reg) = ctx_status_ptr.dw;
780} 780}
781 781
782static void clean_workloads(struct intel_vgpu *vgpu, unsigned long engine_mask)
783{
784 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
785 struct intel_engine_cs *engine;
786 struct intel_vgpu_workload *pos, *n;
787 unsigned int tmp;
788
789 /* free the unsubmited workloads in the queues. */
790 for_each_engine_masked(engine, dev_priv, engine_mask, tmp) {
791 list_for_each_entry_safe(pos, n,
792 &vgpu->workload_q_head[engine->id], list) {
793 list_del_init(&pos->list);
794 free_workload(pos);
795 }
796 }
797}
798
782void intel_vgpu_clean_execlist(struct intel_vgpu *vgpu) 799void intel_vgpu_clean_execlist(struct intel_vgpu *vgpu)
783{ 800{
801 clean_workloads(vgpu, ALL_ENGINES);
784 kmem_cache_destroy(vgpu->workloads); 802 kmem_cache_destroy(vgpu->workloads);
785} 803}
786 804
@@ -811,17 +829,9 @@ void intel_vgpu_reset_execlist(struct intel_vgpu *vgpu,
811{ 829{
812 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv; 830 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
813 struct intel_engine_cs *engine; 831 struct intel_engine_cs *engine;
814 struct intel_vgpu_workload *pos, *n;
815 unsigned int tmp; 832 unsigned int tmp;
816 833
817 for_each_engine_masked(engine, dev_priv, engine_mask, tmp) { 834 clean_workloads(vgpu, engine_mask);
818 /* free the unsubmited workload in the queue */ 835 for_each_engine_masked(engine, dev_priv, engine_mask, tmp)
819 list_for_each_entry_safe(pos, n,
820 &vgpu->workload_q_head[engine->id], list) {
821 list_del_init(&pos->list);
822 free_workload(pos);
823 }
824
825 init_vgpu_execlist(vgpu, engine->id); 836 init_vgpu_execlist(vgpu, engine->id);
826 }
827} 837}
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
index c995e540ff96..0ffd69654592 100644
--- a/drivers/gpu/drm/i915/gvt/handlers.c
+++ b/drivers/gpu/drm/i915/gvt/handlers.c
@@ -1366,18 +1366,28 @@ static int skl_misc_ctl_write(struct intel_vgpu *vgpu, unsigned int offset,
1366 void *p_data, unsigned int bytes) 1366 void *p_data, unsigned int bytes)
1367{ 1367{
1368 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv; 1368 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
1369 i915_reg_t reg = {.reg = offset}; 1369 u32 v = *(u32 *)p_data;
1370
1371 if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv))
1372 return intel_vgpu_default_mmio_write(vgpu,
1373 offset, p_data, bytes);
1370 1374
1371 switch (offset) { 1375 switch (offset) {
1372 case 0x4ddc: 1376 case 0x4ddc:
1373 vgpu_vreg(vgpu, offset) = 0x8000003c; 1377 /* bypass WaCompressedResourceSamplerPbeMediaNewHashMode */
1374 /* WaCompressedResourceSamplerPbeMediaNewHashMode:skl */ 1378 vgpu_vreg(vgpu, offset) = v & ~(1 << 31);
1375 I915_WRITE(reg, vgpu_vreg(vgpu, offset));
1376 break; 1379 break;
1377 case 0x42080: 1380 case 0x42080:
1378 vgpu_vreg(vgpu, offset) = 0x8000; 1381 /* bypass WaCompressedResourceDisplayNewHashMode */
1379 /* WaCompressedResourceDisplayNewHashMode:skl */ 1382 vgpu_vreg(vgpu, offset) = v & ~(1 << 15);
1380 I915_WRITE(reg, vgpu_vreg(vgpu, offset)); 1383 break;
1384 case 0xe194:
1385 /* bypass WaCompressedResourceSamplerPbeMediaNewHashMode */
1386 vgpu_vreg(vgpu, offset) = v & ~(1 << 8);
1387 break;
1388 case 0x7014:
1389 /* bypass WaCompressedResourceSamplerPbeMediaNewHashMode */
1390 vgpu_vreg(vgpu, offset) = v & ~(1 << 13);
1381 break; 1391 break;
1382 default: 1392 default:
1383 return -EINVAL; 1393 return -EINVAL;
@@ -1634,7 +1644,8 @@ static int init_generic_mmio_info(struct intel_gvt *gvt)
1634 MMIO_DFH(GAM_ECOCHK, D_ALL, F_CMD_ACCESS, NULL, NULL); 1644 MMIO_DFH(GAM_ECOCHK, D_ALL, F_CMD_ACCESS, NULL, NULL);
1635 MMIO_DFH(GEN7_COMMON_SLICE_CHICKEN1, D_ALL, F_MODE_MASK | F_CMD_ACCESS, 1645 MMIO_DFH(GEN7_COMMON_SLICE_CHICKEN1, D_ALL, F_MODE_MASK | F_CMD_ACCESS,
1636 NULL, NULL); 1646 NULL, NULL);
1637 MMIO_DFH(COMMON_SLICE_CHICKEN2, D_ALL, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); 1647 MMIO_DFH(COMMON_SLICE_CHICKEN2, D_ALL, F_MODE_MASK | F_CMD_ACCESS, NULL,
1648 skl_misc_ctl_write);
1638 MMIO_DFH(0x9030, D_ALL, F_CMD_ACCESS, NULL, NULL); 1649 MMIO_DFH(0x9030, D_ALL, F_CMD_ACCESS, NULL, NULL);
1639 MMIO_DFH(0x20a0, D_ALL, F_CMD_ACCESS, NULL, NULL); 1650 MMIO_DFH(0x20a0, D_ALL, F_CMD_ACCESS, NULL, NULL);
1640 MMIO_DFH(0x2420, D_ALL, F_CMD_ACCESS, NULL, NULL); 1651 MMIO_DFH(0x2420, D_ALL, F_CMD_ACCESS, NULL, NULL);
@@ -2568,7 +2579,8 @@ static int init_broadwell_mmio_info(struct intel_gvt *gvt)
2568 MMIO_D(0x6e570, D_BDW_PLUS); 2579 MMIO_D(0x6e570, D_BDW_PLUS);
2569 MMIO_D(0x65f10, D_BDW_PLUS); 2580 MMIO_D(0x65f10, D_BDW_PLUS);
2570 2581
2571 MMIO_DFH(0xe194, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); 2582 MMIO_DFH(0xe194, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL,
2583 skl_misc_ctl_write);
2572 MMIO_DFH(0xe188, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); 2584 MMIO_DFH(0xe188, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
2573 MMIO_DFH(HALF_SLICE_CHICKEN2, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); 2585 MMIO_DFH(HALF_SLICE_CHICKEN2, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
2574 MMIO_DFH(0x2580, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); 2586 MMIO_DFH(0x2580, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index d689e511744e..4bd1467c17b1 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -292,6 +292,8 @@ static int per_file_stats(int id, void *ptr, void *data)
292 struct file_stats *stats = data; 292 struct file_stats *stats = data;
293 struct i915_vma *vma; 293 struct i915_vma *vma;
294 294
295 lockdep_assert_held(&obj->base.dev->struct_mutex);
296
295 stats->count++; 297 stats->count++;
296 stats->total += obj->base.size; 298 stats->total += obj->base.size;
297 if (!obj->bind_count) 299 if (!obj->bind_count)
@@ -476,6 +478,8 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
476 struct drm_i915_gem_request *request; 478 struct drm_i915_gem_request *request;
477 struct task_struct *task; 479 struct task_struct *task;
478 480
481 mutex_lock(&dev->struct_mutex);
482
479 memset(&stats, 0, sizeof(stats)); 483 memset(&stats, 0, sizeof(stats));
480 stats.file_priv = file->driver_priv; 484 stats.file_priv = file->driver_priv;
481 spin_lock(&file->table_lock); 485 spin_lock(&file->table_lock);
@@ -487,7 +491,6 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
487 * still alive (e.g. get_pid(current) => fork() => exit()). 491 * still alive (e.g. get_pid(current) => fork() => exit()).
488 * Therefore, we need to protect this ->comm access using RCU. 492 * Therefore, we need to protect this ->comm access using RCU.
489 */ 493 */
490 mutex_lock(&dev->struct_mutex);
491 request = list_first_entry_or_null(&file_priv->mm.request_list, 494 request = list_first_entry_or_null(&file_priv->mm.request_list,
492 struct drm_i915_gem_request, 495 struct drm_i915_gem_request,
493 client_link); 496 client_link);
@@ -497,6 +500,7 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
497 PIDTYPE_PID); 500 PIDTYPE_PID);
498 print_file_stats(m, task ? task->comm : "<unknown>", stats); 501 print_file_stats(m, task ? task->comm : "<unknown>", stats);
499 rcu_read_unlock(); 502 rcu_read_unlock();
503
500 mutex_unlock(&dev->struct_mutex); 504 mutex_unlock(&dev->struct_mutex);
501 } 505 }
502 mutex_unlock(&dev->filelist_mutex); 506 mutex_unlock(&dev->filelist_mutex);
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 3036d4835b0f..48428672fc6e 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1235,6 +1235,15 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
1235 goto out_fini; 1235 goto out_fini;
1236 1236
1237 pci_set_drvdata(pdev, &dev_priv->drm); 1237 pci_set_drvdata(pdev, &dev_priv->drm);
1238 /*
1239 * Disable the system suspend direct complete optimization, which can
1240 * leave the device suspended skipping the driver's suspend handlers
1241 * if the device was already runtime suspended. This is needed due to
1242 * the difference in our runtime and system suspend sequence and
1243 * becaue the HDA driver may require us to enable the audio power
1244 * domain during system suspend.
1245 */
1246 pdev->dev_flags |= PCI_DEV_FLAGS_NEEDS_RESUME;
1238 1247
1239 ret = i915_driver_init_early(dev_priv, ent); 1248 ret = i915_driver_init_early(dev_priv, ent);
1240 if (ret < 0) 1249 if (ret < 0)
@@ -1272,10 +1281,6 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
1272 1281
1273 dev_priv->ipc_enabled = false; 1282 dev_priv->ipc_enabled = false;
1274 1283
1275 /* Everything is in place, we can now relax! */
1276 DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n",
1277 driver.name, driver.major, driver.minor, driver.patchlevel,
1278 driver.date, pci_name(pdev), dev_priv->drm.primary->index);
1279 if (IS_ENABLED(CONFIG_DRM_I915_DEBUG)) 1284 if (IS_ENABLED(CONFIG_DRM_I915_DEBUG))
1280 DRM_INFO("DRM_I915_DEBUG enabled\n"); 1285 DRM_INFO("DRM_I915_DEBUG enabled\n");
1281 if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM)) 1286 if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index c9b0949f6c1a..2c453a4e97d5 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -562,7 +562,8 @@ struct intel_link_m_n {
562 562
563void intel_link_compute_m_n(int bpp, int nlanes, 563void intel_link_compute_m_n(int bpp, int nlanes,
564 int pixel_clock, int link_clock, 564 int pixel_clock, int link_clock,
565 struct intel_link_m_n *m_n); 565 struct intel_link_m_n *m_n,
566 bool reduce_m_n);
566 567
567/* Interface history: 568/* Interface history:
568 * 569 *
@@ -2990,6 +2991,16 @@ static inline bool intel_scanout_needs_vtd_wa(struct drm_i915_private *dev_priv)
2990 return false; 2991 return false;
2991} 2992}
2992 2993
2994static inline bool
2995intel_ggtt_update_needs_vtd_wa(struct drm_i915_private *dev_priv)
2996{
2997#ifdef CONFIG_INTEL_IOMMU
2998 if (IS_BROXTON(dev_priv) && intel_iommu_gfx_mapped)
2999 return true;
3000#endif
3001 return false;
3002}
3003
2993int intel_sanitize_enable_ppgtt(struct drm_i915_private *dev_priv, 3004int intel_sanitize_enable_ppgtt(struct drm_i915_private *dev_priv,
2994 int enable_ppgtt); 3005 int enable_ppgtt);
2995 3006
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index b6ac3df18b58..615f0a855222 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2285,8 +2285,8 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
2285 struct page *page; 2285 struct page *page;
2286 unsigned long last_pfn = 0; /* suppress gcc warning */ 2286 unsigned long last_pfn = 0; /* suppress gcc warning */
2287 unsigned int max_segment; 2287 unsigned int max_segment;
2288 gfp_t noreclaim;
2288 int ret; 2289 int ret;
2289 gfp_t gfp;
2290 2290
2291 /* Assert that the object is not currently in any GPU domain. As it 2291 /* Assert that the object is not currently in any GPU domain. As it
2292 * wasn't in the GTT, there shouldn't be any way it could have been in 2292 * wasn't in the GTT, there shouldn't be any way it could have been in
@@ -2315,22 +2315,31 @@ rebuild_st:
2315 * Fail silently without starting the shrinker 2315 * Fail silently without starting the shrinker
2316 */ 2316 */
2317 mapping = obj->base.filp->f_mapping; 2317 mapping = obj->base.filp->f_mapping;
2318 gfp = mapping_gfp_constraint(mapping, ~(__GFP_IO | __GFP_RECLAIM)); 2318 noreclaim = mapping_gfp_constraint(mapping,
2319 gfp |= __GFP_NORETRY | __GFP_NOWARN; 2319 ~(__GFP_IO | __GFP_RECLAIM));
2320 noreclaim |= __GFP_NORETRY | __GFP_NOWARN;
2321
2320 sg = st->sgl; 2322 sg = st->sgl;
2321 st->nents = 0; 2323 st->nents = 0;
2322 for (i = 0; i < page_count; i++) { 2324 for (i = 0; i < page_count; i++) {
2323 page = shmem_read_mapping_page_gfp(mapping, i, gfp); 2325 const unsigned int shrink[] = {
2324 if (unlikely(IS_ERR(page))) { 2326 I915_SHRINK_BOUND | I915_SHRINK_UNBOUND | I915_SHRINK_PURGEABLE,
2325 i915_gem_shrink(dev_priv, 2327 0,
2326 page_count, 2328 }, *s = shrink;
2327 I915_SHRINK_BOUND | 2329 gfp_t gfp = noreclaim;
2328 I915_SHRINK_UNBOUND | 2330
2329 I915_SHRINK_PURGEABLE); 2331 do {
2330 page = shmem_read_mapping_page_gfp(mapping, i, gfp); 2332 page = shmem_read_mapping_page_gfp(mapping, i, gfp);
2331 } 2333 if (likely(!IS_ERR(page)))
2332 if (unlikely(IS_ERR(page))) { 2334 break;
2333 gfp_t reclaim; 2335
2336 if (!*s) {
2337 ret = PTR_ERR(page);
2338 goto err_sg;
2339 }
2340
2341 i915_gem_shrink(dev_priv, 2 * page_count, *s++);
2342 cond_resched();
2334 2343
2335 /* We've tried hard to allocate the memory by reaping 2344 /* We've tried hard to allocate the memory by reaping
2336 * our own buffer, now let the real VM do its job and 2345 * our own buffer, now let the real VM do its job and
@@ -2340,15 +2349,26 @@ rebuild_st:
2340 * defer the oom here by reporting the ENOMEM back 2349 * defer the oom here by reporting the ENOMEM back
2341 * to userspace. 2350 * to userspace.
2342 */ 2351 */
2343 reclaim = mapping_gfp_mask(mapping); 2352 if (!*s) {
2344 reclaim |= __GFP_NORETRY; /* reclaim, but no oom */ 2353 /* reclaim and warn, but no oom */
2345 2354 gfp = mapping_gfp_mask(mapping);
2346 page = shmem_read_mapping_page_gfp(mapping, i, reclaim); 2355
2347 if (IS_ERR(page)) { 2356 /* Our bo are always dirty and so we require
2348 ret = PTR_ERR(page); 2357 * kswapd to reclaim our pages (direct reclaim
2349 goto err_sg; 2358 * does not effectively begin pageout of our
2359 * buffers on its own). However, direct reclaim
2360 * only waits for kswapd when under allocation
2361 * congestion. So as a result __GFP_RECLAIM is
2362 * unreliable and fails to actually reclaim our
2363 * dirty pages -- unless you try over and over
2364 * again with !__GFP_NORETRY. However, we still
2365 * want to fail this allocation rather than
2366 * trigger the out-of-memory killer and for
2367 * this we want the future __GFP_MAYFAIL.
2368 */
2350 } 2369 }
2351 } 2370 } while (1);
2371
2352 if (!i || 2372 if (!i ||
2353 sg->length >= max_segment || 2373 sg->length >= max_segment ||
2354 page_to_pfn(page) != last_pfn + 1) { 2374 page_to_pfn(page) != last_pfn + 1) {
@@ -3298,6 +3318,10 @@ int i915_gem_wait_for_idle(struct drm_i915_private *i915, unsigned int flags)
3298{ 3318{
3299 int ret; 3319 int ret;
3300 3320
3321 /* If the device is asleep, we have no requests outstanding */
3322 if (!READ_ONCE(i915->gt.awake))
3323 return 0;
3324
3301 if (flags & I915_WAIT_LOCKED) { 3325 if (flags & I915_WAIT_LOCKED) {
3302 struct i915_gem_timeline *tl; 3326 struct i915_gem_timeline *tl;
3303 3327
@@ -4218,6 +4242,7 @@ i915_gem_object_create(struct drm_i915_private *dev_priv, u64 size)
4218 4242
4219 mapping = obj->base.filp->f_mapping; 4243 mapping = obj->base.filp->f_mapping;
4220 mapping_set_gfp_mask(mapping, mask); 4244 mapping_set_gfp_mask(mapping, mask);
4245 GEM_BUG_ON(!(mapping_gfp_mask(mapping) & __GFP_RECLAIM));
4221 4246
4222 i915_gem_object_init(obj, &i915_gem_object_ops); 4247 i915_gem_object_init(obj, &i915_gem_object_ops);
4223 4248
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index a3e59c8ef27b..9ad13eeed904 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -546,11 +546,12 @@ repeat:
546} 546}
547 547
548static int 548static int
549i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj, 549i915_gem_execbuffer_relocate_entry(struct i915_vma *vma,
550 struct eb_vmas *eb, 550 struct eb_vmas *eb,
551 struct drm_i915_gem_relocation_entry *reloc, 551 struct drm_i915_gem_relocation_entry *reloc,
552 struct reloc_cache *cache) 552 struct reloc_cache *cache)
553{ 553{
554 struct drm_i915_gem_object *obj = vma->obj;
554 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 555 struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
555 struct drm_gem_object *target_obj; 556 struct drm_gem_object *target_obj;
556 struct drm_i915_gem_object *target_i915_obj; 557 struct drm_i915_gem_object *target_i915_obj;
@@ -628,6 +629,16 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
628 return -EINVAL; 629 return -EINVAL;
629 } 630 }
630 631
632 /*
633 * If we write into the object, we need to force the synchronisation
634 * barrier, either with an asynchronous clflush or if we executed the
635 * patching using the GPU (though that should be serialised by the
636 * timeline). To be completely sure, and since we are required to
637 * do relocations we are already stalling, disable the user's opt
638 * of our synchronisation.
639 */
640 vma->exec_entry->flags &= ~EXEC_OBJECT_ASYNC;
641
631 ret = relocate_entry(obj, reloc, cache, target_offset); 642 ret = relocate_entry(obj, reloc, cache, target_offset);
632 if (ret) 643 if (ret)
633 return ret; 644 return ret;
@@ -678,7 +689,7 @@ i915_gem_execbuffer_relocate_vma(struct i915_vma *vma,
678 do { 689 do {
679 u64 offset = r->presumed_offset; 690 u64 offset = r->presumed_offset;
680 691
681 ret = i915_gem_execbuffer_relocate_entry(vma->obj, eb, r, &cache); 692 ret = i915_gem_execbuffer_relocate_entry(vma, eb, r, &cache);
682 if (ret) 693 if (ret)
683 goto out; 694 goto out;
684 695
@@ -726,7 +737,7 @@ i915_gem_execbuffer_relocate_vma_slow(struct i915_vma *vma,
726 737
727 reloc_cache_init(&cache, eb->i915); 738 reloc_cache_init(&cache, eb->i915);
728 for (i = 0; i < entry->relocation_count; i++) { 739 for (i = 0; i < entry->relocation_count; i++) {
729 ret = i915_gem_execbuffer_relocate_entry(vma->obj, eb, &relocs[i], &cache); 740 ret = i915_gem_execbuffer_relocate_entry(vma, eb, &relocs[i], &cache);
730 if (ret) 741 if (ret)
731 break; 742 break;
732 } 743 }
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index a0563e18d753..f1989b8792dd 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -2191,6 +2191,101 @@ static void gen8_ggtt_clear_range(struct i915_address_space *vm,
2191 gen8_set_pte(&gtt_base[i], scratch_pte); 2191 gen8_set_pte(&gtt_base[i], scratch_pte);
2192} 2192}
2193 2193
2194static void bxt_vtd_ggtt_wa(struct i915_address_space *vm)
2195{
2196 struct drm_i915_private *dev_priv = vm->i915;
2197
2198 /*
2199 * Make sure the internal GAM fifo has been cleared of all GTT
2200 * writes before exiting stop_machine(). This guarantees that
2201 * any aperture accesses waiting to start in another process
2202 * cannot back up behind the GTT writes causing a hang.
2203 * The register can be any arbitrary GAM register.
2204 */
2205 POSTING_READ(GFX_FLSH_CNTL_GEN6);
2206}
2207
2208struct insert_page {
2209 struct i915_address_space *vm;
2210 dma_addr_t addr;
2211 u64 offset;
2212 enum i915_cache_level level;
2213};
2214
2215static int bxt_vtd_ggtt_insert_page__cb(void *_arg)
2216{
2217 struct insert_page *arg = _arg;
2218
2219 gen8_ggtt_insert_page(arg->vm, arg->addr, arg->offset, arg->level, 0);
2220 bxt_vtd_ggtt_wa(arg->vm);
2221
2222 return 0;
2223}
2224
2225static void bxt_vtd_ggtt_insert_page__BKL(struct i915_address_space *vm,
2226 dma_addr_t addr,
2227 u64 offset,
2228 enum i915_cache_level level,
2229 u32 unused)
2230{
2231 struct insert_page arg = { vm, addr, offset, level };
2232
2233 stop_machine(bxt_vtd_ggtt_insert_page__cb, &arg, NULL);
2234}
2235
2236struct insert_entries {
2237 struct i915_address_space *vm;
2238 struct sg_table *st;
2239 u64 start;
2240 enum i915_cache_level level;
2241};
2242
2243static int bxt_vtd_ggtt_insert_entries__cb(void *_arg)
2244{
2245 struct insert_entries *arg = _arg;
2246
2247 gen8_ggtt_insert_entries(arg->vm, arg->st, arg->start, arg->level, 0);
2248 bxt_vtd_ggtt_wa(arg->vm);
2249
2250 return 0;
2251}
2252
2253static void bxt_vtd_ggtt_insert_entries__BKL(struct i915_address_space *vm,
2254 struct sg_table *st,
2255 u64 start,
2256 enum i915_cache_level level,
2257 u32 unused)
2258{
2259 struct insert_entries arg = { vm, st, start, level };
2260
2261 stop_machine(bxt_vtd_ggtt_insert_entries__cb, &arg, NULL);
2262}
2263
2264struct clear_range {
2265 struct i915_address_space *vm;
2266 u64 start;
2267 u64 length;
2268};
2269
2270static int bxt_vtd_ggtt_clear_range__cb(void *_arg)
2271{
2272 struct clear_range *arg = _arg;
2273
2274 gen8_ggtt_clear_range(arg->vm, arg->start, arg->length);
2275 bxt_vtd_ggtt_wa(arg->vm);
2276
2277 return 0;
2278}
2279
2280static void bxt_vtd_ggtt_clear_range__BKL(struct i915_address_space *vm,
2281 u64 start,
2282 u64 length)
2283{
2284 struct clear_range arg = { vm, start, length };
2285
2286 stop_machine(bxt_vtd_ggtt_clear_range__cb, &arg, NULL);
2287}
2288
2194static void gen6_ggtt_clear_range(struct i915_address_space *vm, 2289static void gen6_ggtt_clear_range(struct i915_address_space *vm,
2195 u64 start, u64 length) 2290 u64 start, u64 length)
2196{ 2291{
@@ -2313,7 +2408,7 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma,
2313 appgtt->base.allocate_va_range) { 2408 appgtt->base.allocate_va_range) {
2314 ret = appgtt->base.allocate_va_range(&appgtt->base, 2409 ret = appgtt->base.allocate_va_range(&appgtt->base,
2315 vma->node.start, 2410 vma->node.start,
2316 vma->node.size); 2411 vma->size);
2317 if (ret) 2412 if (ret)
2318 goto err_pages; 2413 goto err_pages;
2319 } 2414 }
@@ -2785,6 +2880,14 @@ static int gen8_gmch_probe(struct i915_ggtt *ggtt)
2785 2880
2786 ggtt->base.insert_entries = gen8_ggtt_insert_entries; 2881 ggtt->base.insert_entries = gen8_ggtt_insert_entries;
2787 2882
2883 /* Serialize GTT updates with aperture access on BXT if VT-d is on. */
2884 if (intel_ggtt_update_needs_vtd_wa(dev_priv)) {
2885 ggtt->base.insert_entries = bxt_vtd_ggtt_insert_entries__BKL;
2886 ggtt->base.insert_page = bxt_vtd_ggtt_insert_page__BKL;
2887 if (ggtt->base.clear_range != nop_clear_range)
2888 ggtt->base.clear_range = bxt_vtd_ggtt_clear_range__BKL;
2889 }
2890
2788 ggtt->invalidate = gen6_ggtt_invalidate; 2891 ggtt->invalidate = gen6_ggtt_invalidate;
2789 2892
2790 return ggtt_probe_common(ggtt, size); 2893 return ggtt_probe_common(ggtt, size);
@@ -2997,7 +3100,8 @@ void i915_ggtt_enable_guc(struct drm_i915_private *i915)
2997 3100
2998void i915_ggtt_disable_guc(struct drm_i915_private *i915) 3101void i915_ggtt_disable_guc(struct drm_i915_private *i915)
2999{ 3102{
3000 i915->ggtt.invalidate = gen6_ggtt_invalidate; 3103 if (i915->ggtt.invalidate == guc_ggtt_invalidate)
3104 i915->ggtt.invalidate = gen6_ggtt_invalidate;
3001} 3105}
3002 3106
3003void i915_gem_restore_gtt_mappings(struct drm_i915_private *dev_priv) 3107void i915_gem_restore_gtt_mappings(struct drm_i915_private *dev_priv)
diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
index 5ddbc9499775..a74d0ac737cb 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.c
+++ b/drivers/gpu/drm/i915/i915_gem_request.c
@@ -623,7 +623,7 @@ i915_gem_request_alloc(struct intel_engine_cs *engine,
623 * GPU processing the request, we never over-estimate the 623 * GPU processing the request, we never over-estimate the
624 * position of the head. 624 * position of the head.
625 */ 625 */
626 req->head = req->ring->tail; 626 req->head = req->ring->emit;
627 627
628 /* Check that we didn't interrupt ourselves with a new request */ 628 /* Check that we didn't interrupt ourselves with a new request */
629 GEM_BUG_ON(req->timeline->seqno != req->fence.seqno); 629 GEM_BUG_ON(req->timeline->seqno != req->fence.seqno);
diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c b/drivers/gpu/drm/i915/i915_gem_shrinker.c
index 129ed303a6c4..57d9f7f4ef15 100644
--- a/drivers/gpu/drm/i915/i915_gem_shrinker.c
+++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c
@@ -59,9 +59,6 @@ static void i915_gem_shrinker_unlock(struct drm_device *dev, bool unlock)
59 return; 59 return;
60 60
61 mutex_unlock(&dev->struct_mutex); 61 mutex_unlock(&dev->struct_mutex);
62
63 /* expedite the RCU grace period to free some request slabs */
64 synchronize_rcu_expedited();
65} 62}
66 63
67static bool any_vma_pinned(struct drm_i915_gem_object *obj) 64static bool any_vma_pinned(struct drm_i915_gem_object *obj)
@@ -274,8 +271,6 @@ unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv)
274 I915_SHRINK_ACTIVE); 271 I915_SHRINK_ACTIVE);
275 intel_runtime_pm_put(dev_priv); 272 intel_runtime_pm_put(dev_priv);
276 273
277 synchronize_rcu(); /* wait for our earlier RCU delayed slab frees */
278
279 return freed; 274 return freed;
280} 275}
281 276
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
index a0d6d4317a49..fb5231f98c0d 100644
--- a/drivers/gpu/drm/i915/i915_gem_tiling.c
+++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
@@ -278,7 +278,7 @@ i915_gem_object_set_tiling(struct drm_i915_gem_object *obj,
278 obj->mm.quirked = false; 278 obj->mm.quirked = false;
279 } 279 }
280 if (!i915_gem_object_is_tiled(obj)) { 280 if (!i915_gem_object_is_tiled(obj)) {
281 GEM_BUG_ON(!obj->mm.quirked); 281 GEM_BUG_ON(obj->mm.quirked);
282 __i915_gem_object_pin_pages(obj); 282 __i915_gem_object_pin_pages(obj);
283 obj->mm.quirked = true; 283 obj->mm.quirked = true;
284 } 284 }
diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c
index 1642fff9cf13..ab5140ba108d 100644
--- a/drivers/gpu/drm/i915/i915_guc_submission.c
+++ b/drivers/gpu/drm/i915/i915_guc_submission.c
@@ -480,9 +480,7 @@ static void guc_wq_item_append(struct i915_guc_client *client,
480 GEM_BUG_ON(freespace < wqi_size); 480 GEM_BUG_ON(freespace < wqi_size);
481 481
482 /* The GuC firmware wants the tail index in QWords, not bytes */ 482 /* The GuC firmware wants the tail index in QWords, not bytes */
483 tail = rq->tail; 483 tail = intel_ring_set_tail(rq->ring, rq->tail) >> 3;
484 assert_ring_tail_valid(rq->ring, rq->tail);
485 tail >>= 3;
486 GEM_BUG_ON(tail > WQ_RING_TAIL_MAX); 484 GEM_BUG_ON(tail > WQ_RING_TAIL_MAX);
487 485
488 /* For now workqueue item is 4 DWs; workqueue buffer is 2 pages. So we 486 /* For now workqueue item is 4 DWs; workqueue buffer is 2 pages. So we
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index fd97fe00cd0d..190f6aa5d15e 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -2953,7 +2953,6 @@ static void vlv_display_irq_postinstall(struct drm_i915_private *dev_priv)
2953 u32 pipestat_mask; 2953 u32 pipestat_mask;
2954 u32 enable_mask; 2954 u32 enable_mask;
2955 enum pipe pipe; 2955 enum pipe pipe;
2956 u32 val;
2957 2956
2958 pipestat_mask = PLANE_FLIP_DONE_INT_STATUS_VLV | 2957 pipestat_mask = PLANE_FLIP_DONE_INT_STATUS_VLV |
2959 PIPE_CRC_DONE_INTERRUPT_STATUS; 2958 PIPE_CRC_DONE_INTERRUPT_STATUS;
@@ -2964,18 +2963,16 @@ static void vlv_display_irq_postinstall(struct drm_i915_private *dev_priv)
2964 2963
2965 enable_mask = I915_DISPLAY_PORT_INTERRUPT | 2964 enable_mask = I915_DISPLAY_PORT_INTERRUPT |
2966 I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | 2965 I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
2967 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT; 2966 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
2967 I915_LPE_PIPE_A_INTERRUPT |
2968 I915_LPE_PIPE_B_INTERRUPT;
2969
2968 if (IS_CHERRYVIEW(dev_priv)) 2970 if (IS_CHERRYVIEW(dev_priv))
2969 enable_mask |= I915_DISPLAY_PIPE_C_EVENT_INTERRUPT; 2971 enable_mask |= I915_DISPLAY_PIPE_C_EVENT_INTERRUPT |
2972 I915_LPE_PIPE_C_INTERRUPT;
2970 2973
2971 WARN_ON(dev_priv->irq_mask != ~0); 2974 WARN_ON(dev_priv->irq_mask != ~0);
2972 2975
2973 val = (I915_LPE_PIPE_A_INTERRUPT |
2974 I915_LPE_PIPE_B_INTERRUPT |
2975 I915_LPE_PIPE_C_INTERRUPT);
2976
2977 enable_mask |= val;
2978
2979 dev_priv->irq_mask = ~enable_mask; 2976 dev_priv->irq_mask = ~enable_mask;
2980 2977
2981 GEN5_IRQ_INIT(VLV_, dev_priv->irq_mask, enable_mask); 2978 GEN5_IRQ_INIT(VLV_, dev_priv->irq_mask, enable_mask);
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index f87b0c4e564d..1a78363c7f4a 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -208,7 +208,7 @@ static const struct intel_device_info intel_ironlake_d_info = {
208static const struct intel_device_info intel_ironlake_m_info = { 208static const struct intel_device_info intel_ironlake_m_info = {
209 GEN5_FEATURES, 209 GEN5_FEATURES,
210 .platform = INTEL_IRONLAKE, 210 .platform = INTEL_IRONLAKE,
211 .is_mobile = 1, 211 .is_mobile = 1, .has_fbc = 1,
212}; 212};
213 213
214#define GEN6_FEATURES \ 214#define GEN6_FEATURES \
@@ -390,7 +390,6 @@ static const struct intel_device_info intel_skylake_gt3_info = {
390 .has_hw_contexts = 1, \ 390 .has_hw_contexts = 1, \
391 .has_logical_ring_contexts = 1, \ 391 .has_logical_ring_contexts = 1, \
392 .has_guc = 1, \ 392 .has_guc = 1, \
393 .has_decoupled_mmio = 1, \
394 .has_aliasing_ppgtt = 1, \ 393 .has_aliasing_ppgtt = 1, \
395 .has_full_ppgtt = 1, \ 394 .has_full_ppgtt = 1, \
396 .has_full_48bit_ppgtt = 1, \ 395 .has_full_48bit_ppgtt = 1, \
diff --git a/drivers/gpu/drm/i915/i915_pvinfo.h b/drivers/gpu/drm/i915/i915_pvinfo.h
index c0cb2974caac..2cfe96d3e5d1 100644
--- a/drivers/gpu/drm/i915/i915_pvinfo.h
+++ b/drivers/gpu/drm/i915/i915_pvinfo.h
@@ -36,10 +36,6 @@
36#define VGT_VERSION_MAJOR 1 36#define VGT_VERSION_MAJOR 1
37#define VGT_VERSION_MINOR 0 37#define VGT_VERSION_MINOR 0
38 38
39#define INTEL_VGT_IF_VERSION_ENCODE(major, minor) ((major) << 16 | (minor))
40#define INTEL_VGT_IF_VERSION \
41 INTEL_VGT_IF_VERSION_ENCODE(VGT_VERSION_MAJOR, VGT_VERSION_MINOR)
42
43/* 39/*
44 * notifications from guest to vgpu device model 40 * notifications from guest to vgpu device model
45 */ 41 */
@@ -55,8 +51,8 @@ enum vgt_g2v_type {
55 51
56struct vgt_if { 52struct vgt_if {
57 u64 magic; /* VGT_MAGIC */ 53 u64 magic; /* VGT_MAGIC */
58 uint16_t version_major; 54 u16 version_major;
59 uint16_t version_minor; 55 u16 version_minor;
60 u32 vgt_id; /* ID of vGT instance */ 56 u32 vgt_id; /* ID of vGT instance */
61 u32 rsv1[12]; /* pad to offset 0x40 */ 57 u32 rsv1[12]; /* pad to offset 0x40 */
62 /* 58 /*
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 5a7c63e64381..65b837e96fe6 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -8280,7 +8280,7 @@ enum {
8280 8280
8281/* MIPI DSI registers */ 8281/* MIPI DSI registers */
8282 8282
8283#define _MIPI_PORT(port, a, c) ((port) ? c : a) /* ports A and C only */ 8283#define _MIPI_PORT(port, a, c) (((port) == PORT_A) ? a : c) /* ports A and C only */
8284#define _MMIO_MIPI(port, a, c) _MMIO(_MIPI_PORT(port, a, c)) 8284#define _MMIO_MIPI(port, a, c) _MMIO(_MIPI_PORT(port, a, c))
8285 8285
8286#define MIPIO_TXESC_CLK_DIV1 _MMIO(0x160004) 8286#define MIPIO_TXESC_CLK_DIV1 _MMIO(0x160004)
diff --git a/drivers/gpu/drm/i915/i915_vgpu.c b/drivers/gpu/drm/i915/i915_vgpu.c
index 4ab8a973b61f..2e739018fb4c 100644
--- a/drivers/gpu/drm/i915/i915_vgpu.c
+++ b/drivers/gpu/drm/i915/i915_vgpu.c
@@ -60,8 +60,8 @@
60 */ 60 */
61void i915_check_vgpu(struct drm_i915_private *dev_priv) 61void i915_check_vgpu(struct drm_i915_private *dev_priv)
62{ 62{
63 uint64_t magic; 63 u64 magic;
64 uint32_t version; 64 u16 version_major;
65 65
66 BUILD_BUG_ON(sizeof(struct vgt_if) != VGT_PVINFO_SIZE); 66 BUILD_BUG_ON(sizeof(struct vgt_if) != VGT_PVINFO_SIZE);
67 67
@@ -69,10 +69,8 @@ void i915_check_vgpu(struct drm_i915_private *dev_priv)
69 if (magic != VGT_MAGIC) 69 if (magic != VGT_MAGIC)
70 return; 70 return;
71 71
72 version = INTEL_VGT_IF_VERSION_ENCODE( 72 version_major = __raw_i915_read16(dev_priv, vgtif_reg(version_major));
73 __raw_i915_read16(dev_priv, vgtif_reg(version_major)), 73 if (version_major < VGT_VERSION_MAJOR) {
74 __raw_i915_read16(dev_priv, vgtif_reg(version_minor)));
75 if (version != INTEL_VGT_IF_VERSION) {
76 DRM_INFO("VGT interface version mismatch!\n"); 74 DRM_INFO("VGT interface version mismatch!\n");
77 return; 75 return;
78 } 76 }
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 1aba47024656..f066e2d785f5 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -650,6 +650,11 @@ int i915_vma_unbind(struct i915_vma *vma)
650 break; 650 break;
651 } 651 }
652 652
653 if (!ret) {
654 ret = i915_gem_active_retire(&vma->last_fence,
655 &vma->vm->i915->drm.struct_mutex);
656 }
657
653 __i915_vma_unpin(vma); 658 __i915_vma_unpin(vma);
654 if (ret) 659 if (ret)
655 return ret; 660 return ret;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3617927af269..9106ea32b048 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -120,7 +120,8 @@ static void intel_crtc_init_scalers(struct intel_crtc *crtc,
120static void skylake_pfit_enable(struct intel_crtc *crtc); 120static void skylake_pfit_enable(struct intel_crtc *crtc);
121static void ironlake_pfit_disable(struct intel_crtc *crtc, bool force); 121static void ironlake_pfit_disable(struct intel_crtc *crtc, bool force);
122static void ironlake_pfit_enable(struct intel_crtc *crtc); 122static void ironlake_pfit_enable(struct intel_crtc *crtc);
123static void intel_modeset_setup_hw_state(struct drm_device *dev); 123static void intel_modeset_setup_hw_state(struct drm_device *dev,
124 struct drm_modeset_acquire_ctx *ctx);
124static void intel_pre_disable_primary_noatomic(struct drm_crtc *crtc); 125static void intel_pre_disable_primary_noatomic(struct drm_crtc *crtc);
125 126
126struct intel_limit { 127struct intel_limit {
@@ -3449,7 +3450,7 @@ __intel_display_resume(struct drm_device *dev,
3449 struct drm_crtc *crtc; 3450 struct drm_crtc *crtc;
3450 int i, ret; 3451 int i, ret;
3451 3452
3452 intel_modeset_setup_hw_state(dev); 3453 intel_modeset_setup_hw_state(dev, ctx);
3453 i915_redisable_vga(to_i915(dev)); 3454 i915_redisable_vga(to_i915(dev));
3454 3455
3455 if (!state) 3456 if (!state)
@@ -4598,7 +4599,7 @@ static void cpt_verify_modeset(struct drm_device *dev, int pipe)
4598 4599
4599static int 4600static int
4600skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach, 4601skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach,
4601 unsigned scaler_user, int *scaler_id, unsigned int rotation, 4602 unsigned int scaler_user, int *scaler_id,
4602 int src_w, int src_h, int dst_w, int dst_h) 4603 int src_w, int src_h, int dst_w, int dst_h)
4603{ 4604{
4604 struct intel_crtc_scaler_state *scaler_state = 4605 struct intel_crtc_scaler_state *scaler_state =
@@ -4607,9 +4608,12 @@ skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach,
4607 to_intel_crtc(crtc_state->base.crtc); 4608 to_intel_crtc(crtc_state->base.crtc);
4608 int need_scaling; 4609 int need_scaling;
4609 4610
4610 need_scaling = drm_rotation_90_or_270(rotation) ? 4611 /*
4611 (src_h != dst_w || src_w != dst_h): 4612 * Src coordinates are already rotated by 270 degrees for
4612 (src_w != dst_w || src_h != dst_h); 4613 * the 90/270 degree plane rotation cases (to match the
4614 * GTT mapping), hence no need to account for rotation here.
4615 */
4616 need_scaling = src_w != dst_w || src_h != dst_h;
4613 4617
4614 /* 4618 /*
4615 * if plane is being disabled or scaler is no more required or force detach 4619 * if plane is being disabled or scaler is no more required or force detach
@@ -4671,7 +4675,7 @@ int skl_update_scaler_crtc(struct intel_crtc_state *state)
4671 const struct drm_display_mode *adjusted_mode = &state->base.adjusted_mode; 4675 const struct drm_display_mode *adjusted_mode = &state->base.adjusted_mode;
4672 4676
4673 return skl_update_scaler(state, !state->base.active, SKL_CRTC_INDEX, 4677 return skl_update_scaler(state, !state->base.active, SKL_CRTC_INDEX,
4674 &state->scaler_state.scaler_id, DRM_ROTATE_0, 4678 &state->scaler_state.scaler_id,
4675 state->pipe_src_w, state->pipe_src_h, 4679 state->pipe_src_w, state->pipe_src_h,
4676 adjusted_mode->crtc_hdisplay, adjusted_mode->crtc_vdisplay); 4680 adjusted_mode->crtc_hdisplay, adjusted_mode->crtc_vdisplay);
4677} 4681}
@@ -4700,7 +4704,6 @@ static int skl_update_scaler_plane(struct intel_crtc_state *crtc_state,
4700 ret = skl_update_scaler(crtc_state, force_detach, 4704 ret = skl_update_scaler(crtc_state, force_detach,
4701 drm_plane_index(&intel_plane->base), 4705 drm_plane_index(&intel_plane->base),
4702 &plane_state->scaler_id, 4706 &plane_state->scaler_id,
4703 plane_state->base.rotation,
4704 drm_rect_width(&plane_state->base.src) >> 16, 4707 drm_rect_width(&plane_state->base.src) >> 16,
4705 drm_rect_height(&plane_state->base.src) >> 16, 4708 drm_rect_height(&plane_state->base.src) >> 16,
4706 drm_rect_width(&plane_state->base.dst), 4709 drm_rect_width(&plane_state->base.dst),
@@ -5823,7 +5826,8 @@ static void i9xx_crtc_disable(struct intel_crtc_state *old_crtc_state,
5823 intel_update_watermarks(intel_crtc); 5826 intel_update_watermarks(intel_crtc);
5824} 5827}
5825 5828
5826static void intel_crtc_disable_noatomic(struct drm_crtc *crtc) 5829static void intel_crtc_disable_noatomic(struct drm_crtc *crtc,
5830 struct drm_modeset_acquire_ctx *ctx)
5827{ 5831{
5828 struct intel_encoder *encoder; 5832 struct intel_encoder *encoder;
5829 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 5833 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
@@ -5853,7 +5857,7 @@ static void intel_crtc_disable_noatomic(struct drm_crtc *crtc)
5853 return; 5857 return;
5854 } 5858 }
5855 5859
5856 state->acquire_ctx = crtc->dev->mode_config.acquire_ctx; 5860 state->acquire_ctx = ctx;
5857 5861
5858 /* Everything's already locked, -EDEADLK can't happen. */ 5862 /* Everything's already locked, -EDEADLK can't happen. */
5859 crtc_state = intel_atomic_get_crtc_state(state, intel_crtc); 5863 crtc_state = intel_atomic_get_crtc_state(state, intel_crtc);
@@ -6101,7 +6105,7 @@ retry:
6101 pipe_config->fdi_lanes = lane; 6105 pipe_config->fdi_lanes = lane;
6102 6106
6103 intel_link_compute_m_n(pipe_config->pipe_bpp, lane, fdi_dotclock, 6107 intel_link_compute_m_n(pipe_config->pipe_bpp, lane, fdi_dotclock,
6104 link_bw, &pipe_config->fdi_m_n); 6108 link_bw, &pipe_config->fdi_m_n, false);
6105 6109
6106 ret = ironlake_check_fdi_lanes(dev, intel_crtc->pipe, pipe_config); 6110 ret = ironlake_check_fdi_lanes(dev, intel_crtc->pipe, pipe_config);
6107 if (ret == -EINVAL && pipe_config->pipe_bpp > 6*3) { 6111 if (ret == -EINVAL && pipe_config->pipe_bpp > 6*3) {
@@ -6277,7 +6281,8 @@ intel_reduce_m_n_ratio(uint32_t *num, uint32_t *den)
6277} 6281}
6278 6282
6279static void compute_m_n(unsigned int m, unsigned int n, 6283static void compute_m_n(unsigned int m, unsigned int n,
6280 uint32_t *ret_m, uint32_t *ret_n) 6284 uint32_t *ret_m, uint32_t *ret_n,
6285 bool reduce_m_n)
6281{ 6286{
6282 /* 6287 /*
6283 * Reduce M/N as much as possible without loss in precision. Several DP 6288 * Reduce M/N as much as possible without loss in precision. Several DP
@@ -6285,9 +6290,11 @@ static void compute_m_n(unsigned int m, unsigned int n,
6285 * values. The passed in values are more likely to have the least 6290 * values. The passed in values are more likely to have the least
6286 * significant bits zero than M after rounding below, so do this first. 6291 * significant bits zero than M after rounding below, so do this first.
6287 */ 6292 */
6288 while ((m & 1) == 0 && (n & 1) == 0) { 6293 if (reduce_m_n) {
6289 m >>= 1; 6294 while ((m & 1) == 0 && (n & 1) == 0) {
6290 n >>= 1; 6295 m >>= 1;
6296 n >>= 1;
6297 }
6291 } 6298 }
6292 6299
6293 *ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX); 6300 *ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
@@ -6298,16 +6305,19 @@ static void compute_m_n(unsigned int m, unsigned int n,
6298void 6305void
6299intel_link_compute_m_n(int bits_per_pixel, int nlanes, 6306intel_link_compute_m_n(int bits_per_pixel, int nlanes,
6300 int pixel_clock, int link_clock, 6307 int pixel_clock, int link_clock,
6301 struct intel_link_m_n *m_n) 6308 struct intel_link_m_n *m_n,
6309 bool reduce_m_n)
6302{ 6310{
6303 m_n->tu = 64; 6311 m_n->tu = 64;
6304 6312
6305 compute_m_n(bits_per_pixel * pixel_clock, 6313 compute_m_n(bits_per_pixel * pixel_clock,
6306 link_clock * nlanes * 8, 6314 link_clock * nlanes * 8,
6307 &m_n->gmch_m, &m_n->gmch_n); 6315 &m_n->gmch_m, &m_n->gmch_n,
6316 reduce_m_n);
6308 6317
6309 compute_m_n(pixel_clock, link_clock, 6318 compute_m_n(pixel_clock, link_clock,
6310 &m_n->link_m, &m_n->link_n); 6319 &m_n->link_m, &m_n->link_n,
6320 reduce_m_n);
6311} 6321}
6312 6322
6313static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv) 6323static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
@@ -12197,6 +12207,15 @@ static void update_scanline_offset(struct intel_crtc *crtc)
12197 * type. For DP ports it behaves like most other platforms, but on HDMI 12207 * type. For DP ports it behaves like most other platforms, but on HDMI
12198 * there's an extra 1 line difference. So we need to add two instead of 12208 * there's an extra 1 line difference. So we need to add two instead of
12199 * one to the value. 12209 * one to the value.
12210 *
12211 * On VLV/CHV DSI the scanline counter would appear to increment
12212 * approx. 1/3 of a scanline before start of vblank. Unfortunately
12213 * that means we can't tell whether we're in vblank or not while
12214 * we're on that particular line. We must still set scanline_offset
12215 * to 1 so that the vblank timestamps come out correct when we query
12216 * the scanline counter from within the vblank interrupt handler.
12217 * However if queried just before the start of vblank we'll get an
12218 * answer that's slightly in the future.
12200 */ 12219 */
12201 if (IS_GEN2(dev_priv)) { 12220 if (IS_GEN2(dev_priv)) {
12202 const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode; 12221 const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
@@ -15013,7 +15032,7 @@ int intel_modeset_init(struct drm_device *dev)
15013 intel_setup_outputs(dev_priv); 15032 intel_setup_outputs(dev_priv);
15014 15033
15015 drm_modeset_lock_all(dev); 15034 drm_modeset_lock_all(dev);
15016 intel_modeset_setup_hw_state(dev); 15035 intel_modeset_setup_hw_state(dev, dev->mode_config.acquire_ctx);
15017 drm_modeset_unlock_all(dev); 15036 drm_modeset_unlock_all(dev);
15018 15037
15019 for_each_intel_crtc(dev, crtc) { 15038 for_each_intel_crtc(dev, crtc) {
@@ -15050,13 +15069,13 @@ int intel_modeset_init(struct drm_device *dev)
15050 return 0; 15069 return 0;
15051} 15070}
15052 15071
15053static void intel_enable_pipe_a(struct drm_device *dev) 15072static void intel_enable_pipe_a(struct drm_device *dev,
15073 struct drm_modeset_acquire_ctx *ctx)
15054{ 15074{
15055 struct intel_connector *connector; 15075 struct intel_connector *connector;
15056 struct drm_connector_list_iter conn_iter; 15076 struct drm_connector_list_iter conn_iter;
15057 struct drm_connector *crt = NULL; 15077 struct drm_connector *crt = NULL;
15058 struct intel_load_detect_pipe load_detect_temp; 15078 struct intel_load_detect_pipe load_detect_temp;
15059 struct drm_modeset_acquire_ctx *ctx = dev->mode_config.acquire_ctx;
15060 int ret; 15079 int ret;
15061 15080
15062 /* We can't just switch on the pipe A, we need to set things up with a 15081 /* We can't just switch on the pipe A, we need to set things up with a
@@ -15128,7 +15147,8 @@ static bool has_pch_trancoder(struct drm_i915_private *dev_priv,
15128 (HAS_PCH_LPT_H(dev_priv) && pch_transcoder == TRANSCODER_A); 15147 (HAS_PCH_LPT_H(dev_priv) && pch_transcoder == TRANSCODER_A);
15129} 15148}
15130 15149
15131static void intel_sanitize_crtc(struct intel_crtc *crtc) 15150static void intel_sanitize_crtc(struct intel_crtc *crtc,
15151 struct drm_modeset_acquire_ctx *ctx)
15132{ 15152{
15133 struct drm_device *dev = crtc->base.dev; 15153 struct drm_device *dev = crtc->base.dev;
15134 struct drm_i915_private *dev_priv = to_i915(dev); 15154 struct drm_i915_private *dev_priv = to_i915(dev);
@@ -15174,7 +15194,7 @@ static void intel_sanitize_crtc(struct intel_crtc *crtc)
15174 plane = crtc->plane; 15194 plane = crtc->plane;
15175 crtc->base.primary->state->visible = true; 15195 crtc->base.primary->state->visible = true;
15176 crtc->plane = !plane; 15196 crtc->plane = !plane;
15177 intel_crtc_disable_noatomic(&crtc->base); 15197 intel_crtc_disable_noatomic(&crtc->base, ctx);
15178 crtc->plane = plane; 15198 crtc->plane = plane;
15179 } 15199 }
15180 15200
@@ -15184,13 +15204,13 @@ static void intel_sanitize_crtc(struct intel_crtc *crtc)
15184 * resume. Force-enable the pipe to fix this, the update_dpms 15204 * resume. Force-enable the pipe to fix this, the update_dpms
15185 * call below we restore the pipe to the right state, but leave 15205 * call below we restore the pipe to the right state, but leave
15186 * the required bits on. */ 15206 * the required bits on. */
15187 intel_enable_pipe_a(dev); 15207 intel_enable_pipe_a(dev, ctx);
15188 } 15208 }
15189 15209
15190 /* Adjust the state of the output pipe according to whether we 15210 /* Adjust the state of the output pipe according to whether we
15191 * have active connectors/encoders. */ 15211 * have active connectors/encoders. */
15192 if (crtc->active && !intel_crtc_has_encoders(crtc)) 15212 if (crtc->active && !intel_crtc_has_encoders(crtc))
15193 intel_crtc_disable_noatomic(&crtc->base); 15213 intel_crtc_disable_noatomic(&crtc->base, ctx);
15194 15214
15195 if (crtc->active || HAS_GMCH_DISPLAY(dev_priv)) { 15215 if (crtc->active || HAS_GMCH_DISPLAY(dev_priv)) {
15196 /* 15216 /*
@@ -15488,7 +15508,8 @@ get_encoder_power_domains(struct drm_i915_private *dev_priv)
15488 * and sanitizes it to the current state 15508 * and sanitizes it to the current state
15489 */ 15509 */
15490static void 15510static void
15491intel_modeset_setup_hw_state(struct drm_device *dev) 15511intel_modeset_setup_hw_state(struct drm_device *dev,
15512 struct drm_modeset_acquire_ctx *ctx)
15492{ 15513{
15493 struct drm_i915_private *dev_priv = to_i915(dev); 15514 struct drm_i915_private *dev_priv = to_i915(dev);
15494 enum pipe pipe; 15515 enum pipe pipe;
@@ -15508,7 +15529,7 @@ intel_modeset_setup_hw_state(struct drm_device *dev)
15508 for_each_pipe(dev_priv, pipe) { 15529 for_each_pipe(dev_priv, pipe) {
15509 crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 15530 crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
15510 15531
15511 intel_sanitize_crtc(crtc); 15532 intel_sanitize_crtc(crtc, ctx);
15512 intel_dump_pipe_config(crtc, crtc->config, 15533 intel_dump_pipe_config(crtc, crtc->config,
15513 "[setup_hw_state]"); 15534 "[setup_hw_state]");
15514 } 15535 }
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index ee77b519835c..fc691b8b317c 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1507,37 +1507,6 @@ static void intel_dp_print_rates(struct intel_dp *intel_dp)
1507 DRM_DEBUG_KMS("common rates: %s\n", str); 1507 DRM_DEBUG_KMS("common rates: %s\n", str);
1508} 1508}
1509 1509
1510bool
1511__intel_dp_read_desc(struct intel_dp *intel_dp, struct intel_dp_desc *desc)
1512{
1513 u32 base = drm_dp_is_branch(intel_dp->dpcd) ? DP_BRANCH_OUI :
1514 DP_SINK_OUI;
1515
1516 return drm_dp_dpcd_read(&intel_dp->aux, base, desc, sizeof(*desc)) ==
1517 sizeof(*desc);
1518}
1519
1520bool intel_dp_read_desc(struct intel_dp *intel_dp)
1521{
1522 struct intel_dp_desc *desc = &intel_dp->desc;
1523 bool oui_sup = intel_dp->dpcd[DP_DOWN_STREAM_PORT_COUNT] &
1524 DP_OUI_SUPPORT;
1525 int dev_id_len;
1526
1527 if (!__intel_dp_read_desc(intel_dp, desc))
1528 return false;
1529
1530 dev_id_len = strnlen(desc->device_id, sizeof(desc->device_id));
1531 DRM_DEBUG_KMS("DP %s: OUI %*phD%s dev-ID %*pE HW-rev %d.%d SW-rev %d.%d\n",
1532 drm_dp_is_branch(intel_dp->dpcd) ? "branch" : "sink",
1533 (int)sizeof(desc->oui), desc->oui, oui_sup ? "" : "(NS)",
1534 dev_id_len, desc->device_id,
1535 desc->hw_rev >> 4, desc->hw_rev & 0xf,
1536 desc->sw_major_rev, desc->sw_minor_rev);
1537
1538 return true;
1539}
1540
1541static int rate_to_index(int find, const int *rates) 1510static int rate_to_index(int find, const int *rates)
1542{ 1511{
1543 int i = 0; 1512 int i = 0;
@@ -1624,6 +1593,8 @@ intel_dp_compute_config(struct intel_encoder *encoder,
1624 int common_rates[DP_MAX_SUPPORTED_RATES] = {}; 1593 int common_rates[DP_MAX_SUPPORTED_RATES] = {};
1625 int common_len; 1594 int common_len;
1626 uint8_t link_bw, rate_select; 1595 uint8_t link_bw, rate_select;
1596 bool reduce_m_n = drm_dp_has_quirk(&intel_dp->desc,
1597 DP_DPCD_QUIRK_LIMITED_M_N);
1627 1598
1628 common_len = intel_dp_common_rates(intel_dp, common_rates); 1599 common_len = intel_dp_common_rates(intel_dp, common_rates);
1629 1600
@@ -1753,7 +1724,8 @@ found:
1753 intel_link_compute_m_n(bpp, lane_count, 1724 intel_link_compute_m_n(bpp, lane_count,
1754 adjusted_mode->crtc_clock, 1725 adjusted_mode->crtc_clock,
1755 pipe_config->port_clock, 1726 pipe_config->port_clock,
1756 &pipe_config->dp_m_n); 1727 &pipe_config->dp_m_n,
1728 reduce_m_n);
1757 1729
1758 if (intel_connector->panel.downclock_mode != NULL && 1730 if (intel_connector->panel.downclock_mode != NULL &&
1759 dev_priv->drrs.type == SEAMLESS_DRRS_SUPPORT) { 1731 dev_priv->drrs.type == SEAMLESS_DRRS_SUPPORT) {
@@ -1761,7 +1733,8 @@ found:
1761 intel_link_compute_m_n(bpp, lane_count, 1733 intel_link_compute_m_n(bpp, lane_count,
1762 intel_connector->panel.downclock_mode->clock, 1734 intel_connector->panel.downclock_mode->clock,
1763 pipe_config->port_clock, 1735 pipe_config->port_clock,
1764 &pipe_config->dp_m2_n2); 1736 &pipe_config->dp_m2_n2,
1737 reduce_m_n);
1765 } 1738 }
1766 1739
1767 /* 1740 /*
@@ -3622,7 +3595,8 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
3622 if (!intel_dp_read_dpcd(intel_dp)) 3595 if (!intel_dp_read_dpcd(intel_dp))
3623 return false; 3596 return false;
3624 3597
3625 intel_dp_read_desc(intel_dp); 3598 drm_dp_read_desc(&intel_dp->aux, &intel_dp->desc,
3599 drm_dp_is_branch(intel_dp->dpcd));
3626 3600
3627 if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11) 3601 if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11)
3628 dev_priv->no_aux_handshake = intel_dp->dpcd[DP_MAX_DOWNSPREAD] & 3602 dev_priv->no_aux_handshake = intel_dp->dpcd[DP_MAX_DOWNSPREAD] &
@@ -4624,7 +4598,8 @@ intel_dp_long_pulse(struct intel_connector *intel_connector)
4624 4598
4625 intel_dp_print_rates(intel_dp); 4599 intel_dp_print_rates(intel_dp);
4626 4600
4627 intel_dp_read_desc(intel_dp); 4601 drm_dp_read_desc(&intel_dp->aux, &intel_dp->desc,
4602 drm_dp_is_branch(intel_dp->dpcd));
4628 4603
4629 intel_dp_configure_mst(intel_dp); 4604 intel_dp_configure_mst(intel_dp);
4630 4605
diff --git a/drivers/gpu/drm/i915/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/intel_dp_aux_backlight.c
index 6532e226db29..40ba3134545e 100644
--- a/drivers/gpu/drm/i915/intel_dp_aux_backlight.c
+++ b/drivers/gpu/drm/i915/intel_dp_aux_backlight.c
@@ -119,8 +119,6 @@ static int intel_dp_aux_setup_backlight(struct intel_connector *connector,
119 struct intel_dp *intel_dp = enc_to_intel_dp(&connector->encoder->base); 119 struct intel_dp *intel_dp = enc_to_intel_dp(&connector->encoder->base);
120 struct intel_panel *panel = &connector->panel; 120 struct intel_panel *panel = &connector->panel;
121 121
122 intel_dp_aux_enable_backlight(connector);
123
124 if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT) 122 if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT)
125 panel->backlight.max = 0xFFFF; 123 panel->backlight.max = 0xFFFF;
126 else 124 else
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index c1f62eb07c07..989e25577ac0 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -44,6 +44,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
44 int lane_count, slots; 44 int lane_count, slots;
45 const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; 45 const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
46 int mst_pbn; 46 int mst_pbn;
47 bool reduce_m_n = drm_dp_has_quirk(&intel_dp->desc,
48 DP_DPCD_QUIRK_LIMITED_M_N);
47 49
48 pipe_config->has_pch_encoder = false; 50 pipe_config->has_pch_encoder = false;
49 bpp = 24; 51 bpp = 24;
@@ -75,7 +77,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
75 intel_link_compute_m_n(bpp, lane_count, 77 intel_link_compute_m_n(bpp, lane_count,
76 adjusted_mode->crtc_clock, 78 adjusted_mode->crtc_clock,
77 pipe_config->port_clock, 79 pipe_config->port_clock,
78 &pipe_config->dp_m_n); 80 &pipe_config->dp_m_n,
81 reduce_m_n);
79 82
80 pipe_config->dp_m_n.tu = slots; 83 pipe_config->dp_m_n.tu = slots;
81 84
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index aaee3949a422..f630c7af5020 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -906,14 +906,6 @@ enum link_m_n_set {
906 M2_N2 906 M2_N2
907}; 907};
908 908
909struct intel_dp_desc {
910 u8 oui[3];
911 u8 device_id[6];
912 u8 hw_rev;
913 u8 sw_major_rev;
914 u8 sw_minor_rev;
915} __packed;
916
917struct intel_dp_compliance_data { 909struct intel_dp_compliance_data {
918 unsigned long edid; 910 unsigned long edid;
919 uint8_t video_pattern; 911 uint8_t video_pattern;
@@ -957,7 +949,7 @@ struct intel_dp {
957 /* Max link BW for the sink as per DPCD registers */ 949 /* Max link BW for the sink as per DPCD registers */
958 int max_sink_link_bw; 950 int max_sink_link_bw;
959 /* sink or branch descriptor */ 951 /* sink or branch descriptor */
960 struct intel_dp_desc desc; 952 struct drm_dp_desc desc;
961 struct drm_dp_aux aux; 953 struct drm_dp_aux aux;
962 enum intel_display_power_domain aux_power_domain; 954 enum intel_display_power_domain aux_power_domain;
963 uint8_t train_set[4]; 955 uint8_t train_set[4];
@@ -1532,9 +1524,6 @@ static inline unsigned int intel_dp_unused_lane_mask(int lane_count)
1532} 1524}
1533 1525
1534bool intel_dp_read_dpcd(struct intel_dp *intel_dp); 1526bool intel_dp_read_dpcd(struct intel_dp *intel_dp);
1535bool __intel_dp_read_desc(struct intel_dp *intel_dp,
1536 struct intel_dp_desc *desc);
1537bool intel_dp_read_desc(struct intel_dp *intel_dp);
1538int intel_dp_link_required(int pixel_clock, int bpp); 1527int intel_dp_link_required(int pixel_clock, int bpp);
1539int intel_dp_max_data_rate(int max_link_clock, int max_lanes); 1528int intel_dp_max_data_rate(int max_link_clock, int max_lanes);
1540bool intel_digital_port_connected(struct drm_i915_private *dev_priv, 1529bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
index 854e8e0c836b..f94eacff196c 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -1075,6 +1075,22 @@ int intel_ring_workarounds_emit(struct drm_i915_gem_request *req)
1075 return 0; 1075 return 0;
1076} 1076}
1077 1077
1078static bool ring_is_idle(struct intel_engine_cs *engine)
1079{
1080 struct drm_i915_private *dev_priv = engine->i915;
1081 bool idle = true;
1082
1083 intel_runtime_pm_get(dev_priv);
1084
1085 /* No bit for gen2, so assume the CS parser is idle */
1086 if (INTEL_GEN(dev_priv) > 2 && !(I915_READ_MODE(engine) & MODE_IDLE))
1087 idle = false;
1088
1089 intel_runtime_pm_put(dev_priv);
1090
1091 return idle;
1092}
1093
1078/** 1094/**
1079 * intel_engine_is_idle() - Report if the engine has finished process all work 1095 * intel_engine_is_idle() - Report if the engine has finished process all work
1080 * @engine: the intel_engine_cs 1096 * @engine: the intel_engine_cs
@@ -1084,8 +1100,6 @@ int intel_ring_workarounds_emit(struct drm_i915_gem_request *req)
1084 */ 1100 */
1085bool intel_engine_is_idle(struct intel_engine_cs *engine) 1101bool intel_engine_is_idle(struct intel_engine_cs *engine)
1086{ 1102{
1087 struct drm_i915_private *dev_priv = engine->i915;
1088
1089 /* Any inflight/incomplete requests? */ 1103 /* Any inflight/incomplete requests? */
1090 if (!i915_seqno_passed(intel_engine_get_seqno(engine), 1104 if (!i915_seqno_passed(intel_engine_get_seqno(engine),
1091 intel_engine_last_submit(engine))) 1105 intel_engine_last_submit(engine)))
@@ -1100,7 +1114,7 @@ bool intel_engine_is_idle(struct intel_engine_cs *engine)
1100 return false; 1114 return false;
1101 1115
1102 /* Ring stopped? */ 1116 /* Ring stopped? */
1103 if (INTEL_GEN(dev_priv) > 2 && !(I915_READ_MODE(engine) & MODE_IDLE)) 1117 if (!ring_is_idle(engine))
1104 return false; 1118 return false;
1105 1119
1106 return true; 1120 return true;
diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
index ded2add18b26..d93c58410bff 100644
--- a/drivers/gpu/drm/i915/intel_fbc.c
+++ b/drivers/gpu/drm/i915/intel_fbc.c
@@ -82,20 +82,10 @@ static unsigned int get_crtc_fence_y_offset(struct intel_crtc *crtc)
82static void intel_fbc_get_plane_source_size(struct intel_fbc_state_cache *cache, 82static void intel_fbc_get_plane_source_size(struct intel_fbc_state_cache *cache,
83 int *width, int *height) 83 int *width, int *height)
84{ 84{
85 int w, h;
86
87 if (drm_rotation_90_or_270(cache->plane.rotation)) {
88 w = cache->plane.src_h;
89 h = cache->plane.src_w;
90 } else {
91 w = cache->plane.src_w;
92 h = cache->plane.src_h;
93 }
94
95 if (width) 85 if (width)
96 *width = w; 86 *width = cache->plane.src_w;
97 if (height) 87 if (height)
98 *height = h; 88 *height = cache->plane.src_h;
99} 89}
100 90
101static int intel_fbc_calculate_cfb_size(struct drm_i915_private *dev_priv, 91static int intel_fbc_calculate_cfb_size(struct drm_i915_private *dev_priv,
@@ -746,6 +736,11 @@ static void intel_fbc_update_state_cache(struct intel_crtc *crtc,
746 cache->crtc.hsw_bdw_pixel_rate = crtc_state->pixel_rate; 736 cache->crtc.hsw_bdw_pixel_rate = crtc_state->pixel_rate;
747 737
748 cache->plane.rotation = plane_state->base.rotation; 738 cache->plane.rotation = plane_state->base.rotation;
739 /*
740 * Src coordinates are already rotated by 270 degrees for
741 * the 90/270 degree plane rotation cases (to match the
742 * GTT mapping), hence no need to account for rotation here.
743 */
749 cache->plane.src_w = drm_rect_width(&plane_state->base.src) >> 16; 744 cache->plane.src_w = drm_rect_width(&plane_state->base.src) >> 16;
750 cache->plane.src_h = drm_rect_height(&plane_state->base.src) >> 16; 745 cache->plane.src_h = drm_rect_height(&plane_state->base.src) >> 16;
751 cache->plane.visible = plane_state->base.visible; 746 cache->plane.visible = plane_state->base.visible;
diff --git a/drivers/gpu/drm/i915/intel_lpe_audio.c b/drivers/gpu/drm/i915/intel_lpe_audio.c
index 668f00480d97..292fedf30b00 100644
--- a/drivers/gpu/drm/i915/intel_lpe_audio.c
+++ b/drivers/gpu/drm/i915/intel_lpe_audio.c
@@ -149,44 +149,10 @@ static void lpe_audio_platdev_destroy(struct drm_i915_private *dev_priv)
149 149
150static void lpe_audio_irq_unmask(struct irq_data *d) 150static void lpe_audio_irq_unmask(struct irq_data *d)
151{ 151{
152 struct drm_i915_private *dev_priv = d->chip_data;
153 unsigned long irqflags;
154 u32 val = (I915_LPE_PIPE_A_INTERRUPT |
155 I915_LPE_PIPE_B_INTERRUPT);
156
157 if (IS_CHERRYVIEW(dev_priv))
158 val |= I915_LPE_PIPE_C_INTERRUPT;
159
160 spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
161
162 dev_priv->irq_mask &= ~val;
163 I915_WRITE(VLV_IIR, val);
164 I915_WRITE(VLV_IIR, val);
165 I915_WRITE(VLV_IMR, dev_priv->irq_mask);
166 POSTING_READ(VLV_IMR);
167
168 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
169} 152}
170 153
171static void lpe_audio_irq_mask(struct irq_data *d) 154static void lpe_audio_irq_mask(struct irq_data *d)
172{ 155{
173 struct drm_i915_private *dev_priv = d->chip_data;
174 unsigned long irqflags;
175 u32 val = (I915_LPE_PIPE_A_INTERRUPT |
176 I915_LPE_PIPE_B_INTERRUPT);
177
178 if (IS_CHERRYVIEW(dev_priv))
179 val |= I915_LPE_PIPE_C_INTERRUPT;
180
181 spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
182
183 dev_priv->irq_mask |= val;
184 I915_WRITE(VLV_IMR, dev_priv->irq_mask);
185 I915_WRITE(VLV_IIR, val);
186 I915_WRITE(VLV_IIR, val);
187 POSTING_READ(VLV_IIR);
188
189 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
190} 156}
191 157
192static struct irq_chip lpe_audio_irqchip = { 158static struct irq_chip lpe_audio_irqchip = {
@@ -330,8 +296,6 @@ void intel_lpe_audio_teardown(struct drm_i915_private *dev_priv)
330 296
331 desc = irq_to_desc(dev_priv->lpe_audio.irq); 297 desc = irq_to_desc(dev_priv->lpe_audio.irq);
332 298
333 lpe_audio_irq_mask(&desc->irq_data);
334
335 lpe_audio_platdev_destroy(dev_priv); 299 lpe_audio_platdev_destroy(dev_priv);
336 300
337 irq_free_desc(dev_priv->lpe_audio.irq); 301 irq_free_desc(dev_priv->lpe_audio.irq);
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index c8f7c631fc1f..62f44d3e7c43 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -326,8 +326,7 @@ static u64 execlists_update_context(struct drm_i915_gem_request *rq)
326 rq->ctx->ppgtt ?: rq->i915->mm.aliasing_ppgtt; 326 rq->ctx->ppgtt ?: rq->i915->mm.aliasing_ppgtt;
327 u32 *reg_state = ce->lrc_reg_state; 327 u32 *reg_state = ce->lrc_reg_state;
328 328
329 assert_ring_tail_valid(rq->ring, rq->tail); 329 reg_state[CTX_RING_TAIL+1] = intel_ring_set_tail(rq->ring, rq->tail);
330 reg_state[CTX_RING_TAIL+1] = rq->tail;
331 330
332 /* True 32b PPGTT with dynamic page allocation: update PDP 331 /* True 32b PPGTT with dynamic page allocation: update PDP
333 * registers and point the unallocated PDPs to scratch page. 332 * registers and point the unallocated PDPs to scratch page.
@@ -1989,7 +1988,7 @@ static int execlists_context_deferred_alloc(struct i915_gem_context *ctx,
1989 1988
1990 ce->ring = ring; 1989 ce->ring = ring;
1991 ce->state = vma; 1990 ce->state = vma;
1992 ce->initialised = engine->init_context == NULL; 1991 ce->initialised |= engine->init_context == NULL;
1993 1992
1994 return 0; 1993 return 0;
1995 1994
@@ -2036,8 +2035,7 @@ void intel_lr_context_resume(struct drm_i915_private *dev_priv)
2036 ce->state->obj->mm.dirty = true; 2035 ce->state->obj->mm.dirty = true;
2037 i915_gem_object_unpin_map(ce->state->obj); 2036 i915_gem_object_unpin_map(ce->state->obj);
2038 2037
2039 ce->ring->head = ce->ring->tail = 0; 2038 intel_ring_reset(ce->ring, 0);
2040 intel_ring_update_space(ce->ring);
2041 } 2039 }
2042 } 2040 }
2043} 2041}
diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
index 71cbe9c08932..5abef482eacf 100644
--- a/drivers/gpu/drm/i915/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/intel_lspcon.c
@@ -240,7 +240,7 @@ bool lspcon_init(struct intel_digital_port *intel_dig_port)
240 return false; 240 return false;
241 } 241 }
242 242
243 intel_dp_read_desc(dp); 243 drm_dp_read_desc(&dp->aux, &dp->desc, drm_dp_is_branch(dp->dpcd));
244 244
245 DRM_DEBUG_KMS("Success: LSPCON init\n"); 245 DRM_DEBUG_KMS("Success: LSPCON init\n");
246 return true; 246 return true;
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 570bd603f401..078fd1bfa5ea 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3373,20 +3373,26 @@ skl_plane_downscale_amount(const struct intel_crtc_state *cstate,
3373 3373
3374 /* n.b., src is 16.16 fixed point, dst is whole integer */ 3374 /* n.b., src is 16.16 fixed point, dst is whole integer */
3375 if (plane->id == PLANE_CURSOR) { 3375 if (plane->id == PLANE_CURSOR) {
3376 /*
3377 * Cursors only support 0/180 degree rotation,
3378 * hence no need to account for rotation here.
3379 */
3376 src_w = pstate->base.src_w; 3380 src_w = pstate->base.src_w;
3377 src_h = pstate->base.src_h; 3381 src_h = pstate->base.src_h;
3378 dst_w = pstate->base.crtc_w; 3382 dst_w = pstate->base.crtc_w;
3379 dst_h = pstate->base.crtc_h; 3383 dst_h = pstate->base.crtc_h;
3380 } else { 3384 } else {
3385 /*
3386 * Src coordinates are already rotated by 270 degrees for
3387 * the 90/270 degree plane rotation cases (to match the
3388 * GTT mapping), hence no need to account for rotation here.
3389 */
3381 src_w = drm_rect_width(&pstate->base.src); 3390 src_w = drm_rect_width(&pstate->base.src);
3382 src_h = drm_rect_height(&pstate->base.src); 3391 src_h = drm_rect_height(&pstate->base.src);
3383 dst_w = drm_rect_width(&pstate->base.dst); 3392 dst_w = drm_rect_width(&pstate->base.dst);
3384 dst_h = drm_rect_height(&pstate->base.dst); 3393 dst_h = drm_rect_height(&pstate->base.dst);
3385 } 3394 }
3386 3395
3387 if (drm_rotation_90_or_270(pstate->base.rotation))
3388 swap(dst_w, dst_h);
3389
3390 downscale_h = max(src_h / dst_h, (uint32_t)DRM_PLANE_HELPER_NO_SCALING); 3396 downscale_h = max(src_h / dst_h, (uint32_t)DRM_PLANE_HELPER_NO_SCALING);
3391 downscale_w = max(src_w / dst_w, (uint32_t)DRM_PLANE_HELPER_NO_SCALING); 3397 downscale_w = max(src_w / dst_w, (uint32_t)DRM_PLANE_HELPER_NO_SCALING);
3392 3398
@@ -3417,12 +3423,14 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate,
3417 if (y && format != DRM_FORMAT_NV12) 3423 if (y && format != DRM_FORMAT_NV12)
3418 return 0; 3424 return 0;
3419 3425
3426 /*
3427 * Src coordinates are already rotated by 270 degrees for
3428 * the 90/270 degree plane rotation cases (to match the
3429 * GTT mapping), hence no need to account for rotation here.
3430 */
3420 width = drm_rect_width(&intel_pstate->base.src) >> 16; 3431 width = drm_rect_width(&intel_pstate->base.src) >> 16;
3421 height = drm_rect_height(&intel_pstate->base.src) >> 16; 3432 height = drm_rect_height(&intel_pstate->base.src) >> 16;
3422 3433
3423 if (drm_rotation_90_or_270(pstate->rotation))
3424 swap(width, height);
3425
3426 /* for planar format */ 3434 /* for planar format */
3427 if (format == DRM_FORMAT_NV12) { 3435 if (format == DRM_FORMAT_NV12) {
3428 if (y) /* y-plane data rate */ 3436 if (y) /* y-plane data rate */
@@ -3505,12 +3513,14 @@ skl_ddb_min_alloc(const struct drm_plane_state *pstate,
3505 fb->modifier != I915_FORMAT_MOD_Yf_TILED) 3513 fb->modifier != I915_FORMAT_MOD_Yf_TILED)
3506 return 8; 3514 return 8;
3507 3515
3516 /*
3517 * Src coordinates are already rotated by 270 degrees for
3518 * the 90/270 degree plane rotation cases (to match the
3519 * GTT mapping), hence no need to account for rotation here.
3520 */
3508 src_w = drm_rect_width(&intel_pstate->base.src) >> 16; 3521 src_w = drm_rect_width(&intel_pstate->base.src) >> 16;
3509 src_h = drm_rect_height(&intel_pstate->base.src) >> 16; 3522 src_h = drm_rect_height(&intel_pstate->base.src) >> 16;
3510 3523
3511 if (drm_rotation_90_or_270(pstate->rotation))
3512 swap(src_w, src_h);
3513
3514 /* Halve UV plane width and height for NV12 */ 3524 /* Halve UV plane width and height for NV12 */
3515 if (fb->format->format == DRM_FORMAT_NV12 && !y) { 3525 if (fb->format->format == DRM_FORMAT_NV12 && !y) {
3516 src_w /= 2; 3526 src_w /= 2;
@@ -3794,13 +3804,15 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv,
3794 width = intel_pstate->base.crtc_w; 3804 width = intel_pstate->base.crtc_w;
3795 height = intel_pstate->base.crtc_h; 3805 height = intel_pstate->base.crtc_h;
3796 } else { 3806 } else {
3807 /*
3808 * Src coordinates are already rotated by 270 degrees for
3809 * the 90/270 degree plane rotation cases (to match the
3810 * GTT mapping), hence no need to account for rotation here.
3811 */
3797 width = drm_rect_width(&intel_pstate->base.src) >> 16; 3812 width = drm_rect_width(&intel_pstate->base.src) >> 16;
3798 height = drm_rect_height(&intel_pstate->base.src) >> 16; 3813 height = drm_rect_height(&intel_pstate->base.src) >> 16;
3799 } 3814 }
3800 3815
3801 if (drm_rotation_90_or_270(pstate->rotation))
3802 swap(width, height);
3803
3804 cpp = fb->format->cpp[0]; 3816 cpp = fb->format->cpp[0];
3805 plane_pixel_rate = skl_adjusted_plane_pixel_rate(cstate, intel_pstate); 3817 plane_pixel_rate = skl_adjusted_plane_pixel_rate(cstate, intel_pstate);
3806 3818
@@ -4335,11 +4347,19 @@ skl_compute_wm(struct drm_atomic_state *state)
4335 struct drm_crtc_state *cstate; 4347 struct drm_crtc_state *cstate;
4336 struct intel_atomic_state *intel_state = to_intel_atomic_state(state); 4348 struct intel_atomic_state *intel_state = to_intel_atomic_state(state);
4337 struct skl_wm_values *results = &intel_state->wm_results; 4349 struct skl_wm_values *results = &intel_state->wm_results;
4350 struct drm_device *dev = state->dev;
4338 struct skl_pipe_wm *pipe_wm; 4351 struct skl_pipe_wm *pipe_wm;
4339 bool changed = false; 4352 bool changed = false;
4340 int ret, i; 4353 int ret, i;
4341 4354
4342 /* 4355 /*
4356 * When we distrust bios wm we always need to recompute to set the
4357 * expected DDB allocations for each CRTC.
4358 */
4359 if (to_i915(dev)->wm.distrust_bios_wm)
4360 changed = true;
4361
4362 /*
4343 * If this transaction isn't actually touching any CRTC's, don't 4363 * If this transaction isn't actually touching any CRTC's, don't
4344 * bother with watermark calculation. Note that if we pass this 4364 * bother with watermark calculation. Note that if we pass this
4345 * test, we're guaranteed to hold at least one CRTC state mutex, 4365 * test, we're guaranteed to hold at least one CRTC state mutex,
@@ -4349,6 +4369,7 @@ skl_compute_wm(struct drm_atomic_state *state)
4349 */ 4369 */
4350 for_each_new_crtc_in_state(state, crtc, cstate, i) 4370 for_each_new_crtc_in_state(state, crtc, cstate, i)
4351 changed = true; 4371 changed = true;
4372
4352 if (!changed) 4373 if (!changed)
4353 return 0; 4374 return 0;
4354 4375
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index c3780d0d2baf..559f1ab42bfc 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -435,8 +435,9 @@ static bool intel_psr_match_conditions(struct intel_dp *intel_dp)
435 } 435 }
436 436
437 /* PSR2 is restricted to work with panel resolutions upto 3200x2000 */ 437 /* PSR2 is restricted to work with panel resolutions upto 3200x2000 */
438 if (intel_crtc->config->pipe_src_w > 3200 || 438 if (dev_priv->psr.psr2_support &&
439 intel_crtc->config->pipe_src_h > 2000) { 439 (intel_crtc->config->pipe_src_w > 3200 ||
440 intel_crtc->config->pipe_src_h > 2000)) {
440 dev_priv->psr.psr2_support = false; 441 dev_priv->psr.psr2_support = false;
441 return false; 442 return false;
442 } 443 }
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 66a2b8b83972..513a0f4b469b 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -49,7 +49,7 @@ static int __intel_ring_space(int head, int tail, int size)
49 49
50void intel_ring_update_space(struct intel_ring *ring) 50void intel_ring_update_space(struct intel_ring *ring)
51{ 51{
52 ring->space = __intel_ring_space(ring->head, ring->tail, ring->size); 52 ring->space = __intel_ring_space(ring->head, ring->emit, ring->size);
53} 53}
54 54
55static int 55static int
@@ -774,8 +774,8 @@ static void i9xx_submit_request(struct drm_i915_gem_request *request)
774 774
775 i915_gem_request_submit(request); 775 i915_gem_request_submit(request);
776 776
777 assert_ring_tail_valid(request->ring, request->tail); 777 I915_WRITE_TAIL(request->engine,
778 I915_WRITE_TAIL(request->engine, request->tail); 778 intel_ring_set_tail(request->ring, request->tail));
779} 779}
780 780
781static void i9xx_emit_breadcrumb(struct drm_i915_gem_request *req, u32 *cs) 781static void i9xx_emit_breadcrumb(struct drm_i915_gem_request *req, u32 *cs)
@@ -1316,11 +1316,23 @@ err:
1316 return PTR_ERR(addr); 1316 return PTR_ERR(addr);
1317} 1317}
1318 1318
1319void intel_ring_reset(struct intel_ring *ring, u32 tail)
1320{
1321 GEM_BUG_ON(!list_empty(&ring->request_list));
1322 ring->tail = tail;
1323 ring->head = tail;
1324 ring->emit = tail;
1325 intel_ring_update_space(ring);
1326}
1327
1319void intel_ring_unpin(struct intel_ring *ring) 1328void intel_ring_unpin(struct intel_ring *ring)
1320{ 1329{
1321 GEM_BUG_ON(!ring->vma); 1330 GEM_BUG_ON(!ring->vma);
1322 GEM_BUG_ON(!ring->vaddr); 1331 GEM_BUG_ON(!ring->vaddr);
1323 1332
1333 /* Discard any unused bytes beyond that submitted to hw. */
1334 intel_ring_reset(ring, ring->tail);
1335
1324 if (i915_vma_is_map_and_fenceable(ring->vma)) 1336 if (i915_vma_is_map_and_fenceable(ring->vma))
1325 i915_vma_unpin_iomap(ring->vma); 1337 i915_vma_unpin_iomap(ring->vma);
1326 else 1338 else
@@ -1562,8 +1574,9 @@ void intel_legacy_submission_resume(struct drm_i915_private *dev_priv)
1562 struct intel_engine_cs *engine; 1574 struct intel_engine_cs *engine;
1563 enum intel_engine_id id; 1575 enum intel_engine_id id;
1564 1576
1577 /* Restart from the beginning of the rings for convenience */
1565 for_each_engine(engine, dev_priv, id) 1578 for_each_engine(engine, dev_priv, id)
1566 engine->buffer->head = engine->buffer->tail; 1579 intel_ring_reset(engine->buffer, 0);
1567} 1580}
1568 1581
1569static int ring_request_alloc(struct drm_i915_gem_request *request) 1582static int ring_request_alloc(struct drm_i915_gem_request *request)
@@ -1616,7 +1629,7 @@ static int wait_for_space(struct drm_i915_gem_request *req, int bytes)
1616 unsigned space; 1629 unsigned space;
1617 1630
1618 /* Would completion of this request free enough space? */ 1631 /* Would completion of this request free enough space? */
1619 space = __intel_ring_space(target->postfix, ring->tail, 1632 space = __intel_ring_space(target->postfix, ring->emit,
1620 ring->size); 1633 ring->size);
1621 if (space >= bytes) 1634 if (space >= bytes)
1622 break; 1635 break;
@@ -1641,8 +1654,8 @@ static int wait_for_space(struct drm_i915_gem_request *req, int bytes)
1641u32 *intel_ring_begin(struct drm_i915_gem_request *req, int num_dwords) 1654u32 *intel_ring_begin(struct drm_i915_gem_request *req, int num_dwords)
1642{ 1655{
1643 struct intel_ring *ring = req->ring; 1656 struct intel_ring *ring = req->ring;
1644 int remain_actual = ring->size - ring->tail; 1657 int remain_actual = ring->size - ring->emit;
1645 int remain_usable = ring->effective_size - ring->tail; 1658 int remain_usable = ring->effective_size - ring->emit;
1646 int bytes = num_dwords * sizeof(u32); 1659 int bytes = num_dwords * sizeof(u32);
1647 int total_bytes, wait_bytes; 1660 int total_bytes, wait_bytes;
1648 bool need_wrap = false; 1661 bool need_wrap = false;
@@ -1678,17 +1691,17 @@ u32 *intel_ring_begin(struct drm_i915_gem_request *req, int num_dwords)
1678 1691
1679 if (unlikely(need_wrap)) { 1692 if (unlikely(need_wrap)) {
1680 GEM_BUG_ON(remain_actual > ring->space); 1693 GEM_BUG_ON(remain_actual > ring->space);
1681 GEM_BUG_ON(ring->tail + remain_actual > ring->size); 1694 GEM_BUG_ON(ring->emit + remain_actual > ring->size);
1682 1695
1683 /* Fill the tail with MI_NOOP */ 1696 /* Fill the tail with MI_NOOP */
1684 memset(ring->vaddr + ring->tail, 0, remain_actual); 1697 memset(ring->vaddr + ring->emit, 0, remain_actual);
1685 ring->tail = 0; 1698 ring->emit = 0;
1686 ring->space -= remain_actual; 1699 ring->space -= remain_actual;
1687 } 1700 }
1688 1701
1689 GEM_BUG_ON(ring->tail > ring->size - bytes); 1702 GEM_BUG_ON(ring->emit > ring->size - bytes);
1690 cs = ring->vaddr + ring->tail; 1703 cs = ring->vaddr + ring->emit;
1691 ring->tail += bytes; 1704 ring->emit += bytes;
1692 ring->space -= bytes; 1705 ring->space -= bytes;
1693 GEM_BUG_ON(ring->space < 0); 1706 GEM_BUG_ON(ring->space < 0);
1694 1707
@@ -1699,7 +1712,7 @@ u32 *intel_ring_begin(struct drm_i915_gem_request *req, int num_dwords)
1699int intel_ring_cacheline_align(struct drm_i915_gem_request *req) 1712int intel_ring_cacheline_align(struct drm_i915_gem_request *req)
1700{ 1713{
1701 int num_dwords = 1714 int num_dwords =
1702 (req->ring->tail & (CACHELINE_BYTES - 1)) / sizeof(uint32_t); 1715 (req->ring->emit & (CACHELINE_BYTES - 1)) / sizeof(uint32_t);
1703 u32 *cs; 1716 u32 *cs;
1704 1717
1705 if (num_dwords == 0) 1718 if (num_dwords == 0)
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index a82a0807f64d..f7144fe09613 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -145,6 +145,7 @@ struct intel_ring {
145 145
146 u32 head; 146 u32 head;
147 u32 tail; 147 u32 tail;
148 u32 emit;
148 149
149 int space; 150 int space;
150 int size; 151 int size;
@@ -488,6 +489,8 @@ intel_write_status_page(struct intel_engine_cs *engine, int reg, u32 value)
488struct intel_ring * 489struct intel_ring *
489intel_engine_create_ring(struct intel_engine_cs *engine, int size); 490intel_engine_create_ring(struct intel_engine_cs *engine, int size);
490int intel_ring_pin(struct intel_ring *ring, unsigned int offset_bias); 491int intel_ring_pin(struct intel_ring *ring, unsigned int offset_bias);
492void intel_ring_reset(struct intel_ring *ring, u32 tail);
493void intel_ring_update_space(struct intel_ring *ring);
491void intel_ring_unpin(struct intel_ring *ring); 494void intel_ring_unpin(struct intel_ring *ring);
492void intel_ring_free(struct intel_ring *ring); 495void intel_ring_free(struct intel_ring *ring);
493 496
@@ -511,7 +514,7 @@ intel_ring_advance(struct drm_i915_gem_request *req, u32 *cs)
511 * reserved for the command packet (i.e. the value passed to 514 * reserved for the command packet (i.e. the value passed to
512 * intel_ring_begin()). 515 * intel_ring_begin()).
513 */ 516 */
514 GEM_BUG_ON((req->ring->vaddr + req->ring->tail) != cs); 517 GEM_BUG_ON((req->ring->vaddr + req->ring->emit) != cs);
515} 518}
516 519
517static inline u32 520static inline u32
@@ -540,7 +543,19 @@ assert_ring_tail_valid(const struct intel_ring *ring, unsigned int tail)
540 GEM_BUG_ON(tail >= ring->size); 543 GEM_BUG_ON(tail >= ring->size);
541} 544}
542 545
543void intel_ring_update_space(struct intel_ring *ring); 546static inline unsigned int
547intel_ring_set_tail(struct intel_ring *ring, unsigned int tail)
548{
549 /* Whilst writes to the tail are strictly order, there is no
550 * serialisation between readers and the writers. The tail may be
551 * read by i915_gem_request_retire() just as it is being updated
552 * by execlists, as although the breadcrumb is complete, the context
553 * switch hasn't been seen.
554 */
555 assert_ring_tail_valid(ring, tail);
556 ring->tail = tail;
557 return tail;
558}
544 559
545void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno); 560void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno);
546 561
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 8c87c717c7cd..e6517edcd16b 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -83,10 +83,13 @@ int intel_usecs_to_scanlines(const struct drm_display_mode *adjusted_mode,
83 */ 83 */
84void intel_pipe_update_start(struct intel_crtc *crtc) 84void intel_pipe_update_start(struct intel_crtc *crtc)
85{ 85{
86 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
86 const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode; 87 const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
87 long timeout = msecs_to_jiffies_timeout(1); 88 long timeout = msecs_to_jiffies_timeout(1);
88 int scanline, min, max, vblank_start; 89 int scanline, min, max, vblank_start;
89 wait_queue_head_t *wq = drm_crtc_vblank_waitqueue(&crtc->base); 90 wait_queue_head_t *wq = drm_crtc_vblank_waitqueue(&crtc->base);
91 bool need_vlv_dsi_wa = (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
92 intel_crtc_has_type(crtc->config, INTEL_OUTPUT_DSI);
90 DEFINE_WAIT(wait); 93 DEFINE_WAIT(wait);
91 94
92 vblank_start = adjusted_mode->crtc_vblank_start; 95 vblank_start = adjusted_mode->crtc_vblank_start;
@@ -139,6 +142,24 @@ void intel_pipe_update_start(struct intel_crtc *crtc)
139 142
140 drm_crtc_vblank_put(&crtc->base); 143 drm_crtc_vblank_put(&crtc->base);
141 144
145 /*
146 * On VLV/CHV DSI the scanline counter would appear to
147 * increment approx. 1/3 of a scanline before start of vblank.
148 * The registers still get latched at start of vblank however.
149 * This means we must not write any registers on the first
150 * line of vblank (since not the whole line is actually in
151 * vblank). And unfortunately we can't use the interrupt to
152 * wait here since it will fire too soon. We could use the
153 * frame start interrupt instead since it will fire after the
154 * critical scanline, but that would require more changes
155 * in the interrupt code. So for now we'll just do the nasty
156 * thing and poll for the bad scanline to pass us by.
157 *
158 * FIXME figure out if BXT+ DSI suffers from this as well
159 */
160 while (need_vlv_dsi_wa && scanline == vblank_start)
161 scanline = intel_get_crtc_scanline(crtc);
162
142 crtc->debug.scanline_start = scanline; 163 crtc->debug.scanline_start = scanline;
143 crtc->debug.start_vbl_time = ktime_get(); 164 crtc->debug.start_vbl_time = ktime_get();
144 crtc->debug.start_vbl_count = intel_crtc_get_vblank_counter(crtc); 165 crtc->debug.start_vbl_count = intel_crtc_get_vblank_counter(crtc);
diff --git a/drivers/gpu/drm/i915/intel_uc.h b/drivers/gpu/drm/i915/intel_uc.h
index 4b7f73aeddac..f84115261ae7 100644
--- a/drivers/gpu/drm/i915/intel_uc.h
+++ b/drivers/gpu/drm/i915/intel_uc.h
@@ -59,8 +59,6 @@ struct drm_i915_gem_request;
59 * available in the work queue (note, the queue is shared, 59 * available in the work queue (note, the queue is shared,
60 * not per-engine). It is OK for this to be nonzero, but 60 * not per-engine). It is OK for this to be nonzero, but
61 * it should not be huge! 61 * it should not be huge!
62 * q_fail: failed to enqueue a work item. This should never happen,
63 * because we check for space beforehand.
64 * b_fail: failed to ring the doorbell. This should never happen, unless 62 * b_fail: failed to ring the doorbell. This should never happen, unless
65 * somehow the hardware misbehaves, or maybe if the GuC firmware 63 * somehow the hardware misbehaves, or maybe if the GuC firmware
66 * crashes? We probably need to reset the GPU to recover. 64 * crashes? We probably need to reset the GPU to recover.
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/selftests/i915_gem_context.c
index 1afb8b06e3e1..12b85b3278cd 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_context.c
@@ -320,7 +320,7 @@ static unsigned long max_dwords(struct drm_i915_gem_object *obj)
320static int igt_ctx_exec(void *arg) 320static int igt_ctx_exec(void *arg)
321{ 321{
322 struct drm_i915_private *i915 = arg; 322 struct drm_i915_private *i915 = arg;
323 struct drm_i915_gem_object *obj; 323 struct drm_i915_gem_object *obj = NULL;
324 struct drm_file *file; 324 struct drm_file *file;
325 IGT_TIMEOUT(end_time); 325 IGT_TIMEOUT(end_time);
326 LIST_HEAD(objects); 326 LIST_HEAD(objects);
@@ -359,7 +359,7 @@ static int igt_ctx_exec(void *arg)
359 } 359 }
360 360
361 for_each_engine(engine, i915, id) { 361 for_each_engine(engine, i915, id) {
362 if (dw == 0) { 362 if (!obj) {
363 obj = create_test_object(ctx, file, &objects); 363 obj = create_test_object(ctx, file, &objects);
364 if (IS_ERR(obj)) { 364 if (IS_ERR(obj)) {
365 err = PTR_ERR(obj); 365 err = PTR_ERR(obj);
@@ -376,8 +376,10 @@ static int igt_ctx_exec(void *arg)
376 goto out_unlock; 376 goto out_unlock;
377 } 377 }
378 378
379 if (++dw == max_dwords(obj)) 379 if (++dw == max_dwords(obj)) {
380 obj = NULL;
380 dw = 0; 381 dw = 0;
382 }
381 ndwords++; 383 ndwords++;
382 } 384 }
383 ncontexts++; 385 ncontexts++;
diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c
index 8fb801fab039..8b05ecb8fdef 100644
--- a/drivers/gpu/drm/imx/imx-ldb.c
+++ b/drivers/gpu/drm/imx/imx-ldb.c
@@ -673,7 +673,7 @@ static int imx_ldb_bind(struct device *dev, struct device *master, void *data)
673 ret = drm_of_find_panel_or_bridge(child, 673 ret = drm_of_find_panel_or_bridge(child,
674 imx_ldb->lvds_mux ? 4 : 2, 0, 674 imx_ldb->lvds_mux ? 4 : 2, 0,
675 &channel->panel, &channel->bridge); 675 &channel->panel, &channel->bridge);
676 if (ret) 676 if (ret && ret != -ENODEV)
677 return ret; 677 return ret;
678 678
679 /* panel ddc only if there is no bridge */ 679 /* panel ddc only if there is no bridge */
diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
index 808b995a990f..b5cc6e12334c 100644
--- a/drivers/gpu/drm/mediatek/mtk_dsi.c
+++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
@@ -19,6 +19,7 @@
19#include <drm/drm_of.h> 19#include <drm/drm_of.h>
20#include <linux/clk.h> 20#include <linux/clk.h>
21#include <linux/component.h> 21#include <linux/component.h>
22#include <linux/iopoll.h>
22#include <linux/irq.h> 23#include <linux/irq.h>
23#include <linux/of.h> 24#include <linux/of.h>
24#include <linux/of_platform.h> 25#include <linux/of_platform.h>
@@ -900,16 +901,12 @@ static int mtk_dsi_host_detach(struct mipi_dsi_host *host,
900 901
901static void mtk_dsi_wait_for_idle(struct mtk_dsi *dsi) 902static void mtk_dsi_wait_for_idle(struct mtk_dsi *dsi)
902{ 903{
903 u32 timeout_ms = 500000; /* total 1s ~ 2s timeout */ 904 int ret;
904 905 u32 val;
905 while (timeout_ms--) {
906 if (!(readl(dsi->regs + DSI_INTSTA) & DSI_BUSY))
907 break;
908
909 usleep_range(2, 4);
910 }
911 906
912 if (timeout_ms == 0) { 907 ret = readl_poll_timeout(dsi->regs + DSI_INTSTA, val, !(val & DSI_BUSY),
908 4, 2000000);
909 if (ret) {
913 DRM_WARN("polling dsi wait not busy timeout!\n"); 910 DRM_WARN("polling dsi wait not busy timeout!\n");
914 911
915 mtk_dsi_enable(dsi); 912 mtk_dsi_enable(dsi);
diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
index 41a1c03b0347..0a4ffd724146 100644
--- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
+++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
@@ -1062,7 +1062,7 @@ static int mtk_hdmi_setup_vendor_specific_infoframe(struct mtk_hdmi *hdmi,
1062 } 1062 }
1063 1063
1064 err = hdmi_vendor_infoframe_pack(&frame, buffer, sizeof(buffer)); 1064 err = hdmi_vendor_infoframe_pack(&frame, buffer, sizeof(buffer));
1065 if (err) { 1065 if (err < 0) {
1066 dev_err(hdmi->dev, "Failed to pack vendor infoframe: %zd\n", 1066 dev_err(hdmi->dev, "Failed to pack vendor infoframe: %zd\n",
1067 err); 1067 err);
1068 return err; 1068 return err;
diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
index 75382f5f0fce..10b227d83e9a 100644
--- a/drivers/gpu/drm/meson/meson_drv.c
+++ b/drivers/gpu/drm/meson/meson_drv.c
@@ -152,7 +152,7 @@ static struct regmap_config meson_regmap_config = {
152 .max_register = 0x1000, 152 .max_register = 0x1000,
153}; 153};
154 154
155static int meson_drv_bind(struct device *dev) 155static int meson_drv_bind_master(struct device *dev, bool has_components)
156{ 156{
157 struct platform_device *pdev = to_platform_device(dev); 157 struct platform_device *pdev = to_platform_device(dev);
158 struct meson_drm *priv; 158 struct meson_drm *priv;
@@ -233,10 +233,12 @@ static int meson_drv_bind(struct device *dev)
233 if (ret) 233 if (ret)
234 goto free_drm; 234 goto free_drm;
235 235
236 ret = component_bind_all(drm->dev, drm); 236 if (has_components) {
237 if (ret) { 237 ret = component_bind_all(drm->dev, drm);
238 dev_err(drm->dev, "Couldn't bind all components\n"); 238 if (ret) {
239 goto free_drm; 239 dev_err(drm->dev, "Couldn't bind all components\n");
240 goto free_drm;
241 }
240 } 242 }
241 243
242 ret = meson_plane_create(priv); 244 ret = meson_plane_create(priv);
@@ -276,6 +278,11 @@ free_drm:
276 return ret; 278 return ret;
277} 279}
278 280
281static int meson_drv_bind(struct device *dev)
282{
283 return meson_drv_bind_master(dev, true);
284}
285
279static void meson_drv_unbind(struct device *dev) 286static void meson_drv_unbind(struct device *dev)
280{ 287{
281 struct drm_device *drm = dev_get_drvdata(dev); 288 struct drm_device *drm = dev_get_drvdata(dev);
@@ -357,6 +364,9 @@ static int meson_drv_probe(struct platform_device *pdev)
357 count += meson_probe_remote(pdev, &match, np, remote); 364 count += meson_probe_remote(pdev, &match, np, remote);
358 } 365 }
359 366
367 if (count && !match)
368 return meson_drv_bind_master(&pdev->dev, false);
369
360 /* If some endpoints were found, initialize the nodes */ 370 /* If some endpoints were found, initialize the nodes */
361 if (count) { 371 if (count) {
362 dev_info(&pdev->dev, "Queued %d outputs on vpu\n", count); 372 dev_info(&pdev->dev, "Queued %d outputs on vpu\n", count);
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
index adb411a078e8..f4b53588e071 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -1173,7 +1173,10 @@ static int mga_crtc_mode_set(struct drm_crtc *crtc,
1173 1173
1174 1174
1175 if (IS_G200_SE(mdev)) { 1175 if (IS_G200_SE(mdev)) {
1176 if (mdev->unique_rev_id >= 0x02) { 1176 if (mdev->unique_rev_id >= 0x04) {
1177 WREG8(MGAREG_CRTCEXT_INDEX, 0x06);
1178 WREG8(MGAREG_CRTCEXT_DATA, 0);
1179 } else if (mdev->unique_rev_id >= 0x02) {
1177 u8 hi_pri_lvl; 1180 u8 hi_pri_lvl;
1178 u32 bpp; 1181 u32 bpp;
1179 u32 mb; 1182 u32 mb;
@@ -1639,6 +1642,10 @@ static int mga_vga_mode_valid(struct drm_connector *connector,
1639 if (mga_vga_calculate_mode_bandwidth(mode, bpp) 1642 if (mga_vga_calculate_mode_bandwidth(mode, bpp)
1640 > (30100 * 1024)) 1643 > (30100 * 1024))
1641 return MODE_BANDWIDTH; 1644 return MODE_BANDWIDTH;
1645 } else {
1646 if (mga_vga_calculate_mode_bandwidth(mode, bpp)
1647 > (55000 * 1024))
1648 return MODE_BANDWIDTH;
1642 } 1649 }
1643 } else if (mdev->type == G200_WB) { 1650 } else if (mdev->type == G200_WB) {
1644 if (mode->hdisplay > 1280) 1651 if (mode->hdisplay > 1280)
diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
index 5b8e23d051f2..0a31cd6d01ce 100644
--- a/drivers/gpu/drm/msm/Kconfig
+++ b/drivers/gpu/drm/msm/Kconfig
@@ -13,6 +13,7 @@ config DRM_MSM
13 select QCOM_SCM 13 select QCOM_SCM
14 select SND_SOC_HDMI_CODEC if SND_SOC 14 select SND_SOC_HDMI_CODEC if SND_SOC
15 select SYNC_FILE 15 select SYNC_FILE
16 select PM_OPP
16 default y 17 default y
17 help 18 help
18 DRM/KMS driver for MSM/snapdragon. 19 DRM/KMS driver for MSM/snapdragon.
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_mdss.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_mdss.c
index f8f48d014978..9c34d7824988 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_mdss.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_mdss.c
@@ -116,7 +116,7 @@ static int mdss_hw_irqdomain_map(struct irq_domain *d, unsigned int irq,
116 return 0; 116 return 0;
117} 117}
118 118
119static struct irq_domain_ops mdss_hw_irqdomain_ops = { 119static const struct irq_domain_ops mdss_hw_irqdomain_ops = {
120 .map = mdss_hw_irqdomain_map, 120 .map = mdss_hw_irqdomain_map,
121 .xlate = irq_domain_xlate_onecell, 121 .xlate = irq_domain_xlate_onecell,
122}; 122};
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
index a38c5fe6cc19..7d3741215387 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
@@ -225,9 +225,10 @@ mdp5_plane_duplicate_state(struct drm_plane *plane)
225 225
226 mdp5_state = kmemdup(to_mdp5_plane_state(plane->state), 226 mdp5_state = kmemdup(to_mdp5_plane_state(plane->state),
227 sizeof(*mdp5_state), GFP_KERNEL); 227 sizeof(*mdp5_state), GFP_KERNEL);
228 if (!mdp5_state)
229 return NULL;
228 230
229 if (mdp5_state && mdp5_state->base.fb) 231 __drm_atomic_helper_plane_duplicate_state(plane, &mdp5_state->base);
230 drm_framebuffer_reference(mdp5_state->base.fb);
231 232
232 return &mdp5_state->base; 233 return &mdp5_state->base;
233} 234}
@@ -444,6 +445,10 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
444 mdp5_pipe_release(state->state, old_hwpipe); 445 mdp5_pipe_release(state->state, old_hwpipe);
445 mdp5_pipe_release(state->state, old_right_hwpipe); 446 mdp5_pipe_release(state->state, old_right_hwpipe);
446 } 447 }
448 } else {
449 mdp5_pipe_release(state->state, mdp5_state->hwpipe);
450 mdp5_pipe_release(state->state, mdp5_state->r_hwpipe);
451 mdp5_state->hwpipe = mdp5_state->r_hwpipe = NULL;
447 } 452 }
448 453
449 return 0; 454 return 0;
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 87b5695d4034..9d498eb81906 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -830,6 +830,7 @@ static struct drm_driver msm_driver = {
830 .prime_fd_to_handle = drm_gem_prime_fd_to_handle, 830 .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
831 .gem_prime_export = drm_gem_prime_export, 831 .gem_prime_export = drm_gem_prime_export,
832 .gem_prime_import = drm_gem_prime_import, 832 .gem_prime_import = drm_gem_prime_import,
833 .gem_prime_res_obj = msm_gem_prime_res_obj,
833 .gem_prime_pin = msm_gem_prime_pin, 834 .gem_prime_pin = msm_gem_prime_pin,
834 .gem_prime_unpin = msm_gem_prime_unpin, 835 .gem_prime_unpin = msm_gem_prime_unpin,
835 .gem_prime_get_sg_table = msm_gem_prime_get_sg_table, 836 .gem_prime_get_sg_table = msm_gem_prime_get_sg_table,
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index 28b6f9ba5066..1b26ca626528 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -224,6 +224,7 @@ struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj);
224void *msm_gem_prime_vmap(struct drm_gem_object *obj); 224void *msm_gem_prime_vmap(struct drm_gem_object *obj);
225void msm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); 225void msm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
226int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); 226int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
227struct reservation_object *msm_gem_prime_res_obj(struct drm_gem_object *obj);
227struct drm_gem_object *msm_gem_prime_import_sg_table(struct drm_device *dev, 228struct drm_gem_object *msm_gem_prime_import_sg_table(struct drm_device *dev,
228 struct dma_buf_attachment *attach, struct sg_table *sg); 229 struct dma_buf_attachment *attach, struct sg_table *sg);
229int msm_gem_prime_pin(struct drm_gem_object *obj); 230int msm_gem_prime_pin(struct drm_gem_object *obj);
diff --git a/drivers/gpu/drm/msm/msm_fence.c b/drivers/gpu/drm/msm/msm_fence.c
index 3f299c537b77..a2f89bac9c16 100644
--- a/drivers/gpu/drm/msm/msm_fence.c
+++ b/drivers/gpu/drm/msm/msm_fence.c
@@ -99,8 +99,8 @@ void msm_update_fence(struct msm_fence_context *fctx, uint32_t fence)
99} 99}
100 100
101struct msm_fence { 101struct msm_fence {
102 struct msm_fence_context *fctx;
103 struct dma_fence base; 102 struct dma_fence base;
103 struct msm_fence_context *fctx;
104}; 104};
105 105
106static inline struct msm_fence *to_msm_fence(struct dma_fence *fence) 106static inline struct msm_fence *to_msm_fence(struct dma_fence *fence)
@@ -130,19 +130,13 @@ static bool msm_fence_signaled(struct dma_fence *fence)
130 return fence_completed(f->fctx, f->base.seqno); 130 return fence_completed(f->fctx, f->base.seqno);
131} 131}
132 132
133static void msm_fence_release(struct dma_fence *fence)
134{
135 struct msm_fence *f = to_msm_fence(fence);
136 kfree_rcu(f, base.rcu);
137}
138
139static const struct dma_fence_ops msm_fence_ops = { 133static const struct dma_fence_ops msm_fence_ops = {
140 .get_driver_name = msm_fence_get_driver_name, 134 .get_driver_name = msm_fence_get_driver_name,
141 .get_timeline_name = msm_fence_get_timeline_name, 135 .get_timeline_name = msm_fence_get_timeline_name,
142 .enable_signaling = msm_fence_enable_signaling, 136 .enable_signaling = msm_fence_enable_signaling,
143 .signaled = msm_fence_signaled, 137 .signaled = msm_fence_signaled,
144 .wait = dma_fence_default_wait, 138 .wait = dma_fence_default_wait,
145 .release = msm_fence_release, 139 .release = dma_fence_free,
146}; 140};
147 141
148struct dma_fence * 142struct dma_fence *
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 68e509b3b9e4..50289a23baf8 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -758,6 +758,8 @@ static int msm_gem_new_impl(struct drm_device *dev,
758 struct msm_gem_object *msm_obj; 758 struct msm_gem_object *msm_obj;
759 bool use_vram = false; 759 bool use_vram = false;
760 760
761 WARN_ON(!mutex_is_locked(&dev->struct_mutex));
762
761 switch (flags & MSM_BO_CACHE_MASK) { 763 switch (flags & MSM_BO_CACHE_MASK) {
762 case MSM_BO_UNCACHED: 764 case MSM_BO_UNCACHED:
763 case MSM_BO_CACHED: 765 case MSM_BO_CACHED:
@@ -853,7 +855,11 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev,
853 855
854 size = PAGE_ALIGN(dmabuf->size); 856 size = PAGE_ALIGN(dmabuf->size);
855 857
858 /* Take mutex so we can modify the inactive list in msm_gem_new_impl */
859 mutex_lock(&dev->struct_mutex);
856 ret = msm_gem_new_impl(dev, size, MSM_BO_WC, dmabuf->resv, &obj); 860 ret = msm_gem_new_impl(dev, size, MSM_BO_WC, dmabuf->resv, &obj);
861 mutex_unlock(&dev->struct_mutex);
862
857 if (ret) 863 if (ret)
858 goto fail; 864 goto fail;
859 865
diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c b/drivers/gpu/drm/msm/msm_gem_prime.c
index 60bb290700ce..13403c6da6c7 100644
--- a/drivers/gpu/drm/msm/msm_gem_prime.c
+++ b/drivers/gpu/drm/msm/msm_gem_prime.c
@@ -70,3 +70,10 @@ void msm_gem_prime_unpin(struct drm_gem_object *obj)
70 if (!obj->import_attach) 70 if (!obj->import_attach)
71 msm_gem_put_pages(obj); 71 msm_gem_put_pages(obj);
72} 72}
73
74struct reservation_object *msm_gem_prime_res_obj(struct drm_gem_object *obj)
75{
76 struct msm_gem_object *msm_obj = to_msm_bo(obj);
77
78 return msm_obj->resv;
79}
diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c
index 1c545ebe6a5a..7832e6421d25 100644
--- a/drivers/gpu/drm/msm/msm_gem_submit.c
+++ b/drivers/gpu/drm/msm/msm_gem_submit.c
@@ -410,12 +410,11 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
410 if (!in_fence) 410 if (!in_fence)
411 return -EINVAL; 411 return -EINVAL;
412 412
413 /* TODO if we get an array-fence due to userspace merging multiple 413 /*
414 * fences, we need a way to determine if all the backing fences 414 * Wait if the fence is from a foreign context, or if the fence
415 * are from our own context.. 415 * array contains any fence from a foreign context.
416 */ 416 */
417 417 if (!dma_fence_match_context(in_fence, gpu->fctx->context)) {
418 if (in_fence->context != gpu->fctx->context) {
419 ret = dma_fence_wait(in_fence, true); 418 ret = dma_fence_wait(in_fence, true);
420 if (ret) 419 if (ret)
421 return ret; 420 return ret;
@@ -496,8 +495,9 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
496 goto out; 495 goto out;
497 } 496 }
498 497
499 if ((submit_cmd.size + submit_cmd.submit_offset) >= 498 if (!submit_cmd.size ||
500 msm_obj->base.size) { 499 ((submit_cmd.size + submit_cmd.submit_offset) >
500 msm_obj->base.size)) {
501 DRM_ERROR("invalid cmdstream size: %u\n", submit_cmd.size); 501 DRM_ERROR("invalid cmdstream size: %u\n", submit_cmd.size);
502 ret = -EINVAL; 502 ret = -EINVAL;
503 goto out; 503 goto out;
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index 97b9c38c6b3f..0fdc88d79ca8 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -549,9 +549,9 @@ static int get_clocks(struct platform_device *pdev, struct msm_gpu *gpu)
549 gpu->grp_clks[i] = get_clock(dev, name); 549 gpu->grp_clks[i] = get_clock(dev, name);
550 550
551 /* Remember the key clocks that we need to control later */ 551 /* Remember the key clocks that we need to control later */
552 if (!strcmp(name, "core")) 552 if (!strcmp(name, "core") || !strcmp(name, "core_clk"))
553 gpu->core_clk = gpu->grp_clks[i]; 553 gpu->core_clk = gpu->grp_clks[i];
554 else if (!strcmp(name, "rbbmtimer")) 554 else if (!strcmp(name, "rbbmtimer") || !strcmp(name, "rbbmtimer_clk"))
555 gpu->rbbmtimer_clk = gpu->grp_clks[i]; 555 gpu->rbbmtimer_clk = gpu->grp_clks[i];
556 556
557 ++i; 557 ++i;
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_crtc.c b/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
index 1144e0c9e894..0abe77675b76 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
@@ -35,6 +35,13 @@
35#include "mxsfb_drv.h" 35#include "mxsfb_drv.h"
36#include "mxsfb_regs.h" 36#include "mxsfb_regs.h"
37 37
38#define MXS_SET_ADDR 0x4
39#define MXS_CLR_ADDR 0x8
40#define MODULE_CLKGATE BIT(30)
41#define MODULE_SFTRST BIT(31)
42/* 1 second delay should be plenty of time for block reset */
43#define RESET_TIMEOUT 1000000
44
38static u32 set_hsync_pulse_width(struct mxsfb_drm_private *mxsfb, u32 val) 45static u32 set_hsync_pulse_width(struct mxsfb_drm_private *mxsfb, u32 val)
39{ 46{
40 return (val & mxsfb->devdata->hs_wdth_mask) << 47 return (val & mxsfb->devdata->hs_wdth_mask) <<
@@ -159,6 +166,36 @@ static void mxsfb_disable_controller(struct mxsfb_drm_private *mxsfb)
159 clk_disable_unprepare(mxsfb->clk_disp_axi); 166 clk_disable_unprepare(mxsfb->clk_disp_axi);
160} 167}
161 168
169/*
170 * Clear the bit and poll it cleared. This is usually called with
171 * a reset address and mask being either SFTRST(bit 31) or CLKGATE
172 * (bit 30).
173 */
174static int clear_poll_bit(void __iomem *addr, u32 mask)
175{
176 u32 reg;
177
178 writel(mask, addr + MXS_CLR_ADDR);
179 return readl_poll_timeout(addr, reg, !(reg & mask), 0, RESET_TIMEOUT);
180}
181
182static int mxsfb_reset_block(void __iomem *reset_addr)
183{
184 int ret;
185
186 ret = clear_poll_bit(reset_addr, MODULE_SFTRST);
187 if (ret)
188 return ret;
189
190 writel(MODULE_CLKGATE, reset_addr + MXS_CLR_ADDR);
191
192 ret = clear_poll_bit(reset_addr, MODULE_SFTRST);
193 if (ret)
194 return ret;
195
196 return clear_poll_bit(reset_addr, MODULE_CLKGATE);
197}
198
162static void mxsfb_crtc_mode_set_nofb(struct mxsfb_drm_private *mxsfb) 199static void mxsfb_crtc_mode_set_nofb(struct mxsfb_drm_private *mxsfb)
163{ 200{
164 struct drm_display_mode *m = &mxsfb->pipe.crtc.state->adjusted_mode; 201 struct drm_display_mode *m = &mxsfb->pipe.crtc.state->adjusted_mode;
@@ -173,6 +210,11 @@ static void mxsfb_crtc_mode_set_nofb(struct mxsfb_drm_private *mxsfb)
173 */ 210 */
174 mxsfb_enable_axi_clk(mxsfb); 211 mxsfb_enable_axi_clk(mxsfb);
175 212
213 /* Mandatory eLCDIF reset as per the Reference Manual */
214 err = mxsfb_reset_block(mxsfb->base);
215 if (err)
216 return;
217
176 /* Clear the FIFOs */ 218 /* Clear the FIFOs */
177 writel(CTRL1_FIFO_CLEAR, mxsfb->base + LCDC_CTRL1 + REG_SET); 219 writel(CTRL1_FIFO_CLEAR, mxsfb->base + LCDC_CTRL1 + REG_SET);
178 220
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h
index 6a567fe347b3..820a4805916f 100644
--- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h
+++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h
@@ -4,6 +4,7 @@
4 4
5struct nvkm_alarm { 5struct nvkm_alarm {
6 struct list_head head; 6 struct list_head head;
7 struct list_head exec;
7 u64 timestamp; 8 u64 timestamp;
8 void (*func)(struct nvkm_alarm *); 9 void (*func)(struct nvkm_alarm *);
9}; 10};
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
index 36268e1802b5..15a13d09d431 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -80,7 +80,7 @@ int nouveau_modeset = -1;
80module_param_named(modeset, nouveau_modeset, int, 0400); 80module_param_named(modeset, nouveau_modeset, int, 0400);
81 81
82MODULE_PARM_DESC(runpm, "disable (0), force enable (1), optimus only default (-1)"); 82MODULE_PARM_DESC(runpm, "disable (0), force enable (1), optimus only default (-1)");
83int nouveau_runtime_pm = -1; 83static int nouveau_runtime_pm = -1;
84module_param_named(runpm, nouveau_runtime_pm, int, 0400); 84module_param_named(runpm, nouveau_runtime_pm, int, 0400);
85 85
86static struct drm_driver driver_stub; 86static struct drm_driver driver_stub;
@@ -495,7 +495,7 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags)
495 nouveau_fbcon_init(dev); 495 nouveau_fbcon_init(dev);
496 nouveau_led_init(dev); 496 nouveau_led_init(dev);
497 497
498 if (nouveau_runtime_pm != 0) { 498 if (nouveau_pmops_runtime()) {
499 pm_runtime_use_autosuspend(dev->dev); 499 pm_runtime_use_autosuspend(dev->dev);
500 pm_runtime_set_autosuspend_delay(dev->dev, 5000); 500 pm_runtime_set_autosuspend_delay(dev->dev, 5000);
501 pm_runtime_set_active(dev->dev); 501 pm_runtime_set_active(dev->dev);
@@ -527,7 +527,7 @@ nouveau_drm_unload(struct drm_device *dev)
527{ 527{
528 struct nouveau_drm *drm = nouveau_drm(dev); 528 struct nouveau_drm *drm = nouveau_drm(dev);
529 529
530 if (nouveau_runtime_pm != 0) { 530 if (nouveau_pmops_runtime()) {
531 pm_runtime_get_sync(dev->dev); 531 pm_runtime_get_sync(dev->dev);
532 pm_runtime_forbid(dev->dev); 532 pm_runtime_forbid(dev->dev);
533 } 533 }
@@ -726,6 +726,14 @@ nouveau_pmops_thaw(struct device *dev)
726 return nouveau_do_resume(drm_dev, false); 726 return nouveau_do_resume(drm_dev, false);
727} 727}
728 728
729bool
730nouveau_pmops_runtime()
731{
732 if (nouveau_runtime_pm == -1)
733 return nouveau_is_optimus() || nouveau_is_v1_dsm();
734 return nouveau_runtime_pm == 1;
735}
736
729static int 737static int
730nouveau_pmops_runtime_suspend(struct device *dev) 738nouveau_pmops_runtime_suspend(struct device *dev)
731{ 739{
@@ -733,14 +741,7 @@ nouveau_pmops_runtime_suspend(struct device *dev)
733 struct drm_device *drm_dev = pci_get_drvdata(pdev); 741 struct drm_device *drm_dev = pci_get_drvdata(pdev);
734 int ret; 742 int ret;
735 743
736 if (nouveau_runtime_pm == 0) { 744 if (!nouveau_pmops_runtime()) {
737 pm_runtime_forbid(dev);
738 return -EBUSY;
739 }
740
741 /* are we optimus enabled? */
742 if (nouveau_runtime_pm == -1 && !nouveau_is_optimus() && !nouveau_is_v1_dsm()) {
743 DRM_DEBUG_DRIVER("failing to power off - not optimus\n");
744 pm_runtime_forbid(dev); 745 pm_runtime_forbid(dev);
745 return -EBUSY; 746 return -EBUSY;
746 } 747 }
@@ -765,8 +766,10 @@ nouveau_pmops_runtime_resume(struct device *dev)
765 struct nvif_device *device = &nouveau_drm(drm_dev)->client.device; 766 struct nvif_device *device = &nouveau_drm(drm_dev)->client.device;
766 int ret; 767 int ret;
767 768
768 if (nouveau_runtime_pm == 0) 769 if (!nouveau_pmops_runtime()) {
769 return -EINVAL; 770 pm_runtime_forbid(dev);
771 return -EBUSY;
772 }
770 773
771 pci_set_power_state(pdev, PCI_D0); 774 pci_set_power_state(pdev, PCI_D0);
772 pci_restore_state(pdev); 775 pci_restore_state(pdev);
@@ -796,14 +799,7 @@ nouveau_pmops_runtime_idle(struct device *dev)
796 struct nouveau_drm *drm = nouveau_drm(drm_dev); 799 struct nouveau_drm *drm = nouveau_drm(drm_dev);
797 struct drm_crtc *crtc; 800 struct drm_crtc *crtc;
798 801
799 if (nouveau_runtime_pm == 0) { 802 if (!nouveau_pmops_runtime()) {
800 pm_runtime_forbid(dev);
801 return -EBUSY;
802 }
803
804 /* are we optimus enabled? */
805 if (nouveau_runtime_pm == -1 && !nouveau_is_optimus() && !nouveau_is_v1_dsm()) {
806 DRM_DEBUG_DRIVER("failing to power off - not optimus\n");
807 pm_runtime_forbid(dev); 803 pm_runtime_forbid(dev);
808 return -EBUSY; 804 return -EBUSY;
809 } 805 }
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
index eadec2f49ad3..a11b6aaed325 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
@@ -108,8 +108,6 @@ nouveau_cli(struct drm_file *fpriv)
108#include <nvif/object.h> 108#include <nvif/object.h>
109#include <nvif/device.h> 109#include <nvif/device.h>
110 110
111extern int nouveau_runtime_pm;
112
113struct nouveau_drm { 111struct nouveau_drm {
114 struct nouveau_cli client; 112 struct nouveau_cli client;
115 struct drm_device *dev; 113 struct drm_device *dev;
@@ -195,6 +193,7 @@ nouveau_drm(struct drm_device *dev)
195 193
196int nouveau_pmops_suspend(struct device *); 194int nouveau_pmops_suspend(struct device *);
197int nouveau_pmops_resume(struct device *); 195int nouveau_pmops_resume(struct device *);
196bool nouveau_pmops_runtime(void);
198 197
199#include <nvkm/core/tegra.h> 198#include <nvkm/core/tegra.h>
200 199
diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c
index a4aacbc0cec8..02fe0efb9e16 100644
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c
+++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
@@ -87,7 +87,7 @@ void
87nouveau_vga_init(struct nouveau_drm *drm) 87nouveau_vga_init(struct nouveau_drm *drm)
88{ 88{
89 struct drm_device *dev = drm->dev; 89 struct drm_device *dev = drm->dev;
90 bool runtime = false; 90 bool runtime = nouveau_pmops_runtime();
91 91
92 /* only relevant for PCI devices */ 92 /* only relevant for PCI devices */
93 if (!dev->pdev) 93 if (!dev->pdev)
@@ -99,10 +99,6 @@ nouveau_vga_init(struct nouveau_drm *drm)
99 if (pci_is_thunderbolt_attached(dev->pdev)) 99 if (pci_is_thunderbolt_attached(dev->pdev))
100 return; 100 return;
101 101
102 if (nouveau_runtime_pm == 1)
103 runtime = true;
104 if ((nouveau_runtime_pm == -1) && (nouveau_is_optimus() || nouveau_is_v1_dsm()))
105 runtime = true;
106 vga_switcheroo_register_client(dev->pdev, &nouveau_switcheroo_ops, runtime); 102 vga_switcheroo_register_client(dev->pdev, &nouveau_switcheroo_ops, runtime);
107 103
108 if (runtime && nouveau_is_v1_dsm() && !nouveau_is_optimus()) 104 if (runtime && nouveau_is_v1_dsm() && !nouveau_is_optimus())
@@ -113,18 +109,13 @@ void
113nouveau_vga_fini(struct nouveau_drm *drm) 109nouveau_vga_fini(struct nouveau_drm *drm)
114{ 110{
115 struct drm_device *dev = drm->dev; 111 struct drm_device *dev = drm->dev;
116 bool runtime = false; 112 bool runtime = nouveau_pmops_runtime();
117 113
118 vga_client_register(dev->pdev, NULL, NULL, NULL); 114 vga_client_register(dev->pdev, NULL, NULL, NULL);
119 115
120 if (pci_is_thunderbolt_attached(dev->pdev)) 116 if (pci_is_thunderbolt_attached(dev->pdev))
121 return; 117 return;
122 118
123 if (nouveau_runtime_pm == 1)
124 runtime = true;
125 if ((nouveau_runtime_pm == -1) && (nouveau_is_optimus() || nouveau_is_v1_dsm()))
126 runtime = true;
127
128 vga_switcheroo_unregister_client(dev->pdev); 119 vga_switcheroo_unregister_client(dev->pdev);
129 if (runtime && nouveau_is_v1_dsm() && !nouveau_is_optimus()) 120 if (runtime && nouveau_is_v1_dsm() && !nouveau_is_optimus())
130 vga_switcheroo_fini_domain_pm_ops(drm->dev->dev); 121 vga_switcheroo_fini_domain_pm_ops(drm->dev->dev);
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index a7663249b3ba..06e564a9ccb2 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -2107,7 +2107,8 @@ nv50_head_atomic_check(struct drm_crtc *crtc, struct drm_crtc_state *state)
2107 asyc->set.dither = true; 2107 asyc->set.dither = true;
2108 } 2108 }
2109 } else { 2109 } else {
2110 asyc->set.mask = ~0; 2110 if (asyc)
2111 asyc->set.mask = ~0;
2111 asyh->set.mask = ~0; 2112 asyh->set.mask = ~0;
2112 } 2113 }
2113 2114
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
index f2a86eae0a0d..2437f7d41ca2 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
@@ -50,7 +50,8 @@ nvkm_timer_alarm_trigger(struct nvkm_timer *tmr)
50 /* Move to completed list. We'll drop the lock before 50 /* Move to completed list. We'll drop the lock before
51 * executing the callback so it can reschedule itself. 51 * executing the callback so it can reschedule itself.
52 */ 52 */
53 list_move_tail(&alarm->head, &exec); 53 list_del_init(&alarm->head);
54 list_add(&alarm->exec, &exec);
54 } 55 }
55 56
56 /* Shut down interrupt if no more pending alarms. */ 57 /* Shut down interrupt if no more pending alarms. */
@@ -59,8 +60,8 @@ nvkm_timer_alarm_trigger(struct nvkm_timer *tmr)
59 spin_unlock_irqrestore(&tmr->lock, flags); 60 spin_unlock_irqrestore(&tmr->lock, flags);
60 61
61 /* Execute completed callbacks. */ 62 /* Execute completed callbacks. */
62 list_for_each_entry_safe(alarm, atemp, &exec, head) { 63 list_for_each_entry_safe(alarm, atemp, &exec, exec) {
63 list_del_init(&alarm->head); 64 list_del(&alarm->exec);
64 alarm->func(alarm); 65 alarm->func(alarm);
65 } 66 }
66} 67}
diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index 058340a002c2..4a340efd8ba6 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -575,8 +575,6 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
575 if (ret) 575 if (ret)
576 return; 576 return;
577 577
578 cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release);
579
580 if (fb != old_state->fb) { 578 if (fb != old_state->fb) {
581 obj = to_qxl_framebuffer(fb)->obj; 579 obj = to_qxl_framebuffer(fb)->obj;
582 user_bo = gem_to_qxl_bo(obj); 580 user_bo = gem_to_qxl_bo(obj);
@@ -614,6 +612,7 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
614 qxl_bo_kunmap(cursor_bo); 612 qxl_bo_kunmap(cursor_bo);
615 qxl_bo_kunmap(user_bo); 613 qxl_bo_kunmap(user_bo);
616 614
615 cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release);
617 cmd->u.set.visible = 1; 616 cmd->u.set.visible = 1;
618 cmd->u.set.shape = qxl_bo_physical_address(qdev, 617 cmd->u.set.shape = qxl_bo_physical_address(qdev,
619 cursor_bo, 0); 618 cursor_bo, 0);
@@ -624,6 +623,7 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
624 if (ret) 623 if (ret)
625 goto out_free_release; 624 goto out_free_release;
626 625
626 cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release);
627 cmd->type = QXL_CURSOR_MOVE; 627 cmd->type = QXL_CURSOR_MOVE;
628 } 628 }
629 629
diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c
index 7ba450832e6b..ea36dc4dd5d2 100644
--- a/drivers/gpu/drm/radeon/ci_dpm.c
+++ b/drivers/gpu/drm/radeon/ci_dpm.c
@@ -776,6 +776,12 @@ bool ci_dpm_vblank_too_short(struct radeon_device *rdev)
776 u32 vblank_time = r600_dpm_get_vblank_time(rdev); 776 u32 vblank_time = r600_dpm_get_vblank_time(rdev);
777 u32 switch_limit = pi->mem_gddr5 ? 450 : 300; 777 u32 switch_limit = pi->mem_gddr5 ? 450 : 300;
778 778
779 /* disable mclk switching if the refresh is >120Hz, even if the
780 * blanking period would allow it
781 */
782 if (r600_dpm_get_vrefresh(rdev) > 120)
783 return true;
784
779 if (vblank_time < switch_limit) 785 if (vblank_time < switch_limit)
780 return true; 786 return true;
781 else 787 else
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
index ccebe0f8d2e1..ca44233ceacc 100644
--- a/drivers/gpu/drm/radeon/cik.c
+++ b/drivers/gpu/drm/radeon/cik.c
@@ -7401,7 +7401,7 @@ static inline void cik_irq_ack(struct radeon_device *rdev)
7401 WREG32(DC_HPD5_INT_CONTROL, tmp); 7401 WREG32(DC_HPD5_INT_CONTROL, tmp);
7402 } 7402 }
7403 if (rdev->irq.stat_regs.cik.disp_int_cont5 & DC_HPD6_INTERRUPT) { 7403 if (rdev->irq.stat_regs.cik.disp_int_cont5 & DC_HPD6_INTERRUPT) {
7404 tmp = RREG32(DC_HPD5_INT_CONTROL); 7404 tmp = RREG32(DC_HPD6_INT_CONTROL);
7405 tmp |= DC_HPDx_INT_ACK; 7405 tmp |= DC_HPDx_INT_ACK;
7406 WREG32(DC_HPD6_INT_CONTROL, tmp); 7406 WREG32(DC_HPD6_INT_CONTROL, tmp);
7407 } 7407 }
@@ -7431,7 +7431,7 @@ static inline void cik_irq_ack(struct radeon_device *rdev)
7431 WREG32(DC_HPD5_INT_CONTROL, tmp); 7431 WREG32(DC_HPD5_INT_CONTROL, tmp);
7432 } 7432 }
7433 if (rdev->irq.stat_regs.cik.disp_int_cont5 & DC_HPD6_RX_INTERRUPT) { 7433 if (rdev->irq.stat_regs.cik.disp_int_cont5 & DC_HPD6_RX_INTERRUPT) {
7434 tmp = RREG32(DC_HPD5_INT_CONTROL); 7434 tmp = RREG32(DC_HPD6_INT_CONTROL);
7435 tmp |= DC_HPDx_RX_INT_ACK; 7435 tmp |= DC_HPDx_RX_INT_ACK;
7436 WREG32(DC_HPD6_INT_CONTROL, tmp); 7436 WREG32(DC_HPD6_INT_CONTROL, tmp);
7437 } 7437 }
@@ -9267,8 +9267,11 @@ static void dce8_program_watermarks(struct radeon_device *rdev,
9267 u32 tmp, wm_mask; 9267 u32 tmp, wm_mask;
9268 9268
9269 if (radeon_crtc->base.enabled && num_heads && mode) { 9269 if (radeon_crtc->base.enabled && num_heads && mode) {
9270 active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock; 9270 active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
9271 line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535); 9271 (u32)mode->clock);
9272 line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
9273 (u32)mode->clock);
9274 line_time = min(line_time, (u32)65535);
9272 9275
9273 /* watermark for high clocks */ 9276 /* watermark for high clocks */
9274 if ((rdev->pm.pm_method == PM_METHOD_DPM) && 9277 if ((rdev->pm.pm_method == PM_METHOD_DPM) &&
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index f130ec41ee4b..534637203e70 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -2266,8 +2266,11 @@ static void evergreen_program_watermarks(struct radeon_device *rdev,
2266 fixed20_12 a, b, c; 2266 fixed20_12 a, b, c;
2267 2267
2268 if (radeon_crtc->base.enabled && num_heads && mode) { 2268 if (radeon_crtc->base.enabled && num_heads && mode) {
2269 active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock; 2269 active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
2270 line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535); 2270 (u32)mode->clock);
2271 line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
2272 (u32)mode->clock);
2273 line_time = min(line_time, (u32)65535);
2271 priority_a_cnt = 0; 2274 priority_a_cnt = 0;
2272 priority_b_cnt = 0; 2275 priority_b_cnt = 0;
2273 dram_channels = evergreen_get_number_of_dram_channels(rdev); 2276 dram_channels = evergreen_get_number_of_dram_channels(rdev);
@@ -4927,7 +4930,7 @@ static void evergreen_irq_ack(struct radeon_device *rdev)
4927 WREG32(DC_HPD5_INT_CONTROL, tmp); 4930 WREG32(DC_HPD5_INT_CONTROL, tmp);
4928 } 4931 }
4929 if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_INTERRUPT) { 4932 if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_INTERRUPT) {
4930 tmp = RREG32(DC_HPD5_INT_CONTROL); 4933 tmp = RREG32(DC_HPD6_INT_CONTROL);
4931 tmp |= DC_HPDx_INT_ACK; 4934 tmp |= DC_HPDx_INT_ACK;
4932 WREG32(DC_HPD6_INT_CONTROL, tmp); 4935 WREG32(DC_HPD6_INT_CONTROL, tmp);
4933 } 4936 }
@@ -4958,7 +4961,7 @@ static void evergreen_irq_ack(struct radeon_device *rdev)
4958 WREG32(DC_HPD5_INT_CONTROL, tmp); 4961 WREG32(DC_HPD5_INT_CONTROL, tmp);
4959 } 4962 }
4960 if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_RX_INTERRUPT) { 4963 if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_RX_INTERRUPT) {
4961 tmp = RREG32(DC_HPD5_INT_CONTROL); 4964 tmp = RREG32(DC_HPD6_INT_CONTROL);
4962 tmp |= DC_HPDx_RX_INT_ACK; 4965 tmp |= DC_HPDx_RX_INT_ACK;
4963 WREG32(DC_HPD6_INT_CONTROL, tmp); 4966 WREG32(DC_HPD6_INT_CONTROL, tmp);
4964 } 4967 }
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 0a085176e79b..e06e2d8feab3 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -3988,7 +3988,7 @@ static void r600_irq_ack(struct radeon_device *rdev)
3988 WREG32(DC_HPD5_INT_CONTROL, tmp); 3988 WREG32(DC_HPD5_INT_CONTROL, tmp);
3989 } 3989 }
3990 if (rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD6_INTERRUPT) { 3990 if (rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD6_INTERRUPT) {
3991 tmp = RREG32(DC_HPD5_INT_CONTROL); 3991 tmp = RREG32(DC_HPD6_INT_CONTROL);
3992 tmp |= DC_HPDx_INT_ACK; 3992 tmp |= DC_HPDx_INT_ACK;
3993 WREG32(DC_HPD6_INT_CONTROL, tmp); 3993 WREG32(DC_HPD6_INT_CONTROL, tmp);
3994 } 3994 }
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
index 432480ff9d22..3178ba0c537c 100644
--- a/drivers/gpu/drm/radeon/radeon_combios.c
+++ b/drivers/gpu/drm/radeon/radeon_combios.c
@@ -3393,6 +3393,13 @@ void radeon_combios_asic_init(struct drm_device *dev)
3393 rdev->pdev->subsystem_vendor == 0x103c && 3393 rdev->pdev->subsystem_vendor == 0x103c &&
3394 rdev->pdev->subsystem_device == 0x280a) 3394 rdev->pdev->subsystem_device == 0x280a)
3395 return; 3395 return;
3396 /* quirk for rs4xx Toshiba Sattellite L20-183 latop to make it resume
3397 * - it hangs on resume inside the dynclk 1 table.
3398 */
3399 if (rdev->family == CHIP_RS400 &&
3400 rdev->pdev->subsystem_vendor == 0x1179 &&
3401 rdev->pdev->subsystem_device == 0xff31)
3402 return;
3396 3403
3397 /* DYN CLK 1 */ 3404 /* DYN CLK 1 */
3398 table = combios_get_table_offset(dev, COMBIOS_DYN_CLK_1_TABLE); 3405 table = combios_get_table_offset(dev, COMBIOS_DYN_CLK_1_TABLE);
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 6ecf42783d4b..0a6444d72000 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -136,6 +136,10 @@ static struct radeon_px_quirk radeon_px_quirk_list[] = {
136 * https://bugzilla.kernel.org/show_bug.cgi?id=51381 136 * https://bugzilla.kernel.org/show_bug.cgi?id=51381
137 */ 137 */
138 { PCI_VENDOR_ID_ATI, 0x6840, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX }, 138 { PCI_VENDOR_ID_ATI, 0x6840, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX },
139 /* Asus K53TK laptop with AMD A6-3420M APU and Radeon 7670m GPU
140 * https://bugs.freedesktop.org/show_bug.cgi?id=101491
141 */
142 { PCI_VENDOR_ID_ATI, 0x6741, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX },
139 /* macbook pro 8.2 */ 143 /* macbook pro 8.2 */
140 { PCI_VENDOR_ID_ATI, 0x6741, PCI_VENDOR_ID_APPLE, 0x00e2, RADEON_PX_QUIRK_LONG_WAKEUP }, 144 { PCI_VENDOR_ID_ATI, 0x6741, PCI_VENDOR_ID_APPLE, 0x00e2, RADEON_PX_QUIRK_LONG_WAKEUP },
141 { 0, 0, 0, 0, 0 }, 145 { 0, 0, 0, 0, 0 },
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
index e3e7cb1d10a2..4761f27f2ca2 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -116,7 +116,7 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags)
116 if ((radeon_runtime_pm != 0) && 116 if ((radeon_runtime_pm != 0) &&
117 radeon_has_atpx() && 117 radeon_has_atpx() &&
118 ((flags & RADEON_IS_IGP) == 0) && 118 ((flags & RADEON_IS_IGP) == 0) &&
119 !pci_is_thunderbolt_attached(rdev->pdev)) 119 !pci_is_thunderbolt_attached(dev->pdev))
120 flags |= RADEON_IS_PX; 120 flags |= RADEON_IS_PX;
121 121
122 /* radeon_device_init should report only fatal error 122 /* radeon_device_init should report only fatal error
diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
index 7431eb4a11b7..d34d1cf33895 100644
--- a/drivers/gpu/drm/radeon/radeon_uvd.c
+++ b/drivers/gpu/drm/radeon/radeon_uvd.c
@@ -621,7 +621,7 @@ static int radeon_uvd_cs_reloc(struct radeon_cs_parser *p,
621 } 621 }
622 622
623 /* TODO: is this still necessary on NI+ ? */ 623 /* TODO: is this still necessary on NI+ ? */
624 if ((cmd == 0 || cmd == 1 || cmd == 0x3) && 624 if ((cmd == 0 || cmd == 0x3) &&
625 (start >> 28) != (p->rdev->uvd.gpu_addr >> 28)) { 625 (start >> 28) != (p->rdev->uvd.gpu_addr >> 28)) {
626 DRM_ERROR("msg/fb buffer %LX-%LX out of 256MB segment!\n", 626 DRM_ERROR("msg/fb buffer %LX-%LX out of 256MB segment!\n",
627 start, end); 627 start, end);
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index ceee87f029d9..5303f25d5280 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -2284,8 +2284,11 @@ static void dce6_program_watermarks(struct radeon_device *rdev,
2284 fixed20_12 a, b, c; 2284 fixed20_12 a, b, c;
2285 2285
2286 if (radeon_crtc->base.enabled && num_heads && mode) { 2286 if (radeon_crtc->base.enabled && num_heads && mode) {
2287 active_time = 1000000UL * (u32)mode->crtc_hdisplay / (u32)mode->clock; 2287 active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
2288 line_time = min((u32) (1000000UL * (u32)mode->crtc_htotal / (u32)mode->clock), (u32)65535); 2288 (u32)mode->clock);
2289 line_time = (u32) div_u64((u64)mode->crtc_htotal * 1000000,
2290 (u32)mode->clock);
2291 line_time = min(line_time, (u32)65535);
2289 priority_a_cnt = 0; 2292 priority_a_cnt = 0;
2290 priority_b_cnt = 0; 2293 priority_b_cnt = 0;
2291 2294
@@ -6317,7 +6320,7 @@ static inline void si_irq_ack(struct radeon_device *rdev)
6317 WREG32(DC_HPD5_INT_CONTROL, tmp); 6320 WREG32(DC_HPD5_INT_CONTROL, tmp);
6318 } 6321 }
6319 if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_INTERRUPT) { 6322 if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_INTERRUPT) {
6320 tmp = RREG32(DC_HPD5_INT_CONTROL); 6323 tmp = RREG32(DC_HPD6_INT_CONTROL);
6321 tmp |= DC_HPDx_INT_ACK; 6324 tmp |= DC_HPDx_INT_ACK;
6322 WREG32(DC_HPD6_INT_CONTROL, tmp); 6325 WREG32(DC_HPD6_INT_CONTROL, tmp);
6323 } 6326 }
@@ -6348,7 +6351,7 @@ static inline void si_irq_ack(struct radeon_device *rdev)
6348 WREG32(DC_HPD5_INT_CONTROL, tmp); 6351 WREG32(DC_HPD5_INT_CONTROL, tmp);
6349 } 6352 }
6350 if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_RX_INTERRUPT) { 6353 if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_RX_INTERRUPT) {
6351 tmp = RREG32(DC_HPD5_INT_CONTROL); 6354 tmp = RREG32(DC_HPD6_INT_CONTROL);
6352 tmp |= DC_HPDx_RX_INT_ACK; 6355 tmp |= DC_HPDx_RX_INT_ACK;
6353 WREG32(DC_HPD6_INT_CONTROL, tmp); 6356 WREG32(DC_HPD6_INT_CONTROL, tmp);
6354 } 6357 }
diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
index d8fa7a9c9240..ce5f2d1f9994 100644
--- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
+++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
@@ -245,8 +245,6 @@ rockchip_dp_drm_encoder_atomic_check(struct drm_encoder *encoder,
245 struct drm_connector_state *conn_state) 245 struct drm_connector_state *conn_state)
246{ 246{
247 struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc_state); 247 struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc_state);
248 struct rockchip_dp_device *dp = to_dp(encoder);
249 int ret;
250 248
251 /* 249 /*
252 * The hardware IC designed that VOP must output the RGB10 video 250 * The hardware IC designed that VOP must output the RGB10 video
@@ -258,16 +256,6 @@ rockchip_dp_drm_encoder_atomic_check(struct drm_encoder *encoder,
258 256
259 s->output_mode = ROCKCHIP_OUT_MODE_AAAA; 257 s->output_mode = ROCKCHIP_OUT_MODE_AAAA;
260 s->output_type = DRM_MODE_CONNECTOR_eDP; 258 s->output_type = DRM_MODE_CONNECTOR_eDP;
261 if (dp->data->chip_type == RK3399_EDP) {
262 /*
263 * For RK3399, VOP Lit must code the out mode to RGB888,
264 * VOP Big must code the out mode to RGB10.
265 */
266 ret = drm_of_encoder_active_endpoint_id(dp->dev->of_node,
267 encoder);
268 if (ret > 0)
269 s->output_mode = ROCKCHIP_OUT_MODE_P888;
270 }
271 259
272 return 0; 260 return 0;
273} 261}
diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockchip/cdn-dp-core.c
index a2169dd3d26b..14fa1f8351e8 100644
--- a/drivers/gpu/drm/rockchip/cdn-dp-core.c
+++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c
@@ -615,7 +615,6 @@ static void cdn_dp_encoder_enable(struct drm_encoder *encoder)
615{ 615{
616 struct cdn_dp_device *dp = encoder_to_dp(encoder); 616 struct cdn_dp_device *dp = encoder_to_dp(encoder);
617 int ret, val; 617 int ret, val;
618 struct rockchip_crtc_state *state;
619 618
620 ret = drm_of_encoder_active_endpoint_id(dp->dev->of_node, encoder); 619 ret = drm_of_encoder_active_endpoint_id(dp->dev->of_node, encoder);
621 if (ret < 0) { 620 if (ret < 0) {
@@ -625,14 +624,10 @@ static void cdn_dp_encoder_enable(struct drm_encoder *encoder)
625 624
626 DRM_DEV_DEBUG_KMS(dp->dev, "vop %s output to cdn-dp\n", 625 DRM_DEV_DEBUG_KMS(dp->dev, "vop %s output to cdn-dp\n",
627 (ret) ? "LIT" : "BIG"); 626 (ret) ? "LIT" : "BIG");
628 state = to_rockchip_crtc_state(encoder->crtc->state); 627 if (ret)
629 if (ret) {
630 val = DP_SEL_VOP_LIT | (DP_SEL_VOP_LIT << 16); 628 val = DP_SEL_VOP_LIT | (DP_SEL_VOP_LIT << 16);
631 state->output_mode = ROCKCHIP_OUT_MODE_P888; 629 else
632 } else {
633 val = DP_SEL_VOP_LIT << 16; 630 val = DP_SEL_VOP_LIT << 16;
634 state->output_mode = ROCKCHIP_OUT_MODE_AAAA;
635 }
636 631
637 ret = cdn_dp_grf_write(dp, GRF_SOC_CON9, val); 632 ret = cdn_dp_grf_write(dp, GRF_SOC_CON9, val);
638 if (ret) 633 if (ret)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index 3f7a82d1e095..45589d6ce65e 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -875,6 +875,7 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
875static void vop_crtc_enable(struct drm_crtc *crtc) 875static void vop_crtc_enable(struct drm_crtc *crtc)
876{ 876{
877 struct vop *vop = to_vop(crtc); 877 struct vop *vop = to_vop(crtc);
878 const struct vop_data *vop_data = vop->data;
878 struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc->state); 879 struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc->state);
879 struct drm_display_mode *adjusted_mode = &crtc->state->adjusted_mode; 880 struct drm_display_mode *adjusted_mode = &crtc->state->adjusted_mode;
880 u16 hsync_len = adjusted_mode->hsync_end - adjusted_mode->hsync_start; 881 u16 hsync_len = adjusted_mode->hsync_end - adjusted_mode->hsync_start;
@@ -967,6 +968,13 @@ static void vop_crtc_enable(struct drm_crtc *crtc)
967 DRM_DEV_ERROR(vop->dev, "unsupported connector_type [%d]\n", 968 DRM_DEV_ERROR(vop->dev, "unsupported connector_type [%d]\n",
968 s->output_type); 969 s->output_type);
969 } 970 }
971
972 /*
973 * if vop is not support RGB10 output, need force RGB10 to RGB888.
974 */
975 if (s->output_mode == ROCKCHIP_OUT_MODE_AAAA &&
976 !(vop_data->feature & VOP_FEATURE_OUTPUT_RGB10))
977 s->output_mode = ROCKCHIP_OUT_MODE_P888;
970 VOP_CTRL_SET(vop, out_mode, s->output_mode); 978 VOP_CTRL_SET(vop, out_mode, s->output_mode);
971 979
972 VOP_CTRL_SET(vop, htotal_pw, (htotal << 16) | hsync_len); 980 VOP_CTRL_SET(vop, htotal_pw, (htotal << 16) | hsync_len);
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
index 5a4faa85dbd2..9979fd0c2282 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
@@ -142,6 +142,9 @@ struct vop_data {
142 const struct vop_intr *intr; 142 const struct vop_intr *intr;
143 const struct vop_win_data *win; 143 const struct vop_win_data *win;
144 unsigned int win_size; 144 unsigned int win_size;
145
146#define VOP_FEATURE_OUTPUT_RGB10 BIT(0)
147 u64 feature;
145}; 148};
146 149
147/* interrupt define */ 150/* interrupt define */
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
index 0da44442aab0..bafd698a28b1 100644
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
@@ -275,6 +275,7 @@ static const struct vop_intr rk3288_vop_intr = {
275static const struct vop_data rk3288_vop = { 275static const struct vop_data rk3288_vop = {
276 .init_table = rk3288_init_reg_table, 276 .init_table = rk3288_init_reg_table,
277 .table_size = ARRAY_SIZE(rk3288_init_reg_table), 277 .table_size = ARRAY_SIZE(rk3288_init_reg_table),
278 .feature = VOP_FEATURE_OUTPUT_RGB10,
278 .intr = &rk3288_vop_intr, 279 .intr = &rk3288_vop_intr,
279 .ctrl = &rk3288_ctrl_data, 280 .ctrl = &rk3288_ctrl_data,
280 .win = rk3288_vop_win_data, 281 .win = rk3288_vop_win_data,
@@ -343,6 +344,7 @@ static const struct vop_reg_data rk3399_init_reg_table[] = {
343static const struct vop_data rk3399_vop_big = { 344static const struct vop_data rk3399_vop_big = {
344 .init_table = rk3399_init_reg_table, 345 .init_table = rk3399_init_reg_table,
345 .table_size = ARRAY_SIZE(rk3399_init_reg_table), 346 .table_size = ARRAY_SIZE(rk3399_init_reg_table),
347 .feature = VOP_FEATURE_OUTPUT_RGB10,
346 .intr = &rk3399_vop_intr, 348 .intr = &rk3399_vop_intr,
347 .ctrl = &rk3399_ctrl_data, 349 .ctrl = &rk3399_ctrl_data,
348 /* 350 /*
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index 9a1e34e48f64..81f86a67c10d 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -451,18 +451,6 @@ fail:
451 451
452 452
453#ifdef CONFIG_DRM_TEGRA_STAGING 453#ifdef CONFIG_DRM_TEGRA_STAGING
454static struct tegra_drm_context *
455tegra_drm_file_get_context(struct tegra_drm_file *file, u32 id)
456{
457 struct tegra_drm_context *context;
458
459 mutex_lock(&file->lock);
460 context = idr_find(&file->contexts, id);
461 mutex_unlock(&file->lock);
462
463 return context;
464}
465
466static int tegra_gem_create(struct drm_device *drm, void *data, 454static int tegra_gem_create(struct drm_device *drm, void *data,
467 struct drm_file *file) 455 struct drm_file *file)
468{ 456{
@@ -551,7 +539,7 @@ static int tegra_client_open(struct tegra_drm_file *fpriv,
551 if (err < 0) 539 if (err < 0)
552 return err; 540 return err;
553 541
554 err = idr_alloc(&fpriv->contexts, context, 0, 0, GFP_KERNEL); 542 err = idr_alloc(&fpriv->contexts, context, 1, 0, GFP_KERNEL);
555 if (err < 0) { 543 if (err < 0) {
556 client->ops->close_channel(context); 544 client->ops->close_channel(context);
557 return err; 545 return err;
@@ -606,7 +594,7 @@ static int tegra_close_channel(struct drm_device *drm, void *data,
606 594
607 mutex_lock(&fpriv->lock); 595 mutex_lock(&fpriv->lock);
608 596
609 context = tegra_drm_file_get_context(fpriv, args->context); 597 context = idr_find(&fpriv->contexts, args->context);
610 if (!context) { 598 if (!context) {
611 err = -EINVAL; 599 err = -EINVAL;
612 goto unlock; 600 goto unlock;
@@ -631,7 +619,7 @@ static int tegra_get_syncpt(struct drm_device *drm, void *data,
631 619
632 mutex_lock(&fpriv->lock); 620 mutex_lock(&fpriv->lock);
633 621
634 context = tegra_drm_file_get_context(fpriv, args->context); 622 context = idr_find(&fpriv->contexts, args->context);
635 if (!context) { 623 if (!context) {
636 err = -ENODEV; 624 err = -ENODEV;
637 goto unlock; 625 goto unlock;
@@ -660,7 +648,7 @@ static int tegra_submit(struct drm_device *drm, void *data,
660 648
661 mutex_lock(&fpriv->lock); 649 mutex_lock(&fpriv->lock);
662 650
663 context = tegra_drm_file_get_context(fpriv, args->context); 651 context = idr_find(&fpriv->contexts, args->context);
664 if (!context) { 652 if (!context) {
665 err = -ENODEV; 653 err = -ENODEV;
666 goto unlock; 654 goto unlock;
@@ -685,7 +673,7 @@ static int tegra_get_syncpt_base(struct drm_device *drm, void *data,
685 673
686 mutex_lock(&fpriv->lock); 674 mutex_lock(&fpriv->lock);
687 675
688 context = tegra_drm_file_get_context(fpriv, args->context); 676 context = idr_find(&fpriv->contexts, args->context);
689 if (!context) { 677 if (!context) {
690 err = -ENODEV; 678 err = -ENODEV;
691 goto unlock; 679 goto unlock;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c
index 13db8a2851ed..1f013d45c9e9 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c
@@ -321,6 +321,7 @@ void vmw_cmdbuf_res_man_destroy(struct vmw_cmdbuf_res_manager *man)
321 list_for_each_entry_safe(entry, next, &man->list, head) 321 list_for_each_entry_safe(entry, next, &man->list, head)
322 vmw_cmdbuf_res_free(man, entry); 322 vmw_cmdbuf_res_free(man, entry);
323 323
324 drm_ht_remove(&man->resources);
324 kfree(man); 325 kfree(man);
325} 326}
326 327
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
index 130d51c5ec6a..4b948fba9eec 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
@@ -41,9 +41,9 @@
41#include <drm/ttm/ttm_module.h> 41#include <drm/ttm/ttm_module.h>
42#include "vmwgfx_fence.h" 42#include "vmwgfx_fence.h"
43 43
44#define VMWGFX_DRIVER_DATE "20170221" 44#define VMWGFX_DRIVER_DATE "20170607"
45#define VMWGFX_DRIVER_MAJOR 2 45#define VMWGFX_DRIVER_MAJOR 2
46#define VMWGFX_DRIVER_MINOR 12 46#define VMWGFX_DRIVER_MINOR 13
47#define VMWGFX_DRIVER_PATCHLEVEL 0 47#define VMWGFX_DRIVER_PATCHLEVEL 0
48#define VMWGFX_FILE_PAGE_OFFSET 0x00100000 48#define VMWGFX_FILE_PAGE_OFFSET 0x00100000
49#define VMWGFX_FIFO_STATIC_SIZE (1024*1024) 49#define VMWGFX_FIFO_STATIC_SIZE (1024*1024)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
index b6a0806b06bf..a1c68e6a689e 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
@@ -368,6 +368,8 @@ static void *vmw_local_fifo_reserve(struct vmw_private *dev_priv,
368 return fifo_state->static_buffer; 368 return fifo_state->static_buffer;
369 else { 369 else {
370 fifo_state->dynamic_buffer = vmalloc(bytes); 370 fifo_state->dynamic_buffer = vmalloc(bytes);
371 if (!fifo_state->dynamic_buffer)
372 goto out_err;
371 return fifo_state->dynamic_buffer; 373 return fifo_state->dynamic_buffer;
372 } 374 }
373 } 375 }
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index ef9f3a2a4030..1d2db5d912b0 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -274,108 +274,6 @@ void vmw_kms_cursor_post_execbuf(struct vmw_private *dev_priv)
274} 274}
275 275
276 276
277
278/**
279 * vmw_du_cursor_plane_update() - Update cursor image and location
280 *
281 * @plane: plane object to update
282 * @crtc: owning CRTC of @plane
283 * @fb: framebuffer to flip onto plane
284 * @crtc_x: x offset of plane on crtc
285 * @crtc_y: y offset of plane on crtc
286 * @crtc_w: width of plane rectangle on crtc
287 * @crtc_h: height of plane rectangle on crtc
288 * @src_x: Not used
289 * @src_y: Not used
290 * @src_w: Not used
291 * @src_h: Not used
292 *
293 *
294 * RETURNS:
295 * Zero on success, error code on failure
296 */
297int vmw_du_cursor_plane_update(struct drm_plane *plane,
298 struct drm_crtc *crtc,
299 struct drm_framebuffer *fb,
300 int crtc_x, int crtc_y,
301 unsigned int crtc_w,
302 unsigned int crtc_h,
303 uint32_t src_x, uint32_t src_y,
304 uint32_t src_w, uint32_t src_h)
305{
306 struct vmw_private *dev_priv = vmw_priv(crtc->dev);
307 struct vmw_display_unit *du = vmw_crtc_to_du(crtc);
308 struct vmw_surface *surface = NULL;
309 struct vmw_dma_buffer *dmabuf = NULL;
310 s32 hotspot_x, hotspot_y;
311 int ret;
312
313 hotspot_x = du->hotspot_x + fb->hot_x;
314 hotspot_y = du->hotspot_y + fb->hot_y;
315
316 /* A lot of the code assumes this */
317 if (crtc_w != 64 || crtc_h != 64) {
318 ret = -EINVAL;
319 goto out;
320 }
321
322 if (vmw_framebuffer_to_vfb(fb)->dmabuf)
323 dmabuf = vmw_framebuffer_to_vfbd(fb)->buffer;
324 else
325 surface = vmw_framebuffer_to_vfbs(fb)->surface;
326
327 if (surface && !surface->snooper.image) {
328 DRM_ERROR("surface not suitable for cursor\n");
329 ret = -EINVAL;
330 goto out;
331 }
332
333 /* setup new image */
334 ret = 0;
335 if (surface) {
336 /* vmw_user_surface_lookup takes one reference */
337 du->cursor_surface = surface;
338
339 du->cursor_age = du->cursor_surface->snooper.age;
340
341 ret = vmw_cursor_update_image(dev_priv, surface->snooper.image,
342 64, 64, hotspot_x, hotspot_y);
343 } else if (dmabuf) {
344 /* vmw_user_surface_lookup takes one reference */
345 du->cursor_dmabuf = dmabuf;
346
347 ret = vmw_cursor_update_dmabuf(dev_priv, dmabuf, crtc_w, crtc_h,
348 hotspot_x, hotspot_y);
349 } else {
350 vmw_cursor_update_position(dev_priv, false, 0, 0);
351 goto out;
352 }
353
354 if (!ret) {
355 du->cursor_x = crtc_x + du->set_gui_x;
356 du->cursor_y = crtc_y + du->set_gui_y;
357
358 vmw_cursor_update_position(dev_priv, true,
359 du->cursor_x + hotspot_x,
360 du->cursor_y + hotspot_y);
361 }
362
363out:
364 return ret;
365}
366
367
368int vmw_du_cursor_plane_disable(struct drm_plane *plane)
369{
370 if (plane->fb) {
371 drm_framebuffer_unreference(plane->fb);
372 plane->fb = NULL;
373 }
374
375 return -EINVAL;
376}
377
378
379void vmw_du_cursor_plane_destroy(struct drm_plane *plane) 277void vmw_du_cursor_plane_destroy(struct drm_plane *plane)
380{ 278{
381 vmw_cursor_update_position(plane->dev->dev_private, false, 0, 0); 279 vmw_cursor_update_position(plane->dev->dev_private, false, 0, 0);
@@ -473,18 +371,6 @@ vmw_du_cursor_plane_prepare_fb(struct drm_plane *plane,
473 371
474 372
475void 373void
476vmw_du_cursor_plane_atomic_disable(struct drm_plane *plane,
477 struct drm_plane_state *old_state)
478{
479 struct drm_crtc *crtc = plane->state->crtc ?: old_state->crtc;
480 struct vmw_private *dev_priv = vmw_priv(crtc->dev);
481
482 drm_atomic_set_fb_for_plane(plane->state, NULL);
483 vmw_cursor_update_position(dev_priv, false, 0, 0);
484}
485
486
487void
488vmw_du_cursor_plane_atomic_update(struct drm_plane *plane, 374vmw_du_cursor_plane_atomic_update(struct drm_plane *plane,
489 struct drm_plane_state *old_state) 375 struct drm_plane_state *old_state)
490{ 376{
@@ -1498,6 +1384,7 @@ vmw_kms_new_framebuffer(struct vmw_private *dev_priv,
1498 */ 1384 */
1499 if (vmw_kms_srf_ok(dev_priv, mode_cmd->width, mode_cmd->height) && 1385 if (vmw_kms_srf_ok(dev_priv, mode_cmd->width, mode_cmd->height) &&
1500 dmabuf && only_2d && 1386 dmabuf && only_2d &&
1387 mode_cmd->width > 64 && /* Don't create a proxy for cursor */
1501 dev_priv->active_display_unit == vmw_du_screen_target) { 1388 dev_priv->active_display_unit == vmw_du_screen_target) {
1502 ret = vmw_create_dmabuf_proxy(dev_priv->dev, mode_cmd, 1389 ret = vmw_create_dmabuf_proxy(dev_priv->dev, mode_cmd,
1503 dmabuf, &surface); 1390 dmabuf, &surface);
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
index 13f2f1d2818a..5f8d678ae675 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
@@ -256,10 +256,6 @@ int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
256 u16 *r, u16 *g, u16 *b, 256 u16 *r, u16 *g, u16 *b,
257 uint32_t size, 257 uint32_t size,
258 struct drm_modeset_acquire_ctx *ctx); 258 struct drm_modeset_acquire_ctx *ctx);
259int vmw_du_crtc_cursor_set2(struct drm_crtc *crtc, struct drm_file *file_priv,
260 uint32_t handle, uint32_t width, uint32_t height,
261 int32_t hot_x, int32_t hot_y);
262int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y);
263int vmw_du_connector_set_property(struct drm_connector *connector, 259int vmw_du_connector_set_property(struct drm_connector *connector,
264 struct drm_property *property, 260 struct drm_property *property,
265 uint64_t val); 261 uint64_t val);
@@ -339,15 +335,6 @@ void vmw_kms_create_implicit_placement_property(struct vmw_private *dev_priv,
339/* Universal Plane Helpers */ 335/* Universal Plane Helpers */
340void vmw_du_primary_plane_destroy(struct drm_plane *plane); 336void vmw_du_primary_plane_destroy(struct drm_plane *plane);
341void vmw_du_cursor_plane_destroy(struct drm_plane *plane); 337void vmw_du_cursor_plane_destroy(struct drm_plane *plane);
342int vmw_du_cursor_plane_disable(struct drm_plane *plane);
343int vmw_du_cursor_plane_update(struct drm_plane *plane,
344 struct drm_crtc *crtc,
345 struct drm_framebuffer *fb,
346 int crtc_x, int crtc_y,
347 unsigned int crtc_w,
348 unsigned int crtc_h,
349 uint32_t src_x, uint32_t src_y,
350 uint32_t src_w, uint32_t src_h);
351 338
352/* Atomic Helpers */ 339/* Atomic Helpers */
353int vmw_du_primary_plane_atomic_check(struct drm_plane *plane, 340int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
@@ -356,8 +343,6 @@ int vmw_du_cursor_plane_atomic_check(struct drm_plane *plane,
356 struct drm_plane_state *state); 343 struct drm_plane_state *state);
357void vmw_du_cursor_plane_atomic_update(struct drm_plane *plane, 344void vmw_du_cursor_plane_atomic_update(struct drm_plane *plane,
358 struct drm_plane_state *old_state); 345 struct drm_plane_state *old_state);
359void vmw_du_cursor_plane_atomic_disable(struct drm_plane *plane,
360 struct drm_plane_state *old_state);
361int vmw_du_cursor_plane_prepare_fb(struct drm_plane *plane, 346int vmw_du_cursor_plane_prepare_fb(struct drm_plane *plane,
362 struct drm_plane_state *new_state); 347 struct drm_plane_state *new_state);
363void vmw_du_plane_cleanup_fb(struct drm_plane *plane, 348void vmw_du_plane_cleanup_fb(struct drm_plane *plane,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index bad31bdf09b6..50be1f034f9e 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -56,6 +56,8 @@ enum stdu_content_type {
56 * @right: Right side of bounding box. 56 * @right: Right side of bounding box.
57 * @top: Top side of bounding box. 57 * @top: Top side of bounding box.
58 * @bottom: Bottom side of bounding box. 58 * @bottom: Bottom side of bounding box.
59 * @fb_left: Left side of the framebuffer/content bounding box
60 * @fb_top: Top of the framebuffer/content bounding box
59 * @buf: DMA buffer when DMA-ing between buffer and screen targets. 61 * @buf: DMA buffer when DMA-ing between buffer and screen targets.
60 * @sid: Surface ID when copying between surface and screen targets. 62 * @sid: Surface ID when copying between surface and screen targets.
61 */ 63 */
@@ -63,6 +65,7 @@ struct vmw_stdu_dirty {
63 struct vmw_kms_dirty base; 65 struct vmw_kms_dirty base;
64 SVGA3dTransferType transfer; 66 SVGA3dTransferType transfer;
65 s32 left, right, top, bottom; 67 s32 left, right, top, bottom;
68 s32 fb_left, fb_top;
66 u32 pitch; 69 u32 pitch;
67 union { 70 union {
68 struct vmw_dma_buffer *buf; 71 struct vmw_dma_buffer *buf;
@@ -647,7 +650,7 @@ static void vmw_stdu_dmabuf_fifo_commit(struct vmw_kms_dirty *dirty)
647 * 650 *
648 * @dirty: The closure structure. 651 * @dirty: The closure structure.
649 * 652 *
650 * This function calculates the bounding box for all the incoming clips 653 * This function calculates the bounding box for all the incoming clips.
651 */ 654 */
652static void vmw_stdu_dmabuf_cpu_clip(struct vmw_kms_dirty *dirty) 655static void vmw_stdu_dmabuf_cpu_clip(struct vmw_kms_dirty *dirty)
653{ 656{
@@ -656,11 +659,19 @@ static void vmw_stdu_dmabuf_cpu_clip(struct vmw_kms_dirty *dirty)
656 659
657 dirty->num_hits = 1; 660 dirty->num_hits = 1;
658 661
659 /* Calculate bounding box */ 662 /* Calculate destination bounding box */
660 ddirty->left = min_t(s32, ddirty->left, dirty->unit_x1); 663 ddirty->left = min_t(s32, ddirty->left, dirty->unit_x1);
661 ddirty->top = min_t(s32, ddirty->top, dirty->unit_y1); 664 ddirty->top = min_t(s32, ddirty->top, dirty->unit_y1);
662 ddirty->right = max_t(s32, ddirty->right, dirty->unit_x2); 665 ddirty->right = max_t(s32, ddirty->right, dirty->unit_x2);
663 ddirty->bottom = max_t(s32, ddirty->bottom, dirty->unit_y2); 666 ddirty->bottom = max_t(s32, ddirty->bottom, dirty->unit_y2);
667
668 /*
669 * Calculate content bounding box. We only need the top-left
670 * coordinate because width and height will be the same as the
671 * destination bounding box above
672 */
673 ddirty->fb_left = min_t(s32, ddirty->fb_left, dirty->fb_x);
674 ddirty->fb_top = min_t(s32, ddirty->fb_top, dirty->fb_y);
664} 675}
665 676
666 677
@@ -697,11 +708,11 @@ static void vmw_stdu_dmabuf_cpu_commit(struct vmw_kms_dirty *dirty)
697 /* Assume we are blitting from Host (display_srf) to Guest (dmabuf) */ 708 /* Assume we are blitting from Host (display_srf) to Guest (dmabuf) */
698 src_pitch = stdu->display_srf->base_size.width * stdu->cpp; 709 src_pitch = stdu->display_srf->base_size.width * stdu->cpp;
699 src = ttm_kmap_obj_virtual(&stdu->host_map, &not_used); 710 src = ttm_kmap_obj_virtual(&stdu->host_map, &not_used);
700 src += dirty->unit_y1 * src_pitch + dirty->unit_x1 * stdu->cpp; 711 src += ddirty->top * src_pitch + ddirty->left * stdu->cpp;
701 712
702 dst_pitch = ddirty->pitch; 713 dst_pitch = ddirty->pitch;
703 dst = ttm_kmap_obj_virtual(&stdu->guest_map, &not_used); 714 dst = ttm_kmap_obj_virtual(&stdu->guest_map, &not_used);
704 dst += dirty->fb_y * dst_pitch + dirty->fb_x * stdu->cpp; 715 dst += ddirty->fb_top * dst_pitch + ddirty->fb_left * stdu->cpp;
705 716
706 717
707 /* Figure out the real direction */ 718 /* Figure out the real direction */
@@ -760,7 +771,7 @@ static void vmw_stdu_dmabuf_cpu_commit(struct vmw_kms_dirty *dirty)
760 } 771 }
761 772
762out_cleanup: 773out_cleanup:
763 ddirty->left = ddirty->top = S32_MAX; 774 ddirty->left = ddirty->top = ddirty->fb_left = ddirty->fb_top = S32_MAX;
764 ddirty->right = ddirty->bottom = S32_MIN; 775 ddirty->right = ddirty->bottom = S32_MIN;
765} 776}
766 777
@@ -812,6 +823,7 @@ int vmw_kms_stdu_dma(struct vmw_private *dev_priv,
812 SVGA3D_READ_HOST_VRAM; 823 SVGA3D_READ_HOST_VRAM;
813 ddirty.left = ddirty.top = S32_MAX; 824 ddirty.left = ddirty.top = S32_MAX;
814 ddirty.right = ddirty.bottom = S32_MIN; 825 ddirty.right = ddirty.bottom = S32_MIN;
826 ddirty.fb_left = ddirty.fb_top = S32_MAX;
815 ddirty.pitch = vfb->base.pitches[0]; 827 ddirty.pitch = vfb->base.pitches[0];
816 ddirty.buf = buf; 828 ddirty.buf = buf;
817 ddirty.base.fifo_commit = vmw_stdu_dmabuf_fifo_commit; 829 ddirty.base.fifo_commit = vmw_stdu_dmabuf_fifo_commit;
@@ -1355,6 +1367,11 @@ vmw_stdu_primary_plane_atomic_update(struct drm_plane *plane,
1355 DRM_ERROR("Failed to bind surface to STDU.\n"); 1367 DRM_ERROR("Failed to bind surface to STDU.\n");
1356 else 1368 else
1357 crtc->primary->fb = plane->state->fb; 1369 crtc->primary->fb = plane->state->fb;
1370
1371 ret = vmw_stdu_update_st(dev_priv, stdu);
1372
1373 if (ret)
1374 DRM_ERROR("Failed to update STDU.\n");
1358} 1375}
1359 1376
1360 1377
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
index 7681341fe32b..6b70bd259953 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
@@ -1274,11 +1274,14 @@ int vmw_gb_surface_define_ioctl(struct drm_device *dev, void *data,
1274 struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; 1274 struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile;
1275 int ret; 1275 int ret;
1276 uint32_t size; 1276 uint32_t size;
1277 uint32_t backup_handle; 1277 uint32_t backup_handle = 0;
1278 1278
1279 if (req->multisample_count != 0) 1279 if (req->multisample_count != 0)
1280 return -EINVAL; 1280 return -EINVAL;
1281 1281
1282 if (req->mip_levels > DRM_VMW_MAX_MIP_LEVELS)
1283 return -EINVAL;
1284
1282 if (unlikely(vmw_user_surface_size == 0)) 1285 if (unlikely(vmw_user_surface_size == 0))
1283 vmw_user_surface_size = ttm_round_pot(sizeof(*user_srf)) + 1286 vmw_user_surface_size = ttm_round_pot(sizeof(*user_srf)) +
1284 128; 1287 128;
@@ -1314,12 +1317,16 @@ int vmw_gb_surface_define_ioctl(struct drm_device *dev, void *data,
1314 ret = vmw_user_dmabuf_lookup(tfile, req->buffer_handle, 1317 ret = vmw_user_dmabuf_lookup(tfile, req->buffer_handle,
1315 &res->backup, 1318 &res->backup,
1316 &user_srf->backup_base); 1319 &user_srf->backup_base);
1317 if (ret == 0 && res->backup->base.num_pages * PAGE_SIZE < 1320 if (ret == 0) {
1318 res->backup_size) { 1321 if (res->backup->base.num_pages * PAGE_SIZE <
1319 DRM_ERROR("Surface backup buffer is too small.\n"); 1322 res->backup_size) {
1320 vmw_dmabuf_unreference(&res->backup); 1323 DRM_ERROR("Surface backup buffer is too small.\n");
1321 ret = -EINVAL; 1324 vmw_dmabuf_unreference(&res->backup);
1322 goto out_unlock; 1325 ret = -EINVAL;
1326 goto out_unlock;
1327 } else {
1328 backup_handle = req->buffer_handle;
1329 }
1323 } 1330 }
1324 } else if (req->drm_surface_flags & drm_vmw_surface_flag_create_buffer) 1331 } else if (req->drm_surface_flags & drm_vmw_surface_flag_create_buffer)
1325 ret = vmw_user_dmabuf_alloc(dev_priv, tfile, 1332 ret = vmw_user_dmabuf_alloc(dev_priv, tfile,
@@ -1491,7 +1498,7 @@ int vmw_surface_gb_priv_define(struct drm_device *dev,
1491 dev_priv->stdu_max_height); 1498 dev_priv->stdu_max_height);
1492 1499
1493 if (size.width > max_width || size.height > max_height) { 1500 if (size.width > max_width || size.height > max_height) {
1494 DRM_ERROR("%ux%u\n, exeeds max surface size %ux%u", 1501 DRM_ERROR("%ux%u\n, exceeds max surface size %ux%u",
1495 size.width, size.height, 1502 size.width, size.height,
1496 max_width, max_height); 1503 max_width, max_height);
1497 return -EINVAL; 1504 return -EINVAL;
diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c
index f05ebb14fa63..ac65f52850a6 100644
--- a/drivers/gpu/host1x/dev.c
+++ b/drivers/gpu/host1x/dev.c
@@ -172,7 +172,7 @@ static int host1x_probe(struct platform_device *pdev)
172 172
173 host->rst = devm_reset_control_get(&pdev->dev, "host1x"); 173 host->rst = devm_reset_control_get(&pdev->dev, "host1x");
174 if (IS_ERR(host->rst)) { 174 if (IS_ERR(host->rst)) {
175 err = PTR_ERR(host->clk); 175 err = PTR_ERR(host->rst);
176 dev_err(&pdev->dev, "failed to get reset: %d\n", err); 176 dev_err(&pdev->dev, "failed to get reset: %d\n", err);
177 return err; 177 return err;
178 } 178 }
diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c
index 16d556816b5f..2fb5f432a54c 100644
--- a/drivers/gpu/ipu-v3/ipu-common.c
+++ b/drivers/gpu/ipu-v3/ipu-common.c
@@ -725,15 +725,16 @@ void ipu_set_ic_src_mux(struct ipu_soc *ipu, int csi_id, bool vdi)
725 spin_lock_irqsave(&ipu->lock, flags); 725 spin_lock_irqsave(&ipu->lock, flags);
726 726
727 val = ipu_cm_read(ipu, IPU_CONF); 727 val = ipu_cm_read(ipu, IPU_CONF);
728 if (vdi) { 728 if (vdi)
729 val |= IPU_CONF_IC_INPUT; 729 val |= IPU_CONF_IC_INPUT;
730 } else { 730 else
731 val &= ~IPU_CONF_IC_INPUT; 731 val &= ~IPU_CONF_IC_INPUT;
732 if (csi_id == 1) 732
733 val |= IPU_CONF_CSI_SEL; 733 if (csi_id == 1)
734 else 734 val |= IPU_CONF_CSI_SEL;
735 val &= ~IPU_CONF_CSI_SEL; 735 else
736 } 736 val &= ~IPU_CONF_CSI_SEL;
737
737 ipu_cm_write(ipu, val, IPU_CONF); 738 ipu_cm_write(ipu, val, IPU_CONF);
738 739
739 spin_unlock_irqrestore(&ipu->lock, flags); 740 spin_unlock_irqrestore(&ipu->lock, flags);
diff --git a/drivers/gpu/ipu-v3/ipu-pre.c b/drivers/gpu/ipu-v3/ipu-pre.c
index c55563379e2e..c35f74c83065 100644
--- a/drivers/gpu/ipu-v3/ipu-pre.c
+++ b/drivers/gpu/ipu-v3/ipu-pre.c
@@ -131,8 +131,6 @@ int ipu_pre_get(struct ipu_pre *pre)
131 if (pre->in_use) 131 if (pre->in_use)
132 return -EBUSY; 132 return -EBUSY;
133 133
134 clk_prepare_enable(pre->clk_axi);
135
136 /* first get the engine out of reset and remove clock gating */ 134 /* first get the engine out of reset and remove clock gating */
137 writel(0, pre->regs + IPU_PRE_CTRL); 135 writel(0, pre->regs + IPU_PRE_CTRL);
138 136
@@ -149,12 +147,7 @@ int ipu_pre_get(struct ipu_pre *pre)
149 147
150void ipu_pre_put(struct ipu_pre *pre) 148void ipu_pre_put(struct ipu_pre *pre)
151{ 149{
152 u32 val; 150 writel(IPU_PRE_CTRL_SFTRST, pre->regs + IPU_PRE_CTRL);
153
154 val = IPU_PRE_CTRL_SFTRST | IPU_PRE_CTRL_CLKGATE;
155 writel(val, pre->regs + IPU_PRE_CTRL);
156
157 clk_disable_unprepare(pre->clk_axi);
158 151
159 pre->in_use = false; 152 pre->in_use = false;
160} 153}
@@ -249,6 +242,8 @@ static int ipu_pre_probe(struct platform_device *pdev)
249 if (!pre->buffer_virt) 242 if (!pre->buffer_virt)
250 return -ENOMEM; 243 return -ENOMEM;
251 244
245 clk_prepare_enable(pre->clk_axi);
246
252 pre->dev = dev; 247 pre->dev = dev;
253 platform_set_drvdata(pdev, pre); 248 platform_set_drvdata(pdev, pre);
254 mutex_lock(&ipu_pre_list_mutex); 249 mutex_lock(&ipu_pre_list_mutex);
@@ -268,6 +263,8 @@ static int ipu_pre_remove(struct platform_device *pdev)
268 available_pres--; 263 available_pres--;
269 mutex_unlock(&ipu_pre_list_mutex); 264 mutex_unlock(&ipu_pre_list_mutex);
270 265
266 clk_disable_unprepare(pre->clk_axi);
267
271 if (pre->buffer_virt) 268 if (pre->buffer_virt)
272 gen_pool_free(pre->iram, (unsigned long)pre->buffer_virt, 269 gen_pool_free(pre->iram, (unsigned long)pre->buffer_virt,
273 IPU_PRE_MAX_WIDTH * IPU_PRE_NUM_SCANLINES * 4); 270 IPU_PRE_MAX_WIDTH * IPU_PRE_NUM_SCANLINES * 4);
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index fe40e5e499dd..687705c50794 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -275,10 +275,12 @@ config HID_EMS_FF
275 - Trio Linker Plus II 275 - Trio Linker Plus II
276 276
277config HID_ELECOM 277config HID_ELECOM
278 tristate "ELECOM BM084 bluetooth mouse" 278 tristate "ELECOM HID devices"
279 depends on HID 279 depends on HID
280 ---help--- 280 ---help---
281 Support for the ELECOM BM084 (bluetooth mouse). 281 Support for ELECOM devices:
282 - BM084 Bluetooth Mouse
283 - DEFT Trackball (Wired and wireless)
282 284
283config HID_ELO 285config HID_ELO
284 tristate "ELO USB 4000/4500 touchscreen" 286 tristate "ELO USB 4000/4500 touchscreen"
diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
index 16df6cc90235..a6268f2f7408 100644
--- a/drivers/hid/hid-asus.c
+++ b/drivers/hid/hid-asus.c
@@ -69,6 +69,7 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad");
69#define QUIRK_IS_MULTITOUCH BIT(3) 69#define QUIRK_IS_MULTITOUCH BIT(3)
70#define QUIRK_NO_CONSUMER_USAGES BIT(4) 70#define QUIRK_NO_CONSUMER_USAGES BIT(4)
71#define QUIRK_USE_KBD_BACKLIGHT BIT(5) 71#define QUIRK_USE_KBD_BACKLIGHT BIT(5)
72#define QUIRK_T100_KEYBOARD BIT(6)
72 73
73#define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \ 74#define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \
74 QUIRK_NO_INIT_REPORTS | \ 75 QUIRK_NO_INIT_REPORTS | \
@@ -536,6 +537,8 @@ static void asus_remove(struct hid_device *hdev)
536 drvdata->kbd_backlight->removed = true; 537 drvdata->kbd_backlight->removed = true;
537 cancel_work_sync(&drvdata->kbd_backlight->work); 538 cancel_work_sync(&drvdata->kbd_backlight->work);
538 } 539 }
540
541 hid_hw_stop(hdev);
539} 542}
540 543
541static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc, 544static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc,
@@ -548,6 +551,12 @@ static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc,
548 hid_info(hdev, "Fixing up Asus notebook report descriptor\n"); 551 hid_info(hdev, "Fixing up Asus notebook report descriptor\n");
549 rdesc[55] = 0xdd; 552 rdesc[55] = 0xdd;
550 } 553 }
554 if (drvdata->quirks & QUIRK_T100_KEYBOARD &&
555 *rsize == 76 && rdesc[73] == 0x81 && rdesc[74] == 0x01) {
556 hid_info(hdev, "Fixing up Asus T100 keyb report descriptor\n");
557 rdesc[74] &= ~HID_MAIN_ITEM_CONSTANT;
558 }
559
551 return rdesc; 560 return rdesc;
552} 561}
553 562
@@ -560,6 +569,9 @@ static const struct hid_device_id asus_devices[] = {
560 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) }, 569 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) },
561 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, 570 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
562 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2), QUIRK_USE_KBD_BACKLIGHT }, 571 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2), QUIRK_USE_KBD_BACKLIGHT },
572 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
573 USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD),
574 QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES },
563 { } 575 { }
564}; 576};
565MODULE_DEVICE_TABLE(hid, asus_devices); 577MODULE_DEVICE_TABLE(hid, asus_devices);
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 37084b645785..6e040692f1d8 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -826,11 +826,35 @@ static int hid_scan_report(struct hid_device *hid)
826 * hid-rmi should take care of them, 826 * hid-rmi should take care of them,
827 * not hid-generic 827 * not hid-generic
828 */ 828 */
829 if (IS_ENABLED(CONFIG_HID_RMI)) 829 hid->group = HID_GROUP_RMI;
830 hid->group = HID_GROUP_RMI;
831 break; 830 break;
832 } 831 }
833 832
833 /* fall back to generic driver in case specific driver doesn't exist */
834 switch (hid->group) {
835 case HID_GROUP_MULTITOUCH_WIN_8:
836 /* fall-through */
837 case HID_GROUP_MULTITOUCH:
838 if (!IS_ENABLED(CONFIG_HID_MULTITOUCH))
839 hid->group = HID_GROUP_GENERIC;
840 break;
841 case HID_GROUP_SENSOR_HUB:
842 if (!IS_ENABLED(CONFIG_HID_SENSOR_HUB))
843 hid->group = HID_GROUP_GENERIC;
844 break;
845 case HID_GROUP_RMI:
846 if (!IS_ENABLED(CONFIG_HID_RMI))
847 hid->group = HID_GROUP_GENERIC;
848 break;
849 case HID_GROUP_WACOM:
850 if (!IS_ENABLED(CONFIG_HID_WACOM))
851 hid->group = HID_GROUP_GENERIC;
852 break;
853 case HID_GROUP_LOGITECH_DJ_DEVICE:
854 if (!IS_ENABLED(CONFIG_HID_LOGITECH_DJ))
855 hid->group = HID_GROUP_GENERIC;
856 break;
857 }
834 vfree(parser); 858 vfree(parser);
835 return 0; 859 return 0;
836} 860}
@@ -1763,15 +1787,23 @@ EXPORT_SYMBOL_GPL(hid_disconnect);
1763 * used as a driver. See hid_scan_report(). 1787 * used as a driver. See hid_scan_report().
1764 */ 1788 */
1765static const struct hid_device_id hid_have_special_driver[] = { 1789static const struct hid_device_id hid_have_special_driver[] = {
1790#if IS_ENABLED(CONFIG_HID_A4TECH)
1766 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) }, 1791 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
1767 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) }, 1792 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
1768 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) }, 1793 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
1794#endif
1795#if IS_ENABLED(CONFIG_HID_ACCUTOUCH)
1796 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
1797#endif
1798#if IS_ENABLED(CONFIG_HID_ACRUX)
1769 { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) }, 1799 { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
1770 { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0xf705) }, 1800 { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0xf705) },
1801#endif
1802#if IS_ENABLED(CONFIG_HID_ALPS)
1771 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_ALPS_JP, HID_DEVICE_ID_ALPS_U1_DUAL) }, 1803 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_ALPS_JP, HID_DEVICE_ID_ALPS_U1_DUAL) },
1804#endif
1805#if IS_ENABLED(CONFIG_HID_APPLE)
1772 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) }, 1806 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
1773 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
1774 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD) },
1775 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) }, 1807 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) },
1776 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO) }, 1808 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO) },
1777 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI) }, 1809 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI) },
@@ -1792,11 +1824,6 @@ static const struct hid_device_id hid_have_special_driver[] = {
1792 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI) }, 1824 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI) },
1793 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO) }, 1825 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO) },
1794 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS) }, 1826 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS) },
1795 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
1796 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL2) },
1797 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL3) },
1798 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
1799 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) },
1800 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI) }, 1827 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI) },
1801 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO) }, 1828 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO) },
1802 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS) }, 1829 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS) },
@@ -1851,59 +1878,100 @@ static const struct hid_device_id hid_have_special_driver[] = {
1851 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_ANSI) }, 1878 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_ANSI) },
1852 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, 1879 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
1853 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, 1880 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
1881#endif
1882#if IS_ENABLED(CONFIG_HID_APPLEIR)
1883 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
1884 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL2) },
1885 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL3) },
1886 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
1887 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) },
1888#endif
1889#if IS_ENABLED(CONFIG_HID_ASUS)
1854 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD) }, 1890 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD) },
1855 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) }, 1891 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) },
1856 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) }, 1892 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) },
1857 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2) }, 1893 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2) },
1894 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD) },
1895#endif
1896#if IS_ENABLED(CONFIG_HID_AUREAL)
1858 { HID_USB_DEVICE(USB_VENDOR_ID_AUREAL, USB_DEVICE_ID_AUREAL_W01RN) }, 1897 { HID_USB_DEVICE(USB_VENDOR_ID_AUREAL, USB_DEVICE_ID_AUREAL_W01RN) },
1898#endif
1899#if IS_ENABLED(CONFIG_HID_BELKIN)
1859 { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) }, 1900 { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) },
1901 { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
1902#endif
1903#if IS_ENABLED(CONFIG_HID_BETOP_FF)
1860 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185BFM, 0x2208) }, 1904 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185BFM, 0x2208) },
1861 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185PC, 0x5506) }, 1905 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185PC, 0x5506) },
1862 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185V2PC, 0x1850) }, 1906 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185V2PC, 0x1850) },
1863 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185V2BFM, 0x5500) }, 1907 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185V2BFM, 0x5500) },
1864 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE) }, 1908#endif
1865 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE_2) }, 1909#if IS_ENABLED(CONFIG_HID_CHERRY)
1866 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION) }, 1910 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION) },
1867 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR) }, 1911 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR) },
1912#endif
1913#if IS_ENABLED(CONFIG_HID_CHICONY)
1868 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) }, 1914 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) },
1869 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS) },
1870 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) }, 1915 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) },
1871 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) }, 1916 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) },
1872 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) }, 1917 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
1918 { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_JESS_ZEN_AIO_KBD) },
1919#endif
1920#if IS_ENABLED(CONFIG_HID_CMEDIA)
1921 { HID_USB_DEVICE(USB_VENDOR_ID_CMEDIA, USB_DEVICE_ID_CM6533) },
1922#endif
1923#if IS_ENABLED(CONFIG_HID_CORSAIR)
1873 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K90) }, 1924 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K90) },
1874 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB) }, 1925 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB) },
1875 { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) }, 1926#endif
1927#if IS_ENABLED(CONFIG_HID_CP2112)
1876 { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_CP2112) }, 1928 { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_CP2112) },
1929#endif
1930#if IS_ENABLED(CONFIG_HID_CYPRESS)
1877 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) }, 1931 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) },
1878 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2) }, 1932 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2) },
1879 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_3) }, 1933 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_3) },
1880 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_4) }, 1934 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_4) },
1881 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) }, 1935 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) },
1882 { HID_USB_DEVICE(USB_VENDOR_ID_DELCOM, USB_DEVICE_ID_DELCOM_VISUAL_IND) }, 1936#endif
1937#if IS_ENABLED(CONFIG_HID_DRAGONRISE)
1883 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) }, 1938 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) },
1884 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0011) }, 1939 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0011) },
1885#if IS_ENABLED(CONFIG_HID_MAYFLASH)
1886 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3) },
1887 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR) },
1888 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE1) },
1889 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE2) },
1890#endif 1940#endif
1891 { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, USB_DEVICE_ID_DREAM_CHEEKY_WN) }, 1941#if IS_ENABLED(CONFIG_HID_ELECOM)
1892 { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, USB_DEVICE_ID_DREAM_CHEEKY_FA) },
1893 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) }, 1942 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
1943 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRED) },
1944 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRELESS) },
1945#endif
1946#if IS_ENABLED(CONFIG_HID_ELO)
1894 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) }, 1947 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },
1895 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0030) }, 1948 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0030) },
1896 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) }, 1949#endif
1950#if IS_ENABLED(CONFIG_HID_EMS_FF)
1897 { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) }, 1951 { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
1952#endif
1953#if IS_ENABLED(CONFIG_HID_EZKEY)
1898 { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) }, 1954 { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
1899 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) }, 1955#endif
1900 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR) }, 1956#if IS_ENABLED(CONFIG_HID_GEMBIRD)
1901 { HID_USB_DEVICE(USB_VENDOR_ID_GEMBIRD, USB_DEVICE_ID_GEMBIRD_JPD_DUALFORCE2) }, 1957 { HID_USB_DEVICE(USB_VENDOR_ID_GEMBIRD, USB_DEVICE_ID_GEMBIRD_JPD_DUALFORCE2) },
1902 { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0003) }, 1958#endif
1959#if IS_ENABLED(CONFIG_HID_GFRM)
1960 { HID_BLUETOOTH_DEVICE(0x58, 0x2000) },
1961 { HID_BLUETOOTH_DEVICE(0x471, 0x2210) },
1962#endif
1963#if IS_ENABLED(CONFIG_HID_GREENASIA)
1903 { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0012) }, 1964 { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0012) },
1965#endif
1966#if IS_ENABLED(CONFIG_HID_GT683R)
1967 { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) },
1968#endif
1969#if IS_ENABLED(CONFIG_HID_GYRATION)
1904 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE) }, 1970 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE) },
1905 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) }, 1971 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
1906 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) }, 1972 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) },
1973#endif
1974#if IS_ENABLED(CONFIG_HID_HOLTEK)
1907 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK, USB_DEVICE_ID_HOLTEK_ON_LINE_GRIP) }, 1975 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK, USB_DEVICE_ID_HOLTEK_ON_LINE_GRIP) },
1908 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD) }, 1976 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD) },
1909 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A) }, 1977 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A) },
@@ -1912,12 +1980,17 @@ static const struct hid_device_id hid_have_special_driver[] = {
1912 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A072) }, 1980 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A072) },
1913 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) }, 1981 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) },
1914 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2) }, 1982 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2) },
1915 { HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_TABLET) }, 1983#endif
1916 { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_JESS_ZEN_AIO_KBD) }, 1984#if IS_ENABLED(CONFIG_HID_ICADE)
1917 { HID_USB_DEVICE(USB_VENDOR_ID_JESS2, USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD) },
1918 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) }, 1985 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) },
1986#endif
1987#if IS_ENABLED(CONFIG_HID_KENSINGTON)
1919 { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) }, 1988 { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
1989#endif
1990#if IS_ENABLED(CONFIG_HID_KEYTOUCH)
1920 { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) }, 1991 { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) },
1992#endif
1993#if IS_ENABLED(CONFIG_HID_KYE)
1921 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) }, 1994 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },
1922 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_MANTICORE) }, 1995 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_MANTICORE) },
1923 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) }, 1996 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) },
@@ -1927,21 +2000,29 @@ static const struct hid_device_id hid_have_special_driver[] = {
1927 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2) }, 2000 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2) },
1928 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) }, 2001 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) },
1929 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912) }, 2002 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912) },
1930 { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) }, 2003#endif
2004#if IS_ENABLED(CONFIG_HID_LCPOWER)
1931 { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000 ) }, 2005 { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000 ) },
2006#endif
2007#if IS_ENABLED(CONFIG_HID_LED)
2008 { HID_USB_DEVICE(USB_VENDOR_ID_DELCOM, USB_DEVICE_ID_DELCOM_VISUAL_IND) },
2009 { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, USB_DEVICE_ID_DREAM_CHEEKY_WN) },
2010 { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, USB_DEVICE_ID_DREAM_CHEEKY_FA) },
2011 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_LUXAFOR) },
2012 { HID_USB_DEVICE(USB_VENDOR_ID_RISO_KAGAKU, USB_DEVICE_ID_RI_KA_WEBMAIL) },
2013 { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) },
2014#endif
1932#if IS_ENABLED(CONFIG_HID_LENOVO) 2015#if IS_ENABLED(CONFIG_HID_LENOVO)
1933 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) }, 2016 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) },
1934 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) }, 2017 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) },
1935 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) }, 2018 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) },
1936 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) }, 2019 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) },
1937#endif 2020#endif
1938 { HID_USB_DEVICE(USB_VENDOR_ID_LG, USB_DEVICE_ID_LG_MELFAS_MT) }, 2021#if IS_ENABLED(CONFIG_HID_LOGITECH)
1939 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) }, 2022 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
1940 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) }, 2023 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
1941 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) }, 2024 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
1942 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER) }, 2025 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER) },
1943 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3) },
1944 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_T651) },
1945 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_DESKTOP) }, 2026 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_DESKTOP) },
1946 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE) }, 2027 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE) },
1947 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_MINI) }, 2028 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_MINI) },
@@ -1954,7 +2035,6 @@ static const struct hid_device_id hid_have_special_driver[] = {
1954 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD) }, 2035 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD) },
1955 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2) }, 2036 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2) },
1956 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G29_WHEEL) }, 2037 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G29_WHEEL) },
1957 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G920_WHEEL) },
1958 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_F3D) }, 2038 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_F3D) },
1959 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG ) }, 2039 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG ) },
1960 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) }, 2040 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) },
@@ -1966,17 +2046,30 @@ static const struct hid_device_id hid_have_special_driver[] = {
1966 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFGT_WHEEL) }, 2046 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFGT_WHEEL) },
1967 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) }, 2047 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
1968 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G27_WHEEL) }, 2048 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G27_WHEEL) },
1969#if IS_ENABLED(CONFIG_HID_LOGITECH_DJ)
1970 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER) },
1971 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER_2) },
1972#endif
1973 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL) }, 2049 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL) },
1974 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) }, 2050 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
1975 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACETRAVELLER) }, 2051 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACETRAVELLER) },
1976 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR) }, 2052 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR) },
1977 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD) }, 2053#endif
1978 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD_BOOTLOADER) }, 2054#if IS_ENABLED(CONFIG_HID_LOGITECH_HIDPP)
1979 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_LUXAFOR) }, 2055 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_T651) },
2056 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G920_WHEEL) },
2057#endif
2058#if IS_ENABLED(CONFIG_HID_LOGITECH_DJ)
2059 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER) },
2060 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER_2) },
2061#endif
2062#if IS_ENABLED(CONFIG_HID_MAGICMOUSE)
2063 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
2064 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD) },
2065#endif
2066#if IS_ENABLED(CONFIG_HID_MAYFLASH)
2067 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3) },
2068 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR) },
2069 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE1) },
2070 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE2) },
2071#endif
2072#if IS_ENABLED(CONFIG_HID_MICROSOFT)
1980 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500) }, 2073 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500) },
1981 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_KEYBOARD) }, 2074 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_KEYBOARD) },
1982 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) }, 2075 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
@@ -1992,9 +2085,22 @@ static const struct hid_device_id hid_have_special_driver[] = {
1992 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_600) }, 2085 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_600) },
1993 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3KV1) }, 2086 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3KV1) },
1994 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER) }, 2087 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER) },
2088 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
2089#endif
2090#if IS_ENABLED(CONFIG_HID_MONTEREY)
1995 { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) }, 2091 { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
1996 { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) }, 2092#endif
2093#if IS_ENABLED(CONFIG_HID_MULTITOUCH)
2094 { HID_USB_DEVICE(USB_VENDOR_ID_LG, USB_DEVICE_ID_LG_MELFAS_MT) },
2095#endif
2096#if IS_ENABLED(CONFIG_HID_WIIMOTE)
2097 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
2098 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE2) },
2099#endif
2100#if IS_ENABLED(CONFIG_HID_NTI)
1997 { HID_USB_DEVICE(USB_VENDOR_ID_NTI, USB_DEVICE_ID_USB_SUN) }, 2101 { HID_USB_DEVICE(USB_VENDOR_ID_NTI, USB_DEVICE_ID_USB_SUN) },
2102#endif
2103#if IS_ENABLED(CONFIG_HID_NTRIG)
1998 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) }, 2104 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) },
1999 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1) }, 2105 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1) },
2000 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_2) }, 2106 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_2) },
@@ -2014,13 +2120,41 @@ static const struct hid_device_id hid_have_special_driver[] = {
2014 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_16) }, 2120 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_16) },
2015 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_17) }, 2121 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_17) },
2016 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) }, 2122 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) },
2123#endif
2124#if IS_ENABLED(CONFIG_HID_ORTEK)
2017 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) }, 2125 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) },
2018 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) }, 2126 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
2127 { HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) },
2128#endif
2129#if IS_ENABLED(CONFIG_HID_PANTHERLORD)
2130 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
2131 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR) },
2132 { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0003) },
2133 { HID_USB_DEVICE(USB_VENDOR_ID_JESS2, USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD) },
2134#endif
2135#if IS_ENABLED(CONFIG_HID_PENMOUNT)
2019 { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_6000) }, 2136 { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_6000) },
2137#endif
2138#if IS_ENABLED(CONFIG_HID_PETALYNX)
2020 { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) }, 2139 { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
2140#endif
2141#if IS_ENABLED(CONFIG_HID_PICOLCD)
2142 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD) },
2143 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD_BOOTLOADER) },
2144#endif
2145#if IS_ENABLED(CONFIG_HID_PLANTRONICS)
2021 { HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS, HID_ANY_ID) }, 2146 { HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS, HID_ANY_ID) },
2147#endif
2148#if IS_ENABLED(CONFIG_HID_PRIMAX)
2022 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) }, 2149 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
2023 { HID_USB_DEVICE(USB_VENDOR_ID_RISO_KAGAKU, USB_DEVICE_ID_RI_KA_WEBMAIL) }, 2150#endif
2151#if IS_ENABLED(CONFIG_HID_PRODIKEYS)
2152 { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) },
2153#endif
2154#if IS_ENABLED(CONFIG_HID_RMI)
2155 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_COVER) },
2156 { HID_USB_DEVICE(USB_VENDOR_ID_RAZER, USB_DEVICE_ID_RAZER_BLADE_14) },
2157#endif
2024#if IS_ENABLED(CONFIG_HID_ROCCAT) 2158#if IS_ENABLED(CONFIG_HID_ROCCAT)
2025 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) }, 2159 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },
2026 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKU) }, 2160 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKU) },
@@ -2048,9 +2182,21 @@ static const struct hid_device_id hid_have_special_driver[] = {
2048 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT5) }, 2182 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT5) },
2049 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9) }, 2183 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9) },
2050#endif 2184#endif
2185#if IS_ENABLED(CONFIG_HID_SAMSUNG)
2051 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) }, 2186 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
2052 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) }, 2187 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
2053 { HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) }, 2188#endif
2189#if IS_ENABLED(CONFIG_HID_SMARTJOYPLUS)
2190 { HID_USB_DEVICE(USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII) },
2191 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SMARTJOY_PLUS) },
2192 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SUPER_JOY_BOX_3) },
2193 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD) },
2194 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO) },
2195 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_DUAL_BOX_PRO) },
2196 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO) },
2197#endif
2198#if IS_ENABLED(CONFIG_HID_SONY)
2199 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3) },
2054 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE) }, 2200 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE) },
2055 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) }, 2201 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) },
2056 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) }, 2202 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) },
@@ -2069,9 +2215,17 @@ static const struct hid_device_id hid_have_special_driver[] = {
2069 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, 2215 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
2070 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) }, 2216 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) },
2071 { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER) }, 2217 { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER) },
2218#endif
2219#if IS_ENABLED(CONFIG_HID_SPEEDLINK)
2220 { HID_USB_DEVICE(USB_VENDOR_ID_X_TENSIONS, USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE) },
2221#endif
2222#if IS_ENABLED(CONFIG_HID_STEELSERIES)
2072 { HID_USB_DEVICE(USB_VENDOR_ID_STEELSERIES, USB_DEVICE_ID_STEELSERIES_SRWS1) }, 2223 { HID_USB_DEVICE(USB_VENDOR_ID_STEELSERIES, USB_DEVICE_ID_STEELSERIES_SRWS1) },
2224#endif
2225#if IS_ENABLED(CONFIG_HID_SUNPLUS)
2073 { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) }, 2226 { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
2074 { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) }, 2227#endif
2228#if IS_ENABLED(CONFIG_HID_THRUSTMASTER)
2075 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) }, 2229 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
2076 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) }, 2230 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) },
2077 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb323) }, 2231 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb323) },
@@ -2080,12 +2234,25 @@ static const struct hid_device_id hid_have_special_driver[] = {
2080 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653) }, 2234 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653) },
2081 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) }, 2235 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) },
2082 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a) }, 2236 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a) },
2237#endif
2238#if IS_ENABLED(CONFIG_HID_TIVO)
2083 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_BT) }, 2239 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_BT) },
2084 { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE) }, 2240 { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE) },
2085 { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_PRO) }, 2241 { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_PRO) },
2242#endif
2243#if IS_ENABLED(CONFIG_HID_TOPSEED)
2244 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE) },
2245 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE_2) },
2246 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS) },
2086 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) }, 2247 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) },
2087 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) }, 2248 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) },
2249#endif
2250#if IS_ENABLED(CONFIG_HID_TWINHAN)
2088 { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) }, 2251 { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
2252#endif
2253#if IS_ENABLED(CONFIG_HID_UCLOGIC)
2254 { HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_TABLET) },
2255 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_HUION_TABLET) },
2089 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209) }, 2256 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209) },
2090 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U) }, 2257 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U) },
2091 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U) }, 2258 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U) },
@@ -2093,20 +2260,17 @@ static const struct hid_device_id hid_have_special_driver[] = {
2093 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP1062) }, 2260 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP1062) },
2094 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_WIRELESS_TABLET_TWHL850) }, 2261 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_WIRELESS_TABLET_TWHL850) },
2095 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWHA60) }, 2262 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWHA60) },
2096 { HID_USB_DEVICE(USB_VENDOR_ID_THQ, USB_DEVICE_ID_THQ_PS3_UDRAW) },
2097 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_YIYNOVA_TABLET) }, 2263 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_YIYNOVA_TABLET) },
2098 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UGEE_TABLET_81) }, 2264 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UGEE_TABLET_81) },
2099 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UGEE_TABLET_45) }, 2265 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UGEE_TABLET_45) },
2100 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_DRAWIMAGE_G3) }, 2266 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_DRAWIMAGE_G3) },
2101 { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, USB_DEVICE_ID_UGTIZER_TABLET_GP0610) },
2102 { HID_USB_DEVICE(USB_VENDOR_ID_UGEE, USB_DEVICE_ID_UGEE_TABLET_EX07S) }, 2267 { HID_USB_DEVICE(USB_VENDOR_ID_UGEE, USB_DEVICE_ID_UGEE_TABLET_EX07S) },
2103 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SMARTJOY_PLUS) }, 2268 { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, USB_DEVICE_ID_UGTIZER_TABLET_GP0610) },
2104 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SUPER_JOY_BOX_3) }, 2269#endif
2105 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD) }, 2270#if IS_ENABLED(CONFIG_HID_UDRAW_PS3)
2106 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO) }, 2271 { HID_USB_DEVICE(USB_VENDOR_ID_THQ, USB_DEVICE_ID_THQ_PS3_UDRAW) },
2107 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_DUAL_BOX_PRO) }, 2272#endif
2108 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO) }, 2273#if IS_ENABLED(CONFIG_HID_WALTOP)
2109 { HID_USB_DEVICE(USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII) },
2110 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) }, 2274 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) },
2111 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) }, 2275 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) },
2112 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_Q_PAD) }, 2276 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_Q_PAD) },
@@ -2114,19 +2278,18 @@ static const struct hid_device_id hid_have_special_driver[] = {
2114 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH) }, 2278 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH) },
2115 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH) }, 2279 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH) },
2116 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET) }, 2280 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET) },
2117 { HID_USB_DEVICE(USB_VENDOR_ID_X_TENSIONS, USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE) }, 2281#endif
2282#if IS_ENABLED(CONFIG_HID_XINMO)
2118 { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE) }, 2283 { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE) },
2119 { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_THT_2P_ARCADE) }, 2284 { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_THT_2P_ARCADE) },
2285#endif
2286#if IS_ENABLED(CONFIG_HID_ZEROPLUS)
2120 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) }, 2287 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
2121 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) }, 2288 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
2289#endif
2290#if IS_ENABLED(CONFIG_HID_ZYDACRON)
2122 { HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) }, 2291 { HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) },
2123 2292#endif
2124 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
2125 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
2126 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE2) },
2127 { HID_USB_DEVICE(USB_VENDOR_ID_RAZER, USB_DEVICE_ID_RAZER_BLADE_14) },
2128 { HID_USB_DEVICE(USB_VENDOR_ID_CMEDIA, USB_DEVICE_ID_CM6533) },
2129 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_COVER) },
2130 { } 2293 { }
2131}; 2294};
2132 2295
diff --git a/drivers/hid/hid-elecom.c b/drivers/hid/hid-elecom.c
index 6e3848a8d8dd..e2c7465df69f 100644
--- a/drivers/hid/hid-elecom.c
+++ b/drivers/hid/hid-elecom.c
@@ -1,10 +1,8 @@
1/* 1/*
2 * HID driver for Elecom BM084 (bluetooth mouse). 2 * HID driver for ELECOM devices.
3 * Removes a non-existing horizontal wheel from
4 * the HID descriptor.
5 * (This module is based on "hid-ortek".)
6 *
7 * Copyright (c) 2010 Richard Nauber <Richard.Nauber@gmail.com> 3 * Copyright (c) 2010 Richard Nauber <Richard.Nauber@gmail.com>
4 * Copyright (c) 2016 Yuxuan Shui <yshuiv7@gmail.com>
5 * Copyright (c) 2017 Diego Elio Pettenò <flameeyes@flameeyes.eu>
8 */ 6 */
9 7
10/* 8/*
@@ -23,15 +21,61 @@
23static __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc, 21static __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc,
24 unsigned int *rsize) 22 unsigned int *rsize)
25{ 23{
26 if (*rsize >= 48 && rdesc[46] == 0x05 && rdesc[47] == 0x0c) { 24 switch (hdev->product) {
27 hid_info(hdev, "Fixing up Elecom BM084 report descriptor\n"); 25 case USB_DEVICE_ID_ELECOM_BM084:
28 rdesc[47] = 0x00; 26 /* The BM084 Bluetooth mouse includes a non-existing horizontal
27 * wheel in the HID descriptor. */
28 if (*rsize >= 48 && rdesc[46] == 0x05 && rdesc[47] == 0x0c) {
29 hid_info(hdev, "Fixing up Elecom BM084 report descriptor\n");
30 rdesc[47] = 0x00;
31 }
32 break;
33 case USB_DEVICE_ID_ELECOM_DEFT_WIRED:
34 case USB_DEVICE_ID_ELECOM_DEFT_WIRELESS:
35 /* The DEFT trackball has eight buttons, but its descriptor only
36 * reports five, disabling the three Fn buttons on the top of
37 * the mouse.
38 *
39 * Apply the following diff to the descriptor:
40 *
41 * Collection (Physical), Collection (Physical),
42 * Report ID (1), Report ID (1),
43 * Report Count (5), -> Report Count (8),
44 * Report Size (1), Report Size (1),
45 * Usage Page (Button), Usage Page (Button),
46 * Usage Minimum (01h), Usage Minimum (01h),
47 * Usage Maximum (05h), -> Usage Maximum (08h),
48 * Logical Minimum (0), Logical Minimum (0),
49 * Logical Maximum (1), Logical Maximum (1),
50 * Input (Variable), Input (Variable),
51 * Report Count (1), -> Report Count (0),
52 * Report Size (3), Report Size (3),
53 * Input (Constant), Input (Constant),
54 * Report Size (16), Report Size (16),
55 * Report Count (2), Report Count (2),
56 * Usage Page (Desktop), Usage Page (Desktop),
57 * Usage (X), Usage (X),
58 * Usage (Y), Usage (Y),
59 * Logical Minimum (-32768), Logical Minimum (-32768),
60 * Logical Maximum (32767), Logical Maximum (32767),
61 * Input (Variable, Relative), Input (Variable, Relative),
62 * End Collection, End Collection,
63 */
64 if (*rsize == 213 && rdesc[13] == 5 && rdesc[21] == 5) {
65 hid_info(hdev, "Fixing up Elecom DEFT Fn buttons\n");
66 rdesc[13] = 8; /* Button/Variable Report Count */
67 rdesc[21] = 8; /* Button/Variable Usage Maximum */
68 rdesc[29] = 0; /* Button/Constant Report Count */
69 }
70 break;
29 } 71 }
30 return rdesc; 72 return rdesc;
31} 73}
32 74
33static const struct hid_device_id elecom_devices[] = { 75static const struct hid_device_id elecom_devices[] = {
34 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084)}, 76 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
77 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRED) },
78 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRELESS) },
35 { } 79 { }
36}; 80};
37MODULE_DEVICE_TABLE(hid, elecom_devices); 81MODULE_DEVICE_TABLE(hid, elecom_devices);
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 643390ba749d..4f9a3938189a 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -173,6 +173,7 @@
173#define USB_VENDOR_ID_ASUSTEK 0x0b05 173#define USB_VENDOR_ID_ASUSTEK 0x0b05
174#define USB_DEVICE_ID_ASUSTEK_LCM 0x1726 174#define USB_DEVICE_ID_ASUSTEK_LCM 0x1726
175#define USB_DEVICE_ID_ASUSTEK_LCM2 0x175b 175#define USB_DEVICE_ID_ASUSTEK_LCM2 0x175b
176#define USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD 0x17e0
176#define USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD 0x8585 177#define USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD 0x8585
177#define USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD 0x0101 178#define USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD 0x0101
178#define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1 0x1854 179#define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1 0x1854
@@ -318,6 +319,9 @@
318#define USB_VENDOR_ID_DELCOM 0x0fc5 319#define USB_VENDOR_ID_DELCOM 0x0fc5
319#define USB_DEVICE_ID_DELCOM_VISUAL_IND 0xb080 320#define USB_DEVICE_ID_DELCOM_VISUAL_IND 0xb080
320 321
322#define USB_VENDOR_ID_DELL 0x413c
323#define USB_DEVICE_ID_DELL_PIXART_USB_OPTICAL_MOUSE 0x301a
324
321#define USB_VENDOR_ID_DELORME 0x1163 325#define USB_VENDOR_ID_DELORME 0x1163
322#define USB_DEVICE_ID_DELORME_EARTHMATE 0x0100 326#define USB_DEVICE_ID_DELORME_EARTHMATE 0x0100
323#define USB_DEVICE_ID_DELORME_EM_LT20 0x0200 327#define USB_DEVICE_ID_DELORME_EM_LT20 0x0200
@@ -358,6 +362,8 @@
358 362
359#define USB_VENDOR_ID_ELECOM 0x056e 363#define USB_VENDOR_ID_ELECOM 0x056e
360#define USB_DEVICE_ID_ELECOM_BM084 0x0061 364#define USB_DEVICE_ID_ELECOM_BM084 0x0061
365#define USB_DEVICE_ID_ELECOM_DEFT_WIRED 0x00fe
366#define USB_DEVICE_ID_ELECOM_DEFT_WIRELESS 0x00ff
361 367
362#define USB_VENDOR_ID_DREAM_CHEEKY 0x1d34 368#define USB_VENDOR_ID_DREAM_CHEEKY 0x1d34
363#define USB_DEVICE_ID_DREAM_CHEEKY_WN 0x0004 369#define USB_DEVICE_ID_DREAM_CHEEKY_WN 0x0004
diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c
index 8daa8ce64ebb..fb55fb4c39fc 100644
--- a/drivers/hid/i2c-hid/i2c-hid.c
+++ b/drivers/hid/i2c-hid/i2c-hid.c
@@ -897,6 +897,15 @@ static int i2c_hid_acpi_pdata(struct i2c_client *client,
897 return 0; 897 return 0;
898} 898}
899 899
900static void i2c_hid_acpi_fix_up_power(struct device *dev)
901{
902 acpi_handle handle = ACPI_HANDLE(dev);
903 struct acpi_device *adev;
904
905 if (handle && acpi_bus_get_device(handle, &adev) == 0)
906 acpi_device_fix_up_power(adev);
907}
908
900static const struct acpi_device_id i2c_hid_acpi_match[] = { 909static const struct acpi_device_id i2c_hid_acpi_match[] = {
901 {"ACPI0C50", 0 }, 910 {"ACPI0C50", 0 },
902 {"PNP0C50", 0 }, 911 {"PNP0C50", 0 },
@@ -909,6 +918,8 @@ static inline int i2c_hid_acpi_pdata(struct i2c_client *client,
909{ 918{
910 return -ENODEV; 919 return -ENODEV;
911} 920}
921
922static inline void i2c_hid_acpi_fix_up_power(struct device *dev) {}
912#endif 923#endif
913 924
914#ifdef CONFIG_OF 925#ifdef CONFIG_OF
@@ -1030,6 +1041,8 @@ static int i2c_hid_probe(struct i2c_client *client,
1030 if (ret < 0) 1041 if (ret < 0)
1031 goto err_regulator; 1042 goto err_regulator;
1032 1043
1044 i2c_hid_acpi_fix_up_power(&client->dev);
1045
1033 pm_runtime_get_noresume(&client->dev); 1046 pm_runtime_get_noresume(&client->dev);
1034 pm_runtime_set_active(&client->dev); 1047 pm_runtime_set_active(&client->dev);
1035 pm_runtime_enable(&client->dev); 1048 pm_runtime_enable(&client->dev);
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 6316498b7812..a88e7c7bea0a 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -85,6 +85,7 @@ static const struct hid_blacklist {
85 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPIDFIRE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, 85 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPIDFIRE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
86 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, 86 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
87 { USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51, HID_QUIRK_NOGET }, 87 { USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51, HID_QUIRK_NOGET },
88 { USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
88 { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET }, 89 { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
89 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT }, 90 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
90 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3, HID_QUIRK_MULTI_INPUT }, 91 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3, HID_QUIRK_MULTI_INPUT },
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index 4b225fb19a16..e274c9dc32f3 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -1571,37 +1571,38 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)
1571{ 1571{
1572 unsigned char *data = wacom->data; 1572 unsigned char *data = wacom->data;
1573 1573
1574 if (wacom->pen_input) 1574 if (wacom->pen_input) {
1575 dev_dbg(wacom->pen_input->dev.parent, 1575 dev_dbg(wacom->pen_input->dev.parent,
1576 "%s: received report #%d\n", __func__, data[0]); 1576 "%s: received report #%d\n", __func__, data[0]);
1577 else if (wacom->touch_input) 1577
1578 if (len == WACOM_PKGLEN_PENABLED ||
1579 data[0] == WACOM_REPORT_PENABLED)
1580 return wacom_tpc_pen(wacom);
1581 }
1582 else if (wacom->touch_input) {
1578 dev_dbg(wacom->touch_input->dev.parent, 1583 dev_dbg(wacom->touch_input->dev.parent,
1579 "%s: received report #%d\n", __func__, data[0]); 1584 "%s: received report #%d\n", __func__, data[0]);
1580 1585
1581 switch (len) { 1586 switch (len) {
1582 case WACOM_PKGLEN_TPC1FG: 1587 case WACOM_PKGLEN_TPC1FG:
1583 return wacom_tpc_single_touch(wacom, len); 1588 return wacom_tpc_single_touch(wacom, len);
1584 1589
1585 case WACOM_PKGLEN_TPC2FG: 1590 case WACOM_PKGLEN_TPC2FG:
1586 return wacom_tpc_mt_touch(wacom); 1591 return wacom_tpc_mt_touch(wacom);
1587 1592
1588 case WACOM_PKGLEN_PENABLED: 1593 default:
1589 return wacom_tpc_pen(wacom); 1594 switch (data[0]) {
1595 case WACOM_REPORT_TPC1FG:
1596 case WACOM_REPORT_TPCHID:
1597 case WACOM_REPORT_TPCST:
1598 case WACOM_REPORT_TPC1FGE:
1599 return wacom_tpc_single_touch(wacom, len);
1590 1600
1591 default: 1601 case WACOM_REPORT_TPCMT:
1592 switch (data[0]) { 1602 case WACOM_REPORT_TPCMT2:
1593 case WACOM_REPORT_TPC1FG: 1603 return wacom_mt_touch(wacom);
1594 case WACOM_REPORT_TPCHID:
1595 case WACOM_REPORT_TPCST:
1596 case WACOM_REPORT_TPC1FGE:
1597 return wacom_tpc_single_touch(wacom, len);
1598
1599 case WACOM_REPORT_TPCMT:
1600 case WACOM_REPORT_TPCMT2:
1601 return wacom_mt_touch(wacom);
1602 1604
1603 case WACOM_REPORT_PENABLED: 1605 }
1604 return wacom_tpc_pen(wacom);
1605 } 1606 }
1606 } 1607 }
1607 1608
diff --git a/drivers/hsi/clients/ssi_protocol.c b/drivers/hsi/clients/ssi_protocol.c
index 26b05106f0d3..93d28c0ec8bf 100644
--- a/drivers/hsi/clients/ssi_protocol.c
+++ b/drivers/hsi/clients/ssi_protocol.c
@@ -1066,7 +1066,7 @@ static void ssip_pn_setup(struct net_device *dev)
1066 dev->addr_len = 1; 1066 dev->addr_len = 1;
1067 dev->tx_queue_len = SSIP_TXQUEUE_LEN; 1067 dev->tx_queue_len = SSIP_TXQUEUE_LEN;
1068 1068
1069 dev->destructor = free_netdev; 1069 dev->needs_free_netdev = true;
1070 dev->header_ops = &phonet_header_ops; 1070 dev->header_ops = &phonet_header_ops;
1071} 1071}
1072 1072
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 22d5eafd6815..5ef2814345ef 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -343,6 +343,7 @@ config SENSORS_ASB100
343 343
344config SENSORS_ASPEED 344config SENSORS_ASPEED
345 tristate "ASPEED AST2400/AST2500 PWM and Fan tach driver" 345 tristate "ASPEED AST2400/AST2500 PWM and Fan tach driver"
346 select REGMAP
346 help 347 help
347 This driver provides support for ASPEED AST2400/AST2500 PWM 348 This driver provides support for ASPEED AST2400/AST2500 PWM
348 and Fan Tacho controllers. 349 and Fan Tacho controllers.
diff --git a/drivers/hwmon/aspeed-pwm-tacho.c b/drivers/hwmon/aspeed-pwm-tacho.c
index 48403a2115be..9de13d626c68 100644
--- a/drivers/hwmon/aspeed-pwm-tacho.c
+++ b/drivers/hwmon/aspeed-pwm-tacho.c
@@ -7,6 +7,7 @@
7 */ 7 */
8 8
9#include <linux/clk.h> 9#include <linux/clk.h>
10#include <linux/errno.h>
10#include <linux/gpio/consumer.h> 11#include <linux/gpio/consumer.h>
11#include <linux/delay.h> 12#include <linux/delay.h>
12#include <linux/hwmon.h> 13#include <linux/hwmon.h>
@@ -494,7 +495,7 @@ static u32 aspeed_get_fan_tach_ch_measure_period(struct aspeed_pwm_tacho_data
494 return clk / (clk_unit * div_h * div_l * tacho_div * tacho_unit); 495 return clk / (clk_unit * div_h * div_l * tacho_div * tacho_unit);
495} 496}
496 497
497static u32 aspeed_get_fan_tach_ch_rpm(struct aspeed_pwm_tacho_data *priv, 498static int aspeed_get_fan_tach_ch_rpm(struct aspeed_pwm_tacho_data *priv,
498 u8 fan_tach_ch) 499 u8 fan_tach_ch)
499{ 500{
500 u32 raw_data, tach_div, clk_source, sec, val; 501 u32 raw_data, tach_div, clk_source, sec, val;
@@ -510,6 +511,9 @@ static u32 aspeed_get_fan_tach_ch_rpm(struct aspeed_pwm_tacho_data *priv,
510 msleep(sec); 511 msleep(sec);
511 512
512 regmap_read(priv->regmap, ASPEED_PTCR_RESULT, &val); 513 regmap_read(priv->regmap, ASPEED_PTCR_RESULT, &val);
514 if (!(val & RESULT_STATUS_MASK))
515 return -ETIMEDOUT;
516
513 raw_data = val & RESULT_VALUE_MASK; 517 raw_data = val & RESULT_VALUE_MASK;
514 tach_div = priv->type_fan_tach_clock_division[type]; 518 tach_div = priv->type_fan_tach_clock_division[type];
515 tach_div = 0x4 << (tach_div * 2); 519 tach_div = 0x4 << (tach_div * 2);
@@ -561,12 +565,14 @@ static ssize_t show_rpm(struct device *dev, struct device_attribute *attr,
561{ 565{
562 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 566 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
563 int index = sensor_attr->index; 567 int index = sensor_attr->index;
564 u32 rpm; 568 int rpm;
565 struct aspeed_pwm_tacho_data *priv = dev_get_drvdata(dev); 569 struct aspeed_pwm_tacho_data *priv = dev_get_drvdata(dev);
566 570
567 rpm = aspeed_get_fan_tach_ch_rpm(priv, index); 571 rpm = aspeed_get_fan_tach_ch_rpm(priv, index);
572 if (rpm < 0)
573 return rpm;
568 574
569 return sprintf(buf, "%u\n", rpm); 575 return sprintf(buf, "%d\n", rpm);
570} 576}
571 577
572static umode_t pwm_is_visible(struct kobject *kobj, 578static umode_t pwm_is_visible(struct kobject *kobj,
@@ -591,24 +597,23 @@ static umode_t fan_dev_is_visible(struct kobject *kobj,
591 return a->mode; 597 return a->mode;
592} 598}
593 599
594static SENSOR_DEVICE_ATTR(pwm0, 0644,
595 show_pwm, set_pwm, 0);
596static SENSOR_DEVICE_ATTR(pwm1, 0644, 600static SENSOR_DEVICE_ATTR(pwm1, 0644,
597 show_pwm, set_pwm, 1); 601 show_pwm, set_pwm, 0);
598static SENSOR_DEVICE_ATTR(pwm2, 0644, 602static SENSOR_DEVICE_ATTR(pwm2, 0644,
599 show_pwm, set_pwm, 2); 603 show_pwm, set_pwm, 1);
600static SENSOR_DEVICE_ATTR(pwm3, 0644, 604static SENSOR_DEVICE_ATTR(pwm3, 0644,
601 show_pwm, set_pwm, 3); 605 show_pwm, set_pwm, 2);
602static SENSOR_DEVICE_ATTR(pwm4, 0644, 606static SENSOR_DEVICE_ATTR(pwm4, 0644,
603 show_pwm, set_pwm, 4); 607 show_pwm, set_pwm, 3);
604static SENSOR_DEVICE_ATTR(pwm5, 0644, 608static SENSOR_DEVICE_ATTR(pwm5, 0644,
605 show_pwm, set_pwm, 5); 609 show_pwm, set_pwm, 4);
606static SENSOR_DEVICE_ATTR(pwm6, 0644, 610static SENSOR_DEVICE_ATTR(pwm6, 0644,
607 show_pwm, set_pwm, 6); 611 show_pwm, set_pwm, 5);
608static SENSOR_DEVICE_ATTR(pwm7, 0644, 612static SENSOR_DEVICE_ATTR(pwm7, 0644,
613 show_pwm, set_pwm, 6);
614static SENSOR_DEVICE_ATTR(pwm8, 0644,
609 show_pwm, set_pwm, 7); 615 show_pwm, set_pwm, 7);
610static struct attribute *pwm_dev_attrs[] = { 616static struct attribute *pwm_dev_attrs[] = {
611 &sensor_dev_attr_pwm0.dev_attr.attr,
612 &sensor_dev_attr_pwm1.dev_attr.attr, 617 &sensor_dev_attr_pwm1.dev_attr.attr,
613 &sensor_dev_attr_pwm2.dev_attr.attr, 618 &sensor_dev_attr_pwm2.dev_attr.attr,
614 &sensor_dev_attr_pwm3.dev_attr.attr, 619 &sensor_dev_attr_pwm3.dev_attr.attr,
@@ -616,6 +621,7 @@ static struct attribute *pwm_dev_attrs[] = {
616 &sensor_dev_attr_pwm5.dev_attr.attr, 621 &sensor_dev_attr_pwm5.dev_attr.attr,
617 &sensor_dev_attr_pwm6.dev_attr.attr, 622 &sensor_dev_attr_pwm6.dev_attr.attr,
618 &sensor_dev_attr_pwm7.dev_attr.attr, 623 &sensor_dev_attr_pwm7.dev_attr.attr,
624 &sensor_dev_attr_pwm8.dev_attr.attr,
619 NULL, 625 NULL,
620}; 626};
621 627
@@ -624,40 +630,39 @@ static const struct attribute_group pwm_dev_group = {
624 .is_visible = pwm_is_visible, 630 .is_visible = pwm_is_visible,
625}; 631};
626 632
627static SENSOR_DEVICE_ATTR(fan0_input, 0444,
628 show_rpm, NULL, 0);
629static SENSOR_DEVICE_ATTR(fan1_input, 0444, 633static SENSOR_DEVICE_ATTR(fan1_input, 0444,
630 show_rpm, NULL, 1); 634 show_rpm, NULL, 0);
631static SENSOR_DEVICE_ATTR(fan2_input, 0444, 635static SENSOR_DEVICE_ATTR(fan2_input, 0444,
632 show_rpm, NULL, 2); 636 show_rpm, NULL, 1);
633static SENSOR_DEVICE_ATTR(fan3_input, 0444, 637static SENSOR_DEVICE_ATTR(fan3_input, 0444,
634 show_rpm, NULL, 3); 638 show_rpm, NULL, 2);
635static SENSOR_DEVICE_ATTR(fan4_input, 0444, 639static SENSOR_DEVICE_ATTR(fan4_input, 0444,
636 show_rpm, NULL, 4); 640 show_rpm, NULL, 3);
637static SENSOR_DEVICE_ATTR(fan5_input, 0444, 641static SENSOR_DEVICE_ATTR(fan5_input, 0444,
638 show_rpm, NULL, 5); 642 show_rpm, NULL, 4);
639static SENSOR_DEVICE_ATTR(fan6_input, 0444, 643static SENSOR_DEVICE_ATTR(fan6_input, 0444,
640 show_rpm, NULL, 6); 644 show_rpm, NULL, 5);
641static SENSOR_DEVICE_ATTR(fan7_input, 0444, 645static SENSOR_DEVICE_ATTR(fan7_input, 0444,
642 show_rpm, NULL, 7); 646 show_rpm, NULL, 6);
643static SENSOR_DEVICE_ATTR(fan8_input, 0444, 647static SENSOR_DEVICE_ATTR(fan8_input, 0444,
644 show_rpm, NULL, 8); 648 show_rpm, NULL, 7);
645static SENSOR_DEVICE_ATTR(fan9_input, 0444, 649static SENSOR_DEVICE_ATTR(fan9_input, 0444,
646 show_rpm, NULL, 9); 650 show_rpm, NULL, 8);
647static SENSOR_DEVICE_ATTR(fan10_input, 0444, 651static SENSOR_DEVICE_ATTR(fan10_input, 0444,
648 show_rpm, NULL, 10); 652 show_rpm, NULL, 9);
649static SENSOR_DEVICE_ATTR(fan11_input, 0444, 653static SENSOR_DEVICE_ATTR(fan11_input, 0444,
650 show_rpm, NULL, 11); 654 show_rpm, NULL, 10);
651static SENSOR_DEVICE_ATTR(fan12_input, 0444, 655static SENSOR_DEVICE_ATTR(fan12_input, 0444,
652 show_rpm, NULL, 12); 656 show_rpm, NULL, 11);
653static SENSOR_DEVICE_ATTR(fan13_input, 0444, 657static SENSOR_DEVICE_ATTR(fan13_input, 0444,
654 show_rpm, NULL, 13); 658 show_rpm, NULL, 12);
655static SENSOR_DEVICE_ATTR(fan14_input, 0444, 659static SENSOR_DEVICE_ATTR(fan14_input, 0444,
656 show_rpm, NULL, 14); 660 show_rpm, NULL, 13);
657static SENSOR_DEVICE_ATTR(fan15_input, 0444, 661static SENSOR_DEVICE_ATTR(fan15_input, 0444,
662 show_rpm, NULL, 14);
663static SENSOR_DEVICE_ATTR(fan16_input, 0444,
658 show_rpm, NULL, 15); 664 show_rpm, NULL, 15);
659static struct attribute *fan_dev_attrs[] = { 665static struct attribute *fan_dev_attrs[] = {
660 &sensor_dev_attr_fan0_input.dev_attr.attr,
661 &sensor_dev_attr_fan1_input.dev_attr.attr, 666 &sensor_dev_attr_fan1_input.dev_attr.attr,
662 &sensor_dev_attr_fan2_input.dev_attr.attr, 667 &sensor_dev_attr_fan2_input.dev_attr.attr,
663 &sensor_dev_attr_fan3_input.dev_attr.attr, 668 &sensor_dev_attr_fan3_input.dev_attr.attr,
@@ -673,6 +678,7 @@ static struct attribute *fan_dev_attrs[] = {
673 &sensor_dev_attr_fan13_input.dev_attr.attr, 678 &sensor_dev_attr_fan13_input.dev_attr.attr,
674 &sensor_dev_attr_fan14_input.dev_attr.attr, 679 &sensor_dev_attr_fan14_input.dev_attr.attr,
675 &sensor_dev_attr_fan15_input.dev_attr.attr, 680 &sensor_dev_attr_fan15_input.dev_attr.attr,
681 &sensor_dev_attr_fan16_input.dev_attr.attr,
676 NULL 682 NULL
677}; 683};
678 684
@@ -802,7 +808,6 @@ static int aspeed_pwm_tacho_probe(struct platform_device *pdev)
802 if (ret) 808 if (ret)
803 return ret; 809 return ret;
804 } 810 }
805 of_node_put(np);
806 811
807 priv->groups[0] = &pwm_dev_group; 812 priv->groups[0] = &pwm_dev_group;
808 priv->groups[1] = &fan_dev_group; 813 priv->groups[1] = &fan_dev_group;
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 6283b99d2b17..d1263b82d646 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -94,9 +94,9 @@ static void dw_i2c_acpi_params(struct platform_device *pdev, char method[],
94static int dw_i2c_acpi_configure(struct platform_device *pdev) 94static int dw_i2c_acpi_configure(struct platform_device *pdev)
95{ 95{
96 struct dw_i2c_dev *dev = platform_get_drvdata(pdev); 96 struct dw_i2c_dev *dev = platform_get_drvdata(pdev);
97 u32 ss_ht = 0, fp_ht = 0, hs_ht = 0, fs_ht = 0;
97 acpi_handle handle = ACPI_HANDLE(&pdev->dev); 98 acpi_handle handle = ACPI_HANDLE(&pdev->dev);
98 const struct acpi_device_id *id; 99 const struct acpi_device_id *id;
99 u32 ss_ht, fp_ht, hs_ht, fs_ht;
100 struct acpi_device *adev; 100 struct acpi_device *adev;
101 const char *uid; 101 const char *uid;
102 102
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 95ed17183e73..54a47b40546f 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -734,9 +734,9 @@ static int i2c_imx_dma_read(struct imx_i2c_struct *i2c_imx,
734 * the first read operation, otherwise the first read cost 734 * the first read operation, otherwise the first read cost
735 * one extra clock cycle. 735 * one extra clock cycle.
736 */ 736 */
737 temp = readb(i2c_imx->base + IMX_I2C_I2CR); 737 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
738 temp |= I2CR_MTX; 738 temp |= I2CR_MTX;
739 writeb(temp, i2c_imx->base + IMX_I2C_I2CR); 739 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
740 } 740 }
741 msgs->buf[msgs->len-1] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); 741 msgs->buf[msgs->len-1] = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR);
742 742
@@ -857,9 +857,9 @@ static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs, bo
857 * the first read operation, otherwise the first read cost 857 * the first read operation, otherwise the first read cost
858 * one extra clock cycle. 858 * one extra clock cycle.
859 */ 859 */
860 temp = readb(i2c_imx->base + IMX_I2C_I2CR); 860 temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
861 temp |= I2CR_MTX; 861 temp |= I2CR_MTX;
862 writeb(temp, i2c_imx->base + IMX_I2C_I2CR); 862 imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
863 } 863 }
864 } else if (i == (msgs->len - 2)) { 864 } else if (i == (msgs->len - 2)) {
865 dev_dbg(&i2c_imx->adapter.dev, 865 dev_dbg(&i2c_imx->adapter.dev,
diff --git a/drivers/i2c/busses/i2c-ismt.c b/drivers/i2c/busses/i2c-ismt.c
index f573448d2132..e98e44e584a4 100644
--- a/drivers/i2c/busses/i2c-ismt.c
+++ b/drivers/i2c/busses/i2c-ismt.c
@@ -584,7 +584,7 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
584 584
585 /* unmap the data buffer */ 585 /* unmap the data buffer */
586 if (dma_size != 0) 586 if (dma_size != 0)
587 dma_unmap_single(&adap->dev, dma_addr, dma_size, dma_direction); 587 dma_unmap_single(dev, dma_addr, dma_size, dma_direction);
588 588
589 if (unlikely(!time_left)) { 589 if (unlikely(!time_left)) {
590 dev_err(dev, "completion wait timed out\n"); 590 dev_err(dev, "completion wait timed out\n");
diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
index 214bf2835d1f..8be3e6cb8fe6 100644
--- a/drivers/i2c/busses/i2c-rcar.c
+++ b/drivers/i2c/busses/i2c-rcar.c
@@ -319,7 +319,7 @@ static void rcar_i2c_dma_unmap(struct rcar_i2c_priv *priv)
319 rcar_i2c_write(priv, ICFBSCR, TCYC06); 319 rcar_i2c_write(priv, ICFBSCR, TCYC06);
320 320
321 dma_unmap_single(chan->device->dev, sg_dma_address(&priv->sg), 321 dma_unmap_single(chan->device->dev, sg_dma_address(&priv->sg),
322 priv->msg->len, priv->dma_direction); 322 sg_dma_len(&priv->sg), priv->dma_direction);
323 323
324 priv->dma_direction = DMA_NONE; 324 priv->dma_direction = DMA_NONE;
325} 325}
diff --git a/drivers/i2c/busses/i2c-tiny-usb.c b/drivers/i2c/busses/i2c-tiny-usb.c
index 0ed77eeff31e..a2e3dd715380 100644
--- a/drivers/i2c/busses/i2c-tiny-usb.c
+++ b/drivers/i2c/busses/i2c-tiny-usb.c
@@ -178,22 +178,39 @@ static int usb_read(struct i2c_adapter *adapter, int cmd,
178 int value, int index, void *data, int len) 178 int value, int index, void *data, int len)
179{ 179{
180 struct i2c_tiny_usb *dev = (struct i2c_tiny_usb *)adapter->algo_data; 180 struct i2c_tiny_usb *dev = (struct i2c_tiny_usb *)adapter->algo_data;
181 void *dmadata = kmalloc(len, GFP_KERNEL);
182 int ret;
183
184 if (!dmadata)
185 return -ENOMEM;
181 186
182 /* do control transfer */ 187 /* do control transfer */
183 return usb_control_msg(dev->usb_dev, usb_rcvctrlpipe(dev->usb_dev, 0), 188 ret = usb_control_msg(dev->usb_dev, usb_rcvctrlpipe(dev->usb_dev, 0),
184 cmd, USB_TYPE_VENDOR | USB_RECIP_INTERFACE | 189 cmd, USB_TYPE_VENDOR | USB_RECIP_INTERFACE |
185 USB_DIR_IN, value, index, data, len, 2000); 190 USB_DIR_IN, value, index, dmadata, len, 2000);
191
192 memcpy(data, dmadata, len);
193 kfree(dmadata);
194 return ret;
186} 195}
187 196
188static int usb_write(struct i2c_adapter *adapter, int cmd, 197static int usb_write(struct i2c_adapter *adapter, int cmd,
189 int value, int index, void *data, int len) 198 int value, int index, void *data, int len)
190{ 199{
191 struct i2c_tiny_usb *dev = (struct i2c_tiny_usb *)adapter->algo_data; 200 struct i2c_tiny_usb *dev = (struct i2c_tiny_usb *)adapter->algo_data;
201 void *dmadata = kmemdup(data, len, GFP_KERNEL);
202 int ret;
203
204 if (!dmadata)
205 return -ENOMEM;
192 206
193 /* do control transfer */ 207 /* do control transfer */
194 return usb_control_msg(dev->usb_dev, usb_sndctrlpipe(dev->usb_dev, 0), 208 ret = usb_control_msg(dev->usb_dev, usb_sndctrlpipe(dev->usb_dev, 0),
195 cmd, USB_TYPE_VENDOR | USB_RECIP_INTERFACE, 209 cmd, USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
196 value, index, data, len, 2000); 210 value, index, dmadata, len, 2000);
211
212 kfree(dmadata);
213 return ret;
197} 214}
198 215
199static void i2c_tiny_usb_free(struct i2c_tiny_usb *dev) 216static void i2c_tiny_usb_free(struct i2c_tiny_usb *dev)
diff --git a/drivers/iio/adc/bcm_iproc_adc.c b/drivers/iio/adc/bcm_iproc_adc.c
index 21d38c8af21e..7f4f9c4150e3 100644
--- a/drivers/iio/adc/bcm_iproc_adc.c
+++ b/drivers/iio/adc/bcm_iproc_adc.c
@@ -143,7 +143,7 @@ static void iproc_adc_reg_dump(struct iio_dev *indio_dev)
143 iproc_adc_dbg_reg(dev, adc_priv, IPROC_SOFT_BYPASS_DATA); 143 iproc_adc_dbg_reg(dev, adc_priv, IPROC_SOFT_BYPASS_DATA);
144} 144}
145 145
146static irqreturn_t iproc_adc_interrupt_handler(int irq, void *data) 146static irqreturn_t iproc_adc_interrupt_thread(int irq, void *data)
147{ 147{
148 u32 channel_intr_status; 148 u32 channel_intr_status;
149 u32 intr_status; 149 u32 intr_status;
@@ -167,7 +167,7 @@ static irqreturn_t iproc_adc_interrupt_handler(int irq, void *data)
167 return IRQ_NONE; 167 return IRQ_NONE;
168} 168}
169 169
170static irqreturn_t iproc_adc_interrupt_thread(int irq, void *data) 170static irqreturn_t iproc_adc_interrupt_handler(int irq, void *data)
171{ 171{
172 irqreturn_t retval = IRQ_NONE; 172 irqreturn_t retval = IRQ_NONE;
173 struct iproc_adc_priv *adc_priv; 173 struct iproc_adc_priv *adc_priv;
@@ -181,7 +181,7 @@ static irqreturn_t iproc_adc_interrupt_thread(int irq, void *data)
181 adc_priv = iio_priv(indio_dev); 181 adc_priv = iio_priv(indio_dev);
182 182
183 regmap_read(adc_priv->regmap, IPROC_INTERRUPT_STATUS, &intr_status); 183 regmap_read(adc_priv->regmap, IPROC_INTERRUPT_STATUS, &intr_status);
184 dev_dbg(&indio_dev->dev, "iproc_adc_interrupt_thread(),INTRPT_STS:%x\n", 184 dev_dbg(&indio_dev->dev, "iproc_adc_interrupt_handler(),INTRPT_STS:%x\n",
185 intr_status); 185 intr_status);
186 186
187 intr_channels = (intr_status & IPROC_ADC_INTR_MASK) >> IPROC_ADC_INTR; 187 intr_channels = (intr_status & IPROC_ADC_INTR_MASK) >> IPROC_ADC_INTR;
@@ -566,8 +566,8 @@ static int iproc_adc_probe(struct platform_device *pdev)
566 } 566 }
567 567
568 ret = devm_request_threaded_irq(&pdev->dev, adc_priv->irqno, 568 ret = devm_request_threaded_irq(&pdev->dev, adc_priv->irqno,
569 iproc_adc_interrupt_thread,
570 iproc_adc_interrupt_handler, 569 iproc_adc_interrupt_handler,
570 iproc_adc_interrupt_thread,
571 IRQF_SHARED, "iproc-adc", indio_dev); 571 IRQF_SHARED, "iproc-adc", indio_dev);
572 if (ret) { 572 if (ret) {
573 dev_err(&pdev->dev, "request_irq error %d\n", ret); 573 dev_err(&pdev->dev, "request_irq error %d\n", ret);
diff --git a/drivers/iio/adc/max9611.c b/drivers/iio/adc/max9611.c
index ec82106480e1..b0526e4b9530 100644
--- a/drivers/iio/adc/max9611.c
+++ b/drivers/iio/adc/max9611.c
@@ -438,10 +438,10 @@ static ssize_t max9611_shunt_resistor_show(struct device *dev,
438 struct max9611_dev *max9611 = iio_priv(dev_to_iio_dev(dev)); 438 struct max9611_dev *max9611 = iio_priv(dev_to_iio_dev(dev));
439 unsigned int i, r; 439 unsigned int i, r;
440 440
441 i = max9611->shunt_resistor_uohm / 1000; 441 i = max9611->shunt_resistor_uohm / 1000000;
442 r = max9611->shunt_resistor_uohm % 1000; 442 r = max9611->shunt_resistor_uohm % 1000000;
443 443
444 return sprintf(buf, "%u.%03u\n", i, r); 444 return sprintf(buf, "%u.%06u\n", i, r);
445} 445}
446 446
447static IIO_DEVICE_ATTR(in_power_shunt_resistor, 0444, 447static IIO_DEVICE_ATTR(in_power_shunt_resistor, 0444,
@@ -536,8 +536,8 @@ static int max9611_probe(struct i2c_client *client,
536 int ret; 536 int ret;
537 537
538 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*max9611)); 538 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*max9611));
539 if (IS_ERR(indio_dev)) 539 if (!indio_dev)
540 return PTR_ERR(indio_dev); 540 return -ENOMEM;
541 541
542 i2c_set_clientdata(client, indio_dev); 542 i2c_set_clientdata(client, indio_dev);
543 543
diff --git a/drivers/iio/adc/meson_saradc.c b/drivers/iio/adc/meson_saradc.c
index dd4190b50df6..6066bbfc42fe 100644
--- a/drivers/iio/adc/meson_saradc.c
+++ b/drivers/iio/adc/meson_saradc.c
@@ -468,13 +468,13 @@ static void meson_sar_adc_unlock(struct iio_dev *indio_dev)
468static void meson_sar_adc_clear_fifo(struct iio_dev *indio_dev) 468static void meson_sar_adc_clear_fifo(struct iio_dev *indio_dev)
469{ 469{
470 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); 470 struct meson_sar_adc_priv *priv = iio_priv(indio_dev);
471 int count; 471 unsigned int count, tmp;
472 472
473 for (count = 0; count < MESON_SAR_ADC_MAX_FIFO_SIZE; count++) { 473 for (count = 0; count < MESON_SAR_ADC_MAX_FIFO_SIZE; count++) {
474 if (!meson_sar_adc_get_fifo_count(indio_dev)) 474 if (!meson_sar_adc_get_fifo_count(indio_dev))
475 break; 475 break;
476 476
477 regmap_read(priv->regmap, MESON_SAR_ADC_FIFO_RD, 0); 477 regmap_read(priv->regmap, MESON_SAR_ADC_FIFO_RD, &tmp);
478 } 478 }
479} 479}
480 480
diff --git a/drivers/iio/adc/mxs-lradc-adc.c b/drivers/iio/adc/mxs-lradc-adc.c
index b0c7d8ee5cb8..6888167ca1e6 100644
--- a/drivers/iio/adc/mxs-lradc-adc.c
+++ b/drivers/iio/adc/mxs-lradc-adc.c
@@ -718,9 +718,12 @@ static int mxs_lradc_adc_probe(struct platform_device *pdev)
718 adc->dev = dev; 718 adc->dev = dev;
719 719
720 iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); 720 iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
721 if (!iores)
722 return -EINVAL;
723
721 adc->base = devm_ioremap(dev, iores->start, resource_size(iores)); 724 adc->base = devm_ioremap(dev, iores->start, resource_size(iores));
722 if (IS_ERR(adc->base)) 725 if (!adc->base)
723 return PTR_ERR(adc->base); 726 return -ENOMEM;
724 727
725 init_completion(&adc->completion); 728 init_completion(&adc->completion);
726 spin_lock_init(&adc->lock); 729 spin_lock_init(&adc->lock);
diff --git a/drivers/iio/adc/sun4i-gpadc-iio.c b/drivers/iio/adc/sun4i-gpadc-iio.c
index b23527309088..81d4c39e414a 100644
--- a/drivers/iio/adc/sun4i-gpadc-iio.c
+++ b/drivers/iio/adc/sun4i-gpadc-iio.c
@@ -105,6 +105,8 @@ struct sun4i_gpadc_iio {
105 bool no_irq; 105 bool no_irq;
106 /* prevents concurrent reads of temperature and ADC */ 106 /* prevents concurrent reads of temperature and ADC */
107 struct mutex mutex; 107 struct mutex mutex;
108 struct thermal_zone_device *tzd;
109 struct device *sensor_device;
108}; 110};
109 111
110#define SUN4I_GPADC_ADC_CHANNEL(_channel, _name) { \ 112#define SUN4I_GPADC_ADC_CHANNEL(_channel, _name) { \
@@ -502,7 +504,6 @@ static int sun4i_gpadc_probe_dt(struct platform_device *pdev,
502{ 504{
503 struct sun4i_gpadc_iio *info = iio_priv(indio_dev); 505 struct sun4i_gpadc_iio *info = iio_priv(indio_dev);
504 const struct of_device_id *of_dev; 506 const struct of_device_id *of_dev;
505 struct thermal_zone_device *tzd;
506 struct resource *mem; 507 struct resource *mem;
507 void __iomem *base; 508 void __iomem *base;
508 int ret; 509 int ret;
@@ -532,13 +533,14 @@ static int sun4i_gpadc_probe_dt(struct platform_device *pdev,
532 if (!IS_ENABLED(CONFIG_THERMAL_OF)) 533 if (!IS_ENABLED(CONFIG_THERMAL_OF))
533 return 0; 534 return 0;
534 535
535 tzd = devm_thermal_zone_of_sensor_register(&pdev->dev, 0, info, 536 info->sensor_device = &pdev->dev;
536 &sun4i_ts_tz_ops); 537 info->tzd = thermal_zone_of_sensor_register(info->sensor_device, 0,
537 if (IS_ERR(tzd)) 538 info, &sun4i_ts_tz_ops);
539 if (IS_ERR(info->tzd))
538 dev_err(&pdev->dev, "could not register thermal sensor: %ld\n", 540 dev_err(&pdev->dev, "could not register thermal sensor: %ld\n",
539 PTR_ERR(tzd)); 541 PTR_ERR(info->tzd));
540 542
541 return PTR_ERR_OR_ZERO(tzd); 543 return PTR_ERR_OR_ZERO(info->tzd);
542} 544}
543 545
544static int sun4i_gpadc_probe_mfd(struct platform_device *pdev, 546static int sun4i_gpadc_probe_mfd(struct platform_device *pdev,
@@ -584,15 +586,15 @@ static int sun4i_gpadc_probe_mfd(struct platform_device *pdev,
584 * of_node, and the device from this driver as third argument to 586 * of_node, and the device from this driver as third argument to
585 * return the temperature. 587 * return the temperature.
586 */ 588 */
587 struct thermal_zone_device *tzd; 589 info->sensor_device = pdev->dev.parent;
588 tzd = devm_thermal_zone_of_sensor_register(pdev->dev.parent, 0, 590 info->tzd = thermal_zone_of_sensor_register(info->sensor_device,
589 info, 591 0, info,
590 &sun4i_ts_tz_ops); 592 &sun4i_ts_tz_ops);
591 if (IS_ERR(tzd)) { 593 if (IS_ERR(info->tzd)) {
592 dev_err(&pdev->dev, 594 dev_err(&pdev->dev,
593 "could not register thermal sensor: %ld\n", 595 "could not register thermal sensor: %ld\n",
594 PTR_ERR(tzd)); 596 PTR_ERR(info->tzd));
595 return PTR_ERR(tzd); 597 return PTR_ERR(info->tzd);
596 } 598 }
597 } else { 599 } else {
598 indio_dev->num_channels = 600 indio_dev->num_channels =
@@ -688,7 +690,13 @@ static int sun4i_gpadc_remove(struct platform_device *pdev)
688 690
689 pm_runtime_put(&pdev->dev); 691 pm_runtime_put(&pdev->dev);
690 pm_runtime_disable(&pdev->dev); 692 pm_runtime_disable(&pdev->dev);
691 if (!info->no_irq && IS_ENABLED(CONFIG_THERMAL_OF)) 693
694 if (!IS_ENABLED(CONFIG_THERMAL_OF))
695 return 0;
696
697 thermal_zone_of_sensor_unregister(info->sensor_device, info->tzd);
698
699 if (!info->no_irq)
692 iio_map_array_unregister(indio_dev); 700 iio_map_array_unregister(indio_dev);
693 701
694 return 0; 702 return 0;
@@ -700,6 +708,7 @@ static const struct platform_device_id sun4i_gpadc_id[] = {
700 { "sun6i-a31-gpadc-iio", (kernel_ulong_t)&sun6i_gpadc_data }, 708 { "sun6i-a31-gpadc-iio", (kernel_ulong_t)&sun6i_gpadc_data },
701 { /* sentinel */ }, 709 { /* sentinel */ },
702}; 710};
711MODULE_DEVICE_TABLE(platform, sun4i_gpadc_id);
703 712
704static struct platform_driver sun4i_gpadc_driver = { 713static struct platform_driver sun4i_gpadc_driver = {
705 .driver = { 714 .driver = {
@@ -711,6 +720,7 @@ static struct platform_driver sun4i_gpadc_driver = {
711 .probe = sun4i_gpadc_probe, 720 .probe = sun4i_gpadc_probe,
712 .remove = sun4i_gpadc_remove, 721 .remove = sun4i_gpadc_remove,
713}; 722};
723MODULE_DEVICE_TABLE(of, sun4i_gpadc_of_id);
714 724
715module_platform_driver(sun4i_gpadc_driver); 725module_platform_driver(sun4i_gpadc_driver);
716 726
diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 4282ceca3d8f..6cbed7eb118a 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -614,7 +614,7 @@ static int tiadc_probe(struct platform_device *pdev)
614 return -EINVAL; 614 return -EINVAL;
615 } 615 }
616 616
617 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*indio_dev)); 617 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc_dev));
618 if (indio_dev == NULL) { 618 if (indio_dev == NULL) {
619 dev_err(&pdev->dev, "failed to allocate iio device\n"); 619 dev_err(&pdev->dev, "failed to allocate iio device\n");
620 return -ENOMEM; 620 return -ENOMEM;
diff --git a/drivers/iio/buffer/industrialio-buffer-dma.c b/drivers/iio/buffer/industrialio-buffer-dma.c
index dd99d273bae9..ff03324dee13 100644
--- a/drivers/iio/buffer/industrialio-buffer-dma.c
+++ b/drivers/iio/buffer/industrialio-buffer-dma.c
@@ -14,6 +14,7 @@
14#include <linux/sched.h> 14#include <linux/sched.h>
15#include <linux/poll.h> 15#include <linux/poll.h>
16#include <linux/iio/buffer.h> 16#include <linux/iio/buffer.h>
17#include <linux/iio/buffer_impl.h>
17#include <linux/iio/buffer-dma.h> 18#include <linux/iio/buffer-dma.h>
18#include <linux/dma-mapping.h> 19#include <linux/dma-mapping.h>
19#include <linux/sizes.h> 20#include <linux/sizes.h>
diff --git a/drivers/iio/buffer/industrialio-buffer-dmaengine.c b/drivers/iio/buffer/industrialio-buffer-dmaengine.c
index 9fabed47053d..2b5a320f42c5 100644
--- a/drivers/iio/buffer/industrialio-buffer-dmaengine.c
+++ b/drivers/iio/buffer/industrialio-buffer-dmaengine.c
@@ -14,6 +14,7 @@
14 14
15#include <linux/iio/iio.h> 15#include <linux/iio/iio.h>
16#include <linux/iio/buffer.h> 16#include <linux/iio/buffer.h>
17#include <linux/iio/buffer_impl.h>
17#include <linux/iio/buffer-dma.h> 18#include <linux/iio/buffer-dma.h>
18#include <linux/iio/buffer-dmaengine.h> 19#include <linux/iio/buffer-dmaengine.h>
19 20
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
index 96dabbd2f004..88a7c5d4e4d2 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
@@ -41,6 +41,7 @@ static const int accel_scale[] = {598, 1196, 2392, 4785};
41static const struct inv_mpu6050_reg_map reg_set_6500 = { 41static const struct inv_mpu6050_reg_map reg_set_6500 = {
42 .sample_rate_div = INV_MPU6050_REG_SAMPLE_RATE_DIV, 42 .sample_rate_div = INV_MPU6050_REG_SAMPLE_RATE_DIV,
43 .lpf = INV_MPU6050_REG_CONFIG, 43 .lpf = INV_MPU6050_REG_CONFIG,
44 .accel_lpf = INV_MPU6500_REG_ACCEL_CONFIG_2,
44 .user_ctrl = INV_MPU6050_REG_USER_CTRL, 45 .user_ctrl = INV_MPU6050_REG_USER_CTRL,
45 .fifo_en = INV_MPU6050_REG_FIFO_EN, 46 .fifo_en = INV_MPU6050_REG_FIFO_EN,
46 .gyro_config = INV_MPU6050_REG_GYRO_CONFIG, 47 .gyro_config = INV_MPU6050_REG_GYRO_CONFIG,
@@ -211,6 +212,37 @@ int inv_mpu6050_set_power_itg(struct inv_mpu6050_state *st, bool power_on)
211EXPORT_SYMBOL_GPL(inv_mpu6050_set_power_itg); 212EXPORT_SYMBOL_GPL(inv_mpu6050_set_power_itg);
212 213
213/** 214/**
215 * inv_mpu6050_set_lpf_regs() - set low pass filter registers, chip dependent
216 *
217 * MPU60xx/MPU9150 use only 1 register for accelerometer + gyroscope
218 * MPU6500 and above have a dedicated register for accelerometer
219 */
220static int inv_mpu6050_set_lpf_regs(struct inv_mpu6050_state *st,
221 enum inv_mpu6050_filter_e val)
222{
223 int result;
224
225 result = regmap_write(st->map, st->reg->lpf, val);
226 if (result)
227 return result;
228
229 switch (st->chip_type) {
230 case INV_MPU6050:
231 case INV_MPU6000:
232 case INV_MPU9150:
233 /* old chips, nothing to do */
234 result = 0;
235 break;
236 default:
237 /* set accel lpf */
238 result = regmap_write(st->map, st->reg->accel_lpf, val);
239 break;
240 }
241
242 return result;
243}
244
245/**
214 * inv_mpu6050_init_config() - Initialize hardware, disable FIFO. 246 * inv_mpu6050_init_config() - Initialize hardware, disable FIFO.
215 * 247 *
216 * Initial configuration: 248 * Initial configuration:
@@ -233,8 +265,7 @@ static int inv_mpu6050_init_config(struct iio_dev *indio_dev)
233 if (result) 265 if (result)
234 return result; 266 return result;
235 267
236 d = INV_MPU6050_FILTER_20HZ; 268 result = inv_mpu6050_set_lpf_regs(st, INV_MPU6050_FILTER_20HZ);
237 result = regmap_write(st->map, st->reg->lpf, d);
238 if (result) 269 if (result)
239 return result; 270 return result;
240 271
@@ -537,6 +568,8 @@ error_write_raw:
537 * would be alising. This function basically search for the 568 * would be alising. This function basically search for the
538 * correct low pass parameters based on the fifo rate, e.g, 569 * correct low pass parameters based on the fifo rate, e.g,
539 * sampling frequency. 570 * sampling frequency.
571 *
572 * lpf is set automatically when setting sampling rate to avoid any aliases.
540 */ 573 */
541static int inv_mpu6050_set_lpf(struct inv_mpu6050_state *st, int rate) 574static int inv_mpu6050_set_lpf(struct inv_mpu6050_state *st, int rate)
542{ 575{
@@ -552,7 +585,7 @@ static int inv_mpu6050_set_lpf(struct inv_mpu6050_state *st, int rate)
552 while ((h < hz[i]) && (i < ARRAY_SIZE(d) - 1)) 585 while ((h < hz[i]) && (i < ARRAY_SIZE(d) - 1))
553 i++; 586 i++;
554 data = d[i]; 587 data = d[i];
555 result = regmap_write(st->map, st->reg->lpf, data); 588 result = inv_mpu6050_set_lpf_regs(st, data);
556 if (result) 589 if (result)
557 return result; 590 return result;
558 st->chip_config.lpf = data; 591 st->chip_config.lpf = data;
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
index ef13de7a2c20..953a0c09d568 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
@@ -28,6 +28,7 @@
28 * struct inv_mpu6050_reg_map - Notable registers. 28 * struct inv_mpu6050_reg_map - Notable registers.
29 * @sample_rate_div: Divider applied to gyro output rate. 29 * @sample_rate_div: Divider applied to gyro output rate.
30 * @lpf: Configures internal low pass filter. 30 * @lpf: Configures internal low pass filter.
31 * @accel_lpf: Configures accelerometer low pass filter.
31 * @user_ctrl: Enables/resets the FIFO. 32 * @user_ctrl: Enables/resets the FIFO.
32 * @fifo_en: Determines which data will appear in FIFO. 33 * @fifo_en: Determines which data will appear in FIFO.
33 * @gyro_config: gyro config register. 34 * @gyro_config: gyro config register.
@@ -47,6 +48,7 @@
47struct inv_mpu6050_reg_map { 48struct inv_mpu6050_reg_map {
48 u8 sample_rate_div; 49 u8 sample_rate_div;
49 u8 lpf; 50 u8 lpf;
51 u8 accel_lpf;
50 u8 user_ctrl; 52 u8 user_ctrl;
51 u8 fifo_en; 53 u8 fifo_en;
52 u8 gyro_config; 54 u8 gyro_config;
@@ -188,6 +190,7 @@ struct inv_mpu6050_state {
188#define INV_MPU6050_FIFO_THRESHOLD 500 190#define INV_MPU6050_FIFO_THRESHOLD 500
189 191
190/* mpu6500 registers */ 192/* mpu6500 registers */
193#define INV_MPU6500_REG_ACCEL_CONFIG_2 0x1D
191#define INV_MPU6500_REG_ACCEL_OFFSET 0x77 194#define INV_MPU6500_REG_ACCEL_OFFSET 0x77
192 195
193/* delay time in milliseconds */ 196/* delay time in milliseconds */
diff --git a/drivers/iio/industrialio-trigger.c b/drivers/iio/industrialio-trigger.c
index 978e1592c2a3..4061fed93f1f 100644
--- a/drivers/iio/industrialio-trigger.c
+++ b/drivers/iio/industrialio-trigger.c
@@ -451,7 +451,8 @@ static ssize_t iio_trigger_write_current(struct device *dev,
451 return len; 451 return len;
452 452
453out_trigger_put: 453out_trigger_put:
454 iio_trigger_put(trig); 454 if (trig)
455 iio_trigger_put(trig);
455 return ret; 456 return ret;
456} 457}
457 458
diff --git a/drivers/iio/light/ltr501.c b/drivers/iio/light/ltr501.c
index b30e0c1c6cc4..67838edd8b37 100644
--- a/drivers/iio/light/ltr501.c
+++ b/drivers/iio/light/ltr501.c
@@ -74,9 +74,9 @@ static const int int_time_mapping[] = {100000, 50000, 200000, 400000};
74static const struct reg_field reg_field_it = 74static const struct reg_field reg_field_it =
75 REG_FIELD(LTR501_ALS_MEAS_RATE, 3, 4); 75 REG_FIELD(LTR501_ALS_MEAS_RATE, 3, 4);
76static const struct reg_field reg_field_als_intr = 76static const struct reg_field reg_field_als_intr =
77 REG_FIELD(LTR501_INTR, 0, 0);
78static const struct reg_field reg_field_ps_intr =
79 REG_FIELD(LTR501_INTR, 1, 1); 77 REG_FIELD(LTR501_INTR, 1, 1);
78static const struct reg_field reg_field_ps_intr =
79 REG_FIELD(LTR501_INTR, 0, 0);
80static const struct reg_field reg_field_als_rate = 80static const struct reg_field reg_field_als_rate =
81 REG_FIELD(LTR501_ALS_MEAS_RATE, 0, 2); 81 REG_FIELD(LTR501_ALS_MEAS_RATE, 0, 2);
82static const struct reg_field reg_field_ps_rate = 82static const struct reg_field reg_field_ps_rate =
diff --git a/drivers/iio/proximity/as3935.c b/drivers/iio/proximity/as3935.c
index ddf9bee89f77..aa4df0dcc8c9 100644
--- a/drivers/iio/proximity/as3935.c
+++ b/drivers/iio/proximity/as3935.c
@@ -40,9 +40,9 @@
40#define AS3935_AFE_PWR_BIT BIT(0) 40#define AS3935_AFE_PWR_BIT BIT(0)
41 41
42#define AS3935_INT 0x03 42#define AS3935_INT 0x03
43#define AS3935_INT_MASK 0x07 43#define AS3935_INT_MASK 0x0f
44#define AS3935_EVENT_INT BIT(3) 44#define AS3935_EVENT_INT BIT(3)
45#define AS3935_NOISE_INT BIT(1) 45#define AS3935_NOISE_INT BIT(0)
46 46
47#define AS3935_DATA 0x07 47#define AS3935_DATA 0x07
48#define AS3935_DATA_MASK 0x3F 48#define AS3935_DATA_MASK 0x3F
@@ -215,7 +215,7 @@ static irqreturn_t as3935_trigger_handler(int irq, void *private)
215 215
216 st->buffer[0] = val & AS3935_DATA_MASK; 216 st->buffer[0] = val & AS3935_DATA_MASK;
217 iio_push_to_buffers_with_timestamp(indio_dev, &st->buffer, 217 iio_push_to_buffers_with_timestamp(indio_dev, &st->buffer,
218 pf->timestamp); 218 iio_get_time_ns(indio_dev));
219err_read: 219err_read:
220 iio_trigger_notify_done(indio_dev->trig); 220 iio_trigger_notify_done(indio_dev->trig);
221 221
@@ -244,7 +244,7 @@ static void as3935_event_work(struct work_struct *work)
244 244
245 switch (val) { 245 switch (val) {
246 case AS3935_EVENT_INT: 246 case AS3935_EVENT_INT:
247 iio_trigger_poll(st->trig); 247 iio_trigger_poll_chained(st->trig);
248 break; 248 break;
249 case AS3935_NOISE_INT: 249 case AS3935_NOISE_INT:
250 dev_warn(&st->spi->dev, "noise level is too high\n"); 250 dev_warn(&st->spi->dev, "noise level is too high\n");
@@ -269,8 +269,6 @@ static irqreturn_t as3935_interrupt_handler(int irq, void *private)
269 269
270static void calibrate_as3935(struct as3935_state *st) 270static void calibrate_as3935(struct as3935_state *st)
271{ 271{
272 mutex_lock(&st->lock);
273
274 /* mask disturber interrupt bit */ 272 /* mask disturber interrupt bit */
275 as3935_write(st, AS3935_INT, BIT(5)); 273 as3935_write(st, AS3935_INT, BIT(5));
276 274
@@ -280,8 +278,6 @@ static void calibrate_as3935(struct as3935_state *st)
280 278
281 mdelay(2); 279 mdelay(2);
282 as3935_write(st, AS3935_TUNE_CAP, (st->tune_cap / TUNE_CAP_DIV)); 280 as3935_write(st, AS3935_TUNE_CAP, (st->tune_cap / TUNE_CAP_DIV));
283
284 mutex_unlock(&st->lock);
285} 281}
286 282
287#ifdef CONFIG_PM_SLEEP 283#ifdef CONFIG_PM_SLEEP
@@ -318,6 +314,8 @@ static int as3935_resume(struct device *dev)
318 val &= ~AS3935_AFE_PWR_BIT; 314 val &= ~AS3935_AFE_PWR_BIT;
319 ret = as3935_write(st, AS3935_AFE_GAIN, val); 315 ret = as3935_write(st, AS3935_AFE_GAIN, val);
320 316
317 calibrate_as3935(st);
318
321err_resume: 319err_resume:
322 mutex_unlock(&st->lock); 320 mutex_unlock(&st->lock);
323 321
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
index 02971e239a18..ece6926fa2e6 100644
--- a/drivers/infiniband/core/addr.c
+++ b/drivers/infiniband/core/addr.c
@@ -449,12 +449,7 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
449 return ret; 449 return ret;
450 450
451 rt = (struct rt6_info *)dst; 451 rt = (struct rt6_info *)dst;
452 if (ipv6_addr_any(&fl6.saddr)) { 452 if (ipv6_addr_any(&src_in->sin6_addr)) {
453 ret = ipv6_dev_get_saddr(addr->net, ip6_dst_idev(dst)->dev,
454 &fl6.daddr, 0, &fl6.saddr);
455 if (ret)
456 goto put;
457
458 src_in->sin6_family = AF_INET6; 453 src_in->sin6_family = AF_INET6;
459 src_in->sin6_addr = fl6.saddr; 454 src_in->sin6_addr = fl6.saddr;
460 } 455 }
@@ -471,9 +466,6 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
471 466
472 *pdst = dst; 467 *pdst = dst;
473 return 0; 468 return 0;
474put:
475 dst_release(dst);
476 return ret;
477} 469}
478#else 470#else
479static int addr6_resolve(struct sockaddr_in6 *src_in, 471static int addr6_resolve(struct sockaddr_in6 *src_in,
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index 1844770f3ae8..2b4d613a3474 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -1429,7 +1429,7 @@ static void cm_format_paths_from_req(struct cm_req_msg *req_msg,
1429 primary_path->packet_life_time = 1429 primary_path->packet_life_time =
1430 cm_req_get_primary_local_ack_timeout(req_msg); 1430 cm_req_get_primary_local_ack_timeout(req_msg);
1431 primary_path->packet_life_time -= (primary_path->packet_life_time > 0); 1431 primary_path->packet_life_time -= (primary_path->packet_life_time > 0);
1432 sa_path_set_service_id(primary_path, req_msg->service_id); 1432 primary_path->service_id = req_msg->service_id;
1433 1433
1434 if (req_msg->alt_local_lid) { 1434 if (req_msg->alt_local_lid) {
1435 alt_path->dgid = req_msg->alt_local_gid; 1435 alt_path->dgid = req_msg->alt_local_gid;
@@ -1452,7 +1452,7 @@ static void cm_format_paths_from_req(struct cm_req_msg *req_msg,
1452 alt_path->packet_life_time = 1452 alt_path->packet_life_time =
1453 cm_req_get_alt_local_ack_timeout(req_msg); 1453 cm_req_get_alt_local_ack_timeout(req_msg);
1454 alt_path->packet_life_time -= (alt_path->packet_life_time > 0); 1454 alt_path->packet_life_time -= (alt_path->packet_life_time > 0);
1455 sa_path_set_service_id(alt_path, req_msg->service_id); 1455 alt_path->service_id = req_msg->service_id;
1456 } 1456 }
1457} 1457}
1458 1458
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 91b7a2fe5a55..31bb82d8ecd7 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -1140,7 +1140,7 @@ static void cma_save_ib_info(struct sockaddr *src_addr,
1140 ib->sib_pkey = path->pkey; 1140 ib->sib_pkey = path->pkey;
1141 ib->sib_flowinfo = path->flow_label; 1141 ib->sib_flowinfo = path->flow_label;
1142 memcpy(&ib->sib_addr, &path->sgid, 16); 1142 memcpy(&ib->sib_addr, &path->sgid, 16);
1143 ib->sib_sid = sa_path_get_service_id(path); 1143 ib->sib_sid = path->service_id;
1144 ib->sib_scope_id = 0; 1144 ib->sib_scope_id = 0;
1145 } else { 1145 } else {
1146 ib->sib_pkey = listen_ib->sib_pkey; 1146 ib->sib_pkey = listen_ib->sib_pkey;
@@ -1274,8 +1274,7 @@ static int cma_save_req_info(const struct ib_cm_event *ib_event,
1274 memcpy(&req->local_gid, &req_param->primary_path->sgid, 1274 memcpy(&req->local_gid, &req_param->primary_path->sgid,
1275 sizeof(req->local_gid)); 1275 sizeof(req->local_gid));
1276 req->has_gid = true; 1276 req->has_gid = true;
1277 req->service_id = 1277 req->service_id = req_param->primary_path->service_id;
1278 sa_path_get_service_id(req_param->primary_path);
1279 req->pkey = be16_to_cpu(req_param->primary_path->pkey); 1278 req->pkey = be16_to_cpu(req_param->primary_path->pkey);
1280 if (req->pkey != req_param->bth_pkey) 1279 if (req->pkey != req_param->bth_pkey)
1281 pr_warn_ratelimited("RDMA CMA: got different BTH P_Key (0x%x) and primary path P_Key (0x%x)\n" 1280 pr_warn_ratelimited("RDMA CMA: got different BTH P_Key (0x%x) and primary path P_Key (0x%x)\n"
@@ -1827,7 +1826,8 @@ static struct rdma_id_private *cma_new_conn_id(struct rdma_cm_id *listen_id,
1827 struct rdma_route *rt; 1826 struct rdma_route *rt;
1828 const sa_family_t ss_family = listen_id->route.addr.src_addr.ss_family; 1827 const sa_family_t ss_family = listen_id->route.addr.src_addr.ss_family;
1829 struct sa_path_rec *path = ib_event->param.req_rcvd.primary_path; 1828 struct sa_path_rec *path = ib_event->param.req_rcvd.primary_path;
1830 const __be64 service_id = sa_path_get_service_id(path); 1829 const __be64 service_id =
1830 ib_event->param.req_rcvd.primary_path->service_id;
1831 int ret; 1831 int ret;
1832 1832
1833 id = rdma_create_id(listen_id->route.addr.dev_addr.net, 1833 id = rdma_create_id(listen_id->route.addr.dev_addr.net,
@@ -2345,9 +2345,8 @@ static int cma_query_ib_route(struct rdma_id_private *id_priv, int timeout_ms,
2345 path_rec.pkey = cpu_to_be16(ib_addr_get_pkey(dev_addr)); 2345 path_rec.pkey = cpu_to_be16(ib_addr_get_pkey(dev_addr));
2346 path_rec.numb_path = 1; 2346 path_rec.numb_path = 1;
2347 path_rec.reversible = 1; 2347 path_rec.reversible = 1;
2348 sa_path_set_service_id(&path_rec, 2348 path_rec.service_id = rdma_get_service_id(&id_priv->id,
2349 rdma_get_service_id(&id_priv->id, 2349 cma_dst_addr(id_priv));
2350 cma_dst_addr(id_priv)));
2351 2350
2352 comp_mask = IB_SA_PATH_REC_DGID | IB_SA_PATH_REC_SGID | 2351 comp_mask = IB_SA_PATH_REC_DGID | IB_SA_PATH_REC_SGID |
2353 IB_SA_PATH_REC_PKEY | IB_SA_PATH_REC_NUMB_PATH | 2352 IB_SA_PATH_REC_PKEY | IB_SA_PATH_REC_NUMB_PATH |
diff --git a/drivers/infiniband/core/core_priv.h b/drivers/infiniband/core/core_priv.h
index cb7d372e4bdf..d92ab4eaa8f3 100644
--- a/drivers/infiniband/core/core_priv.h
+++ b/drivers/infiniband/core/core_priv.h
@@ -169,6 +169,16 @@ void ib_mad_cleanup(void);
169int ib_sa_init(void); 169int ib_sa_init(void);
170void ib_sa_cleanup(void); 170void ib_sa_cleanup(void);
171 171
172int ibnl_init(void);
173void ibnl_cleanup(void);
174
175/**
176 * Check if there are any listeners to the netlink group
177 * @group: the netlink group ID
178 * Returns 0 on success or a negative for no listeners.
179 */
180int ibnl_chk_listeners(unsigned int group);
181
172int ib_nl_handle_resolve_resp(struct sk_buff *skb, 182int ib_nl_handle_resolve_resp(struct sk_buff *skb,
173 struct netlink_callback *cb); 183 struct netlink_callback *cb);
174int ib_nl_handle_set_timeout(struct sk_buff *skb, 184int ib_nl_handle_set_timeout(struct sk_buff *skb,
diff --git a/drivers/infiniband/core/netlink.c b/drivers/infiniband/core/netlink.c
index b784055423c8..94931c474d41 100644
--- a/drivers/infiniband/core/netlink.c
+++ b/drivers/infiniband/core/netlink.c
@@ -37,6 +37,7 @@
37#include <net/net_namespace.h> 37#include <net/net_namespace.h>
38#include <net/sock.h> 38#include <net/sock.h>
39#include <rdma/rdma_netlink.h> 39#include <rdma/rdma_netlink.h>
40#include "core_priv.h"
40 41
41struct ibnl_client { 42struct ibnl_client {
42 struct list_head list; 43 struct list_head list;
@@ -55,7 +56,6 @@ int ibnl_chk_listeners(unsigned int group)
55 return -1; 56 return -1;
56 return 0; 57 return 0;
57} 58}
58EXPORT_SYMBOL(ibnl_chk_listeners);
59 59
60int ibnl_add_client(int index, int nops, 60int ibnl_add_client(int index, int nops,
61 const struct ibnl_client_cbs cb_table[]) 61 const struct ibnl_client_cbs cb_table[])
diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
index e335b09c022e..fb7aec4047c8 100644
--- a/drivers/infiniband/core/sa_query.c
+++ b/drivers/infiniband/core/sa_query.c
@@ -194,7 +194,7 @@ static u32 tid;
194 .field_name = "sa_path_rec:" #field 194 .field_name = "sa_path_rec:" #field
195 195
196static const struct ib_field path_rec_table[] = { 196static const struct ib_field path_rec_table[] = {
197 { PATH_REC_FIELD(ib.service_id), 197 { PATH_REC_FIELD(service_id),
198 .offset_words = 0, 198 .offset_words = 0,
199 .offset_bits = 0, 199 .offset_bits = 0,
200 .size_bits = 64 }, 200 .size_bits = 64 },
@@ -296,7 +296,7 @@ static const struct ib_field path_rec_table[] = {
296 .field_name = "sa_path_rec:" #field 296 .field_name = "sa_path_rec:" #field
297 297
298static const struct ib_field opa_path_rec_table[] = { 298static const struct ib_field opa_path_rec_table[] = {
299 { OPA_PATH_REC_FIELD(opa.service_id), 299 { OPA_PATH_REC_FIELD(service_id),
300 .offset_words = 0, 300 .offset_words = 0,
301 .offset_bits = 0, 301 .offset_bits = 0,
302 .size_bits = 64 }, 302 .size_bits = 64 },
@@ -774,7 +774,7 @@ static void ib_nl_set_path_rec_attrs(struct sk_buff *skb,
774 774
775 /* Now build the attributes */ 775 /* Now build the attributes */
776 if (comp_mask & IB_SA_PATH_REC_SERVICE_ID) { 776 if (comp_mask & IB_SA_PATH_REC_SERVICE_ID) {
777 val64 = be64_to_cpu(sa_path_get_service_id(sa_rec)); 777 val64 = be64_to_cpu(sa_rec->service_id);
778 nla_put(skb, RDMA_NLA_F_MANDATORY | LS_NLA_TYPE_SERVICE_ID, 778 nla_put(skb, RDMA_NLA_F_MANDATORY | LS_NLA_TYPE_SERVICE_ID,
779 sizeof(val64), &val64); 779 sizeof(val64), &val64);
780 } 780 }
diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
index 3dbf811d3c51..21e60b1e2ff4 100644
--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -58,7 +58,7 @@ static void __ib_umem_release(struct ib_device *dev, struct ib_umem *umem, int d
58 for_each_sg(umem->sg_head.sgl, sg, umem->npages, i) { 58 for_each_sg(umem->sg_head.sgl, sg, umem->npages, i) {
59 59
60 page = sg_page(sg); 60 page = sg_page(sg);
61 if (umem->writable && dirty) 61 if (!PageDirty(page) && umem->writable && dirty)
62 set_page_dirty_lock(page); 62 set_page_dirty_lock(page);
63 put_page(page); 63 put_page(page);
64 } 64 }
diff --git a/drivers/infiniband/core/umem_odp.c b/drivers/infiniband/core/umem_odp.c
index 0780b1afefa9..8c4ec564e495 100644
--- a/drivers/infiniband/core/umem_odp.c
+++ b/drivers/infiniband/core/umem_odp.c
@@ -321,11 +321,15 @@ int ib_umem_odp_get(struct ib_ucontext *context, struct ib_umem *umem,
321 struct vm_area_struct *vma; 321 struct vm_area_struct *vma;
322 struct hstate *h; 322 struct hstate *h;
323 323
324 down_read(&mm->mmap_sem);
324 vma = find_vma(mm, ib_umem_start(umem)); 325 vma = find_vma(mm, ib_umem_start(umem));
325 if (!vma || !is_vm_hugetlb_page(vma)) 326 if (!vma || !is_vm_hugetlb_page(vma)) {
327 up_read(&mm->mmap_sem);
326 return -EINVAL; 328 return -EINVAL;
329 }
327 h = hstate_vma(vma); 330 h = hstate_vma(vma);
328 umem->page_shift = huge_page_shift(h); 331 umem->page_shift = huge_page_shift(h);
332 up_read(&mm->mmap_sem);
329 umem->hugetlb = 1; 333 umem->hugetlb = 1;
330 } else { 334 } else {
331 umem->hugetlb = 0; 335 umem->hugetlb = 0;
diff --git a/drivers/infiniband/core/uverbs_marshall.c b/drivers/infiniband/core/uverbs_marshall.c
index 8b9587fe2303..94fd989c9060 100644
--- a/drivers/infiniband/core/uverbs_marshall.c
+++ b/drivers/infiniband/core/uverbs_marshall.c
@@ -96,11 +96,11 @@ void ib_copy_qp_attr_to_user(struct ib_uverbs_qp_attr *dst,
96} 96}
97EXPORT_SYMBOL(ib_copy_qp_attr_to_user); 97EXPORT_SYMBOL(ib_copy_qp_attr_to_user);
98 98
99void __ib_copy_path_rec_to_user(struct ib_user_path_rec *dst, 99static void __ib_copy_path_rec_to_user(struct ib_user_path_rec *dst,
100 struct sa_path_rec *src) 100 struct sa_path_rec *src)
101{ 101{
102 memcpy(dst->dgid, src->dgid.raw, sizeof src->dgid); 102 memcpy(dst->dgid, src->dgid.raw, sizeof(src->dgid));
103 memcpy(dst->sgid, src->sgid.raw, sizeof src->sgid); 103 memcpy(dst->sgid, src->sgid.raw, sizeof(src->sgid));
104 104
105 dst->dlid = htons(ntohl(sa_path_get_dlid(src))); 105 dst->dlid = htons(ntohl(sa_path_get_dlid(src)));
106 dst->slid = htons(ntohl(sa_path_get_slid(src))); 106 dst->slid = htons(ntohl(sa_path_get_slid(src)));
diff --git a/drivers/infiniband/hw/bnxt_re/bnxt_re.h b/drivers/infiniband/hw/bnxt_re/bnxt_re.h
index ebf7be8d4139..08772836fded 100644
--- a/drivers/infiniband/hw/bnxt_re/bnxt_re.h
+++ b/drivers/infiniband/hw/bnxt_re/bnxt_re.h
@@ -56,6 +56,10 @@
56#define BNXT_RE_MAX_SRQC_COUNT (64 * 1024) 56#define BNXT_RE_MAX_SRQC_COUNT (64 * 1024)
57#define BNXT_RE_MAX_CQ_COUNT (64 * 1024) 57#define BNXT_RE_MAX_CQ_COUNT (64 * 1024)
58 58
59#define BNXT_RE_UD_QP_HW_STALL 0x400000
60
61#define BNXT_RE_RQ_WQE_THRESHOLD 32
62
59struct bnxt_re_work { 63struct bnxt_re_work {
60 struct work_struct work; 64 struct work_struct work;
61 unsigned long event; 65 unsigned long event;
diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
index 7ba9e699d7ab..c7bd68311d0c 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
@@ -61,6 +61,48 @@
61#include "ib_verbs.h" 61#include "ib_verbs.h"
62#include <rdma/bnxt_re-abi.h> 62#include <rdma/bnxt_re-abi.h>
63 63
64static int __from_ib_access_flags(int iflags)
65{
66 int qflags = 0;
67
68 if (iflags & IB_ACCESS_LOCAL_WRITE)
69 qflags |= BNXT_QPLIB_ACCESS_LOCAL_WRITE;
70 if (iflags & IB_ACCESS_REMOTE_READ)
71 qflags |= BNXT_QPLIB_ACCESS_REMOTE_READ;
72 if (iflags & IB_ACCESS_REMOTE_WRITE)
73 qflags |= BNXT_QPLIB_ACCESS_REMOTE_WRITE;
74 if (iflags & IB_ACCESS_REMOTE_ATOMIC)
75 qflags |= BNXT_QPLIB_ACCESS_REMOTE_ATOMIC;
76 if (iflags & IB_ACCESS_MW_BIND)
77 qflags |= BNXT_QPLIB_ACCESS_MW_BIND;
78 if (iflags & IB_ZERO_BASED)
79 qflags |= BNXT_QPLIB_ACCESS_ZERO_BASED;
80 if (iflags & IB_ACCESS_ON_DEMAND)
81 qflags |= BNXT_QPLIB_ACCESS_ON_DEMAND;
82 return qflags;
83};
84
85static enum ib_access_flags __to_ib_access_flags(int qflags)
86{
87 enum ib_access_flags iflags = 0;
88
89 if (qflags & BNXT_QPLIB_ACCESS_LOCAL_WRITE)
90 iflags |= IB_ACCESS_LOCAL_WRITE;
91 if (qflags & BNXT_QPLIB_ACCESS_REMOTE_WRITE)
92 iflags |= IB_ACCESS_REMOTE_WRITE;
93 if (qflags & BNXT_QPLIB_ACCESS_REMOTE_READ)
94 iflags |= IB_ACCESS_REMOTE_READ;
95 if (qflags & BNXT_QPLIB_ACCESS_REMOTE_ATOMIC)
96 iflags |= IB_ACCESS_REMOTE_ATOMIC;
97 if (qflags & BNXT_QPLIB_ACCESS_MW_BIND)
98 iflags |= IB_ACCESS_MW_BIND;
99 if (qflags & BNXT_QPLIB_ACCESS_ZERO_BASED)
100 iflags |= IB_ZERO_BASED;
101 if (qflags & BNXT_QPLIB_ACCESS_ON_DEMAND)
102 iflags |= IB_ACCESS_ON_DEMAND;
103 return iflags;
104};
105
64static int bnxt_re_build_sgl(struct ib_sge *ib_sg_list, 106static int bnxt_re_build_sgl(struct ib_sge *ib_sg_list,
65 struct bnxt_qplib_sge *sg_list, int num) 107 struct bnxt_qplib_sge *sg_list, int num)
66{ 108{
@@ -149,8 +191,8 @@ int bnxt_re_query_device(struct ib_device *ibdev,
149 ib_attr->max_total_mcast_qp_attach = 0; 191 ib_attr->max_total_mcast_qp_attach = 0;
150 ib_attr->max_ah = dev_attr->max_ah; 192 ib_attr->max_ah = dev_attr->max_ah;
151 193
152 ib_attr->max_fmr = dev_attr->max_fmr; 194 ib_attr->max_fmr = 0;
153 ib_attr->max_map_per_fmr = 1; /* ? */ 195 ib_attr->max_map_per_fmr = 0;
154 196
155 ib_attr->max_srq = dev_attr->max_srq; 197 ib_attr->max_srq = dev_attr->max_srq;
156 ib_attr->max_srq_wr = dev_attr->max_srq_wqes; 198 ib_attr->max_srq_wr = dev_attr->max_srq_wqes;
@@ -410,6 +452,158 @@ enum rdma_link_layer bnxt_re_get_link_layer(struct ib_device *ibdev,
410 return IB_LINK_LAYER_ETHERNET; 452 return IB_LINK_LAYER_ETHERNET;
411} 453}
412 454
455#define BNXT_RE_FENCE_PBL_SIZE DIV_ROUND_UP(BNXT_RE_FENCE_BYTES, PAGE_SIZE)
456
457static void bnxt_re_create_fence_wqe(struct bnxt_re_pd *pd)
458{
459 struct bnxt_re_fence_data *fence = &pd->fence;
460 struct ib_mr *ib_mr = &fence->mr->ib_mr;
461 struct bnxt_qplib_swqe *wqe = &fence->bind_wqe;
462
463 memset(wqe, 0, sizeof(*wqe));
464 wqe->type = BNXT_QPLIB_SWQE_TYPE_BIND_MW;
465 wqe->wr_id = BNXT_QPLIB_FENCE_WRID;
466 wqe->flags |= BNXT_QPLIB_SWQE_FLAGS_SIGNAL_COMP;
467 wqe->flags |= BNXT_QPLIB_SWQE_FLAGS_UC_FENCE;
468 wqe->bind.zero_based = false;
469 wqe->bind.parent_l_key = ib_mr->lkey;
470 wqe->bind.va = (u64)(unsigned long)fence->va;
471 wqe->bind.length = fence->size;
472 wqe->bind.access_cntl = __from_ib_access_flags(IB_ACCESS_REMOTE_READ);
473 wqe->bind.mw_type = SQ_BIND_MW_TYPE_TYPE1;
474
475 /* Save the initial rkey in fence structure for now;
476 * wqe->bind.r_key will be set at (re)bind time.
477 */
478 fence->bind_rkey = ib_inc_rkey(fence->mw->rkey);
479}
480
481static int bnxt_re_bind_fence_mw(struct bnxt_qplib_qp *qplib_qp)
482{
483 struct bnxt_re_qp *qp = container_of(qplib_qp, struct bnxt_re_qp,
484 qplib_qp);
485 struct ib_pd *ib_pd = qp->ib_qp.pd;
486 struct bnxt_re_pd *pd = container_of(ib_pd, struct bnxt_re_pd, ib_pd);
487 struct bnxt_re_fence_data *fence = &pd->fence;
488 struct bnxt_qplib_swqe *fence_wqe = &fence->bind_wqe;
489 struct bnxt_qplib_swqe wqe;
490 int rc;
491
492 memcpy(&wqe, fence_wqe, sizeof(wqe));
493 wqe.bind.r_key = fence->bind_rkey;
494 fence->bind_rkey = ib_inc_rkey(fence->bind_rkey);
495
496 dev_dbg(rdev_to_dev(qp->rdev),
497 "Posting bind fence-WQE: rkey: %#x QP: %d PD: %p\n",
498 wqe.bind.r_key, qp->qplib_qp.id, pd);
499 rc = bnxt_qplib_post_send(&qp->qplib_qp, &wqe);
500 if (rc) {
501 dev_err(rdev_to_dev(qp->rdev), "Failed to bind fence-WQE\n");
502 return rc;
503 }
504 bnxt_qplib_post_send_db(&qp->qplib_qp);
505
506 return rc;
507}
508
509static void bnxt_re_destroy_fence_mr(struct bnxt_re_pd *pd)
510{
511 struct bnxt_re_fence_data *fence = &pd->fence;
512 struct bnxt_re_dev *rdev = pd->rdev;
513 struct device *dev = &rdev->en_dev->pdev->dev;
514 struct bnxt_re_mr *mr = fence->mr;
515
516 if (fence->mw) {
517 bnxt_re_dealloc_mw(fence->mw);
518 fence->mw = NULL;
519 }
520 if (mr) {
521 if (mr->ib_mr.rkey)
522 bnxt_qplib_dereg_mrw(&rdev->qplib_res, &mr->qplib_mr,
523 true);
524 if (mr->ib_mr.lkey)
525 bnxt_qplib_free_mrw(&rdev->qplib_res, &mr->qplib_mr);
526 kfree(mr);
527 fence->mr = NULL;
528 }
529 if (fence->dma_addr) {
530 dma_unmap_single(dev, fence->dma_addr, BNXT_RE_FENCE_BYTES,
531 DMA_BIDIRECTIONAL);
532 fence->dma_addr = 0;
533 }
534}
535
536static int bnxt_re_create_fence_mr(struct bnxt_re_pd *pd)
537{
538 int mr_access_flags = IB_ACCESS_LOCAL_WRITE | IB_ACCESS_MW_BIND;
539 struct bnxt_re_fence_data *fence = &pd->fence;
540 struct bnxt_re_dev *rdev = pd->rdev;
541 struct device *dev = &rdev->en_dev->pdev->dev;
542 struct bnxt_re_mr *mr = NULL;
543 dma_addr_t dma_addr = 0;
544 struct ib_mw *mw;
545 u64 pbl_tbl;
546 int rc;
547
548 dma_addr = dma_map_single(dev, fence->va, BNXT_RE_FENCE_BYTES,
549 DMA_BIDIRECTIONAL);
550 rc = dma_mapping_error(dev, dma_addr);
551 if (rc) {
552 dev_err(rdev_to_dev(rdev), "Failed to dma-map fence-MR-mem\n");
553 rc = -EIO;
554 fence->dma_addr = 0;
555 goto fail;
556 }
557 fence->dma_addr = dma_addr;
558
559 /* Allocate a MR */
560 mr = kzalloc(sizeof(*mr), GFP_KERNEL);
561 if (!mr) {
562 rc = -ENOMEM;
563 goto fail;
564 }
565 fence->mr = mr;
566 mr->rdev = rdev;
567 mr->qplib_mr.pd = &pd->qplib_pd;
568 mr->qplib_mr.type = CMDQ_ALLOCATE_MRW_MRW_FLAGS_PMR;
569 mr->qplib_mr.flags = __from_ib_access_flags(mr_access_flags);
570 rc = bnxt_qplib_alloc_mrw(&rdev->qplib_res, &mr->qplib_mr);
571 if (rc) {
572 dev_err(rdev_to_dev(rdev), "Failed to alloc fence-HW-MR\n");
573 goto fail;
574 }
575
576 /* Register MR */
577 mr->ib_mr.lkey = mr->qplib_mr.lkey;
578 mr->qplib_mr.va = (u64)(unsigned long)fence->va;
579 mr->qplib_mr.total_size = BNXT_RE_FENCE_BYTES;
580 pbl_tbl = dma_addr;
581 rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, &pbl_tbl,
582 BNXT_RE_FENCE_PBL_SIZE, false);
583 if (rc) {
584 dev_err(rdev_to_dev(rdev), "Failed to register fence-MR\n");
585 goto fail;
586 }
587 mr->ib_mr.rkey = mr->qplib_mr.rkey;
588
589 /* Create a fence MW only for kernel consumers */
590 mw = bnxt_re_alloc_mw(&pd->ib_pd, IB_MW_TYPE_1, NULL);
591 if (!mw) {
592 dev_err(rdev_to_dev(rdev),
593 "Failed to create fence-MW for PD: %p\n", pd);
594 rc = -EINVAL;
595 goto fail;
596 }
597 fence->mw = mw;
598
599 bnxt_re_create_fence_wqe(pd);
600 return 0;
601
602fail:
603 bnxt_re_destroy_fence_mr(pd);
604 return rc;
605}
606
413/* Protection Domains */ 607/* Protection Domains */
414int bnxt_re_dealloc_pd(struct ib_pd *ib_pd) 608int bnxt_re_dealloc_pd(struct ib_pd *ib_pd)
415{ 609{
@@ -417,6 +611,7 @@ int bnxt_re_dealloc_pd(struct ib_pd *ib_pd)
417 struct bnxt_re_dev *rdev = pd->rdev; 611 struct bnxt_re_dev *rdev = pd->rdev;
418 int rc; 612 int rc;
419 613
614 bnxt_re_destroy_fence_mr(pd);
420 if (ib_pd->uobject && pd->dpi.dbr) { 615 if (ib_pd->uobject && pd->dpi.dbr) {
421 struct ib_ucontext *ib_uctx = ib_pd->uobject->context; 616 struct ib_ucontext *ib_uctx = ib_pd->uobject->context;
422 struct bnxt_re_ucontext *ucntx; 617 struct bnxt_re_ucontext *ucntx;
@@ -498,6 +693,10 @@ struct ib_pd *bnxt_re_alloc_pd(struct ib_device *ibdev,
498 } 693 }
499 } 694 }
500 695
696 if (!udata)
697 if (bnxt_re_create_fence_mr(pd))
698 dev_warn(rdev_to_dev(rdev),
699 "Failed to create Fence-MR\n");
501 return &pd->ib_pd; 700 return &pd->ib_pd;
502dbfail: 701dbfail:
503 (void)bnxt_qplib_dealloc_pd(&rdev->qplib_res, &rdev->qplib_res.pd_tbl, 702 (void)bnxt_qplib_dealloc_pd(&rdev->qplib_res, &rdev->qplib_res.pd_tbl,
@@ -849,12 +1048,16 @@ static struct bnxt_re_qp *bnxt_re_create_shadow_qp
849 /* Shadow QP SQ depth should be same as QP1 RQ depth */ 1048 /* Shadow QP SQ depth should be same as QP1 RQ depth */
850 qp->qplib_qp.sq.max_wqe = qp1_qp->rq.max_wqe; 1049 qp->qplib_qp.sq.max_wqe = qp1_qp->rq.max_wqe;
851 qp->qplib_qp.sq.max_sge = 2; 1050 qp->qplib_qp.sq.max_sge = 2;
1051 /* Q full delta can be 1 since it is internal QP */
1052 qp->qplib_qp.sq.q_full_delta = 1;
852 1053
853 qp->qplib_qp.scq = qp1_qp->scq; 1054 qp->qplib_qp.scq = qp1_qp->scq;
854 qp->qplib_qp.rcq = qp1_qp->rcq; 1055 qp->qplib_qp.rcq = qp1_qp->rcq;
855 1056
856 qp->qplib_qp.rq.max_wqe = qp1_qp->rq.max_wqe; 1057 qp->qplib_qp.rq.max_wqe = qp1_qp->rq.max_wqe;
857 qp->qplib_qp.rq.max_sge = qp1_qp->rq.max_sge; 1058 qp->qplib_qp.rq.max_sge = qp1_qp->rq.max_sge;
1059 /* Q full delta can be 1 since it is internal QP */
1060 qp->qplib_qp.rq.q_full_delta = 1;
858 1061
859 qp->qplib_qp.mtu = qp1_qp->mtu; 1062 qp->qplib_qp.mtu = qp1_qp->mtu;
860 1063
@@ -917,10 +1120,6 @@ struct ib_qp *bnxt_re_create_qp(struct ib_pd *ib_pd,
917 qp->qplib_qp.sig_type = ((qp_init_attr->sq_sig_type == 1120 qp->qplib_qp.sig_type = ((qp_init_attr->sq_sig_type ==
918 IB_SIGNAL_ALL_WR) ? true : false); 1121 IB_SIGNAL_ALL_WR) ? true : false);
919 1122
920 entries = roundup_pow_of_two(qp_init_attr->cap.max_send_wr + 1);
921 qp->qplib_qp.sq.max_wqe = min_t(u32, entries,
922 dev_attr->max_qp_wqes + 1);
923
924 qp->qplib_qp.sq.max_sge = qp_init_attr->cap.max_send_sge; 1123 qp->qplib_qp.sq.max_sge = qp_init_attr->cap.max_send_sge;
925 if (qp->qplib_qp.sq.max_sge > dev_attr->max_qp_sges) 1124 if (qp->qplib_qp.sq.max_sge > dev_attr->max_qp_sges)
926 qp->qplib_qp.sq.max_sge = dev_attr->max_qp_sges; 1125 qp->qplib_qp.sq.max_sge = dev_attr->max_qp_sges;
@@ -959,6 +1158,9 @@ struct ib_qp *bnxt_re_create_qp(struct ib_pd *ib_pd,
959 qp->qplib_qp.rq.max_wqe = min_t(u32, entries, 1158 qp->qplib_qp.rq.max_wqe = min_t(u32, entries,
960 dev_attr->max_qp_wqes + 1); 1159 dev_attr->max_qp_wqes + 1);
961 1160
1161 qp->qplib_qp.rq.q_full_delta = qp->qplib_qp.rq.max_wqe -
1162 qp_init_attr->cap.max_recv_wr;
1163
962 qp->qplib_qp.rq.max_sge = qp_init_attr->cap.max_recv_sge; 1164 qp->qplib_qp.rq.max_sge = qp_init_attr->cap.max_recv_sge;
963 if (qp->qplib_qp.rq.max_sge > dev_attr->max_qp_sges) 1165 if (qp->qplib_qp.rq.max_sge > dev_attr->max_qp_sges)
964 qp->qplib_qp.rq.max_sge = dev_attr->max_qp_sges; 1166 qp->qplib_qp.rq.max_sge = dev_attr->max_qp_sges;
@@ -967,6 +1169,12 @@ struct ib_qp *bnxt_re_create_qp(struct ib_pd *ib_pd,
967 qp->qplib_qp.mtu = ib_mtu_enum_to_int(iboe_get_mtu(rdev->netdev->mtu)); 1169 qp->qplib_qp.mtu = ib_mtu_enum_to_int(iboe_get_mtu(rdev->netdev->mtu));
968 1170
969 if (qp_init_attr->qp_type == IB_QPT_GSI) { 1171 if (qp_init_attr->qp_type == IB_QPT_GSI) {
1172 /* Allocate 1 more than what's provided */
1173 entries = roundup_pow_of_two(qp_init_attr->cap.max_send_wr + 1);
1174 qp->qplib_qp.sq.max_wqe = min_t(u32, entries,
1175 dev_attr->max_qp_wqes + 1);
1176 qp->qplib_qp.sq.q_full_delta = qp->qplib_qp.sq.max_wqe -
1177 qp_init_attr->cap.max_send_wr;
970 qp->qplib_qp.rq.max_sge = dev_attr->max_qp_sges; 1178 qp->qplib_qp.rq.max_sge = dev_attr->max_qp_sges;
971 if (qp->qplib_qp.rq.max_sge > dev_attr->max_qp_sges) 1179 if (qp->qplib_qp.rq.max_sge > dev_attr->max_qp_sges)
972 qp->qplib_qp.rq.max_sge = dev_attr->max_qp_sges; 1180 qp->qplib_qp.rq.max_sge = dev_attr->max_qp_sges;
@@ -1006,6 +1214,22 @@ struct ib_qp *bnxt_re_create_qp(struct ib_pd *ib_pd,
1006 } 1214 }
1007 1215
1008 } else { 1216 } else {
1217 /* Allocate 128 + 1 more than what's provided */
1218 entries = roundup_pow_of_two(qp_init_attr->cap.max_send_wr +
1219 BNXT_QPLIB_RESERVED_QP_WRS + 1);
1220 qp->qplib_qp.sq.max_wqe = min_t(u32, entries,
1221 dev_attr->max_qp_wqes +
1222 BNXT_QPLIB_RESERVED_QP_WRS + 1);
1223 qp->qplib_qp.sq.q_full_delta = BNXT_QPLIB_RESERVED_QP_WRS + 1;
1224
1225 /*
1226 * Reserving one slot for Phantom WQE. Application can
1227 * post one extra entry in this case. But allowing this to avoid
1228 * unexpected Queue full condition
1229 */
1230
1231 qp->qplib_qp.sq.q_full_delta -= 1;
1232
1009 qp->qplib_qp.max_rd_atomic = dev_attr->max_qp_rd_atom; 1233 qp->qplib_qp.max_rd_atomic = dev_attr->max_qp_rd_atom;
1010 qp->qplib_qp.max_dest_rd_atomic = dev_attr->max_qp_init_rd_atom; 1234 qp->qplib_qp.max_dest_rd_atomic = dev_attr->max_qp_init_rd_atom;
1011 if (udata) { 1235 if (udata) {
@@ -1025,6 +1249,7 @@ struct ib_qp *bnxt_re_create_qp(struct ib_pd *ib_pd,
1025 1249
1026 qp->ib_qp.qp_num = qp->qplib_qp.id; 1250 qp->ib_qp.qp_num = qp->qplib_qp.id;
1027 spin_lock_init(&qp->sq_lock); 1251 spin_lock_init(&qp->sq_lock);
1252 spin_lock_init(&qp->rq_lock);
1028 1253
1029 if (udata) { 1254 if (udata) {
1030 struct bnxt_re_qp_resp resp; 1255 struct bnxt_re_qp_resp resp;
@@ -1129,48 +1354,6 @@ static enum ib_mtu __to_ib_mtu(u32 mtu)
1129 } 1354 }
1130} 1355}
1131 1356
1132static int __from_ib_access_flags(int iflags)
1133{
1134 int qflags = 0;
1135
1136 if (iflags & IB_ACCESS_LOCAL_WRITE)
1137 qflags |= BNXT_QPLIB_ACCESS_LOCAL_WRITE;
1138 if (iflags & IB_ACCESS_REMOTE_READ)
1139 qflags |= BNXT_QPLIB_ACCESS_REMOTE_READ;
1140 if (iflags & IB_ACCESS_REMOTE_WRITE)
1141 qflags |= BNXT_QPLIB_ACCESS_REMOTE_WRITE;
1142 if (iflags & IB_ACCESS_REMOTE_ATOMIC)
1143 qflags |= BNXT_QPLIB_ACCESS_REMOTE_ATOMIC;
1144 if (iflags & IB_ACCESS_MW_BIND)
1145 qflags |= BNXT_QPLIB_ACCESS_MW_BIND;
1146 if (iflags & IB_ZERO_BASED)
1147 qflags |= BNXT_QPLIB_ACCESS_ZERO_BASED;
1148 if (iflags & IB_ACCESS_ON_DEMAND)
1149 qflags |= BNXT_QPLIB_ACCESS_ON_DEMAND;
1150 return qflags;
1151};
1152
1153static enum ib_access_flags __to_ib_access_flags(int qflags)
1154{
1155 enum ib_access_flags iflags = 0;
1156
1157 if (qflags & BNXT_QPLIB_ACCESS_LOCAL_WRITE)
1158 iflags |= IB_ACCESS_LOCAL_WRITE;
1159 if (qflags & BNXT_QPLIB_ACCESS_REMOTE_WRITE)
1160 iflags |= IB_ACCESS_REMOTE_WRITE;
1161 if (qflags & BNXT_QPLIB_ACCESS_REMOTE_READ)
1162 iflags |= IB_ACCESS_REMOTE_READ;
1163 if (qflags & BNXT_QPLIB_ACCESS_REMOTE_ATOMIC)
1164 iflags |= IB_ACCESS_REMOTE_ATOMIC;
1165 if (qflags & BNXT_QPLIB_ACCESS_MW_BIND)
1166 iflags |= IB_ACCESS_MW_BIND;
1167 if (qflags & BNXT_QPLIB_ACCESS_ZERO_BASED)
1168 iflags |= IB_ZERO_BASED;
1169 if (qflags & BNXT_QPLIB_ACCESS_ON_DEMAND)
1170 iflags |= IB_ACCESS_ON_DEMAND;
1171 return iflags;
1172};
1173
1174static int bnxt_re_modify_shadow_qp(struct bnxt_re_dev *rdev, 1357static int bnxt_re_modify_shadow_qp(struct bnxt_re_dev *rdev,
1175 struct bnxt_re_qp *qp1_qp, 1358 struct bnxt_re_qp *qp1_qp,
1176 int qp_attr_mask) 1359 int qp_attr_mask)
@@ -1378,11 +1561,21 @@ int bnxt_re_modify_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr,
1378 entries = roundup_pow_of_two(qp_attr->cap.max_send_wr); 1561 entries = roundup_pow_of_two(qp_attr->cap.max_send_wr);
1379 qp->qplib_qp.sq.max_wqe = min_t(u32, entries, 1562 qp->qplib_qp.sq.max_wqe = min_t(u32, entries,
1380 dev_attr->max_qp_wqes + 1); 1563 dev_attr->max_qp_wqes + 1);
1564 qp->qplib_qp.sq.q_full_delta = qp->qplib_qp.sq.max_wqe -
1565 qp_attr->cap.max_send_wr;
1566 /*
1567 * Reserving one slot for Phantom WQE. Some application can
1568 * post one extra entry in this case. Allowing this to avoid
1569 * unexpected Queue full condition
1570 */
1571 qp->qplib_qp.sq.q_full_delta -= 1;
1381 qp->qplib_qp.sq.max_sge = qp_attr->cap.max_send_sge; 1572 qp->qplib_qp.sq.max_sge = qp_attr->cap.max_send_sge;
1382 if (qp->qplib_qp.rq.max_wqe) { 1573 if (qp->qplib_qp.rq.max_wqe) {
1383 entries = roundup_pow_of_two(qp_attr->cap.max_recv_wr); 1574 entries = roundup_pow_of_two(qp_attr->cap.max_recv_wr);
1384 qp->qplib_qp.rq.max_wqe = 1575 qp->qplib_qp.rq.max_wqe =
1385 min_t(u32, entries, dev_attr->max_qp_wqes + 1); 1576 min_t(u32, entries, dev_attr->max_qp_wqes + 1);
1577 qp->qplib_qp.rq.q_full_delta = qp->qplib_qp.rq.max_wqe -
1578 qp_attr->cap.max_recv_wr;
1386 qp->qplib_qp.rq.max_sge = qp_attr->cap.max_recv_sge; 1579 qp->qplib_qp.rq.max_sge = qp_attr->cap.max_recv_sge;
1387 } else { 1580 } else {
1388 /* SRQ was used prior, just ignore the RQ caps */ 1581 /* SRQ was used prior, just ignore the RQ caps */
@@ -1883,6 +2076,22 @@ static int bnxt_re_copy_wr_payload(struct bnxt_re_dev *rdev,
1883 return payload_sz; 2076 return payload_sz;
1884} 2077}
1885 2078
2079static void bnxt_ud_qp_hw_stall_workaround(struct bnxt_re_qp *qp)
2080{
2081 if ((qp->ib_qp.qp_type == IB_QPT_UD ||
2082 qp->ib_qp.qp_type == IB_QPT_GSI ||
2083 qp->ib_qp.qp_type == IB_QPT_RAW_ETHERTYPE) &&
2084 qp->qplib_qp.wqe_cnt == BNXT_RE_UD_QP_HW_STALL) {
2085 int qp_attr_mask;
2086 struct ib_qp_attr qp_attr;
2087
2088 qp_attr_mask = IB_QP_STATE;
2089 qp_attr.qp_state = IB_QPS_RTS;
2090 bnxt_re_modify_qp(&qp->ib_qp, &qp_attr, qp_attr_mask, NULL);
2091 qp->qplib_qp.wqe_cnt = 0;
2092 }
2093}
2094
1886static int bnxt_re_post_send_shadow_qp(struct bnxt_re_dev *rdev, 2095static int bnxt_re_post_send_shadow_qp(struct bnxt_re_dev *rdev,
1887 struct bnxt_re_qp *qp, 2096 struct bnxt_re_qp *qp,
1888 struct ib_send_wr *wr) 2097 struct ib_send_wr *wr)
@@ -1928,6 +2137,7 @@ bad:
1928 wr = wr->next; 2137 wr = wr->next;
1929 } 2138 }
1930 bnxt_qplib_post_send_db(&qp->qplib_qp); 2139 bnxt_qplib_post_send_db(&qp->qplib_qp);
2140 bnxt_ud_qp_hw_stall_workaround(qp);
1931 spin_unlock_irqrestore(&qp->sq_lock, flags); 2141 spin_unlock_irqrestore(&qp->sq_lock, flags);
1932 return rc; 2142 return rc;
1933} 2143}
@@ -2024,6 +2234,7 @@ bad:
2024 wr = wr->next; 2234 wr = wr->next;
2025 } 2235 }
2026 bnxt_qplib_post_send_db(&qp->qplib_qp); 2236 bnxt_qplib_post_send_db(&qp->qplib_qp);
2237 bnxt_ud_qp_hw_stall_workaround(qp);
2027 spin_unlock_irqrestore(&qp->sq_lock, flags); 2238 spin_unlock_irqrestore(&qp->sq_lock, flags);
2028 2239
2029 return rc; 2240 return rc;
@@ -2071,7 +2282,10 @@ int bnxt_re_post_recv(struct ib_qp *ib_qp, struct ib_recv_wr *wr,
2071 struct bnxt_re_qp *qp = container_of(ib_qp, struct bnxt_re_qp, ib_qp); 2282 struct bnxt_re_qp *qp = container_of(ib_qp, struct bnxt_re_qp, ib_qp);
2072 struct bnxt_qplib_swqe wqe; 2283 struct bnxt_qplib_swqe wqe;
2073 int rc = 0, payload_sz = 0; 2284 int rc = 0, payload_sz = 0;
2285 unsigned long flags;
2286 u32 count = 0;
2074 2287
2288 spin_lock_irqsave(&qp->rq_lock, flags);
2075 while (wr) { 2289 while (wr) {
2076 /* House keeping */ 2290 /* House keeping */
2077 memset(&wqe, 0, sizeof(wqe)); 2291 memset(&wqe, 0, sizeof(wqe));
@@ -2100,9 +2314,21 @@ int bnxt_re_post_recv(struct ib_qp *ib_qp, struct ib_recv_wr *wr,
2100 *bad_wr = wr; 2314 *bad_wr = wr;
2101 break; 2315 break;
2102 } 2316 }
2317
2318 /* Ring DB if the RQEs posted reaches a threshold value */
2319 if (++count >= BNXT_RE_RQ_WQE_THRESHOLD) {
2320 bnxt_qplib_post_recv_db(&qp->qplib_qp);
2321 count = 0;
2322 }
2323
2103 wr = wr->next; 2324 wr = wr->next;
2104 } 2325 }
2105 bnxt_qplib_post_recv_db(&qp->qplib_qp); 2326
2327 if (count)
2328 bnxt_qplib_post_recv_db(&qp->qplib_qp);
2329
2330 spin_unlock_irqrestore(&qp->rq_lock, flags);
2331
2106 return rc; 2332 return rc;
2107} 2333}
2108 2334
@@ -2643,12 +2869,36 @@ static void bnxt_re_process_res_ud_wc(struct ib_wc *wc,
2643 wc->opcode = IB_WC_RECV_RDMA_WITH_IMM; 2869 wc->opcode = IB_WC_RECV_RDMA_WITH_IMM;
2644} 2870}
2645 2871
2872static int send_phantom_wqe(struct bnxt_re_qp *qp)
2873{
2874 struct bnxt_qplib_qp *lib_qp = &qp->qplib_qp;
2875 unsigned long flags;
2876 int rc = 0;
2877
2878 spin_lock_irqsave(&qp->sq_lock, flags);
2879
2880 rc = bnxt_re_bind_fence_mw(lib_qp);
2881 if (!rc) {
2882 lib_qp->sq.phantom_wqe_cnt++;
2883 dev_dbg(&lib_qp->sq.hwq.pdev->dev,
2884 "qp %#x sq->prod %#x sw_prod %#x phantom_wqe_cnt %d\n",
2885 lib_qp->id, lib_qp->sq.hwq.prod,
2886 HWQ_CMP(lib_qp->sq.hwq.prod, &lib_qp->sq.hwq),
2887 lib_qp->sq.phantom_wqe_cnt);
2888 }
2889
2890 spin_unlock_irqrestore(&qp->sq_lock, flags);
2891 return rc;
2892}
2893
2646int bnxt_re_poll_cq(struct ib_cq *ib_cq, int num_entries, struct ib_wc *wc) 2894int bnxt_re_poll_cq(struct ib_cq *ib_cq, int num_entries, struct ib_wc *wc)
2647{ 2895{
2648 struct bnxt_re_cq *cq = container_of(ib_cq, struct bnxt_re_cq, ib_cq); 2896 struct bnxt_re_cq *cq = container_of(ib_cq, struct bnxt_re_cq, ib_cq);
2649 struct bnxt_re_qp *qp; 2897 struct bnxt_re_qp *qp;
2650 struct bnxt_qplib_cqe *cqe; 2898 struct bnxt_qplib_cqe *cqe;
2651 int i, ncqe, budget; 2899 int i, ncqe, budget;
2900 struct bnxt_qplib_q *sq;
2901 struct bnxt_qplib_qp *lib_qp;
2652 u32 tbl_idx; 2902 u32 tbl_idx;
2653 struct bnxt_re_sqp_entries *sqp_entry = NULL; 2903 struct bnxt_re_sqp_entries *sqp_entry = NULL;
2654 unsigned long flags; 2904 unsigned long flags;
@@ -2661,7 +2911,21 @@ int bnxt_re_poll_cq(struct ib_cq *ib_cq, int num_entries, struct ib_wc *wc)
2661 } 2911 }
2662 cqe = &cq->cql[0]; 2912 cqe = &cq->cql[0];
2663 while (budget) { 2913 while (budget) {
2664 ncqe = bnxt_qplib_poll_cq(&cq->qplib_cq, cqe, budget); 2914 lib_qp = NULL;
2915 ncqe = bnxt_qplib_poll_cq(&cq->qplib_cq, cqe, budget, &lib_qp);
2916 if (lib_qp) {
2917 sq = &lib_qp->sq;
2918 if (sq->send_phantom) {
2919 qp = container_of(lib_qp,
2920 struct bnxt_re_qp, qplib_qp);
2921 if (send_phantom_wqe(qp) == -ENOMEM)
2922 dev_err(rdev_to_dev(cq->rdev),
2923 "Phantom failed! Scheduled to send again\n");
2924 else
2925 sq->send_phantom = false;
2926 }
2927 }
2928
2665 if (!ncqe) 2929 if (!ncqe)
2666 break; 2930 break;
2667 2931
@@ -2822,6 +3086,12 @@ int bnxt_re_dereg_mr(struct ib_mr *ib_mr)
2822 struct bnxt_re_dev *rdev = mr->rdev; 3086 struct bnxt_re_dev *rdev = mr->rdev;
2823 int rc; 3087 int rc;
2824 3088
3089 rc = bnxt_qplib_free_mrw(&rdev->qplib_res, &mr->qplib_mr);
3090 if (rc) {
3091 dev_err(rdev_to_dev(rdev), "Dereg MR failed: %#x\n", rc);
3092 return rc;
3093 }
3094
2825 if (mr->npages && mr->pages) { 3095 if (mr->npages && mr->pages) {
2826 rc = bnxt_qplib_free_fast_reg_page_list(&rdev->qplib_res, 3096 rc = bnxt_qplib_free_fast_reg_page_list(&rdev->qplib_res,
2827 &mr->qplib_frpl); 3097 &mr->qplib_frpl);
@@ -2829,8 +3099,6 @@ int bnxt_re_dereg_mr(struct ib_mr *ib_mr)
2829 mr->npages = 0; 3099 mr->npages = 0;
2830 mr->pages = NULL; 3100 mr->pages = NULL;
2831 } 3101 }
2832 rc = bnxt_qplib_free_mrw(&rdev->qplib_res, &mr->qplib_mr);
2833
2834 if (!IS_ERR_OR_NULL(mr->ib_umem)) 3102 if (!IS_ERR_OR_NULL(mr->ib_umem))
2835 ib_umem_release(mr->ib_umem); 3103 ib_umem_release(mr->ib_umem);
2836 3104
@@ -2914,97 +3182,52 @@ fail:
2914 return ERR_PTR(rc); 3182 return ERR_PTR(rc);
2915} 3183}
2916 3184
2917/* Fast Memory Regions */ 3185struct ib_mw *bnxt_re_alloc_mw(struct ib_pd *ib_pd, enum ib_mw_type type,
2918struct ib_fmr *bnxt_re_alloc_fmr(struct ib_pd *ib_pd, int mr_access_flags, 3186 struct ib_udata *udata)
2919 struct ib_fmr_attr *fmr_attr)
2920{ 3187{
2921 struct bnxt_re_pd *pd = container_of(ib_pd, struct bnxt_re_pd, ib_pd); 3188 struct bnxt_re_pd *pd = container_of(ib_pd, struct bnxt_re_pd, ib_pd);
2922 struct bnxt_re_dev *rdev = pd->rdev; 3189 struct bnxt_re_dev *rdev = pd->rdev;
2923 struct bnxt_re_fmr *fmr; 3190 struct bnxt_re_mw *mw;
2924 int rc; 3191 int rc;
2925 3192
2926 if (fmr_attr->max_pages > MAX_PBL_LVL_2_PGS || 3193 mw = kzalloc(sizeof(*mw), GFP_KERNEL);
2927 fmr_attr->max_maps > rdev->dev_attr.max_map_per_fmr) { 3194 if (!mw)
2928 dev_err(rdev_to_dev(rdev), "Allocate FMR exceeded Max limit");
2929 return ERR_PTR(-ENOMEM); 3195 return ERR_PTR(-ENOMEM);
2930 } 3196 mw->rdev = rdev;
2931 fmr = kzalloc(sizeof(*fmr), GFP_KERNEL); 3197 mw->qplib_mw.pd = &pd->qplib_pd;
2932 if (!fmr)
2933 return ERR_PTR(-ENOMEM);
2934
2935 fmr->rdev = rdev;
2936 fmr->qplib_fmr.pd = &pd->qplib_pd;
2937 fmr->qplib_fmr.type = CMDQ_ALLOCATE_MRW_MRW_FLAGS_PMR;
2938 3198
2939 rc = bnxt_qplib_alloc_mrw(&rdev->qplib_res, &fmr->qplib_fmr); 3199 mw->qplib_mw.type = (type == IB_MW_TYPE_1 ?
2940 if (rc) 3200 CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE1 :
3201 CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE2B);
3202 rc = bnxt_qplib_alloc_mrw(&rdev->qplib_res, &mw->qplib_mw);
3203 if (rc) {
3204 dev_err(rdev_to_dev(rdev), "Allocate MW failed!");
2941 goto fail; 3205 goto fail;
3206 }
3207 mw->ib_mw.rkey = mw->qplib_mw.rkey;
2942 3208
2943 fmr->qplib_fmr.flags = __from_ib_access_flags(mr_access_flags); 3209 atomic_inc(&rdev->mw_count);
2944 fmr->ib_fmr.lkey = fmr->qplib_fmr.lkey; 3210 return &mw->ib_mw;
2945 fmr->ib_fmr.rkey = fmr->ib_fmr.lkey;
2946 3211
2947 atomic_inc(&rdev->mr_count);
2948 return &fmr->ib_fmr;
2949fail: 3212fail:
2950 kfree(fmr); 3213 kfree(mw);
2951 return ERR_PTR(rc); 3214 return ERR_PTR(rc);
2952} 3215}
2953 3216
2954int bnxt_re_map_phys_fmr(struct ib_fmr *ib_fmr, u64 *page_list, int list_len, 3217int bnxt_re_dealloc_mw(struct ib_mw *ib_mw)
2955 u64 iova)
2956{ 3218{
2957 struct bnxt_re_fmr *fmr = container_of(ib_fmr, struct bnxt_re_fmr, 3219 struct bnxt_re_mw *mw = container_of(ib_mw, struct bnxt_re_mw, ib_mw);
2958 ib_fmr); 3220 struct bnxt_re_dev *rdev = mw->rdev;
2959 struct bnxt_re_dev *rdev = fmr->rdev;
2960 int rc; 3221 int rc;
2961 3222
2962 fmr->qplib_fmr.va = iova; 3223 rc = bnxt_qplib_free_mrw(&rdev->qplib_res, &mw->qplib_mw);
2963 fmr->qplib_fmr.total_size = list_len * PAGE_SIZE; 3224 if (rc) {
2964 3225 dev_err(rdev_to_dev(rdev), "Free MW failed: %#x\n", rc);
2965 rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &fmr->qplib_fmr, page_list, 3226 return rc;
2966 list_len, true);
2967 if (rc)
2968 dev_err(rdev_to_dev(rdev), "Failed to map FMR for lkey = 0x%x!",
2969 fmr->ib_fmr.lkey);
2970 return rc;
2971}
2972
2973int bnxt_re_unmap_fmr(struct list_head *fmr_list)
2974{
2975 struct bnxt_re_dev *rdev;
2976 struct bnxt_re_fmr *fmr;
2977 struct ib_fmr *ib_fmr;
2978 int rc = 0;
2979
2980 /* Validate each FMRs inside the fmr_list */
2981 list_for_each_entry(ib_fmr, fmr_list, list) {
2982 fmr = container_of(ib_fmr, struct bnxt_re_fmr, ib_fmr);
2983 rdev = fmr->rdev;
2984
2985 if (rdev) {
2986 rc = bnxt_qplib_dereg_mrw(&rdev->qplib_res,
2987 &fmr->qplib_fmr, true);
2988 if (rc)
2989 break;
2990 }
2991 } 3227 }
2992 return rc;
2993}
2994
2995int bnxt_re_dealloc_fmr(struct ib_fmr *ib_fmr)
2996{
2997 struct bnxt_re_fmr *fmr = container_of(ib_fmr, struct bnxt_re_fmr,
2998 ib_fmr);
2999 struct bnxt_re_dev *rdev = fmr->rdev;
3000 int rc;
3001 3228
3002 rc = bnxt_qplib_free_mrw(&rdev->qplib_res, &fmr->qplib_fmr); 3229 kfree(mw);
3003 if (rc) 3230 atomic_dec(&rdev->mw_count);
3004 dev_err(rdev_to_dev(rdev), "Failed to free FMR");
3005
3006 kfree(fmr);
3007 atomic_dec(&rdev->mr_count);
3008 return rc; 3231 return rc;
3009} 3232}
3010 3233
diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.h b/drivers/infiniband/hw/bnxt_re/ib_verbs.h
index 5c3d71765454..6c160f6a5398 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.h
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.h
@@ -44,11 +44,23 @@ struct bnxt_re_gid_ctx {
44 u32 refcnt; 44 u32 refcnt;
45}; 45};
46 46
47#define BNXT_RE_FENCE_BYTES 64
48struct bnxt_re_fence_data {
49 u32 size;
50 u8 va[BNXT_RE_FENCE_BYTES];
51 dma_addr_t dma_addr;
52 struct bnxt_re_mr *mr;
53 struct ib_mw *mw;
54 struct bnxt_qplib_swqe bind_wqe;
55 u32 bind_rkey;
56};
57
47struct bnxt_re_pd { 58struct bnxt_re_pd {
48 struct bnxt_re_dev *rdev; 59 struct bnxt_re_dev *rdev;
49 struct ib_pd ib_pd; 60 struct ib_pd ib_pd;
50 struct bnxt_qplib_pd qplib_pd; 61 struct bnxt_qplib_pd qplib_pd;
51 struct bnxt_qplib_dpi dpi; 62 struct bnxt_qplib_dpi dpi;
63 struct bnxt_re_fence_data fence;
52}; 64};
53 65
54struct bnxt_re_ah { 66struct bnxt_re_ah {
@@ -62,6 +74,7 @@ struct bnxt_re_qp {
62 struct bnxt_re_dev *rdev; 74 struct bnxt_re_dev *rdev;
63 struct ib_qp ib_qp; 75 struct ib_qp ib_qp;
64 spinlock_t sq_lock; /* protect sq */ 76 spinlock_t sq_lock; /* protect sq */
77 spinlock_t rq_lock; /* protect rq */
65 struct bnxt_qplib_qp qplib_qp; 78 struct bnxt_qplib_qp qplib_qp;
66 struct ib_umem *sumem; 79 struct ib_umem *sumem;
67 struct ib_umem *rumem; 80 struct ib_umem *rumem;
@@ -181,12 +194,9 @@ int bnxt_re_map_mr_sg(struct ib_mr *ib_mr, struct scatterlist *sg, int sg_nents,
181struct ib_mr *bnxt_re_alloc_mr(struct ib_pd *ib_pd, enum ib_mr_type mr_type, 194struct ib_mr *bnxt_re_alloc_mr(struct ib_pd *ib_pd, enum ib_mr_type mr_type,
182 u32 max_num_sg); 195 u32 max_num_sg);
183int bnxt_re_dereg_mr(struct ib_mr *mr); 196int bnxt_re_dereg_mr(struct ib_mr *mr);
184struct ib_fmr *bnxt_re_alloc_fmr(struct ib_pd *pd, int mr_access_flags, 197struct ib_mw *bnxt_re_alloc_mw(struct ib_pd *ib_pd, enum ib_mw_type type,
185 struct ib_fmr_attr *fmr_attr); 198 struct ib_udata *udata);
186int bnxt_re_map_phys_fmr(struct ib_fmr *fmr, u64 *page_list, int list_len, 199int bnxt_re_dealloc_mw(struct ib_mw *mw);
187 u64 iova);
188int bnxt_re_unmap_fmr(struct list_head *fmr_list);
189int bnxt_re_dealloc_fmr(struct ib_fmr *fmr);
190struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, 200struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
191 u64 virt_addr, int mr_access_flags, 201 u64 virt_addr, int mr_access_flags,
192 struct ib_udata *udata); 202 struct ib_udata *udata);
diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c
index 5d355401179b..1fce5e73216b 100644
--- a/drivers/infiniband/hw/bnxt_re/main.c
+++ b/drivers/infiniband/hw/bnxt_re/main.c
@@ -507,10 +507,6 @@ static int bnxt_re_register_ib(struct bnxt_re_dev *rdev)
507 ibdev->dereg_mr = bnxt_re_dereg_mr; 507 ibdev->dereg_mr = bnxt_re_dereg_mr;
508 ibdev->alloc_mr = bnxt_re_alloc_mr; 508 ibdev->alloc_mr = bnxt_re_alloc_mr;
509 ibdev->map_mr_sg = bnxt_re_map_mr_sg; 509 ibdev->map_mr_sg = bnxt_re_map_mr_sg;
510 ibdev->alloc_fmr = bnxt_re_alloc_fmr;
511 ibdev->map_phys_fmr = bnxt_re_map_phys_fmr;
512 ibdev->unmap_fmr = bnxt_re_unmap_fmr;
513 ibdev->dealloc_fmr = bnxt_re_dealloc_fmr;
514 510
515 ibdev->reg_user_mr = bnxt_re_reg_user_mr; 511 ibdev->reg_user_mr = bnxt_re_reg_user_mr;
516 ibdev->alloc_ucontext = bnxt_re_alloc_ucontext; 512 ibdev->alloc_ucontext = bnxt_re_alloc_ucontext;
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
index 43d08b5e9085..f05500bcdcf1 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
@@ -284,7 +284,7 @@ int bnxt_qplib_create_qp1(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
284{ 284{
285 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 285 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
286 struct cmdq_create_qp1 req; 286 struct cmdq_create_qp1 req;
287 struct creq_create_qp1_resp *resp; 287 struct creq_create_qp1_resp resp;
288 struct bnxt_qplib_pbl *pbl; 288 struct bnxt_qplib_pbl *pbl;
289 struct bnxt_qplib_q *sq = &qp->sq; 289 struct bnxt_qplib_q *sq = &qp->sq;
290 struct bnxt_qplib_q *rq = &qp->rq; 290 struct bnxt_qplib_q *rq = &qp->rq;
@@ -394,31 +394,12 @@ int bnxt_qplib_create_qp1(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
394 394
395 req.pd_id = cpu_to_le32(qp->pd->id); 395 req.pd_id = cpu_to_le32(qp->pd->id);
396 396
397 resp = (struct creq_create_qp1_resp *) 397 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
398 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 398 (void *)&resp, NULL, 0);
399 NULL, 0); 399 if (rc)
400 if (!resp) {
401 dev_err(&res->pdev->dev, "QPLIB: FP: CREATE_QP1 send failed");
402 rc = -EINVAL;
403 goto fail;
404 }
405 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
406 /* Cmd timed out */
407 dev_err(&rcfw->pdev->dev, "QPLIB: FP: CREATE_QP1 timed out");
408 rc = -ETIMEDOUT;
409 goto fail;
410 }
411 if (resp->status ||
412 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
413 dev_err(&rcfw->pdev->dev, "QPLIB: FP: CREATE_QP1 failed ");
414 dev_err(&rcfw->pdev->dev,
415 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
416 resp->status, le16_to_cpu(req.cookie),
417 le16_to_cpu(resp->cookie));
418 rc = -EINVAL;
419 goto fail; 400 goto fail;
420 } 401
421 qp->id = le32_to_cpu(resp->xid); 402 qp->id = le32_to_cpu(resp.xid);
422 qp->cur_qp_state = CMDQ_MODIFY_QP_NEW_STATE_RESET; 403 qp->cur_qp_state = CMDQ_MODIFY_QP_NEW_STATE_RESET;
423 sq->flush_in_progress = false; 404 sq->flush_in_progress = false;
424 rq->flush_in_progress = false; 405 rq->flush_in_progress = false;
@@ -442,7 +423,7 @@ int bnxt_qplib_create_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
442 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 423 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
443 struct sq_send *hw_sq_send_hdr, **hw_sq_send_ptr; 424 struct sq_send *hw_sq_send_hdr, **hw_sq_send_ptr;
444 struct cmdq_create_qp req; 425 struct cmdq_create_qp req;
445 struct creq_create_qp_resp *resp; 426 struct creq_create_qp_resp resp;
446 struct bnxt_qplib_pbl *pbl; 427 struct bnxt_qplib_pbl *pbl;
447 struct sq_psn_search **psn_search_ptr; 428 struct sq_psn_search **psn_search_ptr;
448 unsigned long int psn_search, poff = 0; 429 unsigned long int psn_search, poff = 0;
@@ -627,31 +608,12 @@ int bnxt_qplib_create_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
627 } 608 }
628 req.pd_id = cpu_to_le32(qp->pd->id); 609 req.pd_id = cpu_to_le32(qp->pd->id);
629 610
630 resp = (struct creq_create_qp_resp *) 611 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
631 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 612 (void *)&resp, NULL, 0);
632 NULL, 0); 613 if (rc)
633 if (!resp) {
634 dev_err(&rcfw->pdev->dev, "QPLIB: FP: CREATE_QP send failed");
635 rc = -EINVAL;
636 goto fail;
637 }
638 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
639 /* Cmd timed out */
640 dev_err(&rcfw->pdev->dev, "QPLIB: FP: CREATE_QP timed out");
641 rc = -ETIMEDOUT;
642 goto fail;
643 }
644 if (resp->status ||
645 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
646 dev_err(&rcfw->pdev->dev, "QPLIB: FP: CREATE_QP failed ");
647 dev_err(&rcfw->pdev->dev,
648 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
649 resp->status, le16_to_cpu(req.cookie),
650 le16_to_cpu(resp->cookie));
651 rc = -EINVAL;
652 goto fail; 614 goto fail;
653 } 615
654 qp->id = le32_to_cpu(resp->xid); 616 qp->id = le32_to_cpu(resp.xid);
655 qp->cur_qp_state = CMDQ_MODIFY_QP_NEW_STATE_RESET; 617 qp->cur_qp_state = CMDQ_MODIFY_QP_NEW_STATE_RESET;
656 sq->flush_in_progress = false; 618 sq->flush_in_progress = false;
657 rq->flush_in_progress = false; 619 rq->flush_in_progress = false;
@@ -769,10 +731,11 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
769{ 731{
770 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 732 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
771 struct cmdq_modify_qp req; 733 struct cmdq_modify_qp req;
772 struct creq_modify_qp_resp *resp; 734 struct creq_modify_qp_resp resp;
773 u16 cmd_flags = 0, pkey; 735 u16 cmd_flags = 0, pkey;
774 u32 temp32[4]; 736 u32 temp32[4];
775 u32 bmask; 737 u32 bmask;
738 int rc;
776 739
777 RCFW_CMD_PREP(req, MODIFY_QP, cmd_flags); 740 RCFW_CMD_PREP(req, MODIFY_QP, cmd_flags);
778 741
@@ -862,27 +825,10 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
862 825
863 req.vlan_pcp_vlan_dei_vlan_id = cpu_to_le16(qp->vlan_id); 826 req.vlan_pcp_vlan_dei_vlan_id = cpu_to_le16(qp->vlan_id);
864 827
865 resp = (struct creq_modify_qp_resp *) 828 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
866 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 829 (void *)&resp, NULL, 0);
867 NULL, 0); 830 if (rc)
868 if (!resp) { 831 return rc;
869 dev_err(&rcfw->pdev->dev, "QPLIB: FP: MODIFY_QP send failed");
870 return -EINVAL;
871 }
872 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
873 /* Cmd timed out */
874 dev_err(&rcfw->pdev->dev, "QPLIB: FP: MODIFY_QP timed out");
875 return -ETIMEDOUT;
876 }
877 if (resp->status ||
878 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
879 dev_err(&rcfw->pdev->dev, "QPLIB: FP: MODIFY_QP failed ");
880 dev_err(&rcfw->pdev->dev,
881 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
882 resp->status, le16_to_cpu(req.cookie),
883 le16_to_cpu(resp->cookie));
884 return -EINVAL;
885 }
886 qp->cur_qp_state = qp->state; 832 qp->cur_qp_state = qp->state;
887 return 0; 833 return 0;
888} 834}
@@ -891,37 +837,26 @@ int bnxt_qplib_query_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
891{ 837{
892 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 838 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
893 struct cmdq_query_qp req; 839 struct cmdq_query_qp req;
894 struct creq_query_qp_resp *resp; 840 struct creq_query_qp_resp resp;
841 struct bnxt_qplib_rcfw_sbuf *sbuf;
895 struct creq_query_qp_resp_sb *sb; 842 struct creq_query_qp_resp_sb *sb;
896 u16 cmd_flags = 0; 843 u16 cmd_flags = 0;
897 u32 temp32[4]; 844 u32 temp32[4];
898 int i; 845 int i, rc = 0;
899 846
900 RCFW_CMD_PREP(req, QUERY_QP, cmd_flags); 847 RCFW_CMD_PREP(req, QUERY_QP, cmd_flags);
901 848
849 sbuf = bnxt_qplib_rcfw_alloc_sbuf(rcfw, sizeof(*sb));
850 if (!sbuf)
851 return -ENOMEM;
852 sb = sbuf->sb;
853
902 req.qp_cid = cpu_to_le32(qp->id); 854 req.qp_cid = cpu_to_le32(qp->id);
903 req.resp_size = sizeof(*sb) / BNXT_QPLIB_CMDQE_UNITS; 855 req.resp_size = sizeof(*sb) / BNXT_QPLIB_CMDQE_UNITS;
904 resp = (struct creq_query_qp_resp *) 856 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void *)&resp,
905 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 857 (void *)sbuf, 0);
906 (void **)&sb, 0); 858 if (rc)
907 if (!resp) { 859 goto bail;
908 dev_err(&rcfw->pdev->dev, "QPLIB: FP: QUERY_QP send failed");
909 return -EINVAL;
910 }
911 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
912 /* Cmd timed out */
913 dev_err(&rcfw->pdev->dev, "QPLIB: FP: QUERY_QP timed out");
914 return -ETIMEDOUT;
915 }
916 if (resp->status ||
917 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
918 dev_err(&rcfw->pdev->dev, "QPLIB: FP: QUERY_QP failed ");
919 dev_err(&rcfw->pdev->dev,
920 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
921 resp->status, le16_to_cpu(req.cookie),
922 le16_to_cpu(resp->cookie));
923 return -EINVAL;
924 }
925 /* Extract the context from the side buffer */ 860 /* Extract the context from the side buffer */
926 qp->state = sb->en_sqd_async_notify_state & 861 qp->state = sb->en_sqd_async_notify_state &
927 CREQ_QUERY_QP_RESP_SB_STATE_MASK; 862 CREQ_QUERY_QP_RESP_SB_STATE_MASK;
@@ -976,7 +911,9 @@ int bnxt_qplib_query_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
976 qp->dest_qpn = le32_to_cpu(sb->dest_qp_id); 911 qp->dest_qpn = le32_to_cpu(sb->dest_qp_id);
977 memcpy(qp->smac, sb->src_mac, 6); 912 memcpy(qp->smac, sb->src_mac, 6);
978 qp->vlan_id = le16_to_cpu(sb->vlan_pcp_vlan_dei_vlan_id); 913 qp->vlan_id = le16_to_cpu(sb->vlan_pcp_vlan_dei_vlan_id);
979 return 0; 914bail:
915 bnxt_qplib_rcfw_free_sbuf(rcfw, sbuf);
916 return rc;
980} 917}
981 918
982static void __clean_cq(struct bnxt_qplib_cq *cq, u64 qp) 919static void __clean_cq(struct bnxt_qplib_cq *cq, u64 qp)
@@ -1021,34 +958,18 @@ int bnxt_qplib_destroy_qp(struct bnxt_qplib_res *res,
1021{ 958{
1022 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 959 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
1023 struct cmdq_destroy_qp req; 960 struct cmdq_destroy_qp req;
1024 struct creq_destroy_qp_resp *resp; 961 struct creq_destroy_qp_resp resp;
1025 unsigned long flags; 962 unsigned long flags;
1026 u16 cmd_flags = 0; 963 u16 cmd_flags = 0;
964 int rc;
1027 965
1028 RCFW_CMD_PREP(req, DESTROY_QP, cmd_flags); 966 RCFW_CMD_PREP(req, DESTROY_QP, cmd_flags);
1029 967
1030 req.qp_cid = cpu_to_le32(qp->id); 968 req.qp_cid = cpu_to_le32(qp->id);
1031 resp = (struct creq_destroy_qp_resp *) 969 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
1032 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 970 (void *)&resp, NULL, 0);
1033 NULL, 0); 971 if (rc)
1034 if (!resp) { 972 return rc;
1035 dev_err(&rcfw->pdev->dev, "QPLIB: FP: DESTROY_QP send failed");
1036 return -EINVAL;
1037 }
1038 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
1039 /* Cmd timed out */
1040 dev_err(&rcfw->pdev->dev, "QPLIB: FP: DESTROY_QP timed out");
1041 return -ETIMEDOUT;
1042 }
1043 if (resp->status ||
1044 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
1045 dev_err(&rcfw->pdev->dev, "QPLIB: FP: DESTROY_QP failed ");
1046 dev_err(&rcfw->pdev->dev,
1047 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
1048 resp->status, le16_to_cpu(req.cookie),
1049 le16_to_cpu(resp->cookie));
1050 return -EINVAL;
1051 }
1052 973
1053 /* Must walk the associated CQs to nullified the QP ptr */ 974 /* Must walk the associated CQs to nullified the QP ptr */
1054 spin_lock_irqsave(&qp->scq->hwq.lock, flags); 975 spin_lock_irqsave(&qp->scq->hwq.lock, flags);
@@ -1162,8 +1083,12 @@ int bnxt_qplib_post_send(struct bnxt_qplib_qp *qp,
1162 rc = -EINVAL; 1083 rc = -EINVAL;
1163 goto done; 1084 goto done;
1164 } 1085 }
1165 if (HWQ_CMP((sq->hwq.prod + 1), &sq->hwq) == 1086
1166 HWQ_CMP(sq->hwq.cons, &sq->hwq)) { 1087 if (bnxt_qplib_queue_full(sq)) {
1088 dev_err(&sq->hwq.pdev->dev,
1089 "QPLIB: prod = %#x cons = %#x qdepth = %#x delta = %#x",
1090 sq->hwq.prod, sq->hwq.cons, sq->hwq.max_elements,
1091 sq->q_full_delta);
1167 rc = -ENOMEM; 1092 rc = -ENOMEM;
1168 goto done; 1093 goto done;
1169 } 1094 }
@@ -1373,6 +1298,9 @@ int bnxt_qplib_post_send(struct bnxt_qplib_qp *qp,
1373 } 1298 }
1374 1299
1375 sq->hwq.prod++; 1300 sq->hwq.prod++;
1301
1302 qp->wqe_cnt++;
1303
1376done: 1304done:
1377 return rc; 1305 return rc;
1378} 1306}
@@ -1411,8 +1339,7 @@ int bnxt_qplib_post_recv(struct bnxt_qplib_qp *qp,
1411 rc = -EINVAL; 1339 rc = -EINVAL;
1412 goto done; 1340 goto done;
1413 } 1341 }
1414 if (HWQ_CMP((rq->hwq.prod + 1), &rq->hwq) == 1342 if (bnxt_qplib_queue_full(rq)) {
1415 HWQ_CMP(rq->hwq.cons, &rq->hwq)) {
1416 dev_err(&rq->hwq.pdev->dev, 1343 dev_err(&rq->hwq.pdev->dev,
1417 "QPLIB: FP: QP (0x%x) RQ is full!", qp->id); 1344 "QPLIB: FP: QP (0x%x) RQ is full!", qp->id);
1418 rc = -EINVAL; 1345 rc = -EINVAL;
@@ -1483,7 +1410,7 @@ int bnxt_qplib_create_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq)
1483{ 1410{
1484 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 1411 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
1485 struct cmdq_create_cq req; 1412 struct cmdq_create_cq req;
1486 struct creq_create_cq_resp *resp; 1413 struct creq_create_cq_resp resp;
1487 struct bnxt_qplib_pbl *pbl; 1414 struct bnxt_qplib_pbl *pbl;
1488 u16 cmd_flags = 0; 1415 u16 cmd_flags = 0;
1489 int rc; 1416 int rc;
@@ -1525,30 +1452,12 @@ int bnxt_qplib_create_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq)
1525 (cq->cnq_hw_ring_id & CMDQ_CREATE_CQ_CNQ_ID_MASK) << 1452 (cq->cnq_hw_ring_id & CMDQ_CREATE_CQ_CNQ_ID_MASK) <<
1526 CMDQ_CREATE_CQ_CNQ_ID_SFT); 1453 CMDQ_CREATE_CQ_CNQ_ID_SFT);
1527 1454
1528 resp = (struct creq_create_cq_resp *) 1455 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
1529 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 1456 (void *)&resp, NULL, 0);
1530 NULL, 0); 1457 if (rc)
1531 if (!resp) {
1532 dev_err(&rcfw->pdev->dev, "QPLIB: FP: CREATE_CQ send failed");
1533 return -EINVAL;
1534 }
1535 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
1536 /* Cmd timed out */
1537 dev_err(&rcfw->pdev->dev, "QPLIB: FP: CREATE_CQ timed out");
1538 rc = -ETIMEDOUT;
1539 goto fail;
1540 }
1541 if (resp->status ||
1542 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
1543 dev_err(&rcfw->pdev->dev, "QPLIB: FP: CREATE_CQ failed ");
1544 dev_err(&rcfw->pdev->dev,
1545 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
1546 resp->status, le16_to_cpu(req.cookie),
1547 le16_to_cpu(resp->cookie));
1548 rc = -EINVAL;
1549 goto fail; 1458 goto fail;
1550 } 1459
1551 cq->id = le32_to_cpu(resp->xid); 1460 cq->id = le32_to_cpu(resp.xid);
1552 cq->dbr_base = res->dpi_tbl.dbr_bar_reg_iomem; 1461 cq->dbr_base = res->dpi_tbl.dbr_bar_reg_iomem;
1553 cq->period = BNXT_QPLIB_QUEUE_START_PERIOD; 1462 cq->period = BNXT_QPLIB_QUEUE_START_PERIOD;
1554 init_waitqueue_head(&cq->waitq); 1463 init_waitqueue_head(&cq->waitq);
@@ -1566,33 +1475,17 @@ int bnxt_qplib_destroy_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq)
1566{ 1475{
1567 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 1476 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
1568 struct cmdq_destroy_cq req; 1477 struct cmdq_destroy_cq req;
1569 struct creq_destroy_cq_resp *resp; 1478 struct creq_destroy_cq_resp resp;
1570 u16 cmd_flags = 0; 1479 u16 cmd_flags = 0;
1480 int rc;
1571 1481
1572 RCFW_CMD_PREP(req, DESTROY_CQ, cmd_flags); 1482 RCFW_CMD_PREP(req, DESTROY_CQ, cmd_flags);
1573 1483
1574 req.cq_cid = cpu_to_le32(cq->id); 1484 req.cq_cid = cpu_to_le32(cq->id);
1575 resp = (struct creq_destroy_cq_resp *) 1485 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
1576 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 1486 (void *)&resp, NULL, 0);
1577 NULL, 0); 1487 if (rc)
1578 if (!resp) { 1488 return rc;
1579 dev_err(&rcfw->pdev->dev, "QPLIB: FP: DESTROY_CQ send failed");
1580 return -EINVAL;
1581 }
1582 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
1583 /* Cmd timed out */
1584 dev_err(&rcfw->pdev->dev, "QPLIB: FP: DESTROY_CQ timed out");
1585 return -ETIMEDOUT;
1586 }
1587 if (resp->status ||
1588 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
1589 dev_err(&rcfw->pdev->dev, "QPLIB: FP: DESTROY_CQ failed ");
1590 dev_err(&rcfw->pdev->dev,
1591 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
1592 resp->status, le16_to_cpu(req.cookie),
1593 le16_to_cpu(resp->cookie));
1594 return -EINVAL;
1595 }
1596 bnxt_qplib_free_hwq(res->pdev, &cq->hwq); 1489 bnxt_qplib_free_hwq(res->pdev, &cq->hwq);
1597 return 0; 1490 return 0;
1598} 1491}
@@ -1664,14 +1557,113 @@ static int __flush_rq(struct bnxt_qplib_q *rq, struct bnxt_qplib_qp *qp,
1664 return rc; 1557 return rc;
1665} 1558}
1666 1559
1560/* Note: SQE is valid from sw_sq_cons up to cqe_sq_cons (exclusive)
1561 * CQE is track from sw_cq_cons to max_element but valid only if VALID=1
1562 */
1563static int do_wa9060(struct bnxt_qplib_qp *qp, struct bnxt_qplib_cq *cq,
1564 u32 cq_cons, u32 sw_sq_cons, u32 cqe_sq_cons)
1565{
1566 struct bnxt_qplib_q *sq = &qp->sq;
1567 struct bnxt_qplib_swq *swq;
1568 u32 peek_sw_cq_cons, peek_raw_cq_cons, peek_sq_cons_idx;
1569 struct cq_base *peek_hwcqe, **peek_hw_cqe_ptr;
1570 struct cq_req *peek_req_hwcqe;
1571 struct bnxt_qplib_qp *peek_qp;
1572 struct bnxt_qplib_q *peek_sq;
1573 int i, rc = 0;
1574
1575 /* Normal mode */
1576 /* Check for the psn_search marking before completing */
1577 swq = &sq->swq[sw_sq_cons];
1578 if (swq->psn_search &&
1579 le32_to_cpu(swq->psn_search->flags_next_psn) & 0x80000000) {
1580 /* Unmark */
1581 swq->psn_search->flags_next_psn = cpu_to_le32
1582 (le32_to_cpu(swq->psn_search->flags_next_psn)
1583 & ~0x80000000);
1584 dev_dbg(&cq->hwq.pdev->dev,
1585 "FP: Process Req cq_cons=0x%x qp=0x%x sq cons sw=0x%x cqe=0x%x marked!\n",
1586 cq_cons, qp->id, sw_sq_cons, cqe_sq_cons);
1587 sq->condition = true;
1588 sq->send_phantom = true;
1589
1590 /* TODO: Only ARM if the previous SQE is ARMALL */
1591 bnxt_qplib_arm_cq(cq, DBR_DBR_TYPE_CQ_ARMALL);
1592
1593 rc = -EAGAIN;
1594 goto out;
1595 }
1596 if (sq->condition) {
1597 /* Peek at the completions */
1598 peek_raw_cq_cons = cq->hwq.cons;
1599 peek_sw_cq_cons = cq_cons;
1600 i = cq->hwq.max_elements;
1601 while (i--) {
1602 peek_sw_cq_cons = HWQ_CMP((peek_sw_cq_cons), &cq->hwq);
1603 peek_hw_cqe_ptr = (struct cq_base **)cq->hwq.pbl_ptr;
1604 peek_hwcqe = &peek_hw_cqe_ptr[CQE_PG(peek_sw_cq_cons)]
1605 [CQE_IDX(peek_sw_cq_cons)];
1606 /* If the next hwcqe is VALID */
1607 if (CQE_CMP_VALID(peek_hwcqe, peek_raw_cq_cons,
1608 cq->hwq.max_elements)) {
1609 /* If the next hwcqe is a REQ */
1610 if ((peek_hwcqe->cqe_type_toggle &
1611 CQ_BASE_CQE_TYPE_MASK) ==
1612 CQ_BASE_CQE_TYPE_REQ) {
1613 peek_req_hwcqe = (struct cq_req *)
1614 peek_hwcqe;
1615 peek_qp = (struct bnxt_qplib_qp *)
1616 ((unsigned long)
1617 le64_to_cpu
1618 (peek_req_hwcqe->qp_handle));
1619 peek_sq = &peek_qp->sq;
1620 peek_sq_cons_idx = HWQ_CMP(le16_to_cpu(
1621 peek_req_hwcqe->sq_cons_idx) - 1
1622 , &sq->hwq);
1623 /* If the hwcqe's sq's wr_id matches */
1624 if (peek_sq == sq &&
1625 sq->swq[peek_sq_cons_idx].wr_id ==
1626 BNXT_QPLIB_FENCE_WRID) {
1627 /*
1628 * Unbreak only if the phantom
1629 * comes back
1630 */
1631 dev_dbg(&cq->hwq.pdev->dev,
1632 "FP:Got Phantom CQE");
1633 sq->condition = false;
1634 sq->single = true;
1635 rc = 0;
1636 goto out;
1637 }
1638 }
1639 /* Valid but not the phantom, so keep looping */
1640 } else {
1641 /* Not valid yet, just exit and wait */
1642 rc = -EINVAL;
1643 goto out;
1644 }
1645 peek_sw_cq_cons++;
1646 peek_raw_cq_cons++;
1647 }
1648 dev_err(&cq->hwq.pdev->dev,
1649 "Should not have come here! cq_cons=0x%x qp=0x%x sq cons sw=0x%x hw=0x%x",
1650 cq_cons, qp->id, sw_sq_cons, cqe_sq_cons);
1651 rc = -EINVAL;
1652 }
1653out:
1654 return rc;
1655}
1656
1667static int bnxt_qplib_cq_process_req(struct bnxt_qplib_cq *cq, 1657static int bnxt_qplib_cq_process_req(struct bnxt_qplib_cq *cq,
1668 struct cq_req *hwcqe, 1658 struct cq_req *hwcqe,
1669 struct bnxt_qplib_cqe **pcqe, int *budget) 1659 struct bnxt_qplib_cqe **pcqe, int *budget,
1660 u32 cq_cons, struct bnxt_qplib_qp **lib_qp)
1670{ 1661{
1671 struct bnxt_qplib_qp *qp; 1662 struct bnxt_qplib_qp *qp;
1672 struct bnxt_qplib_q *sq; 1663 struct bnxt_qplib_q *sq;
1673 struct bnxt_qplib_cqe *cqe; 1664 struct bnxt_qplib_cqe *cqe;
1674 u32 sw_cons, cqe_cons; 1665 u32 sw_sq_cons, cqe_sq_cons;
1666 struct bnxt_qplib_swq *swq;
1675 int rc = 0; 1667 int rc = 0;
1676 1668
1677 qp = (struct bnxt_qplib_qp *)((unsigned long) 1669 qp = (struct bnxt_qplib_qp *)((unsigned long)
@@ -1683,13 +1675,13 @@ static int bnxt_qplib_cq_process_req(struct bnxt_qplib_cq *cq,
1683 } 1675 }
1684 sq = &qp->sq; 1676 sq = &qp->sq;
1685 1677
1686 cqe_cons = HWQ_CMP(le16_to_cpu(hwcqe->sq_cons_idx), &sq->hwq); 1678 cqe_sq_cons = HWQ_CMP(le16_to_cpu(hwcqe->sq_cons_idx), &sq->hwq);
1687 if (cqe_cons > sq->hwq.max_elements) { 1679 if (cqe_sq_cons > sq->hwq.max_elements) {
1688 dev_err(&cq->hwq.pdev->dev, 1680 dev_err(&cq->hwq.pdev->dev,
1689 "QPLIB: FP: CQ Process req reported "); 1681 "QPLIB: FP: CQ Process req reported ");
1690 dev_err(&cq->hwq.pdev->dev, 1682 dev_err(&cq->hwq.pdev->dev,
1691 "QPLIB: sq_cons_idx 0x%x which exceeded max 0x%x", 1683 "QPLIB: sq_cons_idx 0x%x which exceeded max 0x%x",
1692 cqe_cons, sq->hwq.max_elements); 1684 cqe_sq_cons, sq->hwq.max_elements);
1693 return -EINVAL; 1685 return -EINVAL;
1694 } 1686 }
1695 /* If we were in the middle of flushing the SQ, continue */ 1687 /* If we were in the middle of flushing the SQ, continue */
@@ -1698,53 +1690,74 @@ static int bnxt_qplib_cq_process_req(struct bnxt_qplib_cq *cq,
1698 1690
1699 /* Require to walk the sq's swq to fabricate CQEs for all previously 1691 /* Require to walk the sq's swq to fabricate CQEs for all previously
1700 * signaled SWQEs due to CQE aggregation from the current sq cons 1692 * signaled SWQEs due to CQE aggregation from the current sq cons
1701 * to the cqe_cons 1693 * to the cqe_sq_cons
1702 */ 1694 */
1703 cqe = *pcqe; 1695 cqe = *pcqe;
1704 while (*budget) { 1696 while (*budget) {
1705 sw_cons = HWQ_CMP(sq->hwq.cons, &sq->hwq); 1697 sw_sq_cons = HWQ_CMP(sq->hwq.cons, &sq->hwq);
1706 if (sw_cons == cqe_cons) 1698 if (sw_sq_cons == cqe_sq_cons)
1699 /* Done */
1707 break; 1700 break;
1701
1702 swq = &sq->swq[sw_sq_cons];
1708 memset(cqe, 0, sizeof(*cqe)); 1703 memset(cqe, 0, sizeof(*cqe));
1709 cqe->opcode = CQ_BASE_CQE_TYPE_REQ; 1704 cqe->opcode = CQ_BASE_CQE_TYPE_REQ;
1710 cqe->qp_handle = (u64)(unsigned long)qp; 1705 cqe->qp_handle = (u64)(unsigned long)qp;
1711 cqe->src_qp = qp->id; 1706 cqe->src_qp = qp->id;
1712 cqe->wr_id = sq->swq[sw_cons].wr_id; 1707 cqe->wr_id = swq->wr_id;
1713 cqe->type = sq->swq[sw_cons].type; 1708 if (cqe->wr_id == BNXT_QPLIB_FENCE_WRID)
1709 goto skip;
1710 cqe->type = swq->type;
1714 1711
1715 /* For the last CQE, check for status. For errors, regardless 1712 /* For the last CQE, check for status. For errors, regardless
1716 * of the request being signaled or not, it must complete with 1713 * of the request being signaled or not, it must complete with
1717 * the hwcqe error status 1714 * the hwcqe error status
1718 */ 1715 */
1719 if (HWQ_CMP((sw_cons + 1), &sq->hwq) == cqe_cons && 1716 if (HWQ_CMP((sw_sq_cons + 1), &sq->hwq) == cqe_sq_cons &&
1720 hwcqe->status != CQ_REQ_STATUS_OK) { 1717 hwcqe->status != CQ_REQ_STATUS_OK) {
1721 cqe->status = hwcqe->status; 1718 cqe->status = hwcqe->status;
1722 dev_err(&cq->hwq.pdev->dev, 1719 dev_err(&cq->hwq.pdev->dev,
1723 "QPLIB: FP: CQ Processed Req "); 1720 "QPLIB: FP: CQ Processed Req ");
1724 dev_err(&cq->hwq.pdev->dev, 1721 dev_err(&cq->hwq.pdev->dev,
1725 "QPLIB: wr_id[%d] = 0x%llx with status 0x%x", 1722 "QPLIB: wr_id[%d] = 0x%llx with status 0x%x",
1726 sw_cons, cqe->wr_id, cqe->status); 1723 sw_sq_cons, cqe->wr_id, cqe->status);
1727 cqe++; 1724 cqe++;
1728 (*budget)--; 1725 (*budget)--;
1729 sq->flush_in_progress = true; 1726 sq->flush_in_progress = true;
1730 /* Must block new posting of SQ and RQ */ 1727 /* Must block new posting of SQ and RQ */
1731 qp->state = CMDQ_MODIFY_QP_NEW_STATE_ERR; 1728 qp->state = CMDQ_MODIFY_QP_NEW_STATE_ERR;
1729 sq->condition = false;
1730 sq->single = false;
1732 } else { 1731 } else {
1733 if (sq->swq[sw_cons].flags & 1732 if (swq->flags & SQ_SEND_FLAGS_SIGNAL_COMP) {
1734 SQ_SEND_FLAGS_SIGNAL_COMP) { 1733 /* Before we complete, do WA 9060 */
1734 if (do_wa9060(qp, cq, cq_cons, sw_sq_cons,
1735 cqe_sq_cons)) {
1736 *lib_qp = qp;
1737 goto out;
1738 }
1735 cqe->status = CQ_REQ_STATUS_OK; 1739 cqe->status = CQ_REQ_STATUS_OK;
1736 cqe++; 1740 cqe++;
1737 (*budget)--; 1741 (*budget)--;
1738 } 1742 }
1739 } 1743 }
1744skip:
1740 sq->hwq.cons++; 1745 sq->hwq.cons++;
1746 if (sq->single)
1747 break;
1741 } 1748 }
1749out:
1742 *pcqe = cqe; 1750 *pcqe = cqe;
1743 if (!*budget && HWQ_CMP(sq->hwq.cons, &sq->hwq) != cqe_cons) { 1751 if (HWQ_CMP(sq->hwq.cons, &sq->hwq) != cqe_sq_cons) {
1744 /* Out of budget */ 1752 /* Out of budget */
1745 rc = -EAGAIN; 1753 rc = -EAGAIN;
1746 goto done; 1754 goto done;
1747 } 1755 }
1756 /*
1757 * Back to normal completion mode only after it has completed all of
1758 * the WC for this CQE
1759 */
1760 sq->single = false;
1748 if (!sq->flush_in_progress) 1761 if (!sq->flush_in_progress)
1749 goto done; 1762 goto done;
1750flush: 1763flush:
@@ -2074,7 +2087,7 @@ static int bnxt_qplib_cq_process_cutoff(struct bnxt_qplib_cq *cq,
2074} 2087}
2075 2088
2076int bnxt_qplib_poll_cq(struct bnxt_qplib_cq *cq, struct bnxt_qplib_cqe *cqe, 2089int bnxt_qplib_poll_cq(struct bnxt_qplib_cq *cq, struct bnxt_qplib_cqe *cqe,
2077 int num_cqes) 2090 int num_cqes, struct bnxt_qplib_qp **lib_qp)
2078{ 2091{
2079 struct cq_base *hw_cqe, **hw_cqe_ptr; 2092 struct cq_base *hw_cqe, **hw_cqe_ptr;
2080 unsigned long flags; 2093 unsigned long flags;
@@ -2099,7 +2112,8 @@ int bnxt_qplib_poll_cq(struct bnxt_qplib_cq *cq, struct bnxt_qplib_cqe *cqe,
2099 case CQ_BASE_CQE_TYPE_REQ: 2112 case CQ_BASE_CQE_TYPE_REQ:
2100 rc = bnxt_qplib_cq_process_req(cq, 2113 rc = bnxt_qplib_cq_process_req(cq,
2101 (struct cq_req *)hw_cqe, 2114 (struct cq_req *)hw_cqe,
2102 &cqe, &budget); 2115 &cqe, &budget,
2116 sw_cons, lib_qp);
2103 break; 2117 break;
2104 case CQ_BASE_CQE_TYPE_RES_RC: 2118 case CQ_BASE_CQE_TYPE_RES_RC:
2105 rc = bnxt_qplib_cq_process_res_rc(cq, 2119 rc = bnxt_qplib_cq_process_res_rc(cq,
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.h b/drivers/infiniband/hw/bnxt_re/qplib_fp.h
index f0150f8da1e3..36b7b7db0e3f 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.h
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.h
@@ -88,6 +88,7 @@ struct bnxt_qplib_swq {
88 88
89struct bnxt_qplib_swqe { 89struct bnxt_qplib_swqe {
90 /* General */ 90 /* General */
91#define BNXT_QPLIB_FENCE_WRID 0x46454E43 /* "FENC" */
91 u64 wr_id; 92 u64 wr_id;
92 u8 reqs_type; 93 u8 reqs_type;
93 u8 type; 94 u8 type;
@@ -216,9 +217,16 @@ struct bnxt_qplib_q {
216 struct scatterlist *sglist; 217 struct scatterlist *sglist;
217 u32 nmap; 218 u32 nmap;
218 u32 max_wqe; 219 u32 max_wqe;
220 u16 q_full_delta;
219 u16 max_sge; 221 u16 max_sge;
220 u32 psn; 222 u32 psn;
221 bool flush_in_progress; 223 bool flush_in_progress;
224 bool condition;
225 bool single;
226 bool send_phantom;
227 u32 phantom_wqe_cnt;
228 u32 phantom_cqe_cnt;
229 u32 next_cq_cons;
222}; 230};
223 231
224struct bnxt_qplib_qp { 232struct bnxt_qplib_qp {
@@ -242,6 +250,7 @@ struct bnxt_qplib_qp {
242 u8 timeout; 250 u8 timeout;
243 u8 retry_cnt; 251 u8 retry_cnt;
244 u8 rnr_retry; 252 u8 rnr_retry;
253 u64 wqe_cnt;
245 u32 min_rnr_timer; 254 u32 min_rnr_timer;
246 u32 max_rd_atomic; 255 u32 max_rd_atomic;
247 u32 max_dest_rd_atomic; 256 u32 max_dest_rd_atomic;
@@ -301,6 +310,13 @@ struct bnxt_qplib_qp {
301 (!!((hdr)->cqe_type_toggle & CQ_BASE_TOGGLE) == \ 310 (!!((hdr)->cqe_type_toggle & CQ_BASE_TOGGLE) == \
302 !((raw_cons) & (cp_bit))) 311 !((raw_cons) & (cp_bit)))
303 312
313static inline bool bnxt_qplib_queue_full(struct bnxt_qplib_q *qplib_q)
314{
315 return HWQ_CMP((qplib_q->hwq.prod + qplib_q->q_full_delta),
316 &qplib_q->hwq) == HWQ_CMP(qplib_q->hwq.cons,
317 &qplib_q->hwq);
318}
319
304struct bnxt_qplib_cqe { 320struct bnxt_qplib_cqe {
305 u8 status; 321 u8 status;
306 u8 type; 322 u8 type;
@@ -432,7 +448,7 @@ int bnxt_qplib_post_recv(struct bnxt_qplib_qp *qp,
432int bnxt_qplib_create_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq); 448int bnxt_qplib_create_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq);
433int bnxt_qplib_destroy_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq); 449int bnxt_qplib_destroy_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq);
434int bnxt_qplib_poll_cq(struct bnxt_qplib_cq *cq, struct bnxt_qplib_cqe *cqe, 450int bnxt_qplib_poll_cq(struct bnxt_qplib_cq *cq, struct bnxt_qplib_cqe *cqe,
435 int num); 451 int num, struct bnxt_qplib_qp **qp);
436void bnxt_qplib_req_notify_cq(struct bnxt_qplib_cq *cq, u32 arm_type); 452void bnxt_qplib_req_notify_cq(struct bnxt_qplib_cq *cq, u32 arm_type);
437void bnxt_qplib_free_nq(struct bnxt_qplib_nq *nq); 453void bnxt_qplib_free_nq(struct bnxt_qplib_nq *nq);
438int bnxt_qplib_alloc_nq(struct pci_dev *pdev, struct bnxt_qplib_nq *nq); 454int bnxt_qplib_alloc_nq(struct pci_dev *pdev, struct bnxt_qplib_nq *nq);
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
index 23fb7260662b..16e42754dbec 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
@@ -39,72 +39,55 @@
39#include <linux/spinlock.h> 39#include <linux/spinlock.h>
40#include <linux/pci.h> 40#include <linux/pci.h>
41#include <linux/prefetch.h> 41#include <linux/prefetch.h>
42#include <linux/delay.h>
43
42#include "roce_hsi.h" 44#include "roce_hsi.h"
43#include "qplib_res.h" 45#include "qplib_res.h"
44#include "qplib_rcfw.h" 46#include "qplib_rcfw.h"
45static void bnxt_qplib_service_creq(unsigned long data); 47static void bnxt_qplib_service_creq(unsigned long data);
46 48
47/* Hardware communication channel */ 49/* Hardware communication channel */
48int bnxt_qplib_rcfw_wait_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie) 50static int __wait_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie)
49{ 51{
50 u16 cbit; 52 u16 cbit;
51 int rc; 53 int rc;
52 54
53 cookie &= RCFW_MAX_COOKIE_VALUE;
54 cbit = cookie % RCFW_MAX_OUTSTANDING_CMD; 55 cbit = cookie % RCFW_MAX_OUTSTANDING_CMD;
55 if (!test_bit(cbit, rcfw->cmdq_bitmap))
56 dev_warn(&rcfw->pdev->dev,
57 "QPLIB: CMD bit %d for cookie 0x%x is not set?",
58 cbit, cookie);
59
60 rc = wait_event_timeout(rcfw->waitq, 56 rc = wait_event_timeout(rcfw->waitq,
61 !test_bit(cbit, rcfw->cmdq_bitmap), 57 !test_bit(cbit, rcfw->cmdq_bitmap),
62 msecs_to_jiffies(RCFW_CMD_WAIT_TIME_MS)); 58 msecs_to_jiffies(RCFW_CMD_WAIT_TIME_MS));
63 if (!rc) { 59 return rc ? 0 : -ETIMEDOUT;
64 dev_warn(&rcfw->pdev->dev,
65 "QPLIB: Bono Error: timeout %d msec, msg {0x%x}\n",
66 RCFW_CMD_WAIT_TIME_MS, cookie);
67 }
68
69 return rc;
70}; 60};
71 61
72int bnxt_qplib_rcfw_block_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie) 62static int __block_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie)
73{ 63{
74 u32 count = -1; 64 u32 count = RCFW_BLOCKED_CMD_WAIT_COUNT;
75 u16 cbit; 65 u16 cbit;
76 66
77 cookie &= RCFW_MAX_COOKIE_VALUE;
78 cbit = cookie % RCFW_MAX_OUTSTANDING_CMD; 67 cbit = cookie % RCFW_MAX_OUTSTANDING_CMD;
79 if (!test_bit(cbit, rcfw->cmdq_bitmap)) 68 if (!test_bit(cbit, rcfw->cmdq_bitmap))
80 goto done; 69 goto done;
81 do { 70 do {
71 mdelay(1); /* 1m sec */
82 bnxt_qplib_service_creq((unsigned long)rcfw); 72 bnxt_qplib_service_creq((unsigned long)rcfw);
83 } while (test_bit(cbit, rcfw->cmdq_bitmap) && --count); 73 } while (test_bit(cbit, rcfw->cmdq_bitmap) && --count);
84done: 74done:
85 return count; 75 return count ? 0 : -ETIMEDOUT;
86}; 76};
87 77
88void *bnxt_qplib_rcfw_send_message(struct bnxt_qplib_rcfw *rcfw, 78static int __send_message(struct bnxt_qplib_rcfw *rcfw, struct cmdq_base *req,
89 struct cmdq_base *req, void **crsbe, 79 struct creq_base *resp, void *sb, u8 is_block)
90 u8 is_block)
91{ 80{
92 struct bnxt_qplib_crsq *crsq = &rcfw->crsq;
93 struct bnxt_qplib_cmdqe *cmdqe, **cmdq_ptr; 81 struct bnxt_qplib_cmdqe *cmdqe, **cmdq_ptr;
94 struct bnxt_qplib_hwq *cmdq = &rcfw->cmdq; 82 struct bnxt_qplib_hwq *cmdq = &rcfw->cmdq;
95 struct bnxt_qplib_hwq *crsb = &rcfw->crsb; 83 struct bnxt_qplib_crsq *crsqe;
96 struct bnxt_qplib_crsqe *crsqe = NULL;
97 struct bnxt_qplib_crsbe **crsb_ptr;
98 u32 sw_prod, cmdq_prod; 84 u32 sw_prod, cmdq_prod;
99 u8 retry_cnt = 0xFF;
100 dma_addr_t dma_addr;
101 unsigned long flags; 85 unsigned long flags;
102 u32 size, opcode; 86 u32 size, opcode;
103 u16 cookie, cbit; 87 u16 cookie, cbit;
104 int pg, idx; 88 int pg, idx;
105 u8 *preq; 89 u8 *preq;
106 90
107retry:
108 opcode = req->opcode; 91 opcode = req->opcode;
109 if (!test_bit(FIRMWARE_INITIALIZED_FLAG, &rcfw->flags) && 92 if (!test_bit(FIRMWARE_INITIALIZED_FLAG, &rcfw->flags) &&
110 (opcode != CMDQ_BASE_OPCODE_QUERY_FUNC && 93 (opcode != CMDQ_BASE_OPCODE_QUERY_FUNC &&
@@ -112,63 +95,50 @@ retry:
112 dev_err(&rcfw->pdev->dev, 95 dev_err(&rcfw->pdev->dev,
113 "QPLIB: RCFW not initialized, reject opcode 0x%x", 96 "QPLIB: RCFW not initialized, reject opcode 0x%x",
114 opcode); 97 opcode);
115 return NULL; 98 return -EINVAL;
116 } 99 }
117 100
118 if (test_bit(FIRMWARE_INITIALIZED_FLAG, &rcfw->flags) && 101 if (test_bit(FIRMWARE_INITIALIZED_FLAG, &rcfw->flags) &&
119 opcode == CMDQ_BASE_OPCODE_INITIALIZE_FW) { 102 opcode == CMDQ_BASE_OPCODE_INITIALIZE_FW) {
120 dev_err(&rcfw->pdev->dev, "QPLIB: RCFW already initialized!"); 103 dev_err(&rcfw->pdev->dev, "QPLIB: RCFW already initialized!");
121 return NULL; 104 return -EINVAL;
122 } 105 }
123 106
124 /* Cmdq are in 16-byte units, each request can consume 1 or more 107 /* Cmdq are in 16-byte units, each request can consume 1 or more
125 * cmdqe 108 * cmdqe
126 */ 109 */
127 spin_lock_irqsave(&cmdq->lock, flags); 110 spin_lock_irqsave(&cmdq->lock, flags);
128 if (req->cmd_size > cmdq->max_elements - 111 if (req->cmd_size >= HWQ_FREE_SLOTS(cmdq)) {
129 ((HWQ_CMP(cmdq->prod, cmdq) - HWQ_CMP(cmdq->cons, cmdq)) &
130 (cmdq->max_elements - 1))) {
131 dev_err(&rcfw->pdev->dev, "QPLIB: RCFW: CMDQ is full!"); 112 dev_err(&rcfw->pdev->dev, "QPLIB: RCFW: CMDQ is full!");
132 spin_unlock_irqrestore(&cmdq->lock, flags); 113 spin_unlock_irqrestore(&cmdq->lock, flags);
133 114 return -EAGAIN;
134 if (!retry_cnt--)
135 return NULL;
136 goto retry;
137 } 115 }
138 116
139 retry_cnt = 0xFF;
140 117
141 cookie = atomic_inc_return(&rcfw->seq_num) & RCFW_MAX_COOKIE_VALUE; 118 cookie = rcfw->seq_num & RCFW_MAX_COOKIE_VALUE;
142 cbit = cookie % RCFW_MAX_OUTSTANDING_CMD; 119 cbit = cookie % RCFW_MAX_OUTSTANDING_CMD;
143 if (is_block) 120 if (is_block)
144 cookie |= RCFW_CMD_IS_BLOCKING; 121 cookie |= RCFW_CMD_IS_BLOCKING;
122
123 set_bit(cbit, rcfw->cmdq_bitmap);
145 req->cookie = cpu_to_le16(cookie); 124 req->cookie = cpu_to_le16(cookie);
146 if (test_and_set_bit(cbit, rcfw->cmdq_bitmap)) { 125 crsqe = &rcfw->crsqe_tbl[cbit];
147 dev_err(&rcfw->pdev->dev, 126 if (crsqe->resp) {
148 "QPLIB: RCFW MAX outstanding cmd reached!");
149 atomic_dec(&rcfw->seq_num);
150 spin_unlock_irqrestore(&cmdq->lock, flags); 127 spin_unlock_irqrestore(&cmdq->lock, flags);
151 128 return -EBUSY;
152 if (!retry_cnt--)
153 return NULL;
154 goto retry;
155 } 129 }
156 /* Reserve a resp buffer slot if requested */ 130 memset(resp, 0, sizeof(*resp));
157 if (req->resp_size && crsbe) { 131 crsqe->resp = (struct creq_qp_event *)resp;
158 spin_lock(&crsb->lock); 132 crsqe->resp->cookie = req->cookie;
159 sw_prod = HWQ_CMP(crsb->prod, crsb); 133 crsqe->req_size = req->cmd_size;
160 crsb_ptr = (struct bnxt_qplib_crsbe **)crsb->pbl_ptr; 134 if (req->resp_size && sb) {
161 *crsbe = (void *)&crsb_ptr[get_crsb_pg(sw_prod)] 135 struct bnxt_qplib_rcfw_sbuf *sbuf = sb;
162 [get_crsb_idx(sw_prod)]; 136
163 bnxt_qplib_crsb_dma_next(crsb->pbl_dma_ptr, sw_prod, &dma_addr); 137 req->resp_addr = cpu_to_le64(sbuf->dma_addr);
164 req->resp_addr = cpu_to_le64(dma_addr); 138 req->resp_size = (sbuf->size + BNXT_QPLIB_CMDQE_UNITS - 1) /
165 crsb->prod++; 139 BNXT_QPLIB_CMDQE_UNITS;
166 spin_unlock(&crsb->lock);
167
168 req->resp_size = (sizeof(struct bnxt_qplib_crsbe) +
169 BNXT_QPLIB_CMDQE_UNITS - 1) /
170 BNXT_QPLIB_CMDQE_UNITS;
171 } 140 }
141
172 cmdq_ptr = (struct bnxt_qplib_cmdqe **)cmdq->pbl_ptr; 142 cmdq_ptr = (struct bnxt_qplib_cmdqe **)cmdq->pbl_ptr;
173 preq = (u8 *)req; 143 preq = (u8 *)req;
174 size = req->cmd_size * BNXT_QPLIB_CMDQE_UNITS; 144 size = req->cmd_size * BNXT_QPLIB_CMDQE_UNITS;
@@ -190,23 +160,24 @@ retry:
190 preq += min_t(u32, size, sizeof(*cmdqe)); 160 preq += min_t(u32, size, sizeof(*cmdqe));
191 size -= min_t(u32, size, sizeof(*cmdqe)); 161 size -= min_t(u32, size, sizeof(*cmdqe));
192 cmdq->prod++; 162 cmdq->prod++;
163 rcfw->seq_num++;
193 } while (size > 0); 164 } while (size > 0);
194 165
166 rcfw->seq_num++;
167
195 cmdq_prod = cmdq->prod; 168 cmdq_prod = cmdq->prod;
196 if (rcfw->flags & FIRMWARE_FIRST_FLAG) { 169 if (rcfw->flags & FIRMWARE_FIRST_FLAG) {
197 /* The very first doorbell write is required to set this flag 170 /* The very first doorbell write
198 * which prompts the FW to reset its internal pointers 171 * is required to set this flag
172 * which prompts the FW to reset
173 * its internal pointers
199 */ 174 */
200 cmdq_prod |= FIRMWARE_FIRST_FLAG; 175 cmdq_prod |= FIRMWARE_FIRST_FLAG;
201 rcfw->flags &= ~FIRMWARE_FIRST_FLAG; 176 rcfw->flags &= ~FIRMWARE_FIRST_FLAG;
202 } 177 }
203 sw_prod = HWQ_CMP(crsq->prod, crsq);
204 crsqe = &crsq->crsq[sw_prod];
205 memset(crsqe, 0, sizeof(*crsqe));
206 crsq->prod++;
207 crsqe->req_size = req->cmd_size;
208 178
209 /* ring CMDQ DB */ 179 /* ring CMDQ DB */
180 wmb();
210 writel(cmdq_prod, rcfw->cmdq_bar_reg_iomem + 181 writel(cmdq_prod, rcfw->cmdq_bar_reg_iomem +
211 rcfw->cmdq_bar_reg_prod_off); 182 rcfw->cmdq_bar_reg_prod_off);
212 writel(RCFW_CMDQ_TRIG_VAL, rcfw->cmdq_bar_reg_iomem + 183 writel(RCFW_CMDQ_TRIG_VAL, rcfw->cmdq_bar_reg_iomem +
@@ -214,9 +185,56 @@ retry:
214done: 185done:
215 spin_unlock_irqrestore(&cmdq->lock, flags); 186 spin_unlock_irqrestore(&cmdq->lock, flags);
216 /* Return the CREQ response pointer */ 187 /* Return the CREQ response pointer */
217 return crsqe ? &crsqe->qp_event : NULL; 188 return 0;
218} 189}
219 190
191int bnxt_qplib_rcfw_send_message(struct bnxt_qplib_rcfw *rcfw,
192 struct cmdq_base *req,
193 struct creq_base *resp,
194 void *sb, u8 is_block)
195{
196 struct creq_qp_event *evnt = (struct creq_qp_event *)resp;
197 u16 cookie;
198 u8 opcode, retry_cnt = 0xFF;
199 int rc = 0;
200
201 do {
202 opcode = req->opcode;
203 rc = __send_message(rcfw, req, resp, sb, is_block);
204 cookie = le16_to_cpu(req->cookie) & RCFW_MAX_COOKIE_VALUE;
205 if (!rc)
206 break;
207
208 if (!retry_cnt || (rc != -EAGAIN && rc != -EBUSY)) {
209 /* send failed */
210 dev_err(&rcfw->pdev->dev, "QPLIB: cmdq[%#x]=%#x send failed",
211 cookie, opcode);
212 return rc;
213 }
214 is_block ? mdelay(1) : usleep_range(500, 1000);
215
216 } while (retry_cnt--);
217
218 if (is_block)
219 rc = __block_for_resp(rcfw, cookie);
220 else
221 rc = __wait_for_resp(rcfw, cookie);
222 if (rc) {
223 /* timed out */
224 dev_err(&rcfw->pdev->dev, "QPLIB: cmdq[%#x]=%#x timedout (%d)msec",
225 cookie, opcode, RCFW_CMD_WAIT_TIME_MS);
226 return rc;
227 }
228
229 if (evnt->status) {
230 /* failed with status */
231 dev_err(&rcfw->pdev->dev, "QPLIB: cmdq[%#x]=%#x status %#x",
232 cookie, opcode, evnt->status);
233 rc = -EFAULT;
234 }
235
236 return rc;
237}
220/* Completions */ 238/* Completions */
221static int bnxt_qplib_process_func_event(struct bnxt_qplib_rcfw *rcfw, 239static int bnxt_qplib_process_func_event(struct bnxt_qplib_rcfw *rcfw,
222 struct creq_func_event *func_event) 240 struct creq_func_event *func_event)
@@ -260,12 +278,12 @@ static int bnxt_qplib_process_func_event(struct bnxt_qplib_rcfw *rcfw,
260static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw, 278static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw,
261 struct creq_qp_event *qp_event) 279 struct creq_qp_event *qp_event)
262{ 280{
263 struct bnxt_qplib_crsq *crsq = &rcfw->crsq;
264 struct bnxt_qplib_hwq *cmdq = &rcfw->cmdq; 281 struct bnxt_qplib_hwq *cmdq = &rcfw->cmdq;
265 struct bnxt_qplib_crsqe *crsqe; 282 struct bnxt_qplib_crsq *crsqe;
266 u16 cbit, cookie, blocked = 0;
267 unsigned long flags; 283 unsigned long flags;
268 u32 sw_cons; 284 u16 cbit, blocked = 0;
285 u16 cookie;
286 __le16 mcookie;
269 287
270 switch (qp_event->event) { 288 switch (qp_event->event) {
271 case CREQ_QP_EVENT_EVENT_QP_ERROR_NOTIFICATION: 289 case CREQ_QP_EVENT_EVENT_QP_ERROR_NOTIFICATION:
@@ -275,24 +293,31 @@ static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw,
275 default: 293 default:
276 /* Command Response */ 294 /* Command Response */
277 spin_lock_irqsave(&cmdq->lock, flags); 295 spin_lock_irqsave(&cmdq->lock, flags);
278 sw_cons = HWQ_CMP(crsq->cons, crsq); 296 cookie = le16_to_cpu(qp_event->cookie);
279 crsqe = &crsq->crsq[sw_cons]; 297 mcookie = qp_event->cookie;
280 crsq->cons++;
281 memcpy(&crsqe->qp_event, qp_event, sizeof(crsqe->qp_event));
282
283 cookie = le16_to_cpu(crsqe->qp_event.cookie);
284 blocked = cookie & RCFW_CMD_IS_BLOCKING; 298 blocked = cookie & RCFW_CMD_IS_BLOCKING;
285 cookie &= RCFW_MAX_COOKIE_VALUE; 299 cookie &= RCFW_MAX_COOKIE_VALUE;
286 cbit = cookie % RCFW_MAX_OUTSTANDING_CMD; 300 cbit = cookie % RCFW_MAX_OUTSTANDING_CMD;
301 crsqe = &rcfw->crsqe_tbl[cbit];
302 if (crsqe->resp &&
303 crsqe->resp->cookie == mcookie) {
304 memcpy(crsqe->resp, qp_event, sizeof(*qp_event));
305 crsqe->resp = NULL;
306 } else {
307 dev_err(&rcfw->pdev->dev,
308 "QPLIB: CMD %s resp->cookie = %#x, evnt->cookie = %#x",
309 crsqe->resp ? "mismatch" : "collision",
310 crsqe->resp ? crsqe->resp->cookie : 0, mcookie);
311 }
287 if (!test_and_clear_bit(cbit, rcfw->cmdq_bitmap)) 312 if (!test_and_clear_bit(cbit, rcfw->cmdq_bitmap))
288 dev_warn(&rcfw->pdev->dev, 313 dev_warn(&rcfw->pdev->dev,
289 "QPLIB: CMD bit %d was not requested", cbit); 314 "QPLIB: CMD bit %d was not requested", cbit);
290
291 cmdq->cons += crsqe->req_size; 315 cmdq->cons += crsqe->req_size;
292 spin_unlock_irqrestore(&cmdq->lock, flags); 316 crsqe->req_size = 0;
317
293 if (!blocked) 318 if (!blocked)
294 wake_up(&rcfw->waitq); 319 wake_up(&rcfw->waitq);
295 break; 320 spin_unlock_irqrestore(&cmdq->lock, flags);
296 } 321 }
297 return 0; 322 return 0;
298} 323}
@@ -305,12 +330,12 @@ static void bnxt_qplib_service_creq(unsigned long data)
305 struct creq_base *creqe, **creq_ptr; 330 struct creq_base *creqe, **creq_ptr;
306 u32 sw_cons, raw_cons; 331 u32 sw_cons, raw_cons;
307 unsigned long flags; 332 unsigned long flags;
308 u32 type; 333 u32 type, budget = CREQ_ENTRY_POLL_BUDGET;
309 334
310 /* Service the CREQ until empty */ 335 /* Service the CREQ until budget is over */
311 spin_lock_irqsave(&creq->lock, flags); 336 spin_lock_irqsave(&creq->lock, flags);
312 raw_cons = creq->cons; 337 raw_cons = creq->cons;
313 while (1) { 338 while (budget > 0) {
314 sw_cons = HWQ_CMP(raw_cons, creq); 339 sw_cons = HWQ_CMP(raw_cons, creq);
315 creq_ptr = (struct creq_base **)creq->pbl_ptr; 340 creq_ptr = (struct creq_base **)creq->pbl_ptr;
316 creqe = &creq_ptr[get_creq_pg(sw_cons)][get_creq_idx(sw_cons)]; 341 creqe = &creq_ptr[get_creq_pg(sw_cons)][get_creq_idx(sw_cons)];
@@ -320,15 +345,9 @@ static void bnxt_qplib_service_creq(unsigned long data)
320 type = creqe->type & CREQ_BASE_TYPE_MASK; 345 type = creqe->type & CREQ_BASE_TYPE_MASK;
321 switch (type) { 346 switch (type) {
322 case CREQ_BASE_TYPE_QP_EVENT: 347 case CREQ_BASE_TYPE_QP_EVENT:
323 if (!bnxt_qplib_process_qp_event 348 bnxt_qplib_process_qp_event
324 (rcfw, (struct creq_qp_event *)creqe)) 349 (rcfw, (struct creq_qp_event *)creqe);
325 rcfw->creq_qp_event_processed++; 350 rcfw->creq_qp_event_processed++;
326 else {
327 dev_warn(&rcfw->pdev->dev, "QPLIB: crsqe with");
328 dev_warn(&rcfw->pdev->dev,
329 "QPLIB: type = 0x%x not handled",
330 type);
331 }
332 break; 351 break;
333 case CREQ_BASE_TYPE_FUNC_EVENT: 352 case CREQ_BASE_TYPE_FUNC_EVENT:
334 if (!bnxt_qplib_process_func_event 353 if (!bnxt_qplib_process_func_event
@@ -346,7 +365,9 @@ static void bnxt_qplib_service_creq(unsigned long data)
346 break; 365 break;
347 } 366 }
348 raw_cons++; 367 raw_cons++;
368 budget--;
349 } 369 }
370
350 if (creq->cons != raw_cons) { 371 if (creq->cons != raw_cons) {
351 creq->cons = raw_cons; 372 creq->cons = raw_cons;
352 CREQ_DB_REARM(rcfw->creq_bar_reg_iomem, raw_cons, 373 CREQ_DB_REARM(rcfw->creq_bar_reg_iomem, raw_cons,
@@ -375,23 +396,16 @@ static irqreturn_t bnxt_qplib_creq_irq(int irq, void *dev_instance)
375/* RCFW */ 396/* RCFW */
376int bnxt_qplib_deinit_rcfw(struct bnxt_qplib_rcfw *rcfw) 397int bnxt_qplib_deinit_rcfw(struct bnxt_qplib_rcfw *rcfw)
377{ 398{
378 struct creq_deinitialize_fw_resp *resp;
379 struct cmdq_deinitialize_fw req; 399 struct cmdq_deinitialize_fw req;
400 struct creq_deinitialize_fw_resp resp;
380 u16 cmd_flags = 0; 401 u16 cmd_flags = 0;
402 int rc;
381 403
382 RCFW_CMD_PREP(req, DEINITIALIZE_FW, cmd_flags); 404 RCFW_CMD_PREP(req, DEINITIALIZE_FW, cmd_flags);
383 resp = (struct creq_deinitialize_fw_resp *) 405 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void *)&resp,
384 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 406 NULL, 0);
385 NULL, 0); 407 if (rc)
386 if (!resp) 408 return rc;
387 return -EINVAL;
388
389 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie)))
390 return -ETIMEDOUT;
391
392 if (resp->status ||
393 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie))
394 return -EFAULT;
395 409
396 clear_bit(FIRMWARE_INITIALIZED_FLAG, &rcfw->flags); 410 clear_bit(FIRMWARE_INITIALIZED_FLAG, &rcfw->flags);
397 return 0; 411 return 0;
@@ -417,9 +431,10 @@ static int __get_pbl_pg_idx(struct bnxt_qplib_pbl *pbl)
417int bnxt_qplib_init_rcfw(struct bnxt_qplib_rcfw *rcfw, 431int bnxt_qplib_init_rcfw(struct bnxt_qplib_rcfw *rcfw,
418 struct bnxt_qplib_ctx *ctx, int is_virtfn) 432 struct bnxt_qplib_ctx *ctx, int is_virtfn)
419{ 433{
420 struct creq_initialize_fw_resp *resp;
421 struct cmdq_initialize_fw req; 434 struct cmdq_initialize_fw req;
435 struct creq_initialize_fw_resp resp;
422 u16 cmd_flags = 0, level; 436 u16 cmd_flags = 0, level;
437 int rc;
423 438
424 RCFW_CMD_PREP(req, INITIALIZE_FW, cmd_flags); 439 RCFW_CMD_PREP(req, INITIALIZE_FW, cmd_flags);
425 440
@@ -482,37 +497,19 @@ int bnxt_qplib_init_rcfw(struct bnxt_qplib_rcfw *rcfw,
482 497
483skip_ctx_setup: 498skip_ctx_setup:
484 req.stat_ctx_id = cpu_to_le32(ctx->stats.fw_id); 499 req.stat_ctx_id = cpu_to_le32(ctx->stats.fw_id);
485 resp = (struct creq_initialize_fw_resp *) 500 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void *)&resp,
486 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 501 NULL, 0);
487 NULL, 0); 502 if (rc)
488 if (!resp) { 503 return rc;
489 dev_err(&rcfw->pdev->dev,
490 "QPLIB: RCFW: INITIALIZE_FW send failed");
491 return -EINVAL;
492 }
493 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
494 /* Cmd timed out */
495 dev_err(&rcfw->pdev->dev,
496 "QPLIB: RCFW: INITIALIZE_FW timed out");
497 return -ETIMEDOUT;
498 }
499 if (resp->status ||
500 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
501 dev_err(&rcfw->pdev->dev,
502 "QPLIB: RCFW: INITIALIZE_FW failed");
503 return -EINVAL;
504 }
505 set_bit(FIRMWARE_INITIALIZED_FLAG, &rcfw->flags); 504 set_bit(FIRMWARE_INITIALIZED_FLAG, &rcfw->flags);
506 return 0; 505 return 0;
507} 506}
508 507
509void bnxt_qplib_free_rcfw_channel(struct bnxt_qplib_rcfw *rcfw) 508void bnxt_qplib_free_rcfw_channel(struct bnxt_qplib_rcfw *rcfw)
510{ 509{
511 bnxt_qplib_free_hwq(rcfw->pdev, &rcfw->crsb); 510 kfree(rcfw->crsqe_tbl);
512 kfree(rcfw->crsq.crsq);
513 bnxt_qplib_free_hwq(rcfw->pdev, &rcfw->cmdq); 511 bnxt_qplib_free_hwq(rcfw->pdev, &rcfw->cmdq);
514 bnxt_qplib_free_hwq(rcfw->pdev, &rcfw->creq); 512 bnxt_qplib_free_hwq(rcfw->pdev, &rcfw->creq);
515
516 rcfw->pdev = NULL; 513 rcfw->pdev = NULL;
517} 514}
518 515
@@ -539,21 +536,11 @@ int bnxt_qplib_alloc_rcfw_channel(struct pci_dev *pdev,
539 goto fail; 536 goto fail;
540 } 537 }
541 538
542 rcfw->crsq.max_elements = rcfw->cmdq.max_elements; 539 rcfw->crsqe_tbl = kcalloc(rcfw->cmdq.max_elements,
543 rcfw->crsq.crsq = kcalloc(rcfw->crsq.max_elements, 540 sizeof(*rcfw->crsqe_tbl), GFP_KERNEL);
544 sizeof(*rcfw->crsq.crsq), GFP_KERNEL); 541 if (!rcfw->crsqe_tbl)
545 if (!rcfw->crsq.crsq)
546 goto fail; 542 goto fail;
547 543
548 rcfw->crsb.max_elements = BNXT_QPLIB_CRSBE_MAX_CNT;
549 if (bnxt_qplib_alloc_init_hwq(rcfw->pdev, &rcfw->crsb, NULL, 0,
550 &rcfw->crsb.max_elements,
551 BNXT_QPLIB_CRSBE_UNITS, 0, PAGE_SIZE,
552 HWQ_TYPE_CTX)) {
553 dev_err(&rcfw->pdev->dev,
554 "QPLIB: HW channel CRSB allocation failed");
555 goto fail;
556 }
557 return 0; 544 return 0;
558 545
559fail: 546fail:
@@ -606,7 +593,7 @@ int bnxt_qplib_enable_rcfw_channel(struct pci_dev *pdev,
606 int rc; 593 int rc;
607 594
608 /* General */ 595 /* General */
609 atomic_set(&rcfw->seq_num, 0); 596 rcfw->seq_num = 0;
610 rcfw->flags = FIRMWARE_FIRST_FLAG; 597 rcfw->flags = FIRMWARE_FIRST_FLAG;
611 bmap_size = BITS_TO_LONGS(RCFW_MAX_OUTSTANDING_CMD * 598 bmap_size = BITS_TO_LONGS(RCFW_MAX_OUTSTANDING_CMD *
612 sizeof(unsigned long)); 599 sizeof(unsigned long));
@@ -636,10 +623,6 @@ int bnxt_qplib_enable_rcfw_channel(struct pci_dev *pdev,
636 623
637 rcfw->cmdq_bar_reg_trig_off = RCFW_COMM_TRIG_OFFSET; 624 rcfw->cmdq_bar_reg_trig_off = RCFW_COMM_TRIG_OFFSET;
638 625
639 /* CRSQ */
640 rcfw->crsq.prod = 0;
641 rcfw->crsq.cons = 0;
642
643 /* CREQ */ 626 /* CREQ */
644 rcfw->creq_bar_reg = RCFW_COMM_CONS_PCI_BAR_REGION; 627 rcfw->creq_bar_reg = RCFW_COMM_CONS_PCI_BAR_REGION;
645 res_base = pci_resource_start(pdev, rcfw->creq_bar_reg); 628 res_base = pci_resource_start(pdev, rcfw->creq_bar_reg);
@@ -692,3 +675,34 @@ int bnxt_qplib_enable_rcfw_channel(struct pci_dev *pdev,
692 __iowrite32_copy(rcfw->cmdq_bar_reg_iomem, &init, sizeof(init) / 4); 675 __iowrite32_copy(rcfw->cmdq_bar_reg_iomem, &init, sizeof(init) / 4);
693 return 0; 676 return 0;
694} 677}
678
679struct bnxt_qplib_rcfw_sbuf *bnxt_qplib_rcfw_alloc_sbuf(
680 struct bnxt_qplib_rcfw *rcfw,
681 u32 size)
682{
683 struct bnxt_qplib_rcfw_sbuf *sbuf;
684
685 sbuf = kzalloc(sizeof(*sbuf), GFP_ATOMIC);
686 if (!sbuf)
687 return NULL;
688
689 sbuf->size = size;
690 sbuf->sb = dma_zalloc_coherent(&rcfw->pdev->dev, sbuf->size,
691 &sbuf->dma_addr, GFP_ATOMIC);
692 if (!sbuf->sb)
693 goto bail;
694
695 return sbuf;
696bail:
697 kfree(sbuf);
698 return NULL;
699}
700
701void bnxt_qplib_rcfw_free_sbuf(struct bnxt_qplib_rcfw *rcfw,
702 struct bnxt_qplib_rcfw_sbuf *sbuf)
703{
704 if (sbuf->sb)
705 dma_free_coherent(&rcfw->pdev->dev, sbuf->size,
706 sbuf->sb, sbuf->dma_addr);
707 kfree(sbuf);
708}
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h
index d3567d75bf58..09ce121770cd 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h
+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h
@@ -73,6 +73,7 @@
73#define RCFW_MAX_OUTSTANDING_CMD BNXT_QPLIB_CMDQE_MAX_CNT 73#define RCFW_MAX_OUTSTANDING_CMD BNXT_QPLIB_CMDQE_MAX_CNT
74#define RCFW_MAX_COOKIE_VALUE 0x7FFF 74#define RCFW_MAX_COOKIE_VALUE 0x7FFF
75#define RCFW_CMD_IS_BLOCKING 0x8000 75#define RCFW_CMD_IS_BLOCKING 0x8000
76#define RCFW_BLOCKED_CMD_WAIT_COUNT 0x4E20
76 77
77/* Cmdq contains a fix number of a 16-Byte slots */ 78/* Cmdq contains a fix number of a 16-Byte slots */
78struct bnxt_qplib_cmdqe { 79struct bnxt_qplib_cmdqe {
@@ -94,32 +95,6 @@ struct bnxt_qplib_crsbe {
94 u8 data[1024]; 95 u8 data[1024];
95}; 96};
96 97
97/* CRSQ SB */
98#define BNXT_QPLIB_CRSBE_MAX_CNT 4
99#define BNXT_QPLIB_CRSBE_UNITS sizeof(struct bnxt_qplib_crsbe)
100#define BNXT_QPLIB_CRSBE_CNT_PER_PG (PAGE_SIZE / BNXT_QPLIB_CRSBE_UNITS)
101
102#define MAX_CRSB_IDX (BNXT_QPLIB_CRSBE_MAX_CNT - 1)
103#define MAX_CRSB_IDX_PER_PG (BNXT_QPLIB_CRSBE_CNT_PER_PG - 1)
104
105static inline u32 get_crsb_pg(u32 val)
106{
107 return (val & ~MAX_CRSB_IDX_PER_PG) / BNXT_QPLIB_CRSBE_CNT_PER_PG;
108}
109
110static inline u32 get_crsb_idx(u32 val)
111{
112 return val & MAX_CRSB_IDX_PER_PG;
113}
114
115static inline void bnxt_qplib_crsb_dma_next(dma_addr_t *pg_map_arr,
116 u32 prod, dma_addr_t *dma_addr)
117{
118 *dma_addr = pg_map_arr[(prod) / BNXT_QPLIB_CRSBE_CNT_PER_PG];
119 *dma_addr += ((prod) % BNXT_QPLIB_CRSBE_CNT_PER_PG) *
120 BNXT_QPLIB_CRSBE_UNITS;
121}
122
123/* CREQ */ 98/* CREQ */
124/* Allocate 1 per QP for async error notification for now */ 99/* Allocate 1 per QP for async error notification for now */
125#define BNXT_QPLIB_CREQE_MAX_CNT (64 * 1024) 100#define BNXT_QPLIB_CREQE_MAX_CNT (64 * 1024)
@@ -158,17 +133,19 @@ static inline u32 get_creq_idx(u32 val)
158#define CREQ_DB(db, raw_cons, cp_bit) \ 133#define CREQ_DB(db, raw_cons, cp_bit) \
159 writel(CREQ_DB_CP_FLAGS | ((raw_cons) & ((cp_bit) - 1)), db) 134 writel(CREQ_DB_CP_FLAGS | ((raw_cons) & ((cp_bit) - 1)), db)
160 135
136#define CREQ_ENTRY_POLL_BUDGET 0x100
137
161/* HWQ */ 138/* HWQ */
162struct bnxt_qplib_crsqe { 139
163 struct creq_qp_event qp_event; 140struct bnxt_qplib_crsq {
141 struct creq_qp_event *resp;
164 u32 req_size; 142 u32 req_size;
165}; 143};
166 144
167struct bnxt_qplib_crsq { 145struct bnxt_qplib_rcfw_sbuf {
168 struct bnxt_qplib_crsqe *crsq; 146 void *sb;
169 u32 prod; 147 dma_addr_t dma_addr;
170 u32 cons; 148 u32 size;
171 u32 max_elements;
172}; 149};
173 150
174/* RCFW Communication Channels */ 151/* RCFW Communication Channels */
@@ -185,7 +162,7 @@ struct bnxt_qplib_rcfw {
185 wait_queue_head_t waitq; 162 wait_queue_head_t waitq;
186 int (*aeq_handler)(struct bnxt_qplib_rcfw *, 163 int (*aeq_handler)(struct bnxt_qplib_rcfw *,
187 struct creq_func_event *); 164 struct creq_func_event *);
188 atomic_t seq_num; 165 u32 seq_num;
189 166
190 /* Bar region info */ 167 /* Bar region info */
191 void __iomem *cmdq_bar_reg_iomem; 168 void __iomem *cmdq_bar_reg_iomem;
@@ -203,8 +180,7 @@ struct bnxt_qplib_rcfw {
203 180
204 /* Actual Cmd and Resp Queues */ 181 /* Actual Cmd and Resp Queues */
205 struct bnxt_qplib_hwq cmdq; 182 struct bnxt_qplib_hwq cmdq;
206 struct bnxt_qplib_crsq crsq; 183 struct bnxt_qplib_crsq *crsqe_tbl;
207 struct bnxt_qplib_hwq crsb;
208}; 184};
209 185
210void bnxt_qplib_free_rcfw_channel(struct bnxt_qplib_rcfw *rcfw); 186void bnxt_qplib_free_rcfw_channel(struct bnxt_qplib_rcfw *rcfw);
@@ -219,11 +195,14 @@ int bnxt_qplib_enable_rcfw_channel(struct pci_dev *pdev,
219 (struct bnxt_qplib_rcfw *, 195 (struct bnxt_qplib_rcfw *,
220 struct creq_func_event *)); 196 struct creq_func_event *));
221 197
222int bnxt_qplib_rcfw_block_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie); 198struct bnxt_qplib_rcfw_sbuf *bnxt_qplib_rcfw_alloc_sbuf(
223int bnxt_qplib_rcfw_wait_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie); 199 struct bnxt_qplib_rcfw *rcfw,
224void *bnxt_qplib_rcfw_send_message(struct bnxt_qplib_rcfw *rcfw, 200 u32 size);
225 struct cmdq_base *req, void **crsbe, 201void bnxt_qplib_rcfw_free_sbuf(struct bnxt_qplib_rcfw *rcfw,
226 u8 is_block); 202 struct bnxt_qplib_rcfw_sbuf *sbuf);
203int bnxt_qplib_rcfw_send_message(struct bnxt_qplib_rcfw *rcfw,
204 struct cmdq_base *req, struct creq_base *resp,
205 void *sbuf, u8 is_block);
227 206
228int bnxt_qplib_deinit_rcfw(struct bnxt_qplib_rcfw *rcfw); 207int bnxt_qplib_deinit_rcfw(struct bnxt_qplib_rcfw *rcfw);
229int bnxt_qplib_init_rcfw(struct bnxt_qplib_rcfw *rcfw, 208int bnxt_qplib_init_rcfw(struct bnxt_qplib_rcfw *rcfw,
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.h b/drivers/infiniband/hw/bnxt_re/qplib_res.h
index 6277d802ca4b..2e4855509719 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_res.h
+++ b/drivers/infiniband/hw/bnxt_re/qplib_res.h
@@ -48,6 +48,10 @@ extern const struct bnxt_qplib_gid bnxt_qplib_gid_zero;
48 48
49#define HWQ_CMP(idx, hwq) ((idx) & ((hwq)->max_elements - 1)) 49#define HWQ_CMP(idx, hwq) ((idx) & ((hwq)->max_elements - 1))
50 50
51#define HWQ_FREE_SLOTS(hwq) (hwq->max_elements - \
52 ((HWQ_CMP(hwq->prod, hwq)\
53 - HWQ_CMP(hwq->cons, hwq))\
54 & (hwq->max_elements - 1)))
51enum bnxt_qplib_hwq_type { 55enum bnxt_qplib_hwq_type {
52 HWQ_TYPE_CTX, 56 HWQ_TYPE_CTX,
53 HWQ_TYPE_QUEUE, 57 HWQ_TYPE_QUEUE,
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.c b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
index 7b31eccedf11..fde18cf0e406 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_sp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
@@ -55,37 +55,30 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
55 struct bnxt_qplib_dev_attr *attr) 55 struct bnxt_qplib_dev_attr *attr)
56{ 56{
57 struct cmdq_query_func req; 57 struct cmdq_query_func req;
58 struct creq_query_func_resp *resp; 58 struct creq_query_func_resp resp;
59 struct bnxt_qplib_rcfw_sbuf *sbuf;
59 struct creq_query_func_resp_sb *sb; 60 struct creq_query_func_resp_sb *sb;
60 u16 cmd_flags = 0; 61 u16 cmd_flags = 0;
61 u32 temp; 62 u32 temp;
62 u8 *tqm_alloc; 63 u8 *tqm_alloc;
63 int i; 64 int i, rc = 0;
64 65
65 RCFW_CMD_PREP(req, QUERY_FUNC, cmd_flags); 66 RCFW_CMD_PREP(req, QUERY_FUNC, cmd_flags);
66 67
67 req.resp_size = sizeof(*sb) / BNXT_QPLIB_CMDQE_UNITS; 68 sbuf = bnxt_qplib_rcfw_alloc_sbuf(rcfw, sizeof(*sb));
68 resp = (struct creq_query_func_resp *) 69 if (!sbuf) {
69 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void **)&sb,
70 0);
71 if (!resp) {
72 dev_err(&rcfw->pdev->dev, "QPLIB: SP: QUERY_FUNC send failed");
73 return -EINVAL;
74 }
75 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
76 /* Cmd timed out */
77 dev_err(&rcfw->pdev->dev, "QPLIB: SP: QUERY_FUNC timed out");
78 return -ETIMEDOUT;
79 }
80 if (resp->status ||
81 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
82 dev_err(&rcfw->pdev->dev, "QPLIB: SP: QUERY_FUNC failed ");
83 dev_err(&rcfw->pdev->dev, 70 dev_err(&rcfw->pdev->dev,
84 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x", 71 "QPLIB: SP: QUERY_FUNC alloc side buffer failed");
85 resp->status, le16_to_cpu(req.cookie), 72 return -ENOMEM;
86 le16_to_cpu(resp->cookie));
87 return -EINVAL;
88 } 73 }
74
75 sb = sbuf->sb;
76 req.resp_size = sizeof(*sb) / BNXT_QPLIB_CMDQE_UNITS;
77 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void *)&resp,
78 (void *)sbuf, 0);
79 if (rc)
80 goto bail;
81
89 /* Extract the context from the side buffer */ 82 /* Extract the context from the side buffer */
90 attr->max_qp = le32_to_cpu(sb->max_qp); 83 attr->max_qp = le32_to_cpu(sb->max_qp);
91 attr->max_qp_rd_atom = 84 attr->max_qp_rd_atom =
@@ -95,6 +88,11 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
95 sb->max_qp_init_rd_atom > BNXT_QPLIB_MAX_OUT_RD_ATOM ? 88 sb->max_qp_init_rd_atom > BNXT_QPLIB_MAX_OUT_RD_ATOM ?
96 BNXT_QPLIB_MAX_OUT_RD_ATOM : sb->max_qp_init_rd_atom; 89 BNXT_QPLIB_MAX_OUT_RD_ATOM : sb->max_qp_init_rd_atom;
97 attr->max_qp_wqes = le16_to_cpu(sb->max_qp_wr); 90 attr->max_qp_wqes = le16_to_cpu(sb->max_qp_wr);
91 /*
92 * 128 WQEs needs to be reserved for the HW (8916). Prevent
93 * reporting the max number
94 */
95 attr->max_qp_wqes -= BNXT_QPLIB_RESERVED_QP_WRS;
98 attr->max_qp_sges = sb->max_sge; 96 attr->max_qp_sges = sb->max_sge;
99 attr->max_cq = le32_to_cpu(sb->max_cq); 97 attr->max_cq = le32_to_cpu(sb->max_cq);
100 attr->max_cq_wqes = le32_to_cpu(sb->max_cqe); 98 attr->max_cq_wqes = le32_to_cpu(sb->max_cqe);
@@ -130,7 +128,10 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
130 attr->tqm_alloc_reqs[i * 4 + 2] = *(++tqm_alloc); 128 attr->tqm_alloc_reqs[i * 4 + 2] = *(++tqm_alloc);
131 attr->tqm_alloc_reqs[i * 4 + 3] = *(++tqm_alloc); 129 attr->tqm_alloc_reqs[i * 4 + 3] = *(++tqm_alloc);
132 } 130 }
133 return 0; 131
132bail:
133 bnxt_qplib_rcfw_free_sbuf(rcfw, sbuf);
134 return rc;
134} 135}
135 136
136/* SGID */ 137/* SGID */
@@ -178,8 +179,9 @@ int bnxt_qplib_del_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
178 /* Remove GID from the SGID table */ 179 /* Remove GID from the SGID table */
179 if (update) { 180 if (update) {
180 struct cmdq_delete_gid req; 181 struct cmdq_delete_gid req;
181 struct creq_delete_gid_resp *resp; 182 struct creq_delete_gid_resp resp;
182 u16 cmd_flags = 0; 183 u16 cmd_flags = 0;
184 int rc;
183 185
184 RCFW_CMD_PREP(req, DELETE_GID, cmd_flags); 186 RCFW_CMD_PREP(req, DELETE_GID, cmd_flags);
185 if (sgid_tbl->hw_id[index] == 0xFFFF) { 187 if (sgid_tbl->hw_id[index] == 0xFFFF) {
@@ -188,31 +190,10 @@ int bnxt_qplib_del_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
188 return -EINVAL; 190 return -EINVAL;
189 } 191 }
190 req.gid_index = cpu_to_le16(sgid_tbl->hw_id[index]); 192 req.gid_index = cpu_to_le16(sgid_tbl->hw_id[index]);
191 resp = (struct creq_delete_gid_resp *) 193 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
192 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, NULL, 194 (void *)&resp, NULL, 0);
193 0); 195 if (rc)
194 if (!resp) { 196 return rc;
195 dev_err(&res->pdev->dev,
196 "QPLIB: SP: DELETE_GID send failed");
197 return -EINVAL;
198 }
199 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw,
200 le16_to_cpu(req.cookie))) {
201 /* Cmd timed out */
202 dev_err(&res->pdev->dev,
203 "QPLIB: SP: DELETE_GID timed out");
204 return -ETIMEDOUT;
205 }
206 if (resp->status ||
207 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
208 dev_err(&res->pdev->dev,
209 "QPLIB: SP: DELETE_GID failed ");
210 dev_err(&res->pdev->dev,
211 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
212 resp->status, le16_to_cpu(req.cookie),
213 le16_to_cpu(resp->cookie));
214 return -EINVAL;
215 }
216 } 197 }
217 memcpy(&sgid_tbl->tbl[index], &bnxt_qplib_gid_zero, 198 memcpy(&sgid_tbl->tbl[index], &bnxt_qplib_gid_zero,
218 sizeof(bnxt_qplib_gid_zero)); 199 sizeof(bnxt_qplib_gid_zero));
@@ -234,7 +215,7 @@ int bnxt_qplib_add_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
234 struct bnxt_qplib_res, 215 struct bnxt_qplib_res,
235 sgid_tbl); 216 sgid_tbl);
236 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 217 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
237 int i, free_idx, rc = 0; 218 int i, free_idx;
238 219
239 if (!sgid_tbl) { 220 if (!sgid_tbl) {
240 dev_err(&res->pdev->dev, "QPLIB: SGID table not allocated"); 221 dev_err(&res->pdev->dev, "QPLIB: SGID table not allocated");
@@ -266,10 +247,11 @@ int bnxt_qplib_add_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
266 } 247 }
267 if (update) { 248 if (update) {
268 struct cmdq_add_gid req; 249 struct cmdq_add_gid req;
269 struct creq_add_gid_resp *resp; 250 struct creq_add_gid_resp resp;
270 u16 cmd_flags = 0; 251 u16 cmd_flags = 0;
271 u32 temp32[4]; 252 u32 temp32[4];
272 u16 temp16[3]; 253 u16 temp16[3];
254 int rc;
273 255
274 RCFW_CMD_PREP(req, ADD_GID, cmd_flags); 256 RCFW_CMD_PREP(req, ADD_GID, cmd_flags);
275 257
@@ -290,31 +272,11 @@ int bnxt_qplib_add_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
290 req.src_mac[1] = cpu_to_be16(temp16[1]); 272 req.src_mac[1] = cpu_to_be16(temp16[1]);
291 req.src_mac[2] = cpu_to_be16(temp16[2]); 273 req.src_mac[2] = cpu_to_be16(temp16[2]);
292 274
293 resp = (struct creq_add_gid_resp *) 275 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
294 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 276 (void *)&resp, NULL, 0);
295 NULL, 0); 277 if (rc)
296 if (!resp) { 278 return rc;
297 dev_err(&res->pdev->dev, 279 sgid_tbl->hw_id[free_idx] = le32_to_cpu(resp.xid);
298 "QPLIB: SP: ADD_GID send failed");
299 return -EINVAL;
300 }
301 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw,
302 le16_to_cpu(req.cookie))) {
303 /* Cmd timed out */
304 dev_err(&res->pdev->dev,
305 "QPIB: SP: ADD_GID timed out");
306 return -ETIMEDOUT;
307 }
308 if (resp->status ||
309 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
310 dev_err(&res->pdev->dev, "QPLIB: SP: ADD_GID failed ");
311 dev_err(&res->pdev->dev,
312 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
313 resp->status, le16_to_cpu(req.cookie),
314 le16_to_cpu(resp->cookie));
315 return -EINVAL;
316 }
317 sgid_tbl->hw_id[free_idx] = le32_to_cpu(resp->xid);
318 } 280 }
319 /* Add GID to the sgid_tbl */ 281 /* Add GID to the sgid_tbl */
320 memcpy(&sgid_tbl->tbl[free_idx], gid, sizeof(*gid)); 282 memcpy(&sgid_tbl->tbl[free_idx], gid, sizeof(*gid));
@@ -325,7 +287,7 @@ int bnxt_qplib_add_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
325 287
326 *index = free_idx; 288 *index = free_idx;
327 /* unlock */ 289 /* unlock */
328 return rc; 290 return 0;
329} 291}
330 292
331/* pkeys */ 293/* pkeys */
@@ -422,10 +384,11 @@ int bnxt_qplib_create_ah(struct bnxt_qplib_res *res, struct bnxt_qplib_ah *ah)
422{ 384{
423 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 385 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
424 struct cmdq_create_ah req; 386 struct cmdq_create_ah req;
425 struct creq_create_ah_resp *resp; 387 struct creq_create_ah_resp resp;
426 u16 cmd_flags = 0; 388 u16 cmd_flags = 0;
427 u32 temp32[4]; 389 u32 temp32[4];
428 u16 temp16[3]; 390 u16 temp16[3];
391 int rc;
429 392
430 RCFW_CMD_PREP(req, CREATE_AH, cmd_flags); 393 RCFW_CMD_PREP(req, CREATE_AH, cmd_flags);
431 394
@@ -450,28 +413,12 @@ int bnxt_qplib_create_ah(struct bnxt_qplib_res *res, struct bnxt_qplib_ah *ah)
450 req.dest_mac[1] = cpu_to_le16(temp16[1]); 413 req.dest_mac[1] = cpu_to_le16(temp16[1]);
451 req.dest_mac[2] = cpu_to_le16(temp16[2]); 414 req.dest_mac[2] = cpu_to_le16(temp16[2]);
452 415
453 resp = (struct creq_create_ah_resp *) 416 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void *)&resp,
454 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 417 NULL, 1);
455 NULL, 1); 418 if (rc)
456 if (!resp) { 419 return rc;
457 dev_err(&rcfw->pdev->dev, "QPLIB: SP: CREATE_AH send failed"); 420
458 return -EINVAL; 421 ah->id = le32_to_cpu(resp.xid);
459 }
460 if (!bnxt_qplib_rcfw_block_for_resp(rcfw, le16_to_cpu(req.cookie))) {
461 /* Cmd timed out */
462 dev_err(&rcfw->pdev->dev, "QPLIB: SP: CREATE_AH timed out");
463 return -ETIMEDOUT;
464 }
465 if (resp->status ||
466 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
467 dev_err(&rcfw->pdev->dev, "QPLIB: SP: CREATE_AH failed ");
468 dev_err(&rcfw->pdev->dev,
469 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
470 resp->status, le16_to_cpu(req.cookie),
471 le16_to_cpu(resp->cookie));
472 return -EINVAL;
473 }
474 ah->id = le32_to_cpu(resp->xid);
475 return 0; 422 return 0;
476} 423}
477 424
@@ -479,35 +426,19 @@ int bnxt_qplib_destroy_ah(struct bnxt_qplib_res *res, struct bnxt_qplib_ah *ah)
479{ 426{
480 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 427 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
481 struct cmdq_destroy_ah req; 428 struct cmdq_destroy_ah req;
482 struct creq_destroy_ah_resp *resp; 429 struct creq_destroy_ah_resp resp;
483 u16 cmd_flags = 0; 430 u16 cmd_flags = 0;
431 int rc;
484 432
485 /* Clean up the AH table in the device */ 433 /* Clean up the AH table in the device */
486 RCFW_CMD_PREP(req, DESTROY_AH, cmd_flags); 434 RCFW_CMD_PREP(req, DESTROY_AH, cmd_flags);
487 435
488 req.ah_cid = cpu_to_le32(ah->id); 436 req.ah_cid = cpu_to_le32(ah->id);
489 437
490 resp = (struct creq_destroy_ah_resp *) 438 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void *)&resp,
491 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 439 NULL, 1);
492 NULL, 1); 440 if (rc)
493 if (!resp) { 441 return rc;
494 dev_err(&rcfw->pdev->dev, "QPLIB: SP: DESTROY_AH send failed");
495 return -EINVAL;
496 }
497 if (!bnxt_qplib_rcfw_block_for_resp(rcfw, le16_to_cpu(req.cookie))) {
498 /* Cmd timed out */
499 dev_err(&rcfw->pdev->dev, "QPLIB: SP: DESTROY_AH timed out");
500 return -ETIMEDOUT;
501 }
502 if (resp->status ||
503 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
504 dev_err(&rcfw->pdev->dev, "QPLIB: SP: DESTROY_AH failed ");
505 dev_err(&rcfw->pdev->dev,
506 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
507 resp->status, le16_to_cpu(req.cookie),
508 le16_to_cpu(resp->cookie));
509 return -EINVAL;
510 }
511 return 0; 442 return 0;
512} 443}
513 444
@@ -516,8 +447,9 @@ int bnxt_qplib_free_mrw(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mrw)
516{ 447{
517 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 448 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
518 struct cmdq_deallocate_key req; 449 struct cmdq_deallocate_key req;
519 struct creq_deallocate_key_resp *resp; 450 struct creq_deallocate_key_resp resp;
520 u16 cmd_flags = 0; 451 u16 cmd_flags = 0;
452 int rc;
521 453
522 if (mrw->lkey == 0xFFFFFFFF) { 454 if (mrw->lkey == 0xFFFFFFFF) {
523 dev_info(&res->pdev->dev, 455 dev_info(&res->pdev->dev,
@@ -536,27 +468,11 @@ int bnxt_qplib_free_mrw(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mrw)
536 else 468 else
537 req.key = cpu_to_le32(mrw->lkey); 469 req.key = cpu_to_le32(mrw->lkey);
538 470
539 resp = (struct creq_deallocate_key_resp *) 471 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void *)&resp,
540 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 472 NULL, 0);
541 NULL, 0); 473 if (rc)
542 if (!resp) { 474 return rc;
543 dev_err(&res->pdev->dev, "QPLIB: SP: FREE_MR send failed"); 475
544 return -EINVAL;
545 }
546 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
547 /* Cmd timed out */
548 dev_err(&res->pdev->dev, "QPLIB: SP: FREE_MR timed out");
549 return -ETIMEDOUT;
550 }
551 if (resp->status ||
552 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
553 dev_err(&res->pdev->dev, "QPLIB: SP: FREE_MR failed ");
554 dev_err(&res->pdev->dev,
555 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
556 resp->status, le16_to_cpu(req.cookie),
557 le16_to_cpu(resp->cookie));
558 return -EINVAL;
559 }
560 /* Free the qplib's MRW memory */ 476 /* Free the qplib's MRW memory */
561 if (mrw->hwq.max_elements) 477 if (mrw->hwq.max_elements)
562 bnxt_qplib_free_hwq(res->pdev, &mrw->hwq); 478 bnxt_qplib_free_hwq(res->pdev, &mrw->hwq);
@@ -568,9 +484,10 @@ int bnxt_qplib_alloc_mrw(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mrw)
568{ 484{
569 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 485 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
570 struct cmdq_allocate_mrw req; 486 struct cmdq_allocate_mrw req;
571 struct creq_allocate_mrw_resp *resp; 487 struct creq_allocate_mrw_resp resp;
572 u16 cmd_flags = 0; 488 u16 cmd_flags = 0;
573 unsigned long tmp; 489 unsigned long tmp;
490 int rc;
574 491
575 RCFW_CMD_PREP(req, ALLOCATE_MRW, cmd_flags); 492 RCFW_CMD_PREP(req, ALLOCATE_MRW, cmd_flags);
576 493
@@ -584,33 +501,17 @@ int bnxt_qplib_alloc_mrw(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mrw)
584 tmp = (unsigned long)mrw; 501 tmp = (unsigned long)mrw;
585 req.mrw_handle = cpu_to_le64(tmp); 502 req.mrw_handle = cpu_to_le64(tmp);
586 503
587 resp = (struct creq_allocate_mrw_resp *) 504 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
588 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 505 (void *)&resp, NULL, 0);
589 NULL, 0); 506 if (rc)
590 if (!resp) { 507 return rc;
591 dev_err(&rcfw->pdev->dev, "QPLIB: SP: ALLOC_MRW send failed"); 508
592 return -EINVAL;
593 }
594 if (!bnxt_qplib_rcfw_wait_for_resp(rcfw, le16_to_cpu(req.cookie))) {
595 /* Cmd timed out */
596 dev_err(&rcfw->pdev->dev, "QPLIB: SP: ALLOC_MRW timed out");
597 return -ETIMEDOUT;
598 }
599 if (resp->status ||
600 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
601 dev_err(&rcfw->pdev->dev, "QPLIB: SP: ALLOC_MRW failed ");
602 dev_err(&rcfw->pdev->dev,
603 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
604 resp->status, le16_to_cpu(req.cookie),
605 le16_to_cpu(resp->cookie));
606 return -EINVAL;
607 }
608 if ((mrw->type == CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE1) || 509 if ((mrw->type == CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE1) ||
609 (mrw->type == CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE2A) || 510 (mrw->type == CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE2A) ||
610 (mrw->type == CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE2B)) 511 (mrw->type == CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE2B))
611 mrw->rkey = le32_to_cpu(resp->xid); 512 mrw->rkey = le32_to_cpu(resp.xid);
612 else 513 else
613 mrw->lkey = le32_to_cpu(resp->xid); 514 mrw->lkey = le32_to_cpu(resp.xid);
614 return 0; 515 return 0;
615} 516}
616 517
@@ -619,40 +520,17 @@ int bnxt_qplib_dereg_mrw(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mrw,
619{ 520{
620 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 521 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
621 struct cmdq_deregister_mr req; 522 struct cmdq_deregister_mr req;
622 struct creq_deregister_mr_resp *resp; 523 struct creq_deregister_mr_resp resp;
623 u16 cmd_flags = 0; 524 u16 cmd_flags = 0;
624 int rc; 525 int rc;
625 526
626 RCFW_CMD_PREP(req, DEREGISTER_MR, cmd_flags); 527 RCFW_CMD_PREP(req, DEREGISTER_MR, cmd_flags);
627 528
628 req.lkey = cpu_to_le32(mrw->lkey); 529 req.lkey = cpu_to_le32(mrw->lkey);
629 resp = (struct creq_deregister_mr_resp *) 530 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
630 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 531 (void *)&resp, NULL, block);
631 NULL, block); 532 if (rc)
632 if (!resp) { 533 return rc;
633 dev_err(&rcfw->pdev->dev, "QPLIB: SP: DEREG_MR send failed");
634 return -EINVAL;
635 }
636 if (block)
637 rc = bnxt_qplib_rcfw_block_for_resp(rcfw,
638 le16_to_cpu(req.cookie));
639 else
640 rc = bnxt_qplib_rcfw_wait_for_resp(rcfw,
641 le16_to_cpu(req.cookie));
642 if (!rc) {
643 /* Cmd timed out */
644 dev_err(&res->pdev->dev, "QPLIB: SP: DEREG_MR timed out");
645 return -ETIMEDOUT;
646 }
647 if (resp->status ||
648 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
649 dev_err(&rcfw->pdev->dev, "QPLIB: SP: DEREG_MR failed ");
650 dev_err(&rcfw->pdev->dev,
651 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
652 resp->status, le16_to_cpu(req.cookie),
653 le16_to_cpu(resp->cookie));
654 return -EINVAL;
655 }
656 534
657 /* Free the qplib's MR memory */ 535 /* Free the qplib's MR memory */
658 if (mrw->hwq.max_elements) { 536 if (mrw->hwq.max_elements) {
@@ -669,7 +547,7 @@ int bnxt_qplib_reg_mr(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr,
669{ 547{
670 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 548 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
671 struct cmdq_register_mr req; 549 struct cmdq_register_mr req;
672 struct creq_register_mr_resp *resp; 550 struct creq_register_mr_resp resp;
673 u16 cmd_flags = 0, level; 551 u16 cmd_flags = 0, level;
674 int pg_ptrs, pages, i, rc; 552 int pg_ptrs, pages, i, rc;
675 dma_addr_t **pbl_ptr; 553 dma_addr_t **pbl_ptr;
@@ -730,36 +608,11 @@ int bnxt_qplib_reg_mr(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr,
730 req.key = cpu_to_le32(mr->lkey); 608 req.key = cpu_to_le32(mr->lkey);
731 req.mr_size = cpu_to_le64(mr->total_size); 609 req.mr_size = cpu_to_le64(mr->total_size);
732 610
733 resp = (struct creq_register_mr_resp *) 611 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
734 bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, 612 (void *)&resp, NULL, block);
735 NULL, block); 613 if (rc)
736 if (!resp) {
737 dev_err(&res->pdev->dev, "SP: REG_MR send failed");
738 rc = -EINVAL;
739 goto fail;
740 }
741 if (block)
742 rc = bnxt_qplib_rcfw_block_for_resp(rcfw,
743 le16_to_cpu(req.cookie));
744 else
745 rc = bnxt_qplib_rcfw_wait_for_resp(rcfw,
746 le16_to_cpu(req.cookie));
747 if (!rc) {
748 /* Cmd timed out */
749 dev_err(&res->pdev->dev, "SP: REG_MR timed out");
750 rc = -ETIMEDOUT;
751 goto fail;
752 }
753 if (resp->status ||
754 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
755 dev_err(&res->pdev->dev, "QPLIB: SP: REG_MR failed ");
756 dev_err(&res->pdev->dev,
757 "QPLIB: SP: with status 0x%x cmdq 0x%x resp 0x%x",
758 resp->status, le16_to_cpu(req.cookie),
759 le16_to_cpu(resp->cookie));
760 rc = -EINVAL;
761 goto fail; 614 goto fail;
762 } 615
763 return 0; 616 return 0;
764 617
765fail: 618fail:
@@ -804,35 +657,15 @@ int bnxt_qplib_map_tc2cos(struct bnxt_qplib_res *res, u16 *cids)
804{ 657{
805 struct bnxt_qplib_rcfw *rcfw = res->rcfw; 658 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
806 struct cmdq_map_tc_to_cos req; 659 struct cmdq_map_tc_to_cos req;
807 struct creq_map_tc_to_cos_resp *resp; 660 struct creq_map_tc_to_cos_resp resp;
808 u16 cmd_flags = 0; 661 u16 cmd_flags = 0;
809 int tleft; 662 int rc = 0;
810 663
811 RCFW_CMD_PREP(req, MAP_TC_TO_COS, cmd_flags); 664 RCFW_CMD_PREP(req, MAP_TC_TO_COS, cmd_flags);
812 req.cos0 = cpu_to_le16(cids[0]); 665 req.cos0 = cpu_to_le16(cids[0]);
813 req.cos1 = cpu_to_le16(cids[1]); 666 req.cos1 = cpu_to_le16(cids[1]);
814 667
815 resp = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, NULL, 0); 668 rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req,
816 if (!resp) { 669 (void *)&resp, NULL, 0);
817 dev_err(&res->pdev->dev, "QPLIB: SP: MAP_TC2COS send failed");
818 return -EINVAL;
819 }
820
821 tleft = bnxt_qplib_rcfw_block_for_resp(rcfw, le16_to_cpu(req.cookie));
822 if (!tleft) {
823 dev_err(&res->pdev->dev, "QPLIB: SP: MAP_TC2COS timed out");
824 return -ETIMEDOUT;
825 }
826
827 if (resp->status ||
828 le16_to_cpu(resp->cookie) != le16_to_cpu(req.cookie)) {
829 dev_err(&res->pdev->dev, "QPLIB: SP: MAP_TC2COS failed ");
830 dev_err(&res->pdev->dev,
831 "QPLIB: with status 0x%x cmdq 0x%x resp 0x%x",
832 resp->status, le16_to_cpu(req.cookie),
833 le16_to_cpu(resp->cookie));
834 return -EINVAL;
835 }
836
837 return 0; 670 return 0;
838} 671}
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.h b/drivers/infiniband/hw/bnxt_re/qplib_sp.h
index 1442a617e968..a543f959098b 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_sp.h
+++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.h
@@ -40,6 +40,8 @@
40#ifndef __BNXT_QPLIB_SP_H__ 40#ifndef __BNXT_QPLIB_SP_H__
41#define __BNXT_QPLIB_SP_H__ 41#define __BNXT_QPLIB_SP_H__
42 42
43#define BNXT_QPLIB_RESERVED_QP_WRS 128
44
43struct bnxt_qplib_dev_attr { 45struct bnxt_qplib_dev_attr {
44 char fw_ver[32]; 46 char fw_ver[32];
45 u16 max_sgid; 47 u16 max_sgid;
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
index b6fe45924c6e..0910faf3587b 100644
--- a/drivers/infiniband/hw/cxgb4/cm.c
+++ b/drivers/infiniband/hw/cxgb4/cm.c
@@ -488,6 +488,7 @@ static int _put_ep_safe(struct c4iw_dev *dev, struct sk_buff *skb)
488 488
489 ep = *((struct c4iw_ep **)(skb->cb + 2 * sizeof(void *))); 489 ep = *((struct c4iw_ep **)(skb->cb + 2 * sizeof(void *)));
490 release_ep_resources(ep); 490 release_ep_resources(ep);
491 kfree_skb(skb);
491 return 0; 492 return 0;
492} 493}
493 494
@@ -498,6 +499,7 @@ static int _put_pass_ep_safe(struct c4iw_dev *dev, struct sk_buff *skb)
498 ep = *((struct c4iw_ep **)(skb->cb + 2 * sizeof(void *))); 499 ep = *((struct c4iw_ep **)(skb->cb + 2 * sizeof(void *)));
499 c4iw_put_ep(&ep->parent_ep->com); 500 c4iw_put_ep(&ep->parent_ep->com);
500 release_ep_resources(ep); 501 release_ep_resources(ep);
502 kfree_skb(skb);
501 return 0; 503 return 0;
502} 504}
503 505
@@ -569,11 +571,13 @@ static void abort_arp_failure(void *handle, struct sk_buff *skb)
569 571
570 pr_debug("%s rdev %p\n", __func__, rdev); 572 pr_debug("%s rdev %p\n", __func__, rdev);
571 req->cmd = CPL_ABORT_NO_RST; 573 req->cmd = CPL_ABORT_NO_RST;
574 skb_get(skb);
572 ret = c4iw_ofld_send(rdev, skb); 575 ret = c4iw_ofld_send(rdev, skb);
573 if (ret) { 576 if (ret) {
574 __state_set(&ep->com, DEAD); 577 __state_set(&ep->com, DEAD);
575 queue_arp_failure_cpl(ep, skb, FAKE_CPL_PUT_EP_SAFE); 578 queue_arp_failure_cpl(ep, skb, FAKE_CPL_PUT_EP_SAFE);
576 } 579 } else
580 kfree_skb(skb);
577} 581}
578 582
579static int send_flowc(struct c4iw_ep *ep) 583static int send_flowc(struct c4iw_ep *ep)
@@ -2517,7 +2521,8 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
2517 goto reject; 2521 goto reject;
2518 } 2522 }
2519 2523
2520 hdrs = sizeof(struct iphdr) + sizeof(struct tcphdr) + 2524 hdrs = ((iptype == 4) ? sizeof(struct iphdr) : sizeof(struct ipv6hdr)) +
2525 sizeof(struct tcphdr) +
2521 ((enable_tcp_timestamps && req->tcpopt.tstamp) ? 12 : 0); 2526 ((enable_tcp_timestamps && req->tcpopt.tstamp) ? 12 : 0);
2522 if (peer_mss && child_ep->mtu > (peer_mss + hdrs)) 2527 if (peer_mss && child_ep->mtu > (peer_mss + hdrs))
2523 child_ep->mtu = peer_mss + hdrs; 2528 child_ep->mtu = peer_mss + hdrs;
diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
index 329fb65e8fb0..ae0b79aeea2e 100644
--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -767,7 +767,7 @@ void c4iw_release_dev_ucontext(struct c4iw_rdev *rdev,
767 kfree(entry); 767 kfree(entry);
768 } 768 }
769 769
770 list_for_each_safe(pos, nxt, &uctx->qpids) { 770 list_for_each_safe(pos, nxt, &uctx->cqids) {
771 entry = list_entry(pos, struct c4iw_qid_list, entry); 771 entry = list_entry(pos, struct c4iw_qid_list, entry);
772 list_del_init(&entry->entry); 772 list_del_init(&entry->entry);
773 kfree(entry); 773 kfree(entry);
@@ -880,13 +880,15 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev)
880 rdev->free_workq = create_singlethread_workqueue("iw_cxgb4_free"); 880 rdev->free_workq = create_singlethread_workqueue("iw_cxgb4_free");
881 if (!rdev->free_workq) { 881 if (!rdev->free_workq) {
882 err = -ENOMEM; 882 err = -ENOMEM;
883 goto err_free_status_page; 883 goto err_free_status_page_and_wr_log;
884 } 884 }
885 885
886 rdev->status_page->db_off = 0; 886 rdev->status_page->db_off = 0;
887 887
888 return 0; 888 return 0;
889err_free_status_page: 889err_free_status_page_and_wr_log:
890 if (c4iw_wr_log && rdev->wr_log)
891 kfree(rdev->wr_log);
890 free_page((unsigned long)rdev->status_page); 892 free_page((unsigned long)rdev->status_page);
891destroy_ocqp_pool: 893destroy_ocqp_pool:
892 c4iw_ocqp_pool_destroy(rdev); 894 c4iw_ocqp_pool_destroy(rdev);
@@ -903,9 +905,11 @@ static void c4iw_rdev_close(struct c4iw_rdev *rdev)
903{ 905{
904 destroy_workqueue(rdev->free_workq); 906 destroy_workqueue(rdev->free_workq);
905 kfree(rdev->wr_log); 907 kfree(rdev->wr_log);
908 c4iw_release_dev_ucontext(rdev, &rdev->uctx);
906 free_page((unsigned long)rdev->status_page); 909 free_page((unsigned long)rdev->status_page);
907 c4iw_pblpool_destroy(rdev); 910 c4iw_pblpool_destroy(rdev);
908 c4iw_rqtpool_destroy(rdev); 911 c4iw_rqtpool_destroy(rdev);
912 c4iw_ocqp_pool_destroy(rdev);
909 c4iw_destroy_resource(&rdev->resource); 913 c4iw_destroy_resource(&rdev->resource);
910} 914}
911 915
@@ -971,7 +975,7 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop)
971 devp->rdev.lldi.sge_egrstatuspagesize); 975 devp->rdev.lldi.sge_egrstatuspagesize);
972 976
973 devp->rdev.hw_queue.t4_eq_status_entries = 977 devp->rdev.hw_queue.t4_eq_status_entries =
974 devp->rdev.lldi.sge_ingpadboundary > 64 ? 2 : 1; 978 devp->rdev.lldi.sge_egrstatuspagesize / 64;
975 devp->rdev.hw_queue.t4_max_eq_size = 65520; 979 devp->rdev.hw_queue.t4_max_eq_size = 65520;
976 devp->rdev.hw_queue.t4_max_iq_size = 65520; 980 devp->rdev.hw_queue.t4_max_iq_size = 65520;
977 devp->rdev.hw_queue.t4_max_rq_size = 8192 - 981 devp->rdev.hw_queue.t4_max_rq_size = 8192 -
diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c
index 5d6b1eeaa9a0..2ba00b89df6a 100644
--- a/drivers/infiniband/hw/hfi1/chip.c
+++ b/drivers/infiniband/hw/hfi1/chip.c
@@ -6312,25 +6312,38 @@ static void handle_8051_request(struct hfi1_pportdata *ppd)
6312 } 6312 }
6313} 6313}
6314 6314
6315static void write_global_credit(struct hfi1_devdata *dd, 6315/*
6316 u8 vau, u16 total, u16 shared) 6316 * Set up allocation unit vaulue.
6317 */
6318void set_up_vau(struct hfi1_devdata *dd, u8 vau)
6317{ 6319{
6318 write_csr(dd, SEND_CM_GLOBAL_CREDIT, 6320 u64 reg = read_csr(dd, SEND_CM_GLOBAL_CREDIT);
6319 ((u64)total << 6321
6320 SEND_CM_GLOBAL_CREDIT_TOTAL_CREDIT_LIMIT_SHIFT) | 6322 /* do not modify other values in the register */
6321 ((u64)shared << 6323 reg &= ~SEND_CM_GLOBAL_CREDIT_AU_SMASK;
6322 SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_SHIFT) | 6324 reg |= (u64)vau << SEND_CM_GLOBAL_CREDIT_AU_SHIFT;
6323 ((u64)vau << SEND_CM_GLOBAL_CREDIT_AU_SHIFT)); 6325 write_csr(dd, SEND_CM_GLOBAL_CREDIT, reg);
6324} 6326}
6325 6327
6326/* 6328/*
6327 * Set up initial VL15 credits of the remote. Assumes the rest of 6329 * Set up initial VL15 credits of the remote. Assumes the rest of
6328 * the CM credit registers are zero from a previous global or credit reset . 6330 * the CM credit registers are zero from a previous global or credit reset.
6331 * Shared limit for VL15 will always be 0.
6329 */ 6332 */
6330void set_up_vl15(struct hfi1_devdata *dd, u8 vau, u16 vl15buf) 6333void set_up_vl15(struct hfi1_devdata *dd, u16 vl15buf)
6331{ 6334{
6332 /* leave shared count at zero for both global and VL15 */ 6335 u64 reg = read_csr(dd, SEND_CM_GLOBAL_CREDIT);
6333 write_global_credit(dd, vau, vl15buf, 0); 6336
6337 /* set initial values for total and shared credit limit */
6338 reg &= ~(SEND_CM_GLOBAL_CREDIT_TOTAL_CREDIT_LIMIT_SMASK |
6339 SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_SMASK);
6340
6341 /*
6342 * Set total limit to be equal to VL15 credits.
6343 * Leave shared limit at 0.
6344 */
6345 reg |= (u64)vl15buf << SEND_CM_GLOBAL_CREDIT_TOTAL_CREDIT_LIMIT_SHIFT;
6346 write_csr(dd, SEND_CM_GLOBAL_CREDIT, reg);
6334 6347
6335 write_csr(dd, SEND_CM_CREDIT_VL15, (u64)vl15buf 6348 write_csr(dd, SEND_CM_CREDIT_VL15, (u64)vl15buf
6336 << SEND_CM_CREDIT_VL15_DEDICATED_LIMIT_VL_SHIFT); 6349 << SEND_CM_CREDIT_VL15_DEDICATED_LIMIT_VL_SHIFT);
@@ -6348,9 +6361,11 @@ void reset_link_credits(struct hfi1_devdata *dd)
6348 for (i = 0; i < TXE_NUM_DATA_VL; i++) 6361 for (i = 0; i < TXE_NUM_DATA_VL; i++)
6349 write_csr(dd, SEND_CM_CREDIT_VL + (8 * i), 0); 6362 write_csr(dd, SEND_CM_CREDIT_VL + (8 * i), 0);
6350 write_csr(dd, SEND_CM_CREDIT_VL15, 0); 6363 write_csr(dd, SEND_CM_CREDIT_VL15, 0);
6351 write_global_credit(dd, 0, 0, 0); 6364 write_csr(dd, SEND_CM_GLOBAL_CREDIT, 0);
6352 /* reset the CM block */ 6365 /* reset the CM block */
6353 pio_send_control(dd, PSC_CM_RESET); 6366 pio_send_control(dd, PSC_CM_RESET);
6367 /* reset cached value */
6368 dd->vl15buf_cached = 0;
6354} 6369}
6355 6370
6356/* convert a vCU to a CU */ 6371/* convert a vCU to a CU */
@@ -6839,24 +6854,35 @@ void handle_link_up(struct work_struct *work)
6839{ 6854{
6840 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, 6855 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata,
6841 link_up_work); 6856 link_up_work);
6857 struct hfi1_devdata *dd = ppd->dd;
6858
6842 set_link_state(ppd, HLS_UP_INIT); 6859 set_link_state(ppd, HLS_UP_INIT);
6843 6860
6844 /* cache the read of DC_LCB_STS_ROUND_TRIP_LTP_CNT */ 6861 /* cache the read of DC_LCB_STS_ROUND_TRIP_LTP_CNT */
6845 read_ltp_rtt(ppd->dd); 6862 read_ltp_rtt(dd);
6846 /* 6863 /*
6847 * OPA specifies that certain counters are cleared on a transition 6864 * OPA specifies that certain counters are cleared on a transition
6848 * to link up, so do that. 6865 * to link up, so do that.
6849 */ 6866 */
6850 clear_linkup_counters(ppd->dd); 6867 clear_linkup_counters(dd);
6851 /* 6868 /*
6852 * And (re)set link up default values. 6869 * And (re)set link up default values.
6853 */ 6870 */
6854 set_linkup_defaults(ppd); 6871 set_linkup_defaults(ppd);
6855 6872
6873 /*
6874 * Set VL15 credits. Use cached value from verify cap interrupt.
6875 * In case of quick linkup or simulator, vl15 value will be set by
6876 * handle_linkup_change. VerifyCap interrupt handler will not be
6877 * called in those scenarios.
6878 */
6879 if (!(quick_linkup || dd->icode == ICODE_FUNCTIONAL_SIMULATOR))
6880 set_up_vl15(dd, dd->vl15buf_cached);
6881
6856 /* enforce link speed enabled */ 6882 /* enforce link speed enabled */
6857 if ((ppd->link_speed_active & ppd->link_speed_enabled) == 0) { 6883 if ((ppd->link_speed_active & ppd->link_speed_enabled) == 0) {
6858 /* oops - current speed is not enabled, bounce */ 6884 /* oops - current speed is not enabled, bounce */
6859 dd_dev_err(ppd->dd, 6885 dd_dev_err(dd,
6860 "Link speed active 0x%x is outside enabled 0x%x, downing link\n", 6886 "Link speed active 0x%x is outside enabled 0x%x, downing link\n",
6861 ppd->link_speed_active, ppd->link_speed_enabled); 6887 ppd->link_speed_active, ppd->link_speed_enabled);
6862 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_SPEED_POLICY, 0, 6888 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_SPEED_POLICY, 0,
@@ -7357,7 +7383,14 @@ void handle_verify_cap(struct work_struct *work)
7357 */ 7383 */
7358 if (vau == 0) 7384 if (vau == 0)
7359 vau = 1; 7385 vau = 1;
7360 set_up_vl15(dd, vau, vl15buf); 7386 set_up_vau(dd, vau);
7387
7388 /*
7389 * Set VL15 credits to 0 in global credit register. Cache remote VL15
7390 * credits value and wait for link-up interrupt ot set it.
7391 */
7392 set_up_vl15(dd, 0);
7393 dd->vl15buf_cached = vl15buf;
7361 7394
7362 /* set up the LCB CRC mode */ 7395 /* set up the LCB CRC mode */
7363 crc_mask = ppd->port_crc_mode_enabled & partner_supported_crc; 7396 crc_mask = ppd->port_crc_mode_enabled & partner_supported_crc;
diff --git a/drivers/infiniband/hw/hfi1/chip_registers.h b/drivers/infiniband/hw/hfi1/chip_registers.h
index 5bfa839d1c48..793514f1d15f 100644
--- a/drivers/infiniband/hw/hfi1/chip_registers.h
+++ b/drivers/infiniband/hw/hfi1/chip_registers.h
@@ -839,7 +839,9 @@
839#define SEND_CM_CTRL_FORCE_CREDIT_MODE_SMASK 0x8ull 839#define SEND_CM_CTRL_FORCE_CREDIT_MODE_SMASK 0x8ull
840#define SEND_CM_CTRL_RESETCSR 0x0000000000000020ull 840#define SEND_CM_CTRL_RESETCSR 0x0000000000000020ull
841#define SEND_CM_GLOBAL_CREDIT (TXE + 0x000000000508) 841#define SEND_CM_GLOBAL_CREDIT (TXE + 0x000000000508)
842#define SEND_CM_GLOBAL_CREDIT_AU_MASK 0x7ull
842#define SEND_CM_GLOBAL_CREDIT_AU_SHIFT 16 843#define SEND_CM_GLOBAL_CREDIT_AU_SHIFT 16
844#define SEND_CM_GLOBAL_CREDIT_AU_SMASK 0x70000ull
843#define SEND_CM_GLOBAL_CREDIT_RESETCSR 0x0000094000030000ull 845#define SEND_CM_GLOBAL_CREDIT_RESETCSR 0x0000094000030000ull
844#define SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_MASK 0xFFFFull 846#define SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_MASK 0xFFFFull
845#define SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_SHIFT 0 847#define SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_SHIFT 0
diff --git a/drivers/infiniband/hw/hfi1/hfi.h b/drivers/infiniband/hw/hfi1/hfi.h
index da322e6668cc..414a04a481c2 100644
--- a/drivers/infiniband/hw/hfi1/hfi.h
+++ b/drivers/infiniband/hw/hfi1/hfi.h
@@ -1045,6 +1045,14 @@ struct hfi1_devdata {
1045 /* initial vl15 credits to use */ 1045 /* initial vl15 credits to use */
1046 u16 vl15_init; 1046 u16 vl15_init;
1047 1047
1048 /*
1049 * Cached value for vl15buf, read during verify cap interrupt. VL15
1050 * credits are to be kept at 0 and set when handling the link-up
1051 * interrupt. This removes the possibility of receiving VL15 MAD
1052 * packets before this HFI is ready.
1053 */
1054 u16 vl15buf_cached;
1055
1048 /* Misc small ints */ 1056 /* Misc small ints */
1049 u8 n_krcv_queues; 1057 u8 n_krcv_queues;
1050 u8 qos_shift; 1058 u8 qos_shift;
@@ -1598,7 +1606,8 @@ int hfi1_rcvbuf_validate(u32 size, u8 type, u16 *encode);
1598int fm_get_table(struct hfi1_pportdata *ppd, int which, void *t); 1606int fm_get_table(struct hfi1_pportdata *ppd, int which, void *t);
1599int fm_set_table(struct hfi1_pportdata *ppd, int which, void *t); 1607int fm_set_table(struct hfi1_pportdata *ppd, int which, void *t);
1600 1608
1601void set_up_vl15(struct hfi1_devdata *dd, u8 vau, u16 vl15buf); 1609void set_up_vau(struct hfi1_devdata *dd, u8 vau);
1610void set_up_vl15(struct hfi1_devdata *dd, u16 vl15buf);
1602void reset_link_credits(struct hfi1_devdata *dd); 1611void reset_link_credits(struct hfi1_devdata *dd);
1603void assign_remote_cm_au_table(struct hfi1_devdata *dd, u8 vcu); 1612void assign_remote_cm_au_table(struct hfi1_devdata *dd, u8 vcu);
1604 1613
diff --git a/drivers/infiniband/hw/hfi1/intr.c b/drivers/infiniband/hw/hfi1/intr.c
index ba265d0ae93b..04a5082d5ac5 100644
--- a/drivers/infiniband/hw/hfi1/intr.c
+++ b/drivers/infiniband/hw/hfi1/intr.c
@@ -130,7 +130,8 @@ void handle_linkup_change(struct hfi1_devdata *dd, u32 linkup)
130 * the remote values. Both sides must be using the values. 130 * the remote values. Both sides must be using the values.
131 */ 131 */
132 if (quick_linkup || dd->icode == ICODE_FUNCTIONAL_SIMULATOR) { 132 if (quick_linkup || dd->icode == ICODE_FUNCTIONAL_SIMULATOR) {
133 set_up_vl15(dd, dd->vau, dd->vl15_init); 133 set_up_vau(dd, dd->vau);
134 set_up_vl15(dd, dd->vl15_init);
134 assign_remote_cm_au_table(dd, dd->vcu); 135 assign_remote_cm_au_table(dd, dd->vcu);
135 } 136 }
136 137
diff --git a/drivers/infiniband/hw/hfi1/pcie.c b/drivers/infiniband/hw/hfi1/pcie.c
index 93faf86d54b6..6a9f6f9819e1 100644
--- a/drivers/infiniband/hw/hfi1/pcie.c
+++ b/drivers/infiniband/hw/hfi1/pcie.c
@@ -207,8 +207,8 @@ int hfi1_pcie_ddinit(struct hfi1_devdata *dd, struct pci_dev *pdev)
207 /* 207 /*
208 * Save BARs and command to rewrite after device reset. 208 * Save BARs and command to rewrite after device reset.
209 */ 209 */
210 dd->pcibar0 = addr; 210 pci_read_config_dword(dd->pcidev, PCI_BASE_ADDRESS_0, &dd->pcibar0);
211 dd->pcibar1 = addr >> 32; 211 pci_read_config_dword(dd->pcidev, PCI_BASE_ADDRESS_1, &dd->pcibar1);
212 pci_read_config_dword(dd->pcidev, PCI_ROM_ADDRESS, &dd->pci_rom); 212 pci_read_config_dword(dd->pcidev, PCI_ROM_ADDRESS, &dd->pci_rom);
213 pci_read_config_word(dd->pcidev, PCI_COMMAND, &dd->pci_command); 213 pci_read_config_word(dd->pcidev, PCI_COMMAND, &dd->pci_command);
214 pcie_capability_read_word(dd->pcidev, PCI_EXP_DEVCTL, &dd->pcie_devctl); 214 pcie_capability_read_word(dd->pcidev, PCI_EXP_DEVCTL, &dd->pcie_devctl);
diff --git a/drivers/infiniband/hw/hfi1/rc.c b/drivers/infiniband/hw/hfi1/rc.c
index 069bdaf061ab..1080778a1f7c 100644
--- a/drivers/infiniband/hw/hfi1/rc.c
+++ b/drivers/infiniband/hw/hfi1/rc.c
@@ -2159,8 +2159,11 @@ send_last:
2159 ret = hfi1_rvt_get_rwqe(qp, 1); 2159 ret = hfi1_rvt_get_rwqe(qp, 1);
2160 if (ret < 0) 2160 if (ret < 0)
2161 goto nack_op_err; 2161 goto nack_op_err;
2162 if (!ret) 2162 if (!ret) {
2163 /* peer will send again */
2164 rvt_put_ss(&qp->r_sge);
2163 goto rnr_nak; 2165 goto rnr_nak;
2166 }
2164 wc.ex.imm_data = ohdr->u.rc.imm_data; 2167 wc.ex.imm_data = ohdr->u.rc.imm_data;
2165 wc.wc_flags = IB_WC_WITH_IMM; 2168 wc.wc_flags = IB_WC_WITH_IMM;
2166 goto send_last; 2169 goto send_last;
diff --git a/drivers/infiniband/hw/hfi1/sysfs.c b/drivers/infiniband/hw/hfi1/sysfs.c
index 50d140d25e38..2f3bbcac1e34 100644
--- a/drivers/infiniband/hw/hfi1/sysfs.c
+++ b/drivers/infiniband/hw/hfi1/sysfs.c
@@ -196,7 +196,8 @@ static const struct sysfs_ops port_cc_sysfs_ops = {
196}; 196};
197 197
198static struct attribute *port_cc_default_attributes[] = { 198static struct attribute *port_cc_default_attributes[] = {
199 &cc_prescan_attr.attr 199 &cc_prescan_attr.attr,
200 NULL
200}; 201};
201 202
202static struct kobj_type port_cc_ktype = { 203static struct kobj_type port_cc_ktype = {
diff --git a/drivers/infiniband/hw/i40iw/i40iw_cm.c b/drivers/infiniband/hw/i40iw/i40iw_cm.c
index f3bc01bce483..6ae98aa7f74e 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_cm.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_cm.c
@@ -784,7 +784,6 @@ static void i40iw_build_mpa_v2(struct i40iw_cm_node *cm_node,
784 } 784 }
785 785
786 ctrl_ird |= IETF_PEER_TO_PEER; 786 ctrl_ird |= IETF_PEER_TO_PEER;
787 ctrl_ird |= IETF_FLPDU_ZERO_LEN;
788 787
789 switch (mpa_key) { 788 switch (mpa_key) {
790 case MPA_KEY_REQUEST: 789 case MPA_KEY_REQUEST:
@@ -2446,8 +2445,8 @@ static void i40iw_handle_rcv_mpa(struct i40iw_cm_node *cm_node,
2446 } else { 2445 } else {
2447 type = I40IW_CM_EVENT_CONNECTED; 2446 type = I40IW_CM_EVENT_CONNECTED;
2448 cm_node->state = I40IW_CM_STATE_OFFLOADED; 2447 cm_node->state = I40IW_CM_STATE_OFFLOADED;
2449 i40iw_send_ack(cm_node);
2450 } 2448 }
2449 i40iw_send_ack(cm_node);
2451 break; 2450 break;
2452 default: 2451 default:
2453 pr_err("%s wrong cm_node state =%d\n", __func__, cm_node->state); 2452 pr_err("%s wrong cm_node state =%d\n", __func__, cm_node->state);
diff --git a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
index f82483b3d1e7..a027e2072477 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
@@ -285,28 +285,20 @@ void i40iw_change_l2params(struct i40iw_sc_vsi *vsi, struct i40iw_l2params *l2pa
285 struct i40iw_sc_dev *dev = vsi->dev; 285 struct i40iw_sc_dev *dev = vsi->dev;
286 struct i40iw_sc_qp *qp = NULL; 286 struct i40iw_sc_qp *qp = NULL;
287 bool qs_handle_change = false; 287 bool qs_handle_change = false;
288 bool mss_change = false;
289 unsigned long flags; 288 unsigned long flags;
290 u16 qs_handle; 289 u16 qs_handle;
291 int i; 290 int i;
292 291
293 if (vsi->mss != l2params->mss) { 292 vsi->mss = l2params->mss;
294 mss_change = true;
295 vsi->mss = l2params->mss;
296 }
297 293
298 i40iw_fill_qos_list(l2params->qs_handle_list); 294 i40iw_fill_qos_list(l2params->qs_handle_list);
299 for (i = 0; i < I40IW_MAX_USER_PRIORITY; i++) { 295 for (i = 0; i < I40IW_MAX_USER_PRIORITY; i++) {
300 qs_handle = l2params->qs_handle_list[i]; 296 qs_handle = l2params->qs_handle_list[i];
301 if (vsi->qos[i].qs_handle != qs_handle) 297 if (vsi->qos[i].qs_handle != qs_handle)
302 qs_handle_change = true; 298 qs_handle_change = true;
303 else if (!mss_change)
304 continue; /* no MSS nor qs handle change */
305 spin_lock_irqsave(&vsi->qos[i].lock, flags); 299 spin_lock_irqsave(&vsi->qos[i].lock, flags);
306 qp = i40iw_get_qp(&vsi->qos[i].qplist, qp); 300 qp = i40iw_get_qp(&vsi->qos[i].qplist, qp);
307 while (qp) { 301 while (qp) {
308 if (mss_change)
309 i40iw_qp_mss_modify(dev, qp);
310 if (qs_handle_change) { 302 if (qs_handle_change) {
311 qp->qs_handle = qs_handle; 303 qp->qs_handle = qs_handle;
312 /* issue cqp suspend command */ 304 /* issue cqp suspend command */
@@ -2395,7 +2387,6 @@ static enum i40iw_status_code i40iw_sc_qp_modify(
2395 2387
2396 set_64bit_val(wqe, 2388 set_64bit_val(wqe,
2397 8, 2389 8,
2398 LS_64(info->new_mss, I40IW_CQPSQ_QP_NEWMSS) |
2399 LS_64(term_len, I40IW_CQPSQ_QP_TERMLEN)); 2390 LS_64(term_len, I40IW_CQPSQ_QP_TERMLEN));
2400 2391
2401 set_64bit_val(wqe, 16, qp->hw_host_ctx_pa); 2392 set_64bit_val(wqe, 16, qp->hw_host_ctx_pa);
@@ -2410,7 +2401,6 @@ static enum i40iw_status_code i40iw_sc_qp_modify(
2410 LS_64(info->cq_num_valid, I40IW_CQPSQ_QP_CQNUMVALID) | 2401 LS_64(info->cq_num_valid, I40IW_CQPSQ_QP_CQNUMVALID) |
2411 LS_64(info->force_loopback, I40IW_CQPSQ_QP_FORCELOOPBACK) | 2402 LS_64(info->force_loopback, I40IW_CQPSQ_QP_FORCELOOPBACK) |
2412 LS_64(qp->qp_type, I40IW_CQPSQ_QP_QPTYPE) | 2403 LS_64(qp->qp_type, I40IW_CQPSQ_QP_QPTYPE) |
2413 LS_64(info->mss_change, I40IW_CQPSQ_QP_MSSCHANGE) |
2414 LS_64(info->static_rsrc, I40IW_CQPSQ_QP_STATRSRC) | 2404 LS_64(info->static_rsrc, I40IW_CQPSQ_QP_STATRSRC) |
2415 LS_64(info->remove_hash_idx, I40IW_CQPSQ_QP_REMOVEHASHENTRY) | 2405 LS_64(info->remove_hash_idx, I40IW_CQPSQ_QP_REMOVEHASHENTRY) |
2416 LS_64(term_actions, I40IW_CQPSQ_QP_TERMACT) | 2406 LS_64(term_actions, I40IW_CQPSQ_QP_TERMACT) |
diff --git a/drivers/infiniband/hw/i40iw/i40iw_main.c b/drivers/infiniband/hw/i40iw/i40iw_main.c
index 2728af3103ce..a3f18a22f5ed 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_main.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_main.c
@@ -1319,13 +1319,13 @@ static enum i40iw_status_code i40iw_initialize_dev(struct i40iw_device *iwdev,
1319 status = i40iw_obj_aligned_mem(iwdev, &mem, I40IW_QUERY_FPM_BUF_SIZE, 1319 status = i40iw_obj_aligned_mem(iwdev, &mem, I40IW_QUERY_FPM_BUF_SIZE,
1320 I40IW_FPM_QUERY_BUF_ALIGNMENT_MASK); 1320 I40IW_FPM_QUERY_BUF_ALIGNMENT_MASK);
1321 if (status) 1321 if (status)
1322 goto exit; 1322 goto error;
1323 info.fpm_query_buf_pa = mem.pa; 1323 info.fpm_query_buf_pa = mem.pa;
1324 info.fpm_query_buf = mem.va; 1324 info.fpm_query_buf = mem.va;
1325 status = i40iw_obj_aligned_mem(iwdev, &mem, I40IW_COMMIT_FPM_BUF_SIZE, 1325 status = i40iw_obj_aligned_mem(iwdev, &mem, I40IW_COMMIT_FPM_BUF_SIZE,
1326 I40IW_FPM_COMMIT_BUF_ALIGNMENT_MASK); 1326 I40IW_FPM_COMMIT_BUF_ALIGNMENT_MASK);
1327 if (status) 1327 if (status)
1328 goto exit; 1328 goto error;
1329 info.fpm_commit_buf_pa = mem.pa; 1329 info.fpm_commit_buf_pa = mem.pa;
1330 info.fpm_commit_buf = mem.va; 1330 info.fpm_commit_buf = mem.va;
1331 info.hmc_fn_id = ldev->fid; 1331 info.hmc_fn_id = ldev->fid;
@@ -1347,11 +1347,9 @@ static enum i40iw_status_code i40iw_initialize_dev(struct i40iw_device *iwdev,
1347 info.exception_lan_queue = 1; 1347 info.exception_lan_queue = 1;
1348 info.vchnl_send = i40iw_virtchnl_send; 1348 info.vchnl_send = i40iw_virtchnl_send;
1349 status = i40iw_device_init(&iwdev->sc_dev, &info); 1349 status = i40iw_device_init(&iwdev->sc_dev, &info);
1350exit: 1350
1351 if (status) { 1351 if (status)
1352 kfree(iwdev->hmc_info_mem); 1352 goto error;
1353 iwdev->hmc_info_mem = NULL;
1354 }
1355 memset(&vsi_info, 0, sizeof(vsi_info)); 1353 memset(&vsi_info, 0, sizeof(vsi_info));
1356 vsi_info.dev = &iwdev->sc_dev; 1354 vsi_info.dev = &iwdev->sc_dev;
1357 vsi_info.back_vsi = (void *)iwdev; 1355 vsi_info.back_vsi = (void *)iwdev;
@@ -1362,11 +1360,19 @@ exit:
1362 memset(&stats_info, 0, sizeof(stats_info)); 1360 memset(&stats_info, 0, sizeof(stats_info));
1363 stats_info.fcn_id = ldev->fid; 1361 stats_info.fcn_id = ldev->fid;
1364 stats_info.pestat = kzalloc(sizeof(*stats_info.pestat), GFP_KERNEL); 1362 stats_info.pestat = kzalloc(sizeof(*stats_info.pestat), GFP_KERNEL);
1363 if (!stats_info.pestat) {
1364 status = I40IW_ERR_NO_MEMORY;
1365 goto error;
1366 }
1365 stats_info.stats_initialize = true; 1367 stats_info.stats_initialize = true;
1366 if (stats_info.pestat) 1368 if (stats_info.pestat)
1367 i40iw_vsi_stats_init(&iwdev->vsi, &stats_info); 1369 i40iw_vsi_stats_init(&iwdev->vsi, &stats_info);
1368 } 1370 }
1369 return status; 1371 return status;
1372error:
1373 kfree(iwdev->hmc_info_mem);
1374 iwdev->hmc_info_mem = NULL;
1375 return status;
1370} 1376}
1371 1377
1372/** 1378/**
diff --git a/drivers/infiniband/hw/i40iw/i40iw_osdep.h b/drivers/infiniband/hw/i40iw/i40iw_osdep.h
index aa66c1c63dfa..f27be3e7830b 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_osdep.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_osdep.h
@@ -199,7 +199,6 @@ void i40iw_cqp_spawn_worker(struct i40iw_sc_dev *dev,
199 struct i40iw_virtchnl_work_info *work_info, u32 iw_vf_idx); 199 struct i40iw_virtchnl_work_info *work_info, u32 iw_vf_idx);
200void *i40iw_remove_head(struct list_head *list); 200void *i40iw_remove_head(struct list_head *list);
201void i40iw_qp_suspend_resume(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp, bool suspend); 201void i40iw_qp_suspend_resume(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp, bool suspend);
202void i40iw_qp_mss_modify(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp);
203 202
204void i40iw_term_modify_qp(struct i40iw_sc_qp *qp, u8 next_state, u8 term, u8 term_len); 203void i40iw_term_modify_qp(struct i40iw_sc_qp *qp, u8 next_state, u8 term, u8 term_len);
205void i40iw_terminate_done(struct i40iw_sc_qp *qp, int timeout_occurred); 204void i40iw_terminate_done(struct i40iw_sc_qp *qp, int timeout_occurred);
diff --git a/drivers/infiniband/hw/i40iw/i40iw_type.h b/drivers/infiniband/hw/i40iw/i40iw_type.h
index 7b76259752b0..959ec81fba99 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_type.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_type.h
@@ -541,7 +541,6 @@ struct i40iw_create_qp_info {
541struct i40iw_modify_qp_info { 541struct i40iw_modify_qp_info {
542 u64 rx_win0; 542 u64 rx_win0;
543 u64 rx_win1; 543 u64 rx_win1;
544 u16 new_mss;
545 u8 next_iwarp_state; 544 u8 next_iwarp_state;
546 u8 termlen; 545 u8 termlen;
547 bool ord_valid; 546 bool ord_valid;
@@ -554,7 +553,6 @@ struct i40iw_modify_qp_info {
554 bool dont_send_term; 553 bool dont_send_term;
555 bool dont_send_fin; 554 bool dont_send_fin;
556 bool cached_var_valid; 555 bool cached_var_valid;
557 bool mss_change;
558 bool force_loopback; 556 bool force_loopback;
559}; 557};
560 558
diff --git a/drivers/infiniband/hw/i40iw/i40iw_utils.c b/drivers/infiniband/hw/i40iw/i40iw_utils.c
index 409a3781e735..56d986924a4c 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_utils.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_utils.c
@@ -757,23 +757,6 @@ void i40iw_qp_suspend_resume(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp, b
757} 757}
758 758
759/** 759/**
760 * i40iw_qp_mss_modify - modify mss for qp
761 * @dev: hardware control device structure
762 * @qp: hardware control qp
763 */
764void i40iw_qp_mss_modify(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp)
765{
766 struct i40iw_device *iwdev = (struct i40iw_device *)dev->back_dev;
767 struct i40iw_qp *iwqp = (struct i40iw_qp *)qp->back_qp;
768 struct i40iw_modify_qp_info info;
769
770 memset(&info, 0, sizeof(info));
771 info.mss_change = true;
772 info.new_mss = qp->vsi->mss;
773 i40iw_hw_modify_qp(iwdev, iwqp, &info, false);
774}
775
776/**
777 * i40iw_term_modify_qp - modify qp for term message 760 * i40iw_term_modify_qp - modify qp for term message
778 * @qp: hardware control qp 761 * @qp: hardware control qp
779 * @next_state: qp's next state 762 * @next_state: qp's next state
diff --git a/drivers/infiniband/hw/i40iw/i40iw_virtchnl.c b/drivers/infiniband/hw/i40iw/i40iw_virtchnl.c
index f4d13683a403..48fd327f876b 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_virtchnl.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_virtchnl.c
@@ -443,10 +443,7 @@ enum i40iw_status_code i40iw_vchnl_recv_pf(struct i40iw_sc_dev *dev,
443 if (!dev->vchnl_up) 443 if (!dev->vchnl_up)
444 return I40IW_ERR_NOT_READY; 444 return I40IW_ERR_NOT_READY;
445 if (vchnl_msg->iw_op_code == I40IW_VCHNL_OP_GET_VER) { 445 if (vchnl_msg->iw_op_code == I40IW_VCHNL_OP_GET_VER) {
446 if (vchnl_msg->iw_op_ver != I40IW_VCHNL_OP_GET_VER_V0) 446 vchnl_pf_send_get_ver_resp(dev, vf_id, vchnl_msg);
447 vchnl_pf_send_get_ver_resp(dev, vf_id, vchnl_msg);
448 else
449 vchnl_pf_send_get_ver_resp(dev, vf_id, vchnl_msg);
450 return I40IW_SUCCESS; 447 return I40IW_SUCCESS;
451 } 448 }
452 for (iw_vf_idx = 0; iw_vf_idx < I40IW_MAX_PE_ENABLED_VF_COUNT; iw_vf_idx++) { 449 for (iw_vf_idx = 0; iw_vf_idx < I40IW_MAX_PE_ENABLED_VF_COUNT; iw_vf_idx++) {
diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
index b4694717f6f3..21d31cb1325f 100644
--- a/drivers/infiniband/hw/mlx4/mad.c
+++ b/drivers/infiniband/hw/mlx4/mad.c
@@ -1578,6 +1578,7 @@ static void mlx4_ib_multiplex_mad(struct mlx4_ib_demux_pv_ctx *ctx, struct ib_wc
1578 if (port < 0) 1578 if (port < 0)
1579 return; 1579 return;
1580 ah.av.ib.port_pd = cpu_to_be32(port << 24 | (be32_to_cpu(ah.av.ib.port_pd) & 0xffffff)); 1580 ah.av.ib.port_pd = cpu_to_be32(port << 24 | (be32_to_cpu(ah.av.ib.port_pd) & 0xffffff));
1581 ah.ibah.type = rdma_ah_find_type(&dev->ib_dev, port);
1581 1582
1582 mlx4_ib_query_ah(&ah.ibah, &ah_attr); 1583 mlx4_ib_query_ah(&ah.ibah, &ah_attr);
1583 if (rdma_ah_get_ah_flags(&ah_attr) & IB_AH_GRH) 1584 if (rdma_ah_get_ah_flags(&ah_attr) & IB_AH_GRH)
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index d45772da0963..9ecc089d4529 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -2979,6 +2979,18 @@ error_0:
2979 return ret; 2979 return ret;
2980} 2980}
2981 2981
2982static u8 mlx5_get_umr_fence(u8 umr_fence_cap)
2983{
2984 switch (umr_fence_cap) {
2985 case MLX5_CAP_UMR_FENCE_NONE:
2986 return MLX5_FENCE_MODE_NONE;
2987 case MLX5_CAP_UMR_FENCE_SMALL:
2988 return MLX5_FENCE_MODE_INITIATOR_SMALL;
2989 default:
2990 return MLX5_FENCE_MODE_STRONG_ORDERING;
2991 }
2992}
2993
2982static int create_dev_resources(struct mlx5_ib_resources *devr) 2994static int create_dev_resources(struct mlx5_ib_resources *devr)
2983{ 2995{
2984 struct ib_srq_init_attr attr; 2996 struct ib_srq_init_attr attr;
@@ -3680,8 +3692,10 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
3680 dev->ib_dev.check_mr_status = mlx5_ib_check_mr_status; 3692 dev->ib_dev.check_mr_status = mlx5_ib_check_mr_status;
3681 dev->ib_dev.get_port_immutable = mlx5_port_immutable; 3693 dev->ib_dev.get_port_immutable = mlx5_port_immutable;
3682 dev->ib_dev.get_dev_fw_str = get_dev_fw_str; 3694 dev->ib_dev.get_dev_fw_str = get_dev_fw_str;
3683 dev->ib_dev.alloc_rdma_netdev = mlx5_ib_alloc_rdma_netdev; 3695 if (MLX5_CAP_GEN(mdev, ipoib_enhanced_offloads)) {
3684 dev->ib_dev.free_rdma_netdev = mlx5_ib_free_rdma_netdev; 3696 dev->ib_dev.alloc_rdma_netdev = mlx5_ib_alloc_rdma_netdev;
3697 dev->ib_dev.free_rdma_netdev = mlx5_ib_free_rdma_netdev;
3698 }
3685 if (mlx5_core_is_pf(mdev)) { 3699 if (mlx5_core_is_pf(mdev)) {
3686 dev->ib_dev.get_vf_config = mlx5_ib_get_vf_config; 3700 dev->ib_dev.get_vf_config = mlx5_ib_get_vf_config;
3687 dev->ib_dev.set_vf_link_state = mlx5_ib_set_vf_link_state; 3701 dev->ib_dev.set_vf_link_state = mlx5_ib_set_vf_link_state;
@@ -3693,6 +3707,8 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
3693 3707
3694 mlx5_ib_internal_fill_odp_caps(dev); 3708 mlx5_ib_internal_fill_odp_caps(dev);
3695 3709
3710 dev->umr_fence = mlx5_get_umr_fence(MLX5_CAP_GEN(mdev, umr_fence));
3711
3696 if (MLX5_CAP_GEN(mdev, imaicl)) { 3712 if (MLX5_CAP_GEN(mdev, imaicl)) {
3697 dev->ib_dev.alloc_mw = mlx5_ib_alloc_mw; 3713 dev->ib_dev.alloc_mw = mlx5_ib_alloc_mw;
3698 dev->ib_dev.dealloc_mw = mlx5_ib_dealloc_mw; 3714 dev->ib_dev.dealloc_mw = mlx5_ib_dealloc_mw;
diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index 38c877bc45e5..bdcf25410c99 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -349,7 +349,7 @@ struct mlx5_ib_qp {
349 struct mlx5_ib_wq rq; 349 struct mlx5_ib_wq rq;
350 350
351 u8 sq_signal_bits; 351 u8 sq_signal_bits;
352 u8 fm_cache; 352 u8 next_fence;
353 struct mlx5_ib_wq sq; 353 struct mlx5_ib_wq sq;
354 354
355 /* serialize qp state modifications 355 /* serialize qp state modifications
@@ -654,6 +654,7 @@ struct mlx5_ib_dev {
654 struct mlx5_ib_port *port; 654 struct mlx5_ib_port *port;
655 struct mlx5_sq_bfreg bfreg; 655 struct mlx5_sq_bfreg bfreg;
656 struct mlx5_sq_bfreg fp_bfreg; 656 struct mlx5_sq_bfreg fp_bfreg;
657 u8 umr_fence;
657}; 658};
658 659
659static inline struct mlx5_ib_cq *to_mibcq(struct mlx5_core_cq *mcq) 660static inline struct mlx5_ib_cq *to_mibcq(struct mlx5_core_cq *mcq)
diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
index 93959e1e43a3..ebb6768684de 100644
--- a/drivers/infiniband/hw/mlx5/qp.c
+++ b/drivers/infiniband/hw/mlx5/qp.c
@@ -3738,24 +3738,6 @@ static void dump_wqe(struct mlx5_ib_qp *qp, int idx, int size_16)
3738 } 3738 }
3739} 3739}
3740 3740
3741static u8 get_fence(u8 fence, struct ib_send_wr *wr)
3742{
3743 if (unlikely(wr->opcode == IB_WR_LOCAL_INV &&
3744 wr->send_flags & IB_SEND_FENCE))
3745 return MLX5_FENCE_MODE_STRONG_ORDERING;
3746
3747 if (unlikely(fence)) {
3748 if (wr->send_flags & IB_SEND_FENCE)
3749 return MLX5_FENCE_MODE_SMALL_AND_FENCE;
3750 else
3751 return fence;
3752 } else if (unlikely(wr->send_flags & IB_SEND_FENCE)) {
3753 return MLX5_FENCE_MODE_FENCE;
3754 }
3755
3756 return 0;
3757}
3758
3759static int begin_wqe(struct mlx5_ib_qp *qp, void **seg, 3741static int begin_wqe(struct mlx5_ib_qp *qp, void **seg,
3760 struct mlx5_wqe_ctrl_seg **ctrl, 3742 struct mlx5_wqe_ctrl_seg **ctrl,
3761 struct ib_send_wr *wr, unsigned *idx, 3743 struct ib_send_wr *wr, unsigned *idx,
@@ -3784,8 +3766,7 @@ static int begin_wqe(struct mlx5_ib_qp *qp, void **seg,
3784static void finish_wqe(struct mlx5_ib_qp *qp, 3766static void finish_wqe(struct mlx5_ib_qp *qp,
3785 struct mlx5_wqe_ctrl_seg *ctrl, 3767 struct mlx5_wqe_ctrl_seg *ctrl,
3786 u8 size, unsigned idx, u64 wr_id, 3768 u8 size, unsigned idx, u64 wr_id,
3787 int nreq, u8 fence, u8 next_fence, 3769 int nreq, u8 fence, u32 mlx5_opcode)
3788 u32 mlx5_opcode)
3789{ 3770{
3790 u8 opmod = 0; 3771 u8 opmod = 0;
3791 3772
@@ -3793,7 +3774,6 @@ static void finish_wqe(struct mlx5_ib_qp *qp,
3793 mlx5_opcode | ((u32)opmod << 24)); 3774 mlx5_opcode | ((u32)opmod << 24));
3794 ctrl->qpn_ds = cpu_to_be32(size | (qp->trans_qp.base.mqp.qpn << 8)); 3775 ctrl->qpn_ds = cpu_to_be32(size | (qp->trans_qp.base.mqp.qpn << 8));
3795 ctrl->fm_ce_se |= fence; 3776 ctrl->fm_ce_se |= fence;
3796 qp->fm_cache = next_fence;
3797 if (unlikely(qp->wq_sig)) 3777 if (unlikely(qp->wq_sig))
3798 ctrl->signature = wq_sig(ctrl); 3778 ctrl->signature = wq_sig(ctrl);
3799 3779
@@ -3853,7 +3833,6 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
3853 goto out; 3833 goto out;
3854 } 3834 }
3855 3835
3856 fence = qp->fm_cache;
3857 num_sge = wr->num_sge; 3836 num_sge = wr->num_sge;
3858 if (unlikely(num_sge > qp->sq.max_gs)) { 3837 if (unlikely(num_sge > qp->sq.max_gs)) {
3859 mlx5_ib_warn(dev, "\n"); 3838 mlx5_ib_warn(dev, "\n");
@@ -3870,6 +3849,19 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
3870 goto out; 3849 goto out;
3871 } 3850 }
3872 3851
3852 if (wr->opcode == IB_WR_LOCAL_INV ||
3853 wr->opcode == IB_WR_REG_MR) {
3854 fence = dev->umr_fence;
3855 next_fence = MLX5_FENCE_MODE_INITIATOR_SMALL;
3856 } else if (wr->send_flags & IB_SEND_FENCE) {
3857 if (qp->next_fence)
3858 fence = MLX5_FENCE_MODE_SMALL_AND_FENCE;
3859 else
3860 fence = MLX5_FENCE_MODE_FENCE;
3861 } else {
3862 fence = qp->next_fence;
3863 }
3864
3873 switch (ibqp->qp_type) { 3865 switch (ibqp->qp_type) {
3874 case IB_QPT_XRC_INI: 3866 case IB_QPT_XRC_INI:
3875 xrc = seg; 3867 xrc = seg;
@@ -3896,7 +3888,6 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
3896 goto out; 3888 goto out;
3897 3889
3898 case IB_WR_LOCAL_INV: 3890 case IB_WR_LOCAL_INV:
3899 next_fence = MLX5_FENCE_MODE_INITIATOR_SMALL;
3900 qp->sq.wr_data[idx] = IB_WR_LOCAL_INV; 3891 qp->sq.wr_data[idx] = IB_WR_LOCAL_INV;
3901 ctrl->imm = cpu_to_be32(wr->ex.invalidate_rkey); 3892 ctrl->imm = cpu_to_be32(wr->ex.invalidate_rkey);
3902 set_linv_wr(qp, &seg, &size); 3893 set_linv_wr(qp, &seg, &size);
@@ -3904,7 +3895,6 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
3904 break; 3895 break;
3905 3896
3906 case IB_WR_REG_MR: 3897 case IB_WR_REG_MR:
3907 next_fence = MLX5_FENCE_MODE_INITIATOR_SMALL;
3908 qp->sq.wr_data[idx] = IB_WR_REG_MR; 3898 qp->sq.wr_data[idx] = IB_WR_REG_MR;
3909 ctrl->imm = cpu_to_be32(reg_wr(wr)->key); 3899 ctrl->imm = cpu_to_be32(reg_wr(wr)->key);
3910 err = set_reg_wr(qp, reg_wr(wr), &seg, &size); 3900 err = set_reg_wr(qp, reg_wr(wr), &seg, &size);
@@ -3927,9 +3917,8 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
3927 goto out; 3917 goto out;
3928 } 3918 }
3929 3919
3930 finish_wqe(qp, ctrl, size, idx, wr->wr_id, 3920 finish_wqe(qp, ctrl, size, idx, wr->wr_id, nreq,
3931 nreq, get_fence(fence, wr), 3921 fence, MLX5_OPCODE_UMR);
3932 next_fence, MLX5_OPCODE_UMR);
3933 /* 3922 /*
3934 * SET_PSV WQEs are not signaled and solicited 3923 * SET_PSV WQEs are not signaled and solicited
3935 * on error 3924 * on error
@@ -3954,9 +3943,8 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
3954 goto out; 3943 goto out;
3955 } 3944 }
3956 3945
3957 finish_wqe(qp, ctrl, size, idx, wr->wr_id, 3946 finish_wqe(qp, ctrl, size, idx, wr->wr_id, nreq,
3958 nreq, get_fence(fence, wr), 3947 fence, MLX5_OPCODE_SET_PSV);
3959 next_fence, MLX5_OPCODE_SET_PSV);
3960 err = begin_wqe(qp, &seg, &ctrl, wr, 3948 err = begin_wqe(qp, &seg, &ctrl, wr,
3961 &idx, &size, nreq); 3949 &idx, &size, nreq);
3962 if (err) { 3950 if (err) {
@@ -3966,7 +3954,6 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
3966 goto out; 3954 goto out;
3967 } 3955 }
3968 3956
3969 next_fence = MLX5_FENCE_MODE_INITIATOR_SMALL;
3970 err = set_psv_wr(&sig_handover_wr(wr)->sig_attrs->wire, 3957 err = set_psv_wr(&sig_handover_wr(wr)->sig_attrs->wire,
3971 mr->sig->psv_wire.psv_idx, &seg, 3958 mr->sig->psv_wire.psv_idx, &seg,
3972 &size); 3959 &size);
@@ -3976,9 +3963,9 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
3976 goto out; 3963 goto out;
3977 } 3964 }
3978 3965
3979 finish_wqe(qp, ctrl, size, idx, wr->wr_id, 3966 finish_wqe(qp, ctrl, size, idx, wr->wr_id, nreq,
3980 nreq, get_fence(fence, wr), 3967 fence, MLX5_OPCODE_SET_PSV);
3981 next_fence, MLX5_OPCODE_SET_PSV); 3968 qp->next_fence = MLX5_FENCE_MODE_INITIATOR_SMALL;
3982 num_sge = 0; 3969 num_sge = 0;
3983 goto skip_psv; 3970 goto skip_psv;
3984 3971
@@ -4089,8 +4076,8 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
4089 } 4076 }
4090 } 4077 }
4091 4078
4092 finish_wqe(qp, ctrl, size, idx, wr->wr_id, nreq, 4079 qp->next_fence = next_fence;
4093 get_fence(fence, wr), next_fence, 4080 finish_wqe(qp, ctrl, size, idx, wr->wr_id, nreq, fence,
4094 mlx5_ib_opcode[wr->opcode]); 4081 mlx5_ib_opcode[wr->opcode]);
4095skip_psv: 4082skip_psv:
4096 if (0) 4083 if (0)
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index fb983df7c157..30b256a2c54e 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -610,7 +610,6 @@ static void build_mpa_v2(struct nes_cm_node *cm_node,
610 ctrl_ord = cm_node->ord_size & IETF_NO_IRD_ORD; 610 ctrl_ord = cm_node->ord_size & IETF_NO_IRD_ORD;
611 } 611 }
612 ctrl_ird |= IETF_PEER_TO_PEER; 612 ctrl_ird |= IETF_PEER_TO_PEER;
613 ctrl_ird |= IETF_FLPDU_ZERO_LEN;
614 613
615 switch (mpa_key) { 614 switch (mpa_key) {
616 case MPA_KEY_REQUEST: 615 case MPA_KEY_REQUEST:
@@ -1826,7 +1825,7 @@ static void handle_rcv_mpa(struct nes_cm_node *cm_node, struct sk_buff *skb)
1826 type = NES_CM_EVENT_CONNECTED; 1825 type = NES_CM_EVENT_CONNECTED;
1827 cm_node->state = NES_CM_STATE_TSA; 1826 cm_node->state = NES_CM_STATE_TSA;
1828 } 1827 }
1829 1828 send_ack(cm_node, NULL);
1830 break; 1829 break;
1831 default: 1830 default:
1832 WARN_ON(1); 1831 WARN_ON(1);
diff --git a/drivers/infiniband/hw/qedr/qedr.h b/drivers/infiniband/hw/qedr/qedr.h
index aa08c76a4245..d961f79b317c 100644
--- a/drivers/infiniband/hw/qedr/qedr.h
+++ b/drivers/infiniband/hw/qedr/qedr.h
@@ -58,7 +58,10 @@
58#define QEDR_MSG_QP " QP" 58#define QEDR_MSG_QP " QP"
59#define QEDR_MSG_GSI " GSI" 59#define QEDR_MSG_GSI " GSI"
60 60
61#define QEDR_CQ_MAGIC_NUMBER (0x11223344) 61#define QEDR_CQ_MAGIC_NUMBER (0x11223344)
62
63#define FW_PAGE_SIZE (RDMA_RING_PAGE_SIZE)
64#define FW_PAGE_SHIFT (12)
62 65
63struct qedr_dev; 66struct qedr_dev;
64 67
diff --git a/drivers/infiniband/hw/qedr/qedr_cm.c b/drivers/infiniband/hw/qedr/qedr_cm.c
index 3d7705cec770..d86dbe814d98 100644
--- a/drivers/infiniband/hw/qedr/qedr_cm.c
+++ b/drivers/infiniband/hw/qedr/qedr_cm.c
@@ -270,11 +270,13 @@ static inline int qedr_gsi_build_header(struct qedr_dev *dev,
270 return rc; 270 return rc;
271 } 271 }
272 272
273 vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev); 273 if (sgid_attr.ndev) {
274 if (vlan_id < VLAN_CFI_MASK) 274 vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev);
275 has_vlan = true; 275 if (vlan_id < VLAN_CFI_MASK)
276 if (sgid_attr.ndev) 276 has_vlan = true;
277
277 dev_put(sgid_attr.ndev); 278 dev_put(sgid_attr.ndev);
279 }
278 280
279 if (!memcmp(&sgid, &zgid, sizeof(sgid))) { 281 if (!memcmp(&sgid, &zgid, sizeof(sgid))) {
280 DP_ERR(dev, "gsi post send: GID not found GID index %d\n", 282 DP_ERR(dev, "gsi post send: GID not found GID index %d\n",
diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
index 17685cfea6a2..d6723c365c7f 100644
--- a/drivers/infiniband/hw/qedr/verbs.c
+++ b/drivers/infiniband/hw/qedr/verbs.c
@@ -653,14 +653,15 @@ static int qedr_prepare_pbl_tbl(struct qedr_dev *dev,
653 653
654static void qedr_populate_pbls(struct qedr_dev *dev, struct ib_umem *umem, 654static void qedr_populate_pbls(struct qedr_dev *dev, struct ib_umem *umem,
655 struct qedr_pbl *pbl, 655 struct qedr_pbl *pbl,
656 struct qedr_pbl_info *pbl_info) 656 struct qedr_pbl_info *pbl_info, u32 pg_shift)
657{ 657{
658 int shift, pg_cnt, pages, pbe_cnt, total_num_pbes = 0; 658 int shift, pg_cnt, pages, pbe_cnt, total_num_pbes = 0;
659 u32 fw_pg_cnt, fw_pg_per_umem_pg;
659 struct qedr_pbl *pbl_tbl; 660 struct qedr_pbl *pbl_tbl;
660 struct scatterlist *sg; 661 struct scatterlist *sg;
661 struct regpair *pbe; 662 struct regpair *pbe;
663 u64 pg_addr;
662 int entry; 664 int entry;
663 u32 addr;
664 665
665 if (!pbl_info->num_pbes) 666 if (!pbl_info->num_pbes)
666 return; 667 return;
@@ -683,29 +684,35 @@ static void qedr_populate_pbls(struct qedr_dev *dev, struct ib_umem *umem,
683 684
684 shift = umem->page_shift; 685 shift = umem->page_shift;
685 686
687 fw_pg_per_umem_pg = BIT(umem->page_shift - pg_shift);
688
686 for_each_sg(umem->sg_head.sgl, sg, umem->nmap, entry) { 689 for_each_sg(umem->sg_head.sgl, sg, umem->nmap, entry) {
687 pages = sg_dma_len(sg) >> shift; 690 pages = sg_dma_len(sg) >> shift;
691 pg_addr = sg_dma_address(sg);
688 for (pg_cnt = 0; pg_cnt < pages; pg_cnt++) { 692 for (pg_cnt = 0; pg_cnt < pages; pg_cnt++) {
689 /* store the page address in pbe */ 693 for (fw_pg_cnt = 0; fw_pg_cnt < fw_pg_per_umem_pg;) {
690 pbe->lo = cpu_to_le32(sg_dma_address(sg) + 694 pbe->lo = cpu_to_le32(pg_addr);
691 (pg_cnt << shift)); 695 pbe->hi = cpu_to_le32(upper_32_bits(pg_addr));
692 addr = upper_32_bits(sg_dma_address(sg) + 696
693 (pg_cnt << shift)); 697 pg_addr += BIT(pg_shift);
694 pbe->hi = cpu_to_le32(addr); 698 pbe_cnt++;
695 pbe_cnt++; 699 total_num_pbes++;
696 total_num_pbes++; 700 pbe++;
697 pbe++; 701
698 702 if (total_num_pbes == pbl_info->num_pbes)
699 if (total_num_pbes == pbl_info->num_pbes) 703 return;
700 return; 704
701 705 /* If the given pbl is full storing the pbes,
702 /* If the given pbl is full storing the pbes, 706 * move to next pbl.
703 * move to next pbl. 707 */
704 */ 708 if (pbe_cnt ==
705 if (pbe_cnt == (pbl_info->pbl_size / sizeof(u64))) { 709 (pbl_info->pbl_size / sizeof(u64))) {
706 pbl_tbl++; 710 pbl_tbl++;
707 pbe = (struct regpair *)pbl_tbl->va; 711 pbe = (struct regpair *)pbl_tbl->va;
708 pbe_cnt = 0; 712 pbe_cnt = 0;
713 }
714
715 fw_pg_cnt++;
709 } 716 }
710 } 717 }
711 } 718 }
@@ -754,7 +761,7 @@ static inline int qedr_init_user_queue(struct ib_ucontext *ib_ctx,
754 u64 buf_addr, size_t buf_len, 761 u64 buf_addr, size_t buf_len,
755 int access, int dmasync) 762 int access, int dmasync)
756{ 763{
757 int page_cnt; 764 u32 fw_pages;
758 int rc; 765 int rc;
759 766
760 q->buf_addr = buf_addr; 767 q->buf_addr = buf_addr;
@@ -766,8 +773,10 @@ static inline int qedr_init_user_queue(struct ib_ucontext *ib_ctx,
766 return PTR_ERR(q->umem); 773 return PTR_ERR(q->umem);
767 } 774 }
768 775
769 page_cnt = ib_umem_page_count(q->umem); 776 fw_pages = ib_umem_page_count(q->umem) <<
770 rc = qedr_prepare_pbl_tbl(dev, &q->pbl_info, page_cnt, 0); 777 (q->umem->page_shift - FW_PAGE_SHIFT);
778
779 rc = qedr_prepare_pbl_tbl(dev, &q->pbl_info, fw_pages, 0);
771 if (rc) 780 if (rc)
772 goto err0; 781 goto err0;
773 782
@@ -777,7 +786,8 @@ static inline int qedr_init_user_queue(struct ib_ucontext *ib_ctx,
777 goto err0; 786 goto err0;
778 } 787 }
779 788
780 qedr_populate_pbls(dev, q->umem, q->pbl_tbl, &q->pbl_info); 789 qedr_populate_pbls(dev, q->umem, q->pbl_tbl, &q->pbl_info,
790 FW_PAGE_SHIFT);
781 791
782 return 0; 792 return 0;
783 793
@@ -2226,7 +2236,7 @@ struct ib_mr *qedr_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 len,
2226 goto err1; 2236 goto err1;
2227 2237
2228 qedr_populate_pbls(dev, mr->umem, mr->info.pbl_table, 2238 qedr_populate_pbls(dev, mr->umem, mr->info.pbl_table,
2229 &mr->info.pbl_info); 2239 &mr->info.pbl_info, mr->umem->page_shift);
2230 2240
2231 rc = dev->ops->rdma_alloc_tid(dev->rdma_ctx, &mr->hw_mr.itid); 2241 rc = dev->ops->rdma_alloc_tid(dev->rdma_ctx, &mr->hw_mr.itid);
2232 if (rc) { 2242 if (rc) {
@@ -3209,6 +3219,10 @@ static int process_req(struct qedr_dev *dev, struct qedr_qp *qp,
3209 case IB_WC_REG_MR: 3219 case IB_WC_REG_MR:
3210 qp->wqe_wr_id[qp->sq.cons].mr->info.completed++; 3220 qp->wqe_wr_id[qp->sq.cons].mr->info.completed++;
3211 break; 3221 break;
3222 case IB_WC_RDMA_READ:
3223 case IB_WC_SEND:
3224 wc->byte_len = qp->wqe_wr_id[qp->sq.cons].bytes_len;
3225 break;
3212 default: 3226 default:
3213 break; 3227 break;
3214 } 3228 }
diff --git a/drivers/infiniband/hw/qib/qib_rc.c b/drivers/infiniband/hw/qib/qib_rc.c
index fc8b88514da5..4ddbcac5eabe 100644
--- a/drivers/infiniband/hw/qib/qib_rc.c
+++ b/drivers/infiniband/hw/qib/qib_rc.c
@@ -1956,8 +1956,10 @@ send_last:
1956 ret = qib_get_rwqe(qp, 1); 1956 ret = qib_get_rwqe(qp, 1);
1957 if (ret < 0) 1957 if (ret < 0)
1958 goto nack_op_err; 1958 goto nack_op_err;
1959 if (!ret) 1959 if (!ret) {
1960 rvt_put_ss(&qp->r_sge);
1960 goto rnr_nak; 1961 goto rnr_nak;
1962 }
1961 wc.ex.imm_data = ohdr->u.rc.imm_data; 1963 wc.ex.imm_data = ohdr->u.rc.imm_data;
1962 hdrsize += 4; 1964 hdrsize += 4;
1963 wc.wc_flags = IB_WC_WITH_IMM; 1965 wc.wc_flags = IB_WC_WITH_IMM;
diff --git a/drivers/infiniband/sw/rxe/rxe.h b/drivers/infiniband/sw/rxe/rxe.h
index ecdba2fce083..1ac5b8551a4d 100644
--- a/drivers/infiniband/sw/rxe/rxe.h
+++ b/drivers/infiniband/sw/rxe/rxe.h
@@ -68,6 +68,7 @@
68static inline u32 rxe_crc32(struct rxe_dev *rxe, 68static inline u32 rxe_crc32(struct rxe_dev *rxe,
69 u32 crc, void *next, size_t len) 69 u32 crc, void *next, size_t len)
70{ 70{
71 u32 retval;
71 int err; 72 int err;
72 73
73 SHASH_DESC_ON_STACK(shash, rxe->tfm); 74 SHASH_DESC_ON_STACK(shash, rxe->tfm);
@@ -81,7 +82,9 @@ static inline u32 rxe_crc32(struct rxe_dev *rxe,
81 return crc32_le(crc, next, len); 82 return crc32_le(crc, next, len);
82 } 83 }
83 84
84 return *(u32 *)shash_desc_ctx(shash); 85 retval = *(u32 *)shash_desc_ctx(shash);
86 barrier_data(shash_desc_ctx(shash));
87 return retval;
85} 88}
86 89
87int rxe_set_mtu(struct rxe_dev *rxe, unsigned int dev_mtu); 90int rxe_set_mtu(struct rxe_dev *rxe, unsigned int dev_mtu);
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
index 83d709e74dfb..073e66783f1d 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.c
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
@@ -740,13 +740,8 @@ static int init_send_wqe(struct rxe_qp *qp, struct ib_send_wr *ibwr,
740 740
741 sge = ibwr->sg_list; 741 sge = ibwr->sg_list;
742 for (i = 0; i < num_sge; i++, sge++) { 742 for (i = 0; i < num_sge; i++, sge++) {
743 if (qp->is_user && copy_from_user(p, (__user void *) 743 memcpy(p, (void *)(uintptr_t)sge->addr,
744 (uintptr_t)sge->addr, sge->length)) 744 sge->length);
745 return -EFAULT;
746
747 else if (!qp->is_user)
748 memcpy(p, (void *)(uintptr_t)sge->addr,
749 sge->length);
750 745
751 p += sge->length; 746 p += sge->length;
752 } 747 }
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c b/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
index 874b24366e4d..7871379342f4 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
@@ -178,7 +178,7 @@ static inline int ib_speed_enum_to_int(int speed)
178static int ipoib_get_link_ksettings(struct net_device *netdev, 178static int ipoib_get_link_ksettings(struct net_device *netdev,
179 struct ethtool_link_ksettings *cmd) 179 struct ethtool_link_ksettings *cmd)
180{ 180{
181 struct ipoib_dev_priv *priv = netdev_priv(netdev); 181 struct ipoib_dev_priv *priv = ipoib_priv(netdev);
182 struct ib_port_attr attr; 182 struct ib_port_attr attr;
183 int ret, speed, width; 183 int ret, speed, width;
184 184
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index 0060b2f9f659..efe7402f4885 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -863,7 +863,6 @@ dev_stop:
863 set_bit(IPOIB_STOP_REAPER, &priv->flags); 863 set_bit(IPOIB_STOP_REAPER, &priv->flags);
864 cancel_delayed_work(&priv->ah_reap_task); 864 cancel_delayed_work(&priv->ah_reap_task);
865 set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags); 865 set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags);
866 napi_enable(&priv->napi);
867 ipoib_ib_dev_stop(dev); 866 ipoib_ib_dev_stop(dev);
868 return -1; 867 return -1;
869} 868}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 2869d1adb1de..1015a63de6ae 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -1590,12 +1590,14 @@ static void ipoib_neigh_hash_uninit(struct net_device *dev)
1590 wait_for_completion(&priv->ntbl.deleted); 1590 wait_for_completion(&priv->ntbl.deleted);
1591} 1591}
1592 1592
1593void ipoib_dev_uninit_default(struct net_device *dev) 1593static void ipoib_dev_uninit_default(struct net_device *dev)
1594{ 1594{
1595 struct ipoib_dev_priv *priv = ipoib_priv(dev); 1595 struct ipoib_dev_priv *priv = ipoib_priv(dev);
1596 1596
1597 ipoib_transport_dev_cleanup(dev); 1597 ipoib_transport_dev_cleanup(dev);
1598 1598
1599 netif_napi_del(&priv->napi);
1600
1599 ipoib_cm_dev_cleanup(dev); 1601 ipoib_cm_dev_cleanup(dev);
1600 1602
1601 kfree(priv->rx_ring); 1603 kfree(priv->rx_ring);
@@ -1649,6 +1651,7 @@ out_rx_ring_cleanup:
1649 kfree(priv->rx_ring); 1651 kfree(priv->rx_ring);
1650 1652
1651out: 1653out:
1654 netif_napi_del(&priv->napi);
1652 return -ENOMEM; 1655 return -ENOMEM;
1653} 1656}
1654 1657
@@ -2237,6 +2240,7 @@ event_failed:
2237 2240
2238device_init_failed: 2241device_init_failed:
2239 free_netdev(priv->dev); 2242 free_netdev(priv->dev);
2243 kfree(priv);
2240 2244
2241alloc_mem_failed: 2245alloc_mem_failed:
2242 return ERR_PTR(result); 2246 return ERR_PTR(result);
@@ -2277,7 +2281,7 @@ static void ipoib_add_one(struct ib_device *device)
2277 2281
2278static void ipoib_remove_one(struct ib_device *device, void *client_data) 2282static void ipoib_remove_one(struct ib_device *device, void *client_data)
2279{ 2283{
2280 struct ipoib_dev_priv *priv, *tmp; 2284 struct ipoib_dev_priv *priv, *tmp, *cpriv, *tcpriv;
2281 struct list_head *dev_list = client_data; 2285 struct list_head *dev_list = client_data;
2282 2286
2283 if (!dev_list) 2287 if (!dev_list)
@@ -2300,7 +2304,14 @@ static void ipoib_remove_one(struct ib_device *device, void *client_data)
2300 flush_workqueue(priv->wq); 2304 flush_workqueue(priv->wq);
2301 2305
2302 unregister_netdev(priv->dev); 2306 unregister_netdev(priv->dev);
2303 free_netdev(priv->dev); 2307 if (device->free_rdma_netdev)
2308 device->free_rdma_netdev(priv->dev);
2309 else
2310 free_netdev(priv->dev);
2311
2312 list_for_each_entry_safe(cpriv, tcpriv, &priv->child_intfs, list)
2313 kfree(cpriv);
2314
2304 kfree(priv); 2315 kfree(priv);
2305 } 2316 }
2306 2317
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
index 36dc4fcaa3cd..081b33deff1b 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
@@ -133,13 +133,13 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
133 snprintf(intf_name, sizeof intf_name, "%s.%04x", 133 snprintf(intf_name, sizeof intf_name, "%s.%04x",
134 ppriv->dev->name, pkey); 134 ppriv->dev->name, pkey);
135 135
136 if (!rtnl_trylock())
137 return restart_syscall();
138
136 priv = ipoib_intf_alloc(ppriv->ca, ppriv->port, intf_name); 139 priv = ipoib_intf_alloc(ppriv->ca, ppriv->port, intf_name);
137 if (!priv) 140 if (!priv)
138 return -ENOMEM; 141 return -ENOMEM;
139 142
140 if (!rtnl_trylock())
141 return restart_syscall();
142
143 down_write(&ppriv->vlan_rwsem); 143 down_write(&ppriv->vlan_rwsem);
144 144
145 /* 145 /*
@@ -167,8 +167,10 @@ out:
167 167
168 rtnl_unlock(); 168 rtnl_unlock();
169 169
170 if (result) 170 if (result) {
171 free_netdev(priv->dev); 171 free_netdev(priv->dev);
172 kfree(priv);
173 }
172 174
173 return result; 175 return result;
174} 176}
@@ -209,6 +211,7 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey)
209 211
210 if (dev) { 212 if (dev) {
211 free_netdev(dev); 213 free_netdev(dev);
214 kfree(priv);
212 return 0; 215 return 0;
213 } 216 }
214 217
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index def723a5df29..2354c742caa1 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -320,7 +320,7 @@ static int srp_new_cm_id(struct srp_rdma_ch *ch)
320 ch->path.sgid = target->sgid; 320 ch->path.sgid = target->sgid;
321 ch->path.dgid = target->orig_dgid; 321 ch->path.dgid = target->orig_dgid;
322 ch->path.pkey = target->pkey; 322 ch->path.pkey = target->pkey;
323 sa_path_set_service_id(&ch->path, target->service_id); 323 ch->path.service_id = target->service_id;
324 324
325 return 0; 325 return 0;
326} 326}
@@ -575,7 +575,7 @@ static int srp_create_ch_ib(struct srp_rdma_ch *ch)
575 return 0; 575 return 0;
576 576
577err_qp: 577err_qp:
578 srp_destroy_qp(ch, qp); 578 ib_destroy_qp(qp);
579 579
580err_send_cq: 580err_send_cq:
581 ib_free_cq(send_cq); 581 ib_free_cq(send_cq);
diff --git a/drivers/input/keyboard/tm2-touchkey.c b/drivers/input/keyboard/tm2-touchkey.c
index 485900f953e0..abc266e40e17 100644
--- a/drivers/input/keyboard/tm2-touchkey.c
+++ b/drivers/input/keyboard/tm2-touchkey.c
@@ -213,7 +213,7 @@ static int tm2_touchkey_probe(struct i2c_client *client,
213 /* led device */ 213 /* led device */
214 touchkey->led_dev.name = TM2_TOUCHKEY_DEV_NAME; 214 touchkey->led_dev.name = TM2_TOUCHKEY_DEV_NAME;
215 touchkey->led_dev.brightness = LED_FULL; 215 touchkey->led_dev.brightness = LED_FULL;
216 touchkey->led_dev.max_brightness = LED_FULL; 216 touchkey->led_dev.max_brightness = LED_ON;
217 touchkey->led_dev.brightness_set = tm2_touchkey_led_brightness_set; 217 touchkey->led_dev.brightness_set = tm2_touchkey_led_brightness_set;
218 218
219 error = devm_led_classdev_register(&client->dev, &touchkey->led_dev); 219 error = devm_led_classdev_register(&client->dev, &touchkey->led_dev);
diff --git a/drivers/input/misc/axp20x-pek.c b/drivers/input/misc/axp20x-pek.c
index f11807db6979..400869e61a06 100644
--- a/drivers/input/misc/axp20x-pek.c
+++ b/drivers/input/misc/axp20x-pek.c
@@ -256,6 +256,42 @@ static int axp20x_pek_probe_input_device(struct axp20x_pek *axp20x_pek,
256 return 0; 256 return 0;
257} 257}
258 258
259#ifdef CONFIG_ACPI
260static bool axp20x_pek_should_register_input(struct axp20x_pek *axp20x_pek,
261 struct platform_device *pdev)
262{
263 unsigned long long hrv = 0;
264 acpi_status status;
265
266 if (IS_ENABLED(CONFIG_INPUT_SOC_BUTTON_ARRAY) &&
267 axp20x_pek->axp20x->variant == AXP288_ID) {
268 status = acpi_evaluate_integer(ACPI_HANDLE(pdev->dev.parent),
269 "_HRV", NULL, &hrv);
270 if (ACPI_FAILURE(status))
271 dev_err(&pdev->dev, "Failed to get PMIC hardware revision\n");
272
273 /*
274 * On Cherry Trail platforms (hrv == 3), do not register the
275 * input device if there is an "INTCFD9" or "ACPI0011" gpio
276 * button ACPI device, as that handles the power button too,
277 * and otherwise we end up reporting all presses twice.
278 */
279 if (hrv == 3 && (acpi_dev_present("INTCFD9", NULL, -1) ||
280 acpi_dev_present("ACPI0011", NULL, -1)))
281 return false;
282
283 }
284
285 return true;
286}
287#else
288static bool axp20x_pek_should_register_input(struct axp20x_pek *axp20x_pek,
289 struct platform_device *pdev)
290{
291 return true;
292}
293#endif
294
259static int axp20x_pek_probe(struct platform_device *pdev) 295static int axp20x_pek_probe(struct platform_device *pdev)
260{ 296{
261 struct axp20x_pek *axp20x_pek; 297 struct axp20x_pek *axp20x_pek;
@@ -268,13 +304,7 @@ static int axp20x_pek_probe(struct platform_device *pdev)
268 304
269 axp20x_pek->axp20x = dev_get_drvdata(pdev->dev.parent); 305 axp20x_pek->axp20x = dev_get_drvdata(pdev->dev.parent);
270 306
271 /* 307 if (axp20x_pek_should_register_input(axp20x_pek, pdev)) {
272 * Do not register the input device if there is an "INTCFD9"
273 * gpio button ACPI device, that handles the power button too,
274 * and otherwise we end up reporting all presses twice.
275 */
276 if (!acpi_dev_found("INTCFD9") ||
277 !IS_ENABLED(CONFIG_INPUT_SOC_BUTTON_ARRAY)) {
278 error = axp20x_pek_probe_input_device(axp20x_pek, pdev); 308 error = axp20x_pek_probe_input_device(axp20x_pek, pdev);
279 if (error) 309 if (error)
280 return error; 310 return error;
diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c
index e37d37273182..f600f3a7a3c6 100644
--- a/drivers/input/misc/soc_button_array.c
+++ b/drivers/input/misc/soc_button_array.c
@@ -248,7 +248,8 @@ static struct soc_button_info *soc_button_get_button_info(struct device *dev)
248 248
249 if (!btns_desc) { 249 if (!btns_desc) {
250 dev_err(dev, "ACPI Button Descriptors not found\n"); 250 dev_err(dev, "ACPI Button Descriptors not found\n");
251 return ERR_PTR(-ENODEV); 251 button_info = ERR_PTR(-ENODEV);
252 goto out;
252 } 253 }
253 254
254 /* The first package describes the collection */ 255 /* The first package describes the collection */
@@ -264,24 +265,31 @@ static struct soc_button_info *soc_button_get_button_info(struct device *dev)
264 } 265 }
265 if (collection_uid == -1) { 266 if (collection_uid == -1) {
266 dev_err(dev, "Invalid Button Collection Descriptor\n"); 267 dev_err(dev, "Invalid Button Collection Descriptor\n");
267 return ERR_PTR(-ENODEV); 268 button_info = ERR_PTR(-ENODEV);
269 goto out;
268 } 270 }
269 271
270 /* There are package.count - 1 buttons + 1 terminating empty entry */ 272 /* There are package.count - 1 buttons + 1 terminating empty entry */
271 button_info = devm_kcalloc(dev, btns_desc->package.count, 273 button_info = devm_kcalloc(dev, btns_desc->package.count,
272 sizeof(*button_info), GFP_KERNEL); 274 sizeof(*button_info), GFP_KERNEL);
273 if (!button_info) 275 if (!button_info) {
274 return ERR_PTR(-ENOMEM); 276 button_info = ERR_PTR(-ENOMEM);
277 goto out;
278 }
275 279
276 /* Parse the button descriptors */ 280 /* Parse the button descriptors */
277 for (i = 1, btn = 0; i < btns_desc->package.count; i++, btn++) { 281 for (i = 1, btn = 0; i < btns_desc->package.count; i++, btn++) {
278 if (soc_button_parse_btn_desc(dev, 282 if (soc_button_parse_btn_desc(dev,
279 &btns_desc->package.elements[i], 283 &btns_desc->package.elements[i],
280 collection_uid, 284 collection_uid,
281 &button_info[btn])) 285 &button_info[btn])) {
282 return ERR_PTR(-ENODEV); 286 button_info = ERR_PTR(-ENODEV);
287 goto out;
288 }
283 } 289 }
284 290
291out:
292 kfree(buf.pointer);
285 return button_info; 293 return button_info;
286} 294}
287 295
diff --git a/drivers/input/mouse/elan_i2c_i2c.c b/drivers/input/mouse/elan_i2c_i2c.c
index a679e56c44cd..f431da07f861 100644
--- a/drivers/input/mouse/elan_i2c_i2c.c
+++ b/drivers/input/mouse/elan_i2c_i2c.c
@@ -554,32 +554,34 @@ static int elan_i2c_finish_fw_update(struct i2c_client *client,
554 struct completion *completion) 554 struct completion *completion)
555{ 555{
556 struct device *dev = &client->dev; 556 struct device *dev = &client->dev;
557 long ret;
558 int error; 557 int error;
559 int len; 558 int len;
560 u8 buffer[ETP_I2C_INF_LENGTH]; 559 u8 buffer[ETP_I2C_REPORT_LEN];
560
561 len = i2c_master_recv(client, buffer, ETP_I2C_REPORT_LEN);
562 if (len != ETP_I2C_REPORT_LEN) {
563 error = len < 0 ? len : -EIO;
564 dev_warn(dev, "failed to read I2C data after FW WDT reset: %d (%d)\n",
565 error, len);
566 }
561 567
562 reinit_completion(completion); 568 reinit_completion(completion);
563 enable_irq(client->irq); 569 enable_irq(client->irq);
564 570
565 error = elan_i2c_write_cmd(client, ETP_I2C_STAND_CMD, ETP_I2C_RESET); 571 error = elan_i2c_write_cmd(client, ETP_I2C_STAND_CMD, ETP_I2C_RESET);
566 if (!error)
567 ret = wait_for_completion_interruptible_timeout(completion,
568 msecs_to_jiffies(300));
569 disable_irq(client->irq);
570
571 if (error) { 572 if (error) {
572 dev_err(dev, "device reset failed: %d\n", error); 573 dev_err(dev, "device reset failed: %d\n", error);
573 return error; 574 } else if (!wait_for_completion_timeout(completion,
574 } else if (ret == 0) { 575 msecs_to_jiffies(300))) {
575 dev_err(dev, "timeout waiting for device reset\n"); 576 dev_err(dev, "timeout waiting for device reset\n");
576 return -ETIMEDOUT; 577 error = -ETIMEDOUT;
577 } else if (ret < 0) {
578 error = ret;
579 dev_err(dev, "error waiting for device reset: %d\n", error);
580 return error;
581 } 578 }
582 579
580 disable_irq(client->irq);
581
582 if (error)
583 return error;
584
583 len = i2c_master_recv(client, buffer, ETP_I2C_INF_LENGTH); 585 len = i2c_master_recv(client, buffer, ETP_I2C_INF_LENGTH);
584 if (len != ETP_I2C_INF_LENGTH) { 586 if (len != ETP_I2C_INF_LENGTH) {
585 error = len < 0 ? len : -EIO; 587 error = len < 0 ? len : -EIO;
diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index e73d968023f7..f1fa1f172107 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -1118,8 +1118,10 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
1118 * Asus UX32VD 0x361f02 00, 15, 0e clickpad 1118 * Asus UX32VD 0x361f02 00, 15, 0e clickpad
1119 * Avatar AVIU-145A2 0x361f00 ? clickpad 1119 * Avatar AVIU-145A2 0x361f00 ? clickpad
1120 * Fujitsu LIFEBOOK E544 0x470f00 d0, 12, 09 2 hw buttons 1120 * Fujitsu LIFEBOOK E544 0x470f00 d0, 12, 09 2 hw buttons
1121 * Fujitsu LIFEBOOK E546 0x470f00 50, 12, 09 2 hw buttons
1121 * Fujitsu LIFEBOOK E547 0x470f00 50, 12, 09 2 hw buttons 1122 * Fujitsu LIFEBOOK E547 0x470f00 50, 12, 09 2 hw buttons
1122 * Fujitsu LIFEBOOK E554 0x570f01 40, 14, 0c 2 hw buttons 1123 * Fujitsu LIFEBOOK E554 0x570f01 40, 14, 0c 2 hw buttons
1124 * Fujitsu LIFEBOOK E557 0x570f01 40, 14, 0c 2 hw buttons
1123 * Fujitsu T725 0x470f01 05, 12, 09 2 hw buttons 1125 * Fujitsu T725 0x470f01 05, 12, 09 2 hw buttons
1124 * Fujitsu H730 0x570f00 c0, 14, 0c 3 hw buttons (**) 1126 * Fujitsu H730 0x570f00 c0, 14, 0c 3 hw buttons (**)
1125 * Gigabyte U2442 0x450f01 58, 17, 0c 2 hw buttons 1127 * Gigabyte U2442 0x450f01 58, 17, 0c 2 hw buttons
@@ -1525,6 +1527,13 @@ static const struct dmi_system_id elantech_dmi_force_crc_enabled[] = {
1525 }, 1527 },
1526 }, 1528 },
1527 { 1529 {
1530 /* Fujitsu LIFEBOOK E546 does not work with crc_enabled == 0 */
1531 .matches = {
1532 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
1533 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E546"),
1534 },
1535 },
1536 {
1528 /* Fujitsu LIFEBOOK E547 does not work with crc_enabled == 0 */ 1537 /* Fujitsu LIFEBOOK E547 does not work with crc_enabled == 0 */
1529 .matches = { 1538 .matches = {
1530 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), 1539 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
@@ -1546,6 +1555,13 @@ static const struct dmi_system_id elantech_dmi_force_crc_enabled[] = {
1546 }, 1555 },
1547 }, 1556 },
1548 { 1557 {
1558 /* Fujitsu LIFEBOOK E557 does not work with crc_enabled == 0 */
1559 .matches = {
1560 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
1561 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E557"),
1562 },
1563 },
1564 {
1549 /* Fujitsu LIFEBOOK U745 does not work with crc_enabled == 0 */ 1565 /* Fujitsu LIFEBOOK U745 does not work with crc_enabled == 0 */
1550 .matches = { 1566 .matches = {
1551 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), 1567 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index 131df9d3660f..16c30460ef04 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -176,6 +176,12 @@ static const char * const smbus_pnp_ids[] = {
176 NULL 176 NULL
177}; 177};
178 178
179static const char * const forcepad_pnp_ids[] = {
180 "SYN300D",
181 "SYN3014",
182 NULL
183};
184
179/* 185/*
180 * Send a command to the synpatics touchpad by special commands 186 * Send a command to the synpatics touchpad by special commands
181 */ 187 */
@@ -397,6 +403,8 @@ static int synaptics_query_hardware(struct psmouse *psmouse,
397{ 403{
398 int error; 404 int error;
399 405
406 memset(info, 0, sizeof(*info));
407
400 error = synaptics_identify(psmouse, info); 408 error = synaptics_identify(psmouse, info);
401 if (error) 409 if (error)
402 return error; 410 return error;
@@ -480,13 +488,6 @@ static const struct min_max_quirk min_max_pnpid_table[] = {
480 { } 488 { }
481}; 489};
482 490
483/* This list has been kindly provided by Synaptics. */
484static const char * const forcepad_pnp_ids[] = {
485 "SYN300D",
486 "SYN3014",
487 NULL
488};
489
490/***************************************************************************** 491/*****************************************************************************
491 * Synaptics communications functions 492 * Synaptics communications functions
492 ****************************************************************************/ 493 ****************************************************************************/
@@ -1687,7 +1688,8 @@ enum {
1687 SYNAPTICS_INTERTOUCH_ON, 1688 SYNAPTICS_INTERTOUCH_ON,
1688}; 1689};
1689 1690
1690static int synaptics_intertouch = SYNAPTICS_INTERTOUCH_NOT_SET; 1691static int synaptics_intertouch = IS_ENABLED(CONFIG_RMI4_SMB) ?
1692 SYNAPTICS_INTERTOUCH_NOT_SET : SYNAPTICS_INTERTOUCH_OFF;
1691module_param_named(synaptics_intertouch, synaptics_intertouch, int, 0644); 1693module_param_named(synaptics_intertouch, synaptics_intertouch, int, 0644);
1692MODULE_PARM_DESC(synaptics_intertouch, "Use a secondary bus for the Synaptics device."); 1694MODULE_PARM_DESC(synaptics_intertouch, "Use a secondary bus for the Synaptics device.");
1693 1695
@@ -1737,8 +1739,16 @@ static int synaptics_setup_intertouch(struct psmouse *psmouse,
1737 1739
1738 if (synaptics_intertouch == SYNAPTICS_INTERTOUCH_NOT_SET) { 1740 if (synaptics_intertouch == SYNAPTICS_INTERTOUCH_NOT_SET) {
1739 if (!psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids) && 1741 if (!psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids) &&
1740 !psmouse_matches_pnp_id(psmouse, smbus_pnp_ids)) 1742 !psmouse_matches_pnp_id(psmouse, smbus_pnp_ids)) {
1743
1744 if (!psmouse_matches_pnp_id(psmouse, forcepad_pnp_ids))
1745 psmouse_info(psmouse,
1746 "Your touchpad (%s) says it can support a different bus. "
1747 "If i2c-hid and hid-rmi are not used, you might want to try setting psmouse.synaptics_intertouch to 1 and report this to linux-input@vger.kernel.org.\n",
1748 psmouse->ps2dev.serio->firmware_id);
1749
1741 return -ENXIO; 1750 return -ENXIO;
1751 }
1742 } 1752 }
1743 1753
1744 psmouse_info(psmouse, "Trying to set up SMBus access\n"); 1754 psmouse_info(psmouse, "Trying to set up SMBus access\n");
@@ -1810,6 +1820,15 @@ int synaptics_init(struct psmouse *psmouse)
1810 } 1820 }
1811 1821
1812 if (SYN_CAP_INTERTOUCH(info.ext_cap_0c)) { 1822 if (SYN_CAP_INTERTOUCH(info.ext_cap_0c)) {
1823 if ((!IS_ENABLED(CONFIG_RMI4_SMB) ||
1824 !IS_ENABLED(CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS)) &&
1825 /* Forcepads need F21, which is not ready */
1826 !psmouse_matches_pnp_id(psmouse, forcepad_pnp_ids)) {
1827 psmouse_warn(psmouse,
1828 "The touchpad can support a better bus than the too old PS/2 protocol. "
1829 "Make sure MOUSE_PS2_SYNAPTICS_SMBUS and RMI4_SMB are enabled to get a better touchpad experience.\n");
1830 }
1831
1813 error = synaptics_setup_intertouch(psmouse, &info, true); 1832 error = synaptics_setup_intertouch(psmouse, &info, true);
1814 if (!error) 1833 if (!error)
1815 return PSMOUSE_SYNAPTICS_SMBUS; 1834 return PSMOUSE_SYNAPTICS_SMBUS;
diff --git a/drivers/input/rmi4/rmi_f03.c b/drivers/input/rmi4/rmi_f03.c
index 77dad045a468..ad71a5e768dc 100644
--- a/drivers/input/rmi4/rmi_f03.c
+++ b/drivers/input/rmi4/rmi_f03.c
@@ -146,7 +146,7 @@ static int rmi_f03_register_pt(struct f03_data *f03)
146 if (!serio) 146 if (!serio)
147 return -ENOMEM; 147 return -ENOMEM;
148 148
149 serio->id.type = SERIO_8042; 149 serio->id.type = SERIO_PS_PSTHRU;
150 serio->write = rmi_f03_pt_write; 150 serio->write = rmi_f03_pt_write;
151 serio->port_data = f03; 151 serio->port_data = f03;
152 152
diff --git a/drivers/input/rmi4/rmi_f54.c b/drivers/input/rmi4/rmi_f54.c
index dea63e2db3e6..f5206e2c767e 100644
--- a/drivers/input/rmi4/rmi_f54.c
+++ b/drivers/input/rmi4/rmi_f54.c
@@ -31,9 +31,6 @@
31#define F54_GET_REPORT 1 31#define F54_GET_REPORT 1
32#define F54_FORCE_CAL 2 32#define F54_FORCE_CAL 2
33 33
34/* Fixed sizes of reports */
35#define F54_QUERY_LEN 27
36
37/* F54 capabilities */ 34/* F54 capabilities */
38#define F54_CAP_BASELINE (1 << 2) 35#define F54_CAP_BASELINE (1 << 2)
39#define F54_CAP_IMAGE8 (1 << 3) 36#define F54_CAP_IMAGE8 (1 << 3)
@@ -95,7 +92,6 @@ struct rmi_f54_reports {
95struct f54_data { 92struct f54_data {
96 struct rmi_function *fn; 93 struct rmi_function *fn;
97 94
98 u8 qry[F54_QUERY_LEN];
99 u8 num_rx_electrodes; 95 u8 num_rx_electrodes;
100 u8 num_tx_electrodes; 96 u8 num_tx_electrodes;
101 u8 capabilities; 97 u8 capabilities;
@@ -632,22 +628,23 @@ static int rmi_f54_detect(struct rmi_function *fn)
632{ 628{
633 int error; 629 int error;
634 struct f54_data *f54; 630 struct f54_data *f54;
631 u8 buf[6];
635 632
636 f54 = dev_get_drvdata(&fn->dev); 633 f54 = dev_get_drvdata(&fn->dev);
637 634
638 error = rmi_read_block(fn->rmi_dev, fn->fd.query_base_addr, 635 error = rmi_read_block(fn->rmi_dev, fn->fd.query_base_addr,
639 &f54->qry, sizeof(f54->qry)); 636 buf, sizeof(buf));
640 if (error) { 637 if (error) {
641 dev_err(&fn->dev, "%s: Failed to query F54 properties\n", 638 dev_err(&fn->dev, "%s: Failed to query F54 properties\n",
642 __func__); 639 __func__);
643 return error; 640 return error;
644 } 641 }
645 642
646 f54->num_rx_electrodes = f54->qry[0]; 643 f54->num_rx_electrodes = buf[0];
647 f54->num_tx_electrodes = f54->qry[1]; 644 f54->num_tx_electrodes = buf[1];
648 f54->capabilities = f54->qry[2]; 645 f54->capabilities = buf[2];
649 f54->clock_rate = f54->qry[3] | (f54->qry[4] << 8); 646 f54->clock_rate = buf[3] | (buf[4] << 8);
650 f54->family = f54->qry[5]; 647 f54->family = buf[5];
651 648
652 rmi_dbg(RMI_DEBUG_FN, &fn->dev, "F54 num_rx_electrodes: %d\n", 649 rmi_dbg(RMI_DEBUG_FN, &fn->dev, "F54 num_rx_electrodes: %d\n",
653 f54->num_rx_electrodes); 650 f54->num_rx_electrodes);
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 09720d950686..f932a83b4990 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -723,6 +723,13 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
723 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"), 723 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"),
724 }, 724 },
725 }, 725 },
726 {
727 /* Fujitsu UH554 laptop */
728 .matches = {
729 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
730 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK UH544"),
731 },
732 },
726 { } 733 { }
727}; 734};
728 735
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 2302aef2b2d4..dd042a9b0aaa 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -350,6 +350,7 @@ static bool mxt_object_readable(unsigned int type)
350 case MXT_TOUCH_KEYARRAY_T15: 350 case MXT_TOUCH_KEYARRAY_T15:
351 case MXT_TOUCH_PROXIMITY_T23: 351 case MXT_TOUCH_PROXIMITY_T23:
352 case MXT_TOUCH_PROXKEY_T52: 352 case MXT_TOUCH_PROXKEY_T52:
353 case MXT_TOUCH_MULTITOUCHSCREEN_T100:
353 case MXT_PROCI_GRIPFACE_T20: 354 case MXT_PROCI_GRIPFACE_T20:
354 case MXT_PROCG_NOISE_T22: 355 case MXT_PROCG_NOISE_T22:
355 case MXT_PROCI_ONETOUCH_T24: 356 case MXT_PROCI_ONETOUCH_T24:
diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
index 8cf8d8d5d4ef..f872817e81e4 100644
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
@@ -471,7 +471,7 @@ static EDT_ATTR(gain, S_IWUSR | S_IRUGO, WORK_REGISTER_GAIN,
471static EDT_ATTR(offset, S_IWUSR | S_IRUGO, WORK_REGISTER_OFFSET, 471static EDT_ATTR(offset, S_IWUSR | S_IRUGO, WORK_REGISTER_OFFSET,
472 M09_REGISTER_OFFSET, 0, 31); 472 M09_REGISTER_OFFSET, 0, 31);
473static EDT_ATTR(threshold, S_IWUSR | S_IRUGO, WORK_REGISTER_THRESHOLD, 473static EDT_ATTR(threshold, S_IWUSR | S_IRUGO, WORK_REGISTER_THRESHOLD,
474 M09_REGISTER_THRESHOLD, 20, 80); 474 M09_REGISTER_THRESHOLD, 0, 80);
475static EDT_ATTR(report_rate, S_IWUSR | S_IRUGO, WORK_REGISTER_REPORT_RATE, 475static EDT_ATTR(report_rate, S_IWUSR | S_IRUGO, WORK_REGISTER_REPORT_RATE,
476 NO_REGISTER, 3, 14); 476 NO_REGISTER, 3, 14);
477 477
diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
index 813dd68a5c82..0dbcf105f7db 100644
--- a/drivers/input/touchscreen/silead.c
+++ b/drivers/input/touchscreen/silead.c
@@ -526,6 +526,7 @@ static int __maybe_unused silead_ts_suspend(struct device *dev)
526{ 526{
527 struct i2c_client *client = to_i2c_client(dev); 527 struct i2c_client *client = to_i2c_client(dev);
528 528
529 disable_irq(client->irq);
529 silead_ts_set_power(client, SILEAD_POWER_OFF); 530 silead_ts_set_power(client, SILEAD_POWER_OFF);
530 return 0; 531 return 0;
531} 532}
@@ -551,6 +552,8 @@ static int __maybe_unused silead_ts_resume(struct device *dev)
551 return -ENODEV; 552 return -ENODEV;
552 } 553 }
553 554
555 enable_irq(client->irq);
556
554 return 0; 557 return 0;
555} 558}
556 559
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index 63cacf5d6cf2..0f1219fa8561 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -3879,11 +3879,9 @@ static void irte_ga_prepare(void *entry,
3879 u8 vector, u32 dest_apicid, int devid) 3879 u8 vector, u32 dest_apicid, int devid)
3880{ 3880{
3881 struct irte_ga *irte = (struct irte_ga *) entry; 3881 struct irte_ga *irte = (struct irte_ga *) entry;
3882 struct iommu_dev_data *dev_data = search_dev_data(devid);
3883 3882
3884 irte->lo.val = 0; 3883 irte->lo.val = 0;
3885 irte->hi.val = 0; 3884 irte->hi.val = 0;
3886 irte->lo.fields_remap.guest_mode = dev_data ? dev_data->use_vapic : 0;
3887 irte->lo.fields_remap.int_type = delivery_mode; 3885 irte->lo.fields_remap.int_type = delivery_mode;
3888 irte->lo.fields_remap.dm = dest_mode; 3886 irte->lo.fields_remap.dm = dest_mode;
3889 irte->hi.fields.vector = vector; 3887 irte->hi.fields.vector = vector;
@@ -3939,10 +3937,10 @@ static void irte_ga_set_affinity(void *entry, u16 devid, u16 index,
3939 struct irte_ga *irte = (struct irte_ga *) entry; 3937 struct irte_ga *irte = (struct irte_ga *) entry;
3940 struct iommu_dev_data *dev_data = search_dev_data(devid); 3938 struct iommu_dev_data *dev_data = search_dev_data(devid);
3941 3939
3942 if (!dev_data || !dev_data->use_vapic) { 3940 if (!dev_data || !dev_data->use_vapic ||
3941 !irte->lo.fields_remap.guest_mode) {
3943 irte->hi.fields.vector = vector; 3942 irte->hi.fields.vector = vector;
3944 irte->lo.fields_remap.destination = dest_apicid; 3943 irte->lo.fields_remap.destination = dest_apicid;
3945 irte->lo.fields_remap.guest_mode = 0;
3946 modify_irte_ga(devid, index, irte, NULL); 3944 modify_irte_ga(devid, index, irte, NULL);
3947 } 3945 }
3948} 3946}
diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
index 9f44ee8ea1bc..19779b88a479 100644
--- a/drivers/iommu/of_iommu.c
+++ b/drivers/iommu/of_iommu.c
@@ -118,6 +118,7 @@ static const struct iommu_ops
118 118
119 ops = iommu_ops_from_fwnode(fwnode); 119 ops = iommu_ops_from_fwnode(fwnode);
120 if ((ops && !ops->of_xlate) || 120 if ((ops && !ops->of_xlate) ||
121 !of_device_is_available(iommu_spec->np) ||
121 (!ops && !of_iommu_driver_present(iommu_spec->np))) 122 (!ops && !of_iommu_driver_present(iommu_spec->np)))
122 return NULL; 123 return NULL;
123 124
@@ -236,6 +237,12 @@ const struct iommu_ops *of_iommu_configure(struct device *dev,
236 ops = ERR_PTR(err); 237 ops = ERR_PTR(err);
237 } 238 }
238 239
240 /* Ignore all other errors apart from EPROBE_DEFER */
241 if (IS_ERR(ops) && (PTR_ERR(ops) != -EPROBE_DEFER)) {
242 dev_dbg(dev, "Adding to IOMMU failed: %ld\n", PTR_ERR(ops));
243 ops = NULL;
244 }
245
239 return ops; 246 return ops;
240} 247}
241 248
diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c
index eb7fbe159963..929f8558bf1c 100644
--- a/drivers/irqchip/irq-mips-gic.c
+++ b/drivers/irqchip/irq-mips-gic.c
@@ -140,7 +140,7 @@ static inline void gic_map_to_vpe(unsigned int intr, unsigned int vpe)
140} 140}
141 141
142#ifdef CONFIG_CLKSRC_MIPS_GIC 142#ifdef CONFIG_CLKSRC_MIPS_GIC
143u64 gic_read_count(void) 143u64 notrace gic_read_count(void)
144{ 144{
145 unsigned int hi, hi2, lo; 145 unsigned int hi, hi2, lo;
146 146
@@ -167,7 +167,7 @@ unsigned int gic_get_count_width(void)
167 return bits; 167 return bits;
168} 168}
169 169
170void gic_write_compare(u64 cnt) 170void notrace gic_write_compare(u64 cnt)
171{ 171{
172 if (mips_cm_is64) { 172 if (mips_cm_is64) {
173 gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE), cnt); 173 gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE), cnt);
@@ -179,7 +179,7 @@ void gic_write_compare(u64 cnt)
179 } 179 }
180} 180}
181 181
182void gic_write_cpu_compare(u64 cnt, int cpu) 182void notrace gic_write_cpu_compare(u64 cnt, int cpu)
183{ 183{
184 unsigned long flags; 184 unsigned long flags;
185 185
diff --git a/drivers/irqchip/irq-xtensa-mx.c b/drivers/irqchip/irq-xtensa-mx.c
index bb3ac5fe5846..72a391e01011 100644
--- a/drivers/irqchip/irq-xtensa-mx.c
+++ b/drivers/irqchip/irq-xtensa-mx.c
@@ -142,7 +142,7 @@ static struct irq_chip xtensa_mx_irq_chip = {
142int __init xtensa_mx_init_legacy(struct device_node *interrupt_parent) 142int __init xtensa_mx_init_legacy(struct device_node *interrupt_parent)
143{ 143{
144 struct irq_domain *root_domain = 144 struct irq_domain *root_domain =
145 irq_domain_add_legacy(NULL, NR_IRQS, 0, 0, 145 irq_domain_add_legacy(NULL, NR_IRQS - 1, 1, 0,
146 &xtensa_mx_irq_domain_ops, 146 &xtensa_mx_irq_domain_ops,
147 &xtensa_mx_irq_chip); 147 &xtensa_mx_irq_chip);
148 irq_set_default_host(root_domain); 148 irq_set_default_host(root_domain);
diff --git a/drivers/irqchip/irq-xtensa-pic.c b/drivers/irqchip/irq-xtensa-pic.c
index 472ae1770964..f728755fa292 100644
--- a/drivers/irqchip/irq-xtensa-pic.c
+++ b/drivers/irqchip/irq-xtensa-pic.c
@@ -89,7 +89,7 @@ static struct irq_chip xtensa_irq_chip = {
89int __init xtensa_pic_init_legacy(struct device_node *interrupt_parent) 89int __init xtensa_pic_init_legacy(struct device_node *interrupt_parent)
90{ 90{
91 struct irq_domain *root_domain = 91 struct irq_domain *root_domain =
92 irq_domain_add_legacy(NULL, NR_IRQS, 0, 0, 92 irq_domain_add_legacy(NULL, NR_IRQS - 1, 1, 0,
93 &xtensa_irq_domain_ops, &xtensa_irq_chip); 93 &xtensa_irq_domain_ops, &xtensa_irq_chip);
94 irq_set_default_host(root_domain); 94 irq_set_default_host(root_domain);
95 return 0; 95 return 0;
diff --git a/drivers/isdn/i4l/isdn_ppp.c b/drivers/isdn/i4l/isdn_ppp.c
index d07dd5196ffc..8aa158a09180 100644
--- a/drivers/isdn/i4l/isdn_ppp.c
+++ b/drivers/isdn/i4l/isdn_ppp.c
@@ -2364,7 +2364,7 @@ static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_s
2364 id); 2364 id);
2365 return NULL; 2365 return NULL;
2366 } else { 2366 } else {
2367 rs = kzalloc(sizeof(struct ippp_ccp_reset_state), GFP_KERNEL); 2367 rs = kzalloc(sizeof(struct ippp_ccp_reset_state), GFP_ATOMIC);
2368 if (!rs) 2368 if (!rs)
2369 return NULL; 2369 return NULL;
2370 rs->state = CCPResetIdle; 2370 rs->state = CCPResetIdle;
diff --git a/drivers/isdn/mISDN/stack.c b/drivers/isdn/mISDN/stack.c
index 8b7faea2ddf8..422dced7c90a 100644
--- a/drivers/isdn/mISDN/stack.c
+++ b/drivers/isdn/mISDN/stack.c
@@ -75,7 +75,7 @@ send_socklist(struct mISDN_sock_list *sl, struct sk_buff *skb)
75 if (sk->sk_state != MISDN_BOUND) 75 if (sk->sk_state != MISDN_BOUND)
76 continue; 76 continue;
77 if (!cskb) 77 if (!cskb)
78 cskb = skb_copy(skb, GFP_KERNEL); 78 cskb = skb_copy(skb, GFP_ATOMIC);
79 if (!cskb) { 79 if (!cskb) {
80 printk(KERN_WARNING "%s no skb\n", __func__); 80 printk(KERN_WARNING "%s no skb\n", __func__);
81 break; 81 break;
diff --git a/drivers/leds/leds-bcm6328.c b/drivers/leds/leds-bcm6328.c
index 1548259297c1..2cfd9389ee96 100644
--- a/drivers/leds/leds-bcm6328.c
+++ b/drivers/leds/leds-bcm6328.c
@@ -242,7 +242,7 @@ static int bcm6328_hwled(struct device *dev, struct device_node *nc, u32 reg,
242 242
243 spin_lock_irqsave(lock, flags); 243 spin_lock_irqsave(lock, flags);
244 val = bcm6328_led_read(addr); 244 val = bcm6328_led_read(addr);
245 val |= (BIT(reg) << (((sel % 4) * 4) + 16)); 245 val |= (BIT(reg % 4) << (((sel % 4) * 4) + 16));
246 bcm6328_led_write(addr, val); 246 bcm6328_led_write(addr, val);
247 spin_unlock_irqrestore(lock, flags); 247 spin_unlock_irqrestore(lock, flags);
248 } 248 }
@@ -269,7 +269,7 @@ static int bcm6328_hwled(struct device *dev, struct device_node *nc, u32 reg,
269 269
270 spin_lock_irqsave(lock, flags); 270 spin_lock_irqsave(lock, flags);
271 val = bcm6328_led_read(addr); 271 val = bcm6328_led_read(addr);
272 val |= (BIT(reg) << ((sel % 4) * 4)); 272 val |= (BIT(reg % 4) << ((sel % 4) * 4));
273 bcm6328_led_write(addr, val); 273 bcm6328_led_write(addr, val);
274 spin_unlock_irqrestore(lock, flags); 274 spin_unlock_irqrestore(lock, flags);
275 } 275 }
diff --git a/drivers/leds/leds-pca955x.c b/drivers/leds/leds-pca955x.c
index 78a7ce816a47..9a873118ea5f 100644
--- a/drivers/leds/leds-pca955x.c
+++ b/drivers/leds/leds-pca955x.c
@@ -285,7 +285,7 @@ static int pca955x_probe(struct i2c_client *client,
285 "slave address 0x%02x\n", 285 "slave address 0x%02x\n",
286 client->name, chip->bits, client->addr); 286 client->name, chip->bits, client->addr);
287 287
288 if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) 288 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
289 return -EIO; 289 return -EIO;
290 290
291 if (pdata) { 291 if (pdata) {
diff --git a/drivers/leds/trigger/ledtrig-heartbeat.c b/drivers/leds/trigger/ledtrig-heartbeat.c
index afa3b4099214..e95ea65380c8 100644
--- a/drivers/leds/trigger/ledtrig-heartbeat.c
+++ b/drivers/leds/trigger/ledtrig-heartbeat.c
@@ -20,7 +20,6 @@
20#include <linux/sched/loadavg.h> 20#include <linux/sched/loadavg.h>
21#include <linux/leds.h> 21#include <linux/leds.h>
22#include <linux/reboot.h> 22#include <linux/reboot.h>
23#include <linux/suspend.h>
24#include "../leds.h" 23#include "../leds.h"
25 24
26static int panic_heartbeats; 25static int panic_heartbeats;
@@ -163,30 +162,6 @@ static struct led_trigger heartbeat_led_trigger = {
163 .deactivate = heartbeat_trig_deactivate, 162 .deactivate = heartbeat_trig_deactivate,
164}; 163};
165 164
166static int heartbeat_pm_notifier(struct notifier_block *nb,
167 unsigned long pm_event, void *unused)
168{
169 int rc;
170
171 switch (pm_event) {
172 case PM_SUSPEND_PREPARE:
173 case PM_HIBERNATION_PREPARE:
174 case PM_RESTORE_PREPARE:
175 led_trigger_unregister(&heartbeat_led_trigger);
176 break;
177 case PM_POST_SUSPEND:
178 case PM_POST_HIBERNATION:
179 case PM_POST_RESTORE:
180 rc = led_trigger_register(&heartbeat_led_trigger);
181 if (rc)
182 pr_err("could not re-register heartbeat trigger\n");
183 break;
184 default:
185 break;
186 }
187 return NOTIFY_DONE;
188}
189
190static int heartbeat_reboot_notifier(struct notifier_block *nb, 165static int heartbeat_reboot_notifier(struct notifier_block *nb,
191 unsigned long code, void *unused) 166 unsigned long code, void *unused)
192{ 167{
@@ -201,10 +176,6 @@ static int heartbeat_panic_notifier(struct notifier_block *nb,
201 return NOTIFY_DONE; 176 return NOTIFY_DONE;
202} 177}
203 178
204static struct notifier_block heartbeat_pm_nb = {
205 .notifier_call = heartbeat_pm_notifier,
206};
207
208static struct notifier_block heartbeat_reboot_nb = { 179static struct notifier_block heartbeat_reboot_nb = {
209 .notifier_call = heartbeat_reboot_notifier, 180 .notifier_call = heartbeat_reboot_notifier,
210}; 181};
@@ -221,14 +192,12 @@ static int __init heartbeat_trig_init(void)
221 atomic_notifier_chain_register(&panic_notifier_list, 192 atomic_notifier_chain_register(&panic_notifier_list,
222 &heartbeat_panic_nb); 193 &heartbeat_panic_nb);
223 register_reboot_notifier(&heartbeat_reboot_nb); 194 register_reboot_notifier(&heartbeat_reboot_nb);
224 register_pm_notifier(&heartbeat_pm_nb);
225 } 195 }
226 return rc; 196 return rc;
227} 197}
228 198
229static void __exit heartbeat_trig_exit(void) 199static void __exit heartbeat_trig_exit(void)
230{ 200{
231 unregister_pm_notifier(&heartbeat_pm_nb);
232 unregister_reboot_notifier(&heartbeat_reboot_nb); 201 unregister_reboot_notifier(&heartbeat_reboot_nb);
233 atomic_notifier_chain_unregister(&panic_notifier_list, 202 atomic_notifier_chain_unregister(&panic_notifier_list,
234 &heartbeat_panic_nb); 203 &heartbeat_panic_nb);
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
index bf7419a56454..f4eace5ea184 100644
--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
@@ -485,10 +485,10 @@ void bitmap_print_sb(struct bitmap *bitmap)
485 pr_debug(" magic: %08x\n", le32_to_cpu(sb->magic)); 485 pr_debug(" magic: %08x\n", le32_to_cpu(sb->magic));
486 pr_debug(" version: %d\n", le32_to_cpu(sb->version)); 486 pr_debug(" version: %d\n", le32_to_cpu(sb->version));
487 pr_debug(" uuid: %08x.%08x.%08x.%08x\n", 487 pr_debug(" uuid: %08x.%08x.%08x.%08x\n",
488 *(__u32 *)(sb->uuid+0), 488 le32_to_cpu(*(__u32 *)(sb->uuid+0)),
489 *(__u32 *)(sb->uuid+4), 489 le32_to_cpu(*(__u32 *)(sb->uuid+4)),
490 *(__u32 *)(sb->uuid+8), 490 le32_to_cpu(*(__u32 *)(sb->uuid+8)),
491 *(__u32 *)(sb->uuid+12)); 491 le32_to_cpu(*(__u32 *)(sb->uuid+12)));
492 pr_debug(" events: %llu\n", 492 pr_debug(" events: %llu\n",
493 (unsigned long long) le64_to_cpu(sb->events)); 493 (unsigned long long) le64_to_cpu(sb->events));
494 pr_debug("events cleared: %llu\n", 494 pr_debug("events cleared: %llu\n",
diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
index cd8139593ccd..840c1496b2b1 100644
--- a/drivers/md/dm-bufio.c
+++ b/drivers/md/dm-bufio.c
@@ -1334,7 +1334,7 @@ int dm_bufio_issue_flush(struct dm_bufio_client *c)
1334{ 1334{
1335 struct dm_io_request io_req = { 1335 struct dm_io_request io_req = {
1336 .bi_op = REQ_OP_WRITE, 1336 .bi_op = REQ_OP_WRITE,
1337 .bi_op_flags = REQ_PREFLUSH, 1337 .bi_op_flags = REQ_PREFLUSH | REQ_SYNC,
1338 .mem.type = DM_IO_KMEM, 1338 .mem.type = DM_IO_KMEM,
1339 .mem.ptr.addr = NULL, 1339 .mem.ptr.addr = NULL,
1340 .client = c->dm_io, 1340 .client = c->dm_io,
diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
index c7f7c8d76576..93b181088168 100644
--- a/drivers/md/dm-integrity.c
+++ b/drivers/md/dm-integrity.c
@@ -783,7 +783,8 @@ static void write_journal(struct dm_integrity_c *ic, unsigned commit_start, unsi
783 for (i = 0; i < commit_sections; i++) 783 for (i = 0; i < commit_sections; i++)
784 rw_section_mac(ic, commit_start + i, true); 784 rw_section_mac(ic, commit_start + i, true);
785 } 785 }
786 rw_journal(ic, REQ_OP_WRITE, REQ_FUA, commit_start, commit_sections, &io_comp); 786 rw_journal(ic, REQ_OP_WRITE, REQ_FUA | REQ_SYNC, commit_start,
787 commit_sections, &io_comp);
787 } else { 788 } else {
788 unsigned to_end; 789 unsigned to_end;
789 io_comp.in_flight = (atomic_t)ATOMIC_INIT(2); 790 io_comp.in_flight = (atomic_t)ATOMIC_INIT(2);
@@ -1104,10 +1105,13 @@ static void schedule_autocommit(struct dm_integrity_c *ic)
1104static void submit_flush_bio(struct dm_integrity_c *ic, struct dm_integrity_io *dio) 1105static void submit_flush_bio(struct dm_integrity_c *ic, struct dm_integrity_io *dio)
1105{ 1106{
1106 struct bio *bio; 1107 struct bio *bio;
1107 spin_lock_irq(&ic->endio_wait.lock); 1108 unsigned long flags;
1109
1110 spin_lock_irqsave(&ic->endio_wait.lock, flags);
1108 bio = dm_bio_from_per_bio_data(dio, sizeof(struct dm_integrity_io)); 1111 bio = dm_bio_from_per_bio_data(dio, sizeof(struct dm_integrity_io));
1109 bio_list_add(&ic->flush_bio_list, bio); 1112 bio_list_add(&ic->flush_bio_list, bio);
1110 spin_unlock_irq(&ic->endio_wait.lock); 1113 spin_unlock_irqrestore(&ic->endio_wait.lock, flags);
1114
1111 queue_work(ic->commit_wq, &ic->commit_work); 1115 queue_work(ic->commit_wq, &ic->commit_work);
1112} 1116}
1113 1117
@@ -2374,21 +2378,6 @@ static void dm_integrity_set(struct dm_target *ti, struct dm_integrity_c *ic)
2374 blk_queue_max_integrity_segments(disk->queue, UINT_MAX); 2378 blk_queue_max_integrity_segments(disk->queue, UINT_MAX);
2375} 2379}
2376 2380
2377/* FIXME: use new kvmalloc */
2378static void *dm_integrity_kvmalloc(size_t size, gfp_t gfp)
2379{
2380 void *ptr = NULL;
2381
2382 if (size <= PAGE_SIZE)
2383 ptr = kmalloc(size, GFP_KERNEL | gfp);
2384 if (!ptr && size <= KMALLOC_MAX_SIZE)
2385 ptr = kmalloc(size, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY | gfp);
2386 if (!ptr)
2387 ptr = __vmalloc(size, GFP_KERNEL | gfp, PAGE_KERNEL);
2388
2389 return ptr;
2390}
2391
2392static void dm_integrity_free_page_list(struct dm_integrity_c *ic, struct page_list *pl) 2381static void dm_integrity_free_page_list(struct dm_integrity_c *ic, struct page_list *pl)
2393{ 2382{
2394 unsigned i; 2383 unsigned i;
@@ -2407,7 +2396,7 @@ static struct page_list *dm_integrity_alloc_page_list(struct dm_integrity_c *ic)
2407 struct page_list *pl; 2396 struct page_list *pl;
2408 unsigned i; 2397 unsigned i;
2409 2398
2410 pl = dm_integrity_kvmalloc(page_list_desc_size, __GFP_ZERO); 2399 pl = kvmalloc(page_list_desc_size, GFP_KERNEL | __GFP_ZERO);
2411 if (!pl) 2400 if (!pl)
2412 return NULL; 2401 return NULL;
2413 2402
@@ -2437,7 +2426,7 @@ static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_int
2437 struct scatterlist **sl; 2426 struct scatterlist **sl;
2438 unsigned i; 2427 unsigned i;
2439 2428
2440 sl = dm_integrity_kvmalloc(ic->journal_sections * sizeof(struct scatterlist *), __GFP_ZERO); 2429 sl = kvmalloc(ic->journal_sections * sizeof(struct scatterlist *), GFP_KERNEL | __GFP_ZERO);
2441 if (!sl) 2430 if (!sl)
2442 return NULL; 2431 return NULL;
2443 2432
@@ -2453,7 +2442,7 @@ static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_int
2453 2442
2454 n_pages = (end_index - start_index + 1); 2443 n_pages = (end_index - start_index + 1);
2455 2444
2456 s = dm_integrity_kvmalloc(n_pages * sizeof(struct scatterlist), 0); 2445 s = kvmalloc(n_pages * sizeof(struct scatterlist), GFP_KERNEL);
2457 if (!s) { 2446 if (!s) {
2458 dm_integrity_free_journal_scatterlist(ic, sl); 2447 dm_integrity_free_journal_scatterlist(ic, sl);
2459 return NULL; 2448 return NULL;
@@ -2617,7 +2606,7 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
2617 goto bad; 2606 goto bad;
2618 } 2607 }
2619 2608
2620 sg = dm_integrity_kvmalloc((ic->journal_pages + 1) * sizeof(struct scatterlist), 0); 2609 sg = kvmalloc((ic->journal_pages + 1) * sizeof(struct scatterlist), GFP_KERNEL);
2621 if (!sg) { 2610 if (!sg) {
2622 *error = "Unable to allocate sg list"; 2611 *error = "Unable to allocate sg list";
2623 r = -ENOMEM; 2612 r = -ENOMEM;
@@ -2673,7 +2662,7 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
2673 r = -ENOMEM; 2662 r = -ENOMEM;
2674 goto bad; 2663 goto bad;
2675 } 2664 }
2676 ic->sk_requests = dm_integrity_kvmalloc(ic->journal_sections * sizeof(struct skcipher_request *), __GFP_ZERO); 2665 ic->sk_requests = kvmalloc(ic->journal_sections * sizeof(struct skcipher_request *), GFP_KERNEL | __GFP_ZERO);
2677 if (!ic->sk_requests) { 2666 if (!ic->sk_requests) {
2678 *error = "Unable to allocate sk requests"; 2667 *error = "Unable to allocate sk requests";
2679 r = -ENOMEM; 2668 r = -ENOMEM;
@@ -2740,7 +2729,7 @@ retest_commit_id:
2740 r = -ENOMEM; 2729 r = -ENOMEM;
2741 goto bad; 2730 goto bad;
2742 } 2731 }
2743 ic->journal_tree = dm_integrity_kvmalloc(journal_tree_size, 0); 2732 ic->journal_tree = kvmalloc(journal_tree_size, GFP_KERNEL);
2744 if (!ic->journal_tree) { 2733 if (!ic->journal_tree) {
2745 *error = "Could not allocate memory for journal tree"; 2734 *error = "Could not allocate memory for journal tree";
2746 r = -ENOMEM; 2735 r = -ENOMEM;
@@ -3054,6 +3043,11 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv)
3054 ti->error = "The device is too small"; 3043 ti->error = "The device is too small";
3055 goto bad; 3044 goto bad;
3056 } 3045 }
3046 if (ti->len > ic->provided_data_sectors) {
3047 r = -EINVAL;
3048 ti->error = "Not enough provided sectors for requested mapping size";
3049 goto bad;
3050 }
3057 3051
3058 if (!buffer_sectors) 3052 if (!buffer_sectors)
3059 buffer_sectors = 1; 3053 buffer_sectors = 1;
diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c
index 3702e502466d..8d5ca30f6551 100644
--- a/drivers/md/dm-io.c
+++ b/drivers/md/dm-io.c
@@ -317,8 +317,8 @@ static void do_region(int op, int op_flags, unsigned region,
317 else if (op == REQ_OP_WRITE_SAME) 317 else if (op == REQ_OP_WRITE_SAME)
318 special_cmd_max_sectors = q->limits.max_write_same_sectors; 318 special_cmd_max_sectors = q->limits.max_write_same_sectors;
319 if ((op == REQ_OP_DISCARD || op == REQ_OP_WRITE_ZEROES || 319 if ((op == REQ_OP_DISCARD || op == REQ_OP_WRITE_ZEROES ||
320 op == REQ_OP_WRITE_SAME) && 320 op == REQ_OP_WRITE_SAME) && special_cmd_max_sectors == 0) {
321 special_cmd_max_sectors == 0) { 321 atomic_inc(&io->count);
322 dec_count(io, region, -EOPNOTSUPP); 322 dec_count(io, region, -EOPNOTSUPP);
323 return; 323 return;
324 } 324 }
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index 0555b4410e05..41852ae287a5 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -1710,12 +1710,13 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl *param_kern
1710 } 1710 }
1711 1711
1712 /* 1712 /*
1713 * Try to avoid low memory issues when a device is suspended. 1713 * Use __GFP_HIGH to avoid low memory issues when a device is
1714 * suspended and the ioctl is needed to resume it.
1714 * Use kmalloc() rather than vmalloc() when we can. 1715 * Use kmalloc() rather than vmalloc() when we can.
1715 */ 1716 */
1716 dmi = NULL; 1717 dmi = NULL;
1717 noio_flag = memalloc_noio_save(); 1718 noio_flag = memalloc_noio_save();
1718 dmi = kvmalloc(param_kernel->data_size, GFP_KERNEL); 1719 dmi = kvmalloc(param_kernel->data_size, GFP_KERNEL | __GFP_HIGH);
1719 memalloc_noio_restore(noio_flag); 1720 memalloc_noio_restore(noio_flag);
1720 1721
1721 if (!dmi) { 1722 if (!dmi) {
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
index 7d893228c40f..b4b75dad816a 100644
--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
@@ -1927,7 +1927,7 @@ struct dm_raid_superblock {
1927 /******************************************************************** 1927 /********************************************************************
1928 * BELOW FOLLOW V1.9.0 EXTENSIONS TO THE PRISTINE SUPERBLOCK FORMAT!!! 1928 * BELOW FOLLOW V1.9.0 EXTENSIONS TO THE PRISTINE SUPERBLOCK FORMAT!!!
1929 * 1929 *
1930 * FEATURE_FLAG_SUPPORTS_V190 in the features member indicates that those exist 1930 * FEATURE_FLAG_SUPPORTS_V190 in the compat_features member indicates that those exist
1931 */ 1931 */
1932 1932
1933 __le32 flags; /* Flags defining array states for reshaping */ 1933 __le32 flags; /* Flags defining array states for reshaping */
@@ -2092,6 +2092,11 @@ static void super_sync(struct mddev *mddev, struct md_rdev *rdev)
2092 sb->layout = cpu_to_le32(mddev->layout); 2092 sb->layout = cpu_to_le32(mddev->layout);
2093 sb->stripe_sectors = cpu_to_le32(mddev->chunk_sectors); 2093 sb->stripe_sectors = cpu_to_le32(mddev->chunk_sectors);
2094 2094
2095 /********************************************************************
2096 * BELOW FOLLOW V1.9.0 EXTENSIONS TO THE PRISTINE SUPERBLOCK FORMAT!!!
2097 *
2098 * FEATURE_FLAG_SUPPORTS_V190 in the compat_features member indicates that those exist
2099 */
2095 sb->new_level = cpu_to_le32(mddev->new_level); 2100 sb->new_level = cpu_to_le32(mddev->new_level);
2096 sb->new_layout = cpu_to_le32(mddev->new_layout); 2101 sb->new_layout = cpu_to_le32(mddev->new_layout);
2097 sb->new_stripe_sectors = cpu_to_le32(mddev->new_chunk_sectors); 2102 sb->new_stripe_sectors = cpu_to_le32(mddev->new_chunk_sectors);
@@ -2438,8 +2443,14 @@ static int super_validate(struct raid_set *rs, struct md_rdev *rdev)
2438 mddev->bitmap_info.default_offset = mddev->bitmap_info.offset; 2443 mddev->bitmap_info.default_offset = mddev->bitmap_info.offset;
2439 2444
2440 if (!test_and_clear_bit(FirstUse, &rdev->flags)) { 2445 if (!test_and_clear_bit(FirstUse, &rdev->flags)) {
2441 /* Retrieve device size stored in superblock to be prepared for shrink */ 2446 /*
2442 rdev->sectors = le64_to_cpu(sb->sectors); 2447 * Retrieve rdev size stored in superblock to be prepared for shrink.
2448 * Check extended superblock members are present otherwise the size
2449 * will not be set!
2450 */
2451 if (le32_to_cpu(sb->compat_features) & FEATURE_FLAG_SUPPORTS_V190)
2452 rdev->sectors = le64_to_cpu(sb->sectors);
2453
2443 rdev->recovery_offset = le64_to_cpu(sb->disk_recovery_offset); 2454 rdev->recovery_offset = le64_to_cpu(sb->disk_recovery_offset);
2444 if (rdev->recovery_offset == MaxSector) 2455 if (rdev->recovery_offset == MaxSector)
2445 set_bit(In_sync, &rdev->flags); 2456 set_bit(In_sync, &rdev->flags);
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
index a95cbb80fb34..4da8858856fb 100644
--- a/drivers/md/dm-raid1.c
+++ b/drivers/md/dm-raid1.c
@@ -145,6 +145,7 @@ static void dispatch_bios(void *context, struct bio_list *bio_list)
145 145
146struct dm_raid1_bio_record { 146struct dm_raid1_bio_record {
147 struct mirror *m; 147 struct mirror *m;
148 /* if details->bi_bdev == NULL, details were not saved */
148 struct dm_bio_details details; 149 struct dm_bio_details details;
149 region_t write_region; 150 region_t write_region;
150}; 151};
@@ -260,7 +261,7 @@ static int mirror_flush(struct dm_target *ti)
260 struct mirror *m; 261 struct mirror *m;
261 struct dm_io_request io_req = { 262 struct dm_io_request io_req = {
262 .bi_op = REQ_OP_WRITE, 263 .bi_op = REQ_OP_WRITE,
263 .bi_op_flags = REQ_PREFLUSH, 264 .bi_op_flags = REQ_PREFLUSH | REQ_SYNC,
264 .mem.type = DM_IO_KMEM, 265 .mem.type = DM_IO_KMEM,
265 .mem.ptr.addr = NULL, 266 .mem.ptr.addr = NULL,
266 .client = ms->io_client, 267 .client = ms->io_client,
@@ -1198,6 +1199,8 @@ static int mirror_map(struct dm_target *ti, struct bio *bio)
1198 struct dm_raid1_bio_record *bio_record = 1199 struct dm_raid1_bio_record *bio_record =
1199 dm_per_bio_data(bio, sizeof(struct dm_raid1_bio_record)); 1200 dm_per_bio_data(bio, sizeof(struct dm_raid1_bio_record));
1200 1201
1202 bio_record->details.bi_bdev = NULL;
1203
1201 if (rw == WRITE) { 1204 if (rw == WRITE) {
1202 /* Save region for mirror_end_io() handler */ 1205 /* Save region for mirror_end_io() handler */
1203 bio_record->write_region = dm_rh_bio_to_region(ms->rh, bio); 1206 bio_record->write_region = dm_rh_bio_to_region(ms->rh, bio);
@@ -1256,12 +1259,22 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio, int error)
1256 } 1259 }
1257 1260
1258 if (error == -EOPNOTSUPP) 1261 if (error == -EOPNOTSUPP)
1259 return error; 1262 goto out;
1260 1263
1261 if ((error == -EWOULDBLOCK) && (bio->bi_opf & REQ_RAHEAD)) 1264 if ((error == -EWOULDBLOCK) && (bio->bi_opf & REQ_RAHEAD))
1262 return error; 1265 goto out;
1263 1266
1264 if (unlikely(error)) { 1267 if (unlikely(error)) {
1268 if (!bio_record->details.bi_bdev) {
1269 /*
1270 * There wasn't enough memory to record necessary
1271 * information for a retry or there was no other
1272 * mirror in-sync.
1273 */
1274 DMERR_LIMIT("Mirror read failed.");
1275 return -EIO;
1276 }
1277
1265 m = bio_record->m; 1278 m = bio_record->m;
1266 1279
1267 DMERR("Mirror read failed from %s. Trying alternative device.", 1280 DMERR("Mirror read failed from %s. Trying alternative device.",
@@ -1277,6 +1290,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio, int error)
1277 bd = &bio_record->details; 1290 bd = &bio_record->details;
1278 1291
1279 dm_bio_restore(bd, bio); 1292 dm_bio_restore(bd, bio);
1293 bio_record->details.bi_bdev = NULL;
1280 bio->bi_error = 0; 1294 bio->bi_error = 0;
1281 1295
1282 queue_bio(ms, bio, rw); 1296 queue_bio(ms, bio, rw);
@@ -1285,6 +1299,9 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio, int error)
1285 DMERR("All replicated volumes dead, failing I/O"); 1299 DMERR("All replicated volumes dead, failing I/O");
1286 } 1300 }
1287 1301
1302out:
1303 bio_record->details.bi_bdev = NULL;
1304
1288 return error; 1305 return error;
1289} 1306}
1290 1307
diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c
index b93476c3ba3f..c5534d294773 100644
--- a/drivers/md/dm-snap-persistent.c
+++ b/drivers/md/dm-snap-persistent.c
@@ -741,7 +741,8 @@ static void persistent_commit_exception(struct dm_exception_store *store,
741 /* 741 /*
742 * Commit exceptions to disk. 742 * Commit exceptions to disk.
743 */ 743 */
744 if (ps->valid && area_io(ps, REQ_OP_WRITE, REQ_PREFLUSH | REQ_FUA)) 744 if (ps->valid && area_io(ps, REQ_OP_WRITE,
745 REQ_PREFLUSH | REQ_FUA | REQ_SYNC))
745 ps->valid = 0; 746 ps->valid = 0;
746 747
747 /* 748 /*
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index 17ad50daed08..28808e5ec0fd 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -1094,6 +1094,19 @@ static void process_prepared_discard_passdown_pt1(struct dm_thin_new_mapping *m)
1094 return; 1094 return;
1095 } 1095 }
1096 1096
1097 /*
1098 * Increment the unmapped blocks. This prevents a race between the
1099 * passdown io and reallocation of freed blocks.
1100 */
1101 r = dm_pool_inc_data_range(pool->pmd, m->data_block, data_end);
1102 if (r) {
1103 metadata_operation_failed(pool, "dm_pool_inc_data_range", r);
1104 bio_io_error(m->bio);
1105 cell_defer_no_holder(tc, m->cell);
1106 mempool_free(m, pool->mapping_pool);
1107 return;
1108 }
1109
1097 discard_parent = bio_alloc(GFP_NOIO, 1); 1110 discard_parent = bio_alloc(GFP_NOIO, 1);
1098 if (!discard_parent) { 1111 if (!discard_parent) {
1099 DMWARN("%s: unable to allocate top level discard bio for passdown. Skipping passdown.", 1112 DMWARN("%s: unable to allocate top level discard bio for passdown. Skipping passdown.",
@@ -1114,19 +1127,6 @@ static void process_prepared_discard_passdown_pt1(struct dm_thin_new_mapping *m)
1114 end_discard(&op, r); 1127 end_discard(&op, r);
1115 } 1128 }
1116 } 1129 }
1117
1118 /*
1119 * Increment the unmapped blocks. This prevents a race between the
1120 * passdown io and reallocation of freed blocks.
1121 */
1122 r = dm_pool_inc_data_range(pool->pmd, m->data_block, data_end);
1123 if (r) {
1124 metadata_operation_failed(pool, "dm_pool_inc_data_range", r);
1125 bio_io_error(m->bio);
1126 cell_defer_no_holder(tc, m->cell);
1127 mempool_free(m, pool->mapping_pool);
1128 return;
1129 }
1130} 1130}
1131 1131
1132static void process_prepared_discard_passdown_pt2(struct dm_thin_new_mapping *m) 1132static void process_prepared_discard_passdown_pt2(struct dm_thin_new_mapping *m)
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
index 97de961a3bfc..1ec9b2c51c07 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -166,7 +166,7 @@ static int verity_hash_init(struct dm_verity *v, struct ahash_request *req,
166 return r; 166 return r;
167 } 167 }
168 168
169 if (likely(v->version >= 1)) 169 if (likely(v->salt_size && (v->version >= 1)))
170 r = verity_hash_update(v, req, v->salt, v->salt_size, res); 170 r = verity_hash_update(v, req, v->salt, v->salt_size, res);
171 171
172 return r; 172 return r;
@@ -177,7 +177,7 @@ static int verity_hash_final(struct dm_verity *v, struct ahash_request *req,
177{ 177{
178 int r; 178 int r;
179 179
180 if (unlikely(!v->version)) { 180 if (unlikely(v->salt_size && (!v->version))) {
181 r = verity_hash_update(v, req, v->salt, v->salt_size, res); 181 r = verity_hash_update(v, req, v->salt, v->salt_size, res);
182 182
183 if (r < 0) { 183 if (r < 0) {
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 6ef9500226c0..37ccd73c79ec 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1657,7 +1657,7 @@ static struct mapped_device *alloc_dev(int minor)
1657 1657
1658 bio_init(&md->flush_bio, NULL, 0); 1658 bio_init(&md->flush_bio, NULL, 0);
1659 md->flush_bio.bi_bdev = md->bdev; 1659 md->flush_bio.bi_bdev = md->bdev;
1660 md->flush_bio.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH; 1660 md->flush_bio.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH | REQ_SYNC;
1661 1661
1662 dm_stats_init(&md->stats); 1662 dm_stats_init(&md->stats);
1663 1663
diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c
index 7299ce2f08a8..03082e17c65c 100644
--- a/drivers/md/md-cluster.c
+++ b/drivers/md/md-cluster.c
@@ -1311,8 +1311,10 @@ static int add_new_disk(struct mddev *mddev, struct md_rdev *rdev)
1311 cmsg.raid_slot = cpu_to_le32(rdev->desc_nr); 1311 cmsg.raid_slot = cpu_to_le32(rdev->desc_nr);
1312 lock_comm(cinfo, 1); 1312 lock_comm(cinfo, 1);
1313 ret = __sendmsg(cinfo, &cmsg); 1313 ret = __sendmsg(cinfo, &cmsg);
1314 if (ret) 1314 if (ret) {
1315 unlock_comm(cinfo);
1315 return ret; 1316 return ret;
1317 }
1316 cinfo->no_new_dev_lockres->flags |= DLM_LKF_NOQUEUE; 1318 cinfo->no_new_dev_lockres->flags |= DLM_LKF_NOQUEUE;
1317 ret = dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_EX); 1319 ret = dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_EX);
1318 cinfo->no_new_dev_lockres->flags &= ~DLM_LKF_NOQUEUE; 1320 cinfo->no_new_dev_lockres->flags &= ~DLM_LKF_NOQUEUE;
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 10367ffe92e3..87edc342ccb3 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -765,7 +765,7 @@ void md_super_write(struct mddev *mddev, struct md_rdev *rdev,
765 test_bit(FailFast, &rdev->flags) && 765 test_bit(FailFast, &rdev->flags) &&
766 !test_bit(LastDev, &rdev->flags)) 766 !test_bit(LastDev, &rdev->flags))
767 ff = MD_FAILFAST; 767 ff = MD_FAILFAST;
768 bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH | REQ_FUA | ff; 768 bio->bi_opf = REQ_OP_WRITE | REQ_SYNC | REQ_PREFLUSH | REQ_FUA | ff;
769 769
770 atomic_inc(&mddev->pending_writes); 770 atomic_inc(&mddev->pending_writes);
771 submit_bio(bio); 771 submit_bio(bio);
@@ -5174,6 +5174,18 @@ static void mddev_delayed_delete(struct work_struct *ws)
5174 5174
5175static void no_op(struct percpu_ref *r) {} 5175static void no_op(struct percpu_ref *r) {}
5176 5176
5177int mddev_init_writes_pending(struct mddev *mddev)
5178{
5179 if (mddev->writes_pending.percpu_count_ptr)
5180 return 0;
5181 if (percpu_ref_init(&mddev->writes_pending, no_op, 0, GFP_KERNEL) < 0)
5182 return -ENOMEM;
5183 /* We want to start with the refcount at zero */
5184 percpu_ref_put(&mddev->writes_pending);
5185 return 0;
5186}
5187EXPORT_SYMBOL_GPL(mddev_init_writes_pending);
5188
5177static int md_alloc(dev_t dev, char *name) 5189static int md_alloc(dev_t dev, char *name)
5178{ 5190{
5179 /* 5191 /*
@@ -5239,10 +5251,6 @@ static int md_alloc(dev_t dev, char *name)
5239 blk_queue_make_request(mddev->queue, md_make_request); 5251 blk_queue_make_request(mddev->queue, md_make_request);
5240 blk_set_stacking_limits(&mddev->queue->limits); 5252 blk_set_stacking_limits(&mddev->queue->limits);
5241 5253
5242 if (percpu_ref_init(&mddev->writes_pending, no_op, 0, GFP_KERNEL) < 0)
5243 goto abort;
5244 /* We want to start with the refcount at zero */
5245 percpu_ref_put(&mddev->writes_pending);
5246 disk = alloc_disk(1 << shift); 5254 disk = alloc_disk(1 << shift);
5247 if (!disk) { 5255 if (!disk) {
5248 blk_cleanup_queue(mddev->queue); 5256 blk_cleanup_queue(mddev->queue);
diff --git a/drivers/md/md.h b/drivers/md/md.h
index 11f15146ce51..0fa1de42c42b 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -648,6 +648,7 @@ extern void md_unregister_thread(struct md_thread **threadp);
648extern void md_wakeup_thread(struct md_thread *thread); 648extern void md_wakeup_thread(struct md_thread *thread);
649extern void md_check_recovery(struct mddev *mddev); 649extern void md_check_recovery(struct mddev *mddev);
650extern void md_reap_sync_thread(struct mddev *mddev); 650extern void md_reap_sync_thread(struct mddev *mddev);
651extern int mddev_init_writes_pending(struct mddev *mddev);
651extern void md_write_start(struct mddev *mddev, struct bio *bi); 652extern void md_write_start(struct mddev *mddev, struct bio *bi);
652extern void md_write_inc(struct mddev *mddev, struct bio *bi); 653extern void md_write_inc(struct mddev *mddev, struct bio *bi);
653extern void md_write_end(struct mddev *mddev); 654extern void md_write_end(struct mddev *mddev);
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index af5056d56878..e1a7e3d4c5e4 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -3063,6 +3063,8 @@ static int raid1_run(struct mddev *mddev)
3063 mdname(mddev)); 3063 mdname(mddev));
3064 return -EIO; 3064 return -EIO;
3065 } 3065 }
3066 if (mddev_init_writes_pending(mddev) < 0)
3067 return -ENOMEM;
3066 /* 3068 /*
3067 * copy the already verified devices into our private RAID1 3069 * copy the already verified devices into our private RAID1
3068 * bookkeeping area. [whatever we allocate in run(), 3070 * bookkeeping area. [whatever we allocate in run(),
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 4343d7ff9916..797ed60abd5e 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -3611,6 +3611,9 @@ static int raid10_run(struct mddev *mddev)
3611 int first = 1; 3611 int first = 1;
3612 bool discard_supported = false; 3612 bool discard_supported = false;
3613 3613
3614 if (mddev_init_writes_pending(mddev) < 0)
3615 return -ENOMEM;
3616
3614 if (mddev->private == NULL) { 3617 if (mddev->private == NULL) {
3615 conf = setup_conf(mddev); 3618 conf = setup_conf(mddev);
3616 if (IS_ERR(conf)) 3619 if (IS_ERR(conf))
diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c
index 4c00bc248287..0a7af8b0a80a 100644
--- a/drivers/md/raid5-cache.c
+++ b/drivers/md/raid5-cache.c
@@ -1782,7 +1782,7 @@ static int r5l_log_write_empty_meta_block(struct r5l_log *log, sector_t pos,
1782 mb->checksum = cpu_to_le32(crc32c_le(log->uuid_checksum, 1782 mb->checksum = cpu_to_le32(crc32c_le(log->uuid_checksum,
1783 mb, PAGE_SIZE)); 1783 mb, PAGE_SIZE));
1784 if (!sync_page_io(log->rdev, pos, PAGE_SIZE, page, REQ_OP_WRITE, 1784 if (!sync_page_io(log->rdev, pos, PAGE_SIZE, page, REQ_OP_WRITE,
1785 REQ_FUA, false)) { 1785 REQ_SYNC | REQ_FUA, false)) {
1786 __free_page(page); 1786 __free_page(page);
1787 return -EIO; 1787 return -EIO;
1788 } 1788 }
@@ -2388,7 +2388,7 @@ r5c_recovery_rewrite_data_only_stripes(struct r5l_log *log,
2388 mb->checksum = cpu_to_le32(crc32c_le(log->uuid_checksum, 2388 mb->checksum = cpu_to_le32(crc32c_le(log->uuid_checksum,
2389 mb, PAGE_SIZE)); 2389 mb, PAGE_SIZE));
2390 sync_page_io(log->rdev, ctx->pos, PAGE_SIZE, page, 2390 sync_page_io(log->rdev, ctx->pos, PAGE_SIZE, page,
2391 REQ_OP_WRITE, REQ_FUA, false); 2391 REQ_OP_WRITE, REQ_SYNC | REQ_FUA, false);
2392 sh->log_start = ctx->pos; 2392 sh->log_start = ctx->pos;
2393 list_add_tail(&sh->r5c, &log->stripe_in_journal_list); 2393 list_add_tail(&sh->r5c, &log->stripe_in_journal_list);
2394 atomic_inc(&log->stripe_in_journal_count); 2394 atomic_inc(&log->stripe_in_journal_count);
diff --git a/drivers/md/raid5-ppl.c b/drivers/md/raid5-ppl.c
index 5d25bebf3328..ccce92e68d7f 100644
--- a/drivers/md/raid5-ppl.c
+++ b/drivers/md/raid5-ppl.c
@@ -907,8 +907,8 @@ static int ppl_write_empty_header(struct ppl_log *log)
907 pplhdr->checksum = cpu_to_le32(~crc32c_le(~0, pplhdr, PAGE_SIZE)); 907 pplhdr->checksum = cpu_to_le32(~crc32c_le(~0, pplhdr, PAGE_SIZE));
908 908
909 if (!sync_page_io(rdev, rdev->ppl.sector - rdev->data_offset, 909 if (!sync_page_io(rdev, rdev->ppl.sector - rdev->data_offset,
910 PPL_HEADER_SIZE, page, REQ_OP_WRITE | REQ_FUA, 0, 910 PPL_HEADER_SIZE, page, REQ_OP_WRITE | REQ_SYNC |
911 false)) { 911 REQ_FUA, 0, false)) {
912 md_error(rdev->mddev, rdev); 912 md_error(rdev->mddev, rdev);
913 ret = -EIO; 913 ret = -EIO;
914 } 914 }
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 9c4f7659f8b1..ec0f951ae19f 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -4085,10 +4085,15 @@ static void handle_parity_checks5(struct r5conf *conf, struct stripe_head *sh,
4085 set_bit(STRIPE_INSYNC, &sh->state); 4085 set_bit(STRIPE_INSYNC, &sh->state);
4086 else { 4086 else {
4087 atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches); 4087 atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches);
4088 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) 4088 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) {
4089 /* don't try to repair!! */ 4089 /* don't try to repair!! */
4090 set_bit(STRIPE_INSYNC, &sh->state); 4090 set_bit(STRIPE_INSYNC, &sh->state);
4091 else { 4091 pr_warn_ratelimited("%s: mismatch sector in range "
4092 "%llu-%llu\n", mdname(conf->mddev),
4093 (unsigned long long) sh->sector,
4094 (unsigned long long) sh->sector +
4095 STRIPE_SECTORS);
4096 } else {
4092 sh->check_state = check_state_compute_run; 4097 sh->check_state = check_state_compute_run;
4093 set_bit(STRIPE_COMPUTE_RUN, &sh->state); 4098 set_bit(STRIPE_COMPUTE_RUN, &sh->state);
4094 set_bit(STRIPE_OP_COMPUTE_BLK, &s->ops_request); 4099 set_bit(STRIPE_OP_COMPUTE_BLK, &s->ops_request);
@@ -4237,10 +4242,15 @@ static void handle_parity_checks6(struct r5conf *conf, struct stripe_head *sh,
4237 } 4242 }
4238 } else { 4243 } else {
4239 atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches); 4244 atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches);
4240 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) 4245 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) {
4241 /* don't try to repair!! */ 4246 /* don't try to repair!! */
4242 set_bit(STRIPE_INSYNC, &sh->state); 4247 set_bit(STRIPE_INSYNC, &sh->state);
4243 else { 4248 pr_warn_ratelimited("%s: mismatch sector in range "
4249 "%llu-%llu\n", mdname(conf->mddev),
4250 (unsigned long long) sh->sector,
4251 (unsigned long long) sh->sector +
4252 STRIPE_SECTORS);
4253 } else {
4244 int *target = &sh->ops.target; 4254 int *target = &sh->ops.target;
4245 4255
4246 sh->ops.target = -1; 4256 sh->ops.target = -1;
@@ -7108,6 +7118,9 @@ static int raid5_run(struct mddev *mddev)
7108 long long min_offset_diff = 0; 7118 long long min_offset_diff = 0;
7109 int first = 1; 7119 int first = 1;
7110 7120
7121 if (mddev_init_writes_pending(mddev) < 0)
7122 return -ENOMEM;
7123
7111 if (mddev->recovery_cp != MaxSector) 7124 if (mddev->recovery_cp != MaxSector)
7112 pr_notice("md/raid:%s: not clean -- starting background reconstruction\n", 7125 pr_notice("md/raid:%s: not clean -- starting background reconstruction\n",
7113 mdname(mddev)); 7126 mdname(mddev));
diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig
index b72edd27f880..55d9c2b82b7e 100644
--- a/drivers/media/Kconfig
+++ b/drivers/media/Kconfig
@@ -2,6 +2,12 @@
2# Multimedia device configuration 2# Multimedia device configuration
3# 3#
4 4
5config CEC_CORE
6 tristate
7
8config CEC_NOTIFIER
9 bool
10
5menuconfig MEDIA_SUPPORT 11menuconfig MEDIA_SUPPORT
6 tristate "Multimedia support" 12 tristate "Multimedia support"
7 depends on HAS_IOMEM 13 depends on HAS_IOMEM
diff --git a/drivers/media/Makefile b/drivers/media/Makefile
index 523fea3648ad..044503aa8801 100644
--- a/drivers/media/Makefile
+++ b/drivers/media/Makefile
@@ -4,8 +4,6 @@
4 4
5media-objs := media-device.o media-devnode.o media-entity.o 5media-objs := media-device.o media-devnode.o media-entity.o
6 6
7obj-$(CONFIG_CEC_CORE) += cec/
8
9# 7#
10# I2C drivers should come before other drivers, otherwise they'll fail 8# I2C drivers should come before other drivers, otherwise they'll fail
11# when compiled as builtin drivers 9# when compiled as builtin drivers
@@ -26,6 +24,8 @@ obj-$(CONFIG_DVB_CORE) += dvb-core/
26# There are both core and drivers at RC subtree - merge before drivers 24# There are both core and drivers at RC subtree - merge before drivers
27obj-y += rc/ 25obj-y += rc/
28 26
27obj-$(CONFIG_CEC_CORE) += cec/
28
29# 29#
30# Finally, merge the drivers that require the core 30# Finally, merge the drivers that require the core
31# 31#
diff --git a/drivers/media/cec/Kconfig b/drivers/media/cec/Kconfig
index f944d93e3167..43428cec3a01 100644
--- a/drivers/media/cec/Kconfig
+++ b/drivers/media/cec/Kconfig
@@ -1,19 +1,6 @@
1config CEC_CORE
2 tristate
3 depends on MEDIA_CEC_SUPPORT
4 default y
5
6config MEDIA_CEC_NOTIFIER
7 bool
8
9config MEDIA_CEC_RC 1config MEDIA_CEC_RC
10 bool "HDMI CEC RC integration" 2 bool "HDMI CEC RC integration"
11 depends on CEC_CORE && RC_CORE 3 depends on CEC_CORE && RC_CORE
4 depends on CEC_CORE=m || RC_CORE=y
12 ---help--- 5 ---help---
13 Pass on CEC remote control messages to the RC framework. 6 Pass on CEC remote control messages to the RC framework.
14
15config MEDIA_CEC_DEBUG
16 bool "HDMI CEC debugfs interface"
17 depends on CEC_CORE && DEBUG_FS
18 ---help---
19 Turns on the DebugFS interface for CEC devices.
diff --git a/drivers/media/cec/Makefile b/drivers/media/cec/Makefile
index 402a6c62a3e8..eaf408e64669 100644
--- a/drivers/media/cec/Makefile
+++ b/drivers/media/cec/Makefile
@@ -1,6 +1,6 @@
1cec-objs := cec-core.o cec-adap.o cec-api.o cec-edid.o 1cec-objs := cec-core.o cec-adap.o cec-api.o cec-edid.o
2 2
3ifeq ($(CONFIG_MEDIA_CEC_NOTIFIER),y) 3ifeq ($(CONFIG_CEC_NOTIFIER),y)
4 cec-objs += cec-notifier.o 4 cec-objs += cec-notifier.o
5endif 5endif
6 6
diff --git a/drivers/media/cec/cec-adap.c b/drivers/media/cec/cec-adap.c
index f5fe01c9da8a..9dfc79800c71 100644
--- a/drivers/media/cec/cec-adap.c
+++ b/drivers/media/cec/cec-adap.c
@@ -1864,7 +1864,7 @@ void cec_monitor_all_cnt_dec(struct cec_adapter *adap)
1864 WARN_ON(call_op(adap, adap_monitor_all_enable, 0)); 1864 WARN_ON(call_op(adap, adap_monitor_all_enable, 0));
1865} 1865}
1866 1866
1867#ifdef CONFIG_MEDIA_CEC_DEBUG 1867#ifdef CONFIG_DEBUG_FS
1868/* 1868/*
1869 * Log the current state of the CEC adapter. 1869 * Log the current state of the CEC adapter.
1870 * Very useful for debugging. 1870 * Very useful for debugging.
diff --git a/drivers/media/cec/cec-api.c b/drivers/media/cec/cec-api.c
index 0860fb458757..999926f731c8 100644
--- a/drivers/media/cec/cec-api.c
+++ b/drivers/media/cec/cec-api.c
@@ -271,16 +271,10 @@ static long cec_receive(struct cec_adapter *adap, struct cec_fh *fh,
271 bool block, struct cec_msg __user *parg) 271 bool block, struct cec_msg __user *parg)
272{ 272{
273 struct cec_msg msg = {}; 273 struct cec_msg msg = {};
274 long err = 0; 274 long err;
275 275
276 if (copy_from_user(&msg, parg, sizeof(msg))) 276 if (copy_from_user(&msg, parg, sizeof(msg)))
277 return -EFAULT; 277 return -EFAULT;
278 mutex_lock(&adap->lock);
279 if (!adap->is_configured && fh->mode_follower < CEC_MODE_MONITOR)
280 err = -ENONET;
281 mutex_unlock(&adap->lock);
282 if (err)
283 return err;
284 278
285 err = cec_receive_msg(fh, &msg, block); 279 err = cec_receive_msg(fh, &msg, block);
286 if (err) 280 if (err)
diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c
index f9ebff90f8eb..2f87748ba4fc 100644
--- a/drivers/media/cec/cec-core.c
+++ b/drivers/media/cec/cec-core.c
@@ -187,7 +187,7 @@ static void cec_devnode_unregister(struct cec_devnode *devnode)
187 put_device(&devnode->dev); 187 put_device(&devnode->dev);
188} 188}
189 189
190#ifdef CONFIG_MEDIA_CEC_NOTIFIER 190#ifdef CONFIG_CEC_NOTIFIER
191static void cec_cec_notify(struct cec_adapter *adap, u16 pa) 191static void cec_cec_notify(struct cec_adapter *adap, u16 pa)
192{ 192{
193 cec_s_phys_addr(adap, pa, false); 193 cec_s_phys_addr(adap, pa, false);
@@ -323,7 +323,7 @@ int cec_register_adapter(struct cec_adapter *adap,
323 } 323 }
324 324
325 dev_set_drvdata(&adap->devnode.dev, adap); 325 dev_set_drvdata(&adap->devnode.dev, adap);
326#ifdef CONFIG_MEDIA_CEC_DEBUG 326#ifdef CONFIG_DEBUG_FS
327 if (!top_cec_dir) 327 if (!top_cec_dir)
328 return 0; 328 return 0;
329 329
@@ -355,7 +355,7 @@ void cec_unregister_adapter(struct cec_adapter *adap)
355 adap->rc = NULL; 355 adap->rc = NULL;
356#endif 356#endif
357 debugfs_remove_recursive(adap->cec_dir); 357 debugfs_remove_recursive(adap->cec_dir);
358#ifdef CONFIG_MEDIA_CEC_NOTIFIER 358#ifdef CONFIG_CEC_NOTIFIER
359 if (adap->notifier) 359 if (adap->notifier)
360 cec_notifier_unregister(adap->notifier); 360 cec_notifier_unregister(adap->notifier);
361#endif 361#endif
@@ -395,7 +395,7 @@ static int __init cec_devnode_init(void)
395 return ret; 395 return ret;
396 } 396 }
397 397
398#ifdef CONFIG_MEDIA_CEC_DEBUG 398#ifdef CONFIG_DEBUG_FS
399 top_cec_dir = debugfs_create_dir("cec", NULL); 399 top_cec_dir = debugfs_create_dir("cec", NULL);
400 if (IS_ERR_OR_NULL(top_cec_dir)) { 400 if (IS_ERR_OR_NULL(top_cec_dir)) {
401 pr_warn("cec: Failed to create debugfs cec dir\n"); 401 pr_warn("cec: Failed to create debugfs cec dir\n");
diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
index fd181c99ce11..aaa9471c7d11 100644
--- a/drivers/media/i2c/Kconfig
+++ b/drivers/media/i2c/Kconfig
@@ -220,7 +220,8 @@ config VIDEO_ADV7604
220 220
221config VIDEO_ADV7604_CEC 221config VIDEO_ADV7604_CEC
222 bool "Enable Analog Devices ADV7604 CEC support" 222 bool "Enable Analog Devices ADV7604 CEC support"
223 depends on VIDEO_ADV7604 && CEC_CORE 223 depends on VIDEO_ADV7604
224 select CEC_CORE
224 ---help--- 225 ---help---
225 When selected the adv7604 will support the optional 226 When selected the adv7604 will support the optional
226 HDMI CEC feature. 227 HDMI CEC feature.
@@ -240,7 +241,8 @@ config VIDEO_ADV7842
240 241
241config VIDEO_ADV7842_CEC 242config VIDEO_ADV7842_CEC
242 bool "Enable Analog Devices ADV7842 CEC support" 243 bool "Enable Analog Devices ADV7842 CEC support"
243 depends on VIDEO_ADV7842 && CEC_CORE 244 depends on VIDEO_ADV7842
245 select CEC_CORE
244 ---help--- 246 ---help---
245 When selected the adv7842 will support the optional 247 When selected the adv7842 will support the optional
246 HDMI CEC feature. 248 HDMI CEC feature.
@@ -478,7 +480,8 @@ config VIDEO_ADV7511
478 480
479config VIDEO_ADV7511_CEC 481config VIDEO_ADV7511_CEC
480 bool "Enable Analog Devices ADV7511 CEC support" 482 bool "Enable Analog Devices ADV7511 CEC support"
481 depends on VIDEO_ADV7511 && CEC_CORE 483 depends on VIDEO_ADV7511
484 select CEC_CORE
482 ---help--- 485 ---help---
483 When selected the adv7511 will support the optional 486 When selected the adv7511 will support the optional
484 HDMI CEC feature. 487 HDMI CEC feature.
diff --git a/drivers/media/i2c/tc358743.c b/drivers/media/i2c/tc358743.c
index acef4eca269f..3251cba89e8f 100644
--- a/drivers/media/i2c/tc358743.c
+++ b/drivers/media/i2c/tc358743.c
@@ -223,7 +223,7 @@ static void i2c_wr8(struct v4l2_subdev *sd, u16 reg, u8 val)
223static void i2c_wr8_and_or(struct v4l2_subdev *sd, u16 reg, 223static void i2c_wr8_and_or(struct v4l2_subdev *sd, u16 reg,
224 u8 mask, u8 val) 224 u8 mask, u8 val)
225{ 225{
226 i2c_wrreg(sd, reg, (i2c_rdreg(sd, reg, 2) & mask) | val, 2); 226 i2c_wrreg(sd, reg, (i2c_rdreg(sd, reg, 1) & mask) | val, 1);
227} 227}
228 228
229static u16 i2c_rd16(struct v4l2_subdev *sd, u16 reg) 229static u16 i2c_rd16(struct v4l2_subdev *sd, u16 reg)
diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
index ac026ee1ca07..041cb80a26b1 100644
--- a/drivers/media/platform/Kconfig
+++ b/drivers/media/platform/Kconfig
@@ -501,8 +501,9 @@ if CEC_PLATFORM_DRIVERS
501 501
502config VIDEO_SAMSUNG_S5P_CEC 502config VIDEO_SAMSUNG_S5P_CEC
503 tristate "Samsung S5P CEC driver" 503 tristate "Samsung S5P CEC driver"
504 depends on CEC_CORE && (PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST) 504 depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST
505 select MEDIA_CEC_NOTIFIER 505 select CEC_CORE
506 select CEC_NOTIFIER
506 ---help--- 507 ---help---
507 This is a driver for Samsung S5P HDMI CEC interface. It uses the 508 This is a driver for Samsung S5P HDMI CEC interface. It uses the
508 generic CEC framework interface. 509 generic CEC framework interface.
@@ -511,8 +512,9 @@ config VIDEO_SAMSUNG_S5P_CEC
511 512
512config VIDEO_STI_HDMI_CEC 513config VIDEO_STI_HDMI_CEC
513 tristate "STMicroelectronics STiH4xx HDMI CEC driver" 514 tristate "STMicroelectronics STiH4xx HDMI CEC driver"
514 depends on CEC_CORE && (ARCH_STI || COMPILE_TEST) 515 depends on ARCH_STI || COMPILE_TEST
515 select MEDIA_CEC_NOTIFIER 516 select CEC_CORE
517 select CEC_NOTIFIER
516 ---help--- 518 ---help---
517 This is a driver for STIH4xx HDMI CEC interface. It uses the 519 This is a driver for STIH4xx HDMI CEC interface. It uses the
518 generic CEC framework interface. 520 generic CEC framework interface.
diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c
index 57a842ff3097..b7731b18ecae 100644
--- a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c
+++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c
@@ -493,10 +493,10 @@ static int vdec_h264_get_param(unsigned long h_vdec,
493} 493}
494 494
495static struct vdec_common_if vdec_h264_if = { 495static struct vdec_common_if vdec_h264_if = {
496 vdec_h264_init, 496 .init = vdec_h264_init,
497 vdec_h264_decode, 497 .decode = vdec_h264_decode,
498 vdec_h264_get_param, 498 .get_param = vdec_h264_get_param,
499 vdec_h264_deinit, 499 .deinit = vdec_h264_deinit,
500}; 500};
501 501
502struct vdec_common_if *get_h264_dec_comm_if(void); 502struct vdec_common_if *get_h264_dec_comm_if(void);
diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c
index 6e7a62ae0842..b9fad6a48879 100644
--- a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c
+++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c
@@ -620,10 +620,10 @@ static void vdec_vp8_deinit(unsigned long h_vdec)
620} 620}
621 621
622static struct vdec_common_if vdec_vp8_if = { 622static struct vdec_common_if vdec_vp8_if = {
623 vdec_vp8_init, 623 .init = vdec_vp8_init,
624 vdec_vp8_decode, 624 .decode = vdec_vp8_decode,
625 vdec_vp8_get_param, 625 .get_param = vdec_vp8_get_param,
626 vdec_vp8_deinit, 626 .deinit = vdec_vp8_deinit,
627}; 627};
628 628
629struct vdec_common_if *get_vp8_dec_comm_if(void); 629struct vdec_common_if *get_vp8_dec_comm_if(void);
diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c
index 5539b1853f16..1daee1207469 100644
--- a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c
+++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c
@@ -979,10 +979,10 @@ static int vdec_vp9_get_param(unsigned long h_vdec,
979} 979}
980 980
981static struct vdec_common_if vdec_vp9_if = { 981static struct vdec_common_if vdec_vp9_if = {
982 vdec_vp9_init, 982 .init = vdec_vp9_init,
983 vdec_vp9_decode, 983 .decode = vdec_vp9_decode,
984 vdec_vp9_get_param, 984 .get_param = vdec_vp9_get_param,
985 vdec_vp9_deinit, 985 .deinit = vdec_vp9_deinit,
986}; 986};
987 987
988struct vdec_common_if *get_vp9_dec_comm_if(void); 988struct vdec_common_if *get_vp9_dec_comm_if(void);
diff --git a/drivers/media/platform/vivid/Kconfig b/drivers/media/platform/vivid/Kconfig
index b36ac19dc6e4..154de92dd809 100644
--- a/drivers/media/platform/vivid/Kconfig
+++ b/drivers/media/platform/vivid/Kconfig
@@ -26,7 +26,8 @@ config VIDEO_VIVID
26 26
27config VIDEO_VIVID_CEC 27config VIDEO_VIVID_CEC
28 bool "Enable CEC emulation support" 28 bool "Enable CEC emulation support"
29 depends on VIDEO_VIVID && CEC_CORE 29 depends on VIDEO_VIVID
30 select CEC_CORE
30 ---help--- 31 ---help---
31 When selected the vivid module will emulate the optional 32 When selected the vivid module will emulate the optional
32 HDMI CEC feature. 33 HDMI CEC feature.
diff --git a/drivers/media/rc/rc-ir-raw.c b/drivers/media/rc/rc-ir-raw.c
index 90f66dc7c0d7..a2fc1a1d58b0 100644
--- a/drivers/media/rc/rc-ir-raw.c
+++ b/drivers/media/rc/rc-ir-raw.c
@@ -211,7 +211,7 @@ EXPORT_SYMBOL_GPL(ir_raw_event_set_idle);
211 */ 211 */
212void ir_raw_event_handle(struct rc_dev *dev) 212void ir_raw_event_handle(struct rc_dev *dev)
213{ 213{
214 if (!dev->raw) 214 if (!dev->raw || !dev->raw->thread)
215 return; 215 return;
216 216
217 wake_up_process(dev->raw->thread); 217 wake_up_process(dev->raw->thread);
@@ -490,6 +490,7 @@ int ir_raw_event_register(struct rc_dev *dev)
490{ 490{
491 int rc; 491 int rc;
492 struct ir_raw_handler *handler; 492 struct ir_raw_handler *handler;
493 struct task_struct *thread;
493 494
494 if (!dev) 495 if (!dev)
495 return -EINVAL; 496 return -EINVAL;
@@ -507,13 +508,15 @@ int ir_raw_event_register(struct rc_dev *dev)
507 * because the event is coming from userspace 508 * because the event is coming from userspace
508 */ 509 */
509 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) { 510 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) {
510 dev->raw->thread = kthread_run(ir_raw_event_thread, dev->raw, 511 thread = kthread_run(ir_raw_event_thread, dev->raw, "rc%u",
511 "rc%u", dev->minor); 512 dev->minor);
512 513
513 if (IS_ERR(dev->raw->thread)) { 514 if (IS_ERR(thread)) {
514 rc = PTR_ERR(dev->raw->thread); 515 rc = PTR_ERR(thread);
515 goto out; 516 goto out;
516 } 517 }
518
519 dev->raw->thread = thread;
517 } 520 }
518 521
519 mutex_lock(&ir_raw_handler_lock); 522 mutex_lock(&ir_raw_handler_lock);
diff --git a/drivers/media/rc/sir_ir.c b/drivers/media/rc/sir_ir.c
index e12ec50bf0bf..90a5f8fd5eea 100644
--- a/drivers/media/rc/sir_ir.c
+++ b/drivers/media/rc/sir_ir.c
@@ -183,9 +183,15 @@ static irqreturn_t sir_interrupt(int irq, void *dev_id)
183 static unsigned long delt; 183 static unsigned long delt;
184 unsigned long deltintr; 184 unsigned long deltintr;
185 unsigned long flags; 185 unsigned long flags;
186 int counter = 0;
186 int iir, lsr; 187 int iir, lsr;
187 188
188 while ((iir = inb(io + UART_IIR) & UART_IIR_ID)) { 189 while ((iir = inb(io + UART_IIR) & UART_IIR_ID)) {
190 if (++counter > 256) {
191 dev_err(&sir_ir_dev->dev, "Trapped in interrupt");
192 break;
193 }
194
189 switch (iir & UART_IIR_ID) { /* FIXME toto treba preriedit */ 195 switch (iir & UART_IIR_ID) { /* FIXME toto treba preriedit */
190 case UART_IIR_MSI: 196 case UART_IIR_MSI:
191 (void)inb(io + UART_MSR); 197 (void)inb(io + UART_MSR);
diff --git a/drivers/media/usb/pulse8-cec/Kconfig b/drivers/media/usb/pulse8-cec/Kconfig
index 8937f3986a01..18ead44824ba 100644
--- a/drivers/media/usb/pulse8-cec/Kconfig
+++ b/drivers/media/usb/pulse8-cec/Kconfig
@@ -1,6 +1,7 @@
1config USB_PULSE8_CEC 1config USB_PULSE8_CEC
2 tristate "Pulse Eight HDMI CEC" 2 tristate "Pulse Eight HDMI CEC"
3 depends on USB_ACM && CEC_CORE 3 depends on USB_ACM
4 select CEC_CORE
4 select SERIO 5 select SERIO
5 select SERIO_SERPORT 6 select SERIO_SERPORT
6 ---help--- 7 ---help---
diff --git a/drivers/media/usb/rainshadow-cec/Kconfig b/drivers/media/usb/rainshadow-cec/Kconfig
index 3eb86607efb8..030ef01b1ff0 100644
--- a/drivers/media/usb/rainshadow-cec/Kconfig
+++ b/drivers/media/usb/rainshadow-cec/Kconfig
@@ -1,6 +1,7 @@
1config USB_RAINSHADOW_CEC 1config USB_RAINSHADOW_CEC
2 tristate "RainShadow Tech HDMI CEC" 2 tristate "RainShadow Tech HDMI CEC"
3 depends on USB_ACM && CEC_CORE 3 depends on USB_ACM
4 select CEC_CORE
4 select SERIO 5 select SERIO
5 select SERIO_SERPORT 6 select SERIO_SERPORT
6 ---help--- 7 ---help---
diff --git a/drivers/media/usb/rainshadow-cec/rainshadow-cec.c b/drivers/media/usb/rainshadow-cec/rainshadow-cec.c
index 541ca543f71f..4126552c9055 100644
--- a/drivers/media/usb/rainshadow-cec/rainshadow-cec.c
+++ b/drivers/media/usb/rainshadow-cec/rainshadow-cec.c
@@ -119,7 +119,7 @@ static void rain_irq_work_handler(struct work_struct *work)
119 119
120 while (true) { 120 while (true) {
121 unsigned long flags; 121 unsigned long flags;
122 bool exit_loop; 122 bool exit_loop = false;
123 char data; 123 char data;
124 124
125 spin_lock_irqsave(&rain->buf_lock, flags); 125 spin_lock_irqsave(&rain->buf_lock, flags);
@@ -336,6 +336,7 @@ static int rain_connect(struct serio *serio, struct serio_driver *drv)
336 serio_set_drvdata(serio, rain); 336 serio_set_drvdata(serio, rain);
337 INIT_WORK(&rain->work, rain_irq_work_handler); 337 INIT_WORK(&rain->work, rain_irq_work_handler);
338 mutex_init(&rain->write_lock); 338 mutex_init(&rain->write_lock);
339 spin_lock_init(&rain->buf_lock);
339 340
340 err = serio_open(serio, drv); 341 err = serio_open(serio, drv);
341 if (err) 342 if (err)
diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
index 94afbbf92807..c0175ea7e7ad 100644
--- a/drivers/media/v4l2-core/videobuf2-core.c
+++ b/drivers/media/v4l2-core/videobuf2-core.c
@@ -868,7 +868,7 @@ EXPORT_SYMBOL_GPL(vb2_core_create_bufs);
868 868
869void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no) 869void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no)
870{ 870{
871 if (plane_no > vb->num_planes || !vb->planes[plane_no].mem_priv) 871 if (plane_no >= vb->num_planes || !vb->planes[plane_no].mem_priv)
872 return NULL; 872 return NULL;
873 873
874 return call_ptr_memop(vb, vaddr, vb->planes[plane_no].mem_priv); 874 return call_ptr_memop(vb, vaddr, vb->planes[plane_no].mem_priv);
diff --git a/drivers/memory/atmel-ebi.c b/drivers/memory/atmel-ebi.c
index 35910f945bfa..99e644cda4d1 100644
--- a/drivers/memory/atmel-ebi.c
+++ b/drivers/memory/atmel-ebi.c
@@ -581,7 +581,7 @@ static int atmel_ebi_probe(struct platform_device *pdev)
581 return of_platform_populate(np, NULL, NULL, dev); 581 return of_platform_populate(np, NULL, NULL, dev);
582} 582}
583 583
584static int atmel_ebi_resume(struct device *dev) 584static __maybe_unused int atmel_ebi_resume(struct device *dev)
585{ 585{
586 struct atmel_ebi *ebi = dev_get_drvdata(dev); 586 struct atmel_ebi *ebi = dev_get_drvdata(dev);
587 struct atmel_ebi_dev *ebid; 587 struct atmel_ebi_dev *ebid;
diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
index 75488e65cd96..8d46e3ad9529 100644
--- a/drivers/mfd/arizona-core.c
+++ b/drivers/mfd/arizona-core.c
@@ -245,8 +245,7 @@ static int arizona_poll_reg(struct arizona *arizona,
245 int ret; 245 int ret;
246 246
247 ret = regmap_read_poll_timeout(arizona->regmap, 247 ret = regmap_read_poll_timeout(arizona->regmap,
248 ARIZONA_INTERRUPT_RAW_STATUS_5, val, 248 reg, val, ((val & mask) == target),
249 ((val & mask) == target),
250 ARIZONA_REG_POLL_DELAY_US, 249 ARIZONA_REG_POLL_DELAY_US,
251 timeout_ms * 1000); 250 timeout_ms * 1000);
252 if (ret) 251 if (ret)
diff --git a/drivers/misc/cxl/context.c b/drivers/misc/cxl/context.c
index 4472ce11f98d..8c32040b9c09 100644
--- a/drivers/misc/cxl/context.c
+++ b/drivers/misc/cxl/context.c
@@ -45,7 +45,7 @@ int cxl_context_init(struct cxl_context *ctx, struct cxl_afu *afu, bool master)
45 mutex_init(&ctx->mapping_lock); 45 mutex_init(&ctx->mapping_lock);
46 ctx->mapping = NULL; 46 ctx->mapping = NULL;
47 47
48 if (cxl_is_psl8(afu)) { 48 if (cxl_is_power8()) {
49 spin_lock_init(&ctx->sste_lock); 49 spin_lock_init(&ctx->sste_lock);
50 50
51 /* 51 /*
@@ -189,7 +189,7 @@ int cxl_context_iomap(struct cxl_context *ctx, struct vm_area_struct *vma)
189 if (start + len > ctx->afu->adapter->ps_size) 189 if (start + len > ctx->afu->adapter->ps_size)
190 return -EINVAL; 190 return -EINVAL;
191 191
192 if (cxl_is_psl9(ctx->afu)) { 192 if (cxl_is_power9()) {
193 /* 193 /*
194 * Make sure there is a valid problem state 194 * Make sure there is a valid problem state
195 * area space for this AFU. 195 * area space for this AFU.
@@ -324,7 +324,7 @@ static void reclaim_ctx(struct rcu_head *rcu)
324{ 324{
325 struct cxl_context *ctx = container_of(rcu, struct cxl_context, rcu); 325 struct cxl_context *ctx = container_of(rcu, struct cxl_context, rcu);
326 326
327 if (cxl_is_psl8(ctx->afu)) 327 if (cxl_is_power8())
328 free_page((u64)ctx->sstp); 328 free_page((u64)ctx->sstp);
329 if (ctx->ff_page) 329 if (ctx->ff_page)
330 __free_page(ctx->ff_page); 330 __free_page(ctx->ff_page);
diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h
index c8568ea7c518..a03f8e7535e5 100644
--- a/drivers/misc/cxl/cxl.h
+++ b/drivers/misc/cxl/cxl.h
@@ -357,6 +357,7 @@ static const cxl_p2n_reg_t CXL_PSL_WED_An = {0x0A0};
357#define CXL_PSL9_DSISR_An_PF_RGP 0x0000000000000090ULL /* PTE not found (Radix Guest (parent)) 0b10010000 */ 357#define CXL_PSL9_DSISR_An_PF_RGP 0x0000000000000090ULL /* PTE not found (Radix Guest (parent)) 0b10010000 */
358#define CXL_PSL9_DSISR_An_PF_HRH 0x0000000000000094ULL /* PTE not found (HPT/Radix Host) 0b10010100 */ 358#define CXL_PSL9_DSISR_An_PF_HRH 0x0000000000000094ULL /* PTE not found (HPT/Radix Host) 0b10010100 */
359#define CXL_PSL9_DSISR_An_PF_STEG 0x000000000000009CULL /* PTE not found (STEG VA) 0b10011100 */ 359#define CXL_PSL9_DSISR_An_PF_STEG 0x000000000000009CULL /* PTE not found (STEG VA) 0b10011100 */
360#define CXL_PSL9_DSISR_An_URTCH 0x00000000000000B4ULL /* Unsupported Radix Tree Configuration 0b10110100 */
360 361
361/****** CXL_PSL_TFC_An ******************************************************/ 362/****** CXL_PSL_TFC_An ******************************************************/
362#define CXL_PSL_TFC_An_A (1ull << (63-28)) /* Acknowledge non-translation fault */ 363#define CXL_PSL_TFC_An_A (1ull << (63-28)) /* Acknowledge non-translation fault */
@@ -844,24 +845,15 @@ static inline bool cxl_is_power8(void)
844 845
845static inline bool cxl_is_power9(void) 846static inline bool cxl_is_power9(void)
846{ 847{
847 /* intermediate solution */ 848 if (pvr_version_is(PVR_POWER9))
848 if (!cxl_is_power8() &&
849 (cpu_has_feature(CPU_FTRS_POWER9) ||
850 cpu_has_feature(CPU_FTR_POWER9_DD1)))
851 return true; 849 return true;
852 return false; 850 return false;
853} 851}
854 852
855static inline bool cxl_is_psl8(struct cxl_afu *afu) 853static inline bool cxl_is_power9_dd1(void)
856{ 854{
857 if (afu->adapter->caia_major == 1) 855 if ((pvr_version_is(PVR_POWER9)) &&
858 return true; 856 cpu_has_feature(CPU_FTR_POWER9_DD1))
859 return false;
860}
861
862static inline bool cxl_is_psl9(struct cxl_afu *afu)
863{
864 if (afu->adapter->caia_major == 2)
865 return true; 857 return true;
866 return false; 858 return false;
867} 859}
diff --git a/drivers/misc/cxl/fault.c b/drivers/misc/cxl/fault.c
index 5344448f514e..c79e39bad7a4 100644
--- a/drivers/misc/cxl/fault.c
+++ b/drivers/misc/cxl/fault.c
@@ -187,7 +187,7 @@ static struct mm_struct *get_mem_context(struct cxl_context *ctx)
187 187
188static bool cxl_is_segment_miss(struct cxl_context *ctx, u64 dsisr) 188static bool cxl_is_segment_miss(struct cxl_context *ctx, u64 dsisr)
189{ 189{
190 if ((cxl_is_psl8(ctx->afu)) && (dsisr & CXL_PSL_DSISR_An_DS)) 190 if ((cxl_is_power8() && (dsisr & CXL_PSL_DSISR_An_DS)))
191 return true; 191 return true;
192 192
193 return false; 193 return false;
@@ -195,16 +195,23 @@ static bool cxl_is_segment_miss(struct cxl_context *ctx, u64 dsisr)
195 195
196static bool cxl_is_page_fault(struct cxl_context *ctx, u64 dsisr) 196static bool cxl_is_page_fault(struct cxl_context *ctx, u64 dsisr)
197{ 197{
198 if ((cxl_is_psl8(ctx->afu)) && (dsisr & CXL_PSL_DSISR_An_DM)) 198 u64 crs; /* Translation Checkout Response Status */
199 return true;
200 199
201 if ((cxl_is_psl9(ctx->afu)) && 200 if ((cxl_is_power8()) && (dsisr & CXL_PSL_DSISR_An_DM))
202 ((dsisr & CXL_PSL9_DSISR_An_CO_MASK) &
203 (CXL_PSL9_DSISR_An_PF_SLR | CXL_PSL9_DSISR_An_PF_RGC |
204 CXL_PSL9_DSISR_An_PF_RGP | CXL_PSL9_DSISR_An_PF_HRH |
205 CXL_PSL9_DSISR_An_PF_STEG)))
206 return true; 201 return true;
207 202
203 if (cxl_is_power9()) {
204 crs = (dsisr & CXL_PSL9_DSISR_An_CO_MASK);
205 if ((crs == CXL_PSL9_DSISR_An_PF_SLR) ||
206 (crs == CXL_PSL9_DSISR_An_PF_RGC) ||
207 (crs == CXL_PSL9_DSISR_An_PF_RGP) ||
208 (crs == CXL_PSL9_DSISR_An_PF_HRH) ||
209 (crs == CXL_PSL9_DSISR_An_PF_STEG) ||
210 (crs == CXL_PSL9_DSISR_An_URTCH)) {
211 return true;
212 }
213 }
214
208 return false; 215 return false;
209} 216}
210 217
diff --git a/drivers/misc/cxl/file.c b/drivers/misc/cxl/file.c
index 17b433f1ce23..0761271d68c5 100644
--- a/drivers/misc/cxl/file.c
+++ b/drivers/misc/cxl/file.c
@@ -159,11 +159,8 @@ static long afu_ioctl_start_work(struct cxl_context *ctx,
159 159
160 /* Do this outside the status_mutex to avoid a circular dependency with 160 /* Do this outside the status_mutex to avoid a circular dependency with
161 * the locking in cxl_mmap_fault() */ 161 * the locking in cxl_mmap_fault() */
162 if (copy_from_user(&work, uwork, 162 if (copy_from_user(&work, uwork, sizeof(work)))
163 sizeof(struct cxl_ioctl_start_work))) { 163 return -EFAULT;
164 rc = -EFAULT;
165 goto out;
166 }
167 164
168 mutex_lock(&ctx->status_mutex); 165 mutex_lock(&ctx->status_mutex);
169 if (ctx->status != OPENED) { 166 if (ctx->status != OPENED) {
diff --git a/drivers/misc/cxl/main.c b/drivers/misc/cxl/main.c
index 1703655072b1..c1ba0d42cbc8 100644
--- a/drivers/misc/cxl/main.c
+++ b/drivers/misc/cxl/main.c
@@ -329,8 +329,15 @@ static int __init init_cxl(void)
329 329
330 cxl_debugfs_init(); 330 cxl_debugfs_init();
331 331
332 if ((rc = register_cxl_calls(&cxl_calls))) 332 /*
333 goto err; 333 * we don't register the callback on P9. slb callack is only
334 * used for the PSL8 MMU and CX4.
335 */
336 if (cxl_is_power8()) {
337 rc = register_cxl_calls(&cxl_calls);
338 if (rc)
339 goto err;
340 }
334 341
335 if (cpu_has_feature(CPU_FTR_HVMODE)) { 342 if (cpu_has_feature(CPU_FTR_HVMODE)) {
336 cxl_ops = &cxl_native_ops; 343 cxl_ops = &cxl_native_ops;
@@ -347,7 +354,8 @@ static int __init init_cxl(void)
347 354
348 return 0; 355 return 0;
349err1: 356err1:
350 unregister_cxl_calls(&cxl_calls); 357 if (cxl_is_power8())
358 unregister_cxl_calls(&cxl_calls);
351err: 359err:
352 cxl_debugfs_exit(); 360 cxl_debugfs_exit();
353 cxl_file_exit(); 361 cxl_file_exit();
@@ -366,7 +374,8 @@ static void exit_cxl(void)
366 374
367 cxl_debugfs_exit(); 375 cxl_debugfs_exit();
368 cxl_file_exit(); 376 cxl_file_exit();
369 unregister_cxl_calls(&cxl_calls); 377 if (cxl_is_power8())
378 unregister_cxl_calls(&cxl_calls);
370 idr_destroy(&cxl_adapter_idr); 379 idr_destroy(&cxl_adapter_idr);
371} 380}
372 381
diff --git a/drivers/misc/cxl/native.c b/drivers/misc/cxl/native.c
index 871a2f09c718..2b2f8894149d 100644
--- a/drivers/misc/cxl/native.c
+++ b/drivers/misc/cxl/native.c
@@ -105,11 +105,16 @@ static int native_afu_reset(struct cxl_afu *afu)
105 CXL_AFU_Cntl_An_RS_MASK | CXL_AFU_Cntl_An_ES_MASK, 105 CXL_AFU_Cntl_An_RS_MASK | CXL_AFU_Cntl_An_ES_MASK,
106 false); 106 false);
107 107
108 /* Re-enable any masked interrupts */ 108 /*
109 serr = cxl_p1n_read(afu, CXL_PSL_SERR_An); 109 * Re-enable any masked interrupts when the AFU is not
110 serr &= ~CXL_PSL_SERR_An_IRQ_MASKS; 110 * activated to avoid side effects after attaching a process
111 cxl_p1n_write(afu, CXL_PSL_SERR_An, serr); 111 * in dedicated mode.
112 112 */
113 if (afu->current_mode == 0) {
114 serr = cxl_p1n_read(afu, CXL_PSL_SERR_An);
115 serr &= ~CXL_PSL_SERR_An_IRQ_MASKS;
116 cxl_p1n_write(afu, CXL_PSL_SERR_An, serr);
117 }
113 118
114 return rc; 119 return rc;
115} 120}
@@ -139,9 +144,9 @@ int cxl_psl_purge(struct cxl_afu *afu)
139 144
140 pr_devel("PSL purge request\n"); 145 pr_devel("PSL purge request\n");
141 146
142 if (cxl_is_psl8(afu)) 147 if (cxl_is_power8())
143 trans_fault = CXL_PSL_DSISR_TRANS; 148 trans_fault = CXL_PSL_DSISR_TRANS;
144 if (cxl_is_psl9(afu)) 149 if (cxl_is_power9())
145 trans_fault = CXL_PSL9_DSISR_An_TF; 150 trans_fault = CXL_PSL9_DSISR_An_TF;
146 151
147 if (!cxl_ops->link_ok(afu->adapter, afu)) { 152 if (!cxl_ops->link_ok(afu->adapter, afu)) {
@@ -603,7 +608,7 @@ static u64 calculate_sr(struct cxl_context *ctx)
603 if (!test_tsk_thread_flag(current, TIF_32BIT)) 608 if (!test_tsk_thread_flag(current, TIF_32BIT))
604 sr |= CXL_PSL_SR_An_SF; 609 sr |= CXL_PSL_SR_An_SF;
605 } 610 }
606 if (cxl_is_psl9(ctx->afu)) { 611 if (cxl_is_power9()) {
607 if (radix_enabled()) 612 if (radix_enabled())
608 sr |= CXL_PSL_SR_An_XLAT_ror; 613 sr |= CXL_PSL_SR_An_XLAT_ror;
609 else 614 else
@@ -1117,10 +1122,10 @@ static irqreturn_t native_handle_psl_slice_error(struct cxl_context *ctx,
1117 1122
1118static bool cxl_is_translation_fault(struct cxl_afu *afu, u64 dsisr) 1123static bool cxl_is_translation_fault(struct cxl_afu *afu, u64 dsisr)
1119{ 1124{
1120 if ((cxl_is_psl8(afu)) && (dsisr & CXL_PSL_DSISR_TRANS)) 1125 if ((cxl_is_power8()) && (dsisr & CXL_PSL_DSISR_TRANS))
1121 return true; 1126 return true;
1122 1127
1123 if ((cxl_is_psl9(afu)) && (dsisr & CXL_PSL9_DSISR_An_TF)) 1128 if ((cxl_is_power9()) && (dsisr & CXL_PSL9_DSISR_An_TF))
1124 return true; 1129 return true;
1125 1130
1126 return false; 1131 return false;
@@ -1194,10 +1199,10 @@ static void native_irq_wait(struct cxl_context *ctx)
1194 if (ph != ctx->pe) 1199 if (ph != ctx->pe)
1195 return; 1200 return;
1196 dsisr = cxl_p2n_read(ctx->afu, CXL_PSL_DSISR_An); 1201 dsisr = cxl_p2n_read(ctx->afu, CXL_PSL_DSISR_An);
1197 if (cxl_is_psl8(ctx->afu) && 1202 if (cxl_is_power8() &&
1198 ((dsisr & CXL_PSL_DSISR_PENDING) == 0)) 1203 ((dsisr & CXL_PSL_DSISR_PENDING) == 0))
1199 return; 1204 return;
1200 if (cxl_is_psl9(ctx->afu) && 1205 if (cxl_is_power9() &&
1201 ((dsisr & CXL_PSL9_DSISR_PENDING) == 0)) 1206 ((dsisr & CXL_PSL9_DSISR_PENDING) == 0))
1202 return; 1207 return;
1203 /* 1208 /*
@@ -1302,13 +1307,16 @@ int cxl_native_register_psl_err_irq(struct cxl *adapter)
1302 1307
1303void cxl_native_release_psl_err_irq(struct cxl *adapter) 1308void cxl_native_release_psl_err_irq(struct cxl *adapter)
1304{ 1309{
1305 if (adapter->native->err_virq != irq_find_mapping(NULL, adapter->native->err_hwirq)) 1310 if (adapter->native->err_virq == 0 ||
1311 adapter->native->err_virq !=
1312 irq_find_mapping(NULL, adapter->native->err_hwirq))
1306 return; 1313 return;
1307 1314
1308 cxl_p1_write(adapter, CXL_PSL_ErrIVTE, 0x0000000000000000); 1315 cxl_p1_write(adapter, CXL_PSL_ErrIVTE, 0x0000000000000000);
1309 cxl_unmap_irq(adapter->native->err_virq, adapter); 1316 cxl_unmap_irq(adapter->native->err_virq, adapter);
1310 cxl_ops->release_one_irq(adapter, adapter->native->err_hwirq); 1317 cxl_ops->release_one_irq(adapter, adapter->native->err_hwirq);
1311 kfree(adapter->irq_name); 1318 kfree(adapter->irq_name);
1319 adapter->native->err_virq = 0;
1312} 1320}
1313 1321
1314int cxl_native_register_serr_irq(struct cxl_afu *afu) 1322int cxl_native_register_serr_irq(struct cxl_afu *afu)
@@ -1346,13 +1354,15 @@ int cxl_native_register_serr_irq(struct cxl_afu *afu)
1346 1354
1347void cxl_native_release_serr_irq(struct cxl_afu *afu) 1355void cxl_native_release_serr_irq(struct cxl_afu *afu)
1348{ 1356{
1349 if (afu->serr_virq != irq_find_mapping(NULL, afu->serr_hwirq)) 1357 if (afu->serr_virq == 0 ||
1358 afu->serr_virq != irq_find_mapping(NULL, afu->serr_hwirq))
1350 return; 1359 return;
1351 1360
1352 cxl_p1n_write(afu, CXL_PSL_SERR_An, 0x0000000000000000); 1361 cxl_p1n_write(afu, CXL_PSL_SERR_An, 0x0000000000000000);
1353 cxl_unmap_irq(afu->serr_virq, afu); 1362 cxl_unmap_irq(afu->serr_virq, afu);
1354 cxl_ops->release_one_irq(afu->adapter, afu->serr_hwirq); 1363 cxl_ops->release_one_irq(afu->adapter, afu->serr_hwirq);
1355 kfree(afu->err_irq_name); 1364 kfree(afu->err_irq_name);
1365 afu->serr_virq = 0;
1356} 1366}
1357 1367
1358int cxl_native_register_psl_irq(struct cxl_afu *afu) 1368int cxl_native_register_psl_irq(struct cxl_afu *afu)
@@ -1375,12 +1385,15 @@ int cxl_native_register_psl_irq(struct cxl_afu *afu)
1375 1385
1376void cxl_native_release_psl_irq(struct cxl_afu *afu) 1386void cxl_native_release_psl_irq(struct cxl_afu *afu)
1377{ 1387{
1378 if (afu->native->psl_virq != irq_find_mapping(NULL, afu->native->psl_hwirq)) 1388 if (afu->native->psl_virq == 0 ||
1389 afu->native->psl_virq !=
1390 irq_find_mapping(NULL, afu->native->psl_hwirq))
1379 return; 1391 return;
1380 1392
1381 cxl_unmap_irq(afu->native->psl_virq, afu); 1393 cxl_unmap_irq(afu->native->psl_virq, afu);
1382 cxl_ops->release_one_irq(afu->adapter, afu->native->psl_hwirq); 1394 cxl_ops->release_one_irq(afu->adapter, afu->native->psl_hwirq);
1383 kfree(afu->psl_irq_name); 1395 kfree(afu->psl_irq_name);
1396 afu->native->psl_virq = 0;
1384} 1397}
1385 1398
1386static void recover_psl_err(struct cxl_afu *afu, u64 errstat) 1399static void recover_psl_err(struct cxl_afu *afu, u64 errstat)
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
index 6dc1ee5b92c9..1eb9859809bf 100644
--- a/drivers/misc/cxl/pci.c
+++ b/drivers/misc/cxl/pci.c
@@ -436,7 +436,7 @@ static int init_implementation_adapter_regs_psl9(struct cxl *adapter, struct pci
436 /* nMMU_ID Defaults to: b’000001001’*/ 436 /* nMMU_ID Defaults to: b’000001001’*/
437 xsl_dsnctl |= ((u64)0x09 << (63-28)); 437 xsl_dsnctl |= ((u64)0x09 << (63-28));
438 438
439 if (cxl_is_power9() && !cpu_has_feature(CPU_FTR_POWER9_DD1)) { 439 if (!(cxl_is_power9_dd1())) {
440 /* 440 /*
441 * Used to identify CAPI packets which should be sorted into 441 * Used to identify CAPI packets which should be sorted into
442 * the Non-Blocking queues by the PHB. This field should match 442 * the Non-Blocking queues by the PHB. This field should match
@@ -491,7 +491,7 @@ static int init_implementation_adapter_regs_psl9(struct cxl *adapter, struct pci
491 cxl_p1_write(adapter, CXL_PSL9_APCDEDTYPE, 0x40000003FFFF0000ULL); 491 cxl_p1_write(adapter, CXL_PSL9_APCDEDTYPE, 0x40000003FFFF0000ULL);
492 492
493 /* Disable vc dd1 fix */ 493 /* Disable vc dd1 fix */
494 if ((cxl_is_power9() && cpu_has_feature(CPU_FTR_POWER9_DD1))) 494 if (cxl_is_power9_dd1())
495 cxl_p1_write(adapter, CXL_PSL9_GP_CT, 0x0400000000000001ULL); 495 cxl_p1_write(adapter, CXL_PSL9_GP_CT, 0x0400000000000001ULL);
496 496
497 return 0; 497 return 0;
@@ -1439,8 +1439,7 @@ int cxl_pci_reset(struct cxl *adapter)
1439 * The adapter is about to be reset, so ignore errors. 1439 * The adapter is about to be reset, so ignore errors.
1440 * Not supported on P9 DD1 1440 * Not supported on P9 DD1
1441 */ 1441 */
1442 if ((cxl_is_power8()) || 1442 if ((cxl_is_power8()) || (!(cxl_is_power9_dd1())))
1443 ((cxl_is_power9() && !cpu_has_feature(CPU_FTR_POWER9_DD1))))
1444 cxl_data_cache_flush(adapter); 1443 cxl_data_cache_flush(adapter);
1445 1444
1446 /* pcie_warm_reset requests a fundamental pci reset which includes a 1445 /* pcie_warm_reset requests a fundamental pci reset which includes a
@@ -1750,7 +1749,6 @@ static const struct cxl_service_layer_ops psl9_ops = {
1750 .debugfs_add_adapter_regs = cxl_debugfs_add_adapter_regs_psl9, 1749 .debugfs_add_adapter_regs = cxl_debugfs_add_adapter_regs_psl9,
1751 .debugfs_add_afu_regs = cxl_debugfs_add_afu_regs_psl9, 1750 .debugfs_add_afu_regs = cxl_debugfs_add_afu_regs_psl9,
1752 .psl_irq_dump_registers = cxl_native_irq_dump_regs_psl9, 1751 .psl_irq_dump_registers = cxl_native_irq_dump_regs_psl9,
1753 .err_irq_dump_registers = cxl_native_err_irq_dump_regs,
1754 .debugfs_stop_trace = cxl_stop_trace_psl9, 1752 .debugfs_stop_trace = cxl_stop_trace_psl9,
1755 .write_timebase_ctrl = write_timebase_ctrl_psl9, 1753 .write_timebase_ctrl = write_timebase_ctrl_psl9,
1756 .timebase_read = timebase_read_psl9, 1754 .timebase_read = timebase_read_psl9,
@@ -1889,8 +1887,7 @@ static void cxl_pci_remove_adapter(struct cxl *adapter)
1889 * Flush adapter datacache as its about to be removed. 1887 * Flush adapter datacache as its about to be removed.
1890 * Not supported on P9 DD1. 1888 * Not supported on P9 DD1.
1891 */ 1889 */
1892 if ((cxl_is_power8()) || 1890 if ((cxl_is_power8()) || (!(cxl_is_power9_dd1())))
1893 ((cxl_is_power9() && !cpu_has_feature(CPU_FTR_POWER9_DD1))))
1894 cxl_data_cache_flush(adapter); 1891 cxl_data_cache_flush(adapter);
1895 1892
1896 cxl_deconfigure_adapter(adapter); 1893 cxl_deconfigure_adapter(adapter);
diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
index d1928fdd0f43..07aad8576334 100644
--- a/drivers/misc/mei/bus.c
+++ b/drivers/misc/mei/bus.c
@@ -763,8 +763,10 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
763{ 763{
764 struct mei_cl_device *cldev = to_mei_cl_device(dev); 764 struct mei_cl_device *cldev = to_mei_cl_device(dev);
765 const uuid_le *uuid = mei_me_cl_uuid(cldev->me_cl); 765 const uuid_le *uuid = mei_me_cl_uuid(cldev->me_cl);
766 u8 version = mei_me_cl_ver(cldev->me_cl);
766 767
767 return scnprintf(buf, PAGE_SIZE, "mei:%s:%pUl:", cldev->name, uuid); 768 return scnprintf(buf, PAGE_SIZE, "mei:%s:%pUl:%02X:",
769 cldev->name, uuid, version);
768} 770}
769static DEVICE_ATTR_RO(modalias); 771static DEVICE_ATTR_RO(modalias);
770 772
diff --git a/drivers/misc/sgi-xp/xp.h b/drivers/misc/sgi-xp/xp.h
index c862cd4583cc..b8069eec18cb 100644
--- a/drivers/misc/sgi-xp/xp.h
+++ b/drivers/misc/sgi-xp/xp.h
@@ -309,6 +309,9 @@ static inline enum xp_retval
309xpc_send(short partid, int ch_number, u32 flags, void *payload, 309xpc_send(short partid, int ch_number, u32 flags, void *payload,
310 u16 payload_size) 310 u16 payload_size)
311{ 311{
312 if (!xpc_interface.send)
313 return xpNotLoaded;
314
312 return xpc_interface.send(partid, ch_number, flags, payload, 315 return xpc_interface.send(partid, ch_number, flags, payload,
313 payload_size); 316 payload_size);
314} 317}
@@ -317,6 +320,9 @@ static inline enum xp_retval
317xpc_send_notify(short partid, int ch_number, u32 flags, void *payload, 320xpc_send_notify(short partid, int ch_number, u32 flags, void *payload,
318 u16 payload_size, xpc_notify_func func, void *key) 321 u16 payload_size, xpc_notify_func func, void *key)
319{ 322{
323 if (!xpc_interface.send_notify)
324 return xpNotLoaded;
325
320 return xpc_interface.send_notify(partid, ch_number, flags, payload, 326 return xpc_interface.send_notify(partid, ch_number, flags, payload,
321 payload_size, func, key); 327 payload_size, func, key);
322} 328}
@@ -324,12 +330,16 @@ xpc_send_notify(short partid, int ch_number, u32 flags, void *payload,
324static inline void 330static inline void
325xpc_received(short partid, int ch_number, void *payload) 331xpc_received(short partid, int ch_number, void *payload)
326{ 332{
327 return xpc_interface.received(partid, ch_number, payload); 333 if (xpc_interface.received)
334 xpc_interface.received(partid, ch_number, payload);
328} 335}
329 336
330static inline enum xp_retval 337static inline enum xp_retval
331xpc_partid_to_nasids(short partid, void *nasids) 338xpc_partid_to_nasids(short partid, void *nasids)
332{ 339{
340 if (!xpc_interface.partid_to_nasids)
341 return xpNotLoaded;
342
333 return xpc_interface.partid_to_nasids(partid, nasids); 343 return xpc_interface.partid_to_nasids(partid, nasids);
334} 344}
335 345
diff --git a/drivers/misc/sgi-xp/xp_main.c b/drivers/misc/sgi-xp/xp_main.c
index 01be66d02ca8..6d7f557fd1c1 100644
--- a/drivers/misc/sgi-xp/xp_main.c
+++ b/drivers/misc/sgi-xp/xp_main.c
@@ -69,23 +69,9 @@ struct xpc_registration xpc_registrations[XPC_MAX_NCHANNELS];
69EXPORT_SYMBOL_GPL(xpc_registrations); 69EXPORT_SYMBOL_GPL(xpc_registrations);
70 70
71/* 71/*
72 * Initialize the XPC interface to indicate that XPC isn't loaded. 72 * Initialize the XPC interface to NULL to indicate that XPC isn't loaded.
73 */ 73 */
74static enum xp_retval 74struct xpc_interface xpc_interface = { };
75xpc_notloaded(void)
76{
77 return xpNotLoaded;
78}
79
80struct xpc_interface xpc_interface = {
81 (void (*)(int))xpc_notloaded,
82 (void (*)(int))xpc_notloaded,
83 (enum xp_retval(*)(short, int, u32, void *, u16))xpc_notloaded,
84 (enum xp_retval(*)(short, int, u32, void *, u16, xpc_notify_func,
85 void *))xpc_notloaded,
86 (void (*)(short, int, void *))xpc_notloaded,
87 (enum xp_retval(*)(short, void *))xpc_notloaded
88};
89EXPORT_SYMBOL_GPL(xpc_interface); 75EXPORT_SYMBOL_GPL(xpc_interface);
90 76
91/* 77/*
@@ -115,17 +101,7 @@ EXPORT_SYMBOL_GPL(xpc_set_interface);
115void 101void
116xpc_clear_interface(void) 102xpc_clear_interface(void)
117{ 103{
118 xpc_interface.connect = (void (*)(int))xpc_notloaded; 104 memset(&xpc_interface, 0, sizeof(xpc_interface));
119 xpc_interface.disconnect = (void (*)(int))xpc_notloaded;
120 xpc_interface.send = (enum xp_retval(*)(short, int, u32, void *, u16))
121 xpc_notloaded;
122 xpc_interface.send_notify = (enum xp_retval(*)(short, int, u32, void *,
123 u16, xpc_notify_func,
124 void *))xpc_notloaded;
125 xpc_interface.received = (void (*)(short, int, void *))
126 xpc_notloaded;
127 xpc_interface.partid_to_nasids = (enum xp_retval(*)(short, void *))
128 xpc_notloaded;
129} 105}
130EXPORT_SYMBOL_GPL(xpc_clear_interface); 106EXPORT_SYMBOL_GPL(xpc_clear_interface);
131 107
@@ -188,7 +164,8 @@ xpc_connect(int ch_number, xpc_channel_func func, void *key, u16 payload_size,
188 164
189 mutex_unlock(&registration->mutex); 165 mutex_unlock(&registration->mutex);
190 166
191 xpc_interface.connect(ch_number); 167 if (xpc_interface.connect)
168 xpc_interface.connect(ch_number);
192 169
193 return xpSuccess; 170 return xpSuccess;
194} 171}
@@ -237,7 +214,8 @@ xpc_disconnect(int ch_number)
237 registration->assigned_limit = 0; 214 registration->assigned_limit = 0;
238 registration->idle_limit = 0; 215 registration->idle_limit = 0;
239 216
240 xpc_interface.disconnect(ch_number); 217 if (xpc_interface.disconnect)
218 xpc_interface.disconnect(ch_number);
241 219
242 mutex_unlock(&registration->mutex); 220 mutex_unlock(&registration->mutex);
243 221
diff --git a/drivers/mmc/core/pwrseq_simple.c b/drivers/mmc/core/pwrseq_simple.c
index 1304160de168..13ef162cf066 100644
--- a/drivers/mmc/core/pwrseq_simple.c
+++ b/drivers/mmc/core/pwrseq_simple.c
@@ -27,6 +27,7 @@ struct mmc_pwrseq_simple {
27 struct mmc_pwrseq pwrseq; 27 struct mmc_pwrseq pwrseq;
28 bool clk_enabled; 28 bool clk_enabled;
29 u32 post_power_on_delay_ms; 29 u32 post_power_on_delay_ms;
30 u32 power_off_delay_us;
30 struct clk *ext_clk; 31 struct clk *ext_clk;
31 struct gpio_descs *reset_gpios; 32 struct gpio_descs *reset_gpios;
32}; 33};
@@ -78,6 +79,10 @@ static void mmc_pwrseq_simple_power_off(struct mmc_host *host)
78 79
79 mmc_pwrseq_simple_set_gpios_value(pwrseq, 1); 80 mmc_pwrseq_simple_set_gpios_value(pwrseq, 1);
80 81
82 if (pwrseq->power_off_delay_us)
83 usleep_range(pwrseq->power_off_delay_us,
84 2 * pwrseq->power_off_delay_us);
85
81 if (!IS_ERR(pwrseq->ext_clk) && pwrseq->clk_enabled) { 86 if (!IS_ERR(pwrseq->ext_clk) && pwrseq->clk_enabled) {
82 clk_disable_unprepare(pwrseq->ext_clk); 87 clk_disable_unprepare(pwrseq->ext_clk);
83 pwrseq->clk_enabled = false; 88 pwrseq->clk_enabled = false;
@@ -119,6 +124,8 @@ static int mmc_pwrseq_simple_probe(struct platform_device *pdev)
119 124
120 device_property_read_u32(dev, "post-power-on-delay-ms", 125 device_property_read_u32(dev, "post-power-on-delay-ms",
121 &pwrseq->post_power_on_delay_ms); 126 &pwrseq->post_power_on_delay_ms);
127 device_property_read_u32(dev, "power-off-delay-us",
128 &pwrseq->power_off_delay_us);
122 129
123 pwrseq->pwrseq.dev = dev; 130 pwrseq->pwrseq.dev = dev;
124 pwrseq->pwrseq.ops = &mmc_pwrseq_simple_ops; 131 pwrseq->pwrseq.ops = &mmc_pwrseq_simple_ops;
diff --git a/drivers/mmc/host/cavium-octeon.c b/drivers/mmc/host/cavium-octeon.c
index 772d0900026d..951d2cdd7888 100644
--- a/drivers/mmc/host/cavium-octeon.c
+++ b/drivers/mmc/host/cavium-octeon.c
@@ -108,7 +108,7 @@ static void octeon_mmc_release_bus(struct cvm_mmc_host *host)
108static void octeon_mmc_int_enable(struct cvm_mmc_host *host, u64 val) 108static void octeon_mmc_int_enable(struct cvm_mmc_host *host, u64 val)
109{ 109{
110 writeq(val, host->base + MIO_EMM_INT(host)); 110 writeq(val, host->base + MIO_EMM_INT(host));
111 if (!host->dma_active || (host->dma_active && !host->has_ciu3)) 111 if (!host->has_ciu3)
112 writeq(val, host->base + MIO_EMM_INT_EN(host)); 112 writeq(val, host->base + MIO_EMM_INT_EN(host));
113} 113}
114 114
@@ -267,7 +267,7 @@ static int octeon_mmc_probe(struct platform_device *pdev)
267 } 267 }
268 268
269 host->global_pwr_gpiod = devm_gpiod_get_optional(&pdev->dev, 269 host->global_pwr_gpiod = devm_gpiod_get_optional(&pdev->dev,
270 "power-gpios", 270 "power",
271 GPIOD_OUT_HIGH); 271 GPIOD_OUT_HIGH);
272 if (IS_ERR(host->global_pwr_gpiod)) { 272 if (IS_ERR(host->global_pwr_gpiod)) {
273 dev_err(&pdev->dev, "Invalid power GPIO\n"); 273 dev_err(&pdev->dev, "Invalid power GPIO\n");
@@ -288,11 +288,20 @@ static int octeon_mmc_probe(struct platform_device *pdev)
288 if (ret) { 288 if (ret) {
289 dev_err(&pdev->dev, "Error populating slots\n"); 289 dev_err(&pdev->dev, "Error populating slots\n");
290 octeon_mmc_set_shared_power(host, 0); 290 octeon_mmc_set_shared_power(host, 0);
291 return ret; 291 goto error;
292 } 292 }
293 i++; 293 i++;
294 } 294 }
295 return 0; 295 return 0;
296
297error:
298 for (i = 0; i < CAVIUM_MAX_MMC; i++) {
299 if (host->slot[i])
300 cvm_mmc_of_slot_remove(host->slot[i]);
301 if (host->slot_pdev[i])
302 of_platform_device_destroy(&host->slot_pdev[i]->dev, NULL);
303 }
304 return ret;
296} 305}
297 306
298static int octeon_mmc_remove(struct platform_device *pdev) 307static int octeon_mmc_remove(struct platform_device *pdev)
diff --git a/drivers/mmc/host/cavium-thunderx.c b/drivers/mmc/host/cavium-thunderx.c
index fe3d77267cd6..b9cc95998799 100644
--- a/drivers/mmc/host/cavium-thunderx.c
+++ b/drivers/mmc/host/cavium-thunderx.c
@@ -146,6 +146,12 @@ static int thunder_mmc_probe(struct pci_dev *pdev,
146 return 0; 146 return 0;
147 147
148error: 148error:
149 for (i = 0; i < CAVIUM_MAX_MMC; i++) {
150 if (host->slot[i])
151 cvm_mmc_of_slot_remove(host->slot[i]);
152 if (host->slot_pdev[i])
153 of_platform_device_destroy(&host->slot_pdev[i]->dev, NULL);
154 }
149 clk_disable_unprepare(host->clk); 155 clk_disable_unprepare(host->clk);
150 return ret; 156 return ret;
151} 157}
diff --git a/drivers/mmc/host/cavium.c b/drivers/mmc/host/cavium.c
index 58b51ba6aabd..b8aaf0fdb77c 100644
--- a/drivers/mmc/host/cavium.c
+++ b/drivers/mmc/host/cavium.c
@@ -839,14 +839,14 @@ static void cvm_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
839 cvm_mmc_reset_bus(slot); 839 cvm_mmc_reset_bus(slot);
840 if (host->global_pwr_gpiod) 840 if (host->global_pwr_gpiod)
841 host->set_shared_power(host, 0); 841 host->set_shared_power(host, 0);
842 else 842 else if (!IS_ERR(mmc->supply.vmmc))
843 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); 843 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0);
844 break; 844 break;
845 845
846 case MMC_POWER_UP: 846 case MMC_POWER_UP:
847 if (host->global_pwr_gpiod) 847 if (host->global_pwr_gpiod)
848 host->set_shared_power(host, 1); 848 host->set_shared_power(host, 1);
849 else 849 else if (!IS_ERR(mmc->supply.vmmc))
850 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd); 850 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd);
851 break; 851 break;
852 } 852 }
@@ -968,20 +968,15 @@ static int cvm_mmc_of_parse(struct device *dev, struct cvm_mmc_slot *slot)
968 return -EINVAL; 968 return -EINVAL;
969 } 969 }
970 970
971 mmc->supply.vmmc = devm_regulator_get_optional(dev, "vmmc"); 971 ret = mmc_regulator_get_supply(mmc);
972 if (IS_ERR(mmc->supply.vmmc)) { 972 if (ret == -EPROBE_DEFER)
973 if (PTR_ERR(mmc->supply.vmmc) == -EPROBE_DEFER) 973 return ret;
974 return -EPROBE_DEFER; 974 /*
975 /* 975 * Legacy Octeon firmware has no regulator entry, fall-back to
976 * Legacy Octeon firmware has no regulator entry, fall-back to 976 * a hard-coded voltage to get a sane OCR.
977 * a hard-coded voltage to get a sane OCR. 977 */
978 */ 978 if (IS_ERR(mmc->supply.vmmc))
979 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; 979 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
980 } else {
981 ret = mmc_regulator_get_ocrmask(mmc->supply.vmmc);
982 if (ret > 0)
983 mmc->ocr_avail = ret;
984 }
985 980
986 /* Common MMC bindings */ 981 /* Common MMC bindings */
987 ret = mmc_of_parse(mmc); 982 ret = mmc_of_parse(mmc);
diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
index 1842ed341af1..de962c2d5e00 100644
--- a/drivers/mmc/host/meson-gx-mmc.c
+++ b/drivers/mmc/host/meson-gx-mmc.c
@@ -210,6 +210,15 @@ static void meson_mmc_get_transfer_mode(struct mmc_host *mmc,
210 int i; 210 int i;
211 bool use_desc_chain_mode = true; 211 bool use_desc_chain_mode = true;
212 212
213 /*
214 * Broken SDIO with AP6255-based WiFi on Khadas VIM Pro has been
215 * reported. For some strange reason this occurs in descriptor
216 * chain mode only. So let's fall back to bounce buffer mode
217 * for command SD_IO_RW_EXTENDED.
218 */
219 if (mrq->cmd->opcode == SD_IO_RW_EXTENDED)
220 return;
221
213 for_each_sg(data->sg, sg, data->sg_len, i) 222 for_each_sg(data->sg, sg, data->sg_len, i)
214 /* check for 8 byte alignment */ 223 /* check for 8 byte alignment */
215 if (sg->offset & 7) { 224 if (sg->offset & 7) {
diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c
index 3275d4995812..61666d269771 100644
--- a/drivers/mmc/host/sdhci-iproc.c
+++ b/drivers/mmc/host/sdhci-iproc.c
@@ -187,7 +187,8 @@ static const struct sdhci_iproc_data iproc_cygnus_data = {
187}; 187};
188 188
189static const struct sdhci_pltfm_data sdhci_iproc_pltfm_data = { 189static const struct sdhci_pltfm_data sdhci_iproc_pltfm_data = {
190 .quirks = SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK, 190 .quirks = SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
191 SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12,
191 .quirks2 = SDHCI_QUIRK2_ACMD23_BROKEN, 192 .quirks2 = SDHCI_QUIRK2_ACMD23_BROKEN,
192 .ops = &sdhci_iproc_ops, 193 .ops = &sdhci_iproc_ops,
193}; 194};
diff --git a/drivers/mmc/host/sdhci-xenon-phy.c b/drivers/mmc/host/sdhci-xenon-phy.c
index 6356781f1cca..f7e26b031e76 100644
--- a/drivers/mmc/host/sdhci-xenon-phy.c
+++ b/drivers/mmc/host/sdhci-xenon-phy.c
@@ -787,14 +787,6 @@ int xenon_phy_adj(struct sdhci_host *host, struct mmc_ios *ios)
787 return ret; 787 return ret;
788} 788}
789 789
790void xenon_clean_phy(struct sdhci_host *host)
791{
792 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
793 struct xenon_priv *priv = sdhci_pltfm_priv(pltfm_host);
794
795 kfree(priv->phy_params);
796}
797
798static int xenon_add_phy(struct device_node *np, struct sdhci_host *host, 790static int xenon_add_phy(struct device_node *np, struct sdhci_host *host,
799 const char *phy_name) 791 const char *phy_name)
800{ 792{
@@ -819,11 +811,7 @@ static int xenon_add_phy(struct device_node *np, struct sdhci_host *host,
819 if (ret) 811 if (ret)
820 return ret; 812 return ret;
821 813
822 ret = xenon_emmc_phy_parse_param_dt(host, np, priv->phy_params); 814 return xenon_emmc_phy_parse_param_dt(host, np, priv->phy_params);
823 if (ret)
824 xenon_clean_phy(host);
825
826 return ret;
827} 815}
828 816
829int xenon_phy_parse_dt(struct device_node *np, struct sdhci_host *host) 817int xenon_phy_parse_dt(struct device_node *np, struct sdhci_host *host)
diff --git a/drivers/mmc/host/sdhci-xenon.c b/drivers/mmc/host/sdhci-xenon.c
index 67246655315b..bc1781bb070b 100644
--- a/drivers/mmc/host/sdhci-xenon.c
+++ b/drivers/mmc/host/sdhci-xenon.c
@@ -486,7 +486,7 @@ static int xenon_probe(struct platform_device *pdev)
486 486
487 err = xenon_sdhc_prepare(host); 487 err = xenon_sdhc_prepare(host);
488 if (err) 488 if (err)
489 goto clean_phy_param; 489 goto err_clk;
490 490
491 err = sdhci_add_host(host); 491 err = sdhci_add_host(host);
492 if (err) 492 if (err)
@@ -496,8 +496,6 @@ static int xenon_probe(struct platform_device *pdev)
496 496
497remove_sdhc: 497remove_sdhc:
498 xenon_sdhc_unprepare(host); 498 xenon_sdhc_unprepare(host);
499clean_phy_param:
500 xenon_clean_phy(host);
501err_clk: 499err_clk:
502 clk_disable_unprepare(pltfm_host->clk); 500 clk_disable_unprepare(pltfm_host->clk);
503free_pltfm: 501free_pltfm:
@@ -510,8 +508,6 @@ static int xenon_remove(struct platform_device *pdev)
510 struct sdhci_host *host = platform_get_drvdata(pdev); 508 struct sdhci_host *host = platform_get_drvdata(pdev);
511 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 509 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
512 510
513 xenon_clean_phy(host);
514
515 sdhci_remove_host(host, 0); 511 sdhci_remove_host(host, 0);
516 512
517 xenon_sdhc_unprepare(host); 513 xenon_sdhc_unprepare(host);
diff --git a/drivers/mmc/host/sdhci-xenon.h b/drivers/mmc/host/sdhci-xenon.h
index 6e6523ea01ce..73debb42dc2f 100644
--- a/drivers/mmc/host/sdhci-xenon.h
+++ b/drivers/mmc/host/sdhci-xenon.h
@@ -93,7 +93,6 @@ struct xenon_priv {
93}; 93};
94 94
95int xenon_phy_adj(struct sdhci_host *host, struct mmc_ios *ios); 95int xenon_phy_adj(struct sdhci_host *host, struct mmc_ios *ios);
96void xenon_clean_phy(struct sdhci_host *host);
97int xenon_phy_parse_dt(struct device_node *np, 96int xenon_phy_parse_dt(struct device_node *np,
98 struct sdhci_host *host); 97 struct sdhci_host *host);
99void xenon_soc_pad_ctrl(struct sdhci_host *host, 98void xenon_soc_pad_ctrl(struct sdhci_host *host,
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index d474378ed810..b1dd12729f19 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -202,7 +202,7 @@ static int nand_ooblayout_free_lp_hamming(struct mtd_info *mtd, int section,
202 return 0; 202 return 0;
203} 203}
204 204
205const struct mtd_ooblayout_ops nand_ooblayout_lp_hamming_ops = { 205static const struct mtd_ooblayout_ops nand_ooblayout_lp_hamming_ops = {
206 .ecc = nand_ooblayout_ecc_lp_hamming, 206 .ecc = nand_ooblayout_ecc_lp_hamming,
207 .free = nand_ooblayout_free_lp_hamming, 207 .free = nand_ooblayout_free_lp_hamming,
208}; 208};
@@ -4361,7 +4361,7 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips,
4361 /* Initialize the ->data_interface field. */ 4361 /* Initialize the ->data_interface field. */
4362 ret = nand_init_data_interface(chip); 4362 ret = nand_init_data_interface(chip);
4363 if (ret) 4363 if (ret)
4364 return ret; 4364 goto err_nand_init;
4365 4365
4366 /* 4366 /*
4367 * Setup the data interface correctly on the chip and controller side. 4367 * Setup the data interface correctly on the chip and controller side.
@@ -4373,7 +4373,7 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips,
4373 */ 4373 */
4374 ret = nand_setup_data_interface(chip); 4374 ret = nand_setup_data_interface(chip);
4375 if (ret) 4375 if (ret)
4376 return ret; 4376 goto err_nand_init;
4377 4377
4378 nand_maf_id = chip->id.data[0]; 4378 nand_maf_id = chip->id.data[0];
4379 nand_dev_id = chip->id.data[1]; 4379 nand_dev_id = chip->id.data[1];
@@ -4404,6 +4404,12 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips,
4404 mtd->size = i * chip->chipsize; 4404 mtd->size = i * chip->chipsize;
4405 4405
4406 return 0; 4406 return 0;
4407
4408err_nand_init:
4409 /* Free manufacturer priv data. */
4410 nand_manufacturer_cleanup(chip);
4411
4412 return ret;
4407} 4413}
4408EXPORT_SYMBOL(nand_scan_ident); 4414EXPORT_SYMBOL(nand_scan_ident);
4409 4415
@@ -4574,18 +4580,23 @@ int nand_scan_tail(struct mtd_info *mtd)
4574 4580
4575 /* New bad blocks should be marked in OOB, flash-based BBT, or both */ 4581 /* New bad blocks should be marked in OOB, flash-based BBT, or both */
4576 if (WARN_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) && 4582 if (WARN_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
4577 !(chip->bbt_options & NAND_BBT_USE_FLASH))) 4583 !(chip->bbt_options & NAND_BBT_USE_FLASH))) {
4578 return -EINVAL; 4584 ret = -EINVAL;
4585 goto err_ident;
4586 }
4579 4587
4580 if (invalid_ecc_page_accessors(chip)) { 4588 if (invalid_ecc_page_accessors(chip)) {
4581 pr_err("Invalid ECC page accessors setup\n"); 4589 pr_err("Invalid ECC page accessors setup\n");
4582 return -EINVAL; 4590 ret = -EINVAL;
4591 goto err_ident;
4583 } 4592 }
4584 4593
4585 if (!(chip->options & NAND_OWN_BUFFERS)) { 4594 if (!(chip->options & NAND_OWN_BUFFERS)) {
4586 nbuf = kzalloc(sizeof(*nbuf), GFP_KERNEL); 4595 nbuf = kzalloc(sizeof(*nbuf), GFP_KERNEL);
4587 if (!nbuf) 4596 if (!nbuf) {
4588 return -ENOMEM; 4597 ret = -ENOMEM;
4598 goto err_ident;
4599 }
4589 4600
4590 nbuf->ecccalc = kmalloc(mtd->oobsize, GFP_KERNEL); 4601 nbuf->ecccalc = kmalloc(mtd->oobsize, GFP_KERNEL);
4591 if (!nbuf->ecccalc) { 4602 if (!nbuf->ecccalc) {
@@ -4608,8 +4619,10 @@ int nand_scan_tail(struct mtd_info *mtd)
4608 4619
4609 chip->buffers = nbuf; 4620 chip->buffers = nbuf;
4610 } else { 4621 } else {
4611 if (!chip->buffers) 4622 if (!chip->buffers) {
4612 return -ENOMEM; 4623 ret = -ENOMEM;
4624 goto err_ident;
4625 }
4613 } 4626 }
4614 4627
4615 /* Set the internal oob buffer location, just after the page data */ 4628 /* Set the internal oob buffer location, just after the page data */
@@ -4842,7 +4855,11 @@ int nand_scan_tail(struct mtd_info *mtd)
4842 return 0; 4855 return 0;
4843 4856
4844 /* Build bad block table */ 4857 /* Build bad block table */
4845 return chip->scan_bbt(mtd); 4858 ret = chip->scan_bbt(mtd);
4859 if (ret)
4860 goto err_free;
4861 return 0;
4862
4846err_free: 4863err_free:
4847 if (nbuf) { 4864 if (nbuf) {
4848 kfree(nbuf->databuf); 4865 kfree(nbuf->databuf);
@@ -4850,6 +4867,13 @@ err_free:
4850 kfree(nbuf->ecccalc); 4867 kfree(nbuf->ecccalc);
4851 kfree(nbuf); 4868 kfree(nbuf);
4852 } 4869 }
4870
4871err_ident:
4872 /* Clean up nand_scan_ident(). */
4873
4874 /* Free manufacturer priv data. */
4875 nand_manufacturer_cleanup(chip);
4876
4853 return ret; 4877 return ret;
4854} 4878}
4855EXPORT_SYMBOL(nand_scan_tail); 4879EXPORT_SYMBOL(nand_scan_tail);
diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
index 9d5ca0e540b5..92e2cf8e9ff9 100644
--- a/drivers/mtd/nand/nand_ids.c
+++ b/drivers/mtd/nand/nand_ids.c
@@ -6,7 +6,6 @@
6 * published by the Free Software Foundation. 6 * published by the Free Software Foundation.
7 * 7 *
8 */ 8 */
9#include <linux/module.h>
10#include <linux/mtd/nand.h> 9#include <linux/mtd/nand.h>
11#include <linux/sizes.h> 10#include <linux/sizes.h>
12 11
diff --git a/drivers/mtd/nand/nand_samsung.c b/drivers/mtd/nand/nand_samsung.c
index 9cfc4035a420..1e0755997762 100644
--- a/drivers/mtd/nand/nand_samsung.c
+++ b/drivers/mtd/nand/nand_samsung.c
@@ -84,6 +84,9 @@ static void samsung_nand_decode_id(struct nand_chip *chip)
84 case 7: 84 case 7:
85 chip->ecc_strength_ds = 60; 85 chip->ecc_strength_ds = 60;
86 break; 86 break;
87 default:
88 WARN(1, "Could not decode ECC info");
89 chip->ecc_step_ds = 0;
87 } 90 }
88 } 91 }
89 } else { 92 } else {
diff --git a/drivers/mtd/nand/tango_nand.c b/drivers/mtd/nand/tango_nand.c
index 05b6e1065203..49b286c6c10f 100644
--- a/drivers/mtd/nand/tango_nand.c
+++ b/drivers/mtd/nand/tango_nand.c
@@ -55,10 +55,10 @@
55 * byte 1 for other packets in the page (PKT_N, for N > 0) 55 * byte 1 for other packets in the page (PKT_N, for N > 0)
56 * ERR_COUNT_PKT_N is the max error count over all but the first packet. 56 * ERR_COUNT_PKT_N is the max error count over all but the first packet.
57 */ 57 */
58#define DECODE_OK_PKT_0(v) ((v) & BIT(7))
59#define DECODE_OK_PKT_N(v) ((v) & BIT(15))
60#define ERR_COUNT_PKT_0(v) (((v) >> 0) & 0x3f) 58#define ERR_COUNT_PKT_0(v) (((v) >> 0) & 0x3f)
61#define ERR_COUNT_PKT_N(v) (((v) >> 8) & 0x3f) 59#define ERR_COUNT_PKT_N(v) (((v) >> 8) & 0x3f)
60#define DECODE_FAIL_PKT_0(v) (((v) & BIT(7)) == 0)
61#define DECODE_FAIL_PKT_N(v) (((v) & BIT(15)) == 0)
62 62
63/* Offsets relative to pbus_base */ 63/* Offsets relative to pbus_base */
64#define PBUS_CS_CTRL 0x83c 64#define PBUS_CS_CTRL 0x83c
@@ -193,6 +193,8 @@ static int check_erased_page(struct nand_chip *chip, u8 *buf)
193 chip->ecc.strength); 193 chip->ecc.strength);
194 if (res < 0) 194 if (res < 0)
195 mtd->ecc_stats.failed++; 195 mtd->ecc_stats.failed++;
196 else
197 mtd->ecc_stats.corrected += res;
196 198
197 bitflips = max(res, bitflips); 199 bitflips = max(res, bitflips);
198 buf += pkt_size; 200 buf += pkt_size;
@@ -202,9 +204,11 @@ static int check_erased_page(struct nand_chip *chip, u8 *buf)
202 return bitflips; 204 return bitflips;
203} 205}
204 206
205static int decode_error_report(struct tango_nfc *nfc) 207static int decode_error_report(struct nand_chip *chip)
206{ 208{
207 u32 status, res; 209 u32 status, res;
210 struct mtd_info *mtd = nand_to_mtd(chip);
211 struct tango_nfc *nfc = to_tango_nfc(chip->controller);
208 212
209 status = readl_relaxed(nfc->reg_base + NFC_XFER_STATUS); 213 status = readl_relaxed(nfc->reg_base + NFC_XFER_STATUS);
210 if (status & PAGE_IS_EMPTY) 214 if (status & PAGE_IS_EMPTY)
@@ -212,10 +216,14 @@ static int decode_error_report(struct tango_nfc *nfc)
212 216
213 res = readl_relaxed(nfc->mem_base + ERROR_REPORT); 217 res = readl_relaxed(nfc->mem_base + ERROR_REPORT);
214 218
215 if (DECODE_OK_PKT_0(res) && DECODE_OK_PKT_N(res)) 219 if (DECODE_FAIL_PKT_0(res) || DECODE_FAIL_PKT_N(res))
216 return max(ERR_COUNT_PKT_0(res), ERR_COUNT_PKT_N(res)); 220 return -EBADMSG;
221
222 /* ERR_COUNT_PKT_N is max, not sum, but that's all we have */
223 mtd->ecc_stats.corrected +=
224 ERR_COUNT_PKT_0(res) + ERR_COUNT_PKT_N(res);
217 225
218 return -EBADMSG; 226 return max(ERR_COUNT_PKT_0(res), ERR_COUNT_PKT_N(res));
219} 227}
220 228
221static void tango_dma_callback(void *arg) 229static void tango_dma_callback(void *arg)
@@ -282,7 +290,7 @@ static int tango_read_page(struct mtd_info *mtd, struct nand_chip *chip,
282 if (err) 290 if (err)
283 return err; 291 return err;
284 292
285 res = decode_error_report(nfc); 293 res = decode_error_report(chip);
286 if (res < 0) { 294 if (res < 0) {
287 chip->ecc.read_oob_raw(mtd, chip, page); 295 chip->ecc.read_oob_raw(mtd, chip, page);
288 res = check_erased_page(chip, buf); 296 res = check_erased_page(chip, buf);
@@ -663,6 +671,7 @@ static const struct of_device_id tango_nand_ids[] = {
663 { .compatible = "sigma,smp8758-nand" }, 671 { .compatible = "sigma,smp8758-nand" },
664 { /* sentinel */ } 672 { /* sentinel */ }
665}; 673};
674MODULE_DEVICE_TABLE(of, tango_nand_ids);
666 675
667static struct platform_driver tango_nand_driver = { 676static struct platform_driver tango_nand_driver = {
668 .probe = tango_nand_probe, 677 .probe = tango_nand_probe,
diff --git a/drivers/net/arcnet/arcnet.c b/drivers/net/arcnet/arcnet.c
index 62ee439d5882..53a1cb551def 100644
--- a/drivers/net/arcnet/arcnet.c
+++ b/drivers/net/arcnet/arcnet.c
@@ -756,6 +756,7 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id)
756 struct net_device *dev = dev_id; 756 struct net_device *dev = dev_id;
757 struct arcnet_local *lp; 757 struct arcnet_local *lp;
758 int recbuf, status, diagstatus, didsomething, boguscount; 758 int recbuf, status, diagstatus, didsomething, boguscount;
759 unsigned long flags;
759 int retval = IRQ_NONE; 760 int retval = IRQ_NONE;
760 761
761 arc_printk(D_DURING, dev, "\n"); 762 arc_printk(D_DURING, dev, "\n");
@@ -765,7 +766,7 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id)
765 lp = netdev_priv(dev); 766 lp = netdev_priv(dev);
766 BUG_ON(!lp); 767 BUG_ON(!lp);
767 768
768 spin_lock(&lp->lock); 769 spin_lock_irqsave(&lp->lock, flags);
769 770
770 /* RESET flag was enabled - if device is not running, we must 771 /* RESET flag was enabled - if device is not running, we must
771 * clear it right away (but nothing else). 772 * clear it right away (but nothing else).
@@ -774,7 +775,7 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id)
774 if (lp->hw.status(dev) & RESETflag) 775 if (lp->hw.status(dev) & RESETflag)
775 lp->hw.command(dev, CFLAGScmd | RESETclear); 776 lp->hw.command(dev, CFLAGScmd | RESETclear);
776 lp->hw.intmask(dev, 0); 777 lp->hw.intmask(dev, 0);
777 spin_unlock(&lp->lock); 778 spin_unlock_irqrestore(&lp->lock, flags);
778 return retval; 779 return retval;
779 } 780 }
780 781
@@ -998,7 +999,7 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id)
998 udelay(1); 999 udelay(1);
999 lp->hw.intmask(dev, lp->intmask); 1000 lp->hw.intmask(dev, lp->intmask);
1000 1001
1001 spin_unlock(&lp->lock); 1002 spin_unlock_irqrestore(&lp->lock, flags);
1002 return retval; 1003 return retval;
1003} 1004}
1004EXPORT_SYMBOL(arcnet_interrupt); 1005EXPORT_SYMBOL(arcnet_interrupt);
diff --git a/drivers/net/arcnet/capmode.c b/drivers/net/arcnet/capmode.c
index 2056878fb087..4fa2e46b48d3 100644
--- a/drivers/net/arcnet/capmode.c
+++ b/drivers/net/arcnet/capmode.c
@@ -212,7 +212,7 @@ static int ack_tx(struct net_device *dev, int acked)
212 ackpkt->soft.cap.proto = 0; /* using protocol 0 for acknowledge */ 212 ackpkt->soft.cap.proto = 0; /* using protocol 0 for acknowledge */
213 ackpkt->soft.cap.mes.ack = acked; 213 ackpkt->soft.cap.mes.ack = acked;
214 214
215 arc_printk(D_PROTO, dev, "Ackknowledge for cap packet %x.\n", 215 arc_printk(D_PROTO, dev, "Acknowledge for cap packet %x.\n",
216 *((int *)&ackpkt->soft.cap.cookie[0])); 216 *((int *)&ackpkt->soft.cap.cookie[0]));
217 217
218 ackskb->protocol = cpu_to_be16(ETH_P_ARCNET); 218 ackskb->protocol = cpu_to_be16(ETH_P_ARCNET);
diff --git a/drivers/net/arcnet/com20020-pci.c b/drivers/net/arcnet/com20020-pci.c
index 239de38fbd6a..47f80b83dcf4 100644
--- a/drivers/net/arcnet/com20020-pci.c
+++ b/drivers/net/arcnet/com20020-pci.c
@@ -135,6 +135,7 @@ static int com20020pci_probe(struct pci_dev *pdev,
135 for (i = 0; i < ci->devcount; i++) { 135 for (i = 0; i < ci->devcount; i++) {
136 struct com20020_pci_channel_map *cm = &ci->chan_map_tbl[i]; 136 struct com20020_pci_channel_map *cm = &ci->chan_map_tbl[i];
137 struct com20020_dev *card; 137 struct com20020_dev *card;
138 int dev_id_mask = 0xf;
138 139
139 dev = alloc_arcdev(device); 140 dev = alloc_arcdev(device);
140 if (!dev) { 141 if (!dev) {
@@ -166,6 +167,7 @@ static int com20020pci_probe(struct pci_dev *pdev,
166 arcnet_outb(0x00, ioaddr, COM20020_REG_W_COMMAND); 167 arcnet_outb(0x00, ioaddr, COM20020_REG_W_COMMAND);
167 arcnet_inb(ioaddr, COM20020_REG_R_DIAGSTAT); 168 arcnet_inb(ioaddr, COM20020_REG_R_DIAGSTAT);
168 169
170 SET_NETDEV_DEV(dev, &pdev->dev);
169 dev->base_addr = ioaddr; 171 dev->base_addr = ioaddr;
170 dev->dev_addr[0] = node; 172 dev->dev_addr[0] = node;
171 dev->irq = pdev->irq; 173 dev->irq = pdev->irq;
@@ -179,8 +181,8 @@ static int com20020pci_probe(struct pci_dev *pdev,
179 181
180 /* Get the dev_id from the PLX rotary coder */ 182 /* Get the dev_id from the PLX rotary coder */
181 if (!strncmp(ci->name, "EAE PLX-PCI MA1", 15)) 183 if (!strncmp(ci->name, "EAE PLX-PCI MA1", 15))
182 dev->dev_id = 0xc; 184 dev_id_mask = 0x3;
183 dev->dev_id ^= inb(priv->misc + ci->rotary) >> 4; 185 dev->dev_id = (inb(priv->misc + ci->rotary) >> 4) & dev_id_mask;
184 186
185 snprintf(dev->name, sizeof(dev->name), "arc%d-%d", dev->dev_id, i); 187 snprintf(dev->name, sizeof(dev->name), "arc%d-%d", dev->dev_id, i);
186 188
diff --git a/drivers/net/arcnet/com20020.c b/drivers/net/arcnet/com20020.c
index 13d9ad4b3f5c..78043a9c5981 100644
--- a/drivers/net/arcnet/com20020.c
+++ b/drivers/net/arcnet/com20020.c
@@ -246,8 +246,6 @@ int com20020_found(struct net_device *dev, int shared)
246 return -ENODEV; 246 return -ENODEV;
247 } 247 }
248 248
249 dev->base_addr = ioaddr;
250
251 arc_printk(D_NORMAL, dev, "%s: station %02Xh found at %03lXh, IRQ %d.\n", 249 arc_printk(D_NORMAL, dev, "%s: station %02Xh found at %03lXh, IRQ %d.\n",
252 lp->card_name, dev->dev_addr[0], dev->base_addr, dev->irq); 250 lp->card_name, dev->dev_addr[0], dev->base_addr, dev->irq);
253 251
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
index c5fd4259da33..e5386ab706ec 100644
--- a/drivers/net/bonding/bond_3ad.c
+++ b/drivers/net/bonding/bond_3ad.c
@@ -90,10 +90,13 @@ enum ad_link_speed_type {
90 AD_LINK_SPEED_100MBPS, 90 AD_LINK_SPEED_100MBPS,
91 AD_LINK_SPEED_1000MBPS, 91 AD_LINK_SPEED_1000MBPS,
92 AD_LINK_SPEED_2500MBPS, 92 AD_LINK_SPEED_2500MBPS,
93 AD_LINK_SPEED_5000MBPS,
93 AD_LINK_SPEED_10000MBPS, 94 AD_LINK_SPEED_10000MBPS,
95 AD_LINK_SPEED_14000MBPS,
94 AD_LINK_SPEED_20000MBPS, 96 AD_LINK_SPEED_20000MBPS,
95 AD_LINK_SPEED_25000MBPS, 97 AD_LINK_SPEED_25000MBPS,
96 AD_LINK_SPEED_40000MBPS, 98 AD_LINK_SPEED_40000MBPS,
99 AD_LINK_SPEED_50000MBPS,
97 AD_LINK_SPEED_56000MBPS, 100 AD_LINK_SPEED_56000MBPS,
98 AD_LINK_SPEED_100000MBPS, 101 AD_LINK_SPEED_100000MBPS,
99}; 102};
@@ -259,10 +262,13 @@ static inline int __check_agg_selection_timer(struct port *port)
259 * %AD_LINK_SPEED_100MBPS, 262 * %AD_LINK_SPEED_100MBPS,
260 * %AD_LINK_SPEED_1000MBPS, 263 * %AD_LINK_SPEED_1000MBPS,
261 * %AD_LINK_SPEED_2500MBPS, 264 * %AD_LINK_SPEED_2500MBPS,
265 * %AD_LINK_SPEED_5000MBPS,
262 * %AD_LINK_SPEED_10000MBPS 266 * %AD_LINK_SPEED_10000MBPS
267 * %AD_LINK_SPEED_14000MBPS,
263 * %AD_LINK_SPEED_20000MBPS 268 * %AD_LINK_SPEED_20000MBPS
264 * %AD_LINK_SPEED_25000MBPS 269 * %AD_LINK_SPEED_25000MBPS
265 * %AD_LINK_SPEED_40000MBPS 270 * %AD_LINK_SPEED_40000MBPS
271 * %AD_LINK_SPEED_50000MBPS
266 * %AD_LINK_SPEED_56000MBPS 272 * %AD_LINK_SPEED_56000MBPS
267 * %AD_LINK_SPEED_100000MBPS 273 * %AD_LINK_SPEED_100000MBPS
268 */ 274 */
@@ -296,10 +302,18 @@ static u16 __get_link_speed(struct port *port)
296 speed = AD_LINK_SPEED_2500MBPS; 302 speed = AD_LINK_SPEED_2500MBPS;
297 break; 303 break;
298 304
305 case SPEED_5000:
306 speed = AD_LINK_SPEED_5000MBPS;
307 break;
308
299 case SPEED_10000: 309 case SPEED_10000:
300 speed = AD_LINK_SPEED_10000MBPS; 310 speed = AD_LINK_SPEED_10000MBPS;
301 break; 311 break;
302 312
313 case SPEED_14000:
314 speed = AD_LINK_SPEED_14000MBPS;
315 break;
316
303 case SPEED_20000: 317 case SPEED_20000:
304 speed = AD_LINK_SPEED_20000MBPS; 318 speed = AD_LINK_SPEED_20000MBPS;
305 break; 319 break;
@@ -312,6 +326,10 @@ static u16 __get_link_speed(struct port *port)
312 speed = AD_LINK_SPEED_40000MBPS; 326 speed = AD_LINK_SPEED_40000MBPS;
313 break; 327 break;
314 328
329 case SPEED_50000:
330 speed = AD_LINK_SPEED_50000MBPS;
331 break;
332
315 case SPEED_56000: 333 case SPEED_56000:
316 speed = AD_LINK_SPEED_56000MBPS; 334 speed = AD_LINK_SPEED_56000MBPS;
317 break; 335 break;
@@ -707,9 +725,15 @@ static u32 __get_agg_bandwidth(struct aggregator *aggregator)
707 case AD_LINK_SPEED_2500MBPS: 725 case AD_LINK_SPEED_2500MBPS:
708 bandwidth = nports * 2500; 726 bandwidth = nports * 2500;
709 break; 727 break;
728 case AD_LINK_SPEED_5000MBPS:
729 bandwidth = nports * 5000;
730 break;
710 case AD_LINK_SPEED_10000MBPS: 731 case AD_LINK_SPEED_10000MBPS:
711 bandwidth = nports * 10000; 732 bandwidth = nports * 10000;
712 break; 733 break;
734 case AD_LINK_SPEED_14000MBPS:
735 bandwidth = nports * 14000;
736 break;
713 case AD_LINK_SPEED_20000MBPS: 737 case AD_LINK_SPEED_20000MBPS:
714 bandwidth = nports * 20000; 738 bandwidth = nports * 20000;
715 break; 739 break;
@@ -719,6 +743,9 @@ static u32 __get_agg_bandwidth(struct aggregator *aggregator)
719 case AD_LINK_SPEED_40000MBPS: 743 case AD_LINK_SPEED_40000MBPS:
720 bandwidth = nports * 40000; 744 bandwidth = nports * 40000;
721 break; 745 break;
746 case AD_LINK_SPEED_50000MBPS:
747 bandwidth = nports * 50000;
748 break;
722 case AD_LINK_SPEED_56000MBPS: 749 case AD_LINK_SPEED_56000MBPS:
723 bandwidth = nports * 56000; 750 bandwidth = nports * 56000;
724 break; 751 break;
@@ -2577,7 +2604,7 @@ int __bond_3ad_get_active_agg_info(struct bonding *bond,
2577 return -1; 2604 return -1;
2578 2605
2579 ad_info->aggregator_id = aggregator->aggregator_identifier; 2606 ad_info->aggregator_id = aggregator->aggregator_identifier;
2580 ad_info->ports = aggregator->num_of_ports; 2607 ad_info->ports = __agg_active_ports(aggregator);
2581 ad_info->actor_key = aggregator->actor_oper_aggregator_key; 2608 ad_info->actor_key = aggregator->actor_oper_aggregator_key;
2582 ad_info->partner_key = aggregator->partner_oper_aggregator_key; 2609 ad_info->partner_key = aggregator->partner_oper_aggregator_key;
2583 ether_addr_copy(ad_info->partner_system, 2610 ether_addr_copy(ad_info->partner_system,
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 2be78807fd6e..8ab6bdbe1682 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -2612,11 +2612,13 @@ static void bond_loadbalance_arp_mon(struct bonding *bond)
2612 bond_for_each_slave_rcu(bond, slave, iter) { 2612 bond_for_each_slave_rcu(bond, slave, iter) {
2613 unsigned long trans_start = dev_trans_start(slave->dev); 2613 unsigned long trans_start = dev_trans_start(slave->dev);
2614 2614
2615 slave->new_link = BOND_LINK_NOCHANGE;
2616
2615 if (slave->link != BOND_LINK_UP) { 2617 if (slave->link != BOND_LINK_UP) {
2616 if (bond_time_in_interval(bond, trans_start, 1) && 2618 if (bond_time_in_interval(bond, trans_start, 1) &&
2617 bond_time_in_interval(bond, slave->last_rx, 1)) { 2619 bond_time_in_interval(bond, slave->last_rx, 1)) {
2618 2620
2619 slave->link = BOND_LINK_UP; 2621 slave->new_link = BOND_LINK_UP;
2620 slave_state_changed = 1; 2622 slave_state_changed = 1;
2621 2623
2622 /* primary_slave has no meaning in round-robin 2624 /* primary_slave has no meaning in round-robin
@@ -2643,7 +2645,7 @@ static void bond_loadbalance_arp_mon(struct bonding *bond)
2643 if (!bond_time_in_interval(bond, trans_start, 2) || 2645 if (!bond_time_in_interval(bond, trans_start, 2) ||
2644 !bond_time_in_interval(bond, slave->last_rx, 2)) { 2646 !bond_time_in_interval(bond, slave->last_rx, 2)) {
2645 2647
2646 slave->link = BOND_LINK_DOWN; 2648 slave->new_link = BOND_LINK_DOWN;
2647 slave_state_changed = 1; 2649 slave_state_changed = 1;
2648 2650
2649 if (slave->link_failure_count < UINT_MAX) 2651 if (slave->link_failure_count < UINT_MAX)
@@ -2674,6 +2676,11 @@ static void bond_loadbalance_arp_mon(struct bonding *bond)
2674 if (!rtnl_trylock()) 2676 if (!rtnl_trylock())
2675 goto re_arm; 2677 goto re_arm;
2676 2678
2679 bond_for_each_slave(bond, slave, iter) {
2680 if (slave->new_link != BOND_LINK_NOCHANGE)
2681 slave->link = slave->new_link;
2682 }
2683
2677 if (slave_state_changed) { 2684 if (slave_state_changed) {
2678 bond_slave_state_change(bond); 2685 bond_slave_state_change(bond);
2679 if (BOND_MODE(bond) == BOND_MODE_XOR) 2686 if (BOND_MODE(bond) == BOND_MODE_XOR)
@@ -4185,7 +4192,6 @@ static void bond_destructor(struct net_device *bond_dev)
4185 struct bonding *bond = netdev_priv(bond_dev); 4192 struct bonding *bond = netdev_priv(bond_dev);
4186 if (bond->wq) 4193 if (bond->wq)
4187 destroy_workqueue(bond->wq); 4194 destroy_workqueue(bond->wq);
4188 free_netdev(bond_dev);
4189} 4195}
4190 4196
4191void bond_setup(struct net_device *bond_dev) 4197void bond_setup(struct net_device *bond_dev)
@@ -4205,7 +4211,8 @@ void bond_setup(struct net_device *bond_dev)
4205 bond_dev->netdev_ops = &bond_netdev_ops; 4211 bond_dev->netdev_ops = &bond_netdev_ops;
4206 bond_dev->ethtool_ops = &bond_ethtool_ops; 4212 bond_dev->ethtool_ops = &bond_ethtool_ops;
4207 4213
4208 bond_dev->destructor = bond_destructor; 4214 bond_dev->needs_free_netdev = true;
4215 bond_dev->priv_destructor = bond_destructor;
4209 4216
4210 SET_NETDEV_DEVTYPE(bond_dev, &bond_type); 4217 SET_NETDEV_DEVTYPE(bond_dev, &bond_type);
4211 4218
@@ -4271,10 +4278,10 @@ static int bond_check_params(struct bond_params *params)
4271 int arp_validate_value, fail_over_mac_value, primary_reselect_value, i; 4278 int arp_validate_value, fail_over_mac_value, primary_reselect_value, i;
4272 struct bond_opt_value newval; 4279 struct bond_opt_value newval;
4273 const struct bond_opt_value *valptr; 4280 const struct bond_opt_value *valptr;
4274 int arp_all_targets_value; 4281 int arp_all_targets_value = 0;
4275 u16 ad_actor_sys_prio = 0; 4282 u16 ad_actor_sys_prio = 0;
4276 u16 ad_user_port_key = 0; 4283 u16 ad_user_port_key = 0;
4277 __be32 arp_target[BOND_MAX_ARP_TARGETS]; 4284 __be32 arp_target[BOND_MAX_ARP_TARGETS] = { 0 };
4278 int arp_ip_count; 4285 int arp_ip_count;
4279 int bond_mode = BOND_MODE_ROUNDROBIN; 4286 int bond_mode = BOND_MODE_ROUNDROBIN;
4280 int xmit_hashtype = BOND_XMIT_POLICY_LAYER2; 4287 int xmit_hashtype = BOND_XMIT_POLICY_LAYER2;
@@ -4501,7 +4508,6 @@ static int bond_check_params(struct bond_params *params)
4501 arp_validate_value = 0; 4508 arp_validate_value = 0;
4502 } 4509 }
4503 4510
4504 arp_all_targets_value = 0;
4505 if (arp_all_targets) { 4511 if (arp_all_targets) {
4506 bond_opt_initstr(&newval, arp_all_targets); 4512 bond_opt_initstr(&newval, arp_all_targets);
4507 valptr = bond_opt_parse(bond_opt_get(BOND_OPT_ARP_ALL_TARGETS), 4513 valptr = bond_opt_parse(bond_opt_get(BOND_OPT_ARP_ALL_TARGETS),
@@ -4730,7 +4736,7 @@ int bond_create(struct net *net, const char *name)
4730 4736
4731 rtnl_unlock(); 4737 rtnl_unlock();
4732 if (res < 0) 4738 if (res < 0)
4733 bond_destructor(bond_dev); 4739 free_netdev(bond_dev);
4734 return res; 4740 return res;
4735} 4741}
4736 4742
diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c
index ddabce759456..71a7c3b44fdd 100644
--- a/drivers/net/caif/caif_hsi.c
+++ b/drivers/net/caif/caif_hsi.c
@@ -1121,7 +1121,7 @@ static void cfhsi_setup(struct net_device *dev)
1121 dev->flags = IFF_POINTOPOINT | IFF_NOARP; 1121 dev->flags = IFF_POINTOPOINT | IFF_NOARP;
1122 dev->mtu = CFHSI_MAX_CAIF_FRAME_SZ; 1122 dev->mtu = CFHSI_MAX_CAIF_FRAME_SZ;
1123 dev->priv_flags |= IFF_NO_QUEUE; 1123 dev->priv_flags |= IFF_NO_QUEUE;
1124 dev->destructor = free_netdev; 1124 dev->needs_free_netdev = true;
1125 dev->netdev_ops = &cfhsi_netdevops; 1125 dev->netdev_ops = &cfhsi_netdevops;
1126 for (i = 0; i < CFHSI_PRIO_LAST; ++i) 1126 for (i = 0; i < CFHSI_PRIO_LAST; ++i)
1127 skb_queue_head_init(&cfhsi->qhead[i]); 1127 skb_queue_head_init(&cfhsi->qhead[i]);
diff --git a/drivers/net/caif/caif_serial.c b/drivers/net/caif/caif_serial.c
index c2dea4916e5d..76e1d3545105 100644
--- a/drivers/net/caif/caif_serial.c
+++ b/drivers/net/caif/caif_serial.c
@@ -428,7 +428,7 @@ static void caifdev_setup(struct net_device *dev)
428 dev->flags = IFF_POINTOPOINT | IFF_NOARP; 428 dev->flags = IFF_POINTOPOINT | IFF_NOARP;
429 dev->mtu = CAIF_MAX_MTU; 429 dev->mtu = CAIF_MAX_MTU;
430 dev->priv_flags |= IFF_NO_QUEUE; 430 dev->priv_flags |= IFF_NO_QUEUE;
431 dev->destructor = free_netdev; 431 dev->needs_free_netdev = true;
432 skb_queue_head_init(&serdev->head); 432 skb_queue_head_init(&serdev->head);
433 serdev->common.link_select = CAIF_LINK_LOW_LATENCY; 433 serdev->common.link_select = CAIF_LINK_LOW_LATENCY;
434 serdev->common.use_frag = true; 434 serdev->common.use_frag = true;
diff --git a/drivers/net/caif/caif_spi.c b/drivers/net/caif/caif_spi.c
index 3a529fbe539f..fc21afe852b9 100644
--- a/drivers/net/caif/caif_spi.c
+++ b/drivers/net/caif/caif_spi.c
@@ -712,7 +712,7 @@ static void cfspi_setup(struct net_device *dev)
712 dev->flags = IFF_NOARP | IFF_POINTOPOINT; 712 dev->flags = IFF_NOARP | IFF_POINTOPOINT;
713 dev->priv_flags |= IFF_NO_QUEUE; 713 dev->priv_flags |= IFF_NO_QUEUE;
714 dev->mtu = SPI_MAX_PAYLOAD_SIZE; 714 dev->mtu = SPI_MAX_PAYLOAD_SIZE;
715 dev->destructor = free_netdev; 715 dev->needs_free_netdev = true;
716 skb_queue_head_init(&cfspi->qhead); 716 skb_queue_head_init(&cfspi->qhead);
717 skb_queue_head_init(&cfspi->chead); 717 skb_queue_head_init(&cfspi->chead);
718 cfspi->cfdev.link_select = CAIF_LINK_HIGH_BANDW; 718 cfspi->cfdev.link_select = CAIF_LINK_HIGH_BANDW;
diff --git a/drivers/net/caif/caif_virtio.c b/drivers/net/caif/caif_virtio.c
index 6122768c8644..1794ea0420b7 100644
--- a/drivers/net/caif/caif_virtio.c
+++ b/drivers/net/caif/caif_virtio.c
@@ -617,7 +617,7 @@ static void cfv_netdev_setup(struct net_device *netdev)
617 netdev->tx_queue_len = 100; 617 netdev->tx_queue_len = 100;
618 netdev->flags = IFF_POINTOPOINT | IFF_NOARP; 618 netdev->flags = IFF_POINTOPOINT | IFF_NOARP;
619 netdev->mtu = CFV_DEF_MTU_SIZE; 619 netdev->mtu = CFV_DEF_MTU_SIZE;
620 netdev->destructor = free_netdev; 620 netdev->needs_free_netdev = true;
621} 621}
622 622
623/* Create debugfs counters for the device */ 623/* Create debugfs counters for the device */
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 611d16a7061d..ae4ed03dc642 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -391,6 +391,9 @@ void can_change_state(struct net_device *dev, struct can_frame *cf,
391 can_update_state_error_stats(dev, new_state); 391 can_update_state_error_stats(dev, new_state);
392 priv->state = new_state; 392 priv->state = new_state;
393 393
394 if (!cf)
395 return;
396
394 if (unlikely(new_state == CAN_STATE_BUS_OFF)) { 397 if (unlikely(new_state == CAN_STATE_BUS_OFF)) {
395 cf->can_id |= CAN_ERR_BUSOFF; 398 cf->can_id |= CAN_ERR_BUSOFF;
396 return; 399 return;
diff --git a/drivers/net/can/peak_canfd/peak_canfd.c b/drivers/net/can/peak_canfd/peak_canfd.c
index 0d57be5ea97b..85268be0c913 100644
--- a/drivers/net/can/peak_canfd/peak_canfd.c
+++ b/drivers/net/can/peak_canfd/peak_canfd.c
@@ -489,7 +489,7 @@ int peak_canfd_handle_msgs_list(struct peak_canfd_priv *priv,
489 struct pucan_rx_msg *msg_list, int msg_count) 489 struct pucan_rx_msg *msg_list, int msg_count)
490{ 490{
491 void *msg_ptr = msg_list; 491 void *msg_ptr = msg_list;
492 int i, msg_size; 492 int i, msg_size = 0;
493 493
494 for (i = 0; i < msg_count; i++) { 494 for (i = 0; i < msg_count; i++) {
495 msg_size = peak_canfd_handle_msg(priv, msg_ptr); 495 msg_size = peak_canfd_handle_msg(priv, msg_ptr);
diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c
index eb7173713bbc..6a6e896e52fa 100644
--- a/drivers/net/can/slcan.c
+++ b/drivers/net/can/slcan.c
@@ -417,7 +417,7 @@ static int slc_open(struct net_device *dev)
417static void slc_free_netdev(struct net_device *dev) 417static void slc_free_netdev(struct net_device *dev)
418{ 418{
419 int i = dev->base_addr; 419 int i = dev->base_addr;
420 free_netdev(dev); 420
421 slcan_devs[i] = NULL; 421 slcan_devs[i] = NULL;
422} 422}
423 423
@@ -436,7 +436,8 @@ static const struct net_device_ops slc_netdev_ops = {
436static void slc_setup(struct net_device *dev) 436static void slc_setup(struct net_device *dev)
437{ 437{
438 dev->netdev_ops = &slc_netdev_ops; 438 dev->netdev_ops = &slc_netdev_ops;
439 dev->destructor = slc_free_netdev; 439 dev->needs_free_netdev = true;
440 dev->priv_destructor = slc_free_netdev;
440 441
441 dev->hard_header_len = 0; 442 dev->hard_header_len = 0;
442 dev->addr_len = 0; 443 dev->addr_len = 0;
@@ -761,8 +762,6 @@ static void __exit slcan_exit(void)
761 if (sl->tty) { 762 if (sl->tty) {
762 printk(KERN_ERR "%s: tty discipline still running\n", 763 printk(KERN_ERR "%s: tty discipline still running\n",
763 dev->name); 764 dev->name);
764 /* Intentionally leak the control block. */
765 dev->destructor = NULL;
766 } 765 }
767 766
768 unregister_netdev(dev); 767 unregister_netdev(dev);
diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
index eecee7f8dfb7..afcc1312dbaf 100644
--- a/drivers/net/can/usb/gs_usb.c
+++ b/drivers/net/can/usb/gs_usb.c
@@ -265,6 +265,8 @@ static int gs_cmd_reset(struct gs_usb *gsusb, struct gs_can *gsdev)
265 sizeof(*dm), 265 sizeof(*dm),
266 1000); 266 1000);
267 267
268 kfree(dm);
269
268 return rc; 270 return rc;
269} 271}
270 272
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
index 57913dbbae0a..1ca76e03e965 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
@@ -908,8 +908,6 @@ static int peak_usb_probe(struct usb_interface *intf,
908 const struct peak_usb_adapter *peak_usb_adapter = NULL; 908 const struct peak_usb_adapter *peak_usb_adapter = NULL;
909 int i, err = -ENOMEM; 909 int i, err = -ENOMEM;
910 910
911 usb_dev = interface_to_usbdev(intf);
912
913 /* get corresponding PCAN-USB adapter */ 911 /* get corresponding PCAN-USB adapter */
914 for (i = 0; i < ARRAY_SIZE(peak_usb_adapters_list); i++) 912 for (i = 0; i < ARRAY_SIZE(peak_usb_adapters_list); i++)
915 if (peak_usb_adapters_list[i]->device_id == usb_id_product) { 913 if (peak_usb_adapters_list[i]->device_id == usb_id_product) {
@@ -920,7 +918,7 @@ static int peak_usb_probe(struct usb_interface *intf,
920 if (!peak_usb_adapter) { 918 if (!peak_usb_adapter) {
921 /* should never come except device_id bad usage in this file */ 919 /* should never come except device_id bad usage in this file */
922 pr_err("%s: didn't find device id. 0x%x in devices list\n", 920 pr_err("%s: didn't find device id. 0x%x in devices list\n",
923 PCAN_USB_DRIVER_NAME, usb_dev->descriptor.idProduct); 921 PCAN_USB_DRIVER_NAME, usb_id_product);
924 return -ENODEV; 922 return -ENODEV;
925 } 923 }
926 924
diff --git a/drivers/net/can/vcan.c b/drivers/net/can/vcan.c
index facca33d53e9..a8cb33264ff1 100644
--- a/drivers/net/can/vcan.c
+++ b/drivers/net/can/vcan.c
@@ -152,7 +152,7 @@ static const struct net_device_ops vcan_netdev_ops = {
152static void vcan_setup(struct net_device *dev) 152static void vcan_setup(struct net_device *dev)
153{ 153{
154 dev->type = ARPHRD_CAN; 154 dev->type = ARPHRD_CAN;
155 dev->mtu = CAN_MTU; 155 dev->mtu = CANFD_MTU;
156 dev->hard_header_len = 0; 156 dev->hard_header_len = 0;
157 dev->addr_len = 0; 157 dev->addr_len = 0;
158 dev->tx_queue_len = 0; 158 dev->tx_queue_len = 0;
@@ -163,7 +163,7 @@ static void vcan_setup(struct net_device *dev)
163 dev->flags |= IFF_ECHO; 163 dev->flags |= IFF_ECHO;
164 164
165 dev->netdev_ops = &vcan_netdev_ops; 165 dev->netdev_ops = &vcan_netdev_ops;
166 dev->destructor = free_netdev; 166 dev->needs_free_netdev = true;
167} 167}
168 168
169static struct rtnl_link_ops vcan_link_ops __read_mostly = { 169static struct rtnl_link_ops vcan_link_ops __read_mostly = {
diff --git a/drivers/net/can/vxcan.c b/drivers/net/can/vxcan.c
index 7fbb24795681..cfe889e8f172 100644
--- a/drivers/net/can/vxcan.c
+++ b/drivers/net/can/vxcan.c
@@ -150,13 +150,13 @@ static const struct net_device_ops vxcan_netdev_ops = {
150static void vxcan_setup(struct net_device *dev) 150static void vxcan_setup(struct net_device *dev)
151{ 151{
152 dev->type = ARPHRD_CAN; 152 dev->type = ARPHRD_CAN;
153 dev->mtu = CAN_MTU; 153 dev->mtu = CANFD_MTU;
154 dev->hard_header_len = 0; 154 dev->hard_header_len = 0;
155 dev->addr_len = 0; 155 dev->addr_len = 0;
156 dev->tx_queue_len = 0; 156 dev->tx_queue_len = 0;
157 dev->flags = (IFF_NOARP|IFF_ECHO); 157 dev->flags = (IFF_NOARP|IFF_ECHO);
158 dev->netdev_ops = &vxcan_netdev_ops; 158 dev->netdev_ops = &vxcan_netdev_ops;
159 dev->destructor = free_netdev; 159 dev->needs_free_netdev = true;
160} 160}
161 161
162/* forward declaration for rtnl_create_link() */ 162/* forward declaration for rtnl_create_link() */
diff --git a/drivers/net/dsa/mv88e6xxx/global2.h b/drivers/net/dsa/mv88e6xxx/global2.h
index 96046bb12ca1..14c0be98e0a4 100644
--- a/drivers/net/dsa/mv88e6xxx/global2.h
+++ b/drivers/net/dsa/mv88e6xxx/global2.h
@@ -114,13 +114,13 @@ static inline int mv88e6xxx_g2_set_eeprom16(struct mv88e6xxx_chip *chip,
114 return -EOPNOTSUPP; 114 return -EOPNOTSUPP;
115} 115}
116 116
117int mv88e6xxx_g2_pvt_write(struct mv88e6xxx_chip *chip, int src_dev, 117static inline int mv88e6xxx_g2_pvt_write(struct mv88e6xxx_chip *chip,
118 int src_port, u16 data) 118 int src_dev, int src_port, u16 data)
119{ 119{
120 return -EOPNOTSUPP; 120 return -EOPNOTSUPP;
121} 121}
122 122
123int mv88e6xxx_g2_misc_4_bit_port(struct mv88e6xxx_chip *chip) 123static inline int mv88e6xxx_g2_misc_4_bit_port(struct mv88e6xxx_chip *chip)
124{ 124{
125 return -EOPNOTSUPP; 125 return -EOPNOTSUPP;
126} 126}
diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
index 149244aac20a..9905b52fe293 100644
--- a/drivers/net/dummy.c
+++ b/drivers/net/dummy.c
@@ -328,7 +328,6 @@ static void dummy_free_netdev(struct net_device *dev)
328 struct dummy_priv *priv = netdev_priv(dev); 328 struct dummy_priv *priv = netdev_priv(dev);
329 329
330 kfree(priv->vfinfo); 330 kfree(priv->vfinfo);
331 free_netdev(dev);
332} 331}
333 332
334static void dummy_setup(struct net_device *dev) 333static void dummy_setup(struct net_device *dev)
@@ -338,7 +337,8 @@ static void dummy_setup(struct net_device *dev)
338 /* Initialize the device structure. */ 337 /* Initialize the device structure. */
339 dev->netdev_ops = &dummy_netdev_ops; 338 dev->netdev_ops = &dummy_netdev_ops;
340 dev->ethtool_ops = &dummy_ethtool_ops; 339 dev->ethtool_ops = &dummy_ethtool_ops;
341 dev->destructor = dummy_free_netdev; 340 dev->needs_free_netdev = true;
341 dev->priv_destructor = dummy_free_netdev;
342 342
343 /* Fill in device structure with ethernet-generic values. */ 343 /* Fill in device structure with ethernet-generic values. */
344 dev->flags |= IFF_NOARP; 344 dev->flags |= IFF_NOARP;
diff --git a/drivers/net/ethernet/8390/ax88796.c b/drivers/net/ethernet/8390/ax88796.c
index b0a3b85fc6f8..db02bc2fb4b2 100644
--- a/drivers/net/ethernet/8390/ax88796.c
+++ b/drivers/net/ethernet/8390/ax88796.c
@@ -748,13 +748,13 @@ static int ax_init_dev(struct net_device *dev)
748 748
749 ret = ax_mii_init(dev); 749 ret = ax_mii_init(dev);
750 if (ret) 750 if (ret)
751 goto out_irq; 751 goto err_out;
752 752
753 ax_NS8390_init(dev, 0); 753 ax_NS8390_init(dev, 0);
754 754
755 ret = register_netdev(dev); 755 ret = register_netdev(dev);
756 if (ret) 756 if (ret)
757 goto out_irq; 757 goto err_out;
758 758
759 netdev_info(dev, "%dbit, irq %d, %lx, MAC: %pM\n", 759 netdev_info(dev, "%dbit, irq %d, %lx, MAC: %pM\n",
760 ei_local->word16 ? 16 : 8, dev->irq, dev->base_addr, 760 ei_local->word16 ? 16 : 8, dev->irq, dev->base_addr,
@@ -762,9 +762,6 @@ static int ax_init_dev(struct net_device *dev)
762 762
763 return 0; 763 return 0;
764 764
765 out_irq:
766 /* cleanup irq */
767 free_irq(dev->irq, dev);
768 err_out: 765 err_out:
769 return ret; 766 return ret;
770} 767}
diff --git a/drivers/net/ethernet/amazon/ena/ena_com.c b/drivers/net/ethernet/amazon/ena/ena_com.c
index 08d11cede9c9..f5b237e0bd60 100644
--- a/drivers/net/ethernet/amazon/ena/ena_com.c
+++ b/drivers/net/ethernet/amazon/ena/ena_com.c
@@ -61,6 +61,8 @@
61 61
62#define ENA_MMIO_READ_TIMEOUT 0xFFFFFFFF 62#define ENA_MMIO_READ_TIMEOUT 0xFFFFFFFF
63 63
64#define ENA_REGS_ADMIN_INTR_MASK 1
65
64/*****************************************************************************/ 66/*****************************************************************************/
65/*****************************************************************************/ 67/*****************************************************************************/
66/*****************************************************************************/ 68/*****************************************************************************/
@@ -232,11 +234,9 @@ static struct ena_comp_ctx *__ena_com_submit_admin_cmd(struct ena_com_admin_queu
232 tail_masked = admin_queue->sq.tail & queue_size_mask; 234 tail_masked = admin_queue->sq.tail & queue_size_mask;
233 235
234 /* In case of queue FULL */ 236 /* In case of queue FULL */
235 cnt = admin_queue->sq.tail - admin_queue->sq.head; 237 cnt = atomic_read(&admin_queue->outstanding_cmds);
236 if (cnt >= admin_queue->q_depth) { 238 if (cnt >= admin_queue->q_depth) {
237 pr_debug("admin queue is FULL (tail %d head %d depth: %d)\n", 239 pr_debug("admin queue is full.\n");
238 admin_queue->sq.tail, admin_queue->sq.head,
239 admin_queue->q_depth);
240 admin_queue->stats.out_of_space++; 240 admin_queue->stats.out_of_space++;
241 return ERR_PTR(-ENOSPC); 241 return ERR_PTR(-ENOSPC);
242 } 242 }
@@ -508,15 +508,20 @@ static int ena_com_comp_status_to_errno(u8 comp_status)
508static int ena_com_wait_and_process_admin_cq_polling(struct ena_comp_ctx *comp_ctx, 508static int ena_com_wait_and_process_admin_cq_polling(struct ena_comp_ctx *comp_ctx,
509 struct ena_com_admin_queue *admin_queue) 509 struct ena_com_admin_queue *admin_queue)
510{ 510{
511 unsigned long flags; 511 unsigned long flags, timeout;
512 u32 start_time;
513 int ret; 512 int ret;
514 513
515 start_time = ((u32)jiffies_to_usecs(jiffies)); 514 timeout = jiffies + ADMIN_CMD_TIMEOUT_US;
515
516 while (1) {
517 spin_lock_irqsave(&admin_queue->q_lock, flags);
518 ena_com_handle_admin_completion(admin_queue);
519 spin_unlock_irqrestore(&admin_queue->q_lock, flags);
520
521 if (comp_ctx->status != ENA_CMD_SUBMITTED)
522 break;
516 523
517 while (comp_ctx->status == ENA_CMD_SUBMITTED) { 524 if (time_is_before_jiffies(timeout)) {
518 if ((((u32)jiffies_to_usecs(jiffies)) - start_time) >
519 ADMIN_CMD_TIMEOUT_US) {
520 pr_err("Wait for completion (polling) timeout\n"); 525 pr_err("Wait for completion (polling) timeout\n");
521 /* ENA didn't have any completion */ 526 /* ENA didn't have any completion */
522 spin_lock_irqsave(&admin_queue->q_lock, flags); 527 spin_lock_irqsave(&admin_queue->q_lock, flags);
@@ -528,10 +533,6 @@ static int ena_com_wait_and_process_admin_cq_polling(struct ena_comp_ctx *comp_c
528 goto err; 533 goto err;
529 } 534 }
530 535
531 spin_lock_irqsave(&admin_queue->q_lock, flags);
532 ena_com_handle_admin_completion(admin_queue);
533 spin_unlock_irqrestore(&admin_queue->q_lock, flags);
534
535 msleep(100); 536 msleep(100);
536 } 537 }
537 538
@@ -1455,6 +1456,12 @@ void ena_com_admin_destroy(struct ena_com_dev *ena_dev)
1455 1456
1456void ena_com_set_admin_polling_mode(struct ena_com_dev *ena_dev, bool polling) 1457void ena_com_set_admin_polling_mode(struct ena_com_dev *ena_dev, bool polling)
1457{ 1458{
1459 u32 mask_value = 0;
1460
1461 if (polling)
1462 mask_value = ENA_REGS_ADMIN_INTR_MASK;
1463
1464 writel(mask_value, ena_dev->reg_bar + ENA_REGS_INTR_MASK_OFF);
1458 ena_dev->admin_queue.polling = polling; 1465 ena_dev->admin_queue.polling = polling;
1459} 1466}
1460 1467
diff --git a/drivers/net/ethernet/amazon/ena/ena_ethtool.c b/drivers/net/ethernet/amazon/ena/ena_ethtool.c
index 67b2338f8fb3..3ee55e2fd694 100644
--- a/drivers/net/ethernet/amazon/ena/ena_ethtool.c
+++ b/drivers/net/ethernet/amazon/ena/ena_ethtool.c
@@ -80,7 +80,6 @@ static const struct ena_stats ena_stats_tx_strings[] = {
80 ENA_STAT_TX_ENTRY(tx_poll), 80 ENA_STAT_TX_ENTRY(tx_poll),
81 ENA_STAT_TX_ENTRY(doorbells), 81 ENA_STAT_TX_ENTRY(doorbells),
82 ENA_STAT_TX_ENTRY(prepare_ctx_err), 82 ENA_STAT_TX_ENTRY(prepare_ctx_err),
83 ENA_STAT_TX_ENTRY(missing_tx_comp),
84 ENA_STAT_TX_ENTRY(bad_req_id), 83 ENA_STAT_TX_ENTRY(bad_req_id),
85}; 84};
86 85
@@ -94,6 +93,7 @@ static const struct ena_stats ena_stats_rx_strings[] = {
94 ENA_STAT_RX_ENTRY(dma_mapping_err), 93 ENA_STAT_RX_ENTRY(dma_mapping_err),
95 ENA_STAT_RX_ENTRY(bad_desc_num), 94 ENA_STAT_RX_ENTRY(bad_desc_num),
96 ENA_STAT_RX_ENTRY(rx_copybreak_pkt), 95 ENA_STAT_RX_ENTRY(rx_copybreak_pkt),
96 ENA_STAT_RX_ENTRY(empty_rx_ring),
97}; 97};
98 98
99static const struct ena_stats ena_stats_ena_com_strings[] = { 99static const struct ena_stats ena_stats_ena_com_strings[] = {
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 7c1214d78855..4f16ed38bcf3 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -190,6 +190,7 @@ static void ena_init_io_rings(struct ena_adapter *adapter)
190 rxr->sgl_size = adapter->max_rx_sgl_size; 190 rxr->sgl_size = adapter->max_rx_sgl_size;
191 rxr->smoothed_interval = 191 rxr->smoothed_interval =
192 ena_com_get_nonadaptive_moderation_interval_rx(ena_dev); 192 ena_com_get_nonadaptive_moderation_interval_rx(ena_dev);
193 rxr->empty_rx_queue = 0;
193 } 194 }
194} 195}
195 196
@@ -1078,6 +1079,26 @@ inline void ena_adjust_intr_moderation(struct ena_ring *rx_ring,
1078 rx_ring->per_napi_bytes = 0; 1079 rx_ring->per_napi_bytes = 0;
1079} 1080}
1080 1081
1082static inline void ena_unmask_interrupt(struct ena_ring *tx_ring,
1083 struct ena_ring *rx_ring)
1084{
1085 struct ena_eth_io_intr_reg intr_reg;
1086
1087 /* Update intr register: rx intr delay,
1088 * tx intr delay and interrupt unmask
1089 */
1090 ena_com_update_intr_reg(&intr_reg,
1091 rx_ring->smoothed_interval,
1092 tx_ring->smoothed_interval,
1093 true);
1094
1095 /* It is a shared MSI-X.
1096 * Tx and Rx CQ have pointer to it.
1097 * So we use one of them to reach the intr reg
1098 */
1099 ena_com_unmask_intr(rx_ring->ena_com_io_cq, &intr_reg);
1100}
1101
1081static inline void ena_update_ring_numa_node(struct ena_ring *tx_ring, 1102static inline void ena_update_ring_numa_node(struct ena_ring *tx_ring,
1082 struct ena_ring *rx_ring) 1103 struct ena_ring *rx_ring)
1083{ 1104{
@@ -1108,7 +1129,6 @@ static int ena_io_poll(struct napi_struct *napi, int budget)
1108{ 1129{
1109 struct ena_napi *ena_napi = container_of(napi, struct ena_napi, napi); 1130 struct ena_napi *ena_napi = container_of(napi, struct ena_napi, napi);
1110 struct ena_ring *tx_ring, *rx_ring; 1131 struct ena_ring *tx_ring, *rx_ring;
1111 struct ena_eth_io_intr_reg intr_reg;
1112 1132
1113 u32 tx_work_done; 1133 u32 tx_work_done;
1114 u32 rx_work_done; 1134 u32 rx_work_done;
@@ -1149,22 +1169,9 @@ static int ena_io_poll(struct napi_struct *napi, int budget)
1149 if (ena_com_get_adaptive_moderation_enabled(rx_ring->ena_dev)) 1169 if (ena_com_get_adaptive_moderation_enabled(rx_ring->ena_dev))
1150 ena_adjust_intr_moderation(rx_ring, tx_ring); 1170 ena_adjust_intr_moderation(rx_ring, tx_ring);
1151 1171
1152 /* Update intr register: rx intr delay, 1172 ena_unmask_interrupt(tx_ring, rx_ring);
1153 * tx intr delay and interrupt unmask
1154 */
1155 ena_com_update_intr_reg(&intr_reg,
1156 rx_ring->smoothed_interval,
1157 tx_ring->smoothed_interval,
1158 true);
1159
1160 /* It is a shared MSI-X.
1161 * Tx and Rx CQ have pointer to it.
1162 * So we use one of them to reach the intr reg
1163 */
1164 ena_com_unmask_intr(rx_ring->ena_com_io_cq, &intr_reg);
1165 } 1173 }
1166 1174
1167
1168 ena_update_ring_numa_node(tx_ring, rx_ring); 1175 ena_update_ring_numa_node(tx_ring, rx_ring);
1169 1176
1170 ret = rx_work_done; 1177 ret = rx_work_done;
@@ -1485,6 +1492,11 @@ static int ena_up_complete(struct ena_adapter *adapter)
1485 1492
1486 ena_napi_enable_all(adapter); 1493 ena_napi_enable_all(adapter);
1487 1494
1495 /* Enable completion queues interrupt */
1496 for (i = 0; i < adapter->num_queues; i++)
1497 ena_unmask_interrupt(&adapter->tx_ring[i],
1498 &adapter->rx_ring[i]);
1499
1488 /* schedule napi in case we had pending packets 1500 /* schedule napi in case we had pending packets
1489 * from the last time we disable napi 1501 * from the last time we disable napi
1490 */ 1502 */
@@ -1532,6 +1544,7 @@ static int ena_create_io_tx_queue(struct ena_adapter *adapter, int qid)
1532 "Failed to get TX queue handlers. TX queue num %d rc: %d\n", 1544 "Failed to get TX queue handlers. TX queue num %d rc: %d\n",
1533 qid, rc); 1545 qid, rc);
1534 ena_com_destroy_io_queue(ena_dev, ena_qid); 1546 ena_com_destroy_io_queue(ena_dev, ena_qid);
1547 return rc;
1535 } 1548 }
1536 1549
1537 ena_com_update_numa_node(tx_ring->ena_com_io_cq, ctx.numa_node); 1550 ena_com_update_numa_node(tx_ring->ena_com_io_cq, ctx.numa_node);
@@ -1596,6 +1609,7 @@ static int ena_create_io_rx_queue(struct ena_adapter *adapter, int qid)
1596 "Failed to get RX queue handlers. RX queue num %d rc: %d\n", 1609 "Failed to get RX queue handlers. RX queue num %d rc: %d\n",
1597 qid, rc); 1610 qid, rc);
1598 ena_com_destroy_io_queue(ena_dev, ena_qid); 1611 ena_com_destroy_io_queue(ena_dev, ena_qid);
1612 return rc;
1599 } 1613 }
1600 1614
1601 ena_com_update_numa_node(rx_ring->ena_com_io_cq, ctx.numa_node); 1615 ena_com_update_numa_node(rx_ring->ena_com_io_cq, ctx.numa_node);
@@ -1981,6 +1995,7 @@ static netdev_tx_t ena_start_xmit(struct sk_buff *skb, struct net_device *dev)
1981 1995
1982 tx_info->tx_descs = nb_hw_desc; 1996 tx_info->tx_descs = nb_hw_desc;
1983 tx_info->last_jiffies = jiffies; 1997 tx_info->last_jiffies = jiffies;
1998 tx_info->print_once = 0;
1984 1999
1985 tx_ring->next_to_use = ENA_TX_RING_IDX_NEXT(next_to_use, 2000 tx_ring->next_to_use = ENA_TX_RING_IDX_NEXT(next_to_use,
1986 tx_ring->ring_size); 2001 tx_ring->ring_size);
@@ -2550,13 +2565,44 @@ err:
2550 "Reset attempt failed. Can not reset the device\n"); 2565 "Reset attempt failed. Can not reset the device\n");
2551} 2566}
2552 2567
2553static void check_for_missing_tx_completions(struct ena_adapter *adapter) 2568static int check_missing_comp_in_queue(struct ena_adapter *adapter,
2569 struct ena_ring *tx_ring)
2554{ 2570{
2555 struct ena_tx_buffer *tx_buf; 2571 struct ena_tx_buffer *tx_buf;
2556 unsigned long last_jiffies; 2572 unsigned long last_jiffies;
2573 u32 missed_tx = 0;
2574 int i;
2575
2576 for (i = 0; i < tx_ring->ring_size; i++) {
2577 tx_buf = &tx_ring->tx_buffer_info[i];
2578 last_jiffies = tx_buf->last_jiffies;
2579 if (unlikely(last_jiffies &&
2580 time_is_before_jiffies(last_jiffies + TX_TIMEOUT))) {
2581 if (!tx_buf->print_once)
2582 netif_notice(adapter, tx_err, adapter->netdev,
2583 "Found a Tx that wasn't completed on time, qid %d, index %d.\n",
2584 tx_ring->qid, i);
2585
2586 tx_buf->print_once = 1;
2587 missed_tx++;
2588
2589 if (unlikely(missed_tx > MAX_NUM_OF_TIMEOUTED_PACKETS)) {
2590 netif_err(adapter, tx_err, adapter->netdev,
2591 "The number of lost tx completions is above the threshold (%d > %d). Reset the device\n",
2592 missed_tx, MAX_NUM_OF_TIMEOUTED_PACKETS);
2593 set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
2594 return -EIO;
2595 }
2596 }
2597 }
2598
2599 return 0;
2600}
2601
2602static void check_for_missing_tx_completions(struct ena_adapter *adapter)
2603{
2557 struct ena_ring *tx_ring; 2604 struct ena_ring *tx_ring;
2558 int i, j, budget; 2605 int i, budget, rc;
2559 u32 missed_tx;
2560 2606
2561 /* Make sure the driver doesn't turn the device in other process */ 2607 /* Make sure the driver doesn't turn the device in other process */
2562 smp_rmb(); 2608 smp_rmb();
@@ -2572,31 +2618,9 @@ static void check_for_missing_tx_completions(struct ena_adapter *adapter)
2572 for (i = adapter->last_monitored_tx_qid; i < adapter->num_queues; i++) { 2618 for (i = adapter->last_monitored_tx_qid; i < adapter->num_queues; i++) {
2573 tx_ring = &adapter->tx_ring[i]; 2619 tx_ring = &adapter->tx_ring[i];
2574 2620
2575 for (j = 0; j < tx_ring->ring_size; j++) { 2621 rc = check_missing_comp_in_queue(adapter, tx_ring);
2576 tx_buf = &tx_ring->tx_buffer_info[j]; 2622 if (unlikely(rc))
2577 last_jiffies = tx_buf->last_jiffies; 2623 return;
2578 if (unlikely(last_jiffies && time_is_before_jiffies(last_jiffies + TX_TIMEOUT))) {
2579 netif_notice(adapter, tx_err, adapter->netdev,
2580 "Found a Tx that wasn't completed on time, qid %d, index %d.\n",
2581 tx_ring->qid, j);
2582
2583 u64_stats_update_begin(&tx_ring->syncp);
2584 missed_tx = tx_ring->tx_stats.missing_tx_comp++;
2585 u64_stats_update_end(&tx_ring->syncp);
2586
2587 /* Clear last jiffies so the lost buffer won't
2588 * be counted twice.
2589 */
2590 tx_buf->last_jiffies = 0;
2591
2592 if (unlikely(missed_tx > MAX_NUM_OF_TIMEOUTED_PACKETS)) {
2593 netif_err(adapter, tx_err, adapter->netdev,
2594 "The number of lost tx completion is above the threshold (%d > %d). Reset the device\n",
2595 missed_tx, MAX_NUM_OF_TIMEOUTED_PACKETS);
2596 set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
2597 }
2598 }
2599 }
2600 2624
2601 budget--; 2625 budget--;
2602 if (!budget) 2626 if (!budget)
@@ -2606,6 +2630,58 @@ static void check_for_missing_tx_completions(struct ena_adapter *adapter)
2606 adapter->last_monitored_tx_qid = i % adapter->num_queues; 2630 adapter->last_monitored_tx_qid = i % adapter->num_queues;
2607} 2631}
2608 2632
2633/* trigger napi schedule after 2 consecutive detections */
2634#define EMPTY_RX_REFILL 2
2635/* For the rare case where the device runs out of Rx descriptors and the
2636 * napi handler failed to refill new Rx descriptors (due to a lack of memory
2637 * for example).
2638 * This case will lead to a deadlock:
2639 * The device won't send interrupts since all the new Rx packets will be dropped
2640 * The napi handler won't allocate new Rx descriptors so the device will be
2641 * able to send new packets.
2642 *
2643 * This scenario can happen when the kernel's vm.min_free_kbytes is too small.
2644 * It is recommended to have at least 512MB, with a minimum of 128MB for
2645 * constrained environment).
2646 *
2647 * When such a situation is detected - Reschedule napi
2648 */
2649static void check_for_empty_rx_ring(struct ena_adapter *adapter)
2650{
2651 struct ena_ring *rx_ring;
2652 int i, refill_required;
2653
2654 if (!test_bit(ENA_FLAG_DEV_UP, &adapter->flags))
2655 return;
2656
2657 if (test_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags))
2658 return;
2659
2660 for (i = 0; i < adapter->num_queues; i++) {
2661 rx_ring = &adapter->rx_ring[i];
2662
2663 refill_required =
2664 ena_com_sq_empty_space(rx_ring->ena_com_io_sq);
2665 if (unlikely(refill_required == (rx_ring->ring_size - 1))) {
2666 rx_ring->empty_rx_queue++;
2667
2668 if (rx_ring->empty_rx_queue >= EMPTY_RX_REFILL) {
2669 u64_stats_update_begin(&rx_ring->syncp);
2670 rx_ring->rx_stats.empty_rx_ring++;
2671 u64_stats_update_end(&rx_ring->syncp);
2672
2673 netif_err(adapter, drv, adapter->netdev,
2674 "trigger refill for ring %d\n", i);
2675
2676 napi_schedule(rx_ring->napi);
2677 rx_ring->empty_rx_queue = 0;
2678 }
2679 } else {
2680 rx_ring->empty_rx_queue = 0;
2681 }
2682 }
2683}
2684
2609/* Check for keep alive expiration */ 2685/* Check for keep alive expiration */
2610static void check_for_missing_keep_alive(struct ena_adapter *adapter) 2686static void check_for_missing_keep_alive(struct ena_adapter *adapter)
2611{ 2687{
@@ -2660,6 +2736,8 @@ static void ena_timer_service(unsigned long data)
2660 2736
2661 check_for_missing_tx_completions(adapter); 2737 check_for_missing_tx_completions(adapter);
2662 2738
2739 check_for_empty_rx_ring(adapter);
2740
2663 if (debug_area) 2741 if (debug_area)
2664 ena_dump_stats_to_buf(adapter, debug_area); 2742 ena_dump_stats_to_buf(adapter, debug_area);
2665 2743
@@ -2840,6 +2918,11 @@ static void ena_release_bars(struct ena_com_dev *ena_dev, struct pci_dev *pdev)
2840{ 2918{
2841 int release_bars; 2919 int release_bars;
2842 2920
2921 if (ena_dev->mem_bar)
2922 devm_iounmap(&pdev->dev, ena_dev->mem_bar);
2923
2924 devm_iounmap(&pdev->dev, ena_dev->reg_bar);
2925
2843 release_bars = pci_select_bars(pdev, IORESOURCE_MEM) & ENA_BAR_MASK; 2926 release_bars = pci_select_bars(pdev, IORESOURCE_MEM) & ENA_BAR_MASK;
2844 pci_release_selected_regions(pdev, release_bars); 2927 pci_release_selected_regions(pdev, release_bars);
2845} 2928}
@@ -2927,8 +3010,9 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2927 goto err_free_ena_dev; 3010 goto err_free_ena_dev;
2928 } 3011 }
2929 3012
2930 ena_dev->reg_bar = ioremap(pci_resource_start(pdev, ENA_REG_BAR), 3013 ena_dev->reg_bar = devm_ioremap(&pdev->dev,
2931 pci_resource_len(pdev, ENA_REG_BAR)); 3014 pci_resource_start(pdev, ENA_REG_BAR),
3015 pci_resource_len(pdev, ENA_REG_BAR));
2932 if (!ena_dev->reg_bar) { 3016 if (!ena_dev->reg_bar) {
2933 dev_err(&pdev->dev, "failed to remap regs bar\n"); 3017 dev_err(&pdev->dev, "failed to remap regs bar\n");
2934 rc = -EFAULT; 3018 rc = -EFAULT;
@@ -2948,8 +3032,9 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2948 ena_set_push_mode(pdev, ena_dev, &get_feat_ctx); 3032 ena_set_push_mode(pdev, ena_dev, &get_feat_ctx);
2949 3033
2950 if (ena_dev->tx_mem_queue_type == ENA_ADMIN_PLACEMENT_POLICY_DEV) { 3034 if (ena_dev->tx_mem_queue_type == ENA_ADMIN_PLACEMENT_POLICY_DEV) {
2951 ena_dev->mem_bar = ioremap_wc(pci_resource_start(pdev, ENA_MEM_BAR), 3035 ena_dev->mem_bar = devm_ioremap_wc(&pdev->dev,
2952 pci_resource_len(pdev, ENA_MEM_BAR)); 3036 pci_resource_start(pdev, ENA_MEM_BAR),
3037 pci_resource_len(pdev, ENA_MEM_BAR));
2953 if (!ena_dev->mem_bar) { 3038 if (!ena_dev->mem_bar) {
2954 rc = -EFAULT; 3039 rc = -EFAULT;
2955 goto err_device_destroy; 3040 goto err_device_destroy;
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.h b/drivers/net/ethernet/amazon/ena/ena_netdev.h
index 0e22bce6239d..a4d3d5e21068 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.h
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.h
@@ -45,7 +45,7 @@
45 45
46#define DRV_MODULE_VER_MAJOR 1 46#define DRV_MODULE_VER_MAJOR 1
47#define DRV_MODULE_VER_MINOR 1 47#define DRV_MODULE_VER_MINOR 1
48#define DRV_MODULE_VER_SUBMINOR 2 48#define DRV_MODULE_VER_SUBMINOR 7
49 49
50#define DRV_MODULE_NAME "ena" 50#define DRV_MODULE_NAME "ena"
51#ifndef DRV_MODULE_VERSION 51#ifndef DRV_MODULE_VERSION
@@ -146,7 +146,18 @@ struct ena_tx_buffer {
146 u32 tx_descs; 146 u32 tx_descs;
147 /* num of buffers used by this skb */ 147 /* num of buffers used by this skb */
148 u32 num_of_bufs; 148 u32 num_of_bufs;
149 /* Save the last jiffies to detect missing tx packets */ 149
150 /* Used for detect missing tx packets to limit the number of prints */
151 u32 print_once;
152 /* Save the last jiffies to detect missing tx packets
153 *
154 * sets to non zero value on ena_start_xmit and set to zero on
155 * napi and timer_Service_routine.
156 *
157 * while this value is not protected by lock,
158 * a given packet is not expected to be handled by ena_start_xmit
159 * and by napi/timer_service at the same time.
160 */
150 unsigned long last_jiffies; 161 unsigned long last_jiffies;
151 struct ena_com_buf bufs[ENA_PKT_MAX_BUFS]; 162 struct ena_com_buf bufs[ENA_PKT_MAX_BUFS];
152} ____cacheline_aligned; 163} ____cacheline_aligned;
@@ -170,7 +181,6 @@ struct ena_stats_tx {
170 u64 napi_comp; 181 u64 napi_comp;
171 u64 tx_poll; 182 u64 tx_poll;
172 u64 doorbells; 183 u64 doorbells;
173 u64 missing_tx_comp;
174 u64 bad_req_id; 184 u64 bad_req_id;
175}; 185};
176 186
@@ -184,6 +194,7 @@ struct ena_stats_rx {
184 u64 dma_mapping_err; 194 u64 dma_mapping_err;
185 u64 bad_desc_num; 195 u64 bad_desc_num;
186 u64 rx_copybreak_pkt; 196 u64 rx_copybreak_pkt;
197 u64 empty_rx_ring;
187}; 198};
188 199
189struct ena_ring { 200struct ena_ring {
@@ -231,6 +242,7 @@ struct ena_ring {
231 struct ena_stats_tx tx_stats; 242 struct ena_stats_tx tx_stats;
232 struct ena_stats_rx rx_stats; 243 struct ena_stats_rx rx_stats;
233 }; 244 };
245 int empty_rx_queue;
234} ____cacheline_aligned; 246} ____cacheline_aligned;
235 247
236struct ena_stats_dev { 248struct ena_stats_dev {
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
index b3bc87fe3764..0a98c369df20 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
@@ -324,7 +324,7 @@ static int xgbe_map_rx_buffer(struct xgbe_prv_data *pdata,
324 struct xgbe_ring *ring, 324 struct xgbe_ring *ring,
325 struct xgbe_ring_data *rdata) 325 struct xgbe_ring_data *rdata)
326{ 326{
327 int order, ret; 327 int ret;
328 328
329 if (!ring->rx_hdr_pa.pages) { 329 if (!ring->rx_hdr_pa.pages) {
330 ret = xgbe_alloc_pages(pdata, &ring->rx_hdr_pa, GFP_ATOMIC, 0); 330 ret = xgbe_alloc_pages(pdata, &ring->rx_hdr_pa, GFP_ATOMIC, 0);
@@ -333,9 +333,8 @@ static int xgbe_map_rx_buffer(struct xgbe_prv_data *pdata,
333 } 333 }
334 334
335 if (!ring->rx_buf_pa.pages) { 335 if (!ring->rx_buf_pa.pages) {
336 order = max_t(int, PAGE_ALLOC_COSTLY_ORDER - 1, 0);
337 ret = xgbe_alloc_pages(pdata, &ring->rx_buf_pa, GFP_ATOMIC, 336 ret = xgbe_alloc_pages(pdata, &ring->rx_buf_pa, GFP_ATOMIC,
338 order); 337 PAGE_ALLOC_COSTLY_ORDER);
339 if (ret) 338 if (ret)
340 return ret; 339 return ret;
341 } 340 }
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h
index b8e3d88f0879..a66aee51ab5b 100644
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h
@@ -193,9 +193,6 @@ int hw_atl_utils_hw_get_regs(struct aq_hw_s *self,
193 struct aq_hw_caps_s *aq_hw_caps, 193 struct aq_hw_caps_s *aq_hw_caps,
194 u32 *regs_buff); 194 u32 *regs_buff);
195 195
196int hw_atl_utils_hw_get_settings(struct aq_hw_s *self,
197 struct ethtool_cmd *cmd);
198
199int hw_atl_utils_hw_set_power(struct aq_hw_s *self, 196int hw_atl_utils_hw_set_power(struct aq_hw_s *self,
200 unsigned int power_state); 197 unsigned int power_state);
201 198
diff --git a/drivers/net/ethernet/atheros/atlx/atl2.c b/drivers/net/ethernet/atheros/atlx/atl2.c
index 63f2deec2a52..77a1c03255de 100644
--- a/drivers/net/ethernet/atheros/atlx/atl2.c
+++ b/drivers/net/ethernet/atheros/atlx/atl2.c
@@ -1353,6 +1353,7 @@ static int atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1353 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) && 1353 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) &&
1354 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) { 1354 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
1355 printk(KERN_ERR "atl2: No usable DMA configuration, aborting\n"); 1355 printk(KERN_ERR "atl2: No usable DMA configuration, aborting\n");
1356 err = -EIO;
1356 goto err_dma; 1357 goto err_dma;
1357 } 1358 }
1358 1359
@@ -1366,10 +1367,11 @@ static int atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1366 * pcibios_set_master to do the needed arch specific settings */ 1367 * pcibios_set_master to do the needed arch specific settings */
1367 pci_set_master(pdev); 1368 pci_set_master(pdev);
1368 1369
1369 err = -ENOMEM;
1370 netdev = alloc_etherdev(sizeof(struct atl2_adapter)); 1370 netdev = alloc_etherdev(sizeof(struct atl2_adapter));
1371 if (!netdev) 1371 if (!netdev) {
1372 err = -ENOMEM;
1372 goto err_alloc_etherdev; 1373 goto err_alloc_etherdev;
1374 }
1373 1375
1374 SET_NETDEV_DEV(netdev, &pdev->dev); 1376 SET_NETDEV_DEV(netdev, &pdev->dev);
1375 1377
@@ -1408,8 +1410,6 @@ static int atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1408 if (err) 1410 if (err)
1409 goto err_sw_init; 1411 goto err_sw_init;
1410 1412
1411 err = -EIO;
1412
1413 netdev->hw_features = NETIF_F_HW_VLAN_CTAG_RX; 1413 netdev->hw_features = NETIF_F_HW_VLAN_CTAG_RX;
1414 netdev->features |= (NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX); 1414 netdev->features |= (NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX);
1415 1415
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
index 099b374c1b17..5274501428e4 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -2026,9 +2026,12 @@ static int bcm_sysport_probe(struct platform_device *pdev)
2026 priv->num_rx_desc_words = params->num_rx_desc_words; 2026 priv->num_rx_desc_words = params->num_rx_desc_words;
2027 2027
2028 priv->irq0 = platform_get_irq(pdev, 0); 2028 priv->irq0 = platform_get_irq(pdev, 0);
2029 if (!priv->is_lite) 2029 if (!priv->is_lite) {
2030 priv->irq1 = platform_get_irq(pdev, 1); 2030 priv->irq1 = platform_get_irq(pdev, 1);
2031 priv->wol_irq = platform_get_irq(pdev, 2); 2031 priv->wol_irq = platform_get_irq(pdev, 2);
2032 } else {
2033 priv->wol_irq = platform_get_irq(pdev, 1);
2034 }
2032 if (priv->irq0 <= 0 || (priv->irq1 <= 0 && !priv->is_lite)) { 2035 if (priv->irq0 <= 0 || (priv->irq1 <= 0 && !priv->is_lite)) {
2033 dev_err(&pdev->dev, "invalid interrupts\n"); 2036 dev_err(&pdev->dev, "invalid interrupts\n");
2034 ret = -EINVAL; 2037 ret = -EINVAL;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index eccb3d1b6abb..f619c4cac51f 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -1926,7 +1926,7 @@ u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
1926 } 1926 }
1927 1927
1928 /* select a non-FCoE queue */ 1928 /* select a non-FCoE queue */
1929 return fallback(dev, skb) % BNX2X_NUM_ETH_QUEUES(bp); 1929 return fallback(dev, skb) % (BNX2X_NUM_ETH_QUEUES(bp) * bp->max_cos);
1930} 1930}
1931 1931
1932void bnx2x_set_num_queues(struct bnx2x *bp) 1932void bnx2x_set_num_queues(struct bnx2x *bp)
@@ -3883,15 +3883,26 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
3883 /* when transmitting in a vf, start bd must hold the ethertype 3883 /* when transmitting in a vf, start bd must hold the ethertype
3884 * for fw to enforce it 3884 * for fw to enforce it
3885 */ 3885 */
3886 u16 vlan_tci = 0;
3886#ifndef BNX2X_STOP_ON_ERROR 3887#ifndef BNX2X_STOP_ON_ERROR
3887 if (IS_VF(bp)) 3888 if (IS_VF(bp)) {
3888#endif 3889#endif
3889 tx_start_bd->vlan_or_ethertype = 3890 /* Still need to consider inband vlan for enforced */
3890 cpu_to_le16(ntohs(eth->h_proto)); 3891 if (__vlan_get_tag(skb, &vlan_tci)) {
3892 tx_start_bd->vlan_or_ethertype =
3893 cpu_to_le16(ntohs(eth->h_proto));
3894 } else {
3895 tx_start_bd->bd_flags.as_bitfield |=
3896 (X_ETH_INBAND_VLAN <<
3897 ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT);
3898 tx_start_bd->vlan_or_ethertype =
3899 cpu_to_le16(vlan_tci);
3900 }
3891#ifndef BNX2X_STOP_ON_ERROR 3901#ifndef BNX2X_STOP_ON_ERROR
3892 else 3902 } else {
3893 /* used by FW for packet accounting */ 3903 /* used by FW for packet accounting */
3894 tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod); 3904 tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod);
3905 }
3895#endif 3906#endif
3896 } 3907 }
3897 3908
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index a851f95c307a..349a46593abf 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -12729,7 +12729,7 @@ static int bnx2x_set_mc_list(struct bnx2x *bp)
12729 } else { 12729 } else {
12730 /* If no mc addresses are required, flush the configuration */ 12730 /* If no mc addresses are required, flush the configuration */
12731 rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_DEL); 12731 rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_DEL);
12732 if (rc) 12732 if (rc < 0)
12733 BNX2X_ERR("Failed to clear multicast configuration %d\n", 12733 BNX2X_ERR("Failed to clear multicast configuration %d\n",
12734 rc); 12734 rc);
12735 } 12735 }
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
index bdfd53b46bc5..9ca994d0bab6 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
@@ -901,6 +901,8 @@ static void bnx2x_vf_flr(struct bnx2x *bp, struct bnx2x_virtf *vf)
901 /* release VF resources */ 901 /* release VF resources */
902 bnx2x_vf_free_resc(bp, vf); 902 bnx2x_vf_free_resc(bp, vf);
903 903
904 vf->malicious = false;
905
904 /* re-open the mailbox */ 906 /* re-open the mailbox */
905 bnx2x_vf_enable_mbx(bp, vf->abs_vfid); 907 bnx2x_vf_enable_mbx(bp, vf->abs_vfid);
906 return; 908 return;
@@ -1822,9 +1824,11 @@ get_vf:
1822 vf->abs_vfid, qidx); 1824 vf->abs_vfid, qidx);
1823 bnx2x_vf_handle_rss_update_eqe(bp, vf); 1825 bnx2x_vf_handle_rss_update_eqe(bp, vf);
1824 case EVENT_RING_OPCODE_VF_FLR: 1826 case EVENT_RING_OPCODE_VF_FLR:
1825 case EVENT_RING_OPCODE_MALICIOUS_VF:
1826 /* Do nothing for now */ 1827 /* Do nothing for now */
1827 return 0; 1828 return 0;
1829 case EVENT_RING_OPCODE_MALICIOUS_VF:
1830 vf->malicious = true;
1831 return 0;
1828 } 1832 }
1829 1833
1830 return 0; 1834 return 0;
@@ -1905,6 +1909,13 @@ void bnx2x_iov_adjust_stats_req(struct bnx2x *bp)
1905 continue; 1909 continue;
1906 } 1910 }
1907 1911
1912 if (vf->malicious) {
1913 DP_AND((BNX2X_MSG_IOV | BNX2X_MSG_STATS),
1914 "vf %d malicious so no stats for it\n",
1915 vf->abs_vfid);
1916 continue;
1917 }
1918
1908 DP_AND((BNX2X_MSG_IOV | BNX2X_MSG_STATS), 1919 DP_AND((BNX2X_MSG_IOV | BNX2X_MSG_STATS),
1909 "add addresses for vf %d\n", vf->abs_vfid); 1920 "add addresses for vf %d\n", vf->abs_vfid);
1910 for_each_vfq(vf, j) { 1921 for_each_vfq(vf, j) {
@@ -3042,7 +3053,7 @@ void bnx2x_vf_pci_dealloc(struct bnx2x *bp)
3042{ 3053{
3043 BNX2X_PCI_FREE(bp->vf2pf_mbox, bp->vf2pf_mbox_mapping, 3054 BNX2X_PCI_FREE(bp->vf2pf_mbox, bp->vf2pf_mbox_mapping,
3044 sizeof(struct bnx2x_vf_mbx_msg)); 3055 sizeof(struct bnx2x_vf_mbx_msg));
3045 BNX2X_PCI_FREE(bp->vf2pf_mbox, bp->pf2vf_bulletin_mapping, 3056 BNX2X_PCI_FREE(bp->pf2vf_bulletin, bp->pf2vf_bulletin_mapping,
3046 sizeof(union pf_vf_bulletin)); 3057 sizeof(union pf_vf_bulletin));
3047} 3058}
3048 3059
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h
index 888d0b6632e8..53466f6cebab 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h
@@ -141,6 +141,7 @@ struct bnx2x_virtf {
141#define VF_RESET 3 /* VF FLR'd, pending cleanup */ 141#define VF_RESET 3 /* VF FLR'd, pending cleanup */
142 142
143 bool flr_clnup_stage; /* true during flr cleanup */ 143 bool flr_clnup_stage; /* true during flr cleanup */
144 bool malicious; /* true if FW indicated so, until FLR */
144 145
145 /* dma */ 146 /* dma */
146 dma_addr_t fw_stat_map; 147 dma_addr_t fw_stat_map;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 03f55daecb20..74e8e215524d 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -1301,10 +1301,11 @@ static inline struct sk_buff *bnxt_tpa_end(struct bnxt *bp,
1301 cp_cons = NEXT_CMP(cp_cons); 1301 cp_cons = NEXT_CMP(cp_cons);
1302 } 1302 }
1303 1303
1304 if (unlikely(agg_bufs > MAX_SKB_FRAGS)) { 1304 if (unlikely(agg_bufs > MAX_SKB_FRAGS || TPA_END_ERRORS(tpa_end1))) {
1305 bnxt_abort_tpa(bp, bnapi, cp_cons, agg_bufs); 1305 bnxt_abort_tpa(bp, bnapi, cp_cons, agg_bufs);
1306 netdev_warn(bp->dev, "TPA frags %d exceeded MAX_SKB_FRAGS %d\n", 1306 if (agg_bufs > MAX_SKB_FRAGS)
1307 agg_bufs, (int)MAX_SKB_FRAGS); 1307 netdev_warn(bp->dev, "TPA frags %d exceeded MAX_SKB_FRAGS %d\n",
1308 agg_bufs, (int)MAX_SKB_FRAGS);
1308 return NULL; 1309 return NULL;
1309 } 1310 }
1310 1311
@@ -1562,6 +1563,45 @@ next_rx_no_prod:
1562 return rc; 1563 return rc;
1563} 1564}
1564 1565
1566/* In netpoll mode, if we are using a combined completion ring, we need to
1567 * discard the rx packets and recycle the buffers.
1568 */
1569static int bnxt_force_rx_discard(struct bnxt *bp, struct bnxt_napi *bnapi,
1570 u32 *raw_cons, u8 *event)
1571{
1572 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
1573 u32 tmp_raw_cons = *raw_cons;
1574 struct rx_cmp_ext *rxcmp1;
1575 struct rx_cmp *rxcmp;
1576 u16 cp_cons;
1577 u8 cmp_type;
1578
1579 cp_cons = RING_CMP(tmp_raw_cons);
1580 rxcmp = (struct rx_cmp *)
1581 &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
1582
1583 tmp_raw_cons = NEXT_RAW_CMP(tmp_raw_cons);
1584 cp_cons = RING_CMP(tmp_raw_cons);
1585 rxcmp1 = (struct rx_cmp_ext *)
1586 &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
1587
1588 if (!RX_CMP_VALID(rxcmp1, tmp_raw_cons))
1589 return -EBUSY;
1590
1591 cmp_type = RX_CMP_TYPE(rxcmp);
1592 if (cmp_type == CMP_TYPE_RX_L2_CMP) {
1593 rxcmp1->rx_cmp_cfa_code_errors_v2 |=
1594 cpu_to_le32(RX_CMPL_ERRORS_CRC_ERROR);
1595 } else if (cmp_type == CMP_TYPE_RX_L2_TPA_END_CMP) {
1596 struct rx_tpa_end_cmp_ext *tpa_end1;
1597
1598 tpa_end1 = (struct rx_tpa_end_cmp_ext *)rxcmp1;
1599 tpa_end1->rx_tpa_end_cmp_errors_v2 |=
1600 cpu_to_le32(RX_TPA_END_CMP_ERRORS);
1601 }
1602 return bnxt_rx_pkt(bp, bnapi, raw_cons, event);
1603}
1604
1565#define BNXT_GET_EVENT_PORT(data) \ 1605#define BNXT_GET_EVENT_PORT(data) \
1566 ((data) & \ 1606 ((data) & \
1567 ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK) 1607 ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK)
@@ -1744,7 +1784,11 @@ static int bnxt_poll_work(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
1744 if (unlikely(tx_pkts > bp->tx_wake_thresh)) 1784 if (unlikely(tx_pkts > bp->tx_wake_thresh))
1745 rx_pkts = budget; 1785 rx_pkts = budget;
1746 } else if ((TX_CMP_TYPE(txcmp) & 0x30) == 0x10) { 1786 } else if ((TX_CMP_TYPE(txcmp) & 0x30) == 0x10) {
1747 rc = bnxt_rx_pkt(bp, bnapi, &raw_cons, &event); 1787 if (likely(budget))
1788 rc = bnxt_rx_pkt(bp, bnapi, &raw_cons, &event);
1789 else
1790 rc = bnxt_force_rx_discard(bp, bnapi, &raw_cons,
1791 &event);
1748 if (likely(rc >= 0)) 1792 if (likely(rc >= 0))
1749 rx_pkts += rc; 1793 rx_pkts += rc;
1750 else if (rc == -EBUSY) /* partial completion */ 1794 else if (rc == -EBUSY) /* partial completion */
@@ -6663,12 +6707,11 @@ static void bnxt_poll_controller(struct net_device *dev)
6663 struct bnxt *bp = netdev_priv(dev); 6707 struct bnxt *bp = netdev_priv(dev);
6664 int i; 6708 int i;
6665 6709
6666 for (i = 0; i < bp->cp_nr_rings; i++) { 6710 /* Only process tx rings/combined rings in netpoll mode. */
6667 struct bnxt_irq *irq = &bp->irq_tbl[i]; 6711 for (i = 0; i < bp->tx_nr_rings; i++) {
6712 struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
6668 6713
6669 disable_irq(irq->vector); 6714 napi_schedule(&txr->bnapi->napi);
6670 irq->handler(irq->vector, bp->bnapi[i]);
6671 enable_irq(irq->vector);
6672 } 6715 }
6673} 6716}
6674#endif 6717#endif
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 3ef42dbc6327..d46a85041083 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -374,12 +374,16 @@ struct rx_tpa_end_cmp_ext {
374 374
375 __le32 rx_tpa_end_cmp_errors_v2; 375 __le32 rx_tpa_end_cmp_errors_v2;
376 #define RX_TPA_END_CMP_V2 (0x1 << 0) 376 #define RX_TPA_END_CMP_V2 (0x1 << 0)
377 #define RX_TPA_END_CMP_ERRORS (0x7fff << 1) 377 #define RX_TPA_END_CMP_ERRORS (0x3 << 1)
378 #define RX_TPA_END_CMPL_ERRORS_SHIFT 1 378 #define RX_TPA_END_CMPL_ERRORS_SHIFT 1
379 379
380 u32 rx_tpa_end_cmp_start_opaque; 380 u32 rx_tpa_end_cmp_start_opaque;
381}; 381};
382 382
383#define TPA_END_ERRORS(rx_tpa_end_ext) \
384 ((rx_tpa_end_ext)->rx_tpa_end_cmp_errors_v2 & \
385 cpu_to_le32(RX_TPA_END_CMP_ERRORS))
386
383#define DB_IDX_MASK 0xffffff 387#define DB_IDX_MASK 0xffffff
384#define DB_IDX_VALID (0x1 << 26) 388#define DB_IDX_VALID (0x1 << 26)
385#define DB_IRQ_DIS (0x1 << 27) 389#define DB_IRQ_DIS (0x1 << 27)
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 38a5c6764bb5..53309f659951 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -2171,9 +2171,10 @@ static int cxgb_up(struct adapter *adap)
2171{ 2171{
2172 int err; 2172 int err;
2173 2173
2174 mutex_lock(&uld_mutex);
2174 err = setup_sge_queues(adap); 2175 err = setup_sge_queues(adap);
2175 if (err) 2176 if (err)
2176 goto out; 2177 goto rel_lock;
2177 err = setup_rss(adap); 2178 err = setup_rss(adap);
2178 if (err) 2179 if (err)
2179 goto freeq; 2180 goto freeq;
@@ -2196,23 +2197,28 @@ static int cxgb_up(struct adapter *adap)
2196 if (err) 2197 if (err)
2197 goto irq_err; 2198 goto irq_err;
2198 } 2199 }
2200
2199 enable_rx(adap); 2201 enable_rx(adap);
2200 t4_sge_start(adap); 2202 t4_sge_start(adap);
2201 t4_intr_enable(adap); 2203 t4_intr_enable(adap);
2202 adap->flags |= FULL_INIT_DONE; 2204 adap->flags |= FULL_INIT_DONE;
2205 mutex_unlock(&uld_mutex);
2206
2203 notify_ulds(adap, CXGB4_STATE_UP); 2207 notify_ulds(adap, CXGB4_STATE_UP);
2204#if IS_ENABLED(CONFIG_IPV6) 2208#if IS_ENABLED(CONFIG_IPV6)
2205 update_clip(adap); 2209 update_clip(adap);
2206#endif 2210#endif
2207 /* Initialize hash mac addr list*/ 2211 /* Initialize hash mac addr list*/
2208 INIT_LIST_HEAD(&adap->mac_hlist); 2212 INIT_LIST_HEAD(&adap->mac_hlist);
2209 out:
2210 return err; 2213 return err;
2214
2211 irq_err: 2215 irq_err:
2212 dev_err(adap->pdev_dev, "request_irq failed, err %d\n", err); 2216 dev_err(adap->pdev_dev, "request_irq failed, err %d\n", err);
2213 freeq: 2217 freeq:
2214 t4_free_sge_resources(adap); 2218 t4_free_sge_resources(adap);
2215 goto out; 2219 rel_lock:
2220 mutex_unlock(&uld_mutex);
2221 return err;
2216} 2222}
2217 2223
2218static void cxgb_down(struct adapter *adapter) 2224static void cxgb_down(struct adapter *adapter)
@@ -2771,6 +2777,9 @@ void t4_fatal_err(struct adapter *adap)
2771{ 2777{
2772 int port; 2778 int port;
2773 2779
2780 if (pci_channel_offline(adap->pdev))
2781 return;
2782
2774 /* Disable the SGE since ULDs are going to free resources that 2783 /* Disable the SGE since ULDs are going to free resources that
2775 * could be exposed to the adapter. RDMA MWs for example... 2784 * could be exposed to the adapter. RDMA MWs for example...
2776 */ 2785 */
@@ -3882,9 +3891,10 @@ static pci_ers_result_t eeh_err_detected(struct pci_dev *pdev,
3882 spin_lock(&adap->stats_lock); 3891 spin_lock(&adap->stats_lock);
3883 for_each_port(adap, i) { 3892 for_each_port(adap, i) {
3884 struct net_device *dev = adap->port[i]; 3893 struct net_device *dev = adap->port[i];
3885 3894 if (dev) {
3886 netif_device_detach(dev); 3895 netif_device_detach(dev);
3887 netif_carrier_off(dev); 3896 netif_carrier_off(dev);
3897 }
3888 } 3898 }
3889 spin_unlock(&adap->stats_lock); 3899 spin_unlock(&adap->stats_lock);
3890 disable_interrupts(adap); 3900 disable_interrupts(adap);
@@ -3963,12 +3973,13 @@ static void eeh_resume(struct pci_dev *pdev)
3963 rtnl_lock(); 3973 rtnl_lock();
3964 for_each_port(adap, i) { 3974 for_each_port(adap, i) {
3965 struct net_device *dev = adap->port[i]; 3975 struct net_device *dev = adap->port[i];
3966 3976 if (dev) {
3967 if (netif_running(dev)) { 3977 if (netif_running(dev)) {
3968 link_start(dev); 3978 link_start(dev);
3969 cxgb_set_rxmode(dev); 3979 cxgb_set_rxmode(dev);
3980 }
3981 netif_device_attach(dev);
3970 } 3982 }
3971 netif_device_attach(dev);
3972 } 3983 }
3973 rtnl_unlock(); 3984 rtnl_unlock();
3974} 3985}
@@ -4516,7 +4527,7 @@ static void dummy_setup(struct net_device *dev)
4516 /* Initialize the device structure. */ 4527 /* Initialize the device structure. */
4517 dev->netdev_ops = &cxgb4_mgmt_netdev_ops; 4528 dev->netdev_ops = &cxgb4_mgmt_netdev_ops;
4518 dev->ethtool_ops = &cxgb4_mgmt_ethtool_ops; 4529 dev->ethtool_ops = &cxgb4_mgmt_ethtool_ops;
4519 dev->destructor = free_netdev; 4530 dev->needs_free_netdev = true;
4520} 4531}
4521 4532
4522static int config_mgmt_dev(struct pci_dev *pdev) 4533static int config_mgmt_dev(struct pci_dev *pdev)
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
index aded42b96f6d..3a34aa629f7d 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
@@ -4557,8 +4557,13 @@ void t4_intr_enable(struct adapter *adapter)
4557 */ 4557 */
4558void t4_intr_disable(struct adapter *adapter) 4558void t4_intr_disable(struct adapter *adapter)
4559{ 4559{
4560 u32 whoami = t4_read_reg(adapter, PL_WHOAMI_A); 4560 u32 whoami, pf;
4561 u32 pf = CHELSIO_CHIP_VERSION(adapter->params.chip) <= CHELSIO_T5 ? 4561
4562 if (pci_channel_offline(adapter->pdev))
4563 return;
4564
4565 whoami = t4_read_reg(adapter, PL_WHOAMI_A);
4566 pf = CHELSIO_CHIP_VERSION(adapter->params.chip) <= CHELSIO_T5 ?
4562 SOURCEPF_G(whoami) : T6_SOURCEPF_G(whoami); 4567 SOURCEPF_G(whoami) : T6_SOURCEPF_G(whoami);
4563 4568
4564 t4_write_reg(adapter, MYPF_REG(PL_PF_INT_ENABLE_A), 0); 4569 t4_write_reg(adapter, MYPF_REG(PL_PF_INT_ENABLE_A), 0);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4fw_version.h b/drivers/net/ethernet/chelsio/cxgb4/t4fw_version.h
index 3549d3876278..f2d623a7aee0 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4fw_version.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4fw_version.h
@@ -37,7 +37,7 @@
37 37
38#define T4FW_VERSION_MAJOR 0x01 38#define T4FW_VERSION_MAJOR 0x01
39#define T4FW_VERSION_MINOR 0x10 39#define T4FW_VERSION_MINOR 0x10
40#define T4FW_VERSION_MICRO 0x2B 40#define T4FW_VERSION_MICRO 0x2D
41#define T4FW_VERSION_BUILD 0x00 41#define T4FW_VERSION_BUILD 0x00
42 42
43#define T4FW_MIN_VERSION_MAJOR 0x01 43#define T4FW_MIN_VERSION_MAJOR 0x01
@@ -46,7 +46,7 @@
46 46
47#define T5FW_VERSION_MAJOR 0x01 47#define T5FW_VERSION_MAJOR 0x01
48#define T5FW_VERSION_MINOR 0x10 48#define T5FW_VERSION_MINOR 0x10
49#define T5FW_VERSION_MICRO 0x2B 49#define T5FW_VERSION_MICRO 0x2D
50#define T5FW_VERSION_BUILD 0x00 50#define T5FW_VERSION_BUILD 0x00
51 51
52#define T5FW_MIN_VERSION_MAJOR 0x00 52#define T5FW_MIN_VERSION_MAJOR 0x00
@@ -55,7 +55,7 @@
55 55
56#define T6FW_VERSION_MAJOR 0x01 56#define T6FW_VERSION_MAJOR 0x01
57#define T6FW_VERSION_MINOR 0x10 57#define T6FW_VERSION_MINOR 0x10
58#define T6FW_VERSION_MICRO 0x2B 58#define T6FW_VERSION_MICRO 0x2D
59#define T6FW_VERSION_BUILD 0x00 59#define T6FW_VERSION_BUILD 0x00
60 60
61#define T6FW_MIN_VERSION_MAJOR 0x00 61#define T6FW_MIN_VERSION_MAJOR 0x00
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index f3a09ab55900..4eee18ce9be4 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -5078,9 +5078,11 @@ static netdev_features_t be_features_check(struct sk_buff *skb,
5078 struct be_adapter *adapter = netdev_priv(dev); 5078 struct be_adapter *adapter = netdev_priv(dev);
5079 u8 l4_hdr = 0; 5079 u8 l4_hdr = 0;
5080 5080
5081 /* The code below restricts offload features for some tunneled packets. 5081 /* The code below restricts offload features for some tunneled and
5082 * Q-in-Q packets.
5082 * Offload features for normal (non tunnel) packets are unchanged. 5083 * Offload features for normal (non tunnel) packets are unchanged.
5083 */ 5084 */
5085 features = vlan_features_check(skb, features);
5084 if (!skb->encapsulation || 5086 if (!skb->encapsulation ||
5085 !(adapter->flags & BE_FLAGS_VXLAN_OFFLOADS)) 5087 !(adapter->flags & BE_FLAGS_VXLAN_OFFLOADS))
5086 return features; 5088 return features;
diff --git a/drivers/net/ethernet/ethoc.c b/drivers/net/ethernet/ethoc.c
index e863ba74d005..8bb0db990c8f 100644
--- a/drivers/net/ethernet/ethoc.c
+++ b/drivers/net/ethernet/ethoc.c
@@ -739,6 +739,8 @@ static int ethoc_open(struct net_device *dev)
739 if (ret) 739 if (ret)
740 return ret; 740 return ret;
741 741
742 napi_enable(&priv->napi);
743
742 ethoc_init_ring(priv, dev->mem_start); 744 ethoc_init_ring(priv, dev->mem_start);
743 ethoc_reset(priv); 745 ethoc_reset(priv);
744 746
@@ -754,7 +756,6 @@ static int ethoc_open(struct net_device *dev)
754 priv->old_duplex = -1; 756 priv->old_duplex = -1;
755 757
756 phy_start(dev->phydev); 758 phy_start(dev->phydev);
757 napi_enable(&priv->napi);
758 759
759 if (netif_msg_ifup(priv)) { 760 if (netif_msg_ifup(priv)) {
760 dev_info(&dev->dev, "I/O: %08lx Memory: %08lx-%08lx\n", 761 dev_info(&dev->dev, "I/O: %08lx Memory: %08lx-%08lx\n",
diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
index 9a520e4f0df9..290ad0563320 100644
--- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
+++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
@@ -2647,7 +2647,7 @@ static int dpaa_eth_probe(struct platform_device *pdev)
2647 priv->buf_layout[TX].priv_data_size = DPAA_TX_PRIV_DATA_SIZE; /* Tx */ 2647 priv->buf_layout[TX].priv_data_size = DPAA_TX_PRIV_DATA_SIZE; /* Tx */
2648 2648
2649 /* device used for DMA mapping */ 2649 /* device used for DMA mapping */
2650 arch_setup_dma_ops(dev, 0, 0, NULL, false); 2650 set_dma_ops(dev, get_dma_ops(&pdev->dev));
2651 err = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(40)); 2651 err = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(40));
2652 if (err) { 2652 if (err) {
2653 dev_err(dev, "dma_coerce_mask_and_coherent() failed\n"); 2653 dev_err(dev, "dma_coerce_mask_and_coherent() failed\n");
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 56a563f90b0b..f7c8649fd28f 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -3192,7 +3192,7 @@ static int fec_reset_phy(struct platform_device *pdev)
3192{ 3192{
3193 int err, phy_reset; 3193 int err, phy_reset;
3194 bool active_high = false; 3194 bool active_high = false;
3195 int msec = 1; 3195 int msec = 1, phy_post_delay = 0;
3196 struct device_node *np = pdev->dev.of_node; 3196 struct device_node *np = pdev->dev.of_node;
3197 3197
3198 if (!np) 3198 if (!np)
@@ -3209,6 +3209,11 @@ static int fec_reset_phy(struct platform_device *pdev)
3209 else if (!gpio_is_valid(phy_reset)) 3209 else if (!gpio_is_valid(phy_reset))
3210 return 0; 3210 return 0;
3211 3211
3212 err = of_property_read_u32(np, "phy-reset-post-delay", &phy_post_delay);
3213 /* valid reset duration should be less than 1s */
3214 if (!err && phy_post_delay > 1000)
3215 return -EINVAL;
3216
3212 active_high = of_property_read_bool(np, "phy-reset-active-high"); 3217 active_high = of_property_read_bool(np, "phy-reset-active-high");
3213 3218
3214 err = devm_gpio_request_one(&pdev->dev, phy_reset, 3219 err = devm_gpio_request_one(&pdev->dev, phy_reset,
@@ -3226,6 +3231,15 @@ static int fec_reset_phy(struct platform_device *pdev)
3226 3231
3227 gpio_set_value_cansleep(phy_reset, !active_high); 3232 gpio_set_value_cansleep(phy_reset, !active_high);
3228 3233
3234 if (!phy_post_delay)
3235 return 0;
3236
3237 if (phy_post_delay > 20)
3238 msleep(phy_post_delay);
3239 else
3240 usleep_range(phy_post_delay * 1000,
3241 phy_post_delay * 1000 + 1000);
3242
3229 return 0; 3243 return 0;
3230} 3244}
3231#else /* CONFIG_OF */ 3245#else /* CONFIG_OF */
diff --git a/drivers/net/ethernet/freescale/fman/Kconfig b/drivers/net/ethernet/freescale/fman/Kconfig
index dc0850b3b517..8870a9a798ca 100644
--- a/drivers/net/ethernet/freescale/fman/Kconfig
+++ b/drivers/net/ethernet/freescale/fman/Kconfig
@@ -2,6 +2,7 @@ config FSL_FMAN
2 tristate "FMan support" 2 tristate "FMan support"
3 depends on FSL_SOC || ARCH_LAYERSCAPE || COMPILE_TEST 3 depends on FSL_SOC || ARCH_LAYERSCAPE || COMPILE_TEST
4 select GENERIC_ALLOCATOR 4 select GENERIC_ALLOCATOR
5 depends on HAS_DMA
5 select PHYLIB 6 select PHYLIB
6 default n 7 default n
7 help 8 help
diff --git a/drivers/net/ethernet/freescale/fman/mac.c b/drivers/net/ethernet/freescale/fman/mac.c
index 0b31f8502ada..6e67d22fd0d5 100644
--- a/drivers/net/ethernet/freescale/fman/mac.c
+++ b/drivers/net/ethernet/freescale/fman/mac.c
@@ -623,6 +623,8 @@ static struct platform_device *dpaa_eth_add_device(int fman_id,
623 goto no_mem; 623 goto no_mem;
624 } 624 }
625 625
626 set_dma_ops(&pdev->dev, get_dma_ops(priv->dev));
627
626 ret = platform_device_add_data(pdev, &data, sizeof(data)); 628 ret = platform_device_add_data(pdev, &data, sizeof(data));
627 if (ret) 629 if (ret)
628 goto err; 630 goto err;
diff --git a/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
index 446c7b374ff5..a10de1e9c157 100644
--- a/drivers/net/ethernet/freescale/fsl_pq_mdio.c
+++ b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
@@ -381,7 +381,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
381{ 381{
382 const struct of_device_id *id = 382 const struct of_device_id *id =
383 of_match_device(fsl_pq_mdio_match, &pdev->dev); 383 of_match_device(fsl_pq_mdio_match, &pdev->dev);
384 const struct fsl_pq_mdio_data *data = id->data; 384 const struct fsl_pq_mdio_data *data;
385 struct device_node *np = pdev->dev.of_node; 385 struct device_node *np = pdev->dev.of_node;
386 struct resource res; 386 struct resource res;
387 struct device_node *tbi; 387 struct device_node *tbi;
@@ -389,6 +389,13 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
389 struct mii_bus *new_bus; 389 struct mii_bus *new_bus;
390 int err; 390 int err;
391 391
392 if (!id) {
393 dev_err(&pdev->dev, "Failed to match device\n");
394 return -ENODEV;
395 }
396
397 data = id->data;
398
392 dev_dbg(&pdev->dev, "found %s compatible node\n", id->compatible); 399 dev_dbg(&pdev->dev, "found %s compatible node\n", id->compatible);
393 400
394 new_bus = mdiobus_alloc_size(sizeof(*priv)); 401 new_bus = mdiobus_alloc_size(sizeof(*priv));
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
index b8fab149690f..e95795b3c841 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
@@ -288,9 +288,15 @@ static int hns_nic_config_phy_loopback(struct phy_device *phy_dev, u8 en)
288 288
289 /* Force 1000M Link, Default is 0x0200 */ 289 /* Force 1000M Link, Default is 0x0200 */
290 phy_write(phy_dev, 7, 0x20C); 290 phy_write(phy_dev, 7, 0x20C);
291 phy_write(phy_dev, HNS_PHY_PAGE_REG, 0);
292 291
293 /* Enable PHY loop-back */ 292 /* Powerup Fiber */
293 phy_write(phy_dev, HNS_PHY_PAGE_REG, 1);
294 val = phy_read(phy_dev, COPPER_CONTROL_REG);
295 val &= ~PHY_POWER_DOWN;
296 phy_write(phy_dev, COPPER_CONTROL_REG, val);
297
298 /* Enable Phy Loopback */
299 phy_write(phy_dev, HNS_PHY_PAGE_REG, 0);
294 val = phy_read(phy_dev, COPPER_CONTROL_REG); 300 val = phy_read(phy_dev, COPPER_CONTROL_REG);
295 val |= PHY_LOOP_BACK; 301 val |= PHY_LOOP_BACK;
296 val &= ~PHY_POWER_DOWN; 302 val &= ~PHY_POWER_DOWN;
@@ -299,6 +305,12 @@ static int hns_nic_config_phy_loopback(struct phy_device *phy_dev, u8 en)
299 phy_write(phy_dev, HNS_PHY_PAGE_REG, 0xFA); 305 phy_write(phy_dev, HNS_PHY_PAGE_REG, 0xFA);
300 phy_write(phy_dev, 1, 0x400); 306 phy_write(phy_dev, 1, 0x400);
301 phy_write(phy_dev, 7, 0x200); 307 phy_write(phy_dev, 7, 0x200);
308
309 phy_write(phy_dev, HNS_PHY_PAGE_REG, 1);
310 val = phy_read(phy_dev, COPPER_CONTROL_REG);
311 val |= PHY_POWER_DOWN;
312 phy_write(phy_dev, COPPER_CONTROL_REG, val);
313
302 phy_write(phy_dev, HNS_PHY_PAGE_REG, 0); 314 phy_write(phy_dev, HNS_PHY_PAGE_REG, 0);
303 phy_write(phy_dev, 9, 0xF00); 315 phy_write(phy_dev, 9, 0xF00);
304 316
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index 508923f39ccf..259e69a52ec5 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -343,6 +343,7 @@ static int emac_reset(struct emac_instance *dev)
343{ 343{
344 struct emac_regs __iomem *p = dev->emacp; 344 struct emac_regs __iomem *p = dev->emacp;
345 int n = 20; 345 int n = 20;
346 bool __maybe_unused try_internal_clock = false;
346 347
347 DBG(dev, "reset" NL); 348 DBG(dev, "reset" NL);
348 349
@@ -355,6 +356,7 @@ static int emac_reset(struct emac_instance *dev)
355 } 356 }
356 357
357#ifdef CONFIG_PPC_DCR_NATIVE 358#ifdef CONFIG_PPC_DCR_NATIVE
359do_retry:
358 /* 360 /*
359 * PPC460EX/GT Embedded Processor Advanced User's Manual 361 * PPC460EX/GT Embedded Processor Advanced User's Manual
360 * section 28.10.1 Mode Register 0 (EMACx_MR0) states: 362 * section 28.10.1 Mode Register 0 (EMACx_MR0) states:
@@ -362,10 +364,19 @@ static int emac_reset(struct emac_instance *dev)
362 * of the EMAC. If none is present, select the internal clock 364 * of the EMAC. If none is present, select the internal clock
363 * (SDR0_ETH_CFG[EMACx_PHY_CLK] = 1). 365 * (SDR0_ETH_CFG[EMACx_PHY_CLK] = 1).
364 * After a soft reset, select the external clock. 366 * After a soft reset, select the external clock.
367 *
368 * The AR8035-A PHY Meraki MR24 does not provide a TX Clk if the
369 * ethernet cable is not attached. This causes the reset to timeout
370 * and the PHY detection code in emac_init_phy() is unable to
371 * communicate and detect the AR8035-A PHY. As a result, the emac
372 * driver bails out early and the user has no ethernet.
373 * In order to stay compatible with existing configurations, the
374 * driver will temporarily switch to the internal clock, after
375 * the first reset fails.
365 */ 376 */
366 if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX)) { 377 if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX)) {
367 if (dev->phy_address == 0xffffffff && 378 if (try_internal_clock || (dev->phy_address == 0xffffffff &&
368 dev->phy_map == 0xffffffff) { 379 dev->phy_map == 0xffffffff)) {
369 /* No PHY: select internal loop clock before reset */ 380 /* No PHY: select internal loop clock before reset */
370 dcri_clrset(SDR0, SDR0_ETH_CFG, 381 dcri_clrset(SDR0, SDR0_ETH_CFG,
371 0, SDR0_ETH_CFG_ECS << dev->cell_index); 382 0, SDR0_ETH_CFG_ECS << dev->cell_index);
@@ -383,8 +394,15 @@ static int emac_reset(struct emac_instance *dev)
383 394
384#ifdef CONFIG_PPC_DCR_NATIVE 395#ifdef CONFIG_PPC_DCR_NATIVE
385 if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX)) { 396 if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX)) {
386 if (dev->phy_address == 0xffffffff && 397 if (!n && !try_internal_clock) {
387 dev->phy_map == 0xffffffff) { 398 /* first attempt has timed out. */
399 n = 20;
400 try_internal_clock = true;
401 goto do_retry;
402 }
403
404 if (try_internal_clock || (dev->phy_address == 0xffffffff &&
405 dev->phy_map == 0xffffffff)) {
388 /* No PHY: restore external clock source after reset */ 406 /* No PHY: restore external clock source after reset */
389 dcri_clrset(SDR0, SDR0_ETH_CFG, 407 dcri_clrset(SDR0, SDR0_ETH_CFG,
390 SDR0_ETH_CFG_ECS << dev->cell_index, 0); 408 SDR0_ETH_CFG_ECS << dev->cell_index, 0);
@@ -2460,20 +2478,24 @@ static int emac_mii_bus_reset(struct mii_bus *bus)
2460 return emac_reset(dev); 2478 return emac_reset(dev);
2461} 2479}
2462 2480
2481static int emac_mdio_phy_start_aneg(struct mii_phy *phy,
2482 struct phy_device *phy_dev)
2483{
2484 phy_dev->autoneg = phy->autoneg;
2485 phy_dev->speed = phy->speed;
2486 phy_dev->duplex = phy->duplex;
2487 phy_dev->advertising = phy->advertising;
2488 return phy_start_aneg(phy_dev);
2489}
2490
2463static int emac_mdio_setup_aneg(struct mii_phy *phy, u32 advertise) 2491static int emac_mdio_setup_aneg(struct mii_phy *phy, u32 advertise)
2464{ 2492{
2465 struct net_device *ndev = phy->dev; 2493 struct net_device *ndev = phy->dev;
2466 struct emac_instance *dev = netdev_priv(ndev); 2494 struct emac_instance *dev = netdev_priv(ndev);
2467 2495
2468 dev->phy.autoneg = AUTONEG_ENABLE;
2469 dev->phy.speed = SPEED_1000;
2470 dev->phy.duplex = DUPLEX_FULL;
2471 dev->phy.advertising = advertise;
2472 phy->autoneg = AUTONEG_ENABLE; 2496 phy->autoneg = AUTONEG_ENABLE;
2473 phy->speed = dev->phy.speed;
2474 phy->duplex = dev->phy.duplex;
2475 phy->advertising = advertise; 2497 phy->advertising = advertise;
2476 return phy_start_aneg(dev->phy_dev); 2498 return emac_mdio_phy_start_aneg(phy, dev->phy_dev);
2477} 2499}
2478 2500
2479static int emac_mdio_setup_forced(struct mii_phy *phy, int speed, int fd) 2501static int emac_mdio_setup_forced(struct mii_phy *phy, int speed, int fd)
@@ -2481,13 +2503,10 @@ static int emac_mdio_setup_forced(struct mii_phy *phy, int speed, int fd)
2481 struct net_device *ndev = phy->dev; 2503 struct net_device *ndev = phy->dev;
2482 struct emac_instance *dev = netdev_priv(ndev); 2504 struct emac_instance *dev = netdev_priv(ndev);
2483 2505
2484 dev->phy.autoneg = AUTONEG_DISABLE;
2485 dev->phy.speed = speed;
2486 dev->phy.duplex = fd;
2487 phy->autoneg = AUTONEG_DISABLE; 2506 phy->autoneg = AUTONEG_DISABLE;
2488 phy->speed = speed; 2507 phy->speed = speed;
2489 phy->duplex = fd; 2508 phy->duplex = fd;
2490 return phy_start_aneg(dev->phy_dev); 2509 return emac_mdio_phy_start_aneg(phy, dev->phy_dev);
2491} 2510}
2492 2511
2493static int emac_mdio_poll_link(struct mii_phy *phy) 2512static int emac_mdio_poll_link(struct mii_phy *phy)
@@ -2509,16 +2528,17 @@ static int emac_mdio_read_link(struct mii_phy *phy)
2509{ 2528{
2510 struct net_device *ndev = phy->dev; 2529 struct net_device *ndev = phy->dev;
2511 struct emac_instance *dev = netdev_priv(ndev); 2530 struct emac_instance *dev = netdev_priv(ndev);
2531 struct phy_device *phy_dev = dev->phy_dev;
2512 int res; 2532 int res;
2513 2533
2514 res = phy_read_status(dev->phy_dev); 2534 res = phy_read_status(phy_dev);
2515 if (res) 2535 if (res)
2516 return res; 2536 return res;
2517 2537
2518 dev->phy.speed = phy->speed; 2538 phy->speed = phy_dev->speed;
2519 dev->phy.duplex = phy->duplex; 2539 phy->duplex = phy_dev->duplex;
2520 dev->phy.pause = phy->pause; 2540 phy->pause = phy_dev->pause;
2521 dev->phy.asym_pause = phy->asym_pause; 2541 phy->asym_pause = phy_dev->asym_pause;
2522 return 0; 2542 return 0;
2523} 2543}
2524 2544
@@ -2528,13 +2548,6 @@ static int emac_mdio_init_phy(struct mii_phy *phy)
2528 struct emac_instance *dev = netdev_priv(ndev); 2548 struct emac_instance *dev = netdev_priv(ndev);
2529 2549
2530 phy_start(dev->phy_dev); 2550 phy_start(dev->phy_dev);
2531 dev->phy.autoneg = phy->autoneg;
2532 dev->phy.speed = phy->speed;
2533 dev->phy.duplex = phy->duplex;
2534 dev->phy.advertising = phy->advertising;
2535 dev->phy.pause = phy->pause;
2536 dev->phy.asym_pause = phy->asym_pause;
2537
2538 return phy_init_hw(dev->phy_dev); 2551 return phy_init_hw(dev->phy_dev);
2539} 2552}
2540 2553
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 4f2d329dba99..c0fbeb387db4 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -81,7 +81,7 @@
81static const char ibmvnic_driver_name[] = "ibmvnic"; 81static const char ibmvnic_driver_name[] = "ibmvnic";
82static const char ibmvnic_driver_string[] = "IBM System i/p Virtual NIC Driver"; 82static const char ibmvnic_driver_string[] = "IBM System i/p Virtual NIC Driver";
83 83
84MODULE_AUTHOR("Santiago Leon <santi_leon@yahoo.com>"); 84MODULE_AUTHOR("Santiago Leon");
85MODULE_DESCRIPTION("IBM System i/p Virtual NIC Driver"); 85MODULE_DESCRIPTION("IBM System i/p Virtual NIC Driver");
86MODULE_LICENSE("GPL"); 86MODULE_LICENSE("GPL");
87MODULE_VERSION(IBMVNIC_DRIVER_VERSION); 87MODULE_VERSION(IBMVNIC_DRIVER_VERSION);
@@ -1468,6 +1468,11 @@ static void ibmvnic_netpoll_controller(struct net_device *dev)
1468} 1468}
1469#endif 1469#endif
1470 1470
1471static int ibmvnic_change_mtu(struct net_device *netdev, int new_mtu)
1472{
1473 return -EOPNOTSUPP;
1474}
1475
1471static const struct net_device_ops ibmvnic_netdev_ops = { 1476static const struct net_device_ops ibmvnic_netdev_ops = {
1472 .ndo_open = ibmvnic_open, 1477 .ndo_open = ibmvnic_open,
1473 .ndo_stop = ibmvnic_close, 1478 .ndo_stop = ibmvnic_close,
@@ -1479,6 +1484,7 @@ static const struct net_device_ops ibmvnic_netdev_ops = {
1479#ifdef CONFIG_NET_POLL_CONTROLLER 1484#ifdef CONFIG_NET_POLL_CONTROLLER
1480 .ndo_poll_controller = ibmvnic_netpoll_controller, 1485 .ndo_poll_controller = ibmvnic_netpoll_controller,
1481#endif 1486#endif
1487 .ndo_change_mtu = ibmvnic_change_mtu,
1482}; 1488};
1483 1489
1484/* ethtool functions */ 1490/* ethtool functions */
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index cdde3cc28fb5..44d9610f7a15 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -399,6 +399,7 @@ struct i40e_pf {
399#define I40E_FLAG_RX_CSUM_ENABLED BIT_ULL(1) 399#define I40E_FLAG_RX_CSUM_ENABLED BIT_ULL(1)
400#define I40E_FLAG_MSI_ENABLED BIT_ULL(2) 400#define I40E_FLAG_MSI_ENABLED BIT_ULL(2)
401#define I40E_FLAG_MSIX_ENABLED BIT_ULL(3) 401#define I40E_FLAG_MSIX_ENABLED BIT_ULL(3)
402#define I40E_FLAG_HW_ATR_EVICT_ENABLED BIT_ULL(4)
402#define I40E_FLAG_RSS_ENABLED BIT_ULL(6) 403#define I40E_FLAG_RSS_ENABLED BIT_ULL(6)
403#define I40E_FLAG_VMDQ_ENABLED BIT_ULL(7) 404#define I40E_FLAG_VMDQ_ENABLED BIT_ULL(7)
404#define I40E_FLAG_IWARP_ENABLED BIT_ULL(10) 405#define I40E_FLAG_IWARP_ENABLED BIT_ULL(10)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
index 7a8eb486b9ea..894c8e57ba00 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
@@ -224,7 +224,7 @@ static const struct i40e_priv_flags i40e_gstrings_priv_flags[] = {
224 I40E_PRIV_FLAG("LinkPolling", I40E_FLAG_LINK_POLLING_ENABLED, 0), 224 I40E_PRIV_FLAG("LinkPolling", I40E_FLAG_LINK_POLLING_ENABLED, 0),
225 I40E_PRIV_FLAG("flow-director-atr", I40E_FLAG_FD_ATR_ENABLED, 0), 225 I40E_PRIV_FLAG("flow-director-atr", I40E_FLAG_FD_ATR_ENABLED, 0),
226 I40E_PRIV_FLAG("veb-stats", I40E_FLAG_VEB_STATS_ENABLED, 0), 226 I40E_PRIV_FLAG("veb-stats", I40E_FLAG_VEB_STATS_ENABLED, 0),
227 I40E_PRIV_FLAG("hw-atr-eviction", I40E_FLAG_HW_ATR_EVICT_CAPABLE, 0), 227 I40E_PRIV_FLAG("hw-atr-eviction", I40E_FLAG_HW_ATR_EVICT_ENABLED, 0),
228 I40E_PRIV_FLAG("legacy-rx", I40E_FLAG_LEGACY_RX, 0), 228 I40E_PRIV_FLAG("legacy-rx", I40E_FLAG_LEGACY_RX, 0),
229}; 229};
230 230
@@ -4092,7 +4092,7 @@ flags_complete:
4092 4092
4093 /* Only allow ATR evict on hardware that is capable of handling it */ 4093 /* Only allow ATR evict on hardware that is capable of handling it */
4094 if (pf->flags & I40E_FLAG_HW_ATR_EVICT_CAPABLE) 4094 if (pf->flags & I40E_FLAG_HW_ATR_EVICT_CAPABLE)
4095 pf->flags &= ~I40E_FLAG_HW_ATR_EVICT_CAPABLE; 4095 pf->flags &= ~I40E_FLAG_HW_ATR_EVICT_ENABLED;
4096 4096
4097 if (changed_flags & I40E_FLAG_TRUE_PROMISC_SUPPORT) { 4097 if (changed_flags & I40E_FLAG_TRUE_PROMISC_SUPPORT) {
4098 u16 sw_flags = 0, valid_flags = 0; 4098 u16 sw_flags = 0, valid_flags = 0;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index d5c9c9e06ff5..a7a4b28b4144 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -295,7 +295,7 @@ struct i40e_vsi *i40e_find_vsi_from_id(struct i40e_pf *pf, u16 id)
295 **/ 295 **/
296void i40e_service_event_schedule(struct i40e_pf *pf) 296void i40e_service_event_schedule(struct i40e_pf *pf)
297{ 297{
298 if (!test_bit(__I40E_VSI_DOWN, pf->state) && 298 if (!test_bit(__I40E_DOWN, pf->state) &&
299 !test_bit(__I40E_RESET_RECOVERY_PENDING, pf->state)) 299 !test_bit(__I40E_RESET_RECOVERY_PENDING, pf->state))
300 queue_work(i40e_wq, &pf->service_task); 300 queue_work(i40e_wq, &pf->service_task);
301} 301}
@@ -3611,7 +3611,7 @@ static irqreturn_t i40e_intr(int irq, void *data)
3611 * this is not a performance path and napi_schedule() 3611 * this is not a performance path and napi_schedule()
3612 * can deal with rescheduling. 3612 * can deal with rescheduling.
3613 */ 3613 */
3614 if (!test_bit(__I40E_VSI_DOWN, pf->state)) 3614 if (!test_bit(__I40E_DOWN, pf->state))
3615 napi_schedule_irqoff(&q_vector->napi); 3615 napi_schedule_irqoff(&q_vector->napi);
3616 } 3616 }
3617 3617
@@ -3687,7 +3687,7 @@ static irqreturn_t i40e_intr(int irq, void *data)
3687enable_intr: 3687enable_intr:
3688 /* re-enable interrupt causes */ 3688 /* re-enable interrupt causes */
3689 wr32(hw, I40E_PFINT_ICR0_ENA, ena_mask); 3689 wr32(hw, I40E_PFINT_ICR0_ENA, ena_mask);
3690 if (!test_bit(__I40E_VSI_DOWN, pf->state)) { 3690 if (!test_bit(__I40E_DOWN, pf->state)) {
3691 i40e_service_event_schedule(pf); 3691 i40e_service_event_schedule(pf);
3692 i40e_irq_dynamic_enable_icr0(pf, false); 3692 i40e_irq_dynamic_enable_icr0(pf, false);
3693 } 3693 }
@@ -6203,7 +6203,7 @@ static void i40e_fdir_reinit_subtask(struct i40e_pf *pf)
6203{ 6203{
6204 6204
6205 /* if interface is down do nothing */ 6205 /* if interface is down do nothing */
6206 if (test_bit(__I40E_VSI_DOWN, pf->state)) 6206 if (test_bit(__I40E_DOWN, pf->state))
6207 return; 6207 return;
6208 6208
6209 if (test_bit(__I40E_FD_FLUSH_REQUESTED, pf->state)) 6209 if (test_bit(__I40E_FD_FLUSH_REQUESTED, pf->state))
@@ -6344,7 +6344,7 @@ static void i40e_watchdog_subtask(struct i40e_pf *pf)
6344 int i; 6344 int i;
6345 6345
6346 /* if interface is down do nothing */ 6346 /* if interface is down do nothing */
6347 if (test_bit(__I40E_VSI_DOWN, pf->state) || 6347 if (test_bit(__I40E_DOWN, pf->state) ||
6348 test_bit(__I40E_CONFIG_BUSY, pf->state)) 6348 test_bit(__I40E_CONFIG_BUSY, pf->state))
6349 return; 6349 return;
6350 6350
@@ -6399,9 +6399,9 @@ static void i40e_reset_subtask(struct i40e_pf *pf)
6399 reset_flags |= BIT(__I40E_GLOBAL_RESET_REQUESTED); 6399 reset_flags |= BIT(__I40E_GLOBAL_RESET_REQUESTED);
6400 clear_bit(__I40E_GLOBAL_RESET_REQUESTED, pf->state); 6400 clear_bit(__I40E_GLOBAL_RESET_REQUESTED, pf->state);
6401 } 6401 }
6402 if (test_bit(__I40E_VSI_DOWN_REQUESTED, pf->state)) { 6402 if (test_bit(__I40E_DOWN_REQUESTED, pf->state)) {
6403 reset_flags |= BIT(__I40E_VSI_DOWN_REQUESTED); 6403 reset_flags |= BIT(__I40E_DOWN_REQUESTED);
6404 clear_bit(__I40E_VSI_DOWN_REQUESTED, pf->state); 6404 clear_bit(__I40E_DOWN_REQUESTED, pf->state);
6405 } 6405 }
6406 6406
6407 /* If there's a recovery already waiting, it takes 6407 /* If there's a recovery already waiting, it takes
@@ -6415,7 +6415,7 @@ static void i40e_reset_subtask(struct i40e_pf *pf)
6415 6415
6416 /* If we're already down or resetting, just bail */ 6416 /* If we're already down or resetting, just bail */
6417 if (reset_flags && 6417 if (reset_flags &&
6418 !test_bit(__I40E_VSI_DOWN, pf->state) && 6418 !test_bit(__I40E_DOWN, pf->state) &&
6419 !test_bit(__I40E_CONFIG_BUSY, pf->state)) { 6419 !test_bit(__I40E_CONFIG_BUSY, pf->state)) {
6420 rtnl_lock(); 6420 rtnl_lock();
6421 i40e_do_reset(pf, reset_flags, true); 6421 i40e_do_reset(pf, reset_flags, true);
@@ -7002,7 +7002,7 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired)
7002 u32 val; 7002 u32 val;
7003 int v; 7003 int v;
7004 7004
7005 if (test_bit(__I40E_VSI_DOWN, pf->state)) 7005 if (test_bit(__I40E_DOWN, pf->state))
7006 goto clear_recovery; 7006 goto clear_recovery;
7007 dev_dbg(&pf->pdev->dev, "Rebuilding internal switch\n"); 7007 dev_dbg(&pf->pdev->dev, "Rebuilding internal switch\n");
7008 7008
@@ -8821,11 +8821,12 @@ static int i40e_sw_init(struct i40e_pf *pf)
8821 (pf->hw.aq.api_min_ver > 4))) { 8821 (pf->hw.aq.api_min_ver > 4))) {
8822 /* Supported in FW API version higher than 1.4 */ 8822 /* Supported in FW API version higher than 1.4 */
8823 pf->flags |= I40E_FLAG_GENEVE_OFFLOAD_CAPABLE; 8823 pf->flags |= I40E_FLAG_GENEVE_OFFLOAD_CAPABLE;
8824 pf->flags = I40E_FLAG_HW_ATR_EVICT_CAPABLE;
8825 } else {
8826 pf->flags = I40E_FLAG_HW_ATR_EVICT_CAPABLE;
8827 } 8824 }
8828 8825
8826 /* Enable HW ATR eviction if possible */
8827 if (pf->flags & I40E_FLAG_HW_ATR_EVICT_CAPABLE)
8828 pf->flags |= I40E_FLAG_HW_ATR_EVICT_ENABLED;
8829
8829 pf->eeprom_version = 0xDEAD; 8830 pf->eeprom_version = 0xDEAD;
8830 pf->lan_veb = I40E_NO_VEB; 8831 pf->lan_veb = I40E_NO_VEB;
8831 pf->lan_vsi = I40E_NO_VSI; 8832 pf->lan_vsi = I40E_NO_VSI;
@@ -9767,7 +9768,7 @@ int i40e_vsi_release(struct i40e_vsi *vsi)
9767 return -ENODEV; 9768 return -ENODEV;
9768 } 9769 }
9769 if (vsi == pf->vsi[pf->lan_vsi] && 9770 if (vsi == pf->vsi[pf->lan_vsi] &&
9770 !test_bit(__I40E_VSI_DOWN, pf->state)) { 9771 !test_bit(__I40E_DOWN, pf->state)) {
9771 dev_info(&pf->pdev->dev, "Can't remove PF VSI\n"); 9772 dev_info(&pf->pdev->dev, "Can't remove PF VSI\n");
9772 return -ENODEV; 9773 return -ENODEV;
9773 } 9774 }
@@ -11003,7 +11004,7 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
11003 } 11004 }
11004 pf->next_vsi = 0; 11005 pf->next_vsi = 0;
11005 pf->pdev = pdev; 11006 pf->pdev = pdev;
11006 set_bit(__I40E_VSI_DOWN, pf->state); 11007 set_bit(__I40E_DOWN, pf->state);
11007 11008
11008 hw = &pf->hw; 11009 hw = &pf->hw;
11009 hw->back = pf; 11010 hw->back = pf;
@@ -11293,7 +11294,7 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
11293 * before setting up the misc vector or we get a race and the vector 11294 * before setting up the misc vector or we get a race and the vector
11294 * ends up disabled forever. 11295 * ends up disabled forever.
11295 */ 11296 */
11296 clear_bit(__I40E_VSI_DOWN, pf->state); 11297 clear_bit(__I40E_DOWN, pf->state);
11297 11298
11298 /* In case of MSIX we are going to setup the misc vector right here 11299 /* In case of MSIX we are going to setup the misc vector right here
11299 * to handle admin queue events etc. In case of legacy and MSI 11300 * to handle admin queue events etc. In case of legacy and MSI
@@ -11448,7 +11449,7 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
11448 11449
11449 /* Unwind what we've done if something failed in the setup */ 11450 /* Unwind what we've done if something failed in the setup */
11450err_vsis: 11451err_vsis:
11451 set_bit(__I40E_VSI_DOWN, pf->state); 11452 set_bit(__I40E_DOWN, pf->state);
11452 i40e_clear_interrupt_scheme(pf); 11453 i40e_clear_interrupt_scheme(pf);
11453 kfree(pf->vsi); 11454 kfree(pf->vsi);
11454err_switch_setup: 11455err_switch_setup:
@@ -11500,7 +11501,7 @@ static void i40e_remove(struct pci_dev *pdev)
11500 11501
11501 /* no more scheduling of any task */ 11502 /* no more scheduling of any task */
11502 set_bit(__I40E_SUSPENDED, pf->state); 11503 set_bit(__I40E_SUSPENDED, pf->state);
11503 set_bit(__I40E_VSI_DOWN, pf->state); 11504 set_bit(__I40E_DOWN, pf->state);
11504 if (pf->service_timer.data) 11505 if (pf->service_timer.data)
11505 del_timer_sync(&pf->service_timer); 11506 del_timer_sync(&pf->service_timer);
11506 if (pf->service_task.func) 11507 if (pf->service_task.func)
@@ -11740,7 +11741,7 @@ static void i40e_shutdown(struct pci_dev *pdev)
11740 struct i40e_hw *hw = &pf->hw; 11741 struct i40e_hw *hw = &pf->hw;
11741 11742
11742 set_bit(__I40E_SUSPENDED, pf->state); 11743 set_bit(__I40E_SUSPENDED, pf->state);
11743 set_bit(__I40E_VSI_DOWN, pf->state); 11744 set_bit(__I40E_DOWN, pf->state);
11744 rtnl_lock(); 11745 rtnl_lock();
11745 i40e_prep_for_reset(pf, true); 11746 i40e_prep_for_reset(pf, true);
11746 rtnl_unlock(); 11747 rtnl_unlock();
@@ -11789,7 +11790,7 @@ static int i40e_suspend(struct pci_dev *pdev, pm_message_t state)
11789 int retval = 0; 11790 int retval = 0;
11790 11791
11791 set_bit(__I40E_SUSPENDED, pf->state); 11792 set_bit(__I40E_SUSPENDED, pf->state);
11792 set_bit(__I40E_VSI_DOWN, pf->state); 11793 set_bit(__I40E_DOWN, pf->state);
11793 11794
11794 if (pf->wol_en && (pf->flags & I40E_FLAG_WOL_MC_MAGIC_PKT_WAKE)) 11795 if (pf->wol_en && (pf->flags & I40E_FLAG_WOL_MC_MAGIC_PKT_WAKE))
11795 i40e_enable_mc_magic_wake(pf); 11796 i40e_enable_mc_magic_wake(pf);
@@ -11841,7 +11842,7 @@ static int i40e_resume(struct pci_dev *pdev)
11841 11842
11842 /* handling the reset will rebuild the device state */ 11843 /* handling the reset will rebuild the device state */
11843 if (test_and_clear_bit(__I40E_SUSPENDED, pf->state)) { 11844 if (test_and_clear_bit(__I40E_SUSPENDED, pf->state)) {
11844 clear_bit(__I40E_VSI_DOWN, pf->state); 11845 clear_bit(__I40E_DOWN, pf->state);
11845 rtnl_lock(); 11846 rtnl_lock();
11846 i40e_reset_and_rebuild(pf, false, true); 11847 i40e_reset_and_rebuild(pf, false, true);
11847 rtnl_unlock(); 11848 rtnl_unlock();
diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
index 29321a6167a6..77115c25d96f 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
@@ -1854,7 +1854,8 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring,
1854#if (PAGE_SIZE < 8192) 1854#if (PAGE_SIZE < 8192)
1855 unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2; 1855 unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2;
1856#else 1856#else
1857 unsigned int truesize = SKB_DATA_ALIGN(size); 1857 unsigned int truesize = SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) +
1858 SKB_DATA_ALIGN(I40E_SKB_PAD + size);
1858#endif 1859#endif
1859 struct sk_buff *skb; 1860 struct sk_buff *skb;
1860 1861
@@ -2340,7 +2341,7 @@ static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb,
2340 /* Due to lack of space, no more new filters can be programmed */ 2341 /* Due to lack of space, no more new filters can be programmed */
2341 if (th->syn && (pf->flags & I40E_FLAG_FD_ATR_AUTO_DISABLED)) 2342 if (th->syn && (pf->flags & I40E_FLAG_FD_ATR_AUTO_DISABLED))
2342 return; 2343 return;
2343 if (pf->flags & I40E_FLAG_HW_ATR_EVICT_CAPABLE) { 2344 if (pf->flags & I40E_FLAG_HW_ATR_EVICT_ENABLED) {
2344 /* HW ATR eviction will take care of removing filters on FIN 2345 /* HW ATR eviction will take care of removing filters on FIN
2345 * and RST packets. 2346 * and RST packets.
2346 */ 2347 */
@@ -2402,7 +2403,7 @@ static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb,
2402 I40E_TXD_FLTR_QW1_CNTINDEX_SHIFT) & 2403 I40E_TXD_FLTR_QW1_CNTINDEX_SHIFT) &
2403 I40E_TXD_FLTR_QW1_CNTINDEX_MASK; 2404 I40E_TXD_FLTR_QW1_CNTINDEX_MASK;
2404 2405
2405 if (pf->flags & I40E_FLAG_HW_ATR_EVICT_CAPABLE) 2406 if (pf->flags & I40E_FLAG_HW_ATR_EVICT_ENABLED)
2406 dtype_cmd |= I40E_TXD_FLTR_QW1_ATR_MASK; 2407 dtype_cmd |= I40E_TXD_FLTR_QW1_ATR_MASK;
2407 2408
2408 fdir_desc->qindex_flex_ptype_vsi = cpu_to_le32(flex_ptype); 2409 fdir_desc->qindex_flex_ptype_vsi = cpu_to_le32(flex_ptype);
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index 95c23fbaa211..0fb38ca78900 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -3017,10 +3017,12 @@ int i40e_ndo_set_vf_port_vlan(struct net_device *netdev, int vf_id,
3017 VLAN_VID_MASK)); 3017 VLAN_VID_MASK));
3018 } 3018 }
3019 3019
3020 spin_unlock_bh(&vsi->mac_filter_hash_lock);
3020 if (vlan_id || qos) 3021 if (vlan_id || qos)
3021 ret = i40e_vsi_add_pvid(vsi, vlanprio); 3022 ret = i40e_vsi_add_pvid(vsi, vlanprio);
3022 else 3023 else
3023 i40e_vsi_remove_pvid(vsi); 3024 i40e_vsi_remove_pvid(vsi);
3025 spin_lock_bh(&vsi->mac_filter_hash_lock);
3024 3026
3025 if (vlan_id) { 3027 if (vlan_id) {
3026 dev_info(&pf->pdev->dev, "Setting VLAN %d, QOS 0x%x on VF %d\n", 3028 dev_info(&pf->pdev->dev, "Setting VLAN %d, QOS 0x%x on VF %d\n",
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
index dfe241a12ad0..12b02e530503 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
@@ -1190,7 +1190,8 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring,
1190#if (PAGE_SIZE < 8192) 1190#if (PAGE_SIZE < 8192)
1191 unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2; 1191 unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2;
1192#else 1192#else
1193 unsigned int truesize = SKB_DATA_ALIGN(size); 1193 unsigned int truesize = SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) +
1194 SKB_DATA_ALIGN(I40E_SKB_PAD + size);
1194#endif 1195#endif
1195 struct sk_buff *skb; 1196 struct sk_buff *skb;
1196 1197
diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
index 9b875d776b29..33c901622ed5 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -3719,7 +3719,7 @@ static void mvpp2_bm_bufs_get_addrs(struct device *dev, struct mvpp2 *priv,
3719 dma_addr_t *dma_addr, 3719 dma_addr_t *dma_addr,
3720 phys_addr_t *phys_addr) 3720 phys_addr_t *phys_addr)
3721{ 3721{
3722 int cpu = smp_processor_id(); 3722 int cpu = get_cpu();
3723 3723
3724 *dma_addr = mvpp2_percpu_read(priv, cpu, 3724 *dma_addr = mvpp2_percpu_read(priv, cpu,
3725 MVPP2_BM_PHY_ALLOC_REG(bm_pool->id)); 3725 MVPP2_BM_PHY_ALLOC_REG(bm_pool->id));
@@ -3740,6 +3740,8 @@ static void mvpp2_bm_bufs_get_addrs(struct device *dev, struct mvpp2 *priv,
3740 if (sizeof(phys_addr_t) == 8) 3740 if (sizeof(phys_addr_t) == 8)
3741 *phys_addr |= (u64)phys_addr_highbits << 32; 3741 *phys_addr |= (u64)phys_addr_highbits << 32;
3742 } 3742 }
3743
3744 put_cpu();
3743} 3745}
3744 3746
3745/* Free all buffers from the pool */ 3747/* Free all buffers from the pool */
@@ -3920,18 +3922,12 @@ static inline u32 mvpp2_bm_cookie_pool_set(u32 cookie, int pool)
3920 return bm; 3922 return bm;
3921} 3923}
3922 3924
3923/* Get pool number from a BM cookie */
3924static inline int mvpp2_bm_cookie_pool_get(unsigned long cookie)
3925{
3926 return (cookie >> MVPP2_BM_COOKIE_POOL_OFFS) & 0xFF;
3927}
3928
3929/* Release buffer to BM */ 3925/* Release buffer to BM */
3930static inline void mvpp2_bm_pool_put(struct mvpp2_port *port, int pool, 3926static inline void mvpp2_bm_pool_put(struct mvpp2_port *port, int pool,
3931 dma_addr_t buf_dma_addr, 3927 dma_addr_t buf_dma_addr,
3932 phys_addr_t buf_phys_addr) 3928 phys_addr_t buf_phys_addr)
3933{ 3929{
3934 int cpu = smp_processor_id(); 3930 int cpu = get_cpu();
3935 3931
3936 if (port->priv->hw_version == MVPP22) { 3932 if (port->priv->hw_version == MVPP22) {
3937 u32 val = 0; 3933 u32 val = 0;
@@ -3958,15 +3954,15 @@ static inline void mvpp2_bm_pool_put(struct mvpp2_port *port, int pool,
3958 MVPP2_BM_VIRT_RLS_REG, buf_phys_addr); 3954 MVPP2_BM_VIRT_RLS_REG, buf_phys_addr);
3959 mvpp2_percpu_write(port->priv, cpu, 3955 mvpp2_percpu_write(port->priv, cpu,
3960 MVPP2_BM_PHY_RLS_REG(pool), buf_dma_addr); 3956 MVPP2_BM_PHY_RLS_REG(pool), buf_dma_addr);
3957
3958 put_cpu();
3961} 3959}
3962 3960
3963/* Refill BM pool */ 3961/* Refill BM pool */
3964static void mvpp2_pool_refill(struct mvpp2_port *port, u32 bm, 3962static void mvpp2_pool_refill(struct mvpp2_port *port, int pool,
3965 dma_addr_t dma_addr, 3963 dma_addr_t dma_addr,
3966 phys_addr_t phys_addr) 3964 phys_addr_t phys_addr)
3967{ 3965{
3968 int pool = mvpp2_bm_cookie_pool_get(bm);
3969
3970 mvpp2_bm_pool_put(port, pool, dma_addr, phys_addr); 3966 mvpp2_bm_pool_put(port, pool, dma_addr, phys_addr);
3971} 3967}
3972 3968
@@ -4186,8 +4182,6 @@ static void mvpp22_port_mii_set(struct mvpp2_port *port)
4186{ 4182{
4187 u32 val; 4183 u32 val;
4188 4184
4189 return;
4190
4191 /* Only GOP port 0 has an XLG MAC */ 4185 /* Only GOP port 0 has an XLG MAC */
4192 if (port->gop_id == 0) { 4186 if (port->gop_id == 0) {
4193 val = readl(port->base + MVPP22_XLG_CTRL3_REG); 4187 val = readl(port->base + MVPP22_XLG_CTRL3_REG);
@@ -4515,21 +4509,6 @@ static void mvpp2_rxq_offset_set(struct mvpp2_port *port,
4515 mvpp2_write(port->priv, MVPP2_RXQ_CONFIG_REG(prxq), val); 4509 mvpp2_write(port->priv, MVPP2_RXQ_CONFIG_REG(prxq), val);
4516} 4510}
4517 4511
4518/* Obtain BM cookie information from descriptor */
4519static u32 mvpp2_bm_cookie_build(struct mvpp2_port *port,
4520 struct mvpp2_rx_desc *rx_desc)
4521{
4522 int cpu = smp_processor_id();
4523 int pool;
4524
4525 pool = (mvpp2_rxdesc_status_get(port, rx_desc) &
4526 MVPP2_RXD_BM_POOL_ID_MASK) >>
4527 MVPP2_RXD_BM_POOL_ID_OFFS;
4528
4529 return ((pool & 0xFF) << MVPP2_BM_COOKIE_POOL_OFFS) |
4530 ((cpu & 0xFF) << MVPP2_BM_COOKIE_CPU_OFFS);
4531}
4532
4533/* Tx descriptors helper methods */ 4512/* Tx descriptors helper methods */
4534 4513
4535/* Get pointer to next Tx descriptor to be processed (send) by HW */ 4514/* Get pointer to next Tx descriptor to be processed (send) by HW */
@@ -4757,7 +4736,7 @@ static void mvpp2_txp_max_tx_size_set(struct mvpp2_port *port)
4757static void mvpp2_rx_pkts_coal_set(struct mvpp2_port *port, 4736static void mvpp2_rx_pkts_coal_set(struct mvpp2_port *port,
4758 struct mvpp2_rx_queue *rxq) 4737 struct mvpp2_rx_queue *rxq)
4759{ 4738{
4760 int cpu = smp_processor_id(); 4739 int cpu = get_cpu();
4761 4740
4762 if (rxq->pkts_coal > MVPP2_OCCUPIED_THRESH_MASK) 4741 if (rxq->pkts_coal > MVPP2_OCCUPIED_THRESH_MASK)
4763 rxq->pkts_coal = MVPP2_OCCUPIED_THRESH_MASK; 4742 rxq->pkts_coal = MVPP2_OCCUPIED_THRESH_MASK;
@@ -4765,6 +4744,8 @@ static void mvpp2_rx_pkts_coal_set(struct mvpp2_port *port,
4765 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_NUM_REG, rxq->id); 4744 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_NUM_REG, rxq->id);
4766 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_THRESH_REG, 4745 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_THRESH_REG,
4767 rxq->pkts_coal); 4746 rxq->pkts_coal);
4747
4748 put_cpu();
4768} 4749}
4769 4750
4770static u32 mvpp2_usec_to_cycles(u32 usec, unsigned long clk_hz) 4751static u32 mvpp2_usec_to_cycles(u32 usec, unsigned long clk_hz)
@@ -4945,7 +4926,7 @@ static int mvpp2_rxq_init(struct mvpp2_port *port,
4945 mvpp2_write(port->priv, MVPP2_RXQ_STATUS_REG(rxq->id), 0); 4926 mvpp2_write(port->priv, MVPP2_RXQ_STATUS_REG(rxq->id), 0);
4946 4927
4947 /* Set Rx descriptors queue starting address - indirect access */ 4928 /* Set Rx descriptors queue starting address - indirect access */
4948 cpu = smp_processor_id(); 4929 cpu = get_cpu();
4949 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_NUM_REG, rxq->id); 4930 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_NUM_REG, rxq->id);
4950 if (port->priv->hw_version == MVPP21) 4931 if (port->priv->hw_version == MVPP21)
4951 rxq_dma = rxq->descs_dma; 4932 rxq_dma = rxq->descs_dma;
@@ -4954,6 +4935,7 @@ static int mvpp2_rxq_init(struct mvpp2_port *port,
4954 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_DESC_ADDR_REG, rxq_dma); 4935 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_DESC_ADDR_REG, rxq_dma);
4955 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_DESC_SIZE_REG, rxq->size); 4936 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_DESC_SIZE_REG, rxq->size);
4956 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_INDEX_REG, 0); 4937 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_INDEX_REG, 0);
4938 put_cpu();
4957 4939
4958 /* Set Offset */ 4940 /* Set Offset */
4959 mvpp2_rxq_offset_set(port, rxq->id, NET_SKB_PAD); 4941 mvpp2_rxq_offset_set(port, rxq->id, NET_SKB_PAD);
@@ -4980,9 +4962,13 @@ static void mvpp2_rxq_drop_pkts(struct mvpp2_port *port,
4980 4962
4981 for (i = 0; i < rx_received; i++) { 4963 for (i = 0; i < rx_received; i++) {
4982 struct mvpp2_rx_desc *rx_desc = mvpp2_rxq_next_desc_get(rxq); 4964 struct mvpp2_rx_desc *rx_desc = mvpp2_rxq_next_desc_get(rxq);
4983 u32 bm = mvpp2_bm_cookie_build(port, rx_desc); 4965 u32 status = mvpp2_rxdesc_status_get(port, rx_desc);
4966 int pool;
4967
4968 pool = (status & MVPP2_RXD_BM_POOL_ID_MASK) >>
4969 MVPP2_RXD_BM_POOL_ID_OFFS;
4984 4970
4985 mvpp2_pool_refill(port, bm, 4971 mvpp2_pool_refill(port, pool,
4986 mvpp2_rxdesc_dma_addr_get(port, rx_desc), 4972 mvpp2_rxdesc_dma_addr_get(port, rx_desc),
4987 mvpp2_rxdesc_cookie_get(port, rx_desc)); 4973 mvpp2_rxdesc_cookie_get(port, rx_desc));
4988 } 4974 }
@@ -5012,10 +4998,11 @@ static void mvpp2_rxq_deinit(struct mvpp2_port *port,
5012 * free descriptor number 4998 * free descriptor number
5013 */ 4999 */
5014 mvpp2_write(port->priv, MVPP2_RXQ_STATUS_REG(rxq->id), 0); 5000 mvpp2_write(port->priv, MVPP2_RXQ_STATUS_REG(rxq->id), 0);
5015 cpu = smp_processor_id(); 5001 cpu = get_cpu();
5016 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_NUM_REG, rxq->id); 5002 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_NUM_REG, rxq->id);
5017 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_DESC_ADDR_REG, 0); 5003 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_DESC_ADDR_REG, 0);
5018 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_DESC_SIZE_REG, 0); 5004 mvpp2_percpu_write(port->priv, cpu, MVPP2_RXQ_DESC_SIZE_REG, 0);
5005 put_cpu();
5019} 5006}
5020 5007
5021/* Create and initialize a Tx queue */ 5008/* Create and initialize a Tx queue */
@@ -5038,7 +5025,7 @@ static int mvpp2_txq_init(struct mvpp2_port *port,
5038 txq->last_desc = txq->size - 1; 5025 txq->last_desc = txq->size - 1;
5039 5026
5040 /* Set Tx descriptors queue starting address - indirect access */ 5027 /* Set Tx descriptors queue starting address - indirect access */
5041 cpu = smp_processor_id(); 5028 cpu = get_cpu();
5042 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_NUM_REG, txq->id); 5029 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_NUM_REG, txq->id);
5043 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_DESC_ADDR_REG, 5030 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_DESC_ADDR_REG,
5044 txq->descs_dma); 5031 txq->descs_dma);
@@ -5063,6 +5050,7 @@ static int mvpp2_txq_init(struct mvpp2_port *port,
5063 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_PREF_BUF_REG, 5050 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_PREF_BUF_REG,
5064 MVPP2_PREF_BUF_PTR(desc) | MVPP2_PREF_BUF_SIZE_16 | 5051 MVPP2_PREF_BUF_PTR(desc) | MVPP2_PREF_BUF_SIZE_16 |
5065 MVPP2_PREF_BUF_THRESH(desc_per_txq / 2)); 5052 MVPP2_PREF_BUF_THRESH(desc_per_txq / 2));
5053 put_cpu();
5066 5054
5067 /* WRR / EJP configuration - indirect access */ 5055 /* WRR / EJP configuration - indirect access */
5068 tx_port_num = mvpp2_egress_port(port); 5056 tx_port_num = mvpp2_egress_port(port);
@@ -5133,10 +5121,11 @@ static void mvpp2_txq_deinit(struct mvpp2_port *port,
5133 mvpp2_write(port->priv, MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(txq->id), 0); 5121 mvpp2_write(port->priv, MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(txq->id), 0);
5134 5122
5135 /* Set Tx descriptors queue starting address and size */ 5123 /* Set Tx descriptors queue starting address and size */
5136 cpu = smp_processor_id(); 5124 cpu = get_cpu();
5137 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_NUM_REG, txq->id); 5125 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_NUM_REG, txq->id);
5138 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_DESC_ADDR_REG, 0); 5126 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_DESC_ADDR_REG, 0);
5139 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_DESC_SIZE_REG, 0); 5127 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_DESC_SIZE_REG, 0);
5128 put_cpu();
5140} 5129}
5141 5130
5142/* Cleanup Tx ports */ 5131/* Cleanup Tx ports */
@@ -5146,7 +5135,7 @@ static void mvpp2_txq_clean(struct mvpp2_port *port, struct mvpp2_tx_queue *txq)
5146 int delay, pending, cpu; 5135 int delay, pending, cpu;
5147 u32 val; 5136 u32 val;
5148 5137
5149 cpu = smp_processor_id(); 5138 cpu = get_cpu();
5150 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_NUM_REG, txq->id); 5139 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_NUM_REG, txq->id);
5151 val = mvpp2_percpu_read(port->priv, cpu, MVPP2_TXQ_PREF_BUF_REG); 5140 val = mvpp2_percpu_read(port->priv, cpu, MVPP2_TXQ_PREF_BUF_REG);
5152 val |= MVPP2_TXQ_DRAIN_EN_MASK; 5141 val |= MVPP2_TXQ_DRAIN_EN_MASK;
@@ -5173,6 +5162,7 @@ static void mvpp2_txq_clean(struct mvpp2_port *port, struct mvpp2_tx_queue *txq)
5173 5162
5174 val &= ~MVPP2_TXQ_DRAIN_EN_MASK; 5163 val &= ~MVPP2_TXQ_DRAIN_EN_MASK;
5175 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_PREF_BUF_REG, val); 5164 mvpp2_percpu_write(port->priv, cpu, MVPP2_TXQ_PREF_BUF_REG, val);
5165 put_cpu();
5176 5166
5177 for_each_present_cpu(cpu) { 5167 for_each_present_cpu(cpu) {
5178 txq_pcpu = per_cpu_ptr(txq->pcpu, cpu); 5168 txq_pcpu = per_cpu_ptr(txq->pcpu, cpu);
@@ -5420,7 +5410,7 @@ static void mvpp2_rx_csum(struct mvpp2_port *port, u32 status,
5420 5410
5421/* Reuse skb if possible, or allocate a new skb and add it to BM pool */ 5411/* Reuse skb if possible, or allocate a new skb and add it to BM pool */
5422static int mvpp2_rx_refill(struct mvpp2_port *port, 5412static int mvpp2_rx_refill(struct mvpp2_port *port,
5423 struct mvpp2_bm_pool *bm_pool, u32 bm) 5413 struct mvpp2_bm_pool *bm_pool, int pool)
5424{ 5414{
5425 dma_addr_t dma_addr; 5415 dma_addr_t dma_addr;
5426 phys_addr_t phys_addr; 5416 phys_addr_t phys_addr;
@@ -5432,7 +5422,7 @@ static int mvpp2_rx_refill(struct mvpp2_port *port,
5432 if (!buf) 5422 if (!buf)
5433 return -ENOMEM; 5423 return -ENOMEM;
5434 5424
5435 mvpp2_pool_refill(port, bm, dma_addr, phys_addr); 5425 mvpp2_pool_refill(port, pool, dma_addr, phys_addr);
5436 5426
5437 return 0; 5427 return 0;
5438} 5428}
@@ -5490,7 +5480,7 @@ static int mvpp2_rx(struct mvpp2_port *port, int rx_todo,
5490 unsigned int frag_size; 5480 unsigned int frag_size;
5491 dma_addr_t dma_addr; 5481 dma_addr_t dma_addr;
5492 phys_addr_t phys_addr; 5482 phys_addr_t phys_addr;
5493 u32 bm, rx_status; 5483 u32 rx_status;
5494 int pool, rx_bytes, err; 5484 int pool, rx_bytes, err;
5495 void *data; 5485 void *data;
5496 5486
@@ -5502,8 +5492,8 @@ static int mvpp2_rx(struct mvpp2_port *port, int rx_todo,
5502 phys_addr = mvpp2_rxdesc_cookie_get(port, rx_desc); 5492 phys_addr = mvpp2_rxdesc_cookie_get(port, rx_desc);
5503 data = (void *)phys_to_virt(phys_addr); 5493 data = (void *)phys_to_virt(phys_addr);
5504 5494
5505 bm = mvpp2_bm_cookie_build(port, rx_desc); 5495 pool = (rx_status & MVPP2_RXD_BM_POOL_ID_MASK) >>
5506 pool = mvpp2_bm_cookie_pool_get(bm); 5496 MVPP2_RXD_BM_POOL_ID_OFFS;
5507 bm_pool = &port->priv->bm_pools[pool]; 5497 bm_pool = &port->priv->bm_pools[pool];
5508 5498
5509 /* In case of an error, release the requested buffer pointer 5499 /* In case of an error, release the requested buffer pointer
@@ -5516,7 +5506,7 @@ err_drop_frame:
5516 dev->stats.rx_errors++; 5506 dev->stats.rx_errors++;
5517 mvpp2_rx_error(port, rx_desc); 5507 mvpp2_rx_error(port, rx_desc);
5518 /* Return the buffer to the pool */ 5508 /* Return the buffer to the pool */
5519 mvpp2_pool_refill(port, bm, dma_addr, phys_addr); 5509 mvpp2_pool_refill(port, pool, dma_addr, phys_addr);
5520 continue; 5510 continue;
5521 } 5511 }
5522 5512
@@ -5531,7 +5521,7 @@ err_drop_frame:
5531 goto err_drop_frame; 5521 goto err_drop_frame;
5532 } 5522 }
5533 5523
5534 err = mvpp2_rx_refill(port, bm_pool, bm); 5524 err = mvpp2_rx_refill(port, bm_pool, pool);
5535 if (err) { 5525 if (err) {
5536 netdev_err(port->dev, "failed to refill BM pools\n"); 5526 netdev_err(port->dev, "failed to refill BM pools\n");
5537 goto err_drop_frame; 5527 goto err_drop_frame;
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
index ae5fdc2df654..ffbcb27c05e5 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
@@ -1562,11 +1562,6 @@ static int mlx4_en_flow_replace(struct net_device *dev,
1562 qpn = priv->drop_qp.qpn; 1562 qpn = priv->drop_qp.qpn;
1563 else if (cmd->fs.ring_cookie & EN_ETHTOOL_QP_ATTACH) { 1563 else if (cmd->fs.ring_cookie & EN_ETHTOOL_QP_ATTACH) {
1564 qpn = cmd->fs.ring_cookie & (EN_ETHTOOL_QP_ATTACH - 1); 1564 qpn = cmd->fs.ring_cookie & (EN_ETHTOOL_QP_ATTACH - 1);
1565 if (qpn < priv->rss_map.base_qpn ||
1566 qpn >= priv->rss_map.base_qpn + priv->rx_ring_num) {
1567 en_warn(priv, "rxnfc: QP (0x%x) doesn't exist\n", qpn);
1568 return -EINVAL;
1569 }
1570 } else { 1565 } else {
1571 if (cmd->fs.ring_cookie >= priv->rx_ring_num) { 1566 if (cmd->fs.ring_cookie >= priv->rx_ring_num) {
1572 en_warn(priv, "rxnfc: RX ring (%llu) doesn't exist\n", 1567 en_warn(priv, "rxnfc: RX ring (%llu) doesn't exist\n",
diff --git a/drivers/net/ethernet/mellanox/mlx4/mcg.c b/drivers/net/ethernet/mellanox/mlx4/mcg.c
index 1a670b681555..0710b3677464 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mcg.c
+++ b/drivers/net/ethernet/mellanox/mlx4/mcg.c
@@ -35,6 +35,7 @@
35#include <linux/etherdevice.h> 35#include <linux/etherdevice.h>
36 36
37#include <linux/mlx4/cmd.h> 37#include <linux/mlx4/cmd.h>
38#include <linux/mlx4/qp.h>
38#include <linux/export.h> 39#include <linux/export.h>
39 40
40#include "mlx4.h" 41#include "mlx4.h"
@@ -985,16 +986,21 @@ int mlx4_flow_attach(struct mlx4_dev *dev,
985 if (IS_ERR(mailbox)) 986 if (IS_ERR(mailbox))
986 return PTR_ERR(mailbox); 987 return PTR_ERR(mailbox);
987 988
989 if (!mlx4_qp_lookup(dev, rule->qpn)) {
990 mlx4_err_rule(dev, "QP doesn't exist\n", rule);
991 ret = -EINVAL;
992 goto out;
993 }
994
988 trans_rule_ctrl_to_hw(rule, mailbox->buf); 995 trans_rule_ctrl_to_hw(rule, mailbox->buf);
989 996
990 size += sizeof(struct mlx4_net_trans_rule_hw_ctrl); 997 size += sizeof(struct mlx4_net_trans_rule_hw_ctrl);
991 998
992 list_for_each_entry(cur, &rule->list, list) { 999 list_for_each_entry(cur, &rule->list, list) {
993 ret = parse_trans_rule(dev, cur, mailbox->buf + size); 1000 ret = parse_trans_rule(dev, cur, mailbox->buf + size);
994 if (ret < 0) { 1001 if (ret < 0)
995 mlx4_free_cmd_mailbox(dev, mailbox); 1002 goto out;
996 return ret; 1003
997 }
998 size += ret; 1004 size += ret;
999 } 1005 }
1000 1006
@@ -1021,6 +1027,7 @@ int mlx4_flow_attach(struct mlx4_dev *dev,
1021 } 1027 }
1022 } 1028 }
1023 1029
1030out:
1024 mlx4_free_cmd_mailbox(dev, mailbox); 1031 mlx4_free_cmd_mailbox(dev, mailbox);
1025 1032
1026 return ret; 1033 return ret;
diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c
index 2d6abd4662b1..5a310d313e94 100644
--- a/drivers/net/ethernet/mellanox/mlx4/qp.c
+++ b/drivers/net/ethernet/mellanox/mlx4/qp.c
@@ -384,6 +384,19 @@ static void mlx4_qp_free_icm(struct mlx4_dev *dev, int qpn)
384 __mlx4_qp_free_icm(dev, qpn); 384 __mlx4_qp_free_icm(dev, qpn);
385} 385}
386 386
387struct mlx4_qp *mlx4_qp_lookup(struct mlx4_dev *dev, u32 qpn)
388{
389 struct mlx4_qp_table *qp_table = &mlx4_priv(dev)->qp_table;
390 struct mlx4_qp *qp;
391
392 spin_lock(&qp_table->lock);
393
394 qp = __mlx4_qp_lookup(dev, qpn);
395
396 spin_unlock(&qp_table->lock);
397 return qp;
398}
399
387int mlx4_qp_alloc(struct mlx4_dev *dev, int qpn, struct mlx4_qp *qp, gfp_t gfp) 400int mlx4_qp_alloc(struct mlx4_dev *dev, int qpn, struct mlx4_qp *qp, gfp_t gfp)
388{ 401{
389 struct mlx4_priv *priv = mlx4_priv(dev); 402 struct mlx4_priv *priv = mlx4_priv(dev);
@@ -471,6 +484,12 @@ int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn,
471 } 484 }
472 485
473 if (attr & MLX4_UPDATE_QP_QOS_VPORT) { 486 if (attr & MLX4_UPDATE_QP_QOS_VPORT) {
487 if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_QOS_VPP)) {
488 mlx4_warn(dev, "Granular QoS per VF is not enabled\n");
489 err = -EOPNOTSUPP;
490 goto out;
491 }
492
474 qp_mask |= 1ULL << MLX4_UPD_QP_MASK_QOS_VPP; 493 qp_mask |= 1ULL << MLX4_UPD_QP_MASK_QOS_VPP;
475 cmd->qp_context.qos_vport = params->qos_vport; 494 cmd->qp_context.qos_vport = params->qos_vport;
476 } 495 }
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
index 07516545474f..812783865205 100644
--- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
+++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
@@ -5255,6 +5255,13 @@ void mlx4_delete_all_resources_for_slave(struct mlx4_dev *dev, int slave)
5255 mutex_unlock(&priv->mfunc.master.res_tracker.slave_list[slave].mutex); 5255 mutex_unlock(&priv->mfunc.master.res_tracker.slave_list[slave].mutex);
5256} 5256}
5257 5257
5258static void update_qos_vpp(struct mlx4_update_qp_context *ctx,
5259 struct mlx4_vf_immed_vlan_work *work)
5260{
5261 ctx->qp_mask |= cpu_to_be64(1ULL << MLX4_UPD_QP_MASK_QOS_VPP);
5262 ctx->qp_context.qos_vport = work->qos_vport;
5263}
5264
5258void mlx4_vf_immed_vlan_work_handler(struct work_struct *_work) 5265void mlx4_vf_immed_vlan_work_handler(struct work_struct *_work)
5259{ 5266{
5260 struct mlx4_vf_immed_vlan_work *work = 5267 struct mlx4_vf_immed_vlan_work *work =
@@ -5369,11 +5376,10 @@ void mlx4_vf_immed_vlan_work_handler(struct work_struct *_work)
5369 qp->sched_queue & 0xC7; 5376 qp->sched_queue & 0xC7;
5370 upd_context->qp_context.pri_path.sched_queue |= 5377 upd_context->qp_context.pri_path.sched_queue |=
5371 ((work->qos & 0x7) << 3); 5378 ((work->qos & 0x7) << 3);
5372 upd_context->qp_mask |= 5379
5373 cpu_to_be64(1ULL << 5380 if (dev->caps.flags2 &
5374 MLX4_UPD_QP_MASK_QOS_VPP); 5381 MLX4_DEV_CAP_FLAG2_QOS_VPP)
5375 upd_context->qp_context.qos_vport = 5382 update_qos_vpp(upd_context, work);
5376 work->qos_vport;
5377 } 5383 }
5378 5384
5379 err = mlx4_cmd(dev, mailbox->dma, 5385 err = mlx4_cmd(dev, mailbox->dma,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
index 5bdaf3d545b2..10d282841f5b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
@@ -774,7 +774,7 @@ static void cb_timeout_handler(struct work_struct *work)
774 mlx5_core_warn(dev, "%s(0x%x) timeout. Will cause a leak of a command resource\n", 774 mlx5_core_warn(dev, "%s(0x%x) timeout. Will cause a leak of a command resource\n",
775 mlx5_command_str(msg_to_opcode(ent->in)), 775 mlx5_command_str(msg_to_opcode(ent->in)),
776 msg_to_opcode(ent->in)); 776 msg_to_opcode(ent->in));
777 mlx5_cmd_comp_handler(dev, 1UL << ent->idx); 777 mlx5_cmd_comp_handler(dev, 1UL << ent->idx, true);
778} 778}
779 779
780static void cmd_work_handler(struct work_struct *work) 780static void cmd_work_handler(struct work_struct *work)
@@ -804,6 +804,7 @@ static void cmd_work_handler(struct work_struct *work)
804 } 804 }
805 805
806 cmd->ent_arr[ent->idx] = ent; 806 cmd->ent_arr[ent->idx] = ent;
807 set_bit(MLX5_CMD_ENT_STATE_PENDING_COMP, &ent->state);
807 lay = get_inst(cmd, ent->idx); 808 lay = get_inst(cmd, ent->idx);
808 ent->lay = lay; 809 ent->lay = lay;
809 memset(lay, 0, sizeof(*lay)); 810 memset(lay, 0, sizeof(*lay));
@@ -825,6 +826,20 @@ static void cmd_work_handler(struct work_struct *work)
825 if (ent->callback) 826 if (ent->callback)
826 schedule_delayed_work(&ent->cb_timeout_work, cb_timeout); 827 schedule_delayed_work(&ent->cb_timeout_work, cb_timeout);
827 828
829 /* Skip sending command to fw if internal error */
830 if (pci_channel_offline(dev->pdev) ||
831 dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) {
832 u8 status = 0;
833 u32 drv_synd;
834
835 ent->ret = mlx5_internal_err_ret_value(dev, msg_to_opcode(ent->in), &drv_synd, &status);
836 MLX5_SET(mbox_out, ent->out, status, status);
837 MLX5_SET(mbox_out, ent->out, syndrome, drv_synd);
838
839 mlx5_cmd_comp_handler(dev, 1UL << ent->idx, true);
840 return;
841 }
842
828 /* ring doorbell after the descriptor is valid */ 843 /* ring doorbell after the descriptor is valid */
829 mlx5_core_dbg(dev, "writing 0x%x to command doorbell\n", 1 << ent->idx); 844 mlx5_core_dbg(dev, "writing 0x%x to command doorbell\n", 1 << ent->idx);
830 wmb(); 845 wmb();
@@ -835,7 +850,7 @@ static void cmd_work_handler(struct work_struct *work)
835 poll_timeout(ent); 850 poll_timeout(ent);
836 /* make sure we read the descriptor after ownership is SW */ 851 /* make sure we read the descriptor after ownership is SW */
837 rmb(); 852 rmb();
838 mlx5_cmd_comp_handler(dev, 1UL << ent->idx); 853 mlx5_cmd_comp_handler(dev, 1UL << ent->idx, (ent->ret == -ETIMEDOUT));
839 } 854 }
840} 855}
841 856
@@ -879,7 +894,7 @@ static int wait_func(struct mlx5_core_dev *dev, struct mlx5_cmd_work_ent *ent)
879 wait_for_completion(&ent->done); 894 wait_for_completion(&ent->done);
880 } else if (!wait_for_completion_timeout(&ent->done, timeout)) { 895 } else if (!wait_for_completion_timeout(&ent->done, timeout)) {
881 ent->ret = -ETIMEDOUT; 896 ent->ret = -ETIMEDOUT;
882 mlx5_cmd_comp_handler(dev, 1UL << ent->idx); 897 mlx5_cmd_comp_handler(dev, 1UL << ent->idx, true);
883 } 898 }
884 899
885 err = ent->ret; 900 err = ent->ret;
@@ -1375,7 +1390,7 @@ static void free_msg(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *msg)
1375 } 1390 }
1376} 1391}
1377 1392
1378void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec) 1393void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec, bool forced)
1379{ 1394{
1380 struct mlx5_cmd *cmd = &dev->cmd; 1395 struct mlx5_cmd *cmd = &dev->cmd;
1381 struct mlx5_cmd_work_ent *ent; 1396 struct mlx5_cmd_work_ent *ent;
@@ -1395,6 +1410,19 @@ void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec)
1395 struct semaphore *sem; 1410 struct semaphore *sem;
1396 1411
1397 ent = cmd->ent_arr[i]; 1412 ent = cmd->ent_arr[i];
1413
1414 /* if we already completed the command, ignore it */
1415 if (!test_and_clear_bit(MLX5_CMD_ENT_STATE_PENDING_COMP,
1416 &ent->state)) {
1417 /* only real completion can free the cmd slot */
1418 if (!forced) {
1419 mlx5_core_err(dev, "Command completion arrived after timeout (entry idx = %d).\n",
1420 ent->idx);
1421 free_ent(cmd, ent->idx);
1422 }
1423 continue;
1424 }
1425
1398 if (ent->callback) 1426 if (ent->callback)
1399 cancel_delayed_work(&ent->cb_timeout_work); 1427 cancel_delayed_work(&ent->cb_timeout_work);
1400 if (ent->page_queue) 1428 if (ent->page_queue)
@@ -1417,7 +1445,10 @@ void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec)
1417 mlx5_core_dbg(dev, "command completed. ret 0x%x, delivery status %s(0x%x)\n", 1445 mlx5_core_dbg(dev, "command completed. ret 0x%x, delivery status %s(0x%x)\n",
1418 ent->ret, deliv_status_to_str(ent->status), ent->status); 1446 ent->ret, deliv_status_to_str(ent->status), ent->status);
1419 } 1447 }
1420 free_ent(cmd, ent->idx); 1448
1449 /* only real completion will free the entry slot */
1450 if (!forced)
1451 free_ent(cmd, ent->idx);
1421 1452
1422 if (ent->callback) { 1453 if (ent->callback) {
1423 ds = ent->ts2 - ent->ts1; 1454 ds = ent->ts2 - ent->ts1;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
index 2fd044b23875..944fc1742464 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
@@ -458,13 +458,15 @@ struct mlx5e_mpw_info {
458 458
459struct mlx5e_rx_am_stats { 459struct mlx5e_rx_am_stats {
460 int ppms; /* packets per msec */ 460 int ppms; /* packets per msec */
461 int bpms; /* bytes per msec */
461 int epms; /* events per msec */ 462 int epms; /* events per msec */
462}; 463};
463 464
464struct mlx5e_rx_am_sample { 465struct mlx5e_rx_am_sample {
465 ktime_t time; 466 ktime_t time;
466 unsigned int pkt_ctr; 467 u32 pkt_ctr;
467 u16 event_ctr; 468 u32 byte_ctr;
469 u16 event_ctr;
468}; 470};
469 471
470struct mlx5e_rx_am { /* Adaptive Moderation */ 472struct mlx5e_rx_am { /* Adaptive Moderation */
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
index 8209affa75c3..16486dff1493 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
@@ -1242,11 +1242,11 @@ static int mlx5e_get_ts_info(struct net_device *dev,
1242 SOF_TIMESTAMPING_RX_HARDWARE | 1242 SOF_TIMESTAMPING_RX_HARDWARE |
1243 SOF_TIMESTAMPING_RAW_HARDWARE; 1243 SOF_TIMESTAMPING_RAW_HARDWARE;
1244 1244
1245 info->tx_types = (BIT(1) << HWTSTAMP_TX_OFF) | 1245 info->tx_types = BIT(HWTSTAMP_TX_OFF) |
1246 (BIT(1) << HWTSTAMP_TX_ON); 1246 BIT(HWTSTAMP_TX_ON);
1247 1247
1248 info->rx_filters = (BIT(1) << HWTSTAMP_FILTER_NONE) | 1248 info->rx_filters = BIT(HWTSTAMP_FILTER_NONE) |
1249 (BIT(1) << HWTSTAMP_FILTER_ALL); 1249 BIT(HWTSTAMP_FILTER_ALL);
1250 1250
1251 return 0; 1251 return 0;
1252} 1252}
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 41cd22a223dc..277f4de30375 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -4241,7 +4241,8 @@ struct net_device *mlx5e_create_netdev(struct mlx5_core_dev *mdev,
4241 return netdev; 4241 return netdev;
4242 4242
4243err_cleanup_nic: 4243err_cleanup_nic:
4244 profile->cleanup(priv); 4244 if (profile->cleanup)
4245 profile->cleanup(priv);
4245 free_netdev(netdev); 4246 free_netdev(netdev);
4246 4247
4247 return NULL; 4248 return NULL;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
index 79462c0368a0..46984a52a94b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
@@ -791,6 +791,8 @@ static void mlx5e_build_rep_params(struct mlx5_core_dev *mdev,
791 params->tx_max_inline = mlx5e_get_max_inline_cap(mdev); 791 params->tx_max_inline = mlx5e_get_max_inline_cap(mdev);
792 params->num_tc = 1; 792 params->num_tc = 1;
793 params->lro_wqe_sz = MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ; 793 params->lro_wqe_sz = MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ;
794
795 mlx5_query_min_inline(mdev, &params->tx_min_inline_mode);
794} 796}
795 797
796static void mlx5e_build_rep_netdev(struct net_device *netdev) 798static void mlx5e_build_rep_netdev(struct net_device *netdev)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
index 7b1566f0ae58..66b5fec15313 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
@@ -1041,6 +1041,8 @@ void mlx5e_free_xdpsq_descs(struct mlx5e_xdpsq *sq)
1041#define MLX5_IB_GRH_BYTES 40 1041#define MLX5_IB_GRH_BYTES 40
1042#define MLX5_IPOIB_ENCAP_LEN 4 1042#define MLX5_IPOIB_ENCAP_LEN 4
1043#define MLX5_GID_SIZE 16 1043#define MLX5_GID_SIZE 16
1044#define MLX5_IPOIB_PSEUDO_LEN 20
1045#define MLX5_IPOIB_HARD_LEN (MLX5_IPOIB_PSEUDO_LEN + MLX5_IPOIB_ENCAP_LEN)
1044 1046
1045static inline void mlx5i_complete_rx_cqe(struct mlx5e_rq *rq, 1047static inline void mlx5i_complete_rx_cqe(struct mlx5e_rq *rq,
1046 struct mlx5_cqe64 *cqe, 1048 struct mlx5_cqe64 *cqe,
@@ -1048,6 +1050,7 @@ static inline void mlx5i_complete_rx_cqe(struct mlx5e_rq *rq,
1048 struct sk_buff *skb) 1050 struct sk_buff *skb)
1049{ 1051{
1050 struct net_device *netdev = rq->netdev; 1052 struct net_device *netdev = rq->netdev;
1053 char *pseudo_header;
1051 u8 *dgid; 1054 u8 *dgid;
1052 u8 g; 1055 u8 g;
1053 1056
@@ -1076,8 +1079,11 @@ static inline void mlx5i_complete_rx_cqe(struct mlx5e_rq *rq,
1076 if (likely(netdev->features & NETIF_F_RXHASH)) 1079 if (likely(netdev->features & NETIF_F_RXHASH))
1077 mlx5e_skb_set_hash(cqe, skb); 1080 mlx5e_skb_set_hash(cqe, skb);
1078 1081
1082 /* 20 bytes of ipoib header and 4 for encap existing */
1083 pseudo_header = skb_push(skb, MLX5_IPOIB_PSEUDO_LEN);
1084 memset(pseudo_header, 0, MLX5_IPOIB_PSEUDO_LEN);
1079 skb_reset_mac_header(skb); 1085 skb_reset_mac_header(skb);
1080 skb_pull(skb, MLX5_IPOIB_ENCAP_LEN); 1086 skb_pull(skb, MLX5_IPOIB_HARD_LEN);
1081 1087
1082 skb->dev = netdev; 1088 skb->dev = netdev;
1083 1089
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c
index 02dd3a95ed8f..acf32fe952cd 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c
@@ -183,28 +183,27 @@ static void mlx5e_am_exit_parking(struct mlx5e_rx_am *am)
183 mlx5e_am_step(am); 183 mlx5e_am_step(am);
184} 184}
185 185
186#define IS_SIGNIFICANT_DIFF(val, ref) \
187 (((100 * abs((val) - (ref))) / (ref)) > 10) /* more than 10% difference */
188
186static int mlx5e_am_stats_compare(struct mlx5e_rx_am_stats *curr, 189static int mlx5e_am_stats_compare(struct mlx5e_rx_am_stats *curr,
187 struct mlx5e_rx_am_stats *prev) 190 struct mlx5e_rx_am_stats *prev)
188{ 191{
189 int diff; 192 if (!prev->bpms)
190 193 return curr->bpms ? MLX5E_AM_STATS_BETTER :
191 if (!prev->ppms)
192 return curr->ppms ? MLX5E_AM_STATS_BETTER :
193 MLX5E_AM_STATS_SAME; 194 MLX5E_AM_STATS_SAME;
194 195
195 diff = curr->ppms - prev->ppms; 196 if (IS_SIGNIFICANT_DIFF(curr->bpms, prev->bpms))
196 if (((100 * abs(diff)) / prev->ppms) > 10) /* more than 10% diff */ 197 return (curr->bpms > prev->bpms) ? MLX5E_AM_STATS_BETTER :
197 return (diff > 0) ? MLX5E_AM_STATS_BETTER : 198 MLX5E_AM_STATS_WORSE;
198 MLX5E_AM_STATS_WORSE;
199 199
200 if (!prev->epms) 200 if (IS_SIGNIFICANT_DIFF(curr->ppms, prev->ppms))
201 return curr->epms ? MLX5E_AM_STATS_WORSE : 201 return (curr->ppms > prev->ppms) ? MLX5E_AM_STATS_BETTER :
202 MLX5E_AM_STATS_SAME; 202 MLX5E_AM_STATS_WORSE;
203 203
204 diff = curr->epms - prev->epms; 204 if (IS_SIGNIFICANT_DIFF(curr->epms, prev->epms))
205 if (((100 * abs(diff)) / prev->epms) > 10) /* more than 10% diff */ 205 return (curr->epms < prev->epms) ? MLX5E_AM_STATS_BETTER :
206 return (diff < 0) ? MLX5E_AM_STATS_BETTER : 206 MLX5E_AM_STATS_WORSE;
207 MLX5E_AM_STATS_WORSE;
208 207
209 return MLX5E_AM_STATS_SAME; 208 return MLX5E_AM_STATS_SAME;
210} 209}
@@ -266,10 +265,13 @@ static void mlx5e_am_sample(struct mlx5e_rq *rq,
266{ 265{
267 s->time = ktime_get(); 266 s->time = ktime_get();
268 s->pkt_ctr = rq->stats.packets; 267 s->pkt_ctr = rq->stats.packets;
268 s->byte_ctr = rq->stats.bytes;
269 s->event_ctr = rq->cq.event_ctr; 269 s->event_ctr = rq->cq.event_ctr;
270} 270}
271 271
272#define MLX5E_AM_NEVENTS 64 272#define MLX5E_AM_NEVENTS 64
273#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
274#define BIT_GAP(bits, end, start) ((((end) - (start)) + BIT_ULL(bits)) & (BIT_ULL(bits) - 1))
273 275
274static void mlx5e_am_calc_stats(struct mlx5e_rx_am_sample *start, 276static void mlx5e_am_calc_stats(struct mlx5e_rx_am_sample *start,
275 struct mlx5e_rx_am_sample *end, 277 struct mlx5e_rx_am_sample *end,
@@ -277,13 +279,17 @@ static void mlx5e_am_calc_stats(struct mlx5e_rx_am_sample *start,
277{ 279{
278 /* u32 holds up to 71 minutes, should be enough */ 280 /* u32 holds up to 71 minutes, should be enough */
279 u32 delta_us = ktime_us_delta(end->time, start->time); 281 u32 delta_us = ktime_us_delta(end->time, start->time);
280 unsigned int npkts = end->pkt_ctr - start->pkt_ctr; 282 u32 npkts = BIT_GAP(BITS_PER_TYPE(u32), end->pkt_ctr, start->pkt_ctr);
283 u32 nbytes = BIT_GAP(BITS_PER_TYPE(u32), end->byte_ctr,
284 start->byte_ctr);
281 285
282 if (!delta_us) 286 if (!delta_us)
283 return; 287 return;
284 288
285 curr_stats->ppms = (npkts * USEC_PER_MSEC) / delta_us; 289 curr_stats->ppms = DIV_ROUND_UP(npkts * USEC_PER_MSEC, delta_us);
286 curr_stats->epms = (MLX5E_AM_NEVENTS * USEC_PER_MSEC) / delta_us; 290 curr_stats->bpms = DIV_ROUND_UP(nbytes * USEC_PER_MSEC, delta_us);
291 curr_stats->epms = DIV_ROUND_UP(MLX5E_AM_NEVENTS * USEC_PER_MSEC,
292 delta_us);
287} 293}
288 294
289void mlx5e_rx_am_work(struct work_struct *work) 295void mlx5e_rx_am_work(struct work_struct *work)
@@ -308,7 +314,8 @@ void mlx5e_rx_am(struct mlx5e_rq *rq)
308 314
309 switch (am->state) { 315 switch (am->state) {
310 case MLX5E_AM_MEASURE_IN_PROGRESS: 316 case MLX5E_AM_MEASURE_IN_PROGRESS:
311 nevents = rq->cq.event_ctr - am->start_sample.event_ctr; 317 nevents = BIT_GAP(BITS_PER_TYPE(u16), rq->cq.event_ctr,
318 am->start_sample.event_ctr);
312 if (nevents < MLX5E_AM_NEVENTS) 319 if (nevents < MLX5E_AM_NEVENTS)
313 break; 320 break;
314 mlx5e_am_sample(rq, &end_sample); 321 mlx5e_am_sample(rq, &end_sample);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
index 53e4992d6511..f81c3aa60b46 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
@@ -417,20 +417,13 @@ struct mlx5e_stats {
417}; 417};
418 418
419static const struct counter_desc mlx5e_pme_status_desc[] = { 419static const struct counter_desc mlx5e_pme_status_desc[] = {
420 { "module_plug", 0 },
421 { "module_unplug", 8 }, 420 { "module_unplug", 8 },
422}; 421};
423 422
424static const struct counter_desc mlx5e_pme_error_desc[] = { 423static const struct counter_desc mlx5e_pme_error_desc[] = {
425 { "module_pwr_budget_exd", 0 }, /* power budget exceed */ 424 { "module_bus_stuck", 16 }, /* bus stuck (I2C or data shorted) */
426 { "module_long_range", 8 }, /* long range for non MLNX cable */ 425 { "module_high_temp", 48 }, /* high temperature */
427 { "module_bus_stuck", 16 }, /* bus stuck (I2C or data shorted) */
428 { "module_no_eeprom", 24 }, /* no eeprom/retry time out */
429 { "module_enforce_part", 32 }, /* enforce part number list */
430 { "module_unknown_id", 40 }, /* unknown identifier */
431 { "module_high_temp", 48 }, /* high temperature */
432 { "module_bad_shorted", 56 }, /* bad or shorted cable/module */ 426 { "module_bad_shorted", 56 }, /* bad or shorted cable/module */
433 { "module_unknown_status", 64 },
434}; 427};
435 428
436#endif /* __MLX5_EN_STATS_H__ */ 429#endif /* __MLX5_EN_STATS_H__ */
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 11c27e4fadf6..9df9fc0d26f5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -43,6 +43,7 @@
43#include <net/tc_act/tc_vlan.h> 43#include <net/tc_act/tc_vlan.h>
44#include <net/tc_act/tc_tunnel_key.h> 44#include <net/tc_act/tc_tunnel_key.h>
45#include <net/tc_act/tc_pedit.h> 45#include <net/tc_act/tc_pedit.h>
46#include <net/tc_act/tc_csum.h>
46#include <net/vxlan.h> 47#include <net/vxlan.h>
47#include <net/arp.h> 48#include <net/arp.h>
48#include "en.h" 49#include "en.h"
@@ -384,7 +385,7 @@ static void mlx5e_detach_encap(struct mlx5e_priv *priv,
384 if (e->flags & MLX5_ENCAP_ENTRY_VALID) 385 if (e->flags & MLX5_ENCAP_ENTRY_VALID)
385 mlx5_encap_dealloc(priv->mdev, e->encap_id); 386 mlx5_encap_dealloc(priv->mdev, e->encap_id);
386 387
387 hlist_del_rcu(&e->encap_hlist); 388 hash_del_rcu(&e->encap_hlist);
388 kfree(e->encap_header); 389 kfree(e->encap_header);
389 kfree(e); 390 kfree(e);
390 } 391 }
@@ -894,7 +895,6 @@ static struct mlx5_fields fields[] = {
894 {MLX5_ACTION_IN_FIELD_OUT_SMAC_15_0, 2, offsetof(struct pedit_headers, eth.h_source[4])}, 895 {MLX5_ACTION_IN_FIELD_OUT_SMAC_15_0, 2, offsetof(struct pedit_headers, eth.h_source[4])},
895 {MLX5_ACTION_IN_FIELD_OUT_ETHERTYPE, 2, offsetof(struct pedit_headers, eth.h_proto)}, 896 {MLX5_ACTION_IN_FIELD_OUT_ETHERTYPE, 2, offsetof(struct pedit_headers, eth.h_proto)},
896 897
897 {MLX5_ACTION_IN_FIELD_OUT_IP_DSCP, 1, offsetof(struct pedit_headers, ip4.tos)},
898 {MLX5_ACTION_IN_FIELD_OUT_IP_TTL, 1, offsetof(struct pedit_headers, ip4.ttl)}, 898 {MLX5_ACTION_IN_FIELD_OUT_IP_TTL, 1, offsetof(struct pedit_headers, ip4.ttl)},
899 {MLX5_ACTION_IN_FIELD_OUT_SIPV4, 4, offsetof(struct pedit_headers, ip4.saddr)}, 899 {MLX5_ACTION_IN_FIELD_OUT_SIPV4, 4, offsetof(struct pedit_headers, ip4.saddr)},
900 {MLX5_ACTION_IN_FIELD_OUT_DIPV4, 4, offsetof(struct pedit_headers, ip4.daddr)}, 900 {MLX5_ACTION_IN_FIELD_OUT_DIPV4, 4, offsetof(struct pedit_headers, ip4.daddr)},
@@ -925,11 +925,11 @@ static int offload_pedit_fields(struct pedit_headers *masks,
925 struct mlx5e_tc_flow_parse_attr *parse_attr) 925 struct mlx5e_tc_flow_parse_attr *parse_attr)
926{ 926{
927 struct pedit_headers *set_masks, *add_masks, *set_vals, *add_vals; 927 struct pedit_headers *set_masks, *add_masks, *set_vals, *add_vals;
928 int i, action_size, nactions, max_actions, first, last; 928 int i, action_size, nactions, max_actions, first, last, first_z;
929 void *s_masks_p, *a_masks_p, *vals_p; 929 void *s_masks_p, *a_masks_p, *vals_p;
930 u32 s_mask, a_mask, val;
931 struct mlx5_fields *f; 930 struct mlx5_fields *f;
932 u8 cmd, field_bsize; 931 u8 cmd, field_bsize;
932 u32 s_mask, a_mask;
933 unsigned long mask; 933 unsigned long mask;
934 void *action; 934 void *action;
935 935
@@ -946,7 +946,8 @@ static int offload_pedit_fields(struct pedit_headers *masks,
946 for (i = 0; i < ARRAY_SIZE(fields); i++) { 946 for (i = 0; i < ARRAY_SIZE(fields); i++) {
947 f = &fields[i]; 947 f = &fields[i];
948 /* avoid seeing bits set from previous iterations */ 948 /* avoid seeing bits set from previous iterations */
949 s_mask = a_mask = mask = val = 0; 949 s_mask = 0;
950 a_mask = 0;
950 951
951 s_masks_p = (void *)set_masks + f->offset; 952 s_masks_p = (void *)set_masks + f->offset;
952 a_masks_p = (void *)add_masks + f->offset; 953 a_masks_p = (void *)add_masks + f->offset;
@@ -981,12 +982,12 @@ static int offload_pedit_fields(struct pedit_headers *masks,
981 memset(a_masks_p, 0, f->size); 982 memset(a_masks_p, 0, f->size);
982 } 983 }
983 984
984 memcpy(&val, vals_p, f->size);
985
986 field_bsize = f->size * BITS_PER_BYTE; 985 field_bsize = f->size * BITS_PER_BYTE;
986
987 first_z = find_first_zero_bit(&mask, field_bsize);
987 first = find_first_bit(&mask, field_bsize); 988 first = find_first_bit(&mask, field_bsize);
988 last = find_last_bit(&mask, field_bsize); 989 last = find_last_bit(&mask, field_bsize);
989 if (first > 0 || last != (field_bsize - 1)) { 990 if (first > 0 || last != (field_bsize - 1) || first_z < last) {
990 printk(KERN_WARNING "mlx5: partial rewrite (mask %lx) is currently not offloaded\n", 991 printk(KERN_WARNING "mlx5: partial rewrite (mask %lx) is currently not offloaded\n",
991 mask); 992 mask);
992 return -EOPNOTSUPP; 993 return -EOPNOTSUPP;
@@ -1002,11 +1003,11 @@ static int offload_pedit_fields(struct pedit_headers *masks,
1002 } 1003 }
1003 1004
1004 if (field_bsize == 32) 1005 if (field_bsize == 32)
1005 MLX5_SET(set_action_in, action, data, ntohl(val)); 1006 MLX5_SET(set_action_in, action, data, ntohl(*(__be32 *)vals_p));
1006 else if (field_bsize == 16) 1007 else if (field_bsize == 16)
1007 MLX5_SET(set_action_in, action, data, ntohs(val)); 1008 MLX5_SET(set_action_in, action, data, ntohs(*(__be16 *)vals_p));
1008 else if (field_bsize == 8) 1009 else if (field_bsize == 8)
1009 MLX5_SET(set_action_in, action, data, val); 1010 MLX5_SET(set_action_in, action, data, *(u8 *)vals_p);
1010 1011
1011 action += action_size; 1012 action += action_size;
1012 nactions++; 1013 nactions++;
@@ -1109,6 +1110,28 @@ out_err:
1109 return err; 1110 return err;
1110} 1111}
1111 1112
1113static bool csum_offload_supported(struct mlx5e_priv *priv, u32 action, u32 update_flags)
1114{
1115 u32 prot_flags = TCA_CSUM_UPDATE_FLAG_IPV4HDR | TCA_CSUM_UPDATE_FLAG_TCP |
1116 TCA_CSUM_UPDATE_FLAG_UDP;
1117
1118 /* The HW recalcs checksums only if re-writing headers */
1119 if (!(action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)) {
1120 netdev_warn(priv->netdev,
1121 "TC csum action is only offloaded with pedit\n");
1122 return false;
1123 }
1124
1125 if (update_flags & ~prot_flags) {
1126 netdev_warn(priv->netdev,
1127 "can't offload TC csum action for some header/s - flags %#x\n",
1128 update_flags);
1129 return false;
1130 }
1131
1132 return true;
1133}
1134
1112static int parse_tc_nic_actions(struct mlx5e_priv *priv, struct tcf_exts *exts, 1135static int parse_tc_nic_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
1113 struct mlx5e_tc_flow_parse_attr *parse_attr, 1136 struct mlx5e_tc_flow_parse_attr *parse_attr,
1114 struct mlx5e_tc_flow *flow) 1137 struct mlx5e_tc_flow *flow)
@@ -1149,6 +1172,14 @@ static int parse_tc_nic_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
1149 continue; 1172 continue;
1150 } 1173 }
1151 1174
1175 if (is_tcf_csum(a)) {
1176 if (csum_offload_supported(priv, attr->action,
1177 tcf_csum_update_flags(a)))
1178 continue;
1179
1180 return -EOPNOTSUPP;
1181 }
1182
1152 if (is_tcf_skbedit_mark(a)) { 1183 if (is_tcf_skbedit_mark(a)) {
1153 u32 mark = tcf_skbedit_mark(a); 1184 u32 mark = tcf_skbedit_mark(a);
1154 1185
@@ -1651,6 +1682,14 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
1651 continue; 1682 continue;
1652 } 1683 }
1653 1684
1685 if (is_tcf_csum(a)) {
1686 if (csum_offload_supported(priv, attr->action,
1687 tcf_csum_update_flags(a)))
1688 continue;
1689
1690 return -EOPNOTSUPP;
1691 }
1692
1654 if (is_tcf_mirred_egress_redirect(a)) { 1693 if (is_tcf_mirred_egress_redirect(a)) {
1655 int ifindex = tcf_mirred_ifindex(a); 1694 int ifindex = tcf_mirred_ifindex(a);
1656 struct net_device *out_dev, *encap_dev = NULL; 1695 struct net_device *out_dev, *encap_dev = NULL;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
index ea5d8d37a75c..33eae5ad2fb0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
@@ -422,7 +422,7 @@ static irqreturn_t mlx5_eq_int(int irq, void *eq_ptr)
422 break; 422 break;
423 423
424 case MLX5_EVENT_TYPE_CMD: 424 case MLX5_EVENT_TYPE_CMD:
425 mlx5_cmd_comp_handler(dev, be32_to_cpu(eqe->data.cmd.vector)); 425 mlx5_cmd_comp_handler(dev, be32_to_cpu(eqe->data.cmd.vector), false);
426 break; 426 break;
427 427
428 case MLX5_EVENT_TYPE_PORT_CHANGE: 428 case MLX5_EVENT_TYPE_PORT_CHANGE:
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
index f991f669047e..a53e982a6863 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
@@ -906,21 +906,34 @@ static int esw_inline_mode_to_devlink(u8 mlx5_mode, u8 *mode)
906 return 0; 906 return 0;
907} 907}
908 908
909int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode) 909static int mlx5_devlink_eswitch_check(struct devlink *devlink)
910{ 910{
911 struct mlx5_core_dev *dev; 911 struct mlx5_core_dev *dev = devlink_priv(devlink);
912 u16 cur_mlx5_mode, mlx5_mode = 0;
913 912
914 dev = devlink_priv(devlink); 913 if (MLX5_CAP_GEN(dev, port_type) != MLX5_CAP_PORT_TYPE_ETH)
914 return -EOPNOTSUPP;
915 915
916 if (!MLX5_CAP_GEN(dev, vport_group_manager)) 916 if (!MLX5_CAP_GEN(dev, vport_group_manager))
917 return -EOPNOTSUPP; 917 return -EOPNOTSUPP;
918 918
919 cur_mlx5_mode = dev->priv.eswitch->mode; 919 if (dev->priv.eswitch->mode == SRIOV_NONE)
920
921 if (cur_mlx5_mode == SRIOV_NONE)
922 return -EOPNOTSUPP; 920 return -EOPNOTSUPP;
923 921
922 return 0;
923}
924
925int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode)
926{
927 struct mlx5_core_dev *dev = devlink_priv(devlink);
928 u16 cur_mlx5_mode, mlx5_mode = 0;
929 int err;
930
931 err = mlx5_devlink_eswitch_check(devlink);
932 if (err)
933 return err;
934
935 cur_mlx5_mode = dev->priv.eswitch->mode;
936
924 if (esw_mode_from_devlink(mode, &mlx5_mode)) 937 if (esw_mode_from_devlink(mode, &mlx5_mode))
925 return -EINVAL; 938 return -EINVAL;
926 939
@@ -937,15 +950,12 @@ int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode)
937 950
938int mlx5_devlink_eswitch_mode_get(struct devlink *devlink, u16 *mode) 951int mlx5_devlink_eswitch_mode_get(struct devlink *devlink, u16 *mode)
939{ 952{
940 struct mlx5_core_dev *dev; 953 struct mlx5_core_dev *dev = devlink_priv(devlink);
941 954 int err;
942 dev = devlink_priv(devlink);
943
944 if (!MLX5_CAP_GEN(dev, vport_group_manager))
945 return -EOPNOTSUPP;
946 955
947 if (dev->priv.eswitch->mode == SRIOV_NONE) 956 err = mlx5_devlink_eswitch_check(devlink);
948 return -EOPNOTSUPP; 957 if (err)
958 return err;
949 959
950 return esw_mode_to_devlink(dev->priv.eswitch->mode, mode); 960 return esw_mode_to_devlink(dev->priv.eswitch->mode, mode);
951} 961}
@@ -954,15 +964,12 @@ int mlx5_devlink_eswitch_inline_mode_set(struct devlink *devlink, u8 mode)
954{ 964{
955 struct mlx5_core_dev *dev = devlink_priv(devlink); 965 struct mlx5_core_dev *dev = devlink_priv(devlink);
956 struct mlx5_eswitch *esw = dev->priv.eswitch; 966 struct mlx5_eswitch *esw = dev->priv.eswitch;
957 int num_vports = esw->enabled_vports;
958 int err, vport; 967 int err, vport;
959 u8 mlx5_mode; 968 u8 mlx5_mode;
960 969
961 if (!MLX5_CAP_GEN(dev, vport_group_manager)) 970 err = mlx5_devlink_eswitch_check(devlink);
962 return -EOPNOTSUPP; 971 if (err)
963 972 return err;
964 if (esw->mode == SRIOV_NONE)
965 return -EOPNOTSUPP;
966 973
967 switch (MLX5_CAP_ETH(dev, wqe_inline_mode)) { 974 switch (MLX5_CAP_ETH(dev, wqe_inline_mode)) {
968 case MLX5_CAP_INLINE_MODE_NOT_REQUIRED: 975 case MLX5_CAP_INLINE_MODE_NOT_REQUIRED:
@@ -985,7 +992,7 @@ int mlx5_devlink_eswitch_inline_mode_set(struct devlink *devlink, u8 mode)
985 if (err) 992 if (err)
986 goto out; 993 goto out;
987 994
988 for (vport = 1; vport < num_vports; vport++) { 995 for (vport = 1; vport < esw->enabled_vports; vport++) {
989 err = mlx5_modify_nic_vport_min_inline(dev, vport, mlx5_mode); 996 err = mlx5_modify_nic_vport_min_inline(dev, vport, mlx5_mode);
990 if (err) { 997 if (err) {
991 esw_warn(dev, "Failed to set min inline on vport %d\n", 998 esw_warn(dev, "Failed to set min inline on vport %d\n",
@@ -1010,12 +1017,11 @@ int mlx5_devlink_eswitch_inline_mode_get(struct devlink *devlink, u8 *mode)
1010{ 1017{
1011 struct mlx5_core_dev *dev = devlink_priv(devlink); 1018 struct mlx5_core_dev *dev = devlink_priv(devlink);
1012 struct mlx5_eswitch *esw = dev->priv.eswitch; 1019 struct mlx5_eswitch *esw = dev->priv.eswitch;
1020 int err;
1013 1021
1014 if (!MLX5_CAP_GEN(dev, vport_group_manager)) 1022 err = mlx5_devlink_eswitch_check(devlink);
1015 return -EOPNOTSUPP; 1023 if (err)
1016 1024 return err;
1017 if (esw->mode == SRIOV_NONE)
1018 return -EOPNOTSUPP;
1019 1025
1020 return esw_inline_mode_to_devlink(esw->offloads.inline_mode, mode); 1026 return esw_inline_mode_to_devlink(esw->offloads.inline_mode, mode);
1021} 1027}
@@ -1062,11 +1068,9 @@ int mlx5_devlink_eswitch_encap_mode_set(struct devlink *devlink, u8 encap)
1062 struct mlx5_eswitch *esw = dev->priv.eswitch; 1068 struct mlx5_eswitch *esw = dev->priv.eswitch;
1063 int err; 1069 int err;
1064 1070
1065 if (!MLX5_CAP_GEN(dev, vport_group_manager)) 1071 err = mlx5_devlink_eswitch_check(devlink);
1066 return -EOPNOTSUPP; 1072 if (err)
1067 1073 return err;
1068 if (esw->mode == SRIOV_NONE)
1069 return -EOPNOTSUPP;
1070 1074
1071 if (encap != DEVLINK_ESWITCH_ENCAP_MODE_NONE && 1075 if (encap != DEVLINK_ESWITCH_ENCAP_MODE_NONE &&
1072 (!MLX5_CAP_ESW_FLOWTABLE_FDB(dev, encap) || 1076 (!MLX5_CAP_ESW_FLOWTABLE_FDB(dev, encap) ||
@@ -1105,12 +1109,11 @@ int mlx5_devlink_eswitch_encap_mode_get(struct devlink *devlink, u8 *encap)
1105{ 1109{
1106 struct mlx5_core_dev *dev = devlink_priv(devlink); 1110 struct mlx5_core_dev *dev = devlink_priv(devlink);
1107 struct mlx5_eswitch *esw = dev->priv.eswitch; 1111 struct mlx5_eswitch *esw = dev->priv.eswitch;
1112 int err;
1108 1113
1109 if (!MLX5_CAP_GEN(dev, vport_group_manager)) 1114 err = mlx5_devlink_eswitch_check(devlink);
1110 return -EOPNOTSUPP; 1115 if (err)
1111 1116 return err;
1112 if (esw->mode == SRIOV_NONE)
1113 return -EOPNOTSUPP;
1114 1117
1115 *encap = esw->offloads.encap; 1118 *encap = esw->offloads.encap;
1116 return 0; 1119 return 0;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
index 0e487e8ca634..8f5125ccd8d4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
@@ -862,7 +862,7 @@ struct mlx5_flow_table *mlx5_create_vport_flow_table(struct mlx5_flow_namespace
862 ft_attr.level = level; 862 ft_attr.level = level;
863 ft_attr.prio = prio; 863 ft_attr.prio = prio;
864 864
865 return __mlx5_create_flow_table(ns, &ft_attr, FS_FT_OP_MOD_NORMAL, 0); 865 return __mlx5_create_flow_table(ns, &ft_attr, FS_FT_OP_MOD_NORMAL, vport);
866} 866}
867 867
868struct mlx5_flow_table* 868struct mlx5_flow_table*
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/health.c b/drivers/net/ethernet/mellanox/mlx5/core/health.c
index d0515391d33b..f27f84ffbc85 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/health.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/health.c
@@ -90,7 +90,7 @@ static void trigger_cmd_completions(struct mlx5_core_dev *dev)
90 spin_unlock_irqrestore(&dev->cmd.alloc_lock, flags); 90 spin_unlock_irqrestore(&dev->cmd.alloc_lock, flags);
91 91
92 mlx5_core_dbg(dev, "vector 0x%llx\n", vector); 92 mlx5_core_dbg(dev, "vector 0x%llx\n", vector);
93 mlx5_cmd_comp_handler(dev, vector); 93 mlx5_cmd_comp_handler(dev, vector, true);
94 return; 94 return;
95 95
96no_trig: 96no_trig:
@@ -275,10 +275,8 @@ static void poll_health(unsigned long data)
275 struct mlx5_core_health *health = &dev->priv.health; 275 struct mlx5_core_health *health = &dev->priv.health;
276 u32 count; 276 u32 count;
277 277
278 if (dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) { 278 if (dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR)
279 mod_timer(&health->timer, get_next_poll_jiffies()); 279 goto out;
280 return;
281 }
282 280
283 count = ioread32be(health->health_counter); 281 count = ioread32be(health->health_counter);
284 if (count == health->prev) 282 if (count == health->prev)
@@ -290,8 +288,6 @@ static void poll_health(unsigned long data)
290 if (health->miss_counter == MAX_MISSES) { 288 if (health->miss_counter == MAX_MISSES) {
291 dev_err(&dev->pdev->dev, "device's health compromised - reached miss count\n"); 289 dev_err(&dev->pdev->dev, "device's health compromised - reached miss count\n");
292 print_health_info(dev); 290 print_health_info(dev);
293 } else {
294 mod_timer(&health->timer, get_next_poll_jiffies());
295 } 291 }
296 292
297 if (in_fatal(dev) && !health->sick) { 293 if (in_fatal(dev) && !health->sick) {
@@ -305,6 +301,9 @@ static void poll_health(unsigned long data)
305 "new health works are not permitted at this stage\n"); 301 "new health works are not permitted at this stage\n");
306 spin_unlock(&health->wq_lock); 302 spin_unlock(&health->wq_lock);
307 } 303 }
304
305out:
306 mod_timer(&health->timer, get_next_poll_jiffies());
308} 307}
309 308
310void mlx5_start_health_poll(struct mlx5_core_dev *dev) 309void mlx5_start_health_poll(struct mlx5_core_dev *dev)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
index 0c123d571b4c..13be264587f1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -175,8 +175,9 @@ static struct mlx5_profile profile[] = {
175 }, 175 },
176}; 176};
177 177
178#define FW_INIT_TIMEOUT_MILI 2000 178#define FW_INIT_TIMEOUT_MILI 2000
179#define FW_INIT_WAIT_MS 2 179#define FW_INIT_WAIT_MS 2
180#define FW_PRE_INIT_TIMEOUT_MILI 10000
180 181
181static int wait_fw_init(struct mlx5_core_dev *dev, u32 max_wait_mili) 182static int wait_fw_init(struct mlx5_core_dev *dev, u32 max_wait_mili)
182{ 183{
@@ -537,8 +538,10 @@ static int handle_hca_cap(struct mlx5_core_dev *dev)
537 /* disable cmdif checksum */ 538 /* disable cmdif checksum */
538 MLX5_SET(cmd_hca_cap, set_hca_cap, cmdif_checksum, 0); 539 MLX5_SET(cmd_hca_cap, set_hca_cap, cmdif_checksum, 0);
539 540
540 /* If the HCA supports 4K UARs use it */ 541 /* Enable 4K UAR only when HCA supports it and page size is bigger
541 if (MLX5_CAP_GEN_MAX(dev, uar_4k)) 542 * than 4K.
543 */
544 if (MLX5_CAP_GEN_MAX(dev, uar_4k) && PAGE_SIZE > 4096)
542 MLX5_SET(cmd_hca_cap, set_hca_cap, uar_4k, 1); 545 MLX5_SET(cmd_hca_cap, set_hca_cap, uar_4k, 1);
543 546
544 MLX5_SET(cmd_hca_cap, set_hca_cap, log_uar_page_sz, PAGE_SHIFT - 12); 547 MLX5_SET(cmd_hca_cap, set_hca_cap, log_uar_page_sz, PAGE_SHIFT - 12);
@@ -612,7 +615,6 @@ static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i)
612 struct mlx5_priv *priv = &mdev->priv; 615 struct mlx5_priv *priv = &mdev->priv;
613 struct msix_entry *msix = priv->msix_arr; 616 struct msix_entry *msix = priv->msix_arr;
614 int irq = msix[i + MLX5_EQ_VEC_COMP_BASE].vector; 617 int irq = msix[i + MLX5_EQ_VEC_COMP_BASE].vector;
615 int err;
616 618
617 if (!zalloc_cpumask_var(&priv->irq_info[i].mask, GFP_KERNEL)) { 619 if (!zalloc_cpumask_var(&priv->irq_info[i].mask, GFP_KERNEL)) {
618 mlx5_core_warn(mdev, "zalloc_cpumask_var failed"); 620 mlx5_core_warn(mdev, "zalloc_cpumask_var failed");
@@ -622,18 +624,11 @@ static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i)
622 cpumask_set_cpu(cpumask_local_spread(i, priv->numa_node), 624 cpumask_set_cpu(cpumask_local_spread(i, priv->numa_node),
623 priv->irq_info[i].mask); 625 priv->irq_info[i].mask);
624 626
625 err = irq_set_affinity_hint(irq, priv->irq_info[i].mask); 627 if (IS_ENABLED(CONFIG_SMP) &&
626 if (err) { 628 irq_set_affinity_hint(irq, priv->irq_info[i].mask))
627 mlx5_core_warn(mdev, "irq_set_affinity_hint failed,irq 0x%.4x", 629 mlx5_core_warn(mdev, "irq_set_affinity_hint failed, irq 0x%.4x", irq);
628 irq);
629 goto err_clear_mask;
630 }
631 630
632 return 0; 631 return 0;
633
634err_clear_mask:
635 free_cpumask_var(priv->irq_info[i].mask);
636 return err;
637} 632}
638 633
639static void mlx5_irq_clear_affinity_hint(struct mlx5_core_dev *mdev, int i) 634static void mlx5_irq_clear_affinity_hint(struct mlx5_core_dev *mdev, int i)
@@ -1019,6 +1014,15 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
1019 */ 1014 */
1020 dev->state = MLX5_DEVICE_STATE_UP; 1015 dev->state = MLX5_DEVICE_STATE_UP;
1021 1016
1017 /* wait for firmware to accept initialization segments configurations
1018 */
1019 err = wait_fw_init(dev, FW_PRE_INIT_TIMEOUT_MILI);
1020 if (err) {
1021 dev_err(&dev->pdev->dev, "Firmware over %d MS in pre-initializing state, aborting\n",
1022 FW_PRE_INIT_TIMEOUT_MILI);
1023 goto out;
1024 }
1025
1022 err = mlx5_cmd_init(dev); 1026 err = mlx5_cmd_init(dev);
1023 if (err) { 1027 if (err) {
1024 dev_err(&pdev->dev, "Failed initializing command interface, aborting\n"); 1028 dev_err(&pdev->dev, "Failed initializing command interface, aborting\n");
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
index 9f89c4137d21..0744452a0b18 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
@@ -3334,6 +3334,9 @@ static int mlxsw_sp_inetaddr_vlan_event(struct net_device *vlan_dev,
3334 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_lower_get(vlan_dev); 3334 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_lower_get(vlan_dev);
3335 u16 vid = vlan_dev_vlan_id(vlan_dev); 3335 u16 vid = vlan_dev_vlan_id(vlan_dev);
3336 3336
3337 if (netif_is_bridge_port(vlan_dev))
3338 return 0;
3339
3337 if (mlxsw_sp_port_dev_check(real_dev)) 3340 if (mlxsw_sp_port_dev_check(real_dev))
3338 return mlxsw_sp_inetaddr_vport_event(vlan_dev, real_dev, event, 3341 return mlxsw_sp_inetaddr_vport_event(vlan_dev, real_dev, event,
3339 vid); 3342 vid);
diff --git a/drivers/net/ethernet/qlogic/qed/qed_debug.c b/drivers/net/ethernet/qlogic/qed/qed_debug.c
index 483241b4b05d..a672f6a860dc 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_debug.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_debug.c
@@ -2956,7 +2956,7 @@ static u32 qed_grc_dump_ctx_data(struct qed_hwfn *p_hwfn,
2956 qed_wr(p_hwfn, 2956 qed_wr(p_hwfn,
2957 p_ptt, 2957 p_ptt,
2958 s_storm_defs[storm_id].cm_ctx_wr_addr, 2958 s_storm_defs[storm_id].cm_ctx_wr_addr,
2959 BIT(9) | lid); 2959 (i << 9) | lid);
2960 *(dump_buf + offset) = qed_rd(p_hwfn, 2960 *(dump_buf + offset) = qed_rd(p_hwfn,
2961 p_ptt, 2961 p_ptt,
2962 rd_reg_addr); 2962 rd_reg_addr);
diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
index 537d1236a4fe..715b3aaf83ac 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
@@ -1730,7 +1730,8 @@ void qed_get_protocol_stats(struct qed_dev *cdev,
1730 qed_get_protocol_stats_iscsi(cdev, &stats->iscsi_stats); 1730 qed_get_protocol_stats_iscsi(cdev, &stats->iscsi_stats);
1731 break; 1731 break;
1732 default: 1732 default:
1733 DP_ERR(cdev, "Invalid protocol type = %d\n", type); 1733 DP_VERBOSE(cdev, QED_MSG_SP,
1734 "Invalid protocol type = %d\n", type);
1734 return; 1735 return;
1735 } 1736 }
1736} 1737}
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index 7245b1072518..81312924df14 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -1824,22 +1824,44 @@ struct qlcnic_hardware_ops {
1824 u32 (*get_cap_size)(void *, int); 1824 u32 (*get_cap_size)(void *, int);
1825 void (*set_sys_info)(void *, int, u32); 1825 void (*set_sys_info)(void *, int, u32);
1826 void (*store_cap_mask)(void *, u32); 1826 void (*store_cap_mask)(void *, u32);
1827 bool (*encap_rx_offload) (struct qlcnic_adapter *adapter);
1828 bool (*encap_tx_offload) (struct qlcnic_adapter *adapter);
1827}; 1829};
1828 1830
1829extern struct qlcnic_nic_template qlcnic_vf_ops; 1831extern struct qlcnic_nic_template qlcnic_vf_ops;
1830 1832
1831static inline bool qlcnic_encap_tx_offload(struct qlcnic_adapter *adapter) 1833static inline bool qlcnic_83xx_encap_tx_offload(struct qlcnic_adapter *adapter)
1832{ 1834{
1833 return adapter->ahw->extra_capability[0] & 1835 return adapter->ahw->extra_capability[0] &
1834 QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD; 1836 QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD;
1835} 1837}
1836 1838
1837static inline bool qlcnic_encap_rx_offload(struct qlcnic_adapter *adapter) 1839static inline bool qlcnic_83xx_encap_rx_offload(struct qlcnic_adapter *adapter)
1838{ 1840{
1839 return adapter->ahw->extra_capability[0] & 1841 return adapter->ahw->extra_capability[0] &
1840 QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD; 1842 QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD;
1841} 1843}
1842 1844
1845static inline bool qlcnic_82xx_encap_tx_offload(struct qlcnic_adapter *adapter)
1846{
1847 return false;
1848}
1849
1850static inline bool qlcnic_82xx_encap_rx_offload(struct qlcnic_adapter *adapter)
1851{
1852 return false;
1853}
1854
1855static inline bool qlcnic_encap_rx_offload(struct qlcnic_adapter *adapter)
1856{
1857 return adapter->ahw->hw_ops->encap_rx_offload(adapter);
1858}
1859
1860static inline bool qlcnic_encap_tx_offload(struct qlcnic_adapter *adapter)
1861{
1862 return adapter->ahw->hw_ops->encap_tx_offload(adapter);
1863}
1864
1843static inline int qlcnic_start_firmware(struct qlcnic_adapter *adapter) 1865static inline int qlcnic_start_firmware(struct qlcnic_adapter *adapter)
1844{ 1866{
1845 return adapter->nic_ops->start_firmware(adapter); 1867 return adapter->nic_ops->start_firmware(adapter);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index 4fb68797630e..f7080d0ab874 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -242,6 +242,8 @@ static struct qlcnic_hardware_ops qlcnic_83xx_hw_ops = {
242 .get_cap_size = qlcnic_83xx_get_cap_size, 242 .get_cap_size = qlcnic_83xx_get_cap_size,
243 .set_sys_info = qlcnic_83xx_set_sys_info, 243 .set_sys_info = qlcnic_83xx_set_sys_info,
244 .store_cap_mask = qlcnic_83xx_store_cap_mask, 244 .store_cap_mask = qlcnic_83xx_store_cap_mask,
245 .encap_rx_offload = qlcnic_83xx_encap_rx_offload,
246 .encap_tx_offload = qlcnic_83xx_encap_tx_offload,
245}; 247};
246 248
247static struct qlcnic_nic_template qlcnic_83xx_ops = { 249static struct qlcnic_nic_template qlcnic_83xx_ops = {
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
index 838cc0ceafd8..7848cf04b29a 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
@@ -341,7 +341,7 @@ qlcnic_pcie_sem_lock(struct qlcnic_adapter *adapter, int sem, u32 id_reg)
341 } 341 }
342 return -EIO; 342 return -EIO;
343 } 343 }
344 usleep_range(1000, 1500); 344 udelay(1200);
345 } 345 }
346 346
347 if (id_reg) 347 if (id_reg)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index b6628aaa6e4a..1b5f7d57b6f8 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -632,6 +632,8 @@ static struct qlcnic_hardware_ops qlcnic_hw_ops = {
632 .get_cap_size = qlcnic_82xx_get_cap_size, 632 .get_cap_size = qlcnic_82xx_get_cap_size,
633 .set_sys_info = qlcnic_82xx_set_sys_info, 633 .set_sys_info = qlcnic_82xx_set_sys_info,
634 .store_cap_mask = qlcnic_82xx_store_cap_mask, 634 .store_cap_mask = qlcnic_82xx_store_cap_mask,
635 .encap_rx_offload = qlcnic_82xx_encap_rx_offload,
636 .encap_tx_offload = qlcnic_82xx_encap_tx_offload,
635}; 637};
636 638
637static int qlcnic_check_multi_tx_capability(struct qlcnic_adapter *adapter) 639static int qlcnic_check_multi_tx_capability(struct qlcnic_adapter *adapter)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
index 2f656f395f39..c58180f40844 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
@@ -77,6 +77,8 @@ static struct qlcnic_hardware_ops qlcnic_sriov_vf_hw_ops = {
77 .free_mac_list = qlcnic_sriov_vf_free_mac_list, 77 .free_mac_list = qlcnic_sriov_vf_free_mac_list,
78 .enable_sds_intr = qlcnic_83xx_enable_sds_intr, 78 .enable_sds_intr = qlcnic_83xx_enable_sds_intr,
79 .disable_sds_intr = qlcnic_83xx_disable_sds_intr, 79 .disable_sds_intr = qlcnic_83xx_disable_sds_intr,
80 .encap_rx_offload = qlcnic_83xx_encap_rx_offload,
81 .encap_tx_offload = qlcnic_83xx_encap_tx_offload,
80}; 82};
81 83
82static struct qlcnic_nic_template qlcnic_sriov_vf_ops = { 84static struct qlcnic_nic_template qlcnic_sriov_vf_ops = {
diff --git a/drivers/net/ethernet/qualcomm/emac/emac-mac.c b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
index cc065ffbe4b5..bcd4708b3745 100644
--- a/drivers/net/ethernet/qualcomm/emac/emac-mac.c
+++ b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
@@ -931,7 +931,7 @@ int emac_mac_up(struct emac_adapter *adpt)
931 emac_mac_config(adpt); 931 emac_mac_config(adpt);
932 emac_mac_rx_descs_refill(adpt, &adpt->rx_q); 932 emac_mac_rx_descs_refill(adpt, &adpt->rx_q);
933 933
934 adpt->phydev->irq = PHY_IGNORE_INTERRUPT; 934 adpt->phydev->irq = PHY_POLL;
935 ret = phy_connect_direct(netdev, adpt->phydev, emac_adjust_link, 935 ret = phy_connect_direct(netdev, adpt->phydev, emac_adjust_link,
936 PHY_INTERFACE_MODE_SGMII); 936 PHY_INTERFACE_MODE_SGMII);
937 if (ret) { 937 if (ret) {
diff --git a/drivers/net/ethernet/qualcomm/emac/emac-phy.c b/drivers/net/ethernet/qualcomm/emac/emac-phy.c
index 441c19366489..18461fcb9815 100644
--- a/drivers/net/ethernet/qualcomm/emac/emac-phy.c
+++ b/drivers/net/ethernet/qualcomm/emac/emac-phy.c
@@ -13,15 +13,11 @@
13/* Qualcomm Technologies, Inc. EMAC PHY Controller driver. 13/* Qualcomm Technologies, Inc. EMAC PHY Controller driver.
14 */ 14 */
15 15
16#include <linux/module.h>
17#include <linux/of.h>
18#include <linux/of_net.h>
19#include <linux/of_mdio.h> 16#include <linux/of_mdio.h>
20#include <linux/phy.h> 17#include <linux/phy.h>
21#include <linux/iopoll.h> 18#include <linux/iopoll.h>
22#include <linux/acpi.h> 19#include <linux/acpi.h>
23#include "emac.h" 20#include "emac.h"
24#include "emac-mac.h"
25 21
26/* EMAC base register offsets */ 22/* EMAC base register offsets */
27#define EMAC_MDIO_CTRL 0x001414 23#define EMAC_MDIO_CTRL 0x001414
@@ -52,62 +48,10 @@
52 48
53#define MDIO_WAIT_TIMES 1000 49#define MDIO_WAIT_TIMES 1000
54 50
55#define EMAC_LINK_SPEED_DEFAULT (\
56 EMAC_LINK_SPEED_10_HALF |\
57 EMAC_LINK_SPEED_10_FULL |\
58 EMAC_LINK_SPEED_100_HALF |\
59 EMAC_LINK_SPEED_100_FULL |\
60 EMAC_LINK_SPEED_1GB_FULL)
61
62/**
63 * emac_phy_mdio_autopoll_disable() - disable mdio autopoll
64 * @adpt: the emac adapter
65 *
66 * The autopoll feature takes over the MDIO bus. In order for
67 * the PHY driver to be able to talk to the PHY over the MDIO
68 * bus, we need to temporarily disable the autopoll feature.
69 */
70static int emac_phy_mdio_autopoll_disable(struct emac_adapter *adpt)
71{
72 u32 val;
73
74 /* disable autopoll */
75 emac_reg_update32(adpt->base + EMAC_MDIO_CTRL, MDIO_AP_EN, 0);
76
77 /* wait for any mdio polling to complete */
78 if (!readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, val,
79 !(val & MDIO_BUSY), 100, MDIO_WAIT_TIMES * 100))
80 return 0;
81
82 /* failed to disable; ensure it is enabled before returning */
83 emac_reg_update32(adpt->base + EMAC_MDIO_CTRL, 0, MDIO_AP_EN);
84
85 return -EBUSY;
86}
87
88/**
89 * emac_phy_mdio_autopoll_disable() - disable mdio autopoll
90 * @adpt: the emac adapter
91 *
92 * The EMAC has the ability to poll the external PHY on the MDIO
93 * bus for link state changes. This eliminates the need for the
94 * driver to poll the phy. If if the link state does change,
95 * the EMAC issues an interrupt on behalf of the PHY.
96 */
97static void emac_phy_mdio_autopoll_enable(struct emac_adapter *adpt)
98{
99 emac_reg_update32(adpt->base + EMAC_MDIO_CTRL, 0, MDIO_AP_EN);
100}
101
102static int emac_mdio_read(struct mii_bus *bus, int addr, int regnum) 51static int emac_mdio_read(struct mii_bus *bus, int addr, int regnum)
103{ 52{
104 struct emac_adapter *adpt = bus->priv; 53 struct emac_adapter *adpt = bus->priv;
105 u32 reg; 54 u32 reg;
106 int ret;
107
108 ret = emac_phy_mdio_autopoll_disable(adpt);
109 if (ret)
110 return ret;
111 55
112 emac_reg_update32(adpt->base + EMAC_PHY_STS, PHY_ADDR_BMSK, 56 emac_reg_update32(adpt->base + EMAC_PHY_STS, PHY_ADDR_BMSK,
113 (addr << PHY_ADDR_SHFT)); 57 (addr << PHY_ADDR_SHFT));
@@ -122,24 +66,15 @@ static int emac_mdio_read(struct mii_bus *bus, int addr, int regnum)
122 if (readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, reg, 66 if (readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, reg,
123 !(reg & (MDIO_START | MDIO_BUSY)), 67 !(reg & (MDIO_START | MDIO_BUSY)),
124 100, MDIO_WAIT_TIMES * 100)) 68 100, MDIO_WAIT_TIMES * 100))
125 ret = -EIO; 69 return -EIO;
126 else
127 ret = (reg >> MDIO_DATA_SHFT) & MDIO_DATA_BMSK;
128 70
129 emac_phy_mdio_autopoll_enable(adpt); 71 return (reg >> MDIO_DATA_SHFT) & MDIO_DATA_BMSK;
130
131 return ret;
132} 72}
133 73
134static int emac_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val) 74static int emac_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val)
135{ 75{
136 struct emac_adapter *adpt = bus->priv; 76 struct emac_adapter *adpt = bus->priv;
137 u32 reg; 77 u32 reg;
138 int ret;
139
140 ret = emac_phy_mdio_autopoll_disable(adpt);
141 if (ret)
142 return ret;
143 78
144 emac_reg_update32(adpt->base + EMAC_PHY_STS, PHY_ADDR_BMSK, 79 emac_reg_update32(adpt->base + EMAC_PHY_STS, PHY_ADDR_BMSK,
145 (addr << PHY_ADDR_SHFT)); 80 (addr << PHY_ADDR_SHFT));
@@ -155,11 +90,9 @@ static int emac_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val)
155 if (readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, reg, 90 if (readl_poll_timeout(adpt->base + EMAC_MDIO_CTRL, reg,
156 !(reg & (MDIO_START | MDIO_BUSY)), 100, 91 !(reg & (MDIO_START | MDIO_BUSY)), 100,
157 MDIO_WAIT_TIMES * 100)) 92 MDIO_WAIT_TIMES * 100))
158 ret = -EIO; 93 return -EIO;
159 94
160 emac_phy_mdio_autopoll_enable(adpt); 95 return 0;
161
162 return ret;
163} 96}
164 97
165/* Configure the MDIO bus and connect the external PHY */ 98/* Configure the MDIO bus and connect the external PHY */
diff --git a/drivers/net/ethernet/qualcomm/emac/emac.c b/drivers/net/ethernet/qualcomm/emac/emac.c
index 28a8cdc36485..98a326faea29 100644
--- a/drivers/net/ethernet/qualcomm/emac/emac.c
+++ b/drivers/net/ethernet/qualcomm/emac/emac.c
@@ -50,19 +50,7 @@
50#define DMAR_DLY_CNT_DEF 15 50#define DMAR_DLY_CNT_DEF 15
51#define DMAW_DLY_CNT_DEF 4 51#define DMAW_DLY_CNT_DEF 4
52 52
53#define IMR_NORMAL_MASK (\ 53#define IMR_NORMAL_MASK (ISR_ERROR | ISR_OVER | ISR_TX_PKT)
54 ISR_ERROR |\
55 ISR_GPHY_LINK |\
56 ISR_TX_PKT |\
57 GPHY_WAKEUP_INT)
58
59#define IMR_EXTENDED_MASK (\
60 SW_MAN_INT |\
61 ISR_OVER |\
62 ISR_ERROR |\
63 ISR_GPHY_LINK |\
64 ISR_TX_PKT |\
65 GPHY_WAKEUP_INT)
66 54
67#define ISR_TX_PKT (\ 55#define ISR_TX_PKT (\
68 TX_PKT_INT |\ 56 TX_PKT_INT |\
@@ -70,10 +58,6 @@
70 TX_PKT_INT2 |\ 58 TX_PKT_INT2 |\
71 TX_PKT_INT3) 59 TX_PKT_INT3)
72 60
73#define ISR_GPHY_LINK (\
74 GPHY_LINK_UP_INT |\
75 GPHY_LINK_DOWN_INT)
76
77#define ISR_OVER (\ 61#define ISR_OVER (\
78 RFD0_UR_INT |\ 62 RFD0_UR_INT |\
79 RFD1_UR_INT |\ 63 RFD1_UR_INT |\
@@ -187,10 +171,6 @@ irqreturn_t emac_isr(int _irq, void *data)
187 if (status & ISR_OVER) 171 if (status & ISR_OVER)
188 net_warn_ratelimited("warning: TX/RX overflow\n"); 172 net_warn_ratelimited("warning: TX/RX overflow\n");
189 173
190 /* link event */
191 if (status & ISR_GPHY_LINK)
192 phy_mac_interrupt(adpt->phydev, !!(status & GPHY_LINK_UP_INT));
193
194exit: 174exit:
195 /* enable the interrupt */ 175 /* enable the interrupt */
196 writel(irq->mask, adpt->base + EMAC_INT_MASK); 176 writel(irq->mask, adpt->base + EMAC_INT_MASK);
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 3cd7989c007d..784782da3a85 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -230,18 +230,6 @@ static void ravb_ring_free(struct net_device *ndev, int q)
230 int ring_size; 230 int ring_size;
231 int i; 231 int i;
232 232
233 /* Free RX skb ringbuffer */
234 if (priv->rx_skb[q]) {
235 for (i = 0; i < priv->num_rx_ring[q]; i++)
236 dev_kfree_skb(priv->rx_skb[q][i]);
237 }
238 kfree(priv->rx_skb[q]);
239 priv->rx_skb[q] = NULL;
240
241 /* Free aligned TX buffers */
242 kfree(priv->tx_align[q]);
243 priv->tx_align[q] = NULL;
244
245 if (priv->rx_ring[q]) { 233 if (priv->rx_ring[q]) {
246 for (i = 0; i < priv->num_rx_ring[q]; i++) { 234 for (i = 0; i < priv->num_rx_ring[q]; i++) {
247 struct ravb_ex_rx_desc *desc = &priv->rx_ring[q][i]; 235 struct ravb_ex_rx_desc *desc = &priv->rx_ring[q][i];
@@ -270,6 +258,18 @@ static void ravb_ring_free(struct net_device *ndev, int q)
270 priv->tx_ring[q] = NULL; 258 priv->tx_ring[q] = NULL;
271 } 259 }
272 260
261 /* Free RX skb ringbuffer */
262 if (priv->rx_skb[q]) {
263 for (i = 0; i < priv->num_rx_ring[q]; i++)
264 dev_kfree_skb(priv->rx_skb[q][i]);
265 }
266 kfree(priv->rx_skb[q]);
267 priv->rx_skb[q] = NULL;
268
269 /* Free aligned TX buffers */
270 kfree(priv->tx_align[q]);
271 priv->tx_align[q] = NULL;
272
273 /* Free TX skb ringbuffer. 273 /* Free TX skb ringbuffer.
274 * SKBs are freed by ravb_tx_free() call above. 274 * SKBs are freed by ravb_tx_free() call above.
275 */ 275 */
diff --git a/drivers/net/ethernet/rocker/rocker_ofdpa.c b/drivers/net/ethernet/rocker/rocker_ofdpa.c
index 2ae852454780..a9ce82d3e9cf 100644
--- a/drivers/net/ethernet/rocker/rocker_ofdpa.c
+++ b/drivers/net/ethernet/rocker/rocker_ofdpa.c
@@ -1505,8 +1505,8 @@ static int ofdpa_port_ipv4_nh(struct ofdpa_port *ofdpa_port,
1505 *index = entry->index; 1505 *index = entry->index;
1506 resolved = false; 1506 resolved = false;
1507 } else if (removing) { 1507 } else if (removing) {
1508 ofdpa_neigh_del(trans, found);
1509 *index = found->index; 1508 *index = found->index;
1509 ofdpa_neigh_del(trans, found);
1510 } else if (updating) { 1510 } else if (updating) {
1511 ofdpa_neigh_update(found, trans, NULL, false); 1511 ofdpa_neigh_update(found, trans, NULL, false);
1512 resolved = !is_zero_ether_addr(found->eth_dst); 1512 resolved = !is_zero_ether_addr(found->eth_dst);
diff --git a/drivers/net/ethernet/sfc/ef10.c b/drivers/net/ethernet/sfc/ef10.c
index 78efb2822b86..78f9e43420e0 100644
--- a/drivers/net/ethernet/sfc/ef10.c
+++ b/drivers/net/ethernet/sfc/ef10.c
@@ -4172,7 +4172,7 @@ found:
4172 * recipients 4172 * recipients
4173 */ 4173 */
4174 if (is_mc_recip) { 4174 if (is_mc_recip) {
4175 MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_IN_LEN); 4175 MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_EXT_IN_LEN);
4176 unsigned int depth, i; 4176 unsigned int depth, i;
4177 4177
4178 memset(inbuf, 0, sizeof(inbuf)); 4178 memset(inbuf, 0, sizeof(inbuf));
@@ -4320,7 +4320,7 @@ static int efx_ef10_filter_remove_internal(struct efx_nic *efx,
4320 efx_ef10_filter_set_entry(table, filter_idx, NULL, 0); 4320 efx_ef10_filter_set_entry(table, filter_idx, NULL, 0);
4321 } else { 4321 } else {
4322 efx_mcdi_display_error(efx, MC_CMD_FILTER_OP, 4322 efx_mcdi_display_error(efx, MC_CMD_FILTER_OP,
4323 MC_CMD_FILTER_OP_IN_LEN, 4323 MC_CMD_FILTER_OP_EXT_IN_LEN,
4324 NULL, 0, rc); 4324 NULL, 0, rc);
4325 } 4325 }
4326 } 4326 }
@@ -4453,7 +4453,7 @@ static s32 efx_ef10_filter_rfs_insert(struct efx_nic *efx,
4453 struct efx_filter_spec *spec) 4453 struct efx_filter_spec *spec)
4454{ 4454{
4455 struct efx_ef10_filter_table *table = efx->filter_state; 4455 struct efx_ef10_filter_table *table = efx->filter_state;
4456 MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_IN_LEN); 4456 MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_EXT_IN_LEN);
4457 struct efx_filter_spec *saved_spec; 4457 struct efx_filter_spec *saved_spec;
4458 unsigned int hash, i, depth = 1; 4458 unsigned int hash, i, depth = 1;
4459 bool replacing = false; 4459 bool replacing = false;
@@ -4940,7 +4940,7 @@ not_restored:
4940static void efx_ef10_filter_table_remove(struct efx_nic *efx) 4940static void efx_ef10_filter_table_remove(struct efx_nic *efx)
4941{ 4941{
4942 struct efx_ef10_filter_table *table = efx->filter_state; 4942 struct efx_ef10_filter_table *table = efx->filter_state;
4943 MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_IN_LEN); 4943 MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_EXT_IN_LEN);
4944 struct efx_filter_spec *spec; 4944 struct efx_filter_spec *spec;
4945 unsigned int filter_idx; 4945 unsigned int filter_idx;
4946 int rc; 4946 int rc;
@@ -5105,6 +5105,7 @@ static int efx_ef10_filter_insert_addr_list(struct efx_nic *efx,
5105 5105
5106 /* Insert/renew filters */ 5106 /* Insert/renew filters */
5107 for (i = 0; i < addr_count; i++) { 5107 for (i = 0; i < addr_count; i++) {
5108 EFX_WARN_ON_PARANOID(ids[i] != EFX_EF10_FILTER_ID_INVALID);
5108 efx_filter_init_rx(&spec, EFX_FILTER_PRI_AUTO, filter_flags, 0); 5109 efx_filter_init_rx(&spec, EFX_FILTER_PRI_AUTO, filter_flags, 0);
5109 efx_filter_set_eth_local(&spec, vlan->vid, addr_list[i].addr); 5110 efx_filter_set_eth_local(&spec, vlan->vid, addr_list[i].addr);
5110 rc = efx_ef10_filter_insert(efx, &spec, true); 5111 rc = efx_ef10_filter_insert(efx, &spec, true);
@@ -5122,11 +5123,11 @@ static int efx_ef10_filter_insert_addr_list(struct efx_nic *efx,
5122 } 5123 }
5123 return rc; 5124 return rc;
5124 } else { 5125 } else {
5125 /* mark as not inserted, and carry on */ 5126 /* keep invalid ID, and carry on */
5126 rc = EFX_EF10_FILTER_ID_INVALID;
5127 } 5127 }
5128 } else {
5129 ids[i] = efx_ef10_filter_get_unsafe_id(rc);
5128 } 5130 }
5129 ids[i] = efx_ef10_filter_get_unsafe_id(rc);
5130 } 5131 }
5131 5132
5132 if (multicast && rollback) { 5133 if (multicast && rollback) {
diff --git a/drivers/net/ethernet/sfc/ef10_sriov.c b/drivers/net/ethernet/sfc/ef10_sriov.c
index b7e4345c990d..019cef1d3cf7 100644
--- a/drivers/net/ethernet/sfc/ef10_sriov.c
+++ b/drivers/net/ethernet/sfc/ef10_sriov.c
@@ -661,8 +661,6 @@ restore_filters:
661 up_write(&vf->efx->filter_sem); 661 up_write(&vf->efx->filter_sem);
662 mutex_unlock(&vf->efx->mac_lock); 662 mutex_unlock(&vf->efx->mac_lock);
663 663
664 up_write(&vf->efx->filter_sem);
665
666 rc2 = efx_net_open(vf->efx->net_dev); 664 rc2 = efx_net_open(vf->efx->net_dev);
667 if (rc2) 665 if (rc2)
668 goto reset_nic; 666 goto reset_nic;
diff --git a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c
index 489ef146201e..6a9c954492f2 100644
--- a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c
+++ b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c
@@ -37,6 +37,7 @@
37#define TSE_PCS_CONTROL_AN_EN_MASK BIT(12) 37#define TSE_PCS_CONTROL_AN_EN_MASK BIT(12)
38#define TSE_PCS_CONTROL_REG 0x00 38#define TSE_PCS_CONTROL_REG 0x00
39#define TSE_PCS_CONTROL_RESTART_AN_MASK BIT(9) 39#define TSE_PCS_CONTROL_RESTART_AN_MASK BIT(9)
40#define TSE_PCS_CTRL_AUTONEG_SGMII 0x1140
40#define TSE_PCS_IF_MODE_REG 0x28 41#define TSE_PCS_IF_MODE_REG 0x28
41#define TSE_PCS_LINK_TIMER_0_REG 0x24 42#define TSE_PCS_LINK_TIMER_0_REG 0x24
42#define TSE_PCS_LINK_TIMER_1_REG 0x26 43#define TSE_PCS_LINK_TIMER_1_REG 0x26
@@ -65,6 +66,7 @@
65#define TSE_PCS_SW_RESET_TIMEOUT 100 66#define TSE_PCS_SW_RESET_TIMEOUT 100
66#define TSE_PCS_USE_SGMII_AN_MASK BIT(1) 67#define TSE_PCS_USE_SGMII_AN_MASK BIT(1)
67#define TSE_PCS_USE_SGMII_ENA BIT(0) 68#define TSE_PCS_USE_SGMII_ENA BIT(0)
69#define TSE_PCS_IF_USE_SGMII 0x03
68 70
69#define SGMII_ADAPTER_CTRL_REG 0x00 71#define SGMII_ADAPTER_CTRL_REG 0x00
70#define SGMII_ADAPTER_DISABLE 0x0001 72#define SGMII_ADAPTER_DISABLE 0x0001
@@ -101,7 +103,9 @@ int tse_pcs_init(void __iomem *base, struct tse_pcs *pcs)
101{ 103{
102 int ret = 0; 104 int ret = 0;
103 105
104 writew(TSE_PCS_USE_SGMII_ENA, base + TSE_PCS_IF_MODE_REG); 106 writew(TSE_PCS_IF_USE_SGMII, base + TSE_PCS_IF_MODE_REG);
107
108 writew(TSE_PCS_CTRL_AUTONEG_SGMII, base + TSE_PCS_CONTROL_REG);
105 109
106 writew(TSE_PCS_SGMII_LINK_TIMER_0, base + TSE_PCS_LINK_TIMER_0_REG); 110 writew(TSE_PCS_SGMII_LINK_TIMER_0, base + TSE_PCS_LINK_TIMER_0_REG);
107 writew(TSE_PCS_SGMII_LINK_TIMER_1, base + TSE_PCS_LINK_TIMER_1_REG); 111 writew(TSE_PCS_SGMII_LINK_TIMER_1, base + TSE_PCS_LINK_TIMER_1_REG);
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
index aa6476439aee..e0ef02f9503b 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
@@ -214,13 +214,13 @@ static int dwmac4_wrback_get_tx_timestamp_status(struct dma_desc *p)
214{ 214{
215 /* Context type from W/B descriptor must be zero */ 215 /* Context type from W/B descriptor must be zero */
216 if (le32_to_cpu(p->des3) & TDES3_CONTEXT_TYPE) 216 if (le32_to_cpu(p->des3) & TDES3_CONTEXT_TYPE)
217 return -EINVAL; 217 return 0;
218 218
219 /* Tx Timestamp Status is 1 so des0 and des1'll have valid values */ 219 /* Tx Timestamp Status is 1 so des0 and des1'll have valid values */
220 if (le32_to_cpu(p->des3) & TDES3_TIMESTAMP_STATUS) 220 if (le32_to_cpu(p->des3) & TDES3_TIMESTAMP_STATUS)
221 return 0; 221 return 1;
222 222
223 return 1; 223 return 0;
224} 224}
225 225
226static inline u64 dwmac4_get_timestamp(void *desc, u32 ats) 226static inline u64 dwmac4_get_timestamp(void *desc, u32 ats)
@@ -282,7 +282,10 @@ static int dwmac4_wrback_get_rx_timestamp_status(void *desc, u32 ats)
282 } 282 }
283 } 283 }
284exit: 284exit:
285 return ret; 285 if (likely(ret == 0))
286 return 1;
287
288 return 0;
286} 289}
287 290
288static void dwmac4_rd_init_rx_desc(struct dma_desc *p, int disable_rx_ic, 291static void dwmac4_rd_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index a74c481401c4..6e4cbc6ce0ef 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -434,14 +434,14 @@ static void stmmac_get_tx_hwtstamp(struct stmmac_priv *priv,
434 return; 434 return;
435 435
436 /* check tx tstamp status */ 436 /* check tx tstamp status */
437 if (!priv->hw->desc->get_tx_timestamp_status(p)) { 437 if (priv->hw->desc->get_tx_timestamp_status(p)) {
438 /* get the valid tstamp */ 438 /* get the valid tstamp */
439 ns = priv->hw->desc->get_timestamp(p, priv->adv_ts); 439 ns = priv->hw->desc->get_timestamp(p, priv->adv_ts);
440 440
441 memset(&shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps)); 441 memset(&shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps));
442 shhwtstamp.hwtstamp = ns_to_ktime(ns); 442 shhwtstamp.hwtstamp = ns_to_ktime(ns);
443 443
444 netdev_info(priv->dev, "get valid TX hw timestamp %llu\n", ns); 444 netdev_dbg(priv->dev, "get valid TX hw timestamp %llu\n", ns);
445 /* pass tstamp to stack */ 445 /* pass tstamp to stack */
446 skb_tstamp_tx(skb, &shhwtstamp); 446 skb_tstamp_tx(skb, &shhwtstamp);
447 } 447 }
@@ -468,19 +468,19 @@ static void stmmac_get_rx_hwtstamp(struct stmmac_priv *priv, struct dma_desc *p,
468 return; 468 return;
469 469
470 /* Check if timestamp is available */ 470 /* Check if timestamp is available */
471 if (!priv->hw->desc->get_rx_timestamp_status(p, priv->adv_ts)) { 471 if (priv->hw->desc->get_rx_timestamp_status(p, priv->adv_ts)) {
472 /* For GMAC4, the valid timestamp is from CTX next desc. */ 472 /* For GMAC4, the valid timestamp is from CTX next desc. */
473 if (priv->plat->has_gmac4) 473 if (priv->plat->has_gmac4)
474 ns = priv->hw->desc->get_timestamp(np, priv->adv_ts); 474 ns = priv->hw->desc->get_timestamp(np, priv->adv_ts);
475 else 475 else
476 ns = priv->hw->desc->get_timestamp(p, priv->adv_ts); 476 ns = priv->hw->desc->get_timestamp(p, priv->adv_ts);
477 477
478 netdev_info(priv->dev, "get valid RX hw timestamp %llu\n", ns); 478 netdev_dbg(priv->dev, "get valid RX hw timestamp %llu\n", ns);
479 shhwtstamp = skb_hwtstamps(skb); 479 shhwtstamp = skb_hwtstamps(skb);
480 memset(shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps)); 480 memset(shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps));
481 shhwtstamp->hwtstamp = ns_to_ktime(ns); 481 shhwtstamp->hwtstamp = ns_to_ktime(ns);
482 } else { 482 } else {
483 netdev_err(priv->dev, "cannot get RX hw timestamp\n"); 483 netdev_dbg(priv->dev, "cannot get RX hw timestamp\n");
484 } 484 }
485} 485}
486 486
@@ -546,7 +546,10 @@ static int stmmac_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
546 /* PTP v1, UDP, any kind of event packet */ 546 /* PTP v1, UDP, any kind of event packet */
547 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT; 547 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
548 /* take time stamp for all event messages */ 548 /* take time stamp for all event messages */
549 snap_type_sel = PTP_TCR_SNAPTYPSEL_1; 549 if (priv->plat->has_gmac4)
550 snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
551 else
552 snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
550 553
551 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 554 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
552 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 555 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
@@ -578,7 +581,10 @@ static int stmmac_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
578 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT; 581 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
579 ptp_v2 = PTP_TCR_TSVER2ENA; 582 ptp_v2 = PTP_TCR_TSVER2ENA;
580 /* take time stamp for all event messages */ 583 /* take time stamp for all event messages */
581 snap_type_sel = PTP_TCR_SNAPTYPSEL_1; 584 if (priv->plat->has_gmac4)
585 snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
586 else
587 snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
582 588
583 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 589 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
584 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 590 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
@@ -612,7 +618,10 @@ static int stmmac_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
612 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; 618 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
613 ptp_v2 = PTP_TCR_TSVER2ENA; 619 ptp_v2 = PTP_TCR_TSVER2ENA;
614 /* take time stamp for all event messages */ 620 /* take time stamp for all event messages */
615 snap_type_sel = PTP_TCR_SNAPTYPSEL_1; 621 if (priv->plat->has_gmac4)
622 snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
623 else
624 snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
616 625
617 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 626 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
618 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 627 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
@@ -1208,7 +1217,7 @@ static int init_dma_rx_desc_rings(struct net_device *dev, gfp_t flags)
1208 u32 rx_count = priv->plat->rx_queues_to_use; 1217 u32 rx_count = priv->plat->rx_queues_to_use;
1209 unsigned int bfsize = 0; 1218 unsigned int bfsize = 0;
1210 int ret = -ENOMEM; 1219 int ret = -ENOMEM;
1211 u32 queue; 1220 int queue;
1212 int i; 1221 int i;
1213 1222
1214 if (priv->hw->mode->set_16kib_bfsize) 1223 if (priv->hw->mode->set_16kib_bfsize)
@@ -2724,7 +2733,7 @@ static void stmmac_tso_allocator(struct stmmac_priv *priv, unsigned int des,
2724 2733
2725 priv->hw->desc->prepare_tso_tx_desc(desc, 0, buff_size, 2734 priv->hw->desc->prepare_tso_tx_desc(desc, 0, buff_size,
2726 0, 1, 2735 0, 1,
2727 (last_segment) && (buff_size < TSO_MAX_BUFF_SIZE), 2736 (last_segment) && (tmp_len <= TSO_MAX_BUFF_SIZE),
2728 0, 0); 2737 0, 0);
2729 2738
2730 tmp_len -= TSO_MAX_BUFF_SIZE; 2739 tmp_len -= TSO_MAX_BUFF_SIZE;
@@ -2822,7 +2831,6 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)
2822 2831
2823 tx_q->tx_skbuff_dma[first_entry].buf = des; 2832 tx_q->tx_skbuff_dma[first_entry].buf = des;
2824 tx_q->tx_skbuff_dma[first_entry].len = skb_headlen(skb); 2833 tx_q->tx_skbuff_dma[first_entry].len = skb_headlen(skb);
2825 tx_q->tx_skbuff[first_entry] = skb;
2826 2834
2827 first->des0 = cpu_to_le32(des); 2835 first->des0 = cpu_to_le32(des);
2828 2836
@@ -2856,6 +2864,14 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)
2856 2864
2857 tx_q->tx_skbuff_dma[tx_q->cur_tx].last_segment = true; 2865 tx_q->tx_skbuff_dma[tx_q->cur_tx].last_segment = true;
2858 2866
2867 /* Only the last descriptor gets to point to the skb. */
2868 tx_q->tx_skbuff[tx_q->cur_tx] = skb;
2869
2870 /* We've used all descriptors we need for this skb, however,
2871 * advance cur_tx so that it references a fresh descriptor.
2872 * ndo_start_xmit will fill this descriptor the next time it's
2873 * called and stmmac_tx_clean may clean up to this descriptor.
2874 */
2859 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE); 2875 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE);
2860 2876
2861 if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) { 2877 if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) {
@@ -2947,7 +2963,8 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
2947 int i, csum_insertion = 0, is_jumbo = 0; 2963 int i, csum_insertion = 0, is_jumbo = 0;
2948 u32 queue = skb_get_queue_mapping(skb); 2964 u32 queue = skb_get_queue_mapping(skb);
2949 int nfrags = skb_shinfo(skb)->nr_frags; 2965 int nfrags = skb_shinfo(skb)->nr_frags;
2950 unsigned int entry, first_entry; 2966 int entry;
2967 unsigned int first_entry;
2951 struct dma_desc *desc, *first; 2968 struct dma_desc *desc, *first;
2952 struct stmmac_tx_queue *tx_q; 2969 struct stmmac_tx_queue *tx_q;
2953 unsigned int enh_desc; 2970 unsigned int enh_desc;
@@ -2988,8 +3005,6 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
2988 3005
2989 first = desc; 3006 first = desc;
2990 3007
2991 tx_q->tx_skbuff[first_entry] = skb;
2992
2993 enh_desc = priv->plat->enh_desc; 3008 enh_desc = priv->plat->enh_desc;
2994 /* To program the descriptors according to the size of the frame */ 3009 /* To program the descriptors according to the size of the frame */
2995 if (enh_desc) 3010 if (enh_desc)
@@ -3037,8 +3052,15 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
3037 skb->len); 3052 skb->len);
3038 } 3053 }
3039 3054
3040 entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE); 3055 /* Only the last descriptor gets to point to the skb. */
3056 tx_q->tx_skbuff[entry] = skb;
3041 3057
3058 /* We've used all descriptors we need for this skb, however,
3059 * advance cur_tx so that it references a fresh descriptor.
3060 * ndo_start_xmit will fill this descriptor the next time it's
3061 * called and stmmac_tx_clean may clean up to this descriptor.
3062 */
3063 entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE);
3042 tx_q->cur_tx = entry; 3064 tx_q->cur_tx = entry;
3043 3065
3044 if (netif_msg_pktdata(priv)) { 3066 if (netif_msg_pktdata(priv)) {
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h
index 48fb72fc423c..f4b31d69f60e 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h
@@ -59,7 +59,8 @@
59/* Enable Snapshot for Messages Relevant to Master */ 59/* Enable Snapshot for Messages Relevant to Master */
60#define PTP_TCR_TSMSTRENA BIT(15) 60#define PTP_TCR_TSMSTRENA BIT(15)
61/* Select PTP packets for Taking Snapshots */ 61/* Select PTP packets for Taking Snapshots */
62#define PTP_TCR_SNAPTYPSEL_1 GENMASK(17, 16) 62#define PTP_TCR_SNAPTYPSEL_1 BIT(16)
63#define PTP_GMAC4_TCR_SNAPTYPSEL_1 GENMASK(17, 16)
63/* Enable MAC address for PTP Frame Filtering */ 64/* Enable MAC address for PTP Frame Filtering */
64#define PTP_TCR_TSENMACADDR BIT(18) 65#define PTP_TCR_TSENMACADDR BIT(18)
65 66
diff --git a/drivers/net/ethernet/ti/cpsw-common.c b/drivers/net/ethernet/ti/cpsw-common.c
index 1562ab4151e1..56ba411421f0 100644
--- a/drivers/net/ethernet/ti/cpsw-common.c
+++ b/drivers/net/ethernet/ti/cpsw-common.c
@@ -90,7 +90,7 @@ int ti_cm_get_macid(struct device *dev, int slave, u8 *mac_addr)
90 if (of_device_is_compatible(dev->of_node, "ti,dm816-emac")) 90 if (of_device_is_compatible(dev->of_node, "ti,dm816-emac"))
91 return cpsw_am33xx_cm_get_macid(dev, 0x30, slave, mac_addr); 91 return cpsw_am33xx_cm_get_macid(dev, 0x30, slave, mac_addr);
92 92
93 if (of_machine_is_compatible("ti,am4372")) 93 if (of_machine_is_compatible("ti,am43"))
94 return cpsw_am33xx_cm_get_macid(dev, 0x630, slave, mac_addr); 94 return cpsw_am33xx_cm_get_macid(dev, 0x630, slave, mac_addr);
95 95
96 if (of_machine_is_compatible("ti,dra7")) 96 if (of_machine_is_compatible("ti,dra7"))
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index dec5d563ab19..199459bd6961 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -1007,7 +1007,7 @@ static void geneve_setup(struct net_device *dev)
1007 1007
1008 dev->netdev_ops = &geneve_netdev_ops; 1008 dev->netdev_ops = &geneve_netdev_ops;
1009 dev->ethtool_ops = &geneve_ethtool_ops; 1009 dev->ethtool_ops = &geneve_ethtool_ops;
1010 dev->destructor = free_netdev; 1010 dev->needs_free_netdev = true;
1011 1011
1012 SET_NETDEV_DEVTYPE(dev, &geneve_type); 1012 SET_NETDEV_DEVTYPE(dev, &geneve_type);
1013 1013
@@ -1133,7 +1133,7 @@ static int geneve_configure(struct net *net, struct net_device *dev,
1133 1133
1134 /* make enough headroom for basic scenario */ 1134 /* make enough headroom for basic scenario */
1135 encap_len = GENEVE_BASE_HLEN + ETH_HLEN; 1135 encap_len = GENEVE_BASE_HLEN + ETH_HLEN;
1136 if (ip_tunnel_info_af(info) == AF_INET) { 1136 if (!metadata && ip_tunnel_info_af(info) == AF_INET) {
1137 encap_len += sizeof(struct iphdr); 1137 encap_len += sizeof(struct iphdr);
1138 dev->max_mtu -= sizeof(struct iphdr); 1138 dev->max_mtu -= sizeof(struct iphdr);
1139 } else { 1139 } else {
@@ -1293,7 +1293,7 @@ static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
1293 if (nla_put_u32(skb, IFLA_GENEVE_ID, vni)) 1293 if (nla_put_u32(skb, IFLA_GENEVE_ID, vni))
1294 goto nla_put_failure; 1294 goto nla_put_failure;
1295 1295
1296 if (ip_tunnel_info_af(info) == AF_INET) { 1296 if (rtnl_dereference(geneve->sock4)) {
1297 if (nla_put_in_addr(skb, IFLA_GENEVE_REMOTE, 1297 if (nla_put_in_addr(skb, IFLA_GENEVE_REMOTE,
1298 info->key.u.ipv4.dst)) 1298 info->key.u.ipv4.dst))
1299 goto nla_put_failure; 1299 goto nla_put_failure;
@@ -1302,8 +1302,10 @@ static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
1302 !!(info->key.tun_flags & TUNNEL_CSUM))) 1302 !!(info->key.tun_flags & TUNNEL_CSUM)))
1303 goto nla_put_failure; 1303 goto nla_put_failure;
1304 1304
1305 }
1306
1305#if IS_ENABLED(CONFIG_IPV6) 1307#if IS_ENABLED(CONFIG_IPV6)
1306 } else { 1308 if (rtnl_dereference(geneve->sock6)) {
1307 if (nla_put_in6_addr(skb, IFLA_GENEVE_REMOTE6, 1309 if (nla_put_in6_addr(skb, IFLA_GENEVE_REMOTE6,
1308 &info->key.u.ipv6.dst)) 1310 &info->key.u.ipv6.dst))
1309 goto nla_put_failure; 1311 goto nla_put_failure;
@@ -1315,8 +1317,8 @@ static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
1315 if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX, 1317 if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
1316 !geneve->use_udp6_rx_checksums)) 1318 !geneve->use_udp6_rx_checksums))
1317 goto nla_put_failure; 1319 goto nla_put_failure;
1318#endif
1319 } 1320 }
1321#endif
1320 1322
1321 if (nla_put_u8(skb, IFLA_GENEVE_TTL, info->key.ttl) || 1323 if (nla_put_u8(skb, IFLA_GENEVE_TTL, info->key.ttl) ||
1322 nla_put_u8(skb, IFLA_GENEVE_TOS, info->key.tos) || 1324 nla_put_u8(skb, IFLA_GENEVE_TOS, info->key.tos) ||
diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
index 4fea1b3dfbb4..ca110cd2a4e4 100644
--- a/drivers/net/gtp.c
+++ b/drivers/net/gtp.c
@@ -611,7 +611,7 @@ static const struct net_device_ops gtp_netdev_ops = {
611static void gtp_link_setup(struct net_device *dev) 611static void gtp_link_setup(struct net_device *dev)
612{ 612{
613 dev->netdev_ops = &gtp_netdev_ops; 613 dev->netdev_ops = &gtp_netdev_ops;
614 dev->destructor = free_netdev; 614 dev->needs_free_netdev = true;
615 615
616 dev->hard_header_len = 0; 616 dev->hard_header_len = 0;
617 dev->addr_len = 0; 617 dev->addr_len = 0;
@@ -873,7 +873,7 @@ static struct gtp_dev *gtp_find_dev(struct net *src_net, struct nlattr *nla[])
873 873
874 /* Check if there's an existing gtpX device to configure */ 874 /* Check if there's an existing gtpX device to configure */
875 dev = dev_get_by_index_rcu(net, nla_get_u32(nla[GTPA_LINK])); 875 dev = dev_get_by_index_rcu(net, nla_get_u32(nla[GTPA_LINK]));
876 if (dev->netdev_ops == &gtp_netdev_ops) 876 if (dev && dev->netdev_ops == &gtp_netdev_ops)
877 gtp = netdev_priv(dev); 877 gtp = netdev_priv(dev);
878 878
879 put_net(net); 879 put_net(net);
diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c
index 922bf440e9f1..021a8ec411ab 100644
--- a/drivers/net/hamradio/6pack.c
+++ b/drivers/net/hamradio/6pack.c
@@ -311,7 +311,7 @@ static void sp_setup(struct net_device *dev)
311{ 311{
312 /* Finish setting up the DEVICE info. */ 312 /* Finish setting up the DEVICE info. */
313 dev->netdev_ops = &sp_netdev_ops; 313 dev->netdev_ops = &sp_netdev_ops;
314 dev->destructor = free_netdev; 314 dev->needs_free_netdev = true;
315 dev->mtu = SIXP_MTU; 315 dev->mtu = SIXP_MTU;
316 dev->hard_header_len = AX25_MAX_HEADER_LEN; 316 dev->hard_header_len = AX25_MAX_HEADER_LEN;
317 dev->header_ops = &ax25_header_ops; 317 dev->header_ops = &ax25_header_ops;
diff --git a/drivers/net/hamradio/bpqether.c b/drivers/net/hamradio/bpqether.c
index f62e7f325cf9..78a6414c5fd9 100644
--- a/drivers/net/hamradio/bpqether.c
+++ b/drivers/net/hamradio/bpqether.c
@@ -476,7 +476,7 @@ static const struct net_device_ops bpq_netdev_ops = {
476static void bpq_setup(struct net_device *dev) 476static void bpq_setup(struct net_device *dev)
477{ 477{
478 dev->netdev_ops = &bpq_netdev_ops; 478 dev->netdev_ops = &bpq_netdev_ops;
479 dev->destructor = free_netdev; 479 dev->needs_free_netdev = true;
480 480
481 memcpy(dev->broadcast, &ax25_bcast, AX25_ADDR_LEN); 481 memcpy(dev->broadcast, &ax25_bcast, AX25_ADDR_LEN);
482 memcpy(dev->dev_addr, &ax25_defaddr, AX25_ADDR_LEN); 482 memcpy(dev->dev_addr, &ax25_defaddr, AX25_ADDR_LEN);
diff --git a/drivers/net/hamradio/hdlcdrv.c b/drivers/net/hamradio/hdlcdrv.c
index 8c3633c1d078..97e3bc60c3e7 100644
--- a/drivers/net/hamradio/hdlcdrv.c
+++ b/drivers/net/hamradio/hdlcdrv.c
@@ -576,6 +576,8 @@ static int hdlcdrv_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
576 case HDLCDRVCTL_CALIBRATE: 576 case HDLCDRVCTL_CALIBRATE:
577 if(!capable(CAP_SYS_RAWIO)) 577 if(!capable(CAP_SYS_RAWIO))
578 return -EPERM; 578 return -EPERM;
579 if (s->par.bitrate <= 0)
580 return -EINVAL;
579 if (bi.data.calibrate > INT_MAX / s->par.bitrate) 581 if (bi.data.calibrate > INT_MAX / s->par.bitrate)
580 return -EINVAL; 582 return -EINVAL;
581 s->hdlctx.calibrate = bi.data.calibrate * s->par.bitrate / 16; 583 s->hdlctx.calibrate = bi.data.calibrate * s->par.bitrate / 16;
diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
index 262b2ea576a3..6066f1bcaf2d 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
@@ -171,6 +171,8 @@ struct rndis_device {
171 spinlock_t request_lock; 171 spinlock_t request_lock;
172 struct list_head req_list; 172 struct list_head req_list;
173 173
174 struct work_struct mcast_work;
175
174 u8 hw_mac_adr[ETH_ALEN]; 176 u8 hw_mac_adr[ETH_ALEN];
175 u8 rss_key[NETVSC_HASH_KEYLEN]; 177 u8 rss_key[NETVSC_HASH_KEYLEN];
176 u16 ind_table[ITAB_NUM]; 178 u16 ind_table[ITAB_NUM];
@@ -201,6 +203,7 @@ int rndis_filter_open(struct netvsc_device *nvdev);
201int rndis_filter_close(struct netvsc_device *nvdev); 203int rndis_filter_close(struct netvsc_device *nvdev);
202int rndis_filter_device_add(struct hv_device *dev, 204int rndis_filter_device_add(struct hv_device *dev,
203 struct netvsc_device_info *info); 205 struct netvsc_device_info *info);
206void rndis_filter_update(struct netvsc_device *nvdev);
204void rndis_filter_device_remove(struct hv_device *dev, 207void rndis_filter_device_remove(struct hv_device *dev,
205 struct netvsc_device *nvdev); 208 struct netvsc_device *nvdev);
206int rndis_filter_set_rss_param(struct rndis_device *rdev, 209int rndis_filter_set_rss_param(struct rndis_device *rdev,
@@ -211,7 +214,6 @@ int rndis_filter_receive(struct net_device *ndev,
211 struct vmbus_channel *channel, 214 struct vmbus_channel *channel,
212 void *data, u32 buflen); 215 void *data, u32 buflen);
213 216
214int rndis_filter_set_packet_filter(struct rndis_device *dev, u32 new_filter);
215int rndis_filter_set_device_mac(struct net_device *ndev, char *mac); 217int rndis_filter_set_device_mac(struct net_device *ndev, char *mac);
216 218
217void netvsc_switch_datapath(struct net_device *nv_dev, bool vf); 219void netvsc_switch_datapath(struct net_device *nv_dev, bool vf);
@@ -696,7 +698,6 @@ struct net_device_context {
696 /* list protection */ 698 /* list protection */
697 spinlock_t lock; 699 spinlock_t lock;
698 700
699 struct work_struct work;
700 u32 msg_enable; /* debug level */ 701 u32 msg_enable; /* debug level */
701 702
702 u32 tx_checksum_mask; 703 u32 tx_checksum_mask;
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 4421a6d00375..643c539a08ba 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -56,37 +56,12 @@ static int debug = -1;
56module_param(debug, int, S_IRUGO); 56module_param(debug, int, S_IRUGO);
57MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)"); 57MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
58 58
59static void do_set_multicast(struct work_struct *w)
60{
61 struct net_device_context *ndevctx =
62 container_of(w, struct net_device_context, work);
63 struct hv_device *device_obj = ndevctx->device_ctx;
64 struct net_device *ndev = hv_get_drvdata(device_obj);
65 struct netvsc_device *nvdev = rcu_dereference(ndevctx->nvdev);
66 struct rndis_device *rdev;
67
68 if (!nvdev)
69 return;
70
71 rdev = nvdev->extension;
72 if (rdev == NULL)
73 return;
74
75 if (ndev->flags & IFF_PROMISC)
76 rndis_filter_set_packet_filter(rdev,
77 NDIS_PACKET_TYPE_PROMISCUOUS);
78 else
79 rndis_filter_set_packet_filter(rdev,
80 NDIS_PACKET_TYPE_BROADCAST |
81 NDIS_PACKET_TYPE_ALL_MULTICAST |
82 NDIS_PACKET_TYPE_DIRECTED);
83}
84
85static void netvsc_set_multicast_list(struct net_device *net) 59static void netvsc_set_multicast_list(struct net_device *net)
86{ 60{
87 struct net_device_context *net_device_ctx = netdev_priv(net); 61 struct net_device_context *net_device_ctx = netdev_priv(net);
62 struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev);
88 63
89 schedule_work(&net_device_ctx->work); 64 rndis_filter_update(nvdev);
90} 65}
91 66
92static int netvsc_open(struct net_device *net) 67static int netvsc_open(struct net_device *net)
@@ -123,8 +98,6 @@ static int netvsc_close(struct net_device *net)
123 98
124 netif_tx_disable(net); 99 netif_tx_disable(net);
125 100
126 /* Make sure netvsc_set_multicast_list doesn't re-enable filter! */
127 cancel_work_sync(&net_device_ctx->work);
128 ret = rndis_filter_close(nvdev); 101 ret = rndis_filter_close(nvdev);
129 if (ret != 0) { 102 if (ret != 0) {
130 netdev_err(net, "unable to close device (ret %d).\n", ret); 103 netdev_err(net, "unable to close device (ret %d).\n", ret);
@@ -803,7 +776,7 @@ static int netvsc_set_channels(struct net_device *net,
803 channels->rx_count || channels->tx_count || channels->other_count) 776 channels->rx_count || channels->tx_count || channels->other_count)
804 return -EINVAL; 777 return -EINVAL;
805 778
806 if (count > net->num_tx_queues || count > net->num_rx_queues) 779 if (count > net->num_tx_queues || count > VRSS_CHANNEL_MAX)
807 return -EINVAL; 780 return -EINVAL;
808 781
809 if (!nvdev || nvdev->destroy) 782 if (!nvdev || nvdev->destroy)
@@ -1028,7 +1001,7 @@ static const struct {
1028static int netvsc_get_sset_count(struct net_device *dev, int string_set) 1001static int netvsc_get_sset_count(struct net_device *dev, int string_set)
1029{ 1002{
1030 struct net_device_context *ndc = netdev_priv(dev); 1003 struct net_device_context *ndc = netdev_priv(dev);
1031 struct netvsc_device *nvdev = rcu_dereference(ndc->nvdev); 1004 struct netvsc_device *nvdev = rtnl_dereference(ndc->nvdev);
1032 1005
1033 if (!nvdev) 1006 if (!nvdev)
1034 return -ENODEV; 1007 return -ENODEV;
@@ -1158,11 +1131,22 @@ netvsc_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
1158} 1131}
1159 1132
1160#ifdef CONFIG_NET_POLL_CONTROLLER 1133#ifdef CONFIG_NET_POLL_CONTROLLER
1161static void netvsc_poll_controller(struct net_device *net) 1134static void netvsc_poll_controller(struct net_device *dev)
1162{ 1135{
1163 /* As netvsc_start_xmit() works synchronous we don't have to 1136 struct net_device_context *ndc = netdev_priv(dev);
1164 * trigger anything here. 1137 struct netvsc_device *ndev;
1165 */ 1138 int i;
1139
1140 rcu_read_lock();
1141 ndev = rcu_dereference(ndc->nvdev);
1142 if (ndev) {
1143 for (i = 0; i < ndev->num_chn; i++) {
1144 struct netvsc_channel *nvchan = &ndev->chan_table[i];
1145
1146 napi_schedule(&nvchan->napi);
1147 }
1148 }
1149 rcu_read_unlock();
1166} 1150}
1167#endif 1151#endif
1168 1152
@@ -1219,7 +1203,7 @@ static int netvsc_set_rxfh(struct net_device *dev, const u32 *indir,
1219 rndis_dev = ndev->extension; 1203 rndis_dev = ndev->extension;
1220 if (indir) { 1204 if (indir) {
1221 for (i = 0; i < ITAB_NUM; i++) 1205 for (i = 0; i < ITAB_NUM; i++)
1222 if (indir[i] >= dev->num_rx_queues) 1206 if (indir[i] >= VRSS_CHANNEL_MAX)
1223 return -EINVAL; 1207 return -EINVAL;
1224 1208
1225 for (i = 0; i < ITAB_NUM; i++) 1209 for (i = 0; i < ITAB_NUM; i++)
@@ -1552,7 +1536,6 @@ static int netvsc_probe(struct hv_device *dev,
1552 hv_set_drvdata(dev, net); 1536 hv_set_drvdata(dev, net);
1553 1537
1554 INIT_DELAYED_WORK(&net_device_ctx->dwork, netvsc_link_change); 1538 INIT_DELAYED_WORK(&net_device_ctx->dwork, netvsc_link_change);
1555 INIT_WORK(&net_device_ctx->work, do_set_multicast);
1556 1539
1557 spin_lock_init(&net_device_ctx->lock); 1540 spin_lock_init(&net_device_ctx->lock);
1558 INIT_LIST_HEAD(&net_device_ctx->reconfig_events); 1541 INIT_LIST_HEAD(&net_device_ctx->reconfig_events);
@@ -1622,7 +1605,6 @@ static int netvsc_remove(struct hv_device *dev)
1622 netif_device_detach(net); 1605 netif_device_detach(net);
1623 1606
1624 cancel_delayed_work_sync(&ndev_ctx->dwork); 1607 cancel_delayed_work_sync(&ndev_ctx->dwork);
1625 cancel_work_sync(&ndev_ctx->work);
1626 1608
1627 /* 1609 /*
1628 * Call to the vsc driver to let it know that the device is being 1610 * Call to the vsc driver to let it know that the device is being
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
index f9d5b0b8209a..cb79cd081f42 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
@@ -31,6 +31,7 @@
31 31
32#include "hyperv_net.h" 32#include "hyperv_net.h"
33 33
34static void rndis_set_multicast(struct work_struct *w);
34 35
35#define RNDIS_EXT_LEN PAGE_SIZE 36#define RNDIS_EXT_LEN PAGE_SIZE
36struct rndis_request { 37struct rndis_request {
@@ -76,6 +77,7 @@ static struct rndis_device *get_rndis_device(void)
76 spin_lock_init(&device->request_lock); 77 spin_lock_init(&device->request_lock);
77 78
78 INIT_LIST_HEAD(&device->req_list); 79 INIT_LIST_HEAD(&device->req_list);
80 INIT_WORK(&device->mcast_work, rndis_set_multicast);
79 81
80 device->state = RNDIS_DEV_UNINITIALIZED; 82 device->state = RNDIS_DEV_UNINITIALIZED;
81 83
@@ -815,7 +817,8 @@ static int rndis_filter_query_link_speed(struct rndis_device *dev)
815 return ret; 817 return ret;
816} 818}
817 819
818int rndis_filter_set_packet_filter(struct rndis_device *dev, u32 new_filter) 820static int rndis_filter_set_packet_filter(struct rndis_device *dev,
821 u32 new_filter)
819{ 822{
820 struct rndis_request *request; 823 struct rndis_request *request;
821 struct rndis_set_request *set; 824 struct rndis_set_request *set;
@@ -846,6 +849,28 @@ int rndis_filter_set_packet_filter(struct rndis_device *dev, u32 new_filter)
846 return ret; 849 return ret;
847} 850}
848 851
852static void rndis_set_multicast(struct work_struct *w)
853{
854 struct rndis_device *rdev
855 = container_of(w, struct rndis_device, mcast_work);
856
857 if (rdev->ndev->flags & IFF_PROMISC)
858 rndis_filter_set_packet_filter(rdev,
859 NDIS_PACKET_TYPE_PROMISCUOUS);
860 else
861 rndis_filter_set_packet_filter(rdev,
862 NDIS_PACKET_TYPE_BROADCAST |
863 NDIS_PACKET_TYPE_ALL_MULTICAST |
864 NDIS_PACKET_TYPE_DIRECTED);
865}
866
867void rndis_filter_update(struct netvsc_device *nvdev)
868{
869 struct rndis_device *rdev = nvdev->extension;
870
871 schedule_work(&rdev->mcast_work);
872}
873
849static int rndis_filter_init_device(struct rndis_device *dev) 874static int rndis_filter_init_device(struct rndis_device *dev)
850{ 875{
851 struct rndis_request *request; 876 struct rndis_request *request;
@@ -973,6 +998,9 @@ static int rndis_filter_close_device(struct rndis_device *dev)
973 if (dev->state != RNDIS_DEV_DATAINITIALIZED) 998 if (dev->state != RNDIS_DEV_DATAINITIALIZED)
974 return 0; 999 return 0;
975 1000
1001 /* Make sure rndis_set_multicast doesn't re-enable filter! */
1002 cancel_work_sync(&dev->mcast_work);
1003
976 ret = rndis_filter_set_packet_filter(dev, 0); 1004 ret = rndis_filter_set_packet_filter(dev, 0);
977 if (ret == -ENODEV) 1005 if (ret == -ENODEV)
978 ret = 0; 1006 ret = 0;
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
index 312fce7302d3..144ea5ae8ab4 100644
--- a/drivers/net/ifb.c
+++ b/drivers/net/ifb.c
@@ -207,7 +207,6 @@ static void ifb_dev_free(struct net_device *dev)
207 __skb_queue_purge(&txp->tq); 207 __skb_queue_purge(&txp->tq);
208 } 208 }
209 kfree(dp->tx_private); 209 kfree(dp->tx_private);
210 free_netdev(dev);
211} 210}
212 211
213static void ifb_setup(struct net_device *dev) 212static void ifb_setup(struct net_device *dev)
@@ -230,7 +229,8 @@ static void ifb_setup(struct net_device *dev)
230 dev->priv_flags &= ~IFF_TX_SKB_SHARING; 229 dev->priv_flags &= ~IFF_TX_SKB_SHARING;
231 netif_keep_dst(dev); 230 netif_keep_dst(dev);
232 eth_hw_addr_random(dev); 231 eth_hw_addr_random(dev);
233 dev->destructor = ifb_dev_free; 232 dev->needs_free_netdev = true;
233 dev->priv_destructor = ifb_dev_free;
234} 234}
235 235
236static netdev_tx_t ifb_xmit(struct sk_buff *skb, struct net_device *dev) 236static netdev_tx_t ifb_xmit(struct sk_buff *skb, struct net_device *dev)
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
index 618ed88fad0f..7c7680c8f0e3 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -632,7 +632,7 @@ void ipvlan_link_setup(struct net_device *dev)
632 dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING); 632 dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING);
633 dev->priv_flags |= IFF_UNICAST_FLT | IFF_NO_QUEUE; 633 dev->priv_flags |= IFF_UNICAST_FLT | IFF_NO_QUEUE;
634 dev->netdev_ops = &ipvlan_netdev_ops; 634 dev->netdev_ops = &ipvlan_netdev_ops;
635 dev->destructor = free_netdev; 635 dev->needs_free_netdev = true;
636 dev->header_ops = &ipvlan_header_ops; 636 dev->header_ops = &ipvlan_header_ops;
637 dev->ethtool_ops = &ipvlan_ethtool_ops; 637 dev->ethtool_ops = &ipvlan_ethtool_ops;
638} 638}
diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c
index 224f65cb576b..30612497643c 100644
--- a/drivers/net/loopback.c
+++ b/drivers/net/loopback.c
@@ -159,7 +159,6 @@ static void loopback_dev_free(struct net_device *dev)
159{ 159{
160 dev_net(dev)->loopback_dev = NULL; 160 dev_net(dev)->loopback_dev = NULL;
161 free_percpu(dev->lstats); 161 free_percpu(dev->lstats);
162 free_netdev(dev);
163} 162}
164 163
165static const struct net_device_ops loopback_ops = { 164static const struct net_device_ops loopback_ops = {
@@ -196,7 +195,8 @@ static void loopback_setup(struct net_device *dev)
196 dev->ethtool_ops = &loopback_ethtool_ops; 195 dev->ethtool_ops = &loopback_ethtool_ops;
197 dev->header_ops = &eth_header_ops; 196 dev->header_ops = &eth_header_ops;
198 dev->netdev_ops = &loopback_ops; 197 dev->netdev_ops = &loopback_ops;
199 dev->destructor = loopback_dev_free; 198 dev->needs_free_netdev = true;
199 dev->priv_destructor = loopback_dev_free;
200} 200}
201 201
202/* Setup and register the loopback device. */ 202/* Setup and register the loopback device. */
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index cdc347be68f2..79411675f0e6 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -2996,7 +2996,6 @@ static void macsec_free_netdev(struct net_device *dev)
2996 free_percpu(macsec->secy.tx_sc.stats); 2996 free_percpu(macsec->secy.tx_sc.stats);
2997 2997
2998 dev_put(real_dev); 2998 dev_put(real_dev);
2999 free_netdev(dev);
3000} 2999}
3001 3000
3002static void macsec_setup(struct net_device *dev) 3001static void macsec_setup(struct net_device *dev)
@@ -3006,7 +3005,8 @@ static void macsec_setup(struct net_device *dev)
3006 dev->max_mtu = ETH_MAX_MTU; 3005 dev->max_mtu = ETH_MAX_MTU;
3007 dev->priv_flags |= IFF_NO_QUEUE; 3006 dev->priv_flags |= IFF_NO_QUEUE;
3008 dev->netdev_ops = &macsec_netdev_ops; 3007 dev->netdev_ops = &macsec_netdev_ops;
3009 dev->destructor = macsec_free_netdev; 3008 dev->needs_free_netdev = true;
3009 dev->priv_destructor = macsec_free_netdev;
3010 SET_NETDEV_DEVTYPE(dev, &macsec_type); 3010 SET_NETDEV_DEVTYPE(dev, &macsec_type);
3011 3011
3012 eth_zero_addr(dev->broadcast); 3012 eth_zero_addr(dev->broadcast);
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 346ad2ff3998..72b801803aa4 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -39,16 +39,20 @@
39#define MACVLAN_HASH_SIZE (1<<MACVLAN_HASH_BITS) 39#define MACVLAN_HASH_SIZE (1<<MACVLAN_HASH_BITS)
40#define MACVLAN_BC_QUEUE_LEN 1000 40#define MACVLAN_BC_QUEUE_LEN 1000
41 41
42#define MACVLAN_F_PASSTHRU 1
43#define MACVLAN_F_ADDRCHANGE 2
44
42struct macvlan_port { 45struct macvlan_port {
43 struct net_device *dev; 46 struct net_device *dev;
44 struct hlist_head vlan_hash[MACVLAN_HASH_SIZE]; 47 struct hlist_head vlan_hash[MACVLAN_HASH_SIZE];
45 struct list_head vlans; 48 struct list_head vlans;
46 struct sk_buff_head bc_queue; 49 struct sk_buff_head bc_queue;
47 struct work_struct bc_work; 50 struct work_struct bc_work;
48 bool passthru; 51 u32 flags;
49 int count; 52 int count;
50 struct hlist_head vlan_source_hash[MACVLAN_HASH_SIZE]; 53 struct hlist_head vlan_source_hash[MACVLAN_HASH_SIZE];
51 DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ); 54 DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ);
55 unsigned char perm_addr[ETH_ALEN];
52}; 56};
53 57
54struct macvlan_source_entry { 58struct macvlan_source_entry {
@@ -66,6 +70,31 @@ struct macvlan_skb_cb {
66 70
67static void macvlan_port_destroy(struct net_device *dev); 71static void macvlan_port_destroy(struct net_device *dev);
68 72
73static inline bool macvlan_passthru(const struct macvlan_port *port)
74{
75 return port->flags & MACVLAN_F_PASSTHRU;
76}
77
78static inline void macvlan_set_passthru(struct macvlan_port *port)
79{
80 port->flags |= MACVLAN_F_PASSTHRU;
81}
82
83static inline bool macvlan_addr_change(const struct macvlan_port *port)
84{
85 return port->flags & MACVLAN_F_ADDRCHANGE;
86}
87
88static inline void macvlan_set_addr_change(struct macvlan_port *port)
89{
90 port->flags |= MACVLAN_F_ADDRCHANGE;
91}
92
93static inline void macvlan_clear_addr_change(struct macvlan_port *port)
94{
95 port->flags &= ~MACVLAN_F_ADDRCHANGE;
96}
97
69/* Hash Ethernet address */ 98/* Hash Ethernet address */
70static u32 macvlan_eth_hash(const unsigned char *addr) 99static u32 macvlan_eth_hash(const unsigned char *addr)
71{ 100{
@@ -181,11 +210,12 @@ static void macvlan_hash_change_addr(struct macvlan_dev *vlan,
181static bool macvlan_addr_busy(const struct macvlan_port *port, 210static bool macvlan_addr_busy(const struct macvlan_port *port,
182 const unsigned char *addr) 211 const unsigned char *addr)
183{ 212{
184 /* Test to see if the specified multicast address is 213 /* Test to see if the specified address is
185 * currently in use by the underlying device or 214 * currently in use by the underlying device or
186 * another macvlan. 215 * another macvlan.
187 */ 216 */
188 if (ether_addr_equal_64bits(port->dev->dev_addr, addr)) 217 if (!macvlan_passthru(port) && !macvlan_addr_change(port) &&
218 ether_addr_equal_64bits(port->dev->dev_addr, addr))
189 return true; 219 return true;
190 220
191 if (macvlan_hash_lookup(port, addr)) 221 if (macvlan_hash_lookup(port, addr))
@@ -445,7 +475,7 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)
445 } 475 }
446 476
447 macvlan_forward_source(skb, port, eth->h_source); 477 macvlan_forward_source(skb, port, eth->h_source);
448 if (port->passthru) 478 if (macvlan_passthru(port))
449 vlan = list_first_or_null_rcu(&port->vlans, 479 vlan = list_first_or_null_rcu(&port->vlans,
450 struct macvlan_dev, list); 480 struct macvlan_dev, list);
451 else 481 else
@@ -574,7 +604,7 @@ static int macvlan_open(struct net_device *dev)
574 struct net_device *lowerdev = vlan->lowerdev; 604 struct net_device *lowerdev = vlan->lowerdev;
575 int err; 605 int err;
576 606
577 if (vlan->port->passthru) { 607 if (macvlan_passthru(vlan->port)) {
578 if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) { 608 if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) {
579 err = dev_set_promiscuity(lowerdev, 1); 609 err = dev_set_promiscuity(lowerdev, 1);
580 if (err < 0) 610 if (err < 0)
@@ -649,7 +679,7 @@ static int macvlan_stop(struct net_device *dev)
649 dev_uc_unsync(lowerdev, dev); 679 dev_uc_unsync(lowerdev, dev);
650 dev_mc_unsync(lowerdev, dev); 680 dev_mc_unsync(lowerdev, dev);
651 681
652 if (vlan->port->passthru) { 682 if (macvlan_passthru(vlan->port)) {
653 if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) 683 if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC))
654 dev_set_promiscuity(lowerdev, -1); 684 dev_set_promiscuity(lowerdev, -1);
655 goto hash_del; 685 goto hash_del;
@@ -672,6 +702,7 @@ static int macvlan_sync_address(struct net_device *dev, unsigned char *addr)
672{ 702{
673 struct macvlan_dev *vlan = netdev_priv(dev); 703 struct macvlan_dev *vlan = netdev_priv(dev);
674 struct net_device *lowerdev = vlan->lowerdev; 704 struct net_device *lowerdev = vlan->lowerdev;
705 struct macvlan_port *port = vlan->port;
675 int err; 706 int err;
676 707
677 if (!(dev->flags & IFF_UP)) { 708 if (!(dev->flags & IFF_UP)) {
@@ -682,7 +713,7 @@ static int macvlan_sync_address(struct net_device *dev, unsigned char *addr)
682 if (macvlan_addr_busy(vlan->port, addr)) 713 if (macvlan_addr_busy(vlan->port, addr))
683 return -EBUSY; 714 return -EBUSY;
684 715
685 if (!vlan->port->passthru) { 716 if (!macvlan_passthru(port)) {
686 err = dev_uc_add(lowerdev, addr); 717 err = dev_uc_add(lowerdev, addr);
687 if (err) 718 if (err)
688 return err; 719 return err;
@@ -692,6 +723,15 @@ static int macvlan_sync_address(struct net_device *dev, unsigned char *addr)
692 723
693 macvlan_hash_change_addr(vlan, addr); 724 macvlan_hash_change_addr(vlan, addr);
694 } 725 }
726 if (macvlan_passthru(port) && !macvlan_addr_change(port)) {
727 /* Since addr_change isn't set, we are here due to lower
728 * device change. Save the lower-dev address so we can
729 * restore it later.
730 */
731 ether_addr_copy(vlan->port->perm_addr,
732 lowerdev->dev_addr);
733 }
734 macvlan_clear_addr_change(port);
695 return 0; 735 return 0;
696} 736}
697 737
@@ -703,7 +743,12 @@ static int macvlan_set_mac_address(struct net_device *dev, void *p)
703 if (!is_valid_ether_addr(addr->sa_data)) 743 if (!is_valid_ether_addr(addr->sa_data))
704 return -EADDRNOTAVAIL; 744 return -EADDRNOTAVAIL;
705 745
746 /* If the addresses are the same, this is a no-op */
747 if (ether_addr_equal(dev->dev_addr, addr->sa_data))
748 return 0;
749
706 if (vlan->mode == MACVLAN_MODE_PASSTHRU) { 750 if (vlan->mode == MACVLAN_MODE_PASSTHRU) {
751 macvlan_set_addr_change(vlan->port);
707 dev_set_mac_address(vlan->lowerdev, addr); 752 dev_set_mac_address(vlan->lowerdev, addr);
708 return 0; 753 return 0;
709 } 754 }
@@ -928,7 +973,7 @@ static int macvlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
928 /* Support unicast filter only on passthru devices. 973 /* Support unicast filter only on passthru devices.
929 * Multicast filter should be allowed on all devices. 974 * Multicast filter should be allowed on all devices.
930 */ 975 */
931 if (!vlan->port->passthru && is_unicast_ether_addr(addr)) 976 if (!macvlan_passthru(vlan->port) && is_unicast_ether_addr(addr))
932 return -EOPNOTSUPP; 977 return -EOPNOTSUPP;
933 978
934 if (flags & NLM_F_REPLACE) 979 if (flags & NLM_F_REPLACE)
@@ -952,7 +997,7 @@ static int macvlan_fdb_del(struct ndmsg *ndm, struct nlattr *tb[],
952 /* Support unicast filter only on passthru devices. 997 /* Support unicast filter only on passthru devices.
953 * Multicast filter should be allowed on all devices. 998 * Multicast filter should be allowed on all devices.
954 */ 999 */
955 if (!vlan->port->passthru && is_unicast_ether_addr(addr)) 1000 if (!macvlan_passthru(vlan->port) && is_unicast_ether_addr(addr))
956 return -EOPNOTSUPP; 1001 return -EOPNOTSUPP;
957 1002
958 if (is_unicast_ether_addr(addr)) 1003 if (is_unicast_ether_addr(addr))
@@ -1092,7 +1137,7 @@ void macvlan_common_setup(struct net_device *dev)
1092 netif_keep_dst(dev); 1137 netif_keep_dst(dev);
1093 dev->priv_flags |= IFF_UNICAST_FLT; 1138 dev->priv_flags |= IFF_UNICAST_FLT;
1094 dev->netdev_ops = &macvlan_netdev_ops; 1139 dev->netdev_ops = &macvlan_netdev_ops;
1095 dev->destructor = free_netdev; 1140 dev->needs_free_netdev = true;
1096 dev->header_ops = &macvlan_hard_header_ops; 1141 dev->header_ops = &macvlan_hard_header_ops;
1097 dev->ethtool_ops = &macvlan_ethtool_ops; 1142 dev->ethtool_ops = &macvlan_ethtool_ops;
1098} 1143}
@@ -1120,8 +1165,8 @@ static int macvlan_port_create(struct net_device *dev)
1120 if (port == NULL) 1165 if (port == NULL)
1121 return -ENOMEM; 1166 return -ENOMEM;
1122 1167
1123 port->passthru = false;
1124 port->dev = dev; 1168 port->dev = dev;
1169 ether_addr_copy(port->perm_addr, dev->dev_addr);
1125 INIT_LIST_HEAD(&port->vlans); 1170 INIT_LIST_HEAD(&port->vlans);
1126 for (i = 0; i < MACVLAN_HASH_SIZE; i++) 1171 for (i = 0; i < MACVLAN_HASH_SIZE; i++)
1127 INIT_HLIST_HEAD(&port->vlan_hash[i]); 1172 INIT_HLIST_HEAD(&port->vlan_hash[i]);
@@ -1161,6 +1206,18 @@ static void macvlan_port_destroy(struct net_device *dev)
1161 kfree_skb(skb); 1206 kfree_skb(skb);
1162 } 1207 }
1163 1208
1209 /* If the lower device address has been changed by passthru
1210 * macvlan, put it back.
1211 */
1212 if (macvlan_passthru(port) &&
1213 !ether_addr_equal(port->dev->dev_addr, port->perm_addr)) {
1214 struct sockaddr sa;
1215
1216 sa.sa_family = port->dev->type;
1217 memcpy(&sa.sa_data, port->perm_addr, port->dev->addr_len);
1218 dev_set_mac_address(port->dev, &sa);
1219 }
1220
1164 kfree(port); 1221 kfree(port);
1165} 1222}
1166 1223
@@ -1326,7 +1383,7 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
1326 port = macvlan_port_get_rtnl(lowerdev); 1383 port = macvlan_port_get_rtnl(lowerdev);
1327 1384
1328 /* Only 1 macvlan device can be created in passthru mode */ 1385 /* Only 1 macvlan device can be created in passthru mode */
1329 if (port->passthru) { 1386 if (macvlan_passthru(port)) {
1330 /* The macvlan port must be not created this time, 1387 /* The macvlan port must be not created this time,
1331 * still goto destroy_macvlan_port for readability. 1388 * still goto destroy_macvlan_port for readability.
1332 */ 1389 */
@@ -1352,7 +1409,7 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
1352 err = -EINVAL; 1409 err = -EINVAL;
1353 goto destroy_macvlan_port; 1410 goto destroy_macvlan_port;
1354 } 1411 }
1355 port->passthru = true; 1412 macvlan_set_passthru(port);
1356 eth_hw_addr_inherit(dev, lowerdev); 1413 eth_hw_addr_inherit(dev, lowerdev);
1357 } 1414 }
1358 1415
@@ -1434,7 +1491,7 @@ static int macvlan_changelink(struct net_device *dev,
1434 if (data && data[IFLA_MACVLAN_FLAGS]) { 1491 if (data && data[IFLA_MACVLAN_FLAGS]) {
1435 __u16 flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]); 1492 __u16 flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]);
1436 bool promisc = (flags ^ vlan->flags) & MACVLAN_FLAG_NOPROMISC; 1493 bool promisc = (flags ^ vlan->flags) & MACVLAN_FLAG_NOPROMISC;
1437 if (vlan->port->passthru && promisc) { 1494 if (macvlan_passthru(vlan->port) && promisc) {
1438 int err; 1495 int err;
1439 1496
1440 if (flags & MACVLAN_FLAG_NOPROMISC) 1497 if (flags & MACVLAN_FLAG_NOPROMISC)
@@ -1597,7 +1654,7 @@ static int macvlan_device_event(struct notifier_block *unused,
1597 } 1654 }
1598 break; 1655 break;
1599 case NETDEV_CHANGEADDR: 1656 case NETDEV_CHANGEADDR:
1600 if (!port->passthru) 1657 if (!macvlan_passthru(port))
1601 return NOTIFY_DONE; 1658 return NOTIFY_DONE;
1602 1659
1603 vlan = list_first_entry_or_null(&port->vlans, 1660 vlan = list_first_entry_or_null(&port->vlans,
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index 06ee6395117f..0e27920c2b6b 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -358,7 +358,7 @@ static ssize_t enabled_store(struct config_item *item,
358 if (err) 358 if (err)
359 goto out_unlock; 359 goto out_unlock;
360 360
361 pr_info("netconsole: network logging started\n"); 361 pr_info("network logging started\n");
362 } else { /* false */ 362 } else { /* false */
363 /* We need to disable the netconsole before cleaning it up 363 /* We need to disable the netconsole before cleaning it up
364 * otherwise we might end up in write_msg() with 364 * otherwise we might end up in write_msg() with
diff --git a/drivers/net/nlmon.c b/drivers/net/nlmon.c
index b91603835d26..c4b3362da4a2 100644
--- a/drivers/net/nlmon.c
+++ b/drivers/net/nlmon.c
@@ -113,7 +113,7 @@ static void nlmon_setup(struct net_device *dev)
113 113
114 dev->netdev_ops = &nlmon_ops; 114 dev->netdev_ops = &nlmon_ops;
115 dev->ethtool_ops = &nlmon_ethtool_ops; 115 dev->ethtool_ops = &nlmon_ethtool_ops;
116 dev->destructor = free_netdev; 116 dev->needs_free_netdev = true;
117 117
118 dev->features = NETIF_F_SG | NETIF_F_FRAGLIST | 118 dev->features = NETIF_F_SG | NETIF_F_FRAGLIST |
119 NETIF_F_HIGHDMA | NETIF_F_LLTX; 119 NETIF_F_HIGHDMA | NETIF_F_LLTX;
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index 60ffc9da6a28..3ab6c58d4be6 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -108,7 +108,7 @@ config MDIO_MOXART
108config MDIO_OCTEON 108config MDIO_OCTEON
109 tristate "Octeon and some ThunderX SOCs MDIO buses" 109 tristate "Octeon and some ThunderX SOCs MDIO buses"
110 depends on 64BIT 110 depends on 64BIT
111 depends on HAS_IOMEM 111 depends on HAS_IOMEM && OF_MDIO
112 select MDIO_CAVIUM 112 select MDIO_CAVIUM
113 help 113 help
114 This module provides a driver for the Octeon and ThunderX MDIO 114 This module provides a driver for the Octeon and ThunderX MDIO
@@ -127,6 +127,7 @@ config MDIO_THUNDER
127 tristate "ThunderX SOCs MDIO buses" 127 tristate "ThunderX SOCs MDIO buses"
128 depends on 64BIT 128 depends on 64BIT
129 depends on PCI 129 depends on PCI
130 depends on !(MDIO_DEVICE=y && PHYLIB=m)
130 select MDIO_CAVIUM 131 select MDIO_CAVIUM
131 help 132 help
132 This driver supports the MDIO interfaces found on Cavium 133 This driver supports the MDIO interfaces found on Cavium
diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index ed0d10f54f26..c3065236ffcc 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -908,7 +908,7 @@ static void decode_txts(struct dp83640_private *dp83640,
908 if (overflow) { 908 if (overflow) {
909 pr_debug("tx timestamp queue overflow, count %d\n", overflow); 909 pr_debug("tx timestamp queue overflow, count %d\n", overflow);
910 while (skb) { 910 while (skb) {
911 skb_complete_tx_timestamp(skb, NULL); 911 kfree_skb(skb);
912 skb = skb_dequeue(&dp83640->tx_queue); 912 skb = skb_dequeue(&dp83640->tx_queue);
913 } 913 }
914 return; 914 return;
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index 272b051a0199..57297ba23987 100644
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -255,34 +255,6 @@ static int marvell_config_aneg(struct phy_device *phydev)
255{ 255{
256 int err; 256 int err;
257 257
258 /* The Marvell PHY has an errata which requires
259 * that certain registers get written in order
260 * to restart autonegotiation */
261 err = phy_write(phydev, MII_BMCR, BMCR_RESET);
262
263 if (err < 0)
264 return err;
265
266 err = phy_write(phydev, 0x1d, 0x1f);
267 if (err < 0)
268 return err;
269
270 err = phy_write(phydev, 0x1e, 0x200c);
271 if (err < 0)
272 return err;
273
274 err = phy_write(phydev, 0x1d, 0x5);
275 if (err < 0)
276 return err;
277
278 err = phy_write(phydev, 0x1e, 0);
279 if (err < 0)
280 return err;
281
282 err = phy_write(phydev, 0x1e, 0x100);
283 if (err < 0)
284 return err;
285
286 err = marvell_set_polarity(phydev, phydev->mdix_ctrl); 258 err = marvell_set_polarity(phydev, phydev->mdix_ctrl);
287 if (err < 0) 259 if (err < 0)
288 return err; 260 return err;
@@ -316,6 +288,42 @@ static int marvell_config_aneg(struct phy_device *phydev)
316 return 0; 288 return 0;
317} 289}
318 290
291static int m88e1101_config_aneg(struct phy_device *phydev)
292{
293 int err;
294
295 /* This Marvell PHY has an errata which requires
296 * that certain registers get written in order
297 * to restart autonegotiation
298 */
299 err = phy_write(phydev, MII_BMCR, BMCR_RESET);
300
301 if (err < 0)
302 return err;
303
304 err = phy_write(phydev, 0x1d, 0x1f);
305 if (err < 0)
306 return err;
307
308 err = phy_write(phydev, 0x1e, 0x200c);
309 if (err < 0)
310 return err;
311
312 err = phy_write(phydev, 0x1d, 0x5);
313 if (err < 0)
314 return err;
315
316 err = phy_write(phydev, 0x1e, 0);
317 if (err < 0)
318 return err;
319
320 err = phy_write(phydev, 0x1e, 0x100);
321 if (err < 0)
322 return err;
323
324 return marvell_config_aneg(phydev);
325}
326
319static int m88e1111_config_aneg(struct phy_device *phydev) 327static int m88e1111_config_aneg(struct phy_device *phydev)
320{ 328{
321 int err; 329 int err;
@@ -1119,8 +1127,6 @@ static int marvell_read_status_page(struct phy_device *phydev, int page)
1119 if (adv < 0) 1127 if (adv < 0)
1120 return adv; 1128 return adv;
1121 1129
1122 lpa &= adv;
1123
1124 if (status & MII_M1011_PHY_STATUS_FULLDUPLEX) 1130 if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
1125 phydev->duplex = DUPLEX_FULL; 1131 phydev->duplex = DUPLEX_FULL;
1126 else 1132 else
@@ -1892,7 +1898,7 @@ static struct phy_driver marvell_drivers[] = {
1892 .flags = PHY_HAS_INTERRUPT, 1898 .flags = PHY_HAS_INTERRUPT,
1893 .probe = marvell_probe, 1899 .probe = marvell_probe,
1894 .config_init = &marvell_config_init, 1900 .config_init = &marvell_config_init,
1895 .config_aneg = &marvell_config_aneg, 1901 .config_aneg = &m88e1101_config_aneg,
1896 .read_status = &genphy_read_status, 1902 .read_status = &genphy_read_status,
1897 .ack_interrupt = &marvell_ack_interrupt, 1903 .ack_interrupt = &marvell_ack_interrupt,
1898 .config_intr = &marvell_config_intr, 1904 .config_intr = &marvell_config_intr,
diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 8e73f5f36e71..f99c21f78b63 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -658,6 +658,18 @@ static int mdio_bus_match(struct device *dev, struct device_driver *drv)
658 return 0; 658 return 0;
659} 659}
660 660
661static int mdio_uevent(struct device *dev, struct kobj_uevent_env *env)
662{
663 int rc;
664
665 /* Some devices have extra OF data and an OF-style MODALIAS */
666 rc = of_device_uevent_modalias(dev, env);
667 if (rc != -ENODEV)
668 return rc;
669
670 return 0;
671}
672
661#ifdef CONFIG_PM 673#ifdef CONFIG_PM
662static int mdio_bus_suspend(struct device *dev) 674static int mdio_bus_suspend(struct device *dev)
663{ 675{
@@ -708,6 +720,7 @@ static const struct dev_pm_ops mdio_bus_pm_ops = {
708struct bus_type mdio_bus_type = { 720struct bus_type mdio_bus_type = {
709 .name = "mdio_bus", 721 .name = "mdio_bus",
710 .match = mdio_bus_match, 722 .match = mdio_bus_match,
723 .uevent = mdio_uevent,
711 .pm = MDIO_BUS_PM_OPS, 724 .pm = MDIO_BUS_PM_OPS,
712}; 725};
713EXPORT_SYMBOL(mdio_bus_type); 726EXPORT_SYMBOL(mdio_bus_type);
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index 6a5fd18f062c..8b2038844ba9 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -268,23 +268,12 @@ out:
268 return ret; 268 return ret;
269} 269}
270 270
271static int kszphy_config_init(struct phy_device *phydev) 271/* Some config bits need to be set again on resume, handle them here. */
272static int kszphy_config_reset(struct phy_device *phydev)
272{ 273{
273 struct kszphy_priv *priv = phydev->priv; 274 struct kszphy_priv *priv = phydev->priv;
274 const struct kszphy_type *type;
275 int ret; 275 int ret;
276 276
277 if (!priv)
278 return 0;
279
280 type = priv->type;
281
282 if (type->has_broadcast_disable)
283 kszphy_broadcast_disable(phydev);
284
285 if (type->has_nand_tree_disable)
286 kszphy_nand_tree_disable(phydev);
287
288 if (priv->rmii_ref_clk_sel) { 277 if (priv->rmii_ref_clk_sel) {
289 ret = kszphy_rmii_clk_sel(phydev, priv->rmii_ref_clk_sel_val); 278 ret = kszphy_rmii_clk_sel(phydev, priv->rmii_ref_clk_sel_val);
290 if (ret) { 279 if (ret) {
@@ -295,11 +284,30 @@ static int kszphy_config_init(struct phy_device *phydev)
295 } 284 }
296 285
297 if (priv->led_mode >= 0) 286 if (priv->led_mode >= 0)
298 kszphy_setup_led(phydev, type->led_mode_reg, priv->led_mode); 287 kszphy_setup_led(phydev, priv->type->led_mode_reg, priv->led_mode);
299 288
300 return 0; 289 return 0;
301} 290}
302 291
292static int kszphy_config_init(struct phy_device *phydev)
293{
294 struct kszphy_priv *priv = phydev->priv;
295 const struct kszphy_type *type;
296
297 if (!priv)
298 return 0;
299
300 type = priv->type;
301
302 if (type->has_broadcast_disable)
303 kszphy_broadcast_disable(phydev);
304
305 if (type->has_nand_tree_disable)
306 kszphy_nand_tree_disable(phydev);
307
308 return kszphy_config_reset(phydev);
309}
310
303static int ksz8041_config_init(struct phy_device *phydev) 311static int ksz8041_config_init(struct phy_device *phydev)
304{ 312{
305 struct device_node *of_node = phydev->mdio.dev.of_node; 313 struct device_node *of_node = phydev->mdio.dev.of_node;
@@ -611,6 +619,8 @@ static int ksz9031_read_status(struct phy_device *phydev)
611 if ((regval & 0xFF) == 0xFF) { 619 if ((regval & 0xFF) == 0xFF) {
612 phy_init_hw(phydev); 620 phy_init_hw(phydev);
613 phydev->link = 0; 621 phydev->link = 0;
622 if (phydev->drv->config_intr && phy_interrupt_is_valid(phydev))
623 phydev->drv->config_intr(phydev);
614 } 624 }
615 625
616 return 0; 626 return 0;
@@ -700,8 +710,14 @@ static int kszphy_suspend(struct phy_device *phydev)
700 710
701static int kszphy_resume(struct phy_device *phydev) 711static int kszphy_resume(struct phy_device *phydev)
702{ 712{
713 int ret;
714
703 genphy_resume(phydev); 715 genphy_resume(phydev);
704 716
717 ret = kszphy_config_reset(phydev);
718 if (ret)
719 return ret;
720
705 /* Enable PHY Interrupts */ 721 /* Enable PHY Interrupts */
706 if (phy_interrupt_is_valid(phydev)) { 722 if (phy_interrupt_is_valid(phydev)) {
707 phydev->interrupts = PHY_INTERRUPT_ENABLED; 723 phydev->interrupts = PHY_INTERRUPT_ENABLED;
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 82ab8fb82587..eebb0e1c70ff 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -54,6 +54,8 @@ static const char *phy_speed_to_str(int speed)
54 return "5Gbps"; 54 return "5Gbps";
55 case SPEED_10000: 55 case SPEED_10000:
56 return "10Gbps"; 56 return "10Gbps";
57 case SPEED_14000:
58 return "14Gbps";
57 case SPEED_20000: 59 case SPEED_20000:
58 return "20Gbps"; 60 return "20Gbps";
59 case SPEED_25000: 61 case SPEED_25000:
@@ -241,7 +243,7 @@ static const struct phy_setting settings[] = {
241 * phy_lookup_setting - lookup a PHY setting 243 * phy_lookup_setting - lookup a PHY setting
242 * @speed: speed to match 244 * @speed: speed to match
243 * @duplex: duplex to match 245 * @duplex: duplex to match
244 * @feature: allowed link modes 246 * @features: allowed link modes
245 * @exact: an exact match is required 247 * @exact: an exact match is required
246 * 248 *
247 * Search the settings array for a setting that matches the speed and 249 * Search the settings array for a setting that matches the speed and
diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c
index 1da31dc47f86..74b907206aa7 100644
--- a/drivers/net/slip/slip.c
+++ b/drivers/net/slip/slip.c
@@ -629,7 +629,7 @@ static void sl_uninit(struct net_device *dev)
629static void sl_free_netdev(struct net_device *dev) 629static void sl_free_netdev(struct net_device *dev)
630{ 630{
631 int i = dev->base_addr; 631 int i = dev->base_addr;
632 free_netdev(dev); 632
633 slip_devs[i] = NULL; 633 slip_devs[i] = NULL;
634} 634}
635 635
@@ -651,7 +651,8 @@ static const struct net_device_ops sl_netdev_ops = {
651static void sl_setup(struct net_device *dev) 651static void sl_setup(struct net_device *dev)
652{ 652{
653 dev->netdev_ops = &sl_netdev_ops; 653 dev->netdev_ops = &sl_netdev_ops;
654 dev->destructor = sl_free_netdev; 654 dev->needs_free_netdev = true;
655 dev->priv_destructor = sl_free_netdev;
655 656
656 dev->hard_header_len = 0; 657 dev->hard_header_len = 0;
657 dev->addr_len = 0; 658 dev->addr_len = 0;
@@ -1369,8 +1370,6 @@ static void __exit slip_exit(void)
1369 if (sl->tty) { 1370 if (sl->tty) {
1370 printk(KERN_ERR "%s: tty discipline still running\n", 1371 printk(KERN_ERR "%s: tty discipline still running\n",
1371 dev->name); 1372 dev->name);
1372 /* Intentionally leak the control block. */
1373 dev->destructor = NULL;
1374 } 1373 }
1375 1374
1376 unregister_netdev(dev); 1375 unregister_netdev(dev);
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 6c5d5ef46f75..fba8c136aa7c 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1643,7 +1643,6 @@ static void team_destructor(struct net_device *dev)
1643 struct team *team = netdev_priv(dev); 1643 struct team *team = netdev_priv(dev);
1644 1644
1645 free_percpu(team->pcpu_stats); 1645 free_percpu(team->pcpu_stats);
1646 free_netdev(dev);
1647} 1646}
1648 1647
1649static int team_open(struct net_device *dev) 1648static int team_open(struct net_device *dev)
@@ -2079,7 +2078,8 @@ static void team_setup(struct net_device *dev)
2079 2078
2080 dev->netdev_ops = &team_netdev_ops; 2079 dev->netdev_ops = &team_netdev_ops;
2081 dev->ethtool_ops = &team_ethtool_ops; 2080 dev->ethtool_ops = &team_ethtool_ops;
2082 dev->destructor = team_destructor; 2081 dev->needs_free_netdev = true;
2082 dev->priv_destructor = team_destructor;
2083 dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING); 2083 dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING);
2084 dev->priv_flags |= IFF_NO_QUEUE; 2084 dev->priv_flags |= IFF_NO_QUEUE;
2085 dev->priv_flags |= IFF_TEAM; 2085 dev->priv_flags |= IFF_TEAM;
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index bbd707b9ef7a..9ee7d4275640 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1560,7 +1560,6 @@ static void tun_free_netdev(struct net_device *dev)
1560 free_percpu(tun->pcpu_stats); 1560 free_percpu(tun->pcpu_stats);
1561 tun_flow_uninit(tun); 1561 tun_flow_uninit(tun);
1562 security_tun_dev_free_security(tun->security); 1562 security_tun_dev_free_security(tun->security);
1563 free_netdev(dev);
1564} 1563}
1565 1564
1566static void tun_setup(struct net_device *dev) 1565static void tun_setup(struct net_device *dev)
@@ -1571,7 +1570,8 @@ static void tun_setup(struct net_device *dev)
1571 tun->group = INVALID_GID; 1570 tun->group = INVALID_GID;
1572 1571
1573 dev->ethtool_ops = &tun_ethtool_ops; 1572 dev->ethtool_ops = &tun_ethtool_ops;
1574 dev->destructor = tun_free_netdev; 1573 dev->needs_free_netdev = true;
1574 dev->priv_destructor = tun_free_netdev;
1575 /* We prefer our own queue length */ 1575 /* We prefer our own queue length */
1576 dev->tx_queue_len = TUN_READQ_SIZE; 1576 dev->tx_queue_len = TUN_READQ_SIZE;
1577} 1577}
diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
index 51cf60092a18..4037ab27734a 100644
--- a/drivers/net/usb/ax88179_178a.c
+++ b/drivers/net/usb/ax88179_178a.c
@@ -1722,6 +1722,18 @@ static const struct driver_info lenovo_info = {
1722 .tx_fixup = ax88179_tx_fixup, 1722 .tx_fixup = ax88179_tx_fixup,
1723}; 1723};
1724 1724
1725static const struct driver_info belkin_info = {
1726 .description = "Belkin USB Ethernet Adapter",
1727 .bind = ax88179_bind,
1728 .unbind = ax88179_unbind,
1729 .status = ax88179_status,
1730 .link_reset = ax88179_link_reset,
1731 .reset = ax88179_reset,
1732 .flags = FLAG_ETHER | FLAG_FRAMING_AX,
1733 .rx_fixup = ax88179_rx_fixup,
1734 .tx_fixup = ax88179_tx_fixup,
1735};
1736
1725static const struct usb_device_id products[] = { 1737static const struct usb_device_id products[] = {
1726{ 1738{
1727 /* ASIX AX88179 10/100/1000 */ 1739 /* ASIX AX88179 10/100/1000 */
@@ -1751,6 +1763,10 @@ static const struct usb_device_id products[] = {
1751 /* Lenovo OneLinkDock Gigabit LAN */ 1763 /* Lenovo OneLinkDock Gigabit LAN */
1752 USB_DEVICE(0x17ef, 0x304b), 1764 USB_DEVICE(0x17ef, 0x304b),
1753 .driver_info = (unsigned long)&lenovo_info, 1765 .driver_info = (unsigned long)&lenovo_info,
1766}, {
1767 /* Belkin B2B128 USB 3.0 Hub + Gigabit Ethernet Adapter */
1768 USB_DEVICE(0x050d, 0x0128),
1769 .driver_info = (unsigned long)&belkin_info,
1754}, 1770},
1755 { }, 1771 { },
1756}; 1772};
diff --git a/drivers/net/usb/cdc-phonet.c b/drivers/net/usb/cdc-phonet.c
index eb52de8205f0..c7a350bbaaa7 100644
--- a/drivers/net/usb/cdc-phonet.c
+++ b/drivers/net/usb/cdc-phonet.c
@@ -298,7 +298,7 @@ static void usbpn_setup(struct net_device *dev)
298 dev->addr_len = 1; 298 dev->addr_len = 1;
299 dev->tx_queue_len = 3; 299 dev->tx_queue_len = 3;
300 300
301 dev->destructor = free_netdev; 301 dev->needs_free_netdev = true;
302} 302}
303 303
304/* 304/*
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
index f3ae88fdf332..8ab281b478f2 100644
--- a/drivers/net/usb/cdc_ether.c
+++ b/drivers/net/usb/cdc_ether.c
@@ -310,6 +310,26 @@ skip:
310 return -ENODEV; 310 return -ENODEV;
311 } 311 }
312 312
313 return 0;
314
315bad_desc:
316 dev_info(&dev->udev->dev, "bad CDC descriptors\n");
317 return -ENODEV;
318}
319EXPORT_SYMBOL_GPL(usbnet_generic_cdc_bind);
320
321
322/* like usbnet_generic_cdc_bind() but handles filter initialization
323 * correctly
324 */
325int usbnet_ether_cdc_bind(struct usbnet *dev, struct usb_interface *intf)
326{
327 int rv;
328
329 rv = usbnet_generic_cdc_bind(dev, intf);
330 if (rv < 0)
331 goto bail_out;
332
313 /* Some devices don't initialise properly. In particular 333 /* Some devices don't initialise properly. In particular
314 * the packet filter is not reset. There are devices that 334 * the packet filter is not reset. There are devices that
315 * don't do reset all the way. So the packet filter should 335 * don't do reset all the way. So the packet filter should
@@ -317,13 +337,10 @@ skip:
317 */ 337 */
318 usbnet_cdc_update_filter(dev); 338 usbnet_cdc_update_filter(dev);
319 339
320 return 0; 340bail_out:
321 341 return rv;
322bad_desc:
323 dev_info(&dev->udev->dev, "bad CDC descriptors\n");
324 return -ENODEV;
325} 342}
326EXPORT_SYMBOL_GPL(usbnet_generic_cdc_bind); 343EXPORT_SYMBOL_GPL(usbnet_ether_cdc_bind);
327 344
328void usbnet_cdc_unbind(struct usbnet *dev, struct usb_interface *intf) 345void usbnet_cdc_unbind(struct usbnet *dev, struct usb_interface *intf)
329{ 346{
@@ -417,7 +434,7 @@ int usbnet_cdc_bind(struct usbnet *dev, struct usb_interface *intf)
417 BUILD_BUG_ON((sizeof(((struct usbnet *)0)->data) 434 BUILD_BUG_ON((sizeof(((struct usbnet *)0)->data)
418 < sizeof(struct cdc_state))); 435 < sizeof(struct cdc_state)));
419 436
420 status = usbnet_generic_cdc_bind(dev, intf); 437 status = usbnet_ether_cdc_bind(dev, intf);
421 if (status < 0) 438 if (status < 0)
422 return status; 439 return status;
423 440
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 8f923a147fa9..32a22f4e8356 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -123,7 +123,7 @@ static void qmimux_setup(struct net_device *dev)
123 dev->addr_len = 0; 123 dev->addr_len = 0;
124 dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; 124 dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
125 dev->netdev_ops = &qmimux_netdev_ops; 125 dev->netdev_ops = &qmimux_netdev_ops;
126 dev->destructor = free_netdev; 126 dev->needs_free_netdev = true;
127} 127}
128 128
129static struct net_device *qmimux_find_dev(struct usbnet *dev, u8 mux_id) 129static struct net_device *qmimux_find_dev(struct usbnet *dev, u8 mux_id)
@@ -1192,6 +1192,8 @@ static const struct usb_device_id products[] = {
1192 {QMI_FIXED_INTF(0x1199, 0x9056, 8)}, /* Sierra Wireless Modem */ 1192 {QMI_FIXED_INTF(0x1199, 0x9056, 8)}, /* Sierra Wireless Modem */
1193 {QMI_FIXED_INTF(0x1199, 0x9057, 8)}, 1193 {QMI_FIXED_INTF(0x1199, 0x9057, 8)},
1194 {QMI_FIXED_INTF(0x1199, 0x9061, 8)}, /* Sierra Wireless Modem */ 1194 {QMI_FIXED_INTF(0x1199, 0x9061, 8)}, /* Sierra Wireless Modem */
1195 {QMI_FIXED_INTF(0x1199, 0x9063, 8)}, /* Sierra Wireless EM7305 */
1196 {QMI_FIXED_INTF(0x1199, 0x9063, 10)}, /* Sierra Wireless EM7305 */
1195 {QMI_FIXED_INTF(0x1199, 0x9071, 8)}, /* Sierra Wireless MC74xx */ 1197 {QMI_FIXED_INTF(0x1199, 0x9071, 8)}, /* Sierra Wireless MC74xx */
1196 {QMI_FIXED_INTF(0x1199, 0x9071, 10)}, /* Sierra Wireless MC74xx */ 1198 {QMI_FIXED_INTF(0x1199, 0x9071, 10)}, /* Sierra Wireless MC74xx */
1197 {QMI_FIXED_INTF(0x1199, 0x9079, 8)}, /* Sierra Wireless EM74xx */ 1199 {QMI_FIXED_INTF(0x1199, 0x9079, 8)}, /* Sierra Wireless EM74xx */
@@ -1206,6 +1208,8 @@ static const struct usb_device_id products[] = {
1206 {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */ 1208 {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */
1207 {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */ 1209 {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */
1208 {QMI_QUIRK_SET_DTR(0x1bc7, 0x1201, 2)}, /* Telit LE920, LE920A4 */ 1210 {QMI_QUIRK_SET_DTR(0x1bc7, 0x1201, 2)}, /* Telit LE920, LE920A4 */
1211 {QMI_FIXED_INTF(0x1c9e, 0x9801, 3)}, /* Telewell TW-3G HSPA+ */
1212 {QMI_FIXED_INTF(0x1c9e, 0x9803, 4)}, /* Telewell TW-3G HSPA+ */
1209 {QMI_FIXED_INTF(0x1c9e, 0x9b01, 3)}, /* XS Stick W100-2 from 4G Systems */ 1213 {QMI_FIXED_INTF(0x1c9e, 0x9b01, 3)}, /* XS Stick W100-2 from 4G Systems */
1210 {QMI_FIXED_INTF(0x0b3c, 0xc000, 4)}, /* Olivetti Olicard 100 */ 1214 {QMI_FIXED_INTF(0x0b3c, 0xc000, 4)}, /* Olivetti Olicard 100 */
1211 {QMI_FIXED_INTF(0x0b3c, 0xc001, 4)}, /* Olivetti Olicard 120 */ 1215 {QMI_FIXED_INTF(0x0b3c, 0xc001, 4)}, /* Olivetti Olicard 120 */
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index ddc62cb69be8..1a419a45e2a2 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -4368,6 +4368,8 @@ static u8 rtl_get_version(struct usb_interface *intf)
4368 break; 4368 break;
4369 } 4369 }
4370 4370
4371 dev_dbg(&intf->dev, "Detected version 0x%04x\n", version);
4372
4371 return version; 4373 return version;
4372} 4374}
4373 4375
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 765400b62168..2dfca96a63b6 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -681,7 +681,7 @@ static int smsc95xx_set_features(struct net_device *netdev,
681 if (ret < 0) 681 if (ret < 0)
682 return ret; 682 return ret;
683 683
684 if (features & NETIF_F_HW_CSUM) 684 if (features & NETIF_F_IP_CSUM)
685 read_buf |= Tx_COE_EN_; 685 read_buf |= Tx_COE_EN_;
686 else 686 else
687 read_buf &= ~Tx_COE_EN_; 687 read_buf &= ~Tx_COE_EN_;
@@ -1279,12 +1279,19 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
1279 1279
1280 spin_lock_init(&pdata->mac_cr_lock); 1280 spin_lock_init(&pdata->mac_cr_lock);
1281 1281
1282 /* LAN95xx devices do not alter the computed checksum of 0 to 0xffff.
1283 * RFC 2460, ipv6 UDP calculated checksum yields a result of zero must
1284 * be changed to 0xffff. RFC 768, ipv4 UDP computed checksum is zero,
1285 * it is transmitted as all ones. The zero transmitted checksum means
1286 * transmitter generated no checksum. Hence, enable csum offload only
1287 * for ipv4 packets.
1288 */
1282 if (DEFAULT_TX_CSUM_ENABLE) 1289 if (DEFAULT_TX_CSUM_ENABLE)
1283 dev->net->features |= NETIF_F_HW_CSUM; 1290 dev->net->features |= NETIF_F_IP_CSUM;
1284 if (DEFAULT_RX_CSUM_ENABLE) 1291 if (DEFAULT_RX_CSUM_ENABLE)
1285 dev->net->features |= NETIF_F_RXCSUM; 1292 dev->net->features |= NETIF_F_RXCSUM;
1286 1293
1287 dev->net->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM; 1294 dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
1288 1295
1289 smsc95xx_init_mac_address(dev); 1296 smsc95xx_init_mac_address(dev);
1290 1297
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 38f0f03a29c8..364fa9d11d1a 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -222,7 +222,6 @@ static int veth_dev_init(struct net_device *dev)
222static void veth_dev_free(struct net_device *dev) 222static void veth_dev_free(struct net_device *dev)
223{ 223{
224 free_percpu(dev->vstats); 224 free_percpu(dev->vstats);
225 free_netdev(dev);
226} 225}
227 226
228#ifdef CONFIG_NET_POLL_CONTROLLER 227#ifdef CONFIG_NET_POLL_CONTROLLER
@@ -317,7 +316,8 @@ static void veth_setup(struct net_device *dev)
317 NETIF_F_HW_VLAN_STAG_TX | 316 NETIF_F_HW_VLAN_STAG_TX |
318 NETIF_F_HW_VLAN_CTAG_RX | 317 NETIF_F_HW_VLAN_CTAG_RX |
319 NETIF_F_HW_VLAN_STAG_RX); 318 NETIF_F_HW_VLAN_STAG_RX);
320 dev->destructor = veth_dev_free; 319 dev->needs_free_netdev = true;
320 dev->priv_destructor = veth_dev_free;
321 dev->max_mtu = ETH_MAX_MTU; 321 dev->max_mtu = ETH_MAX_MTU;
322 322
323 dev->hw_features = VETH_FEATURES; 323 dev->hw_features = VETH_FEATURES;
@@ -383,7 +383,7 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
383 tbp = tb; 383 tbp = tb;
384 } 384 }
385 385
386 if (tbp[IFLA_IFNAME]) { 386 if (ifmp && tbp[IFLA_IFNAME]) {
387 nla_strlcpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ); 387 nla_strlcpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ);
388 name_assign_type = NET_NAME_USER; 388 name_assign_type = NET_NAME_USER;
389 } else { 389 } else {
@@ -402,7 +402,7 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
402 return PTR_ERR(peer); 402 return PTR_ERR(peer);
403 } 403 }
404 404
405 if (tbp[IFLA_ADDRESS] == NULL) 405 if (!ifmp || !tbp[IFLA_ADDRESS])
406 eth_hw_addr_random(peer); 406 eth_hw_addr_random(peer);
407 407
408 if (ifmp && (dev->ifindex != 0)) 408 if (ifmp && (dev->ifindex != 0))
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 9320d96a1632..143d8a95a60d 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -869,7 +869,7 @@ static unsigned int get_mergeable_buf_len(struct receive_queue *rq,
869 unsigned int len; 869 unsigned int len;
870 870
871 len = hdr_len + clamp_t(unsigned int, ewma_pkt_len_read(avg_pkt_len), 871 len = hdr_len + clamp_t(unsigned int, ewma_pkt_len_read(avg_pkt_len),
872 rq->min_buf_len - hdr_len, PAGE_SIZE - hdr_len); 872 rq->min_buf_len, PAGE_SIZE - hdr_len);
873 return ALIGN(len, L1_CACHE_BYTES); 873 return ALIGN(len, L1_CACHE_BYTES);
874} 874}
875 875
@@ -1797,6 +1797,7 @@ static void virtnet_freeze_down(struct virtio_device *vdev)
1797 flush_work(&vi->config_work); 1797 flush_work(&vi->config_work);
1798 1798
1799 netif_device_detach(vi->dev); 1799 netif_device_detach(vi->dev);
1800 netif_tx_disable(vi->dev);
1800 cancel_delayed_work_sync(&vi->refill); 1801 cancel_delayed_work_sync(&vi->refill);
1801 1802
1802 if (netif_running(vi->dev)) { 1803 if (netif_running(vi->dev)) {
@@ -1989,6 +1990,7 @@ static const struct net_device_ops virtnet_netdev = {
1989 .ndo_poll_controller = virtnet_netpoll, 1990 .ndo_poll_controller = virtnet_netpoll,
1990#endif 1991#endif
1991 .ndo_xdp = virtnet_xdp, 1992 .ndo_xdp = virtnet_xdp,
1993 .ndo_features_check = passthru_features_check,
1992}; 1994};
1993 1995
1994static void virtnet_config_changed_work(struct work_struct *work) 1996static void virtnet_config_changed_work(struct work_struct *work)
@@ -2143,7 +2145,8 @@ static unsigned int mergeable_min_buf_len(struct virtnet_info *vi, struct virtqu
2143 unsigned int buf_len = hdr_len + ETH_HLEN + VLAN_HLEN + packet_len; 2145 unsigned int buf_len = hdr_len + ETH_HLEN + VLAN_HLEN + packet_len;
2144 unsigned int min_buf_len = DIV_ROUND_UP(buf_len, rq_size); 2146 unsigned int min_buf_len = DIV_ROUND_UP(buf_len, rq_size);
2145 2147
2146 return max(min_buf_len, hdr_len); 2148 return max(max(min_buf_len, hdr_len) - hdr_len,
2149 (unsigned int)GOOD_PACKET_LEN);
2147} 2150}
2148 2151
2149static int virtnet_find_vqs(struct virtnet_info *vi) 2152static int virtnet_find_vqs(struct virtnet_info *vi)
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index db882493875c..022c0b5f9844 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -36,12 +36,14 @@
36#include <net/addrconf.h> 36#include <net/addrconf.h>
37#include <net/l3mdev.h> 37#include <net/l3mdev.h>
38#include <net/fib_rules.h> 38#include <net/fib_rules.h>
39#include <net/netns/generic.h>
39 40
40#define DRV_NAME "vrf" 41#define DRV_NAME "vrf"
41#define DRV_VERSION "1.0" 42#define DRV_VERSION "1.0"
42 43
43#define FIB_RULE_PREF 1000 /* default preference for FIB rules */ 44#define FIB_RULE_PREF 1000 /* default preference for FIB rules */
44static bool add_fib_rules = true; 45
46static unsigned int vrf_net_id;
45 47
46struct net_vrf { 48struct net_vrf {
47 struct rtable __rcu *rth; 49 struct rtable __rcu *rth;
@@ -1348,7 +1350,7 @@ static void vrf_setup(struct net_device *dev)
1348 dev->netdev_ops = &vrf_netdev_ops; 1350 dev->netdev_ops = &vrf_netdev_ops;
1349 dev->l3mdev_ops = &vrf_l3mdev_ops; 1351 dev->l3mdev_ops = &vrf_l3mdev_ops;
1350 dev->ethtool_ops = &vrf_ethtool_ops; 1352 dev->ethtool_ops = &vrf_ethtool_ops;
1351 dev->destructor = free_netdev; 1353 dev->needs_free_netdev = true;
1352 1354
1353 /* Fill in device structure with ethernet-generic values. */ 1355 /* Fill in device structure with ethernet-generic values. */
1354 eth_hw_addr_random(dev); 1356 eth_hw_addr_random(dev);
@@ -1394,6 +1396,8 @@ static int vrf_newlink(struct net *src_net, struct net_device *dev,
1394 struct nlattr *tb[], struct nlattr *data[]) 1396 struct nlattr *tb[], struct nlattr *data[])
1395{ 1397{
1396 struct net_vrf *vrf = netdev_priv(dev); 1398 struct net_vrf *vrf = netdev_priv(dev);
1399 bool *add_fib_rules;
1400 struct net *net;
1397 int err; 1401 int err;
1398 1402
1399 if (!data || !data[IFLA_VRF_TABLE]) 1403 if (!data || !data[IFLA_VRF_TABLE])
@@ -1409,13 +1413,15 @@ static int vrf_newlink(struct net *src_net, struct net_device *dev,
1409 if (err) 1413 if (err)
1410 goto out; 1414 goto out;
1411 1415
1412 if (add_fib_rules) { 1416 net = dev_net(dev);
1417 add_fib_rules = net_generic(net, vrf_net_id);
1418 if (*add_fib_rules) {
1413 err = vrf_add_fib_rules(dev); 1419 err = vrf_add_fib_rules(dev);
1414 if (err) { 1420 if (err) {
1415 unregister_netdevice(dev); 1421 unregister_netdevice(dev);
1416 goto out; 1422 goto out;
1417 } 1423 }
1418 add_fib_rules = false; 1424 *add_fib_rules = false;
1419 } 1425 }
1420 1426
1421out: 1427out:
@@ -1498,16 +1504,38 @@ static struct notifier_block vrf_notifier_block __read_mostly = {
1498 .notifier_call = vrf_device_event, 1504 .notifier_call = vrf_device_event,
1499}; 1505};
1500 1506
1507/* Initialize per network namespace state */
1508static int __net_init vrf_netns_init(struct net *net)
1509{
1510 bool *add_fib_rules = net_generic(net, vrf_net_id);
1511
1512 *add_fib_rules = true;
1513
1514 return 0;
1515}
1516
1517static struct pernet_operations vrf_net_ops __net_initdata = {
1518 .init = vrf_netns_init,
1519 .id = &vrf_net_id,
1520 .size = sizeof(bool),
1521};
1522
1501static int __init vrf_init_module(void) 1523static int __init vrf_init_module(void)
1502{ 1524{
1503 int rc; 1525 int rc;
1504 1526
1505 register_netdevice_notifier(&vrf_notifier_block); 1527 register_netdevice_notifier(&vrf_notifier_block);
1506 1528
1507 rc = rtnl_link_register(&vrf_link_ops); 1529 rc = register_pernet_subsys(&vrf_net_ops);
1508 if (rc < 0) 1530 if (rc < 0)
1509 goto error; 1531 goto error;
1510 1532
1533 rc = rtnl_link_register(&vrf_link_ops);
1534 if (rc < 0) {
1535 unregister_pernet_subsys(&vrf_net_ops);
1536 goto error;
1537 }
1538
1511 return 0; 1539 return 0;
1512 1540
1513error: 1541error:
diff --git a/drivers/net/vsockmon.c b/drivers/net/vsockmon.c
index 7f0136f2dd9d..c28bdce14fd5 100644
--- a/drivers/net/vsockmon.c
+++ b/drivers/net/vsockmon.c
@@ -135,7 +135,7 @@ static void vsockmon_setup(struct net_device *dev)
135 135
136 dev->netdev_ops = &vsockmon_ops; 136 dev->netdev_ops = &vsockmon_ops;
137 dev->ethtool_ops = &vsockmon_ethtool_ops; 137 dev->ethtool_ops = &vsockmon_ethtool_ops;
138 dev->destructor = free_netdev; 138 dev->needs_free_netdev = true;
139 139
140 dev->features = NETIF_F_SG | NETIF_F_FRAGLIST | 140 dev->features = NETIF_F_SG | NETIF_F_FRAGLIST |
141 NETIF_F_HIGHDMA | NETIF_F_LLTX; 141 NETIF_F_HIGHDMA | NETIF_F_LLTX;
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 328b4712683c..5fa798a5c9a6 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -59,6 +59,8 @@ static const u8 all_zeros_mac[ETH_ALEN + 2];
59 59
60static int vxlan_sock_add(struct vxlan_dev *vxlan); 60static int vxlan_sock_add(struct vxlan_dev *vxlan);
61 61
62static void vxlan_vs_del_dev(struct vxlan_dev *vxlan);
63
62/* per-network namespace private data for this module */ 64/* per-network namespace private data for this module */
63struct vxlan_net { 65struct vxlan_net {
64 struct list_head vxlan_list; 66 struct list_head vxlan_list;
@@ -740,6 +742,22 @@ static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f)
740 call_rcu(&f->rcu, vxlan_fdb_free); 742 call_rcu(&f->rcu, vxlan_fdb_free);
741} 743}
742 744
745static void vxlan_dst_free(struct rcu_head *head)
746{
747 struct vxlan_rdst *rd = container_of(head, struct vxlan_rdst, rcu);
748
749 dst_cache_destroy(&rd->dst_cache);
750 kfree(rd);
751}
752
753static void vxlan_fdb_dst_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f,
754 struct vxlan_rdst *rd)
755{
756 list_del_rcu(&rd->list);
757 vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH);
758 call_rcu(&rd->rcu, vxlan_dst_free);
759}
760
743static int vxlan_fdb_parse(struct nlattr *tb[], struct vxlan_dev *vxlan, 761static int vxlan_fdb_parse(struct nlattr *tb[], struct vxlan_dev *vxlan,
744 union vxlan_addr *ip, __be16 *port, __be32 *src_vni, 762 union vxlan_addr *ip, __be16 *port, __be32 *src_vni,
745 __be32 *vni, u32 *ifindex) 763 __be32 *vni, u32 *ifindex)
@@ -864,9 +882,7 @@ static int __vxlan_fdb_delete(struct vxlan_dev *vxlan,
864 * otherwise destroy the fdb entry 882 * otherwise destroy the fdb entry
865 */ 883 */
866 if (rd && !list_is_singular(&f->remotes)) { 884 if (rd && !list_is_singular(&f->remotes)) {
867 list_del_rcu(&rd->list); 885 vxlan_fdb_dst_destroy(vxlan, f, rd);
868 vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH);
869 kfree_rcu(rd, rcu);
870 goto out; 886 goto out;
871 } 887 }
872 888
@@ -1067,6 +1083,8 @@ static void vxlan_sock_release(struct vxlan_dev *vxlan)
1067 rcu_assign_pointer(vxlan->vn4_sock, NULL); 1083 rcu_assign_pointer(vxlan->vn4_sock, NULL);
1068 synchronize_net(); 1084 synchronize_net();
1069 1085
1086 vxlan_vs_del_dev(vxlan);
1087
1070 if (__vxlan_sock_release_prep(sock4)) { 1088 if (__vxlan_sock_release_prep(sock4)) {
1071 udp_tunnel_sock_release(sock4->sock); 1089 udp_tunnel_sock_release(sock4->sock);
1072 kfree(sock4); 1090 kfree(sock4);
@@ -2342,6 +2360,15 @@ static void vxlan_cleanup(unsigned long arg)
2342 mod_timer(&vxlan->age_timer, next_timer); 2360 mod_timer(&vxlan->age_timer, next_timer);
2343} 2361}
2344 2362
2363static void vxlan_vs_del_dev(struct vxlan_dev *vxlan)
2364{
2365 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
2366
2367 spin_lock(&vn->sock_lock);
2368 hlist_del_init_rcu(&vxlan->hlist);
2369 spin_unlock(&vn->sock_lock);
2370}
2371
2345static void vxlan_vs_add_dev(struct vxlan_sock *vs, struct vxlan_dev *vxlan) 2372static void vxlan_vs_add_dev(struct vxlan_sock *vs, struct vxlan_dev *vxlan)
2346{ 2373{
2347 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id); 2374 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
@@ -2584,7 +2611,7 @@ static void vxlan_setup(struct net_device *dev)
2584 eth_hw_addr_random(dev); 2611 eth_hw_addr_random(dev);
2585 ether_setup(dev); 2612 ether_setup(dev);
2586 2613
2587 dev->destructor = free_netdev; 2614 dev->needs_free_netdev = true;
2588 SET_NETDEV_DEVTYPE(dev, &vxlan_type); 2615 SET_NETDEV_DEVTYPE(dev, &vxlan_type);
2589 2616
2590 dev->features |= NETIF_F_LLTX; 2617 dev->features |= NETIF_F_LLTX;
@@ -3286,15 +3313,9 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[],
3286static void vxlan_dellink(struct net_device *dev, struct list_head *head) 3313static void vxlan_dellink(struct net_device *dev, struct list_head *head)
3287{ 3314{
3288 struct vxlan_dev *vxlan = netdev_priv(dev); 3315 struct vxlan_dev *vxlan = netdev_priv(dev);
3289 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
3290 3316
3291 vxlan_flush(vxlan, true); 3317 vxlan_flush(vxlan, true);
3292 3318
3293 spin_lock(&vn->sock_lock);
3294 if (!hlist_unhashed(&vxlan->hlist))
3295 hlist_del_rcu(&vxlan->hlist);
3296 spin_unlock(&vn->sock_lock);
3297
3298 gro_cells_destroy(&vxlan->gro_cells); 3319 gro_cells_destroy(&vxlan->gro_cells);
3299 list_del(&vxlan->next); 3320 list_del(&vxlan->next);
3300 unregister_netdevice_queue(dev, head); 3321 unregister_netdevice_queue(dev, head);
diff --git a/drivers/net/wan/dlci.c b/drivers/net/wan/dlci.c
index 65ee2a6f248c..a0d76f70c428 100644
--- a/drivers/net/wan/dlci.c
+++ b/drivers/net/wan/dlci.c
@@ -475,7 +475,7 @@ static void dlci_setup(struct net_device *dev)
475 dev->flags = 0; 475 dev->flags = 0;
476 dev->header_ops = &dlci_header_ops; 476 dev->header_ops = &dlci_header_ops;
477 dev->netdev_ops = &dlci_netdev_ops; 477 dev->netdev_ops = &dlci_netdev_ops;
478 dev->destructor = free_netdev; 478 dev->needs_free_netdev = true;
479 479
480 dlp->receive = dlci_receive; 480 dlp->receive = dlci_receive;
481 481
diff --git a/drivers/net/wan/hdlc_fr.c b/drivers/net/wan/hdlc_fr.c
index eb915281197e..78596e42a3f3 100644
--- a/drivers/net/wan/hdlc_fr.c
+++ b/drivers/net/wan/hdlc_fr.c
@@ -1106,7 +1106,7 @@ static int fr_add_pvc(struct net_device *frad, unsigned int dlci, int type)
1106 return -EIO; 1106 return -EIO;
1107 } 1107 }
1108 1108
1109 dev->destructor = free_netdev; 1109 dev->needs_free_netdev = true;
1110 *get_dev_p(pvc, type) = dev; 1110 *get_dev_p(pvc, type) = dev;
1111 if (!used) { 1111 if (!used) {
1112 state(hdlc)->dce_changed = 1; 1112 state(hdlc)->dce_changed = 1;
diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c
index 9df9ed62beff..63f749078a1f 100644
--- a/drivers/net/wan/lapbether.c
+++ b/drivers/net/wan/lapbether.c
@@ -306,7 +306,7 @@ static const struct net_device_ops lapbeth_netdev_ops = {
306static void lapbeth_setup(struct net_device *dev) 306static void lapbeth_setup(struct net_device *dev)
307{ 307{
308 dev->netdev_ops = &lapbeth_netdev_ops; 308 dev->netdev_ops = &lapbeth_netdev_ops;
309 dev->destructor = free_netdev; 309 dev->needs_free_netdev = true;
310 dev->type = ARPHRD_X25; 310 dev->type = ARPHRD_X25;
311 dev->hard_header_len = 3; 311 dev->hard_header_len = 3;
312 dev->mtu = 1000; 312 dev->mtu = 1000;
diff --git a/drivers/net/wireless/ath/ath6kl/main.c b/drivers/net/wireless/ath/ath6kl/main.c
index 91ee542de3d7..b90c77ef792e 100644
--- a/drivers/net/wireless/ath/ath6kl/main.c
+++ b/drivers/net/wireless/ath/ath6kl/main.c
@@ -1287,7 +1287,7 @@ void init_netdev(struct net_device *dev)
1287 struct ath6kl *ar = ath6kl_priv(dev); 1287 struct ath6kl *ar = ath6kl_priv(dev);
1288 1288
1289 dev->netdev_ops = &ath6kl_netdev_ops; 1289 dev->netdev_ops = &ath6kl_netdev_ops;
1290 dev->destructor = free_netdev; 1290 dev->needs_free_netdev = true;
1291 dev->watchdog_timeo = ATH6KL_TX_TIMEOUT; 1291 dev->watchdog_timeo = ATH6KL_TX_TIMEOUT;
1292 1292
1293 dev->needed_headroom = ETH_HLEN; 1293 dev->needed_headroom = ETH_HLEN;
diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
index d5e993dc9b23..517a315e259b 100644
--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -1271,6 +1271,8 @@ static int wcn36xx_remove(struct platform_device *pdev)
1271 qcom_smem_state_put(wcn->tx_enable_state); 1271 qcom_smem_state_put(wcn->tx_enable_state);
1272 qcom_smem_state_put(wcn->tx_rings_empty_state); 1272 qcom_smem_state_put(wcn->tx_rings_empty_state);
1273 1273
1274 rpmsg_destroy_ept(wcn->smd_channel);
1275
1274 iounmap(wcn->dxe_base); 1276 iounmap(wcn->dxe_base);
1275 iounmap(wcn->ccu_base); 1277 iounmap(wcn->ccu_base);
1276 1278
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index cd1d6730eab7..617199c0e5a0 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -5225,7 +5225,6 @@ void brcmf_cfg80211_free_netdev(struct net_device *ndev)
5225 5225
5226 if (vif) 5226 if (vif)
5227 brcmf_free_vif(vif); 5227 brcmf_free_vif(vif);
5228 free_netdev(ndev);
5229} 5228}
5230 5229
5231static bool brcmf_is_linkup(const struct brcmf_event_msg *e) 5230static bool brcmf_is_linkup(const struct brcmf_event_msg *e)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index a3d82368f1a9..511d190c6cca 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -624,7 +624,8 @@ struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bsscfgidx, s32 ifidx,
624 if (!ndev) 624 if (!ndev)
625 return ERR_PTR(-ENOMEM); 625 return ERR_PTR(-ENOMEM);
626 626
627 ndev->destructor = brcmf_cfg80211_free_netdev; 627 ndev->needs_free_netdev = true;
628 ndev->priv_destructor = brcmf_cfg80211_free_netdev;
628 ifp = netdev_priv(ndev); 629 ifp = netdev_priv(ndev);
629 ifp->ndev = ndev; 630 ifp->ndev = ndev;
630 /* store mapping ifidx to bsscfgidx */ 631 /* store mapping ifidx to bsscfgidx */
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
index c7c1e9906500..d231042f19d6 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
@@ -442,7 +442,7 @@ struct brcmf_fw {
442 const char *nvram_name; 442 const char *nvram_name;
443 u16 domain_nr; 443 u16 domain_nr;
444 u16 bus_nr; 444 u16 bus_nr;
445 void (*done)(struct device *dev, const struct firmware *fw, 445 void (*done)(struct device *dev, int err, const struct firmware *fw,
446 void *nvram_image, u32 nvram_len); 446 void *nvram_image, u32 nvram_len);
447}; 447};
448 448
@@ -477,52 +477,51 @@ static void brcmf_fw_request_nvram_done(const struct firmware *fw, void *ctx)
477 if (!nvram && !(fwctx->flags & BRCMF_FW_REQ_NV_OPTIONAL)) 477 if (!nvram && !(fwctx->flags & BRCMF_FW_REQ_NV_OPTIONAL))
478 goto fail; 478 goto fail;
479 479
480 fwctx->done(fwctx->dev, fwctx->code, nvram, nvram_length); 480 fwctx->done(fwctx->dev, 0, fwctx->code, nvram, nvram_length);
481 kfree(fwctx); 481 kfree(fwctx);
482 return; 482 return;
483 483
484fail: 484fail:
485 brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev)); 485 brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
486 release_firmware(fwctx->code); 486 release_firmware(fwctx->code);
487 device_release_driver(fwctx->dev); 487 fwctx->done(fwctx->dev, -ENOENT, NULL, NULL, 0);
488 kfree(fwctx); 488 kfree(fwctx);
489} 489}
490 490
491static void brcmf_fw_request_code_done(const struct firmware *fw, void *ctx) 491static void brcmf_fw_request_code_done(const struct firmware *fw, void *ctx)
492{ 492{
493 struct brcmf_fw *fwctx = ctx; 493 struct brcmf_fw *fwctx = ctx;
494 int ret; 494 int ret = 0;
495 495
496 brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(fwctx->dev)); 496 brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(fwctx->dev));
497 if (!fw) 497 if (!fw) {
498 ret = -ENOENT;
498 goto fail; 499 goto fail;
499
500 /* only requested code so done here */
501 if (!(fwctx->flags & BRCMF_FW_REQUEST_NVRAM)) {
502 fwctx->done(fwctx->dev, fw, NULL, 0);
503 kfree(fwctx);
504 return;
505 } 500 }
501 /* only requested code so done here */
502 if (!(fwctx->flags & BRCMF_FW_REQUEST_NVRAM))
503 goto done;
504
506 fwctx->code = fw; 505 fwctx->code = fw;
507 ret = request_firmware_nowait(THIS_MODULE, true, fwctx->nvram_name, 506 ret = request_firmware_nowait(THIS_MODULE, true, fwctx->nvram_name,
508 fwctx->dev, GFP_KERNEL, fwctx, 507 fwctx->dev, GFP_KERNEL, fwctx,
509 brcmf_fw_request_nvram_done); 508 brcmf_fw_request_nvram_done);
510 509
511 if (!ret) 510 /* pass NULL to nvram callback for bcm47xx fallback */
512 return; 511 if (ret)
513 512 brcmf_fw_request_nvram_done(NULL, fwctx);
514 brcmf_fw_request_nvram_done(NULL, fwctx);
515 return; 513 return;
516 514
517fail: 515fail:
518 brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev)); 516 brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
519 device_release_driver(fwctx->dev); 517done:
518 fwctx->done(fwctx->dev, ret, fw, NULL, 0);
520 kfree(fwctx); 519 kfree(fwctx);
521} 520}
522 521
523int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags, 522int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
524 const char *code, const char *nvram, 523 const char *code, const char *nvram,
525 void (*fw_cb)(struct device *dev, 524 void (*fw_cb)(struct device *dev, int err,
526 const struct firmware *fw, 525 const struct firmware *fw,
527 void *nvram_image, u32 nvram_len), 526 void *nvram_image, u32 nvram_len),
528 u16 domain_nr, u16 bus_nr) 527 u16 domain_nr, u16 bus_nr)
@@ -555,7 +554,7 @@ int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
555 554
556int brcmf_fw_get_firmwares(struct device *dev, u16 flags, 555int brcmf_fw_get_firmwares(struct device *dev, u16 flags,
557 const char *code, const char *nvram, 556 const char *code, const char *nvram,
558 void (*fw_cb)(struct device *dev, 557 void (*fw_cb)(struct device *dev, int err,
559 const struct firmware *fw, 558 const struct firmware *fw,
560 void *nvram_image, u32 nvram_len)) 559 void *nvram_image, u32 nvram_len))
561{ 560{
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
index d3c9f0d52ae3..8fa4b7e1ab3d 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
@@ -73,13 +73,13 @@ void brcmf_fw_nvram_free(void *nvram);
73 */ 73 */
74int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags, 74int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
75 const char *code, const char *nvram, 75 const char *code, const char *nvram,
76 void (*fw_cb)(struct device *dev, 76 void (*fw_cb)(struct device *dev, int err,
77 const struct firmware *fw, 77 const struct firmware *fw,
78 void *nvram_image, u32 nvram_len), 78 void *nvram_image, u32 nvram_len),
79 u16 domain_nr, u16 bus_nr); 79 u16 domain_nr, u16 bus_nr);
80int brcmf_fw_get_firmwares(struct device *dev, u16 flags, 80int brcmf_fw_get_firmwares(struct device *dev, u16 flags,
81 const char *code, const char *nvram, 81 const char *code, const char *nvram,
82 void (*fw_cb)(struct device *dev, 82 void (*fw_cb)(struct device *dev, int err,
83 const struct firmware *fw, 83 const struct firmware *fw,
84 void *nvram_image, u32 nvram_len)); 84 void *nvram_image, u32 nvram_len));
85 85
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
index 72373e59308e..f59642b2c935 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
@@ -2145,7 +2145,7 @@ void brcmf_fws_add_interface(struct brcmf_if *ifp)
2145 struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr); 2145 struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
2146 struct brcmf_fws_mac_descriptor *entry; 2146 struct brcmf_fws_mac_descriptor *entry;
2147 2147
2148 if (!ifp->ndev || fws->fcmode == BRCMF_FWS_FCMODE_NONE) 2148 if (!ifp->ndev || !brcmf_fws_queue_skbs(fws))
2149 return; 2149 return;
2150 2150
2151 entry = &fws->desc.iface[ifp->ifidx]; 2151 entry = &fws->desc.iface[ifp->ifidx];
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
index f36b96dc6acd..f878706613e6 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
@@ -1650,16 +1650,23 @@ static const struct brcmf_buscore_ops brcmf_pcie_buscore_ops = {
1650 .write32 = brcmf_pcie_buscore_write32, 1650 .write32 = brcmf_pcie_buscore_write32,
1651}; 1651};
1652 1652
1653static void brcmf_pcie_setup(struct device *dev, const struct firmware *fw, 1653static void brcmf_pcie_setup(struct device *dev, int ret,
1654 const struct firmware *fw,
1654 void *nvram, u32 nvram_len) 1655 void *nvram, u32 nvram_len)
1655{ 1656{
1656 struct brcmf_bus *bus = dev_get_drvdata(dev); 1657 struct brcmf_bus *bus;
1657 struct brcmf_pciedev *pcie_bus_dev = bus->bus_priv.pcie; 1658 struct brcmf_pciedev *pcie_bus_dev;
1658 struct brcmf_pciedev_info *devinfo = pcie_bus_dev->devinfo; 1659 struct brcmf_pciedev_info *devinfo;
1659 struct brcmf_commonring **flowrings; 1660 struct brcmf_commonring **flowrings;
1660 int ret;
1661 u32 i; 1661 u32 i;
1662 1662
1663 /* check firmware loading result */
1664 if (ret)
1665 goto fail;
1666
1667 bus = dev_get_drvdata(dev);
1668 pcie_bus_dev = bus->bus_priv.pcie;
1669 devinfo = pcie_bus_dev->devinfo;
1663 brcmf_pcie_attach(devinfo); 1670 brcmf_pcie_attach(devinfo);
1664 1671
1665 /* Some of the firmwares have the size of the memory of the device 1672 /* Some of the firmwares have the size of the memory of the device
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index fc64b8913aa6..5653d6dd38f6 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -3422,7 +3422,7 @@ static int brcmf_sdio_bus_preinit(struct device *dev)
3422 /* otherwise, set txglomalign */ 3422 /* otherwise, set txglomalign */
3423 value = sdiodev->settings->bus.sdio.sd_sgentry_align; 3423 value = sdiodev->settings->bus.sdio.sd_sgentry_align;
3424 /* SDIO ADMA requires at least 32 bit alignment */ 3424 /* SDIO ADMA requires at least 32 bit alignment */
3425 value = max_t(u32, value, 4); 3425 value = max_t(u32, value, ALIGNMENT);
3426 err = brcmf_iovar_data_set(dev, "bus:txglomalign", &value, 3426 err = brcmf_iovar_data_set(dev, "bus:txglomalign", &value,
3427 sizeof(u32)); 3427 sizeof(u32));
3428 } 3428 }
@@ -3982,21 +3982,26 @@ static const struct brcmf_bus_ops brcmf_sdio_bus_ops = {
3982 .get_memdump = brcmf_sdio_bus_get_memdump, 3982 .get_memdump = brcmf_sdio_bus_get_memdump,
3983}; 3983};
3984 3984
3985static void brcmf_sdio_firmware_callback(struct device *dev, 3985static void brcmf_sdio_firmware_callback(struct device *dev, int err,
3986 const struct firmware *code, 3986 const struct firmware *code,
3987 void *nvram, u32 nvram_len) 3987 void *nvram, u32 nvram_len)
3988{ 3988{
3989 struct brcmf_bus *bus_if = dev_get_drvdata(dev); 3989 struct brcmf_bus *bus_if;
3990 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; 3990 struct brcmf_sdio_dev *sdiodev;
3991 struct brcmf_sdio *bus = sdiodev->bus; 3991 struct brcmf_sdio *bus;
3992 int err = 0;
3993 u8 saveclk; 3992 u8 saveclk;
3994 3993
3995 brcmf_dbg(TRACE, "Enter: dev=%s\n", dev_name(dev)); 3994 brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
3995 bus_if = dev_get_drvdata(dev);
3996 sdiodev = bus_if->bus_priv.sdio;
3997 if (err)
3998 goto fail;
3996 3999
3997 if (!bus_if->drvr) 4000 if (!bus_if->drvr)
3998 return; 4001 return;
3999 4002
4003 bus = sdiodev->bus;
4004
4000 /* try to download image and nvram to the dongle */ 4005 /* try to download image and nvram to the dongle */
4001 bus->alp_only = true; 4006 bus->alp_only = true;
4002 err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len); 4007 err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
@@ -4083,6 +4088,7 @@ release:
4083fail: 4088fail:
4084 brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err); 4089 brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err);
4085 device_release_driver(dev); 4090 device_release_driver(dev);
4091 device_release_driver(&sdiodev->func[2]->dev);
4086} 4092}
4087 4093
4088struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev) 4094struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
index e4d545f9edee..0eea48e73331 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
@@ -1159,17 +1159,18 @@ fail:
1159 return ret; 1159 return ret;
1160} 1160}
1161 1161
1162static void brcmf_usb_probe_phase2(struct device *dev, 1162static void brcmf_usb_probe_phase2(struct device *dev, int ret,
1163 const struct firmware *fw, 1163 const struct firmware *fw,
1164 void *nvram, u32 nvlen) 1164 void *nvram, u32 nvlen)
1165{ 1165{
1166 struct brcmf_bus *bus = dev_get_drvdata(dev); 1166 struct brcmf_bus *bus = dev_get_drvdata(dev);
1167 struct brcmf_usbdev_info *devinfo; 1167 struct brcmf_usbdev_info *devinfo = bus->bus_priv.usb->devinfo;
1168 int ret; 1168
1169 if (ret)
1170 goto error;
1169 1171
1170 brcmf_dbg(USB, "Start fw downloading\n"); 1172 brcmf_dbg(USB, "Start fw downloading\n");
1171 1173
1172 devinfo = bus->bus_priv.usb->devinfo;
1173 ret = check_file(fw->data); 1174 ret = check_file(fw->data);
1174 if (ret < 0) { 1175 if (ret < 0) {
1175 brcmf_err("invalid firmware\n"); 1176 brcmf_err("invalid firmware\n");
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-7000.c b/drivers/net/wireless/intel/iwlwifi/iwl-7000.c
index 3b3e076571d6..45e2efc70d19 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-7000.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-7000.c
@@ -79,8 +79,8 @@
79/* Lowest firmware API version supported */ 79/* Lowest firmware API version supported */
80#define IWL7260_UCODE_API_MIN 17 80#define IWL7260_UCODE_API_MIN 17
81#define IWL7265_UCODE_API_MIN 17 81#define IWL7265_UCODE_API_MIN 17
82#define IWL7265D_UCODE_API_MIN 17 82#define IWL7265D_UCODE_API_MIN 22
83#define IWL3168_UCODE_API_MIN 20 83#define IWL3168_UCODE_API_MIN 22
84 84
85/* NVM versions */ 85/* NVM versions */
86#define IWL7260_NVM_VERSION 0x0a1d 86#define IWL7260_NVM_VERSION 0x0a1d
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-8000.c b/drivers/net/wireless/intel/iwlwifi/iwl-8000.c
index b9718c0cf174..89137717c1fc 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-8000.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-8000.c
@@ -74,8 +74,8 @@
74#define IWL8265_UCODE_API_MAX 30 74#define IWL8265_UCODE_API_MAX 30
75 75
76/* Lowest firmware API version supported */ 76/* Lowest firmware API version supported */
77#define IWL8000_UCODE_API_MIN 17 77#define IWL8000_UCODE_API_MIN 22
78#define IWL8265_UCODE_API_MIN 20 78#define IWL8265_UCODE_API_MIN 22
79 79
80/* NVM versions */ 80/* NVM versions */
81#define IWL8000_NVM_VERSION 0x0a1d 81#define IWL8000_NVM_VERSION 0x0a1d
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-prph.h b/drivers/net/wireless/intel/iwlwifi/iwl-prph.h
index 306bc967742e..77efbb78e867 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-prph.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-prph.h
@@ -370,6 +370,7 @@
370#define MON_DMARB_RD_DATA_ADDR (0xa03c5c) 370#define MON_DMARB_RD_DATA_ADDR (0xa03c5c)
371 371
372#define DBGC_IN_SAMPLE (0xa03c00) 372#define DBGC_IN_SAMPLE (0xa03c00)
373#define DBGC_OUT_CTRL (0xa03c0c)
373 374
374/* enable the ID buf for read */ 375/* enable the ID buf for read */
375#define WFPM_PS_CTL_CLR 0xA0300C 376#define WFPM_PS_CTL_CLR 0xA0300C
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rs.h b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rs.h
index 1b7d265ffb0a..a10c6aae9ab9 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rs.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rs.h
@@ -307,6 +307,11 @@ enum {
307/* Bit 1-3: LQ command color. Used to match responses to LQ commands */ 307/* Bit 1-3: LQ command color. Used to match responses to LQ commands */
308#define LQ_FLAG_COLOR_POS 1 308#define LQ_FLAG_COLOR_POS 1
309#define LQ_FLAG_COLOR_MSK (7 << LQ_FLAG_COLOR_POS) 309#define LQ_FLAG_COLOR_MSK (7 << LQ_FLAG_COLOR_POS)
310#define LQ_FLAG_COLOR_GET(_f) (((_f) & LQ_FLAG_COLOR_MSK) >>\
311 LQ_FLAG_COLOR_POS)
312#define LQ_FLAGS_COLOR_INC(_c) ((((_c) + 1) << LQ_FLAG_COLOR_POS) &\
313 LQ_FLAG_COLOR_MSK)
314#define LQ_FLAG_COLOR_SET(_f, _c) ((_c) | ((_f) & ~LQ_FLAG_COLOR_MSK))
310 315
311/* Bit 4-5: Tx RTS BW Signalling 316/* Bit 4-5: Tx RTS BW Signalling
312 * (0) No RTS BW signalling 317 * (0) No RTS BW signalling
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h
index 81b98915b1a4..1360ebfdc51b 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h
@@ -519,8 +519,11 @@ struct agg_tx_status {
519 * bit-7 invalid rate indication 519 * bit-7 invalid rate indication
520 */ 520 */
521#define TX_RES_INIT_RATE_INDEX_MSK 0x0f 521#define TX_RES_INIT_RATE_INDEX_MSK 0x0f
522#define TX_RES_RATE_TABLE_COLOR_POS 4
522#define TX_RES_RATE_TABLE_COLOR_MSK 0x70 523#define TX_RES_RATE_TABLE_COLOR_MSK 0x70
523#define TX_RES_INV_RATE_INDEX_MSK 0x80 524#define TX_RES_INV_RATE_INDEX_MSK 0x80
525#define TX_RES_RATE_TABLE_COL_GET(_f) (((_f) & TX_RES_RATE_TABLE_COLOR_MSK) >>\
526 TX_RES_RATE_TABLE_COLOR_POS)
524 527
525#define IWL_MVM_TX_RES_GET_TID(_ra_tid) ((_ra_tid) & 0x0f) 528#define IWL_MVM_TX_RES_GET_TID(_ra_tid) ((_ra_tid) & 0x0f)
526#define IWL_MVM_TX_RES_GET_RA(_ra_tid) ((_ra_tid) >> 4) 529#define IWL_MVM_TX_RES_GET_RA(_ra_tid) ((_ra_tid) >> 4)
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw-dbg.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw-dbg.c
index 7b86a4f1b574..c8712e6eea74 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw-dbg.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw-dbg.c
@@ -1002,14 +1002,6 @@ int iwl_mvm_fw_dbg_collect_trig(struct iwl_mvm *mvm,
1002 return 0; 1002 return 0;
1003} 1003}
1004 1004
1005static inline void iwl_mvm_restart_early_start(struct iwl_mvm *mvm)
1006{
1007 if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000)
1008 iwl_clear_bits_prph(mvm->trans, MON_BUFF_SAMPLE_CTL, 0x100);
1009 else
1010 iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, 1);
1011}
1012
1013int iwl_mvm_start_fw_dbg_conf(struct iwl_mvm *mvm, u8 conf_id) 1005int iwl_mvm_start_fw_dbg_conf(struct iwl_mvm *mvm, u8 conf_id)
1014{ 1006{
1015 u8 *ptr; 1007 u8 *ptr;
@@ -1023,10 +1015,8 @@ int iwl_mvm_start_fw_dbg_conf(struct iwl_mvm *mvm, u8 conf_id)
1023 /* EARLY START - firmware's configuration is hard coded */ 1015 /* EARLY START - firmware's configuration is hard coded */
1024 if ((!mvm->fw->dbg_conf_tlv[conf_id] || 1016 if ((!mvm->fw->dbg_conf_tlv[conf_id] ||
1025 !mvm->fw->dbg_conf_tlv[conf_id]->num_of_hcmds) && 1017 !mvm->fw->dbg_conf_tlv[conf_id]->num_of_hcmds) &&
1026 conf_id == FW_DBG_START_FROM_ALIVE) { 1018 conf_id == FW_DBG_START_FROM_ALIVE)
1027 iwl_mvm_restart_early_start(mvm);
1028 return 0; 1019 return 0;
1029 }
1030 1020
1031 if (!mvm->fw->dbg_conf_tlv[conf_id]) 1021 if (!mvm->fw->dbg_conf_tlv[conf_id])
1032 return -EINVAL; 1022 return -EINVAL;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
index 0f1831b41915..fd2fc46e2fe5 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
@@ -1040,7 +1040,7 @@ static int iwl_mvm_mac_ctxt_send_beacon(struct iwl_mvm *mvm,
1040 struct iwl_mac_beacon_cmd_v6 beacon_cmd_v6; 1040 struct iwl_mac_beacon_cmd_v6 beacon_cmd_v6;
1041 struct iwl_mac_beacon_cmd_v7 beacon_cmd; 1041 struct iwl_mac_beacon_cmd_v7 beacon_cmd;
1042 } u = {}; 1042 } u = {};
1043 struct iwl_mac_beacon_cmd beacon_cmd; 1043 struct iwl_mac_beacon_cmd beacon_cmd = {};
1044 struct ieee80211_tx_info *info; 1044 struct ieee80211_tx_info *info;
1045 u32 beacon_skb_len; 1045 u32 beacon_skb_len;
1046 u32 rate, tx_flags; 1046 u32 rate, tx_flags;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
index 4e74a6b90e70..52f8d7a6a7dc 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
@@ -1730,8 +1730,11 @@ int iwl_mvm_find_free_queue(struct iwl_mvm *mvm, u8 sta_id, u8 minq, u8 maxq);
1730 */ 1730 */
1731static inline u32 iwl_mvm_flushable_queues(struct iwl_mvm *mvm) 1731static inline u32 iwl_mvm_flushable_queues(struct iwl_mvm *mvm)
1732{ 1732{
1733 u32 cmd_queue = iwl_mvm_is_dqa_supported(mvm) ? IWL_MVM_DQA_CMD_QUEUE :
1734 IWL_MVM_CMD_QUEUE;
1735
1733 return ((BIT(mvm->cfg->base_params->num_of_queues) - 1) & 1736 return ((BIT(mvm->cfg->base_params->num_of_queues) - 1) &
1734 ~BIT(IWL_MVM_CMD_QUEUE)); 1737 ~BIT(cmd_queue));
1735} 1738}
1736 1739
1737static inline 1740static inline
@@ -1753,6 +1756,7 @@ static inline void iwl_mvm_stop_device(struct iwl_mvm *mvm)
1753 if (!iwl_mvm_has_new_tx_api(mvm)) 1756 if (!iwl_mvm_has_new_tx_api(mvm))
1754 iwl_free_fw_paging(mvm); 1757 iwl_free_fw_paging(mvm);
1755 mvm->ucode_loaded = false; 1758 mvm->ucode_loaded = false;
1759 mvm->fw_dbg_conf = FW_DBG_INVALID;
1756 iwl_trans_stop_device(mvm->trans); 1760 iwl_trans_stop_device(mvm->trans);
1757} 1761}
1758 1762
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
index 9ffff6ed8133..3da5ec40aaea 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
@@ -1149,21 +1149,37 @@ static void iwl_mvm_fw_error_dump_wk(struct work_struct *work)
1149 1149
1150 mutex_lock(&mvm->mutex); 1150 mutex_lock(&mvm->mutex);
1151 1151
1152 /* stop recording */
1153 if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000) { 1152 if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000) {
1153 /* stop recording */
1154 iwl_set_bits_prph(mvm->trans, MON_BUFF_SAMPLE_CTL, 0x100); 1154 iwl_set_bits_prph(mvm->trans, MON_BUFF_SAMPLE_CTL, 0x100);
1155
1156 iwl_mvm_fw_error_dump(mvm);
1157
1158 /* start recording again if the firmware is not crashed */
1159 if (!test_bit(STATUS_FW_ERROR, &mvm->trans->status) &&
1160 mvm->fw->dbg_dest_tlv)
1161 iwl_clear_bits_prph(mvm->trans,
1162 MON_BUFF_SAMPLE_CTL, 0x100);
1155 } else { 1163 } else {
1164 u32 in_sample = iwl_read_prph(mvm->trans, DBGC_IN_SAMPLE);
1165 u32 out_ctrl = iwl_read_prph(mvm->trans, DBGC_OUT_CTRL);
1166
1167 /* stop recording */
1156 iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, 0); 1168 iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, 0);
1157 /* wait before we collect the data till the DBGC stop */
1158 udelay(100); 1169 udelay(100);
1159 } 1170 iwl_write_prph(mvm->trans, DBGC_OUT_CTRL, 0);
1171 /* wait before we collect the data till the DBGC stop */
1172 udelay(500);
1160 1173
1161 iwl_mvm_fw_error_dump(mvm); 1174 iwl_mvm_fw_error_dump(mvm);
1162 1175
1163 /* start recording again if the firmware is not crashed */ 1176 /* start recording again if the firmware is not crashed */
1164 WARN_ON_ONCE((!test_bit(STATUS_FW_ERROR, &mvm->trans->status)) && 1177 if (!test_bit(STATUS_FW_ERROR, &mvm->trans->status) &&
1165 mvm->fw->dbg_dest_tlv && 1178 mvm->fw->dbg_dest_tlv) {
1166 iwl_mvm_start_fw_dbg_conf(mvm, mvm->fw_dbg_conf)); 1179 iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, in_sample);
1180 iwl_write_prph(mvm->trans, DBGC_OUT_CTRL, out_ctrl);
1181 }
1182 }
1167 1183
1168 mutex_unlock(&mvm->mutex); 1184 mutex_unlock(&mvm->mutex);
1169 1185
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
index 7788eefcd2bd..aa785cf3cf68 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
@@ -2,7 +2,7 @@
2 * 2 *
3 * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. 3 * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved.
4 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH 4 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
5 * Copyright(c) 2016 Intel Deutschland GmbH 5 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify it 7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of version 2 of the GNU General Public License as 8 * under the terms of version 2 of the GNU General Public License as
@@ -1083,34 +1083,6 @@ static void rs_get_lower_rate_down_column(struct iwl_lq_sta *lq_sta,
1083 rs_get_lower_rate_in_column(lq_sta, rate); 1083 rs_get_lower_rate_in_column(lq_sta, rate);
1084} 1084}
1085 1085
1086/* Check if both rates are identical
1087 * allow_ant_mismatch enables matching a SISO rate on ANT_A or ANT_B
1088 * with a rate indicating STBC/BFER and ANT_AB.
1089 */
1090static inline bool rs_rate_equal(struct rs_rate *a,
1091 struct rs_rate *b,
1092 bool allow_ant_mismatch)
1093
1094{
1095 bool ant_match = (a->ant == b->ant) && (a->stbc == b->stbc) &&
1096 (a->bfer == b->bfer);
1097
1098 if (allow_ant_mismatch) {
1099 if (a->stbc || a->bfer) {
1100 WARN_ONCE(a->ant != ANT_AB, "stbc %d bfer %d ant %d",
1101 a->stbc, a->bfer, a->ant);
1102 ant_match |= (b->ant == ANT_A || b->ant == ANT_B);
1103 } else if (b->stbc || b->bfer) {
1104 WARN_ONCE(b->ant != ANT_AB, "stbc %d bfer %d ant %d",
1105 b->stbc, b->bfer, b->ant);
1106 ant_match |= (a->ant == ANT_A || a->ant == ANT_B);
1107 }
1108 }
1109
1110 return (a->type == b->type) && (a->bw == b->bw) && (a->sgi == b->sgi) &&
1111 (a->ldpc == b->ldpc) && (a->index == b->index) && ant_match;
1112}
1113
1114/* Check if both rates share the same column */ 1086/* Check if both rates share the same column */
1115static inline bool rs_rate_column_match(struct rs_rate *a, 1087static inline bool rs_rate_column_match(struct rs_rate *a,
1116 struct rs_rate *b) 1088 struct rs_rate *b)
@@ -1182,12 +1154,12 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
1182 u32 lq_hwrate; 1154 u32 lq_hwrate;
1183 struct rs_rate lq_rate, tx_resp_rate; 1155 struct rs_rate lq_rate, tx_resp_rate;
1184 struct iwl_scale_tbl_info *curr_tbl, *other_tbl, *tmp_tbl; 1156 struct iwl_scale_tbl_info *curr_tbl, *other_tbl, *tmp_tbl;
1185 u8 reduced_txp = (uintptr_t)info->status.status_driver_data[0]; 1157 u32 tlc_info = (uintptr_t)info->status.status_driver_data[0];
1158 u8 reduced_txp = tlc_info & RS_DRV_DATA_TXP_MSK;
1159 u8 lq_color = RS_DRV_DATA_LQ_COLOR_GET(tlc_info);
1186 u32 tx_resp_hwrate = (uintptr_t)info->status.status_driver_data[1]; 1160 u32 tx_resp_hwrate = (uintptr_t)info->status.status_driver_data[1];
1187 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta); 1161 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
1188 struct iwl_lq_sta *lq_sta = &mvmsta->lq_sta; 1162 struct iwl_lq_sta *lq_sta = &mvmsta->lq_sta;
1189 bool allow_ant_mismatch = fw_has_api(&mvm->fw->ucode_capa,
1190 IWL_UCODE_TLV_API_LQ_SS_PARAMS);
1191 1163
1192 /* Treat uninitialized rate scaling data same as non-existing. */ 1164 /* Treat uninitialized rate scaling data same as non-existing. */
1193 if (!lq_sta) { 1165 if (!lq_sta) {
@@ -1262,10 +1234,10 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
1262 rs_rate_from_ucode_rate(lq_hwrate, info->band, &lq_rate); 1234 rs_rate_from_ucode_rate(lq_hwrate, info->band, &lq_rate);
1263 1235
1264 /* Here we actually compare this rate to the latest LQ command */ 1236 /* Here we actually compare this rate to the latest LQ command */
1265 if (!rs_rate_equal(&tx_resp_rate, &lq_rate, allow_ant_mismatch)) { 1237 if (lq_color != LQ_FLAG_COLOR_GET(table->flags)) {
1266 IWL_DEBUG_RATE(mvm, 1238 IWL_DEBUG_RATE(mvm,
1267 "initial tx resp rate 0x%x does not match 0x%x\n", 1239 "tx resp color 0x%x does not match 0x%x\n",
1268 tx_resp_hwrate, lq_hwrate); 1240 lq_color, LQ_FLAG_COLOR_GET(table->flags));
1269 1241
1270 /* 1242 /*
1271 * Since rates mis-match, the last LQ command may have failed. 1243 * Since rates mis-match, the last LQ command may have failed.
@@ -3326,6 +3298,7 @@ static void rs_build_rates_table(struct iwl_mvm *mvm,
3326 u8 valid_tx_ant = 0; 3298 u8 valid_tx_ant = 0;
3327 struct iwl_lq_cmd *lq_cmd = &lq_sta->lq; 3299 struct iwl_lq_cmd *lq_cmd = &lq_sta->lq;
3328 bool toggle_ant = false; 3300 bool toggle_ant = false;
3301 u32 color;
3329 3302
3330 memcpy(&rate, initial_rate, sizeof(rate)); 3303 memcpy(&rate, initial_rate, sizeof(rate));
3331 3304
@@ -3380,6 +3353,9 @@ static void rs_build_rates_table(struct iwl_mvm *mvm,
3380 num_rates, num_retries, valid_tx_ant, 3353 num_rates, num_retries, valid_tx_ant,
3381 toggle_ant); 3354 toggle_ant);
3382 3355
3356 /* update the color of the LQ command (as a counter at bits 1-3) */
3357 color = LQ_FLAGS_COLOR_INC(LQ_FLAG_COLOR_GET(lq_cmd->flags));
3358 lq_cmd->flags = LQ_FLAG_COLOR_SET(lq_cmd->flags, color);
3383} 3359}
3384 3360
3385struct rs_bfer_active_iter_data { 3361struct rs_bfer_active_iter_data {
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.h b/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
index ee207f2c0a90..3abde1cb0303 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
@@ -2,6 +2,7 @@
2 * 2 *
3 * Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved. 3 * Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved.
4 * Copyright(c) 2015 Intel Mobile Communications GmbH 4 * Copyright(c) 2015 Intel Mobile Communications GmbH
5 * Copyright(c) 2017 Intel Deutschland GmbH
5 * 6 *
6 * This program is free software; you can redistribute it and/or modify it 7 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of version 2 of the GNU General Public License as 8 * under the terms of version 2 of the GNU General Public License as
@@ -357,6 +358,20 @@ struct iwl_lq_sta {
357 } pers; 358 } pers;
358}; 359};
359 360
361/* ieee80211_tx_info's status_driver_data[0] is packed with lq color and txp
362 * Note, it's iwlmvm <-> mac80211 interface.
363 * bits 0-7: reduced tx power
364 * bits 8-10: LQ command's color
365 */
366#define RS_DRV_DATA_TXP_MSK 0xff
367#define RS_DRV_DATA_LQ_COLOR_POS 8
368#define RS_DRV_DATA_LQ_COLOR_MSK (7 << RS_DRV_DATA_LQ_COLOR_POS)
369#define RS_DRV_DATA_LQ_COLOR_GET(_f) (((_f) & RS_DRV_DATA_LQ_COLOR_MSK) >>\
370 RS_DRV_DATA_LQ_COLOR_POS)
371#define RS_DRV_DATA_PACK(_c, _p) ((void *)(uintptr_t)\
372 (((uintptr_t)_p) |\
373 ((_c) << RS_DRV_DATA_LQ_COLOR_POS)))
374
360/* Initialize station's rate scaling information after adding station */ 375/* Initialize station's rate scaling information after adding station */
361void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta, 376void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
362 enum nl80211_band band, bool init); 377 enum nl80211_band band, bool init);
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
index f5c786ddc526..614d67810d05 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
@@ -2120,7 +2120,8 @@ int iwl_mvm_add_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
2120 if (!iwl_mvm_is_dqa_supported(mvm)) 2120 if (!iwl_mvm_is_dqa_supported(mvm))
2121 return 0; 2121 return 0;
2122 2122
2123 if (WARN_ON(vif->type != NL80211_IFTYPE_AP)) 2123 if (WARN_ON(vif->type != NL80211_IFTYPE_AP &&
2124 vif->type != NL80211_IFTYPE_ADHOC))
2124 return -ENOTSUPP; 2125 return -ENOTSUPP;
2125 2126
2126 /* 2127 /*
@@ -2155,6 +2156,16 @@ int iwl_mvm_add_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
2155 mvmvif->cab_queue = queue; 2156 mvmvif->cab_queue = queue;
2156 } else if (!fw_has_api(&mvm->fw->ucode_capa, 2157 } else if (!fw_has_api(&mvm->fw->ucode_capa,
2157 IWL_UCODE_TLV_API_STA_TYPE)) { 2158 IWL_UCODE_TLV_API_STA_TYPE)) {
2159 /*
2160 * In IBSS, ieee80211_check_queues() sets the cab_queue to be
2161 * invalid, so make sure we use the queue we want.
2162 * Note that this is done here as we want to avoid making DQA
2163 * changes in mac80211 layer.
2164 */
2165 if (vif->type == NL80211_IFTYPE_ADHOC) {
2166 vif->cab_queue = IWL_MVM_DQA_GCAST_QUEUE;
2167 mvmvif->cab_queue = vif->cab_queue;
2168 }
2158 iwl_mvm_enable_txq(mvm, vif->cab_queue, vif->cab_queue, 0, 2169 iwl_mvm_enable_txq(mvm, vif->cab_queue, vif->cab_queue, 0,
2159 &cfg, timeout); 2170 &cfg, timeout);
2160 } 2171 }
@@ -3321,18 +3332,15 @@ int iwl_mvm_remove_sta_key(struct iwl_mvm *mvm,
3321 3332
3322 /* Get the station from the mvm local station table */ 3333 /* Get the station from the mvm local station table */
3323 mvm_sta = iwl_mvm_get_key_sta(mvm, vif, sta); 3334 mvm_sta = iwl_mvm_get_key_sta(mvm, vif, sta);
3324 if (!mvm_sta) { 3335 if (mvm_sta)
3325 IWL_ERR(mvm, "Failed to find station\n"); 3336 sta_id = mvm_sta->sta_id;
3326 return -EINVAL;
3327 }
3328 sta_id = mvm_sta->sta_id;
3329 3337
3330 IWL_DEBUG_WEP(mvm, "mvm remove dynamic key: idx=%d sta=%d\n", 3338 IWL_DEBUG_WEP(mvm, "mvm remove dynamic key: idx=%d sta=%d\n",
3331 keyconf->keyidx, sta_id); 3339 keyconf->keyidx, sta_id);
3332 3340
3333 if (keyconf->cipher == WLAN_CIPHER_SUITE_AES_CMAC || 3341 if (mvm_sta && (keyconf->cipher == WLAN_CIPHER_SUITE_AES_CMAC ||
3334 keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 || 3342 keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 ||
3335 keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256) 3343 keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256))
3336 return iwl_mvm_send_sta_igtk(mvm, keyconf, sta_id, true); 3344 return iwl_mvm_send_sta_igtk(mvm, keyconf, sta_id, true);
3337 3345
3338 if (!__test_and_clear_bit(keyconf->hw_key_idx, mvm->fw_key_table)) { 3346 if (!__test_and_clear_bit(keyconf->hw_key_idx, mvm->fw_key_table)) {
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.h b/drivers/net/wireless/intel/iwlwifi/mvm/sta.h
index 2716cb5483bf..ad62b67dceb2 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.h
@@ -313,6 +313,7 @@ enum iwl_mvm_agg_state {
313 * This is basically (last acked packet++). 313 * This is basically (last acked packet++).
314 * @rate_n_flags: Rate at which Tx was attempted. Holds the data between the 314 * @rate_n_flags: Rate at which Tx was attempted. Holds the data between the
315 * Tx response (TX_CMD), and the block ack notification (COMPRESSED_BA). 315 * Tx response (TX_CMD), and the block ack notification (COMPRESSED_BA).
316 * @lq_color: the color of the LQ command as it appears in tx response.
316 * @amsdu_in_ampdu_allowed: true if A-MSDU in A-MPDU is allowed. 317 * @amsdu_in_ampdu_allowed: true if A-MSDU in A-MPDU is allowed.
317 * @state: state of the BA agreement establishment / tear down. 318 * @state: state of the BA agreement establishment / tear down.
318 * @txq_id: Tx queue used by the BA session / DQA 319 * @txq_id: Tx queue used by the BA session / DQA
@@ -331,6 +332,7 @@ struct iwl_mvm_tid_data {
331 u16 next_reclaimed; 332 u16 next_reclaimed;
332 /* The rest is Tx AGG related */ 333 /* The rest is Tx AGG related */
333 u32 rate_n_flags; 334 u32 rate_n_flags;
335 u8 lq_color;
334 bool amsdu_in_ampdu_allowed; 336 bool amsdu_in_ampdu_allowed;
335 enum iwl_mvm_agg_state state; 337 enum iwl_mvm_agg_state state;
336 u16 txq_id; 338 u16 txq_id;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
index f9cbd197246f..506d58104e1c 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
@@ -790,11 +790,13 @@ static int iwl_mvm_tcool_set_cur_state(struct thermal_cooling_device *cdev,
790 struct iwl_mvm *mvm = (struct iwl_mvm *)(cdev->devdata); 790 struct iwl_mvm *mvm = (struct iwl_mvm *)(cdev->devdata);
791 int ret; 791 int ret;
792 792
793 if (!mvm->ucode_loaded || !(mvm->cur_ucode == IWL_UCODE_REGULAR))
794 return -EIO;
795
796 mutex_lock(&mvm->mutex); 793 mutex_lock(&mvm->mutex);
797 794
795 if (!mvm->ucode_loaded || !(mvm->cur_ucode == IWL_UCODE_REGULAR)) {
796 ret = -EIO;
797 goto unlock;
798 }
799
798 if (new_state >= ARRAY_SIZE(iwl_mvm_cdev_budgets)) { 800 if (new_state >= ARRAY_SIZE(iwl_mvm_cdev_budgets)) {
799 ret = -EINVAL; 801 ret = -EINVAL;
800 goto unlock; 802 goto unlock;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
index bcaceb64a6e8..f21901cd4a4f 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
@@ -1323,6 +1323,7 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
1323 struct iwl_mvm_sta *mvmsta; 1323 struct iwl_mvm_sta *mvmsta;
1324 struct sk_buff_head skbs; 1324 struct sk_buff_head skbs;
1325 u8 skb_freed = 0; 1325 u8 skb_freed = 0;
1326 u8 lq_color;
1326 u16 next_reclaimed, seq_ctl; 1327 u16 next_reclaimed, seq_ctl;
1327 bool is_ndp = false; 1328 bool is_ndp = false;
1328 1329
@@ -1405,8 +1406,9 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
1405 info->status.tx_time = 1406 info->status.tx_time =
1406 le16_to_cpu(tx_resp->wireless_media_time); 1407 le16_to_cpu(tx_resp->wireless_media_time);
1407 BUILD_BUG_ON(ARRAY_SIZE(info->status.status_driver_data) < 1); 1408 BUILD_BUG_ON(ARRAY_SIZE(info->status.status_driver_data) < 1);
1409 lq_color = TX_RES_RATE_TABLE_COL_GET(tx_resp->tlc_info);
1408 info->status.status_driver_data[0] = 1410 info->status.status_driver_data[0] =
1409 (void *)(uintptr_t)tx_resp->reduced_tpc; 1411 RS_DRV_DATA_PACK(lq_color, tx_resp->reduced_tpc);
1410 1412
1411 ieee80211_tx_status(mvm->hw, skb); 1413 ieee80211_tx_status(mvm->hw, skb);
1412 } 1414 }
@@ -1638,6 +1640,9 @@ static void iwl_mvm_rx_tx_cmd_agg(struct iwl_mvm *mvm,
1638 le32_to_cpu(tx_resp->initial_rate); 1640 le32_to_cpu(tx_resp->initial_rate);
1639 mvmsta->tid_data[tid].tx_time = 1641 mvmsta->tid_data[tid].tx_time =
1640 le16_to_cpu(tx_resp->wireless_media_time); 1642 le16_to_cpu(tx_resp->wireless_media_time);
1643 mvmsta->tid_data[tid].lq_color =
1644 (tx_resp->tlc_info & TX_RES_RATE_TABLE_COLOR_MSK) >>
1645 TX_RES_RATE_TABLE_COLOR_POS;
1641 } 1646 }
1642 1647
1643 rcu_read_unlock(); 1648 rcu_read_unlock();
@@ -1707,6 +1712,11 @@ static void iwl_mvm_tx_reclaim(struct iwl_mvm *mvm, int sta_id, int tid,
1707 iwl_mvm_check_ratid_empty(mvm, sta, tid); 1712 iwl_mvm_check_ratid_empty(mvm, sta, tid);
1708 1713
1709 freed = 0; 1714 freed = 0;
1715
1716 /* pack lq color from tid_data along the reduced txp */
1717 ba_info->status.status_driver_data[0] =
1718 RS_DRV_DATA_PACK(tid_data->lq_color,
1719 ba_info->status.status_driver_data[0]);
1710 ba_info->status.status_driver_data[1] = (void *)(uintptr_t)rate; 1720 ba_info->status.status_driver_data[1] = (void *)(uintptr_t)rate;
1711 1721
1712 skb_queue_walk(&reclaimed_skbs, skb) { 1722 skb_queue_walk(&reclaimed_skbs, skb) {
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
index 70acf850a9f1..93cbc7a69bcd 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
@@ -2803,7 +2803,8 @@ static struct iwl_trans_dump_data
2803#ifdef CONFIG_PM_SLEEP 2803#ifdef CONFIG_PM_SLEEP
2804static int iwl_trans_pcie_suspend(struct iwl_trans *trans) 2804static int iwl_trans_pcie_suspend(struct iwl_trans *trans)
2805{ 2805{
2806 if (trans->runtime_pm_mode == IWL_PLAT_PM_MODE_D0I3) 2806 if (trans->runtime_pm_mode == IWL_PLAT_PM_MODE_D0I3 &&
2807 (trans->system_pm_mode == IWL_PLAT_PM_MODE_D0I3))
2807 return iwl_pci_fw_enter_d0i3(trans); 2808 return iwl_pci_fw_enter_d0i3(trans);
2808 2809
2809 return 0; 2810 return 0;
@@ -2811,7 +2812,8 @@ static int iwl_trans_pcie_suspend(struct iwl_trans *trans)
2811 2812
2812static void iwl_trans_pcie_resume(struct iwl_trans *trans) 2813static void iwl_trans_pcie_resume(struct iwl_trans *trans)
2813{ 2814{
2814 if (trans->runtime_pm_mode == IWL_PLAT_PM_MODE_D0I3) 2815 if (trans->runtime_pm_mode == IWL_PLAT_PM_MODE_D0I3 &&
2816 (trans->system_pm_mode == IWL_PLAT_PM_MODE_D0I3))
2815 iwl_pci_fw_exit_d0i3(trans); 2817 iwl_pci_fw_exit_d0i3(trans);
2816} 2818}
2817#endif /* CONFIG_PM_SLEEP */ 2819#endif /* CONFIG_PM_SLEEP */
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c
index 9fb46a6f47cf..9c9bfbbabdf1 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c
@@ -906,7 +906,7 @@ int iwl_trans_pcie_dyn_txq_alloc(struct iwl_trans *trans,
906 906
907 if (WARN_ON(iwl_rx_packet_payload_len(hcmd.resp_pkt) != sizeof(*rsp))) { 907 if (WARN_ON(iwl_rx_packet_payload_len(hcmd.resp_pkt) != sizeof(*rsp))) {
908 ret = -EINVAL; 908 ret = -EINVAL;
909 goto error; 909 goto error_free_resp;
910 } 910 }
911 911
912 rsp = (void *)hcmd.resp_pkt->data; 912 rsp = (void *)hcmd.resp_pkt->data;
@@ -915,13 +915,13 @@ int iwl_trans_pcie_dyn_txq_alloc(struct iwl_trans *trans,
915 if (qid > ARRAY_SIZE(trans_pcie->txq)) { 915 if (qid > ARRAY_SIZE(trans_pcie->txq)) {
916 WARN_ONCE(1, "queue index %d unsupported", qid); 916 WARN_ONCE(1, "queue index %d unsupported", qid);
917 ret = -EIO; 917 ret = -EIO;
918 goto error; 918 goto error_free_resp;
919 } 919 }
920 920
921 if (test_and_set_bit(qid, trans_pcie->queue_used)) { 921 if (test_and_set_bit(qid, trans_pcie->queue_used)) {
922 WARN_ONCE(1, "queue %d already used", qid); 922 WARN_ONCE(1, "queue %d already used", qid);
923 ret = -EIO; 923 ret = -EIO;
924 goto error; 924 goto error_free_resp;
925 } 925 }
926 926
927 txq->id = qid; 927 txq->id = qid;
@@ -934,8 +934,11 @@ int iwl_trans_pcie_dyn_txq_alloc(struct iwl_trans *trans,
934 (txq->write_ptr) | (qid << 16)); 934 (txq->write_ptr) | (qid << 16));
935 IWL_DEBUG_TX_QUEUES(trans, "Activate queue %d\n", qid); 935 IWL_DEBUG_TX_QUEUES(trans, "Activate queue %d\n", qid);
936 936
937 iwl_free_resp(&hcmd);
937 return qid; 938 return qid;
938 939
940error_free_resp:
941 iwl_free_resp(&hcmd);
939error: 942error:
940 iwl_pcie_gen2_txq_free_memory(trans, txq); 943 iwl_pcie_gen2_txq_free_memory(trans, txq);
941 return ret; 944 return ret;
diff --git a/drivers/net/wireless/intersil/hostap/hostap_main.c b/drivers/net/wireless/intersil/hostap/hostap_main.c
index 544fc09dcb62..1372b20f931e 100644
--- a/drivers/net/wireless/intersil/hostap/hostap_main.c
+++ b/drivers/net/wireless/intersil/hostap/hostap_main.c
@@ -73,7 +73,7 @@ struct net_device * hostap_add_interface(struct local_info *local,
73 dev->mem_end = mdev->mem_end; 73 dev->mem_end = mdev->mem_end;
74 74
75 hostap_setup_dev(dev, local, type); 75 hostap_setup_dev(dev, local, type);
76 dev->destructor = free_netdev; 76 dev->needs_free_netdev = true;
77 77
78 sprintf(dev->name, "%s%s", prefix, name); 78 sprintf(dev->name, "%s%s", prefix, name);
79 if (!rtnl_locked) 79 if (!rtnl_locked)
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 002b25cff5b6..c854a557998b 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -2861,7 +2861,7 @@ static const struct net_device_ops hwsim_netdev_ops = {
2861static void hwsim_mon_setup(struct net_device *dev) 2861static void hwsim_mon_setup(struct net_device *dev)
2862{ 2862{
2863 dev->netdev_ops = &hwsim_netdev_ops; 2863 dev->netdev_ops = &hwsim_netdev_ops;
2864 dev->destructor = free_netdev; 2864 dev->needs_free_netdev = true;
2865 ether_setup(dev); 2865 ether_setup(dev);
2866 dev->priv_flags |= IFF_NO_QUEUE; 2866 dev->priv_flags |= IFF_NO_QUEUE;
2867 dev->type = ARPHRD_IEEE80211_RADIOTAP; 2867 dev->type = ARPHRD_IEEE80211_RADIOTAP;
diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
index dd87b9ff64c3..39b6b5e3f6e0 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.c
+++ b/drivers/net/wireless/marvell/mwifiex/main.c
@@ -1280,7 +1280,7 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
1280 struct net_device *dev) 1280 struct net_device *dev)
1281{ 1281{
1282 dev->netdev_ops = &mwifiex_netdev_ops; 1282 dev->netdev_ops = &mwifiex_netdev_ops;
1283 dev->destructor = free_netdev; 1283 dev->needs_free_netdev = true;
1284 /* Initialize private structure */ 1284 /* Initialize private structure */
1285 priv->current_key_index = 0; 1285 priv->current_key_index = 0;
1286 priv->media_connected = false; 1286 priv->media_connected = false;
diff --git a/drivers/net/xen-netback/common.h b/drivers/net/xen-netback/common.h
index 530586be05b4..5b1d2e8402d9 100644
--- a/drivers/net/xen-netback/common.h
+++ b/drivers/net/xen-netback/common.h
@@ -199,6 +199,7 @@ struct xenvif_queue { /* Per-queue data for xenvif */
199 unsigned long remaining_credit; 199 unsigned long remaining_credit;
200 struct timer_list credit_timeout; 200 struct timer_list credit_timeout;
201 u64 credit_window_start; 201 u64 credit_window_start;
202 bool rate_limited;
202 203
203 /* Statistics */ 204 /* Statistics */
204 struct xenvif_stats stats; 205 struct xenvif_stats stats;
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index 8397f6c92451..e322a862ddfe 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -106,7 +106,11 @@ static int xenvif_poll(struct napi_struct *napi, int budget)
106 106
107 if (work_done < budget) { 107 if (work_done < budget) {
108 napi_complete_done(napi, work_done); 108 napi_complete_done(napi, work_done);
109 xenvif_napi_schedule_or_enable_events(queue); 109 /* If the queue is rate-limited, it shall be
110 * rescheduled in the timer callback.
111 */
112 if (likely(!queue->rate_limited))
113 xenvif_napi_schedule_or_enable_events(queue);
110 } 114 }
111 115
112 return work_done; 116 return work_done;
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index 602d408fa25e..5042ff8d449a 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -180,6 +180,7 @@ static void tx_add_credit(struct xenvif_queue *queue)
180 max_credit = ULONG_MAX; /* wrapped: clamp to ULONG_MAX */ 180 max_credit = ULONG_MAX; /* wrapped: clamp to ULONG_MAX */
181 181
182 queue->remaining_credit = min(max_credit, max_burst); 182 queue->remaining_credit = min(max_credit, max_burst);
183 queue->rate_limited = false;
183} 184}
184 185
185void xenvif_tx_credit_callback(unsigned long data) 186void xenvif_tx_credit_callback(unsigned long data)
@@ -686,8 +687,10 @@ static bool tx_credit_exceeded(struct xenvif_queue *queue, unsigned size)
686 msecs_to_jiffies(queue->credit_usec / 1000); 687 msecs_to_jiffies(queue->credit_usec / 1000);
687 688
688 /* Timer could already be pending in rare cases. */ 689 /* Timer could already be pending in rare cases. */
689 if (timer_pending(&queue->credit_timeout)) 690 if (timer_pending(&queue->credit_timeout)) {
691 queue->rate_limited = true;
690 return true; 692 return true;
693 }
691 694
692 /* Passed the point where we can replenish credit? */ 695 /* Passed the point where we can replenish credit? */
693 if (time_after_eq64(now, next_credit)) { 696 if (time_after_eq64(now, next_credit)) {
@@ -702,6 +705,7 @@ static bool tx_credit_exceeded(struct xenvif_queue *queue, unsigned size)
702 mod_timer(&queue->credit_timeout, 705 mod_timer(&queue->credit_timeout,
703 next_credit); 706 next_credit);
704 queue->credit_window_start = next_credit; 707 queue->credit_window_start = next_credit;
708 queue->rate_limited = true;
705 709
706 return true; 710 return true;
707 } 711 }
diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.c b/drivers/ntb/hw/intel/ntb_hw_intel.c
index c00238491673..7b3b6fd63d7d 100644
--- a/drivers/ntb/hw/intel/ntb_hw_intel.c
+++ b/drivers/ntb/hw/intel/ntb_hw_intel.c
@@ -2878,7 +2878,7 @@ static const struct intel_ntb_reg skx_reg = {
2878 .link_is_up = xeon_link_is_up, 2878 .link_is_up = xeon_link_is_up,
2879 .db_ioread = skx_db_ioread, 2879 .db_ioread = skx_db_ioread,
2880 .db_iowrite = skx_db_iowrite, 2880 .db_iowrite = skx_db_iowrite,
2881 .db_size = sizeof(u64), 2881 .db_size = sizeof(u32),
2882 .ntb_ctl = SKX_NTBCNTL_OFFSET, 2882 .ntb_ctl = SKX_NTBCNTL_OFFSET,
2883 .mw_bar = {2, 4}, 2883 .mw_bar = {2, 4},
2884}; 2884};
diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
index 02ca45fdd892..10e5bf460139 100644
--- a/drivers/ntb/ntb_transport.c
+++ b/drivers/ntb/ntb_transport.c
@@ -177,14 +177,12 @@ struct ntb_transport_qp {
177 u64 rx_err_ver; 177 u64 rx_err_ver;
178 u64 rx_memcpy; 178 u64 rx_memcpy;
179 u64 rx_async; 179 u64 rx_async;
180 u64 dma_rx_prep_err;
181 u64 tx_bytes; 180 u64 tx_bytes;
182 u64 tx_pkts; 181 u64 tx_pkts;
183 u64 tx_ring_full; 182 u64 tx_ring_full;
184 u64 tx_err_no_buf; 183 u64 tx_err_no_buf;
185 u64 tx_memcpy; 184 u64 tx_memcpy;
186 u64 tx_async; 185 u64 tx_async;
187 u64 dma_tx_prep_err;
188}; 186};
189 187
190struct ntb_transport_mw { 188struct ntb_transport_mw {
@@ -254,8 +252,6 @@ enum {
254#define QP_TO_MW(nt, qp) ((qp) % nt->mw_count) 252#define QP_TO_MW(nt, qp) ((qp) % nt->mw_count)
255#define NTB_QP_DEF_NUM_ENTRIES 100 253#define NTB_QP_DEF_NUM_ENTRIES 100
256#define NTB_LINK_DOWN_TIMEOUT 10 254#define NTB_LINK_DOWN_TIMEOUT 10
257#define DMA_RETRIES 20
258#define DMA_OUT_RESOURCE_TO msecs_to_jiffies(50)
259 255
260static void ntb_transport_rxc_db(unsigned long data); 256static void ntb_transport_rxc_db(unsigned long data);
261static const struct ntb_ctx_ops ntb_transport_ops; 257static const struct ntb_ctx_ops ntb_transport_ops;
@@ -516,12 +512,6 @@ static ssize_t debugfs_read(struct file *filp, char __user *ubuf, size_t count,
516 out_offset += snprintf(buf + out_offset, out_count - out_offset, 512 out_offset += snprintf(buf + out_offset, out_count - out_offset,
517 "free tx - \t%u\n", 513 "free tx - \t%u\n",
518 ntb_transport_tx_free_entry(qp)); 514 ntb_transport_tx_free_entry(qp));
519 out_offset += snprintf(buf + out_offset, out_count - out_offset,
520 "DMA tx prep err - \t%llu\n",
521 qp->dma_tx_prep_err);
522 out_offset += snprintf(buf + out_offset, out_count - out_offset,
523 "DMA rx prep err - \t%llu\n",
524 qp->dma_rx_prep_err);
525 515
526 out_offset += snprintf(buf + out_offset, out_count - out_offset, 516 out_offset += snprintf(buf + out_offset, out_count - out_offset,
527 "\n"); 517 "\n");
@@ -623,7 +613,7 @@ static int ntb_transport_setup_qp_mw(struct ntb_transport_ctx *nt,
623 if (!mw->virt_addr) 613 if (!mw->virt_addr)
624 return -ENOMEM; 614 return -ENOMEM;
625 615
626 if (qp_count % mw_count && mw_num + 1 < qp_count / mw_count) 616 if (mw_num < qp_count % mw_count)
627 num_qps_mw = qp_count / mw_count + 1; 617 num_qps_mw = qp_count / mw_count + 1;
628 else 618 else
629 num_qps_mw = qp_count / mw_count; 619 num_qps_mw = qp_count / mw_count;
@@ -768,8 +758,6 @@ static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp)
768 qp->tx_err_no_buf = 0; 758 qp->tx_err_no_buf = 0;
769 qp->tx_memcpy = 0; 759 qp->tx_memcpy = 0;
770 qp->tx_async = 0; 760 qp->tx_async = 0;
771 qp->dma_tx_prep_err = 0;
772 qp->dma_rx_prep_err = 0;
773} 761}
774 762
775static void ntb_qp_link_cleanup(struct ntb_transport_qp *qp) 763static void ntb_qp_link_cleanup(struct ntb_transport_qp *qp)
@@ -1000,7 +988,7 @@ static int ntb_transport_init_queue(struct ntb_transport_ctx *nt,
1000 qp->event_handler = NULL; 988 qp->event_handler = NULL;
1001 ntb_qp_link_down_reset(qp); 989 ntb_qp_link_down_reset(qp);
1002 990
1003 if (qp_count % mw_count && mw_num + 1 < qp_count / mw_count) 991 if (mw_num < qp_count % mw_count)
1004 num_qps_mw = qp_count / mw_count + 1; 992 num_qps_mw = qp_count / mw_count + 1;
1005 else 993 else
1006 num_qps_mw = qp_count / mw_count; 994 num_qps_mw = qp_count / mw_count;
@@ -1128,8 +1116,8 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev)
1128 qp_count = ilog2(qp_bitmap); 1116 qp_count = ilog2(qp_bitmap);
1129 if (max_num_clients && max_num_clients < qp_count) 1117 if (max_num_clients && max_num_clients < qp_count)
1130 qp_count = max_num_clients; 1118 qp_count = max_num_clients;
1131 else if (mw_count < qp_count) 1119 else if (nt->mw_count < qp_count)
1132 qp_count = mw_count; 1120 qp_count = nt->mw_count;
1133 1121
1134 qp_bitmap &= BIT_ULL(qp_count) - 1; 1122 qp_bitmap &= BIT_ULL(qp_count) - 1;
1135 1123
@@ -1317,7 +1305,6 @@ static int ntb_async_rx_submit(struct ntb_queue_entry *entry, void *offset)
1317 struct dmaengine_unmap_data *unmap; 1305 struct dmaengine_unmap_data *unmap;
1318 dma_cookie_t cookie; 1306 dma_cookie_t cookie;
1319 void *buf = entry->buf; 1307 void *buf = entry->buf;
1320 int retries = 0;
1321 1308
1322 len = entry->len; 1309 len = entry->len;
1323 device = chan->device; 1310 device = chan->device;
@@ -1346,22 +1333,11 @@ static int ntb_async_rx_submit(struct ntb_queue_entry *entry, void *offset)
1346 1333
1347 unmap->from_cnt = 1; 1334 unmap->from_cnt = 1;
1348 1335
1349 for (retries = 0; retries < DMA_RETRIES; retries++) { 1336 txd = device->device_prep_dma_memcpy(chan, unmap->addr[1],
1350 txd = device->device_prep_dma_memcpy(chan, 1337 unmap->addr[0], len,
1351 unmap->addr[1], 1338 DMA_PREP_INTERRUPT);
1352 unmap->addr[0], len, 1339 if (!txd)
1353 DMA_PREP_INTERRUPT);
1354 if (txd)
1355 break;
1356
1357 set_current_state(TASK_INTERRUPTIBLE);
1358 schedule_timeout(DMA_OUT_RESOURCE_TO);
1359 }
1360
1361 if (!txd) {
1362 qp->dma_rx_prep_err++;
1363 goto err_get_unmap; 1340 goto err_get_unmap;
1364 }
1365 1341
1366 txd->callback_result = ntb_rx_copy_callback; 1342 txd->callback_result = ntb_rx_copy_callback;
1367 txd->callback_param = entry; 1343 txd->callback_param = entry;
@@ -1606,7 +1582,6 @@ static int ntb_async_tx_submit(struct ntb_transport_qp *qp,
1606 struct dmaengine_unmap_data *unmap; 1582 struct dmaengine_unmap_data *unmap;
1607 dma_addr_t dest; 1583 dma_addr_t dest;
1608 dma_cookie_t cookie; 1584 dma_cookie_t cookie;
1609 int retries = 0;
1610 1585
1611 device = chan->device; 1586 device = chan->device;
1612 dest = qp->tx_mw_phys + qp->tx_max_frame * entry->tx_index; 1587 dest = qp->tx_mw_phys + qp->tx_max_frame * entry->tx_index;
@@ -1628,21 +1603,10 @@ static int ntb_async_tx_submit(struct ntb_transport_qp *qp,
1628 1603
1629 unmap->to_cnt = 1; 1604 unmap->to_cnt = 1;
1630 1605
1631 for (retries = 0; retries < DMA_RETRIES; retries++) { 1606 txd = device->device_prep_dma_memcpy(chan, dest, unmap->addr[0], len,
1632 txd = device->device_prep_dma_memcpy(chan, dest, 1607 DMA_PREP_INTERRUPT);
1633 unmap->addr[0], len, 1608 if (!txd)
1634 DMA_PREP_INTERRUPT);
1635 if (txd)
1636 break;
1637
1638 set_current_state(TASK_INTERRUPTIBLE);
1639 schedule_timeout(DMA_OUT_RESOURCE_TO);
1640 }
1641
1642 if (!txd) {
1643 qp->dma_tx_prep_err++;
1644 goto err_get_unmap; 1609 goto err_get_unmap;
1645 }
1646 1610
1647 txd->callback_result = ntb_tx_copy_callback; 1611 txd->callback_result = ntb_tx_copy_callback;
1648 txd->callback_param = entry; 1612 txd->callback_param = entry;
diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c
index 434e1d474f33..5cab2831ce99 100644
--- a/drivers/ntb/test/ntb_perf.c
+++ b/drivers/ntb/test/ntb_perf.c
@@ -90,11 +90,11 @@ MODULE_PARM_DESC(max_mw_size, "Limit size of large memory windows");
90 90
91static unsigned int seg_order = 19; /* 512K */ 91static unsigned int seg_order = 19; /* 512K */
92module_param(seg_order, uint, 0644); 92module_param(seg_order, uint, 0644);
93MODULE_PARM_DESC(seg_order, "size order [n^2] of buffer segment for testing"); 93MODULE_PARM_DESC(seg_order, "size order [2^n] of buffer segment for testing");
94 94
95static unsigned int run_order = 32; /* 4G */ 95static unsigned int run_order = 32; /* 4G */
96module_param(run_order, uint, 0644); 96module_param(run_order, uint, 0644);
97MODULE_PARM_DESC(run_order, "size order [n^2] of total data to transfer"); 97MODULE_PARM_DESC(run_order, "size order [2^n] of total data to transfer");
98 98
99static bool use_dma; /* default to 0 */ 99static bool use_dma; /* default to 0 */
100module_param(use_dma, bool, 0644); 100module_param(use_dma, bool, 0644);
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index d5e0906262ea..903d5813023a 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -56,7 +56,7 @@ MODULE_PARM_DESC(max_retries, "max number of retries a command may have");
56static int nvme_char_major; 56static int nvme_char_major;
57module_param(nvme_char_major, int, 0); 57module_param(nvme_char_major, int, 0);
58 58
59static unsigned long default_ps_max_latency_us = 25000; 59static unsigned long default_ps_max_latency_us = 100000;
60module_param(default_ps_max_latency_us, ulong, 0644); 60module_param(default_ps_max_latency_us, ulong, 0644);
61MODULE_PARM_DESC(default_ps_max_latency_us, 61MODULE_PARM_DESC(default_ps_max_latency_us,
62 "max power saving latency for new devices; use PM QOS to change per device"); 62 "max power saving latency for new devices; use PM QOS to change per device");
@@ -925,6 +925,29 @@ static int nvme_getgeo(struct block_device *bdev, struct hd_geometry *geo)
925} 925}
926 926
927#ifdef CONFIG_BLK_DEV_INTEGRITY 927#ifdef CONFIG_BLK_DEV_INTEGRITY
928static void nvme_prep_integrity(struct gendisk *disk, struct nvme_id_ns *id,
929 u16 bs)
930{
931 struct nvme_ns *ns = disk->private_data;
932 u16 old_ms = ns->ms;
933 u8 pi_type = 0;
934
935 ns->ms = le16_to_cpu(id->lbaf[id->flbas & NVME_NS_FLBAS_LBA_MASK].ms);
936 ns->ext = ns->ms && (id->flbas & NVME_NS_FLBAS_META_EXT);
937
938 /* PI implementation requires metadata equal t10 pi tuple size */
939 if (ns->ms == sizeof(struct t10_pi_tuple))
940 pi_type = id->dps & NVME_NS_DPS_PI_MASK;
941
942 if (blk_get_integrity(disk) &&
943 (ns->pi_type != pi_type || ns->ms != old_ms ||
944 bs != queue_logical_block_size(disk->queue) ||
945 (ns->ms && ns->ext)))
946 blk_integrity_unregister(disk);
947
948 ns->pi_type = pi_type;
949}
950
928static void nvme_init_integrity(struct nvme_ns *ns) 951static void nvme_init_integrity(struct nvme_ns *ns)
929{ 952{
930 struct blk_integrity integrity; 953 struct blk_integrity integrity;
@@ -951,6 +974,10 @@ static void nvme_init_integrity(struct nvme_ns *ns)
951 blk_queue_max_integrity_segments(ns->queue, 1); 974 blk_queue_max_integrity_segments(ns->queue, 1);
952} 975}
953#else 976#else
977static void nvme_prep_integrity(struct gendisk *disk, struct nvme_id_ns *id,
978 u16 bs)
979{
980}
954static void nvme_init_integrity(struct nvme_ns *ns) 981static void nvme_init_integrity(struct nvme_ns *ns)
955{ 982{
956} 983}
@@ -997,37 +1024,22 @@ static int nvme_revalidate_ns(struct nvme_ns *ns, struct nvme_id_ns **id)
997static void __nvme_revalidate_disk(struct gendisk *disk, struct nvme_id_ns *id) 1024static void __nvme_revalidate_disk(struct gendisk *disk, struct nvme_id_ns *id)
998{ 1025{
999 struct nvme_ns *ns = disk->private_data; 1026 struct nvme_ns *ns = disk->private_data;
1000 u8 lbaf, pi_type; 1027 u16 bs;
1001 u16 old_ms;
1002 unsigned short bs;
1003
1004 old_ms = ns->ms;
1005 lbaf = id->flbas & NVME_NS_FLBAS_LBA_MASK;
1006 ns->lba_shift = id->lbaf[lbaf].ds;
1007 ns->ms = le16_to_cpu(id->lbaf[lbaf].ms);
1008 ns->ext = ns->ms && (id->flbas & NVME_NS_FLBAS_META_EXT);
1009 1028
1010 /* 1029 /*
1011 * If identify namespace failed, use default 512 byte block size so 1030 * If identify namespace failed, use default 512 byte block size so
1012 * block layer can use before failing read/write for 0 capacity. 1031 * block layer can use before failing read/write for 0 capacity.
1013 */ 1032 */
1033 ns->lba_shift = id->lbaf[id->flbas & NVME_NS_FLBAS_LBA_MASK].ds;
1014 if (ns->lba_shift == 0) 1034 if (ns->lba_shift == 0)
1015 ns->lba_shift = 9; 1035 ns->lba_shift = 9;
1016 bs = 1 << ns->lba_shift; 1036 bs = 1 << ns->lba_shift;
1017 /* XXX: PI implementation requires metadata equal t10 pi tuple size */
1018 pi_type = ns->ms == sizeof(struct t10_pi_tuple) ?
1019 id->dps & NVME_NS_DPS_PI_MASK : 0;
1020 1037
1021 blk_mq_freeze_queue(disk->queue); 1038 blk_mq_freeze_queue(disk->queue);
1022 if (blk_get_integrity(disk) && (ns->pi_type != pi_type ||
1023 ns->ms != old_ms ||
1024 bs != queue_logical_block_size(disk->queue) ||
1025 (ns->ms && ns->ext)))
1026 blk_integrity_unregister(disk);
1027 1039
1028 ns->pi_type = pi_type; 1040 if (ns->ctrl->ops->flags & NVME_F_METADATA_SUPPORTED)
1041 nvme_prep_integrity(disk, id, bs);
1029 blk_queue_logical_block_size(ns->queue, bs); 1042 blk_queue_logical_block_size(ns->queue, bs);
1030
1031 if (ns->ms && !blk_get_integrity(disk) && !ns->ext) 1043 if (ns->ms && !blk_get_integrity(disk) && !ns->ext)
1032 nvme_init_integrity(ns); 1044 nvme_init_integrity(ns);
1033 if (ns->ms && !(ns->ms == 8 && ns->pi_type) && !blk_get_integrity(disk)) 1045 if (ns->ms && !(ns->ms == 8 && ns->pi_type) && !blk_get_integrity(disk))
@@ -1330,7 +1342,7 @@ static void nvme_configure_apst(struct nvme_ctrl *ctrl)
1330 * transitioning between power states. Therefore, when running 1342 * transitioning between power states. Therefore, when running
1331 * in any given state, we will enter the next lower-power 1343 * in any given state, we will enter the next lower-power
1332 * non-operational state after waiting 50 * (enlat + exlat) 1344 * non-operational state after waiting 50 * (enlat + exlat)
1333 * microseconds, as long as that state's total latency is under 1345 * microseconds, as long as that state's exit latency is under
1334 * the requested maximum latency. 1346 * the requested maximum latency.
1335 * 1347 *
1336 * We will not autonomously enter any non-operational state for 1348 * We will not autonomously enter any non-operational state for
@@ -1375,7 +1387,7 @@ static void nvme_configure_apst(struct nvme_ctrl *ctrl)
1375 * lowest-power state, not the number of states. 1387 * lowest-power state, not the number of states.
1376 */ 1388 */
1377 for (state = (int)ctrl->npss; state >= 0; state--) { 1389 for (state = (int)ctrl->npss; state >= 0; state--) {
1378 u64 total_latency_us, transition_ms; 1390 u64 total_latency_us, exit_latency_us, transition_ms;
1379 1391
1380 if (target) 1392 if (target)
1381 table->entries[state] = target; 1393 table->entries[state] = target;
@@ -1396,12 +1408,15 @@ static void nvme_configure_apst(struct nvme_ctrl *ctrl)
1396 NVME_PS_FLAGS_NON_OP_STATE)) 1408 NVME_PS_FLAGS_NON_OP_STATE))
1397 continue; 1409 continue;
1398 1410
1399 total_latency_us = 1411 exit_latency_us =
1400 (u64)le32_to_cpu(ctrl->psd[state].entry_lat) + 1412 (u64)le32_to_cpu(ctrl->psd[state].exit_lat);
1401 + le32_to_cpu(ctrl->psd[state].exit_lat); 1413 if (exit_latency_us > ctrl->ps_max_latency_us)
1402 if (total_latency_us > ctrl->ps_max_latency_us)
1403 continue; 1414 continue;
1404 1415
1416 total_latency_us =
1417 exit_latency_us +
1418 le32_to_cpu(ctrl->psd[state].entry_lat);
1419
1405 /* 1420 /*
1406 * This state is good. Use it as the APST idle 1421 * This state is good. Use it as the APST idle
1407 * target for higher power states. 1422 * target for higher power states.
@@ -1605,7 +1620,7 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
1605 } 1620 }
1606 memcpy(ctrl->psd, id->psd, sizeof(ctrl->psd)); 1621 memcpy(ctrl->psd, id->psd, sizeof(ctrl->psd));
1607 1622
1608 if (ctrl->ops->is_fabrics) { 1623 if (ctrl->ops->flags & NVME_F_FABRICS) {
1609 ctrl->icdoff = le16_to_cpu(id->icdoff); 1624 ctrl->icdoff = le16_to_cpu(id->icdoff);
1610 ctrl->ioccsz = le32_to_cpu(id->ioccsz); 1625 ctrl->ioccsz = le32_to_cpu(id->ioccsz);
1611 ctrl->iorcsz = le32_to_cpu(id->iorcsz); 1626 ctrl->iorcsz = le32_to_cpu(id->iorcsz);
@@ -2098,7 +2113,6 @@ static void nvme_ns_remove(struct nvme_ns *ns)
2098 if (ns->ndev) 2113 if (ns->ndev)
2099 nvme_nvm_unregister_sysfs(ns); 2114 nvme_nvm_unregister_sysfs(ns);
2100 del_gendisk(ns->disk); 2115 del_gendisk(ns->disk);
2101 blk_mq_abort_requeue_list(ns->queue);
2102 blk_cleanup_queue(ns->queue); 2116 blk_cleanup_queue(ns->queue);
2103 } 2117 }
2104 2118
@@ -2427,6 +2441,10 @@ void nvme_kill_queues(struct nvme_ctrl *ctrl)
2427 struct nvme_ns *ns; 2441 struct nvme_ns *ns;
2428 2442
2429 mutex_lock(&ctrl->namespaces_mutex); 2443 mutex_lock(&ctrl->namespaces_mutex);
2444
2445 /* Forcibly start all queues to avoid having stuck requests */
2446 blk_mq_start_hw_queues(ctrl->admin_q);
2447
2430 list_for_each_entry(ns, &ctrl->namespaces, list) { 2448 list_for_each_entry(ns, &ctrl->namespaces, list) {
2431 /* 2449 /*
2432 * Revalidating a dead namespace sets capacity to 0. This will 2450 * Revalidating a dead namespace sets capacity to 0. This will
@@ -2436,8 +2454,16 @@ void nvme_kill_queues(struct nvme_ctrl *ctrl)
2436 continue; 2454 continue;
2437 revalidate_disk(ns->disk); 2455 revalidate_disk(ns->disk);
2438 blk_set_queue_dying(ns->queue); 2456 blk_set_queue_dying(ns->queue);
2439 blk_mq_abort_requeue_list(ns->queue); 2457
2440 blk_mq_start_stopped_hw_queues(ns->queue, true); 2458 /*
2459 * Forcibly start all queues to avoid having stuck requests.
2460 * Note that we must ensure the queues are not stopped
2461 * when the final removal happens.
2462 */
2463 blk_mq_start_hw_queues(ns->queue);
2464
2465 /* draining requests in requeue list */
2466 blk_mq_kick_requeue_list(ns->queue);
2441 } 2467 }
2442 mutex_unlock(&ctrl->namespaces_mutex); 2468 mutex_unlock(&ctrl->namespaces_mutex);
2443} 2469}
diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
index dca7165fabcf..92964cef0f4b 100644
--- a/drivers/nvme/host/fc.c
+++ b/drivers/nvme/host/fc.c
@@ -45,8 +45,6 @@ enum nvme_fc_queue_flags {
45 45
46#define NVMEFC_QUEUE_DELAY 3 /* ms units */ 46#define NVMEFC_QUEUE_DELAY 3 /* ms units */
47 47
48#define NVME_FC_MAX_CONNECT_ATTEMPTS 1
49
50struct nvme_fc_queue { 48struct nvme_fc_queue {
51 struct nvme_fc_ctrl *ctrl; 49 struct nvme_fc_ctrl *ctrl;
52 struct device *dev; 50 struct device *dev;
@@ -165,8 +163,6 @@ struct nvme_fc_ctrl {
165 struct work_struct delete_work; 163 struct work_struct delete_work;
166 struct work_struct reset_work; 164 struct work_struct reset_work;
167 struct delayed_work connect_work; 165 struct delayed_work connect_work;
168 int reconnect_delay;
169 int connect_attempts;
170 166
171 struct kref ref; 167 struct kref ref;
172 u32 flags; 168 u32 flags;
@@ -1143,6 +1139,7 @@ nvme_fc_xmt_disconnect_assoc(struct nvme_fc_ctrl *ctrl)
1143/* *********************** NVME Ctrl Routines **************************** */ 1139/* *********************** NVME Ctrl Routines **************************** */
1144 1140
1145static void __nvme_fc_final_op_cleanup(struct request *rq); 1141static void __nvme_fc_final_op_cleanup(struct request *rq);
1142static void nvme_fc_error_recovery(struct nvme_fc_ctrl *ctrl, char *errmsg);
1146 1143
1147static int 1144static int
1148nvme_fc_reinit_request(void *data, struct request *rq) 1145nvme_fc_reinit_request(void *data, struct request *rq)
@@ -1269,7 +1266,7 @@ nvme_fc_fcpio_done(struct nvmefc_fcp_req *req)
1269 struct nvme_command *sqe = &op->cmd_iu.sqe; 1266 struct nvme_command *sqe = &op->cmd_iu.sqe;
1270 __le16 status = cpu_to_le16(NVME_SC_SUCCESS << 1); 1267 __le16 status = cpu_to_le16(NVME_SC_SUCCESS << 1);
1271 union nvme_result result; 1268 union nvme_result result;
1272 bool complete_rq; 1269 bool complete_rq, terminate_assoc = true;
1273 1270
1274 /* 1271 /*
1275 * WARNING: 1272 * WARNING:
@@ -1298,6 +1295,14 @@ nvme_fc_fcpio_done(struct nvmefc_fcp_req *req)
1298 * fabricate a CQE, the following fields will not be set as they 1295 * fabricate a CQE, the following fields will not be set as they
1299 * are not referenced: 1296 * are not referenced:
1300 * cqe.sqid, cqe.sqhd, cqe.command_id 1297 * cqe.sqid, cqe.sqhd, cqe.command_id
1298 *
1299 * Failure or error of an individual i/o, in a transport
1300 * detected fashion unrelated to the nvme completion status,
1301 * potentially cause the initiator and target sides to get out
1302 * of sync on SQ head/tail (aka outstanding io count allowed).
1303 * Per FC-NVME spec, failure of an individual command requires
1304 * the connection to be terminated, which in turn requires the
1305 * association to be terminated.
1301 */ 1306 */
1302 1307
1303 fc_dma_sync_single_for_cpu(ctrl->lport->dev, op->fcp_req.rspdma, 1308 fc_dma_sync_single_for_cpu(ctrl->lport->dev, op->fcp_req.rspdma,
@@ -1363,6 +1368,8 @@ nvme_fc_fcpio_done(struct nvmefc_fcp_req *req)
1363 goto done; 1368 goto done;
1364 } 1369 }
1365 1370
1371 terminate_assoc = false;
1372
1366done: 1373done:
1367 if (op->flags & FCOP_FLAGS_AEN) { 1374 if (op->flags & FCOP_FLAGS_AEN) {
1368 nvme_complete_async_event(&queue->ctrl->ctrl, status, &result); 1375 nvme_complete_async_event(&queue->ctrl->ctrl, status, &result);
@@ -1370,19 +1377,23 @@ done:
1370 atomic_set(&op->state, FCPOP_STATE_IDLE); 1377 atomic_set(&op->state, FCPOP_STATE_IDLE);
1371 op->flags = FCOP_FLAGS_AEN; /* clear other flags */ 1378 op->flags = FCOP_FLAGS_AEN; /* clear other flags */
1372 nvme_fc_ctrl_put(ctrl); 1379 nvme_fc_ctrl_put(ctrl);
1373 return; 1380 goto check_error;
1374 } 1381 }
1375 1382
1376 complete_rq = __nvme_fc_fcpop_chk_teardowns(ctrl, op); 1383 complete_rq = __nvme_fc_fcpop_chk_teardowns(ctrl, op);
1377 if (!complete_rq) { 1384 if (!complete_rq) {
1378 if (unlikely(op->flags & FCOP_FLAGS_TERMIO)) { 1385 if (unlikely(op->flags & FCOP_FLAGS_TERMIO)) {
1379 status = cpu_to_le16(NVME_SC_ABORT_REQ); 1386 status = cpu_to_le16(NVME_SC_ABORT_REQ << 1);
1380 if (blk_queue_dying(rq->q)) 1387 if (blk_queue_dying(rq->q))
1381 status |= cpu_to_le16(NVME_SC_DNR); 1388 status |= cpu_to_le16(NVME_SC_DNR << 1);
1382 } 1389 }
1383 nvme_end_request(rq, status, result); 1390 nvme_end_request(rq, status, result);
1384 } else 1391 } else
1385 __nvme_fc_final_op_cleanup(rq); 1392 __nvme_fc_final_op_cleanup(rq);
1393
1394check_error:
1395 if (terminate_assoc)
1396 nvme_fc_error_recovery(ctrl, "transport detected io error");
1386} 1397}
1387 1398
1388static int 1399static int
@@ -1751,7 +1762,7 @@ nvme_fc_error_recovery(struct nvme_fc_ctrl *ctrl, char *errmsg)
1751 dev_warn(ctrl->ctrl.device, 1762 dev_warn(ctrl->ctrl.device,
1752 "NVME-FC{%d}: transport association error detected: %s\n", 1763 "NVME-FC{%d}: transport association error detected: %s\n",
1753 ctrl->cnum, errmsg); 1764 ctrl->cnum, errmsg);
1754 dev_info(ctrl->ctrl.device, 1765 dev_warn(ctrl->ctrl.device,
1755 "NVME-FC{%d}: resetting controller\n", ctrl->cnum); 1766 "NVME-FC{%d}: resetting controller\n", ctrl->cnum);
1756 1767
1757 /* stop the queues on error, cleanup is in reset thread */ 1768 /* stop the queues on error, cleanup is in reset thread */
@@ -2195,9 +2206,6 @@ nvme_fc_create_io_queues(struct nvme_fc_ctrl *ctrl)
2195 if (!opts->nr_io_queues) 2206 if (!opts->nr_io_queues)
2196 return 0; 2207 return 0;
2197 2208
2198 dev_info(ctrl->ctrl.device, "creating %d I/O queues.\n",
2199 opts->nr_io_queues);
2200
2201 nvme_fc_init_io_queues(ctrl); 2209 nvme_fc_init_io_queues(ctrl);
2202 2210
2203 memset(&ctrl->tag_set, 0, sizeof(ctrl->tag_set)); 2211 memset(&ctrl->tag_set, 0, sizeof(ctrl->tag_set));
@@ -2268,9 +2276,6 @@ nvme_fc_reinit_io_queues(struct nvme_fc_ctrl *ctrl)
2268 if (ctrl->queue_count == 1) 2276 if (ctrl->queue_count == 1)
2269 return 0; 2277 return 0;
2270 2278
2271 dev_info(ctrl->ctrl.device, "Recreating %d I/O queues.\n",
2272 opts->nr_io_queues);
2273
2274 nvme_fc_init_io_queues(ctrl); 2279 nvme_fc_init_io_queues(ctrl);
2275 2280
2276 ret = blk_mq_reinit_tagset(&ctrl->tag_set); 2281 ret = blk_mq_reinit_tagset(&ctrl->tag_set);
@@ -2306,7 +2311,7 @@ nvme_fc_create_association(struct nvme_fc_ctrl *ctrl)
2306 int ret; 2311 int ret;
2307 bool changed; 2312 bool changed;
2308 2313
2309 ctrl->connect_attempts++; 2314 ++ctrl->ctrl.opts->nr_reconnects;
2310 2315
2311 /* 2316 /*
2312 * Create the admin queue 2317 * Create the admin queue
@@ -2403,9 +2408,7 @@ nvme_fc_create_association(struct nvme_fc_ctrl *ctrl)
2403 changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE); 2408 changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE);
2404 WARN_ON_ONCE(!changed); 2409 WARN_ON_ONCE(!changed);
2405 2410
2406 ctrl->connect_attempts = 0; 2411 ctrl->ctrl.opts->nr_reconnects = 0;
2407
2408 kref_get(&ctrl->ctrl.kref);
2409 2412
2410 if (ctrl->queue_count > 1) { 2413 if (ctrl->queue_count > 1) {
2411 nvme_start_queues(&ctrl->ctrl); 2414 nvme_start_queues(&ctrl->ctrl);
@@ -2536,26 +2539,32 @@ nvme_fc_delete_ctrl_work(struct work_struct *work)
2536 2539
2537 /* 2540 /*
2538 * tear down the controller 2541 * tear down the controller
2539 * This will result in the last reference on the nvme ctrl to 2542 * After the last reference on the nvme ctrl is removed,
2540 * expire, calling the transport nvme_fc_nvme_ctrl_freed() callback. 2543 * the transport nvme_fc_nvme_ctrl_freed() callback will be
2541 * From there, the transport will tear down it's logical queues and 2544 * invoked. From there, the transport will tear down it's
2542 * association. 2545 * logical queues and association.
2543 */ 2546 */
2544 nvme_uninit_ctrl(&ctrl->ctrl); 2547 nvme_uninit_ctrl(&ctrl->ctrl);
2545 2548
2546 nvme_put_ctrl(&ctrl->ctrl); 2549 nvme_put_ctrl(&ctrl->ctrl);
2547} 2550}
2548 2551
2549static int 2552static bool
2550__nvme_fc_del_ctrl(struct nvme_fc_ctrl *ctrl) 2553__nvme_fc_schedule_delete_work(struct nvme_fc_ctrl *ctrl)
2551{ 2554{
2552 if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_DELETING)) 2555 if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_DELETING))
2553 return -EBUSY; 2556 return true;
2554 2557
2555 if (!queue_work(nvme_fc_wq, &ctrl->delete_work)) 2558 if (!queue_work(nvme_fc_wq, &ctrl->delete_work))
2556 return -EBUSY; 2559 return true;
2557 2560
2558 return 0; 2561 return false;
2562}
2563
2564static int
2565__nvme_fc_del_ctrl(struct nvme_fc_ctrl *ctrl)
2566{
2567 return __nvme_fc_schedule_delete_work(ctrl) ? -EBUSY : 0;
2559} 2568}
2560 2569
2561/* 2570/*
@@ -2581,6 +2590,35 @@ nvme_fc_del_nvme_ctrl(struct nvme_ctrl *nctrl)
2581} 2590}
2582 2591
2583static void 2592static void
2593nvme_fc_reconnect_or_delete(struct nvme_fc_ctrl *ctrl, int status)
2594{
2595 /* If we are resetting/deleting then do nothing */
2596 if (ctrl->ctrl.state != NVME_CTRL_RECONNECTING) {
2597 WARN_ON_ONCE(ctrl->ctrl.state == NVME_CTRL_NEW ||
2598 ctrl->ctrl.state == NVME_CTRL_LIVE);
2599 return;
2600 }
2601
2602 dev_info(ctrl->ctrl.device,
2603 "NVME-FC{%d}: reset: Reconnect attempt failed (%d)\n",
2604 ctrl->cnum, status);
2605
2606 if (nvmf_should_reconnect(&ctrl->ctrl)) {
2607 dev_info(ctrl->ctrl.device,
2608 "NVME-FC{%d}: Reconnect attempt in %d seconds.\n",
2609 ctrl->cnum, ctrl->ctrl.opts->reconnect_delay);
2610 queue_delayed_work(nvme_fc_wq, &ctrl->connect_work,
2611 ctrl->ctrl.opts->reconnect_delay * HZ);
2612 } else {
2613 dev_warn(ctrl->ctrl.device,
2614 "NVME-FC{%d}: Max reconnect attempts (%d) "
2615 "reached. Removing controller\n",
2616 ctrl->cnum, ctrl->ctrl.opts->nr_reconnects);
2617 WARN_ON(__nvme_fc_schedule_delete_work(ctrl));
2618 }
2619}
2620
2621static void
2584nvme_fc_reset_ctrl_work(struct work_struct *work) 2622nvme_fc_reset_ctrl_work(struct work_struct *work)
2585{ 2623{
2586 struct nvme_fc_ctrl *ctrl = 2624 struct nvme_fc_ctrl *ctrl =
@@ -2591,34 +2629,9 @@ nvme_fc_reset_ctrl_work(struct work_struct *work)
2591 nvme_fc_delete_association(ctrl); 2629 nvme_fc_delete_association(ctrl);
2592 2630
2593 ret = nvme_fc_create_association(ctrl); 2631 ret = nvme_fc_create_association(ctrl);
2594 if (ret) { 2632 if (ret)
2595 dev_warn(ctrl->ctrl.device, 2633 nvme_fc_reconnect_or_delete(ctrl, ret);
2596 "NVME-FC{%d}: reset: Reconnect attempt failed (%d)\n", 2634 else
2597 ctrl->cnum, ret);
2598 if (ctrl->connect_attempts >= NVME_FC_MAX_CONNECT_ATTEMPTS) {
2599 dev_warn(ctrl->ctrl.device,
2600 "NVME-FC{%d}: Max reconnect attempts (%d) "
2601 "reached. Removing controller\n",
2602 ctrl->cnum, ctrl->connect_attempts);
2603
2604 if (!nvme_change_ctrl_state(&ctrl->ctrl,
2605 NVME_CTRL_DELETING)) {
2606 dev_err(ctrl->ctrl.device,
2607 "NVME-FC{%d}: failed to change state "
2608 "to DELETING\n", ctrl->cnum);
2609 return;
2610 }
2611
2612 WARN_ON(!queue_work(nvme_fc_wq, &ctrl->delete_work));
2613 return;
2614 }
2615
2616 dev_warn(ctrl->ctrl.device,
2617 "NVME-FC{%d}: Reconnect attempt in %d seconds.\n",
2618 ctrl->cnum, ctrl->reconnect_delay);
2619 queue_delayed_work(nvme_fc_wq, &ctrl->connect_work,
2620 ctrl->reconnect_delay * HZ);
2621 } else
2622 dev_info(ctrl->ctrl.device, 2635 dev_info(ctrl->ctrl.device,
2623 "NVME-FC{%d}: controller reset complete\n", ctrl->cnum); 2636 "NVME-FC{%d}: controller reset complete\n", ctrl->cnum);
2624} 2637}
@@ -2632,7 +2645,7 @@ nvme_fc_reset_nvme_ctrl(struct nvme_ctrl *nctrl)
2632{ 2645{
2633 struct nvme_fc_ctrl *ctrl = to_fc_ctrl(nctrl); 2646 struct nvme_fc_ctrl *ctrl = to_fc_ctrl(nctrl);
2634 2647
2635 dev_warn(ctrl->ctrl.device, 2648 dev_info(ctrl->ctrl.device,
2636 "NVME-FC{%d}: admin requested controller reset\n", ctrl->cnum); 2649 "NVME-FC{%d}: admin requested controller reset\n", ctrl->cnum);
2637 2650
2638 if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_RESETTING)) 2651 if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_RESETTING))
@@ -2649,7 +2662,7 @@ nvme_fc_reset_nvme_ctrl(struct nvme_ctrl *nctrl)
2649static const struct nvme_ctrl_ops nvme_fc_ctrl_ops = { 2662static const struct nvme_ctrl_ops nvme_fc_ctrl_ops = {
2650 .name = "fc", 2663 .name = "fc",
2651 .module = THIS_MODULE, 2664 .module = THIS_MODULE,
2652 .is_fabrics = true, 2665 .flags = NVME_F_FABRICS,
2653 .reg_read32 = nvmf_reg_read32, 2666 .reg_read32 = nvmf_reg_read32,
2654 .reg_read64 = nvmf_reg_read64, 2667 .reg_read64 = nvmf_reg_read64,
2655 .reg_write32 = nvmf_reg_write32, 2668 .reg_write32 = nvmf_reg_write32,
@@ -2671,34 +2684,9 @@ nvme_fc_connect_ctrl_work(struct work_struct *work)
2671 struct nvme_fc_ctrl, connect_work); 2684 struct nvme_fc_ctrl, connect_work);
2672 2685
2673 ret = nvme_fc_create_association(ctrl); 2686 ret = nvme_fc_create_association(ctrl);
2674 if (ret) { 2687 if (ret)
2675 dev_warn(ctrl->ctrl.device, 2688 nvme_fc_reconnect_or_delete(ctrl, ret);
2676 "NVME-FC{%d}: Reconnect attempt failed (%d)\n", 2689 else
2677 ctrl->cnum, ret);
2678 if (ctrl->connect_attempts >= NVME_FC_MAX_CONNECT_ATTEMPTS) {
2679 dev_warn(ctrl->ctrl.device,
2680 "NVME-FC{%d}: Max reconnect attempts (%d) "
2681 "reached. Removing controller\n",
2682 ctrl->cnum, ctrl->connect_attempts);
2683
2684 if (!nvme_change_ctrl_state(&ctrl->ctrl,
2685 NVME_CTRL_DELETING)) {
2686 dev_err(ctrl->ctrl.device,
2687 "NVME-FC{%d}: failed to change state "
2688 "to DELETING\n", ctrl->cnum);
2689 return;
2690 }
2691
2692 WARN_ON(!queue_work(nvme_fc_wq, &ctrl->delete_work));
2693 return;
2694 }
2695
2696 dev_warn(ctrl->ctrl.device,
2697 "NVME-FC{%d}: Reconnect attempt in %d seconds.\n",
2698 ctrl->cnum, ctrl->reconnect_delay);
2699 queue_delayed_work(nvme_fc_wq, &ctrl->connect_work,
2700 ctrl->reconnect_delay * HZ);
2701 } else
2702 dev_info(ctrl->ctrl.device, 2690 dev_info(ctrl->ctrl.device,
2703 "NVME-FC{%d}: controller reconnect complete\n", 2691 "NVME-FC{%d}: controller reconnect complete\n",
2704 ctrl->cnum); 2692 ctrl->cnum);
@@ -2755,7 +2743,6 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
2755 INIT_WORK(&ctrl->delete_work, nvme_fc_delete_ctrl_work); 2743 INIT_WORK(&ctrl->delete_work, nvme_fc_delete_ctrl_work);
2756 INIT_WORK(&ctrl->reset_work, nvme_fc_reset_ctrl_work); 2744 INIT_WORK(&ctrl->reset_work, nvme_fc_reset_ctrl_work);
2757 INIT_DELAYED_WORK(&ctrl->connect_work, nvme_fc_connect_ctrl_work); 2745 INIT_DELAYED_WORK(&ctrl->connect_work, nvme_fc_connect_ctrl_work);
2758 ctrl->reconnect_delay = opts->reconnect_delay;
2759 spin_lock_init(&ctrl->lock); 2746 spin_lock_init(&ctrl->lock);
2760 2747
2761 /* io queue count */ 2748 /* io queue count */
@@ -2835,6 +2822,8 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
2835 return ERR_PTR(ret); 2822 return ERR_PTR(ret);
2836 } 2823 }
2837 2824
2825 kref_get(&ctrl->ctrl.kref);
2826
2838 dev_info(ctrl->ctrl.device, 2827 dev_info(ctrl->ctrl.device,
2839 "NVME-FC{%d}: new ctrl: NQN \"%s\"\n", 2828 "NVME-FC{%d}: new ctrl: NQN \"%s\"\n",
2840 ctrl->cnum, ctrl->ctrl.opts->subsysnqn); 2829 ctrl->cnum, ctrl->ctrl.opts->subsysnqn);
@@ -2971,7 +2960,7 @@ nvme_fc_create_ctrl(struct device *dev, struct nvmf_ctrl_options *opts)
2971static struct nvmf_transport_ops nvme_fc_transport = { 2960static struct nvmf_transport_ops nvme_fc_transport = {
2972 .name = "fc", 2961 .name = "fc",
2973 .required_opts = NVMF_OPT_TRADDR | NVMF_OPT_HOST_TRADDR, 2962 .required_opts = NVMF_OPT_TRADDR | NVMF_OPT_HOST_TRADDR,
2974 .allowed_opts = NVMF_OPT_RECONNECT_DELAY, 2963 .allowed_opts = NVMF_OPT_RECONNECT_DELAY | NVMF_OPT_CTRL_LOSS_TMO,
2975 .create_ctrl = nvme_fc_create_ctrl, 2964 .create_ctrl = nvme_fc_create_ctrl,
2976}; 2965};
2977 2966
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index 29c708ca9621..9d6a070d4391 100644
--- a/drivers/nvme/host/nvme.h
+++ b/drivers/nvme/host/nvme.h
@@ -208,7 +208,9 @@ struct nvme_ns {
208struct nvme_ctrl_ops { 208struct nvme_ctrl_ops {
209 const char *name; 209 const char *name;
210 struct module *module; 210 struct module *module;
211 bool is_fabrics; 211 unsigned int flags;
212#define NVME_F_FABRICS (1 << 0)
213#define NVME_F_METADATA_SUPPORTED (1 << 1)
212 int (*reg_read32)(struct nvme_ctrl *ctrl, u32 off, u32 *val); 214 int (*reg_read32)(struct nvme_ctrl *ctrl, u32 off, u32 *val);
213 int (*reg_write32)(struct nvme_ctrl *ctrl, u32 off, u32 val); 215 int (*reg_write32)(struct nvme_ctrl *ctrl, u32 off, u32 val);
214 int (*reg_read64)(struct nvme_ctrl *ctrl, u32 off, u64 *val); 216 int (*reg_read64)(struct nvme_ctrl *ctrl, u32 off, u64 *val);
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 4c2ff2bb26bc..40c7581caeb0 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -263,7 +263,7 @@ static void nvme_dbbuf_set(struct nvme_dev *dev)
263 c.dbbuf.prp2 = cpu_to_le64(dev->dbbuf_eis_dma_addr); 263 c.dbbuf.prp2 = cpu_to_le64(dev->dbbuf_eis_dma_addr);
264 264
265 if (nvme_submit_sync_cmd(dev->ctrl.admin_q, &c, NULL, 0)) { 265 if (nvme_submit_sync_cmd(dev->ctrl.admin_q, &c, NULL, 0)) {
266 dev_warn(dev->dev, "unable to set dbbuf\n"); 266 dev_warn(dev->ctrl.device, "unable to set dbbuf\n");
267 /* Free memory and continue on */ 267 /* Free memory and continue on */
268 nvme_dbbuf_dma_free(dev); 268 nvme_dbbuf_dma_free(dev);
269 } 269 }
@@ -1367,7 +1367,7 @@ static bool nvme_should_reset(struct nvme_dev *dev, u32 csts)
1367 bool nssro = dev->subsystem && (csts & NVME_CSTS_NSSRO); 1367 bool nssro = dev->subsystem && (csts & NVME_CSTS_NSSRO);
1368 1368
1369 /* If there is a reset ongoing, we shouldn't reset again. */ 1369 /* If there is a reset ongoing, we shouldn't reset again. */
1370 if (work_busy(&dev->reset_work)) 1370 if (dev->ctrl.state == NVME_CTRL_RESETTING)
1371 return false; 1371 return false;
1372 1372
1373 /* We shouldn't reset unless the controller is on fatal error state 1373 /* We shouldn't reset unless the controller is on fatal error state
@@ -1394,11 +1394,11 @@ static void nvme_warn_reset(struct nvme_dev *dev, u32 csts)
1394 result = pci_read_config_word(to_pci_dev(dev->dev), PCI_STATUS, 1394 result = pci_read_config_word(to_pci_dev(dev->dev), PCI_STATUS,
1395 &pci_status); 1395 &pci_status);
1396 if (result == PCIBIOS_SUCCESSFUL) 1396 if (result == PCIBIOS_SUCCESSFUL)
1397 dev_warn(dev->dev, 1397 dev_warn(dev->ctrl.device,
1398 "controller is down; will reset: CSTS=0x%x, PCI_STATUS=0x%hx\n", 1398 "controller is down; will reset: CSTS=0x%x, PCI_STATUS=0x%hx\n",
1399 csts, pci_status); 1399 csts, pci_status);
1400 else 1400 else
1401 dev_warn(dev->dev, 1401 dev_warn(dev->ctrl.device,
1402 "controller is down; will reset: CSTS=0x%x, PCI_STATUS read failed (%d)\n", 1402 "controller is down; will reset: CSTS=0x%x, PCI_STATUS read failed (%d)\n",
1403 csts, result); 1403 csts, result);
1404} 1404}
@@ -1740,8 +1740,8 @@ static int nvme_pci_enable(struct nvme_dev *dev)
1740 */ 1740 */
1741 if (pdev->vendor == PCI_VENDOR_ID_APPLE && pdev->device == 0x2001) { 1741 if (pdev->vendor == PCI_VENDOR_ID_APPLE && pdev->device == 0x2001) {
1742 dev->q_depth = 2; 1742 dev->q_depth = 2;
1743 dev_warn(dev->dev, "detected Apple NVMe controller, set " 1743 dev_warn(dev->ctrl.device, "detected Apple NVMe controller, "
1744 "queue depth=%u to work around controller resets\n", 1744 "set queue depth=%u to work around controller resets\n",
1745 dev->q_depth); 1745 dev->q_depth);
1746 } 1746 }
1747 1747
@@ -1759,7 +1759,7 @@ static int nvme_pci_enable(struct nvme_dev *dev)
1759 if (dev->cmbsz) { 1759 if (dev->cmbsz) {
1760 if (sysfs_add_file_to_group(&dev->ctrl.device->kobj, 1760 if (sysfs_add_file_to_group(&dev->ctrl.device->kobj,
1761 &dev_attr_cmb.attr, NULL)) 1761 &dev_attr_cmb.attr, NULL))
1762 dev_warn(dev->dev, 1762 dev_warn(dev->ctrl.device,
1763 "failed to add sysfs attribute for CMB\n"); 1763 "failed to add sysfs attribute for CMB\n");
1764 } 1764 }
1765 } 1765 }
@@ -1805,7 +1805,8 @@ static void nvme_dev_disable(struct nvme_dev *dev, bool shutdown)
1805 if (pci_is_enabled(pdev)) { 1805 if (pci_is_enabled(pdev)) {
1806 u32 csts = readl(dev->bar + NVME_REG_CSTS); 1806 u32 csts = readl(dev->bar + NVME_REG_CSTS);
1807 1807
1808 if (dev->ctrl.state == NVME_CTRL_LIVE) 1808 if (dev->ctrl.state == NVME_CTRL_LIVE ||
1809 dev->ctrl.state == NVME_CTRL_RESETTING)
1809 nvme_start_freeze(&dev->ctrl); 1810 nvme_start_freeze(&dev->ctrl);
1810 dead = !!((csts & NVME_CSTS_CFS) || !(csts & NVME_CSTS_RDY) || 1811 dead = !!((csts & NVME_CSTS_CFS) || !(csts & NVME_CSTS_RDY) ||
1811 pdev->error_state != pci_channel_io_normal); 1812 pdev->error_state != pci_channel_io_normal);
@@ -1903,7 +1904,7 @@ static void nvme_reset_work(struct work_struct *work)
1903 bool was_suspend = !!(dev->ctrl.ctrl_config & NVME_CC_SHN_NORMAL); 1904 bool was_suspend = !!(dev->ctrl.ctrl_config & NVME_CC_SHN_NORMAL);
1904 int result = -ENODEV; 1905 int result = -ENODEV;
1905 1906
1906 if (WARN_ON(dev->ctrl.state == NVME_CTRL_RESETTING)) 1907 if (WARN_ON(dev->ctrl.state != NVME_CTRL_RESETTING))
1907 goto out; 1908 goto out;
1908 1909
1909 /* 1910 /*
@@ -1913,9 +1914,6 @@ static void nvme_reset_work(struct work_struct *work)
1913 if (dev->ctrl.ctrl_config & NVME_CC_ENABLE) 1914 if (dev->ctrl.ctrl_config & NVME_CC_ENABLE)
1914 nvme_dev_disable(dev, false); 1915 nvme_dev_disable(dev, false);
1915 1916
1916 if (!nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_RESETTING))
1917 goto out;
1918
1919 result = nvme_pci_enable(dev); 1917 result = nvme_pci_enable(dev);
1920 if (result) 1918 if (result)
1921 goto out; 1919 goto out;
@@ -2009,8 +2007,8 @@ static int nvme_reset(struct nvme_dev *dev)
2009{ 2007{
2010 if (!dev->ctrl.admin_q || blk_queue_dying(dev->ctrl.admin_q)) 2008 if (!dev->ctrl.admin_q || blk_queue_dying(dev->ctrl.admin_q))
2011 return -ENODEV; 2009 return -ENODEV;
2012 if (work_busy(&dev->reset_work)) 2010 if (!nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_RESETTING))
2013 return -ENODEV; 2011 return -EBUSY;
2014 if (!queue_work(nvme_workq, &dev->reset_work)) 2012 if (!queue_work(nvme_workq, &dev->reset_work))
2015 return -EBUSY; 2013 return -EBUSY;
2016 return 0; 2014 return 0;
@@ -2047,6 +2045,7 @@ static int nvme_pci_reset_ctrl(struct nvme_ctrl *ctrl)
2047static const struct nvme_ctrl_ops nvme_pci_ctrl_ops = { 2045static const struct nvme_ctrl_ops nvme_pci_ctrl_ops = {
2048 .name = "pcie", 2046 .name = "pcie",
2049 .module = THIS_MODULE, 2047 .module = THIS_MODULE,
2048 .flags = NVME_F_METADATA_SUPPORTED,
2050 .reg_read32 = nvme_pci_reg_read32, 2049 .reg_read32 = nvme_pci_reg_read32,
2051 .reg_write32 = nvme_pci_reg_write32, 2050 .reg_write32 = nvme_pci_reg_write32,
2052 .reg_read64 = nvme_pci_reg_read64, 2051 .reg_read64 = nvme_pci_reg_read64,
@@ -2135,6 +2134,7 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2135 if (result) 2134 if (result)
2136 goto release_pools; 2135 goto release_pools;
2137 2136
2137 nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_RESETTING);
2138 dev_info(dev->ctrl.device, "pci function %s\n", dev_name(&pdev->dev)); 2138 dev_info(dev->ctrl.device, "pci function %s\n", dev_name(&pdev->dev));
2139 2139
2140 queue_work(nvme_workq, &dev->reset_work); 2140 queue_work(nvme_workq, &dev->reset_work);
@@ -2178,6 +2178,7 @@ static void nvme_remove(struct pci_dev *pdev)
2178 2178
2179 nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_DELETING); 2179 nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_DELETING);
2180 2180
2181 cancel_work_sync(&dev->reset_work);
2181 pci_set_drvdata(pdev, NULL); 2182 pci_set_drvdata(pdev, NULL);
2182 2183
2183 if (!pci_device_is_present(pdev)) { 2184 if (!pci_device_is_present(pdev)) {
@@ -2293,6 +2294,8 @@ static const struct pci_device_id nvme_id_table[] = {
2293 { PCI_VDEVICE(INTEL, 0x0a54), 2294 { PCI_VDEVICE(INTEL, 0x0a54),
2294 .driver_data = NVME_QUIRK_STRIPE_SIZE | 2295 .driver_data = NVME_QUIRK_STRIPE_SIZE |
2295 NVME_QUIRK_DEALLOCATE_ZEROES, }, 2296 NVME_QUIRK_DEALLOCATE_ZEROES, },
2297 { PCI_VDEVICE(INTEL, 0xf1a5), /* Intel 600P/P3100 */
2298 .driver_data = NVME_QUIRK_NO_DEEPEST_PS },
2296 { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */ 2299 { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */
2297 .driver_data = NVME_QUIRK_IDENTIFY_CNS, }, 2300 .driver_data = NVME_QUIRK_IDENTIFY_CNS, },
2298 { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */ 2301 { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */
diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
index dd1c6deef82f..24397d306d53 100644
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -753,28 +753,26 @@ static void nvme_rdma_reconnect_ctrl_work(struct work_struct *work)
753 if (ret) 753 if (ret)
754 goto requeue; 754 goto requeue;
755 755
756 blk_mq_start_stopped_hw_queues(ctrl->ctrl.admin_q, true);
757
758 ret = nvmf_connect_admin_queue(&ctrl->ctrl); 756 ret = nvmf_connect_admin_queue(&ctrl->ctrl);
759 if (ret) 757 if (ret)
760 goto stop_admin_q; 758 goto requeue;
761 759
762 set_bit(NVME_RDMA_Q_LIVE, &ctrl->queues[0].flags); 760 set_bit(NVME_RDMA_Q_LIVE, &ctrl->queues[0].flags);
763 761
764 ret = nvme_enable_ctrl(&ctrl->ctrl, ctrl->cap); 762 ret = nvme_enable_ctrl(&ctrl->ctrl, ctrl->cap);
765 if (ret) 763 if (ret)
766 goto stop_admin_q; 764 goto requeue;
767 765
768 nvme_start_keep_alive(&ctrl->ctrl); 766 nvme_start_keep_alive(&ctrl->ctrl);
769 767
770 if (ctrl->queue_count > 1) { 768 if (ctrl->queue_count > 1) {
771 ret = nvme_rdma_init_io_queues(ctrl); 769 ret = nvme_rdma_init_io_queues(ctrl);
772 if (ret) 770 if (ret)
773 goto stop_admin_q; 771 goto requeue;
774 772
775 ret = nvme_rdma_connect_io_queues(ctrl); 773 ret = nvme_rdma_connect_io_queues(ctrl);
776 if (ret) 774 if (ret)
777 goto stop_admin_q; 775 goto requeue;
778 } 776 }
779 777
780 changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE); 778 changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE);
@@ -782,7 +780,6 @@ static void nvme_rdma_reconnect_ctrl_work(struct work_struct *work)
782 ctrl->ctrl.opts->nr_reconnects = 0; 780 ctrl->ctrl.opts->nr_reconnects = 0;
783 781
784 if (ctrl->queue_count > 1) { 782 if (ctrl->queue_count > 1) {
785 nvme_start_queues(&ctrl->ctrl);
786 nvme_queue_scan(&ctrl->ctrl); 783 nvme_queue_scan(&ctrl->ctrl);
787 nvme_queue_async_events(&ctrl->ctrl); 784 nvme_queue_async_events(&ctrl->ctrl);
788 } 785 }
@@ -791,8 +788,6 @@ static void nvme_rdma_reconnect_ctrl_work(struct work_struct *work)
791 788
792 return; 789 return;
793 790
794stop_admin_q:
795 blk_mq_stop_hw_queues(ctrl->ctrl.admin_q);
796requeue: 791requeue:
797 dev_info(ctrl->ctrl.device, "Failed reconnect attempt %d\n", 792 dev_info(ctrl->ctrl.device, "Failed reconnect attempt %d\n",
798 ctrl->ctrl.opts->nr_reconnects); 793 ctrl->ctrl.opts->nr_reconnects);
@@ -823,6 +818,13 @@ static void nvme_rdma_error_recovery_work(struct work_struct *work)
823 blk_mq_tagset_busy_iter(&ctrl->admin_tag_set, 818 blk_mq_tagset_busy_iter(&ctrl->admin_tag_set,
824 nvme_cancel_request, &ctrl->ctrl); 819 nvme_cancel_request, &ctrl->ctrl);
825 820
821 /*
822 * queues are not a live anymore, so restart the queues to fail fast
823 * new IO
824 */
825 blk_mq_start_stopped_hw_queues(ctrl->ctrl.admin_q, true);
826 nvme_start_queues(&ctrl->ctrl);
827
826 nvme_rdma_reconnect_or_remove(ctrl); 828 nvme_rdma_reconnect_or_remove(ctrl);
827} 829}
828 830
@@ -1038,6 +1040,19 @@ static void nvme_rdma_send_done(struct ib_cq *cq, struct ib_wc *wc)
1038 nvme_rdma_wr_error(cq, wc, "SEND"); 1040 nvme_rdma_wr_error(cq, wc, "SEND");
1039} 1041}
1040 1042
1043static inline int nvme_rdma_queue_sig_limit(struct nvme_rdma_queue *queue)
1044{
1045 int sig_limit;
1046
1047 /*
1048 * We signal completion every queue depth/2 and also handle the
1049 * degenerated case of a device with queue_depth=1, where we
1050 * would need to signal every message.
1051 */
1052 sig_limit = max(queue->queue_size / 2, 1);
1053 return (++queue->sig_count % sig_limit) == 0;
1054}
1055
1041static int nvme_rdma_post_send(struct nvme_rdma_queue *queue, 1056static int nvme_rdma_post_send(struct nvme_rdma_queue *queue,
1042 struct nvme_rdma_qe *qe, struct ib_sge *sge, u32 num_sge, 1057 struct nvme_rdma_qe *qe, struct ib_sge *sge, u32 num_sge,
1043 struct ib_send_wr *first, bool flush) 1058 struct ib_send_wr *first, bool flush)
@@ -1065,9 +1080,6 @@ static int nvme_rdma_post_send(struct nvme_rdma_queue *queue,
1065 * Would have been way to obvious to handle this in hardware or 1080 * Would have been way to obvious to handle this in hardware or
1066 * at least the RDMA stack.. 1081 * at least the RDMA stack..
1067 * 1082 *
1068 * This messy and racy code sniplet is copy and pasted from the iSER
1069 * initiator, and the magic '32' comes from there as well.
1070 *
1071 * Always signal the flushes. The magic request used for the flush 1083 * Always signal the flushes. The magic request used for the flush
1072 * sequencer is not allocated in our driver's tagset and it's 1084 * sequencer is not allocated in our driver's tagset and it's
1073 * triggered to be freed by blk_cleanup_queue(). So we need to 1085 * triggered to be freed by blk_cleanup_queue(). So we need to
@@ -1075,7 +1087,7 @@ static int nvme_rdma_post_send(struct nvme_rdma_queue *queue,
1075 * embedded in request's payload, is not freed when __ib_process_cq() 1087 * embedded in request's payload, is not freed when __ib_process_cq()
1076 * calls wr_cqe->done(). 1088 * calls wr_cqe->done().
1077 */ 1089 */
1078 if ((++queue->sig_count % 32) == 0 || flush) 1090 if (nvme_rdma_queue_sig_limit(queue) || flush)
1079 wr.send_flags |= IB_SEND_SIGNALED; 1091 wr.send_flags |= IB_SEND_SIGNALED;
1080 1092
1081 if (first) 1093 if (first)
@@ -1423,7 +1435,7 @@ nvme_rdma_timeout(struct request *rq, bool reserved)
1423/* 1435/*
1424 * We cannot accept any other command until the Connect command has completed. 1436 * We cannot accept any other command until the Connect command has completed.
1425 */ 1437 */
1426static inline bool nvme_rdma_queue_is_ready(struct nvme_rdma_queue *queue, 1438static inline int nvme_rdma_queue_is_ready(struct nvme_rdma_queue *queue,
1427 struct request *rq) 1439 struct request *rq)
1428{ 1440{
1429 if (unlikely(!test_bit(NVME_RDMA_Q_LIVE, &queue->flags))) { 1441 if (unlikely(!test_bit(NVME_RDMA_Q_LIVE, &queue->flags))) {
@@ -1431,11 +1443,22 @@ static inline bool nvme_rdma_queue_is_ready(struct nvme_rdma_queue *queue,
1431 1443
1432 if (!blk_rq_is_passthrough(rq) || 1444 if (!blk_rq_is_passthrough(rq) ||
1433 cmd->common.opcode != nvme_fabrics_command || 1445 cmd->common.opcode != nvme_fabrics_command ||
1434 cmd->fabrics.fctype != nvme_fabrics_type_connect) 1446 cmd->fabrics.fctype != nvme_fabrics_type_connect) {
1435 return false; 1447 /*
1448 * reconnecting state means transport disruption, which
1449 * can take a long time and even might fail permanently,
1450 * so we can't let incoming I/O be requeued forever.
1451 * fail it fast to allow upper layers a chance to
1452 * failover.
1453 */
1454 if (queue->ctrl->ctrl.state == NVME_CTRL_RECONNECTING)
1455 return -EIO;
1456 else
1457 return -EAGAIN;
1458 }
1436 } 1459 }
1437 1460
1438 return true; 1461 return 0;
1439} 1462}
1440 1463
1441static int nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx, 1464static int nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx,
@@ -1453,8 +1476,9 @@ static int nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx,
1453 1476
1454 WARN_ON_ONCE(rq->tag < 0); 1477 WARN_ON_ONCE(rq->tag < 0);
1455 1478
1456 if (!nvme_rdma_queue_is_ready(queue, rq)) 1479 ret = nvme_rdma_queue_is_ready(queue, rq);
1457 return BLK_MQ_RQ_QUEUE_BUSY; 1480 if (unlikely(ret))
1481 goto err;
1458 1482
1459 dev = queue->device->dev; 1483 dev = queue->device->dev;
1460 ib_dma_sync_single_for_cpu(dev, sqe->dma, 1484 ib_dma_sync_single_for_cpu(dev, sqe->dma,
@@ -1782,7 +1806,7 @@ static int nvme_rdma_reset_ctrl(struct nvme_ctrl *nctrl)
1782static const struct nvme_ctrl_ops nvme_rdma_ctrl_ops = { 1806static const struct nvme_ctrl_ops nvme_rdma_ctrl_ops = {
1783 .name = "rdma", 1807 .name = "rdma",
1784 .module = THIS_MODULE, 1808 .module = THIS_MODULE,
1785 .is_fabrics = true, 1809 .flags = NVME_F_FABRICS,
1786 .reg_read32 = nvmf_reg_read32, 1810 .reg_read32 = nvmf_reg_read32,
1787 .reg_read64 = nvmf_reg_read64, 1811 .reg_read64 = nvmf_reg_read64,
1788 .reg_write32 = nvmf_reg_write32, 1812 .reg_write32 = nvmf_reg_write32,
diff --git a/drivers/nvme/target/loop.c b/drivers/nvme/target/loop.c
index feb497134aee..e503cfff0337 100644
--- a/drivers/nvme/target/loop.c
+++ b/drivers/nvme/target/loop.c
@@ -558,7 +558,7 @@ static int nvme_loop_reset_ctrl(struct nvme_ctrl *nctrl)
558static const struct nvme_ctrl_ops nvme_loop_ctrl_ops = { 558static const struct nvme_ctrl_ops nvme_loop_ctrl_ops = {
559 .name = "loop", 559 .name = "loop",
560 .module = THIS_MODULE, 560 .module = THIS_MODULE,
561 .is_fabrics = true, 561 .flags = NVME_F_FABRICS,
562 .reg_read32 = nvmf_reg_read32, 562 .reg_read32 = nvmf_reg_read32,
563 .reg_read64 = nvmf_reg_read64, 563 .reg_read64 = nvmf_reg_read64,
564 .reg_write32 = nvmf_reg_write32, 564 .reg_write32 = nvmf_reg_write32,
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 28d5f53bc631..cb1c49ae3b88 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -1601,6 +1601,7 @@ int of_phandle_iterator_init(struct of_phandle_iterator *it,
1601 1601
1602 return 0; 1602 return 0;
1603} 1603}
1604EXPORT_SYMBOL_GPL(of_phandle_iterator_init);
1604 1605
1605int of_phandle_iterator_next(struct of_phandle_iterator *it) 1606int of_phandle_iterator_next(struct of_phandle_iterator *it)
1606{ 1607{
@@ -1670,6 +1671,7 @@ err:
1670 1671
1671 return -EINVAL; 1672 return -EINVAL;
1672} 1673}
1674EXPORT_SYMBOL_GPL(of_phandle_iterator_next);
1673 1675
1674int of_phandle_iterator_args(struct of_phandle_iterator *it, 1676int of_phandle_iterator_args(struct of_phandle_iterator *it,
1675 uint32_t *args, 1677 uint32_t *args,
@@ -2485,6 +2487,41 @@ struct device_node *of_graph_get_endpoint_by_regs(
2485EXPORT_SYMBOL(of_graph_get_endpoint_by_regs); 2487EXPORT_SYMBOL(of_graph_get_endpoint_by_regs);
2486 2488
2487/** 2489/**
2490 * of_graph_get_remote_endpoint() - get remote endpoint node
2491 * @node: pointer to a local endpoint device_node
2492 *
2493 * Return: Remote endpoint node associated with remote endpoint node linked
2494 * to @node. Use of_node_put() on it when done.
2495 */
2496struct device_node *of_graph_get_remote_endpoint(const struct device_node *node)
2497{
2498 /* Get remote endpoint node. */
2499 return of_parse_phandle(node, "remote-endpoint", 0);
2500}
2501EXPORT_SYMBOL(of_graph_get_remote_endpoint);
2502
2503/**
2504 * of_graph_get_port_parent() - get port's parent node
2505 * @node: pointer to a local endpoint device_node
2506 *
2507 * Return: device node associated with endpoint node linked
2508 * to @node. Use of_node_put() on it when done.
2509 */
2510struct device_node *of_graph_get_port_parent(struct device_node *node)
2511{
2512 unsigned int depth;
2513
2514 /* Walk 3 levels up only if there is 'ports' node. */
2515 for (depth = 3; depth && node; depth--) {
2516 node = of_get_next_parent(node);
2517 if (depth == 2 && of_node_cmp(node->name, "ports"))
2518 break;
2519 }
2520 return node;
2521}
2522EXPORT_SYMBOL(of_graph_get_port_parent);
2523
2524/**
2488 * of_graph_get_remote_port_parent() - get remote port's parent node 2525 * of_graph_get_remote_port_parent() - get remote port's parent node
2489 * @node: pointer to a local endpoint device_node 2526 * @node: pointer to a local endpoint device_node
2490 * 2527 *
@@ -2495,18 +2532,11 @@ struct device_node *of_graph_get_remote_port_parent(
2495 const struct device_node *node) 2532 const struct device_node *node)
2496{ 2533{
2497 struct device_node *np; 2534 struct device_node *np;
2498 unsigned int depth;
2499 2535
2500 /* Get remote endpoint node. */ 2536 /* Get remote endpoint node. */
2501 np = of_parse_phandle(node, "remote-endpoint", 0); 2537 np = of_graph_get_remote_endpoint(node);
2502 2538
2503 /* Walk 3 levels up only if there is 'ports' node. */ 2539 return of_graph_get_port_parent(np);
2504 for (depth = 3; depth && np; depth--) {
2505 np = of_get_next_parent(np);
2506 if (depth == 2 && of_node_cmp(np->name, "ports"))
2507 break;
2508 }
2509 return np;
2510} 2540}
2511EXPORT_SYMBOL(of_graph_get_remote_port_parent); 2541EXPORT_SYMBOL(of_graph_get_remote_port_parent);
2512 2542
@@ -2522,13 +2552,25 @@ struct device_node *of_graph_get_remote_port(const struct device_node *node)
2522 struct device_node *np; 2552 struct device_node *np;
2523 2553
2524 /* Get remote endpoint node. */ 2554 /* Get remote endpoint node. */
2525 np = of_parse_phandle(node, "remote-endpoint", 0); 2555 np = of_graph_get_remote_endpoint(node);
2526 if (!np) 2556 if (!np)
2527 return NULL; 2557 return NULL;
2528 return of_get_next_parent(np); 2558 return of_get_next_parent(np);
2529} 2559}
2530EXPORT_SYMBOL(of_graph_get_remote_port); 2560EXPORT_SYMBOL(of_graph_get_remote_port);
2531 2561
2562int of_graph_get_endpoint_count(const struct device_node *np)
2563{
2564 struct device_node *endpoint;
2565 int num = 0;
2566
2567 for_each_endpoint_of_node(np, endpoint)
2568 num++;
2569
2570 return num;
2571}
2572EXPORT_SYMBOL(of_graph_get_endpoint_count);
2573
2532/** 2574/**
2533 * of_graph_get_remote_node() - get remote parent device_node for given port/endpoint 2575 * of_graph_get_remote_node() - get remote parent device_node for given port/endpoint
2534 * @node: pointer to parent device_node containing graph port/endpoint 2576 * @node: pointer to parent device_node containing graph port/endpoint
diff --git a/drivers/of/device.c b/drivers/of/device.c
index 9416d052cb89..28c38c756f92 100644
--- a/drivers/of/device.c
+++ b/drivers/of/device.c
@@ -144,8 +144,8 @@ int of_dma_configure(struct device *dev, struct device_node *np)
144 coherent ? " " : " not "); 144 coherent ? " " : " not ");
145 145
146 iommu = of_iommu_configure(dev, np); 146 iommu = of_iommu_configure(dev, np);
147 if (IS_ERR(iommu)) 147 if (IS_ERR(iommu) && PTR_ERR(iommu) == -EPROBE_DEFER)
148 return PTR_ERR(iommu); 148 return -EPROBE_DEFER;
149 149
150 dev_dbg(dev, "device is%sbehind an iommu\n", 150 dev_dbg(dev, "device is%sbehind an iommu\n",
151 iommu ? " " : " not "); 151 iommu ? " " : " not ");
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 71fecc2debfc..703a42118ffc 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -523,7 +523,7 @@ static int __init of_platform_default_populate_init(void)
523arch_initcall_sync(of_platform_default_populate_init); 523arch_initcall_sync(of_platform_default_populate_init);
524#endif 524#endif
525 525
526static int of_platform_device_destroy(struct device *dev, void *data) 526int of_platform_device_destroy(struct device *dev, void *data)
527{ 527{
528 /* Do not touch devices not populated from the device tree */ 528 /* Do not touch devices not populated from the device tree */
529 if (!dev->of_node || !of_node_check_flag(dev->of_node, OF_POPULATED)) 529 if (!dev->of_node || !of_node_check_flag(dev->of_node, OF_POPULATED))
@@ -544,6 +544,7 @@ static int of_platform_device_destroy(struct device *dev, void *data)
544 of_node_clear_flag(dev->of_node, OF_POPULATED_BUS); 544 of_node_clear_flag(dev->of_node, OF_POPULATED_BUS);
545 return 0; 545 return 0;
546} 546}
547EXPORT_SYMBOL_GPL(of_platform_device_destroy);
547 548
548/** 549/**
549 * of_platform_depopulate() - Remove devices populated from device tree 550 * of_platform_depopulate() - Remove devices populated from device tree
diff --git a/drivers/pci/access.c b/drivers/pci/access.c
index 74cf5fffb1e1..c80e37a69305 100644
--- a/drivers/pci/access.c
+++ b/drivers/pci/access.c
@@ -896,7 +896,7 @@ int pci_read_config_byte(const struct pci_dev *dev, int where, u8 *val)
896{ 896{
897 if (pci_dev_is_disconnected(dev)) { 897 if (pci_dev_is_disconnected(dev)) {
898 *val = ~0; 898 *val = ~0;
899 return -ENODEV; 899 return PCIBIOS_DEVICE_NOT_FOUND;
900 } 900 }
901 return pci_bus_read_config_byte(dev->bus, dev->devfn, where, val); 901 return pci_bus_read_config_byte(dev->bus, dev->devfn, where, val);
902} 902}
@@ -906,7 +906,7 @@ int pci_read_config_word(const struct pci_dev *dev, int where, u16 *val)
906{ 906{
907 if (pci_dev_is_disconnected(dev)) { 907 if (pci_dev_is_disconnected(dev)) {
908 *val = ~0; 908 *val = ~0;
909 return -ENODEV; 909 return PCIBIOS_DEVICE_NOT_FOUND;
910 } 910 }
911 return pci_bus_read_config_word(dev->bus, dev->devfn, where, val); 911 return pci_bus_read_config_word(dev->bus, dev->devfn, where, val);
912} 912}
@@ -917,7 +917,7 @@ int pci_read_config_dword(const struct pci_dev *dev, int where,
917{ 917{
918 if (pci_dev_is_disconnected(dev)) { 918 if (pci_dev_is_disconnected(dev)) {
919 *val = ~0; 919 *val = ~0;
920 return -ENODEV; 920 return PCIBIOS_DEVICE_NOT_FOUND;
921 } 921 }
922 return pci_bus_read_config_dword(dev->bus, dev->devfn, where, val); 922 return pci_bus_read_config_dword(dev->bus, dev->devfn, where, val);
923} 923}
@@ -926,7 +926,7 @@ EXPORT_SYMBOL(pci_read_config_dword);
926int pci_write_config_byte(const struct pci_dev *dev, int where, u8 val) 926int pci_write_config_byte(const struct pci_dev *dev, int where, u8 val)
927{ 927{
928 if (pci_dev_is_disconnected(dev)) 928 if (pci_dev_is_disconnected(dev))
929 return -ENODEV; 929 return PCIBIOS_DEVICE_NOT_FOUND;
930 return pci_bus_write_config_byte(dev->bus, dev->devfn, where, val); 930 return pci_bus_write_config_byte(dev->bus, dev->devfn, where, val);
931} 931}
932EXPORT_SYMBOL(pci_write_config_byte); 932EXPORT_SYMBOL(pci_write_config_byte);
@@ -934,7 +934,7 @@ EXPORT_SYMBOL(pci_write_config_byte);
934int pci_write_config_word(const struct pci_dev *dev, int where, u16 val) 934int pci_write_config_word(const struct pci_dev *dev, int where, u16 val)
935{ 935{
936 if (pci_dev_is_disconnected(dev)) 936 if (pci_dev_is_disconnected(dev))
937 return -ENODEV; 937 return PCIBIOS_DEVICE_NOT_FOUND;
938 return pci_bus_write_config_word(dev->bus, dev->devfn, where, val); 938 return pci_bus_write_config_word(dev->bus, dev->devfn, where, val);
939} 939}
940EXPORT_SYMBOL(pci_write_config_word); 940EXPORT_SYMBOL(pci_write_config_word);
@@ -943,7 +943,7 @@ int pci_write_config_dword(const struct pci_dev *dev, int where,
943 u32 val) 943 u32 val)
944{ 944{
945 if (pci_dev_is_disconnected(dev)) 945 if (pci_dev_is_disconnected(dev))
946 return -ENODEV; 946 return PCIBIOS_DEVICE_NOT_FOUND;
947 return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val); 947 return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val);
948} 948}
949EXPORT_SYMBOL(pci_write_config_dword); 949EXPORT_SYMBOL(pci_write_config_dword);
diff --git a/drivers/pci/dwc/pci-imx6.c b/drivers/pci/dwc/pci-imx6.c
index a98cba55c7f0..19a289b8cc94 100644
--- a/drivers/pci/dwc/pci-imx6.c
+++ b/drivers/pci/dwc/pci-imx6.c
@@ -252,7 +252,34 @@ static void imx6_pcie_reset_phy(struct imx6_pcie *imx6_pcie)
252static int imx6q_pcie_abort_handler(unsigned long addr, 252static int imx6q_pcie_abort_handler(unsigned long addr,
253 unsigned int fsr, struct pt_regs *regs) 253 unsigned int fsr, struct pt_regs *regs)
254{ 254{
255 return 0; 255 unsigned long pc = instruction_pointer(regs);
256 unsigned long instr = *(unsigned long *)pc;
257 int reg = (instr >> 12) & 15;
258
259 /*
260 * If the instruction being executed was a read,
261 * make it look like it read all-ones.
262 */
263 if ((instr & 0x0c100000) == 0x04100000) {
264 unsigned long val;
265
266 if (instr & 0x00400000)
267 val = 255;
268 else
269 val = -1;
270
271 regs->uregs[reg] = val;
272 regs->ARM_pc += 4;
273 return 0;
274 }
275
276 if ((instr & 0x0e100090) == 0x00100090) {
277 regs->uregs[reg] = -1;
278 regs->ARM_pc += 4;
279 return 0;
280 }
281
282 return 1;
256} 283}
257 284
258static void imx6_pcie_assert_core_reset(struct imx6_pcie *imx6_pcie) 285static void imx6_pcie_assert_core_reset(struct imx6_pcie *imx6_pcie)
@@ -819,8 +846,8 @@ static int __init imx6_pcie_init(void)
819 * we can install the handler here without risking it 846 * we can install the handler here without risking it
820 * accessing some uninitialized driver state. 847 * accessing some uninitialized driver state.
821 */ 848 */
822 hook_fault_code(16 + 6, imx6q_pcie_abort_handler, SIGBUS, 0, 849 hook_fault_code(8, imx6q_pcie_abort_handler, SIGBUS, 0,
823 "imprecise external abort"); 850 "external abort on non-linefetch");
824 851
825 return platform_driver_register(&imx6_pcie_driver); 852 return platform_driver_register(&imx6_pcie_driver);
826} 853}
diff --git a/drivers/pci/endpoint/Kconfig b/drivers/pci/endpoint/Kconfig
index c23f146fb5a6..c09623ca8c3b 100644
--- a/drivers/pci/endpoint/Kconfig
+++ b/drivers/pci/endpoint/Kconfig
@@ -6,6 +6,7 @@ menu "PCI Endpoint"
6 6
7config PCI_ENDPOINT 7config PCI_ENDPOINT
8 bool "PCI Endpoint Support" 8 bool "PCI Endpoint Support"
9 depends on HAS_DMA
9 help 10 help
10 Enable this configuration option to support configurable PCI 11 Enable this configuration option to support configurable PCI
11 endpoint. This should be enabled if the platform has a PCI 12 endpoint. This should be enabled if the platform has a PCI
diff --git a/drivers/pci/endpoint/functions/Kconfig b/drivers/pci/endpoint/functions/Kconfig
index 175edad42d2f..2942066607e0 100644
--- a/drivers/pci/endpoint/functions/Kconfig
+++ b/drivers/pci/endpoint/functions/Kconfig
@@ -5,6 +5,7 @@
5config PCI_EPF_TEST 5config PCI_EPF_TEST
6 tristate "PCI Endpoint Test driver" 6 tristate "PCI Endpoint Test driver"
7 depends on PCI_ENDPOINT 7 depends on PCI_ENDPOINT
8 select CRC32
8 help 9 help
9 Enable this configuration option to enable the test driver 10 Enable this configuration option to enable the test driver
10 for PCI Endpoint. 11 for PCI Endpoint.
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index b01bd5bba8e6..563901cd9c06 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -2144,7 +2144,8 @@ bool pci_dev_keep_suspended(struct pci_dev *pci_dev)
2144 2144
2145 if (!pm_runtime_suspended(dev) 2145 if (!pm_runtime_suspended(dev)
2146 || pci_target_state(pci_dev) != pci_dev->current_state 2146 || pci_target_state(pci_dev) != pci_dev->current_state
2147 || platform_pci_need_resume(pci_dev)) 2147 || platform_pci_need_resume(pci_dev)
2148 || (pci_dev->dev_flags & PCI_DEV_FLAGS_NEEDS_RESUME))
2148 return false; 2149 return false;
2149 2150
2150 /* 2151 /*
diff --git a/drivers/pci/switch/switchtec.c b/drivers/pci/switch/switchtec.c
index cc6e085008fb..f6a63406c76e 100644
--- a/drivers/pci/switch/switchtec.c
+++ b/drivers/pci/switch/switchtec.c
@@ -1291,7 +1291,6 @@ static struct switchtec_dev *stdev_create(struct pci_dev *pdev)
1291 cdev = &stdev->cdev; 1291 cdev = &stdev->cdev;
1292 cdev_init(cdev, &switchtec_fops); 1292 cdev_init(cdev, &switchtec_fops);
1293 cdev->owner = THIS_MODULE; 1293 cdev->owner = THIS_MODULE;
1294 cdev->kobj.parent = &dev->kobj;
1295 1294
1296 return stdev; 1295 return stdev;
1297 1296
@@ -1442,12 +1441,15 @@ static int switchtec_init_pci(struct switchtec_dev *stdev,
1442 stdev->mmio_sys_info = stdev->mmio + SWITCHTEC_GAS_SYS_INFO_OFFSET; 1441 stdev->mmio_sys_info = stdev->mmio + SWITCHTEC_GAS_SYS_INFO_OFFSET;
1443 stdev->mmio_flash_info = stdev->mmio + SWITCHTEC_GAS_FLASH_INFO_OFFSET; 1442 stdev->mmio_flash_info = stdev->mmio + SWITCHTEC_GAS_FLASH_INFO_OFFSET;
1444 stdev->mmio_ntb = stdev->mmio + SWITCHTEC_GAS_NTB_OFFSET; 1443 stdev->mmio_ntb = stdev->mmio + SWITCHTEC_GAS_NTB_OFFSET;
1445 stdev->partition = ioread8(&stdev->mmio_ntb->partition_id); 1444 stdev->partition = ioread8(&stdev->mmio_sys_info->partition_id);
1446 stdev->partition_count = ioread8(&stdev->mmio_ntb->partition_count); 1445 stdev->partition_count = ioread8(&stdev->mmio_ntb->partition_count);
1447 stdev->mmio_part_cfg_all = stdev->mmio + SWITCHTEC_GAS_PART_CFG_OFFSET; 1446 stdev->mmio_part_cfg_all = stdev->mmio + SWITCHTEC_GAS_PART_CFG_OFFSET;
1448 stdev->mmio_part_cfg = &stdev->mmio_part_cfg_all[stdev->partition]; 1447 stdev->mmio_part_cfg = &stdev->mmio_part_cfg_all[stdev->partition];
1449 stdev->mmio_pff_csr = stdev->mmio + SWITCHTEC_GAS_PFF_CSR_OFFSET; 1448 stdev->mmio_pff_csr = stdev->mmio + SWITCHTEC_GAS_PFF_CSR_OFFSET;
1450 1449
1450 if (stdev->partition_count < 1)
1451 stdev->partition_count = 1;
1452
1451 init_pff(stdev); 1453 init_pff(stdev);
1452 1454
1453 pci_set_drvdata(pdev, stdev); 1455 pci_set_drvdata(pdev, stdev);
@@ -1479,11 +1481,7 @@ static int switchtec_pci_probe(struct pci_dev *pdev,
1479 SWITCHTEC_EVENT_EN_IRQ, 1481 SWITCHTEC_EVENT_EN_IRQ,
1480 &stdev->mmio_part_cfg->mrpc_comp_hdr); 1482 &stdev->mmio_part_cfg->mrpc_comp_hdr);
1481 1483
1482 rc = cdev_add(&stdev->cdev, stdev->dev.devt, 1); 1484 rc = cdev_device_add(&stdev->cdev, &stdev->dev);
1483 if (rc)
1484 goto err_put;
1485
1486 rc = device_add(&stdev->dev);
1487 if (rc) 1485 if (rc)
1488 goto err_devadd; 1486 goto err_devadd;
1489 1487
@@ -1492,7 +1490,6 @@ static int switchtec_pci_probe(struct pci_dev *pdev,
1492 return 0; 1490 return 0;
1493 1491
1494err_devadd: 1492err_devadd:
1495 cdev_del(&stdev->cdev);
1496 stdev_kill(stdev); 1493 stdev_kill(stdev);
1497err_put: 1494err_put:
1498 ida_simple_remove(&switchtec_minor_ida, MINOR(stdev->dev.devt)); 1495 ida_simple_remove(&switchtec_minor_ida, MINOR(stdev->dev.devt));
@@ -1506,8 +1503,7 @@ static void switchtec_pci_remove(struct pci_dev *pdev)
1506 1503
1507 pci_set_drvdata(pdev, NULL); 1504 pci_set_drvdata(pdev, NULL);
1508 1505
1509 device_del(&stdev->dev); 1506 cdev_device_del(&stdev->cdev, &stdev->dev);
1510 cdev_del(&stdev->cdev);
1511 ida_simple_remove(&switchtec_minor_ida, MINOR(stdev->dev.devt)); 1507 ida_simple_remove(&switchtec_minor_ida, MINOR(stdev->dev.devt));
1512 dev_info(&stdev->dev, "unregistered.\n"); 1508 dev_info(&stdev->dev, "unregistered.\n");
1513 1509
diff --git a/drivers/perf/arm_pmu_acpi.c b/drivers/perf/arm_pmu_acpi.c
index 34c862f213c7..0a9b78705ee8 100644
--- a/drivers/perf/arm_pmu_acpi.c
+++ b/drivers/perf/arm_pmu_acpi.c
@@ -29,6 +29,17 @@ static int arm_pmu_acpi_register_irq(int cpu)
29 return -EINVAL; 29 return -EINVAL;
30 30
31 gsi = gicc->performance_interrupt; 31 gsi = gicc->performance_interrupt;
32
33 /*
34 * Per the ACPI spec, the MADT cannot describe a PMU that doesn't
35 * have an interrupt. QEMU advertises this by using a GSI of zero,
36 * which is not known to be valid on any hardware despite being
37 * valid per the spec. Take the pragmatic approach and reject a
38 * GSI of zero for now.
39 */
40 if (!gsi)
41 return 0;
42
32 if (gicc->flags & ACPI_MADT_PERFORMANCE_IRQ_MODE) 43 if (gicc->flags & ACPI_MADT_PERFORMANCE_IRQ_MODE)
33 trigger = ACPI_EDGE_SENSITIVE; 44 trigger = ACPI_EDGE_SENSITIVE;
34 else 45 else
diff --git a/drivers/phy/phy-qcom-qmp.c b/drivers/phy/phy-qcom-qmp.c
index 727e23be7cac..78ca62897784 100644
--- a/drivers/phy/phy-qcom-qmp.c
+++ b/drivers/phy/phy-qcom-qmp.c
@@ -844,7 +844,7 @@ static int qcom_qmp_phy_vreg_init(struct device *dev)
844 int num = qmp->cfg->num_vregs; 844 int num = qmp->cfg->num_vregs;
845 int i; 845 int i;
846 846
847 qmp->vregs = devm_kcalloc(dev, num, sizeof(qmp->vregs), GFP_KERNEL); 847 qmp->vregs = devm_kcalloc(dev, num, sizeof(*qmp->vregs), GFP_KERNEL);
848 if (!qmp->vregs) 848 if (!qmp->vregs)
849 return -ENOMEM; 849 return -ENOMEM;
850 850
@@ -983,16 +983,16 @@ int qcom_qmp_phy_create(struct device *dev, struct device_node *np, int id)
983 * Resources are indexed as: tx -> 0; rx -> 1; pcs -> 2. 983 * Resources are indexed as: tx -> 0; rx -> 1; pcs -> 2.
984 */ 984 */
985 qphy->tx = of_iomap(np, 0); 985 qphy->tx = of_iomap(np, 0);
986 if (IS_ERR(qphy->tx)) 986 if (!qphy->tx)
987 return PTR_ERR(qphy->tx); 987 return -ENOMEM;
988 988
989 qphy->rx = of_iomap(np, 1); 989 qphy->rx = of_iomap(np, 1);
990 if (IS_ERR(qphy->rx)) 990 if (!qphy->rx)
991 return PTR_ERR(qphy->rx); 991 return -ENOMEM;
992 992
993 qphy->pcs = of_iomap(np, 2); 993 qphy->pcs = of_iomap(np, 2);
994 if (IS_ERR(qphy->pcs)) 994 if (!qphy->pcs)
995 return PTR_ERR(qphy->pcs); 995 return -ENOMEM;
996 996
997 /* 997 /*
998 * Get PHY's Pipe clock, if any. USB3 and PCIe are PIPE3 998 * Get PHY's Pipe clock, if any. USB3 and PCIe are PIPE3
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index 1653cbda6a82..bd459a93b0e7 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -680,30 +680,16 @@ EXPORT_SYMBOL_GPL(pinctrl_generic_remove_group);
680 * pinctrl_generic_free_groups() - removes all pin groups 680 * pinctrl_generic_free_groups() - removes all pin groups
681 * @pctldev: pin controller device 681 * @pctldev: pin controller device
682 * 682 *
683 * Note that the caller must take care of locking. 683 * Note that the caller must take care of locking. The pinctrl groups
684 * are allocated with devm_kzalloc() so no need to free them here.
684 */ 685 */
685static void pinctrl_generic_free_groups(struct pinctrl_dev *pctldev) 686static void pinctrl_generic_free_groups(struct pinctrl_dev *pctldev)
686{ 687{
687 struct radix_tree_iter iter; 688 struct radix_tree_iter iter;
688 struct group_desc *group;
689 unsigned long *indices;
690 void **slot; 689 void **slot;
691 int i = 0;
692
693 indices = devm_kzalloc(pctldev->dev, sizeof(*indices) *
694 pctldev->num_groups, GFP_KERNEL);
695 if (!indices)
696 return;
697 690
698 radix_tree_for_each_slot(slot, &pctldev->pin_group_tree, &iter, 0) 691 radix_tree_for_each_slot(slot, &pctldev->pin_group_tree, &iter, 0)
699 indices[i++] = iter.index; 692 radix_tree_delete(&pctldev->pin_group_tree, iter.index);
700
701 for (i = 0; i < pctldev->num_groups; i++) {
702 group = radix_tree_lookup(&pctldev->pin_group_tree,
703 indices[i]);
704 radix_tree_delete(&pctldev->pin_group_tree, indices[i]);
705 devm_kfree(pctldev->dev, group);
706 }
707 693
708 pctldev->num_groups = 0; 694 pctldev->num_groups = 0;
709} 695}
diff --git a/drivers/pinctrl/freescale/pinctrl-mxs.c b/drivers/pinctrl/freescale/pinctrl-mxs.c
index 41b5b07d5a2b..6852010a6d70 100644
--- a/drivers/pinctrl/freescale/pinctrl-mxs.c
+++ b/drivers/pinctrl/freescale/pinctrl-mxs.c
@@ -194,6 +194,16 @@ static int mxs_pinctrl_get_func_groups(struct pinctrl_dev *pctldev,
194 return 0; 194 return 0;
195} 195}
196 196
197static void mxs_pinctrl_rmwl(u32 value, u32 mask, u8 shift, void __iomem *reg)
198{
199 u32 tmp;
200
201 tmp = readl(reg);
202 tmp &= ~(mask << shift);
203 tmp |= value << shift;
204 writel(tmp, reg);
205}
206
197static int mxs_pinctrl_set_mux(struct pinctrl_dev *pctldev, unsigned selector, 207static int mxs_pinctrl_set_mux(struct pinctrl_dev *pctldev, unsigned selector,
198 unsigned group) 208 unsigned group)
199{ 209{
@@ -211,8 +221,7 @@ static int mxs_pinctrl_set_mux(struct pinctrl_dev *pctldev, unsigned selector,
211 reg += bank * 0x20 + pin / 16 * 0x10; 221 reg += bank * 0x20 + pin / 16 * 0x10;
212 shift = pin % 16 * 2; 222 shift = pin % 16 * 2;
213 223
214 writel(0x3 << shift, reg + CLR); 224 mxs_pinctrl_rmwl(g->muxsel[i], 0x3, shift, reg);
215 writel(g->muxsel[i] << shift, reg + SET);
216 } 225 }
217 226
218 return 0; 227 return 0;
@@ -279,8 +288,7 @@ static int mxs_pinconf_group_set(struct pinctrl_dev *pctldev,
279 /* mA */ 288 /* mA */
280 if (config & MA_PRESENT) { 289 if (config & MA_PRESENT) {
281 shift = pin % 8 * 4; 290 shift = pin % 8 * 4;
282 writel(0x3 << shift, reg + CLR); 291 mxs_pinctrl_rmwl(ma, 0x3, shift, reg);
283 writel(ma << shift, reg + SET);
284 } 292 }
285 293
286 /* vol */ 294 /* vol */
diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
index 2debba62fac9..20f1b4493994 100644
--- a/drivers/pinctrl/intel/pinctrl-cherryview.c
+++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
@@ -1539,15 +1539,29 @@ static void chv_gpio_irq_handler(struct irq_desc *desc)
1539 * is not listed below. 1539 * is not listed below.
1540 */ 1540 */
1541static const struct dmi_system_id chv_no_valid_mask[] = { 1541static const struct dmi_system_id chv_no_valid_mask[] = {
1542 /* See https://bugzilla.kernel.org/show_bug.cgi?id=194945 */
1542 { 1543 {
1543 /* See https://bugzilla.kernel.org/show_bug.cgi?id=194945 */ 1544 .ident = "Intel_Strago based Chromebooks (All models)",
1544 .ident = "Acer Chromebook (CYAN)",
1545 .matches = { 1545 .matches = {
1546 DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"), 1546 DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
1547 DMI_MATCH(DMI_PRODUCT_NAME, "Edgar"), 1547 DMI_MATCH(DMI_PRODUCT_FAMILY, "Intel_Strago"),
1548 DMI_MATCH(DMI_BIOS_DATE, "05/21/2016"),
1549 }, 1548 },
1550 } 1549 },
1550 {
1551 .ident = "Acer Chromebook R11 (Cyan)",
1552 .matches = {
1553 DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
1554 DMI_MATCH(DMI_PRODUCT_NAME, "Cyan"),
1555 },
1556 },
1557 {
1558 .ident = "Samsung Chromebook 3 (Celes)",
1559 .matches = {
1560 DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
1561 DMI_MATCH(DMI_PRODUCT_NAME, "Celes"),
1562 },
1563 },
1564 {}
1551}; 1565};
1552 1566
1553static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq) 1567static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq)
diff --git a/drivers/pinctrl/pinconf-generic.c b/drivers/pinctrl/pinconf-generic.c
index 0d6b7f4b82af..720a19fd38d2 100644
--- a/drivers/pinctrl/pinconf-generic.c
+++ b/drivers/pinctrl/pinconf-generic.c
@@ -35,7 +35,6 @@ static const struct pin_config_item conf_items[] = {
35 PCONFDUMP(PIN_CONFIG_BIAS_PULL_PIN_DEFAULT, 35 PCONFDUMP(PIN_CONFIG_BIAS_PULL_PIN_DEFAULT,
36 "input bias pull to pin specific state", NULL, false), 36 "input bias pull to pin specific state", NULL, false),
37 PCONFDUMP(PIN_CONFIG_BIAS_PULL_UP, "input bias pull up", NULL, false), 37 PCONFDUMP(PIN_CONFIG_BIAS_PULL_UP, "input bias pull up", NULL, false),
38 PCONFDUMP(PIN_CONFIG_BIDIRECTIONAL, "bi-directional pin operations", NULL, false),
39 PCONFDUMP(PIN_CONFIG_DRIVE_OPEN_DRAIN, "output drive open drain", NULL, false), 38 PCONFDUMP(PIN_CONFIG_DRIVE_OPEN_DRAIN, "output drive open drain", NULL, false),
40 PCONFDUMP(PIN_CONFIG_DRIVE_OPEN_SOURCE, "output drive open source", NULL, false), 39 PCONFDUMP(PIN_CONFIG_DRIVE_OPEN_SOURCE, "output drive open source", NULL, false),
41 PCONFDUMP(PIN_CONFIG_DRIVE_PUSH_PULL, "output drive push pull", NULL, false), 40 PCONFDUMP(PIN_CONFIG_DRIVE_PUSH_PULL, "output drive push pull", NULL, false),
@@ -161,7 +160,6 @@ static const struct pinconf_generic_params dt_params[] = {
161 { "bias-pull-up", PIN_CONFIG_BIAS_PULL_UP, 1 }, 160 { "bias-pull-up", PIN_CONFIG_BIAS_PULL_UP, 1 },
162 { "bias-pull-pin-default", PIN_CONFIG_BIAS_PULL_PIN_DEFAULT, 1 }, 161 { "bias-pull-pin-default", PIN_CONFIG_BIAS_PULL_PIN_DEFAULT, 1 },
163 { "bias-pull-down", PIN_CONFIG_BIAS_PULL_DOWN, 1 }, 162 { "bias-pull-down", PIN_CONFIG_BIAS_PULL_DOWN, 1 },
164 { "bi-directional", PIN_CONFIG_BIDIRECTIONAL, 1 },
165 { "drive-open-drain", PIN_CONFIG_DRIVE_OPEN_DRAIN, 0 }, 163 { "drive-open-drain", PIN_CONFIG_DRIVE_OPEN_DRAIN, 0 },
166 { "drive-open-source", PIN_CONFIG_DRIVE_OPEN_SOURCE, 0 }, 164 { "drive-open-source", PIN_CONFIG_DRIVE_OPEN_SOURCE, 0 },
167 { "drive-push-pull", PIN_CONFIG_DRIVE_PUSH_PULL, 0 }, 165 { "drive-push-pull", PIN_CONFIG_DRIVE_PUSH_PULL, 0 },
@@ -174,7 +172,6 @@ static const struct pinconf_generic_params dt_params[] = {
174 { "input-schmitt-enable", PIN_CONFIG_INPUT_SCHMITT_ENABLE, 1 }, 172 { "input-schmitt-enable", PIN_CONFIG_INPUT_SCHMITT_ENABLE, 1 },
175 { "low-power-disable", PIN_CONFIG_LOW_POWER_MODE, 0 }, 173 { "low-power-disable", PIN_CONFIG_LOW_POWER_MODE, 0 },
176 { "low-power-enable", PIN_CONFIG_LOW_POWER_MODE, 1 }, 174 { "low-power-enable", PIN_CONFIG_LOW_POWER_MODE, 1 },
177 { "output-enable", PIN_CONFIG_OUTPUT, 1, },
178 { "output-high", PIN_CONFIG_OUTPUT, 1, }, 175 { "output-high", PIN_CONFIG_OUTPUT, 1, },
179 { "output-low", PIN_CONFIG_OUTPUT, 0, }, 176 { "output-low", PIN_CONFIG_OUTPUT, 0, },
180 { "power-source", PIN_CONFIG_POWER_SOURCE, 0 }, 177 { "power-source", PIN_CONFIG_POWER_SOURCE, 0 },
diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
index 1482d132fbb8..e432ec887479 100644
--- a/drivers/pinctrl/pinctrl-amd.c
+++ b/drivers/pinctrl/pinctrl-amd.c
@@ -495,64 +495,54 @@ static struct irq_chip amd_gpio_irqchip = {
495 .flags = IRQCHIP_SKIP_SET_WAKE, 495 .flags = IRQCHIP_SKIP_SET_WAKE,
496}; 496};
497 497
498static void amd_gpio_irq_handler(struct irq_desc *desc) 498#define PIN_IRQ_PENDING (BIT(INTERRUPT_STS_OFF) | BIT(WAKE_STS_OFF))
499
500static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)
499{ 501{
500 u32 i; 502 struct amd_gpio *gpio_dev = dev_id;
501 u32 off; 503 struct gpio_chip *gc = &gpio_dev->gc;
502 u32 reg; 504 irqreturn_t ret = IRQ_NONE;
503 u32 pin_reg; 505 unsigned int i, irqnr;
504 u64 reg64;
505 int handled = 0;
506 unsigned int irq;
507 unsigned long flags; 506 unsigned long flags;
508 struct irq_chip *chip = irq_desc_get_chip(desc); 507 u32 *regs, regval;
509 struct gpio_chip *gc = irq_desc_get_handler_data(desc); 508 u64 status, mask;
510 struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
511 509
512 chained_irq_enter(chip, desc); 510 /* Read the wake status */
513 /*enable GPIO interrupt again*/
514 raw_spin_lock_irqsave(&gpio_dev->lock, flags); 511 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
515 reg = readl(gpio_dev->base + WAKE_INT_STATUS_REG1); 512 status = readl(gpio_dev->base + WAKE_INT_STATUS_REG1);
516 reg64 = reg; 513 status <<= 32;
517 reg64 = reg64 << 32; 514 status |= readl(gpio_dev->base + WAKE_INT_STATUS_REG0);
518
519 reg = readl(gpio_dev->base + WAKE_INT_STATUS_REG0);
520 reg64 |= reg;
521 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); 515 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
522 516
523 /* 517 /* Bit 0-45 contain the relevant status bits */
524 * first 46 bits indicates interrupt status. 518 status &= (1ULL << 46) - 1;
525 * one bit represents four interrupt sources. 519 regs = gpio_dev->base;
526 */ 520 for (mask = 1, irqnr = 0; status; mask <<= 1, regs += 4, irqnr += 4) {
527 for (off = 0; off < 46 ; off++) { 521 if (!(status & mask))
528 if (reg64 & BIT(off)) { 522 continue;
529 for (i = 0; i < 4; i++) { 523 status &= ~mask;
530 pin_reg = readl(gpio_dev->base + 524
531 (off * 4 + i) * 4); 525 /* Each status bit covers four pins */
532 if ((pin_reg & BIT(INTERRUPT_STS_OFF)) || 526 for (i = 0; i < 4; i++) {
533 (pin_reg & BIT(WAKE_STS_OFF))) { 527 regval = readl(regs + i);
534 irq = irq_find_mapping(gc->irqdomain, 528 if (!(regval & PIN_IRQ_PENDING))
535 off * 4 + i); 529 continue;
536 generic_handle_irq(irq); 530 irq = irq_find_mapping(gc->irqdomain, irqnr + i);
537 writel(pin_reg, 531 generic_handle_irq(irq);
538 gpio_dev->base 532 /* Clear interrupt */
539 + (off * 4 + i) * 4); 533 writel(regval, regs + i);
540 handled++; 534 ret = IRQ_HANDLED;
541 }
542 }
543 } 535 }
544 } 536 }
545 537
546 if (handled == 0) 538 /* Signal EOI to the GPIO unit */
547 handle_bad_irq(desc);
548
549 raw_spin_lock_irqsave(&gpio_dev->lock, flags); 539 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
550 reg = readl(gpio_dev->base + WAKE_INT_MASTER_REG); 540 regval = readl(gpio_dev->base + WAKE_INT_MASTER_REG);
551 reg |= EOI_MASK; 541 regval |= EOI_MASK;
552 writel(reg, gpio_dev->base + WAKE_INT_MASTER_REG); 542 writel(regval, gpio_dev->base + WAKE_INT_MASTER_REG);
553 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags); 543 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
554 544
555 chained_irq_exit(chip, desc); 545 return ret;
556} 546}
557 547
558static int amd_get_groups_count(struct pinctrl_dev *pctldev) 548static int amd_get_groups_count(struct pinctrl_dev *pctldev)
@@ -821,10 +811,11 @@ static int amd_gpio_probe(struct platform_device *pdev)
821 goto out2; 811 goto out2;
822 } 812 }
823 813
824 gpiochip_set_chained_irqchip(&gpio_dev->gc, 814 ret = devm_request_irq(&pdev->dev, irq_base, amd_gpio_irq_handler, 0,
825 &amd_gpio_irqchip, 815 KBUILD_MODNAME, gpio_dev);
826 irq_base, 816 if (ret)
827 amd_gpio_irq_handler); 817 goto out2;
818
828 platform_set_drvdata(pdev, gpio_dev); 819 platform_set_drvdata(pdev, gpio_dev);
829 820
830 dev_dbg(&pdev->dev, "amd gpio driver loaded\n"); 821 dev_dbg(&pdev->dev, "amd gpio driver loaded\n");
diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index f141aa0430b1..9dd981ddbb17 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -143,9 +143,6 @@ struct rockchip_drv {
143 * @gpio_chip: gpiolib chip 143 * @gpio_chip: gpiolib chip
144 * @grange: gpio range 144 * @grange: gpio range
145 * @slock: spinlock for the gpio bank 145 * @slock: spinlock for the gpio bank
146 * @irq_lock: bus lock for irq chip
147 * @new_irqs: newly configured irqs which must be muxed as GPIOs in
148 * irq_bus_sync_unlock()
149 */ 146 */
150struct rockchip_pin_bank { 147struct rockchip_pin_bank {
151 void __iomem *reg_base; 148 void __iomem *reg_base;
@@ -168,8 +165,6 @@ struct rockchip_pin_bank {
168 struct pinctrl_gpio_range grange; 165 struct pinctrl_gpio_range grange;
169 raw_spinlock_t slock; 166 raw_spinlock_t slock;
170 u32 toggle_edge_mode; 167 u32 toggle_edge_mode;
171 struct mutex irq_lock;
172 u32 new_irqs;
173}; 168};
174 169
175#define PIN_BANK(id, pins, label) \ 170#define PIN_BANK(id, pins, label) \
@@ -2134,12 +2129,11 @@ static int rockchip_irq_set_type(struct irq_data *d, unsigned int type)
2134 int ret; 2129 int ret;
2135 2130
2136 /* make sure the pin is configured as gpio input */ 2131 /* make sure the pin is configured as gpio input */
2137 ret = rockchip_verify_mux(bank, d->hwirq, RK_FUNC_GPIO); 2132 ret = rockchip_set_mux(bank, d->hwirq, RK_FUNC_GPIO);
2138 if (ret < 0) 2133 if (ret < 0)
2139 return ret; 2134 return ret;
2140 2135
2141 bank->new_irqs |= mask; 2136 clk_enable(bank->clk);
2142
2143 raw_spin_lock_irqsave(&bank->slock, flags); 2137 raw_spin_lock_irqsave(&bank->slock, flags);
2144 2138
2145 data = readl_relaxed(bank->reg_base + GPIO_SWPORT_DDR); 2139 data = readl_relaxed(bank->reg_base + GPIO_SWPORT_DDR);
@@ -2197,6 +2191,7 @@ static int rockchip_irq_set_type(struct irq_data *d, unsigned int type)
2197 default: 2191 default:
2198 irq_gc_unlock(gc); 2192 irq_gc_unlock(gc);
2199 raw_spin_unlock_irqrestore(&bank->slock, flags); 2193 raw_spin_unlock_irqrestore(&bank->slock, flags);
2194 clk_disable(bank->clk);
2200 return -EINVAL; 2195 return -EINVAL;
2201 } 2196 }
2202 2197
@@ -2205,6 +2200,7 @@ static int rockchip_irq_set_type(struct irq_data *d, unsigned int type)
2205 2200
2206 irq_gc_unlock(gc); 2201 irq_gc_unlock(gc);
2207 raw_spin_unlock_irqrestore(&bank->slock, flags); 2202 raw_spin_unlock_irqrestore(&bank->slock, flags);
2203 clk_disable(bank->clk);
2208 2204
2209 return 0; 2205 return 0;
2210} 2206}
@@ -2248,34 +2244,6 @@ static void rockchip_irq_disable(struct irq_data *d)
2248 clk_disable(bank->clk); 2244 clk_disable(bank->clk);
2249} 2245}
2250 2246
2251static void rockchip_irq_bus_lock(struct irq_data *d)
2252{
2253 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
2254 struct rockchip_pin_bank *bank = gc->private;
2255
2256 clk_enable(bank->clk);
2257 mutex_lock(&bank->irq_lock);
2258}
2259
2260static void rockchip_irq_bus_sync_unlock(struct irq_data *d)
2261{
2262 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
2263 struct rockchip_pin_bank *bank = gc->private;
2264
2265 while (bank->new_irqs) {
2266 unsigned int irq = __ffs(bank->new_irqs);
2267 int ret;
2268
2269 ret = rockchip_set_mux(bank, irq, RK_FUNC_GPIO);
2270 WARN_ON(ret < 0);
2271
2272 bank->new_irqs &= ~BIT(irq);
2273 }
2274
2275 mutex_unlock(&bank->irq_lock);
2276 clk_disable(bank->clk);
2277}
2278
2279static int rockchip_interrupts_register(struct platform_device *pdev, 2247static int rockchip_interrupts_register(struct platform_device *pdev,
2280 struct rockchip_pinctrl *info) 2248 struct rockchip_pinctrl *info)
2281{ 2249{
@@ -2342,9 +2310,6 @@ static int rockchip_interrupts_register(struct platform_device *pdev,
2342 gc->chip_types[0].chip.irq_suspend = rockchip_irq_suspend; 2310 gc->chip_types[0].chip.irq_suspend = rockchip_irq_suspend;
2343 gc->chip_types[0].chip.irq_resume = rockchip_irq_resume; 2311 gc->chip_types[0].chip.irq_resume = rockchip_irq_resume;
2344 gc->chip_types[0].chip.irq_set_type = rockchip_irq_set_type; 2312 gc->chip_types[0].chip.irq_set_type = rockchip_irq_set_type;
2345 gc->chip_types[0].chip.irq_bus_lock = rockchip_irq_bus_lock;
2346 gc->chip_types[0].chip.irq_bus_sync_unlock =
2347 rockchip_irq_bus_sync_unlock;
2348 gc->wake_enabled = IRQ_MSK(bank->nr_pins); 2313 gc->wake_enabled = IRQ_MSK(bank->nr_pins);
2349 2314
2350 irq_set_chained_handler_and_data(bank->irq, 2315 irq_set_chained_handler_and_data(bank->irq,
@@ -2518,7 +2483,6 @@ static struct rockchip_pin_ctrl *rockchip_pinctrl_get_soc_data(
2518 int bank_pins = 0; 2483 int bank_pins = 0;
2519 2484
2520 raw_spin_lock_init(&bank->slock); 2485 raw_spin_lock_init(&bank->slock);
2521 mutex_init(&bank->irq_lock);
2522 bank->drvdata = d; 2486 bank->drvdata = d;
2523 bank->pin_base = ctrl->nr_pins; 2487 bank->pin_base = ctrl->nr_pins;
2524 ctrl->nr_pins += bank->nr_pins; 2488 ctrl->nr_pins += bank->nr_pins;
diff --git a/drivers/pinctrl/pinmux.c b/drivers/pinctrl/pinmux.c
index 9fd6d9087dc5..16b3ae5e4f44 100644
--- a/drivers/pinctrl/pinmux.c
+++ b/drivers/pinctrl/pinmux.c
@@ -826,30 +826,17 @@ EXPORT_SYMBOL_GPL(pinmux_generic_remove_function);
826 * pinmux_generic_free_functions() - removes all functions 826 * pinmux_generic_free_functions() - removes all functions
827 * @pctldev: pin controller device 827 * @pctldev: pin controller device
828 * 828 *
829 * Note that the caller must take care of locking. 829 * Note that the caller must take care of locking. The pinctrl
830 * functions are allocated with devm_kzalloc() so no need to free
831 * them here.
830 */ 832 */
831void pinmux_generic_free_functions(struct pinctrl_dev *pctldev) 833void pinmux_generic_free_functions(struct pinctrl_dev *pctldev)
832{ 834{
833 struct radix_tree_iter iter; 835 struct radix_tree_iter iter;
834 struct function_desc *function;
835 unsigned long *indices;
836 void **slot; 836 void **slot;
837 int i = 0;
838
839 indices = devm_kzalloc(pctldev->dev, sizeof(*indices) *
840 pctldev->num_functions, GFP_KERNEL);
841 if (!indices)
842 return;
843 837
844 radix_tree_for_each_slot(slot, &pctldev->pin_function_tree, &iter, 0) 838 radix_tree_for_each_slot(slot, &pctldev->pin_function_tree, &iter, 0)
845 indices[i++] = iter.index; 839 radix_tree_delete(&pctldev->pin_function_tree, iter.index);
846
847 for (i = 0; i < pctldev->num_functions; i++) {
848 function = radix_tree_lookup(&pctldev->pin_function_tree,
849 indices[i]);
850 radix_tree_delete(&pctldev->pin_function_tree, indices[i]);
851 devm_kfree(pctldev->dev, function);
852 }
853 840
854 pctldev->num_functions = 0; 841 pctldev->num_functions = 0;
855} 842}
diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c
index d3c5f5dfbbd7..222b6685b09f 100644
--- a/drivers/pinctrl/stm32/pinctrl-stm32.c
+++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
@@ -798,7 +798,7 @@ static int stm32_pconf_parse_conf(struct pinctrl_dev *pctldev,
798 break; 798 break;
799 case PIN_CONFIG_OUTPUT: 799 case PIN_CONFIG_OUTPUT:
800 __stm32_gpio_set(bank, offset, arg); 800 __stm32_gpio_set(bank, offset, arg);
801 ret = stm32_pmx_gpio_set_direction(pctldev, NULL, pin, false); 801 ret = stm32_pmx_gpio_set_direction(pctldev, range, pin, false);
802 break; 802 break;
803 default: 803 default:
804 ret = -EINVAL; 804 ret = -EINVAL;
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c b/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c
index 9aec1d2232dd..6624499eae72 100644
--- a/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c
+++ b/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c
@@ -394,7 +394,7 @@ static const struct sunxi_desc_pin sun8i_a83t_pins[] = {
394 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 18), 394 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 18),
395 SUNXI_FUNCTION(0x0, "gpio_in"), 395 SUNXI_FUNCTION(0x0, "gpio_in"),
396 SUNXI_FUNCTION(0x1, "gpio_out"), 396 SUNXI_FUNCTION(0x1, "gpio_out"),
397 SUNXI_FUNCTION(0x3, "owa")), /* DOUT */ 397 SUNXI_FUNCTION(0x3, "spdif")), /* DOUT */
398 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 19), 398 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 19),
399 SUNXI_FUNCTION(0x0, "gpio_in"), 399 SUNXI_FUNCTION(0x0, "gpio_in"),
400 SUNXI_FUNCTION(0x1, "gpio_out")), 400 SUNXI_FUNCTION(0x1, "gpio_out")),
diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/goldfish/goldfish_pipe.c
index 2de1e603bd2b..5f3672153b12 100644
--- a/drivers/platform/goldfish/goldfish_pipe.c
+++ b/drivers/platform/goldfish/goldfish_pipe.c
@@ -704,7 +704,7 @@ static int get_free_pipe_id_locked(struct goldfish_pipe_dev *dev)
704 /* Reallocate the array */ 704 /* Reallocate the array */
705 u32 new_capacity = 2 * dev->pipes_capacity; 705 u32 new_capacity = 2 * dev->pipes_capacity;
706 struct goldfish_pipe **pipes = 706 struct goldfish_pipe **pipes =
707 kcalloc(new_capacity, sizeof(*pipes), GFP_KERNEL); 707 kcalloc(new_capacity, sizeof(*pipes), GFP_ATOMIC);
708 if (!pipes) 708 if (!pipes)
709 return -ENOMEM; 709 return -ENOMEM;
710 memcpy(pipes, dev->pipes, sizeof(*pipes) * dev->pipes_capacity); 710 memcpy(pipes, dev->pipes, sizeof(*pipes) * dev->pipes_capacity);
diff --git a/drivers/platform/x86/intel_telemetry_debugfs.c b/drivers/platform/x86/intel_telemetry_debugfs.c
index ef29f18b1951..4cc2f4ea0a25 100644
--- a/drivers/platform/x86/intel_telemetry_debugfs.c
+++ b/drivers/platform/x86/intel_telemetry_debugfs.c
@@ -97,11 +97,9 @@
97 } \ 97 } \
98} 98}
99 99
100#ifdef CONFIG_PM_SLEEP
101static u8 suspend_prep_ok; 100static u8 suspend_prep_ok;
102static u32 suspend_shlw_ctr_temp, suspend_deep_ctr_temp; 101static u32 suspend_shlw_ctr_temp, suspend_deep_ctr_temp;
103static u64 suspend_shlw_res_temp, suspend_deep_res_temp; 102static u64 suspend_shlw_res_temp, suspend_deep_res_temp;
104#endif
105 103
106struct telemetry_susp_stats { 104struct telemetry_susp_stats {
107 u32 shlw_swake_ctr; 105 u32 shlw_swake_ctr;
@@ -807,7 +805,6 @@ static const struct file_operations telem_ioss_trc_verb_ops = {
807 .release = single_release, 805 .release = single_release,
808}; 806};
809 807
810#ifdef CONFIG_PM_SLEEP
811static int pm_suspend_prep_cb(void) 808static int pm_suspend_prep_cb(void)
812{ 809{
813 struct telemetry_evtlog evtlog[TELEM_MAX_OS_ALLOCATED_EVENTS]; 810 struct telemetry_evtlog evtlog[TELEM_MAX_OS_ALLOCATED_EVENTS];
@@ -937,7 +934,6 @@ static int pm_notification(struct notifier_block *this,
937static struct notifier_block pm_notifier = { 934static struct notifier_block pm_notifier = {
938 .notifier_call = pm_notification, 935 .notifier_call = pm_notification,
939}; 936};
940#endif /* CONFIG_PM_SLEEP */
941 937
942static int __init telemetry_debugfs_init(void) 938static int __init telemetry_debugfs_init(void)
943{ 939{
@@ -960,14 +956,13 @@ static int __init telemetry_debugfs_init(void)
960 if (err < 0) 956 if (err < 0)
961 return -EINVAL; 957 return -EINVAL;
962 958
963
964#ifdef CONFIG_PM_SLEEP
965 register_pm_notifier(&pm_notifier); 959 register_pm_notifier(&pm_notifier);
966#endif /* CONFIG_PM_SLEEP */
967 960
968 debugfs_conf->telemetry_dbg_dir = debugfs_create_dir("telemetry", NULL); 961 debugfs_conf->telemetry_dbg_dir = debugfs_create_dir("telemetry", NULL);
969 if (!debugfs_conf->telemetry_dbg_dir) 962 if (!debugfs_conf->telemetry_dbg_dir) {
970 return -ENOMEM; 963 err = -ENOMEM;
964 goto out_pm;
965 }
971 966
972 f = debugfs_create_file("pss_info", S_IFREG | S_IRUGO, 967 f = debugfs_create_file("pss_info", S_IFREG | S_IRUGO,
973 debugfs_conf->telemetry_dbg_dir, NULL, 968 debugfs_conf->telemetry_dbg_dir, NULL,
@@ -1014,6 +1009,8 @@ static int __init telemetry_debugfs_init(void)
1014out: 1009out:
1015 debugfs_remove_recursive(debugfs_conf->telemetry_dbg_dir); 1010 debugfs_remove_recursive(debugfs_conf->telemetry_dbg_dir);
1016 debugfs_conf->telemetry_dbg_dir = NULL; 1011 debugfs_conf->telemetry_dbg_dir = NULL;
1012out_pm:
1013 unregister_pm_notifier(&pm_notifier);
1017 1014
1018 return err; 1015 return err;
1019} 1016}
@@ -1022,6 +1019,7 @@ static void __exit telemetry_debugfs_exit(void)
1022{ 1019{
1023 debugfs_remove_recursive(debugfs_conf->telemetry_dbg_dir); 1020 debugfs_remove_recursive(debugfs_conf->telemetry_dbg_dir);
1024 debugfs_conf->telemetry_dbg_dir = NULL; 1021 debugfs_conf->telemetry_dbg_dir = NULL;
1022 unregister_pm_notifier(&pm_notifier);
1025} 1023}
1026 1024
1027late_initcall(telemetry_debugfs_init); 1025late_initcall(telemetry_debugfs_init);
diff --git a/drivers/powercap/powercap_sys.c b/drivers/powercap/powercap_sys.c
index 14bde0db8c24..5b10b50f8686 100644
--- a/drivers/powercap/powercap_sys.c
+++ b/drivers/powercap/powercap_sys.c
@@ -538,6 +538,7 @@ struct powercap_zone *powercap_register_zone(
538 538
539 power_zone->id = result; 539 power_zone->id = result;
540 idr_init(&power_zone->idr); 540 idr_init(&power_zone->idr);
541 result = -ENOMEM;
541 power_zone->name = kstrdup(name, GFP_KERNEL); 542 power_zone->name = kstrdup(name, GFP_KERNEL);
542 if (!power_zone->name) 543 if (!power_zone->name)
543 goto err_name_alloc; 544 goto err_name_alloc;
diff --git a/drivers/reset/hisilicon/hi6220_reset.c b/drivers/reset/hisilicon/hi6220_reset.c
index 35ce53edabf9..d5e5229308f2 100644
--- a/drivers/reset/hisilicon/hi6220_reset.c
+++ b/drivers/reset/hisilicon/hi6220_reset.c
@@ -155,3 +155,5 @@ static int __init hi6220_reset_init(void)
155} 155}
156 156
157postcore_initcall(hi6220_reset_init); 157postcore_initcall(hi6220_reset_init);
158
159MODULE_LICENSE("GPL v2");
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
index b3de973a6260..9dca53df3584 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -1088,7 +1088,7 @@ static u32 rtc_handler(void *context)
1088 } 1088 }
1089 spin_unlock_irqrestore(&rtc_lock, flags); 1089 spin_unlock_irqrestore(&rtc_lock, flags);
1090 1090
1091 pm_wakeup_event(dev, 0); 1091 pm_wakeup_hard_event(dev);
1092 acpi_clear_event(ACPI_EVENT_RTC); 1092 acpi_clear_event(ACPI_EVENT_RTC);
1093 acpi_disable_event(ACPI_EVENT_RTC, 0); 1093 acpi_disable_event(ACPI_EVENT_RTC, 0);
1094 return ACPI_INTERRUPT_HANDLED; 1094 return ACPI_INTERRUPT_HANDLED;
diff --git a/drivers/s390/cio/vfio_ccw_ops.c b/drivers/s390/cio/vfio_ccw_ops.c
index e72abbc18ee3..a66a317f3e4f 100644
--- a/drivers/s390/cio/vfio_ccw_ops.c
+++ b/drivers/s390/cio/vfio_ccw_ops.c
@@ -70,14 +70,14 @@ static ssize_t name_show(struct kobject *kobj, struct device *dev, char *buf)
70{ 70{
71 return sprintf(buf, "I/O subchannel (Non-QDIO)\n"); 71 return sprintf(buf, "I/O subchannel (Non-QDIO)\n");
72} 72}
73MDEV_TYPE_ATTR_RO(name); 73static MDEV_TYPE_ATTR_RO(name);
74 74
75static ssize_t device_api_show(struct kobject *kobj, struct device *dev, 75static ssize_t device_api_show(struct kobject *kobj, struct device *dev,
76 char *buf) 76 char *buf)
77{ 77{
78 return sprintf(buf, "%s\n", VFIO_DEVICE_API_CCW_STRING); 78 return sprintf(buf, "%s\n", VFIO_DEVICE_API_CCW_STRING);
79} 79}
80MDEV_TYPE_ATTR_RO(device_api); 80static MDEV_TYPE_ATTR_RO(device_api);
81 81
82static ssize_t available_instances_show(struct kobject *kobj, 82static ssize_t available_instances_show(struct kobject *kobj,
83 struct device *dev, char *buf) 83 struct device *dev, char *buf)
@@ -86,7 +86,7 @@ static ssize_t available_instances_show(struct kobject *kobj,
86 86
87 return sprintf(buf, "%d\n", atomic_read(&private->avail)); 87 return sprintf(buf, "%d\n", atomic_read(&private->avail));
88} 88}
89MDEV_TYPE_ATTR_RO(available_instances); 89static MDEV_TYPE_ATTR_RO(available_instances);
90 90
91static struct attribute *mdev_types_attrs[] = { 91static struct attribute *mdev_types_attrs[] = {
92 &mdev_type_attr_name.attr, 92 &mdev_type_attr_name.attr,
@@ -100,7 +100,7 @@ static struct attribute_group mdev_type_group = {
100 .attrs = mdev_types_attrs, 100 .attrs = mdev_types_attrs,
101}; 101};
102 102
103struct attribute_group *mdev_type_groups[] = { 103static struct attribute_group *mdev_type_groups[] = {
104 &mdev_type_group, 104 &mdev_type_group,
105 NULL, 105 NULL,
106}; 106};
@@ -152,7 +152,7 @@ static int vfio_ccw_mdev_open(struct mdev_device *mdev)
152 &events, &private->nb); 152 &events, &private->nb);
153} 153}
154 154
155void vfio_ccw_mdev_release(struct mdev_device *mdev) 155static void vfio_ccw_mdev_release(struct mdev_device *mdev)
156{ 156{
157 struct vfio_ccw_private *private = 157 struct vfio_ccw_private *private =
158 dev_get_drvdata(mdev_parent_dev(mdev)); 158 dev_get_drvdata(mdev_parent_dev(mdev));
@@ -233,7 +233,7 @@ static int vfio_ccw_mdev_get_region_info(struct vfio_region_info *info,
233 } 233 }
234} 234}
235 235
236int vfio_ccw_mdev_get_irq_info(struct vfio_irq_info *info) 236static int vfio_ccw_mdev_get_irq_info(struct vfio_irq_info *info)
237{ 237{
238 if (info->index != VFIO_CCW_IO_IRQ_INDEX) 238 if (info->index != VFIO_CCW_IO_IRQ_INDEX)
239 return -EINVAL; 239 return -EINVAL;
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
index 9be4596d8a08..ea099910b4e9 100644
--- a/drivers/s390/crypto/ap_bus.c
+++ b/drivers/s390/crypto/ap_bus.c
@@ -668,10 +668,28 @@ static int ap_device_probe(struct device *dev)
668 struct ap_driver *ap_drv = to_ap_drv(dev->driver); 668 struct ap_driver *ap_drv = to_ap_drv(dev->driver);
669 int rc; 669 int rc;
670 670
671 /* Add queue/card to list of active queues/cards */
672 spin_lock_bh(&ap_list_lock);
673 if (is_card_dev(dev))
674 list_add(&to_ap_card(dev)->list, &ap_card_list);
675 else
676 list_add(&to_ap_queue(dev)->list,
677 &to_ap_queue(dev)->card->queues);
678 spin_unlock_bh(&ap_list_lock);
679
671 ap_dev->drv = ap_drv; 680 ap_dev->drv = ap_drv;
672 rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV; 681 rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
673 if (rc) 682
683 if (rc) {
684 spin_lock_bh(&ap_list_lock);
685 if (is_card_dev(dev))
686 list_del_init(&to_ap_card(dev)->list);
687 else
688 list_del_init(&to_ap_queue(dev)->list);
689 spin_unlock_bh(&ap_list_lock);
674 ap_dev->drv = NULL; 690 ap_dev->drv = NULL;
691 }
692
675 return rc; 693 return rc;
676} 694}
677 695
@@ -680,14 +698,17 @@ static int ap_device_remove(struct device *dev)
680 struct ap_device *ap_dev = to_ap_dev(dev); 698 struct ap_device *ap_dev = to_ap_dev(dev);
681 struct ap_driver *ap_drv = ap_dev->drv; 699 struct ap_driver *ap_drv = ap_dev->drv;
682 700
701 if (ap_drv->remove)
702 ap_drv->remove(ap_dev);
703
704 /* Remove queue/card from list of active queues/cards */
683 spin_lock_bh(&ap_list_lock); 705 spin_lock_bh(&ap_list_lock);
684 if (is_card_dev(dev)) 706 if (is_card_dev(dev))
685 list_del_init(&to_ap_card(dev)->list); 707 list_del_init(&to_ap_card(dev)->list);
686 else 708 else
687 list_del_init(&to_ap_queue(dev)->list); 709 list_del_init(&to_ap_queue(dev)->list);
688 spin_unlock_bh(&ap_list_lock); 710 spin_unlock_bh(&ap_list_lock);
689 if (ap_drv->remove) 711
690 ap_drv->remove(ap_dev);
691 return 0; 712 return 0;
692} 713}
693 714
@@ -1056,10 +1077,6 @@ static void ap_scan_bus(struct work_struct *unused)
1056 } 1077 }
1057 /* get it and thus adjust reference counter */ 1078 /* get it and thus adjust reference counter */
1058 get_device(&ac->ap_dev.device); 1079 get_device(&ac->ap_dev.device);
1059 /* Add card device to card list */
1060 spin_lock_bh(&ap_list_lock);
1061 list_add(&ac->list, &ap_card_list);
1062 spin_unlock_bh(&ap_list_lock);
1063 } 1080 }
1064 /* now create the new queue device */ 1081 /* now create the new queue device */
1065 aq = ap_queue_create(qid, type); 1082 aq = ap_queue_create(qid, type);
@@ -1070,10 +1087,6 @@ static void ap_scan_bus(struct work_struct *unused)
1070 aq->ap_dev.device.parent = &ac->ap_dev.device; 1087 aq->ap_dev.device.parent = &ac->ap_dev.device;
1071 dev_set_name(&aq->ap_dev.device, 1088 dev_set_name(&aq->ap_dev.device,
1072 "%02x.%04x", id, dom); 1089 "%02x.%04x", id, dom);
1073 /* Add queue device to card queue list */
1074 spin_lock_bh(&ap_list_lock);
1075 list_add(&aq->list, &ac->queues);
1076 spin_unlock_bh(&ap_list_lock);
1077 /* Start with a device reset */ 1090 /* Start with a device reset */
1078 spin_lock_bh(&aq->lock); 1091 spin_lock_bh(&aq->lock);
1079 ap_wait(ap_sm_event(aq, AP_EVENT_POLL)); 1092 ap_wait(ap_sm_event(aq, AP_EVENT_POLL));
@@ -1081,9 +1094,6 @@ static void ap_scan_bus(struct work_struct *unused)
1081 /* Register device */ 1094 /* Register device */
1082 rc = device_register(&aq->ap_dev.device); 1095 rc = device_register(&aq->ap_dev.device);
1083 if (rc) { 1096 if (rc) {
1084 spin_lock_bh(&ap_list_lock);
1085 list_del_init(&aq->list);
1086 spin_unlock_bh(&ap_list_lock);
1087 put_device(&aq->ap_dev.device); 1097 put_device(&aq->ap_dev.device);
1088 continue; 1098 continue;
1089 } 1099 }
diff --git a/drivers/s390/crypto/ap_card.c b/drivers/s390/crypto/ap_card.c
index cfa161ccc74e..836efac96813 100644
--- a/drivers/s390/crypto/ap_card.c
+++ b/drivers/s390/crypto/ap_card.c
@@ -160,7 +160,14 @@ static struct device_type ap_card_type = {
160 160
161static void ap_card_device_release(struct device *dev) 161static void ap_card_device_release(struct device *dev)
162{ 162{
163 kfree(to_ap_card(dev)); 163 struct ap_card *ac = to_ap_card(dev);
164
165 if (!list_empty(&ac->list)) {
166 spin_lock_bh(&ap_list_lock);
167 list_del_init(&ac->list);
168 spin_unlock_bh(&ap_list_lock);
169 }
170 kfree(ac);
164} 171}
165 172
166struct ap_card *ap_card_create(int id, int queue_depth, int device_type, 173struct ap_card *ap_card_create(int id, int queue_depth, int device_type,
diff --git a/drivers/s390/crypto/ap_queue.c b/drivers/s390/crypto/ap_queue.c
index 480c58a63769..0f1a5d02acb0 100644
--- a/drivers/s390/crypto/ap_queue.c
+++ b/drivers/s390/crypto/ap_queue.c
@@ -584,7 +584,14 @@ static struct device_type ap_queue_type = {
584 584
585static void ap_queue_device_release(struct device *dev) 585static void ap_queue_device_release(struct device *dev)
586{ 586{
587 kfree(to_ap_queue(dev)); 587 struct ap_queue *aq = to_ap_queue(dev);
588
589 if (!list_empty(&aq->list)) {
590 spin_lock_bh(&ap_list_lock);
591 list_del_init(&aq->list);
592 spin_unlock_bh(&ap_list_lock);
593 }
594 kfree(aq);
588} 595}
589 596
590struct ap_queue *ap_queue_create(ap_qid_t qid, int device_type) 597struct ap_queue *ap_queue_create(ap_qid_t qid, int device_type)
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c
index dba94b486f05..fa732bd86729 100644
--- a/drivers/s390/net/netiucv.c
+++ b/drivers/s390/net/netiucv.c
@@ -1954,7 +1954,6 @@ static void netiucv_free_netdevice(struct net_device *dev)
1954 privptr->conn = NULL; privptr->fsm = NULL; 1954 privptr->conn = NULL; privptr->fsm = NULL;
1955 /* privptr gets freed by free_netdev() */ 1955 /* privptr gets freed by free_netdev() */
1956 } 1956 }
1957 free_netdev(dev);
1958} 1957}
1959 1958
1960/** 1959/**
@@ -1972,7 +1971,8 @@ static void netiucv_setup_netdevice(struct net_device *dev)
1972 dev->mtu = NETIUCV_MTU_DEFAULT; 1971 dev->mtu = NETIUCV_MTU_DEFAULT;
1973 dev->min_mtu = 576; 1972 dev->min_mtu = 576;
1974 dev->max_mtu = NETIUCV_MTU_MAX; 1973 dev->max_mtu = NETIUCV_MTU_MAX;
1975 dev->destructor = netiucv_free_netdevice; 1974 dev->needs_free_netdev = true;
1975 dev->priv_destructor = netiucv_free_netdevice;
1976 dev->hard_header_len = NETIUCV_HDRLEN; 1976 dev->hard_header_len = NETIUCV_HDRLEN;
1977 dev->addr_len = 0; 1977 dev->addr_len = 0;
1978 dev->type = ARPHRD_SLIP; 1978 dev->type = ARPHRD_SLIP;
diff --git a/drivers/scsi/bnx2fc/bnx2fc.h b/drivers/scsi/bnx2fc/bnx2fc.h
index 4fc8ed5fe067..1f424e40afdf 100644
--- a/drivers/scsi/bnx2fc/bnx2fc.h
+++ b/drivers/scsi/bnx2fc/bnx2fc.h
@@ -191,6 +191,7 @@ struct bnx2fc_hba {
191 struct bnx2fc_cmd_mgr *cmd_mgr; 191 struct bnx2fc_cmd_mgr *cmd_mgr;
192 spinlock_t hba_lock; 192 spinlock_t hba_lock;
193 struct mutex hba_mutex; 193 struct mutex hba_mutex;
194 struct mutex hba_stats_mutex;
194 unsigned long adapter_state; 195 unsigned long adapter_state;
195 #define ADAPTER_STATE_UP 0 196 #define ADAPTER_STATE_UP 0
196 #define ADAPTER_STATE_GOING_DOWN 1 197 #define ADAPTER_STATE_GOING_DOWN 1
diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
index 93b5a0012417..902722dc4ce3 100644
--- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
+++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
@@ -663,15 +663,17 @@ static struct fc_host_statistics *bnx2fc_get_host_stats(struct Scsi_Host *shost)
663 if (!fw_stats) 663 if (!fw_stats)
664 return NULL; 664 return NULL;
665 665
666 mutex_lock(&hba->hba_stats_mutex);
667
666 bnx2fc_stats = fc_get_host_stats(shost); 668 bnx2fc_stats = fc_get_host_stats(shost);
667 669
668 init_completion(&hba->stat_req_done); 670 init_completion(&hba->stat_req_done);
669 if (bnx2fc_send_stat_req(hba)) 671 if (bnx2fc_send_stat_req(hba))
670 return bnx2fc_stats; 672 goto unlock_stats_mutex;
671 rc = wait_for_completion_timeout(&hba->stat_req_done, (2 * HZ)); 673 rc = wait_for_completion_timeout(&hba->stat_req_done, (2 * HZ));
672 if (!rc) { 674 if (!rc) {
673 BNX2FC_HBA_DBG(lport, "FW stat req timed out\n"); 675 BNX2FC_HBA_DBG(lport, "FW stat req timed out\n");
674 return bnx2fc_stats; 676 goto unlock_stats_mutex;
675 } 677 }
676 BNX2FC_STATS(hba, rx_stat2, fc_crc_cnt); 678 BNX2FC_STATS(hba, rx_stat2, fc_crc_cnt);
677 bnx2fc_stats->invalid_crc_count += hba->bfw_stats.fc_crc_cnt; 679 bnx2fc_stats->invalid_crc_count += hba->bfw_stats.fc_crc_cnt;
@@ -693,6 +695,9 @@ static struct fc_host_statistics *bnx2fc_get_host_stats(struct Scsi_Host *shost)
693 695
694 memcpy(&hba->prev_stats, hba->stats_buffer, 696 memcpy(&hba->prev_stats, hba->stats_buffer,
695 sizeof(struct fcoe_statistics_params)); 697 sizeof(struct fcoe_statistics_params));
698
699unlock_stats_mutex:
700 mutex_unlock(&hba->hba_stats_mutex);
696 return bnx2fc_stats; 701 return bnx2fc_stats;
697} 702}
698 703
@@ -1340,6 +1345,7 @@ static struct bnx2fc_hba *bnx2fc_hba_create(struct cnic_dev *cnic)
1340 } 1345 }
1341 spin_lock_init(&hba->hba_lock); 1346 spin_lock_init(&hba->hba_lock);
1342 mutex_init(&hba->hba_mutex); 1347 mutex_init(&hba->hba_mutex);
1348 mutex_init(&hba->hba_stats_mutex);
1343 1349
1344 hba->cnic = cnic; 1350 hba->cnic = cnic;
1345 1351
diff --git a/drivers/scsi/csiostor/csio_hw.c b/drivers/scsi/csiostor/csio_hw.c
index 622bdabc8894..dab195f04da7 100644
--- a/drivers/scsi/csiostor/csio_hw.c
+++ b/drivers/scsi/csiostor/csio_hw.c
@@ -1769,7 +1769,6 @@ csio_hw_use_fwconfig(struct csio_hw *hw, int reset, u32 *fw_cfg_param)
1769 goto bye; 1769 goto bye;
1770 } 1770 }
1771 1771
1772 mempool_free(mbp, hw->mb_mempool);
1773 if (finicsum != cfcsum) { 1772 if (finicsum != cfcsum) {
1774 csio_warn(hw, 1773 csio_warn(hw,
1775 "Config File checksum mismatch: csum=%#x, computed=%#x\n", 1774 "Config File checksum mismatch: csum=%#x, computed=%#x\n",
@@ -1780,6 +1779,10 @@ csio_hw_use_fwconfig(struct csio_hw *hw, int reset, u32 *fw_cfg_param)
1780 rv = csio_hw_validate_caps(hw, mbp); 1779 rv = csio_hw_validate_caps(hw, mbp);
1781 if (rv != 0) 1780 if (rv != 0)
1782 goto bye; 1781 goto bye;
1782
1783 mempool_free(mbp, hw->mb_mempool);
1784 mbp = NULL;
1785
1783 /* 1786 /*
1784 * Note that we're operating with parameters 1787 * Note that we're operating with parameters
1785 * not supplied by the driver, rather than from hard-wired 1788 * not supplied by the driver, rather than from hard-wired
diff --git a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
index 1076c1578322..0aae094ab91c 100644
--- a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
+++ b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
@@ -1595,7 +1595,6 @@ static void release_offload_resources(struct cxgbi_sock *csk)
1595 cxgbi_sock_put(csk); 1595 cxgbi_sock_put(csk);
1596 } 1596 }
1597 csk->dst = NULL; 1597 csk->dst = NULL;
1598 csk->cdev = NULL;
1599} 1598}
1600 1599
1601static int init_act_open(struct cxgbi_sock *csk) 1600static int init_act_open(struct cxgbi_sock *csk)
diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c
index bd7d39ecbd24..e4c83b7c96a8 100644
--- a/drivers/scsi/cxgbi/libcxgbi.c
+++ b/drivers/scsi/cxgbi/libcxgbi.c
@@ -867,7 +867,8 @@ static void need_active_close(struct cxgbi_sock *csk)
867 log_debug(1 << CXGBI_DBG_SOCK, "csk 0x%p,%u,0x%lx,%u.\n", 867 log_debug(1 << CXGBI_DBG_SOCK, "csk 0x%p,%u,0x%lx,%u.\n",
868 csk, (csk)->state, (csk)->flags, (csk)->tid); 868 csk, (csk)->state, (csk)->flags, (csk)->tid);
869 spin_lock_bh(&csk->lock); 869 spin_lock_bh(&csk->lock);
870 dst_confirm(csk->dst); 870 if (csk->dst)
871 dst_confirm(csk->dst);
871 data_lost = skb_queue_len(&csk->receive_queue); 872 data_lost = skb_queue_len(&csk->receive_queue);
872 __skb_queue_purge(&csk->receive_queue); 873 __skb_queue_purge(&csk->receive_queue);
873 874
@@ -882,7 +883,8 @@ static void need_active_close(struct cxgbi_sock *csk)
882 } 883 }
883 884
884 if (close_req) { 885 if (close_req) {
885 if (data_lost) 886 if (!cxgbi_sock_flag(csk, CTPF_LOGOUT_RSP_RCVD) ||
887 data_lost)
886 csk->cdev->csk_send_abort_req(csk); 888 csk->cdev->csk_send_abort_req(csk);
887 else 889 else
888 csk->cdev->csk_send_close_req(csk); 890 csk->cdev->csk_send_close_req(csk);
@@ -1186,9 +1188,10 @@ static int cxgbi_sock_send_pdus(struct cxgbi_sock *csk, struct sk_buff *skb)
1186 cxgbi_ulp_extra_len(cxgbi_skcb_ulp_mode(skb)); 1188 cxgbi_ulp_extra_len(cxgbi_skcb_ulp_mode(skb));
1187 skb = next; 1189 skb = next;
1188 } 1190 }
1189done: 1191
1190 if (likely(skb_queue_len(&csk->write_queue))) 1192 if (likely(skb_queue_len(&csk->write_queue)))
1191 cdev->csk_push_tx_frames(csk, 1); 1193 cdev->csk_push_tx_frames(csk, 1);
1194done:
1192 spin_unlock_bh(&csk->lock); 1195 spin_unlock_bh(&csk->lock);
1193 return copied; 1196 return copied;
1194 1197
@@ -1568,9 +1571,12 @@ static inline int read_pdu_skb(struct iscsi_conn *conn,
1568 } 1571 }
1569} 1572}
1570 1573
1571static int skb_read_pdu_bhs(struct iscsi_conn *conn, struct sk_buff *skb) 1574static int
1575skb_read_pdu_bhs(struct cxgbi_sock *csk, struct iscsi_conn *conn,
1576 struct sk_buff *skb)
1572{ 1577{
1573 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; 1578 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1579 int err;
1574 1580
1575 log_debug(1 << CXGBI_DBG_PDU_RX, 1581 log_debug(1 << CXGBI_DBG_PDU_RX,
1576 "conn 0x%p, skb 0x%p, len %u, flag 0x%lx.\n", 1582 "conn 0x%p, skb 0x%p, len %u, flag 0x%lx.\n",
@@ -1608,7 +1614,16 @@ static int skb_read_pdu_bhs(struct iscsi_conn *conn, struct sk_buff *skb)
1608 } 1614 }
1609 } 1615 }
1610 1616
1611 return read_pdu_skb(conn, skb, 0, 0); 1617 err = read_pdu_skb(conn, skb, 0, 0);
1618 if (likely(err >= 0)) {
1619 struct iscsi_hdr *hdr = (struct iscsi_hdr *)skb->data;
1620 u8 opcode = hdr->opcode & ISCSI_OPCODE_MASK;
1621
1622 if (unlikely(opcode == ISCSI_OP_LOGOUT_RSP))
1623 cxgbi_sock_set_flag(csk, CTPF_LOGOUT_RSP_RCVD);
1624 }
1625
1626 return err;
1612} 1627}
1613 1628
1614static int skb_read_pdu_data(struct iscsi_conn *conn, struct sk_buff *lskb, 1629static int skb_read_pdu_data(struct iscsi_conn *conn, struct sk_buff *lskb,
@@ -1713,7 +1728,7 @@ void cxgbi_conn_pdu_ready(struct cxgbi_sock *csk)
1713 cxgbi_skcb_rx_pdulen(skb)); 1728 cxgbi_skcb_rx_pdulen(skb));
1714 1729
1715 if (cxgbi_skcb_test_flag(skb, SKCBF_RX_COALESCED)) { 1730 if (cxgbi_skcb_test_flag(skb, SKCBF_RX_COALESCED)) {
1716 err = skb_read_pdu_bhs(conn, skb); 1731 err = skb_read_pdu_bhs(csk, conn, skb);
1717 if (err < 0) { 1732 if (err < 0) {
1718 pr_err("coalesced bhs, csk 0x%p, skb 0x%p,%u, " 1733 pr_err("coalesced bhs, csk 0x%p, skb 0x%p,%u, "
1719 "f 0x%lx, plen %u.\n", 1734 "f 0x%lx, plen %u.\n",
@@ -1731,7 +1746,7 @@ void cxgbi_conn_pdu_ready(struct cxgbi_sock *csk)
1731 cxgbi_skcb_flags(skb), 1746 cxgbi_skcb_flags(skb),
1732 cxgbi_skcb_rx_pdulen(skb)); 1747 cxgbi_skcb_rx_pdulen(skb));
1733 } else { 1748 } else {
1734 err = skb_read_pdu_bhs(conn, skb); 1749 err = skb_read_pdu_bhs(csk, conn, skb);
1735 if (err < 0) { 1750 if (err < 0) {
1736 pr_err("bhs, csk 0x%p, skb 0x%p,%u, " 1751 pr_err("bhs, csk 0x%p, skb 0x%p,%u, "
1737 "f 0x%lx, plen %u.\n", 1752 "f 0x%lx, plen %u.\n",
@@ -1873,6 +1888,11 @@ int cxgbi_conn_alloc_pdu(struct iscsi_task *task, u8 opcode)
1873 tcp_task->dd_data = tdata; 1888 tcp_task->dd_data = tdata;
1874 task->hdr = NULL; 1889 task->hdr = NULL;
1875 1890
1891 if (tdata->skb) {
1892 kfree_skb(tdata->skb);
1893 tdata->skb = NULL;
1894 }
1895
1876 if (SKB_MAX_HEAD(cdev->skb_tx_rsvd) > (512 * MAX_SKB_FRAGS) && 1896 if (SKB_MAX_HEAD(cdev->skb_tx_rsvd) > (512 * MAX_SKB_FRAGS) &&
1877 (opcode == ISCSI_OP_SCSI_DATA_OUT || 1897 (opcode == ISCSI_OP_SCSI_DATA_OUT ||
1878 (opcode == ISCSI_OP_SCSI_CMD && 1898 (opcode == ISCSI_OP_SCSI_CMD &&
@@ -1890,6 +1910,7 @@ int cxgbi_conn_alloc_pdu(struct iscsi_task *task, u8 opcode)
1890 return -ENOMEM; 1910 return -ENOMEM;
1891 } 1911 }
1892 1912
1913 skb_get(tdata->skb);
1893 skb_reserve(tdata->skb, cdev->skb_tx_rsvd); 1914 skb_reserve(tdata->skb, cdev->skb_tx_rsvd);
1894 task->hdr = (struct iscsi_hdr *)tdata->skb->data; 1915 task->hdr = (struct iscsi_hdr *)tdata->skb->data;
1895 task->hdr_max = SKB_TX_ISCSI_PDU_HEADER_MAX; /* BHS + AHS */ 1916 task->hdr_max = SKB_TX_ISCSI_PDU_HEADER_MAX; /* BHS + AHS */
@@ -2035,9 +2056,9 @@ int cxgbi_conn_xmit_pdu(struct iscsi_task *task)
2035 unsigned int datalen; 2056 unsigned int datalen;
2036 int err; 2057 int err;
2037 2058
2038 if (!skb) { 2059 if (!skb || cxgbi_skcb_test_flag(skb, SKCBF_TX_DONE)) {
2039 log_debug(1 << CXGBI_DBG_ISCSI | 1 << CXGBI_DBG_PDU_TX, 2060 log_debug(1 << CXGBI_DBG_ISCSI | 1 << CXGBI_DBG_PDU_TX,
2040 "task 0x%p, skb NULL.\n", task); 2061 "task 0x%p, skb 0x%p\n", task, skb);
2041 return 0; 2062 return 0;
2042 } 2063 }
2043 2064
@@ -2050,7 +2071,6 @@ int cxgbi_conn_xmit_pdu(struct iscsi_task *task)
2050 } 2071 }
2051 2072
2052 datalen = skb->data_len; 2073 datalen = skb->data_len;
2053 tdata->skb = NULL;
2054 2074
2055 /* write ppod first if using ofldq to write ppod */ 2075 /* write ppod first if using ofldq to write ppod */
2056 if (ttinfo->flags & CXGBI_PPOD_INFO_FLAG_VALID) { 2076 if (ttinfo->flags & CXGBI_PPOD_INFO_FLAG_VALID) {
@@ -2078,6 +2098,7 @@ int cxgbi_conn_xmit_pdu(struct iscsi_task *task)
2078 pdulen += ISCSI_DIGEST_SIZE; 2098 pdulen += ISCSI_DIGEST_SIZE;
2079 2099
2080 task->conn->txdata_octets += pdulen; 2100 task->conn->txdata_octets += pdulen;
2101 cxgbi_skcb_set_flag(skb, SKCBF_TX_DONE);
2081 return 0; 2102 return 0;
2082 } 2103 }
2083 2104
@@ -2086,7 +2107,6 @@ int cxgbi_conn_xmit_pdu(struct iscsi_task *task)
2086 "task 0x%p, skb 0x%p, len %u/%u, %d EAGAIN.\n", 2107 "task 0x%p, skb 0x%p, len %u/%u, %d EAGAIN.\n",
2087 task, skb, skb->len, skb->data_len, err); 2108 task, skb, skb->len, skb->data_len, err);
2088 /* reset skb to send when we are called again */ 2109 /* reset skb to send when we are called again */
2089 tdata->skb = skb;
2090 return err; 2110 return err;
2091 } 2111 }
2092 2112
@@ -2094,7 +2114,8 @@ int cxgbi_conn_xmit_pdu(struct iscsi_task *task)
2094 "itt 0x%x, skb 0x%p, len %u/%u, xmit err %d.\n", 2114 "itt 0x%x, skb 0x%p, len %u/%u, xmit err %d.\n",
2095 task->itt, skb, skb->len, skb->data_len, err); 2115 task->itt, skb, skb->len, skb->data_len, err);
2096 2116
2097 kfree_skb(skb); 2117 __kfree_skb(tdata->skb);
2118 tdata->skb = NULL;
2098 2119
2099 iscsi_conn_printk(KERN_ERR, task->conn, "xmit err %d.\n", err); 2120 iscsi_conn_printk(KERN_ERR, task->conn, "xmit err %d.\n", err);
2100 iscsi_conn_failure(task->conn, ISCSI_ERR_XMIT_FAILED); 2121 iscsi_conn_failure(task->conn, ISCSI_ERR_XMIT_FAILED);
@@ -2113,8 +2134,10 @@ void cxgbi_cleanup_task(struct iscsi_task *task)
2113 2134
2114 tcp_task->dd_data = NULL; 2135 tcp_task->dd_data = NULL;
2115 /* never reached the xmit task callout */ 2136 /* never reached the xmit task callout */
2116 if (tdata->skb) 2137 if (tdata->skb) {
2117 __kfree_skb(tdata->skb); 2138 kfree_skb(tdata->skb);
2139 tdata->skb = NULL;
2140 }
2118 2141
2119 task_release_itt(task, task->hdr_itt); 2142 task_release_itt(task, task->hdr_itt);
2120 memset(tdata, 0, sizeof(*tdata)); 2143 memset(tdata, 0, sizeof(*tdata));
@@ -2714,6 +2737,9 @@ EXPORT_SYMBOL_GPL(cxgbi_attr_is_visible);
2714static int __init libcxgbi_init_module(void) 2737static int __init libcxgbi_init_module(void)
2715{ 2738{
2716 pr_info("%s", version); 2739 pr_info("%s", version);
2740
2741 BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, cb) <
2742 sizeof(struct cxgbi_skb_cb));
2717 return 0; 2743 return 0;
2718} 2744}
2719 2745
diff --git a/drivers/scsi/cxgbi/libcxgbi.h b/drivers/scsi/cxgbi/libcxgbi.h
index 18e0ea83d361..37f07aaab1e4 100644
--- a/drivers/scsi/cxgbi/libcxgbi.h
+++ b/drivers/scsi/cxgbi/libcxgbi.h
@@ -187,6 +187,7 @@ enum cxgbi_sock_flags {
187 CTPF_HAS_ATID, /* reserved atid */ 187 CTPF_HAS_ATID, /* reserved atid */
188 CTPF_HAS_TID, /* reserved hw tid */ 188 CTPF_HAS_TID, /* reserved hw tid */
189 CTPF_OFFLOAD_DOWN, /* offload function off */ 189 CTPF_OFFLOAD_DOWN, /* offload function off */
190 CTPF_LOGOUT_RSP_RCVD, /* received logout response */
190}; 191};
191 192
192struct cxgbi_skb_rx_cb { 193struct cxgbi_skb_rx_cb {
@@ -195,7 +196,8 @@ struct cxgbi_skb_rx_cb {
195}; 196};
196 197
197struct cxgbi_skb_tx_cb { 198struct cxgbi_skb_tx_cb {
198 void *l2t; 199 void *handle;
200 void *arp_err_handler;
199 struct sk_buff *wr_next; 201 struct sk_buff *wr_next;
200}; 202};
201 203
@@ -203,6 +205,7 @@ enum cxgbi_skcb_flags {
203 SKCBF_TX_NEED_HDR, /* packet needs a header */ 205 SKCBF_TX_NEED_HDR, /* packet needs a header */
204 SKCBF_TX_MEM_WRITE, /* memory write */ 206 SKCBF_TX_MEM_WRITE, /* memory write */
205 SKCBF_TX_FLAG_COMPL, /* wr completion flag */ 207 SKCBF_TX_FLAG_COMPL, /* wr completion flag */
208 SKCBF_TX_DONE, /* skb tx done */
206 SKCBF_RX_COALESCED, /* received whole pdu */ 209 SKCBF_RX_COALESCED, /* received whole pdu */
207 SKCBF_RX_HDR, /* received pdu header */ 210 SKCBF_RX_HDR, /* received pdu header */
208 SKCBF_RX_DATA, /* received pdu payload */ 211 SKCBF_RX_DATA, /* received pdu payload */
@@ -215,13 +218,13 @@ enum cxgbi_skcb_flags {
215}; 218};
216 219
217struct cxgbi_skb_cb { 220struct cxgbi_skb_cb {
218 unsigned char ulp_mode;
219 unsigned long flags;
220 unsigned int seq;
221 union { 221 union {
222 struct cxgbi_skb_rx_cb rx; 222 struct cxgbi_skb_rx_cb rx;
223 struct cxgbi_skb_tx_cb tx; 223 struct cxgbi_skb_tx_cb tx;
224 }; 224 };
225 unsigned char ulp_mode;
226 unsigned long flags;
227 unsigned int seq;
225}; 228};
226 229
227#define CXGBI_SKB_CB(skb) ((struct cxgbi_skb_cb *)&((skb)->cb[0])) 230#define CXGBI_SKB_CB(skb) ((struct cxgbi_skb_cb *)&((skb)->cb[0]))
@@ -374,11 +377,9 @@ static inline void cxgbi_sock_enqueue_wr(struct cxgbi_sock *csk,
374 cxgbi_skcb_tx_wr_next(skb) = NULL; 377 cxgbi_skcb_tx_wr_next(skb) = NULL;
375 /* 378 /*
376 * We want to take an extra reference since both us and the driver 379 * We want to take an extra reference since both us and the driver
377 * need to free the packet before it's really freed. We know there's 380 * need to free the packet before it's really freed.
378 * just one user currently so we use atomic_set rather than skb_get
379 * to avoid the atomic op.
380 */ 381 */
381 atomic_set(&skb->users, 2); 382 skb_get(skb);
382 383
383 if (!csk->wr_pending_head) 384 if (!csk->wr_pending_head)
384 csk->wr_pending_head = skb; 385 csk->wr_pending_head = skb;
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
index 3cbab8710e58..2ceff585f189 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -265,18 +265,16 @@ static unsigned int rdac_failover_get(struct rdac_controller *ctlr,
265 struct list_head *list, 265 struct list_head *list,
266 unsigned char *cdb) 266 unsigned char *cdb)
267{ 267{
268 struct scsi_device *sdev = ctlr->ms_sdev;
269 struct rdac_dh_data *h = sdev->handler_data;
270 struct rdac_mode_common *common; 268 struct rdac_mode_common *common;
271 unsigned data_size; 269 unsigned data_size;
272 struct rdac_queue_data *qdata; 270 struct rdac_queue_data *qdata;
273 u8 *lun_table; 271 u8 *lun_table;
274 272
275 if (h->ctlr->use_ms10) { 273 if (ctlr->use_ms10) {
276 struct rdac_pg_expanded *rdac_pg; 274 struct rdac_pg_expanded *rdac_pg;
277 275
278 data_size = sizeof(struct rdac_pg_expanded); 276 data_size = sizeof(struct rdac_pg_expanded);
279 rdac_pg = &h->ctlr->mode_select.expanded; 277 rdac_pg = &ctlr->mode_select.expanded;
280 memset(rdac_pg, 0, data_size); 278 memset(rdac_pg, 0, data_size);
281 common = &rdac_pg->common; 279 common = &rdac_pg->common;
282 rdac_pg->page_code = RDAC_PAGE_CODE_REDUNDANT_CONTROLLER + 0x40; 280 rdac_pg->page_code = RDAC_PAGE_CODE_REDUNDANT_CONTROLLER + 0x40;
@@ -288,7 +286,7 @@ static unsigned int rdac_failover_get(struct rdac_controller *ctlr,
288 struct rdac_pg_legacy *rdac_pg; 286 struct rdac_pg_legacy *rdac_pg;
289 287
290 data_size = sizeof(struct rdac_pg_legacy); 288 data_size = sizeof(struct rdac_pg_legacy);
291 rdac_pg = &h->ctlr->mode_select.legacy; 289 rdac_pg = &ctlr->mode_select.legacy;
292 memset(rdac_pg, 0, data_size); 290 memset(rdac_pg, 0, data_size);
293 common = &rdac_pg->common; 291 common = &rdac_pg->common;
294 rdac_pg->page_code = RDAC_PAGE_CODE_REDUNDANT_CONTROLLER; 292 rdac_pg->page_code = RDAC_PAGE_CODE_REDUNDANT_CONTROLLER;
@@ -304,7 +302,7 @@ static unsigned int rdac_failover_get(struct rdac_controller *ctlr,
304 } 302 }
305 303
306 /* Prepare the command. */ 304 /* Prepare the command. */
307 if (h->ctlr->use_ms10) { 305 if (ctlr->use_ms10) {
308 cdb[0] = MODE_SELECT_10; 306 cdb[0] = MODE_SELECT_10;
309 cdb[7] = data_size >> 8; 307 cdb[7] = data_size >> 8;
310 cdb[8] = data_size & 0xff; 308 cdb[8] = data_size & 0xff;
diff --git a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c
index d390325c99ec..abf6026645dd 100644
--- a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c
+++ b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c
@@ -1170,6 +1170,8 @@ static struct ibmvscsis_cmd *ibmvscsis_get_free_cmd(struct scsi_info *vscsi)
1170 cmd = list_first_entry_or_null(&vscsi->free_cmd, 1170 cmd = list_first_entry_or_null(&vscsi->free_cmd,
1171 struct ibmvscsis_cmd, list); 1171 struct ibmvscsis_cmd, list);
1172 if (cmd) { 1172 if (cmd) {
1173 if (cmd->abort_cmd)
1174 cmd->abort_cmd = NULL;
1173 cmd->flags &= ~(DELAY_SEND); 1175 cmd->flags &= ~(DELAY_SEND);
1174 list_del(&cmd->list); 1176 list_del(&cmd->list);
1175 cmd->iue = iue; 1177 cmd->iue = iue;
@@ -1774,6 +1776,7 @@ static void ibmvscsis_send_messages(struct scsi_info *vscsi)
1774 if (cmd->abort_cmd) { 1776 if (cmd->abort_cmd) {
1775 retry = true; 1777 retry = true;
1776 cmd->abort_cmd->flags &= ~(DELAY_SEND); 1778 cmd->abort_cmd->flags &= ~(DELAY_SEND);
1779 cmd->abort_cmd = NULL;
1777 } 1780 }
1778 1781
1779 /* 1782 /*
@@ -1788,6 +1791,25 @@ static void ibmvscsis_send_messages(struct scsi_info *vscsi)
1788 list_del(&cmd->list); 1791 list_del(&cmd->list);
1789 ibmvscsis_free_cmd_resources(vscsi, 1792 ibmvscsis_free_cmd_resources(vscsi,
1790 cmd); 1793 cmd);
1794 /*
1795 * With a successfully aborted op
1796 * through LIO we want to increment the
1797 * the vscsi credit so that when we dont
1798 * send a rsp to the original scsi abort
1799 * op (h_send_crq), but the tm rsp to
1800 * the abort is sent, the credit is
1801 * correctly sent with the abort tm rsp.
1802 * We would need 1 for the abort tm rsp
1803 * and 1 credit for the aborted scsi op.
1804 * Thus we need to increment here.
1805 * Also we want to increment the credit
1806 * here because we want to make sure
1807 * cmd is actually released first
1808 * otherwise the client will think it
1809 * it can send a new cmd, and we could
1810 * find ourselves short of cmd elements.
1811 */
1812 vscsi->credit += 1;
1791 } else { 1813 } else {
1792 iue = cmd->iue; 1814 iue = cmd->iue;
1793 1815
@@ -2962,10 +2984,7 @@ static long srp_build_response(struct scsi_info *vscsi,
2962 2984
2963 rsp->opcode = SRP_RSP; 2985 rsp->opcode = SRP_RSP;
2964 2986
2965 if (vscsi->credit > 0 && vscsi->state == SRP_PROCESSING) 2987 rsp->req_lim_delta = cpu_to_be32(1 + vscsi->credit);
2966 rsp->req_lim_delta = cpu_to_be32(vscsi->credit);
2967 else
2968 rsp->req_lim_delta = cpu_to_be32(1 + vscsi->credit);
2969 rsp->tag = cmd->rsp.tag; 2988 rsp->tag = cmd->rsp.tag;
2970 rsp->flags = 0; 2989 rsp->flags = 0;
2971 2990
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index b44c3136eb51..520325867e2b 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -1422,7 +1422,7 @@ static void fc_rport_recv_rtv_req(struct fc_rport_priv *rdata,
1422 fp = fc_frame_alloc(lport, sizeof(*rtv)); 1422 fp = fc_frame_alloc(lport, sizeof(*rtv));
1423 if (!fp) { 1423 if (!fp) {
1424 rjt_data.reason = ELS_RJT_UNAB; 1424 rjt_data.reason = ELS_RJT_UNAB;
1425 rjt_data.reason = ELS_EXPL_INSUF_RES; 1425 rjt_data.explan = ELS_EXPL_INSUF_RES;
1426 fc_seq_els_rsp_send(in_fp, ELS_LS_RJT, &rjt_data); 1426 fc_seq_els_rsp_send(in_fp, ELS_LS_RJT, &rjt_data);
1427 goto drop; 1427 goto drop;
1428 } 1428 }
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
index 6d7840b096e6..f2c0ba6ced78 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -141,6 +141,13 @@ struct lpfc_dmabuf {
141 uint32_t buffer_tag; /* used for tagged queue ring */ 141 uint32_t buffer_tag; /* used for tagged queue ring */
142}; 142};
143 143
144struct lpfc_nvmet_ctxbuf {
145 struct list_head list;
146 struct lpfc_nvmet_rcv_ctx *context;
147 struct lpfc_iocbq *iocbq;
148 struct lpfc_sglq *sglq;
149};
150
144struct lpfc_dma_pool { 151struct lpfc_dma_pool {
145 struct lpfc_dmabuf *elements; 152 struct lpfc_dmabuf *elements;
146 uint32_t max_count; 153 uint32_t max_count;
@@ -163,9 +170,7 @@ struct rqb_dmabuf {
163 struct lpfc_dmabuf dbuf; 170 struct lpfc_dmabuf dbuf;
164 uint16_t total_size; 171 uint16_t total_size;
165 uint16_t bytes_recv; 172 uint16_t bytes_recv;
166 void *context; 173 uint16_t idx;
167 struct lpfc_iocbq *iocbq;
168 struct lpfc_sglq *sglq;
169 struct lpfc_queue *hrq; /* ptr to associated Header RQ */ 174 struct lpfc_queue *hrq; /* ptr to associated Header RQ */
170 struct lpfc_queue *drq; /* ptr to associated Data RQ */ 175 struct lpfc_queue *drq; /* ptr to associated Data RQ */
171}; 176};
@@ -670,6 +675,8 @@ struct lpfc_hba {
670 /* INIT_LINK mailbox command */ 675 /* INIT_LINK mailbox command */
671#define LS_NPIV_FAB_SUPPORTED 0x2 /* Fabric supports NPIV */ 676#define LS_NPIV_FAB_SUPPORTED 0x2 /* Fabric supports NPIV */
672#define LS_IGNORE_ERATT 0x4 /* intr handler should ignore ERATT */ 677#define LS_IGNORE_ERATT 0x4 /* intr handler should ignore ERATT */
678#define LS_MDS_LINK_DOWN 0x8 /* MDS Diagnostics Link Down */
679#define LS_MDS_LOOPBACK 0x16 /* MDS Diagnostics Link Up (Loopback) */
673 680
674 uint32_t hba_flag; /* hba generic flags */ 681 uint32_t hba_flag; /* hba generic flags */
675#define HBA_ERATT_HANDLED 0x1 /* This flag is set when eratt handled */ 682#define HBA_ERATT_HANDLED 0x1 /* This flag is set when eratt handled */
@@ -777,7 +784,6 @@ struct lpfc_hba {
777 uint32_t cfg_nvme_oas; 784 uint32_t cfg_nvme_oas;
778 uint32_t cfg_nvme_io_channel; 785 uint32_t cfg_nvme_io_channel;
779 uint32_t cfg_nvmet_mrq; 786 uint32_t cfg_nvmet_mrq;
780 uint32_t cfg_nvmet_mrq_post;
781 uint32_t cfg_enable_nvmet; 787 uint32_t cfg_enable_nvmet;
782 uint32_t cfg_nvme_enable_fb; 788 uint32_t cfg_nvme_enable_fb;
783 uint32_t cfg_nvmet_fb_size; 789 uint32_t cfg_nvmet_fb_size;
@@ -943,6 +949,7 @@ struct lpfc_hba {
943 struct pci_pool *lpfc_mbuf_pool; 949 struct pci_pool *lpfc_mbuf_pool;
944 struct pci_pool *lpfc_hrb_pool; /* header receive buffer pool */ 950 struct pci_pool *lpfc_hrb_pool; /* header receive buffer pool */
945 struct pci_pool *lpfc_drb_pool; /* data receive buffer pool */ 951 struct pci_pool *lpfc_drb_pool; /* data receive buffer pool */
952 struct pci_pool *lpfc_nvmet_drb_pool; /* data receive buffer pool */
946 struct pci_pool *lpfc_hbq_pool; /* SLI3 hbq buffer pool */ 953 struct pci_pool *lpfc_hbq_pool; /* SLI3 hbq buffer pool */
947 struct pci_pool *txrdy_payload_pool; 954 struct pci_pool *txrdy_payload_pool;
948 struct lpfc_dma_pool lpfc_mbuf_safety_pool; 955 struct lpfc_dma_pool lpfc_mbuf_safety_pool;
@@ -1228,7 +1235,11 @@ lpfc_sli_read_hs(struct lpfc_hba *phba)
1228static inline struct lpfc_sli_ring * 1235static inline struct lpfc_sli_ring *
1229lpfc_phba_elsring(struct lpfc_hba *phba) 1236lpfc_phba_elsring(struct lpfc_hba *phba)
1230{ 1237{
1231 if (phba->sli_rev == LPFC_SLI_REV4) 1238 if (phba->sli_rev == LPFC_SLI_REV4) {
1232 return phba->sli4_hba.els_wq->pring; 1239 if (phba->sli4_hba.els_wq)
1240 return phba->sli4_hba.els_wq->pring;
1241 else
1242 return NULL;
1243 }
1233 return &phba->sli.sli3_ring[LPFC_ELS_RING]; 1244 return &phba->sli.sli3_ring[LPFC_ELS_RING];
1234} 1245}
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index 4830370bfab1..bb2d9e238225 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -60,9 +60,9 @@
60#define LPFC_MIN_DEVLOSS_TMO 1 60#define LPFC_MIN_DEVLOSS_TMO 1
61#define LPFC_MAX_DEVLOSS_TMO 255 61#define LPFC_MAX_DEVLOSS_TMO 255
62 62
63#define LPFC_DEF_MRQ_POST 256 63#define LPFC_DEF_MRQ_POST 512
64#define LPFC_MIN_MRQ_POST 32 64#define LPFC_MIN_MRQ_POST 512
65#define LPFC_MAX_MRQ_POST 512 65#define LPFC_MAX_MRQ_POST 2048
66 66
67/* 67/*
68 * Write key size should be multiple of 4. If write key is changed 68 * Write key size should be multiple of 4. If write key is changed
@@ -205,8 +205,9 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
205 atomic_read(&tgtp->xmt_ls_rsp_error)); 205 atomic_read(&tgtp->xmt_ls_rsp_error));
206 206
207 len += snprintf(buf+len, PAGE_SIZE-len, 207 len += snprintf(buf+len, PAGE_SIZE-len,
208 "FCP: Rcv %08x Drop %08x\n", 208 "FCP: Rcv %08x Release %08x Drop %08x\n",
209 atomic_read(&tgtp->rcv_fcp_cmd_in), 209 atomic_read(&tgtp->rcv_fcp_cmd_in),
210 atomic_read(&tgtp->xmt_fcp_release),
210 atomic_read(&tgtp->rcv_fcp_cmd_drop)); 211 atomic_read(&tgtp->rcv_fcp_cmd_drop));
211 212
212 if (atomic_read(&tgtp->rcv_fcp_cmd_in) != 213 if (atomic_read(&tgtp->rcv_fcp_cmd_in) !=
@@ -218,15 +219,12 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
218 } 219 }
219 220
220 len += snprintf(buf+len, PAGE_SIZE-len, 221 len += snprintf(buf+len, PAGE_SIZE-len,
221 "FCP Rsp: RD %08x rsp %08x WR %08x rsp %08x\n", 222 "FCP Rsp: RD %08x rsp %08x WR %08x rsp %08x "
223 "drop %08x\n",
222 atomic_read(&tgtp->xmt_fcp_read), 224 atomic_read(&tgtp->xmt_fcp_read),
223 atomic_read(&tgtp->xmt_fcp_read_rsp), 225 atomic_read(&tgtp->xmt_fcp_read_rsp),
224 atomic_read(&tgtp->xmt_fcp_write), 226 atomic_read(&tgtp->xmt_fcp_write),
225 atomic_read(&tgtp->xmt_fcp_rsp)); 227 atomic_read(&tgtp->xmt_fcp_rsp),
226
227 len += snprintf(buf+len, PAGE_SIZE-len,
228 "FCP Rsp: abort %08x drop %08x\n",
229 atomic_read(&tgtp->xmt_fcp_abort),
230 atomic_read(&tgtp->xmt_fcp_drop)); 228 atomic_read(&tgtp->xmt_fcp_drop));
231 229
232 len += snprintf(buf+len, PAGE_SIZE-len, 230 len += snprintf(buf+len, PAGE_SIZE-len,
@@ -236,10 +234,22 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
236 atomic_read(&tgtp->xmt_fcp_rsp_drop)); 234 atomic_read(&tgtp->xmt_fcp_rsp_drop));
237 235
238 len += snprintf(buf+len, PAGE_SIZE-len, 236 len += snprintf(buf+len, PAGE_SIZE-len,
239 "ABORT: Xmt %08x Err %08x Cmpl %08x", 237 "ABORT: Xmt %08x Cmpl %08x\n",
238 atomic_read(&tgtp->xmt_fcp_abort),
239 atomic_read(&tgtp->xmt_fcp_abort_cmpl));
240
241 len += snprintf(buf + len, PAGE_SIZE - len,
242 "ABORT: Sol %08x Usol %08x Err %08x Cmpl %08x",
243 atomic_read(&tgtp->xmt_abort_sol),
244 atomic_read(&tgtp->xmt_abort_unsol),
240 atomic_read(&tgtp->xmt_abort_rsp), 245 atomic_read(&tgtp->xmt_abort_rsp),
241 atomic_read(&tgtp->xmt_abort_rsp_error), 246 atomic_read(&tgtp->xmt_abort_rsp_error));
242 atomic_read(&tgtp->xmt_abort_cmpl)); 247
248 len += snprintf(buf + len, PAGE_SIZE - len,
249 "IO_CTX: %08x outstanding %08x total %x",
250 phba->sli4_hba.nvmet_ctx_cnt,
251 phba->sli4_hba.nvmet_io_wait_cnt,
252 phba->sli4_hba.nvmet_io_wait_total);
243 253
244 len += snprintf(buf+len, PAGE_SIZE-len, "\n"); 254 len += snprintf(buf+len, PAGE_SIZE-len, "\n");
245 return len; 255 return len;
@@ -3312,14 +3322,6 @@ LPFC_ATTR_R(nvmet_mrq,
3312 "Specify number of RQ pairs for processing NVMET cmds"); 3322 "Specify number of RQ pairs for processing NVMET cmds");
3313 3323
3314/* 3324/*
3315 * lpfc_nvmet_mrq_post: Specify number buffers to post on every MRQ
3316 *
3317 */
3318LPFC_ATTR_R(nvmet_mrq_post, LPFC_DEF_MRQ_POST,
3319 LPFC_MIN_MRQ_POST, LPFC_MAX_MRQ_POST,
3320 "Specify number of buffers to post on every MRQ");
3321
3322/*
3323 * lpfc_enable_fc4_type: Defines what FC4 types are supported. 3325 * lpfc_enable_fc4_type: Defines what FC4 types are supported.
3324 * Supported Values: 1 - register just FCP 3326 * Supported Values: 1 - register just FCP
3325 * 3 - register both FCP and NVME 3327 * 3 - register both FCP and NVME
@@ -5154,7 +5156,6 @@ struct device_attribute *lpfc_hba_attrs[] = {
5154 &dev_attr_lpfc_suppress_rsp, 5156 &dev_attr_lpfc_suppress_rsp,
5155 &dev_attr_lpfc_nvme_io_channel, 5157 &dev_attr_lpfc_nvme_io_channel,
5156 &dev_attr_lpfc_nvmet_mrq, 5158 &dev_attr_lpfc_nvmet_mrq,
5157 &dev_attr_lpfc_nvmet_mrq_post,
5158 &dev_attr_lpfc_nvme_enable_fb, 5159 &dev_attr_lpfc_nvme_enable_fb,
5159 &dev_attr_lpfc_nvmet_fb_size, 5160 &dev_attr_lpfc_nvmet_fb_size,
5160 &dev_attr_lpfc_enable_bg, 5161 &dev_attr_lpfc_enable_bg,
@@ -6194,7 +6195,6 @@ lpfc_get_cfgparam(struct lpfc_hba *phba)
6194 6195
6195 lpfc_enable_fc4_type_init(phba, lpfc_enable_fc4_type); 6196 lpfc_enable_fc4_type_init(phba, lpfc_enable_fc4_type);
6196 lpfc_nvmet_mrq_init(phba, lpfc_nvmet_mrq); 6197 lpfc_nvmet_mrq_init(phba, lpfc_nvmet_mrq);
6197 lpfc_nvmet_mrq_post_init(phba, lpfc_nvmet_mrq_post);
6198 6198
6199 /* Initialize first burst. Target vs Initiator are different. */ 6199 /* Initialize first burst. Target vs Initiator are different. */
6200 lpfc_nvme_enable_fb_init(phba, lpfc_nvme_enable_fb); 6200 lpfc_nvme_enable_fb_init(phba, lpfc_nvme_enable_fb);
@@ -6291,7 +6291,6 @@ lpfc_nvme_mod_param_dep(struct lpfc_hba *phba)
6291 /* Not NVME Target mode. Turn off Target parameters. */ 6291 /* Not NVME Target mode. Turn off Target parameters. */
6292 phba->nvmet_support = 0; 6292 phba->nvmet_support = 0;
6293 phba->cfg_nvmet_mrq = 0; 6293 phba->cfg_nvmet_mrq = 0;
6294 phba->cfg_nvmet_mrq_post = 0;
6295 phba->cfg_nvmet_fb_size = 0; 6294 phba->cfg_nvmet_fb_size = 0;
6296 } 6295 }
6297 6296
diff --git a/drivers/scsi/lpfc/lpfc_crtn.h b/drivers/scsi/lpfc/lpfc_crtn.h
index 1c55408ac718..da669dce12fe 100644
--- a/drivers/scsi/lpfc/lpfc_crtn.h
+++ b/drivers/scsi/lpfc/lpfc_crtn.h
@@ -75,6 +75,10 @@ void lpfc_init_vpi_cmpl(struct lpfc_hba *, LPFC_MBOXQ_t *);
75void lpfc_cancel_all_vport_retry_delay_timer(struct lpfc_hba *); 75void lpfc_cancel_all_vport_retry_delay_timer(struct lpfc_hba *);
76void lpfc_retry_pport_discovery(struct lpfc_hba *); 76void lpfc_retry_pport_discovery(struct lpfc_hba *);
77void lpfc_release_rpi(struct lpfc_hba *, struct lpfc_vport *, uint16_t); 77void lpfc_release_rpi(struct lpfc_hba *, struct lpfc_vport *, uint16_t);
78int lpfc_init_iocb_list(struct lpfc_hba *phba, int cnt);
79void lpfc_free_iocb_list(struct lpfc_hba *phba);
80int lpfc_post_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *hrq,
81 struct lpfc_queue *drq, int count, int idx);
78 82
79void lpfc_mbx_cmpl_local_config_link(struct lpfc_hba *, LPFC_MBOXQ_t *); 83void lpfc_mbx_cmpl_local_config_link(struct lpfc_hba *, LPFC_MBOXQ_t *);
80void lpfc_mbx_cmpl_reg_login(struct lpfc_hba *, LPFC_MBOXQ_t *); 84void lpfc_mbx_cmpl_reg_login(struct lpfc_hba *, LPFC_MBOXQ_t *);
@@ -123,7 +127,7 @@ int lpfc_disc_state_machine(struct lpfc_vport *, struct lpfc_nodelist *, void *,
123void lpfc_do_scr_ns_plogi(struct lpfc_hba *, struct lpfc_vport *); 127void lpfc_do_scr_ns_plogi(struct lpfc_hba *, struct lpfc_vport *);
124int lpfc_check_sparm(struct lpfc_vport *, struct lpfc_nodelist *, 128int lpfc_check_sparm(struct lpfc_vport *, struct lpfc_nodelist *,
125 struct serv_parm *, uint32_t, int); 129 struct serv_parm *, uint32_t, int);
126int lpfc_els_abort(struct lpfc_hba *, struct lpfc_nodelist *); 130void lpfc_els_abort(struct lpfc_hba *, struct lpfc_nodelist *);
127void lpfc_more_plogi(struct lpfc_vport *); 131void lpfc_more_plogi(struct lpfc_vport *);
128void lpfc_more_adisc(struct lpfc_vport *); 132void lpfc_more_adisc(struct lpfc_vport *);
129void lpfc_end_rscn(struct lpfc_vport *); 133void lpfc_end_rscn(struct lpfc_vport *);
@@ -246,16 +250,14 @@ struct hbq_dmabuf *lpfc_sli4_rb_alloc(struct lpfc_hba *);
246void lpfc_sli4_rb_free(struct lpfc_hba *, struct hbq_dmabuf *); 250void lpfc_sli4_rb_free(struct lpfc_hba *, struct hbq_dmabuf *);
247struct rqb_dmabuf *lpfc_sli4_nvmet_alloc(struct lpfc_hba *phba); 251struct rqb_dmabuf *lpfc_sli4_nvmet_alloc(struct lpfc_hba *phba);
248void lpfc_sli4_nvmet_free(struct lpfc_hba *phba, struct rqb_dmabuf *dmab); 252void lpfc_sli4_nvmet_free(struct lpfc_hba *phba, struct rqb_dmabuf *dmab);
249void lpfc_nvmet_rq_post(struct lpfc_hba *phba, struct lpfc_nvmet_rcv_ctx *ctxp, 253void lpfc_nvmet_ctxbuf_post(struct lpfc_hba *phba,
250 struct lpfc_dmabuf *mp); 254 struct lpfc_nvmet_ctxbuf *ctxp);
251int lpfc_nvmet_rcv_unsol_abort(struct lpfc_vport *vport, 255int lpfc_nvmet_rcv_unsol_abort(struct lpfc_vport *vport,
252 struct fc_frame_header *fc_hdr); 256 struct fc_frame_header *fc_hdr);
253void lpfc_sli4_build_dflt_fcf_record(struct lpfc_hba *, struct fcf_record *, 257void lpfc_sli4_build_dflt_fcf_record(struct lpfc_hba *, struct fcf_record *,
254 uint16_t); 258 uint16_t);
255int lpfc_sli4_rq_put(struct lpfc_queue *hq, struct lpfc_queue *dq, 259int lpfc_sli4_rq_put(struct lpfc_queue *hq, struct lpfc_queue *dq,
256 struct lpfc_rqe *hrqe, struct lpfc_rqe *drqe); 260 struct lpfc_rqe *hrqe, struct lpfc_rqe *drqe);
257int lpfc_post_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *hq,
258 struct lpfc_queue *dq, int count);
259int lpfc_free_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *hq); 261int lpfc_free_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *hq);
260void lpfc_unregister_fcf(struct lpfc_hba *); 262void lpfc_unregister_fcf(struct lpfc_hba *);
261void lpfc_unregister_fcf_rescan(struct lpfc_hba *); 263void lpfc_unregister_fcf_rescan(struct lpfc_hba *);
@@ -271,6 +273,7 @@ int lpfc_sli4_fcf_rr_next_proc(struct lpfc_vport *, uint16_t);
271void lpfc_sli4_clear_fcf_rr_bmask(struct lpfc_hba *); 273void lpfc_sli4_clear_fcf_rr_bmask(struct lpfc_hba *);
272 274
273int lpfc_mem_alloc(struct lpfc_hba *, int align); 275int lpfc_mem_alloc(struct lpfc_hba *, int align);
276int lpfc_nvmet_mem_alloc(struct lpfc_hba *phba);
274int lpfc_mem_alloc_active_rrq_pool_s4(struct lpfc_hba *); 277int lpfc_mem_alloc_active_rrq_pool_s4(struct lpfc_hba *);
275void lpfc_mem_free(struct lpfc_hba *); 278void lpfc_mem_free(struct lpfc_hba *);
276void lpfc_mem_free_all(struct lpfc_hba *); 279void lpfc_mem_free_all(struct lpfc_hba *);
diff --git a/drivers/scsi/lpfc/lpfc_ct.c b/drivers/scsi/lpfc/lpfc_ct.c
index c7962dae4dab..24ce96dcc94d 100644
--- a/drivers/scsi/lpfc/lpfc_ct.c
+++ b/drivers/scsi/lpfc/lpfc_ct.c
@@ -978,9 +978,10 @@ lpfc_cmpl_ct_cmd_gft_id(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
978 ndlp, did, ndlp->nlp_fc4_type, 978 ndlp, did, ndlp->nlp_fc4_type,
979 FC_TYPE_FCP, FC_TYPE_NVME); 979 FC_TYPE_FCP, FC_TYPE_NVME);
980 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE; 980 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
981
982 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PRLI_ISSUE);
983 lpfc_issue_els_prli(vport, ndlp, 0);
981 } 984 }
982 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PRLI_ISSUE);
983 lpfc_issue_els_prli(vport, ndlp, 0);
984 } else 985 } else
985 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY, 986 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
986 "3065 GFT_ID failed x%08x\n", irsp->ulpStatus); 987 "3065 GFT_ID failed x%08x\n", irsp->ulpStatus);
@@ -2092,6 +2093,7 @@ lpfc_fdmi_port_attr_fc4type(struct lpfc_vport *vport,
2092 2093
2093 ae->un.AttrTypes[3] = 0x02; /* Type 1 - ELS */ 2094 ae->un.AttrTypes[3] = 0x02; /* Type 1 - ELS */
2094 ae->un.AttrTypes[2] = 0x01; /* Type 8 - FCP */ 2095 ae->un.AttrTypes[2] = 0x01; /* Type 8 - FCP */
2096 ae->un.AttrTypes[6] = 0x01; /* Type 40 - NVME */
2095 ae->un.AttrTypes[7] = 0x01; /* Type 32 - CT */ 2097 ae->un.AttrTypes[7] = 0x01; /* Type 32 - CT */
2096 size = FOURBYTES + 32; 2098 size = FOURBYTES + 32;
2097 ad->AttrLen = cpu_to_be16(size); 2099 ad->AttrLen = cpu_to_be16(size);
diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c
index fce549a91911..4bcb92c844ca 100644
--- a/drivers/scsi/lpfc/lpfc_debugfs.c
+++ b/drivers/scsi/lpfc/lpfc_debugfs.c
@@ -798,21 +798,22 @@ lpfc_debugfs_nvmestat_data(struct lpfc_vport *vport, char *buf, int size)
798 atomic_read(&tgtp->xmt_fcp_rsp)); 798 atomic_read(&tgtp->xmt_fcp_rsp));
799 799
800 len += snprintf(buf + len, size - len, 800 len += snprintf(buf + len, size - len,
801 "FCP Rsp: abort %08x drop %08x\n",
802 atomic_read(&tgtp->xmt_fcp_abort),
803 atomic_read(&tgtp->xmt_fcp_drop));
804
805 len += snprintf(buf + len, size - len,
806 "FCP Rsp Cmpl: %08x err %08x drop %08x\n", 801 "FCP Rsp Cmpl: %08x err %08x drop %08x\n",
807 atomic_read(&tgtp->xmt_fcp_rsp_cmpl), 802 atomic_read(&tgtp->xmt_fcp_rsp_cmpl),
808 atomic_read(&tgtp->xmt_fcp_rsp_error), 803 atomic_read(&tgtp->xmt_fcp_rsp_error),
809 atomic_read(&tgtp->xmt_fcp_rsp_drop)); 804 atomic_read(&tgtp->xmt_fcp_rsp_drop));
810 805
811 len += snprintf(buf + len, size - len, 806 len += snprintf(buf + len, size - len,
812 "ABORT: Xmt %08x Err %08x Cmpl %08x", 807 "ABORT: Xmt %08x Cmpl %08x\n",
808 atomic_read(&tgtp->xmt_fcp_abort),
809 atomic_read(&tgtp->xmt_fcp_abort_cmpl));
810
811 len += snprintf(buf + len, size - len,
812 "ABORT: Sol %08x Usol %08x Err %08x Cmpl %08x",
813 atomic_read(&tgtp->xmt_abort_sol),
814 atomic_read(&tgtp->xmt_abort_unsol),
813 atomic_read(&tgtp->xmt_abort_rsp), 815 atomic_read(&tgtp->xmt_abort_rsp),
814 atomic_read(&tgtp->xmt_abort_rsp_error), 816 atomic_read(&tgtp->xmt_abort_rsp_error));
815 atomic_read(&tgtp->xmt_abort_cmpl));
816 817
817 len += snprintf(buf + len, size - len, "\n"); 818 len += snprintf(buf + len, size - len, "\n");
818 819
@@ -841,6 +842,12 @@ lpfc_debugfs_nvmestat_data(struct lpfc_vport *vport, char *buf, int size)
841 } 842 }
842 spin_unlock(&phba->sli4_hba.abts_nvme_buf_list_lock); 843 spin_unlock(&phba->sli4_hba.abts_nvme_buf_list_lock);
843 } 844 }
845
846 len += snprintf(buf + len, size - len,
847 "IO_CTX: %08x outstanding %08x total %08x\n",
848 phba->sli4_hba.nvmet_ctx_cnt,
849 phba->sli4_hba.nvmet_io_wait_cnt,
850 phba->sli4_hba.nvmet_io_wait_total);
844 } else { 851 } else {
845 if (!(phba->cfg_enable_fc4_type & LPFC_ENABLE_NVME)) 852 if (!(phba->cfg_enable_fc4_type & LPFC_ENABLE_NVME))
846 return len; 853 return len;
@@ -1959,6 +1966,7 @@ lpfc_debugfs_nvmestat_write(struct file *file, const char __user *buf,
1959 atomic_set(&tgtp->rcv_ls_req_out, 0); 1966 atomic_set(&tgtp->rcv_ls_req_out, 0);
1960 atomic_set(&tgtp->rcv_ls_req_drop, 0); 1967 atomic_set(&tgtp->rcv_ls_req_drop, 0);
1961 atomic_set(&tgtp->xmt_ls_abort, 0); 1968 atomic_set(&tgtp->xmt_ls_abort, 0);
1969 atomic_set(&tgtp->xmt_ls_abort_cmpl, 0);
1962 atomic_set(&tgtp->xmt_ls_rsp, 0); 1970 atomic_set(&tgtp->xmt_ls_rsp, 0);
1963 atomic_set(&tgtp->xmt_ls_drop, 0); 1971 atomic_set(&tgtp->xmt_ls_drop, 0);
1964 atomic_set(&tgtp->xmt_ls_rsp_error, 0); 1972 atomic_set(&tgtp->xmt_ls_rsp_error, 0);
@@ -1967,19 +1975,22 @@ lpfc_debugfs_nvmestat_write(struct file *file, const char __user *buf,
1967 atomic_set(&tgtp->rcv_fcp_cmd_in, 0); 1975 atomic_set(&tgtp->rcv_fcp_cmd_in, 0);
1968 atomic_set(&tgtp->rcv_fcp_cmd_out, 0); 1976 atomic_set(&tgtp->rcv_fcp_cmd_out, 0);
1969 atomic_set(&tgtp->rcv_fcp_cmd_drop, 0); 1977 atomic_set(&tgtp->rcv_fcp_cmd_drop, 0);
1970 atomic_set(&tgtp->xmt_fcp_abort, 0);
1971 atomic_set(&tgtp->xmt_fcp_drop, 0); 1978 atomic_set(&tgtp->xmt_fcp_drop, 0);
1972 atomic_set(&tgtp->xmt_fcp_read_rsp, 0); 1979 atomic_set(&tgtp->xmt_fcp_read_rsp, 0);
1973 atomic_set(&tgtp->xmt_fcp_read, 0); 1980 atomic_set(&tgtp->xmt_fcp_read, 0);
1974 atomic_set(&tgtp->xmt_fcp_write, 0); 1981 atomic_set(&tgtp->xmt_fcp_write, 0);
1975 atomic_set(&tgtp->xmt_fcp_rsp, 0); 1982 atomic_set(&tgtp->xmt_fcp_rsp, 0);
1983 atomic_set(&tgtp->xmt_fcp_release, 0);
1976 atomic_set(&tgtp->xmt_fcp_rsp_cmpl, 0); 1984 atomic_set(&tgtp->xmt_fcp_rsp_cmpl, 0);
1977 atomic_set(&tgtp->xmt_fcp_rsp_error, 0); 1985 atomic_set(&tgtp->xmt_fcp_rsp_error, 0);
1978 atomic_set(&tgtp->xmt_fcp_rsp_drop, 0); 1986 atomic_set(&tgtp->xmt_fcp_rsp_drop, 0);
1979 1987
1988 atomic_set(&tgtp->xmt_fcp_abort, 0);
1989 atomic_set(&tgtp->xmt_fcp_abort_cmpl, 0);
1990 atomic_set(&tgtp->xmt_abort_sol, 0);
1991 atomic_set(&tgtp->xmt_abort_unsol, 0);
1980 atomic_set(&tgtp->xmt_abort_rsp, 0); 1992 atomic_set(&tgtp->xmt_abort_rsp, 0);
1981 atomic_set(&tgtp->xmt_abort_rsp_error, 0); 1993 atomic_set(&tgtp->xmt_abort_rsp_error, 0);
1982 atomic_set(&tgtp->xmt_abort_cmpl, 0);
1983 } 1994 }
1984 return nbytes; 1995 return nbytes;
1985} 1996}
@@ -3070,11 +3081,11 @@ __lpfc_idiag_print_wq(struct lpfc_queue *qp, char *wqtype,
3070 qp->assoc_qid, qp->q_cnt_1, 3081 qp->assoc_qid, qp->q_cnt_1,
3071 (unsigned long long)qp->q_cnt_4); 3082 (unsigned long long)qp->q_cnt_4);
3072 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len, 3083 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len,
3073 "\t\tWQID[%02d], QE-CNT[%04d], QE-SIZE[%04d], " 3084 "\t\tWQID[%02d], QE-CNT[%04d], QE-SZ[%04d], "
3074 "HOST-IDX[%04d], PORT-IDX[%04d]", 3085 "HST-IDX[%04d], PRT-IDX[%04d], PST[%03d]",
3075 qp->queue_id, qp->entry_count, 3086 qp->queue_id, qp->entry_count,
3076 qp->entry_size, qp->host_index, 3087 qp->entry_size, qp->host_index,
3077 qp->hba_index); 3088 qp->hba_index, qp->entry_repost);
3078 len += snprintf(pbuffer + len, 3089 len += snprintf(pbuffer + len,
3079 LPFC_QUE_INFO_GET_BUF_SIZE - len, "\n"); 3090 LPFC_QUE_INFO_GET_BUF_SIZE - len, "\n");
3080 return len; 3091 return len;
@@ -3121,11 +3132,11 @@ __lpfc_idiag_print_cq(struct lpfc_queue *qp, char *cqtype,
3121 qp->assoc_qid, qp->q_cnt_1, qp->q_cnt_2, 3132 qp->assoc_qid, qp->q_cnt_1, qp->q_cnt_2,
3122 qp->q_cnt_3, (unsigned long long)qp->q_cnt_4); 3133 qp->q_cnt_3, (unsigned long long)qp->q_cnt_4);
3123 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len, 3134 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len,
3124 "\tCQID[%02d], QE-CNT[%04d], QE-SIZE[%04d], " 3135 "\tCQID[%02d], QE-CNT[%04d], QE-SZ[%04d], "
3125 "HOST-IDX[%04d], PORT-IDX[%04d]", 3136 "HST-IDX[%04d], PRT-IDX[%04d], PST[%03d]",
3126 qp->queue_id, qp->entry_count, 3137 qp->queue_id, qp->entry_count,
3127 qp->entry_size, qp->host_index, 3138 qp->entry_size, qp->host_index,
3128 qp->hba_index); 3139 qp->hba_index, qp->entry_repost);
3129 3140
3130 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len, "\n"); 3141 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len, "\n");
3131 3142
@@ -3143,20 +3154,20 @@ __lpfc_idiag_print_rqpair(struct lpfc_queue *qp, struct lpfc_queue *datqp,
3143 "\t\t%s RQ info: ", rqtype); 3154 "\t\t%s RQ info: ", rqtype);
3144 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len, 3155 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len,
3145 "AssocCQID[%02d]: RQ-STAT[nopost:x%x nobuf:x%x " 3156 "AssocCQID[%02d]: RQ-STAT[nopost:x%x nobuf:x%x "
3146 "trunc:x%x rcv:x%llx]\n", 3157 "posted:x%x rcv:x%llx]\n",
3147 qp->assoc_qid, qp->q_cnt_1, qp->q_cnt_2, 3158 qp->assoc_qid, qp->q_cnt_1, qp->q_cnt_2,
3148 qp->q_cnt_3, (unsigned long long)qp->q_cnt_4); 3159 qp->q_cnt_3, (unsigned long long)qp->q_cnt_4);
3149 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len, 3160 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len,
3150 "\t\tHQID[%02d], QE-CNT[%04d], QE-SIZE[%04d], " 3161 "\t\tHQID[%02d], QE-CNT[%04d], QE-SZ[%04d], "
3151 "HOST-IDX[%04d], PORT-IDX[%04d]\n", 3162 "HST-IDX[%04d], PRT-IDX[%04d], PST[%03d]\n",
3152 qp->queue_id, qp->entry_count, qp->entry_size, 3163 qp->queue_id, qp->entry_count, qp->entry_size,
3153 qp->host_index, qp->hba_index); 3164 qp->host_index, qp->hba_index, qp->entry_repost);
3154 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len, 3165 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len,
3155 "\t\tDQID[%02d], QE-CNT[%04d], QE-SIZE[%04d], " 3166 "\t\tDQID[%02d], QE-CNT[%04d], QE-SZ[%04d], "
3156 "HOST-IDX[%04d], PORT-IDX[%04d]\n", 3167 "HST-IDX[%04d], PRT-IDX[%04d], PST[%03d]\n",
3157 datqp->queue_id, datqp->entry_count, 3168 datqp->queue_id, datqp->entry_count,
3158 datqp->entry_size, datqp->host_index, 3169 datqp->entry_size, datqp->host_index,
3159 datqp->hba_index); 3170 datqp->hba_index, datqp->entry_repost);
3160 return len; 3171 return len;
3161} 3172}
3162 3173
@@ -3242,10 +3253,10 @@ __lpfc_idiag_print_eq(struct lpfc_queue *qp, char *eqtype,
3242 eqtype, qp->q_cnt_1, qp->q_cnt_2, qp->q_cnt_3, 3253 eqtype, qp->q_cnt_1, qp->q_cnt_2, qp->q_cnt_3,
3243 (unsigned long long)qp->q_cnt_4); 3254 (unsigned long long)qp->q_cnt_4);
3244 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len, 3255 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len,
3245 "EQID[%02d], QE-CNT[%04d], QE-SIZE[%04d], " 3256 "EQID[%02d], QE-CNT[%04d], QE-SZ[%04d], "
3246 "HOST-IDX[%04d], PORT-IDX[%04d]", 3257 "HST-IDX[%04d], PRT-IDX[%04d], PST[%03d]",
3247 qp->queue_id, qp->entry_count, qp->entry_size, 3258 qp->queue_id, qp->entry_count, qp->entry_size,
3248 qp->host_index, qp->hba_index); 3259 qp->host_index, qp->hba_index, qp->entry_repost);
3249 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len, "\n"); 3260 len += snprintf(pbuffer + len, LPFC_QUE_INFO_GET_BUF_SIZE - len, "\n");
3250 3261
3251 return len; 3262 return len;
@@ -5855,8 +5866,10 @@ lpfc_debugfs_terminate(struct lpfc_vport *vport)
5855 atomic_dec(&lpfc_debugfs_hba_count); 5866 atomic_dec(&lpfc_debugfs_hba_count);
5856 } 5867 }
5857 5868
5858 debugfs_remove(lpfc_debugfs_root); /* lpfc */ 5869 if (atomic_read(&lpfc_debugfs_hba_count) == 0) {
5859 lpfc_debugfs_root = NULL; 5870 debugfs_remove(lpfc_debugfs_root); /* lpfc */
5871 lpfc_debugfs_root = NULL;
5872 }
5860 } 5873 }
5861#endif 5874#endif
5862 return; 5875 return;
diff --git a/drivers/scsi/lpfc/lpfc_disc.h b/drivers/scsi/lpfc/lpfc_disc.h
index 9d5a379f4b15..094c97b9e5f7 100644
--- a/drivers/scsi/lpfc/lpfc_disc.h
+++ b/drivers/scsi/lpfc/lpfc_disc.h
@@ -90,6 +90,7 @@ struct lpfc_nodelist {
90#define NLP_FCP_INITIATOR 0x10 /* entry is an FCP Initiator */ 90#define NLP_FCP_INITIATOR 0x10 /* entry is an FCP Initiator */
91#define NLP_NVME_TARGET 0x20 /* entry is a NVME Target */ 91#define NLP_NVME_TARGET 0x20 /* entry is a NVME Target */
92#define NLP_NVME_INITIATOR 0x40 /* entry is a NVME Initiator */ 92#define NLP_NVME_INITIATOR 0x40 /* entry is a NVME Initiator */
93#define NLP_NVME_DISCOVERY 0x80 /* entry has NVME disc srvc */
93 94
94 uint16_t nlp_fc4_type; /* FC types node supports. */ 95 uint16_t nlp_fc4_type; /* FC types node supports. */
95 /* Assigned from GID_FF, only 96 /* Assigned from GID_FF, only
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 67827e397431..8e532b39ae93 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -1047,6 +1047,13 @@ stop_rr_fcf_flogi:
1047 irsp->ulpStatus, irsp->un.ulpWord[4], 1047 irsp->ulpStatus, irsp->un.ulpWord[4],
1048 irsp->ulpTimeout); 1048 irsp->ulpTimeout);
1049 1049
1050
1051 /* If this is not a loop open failure, bail out */
1052 if (!(irsp->ulpStatus == IOSTAT_LOCAL_REJECT &&
1053 ((irsp->un.ulpWord[4] & IOERR_PARAM_MASK) ==
1054 IOERR_LOOP_OPEN_FAILURE)))
1055 goto flogifail;
1056
1050 /* FLOGI failed, so there is no fabric */ 1057 /* FLOGI failed, so there is no fabric */
1051 spin_lock_irq(shost->host_lock); 1058 spin_lock_irq(shost->host_lock);
1052 vport->fc_flag &= ~(FC_FABRIC | FC_PUBLIC_LOOP); 1059 vport->fc_flag &= ~(FC_FABRIC | FC_PUBLIC_LOOP);
@@ -2077,16 +2084,19 @@ lpfc_cmpl_els_prli(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
2077 2084
2078 if (irsp->ulpStatus) { 2085 if (irsp->ulpStatus) {
2079 /* Check for retry */ 2086 /* Check for retry */
2087 ndlp->fc4_prli_sent--;
2080 if (lpfc_els_retry(phba, cmdiocb, rspiocb)) { 2088 if (lpfc_els_retry(phba, cmdiocb, rspiocb)) {
2081 /* ELS command is being retried */ 2089 /* ELS command is being retried */
2082 ndlp->fc4_prli_sent--;
2083 goto out; 2090 goto out;
2084 } 2091 }
2092
2085 /* PRLI failed */ 2093 /* PRLI failed */
2086 lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, 2094 lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
2087 "2754 PRLI failure DID:%06X Status:x%x/x%x\n", 2095 "2754 PRLI failure DID:%06X Status:x%x/x%x, "
2096 "data: x%x\n",
2088 ndlp->nlp_DID, irsp->ulpStatus, 2097 ndlp->nlp_DID, irsp->ulpStatus,
2089 irsp->un.ulpWord[4]); 2098 irsp->un.ulpWord[4], ndlp->fc4_prli_sent);
2099
2090 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ 2100 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */
2091 if (lpfc_error_lost_link(irsp)) 2101 if (lpfc_error_lost_link(irsp))
2092 goto out; 2102 goto out;
@@ -7441,6 +7451,13 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport)
7441 */ 7451 */
7442 spin_lock_irq(&phba->hbalock); 7452 spin_lock_irq(&phba->hbalock);
7443 pring = lpfc_phba_elsring(phba); 7453 pring = lpfc_phba_elsring(phba);
7454
7455 /* Bail out if we've no ELS wq, like in PCI error recovery case. */
7456 if (unlikely(!pring)) {
7457 spin_unlock_irq(&phba->hbalock);
7458 return;
7459 }
7460
7444 if (phba->sli_rev == LPFC_SLI_REV4) 7461 if (phba->sli_rev == LPFC_SLI_REV4)
7445 spin_lock(&pring->ring_lock); 7462 spin_lock(&pring->ring_lock);
7446 7463
@@ -8667,7 +8684,8 @@ lpfc_cmpl_els_fdisc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
8667 lpfc_do_scr_ns_plogi(phba, vport); 8684 lpfc_do_scr_ns_plogi(phba, vport);
8668 goto out; 8685 goto out;
8669fdisc_failed: 8686fdisc_failed:
8670 if (vport->fc_vport->vport_state != FC_VPORT_NO_FABRIC_RSCS) 8687 if (vport->fc_vport &&
8688 (vport->fc_vport->vport_state != FC_VPORT_NO_FABRIC_RSCS))
8671 lpfc_vport_set_state(vport, FC_VPORT_FAILED); 8689 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
8672 /* Cancel discovery timer */ 8690 /* Cancel discovery timer */
8673 lpfc_can_disctmo(vport); 8691 lpfc_can_disctmo(vport);
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 0482c5580331..3ffcd9215ca8 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -693,15 +693,16 @@ lpfc_work_done(struct lpfc_hba *phba)
693 pring = lpfc_phba_elsring(phba); 693 pring = lpfc_phba_elsring(phba);
694 status = (ha_copy & (HA_RXMASK << (4*LPFC_ELS_RING))); 694 status = (ha_copy & (HA_RXMASK << (4*LPFC_ELS_RING)));
695 status >>= (4*LPFC_ELS_RING); 695 status >>= (4*LPFC_ELS_RING);
696 if ((status & HA_RXMASK) || 696 if (pring && (status & HA_RXMASK ||
697 (pring->flag & LPFC_DEFERRED_RING_EVENT) || 697 pring->flag & LPFC_DEFERRED_RING_EVENT ||
698 (phba->hba_flag & HBA_SP_QUEUE_EVT)) { 698 phba->hba_flag & HBA_SP_QUEUE_EVT)) {
699 if (pring->flag & LPFC_STOP_IOCB_EVENT) { 699 if (pring->flag & LPFC_STOP_IOCB_EVENT) {
700 pring->flag |= LPFC_DEFERRED_RING_EVENT; 700 pring->flag |= LPFC_DEFERRED_RING_EVENT;
701 /* Set the lpfc data pending flag */ 701 /* Set the lpfc data pending flag */
702 set_bit(LPFC_DATA_READY, &phba->data_flags); 702 set_bit(LPFC_DATA_READY, &phba->data_flags);
703 } else { 703 } else {
704 if (phba->link_state >= LPFC_LINK_UP) { 704 if (phba->link_state >= LPFC_LINK_UP ||
705 phba->link_flag & LS_MDS_LOOPBACK) {
705 pring->flag &= ~LPFC_DEFERRED_RING_EVENT; 706 pring->flag &= ~LPFC_DEFERRED_RING_EVENT;
706 lpfc_sli_handle_slow_ring_event(phba, pring, 707 lpfc_sli_handle_slow_ring_event(phba, pring,
707 (status & 708 (status &
diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
index 1d12f2be36bc..e0a5fce416ae 100644
--- a/drivers/scsi/lpfc/lpfc_hw4.h
+++ b/drivers/scsi/lpfc/lpfc_hw4.h
@@ -1356,6 +1356,7 @@ struct lpfc_mbx_wq_destroy {
1356 1356
1357#define LPFC_HDR_BUF_SIZE 128 1357#define LPFC_HDR_BUF_SIZE 128
1358#define LPFC_DATA_BUF_SIZE 2048 1358#define LPFC_DATA_BUF_SIZE 2048
1359#define LPFC_NVMET_DATA_BUF_SIZE 128
1359struct rq_context { 1360struct rq_context {
1360 uint32_t word0; 1361 uint32_t word0;
1361#define lpfc_rq_context_rqe_count_SHIFT 16 /* Version 0 Only */ 1362#define lpfc_rq_context_rqe_count_SHIFT 16 /* Version 0 Only */
@@ -4420,6 +4421,19 @@ struct fcp_treceive64_wqe {
4420}; 4421};
4421#define TXRDY_PAYLOAD_LEN 12 4422#define TXRDY_PAYLOAD_LEN 12
4422 4423
4424#define CMD_SEND_FRAME 0xE1
4425
4426struct send_frame_wqe {
4427 struct ulp_bde64 bde; /* words 0-2 */
4428 uint32_t frame_len; /* word 3 */
4429 uint32_t fc_hdr_wd0; /* word 4 */
4430 uint32_t fc_hdr_wd1; /* word 5 */
4431 struct wqe_common wqe_com; /* words 6-11 */
4432 uint32_t fc_hdr_wd2; /* word 12 */
4433 uint32_t fc_hdr_wd3; /* word 13 */
4434 uint32_t fc_hdr_wd4; /* word 14 */
4435 uint32_t fc_hdr_wd5; /* word 15 */
4436};
4423 4437
4424union lpfc_wqe { 4438union lpfc_wqe {
4425 uint32_t words[16]; 4439 uint32_t words[16];
@@ -4438,7 +4452,7 @@ union lpfc_wqe {
4438 struct fcp_trsp64_wqe fcp_trsp; 4452 struct fcp_trsp64_wqe fcp_trsp;
4439 struct fcp_tsend64_wqe fcp_tsend; 4453 struct fcp_tsend64_wqe fcp_tsend;
4440 struct fcp_treceive64_wqe fcp_treceive; 4454 struct fcp_treceive64_wqe fcp_treceive;
4441 4455 struct send_frame_wqe send_frame;
4442}; 4456};
4443 4457
4444union lpfc_wqe128 { 4458union lpfc_wqe128 {
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 4b1eb98c228d..9add9473cae5 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -1099,7 +1099,7 @@ lpfc_hba_down_post_s4(struct lpfc_hba *phba)
1099 1099
1100 list_for_each_entry_safe(ctxp, ctxp_next, &nvmet_aborts, list) { 1100 list_for_each_entry_safe(ctxp, ctxp_next, &nvmet_aborts, list) {
1101 ctxp->flag &= ~(LPFC_NVMET_XBUSY | LPFC_NVMET_ABORT_OP); 1101 ctxp->flag &= ~(LPFC_NVMET_XBUSY | LPFC_NVMET_ABORT_OP);
1102 lpfc_nvmet_rq_post(phba, ctxp, &ctxp->rqb_buffer->hbuf); 1102 lpfc_nvmet_ctxbuf_post(phba, ctxp->ctxbuf);
1103 } 1103 }
1104 } 1104 }
1105 1105
@@ -3381,7 +3381,7 @@ lpfc_sli4_nvmet_sgl_update(struct lpfc_hba *phba)
3381{ 3381{
3382 struct lpfc_sglq *sglq_entry = NULL, *sglq_entry_next = NULL; 3382 struct lpfc_sglq *sglq_entry = NULL, *sglq_entry_next = NULL;
3383 uint16_t i, lxri, xri_cnt, els_xri_cnt; 3383 uint16_t i, lxri, xri_cnt, els_xri_cnt;
3384 uint16_t nvmet_xri_cnt, tot_cnt; 3384 uint16_t nvmet_xri_cnt;
3385 LIST_HEAD(nvmet_sgl_list); 3385 LIST_HEAD(nvmet_sgl_list);
3386 int rc; 3386 int rc;
3387 3387
@@ -3389,15 +3389,9 @@ lpfc_sli4_nvmet_sgl_update(struct lpfc_hba *phba)
3389 * update on pci function's nvmet xri-sgl list 3389 * update on pci function's nvmet xri-sgl list
3390 */ 3390 */
3391 els_xri_cnt = lpfc_sli4_get_els_iocb_cnt(phba); 3391 els_xri_cnt = lpfc_sli4_get_els_iocb_cnt(phba);
3392 nvmet_xri_cnt = phba->cfg_nvmet_mrq * phba->cfg_nvmet_mrq_post; 3392
3393 tot_cnt = phba->sli4_hba.max_cfg_param.max_xri - els_xri_cnt; 3393 /* For NVMET, ALL remaining XRIs are dedicated for IO processing */
3394 if (nvmet_xri_cnt > tot_cnt) { 3394 nvmet_xri_cnt = phba->sli4_hba.max_cfg_param.max_xri - els_xri_cnt;
3395 phba->cfg_nvmet_mrq_post = tot_cnt / phba->cfg_nvmet_mrq;
3396 nvmet_xri_cnt = phba->cfg_nvmet_mrq * phba->cfg_nvmet_mrq_post;
3397 lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
3398 "6301 NVMET post-sgl count changed to %d\n",
3399 phba->cfg_nvmet_mrq_post);
3400 }
3401 3395
3402 if (nvmet_xri_cnt > phba->sli4_hba.nvmet_xri_cnt) { 3396 if (nvmet_xri_cnt > phba->sli4_hba.nvmet_xri_cnt) {
3403 /* els xri-sgl expanded */ 3397 /* els xri-sgl expanded */
@@ -4546,6 +4540,19 @@ lpfc_sli4_async_fc_evt(struct lpfc_hba *phba, struct lpfc_acqe_fc_la *acqe_fc)
4546 pmb->vport = phba->pport; 4540 pmb->vport = phba->pport;
4547 4541
4548 if (phba->sli4_hba.link_state.status != LPFC_FC_LA_TYPE_LINK_UP) { 4542 if (phba->sli4_hba.link_state.status != LPFC_FC_LA_TYPE_LINK_UP) {
4543 phba->link_flag &= ~(LS_MDS_LINK_DOWN | LS_MDS_LOOPBACK);
4544
4545 switch (phba->sli4_hba.link_state.status) {
4546 case LPFC_FC_LA_TYPE_MDS_LINK_DOWN:
4547 phba->link_flag |= LS_MDS_LINK_DOWN;
4548 break;
4549 case LPFC_FC_LA_TYPE_MDS_LOOPBACK:
4550 phba->link_flag |= LS_MDS_LOOPBACK;
4551 break;
4552 default:
4553 break;
4554 }
4555
4549 /* Parse and translate status field */ 4556 /* Parse and translate status field */
4550 mb = &pmb->u.mb; 4557 mb = &pmb->u.mb;
4551 mb->mbxStatus = lpfc_sli4_parse_latt_fault(phba, 4558 mb->mbxStatus = lpfc_sli4_parse_latt_fault(phba,
@@ -5830,6 +5837,9 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
5830 spin_lock_init(&phba->sli4_hba.abts_nvme_buf_list_lock); 5837 spin_lock_init(&phba->sli4_hba.abts_nvme_buf_list_lock);
5831 INIT_LIST_HEAD(&phba->sli4_hba.lpfc_abts_nvme_buf_list); 5838 INIT_LIST_HEAD(&phba->sli4_hba.lpfc_abts_nvme_buf_list);
5832 INIT_LIST_HEAD(&phba->sli4_hba.lpfc_abts_nvmet_ctx_list); 5839 INIT_LIST_HEAD(&phba->sli4_hba.lpfc_abts_nvmet_ctx_list);
5840 INIT_LIST_HEAD(&phba->sli4_hba.lpfc_nvmet_ctx_list);
5841 INIT_LIST_HEAD(&phba->sli4_hba.lpfc_nvmet_io_wait_list);
5842
5833 /* Fast-path XRI aborted CQ Event work queue list */ 5843 /* Fast-path XRI aborted CQ Event work queue list */
5834 INIT_LIST_HEAD(&phba->sli4_hba.sp_nvme_xri_aborted_work_queue); 5844 INIT_LIST_HEAD(&phba->sli4_hba.sp_nvme_xri_aborted_work_queue);
5835 } 5845 }
@@ -5837,6 +5847,7 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
5837 /* This abort list used by worker thread */ 5847 /* This abort list used by worker thread */
5838 spin_lock_init(&phba->sli4_hba.sgl_list_lock); 5848 spin_lock_init(&phba->sli4_hba.sgl_list_lock);
5839 spin_lock_init(&phba->sli4_hba.nvmet_io_lock); 5849 spin_lock_init(&phba->sli4_hba.nvmet_io_lock);
5850 spin_lock_init(&phba->sli4_hba.nvmet_io_wait_lock);
5840 5851
5841 /* 5852 /*
5842 * Initialize driver internal slow-path work queues 5853 * Initialize driver internal slow-path work queues
@@ -5951,16 +5962,21 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
5951 for (i = 0; i < lpfc_enable_nvmet_cnt; i++) { 5962 for (i = 0; i < lpfc_enable_nvmet_cnt; i++) {
5952 if (wwn == lpfc_enable_nvmet[i]) { 5963 if (wwn == lpfc_enable_nvmet[i]) {
5953#if (IS_ENABLED(CONFIG_NVME_TARGET_FC)) 5964#if (IS_ENABLED(CONFIG_NVME_TARGET_FC))
5965 if (lpfc_nvmet_mem_alloc(phba))
5966 break;
5967
5968 phba->nvmet_support = 1; /* a match */
5969
5954 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, 5970 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5955 "6017 NVME Target %016llx\n", 5971 "6017 NVME Target %016llx\n",
5956 wwn); 5972 wwn);
5957 phba->nvmet_support = 1; /* a match */
5958#else 5973#else
5959 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, 5974 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5960 "6021 Can't enable NVME Target." 5975 "6021 Can't enable NVME Target."
5961 " NVME_TARGET_FC infrastructure" 5976 " NVME_TARGET_FC infrastructure"
5962 " is not in kernel\n"); 5977 " is not in kernel\n");
5963#endif 5978#endif
5979 break;
5964 } 5980 }
5965 } 5981 }
5966 } 5982 }
@@ -6269,7 +6285,7 @@ lpfc_unset_driver_resource_phase2(struct lpfc_hba *phba)
6269 * 6285 *
6270 * This routine is invoked to free the driver's IOCB list and memory. 6286 * This routine is invoked to free the driver's IOCB list and memory.
6271 **/ 6287 **/
6272static void 6288void
6273lpfc_free_iocb_list(struct lpfc_hba *phba) 6289lpfc_free_iocb_list(struct lpfc_hba *phba)
6274{ 6290{
6275 struct lpfc_iocbq *iocbq_entry = NULL, *iocbq_next = NULL; 6291 struct lpfc_iocbq *iocbq_entry = NULL, *iocbq_next = NULL;
@@ -6297,7 +6313,7 @@ lpfc_free_iocb_list(struct lpfc_hba *phba)
6297 * 0 - successful 6313 * 0 - successful
6298 * other values - error 6314 * other values - error
6299 **/ 6315 **/
6300static int 6316int
6301lpfc_init_iocb_list(struct lpfc_hba *phba, int iocb_count) 6317lpfc_init_iocb_list(struct lpfc_hba *phba, int iocb_count)
6302{ 6318{
6303 struct lpfc_iocbq *iocbq_entry = NULL; 6319 struct lpfc_iocbq *iocbq_entry = NULL;
@@ -6525,7 +6541,6 @@ lpfc_sli4_create_rpi_hdr(struct lpfc_hba *phba)
6525 uint16_t rpi_limit, curr_rpi_range; 6541 uint16_t rpi_limit, curr_rpi_range;
6526 struct lpfc_dmabuf *dmabuf; 6542 struct lpfc_dmabuf *dmabuf;
6527 struct lpfc_rpi_hdr *rpi_hdr; 6543 struct lpfc_rpi_hdr *rpi_hdr;
6528 uint32_t rpi_count;
6529 6544
6530 /* 6545 /*
6531 * If the SLI4 port supports extents, posting the rpi header isn't 6546 * If the SLI4 port supports extents, posting the rpi header isn't
@@ -6538,8 +6553,7 @@ lpfc_sli4_create_rpi_hdr(struct lpfc_hba *phba)
6538 return NULL; 6553 return NULL;
6539 6554
6540 /* The limit on the logical index is just the max_rpi count. */ 6555 /* The limit on the logical index is just the max_rpi count. */
6541 rpi_limit = phba->sli4_hba.max_cfg_param.rpi_base + 6556 rpi_limit = phba->sli4_hba.max_cfg_param.max_rpi;
6542 phba->sli4_hba.max_cfg_param.max_rpi - 1;
6543 6557
6544 spin_lock_irq(&phba->hbalock); 6558 spin_lock_irq(&phba->hbalock);
6545 /* 6559 /*
@@ -6550,18 +6564,10 @@ lpfc_sli4_create_rpi_hdr(struct lpfc_hba *phba)
6550 curr_rpi_range = phba->sli4_hba.next_rpi; 6564 curr_rpi_range = phba->sli4_hba.next_rpi;
6551 spin_unlock_irq(&phba->hbalock); 6565 spin_unlock_irq(&phba->hbalock);
6552 6566
6553 /* 6567 /* Reached full RPI range */
6554 * The port has a limited number of rpis. The increment here 6568 if (curr_rpi_range == rpi_limit)
6555 * is LPFC_RPI_HDR_COUNT - 1 to account for the starting value
6556 * and to allow the full max_rpi range per port.
6557 */
6558 if ((curr_rpi_range + (LPFC_RPI_HDR_COUNT - 1)) > rpi_limit)
6559 rpi_count = rpi_limit - curr_rpi_range;
6560 else
6561 rpi_count = LPFC_RPI_HDR_COUNT;
6562
6563 if (!rpi_count)
6564 return NULL; 6569 return NULL;
6570
6565 /* 6571 /*
6566 * First allocate the protocol header region for the port. The 6572 * First allocate the protocol header region for the port. The
6567 * port expects a 4KB DMA-mapped memory region that is 4K aligned. 6573 * port expects a 4KB DMA-mapped memory region that is 4K aligned.
@@ -6595,13 +6601,9 @@ lpfc_sli4_create_rpi_hdr(struct lpfc_hba *phba)
6595 6601
6596 /* The rpi_hdr stores the logical index only. */ 6602 /* The rpi_hdr stores the logical index only. */
6597 rpi_hdr->start_rpi = curr_rpi_range; 6603 rpi_hdr->start_rpi = curr_rpi_range;
6604 rpi_hdr->next_rpi = phba->sli4_hba.next_rpi + LPFC_RPI_HDR_COUNT;
6598 list_add_tail(&rpi_hdr->list, &phba->sli4_hba.lpfc_rpi_hdr_list); 6605 list_add_tail(&rpi_hdr->list, &phba->sli4_hba.lpfc_rpi_hdr_list);
6599 6606
6600 /*
6601 * The next_rpi stores the next logical module-64 rpi value used
6602 * to post physical rpis in subsequent rpi postings.
6603 */
6604 phba->sli4_hba.next_rpi += rpi_count;
6605 spin_unlock_irq(&phba->hbalock); 6607 spin_unlock_irq(&phba->hbalock);
6606 return rpi_hdr; 6608 return rpi_hdr;
6607 6609
@@ -8172,7 +8174,7 @@ lpfc_sli4_queue_create(struct lpfc_hba *phba)
8172 /* Create NVMET Receive Queue for header */ 8174 /* Create NVMET Receive Queue for header */
8173 qdesc = lpfc_sli4_queue_alloc(phba, 8175 qdesc = lpfc_sli4_queue_alloc(phba,
8174 phba->sli4_hba.rq_esize, 8176 phba->sli4_hba.rq_esize,
8175 phba->sli4_hba.rq_ecount); 8177 LPFC_NVMET_RQE_DEF_COUNT);
8176 if (!qdesc) { 8178 if (!qdesc) {
8177 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, 8179 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
8178 "3146 Failed allocate " 8180 "3146 Failed allocate "
@@ -8194,7 +8196,7 @@ lpfc_sli4_queue_create(struct lpfc_hba *phba)
8194 /* Create NVMET Receive Queue for data */ 8196 /* Create NVMET Receive Queue for data */
8195 qdesc = lpfc_sli4_queue_alloc(phba, 8197 qdesc = lpfc_sli4_queue_alloc(phba,
8196 phba->sli4_hba.rq_esize, 8198 phba->sli4_hba.rq_esize,
8197 phba->sli4_hba.rq_ecount); 8199 LPFC_NVMET_RQE_DEF_COUNT);
8198 if (!qdesc) { 8200 if (!qdesc) {
8199 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, 8201 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
8200 "3156 Failed allocate " 8202 "3156 Failed allocate "
@@ -8326,46 +8328,6 @@ lpfc_sli4_queue_destroy(struct lpfc_hba *phba)
8326} 8328}
8327 8329
8328int 8330int
8329lpfc_post_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *hrq,
8330 struct lpfc_queue *drq, int count)
8331{
8332 int rc, i;
8333 struct lpfc_rqe hrqe;
8334 struct lpfc_rqe drqe;
8335 struct lpfc_rqb *rqbp;
8336 struct rqb_dmabuf *rqb_buffer;
8337 LIST_HEAD(rqb_buf_list);
8338
8339 rqbp = hrq->rqbp;
8340 for (i = 0; i < count; i++) {
8341 rqb_buffer = (rqbp->rqb_alloc_buffer)(phba);
8342 if (!rqb_buffer)
8343 break;
8344 rqb_buffer->hrq = hrq;
8345 rqb_buffer->drq = drq;
8346 list_add_tail(&rqb_buffer->hbuf.list, &rqb_buf_list);
8347 }
8348 while (!list_empty(&rqb_buf_list)) {
8349 list_remove_head(&rqb_buf_list, rqb_buffer, struct rqb_dmabuf,
8350 hbuf.list);
8351
8352 hrqe.address_lo = putPaddrLow(rqb_buffer->hbuf.phys);
8353 hrqe.address_hi = putPaddrHigh(rqb_buffer->hbuf.phys);
8354 drqe.address_lo = putPaddrLow(rqb_buffer->dbuf.phys);
8355 drqe.address_hi = putPaddrHigh(rqb_buffer->dbuf.phys);
8356 rc = lpfc_sli4_rq_put(hrq, drq, &hrqe, &drqe);
8357 if (rc < 0) {
8358 (rqbp->rqb_free_buffer)(phba, rqb_buffer);
8359 } else {
8360 list_add_tail(&rqb_buffer->hbuf.list,
8361 &rqbp->rqb_buffer_list);
8362 rqbp->buffer_count++;
8363 }
8364 }
8365 return 1;
8366}
8367
8368int
8369lpfc_free_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *rq) 8331lpfc_free_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *rq)
8370{ 8332{
8371 struct lpfc_rqb *rqbp; 8333 struct lpfc_rqb *rqbp;
@@ -8784,9 +8746,6 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
8784 goto out_destroy; 8746 goto out_destroy;
8785 } 8747 }
8786 8748
8787 lpfc_rq_adjust_repost(phba, phba->sli4_hba.hdr_rq, LPFC_ELS_HBQ);
8788 lpfc_rq_adjust_repost(phba, phba->sli4_hba.dat_rq, LPFC_ELS_HBQ);
8789
8790 rc = lpfc_rq_create(phba, phba->sli4_hba.hdr_rq, phba->sli4_hba.dat_rq, 8749 rc = lpfc_rq_create(phba, phba->sli4_hba.hdr_rq, phba->sli4_hba.dat_rq,
8791 phba->sli4_hba.els_cq, LPFC_USOL); 8750 phba->sli4_hba.els_cq, LPFC_USOL);
8792 if (rc) { 8751 if (rc) {
@@ -11110,7 +11069,7 @@ lpfc_pci_probe_one_s4(struct pci_dev *pdev, const struct pci_device_id *pid)
11110 struct lpfc_hba *phba; 11069 struct lpfc_hba *phba;
11111 struct lpfc_vport *vport = NULL; 11070 struct lpfc_vport *vport = NULL;
11112 struct Scsi_Host *shost = NULL; 11071 struct Scsi_Host *shost = NULL;
11113 int error, cnt; 11072 int error;
11114 uint32_t cfg_mode, intr_mode; 11073 uint32_t cfg_mode, intr_mode;
11115 11074
11116 /* Allocate memory for HBA structure */ 11075 /* Allocate memory for HBA structure */
@@ -11144,22 +11103,6 @@ lpfc_pci_probe_one_s4(struct pci_dev *pdev, const struct pci_device_id *pid)
11144 goto out_unset_pci_mem_s4; 11103 goto out_unset_pci_mem_s4;
11145 } 11104 }
11146 11105
11147 cnt = phba->cfg_iocb_cnt * 1024;
11148 if (phba->nvmet_support)
11149 cnt += phba->cfg_nvmet_mrq_post * phba->cfg_nvmet_mrq;
11150
11151 /* Initialize and populate the iocb list per host */
11152 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
11153 "2821 initialize iocb list %d total %d\n",
11154 phba->cfg_iocb_cnt, cnt);
11155 error = lpfc_init_iocb_list(phba, cnt);
11156
11157 if (error) {
11158 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
11159 "1413 Failed to initialize iocb list.\n");
11160 goto out_unset_driver_resource_s4;
11161 }
11162
11163 INIT_LIST_HEAD(&phba->active_rrq_list); 11106 INIT_LIST_HEAD(&phba->active_rrq_list);
11164 INIT_LIST_HEAD(&phba->fcf.fcf_pri_list); 11107 INIT_LIST_HEAD(&phba->fcf.fcf_pri_list);
11165 11108
@@ -11168,7 +11111,7 @@ lpfc_pci_probe_one_s4(struct pci_dev *pdev, const struct pci_device_id *pid)
11168 if (error) { 11111 if (error) {
11169 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, 11112 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
11170 "1414 Failed to set up driver resource.\n"); 11113 "1414 Failed to set up driver resource.\n");
11171 goto out_free_iocb_list; 11114 goto out_unset_driver_resource_s4;
11172 } 11115 }
11173 11116
11174 /* Get the default values for Model Name and Description */ 11117 /* Get the default values for Model Name and Description */
@@ -11268,8 +11211,6 @@ out_destroy_shost:
11268 lpfc_destroy_shost(phba); 11211 lpfc_destroy_shost(phba);
11269out_unset_driver_resource: 11212out_unset_driver_resource:
11270 lpfc_unset_driver_resource_phase2(phba); 11213 lpfc_unset_driver_resource_phase2(phba);
11271out_free_iocb_list:
11272 lpfc_free_iocb_list(phba);
11273out_unset_driver_resource_s4: 11214out_unset_driver_resource_s4:
11274 lpfc_sli4_driver_resource_unset(phba); 11215 lpfc_sli4_driver_resource_unset(phba);
11275out_unset_pci_mem_s4: 11216out_unset_pci_mem_s4:
diff --git a/drivers/scsi/lpfc/lpfc_mem.c b/drivers/scsi/lpfc/lpfc_mem.c
index 5986c7957199..fcc05a1517c2 100644
--- a/drivers/scsi/lpfc/lpfc_mem.c
+++ b/drivers/scsi/lpfc/lpfc_mem.c
@@ -214,6 +214,21 @@ fail_free_drb_pool:
214 return -ENOMEM; 214 return -ENOMEM;
215} 215}
216 216
217int
218lpfc_nvmet_mem_alloc(struct lpfc_hba *phba)
219{
220 phba->lpfc_nvmet_drb_pool =
221 pci_pool_create("lpfc_nvmet_drb_pool",
222 phba->pcidev, LPFC_NVMET_DATA_BUF_SIZE,
223 SGL_ALIGN_SZ, 0);
224 if (!phba->lpfc_nvmet_drb_pool) {
225 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
226 "6024 Can't enable NVME Target - no memory\n");
227 return -ENOMEM;
228 }
229 return 0;
230}
231
217/** 232/**
218 * lpfc_mem_free - Frees memory allocated by lpfc_mem_alloc 233 * lpfc_mem_free - Frees memory allocated by lpfc_mem_alloc
219 * @phba: HBA to free memory for 234 * @phba: HBA to free memory for
@@ -232,6 +247,9 @@ lpfc_mem_free(struct lpfc_hba *phba)
232 247
233 /* Free HBQ pools */ 248 /* Free HBQ pools */
234 lpfc_sli_hbqbuf_free_all(phba); 249 lpfc_sli_hbqbuf_free_all(phba);
250 if (phba->lpfc_nvmet_drb_pool)
251 pci_pool_destroy(phba->lpfc_nvmet_drb_pool);
252 phba->lpfc_nvmet_drb_pool = NULL;
235 if (phba->lpfc_drb_pool) 253 if (phba->lpfc_drb_pool)
236 pci_pool_destroy(phba->lpfc_drb_pool); 254 pci_pool_destroy(phba->lpfc_drb_pool);
237 phba->lpfc_drb_pool = NULL; 255 phba->lpfc_drb_pool = NULL;
@@ -611,8 +629,6 @@ struct rqb_dmabuf *
611lpfc_sli4_nvmet_alloc(struct lpfc_hba *phba) 629lpfc_sli4_nvmet_alloc(struct lpfc_hba *phba)
612{ 630{
613 struct rqb_dmabuf *dma_buf; 631 struct rqb_dmabuf *dma_buf;
614 struct lpfc_iocbq *nvmewqe;
615 union lpfc_wqe128 *wqe;
616 632
617 dma_buf = kzalloc(sizeof(struct rqb_dmabuf), GFP_KERNEL); 633 dma_buf = kzalloc(sizeof(struct rqb_dmabuf), GFP_KERNEL);
618 if (!dma_buf) 634 if (!dma_buf)
@@ -624,69 +640,15 @@ lpfc_sli4_nvmet_alloc(struct lpfc_hba *phba)
624 kfree(dma_buf); 640 kfree(dma_buf);
625 return NULL; 641 return NULL;
626 } 642 }
627 dma_buf->dbuf.virt = pci_pool_alloc(phba->lpfc_drb_pool, GFP_KERNEL, 643 dma_buf->dbuf.virt = pci_pool_alloc(phba->lpfc_nvmet_drb_pool,
628 &dma_buf->dbuf.phys); 644 GFP_KERNEL, &dma_buf->dbuf.phys);
629 if (!dma_buf->dbuf.virt) { 645 if (!dma_buf->dbuf.virt) {
630 pci_pool_free(phba->lpfc_hrb_pool, dma_buf->hbuf.virt, 646 pci_pool_free(phba->lpfc_hrb_pool, dma_buf->hbuf.virt,
631 dma_buf->hbuf.phys); 647 dma_buf->hbuf.phys);
632 kfree(dma_buf); 648 kfree(dma_buf);
633 return NULL; 649 return NULL;
634 } 650 }
635 dma_buf->total_size = LPFC_DATA_BUF_SIZE; 651 dma_buf->total_size = LPFC_NVMET_DATA_BUF_SIZE;
636
637 dma_buf->context = kzalloc(sizeof(struct lpfc_nvmet_rcv_ctx),
638 GFP_KERNEL);
639 if (!dma_buf->context) {
640 pci_pool_free(phba->lpfc_drb_pool, dma_buf->dbuf.virt,
641 dma_buf->dbuf.phys);
642 pci_pool_free(phba->lpfc_hrb_pool, dma_buf->hbuf.virt,
643 dma_buf->hbuf.phys);
644 kfree(dma_buf);
645 return NULL;
646 }
647
648 dma_buf->iocbq = lpfc_sli_get_iocbq(phba);
649 if (!dma_buf->iocbq) {
650 kfree(dma_buf->context);
651 pci_pool_free(phba->lpfc_drb_pool, dma_buf->dbuf.virt,
652 dma_buf->dbuf.phys);
653 pci_pool_free(phba->lpfc_hrb_pool, dma_buf->hbuf.virt,
654 dma_buf->hbuf.phys);
655 kfree(dma_buf);
656 lpfc_printf_log(phba, KERN_ERR, LOG_NVME,
657 "2621 Ran out of nvmet iocb/WQEs\n");
658 return NULL;
659 }
660 dma_buf->iocbq->iocb_flag = LPFC_IO_NVMET;
661 nvmewqe = dma_buf->iocbq;
662 wqe = (union lpfc_wqe128 *)&nvmewqe->wqe;
663 /* Initialize WQE */
664 memset(wqe, 0, sizeof(union lpfc_wqe));
665 /* Word 7 */
666 bf_set(wqe_ct, &wqe->generic.wqe_com, SLI4_CT_RPI);
667 bf_set(wqe_class, &wqe->generic.wqe_com, CLASS3);
668 bf_set(wqe_pu, &wqe->generic.wqe_com, 1);
669 /* Word 10 */
670 bf_set(wqe_nvme, &wqe->fcp_tsend.wqe_com, 1);
671 bf_set(wqe_ebde_cnt, &wqe->generic.wqe_com, 0);
672 bf_set(wqe_qosd, &wqe->generic.wqe_com, 0);
673
674 dma_buf->iocbq->context1 = NULL;
675 spin_lock(&phba->sli4_hba.sgl_list_lock);
676 dma_buf->sglq = __lpfc_sli_get_nvmet_sglq(phba, dma_buf->iocbq);
677 spin_unlock(&phba->sli4_hba.sgl_list_lock);
678 if (!dma_buf->sglq) {
679 lpfc_sli_release_iocbq(phba, dma_buf->iocbq);
680 kfree(dma_buf->context);
681 pci_pool_free(phba->lpfc_drb_pool, dma_buf->dbuf.virt,
682 dma_buf->dbuf.phys);
683 pci_pool_free(phba->lpfc_hrb_pool, dma_buf->hbuf.virt,
684 dma_buf->hbuf.phys);
685 kfree(dma_buf);
686 lpfc_printf_log(phba, KERN_ERR, LOG_NVME,
687 "6132 Ran out of nvmet XRIs\n");
688 return NULL;
689 }
690 return dma_buf; 652 return dma_buf;
691} 653}
692 654
@@ -705,20 +667,9 @@ lpfc_sli4_nvmet_alloc(struct lpfc_hba *phba)
705void 667void
706lpfc_sli4_nvmet_free(struct lpfc_hba *phba, struct rqb_dmabuf *dmab) 668lpfc_sli4_nvmet_free(struct lpfc_hba *phba, struct rqb_dmabuf *dmab)
707{ 669{
708 unsigned long flags;
709
710 __lpfc_clear_active_sglq(phba, dmab->sglq->sli4_lxritag);
711 dmab->sglq->state = SGL_FREED;
712 dmab->sglq->ndlp = NULL;
713
714 spin_lock_irqsave(&phba->sli4_hba.sgl_list_lock, flags);
715 list_add_tail(&dmab->sglq->list, &phba->sli4_hba.lpfc_nvmet_sgl_list);
716 spin_unlock_irqrestore(&phba->sli4_hba.sgl_list_lock, flags);
717
718 lpfc_sli_release_iocbq(phba, dmab->iocbq);
719 kfree(dmab->context);
720 pci_pool_free(phba->lpfc_hrb_pool, dmab->hbuf.virt, dmab->hbuf.phys); 670 pci_pool_free(phba->lpfc_hrb_pool, dmab->hbuf.virt, dmab->hbuf.phys);
721 pci_pool_free(phba->lpfc_drb_pool, dmab->dbuf.virt, dmab->dbuf.phys); 671 pci_pool_free(phba->lpfc_nvmet_drb_pool,
672 dmab->dbuf.virt, dmab->dbuf.phys);
722 kfree(dmab); 673 kfree(dmab);
723} 674}
724 675
@@ -803,6 +754,11 @@ lpfc_rq_buf_free(struct lpfc_hba *phba, struct lpfc_dmabuf *mp)
803 rc = lpfc_sli4_rq_put(rqb_entry->hrq, rqb_entry->drq, &hrqe, &drqe); 754 rc = lpfc_sli4_rq_put(rqb_entry->hrq, rqb_entry->drq, &hrqe, &drqe);
804 if (rc < 0) { 755 if (rc < 0) {
805 (rqbp->rqb_free_buffer)(phba, rqb_entry); 756 (rqbp->rqb_free_buffer)(phba, rqb_entry);
757 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
758 "6409 Cannot post to RQ %d: %x %x\n",
759 rqb_entry->hrq->queue_id,
760 rqb_entry->hrq->host_index,
761 rqb_entry->hrq->hba_index);
806 } else { 762 } else {
807 list_add_tail(&rqb_entry->hbuf.list, &rqbp->rqb_buffer_list); 763 list_add_tail(&rqb_entry->hbuf.list, &rqbp->rqb_buffer_list);
808 rqbp->buffer_count++; 764 rqbp->buffer_count++;
diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
index 8777c2d5f50d..f74cb0142fd4 100644
--- a/drivers/scsi/lpfc/lpfc_nportdisc.c
+++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
@@ -206,7 +206,7 @@ lpfc_check_elscmpl_iocb(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
206 * associated with a LPFC_NODELIST entry. This 206 * associated with a LPFC_NODELIST entry. This
207 * routine effectively results in a "software abort". 207 * routine effectively results in a "software abort".
208 */ 208 */
209int 209void
210lpfc_els_abort(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) 210lpfc_els_abort(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
211{ 211{
212 LIST_HEAD(abort_list); 212 LIST_HEAD(abort_list);
@@ -215,6 +215,10 @@ lpfc_els_abort(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
215 215
216 pring = lpfc_phba_elsring(phba); 216 pring = lpfc_phba_elsring(phba);
217 217
218 /* In case of error recovery path, we might have a NULL pring here */
219 if (!pring)
220 return;
221
218 /* Abort outstanding I/O on NPort <nlp_DID> */ 222 /* Abort outstanding I/O on NPort <nlp_DID> */
219 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_DISCOVERY, 223 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_DISCOVERY,
220 "2819 Abort outstanding I/O on NPort x%x " 224 "2819 Abort outstanding I/O on NPort x%x "
@@ -273,7 +277,6 @@ lpfc_els_abort(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
273 IOSTAT_LOCAL_REJECT, IOERR_SLI_ABORTED); 277 IOSTAT_LOCAL_REJECT, IOERR_SLI_ABORTED);
274 278
275 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp); 279 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp);
276 return 0;
277} 280}
278 281
279static int 282static int
@@ -1944,7 +1947,13 @@ lpfc_cmpl_prli_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1944 1947
1945 /* Target driver cannot solicit NVME FB. */ 1948 /* Target driver cannot solicit NVME FB. */
1946 if (bf_get_be32(prli_tgt, nvpr)) { 1949 if (bf_get_be32(prli_tgt, nvpr)) {
1950 /* Complete the nvme target roles. The transport
1951 * needs to know if the rport is capable of
1952 * discovery in addition to its role.
1953 */
1947 ndlp->nlp_type |= NLP_NVME_TARGET; 1954 ndlp->nlp_type |= NLP_NVME_TARGET;
1955 if (bf_get_be32(prli_disc, nvpr))
1956 ndlp->nlp_type |= NLP_NVME_DISCOVERY;
1948 if ((bf_get_be32(prli_fba, nvpr) == 1) && 1957 if ((bf_get_be32(prli_fba, nvpr) == 1) &&
1949 (bf_get_be32(prli_fb_sz, nvpr) > 0) && 1958 (bf_get_be32(prli_fb_sz, nvpr) > 0) &&
1950 (phba->cfg_nvme_enable_fb) && 1959 (phba->cfg_nvme_enable_fb) &&
diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
index 0488580eea12..518b15e6f222 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.c
+++ b/drivers/scsi/lpfc/lpfc_nvmet.c
@@ -142,7 +142,7 @@ out:
142} 142}
143 143
144/** 144/**
145 * lpfc_nvmet_rq_post - Repost a NVMET RQ DMA buffer and clean up context 145 * lpfc_nvmet_ctxbuf_post - Repost a NVMET RQ DMA buffer and clean up context
146 * @phba: HBA buffer is associated with 146 * @phba: HBA buffer is associated with
147 * @ctxp: context to clean up 147 * @ctxp: context to clean up
148 * @mp: Buffer to free 148 * @mp: Buffer to free
@@ -155,24 +155,113 @@ out:
155 * Returns: None 155 * Returns: None
156 **/ 156 **/
157void 157void
158lpfc_nvmet_rq_post(struct lpfc_hba *phba, struct lpfc_nvmet_rcv_ctx *ctxp, 158lpfc_nvmet_ctxbuf_post(struct lpfc_hba *phba, struct lpfc_nvmet_ctxbuf *ctx_buf)
159 struct lpfc_dmabuf *mp)
160{ 159{
161 if (ctxp) { 160#if (IS_ENABLED(CONFIG_NVME_TARGET_FC))
162 if (ctxp->flag) 161 struct lpfc_nvmet_rcv_ctx *ctxp = ctx_buf->context;
163 lpfc_printf_log(phba, KERN_INFO, LOG_NVME_ABTS, 162 struct lpfc_nvmet_tgtport *tgtp;
164 "6314 rq_post ctx xri x%x flag x%x\n", 163 struct fc_frame_header *fc_hdr;
165 ctxp->oxid, ctxp->flag); 164 struct rqb_dmabuf *nvmebuf;
166 165 struct lpfc_dmabuf *hbufp;
167 if (ctxp->txrdy) { 166 uint32_t *payload;
168 pci_pool_free(phba->txrdy_payload_pool, ctxp->txrdy, 167 uint32_t size, oxid, sid, rc;
169 ctxp->txrdy_phys); 168 unsigned long iflag;
170 ctxp->txrdy = NULL; 169
171 ctxp->txrdy_phys = 0; 170 if (ctxp->txrdy) {
171 pci_pool_free(phba->txrdy_payload_pool, ctxp->txrdy,
172 ctxp->txrdy_phys);
173 ctxp->txrdy = NULL;
174 ctxp->txrdy_phys = 0;
175 }
176 ctxp->state = LPFC_NVMET_STE_FREE;
177
178 spin_lock_irqsave(&phba->sli4_hba.nvmet_io_wait_lock, iflag);
179 if (phba->sli4_hba.nvmet_io_wait_cnt) {
180 hbufp = &nvmebuf->hbuf;
181 list_remove_head(&phba->sli4_hba.lpfc_nvmet_io_wait_list,
182 nvmebuf, struct rqb_dmabuf,
183 hbuf.list);
184 phba->sli4_hba.nvmet_io_wait_cnt--;
185 spin_unlock_irqrestore(&phba->sli4_hba.nvmet_io_wait_lock,
186 iflag);
187
188 fc_hdr = (struct fc_frame_header *)(nvmebuf->hbuf.virt);
189 oxid = be16_to_cpu(fc_hdr->fh_ox_id);
190 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
191 payload = (uint32_t *)(nvmebuf->dbuf.virt);
192 size = nvmebuf->bytes_recv;
193 sid = sli4_sid_from_fc_hdr(fc_hdr);
194
195 ctxp = (struct lpfc_nvmet_rcv_ctx *)ctx_buf->context;
196 memset(ctxp, 0, sizeof(ctxp->ctx));
197 ctxp->wqeq = NULL;
198 ctxp->txrdy = NULL;
199 ctxp->offset = 0;
200 ctxp->phba = phba;
201 ctxp->size = size;
202 ctxp->oxid = oxid;
203 ctxp->sid = sid;
204 ctxp->state = LPFC_NVMET_STE_RCV;
205 ctxp->entry_cnt = 1;
206 ctxp->flag = 0;
207 ctxp->ctxbuf = ctx_buf;
208 spin_lock_init(&ctxp->ctxlock);
209
210#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
211 if (phba->ktime_on) {
212 ctxp->ts_cmd_nvme = ktime_get_ns();
213 ctxp->ts_isr_cmd = ctxp->ts_cmd_nvme;
214 ctxp->ts_nvme_data = 0;
215 ctxp->ts_data_wqput = 0;
216 ctxp->ts_isr_data = 0;
217 ctxp->ts_data_nvme = 0;
218 ctxp->ts_nvme_status = 0;
219 ctxp->ts_status_wqput = 0;
220 ctxp->ts_isr_status = 0;
221 ctxp->ts_status_nvme = 0;
172 } 222 }
173 ctxp->state = LPFC_NVMET_STE_FREE; 223#endif
224 atomic_inc(&tgtp->rcv_fcp_cmd_in);
225 /*
226 * The calling sequence should be:
227 * nvmet_fc_rcv_fcp_req->lpfc_nvmet_xmt_fcp_op/cmp- req->done
228 * lpfc_nvmet_xmt_fcp_op_cmp should free the allocated ctxp.
229 * When we return from nvmet_fc_rcv_fcp_req, all relevant info
230 * the NVME command / FC header is stored.
231 * A buffer has already been reposted for this IO, so just free
232 * the nvmebuf.
233 */
234 rc = nvmet_fc_rcv_fcp_req(phba->targetport, &ctxp->ctx.fcp_req,
235 payload, size);
236
237 /* Process FCP command */
238 if (rc == 0) {
239 atomic_inc(&tgtp->rcv_fcp_cmd_out);
240 nvmebuf->hrq->rqbp->rqb_free_buffer(phba, nvmebuf);
241 return;
242 }
243
244 atomic_inc(&tgtp->rcv_fcp_cmd_drop);
245 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR,
246 "2582 FCP Drop IO x%x: err x%x: x%x x%x x%x\n",
247 ctxp->oxid, rc,
248 atomic_read(&tgtp->rcv_fcp_cmd_in),
249 atomic_read(&tgtp->rcv_fcp_cmd_out),
250 atomic_read(&tgtp->xmt_fcp_release));
251
252 lpfc_nvmet_defer_release(phba, ctxp);
253 lpfc_nvmet_unsol_fcp_issue_abort(phba, ctxp, sid, oxid);
254 nvmebuf->hrq->rqbp->rqb_free_buffer(phba, nvmebuf);
255 return;
174 } 256 }
175 lpfc_rq_buf_free(phba, mp); 257 spin_unlock_irqrestore(&phba->sli4_hba.nvmet_io_wait_lock, iflag);
258
259 spin_lock_irqsave(&phba->sli4_hba.nvmet_io_lock, iflag);
260 list_add_tail(&ctx_buf->list,
261 &phba->sli4_hba.lpfc_nvmet_ctx_list);
262 phba->sli4_hba.nvmet_ctx_cnt++;
263 spin_unlock_irqrestore(&phba->sli4_hba.nvmet_io_lock, iflag);
264#endif
176} 265}
177 266
178#ifdef CONFIG_SCSI_LPFC_DEBUG_FS 267#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
@@ -502,6 +591,7 @@ lpfc_nvmet_xmt_ls_rsp(struct nvmet_fc_target_port *tgtport,
502 "6150 LS Drop IO x%x: Prep\n", 591 "6150 LS Drop IO x%x: Prep\n",
503 ctxp->oxid); 592 ctxp->oxid);
504 lpfc_in_buf_free(phba, &nvmebuf->dbuf); 593 lpfc_in_buf_free(phba, &nvmebuf->dbuf);
594 atomic_inc(&nvmep->xmt_ls_abort);
505 lpfc_nvmet_unsol_ls_issue_abort(phba, ctxp, 595 lpfc_nvmet_unsol_ls_issue_abort(phba, ctxp,
506 ctxp->sid, ctxp->oxid); 596 ctxp->sid, ctxp->oxid);
507 return -ENOMEM; 597 return -ENOMEM;
@@ -545,6 +635,7 @@ lpfc_nvmet_xmt_ls_rsp(struct nvmet_fc_target_port *tgtport,
545 lpfc_nlp_put(nvmewqeq->context1); 635 lpfc_nlp_put(nvmewqeq->context1);
546 636
547 lpfc_in_buf_free(phba, &nvmebuf->dbuf); 637 lpfc_in_buf_free(phba, &nvmebuf->dbuf);
638 atomic_inc(&nvmep->xmt_ls_abort);
548 lpfc_nvmet_unsol_ls_issue_abort(phba, ctxp, ctxp->sid, ctxp->oxid); 639 lpfc_nvmet_unsol_ls_issue_abort(phba, ctxp, ctxp->sid, ctxp->oxid);
549 return -ENXIO; 640 return -ENXIO;
550} 641}
@@ -612,9 +703,9 @@ lpfc_nvmet_xmt_fcp_op(struct nvmet_fc_target_port *tgtport,
612 lpfc_nvmeio_data(phba, "NVMET FCP CMND: xri x%x op x%x len x%x\n", 703 lpfc_nvmeio_data(phba, "NVMET FCP CMND: xri x%x op x%x len x%x\n",
613 ctxp->oxid, rsp->op, rsp->rsplen); 704 ctxp->oxid, rsp->op, rsp->rsplen);
614 705
706 ctxp->flag |= LPFC_NVMET_IO_INP;
615 rc = lpfc_sli4_issue_wqe(phba, LPFC_FCP_RING, nvmewqeq); 707 rc = lpfc_sli4_issue_wqe(phba, LPFC_FCP_RING, nvmewqeq);
616 if (rc == WQE_SUCCESS) { 708 if (rc == WQE_SUCCESS) {
617 ctxp->flag |= LPFC_NVMET_IO_INP;
618#ifdef CONFIG_SCSI_LPFC_DEBUG_FS 709#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
619 if (!phba->ktime_on) 710 if (!phba->ktime_on)
620 return 0; 711 return 0;
@@ -692,6 +783,7 @@ static void
692lpfc_nvmet_xmt_fcp_release(struct nvmet_fc_target_port *tgtport, 783lpfc_nvmet_xmt_fcp_release(struct nvmet_fc_target_port *tgtport,
693 struct nvmefc_tgt_fcp_req *rsp) 784 struct nvmefc_tgt_fcp_req *rsp)
694{ 785{
786 struct lpfc_nvmet_tgtport *lpfc_nvmep = tgtport->private;
695 struct lpfc_nvmet_rcv_ctx *ctxp = 787 struct lpfc_nvmet_rcv_ctx *ctxp =
696 container_of(rsp, struct lpfc_nvmet_rcv_ctx, ctx.fcp_req); 788 container_of(rsp, struct lpfc_nvmet_rcv_ctx, ctx.fcp_req);
697 struct lpfc_hba *phba = ctxp->phba; 789 struct lpfc_hba *phba = ctxp->phba;
@@ -707,13 +799,15 @@ lpfc_nvmet_xmt_fcp_release(struct nvmet_fc_target_port *tgtport,
707 } 799 }
708 spin_unlock_irqrestore(&ctxp->ctxlock, flags); 800 spin_unlock_irqrestore(&ctxp->ctxlock, flags);
709 801
710 lpfc_nvmeio_data(phba, "NVMET FCP FREE: xri x%x ste %d\n", ctxp->oxid, 802 lpfc_nvmeio_data(phba, "NVMET FCP FREE: xri x%x ste %d abt %d\n", ctxp->oxid,
711 ctxp->state, 0); 803 ctxp->state, aborting);
804
805 atomic_inc(&lpfc_nvmep->xmt_fcp_release);
712 806
713 if (aborting) 807 if (aborting)
714 return; 808 return;
715 809
716 lpfc_nvmet_rq_post(phba, ctxp, &ctxp->rqb_buffer->hbuf); 810 lpfc_nvmet_ctxbuf_post(phba, ctxp->ctxbuf);
717} 811}
718 812
719static struct nvmet_fc_target_template lpfc_tgttemplate = { 813static struct nvmet_fc_target_template lpfc_tgttemplate = {
@@ -734,17 +828,128 @@ static struct nvmet_fc_target_template lpfc_tgttemplate = {
734 .target_priv_sz = sizeof(struct lpfc_nvmet_tgtport), 828 .target_priv_sz = sizeof(struct lpfc_nvmet_tgtport),
735}; 829};
736 830
831void
832lpfc_nvmet_cleanup_io_context(struct lpfc_hba *phba)
833{
834 struct lpfc_nvmet_ctxbuf *ctx_buf, *next_ctx_buf;
835 unsigned long flags;
836
837 list_for_each_entry_safe(
838 ctx_buf, next_ctx_buf,
839 &phba->sli4_hba.lpfc_nvmet_ctx_list, list) {
840 spin_lock_irqsave(
841 &phba->sli4_hba.abts_nvme_buf_list_lock, flags);
842 list_del_init(&ctx_buf->list);
843 spin_unlock_irqrestore(
844 &phba->sli4_hba.abts_nvme_buf_list_lock, flags);
845 __lpfc_clear_active_sglq(phba,
846 ctx_buf->sglq->sli4_lxritag);
847 ctx_buf->sglq->state = SGL_FREED;
848 ctx_buf->sglq->ndlp = NULL;
849
850 spin_lock_irqsave(&phba->sli4_hba.sgl_list_lock, flags);
851 list_add_tail(&ctx_buf->sglq->list,
852 &phba->sli4_hba.lpfc_nvmet_sgl_list);
853 spin_unlock_irqrestore(&phba->sli4_hba.sgl_list_lock,
854 flags);
855
856 lpfc_sli_release_iocbq(phba, ctx_buf->iocbq);
857 kfree(ctx_buf->context);
858 }
859}
860
861int
862lpfc_nvmet_setup_io_context(struct lpfc_hba *phba)
863{
864 struct lpfc_nvmet_ctxbuf *ctx_buf;
865 struct lpfc_iocbq *nvmewqe;
866 union lpfc_wqe128 *wqe;
867 int i;
868
869 lpfc_printf_log(phba, KERN_INFO, LOG_NVME,
870 "6403 Allocate NVMET resources for %d XRIs\n",
871 phba->sli4_hba.nvmet_xri_cnt);
872
873 /* For all nvmet xris, allocate resources needed to process a
874 * received command on a per xri basis.
875 */
876 for (i = 0; i < phba->sli4_hba.nvmet_xri_cnt; i++) {
877 ctx_buf = kzalloc(sizeof(*ctx_buf), GFP_KERNEL);
878 if (!ctx_buf) {
879 lpfc_printf_log(phba, KERN_ERR, LOG_NVME,
880 "6404 Ran out of memory for NVMET\n");
881 return -ENOMEM;
882 }
883
884 ctx_buf->context = kzalloc(sizeof(*ctx_buf->context),
885 GFP_KERNEL);
886 if (!ctx_buf->context) {
887 kfree(ctx_buf);
888 lpfc_printf_log(phba, KERN_ERR, LOG_NVME,
889 "6405 Ran out of NVMET "
890 "context memory\n");
891 return -ENOMEM;
892 }
893 ctx_buf->context->ctxbuf = ctx_buf;
894
895 ctx_buf->iocbq = lpfc_sli_get_iocbq(phba);
896 if (!ctx_buf->iocbq) {
897 kfree(ctx_buf->context);
898 kfree(ctx_buf);
899 lpfc_printf_log(phba, KERN_ERR, LOG_NVME,
900 "6406 Ran out of NVMET iocb/WQEs\n");
901 return -ENOMEM;
902 }
903 ctx_buf->iocbq->iocb_flag = LPFC_IO_NVMET;
904 nvmewqe = ctx_buf->iocbq;
905 wqe = (union lpfc_wqe128 *)&nvmewqe->wqe;
906 /* Initialize WQE */
907 memset(wqe, 0, sizeof(union lpfc_wqe));
908 /* Word 7 */
909 bf_set(wqe_ct, &wqe->generic.wqe_com, SLI4_CT_RPI);
910 bf_set(wqe_class, &wqe->generic.wqe_com, CLASS3);
911 bf_set(wqe_pu, &wqe->generic.wqe_com, 1);
912 /* Word 10 */
913 bf_set(wqe_nvme, &wqe->fcp_tsend.wqe_com, 1);
914 bf_set(wqe_ebde_cnt, &wqe->generic.wqe_com, 0);
915 bf_set(wqe_qosd, &wqe->generic.wqe_com, 0);
916
917 ctx_buf->iocbq->context1 = NULL;
918 spin_lock(&phba->sli4_hba.sgl_list_lock);
919 ctx_buf->sglq = __lpfc_sli_get_nvmet_sglq(phba, ctx_buf->iocbq);
920 spin_unlock(&phba->sli4_hba.sgl_list_lock);
921 if (!ctx_buf->sglq) {
922 lpfc_sli_release_iocbq(phba, ctx_buf->iocbq);
923 kfree(ctx_buf->context);
924 kfree(ctx_buf);
925 lpfc_printf_log(phba, KERN_ERR, LOG_NVME,
926 "6407 Ran out of NVMET XRIs\n");
927 return -ENOMEM;
928 }
929 spin_lock(&phba->sli4_hba.nvmet_io_lock);
930 list_add_tail(&ctx_buf->list,
931 &phba->sli4_hba.lpfc_nvmet_ctx_list);
932 spin_unlock(&phba->sli4_hba.nvmet_io_lock);
933 }
934 phba->sli4_hba.nvmet_ctx_cnt = phba->sli4_hba.nvmet_xri_cnt;
935 return 0;
936}
937
737int 938int
738lpfc_nvmet_create_targetport(struct lpfc_hba *phba) 939lpfc_nvmet_create_targetport(struct lpfc_hba *phba)
739{ 940{
740 struct lpfc_vport *vport = phba->pport; 941 struct lpfc_vport *vport = phba->pport;
741 struct lpfc_nvmet_tgtport *tgtp; 942 struct lpfc_nvmet_tgtport *tgtp;
742 struct nvmet_fc_port_info pinfo; 943 struct nvmet_fc_port_info pinfo;
743 int error = 0; 944 int error;
744 945
745 if (phba->targetport) 946 if (phba->targetport)
746 return 0; 947 return 0;
747 948
949 error = lpfc_nvmet_setup_io_context(phba);
950 if (error)
951 return error;
952
748 memset(&pinfo, 0, sizeof(struct nvmet_fc_port_info)); 953 memset(&pinfo, 0, sizeof(struct nvmet_fc_port_info));
749 pinfo.node_name = wwn_to_u64(vport->fc_nodename.u.wwn); 954 pinfo.node_name = wwn_to_u64(vport->fc_nodename.u.wwn);
750 pinfo.port_name = wwn_to_u64(vport->fc_portname.u.wwn); 955 pinfo.port_name = wwn_to_u64(vport->fc_portname.u.wwn);
@@ -772,13 +977,16 @@ lpfc_nvmet_create_targetport(struct lpfc_hba *phba)
772 &phba->pcidev->dev, 977 &phba->pcidev->dev,
773 &phba->targetport); 978 &phba->targetport);
774#else 979#else
775 error = -ENOMEM; 980 error = -ENOENT;
776#endif 981#endif
777 if (error) { 982 if (error) {
778 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_DISC, 983 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_DISC,
779 "6025 Cannot register NVME targetport " 984 "6025 Cannot register NVME targetport "
780 "x%x\n", error); 985 "x%x\n", error);
781 phba->targetport = NULL; 986 phba->targetport = NULL;
987
988 lpfc_nvmet_cleanup_io_context(phba);
989
782 } else { 990 } else {
783 tgtp = (struct lpfc_nvmet_tgtport *) 991 tgtp = (struct lpfc_nvmet_tgtport *)
784 phba->targetport->private; 992 phba->targetport->private;
@@ -795,6 +1003,7 @@ lpfc_nvmet_create_targetport(struct lpfc_hba *phba)
795 atomic_set(&tgtp->rcv_ls_req_out, 0); 1003 atomic_set(&tgtp->rcv_ls_req_out, 0);
796 atomic_set(&tgtp->rcv_ls_req_drop, 0); 1004 atomic_set(&tgtp->rcv_ls_req_drop, 0);
797 atomic_set(&tgtp->xmt_ls_abort, 0); 1005 atomic_set(&tgtp->xmt_ls_abort, 0);
1006 atomic_set(&tgtp->xmt_ls_abort_cmpl, 0);
798 atomic_set(&tgtp->xmt_ls_rsp, 0); 1007 atomic_set(&tgtp->xmt_ls_rsp, 0);
799 atomic_set(&tgtp->xmt_ls_drop, 0); 1008 atomic_set(&tgtp->xmt_ls_drop, 0);
800 atomic_set(&tgtp->xmt_ls_rsp_error, 0); 1009 atomic_set(&tgtp->xmt_ls_rsp_error, 0);
@@ -802,18 +1011,21 @@ lpfc_nvmet_create_targetport(struct lpfc_hba *phba)
802 atomic_set(&tgtp->rcv_fcp_cmd_in, 0); 1011 atomic_set(&tgtp->rcv_fcp_cmd_in, 0);
803 atomic_set(&tgtp->rcv_fcp_cmd_out, 0); 1012 atomic_set(&tgtp->rcv_fcp_cmd_out, 0);
804 atomic_set(&tgtp->rcv_fcp_cmd_drop, 0); 1013 atomic_set(&tgtp->rcv_fcp_cmd_drop, 0);
805 atomic_set(&tgtp->xmt_fcp_abort, 0);
806 atomic_set(&tgtp->xmt_fcp_drop, 0); 1014 atomic_set(&tgtp->xmt_fcp_drop, 0);
807 atomic_set(&tgtp->xmt_fcp_read_rsp, 0); 1015 atomic_set(&tgtp->xmt_fcp_read_rsp, 0);
808 atomic_set(&tgtp->xmt_fcp_read, 0); 1016 atomic_set(&tgtp->xmt_fcp_read, 0);
809 atomic_set(&tgtp->xmt_fcp_write, 0); 1017 atomic_set(&tgtp->xmt_fcp_write, 0);
810 atomic_set(&tgtp->xmt_fcp_rsp, 0); 1018 atomic_set(&tgtp->xmt_fcp_rsp, 0);
1019 atomic_set(&tgtp->xmt_fcp_release, 0);
811 atomic_set(&tgtp->xmt_fcp_rsp_cmpl, 0); 1020 atomic_set(&tgtp->xmt_fcp_rsp_cmpl, 0);
812 atomic_set(&tgtp->xmt_fcp_rsp_error, 0); 1021 atomic_set(&tgtp->xmt_fcp_rsp_error, 0);
813 atomic_set(&tgtp->xmt_fcp_rsp_drop, 0); 1022 atomic_set(&tgtp->xmt_fcp_rsp_drop, 0);
1023 atomic_set(&tgtp->xmt_fcp_abort, 0);
1024 atomic_set(&tgtp->xmt_fcp_abort_cmpl, 0);
1025 atomic_set(&tgtp->xmt_abort_unsol, 0);
1026 atomic_set(&tgtp->xmt_abort_sol, 0);
814 atomic_set(&tgtp->xmt_abort_rsp, 0); 1027 atomic_set(&tgtp->xmt_abort_rsp, 0);
815 atomic_set(&tgtp->xmt_abort_rsp_error, 0); 1028 atomic_set(&tgtp->xmt_abort_rsp_error, 0);
816 atomic_set(&tgtp->xmt_abort_cmpl, 0);
817 } 1029 }
818 return error; 1030 return error;
819} 1031}
@@ -864,7 +1076,7 @@ lpfc_sli4_nvmet_xri_aborted(struct lpfc_hba *phba,
864 list_for_each_entry_safe(ctxp, next_ctxp, 1076 list_for_each_entry_safe(ctxp, next_ctxp,
865 &phba->sli4_hba.lpfc_abts_nvmet_ctx_list, 1077 &phba->sli4_hba.lpfc_abts_nvmet_ctx_list,
866 list) { 1078 list) {
867 if (ctxp->rqb_buffer->sglq->sli4_xritag != xri) 1079 if (ctxp->ctxbuf->sglq->sli4_xritag != xri)
868 continue; 1080 continue;
869 1081
870 /* Check if we already received a free context call 1082 /* Check if we already received a free context call
@@ -885,7 +1097,7 @@ lpfc_sli4_nvmet_xri_aborted(struct lpfc_hba *phba,
885 (ndlp->nlp_state == NLP_STE_UNMAPPED_NODE || 1097 (ndlp->nlp_state == NLP_STE_UNMAPPED_NODE ||
886 ndlp->nlp_state == NLP_STE_MAPPED_NODE)) { 1098 ndlp->nlp_state == NLP_STE_MAPPED_NODE)) {
887 lpfc_set_rrq_active(phba, ndlp, 1099 lpfc_set_rrq_active(phba, ndlp,
888 ctxp->rqb_buffer->sglq->sli4_lxritag, 1100 ctxp->ctxbuf->sglq->sli4_lxritag,
889 rxid, 1); 1101 rxid, 1);
890 lpfc_sli4_abts_err_handler(phba, ndlp, axri); 1102 lpfc_sli4_abts_err_handler(phba, ndlp, axri);
891 } 1103 }
@@ -894,8 +1106,8 @@ lpfc_sli4_nvmet_xri_aborted(struct lpfc_hba *phba,
894 "6318 XB aborted %x flg x%x (%x)\n", 1106 "6318 XB aborted %x flg x%x (%x)\n",
895 ctxp->oxid, ctxp->flag, released); 1107 ctxp->oxid, ctxp->flag, released);
896 if (released) 1108 if (released)
897 lpfc_nvmet_rq_post(phba, ctxp, 1109 lpfc_nvmet_ctxbuf_post(phba, ctxp->ctxbuf);
898 &ctxp->rqb_buffer->hbuf); 1110
899 if (rrq_empty) 1111 if (rrq_empty)
900 lpfc_worker_wake_up(phba); 1112 lpfc_worker_wake_up(phba);
901 return; 1113 return;
@@ -923,7 +1135,7 @@ lpfc_nvmet_rcv_unsol_abort(struct lpfc_vport *vport,
923 list_for_each_entry_safe(ctxp, next_ctxp, 1135 list_for_each_entry_safe(ctxp, next_ctxp,
924 &phba->sli4_hba.lpfc_abts_nvmet_ctx_list, 1136 &phba->sli4_hba.lpfc_abts_nvmet_ctx_list,
925 list) { 1137 list) {
926 if (ctxp->rqb_buffer->sglq->sli4_xritag != xri) 1138 if (ctxp->ctxbuf->sglq->sli4_xritag != xri)
927 continue; 1139 continue;
928 1140
929 spin_unlock(&phba->sli4_hba.abts_nvme_buf_list_lock); 1141 spin_unlock(&phba->sli4_hba.abts_nvme_buf_list_lock);
@@ -975,6 +1187,7 @@ lpfc_nvmet_destroy_targetport(struct lpfc_hba *phba)
975 init_completion(&tgtp->tport_unreg_done); 1187 init_completion(&tgtp->tport_unreg_done);
976 nvmet_fc_unregister_targetport(phba->targetport); 1188 nvmet_fc_unregister_targetport(phba->targetport);
977 wait_for_completion_timeout(&tgtp->tport_unreg_done, 5); 1189 wait_for_completion_timeout(&tgtp->tport_unreg_done, 5);
1190 lpfc_nvmet_cleanup_io_context(phba);
978 } 1191 }
979 phba->targetport = NULL; 1192 phba->targetport = NULL;
980#endif 1193#endif
@@ -1010,6 +1223,7 @@ lpfc_nvmet_unsol_ls_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
1010 oxid = 0; 1223 oxid = 0;
1011 size = 0; 1224 size = 0;
1012 sid = 0; 1225 sid = 0;
1226 ctxp = NULL;
1013 goto dropit; 1227 goto dropit;
1014 } 1228 }
1015 1229
@@ -1104,39 +1318,71 @@ lpfc_nvmet_unsol_fcp_buffer(struct lpfc_hba *phba,
1104 struct lpfc_nvmet_rcv_ctx *ctxp; 1318 struct lpfc_nvmet_rcv_ctx *ctxp;
1105 struct lpfc_nvmet_tgtport *tgtp; 1319 struct lpfc_nvmet_tgtport *tgtp;
1106 struct fc_frame_header *fc_hdr; 1320 struct fc_frame_header *fc_hdr;
1321 struct lpfc_nvmet_ctxbuf *ctx_buf;
1107 uint32_t *payload; 1322 uint32_t *payload;
1108 uint32_t size, oxid, sid, rc; 1323 uint32_t size, oxid, sid, rc, qno;
1324 unsigned long iflag;
1109#ifdef CONFIG_SCSI_LPFC_DEBUG_FS 1325#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
1110 uint32_t id; 1326 uint32_t id;
1111#endif 1327#endif
1112 1328
1329 ctx_buf = NULL;
1113 if (!nvmebuf || !phba->targetport) { 1330 if (!nvmebuf || !phba->targetport) {
1114 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR, 1331 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR,
1115 "6157 FCP Drop IO\n"); 1332 "6157 NVMET FCP Drop IO\n");
1116 oxid = 0; 1333 oxid = 0;
1117 size = 0; 1334 size = 0;
1118 sid = 0; 1335 sid = 0;
1336 ctxp = NULL;
1119 goto dropit; 1337 goto dropit;
1120 } 1338 }
1121 1339
1340 spin_lock_irqsave(&phba->sli4_hba.nvmet_io_lock, iflag);
1341 if (phba->sli4_hba.nvmet_ctx_cnt) {
1342 list_remove_head(&phba->sli4_hba.lpfc_nvmet_ctx_list,
1343 ctx_buf, struct lpfc_nvmet_ctxbuf, list);
1344 phba->sli4_hba.nvmet_ctx_cnt--;
1345 }
1346 spin_unlock_irqrestore(&phba->sli4_hba.nvmet_io_lock, iflag);
1122 1347
1123 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
1124 payload = (uint32_t *)(nvmebuf->dbuf.virt);
1125 fc_hdr = (struct fc_frame_header *)(nvmebuf->hbuf.virt); 1348 fc_hdr = (struct fc_frame_header *)(nvmebuf->hbuf.virt);
1126 size = nvmebuf->bytes_recv;
1127 oxid = be16_to_cpu(fc_hdr->fh_ox_id); 1349 oxid = be16_to_cpu(fc_hdr->fh_ox_id);
1128 sid = sli4_sid_from_fc_hdr(fc_hdr); 1350 size = nvmebuf->bytes_recv;
1129 1351
1130 ctxp = (struct lpfc_nvmet_rcv_ctx *)nvmebuf->context; 1352#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
1131 if (ctxp == NULL) { 1353 if (phba->cpucheck_on & LPFC_CHECK_NVMET_RCV) {
1132 atomic_inc(&tgtp->rcv_fcp_cmd_drop); 1354 id = smp_processor_id();
1133 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR, 1355 if (id < LPFC_CHECK_CPU_CNT)
1134 "6158 FCP Drop IO x%x: Alloc\n", 1356 phba->cpucheck_rcv_io[id]++;
1135 oxid); 1357 }
1136 lpfc_nvmet_rq_post(phba, NULL, &nvmebuf->hbuf); 1358#endif
1137 /* Cannot send ABTS without context */ 1359
1360 lpfc_nvmeio_data(phba, "NVMET FCP RCV: xri x%x sz %d CPU %02x\n",
1361 oxid, size, smp_processor_id());
1362
1363 if (!ctx_buf) {
1364 /* Queue this NVME IO to process later */
1365 spin_lock_irqsave(&phba->sli4_hba.nvmet_io_wait_lock, iflag);
1366 list_add_tail(&nvmebuf->hbuf.list,
1367 &phba->sli4_hba.lpfc_nvmet_io_wait_list);
1368 phba->sli4_hba.nvmet_io_wait_cnt++;
1369 phba->sli4_hba.nvmet_io_wait_total++;
1370 spin_unlock_irqrestore(&phba->sli4_hba.nvmet_io_wait_lock,
1371 iflag);
1372
1373 /* Post a brand new DMA buffer to RQ */
1374 qno = nvmebuf->idx;
1375 lpfc_post_rq_buffer(
1376 phba, phba->sli4_hba.nvmet_mrq_hdr[qno],
1377 phba->sli4_hba.nvmet_mrq_data[qno], 1, qno);
1138 return; 1378 return;
1139 } 1379 }
1380
1381 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
1382 payload = (uint32_t *)(nvmebuf->dbuf.virt);
1383 sid = sli4_sid_from_fc_hdr(fc_hdr);
1384
1385 ctxp = (struct lpfc_nvmet_rcv_ctx *)ctx_buf->context;
1140 memset(ctxp, 0, sizeof(ctxp->ctx)); 1386 memset(ctxp, 0, sizeof(ctxp->ctx));
1141 ctxp->wqeq = NULL; 1387 ctxp->wqeq = NULL;
1142 ctxp->txrdy = NULL; 1388 ctxp->txrdy = NULL;
@@ -1146,9 +1392,9 @@ lpfc_nvmet_unsol_fcp_buffer(struct lpfc_hba *phba,
1146 ctxp->oxid = oxid; 1392 ctxp->oxid = oxid;
1147 ctxp->sid = sid; 1393 ctxp->sid = sid;
1148 ctxp->state = LPFC_NVMET_STE_RCV; 1394 ctxp->state = LPFC_NVMET_STE_RCV;
1149 ctxp->rqb_buffer = nvmebuf;
1150 ctxp->entry_cnt = 1; 1395 ctxp->entry_cnt = 1;
1151 ctxp->flag = 0; 1396 ctxp->flag = 0;
1397 ctxp->ctxbuf = ctx_buf;
1152 spin_lock_init(&ctxp->ctxlock); 1398 spin_lock_init(&ctxp->ctxlock);
1153 1399
1154#ifdef CONFIG_SCSI_LPFC_DEBUG_FS 1400#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
@@ -1164,22 +1410,16 @@ lpfc_nvmet_unsol_fcp_buffer(struct lpfc_hba *phba,
1164 ctxp->ts_isr_status = 0; 1410 ctxp->ts_isr_status = 0;
1165 ctxp->ts_status_nvme = 0; 1411 ctxp->ts_status_nvme = 0;
1166 } 1412 }
1167
1168 if (phba->cpucheck_on & LPFC_CHECK_NVMET_RCV) {
1169 id = smp_processor_id();
1170 if (id < LPFC_CHECK_CPU_CNT)
1171 phba->cpucheck_rcv_io[id]++;
1172 }
1173#endif 1413#endif
1174 1414
1175 lpfc_nvmeio_data(phba, "NVMET FCP RCV: xri x%x sz %d CPU %02x\n",
1176 oxid, size, smp_processor_id());
1177
1178 atomic_inc(&tgtp->rcv_fcp_cmd_in); 1415 atomic_inc(&tgtp->rcv_fcp_cmd_in);
1179 /* 1416 /*
1180 * The calling sequence should be: 1417 * The calling sequence should be:
1181 * nvmet_fc_rcv_fcp_req -> lpfc_nvmet_xmt_fcp_op/cmp -> req->done 1418 * nvmet_fc_rcv_fcp_req -> lpfc_nvmet_xmt_fcp_op/cmp -> req->done
1182 * lpfc_nvmet_xmt_fcp_op_cmp should free the allocated ctxp. 1419 * lpfc_nvmet_xmt_fcp_op_cmp should free the allocated ctxp.
1420 * When we return from nvmet_fc_rcv_fcp_req, all relevant info in
1421 * the NVME command / FC header is stored, so we are free to repost
1422 * the buffer.
1183 */ 1423 */
1184 rc = nvmet_fc_rcv_fcp_req(phba->targetport, &ctxp->ctx.fcp_req, 1424 rc = nvmet_fc_rcv_fcp_req(phba->targetport, &ctxp->ctx.fcp_req,
1185 payload, size); 1425 payload, size);
@@ -1187,26 +1427,32 @@ lpfc_nvmet_unsol_fcp_buffer(struct lpfc_hba *phba,
1187 /* Process FCP command */ 1427 /* Process FCP command */
1188 if (rc == 0) { 1428 if (rc == 0) {
1189 atomic_inc(&tgtp->rcv_fcp_cmd_out); 1429 atomic_inc(&tgtp->rcv_fcp_cmd_out);
1430 lpfc_rq_buf_free(phba, &nvmebuf->hbuf); /* repost */
1190 return; 1431 return;
1191 } 1432 }
1192 1433
1193 atomic_inc(&tgtp->rcv_fcp_cmd_drop); 1434 atomic_inc(&tgtp->rcv_fcp_cmd_drop);
1194 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR, 1435 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR,
1195 "6159 FCP Drop IO x%x: err x%x\n", 1436 "6159 FCP Drop IO x%x: err x%x: x%x x%x x%x\n",
1196 ctxp->oxid, rc); 1437 ctxp->oxid, rc,
1438 atomic_read(&tgtp->rcv_fcp_cmd_in),
1439 atomic_read(&tgtp->rcv_fcp_cmd_out),
1440 atomic_read(&tgtp->xmt_fcp_release));
1197dropit: 1441dropit:
1198 lpfc_nvmeio_data(phba, "NVMET FCP DROP: xri x%x sz %d from %06x\n", 1442 lpfc_nvmeio_data(phba, "NVMET FCP DROP: xri x%x sz %d from %06x\n",
1199 oxid, size, sid); 1443 oxid, size, sid);
1200 if (oxid) { 1444 if (oxid) {
1445 lpfc_nvmet_defer_release(phba, ctxp);
1201 lpfc_nvmet_unsol_fcp_issue_abort(phba, ctxp, sid, oxid); 1446 lpfc_nvmet_unsol_fcp_issue_abort(phba, ctxp, sid, oxid);
1447 lpfc_rq_buf_free(phba, &nvmebuf->hbuf); /* repost */
1202 return; 1448 return;
1203 } 1449 }
1204 1450
1205 if (nvmebuf) { 1451 if (ctx_buf)
1206 nvmebuf->iocbq->hba_wqidx = 0; 1452 lpfc_nvmet_ctxbuf_post(phba, ctx_buf);
1207 /* We assume a rcv'ed cmd ALWAYs fits into 1 buffer */ 1453
1208 lpfc_nvmet_rq_post(phba, NULL, &nvmebuf->hbuf); 1454 if (nvmebuf)
1209 } 1455 lpfc_rq_buf_free(phba, &nvmebuf->hbuf); /* repost */
1210#endif 1456#endif
1211} 1457}
1212 1458
@@ -1258,7 +1504,7 @@ lpfc_nvmet_unsol_fcp_event(struct lpfc_hba *phba,
1258 uint64_t isr_timestamp) 1504 uint64_t isr_timestamp)
1259{ 1505{
1260 if (phba->nvmet_support == 0) { 1506 if (phba->nvmet_support == 0) {
1261 lpfc_nvmet_rq_post(phba, NULL, &nvmebuf->hbuf); 1507 lpfc_rq_buf_free(phba, &nvmebuf->hbuf);
1262 return; 1508 return;
1263 } 1509 }
1264 lpfc_nvmet_unsol_fcp_buffer(phba, pring, nvmebuf, 1510 lpfc_nvmet_unsol_fcp_buffer(phba, pring, nvmebuf,
@@ -1459,7 +1705,7 @@ lpfc_nvmet_prep_fcp_wqe(struct lpfc_hba *phba,
1459 nvmewqe = ctxp->wqeq; 1705 nvmewqe = ctxp->wqeq;
1460 if (nvmewqe == NULL) { 1706 if (nvmewqe == NULL) {
1461 /* Allocate buffer for command wqe */ 1707 /* Allocate buffer for command wqe */
1462 nvmewqe = ctxp->rqb_buffer->iocbq; 1708 nvmewqe = ctxp->ctxbuf->iocbq;
1463 if (nvmewqe == NULL) { 1709 if (nvmewqe == NULL) {
1464 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR, 1710 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR,
1465 "6110 lpfc_nvmet_prep_fcp_wqe: No " 1711 "6110 lpfc_nvmet_prep_fcp_wqe: No "
@@ -1486,7 +1732,7 @@ lpfc_nvmet_prep_fcp_wqe(struct lpfc_hba *phba,
1486 return NULL; 1732 return NULL;
1487 } 1733 }
1488 1734
1489 sgl = (struct sli4_sge *)ctxp->rqb_buffer->sglq->sgl; 1735 sgl = (struct sli4_sge *)ctxp->ctxbuf->sglq->sgl;
1490 switch (rsp->op) { 1736 switch (rsp->op) {
1491 case NVMET_FCOP_READDATA: 1737 case NVMET_FCOP_READDATA:
1492 case NVMET_FCOP_READDATA_RSP: 1738 case NVMET_FCOP_READDATA_RSP:
@@ -1811,7 +2057,8 @@ lpfc_nvmet_sol_fcp_abort_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
1811 result = wcqe->parameter; 2057 result = wcqe->parameter;
1812 2058
1813 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private; 2059 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
1814 atomic_inc(&tgtp->xmt_abort_cmpl); 2060 if (ctxp->flag & LPFC_NVMET_ABORT_OP)
2061 atomic_inc(&tgtp->xmt_fcp_abort_cmpl);
1815 2062
1816 ctxp->state = LPFC_NVMET_STE_DONE; 2063 ctxp->state = LPFC_NVMET_STE_DONE;
1817 2064
@@ -1826,6 +2073,7 @@ lpfc_nvmet_sol_fcp_abort_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
1826 } 2073 }
1827 ctxp->flag &= ~LPFC_NVMET_ABORT_OP; 2074 ctxp->flag &= ~LPFC_NVMET_ABORT_OP;
1828 spin_unlock_irqrestore(&ctxp->ctxlock, flags); 2075 spin_unlock_irqrestore(&ctxp->ctxlock, flags);
2076 atomic_inc(&tgtp->xmt_abort_rsp);
1829 2077
1830 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_ABTS, 2078 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_ABTS,
1831 "6165 ABORT cmpl: xri x%x flg x%x (%d) " 2079 "6165 ABORT cmpl: xri x%x flg x%x (%d) "
@@ -1834,15 +2082,16 @@ lpfc_nvmet_sol_fcp_abort_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
1834 wcqe->word0, wcqe->total_data_placed, 2082 wcqe->word0, wcqe->total_data_placed,
1835 result, wcqe->word3); 2083 result, wcqe->word3);
1836 2084
2085 cmdwqe->context2 = NULL;
2086 cmdwqe->context3 = NULL;
1837 /* 2087 /*
1838 * if transport has released ctx, then can reuse it. Otherwise, 2088 * if transport has released ctx, then can reuse it. Otherwise,
1839 * will be recycled by transport release call. 2089 * will be recycled by transport release call.
1840 */ 2090 */
1841 if (released) 2091 if (released)
1842 lpfc_nvmet_rq_post(phba, ctxp, &ctxp->rqb_buffer->hbuf); 2092 lpfc_nvmet_ctxbuf_post(phba, ctxp->ctxbuf);
1843 2093
1844 cmdwqe->context2 = NULL; 2094 /* This is the iocbq for the abort, not the command */
1845 cmdwqe->context3 = NULL;
1846 lpfc_sli_release_iocbq(phba, cmdwqe); 2095 lpfc_sli_release_iocbq(phba, cmdwqe);
1847 2096
1848 /* Since iaab/iaar are NOT set, there is no work left. 2097 /* Since iaab/iaar are NOT set, there is no work left.
@@ -1876,7 +2125,8 @@ lpfc_nvmet_unsol_fcp_abort_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
1876 result = wcqe->parameter; 2125 result = wcqe->parameter;
1877 2126
1878 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private; 2127 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
1879 atomic_inc(&tgtp->xmt_abort_cmpl); 2128 if (ctxp->flag & LPFC_NVMET_ABORT_OP)
2129 atomic_inc(&tgtp->xmt_fcp_abort_cmpl);
1880 2130
1881 if (!ctxp) { 2131 if (!ctxp) {
1882 /* if context is clear, related io alrady complete */ 2132 /* if context is clear, related io alrady complete */
@@ -1906,6 +2156,7 @@ lpfc_nvmet_unsol_fcp_abort_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
1906 } 2156 }
1907 ctxp->flag &= ~LPFC_NVMET_ABORT_OP; 2157 ctxp->flag &= ~LPFC_NVMET_ABORT_OP;
1908 spin_unlock_irqrestore(&ctxp->ctxlock, flags); 2158 spin_unlock_irqrestore(&ctxp->ctxlock, flags);
2159 atomic_inc(&tgtp->xmt_abort_rsp);
1909 2160
1910 lpfc_printf_log(phba, KERN_INFO, LOG_NVME_ABTS, 2161 lpfc_printf_log(phba, KERN_INFO, LOG_NVME_ABTS,
1911 "6316 ABTS cmpl xri x%x flg x%x (%x) " 2162 "6316 ABTS cmpl xri x%x flg x%x (%x) "
@@ -1913,15 +2164,15 @@ lpfc_nvmet_unsol_fcp_abort_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
1913 ctxp->oxid, ctxp->flag, released, 2164 ctxp->oxid, ctxp->flag, released,
1914 wcqe->word0, wcqe->total_data_placed, 2165 wcqe->word0, wcqe->total_data_placed,
1915 result, wcqe->word3); 2166 result, wcqe->word3);
2167
2168 cmdwqe->context2 = NULL;
2169 cmdwqe->context3 = NULL;
1916 /* 2170 /*
1917 * if transport has released ctx, then can reuse it. Otherwise, 2171 * if transport has released ctx, then can reuse it. Otherwise,
1918 * will be recycled by transport release call. 2172 * will be recycled by transport release call.
1919 */ 2173 */
1920 if (released) 2174 if (released)
1921 lpfc_nvmet_rq_post(phba, ctxp, &ctxp->rqb_buffer->hbuf); 2175 lpfc_nvmet_ctxbuf_post(phba, ctxp->ctxbuf);
1922
1923 cmdwqe->context2 = NULL;
1924 cmdwqe->context3 = NULL;
1925 2176
1926 /* Since iaab/iaar are NOT set, there is no work left. 2177 /* Since iaab/iaar are NOT set, there is no work left.
1927 * For LPFC_NVMET_XBUSY, lpfc_sli4_nvmet_xri_aborted 2178 * For LPFC_NVMET_XBUSY, lpfc_sli4_nvmet_xri_aborted
@@ -1952,7 +2203,7 @@ lpfc_nvmet_xmt_ls_abort_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
1952 result = wcqe->parameter; 2203 result = wcqe->parameter;
1953 2204
1954 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private; 2205 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
1955 atomic_inc(&tgtp->xmt_abort_cmpl); 2206 atomic_inc(&tgtp->xmt_ls_abort_cmpl);
1956 2207
1957 lpfc_printf_log(phba, KERN_INFO, LOG_NVME_ABTS, 2208 lpfc_printf_log(phba, KERN_INFO, LOG_NVME_ABTS,
1958 "6083 Abort cmpl: ctx %p WCQE: %08x %08x %08x %08x\n", 2209 "6083 Abort cmpl: ctx %p WCQE: %08x %08x %08x %08x\n",
@@ -1983,10 +2234,6 @@ lpfc_nvmet_unsol_issue_abort(struct lpfc_hba *phba,
1983 sid, xri, ctxp->wqeq->sli4_xritag); 2234 sid, xri, ctxp->wqeq->sli4_xritag);
1984 2235
1985 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private; 2236 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
1986 if (!ctxp->wqeq) {
1987 ctxp->wqeq = ctxp->rqb_buffer->iocbq;
1988 ctxp->wqeq->hba_wqidx = 0;
1989 }
1990 2237
1991 ndlp = lpfc_findnode_did(phba->pport, sid); 2238 ndlp = lpfc_findnode_did(phba->pport, sid);
1992 if (!ndlp || !NLP_CHK_NODE_ACT(ndlp) || 2239 if (!ndlp || !NLP_CHK_NODE_ACT(ndlp) ||
@@ -2082,7 +2329,7 @@ lpfc_nvmet_sol_fcp_issue_abort(struct lpfc_hba *phba,
2082 2329
2083 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private; 2330 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
2084 if (!ctxp->wqeq) { 2331 if (!ctxp->wqeq) {
2085 ctxp->wqeq = ctxp->rqb_buffer->iocbq; 2332 ctxp->wqeq = ctxp->ctxbuf->iocbq;
2086 ctxp->wqeq->hba_wqidx = 0; 2333 ctxp->wqeq->hba_wqidx = 0;
2087 } 2334 }
2088 2335
@@ -2103,6 +2350,7 @@ lpfc_nvmet_sol_fcp_issue_abort(struct lpfc_hba *phba,
2103 /* Issue ABTS for this WQE based on iotag */ 2350 /* Issue ABTS for this WQE based on iotag */
2104 ctxp->abort_wqeq = lpfc_sli_get_iocbq(phba); 2351 ctxp->abort_wqeq = lpfc_sli_get_iocbq(phba);
2105 if (!ctxp->abort_wqeq) { 2352 if (!ctxp->abort_wqeq) {
2353 atomic_inc(&tgtp->xmt_abort_rsp_error);
2106 lpfc_printf_log(phba, KERN_WARNING, LOG_NVME_ABTS, 2354 lpfc_printf_log(phba, KERN_WARNING, LOG_NVME_ABTS,
2107 "6161 ABORT failed: No wqeqs: " 2355 "6161 ABORT failed: No wqeqs: "
2108 "xri: x%x\n", ctxp->oxid); 2356 "xri: x%x\n", ctxp->oxid);
@@ -2127,6 +2375,7 @@ lpfc_nvmet_sol_fcp_issue_abort(struct lpfc_hba *phba,
2127 /* driver queued commands are in process of being flushed */ 2375 /* driver queued commands are in process of being flushed */
2128 if (phba->hba_flag & HBA_NVME_IOQ_FLUSH) { 2376 if (phba->hba_flag & HBA_NVME_IOQ_FLUSH) {
2129 spin_unlock_irqrestore(&phba->hbalock, flags); 2377 spin_unlock_irqrestore(&phba->hbalock, flags);
2378 atomic_inc(&tgtp->xmt_abort_rsp_error);
2130 lpfc_printf_log(phba, KERN_ERR, LOG_NVME, 2379 lpfc_printf_log(phba, KERN_ERR, LOG_NVME,
2131 "6163 Driver in reset cleanup - flushing " 2380 "6163 Driver in reset cleanup - flushing "
2132 "NVME Req now. hba_flag x%x oxid x%x\n", 2381 "NVME Req now. hba_flag x%x oxid x%x\n",
@@ -2139,6 +2388,7 @@ lpfc_nvmet_sol_fcp_issue_abort(struct lpfc_hba *phba,
2139 /* Outstanding abort is in progress */ 2388 /* Outstanding abort is in progress */
2140 if (abts_wqeq->iocb_flag & LPFC_DRIVER_ABORTED) { 2389 if (abts_wqeq->iocb_flag & LPFC_DRIVER_ABORTED) {
2141 spin_unlock_irqrestore(&phba->hbalock, flags); 2390 spin_unlock_irqrestore(&phba->hbalock, flags);
2391 atomic_inc(&tgtp->xmt_abort_rsp_error);
2142 lpfc_printf_log(phba, KERN_ERR, LOG_NVME, 2392 lpfc_printf_log(phba, KERN_ERR, LOG_NVME,
2143 "6164 Outstanding NVME I/O Abort Request " 2393 "6164 Outstanding NVME I/O Abort Request "
2144 "still pending on oxid x%x\n", 2394 "still pending on oxid x%x\n",
@@ -2189,9 +2439,12 @@ lpfc_nvmet_sol_fcp_issue_abort(struct lpfc_hba *phba,
2189 abts_wqeq->context2 = ctxp; 2439 abts_wqeq->context2 = ctxp;
2190 rc = lpfc_sli4_issue_wqe(phba, LPFC_FCP_RING, abts_wqeq); 2440 rc = lpfc_sli4_issue_wqe(phba, LPFC_FCP_RING, abts_wqeq);
2191 spin_unlock_irqrestore(&phba->hbalock, flags); 2441 spin_unlock_irqrestore(&phba->hbalock, flags);
2192 if (rc == WQE_SUCCESS) 2442 if (rc == WQE_SUCCESS) {
2443 atomic_inc(&tgtp->xmt_abort_sol);
2193 return 0; 2444 return 0;
2445 }
2194 2446
2447 atomic_inc(&tgtp->xmt_abort_rsp_error);
2195 ctxp->flag &= ~LPFC_NVMET_ABORT_OP; 2448 ctxp->flag &= ~LPFC_NVMET_ABORT_OP;
2196 lpfc_sli_release_iocbq(phba, abts_wqeq); 2449 lpfc_sli_release_iocbq(phba, abts_wqeq);
2197 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_ABTS, 2450 lpfc_printf_log(phba, KERN_ERR, LOG_NVME_ABTS,
@@ -2214,7 +2467,7 @@ lpfc_nvmet_unsol_fcp_issue_abort(struct lpfc_hba *phba,
2214 2467
2215 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private; 2468 tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
2216 if (!ctxp->wqeq) { 2469 if (!ctxp->wqeq) {
2217 ctxp->wqeq = ctxp->rqb_buffer->iocbq; 2470 ctxp->wqeq = ctxp->ctxbuf->iocbq;
2218 ctxp->wqeq->hba_wqidx = 0; 2471 ctxp->wqeq->hba_wqidx = 0;
2219 } 2472 }
2220 2473
@@ -2230,11 +2483,11 @@ lpfc_nvmet_unsol_fcp_issue_abort(struct lpfc_hba *phba,
2230 rc = lpfc_sli4_issue_wqe(phba, LPFC_FCP_RING, abts_wqeq); 2483 rc = lpfc_sli4_issue_wqe(phba, LPFC_FCP_RING, abts_wqeq);
2231 spin_unlock_irqrestore(&phba->hbalock, flags); 2484 spin_unlock_irqrestore(&phba->hbalock, flags);
2232 if (rc == WQE_SUCCESS) { 2485 if (rc == WQE_SUCCESS) {
2233 atomic_inc(&tgtp->xmt_abort_rsp);
2234 return 0; 2486 return 0;
2235 } 2487 }
2236 2488
2237aerr: 2489aerr:
2490 atomic_inc(&tgtp->xmt_abort_rsp_error);
2238 ctxp->flag &= ~LPFC_NVMET_ABORT_OP; 2491 ctxp->flag &= ~LPFC_NVMET_ABORT_OP;
2239 atomic_inc(&tgtp->xmt_abort_rsp_error); 2492 atomic_inc(&tgtp->xmt_abort_rsp_error);
2240 lpfc_printf_log(phba, KERN_WARNING, LOG_NVME_ABTS, 2493 lpfc_printf_log(phba, KERN_WARNING, LOG_NVME_ABTS,
@@ -2269,6 +2522,7 @@ lpfc_nvmet_unsol_ls_issue_abort(struct lpfc_hba *phba,
2269 } 2522 }
2270 abts_wqeq = ctxp->wqeq; 2523 abts_wqeq = ctxp->wqeq;
2271 wqe_abts = &abts_wqeq->wqe; 2524 wqe_abts = &abts_wqeq->wqe;
2525
2272 lpfc_nvmet_unsol_issue_abort(phba, ctxp, sid, xri); 2526 lpfc_nvmet_unsol_issue_abort(phba, ctxp, sid, xri);
2273 2527
2274 spin_lock_irqsave(&phba->hbalock, flags); 2528 spin_lock_irqsave(&phba->hbalock, flags);
@@ -2278,7 +2532,7 @@ lpfc_nvmet_unsol_ls_issue_abort(struct lpfc_hba *phba,
2278 rc = lpfc_sli4_issue_wqe(phba, LPFC_ELS_RING, abts_wqeq); 2532 rc = lpfc_sli4_issue_wqe(phba, LPFC_ELS_RING, abts_wqeq);
2279 spin_unlock_irqrestore(&phba->hbalock, flags); 2533 spin_unlock_irqrestore(&phba->hbalock, flags);
2280 if (rc == WQE_SUCCESS) { 2534 if (rc == WQE_SUCCESS) {
2281 atomic_inc(&tgtp->xmt_abort_rsp); 2535 atomic_inc(&tgtp->xmt_abort_unsol);
2282 return 0; 2536 return 0;
2283 } 2537 }
2284 2538
diff --git a/drivers/scsi/lpfc/lpfc_nvmet.h b/drivers/scsi/lpfc/lpfc_nvmet.h
index 128759fe6650..6eb2f5d8d4ed 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.h
+++ b/drivers/scsi/lpfc/lpfc_nvmet.h
@@ -22,6 +22,7 @@
22 ********************************************************************/ 22 ********************************************************************/
23 23
24#define LPFC_NVMET_DEFAULT_SEGS (64 + 1) /* 256K IOs */ 24#define LPFC_NVMET_DEFAULT_SEGS (64 + 1) /* 256K IOs */
25#define LPFC_NVMET_RQE_DEF_COUNT 512
25#define LPFC_NVMET_SUCCESS_LEN 12 26#define LPFC_NVMET_SUCCESS_LEN 12
26 27
27/* Used for NVME Target */ 28/* Used for NVME Target */
@@ -34,6 +35,7 @@ struct lpfc_nvmet_tgtport {
34 atomic_t rcv_ls_req_out; 35 atomic_t rcv_ls_req_out;
35 atomic_t rcv_ls_req_drop; 36 atomic_t rcv_ls_req_drop;
36 atomic_t xmt_ls_abort; 37 atomic_t xmt_ls_abort;
38 atomic_t xmt_ls_abort_cmpl;
37 39
38 /* Stats counters - lpfc_nvmet_xmt_ls_rsp */ 40 /* Stats counters - lpfc_nvmet_xmt_ls_rsp */
39 atomic_t xmt_ls_rsp; 41 atomic_t xmt_ls_rsp;
@@ -47,9 +49,9 @@ struct lpfc_nvmet_tgtport {
47 atomic_t rcv_fcp_cmd_in; 49 atomic_t rcv_fcp_cmd_in;
48 atomic_t rcv_fcp_cmd_out; 50 atomic_t rcv_fcp_cmd_out;
49 atomic_t rcv_fcp_cmd_drop; 51 atomic_t rcv_fcp_cmd_drop;
52 atomic_t xmt_fcp_release;
50 53
51 /* Stats counters - lpfc_nvmet_xmt_fcp_op */ 54 /* Stats counters - lpfc_nvmet_xmt_fcp_op */
52 atomic_t xmt_fcp_abort;
53 atomic_t xmt_fcp_drop; 55 atomic_t xmt_fcp_drop;
54 atomic_t xmt_fcp_read_rsp; 56 atomic_t xmt_fcp_read_rsp;
55 atomic_t xmt_fcp_read; 57 atomic_t xmt_fcp_read;
@@ -62,12 +64,13 @@ struct lpfc_nvmet_tgtport {
62 atomic_t xmt_fcp_rsp_drop; 64 atomic_t xmt_fcp_rsp_drop;
63 65
64 66
65 /* Stats counters - lpfc_nvmet_unsol_issue_abort */ 67 /* Stats counters - lpfc_nvmet_xmt_fcp_abort */
68 atomic_t xmt_fcp_abort;
69 atomic_t xmt_fcp_abort_cmpl;
70 atomic_t xmt_abort_sol;
71 atomic_t xmt_abort_unsol;
66 atomic_t xmt_abort_rsp; 72 atomic_t xmt_abort_rsp;
67 atomic_t xmt_abort_rsp_error; 73 atomic_t xmt_abort_rsp_error;
68
69 /* Stats counters - lpfc_nvmet_xmt_abort_cmp */
70 atomic_t xmt_abort_cmpl;
71}; 74};
72 75
73struct lpfc_nvmet_rcv_ctx { 76struct lpfc_nvmet_rcv_ctx {
@@ -103,6 +106,7 @@ struct lpfc_nvmet_rcv_ctx {
103#define LPFC_NVMET_CTX_RLS 0x8 /* ctx free requested */ 106#define LPFC_NVMET_CTX_RLS 0x8 /* ctx free requested */
104#define LPFC_NVMET_ABTS_RCV 0x10 /* ABTS received on exchange */ 107#define LPFC_NVMET_ABTS_RCV 0x10 /* ABTS received on exchange */
105 struct rqb_dmabuf *rqb_buffer; 108 struct rqb_dmabuf *rqb_buffer;
109 struct lpfc_nvmet_ctxbuf *ctxbuf;
106 110
107#ifdef CONFIG_SCSI_LPFC_DEBUG_FS 111#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
108 uint64_t ts_isr_cmd; 112 uint64_t ts_isr_cmd;
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 2a4fc00dfa9b..d6b184839bc2 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -74,6 +74,8 @@ static struct lpfc_iocbq *lpfc_sli4_els_wcqe_to_rspiocbq(struct lpfc_hba *,
74 struct lpfc_iocbq *); 74 struct lpfc_iocbq *);
75static void lpfc_sli4_send_seq_to_ulp(struct lpfc_vport *, 75static void lpfc_sli4_send_seq_to_ulp(struct lpfc_vport *,
76 struct hbq_dmabuf *); 76 struct hbq_dmabuf *);
77static void lpfc_sli4_handle_mds_loopback(struct lpfc_vport *vport,
78 struct hbq_dmabuf *dmabuf);
77static int lpfc_sli4_fp_handle_cqe(struct lpfc_hba *, struct lpfc_queue *, 79static int lpfc_sli4_fp_handle_cqe(struct lpfc_hba *, struct lpfc_queue *,
78 struct lpfc_cqe *); 80 struct lpfc_cqe *);
79static int lpfc_sli4_post_sgl_list(struct lpfc_hba *, struct list_head *, 81static int lpfc_sli4_post_sgl_list(struct lpfc_hba *, struct list_head *,
@@ -479,22 +481,23 @@ lpfc_sli4_rq_put(struct lpfc_queue *hq, struct lpfc_queue *dq,
479 if (unlikely(!hq) || unlikely(!dq)) 481 if (unlikely(!hq) || unlikely(!dq))
480 return -ENOMEM; 482 return -ENOMEM;
481 put_index = hq->host_index; 483 put_index = hq->host_index;
482 temp_hrqe = hq->qe[hq->host_index].rqe; 484 temp_hrqe = hq->qe[put_index].rqe;
483 temp_drqe = dq->qe[dq->host_index].rqe; 485 temp_drqe = dq->qe[dq->host_index].rqe;
484 486
485 if (hq->type != LPFC_HRQ || dq->type != LPFC_DRQ) 487 if (hq->type != LPFC_HRQ || dq->type != LPFC_DRQ)
486 return -EINVAL; 488 return -EINVAL;
487 if (hq->host_index != dq->host_index) 489 if (put_index != dq->host_index)
488 return -EINVAL; 490 return -EINVAL;
489 /* If the host has not yet processed the next entry then we are done */ 491 /* If the host has not yet processed the next entry then we are done */
490 if (((hq->host_index + 1) % hq->entry_count) == hq->hba_index) 492 if (((put_index + 1) % hq->entry_count) == hq->hba_index)
491 return -EBUSY; 493 return -EBUSY;
492 lpfc_sli_pcimem_bcopy(hrqe, temp_hrqe, hq->entry_size); 494 lpfc_sli_pcimem_bcopy(hrqe, temp_hrqe, hq->entry_size);
493 lpfc_sli_pcimem_bcopy(drqe, temp_drqe, dq->entry_size); 495 lpfc_sli_pcimem_bcopy(drqe, temp_drqe, dq->entry_size);
494 496
495 /* Update the host index to point to the next slot */ 497 /* Update the host index to point to the next slot */
496 hq->host_index = ((hq->host_index + 1) % hq->entry_count); 498 hq->host_index = ((put_index + 1) % hq->entry_count);
497 dq->host_index = ((dq->host_index + 1) % dq->entry_count); 499 dq->host_index = ((dq->host_index + 1) % dq->entry_count);
500 hq->RQ_buf_posted++;
498 501
499 /* Ring The Header Receive Queue Doorbell */ 502 /* Ring The Header Receive Queue Doorbell */
500 if (!(hq->host_index % hq->entry_repost)) { 503 if (!(hq->host_index % hq->entry_repost)) {
@@ -5906,7 +5909,7 @@ lpfc_set_features(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox,
5906 bf_set(lpfc_mbx_set_feature_mds, 5909 bf_set(lpfc_mbx_set_feature_mds,
5907 &mbox->u.mqe.un.set_feature, 1); 5910 &mbox->u.mqe.un.set_feature, 1);
5908 bf_set(lpfc_mbx_set_feature_mds_deep_loopbk, 5911 bf_set(lpfc_mbx_set_feature_mds_deep_loopbk,
5909 &mbox->u.mqe.un.set_feature, 0); 5912 &mbox->u.mqe.un.set_feature, 1);
5910 mbox->u.mqe.un.set_feature.feature = LPFC_SET_MDS_DIAGS; 5913 mbox->u.mqe.un.set_feature.feature = LPFC_SET_MDS_DIAGS;
5911 mbox->u.mqe.un.set_feature.param_len = 8; 5914 mbox->u.mqe.un.set_feature.param_len = 8;
5912 break; 5915 break;
@@ -6512,6 +6515,50 @@ lpfc_set_host_data(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox)
6512 (phba->hba_flag & HBA_FCOE_MODE) ? "FCoE" : "FC"); 6515 (phba->hba_flag & HBA_FCOE_MODE) ? "FCoE" : "FC");
6513} 6516}
6514 6517
6518int
6519lpfc_post_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *hrq,
6520 struct lpfc_queue *drq, int count, int idx)
6521{
6522 int rc, i;
6523 struct lpfc_rqe hrqe;
6524 struct lpfc_rqe drqe;
6525 struct lpfc_rqb *rqbp;
6526 struct rqb_dmabuf *rqb_buffer;
6527 LIST_HEAD(rqb_buf_list);
6528
6529 rqbp = hrq->rqbp;
6530 for (i = 0; i < count; i++) {
6531 /* IF RQ is already full, don't bother */
6532 if (rqbp->buffer_count + i >= rqbp->entry_count - 1)
6533 break;
6534 rqb_buffer = rqbp->rqb_alloc_buffer(phba);
6535 if (!rqb_buffer)
6536 break;
6537 rqb_buffer->hrq = hrq;
6538 rqb_buffer->drq = drq;
6539 rqb_buffer->idx = idx;
6540 list_add_tail(&rqb_buffer->hbuf.list, &rqb_buf_list);
6541 }
6542 while (!list_empty(&rqb_buf_list)) {
6543 list_remove_head(&rqb_buf_list, rqb_buffer, struct rqb_dmabuf,
6544 hbuf.list);
6545
6546 hrqe.address_lo = putPaddrLow(rqb_buffer->hbuf.phys);
6547 hrqe.address_hi = putPaddrHigh(rqb_buffer->hbuf.phys);
6548 drqe.address_lo = putPaddrLow(rqb_buffer->dbuf.phys);
6549 drqe.address_hi = putPaddrHigh(rqb_buffer->dbuf.phys);
6550 rc = lpfc_sli4_rq_put(hrq, drq, &hrqe, &drqe);
6551 if (rc < 0) {
6552 rqbp->rqb_free_buffer(phba, rqb_buffer);
6553 } else {
6554 list_add_tail(&rqb_buffer->hbuf.list,
6555 &rqbp->rqb_buffer_list);
6556 rqbp->buffer_count++;
6557 }
6558 }
6559 return 1;
6560}
6561
6515/** 6562/**
6516 * lpfc_sli4_hba_setup - SLI4 device initialization PCI function 6563 * lpfc_sli4_hba_setup - SLI4 device initialization PCI function
6517 * @phba: Pointer to HBA context object. 6564 * @phba: Pointer to HBA context object.
@@ -6524,7 +6571,7 @@ lpfc_set_host_data(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox)
6524int 6571int
6525lpfc_sli4_hba_setup(struct lpfc_hba *phba) 6572lpfc_sli4_hba_setup(struct lpfc_hba *phba)
6526{ 6573{
6527 int rc, i; 6574 int rc, i, cnt;
6528 LPFC_MBOXQ_t *mboxq; 6575 LPFC_MBOXQ_t *mboxq;
6529 struct lpfc_mqe *mqe; 6576 struct lpfc_mqe *mqe;
6530 uint8_t *vpd; 6577 uint8_t *vpd;
@@ -6875,6 +6922,21 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
6875 goto out_destroy_queue; 6922 goto out_destroy_queue;
6876 } 6923 }
6877 phba->sli4_hba.nvmet_xri_cnt = rc; 6924 phba->sli4_hba.nvmet_xri_cnt = rc;
6925
6926 cnt = phba->cfg_iocb_cnt * 1024;
6927 /* We need 1 iocbq for every SGL, for IO processing */
6928 cnt += phba->sli4_hba.nvmet_xri_cnt;
6929 /* Initialize and populate the iocb list per host */
6930 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6931 "2821 initialize iocb list %d total %d\n",
6932 phba->cfg_iocb_cnt, cnt);
6933 rc = lpfc_init_iocb_list(phba, cnt);
6934 if (rc) {
6935 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6936 "1413 Failed to init iocb list.\n");
6937 goto out_destroy_queue;
6938 }
6939
6878 lpfc_nvmet_create_targetport(phba); 6940 lpfc_nvmet_create_targetport(phba);
6879 } else { 6941 } else {
6880 /* update host scsi xri-sgl sizes and mappings */ 6942 /* update host scsi xri-sgl sizes and mappings */
@@ -6894,28 +6956,34 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
6894 "and mapping: %d\n", rc); 6956 "and mapping: %d\n", rc);
6895 goto out_destroy_queue; 6957 goto out_destroy_queue;
6896 } 6958 }
6959
6960 cnt = phba->cfg_iocb_cnt * 1024;
6961 /* Initialize and populate the iocb list per host */
6962 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6963 "2820 initialize iocb list %d total %d\n",
6964 phba->cfg_iocb_cnt, cnt);
6965 rc = lpfc_init_iocb_list(phba, cnt);
6966 if (rc) {
6967 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6968 "6301 Failed to init iocb list.\n");
6969 goto out_destroy_queue;
6970 }
6897 } 6971 }
6898 6972
6899 if (phba->nvmet_support && phba->cfg_nvmet_mrq) { 6973 if (phba->nvmet_support && phba->cfg_nvmet_mrq) {
6900
6901 /* Post initial buffers to all RQs created */ 6974 /* Post initial buffers to all RQs created */
6902 for (i = 0; i < phba->cfg_nvmet_mrq; i++) { 6975 for (i = 0; i < phba->cfg_nvmet_mrq; i++) {
6903 rqbp = phba->sli4_hba.nvmet_mrq_hdr[i]->rqbp; 6976 rqbp = phba->sli4_hba.nvmet_mrq_hdr[i]->rqbp;
6904 INIT_LIST_HEAD(&rqbp->rqb_buffer_list); 6977 INIT_LIST_HEAD(&rqbp->rqb_buffer_list);
6905 rqbp->rqb_alloc_buffer = lpfc_sli4_nvmet_alloc; 6978 rqbp->rqb_alloc_buffer = lpfc_sli4_nvmet_alloc;
6906 rqbp->rqb_free_buffer = lpfc_sli4_nvmet_free; 6979 rqbp->rqb_free_buffer = lpfc_sli4_nvmet_free;
6907 rqbp->entry_count = 256; 6980 rqbp->entry_count = LPFC_NVMET_RQE_DEF_COUNT;
6908 rqbp->buffer_count = 0; 6981 rqbp->buffer_count = 0;
6909 6982
6910 /* Divide by 4 and round down to multiple of 16 */
6911 rc = (phba->cfg_nvmet_mrq_post >> 2) & 0xfff8;
6912 phba->sli4_hba.nvmet_mrq_hdr[i]->entry_repost = rc;
6913 phba->sli4_hba.nvmet_mrq_data[i]->entry_repost = rc;
6914
6915 lpfc_post_rq_buffer( 6983 lpfc_post_rq_buffer(
6916 phba, phba->sli4_hba.nvmet_mrq_hdr[i], 6984 phba, phba->sli4_hba.nvmet_mrq_hdr[i],
6917 phba->sli4_hba.nvmet_mrq_data[i], 6985 phba->sli4_hba.nvmet_mrq_data[i],
6918 phba->cfg_nvmet_mrq_post); 6986 LPFC_NVMET_RQE_DEF_COUNT, i);
6919 } 6987 }
6920 } 6988 }
6921 6989
@@ -7082,6 +7150,7 @@ out_unset_queue:
7082 /* Unset all the queues set up in this routine when error out */ 7150 /* Unset all the queues set up in this routine when error out */
7083 lpfc_sli4_queue_unset(phba); 7151 lpfc_sli4_queue_unset(phba);
7084out_destroy_queue: 7152out_destroy_queue:
7153 lpfc_free_iocb_list(phba);
7085 lpfc_sli4_queue_destroy(phba); 7154 lpfc_sli4_queue_destroy(phba);
7086out_stop_timers: 7155out_stop_timers:
7087 lpfc_stop_hba_timers(phba); 7156 lpfc_stop_hba_timers(phba);
@@ -8621,8 +8690,11 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
8621 memset(wqe, 0, sizeof(union lpfc_wqe128)); 8690 memset(wqe, 0, sizeof(union lpfc_wqe128));
8622 /* Some of the fields are in the right position already */ 8691 /* Some of the fields are in the right position already */
8623 memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe)); 8692 memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe));
8624 wqe->generic.wqe_com.word7 = 0; /* The ct field has moved so reset */ 8693 if (iocbq->iocb.ulpCommand != CMD_SEND_FRAME) {
8625 wqe->generic.wqe_com.word10 = 0; 8694 /* The ct field has moved so reset */
8695 wqe->generic.wqe_com.word7 = 0;
8696 wqe->generic.wqe_com.word10 = 0;
8697 }
8626 8698
8627 abort_tag = (uint32_t) iocbq->iotag; 8699 abort_tag = (uint32_t) iocbq->iotag;
8628 xritag = iocbq->sli4_xritag; 8700 xritag = iocbq->sli4_xritag;
@@ -9116,6 +9188,10 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
9116 } 9188 }
9117 9189
9118 break; 9190 break;
9191 case CMD_SEND_FRAME:
9192 bf_set(wqe_xri_tag, &wqe->generic.wqe_com, xritag);
9193 bf_set(wqe_reqtag, &wqe->generic.wqe_com, iocbq->iotag);
9194 return 0;
9119 case CMD_XRI_ABORTED_CX: 9195 case CMD_XRI_ABORTED_CX:
9120 case CMD_CREATE_XRI_CR: /* Do we expect to use this? */ 9196 case CMD_CREATE_XRI_CR: /* Do we expect to use this? */
9121 case CMD_IOCB_FCP_IBIDIR64_CR: /* bidirectional xfer */ 9197 case CMD_IOCB_FCP_IBIDIR64_CR: /* bidirectional xfer */
@@ -12788,6 +12864,7 @@ lpfc_sli4_sp_handle_rcqe(struct lpfc_hba *phba, struct lpfc_rcqe *rcqe)
12788 struct fc_frame_header *fc_hdr; 12864 struct fc_frame_header *fc_hdr;
12789 struct lpfc_queue *hrq = phba->sli4_hba.hdr_rq; 12865 struct lpfc_queue *hrq = phba->sli4_hba.hdr_rq;
12790 struct lpfc_queue *drq = phba->sli4_hba.dat_rq; 12866 struct lpfc_queue *drq = phba->sli4_hba.dat_rq;
12867 struct lpfc_nvmet_tgtport *tgtp;
12791 struct hbq_dmabuf *dma_buf; 12868 struct hbq_dmabuf *dma_buf;
12792 uint32_t status, rq_id; 12869 uint32_t status, rq_id;
12793 unsigned long iflags; 12870 unsigned long iflags;
@@ -12808,7 +12885,6 @@ lpfc_sli4_sp_handle_rcqe(struct lpfc_hba *phba, struct lpfc_rcqe *rcqe)
12808 case FC_STATUS_RQ_BUF_LEN_EXCEEDED: 12885 case FC_STATUS_RQ_BUF_LEN_EXCEEDED:
12809 lpfc_printf_log(phba, KERN_ERR, LOG_SLI, 12886 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
12810 "2537 Receive Frame Truncated!!\n"); 12887 "2537 Receive Frame Truncated!!\n");
12811 hrq->RQ_buf_trunc++;
12812 case FC_STATUS_RQ_SUCCESS: 12888 case FC_STATUS_RQ_SUCCESS:
12813 lpfc_sli4_rq_release(hrq, drq); 12889 lpfc_sli4_rq_release(hrq, drq);
12814 spin_lock_irqsave(&phba->hbalock, iflags); 12890 spin_lock_irqsave(&phba->hbalock, iflags);
@@ -12819,6 +12895,7 @@ lpfc_sli4_sp_handle_rcqe(struct lpfc_hba *phba, struct lpfc_rcqe *rcqe)
12819 goto out; 12895 goto out;
12820 } 12896 }
12821 hrq->RQ_rcv_buf++; 12897 hrq->RQ_rcv_buf++;
12898 hrq->RQ_buf_posted--;
12822 memcpy(&dma_buf->cq_event.cqe.rcqe_cmpl, rcqe, sizeof(*rcqe)); 12899 memcpy(&dma_buf->cq_event.cqe.rcqe_cmpl, rcqe, sizeof(*rcqe));
12823 12900
12824 /* If a NVME LS event (type 0x28), treat it as Fast path */ 12901 /* If a NVME LS event (type 0x28), treat it as Fast path */
@@ -12832,8 +12909,21 @@ lpfc_sli4_sp_handle_rcqe(struct lpfc_hba *phba, struct lpfc_rcqe *rcqe)
12832 spin_unlock_irqrestore(&phba->hbalock, iflags); 12909 spin_unlock_irqrestore(&phba->hbalock, iflags);
12833 workposted = true; 12910 workposted = true;
12834 break; 12911 break;
12835 case FC_STATUS_INSUFF_BUF_NEED_BUF:
12836 case FC_STATUS_INSUFF_BUF_FRM_DISC: 12912 case FC_STATUS_INSUFF_BUF_FRM_DISC:
12913 if (phba->nvmet_support) {
12914 tgtp = phba->targetport->private;
12915 lpfc_printf_log(phba, KERN_ERR, LOG_SLI | LOG_NVME,
12916 "6402 RQE Error x%x, posted %d err_cnt "
12917 "%d: %x %x %x\n",
12918 status, hrq->RQ_buf_posted,
12919 hrq->RQ_no_posted_buf,
12920 atomic_read(&tgtp->rcv_fcp_cmd_in),
12921 atomic_read(&tgtp->rcv_fcp_cmd_out),
12922 atomic_read(&tgtp->xmt_fcp_release));
12923 }
12924 /* fallthrough */
12925
12926 case FC_STATUS_INSUFF_BUF_NEED_BUF:
12837 hrq->RQ_no_posted_buf++; 12927 hrq->RQ_no_posted_buf++;
12838 /* Post more buffers if possible */ 12928 /* Post more buffers if possible */
12839 spin_lock_irqsave(&phba->hbalock, iflags); 12929 spin_lock_irqsave(&phba->hbalock, iflags);
@@ -12951,7 +13041,7 @@ lpfc_sli4_sp_handle_eqe(struct lpfc_hba *phba, struct lpfc_eqe *eqe,
12951 while ((cqe = lpfc_sli4_cq_get(cq))) { 13041 while ((cqe = lpfc_sli4_cq_get(cq))) {
12952 workposted |= lpfc_sli4_sp_handle_mcqe(phba, cqe); 13042 workposted |= lpfc_sli4_sp_handle_mcqe(phba, cqe);
12953 if (!(++ecount % cq->entry_repost)) 13043 if (!(++ecount % cq->entry_repost))
12954 lpfc_sli4_cq_release(cq, LPFC_QUEUE_NOARM); 13044 break;
12955 cq->CQ_mbox++; 13045 cq->CQ_mbox++;
12956 } 13046 }
12957 break; 13047 break;
@@ -12965,7 +13055,7 @@ lpfc_sli4_sp_handle_eqe(struct lpfc_hba *phba, struct lpfc_eqe *eqe,
12965 workposted |= lpfc_sli4_sp_handle_cqe(phba, cq, 13055 workposted |= lpfc_sli4_sp_handle_cqe(phba, cq,
12966 cqe); 13056 cqe);
12967 if (!(++ecount % cq->entry_repost)) 13057 if (!(++ecount % cq->entry_repost))
12968 lpfc_sli4_cq_release(cq, LPFC_QUEUE_NOARM); 13058 break;
12969 } 13059 }
12970 13060
12971 /* Track the max number of CQEs processed in 1 EQ */ 13061 /* Track the max number of CQEs processed in 1 EQ */
@@ -13135,6 +13225,7 @@ lpfc_sli4_nvmet_handle_rcqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
13135 struct lpfc_queue *drq; 13225 struct lpfc_queue *drq;
13136 struct rqb_dmabuf *dma_buf; 13226 struct rqb_dmabuf *dma_buf;
13137 struct fc_frame_header *fc_hdr; 13227 struct fc_frame_header *fc_hdr;
13228 struct lpfc_nvmet_tgtport *tgtp;
13138 uint32_t status, rq_id; 13229 uint32_t status, rq_id;
13139 unsigned long iflags; 13230 unsigned long iflags;
13140 uint32_t fctl, idx; 13231 uint32_t fctl, idx;
@@ -13165,8 +13256,6 @@ lpfc_sli4_nvmet_handle_rcqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
13165 case FC_STATUS_RQ_BUF_LEN_EXCEEDED: 13256 case FC_STATUS_RQ_BUF_LEN_EXCEEDED:
13166 lpfc_printf_log(phba, KERN_ERR, LOG_SLI, 13257 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
13167 "6126 Receive Frame Truncated!!\n"); 13258 "6126 Receive Frame Truncated!!\n");
13168 hrq->RQ_buf_trunc++;
13169 break;
13170 case FC_STATUS_RQ_SUCCESS: 13259 case FC_STATUS_RQ_SUCCESS:
13171 lpfc_sli4_rq_release(hrq, drq); 13260 lpfc_sli4_rq_release(hrq, drq);
13172 spin_lock_irqsave(&phba->hbalock, iflags); 13261 spin_lock_irqsave(&phba->hbalock, iflags);
@@ -13178,6 +13267,7 @@ lpfc_sli4_nvmet_handle_rcqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
13178 } 13267 }
13179 spin_unlock_irqrestore(&phba->hbalock, iflags); 13268 spin_unlock_irqrestore(&phba->hbalock, iflags);
13180 hrq->RQ_rcv_buf++; 13269 hrq->RQ_rcv_buf++;
13270 hrq->RQ_buf_posted--;
13181 fc_hdr = (struct fc_frame_header *)dma_buf->hbuf.virt; 13271 fc_hdr = (struct fc_frame_header *)dma_buf->hbuf.virt;
13182 13272
13183 /* Just some basic sanity checks on FCP Command frame */ 13273 /* Just some basic sanity checks on FCP Command frame */
@@ -13200,14 +13290,23 @@ lpfc_sli4_nvmet_handle_rcqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
13200drop: 13290drop:
13201 lpfc_in_buf_free(phba, &dma_buf->dbuf); 13291 lpfc_in_buf_free(phba, &dma_buf->dbuf);
13202 break; 13292 break;
13203 case FC_STATUS_INSUFF_BUF_NEED_BUF:
13204 case FC_STATUS_INSUFF_BUF_FRM_DISC: 13293 case FC_STATUS_INSUFF_BUF_FRM_DISC:
13294 if (phba->nvmet_support) {
13295 tgtp = phba->targetport->private;
13296 lpfc_printf_log(phba, KERN_ERR, LOG_SLI | LOG_NVME,
13297 "6401 RQE Error x%x, posted %d err_cnt "
13298 "%d: %x %x %x\n",
13299 status, hrq->RQ_buf_posted,
13300 hrq->RQ_no_posted_buf,
13301 atomic_read(&tgtp->rcv_fcp_cmd_in),
13302 atomic_read(&tgtp->rcv_fcp_cmd_out),
13303 atomic_read(&tgtp->xmt_fcp_release));
13304 }
13305 /* fallthrough */
13306
13307 case FC_STATUS_INSUFF_BUF_NEED_BUF:
13205 hrq->RQ_no_posted_buf++; 13308 hrq->RQ_no_posted_buf++;
13206 /* Post more buffers if possible */ 13309 /* Post more buffers if possible */
13207 spin_lock_irqsave(&phba->hbalock, iflags);
13208 phba->hba_flag |= HBA_POST_RECEIVE_BUFFER;
13209 spin_unlock_irqrestore(&phba->hbalock, iflags);
13210 workposted = true;
13211 break; 13310 break;
13212 } 13311 }
13213out: 13312out:
@@ -13361,7 +13460,7 @@ process_cq:
13361 while ((cqe = lpfc_sli4_cq_get(cq))) { 13460 while ((cqe = lpfc_sli4_cq_get(cq))) {
13362 workposted |= lpfc_sli4_fp_handle_cqe(phba, cq, cqe); 13461 workposted |= lpfc_sli4_fp_handle_cqe(phba, cq, cqe);
13363 if (!(++ecount % cq->entry_repost)) 13462 if (!(++ecount % cq->entry_repost))
13364 lpfc_sli4_cq_release(cq, LPFC_QUEUE_NOARM); 13463 break;
13365 } 13464 }
13366 13465
13367 /* Track the max number of CQEs processed in 1 EQ */ 13466 /* Track the max number of CQEs processed in 1 EQ */
@@ -13452,7 +13551,7 @@ lpfc_sli4_fof_handle_eqe(struct lpfc_hba *phba, struct lpfc_eqe *eqe)
13452 while ((cqe = lpfc_sli4_cq_get(cq))) { 13551 while ((cqe = lpfc_sli4_cq_get(cq))) {
13453 workposted |= lpfc_sli4_fp_handle_cqe(phba, cq, cqe); 13552 workposted |= lpfc_sli4_fp_handle_cqe(phba, cq, cqe);
13454 if (!(++ecount % cq->entry_repost)) 13553 if (!(++ecount % cq->entry_repost))
13455 lpfc_sli4_cq_release(cq, LPFC_QUEUE_NOARM); 13554 break;
13456 } 13555 }
13457 13556
13458 /* Track the max number of CQEs processed in 1 EQ */ 13557 /* Track the max number of CQEs processed in 1 EQ */
@@ -13534,7 +13633,7 @@ lpfc_sli4_fof_intr_handler(int irq, void *dev_id)
13534 while ((eqe = lpfc_sli4_eq_get(eq))) { 13633 while ((eqe = lpfc_sli4_eq_get(eq))) {
13535 lpfc_sli4_fof_handle_eqe(phba, eqe); 13634 lpfc_sli4_fof_handle_eqe(phba, eqe);
13536 if (!(++ecount % eq->entry_repost)) 13635 if (!(++ecount % eq->entry_repost))
13537 lpfc_sli4_eq_release(eq, LPFC_QUEUE_NOARM); 13636 break;
13538 eq->EQ_processed++; 13637 eq->EQ_processed++;
13539 } 13638 }
13540 13639
@@ -13651,7 +13750,7 @@ lpfc_sli4_hba_intr_handler(int irq, void *dev_id)
13651 13750
13652 lpfc_sli4_hba_handle_eqe(phba, eqe, hba_eqidx); 13751 lpfc_sli4_hba_handle_eqe(phba, eqe, hba_eqidx);
13653 if (!(++ecount % fpeq->entry_repost)) 13752 if (!(++ecount % fpeq->entry_repost))
13654 lpfc_sli4_eq_release(fpeq, LPFC_QUEUE_NOARM); 13753 break;
13655 fpeq->EQ_processed++; 13754 fpeq->EQ_processed++;
13656 } 13755 }
13657 13756
@@ -13832,17 +13931,10 @@ lpfc_sli4_queue_alloc(struct lpfc_hba *phba, uint32_t entry_size,
13832 } 13931 }
13833 queue->entry_size = entry_size; 13932 queue->entry_size = entry_size;
13834 queue->entry_count = entry_count; 13933 queue->entry_count = entry_count;
13835
13836 /*
13837 * entry_repost is calculated based on the number of entries in the
13838 * queue. This works out except for RQs. If buffers are NOT initially
13839 * posted for every RQE, entry_repost should be adjusted accordingly.
13840 */
13841 queue->entry_repost = (entry_count >> 3);
13842 if (queue->entry_repost < LPFC_QUEUE_MIN_REPOST)
13843 queue->entry_repost = LPFC_QUEUE_MIN_REPOST;
13844 queue->phba = phba; 13934 queue->phba = phba;
13845 13935
13936 /* entry_repost will be set during q creation */
13937
13846 return queue; 13938 return queue;
13847out_fail: 13939out_fail:
13848 lpfc_sli4_queue_free(queue); 13940 lpfc_sli4_queue_free(queue);
@@ -14073,6 +14165,7 @@ lpfc_eq_create(struct lpfc_hba *phba, struct lpfc_queue *eq, uint32_t imax)
14073 status = -ENXIO; 14165 status = -ENXIO;
14074 eq->host_index = 0; 14166 eq->host_index = 0;
14075 eq->hba_index = 0; 14167 eq->hba_index = 0;
14168 eq->entry_repost = LPFC_EQ_REPOST;
14076 14169
14077 mempool_free(mbox, phba->mbox_mem_pool); 14170 mempool_free(mbox, phba->mbox_mem_pool);
14078 return status; 14171 return status;
@@ -14146,9 +14239,9 @@ lpfc_cq_create(struct lpfc_hba *phba, struct lpfc_queue *cq,
14146 default: 14239 default:
14147 lpfc_printf_log(phba, KERN_ERR, LOG_SLI, 14240 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
14148 "0361 Unsupported CQ count: " 14241 "0361 Unsupported CQ count: "
14149 "entry cnt %d sz %d pg cnt %d repost %d\n", 14242 "entry cnt %d sz %d pg cnt %d\n",
14150 cq->entry_count, cq->entry_size, 14243 cq->entry_count, cq->entry_size,
14151 cq->page_count, cq->entry_repost); 14244 cq->page_count);
14152 if (cq->entry_count < 256) { 14245 if (cq->entry_count < 256) {
14153 status = -EINVAL; 14246 status = -EINVAL;
14154 goto out; 14247 goto out;
@@ -14201,6 +14294,7 @@ lpfc_cq_create(struct lpfc_hba *phba, struct lpfc_queue *cq,
14201 cq->assoc_qid = eq->queue_id; 14294 cq->assoc_qid = eq->queue_id;
14202 cq->host_index = 0; 14295 cq->host_index = 0;
14203 cq->hba_index = 0; 14296 cq->hba_index = 0;
14297 cq->entry_repost = LPFC_CQ_REPOST;
14204 14298
14205out: 14299out:
14206 mempool_free(mbox, phba->mbox_mem_pool); 14300 mempool_free(mbox, phba->mbox_mem_pool);
@@ -14392,6 +14486,7 @@ lpfc_cq_create_set(struct lpfc_hba *phba, struct lpfc_queue **cqp,
14392 cq->assoc_qid = eq->queue_id; 14486 cq->assoc_qid = eq->queue_id;
14393 cq->host_index = 0; 14487 cq->host_index = 0;
14394 cq->hba_index = 0; 14488 cq->hba_index = 0;
14489 cq->entry_repost = LPFC_CQ_REPOST;
14395 14490
14396 rc = 0; 14491 rc = 0;
14397 list_for_each_entry(dmabuf, &cq->page_list, list) { 14492 list_for_each_entry(dmabuf, &cq->page_list, list) {
@@ -14640,6 +14735,7 @@ lpfc_mq_create(struct lpfc_hba *phba, struct lpfc_queue *mq,
14640 mq->subtype = subtype; 14735 mq->subtype = subtype;
14641 mq->host_index = 0; 14736 mq->host_index = 0;
14642 mq->hba_index = 0; 14737 mq->hba_index = 0;
14738 mq->entry_repost = LPFC_MQ_REPOST;
14643 14739
14644 /* link the mq onto the parent cq child list */ 14740 /* link the mq onto the parent cq child list */
14645 list_add_tail(&mq->list, &cq->child_list); 14741 list_add_tail(&mq->list, &cq->child_list);
@@ -14865,34 +14961,6 @@ out:
14865} 14961}
14866 14962
14867/** 14963/**
14868 * lpfc_rq_adjust_repost - Adjust entry_repost for an RQ
14869 * @phba: HBA structure that indicates port to create a queue on.
14870 * @rq: The queue structure to use for the receive queue.
14871 * @qno: The associated HBQ number
14872 *
14873 *
14874 * For SLI4 we need to adjust the RQ repost value based on
14875 * the number of buffers that are initially posted to the RQ.
14876 */
14877void
14878lpfc_rq_adjust_repost(struct lpfc_hba *phba, struct lpfc_queue *rq, int qno)
14879{
14880 uint32_t cnt;
14881
14882 /* sanity check on queue memory */
14883 if (!rq)
14884 return;
14885 cnt = lpfc_hbq_defs[qno]->entry_count;
14886
14887 /* Recalc repost for RQs based on buffers initially posted */
14888 cnt = (cnt >> 3);
14889 if (cnt < LPFC_QUEUE_MIN_REPOST)
14890 cnt = LPFC_QUEUE_MIN_REPOST;
14891
14892 rq->entry_repost = cnt;
14893}
14894
14895/**
14896 * lpfc_rq_create - Create a Receive Queue on the HBA 14964 * lpfc_rq_create - Create a Receive Queue on the HBA
14897 * @phba: HBA structure that indicates port to create a queue on. 14965 * @phba: HBA structure that indicates port to create a queue on.
14898 * @hrq: The queue structure to use to create the header receive queue. 14966 * @hrq: The queue structure to use to create the header receive queue.
@@ -15077,6 +15145,7 @@ lpfc_rq_create(struct lpfc_hba *phba, struct lpfc_queue *hrq,
15077 hrq->subtype = subtype; 15145 hrq->subtype = subtype;
15078 hrq->host_index = 0; 15146 hrq->host_index = 0;
15079 hrq->hba_index = 0; 15147 hrq->hba_index = 0;
15148 hrq->entry_repost = LPFC_RQ_REPOST;
15080 15149
15081 /* now create the data queue */ 15150 /* now create the data queue */
15082 lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE, 15151 lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE,
@@ -15087,7 +15156,12 @@ lpfc_rq_create(struct lpfc_hba *phba, struct lpfc_queue *hrq,
15087 if (phba->sli4_hba.pc_sli4_params.rqv == LPFC_Q_CREATE_VERSION_1) { 15156 if (phba->sli4_hba.pc_sli4_params.rqv == LPFC_Q_CREATE_VERSION_1) {
15088 bf_set(lpfc_rq_context_rqe_count_1, 15157 bf_set(lpfc_rq_context_rqe_count_1,
15089 &rq_create->u.request.context, hrq->entry_count); 15158 &rq_create->u.request.context, hrq->entry_count);
15090 rq_create->u.request.context.buffer_size = LPFC_DATA_BUF_SIZE; 15159 if (subtype == LPFC_NVMET)
15160 rq_create->u.request.context.buffer_size =
15161 LPFC_NVMET_DATA_BUF_SIZE;
15162 else
15163 rq_create->u.request.context.buffer_size =
15164 LPFC_DATA_BUF_SIZE;
15091 bf_set(lpfc_rq_context_rqe_size, &rq_create->u.request.context, 15165 bf_set(lpfc_rq_context_rqe_size, &rq_create->u.request.context,
15092 LPFC_RQE_SIZE_8); 15166 LPFC_RQE_SIZE_8);
15093 bf_set(lpfc_rq_context_page_size, &rq_create->u.request.context, 15167 bf_set(lpfc_rq_context_page_size, &rq_create->u.request.context,
@@ -15124,8 +15198,14 @@ lpfc_rq_create(struct lpfc_hba *phba, struct lpfc_queue *hrq,
15124 LPFC_RQ_RING_SIZE_4096); 15198 LPFC_RQ_RING_SIZE_4096);
15125 break; 15199 break;
15126 } 15200 }
15127 bf_set(lpfc_rq_context_buf_size, &rq_create->u.request.context, 15201 if (subtype == LPFC_NVMET)
15128 LPFC_DATA_BUF_SIZE); 15202 bf_set(lpfc_rq_context_buf_size,
15203 &rq_create->u.request.context,
15204 LPFC_NVMET_DATA_BUF_SIZE);
15205 else
15206 bf_set(lpfc_rq_context_buf_size,
15207 &rq_create->u.request.context,
15208 LPFC_DATA_BUF_SIZE);
15129 } 15209 }
15130 bf_set(lpfc_rq_context_cq_id, &rq_create->u.request.context, 15210 bf_set(lpfc_rq_context_cq_id, &rq_create->u.request.context,
15131 cq->queue_id); 15211 cq->queue_id);
@@ -15158,6 +15238,7 @@ lpfc_rq_create(struct lpfc_hba *phba, struct lpfc_queue *hrq,
15158 drq->subtype = subtype; 15238 drq->subtype = subtype;
15159 drq->host_index = 0; 15239 drq->host_index = 0;
15160 drq->hba_index = 0; 15240 drq->hba_index = 0;
15241 drq->entry_repost = LPFC_RQ_REPOST;
15161 15242
15162 /* link the header and data RQs onto the parent cq child list */ 15243 /* link the header and data RQs onto the parent cq child list */
15163 list_add_tail(&hrq->list, &cq->child_list); 15244 list_add_tail(&hrq->list, &cq->child_list);
@@ -15270,7 +15351,7 @@ lpfc_mrq_create(struct lpfc_hba *phba, struct lpfc_queue **hrqp,
15270 cq->queue_id); 15351 cq->queue_id);
15271 bf_set(lpfc_rq_context_data_size, 15352 bf_set(lpfc_rq_context_data_size,
15272 &rq_create->u.request.context, 15353 &rq_create->u.request.context,
15273 LPFC_DATA_BUF_SIZE); 15354 LPFC_NVMET_DATA_BUF_SIZE);
15274 bf_set(lpfc_rq_context_hdr_size, 15355 bf_set(lpfc_rq_context_hdr_size,
15275 &rq_create->u.request.context, 15356 &rq_create->u.request.context,
15276 LPFC_HDR_BUF_SIZE); 15357 LPFC_HDR_BUF_SIZE);
@@ -15315,6 +15396,7 @@ lpfc_mrq_create(struct lpfc_hba *phba, struct lpfc_queue **hrqp,
15315 hrq->subtype = subtype; 15396 hrq->subtype = subtype;
15316 hrq->host_index = 0; 15397 hrq->host_index = 0;
15317 hrq->hba_index = 0; 15398 hrq->hba_index = 0;
15399 hrq->entry_repost = LPFC_RQ_REPOST;
15318 15400
15319 drq->db_format = LPFC_DB_RING_FORMAT; 15401 drq->db_format = LPFC_DB_RING_FORMAT;
15320 drq->db_regaddr = phba->sli4_hba.RQDBregaddr; 15402 drq->db_regaddr = phba->sli4_hba.RQDBregaddr;
@@ -15323,6 +15405,7 @@ lpfc_mrq_create(struct lpfc_hba *phba, struct lpfc_queue **hrqp,
15323 drq->subtype = subtype; 15405 drq->subtype = subtype;
15324 drq->host_index = 0; 15406 drq->host_index = 0;
15325 drq->hba_index = 0; 15407 drq->hba_index = 0;
15408 drq->entry_repost = LPFC_RQ_REPOST;
15326 15409
15327 list_add_tail(&hrq->list, &cq->child_list); 15410 list_add_tail(&hrq->list, &cq->child_list);
15328 list_add_tail(&drq->list, &cq->child_list); 15411 list_add_tail(&drq->list, &cq->child_list);
@@ -16063,6 +16146,8 @@ lpfc_fc_frame_check(struct lpfc_hba *phba, struct fc_frame_header *fc_hdr)
16063 struct fc_vft_header *fc_vft_hdr; 16146 struct fc_vft_header *fc_vft_hdr;
16064 uint32_t *header = (uint32_t *) fc_hdr; 16147 uint32_t *header = (uint32_t *) fc_hdr;
16065 16148
16149#define FC_RCTL_MDS_DIAGS 0xF4
16150
16066 switch (fc_hdr->fh_r_ctl) { 16151 switch (fc_hdr->fh_r_ctl) {
16067 case FC_RCTL_DD_UNCAT: /* uncategorized information */ 16152 case FC_RCTL_DD_UNCAT: /* uncategorized information */
16068 case FC_RCTL_DD_SOL_DATA: /* solicited data */ 16153 case FC_RCTL_DD_SOL_DATA: /* solicited data */
@@ -16090,6 +16175,7 @@ lpfc_fc_frame_check(struct lpfc_hba *phba, struct fc_frame_header *fc_hdr)
16090 case FC_RCTL_F_BSY: /* fabric busy to data frame */ 16175 case FC_RCTL_F_BSY: /* fabric busy to data frame */
16091 case FC_RCTL_F_BSYL: /* fabric busy to link control frame */ 16176 case FC_RCTL_F_BSYL: /* fabric busy to link control frame */
16092 case FC_RCTL_LCR: /* link credit reset */ 16177 case FC_RCTL_LCR: /* link credit reset */
16178 case FC_RCTL_MDS_DIAGS: /* MDS Diagnostics */
16093 case FC_RCTL_END: /* end */ 16179 case FC_RCTL_END: /* end */
16094 break; 16180 break;
16095 case FC_RCTL_VFTH: /* Virtual Fabric tagging Header */ 16181 case FC_RCTL_VFTH: /* Virtual Fabric tagging Header */
@@ -16099,12 +16185,16 @@ lpfc_fc_frame_check(struct lpfc_hba *phba, struct fc_frame_header *fc_hdr)
16099 default: 16185 default:
16100 goto drop; 16186 goto drop;
16101 } 16187 }
16188
16189#define FC_TYPE_VENDOR_UNIQUE 0xFF
16190
16102 switch (fc_hdr->fh_type) { 16191 switch (fc_hdr->fh_type) {
16103 case FC_TYPE_BLS: 16192 case FC_TYPE_BLS:
16104 case FC_TYPE_ELS: 16193 case FC_TYPE_ELS:
16105 case FC_TYPE_FCP: 16194 case FC_TYPE_FCP:
16106 case FC_TYPE_CT: 16195 case FC_TYPE_CT:
16107 case FC_TYPE_NVME: 16196 case FC_TYPE_NVME:
16197 case FC_TYPE_VENDOR_UNIQUE:
16108 break; 16198 break;
16109 case FC_TYPE_IP: 16199 case FC_TYPE_IP:
16110 case FC_TYPE_ILS: 16200 case FC_TYPE_ILS:
@@ -16115,12 +16205,14 @@ lpfc_fc_frame_check(struct lpfc_hba *phba, struct fc_frame_header *fc_hdr)
16115 lpfc_printf_log(phba, KERN_INFO, LOG_ELS, 16205 lpfc_printf_log(phba, KERN_INFO, LOG_ELS,
16116 "2538 Received frame rctl:%s (x%x), type:%s (x%x), " 16206 "2538 Received frame rctl:%s (x%x), type:%s (x%x), "
16117 "frame Data:%08x %08x %08x %08x %08x %08x %08x\n", 16207 "frame Data:%08x %08x %08x %08x %08x %08x %08x\n",
16208 (fc_hdr->fh_r_ctl == FC_RCTL_MDS_DIAGS) ? "MDS Diags" :
16118 lpfc_rctl_names[fc_hdr->fh_r_ctl], fc_hdr->fh_r_ctl, 16209 lpfc_rctl_names[fc_hdr->fh_r_ctl], fc_hdr->fh_r_ctl,
16119 lpfc_type_names[fc_hdr->fh_type], fc_hdr->fh_type, 16210 (fc_hdr->fh_type == FC_TYPE_VENDOR_UNIQUE) ?
16120 be32_to_cpu(header[0]), be32_to_cpu(header[1]), 16211 "Vendor Unique" : lpfc_type_names[fc_hdr->fh_type],
16121 be32_to_cpu(header[2]), be32_to_cpu(header[3]), 16212 fc_hdr->fh_type, be32_to_cpu(header[0]),
16122 be32_to_cpu(header[4]), be32_to_cpu(header[5]), 16213 be32_to_cpu(header[1]), be32_to_cpu(header[2]),
16123 be32_to_cpu(header[6])); 16214 be32_to_cpu(header[3]), be32_to_cpu(header[4]),
16215 be32_to_cpu(header[5]), be32_to_cpu(header[6]));
16124 return 0; 16216 return 0;
16125drop: 16217drop:
16126 lpfc_printf_log(phba, KERN_WARNING, LOG_ELS, 16218 lpfc_printf_log(phba, KERN_WARNING, LOG_ELS,
@@ -16926,6 +17018,96 @@ lpfc_sli4_send_seq_to_ulp(struct lpfc_vport *vport,
16926 lpfc_sli_release_iocbq(phba, iocbq); 17018 lpfc_sli_release_iocbq(phba, iocbq);
16927} 17019}
16928 17020
17021static void
17022lpfc_sli4_mds_loopback_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
17023 struct lpfc_iocbq *rspiocb)
17024{
17025 struct lpfc_dmabuf *pcmd = cmdiocb->context2;
17026
17027 if (pcmd && pcmd->virt)
17028 pci_pool_free(phba->lpfc_drb_pool, pcmd->virt, pcmd->phys);
17029 kfree(pcmd);
17030 lpfc_sli_release_iocbq(phba, cmdiocb);
17031}
17032
17033static void
17034lpfc_sli4_handle_mds_loopback(struct lpfc_vport *vport,
17035 struct hbq_dmabuf *dmabuf)
17036{
17037 struct fc_frame_header *fc_hdr;
17038 struct lpfc_hba *phba = vport->phba;
17039 struct lpfc_iocbq *iocbq = NULL;
17040 union lpfc_wqe *wqe;
17041 struct lpfc_dmabuf *pcmd = NULL;
17042 uint32_t frame_len;
17043 int rc;
17044
17045 fc_hdr = (struct fc_frame_header *)dmabuf->hbuf.virt;
17046 frame_len = bf_get(lpfc_rcqe_length, &dmabuf->cq_event.cqe.rcqe_cmpl);
17047
17048 /* Send the received frame back */
17049 iocbq = lpfc_sli_get_iocbq(phba);
17050 if (!iocbq)
17051 goto exit;
17052
17053 /* Allocate buffer for command payload */
17054 pcmd = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
17055 if (pcmd)
17056 pcmd->virt = pci_pool_alloc(phba->lpfc_drb_pool, GFP_KERNEL,
17057 &pcmd->phys);
17058 if (!pcmd || !pcmd->virt)
17059 goto exit;
17060
17061 INIT_LIST_HEAD(&pcmd->list);
17062
17063 /* copyin the payload */
17064 memcpy(pcmd->virt, dmabuf->dbuf.virt, frame_len);
17065
17066 /* fill in BDE's for command */
17067 iocbq->iocb.un.xseq64.bdl.addrHigh = putPaddrHigh(pcmd->phys);
17068 iocbq->iocb.un.xseq64.bdl.addrLow = putPaddrLow(pcmd->phys);
17069 iocbq->iocb.un.xseq64.bdl.bdeFlags = BUFF_TYPE_BDE_64;
17070 iocbq->iocb.un.xseq64.bdl.bdeSize = frame_len;
17071
17072 iocbq->context2 = pcmd;
17073 iocbq->vport = vport;
17074 iocbq->iocb_flag &= ~LPFC_FIP_ELS_ID_MASK;
17075 iocbq->iocb_flag |= LPFC_USE_FCPWQIDX;
17076
17077 /*
17078 * Setup rest of the iocb as though it were a WQE
17079 * Build the SEND_FRAME WQE
17080 */
17081 wqe = (union lpfc_wqe *)&iocbq->iocb;
17082
17083 wqe->send_frame.frame_len = frame_len;
17084 wqe->send_frame.fc_hdr_wd0 = be32_to_cpu(*((uint32_t *)fc_hdr));
17085 wqe->send_frame.fc_hdr_wd1 = be32_to_cpu(*((uint32_t *)fc_hdr + 1));
17086 wqe->send_frame.fc_hdr_wd2 = be32_to_cpu(*((uint32_t *)fc_hdr + 2));
17087 wqe->send_frame.fc_hdr_wd3 = be32_to_cpu(*((uint32_t *)fc_hdr + 3));
17088 wqe->send_frame.fc_hdr_wd4 = be32_to_cpu(*((uint32_t *)fc_hdr + 4));
17089 wqe->send_frame.fc_hdr_wd5 = be32_to_cpu(*((uint32_t *)fc_hdr + 5));
17090
17091 iocbq->iocb.ulpCommand = CMD_SEND_FRAME;
17092 iocbq->iocb.ulpLe = 1;
17093 iocbq->iocb_cmpl = lpfc_sli4_mds_loopback_cmpl;
17094 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, iocbq, 0);
17095 if (rc == IOCB_ERROR)
17096 goto exit;
17097
17098 lpfc_in_buf_free(phba, &dmabuf->dbuf);
17099 return;
17100
17101exit:
17102 lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
17103 "2023 Unable to process MDS loopback frame\n");
17104 if (pcmd && pcmd->virt)
17105 pci_pool_free(phba->lpfc_drb_pool, pcmd->virt, pcmd->phys);
17106 kfree(pcmd);
17107 lpfc_sli_release_iocbq(phba, iocbq);
17108 lpfc_in_buf_free(phba, &dmabuf->dbuf);
17109}
17110
16929/** 17111/**
16930 * lpfc_sli4_handle_received_buffer - Handle received buffers from firmware 17112 * lpfc_sli4_handle_received_buffer - Handle received buffers from firmware
16931 * @phba: Pointer to HBA context object. 17113 * @phba: Pointer to HBA context object.
@@ -16964,6 +17146,13 @@ lpfc_sli4_handle_received_buffer(struct lpfc_hba *phba,
16964 fcfi = bf_get(lpfc_rcqe_fcf_id, 17146 fcfi = bf_get(lpfc_rcqe_fcf_id,
16965 &dmabuf->cq_event.cqe.rcqe_cmpl); 17147 &dmabuf->cq_event.cqe.rcqe_cmpl);
16966 17148
17149 if (fc_hdr->fh_r_ctl == 0xF4 && fc_hdr->fh_type == 0xFF) {
17150 vport = phba->pport;
17151 /* Handle MDS Loopback frames */
17152 lpfc_sli4_handle_mds_loopback(vport, dmabuf);
17153 return;
17154 }
17155
16967 /* d_id this frame is directed to */ 17156 /* d_id this frame is directed to */
16968 did = sli4_did_from_fc_hdr(fc_hdr); 17157 did = sli4_did_from_fc_hdr(fc_hdr);
16969 17158
@@ -17137,6 +17326,14 @@ lpfc_sli4_post_rpi_hdr(struct lpfc_hba *phba, struct lpfc_rpi_hdr *rpi_page)
17137 "status x%x add_status x%x, mbx status x%x\n", 17326 "status x%x add_status x%x, mbx status x%x\n",
17138 shdr_status, shdr_add_status, rc); 17327 shdr_status, shdr_add_status, rc);
17139 rc = -ENXIO; 17328 rc = -ENXIO;
17329 } else {
17330 /*
17331 * The next_rpi stores the next logical module-64 rpi value used
17332 * to post physical rpis in subsequent rpi postings.
17333 */
17334 spin_lock_irq(&phba->hbalock);
17335 phba->sli4_hba.next_rpi = rpi_page->next_rpi;
17336 spin_unlock_irq(&phba->hbalock);
17140 } 17337 }
17141 return rc; 17338 return rc;
17142} 17339}
@@ -18717,7 +18914,7 @@ lpfc_sli4_issue_wqe(struct lpfc_hba *phba, uint32_t ring_number,
18717 18914
18718 spin_lock_irqsave(&pring->ring_lock, iflags); 18915 spin_lock_irqsave(&pring->ring_lock, iflags);
18719 ctxp = pwqe->context2; 18916 ctxp = pwqe->context2;
18720 sglq = ctxp->rqb_buffer->sglq; 18917 sglq = ctxp->ctxbuf->sglq;
18721 if (pwqe->sli4_xritag == NO_XRI) { 18918 if (pwqe->sli4_xritag == NO_XRI) {
18722 pwqe->sli4_lxritag = sglq->sli4_lxritag; 18919 pwqe->sli4_lxritag = sglq->sli4_lxritag;
18723 pwqe->sli4_xritag = sglq->sli4_xritag; 18920 pwqe->sli4_xritag = sglq->sli4_xritag;
diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h
index da46471337c8..cf863db27700 100644
--- a/drivers/scsi/lpfc/lpfc_sli4.h
+++ b/drivers/scsi/lpfc/lpfc_sli4.h
@@ -24,7 +24,6 @@
24#define LPFC_XRI_EXCH_BUSY_WAIT_TMO 10000 24#define LPFC_XRI_EXCH_BUSY_WAIT_TMO 10000
25#define LPFC_XRI_EXCH_BUSY_WAIT_T1 10 25#define LPFC_XRI_EXCH_BUSY_WAIT_T1 10
26#define LPFC_XRI_EXCH_BUSY_WAIT_T2 30000 26#define LPFC_XRI_EXCH_BUSY_WAIT_T2 30000
27#define LPFC_RELEASE_NOTIFICATION_INTERVAL 32
28#define LPFC_RPI_LOW_WATER_MARK 10 27#define LPFC_RPI_LOW_WATER_MARK 10
29 28
30#define LPFC_UNREG_FCF 1 29#define LPFC_UNREG_FCF 1
@@ -155,7 +154,11 @@ struct lpfc_queue {
155 uint32_t entry_count; /* Number of entries to support on the queue */ 154 uint32_t entry_count; /* Number of entries to support on the queue */
156 uint32_t entry_size; /* Size of each queue entry. */ 155 uint32_t entry_size; /* Size of each queue entry. */
157 uint32_t entry_repost; /* Count of entries before doorbell is rung */ 156 uint32_t entry_repost; /* Count of entries before doorbell is rung */
158#define LPFC_QUEUE_MIN_REPOST 8 157#define LPFC_EQ_REPOST 8
158#define LPFC_MQ_REPOST 8
159#define LPFC_CQ_REPOST 64
160#define LPFC_RQ_REPOST 64
161#define LPFC_RELEASE_NOTIFICATION_INTERVAL 32 /* For WQs */
159 uint32_t queue_id; /* Queue ID assigned by the hardware */ 162 uint32_t queue_id; /* Queue ID assigned by the hardware */
160 uint32_t assoc_qid; /* Queue ID associated with, for CQ/WQ/MQ */ 163 uint32_t assoc_qid; /* Queue ID associated with, for CQ/WQ/MQ */
161 uint32_t page_count; /* Number of pages allocated for this queue */ 164 uint32_t page_count; /* Number of pages allocated for this queue */
@@ -195,7 +198,7 @@ struct lpfc_queue {
195/* defines for RQ stats */ 198/* defines for RQ stats */
196#define RQ_no_posted_buf q_cnt_1 199#define RQ_no_posted_buf q_cnt_1
197#define RQ_no_buf_found q_cnt_2 200#define RQ_no_buf_found q_cnt_2
198#define RQ_buf_trunc q_cnt_3 201#define RQ_buf_posted q_cnt_3
199#define RQ_rcv_buf q_cnt_4 202#define RQ_rcv_buf q_cnt_4
200 203
201 uint64_t isr_timestamp; 204 uint64_t isr_timestamp;
@@ -617,12 +620,17 @@ struct lpfc_sli4_hba {
617 uint16_t scsi_xri_start; 620 uint16_t scsi_xri_start;
618 uint16_t els_xri_cnt; 621 uint16_t els_xri_cnt;
619 uint16_t nvmet_xri_cnt; 622 uint16_t nvmet_xri_cnt;
623 uint16_t nvmet_ctx_cnt;
624 uint16_t nvmet_io_wait_cnt;
625 uint16_t nvmet_io_wait_total;
620 struct list_head lpfc_els_sgl_list; 626 struct list_head lpfc_els_sgl_list;
621 struct list_head lpfc_abts_els_sgl_list; 627 struct list_head lpfc_abts_els_sgl_list;
622 struct list_head lpfc_nvmet_sgl_list; 628 struct list_head lpfc_nvmet_sgl_list;
623 struct list_head lpfc_abts_nvmet_ctx_list; 629 struct list_head lpfc_abts_nvmet_ctx_list;
624 struct list_head lpfc_abts_scsi_buf_list; 630 struct list_head lpfc_abts_scsi_buf_list;
625 struct list_head lpfc_abts_nvme_buf_list; 631 struct list_head lpfc_abts_nvme_buf_list;
632 struct list_head lpfc_nvmet_ctx_list;
633 struct list_head lpfc_nvmet_io_wait_list;
626 struct lpfc_sglq **lpfc_sglq_active_list; 634 struct lpfc_sglq **lpfc_sglq_active_list;
627 struct list_head lpfc_rpi_hdr_list; 635 struct list_head lpfc_rpi_hdr_list;
628 unsigned long *rpi_bmask; 636 unsigned long *rpi_bmask;
@@ -654,6 +662,7 @@ struct lpfc_sli4_hba {
654 spinlock_t abts_scsi_buf_list_lock; /* list of aborted SCSI IOs */ 662 spinlock_t abts_scsi_buf_list_lock; /* list of aborted SCSI IOs */
655 spinlock_t sgl_list_lock; /* list of aborted els IOs */ 663 spinlock_t sgl_list_lock; /* list of aborted els IOs */
656 spinlock_t nvmet_io_lock; 664 spinlock_t nvmet_io_lock;
665 spinlock_t nvmet_io_wait_lock; /* IOs waiting for ctx resources */
657 uint32_t physical_port; 666 uint32_t physical_port;
658 667
659 /* CPU to vector mapping information */ 668 /* CPU to vector mapping information */
@@ -661,8 +670,6 @@ struct lpfc_sli4_hba {
661 uint16_t num_online_cpu; 670 uint16_t num_online_cpu;
662 uint16_t num_present_cpu; 671 uint16_t num_present_cpu;
663 uint16_t curr_disp_cpu; 672 uint16_t curr_disp_cpu;
664
665 uint16_t nvmet_mrq_post_idx;
666}; 673};
667 674
668enum lpfc_sge_type { 675enum lpfc_sge_type {
@@ -698,6 +705,7 @@ struct lpfc_rpi_hdr {
698 struct lpfc_dmabuf *dmabuf; 705 struct lpfc_dmabuf *dmabuf;
699 uint32_t page_count; 706 uint32_t page_count;
700 uint32_t start_rpi; 707 uint32_t start_rpi;
708 uint16_t next_rpi;
701}; 709};
702 710
703struct lpfc_rsrc_blks { 711struct lpfc_rsrc_blks {
@@ -762,7 +770,6 @@ int lpfc_rq_create(struct lpfc_hba *, struct lpfc_queue *,
762int lpfc_mrq_create(struct lpfc_hba *phba, struct lpfc_queue **hrqp, 770int lpfc_mrq_create(struct lpfc_hba *phba, struct lpfc_queue **hrqp,
763 struct lpfc_queue **drqp, struct lpfc_queue **cqp, 771 struct lpfc_queue **drqp, struct lpfc_queue **cqp,
764 uint32_t subtype); 772 uint32_t subtype);
765void lpfc_rq_adjust_repost(struct lpfc_hba *, struct lpfc_queue *, int);
766int lpfc_eq_destroy(struct lpfc_hba *, struct lpfc_queue *); 773int lpfc_eq_destroy(struct lpfc_hba *, struct lpfc_queue *);
767int lpfc_cq_destroy(struct lpfc_hba *, struct lpfc_queue *); 774int lpfc_cq_destroy(struct lpfc_hba *, struct lpfc_queue *);
768int lpfc_mq_destroy(struct lpfc_hba *, struct lpfc_queue *); 775int lpfc_mq_destroy(struct lpfc_hba *, struct lpfc_queue *);
diff --git a/drivers/scsi/lpfc/lpfc_version.h b/drivers/scsi/lpfc/lpfc_version.h
index 1c26dc67151b..c2653244221c 100644
--- a/drivers/scsi/lpfc/lpfc_version.h
+++ b/drivers/scsi/lpfc/lpfc_version.h
@@ -20,7 +20,7 @@
20 * included with this package. * 20 * included with this package. *
21 *******************************************************************/ 21 *******************************************************************/
22 22
23#define LPFC_DRIVER_VERSION "11.2.0.12" 23#define LPFC_DRIVER_VERSION "11.2.0.14"
24#define LPFC_DRIVER_NAME "lpfc" 24#define LPFC_DRIVER_NAME "lpfc"
25 25
26/* Used for SLI 2/3 */ 26/* Used for SLI 2/3 */
diff --git a/drivers/scsi/qedi/qedi.h b/drivers/scsi/qedi/qedi.h
index 5ca3e8c28a3f..32632c9b2276 100644
--- a/drivers/scsi/qedi/qedi.h
+++ b/drivers/scsi/qedi/qedi.h
@@ -38,7 +38,7 @@ struct qedi_endpoint;
38#define QEDI_MAX_ISCSI_TASK 4096 38#define QEDI_MAX_ISCSI_TASK 4096
39#define QEDI_MAX_TASK_NUM 0x0FFF 39#define QEDI_MAX_TASK_NUM 0x0FFF
40#define QEDI_MAX_ISCSI_CONNS_PER_HBA 1024 40#define QEDI_MAX_ISCSI_CONNS_PER_HBA 1024
41#define QEDI_ISCSI_MAX_BDS_PER_CMD 256 /* Firmware max BDs is 256 */ 41#define QEDI_ISCSI_MAX_BDS_PER_CMD 255 /* Firmware max BDs is 255 */
42#define MAX_OUSTANDING_TASKS_PER_CON 1024 42#define MAX_OUSTANDING_TASKS_PER_CON 1024
43 43
44#define QEDI_MAX_BD_LEN 0xffff 44#define QEDI_MAX_BD_LEN 0xffff
@@ -63,6 +63,7 @@ struct qedi_endpoint;
63#define QEDI_PAGE_MASK (~((QEDI_PAGE_SIZE) - 1)) 63#define QEDI_PAGE_MASK (~((QEDI_PAGE_SIZE) - 1))
64 64
65#define QEDI_PAGE_SIZE 4096 65#define QEDI_PAGE_SIZE 4096
66#define QEDI_HW_DMA_BOUNDARY 0xfff
66#define QEDI_PATH_HANDLE 0xFE0000000UL 67#define QEDI_PATH_HANDLE 0xFE0000000UL
67 68
68struct qedi_uio_ctrl { 69struct qedi_uio_ctrl {
diff --git a/drivers/scsi/qedi/qedi_fw.c b/drivers/scsi/qedi/qedi_fw.c
index d6978cbc56f0..507512cc478b 100644
--- a/drivers/scsi/qedi/qedi_fw.c
+++ b/drivers/scsi/qedi/qedi_fw.c
@@ -870,7 +870,6 @@ static void qedi_process_cmd_cleanup_resp(struct qedi_ctx *qedi,
870 QEDI_ERR(&qedi->dbg_ctx, 870 QEDI_ERR(&qedi->dbg_ctx,
871 "Delayed or untracked cleanup response, itt=0x%x, tid=0x%x, cid=0x%x, task=%p\n", 871 "Delayed or untracked cleanup response, itt=0x%x, tid=0x%x, cid=0x%x, task=%p\n",
872 protoitt, cqe->itid, qedi_conn->iscsi_conn_id, task); 872 protoitt, cqe->itid, qedi_conn->iscsi_conn_id, task);
873 WARN_ON(1);
874 } 873 }
875} 874}
876 875
@@ -1494,6 +1493,8 @@ static int qedi_send_iscsi_tmf(struct qedi_conn *qedi_conn,
1494 tmf_hdr = (struct iscsi_tm *)mtask->hdr; 1493 tmf_hdr = (struct iscsi_tm *)mtask->hdr;
1495 qedi_cmd = (struct qedi_cmd *)mtask->dd_data; 1494 qedi_cmd = (struct qedi_cmd *)mtask->dd_data;
1496 ep = qedi_conn->ep; 1495 ep = qedi_conn->ep;
1496 if (!ep)
1497 return -ENODEV;
1497 1498
1498 tid = qedi_get_task_idx(qedi); 1499 tid = qedi_get_task_idx(qedi);
1499 if (tid == -1) 1500 if (tid == -1)
diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
index 3548d46f9b27..87f0af358b33 100644
--- a/drivers/scsi/qedi/qedi_iscsi.c
+++ b/drivers/scsi/qedi/qedi_iscsi.c
@@ -59,6 +59,7 @@ struct scsi_host_template qedi_host_template = {
59 .this_id = -1, 59 .this_id = -1,
60 .sg_tablesize = QEDI_ISCSI_MAX_BDS_PER_CMD, 60 .sg_tablesize = QEDI_ISCSI_MAX_BDS_PER_CMD,
61 .max_sectors = 0xffff, 61 .max_sectors = 0xffff,
62 .dma_boundary = QEDI_HW_DMA_BOUNDARY,
62 .cmd_per_lun = 128, 63 .cmd_per_lun = 128,
63 .use_clustering = ENABLE_CLUSTERING, 64 .use_clustering = ENABLE_CLUSTERING,
64 .shost_attrs = qedi_shost_attrs, 65 .shost_attrs = qedi_shost_attrs,
@@ -1223,8 +1224,12 @@ static int qedi_set_path(struct Scsi_Host *shost, struct iscsi_path *path_data)
1223 1224
1224 iscsi_cid = (u32)path_data->handle; 1225 iscsi_cid = (u32)path_data->handle;
1225 qedi_ep = qedi->ep_tbl[iscsi_cid]; 1226 qedi_ep = qedi->ep_tbl[iscsi_cid];
1226 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_CONN, 1227 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
1227 "iscsi_cid=0x%x, qedi_ep=%p\n", iscsi_cid, qedi_ep); 1228 "iscsi_cid=0x%x, qedi_ep=%p\n", iscsi_cid, qedi_ep);
1229 if (!qedi_ep) {
1230 ret = -EINVAL;
1231 goto set_path_exit;
1232 }
1228 1233
1229 if (!is_valid_ether_addr(&path_data->mac_addr[0])) { 1234 if (!is_valid_ether_addr(&path_data->mac_addr[0])) {
1230 QEDI_NOTICE(&qedi->dbg_ctx, "dst mac NOT VALID\n"); 1235 QEDI_NOTICE(&qedi->dbg_ctx, "dst mac NOT VALID\n");
diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
index 92775a8b74b1..879d3b7462f9 100644
--- a/drivers/scsi/qedi/qedi_main.c
+++ b/drivers/scsi/qedi/qedi_main.c
@@ -151,6 +151,11 @@ static int qedi_uio_close(struct uio_info *uinfo, struct inode *inode)
151 151
152static void __qedi_free_uio_rings(struct qedi_uio_dev *udev) 152static void __qedi_free_uio_rings(struct qedi_uio_dev *udev)
153{ 153{
154 if (udev->uctrl) {
155 free_page((unsigned long)udev->uctrl);
156 udev->uctrl = NULL;
157 }
158
154 if (udev->ll2_ring) { 159 if (udev->ll2_ring) {
155 free_page((unsigned long)udev->ll2_ring); 160 free_page((unsigned long)udev->ll2_ring);
156 udev->ll2_ring = NULL; 161 udev->ll2_ring = NULL;
@@ -169,7 +174,6 @@ static void __qedi_free_uio(struct qedi_uio_dev *udev)
169 __qedi_free_uio_rings(udev); 174 __qedi_free_uio_rings(udev);
170 175
171 pci_dev_put(udev->pdev); 176 pci_dev_put(udev->pdev);
172 kfree(udev->uctrl);
173 kfree(udev); 177 kfree(udev);
174} 178}
175 179
@@ -208,6 +212,11 @@ static int __qedi_alloc_uio_rings(struct qedi_uio_dev *udev)
208 if (udev->ll2_ring || udev->ll2_buf) 212 if (udev->ll2_ring || udev->ll2_buf)
209 return rc; 213 return rc;
210 214
215 /* Memory for control area. */
216 udev->uctrl = (void *)get_zeroed_page(GFP_KERNEL);
217 if (!udev->uctrl)
218 return -ENOMEM;
219
211 /* Allocating memory for LL2 ring */ 220 /* Allocating memory for LL2 ring */
212 udev->ll2_ring_size = QEDI_PAGE_SIZE; 221 udev->ll2_ring_size = QEDI_PAGE_SIZE;
213 udev->ll2_ring = (void *)get_zeroed_page(GFP_KERNEL | __GFP_COMP); 222 udev->ll2_ring = (void *)get_zeroed_page(GFP_KERNEL | __GFP_COMP);
@@ -237,7 +246,6 @@ exit_alloc_ring:
237static int qedi_alloc_uio_rings(struct qedi_ctx *qedi) 246static int qedi_alloc_uio_rings(struct qedi_ctx *qedi)
238{ 247{
239 struct qedi_uio_dev *udev = NULL; 248 struct qedi_uio_dev *udev = NULL;
240 struct qedi_uio_ctrl *uctrl = NULL;
241 int rc = 0; 249 int rc = 0;
242 250
243 list_for_each_entry(udev, &qedi_udev_list, list) { 251 list_for_each_entry(udev, &qedi_udev_list, list) {
@@ -258,21 +266,14 @@ static int qedi_alloc_uio_rings(struct qedi_ctx *qedi)
258 goto err_udev; 266 goto err_udev;
259 } 267 }
260 268
261 uctrl = kzalloc(sizeof(*uctrl), GFP_KERNEL);
262 if (!uctrl) {
263 rc = -ENOMEM;
264 goto err_uctrl;
265 }
266
267 udev->uio_dev = -1; 269 udev->uio_dev = -1;
268 270
269 udev->qedi = qedi; 271 udev->qedi = qedi;
270 udev->pdev = qedi->pdev; 272 udev->pdev = qedi->pdev;
271 udev->uctrl = uctrl;
272 273
273 rc = __qedi_alloc_uio_rings(udev); 274 rc = __qedi_alloc_uio_rings(udev);
274 if (rc) 275 if (rc)
275 goto err_uio_rings; 276 goto err_uctrl;
276 277
277 list_add(&udev->list, &qedi_udev_list); 278 list_add(&udev->list, &qedi_udev_list);
278 279
@@ -283,8 +284,6 @@ static int qedi_alloc_uio_rings(struct qedi_ctx *qedi)
283 udev->rx_pkt = udev->ll2_buf + LL2_SINGLE_BUF_SIZE; 284 udev->rx_pkt = udev->ll2_buf + LL2_SINGLE_BUF_SIZE;
284 return 0; 285 return 0;
285 286
286 err_uio_rings:
287 kfree(uctrl);
288 err_uctrl: 287 err_uctrl:
289 kfree(udev); 288 kfree(udev);
290 err_udev: 289 err_udev:
@@ -828,6 +827,8 @@ static int qedi_set_iscsi_pf_param(struct qedi_ctx *qedi)
828 qedi->pf_params.iscsi_pf_params.num_uhq_pages_in_ring = num_sq_pages; 827 qedi->pf_params.iscsi_pf_params.num_uhq_pages_in_ring = num_sq_pages;
829 qedi->pf_params.iscsi_pf_params.num_queues = qedi->num_queues; 828 qedi->pf_params.iscsi_pf_params.num_queues = qedi->num_queues;
830 qedi->pf_params.iscsi_pf_params.debug_mode = qedi_fw_debug; 829 qedi->pf_params.iscsi_pf_params.debug_mode = qedi_fw_debug;
830 qedi->pf_params.iscsi_pf_params.two_msl_timer = 4000;
831 qedi->pf_params.iscsi_pf_params.max_fin_rt = 2;
831 832
832 for (log_page_size = 0 ; log_page_size < 32 ; log_page_size++) { 833 for (log_page_size = 0 ; log_page_size < 32 ; log_page_size++) {
833 if ((1 << log_page_size) == PAGE_SIZE) 834 if ((1 << log_page_size) == PAGE_SIZE)
@@ -1498,11 +1499,9 @@ err_idx:
1498 1499
1499void qedi_clear_task_idx(struct qedi_ctx *qedi, int idx) 1500void qedi_clear_task_idx(struct qedi_ctx *qedi, int idx)
1500{ 1501{
1501 if (!test_and_clear_bit(idx, qedi->task_idx_map)) { 1502 if (!test_and_clear_bit(idx, qedi->task_idx_map))
1502 QEDI_ERR(&qedi->dbg_ctx, 1503 QEDI_ERR(&qedi->dbg_ctx,
1503 "FW task context, already cleared, tid=0x%x\n", idx); 1504 "FW task context, already cleared, tid=0x%x\n", idx);
1504 WARN_ON(1);
1505 }
1506} 1505}
1507 1506
1508void qedi_update_itt_map(struct qedi_ctx *qedi, u32 tid, u32 proto_itt, 1507void qedi_update_itt_map(struct qedi_ctx *qedi, u32 tid, u32 proto_itt,
diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
index 16d1cd50feed..ca3420de5a01 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.c
+++ b/drivers/scsi/qla2xxx/qla_bsg.c
@@ -730,6 +730,8 @@ qla2x00_process_loopback(struct bsg_job *bsg_job)
730 return -EIO; 730 return -EIO;
731 } 731 }
732 732
733 memset(&elreq, 0, sizeof(elreq));
734
733 elreq.req_sg_cnt = dma_map_sg(&ha->pdev->dev, 735 elreq.req_sg_cnt = dma_map_sg(&ha->pdev->dev,
734 bsg_job->request_payload.sg_list, bsg_job->request_payload.sg_cnt, 736 bsg_job->request_payload.sg_list, bsg_job->request_payload.sg_cnt,
735 DMA_TO_DEVICE); 737 DMA_TO_DEVICE);
@@ -795,10 +797,9 @@ qla2x00_process_loopback(struct bsg_job *bsg_job)
795 797
796 if (atomic_read(&vha->loop_state) == LOOP_READY && 798 if (atomic_read(&vha->loop_state) == LOOP_READY &&
797 (ha->current_topology == ISP_CFG_F || 799 (ha->current_topology == ISP_CFG_F ||
798 ((IS_QLA81XX(ha) || IS_QLA8031(ha) || IS_QLA8044(ha)) && 800 (le32_to_cpu(*(uint32_t *)req_data) == ELS_OPCODE_BYTE &&
799 le32_to_cpu(*(uint32_t *)req_data) == ELS_OPCODE_BYTE 801 req_data_len == MAX_ELS_FRAME_PAYLOAD)) &&
800 && req_data_len == MAX_ELS_FRAME_PAYLOAD)) && 802 elreq.options == EXTERNAL_LOOPBACK) {
801 elreq.options == EXTERNAL_LOOPBACK) {
802 type = "FC_BSG_HST_VENDOR_ECHO_DIAG"; 803 type = "FC_BSG_HST_VENDOR_ECHO_DIAG";
803 ql_dbg(ql_dbg_user, vha, 0x701e, 804 ql_dbg(ql_dbg_user, vha, 0x701e,
804 "BSG request type: %s.\n", type); 805 "BSG request type: %s.\n", type);
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 51b4179469d1..88748a6ab73f 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -1131,7 +1131,7 @@ qla24xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
1131 1131
1132 /* Mailbox registers. */ 1132 /* Mailbox registers. */
1133 mbx_reg = &reg->mailbox0; 1133 mbx_reg = &reg->mailbox0;
1134 for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++, dmp_reg++) 1134 for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++, mbx_reg++)
1135 fw->mailbox_reg[cnt] = htons(RD_REG_WORD(mbx_reg)); 1135 fw->mailbox_reg[cnt] = htons(RD_REG_WORD(mbx_reg));
1136 1136
1137 /* Transfer sequence registers. */ 1137 /* Transfer sequence registers. */
@@ -2090,7 +2090,7 @@ qla83xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
2090 2090
2091 /* Mailbox registers. */ 2091 /* Mailbox registers. */
2092 mbx_reg = &reg->mailbox0; 2092 mbx_reg = &reg->mailbox0;
2093 for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++, dmp_reg++) 2093 for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++, mbx_reg++)
2094 fw->mailbox_reg[cnt] = htons(RD_REG_WORD(mbx_reg)); 2094 fw->mailbox_reg[cnt] = htons(RD_REG_WORD(mbx_reg));
2095 2095
2096 /* Transfer sequence registers. */ 2096 /* Transfer sequence registers. */
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index ae119018dfaa..eddbc1218a39 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -3425,6 +3425,7 @@ struct qla_hw_data {
3425 uint8_t max_req_queues; 3425 uint8_t max_req_queues;
3426 uint8_t max_rsp_queues; 3426 uint8_t max_rsp_queues;
3427 uint8_t max_qpairs; 3427 uint8_t max_qpairs;
3428 uint8_t num_qpairs;
3428 struct qla_qpair *base_qpair; 3429 struct qla_qpair *base_qpair;
3429 struct qla_npiv_entry *npiv_info; 3430 struct qla_npiv_entry *npiv_info;
3430 uint16_t nvram_npiv_size; 3431 uint16_t nvram_npiv_size;
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 034743309ada..0391fc317003 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -7543,12 +7543,13 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos, int v
7543 /* Assign available que pair id */ 7543 /* Assign available que pair id */
7544 mutex_lock(&ha->mq_lock); 7544 mutex_lock(&ha->mq_lock);
7545 qpair_id = find_first_zero_bit(ha->qpair_qid_map, ha->max_qpairs); 7545 qpair_id = find_first_zero_bit(ha->qpair_qid_map, ha->max_qpairs);
7546 if (qpair_id >= ha->max_qpairs) { 7546 if (ha->num_qpairs >= ha->max_qpairs) {
7547 mutex_unlock(&ha->mq_lock); 7547 mutex_unlock(&ha->mq_lock);
7548 ql_log(ql_log_warn, vha, 0x0183, 7548 ql_log(ql_log_warn, vha, 0x0183,
7549 "No resources to create additional q pair.\n"); 7549 "No resources to create additional q pair.\n");
7550 goto fail_qid_map; 7550 goto fail_qid_map;
7551 } 7551 }
7552 ha->num_qpairs++;
7552 set_bit(qpair_id, ha->qpair_qid_map); 7553 set_bit(qpair_id, ha->qpair_qid_map);
7553 ha->queue_pair_map[qpair_id] = qpair; 7554 ha->queue_pair_map[qpair_id] = qpair;
7554 qpair->id = qpair_id; 7555 qpair->id = qpair_id;
@@ -7635,6 +7636,7 @@ fail_rsp:
7635fail_msix: 7636fail_msix:
7636 ha->queue_pair_map[qpair_id] = NULL; 7637 ha->queue_pair_map[qpair_id] = NULL;
7637 clear_bit(qpair_id, ha->qpair_qid_map); 7638 clear_bit(qpair_id, ha->qpair_qid_map);
7639 ha->num_qpairs--;
7638 mutex_unlock(&ha->mq_lock); 7640 mutex_unlock(&ha->mq_lock);
7639fail_qid_map: 7641fail_qid_map:
7640 kfree(qpair); 7642 kfree(qpair);
@@ -7660,6 +7662,7 @@ int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
7660 mutex_lock(&ha->mq_lock); 7662 mutex_lock(&ha->mq_lock);
7661 ha->queue_pair_map[qpair->id] = NULL; 7663 ha->queue_pair_map[qpair->id] = NULL;
7662 clear_bit(qpair->id, ha->qpair_qid_map); 7664 clear_bit(qpair->id, ha->qpair_qid_map);
7665 ha->num_qpairs--;
7663 list_del(&qpair->qp_list_elem); 7666 list_del(&qpair->qp_list_elem);
7664 if (list_empty(&vha->qp_list)) 7667 if (list_empty(&vha->qp_list))
7665 vha->flags.qpairs_available = 0; 7668 vha->flags.qpairs_available = 0;
diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h
index 66df6cec59da..c61a6a871c8e 100644
--- a/drivers/scsi/qla2xxx/qla_inline.h
+++ b/drivers/scsi/qla2xxx/qla_inline.h
@@ -129,28 +129,16 @@ qla2x00_clear_loop_id(fc_port_t *fcport) {
129} 129}
130 130
131static inline void 131static inline void
132qla2x00_clean_dsd_pool(struct qla_hw_data *ha, srb_t *sp, 132qla2x00_clean_dsd_pool(struct qla_hw_data *ha, struct crc_context *ctx)
133 struct qla_tgt_cmd *tc)
134{ 133{
135 struct dsd_dma *dsd_ptr, *tdsd_ptr; 134 struct dsd_dma *dsd, *tdsd;
136 struct crc_context *ctx;
137
138 if (sp)
139 ctx = (struct crc_context *)GET_CMD_CTX_SP(sp);
140 else if (tc)
141 ctx = (struct crc_context *)tc->ctx;
142 else {
143 BUG();
144 return;
145 }
146 135
147 /* clean up allocated prev pool */ 136 /* clean up allocated prev pool */
148 list_for_each_entry_safe(dsd_ptr, tdsd_ptr, 137 list_for_each_entry_safe(dsd, tdsd, &ctx->dsd_list, list) {
149 &ctx->dsd_list, list) { 138 dma_pool_free(ha->dl_dma_pool, dsd->dsd_addr,
150 dma_pool_free(ha->dl_dma_pool, dsd_ptr->dsd_addr, 139 dsd->dsd_list_dma);
151 dsd_ptr->dsd_list_dma); 140 list_del(&dsd->list);
152 list_del(&dsd_ptr->list); 141 kfree(dsd);
153 kfree(dsd_ptr);
154 } 142 }
155 INIT_LIST_HEAD(&ctx->dsd_list); 143 INIT_LIST_HEAD(&ctx->dsd_list);
156} 144}
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index aac03504d9a3..2572121b765b 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -3282,7 +3282,7 @@ msix_register_fail:
3282 } 3282 }
3283 3283
3284 /* Enable MSI-X vector for response queue update for queue 0 */ 3284 /* Enable MSI-X vector for response queue update for queue 0 */
3285 if (IS_QLA83XX(ha) || IS_QLA27XX(ha)) { 3285 if (IS_QLA25XX(ha) || IS_QLA83XX(ha) || IS_QLA27XX(ha)) {
3286 if (ha->msixbase && ha->mqiobase && 3286 if (ha->msixbase && ha->mqiobase &&
3287 (ha->max_rsp_queues > 1 || ha->max_req_queues > 1 || 3287 (ha->max_rsp_queues > 1 || ha->max_req_queues > 1 ||
3288 ql2xmqsupport)) 3288 ql2xmqsupport))
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index a113ab3592a7..cba1fc5e8be9 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -3676,15 +3676,6 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
3676 qlt_update_host_map(vha, id); 3676 qlt_update_host_map(vha, id);
3677 } 3677 }
3678 3678
3679 fc_host_port_name(vha->host) =
3680 wwn_to_u64(vha->port_name);
3681
3682 if (qla_ini_mode_enabled(vha))
3683 ql_dbg(ql_dbg_mbx, vha, 0x1018,
3684 "FA-WWN portname %016llx (%x)\n",
3685 fc_host_port_name(vha->host),
3686 rptid_entry->vp_status);
3687
3688 set_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags); 3679 set_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags);
3689 set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); 3680 set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags);
3690 } else { 3681 } else {
@@ -4821,9 +4812,9 @@ qla2x00_echo_test(scsi_qla_host_t *vha, struct msg_echo_lb *mreq,
4821 4812
4822 memset(mcp->mb, 0 , sizeof(mcp->mb)); 4813 memset(mcp->mb, 0 , sizeof(mcp->mb));
4823 mcp->mb[0] = MBC_DIAGNOSTIC_ECHO; 4814 mcp->mb[0] = MBC_DIAGNOSTIC_ECHO;
4824 mcp->mb[1] = mreq->options | BIT_6; /* BIT_6 specifies 64bit address */ 4815 /* BIT_6 specifies 64bit address */
4816 mcp->mb[1] = mreq->options | BIT_15 | BIT_6;
4825 if (IS_CNA_CAPABLE(ha)) { 4817 if (IS_CNA_CAPABLE(ha)) {
4826 mcp->mb[1] |= BIT_15;
4827 mcp->mb[2] = vha->fcoe_fcf_idx; 4818 mcp->mb[2] = vha->fcoe_fcf_idx;
4828 } 4819 }
4829 mcp->mb[16] = LSW(mreq->rcv_dma); 4820 mcp->mb[16] = LSW(mreq->rcv_dma);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 1c7957903283..79f050256c55 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -630,29 +630,34 @@ qla2x00_sp_free_dma(void *ptr)
630 sp->flags &= ~SRB_CRC_PROT_DMA_VALID; 630 sp->flags &= ~SRB_CRC_PROT_DMA_VALID;
631 } 631 }
632 632
633 if (!ctx)
634 goto end;
635
633 if (sp->flags & SRB_CRC_CTX_DSD_VALID) { 636 if (sp->flags & SRB_CRC_CTX_DSD_VALID) {
634 /* List assured to be having elements */ 637 /* List assured to be having elements */
635 qla2x00_clean_dsd_pool(ha, sp, NULL); 638 qla2x00_clean_dsd_pool(ha, ctx);
636 sp->flags &= ~SRB_CRC_CTX_DSD_VALID; 639 sp->flags &= ~SRB_CRC_CTX_DSD_VALID;
637 } 640 }
638 641
639 if (sp->flags & SRB_CRC_CTX_DMA_VALID) { 642 if (sp->flags & SRB_CRC_CTX_DMA_VALID) {
640 dma_pool_free(ha->dl_dma_pool, ctx, 643 struct crc_context *ctx0 = ctx;
641 ((struct crc_context *)ctx)->crc_ctx_dma); 644
645 dma_pool_free(ha->dl_dma_pool, ctx0, ctx0->crc_ctx_dma);
642 sp->flags &= ~SRB_CRC_CTX_DMA_VALID; 646 sp->flags &= ~SRB_CRC_CTX_DMA_VALID;
643 } 647 }
644 648
645 if (sp->flags & SRB_FCP_CMND_DMA_VALID) { 649 if (sp->flags & SRB_FCP_CMND_DMA_VALID) {
646 struct ct6_dsd *ctx1 = (struct ct6_dsd *)ctx; 650 struct ct6_dsd *ctx1 = ctx;
647 651
648 dma_pool_free(ha->fcp_cmnd_dma_pool, ctx1->fcp_cmnd, 652 dma_pool_free(ha->fcp_cmnd_dma_pool, ctx1->fcp_cmnd,
649 ctx1->fcp_cmnd_dma); 653 ctx1->fcp_cmnd_dma);
650 list_splice(&ctx1->dsd_list, &ha->gbl_dsd_list); 654 list_splice(&ctx1->dsd_list, &ha->gbl_dsd_list);
651 ha->gbl_dsd_inuse -= ctx1->dsd_use_cnt; 655 ha->gbl_dsd_inuse -= ctx1->dsd_use_cnt;
652 ha->gbl_dsd_avail += ctx1->dsd_use_cnt; 656 ha->gbl_dsd_avail += ctx1->dsd_use_cnt;
653 mempool_free(ctx1, ha->ctx_mempool); 657 mempool_free(ctx1, ha->ctx_mempool);
654 } 658 }
655 659
660end:
656 CMD_SP(cmd) = NULL; 661 CMD_SP(cmd) = NULL;
657 qla2x00_rel_sp(sp); 662 qla2x00_rel_sp(sp);
658} 663}
@@ -699,21 +704,24 @@ qla2xxx_qpair_sp_free_dma(void *ptr)
699 sp->flags &= ~SRB_CRC_PROT_DMA_VALID; 704 sp->flags &= ~SRB_CRC_PROT_DMA_VALID;
700 } 705 }
701 706
707 if (!ctx)
708 goto end;
709
702 if (sp->flags & SRB_CRC_CTX_DSD_VALID) { 710 if (sp->flags & SRB_CRC_CTX_DSD_VALID) {
703 /* List assured to be having elements */ 711 /* List assured to be having elements */
704 qla2x00_clean_dsd_pool(ha, sp, NULL); 712 qla2x00_clean_dsd_pool(ha, ctx);
705 sp->flags &= ~SRB_CRC_CTX_DSD_VALID; 713 sp->flags &= ~SRB_CRC_CTX_DSD_VALID;
706 } 714 }
707 715
708 if (sp->flags & SRB_CRC_CTX_DMA_VALID) { 716 if (sp->flags & SRB_CRC_CTX_DMA_VALID) {
709 dma_pool_free(ha->dl_dma_pool, ctx, 717 struct crc_context *ctx0 = ctx;
710 ((struct crc_context *)ctx)->crc_ctx_dma); 718
719 dma_pool_free(ha->dl_dma_pool, ctx, ctx0->crc_ctx_dma);
711 sp->flags &= ~SRB_CRC_CTX_DMA_VALID; 720 sp->flags &= ~SRB_CRC_CTX_DMA_VALID;
712 } 721 }
713 722
714 if (sp->flags & SRB_FCP_CMND_DMA_VALID) { 723 if (sp->flags & SRB_FCP_CMND_DMA_VALID) {
715 struct ct6_dsd *ctx1 = (struct ct6_dsd *)ctx; 724 struct ct6_dsd *ctx1 = ctx;
716
717 dma_pool_free(ha->fcp_cmnd_dma_pool, ctx1->fcp_cmnd, 725 dma_pool_free(ha->fcp_cmnd_dma_pool, ctx1->fcp_cmnd,
718 ctx1->fcp_cmnd_dma); 726 ctx1->fcp_cmnd_dma);
719 list_splice(&ctx1->dsd_list, &ha->gbl_dsd_list); 727 list_splice(&ctx1->dsd_list, &ha->gbl_dsd_list);
@@ -721,7 +729,7 @@ qla2xxx_qpair_sp_free_dma(void *ptr)
721 ha->gbl_dsd_avail += ctx1->dsd_use_cnt; 729 ha->gbl_dsd_avail += ctx1->dsd_use_cnt;
722 mempool_free(ctx1, ha->ctx_mempool); 730 mempool_free(ctx1, ha->ctx_mempool);
723 } 731 }
724 732end:
725 CMD_SP(cmd) = NULL; 733 CMD_SP(cmd) = NULL;
726 qla2xxx_rel_qpair_sp(sp->qpair, sp); 734 qla2xxx_rel_qpair_sp(sp->qpair, sp);
727} 735}
@@ -1632,7 +1640,7 @@ qla2x00_loop_reset(scsi_qla_host_t *vha)
1632void 1640void
1633qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) 1641qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)
1634{ 1642{
1635 int que, cnt; 1643 int que, cnt, status;
1636 unsigned long flags; 1644 unsigned long flags;
1637 srb_t *sp; 1645 srb_t *sp;
1638 struct qla_hw_data *ha = vha->hw; 1646 struct qla_hw_data *ha = vha->hw;
@@ -1662,8 +1670,12 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)
1662 */ 1670 */
1663 sp_get(sp); 1671 sp_get(sp);
1664 spin_unlock_irqrestore(&ha->hardware_lock, flags); 1672 spin_unlock_irqrestore(&ha->hardware_lock, flags);
1665 qla2xxx_eh_abort(GET_CMD_SP(sp)); 1673 status = qla2xxx_eh_abort(GET_CMD_SP(sp));
1666 spin_lock_irqsave(&ha->hardware_lock, flags); 1674 spin_lock_irqsave(&ha->hardware_lock, flags);
1675 /* Get rid of extra reference if immediate exit
1676 * from ql2xxx_eh_abort */
1677 if (status == FAILED && (qla2x00_isp_reg_stat(ha)))
1678 atomic_dec(&sp->ref_count);
1667 } 1679 }
1668 req->outstanding_cmds[cnt] = NULL; 1680 req->outstanding_cmds[cnt] = NULL;
1669 sp->done(sp, res); 1681 sp->done(sp, res);
@@ -2623,10 +2635,10 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
2623 2635
2624 if (mem_only) { 2636 if (mem_only) {
2625 if (pci_enable_device_mem(pdev)) 2637 if (pci_enable_device_mem(pdev))
2626 goto probe_out; 2638 return ret;
2627 } else { 2639 } else {
2628 if (pci_enable_device(pdev)) 2640 if (pci_enable_device(pdev))
2629 goto probe_out; 2641 return ret;
2630 } 2642 }
2631 2643
2632 /* This may fail but that's ok */ 2644 /* This may fail but that's ok */
@@ -2636,7 +2648,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
2636 if (!ha) { 2648 if (!ha) {
2637 ql_log_pci(ql_log_fatal, pdev, 0x0009, 2649 ql_log_pci(ql_log_fatal, pdev, 0x0009,
2638 "Unable to allocate memory for ha.\n"); 2650 "Unable to allocate memory for ha.\n");
2639 goto probe_out; 2651 goto disable_device;
2640 } 2652 }
2641 ql_dbg_pci(ql_dbg_init, pdev, 0x000a, 2653 ql_dbg_pci(ql_dbg_init, pdev, 0x000a,
2642 "Memory allocated for ha=%p.\n", ha); 2654 "Memory allocated for ha=%p.\n", ha);
@@ -3254,7 +3266,7 @@ iospace_config_failed:
3254 pci_release_selected_regions(ha->pdev, ha->bars); 3266 pci_release_selected_regions(ha->pdev, ha->bars);
3255 kfree(ha); 3267 kfree(ha);
3256 3268
3257probe_out: 3269disable_device:
3258 pci_disable_device(pdev); 3270 pci_disable_device(pdev);
3259 return ret; 3271 return ret;
3260} 3272}
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 0e03ca2ab3e5..e766d8412384 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -2245,11 +2245,13 @@ static void qlt_unmap_sg(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd)
2245 pci_unmap_sg(ha->pdev, cmd->prot_sg, cmd->prot_sg_cnt, 2245 pci_unmap_sg(ha->pdev, cmd->prot_sg, cmd->prot_sg_cnt,
2246 cmd->dma_data_direction); 2246 cmd->dma_data_direction);
2247 2247
2248 if (!cmd->ctx)
2249 return;
2250
2248 if (cmd->ctx_dsd_alloced) 2251 if (cmd->ctx_dsd_alloced)
2249 qla2x00_clean_dsd_pool(ha, NULL, cmd); 2252 qla2x00_clean_dsd_pool(ha, cmd->ctx);
2250 2253
2251 if (cmd->ctx) 2254 dma_pool_free(ha->dl_dma_pool, cmd->ctx, cmd->ctx->crc_ctx_dma);
2252 dma_pool_free(ha->dl_dma_pool, cmd->ctx, cmd->ctx->crc_ctx_dma);
2253} 2255}
2254 2256
2255static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, 2257static int qlt_check_reserve_free_req(struct scsi_qla_host *vha,
diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c
index 8a58ef3adab4..c197972a3e2d 100644
--- a/drivers/scsi/qla2xxx/qla_tmpl.c
+++ b/drivers/scsi/qla2xxx/qla_tmpl.c
@@ -371,7 +371,7 @@ qla27xx_fwdt_entry_t262(struct scsi_qla_host *vha,
371 goto done; 371 goto done;
372 } 372 }
373 373
374 if (end <= start || start == 0 || end == 0) { 374 if (end < start || start == 0 || end == 0) {
375 ql_dbg(ql_dbg_misc, vha, 0xd023, 375 ql_dbg(ql_dbg_misc, vha, 0xd023,
376 "%s: unusable range (start=%x end=%x)\n", __func__, 376 "%s: unusable range (start=%x end=%x)\n", __func__,
377 ent->t262.end_addr, ent->t262.start_addr); 377 ent->t262.end_addr, ent->t262.start_addr);
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 17249c3650fe..dc095a292c61 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -1404,7 +1404,7 @@ static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1404 arr[4] = SDEBUG_LONG_INQ_SZ - 5; 1404 arr[4] = SDEBUG_LONG_INQ_SZ - 5;
1405 arr[5] = (int)have_dif_prot; /* PROTECT bit */ 1405 arr[5] = (int)have_dif_prot; /* PROTECT bit */
1406 if (sdebug_vpd_use_hostno == 0) 1406 if (sdebug_vpd_use_hostno == 0)
1407 arr[5] = 0x10; /* claim: implicit TGPS */ 1407 arr[5] |= 0x10; /* claim: implicit TPGS */
1408 arr[6] = 0x10; /* claim: MultiP */ 1408 arr[6] = 0x10; /* claim: MultiP */
1409 /* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */ 1409 /* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */
1410 arr[7] = 0xa; /* claim: LINKED + CMDQUE */ 1410 arr[7] = 0xa; /* claim: LINKED + CMDQUE */
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index e31f1cc90b81..99e16ac479e3 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1851,7 +1851,7 @@ static int scsi_mq_prep_fn(struct request *req)
1851 1851
1852 /* zero out the cmd, except for the embedded scsi_request */ 1852 /* zero out the cmd, except for the embedded scsi_request */
1853 memset((char *)cmd + sizeof(cmd->req), 0, 1853 memset((char *)cmd + sizeof(cmd->req), 0,
1854 sizeof(*cmd) - sizeof(cmd->req)); 1854 sizeof(*cmd) - sizeof(cmd->req) + shost->hostt->cmd_size);
1855 1855
1856 req->special = cmd; 1856 req->special = cmd;
1857 1857
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index f9d1432d7cc5..b6bb4e0ce0e3 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -827,21 +827,32 @@ static int sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd)
827 struct scsi_disk *sdkp = scsi_disk(rq->rq_disk); 827 struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
828 u64 sector = blk_rq_pos(rq) >> (ilog2(sdp->sector_size) - 9); 828 u64 sector = blk_rq_pos(rq) >> (ilog2(sdp->sector_size) - 9);
829 u32 nr_sectors = blk_rq_sectors(rq) >> (ilog2(sdp->sector_size) - 9); 829 u32 nr_sectors = blk_rq_sectors(rq) >> (ilog2(sdp->sector_size) - 9);
830 int ret;
830 831
831 if (!(rq->cmd_flags & REQ_NOUNMAP)) { 832 if (!(rq->cmd_flags & REQ_NOUNMAP)) {
832 switch (sdkp->zeroing_mode) { 833 switch (sdkp->zeroing_mode) {
833 case SD_ZERO_WS16_UNMAP: 834 case SD_ZERO_WS16_UNMAP:
834 return sd_setup_write_same16_cmnd(cmd, true); 835 ret = sd_setup_write_same16_cmnd(cmd, true);
836 goto out;
835 case SD_ZERO_WS10_UNMAP: 837 case SD_ZERO_WS10_UNMAP:
836 return sd_setup_write_same10_cmnd(cmd, true); 838 ret = sd_setup_write_same10_cmnd(cmd, true);
839 goto out;
837 } 840 }
838 } 841 }
839 842
840 if (sdp->no_write_same) 843 if (sdp->no_write_same)
841 return BLKPREP_INVALID; 844 return BLKPREP_INVALID;
845
842 if (sdkp->ws16 || sector > 0xffffffff || nr_sectors > 0xffff) 846 if (sdkp->ws16 || sector > 0xffffffff || nr_sectors > 0xffff)
843 return sd_setup_write_same16_cmnd(cmd, false); 847 ret = sd_setup_write_same16_cmnd(cmd, false);
844 return sd_setup_write_same10_cmnd(cmd, false); 848 else
849 ret = sd_setup_write_same10_cmnd(cmd, false);
850
851out:
852 if (sd_is_zoned(sdkp) && ret == BLKPREP_OK)
853 return sd_zbc_write_lock_zone(cmd);
854
855 return ret;
845} 856}
846 857
847static void sd_config_write_same(struct scsi_disk *sdkp) 858static void sd_config_write_same(struct scsi_disk *sdkp)
@@ -948,6 +959,10 @@ static int sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
948 rq->__data_len = sdp->sector_size; 959 rq->__data_len = sdp->sector_size;
949 ret = scsi_init_io(cmd); 960 ret = scsi_init_io(cmd);
950 rq->__data_len = nr_bytes; 961 rq->__data_len = nr_bytes;
962
963 if (sd_is_zoned(sdkp) && ret != BLKPREP_OK)
964 sd_zbc_write_unlock_zone(cmd);
965
951 return ret; 966 return ret;
952} 967}
953 968
@@ -1567,17 +1582,21 @@ out:
1567 return retval; 1582 return retval;
1568} 1583}
1569 1584
1570static int sd_sync_cache(struct scsi_disk *sdkp) 1585static int sd_sync_cache(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr)
1571{ 1586{
1572 int retries, res; 1587 int retries, res;
1573 struct scsi_device *sdp = sdkp->device; 1588 struct scsi_device *sdp = sdkp->device;
1574 const int timeout = sdp->request_queue->rq_timeout 1589 const int timeout = sdp->request_queue->rq_timeout
1575 * SD_FLUSH_TIMEOUT_MULTIPLIER; 1590 * SD_FLUSH_TIMEOUT_MULTIPLIER;
1576 struct scsi_sense_hdr sshdr; 1591 struct scsi_sense_hdr my_sshdr;
1577 1592
1578 if (!scsi_device_online(sdp)) 1593 if (!scsi_device_online(sdp))
1579 return -ENODEV; 1594 return -ENODEV;
1580 1595
1596 /* caller might not be interested in sense, but we need it */
1597 if (!sshdr)
1598 sshdr = &my_sshdr;
1599
1581 for (retries = 3; retries > 0; --retries) { 1600 for (retries = 3; retries > 0; --retries) {
1582 unsigned char cmd[10] = { 0 }; 1601 unsigned char cmd[10] = { 0 };
1583 1602
@@ -1586,7 +1605,7 @@ static int sd_sync_cache(struct scsi_disk *sdkp)
1586 * Leave the rest of the command zero to indicate 1605 * Leave the rest of the command zero to indicate
1587 * flush everything. 1606 * flush everything.
1588 */ 1607 */
1589 res = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr, 1608 res = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, sshdr,
1590 timeout, SD_MAX_RETRIES, 0, RQF_PM, NULL); 1609 timeout, SD_MAX_RETRIES, 0, RQF_PM, NULL);
1591 if (res == 0) 1610 if (res == 0)
1592 break; 1611 break;
@@ -1596,11 +1615,12 @@ static int sd_sync_cache(struct scsi_disk *sdkp)
1596 sd_print_result(sdkp, "Synchronize Cache(10) failed", res); 1615 sd_print_result(sdkp, "Synchronize Cache(10) failed", res);
1597 1616
1598 if (driver_byte(res) & DRIVER_SENSE) 1617 if (driver_byte(res) & DRIVER_SENSE)
1599 sd_print_sense_hdr(sdkp, &sshdr); 1618 sd_print_sense_hdr(sdkp, sshdr);
1619
1600 /* we need to evaluate the error return */ 1620 /* we need to evaluate the error return */
1601 if (scsi_sense_valid(&sshdr) && 1621 if (scsi_sense_valid(sshdr) &&
1602 (sshdr.asc == 0x3a || /* medium not present */ 1622 (sshdr->asc == 0x3a || /* medium not present */
1603 sshdr.asc == 0x20)) /* invalid command */ 1623 sshdr->asc == 0x20)) /* invalid command */
1604 /* this is no error here */ 1624 /* this is no error here */
1605 return 0; 1625 return 0;
1606 1626
@@ -3444,7 +3464,7 @@ static void sd_shutdown(struct device *dev)
3444 3464
3445 if (sdkp->WCE && sdkp->media_present) { 3465 if (sdkp->WCE && sdkp->media_present) {
3446 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n"); 3466 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
3447 sd_sync_cache(sdkp); 3467 sd_sync_cache(sdkp, NULL);
3448 } 3468 }
3449 3469
3450 if (system_state != SYSTEM_RESTART && sdkp->device->manage_start_stop) { 3470 if (system_state != SYSTEM_RESTART && sdkp->device->manage_start_stop) {
@@ -3456,6 +3476,7 @@ static void sd_shutdown(struct device *dev)
3456static int sd_suspend_common(struct device *dev, bool ignore_stop_errors) 3476static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
3457{ 3477{
3458 struct scsi_disk *sdkp = dev_get_drvdata(dev); 3478 struct scsi_disk *sdkp = dev_get_drvdata(dev);
3479 struct scsi_sense_hdr sshdr;
3459 int ret = 0; 3480 int ret = 0;
3460 3481
3461 if (!sdkp) /* E.g.: runtime suspend following sd_remove() */ 3482 if (!sdkp) /* E.g.: runtime suspend following sd_remove() */
@@ -3463,12 +3484,23 @@ static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
3463 3484
3464 if (sdkp->WCE && sdkp->media_present) { 3485 if (sdkp->WCE && sdkp->media_present) {
3465 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n"); 3486 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
3466 ret = sd_sync_cache(sdkp); 3487 ret = sd_sync_cache(sdkp, &sshdr);
3488
3467 if (ret) { 3489 if (ret) {
3468 /* ignore OFFLINE device */ 3490 /* ignore OFFLINE device */
3469 if (ret == -ENODEV) 3491 if (ret == -ENODEV)
3470 ret = 0; 3492 return 0;
3471 goto done; 3493
3494 if (!scsi_sense_valid(&sshdr) ||
3495 sshdr.sense_key != ILLEGAL_REQUEST)
3496 return ret;
3497
3498 /*
3499 * sshdr.sense_key == ILLEGAL_REQUEST means this drive
3500 * doesn't support sync. There's not much to do and
3501 * suspend shouldn't fail.
3502 */
3503 ret = 0;
3472 } 3504 }
3473 } 3505 }
3474 3506
@@ -3480,7 +3512,6 @@ static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
3480 ret = 0; 3512 ret = 0;
3481 } 3513 }
3482 3514
3483done:
3484 return ret; 3515 return ret;
3485} 3516}
3486 3517
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index 0a38ba01b7b4..82c33a6edbea 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -2074,11 +2074,12 @@ sg_get_rq_mark(Sg_fd * sfp, int pack_id)
2074 if ((1 == resp->done) && (!resp->sg_io_owned) && 2074 if ((1 == resp->done) && (!resp->sg_io_owned) &&
2075 ((-1 == pack_id) || (resp->header.pack_id == pack_id))) { 2075 ((-1 == pack_id) || (resp->header.pack_id == pack_id))) {
2076 resp->done = 2; /* guard against other readers */ 2076 resp->done = 2; /* guard against other readers */
2077 break; 2077 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2078 return resp;
2078 } 2079 }
2079 } 2080 }
2080 write_unlock_irqrestore(&sfp->rq_list_lock, iflags); 2081 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2081 return resp; 2082 return NULL;
2082} 2083}
2083 2084
2084/* always adds to end of list */ 2085/* always adds to end of list */
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index abc7e87937cc..ffe8d8608818 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -7698,6 +7698,12 @@ static inline void ufshcd_add_sysfs_nodes(struct ufs_hba *hba)
7698 ufshcd_add_spm_lvl_sysfs_nodes(hba); 7698 ufshcd_add_spm_lvl_sysfs_nodes(hba);
7699} 7699}
7700 7700
7701static inline void ufshcd_remove_sysfs_nodes(struct ufs_hba *hba)
7702{
7703 device_remove_file(hba->dev, &hba->rpm_lvl_attr);
7704 device_remove_file(hba->dev, &hba->spm_lvl_attr);
7705}
7706
7701/** 7707/**
7702 * ufshcd_shutdown - shutdown routine 7708 * ufshcd_shutdown - shutdown routine
7703 * @hba: per adapter instance 7709 * @hba: per adapter instance
@@ -7735,6 +7741,7 @@ EXPORT_SYMBOL(ufshcd_shutdown);
7735 */ 7741 */
7736void ufshcd_remove(struct ufs_hba *hba) 7742void ufshcd_remove(struct ufs_hba *hba)
7737{ 7743{
7744 ufshcd_remove_sysfs_nodes(hba);
7738 scsi_remove_host(hba->host); 7745 scsi_remove_host(hba->host);
7739 /* disable interrupts */ 7746 /* disable interrupts */
7740 ufshcd_disable_intr(hba, hba->intr_mask); 7747 ufshcd_disable_intr(hba, hba->intr_mask);
diff --git a/drivers/staging/ccree/Kconfig b/drivers/staging/ccree/Kconfig
index ae627049c499..4be87f503e3b 100644
--- a/drivers/staging/ccree/Kconfig
+++ b/drivers/staging/ccree/Kconfig
@@ -1,6 +1,6 @@
1config CRYPTO_DEV_CCREE 1config CRYPTO_DEV_CCREE
2 tristate "Support for ARM TrustZone CryptoCell C7XX family of Crypto accelerators" 2 tristate "Support for ARM TrustZone CryptoCell C7XX family of Crypto accelerators"
3 depends on CRYPTO_HW && OF && HAS_DMA 3 depends on CRYPTO && CRYPTO_HW && OF && HAS_DMA
4 default n 4 default n
5 select CRYPTO_HASH 5 select CRYPTO_HASH
6 select CRYPTO_BLKCIPHER 6 select CRYPTO_BLKCIPHER
diff --git a/drivers/staging/ccree/ssi_buffer_mgr.c b/drivers/staging/ccree/ssi_buffer_mgr.c
index 038e2ff5e545..6471d3d2d375 100644
--- a/drivers/staging/ccree/ssi_buffer_mgr.c
+++ b/drivers/staging/ccree/ssi_buffer_mgr.c
@@ -216,7 +216,8 @@ void ssi_buffer_mgr_copy_scatterlist_portion(
216 uint32_t nents, lbytes; 216 uint32_t nents, lbytes;
217 217
218 nents = ssi_buffer_mgr_get_sgl_nents(sg, end, &lbytes, NULL); 218 nents = ssi_buffer_mgr_get_sgl_nents(sg, end, &lbytes, NULL);
219 sg_copy_buffer(sg, nents, (void *)dest, (end - to_skip), 0, (direct == SSI_SG_TO_BUF)); 219 sg_copy_buffer(sg, nents, (void *)dest, (end - to_skip + 1), to_skip,
220 (direct == SSI_SG_TO_BUF));
220} 221}
221 222
222static inline int ssi_buffer_mgr_render_buff_to_mlli( 223static inline int ssi_buffer_mgr_render_buff_to_mlli(
diff --git a/drivers/staging/iio/cdc/ad7152.c b/drivers/staging/iio/cdc/ad7152.c
index dc6ecd824365..ff10d1f0a7e4 100644
--- a/drivers/staging/iio/cdc/ad7152.c
+++ b/drivers/staging/iio/cdc/ad7152.c
@@ -231,16 +231,12 @@ static int ad7152_write_raw_samp_freq(struct device *dev, int val)
231 if (i >= ARRAY_SIZE(ad7152_filter_rate_table)) 231 if (i >= ARRAY_SIZE(ad7152_filter_rate_table))
232 i = ARRAY_SIZE(ad7152_filter_rate_table) - 1; 232 i = ARRAY_SIZE(ad7152_filter_rate_table) - 1;
233 233
234 mutex_lock(&chip->state_lock);
235 ret = i2c_smbus_write_byte_data(chip->client, 234 ret = i2c_smbus_write_byte_data(chip->client,
236 AD7152_REG_CFG2, AD7152_CFG2_OSR(i)); 235 AD7152_REG_CFG2, AD7152_CFG2_OSR(i));
237 if (ret < 0) { 236 if (ret < 0)
238 mutex_unlock(&chip->state_lock);
239 return ret; 237 return ret;
240 }
241 238
242 chip->filter_rate_setup = i; 239 chip->filter_rate_setup = i;
243 mutex_unlock(&chip->state_lock);
244 240
245 return ret; 241 return ret;
246} 242}
diff --git a/drivers/staging/lustre/lustre/lov/lov_pack.c b/drivers/staging/lustre/lustre/lov/lov_pack.c
index 2e1bd47337fd..e6727cefde05 100644
--- a/drivers/staging/lustre/lustre/lov/lov_pack.c
+++ b/drivers/staging/lustre/lustre/lov/lov_pack.c
@@ -293,18 +293,10 @@ int lov_getstripe(struct lov_object *obj, struct lov_stripe_md *lsm,
293 size_t lmmk_size; 293 size_t lmmk_size;
294 size_t lum_size; 294 size_t lum_size;
295 int rc; 295 int rc;
296 mm_segment_t seg;
297 296
298 if (!lsm) 297 if (!lsm)
299 return -ENODATA; 298 return -ENODATA;
300 299
301 /*
302 * "Switch to kernel segment" to allow copying from kernel space by
303 * copy_{to,from}_user().
304 */
305 seg = get_fs();
306 set_fs(KERNEL_DS);
307
308 if (lsm->lsm_magic != LOV_MAGIC_V1 && lsm->lsm_magic != LOV_MAGIC_V3) { 300 if (lsm->lsm_magic != LOV_MAGIC_V1 && lsm->lsm_magic != LOV_MAGIC_V3) {
309 CERROR("bad LSM MAGIC: 0x%08X != 0x%08X nor 0x%08X\n", 301 CERROR("bad LSM MAGIC: 0x%08X != 0x%08X nor 0x%08X\n",
310 lsm->lsm_magic, LOV_MAGIC_V1, LOV_MAGIC_V3); 302 lsm->lsm_magic, LOV_MAGIC_V1, LOV_MAGIC_V3);
@@ -406,6 +398,5 @@ int lov_getstripe(struct lov_object *obj, struct lov_stripe_md *lsm,
406out_free: 398out_free:
407 kvfree(lmmk); 399 kvfree(lmmk);
408out: 400out:
409 set_fs(seg);
410 return rc; 401 return rc;
411} 402}
diff --git a/drivers/staging/media/atomisp/i2c/Makefile b/drivers/staging/media/atomisp/i2c/Makefile
index 8ea01904c0ea..466517c7c8e6 100644
--- a/drivers/staging/media/atomisp/i2c/Makefile
+++ b/drivers/staging/media/atomisp/i2c/Makefile
@@ -19,5 +19,3 @@ obj-$(CONFIG_VIDEO_AP1302) += ap1302.o
19 19
20obj-$(CONFIG_VIDEO_LM3554) += lm3554.o 20obj-$(CONFIG_VIDEO_LM3554) += lm3554.o
21 21
22ccflags-y += -Werror
23
diff --git a/drivers/staging/media/atomisp/i2c/imx/Makefile b/drivers/staging/media/atomisp/i2c/imx/Makefile
index 1d7f7ab94cac..6b13a3a66e49 100644
--- a/drivers/staging/media/atomisp/i2c/imx/Makefile
+++ b/drivers/staging/media/atomisp/i2c/imx/Makefile
@@ -4,5 +4,3 @@ imx1x5-objs := imx.o drv201.o ad5816g.o dw9714.o dw9719.o dw9718.o vcm.o otp.o o
4 4
5ov8858_driver-objs := ../ov8858.o dw9718.o vcm.o 5ov8858_driver-objs := ../ov8858.o dw9718.o vcm.o
6obj-$(CONFIG_VIDEO_OV8858) += ov8858_driver.o 6obj-$(CONFIG_VIDEO_OV8858) += ov8858_driver.o
7
8ccflags-y += -Werror
diff --git a/drivers/staging/media/atomisp/i2c/ov5693/Makefile b/drivers/staging/media/atomisp/i2c/ov5693/Makefile
index fceb9e9b881b..c9c0e1245858 100644
--- a/drivers/staging/media/atomisp/i2c/ov5693/Makefile
+++ b/drivers/staging/media/atomisp/i2c/ov5693/Makefile
@@ -1,3 +1 @@
1obj-$(CONFIG_VIDEO_OV5693) += ov5693.o obj-$(CONFIG_VIDEO_OV5693) += ov5693.o
2
3ccflags-y += -Werror
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/Makefile b/drivers/staging/media/atomisp/pci/atomisp2/Makefile
index 3fa7c1c1479f..f126a89a08e9 100644
--- a/drivers/staging/media/atomisp/pci/atomisp2/Makefile
+++ b/drivers/staging/media/atomisp/pci/atomisp2/Makefile
@@ -351,5 +351,5 @@ DEFINES := -DHRT_HW -DHRT_ISP_CSS_CUSTOM_HOST -DHRT_USE_VIR_ADDRS -D__HOST__
351DEFINES += -DATOMISP_POSTFIX=\"css2400b0_v21\" -DISP2400B0 351DEFINES += -DATOMISP_POSTFIX=\"css2400b0_v21\" -DISP2400B0
352DEFINES += -DSYSTEM_hive_isp_css_2400_system -DISP2400 352DEFINES += -DSYSTEM_hive_isp_css_2400_system -DISP2400
353 353
354ccflags-y += $(INCLUDES) $(DEFINES) -fno-common -Werror 354ccflags-y += $(INCLUDES) $(DEFINES) -fno-common
355 355
diff --git a/drivers/staging/rtl8188eu/os_dep/mon.c b/drivers/staging/rtl8188eu/os_dep/mon.c
index cfe37eb026d6..859d0d6051cd 100644
--- a/drivers/staging/rtl8188eu/os_dep/mon.c
+++ b/drivers/staging/rtl8188eu/os_dep/mon.c
@@ -152,7 +152,7 @@ static const struct net_device_ops mon_netdev_ops = {
152static void mon_setup(struct net_device *dev) 152static void mon_setup(struct net_device *dev)
153{ 153{
154 dev->netdev_ops = &mon_netdev_ops; 154 dev->netdev_ops = &mon_netdev_ops;
155 dev->destructor = free_netdev; 155 dev->needs_free_netdev = true;
156 ether_setup(dev); 156 ether_setup(dev);
157 dev->priv_flags |= IFF_NO_QUEUE; 157 dev->priv_flags |= IFF_NO_QUEUE;
158 dev->type = ARPHRD_IEEE80211; 158 dev->type = ARPHRD_IEEE80211;
diff --git a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
index 36c3189fc4b7..bd4352fe2de3 100644
--- a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
@@ -2667,7 +2667,8 @@ static int rtw_cfg80211_add_monitor_if (struct adapter *padapter, char *name, st
2667 mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP; 2667 mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP;
2668 strncpy(mon_ndev->name, name, IFNAMSIZ); 2668 strncpy(mon_ndev->name, name, IFNAMSIZ);
2669 mon_ndev->name[IFNAMSIZ - 1] = 0; 2669 mon_ndev->name[IFNAMSIZ - 1] = 0;
2670 mon_ndev->destructor = rtw_ndev_destructor; 2670 mon_ndev->needs_free_netdev = true;
2671 mon_ndev->priv_destructor = rtw_ndev_destructor;
2671 2672
2672 mon_ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops; 2673 mon_ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops;
2673 2674
diff --git a/drivers/staging/rtl8723bs/os_dep/os_intfs.c b/drivers/staging/rtl8723bs/os_dep/os_intfs.c
index f83cfc76505c..021589913681 100644
--- a/drivers/staging/rtl8723bs/os_dep/os_intfs.c
+++ b/drivers/staging/rtl8723bs/os_dep/os_intfs.c
@@ -1207,8 +1207,6 @@ void rtw_ndev_destructor(struct net_device *ndev)
1207 1207
1208 if (ndev->ieee80211_ptr) 1208 if (ndev->ieee80211_ptr)
1209 kfree((u8 *)ndev->ieee80211_ptr); 1209 kfree((u8 *)ndev->ieee80211_ptr);
1210
1211 free_netdev(ndev);
1212} 1210}
1213 1211
1214void rtw_dev_unload(struct adapter *padapter) 1212void rtw_dev_unload(struct adapter *padapter)
diff --git a/drivers/staging/rtl8723bs/os_dep/osdep_service.c b/drivers/staging/rtl8723bs/os_dep/osdep_service.c
index 02db59e8b593..aa16d1ab955b 100644
--- a/drivers/staging/rtl8723bs/os_dep/osdep_service.c
+++ b/drivers/staging/rtl8723bs/os_dep/osdep_service.c
@@ -160,7 +160,7 @@ static int isFileReadable(char *path)
160 oldfs = get_fs(); set_fs(get_ds()); 160 oldfs = get_fs(); set_fs(get_ds());
161 161
162 if (1!=readFile(fp, &buf, 1)) 162 if (1!=readFile(fp, &buf, 1))
163 ret = PTR_ERR(fp); 163 ret = -EINVAL;
164 164
165 set_fs(oldfs); 165 set_fs(oldfs);
166 filp_close(fp, NULL); 166 filp_close(fp, NULL);
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 26a9bcd5ee6a..3fdca2cdd8da 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -1279,6 +1279,18 @@ iscsit_get_immediate_data(struct iscsi_cmd *cmd, struct iscsi_scsi_req *hdr,
1279 */ 1279 */
1280 if (dump_payload) 1280 if (dump_payload)
1281 goto after_immediate_data; 1281 goto after_immediate_data;
1282 /*
1283 * Check for underflow case where both EDTL and immediate data payload
1284 * exceeds what is presented by CDB's TRANSFER LENGTH, and what has
1285 * already been set in target_cmd_size_check() as se_cmd->data_length.
1286 *
1287 * For this special case, fail the command and dump the immediate data
1288 * payload.
1289 */
1290 if (cmd->first_burst_len > cmd->se_cmd.data_length) {
1291 cmd->sense_reason = TCM_INVALID_CDB_FIELD;
1292 goto after_immediate_data;
1293 }
1282 1294
1283 immed_ret = iscsit_handle_immediate_data(cmd, hdr, 1295 immed_ret = iscsit_handle_immediate_data(cmd, hdr,
1284 cmd->first_burst_len); 1296 cmd->first_burst_len);
@@ -3790,6 +3802,8 @@ int iscsi_target_tx_thread(void *arg)
3790{ 3802{
3791 int ret = 0; 3803 int ret = 0;
3792 struct iscsi_conn *conn = arg; 3804 struct iscsi_conn *conn = arg;
3805 bool conn_freed = false;
3806
3793 /* 3807 /*
3794 * Allow ourselves to be interrupted by SIGINT so that a 3808 * Allow ourselves to be interrupted by SIGINT so that a
3795 * connection recovery / failure event can be triggered externally. 3809 * connection recovery / failure event can be triggered externally.
@@ -3815,12 +3829,14 @@ get_immediate:
3815 goto transport_err; 3829 goto transport_err;
3816 3830
3817 ret = iscsit_handle_response_queue(conn); 3831 ret = iscsit_handle_response_queue(conn);
3818 if (ret == 1) 3832 if (ret == 1) {
3819 goto get_immediate; 3833 goto get_immediate;
3820 else if (ret == -ECONNRESET) 3834 } else if (ret == -ECONNRESET) {
3835 conn_freed = true;
3821 goto out; 3836 goto out;
3822 else if (ret < 0) 3837 } else if (ret < 0) {
3823 goto transport_err; 3838 goto transport_err;
3839 }
3824 } 3840 }
3825 3841
3826transport_err: 3842transport_err:
@@ -3830,8 +3846,13 @@ transport_err:
3830 * responsible for cleaning up the early connection failure. 3846 * responsible for cleaning up the early connection failure.
3831 */ 3847 */
3832 if (conn->conn_state != TARG_CONN_STATE_IN_LOGIN) 3848 if (conn->conn_state != TARG_CONN_STATE_IN_LOGIN)
3833 iscsit_take_action_for_connection_exit(conn); 3849 iscsit_take_action_for_connection_exit(conn, &conn_freed);
3834out: 3850out:
3851 if (!conn_freed) {
3852 while (!kthread_should_stop()) {
3853 msleep(100);
3854 }
3855 }
3835 return 0; 3856 return 0;
3836} 3857}
3837 3858
@@ -4004,6 +4025,7 @@ int iscsi_target_rx_thread(void *arg)
4004{ 4025{
4005 int rc; 4026 int rc;
4006 struct iscsi_conn *conn = arg; 4027 struct iscsi_conn *conn = arg;
4028 bool conn_freed = false;
4007 4029
4008 /* 4030 /*
4009 * Allow ourselves to be interrupted by SIGINT so that a 4031 * Allow ourselves to be interrupted by SIGINT so that a
@@ -4016,7 +4038,7 @@ int iscsi_target_rx_thread(void *arg)
4016 */ 4038 */
4017 rc = wait_for_completion_interruptible(&conn->rx_login_comp); 4039 rc = wait_for_completion_interruptible(&conn->rx_login_comp);
4018 if (rc < 0 || iscsi_target_check_conn_state(conn)) 4040 if (rc < 0 || iscsi_target_check_conn_state(conn))
4019 return 0; 4041 goto out;
4020 4042
4021 if (!conn->conn_transport->iscsit_get_rx_pdu) 4043 if (!conn->conn_transport->iscsit_get_rx_pdu)
4022 return 0; 4044 return 0;
@@ -4025,7 +4047,15 @@ int iscsi_target_rx_thread(void *arg)
4025 4047
4026 if (!signal_pending(current)) 4048 if (!signal_pending(current))
4027 atomic_set(&conn->transport_failed, 1); 4049 atomic_set(&conn->transport_failed, 1);
4028 iscsit_take_action_for_connection_exit(conn); 4050 iscsit_take_action_for_connection_exit(conn, &conn_freed);
4051
4052out:
4053 if (!conn_freed) {
4054 while (!kthread_should_stop()) {
4055 msleep(100);
4056 }
4057 }
4058
4029 return 0; 4059 return 0;
4030} 4060}
4031 4061
@@ -4405,8 +4435,11 @@ static void iscsit_logout_post_handler_closesession(
4405 * always sleep waiting for RX/TX thread shutdown to complete 4435 * always sleep waiting for RX/TX thread shutdown to complete
4406 * within iscsit_close_connection(). 4436 * within iscsit_close_connection().
4407 */ 4437 */
4408 if (!conn->conn_transport->rdma_shutdown) 4438 if (!conn->conn_transport->rdma_shutdown) {
4409 sleep = cmpxchg(&conn->tx_thread_active, true, false); 4439 sleep = cmpxchg(&conn->tx_thread_active, true, false);
4440 if (!sleep)
4441 return;
4442 }
4410 4443
4411 atomic_set(&conn->conn_logout_remove, 0); 4444 atomic_set(&conn->conn_logout_remove, 0);
4412 complete(&conn->conn_logout_comp); 4445 complete(&conn->conn_logout_comp);
@@ -4422,8 +4455,11 @@ static void iscsit_logout_post_handler_samecid(
4422{ 4455{
4423 int sleep = 1; 4456 int sleep = 1;
4424 4457
4425 if (!conn->conn_transport->rdma_shutdown) 4458 if (!conn->conn_transport->rdma_shutdown) {
4426 sleep = cmpxchg(&conn->tx_thread_active, true, false); 4459 sleep = cmpxchg(&conn->tx_thread_active, true, false);
4460 if (!sleep)
4461 return;
4462 }
4427 4463
4428 atomic_set(&conn->conn_logout_remove, 0); 4464 atomic_set(&conn->conn_logout_remove, 0);
4429 complete(&conn->conn_logout_comp); 4465 complete(&conn->conn_logout_comp);
diff --git a/drivers/target/iscsi/iscsi_target_erl0.c b/drivers/target/iscsi/iscsi_target_erl0.c
index 9a96e17bf7cd..7fe2aa73cff6 100644
--- a/drivers/target/iscsi/iscsi_target_erl0.c
+++ b/drivers/target/iscsi/iscsi_target_erl0.c
@@ -930,8 +930,10 @@ static void iscsit_handle_connection_cleanup(struct iscsi_conn *conn)
930 } 930 }
931} 931}
932 932
933void iscsit_take_action_for_connection_exit(struct iscsi_conn *conn) 933void iscsit_take_action_for_connection_exit(struct iscsi_conn *conn, bool *conn_freed)
934{ 934{
935 *conn_freed = false;
936
935 spin_lock_bh(&conn->state_lock); 937 spin_lock_bh(&conn->state_lock);
936 if (atomic_read(&conn->connection_exit)) { 938 if (atomic_read(&conn->connection_exit)) {
937 spin_unlock_bh(&conn->state_lock); 939 spin_unlock_bh(&conn->state_lock);
@@ -942,6 +944,7 @@ void iscsit_take_action_for_connection_exit(struct iscsi_conn *conn)
942 if (conn->conn_state == TARG_CONN_STATE_IN_LOGOUT) { 944 if (conn->conn_state == TARG_CONN_STATE_IN_LOGOUT) {
943 spin_unlock_bh(&conn->state_lock); 945 spin_unlock_bh(&conn->state_lock);
944 iscsit_close_connection(conn); 946 iscsit_close_connection(conn);
947 *conn_freed = true;
945 return; 948 return;
946 } 949 }
947 950
@@ -955,4 +958,5 @@ void iscsit_take_action_for_connection_exit(struct iscsi_conn *conn)
955 spin_unlock_bh(&conn->state_lock); 958 spin_unlock_bh(&conn->state_lock);
956 959
957 iscsit_handle_connection_cleanup(conn); 960 iscsit_handle_connection_cleanup(conn);
961 *conn_freed = true;
958} 962}
diff --git a/drivers/target/iscsi/iscsi_target_erl0.h b/drivers/target/iscsi/iscsi_target_erl0.h
index 60e69e2af6ed..3822d9cd1230 100644
--- a/drivers/target/iscsi/iscsi_target_erl0.h
+++ b/drivers/target/iscsi/iscsi_target_erl0.h
@@ -15,6 +15,6 @@ extern int iscsit_stop_time2retain_timer(struct iscsi_session *);
15extern void iscsit_connection_reinstatement_rcfr(struct iscsi_conn *); 15extern void iscsit_connection_reinstatement_rcfr(struct iscsi_conn *);
16extern void iscsit_cause_connection_reinstatement(struct iscsi_conn *, int); 16extern void iscsit_cause_connection_reinstatement(struct iscsi_conn *, int);
17extern void iscsit_fall_back_to_erl0(struct iscsi_session *); 17extern void iscsit_fall_back_to_erl0(struct iscsi_session *);
18extern void iscsit_take_action_for_connection_exit(struct iscsi_conn *); 18extern void iscsit_take_action_for_connection_exit(struct iscsi_conn *, bool *);
19 19
20#endif /*** ISCSI_TARGET_ERL0_H ***/ 20#endif /*** ISCSI_TARGET_ERL0_H ***/
diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c
index 66238477137b..92b96b51d506 100644
--- a/drivers/target/iscsi/iscsi_target_login.c
+++ b/drivers/target/iscsi/iscsi_target_login.c
@@ -1464,5 +1464,9 @@ int iscsi_target_login_thread(void *arg)
1464 break; 1464 break;
1465 } 1465 }
1466 1466
1467 while (!kthread_should_stop()) {
1468 msleep(100);
1469 }
1470
1467 return 0; 1471 return 0;
1468} 1472}
diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c
index 7ccc9c1cbfd1..6f88b31242b0 100644
--- a/drivers/target/iscsi/iscsi_target_nego.c
+++ b/drivers/target/iscsi/iscsi_target_nego.c
@@ -493,14 +493,60 @@ static void iscsi_target_restore_sock_callbacks(struct iscsi_conn *conn)
493 493
494static int iscsi_target_do_login(struct iscsi_conn *, struct iscsi_login *); 494static int iscsi_target_do_login(struct iscsi_conn *, struct iscsi_login *);
495 495
496static bool iscsi_target_sk_state_check(struct sock *sk) 496static bool __iscsi_target_sk_check_close(struct sock *sk)
497{ 497{
498 if (sk->sk_state == TCP_CLOSE_WAIT || sk->sk_state == TCP_CLOSE) { 498 if (sk->sk_state == TCP_CLOSE_WAIT || sk->sk_state == TCP_CLOSE) {
499 pr_debug("iscsi_target_sk_state_check: TCP_CLOSE_WAIT|TCP_CLOSE," 499 pr_debug("__iscsi_target_sk_check_close: TCP_CLOSE_WAIT|TCP_CLOSE,"
500 "returning FALSE\n"); 500 "returning FALSE\n");
501 return false; 501 return true;
502 } 502 }
503 return true; 503 return false;
504}
505
506static bool iscsi_target_sk_check_close(struct iscsi_conn *conn)
507{
508 bool state = false;
509
510 if (conn->sock) {
511 struct sock *sk = conn->sock->sk;
512
513 read_lock_bh(&sk->sk_callback_lock);
514 state = (__iscsi_target_sk_check_close(sk) ||
515 test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags));
516 read_unlock_bh(&sk->sk_callback_lock);
517 }
518 return state;
519}
520
521static bool iscsi_target_sk_check_flag(struct iscsi_conn *conn, unsigned int flag)
522{
523 bool state = false;
524
525 if (conn->sock) {
526 struct sock *sk = conn->sock->sk;
527
528 read_lock_bh(&sk->sk_callback_lock);
529 state = test_bit(flag, &conn->login_flags);
530 read_unlock_bh(&sk->sk_callback_lock);
531 }
532 return state;
533}
534
535static bool iscsi_target_sk_check_and_clear(struct iscsi_conn *conn, unsigned int flag)
536{
537 bool state = false;
538
539 if (conn->sock) {
540 struct sock *sk = conn->sock->sk;
541
542 write_lock_bh(&sk->sk_callback_lock);
543 state = (__iscsi_target_sk_check_close(sk) ||
544 test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags));
545 if (!state)
546 clear_bit(flag, &conn->login_flags);
547 write_unlock_bh(&sk->sk_callback_lock);
548 }
549 return state;
504} 550}
505 551
506static void iscsi_target_login_drop(struct iscsi_conn *conn, struct iscsi_login *login) 552static void iscsi_target_login_drop(struct iscsi_conn *conn, struct iscsi_login *login)
@@ -540,6 +586,20 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
540 586
541 pr_debug("entering iscsi_target_do_login_rx, conn: %p, %s:%d\n", 587 pr_debug("entering iscsi_target_do_login_rx, conn: %p, %s:%d\n",
542 conn, current->comm, current->pid); 588 conn, current->comm, current->pid);
589 /*
590 * If iscsi_target_do_login_rx() has been invoked by ->sk_data_ready()
591 * before initial PDU processing in iscsi_target_start_negotiation()
592 * has completed, go ahead and retry until it's cleared.
593 *
594 * Otherwise if the TCP connection drops while this is occuring,
595 * iscsi_target_start_negotiation() will detect the failure, call
596 * cancel_delayed_work_sync(&conn->login_work), and cleanup the
597 * remaining iscsi connection resources from iscsi_np process context.
598 */
599 if (iscsi_target_sk_check_flag(conn, LOGIN_FLAGS_INITIAL_PDU)) {
600 schedule_delayed_work(&conn->login_work, msecs_to_jiffies(10));
601 return;
602 }
543 603
544 spin_lock(&tpg->tpg_state_lock); 604 spin_lock(&tpg->tpg_state_lock);
545 state = (tpg->tpg_state == TPG_STATE_ACTIVE); 605 state = (tpg->tpg_state == TPG_STATE_ACTIVE);
@@ -547,26 +607,12 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
547 607
548 if (!state) { 608 if (!state) {
549 pr_debug("iscsi_target_do_login_rx: tpg_state != TPG_STATE_ACTIVE\n"); 609 pr_debug("iscsi_target_do_login_rx: tpg_state != TPG_STATE_ACTIVE\n");
550 iscsi_target_restore_sock_callbacks(conn); 610 goto err;
551 iscsi_target_login_drop(conn, login);
552 iscsit_deaccess_np(np, tpg, tpg_np);
553 return;
554 } 611 }
555 612
556 if (conn->sock) { 613 if (iscsi_target_sk_check_close(conn)) {
557 struct sock *sk = conn->sock->sk; 614 pr_debug("iscsi_target_do_login_rx, TCP state CLOSE\n");
558 615 goto err;
559 read_lock_bh(&sk->sk_callback_lock);
560 state = iscsi_target_sk_state_check(sk);
561 read_unlock_bh(&sk->sk_callback_lock);
562
563 if (!state) {
564 pr_debug("iscsi_target_do_login_rx, TCP state CLOSE\n");
565 iscsi_target_restore_sock_callbacks(conn);
566 iscsi_target_login_drop(conn, login);
567 iscsit_deaccess_np(np, tpg, tpg_np);
568 return;
569 }
570 } 616 }
571 617
572 conn->login_kworker = current; 618 conn->login_kworker = current;
@@ -584,34 +630,29 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
584 flush_signals(current); 630 flush_signals(current);
585 conn->login_kworker = NULL; 631 conn->login_kworker = NULL;
586 632
587 if (rc < 0) { 633 if (rc < 0)
588 iscsi_target_restore_sock_callbacks(conn); 634 goto err;
589 iscsi_target_login_drop(conn, login);
590 iscsit_deaccess_np(np, tpg, tpg_np);
591 return;
592 }
593 635
594 pr_debug("iscsi_target_do_login_rx after rx_login_io, %p, %s:%d\n", 636 pr_debug("iscsi_target_do_login_rx after rx_login_io, %p, %s:%d\n",
595 conn, current->comm, current->pid); 637 conn, current->comm, current->pid);
596 638
597 rc = iscsi_target_do_login(conn, login); 639 rc = iscsi_target_do_login(conn, login);
598 if (rc < 0) { 640 if (rc < 0) {
599 iscsi_target_restore_sock_callbacks(conn); 641 goto err;
600 iscsi_target_login_drop(conn, login);
601 iscsit_deaccess_np(np, tpg, tpg_np);
602 } else if (!rc) { 642 } else if (!rc) {
603 if (conn->sock) { 643 if (iscsi_target_sk_check_and_clear(conn, LOGIN_FLAGS_READ_ACTIVE))
604 struct sock *sk = conn->sock->sk; 644 goto err;
605
606 write_lock_bh(&sk->sk_callback_lock);
607 clear_bit(LOGIN_FLAGS_READ_ACTIVE, &conn->login_flags);
608 write_unlock_bh(&sk->sk_callback_lock);
609 }
610 } else if (rc == 1) { 645 } else if (rc == 1) {
611 iscsi_target_nego_release(conn); 646 iscsi_target_nego_release(conn);
612 iscsi_post_login_handler(np, conn, zero_tsih); 647 iscsi_post_login_handler(np, conn, zero_tsih);
613 iscsit_deaccess_np(np, tpg, tpg_np); 648 iscsit_deaccess_np(np, tpg, tpg_np);
614 } 649 }
650 return;
651
652err:
653 iscsi_target_restore_sock_callbacks(conn);
654 iscsi_target_login_drop(conn, login);
655 iscsit_deaccess_np(np, tpg, tpg_np);
615} 656}
616 657
617static void iscsi_target_do_cleanup(struct work_struct *work) 658static void iscsi_target_do_cleanup(struct work_struct *work)
@@ -659,31 +700,54 @@ static void iscsi_target_sk_state_change(struct sock *sk)
659 orig_state_change(sk); 700 orig_state_change(sk);
660 return; 701 return;
661 } 702 }
703 state = __iscsi_target_sk_check_close(sk);
704 pr_debug("__iscsi_target_sk_close_change: state: %d\n", state);
705
662 if (test_bit(LOGIN_FLAGS_READ_ACTIVE, &conn->login_flags)) { 706 if (test_bit(LOGIN_FLAGS_READ_ACTIVE, &conn->login_flags)) {
663 pr_debug("Got LOGIN_FLAGS_READ_ACTIVE=1 sk_state_change" 707 pr_debug("Got LOGIN_FLAGS_READ_ACTIVE=1 sk_state_change"
664 " conn: %p\n", conn); 708 " conn: %p\n", conn);
709 if (state)
710 set_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags);
665 write_unlock_bh(&sk->sk_callback_lock); 711 write_unlock_bh(&sk->sk_callback_lock);
666 orig_state_change(sk); 712 orig_state_change(sk);
667 return; 713 return;
668 } 714 }
669 if (test_and_set_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)) { 715 if (test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)) {
670 pr_debug("Got LOGIN_FLAGS_CLOSED=1 sk_state_change conn: %p\n", 716 pr_debug("Got LOGIN_FLAGS_CLOSED=1 sk_state_change conn: %p\n",
671 conn); 717 conn);
672 write_unlock_bh(&sk->sk_callback_lock); 718 write_unlock_bh(&sk->sk_callback_lock);
673 orig_state_change(sk); 719 orig_state_change(sk);
674 return; 720 return;
675 } 721 }
722 /*
723 * If the TCP connection has dropped, go ahead and set LOGIN_FLAGS_CLOSED,
724 * but only queue conn->login_work -> iscsi_target_do_login_rx()
725 * processing if LOGIN_FLAGS_INITIAL_PDU has already been cleared.
726 *
727 * When iscsi_target_do_login_rx() runs, iscsi_target_sk_check_close()
728 * will detect the dropped TCP connection from delayed workqueue context.
729 *
730 * If LOGIN_FLAGS_INITIAL_PDU is still set, which means the initial
731 * iscsi_target_start_negotiation() is running, iscsi_target_do_login()
732 * via iscsi_target_sk_check_close() or iscsi_target_start_negotiation()
733 * via iscsi_target_sk_check_and_clear() is responsible for detecting the
734 * dropped TCP connection in iscsi_np process context, and cleaning up
735 * the remaining iscsi connection resources.
736 */
737 if (state) {
738 pr_debug("iscsi_target_sk_state_change got failed state\n");
739 set_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags);
740 state = test_bit(LOGIN_FLAGS_INITIAL_PDU, &conn->login_flags);
741 write_unlock_bh(&sk->sk_callback_lock);
676 742
677 state = iscsi_target_sk_state_check(sk); 743 orig_state_change(sk);
678 write_unlock_bh(&sk->sk_callback_lock);
679
680 pr_debug("iscsi_target_sk_state_change: state: %d\n", state);
681 744
682 if (!state) { 745 if (!state)
683 pr_debug("iscsi_target_sk_state_change got failed state\n"); 746 schedule_delayed_work(&conn->login_work, 0);
684 schedule_delayed_work(&conn->login_cleanup_work, 0);
685 return; 747 return;
686 } 748 }
749 write_unlock_bh(&sk->sk_callback_lock);
750
687 orig_state_change(sk); 751 orig_state_change(sk);
688} 752}
689 753
@@ -946,6 +1010,15 @@ static int iscsi_target_do_login(struct iscsi_conn *conn, struct iscsi_login *lo
946 if (iscsi_target_handle_csg_one(conn, login) < 0) 1010 if (iscsi_target_handle_csg_one(conn, login) < 0)
947 return -1; 1011 return -1;
948 if (login_rsp->flags & ISCSI_FLAG_LOGIN_TRANSIT) { 1012 if (login_rsp->flags & ISCSI_FLAG_LOGIN_TRANSIT) {
1013 /*
1014 * Check to make sure the TCP connection has not
1015 * dropped asynchronously while session reinstatement
1016 * was occuring in this kthread context, before
1017 * transitioning to full feature phase operation.
1018 */
1019 if (iscsi_target_sk_check_close(conn))
1020 return -1;
1021
949 login->tsih = conn->sess->tsih; 1022 login->tsih = conn->sess->tsih;
950 login->login_complete = 1; 1023 login->login_complete = 1;
951 iscsi_target_restore_sock_callbacks(conn); 1024 iscsi_target_restore_sock_callbacks(conn);
@@ -972,21 +1045,6 @@ static int iscsi_target_do_login(struct iscsi_conn *conn, struct iscsi_login *lo
972 break; 1045 break;
973 } 1046 }
974 1047
975 if (conn->sock) {
976 struct sock *sk = conn->sock->sk;
977 bool state;
978
979 read_lock_bh(&sk->sk_callback_lock);
980 state = iscsi_target_sk_state_check(sk);
981 read_unlock_bh(&sk->sk_callback_lock);
982
983 if (!state) {
984 pr_debug("iscsi_target_do_login() failed state for"
985 " conn: %p\n", conn);
986 return -1;
987 }
988 }
989
990 return 0; 1048 return 0;
991} 1049}
992 1050
@@ -1255,10 +1313,22 @@ int iscsi_target_start_negotiation(
1255 1313
1256 write_lock_bh(&sk->sk_callback_lock); 1314 write_lock_bh(&sk->sk_callback_lock);
1257 set_bit(LOGIN_FLAGS_READY, &conn->login_flags); 1315 set_bit(LOGIN_FLAGS_READY, &conn->login_flags);
1316 set_bit(LOGIN_FLAGS_INITIAL_PDU, &conn->login_flags);
1258 write_unlock_bh(&sk->sk_callback_lock); 1317 write_unlock_bh(&sk->sk_callback_lock);
1259 } 1318 }
1260 1319 /*
1320 * If iscsi_target_do_login returns zero to signal more PDU
1321 * exchanges are required to complete the login, go ahead and
1322 * clear LOGIN_FLAGS_INITIAL_PDU but only if the TCP connection
1323 * is still active.
1324 *
1325 * Otherwise if TCP connection dropped asynchronously, go ahead
1326 * and perform connection cleanup now.
1327 */
1261 ret = iscsi_target_do_login(conn, login); 1328 ret = iscsi_target_do_login(conn, login);
1329 if (!ret && iscsi_target_sk_check_and_clear(conn, LOGIN_FLAGS_INITIAL_PDU))
1330 ret = -1;
1331
1262 if (ret < 0) { 1332 if (ret < 0) {
1263 cancel_delayed_work_sync(&conn->login_work); 1333 cancel_delayed_work_sync(&conn->login_work);
1264 cancel_delayed_work_sync(&conn->login_cleanup_work); 1334 cancel_delayed_work_sync(&conn->login_cleanup_work);
diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h
index 9ab7090f7c83..0912de7c0cf8 100644
--- a/drivers/target/target_core_internal.h
+++ b/drivers/target/target_core_internal.h
@@ -136,7 +136,7 @@ int init_se_kmem_caches(void);
136void release_se_kmem_caches(void); 136void release_se_kmem_caches(void);
137u32 scsi_get_new_index(scsi_index_t); 137u32 scsi_get_new_index(scsi_index_t);
138void transport_subsystem_check_init(void); 138void transport_subsystem_check_init(void);
139void transport_cmd_finish_abort(struct se_cmd *, int); 139int transport_cmd_finish_abort(struct se_cmd *, int);
140unsigned char *transport_dump_cmd_direction(struct se_cmd *); 140unsigned char *transport_dump_cmd_direction(struct se_cmd *);
141void transport_dump_dev_state(struct se_device *, char *, int *); 141void transport_dump_dev_state(struct se_device *, char *, int *);
142void transport_dump_dev_info(struct se_device *, struct se_lun *, 142void transport_dump_dev_info(struct se_device *, struct se_lun *,
diff --git a/drivers/target/target_core_tmr.c b/drivers/target/target_core_tmr.c
index dce1e1b47316..13f47bf4d16b 100644
--- a/drivers/target/target_core_tmr.c
+++ b/drivers/target/target_core_tmr.c
@@ -75,7 +75,7 @@ void core_tmr_release_req(struct se_tmr_req *tmr)
75 kfree(tmr); 75 kfree(tmr);
76} 76}
77 77
78static void core_tmr_handle_tas_abort(struct se_cmd *cmd, int tas) 78static int core_tmr_handle_tas_abort(struct se_cmd *cmd, int tas)
79{ 79{
80 unsigned long flags; 80 unsigned long flags;
81 bool remove = true, send_tas; 81 bool remove = true, send_tas;
@@ -91,7 +91,7 @@ static void core_tmr_handle_tas_abort(struct se_cmd *cmd, int tas)
91 transport_send_task_abort(cmd); 91 transport_send_task_abort(cmd);
92 } 92 }
93 93
94 transport_cmd_finish_abort(cmd, remove); 94 return transport_cmd_finish_abort(cmd, remove);
95} 95}
96 96
97static int target_check_cdb_and_preempt(struct list_head *list, 97static int target_check_cdb_and_preempt(struct list_head *list,
@@ -184,8 +184,8 @@ void core_tmr_abort_task(
184 cancel_work_sync(&se_cmd->work); 184 cancel_work_sync(&se_cmd->work);
185 transport_wait_for_tasks(se_cmd); 185 transport_wait_for_tasks(se_cmd);
186 186
187 transport_cmd_finish_abort(se_cmd, true); 187 if (!transport_cmd_finish_abort(se_cmd, true))
188 target_put_sess_cmd(se_cmd); 188 target_put_sess_cmd(se_cmd);
189 189
190 printk("ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for" 190 printk("ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for"
191 " ref_tag: %llu\n", ref_tag); 191 " ref_tag: %llu\n", ref_tag);
@@ -281,8 +281,8 @@ static void core_tmr_drain_tmr_list(
281 cancel_work_sync(&cmd->work); 281 cancel_work_sync(&cmd->work);
282 transport_wait_for_tasks(cmd); 282 transport_wait_for_tasks(cmd);
283 283
284 transport_cmd_finish_abort(cmd, 1); 284 if (!transport_cmd_finish_abort(cmd, 1))
285 target_put_sess_cmd(cmd); 285 target_put_sess_cmd(cmd);
286 } 286 }
287} 287}
288 288
@@ -380,8 +380,8 @@ static void core_tmr_drain_state_list(
380 cancel_work_sync(&cmd->work); 380 cancel_work_sync(&cmd->work);
381 transport_wait_for_tasks(cmd); 381 transport_wait_for_tasks(cmd);
382 382
383 core_tmr_handle_tas_abort(cmd, tas); 383 if (!core_tmr_handle_tas_abort(cmd, tas))
384 target_put_sess_cmd(cmd); 384 target_put_sess_cmd(cmd);
385 } 385 }
386} 386}
387 387
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index 37f57357d4a0..f1b3a46bdcaf 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -651,9 +651,10 @@ static void transport_lun_remove_cmd(struct se_cmd *cmd)
651 percpu_ref_put(&lun->lun_ref); 651 percpu_ref_put(&lun->lun_ref);
652} 652}
653 653
654void transport_cmd_finish_abort(struct se_cmd *cmd, int remove) 654int transport_cmd_finish_abort(struct se_cmd *cmd, int remove)
655{ 655{
656 bool ack_kref = (cmd->se_cmd_flags & SCF_ACK_KREF); 656 bool ack_kref = (cmd->se_cmd_flags & SCF_ACK_KREF);
657 int ret = 0;
657 658
658 if (cmd->se_cmd_flags & SCF_SE_LUN_CMD) 659 if (cmd->se_cmd_flags & SCF_SE_LUN_CMD)
659 transport_lun_remove_cmd(cmd); 660 transport_lun_remove_cmd(cmd);
@@ -665,9 +666,11 @@ void transport_cmd_finish_abort(struct se_cmd *cmd, int remove)
665 cmd->se_tfo->aborted_task(cmd); 666 cmd->se_tfo->aborted_task(cmd);
666 667
667 if (transport_cmd_check_stop_to_fabric(cmd)) 668 if (transport_cmd_check_stop_to_fabric(cmd))
668 return; 669 return 1;
669 if (remove && ack_kref) 670 if (remove && ack_kref)
670 transport_put_cmd(cmd); 671 ret = transport_put_cmd(cmd);
672
673 return ret;
671} 674}
672 675
673static void target_complete_failure_work(struct work_struct *work) 676static void target_complete_failure_work(struct work_struct *work)
@@ -1160,15 +1163,28 @@ target_cmd_size_check(struct se_cmd *cmd, unsigned int size)
1160 if (cmd->unknown_data_length) { 1163 if (cmd->unknown_data_length) {
1161 cmd->data_length = size; 1164 cmd->data_length = size;
1162 } else if (size != cmd->data_length) { 1165 } else if (size != cmd->data_length) {
1163 pr_warn("TARGET_CORE[%s]: Expected Transfer Length:" 1166 pr_warn_ratelimited("TARGET_CORE[%s]: Expected Transfer Length:"
1164 " %u does not match SCSI CDB Length: %u for SAM Opcode:" 1167 " %u does not match SCSI CDB Length: %u for SAM Opcode:"
1165 " 0x%02x\n", cmd->se_tfo->get_fabric_name(), 1168 " 0x%02x\n", cmd->se_tfo->get_fabric_name(),
1166 cmd->data_length, size, cmd->t_task_cdb[0]); 1169 cmd->data_length, size, cmd->t_task_cdb[0]);
1167 1170
1168 if (cmd->data_direction == DMA_TO_DEVICE && 1171 if (cmd->data_direction == DMA_TO_DEVICE) {
1169 cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) { 1172 if (cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) {
1170 pr_err("Rejecting underflow/overflow WRITE data\n"); 1173 pr_err_ratelimited("Rejecting underflow/overflow"
1171 return TCM_INVALID_CDB_FIELD; 1174 " for WRITE data CDB\n");
1175 return TCM_INVALID_CDB_FIELD;
1176 }
1177 /*
1178 * Some fabric drivers like iscsi-target still expect to
1179 * always reject overflow writes. Reject this case until
1180 * full fabric driver level support for overflow writes
1181 * is introduced tree-wide.
1182 */
1183 if (size > cmd->data_length) {
1184 pr_err_ratelimited("Rejecting overflow for"
1185 " WRITE control CDB\n");
1186 return TCM_INVALID_CDB_FIELD;
1187 }
1172 } 1188 }
1173 /* 1189 /*
1174 * Reject READ_* or WRITE_* with overflow/underflow for 1190 * Reject READ_* or WRITE_* with overflow/underflow for
diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
index 9045837f748b..beb5f098f32d 100644
--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -97,7 +97,7 @@ struct tcmu_hba {
97 97
98struct tcmu_dev { 98struct tcmu_dev {
99 struct list_head node; 99 struct list_head node;
100 100 struct kref kref;
101 struct se_device se_dev; 101 struct se_device se_dev;
102 102
103 char *name; 103 char *name;
@@ -969,6 +969,7 @@ static struct se_device *tcmu_alloc_device(struct se_hba *hba, const char *name)
969 udev = kzalloc(sizeof(struct tcmu_dev), GFP_KERNEL); 969 udev = kzalloc(sizeof(struct tcmu_dev), GFP_KERNEL);
970 if (!udev) 970 if (!udev)
971 return NULL; 971 return NULL;
972 kref_init(&udev->kref);
972 973
973 udev->name = kstrdup(name, GFP_KERNEL); 974 udev->name = kstrdup(name, GFP_KERNEL);
974 if (!udev->name) { 975 if (!udev->name) {
@@ -1145,6 +1146,24 @@ static int tcmu_open(struct uio_info *info, struct inode *inode)
1145 return 0; 1146 return 0;
1146} 1147}
1147 1148
1149static void tcmu_dev_call_rcu(struct rcu_head *p)
1150{
1151 struct se_device *dev = container_of(p, struct se_device, rcu_head);
1152 struct tcmu_dev *udev = TCMU_DEV(dev);
1153
1154 kfree(udev->uio_info.name);
1155 kfree(udev->name);
1156 kfree(udev);
1157}
1158
1159static void tcmu_dev_kref_release(struct kref *kref)
1160{
1161 struct tcmu_dev *udev = container_of(kref, struct tcmu_dev, kref);
1162 struct se_device *dev = &udev->se_dev;
1163
1164 call_rcu(&dev->rcu_head, tcmu_dev_call_rcu);
1165}
1166
1148static int tcmu_release(struct uio_info *info, struct inode *inode) 1167static int tcmu_release(struct uio_info *info, struct inode *inode)
1149{ 1168{
1150 struct tcmu_dev *udev = container_of(info, struct tcmu_dev, uio_info); 1169 struct tcmu_dev *udev = container_of(info, struct tcmu_dev, uio_info);
@@ -1152,7 +1171,8 @@ static int tcmu_release(struct uio_info *info, struct inode *inode)
1152 clear_bit(TCMU_DEV_BIT_OPEN, &udev->flags); 1171 clear_bit(TCMU_DEV_BIT_OPEN, &udev->flags);
1153 1172
1154 pr_debug("close\n"); 1173 pr_debug("close\n");
1155 1174 /* release ref from configure */
1175 kref_put(&udev->kref, tcmu_dev_kref_release);
1156 return 0; 1176 return 0;
1157} 1177}
1158 1178
@@ -1272,6 +1292,12 @@ static int tcmu_configure_device(struct se_device *dev)
1272 dev->dev_attrib.hw_max_sectors = 128; 1292 dev->dev_attrib.hw_max_sectors = 128;
1273 dev->dev_attrib.hw_queue_depth = 128; 1293 dev->dev_attrib.hw_queue_depth = 128;
1274 1294
1295 /*
1296 * Get a ref incase userspace does a close on the uio device before
1297 * LIO has initiated tcmu_free_device.
1298 */
1299 kref_get(&udev->kref);
1300
1275 ret = tcmu_netlink_event(TCMU_CMD_ADDED_DEVICE, udev->uio_info.name, 1301 ret = tcmu_netlink_event(TCMU_CMD_ADDED_DEVICE, udev->uio_info.name,
1276 udev->uio_info.uio_dev->minor); 1302 udev->uio_info.uio_dev->minor);
1277 if (ret) 1303 if (ret)
@@ -1284,11 +1310,13 @@ static int tcmu_configure_device(struct se_device *dev)
1284 return 0; 1310 return 0;
1285 1311
1286err_netlink: 1312err_netlink:
1313 kref_put(&udev->kref, tcmu_dev_kref_release);
1287 uio_unregister_device(&udev->uio_info); 1314 uio_unregister_device(&udev->uio_info);
1288err_register: 1315err_register:
1289 vfree(udev->mb_addr); 1316 vfree(udev->mb_addr);
1290err_vzalloc: 1317err_vzalloc:
1291 kfree(info->name); 1318 kfree(info->name);
1319 info->name = NULL;
1292 1320
1293 return ret; 1321 return ret;
1294} 1322}
@@ -1302,14 +1330,6 @@ static int tcmu_check_and_free_pending_cmd(struct tcmu_cmd *cmd)
1302 return -EINVAL; 1330 return -EINVAL;
1303} 1331}
1304 1332
1305static void tcmu_dev_call_rcu(struct rcu_head *p)
1306{
1307 struct se_device *dev = container_of(p, struct se_device, rcu_head);
1308 struct tcmu_dev *udev = TCMU_DEV(dev);
1309
1310 kfree(udev);
1311}
1312
1313static bool tcmu_dev_configured(struct tcmu_dev *udev) 1333static bool tcmu_dev_configured(struct tcmu_dev *udev)
1314{ 1334{
1315 return udev->uio_info.uio_dev ? true : false; 1335 return udev->uio_info.uio_dev ? true : false;
@@ -1364,10 +1384,10 @@ static void tcmu_free_device(struct se_device *dev)
1364 udev->uio_info.uio_dev->minor); 1384 udev->uio_info.uio_dev->minor);
1365 1385
1366 uio_unregister_device(&udev->uio_info); 1386 uio_unregister_device(&udev->uio_info);
1367 kfree(udev->uio_info.name);
1368 kfree(udev->name);
1369 } 1387 }
1370 call_rcu(&dev->rcu_head, tcmu_dev_call_rcu); 1388
1389 /* release ref from init */
1390 kref_put(&udev->kref, tcmu_dev_kref_release);
1371} 1391}
1372 1392
1373enum { 1393enum {
diff --git a/drivers/thermal/broadcom/Kconfig b/drivers/thermal/broadcom/Kconfig
index ab08af4654ef..42c098e86f84 100644
--- a/drivers/thermal/broadcom/Kconfig
+++ b/drivers/thermal/broadcom/Kconfig
@@ -9,8 +9,9 @@ config BCM2835_THERMAL
9config BCM_NS_THERMAL 9config BCM_NS_THERMAL
10 tristate "Northstar thermal driver" 10 tristate "Northstar thermal driver"
11 depends on ARCH_BCM_IPROC || COMPILE_TEST 11 depends on ARCH_BCM_IPROC || COMPILE_TEST
12 default y if ARCH_BCM_IPROC
12 help 13 help
13 Northstar is a family of SoCs that includes e.g. BCM4708, BCM47081, 14 Support for the Northstar and Northstar Plus family of SoCs (e.g.
14 BCM4709 and BCM47094. It contains DMU (Device Management Unit) block 15 BCM4708, BCM4709, BCM5301x, BCM95852X, etc). It contains DMU (Device
15 with a thermal sensor that allows checking CPU temperature. This 16 Management Unit) block with a thermal sensor that allows checking CPU
16 driver provides support for it. 17 temperature.
diff --git a/drivers/thermal/qoriq_thermal.c b/drivers/thermal/qoriq_thermal.c
index 644ba526d9ea..4362a69ac88d 100644
--- a/drivers/thermal/qoriq_thermal.c
+++ b/drivers/thermal/qoriq_thermal.c
@@ -195,7 +195,6 @@ static struct thermal_zone_of_device_ops tmu_tz_ops = {
195static int qoriq_tmu_probe(struct platform_device *pdev) 195static int qoriq_tmu_probe(struct platform_device *pdev)
196{ 196{
197 int ret; 197 int ret;
198 const struct thermal_trip *trip;
199 struct qoriq_tmu_data *data; 198 struct qoriq_tmu_data *data;
200 struct device_node *np = pdev->dev.of_node; 199 struct device_node *np = pdev->dev.of_node;
201 u32 site = 0; 200 u32 site = 0;
@@ -243,8 +242,6 @@ static int qoriq_tmu_probe(struct platform_device *pdev)
243 goto err_tmu; 242 goto err_tmu;
244 } 243 }
245 244
246 trip = of_thermal_get_trip_points(data->tz);
247
248 /* Enable monitoring */ 245 /* Enable monitoring */
249 site |= 0x1 << (15 - data->sensor_id); 246 site |= 0x1 << (15 - data->sensor_id);
250 tmu_write(data, site | TMR_ME | TMR_ALPF, &data->regs->tmr); 247 tmu_write(data, site | TMR_ME | TMR_ALPF, &data->regs->tmr);
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index b21b9cc2c8d6..5a51c740e372 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -359,7 +359,7 @@ static DECLARE_DELAYED_WORK(thermal_emergency_poweroff_work,
359 * This may be called from any critical situation to trigger a system shutdown 359 * This may be called from any critical situation to trigger a system shutdown
360 * after a known period of time. By default this is not scheduled. 360 * after a known period of time. By default this is not scheduled.
361 */ 361 */
362void thermal_emergency_poweroff(void) 362static void thermal_emergency_poweroff(void)
363{ 363{
364 int poweroff_delay_ms = CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS; 364 int poweroff_delay_ms = CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS;
365 /* 365 /*
diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
index ba9c302454fb..696ab3046b87 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
@@ -1010,7 +1010,7 @@ ti_bandgap_force_single_read(struct ti_bandgap *bgp, int id)
1010} 1010}
1011 1011
1012/** 1012/**
1013 * ti_bandgap_set_continous_mode() - One time enabling of continuous mode 1013 * ti_bandgap_set_continuous_mode() - One time enabling of continuous mode
1014 * @bgp: pointer to struct ti_bandgap 1014 * @bgp: pointer to struct ti_bandgap
1015 * 1015 *
1016 * Call this function only if HAS(MODE_CONFIG) is set. As this driver may 1016 * Call this function only if HAS(MODE_CONFIG) is set. As this driver may
@@ -1214,22 +1214,18 @@ static struct ti_bandgap *ti_bandgap_build(struct platform_device *pdev)
1214 } 1214 }
1215 1215
1216 bgp = devm_kzalloc(&pdev->dev, sizeof(*bgp), GFP_KERNEL); 1216 bgp = devm_kzalloc(&pdev->dev, sizeof(*bgp), GFP_KERNEL);
1217 if (!bgp) { 1217 if (!bgp)
1218 dev_err(&pdev->dev, "Unable to allocate mem for driver ref\n");
1219 return ERR_PTR(-ENOMEM); 1218 return ERR_PTR(-ENOMEM);
1220 }
1221 1219
1222 of_id = of_match_device(of_ti_bandgap_match, &pdev->dev); 1220 of_id = of_match_device(of_ti_bandgap_match, &pdev->dev);
1223 if (of_id) 1221 if (of_id)
1224 bgp->conf = of_id->data; 1222 bgp->conf = of_id->data;
1225 1223
1226 /* register shadow for context save and restore */ 1224 /* register shadow for context save and restore */
1227 bgp->regval = devm_kzalloc(&pdev->dev, sizeof(*bgp->regval) * 1225 bgp->regval = devm_kcalloc(&pdev->dev, bgp->conf->sensor_count,
1228 bgp->conf->sensor_count, GFP_KERNEL); 1226 sizeof(*bgp->regval), GFP_KERNEL);
1229 if (!bgp->regval) { 1227 if (!bgp->regval)
1230 dev_err(&pdev->dev, "Unable to allocate mem for driver ref\n");
1231 return ERR_PTR(-ENOMEM); 1228 return ERR_PTR(-ENOMEM);
1232 }
1233 1229
1234 i = 0; 1230 i = 0;
1235 do { 1231 do {
diff --git a/drivers/tty/ehv_bytechan.c b/drivers/tty/ehv_bytechan.c
index 7ac9bcdf1e61..61fe8d6fd24e 100644
--- a/drivers/tty/ehv_bytechan.c
+++ b/drivers/tty/ehv_bytechan.c
@@ -764,7 +764,7 @@ static int __init ehv_bc_init(void)
764 ehv_bc_driver = alloc_tty_driver(count); 764 ehv_bc_driver = alloc_tty_driver(count);
765 if (!ehv_bc_driver) { 765 if (!ehv_bc_driver) {
766 ret = -ENOMEM; 766 ret = -ENOMEM;
767 goto error; 767 goto err_free_bcs;
768 } 768 }
769 769
770 ehv_bc_driver->driver_name = "ehv-bc"; 770 ehv_bc_driver->driver_name = "ehv-bc";
@@ -778,24 +778,23 @@ static int __init ehv_bc_init(void)
778 ret = tty_register_driver(ehv_bc_driver); 778 ret = tty_register_driver(ehv_bc_driver);
779 if (ret) { 779 if (ret) {
780 pr_err("ehv-bc: could not register tty driver (ret=%i)\n", ret); 780 pr_err("ehv-bc: could not register tty driver (ret=%i)\n", ret);
781 goto error; 781 goto err_put_tty_driver;
782 } 782 }
783 783
784 ret = platform_driver_register(&ehv_bc_tty_driver); 784 ret = platform_driver_register(&ehv_bc_tty_driver);
785 if (ret) { 785 if (ret) {
786 pr_err("ehv-bc: could not register platform driver (ret=%i)\n", 786 pr_err("ehv-bc: could not register platform driver (ret=%i)\n",
787 ret); 787 ret);
788 goto error; 788 goto err_deregister_tty_driver;
789 } 789 }
790 790
791 return 0; 791 return 0;
792 792
793error: 793err_deregister_tty_driver:
794 if (ehv_bc_driver) { 794 tty_unregister_driver(ehv_bc_driver);
795 tty_unregister_driver(ehv_bc_driver); 795err_put_tty_driver:
796 put_tty_driver(ehv_bc_driver); 796 put_tty_driver(ehv_bc_driver);
797 } 797err_free_bcs:
798
799 kfree(bcs); 798 kfree(bcs);
800 799
801 return ret; 800 return ret;
diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index 433de5ea9b02..f71b47334149 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -122,6 +122,18 @@ void serdev_device_write_wakeup(struct serdev_device *serdev)
122} 122}
123EXPORT_SYMBOL_GPL(serdev_device_write_wakeup); 123EXPORT_SYMBOL_GPL(serdev_device_write_wakeup);
124 124
125int serdev_device_write_buf(struct serdev_device *serdev,
126 const unsigned char *buf, size_t count)
127{
128 struct serdev_controller *ctrl = serdev->ctrl;
129
130 if (!ctrl || !ctrl->ops->write_buf)
131 return -EINVAL;
132
133 return ctrl->ops->write_buf(ctrl, buf, count);
134}
135EXPORT_SYMBOL_GPL(serdev_device_write_buf);
136
125int serdev_device_write(struct serdev_device *serdev, 137int serdev_device_write(struct serdev_device *serdev,
126 const unsigned char *buf, size_t count, 138 const unsigned char *buf, size_t count,
127 unsigned long timeout) 139 unsigned long timeout)
diff --git a/drivers/tty/serdev/serdev-ttyport.c b/drivers/tty/serdev/serdev-ttyport.c
index 487c88f6aa0e..d0a021c93986 100644
--- a/drivers/tty/serdev/serdev-ttyport.c
+++ b/drivers/tty/serdev/serdev-ttyport.c
@@ -102,9 +102,6 @@ static int ttyport_open(struct serdev_controller *ctrl)
102 return PTR_ERR(tty); 102 return PTR_ERR(tty);
103 serport->tty = tty; 103 serport->tty = tty;
104 104
105 serport->port->client_ops = &client_ops;
106 serport->port->client_data = ctrl;
107
108 if (tty->ops->open) 105 if (tty->ops->open)
109 tty->ops->open(serport->tty, NULL); 106 tty->ops->open(serport->tty, NULL);
110 else 107 else
@@ -215,6 +212,7 @@ struct device *serdev_tty_port_register(struct tty_port *port,
215 struct device *parent, 212 struct device *parent,
216 struct tty_driver *drv, int idx) 213 struct tty_driver *drv, int idx)
217{ 214{
215 const struct tty_port_client_operations *old_ops;
218 struct serdev_controller *ctrl; 216 struct serdev_controller *ctrl;
219 struct serport *serport; 217 struct serport *serport;
220 int ret; 218 int ret;
@@ -233,28 +231,37 @@ struct device *serdev_tty_port_register(struct tty_port *port,
233 231
234 ctrl->ops = &ctrl_ops; 232 ctrl->ops = &ctrl_ops;
235 233
234 old_ops = port->client_ops;
235 port->client_ops = &client_ops;
236 port->client_data = ctrl;
237
236 ret = serdev_controller_add(ctrl); 238 ret = serdev_controller_add(ctrl);
237 if (ret) 239 if (ret)
238 goto err_controller_put; 240 goto err_reset_data;
239 241
240 dev_info(&ctrl->dev, "tty port %s%d registered\n", drv->name, idx); 242 dev_info(&ctrl->dev, "tty port %s%d registered\n", drv->name, idx);
241 return &ctrl->dev; 243 return &ctrl->dev;
242 244
243err_controller_put: 245err_reset_data:
246 port->client_data = NULL;
247 port->client_ops = old_ops;
244 serdev_controller_put(ctrl); 248 serdev_controller_put(ctrl);
249
245 return ERR_PTR(ret); 250 return ERR_PTR(ret);
246} 251}
247 252
248void serdev_tty_port_unregister(struct tty_port *port) 253int serdev_tty_port_unregister(struct tty_port *port)
249{ 254{
250 struct serdev_controller *ctrl = port->client_data; 255 struct serdev_controller *ctrl = port->client_data;
251 struct serport *serport = serdev_controller_get_drvdata(ctrl); 256 struct serport *serport = serdev_controller_get_drvdata(ctrl);
252 257
253 if (!serport) 258 if (!serport)
254 return; 259 return -ENODEV;
255 260
256 serdev_controller_remove(ctrl); 261 serdev_controller_remove(ctrl);
257 port->client_ops = NULL; 262 port->client_ops = NULL;
258 port->client_data = NULL; 263 port->client_data = NULL;
259 serdev_controller_put(ctrl); 264 serdev_controller_put(ctrl);
265
266 return 0;
260} 267}
diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
index 09a65a3ec7f7..68fd045a7025 100644
--- a/drivers/tty/serial/8250/8250_port.c
+++ b/drivers/tty/serial/8250/8250_port.c
@@ -47,6 +47,7 @@
47/* 47/*
48 * These are definitions for the Exar XR17V35X and XR17(C|D)15X 48 * These are definitions for the Exar XR17V35X and XR17(C|D)15X
49 */ 49 */
50#define UART_EXAR_INT0 0x80
50#define UART_EXAR_SLEEP 0x8b /* Sleep mode */ 51#define UART_EXAR_SLEEP 0x8b /* Sleep mode */
51#define UART_EXAR_DVID 0x8d /* Device identification */ 52#define UART_EXAR_DVID 0x8d /* Device identification */
52 53
@@ -1337,7 +1338,7 @@ out_lock:
1337 /* 1338 /*
1338 * Check if the device is a Fintek F81216A 1339 * Check if the device is a Fintek F81216A
1339 */ 1340 */
1340 if (port->type == PORT_16550A) 1341 if (port->type == PORT_16550A && port->iotype == UPIO_PORT)
1341 fintek_8250_probe(up); 1342 fintek_8250_probe(up);
1342 1343
1343 if (up->capabilities != old_capabilities) { 1344 if (up->capabilities != old_capabilities) {
@@ -1869,17 +1870,13 @@ static int serial8250_default_handle_irq(struct uart_port *port)
1869static int exar_handle_irq(struct uart_port *port) 1870static int exar_handle_irq(struct uart_port *port)
1870{ 1871{
1871 unsigned int iir = serial_port_in(port, UART_IIR); 1872 unsigned int iir = serial_port_in(port, UART_IIR);
1872 int ret; 1873 int ret = 0;
1873 1874
1874 ret = serial8250_handle_irq(port, iir); 1875 if (((port->type == PORT_XR17V35X) || (port->type == PORT_XR17D15X)) &&
1876 serial_port_in(port, UART_EXAR_INT0) != 0)
1877 ret = 1;
1875 1878
1876 if ((port->type == PORT_XR17V35X) || 1879 ret |= serial8250_handle_irq(port, iir);
1877 (port->type == PORT_XR17D15X)) {
1878 serial_port_in(port, 0x80);
1879 serial_port_in(port, 0x81);
1880 serial_port_in(port, 0x82);
1881 serial_port_in(port, 0x83);
1882 }
1883 1880
1884 return ret; 1881 return ret;
1885} 1882}
@@ -2177,6 +2174,8 @@ int serial8250_do_startup(struct uart_port *port)
2177 serial_port_in(port, UART_RX); 2174 serial_port_in(port, UART_RX);
2178 serial_port_in(port, UART_IIR); 2175 serial_port_in(port, UART_IIR);
2179 serial_port_in(port, UART_MSR); 2176 serial_port_in(port, UART_MSR);
2177 if ((port->type == PORT_XR17V35X) || (port->type == PORT_XR17D15X))
2178 serial_port_in(port, UART_EXAR_INT0);
2180 2179
2181 /* 2180 /*
2182 * At this point, there's no way the LSR could still be 0xff; 2181 * At this point, there's no way the LSR could still be 0xff;
@@ -2335,6 +2334,8 @@ dont_test_tx_en:
2335 serial_port_in(port, UART_RX); 2334 serial_port_in(port, UART_RX);
2336 serial_port_in(port, UART_IIR); 2335 serial_port_in(port, UART_IIR);
2337 serial_port_in(port, UART_MSR); 2336 serial_port_in(port, UART_MSR);
2337 if ((port->type == PORT_XR17V35X) || (port->type == PORT_XR17D15X))
2338 serial_port_in(port, UART_EXAR_INT0);
2338 up->lsr_saved_flags = 0; 2339 up->lsr_saved_flags = 0;
2339 up->msr_saved_flags = 0; 2340 up->msr_saved_flags = 0;
2340 2341
diff --git a/drivers/tty/serial/altera_jtaguart.c b/drivers/tty/serial/altera_jtaguart.c
index 18e3f8342b85..0475f5d261ce 100644
--- a/drivers/tty/serial/altera_jtaguart.c
+++ b/drivers/tty/serial/altera_jtaguart.c
@@ -478,6 +478,7 @@ static int altera_jtaguart_remove(struct platform_device *pdev)
478 478
479 port = &altera_jtaguart_ports[i].port; 479 port = &altera_jtaguart_ports[i].port;
480 uart_remove_one_port(&altera_jtaguart_driver, port); 480 uart_remove_one_port(&altera_jtaguart_driver, port);
481 iounmap(port->membase);
481 482
482 return 0; 483 return 0;
483} 484}
diff --git a/drivers/tty/serial/altera_uart.c b/drivers/tty/serial/altera_uart.c
index 46d3438a0d27..3e4b717670d7 100644
--- a/drivers/tty/serial/altera_uart.c
+++ b/drivers/tty/serial/altera_uart.c
@@ -615,6 +615,7 @@ static int altera_uart_remove(struct platform_device *pdev)
615 if (port) { 615 if (port) {
616 uart_remove_one_port(&altera_uart_driver, port); 616 uart_remove_one_port(&altera_uart_driver, port);
617 port->mapbase = 0; 617 port->mapbase = 0;
618 iounmap(port->membase);
618 } 619 }
619 620
620 return 0; 621 return 0;
diff --git a/drivers/tty/serial/efm32-uart.c b/drivers/tty/serial/efm32-uart.c
index ebd8569f9ad5..9fff25be87f9 100644
--- a/drivers/tty/serial/efm32-uart.c
+++ b/drivers/tty/serial/efm32-uart.c
@@ -27,6 +27,7 @@
27#define UARTn_FRAME 0x04 27#define UARTn_FRAME 0x04
28#define UARTn_FRAME_DATABITS__MASK 0x000f 28#define UARTn_FRAME_DATABITS__MASK 0x000f
29#define UARTn_FRAME_DATABITS(n) ((n) - 3) 29#define UARTn_FRAME_DATABITS(n) ((n) - 3)
30#define UARTn_FRAME_PARITY__MASK 0x0300
30#define UARTn_FRAME_PARITY_NONE 0x0000 31#define UARTn_FRAME_PARITY_NONE 0x0000
31#define UARTn_FRAME_PARITY_EVEN 0x0200 32#define UARTn_FRAME_PARITY_EVEN 0x0200
32#define UARTn_FRAME_PARITY_ODD 0x0300 33#define UARTn_FRAME_PARITY_ODD 0x0300
@@ -572,12 +573,16 @@ static void efm32_uart_console_get_options(struct efm32_uart_port *efm_port,
572 16 * (4 + (clkdiv >> 6))); 573 16 * (4 + (clkdiv >> 6)));
573 574
574 frame = efm32_uart_read32(efm_port, UARTn_FRAME); 575 frame = efm32_uart_read32(efm_port, UARTn_FRAME);
575 if (frame & UARTn_FRAME_PARITY_ODD) 576 switch (frame & UARTn_FRAME_PARITY__MASK) {
577 case UARTn_FRAME_PARITY_ODD:
576 *parity = 'o'; 578 *parity = 'o';
577 else if (frame & UARTn_FRAME_PARITY_EVEN) 579 break;
580 case UARTn_FRAME_PARITY_EVEN:
578 *parity = 'e'; 581 *parity = 'e';
579 else 582 break;
583 default:
580 *parity = 'n'; 584 *parity = 'n';
585 }
581 586
582 *bits = (frame & UARTn_FRAME_DATABITS__MASK) - 587 *bits = (frame & UARTn_FRAME_DATABITS__MASK) -
583 UARTn_FRAME_DATABITS(4) + 4; 588 UARTn_FRAME_DATABITS(4) + 4;
diff --git a/drivers/tty/serial/ifx6x60.c b/drivers/tty/serial/ifx6x60.c
index 157883653256..f190a84a0246 100644
--- a/drivers/tty/serial/ifx6x60.c
+++ b/drivers/tty/serial/ifx6x60.c
@@ -1382,9 +1382,9 @@ static struct spi_driver ifx_spi_driver = {
1382static void __exit ifx_spi_exit(void) 1382static void __exit ifx_spi_exit(void)
1383{ 1383{
1384 /* unregister */ 1384 /* unregister */
1385 spi_unregister_driver(&ifx_spi_driver);
1385 tty_unregister_driver(tty_drv); 1386 tty_unregister_driver(tty_drv);
1386 put_tty_driver(tty_drv); 1387 put_tty_driver(tty_drv);
1387 spi_unregister_driver(&ifx_spi_driver);
1388 unregister_reboot_notifier(&ifx_modem_reboot_notifier_block); 1388 unregister_reboot_notifier(&ifx_modem_reboot_notifier_block);
1389} 1389}
1390 1390
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index 33509b4beaec..bbefddd92bfe 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -2184,7 +2184,9 @@ static int serial_imx_probe(struct platform_device *pdev)
2184 * and DCD (when they are outputs) or enables the respective 2184 * and DCD (when they are outputs) or enables the respective
2185 * irqs. So set this bit early, i.e. before requesting irqs. 2185 * irqs. So set this bit early, i.e. before requesting irqs.
2186 */ 2186 */
2187 writel(UFCR_DCEDTE, sport->port.membase + UFCR); 2187 reg = readl(sport->port.membase + UFCR);
2188 if (!(reg & UFCR_DCEDTE))
2189 writel(reg | UFCR_DCEDTE, sport->port.membase + UFCR);
2188 2190
2189 /* 2191 /*
2190 * Disable UCR3_RI and UCR3_DCD irqs. They are also not 2192 * Disable UCR3_RI and UCR3_DCD irqs. They are also not
@@ -2195,7 +2197,15 @@ static int serial_imx_probe(struct platform_device *pdev)
2195 sport->port.membase + UCR3); 2197 sport->port.membase + UCR3);
2196 2198
2197 } else { 2199 } else {
2198 writel(0, sport->port.membase + UFCR); 2200 unsigned long ucr3 = UCR3_DSR;
2201
2202 reg = readl(sport->port.membase + UFCR);
2203 if (reg & UFCR_DCEDTE)
2204 writel(reg & ~UFCR_DCEDTE, sport->port.membase + UFCR);
2205
2206 if (!is_imx1_uart(sport))
2207 ucr3 |= IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP;
2208 writel(ucr3, sport->port.membase + UCR3);
2199 } 2209 }
2200 2210
2201 clk_disable_unprepare(sport->clk_ipg); 2211 clk_disable_unprepare(sport->clk_ipg);
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 0f45b7884a2c..13bfd5dcffce 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -2083,7 +2083,7 @@ int uart_suspend_port(struct uart_driver *drv, struct uart_port *uport)
2083 mutex_lock(&port->mutex); 2083 mutex_lock(&port->mutex);
2084 2084
2085 tty_dev = device_find_child(uport->dev, &match, serial_match_port); 2085 tty_dev = device_find_child(uport->dev, &match, serial_match_port);
2086 if (device_may_wakeup(tty_dev)) { 2086 if (tty_dev && device_may_wakeup(tty_dev)) {
2087 if (!enable_irq_wake(uport->irq)) 2087 if (!enable_irq_wake(uport->irq))
2088 uport->irq_wake = 1; 2088 uport->irq_wake = 1;
2089 put_device(tty_dev); 2089 put_device(tty_dev);
@@ -2782,7 +2782,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
2782 * Register the port whether it's detected or not. This allows 2782 * Register the port whether it's detected or not. This allows
2783 * setserial to be used to alter this port's parameters. 2783 * setserial to be used to alter this port's parameters.
2784 */ 2784 */
2785 tty_dev = tty_port_register_device_attr(port, drv->tty_driver, 2785 tty_dev = tty_port_register_device_attr_serdev(port, drv->tty_driver,
2786 uport->line, uport->dev, port, uport->tty_groups); 2786 uport->line, uport->dev, port, uport->tty_groups);
2787 if (likely(!IS_ERR(tty_dev))) { 2787 if (likely(!IS_ERR(tty_dev))) {
2788 device_set_wakeup_capable(tty_dev, 1); 2788 device_set_wakeup_capable(tty_dev, 1);
@@ -2845,7 +2845,7 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)
2845 /* 2845 /*
2846 * Remove the devices from the tty layer 2846 * Remove the devices from the tty layer
2847 */ 2847 */
2848 tty_unregister_device(drv->tty_driver, uport->line); 2848 tty_port_unregister_device(port, drv->tty_driver, uport->line);
2849 2849
2850 tty = tty_port_tty_get(port); 2850 tty = tty_port_tty_get(port);
2851 if (tty) { 2851 if (tty) {
diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
index 1d21a9c1d33e..6b137194069f 100644
--- a/drivers/tty/tty_port.c
+++ b/drivers/tty/tty_port.c
@@ -129,19 +129,85 @@ struct device *tty_port_register_device_attr(struct tty_port *port,
129 struct device *device, void *drvdata, 129 struct device *device, void *drvdata,
130 const struct attribute_group **attr_grp) 130 const struct attribute_group **attr_grp)
131{ 131{
132 tty_port_link_device(port, driver, index);
133 return tty_register_device_attr(driver, index, device, drvdata,
134 attr_grp);
135}
136EXPORT_SYMBOL_GPL(tty_port_register_device_attr);
137
138/**
139 * tty_port_register_device_attr_serdev - register tty or serdev device
140 * @port: tty_port of the device
141 * @driver: tty_driver for this device
142 * @index: index of the tty
143 * @device: parent if exists, otherwise NULL
144 * @drvdata: driver data for the device
145 * @attr_grp: attribute group for the device
146 *
147 * Register a serdev or tty device depending on if the parent device has any
148 * defined serdev clients or not.
149 */
150struct device *tty_port_register_device_attr_serdev(struct tty_port *port,
151 struct tty_driver *driver, unsigned index,
152 struct device *device, void *drvdata,
153 const struct attribute_group **attr_grp)
154{
132 struct device *dev; 155 struct device *dev;
133 156
134 tty_port_link_device(port, driver, index); 157 tty_port_link_device(port, driver, index);
135 158
136 dev = serdev_tty_port_register(port, device, driver, index); 159 dev = serdev_tty_port_register(port, device, driver, index);
137 if (PTR_ERR(dev) != -ENODEV) 160 if (PTR_ERR(dev) != -ENODEV) {
138 /* Skip creating cdev if we registered a serdev device */ 161 /* Skip creating cdev if we registered a serdev device */
139 return dev; 162 return dev;
163 }
140 164
141 return tty_register_device_attr(driver, index, device, drvdata, 165 return tty_register_device_attr(driver, index, device, drvdata,
142 attr_grp); 166 attr_grp);
143} 167}
144EXPORT_SYMBOL_GPL(tty_port_register_device_attr); 168EXPORT_SYMBOL_GPL(tty_port_register_device_attr_serdev);
169
170/**
171 * tty_port_register_device_serdev - register tty or serdev device
172 * @port: tty_port of the device
173 * @driver: tty_driver for this device
174 * @index: index of the tty
175 * @device: parent if exists, otherwise NULL
176 *
177 * Register a serdev or tty device depending on if the parent device has any
178 * defined serdev clients or not.
179 */
180struct device *tty_port_register_device_serdev(struct tty_port *port,
181 struct tty_driver *driver, unsigned index,
182 struct device *device)
183{
184 return tty_port_register_device_attr_serdev(port, driver, index,
185 device, NULL, NULL);
186}
187EXPORT_SYMBOL_GPL(tty_port_register_device_serdev);
188
189/**
190 * tty_port_unregister_device - deregister a tty or serdev device
191 * @port: tty_port of the device
192 * @driver: tty_driver for this device
193 * @index: index of the tty
194 *
195 * If a tty or serdev device is registered with a call to
196 * tty_port_register_device_serdev() then this function must be called when
197 * the device is gone.
198 */
199void tty_port_unregister_device(struct tty_port *port,
200 struct tty_driver *driver, unsigned index)
201{
202 int ret;
203
204 ret = serdev_tty_port_unregister(port);
205 if (ret == 0)
206 return;
207
208 tty_unregister_device(driver, index);
209}
210EXPORT_SYMBOL_GPL(tty_port_unregister_device);
145 211
146int tty_port_alloc_xmit_buf(struct tty_port *port) 212int tty_port_alloc_xmit_buf(struct tty_port *port)
147{ 213{
@@ -189,9 +255,6 @@ static void tty_port_destructor(struct kref *kref)
189 /* check if last port ref was dropped before tty release */ 255 /* check if last port ref was dropped before tty release */
190 if (WARN_ON(port->itty)) 256 if (WARN_ON(port->itty))
191 return; 257 return;
192
193 serdev_tty_port_unregister(port);
194
195 if (port->xmit_buf) 258 if (port->xmit_buf)
196 free_page((unsigned long)port->xmit_buf); 259 free_page((unsigned long)port->xmit_buf);
197 tty_port_destroy(port); 260 tty_port_destroy(port);
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 9e217b1361ea..fe4fe2440729 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -843,7 +843,10 @@ static ssize_t ci_role_show(struct device *dev, struct device_attribute *attr,
843{ 843{
844 struct ci_hdrc *ci = dev_get_drvdata(dev); 844 struct ci_hdrc *ci = dev_get_drvdata(dev);
845 845
846 return sprintf(buf, "%s\n", ci_role(ci)->name); 846 if (ci->role != CI_ROLE_END)
847 return sprintf(buf, "%s\n", ci_role(ci)->name);
848
849 return 0;
847} 850}
848 851
849static ssize_t ci_role_store(struct device *dev, 852static ssize_t ci_role_store(struct device *dev,
diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c
index 6d23eede4d8c..1c31e8a08810 100644
--- a/drivers/usb/chipidea/debug.c
+++ b/drivers/usb/chipidea/debug.c
@@ -294,7 +294,8 @@ static int ci_role_show(struct seq_file *s, void *data)
294{ 294{
295 struct ci_hdrc *ci = s->private; 295 struct ci_hdrc *ci = s->private;
296 296
297 seq_printf(s, "%s\n", ci_role(ci)->name); 297 if (ci->role != CI_ROLE_END)
298 seq_printf(s, "%s\n", ci_role(ci)->name);
298 299
299 return 0; 300 return 0;
300} 301}
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index 56d2d3213076..d68b125796f9 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1993,6 +1993,7 @@ static void udc_id_switch_for_host(struct ci_hdrc *ci)
1993int ci_hdrc_gadget_init(struct ci_hdrc *ci) 1993int ci_hdrc_gadget_init(struct ci_hdrc *ci)
1994{ 1994{
1995 struct ci_role_driver *rdrv; 1995 struct ci_role_driver *rdrv;
1996 int ret;
1996 1997
1997 if (!hw_read(ci, CAP_DCCPARAMS, DCCPARAMS_DC)) 1998 if (!hw_read(ci, CAP_DCCPARAMS, DCCPARAMS_DC))
1998 return -ENXIO; 1999 return -ENXIO;
@@ -2005,7 +2006,10 @@ int ci_hdrc_gadget_init(struct ci_hdrc *ci)
2005 rdrv->stop = udc_id_switch_for_host; 2006 rdrv->stop = udc_id_switch_for_host;
2006 rdrv->irq = udc_irq; 2007 rdrv->irq = udc_irq;
2007 rdrv->name = "gadget"; 2008 rdrv->name = "gadget";
2008 ci->roles[CI_ROLE_GADGET] = rdrv;
2009 2009
2010 return udc_start(ci); 2010 ret = udc_start(ci);
2011 if (!ret)
2012 ci->roles[CI_ROLE_GADGET] = rdrv;
2013
2014 return ret;
2011} 2015}
diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c
index e77a4ed4f021..9f4a0185dd60 100644
--- a/drivers/usb/chipidea/usbmisc_imx.c
+++ b/drivers/usb/chipidea/usbmisc_imx.c
@@ -108,6 +108,8 @@ struct imx_usbmisc {
108 const struct usbmisc_ops *ops; 108 const struct usbmisc_ops *ops;
109}; 109};
110 110
111static inline bool is_imx53_usbmisc(struct imx_usbmisc_data *data);
112
111static int usbmisc_imx25_init(struct imx_usbmisc_data *data) 113static int usbmisc_imx25_init(struct imx_usbmisc_data *data)
112{ 114{
113 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); 115 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
@@ -242,10 +244,15 @@ static int usbmisc_imx53_init(struct imx_usbmisc_data *data)
242 val = readl(reg) | MX53_USB_UHx_CTRL_WAKE_UP_EN 244 val = readl(reg) | MX53_USB_UHx_CTRL_WAKE_UP_EN
243 | MX53_USB_UHx_CTRL_ULPI_INT_EN; 245 | MX53_USB_UHx_CTRL_ULPI_INT_EN;
244 writel(val, reg); 246 writel(val, reg);
245 /* Disable internal 60Mhz clock */ 247 if (is_imx53_usbmisc(data)) {
246 reg = usbmisc->base + MX53_USB_CLKONOFF_CTRL_OFFSET; 248 /* Disable internal 60Mhz clock */
247 val = readl(reg) | MX53_USB_CLKONOFF_CTRL_H2_INT60CKOFF; 249 reg = usbmisc->base +
248 writel(val, reg); 250 MX53_USB_CLKONOFF_CTRL_OFFSET;
251 val = readl(reg) |
252 MX53_USB_CLKONOFF_CTRL_H2_INT60CKOFF;
253 writel(val, reg);
254 }
255
249 } 256 }
250 if (data->disable_oc) { 257 if (data->disable_oc) {
251 reg = usbmisc->base + MX53_USB_UH2_CTRL_OFFSET; 258 reg = usbmisc->base + MX53_USB_UH2_CTRL_OFFSET;
@@ -267,10 +274,15 @@ static int usbmisc_imx53_init(struct imx_usbmisc_data *data)
267 val = readl(reg) | MX53_USB_UHx_CTRL_WAKE_UP_EN 274 val = readl(reg) | MX53_USB_UHx_CTRL_WAKE_UP_EN
268 | MX53_USB_UHx_CTRL_ULPI_INT_EN; 275 | MX53_USB_UHx_CTRL_ULPI_INT_EN;
269 writel(val, reg); 276 writel(val, reg);
270 /* Disable internal 60Mhz clock */ 277
271 reg = usbmisc->base + MX53_USB_CLKONOFF_CTRL_OFFSET; 278 if (is_imx53_usbmisc(data)) {
272 val = readl(reg) | MX53_USB_CLKONOFF_CTRL_H3_INT60CKOFF; 279 /* Disable internal 60Mhz clock */
273 writel(val, reg); 280 reg = usbmisc->base +
281 MX53_USB_CLKONOFF_CTRL_OFFSET;
282 val = readl(reg) |
283 MX53_USB_CLKONOFF_CTRL_H3_INT60CKOFF;
284 writel(val, reg);
285 }
274 } 286 }
275 if (data->disable_oc) { 287 if (data->disable_oc) {
276 reg = usbmisc->base + MX53_USB_UH3_CTRL_OFFSET; 288 reg = usbmisc->base + MX53_USB_UH3_CTRL_OFFSET;
@@ -456,6 +468,10 @@ static const struct usbmisc_ops imx27_usbmisc_ops = {
456 .init = usbmisc_imx27_init, 468 .init = usbmisc_imx27_init,
457}; 469};
458 470
471static const struct usbmisc_ops imx51_usbmisc_ops = {
472 .init = usbmisc_imx53_init,
473};
474
459static const struct usbmisc_ops imx53_usbmisc_ops = { 475static const struct usbmisc_ops imx53_usbmisc_ops = {
460 .init = usbmisc_imx53_init, 476 .init = usbmisc_imx53_init,
461}; 477};
@@ -479,6 +495,13 @@ static const struct usbmisc_ops imx7d_usbmisc_ops = {
479 .set_wakeup = usbmisc_imx7d_set_wakeup, 495 .set_wakeup = usbmisc_imx7d_set_wakeup,
480}; 496};
481 497
498static inline bool is_imx53_usbmisc(struct imx_usbmisc_data *data)
499{
500 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
501
502 return usbmisc->ops == &imx53_usbmisc_ops;
503}
504
482int imx_usbmisc_init(struct imx_usbmisc_data *data) 505int imx_usbmisc_init(struct imx_usbmisc_data *data)
483{ 506{
484 struct imx_usbmisc *usbmisc; 507 struct imx_usbmisc *usbmisc;
@@ -536,7 +559,7 @@ static const struct of_device_id usbmisc_imx_dt_ids[] = {
536 }, 559 },
537 { 560 {
538 .compatible = "fsl,imx51-usbmisc", 561 .compatible = "fsl,imx51-usbmisc",
539 .data = &imx53_usbmisc_ops, 562 .data = &imx51_usbmisc_ops,
540 }, 563 },
541 { 564 {
542 .compatible = "fsl,imx53-usbmisc", 565 .compatible = "fsl,imx53-usbmisc",
diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c
index 9cd8722f24f6..a3ffe97170ff 100644
--- a/drivers/usb/dwc2/params.c
+++ b/drivers/usb/dwc2/params.c
@@ -144,6 +144,8 @@ const struct of_device_id dwc2_of_match_table[] = {
144 { .compatible = "lantiq,xrx200-usb", .data = dwc2_set_ltq_params }, 144 { .compatible = "lantiq,xrx200-usb", .data = dwc2_set_ltq_params },
145 { .compatible = "snps,dwc2" }, 145 { .compatible = "snps,dwc2" },
146 { .compatible = "samsung,s3c6400-hsotg" }, 146 { .compatible = "samsung,s3c6400-hsotg" },
147 { .compatible = "amlogic,meson8-usb",
148 .data = dwc2_set_amlogic_params },
147 { .compatible = "amlogic,meson8b-usb", 149 { .compatible = "amlogic,meson8b-usb",
148 .data = dwc2_set_amlogic_params }, 150 .data = dwc2_set_amlogic_params },
149 { .compatible = "amlogic,meson-gxbb-usb", 151 { .compatible = "amlogic,meson-gxbb-usb",
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 49d685ad0da9..45b554032332 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -315,6 +315,9 @@ void usb_remove_function(struct usb_configuration *c, struct usb_function *f)
315 list_del(&f->list); 315 list_del(&f->list);
316 if (f->unbind) 316 if (f->unbind)
317 f->unbind(c, f); 317 f->unbind(c, f);
318
319 if (f->bind_deactivated)
320 usb_function_activate(f);
318} 321}
319EXPORT_SYMBOL_GPL(usb_remove_function); 322EXPORT_SYMBOL_GPL(usb_remove_function);
320 323
@@ -956,12 +959,8 @@ static void remove_config(struct usb_composite_dev *cdev,
956 959
957 f = list_first_entry(&config->functions, 960 f = list_first_entry(&config->functions,
958 struct usb_function, list); 961 struct usb_function, list);
959 list_del(&f->list); 962
960 if (f->unbind) { 963 usb_remove_function(config, f);
961 DBG(cdev, "unbind function '%s'/%p\n", f->name, f);
962 f->unbind(config, f);
963 /* may free memory for "f" */
964 }
965 } 964 }
966 list_del(&config->list); 965 list_del(&config->list);
967 if (config->unbind) { 966 if (config->unbind) {
diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
index 4c8aacc232c0..74d57d6994da 100644
--- a/drivers/usb/gadget/function/f_mass_storage.c
+++ b/drivers/usb/gadget/function/f_mass_storage.c
@@ -396,7 +396,11 @@ static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
396/* Caller must hold fsg->lock */ 396/* Caller must hold fsg->lock */
397static void wakeup_thread(struct fsg_common *common) 397static void wakeup_thread(struct fsg_common *common)
398{ 398{
399 smp_wmb(); /* ensure the write of bh->state is complete */ 399 /*
400 * Ensure the reading of thread_wakeup_needed
401 * and the writing of bh->state are completed
402 */
403 smp_mb();
400 /* Tell the main thread that something has happened */ 404 /* Tell the main thread that something has happened */
401 common->thread_wakeup_needed = 1; 405 common->thread_wakeup_needed = 1;
402 if (common->thread_task) 406 if (common->thread_task)
@@ -627,7 +631,12 @@ static int sleep_thread(struct fsg_common *common, bool can_freeze)
627 } 631 }
628 __set_current_state(TASK_RUNNING); 632 __set_current_state(TASK_RUNNING);
629 common->thread_wakeup_needed = 0; 633 common->thread_wakeup_needed = 0;
630 smp_rmb(); /* ensure the latest bh->state is visible */ 634
635 /*
636 * Ensure the writing of thread_wakeup_needed
637 * and the reading of bh->state are completed
638 */
639 smp_mb();
631 return rc; 640 return rc;
632} 641}
633 642
diff --git a/drivers/usb/gadget/function/f_phonet.c b/drivers/usb/gadget/function/f_phonet.c
index b4058f0000e4..6a1ce6a55158 100644
--- a/drivers/usb/gadget/function/f_phonet.c
+++ b/drivers/usb/gadget/function/f_phonet.c
@@ -281,7 +281,7 @@ static void pn_net_setup(struct net_device *dev)
281 dev->tx_queue_len = 1; 281 dev->tx_queue_len = 1;
282 282
283 dev->netdev_ops = &pn_netdev_ops; 283 dev->netdev_ops = &pn_netdev_ops;
284 dev->destructor = free_netdev; 284 dev->needs_free_netdev = true;
285 dev->header_ops = &phonet_header_ops; 285 dev->header_ops = &phonet_header_ops;
286} 286}
287 287
diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
index b9ca0a26cbd9..684900fcfe24 100644
--- a/drivers/usb/gadget/legacy/inode.c
+++ b/drivers/usb/gadget/legacy/inode.c
@@ -1183,8 +1183,10 @@ dev_release (struct inode *inode, struct file *fd)
1183 1183
1184 /* closing ep0 === shutdown all */ 1184 /* closing ep0 === shutdown all */
1185 1185
1186 if (dev->gadget_registered) 1186 if (dev->gadget_registered) {
1187 usb_gadget_unregister_driver (&gadgetfs_driver); 1187 usb_gadget_unregister_driver (&gadgetfs_driver);
1188 dev->gadget_registered = false;
1189 }
1188 1190
1189 /* at this point "good" hardware has disconnected the 1191 /* at this point "good" hardware has disconnected the
1190 * device from USB; the host won't see it any more. 1192 * device from USB; the host won't see it any more.
@@ -1677,9 +1679,10 @@ static void
1677gadgetfs_suspend (struct usb_gadget *gadget) 1679gadgetfs_suspend (struct usb_gadget *gadget)
1678{ 1680{
1679 struct dev_data *dev = get_gadget_data (gadget); 1681 struct dev_data *dev = get_gadget_data (gadget);
1682 unsigned long flags;
1680 1683
1681 INFO (dev, "suspended from state %d\n", dev->state); 1684 INFO (dev, "suspended from state %d\n", dev->state);
1682 spin_lock (&dev->lock); 1685 spin_lock_irqsave(&dev->lock, flags);
1683 switch (dev->state) { 1686 switch (dev->state) {
1684 case STATE_DEV_SETUP: // VERY odd... host died?? 1687 case STATE_DEV_SETUP: // VERY odd... host died??
1685 case STATE_DEV_CONNECTED: 1688 case STATE_DEV_CONNECTED:
@@ -1690,7 +1693,7 @@ gadgetfs_suspend (struct usb_gadget *gadget)
1690 default: 1693 default:
1691 break; 1694 break;
1692 } 1695 }
1693 spin_unlock (&dev->lock); 1696 spin_unlock_irqrestore(&dev->lock, flags);
1694} 1697}
1695 1698
1696static struct usb_gadget_driver gadgetfs_driver = { 1699static struct usb_gadget_driver gadgetfs_driver = {
diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
index ccabb51cb98d..7635fd7cc328 100644
--- a/drivers/usb/gadget/udc/dummy_hcd.c
+++ b/drivers/usb/gadget/udc/dummy_hcd.c
@@ -442,23 +442,16 @@ static void set_link_state(struct dummy_hcd *dum_hcd)
442 /* Report reset and disconnect events to the driver */ 442 /* Report reset and disconnect events to the driver */
443 if (dum->driver && (disconnect || reset)) { 443 if (dum->driver && (disconnect || reset)) {
444 stop_activity(dum); 444 stop_activity(dum);
445 spin_unlock(&dum->lock);
446 if (reset) 445 if (reset)
447 usb_gadget_udc_reset(&dum->gadget, dum->driver); 446 usb_gadget_udc_reset(&dum->gadget, dum->driver);
448 else 447 else
449 dum->driver->disconnect(&dum->gadget); 448 dum->driver->disconnect(&dum->gadget);
450 spin_lock(&dum->lock);
451 } 449 }
452 } else if (dum_hcd->active != dum_hcd->old_active) { 450 } else if (dum_hcd->active != dum_hcd->old_active) {
453 if (dum_hcd->old_active && dum->driver->suspend) { 451 if (dum_hcd->old_active && dum->driver->suspend)
454 spin_unlock(&dum->lock);
455 dum->driver->suspend(&dum->gadget); 452 dum->driver->suspend(&dum->gadget);
456 spin_lock(&dum->lock); 453 else if (!dum_hcd->old_active && dum->driver->resume)
457 } else if (!dum_hcd->old_active && dum->driver->resume) {
458 spin_unlock(&dum->lock);
459 dum->driver->resume(&dum->gadget); 454 dum->driver->resume(&dum->gadget);
460 spin_lock(&dum->lock);
461 }
462 } 455 }
463 456
464 dum_hcd->old_status = dum_hcd->port_status; 457 dum_hcd->old_status = dum_hcd->port_status;
@@ -983,7 +976,9 @@ static int dummy_udc_stop(struct usb_gadget *g)
983 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(g); 976 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(g);
984 struct dummy *dum = dum_hcd->dum; 977 struct dummy *dum = dum_hcd->dum;
985 978
979 spin_lock_irq(&dum->lock);
986 dum->driver = NULL; 980 dum->driver = NULL;
981 spin_unlock_irq(&dum->lock);
987 982
988 return 0; 983 return 0;
989} 984}
diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
index 6cf07857eaca..f2cbd7f8005e 100644
--- a/drivers/usb/gadget/udc/net2280.c
+++ b/drivers/usb/gadget/udc/net2280.c
@@ -2470,11 +2470,8 @@ static void stop_activity(struct net2280 *dev, struct usb_gadget_driver *driver)
2470 nuke(&dev->ep[i]); 2470 nuke(&dev->ep[i]);
2471 2471
2472 /* report disconnect; the driver is already quiesced */ 2472 /* report disconnect; the driver is already quiesced */
2473 if (driver) { 2473 if (driver)
2474 spin_unlock(&dev->lock);
2475 driver->disconnect(&dev->gadget); 2474 driver->disconnect(&dev->gadget);
2476 spin_lock(&dev->lock);
2477 }
2478 2475
2479 usb_reinit(dev); 2476 usb_reinit(dev);
2480} 2477}
@@ -3348,8 +3345,6 @@ next_endpoints:
3348 BIT(PCI_RETRY_ABORT_INTERRUPT)) 3345 BIT(PCI_RETRY_ABORT_INTERRUPT))
3349 3346
3350static void handle_stat1_irqs(struct net2280 *dev, u32 stat) 3347static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
3351__releases(dev->lock)
3352__acquires(dev->lock)
3353{ 3348{
3354 struct net2280_ep *ep; 3349 struct net2280_ep *ep;
3355 u32 tmp, num, mask, scratch; 3350 u32 tmp, num, mask, scratch;
@@ -3390,14 +3385,12 @@ __acquires(dev->lock)
3390 if (disconnect || reset) { 3385 if (disconnect || reset) {
3391 stop_activity(dev, dev->driver); 3386 stop_activity(dev, dev->driver);
3392 ep0_start(dev); 3387 ep0_start(dev);
3393 spin_unlock(&dev->lock);
3394 if (reset) 3388 if (reset)
3395 usb_gadget_udc_reset 3389 usb_gadget_udc_reset
3396 (&dev->gadget, dev->driver); 3390 (&dev->gadget, dev->driver);
3397 else 3391 else
3398 (dev->driver->disconnect) 3392 (dev->driver->disconnect)
3399 (&dev->gadget); 3393 (&dev->gadget);
3400 spin_lock(&dev->lock);
3401 return; 3394 return;
3402 } 3395 }
3403 } 3396 }
diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
index 5a2d845fb1a6..cd4c88529721 100644
--- a/drivers/usb/gadget/udc/renesas_usb3.c
+++ b/drivers/usb/gadget/udc/renesas_usb3.c
@@ -623,7 +623,6 @@ static void renesas_usb3_stop_controller(struct renesas_usb3 *usb3)
623{ 623{
624 usb3_disconnect(usb3); 624 usb3_disconnect(usb3);
625 usb3_write(usb3, 0, USB3_P0_INT_ENA); 625 usb3_write(usb3, 0, USB3_P0_INT_ENA);
626 usb3_write(usb3, 0, USB3_PN_INT_ENA);
627 usb3_write(usb3, 0, USB3_USB_OTG_INT_ENA); 626 usb3_write(usb3, 0, USB3_USB_OTG_INT_ENA);
628 usb3_write(usb3, 0, USB3_USB_INT_ENA_1); 627 usb3_write(usb3, 0, USB3_USB_INT_ENA_1);
629 usb3_write(usb3, 0, USB3_USB_INT_ENA_2); 628 usb3_write(usb3, 0, USB3_USB_INT_ENA_2);
@@ -1475,7 +1474,13 @@ static void usb3_request_done_pipen(struct renesas_usb3 *usb3,
1475 struct renesas_usb3_request *usb3_req, 1474 struct renesas_usb3_request *usb3_req,
1476 int status) 1475 int status)
1477{ 1476{
1478 usb3_pn_stop(usb3); 1477 unsigned long flags;
1478
1479 spin_lock_irqsave(&usb3->lock, flags);
1480 if (usb3_pn_change(usb3, usb3_ep->num))
1481 usb3_pn_stop(usb3);
1482 spin_unlock_irqrestore(&usb3->lock, flags);
1483
1479 usb3_disable_pipe_irq(usb3, usb3_ep->num); 1484 usb3_disable_pipe_irq(usb3, usb3_ep->num);
1480 usb3_request_done(usb3_ep, usb3_req, status); 1485 usb3_request_done(usb3_ep, usb3_req, status);
1481 1486
@@ -1504,30 +1509,46 @@ static void usb3_irq_epc_pipen_bfrdy(struct renesas_usb3 *usb3, int num)
1504{ 1509{
1505 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num); 1510 struct renesas_usb3_ep *usb3_ep = usb3_get_ep(usb3, num);
1506 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep); 1511 struct renesas_usb3_request *usb3_req = usb3_get_request(usb3_ep);
1512 bool done = false;
1507 1513
1508 if (!usb3_req) 1514 if (!usb3_req)
1509 return; 1515 return;
1510 1516
1517 spin_lock(&usb3->lock);
1518 if (usb3_pn_change(usb3, num))
1519 goto out;
1520
1511 if (usb3_ep->dir_in) { 1521 if (usb3_ep->dir_in) {
1512 /* Do not stop the IN pipe here to detect LSTTR interrupt */ 1522 /* Do not stop the IN pipe here to detect LSTTR interrupt */
1513 if (!usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE)) 1523 if (!usb3_write_pipe(usb3_ep, usb3_req, USB3_PN_WRITE))
1514 usb3_clear_bit(usb3, PN_INT_BFRDY, USB3_PN_INT_ENA); 1524 usb3_clear_bit(usb3, PN_INT_BFRDY, USB3_PN_INT_ENA);
1515 } else { 1525 } else {
1516 if (!usb3_read_pipe(usb3_ep, usb3_req, USB3_PN_READ)) 1526 if (!usb3_read_pipe(usb3_ep, usb3_req, USB3_PN_READ))
1517 usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0); 1527 done = true;
1518 } 1528 }
1529
1530out:
1531 /* need to unlock because usb3_request_done_pipen() locks it */
1532 spin_unlock(&usb3->lock);
1533
1534 if (done)
1535 usb3_request_done_pipen(usb3, usb3_ep, usb3_req, 0);
1519} 1536}
1520 1537
1521static void usb3_irq_epc_pipen(struct renesas_usb3 *usb3, int num) 1538static void usb3_irq_epc_pipen(struct renesas_usb3 *usb3, int num)
1522{ 1539{
1523 u32 pn_int_sta; 1540 u32 pn_int_sta;
1524 1541
1525 if (usb3_pn_change(usb3, num) < 0) 1542 spin_lock(&usb3->lock);
1543 if (usb3_pn_change(usb3, num) < 0) {
1544 spin_unlock(&usb3->lock);
1526 return; 1545 return;
1546 }
1527 1547
1528 pn_int_sta = usb3_read(usb3, USB3_PN_INT_STA); 1548 pn_int_sta = usb3_read(usb3, USB3_PN_INT_STA);
1529 pn_int_sta &= usb3_read(usb3, USB3_PN_INT_ENA); 1549 pn_int_sta &= usb3_read(usb3, USB3_PN_INT_ENA);
1530 usb3_write(usb3, pn_int_sta, USB3_PN_INT_STA); 1550 usb3_write(usb3, pn_int_sta, USB3_PN_INT_STA);
1551 spin_unlock(&usb3->lock);
1531 if (pn_int_sta & PN_INT_LSTTR) 1552 if (pn_int_sta & PN_INT_LSTTR)
1532 usb3_irq_epc_pipen_lsttr(usb3, num); 1553 usb3_irq_epc_pipen_lsttr(usb3, num);
1533 if (pn_int_sta & PN_INT_BFRDY) 1554 if (pn_int_sta & PN_INT_BFRDY)
@@ -1660,6 +1681,7 @@ static int usb3_disable_pipe_n(struct renesas_usb3_ep *usb3_ep)
1660 1681
1661 spin_lock_irqsave(&usb3->lock, flags); 1682 spin_lock_irqsave(&usb3->lock, flags);
1662 if (!usb3_pn_change(usb3, usb3_ep->num)) { 1683 if (!usb3_pn_change(usb3, usb3_ep->num)) {
1684 usb3_write(usb3, 0, USB3_PN_INT_ENA);
1663 usb3_write(usb3, 0, USB3_PN_RAMMAP); 1685 usb3_write(usb3, 0, USB3_PN_RAMMAP);
1664 usb3_clear_bit(usb3, PN_CON_EN, USB3_PN_CON); 1686 usb3_clear_bit(usb3, PN_CON_EN, USB3_PN_CON);
1665 } 1687 }
@@ -1799,6 +1821,9 @@ static int renesas_usb3_start(struct usb_gadget *gadget,
1799 /* hook up the driver */ 1821 /* hook up the driver */
1800 usb3->driver = driver; 1822 usb3->driver = driver;
1801 1823
1824 pm_runtime_enable(usb3_to_dev(usb3));
1825 pm_runtime_get_sync(usb3_to_dev(usb3));
1826
1802 renesas_usb3_init_controller(usb3); 1827 renesas_usb3_init_controller(usb3);
1803 1828
1804 return 0; 1829 return 0;
@@ -1807,14 +1832,14 @@ static int renesas_usb3_start(struct usb_gadget *gadget,
1807static int renesas_usb3_stop(struct usb_gadget *gadget) 1832static int renesas_usb3_stop(struct usb_gadget *gadget)
1808{ 1833{
1809 struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget); 1834 struct renesas_usb3 *usb3 = gadget_to_renesas_usb3(gadget);
1810 unsigned long flags;
1811 1835
1812 spin_lock_irqsave(&usb3->lock, flags);
1813 usb3->softconnect = false; 1836 usb3->softconnect = false;
1814 usb3->gadget.speed = USB_SPEED_UNKNOWN; 1837 usb3->gadget.speed = USB_SPEED_UNKNOWN;
1815 usb3->driver = NULL; 1838 usb3->driver = NULL;
1816 renesas_usb3_stop_controller(usb3); 1839 renesas_usb3_stop_controller(usb3);
1817 spin_unlock_irqrestore(&usb3->lock, flags); 1840
1841 pm_runtime_put(usb3_to_dev(usb3));
1842 pm_runtime_disable(usb3_to_dev(usb3));
1818 1843
1819 return 0; 1844 return 0;
1820} 1845}
@@ -1891,9 +1916,6 @@ static int renesas_usb3_remove(struct platform_device *pdev)
1891 1916
1892 device_remove_file(&pdev->dev, &dev_attr_role); 1917 device_remove_file(&pdev->dev, &dev_attr_role);
1893 1918
1894 pm_runtime_put(&pdev->dev);
1895 pm_runtime_disable(&pdev->dev);
1896
1897 usb_del_gadget_udc(&usb3->gadget); 1919 usb_del_gadget_udc(&usb3->gadget);
1898 1920
1899 __renesas_usb3_ep_free_request(usb3->ep0_req); 1921 __renesas_usb3_ep_free_request(usb3->ep0_req);
@@ -2099,9 +2121,6 @@ static int renesas_usb3_probe(struct platform_device *pdev)
2099 2121
2100 usb3->workaround_for_vbus = priv->workaround_for_vbus; 2122 usb3->workaround_for_vbus = priv->workaround_for_vbus;
2101 2123
2102 pm_runtime_enable(&pdev->dev);
2103 pm_runtime_get_sync(&pdev->dev);
2104
2105 dev_info(&pdev->dev, "probed\n"); 2124 dev_info(&pdev->dev, "probed\n");
2106 2125
2107 return 0; 2126 return 0;
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index 1f1687e888d6..fddf2731f798 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -2119,11 +2119,12 @@ static void xhci_add_in_port(struct xhci_hcd *xhci, unsigned int num_ports,
2119{ 2119{
2120 u32 temp, port_offset, port_count; 2120 u32 temp, port_offset, port_count;
2121 int i; 2121 int i;
2122 u8 major_revision; 2122 u8 major_revision, minor_revision;
2123 struct xhci_hub *rhub; 2123 struct xhci_hub *rhub;
2124 2124
2125 temp = readl(addr); 2125 temp = readl(addr);
2126 major_revision = XHCI_EXT_PORT_MAJOR(temp); 2126 major_revision = XHCI_EXT_PORT_MAJOR(temp);
2127 minor_revision = XHCI_EXT_PORT_MINOR(temp);
2127 2128
2128 if (major_revision == 0x03) { 2129 if (major_revision == 0x03) {
2129 rhub = &xhci->usb3_rhub; 2130 rhub = &xhci->usb3_rhub;
@@ -2137,7 +2138,9 @@ static void xhci_add_in_port(struct xhci_hcd *xhci, unsigned int num_ports,
2137 return; 2138 return;
2138 } 2139 }
2139 rhub->maj_rev = XHCI_EXT_PORT_MAJOR(temp); 2140 rhub->maj_rev = XHCI_EXT_PORT_MAJOR(temp);
2140 rhub->min_rev = XHCI_EXT_PORT_MINOR(temp); 2141
2142 if (rhub->min_rev < minor_revision)
2143 rhub->min_rev = minor_revision;
2141 2144
2142 /* Port offset and count in the third dword, see section 7.2 */ 2145 /* Port offset and count in the third dword, see section 7.2 */
2143 temp = readl(addr + 2); 2146 temp = readl(addr + 2);
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index fcf1f3f63e7a..1bcf971141c0 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -201,6 +201,9 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
201 if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA && 201 if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
202 pdev->device == 0x1042) 202 pdev->device == 0x1042)
203 xhci->quirks |= XHCI_BROKEN_STREAMS; 203 xhci->quirks |= XHCI_BROKEN_STREAMS;
204 if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
205 pdev->device == 0x1142)
206 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
204 207
205 if (pdev->vendor == PCI_VENDOR_ID_TI && pdev->device == 0x8241) 208 if (pdev->vendor == PCI_VENDOR_ID_TI && pdev->device == 0x8241)
206 xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_7; 209 xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_7;
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 9c7ee26ef388..bc6a9be2ccc5 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -245,6 +245,11 @@ static int dsps_check_status(struct musb *musb, void *unused)
245 dsps_mod_timer_optional(glue); 245 dsps_mod_timer_optional(glue);
246 break; 246 break;
247 case OTG_STATE_A_WAIT_BCON: 247 case OTG_STATE_A_WAIT_BCON:
248 /* keep VBUS on for host-only mode */
249 if (musb->port_mode == MUSB_PORT_MODE_HOST) {
250 dsps_mod_timer_optional(glue);
251 break;
252 }
248 musb_writeb(musb->mregs, MUSB_DEVCTL, 0); 253 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
249 skip_session = 1; 254 skip_session = 1;
250 /* fall */ 255 /* fall */
diff --git a/drivers/video/fbdev/core/fbmon.c b/drivers/video/fbdev/core/fbmon.c
index 687ebb053438..41d7979d81c5 100644
--- a/drivers/video/fbdev/core/fbmon.c
+++ b/drivers/video/fbdev/core/fbmon.c
@@ -1048,7 +1048,7 @@ void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs)
1048 1048
1049 for (i = 0; i < (128 - edid[2]) / DETAILED_TIMING_DESCRIPTION_SIZE; 1049 for (i = 0; i < (128 - edid[2]) / DETAILED_TIMING_DESCRIPTION_SIZE;
1050 i++, block += DETAILED_TIMING_DESCRIPTION_SIZE) 1050 i++, block += DETAILED_TIMING_DESCRIPTION_SIZE)
1051 if (PIXEL_CLOCK) 1051 if (PIXEL_CLOCK != 0)
1052 edt[num++] = block - edid; 1052 edt[num++] = block - edid;
1053 1053
1054 /* Yikes, EDID data is totally useless */ 1054 /* Yikes, EDID data is totally useless */
diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c
index ec2e7e353685..449fceaf79d5 100644
--- a/drivers/video/fbdev/smscufx.c
+++ b/drivers/video/fbdev/smscufx.c
@@ -1646,8 +1646,9 @@ static int ufx_usb_probe(struct usb_interface *interface,
1646 dev_dbg(dev->gdev, "%s %s - serial #%s\n", 1646 dev_dbg(dev->gdev, "%s %s - serial #%s\n",
1647 usbdev->manufacturer, usbdev->product, usbdev->serial); 1647 usbdev->manufacturer, usbdev->product, usbdev->serial);
1648 dev_dbg(dev->gdev, "vid_%04x&pid_%04x&rev_%04x driver's ufx_data struct at %p\n", 1648 dev_dbg(dev->gdev, "vid_%04x&pid_%04x&rev_%04x driver's ufx_data struct at %p\n",
1649 usbdev->descriptor.idVendor, usbdev->descriptor.idProduct, 1649 le16_to_cpu(usbdev->descriptor.idVendor),
1650 usbdev->descriptor.bcdDevice, dev); 1650 le16_to_cpu(usbdev->descriptor.idProduct),
1651 le16_to_cpu(usbdev->descriptor.bcdDevice), dev);
1651 dev_dbg(dev->gdev, "console enable=%d\n", console); 1652 dev_dbg(dev->gdev, "console enable=%d\n", console);
1652 dev_dbg(dev->gdev, "fb_defio enable=%d\n", fb_defio); 1653 dev_dbg(dev->gdev, "fb_defio enable=%d\n", fb_defio);
1653 1654
diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c
index 6a3c353de7c3..05ef657235df 100644
--- a/drivers/video/fbdev/udlfb.c
+++ b/drivers/video/fbdev/udlfb.c
@@ -1105,8 +1105,8 @@ static int dlfb_ops_blank(int blank_mode, struct fb_info *info)
1105 char *bufptr; 1105 char *bufptr;
1106 struct urb *urb; 1106 struct urb *urb;
1107 1107
1108 pr_info("/dev/fb%d FB_BLANK mode %d --> %d\n", 1108 pr_debug("/dev/fb%d FB_BLANK mode %d --> %d\n",
1109 info->node, dev->blank_mode, blank_mode); 1109 info->node, dev->blank_mode, blank_mode);
1110 1110
1111 if ((dev->blank_mode == FB_BLANK_POWERDOWN) && 1111 if ((dev->blank_mode == FB_BLANK_POWERDOWN) &&
1112 (blank_mode != FB_BLANK_POWERDOWN)) { 1112 (blank_mode != FB_BLANK_POWERDOWN)) {
@@ -1613,8 +1613,9 @@ static int dlfb_usb_probe(struct usb_interface *interface,
1613 pr_info("%s %s - serial #%s\n", 1613 pr_info("%s %s - serial #%s\n",
1614 usbdev->manufacturer, usbdev->product, usbdev->serial); 1614 usbdev->manufacturer, usbdev->product, usbdev->serial);
1615 pr_info("vid_%04x&pid_%04x&rev_%04x driver's dlfb_data struct at %p\n", 1615 pr_info("vid_%04x&pid_%04x&rev_%04x driver's dlfb_data struct at %p\n",
1616 usbdev->descriptor.idVendor, usbdev->descriptor.idProduct, 1616 le16_to_cpu(usbdev->descriptor.idVendor),
1617 usbdev->descriptor.bcdDevice, dev); 1617 le16_to_cpu(usbdev->descriptor.idProduct),
1618 le16_to_cpu(usbdev->descriptor.bcdDevice), dev);
1618 pr_info("console enable=%d\n", console); 1619 pr_info("console enable=%d\n", console);
1619 pr_info("fb_defio enable=%d\n", fb_defio); 1620 pr_info("fb_defio enable=%d\n", fb_defio);
1620 pr_info("shadow enable=%d\n", shadow); 1621 pr_info("shadow enable=%d\n", shadow);
diff --git a/drivers/video/fbdev/via/viafbdev.c b/drivers/video/fbdev/via/viafbdev.c
index f9718f012aae..badee04ef496 100644
--- a/drivers/video/fbdev/via/viafbdev.c
+++ b/drivers/video/fbdev/via/viafbdev.c
@@ -1630,16 +1630,14 @@ static void viafb_init_proc(struct viafb_shared *shared)
1630} 1630}
1631static void viafb_remove_proc(struct viafb_shared *shared) 1631static void viafb_remove_proc(struct viafb_shared *shared)
1632{ 1632{
1633 struct proc_dir_entry *viafb_entry = shared->proc_entry, 1633 struct proc_dir_entry *viafb_entry = shared->proc_entry;
1634 *iga1_entry = shared->iga1_proc_entry,
1635 *iga2_entry = shared->iga2_proc_entry;
1636 1634
1637 if (!viafb_entry) 1635 if (!viafb_entry)
1638 return; 1636 return;
1639 1637
1640 remove_proc_entry("output_devices", iga2_entry); 1638 remove_proc_entry("output_devices", shared->iga2_proc_entry);
1641 remove_proc_entry("iga2", viafb_entry); 1639 remove_proc_entry("iga2", viafb_entry);
1642 remove_proc_entry("output_devices", iga1_entry); 1640 remove_proc_entry("output_devices", shared->iga1_proc_entry);
1643 remove_proc_entry("iga1", viafb_entry); 1641 remove_proc_entry("iga1", viafb_entry);
1644 remove_proc_entry("supported_output_devices", viafb_entry); 1642 remove_proc_entry("supported_output_devices", viafb_entry);
1645 1643
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index 408c174ef0d5..22caf808bfab 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -663,6 +663,12 @@ static int virtballoon_restore(struct virtio_device *vdev)
663} 663}
664#endif 664#endif
665 665
666static int virtballoon_validate(struct virtio_device *vdev)
667{
668 __virtio_clear_bit(vdev, VIRTIO_F_IOMMU_PLATFORM);
669 return 0;
670}
671
666static unsigned int features[] = { 672static unsigned int features[] = {
667 VIRTIO_BALLOON_F_MUST_TELL_HOST, 673 VIRTIO_BALLOON_F_MUST_TELL_HOST,
668 VIRTIO_BALLOON_F_STATS_VQ, 674 VIRTIO_BALLOON_F_STATS_VQ,
@@ -675,6 +681,7 @@ static struct virtio_driver virtio_balloon_driver = {
675 .driver.name = KBUILD_MODNAME, 681 .driver.name = KBUILD_MODNAME,
676 .driver.owner = THIS_MODULE, 682 .driver.owner = THIS_MODULE,
677 .id_table = id_table, 683 .id_table = id_table,
684 .validate = virtballoon_validate,
678 .probe = virtballoon_probe, 685 .probe = virtballoon_probe,
679 .remove = virtballoon_remove, 686 .remove = virtballoon_remove,
680 .config_changed = virtballoon_changed, 687 .config_changed = virtballoon_changed,
diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
index 7a92a5e1d40c..feca75b07fdd 100644
--- a/drivers/xen/privcmd.c
+++ b/drivers/xen/privcmd.c
@@ -362,8 +362,8 @@ static int mmap_batch_fn(void *data, int nr, void *state)
362 st->global_error = 1; 362 st->global_error = 1;
363 } 363 }
364 } 364 }
365 st->va += PAGE_SIZE * nr; 365 st->va += XEN_PAGE_SIZE * nr;
366 st->index += nr; 366 st->index += nr / XEN_PFN_PER_PAGE;
367 367
368 return 0; 368 return 0;
369} 369}
diff --git a/fs/autofs4/dev-ioctl.c b/fs/autofs4/dev-ioctl.c
index 734cbf8d9676..dd9f1bebb5a3 100644
--- a/fs/autofs4/dev-ioctl.c
+++ b/fs/autofs4/dev-ioctl.c
@@ -344,7 +344,7 @@ static int autofs_dev_ioctl_fail(struct file *fp,
344 int status; 344 int status;
345 345
346 token = (autofs_wqt_t) param->fail.token; 346 token = (autofs_wqt_t) param->fail.token;
347 status = param->fail.status ? param->fail.status : -ENOENT; 347 status = param->fail.status < 0 ? param->fail.status : -ENOENT;
348 return autofs4_wait_release(sbi, token, status); 348 return autofs4_wait_release(sbi, token, status);
349} 349}
350 350
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 519599dddd36..0a7404ef9335 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -263,7 +263,10 @@ __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter,
263 kfree(vecs); 263 kfree(vecs);
264 264
265 if (unlikely(bio.bi_error)) 265 if (unlikely(bio.bi_error))
266 return bio.bi_error; 266 ret = bio.bi_error;
267
268 bio_uninit(&bio);
269
267 return ret; 270 return ret;
268} 271}
269 272
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 643c70d2b2e6..4f8f75d9e839 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -2563,7 +2563,7 @@ u64 btrfs_csum_bytes_to_leaves(struct btrfs_fs_info *fs_info, u64 csum_bytes);
2563static inline u64 btrfs_calc_trans_metadata_size(struct btrfs_fs_info *fs_info, 2563static inline u64 btrfs_calc_trans_metadata_size(struct btrfs_fs_info *fs_info,
2564 unsigned num_items) 2564 unsigned num_items)
2565{ 2565{
2566 return fs_info->nodesize * BTRFS_MAX_LEVEL * 2 * num_items; 2566 return (u64)fs_info->nodesize * BTRFS_MAX_LEVEL * 2 * num_items;
2567} 2567}
2568 2568
2569/* 2569/*
@@ -2573,7 +2573,7 @@ static inline u64 btrfs_calc_trans_metadata_size(struct btrfs_fs_info *fs_info,
2573static inline u64 btrfs_calc_trunc_metadata_size(struct btrfs_fs_info *fs_info, 2573static inline u64 btrfs_calc_trunc_metadata_size(struct btrfs_fs_info *fs_info,
2574 unsigned num_items) 2574 unsigned num_items)
2575{ 2575{
2576 return fs_info->nodesize * BTRFS_MAX_LEVEL * num_items; 2576 return (u64)fs_info->nodesize * BTRFS_MAX_LEVEL * num_items;
2577} 2577}
2578 2578
2579int btrfs_should_throttle_delayed_refs(struct btrfs_trans_handle *trans, 2579int btrfs_should_throttle_delayed_refs(struct btrfs_trans_handle *trans,
diff --git a/fs/btrfs/dir-item.c b/fs/btrfs/dir-item.c
index 60a750678a82..c24d615e3d7f 100644
--- a/fs/btrfs/dir-item.c
+++ b/fs/btrfs/dir-item.c
@@ -468,7 +468,7 @@ int verify_dir_item(struct btrfs_fs_info *fs_info,
468 468
469 if (btrfs_dir_name_len(leaf, dir_item) > namelen) { 469 if (btrfs_dir_name_len(leaf, dir_item) > namelen) {
470 btrfs_crit(fs_info, "invalid dir item name len: %u", 470 btrfs_crit(fs_info, "invalid dir item name len: %u",
471 (unsigned)btrfs_dir_data_len(leaf, dir_item)); 471 (unsigned)btrfs_dir_name_len(leaf, dir_item));
472 return 1; 472 return 1;
473 } 473 }
474 474
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 8685d67185d0..5f678dcb20e6 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -3467,10 +3467,12 @@ static int write_dev_supers(struct btrfs_device *device,
3467 * we fua the first super. The others we allow 3467 * we fua the first super. The others we allow
3468 * to go down lazy. 3468 * to go down lazy.
3469 */ 3469 */
3470 if (i == 0) 3470 if (i == 0) {
3471 ret = btrfsic_submit_bh(REQ_OP_WRITE, REQ_FUA, bh); 3471 ret = btrfsic_submit_bh(REQ_OP_WRITE,
3472 else 3472 REQ_SYNC | REQ_FUA, bh);
3473 } else {
3473 ret = btrfsic_submit_bh(REQ_OP_WRITE, REQ_SYNC, bh); 3474 ret = btrfsic_submit_bh(REQ_OP_WRITE, REQ_SYNC, bh);
3475 }
3474 if (ret) 3476 if (ret)
3475 errors++; 3477 errors++;
3476 } 3478 }
@@ -3535,7 +3537,7 @@ static int write_dev_flush(struct btrfs_device *device, int wait)
3535 3537
3536 bio->bi_end_io = btrfs_end_empty_barrier; 3538 bio->bi_end_io = btrfs_end_empty_barrier;
3537 bio->bi_bdev = device->bdev; 3539 bio->bi_bdev = device->bdev;
3538 bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH; 3540 bio->bi_opf = REQ_OP_WRITE | REQ_SYNC | REQ_PREFLUSH;
3539 init_completion(&device->flush_wait); 3541 init_completion(&device->flush_wait);
3540 bio->bi_private = &device->flush_wait; 3542 bio->bi_private = &device->flush_wait;
3541 device->flush_bio = bio; 3543 device->flush_bio = bio;
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index e390451c72e6..33d979e9ea2a 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -3993,6 +3993,7 @@ static int update_space_info(struct btrfs_fs_info *info, u64 flags,
3993 info->space_info_kobj, "%s", 3993 info->space_info_kobj, "%s",
3994 alloc_name(found->flags)); 3994 alloc_name(found->flags));
3995 if (ret) { 3995 if (ret) {
3996 percpu_counter_destroy(&found->total_bytes_pinned);
3996 kfree(found); 3997 kfree(found);
3997 return ret; 3998 return ret;
3998 } 3999 }
@@ -4844,7 +4845,7 @@ static int may_commit_transaction(struct btrfs_fs_info *fs_info,
4844 spin_unlock(&delayed_rsv->lock); 4845 spin_unlock(&delayed_rsv->lock);
4845 4846
4846commit: 4847commit:
4847 trans = btrfs_join_transaction(fs_info->fs_root); 4848 trans = btrfs_join_transaction(fs_info->extent_root);
4848 if (IS_ERR(trans)) 4849 if (IS_ERR(trans))
4849 return -ENOSPC; 4850 return -ENOSPC;
4850 4851
@@ -4862,7 +4863,7 @@ static int flush_space(struct btrfs_fs_info *fs_info,
4862 struct btrfs_space_info *space_info, u64 num_bytes, 4863 struct btrfs_space_info *space_info, u64 num_bytes,
4863 u64 orig_bytes, int state) 4864 u64 orig_bytes, int state)
4864{ 4865{
4865 struct btrfs_root *root = fs_info->fs_root; 4866 struct btrfs_root *root = fs_info->extent_root;
4866 struct btrfs_trans_handle *trans; 4867 struct btrfs_trans_handle *trans;
4867 int nr; 4868 int nr;
4868 int ret = 0; 4869 int ret = 0;
@@ -5062,7 +5063,7 @@ static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info,
5062 int flush_state = FLUSH_DELAYED_ITEMS_NR; 5063 int flush_state = FLUSH_DELAYED_ITEMS_NR;
5063 5064
5064 spin_lock(&space_info->lock); 5065 spin_lock(&space_info->lock);
5065 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info->fs_root, 5066 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info->extent_root,
5066 space_info); 5067 space_info);
5067 if (!to_reclaim) { 5068 if (!to_reclaim) {
5068 spin_unlock(&space_info->lock); 5069 spin_unlock(&space_info->lock);
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index d8da3edf2ac3..d3619e010005 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -2458,7 +2458,7 @@ void end_extent_writepage(struct page *page, int err, u64 start, u64 end)
2458 if (!uptodate) { 2458 if (!uptodate) {
2459 ClearPageUptodate(page); 2459 ClearPageUptodate(page);
2460 SetPageError(page); 2460 SetPageError(page);
2461 ret = ret < 0 ? ret : -EIO; 2461 ret = err < 0 ? err : -EIO;
2462 mapping_set_error(page->mapping, ret); 2462 mapping_set_error(page->mapping, ret);
2463 } 2463 }
2464} 2464}
@@ -4377,6 +4377,123 @@ static struct extent_map *get_extent_skip_holes(struct inode *inode,
4377 return NULL; 4377 return NULL;
4378} 4378}
4379 4379
4380/*
4381 * To cache previous fiemap extent
4382 *
4383 * Will be used for merging fiemap extent
4384 */
4385struct fiemap_cache {
4386 u64 offset;
4387 u64 phys;
4388 u64 len;
4389 u32 flags;
4390 bool cached;
4391};
4392
4393/*
4394 * Helper to submit fiemap extent.
4395 *
4396 * Will try to merge current fiemap extent specified by @offset, @phys,
4397 * @len and @flags with cached one.
4398 * And only when we fails to merge, cached one will be submitted as
4399 * fiemap extent.
4400 *
4401 * Return value is the same as fiemap_fill_next_extent().
4402 */
4403static int emit_fiemap_extent(struct fiemap_extent_info *fieinfo,
4404 struct fiemap_cache *cache,
4405 u64 offset, u64 phys, u64 len, u32 flags)
4406{
4407 int ret = 0;
4408
4409 if (!cache->cached)
4410 goto assign;
4411
4412 /*
4413 * Sanity check, extent_fiemap() should have ensured that new
4414 * fiemap extent won't overlap with cahced one.
4415 * Not recoverable.
4416 *
4417 * NOTE: Physical address can overlap, due to compression
4418 */
4419 if (cache->offset + cache->len > offset) {
4420 WARN_ON(1);
4421 return -EINVAL;
4422 }
4423
4424 /*
4425 * Only merges fiemap extents if
4426 * 1) Their logical addresses are continuous
4427 *
4428 * 2) Their physical addresses are continuous
4429 * So truly compressed (physical size smaller than logical size)
4430 * extents won't get merged with each other
4431 *
4432 * 3) Share same flags except FIEMAP_EXTENT_LAST
4433 * So regular extent won't get merged with prealloc extent
4434 */
4435 if (cache->offset + cache->len == offset &&
4436 cache->phys + cache->len == phys &&
4437 (cache->flags & ~FIEMAP_EXTENT_LAST) ==
4438 (flags & ~FIEMAP_EXTENT_LAST)) {
4439 cache->len += len;
4440 cache->flags |= flags;
4441 goto try_submit_last;
4442 }
4443
4444 /* Not mergeable, need to submit cached one */
4445 ret = fiemap_fill_next_extent(fieinfo, cache->offset, cache->phys,
4446 cache->len, cache->flags);
4447 cache->cached = false;
4448 if (ret)
4449 return ret;
4450assign:
4451 cache->cached = true;
4452 cache->offset = offset;
4453 cache->phys = phys;
4454 cache->len = len;
4455 cache->flags = flags;
4456try_submit_last:
4457 if (cache->flags & FIEMAP_EXTENT_LAST) {
4458 ret = fiemap_fill_next_extent(fieinfo, cache->offset,
4459 cache->phys, cache->len, cache->flags);
4460 cache->cached = false;
4461 }
4462 return ret;
4463}
4464
4465/*
4466 * Sanity check for fiemap cache
4467 *
4468 * All fiemap cache should be submitted by emit_fiemap_extent()
4469 * Iteration should be terminated either by last fiemap extent or
4470 * fieinfo->fi_extents_max.
4471 * So no cached fiemap should exist.
4472 */
4473static int check_fiemap_cache(struct btrfs_fs_info *fs_info,
4474 struct fiemap_extent_info *fieinfo,
4475 struct fiemap_cache *cache)
4476{
4477 int ret;
4478
4479 if (!cache->cached)
4480 return 0;
4481
4482 /* Small and recoverbale problem, only to info developer */
4483#ifdef CONFIG_BTRFS_DEBUG
4484 WARN_ON(1);
4485#endif
4486 btrfs_warn(fs_info,
4487 "unhandled fiemap cache detected: offset=%llu phys=%llu len=%llu flags=0x%x",
4488 cache->offset, cache->phys, cache->len, cache->flags);
4489 ret = fiemap_fill_next_extent(fieinfo, cache->offset, cache->phys,
4490 cache->len, cache->flags);
4491 cache->cached = false;
4492 if (ret > 0)
4493 ret = 0;
4494 return ret;
4495}
4496
4380int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, 4497int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
4381 __u64 start, __u64 len, get_extent_t *get_extent) 4498 __u64 start, __u64 len, get_extent_t *get_extent)
4382{ 4499{
@@ -4394,6 +4511,7 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
4394 struct extent_state *cached_state = NULL; 4511 struct extent_state *cached_state = NULL;
4395 struct btrfs_path *path; 4512 struct btrfs_path *path;
4396 struct btrfs_root *root = BTRFS_I(inode)->root; 4513 struct btrfs_root *root = BTRFS_I(inode)->root;
4514 struct fiemap_cache cache = { 0 };
4397 int end = 0; 4515 int end = 0;
4398 u64 em_start = 0; 4516 u64 em_start = 0;
4399 u64 em_len = 0; 4517 u64 em_len = 0;
@@ -4573,8 +4691,8 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
4573 flags |= FIEMAP_EXTENT_LAST; 4691 flags |= FIEMAP_EXTENT_LAST;
4574 end = 1; 4692 end = 1;
4575 } 4693 }
4576 ret = fiemap_fill_next_extent(fieinfo, em_start, disko, 4694 ret = emit_fiemap_extent(fieinfo, &cache, em_start, disko,
4577 em_len, flags); 4695 em_len, flags);
4578 if (ret) { 4696 if (ret) {
4579 if (ret == 1) 4697 if (ret == 1)
4580 ret = 0; 4698 ret = 0;
@@ -4582,6 +4700,8 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
4582 } 4700 }
4583 } 4701 }
4584out_free: 4702out_free:
4703 if (!ret)
4704 ret = check_fiemap_cache(root->fs_info, fieinfo, &cache);
4585 free_extent_map(em); 4705 free_extent_map(em);
4586out: 4706out:
4587 btrfs_free_path(path); 4707 btrfs_free_path(path);
diff --git a/fs/btrfs/hash.c b/fs/btrfs/hash.c
index a97fdc156a03..baacc1866861 100644
--- a/fs/btrfs/hash.c
+++ b/fs/btrfs/hash.c
@@ -38,6 +38,7 @@ u32 btrfs_crc32c(u32 crc, const void *address, unsigned int length)
38{ 38{
39 SHASH_DESC_ON_STACK(shash, tfm); 39 SHASH_DESC_ON_STACK(shash, tfm);
40 u32 *ctx = (u32 *)shash_desc_ctx(shash); 40 u32 *ctx = (u32 *)shash_desc_ctx(shash);
41 u32 retval;
41 int err; 42 int err;
42 43
43 shash->tfm = tfm; 44 shash->tfm = tfm;
@@ -47,5 +48,7 @@ u32 btrfs_crc32c(u32 crc, const void *address, unsigned int length)
47 err = crypto_shash_update(shash, address, length); 48 err = crypto_shash_update(shash, address, length);
48 BUG_ON(err); 49 BUG_ON(err);
49 50
50 return *ctx; 51 retval = *ctx;
52 barrier_data(ctx);
53 return retval;
51} 54}
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 17cbe9306faf..ef3c98c527c1 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -2952,7 +2952,7 @@ static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent)
2952 2952
2953 ret = test_range_bit(io_tree, ordered_extent->file_offset, 2953 ret = test_range_bit(io_tree, ordered_extent->file_offset,
2954 ordered_extent->file_offset + ordered_extent->len - 1, 2954 ordered_extent->file_offset + ordered_extent->len - 1,
2955 EXTENT_DEFRAG, 1, cached_state); 2955 EXTENT_DEFRAG, 0, cached_state);
2956 if (ret) { 2956 if (ret) {
2957 u64 last_snapshot = btrfs_root_last_snapshot(&root->root_item); 2957 u64 last_snapshot = btrfs_root_last_snapshot(&root->root_item);
2958 if (0 && last_snapshot >= BTRFS_I(inode)->generation) 2958 if (0 && last_snapshot >= BTRFS_I(inode)->generation)
@@ -7483,8 +7483,8 @@ bool btrfs_page_exists_in_range(struct inode *inode, loff_t start, loff_t end)
7483 int found = false; 7483 int found = false;
7484 void **pagep = NULL; 7484 void **pagep = NULL;
7485 struct page *page = NULL; 7485 struct page *page = NULL;
7486 int start_idx; 7486 unsigned long start_idx;
7487 int end_idx; 7487 unsigned long end_idx;
7488 7488
7489 start_idx = start >> PAGE_SHIFT; 7489 start_idx = start >> PAGE_SHIFT;
7490 7490
diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c
index 987044bca1c2..59cb307b15fb 100644
--- a/fs/ceph/acl.c
+++ b/fs/ceph/acl.c
@@ -131,6 +131,7 @@ int ceph_set_acl(struct inode *inode, struct posix_acl *acl, int type)
131 } 131 }
132 132
133 if (new_mode != old_mode) { 133 if (new_mode != old_mode) {
134 newattrs.ia_ctime = current_time(inode);
134 newattrs.ia_mode = new_mode; 135 newattrs.ia_mode = new_mode;
135 newattrs.ia_valid = ATTR_MODE; 136 newattrs.ia_valid = ATTR_MODE;
136 ret = __ceph_setattr(inode, &newattrs); 137 ret = __ceph_setattr(inode, &newattrs);
diff --git a/fs/ceph/export.c b/fs/ceph/export.c
index e8f11fa565c5..7df550c13d7f 100644
--- a/fs/ceph/export.c
+++ b/fs/ceph/export.c
@@ -91,6 +91,10 @@ static struct dentry *__fh_to_dentry(struct super_block *sb, u64 ino)
91 ceph_mdsc_put_request(req); 91 ceph_mdsc_put_request(req);
92 if (!inode) 92 if (!inode)
93 return ERR_PTR(-ESTALE); 93 return ERR_PTR(-ESTALE);
94 if (inode->i_nlink == 0) {
95 iput(inode);
96 return ERR_PTR(-ESTALE);
97 }
94 } 98 }
95 99
96 return d_obtain_alias(inode); 100 return d_obtain_alias(inode);
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 3fdde0b283c9..29308a80d66f 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -1671,8 +1671,12 @@ static long ceph_fallocate(struct file *file, int mode,
1671 } 1671 }
1672 1672
1673 size = i_size_read(inode); 1673 size = i_size_read(inode);
1674 if (!(mode & FALLOC_FL_KEEP_SIZE)) 1674 if (!(mode & FALLOC_FL_KEEP_SIZE)) {
1675 endoff = offset + length; 1675 endoff = offset + length;
1676 ret = inode_newsize_ok(inode, endoff);
1677 if (ret)
1678 goto unlock;
1679 }
1676 1680
1677 if (fi->fmode & CEPH_FILE_MODE_LAZY) 1681 if (fi->fmode & CEPH_FILE_MODE_LAZY)
1678 want = CEPH_CAP_FILE_BUFFER | CEPH_CAP_FILE_LAZYIO; 1682 want = CEPH_CAP_FILE_BUFFER | CEPH_CAP_FILE_LAZYIO;
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index dcce79b84406..4de6cdddf059 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -2022,7 +2022,6 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr)
2022 attr->ia_size > inode->i_size) { 2022 attr->ia_size > inode->i_size) {
2023 i_size_write(inode, attr->ia_size); 2023 i_size_write(inode, attr->ia_size);
2024 inode->i_blocks = calc_inode_blocks(attr->ia_size); 2024 inode->i_blocks = calc_inode_blocks(attr->ia_size);
2025 inode->i_ctime = attr->ia_ctime;
2026 ci->i_reported_size = attr->ia_size; 2025 ci->i_reported_size = attr->ia_size;
2027 dirtied |= CEPH_CAP_FILE_EXCL; 2026 dirtied |= CEPH_CAP_FILE_EXCL;
2028 } else if ((issued & CEPH_CAP_FILE_SHARED) == 0 || 2027 } else if ((issued & CEPH_CAP_FILE_SHARED) == 0 ||
@@ -2044,7 +2043,6 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr)
2044 inode->i_ctime.tv_sec, inode->i_ctime.tv_nsec, 2043 inode->i_ctime.tv_sec, inode->i_ctime.tv_nsec,
2045 attr->ia_ctime.tv_sec, attr->ia_ctime.tv_nsec, 2044 attr->ia_ctime.tv_sec, attr->ia_ctime.tv_nsec,
2046 only ? "ctime only" : "ignored"); 2045 only ? "ctime only" : "ignored");
2047 inode->i_ctime = attr->ia_ctime;
2048 if (only) { 2046 if (only) {
2049 /* 2047 /*
2050 * if kernel wants to dirty ctime but nothing else, 2048 * if kernel wants to dirty ctime but nothing else,
@@ -2067,7 +2065,7 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr)
2067 if (dirtied) { 2065 if (dirtied) {
2068 inode_dirty_flags = __ceph_mark_dirty_caps(ci, dirtied, 2066 inode_dirty_flags = __ceph_mark_dirty_caps(ci, dirtied,
2069 &prealloc_cf); 2067 &prealloc_cf);
2070 inode->i_ctime = current_time(inode); 2068 inode->i_ctime = attr->ia_ctime;
2071 } 2069 }
2072 2070
2073 release &= issued; 2071 release &= issued;
@@ -2085,6 +2083,7 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr)
2085 req->r_inode_drop = release; 2083 req->r_inode_drop = release;
2086 req->r_args.setattr.mask = cpu_to_le32(mask); 2084 req->r_args.setattr.mask = cpu_to_le32(mask);
2087 req->r_num_caps = 1; 2085 req->r_num_caps = 1;
2086 req->r_stamp = attr->ia_ctime;
2088 err = ceph_mdsc_do_request(mdsc, NULL, req); 2087 err = ceph_mdsc_do_request(mdsc, NULL, req);
2089 } 2088 }
2090 dout("setattr %p result=%d (%s locally, %d remote)\n", inode, err, 2089 dout("setattr %p result=%d (%s locally, %d remote)\n", inode, err,
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index f38e56fa9712..0c05df44cc6c 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -1687,7 +1687,6 @@ struct ceph_mds_request *
1687ceph_mdsc_create_request(struct ceph_mds_client *mdsc, int op, int mode) 1687ceph_mdsc_create_request(struct ceph_mds_client *mdsc, int op, int mode)
1688{ 1688{
1689 struct ceph_mds_request *req = kzalloc(sizeof(*req), GFP_NOFS); 1689 struct ceph_mds_request *req = kzalloc(sizeof(*req), GFP_NOFS);
1690 struct timespec ts;
1691 1690
1692 if (!req) 1691 if (!req)
1693 return ERR_PTR(-ENOMEM); 1692 return ERR_PTR(-ENOMEM);
@@ -1706,8 +1705,7 @@ ceph_mdsc_create_request(struct ceph_mds_client *mdsc, int op, int mode)
1706 init_completion(&req->r_safe_completion); 1705 init_completion(&req->r_safe_completion);
1707 INIT_LIST_HEAD(&req->r_unsafe_item); 1706 INIT_LIST_HEAD(&req->r_unsafe_item);
1708 1707
1709 ktime_get_real_ts(&ts); 1708 req->r_stamp = timespec_trunc(current_kernel_time(), mdsc->fsc->sb->s_time_gran);
1710 req->r_stamp = timespec_trunc(ts, mdsc->fsc->sb->s_time_gran);
1711 1709
1712 req->r_op = op; 1710 req->r_op = op;
1713 req->r_direct_mode = mode; 1711 req->r_direct_mode = mode;
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 0fd081bd2a2f..fcef70602b27 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -3271,7 +3271,7 @@ ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to)
3271 if (!is_sync_kiocb(iocb)) 3271 if (!is_sync_kiocb(iocb))
3272 ctx->iocb = iocb; 3272 ctx->iocb = iocb;
3273 3273
3274 if (to->type & ITER_IOVEC) 3274 if (to->type == ITER_IOVEC)
3275 ctx->should_dirty = true; 3275 ctx->should_dirty = true;
3276 3276
3277 rc = setup_aio_ctx_iter(ctx, to, READ); 3277 rc = setup_aio_ctx_iter(ctx, to, READ);
diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
index b08531977daa..3b147dc6af63 100644
--- a/fs/cifs/misc.c
+++ b/fs/cifs/misc.c
@@ -810,7 +810,7 @@ setup_aio_ctx_iter(struct cifs_aio_ctx *ctx, struct iov_iter *iter, int rw)
810 810
811 if (!pages) { 811 if (!pages) {
812 pages = vmalloc(max_pages * sizeof(struct page *)); 812 pages = vmalloc(max_pages * sizeof(struct page *));
813 if (!bv) { 813 if (!pages) {
814 kvfree(bv); 814 kvfree(bv);
815 return -ENOMEM; 815 return -ENOMEM;
816 } 816 }
diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
index 27bc360c7ffd..a723df3e0197 100644
--- a/fs/cifs/smb1ops.c
+++ b/fs/cifs/smb1ops.c
@@ -849,8 +849,13 @@ cifs_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon,
849 struct cifs_fid *fid, __u16 search_flags, 849 struct cifs_fid *fid, __u16 search_flags,
850 struct cifs_search_info *srch_inf) 850 struct cifs_search_info *srch_inf)
851{ 851{
852 return CIFSFindFirst(xid, tcon, path, cifs_sb, 852 int rc;
853 &fid->netfid, search_flags, srch_inf, true); 853
854 rc = CIFSFindFirst(xid, tcon, path, cifs_sb,
855 &fid->netfid, search_flags, srch_inf, true);
856 if (rc)
857 cifs_dbg(FYI, "find first failed=%d\n", rc);
858 return rc;
854} 859}
855 860
856static int 861static int
diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
index c58691834eb2..7e48561abd29 100644
--- a/fs/cifs/smb2ops.c
+++ b/fs/cifs/smb2ops.c
@@ -982,7 +982,7 @@ smb2_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon,
982 rc = SMB2_open(xid, &oparms, utf16_path, &oplock, NULL, NULL); 982 rc = SMB2_open(xid, &oparms, utf16_path, &oplock, NULL, NULL);
983 kfree(utf16_path); 983 kfree(utf16_path);
984 if (rc) { 984 if (rc) {
985 cifs_dbg(VFS, "open dir failed\n"); 985 cifs_dbg(FYI, "open dir failed rc=%d\n", rc);
986 return rc; 986 return rc;
987 } 987 }
988 988
@@ -992,7 +992,7 @@ smb2_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon,
992 rc = SMB2_query_directory(xid, tcon, fid->persistent_fid, 992 rc = SMB2_query_directory(xid, tcon, fid->persistent_fid,
993 fid->volatile_fid, 0, srch_inf); 993 fid->volatile_fid, 0, srch_inf);
994 if (rc) { 994 if (rc) {
995 cifs_dbg(VFS, "query directory failed\n"); 995 cifs_dbg(FYI, "query directory failed rc=%d\n", rc);
996 SMB2_close(xid, tcon, fid->persistent_fid, fid->volatile_fid); 996 SMB2_close(xid, tcon, fid->persistent_fid, fid->volatile_fid);
997 } 997 }
998 return rc; 998 return rc;
@@ -1809,7 +1809,8 @@ crypt_message(struct TCP_Server_Info *server, struct smb_rqst *rqst, int enc)
1809 1809
1810 sg = init_sg(rqst, sign); 1810 sg = init_sg(rqst, sign);
1811 if (!sg) { 1811 if (!sg) {
1812 cifs_dbg(VFS, "%s: Failed to init sg %d", __func__, rc); 1812 cifs_dbg(VFS, "%s: Failed to init sg", __func__);
1813 rc = -ENOMEM;
1813 goto free_req; 1814 goto free_req;
1814 } 1815 }
1815 1816
@@ -1817,6 +1818,7 @@ crypt_message(struct TCP_Server_Info *server, struct smb_rqst *rqst, int enc)
1817 iv = kzalloc(iv_len, GFP_KERNEL); 1818 iv = kzalloc(iv_len, GFP_KERNEL);
1818 if (!iv) { 1819 if (!iv) {
1819 cifs_dbg(VFS, "%s: Failed to alloc IV", __func__); 1820 cifs_dbg(VFS, "%s: Failed to alloc IV", __func__);
1821 rc = -ENOMEM;
1820 goto free_sg; 1822 goto free_sg;
1821 } 1823 }
1822 iv[0] = 3; 1824 iv[0] = 3;
diff --git a/fs/cifs/xattr.c b/fs/cifs/xattr.c
index 3cb5c9e2d4e7..de50e749ff05 100644
--- a/fs/cifs/xattr.c
+++ b/fs/cifs/xattr.c
@@ -188,8 +188,6 @@ static int cifs_creation_time_get(struct dentry *dentry, struct inode *inode,
188 pcreatetime = (__u64 *)value; 188 pcreatetime = (__u64 *)value;
189 *pcreatetime = CIFS_I(inode)->createtime; 189 *pcreatetime = CIFS_I(inode)->createtime;
190 return sizeof(__u64); 190 return sizeof(__u64);
191
192 return rc;
193} 191}
194 192
195 193
diff --git a/fs/configfs/item.c b/fs/configfs/item.c
index 8b2a994042dd..a66f6624d899 100644
--- a/fs/configfs/item.c
+++ b/fs/configfs/item.c
@@ -138,6 +138,14 @@ struct config_item *config_item_get(struct config_item *item)
138} 138}
139EXPORT_SYMBOL(config_item_get); 139EXPORT_SYMBOL(config_item_get);
140 140
141struct config_item *config_item_get_unless_zero(struct config_item *item)
142{
143 if (item && kref_get_unless_zero(&item->ci_kref))
144 return item;
145 return NULL;
146}
147EXPORT_SYMBOL(config_item_get_unless_zero);
148
141static void config_item_cleanup(struct config_item *item) 149static void config_item_cleanup(struct config_item *item)
142{ 150{
143 struct config_item_type *t = item->ci_type; 151 struct config_item_type *t = item->ci_type;
diff --git a/fs/configfs/symlink.c b/fs/configfs/symlink.c
index a6ab012a2c6a..c8aabba502f6 100644
--- a/fs/configfs/symlink.c
+++ b/fs/configfs/symlink.c
@@ -83,14 +83,13 @@ static int create_link(struct config_item *parent_item,
83 ret = -ENOMEM; 83 ret = -ENOMEM;
84 sl = kmalloc(sizeof(struct configfs_symlink), GFP_KERNEL); 84 sl = kmalloc(sizeof(struct configfs_symlink), GFP_KERNEL);
85 if (sl) { 85 if (sl) {
86 sl->sl_target = config_item_get(item);
87 spin_lock(&configfs_dirent_lock); 86 spin_lock(&configfs_dirent_lock);
88 if (target_sd->s_type & CONFIGFS_USET_DROPPING) { 87 if (target_sd->s_type & CONFIGFS_USET_DROPPING) {
89 spin_unlock(&configfs_dirent_lock); 88 spin_unlock(&configfs_dirent_lock);
90 config_item_put(item);
91 kfree(sl); 89 kfree(sl);
92 return -ENOENT; 90 return -ENOENT;
93 } 91 }
92 sl->sl_target = config_item_get(item);
94 list_add(&sl->sl_list, &target_sd->s_links); 93 list_add(&sl->sl_list, &target_sd->s_links);
95 spin_unlock(&configfs_dirent_lock); 94 spin_unlock(&configfs_dirent_lock);
96 ret = configfs_create_link(sl, parent_item->ci_dentry, 95 ret = configfs_create_link(sl, parent_item->ci_dentry,
diff --git a/fs/dax.c b/fs/dax.c
index c22eaf162f95..9187f3b07f3e 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -859,6 +859,7 @@ int dax_writeback_mapping_range(struct address_space *mapping,
859 if (ret < 0) 859 if (ret < 0)
860 goto out; 860 goto out;
861 } 861 }
862 start_index = indices[pvec.nr - 1] + 1;
862 } 863 }
863out: 864out:
864 put_dax(dax_dev); 865 put_dax(dax_dev);
@@ -1155,6 +1156,17 @@ static int dax_iomap_pte_fault(struct vm_fault *vmf,
1155 } 1156 }
1156 1157
1157 /* 1158 /*
1159 * It is possible, particularly with mixed reads & writes to private
1160 * mappings, that we have raced with a PMD fault that overlaps with
1161 * the PTE we need to set up. If so just return and the fault will be
1162 * retried.
1163 */
1164 if (pmd_trans_huge(*vmf->pmd) || pmd_devmap(*vmf->pmd)) {
1165 vmf_ret = VM_FAULT_NOPAGE;
1166 goto unlock_entry;
1167 }
1168
1169 /*
1158 * Note that we don't bother to use iomap_apply here: DAX required 1170 * Note that we don't bother to use iomap_apply here: DAX required
1159 * the file system block size to be equal the page size, which means 1171 * the file system block size to be equal the page size, which means
1160 * that we never have to deal with more than a single extent here. 1172 * that we never have to deal with more than a single extent here.
@@ -1398,6 +1410,18 @@ static int dax_iomap_pmd_fault(struct vm_fault *vmf,
1398 goto fallback; 1410 goto fallback;
1399 1411
1400 /* 1412 /*
1413 * It is possible, particularly with mixed reads & writes to private
1414 * mappings, that we have raced with a PTE fault that overlaps with
1415 * the PMD we need to set up. If so just return and the fault will be
1416 * retried.
1417 */
1418 if (!pmd_none(*vmf->pmd) && !pmd_trans_huge(*vmf->pmd) &&
1419 !pmd_devmap(*vmf->pmd)) {
1420 result = 0;
1421 goto unlock_entry;
1422 }
1423
1424 /*
1401 * Note that we don't use iomap_apply here. We aren't doing I/O, only 1425 * Note that we don't use iomap_apply here. We aren't doing I/O, only
1402 * setting up a mapping, so really we're using iomap_begin() as a way 1426 * setting up a mapping, so really we're using iomap_begin() as a way
1403 * to look up our filesystem block. 1427 * to look up our filesystem block.
diff --git a/fs/dcache.c b/fs/dcache.c
index cddf39777835..a9f995f6859e 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1494,7 +1494,7 @@ static void check_and_drop(void *_data)
1494{ 1494{
1495 struct detach_data *data = _data; 1495 struct detach_data *data = _data;
1496 1496
1497 if (!data->mountpoint && !data->select.found) 1497 if (!data->mountpoint && list_empty(&data->select.dispose))
1498 __d_drop(data->select.start); 1498 __d_drop(data->select.start);
1499} 1499}
1500 1500
@@ -1536,17 +1536,15 @@ void d_invalidate(struct dentry *dentry)
1536 1536
1537 d_walk(dentry, &data, detach_and_collect, check_and_drop); 1537 d_walk(dentry, &data, detach_and_collect, check_and_drop);
1538 1538
1539 if (data.select.found) 1539 if (!list_empty(&data.select.dispose))
1540 shrink_dentry_list(&data.select.dispose); 1540 shrink_dentry_list(&data.select.dispose);
1541 else if (!data.mountpoint)
1542 return;
1541 1543
1542 if (data.mountpoint) { 1544 if (data.mountpoint) {
1543 detach_mounts(data.mountpoint); 1545 detach_mounts(data.mountpoint);
1544 dput(data.mountpoint); 1546 dput(data.mountpoint);
1545 } 1547 }
1546
1547 if (!data.mountpoint && !data.select.found)
1548 break;
1549
1550 cond_resched(); 1548 cond_resched();
1551 } 1549 }
1552} 1550}
diff --git a/fs/exec.c b/fs/exec.c
index 72934df68471..904199086490 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -220,8 +220,26 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
220 220
221 if (write) { 221 if (write) {
222 unsigned long size = bprm->vma->vm_end - bprm->vma->vm_start; 222 unsigned long size = bprm->vma->vm_end - bprm->vma->vm_start;
223 unsigned long ptr_size;
223 struct rlimit *rlim; 224 struct rlimit *rlim;
224 225
226 /*
227 * Since the stack will hold pointers to the strings, we
228 * must account for them as well.
229 *
230 * The size calculation is the entire vma while each arg page is
231 * built, so each time we get here it's calculating how far it
232 * is currently (rather than each call being just the newly
233 * added size from the arg page). As a result, we need to
234 * always add the entire size of the pointers, so that on the
235 * last call to get_arg_page() we'll actually have the entire
236 * correct size.
237 */
238 ptr_size = (bprm->argc + bprm->envc) * sizeof(void *);
239 if (ptr_size > ULONG_MAX - size)
240 goto fail;
241 size += ptr_size;
242
225 acct_arg_size(bprm, size / PAGE_SIZE); 243 acct_arg_size(bprm, size / PAGE_SIZE);
226 244
227 /* 245 /*
@@ -239,13 +257,15 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
239 * to work from. 257 * to work from.
240 */ 258 */
241 rlim = current->signal->rlim; 259 rlim = current->signal->rlim;
242 if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur) / 4) { 260 if (size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur) / 4)
243 put_page(page); 261 goto fail;
244 return NULL;
245 }
246 } 262 }
247 263
248 return page; 264 return page;
265
266fail:
267 put_page(page);
268 return NULL;
249} 269}
250 270
251static void put_arg_page(struct page *page) 271static void put_arg_page(struct page *page)
diff --git a/fs/ext4/acl.c b/fs/ext4/acl.c
index fd389935ecd1..3ec0e46de95f 100644
--- a/fs/ext4/acl.c
+++ b/fs/ext4/acl.c
@@ -4,6 +4,7 @@
4 * Copyright (C) 2001-2003 Andreas Gruenbacher, <agruen@suse.de> 4 * Copyright (C) 2001-2003 Andreas Gruenbacher, <agruen@suse.de>
5 */ 5 */
6 6
7#include <linux/quotaops.h>
7#include "ext4_jbd2.h" 8#include "ext4_jbd2.h"
8#include "ext4.h" 9#include "ext4.h"
9#include "xattr.h" 10#include "xattr.h"
@@ -232,6 +233,9 @@ ext4_set_acl(struct inode *inode, struct posix_acl *acl, int type)
232 handle_t *handle; 233 handle_t *handle;
233 int error, retries = 0; 234 int error, retries = 0;
234 235
236 error = dquot_initialize(inode);
237 if (error)
238 return error;
235retry: 239retry:
236 handle = ext4_journal_start(inode, EXT4_HT_XATTR, 240 handle = ext4_journal_start(inode, EXT4_HT_XATTR,
237 ext4_jbd2_credits_xattr(inode)); 241 ext4_jbd2_credits_xattr(inode));
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 8e8046104f4d..32191548abed 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -2523,7 +2523,6 @@ extern int ext4_search_dir(struct buffer_head *bh,
2523 int buf_size, 2523 int buf_size,
2524 struct inode *dir, 2524 struct inode *dir,
2525 struct ext4_filename *fname, 2525 struct ext4_filename *fname,
2526 const struct qstr *d_name,
2527 unsigned int offset, 2526 unsigned int offset,
2528 struct ext4_dir_entry_2 **res_dir); 2527 struct ext4_dir_entry_2 **res_dir);
2529extern int ext4_generic_delete_entry(handle_t *handle, 2528extern int ext4_generic_delete_entry(handle_t *handle,
@@ -3007,7 +3006,6 @@ extern int htree_inlinedir_to_tree(struct file *dir_file,
3007 int *has_inline_data); 3006 int *has_inline_data);
3008extern struct buffer_head *ext4_find_inline_entry(struct inode *dir, 3007extern struct buffer_head *ext4_find_inline_entry(struct inode *dir,
3009 struct ext4_filename *fname, 3008 struct ext4_filename *fname,
3010 const struct qstr *d_name,
3011 struct ext4_dir_entry_2 **res_dir, 3009 struct ext4_dir_entry_2 **res_dir,
3012 int *has_inline_data); 3010 int *has_inline_data);
3013extern int ext4_delete_inline_entry(handle_t *handle, 3011extern int ext4_delete_inline_entry(handle_t *handle,
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 2a97dff87b96..3e36508610b7 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -3413,13 +3413,13 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
3413 struct ext4_sb_info *sbi; 3413 struct ext4_sb_info *sbi;
3414 struct ext4_extent_header *eh; 3414 struct ext4_extent_header *eh;
3415 struct ext4_map_blocks split_map; 3415 struct ext4_map_blocks split_map;
3416 struct ext4_extent zero_ex; 3416 struct ext4_extent zero_ex1, zero_ex2;
3417 struct ext4_extent *ex, *abut_ex; 3417 struct ext4_extent *ex, *abut_ex;
3418 ext4_lblk_t ee_block, eof_block; 3418 ext4_lblk_t ee_block, eof_block;
3419 unsigned int ee_len, depth, map_len = map->m_len; 3419 unsigned int ee_len, depth, map_len = map->m_len;
3420 int allocated = 0, max_zeroout = 0; 3420 int allocated = 0, max_zeroout = 0;
3421 int err = 0; 3421 int err = 0;
3422 int split_flag = 0; 3422 int split_flag = EXT4_EXT_DATA_VALID2;
3423 3423
3424 ext_debug("ext4_ext_convert_to_initialized: inode %lu, logical" 3424 ext_debug("ext4_ext_convert_to_initialized: inode %lu, logical"
3425 "block %llu, max_blocks %u\n", inode->i_ino, 3425 "block %llu, max_blocks %u\n", inode->i_ino,
@@ -3436,7 +3436,8 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
3436 ex = path[depth].p_ext; 3436 ex = path[depth].p_ext;
3437 ee_block = le32_to_cpu(ex->ee_block); 3437 ee_block = le32_to_cpu(ex->ee_block);
3438 ee_len = ext4_ext_get_actual_len(ex); 3438 ee_len = ext4_ext_get_actual_len(ex);
3439 zero_ex.ee_len = 0; 3439 zero_ex1.ee_len = 0;
3440 zero_ex2.ee_len = 0;
3440 3441
3441 trace_ext4_ext_convert_to_initialized_enter(inode, map, ex); 3442 trace_ext4_ext_convert_to_initialized_enter(inode, map, ex);
3442 3443
@@ -3576,62 +3577,52 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
3576 if (ext4_encrypted_inode(inode)) 3577 if (ext4_encrypted_inode(inode))
3577 max_zeroout = 0; 3578 max_zeroout = 0;
3578 3579
3579 /* If extent is less than s_max_zeroout_kb, zeroout directly */
3580 if (max_zeroout && (ee_len <= max_zeroout)) {
3581 err = ext4_ext_zeroout(inode, ex);
3582 if (err)
3583 goto out;
3584 zero_ex.ee_block = ex->ee_block;
3585 zero_ex.ee_len = cpu_to_le16(ext4_ext_get_actual_len(ex));
3586 ext4_ext_store_pblock(&zero_ex, ext4_ext_pblock(ex));
3587
3588 err = ext4_ext_get_access(handle, inode, path + depth);
3589 if (err)
3590 goto out;
3591 ext4_ext_mark_initialized(ex);
3592 ext4_ext_try_to_merge(handle, inode, path, ex);
3593 err = ext4_ext_dirty(handle, inode, path + path->p_depth);
3594 goto out;
3595 }
3596
3597 /* 3580 /*
3598 * four cases: 3581 * five cases:
3599 * 1. split the extent into three extents. 3582 * 1. split the extent into three extents.
3600 * 2. split the extent into two extents, zeroout the first half. 3583 * 2. split the extent into two extents, zeroout the head of the first
3601 * 3. split the extent into two extents, zeroout the second half. 3584 * extent.
3585 * 3. split the extent into two extents, zeroout the tail of the second
3586 * extent.
3602 * 4. split the extent into two extents with out zeroout. 3587 * 4. split the extent into two extents with out zeroout.
3588 * 5. no splitting needed, just possibly zeroout the head and / or the
3589 * tail of the extent.
3603 */ 3590 */
3604 split_map.m_lblk = map->m_lblk; 3591 split_map.m_lblk = map->m_lblk;
3605 split_map.m_len = map->m_len; 3592 split_map.m_len = map->m_len;
3606 3593
3607 if (max_zeroout && (allocated > map->m_len)) { 3594 if (max_zeroout && (allocated > split_map.m_len)) {
3608 if (allocated <= max_zeroout) { 3595 if (allocated <= max_zeroout) {
3609 /* case 3 */ 3596 /* case 3 or 5 */
3610 zero_ex.ee_block = 3597 zero_ex1.ee_block =
3611 cpu_to_le32(map->m_lblk); 3598 cpu_to_le32(split_map.m_lblk +
3612 zero_ex.ee_len = cpu_to_le16(allocated); 3599 split_map.m_len);
3613 ext4_ext_store_pblock(&zero_ex, 3600 zero_ex1.ee_len =
3614 ext4_ext_pblock(ex) + map->m_lblk - ee_block); 3601 cpu_to_le16(allocated - split_map.m_len);
3615 err = ext4_ext_zeroout(inode, &zero_ex); 3602 ext4_ext_store_pblock(&zero_ex1,
3603 ext4_ext_pblock(ex) + split_map.m_lblk +
3604 split_map.m_len - ee_block);
3605 err = ext4_ext_zeroout(inode, &zero_ex1);
3616 if (err) 3606 if (err)
3617 goto out; 3607 goto out;
3618 split_map.m_lblk = map->m_lblk;
3619 split_map.m_len = allocated; 3608 split_map.m_len = allocated;
3620 } else if (map->m_lblk - ee_block + map->m_len < max_zeroout) { 3609 }
3621 /* case 2 */ 3610 if (split_map.m_lblk - ee_block + split_map.m_len <
3622 if (map->m_lblk != ee_block) { 3611 max_zeroout) {
3623 zero_ex.ee_block = ex->ee_block; 3612 /* case 2 or 5 */
3624 zero_ex.ee_len = cpu_to_le16(map->m_lblk - 3613 if (split_map.m_lblk != ee_block) {
3614 zero_ex2.ee_block = ex->ee_block;
3615 zero_ex2.ee_len = cpu_to_le16(split_map.m_lblk -
3625 ee_block); 3616 ee_block);
3626 ext4_ext_store_pblock(&zero_ex, 3617 ext4_ext_store_pblock(&zero_ex2,
3627 ext4_ext_pblock(ex)); 3618 ext4_ext_pblock(ex));
3628 err = ext4_ext_zeroout(inode, &zero_ex); 3619 err = ext4_ext_zeroout(inode, &zero_ex2);
3629 if (err) 3620 if (err)
3630 goto out; 3621 goto out;
3631 } 3622 }
3632 3623
3624 split_map.m_len += split_map.m_lblk - ee_block;
3633 split_map.m_lblk = ee_block; 3625 split_map.m_lblk = ee_block;
3634 split_map.m_len = map->m_lblk - ee_block + map->m_len;
3635 allocated = map->m_len; 3626 allocated = map->m_len;
3636 } 3627 }
3637 } 3628 }
@@ -3642,8 +3633,11 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
3642 err = 0; 3633 err = 0;
3643out: 3634out:
3644 /* If we have gotten a failure, don't zero out status tree */ 3635 /* If we have gotten a failure, don't zero out status tree */
3645 if (!err) 3636 if (!err) {
3646 err = ext4_zeroout_es(inode, &zero_ex); 3637 err = ext4_zeroout_es(inode, &zero_ex1);
3638 if (!err)
3639 err = ext4_zeroout_es(inode, &zero_ex2);
3640 }
3647 return err ? err : allocated; 3641 return err ? err : allocated;
3648} 3642}
3649 3643
@@ -4883,6 +4877,8 @@ static long ext4_zero_range(struct file *file, loff_t offset,
4883 4877
4884 /* Zero out partial block at the edges of the range */ 4878 /* Zero out partial block at the edges of the range */
4885 ret = ext4_zero_partial_blocks(handle, inode, offset, len); 4879 ret = ext4_zero_partial_blocks(handle, inode, offset, len);
4880 if (ret >= 0)
4881 ext4_update_inode_fsync_trans(handle, inode, 1);
4886 4882
4887 if (file->f_flags & O_SYNC) 4883 if (file->f_flags & O_SYNC)
4888 ext4_handle_sync(handle); 4884 ext4_handle_sync(handle);
@@ -5569,6 +5565,7 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
5569 ext4_handle_sync(handle); 5565 ext4_handle_sync(handle);
5570 inode->i_mtime = inode->i_ctime = current_time(inode); 5566 inode->i_mtime = inode->i_ctime = current_time(inode);
5571 ext4_mark_inode_dirty(handle, inode); 5567 ext4_mark_inode_dirty(handle, inode);
5568 ext4_update_inode_fsync_trans(handle, inode, 1);
5572 5569
5573out_stop: 5570out_stop:
5574 ext4_journal_stop(handle); 5571 ext4_journal_stop(handle);
@@ -5742,6 +5739,8 @@ int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)
5742 up_write(&EXT4_I(inode)->i_data_sem); 5739 up_write(&EXT4_I(inode)->i_data_sem);
5743 if (IS_SYNC(inode)) 5740 if (IS_SYNC(inode))
5744 ext4_handle_sync(handle); 5741 ext4_handle_sync(handle);
5742 if (ret >= 0)
5743 ext4_update_inode_fsync_trans(handle, inode, 1);
5745 5744
5746out_stop: 5745out_stop:
5747 ext4_journal_stop(handle); 5746 ext4_journal_stop(handle);
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index 831fd6beebf0..02ce7e7bbdf5 100644
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -474,57 +474,37 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
474 endoff = (loff_t)end_blk << blkbits; 474 endoff = (loff_t)end_blk << blkbits;
475 475
476 index = startoff >> PAGE_SHIFT; 476 index = startoff >> PAGE_SHIFT;
477 end = endoff >> PAGE_SHIFT; 477 end = (endoff - 1) >> PAGE_SHIFT;
478 478
479 pagevec_init(&pvec, 0); 479 pagevec_init(&pvec, 0);
480 do { 480 do {
481 int i, num; 481 int i, num;
482 unsigned long nr_pages; 482 unsigned long nr_pages;
483 483
484 num = min_t(pgoff_t, end - index, PAGEVEC_SIZE); 484 num = min_t(pgoff_t, end - index, PAGEVEC_SIZE - 1) + 1;
485 nr_pages = pagevec_lookup(&pvec, inode->i_mapping, index, 485 nr_pages = pagevec_lookup(&pvec, inode->i_mapping, index,
486 (pgoff_t)num); 486 (pgoff_t)num);
487 if (nr_pages == 0) { 487 if (nr_pages == 0)
488 if (whence == SEEK_DATA)
489 break;
490
491 BUG_ON(whence != SEEK_HOLE);
492 /*
493 * If this is the first time to go into the loop and
494 * offset is not beyond the end offset, it will be a
495 * hole at this offset
496 */
497 if (lastoff == startoff || lastoff < endoff)
498 found = 1;
499 break;
500 }
501
502 /*
503 * If this is the first time to go into the loop and
504 * offset is smaller than the first page offset, it will be a
505 * hole at this offset.
506 */
507 if (lastoff == startoff && whence == SEEK_HOLE &&
508 lastoff < page_offset(pvec.pages[0])) {
509 found = 1;
510 break; 488 break;
511 }
512 489
513 for (i = 0; i < nr_pages; i++) { 490 for (i = 0; i < nr_pages; i++) {
514 struct page *page = pvec.pages[i]; 491 struct page *page = pvec.pages[i];
515 struct buffer_head *bh, *head; 492 struct buffer_head *bh, *head;
516 493
517 /* 494 /*
518 * If the current offset is not beyond the end of given 495 * If current offset is smaller than the page offset,
519 * range, it will be a hole. 496 * there is a hole at this offset.
520 */ 497 */
521 if (lastoff < endoff && whence == SEEK_HOLE && 498 if (whence == SEEK_HOLE && lastoff < endoff &&
522 page->index > end) { 499 lastoff < page_offset(pvec.pages[i])) {
523 found = 1; 500 found = 1;
524 *offset = lastoff; 501 *offset = lastoff;
525 goto out; 502 goto out;
526 } 503 }
527 504
505 if (page->index > end)
506 goto out;
507
528 lock_page(page); 508 lock_page(page);
529 509
530 if (unlikely(page->mapping != inode->i_mapping)) { 510 if (unlikely(page->mapping != inode->i_mapping)) {
@@ -564,20 +544,18 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
564 unlock_page(page); 544 unlock_page(page);
565 } 545 }
566 546
567 /* 547 /* The no. of pages is less than our desired, we are done. */
568 * The no. of pages is less than our desired, that would be a 548 if (nr_pages < num)
569 * hole in there.
570 */
571 if (nr_pages < num && whence == SEEK_HOLE) {
572 found = 1;
573 *offset = lastoff;
574 break; 549 break;
575 }
576 550
577 index = pvec.pages[i - 1]->index + 1; 551 index = pvec.pages[i - 1]->index + 1;
578 pagevec_release(&pvec); 552 pagevec_release(&pvec);
579 } while (index <= end); 553 } while (index <= end);
580 554
555 if (whence == SEEK_HOLE && lastoff < endoff) {
556 found = 1;
557 *offset = lastoff;
558 }
581out: 559out:
582 pagevec_release(&pvec); 560 pagevec_release(&pvec);
583 return found; 561 return found;
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index d5dea4c293ef..8d141c0c8ff9 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -1627,7 +1627,6 @@ out:
1627 1627
1628struct buffer_head *ext4_find_inline_entry(struct inode *dir, 1628struct buffer_head *ext4_find_inline_entry(struct inode *dir,
1629 struct ext4_filename *fname, 1629 struct ext4_filename *fname,
1630 const struct qstr *d_name,
1631 struct ext4_dir_entry_2 **res_dir, 1630 struct ext4_dir_entry_2 **res_dir,
1632 int *has_inline_data) 1631 int *has_inline_data)
1633{ 1632{
@@ -1649,7 +1648,7 @@ struct buffer_head *ext4_find_inline_entry(struct inode *dir,
1649 EXT4_INLINE_DOTDOT_SIZE; 1648 EXT4_INLINE_DOTDOT_SIZE;
1650 inline_size = EXT4_MIN_INLINE_DATA_SIZE - EXT4_INLINE_DOTDOT_SIZE; 1649 inline_size = EXT4_MIN_INLINE_DATA_SIZE - EXT4_INLINE_DOTDOT_SIZE;
1651 ret = ext4_search_dir(iloc.bh, inline_start, inline_size, 1650 ret = ext4_search_dir(iloc.bh, inline_start, inline_size,
1652 dir, fname, d_name, 0, res_dir); 1651 dir, fname, 0, res_dir);
1653 if (ret == 1) 1652 if (ret == 1)
1654 goto out_find; 1653 goto out_find;
1655 if (ret < 0) 1654 if (ret < 0)
@@ -1662,7 +1661,7 @@ struct buffer_head *ext4_find_inline_entry(struct inode *dir,
1662 inline_size = ext4_get_inline_size(dir) - EXT4_MIN_INLINE_DATA_SIZE; 1661 inline_size = ext4_get_inline_size(dir) - EXT4_MIN_INLINE_DATA_SIZE;
1663 1662
1664 ret = ext4_search_dir(iloc.bh, inline_start, inline_size, 1663 ret = ext4_search_dir(iloc.bh, inline_start, inline_size,
1665 dir, fname, d_name, 0, res_dir); 1664 dir, fname, 0, res_dir);
1666 if (ret == 1) 1665 if (ret == 1)
1667 goto out_find; 1666 goto out_find;
1668 1667
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 1bd0bfa547f6..5cf82d03968c 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -2124,15 +2124,29 @@ static int ext4_writepage(struct page *page,
2124static int mpage_submit_page(struct mpage_da_data *mpd, struct page *page) 2124static int mpage_submit_page(struct mpage_da_data *mpd, struct page *page)
2125{ 2125{
2126 int len; 2126 int len;
2127 loff_t size = i_size_read(mpd->inode); 2127 loff_t size;
2128 int err; 2128 int err;
2129 2129
2130 BUG_ON(page->index != mpd->first_page); 2130 BUG_ON(page->index != mpd->first_page);
2131 clear_page_dirty_for_io(page);
2132 /*
2133 * We have to be very careful here! Nothing protects writeback path
2134 * against i_size changes and the page can be writeably mapped into
2135 * page tables. So an application can be growing i_size and writing
2136 * data through mmap while writeback runs. clear_page_dirty_for_io()
2137 * write-protects our page in page tables and the page cannot get
2138 * written to again until we release page lock. So only after
2139 * clear_page_dirty_for_io() we are safe to sample i_size for
2140 * ext4_bio_write_page() to zero-out tail of the written page. We rely
2141 * on the barrier provided by TestClearPageDirty in
2142 * clear_page_dirty_for_io() to make sure i_size is really sampled only
2143 * after page tables are updated.
2144 */
2145 size = i_size_read(mpd->inode);
2131 if (page->index == size >> PAGE_SHIFT) 2146 if (page->index == size >> PAGE_SHIFT)
2132 len = size & ~PAGE_MASK; 2147 len = size & ~PAGE_MASK;
2133 else 2148 else
2134 len = PAGE_SIZE; 2149 len = PAGE_SIZE;
2135 clear_page_dirty_for_io(page);
2136 err = ext4_bio_write_page(&mpd->io_submit, page, len, mpd->wbc, false); 2150 err = ext4_bio_write_page(&mpd->io_submit, page, len, mpd->wbc, false);
2137 if (!err) 2151 if (!err)
2138 mpd->wbc->nr_to_write--; 2152 mpd->wbc->nr_to_write--;
@@ -3629,9 +3643,6 @@ static ssize_t ext4_direct_IO_write(struct kiocb *iocb, struct iov_iter *iter)
3629 get_block_func = ext4_dio_get_block_unwritten_async; 3643 get_block_func = ext4_dio_get_block_unwritten_async;
3630 dio_flags = DIO_LOCKING; 3644 dio_flags = DIO_LOCKING;
3631 } 3645 }
3632#ifdef CONFIG_EXT4_FS_ENCRYPTION
3633 BUG_ON(ext4_encrypted_inode(inode) && S_ISREG(inode->i_mode));
3634#endif
3635 ret = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter, 3646 ret = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter,
3636 get_block_func, ext4_end_io_dio, NULL, 3647 get_block_func, ext4_end_io_dio, NULL,
3637 dio_flags); 3648 dio_flags);
@@ -3713,7 +3724,7 @@ static ssize_t ext4_direct_IO_read(struct kiocb *iocb, struct iov_iter *iter)
3713 */ 3724 */
3714 inode_lock_shared(inode); 3725 inode_lock_shared(inode);
3715 ret = filemap_write_and_wait_range(mapping, iocb->ki_pos, 3726 ret = filemap_write_and_wait_range(mapping, iocb->ki_pos,
3716 iocb->ki_pos + count); 3727 iocb->ki_pos + count - 1);
3717 if (ret) 3728 if (ret)
3718 goto out_unlock; 3729 goto out_unlock;
3719 ret = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, 3730 ret = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev,
@@ -4207,6 +4218,8 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length)
4207 4218
4208 inode->i_mtime = inode->i_ctime = current_time(inode); 4219 inode->i_mtime = inode->i_ctime = current_time(inode);
4209 ext4_mark_inode_dirty(handle, inode); 4220 ext4_mark_inode_dirty(handle, inode);
4221 if (ret >= 0)
4222 ext4_update_inode_fsync_trans(handle, inode, 1);
4210out_stop: 4223out_stop:
4211 ext4_journal_stop(handle); 4224 ext4_journal_stop(handle);
4212out_dio: 4225out_dio:
@@ -5637,8 +5650,9 @@ static int ext4_expand_extra_isize(struct inode *inode,
5637 /* No extended attributes present */ 5650 /* No extended attributes present */
5638 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) || 5651 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
5639 header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)) { 5652 header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)) {
5640 memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE, 0, 5653 memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE +
5641 new_extra_isize); 5654 EXT4_I(inode)->i_extra_isize, 0,
5655 new_extra_isize - EXT4_I(inode)->i_extra_isize);
5642 EXT4_I(inode)->i_extra_isize = new_extra_isize; 5656 EXT4_I(inode)->i_extra_isize = new_extra_isize;
5643 return 0; 5657 return 0;
5644 } 5658 }
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index 5083bce20ac4..b7928cddd539 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -3887,7 +3887,8 @@ ext4_mb_discard_group_preallocations(struct super_block *sb,
3887 3887
3888 err = ext4_mb_load_buddy(sb, group, &e4b); 3888 err = ext4_mb_load_buddy(sb, group, &e4b);
3889 if (err) { 3889 if (err) {
3890 ext4_error(sb, "Error loading buddy information for %u", group); 3890 ext4_warning(sb, "Error %d loading buddy information for %u",
3891 err, group);
3891 put_bh(bitmap_bh); 3892 put_bh(bitmap_bh);
3892 return 0; 3893 return 0;
3893 } 3894 }
@@ -4044,10 +4045,11 @@ repeat:
4044 BUG_ON(pa->pa_type != MB_INODE_PA); 4045 BUG_ON(pa->pa_type != MB_INODE_PA);
4045 group = ext4_get_group_number(sb, pa->pa_pstart); 4046 group = ext4_get_group_number(sb, pa->pa_pstart);
4046 4047
4047 err = ext4_mb_load_buddy(sb, group, &e4b); 4048 err = ext4_mb_load_buddy_gfp(sb, group, &e4b,
4049 GFP_NOFS|__GFP_NOFAIL);
4048 if (err) { 4050 if (err) {
4049 ext4_error(sb, "Error loading buddy information for %u", 4051 ext4_error(sb, "Error %d loading buddy information for %u",
4050 group); 4052 err, group);
4051 continue; 4053 continue;
4052 } 4054 }
4053 4055
@@ -4303,11 +4305,14 @@ ext4_mb_discard_lg_preallocations(struct super_block *sb,
4303 spin_unlock(&lg->lg_prealloc_lock); 4305 spin_unlock(&lg->lg_prealloc_lock);
4304 4306
4305 list_for_each_entry_safe(pa, tmp, &discard_list, u.pa_tmp_list) { 4307 list_for_each_entry_safe(pa, tmp, &discard_list, u.pa_tmp_list) {
4308 int err;
4306 4309
4307 group = ext4_get_group_number(sb, pa->pa_pstart); 4310 group = ext4_get_group_number(sb, pa->pa_pstart);
4308 if (ext4_mb_load_buddy(sb, group, &e4b)) { 4311 err = ext4_mb_load_buddy_gfp(sb, group, &e4b,
4309 ext4_error(sb, "Error loading buddy information for %u", 4312 GFP_NOFS|__GFP_NOFAIL);
4310 group); 4313 if (err) {
4314 ext4_error(sb, "Error %d loading buddy information for %u",
4315 err, group);
4311 continue; 4316 continue;
4312 } 4317 }
4313 ext4_lock_group(sb, group); 4318 ext4_lock_group(sb, group);
@@ -5127,8 +5132,8 @@ ext4_trim_all_free(struct super_block *sb, ext4_group_t group,
5127 5132
5128 ret = ext4_mb_load_buddy(sb, group, &e4b); 5133 ret = ext4_mb_load_buddy(sb, group, &e4b);
5129 if (ret) { 5134 if (ret) {
5130 ext4_error(sb, "Error in loading buddy " 5135 ext4_warning(sb, "Error %d loading buddy information for %u",
5131 "information for %u", group); 5136 ret, group);
5132 return ret; 5137 return ret;
5133 } 5138 }
5134 bitmap = e4b.bd_bitmap; 5139 bitmap = e4b.bd_bitmap;
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index b81f7d46f344..404256caf9cf 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -1155,12 +1155,11 @@ errout:
1155static inline int search_dirblock(struct buffer_head *bh, 1155static inline int search_dirblock(struct buffer_head *bh,
1156 struct inode *dir, 1156 struct inode *dir,
1157 struct ext4_filename *fname, 1157 struct ext4_filename *fname,
1158 const struct qstr *d_name,
1159 unsigned int offset, 1158 unsigned int offset,
1160 struct ext4_dir_entry_2 **res_dir) 1159 struct ext4_dir_entry_2 **res_dir)
1161{ 1160{
1162 return ext4_search_dir(bh, bh->b_data, dir->i_sb->s_blocksize, dir, 1161 return ext4_search_dir(bh, bh->b_data, dir->i_sb->s_blocksize, dir,
1163 fname, d_name, offset, res_dir); 1162 fname, offset, res_dir);
1164} 1163}
1165 1164
1166/* 1165/*
@@ -1262,7 +1261,6 @@ static inline bool ext4_match(const struct ext4_filename *fname,
1262 */ 1261 */
1263int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size, 1262int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size,
1264 struct inode *dir, struct ext4_filename *fname, 1263 struct inode *dir, struct ext4_filename *fname,
1265 const struct qstr *d_name,
1266 unsigned int offset, struct ext4_dir_entry_2 **res_dir) 1264 unsigned int offset, struct ext4_dir_entry_2 **res_dir)
1267{ 1265{
1268 struct ext4_dir_entry_2 * de; 1266 struct ext4_dir_entry_2 * de;
@@ -1355,7 +1353,7 @@ static struct buffer_head * ext4_find_entry (struct inode *dir,
1355 1353
1356 if (ext4_has_inline_data(dir)) { 1354 if (ext4_has_inline_data(dir)) {
1357 int has_inline_data = 1; 1355 int has_inline_data = 1;
1358 ret = ext4_find_inline_entry(dir, &fname, d_name, res_dir, 1356 ret = ext4_find_inline_entry(dir, &fname, res_dir,
1359 &has_inline_data); 1357 &has_inline_data);
1360 if (has_inline_data) { 1358 if (has_inline_data) {
1361 if (inlined) 1359 if (inlined)
@@ -1447,7 +1445,7 @@ restart:
1447 goto next; 1445 goto next;
1448 } 1446 }
1449 set_buffer_verified(bh); 1447 set_buffer_verified(bh);
1450 i = search_dirblock(bh, dir, &fname, d_name, 1448 i = search_dirblock(bh, dir, &fname,
1451 block << EXT4_BLOCK_SIZE_BITS(sb), res_dir); 1449 block << EXT4_BLOCK_SIZE_BITS(sb), res_dir);
1452 if (i == 1) { 1450 if (i == 1) {
1453 EXT4_I(dir)->i_dir_start_lookup = block; 1451 EXT4_I(dir)->i_dir_start_lookup = block;
@@ -1488,7 +1486,6 @@ static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
1488{ 1486{
1489 struct super_block * sb = dir->i_sb; 1487 struct super_block * sb = dir->i_sb;
1490 struct dx_frame frames[2], *frame; 1488 struct dx_frame frames[2], *frame;
1491 const struct qstr *d_name = fname->usr_fname;
1492 struct buffer_head *bh; 1489 struct buffer_head *bh;
1493 ext4_lblk_t block; 1490 ext4_lblk_t block;
1494 int retval; 1491 int retval;
@@ -1505,7 +1502,7 @@ static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
1505 if (IS_ERR(bh)) 1502 if (IS_ERR(bh))
1506 goto errout; 1503 goto errout;
1507 1504
1508 retval = search_dirblock(bh, dir, fname, d_name, 1505 retval = search_dirblock(bh, dir, fname,
1509 block << EXT4_BLOCK_SIZE_BITS(sb), 1506 block << EXT4_BLOCK_SIZE_BITS(sb),
1510 res_dir); 1507 res_dir);
1511 if (retval == 1) 1508 if (retval == 1)
@@ -1530,7 +1527,7 @@ static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
1530 1527
1531 bh = NULL; 1528 bh = NULL;
1532errout: 1529errout:
1533 dxtrace(printk(KERN_DEBUG "%s not found\n", d_name->name)); 1530 dxtrace(printk(KERN_DEBUG "%s not found\n", fname->usr_fname->name));
1534success: 1531success:
1535 dx_release(frames); 1532 dx_release(frames);
1536 return bh; 1533 return bh;
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 0b177da9ea82..d37c81f327e7 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -848,14 +848,9 @@ static inline void ext4_quota_off_umount(struct super_block *sb)
848{ 848{
849 int type; 849 int type;
850 850
851 if (ext4_has_feature_quota(sb)) { 851 /* Use our quota_off function to clear inode flags etc. */
852 dquot_disable(sb, -1, 852 for (type = 0; type < EXT4_MAXQUOTAS; type++)
853 DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED); 853 ext4_quota_off(sb, type);
854 } else {
855 /* Use our quota_off function to clear inode flags etc. */
856 for (type = 0; type < EXT4_MAXQUOTAS; type++)
857 ext4_quota_off(sb, type);
858 }
859} 854}
860#else 855#else
861static inline void ext4_quota_off_umount(struct super_block *sb) 856static inline void ext4_quota_off_umount(struct super_block *sb)
@@ -1179,6 +1174,9 @@ static int ext4_set_context(struct inode *inode, const void *ctx, size_t len,
1179 return res; 1174 return res;
1180 } 1175 }
1181 1176
1177 res = dquot_initialize(inode);
1178 if (res)
1179 return res;
1182retry: 1180retry:
1183 handle = ext4_journal_start(inode, EXT4_HT_MISC, 1181 handle = ext4_journal_start(inode, EXT4_HT_MISC,
1184 ext4_jbd2_credits_xattr(inode)); 1182 ext4_jbd2_credits_xattr(inode));
@@ -5485,7 +5483,7 @@ static int ext4_quota_off(struct super_block *sb, int type)
5485 goto out; 5483 goto out;
5486 5484
5487 err = dquot_quota_off(sb, type); 5485 err = dquot_quota_off(sb, type);
5488 if (err) 5486 if (err || ext4_has_feature_quota(sb))
5489 goto out_put; 5487 goto out_put;
5490 5488
5491 inode_lock(inode); 5489 inode_lock(inode);
@@ -5505,6 +5503,7 @@ static int ext4_quota_off(struct super_block *sb, int type)
5505out_unlock: 5503out_unlock:
5506 inode_unlock(inode); 5504 inode_unlock(inode);
5507out_put: 5505out_put:
5506 lockdep_set_quota_inode(inode, I_DATA_SEM_NORMAL);
5508 iput(inode); 5507 iput(inode);
5509 return err; 5508 return err;
5510out: 5509out:
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index 8fb7ce14e6eb..5d3c2536641c 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -888,6 +888,8 @@ inserted:
888 else { 888 else {
889 u32 ref; 889 u32 ref;
890 890
891 WARN_ON_ONCE(dquot_initialize_needed(inode));
892
891 /* The old block is released after updating 893 /* The old block is released after updating
892 the inode. */ 894 the inode. */
893 error = dquot_alloc_block(inode, 895 error = dquot_alloc_block(inode,
@@ -954,6 +956,8 @@ inserted:
954 /* We need to allocate a new block */ 956 /* We need to allocate a new block */
955 ext4_fsblk_t goal, block; 957 ext4_fsblk_t goal, block;
956 958
959 WARN_ON_ONCE(dquot_initialize_needed(inode));
960
957 goal = ext4_group_first_block_no(sb, 961 goal = ext4_group_first_block_no(sb,
958 EXT4_I(inode)->i_block_group); 962 EXT4_I(inode)->i_block_group);
959 963
@@ -1166,6 +1170,7 @@ ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,
1166 return -EINVAL; 1170 return -EINVAL;
1167 if (strlen(name) > 255) 1171 if (strlen(name) > 255)
1168 return -ERANGE; 1172 return -ERANGE;
1173
1169 ext4_write_lock_xattr(inode, &no_expand); 1174 ext4_write_lock_xattr(inode, &no_expand);
1170 1175
1171 error = ext4_reserve_inode_write(handle, inode, &is.iloc); 1176 error = ext4_reserve_inode_write(handle, inode, &is.iloc);
@@ -1267,6 +1272,9 @@ ext4_xattr_set(struct inode *inode, int name_index, const char *name,
1267 int error, retries = 0; 1272 int error, retries = 0;
1268 int credits = ext4_jbd2_credits_xattr(inode); 1273 int credits = ext4_jbd2_credits_xattr(inode);
1269 1274
1275 error = dquot_initialize(inode);
1276 if (error)
1277 return error;
1270retry: 1278retry:
1271 handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits); 1279 handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits);
1272 if (IS_ERR(handle)) { 1280 if (IS_ERR(handle)) {
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 2185c7a040a1..fd2e651bad6d 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1078,6 +1078,7 @@ static inline u32 f2fs_crc32(struct f2fs_sb_info *sbi, const void *address,
1078{ 1078{
1079 SHASH_DESC_ON_STACK(shash, sbi->s_chksum_driver); 1079 SHASH_DESC_ON_STACK(shash, sbi->s_chksum_driver);
1080 u32 *ctx = (u32 *)shash_desc_ctx(shash); 1080 u32 *ctx = (u32 *)shash_desc_ctx(shash);
1081 u32 retval;
1081 int err; 1082 int err;
1082 1083
1083 shash->tfm = sbi->s_chksum_driver; 1084 shash->tfm = sbi->s_chksum_driver;
@@ -1087,7 +1088,9 @@ static inline u32 f2fs_crc32(struct f2fs_sb_info *sbi, const void *address,
1087 err = crypto_shash_update(shash, address, length); 1088 err = crypto_shash_update(shash, address, length);
1088 BUG_ON(err); 1089 BUG_ON(err);
1089 1090
1090 return *ctx; 1091 retval = *ctx;
1092 barrier_data(ctx);
1093 return retval;
1091} 1094}
1092 1095
1093static inline bool f2fs_crc_valid(struct f2fs_sb_info *sbi, __u32 blk_crc, 1096static inline bool f2fs_crc_valid(struct f2fs_sb_info *sbi, __u32 blk_crc,
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index f865b96374df..d2955daf17a4 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -659,7 +659,7 @@ static void log_write_header(struct gfs2_sbd *sdp, u32 flags)
659 struct gfs2_log_header *lh; 659 struct gfs2_log_header *lh;
660 unsigned int tail; 660 unsigned int tail;
661 u32 hash; 661 u32 hash;
662 int op_flags = REQ_PREFLUSH | REQ_FUA | REQ_META; 662 int op_flags = REQ_PREFLUSH | REQ_FUA | REQ_META | REQ_SYNC;
663 struct page *page = mempool_alloc(gfs2_page_pool, GFP_NOIO); 663 struct page *page = mempool_alloc(gfs2_page_pool, GFP_NOIO);
664 enum gfs2_freeze_state state = atomic_read(&sdp->sd_freeze_state); 664 enum gfs2_freeze_state state = atomic_read(&sdp->sd_freeze_state);
665 lh = page_address(page); 665 lh = page_address(page);
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index dde861387a40..d44f5456eb9b 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -200,7 +200,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
200 addr = ALIGN(addr, huge_page_size(h)); 200 addr = ALIGN(addr, huge_page_size(h));
201 vma = find_vma(mm, addr); 201 vma = find_vma(mm, addr);
202 if (TASK_SIZE - len >= addr && 202 if (TASK_SIZE - len >= addr &&
203 (!vma || addr + len <= vma->vm_start)) 203 (!vma || addr + len <= vm_start_gap(vma)))
204 return addr; 204 return addr;
205 } 205 }
206 206
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
index 9ee4832b6f8b..2d30a6da7013 100644
--- a/fs/jbd2/transaction.c
+++ b/fs/jbd2/transaction.c
@@ -680,6 +680,12 @@ int jbd2__journal_restart(handle_t *handle, int nblocks, gfp_t gfp_mask)
680 680
681 rwsem_release(&journal->j_trans_commit_map, 1, _THIS_IP_); 681 rwsem_release(&journal->j_trans_commit_map, 1, _THIS_IP_);
682 handle->h_buffer_credits = nblocks; 682 handle->h_buffer_credits = nblocks;
683 /*
684 * Restore the original nofs context because the journal restart
685 * is basically the same thing as journal stop and start.
686 * start_this_handle will start a new nofs context.
687 */
688 memalloc_nofs_restore(handle->saved_alloc_context);
683 ret = start_this_handle(journal, handle, gfp_mask); 689 ret = start_this_handle(journal, handle, gfp_mask);
684 return ret; 690 return ret;
685} 691}
diff --git a/fs/namespace.c b/fs/namespace.c
index 8bd3e4d448b9..5a4438445bf7 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -3488,6 +3488,8 @@ static int mntns_install(struct nsproxy *nsproxy, struct ns_common *ns)
3488 return err; 3488 return err;
3489 } 3489 }
3490 3490
3491 put_mnt_ns(old_mnt_ns);
3492
3491 /* Update the pwd and root */ 3493 /* Update the pwd and root */
3492 set_fs_pwd(fs, &root); 3494 set_fs_pwd(fs, &root);
3493 set_fs_root(fs, &root); 3495 set_fs_root(fs, &root);
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
index c14758e08d73..390ac9c39c59 100644
--- a/fs/nfs/callback_xdr.c
+++ b/fs/nfs/callback_xdr.c
@@ -753,7 +753,6 @@ static void nfs4_callback_free_slot(struct nfs4_session *session,
753 * A single slot, so highest used slotid is either 0 or -1 753 * A single slot, so highest used slotid is either 0 or -1
754 */ 754 */
755 nfs4_free_slot(tbl, slot); 755 nfs4_free_slot(tbl, slot);
756 nfs4_slot_tbl_drain_complete(tbl);
757 spin_unlock(&tbl->slot_tbl_lock); 756 spin_unlock(&tbl->slot_tbl_lock);
758} 757}
759 758
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 32ccd7754f8a..2ac00bf4ecf1 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -1946,29 +1946,6 @@ nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
1946} 1946}
1947EXPORT_SYMBOL_GPL(nfs_link); 1947EXPORT_SYMBOL_GPL(nfs_link);
1948 1948
1949static void
1950nfs_complete_rename(struct rpc_task *task, struct nfs_renamedata *data)
1951{
1952 struct dentry *old_dentry = data->old_dentry;
1953 struct dentry *new_dentry = data->new_dentry;
1954 struct inode *old_inode = d_inode(old_dentry);
1955 struct inode *new_inode = d_inode(new_dentry);
1956
1957 nfs_mark_for_revalidate(old_inode);
1958
1959 switch (task->tk_status) {
1960 case 0:
1961 if (new_inode != NULL)
1962 nfs_drop_nlink(new_inode);
1963 d_move(old_dentry, new_dentry);
1964 nfs_set_verifier(new_dentry,
1965 nfs_save_change_attribute(data->new_dir));
1966 break;
1967 case -ENOENT:
1968 nfs_dentry_handle_enoent(old_dentry);
1969 }
1970}
1971
1972/* 1949/*
1973 * RENAME 1950 * RENAME
1974 * FIXME: Some nfsds, like the Linux user space nfsd, may generate a 1951 * FIXME: Some nfsds, like the Linux user space nfsd, may generate a
@@ -1999,7 +1976,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
1999{ 1976{
2000 struct inode *old_inode = d_inode(old_dentry); 1977 struct inode *old_inode = d_inode(old_dentry);
2001 struct inode *new_inode = d_inode(new_dentry); 1978 struct inode *new_inode = d_inode(new_dentry);
2002 struct dentry *dentry = NULL; 1979 struct dentry *dentry = NULL, *rehash = NULL;
2003 struct rpc_task *task; 1980 struct rpc_task *task;
2004 int error = -EBUSY; 1981 int error = -EBUSY;
2005 1982
@@ -2022,8 +1999,10 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2022 * To prevent any new references to the target during the 1999 * To prevent any new references to the target during the
2023 * rename, we unhash the dentry in advance. 2000 * rename, we unhash the dentry in advance.
2024 */ 2001 */
2025 if (!d_unhashed(new_dentry)) 2002 if (!d_unhashed(new_dentry)) {
2026 d_drop(new_dentry); 2003 d_drop(new_dentry);
2004 rehash = new_dentry;
2005 }
2027 2006
2028 if (d_count(new_dentry) > 2) { 2007 if (d_count(new_dentry) > 2) {
2029 int err; 2008 int err;
@@ -2040,6 +2019,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2040 goto out; 2019 goto out;
2041 2020
2042 new_dentry = dentry; 2021 new_dentry = dentry;
2022 rehash = NULL;
2043 new_inode = NULL; 2023 new_inode = NULL;
2044 } 2024 }
2045 } 2025 }
@@ -2048,8 +2028,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2048 if (new_inode != NULL) 2028 if (new_inode != NULL)
2049 NFS_PROTO(new_inode)->return_delegation(new_inode); 2029 NFS_PROTO(new_inode)->return_delegation(new_inode);
2050 2030
2051 task = nfs_async_rename(old_dir, new_dir, old_dentry, new_dentry, 2031 task = nfs_async_rename(old_dir, new_dir, old_dentry, new_dentry, NULL);
2052 nfs_complete_rename);
2053 if (IS_ERR(task)) { 2032 if (IS_ERR(task)) {
2054 error = PTR_ERR(task); 2033 error = PTR_ERR(task);
2055 goto out; 2034 goto out;
@@ -2059,9 +2038,27 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2059 if (error == 0) 2038 if (error == 0)
2060 error = task->tk_status; 2039 error = task->tk_status;
2061 rpc_put_task(task); 2040 rpc_put_task(task);
2041 nfs_mark_for_revalidate(old_inode);
2062out: 2042out:
2043 if (rehash)
2044 d_rehash(rehash);
2063 trace_nfs_rename_exit(old_dir, old_dentry, 2045 trace_nfs_rename_exit(old_dir, old_dentry,
2064 new_dir, new_dentry, error); 2046 new_dir, new_dentry, error);
2047 if (!error) {
2048 if (new_inode != NULL)
2049 nfs_drop_nlink(new_inode);
2050 /*
2051 * The d_move() should be here instead of in an async RPC completion
2052 * handler because we need the proper locks to move the dentry. If
2053 * we're interrupted by a signal, the async RPC completion handler
2054 * should mark the directories for revalidation.
2055 */
2056 d_move(old_dentry, new_dentry);
2057 nfs_set_verifier(new_dentry,
2058 nfs_save_change_attribute(new_dir));
2059 } else if (error == -ENOENT)
2060 nfs_dentry_handle_enoent(old_dentry);
2061
2065 /* new dentry created? */ 2062 /* new dentry created? */
2066 if (dentry) 2063 if (dentry)
2067 dput(dentry); 2064 dput(dentry);
diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
index f5714ee01000..23542dc44a25 100644
--- a/fs/nfs/flexfilelayout/flexfilelayout.c
+++ b/fs/nfs/flexfilelayout/flexfilelayout.c
@@ -454,6 +454,7 @@ ff_layout_alloc_lseg(struct pnfs_layout_hdr *lh,
454 goto out_err_free; 454 goto out_err_free;
455 455
456 /* fh */ 456 /* fh */
457 rc = -EIO;
457 p = xdr_inline_decode(&stream, 4); 458 p = xdr_inline_decode(&stream, 4);
458 if (!p) 459 if (!p)
459 goto out_err_free; 460 goto out_err_free;
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
index e9b4c3320e37..3e24392f2caa 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
@@ -398,7 +398,6 @@ extern struct file_system_type nfs4_referral_fs_type;
398bool nfs_auth_info_match(const struct nfs_auth_info *, rpc_authflavor_t); 398bool nfs_auth_info_match(const struct nfs_auth_info *, rpc_authflavor_t);
399struct dentry *nfs_try_mount(int, const char *, struct nfs_mount_info *, 399struct dentry *nfs_try_mount(int, const char *, struct nfs_mount_info *,
400 struct nfs_subversion *); 400 struct nfs_subversion *);
401void nfs_initialise_sb(struct super_block *);
402int nfs_set_sb_security(struct super_block *, struct dentry *, struct nfs_mount_info *); 401int nfs_set_sb_security(struct super_block *, struct dentry *, struct nfs_mount_info *);
403int nfs_clone_sb_security(struct super_block *, struct dentry *, struct nfs_mount_info *); 402int nfs_clone_sb_security(struct super_block *, struct dentry *, struct nfs_mount_info *);
404struct dentry *nfs_fs_mount_common(struct nfs_server *, int, const char *, 403struct dentry *nfs_fs_mount_common(struct nfs_server *, int, const char *,
@@ -458,7 +457,6 @@ extern void nfs_read_prepare(struct rpc_task *task, void *calldata);
458extern void nfs_pageio_reset_read_mds(struct nfs_pageio_descriptor *pgio); 457extern void nfs_pageio_reset_read_mds(struct nfs_pageio_descriptor *pgio);
459 458
460/* super.c */ 459/* super.c */
461void nfs_clone_super(struct super_block *, struct nfs_mount_info *);
462void nfs_umount_begin(struct super_block *); 460void nfs_umount_begin(struct super_block *);
463int nfs_statfs(struct dentry *, struct kstatfs *); 461int nfs_statfs(struct dentry *, struct kstatfs *);
464int nfs_show_options(struct seq_file *, struct dentry *); 462int nfs_show_options(struct seq_file *, struct dentry *);
diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c
index 1a224a33a6c2..e5686be67be8 100644
--- a/fs/nfs/namespace.c
+++ b/fs/nfs/namespace.c
@@ -246,7 +246,7 @@ struct vfsmount *nfs_do_submount(struct dentry *dentry, struct nfs_fh *fh,
246 246
247 devname = nfs_devname(dentry, page, PAGE_SIZE); 247 devname = nfs_devname(dentry, page, PAGE_SIZE);
248 if (IS_ERR(devname)) 248 if (IS_ERR(devname))
249 mnt = (struct vfsmount *)devname; 249 mnt = ERR_CAST(devname);
250 else 250 else
251 mnt = nfs_do_clone_mount(NFS_SB(dentry->d_sb), devname, &mountdata); 251 mnt = nfs_do_clone_mount(NFS_SB(dentry->d_sb), devname, &mountdata);
252 252
diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c
index 929d09a5310a..319a47db218d 100644
--- a/fs/nfs/nfs42proc.c
+++ b/fs/nfs/nfs42proc.c
@@ -177,7 +177,7 @@ static ssize_t _nfs42_proc_copy(struct file *src,
177 if (status) 177 if (status)
178 goto out; 178 goto out;
179 179
180 if (!nfs_write_verifier_cmp(&res->write_res.verifier.verifier, 180 if (nfs_write_verifier_cmp(&res->write_res.verifier.verifier,
181 &res->commit_res.verf->verifier)) { 181 &res->commit_res.verf->verifier)) {
182 status = -EAGAIN; 182 status = -EAGAIN;
183 goto out; 183 goto out;
diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
index 692a7a8bfc7a..66776f022111 100644
--- a/fs/nfs/nfs4client.c
+++ b/fs/nfs/nfs4client.c
@@ -582,7 +582,6 @@ int nfs40_walk_client_list(struct nfs_client *new,
582 */ 582 */
583 nfs4_schedule_path_down_recovery(pos); 583 nfs4_schedule_path_down_recovery(pos);
584 default: 584 default:
585 spin_lock(&nn->nfs_client_lock);
586 goto out; 585 goto out;
587 } 586 }
588 587
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index c08c46a3b8cd..dbfa18900e25 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -2589,7 +2589,8 @@ static inline void nfs4_exclusive_attrset(struct nfs4_opendata *opendata,
2589 2589
2590 /* Except MODE, it seems harmless of setting twice. */ 2590 /* Except MODE, it seems harmless of setting twice. */
2591 if (opendata->o_arg.createmode != NFS4_CREATE_EXCLUSIVE && 2591 if (opendata->o_arg.createmode != NFS4_CREATE_EXCLUSIVE &&
2592 attrset[1] & FATTR4_WORD1_MODE) 2592 (attrset[1] & FATTR4_WORD1_MODE ||
2593 attrset[2] & FATTR4_WORD2_MODE_UMASK))
2593 sattr->ia_valid &= ~ATTR_MODE; 2594 sattr->ia_valid &= ~ATTR_MODE;
2594 2595
2595 if (attrset[2] & FATTR4_WORD2_SECURITY_LABEL) 2596 if (attrset[2] & FATTR4_WORD2_SECURITY_LABEL)
@@ -8416,6 +8417,7 @@ static void nfs4_layoutget_release(void *calldata)
8416 size_t max_pages = max_response_pages(server); 8417 size_t max_pages = max_response_pages(server);
8417 8418
8418 dprintk("--> %s\n", __func__); 8419 dprintk("--> %s\n", __func__);
8420 nfs4_sequence_free_slot(&lgp->res.seq_res);
8419 nfs4_free_pages(lgp->args.layout.pages, max_pages); 8421 nfs4_free_pages(lgp->args.layout.pages, max_pages);
8420 pnfs_put_layout_hdr(NFS_I(inode)->layout); 8422 pnfs_put_layout_hdr(NFS_I(inode)->layout);
8421 put_nfs_open_context(lgp->args.ctx); 8423 put_nfs_open_context(lgp->args.ctx);
@@ -8490,7 +8492,6 @@ nfs4_proc_layoutget(struct nfs4_layoutget *lgp, long *timeout, gfp_t gfp_flags)
8490 /* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */ 8492 /* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */
8491 if (status == 0 && lgp->res.layoutp->len) 8493 if (status == 0 && lgp->res.layoutp->len)
8492 lseg = pnfs_layout_process(lgp); 8494 lseg = pnfs_layout_process(lgp);
8493 nfs4_sequence_free_slot(&lgp->res.seq_res);
8494 rpc_put_task(task); 8495 rpc_put_task(task);
8495 dprintk("<-- %s status=%d\n", __func__, status); 8496 dprintk("<-- %s status=%d\n", __func__, status);
8496 if (status) 8497 if (status)
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index b34de036501b..cbf82b0d4467 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -2134,6 +2134,8 @@ again:
2134 put_rpccred(cred); 2134 put_rpccred(cred);
2135 switch (status) { 2135 switch (status) {
2136 case 0: 2136 case 0:
2137 case -EINTR:
2138 case -ERESTARTSYS:
2137 break; 2139 break;
2138 case -ETIMEDOUT: 2140 case -ETIMEDOUT:
2139 if (clnt->cl_softrtry) 2141 if (clnt->cl_softrtry)
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index adc6ec28d4b5..c383d0913b54 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -2094,12 +2094,26 @@ pnfs_generic_pg_check_layout(struct nfs_pageio_descriptor *pgio)
2094} 2094}
2095EXPORT_SYMBOL_GPL(pnfs_generic_pg_check_layout); 2095EXPORT_SYMBOL_GPL(pnfs_generic_pg_check_layout);
2096 2096
2097/*
2098 * Check for any intersection between the request and the pgio->pg_lseg,
2099 * and if none, put this pgio->pg_lseg away.
2100 */
2101static void
2102pnfs_generic_pg_check_range(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
2103{
2104 if (pgio->pg_lseg && !pnfs_lseg_request_intersecting(pgio->pg_lseg, req)) {
2105 pnfs_put_lseg(pgio->pg_lseg);
2106 pgio->pg_lseg = NULL;
2107 }
2108}
2109
2097void 2110void
2098pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *req) 2111pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
2099{ 2112{
2100 u64 rd_size = req->wb_bytes; 2113 u64 rd_size = req->wb_bytes;
2101 2114
2102 pnfs_generic_pg_check_layout(pgio); 2115 pnfs_generic_pg_check_layout(pgio);
2116 pnfs_generic_pg_check_range(pgio, req);
2103 if (pgio->pg_lseg == NULL) { 2117 if (pgio->pg_lseg == NULL) {
2104 if (pgio->pg_dreq == NULL) 2118 if (pgio->pg_dreq == NULL)
2105 rd_size = i_size_read(pgio->pg_inode) - req_offset(req); 2119 rd_size = i_size_read(pgio->pg_inode) - req_offset(req);
@@ -2131,6 +2145,7 @@ pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
2131 struct nfs_page *req, u64 wb_size) 2145 struct nfs_page *req, u64 wb_size)
2132{ 2146{
2133 pnfs_generic_pg_check_layout(pgio); 2147 pnfs_generic_pg_check_layout(pgio);
2148 pnfs_generic_pg_check_range(pgio, req);
2134 if (pgio->pg_lseg == NULL) { 2149 if (pgio->pg_lseg == NULL) {
2135 pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode, 2150 pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
2136 req->wb_context, 2151 req->wb_context,
@@ -2191,16 +2206,10 @@ pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio,
2191 seg_end = pnfs_end_offset(pgio->pg_lseg->pls_range.offset, 2206 seg_end = pnfs_end_offset(pgio->pg_lseg->pls_range.offset,
2192 pgio->pg_lseg->pls_range.length); 2207 pgio->pg_lseg->pls_range.length);
2193 req_start = req_offset(req); 2208 req_start = req_offset(req);
2194 WARN_ON_ONCE(req_start >= seg_end); 2209
2195 /* start of request is past the last byte of this segment */ 2210 /* start of request is past the last byte of this segment */
2196 if (req_start >= seg_end) { 2211 if (req_start >= seg_end)
2197 /* reference the new lseg */
2198 if (pgio->pg_ops->pg_cleanup)
2199 pgio->pg_ops->pg_cleanup(pgio);
2200 if (pgio->pg_ops->pg_init)
2201 pgio->pg_ops->pg_init(pgio, req);
2202 return 0; 2212 return 0;
2203 }
2204 2213
2205 /* adjust 'size' iff there are fewer bytes left in the 2214 /* adjust 'size' iff there are fewer bytes left in the
2206 * segment than what nfs_generic_pg_test returned */ 2215 * segment than what nfs_generic_pg_test returned */
diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
index 2d05b756a8d6..99731e3e332f 100644
--- a/fs/nfs/pnfs.h
+++ b/fs/nfs/pnfs.h
@@ -593,6 +593,16 @@ pnfs_lseg_range_intersecting(const struct pnfs_layout_range *l1,
593 return pnfs_is_range_intersecting(l1->offset, end1, l2->offset, end2); 593 return pnfs_is_range_intersecting(l1->offset, end1, l2->offset, end2);
594} 594}
595 595
596static inline bool
597pnfs_lseg_request_intersecting(struct pnfs_layout_segment *lseg, struct nfs_page *req)
598{
599 u64 seg_last = pnfs_end_offset(lseg->pls_range.offset, lseg->pls_range.length);
600 u64 req_last = req_offset(req) + req->wb_bytes;
601
602 return pnfs_is_range_intersecting(lseg->pls_range.offset, seg_last,
603 req_offset(req), req_last);
604}
605
596extern unsigned int layoutstats_timer; 606extern unsigned int layoutstats_timer;
597 607
598#ifdef NFS_DEBUG 608#ifdef NFS_DEBUG
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 2f3822a4a7d5..eceb4eabb064 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -2301,7 +2301,7 @@ EXPORT_SYMBOL_GPL(nfs_remount);
2301/* 2301/*
2302 * Initialise the common bits of the superblock 2302 * Initialise the common bits of the superblock
2303 */ 2303 */
2304inline void nfs_initialise_sb(struct super_block *sb) 2304static void nfs_initialise_sb(struct super_block *sb)
2305{ 2305{
2306 struct nfs_server *server = NFS_SB(sb); 2306 struct nfs_server *server = NFS_SB(sb);
2307 2307
@@ -2348,7 +2348,8 @@ EXPORT_SYMBOL_GPL(nfs_fill_super);
2348/* 2348/*
2349 * Finish setting up a cloned NFS2/3/4 superblock 2349 * Finish setting up a cloned NFS2/3/4 superblock
2350 */ 2350 */
2351void nfs_clone_super(struct super_block *sb, struct nfs_mount_info *mount_info) 2351static void nfs_clone_super(struct super_block *sb,
2352 struct nfs_mount_info *mount_info)
2352{ 2353{
2353 const struct super_block *old_sb = mount_info->cloned->sb; 2354 const struct super_block *old_sb = mount_info->cloned->sb;
2354 struct nfs_server *server = NFS_SB(sb); 2355 struct nfs_server *server = NFS_SB(sb);
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
index 12feac6ee2fd..452334694a5d 100644
--- a/fs/nfsd/nfs3xdr.c
+++ b/fs/nfsd/nfs3xdr.c
@@ -334,11 +334,8 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
334 if (!p) 334 if (!p)
335 return 0; 335 return 0;
336 p = xdr_decode_hyper(p, &args->offset); 336 p = xdr_decode_hyper(p, &args->offset);
337 args->count = ntohl(*p++);
338
339 if (!xdr_argsize_check(rqstp, p))
340 return 0;
341 337
338 args->count = ntohl(*p++);
342 len = min(args->count, max_blocksize); 339 len = min(args->count, max_blocksize);
343 340
344 /* set up the kvec */ 341 /* set up the kvec */
@@ -352,7 +349,7 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
352 v++; 349 v++;
353 } 350 }
354 args->vlen = v; 351 args->vlen = v;
355 return 1; 352 return xdr_argsize_check(rqstp, p);
356} 353}
357 354
358int 355int
@@ -544,11 +541,9 @@ nfs3svc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p,
544 p = decode_fh(p, &args->fh); 541 p = decode_fh(p, &args->fh);
545 if (!p) 542 if (!p)
546 return 0; 543 return 0;
547 if (!xdr_argsize_check(rqstp, p))
548 return 0;
549 args->buffer = page_address(*(rqstp->rq_next_page++)); 544 args->buffer = page_address(*(rqstp->rq_next_page++));
550 545
551 return 1; 546 return xdr_argsize_check(rqstp, p);
552} 547}
553 548
554int 549int
@@ -574,14 +569,10 @@ nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
574 args->verf = p; p += 2; 569 args->verf = p; p += 2;
575 args->dircount = ~0; 570 args->dircount = ~0;
576 args->count = ntohl(*p++); 571 args->count = ntohl(*p++);
577
578 if (!xdr_argsize_check(rqstp, p))
579 return 0;
580
581 args->count = min_t(u32, args->count, PAGE_SIZE); 572 args->count = min_t(u32, args->count, PAGE_SIZE);
582 args->buffer = page_address(*(rqstp->rq_next_page++)); 573 args->buffer = page_address(*(rqstp->rq_next_page++));
583 574
584 return 1; 575 return xdr_argsize_check(rqstp, p);
585} 576}
586 577
587int 578int
@@ -599,9 +590,6 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
599 args->dircount = ntohl(*p++); 590 args->dircount = ntohl(*p++);
600 args->count = ntohl(*p++); 591 args->count = ntohl(*p++);
601 592
602 if (!xdr_argsize_check(rqstp, p))
603 return 0;
604
605 len = args->count = min(args->count, max_blocksize); 593 len = args->count = min(args->count, max_blocksize);
606 while (len > 0) { 594 while (len > 0) {
607 struct page *p = *(rqstp->rq_next_page++); 595 struct page *p = *(rqstp->rq_next_page++);
@@ -609,7 +597,8 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
609 args->buffer = page_address(p); 597 args->buffer = page_address(p);
610 len -= PAGE_SIZE; 598 len -= PAGE_SIZE;
611 } 599 }
612 return 1; 600
601 return xdr_argsize_check(rqstp, p);
613} 602}
614 603
615int 604int
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index c453a1998e00..dadb3bf305b2 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -1769,6 +1769,12 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
1769 opdesc->op_get_currentstateid(cstate, &op->u); 1769 opdesc->op_get_currentstateid(cstate, &op->u);
1770 op->status = opdesc->op_func(rqstp, cstate, &op->u); 1770 op->status = opdesc->op_func(rqstp, cstate, &op->u);
1771 1771
1772 /* Only from SEQUENCE */
1773 if (cstate->status == nfserr_replay_cache) {
1774 dprintk("%s NFS4.1 replay from cache\n", __func__);
1775 status = op->status;
1776 goto out;
1777 }
1772 if (!op->status) { 1778 if (!op->status) {
1773 if (opdesc->op_set_currentstateid) 1779 if (opdesc->op_set_currentstateid)
1774 opdesc->op_set_currentstateid(cstate, &op->u); 1780 opdesc->op_set_currentstateid(cstate, &op->u);
@@ -1779,14 +1785,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
1779 if (need_wrongsec_check(rqstp)) 1785 if (need_wrongsec_check(rqstp))
1780 op->status = check_nfsd_access(current_fh->fh_export, rqstp); 1786 op->status = check_nfsd_access(current_fh->fh_export, rqstp);
1781 } 1787 }
1782
1783encode_op: 1788encode_op:
1784 /* Only from SEQUENCE */
1785 if (cstate->status == nfserr_replay_cache) {
1786 dprintk("%s NFS4.1 replay from cache\n", __func__);
1787 status = op->status;
1788 goto out;
1789 }
1790 if (op->status == nfserr_replay_me) { 1789 if (op->status == nfserr_replay_me) {
1791 op->replay = &cstate->replay_owner->so_replay; 1790 op->replay = &cstate->replay_owner->so_replay;
1792 nfsd4_encode_replay(&resp->xdr, op); 1791 nfsd4_encode_replay(&resp->xdr, op);
diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c
index 6a4947a3f4fa..de07ff625777 100644
--- a/fs/nfsd/nfsxdr.c
+++ b/fs/nfsd/nfsxdr.c
@@ -257,9 +257,6 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
257 len = args->count = ntohl(*p++); 257 len = args->count = ntohl(*p++);
258 p++; /* totalcount - unused */ 258 p++; /* totalcount - unused */
259 259
260 if (!xdr_argsize_check(rqstp, p))
261 return 0;
262
263 len = min_t(unsigned int, len, NFSSVC_MAXBLKSIZE_V2); 260 len = min_t(unsigned int, len, NFSSVC_MAXBLKSIZE_V2);
264 261
265 /* set up somewhere to store response. 262 /* set up somewhere to store response.
@@ -275,7 +272,7 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
275 v++; 272 v++;
276 } 273 }
277 args->vlen = v; 274 args->vlen = v;
278 return 1; 275 return xdr_argsize_check(rqstp, p);
279} 276}
280 277
281int 278int
@@ -365,11 +362,9 @@ nfssvc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_readli
365 p = decode_fh(p, &args->fh); 362 p = decode_fh(p, &args->fh);
366 if (!p) 363 if (!p)
367 return 0; 364 return 0;
368 if (!xdr_argsize_check(rqstp, p))
369 return 0;
370 args->buffer = page_address(*(rqstp->rq_next_page++)); 365 args->buffer = page_address(*(rqstp->rq_next_page++));
371 366
372 return 1; 367 return xdr_argsize_check(rqstp, p);
373} 368}
374 369
375int 370int
@@ -407,11 +402,9 @@ nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
407 args->cookie = ntohl(*p++); 402 args->cookie = ntohl(*p++);
408 args->count = ntohl(*p++); 403 args->count = ntohl(*p++);
409 args->count = min_t(u32, args->count, PAGE_SIZE); 404 args->count = min_t(u32, args->count, PAGE_SIZE);
410 if (!xdr_argsize_check(rqstp, p))
411 return 0;
412 args->buffer = page_address(*(rqstp->rq_next_page++)); 405 args->buffer = page_address(*(rqstp->rq_next_page++));
413 406
414 return 1; 407 return xdr_argsize_check(rqstp, p);
415} 408}
416 409
417/* 410/*
diff --git a/fs/ntfs/namei.c b/fs/ntfs/namei.c
index 358258364616..4690cd75d8d7 100644
--- a/fs/ntfs/namei.c
+++ b/fs/ntfs/namei.c
@@ -159,7 +159,7 @@ static struct dentry *ntfs_lookup(struct inode *dir_ino, struct dentry *dent,
159 PTR_ERR(dent_inode)); 159 PTR_ERR(dent_inode));
160 kfree(name); 160 kfree(name);
161 /* Return the error code. */ 161 /* Return the error code. */
162 return (struct dentry *)dent_inode; 162 return ERR_CAST(dent_inode);
163 } 163 }
164 /* It is guaranteed that @name is no longer allocated at this point. */ 164 /* It is guaranteed that @name is no longer allocated at this point. */
165 if (MREF_ERR(mref) == -ENOENT) { 165 if (MREF_ERR(mref) == -ENOENT) {
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 3b7c937a36b5..4689940a953c 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
@@ -2591,6 +2591,10 @@ void ocfs2_inode_unlock_tracker(struct inode *inode,
2591 struct ocfs2_lock_res *lockres; 2591 struct ocfs2_lock_res *lockres;
2592 2592
2593 lockres = &OCFS2_I(inode)->ip_inode_lockres; 2593 lockres = &OCFS2_I(inode)->ip_inode_lockres;
2594 /* had_lock means that the currect process already takes the cluster
2595 * lock previously. If had_lock is 1, we have nothing to do here, and
2596 * it will get unlocked where we got the lock.
2597 */
2594 if (!had_lock) { 2598 if (!had_lock) {
2595 ocfs2_remove_holder(lockres, oh); 2599 ocfs2_remove_holder(lockres, oh);
2596 ocfs2_inode_unlock(inode, ex); 2600 ocfs2_inode_unlock(inode, ex);
diff --git a/fs/ocfs2/export.c b/fs/ocfs2/export.c
index 827fc9809bc2..9f88188060db 100644
--- a/fs/ocfs2/export.c
+++ b/fs/ocfs2/export.c
@@ -119,7 +119,7 @@ check_err:
119 119
120 if (IS_ERR(inode)) { 120 if (IS_ERR(inode)) {
121 mlog_errno(PTR_ERR(inode)); 121 mlog_errno(PTR_ERR(inode));
122 result = (void *)inode; 122 result = ERR_CAST(inode);
123 goto bail; 123 goto bail;
124 } 124 }
125 125
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 3c5384d9b3a5..f70c3778d600 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -1328,20 +1328,21 @@ static int ocfs2_xattr_get(struct inode *inode,
1328 void *buffer, 1328 void *buffer,
1329 size_t buffer_size) 1329 size_t buffer_size)
1330{ 1330{
1331 int ret; 1331 int ret, had_lock;
1332 struct buffer_head *di_bh = NULL; 1332 struct buffer_head *di_bh = NULL;
1333 struct ocfs2_lock_holder oh;
1333 1334
1334 ret = ocfs2_inode_lock(inode, &di_bh, 0); 1335 had_lock = ocfs2_inode_lock_tracker(inode, &di_bh, 0, &oh);
1335 if (ret < 0) { 1336 if (had_lock < 0) {
1336 mlog_errno(ret); 1337 mlog_errno(had_lock);
1337 return ret; 1338 return had_lock;
1338 } 1339 }
1339 down_read(&OCFS2_I(inode)->ip_xattr_sem); 1340 down_read(&OCFS2_I(inode)->ip_xattr_sem);
1340 ret = ocfs2_xattr_get_nolock(inode, di_bh, name_index, 1341 ret = ocfs2_xattr_get_nolock(inode, di_bh, name_index,
1341 name, buffer, buffer_size); 1342 name, buffer, buffer_size);
1342 up_read(&OCFS2_I(inode)->ip_xattr_sem); 1343 up_read(&OCFS2_I(inode)->ip_xattr_sem);
1343 1344
1344 ocfs2_inode_unlock(inode, 0); 1345 ocfs2_inode_unlock_tracker(inode, 0, &oh, had_lock);
1345 1346
1346 brelse(di_bh); 1347 brelse(di_bh);
1347 1348
@@ -3537,11 +3538,12 @@ int ocfs2_xattr_set(struct inode *inode,
3537{ 3538{
3538 struct buffer_head *di_bh = NULL; 3539 struct buffer_head *di_bh = NULL;
3539 struct ocfs2_dinode *di; 3540 struct ocfs2_dinode *di;
3540 int ret, credits, ref_meta = 0, ref_credits = 0; 3541 int ret, credits, had_lock, ref_meta = 0, ref_credits = 0;
3541 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 3542 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
3542 struct inode *tl_inode = osb->osb_tl_inode; 3543 struct inode *tl_inode = osb->osb_tl_inode;
3543 struct ocfs2_xattr_set_ctxt ctxt = { NULL, NULL, NULL, }; 3544 struct ocfs2_xattr_set_ctxt ctxt = { NULL, NULL, NULL, };
3544 struct ocfs2_refcount_tree *ref_tree = NULL; 3545 struct ocfs2_refcount_tree *ref_tree = NULL;
3546 struct ocfs2_lock_holder oh;
3545 3547
3546 struct ocfs2_xattr_info xi = { 3548 struct ocfs2_xattr_info xi = {
3547 .xi_name_index = name_index, 3549 .xi_name_index = name_index,
@@ -3572,8 +3574,9 @@ int ocfs2_xattr_set(struct inode *inode,
3572 return -ENOMEM; 3574 return -ENOMEM;
3573 } 3575 }
3574 3576
3575 ret = ocfs2_inode_lock(inode, &di_bh, 1); 3577 had_lock = ocfs2_inode_lock_tracker(inode, &di_bh, 1, &oh);
3576 if (ret < 0) { 3578 if (had_lock < 0) {
3579 ret = had_lock;
3577 mlog_errno(ret); 3580 mlog_errno(ret);
3578 goto cleanup_nolock; 3581 goto cleanup_nolock;
3579 } 3582 }
@@ -3670,7 +3673,7 @@ cleanup:
3670 if (ret) 3673 if (ret)
3671 mlog_errno(ret); 3674 mlog_errno(ret);
3672 } 3675 }
3673 ocfs2_inode_unlock(inode, 1); 3676 ocfs2_inode_unlock_tracker(inode, 1, &oh, had_lock);
3674cleanup_nolock: 3677cleanup_nolock:
3675 brelse(di_bh); 3678 brelse(di_bh);
3676 brelse(xbs.xattr_bh); 3679 brelse(xbs.xattr_bh);
diff --git a/fs/overlayfs/Kconfig b/fs/overlayfs/Kconfig
index 0daac5112f7a..c0c9683934b7 100644
--- a/fs/overlayfs/Kconfig
+++ b/fs/overlayfs/Kconfig
@@ -1,5 +1,6 @@
1config OVERLAY_FS 1config OVERLAY_FS
2 tristate "Overlay filesystem support" 2 tristate "Overlay filesystem support"
3 select EXPORTFS
3 help 4 help
4 An overlay filesystem combines two filesystems - an 'upper' filesystem 5 An overlay filesystem combines two filesystems - an 'upper' filesystem
5 and a 'lower' filesystem. When a name exists in both filesystems, the 6 and a 'lower' filesystem. When a name exists in both filesystems, the
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index 9008ab9fbd2e..a2a65120c9d0 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -300,7 +300,11 @@ static int ovl_set_origin(struct dentry *dentry, struct dentry *lower,
300 return PTR_ERR(fh); 300 return PTR_ERR(fh);
301 } 301 }
302 302
303 err = ovl_do_setxattr(upper, OVL_XATTR_ORIGIN, fh, fh ? fh->len : 0, 0); 303 /*
304 * Do not fail when upper doesn't support xattrs.
305 */
306 err = ovl_check_setxattr(dentry, upper, OVL_XATTR_ORIGIN, fh,
307 fh ? fh->len : 0, 0);
304 kfree(fh); 308 kfree(fh);
305 309
306 return err; 310 return err;
@@ -326,15 +330,9 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
326 .link = link 330 .link = link
327 }; 331 };
328 332
329 upper = lookup_one_len(dentry->d_name.name, upperdir,
330 dentry->d_name.len);
331 err = PTR_ERR(upper);
332 if (IS_ERR(upper))
333 goto out;
334
335 err = security_inode_copy_up(dentry, &new_creds); 333 err = security_inode_copy_up(dentry, &new_creds);
336 if (err < 0) 334 if (err < 0)
337 goto out1; 335 goto out;
338 336
339 if (new_creds) 337 if (new_creds)
340 old_creds = override_creds(new_creds); 338 old_creds = override_creds(new_creds);
@@ -342,13 +340,14 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
342 if (tmpfile) 340 if (tmpfile)
343 temp = ovl_do_tmpfile(upperdir, stat->mode); 341 temp = ovl_do_tmpfile(upperdir, stat->mode);
344 else 342 else
345 temp = ovl_lookup_temp(workdir, dentry); 343 temp = ovl_lookup_temp(workdir);
346 err = PTR_ERR(temp);
347 if (IS_ERR(temp))
348 goto out1;
349
350 err = 0; 344 err = 0;
351 if (!tmpfile) 345 if (IS_ERR(temp)) {
346 err = PTR_ERR(temp);
347 temp = NULL;
348 }
349
350 if (!err && !tmpfile)
352 err = ovl_create_real(wdir, temp, &cattr, NULL, true); 351 err = ovl_create_real(wdir, temp, &cattr, NULL, true);
353 352
354 if (new_creds) { 353 if (new_creds) {
@@ -357,7 +356,7 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
357 } 356 }
358 357
359 if (err) 358 if (err)
360 goto out2; 359 goto out;
361 360
362 if (S_ISREG(stat->mode)) { 361 if (S_ISREG(stat->mode)) {
363 struct path upperpath; 362 struct path upperpath;
@@ -393,10 +392,23 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
393 /* 392 /*
394 * Store identifier of lower inode in upper inode xattr to 393 * Store identifier of lower inode in upper inode xattr to
395 * allow lookup of the copy up origin inode. 394 * allow lookup of the copy up origin inode.
395 *
396 * Don't set origin when we are breaking the association with a lower
397 * hard link.
396 */ 398 */
397 err = ovl_set_origin(dentry, lowerpath->dentry, temp); 399 if (S_ISDIR(stat->mode) || stat->nlink == 1) {
398 if (err) 400 err = ovl_set_origin(dentry, lowerpath->dentry, temp);
401 if (err)
402 goto out_cleanup;
403 }
404
405 upper = lookup_one_len(dentry->d_name.name, upperdir,
406 dentry->d_name.len);
407 if (IS_ERR(upper)) {
408 err = PTR_ERR(upper);
409 upper = NULL;
399 goto out_cleanup; 410 goto out_cleanup;
411 }
400 412
401 if (tmpfile) 413 if (tmpfile)
402 err = ovl_do_link(temp, udir, upper, true); 414 err = ovl_do_link(temp, udir, upper, true);
@@ -411,17 +423,15 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
411 423
412 /* Restore timestamps on parent (best effort) */ 424 /* Restore timestamps on parent (best effort) */
413 ovl_set_timestamps(upperdir, pstat); 425 ovl_set_timestamps(upperdir, pstat);
414out2: 426out:
415 dput(temp); 427 dput(temp);
416out1:
417 dput(upper); 428 dput(upper);
418out:
419 return err; 429 return err;
420 430
421out_cleanup: 431out_cleanup:
422 if (!tmpfile) 432 if (!tmpfile)
423 ovl_cleanup(wdir, temp); 433 ovl_cleanup(wdir, temp);
424 goto out2; 434 goto out;
425} 435}
426 436
427/* 437/*
@@ -454,6 +464,11 @@ static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry,
454 ovl_path_upper(parent, &parentpath); 464 ovl_path_upper(parent, &parentpath);
455 upperdir = parentpath.dentry; 465 upperdir = parentpath.dentry;
456 466
467 /* Mark parent "impure" because it may now contain non-pure upper */
468 err = ovl_set_impure(parent, upperdir);
469 if (err)
470 return err;
471
457 err = vfs_getattr(&parentpath, &pstat, 472 err = vfs_getattr(&parentpath, &pstat,
458 STATX_ATIME | STATX_MTIME, AT_STATX_SYNC_AS_STAT); 473 STATX_ATIME | STATX_MTIME, AT_STATX_SYNC_AS_STAT);
459 if (err) 474 if (err)
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
index 723b98b90698..a63a71656e9b 100644
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -41,7 +41,7 @@ void ovl_cleanup(struct inode *wdir, struct dentry *wdentry)
41 } 41 }
42} 42}
43 43
44struct dentry *ovl_lookup_temp(struct dentry *workdir, struct dentry *dentry) 44struct dentry *ovl_lookup_temp(struct dentry *workdir)
45{ 45{
46 struct dentry *temp; 46 struct dentry *temp;
47 char name[20]; 47 char name[20];
@@ -68,7 +68,7 @@ static struct dentry *ovl_whiteout(struct dentry *workdir,
68 struct dentry *whiteout; 68 struct dentry *whiteout;
69 struct inode *wdir = workdir->d_inode; 69 struct inode *wdir = workdir->d_inode;
70 70
71 whiteout = ovl_lookup_temp(workdir, dentry); 71 whiteout = ovl_lookup_temp(workdir);
72 if (IS_ERR(whiteout)) 72 if (IS_ERR(whiteout))
73 return whiteout; 73 return whiteout;
74 74
@@ -127,17 +127,28 @@ int ovl_create_real(struct inode *dir, struct dentry *newdentry,
127 return err; 127 return err;
128} 128}
129 129
130static int ovl_set_opaque(struct dentry *dentry, struct dentry *upperdentry) 130static int ovl_set_opaque_xerr(struct dentry *dentry, struct dentry *upper,
131 int xerr)
131{ 132{
132 int err; 133 int err;
133 134
134 err = ovl_do_setxattr(upperdentry, OVL_XATTR_OPAQUE, "y", 1, 0); 135 err = ovl_check_setxattr(dentry, upper, OVL_XATTR_OPAQUE, "y", 1, xerr);
135 if (!err) 136 if (!err)
136 ovl_dentry_set_opaque(dentry); 137 ovl_dentry_set_opaque(dentry);
137 138
138 return err; 139 return err;
139} 140}
140 141
142static int ovl_set_opaque(struct dentry *dentry, struct dentry *upperdentry)
143{
144 /*
145 * Fail with -EIO when trying to create opaque dir and upper doesn't
146 * support xattrs. ovl_rename() calls ovl_set_opaque_xerr(-EXDEV) to
147 * return a specific error for noxattr case.
148 */
149 return ovl_set_opaque_xerr(dentry, upperdentry, -EIO);
150}
151
141/* Common operations required to be done after creation of file on upper */ 152/* Common operations required to be done after creation of file on upper */
142static void ovl_instantiate(struct dentry *dentry, struct inode *inode, 153static void ovl_instantiate(struct dentry *dentry, struct inode *inode,
143 struct dentry *newdentry, bool hardlink) 154 struct dentry *newdentry, bool hardlink)
@@ -162,6 +173,11 @@ static bool ovl_type_merge(struct dentry *dentry)
162 return OVL_TYPE_MERGE(ovl_path_type(dentry)); 173 return OVL_TYPE_MERGE(ovl_path_type(dentry));
163} 174}
164 175
176static bool ovl_type_origin(struct dentry *dentry)
177{
178 return OVL_TYPE_ORIGIN(ovl_path_type(dentry));
179}
180
165static int ovl_create_upper(struct dentry *dentry, struct inode *inode, 181static int ovl_create_upper(struct dentry *dentry, struct inode *inode,
166 struct cattr *attr, struct dentry *hardlink) 182 struct cattr *attr, struct dentry *hardlink)
167{ 183{
@@ -250,7 +266,7 @@ static struct dentry *ovl_clear_empty(struct dentry *dentry,
250 if (upper->d_parent->d_inode != udir) 266 if (upper->d_parent->d_inode != udir)
251 goto out_unlock; 267 goto out_unlock;
252 268
253 opaquedir = ovl_lookup_temp(workdir, dentry); 269 opaquedir = ovl_lookup_temp(workdir);
254 err = PTR_ERR(opaquedir); 270 err = PTR_ERR(opaquedir);
255 if (IS_ERR(opaquedir)) 271 if (IS_ERR(opaquedir))
256 goto out_unlock; 272 goto out_unlock;
@@ -382,7 +398,7 @@ static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode,
382 if (err) 398 if (err)
383 goto out; 399 goto out;
384 400
385 newdentry = ovl_lookup_temp(workdir, dentry); 401 newdentry = ovl_lookup_temp(workdir);
386 err = PTR_ERR(newdentry); 402 err = PTR_ERR(newdentry);
387 if (IS_ERR(newdentry)) 403 if (IS_ERR(newdentry))
388 goto out_unlock; 404 goto out_unlock;
@@ -846,18 +862,16 @@ static int ovl_set_redirect(struct dentry *dentry, bool samedir)
846 if (IS_ERR(redirect)) 862 if (IS_ERR(redirect))
847 return PTR_ERR(redirect); 863 return PTR_ERR(redirect);
848 864
849 err = ovl_do_setxattr(ovl_dentry_upper(dentry), OVL_XATTR_REDIRECT, 865 err = ovl_check_setxattr(dentry, ovl_dentry_upper(dentry),
850 redirect, strlen(redirect), 0); 866 OVL_XATTR_REDIRECT,
867 redirect, strlen(redirect), -EXDEV);
851 if (!err) { 868 if (!err) {
852 spin_lock(&dentry->d_lock); 869 spin_lock(&dentry->d_lock);
853 ovl_dentry_set_redirect(dentry, redirect); 870 ovl_dentry_set_redirect(dentry, redirect);
854 spin_unlock(&dentry->d_lock); 871 spin_unlock(&dentry->d_lock);
855 } else { 872 } else {
856 kfree(redirect); 873 kfree(redirect);
857 if (err == -EOPNOTSUPP) 874 pr_warn_ratelimited("overlay: failed to set redirect (%i)\n", err);
858 ovl_clear_redirect_dir(dentry->d_sb);
859 else
860 pr_warn_ratelimited("overlay: failed to set redirect (%i)\n", err);
861 /* Fall back to userspace copy-up */ 875 /* Fall back to userspace copy-up */
862 err = -EXDEV; 876 err = -EXDEV;
863 } 877 }
@@ -943,6 +957,25 @@ static int ovl_rename(struct inode *olddir, struct dentry *old,
943 old_upperdir = ovl_dentry_upper(old->d_parent); 957 old_upperdir = ovl_dentry_upper(old->d_parent);
944 new_upperdir = ovl_dentry_upper(new->d_parent); 958 new_upperdir = ovl_dentry_upper(new->d_parent);
945 959
960 if (!samedir) {
961 /*
962 * When moving a merge dir or non-dir with copy up origin into
963 * a new parent, we are marking the new parent dir "impure".
964 * When ovl_iterate() iterates an "impure" upper dir, it will
965 * lookup the origin inodes of the entries to fill d_ino.
966 */
967 if (ovl_type_origin(old)) {
968 err = ovl_set_impure(new->d_parent, new_upperdir);
969 if (err)
970 goto out_revert_creds;
971 }
972 if (!overwrite && ovl_type_origin(new)) {
973 err = ovl_set_impure(old->d_parent, old_upperdir);
974 if (err)
975 goto out_revert_creds;
976 }
977 }
978
946 trap = lock_rename(new_upperdir, old_upperdir); 979 trap = lock_rename(new_upperdir, old_upperdir);
947 980
948 olddentry = lookup_one_len(old->d_name.name, old_upperdir, 981 olddentry = lookup_one_len(old->d_name.name, old_upperdir,
@@ -992,7 +1025,7 @@ static int ovl_rename(struct inode *olddir, struct dentry *old,
992 if (ovl_type_merge_or_lower(old)) 1025 if (ovl_type_merge_or_lower(old))
993 err = ovl_set_redirect(old, samedir); 1026 err = ovl_set_redirect(old, samedir);
994 else if (!old_opaque && ovl_type_merge(new->d_parent)) 1027 else if (!old_opaque && ovl_type_merge(new->d_parent))
995 err = ovl_set_opaque(old, olddentry); 1028 err = ovl_set_opaque_xerr(old, olddentry, -EXDEV);
996 if (err) 1029 if (err)
997 goto out_dput; 1030 goto out_dput;
998 } 1031 }
@@ -1000,7 +1033,7 @@ static int ovl_rename(struct inode *olddir, struct dentry *old,
1000 if (ovl_type_merge_or_lower(new)) 1033 if (ovl_type_merge_or_lower(new))
1001 err = ovl_set_redirect(new, samedir); 1034 err = ovl_set_redirect(new, samedir);
1002 else if (!new_opaque && ovl_type_merge(old->d_parent)) 1035 else if (!new_opaque && ovl_type_merge(old->d_parent))
1003 err = ovl_set_opaque(new, newdentry); 1036 err = ovl_set_opaque_xerr(new, newdentry, -EXDEV);
1004 if (err) 1037 if (err)
1005 goto out_dput; 1038 goto out_dput;
1006 } 1039 }
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index ad9547f82da5..d613e2c41242 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -240,6 +240,16 @@ int ovl_xattr_get(struct dentry *dentry, const char *name,
240 return res; 240 return res;
241} 241}
242 242
243static bool ovl_can_list(const char *s)
244{
245 /* List all non-trusted xatts */
246 if (strncmp(s, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) != 0)
247 return true;
248
249 /* Never list trusted.overlay, list other trusted for superuser only */
250 return !ovl_is_private_xattr(s) && capable(CAP_SYS_ADMIN);
251}
252
243ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size) 253ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size)
244{ 254{
245 struct dentry *realdentry = ovl_dentry_real(dentry); 255 struct dentry *realdentry = ovl_dentry_real(dentry);
@@ -263,7 +273,7 @@ ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size)
263 return -EIO; 273 return -EIO;
264 274
265 len -= slen; 275 len -= slen;
266 if (ovl_is_private_xattr(s)) { 276 if (!ovl_can_list(s)) {
267 res -= slen; 277 res -= slen;
268 memmove(s, s + slen, len); 278 memmove(s, s + slen, len);
269 } else { 279 } else {
diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c
index bad0f665a635..f3136c31e72a 100644
--- a/fs/overlayfs/namei.c
+++ b/fs/overlayfs/namei.c
@@ -169,17 +169,7 @@ invalid:
169 169
170static bool ovl_is_opaquedir(struct dentry *dentry) 170static bool ovl_is_opaquedir(struct dentry *dentry)
171{ 171{
172 int res; 172 return ovl_check_dir_xattr(dentry, OVL_XATTR_OPAQUE);
173 char val;
174
175 if (!d_is_dir(dentry))
176 return false;
177
178 res = vfs_getxattr(dentry, OVL_XATTR_OPAQUE, &val, 1);
179 if (res == 1 && val == 'y')
180 return true;
181
182 return false;
183} 173}
184 174
185static int ovl_lookup_single(struct dentry *base, struct ovl_lookup_data *d, 175static int ovl_lookup_single(struct dentry *base, struct ovl_lookup_data *d,
@@ -351,6 +341,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
351 unsigned int ctr = 0; 341 unsigned int ctr = 0;
352 struct inode *inode = NULL; 342 struct inode *inode = NULL;
353 bool upperopaque = false; 343 bool upperopaque = false;
344 bool upperimpure = false;
354 char *upperredirect = NULL; 345 char *upperredirect = NULL;
355 struct dentry *this; 346 struct dentry *this;
356 unsigned int i; 347 unsigned int i;
@@ -395,6 +386,8 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
395 poe = roe; 386 poe = roe;
396 } 387 }
397 upperopaque = d.opaque; 388 upperopaque = d.opaque;
389 if (upperdentry && d.is_dir)
390 upperimpure = ovl_is_impuredir(upperdentry);
398 } 391 }
399 392
400 if (!d.stop && poe->numlower) { 393 if (!d.stop && poe->numlower) {
@@ -463,6 +456,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
463 456
464 revert_creds(old_cred); 457 revert_creds(old_cred);
465 oe->opaque = upperopaque; 458 oe->opaque = upperopaque;
459 oe->impure = upperimpure;
466 oe->redirect = upperredirect; 460 oe->redirect = upperredirect;
467 oe->__upperdentry = upperdentry; 461 oe->__upperdentry = upperdentry;
468 memcpy(oe->lowerstack, stack, sizeof(struct path) * ctr); 462 memcpy(oe->lowerstack, stack, sizeof(struct path) * ctr);
diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h
index caa36cb9c46d..0623cebeefff 100644
--- a/fs/overlayfs/overlayfs.h
+++ b/fs/overlayfs/overlayfs.h
@@ -24,6 +24,7 @@ enum ovl_path_type {
24#define OVL_XATTR_OPAQUE OVL_XATTR_PREFIX "opaque" 24#define OVL_XATTR_OPAQUE OVL_XATTR_PREFIX "opaque"
25#define OVL_XATTR_REDIRECT OVL_XATTR_PREFIX "redirect" 25#define OVL_XATTR_REDIRECT OVL_XATTR_PREFIX "redirect"
26#define OVL_XATTR_ORIGIN OVL_XATTR_PREFIX "origin" 26#define OVL_XATTR_ORIGIN OVL_XATTR_PREFIX "origin"
27#define OVL_XATTR_IMPURE OVL_XATTR_PREFIX "impure"
27 28
28/* 29/*
29 * The tuple (fh,uuid) is a universal unique identifier for a copy up origin, 30 * The tuple (fh,uuid) is a universal unique identifier for a copy up origin,
@@ -203,10 +204,10 @@ struct dentry *ovl_dentry_real(struct dentry *dentry);
203struct ovl_dir_cache *ovl_dir_cache(struct dentry *dentry); 204struct ovl_dir_cache *ovl_dir_cache(struct dentry *dentry);
204void ovl_set_dir_cache(struct dentry *dentry, struct ovl_dir_cache *cache); 205void ovl_set_dir_cache(struct dentry *dentry, struct ovl_dir_cache *cache);
205bool ovl_dentry_is_opaque(struct dentry *dentry); 206bool ovl_dentry_is_opaque(struct dentry *dentry);
207bool ovl_dentry_is_impure(struct dentry *dentry);
206bool ovl_dentry_is_whiteout(struct dentry *dentry); 208bool ovl_dentry_is_whiteout(struct dentry *dentry);
207void ovl_dentry_set_opaque(struct dentry *dentry); 209void ovl_dentry_set_opaque(struct dentry *dentry);
208bool ovl_redirect_dir(struct super_block *sb); 210bool ovl_redirect_dir(struct super_block *sb);
209void ovl_clear_redirect_dir(struct super_block *sb);
210const char *ovl_dentry_get_redirect(struct dentry *dentry); 211const char *ovl_dentry_get_redirect(struct dentry *dentry);
211void ovl_dentry_set_redirect(struct dentry *dentry, const char *redirect); 212void ovl_dentry_set_redirect(struct dentry *dentry, const char *redirect);
212void ovl_dentry_update(struct dentry *dentry, struct dentry *upperdentry); 213void ovl_dentry_update(struct dentry *dentry, struct dentry *upperdentry);
@@ -219,6 +220,17 @@ bool ovl_is_whiteout(struct dentry *dentry);
219struct file *ovl_path_open(struct path *path, int flags); 220struct file *ovl_path_open(struct path *path, int flags);
220int ovl_copy_up_start(struct dentry *dentry); 221int ovl_copy_up_start(struct dentry *dentry);
221void ovl_copy_up_end(struct dentry *dentry); 222void ovl_copy_up_end(struct dentry *dentry);
223bool ovl_check_dir_xattr(struct dentry *dentry, const char *name);
224int ovl_check_setxattr(struct dentry *dentry, struct dentry *upperdentry,
225 const char *name, const void *value, size_t size,
226 int xerr);
227int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry);
228
229static inline bool ovl_is_impuredir(struct dentry *dentry)
230{
231 return ovl_check_dir_xattr(dentry, OVL_XATTR_IMPURE);
232}
233
222 234
223/* namei.c */ 235/* namei.c */
224int ovl_path_next(int idx, struct dentry *dentry, struct path *path); 236int ovl_path_next(int idx, struct dentry *dentry, struct path *path);
@@ -263,7 +275,7 @@ static inline void ovl_copyattr(struct inode *from, struct inode *to)
263 275
264/* dir.c */ 276/* dir.c */
265extern const struct inode_operations ovl_dir_inode_operations; 277extern const struct inode_operations ovl_dir_inode_operations;
266struct dentry *ovl_lookup_temp(struct dentry *workdir, struct dentry *dentry); 278struct dentry *ovl_lookup_temp(struct dentry *workdir);
267struct cattr { 279struct cattr {
268 dev_t rdev; 280 dev_t rdev;
269 umode_t mode; 281 umode_t mode;
diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h
index b2023ddb8532..34bc4a9f5c61 100644
--- a/fs/overlayfs/ovl_entry.h
+++ b/fs/overlayfs/ovl_entry.h
@@ -28,6 +28,7 @@ struct ovl_fs {
28 /* creds of process who forced instantiation of super block */ 28 /* creds of process who forced instantiation of super block */
29 const struct cred *creator_cred; 29 const struct cred *creator_cred;
30 bool tmpfile; 30 bool tmpfile;
31 bool noxattr;
31 wait_queue_head_t copyup_wq; 32 wait_queue_head_t copyup_wq;
32 /* sb common to all layers */ 33 /* sb common to all layers */
33 struct super_block *same_sb; 34 struct super_block *same_sb;
@@ -42,6 +43,7 @@ struct ovl_entry {
42 u64 version; 43 u64 version;
43 const char *redirect; 44 const char *redirect;
44 bool opaque; 45 bool opaque;
46 bool impure;
45 bool copying; 47 bool copying;
46 }; 48 };
47 struct rcu_head rcu; 49 struct rcu_head rcu;
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index 9828b7de8999..4882ffb37bae 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -891,6 +891,19 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
891 dput(temp); 891 dput(temp);
892 else 892 else
893 pr_warn("overlayfs: upper fs does not support tmpfile.\n"); 893 pr_warn("overlayfs: upper fs does not support tmpfile.\n");
894
895 /*
896 * Check if upper/work fs supports trusted.overlay.*
897 * xattr
898 */
899 err = ovl_do_setxattr(ufs->workdir, OVL_XATTR_OPAQUE,
900 "0", 1, 0);
901 if (err) {
902 ufs->noxattr = true;
903 pr_warn("overlayfs: upper fs does not support xattr.\n");
904 } else {
905 vfs_removexattr(ufs->workdir, OVL_XATTR_OPAQUE);
906 }
894 } 907 }
895 } 908 }
896 909
@@ -961,7 +974,10 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
961 path_put(&workpath); 974 path_put(&workpath);
962 kfree(lowertmp); 975 kfree(lowertmp);
963 976
964 oe->__upperdentry = upperpath.dentry; 977 if (upperpath.dentry) {
978 oe->__upperdentry = upperpath.dentry;
979 oe->impure = ovl_is_impuredir(upperpath.dentry);
980 }
965 for (i = 0; i < numlower; i++) { 981 for (i = 0; i < numlower; i++) {
966 oe->lowerstack[i].dentry = stack[i].dentry; 982 oe->lowerstack[i].dentry = stack[i].dentry;
967 oe->lowerstack[i].mnt = ufs->lower_mnt[i]; 983 oe->lowerstack[i].mnt = ufs->lower_mnt[i];
diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c
index cfdea47313a1..809048913889 100644
--- a/fs/overlayfs/util.c
+++ b/fs/overlayfs/util.c
@@ -175,6 +175,13 @@ bool ovl_dentry_is_opaque(struct dentry *dentry)
175 return oe->opaque; 175 return oe->opaque;
176} 176}
177 177
178bool ovl_dentry_is_impure(struct dentry *dentry)
179{
180 struct ovl_entry *oe = dentry->d_fsdata;
181
182 return oe->impure;
183}
184
178bool ovl_dentry_is_whiteout(struct dentry *dentry) 185bool ovl_dentry_is_whiteout(struct dentry *dentry)
179{ 186{
180 return !dentry->d_inode && ovl_dentry_is_opaque(dentry); 187 return !dentry->d_inode && ovl_dentry_is_opaque(dentry);
@@ -191,14 +198,7 @@ bool ovl_redirect_dir(struct super_block *sb)
191{ 198{
192 struct ovl_fs *ofs = sb->s_fs_info; 199 struct ovl_fs *ofs = sb->s_fs_info;
193 200
194 return ofs->config.redirect_dir; 201 return ofs->config.redirect_dir && !ofs->noxattr;
195}
196
197void ovl_clear_redirect_dir(struct super_block *sb)
198{
199 struct ovl_fs *ofs = sb->s_fs_info;
200
201 ofs->config.redirect_dir = false;
202} 202}
203 203
204const char *ovl_dentry_get_redirect(struct dentry *dentry) 204const char *ovl_dentry_get_redirect(struct dentry *dentry)
@@ -303,3 +303,59 @@ void ovl_copy_up_end(struct dentry *dentry)
303 wake_up_locked(&ofs->copyup_wq); 303 wake_up_locked(&ofs->copyup_wq);
304 spin_unlock(&ofs->copyup_wq.lock); 304 spin_unlock(&ofs->copyup_wq.lock);
305} 305}
306
307bool ovl_check_dir_xattr(struct dentry *dentry, const char *name)
308{
309 int res;
310 char val;
311
312 if (!d_is_dir(dentry))
313 return false;
314
315 res = vfs_getxattr(dentry, name, &val, 1);
316 if (res == 1 && val == 'y')
317 return true;
318
319 return false;
320}
321
322int ovl_check_setxattr(struct dentry *dentry, struct dentry *upperdentry,
323 const char *name, const void *value, size_t size,
324 int xerr)
325{
326 int err;
327 struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
328
329 if (ofs->noxattr)
330 return xerr;
331
332 err = ovl_do_setxattr(upperdentry, name, value, size, 0);
333
334 if (err == -EOPNOTSUPP) {
335 pr_warn("overlayfs: cannot set %s xattr on upper\n", name);
336 ofs->noxattr = true;
337 return xerr;
338 }
339
340 return err;
341}
342
343int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry)
344{
345 int err;
346 struct ovl_entry *oe = dentry->d_fsdata;
347
348 if (oe->impure)
349 return 0;
350
351 /*
352 * Do not fail when upper doesn't support xattrs.
353 * Upper inodes won't have origin nor redirect xattr anyway.
354 */
355 err = ovl_check_setxattr(dentry, upperdentry, OVL_XATTR_IMPURE,
356 "y", 1, 0);
357 if (!err)
358 oe->impure = true;
359
360 return err;
361}
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 45f6bf68fff3..f1e1927ccd48 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -821,7 +821,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
821 if (!mmget_not_zero(mm)) 821 if (!mmget_not_zero(mm))
822 goto free; 822 goto free;
823 823
824 flags = write ? FOLL_WRITE : 0; 824 flags = FOLL_FORCE | (write ? FOLL_WRITE : 0);
825 825
826 while (count > 0) { 826 while (count > 0) {
827 int this_len = min_t(int, count, PAGE_SIZE); 827 int this_len = min_t(int, count, PAGE_SIZE);
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index f0c8b33d99b1..520802da059c 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -300,11 +300,7 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
300 300
301 /* We don't show the stack guard page in /proc/maps */ 301 /* We don't show the stack guard page in /proc/maps */
302 start = vma->vm_start; 302 start = vma->vm_start;
303 if (stack_guard_page_start(vma, start))
304 start += PAGE_SIZE;
305 end = vma->vm_end; 303 end = vma->vm_end;
306 if (stack_guard_page_end(vma, end))
307 end -= PAGE_SIZE;
308 304
309 seq_setwidth(m, 25 + sizeof(void *) * 6 - 1); 305 seq_setwidth(m, 25 + sizeof(void *) * 6 - 1);
310 seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu ", 306 seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu ",
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index ebf80c7739e1..48813aeaab80 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -1512,6 +1512,22 @@ int dquot_initialize(struct inode *inode)
1512} 1512}
1513EXPORT_SYMBOL(dquot_initialize); 1513EXPORT_SYMBOL(dquot_initialize);
1514 1514
1515bool dquot_initialize_needed(struct inode *inode)
1516{
1517 struct dquot **dquots;
1518 int i;
1519
1520 if (!dquot_active(inode))
1521 return false;
1522
1523 dquots = i_dquot(inode);
1524 for (i = 0; i < MAXQUOTAS; i++)
1525 if (!dquots[i] && sb_has_quota_active(inode->i_sb, i))
1526 return true;
1527 return false;
1528}
1529EXPORT_SYMBOL(dquot_initialize_needed);
1530
1515/* 1531/*
1516 * Release all quotas referenced by inode. 1532 * Release all quotas referenced by inode.
1517 * 1533 *
diff --git a/fs/read_write.c b/fs/read_write.c
index 47c1d4484df9..19d4d88fa285 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -1285,7 +1285,7 @@ static size_t compat_writev(struct file *file,
1285 if (!(file->f_mode & FMODE_CAN_WRITE)) 1285 if (!(file->f_mode & FMODE_CAN_WRITE))
1286 goto out; 1286 goto out;
1287 1287
1288 ret = compat_do_readv_writev(WRITE, file, vec, vlen, pos, 0); 1288 ret = compat_do_readv_writev(WRITE, file, vec, vlen, pos, flags);
1289 1289
1290out: 1290out:
1291 if (ret > 0) 1291 if (ret > 0)
diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c
index da01f497180a..39bb1e838d8d 100644
--- a/fs/reiserfs/journal.c
+++ b/fs/reiserfs/journal.c
@@ -1112,7 +1112,7 @@ static int flush_commit_list(struct super_block *s,
1112 depth = reiserfs_write_unlock_nested(s); 1112 depth = reiserfs_write_unlock_nested(s);
1113 if (reiserfs_barrier_flush(s)) 1113 if (reiserfs_barrier_flush(s))
1114 __sync_dirty_buffer(jl->j_commit_bh, 1114 __sync_dirty_buffer(jl->j_commit_bh,
1115 REQ_PREFLUSH | REQ_FUA); 1115 REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
1116 else 1116 else
1117 sync_dirty_buffer(jl->j_commit_bh); 1117 sync_dirty_buffer(jl->j_commit_bh);
1118 reiserfs_write_lock_nested(s, depth); 1118 reiserfs_write_lock_nested(s, depth);
@@ -1271,7 +1271,7 @@ static int _update_journal_header_block(struct super_block *sb,
1271 1271
1272 if (reiserfs_barrier_flush(sb)) 1272 if (reiserfs_barrier_flush(sb))
1273 __sync_dirty_buffer(journal->j_header_bh, 1273 __sync_dirty_buffer(journal->j_header_bh,
1274 REQ_PREFLUSH | REQ_FUA); 1274 REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
1275 else 1275 else
1276 sync_dirty_buffer(journal->j_header_bh); 1276 sync_dirty_buffer(journal->j_header_bh);
1277 1277
diff --git a/fs/stat.c b/fs/stat.c
index f494b182c7c7..c35610845ab1 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -672,6 +672,7 @@ void __inode_add_bytes(struct inode *inode, loff_t bytes)
672 inode->i_bytes -= 512; 672 inode->i_bytes -= 512;
673 } 673 }
674} 674}
675EXPORT_SYMBOL(__inode_add_bytes);
675 676
676void inode_add_bytes(struct inode *inode, loff_t bytes) 677void inode_add_bytes(struct inode *inode, loff_t bytes)
677{ 678{
diff --git a/fs/ufs/balloc.c b/fs/ufs/balloc.c
index a0376a2c1c29..f80be4c5df9d 100644
--- a/fs/ufs/balloc.c
+++ b/fs/ufs/balloc.c
@@ -82,7 +82,8 @@ void ufs_free_fragments(struct inode *inode, u64 fragment, unsigned count)
82 ufs_error (sb, "ufs_free_fragments", 82 ufs_error (sb, "ufs_free_fragments",
83 "bit already cleared for fragment %u", i); 83 "bit already cleared for fragment %u", i);
84 } 84 }
85 85
86 inode_sub_bytes(inode, count << uspi->s_fshift);
86 fs32_add(sb, &ucg->cg_cs.cs_nffree, count); 87 fs32_add(sb, &ucg->cg_cs.cs_nffree, count);
87 uspi->cs_total.cs_nffree += count; 88 uspi->cs_total.cs_nffree += count;
88 fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, count); 89 fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, count);
@@ -184,6 +185,7 @@ do_more:
184 ufs_error(sb, "ufs_free_blocks", "freeing free fragment"); 185 ufs_error(sb, "ufs_free_blocks", "freeing free fragment");
185 } 186 }
186 ubh_setblock(UCPI_UBH(ucpi), ucpi->c_freeoff, blkno); 187 ubh_setblock(UCPI_UBH(ucpi), ucpi->c_freeoff, blkno);
188 inode_sub_bytes(inode, uspi->s_fpb << uspi->s_fshift);
187 if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD) 189 if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
188 ufs_clusteracct (sb, ucpi, blkno, 1); 190 ufs_clusteracct (sb, ucpi, blkno, 1);
189 191
@@ -398,10 +400,12 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
398 /* 400 /*
399 * There is not enough space for user on the device 401 * There is not enough space for user on the device
400 */ 402 */
401 if (!capable(CAP_SYS_RESOURCE) && ufs_freespace(uspi, UFS_MINFREE) <= 0) { 403 if (unlikely(ufs_freefrags(uspi) <= uspi->s_root_blocks)) {
402 mutex_unlock(&UFS_SB(sb)->s_lock); 404 if (!capable(CAP_SYS_RESOURCE)) {
403 UFSD("EXIT (FAILED)\n"); 405 mutex_unlock(&UFS_SB(sb)->s_lock);
404 return 0; 406 UFSD("EXIT (FAILED)\n");
407 return 0;
408 }
405 } 409 }
406 410
407 if (goal >= uspi->s_size) 411 if (goal >= uspi->s_size)
@@ -419,12 +423,12 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
419 if (result) { 423 if (result) {
420 ufs_clear_frags(inode, result + oldcount, 424 ufs_clear_frags(inode, result + oldcount,
421 newcount - oldcount, locked_page != NULL); 425 newcount - oldcount, locked_page != NULL);
426 *err = 0;
422 write_seqlock(&UFS_I(inode)->meta_lock); 427 write_seqlock(&UFS_I(inode)->meta_lock);
423 ufs_cpu_to_data_ptr(sb, p, result); 428 ufs_cpu_to_data_ptr(sb, p, result);
424 write_sequnlock(&UFS_I(inode)->meta_lock);
425 *err = 0;
426 UFS_I(inode)->i_lastfrag = 429 UFS_I(inode)->i_lastfrag =
427 max(UFS_I(inode)->i_lastfrag, fragment + count); 430 max(UFS_I(inode)->i_lastfrag, fragment + count);
431 write_sequnlock(&UFS_I(inode)->meta_lock);
428 } 432 }
429 mutex_unlock(&UFS_SB(sb)->s_lock); 433 mutex_unlock(&UFS_SB(sb)->s_lock);
430 UFSD("EXIT, result %llu\n", (unsigned long long)result); 434 UFSD("EXIT, result %llu\n", (unsigned long long)result);
@@ -437,8 +441,10 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
437 result = ufs_add_fragments(inode, tmp, oldcount, newcount); 441 result = ufs_add_fragments(inode, tmp, oldcount, newcount);
438 if (result) { 442 if (result) {
439 *err = 0; 443 *err = 0;
444 read_seqlock_excl(&UFS_I(inode)->meta_lock);
440 UFS_I(inode)->i_lastfrag = max(UFS_I(inode)->i_lastfrag, 445 UFS_I(inode)->i_lastfrag = max(UFS_I(inode)->i_lastfrag,
441 fragment + count); 446 fragment + count);
447 read_sequnlock_excl(&UFS_I(inode)->meta_lock);
442 ufs_clear_frags(inode, result + oldcount, newcount - oldcount, 448 ufs_clear_frags(inode, result + oldcount, newcount - oldcount,
443 locked_page != NULL); 449 locked_page != NULL);
444 mutex_unlock(&UFS_SB(sb)->s_lock); 450 mutex_unlock(&UFS_SB(sb)->s_lock);
@@ -449,39 +455,29 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
449 /* 455 /*
450 * allocate new block and move data 456 * allocate new block and move data
451 */ 457 */
452 switch (fs32_to_cpu(sb, usb1->fs_optim)) { 458 if (fs32_to_cpu(sb, usb1->fs_optim) == UFS_OPTSPACE) {
453 case UFS_OPTSPACE:
454 request = newcount; 459 request = newcount;
455 if (uspi->s_minfree < 5 || uspi->cs_total.cs_nffree 460 if (uspi->cs_total.cs_nffree < uspi->s_space_to_time)
456 > uspi->s_dsize * uspi->s_minfree / (2 * 100)) 461 usb1->fs_optim = cpu_to_fs32(sb, UFS_OPTTIME);
457 break; 462 } else {
458 usb1->fs_optim = cpu_to_fs32(sb, UFS_OPTTIME);
459 break;
460 default:
461 usb1->fs_optim = cpu_to_fs32(sb, UFS_OPTTIME);
462
463 case UFS_OPTTIME:
464 request = uspi->s_fpb; 463 request = uspi->s_fpb;
465 if (uspi->cs_total.cs_nffree < uspi->s_dsize * 464 if (uspi->cs_total.cs_nffree > uspi->s_time_to_space)
466 (uspi->s_minfree - 2) / 100) 465 usb1->fs_optim = cpu_to_fs32(sb, UFS_OPTSPACE);
467 break;
468 usb1->fs_optim = cpu_to_fs32(sb, UFS_OPTTIME);
469 break;
470 } 466 }
471 result = ufs_alloc_fragments (inode, cgno, goal, request, err); 467 result = ufs_alloc_fragments (inode, cgno, goal, request, err);
472 if (result) { 468 if (result) {
473 ufs_clear_frags(inode, result + oldcount, newcount - oldcount, 469 ufs_clear_frags(inode, result + oldcount, newcount - oldcount,
474 locked_page != NULL); 470 locked_page != NULL);
471 mutex_unlock(&UFS_SB(sb)->s_lock);
475 ufs_change_blocknr(inode, fragment - oldcount, oldcount, 472 ufs_change_blocknr(inode, fragment - oldcount, oldcount,
476 uspi->s_sbbase + tmp, 473 uspi->s_sbbase + tmp,
477 uspi->s_sbbase + result, locked_page); 474 uspi->s_sbbase + result, locked_page);
475 *err = 0;
478 write_seqlock(&UFS_I(inode)->meta_lock); 476 write_seqlock(&UFS_I(inode)->meta_lock);
479 ufs_cpu_to_data_ptr(sb, p, result); 477 ufs_cpu_to_data_ptr(sb, p, result);
480 write_sequnlock(&UFS_I(inode)->meta_lock);
481 *err = 0;
482 UFS_I(inode)->i_lastfrag = max(UFS_I(inode)->i_lastfrag, 478 UFS_I(inode)->i_lastfrag = max(UFS_I(inode)->i_lastfrag,
483 fragment + count); 479 fragment + count);
484 mutex_unlock(&UFS_SB(sb)->s_lock); 480 write_sequnlock(&UFS_I(inode)->meta_lock);
485 if (newcount < request) 481 if (newcount < request)
486 ufs_free_fragments (inode, result + newcount, request - newcount); 482 ufs_free_fragments (inode, result + newcount, request - newcount);
487 ufs_free_fragments (inode, tmp, oldcount); 483 ufs_free_fragments (inode, tmp, oldcount);
@@ -494,6 +490,20 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
494 return 0; 490 return 0;
495} 491}
496 492
493static bool try_add_frags(struct inode *inode, unsigned frags)
494{
495 unsigned size = frags * i_blocksize(inode);
496 spin_lock(&inode->i_lock);
497 __inode_add_bytes(inode, size);
498 if (unlikely((u32)inode->i_blocks != inode->i_blocks)) {
499 __inode_sub_bytes(inode, size);
500 spin_unlock(&inode->i_lock);
501 return false;
502 }
503 spin_unlock(&inode->i_lock);
504 return true;
505}
506
497static u64 ufs_add_fragments(struct inode *inode, u64 fragment, 507static u64 ufs_add_fragments(struct inode *inode, u64 fragment,
498 unsigned oldcount, unsigned newcount) 508 unsigned oldcount, unsigned newcount)
499{ 509{
@@ -530,6 +540,9 @@ static u64 ufs_add_fragments(struct inode *inode, u64 fragment,
530 for (i = oldcount; i < newcount; i++) 540 for (i = oldcount; i < newcount; i++)
531 if (ubh_isclr (UCPI_UBH(ucpi), ucpi->c_freeoff, fragno + i)) 541 if (ubh_isclr (UCPI_UBH(ucpi), ucpi->c_freeoff, fragno + i))
532 return 0; 542 return 0;
543
544 if (!try_add_frags(inode, count))
545 return 0;
533 /* 546 /*
534 * Block can be extended 547 * Block can be extended
535 */ 548 */
@@ -647,6 +660,7 @@ cg_found:
647 ubh_setbit (UCPI_UBH(ucpi), ucpi->c_freeoff, goal + i); 660 ubh_setbit (UCPI_UBH(ucpi), ucpi->c_freeoff, goal + i);
648 i = uspi->s_fpb - count; 661 i = uspi->s_fpb - count;
649 662
663 inode_sub_bytes(inode, i << uspi->s_fshift);
650 fs32_add(sb, &ucg->cg_cs.cs_nffree, i); 664 fs32_add(sb, &ucg->cg_cs.cs_nffree, i);
651 uspi->cs_total.cs_nffree += i; 665 uspi->cs_total.cs_nffree += i;
652 fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, i); 666 fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, i);
@@ -657,6 +671,8 @@ cg_found:
657 result = ufs_bitmap_search (sb, ucpi, goal, allocsize); 671 result = ufs_bitmap_search (sb, ucpi, goal, allocsize);
658 if (result == INVBLOCK) 672 if (result == INVBLOCK)
659 return 0; 673 return 0;
674 if (!try_add_frags(inode, count))
675 return 0;
660 for (i = 0; i < count; i++) 676 for (i = 0; i < count; i++)
661 ubh_clrbit (UCPI_UBH(ucpi), ucpi->c_freeoff, result + i); 677 ubh_clrbit (UCPI_UBH(ucpi), ucpi->c_freeoff, result + i);
662 678
@@ -716,6 +732,8 @@ norot:
716 return INVBLOCK; 732 return INVBLOCK;
717 ucpi->c_rotor = result; 733 ucpi->c_rotor = result;
718gotit: 734gotit:
735 if (!try_add_frags(inode, uspi->s_fpb))
736 return 0;
719 blkno = ufs_fragstoblks(result); 737 blkno = ufs_fragstoblks(result);
720 ubh_clrblock (UCPI_UBH(ucpi), ucpi->c_freeoff, blkno); 738 ubh_clrblock (UCPI_UBH(ucpi), ucpi->c_freeoff, blkno);
721 if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD) 739 if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c
index 7e41aee7b69a..f36d6a53687d 100644
--- a/fs/ufs/inode.c
+++ b/fs/ufs/inode.c
@@ -235,7 +235,8 @@ ufs_extend_tail(struct inode *inode, u64 writes_to,
235 235
236 p = ufs_get_direct_data_ptr(uspi, ufsi, block); 236 p = ufs_get_direct_data_ptr(uspi, ufsi, block);
237 tmp = ufs_new_fragments(inode, p, lastfrag, ufs_data_ptr_to_cpu(sb, p), 237 tmp = ufs_new_fragments(inode, p, lastfrag, ufs_data_ptr_to_cpu(sb, p),
238 new_size, err, locked_page); 238 new_size - (lastfrag & uspi->s_fpbmask), err,
239 locked_page);
239 return tmp != 0; 240 return tmp != 0;
240} 241}
241 242
@@ -284,7 +285,7 @@ ufs_inode_getfrag(struct inode *inode, unsigned index,
284 goal += uspi->s_fpb; 285 goal += uspi->s_fpb;
285 } 286 }
286 tmp = ufs_new_fragments(inode, p, ufs_blknum(new_fragment), 287 tmp = ufs_new_fragments(inode, p, ufs_blknum(new_fragment),
287 goal, uspi->s_fpb, err, locked_page); 288 goal, nfrags, err, locked_page);
288 289
289 if (!tmp) { 290 if (!tmp) {
290 *err = -ENOSPC; 291 *err = -ENOSPC;
@@ -400,11 +401,20 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff
400 u64 phys64 = 0; 401 u64 phys64 = 0;
401 unsigned frag = fragment & uspi->s_fpbmask; 402 unsigned frag = fragment & uspi->s_fpbmask;
402 403
403 if (!create) { 404 phys64 = ufs_frag_map(inode, offsets, depth);
404 phys64 = ufs_frag_map(inode, offsets, depth); 405 if (!create)
405 goto out; 406 goto done;
406 }
407 407
408 if (phys64) {
409 if (fragment >= UFS_NDIR_FRAGMENT)
410 goto done;
411 read_seqlock_excl(&UFS_I(inode)->meta_lock);
412 if (fragment < UFS_I(inode)->i_lastfrag) {
413 read_sequnlock_excl(&UFS_I(inode)->meta_lock);
414 goto done;
415 }
416 read_sequnlock_excl(&UFS_I(inode)->meta_lock);
417 }
408 /* This code entered only while writing ....? */ 418 /* This code entered only while writing ....? */
409 419
410 mutex_lock(&UFS_I(inode)->truncate_mutex); 420 mutex_lock(&UFS_I(inode)->truncate_mutex);
@@ -448,6 +458,11 @@ out:
448 } 458 }
449 mutex_unlock(&UFS_I(inode)->truncate_mutex); 459 mutex_unlock(&UFS_I(inode)->truncate_mutex);
450 return err; 460 return err;
461
462done:
463 if (phys64)
464 map_bh(bh_result, sb, phys64 + frag);
465 return 0;
451} 466}
452 467
453static int ufs_writepage(struct page *page, struct writeback_control *wbc) 468static int ufs_writepage(struct page *page, struct writeback_control *wbc)
@@ -551,10 +566,8 @@ static int ufs1_read_inode(struct inode *inode, struct ufs_inode *ufs_inode)
551 */ 566 */
552 inode->i_mode = mode = fs16_to_cpu(sb, ufs_inode->ui_mode); 567 inode->i_mode = mode = fs16_to_cpu(sb, ufs_inode->ui_mode);
553 set_nlink(inode, fs16_to_cpu(sb, ufs_inode->ui_nlink)); 568 set_nlink(inode, fs16_to_cpu(sb, ufs_inode->ui_nlink));
554 if (inode->i_nlink == 0) { 569 if (inode->i_nlink == 0)
555 ufs_error (sb, "ufs_read_inode", "inode %lu has zero nlink\n", inode->i_ino); 570 return -ESTALE;
556 return -1;
557 }
558 571
559 /* 572 /*
560 * Linux now has 32-bit uid and gid, so we can support EFT. 573 * Linux now has 32-bit uid and gid, so we can support EFT.
@@ -563,9 +576,9 @@ static int ufs1_read_inode(struct inode *inode, struct ufs_inode *ufs_inode)
563 i_gid_write(inode, ufs_get_inode_gid(sb, ufs_inode)); 576 i_gid_write(inode, ufs_get_inode_gid(sb, ufs_inode));
564 577
565 inode->i_size = fs64_to_cpu(sb, ufs_inode->ui_size); 578 inode->i_size = fs64_to_cpu(sb, ufs_inode->ui_size);
566 inode->i_atime.tv_sec = fs32_to_cpu(sb, ufs_inode->ui_atime.tv_sec); 579 inode->i_atime.tv_sec = (signed)fs32_to_cpu(sb, ufs_inode->ui_atime.tv_sec);
567 inode->i_ctime.tv_sec = fs32_to_cpu(sb, ufs_inode->ui_ctime.tv_sec); 580 inode->i_ctime.tv_sec = (signed)fs32_to_cpu(sb, ufs_inode->ui_ctime.tv_sec);
568 inode->i_mtime.tv_sec = fs32_to_cpu(sb, ufs_inode->ui_mtime.tv_sec); 581 inode->i_mtime.tv_sec = (signed)fs32_to_cpu(sb, ufs_inode->ui_mtime.tv_sec);
569 inode->i_mtime.tv_nsec = 0; 582 inode->i_mtime.tv_nsec = 0;
570 inode->i_atime.tv_nsec = 0; 583 inode->i_atime.tv_nsec = 0;
571 inode->i_ctime.tv_nsec = 0; 584 inode->i_ctime.tv_nsec = 0;
@@ -599,10 +612,8 @@ static int ufs2_read_inode(struct inode *inode, struct ufs2_inode *ufs2_inode)
599 */ 612 */
600 inode->i_mode = mode = fs16_to_cpu(sb, ufs2_inode->ui_mode); 613 inode->i_mode = mode = fs16_to_cpu(sb, ufs2_inode->ui_mode);
601 set_nlink(inode, fs16_to_cpu(sb, ufs2_inode->ui_nlink)); 614 set_nlink(inode, fs16_to_cpu(sb, ufs2_inode->ui_nlink));
602 if (inode->i_nlink == 0) { 615 if (inode->i_nlink == 0)
603 ufs_error (sb, "ufs_read_inode", "inode %lu has zero nlink\n", inode->i_ino); 616 return -ESTALE;
604 return -1;
605 }
606 617
607 /* 618 /*
608 * Linux now has 32-bit uid and gid, so we can support EFT. 619 * Linux now has 32-bit uid and gid, so we can support EFT.
@@ -642,7 +653,7 @@ struct inode *ufs_iget(struct super_block *sb, unsigned long ino)
642 struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi; 653 struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
643 struct buffer_head * bh; 654 struct buffer_head * bh;
644 struct inode *inode; 655 struct inode *inode;
645 int err; 656 int err = -EIO;
646 657
647 UFSD("ENTER, ino %lu\n", ino); 658 UFSD("ENTER, ino %lu\n", ino);
648 659
@@ -677,9 +688,10 @@ struct inode *ufs_iget(struct super_block *sb, unsigned long ino)
677 err = ufs1_read_inode(inode, 688 err = ufs1_read_inode(inode,
678 ufs_inode + ufs_inotofsbo(inode->i_ino)); 689 ufs_inode + ufs_inotofsbo(inode->i_ino));
679 } 690 }
680 691 brelse(bh);
681 if (err) 692 if (err)
682 goto bad_inode; 693 goto bad_inode;
694
683 inode->i_version++; 695 inode->i_version++;
684 ufsi->i_lastfrag = 696 ufsi->i_lastfrag =
685 (inode->i_size + uspi->s_fsize - 1) >> uspi->s_fshift; 697 (inode->i_size + uspi->s_fsize - 1) >> uspi->s_fshift;
@@ -688,15 +700,13 @@ struct inode *ufs_iget(struct super_block *sb, unsigned long ino)
688 700
689 ufs_set_inode_ops(inode); 701 ufs_set_inode_ops(inode);
690 702
691 brelse(bh);
692
693 UFSD("EXIT\n"); 703 UFSD("EXIT\n");
694 unlock_new_inode(inode); 704 unlock_new_inode(inode);
695 return inode; 705 return inode;
696 706
697bad_inode: 707bad_inode:
698 iget_failed(inode); 708 iget_failed(inode);
699 return ERR_PTR(-EIO); 709 return ERR_PTR(err);
700} 710}
701 711
702static void ufs1_update_inode(struct inode *inode, struct ufs_inode *ufs_inode) 712static void ufs1_update_inode(struct inode *inode, struct ufs_inode *ufs_inode)
@@ -841,8 +851,11 @@ void ufs_evict_inode(struct inode * inode)
841 truncate_inode_pages_final(&inode->i_data); 851 truncate_inode_pages_final(&inode->i_data);
842 if (want_delete) { 852 if (want_delete) {
843 inode->i_size = 0; 853 inode->i_size = 0;
844 if (inode->i_blocks) 854 if (inode->i_blocks &&
855 (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
856 S_ISLNK(inode->i_mode)))
845 ufs_truncate_blocks(inode); 857 ufs_truncate_blocks(inode);
858 ufs_update_inode(inode, inode_needs_sync(inode));
846 } 859 }
847 860
848 invalidate_inode_buffers(inode); 861 invalidate_inode_buffers(inode);
@@ -868,7 +881,6 @@ static inline void free_data(struct to_free *ctx, u64 from, unsigned count)
868 ctx->to = from + count; 881 ctx->to = from + count;
869} 882}
870 883
871#define DIRECT_BLOCK ((inode->i_size + uspi->s_bsize - 1) >> uspi->s_bshift)
872#define DIRECT_FRAGMENT ((inode->i_size + uspi->s_fsize - 1) >> uspi->s_fshift) 884#define DIRECT_FRAGMENT ((inode->i_size + uspi->s_fsize - 1) >> uspi->s_fshift)
873 885
874static void ufs_trunc_direct(struct inode *inode) 886static void ufs_trunc_direct(struct inode *inode)
@@ -1100,25 +1112,30 @@ out:
1100 return err; 1112 return err;
1101} 1113}
1102 1114
1103static void __ufs_truncate_blocks(struct inode *inode) 1115static void ufs_truncate_blocks(struct inode *inode)
1104{ 1116{
1105 struct ufs_inode_info *ufsi = UFS_I(inode); 1117 struct ufs_inode_info *ufsi = UFS_I(inode);
1106 struct super_block *sb = inode->i_sb; 1118 struct super_block *sb = inode->i_sb;
1107 struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi; 1119 struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
1108 unsigned offsets[4]; 1120 unsigned offsets[4];
1109 int depth = ufs_block_to_path(inode, DIRECT_BLOCK, offsets); 1121 int depth;
1110 int depth2; 1122 int depth2;
1111 unsigned i; 1123 unsigned i;
1112 struct ufs_buffer_head *ubh[3]; 1124 struct ufs_buffer_head *ubh[3];
1113 void *p; 1125 void *p;
1114 u64 block; 1126 u64 block;
1115 1127
1116 if (!depth) 1128 if (inode->i_size) {
1117 return; 1129 sector_t last = (inode->i_size - 1) >> uspi->s_bshift;
1130 depth = ufs_block_to_path(inode, last, offsets);
1131 if (!depth)
1132 return;
1133 } else {
1134 depth = 1;
1135 }
1118 1136
1119 /* find the last non-zero in offsets[] */
1120 for (depth2 = depth - 1; depth2; depth2--) 1137 for (depth2 = depth - 1; depth2; depth2--)
1121 if (offsets[depth2]) 1138 if (offsets[depth2] != uspi->s_apb - 1)
1122 break; 1139 break;
1123 1140
1124 mutex_lock(&ufsi->truncate_mutex); 1141 mutex_lock(&ufsi->truncate_mutex);
@@ -1127,9 +1144,8 @@ static void __ufs_truncate_blocks(struct inode *inode)
1127 offsets[0] = UFS_IND_BLOCK; 1144 offsets[0] = UFS_IND_BLOCK;
1128 } else { 1145 } else {
1129 /* get the blocks that should be partially emptied */ 1146 /* get the blocks that should be partially emptied */
1130 p = ufs_get_direct_data_ptr(uspi, ufsi, offsets[0]); 1147 p = ufs_get_direct_data_ptr(uspi, ufsi, offsets[0]++);
1131 for (i = 0; i < depth2; i++) { 1148 for (i = 0; i < depth2; i++) {
1132 offsets[i]++; /* next branch is fully freed */
1133 block = ufs_data_ptr_to_cpu(sb, p); 1149 block = ufs_data_ptr_to_cpu(sb, p);
1134 if (!block) 1150 if (!block)
1135 break; 1151 break;
@@ -1140,7 +1156,7 @@ static void __ufs_truncate_blocks(struct inode *inode)
1140 write_sequnlock(&ufsi->meta_lock); 1156 write_sequnlock(&ufsi->meta_lock);
1141 break; 1157 break;
1142 } 1158 }
1143 p = ubh_get_data_ptr(uspi, ubh[i], offsets[i + 1]); 1159 p = ubh_get_data_ptr(uspi, ubh[i], offsets[i + 1]++);
1144 } 1160 }
1145 while (i--) 1161 while (i--)
1146 free_branch_tail(inode, offsets[i + 1], ubh[i], depth - i - 1); 1162 free_branch_tail(inode, offsets[i + 1], ubh[i], depth - i - 1);
@@ -1155,7 +1171,9 @@ static void __ufs_truncate_blocks(struct inode *inode)
1155 free_full_branch(inode, block, i - UFS_IND_BLOCK + 1); 1171 free_full_branch(inode, block, i - UFS_IND_BLOCK + 1);
1156 } 1172 }
1157 } 1173 }
1174 read_seqlock_excl(&ufsi->meta_lock);
1158 ufsi->i_lastfrag = DIRECT_FRAGMENT; 1175 ufsi->i_lastfrag = DIRECT_FRAGMENT;
1176 read_sequnlock_excl(&ufsi->meta_lock);
1159 mark_inode_dirty(inode); 1177 mark_inode_dirty(inode);
1160 mutex_unlock(&ufsi->truncate_mutex); 1178 mutex_unlock(&ufsi->truncate_mutex);
1161} 1179}
@@ -1183,7 +1201,7 @@ static int ufs_truncate(struct inode *inode, loff_t size)
1183 1201
1184 truncate_setsize(inode, size); 1202 truncate_setsize(inode, size);
1185 1203
1186 __ufs_truncate_blocks(inode); 1204 ufs_truncate_blocks(inode);
1187 inode->i_mtime = inode->i_ctime = current_time(inode); 1205 inode->i_mtime = inode->i_ctime = current_time(inode);
1188 mark_inode_dirty(inode); 1206 mark_inode_dirty(inode);
1189out: 1207out:
@@ -1191,16 +1209,6 @@ out:
1191 return err; 1209 return err;
1192} 1210}
1193 1211
1194static void ufs_truncate_blocks(struct inode *inode)
1195{
1196 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
1197 S_ISLNK(inode->i_mode)))
1198 return;
1199 if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
1200 return;
1201 __ufs_truncate_blocks(inode);
1202}
1203
1204int ufs_setattr(struct dentry *dentry, struct iattr *attr) 1212int ufs_setattr(struct dentry *dentry, struct iattr *attr)
1205{ 1213{
1206 struct inode *inode = d_inode(dentry); 1214 struct inode *inode = d_inode(dentry);
diff --git a/fs/ufs/super.c b/fs/ufs/super.c
index 131b2b77c818..0a4f58a5073c 100644
--- a/fs/ufs/super.c
+++ b/fs/ufs/super.c
@@ -480,7 +480,7 @@ static void ufs_setup_cstotal(struct super_block *sb)
480 usb3 = ubh_get_usb_third(uspi); 480 usb3 = ubh_get_usb_third(uspi);
481 481
482 if ((mtype == UFS_MOUNT_UFSTYPE_44BSD && 482 if ((mtype == UFS_MOUNT_UFSTYPE_44BSD &&
483 (usb1->fs_flags & UFS_FLAGS_UPDATED)) || 483 (usb2->fs_un.fs_u2.fs_maxbsize == usb1->fs_bsize)) ||
484 mtype == UFS_MOUNT_UFSTYPE_UFS2) { 484 mtype == UFS_MOUNT_UFSTYPE_UFS2) {
485 /*we have statistic in different place, then usual*/ 485 /*we have statistic in different place, then usual*/
486 uspi->cs_total.cs_ndir = fs64_to_cpu(sb, usb2->fs_un.fs_u2.cs_ndir); 486 uspi->cs_total.cs_ndir = fs64_to_cpu(sb, usb2->fs_un.fs_u2.cs_ndir);
@@ -596,9 +596,7 @@ static void ufs_put_cstotal(struct super_block *sb)
596 usb2 = ubh_get_usb_second(uspi); 596 usb2 = ubh_get_usb_second(uspi);
597 usb3 = ubh_get_usb_third(uspi); 597 usb3 = ubh_get_usb_third(uspi);
598 598
599 if ((mtype == UFS_MOUNT_UFSTYPE_44BSD && 599 if (mtype == UFS_MOUNT_UFSTYPE_UFS2) {
600 (usb1->fs_flags & UFS_FLAGS_UPDATED)) ||
601 mtype == UFS_MOUNT_UFSTYPE_UFS2) {
602 /*we have statistic in different place, then usual*/ 600 /*we have statistic in different place, then usual*/
603 usb2->fs_un.fs_u2.cs_ndir = 601 usb2->fs_un.fs_u2.cs_ndir =
604 cpu_to_fs64(sb, uspi->cs_total.cs_ndir); 602 cpu_to_fs64(sb, uspi->cs_total.cs_ndir);
@@ -608,16 +606,26 @@ static void ufs_put_cstotal(struct super_block *sb)
608 cpu_to_fs64(sb, uspi->cs_total.cs_nifree); 606 cpu_to_fs64(sb, uspi->cs_total.cs_nifree);
609 usb3->fs_un1.fs_u2.cs_nffree = 607 usb3->fs_un1.fs_u2.cs_nffree =
610 cpu_to_fs64(sb, uspi->cs_total.cs_nffree); 608 cpu_to_fs64(sb, uspi->cs_total.cs_nffree);
611 } else { 609 goto out;
612 usb1->fs_cstotal.cs_ndir = 610 }
613 cpu_to_fs32(sb, uspi->cs_total.cs_ndir); 611
614 usb1->fs_cstotal.cs_nbfree = 612 if (mtype == UFS_MOUNT_UFSTYPE_44BSD &&
615 cpu_to_fs32(sb, uspi->cs_total.cs_nbfree); 613 (usb2->fs_un.fs_u2.fs_maxbsize == usb1->fs_bsize)) {
616 usb1->fs_cstotal.cs_nifree = 614 /* store stats in both old and new places */
617 cpu_to_fs32(sb, uspi->cs_total.cs_nifree); 615 usb2->fs_un.fs_u2.cs_ndir =
618 usb1->fs_cstotal.cs_nffree = 616 cpu_to_fs64(sb, uspi->cs_total.cs_ndir);
619 cpu_to_fs32(sb, uspi->cs_total.cs_nffree); 617 usb2->fs_un.fs_u2.cs_nbfree =
618 cpu_to_fs64(sb, uspi->cs_total.cs_nbfree);
619 usb3->fs_un1.fs_u2.cs_nifree =
620 cpu_to_fs64(sb, uspi->cs_total.cs_nifree);
621 usb3->fs_un1.fs_u2.cs_nffree =
622 cpu_to_fs64(sb, uspi->cs_total.cs_nffree);
620 } 623 }
624 usb1->fs_cstotal.cs_ndir = cpu_to_fs32(sb, uspi->cs_total.cs_ndir);
625 usb1->fs_cstotal.cs_nbfree = cpu_to_fs32(sb, uspi->cs_total.cs_nbfree);
626 usb1->fs_cstotal.cs_nifree = cpu_to_fs32(sb, uspi->cs_total.cs_nifree);
627 usb1->fs_cstotal.cs_nffree = cpu_to_fs32(sb, uspi->cs_total.cs_nffree);
628out:
621 ubh_mark_buffer_dirty(USPI_UBH(uspi)); 629 ubh_mark_buffer_dirty(USPI_UBH(uspi));
622 ufs_print_super_stuff(sb, usb1, usb2, usb3); 630 ufs_print_super_stuff(sb, usb1, usb2, usb3);
623 UFSD("EXIT\n"); 631 UFSD("EXIT\n");
@@ -746,6 +754,23 @@ static void ufs_put_super(struct super_block *sb)
746 return; 754 return;
747} 755}
748 756
757static u64 ufs_max_bytes(struct super_block *sb)
758{
759 struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
760 int bits = uspi->s_apbshift;
761 u64 res;
762
763 if (bits > 21)
764 res = ~0ULL;
765 else
766 res = UFS_NDADDR + (1LL << bits) + (1LL << (2*bits)) +
767 (1LL << (3*bits));
768
769 if (res >= (MAX_LFS_FILESIZE >> uspi->s_bshift))
770 return MAX_LFS_FILESIZE;
771 return res << uspi->s_bshift;
772}
773
749static int ufs_fill_super(struct super_block *sb, void *data, int silent) 774static int ufs_fill_super(struct super_block *sb, void *data, int silent)
750{ 775{
751 struct ufs_sb_info * sbi; 776 struct ufs_sb_info * sbi;
@@ -812,9 +837,8 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
812 uspi->s_dirblksize = UFS_SECTOR_SIZE; 837 uspi->s_dirblksize = UFS_SECTOR_SIZE;
813 super_block_offset=UFS_SBLOCK; 838 super_block_offset=UFS_SBLOCK;
814 839
815 /* Keep 2Gig file limit. Some UFS variants need to override 840 sb->s_maxbytes = MAX_LFS_FILESIZE;
816 this but as I don't know which I'll let those in the know loosen 841
817 the rules */
818 switch (sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) { 842 switch (sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) {
819 case UFS_MOUNT_UFSTYPE_44BSD: 843 case UFS_MOUNT_UFSTYPE_44BSD:
820 UFSD("ufstype=44bsd\n"); 844 UFSD("ufstype=44bsd\n");
@@ -980,6 +1004,13 @@ again:
980 flags |= UFS_ST_SUN; 1004 flags |= UFS_ST_SUN;
981 } 1005 }
982 1006
1007 if ((flags & UFS_ST_MASK) == UFS_ST_44BSD &&
1008 uspi->s_postblformat == UFS_42POSTBLFMT) {
1009 if (!silent)
1010 pr_err("this is not a 44bsd filesystem");
1011 goto failed;
1012 }
1013
983 /* 1014 /*
984 * Check ufs magic number 1015 * Check ufs magic number
985 */ 1016 */
@@ -1127,8 +1158,8 @@ magic_found:
1127 uspi->s_cgmask = fs32_to_cpu(sb, usb1->fs_cgmask); 1158 uspi->s_cgmask = fs32_to_cpu(sb, usb1->fs_cgmask);
1128 1159
1129 if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) { 1160 if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) {
1130 uspi->s_u2_size = fs64_to_cpu(sb, usb3->fs_un1.fs_u2.fs_size); 1161 uspi->s_size = fs64_to_cpu(sb, usb3->fs_un1.fs_u2.fs_size);
1131 uspi->s_u2_dsize = fs64_to_cpu(sb, usb3->fs_un1.fs_u2.fs_dsize); 1162 uspi->s_dsize = fs64_to_cpu(sb, usb3->fs_un1.fs_u2.fs_dsize);
1132 } else { 1163 } else {
1133 uspi->s_size = fs32_to_cpu(sb, usb1->fs_size); 1164 uspi->s_size = fs32_to_cpu(sb, usb1->fs_size);
1134 uspi->s_dsize = fs32_to_cpu(sb, usb1->fs_dsize); 1165 uspi->s_dsize = fs32_to_cpu(sb, usb1->fs_dsize);
@@ -1177,6 +1208,18 @@ magic_found:
1177 uspi->s_postbloff = fs32_to_cpu(sb, usb3->fs_postbloff); 1208 uspi->s_postbloff = fs32_to_cpu(sb, usb3->fs_postbloff);
1178 uspi->s_rotbloff = fs32_to_cpu(sb, usb3->fs_rotbloff); 1209 uspi->s_rotbloff = fs32_to_cpu(sb, usb3->fs_rotbloff);
1179 1210
1211 uspi->s_root_blocks = mul_u64_u32_div(uspi->s_dsize,
1212 uspi->s_minfree, 100);
1213 if (uspi->s_minfree <= 5) {
1214 uspi->s_time_to_space = ~0ULL;
1215 uspi->s_space_to_time = 0;
1216 usb1->fs_optim = cpu_to_fs32(sb, UFS_OPTSPACE);
1217 } else {
1218 uspi->s_time_to_space = (uspi->s_root_blocks / 2) + 1;
1219 uspi->s_space_to_time = mul_u64_u32_div(uspi->s_dsize,
1220 uspi->s_minfree - 2, 100) - 1;
1221 }
1222
1180 /* 1223 /*
1181 * Compute another frequently used values 1224 * Compute another frequently used values
1182 */ 1225 */
@@ -1212,6 +1255,7 @@ magic_found:
1212 "fast symlink size (%u)\n", uspi->s_maxsymlinklen); 1255 "fast symlink size (%u)\n", uspi->s_maxsymlinklen);
1213 uspi->s_maxsymlinklen = maxsymlen; 1256 uspi->s_maxsymlinklen = maxsymlen;
1214 } 1257 }
1258 sb->s_maxbytes = ufs_max_bytes(sb);
1215 sb->s_max_links = UFS_LINK_MAX; 1259 sb->s_max_links = UFS_LINK_MAX;
1216 1260
1217 inode = ufs_iget(sb, UFS_ROOTINO); 1261 inode = ufs_iget(sb, UFS_ROOTINO);
@@ -1365,19 +1409,17 @@ static int ufs_statfs(struct dentry *dentry, struct kstatfs *buf)
1365 mutex_lock(&UFS_SB(sb)->s_lock); 1409 mutex_lock(&UFS_SB(sb)->s_lock);
1366 usb3 = ubh_get_usb_third(uspi); 1410 usb3 = ubh_get_usb_third(uspi);
1367 1411
1368 if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) { 1412 if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2)
1369 buf->f_type = UFS2_MAGIC; 1413 buf->f_type = UFS2_MAGIC;
1370 buf->f_blocks = fs64_to_cpu(sb, usb3->fs_un1.fs_u2.fs_dsize); 1414 else
1371 } else {
1372 buf->f_type = UFS_MAGIC; 1415 buf->f_type = UFS_MAGIC;
1373 buf->f_blocks = uspi->s_dsize; 1416
1374 } 1417 buf->f_blocks = uspi->s_dsize;
1375 buf->f_bfree = ufs_blkstofrags(uspi->cs_total.cs_nbfree) + 1418 buf->f_bfree = ufs_freefrags(uspi);
1376 uspi->cs_total.cs_nffree;
1377 buf->f_ffree = uspi->cs_total.cs_nifree; 1419 buf->f_ffree = uspi->cs_total.cs_nifree;
1378 buf->f_bsize = sb->s_blocksize; 1420 buf->f_bsize = sb->s_blocksize;
1379 buf->f_bavail = (buf->f_bfree > (((long)buf->f_blocks / 100) * uspi->s_minfree)) 1421 buf->f_bavail = (buf->f_bfree > uspi->s_root_blocks)
1380 ? (buf->f_bfree - (((long)buf->f_blocks / 100) * uspi->s_minfree)) : 0; 1422 ? (buf->f_bfree - uspi->s_root_blocks) : 0;
1381 buf->f_files = uspi->s_ncg * uspi->s_ipg; 1423 buf->f_files = uspi->s_ncg * uspi->s_ipg;
1382 buf->f_namelen = UFS_MAXNAMLEN; 1424 buf->f_namelen = UFS_MAXNAMLEN;
1383 buf->f_fsid.val[0] = (u32)id; 1425 buf->f_fsid.val[0] = (u32)id;
diff --git a/fs/ufs/ufs_fs.h b/fs/ufs/ufs_fs.h
index 0cbd5d340b67..150eef6f1233 100644
--- a/fs/ufs/ufs_fs.h
+++ b/fs/ufs/ufs_fs.h
@@ -733,10 +733,8 @@ struct ufs_sb_private_info {
733 __u32 s_dblkno; /* offset of first data after cg */ 733 __u32 s_dblkno; /* offset of first data after cg */
734 __u32 s_cgoffset; /* cylinder group offset in cylinder */ 734 __u32 s_cgoffset; /* cylinder group offset in cylinder */
735 __u32 s_cgmask; /* used to calc mod fs_ntrak */ 735 __u32 s_cgmask; /* used to calc mod fs_ntrak */
736 __u32 s_size; /* number of blocks (fragments) in fs */ 736 __u64 s_size; /* number of blocks (fragments) in fs */
737 __u32 s_dsize; /* number of data blocks in fs */ 737 __u64 s_dsize; /* number of data blocks in fs */
738 __u64 s_u2_size; /* ufs2: number of blocks (fragments) in fs */
739 __u64 s_u2_dsize; /*ufs2: number of data blocks in fs */
740 __u32 s_ncg; /* number of cylinder groups */ 738 __u32 s_ncg; /* number of cylinder groups */
741 __u32 s_bsize; /* size of basic blocks */ 739 __u32 s_bsize; /* size of basic blocks */
742 __u32 s_fsize; /* size of fragments */ 740 __u32 s_fsize; /* size of fragments */
@@ -793,6 +791,9 @@ struct ufs_sb_private_info {
793 __u32 s_maxsymlinklen;/* upper limit on fast symlinks' size */ 791 __u32 s_maxsymlinklen;/* upper limit on fast symlinks' size */
794 __s32 fs_magic; /* filesystem magic */ 792 __s32 fs_magic; /* filesystem magic */
795 unsigned int s_dirblksize; 793 unsigned int s_dirblksize;
794 __u64 s_root_blocks;
795 __u64 s_time_to_space;
796 __u64 s_space_to_time;
796}; 797};
797 798
798/* 799/*
diff --git a/fs/ufs/util.c b/fs/ufs/util.c
index f41ad0a6106f..02497a492eb2 100644
--- a/fs/ufs/util.c
+++ b/fs/ufs/util.c
@@ -243,9 +243,8 @@ ufs_set_inode_dev(struct super_block *sb, struct ufs_inode_info *ufsi, dev_t dev
243struct page *ufs_get_locked_page(struct address_space *mapping, 243struct page *ufs_get_locked_page(struct address_space *mapping,
244 pgoff_t index) 244 pgoff_t index)
245{ 245{
246 struct page *page; 246 struct inode *inode = mapping->host;
247 247 struct page *page = find_lock_page(mapping, index);
248 page = find_lock_page(mapping, index);
249 if (!page) { 248 if (!page) {
250 page = read_mapping_page(mapping, index, NULL); 249 page = read_mapping_page(mapping, index, NULL);
251 250
@@ -253,7 +252,7 @@ struct page *ufs_get_locked_page(struct address_space *mapping,
253 printk(KERN_ERR "ufs_change_blocknr: " 252 printk(KERN_ERR "ufs_change_blocknr: "
254 "read_mapping_page error: ino %lu, index: %lu\n", 253 "read_mapping_page error: ino %lu, index: %lu\n",
255 mapping->host->i_ino, index); 254 mapping->host->i_ino, index);
256 goto out; 255 return page;
257 } 256 }
258 257
259 lock_page(page); 258 lock_page(page);
@@ -262,8 +261,7 @@ struct page *ufs_get_locked_page(struct address_space *mapping,
262 /* Truncate got there first */ 261 /* Truncate got there first */
263 unlock_page(page); 262 unlock_page(page);
264 put_page(page); 263 put_page(page);
265 page = NULL; 264 return NULL;
266 goto out;
267 } 265 }
268 266
269 if (!PageUptodate(page) || PageError(page)) { 267 if (!PageUptodate(page) || PageError(page)) {
@@ -272,11 +270,12 @@ struct page *ufs_get_locked_page(struct address_space *mapping,
272 270
273 printk(KERN_ERR "ufs_change_blocknr: " 271 printk(KERN_ERR "ufs_change_blocknr: "
274 "can not read page: ino %lu, index: %lu\n", 272 "can not read page: ino %lu, index: %lu\n",
275 mapping->host->i_ino, index); 273 inode->i_ino, index);
276 274
277 page = ERR_PTR(-EIO); 275 return ERR_PTR(-EIO);
278 } 276 }
279 } 277 }
280out: 278 if (!page_has_buffers(page))
279 create_empty_buffers(page, 1 << inode->i_blkbits, 0);
281 return page; 280 return page;
282} 281}
diff --git a/fs/ufs/util.h b/fs/ufs/util.h
index b7fbf53dbc81..9fc7119a1551 100644
--- a/fs/ufs/util.h
+++ b/fs/ufs/util.h
@@ -350,16 +350,11 @@ static inline void *ubh_get_data_ptr(struct ufs_sb_private_info *uspi,
350#define ubh_blkmap(ubh,begin,bit) \ 350#define ubh_blkmap(ubh,begin,bit) \
351 ((*ubh_get_addr(ubh, (begin) + ((bit) >> 3)) >> ((bit) & 7)) & (0xff >> (UFS_MAXFRAG - uspi->s_fpb))) 351 ((*ubh_get_addr(ubh, (begin) + ((bit) >> 3)) >> ((bit) & 7)) & (0xff >> (UFS_MAXFRAG - uspi->s_fpb)))
352 352
353/*
354 * Determine the number of available frags given a
355 * percentage to hold in reserve.
356 */
357static inline u64 353static inline u64
358ufs_freespace(struct ufs_sb_private_info *uspi, int percentreserved) 354ufs_freefrags(struct ufs_sb_private_info *uspi)
359{ 355{
360 return ufs_blkstofrags(uspi->cs_total.cs_nbfree) + 356 return ufs_blkstofrags(uspi->cs_total.cs_nbfree) +
361 uspi->cs_total.cs_nffree - 357 uspi->cs_total.cs_nffree;
362 (uspi->s_dsize * (percentreserved) / 100);
363} 358}
364 359
365/* 360/*
@@ -473,15 +468,19 @@ static inline unsigned _ubh_find_last_zero_bit_(
473static inline int _ubh_isblockset_(struct ufs_sb_private_info * uspi, 468static inline int _ubh_isblockset_(struct ufs_sb_private_info * uspi,
474 struct ufs_buffer_head * ubh, unsigned begin, unsigned block) 469 struct ufs_buffer_head * ubh, unsigned begin, unsigned block)
475{ 470{
471 u8 mask;
476 switch (uspi->s_fpb) { 472 switch (uspi->s_fpb) {
477 case 8: 473 case 8:
478 return (*ubh_get_addr (ubh, begin + block) == 0xff); 474 return (*ubh_get_addr (ubh, begin + block) == 0xff);
479 case 4: 475 case 4:
480 return (*ubh_get_addr (ubh, begin + (block >> 1)) == (0x0f << ((block & 0x01) << 2))); 476 mask = 0x0f << ((block & 0x01) << 2);
477 return (*ubh_get_addr (ubh, begin + (block >> 1)) & mask) == mask;
481 case 2: 478 case 2:
482 return (*ubh_get_addr (ubh, begin + (block >> 2)) == (0x03 << ((block & 0x03) << 1))); 479 mask = 0x03 << ((block & 0x03) << 1);
480 return (*ubh_get_addr (ubh, begin + (block >> 2)) & mask) == mask;
483 case 1: 481 case 1:
484 return (*ubh_get_addr (ubh, begin + (block >> 3)) == (0x01 << (block & 0x07))); 482 mask = 0x01 << (block & 0x07);
483 return (*ubh_get_addr (ubh, begin + (block >> 3)) & mask) == mask;
485 } 484 }
486 return 0; 485 return 0;
487} 486}
diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
index f7555fc25877..1d622f276e3a 100644
--- a/fs/userfaultfd.c
+++ b/fs/userfaultfd.c
@@ -340,9 +340,28 @@ int handle_userfault(struct vm_fault *vmf, unsigned long reason)
340 bool must_wait, return_to_userland; 340 bool must_wait, return_to_userland;
341 long blocking_state; 341 long blocking_state;
342 342
343 BUG_ON(!rwsem_is_locked(&mm->mmap_sem));
344
345 ret = VM_FAULT_SIGBUS; 343 ret = VM_FAULT_SIGBUS;
344
345 /*
346 * We don't do userfault handling for the final child pid update.
347 *
348 * We also don't do userfault handling during
349 * coredumping. hugetlbfs has the special
350 * follow_hugetlb_page() to skip missing pages in the
351 * FOLL_DUMP case, anon memory also checks for FOLL_DUMP with
352 * the no_page_table() helper in follow_page_mask(), but the
353 * shmem_vm_ops->fault method is invoked even during
354 * coredumping without mmap_sem and it ends up here.
355 */
356 if (current->flags & (PF_EXITING|PF_DUMPCORE))
357 goto out;
358
359 /*
360 * Coredumping runs without mmap_sem so we can only check that
361 * the mmap_sem is held, if PF_DUMPCORE was not set.
362 */
363 WARN_ON_ONCE(!rwsem_is_locked(&mm->mmap_sem));
364
346 ctx = vmf->vma->vm_userfaultfd_ctx.ctx; 365 ctx = vmf->vma->vm_userfaultfd_ctx.ctx;
347 if (!ctx) 366 if (!ctx)
348 goto out; 367 goto out;
@@ -361,12 +380,6 @@ int handle_userfault(struct vm_fault *vmf, unsigned long reason)
361 goto out; 380 goto out;
362 381
363 /* 382 /*
364 * We don't do userfault handling for the final child pid update.
365 */
366 if (current->flags & PF_EXITING)
367 goto out;
368
369 /*
370 * Check that we can return VM_FAULT_RETRY. 383 * Check that we can return VM_FAULT_RETRY.
371 * 384 *
372 * NOTE: it should become possible to return VM_FAULT_RETRY 385 * NOTE: it should become possible to return VM_FAULT_RETRY
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
index f02eb7673392..a7048eafa8e6 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -1280,7 +1280,6 @@ xfs_bmap_read_extents(
1280 xfs_bmbt_rec_t *frp; 1280 xfs_bmbt_rec_t *frp;
1281 xfs_fsblock_t nextbno; 1281 xfs_fsblock_t nextbno;
1282 xfs_extnum_t num_recs; 1282 xfs_extnum_t num_recs;
1283 xfs_extnum_t start;
1284 1283
1285 num_recs = xfs_btree_get_numrecs(block); 1284 num_recs = xfs_btree_get_numrecs(block);
1286 if (unlikely(i + num_recs > room)) { 1285 if (unlikely(i + num_recs > room)) {
@@ -1303,7 +1302,6 @@ xfs_bmap_read_extents(
1303 * Copy records into the extent records. 1302 * Copy records into the extent records.
1304 */ 1303 */
1305 frp = XFS_BMBT_REC_ADDR(mp, block, 1); 1304 frp = XFS_BMBT_REC_ADDR(mp, block, 1);
1306 start = i;
1307 for (j = 0; j < num_recs; j++, i++, frp++) { 1305 for (j = 0; j < num_recs; j++, i++, frp++) {
1308 xfs_bmbt_rec_host_t *trp = xfs_iext_get_ext(ifp, i); 1306 xfs_bmbt_rec_host_t *trp = xfs_iext_get_ext(ifp, i);
1309 trp->l0 = be64_to_cpu(frp->l0); 1307 trp->l0 = be64_to_cpu(frp->l0);
@@ -2065,8 +2063,10 @@ xfs_bmap_add_extent_delay_real(
2065 } 2063 }
2066 temp = xfs_bmap_worst_indlen(bma->ip, temp); 2064 temp = xfs_bmap_worst_indlen(bma->ip, temp);
2067 temp2 = xfs_bmap_worst_indlen(bma->ip, temp2); 2065 temp2 = xfs_bmap_worst_indlen(bma->ip, temp2);
2068 diff = (int)(temp + temp2 - startblockval(PREV.br_startblock) - 2066 diff = (int)(temp + temp2 -
2069 (bma->cur ? bma->cur->bc_private.b.allocated : 0)); 2067 (startblockval(PREV.br_startblock) -
2068 (bma->cur ?
2069 bma->cur->bc_private.b.allocated : 0)));
2070 if (diff > 0) { 2070 if (diff > 0) {
2071 error = xfs_mod_fdblocks(bma->ip->i_mount, 2071 error = xfs_mod_fdblocks(bma->ip->i_mount,
2072 -((int64_t)diff), false); 2072 -((int64_t)diff), false);
@@ -2123,7 +2123,6 @@ xfs_bmap_add_extent_delay_real(
2123 temp = da_new; 2123 temp = da_new;
2124 if (bma->cur) 2124 if (bma->cur)
2125 temp += bma->cur->bc_private.b.allocated; 2125 temp += bma->cur->bc_private.b.allocated;
2126 ASSERT(temp <= da_old);
2127 if (temp < da_old) 2126 if (temp < da_old)
2128 xfs_mod_fdblocks(bma->ip->i_mount, 2127 xfs_mod_fdblocks(bma->ip->i_mount,
2129 (int64_t)(da_old - temp), false); 2128 (int64_t)(da_old - temp), false);
diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c
index 5392674bf893..3a673ba201aa 100644
--- a/fs/xfs/libxfs/xfs_btree.c
+++ b/fs/xfs/libxfs/xfs_btree.c
@@ -4395,7 +4395,7 @@ xfs_btree_visit_blocks(
4395 xfs_btree_readahead_ptr(cur, ptr, 1); 4395 xfs_btree_readahead_ptr(cur, ptr, 1);
4396 4396
4397 /* save for the next iteration of the loop */ 4397 /* save for the next iteration of the loop */
4398 lptr = *ptr; 4398 xfs_btree_copy_ptrs(cur, &lptr, ptr, 1);
4399 } 4399 }
4400 4400
4401 /* for each buffer in the level */ 4401 /* for each buffer in the level */
diff --git a/fs/xfs/libxfs/xfs_refcount.c b/fs/xfs/libxfs/xfs_refcount.c
index b177ef33cd4c..82a38d86ebad 100644
--- a/fs/xfs/libxfs/xfs_refcount.c
+++ b/fs/xfs/libxfs/xfs_refcount.c
@@ -1629,13 +1629,28 @@ xfs_refcount_recover_cow_leftovers(
1629 if (mp->m_sb.sb_agblocks >= XFS_REFC_COW_START) 1629 if (mp->m_sb.sb_agblocks >= XFS_REFC_COW_START)
1630 return -EOPNOTSUPP; 1630 return -EOPNOTSUPP;
1631 1631
1632 error = xfs_alloc_read_agf(mp, NULL, agno, 0, &agbp); 1632 INIT_LIST_HEAD(&debris);
1633
1634 /*
1635 * In this first part, we use an empty transaction to gather up
1636 * all the leftover CoW extents so that we can subsequently
1637 * delete them. The empty transaction is used to avoid
1638 * a buffer lock deadlock if there happens to be a loop in the
1639 * refcountbt because we're allowed to re-grab a buffer that is
1640 * already attached to our transaction. When we're done
1641 * recording the CoW debris we cancel the (empty) transaction
1642 * and everything goes away cleanly.
1643 */
1644 error = xfs_trans_alloc_empty(mp, &tp);
1633 if (error) 1645 if (error)
1634 return error; 1646 return error;
1635 cur = xfs_refcountbt_init_cursor(mp, NULL, agbp, agno, NULL); 1647
1648 error = xfs_alloc_read_agf(mp, tp, agno, 0, &agbp);
1649 if (error)
1650 goto out_trans;
1651 cur = xfs_refcountbt_init_cursor(mp, tp, agbp, agno, NULL);
1636 1652
1637 /* Find all the leftover CoW staging extents. */ 1653 /* Find all the leftover CoW staging extents. */
1638 INIT_LIST_HEAD(&debris);
1639 memset(&low, 0, sizeof(low)); 1654 memset(&low, 0, sizeof(low));
1640 memset(&high, 0, sizeof(high)); 1655 memset(&high, 0, sizeof(high));
1641 low.rc.rc_startblock = XFS_REFC_COW_START; 1656 low.rc.rc_startblock = XFS_REFC_COW_START;
@@ -1645,10 +1660,11 @@ xfs_refcount_recover_cow_leftovers(
1645 if (error) 1660 if (error)
1646 goto out_cursor; 1661 goto out_cursor;
1647 xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR); 1662 xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
1648 xfs_buf_relse(agbp); 1663 xfs_trans_brelse(tp, agbp);
1664 xfs_trans_cancel(tp);
1649 1665
1650 /* Now iterate the list to free the leftovers */ 1666 /* Now iterate the list to free the leftovers */
1651 list_for_each_entry(rr, &debris, rr_list) { 1667 list_for_each_entry_safe(rr, n, &debris, rr_list) {
1652 /* Set up transaction. */ 1668 /* Set up transaction. */
1653 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, 0, 0, 0, &tp); 1669 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, 0, 0, 0, &tp);
1654 if (error) 1670 if (error)
@@ -1676,8 +1692,16 @@ xfs_refcount_recover_cow_leftovers(
1676 error = xfs_trans_commit(tp); 1692 error = xfs_trans_commit(tp);
1677 if (error) 1693 if (error)
1678 goto out_free; 1694 goto out_free;
1695
1696 list_del(&rr->rr_list);
1697 kmem_free(rr);
1679 } 1698 }
1680 1699
1700 return error;
1701out_defer:
1702 xfs_defer_cancel(&dfops);
1703out_trans:
1704 xfs_trans_cancel(tp);
1681out_free: 1705out_free:
1682 /* Free the leftover list */ 1706 /* Free the leftover list */
1683 list_for_each_entry_safe(rr, n, &debris, rr_list) { 1707 list_for_each_entry_safe(rr, n, &debris, rr_list) {
@@ -1688,11 +1712,6 @@ out_free:
1688 1712
1689out_cursor: 1713out_cursor:
1690 xfs_btree_del_cursor(cur, XFS_BTREE_ERROR); 1714 xfs_btree_del_cursor(cur, XFS_BTREE_ERROR);
1691 xfs_buf_relse(agbp); 1715 xfs_trans_brelse(tp, agbp);
1692 goto out_free; 1716 goto out_trans;
1693
1694out_defer:
1695 xfs_defer_cancel(&dfops);
1696 xfs_trans_cancel(tp);
1697 goto out_free;
1698} 1717}
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 09af0f7cd55e..3b91faacc1ba 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -1316,9 +1316,12 @@ xfs_vm_bmap(
1316 * The swap code (ab-)uses ->bmap to get a block mapping and then 1316 * The swap code (ab-)uses ->bmap to get a block mapping and then
1317 * bypasseѕ the file system for actual I/O. We really can't allow 1317 * bypasseѕ the file system for actual I/O. We really can't allow
1318 * that on reflinks inodes, so we have to skip out here. And yes, 1318 * that on reflinks inodes, so we have to skip out here. And yes,
1319 * 0 is the magic code for a bmap error.. 1319 * 0 is the magic code for a bmap error.
1320 *
1321 * Since we don't pass back blockdev info, we can't return bmap
1322 * information for rt files either.
1320 */ 1323 */
1321 if (xfs_is_reflink_inode(ip)) 1324 if (xfs_is_reflink_inode(ip) || XFS_IS_REALTIME_INODE(ip))
1322 return 0; 1325 return 0;
1323 1326
1324 filemap_write_and_wait(mapping); 1327 filemap_write_and_wait(mapping);
diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
index 2b954308a1d6..9e3cc2146d5b 100644
--- a/fs/xfs/xfs_bmap_util.c
+++ b/fs/xfs/xfs_bmap_util.c
@@ -582,9 +582,13 @@ xfs_getbmap(
582 } 582 }
583 break; 583 break;
584 default: 584 default:
585 /* Local format data forks report no extents. */
586 if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL) {
587 bmv->bmv_entries = 0;
588 return 0;
589 }
585 if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS && 590 if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS &&
586 ip->i_d.di_format != XFS_DINODE_FMT_BTREE && 591 ip->i_d.di_format != XFS_DINODE_FMT_BTREE)
587 ip->i_d.di_format != XFS_DINODE_FMT_LOCAL)
588 return -EINVAL; 592 return -EINVAL;
589 593
590 if (xfs_get_extsz_hint(ip) || 594 if (xfs_get_extsz_hint(ip) ||
@@ -712,7 +716,7 @@ xfs_getbmap(
712 * extents. 716 * extents.
713 */ 717 */
714 if (map[i].br_startblock == DELAYSTARTBLOCK && 718 if (map[i].br_startblock == DELAYSTARTBLOCK &&
715 map[i].br_startoff <= XFS_B_TO_FSB(mp, XFS_ISIZE(ip))) 719 map[i].br_startoff < XFS_B_TO_FSB(mp, XFS_ISIZE(ip)))
716 ASSERT((iflags & BMV_IF_DELALLOC) != 0); 720 ASSERT((iflags & BMV_IF_DELALLOC) != 0);
717 721
718 if (map[i].br_startblock == HOLESTARTBLOCK && 722 if (map[i].br_startblock == HOLESTARTBLOCK &&
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
index 62fa39276a24..16d6a578fc16 100644
--- a/fs/xfs/xfs_buf.c
+++ b/fs/xfs/xfs_buf.c
@@ -97,12 +97,16 @@ static inline void
97xfs_buf_ioacct_inc( 97xfs_buf_ioacct_inc(
98 struct xfs_buf *bp) 98 struct xfs_buf *bp)
99{ 99{
100 if (bp->b_flags & (XBF_NO_IOACCT|_XBF_IN_FLIGHT)) 100 if (bp->b_flags & XBF_NO_IOACCT)
101 return; 101 return;
102 102
103 ASSERT(bp->b_flags & XBF_ASYNC); 103 ASSERT(bp->b_flags & XBF_ASYNC);
104 bp->b_flags |= _XBF_IN_FLIGHT; 104 spin_lock(&bp->b_lock);
105 percpu_counter_inc(&bp->b_target->bt_io_count); 105 if (!(bp->b_state & XFS_BSTATE_IN_FLIGHT)) {
106 bp->b_state |= XFS_BSTATE_IN_FLIGHT;
107 percpu_counter_inc(&bp->b_target->bt_io_count);
108 }
109 spin_unlock(&bp->b_lock);
106} 110}
107 111
108/* 112/*
@@ -110,14 +114,24 @@ xfs_buf_ioacct_inc(
110 * freed and unaccount from the buftarg. 114 * freed and unaccount from the buftarg.
111 */ 115 */
112static inline void 116static inline void
113xfs_buf_ioacct_dec( 117__xfs_buf_ioacct_dec(
114 struct xfs_buf *bp) 118 struct xfs_buf *bp)
115{ 119{
116 if (!(bp->b_flags & _XBF_IN_FLIGHT)) 120 lockdep_assert_held(&bp->b_lock);
117 return;
118 121
119 bp->b_flags &= ~_XBF_IN_FLIGHT; 122 if (bp->b_state & XFS_BSTATE_IN_FLIGHT) {
120 percpu_counter_dec(&bp->b_target->bt_io_count); 123 bp->b_state &= ~XFS_BSTATE_IN_FLIGHT;
124 percpu_counter_dec(&bp->b_target->bt_io_count);
125 }
126}
127
128static inline void
129xfs_buf_ioacct_dec(
130 struct xfs_buf *bp)
131{
132 spin_lock(&bp->b_lock);
133 __xfs_buf_ioacct_dec(bp);
134 spin_unlock(&bp->b_lock);
121} 135}
122 136
123/* 137/*
@@ -149,9 +163,9 @@ xfs_buf_stale(
149 * unaccounted (released to LRU) before that occurs. Drop in-flight 163 * unaccounted (released to LRU) before that occurs. Drop in-flight
150 * status now to preserve accounting consistency. 164 * status now to preserve accounting consistency.
151 */ 165 */
152 xfs_buf_ioacct_dec(bp);
153
154 spin_lock(&bp->b_lock); 166 spin_lock(&bp->b_lock);
167 __xfs_buf_ioacct_dec(bp);
168
155 atomic_set(&bp->b_lru_ref, 0); 169 atomic_set(&bp->b_lru_ref, 0);
156 if (!(bp->b_state & XFS_BSTATE_DISPOSE) && 170 if (!(bp->b_state & XFS_BSTATE_DISPOSE) &&
157 (list_lru_del(&bp->b_target->bt_lru, &bp->b_lru))) 171 (list_lru_del(&bp->b_target->bt_lru, &bp->b_lru)))
@@ -979,12 +993,12 @@ xfs_buf_rele(
979 * ensures the decrement occurs only once per-buf. 993 * ensures the decrement occurs only once per-buf.
980 */ 994 */
981 if ((atomic_read(&bp->b_hold) == 1) && !list_empty(&bp->b_lru)) 995 if ((atomic_read(&bp->b_hold) == 1) && !list_empty(&bp->b_lru))
982 xfs_buf_ioacct_dec(bp); 996 __xfs_buf_ioacct_dec(bp);
983 goto out_unlock; 997 goto out_unlock;
984 } 998 }
985 999
986 /* the last reference has been dropped ... */ 1000 /* the last reference has been dropped ... */
987 xfs_buf_ioacct_dec(bp); 1001 __xfs_buf_ioacct_dec(bp);
988 if (!(bp->b_flags & XBF_STALE) && atomic_read(&bp->b_lru_ref)) { 1002 if (!(bp->b_flags & XBF_STALE) && atomic_read(&bp->b_lru_ref)) {
989 /* 1003 /*
990 * If the buffer is added to the LRU take a new reference to the 1004 * If the buffer is added to the LRU take a new reference to the
diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h
index 8d1d44f87ce9..1508121f29f2 100644
--- a/fs/xfs/xfs_buf.h
+++ b/fs/xfs/xfs_buf.h
@@ -63,7 +63,6 @@ typedef enum {
63#define _XBF_KMEM (1 << 21)/* backed by heap memory */ 63#define _XBF_KMEM (1 << 21)/* backed by heap memory */
64#define _XBF_DELWRI_Q (1 << 22)/* buffer on a delwri queue */ 64#define _XBF_DELWRI_Q (1 << 22)/* buffer on a delwri queue */
65#define _XBF_COMPOUND (1 << 23)/* compound buffer */ 65#define _XBF_COMPOUND (1 << 23)/* compound buffer */
66#define _XBF_IN_FLIGHT (1 << 25) /* I/O in flight, for accounting purposes */
67 66
68typedef unsigned int xfs_buf_flags_t; 67typedef unsigned int xfs_buf_flags_t;
69 68
@@ -84,14 +83,14 @@ typedef unsigned int xfs_buf_flags_t;
84 { _XBF_PAGES, "PAGES" }, \ 83 { _XBF_PAGES, "PAGES" }, \
85 { _XBF_KMEM, "KMEM" }, \ 84 { _XBF_KMEM, "KMEM" }, \
86 { _XBF_DELWRI_Q, "DELWRI_Q" }, \ 85 { _XBF_DELWRI_Q, "DELWRI_Q" }, \
87 { _XBF_COMPOUND, "COMPOUND" }, \ 86 { _XBF_COMPOUND, "COMPOUND" }
88 { _XBF_IN_FLIGHT, "IN_FLIGHT" }
89 87
90 88
91/* 89/*
92 * Internal state flags. 90 * Internal state flags.
93 */ 91 */
94#define XFS_BSTATE_DISPOSE (1 << 0) /* buffer being discarded */ 92#define XFS_BSTATE_DISPOSE (1 << 0) /* buffer being discarded */
93#define XFS_BSTATE_IN_FLIGHT (1 << 1) /* I/O in flight */
95 94
96/* 95/*
97 * The xfs_buftarg contains 2 notions of "sector size" - 96 * The xfs_buftarg contains 2 notions of "sector size" -
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index 35703a801372..5fb5a0958a14 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -1043,49 +1043,17 @@ xfs_find_get_desired_pgoff(
1043 1043
1044 index = startoff >> PAGE_SHIFT; 1044 index = startoff >> PAGE_SHIFT;
1045 endoff = XFS_FSB_TO_B(mp, map->br_startoff + map->br_blockcount); 1045 endoff = XFS_FSB_TO_B(mp, map->br_startoff + map->br_blockcount);
1046 end = endoff >> PAGE_SHIFT; 1046 end = (endoff - 1) >> PAGE_SHIFT;
1047 do { 1047 do {
1048 int want; 1048 int want;
1049 unsigned nr_pages; 1049 unsigned nr_pages;
1050 unsigned int i; 1050 unsigned int i;
1051 1051
1052 want = min_t(pgoff_t, end - index, PAGEVEC_SIZE); 1052 want = min_t(pgoff_t, end - index, PAGEVEC_SIZE - 1) + 1;
1053 nr_pages = pagevec_lookup(&pvec, inode->i_mapping, index, 1053 nr_pages = pagevec_lookup(&pvec, inode->i_mapping, index,
1054 want); 1054 want);
1055 /* 1055 if (nr_pages == 0)
1056 * No page mapped into given range. If we are searching holes
1057 * and if this is the first time we got into the loop, it means
1058 * that the given offset is landed in a hole, return it.
1059 *
1060 * If we have already stepped through some block buffers to find
1061 * holes but they all contains data. In this case, the last
1062 * offset is already updated and pointed to the end of the last
1063 * mapped page, if it does not reach the endpoint to search,
1064 * that means there should be a hole between them.
1065 */
1066 if (nr_pages == 0) {
1067 /* Data search found nothing */
1068 if (type == DATA_OFF)
1069 break;
1070
1071 ASSERT(type == HOLE_OFF);
1072 if (lastoff == startoff || lastoff < endoff) {
1073 found = true;
1074 *offset = lastoff;
1075 }
1076 break;
1077 }
1078
1079 /*
1080 * At lease we found one page. If this is the first time we
1081 * step into the loop, and if the first page index offset is
1082 * greater than the given search offset, a hole was found.
1083 */
1084 if (type == HOLE_OFF && lastoff == startoff &&
1085 lastoff < page_offset(pvec.pages[0])) {
1086 found = true;
1087 break; 1056 break;
1088 }
1089 1057
1090 for (i = 0; i < nr_pages; i++) { 1058 for (i = 0; i < nr_pages; i++) {
1091 struct page *page = pvec.pages[i]; 1059 struct page *page = pvec.pages[i];
@@ -1098,18 +1066,18 @@ xfs_find_get_desired_pgoff(
1098 * file mapping. However, page->index will not change 1066 * file mapping. However, page->index will not change
1099 * because we have a reference on the page. 1067 * because we have a reference on the page.
1100 * 1068 *
1101 * Searching done if the page index is out of range. 1069 * If current page offset is beyond where we've ended,
1102 * If the current offset is not reaches the end of 1070 * we've found a hole.
1103 * the specified search range, there should be a hole
1104 * between them.
1105 */ 1071 */
1106 if (page->index > end) { 1072 if (type == HOLE_OFF && lastoff < endoff &&
1107 if (type == HOLE_OFF && lastoff < endoff) { 1073 lastoff < page_offset(pvec.pages[i])) {
1108 *offset = lastoff; 1074 found = true;
1109 found = true; 1075 *offset = lastoff;
1110 }
1111 goto out; 1076 goto out;
1112 } 1077 }
1078 /* Searching done if the page index is out of range. */
1079 if (page->index > end)
1080 goto out;
1113 1081
1114 lock_page(page); 1082 lock_page(page);
1115 /* 1083 /*
@@ -1151,21 +1119,20 @@ xfs_find_get_desired_pgoff(
1151 1119
1152 /* 1120 /*
1153 * The number of returned pages less than our desired, search 1121 * The number of returned pages less than our desired, search
1154 * done. In this case, nothing was found for searching data, 1122 * done.
1155 * but we found a hole behind the last offset.
1156 */ 1123 */
1157 if (nr_pages < want) { 1124 if (nr_pages < want)
1158 if (type == HOLE_OFF) {
1159 *offset = lastoff;
1160 found = true;
1161 }
1162 break; 1125 break;
1163 }
1164 1126
1165 index = pvec.pages[i - 1]->index + 1; 1127 index = pvec.pages[i - 1]->index + 1;
1166 pagevec_release(&pvec); 1128 pagevec_release(&pvec);
1167 } while (index <= end); 1129 } while (index <= end);
1168 1130
1131 /* No page at lastoff and we are not done - we found a hole. */
1132 if (type == HOLE_OFF && lastoff < endoff) {
1133 *offset = lastoff;
1134 found = true;
1135 }
1169out: 1136out:
1170 pagevec_release(&pvec); 1137 pagevec_release(&pvec);
1171 return found; 1138 return found;
diff --git a/fs/xfs/xfs_fsmap.c b/fs/xfs/xfs_fsmap.c
index 3683819887a5..814ed729881d 100644
--- a/fs/xfs/xfs_fsmap.c
+++ b/fs/xfs/xfs_fsmap.c
@@ -828,6 +828,7 @@ xfs_getfsmap(
828 struct xfs_fsmap dkeys[2]; /* per-dev keys */ 828 struct xfs_fsmap dkeys[2]; /* per-dev keys */
829 struct xfs_getfsmap_dev handlers[XFS_GETFSMAP_DEVS]; 829 struct xfs_getfsmap_dev handlers[XFS_GETFSMAP_DEVS];
830 struct xfs_getfsmap_info info = { NULL }; 830 struct xfs_getfsmap_info info = { NULL };
831 bool use_rmap;
831 int i; 832 int i;
832 int error = 0; 833 int error = 0;
833 834
@@ -837,12 +838,14 @@ xfs_getfsmap(
837 !xfs_getfsmap_is_valid_device(mp, &head->fmh_keys[1])) 838 !xfs_getfsmap_is_valid_device(mp, &head->fmh_keys[1]))
838 return -EINVAL; 839 return -EINVAL;
839 840
841 use_rmap = capable(CAP_SYS_ADMIN) &&
842 xfs_sb_version_hasrmapbt(&mp->m_sb);
840 head->fmh_entries = 0; 843 head->fmh_entries = 0;
841 844
842 /* Set up our device handlers. */ 845 /* Set up our device handlers. */
843 memset(handlers, 0, sizeof(handlers)); 846 memset(handlers, 0, sizeof(handlers));
844 handlers[0].dev = new_encode_dev(mp->m_ddev_targp->bt_dev); 847 handlers[0].dev = new_encode_dev(mp->m_ddev_targp->bt_dev);
845 if (xfs_sb_version_hasrmapbt(&mp->m_sb)) 848 if (use_rmap)
846 handlers[0].fn = xfs_getfsmap_datadev_rmapbt; 849 handlers[0].fn = xfs_getfsmap_datadev_rmapbt;
847 else 850 else
848 handlers[0].fn = xfs_getfsmap_datadev_bnobt; 851 handlers[0].fn = xfs_getfsmap_datadev_bnobt;
diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
index f61c84f8e31a..990210fcb9c3 100644
--- a/fs/xfs/xfs_icache.c
+++ b/fs/xfs/xfs_icache.c
@@ -66,7 +66,6 @@ xfs_inode_alloc(
66 66
67 XFS_STATS_INC(mp, vn_active); 67 XFS_STATS_INC(mp, vn_active);
68 ASSERT(atomic_read(&ip->i_pincount) == 0); 68 ASSERT(atomic_read(&ip->i_pincount) == 0);
69 ASSERT(!spin_is_locked(&ip->i_flags_lock));
70 ASSERT(!xfs_isiflocked(ip)); 69 ASSERT(!xfs_isiflocked(ip));
71 ASSERT(ip->i_ino == 0); 70 ASSERT(ip->i_ino == 0);
72 71
@@ -190,7 +189,7 @@ xfs_perag_set_reclaim_tag(
190{ 189{
191 struct xfs_mount *mp = pag->pag_mount; 190 struct xfs_mount *mp = pag->pag_mount;
192 191
193 ASSERT(spin_is_locked(&pag->pag_ici_lock)); 192 lockdep_assert_held(&pag->pag_ici_lock);
194 if (pag->pag_ici_reclaimable++) 193 if (pag->pag_ici_reclaimable++)
195 return; 194 return;
196 195
@@ -212,7 +211,7 @@ xfs_perag_clear_reclaim_tag(
212{ 211{
213 struct xfs_mount *mp = pag->pag_mount; 212 struct xfs_mount *mp = pag->pag_mount;
214 213
215 ASSERT(spin_is_locked(&pag->pag_ici_lock)); 214 lockdep_assert_held(&pag->pag_ici_lock);
216 if (--pag->pag_ici_reclaimable) 215 if (--pag->pag_ici_reclaimable)
217 return; 216 return;
218 217
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index 197f3fffc9a7..408c7820e200 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -210,7 +210,8 @@ struct acpi_device_flags {
210 u32 of_compatible_ok:1; 210 u32 of_compatible_ok:1;
211 u32 coherent_dma:1; 211 u32 coherent_dma:1;
212 u32 cca_seen:1; 212 u32 cca_seen:1;
213 u32 reserved:20; 213 u32 spi_i2c_slave:1;
214 u32 reserved:19;
214}; 215};
215 216
216/* File System */ 217/* File System */
diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h
index d92543f3bbfd..bdc55c0da19c 100644
--- a/include/acpi/actbl.h
+++ b/include/acpi/actbl.h
@@ -374,6 +374,20 @@ struct acpi_table_desc {
374 u16 validation_count; 374 u16 validation_count;
375}; 375};
376 376
377/*
378 * Maximum value of the validation_count field in struct acpi_table_desc.
379 * When reached, validation_count cannot be changed any more and the table will
380 * be permanently regarded as validated.
381 *
382 * This is to prevent situations in which unbalanced table get/put operations
383 * may cause premature table unmapping in the OS to happen.
384 *
385 * The maximum validation count can be defined to any value, but should be
386 * greater than the maximum number of OS early stage mapping slots to avoid
387 * leaking early stage table mappings to the late stage.
388 */
389#define ACPI_MAX_TABLE_VALIDATIONS ACPI_UINT16_MAX
390
377/* Masks for Flags field above */ 391/* Masks for Flags field above */
378 392
379#define ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL (0) /* Virtual address, external maintained */ 393#define ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL (0) /* Virtual address, external maintained */
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
index c0bd0d7651a9..bb837310c07e 100644
--- a/include/drm/drm_dp_helper.h
+++ b/include/drm/drm_dp_helper.h
@@ -913,4 +913,55 @@ void drm_dp_aux_unregister(struct drm_dp_aux *aux);
913int drm_dp_start_crc(struct drm_dp_aux *aux, struct drm_crtc *crtc); 913int drm_dp_start_crc(struct drm_dp_aux *aux, struct drm_crtc *crtc);
914int drm_dp_stop_crc(struct drm_dp_aux *aux); 914int drm_dp_stop_crc(struct drm_dp_aux *aux);
915 915
916struct drm_dp_dpcd_ident {
917 u8 oui[3];
918 u8 device_id[6];
919 u8 hw_rev;
920 u8 sw_major_rev;
921 u8 sw_minor_rev;
922} __packed;
923
924/**
925 * struct drm_dp_desc - DP branch/sink device descriptor
926 * @ident: DP device identification from DPCD 0x400 (sink) or 0x500 (branch).
927 * @quirks: Quirks; use drm_dp_has_quirk() to query for the quirks.
928 */
929struct drm_dp_desc {
930 struct drm_dp_dpcd_ident ident;
931 u32 quirks;
932};
933
934int drm_dp_read_desc(struct drm_dp_aux *aux, struct drm_dp_desc *desc,
935 bool is_branch);
936
937/**
938 * enum drm_dp_quirk - Display Port sink/branch device specific quirks
939 *
940 * Display Port sink and branch devices in the wild have a variety of bugs, try
941 * to collect them here. The quirks are shared, but it's up to the drivers to
942 * implement workarounds for them.
943 */
944enum drm_dp_quirk {
945 /**
946 * @DP_DPCD_QUIRK_LIMITED_M_N:
947 *
948 * The device requires main link attributes Mvid and Nvid to be limited
949 * to 16 bits.
950 */
951 DP_DPCD_QUIRK_LIMITED_M_N,
952};
953
954/**
955 * drm_dp_has_quirk() - does the DP device have a specific quirk
956 * @desc: Device decriptor filled by drm_dp_read_desc()
957 * @quirk: Quirk to query for
958 *
959 * Return true if DP device identified by @desc has @quirk.
960 */
961static inline bool
962drm_dp_has_quirk(const struct drm_dp_desc *desc, enum drm_dp_quirk quirk)
963{
964 return desc->quirks & BIT(quirk);
965}
966
916#endif /* _DRM_DP_HELPER_H_ */ 967#endif /* _DRM_DP_HELPER_H_ */
diff --git a/include/dt-bindings/clock/sun50i-a64-ccu.h b/include/dt-bindings/clock/sun50i-a64-ccu.h
index 370c0a0473fc..d66432c6e675 100644
--- a/include/dt-bindings/clock/sun50i-a64-ccu.h
+++ b/include/dt-bindings/clock/sun50i-a64-ccu.h
@@ -43,6 +43,8 @@
43#ifndef _DT_BINDINGS_CLK_SUN50I_A64_H_ 43#ifndef _DT_BINDINGS_CLK_SUN50I_A64_H_
44#define _DT_BINDINGS_CLK_SUN50I_A64_H_ 44#define _DT_BINDINGS_CLK_SUN50I_A64_H_
45 45
46#define CLK_PLL_PERIPH0 11
47
46#define CLK_BUS_MIPI_DSI 28 48#define CLK_BUS_MIPI_DSI 28
47#define CLK_BUS_CE 29 49#define CLK_BUS_CE 29
48#define CLK_BUS_DMA 30 50#define CLK_BUS_DMA 30
diff --git a/include/dt-bindings/clock/sun8i-h3-ccu.h b/include/dt-bindings/clock/sun8i-h3-ccu.h
index c2afc41d6964..e139fe5c62ec 100644
--- a/include/dt-bindings/clock/sun8i-h3-ccu.h
+++ b/include/dt-bindings/clock/sun8i-h3-ccu.h
@@ -43,6 +43,8 @@
43#ifndef _DT_BINDINGS_CLK_SUN8I_H3_H_ 43#ifndef _DT_BINDINGS_CLK_SUN8I_H3_H_
44#define _DT_BINDINGS_CLK_SUN8I_H3_H_ 44#define _DT_BINDINGS_CLK_SUN8I_H3_H_
45 45
46#define CLK_PLL_PERIPH0 9
47
46#define CLK_CPUX 14 48#define CLK_CPUX 14
47 49
48#define CLK_BUS_CE 20 50#define CLK_BUS_CE 20
diff --git a/include/linux/bio.h b/include/linux/bio.h
index d1b04b0e99cf..a7e29fa0981f 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -426,6 +426,7 @@ extern void bio_advance(struct bio *, unsigned);
426 426
427extern void bio_init(struct bio *bio, struct bio_vec *table, 427extern void bio_init(struct bio *bio, struct bio_vec *table,
428 unsigned short max_vecs); 428 unsigned short max_vecs);
429extern void bio_uninit(struct bio *);
429extern void bio_reset(struct bio *); 430extern void bio_reset(struct bio *);
430void bio_chain(struct bio *, struct bio *); 431void bio_chain(struct bio *, struct bio *);
431 432
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index c47aa248c640..fcd641032f8d 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -238,7 +238,6 @@ void blk_mq_add_to_requeue_list(struct request *rq, bool at_head,
238 bool kick_requeue_list); 238 bool kick_requeue_list);
239void blk_mq_kick_requeue_list(struct request_queue *q); 239void blk_mq_kick_requeue_list(struct request_queue *q);
240void blk_mq_delay_kick_requeue_list(struct request_queue *q, unsigned long msecs); 240void blk_mq_delay_kick_requeue_list(struct request_queue *q, unsigned long msecs);
241void blk_mq_abort_requeue_list(struct request_queue *q);
242void blk_mq_complete_request(struct request *rq); 241void blk_mq_complete_request(struct request *rq);
243 242
244bool blk_mq_queue_stopped(struct request_queue *q); 243bool blk_mq_queue_stopped(struct request_queue *q);
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index ab92c4ea138b..1ddd36bd2173 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -391,6 +391,8 @@ struct request_queue {
391 int nr_rqs[2]; /* # allocated [a]sync rqs */ 391 int nr_rqs[2]; /* # allocated [a]sync rqs */
392 int nr_rqs_elvpriv; /* # allocated rqs w/ elvpriv */ 392 int nr_rqs_elvpriv; /* # allocated rqs w/ elvpriv */
393 393
394 atomic_t shared_hctx_restart;
395
394 struct blk_queue_stats *stats; 396 struct blk_queue_stats *stats;
395 struct rq_wb *rq_wb; 397 struct rq_wb *rq_wb;
396 398
@@ -586,6 +588,8 @@ struct request_queue {
586 588
587 size_t cmd_size; 589 size_t cmd_size;
588 void *rq_alloc_data; 590 void *rq_alloc_data;
591
592 struct work_struct release_work;
589}; 593};
590 594
591#define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */ 595#define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */
diff --git a/include/linux/ceph/ceph_debug.h b/include/linux/ceph/ceph_debug.h
index aa2e19182d99..51c5bd64bd00 100644
--- a/include/linux/ceph/ceph_debug.h
+++ b/include/linux/ceph/ceph_debug.h
@@ -3,6 +3,8 @@
3 3
4#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 4#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
5 5
6#include <linux/string.h>
7
6#ifdef CONFIG_CEPH_LIB_PRETTYDEBUG 8#ifdef CONFIG_CEPH_LIB_PRETTYDEBUG
7 9
8/* 10/*
@@ -12,12 +14,10 @@
12 */ 14 */
13 15
14# if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG) 16# if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
15extern const char *ceph_file_part(const char *s, int len);
16# define dout(fmt, ...) \ 17# define dout(fmt, ...) \
17 pr_debug("%.*s %12.12s:%-4d : " fmt, \ 18 pr_debug("%.*s %12.12s:%-4d : " fmt, \
18 8 - (int)sizeof(KBUILD_MODNAME), " ", \ 19 8 - (int)sizeof(KBUILD_MODNAME), " ", \
19 ceph_file_part(__FILE__, sizeof(__FILE__)), \ 20 kbasename(__FILE__), __LINE__, ##__VA_ARGS__)
20 __LINE__, ##__VA_ARGS__)
21# else 21# else
22/* faux printk call just to see any compiler warnings. */ 22/* faux printk call just to see any compiler warnings. */
23# define dout(fmt, ...) do { \ 23# define dout(fmt, ...) do { \
diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h
index 21745946cae1..ec47101cb1bf 100644
--- a/include/linux/cgroup-defs.h
+++ b/include/linux/cgroup-defs.h
@@ -48,6 +48,7 @@ enum {
48 CSS_ONLINE = (1 << 1), /* between ->css_online() and ->css_offline() */ 48 CSS_ONLINE = (1 << 1), /* between ->css_online() and ->css_offline() */
49 CSS_RELEASED = (1 << 2), /* refcnt reached zero, released */ 49 CSS_RELEASED = (1 << 2), /* refcnt reached zero, released */
50 CSS_VISIBLE = (1 << 3), /* css is visible to userland */ 50 CSS_VISIBLE = (1 << 3), /* css is visible to userland */
51 CSS_DYING = (1 << 4), /* css is dying */
51}; 52};
52 53
53/* bits in struct cgroup flags field */ 54/* bits in struct cgroup flags field */
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index ed2573e149fa..710a005c6b7a 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -344,6 +344,26 @@ static inline bool css_tryget_online(struct cgroup_subsys_state *css)
344} 344}
345 345
346/** 346/**
347 * css_is_dying - test whether the specified css is dying
348 * @css: target css
349 *
350 * Test whether @css is in the process of offlining or already offline. In
351 * most cases, ->css_online() and ->css_offline() callbacks should be
352 * enough; however, the actual offline operations are RCU delayed and this
353 * test returns %true also when @css is scheduled to be offlined.
354 *
355 * This is useful, for example, when the use case requires synchronous
356 * behavior with respect to cgroup removal. cgroup removal schedules css
357 * offlining but the css can seem alive while the operation is being
358 * delayed. If the delay affects user visible semantics, this test can be
359 * used to resolve the situation.
360 */
361static inline bool css_is_dying(struct cgroup_subsys_state *css)
362{
363 return !(css->flags & CSS_NO_REF) && percpu_ref_is_dying(&css->refcnt);
364}
365
366/**
347 * css_put - put a css reference 367 * css_put - put a css reference
348 * @css: target css 368 * @css: target css
349 * 369 *
diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h
index de179993e039..d614c5ea1b5e 100644
--- a/include/linux/compiler-clang.h
+++ b/include/linux/compiler-clang.h
@@ -15,3 +15,11 @@
15 * with any version that can compile the kernel 15 * with any version that can compile the kernel
16 */ 16 */
17#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) 17#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
18
19/*
20 * GCC does not warn about unused static inline functions for
21 * -Wunused-function. This turns out to avoid the need for complex #ifdef
22 * directives. Suppress the warning in clang as well.
23 */
24#undef inline
25#define inline inline __attribute__((unused)) notrace
diff --git a/include/linux/configfs.h b/include/linux/configfs.h
index 2319b8c108e8..c96709049683 100644
--- a/include/linux/configfs.h
+++ b/include/linux/configfs.h
@@ -74,7 +74,8 @@ extern void config_item_init_type_name(struct config_item *item,
74 const char *name, 74 const char *name,
75 struct config_item_type *type); 75 struct config_item_type *type);
76 76
77extern struct config_item * config_item_get(struct config_item *); 77extern struct config_item *config_item_get(struct config_item *);
78extern struct config_item *config_item_get_unless_zero(struct config_item *);
78extern void config_item_put(struct config_item *); 79extern void config_item_put(struct config_item *);
79 80
80struct config_item_type { 81struct config_item_type {
diff --git a/include/linux/dma-iommu.h b/include/linux/dma-iommu.h
index 4eac2670bfa1..92f20832fd28 100644
--- a/include/linux/dma-iommu.h
+++ b/include/linux/dma-iommu.h
@@ -78,6 +78,7 @@ void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list);
78 78
79struct iommu_domain; 79struct iommu_domain;
80struct msi_msg; 80struct msi_msg;
81struct device;
81 82
82static inline int iommu_dma_init(void) 83static inline int iommu_dma_init(void)
83{ 84{
diff --git a/include/linux/dmi.h b/include/linux/dmi.h
index 5e9c74cf8894..9bbf21a516e4 100644
--- a/include/linux/dmi.h
+++ b/include/linux/dmi.h
@@ -136,7 +136,7 @@ static inline int dmi_name_in_vendors(const char *s) { return 0; }
136static inline int dmi_name_in_serial(const char *s) { return 0; } 136static inline int dmi_name_in_serial(const char *s) { return 0; }
137#define dmi_available 0 137#define dmi_available 0
138static inline int dmi_walk(void (*decode)(const struct dmi_header *, void *), 138static inline int dmi_walk(void (*decode)(const struct dmi_header *, void *),
139 void *private_data) { return -1; } 139 void *private_data) { return -ENXIO; }
140static inline bool dmi_match(enum dmi_field f, const char *str) 140static inline bool dmi_match(enum dmi_field f, const char *str)
141 { return false; } 141 { return false; }
142static inline void dmi_memdev_name(u16 handle, const char **bank, 142static inline void dmi_memdev_name(u16 handle, const char **bank,
diff --git a/include/linux/elevator.h b/include/linux/elevator.h
index 9ec5e22846e0..0e306c5a86d6 100644
--- a/include/linux/elevator.h
+++ b/include/linux/elevator.h
@@ -153,7 +153,7 @@ struct elevator_type
153#endif 153#endif
154 154
155 /* managed by elevator core */ 155 /* managed by elevator core */
156 char icq_cache_name[ELV_NAME_MAX + 5]; /* elvname + "_io_cq" */ 156 char icq_cache_name[ELV_NAME_MAX + 6]; /* elvname + "_io_cq" */
157 struct list_head list; 157 struct list_head list;
158}; 158};
159 159
diff --git a/include/linux/filter.h b/include/linux/filter.h
index 56197f82af45..62d948f80730 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -272,6 +272,16 @@ struct bpf_prog_aux;
272 .off = OFF, \ 272 .off = OFF, \
273 .imm = IMM }) 273 .imm = IMM })
274 274
275/* Unconditional jumps, goto pc + off16 */
276
277#define BPF_JMP_A(OFF) \
278 ((struct bpf_insn) { \
279 .code = BPF_JMP | BPF_JA, \
280 .dst_reg = 0, \
281 .src_reg = 0, \
282 .off = OFF, \
283 .imm = 0 })
284
275/* Function call */ 285/* Function call */
276 286
277#define BPF_EMIT_CALL(FUNC) \ 287#define BPF_EMIT_CALL(FUNC) \
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 2b1a44f5bdb6..a89d37e8b387 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -41,7 +41,7 @@ struct vm_area_struct;
41#define ___GFP_WRITE 0x800000u 41#define ___GFP_WRITE 0x800000u
42#define ___GFP_KSWAPD_RECLAIM 0x1000000u 42#define ___GFP_KSWAPD_RECLAIM 0x1000000u
43#ifdef CONFIG_LOCKDEP 43#ifdef CONFIG_LOCKDEP
44#define ___GFP_NOLOCKDEP 0x4000000u 44#define ___GFP_NOLOCKDEP 0x2000000u
45#else 45#else
46#define ___GFP_NOLOCKDEP 0 46#define ___GFP_NOLOCKDEP 0
47#endif 47#endif
diff --git a/include/linux/gpio/machine.h b/include/linux/gpio/machine.h
index c0d712d22b07..f738d50cc17d 100644
--- a/include/linux/gpio/machine.h
+++ b/include/linux/gpio/machine.h
@@ -56,7 +56,14 @@ struct gpiod_lookup_table {
56 .flags = _flags, \ 56 .flags = _flags, \
57} 57}
58 58
59#ifdef CONFIG_GPIOLIB
59void gpiod_add_lookup_table(struct gpiod_lookup_table *table); 60void gpiod_add_lookup_table(struct gpiod_lookup_table *table);
60void gpiod_remove_lookup_table(struct gpiod_lookup_table *table); 61void gpiod_remove_lookup_table(struct gpiod_lookup_table *table);
62#else
63static inline
64void gpiod_add_lookup_table(struct gpiod_lookup_table *table) {}
65static inline
66void gpiod_remove_lookup_table(struct gpiod_lookup_table *table) {}
67#endif
61 68
62#endif /* __LINUX_GPIO_MACHINE_H */ 69#endif /* __LINUX_GPIO_MACHINE_H */
diff --git a/include/linux/hashtable.h b/include/linux/hashtable.h
index 661e5c2a8e2a..082dc1bd0801 100644
--- a/include/linux/hashtable.h
+++ b/include/linux/hashtable.h
@@ -167,7 +167,6 @@ static inline void hash_del_rcu(struct hlist_node *node)
167/** 167/**
168 * hash_for_each_possible_rcu - iterate over all possible objects hashing to the 168 * hash_for_each_possible_rcu - iterate over all possible objects hashing to the
169 * same bucket in an rcu enabled hashtable 169 * same bucket in an rcu enabled hashtable
170 * in a rcu enabled hashtable
171 * @name: hashtable to iterate 170 * @name: hashtable to iterate
172 * @obj: the type * to use as a loop cursor for each entry 171 * @obj: the type * to use as a loop cursor for each entry
173 * @member: the name of the hlist_node within the struct 172 * @member: the name of the hlist_node within the struct
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
index 8d5fcd6284ce..283dc2f5364d 100644
--- a/include/linux/if_vlan.h
+++ b/include/linux/if_vlan.h
@@ -614,14 +614,16 @@ static inline bool skb_vlan_tagged_multi(const struct sk_buff *skb)
614static inline netdev_features_t vlan_features_check(const struct sk_buff *skb, 614static inline netdev_features_t vlan_features_check(const struct sk_buff *skb,
615 netdev_features_t features) 615 netdev_features_t features)
616{ 616{
617 if (skb_vlan_tagged_multi(skb)) 617 if (skb_vlan_tagged_multi(skb)) {
618 features = netdev_intersect_features(features, 618 /* In the case of multi-tagged packets, use a direct mask
619 NETIF_F_SG | 619 * instead of using netdev_interesect_features(), to make
620 NETIF_F_HIGHDMA | 620 * sure that only devices supporting NETIF_F_HW_CSUM will
621 NETIF_F_FRAGLIST | 621 * have checksum offloading support.
622 NETIF_F_HW_CSUM | 622 */
623 NETIF_F_HW_VLAN_CTAG_TX | 623 features &= NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_HW_CSUM |
624 NETIF_F_HW_VLAN_STAG_TX); 624 NETIF_F_FRAGLIST | NETIF_F_HW_VLAN_CTAG_TX |
625 NETIF_F_HW_VLAN_STAG_TX;
626 }
625 627
626 return features; 628 return features;
627} 629}
diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h
index fffb91202bc9..1fa293a37f4a 100644
--- a/include/linux/irqchip/arm-gic-v3.h
+++ b/include/linux/irqchip/arm-gic-v3.h
@@ -417,6 +417,10 @@
417#define ICH_HCR_EN (1 << 0) 417#define ICH_HCR_EN (1 << 0)
418#define ICH_HCR_UIE (1 << 1) 418#define ICH_HCR_UIE (1 << 1)
419 419
420#define ICH_VMCR_ACK_CTL_SHIFT 2
421#define ICH_VMCR_ACK_CTL_MASK (1 << ICH_VMCR_ACK_CTL_SHIFT)
422#define ICH_VMCR_FIQ_EN_SHIFT 3
423#define ICH_VMCR_FIQ_EN_MASK (1 << ICH_VMCR_FIQ_EN_SHIFT)
420#define ICH_VMCR_CBPR_SHIFT 4 424#define ICH_VMCR_CBPR_SHIFT 4
421#define ICH_VMCR_CBPR_MASK (1 << ICH_VMCR_CBPR_SHIFT) 425#define ICH_VMCR_CBPR_MASK (1 << ICH_VMCR_CBPR_SHIFT)
422#define ICH_VMCR_EOIM_SHIFT 9 426#define ICH_VMCR_EOIM_SHIFT 9
diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h
index dc30f3d057eb..d3453ee072fc 100644
--- a/include/linux/irqchip/arm-gic.h
+++ b/include/linux/irqchip/arm-gic.h
@@ -25,7 +25,18 @@
25#define GICC_ENABLE 0x1 25#define GICC_ENABLE 0x1
26#define GICC_INT_PRI_THRESHOLD 0xf0 26#define GICC_INT_PRI_THRESHOLD 0xf0
27 27
28#define GIC_CPU_CTRL_EOImodeNS (1 << 9) 28#define GIC_CPU_CTRL_EnableGrp0_SHIFT 0
29#define GIC_CPU_CTRL_EnableGrp0 (1 << GIC_CPU_CTRL_EnableGrp0_SHIFT)
30#define GIC_CPU_CTRL_EnableGrp1_SHIFT 1
31#define GIC_CPU_CTRL_EnableGrp1 (1 << GIC_CPU_CTRL_EnableGrp1_SHIFT)
32#define GIC_CPU_CTRL_AckCtl_SHIFT 2
33#define GIC_CPU_CTRL_AckCtl (1 << GIC_CPU_CTRL_AckCtl_SHIFT)
34#define GIC_CPU_CTRL_FIQEn_SHIFT 3
35#define GIC_CPU_CTRL_FIQEn (1 << GIC_CPU_CTRL_FIQEn_SHIFT)
36#define GIC_CPU_CTRL_CBPR_SHIFT 4
37#define GIC_CPU_CTRL_CBPR (1 << GIC_CPU_CTRL_CBPR_SHIFT)
38#define GIC_CPU_CTRL_EOImodeNS_SHIFT 9
39#define GIC_CPU_CTRL_EOImodeNS (1 << GIC_CPU_CTRL_EOImodeNS_SHIFT)
29 40
30#define GICC_IAR_INT_ID_MASK 0x3ff 41#define GICC_IAR_INT_ID_MASK 0x3ff
31#define GICC_INT_SPURIOUS 1023 42#define GICC_INT_SPURIOUS 1023
@@ -84,8 +95,19 @@
84#define GICH_LR_EOI (1 << 19) 95#define GICH_LR_EOI (1 << 19)
85#define GICH_LR_HW (1 << 31) 96#define GICH_LR_HW (1 << 31)
86 97
87#define GICH_VMCR_CTRL_SHIFT 0 98#define GICH_VMCR_ENABLE_GRP0_SHIFT 0
88#define GICH_VMCR_CTRL_MASK (0x21f << GICH_VMCR_CTRL_SHIFT) 99#define GICH_VMCR_ENABLE_GRP0_MASK (1 << GICH_VMCR_ENABLE_GRP0_SHIFT)
100#define GICH_VMCR_ENABLE_GRP1_SHIFT 1
101#define GICH_VMCR_ENABLE_GRP1_MASK (1 << GICH_VMCR_ENABLE_GRP1_SHIFT)
102#define GICH_VMCR_ACK_CTL_SHIFT 2
103#define GICH_VMCR_ACK_CTL_MASK (1 << GICH_VMCR_ACK_CTL_SHIFT)
104#define GICH_VMCR_FIQ_EN_SHIFT 3
105#define GICH_VMCR_FIQ_EN_MASK (1 << GICH_VMCR_FIQ_EN_SHIFT)
106#define GICH_VMCR_CBPR_SHIFT 4
107#define GICH_VMCR_CBPR_MASK (1 << GICH_VMCR_CBPR_SHIFT)
108#define GICH_VMCR_EOI_MODE_SHIFT 9
109#define GICH_VMCR_EOI_MODE_MASK (1 << GICH_VMCR_EOI_MODE_SHIFT)
110
89#define GICH_VMCR_PRIMASK_SHIFT 27 111#define GICH_VMCR_PRIMASK_SHIFT 27
90#define GICH_VMCR_PRIMASK_MASK (0x1f << GICH_VMCR_PRIMASK_SHIFT) 112#define GICH_VMCR_PRIMASK_MASK (0x1f << GICH_VMCR_PRIMASK_SHIFT)
91#define GICH_VMCR_BINPOINT_SHIFT 21 113#define GICH_VMCR_BINPOINT_SHIFT 21
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index 36872fbb815d..734377ad42e9 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -64,13 +64,17 @@ extern int register_refined_jiffies(long clock_tick_rate);
64/* TICK_USEC is the time between ticks in usec assuming fake USER_HZ */ 64/* TICK_USEC is the time between ticks in usec assuming fake USER_HZ */
65#define TICK_USEC ((1000000UL + USER_HZ/2) / USER_HZ) 65#define TICK_USEC ((1000000UL + USER_HZ/2) / USER_HZ)
66 66
67#ifndef __jiffy_arch_data
68#define __jiffy_arch_data
69#endif
70
67/* 71/*
68 * The 64-bit value is not atomic - you MUST NOT read it 72 * The 64-bit value is not atomic - you MUST NOT read it
69 * without sampling the sequence number in jiffies_lock. 73 * without sampling the sequence number in jiffies_lock.
70 * get_jiffies_64() will do this for you as appropriate. 74 * get_jiffies_64() will do this for you as appropriate.
71 */ 75 */
72extern u64 __cacheline_aligned_in_smp jiffies_64; 76extern u64 __cacheline_aligned_in_smp jiffies_64;
73extern unsigned long volatile __cacheline_aligned_in_smp jiffies; 77extern unsigned long volatile __cacheline_aligned_in_smp __jiffy_arch_data jiffies;
74 78
75#if (BITS_PER_LONG < 64) 79#if (BITS_PER_LONG < 64)
76u64 get_jiffies_64(void); 80u64 get_jiffies_64(void);
diff --git a/include/linux/key.h b/include/linux/key.h
index 0c9b93b0d1f7..78e25aabedaf 100644
--- a/include/linux/key.h
+++ b/include/linux/key.h
@@ -173,7 +173,6 @@ struct key {
173#ifdef KEY_DEBUGGING 173#ifdef KEY_DEBUGGING
174 unsigned magic; 174 unsigned magic;
175#define KEY_DEBUG_MAGIC 0x18273645u 175#define KEY_DEBUG_MAGIC 0x18273645u
176#define KEY_DEBUG_MAGIC_X 0xf8e9dacbu
177#endif 176#endif
178 177
179 unsigned long flags; /* status flags (change with bitops) */ 178 unsigned long flags; /* status flags (change with bitops) */
diff --git a/include/linux/memblock.h b/include/linux/memblock.h
index 4ce24a376262..8098695e5d8d 100644
--- a/include/linux/memblock.h
+++ b/include/linux/memblock.h
@@ -425,12 +425,20 @@ static inline void early_memtest(phys_addr_t start, phys_addr_t end)
425} 425}
426#endif 426#endif
427 427
428extern unsigned long memblock_reserved_memory_within(phys_addr_t start_addr,
429 phys_addr_t end_addr);
428#else 430#else
429static inline phys_addr_t memblock_alloc(phys_addr_t size, phys_addr_t align) 431static inline phys_addr_t memblock_alloc(phys_addr_t size, phys_addr_t align)
430{ 432{
431 return 0; 433 return 0;
432} 434}
433 435
436static inline unsigned long memblock_reserved_memory_within(phys_addr_t start_addr,
437 phys_addr_t end_addr)
438{
439 return 0;
440}
441
434#endif /* CONFIG_HAVE_MEMBLOCK */ 442#endif /* CONFIG_HAVE_MEMBLOCK */
435 443
436#endif /* __KERNEL__ */ 444#endif /* __KERNEL__ */
diff --git a/include/linux/mlx4/qp.h b/include/linux/mlx4/qp.h
index b4ee8f62ce8d..8e2828d48d7f 100644
--- a/include/linux/mlx4/qp.h
+++ b/include/linux/mlx4/qp.h
@@ -470,6 +470,7 @@ struct mlx4_update_qp_params {
470 u16 rate_val; 470 u16 rate_val;
471}; 471};
472 472
473struct mlx4_qp *mlx4_qp_lookup(struct mlx4_dev *dev, u32 qpn);
473int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn, 474int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn,
474 enum mlx4_update_qp_attr attr, 475 enum mlx4_update_qp_attr attr,
475 struct mlx4_update_qp_params *params); 476 struct mlx4_update_qp_params *params);
diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h
index dd9a263ed368..a940ec6a046c 100644
--- a/include/linux/mlx5/device.h
+++ b/include/linux/mlx5/device.h
@@ -787,8 +787,14 @@ enum {
787}; 787};
788 788
789enum { 789enum {
790 CQE_RSS_HTYPE_IP = 0x3 << 6, 790 CQE_RSS_HTYPE_IP = 0x3 << 2,
791 CQE_RSS_HTYPE_L4 = 0x3 << 2, 791 /* cqe->rss_hash_type[3:2] - IP destination selected for hash
792 * (00 = none, 01 = IPv4, 10 = IPv6, 11 = Reserved)
793 */
794 CQE_RSS_HTYPE_L4 = 0x3 << 6,
795 /* cqe->rss_hash_type[7:6] - L4 destination selected for hash
796 * (00 = none, 01 = TCP. 10 = UDP, 11 = IPSEC.SPI
797 */
792}; 798};
793 799
794enum { 800enum {
diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
index bcdf739ee41a..93273d9ea4d1 100644
--- a/include/linux/mlx5/driver.h
+++ b/include/linux/mlx5/driver.h
@@ -787,7 +787,12 @@ enum {
787 787
788typedef void (*mlx5_cmd_cbk_t)(int status, void *context); 788typedef void (*mlx5_cmd_cbk_t)(int status, void *context);
789 789
790enum {
791 MLX5_CMD_ENT_STATE_PENDING_COMP,
792};
793
790struct mlx5_cmd_work_ent { 794struct mlx5_cmd_work_ent {
795 unsigned long state;
791 struct mlx5_cmd_msg *in; 796 struct mlx5_cmd_msg *in;
792 struct mlx5_cmd_msg *out; 797 struct mlx5_cmd_msg *out;
793 void *uout; 798 void *uout;
@@ -976,7 +981,7 @@ void mlx5_cq_completion(struct mlx5_core_dev *dev, u32 cqn);
976void mlx5_rsc_event(struct mlx5_core_dev *dev, u32 rsn, int event_type); 981void mlx5_rsc_event(struct mlx5_core_dev *dev, u32 rsn, int event_type);
977void mlx5_srq_event(struct mlx5_core_dev *dev, u32 srqn, int event_type); 982void mlx5_srq_event(struct mlx5_core_dev *dev, u32 srqn, int event_type);
978struct mlx5_core_srq *mlx5_core_get_srq(struct mlx5_core_dev *dev, u32 srqn); 983struct mlx5_core_srq *mlx5_core_get_srq(struct mlx5_core_dev *dev, u32 srqn);
979void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec); 984void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec, bool forced);
980void mlx5_cq_event(struct mlx5_core_dev *dev, u32 cqn, int event_type); 985void mlx5_cq_event(struct mlx5_core_dev *dev, u32 cqn, int event_type);
981int mlx5_create_map_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq, u8 vecidx, 986int mlx5_create_map_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq, u8 vecidx,
982 int nent, u64 mask, const char *name, 987 int nent, u64 mask, const char *name,
diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h
index 32de0724b400..edafedb7b509 100644
--- a/include/linux/mlx5/mlx5_ifc.h
+++ b/include/linux/mlx5/mlx5_ifc.h
@@ -766,6 +766,12 @@ enum {
766 MLX5_CAP_PORT_TYPE_ETH = 0x1, 766 MLX5_CAP_PORT_TYPE_ETH = 0x1,
767}; 767};
768 768
769enum {
770 MLX5_CAP_UMR_FENCE_STRONG = 0x0,
771 MLX5_CAP_UMR_FENCE_SMALL = 0x1,
772 MLX5_CAP_UMR_FENCE_NONE = 0x2,
773};
774
769struct mlx5_ifc_cmd_hca_cap_bits { 775struct mlx5_ifc_cmd_hca_cap_bits {
770 u8 reserved_at_0[0x80]; 776 u8 reserved_at_0[0x80];
771 777
@@ -875,7 +881,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
875 u8 reserved_at_202[0x1]; 881 u8 reserved_at_202[0x1];
876 u8 ipoib_enhanced_offloads[0x1]; 882 u8 ipoib_enhanced_offloads[0x1];
877 u8 ipoib_basic_offloads[0x1]; 883 u8 ipoib_basic_offloads[0x1];
878 u8 reserved_at_205[0xa]; 884 u8 reserved_at_205[0x5];
885 u8 umr_fence[0x2];
886 u8 reserved_at_20c[0x3];
879 u8 drain_sigerr[0x1]; 887 u8 drain_sigerr[0x1];
880 u8 cmdif_checksum[0x2]; 888 u8 cmdif_checksum[0x2];
881 u8 sigerr_cqe[0x1]; 889 u8 sigerr_cqe[0x1];
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 7cb17c6b97de..6f543a47fc92 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1393,12 +1393,6 @@ int clear_page_dirty_for_io(struct page *page);
1393 1393
1394int get_cmdline(struct task_struct *task, char *buffer, int buflen); 1394int get_cmdline(struct task_struct *task, char *buffer, int buflen);
1395 1395
1396/* Is the vma a continuation of the stack vma above it? */
1397static inline int vma_growsdown(struct vm_area_struct *vma, unsigned long addr)
1398{
1399 return vma && (vma->vm_end == addr) && (vma->vm_flags & VM_GROWSDOWN);
1400}
1401
1402static inline bool vma_is_anonymous(struct vm_area_struct *vma) 1396static inline bool vma_is_anonymous(struct vm_area_struct *vma)
1403{ 1397{
1404 return !vma->vm_ops; 1398 return !vma->vm_ops;
@@ -1414,28 +1408,6 @@ bool vma_is_shmem(struct vm_area_struct *vma);
1414static inline bool vma_is_shmem(struct vm_area_struct *vma) { return false; } 1408static inline bool vma_is_shmem(struct vm_area_struct *vma) { return false; }
1415#endif 1409#endif
1416 1410
1417static inline int stack_guard_page_start(struct vm_area_struct *vma,
1418 unsigned long addr)
1419{
1420 return (vma->vm_flags & VM_GROWSDOWN) &&
1421 (vma->vm_start == addr) &&
1422 !vma_growsdown(vma->vm_prev, addr);
1423}
1424
1425/* Is the vma a continuation of the stack vma below it? */
1426static inline int vma_growsup(struct vm_area_struct *vma, unsigned long addr)
1427{
1428 return vma && (vma->vm_start == addr) && (vma->vm_flags & VM_GROWSUP);
1429}
1430
1431static inline int stack_guard_page_end(struct vm_area_struct *vma,
1432 unsigned long addr)
1433{
1434 return (vma->vm_flags & VM_GROWSUP) &&
1435 (vma->vm_end == addr) &&
1436 !vma_growsup(vma->vm_next, addr);
1437}
1438
1439int vma_is_stack_for_current(struct vm_area_struct *vma); 1411int vma_is_stack_for_current(struct vm_area_struct *vma);
1440 1412
1441extern unsigned long move_page_tables(struct vm_area_struct *vma, 1413extern unsigned long move_page_tables(struct vm_area_struct *vma,
@@ -2222,6 +2194,7 @@ void page_cache_async_readahead(struct address_space *mapping,
2222 pgoff_t offset, 2194 pgoff_t offset,
2223 unsigned long size); 2195 unsigned long size);
2224 2196
2197extern unsigned long stack_guard_gap;
2225/* Generic expand stack which grows the stack according to GROWS{UP,DOWN} */ 2198/* Generic expand stack which grows the stack according to GROWS{UP,DOWN} */
2226extern int expand_stack(struct vm_area_struct *vma, unsigned long address); 2199extern int expand_stack(struct vm_area_struct *vma, unsigned long address);
2227 2200
@@ -2250,6 +2223,30 @@ static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * m
2250 return vma; 2223 return vma;
2251} 2224}
2252 2225
2226static inline unsigned long vm_start_gap(struct vm_area_struct *vma)
2227{
2228 unsigned long vm_start = vma->vm_start;
2229
2230 if (vma->vm_flags & VM_GROWSDOWN) {
2231 vm_start -= stack_guard_gap;
2232 if (vm_start > vma->vm_start)
2233 vm_start = 0;
2234 }
2235 return vm_start;
2236}
2237
2238static inline unsigned long vm_end_gap(struct vm_area_struct *vma)
2239{
2240 unsigned long vm_end = vma->vm_end;
2241
2242 if (vma->vm_flags & VM_GROWSUP) {
2243 vm_end += stack_guard_gap;
2244 if (vm_end < vma->vm_end)
2245 vm_end = -PAGE_SIZE;
2246 }
2247 return vm_end;
2248}
2249
2253static inline unsigned long vma_pages(struct vm_area_struct *vma) 2250static inline unsigned long vma_pages(struct vm_area_struct *vma)
2254{ 2251{
2255 return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; 2252 return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
@@ -2327,6 +2324,17 @@ static inline struct page *follow_page(struct vm_area_struct *vma,
2327#define FOLL_REMOTE 0x2000 /* we are working on non-current tsk/mm */ 2324#define FOLL_REMOTE 0x2000 /* we are working on non-current tsk/mm */
2328#define FOLL_COW 0x4000 /* internal GUP flag */ 2325#define FOLL_COW 0x4000 /* internal GUP flag */
2329 2326
2327static inline int vm_fault_to_errno(int vm_fault, int foll_flags)
2328{
2329 if (vm_fault & VM_FAULT_OOM)
2330 return -ENOMEM;
2331 if (vm_fault & (VM_FAULT_HWPOISON | VM_FAULT_HWPOISON_LARGE))
2332 return (foll_flags & FOLL_HWPOISON) ? -EHWPOISON : -EFAULT;
2333 if (vm_fault & (VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV))
2334 return -EFAULT;
2335 return 0;
2336}
2337
2330typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr, 2338typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr,
2331 void *data); 2339 void *data);
2332extern int apply_to_page_range(struct mm_struct *mm, unsigned long address, 2340extern int apply_to_page_range(struct mm_struct *mm, unsigned long address,
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index ebaccd4e7d8c..ef6a13b7bd3e 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -678,6 +678,7 @@ typedef struct pglist_data {
678 * is the first PFN that needs to be initialised. 678 * is the first PFN that needs to be initialised.
679 */ 679 */
680 unsigned long first_deferred_pfn; 680 unsigned long first_deferred_pfn;
681 unsigned long static_init_size;
681#endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */ 682#endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */
682 683
683#ifdef CONFIG_TRANSPARENT_HUGEPAGE 684#ifdef CONFIG_TRANSPARENT_HUGEPAGE
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 566fda587fcf..3f74ef2281e8 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -467,6 +467,7 @@ enum dmi_field {
467 DMI_PRODUCT_VERSION, 467 DMI_PRODUCT_VERSION,
468 DMI_PRODUCT_SERIAL, 468 DMI_PRODUCT_SERIAL,
469 DMI_PRODUCT_UUID, 469 DMI_PRODUCT_UUID,
470 DMI_PRODUCT_FAMILY,
470 DMI_BOARD_VENDOR, 471 DMI_BOARD_VENDOR,
471 DMI_BOARD_NAME, 472 DMI_BOARD_NAME,
472 DMI_BOARD_VERSION, 473 DMI_BOARD_VERSION,
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
index 6be1949ebcdf..1ee7b30dafec 100644
--- a/include/linux/moduleparam.h
+++ b/include/linux/moduleparam.h
@@ -457,7 +457,7 @@ enum hwparam_type {
457 hwparam_ioport, /* Module parameter configures an I/O port */ 457 hwparam_ioport, /* Module parameter configures an I/O port */
458 hwparam_iomem, /* Module parameter configures an I/O mem address */ 458 hwparam_iomem, /* Module parameter configures an I/O mem address */
459 hwparam_ioport_or_iomem, /* Module parameter could be either, depending on other option */ 459 hwparam_ioport_or_iomem, /* Module parameter could be either, depending on other option */
460 hwparam_irq, /* Module parameter configures an I/O port */ 460 hwparam_irq, /* Module parameter configures an IRQ */
461 hwparam_dma, /* Module parameter configures a DMA channel */ 461 hwparam_dma, /* Module parameter configures a DMA channel */
462 hwparam_dma_addr, /* Module parameter configures a DMA buffer address */ 462 hwparam_dma_addr, /* Module parameter configures a DMA buffer address */
463 hwparam_other, /* Module parameter configures some other value */ 463 hwparam_other, /* Module parameter configures some other value */
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 3f39d27decf4..4ed952c17fc7 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -914,8 +914,7 @@ struct xfrmdev_ops {
914 * 914 *
915 * int (*ndo_change_mtu)(struct net_device *dev, int new_mtu); 915 * int (*ndo_change_mtu)(struct net_device *dev, int new_mtu);
916 * Called when a user wants to change the Maximum Transfer Unit 916 * Called when a user wants to change the Maximum Transfer Unit
917 * of a device. If not defined, any request to change MTU will 917 * of a device.
918 * will return an error.
919 * 918 *
920 * void (*ndo_tx_timeout)(struct net_device *dev); 919 * void (*ndo_tx_timeout)(struct net_device *dev);
921 * Callback used when the transmitter has not made any progress 920 * Callback used when the transmitter has not made any progress
@@ -1596,8 +1595,8 @@ enum netdev_priv_flags {
1596 * @rtnl_link_state: This enum represents the phases of creating 1595 * @rtnl_link_state: This enum represents the phases of creating
1597 * a new link 1596 * a new link
1598 * 1597 *
1599 * @destructor: Called from unregister, 1598 * @needs_free_netdev: Should unregister perform free_netdev?
1600 * can be used to call free_netdev 1599 * @priv_destructor: Called from unregister
1601 * @npinfo: XXX: need comments on this one 1600 * @npinfo: XXX: need comments on this one
1602 * @nd_net: Network namespace this network device is inside 1601 * @nd_net: Network namespace this network device is inside
1603 * 1602 *
@@ -1858,7 +1857,8 @@ struct net_device {
1858 RTNL_LINK_INITIALIZING, 1857 RTNL_LINK_INITIALIZING,
1859 } rtnl_link_state:16; 1858 } rtnl_link_state:16;
1860 1859
1861 void (*destructor)(struct net_device *dev); 1860 bool needs_free_netdev;
1861 void (*priv_destructor)(struct net_device *dev);
1862 1862
1863#ifdef CONFIG_NETPOLL 1863#ifdef CONFIG_NETPOLL
1864 struct netpoll_info __rcu *npinfo; 1864 struct netpoll_info __rcu *npinfo;
@@ -4261,6 +4261,11 @@ static inline const char *netdev_name(const struct net_device *dev)
4261 return dev->name; 4261 return dev->name;
4262} 4262}
4263 4263
4264static inline bool netdev_unregistering(const struct net_device *dev)
4265{
4266 return dev->reg_state == NETREG_UNREGISTERING;
4267}
4268
4264static inline const char *netdev_reg_state(const struct net_device *dev) 4269static inline const char *netdev_reg_state(const struct net_device *dev)
4265{ 4270{
4266 switch (dev->reg_state) { 4271 switch (dev->reg_state) {
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h
index be378cf47fcc..b3044c2c62cb 100644
--- a/include/linux/netfilter/x_tables.h
+++ b/include/linux/netfilter/x_tables.h
@@ -294,7 +294,7 @@ int xt_match_to_user(const struct xt_entry_match *m,
294int xt_target_to_user(const struct xt_entry_target *t, 294int xt_target_to_user(const struct xt_entry_target *t,
295 struct xt_entry_target __user *u); 295 struct xt_entry_target __user *u);
296int xt_data_to_user(void __user *dst, const void *src, 296int xt_data_to_user(void __user *dst, const void *src,
297 int usersize, int size); 297 int usersize, int size, int aligned_size);
298 298
299void *xt_copy_counters_from_user(const void __user *user, unsigned int len, 299void *xt_copy_counters_from_user(const void __user *user, unsigned int len,
300 struct xt_counters_info *info, bool compat); 300 struct xt_counters_info *info, bool compat);
diff --git a/include/linux/netfilter_bridge/ebtables.h b/include/linux/netfilter_bridge/ebtables.h
index a30efb437e6d..e0cbf17af780 100644
--- a/include/linux/netfilter_bridge/ebtables.h
+++ b/include/linux/netfilter_bridge/ebtables.h
@@ -125,4 +125,9 @@ extern unsigned int ebt_do_table(struct sk_buff *skb,
125/* True if the target is not a standard target */ 125/* True if the target is not a standard target */
126#define INVALID_TARGET (info->target < -NUM_STANDARD_TARGETS || info->target >= 0) 126#define INVALID_TARGET (info->target < -NUM_STANDARD_TARGETS || info->target >= 0)
127 127
128static inline bool ebt_invalid_target(int target)
129{
130 return (target < -NUM_STANDARD_TARGETS || target >= 0);
131}
132
128#endif 133#endif
diff --git a/include/linux/of_graph.h b/include/linux/of_graph.h
index abdb02eaef06..3e058f05ab04 100644
--- a/include/linux/of_graph.h
+++ b/include/linux/of_graph.h
@@ -43,11 +43,15 @@ struct of_endpoint {
43#ifdef CONFIG_OF 43#ifdef CONFIG_OF
44int of_graph_parse_endpoint(const struct device_node *node, 44int of_graph_parse_endpoint(const struct device_node *node,
45 struct of_endpoint *endpoint); 45 struct of_endpoint *endpoint);
46int of_graph_get_endpoint_count(const struct device_node *np);
46struct device_node *of_graph_get_port_by_id(struct device_node *node, u32 id); 47struct device_node *of_graph_get_port_by_id(struct device_node *node, u32 id);
47struct device_node *of_graph_get_next_endpoint(const struct device_node *parent, 48struct device_node *of_graph_get_next_endpoint(const struct device_node *parent,
48 struct device_node *previous); 49 struct device_node *previous);
49struct device_node *of_graph_get_endpoint_by_regs( 50struct device_node *of_graph_get_endpoint_by_regs(
50 const struct device_node *parent, int port_reg, int reg); 51 const struct device_node *parent, int port_reg, int reg);
52struct device_node *of_graph_get_remote_endpoint(
53 const struct device_node *node);
54struct device_node *of_graph_get_port_parent(struct device_node *node);
51struct device_node *of_graph_get_remote_port_parent( 55struct device_node *of_graph_get_remote_port_parent(
52 const struct device_node *node); 56 const struct device_node *node);
53struct device_node *of_graph_get_remote_port(const struct device_node *node); 57struct device_node *of_graph_get_remote_port(const struct device_node *node);
@@ -61,6 +65,11 @@ static inline int of_graph_parse_endpoint(const struct device_node *node,
61 return -ENOSYS; 65 return -ENOSYS;
62} 66}
63 67
68static inline int of_graph_get_endpoint_count(const struct device_node *np)
69{
70 return 0;
71}
72
64static inline struct device_node *of_graph_get_port_by_id( 73static inline struct device_node *of_graph_get_port_by_id(
65 struct device_node *node, u32 id) 74 struct device_node *node, u32 id)
66{ 75{
@@ -80,6 +89,18 @@ static inline struct device_node *of_graph_get_endpoint_by_regs(
80 return NULL; 89 return NULL;
81} 90}
82 91
92static inline struct device_node *of_graph_get_remote_endpoint(
93 const struct device_node *node)
94{
95 return NULL;
96}
97
98static inline struct device_node *of_graph_get_port_parent(
99 struct device_node *node)
100{
101 return NULL;
102}
103
83static inline struct device_node *of_graph_get_remote_port_parent( 104static inline struct device_node *of_graph_get_remote_port_parent(
84 const struct device_node *node) 105 const struct device_node *node)
85{ 106{
diff --git a/include/linux/of_platform.h b/include/linux/of_platform.h
index dc8224ae28d5..e0d1946270f3 100644
--- a/include/linux/of_platform.h
+++ b/include/linux/of_platform.h
@@ -64,6 +64,7 @@ extern struct platform_device *of_platform_device_create(struct device_node *np,
64 const char *bus_id, 64 const char *bus_id,
65 struct device *parent); 65 struct device *parent);
66 66
67extern int of_platform_device_destroy(struct device *dev, void *data);
67extern int of_platform_bus_probe(struct device_node *root, 68extern int of_platform_bus_probe(struct device_node *root,
68 const struct of_device_id *matches, 69 const struct of_device_id *matches,
69 struct device *parent); 70 struct device *parent);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 33c2b0b77429..8039f9f0ca05 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -183,6 +183,11 @@ enum pci_dev_flags {
183 PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = (__force pci_dev_flags_t) (1 << 9), 183 PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = (__force pci_dev_flags_t) (1 << 9),
184 /* Do not use FLR even if device advertises PCI_AF_CAP */ 184 /* Do not use FLR even if device advertises PCI_AF_CAP */
185 PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 << 10), 185 PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 << 10),
186 /*
187 * Resume before calling the driver's system suspend hooks, disabling
188 * the direct_complete optimization.
189 */
190 PCI_DEV_FLAGS_NEEDS_RESUME = (__force pci_dev_flags_t) (1 << 11),
186}; 191};
187 192
188enum pci_irq_reroute_variant { 193enum pci_irq_reroute_variant {
@@ -1342,9 +1347,9 @@ pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
1342 unsigned int max_vecs, unsigned int flags, 1347 unsigned int max_vecs, unsigned int flags,
1343 const struct irq_affinity *aff_desc) 1348 const struct irq_affinity *aff_desc)
1344{ 1349{
1345 if (min_vecs > 1) 1350 if ((flags & PCI_IRQ_LEGACY) && min_vecs == 1 && dev->irq)
1346 return -EINVAL; 1351 return 1;
1347 return 1; 1352 return -ENOSPC;
1348} 1353}
1349 1354
1350static inline void pci_free_irq_vectors(struct pci_dev *dev) 1355static inline void pci_free_irq_vectors(struct pci_dev *dev)
diff --git a/include/linux/pinctrl/pinconf-generic.h b/include/linux/pinctrl/pinconf-generic.h
index 279e3c5326e3..7620eb127cff 100644
--- a/include/linux/pinctrl/pinconf-generic.h
+++ b/include/linux/pinctrl/pinconf-generic.h
@@ -42,8 +42,6 @@
42 * @PIN_CONFIG_BIAS_PULL_UP: the pin will be pulled up (usually with high 42 * @PIN_CONFIG_BIAS_PULL_UP: the pin will be pulled up (usually with high
43 * impedance to VDD). If the argument is != 0 pull-up is enabled, 43 * impedance to VDD). If the argument is != 0 pull-up is enabled,
44 * if it is 0, pull-up is total, i.e. the pin is connected to VDD. 44 * if it is 0, pull-up is total, i.e. the pin is connected to VDD.
45 * @PIN_CONFIG_BIDIRECTIONAL: the pin will be configured to allow simultaneous
46 * input and output operations.
47 * @PIN_CONFIG_DRIVE_OPEN_DRAIN: the pin will be driven with open drain (open 45 * @PIN_CONFIG_DRIVE_OPEN_DRAIN: the pin will be driven with open drain (open
48 * collector) which means it is usually wired with other output ports 46 * collector) which means it is usually wired with other output ports
49 * which are then pulled up with an external resistor. Setting this 47 * which are then pulled up with an external resistor. Setting this
@@ -98,7 +96,6 @@ enum pin_config_param {
98 PIN_CONFIG_BIAS_PULL_DOWN, 96 PIN_CONFIG_BIAS_PULL_DOWN,
99 PIN_CONFIG_BIAS_PULL_PIN_DEFAULT, 97 PIN_CONFIG_BIAS_PULL_PIN_DEFAULT,
100 PIN_CONFIG_BIAS_PULL_UP, 98 PIN_CONFIG_BIAS_PULL_UP,
101 PIN_CONFIG_BIDIRECTIONAL,
102 PIN_CONFIG_DRIVE_OPEN_DRAIN, 99 PIN_CONFIG_DRIVE_OPEN_DRAIN,
103 PIN_CONFIG_DRIVE_OPEN_SOURCE, 100 PIN_CONFIG_DRIVE_OPEN_SOURCE,
104 PIN_CONFIG_DRIVE_PUSH_PULL, 101 PIN_CONFIG_DRIVE_PUSH_PULL,
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index 422bc2e4cb6a..ef3eb8bbfee4 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -54,7 +54,8 @@ extern int ptrace_request(struct task_struct *child, long request,
54 unsigned long addr, unsigned long data); 54 unsigned long addr, unsigned long data);
55extern void ptrace_notify(int exit_code); 55extern void ptrace_notify(int exit_code);
56extern void __ptrace_link(struct task_struct *child, 56extern void __ptrace_link(struct task_struct *child,
57 struct task_struct *new_parent); 57 struct task_struct *new_parent,
58 const struct cred *ptracer_cred);
58extern void __ptrace_unlink(struct task_struct *child); 59extern void __ptrace_unlink(struct task_struct *child);
59extern void exit_ptrace(struct task_struct *tracer, struct list_head *dead); 60extern void exit_ptrace(struct task_struct *tracer, struct list_head *dead);
60#define PTRACE_MODE_READ 0x01 61#define PTRACE_MODE_READ 0x01
@@ -206,7 +207,7 @@ static inline void ptrace_init_task(struct task_struct *child, bool ptrace)
206 207
207 if (unlikely(ptrace) && current->ptrace) { 208 if (unlikely(ptrace) && current->ptrace) {
208 child->ptrace = current->ptrace; 209 child->ptrace = current->ptrace;
209 __ptrace_link(child, current->parent); 210 __ptrace_link(child, current->parent, current->ptracer_cred);
210 211
211 if (child->ptrace & PT_SEIZED) 212 if (child->ptrace & PT_SEIZED)
212 task_set_jobctl_pending(child, JOBCTL_TRAP_STOP); 213 task_set_jobctl_pending(child, JOBCTL_TRAP_STOP);
@@ -215,6 +216,8 @@ static inline void ptrace_init_task(struct task_struct *child, bool ptrace)
215 216
216 set_tsk_thread_flag(child, TIF_SIGPENDING); 217 set_tsk_thread_flag(child, TIF_SIGPENDING);
217 } 218 }
219 else
220 child->ptracer_cred = NULL;
218} 221}
219 222
220/** 223/**
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h
index 9c6f768b7d32..dda22f45fc1b 100644
--- a/include/linux/quotaops.h
+++ b/include/linux/quotaops.h
@@ -44,6 +44,7 @@ void inode_sub_rsv_space(struct inode *inode, qsize_t number);
44void inode_reclaim_rsv_space(struct inode *inode, qsize_t number); 44void inode_reclaim_rsv_space(struct inode *inode, qsize_t number);
45 45
46int dquot_initialize(struct inode *inode); 46int dquot_initialize(struct inode *inode);
47bool dquot_initialize_needed(struct inode *inode);
47void dquot_drop(struct inode *inode); 48void dquot_drop(struct inode *inode);
48struct dquot *dqget(struct super_block *sb, struct kqid qid); 49struct dquot *dqget(struct super_block *sb, struct kqid qid);
49static inline struct dquot *dqgrab(struct dquot *dquot) 50static inline struct dquot *dqgrab(struct dquot *dquot)
@@ -207,6 +208,11 @@ static inline int dquot_initialize(struct inode *inode)
207 return 0; 208 return 0;
208} 209}
209 210
211static inline bool dquot_initialize_needed(struct inode *inode)
212{
213 return false;
214}
215
210static inline void dquot_drop(struct inode *inode) 216static inline void dquot_drop(struct inode *inode)
211{ 217{
212} 218}
diff --git a/include/linux/serdev.h b/include/linux/serdev.h
index cda76c6506ca..e69402d4a8ae 100644
--- a/include/linux/serdev.h
+++ b/include/linux/serdev.h
@@ -195,6 +195,7 @@ int serdev_device_open(struct serdev_device *);
195void serdev_device_close(struct serdev_device *); 195void serdev_device_close(struct serdev_device *);
196unsigned int serdev_device_set_baudrate(struct serdev_device *, unsigned int); 196unsigned int serdev_device_set_baudrate(struct serdev_device *, unsigned int);
197void serdev_device_set_flow_control(struct serdev_device *, bool); 197void serdev_device_set_flow_control(struct serdev_device *, bool);
198int serdev_device_write_buf(struct serdev_device *, const unsigned char *, size_t);
198void serdev_device_wait_until_sent(struct serdev_device *, long); 199void serdev_device_wait_until_sent(struct serdev_device *, long);
199int serdev_device_get_tiocm(struct serdev_device *); 200int serdev_device_get_tiocm(struct serdev_device *);
200int serdev_device_set_tiocm(struct serdev_device *, int, int); 201int serdev_device_set_tiocm(struct serdev_device *, int, int);
@@ -236,6 +237,12 @@ static inline unsigned int serdev_device_set_baudrate(struct serdev_device *sdev
236 return 0; 237 return 0;
237} 238}
238static inline void serdev_device_set_flow_control(struct serdev_device *sdev, bool enable) {} 239static inline void serdev_device_set_flow_control(struct serdev_device *sdev, bool enable) {}
240static inline int serdev_device_write_buf(struct serdev_device *serdev,
241 const unsigned char *buf,
242 size_t count)
243{
244 return -ENODEV;
245}
239static inline void serdev_device_wait_until_sent(struct serdev_device *sdev, long timeout) {} 246static inline void serdev_device_wait_until_sent(struct serdev_device *sdev, long timeout) {}
240static inline int serdev_device_get_tiocm(struct serdev_device *serdev) 247static inline int serdev_device_get_tiocm(struct serdev_device *serdev)
241{ 248{
@@ -301,7 +308,7 @@ struct tty_driver;
301struct device *serdev_tty_port_register(struct tty_port *port, 308struct device *serdev_tty_port_register(struct tty_port *port,
302 struct device *parent, 309 struct device *parent,
303 struct tty_driver *drv, int idx); 310 struct tty_driver *drv, int idx);
304void serdev_tty_port_unregister(struct tty_port *port); 311int serdev_tty_port_unregister(struct tty_port *port);
305#else 312#else
306static inline struct device *serdev_tty_port_register(struct tty_port *port, 313static inline struct device *serdev_tty_port_register(struct tty_port *port,
307 struct device *parent, 314 struct device *parent,
@@ -309,14 +316,10 @@ static inline struct device *serdev_tty_port_register(struct tty_port *port,
309{ 316{
310 return ERR_PTR(-ENODEV); 317 return ERR_PTR(-ENODEV);
311} 318}
312static inline void serdev_tty_port_unregister(struct tty_port *port) {} 319static inline int serdev_tty_port_unregister(struct tty_port *port)
313#endif /* CONFIG_SERIAL_DEV_CTRL_TTYPORT */
314
315static inline int serdev_device_write_buf(struct serdev_device *serdev,
316 const unsigned char *data,
317 size_t count)
318{ 320{
319 return serdev_device_write(serdev, data, count, 0); 321 return -ENODEV;
320} 322}
323#endif /* CONFIG_SERIAL_DEV_CTRL_TTYPORT */
321 324
322#endif /*_LINUX_SERDEV_H */ 325#endif /*_LINUX_SERDEV_H */
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
index 07ef550c6627..93315d6b21a8 100644
--- a/include/linux/slub_def.h
+++ b/include/linux/slub_def.h
@@ -84,6 +84,7 @@ struct kmem_cache {
84 int red_left_pad; /* Left redzone padding size */ 84 int red_left_pad; /* Left redzone padding size */
85#ifdef CONFIG_SYSFS 85#ifdef CONFIG_SYSFS
86 struct kobject kobj; /* For sysfs */ 86 struct kobject kobj; /* For sysfs */
87 struct work_struct kobj_remove_work;
87#endif 88#endif
88#ifdef CONFIG_MEMCG 89#ifdef CONFIG_MEMCG
89 struct memcg_cache_params memcg_params; 90 struct memcg_cache_params memcg_params;
diff --git a/include/linux/srcu.h b/include/linux/srcu.h
index 167ad8831aaf..4c1d5f7e62c4 100644
--- a/include/linux/srcu.h
+++ b/include/linux/srcu.h
@@ -172,9 +172,7 @@ static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp)
172{ 172{
173 int retval; 173 int retval;
174 174
175 preempt_disable();
176 retval = __srcu_read_lock(sp); 175 retval = __srcu_read_lock(sp);
177 preempt_enable();
178 rcu_lock_acquire(&(sp)->dep_map); 176 rcu_lock_acquire(&(sp)->dep_map);
179 return retval; 177 return retval;
180} 178}
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
index 94631026f79c..11cef5a7bc87 100644
--- a/include/linux/sunrpc/svc.h
+++ b/include/linux/sunrpc/svc.h
@@ -336,7 +336,8 @@ xdr_argsize_check(struct svc_rqst *rqstp, __be32 *p)
336{ 336{
337 char *cp = (char *)p; 337 char *cp = (char *)p;
338 struct kvec *vec = &rqstp->rq_arg.head[0]; 338 struct kvec *vec = &rqstp->rq_arg.head[0];
339 return cp == (char *)vec->iov_base + vec->iov_len; 339 return cp >= (char*)vec->iov_base
340 && cp <= (char*)vec->iov_base + vec->iov_len;
340} 341}
341 342
342static inline int 343static inline int
diff --git a/include/linux/suspend.h b/include/linux/suspend.h
index 0b1cf32edfd7..d9718378a8be 100644
--- a/include/linux/suspend.h
+++ b/include/linux/suspend.h
@@ -189,8 +189,6 @@ struct platform_suspend_ops {
189struct platform_freeze_ops { 189struct platform_freeze_ops {
190 int (*begin)(void); 190 int (*begin)(void);
191 int (*prepare)(void); 191 int (*prepare)(void);
192 void (*wake)(void);
193 void (*sync)(void);
194 void (*restore)(void); 192 void (*restore)(void);
195 void (*end)(void); 193 void (*end)(void);
196}; 194};
@@ -430,8 +428,7 @@ extern unsigned int pm_wakeup_irq;
430 428
431extern bool pm_wakeup_pending(void); 429extern bool pm_wakeup_pending(void);
432extern void pm_system_wakeup(void); 430extern void pm_system_wakeup(void);
433extern void pm_system_cancel_wakeup(void); 431extern void pm_wakeup_clear(void);
434extern void pm_wakeup_clear(bool reset);
435extern void pm_system_irq_wakeup(unsigned int irq_number); 432extern void pm_system_irq_wakeup(unsigned int irq_number);
436extern bool pm_get_wakeup_count(unsigned int *count, bool block); 433extern bool pm_get_wakeup_count(unsigned int *count, bool block);
437extern bool pm_save_wakeup_count(unsigned int count); 434extern bool pm_save_wakeup_count(unsigned int count);
@@ -481,7 +478,7 @@ static inline int unregister_pm_notifier(struct notifier_block *nb)
481 478
482static inline bool pm_wakeup_pending(void) { return false; } 479static inline bool pm_wakeup_pending(void) { return false; }
483static inline void pm_system_wakeup(void) {} 480static inline void pm_system_wakeup(void) {}
484static inline void pm_wakeup_clear(bool reset) {} 481static inline void pm_wakeup_clear(void) {}
485static inline void pm_system_irq_wakeup(unsigned int irq_number) {} 482static inline void pm_system_irq_wakeup(unsigned int irq_number) {}
486 483
487static inline void lock_system_sleep(void) {} 484static inline void lock_system_sleep(void) {}
diff --git a/include/linux/timekeeper_internal.h b/include/linux/timekeeper_internal.h
index 110f4532188c..f7043ccca81c 100644
--- a/include/linux/timekeeper_internal.h
+++ b/include/linux/timekeeper_internal.h
@@ -29,7 +29,6 @@
29 */ 29 */
30struct tk_read_base { 30struct tk_read_base {
31 struct clocksource *clock; 31 struct clocksource *clock;
32 u64 (*read)(struct clocksource *cs);
33 u64 mask; 32 u64 mask;
34 u64 cycle_last; 33 u64 cycle_last;
35 u32 mult; 34 u32 mult;
@@ -58,7 +57,7 @@ struct tk_read_base {
58 * interval. 57 * interval.
59 * @xtime_remainder: Shifted nano seconds left over when rounding 58 * @xtime_remainder: Shifted nano seconds left over when rounding
60 * @cycle_interval 59 * @cycle_interval
61 * @raw_interval: Raw nano seconds accumulated per NTP interval. 60 * @raw_interval: Shifted raw nano seconds accumulated per NTP interval.
62 * @ntp_error: Difference between accumulated time and NTP time in ntp 61 * @ntp_error: Difference between accumulated time and NTP time in ntp
63 * shifted nano seconds. 62 * shifted nano seconds.
64 * @ntp_error_shift: Shift conversion between clock shifted nano seconds and 63 * @ntp_error_shift: Shift conversion between clock shifted nano seconds and
@@ -100,7 +99,7 @@ struct timekeeper {
100 u64 cycle_interval; 99 u64 cycle_interval;
101 u64 xtime_interval; 100 u64 xtime_interval;
102 s64 xtime_remainder; 101 s64 xtime_remainder;
103 u32 raw_interval; 102 u64 raw_interval;
104 /* The ntp_tick_length() value currently being used. 103 /* The ntp_tick_length() value currently being used.
105 * This cached copy ensures we consistently apply the tick 104 * This cached copy ensures we consistently apply the tick
106 * length for an entire tick, as ntp_tick_length may change 105 * length for an entire tick, as ntp_tick_length may change
diff --git a/include/linux/tty.h b/include/linux/tty.h
index d07cd2105a6c..eccb4ec30a8a 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -558,6 +558,15 @@ extern struct device *tty_port_register_device_attr(struct tty_port *port,
558 struct tty_driver *driver, unsigned index, 558 struct tty_driver *driver, unsigned index,
559 struct device *device, void *drvdata, 559 struct device *device, void *drvdata,
560 const struct attribute_group **attr_grp); 560 const struct attribute_group **attr_grp);
561extern struct device *tty_port_register_device_serdev(struct tty_port *port,
562 struct tty_driver *driver, unsigned index,
563 struct device *device);
564extern struct device *tty_port_register_device_attr_serdev(struct tty_port *port,
565 struct tty_driver *driver, unsigned index,
566 struct device *device, void *drvdata,
567 const struct attribute_group **attr_grp);
568extern void tty_port_unregister_device(struct tty_port *port,
569 struct tty_driver *driver, unsigned index);
561extern int tty_port_alloc_xmit_buf(struct tty_port *port); 570extern int tty_port_alloc_xmit_buf(struct tty_port *port);
562extern void tty_port_free_xmit_buf(struct tty_port *port); 571extern void tty_port_free_xmit_buf(struct tty_port *port);
563extern void tty_port_destroy(struct tty_port *port); 572extern void tty_port_destroy(struct tty_port *port);
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index 7dffa5624ea6..97116379db5f 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -206,6 +206,7 @@ struct cdc_state {
206}; 206};
207 207
208extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *); 208extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *);
209extern int usbnet_ether_cdc_bind(struct usbnet *dev, struct usb_interface *intf);
209extern int usbnet_cdc_bind(struct usbnet *, struct usb_interface *); 210extern int usbnet_cdc_bind(struct usbnet *, struct usb_interface *);
210extern void usbnet_cdc_unbind(struct usbnet *, struct usb_interface *); 211extern void usbnet_cdc_unbind(struct usbnet *, struct usb_interface *);
211extern void usbnet_cdc_status(struct usbnet *, struct urb *); 212extern void usbnet_cdc_status(struct usbnet *, struct urb *);
diff --git a/include/media/cec-notifier.h b/include/media/cec-notifier.h
index eb50ce54b759..298f996969df 100644
--- a/include/media/cec-notifier.h
+++ b/include/media/cec-notifier.h
@@ -29,7 +29,7 @@ struct edid;
29struct cec_adapter; 29struct cec_adapter;
30struct cec_notifier; 30struct cec_notifier;
31 31
32#ifdef CONFIG_MEDIA_CEC_NOTIFIER 32#if IS_REACHABLE(CONFIG_CEC_CORE) && IS_ENABLED(CONFIG_CEC_NOTIFIER)
33 33
34/** 34/**
35 * cec_notifier_get - find or create a new cec_notifier for the given device. 35 * cec_notifier_get - find or create a new cec_notifier for the given device.
@@ -106,6 +106,16 @@ static inline void cec_notifier_set_phys_addr_from_edid(struct cec_notifier *n,
106{ 106{
107} 107}
108 108
109static inline void cec_notifier_register(struct cec_notifier *n,
110 struct cec_adapter *adap,
111 void (*callback)(struct cec_adapter *adap, u16 pa))
112{
113}
114
115static inline void cec_notifier_unregister(struct cec_notifier *n)
116{
117}
118
109#endif 119#endif
110 120
111#endif 121#endif
diff --git a/include/media/cec.h b/include/media/cec.h
index b8eb895731d5..201f060978da 100644
--- a/include/media/cec.h
+++ b/include/media/cec.h
@@ -173,7 +173,7 @@ struct cec_adapter {
173 bool passthrough; 173 bool passthrough;
174 struct cec_log_addrs log_addrs; 174 struct cec_log_addrs log_addrs;
175 175
176#ifdef CONFIG_MEDIA_CEC_NOTIFIER 176#ifdef CONFIG_CEC_NOTIFIER
177 struct cec_notifier *notifier; 177 struct cec_notifier *notifier;
178#endif 178#endif
179 179
@@ -206,7 +206,7 @@ static inline bool cec_is_sink(const struct cec_adapter *adap)
206#define cec_phys_addr_exp(pa) \ 206#define cec_phys_addr_exp(pa) \
207 ((pa) >> 12), ((pa) >> 8) & 0xf, ((pa) >> 4) & 0xf, (pa) & 0xf 207 ((pa) >> 12), ((pa) >> 8) & 0xf, ((pa) >> 4) & 0xf, (pa) & 0xf
208 208
209#if IS_ENABLED(CONFIG_CEC_CORE) 209#if IS_REACHABLE(CONFIG_CEC_CORE)
210struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops, 210struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
211 void *priv, const char *name, u32 caps, u8 available_las); 211 void *priv, const char *name, u32 caps, u8 available_las);
212int cec_register_adapter(struct cec_adapter *adap, struct device *parent); 212int cec_register_adapter(struct cec_adapter *adap, struct device *parent);
@@ -300,7 +300,7 @@ u16 cec_phys_addr_for_input(u16 phys_addr, u8 input);
300 */ 300 */
301int cec_phys_addr_validate(u16 phys_addr, u16 *parent, u16 *port); 301int cec_phys_addr_validate(u16 phys_addr, u16 *parent, u16 *port);
302 302
303#ifdef CONFIG_MEDIA_CEC_NOTIFIER 303#ifdef CONFIG_CEC_NOTIFIER
304void cec_register_cec_notifier(struct cec_adapter *adap, 304void cec_register_cec_notifier(struct cec_adapter *adap,
305 struct cec_notifier *notifier); 305 struct cec_notifier *notifier);
306#endif 306#endif
diff --git a/include/net/dst.h b/include/net/dst.h
index 049af33da3b6..cfc043784166 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -107,10 +107,16 @@ struct dst_entry {
107 }; 107 };
108}; 108};
109 109
110struct dst_metrics {
111 u32 metrics[RTAX_MAX];
112 atomic_t refcnt;
113};
114extern const struct dst_metrics dst_default_metrics;
115
110u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old); 116u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old);
111extern const u32 dst_default_metrics[];
112 117
113#define DST_METRICS_READ_ONLY 0x1UL 118#define DST_METRICS_READ_ONLY 0x1UL
119#define DST_METRICS_REFCOUNTED 0x2UL
114#define DST_METRICS_FLAGS 0x3UL 120#define DST_METRICS_FLAGS 0x3UL
115#define __DST_METRICS_PTR(Y) \ 121#define __DST_METRICS_PTR(Y) \
116 ((u32 *)((Y) & ~DST_METRICS_FLAGS)) 122 ((u32 *)((Y) & ~DST_METRICS_FLAGS))
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
index 6692c5758b33..f7f6aa789c61 100644
--- a/include/net/ip_fib.h
+++ b/include/net/ip_fib.h
@@ -114,11 +114,11 @@ struct fib_info {
114 __be32 fib_prefsrc; 114 __be32 fib_prefsrc;
115 u32 fib_tb_id; 115 u32 fib_tb_id;
116 u32 fib_priority; 116 u32 fib_priority;
117 u32 *fib_metrics; 117 struct dst_metrics *fib_metrics;
118#define fib_mtu fib_metrics[RTAX_MTU-1] 118#define fib_mtu fib_metrics->metrics[RTAX_MTU-1]
119#define fib_window fib_metrics[RTAX_WINDOW-1] 119#define fib_window fib_metrics->metrics[RTAX_WINDOW-1]
120#define fib_rtt fib_metrics[RTAX_RTT-1] 120#define fib_rtt fib_metrics->metrics[RTAX_RTT-1]
121#define fib_advmss fib_metrics[RTAX_ADVMSS-1] 121#define fib_advmss fib_metrics->metrics[RTAX_ADVMSS-1]
122 int fib_nhs; 122 int fib_nhs;
123#ifdef CONFIG_IP_ROUTE_MULTIPATH 123#ifdef CONFIG_IP_ROUTE_MULTIPATH
124 int fib_weight; 124 int fib_weight;
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index dbf0abba33b8..3e505bbff8ca 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -1007,6 +1007,7 @@ int inet6_hash_connect(struct inet_timewait_death_row *death_row,
1007 */ 1007 */
1008extern const struct proto_ops inet6_stream_ops; 1008extern const struct proto_ops inet6_stream_ops;
1009extern const struct proto_ops inet6_dgram_ops; 1009extern const struct proto_ops inet6_dgram_ops;
1010extern const struct proto_ops inet6_sockraw_ops;
1010 1011
1011struct group_source_req; 1012struct group_source_req;
1012struct group_filter; 1013struct group_filter;
diff --git a/include/net/netfilter/nf_conntrack_helper.h b/include/net/netfilter/nf_conntrack_helper.h
index e04fa7691e5d..c519bb5b5bb8 100644
--- a/include/net/netfilter/nf_conntrack_helper.h
+++ b/include/net/netfilter/nf_conntrack_helper.h
@@ -9,6 +9,7 @@
9 9
10#ifndef _NF_CONNTRACK_HELPER_H 10#ifndef _NF_CONNTRACK_HELPER_H
11#define _NF_CONNTRACK_HELPER_H 11#define _NF_CONNTRACK_HELPER_H
12#include <linux/refcount.h>
12#include <net/netfilter/nf_conntrack.h> 13#include <net/netfilter/nf_conntrack.h>
13#include <net/netfilter/nf_conntrack_extend.h> 14#include <net/netfilter/nf_conntrack_extend.h>
14#include <net/netfilter/nf_conntrack_expect.h> 15#include <net/netfilter/nf_conntrack_expect.h>
@@ -26,6 +27,7 @@ struct nf_conntrack_helper {
26 struct hlist_node hnode; /* Internal use. */ 27 struct hlist_node hnode; /* Internal use. */
27 28
28 char name[NF_CT_HELPER_NAME_LEN]; /* name of the module */ 29 char name[NF_CT_HELPER_NAME_LEN]; /* name of the module */
30 refcount_t refcnt;
29 struct module *me; /* pointer to self */ 31 struct module *me; /* pointer to self */
30 const struct nf_conntrack_expect_policy *expect_policy; 32 const struct nf_conntrack_expect_policy *expect_policy;
31 33
@@ -79,6 +81,8 @@ struct nf_conntrack_helper *__nf_conntrack_helper_find(const char *name,
79struct nf_conntrack_helper *nf_conntrack_helper_try_module_get(const char *name, 81struct nf_conntrack_helper *nf_conntrack_helper_try_module_get(const char *name,
80 u16 l3num, 82 u16 l3num,
81 u8 protonum); 83 u8 protonum);
84void nf_conntrack_helper_put(struct nf_conntrack_helper *helper);
85
82void nf_ct_helper_init(struct nf_conntrack_helper *helper, 86void nf_ct_helper_init(struct nf_conntrack_helper *helper,
83 u16 l3num, u16 protonum, const char *name, 87 u16 l3num, u16 protonum, const char *name,
84 u16 default_port, u16 spec_port, u32 id, 88 u16 default_port, u16 spec_port, u32 id,
diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h
index 028faec8fc27..8a8bab8d7b15 100644
--- a/include/net/netfilter/nf_tables.h
+++ b/include/net/netfilter/nf_tables.h
@@ -176,7 +176,7 @@ struct nft_data_desc {
176int nft_data_init(const struct nft_ctx *ctx, 176int nft_data_init(const struct nft_ctx *ctx,
177 struct nft_data *data, unsigned int size, 177 struct nft_data *data, unsigned int size,
178 struct nft_data_desc *desc, const struct nlattr *nla); 178 struct nft_data_desc *desc, const struct nlattr *nla);
179void nft_data_uninit(const struct nft_data *data, enum nft_data_types type); 179void nft_data_release(const struct nft_data *data, enum nft_data_types type);
180int nft_data_dump(struct sk_buff *skb, int attr, const struct nft_data *data, 180int nft_data_dump(struct sk_buff *skb, int attr, const struct nft_data *data,
181 enum nft_data_types type, unsigned int len); 181 enum nft_data_types type, unsigned int len);
182 182
diff --git a/include/net/tc_act/tc_csum.h b/include/net/tc_act/tc_csum.h
index f31fb6331a53..3248beaf16b0 100644
--- a/include/net/tc_act/tc_csum.h
+++ b/include/net/tc_act/tc_csum.h
@@ -3,6 +3,7 @@
3 3
4#include <linux/types.h> 4#include <linux/types.h>
5#include <net/act_api.h> 5#include <net/act_api.h>
6#include <linux/tc_act/tc_csum.h>
6 7
7struct tcf_csum { 8struct tcf_csum {
8 struct tc_action common; 9 struct tc_action common;
@@ -11,4 +12,18 @@ struct tcf_csum {
11}; 12};
12#define to_tcf_csum(a) ((struct tcf_csum *)a) 13#define to_tcf_csum(a) ((struct tcf_csum *)a)
13 14
15static inline bool is_tcf_csum(const struct tc_action *a)
16{
17#ifdef CONFIG_NET_CLS_ACT
18 if (a->ops && a->ops->type == TCA_ACT_CSUM)
19 return true;
20#endif
21 return false;
22}
23
24static inline u32 tcf_csum_update_flags(const struct tc_action *a)
25{
26 return to_tcf_csum(a)->update_flags;
27}
28
14#endif /* __NET_TC_CSUM_H */ 29#endif /* __NET_TC_CSUM_H */
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 38a7427ae902..be6223c586fa 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -924,7 +924,7 @@ struct tcp_congestion_ops {
924 void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev); 924 void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
925 /* call when ack arrives (optional) */ 925 /* call when ack arrives (optional) */
926 void (*in_ack_event)(struct sock *sk, u32 flags); 926 void (*in_ack_event)(struct sock *sk, u32 flags);
927 /* new value of cwnd after loss (optional) */ 927 /* new value of cwnd after loss (required) */
928 u32 (*undo_cwnd)(struct sock *sk); 928 u32 (*undo_cwnd)(struct sock *sk);
929 /* hook for packet ack accounting (optional) */ 929 /* hook for packet ack accounting (optional) */
930 void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample); 930 void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
diff --git a/include/net/wext.h b/include/net/wext.h
index 345911965dbb..454ff763eeba 100644
--- a/include/net/wext.h
+++ b/include/net/wext.h
@@ -6,7 +6,7 @@
6struct net; 6struct net;
7 7
8#ifdef CONFIG_WEXT_CORE 8#ifdef CONFIG_WEXT_CORE
9int wext_handle_ioctl(struct net *net, struct ifreq *ifr, unsigned int cmd, 9int wext_handle_ioctl(struct net *net, struct iwreq *iwr, unsigned int cmd,
10 void __user *arg); 10 void __user *arg);
11int compat_wext_handle_ioctl(struct net *net, unsigned int cmd, 11int compat_wext_handle_ioctl(struct net *net, unsigned int cmd,
12 unsigned long arg); 12 unsigned long arg);
@@ -14,7 +14,7 @@ int compat_wext_handle_ioctl(struct net *net, unsigned int cmd,
14struct iw_statistics *get_wireless_stats(struct net_device *dev); 14struct iw_statistics *get_wireless_stats(struct net_device *dev);
15int call_commit_handler(struct net_device *dev); 15int call_commit_handler(struct net_device *dev);
16#else 16#else
17static inline int wext_handle_ioctl(struct net *net, struct ifreq *ifr, unsigned int cmd, 17static inline int wext_handle_ioctl(struct net *net, struct iwreq *iwr, unsigned int cmd,
18 void __user *arg) 18 void __user *arg)
19{ 19{
20 return -EINVAL; 20 return -EINVAL;
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 6793a30c66b1..62f5a259e597 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -979,10 +979,6 @@ struct xfrm_dst {
979 struct flow_cache_object flo; 979 struct flow_cache_object flo;
980 struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX]; 980 struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX];
981 int num_pols, num_xfrms; 981 int num_pols, num_xfrms;
982#ifdef CONFIG_XFRM_SUB_POLICY
983 struct flowi *origin;
984 struct xfrm_selector *partner;
985#endif
986 u32 xfrm_genid; 982 u32 xfrm_genid;
987 u32 policy_genid; 983 u32 policy_genid;
988 u32 route_mtu_cached; 984 u32 route_mtu_cached;
@@ -998,12 +994,6 @@ static inline void xfrm_dst_destroy(struct xfrm_dst *xdst)
998 dst_release(xdst->route); 994 dst_release(xdst->route);
999 if (likely(xdst->u.dst.xfrm)) 995 if (likely(xdst->u.dst.xfrm))
1000 xfrm_state_put(xdst->u.dst.xfrm); 996 xfrm_state_put(xdst->u.dst.xfrm);
1001#ifdef CONFIG_XFRM_SUB_POLICY
1002 kfree(xdst->origin);
1003 xdst->origin = NULL;
1004 kfree(xdst->partner);
1005 xdst->partner = NULL;
1006#endif
1007} 997}
1008#endif 998#endif
1009 999
@@ -1860,8 +1850,9 @@ static inline struct xfrm_offload *xfrm_offload(struct sk_buff *skb)
1860} 1850}
1861#endif 1851#endif
1862 1852
1863#ifdef CONFIG_XFRM_OFFLOAD
1864void __net_init xfrm_dev_init(void); 1853void __net_init xfrm_dev_init(void);
1854
1855#ifdef CONFIG_XFRM_OFFLOAD
1865int validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features); 1856int validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features);
1866int xfrm_dev_state_add(struct net *net, struct xfrm_state *x, 1857int xfrm_dev_state_add(struct net *net, struct xfrm_state *x,
1867 struct xfrm_user_offload *xuo); 1858 struct xfrm_user_offload *xuo);
@@ -1887,10 +1878,6 @@ static inline void xfrm_dev_state_free(struct xfrm_state *x)
1887 } 1878 }
1888} 1879}
1889#else 1880#else
1890static inline void __net_init xfrm_dev_init(void)
1891{
1892}
1893
1894static inline int validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features) 1881static inline int validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features)
1895{ 1882{
1896 return 0; 1883 return 0;
diff --git a/include/rdma/ib_sa.h b/include/rdma/ib_sa.h
index f5f70e345318..355b81f4242d 100644
--- a/include/rdma/ib_sa.h
+++ b/include/rdma/ib_sa.h
@@ -158,7 +158,6 @@ enum sa_path_rec_type {
158}; 158};
159 159
160struct sa_path_rec_ib { 160struct sa_path_rec_ib {
161 __be64 service_id;
162 __be16 dlid; 161 __be16 dlid;
163 __be16 slid; 162 __be16 slid;
164 u8 raw_traffic; 163 u8 raw_traffic;
@@ -174,7 +173,6 @@ struct sa_path_rec_roce {
174}; 173};
175 174
176struct sa_path_rec_opa { 175struct sa_path_rec_opa {
177 __be64 service_id;
178 __be32 dlid; 176 __be32 dlid;
179 __be32 slid; 177 __be32 slid;
180 u8 raw_traffic; 178 u8 raw_traffic;
@@ -189,6 +187,7 @@ struct sa_path_rec_opa {
189struct sa_path_rec { 187struct sa_path_rec {
190 union ib_gid dgid; 188 union ib_gid dgid;
191 union ib_gid sgid; 189 union ib_gid sgid;
190 __be64 service_id;
192 /* reserved */ 191 /* reserved */
193 __be32 flow_label; 192 __be32 flow_label;
194 u8 hop_limit; 193 u8 hop_limit;
@@ -262,7 +261,7 @@ static inline void path_conv_opa_to_ib(struct sa_path_rec *ib,
262 ib->ib.dlid = htons(ntohl(opa->opa.dlid)); 261 ib->ib.dlid = htons(ntohl(opa->opa.dlid));
263 ib->ib.slid = htons(ntohl(opa->opa.slid)); 262 ib->ib.slid = htons(ntohl(opa->opa.slid));
264 } 263 }
265 ib->ib.service_id = opa->opa.service_id; 264 ib->service_id = opa->service_id;
266 ib->ib.raw_traffic = opa->opa.raw_traffic; 265 ib->ib.raw_traffic = opa->opa.raw_traffic;
267} 266}
268 267
@@ -281,7 +280,7 @@ static inline void path_conv_ib_to_opa(struct sa_path_rec *opa,
281 } 280 }
282 opa->opa.slid = slid; 281 opa->opa.slid = slid;
283 opa->opa.dlid = dlid; 282 opa->opa.dlid = dlid;
284 opa->opa.service_id = ib->ib.service_id; 283 opa->service_id = ib->service_id;
285 opa->opa.raw_traffic = ib->ib.raw_traffic; 284 opa->opa.raw_traffic = ib->ib.raw_traffic;
286} 285}
287 286
@@ -591,15 +590,6 @@ static inline bool sa_path_is_roce(struct sa_path_rec *rec)
591 (rec->rec_type == SA_PATH_REC_TYPE_ROCE_V2)); 590 (rec->rec_type == SA_PATH_REC_TYPE_ROCE_V2));
592} 591}
593 592
594static inline void sa_path_set_service_id(struct sa_path_rec *rec,
595 __be64 service_id)
596{
597 if (rec->rec_type == SA_PATH_REC_TYPE_IB)
598 rec->ib.service_id = service_id;
599 else if (rec->rec_type == SA_PATH_REC_TYPE_OPA)
600 rec->opa.service_id = service_id;
601}
602
603static inline void sa_path_set_slid(struct sa_path_rec *rec, __be32 slid) 593static inline void sa_path_set_slid(struct sa_path_rec *rec, __be32 slid)
604{ 594{
605 if (rec->rec_type == SA_PATH_REC_TYPE_IB) 595 if (rec->rec_type == SA_PATH_REC_TYPE_IB)
@@ -625,15 +615,6 @@ static inline void sa_path_set_raw_traffic(struct sa_path_rec *rec,
625 rec->opa.raw_traffic = raw_traffic; 615 rec->opa.raw_traffic = raw_traffic;
626} 616}
627 617
628static inline __be64 sa_path_get_service_id(struct sa_path_rec *rec)
629{
630 if (rec->rec_type == SA_PATH_REC_TYPE_IB)
631 return rec->ib.service_id;
632 else if (rec->rec_type == SA_PATH_REC_TYPE_OPA)
633 return rec->opa.service_id;
634 return 0;
635}
636
637static inline __be32 sa_path_get_slid(struct sa_path_rec *rec) 618static inline __be32 sa_path_get_slid(struct sa_path_rec *rec)
638{ 619{
639 if (rec->rec_type == SA_PATH_REC_TYPE_IB) 620 if (rec->rec_type == SA_PATH_REC_TYPE_IB)
diff --git a/include/rdma/rdma_netlink.h b/include/rdma/rdma_netlink.h
index 585266144329..348c102cb5f6 100644
--- a/include/rdma/rdma_netlink.h
+++ b/include/rdma/rdma_netlink.h
@@ -10,9 +10,6 @@ struct ibnl_client_cbs {
10 struct module *module; 10 struct module *module;
11}; 11};
12 12
13int ibnl_init(void);
14void ibnl_cleanup(void);
15
16/** 13/**
17 * Add a a client to the list of IB netlink exporters. 14 * Add a a client to the list of IB netlink exporters.
18 * @index: Index of the added client 15 * @index: Index of the added client
@@ -77,11 +74,4 @@ int ibnl_unicast(struct sk_buff *skb, struct nlmsghdr *nlh,
77int ibnl_multicast(struct sk_buff *skb, struct nlmsghdr *nlh, 74int ibnl_multicast(struct sk_buff *skb, struct nlmsghdr *nlh,
78 unsigned int group, gfp_t flags); 75 unsigned int group, gfp_t flags);
79 76
80/**
81 * Check if there are any listeners to the netlink group
82 * @group: the netlink group ID
83 * Returns 0 on success or a negative for no listeners.
84 */
85int ibnl_chk_listeners(unsigned int group);
86
87#endif /* _RDMA_NETLINK_H */ 77#endif /* _RDMA_NETLINK_H */
diff --git a/include/sound/cs35l35.h b/include/sound/cs35l35.h
index 29da899e17e4..d69cd7847afd 100644
--- a/include/sound/cs35l35.h
+++ b/include/sound/cs35l35.h
@@ -99,6 +99,8 @@ struct cs35l35_platform_data {
99 bool shared_bst; 99 bool shared_bst;
100 /* Specifies this amp is using an external boost supply */ 100 /* Specifies this amp is using an external boost supply */
101 bool ext_bst; 101 bool ext_bst;
102 /* Inductor Value */
103 int boost_ind;
102 /* ClassH Algorithm */ 104 /* ClassH Algorithm */
103 struct classh_cfg classh_algo; 105 struct classh_cfg classh_algo;
104 /* Monitor Config */ 106 /* Monitor Config */
diff --git a/include/sound/designware_i2s.h b/include/sound/designware_i2s.h
index 5681855396c4..830f5caa915c 100644
--- a/include/sound/designware_i2s.h
+++ b/include/sound/designware_i2s.h
@@ -47,6 +47,7 @@ struct i2s_platform_data {
47 47
48 #define DW_I2S_QUIRK_COMP_REG_OFFSET (1 << 0) 48 #define DW_I2S_QUIRK_COMP_REG_OFFSET (1 << 0)
49 #define DW_I2S_QUIRK_COMP_PARAM1 (1 << 1) 49 #define DW_I2S_QUIRK_COMP_PARAM1 (1 << 1)
50 #define DW_I2S_QUIRK_16BIT_IDX_OVERRIDE (1 << 2)
50 unsigned int quirks; 51 unsigned int quirks;
51 unsigned int i2s_reg_comp1; 52 unsigned int i2s_reg_comp1;
52 unsigned int i2s_reg_comp2; 53 unsigned int i2s_reg_comp2;
diff --git a/include/sound/hdmi-codec.h b/include/sound/hdmi-codec.h
index 915c4357945c..9483c55f871b 100644
--- a/include/sound/hdmi-codec.h
+++ b/include/sound/hdmi-codec.h
@@ -18,9 +18,11 @@
18#ifndef __HDMI_CODEC_H__ 18#ifndef __HDMI_CODEC_H__
19#define __HDMI_CODEC_H__ 19#define __HDMI_CODEC_H__
20 20
21#include <linux/of_graph.h>
21#include <linux/hdmi.h> 22#include <linux/hdmi.h>
22#include <drm/drm_edid.h> 23#include <drm/drm_edid.h>
23#include <sound/asoundef.h> 24#include <sound/asoundef.h>
25#include <sound/soc.h>
24#include <uapi/sound/asound.h> 26#include <uapi/sound/asound.h>
25 27
26/* 28/*
@@ -87,6 +89,13 @@ struct hdmi_codec_ops {
87 */ 89 */
88 int (*get_eld)(struct device *dev, void *data, 90 int (*get_eld)(struct device *dev, void *data,
89 uint8_t *buf, size_t len); 91 uint8_t *buf, size_t len);
92
93 /*
94 * Getting DAI ID
95 * Optional
96 */
97 int (*get_dai_id)(struct snd_soc_component *comment,
98 struct device_node *endpoint);
90}; 99};
91 100
92/* HDMI codec initalization data */ 101/* HDMI codec initalization data */
diff --git a/include/sound/rt5645.h b/include/sound/rt5645.h
index a5cf6152e778..d0c33a9972b9 100644
--- a/include/sound/rt5645.h
+++ b/include/sound/rt5645.h
@@ -21,8 +21,10 @@ struct rt5645_platform_data {
21 /* 0 = IN2P; 1 = GPIO6; 2 = GPIO10; 3 = GPIO12 */ 21 /* 0 = IN2P; 1 = GPIO6; 2 = GPIO10; 3 = GPIO12 */
22 22
23 unsigned int jd_mode; 23 unsigned int jd_mode;
24 /* Invert JD when jack insert */ 24 /* Use level triggered irq */
25 bool jd_invert; 25 bool level_trigger_irq;
26 /* Invert JD1_1 status polarity */
27 bool inv_jd1_1;
26}; 28};
27 29
28#endif 30#endif
diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_utils.h
index af58d2362975..42c6a6ac3ce6 100644
--- a/include/sound/simple_card_utils.h
+++ b/include/sound/simple_card_utils.h
@@ -22,6 +22,11 @@ struct asoc_simple_dai {
22 struct clk *clk; 22 struct clk *clk;
23}; 23};
24 24
25struct asoc_simple_card_data {
26 u32 convert_rate;
27 u32 convert_channels;
28};
29
25int asoc_simple_card_parse_daifmt(struct device *dev, 30int asoc_simple_card_parse_daifmt(struct device *dev,
26 struct device_node *node, 31 struct device_node *node,
27 struct device_node *codec, 32 struct device_node *codec,
@@ -35,13 +40,18 @@ int asoc_simple_card_parse_card_name(struct snd_soc_card *card,
35 char *prefix); 40 char *prefix);
36 41
37#define asoc_simple_card_parse_clk_cpu(dev, node, dai_link, simple_dai) \ 42#define asoc_simple_card_parse_clk_cpu(dev, node, dai_link, simple_dai) \
38 asoc_simple_card_parse_clk(dev, node, dai_link->cpu_of_node, simple_dai) 43 asoc_simple_card_parse_clk(dev, node, dai_link->cpu_of_node, simple_dai, \
44 dai_link->cpu_dai_name)
39#define asoc_simple_card_parse_clk_codec(dev, node, dai_link, simple_dai) \ 45#define asoc_simple_card_parse_clk_codec(dev, node, dai_link, simple_dai) \
40 asoc_simple_card_parse_clk(dev, node, dai_link->codec_of_node, simple_dai) 46 asoc_simple_card_parse_clk(dev, node, dai_link->codec_of_node, simple_dai,\
47 dai_link->codec_dai_name)
41int asoc_simple_card_parse_clk(struct device *dev, 48int asoc_simple_card_parse_clk(struct device *dev,
42 struct device_node *node, 49 struct device_node *node,
43 struct device_node *dai_of_node, 50 struct device_node *dai_of_node,
44 struct asoc_simple_dai *simple_dai); 51 struct asoc_simple_dai *simple_dai,
52 const char *name);
53int asoc_simple_card_clk_enable(struct asoc_simple_dai *dai);
54void asoc_simple_card_clk_disable(struct asoc_simple_dai *dai);
45 55
46#define asoc_simple_card_parse_cpu(node, dai_link, \ 56#define asoc_simple_card_parse_cpu(node, dai_link, \
47 list_name, cells_name, is_single_link) \ 57 list_name, cells_name, is_single_link) \
@@ -60,6 +70,22 @@ int asoc_simple_card_parse_dai(struct device_node *node,
60 const char *cells_name, 70 const char *cells_name,
61 int *is_single_links); 71 int *is_single_links);
62 72
73#define asoc_simple_card_parse_graph_cpu(ep, dai_link) \
74 asoc_simple_card_parse_graph_dai(ep, &dai_link->cpu_of_node, \
75 &dai_link->cpu_dai_name)
76#define asoc_simple_card_parse_graph_codec(ep, dai_link) \
77 asoc_simple_card_parse_graph_dai(ep, &dai_link->codec_of_node, \
78 &dai_link->codec_dai_name)
79int asoc_simple_card_parse_graph_dai(struct device_node *ep,
80 struct device_node **endpoint_np,
81 const char **dai_name);
82
83#define asoc_simple_card_of_parse_tdm(np, dai) \
84 snd_soc_of_parse_tdm_slot(np, &(dai)->tx_slot_mask, \
85 &(dai)->rx_slot_mask, \
86 &(dai)->slots, \
87 &(dai)->slot_width);
88
63int asoc_simple_card_init_dai(struct snd_soc_dai *dai, 89int asoc_simple_card_init_dai(struct snd_soc_dai *dai,
64 struct asoc_simple_dai *simple_dai); 90 struct asoc_simple_dai *simple_dai);
65 91
@@ -69,4 +95,15 @@ void asoc_simple_card_canonicalize_cpu(struct snd_soc_dai_link *dai_link,
69 95
70int asoc_simple_card_clean_reference(struct snd_soc_card *card); 96int asoc_simple_card_clean_reference(struct snd_soc_card *card);
71 97
98void asoc_simple_card_convert_fixup(struct asoc_simple_card_data *data,
99 struct snd_pcm_hw_params *params);
100void asoc_simple_card_parse_convert(struct device *dev, char *prefix,
101 struct asoc_simple_card_data *data);
102
103int asoc_simple_card_of_parse_routing(struct snd_soc_card *card,
104 char *prefix,
105 int optional);
106int asoc_simple_card_of_parse_widgets(struct snd_soc_card *card,
107 char *prefix);
108
72#endif /* __SIMPLE_CARD_UTILS_H */ 109#endif /* __SIMPLE_CARD_UTILS_H */
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h
index a466f4bdc835..344b96c206a3 100644
--- a/include/sound/soc-dapm.h
+++ b/include/sound/soc-dapm.h
@@ -510,6 +510,13 @@ enum snd_soc_dapm_type {
510 snd_soc_dapm_dai_out, 510 snd_soc_dapm_dai_out,
511 snd_soc_dapm_dai_link, /* link between two DAI structures */ 511 snd_soc_dapm_dai_link, /* link between two DAI structures */
512 snd_soc_dapm_kcontrol, /* Auto-disabled kcontrol */ 512 snd_soc_dapm_kcontrol, /* Auto-disabled kcontrol */
513 snd_soc_dapm_buffer, /* DSP/CODEC internal buffer */
514 snd_soc_dapm_scheduler, /* DSP/CODEC internal scheduler */
515 snd_soc_dapm_effect, /* DSP/CODEC effect component */
516 snd_soc_dapm_src, /* DSP/CODEC SRC component */
517 snd_soc_dapm_asrc, /* DSP/CODEC ASRC component */
518 snd_soc_dapm_encoder, /* FW/SW audio encoder component */
519 snd_soc_dapm_decoder, /* FW/SW audio decoder component */
513}; 520};
514 521
515enum snd_soc_dapm_subclass { 522enum snd_soc_dapm_subclass {
diff --git a/include/sound/soc-topology.h b/include/sound/soc-topology.h
index f9cc7b9271ac..f552c3f56368 100644
--- a/include/sound/soc-topology.h
+++ b/include/sound/soc-topology.h
@@ -28,6 +28,8 @@ struct snd_soc_component;
28struct snd_soc_tplg_pcm_fe; 28struct snd_soc_tplg_pcm_fe;
29struct snd_soc_dapm_context; 29struct snd_soc_dapm_context;
30struct snd_soc_card; 30struct snd_soc_card;
31struct snd_kcontrol_new;
32struct snd_soc_dai_link;
31 33
32/* object scan be loaded and unloaded in groups with identfying indexes */ 34/* object scan be loaded and unloaded in groups with identfying indexes */
33#define SND_SOC_TPLG_INDEX_ALL 0 /* ID that matches all FW objects */ 35#define SND_SOC_TPLG_INDEX_ALL 0 /* ID that matches all FW objects */
@@ -116,6 +118,9 @@ struct snd_soc_tplg_ops {
116 int (*widget_load)(struct snd_soc_component *, 118 int (*widget_load)(struct snd_soc_component *,
117 struct snd_soc_dapm_widget *, 119 struct snd_soc_dapm_widget *,
118 struct snd_soc_tplg_dapm_widget *); 120 struct snd_soc_tplg_dapm_widget *);
121 int (*widget_ready)(struct snd_soc_component *,
122 struct snd_soc_dapm_widget *,
123 struct snd_soc_tplg_dapm_widget *);
119 int (*widget_unload)(struct snd_soc_component *, 124 int (*widget_unload)(struct snd_soc_component *,
120 struct snd_soc_dobj *); 125 struct snd_soc_dobj *);
121 126
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 5170fd81e1fd..9c94b97c17f8 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -803,6 +803,8 @@ struct snd_soc_component_driver {
803 int (*of_xlate_dai_name)(struct snd_soc_component *component, 803 int (*of_xlate_dai_name)(struct snd_soc_component *component,
804 struct of_phandle_args *args, 804 struct of_phandle_args *args,
805 const char **dai_name); 805 const char **dai_name);
806 int (*of_xlate_dai_id)(struct snd_soc_component *comment,
807 struct device_node *endpoint);
806 void (*seq_notifier)(struct snd_soc_component *, enum snd_soc_dapm_type, 808 void (*seq_notifier)(struct snd_soc_component *, enum snd_soc_dapm_type,
807 int subseq); 809 int subseq);
808 int (*stream_event)(struct snd_soc_component *, int event); 810 int (*stream_event)(struct snd_soc_component *, int event);
@@ -1676,6 +1678,7 @@ unsigned int snd_soc_of_parse_daifmt(struct device_node *np,
1676 const char *prefix, 1678 const char *prefix,
1677 struct device_node **bitclkmaster, 1679 struct device_node **bitclkmaster,
1678 struct device_node **framemaster); 1680 struct device_node **framemaster);
1681int snd_soc_get_dai_id(struct device_node *ep);
1679int snd_soc_get_dai_name(struct of_phandle_args *args, 1682int snd_soc_get_dai_name(struct of_phandle_args *args,
1680 const char **dai_name); 1683 const char **dai_name);
1681int snd_soc_of_get_dai_name(struct device_node *of_node, 1684int snd_soc_of_get_dai_name(struct device_node *of_node,
diff --git a/include/target/iscsi/iscsi_target_core.h b/include/target/iscsi/iscsi_target_core.h
index 275581d483dd..5f17fb770477 100644
--- a/include/target/iscsi/iscsi_target_core.h
+++ b/include/target/iscsi/iscsi_target_core.h
@@ -557,6 +557,7 @@ struct iscsi_conn {
557#define LOGIN_FLAGS_READ_ACTIVE 1 557#define LOGIN_FLAGS_READ_ACTIVE 1
558#define LOGIN_FLAGS_CLOSED 2 558#define LOGIN_FLAGS_CLOSED 2
559#define LOGIN_FLAGS_READY 4 559#define LOGIN_FLAGS_READY 4
560#define LOGIN_FLAGS_INITIAL_PDU 8
560 unsigned long login_flags; 561 unsigned long login_flags;
561 struct delayed_work login_work; 562 struct delayed_work login_work;
562 struct delayed_work login_cleanup_work; 563 struct delayed_work login_cleanup_work;
diff --git a/include/uapi/linux/a.out.h b/include/uapi/linux/a.out.h
index 7caf44c7fa51..295cd3ef6330 100644
--- a/include/uapi/linux/a.out.h
+++ b/include/uapi/linux/a.out.h
@@ -112,24 +112,7 @@ enum machine_type {
112#define N_TXTADDR(x) (N_MAGIC(x) == QMAGIC ? PAGE_SIZE : 0) 112#define N_TXTADDR(x) (N_MAGIC(x) == QMAGIC ? PAGE_SIZE : 0)
113#endif 113#endif
114 114
115/* Address of data segment in memory after it is loaded. 115/* Address of data segment in memory after it is loaded. */
116 Note that it is up to you to define SEGMENT_SIZE
117 on machines not listed here. */
118#if defined(vax) || defined(hp300) || defined(pyr)
119#define SEGMENT_SIZE page_size
120#endif
121#ifdef sony
122#define SEGMENT_SIZE 0x2000
123#endif /* Sony. */
124#ifdef is68k
125#define SEGMENT_SIZE 0x20000
126#endif
127#if defined(m68k) && defined(PORTAR)
128#define PAGE_SIZE 0x400
129#define SEGMENT_SIZE PAGE_SIZE
130#endif
131
132#ifdef linux
133#ifndef __KERNEL__ 116#ifndef __KERNEL__
134#include <unistd.h> 117#include <unistd.h>
135#endif 118#endif
@@ -142,7 +125,6 @@ enum machine_type {
142#endif 125#endif
143#endif 126#endif
144#endif 127#endif
145#endif
146 128
147#define _N_SEGMENT_ROUND(x) ALIGN(x, SEGMENT_SIZE) 129#define _N_SEGMENT_ROUND(x) ALIGN(x, SEGMENT_SIZE)
148 130
@@ -260,13 +242,7 @@ struct relocation_info
260 unsigned int r_extern:1; 242 unsigned int r_extern:1;
261 /* Four bits that aren't used, but when writing an object file 243 /* Four bits that aren't used, but when writing an object file
262 it is desirable to clear them. */ 244 it is desirable to clear them. */
263#ifdef NS32K
264 unsigned r_bsr:1;
265 unsigned r_disp:1;
266 unsigned r_pad:2;
267#else
268 unsigned int r_pad:4; 245 unsigned int r_pad:4;
269#endif
270}; 246};
271#endif /* no N_RELOCATION_INFO_DECLARED. */ 247#endif /* no N_RELOCATION_INFO_DECLARED. */
272 248
diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
index d179d7767f51..7d4a594d5d58 100644
--- a/include/uapi/linux/ethtool.h
+++ b/include/uapi/linux/ethtool.h
@@ -1486,8 +1486,10 @@ enum ethtool_link_mode_bit_indices {
1486 * it was forced up into this mode or autonegotiated. 1486 * it was forced up into this mode or autonegotiated.
1487 */ 1487 */
1488 1488
1489/* The forced speed, in units of 1Mb. All values 0 to INT_MAX are legal. */ 1489/* The forced speed, in units of 1Mb. All values 0 to INT_MAX are legal.
1490/* Update drivers/net/phy/phy.c:phy_speed_to_str() when adding new values */ 1490 * Update drivers/net/phy/phy.c:phy_speed_to_str() and
1491 * drivers/net/bonding/bond_3ad.c:__get_link_speed() when adding new values.
1492 */
1491#define SPEED_10 10 1493#define SPEED_10 10
1492#define SPEED_100 100 1494#define SPEED_100 100
1493#define SPEED_1000 1000 1495#define SPEED_1000 1000
diff --git a/include/uapi/linux/keyctl.h b/include/uapi/linux/keyctl.h
index 201c6644b237..ef16df06642a 100644
--- a/include/uapi/linux/keyctl.h
+++ b/include/uapi/linux/keyctl.h
@@ -70,8 +70,8 @@ struct keyctl_dh_params {
70}; 70};
71 71
72struct keyctl_kdf_params { 72struct keyctl_kdf_params {
73 char *hashname; 73 char __user *hashname;
74 char *otherinfo; 74 char __user *otherinfo;
75 __u32 otherinfolen; 75 __u32 otherinfolen;
76 __u32 __spare[8]; 76 __u32 __spare[8];
77}; 77};
diff --git a/include/uapi/linux/openvswitch.h b/include/uapi/linux/openvswitch.h
index 61b7d36dfe34..156ee4cab82e 100644
--- a/include/uapi/linux/openvswitch.h
+++ b/include/uapi/linux/openvswitch.h
@@ -343,6 +343,7 @@ enum ovs_key_attr {
343#define OVS_KEY_ATTR_MAX (__OVS_KEY_ATTR_MAX - 1) 343#define OVS_KEY_ATTR_MAX (__OVS_KEY_ATTR_MAX - 1)
344 344
345enum ovs_tunnel_key_attr { 345enum ovs_tunnel_key_attr {
346 /* OVS_TUNNEL_KEY_ATTR_NONE, standard nl API requires this attribute! */
346 OVS_TUNNEL_KEY_ATTR_ID, /* be64 Tunnel ID */ 347 OVS_TUNNEL_KEY_ATTR_ID, /* be64 Tunnel ID */
347 OVS_TUNNEL_KEY_ATTR_IPV4_SRC, /* be32 src IP address. */ 348 OVS_TUNNEL_KEY_ATTR_IPV4_SRC, /* be32 src IP address. */
348 OVS_TUNNEL_KEY_ATTR_IPV4_DST, /* be32 dst IP address. */ 349 OVS_TUNNEL_KEY_ATTR_IPV4_DST, /* be32 dst IP address. */
diff --git a/include/uapi/sound/asoc.h b/include/uapi/sound/asoc.h
index 6702533c8bd8..78014ec56357 100644
--- a/include/uapi/sound/asoc.h
+++ b/include/uapi/sound/asoc.h
@@ -73,7 +73,15 @@
73#define SND_SOC_TPLG_DAPM_DAI_IN 13 73#define SND_SOC_TPLG_DAPM_DAI_IN 13
74#define SND_SOC_TPLG_DAPM_DAI_OUT 14 74#define SND_SOC_TPLG_DAPM_DAI_OUT 14
75#define SND_SOC_TPLG_DAPM_DAI_LINK 15 75#define SND_SOC_TPLG_DAPM_DAI_LINK 15
76#define SND_SOC_TPLG_DAPM_LAST SND_SOC_TPLG_DAPM_DAI_LINK 76#define SND_SOC_TPLG_DAPM_BUFFER 16
77#define SND_SOC_TPLG_DAPM_SCHEDULER 17
78#define SND_SOC_TPLG_DAPM_EFFECT 18
79#define SND_SOC_TPLG_DAPM_SIGGEN 19
80#define SND_SOC_TPLG_DAPM_SRC 20
81#define SND_SOC_TPLG_DAPM_ASRC 21
82#define SND_SOC_TPLG_DAPM_ENCODER 22
83#define SND_SOC_TPLG_DAPM_DECODER 23
84#define SND_SOC_TPLG_DAPM_LAST SND_SOC_TPLG_DAPM_DECODER
77 85
78/* Header magic number and string sizes */ 86/* Header magic number and string sizes */
79#define SND_SOC_TPLG_MAGIC 0x41536F43 /* ASoC */ 87#define SND_SOC_TPLG_MAGIC 0x41536F43 /* ASoC */
diff --git a/include/uapi/sound/snd_sst_tokens.h b/include/uapi/sound/snd_sst_tokens.h
index 93392bedcc58..dedb2056160d 100644
--- a/include/uapi/sound/snd_sst_tokens.h
+++ b/include/uapi/sound/snd_sst_tokens.h
@@ -161,6 +161,8 @@
161 * 161 *
162 * %SKL_TKL_U32_D0I3_CAPS: Specifies the D0i3 capability for module 162 * %SKL_TKL_U32_D0I3_CAPS: Specifies the D0i3 capability for module
163 * 163 *
164 * %SKL_TKN_U32_DMA_BUF_SIZE: DMA buffer size in millisec
165 *
164 * module_id and loadable flags dont have tokens as these values will be 166 * module_id and loadable flags dont have tokens as these values will be
165 * read from the DSP FW manifest 167 * read from the DSP FW manifest
166 */ 168 */
@@ -213,8 +215,10 @@ enum SKL_TKNS {
213 SKL_TKN_U32_LIB_COUNT, 215 SKL_TKN_U32_LIB_COUNT,
214 SKL_TKN_STR_LIB_NAME, 216 SKL_TKN_STR_LIB_NAME,
215 SKL_TKN_U32_PMODE, 217 SKL_TKN_U32_PMODE,
216 SKL_TKL_U32_D0I3_CAPS, 218 SKL_TKL_U32_D0I3_CAPS, /* Typo added at v4.10 */
217 SKL_TKN_MAX = SKL_TKL_U32_D0I3_CAPS, 219 SKL_TKN_U32_D0I3_CAPS = SKL_TKL_U32_D0I3_CAPS,
220 SKL_TKN_U32_DMA_BUF_SIZE,
221 SKL_TKN_MAX = SKL_TKN_U32_DMA_BUF_SIZE,
218}; 222};
219 223
220#endif 224#endif
diff --git a/kernel/bpf/arraymap.c b/kernel/bpf/arraymap.c
index 5e00b2333c26..172dc8ee0e3b 100644
--- a/kernel/bpf/arraymap.c
+++ b/kernel/bpf/arraymap.c
@@ -86,6 +86,7 @@ static struct bpf_map *array_map_alloc(union bpf_attr *attr)
86 array->map.key_size = attr->key_size; 86 array->map.key_size = attr->key_size;
87 array->map.value_size = attr->value_size; 87 array->map.value_size = attr->value_size;
88 array->map.max_entries = attr->max_entries; 88 array->map.max_entries = attr->max_entries;
89 array->map.map_flags = attr->map_flags;
89 array->elem_size = elem_size; 90 array->elem_size = elem_size;
90 91
91 if (!percpu) 92 if (!percpu)
diff --git a/kernel/bpf/lpm_trie.c b/kernel/bpf/lpm_trie.c
index 39cfafd895b8..b09185f0f17d 100644
--- a/kernel/bpf/lpm_trie.c
+++ b/kernel/bpf/lpm_trie.c
@@ -432,6 +432,7 @@ static struct bpf_map *trie_alloc(union bpf_attr *attr)
432 trie->map.key_size = attr->key_size; 432 trie->map.key_size = attr->key_size;
433 trie->map.value_size = attr->value_size; 433 trie->map.value_size = attr->value_size;
434 trie->map.max_entries = attr->max_entries; 434 trie->map.max_entries = attr->max_entries;
435 trie->map.map_flags = attr->map_flags;
435 trie->data_size = attr->key_size - 436 trie->data_size = attr->key_size -
436 offsetof(struct bpf_lpm_trie_key, data); 437 offsetof(struct bpf_lpm_trie_key, data);
437 trie->max_prefixlen = trie->data_size * 8; 438 trie->max_prefixlen = trie->data_size * 8;
diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c
index 4dfd6f2ec2f9..31147d730abf 100644
--- a/kernel/bpf/stackmap.c
+++ b/kernel/bpf/stackmap.c
@@ -88,6 +88,7 @@ static struct bpf_map *stack_map_alloc(union bpf_attr *attr)
88 smap->map.key_size = attr->key_size; 88 smap->map.key_size = attr->key_size;
89 smap->map.value_size = value_size; 89 smap->map.value_size = value_size;
90 smap->map.max_entries = attr->max_entries; 90 smap->map.max_entries = attr->max_entries;
91 smap->map.map_flags = attr->map_flags;
91 smap->n_buckets = n_buckets; 92 smap->n_buckets = n_buckets;
92 smap->map.pages = round_up(cost, PAGE_SIZE) >> PAGE_SHIFT; 93 smap->map.pages = round_up(cost, PAGE_SIZE) >> PAGE_SHIFT;
93 94
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 1eddb713b815..a8a725697bed 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -463,19 +463,22 @@ static const int caller_saved[CALLER_SAVED_REGS] = {
463 BPF_REG_0, BPF_REG_1, BPF_REG_2, BPF_REG_3, BPF_REG_4, BPF_REG_5 463 BPF_REG_0, BPF_REG_1, BPF_REG_2, BPF_REG_3, BPF_REG_4, BPF_REG_5
464}; 464};
465 465
466static void mark_reg_not_init(struct bpf_reg_state *regs, u32 regno)
467{
468 BUG_ON(regno >= MAX_BPF_REG);
469
470 memset(&regs[regno], 0, sizeof(regs[regno]));
471 regs[regno].type = NOT_INIT;
472 regs[regno].min_value = BPF_REGISTER_MIN_RANGE;
473 regs[regno].max_value = BPF_REGISTER_MAX_RANGE;
474}
475
466static void init_reg_state(struct bpf_reg_state *regs) 476static void init_reg_state(struct bpf_reg_state *regs)
467{ 477{
468 int i; 478 int i;
469 479
470 for (i = 0; i < MAX_BPF_REG; i++) { 480 for (i = 0; i < MAX_BPF_REG; i++)
471 regs[i].type = NOT_INIT; 481 mark_reg_not_init(regs, i);
472 regs[i].imm = 0;
473 regs[i].min_value = BPF_REGISTER_MIN_RANGE;
474 regs[i].max_value = BPF_REGISTER_MAX_RANGE;
475 regs[i].min_align = 0;
476 regs[i].aux_off = 0;
477 regs[i].aux_off_align = 0;
478 }
479 482
480 /* frame pointer */ 483 /* frame pointer */
481 regs[BPF_REG_FP].type = FRAME_PTR; 484 regs[BPF_REG_FP].type = FRAME_PTR;
@@ -808,11 +811,15 @@ static int check_pkt_ptr_alignment(const struct bpf_reg_state *reg,
808 reg_off += reg->aux_off; 811 reg_off += reg->aux_off;
809 } 812 }
810 813
811 /* skb->data is NET_IP_ALIGN-ed, but for strict alignment checking 814 /* For platforms that do not have a Kconfig enabling
812 * we force this to 2 which is universally what architectures use 815 * CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS the value of
813 * when they don't set CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS. 816 * NET_IP_ALIGN is universally set to '2'. And on platforms
817 * that do set CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS, we get
818 * to this code only in strict mode where we want to emulate
819 * the NET_IP_ALIGN==2 checking. Therefore use an
820 * unconditional IP align value of '2'.
814 */ 821 */
815 ip_align = strict ? 2 : NET_IP_ALIGN; 822 ip_align = 2;
816 if ((ip_align + reg_off + off) % size != 0) { 823 if ((ip_align + reg_off + off) % size != 0) {
817 verbose("misaligned packet access off %d+%d+%d size %d\n", 824 verbose("misaligned packet access off %d+%d+%d size %d\n",
818 ip_align, reg_off, off, size); 825 ip_align, reg_off, off, size);
@@ -839,9 +846,6 @@ static int check_ptr_alignment(struct bpf_verifier_env *env,
839{ 846{
840 bool strict = env->strict_alignment; 847 bool strict = env->strict_alignment;
841 848
842 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
843 strict = true;
844
845 switch (reg->type) { 849 switch (reg->type) {
846 case PTR_TO_PACKET: 850 case PTR_TO_PACKET:
847 return check_pkt_ptr_alignment(reg, off, size, strict); 851 return check_pkt_ptr_alignment(reg, off, size, strict);
@@ -985,6 +989,11 @@ static int check_xadd(struct bpf_verifier_env *env, struct bpf_insn *insn)
985 if (err) 989 if (err)
986 return err; 990 return err;
987 991
992 if (is_pointer_value(env, insn->src_reg)) {
993 verbose("R%d leaks addr into mem\n", insn->src_reg);
994 return -EACCES;
995 }
996
988 /* check whether atomic_add can read the memory */ 997 /* check whether atomic_add can read the memory */
989 err = check_mem_access(env, insn->dst_reg, insn->off, 998 err = check_mem_access(env, insn->dst_reg, insn->off,
990 BPF_SIZE(insn->code), BPF_READ, -1); 999 BPF_SIZE(insn->code), BPF_READ, -1);
@@ -1345,7 +1354,6 @@ static int check_call(struct bpf_verifier_env *env, int func_id, int insn_idx)
1345 struct bpf_verifier_state *state = &env->cur_state; 1354 struct bpf_verifier_state *state = &env->cur_state;
1346 const struct bpf_func_proto *fn = NULL; 1355 const struct bpf_func_proto *fn = NULL;
1347 struct bpf_reg_state *regs = state->regs; 1356 struct bpf_reg_state *regs = state->regs;
1348 struct bpf_reg_state *reg;
1349 struct bpf_call_arg_meta meta; 1357 struct bpf_call_arg_meta meta;
1350 bool changes_data; 1358 bool changes_data;
1351 int i, err; 1359 int i, err;
@@ -1412,11 +1420,8 @@ static int check_call(struct bpf_verifier_env *env, int func_id, int insn_idx)
1412 } 1420 }
1413 1421
1414 /* reset caller saved regs */ 1422 /* reset caller saved regs */
1415 for (i = 0; i < CALLER_SAVED_REGS; i++) { 1423 for (i = 0; i < CALLER_SAVED_REGS; i++)
1416 reg = regs + caller_saved[i]; 1424 mark_reg_not_init(regs, caller_saved[i]);
1417 reg->type = NOT_INIT;
1418 reg->imm = 0;
1419 }
1420 1425
1421 /* update return register */ 1426 /* update return register */
1422 if (fn->ret_type == RET_INTEGER) { 1427 if (fn->ret_type == RET_INTEGER) {
@@ -2444,7 +2449,6 @@ static int check_ld_abs(struct bpf_verifier_env *env, struct bpf_insn *insn)
2444{ 2449{
2445 struct bpf_reg_state *regs = env->cur_state.regs; 2450 struct bpf_reg_state *regs = env->cur_state.regs;
2446 u8 mode = BPF_MODE(insn->code); 2451 u8 mode = BPF_MODE(insn->code);
2447 struct bpf_reg_state *reg;
2448 int i, err; 2452 int i, err;
2449 2453
2450 if (!may_access_skb(env->prog->type)) { 2454 if (!may_access_skb(env->prog->type)) {
@@ -2477,11 +2481,8 @@ static int check_ld_abs(struct bpf_verifier_env *env, struct bpf_insn *insn)
2477 } 2481 }
2478 2482
2479 /* reset caller saved regs to unreadable */ 2483 /* reset caller saved regs to unreadable */
2480 for (i = 0; i < CALLER_SAVED_REGS; i++) { 2484 for (i = 0; i < CALLER_SAVED_REGS; i++)
2481 reg = regs + caller_saved[i]; 2485 mark_reg_not_init(regs, caller_saved[i]);
2482 reg->type = NOT_INIT;
2483 reg->imm = 0;
2484 }
2485 2486
2486 /* mark destination R0 register as readable, since it contains 2487 /* mark destination R0 register as readable, since it contains
2487 * the value fetched from the packet 2488 * the value fetched from the packet
@@ -2692,7 +2693,8 @@ err_free:
2692/* the following conditions reduce the number of explored insns 2693/* the following conditions reduce the number of explored insns
2693 * from ~140k to ~80k for ultra large programs that use a lot of ptr_to_packet 2694 * from ~140k to ~80k for ultra large programs that use a lot of ptr_to_packet
2694 */ 2695 */
2695static bool compare_ptrs_to_packet(struct bpf_reg_state *old, 2696static bool compare_ptrs_to_packet(struct bpf_verifier_env *env,
2697 struct bpf_reg_state *old,
2696 struct bpf_reg_state *cur) 2698 struct bpf_reg_state *cur)
2697{ 2699{
2698 if (old->id != cur->id) 2700 if (old->id != cur->id)
@@ -2735,7 +2737,7 @@ static bool compare_ptrs_to_packet(struct bpf_reg_state *old,
2735 * 'if (R4 > data_end)' and all further insn were already good with r=20, 2737 * 'if (R4 > data_end)' and all further insn were already good with r=20,
2736 * so they will be good with r=30 and we can prune the search. 2738 * so they will be good with r=30 and we can prune the search.
2737 */ 2739 */
2738 if (old->off <= cur->off && 2740 if (!env->strict_alignment && old->off <= cur->off &&
2739 old->off >= old->range && cur->off >= cur->range) 2741 old->off >= old->range && cur->off >= cur->range)
2740 return true; 2742 return true;
2741 2743
@@ -2806,7 +2808,7 @@ static bool states_equal(struct bpf_verifier_env *env,
2806 continue; 2808 continue;
2807 2809
2808 if (rold->type == PTR_TO_PACKET && rcur->type == PTR_TO_PACKET && 2810 if (rold->type == PTR_TO_PACKET && rcur->type == PTR_TO_PACKET &&
2809 compare_ptrs_to_packet(rold, rcur)) 2811 compare_ptrs_to_packet(env, rold, rcur))
2810 continue; 2812 continue;
2811 2813
2812 return false; 2814 return false;
@@ -3584,10 +3586,10 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr)
3584 } else { 3586 } else {
3585 log_level = 0; 3587 log_level = 0;
3586 } 3588 }
3587 if (attr->prog_flags & BPF_F_STRICT_ALIGNMENT) 3589
3590 env->strict_alignment = !!(attr->prog_flags & BPF_F_STRICT_ALIGNMENT);
3591 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
3588 env->strict_alignment = true; 3592 env->strict_alignment = true;
3589 else
3590 env->strict_alignment = false;
3591 3593
3592 ret = replace_map_fd_with_map_ptr(env); 3594 ret = replace_map_fd_with_map_ptr(env);
3593 if (ret < 0) 3595 if (ret < 0)
@@ -3693,7 +3695,10 @@ int bpf_analyzer(struct bpf_prog *prog, const struct bpf_ext_analyzer_ops *ops,
3693 mutex_lock(&bpf_verifier_lock); 3695 mutex_lock(&bpf_verifier_lock);
3694 3696
3695 log_level = 0; 3697 log_level = 0;
3698
3696 env->strict_alignment = false; 3699 env->strict_alignment = false;
3700 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
3701 env->strict_alignment = true;
3697 3702
3698 env->explored_states = kcalloc(env->prog->len, 3703 env->explored_states = kcalloc(env->prog->len,
3699 sizeof(struct bpf_verifier_state_list *), 3704 sizeof(struct bpf_verifier_state_list *),
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index c3c9a0e1b3c9..8d4e85eae42c 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -4265,6 +4265,11 @@ static void kill_css(struct cgroup_subsys_state *css)
4265{ 4265{
4266 lockdep_assert_held(&cgroup_mutex); 4266 lockdep_assert_held(&cgroup_mutex);
4267 4267
4268 if (css->flags & CSS_DYING)
4269 return;
4270
4271 css->flags |= CSS_DYING;
4272
4268 /* 4273 /*
4269 * This must happen before css is disassociated with its cgroup. 4274 * This must happen before css is disassociated with its cgroup.
4270 * See seq_css() for details. 4275 * See seq_css() for details.
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index f6501f4f6040..ae643412948a 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -176,9 +176,9 @@ typedef enum {
176} cpuset_flagbits_t; 176} cpuset_flagbits_t;
177 177
178/* convenient tests for these bits */ 178/* convenient tests for these bits */
179static inline bool is_cpuset_online(const struct cpuset *cs) 179static inline bool is_cpuset_online(struct cpuset *cs)
180{ 180{
181 return test_bit(CS_ONLINE, &cs->flags); 181 return test_bit(CS_ONLINE, &cs->flags) && !css_is_dying(&cs->css);
182} 182}
183 183
184static inline int is_cpu_exclusive(const struct cpuset *cs) 184static inline int is_cpu_exclusive(const struct cpuset *cs)
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 9ae6fbe5b5cf..cb5103413bd8 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -1658,13 +1658,13 @@ static ssize_t write_cpuhp_target(struct device *dev,
1658 ret = !sp->name || sp->cant_stop ? -EINVAL : 0; 1658 ret = !sp->name || sp->cant_stop ? -EINVAL : 0;
1659 mutex_unlock(&cpuhp_state_mutex); 1659 mutex_unlock(&cpuhp_state_mutex);
1660 if (ret) 1660 if (ret)
1661 return ret; 1661 goto out;
1662 1662
1663 if (st->state < target) 1663 if (st->state < target)
1664 ret = do_cpu_up(dev->id, target); 1664 ret = do_cpu_up(dev->id, target);
1665 else 1665 else
1666 ret = do_cpu_down(dev->id, target); 1666 ret = do_cpu_down(dev->id, target);
1667 1667out:
1668 unlock_device_hotplug(); 1668 unlock_device_hotplug();
1669 return ret ? ret : count; 1669 return ret ? ret : count;
1670} 1670}
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 6e75a5c9412d..6c4e523dc1e2 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -7316,6 +7316,21 @@ int perf_event_account_interrupt(struct perf_event *event)
7316 return __perf_event_account_interrupt(event, 1); 7316 return __perf_event_account_interrupt(event, 1);
7317} 7317}
7318 7318
7319static bool sample_is_allowed(struct perf_event *event, struct pt_regs *regs)
7320{
7321 /*
7322 * Due to interrupt latency (AKA "skid"), we may enter the
7323 * kernel before taking an overflow, even if the PMU is only
7324 * counting user events.
7325 * To avoid leaking information to userspace, we must always
7326 * reject kernel samples when exclude_kernel is set.
7327 */
7328 if (event->attr.exclude_kernel && !user_mode(regs))
7329 return false;
7330
7331 return true;
7332}
7333
7319/* 7334/*
7320 * Generic event overflow handling, sampling. 7335 * Generic event overflow handling, sampling.
7321 */ 7336 */
@@ -7337,6 +7352,12 @@ static int __perf_event_overflow(struct perf_event *event,
7337 ret = __perf_event_account_interrupt(event, throttle); 7352 ret = __perf_event_account_interrupt(event, throttle);
7338 7353
7339 /* 7354 /*
7355 * For security, drop the skid kernel samples if necessary.
7356 */
7357 if (!sample_is_allowed(event, regs))
7358 return ret;
7359
7360 /*
7340 * XXX event_limit might not quite work as expected on inherited 7361 * XXX event_limit might not quite work as expected on inherited
7341 * events 7362 * events
7342 */ 7363 */
diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
index 2831480c63a2..ee97196bb151 100644
--- a/kernel/events/ring_buffer.c
+++ b/kernel/events/ring_buffer.c
@@ -580,7 +580,7 @@ int rb_alloc_aux(struct ring_buffer *rb, struct perf_event *event,
580 int ret = -ENOMEM, max_order = 0; 580 int ret = -ENOMEM, max_order = 0;
581 581
582 if (!has_aux(event)) 582 if (!has_aux(event))
583 return -ENOTSUPP; 583 return -EOPNOTSUPP;
584 584
585 if (event->pmu->capabilities & PERF_PMU_CAP_AUX_NO_SG) { 585 if (event->pmu->capabilities & PERF_PMU_CAP_AUX_NO_SG) {
586 /* 586 /*
diff --git a/kernel/fork.c b/kernel/fork.c
index aa1076c5e4a9..e53770d2bf95 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1577,6 +1577,18 @@ static __latent_entropy struct task_struct *copy_process(
1577 if (!p) 1577 if (!p)
1578 goto fork_out; 1578 goto fork_out;
1579 1579
1580 /*
1581 * This _must_ happen before we call free_task(), i.e. before we jump
1582 * to any of the bad_fork_* labels. This is to avoid freeing
1583 * p->set_child_tid which is (ab)used as a kthread's data pointer for
1584 * kernel threads (PF_KTHREAD).
1585 */
1586 p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? child_tidptr : NULL;
1587 /*
1588 * Clear TID on mm_release()?
1589 */
1590 p->clear_child_tid = (clone_flags & CLONE_CHILD_CLEARTID) ? child_tidptr : NULL;
1591
1580 ftrace_graph_init_task(p); 1592 ftrace_graph_init_task(p);
1581 1593
1582 rt_mutex_init_task(p); 1594 rt_mutex_init_task(p);
@@ -1743,11 +1755,6 @@ static __latent_entropy struct task_struct *copy_process(
1743 } 1755 }
1744 } 1756 }
1745 1757
1746 p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? child_tidptr : NULL;
1747 /*
1748 * Clear TID on mm_release()?
1749 */
1750 p->clear_child_tid = (clone_flags & CLONE_CHILD_CLEARTID) ? child_tidptr : NULL;
1751#ifdef CONFIG_BLOCK 1758#ifdef CONFIG_BLOCK
1752 p->plug = NULL; 1759 p->plug = NULL;
1753#endif 1760#endif
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 070be980c37a..425170d4439b 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -1312,8 +1312,10 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
1312 ret = __irq_set_trigger(desc, 1312 ret = __irq_set_trigger(desc,
1313 new->flags & IRQF_TRIGGER_MASK); 1313 new->flags & IRQF_TRIGGER_MASK);
1314 1314
1315 if (ret) 1315 if (ret) {
1316 irq_release_resources(desc);
1316 goto out_mask; 1317 goto out_mask;
1318 }
1317 } 1319 }
1318 1320
1319 desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED | \ 1321 desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED | \
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index 2d2d3a568e4e..adfe3b4cfe05 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -122,7 +122,7 @@ static void *alloc_insn_page(void)
122 return module_alloc(PAGE_SIZE); 122 return module_alloc(PAGE_SIZE);
123} 123}
124 124
125static void free_insn_page(void *page) 125void __weak free_insn_page(void *page)
126{ 126{
127 module_memfree(page); 127 module_memfree(page);
128} 128}
diff --git a/kernel/livepatch/Kconfig b/kernel/livepatch/Kconfig
index 045022557936..ec4565122e65 100644
--- a/kernel/livepatch/Kconfig
+++ b/kernel/livepatch/Kconfig
@@ -10,6 +10,7 @@ config LIVEPATCH
10 depends on SYSFS 10 depends on SYSFS
11 depends on KALLSYMS_ALL 11 depends on KALLSYMS_ALL
12 depends on HAVE_LIVEPATCH 12 depends on HAVE_LIVEPATCH
13 depends on !TRIM_UNUSED_KSYMS
13 help 14 help
14 Say Y here if you want to support kernel live patching. 15 Say Y here if you want to support kernel live patching.
15 This option has no runtime impact until a kernel "patch" 16 This option has no runtime impact until a kernel "patch"
diff --git a/kernel/livepatch/patch.c b/kernel/livepatch/patch.c
index f8269036bf0b..52c4e907c14b 100644
--- a/kernel/livepatch/patch.c
+++ b/kernel/livepatch/patch.c
@@ -59,7 +59,11 @@ static void notrace klp_ftrace_handler(unsigned long ip,
59 59
60 ops = container_of(fops, struct klp_ops, fops); 60 ops = container_of(fops, struct klp_ops, fops);
61 61
62 rcu_read_lock(); 62 /*
63 * A variant of synchronize_sched() is used to allow patching functions
64 * where RCU is not watching, see klp_synchronize_transition().
65 */
66 preempt_disable_notrace();
63 67
64 func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, 68 func = list_first_or_null_rcu(&ops->func_stack, struct klp_func,
65 stack_node); 69 stack_node);
@@ -115,7 +119,7 @@ static void notrace klp_ftrace_handler(unsigned long ip,
115 119
116 klp_arch_set_pc(regs, (unsigned long)func->new_func); 120 klp_arch_set_pc(regs, (unsigned long)func->new_func);
117unlock: 121unlock:
118 rcu_read_unlock(); 122 preempt_enable_notrace();
119} 123}
120 124
121/* 125/*
diff --git a/kernel/livepatch/transition.c b/kernel/livepatch/transition.c
index adc0cc64aa4b..b004a1fb6032 100644
--- a/kernel/livepatch/transition.c
+++ b/kernel/livepatch/transition.c
@@ -49,6 +49,28 @@ static void klp_transition_work_fn(struct work_struct *work)
49static DECLARE_DELAYED_WORK(klp_transition_work, klp_transition_work_fn); 49static DECLARE_DELAYED_WORK(klp_transition_work, klp_transition_work_fn);
50 50
51/* 51/*
52 * This function is just a stub to implement a hard force
53 * of synchronize_sched(). This requires synchronizing
54 * tasks even in userspace and idle.
55 */
56static void klp_sync(struct work_struct *work)
57{
58}
59
60/*
61 * We allow to patch also functions where RCU is not watching,
62 * e.g. before user_exit(). We can not rely on the RCU infrastructure
63 * to do the synchronization. Instead hard force the sched synchronization.
64 *
65 * This approach allows to use RCU functions for manipulating func_stack
66 * safely.
67 */
68static void klp_synchronize_transition(void)
69{
70 schedule_on_each_cpu(klp_sync);
71}
72
73/*
52 * The transition to the target patch state is complete. Clean up the data 74 * The transition to the target patch state is complete. Clean up the data
53 * structures. 75 * structures.
54 */ 76 */
@@ -73,7 +95,7 @@ static void klp_complete_transition(void)
73 * func->transition gets cleared, the handler may choose a 95 * func->transition gets cleared, the handler may choose a
74 * removed function. 96 * removed function.
75 */ 97 */
76 synchronize_rcu(); 98 klp_synchronize_transition();
77 } 99 }
78 100
79 if (klp_transition_patch->immediate) 101 if (klp_transition_patch->immediate)
@@ -92,7 +114,7 @@ static void klp_complete_transition(void)
92 114
93 /* Prevent klp_ftrace_handler() from seeing KLP_UNDEFINED state */ 115 /* Prevent klp_ftrace_handler() from seeing KLP_UNDEFINED state */
94 if (klp_target_state == KLP_PATCHED) 116 if (klp_target_state == KLP_PATCHED)
95 synchronize_rcu(); 117 klp_synchronize_transition();
96 118
97 read_lock(&tasklist_lock); 119 read_lock(&tasklist_lock);
98 for_each_process_thread(g, task) { 120 for_each_process_thread(g, task) {
@@ -136,7 +158,11 @@ void klp_cancel_transition(void)
136 */ 158 */
137void klp_update_patch_state(struct task_struct *task) 159void klp_update_patch_state(struct task_struct *task)
138{ 160{
139 rcu_read_lock(); 161 /*
162 * A variant of synchronize_sched() is used to allow patching functions
163 * where RCU is not watching, see klp_synchronize_transition().
164 */
165 preempt_disable_notrace();
140 166
141 /* 167 /*
142 * This test_and_clear_tsk_thread_flag() call also serves as a read 168 * This test_and_clear_tsk_thread_flag() call also serves as a read
@@ -153,7 +179,7 @@ void klp_update_patch_state(struct task_struct *task)
153 if (test_and_clear_tsk_thread_flag(task, TIF_PATCH_PENDING)) 179 if (test_and_clear_tsk_thread_flag(task, TIF_PATCH_PENDING))
154 task->patch_state = READ_ONCE(klp_target_state); 180 task->patch_state = READ_ONCE(klp_target_state);
155 181
156 rcu_read_unlock(); 182 preempt_enable_notrace();
157} 183}
158 184
159/* 185/*
@@ -539,7 +565,7 @@ void klp_reverse_transition(void)
539 clear_tsk_thread_flag(idle_task(cpu), TIF_PATCH_PENDING); 565 clear_tsk_thread_flag(idle_task(cpu), TIF_PATCH_PENDING);
540 566
541 /* Let any remaining calls to klp_update_patch_state() complete */ 567 /* Let any remaining calls to klp_update_patch_state() complete */
542 synchronize_rcu(); 568 klp_synchronize_transition();
543 569
544 klp_start_transition(); 570 klp_start_transition();
545} 571}
diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c
index b95509416909..28cd09e635ed 100644
--- a/kernel/locking/rtmutex.c
+++ b/kernel/locking/rtmutex.c
@@ -1785,12 +1785,14 @@ int rt_mutex_wait_proxy_lock(struct rt_mutex *lock,
1785 int ret; 1785 int ret;
1786 1786
1787 raw_spin_lock_irq(&lock->wait_lock); 1787 raw_spin_lock_irq(&lock->wait_lock);
1788
1789 set_current_state(TASK_INTERRUPTIBLE);
1790
1791 /* sleep on the mutex */ 1788 /* sleep on the mutex */
1789 set_current_state(TASK_INTERRUPTIBLE);
1792 ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter); 1790 ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter);
1793 1791 /*
1792 * try_to_take_rt_mutex() sets the waiter bit unconditionally. We might
1793 * have to fix that up.
1794 */
1795 fixup_rt_mutex_waiters(lock);
1794 raw_spin_unlock_irq(&lock->wait_lock); 1796 raw_spin_unlock_irq(&lock->wait_lock);
1795 1797
1796 return ret; 1798 return ret;
@@ -1822,15 +1824,25 @@ bool rt_mutex_cleanup_proxy_lock(struct rt_mutex *lock,
1822 1824
1823 raw_spin_lock_irq(&lock->wait_lock); 1825 raw_spin_lock_irq(&lock->wait_lock);
1824 /* 1826 /*
1827 * Do an unconditional try-lock, this deals with the lock stealing
1828 * state where __rt_mutex_futex_unlock() -> mark_wakeup_next_waiter()
1829 * sets a NULL owner.
1830 *
1831 * We're not interested in the return value, because the subsequent
1832 * test on rt_mutex_owner() will infer that. If the trylock succeeded,
1833 * we will own the lock and it will have removed the waiter. If we
1834 * failed the trylock, we're still not owner and we need to remove
1835 * ourselves.
1836 */
1837 try_to_take_rt_mutex(lock, current, waiter);
1838 /*
1825 * Unless we're the owner; we're still enqueued on the wait_list. 1839 * Unless we're the owner; we're still enqueued on the wait_list.
1826 * So check if we became owner, if not, take us off the wait_list. 1840 * So check if we became owner, if not, take us off the wait_list.
1827 */ 1841 */
1828 if (rt_mutex_owner(lock) != current) { 1842 if (rt_mutex_owner(lock) != current) {
1829 remove_waiter(lock, waiter); 1843 remove_waiter(lock, waiter);
1830 fixup_rt_mutex_waiters(lock);
1831 cleanup = true; 1844 cleanup = true;
1832 } 1845 }
1833
1834 /* 1846 /*
1835 * try_to_take_rt_mutex() sets the waiter bit unconditionally. We might 1847 * try_to_take_rt_mutex() sets the waiter bit unconditionally. We might
1836 * have to fix that up. 1848 * have to fix that up.
diff --git a/kernel/power/process.c b/kernel/power/process.c
index 78672d324a6e..c7209f060eeb 100644
--- a/kernel/power/process.c
+++ b/kernel/power/process.c
@@ -132,7 +132,7 @@ int freeze_processes(void)
132 if (!pm_freezing) 132 if (!pm_freezing)
133 atomic_inc(&system_freezing_cnt); 133 atomic_inc(&system_freezing_cnt);
134 134
135 pm_wakeup_clear(true); 135 pm_wakeup_clear();
136 pr_info("Freezing user space processes ... "); 136 pr_info("Freezing user space processes ... ");
137 pm_freezing = true; 137 pm_freezing = true;
138 error = try_to_freeze_tasks(true); 138 error = try_to_freeze_tasks(true);
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c
index 3b1e0f3ad07f..fa46606f3356 100644
--- a/kernel/power/snapshot.c
+++ b/kernel/power/snapshot.c
@@ -1425,7 +1425,7 @@ static unsigned int nr_meta_pages;
1425 * Numbers of normal and highmem page frames allocated for hibernation image 1425 * Numbers of normal and highmem page frames allocated for hibernation image
1426 * before suspending devices. 1426 * before suspending devices.
1427 */ 1427 */
1428unsigned int alloc_normal, alloc_highmem; 1428static unsigned int alloc_normal, alloc_highmem;
1429/* 1429/*
1430 * Memory bitmap used for marking saveable pages (during hibernation) or 1430 * Memory bitmap used for marking saveable pages (during hibernation) or
1431 * hibernation image pages (during restore) 1431 * hibernation image pages (during restore)
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index c0248c74d6d4..15e6baef5c73 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -72,8 +72,6 @@ static void freeze_begin(void)
72 72
73static void freeze_enter(void) 73static void freeze_enter(void)
74{ 74{
75 trace_suspend_resume(TPS("machine_suspend"), PM_SUSPEND_FREEZE, true);
76
77 spin_lock_irq(&suspend_freeze_lock); 75 spin_lock_irq(&suspend_freeze_lock);
78 if (pm_wakeup_pending()) 76 if (pm_wakeup_pending())
79 goto out; 77 goto out;
@@ -100,27 +98,6 @@ static void freeze_enter(void)
100 out: 98 out:
101 suspend_freeze_state = FREEZE_STATE_NONE; 99 suspend_freeze_state = FREEZE_STATE_NONE;
102 spin_unlock_irq(&suspend_freeze_lock); 100 spin_unlock_irq(&suspend_freeze_lock);
103
104 trace_suspend_resume(TPS("machine_suspend"), PM_SUSPEND_FREEZE, false);
105}
106
107static void s2idle_loop(void)
108{
109 do {
110 freeze_enter();
111
112 if (freeze_ops && freeze_ops->wake)
113 freeze_ops->wake();
114
115 dpm_resume_noirq(PMSG_RESUME);
116 if (freeze_ops && freeze_ops->sync)
117 freeze_ops->sync();
118
119 if (pm_wakeup_pending())
120 break;
121
122 pm_wakeup_clear(false);
123 } while (!dpm_suspend_noirq(PMSG_SUSPEND));
124} 101}
125 102
126void freeze_wake(void) 103void freeze_wake(void)
@@ -394,8 +371,10 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
394 * all the devices are suspended. 371 * all the devices are suspended.
395 */ 372 */
396 if (state == PM_SUSPEND_FREEZE) { 373 if (state == PM_SUSPEND_FREEZE) {
397 s2idle_loop(); 374 trace_suspend_resume(TPS("machine_suspend"), state, true);
398 goto Platform_early_resume; 375 freeze_enter();
376 trace_suspend_resume(TPS("machine_suspend"), state, false);
377 goto Platform_wake;
399 } 378 }
400 379
401 error = disable_nonboot_cpus(); 380 error = disable_nonboot_cpus();
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index a1aecf44ab07..a1db38abac5b 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -269,7 +269,6 @@ static struct console *exclusive_console;
269#define MAX_CMDLINECONSOLES 8 269#define MAX_CMDLINECONSOLES 8
270 270
271static struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES]; 271static struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES];
272static int console_cmdline_cnt;
273 272
274static int preferred_console = -1; 273static int preferred_console = -1;
275int console_set_on_cmdline; 274int console_set_on_cmdline;
@@ -1906,25 +1905,12 @@ static int __add_preferred_console(char *name, int idx, char *options,
1906 * See if this tty is not yet registered, and 1905 * See if this tty is not yet registered, and
1907 * if we have a slot free. 1906 * if we have a slot free.
1908 */ 1907 */
1909 for (i = 0, c = console_cmdline; i < console_cmdline_cnt; i++, c++) { 1908 for (i = 0, c = console_cmdline;
1909 i < MAX_CMDLINECONSOLES && c->name[0];
1910 i++, c++) {
1910 if (strcmp(c->name, name) == 0 && c->index == idx) { 1911 if (strcmp(c->name, name) == 0 && c->index == idx) {
1911 if (brl_options) 1912 if (!brl_options)
1912 return 0; 1913 preferred_console = i;
1913
1914 /*
1915 * Maintain an invariant that will help to find if
1916 * the matching console is preferred, see
1917 * register_console():
1918 *
1919 * The last non-braille console is always
1920 * the preferred one.
1921 */
1922 if (i != console_cmdline_cnt - 1)
1923 swap(console_cmdline[i],
1924 console_cmdline[console_cmdline_cnt - 1]);
1925
1926 preferred_console = console_cmdline_cnt - 1;
1927
1928 return 0; 1914 return 0;
1929 } 1915 }
1930 } 1916 }
@@ -1937,7 +1923,6 @@ static int __add_preferred_console(char *name, int idx, char *options,
1937 braille_set_options(c, brl_options); 1923 braille_set_options(c, brl_options);
1938 1924
1939 c->index = idx; 1925 c->index = idx;
1940 console_cmdline_cnt++;
1941 return 0; 1926 return 0;
1942} 1927}
1943/* 1928/*
@@ -2477,23 +2462,12 @@ void register_console(struct console *newcon)
2477 } 2462 }
2478 2463
2479 /* 2464 /*
2480 * See if this console matches one we selected on the command line. 2465 * See if this console matches one we selected on
2481 * 2466 * the command line.
2482 * There may be several entries in the console_cmdline array matching
2483 * with the same console, one with newcon->match(), another by
2484 * name/index:
2485 *
2486 * pl011,mmio,0x87e024000000,115200 -- added from SPCR
2487 * ttyAMA0 -- added from command line
2488 *
2489 * Traverse the console_cmdline array in reverse order to be
2490 * sure that if this console is preferred then it will be the first
2491 * matching entry. We use the invariant that is maintained in
2492 * __add_preferred_console().
2493 */ 2467 */
2494 for (i = console_cmdline_cnt - 1; i >= 0; i--) { 2468 for (i = 0, c = console_cmdline;
2495 c = console_cmdline + i; 2469 i < MAX_CMDLINECONSOLES && c->name[0];
2496 2470 i++, c++) {
2497 if (!newcon->match || 2471 if (!newcon->match ||
2498 newcon->match(newcon, c->name, c->index, c->options) != 0) { 2472 newcon->match(newcon, c->name, c->index, c->options) != 0) {
2499 /* default matching */ 2473 /* default matching */
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index 266ddcc1d8bb..60f356d91060 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -60,19 +60,25 @@ int ptrace_access_vm(struct task_struct *tsk, unsigned long addr,
60} 60}
61 61
62 62
63void __ptrace_link(struct task_struct *child, struct task_struct *new_parent,
64 const struct cred *ptracer_cred)
65{
66 BUG_ON(!list_empty(&child->ptrace_entry));
67 list_add(&child->ptrace_entry, &new_parent->ptraced);
68 child->parent = new_parent;
69 child->ptracer_cred = get_cred(ptracer_cred);
70}
71
63/* 72/*
64 * ptrace a task: make the debugger its new parent and 73 * ptrace a task: make the debugger its new parent and
65 * move it to the ptrace list. 74 * move it to the ptrace list.
66 * 75 *
67 * Must be called with the tasklist lock write-held. 76 * Must be called with the tasklist lock write-held.
68 */ 77 */
69void __ptrace_link(struct task_struct *child, struct task_struct *new_parent) 78static void ptrace_link(struct task_struct *child, struct task_struct *new_parent)
70{ 79{
71 BUG_ON(!list_empty(&child->ptrace_entry));
72 list_add(&child->ptrace_entry, &new_parent->ptraced);
73 child->parent = new_parent;
74 rcu_read_lock(); 80 rcu_read_lock();
75 child->ptracer_cred = get_cred(__task_cred(new_parent)); 81 __ptrace_link(child, new_parent, __task_cred(new_parent));
76 rcu_read_unlock(); 82 rcu_read_unlock();
77} 83}
78 84
@@ -386,7 +392,7 @@ static int ptrace_attach(struct task_struct *task, long request,
386 flags |= PT_SEIZED; 392 flags |= PT_SEIZED;
387 task->ptrace = flags; 393 task->ptrace = flags;
388 394
389 __ptrace_link(task, current); 395 ptrace_link(task, current);
390 396
391 /* SEIZE doesn't trap tracee on attach */ 397 /* SEIZE doesn't trap tracee on attach */
392 if (!seize) 398 if (!seize)
@@ -459,7 +465,7 @@ static int ptrace_traceme(void)
459 */ 465 */
460 if (!ret && !(current->real_parent->flags & PF_EXITING)) { 466 if (!ret && !(current->real_parent->flags & PF_EXITING)) {
461 current->ptrace = PT_PTRACED; 467 current->ptrace = PT_PTRACED;
462 __ptrace_link(current, current->real_parent); 468 ptrace_link(current, current->real_parent);
463 } 469 }
464 } 470 }
465 write_unlock_irq(&tasklist_lock); 471 write_unlock_irq(&tasklist_lock);
diff --git a/kernel/rcu/srcu.c b/kernel/rcu/srcu.c
index 584d8a983883..dea03614263f 100644
--- a/kernel/rcu/srcu.c
+++ b/kernel/rcu/srcu.c
@@ -263,7 +263,7 @@ EXPORT_SYMBOL_GPL(cleanup_srcu_struct);
263 263
264/* 264/*
265 * Counts the new reader in the appropriate per-CPU element of the 265 * Counts the new reader in the appropriate per-CPU element of the
266 * srcu_struct. Must be called from process context. 266 * srcu_struct.
267 * Returns an index that must be passed to the matching srcu_read_unlock(). 267 * Returns an index that must be passed to the matching srcu_read_unlock().
268 */ 268 */
269int __srcu_read_lock(struct srcu_struct *sp) 269int __srcu_read_lock(struct srcu_struct *sp)
@@ -271,7 +271,7 @@ int __srcu_read_lock(struct srcu_struct *sp)
271 int idx; 271 int idx;
272 272
273 idx = READ_ONCE(sp->completed) & 0x1; 273 idx = READ_ONCE(sp->completed) & 0x1;
274 __this_cpu_inc(sp->per_cpu_ref->lock_count[idx]); 274 this_cpu_inc(sp->per_cpu_ref->lock_count[idx]);
275 smp_mb(); /* B */ /* Avoid leaking the critical section. */ 275 smp_mb(); /* B */ /* Avoid leaking the critical section. */
276 return idx; 276 return idx;
277} 277}
@@ -281,7 +281,6 @@ EXPORT_SYMBOL_GPL(__srcu_read_lock);
281 * Removes the count for the old reader from the appropriate per-CPU 281 * Removes the count for the old reader from the appropriate per-CPU
282 * element of the srcu_struct. Note that this may well be a different 282 * element of the srcu_struct. Note that this may well be a different
283 * CPU than that which was incremented by the corresponding srcu_read_lock(). 283 * CPU than that which was incremented by the corresponding srcu_read_lock().
284 * Must be called from process context.
285 */ 284 */
286void __srcu_read_unlock(struct srcu_struct *sp, int idx) 285void __srcu_read_unlock(struct srcu_struct *sp, int idx)
287{ 286{
diff --git a/kernel/rcu/srcutiny.c b/kernel/rcu/srcutiny.c
index 36e1f82faed1..32798eb14853 100644
--- a/kernel/rcu/srcutiny.c
+++ b/kernel/rcu/srcutiny.c
@@ -97,8 +97,9 @@ EXPORT_SYMBOL_GPL(cleanup_srcu_struct);
97 97
98/* 98/*
99 * Counts the new reader in the appropriate per-CPU element of the 99 * Counts the new reader in the appropriate per-CPU element of the
100 * srcu_struct. Must be called from process context. 100 * srcu_struct. Can be invoked from irq/bh handlers, but the matching
101 * Returns an index that must be passed to the matching srcu_read_unlock(). 101 * __srcu_read_unlock() must be in the same handler instance. Returns an
102 * index that must be passed to the matching srcu_read_unlock().
102 */ 103 */
103int __srcu_read_lock(struct srcu_struct *sp) 104int __srcu_read_lock(struct srcu_struct *sp)
104{ 105{
@@ -112,7 +113,7 @@ EXPORT_SYMBOL_GPL(__srcu_read_lock);
112 113
113/* 114/*
114 * Removes the count for the old reader from the appropriate element of 115 * Removes the count for the old reader from the appropriate element of
115 * the srcu_struct. Must be called from process context. 116 * the srcu_struct.
116 */ 117 */
117void __srcu_read_unlock(struct srcu_struct *sp, int idx) 118void __srcu_read_unlock(struct srcu_struct *sp, int idx)
118{ 119{
diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
index 3ae8474557df..157654fa436a 100644
--- a/kernel/rcu/srcutree.c
+++ b/kernel/rcu/srcutree.c
@@ -357,7 +357,7 @@ EXPORT_SYMBOL_GPL(cleanup_srcu_struct);
357 357
358/* 358/*
359 * Counts the new reader in the appropriate per-CPU element of the 359 * Counts the new reader in the appropriate per-CPU element of the
360 * srcu_struct. Must be called from process context. 360 * srcu_struct.
361 * Returns an index that must be passed to the matching srcu_read_unlock(). 361 * Returns an index that must be passed to the matching srcu_read_unlock().
362 */ 362 */
363int __srcu_read_lock(struct srcu_struct *sp) 363int __srcu_read_lock(struct srcu_struct *sp)
@@ -365,7 +365,7 @@ int __srcu_read_lock(struct srcu_struct *sp)
365 int idx; 365 int idx;
366 366
367 idx = READ_ONCE(sp->srcu_idx) & 0x1; 367 idx = READ_ONCE(sp->srcu_idx) & 0x1;
368 __this_cpu_inc(sp->sda->srcu_lock_count[idx]); 368 this_cpu_inc(sp->sda->srcu_lock_count[idx]);
369 smp_mb(); /* B */ /* Avoid leaking the critical section. */ 369 smp_mb(); /* B */ /* Avoid leaking the critical section. */
370 return idx; 370 return idx;
371} 371}
@@ -375,7 +375,6 @@ EXPORT_SYMBOL_GPL(__srcu_read_lock);
375 * Removes the count for the old reader from the appropriate per-CPU 375 * Removes the count for the old reader from the appropriate per-CPU
376 * element of the srcu_struct. Note that this may well be a different 376 * element of the srcu_struct. Note that this may well be a different
377 * CPU than that which was incremented by the corresponding srcu_read_lock(). 377 * CPU than that which was incremented by the corresponding srcu_read_lock().
378 * Must be called from process context.
379 */ 378 */
380void __srcu_read_unlock(struct srcu_struct *sp, int idx) 379void __srcu_read_unlock(struct srcu_struct *sp, int idx)
381{ 380{
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 803c3bc274c4..326d4f88e2b1 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -5605,7 +5605,7 @@ void idle_task_exit(void)
5605 BUG_ON(cpu_online(smp_processor_id())); 5605 BUG_ON(cpu_online(smp_processor_id()));
5606 5606
5607 if (mm != &init_mm) { 5607 if (mm != &init_mm) {
5608 switch_mm_irqs_off(mm, &init_mm, current); 5608 switch_mm(mm, &init_mm, current);
5609 finish_arch_post_lock_switch(); 5609 finish_arch_post_lock_switch();
5610 } 5610 }
5611 mmdrop(mm); 5611 mmdrop(mm);
diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 76877a62b5fa..076a2e31951c 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -101,9 +101,6 @@ static void sugov_update_commit(struct sugov_policy *sg_policy, u64 time,
101 if (sg_policy->next_freq == next_freq) 101 if (sg_policy->next_freq == next_freq)
102 return; 102 return;
103 103
104 if (sg_policy->next_freq > next_freq)
105 next_freq = (sg_policy->next_freq + next_freq) >> 1;
106
107 sg_policy->next_freq = next_freq; 104 sg_policy->next_freq = next_freq;
108 sg_policy->last_freq_update_time = time; 105 sg_policy->last_freq_update_time = time;
109 106
@@ -245,11 +242,10 @@ static void sugov_update_single(struct update_util_data *hook, u64 time,
245 sugov_update_commit(sg_policy, time, next_f); 242 sugov_update_commit(sg_policy, time, next_f);
246} 243}
247 244
248static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu) 245static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu, u64 time)
249{ 246{
250 struct sugov_policy *sg_policy = sg_cpu->sg_policy; 247 struct sugov_policy *sg_policy = sg_cpu->sg_policy;
251 struct cpufreq_policy *policy = sg_policy->policy; 248 struct cpufreq_policy *policy = sg_policy->policy;
252 u64 last_freq_update_time = sg_policy->last_freq_update_time;
253 unsigned long util = 0, max = 1; 249 unsigned long util = 0, max = 1;
254 unsigned int j; 250 unsigned int j;
255 251
@@ -265,7 +261,7 @@ static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu)
265 * enough, don't take the CPU into account as it probably is 261 * enough, don't take the CPU into account as it probably is
266 * idle now (and clear iowait_boost for it). 262 * idle now (and clear iowait_boost for it).
267 */ 263 */
268 delta_ns = last_freq_update_time - j_sg_cpu->last_update; 264 delta_ns = time - j_sg_cpu->last_update;
269 if (delta_ns > TICK_NSEC) { 265 if (delta_ns > TICK_NSEC) {
270 j_sg_cpu->iowait_boost = 0; 266 j_sg_cpu->iowait_boost = 0;
271 continue; 267 continue;
@@ -309,7 +305,7 @@ static void sugov_update_shared(struct update_util_data *hook, u64 time,
309 if (flags & SCHED_CPUFREQ_RT_DL) 305 if (flags & SCHED_CPUFREQ_RT_DL)
310 next_f = sg_policy->policy->cpuinfo.max_freq; 306 next_f = sg_policy->policy->cpuinfo.max_freq;
311 else 307 else
312 next_f = sugov_next_freq_shared(sg_cpu); 308 next_f = sugov_next_freq_shared(sg_cpu, time);
313 309
314 sugov_update_commit(sg_policy, time, next_f); 310 sugov_update_commit(sg_policy, time, next_f);
315 } 311 }
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index d71109321841..c77e4b1d51c0 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -3563,7 +3563,7 @@ static inline void check_schedstat_required(void)
3563 trace_sched_stat_runtime_enabled()) { 3563 trace_sched_stat_runtime_enabled()) {
3564 printk_deferred_once("Scheduler tracepoints stat_sleep, stat_iowait, " 3564 printk_deferred_once("Scheduler tracepoints stat_sleep, stat_iowait, "
3565 "stat_blocked and stat_runtime require the " 3565 "stat_blocked and stat_runtime require the "
3566 "kernel parameter schedstats=enabled or " 3566 "kernel parameter schedstats=enable or "
3567 "kernel.sched_schedstats=1\n"); 3567 "kernel.sched_schedstats=1\n");
3568 } 3568 }
3569#endif 3569#endif
diff --git a/kernel/signal.c b/kernel/signal.c
index ca92bcfeb322..45b4c1ffe14e 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -510,7 +510,8 @@ int unhandled_signal(struct task_struct *tsk, int sig)
510 return !tsk->ptrace; 510 return !tsk->ptrace;
511} 511}
512 512
513static void collect_signal(int sig, struct sigpending *list, siginfo_t *info) 513static void collect_signal(int sig, struct sigpending *list, siginfo_t *info,
514 bool *resched_timer)
514{ 515{
515 struct sigqueue *q, *first = NULL; 516 struct sigqueue *q, *first = NULL;
516 517
@@ -532,6 +533,12 @@ static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
532still_pending: 533still_pending:
533 list_del_init(&first->list); 534 list_del_init(&first->list);
534 copy_siginfo(info, &first->info); 535 copy_siginfo(info, &first->info);
536
537 *resched_timer =
538 (first->flags & SIGQUEUE_PREALLOC) &&
539 (info->si_code == SI_TIMER) &&
540 (info->si_sys_private);
541
535 __sigqueue_free(first); 542 __sigqueue_free(first);
536 } else { 543 } else {
537 /* 544 /*
@@ -548,12 +555,12 @@ still_pending:
548} 555}
549 556
550static int __dequeue_signal(struct sigpending *pending, sigset_t *mask, 557static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
551 siginfo_t *info) 558 siginfo_t *info, bool *resched_timer)
552{ 559{
553 int sig = next_signal(pending, mask); 560 int sig = next_signal(pending, mask);
554 561
555 if (sig) 562 if (sig)
556 collect_signal(sig, pending, info); 563 collect_signal(sig, pending, info, resched_timer);
557 return sig; 564 return sig;
558} 565}
559 566
@@ -565,15 +572,16 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
565 */ 572 */
566int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info) 573int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
567{ 574{
575 bool resched_timer = false;
568 int signr; 576 int signr;
569 577
570 /* We only dequeue private signals from ourselves, we don't let 578 /* We only dequeue private signals from ourselves, we don't let
571 * signalfd steal them 579 * signalfd steal them
572 */ 580 */
573 signr = __dequeue_signal(&tsk->pending, mask, info); 581 signr = __dequeue_signal(&tsk->pending, mask, info, &resched_timer);
574 if (!signr) { 582 if (!signr) {
575 signr = __dequeue_signal(&tsk->signal->shared_pending, 583 signr = __dequeue_signal(&tsk->signal->shared_pending,
576 mask, info); 584 mask, info, &resched_timer);
577#ifdef CONFIG_POSIX_TIMERS 585#ifdef CONFIG_POSIX_TIMERS
578 /* 586 /*
579 * itimer signal ? 587 * itimer signal ?
@@ -621,7 +629,7 @@ int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
621 current->jobctl |= JOBCTL_STOP_DEQUEUED; 629 current->jobctl |= JOBCTL_STOP_DEQUEUED;
622 } 630 }
623#ifdef CONFIG_POSIX_TIMERS 631#ifdef CONFIG_POSIX_TIMERS
624 if ((info->si_code & __SI_MASK) == __SI_TIMER && info->si_sys_private) { 632 if (resched_timer) {
625 /* 633 /*
626 * Release the siglock to ensure proper locking order 634 * Release the siglock to ensure proper locking order
627 * of timer locks outside of siglocks. Note, we leave 635 * of timer locks outside of siglocks. Note, we leave
diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
index 5cb5b0008d97..ee2f4202d82a 100644
--- a/kernel/time/alarmtimer.c
+++ b/kernel/time/alarmtimer.c
@@ -387,7 +387,7 @@ void alarm_start_relative(struct alarm *alarm, ktime_t start)
387{ 387{
388 struct alarm_base *base = &alarm_bases[alarm->type]; 388 struct alarm_base *base = &alarm_bases[alarm->type];
389 389
390 start = ktime_add(start, base->gettime()); 390 start = ktime_add_safe(start, base->gettime());
391 alarm_start(alarm, start); 391 alarm_start(alarm, start);
392} 392}
393EXPORT_SYMBOL_GPL(alarm_start_relative); 393EXPORT_SYMBOL_GPL(alarm_start_relative);
@@ -475,7 +475,7 @@ u64 alarm_forward(struct alarm *alarm, ktime_t now, ktime_t interval)
475 overrun++; 475 overrun++;
476 } 476 }
477 477
478 alarm->node.expires = ktime_add(alarm->node.expires, interval); 478 alarm->node.expires = ktime_add_safe(alarm->node.expires, interval);
479 return overrun; 479 return overrun;
480} 480}
481EXPORT_SYMBOL_GPL(alarm_forward); 481EXPORT_SYMBOL_GPL(alarm_forward);
@@ -660,13 +660,21 @@ static int alarm_timer_set(struct k_itimer *timr, int flags,
660 660
661 /* start the timer */ 661 /* start the timer */
662 timr->it.alarm.interval = timespec64_to_ktime(new_setting->it_interval); 662 timr->it.alarm.interval = timespec64_to_ktime(new_setting->it_interval);
663
664 /*
665 * Rate limit to the tick as a hot fix to prevent DOS. Will be
666 * mopped up later.
667 */
668 if (timr->it.alarm.interval < TICK_NSEC)
669 timr->it.alarm.interval = TICK_NSEC;
670
663 exp = timespec64_to_ktime(new_setting->it_value); 671 exp = timespec64_to_ktime(new_setting->it_value);
664 /* Convert (if necessary) to absolute time */ 672 /* Convert (if necessary) to absolute time */
665 if (flags != TIMER_ABSTIME) { 673 if (flags != TIMER_ABSTIME) {
666 ktime_t now; 674 ktime_t now;
667 675
668 now = alarm_bases[timr->it.alarm.alarmtimer.type].gettime(); 676 now = alarm_bases[timr->it.alarm.alarmtimer.type].gettime();
669 exp = ktime_add(now, exp); 677 exp = ktime_add_safe(now, exp);
670 } 678 }
671 679
672 alarm_start(&timr->it.alarm.alarmtimer, exp); 680 alarm_start(&timr->it.alarm.alarmtimer, exp);
diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
index 1370f067fb51..d2a1e6dd0291 100644
--- a/kernel/time/posix-cpu-timers.c
+++ b/kernel/time/posix-cpu-timers.c
@@ -825,8 +825,10 @@ static void check_thread_timers(struct task_struct *tsk,
825 * At the hard limit, we just die. 825 * At the hard limit, we just die.
826 * No need to calculate anything else now. 826 * No need to calculate anything else now.
827 */ 827 */
828 pr_info("CPU Watchdog Timeout (hard): %s[%d]\n", 828 if (print_fatal_signals) {
829 tsk->comm, task_pid_nr(tsk)); 829 pr_info("CPU Watchdog Timeout (hard): %s[%d]\n",
830 tsk->comm, task_pid_nr(tsk));
831 }
830 __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk); 832 __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);
831 return; 833 return;
832 } 834 }
@@ -838,8 +840,10 @@ static void check_thread_timers(struct task_struct *tsk,
838 soft += USEC_PER_SEC; 840 soft += USEC_PER_SEC;
839 sig->rlim[RLIMIT_RTTIME].rlim_cur = soft; 841 sig->rlim[RLIMIT_RTTIME].rlim_cur = soft;
840 } 842 }
841 pr_info("RT Watchdog Timeout (soft): %s[%d]\n", 843 if (print_fatal_signals) {
842 tsk->comm, task_pid_nr(tsk)); 844 pr_info("RT Watchdog Timeout (soft): %s[%d]\n",
845 tsk->comm, task_pid_nr(tsk));
846 }
843 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk); 847 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
844 } 848 }
845 } 849 }
@@ -936,8 +940,10 @@ static void check_process_timers(struct task_struct *tsk,
936 * At the hard limit, we just die. 940 * At the hard limit, we just die.
937 * No need to calculate anything else now. 941 * No need to calculate anything else now.
938 */ 942 */
939 pr_info("RT Watchdog Timeout (hard): %s[%d]\n", 943 if (print_fatal_signals) {
940 tsk->comm, task_pid_nr(tsk)); 944 pr_info("RT Watchdog Timeout (hard): %s[%d]\n",
945 tsk->comm, task_pid_nr(tsk));
946 }
941 __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk); 947 __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);
942 return; 948 return;
943 } 949 }
@@ -945,8 +951,10 @@ static void check_process_timers(struct task_struct *tsk,
945 /* 951 /*
946 * At the soft limit, send a SIGXCPU every second. 952 * At the soft limit, send a SIGXCPU every second.
947 */ 953 */
948 pr_info("CPU Watchdog Timeout (soft): %s[%d]\n", 954 if (print_fatal_signals) {
949 tsk->comm, task_pid_nr(tsk)); 955 pr_info("CPU Watchdog Timeout (soft): %s[%d]\n",
956 tsk->comm, task_pid_nr(tsk));
957 }
950 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk); 958 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
951 if (soft < hard) { 959 if (soft < hard) {
952 soft++; 960 soft++;
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
index 987e496bb51a..b398c2ea69b2 100644
--- a/kernel/time/tick-broadcast.c
+++ b/kernel/time/tick-broadcast.c
@@ -37,9 +37,11 @@ static int tick_broadcast_forced;
37static __cacheline_aligned_in_smp DEFINE_RAW_SPINLOCK(tick_broadcast_lock); 37static __cacheline_aligned_in_smp DEFINE_RAW_SPINLOCK(tick_broadcast_lock);
38 38
39#ifdef CONFIG_TICK_ONESHOT 39#ifdef CONFIG_TICK_ONESHOT
40static void tick_broadcast_setup_oneshot(struct clock_event_device *bc);
40static void tick_broadcast_clear_oneshot(int cpu); 41static void tick_broadcast_clear_oneshot(int cpu);
41static void tick_resume_broadcast_oneshot(struct clock_event_device *bc); 42static void tick_resume_broadcast_oneshot(struct clock_event_device *bc);
42#else 43#else
44static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc) { BUG(); }
43static inline void tick_broadcast_clear_oneshot(int cpu) { } 45static inline void tick_broadcast_clear_oneshot(int cpu) { }
44static inline void tick_resume_broadcast_oneshot(struct clock_event_device *bc) { } 46static inline void tick_resume_broadcast_oneshot(struct clock_event_device *bc) { }
45#endif 47#endif
@@ -867,7 +869,7 @@ static void tick_broadcast_init_next_event(struct cpumask *mask,
867/** 869/**
868 * tick_broadcast_setup_oneshot - setup the broadcast device 870 * tick_broadcast_setup_oneshot - setup the broadcast device
869 */ 871 */
870void tick_broadcast_setup_oneshot(struct clock_event_device *bc) 872static void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
871{ 873{
872 int cpu = smp_processor_id(); 874 int cpu = smp_processor_id();
873 875
diff --git a/kernel/time/tick-internal.h b/kernel/time/tick-internal.h
index f738251000fe..be0ac01f2e12 100644
--- a/kernel/time/tick-internal.h
+++ b/kernel/time/tick-internal.h
@@ -126,7 +126,6 @@ static inline int tick_check_oneshot_change(int allow_nohz) { return 0; }
126 126
127/* Functions related to oneshot broadcasting */ 127/* Functions related to oneshot broadcasting */
128#if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT) 128#if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT)
129extern void tick_broadcast_setup_oneshot(struct clock_event_device *bc);
130extern void tick_broadcast_switch_to_oneshot(void); 129extern void tick_broadcast_switch_to_oneshot(void);
131extern void tick_shutdown_broadcast_oneshot(unsigned int cpu); 130extern void tick_shutdown_broadcast_oneshot(unsigned int cpu);
132extern int tick_broadcast_oneshot_active(void); 131extern int tick_broadcast_oneshot_active(void);
@@ -134,7 +133,6 @@ extern void tick_check_oneshot_broadcast_this_cpu(void);
134bool tick_broadcast_oneshot_available(void); 133bool tick_broadcast_oneshot_available(void);
135extern struct cpumask *tick_get_broadcast_oneshot_mask(void); 134extern struct cpumask *tick_get_broadcast_oneshot_mask(void);
136#else /* !(BROADCAST && ONESHOT): */ 135#else /* !(BROADCAST && ONESHOT): */
137static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc) { BUG(); }
138static inline void tick_broadcast_switch_to_oneshot(void) { } 136static inline void tick_broadcast_switch_to_oneshot(void) { }
139static inline void tick_shutdown_broadcast_oneshot(unsigned int cpu) { } 137static inline void tick_shutdown_broadcast_oneshot(unsigned int cpu) { }
140static inline int tick_broadcast_oneshot_active(void) { return 0; } 138static inline int tick_broadcast_oneshot_active(void) { return 0; }
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 9652bc57fd09..b602c48cb841 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -118,6 +118,26 @@ static inline void tk_update_sleep_time(struct timekeeper *tk, ktime_t delta)
118 tk->offs_boot = ktime_add(tk->offs_boot, delta); 118 tk->offs_boot = ktime_add(tk->offs_boot, delta);
119} 119}
120 120
121/*
122 * tk_clock_read - atomic clocksource read() helper
123 *
124 * This helper is necessary to use in the read paths because, while the
125 * seqlock ensures we don't return a bad value while structures are updated,
126 * it doesn't protect from potential crashes. There is the possibility that
127 * the tkr's clocksource may change between the read reference, and the
128 * clock reference passed to the read function. This can cause crashes if
129 * the wrong clocksource is passed to the wrong read function.
130 * This isn't necessary to use when holding the timekeeper_lock or doing
131 * a read of the fast-timekeeper tkrs (which is protected by its own locking
132 * and update logic).
133 */
134static inline u64 tk_clock_read(struct tk_read_base *tkr)
135{
136 struct clocksource *clock = READ_ONCE(tkr->clock);
137
138 return clock->read(clock);
139}
140
121#ifdef CONFIG_DEBUG_TIMEKEEPING 141#ifdef CONFIG_DEBUG_TIMEKEEPING
122#define WARNING_FREQ (HZ*300) /* 5 minute rate-limiting */ 142#define WARNING_FREQ (HZ*300) /* 5 minute rate-limiting */
123 143
@@ -175,7 +195,7 @@ static inline u64 timekeeping_get_delta(struct tk_read_base *tkr)
175 */ 195 */
176 do { 196 do {
177 seq = read_seqcount_begin(&tk_core.seq); 197 seq = read_seqcount_begin(&tk_core.seq);
178 now = tkr->read(tkr->clock); 198 now = tk_clock_read(tkr);
179 last = tkr->cycle_last; 199 last = tkr->cycle_last;
180 mask = tkr->mask; 200 mask = tkr->mask;
181 max = tkr->clock->max_cycles; 201 max = tkr->clock->max_cycles;
@@ -209,7 +229,7 @@ static inline u64 timekeeping_get_delta(struct tk_read_base *tkr)
209 u64 cycle_now, delta; 229 u64 cycle_now, delta;
210 230
211 /* read clocksource */ 231 /* read clocksource */
212 cycle_now = tkr->read(tkr->clock); 232 cycle_now = tk_clock_read(tkr);
213 233
214 /* calculate the delta since the last update_wall_time */ 234 /* calculate the delta since the last update_wall_time */
215 delta = clocksource_delta(cycle_now, tkr->cycle_last, tkr->mask); 235 delta = clocksource_delta(cycle_now, tkr->cycle_last, tkr->mask);
@@ -238,12 +258,10 @@ static void tk_setup_internals(struct timekeeper *tk, struct clocksource *clock)
238 ++tk->cs_was_changed_seq; 258 ++tk->cs_was_changed_seq;
239 old_clock = tk->tkr_mono.clock; 259 old_clock = tk->tkr_mono.clock;
240 tk->tkr_mono.clock = clock; 260 tk->tkr_mono.clock = clock;
241 tk->tkr_mono.read = clock->read;
242 tk->tkr_mono.mask = clock->mask; 261 tk->tkr_mono.mask = clock->mask;
243 tk->tkr_mono.cycle_last = tk->tkr_mono.read(clock); 262 tk->tkr_mono.cycle_last = tk_clock_read(&tk->tkr_mono);
244 263
245 tk->tkr_raw.clock = clock; 264 tk->tkr_raw.clock = clock;
246 tk->tkr_raw.read = clock->read;
247 tk->tkr_raw.mask = clock->mask; 265 tk->tkr_raw.mask = clock->mask;
248 tk->tkr_raw.cycle_last = tk->tkr_mono.cycle_last; 266 tk->tkr_raw.cycle_last = tk->tkr_mono.cycle_last;
249 267
@@ -262,7 +280,7 @@ static void tk_setup_internals(struct timekeeper *tk, struct clocksource *clock)
262 /* Go back from cycles -> shifted ns */ 280 /* Go back from cycles -> shifted ns */
263 tk->xtime_interval = interval * clock->mult; 281 tk->xtime_interval = interval * clock->mult;
264 tk->xtime_remainder = ntpinterval - tk->xtime_interval; 282 tk->xtime_remainder = ntpinterval - tk->xtime_interval;
265 tk->raw_interval = (interval * clock->mult) >> clock->shift; 283 tk->raw_interval = interval * clock->mult;
266 284
267 /* if changing clocks, convert xtime_nsec shift units */ 285 /* if changing clocks, convert xtime_nsec shift units */
268 if (old_clock) { 286 if (old_clock) {
@@ -404,7 +422,7 @@ static __always_inline u64 __ktime_get_fast_ns(struct tk_fast *tkf)
404 422
405 now += timekeeping_delta_to_ns(tkr, 423 now += timekeeping_delta_to_ns(tkr,
406 clocksource_delta( 424 clocksource_delta(
407 tkr->read(tkr->clock), 425 tk_clock_read(tkr),
408 tkr->cycle_last, 426 tkr->cycle_last,
409 tkr->mask)); 427 tkr->mask));
410 } while (read_seqcount_retry(&tkf->seq, seq)); 428 } while (read_seqcount_retry(&tkf->seq, seq));
@@ -461,6 +479,10 @@ static u64 dummy_clock_read(struct clocksource *cs)
461 return cycles_at_suspend; 479 return cycles_at_suspend;
462} 480}
463 481
482static struct clocksource dummy_clock = {
483 .read = dummy_clock_read,
484};
485
464/** 486/**
465 * halt_fast_timekeeper - Prevent fast timekeeper from accessing clocksource. 487 * halt_fast_timekeeper - Prevent fast timekeeper from accessing clocksource.
466 * @tk: Timekeeper to snapshot. 488 * @tk: Timekeeper to snapshot.
@@ -477,13 +499,13 @@ static void halt_fast_timekeeper(struct timekeeper *tk)
477 struct tk_read_base *tkr = &tk->tkr_mono; 499 struct tk_read_base *tkr = &tk->tkr_mono;
478 500
479 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy)); 501 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
480 cycles_at_suspend = tkr->read(tkr->clock); 502 cycles_at_suspend = tk_clock_read(tkr);
481 tkr_dummy.read = dummy_clock_read; 503 tkr_dummy.clock = &dummy_clock;
482 update_fast_timekeeper(&tkr_dummy, &tk_fast_mono); 504 update_fast_timekeeper(&tkr_dummy, &tk_fast_mono);
483 505
484 tkr = &tk->tkr_raw; 506 tkr = &tk->tkr_raw;
485 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy)); 507 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
486 tkr_dummy.read = dummy_clock_read; 508 tkr_dummy.clock = &dummy_clock;
487 update_fast_timekeeper(&tkr_dummy, &tk_fast_raw); 509 update_fast_timekeeper(&tkr_dummy, &tk_fast_raw);
488} 510}
489 511
@@ -649,11 +671,10 @@ static void timekeeping_update(struct timekeeper *tk, unsigned int action)
649 */ 671 */
650static void timekeeping_forward_now(struct timekeeper *tk) 672static void timekeeping_forward_now(struct timekeeper *tk)
651{ 673{
652 struct clocksource *clock = tk->tkr_mono.clock;
653 u64 cycle_now, delta; 674 u64 cycle_now, delta;
654 u64 nsec; 675 u64 nsec;
655 676
656 cycle_now = tk->tkr_mono.read(clock); 677 cycle_now = tk_clock_read(&tk->tkr_mono);
657 delta = clocksource_delta(cycle_now, tk->tkr_mono.cycle_last, tk->tkr_mono.mask); 678 delta = clocksource_delta(cycle_now, tk->tkr_mono.cycle_last, tk->tkr_mono.mask);
658 tk->tkr_mono.cycle_last = cycle_now; 679 tk->tkr_mono.cycle_last = cycle_now;
659 tk->tkr_raw.cycle_last = cycle_now; 680 tk->tkr_raw.cycle_last = cycle_now;
@@ -929,8 +950,7 @@ void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot)
929 950
930 do { 951 do {
931 seq = read_seqcount_begin(&tk_core.seq); 952 seq = read_seqcount_begin(&tk_core.seq);
932 953 now = tk_clock_read(&tk->tkr_mono);
933 now = tk->tkr_mono.read(tk->tkr_mono.clock);
934 systime_snapshot->cs_was_changed_seq = tk->cs_was_changed_seq; 954 systime_snapshot->cs_was_changed_seq = tk->cs_was_changed_seq;
935 systime_snapshot->clock_was_set_seq = tk->clock_was_set_seq; 955 systime_snapshot->clock_was_set_seq = tk->clock_was_set_seq;
936 base_real = ktime_add(tk->tkr_mono.base, 956 base_real = ktime_add(tk->tkr_mono.base,
@@ -1108,7 +1128,7 @@ int get_device_system_crosststamp(int (*get_time_fn)
1108 * Check whether the system counter value provided by the 1128 * Check whether the system counter value provided by the
1109 * device driver is on the current timekeeping interval. 1129 * device driver is on the current timekeeping interval.
1110 */ 1130 */
1111 now = tk->tkr_mono.read(tk->tkr_mono.clock); 1131 now = tk_clock_read(&tk->tkr_mono);
1112 interval_start = tk->tkr_mono.cycle_last; 1132 interval_start = tk->tkr_mono.cycle_last;
1113 if (!cycle_between(interval_start, cycles, now)) { 1133 if (!cycle_between(interval_start, cycles, now)) {
1114 clock_was_set_seq = tk->clock_was_set_seq; 1134 clock_was_set_seq = tk->clock_was_set_seq;
@@ -1629,7 +1649,7 @@ void timekeeping_resume(void)
1629 * The less preferred source will only be tried if there is no better 1649 * The less preferred source will only be tried if there is no better
1630 * usable source. The rtc part is handled separately in rtc core code. 1650 * usable source. The rtc part is handled separately in rtc core code.
1631 */ 1651 */
1632 cycle_now = tk->tkr_mono.read(clock); 1652 cycle_now = tk_clock_read(&tk->tkr_mono);
1633 if ((clock->flags & CLOCK_SOURCE_SUSPEND_NONSTOP) && 1653 if ((clock->flags & CLOCK_SOURCE_SUSPEND_NONSTOP) &&
1634 cycle_now > tk->tkr_mono.cycle_last) { 1654 cycle_now > tk->tkr_mono.cycle_last) {
1635 u64 nsec, cyc_delta; 1655 u64 nsec, cyc_delta;
@@ -1976,7 +1996,7 @@ static u64 logarithmic_accumulation(struct timekeeper *tk, u64 offset,
1976 u32 shift, unsigned int *clock_set) 1996 u32 shift, unsigned int *clock_set)
1977{ 1997{
1978 u64 interval = tk->cycle_interval << shift; 1998 u64 interval = tk->cycle_interval << shift;
1979 u64 raw_nsecs; 1999 u64 snsec_per_sec;
1980 2000
1981 /* If the offset is smaller than a shifted interval, do nothing */ 2001 /* If the offset is smaller than a shifted interval, do nothing */
1982 if (offset < interval) 2002 if (offset < interval)
@@ -1991,14 +2011,15 @@ static u64 logarithmic_accumulation(struct timekeeper *tk, u64 offset,
1991 *clock_set |= accumulate_nsecs_to_secs(tk); 2011 *clock_set |= accumulate_nsecs_to_secs(tk);
1992 2012
1993 /* Accumulate raw time */ 2013 /* Accumulate raw time */
1994 raw_nsecs = (u64)tk->raw_interval << shift; 2014 tk->tkr_raw.xtime_nsec += (u64)tk->raw_time.tv_nsec << tk->tkr_raw.shift;
1995 raw_nsecs += tk->raw_time.tv_nsec; 2015 tk->tkr_raw.xtime_nsec += tk->raw_interval << shift;
1996 if (raw_nsecs >= NSEC_PER_SEC) { 2016 snsec_per_sec = (u64)NSEC_PER_SEC << tk->tkr_raw.shift;
1997 u64 raw_secs = raw_nsecs; 2017 while (tk->tkr_raw.xtime_nsec >= snsec_per_sec) {
1998 raw_nsecs = do_div(raw_secs, NSEC_PER_SEC); 2018 tk->tkr_raw.xtime_nsec -= snsec_per_sec;
1999 tk->raw_time.tv_sec += raw_secs; 2019 tk->raw_time.tv_sec++;
2000 } 2020 }
2001 tk->raw_time.tv_nsec = raw_nsecs; 2021 tk->raw_time.tv_nsec = tk->tkr_raw.xtime_nsec >> tk->tkr_raw.shift;
2022 tk->tkr_raw.xtime_nsec -= (u64)tk->raw_time.tv_nsec << tk->tkr_raw.shift;
2002 2023
2003 /* Accumulate error between NTP and clock interval */ 2024 /* Accumulate error between NTP and clock interval */
2004 tk->ntp_error += tk->ntp_tick << shift; 2025 tk->ntp_error += tk->ntp_tick << shift;
@@ -2030,7 +2051,7 @@ void update_wall_time(void)
2030#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET 2051#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
2031 offset = real_tk->cycle_interval; 2052 offset = real_tk->cycle_interval;
2032#else 2053#else
2033 offset = clocksource_delta(tk->tkr_mono.read(tk->tkr_mono.clock), 2054 offset = clocksource_delta(tk_clock_read(&tk->tkr_mono),
2034 tk->tkr_mono.cycle_last, tk->tkr_mono.mask); 2055 tk->tkr_mono.cycle_last, tk->tkr_mono.mask);
2035#endif 2056#endif
2036 2057
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 74fdfe9ed3db..b308be30dfb9 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -4337,9 +4337,6 @@ static int ftrace_process_regex(struct ftrace_iterator *iter,
4337 4337
4338 command = strsep(&next, ":"); 4338 command = strsep(&next, ":");
4339 4339
4340 if (WARN_ON_ONCE(!tr))
4341 return -EINVAL;
4342
4343 mutex_lock(&ftrace_cmd_mutex); 4340 mutex_lock(&ftrace_cmd_mutex);
4344 list_for_each_entry(p, &ftrace_commands, list) { 4341 list_for_each_entry(p, &ftrace_commands, list) {
4345 if (strcmp(p->name, command) == 0) { 4342 if (strcmp(p->name, command) == 0) {
@@ -5063,7 +5060,7 @@ ftrace_graph_release(struct inode *inode, struct file *file)
5063 } 5060 }
5064 5061
5065 out: 5062 out:
5066 kfree(fgd->new_hash); 5063 free_ftrace_hash(fgd->new_hash);
5067 kfree(fgd); 5064 kfree(fgd);
5068 5065
5069 return ret; 5066 return ret;
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 1122f151466f..091e801145c9 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -6881,6 +6881,9 @@ ftrace_trace_snapshot_callback(struct trace_array *tr, struct ftrace_hash *hash,
6881 char *number; 6881 char *number;
6882 int ret; 6882 int ret;
6883 6883
6884 if (!tr)
6885 return -ENODEV;
6886
6884 /* hash funcs only work with set_ftrace_filter */ 6887 /* hash funcs only work with set_ftrace_filter */
6885 if (!enable) 6888 if (!enable)
6886 return -EINVAL; 6889 return -EINVAL;
diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c
index a3bddbfd0874..a0910c0cdf2e 100644
--- a/kernel/trace/trace_functions.c
+++ b/kernel/trace/trace_functions.c
@@ -654,6 +654,9 @@ ftrace_trace_onoff_callback(struct trace_array *tr, struct ftrace_hash *hash,
654{ 654{
655 struct ftrace_probe_ops *ops; 655 struct ftrace_probe_ops *ops;
656 656
657 if (!tr)
658 return -ENODEV;
659
657 /* we register both traceon and traceoff to this callback */ 660 /* we register both traceon and traceoff to this callback */
658 if (strcmp(cmd, "traceon") == 0) 661 if (strcmp(cmd, "traceon") == 0)
659 ops = param ? &traceon_count_probe_ops : &traceon_probe_ops; 662 ops = param ? &traceon_count_probe_ops : &traceon_probe_ops;
@@ -670,6 +673,9 @@ ftrace_stacktrace_callback(struct trace_array *tr, struct ftrace_hash *hash,
670{ 673{
671 struct ftrace_probe_ops *ops; 674 struct ftrace_probe_ops *ops;
672 675
676 if (!tr)
677 return -ENODEV;
678
673 ops = param ? &stacktrace_count_probe_ops : &stacktrace_probe_ops; 679 ops = param ? &stacktrace_count_probe_ops : &stacktrace_probe_ops;
674 680
675 return ftrace_trace_probe_callback(tr, ops, hash, glob, cmd, 681 return ftrace_trace_probe_callback(tr, ops, hash, glob, cmd,
@@ -682,6 +688,9 @@ ftrace_dump_callback(struct trace_array *tr, struct ftrace_hash *hash,
682{ 688{
683 struct ftrace_probe_ops *ops; 689 struct ftrace_probe_ops *ops;
684 690
691 if (!tr)
692 return -ENODEV;
693
685 ops = &dump_probe_ops; 694 ops = &dump_probe_ops;
686 695
687 /* Only dump once. */ 696 /* Only dump once. */
@@ -695,6 +704,9 @@ ftrace_cpudump_callback(struct trace_array *tr, struct ftrace_hash *hash,
695{ 704{
696 struct ftrace_probe_ops *ops; 705 struct ftrace_probe_ops *ops;
697 706
707 if (!tr)
708 return -ENODEV;
709
698 ops = &cpudump_probe_ops; 710 ops = &cpudump_probe_ops;
699 711
700 /* Only dump once. */ 712 /* Only dump once. */
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index c129fca6ec99..b53c8d369163 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -707,20 +707,16 @@ static int create_trace_kprobe(int argc, char **argv)
707 pr_info("Probe point is not specified.\n"); 707 pr_info("Probe point is not specified.\n");
708 return -EINVAL; 708 return -EINVAL;
709 } 709 }
710 if (isdigit(argv[1][0])) { 710
711 /* an address specified */ 711 /* try to parse an address. if that fails, try to read the
712 ret = kstrtoul(&argv[1][0], 0, (unsigned long *)&addr); 712 * input as a symbol. */
713 if (ret) { 713 if (kstrtoul(argv[1], 0, (unsigned long *)&addr)) {
714 pr_info("Failed to parse address.\n");
715 return ret;
716 }
717 } else {
718 /* a symbol specified */ 714 /* a symbol specified */
719 symbol = argv[1]; 715 symbol = argv[1];
720 /* TODO: support .init module functions */ 716 /* TODO: support .init module functions */
721 ret = traceprobe_split_symbol_offset(symbol, &offset); 717 ret = traceprobe_split_symbol_offset(symbol, &offset);
722 if (ret) { 718 if (ret) {
723 pr_info("Failed to parse symbol.\n"); 719 pr_info("Failed to parse either an address or a symbol.\n");
724 return ret; 720 return ret;
725 } 721 }
726 if (offset && is_return && 722 if (offset && is_return &&
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index 76aa04d4c925..b4a751e8f9d6 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -409,7 +409,9 @@ static const struct file_operations stack_trace_fops = {
409static int 409static int
410stack_trace_filter_open(struct inode *inode, struct file *file) 410stack_trace_filter_open(struct inode *inode, struct file *file)
411{ 411{
412 return ftrace_regex_open(&trace_ops, FTRACE_ITER_FILTER, 412 struct ftrace_ops *ops = inode->i_private;
413
414 return ftrace_regex_open(ops, FTRACE_ITER_FILTER,
413 inode, file); 415 inode, file);
414} 416}
415 417
@@ -476,7 +478,7 @@ static __init int stack_trace_init(void)
476 NULL, &stack_trace_fops); 478 NULL, &stack_trace_fops);
477 479
478 trace_create_file("stack_trace_filter", 0444, d_tracer, 480 trace_create_file("stack_trace_filter", 0444, d_tracer,
479 NULL, &stack_trace_filter_fops); 481 &trace_ops, &stack_trace_filter_fops);
480 482
481 if (stack_trace_filter_buf[0]) 483 if (stack_trace_filter_buf[0])
482 ftrace_set_early_filter(&trace_ops, stack_trace_filter_buf, 1); 484 ftrace_set_early_filter(&trace_ops, stack_trace_filter_buf, 1);
diff --git a/lib/cmdline.c b/lib/cmdline.c
index 3c6432df7e63..4c0888c4a68d 100644
--- a/lib/cmdline.c
+++ b/lib/cmdline.c
@@ -23,14 +23,14 @@
23 * the values[M, M+1, ..., N] into the ints array in get_options. 23 * the values[M, M+1, ..., N] into the ints array in get_options.
24 */ 24 */
25 25
26static int get_range(char **str, int *pint) 26static int get_range(char **str, int *pint, int n)
27{ 27{
28 int x, inc_counter, upper_range; 28 int x, inc_counter, upper_range;
29 29
30 (*str)++; 30 (*str)++;
31 upper_range = simple_strtol((*str), NULL, 0); 31 upper_range = simple_strtol((*str), NULL, 0);
32 inc_counter = upper_range - *pint; 32 inc_counter = upper_range - *pint;
33 for (x = *pint; x < upper_range; x++) 33 for (x = *pint; n && x < upper_range; x++, n--)
34 *pint++ = x; 34 *pint++ = x;
35 return inc_counter; 35 return inc_counter;
36} 36}
@@ -97,7 +97,7 @@ char *get_options(const char *str, int nints, int *ints)
97 break; 97 break;
98 if (res == 3) { 98 if (res == 3) {
99 int range_nums; 99 int range_nums;
100 range_nums = get_range((char **)&str, ints + i); 100 range_nums = get_range((char **)&str, ints + i, nints - i);
101 if (range_nums < 0) 101 if (range_nums < 0)
102 break; 102 break;
103 /* 103 /*
diff --git a/lib/libcrc32c.c b/lib/libcrc32c.c
index 74a54b7f2562..9f79547d1b97 100644
--- a/lib/libcrc32c.c
+++ b/lib/libcrc32c.c
@@ -43,7 +43,7 @@ static struct crypto_shash *tfm;
43u32 crc32c(u32 crc, const void *address, unsigned int length) 43u32 crc32c(u32 crc, const void *address, unsigned int length)
44{ 44{
45 SHASH_DESC_ON_STACK(shash, tfm); 45 SHASH_DESC_ON_STACK(shash, tfm);
46 u32 *ctx = (u32 *)shash_desc_ctx(shash); 46 u32 ret, *ctx = (u32 *)shash_desc_ctx(shash);
47 int err; 47 int err;
48 48
49 shash->tfm = tfm; 49 shash->tfm = tfm;
@@ -53,7 +53,9 @@ u32 crc32c(u32 crc, const void *address, unsigned int length)
53 err = crypto_shash_update(shash, address, length); 53 err = crypto_shash_update(shash, address, length);
54 BUG_ON(err); 54 BUG_ON(err);
55 55
56 return *ctx; 56 ret = *ctx;
57 barrier_data(ctx);
58 return ret;
57} 59}
58 60
59EXPORT_SYMBOL(crc32c); 61EXPORT_SYMBOL(crc32c);
diff --git a/lib/test_bpf.c b/lib/test_bpf.c
index 889bc31785be..be88cbaadde3 100644
--- a/lib/test_bpf.c
+++ b/lib/test_bpf.c
@@ -4504,6 +4504,44 @@ static struct bpf_test tests[] = {
4504 { }, 4504 { },
4505 { { 0, 1 } }, 4505 { { 0, 1 } },
4506 }, 4506 },
4507 {
4508 "JMP_JSGE_K: Signed jump: value walk 1",
4509 .u.insns_int = {
4510 BPF_ALU32_IMM(BPF_MOV, R0, 0),
4511 BPF_LD_IMM64(R1, -3),
4512 BPF_JMP_IMM(BPF_JSGE, R1, 0, 6),
4513 BPF_ALU64_IMM(BPF_ADD, R1, 1),
4514 BPF_JMP_IMM(BPF_JSGE, R1, 0, 4),
4515 BPF_ALU64_IMM(BPF_ADD, R1, 1),
4516 BPF_JMP_IMM(BPF_JSGE, R1, 0, 2),
4517 BPF_ALU64_IMM(BPF_ADD, R1, 1),
4518 BPF_JMP_IMM(BPF_JSGE, R1, 0, 1),
4519 BPF_EXIT_INSN(), /* bad exit */
4520 BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */
4521 BPF_EXIT_INSN(),
4522 },
4523 INTERNAL,
4524 { },
4525 { { 0, 1 } },
4526 },
4527 {
4528 "JMP_JSGE_K: Signed jump: value walk 2",
4529 .u.insns_int = {
4530 BPF_ALU32_IMM(BPF_MOV, R0, 0),
4531 BPF_LD_IMM64(R1, -3),
4532 BPF_JMP_IMM(BPF_JSGE, R1, 0, 4),
4533 BPF_ALU64_IMM(BPF_ADD, R1, 2),
4534 BPF_JMP_IMM(BPF_JSGE, R1, 0, 2),
4535 BPF_ALU64_IMM(BPF_ADD, R1, 2),
4536 BPF_JMP_IMM(BPF_JSGE, R1, 0, 1),
4537 BPF_EXIT_INSN(), /* bad exit */
4538 BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */
4539 BPF_EXIT_INSN(),
4540 },
4541 INTERNAL,
4542 { },
4543 { { 0, 1 } },
4544 },
4507 /* BPF_JMP | BPF_JGT | BPF_K */ 4545 /* BPF_JMP | BPF_JGT | BPF_K */
4508 { 4546 {
4509 "JMP_JGT_K: if (3 > 2) return 1", 4547 "JMP_JGT_K: if (3 > 2) return 1",
diff --git a/mm/gup.c b/mm/gup.c
index d9e6fddcc51f..576c4df58882 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -387,11 +387,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
387 /* mlock all present pages, but do not fault in new pages */ 387 /* mlock all present pages, but do not fault in new pages */
388 if ((*flags & (FOLL_POPULATE | FOLL_MLOCK)) == FOLL_MLOCK) 388 if ((*flags & (FOLL_POPULATE | FOLL_MLOCK)) == FOLL_MLOCK)
389 return -ENOENT; 389 return -ENOENT;
390 /* For mm_populate(), just skip the stack guard page. */
391 if ((*flags & FOLL_POPULATE) &&
392 (stack_guard_page_start(vma, address) ||
393 stack_guard_page_end(vma, address + PAGE_SIZE)))
394 return -ENOENT;
395 if (*flags & FOLL_WRITE) 390 if (*flags & FOLL_WRITE)
396 fault_flags |= FAULT_FLAG_WRITE; 391 fault_flags |= FAULT_FLAG_WRITE;
397 if (*flags & FOLL_REMOTE) 392 if (*flags & FOLL_REMOTE)
@@ -407,12 +402,10 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
407 402
408 ret = handle_mm_fault(vma, address, fault_flags); 403 ret = handle_mm_fault(vma, address, fault_flags);
409 if (ret & VM_FAULT_ERROR) { 404 if (ret & VM_FAULT_ERROR) {
410 if (ret & VM_FAULT_OOM) 405 int err = vm_fault_to_errno(ret, *flags);
411 return -ENOMEM; 406
412 if (ret & (VM_FAULT_HWPOISON | VM_FAULT_HWPOISON_LARGE)) 407 if (err)
413 return *flags & FOLL_HWPOISON ? -EHWPOISON : -EFAULT; 408 return err;
414 if (ret & (VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV))
415 return -EFAULT;
416 BUG(); 409 BUG();
417 } 410 }
418 411
@@ -723,12 +716,10 @@ retry:
723 ret = handle_mm_fault(vma, address, fault_flags); 716 ret = handle_mm_fault(vma, address, fault_flags);
724 major |= ret & VM_FAULT_MAJOR; 717 major |= ret & VM_FAULT_MAJOR;
725 if (ret & VM_FAULT_ERROR) { 718 if (ret & VM_FAULT_ERROR) {
726 if (ret & VM_FAULT_OOM) 719 int err = vm_fault_to_errno(ret, 0);
727 return -ENOMEM; 720
728 if (ret & (VM_FAULT_HWPOISON | VM_FAULT_HWPOISON_LARGE)) 721 if (err)
729 return -EHWPOISON; 722 return err;
730 if (ret & (VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV))
731 return -EFAULT;
732 BUG(); 723 BUG();
733 } 724 }
734 725
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index a84909cf20d3..88c6167f194d 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1426,8 +1426,11 @@ int do_huge_pmd_numa_page(struct vm_fault *vmf, pmd_t pmd)
1426 */ 1426 */
1427 if (unlikely(pmd_trans_migrating(*vmf->pmd))) { 1427 if (unlikely(pmd_trans_migrating(*vmf->pmd))) {
1428 page = pmd_page(*vmf->pmd); 1428 page = pmd_page(*vmf->pmd);
1429 if (!get_page_unless_zero(page))
1430 goto out_unlock;
1429 spin_unlock(vmf->ptl); 1431 spin_unlock(vmf->ptl);
1430 wait_on_page_locked(page); 1432 wait_on_page_locked(page);
1433 put_page(page);
1431 goto out; 1434 goto out;
1432 } 1435 }
1433 1436
@@ -1459,9 +1462,12 @@ int do_huge_pmd_numa_page(struct vm_fault *vmf, pmd_t pmd)
1459 1462
1460 /* Migration could have started since the pmd_trans_migrating check */ 1463 /* Migration could have started since the pmd_trans_migrating check */
1461 if (!page_locked) { 1464 if (!page_locked) {
1465 page_nid = -1;
1466 if (!get_page_unless_zero(page))
1467 goto out_unlock;
1462 spin_unlock(vmf->ptl); 1468 spin_unlock(vmf->ptl);
1463 wait_on_page_locked(page); 1469 wait_on_page_locked(page);
1464 page_nid = -1; 1470 put_page(page);
1465 goto out; 1471 goto out;
1466 } 1472 }
1467 1473
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index e5828875f7bb..3eedb187e549 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -4170,6 +4170,11 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
4170 } 4170 }
4171 ret = hugetlb_fault(mm, vma, vaddr, fault_flags); 4171 ret = hugetlb_fault(mm, vma, vaddr, fault_flags);
4172 if (ret & VM_FAULT_ERROR) { 4172 if (ret & VM_FAULT_ERROR) {
4173 int err = vm_fault_to_errno(ret, flags);
4174
4175 if (err)
4176 return err;
4177
4173 remainder = 0; 4178 remainder = 0;
4174 break; 4179 break;
4175 } 4180 }
diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 945fd1ca49b5..df4ebdb2b10a 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -652,7 +652,6 @@ static void __collapse_huge_page_copy(pte_t *pte, struct page *page,
652 spin_unlock(ptl); 652 spin_unlock(ptl);
653 free_page_and_swap_cache(src_page); 653 free_page_and_swap_cache(src_page);
654 } 654 }
655 cond_resched();
656 } 655 }
657} 656}
658 657
diff --git a/mm/ksm.c b/mm/ksm.c
index d9fc0e456128..216184af0e19 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -1028,8 +1028,7 @@ static int try_to_merge_one_page(struct vm_area_struct *vma,
1028 goto out; 1028 goto out;
1029 1029
1030 if (PageTransCompound(page)) { 1030 if (PageTransCompound(page)) {
1031 err = split_huge_page(page); 1031 if (split_huge_page(page))
1032 if (err)
1033 goto out_unlock; 1032 goto out_unlock;
1034 } 1033 }
1035 1034
diff --git a/mm/memblock.c b/mm/memblock.c
index b049c9b2dba8..7b8a5db76a2f 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -1739,6 +1739,29 @@ static void __init_memblock memblock_dump(struct memblock_type *type)
1739 } 1739 }
1740} 1740}
1741 1741
1742extern unsigned long __init_memblock
1743memblock_reserved_memory_within(phys_addr_t start_addr, phys_addr_t end_addr)
1744{
1745 struct memblock_region *rgn;
1746 unsigned long size = 0;
1747 int idx;
1748
1749 for_each_memblock_type((&memblock.reserved), rgn) {
1750 phys_addr_t start, end;
1751
1752 if (rgn->base + rgn->size < start_addr)
1753 continue;
1754 if (rgn->base > end_addr)
1755 continue;
1756
1757 start = rgn->base;
1758 end = start + rgn->size;
1759 size += end - start;
1760 }
1761
1762 return size;
1763}
1764
1742void __init_memblock __memblock_dump_all(void) 1765void __init_memblock __memblock_dump_all(void)
1743{ 1766{
1744 pr_info("MEMBLOCK configuration:\n"); 1767 pr_info("MEMBLOCK configuration:\n");
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 2527dfeddb00..ecc183fd94f3 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -1184,7 +1184,10 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
1184 * page_remove_rmap() in try_to_unmap_one(). So to determine page status 1184 * page_remove_rmap() in try_to_unmap_one(). So to determine page status
1185 * correctly, we save a copy of the page flags at this time. 1185 * correctly, we save a copy of the page flags at this time.
1186 */ 1186 */
1187 page_flags = p->flags; 1187 if (PageHuge(p))
1188 page_flags = hpage->flags;
1189 else
1190 page_flags = p->flags;
1188 1191
1189 /* 1192 /*
1190 * unpoison always clear PG_hwpoison inside page lock 1193 * unpoison always clear PG_hwpoison inside page lock
@@ -1595,12 +1598,8 @@ static int soft_offline_huge_page(struct page *page, int flags)
1595 if (ret) { 1598 if (ret) {
1596 pr_info("soft offline: %#lx: migration failed %d, type %lx (%pGp)\n", 1599 pr_info("soft offline: %#lx: migration failed %d, type %lx (%pGp)\n",
1597 pfn, ret, page->flags, &page->flags); 1600 pfn, ret, page->flags, &page->flags);
1598 /* 1601 if (!list_empty(&pagelist))
1599 * We know that soft_offline_huge_page() tries to migrate 1602 putback_movable_pages(&pagelist);
1600 * only one hugepage pointed to by hpage, so we need not
1601 * run through the pagelist here.
1602 */
1603 putback_active_hugepage(hpage);
1604 if (ret > 0) 1603 if (ret > 0)
1605 ret = -EIO; 1604 ret = -EIO;
1606 } else { 1605 } else {
diff --git a/mm/memory.c b/mm/memory.c
index 6ff5d729ded0..bb11c474857e 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2855,40 +2855,6 @@ out_release:
2855} 2855}
2856 2856
2857/* 2857/*
2858 * This is like a special single-page "expand_{down|up}wards()",
2859 * except we must first make sure that 'address{-|+}PAGE_SIZE'
2860 * doesn't hit another vma.
2861 */
2862static inline int check_stack_guard_page(struct vm_area_struct *vma, unsigned long address)
2863{
2864 address &= PAGE_MASK;
2865 if ((vma->vm_flags & VM_GROWSDOWN) && address == vma->vm_start) {
2866 struct vm_area_struct *prev = vma->vm_prev;
2867
2868 /*
2869 * Is there a mapping abutting this one below?
2870 *
2871 * That's only ok if it's the same stack mapping
2872 * that has gotten split..
2873 */
2874 if (prev && prev->vm_end == address)
2875 return prev->vm_flags & VM_GROWSDOWN ? 0 : -ENOMEM;
2876
2877 return expand_downwards(vma, address - PAGE_SIZE);
2878 }
2879 if ((vma->vm_flags & VM_GROWSUP) && address + PAGE_SIZE == vma->vm_end) {
2880 struct vm_area_struct *next = vma->vm_next;
2881
2882 /* As VM_GROWSDOWN but s/below/above/ */
2883 if (next && next->vm_start == address + PAGE_SIZE)
2884 return next->vm_flags & VM_GROWSUP ? 0 : -ENOMEM;
2885
2886 return expand_upwards(vma, address + PAGE_SIZE);
2887 }
2888 return 0;
2889}
2890
2891/*
2892 * We enter with non-exclusive mmap_sem (to exclude vma changes, 2858 * We enter with non-exclusive mmap_sem (to exclude vma changes,
2893 * but allow concurrent faults), and pte mapped but not yet locked. 2859 * but allow concurrent faults), and pte mapped but not yet locked.
2894 * We return with mmap_sem still held, but pte unmapped and unlocked. 2860 * We return with mmap_sem still held, but pte unmapped and unlocked.
@@ -2904,10 +2870,6 @@ static int do_anonymous_page(struct vm_fault *vmf)
2904 if (vma->vm_flags & VM_SHARED) 2870 if (vma->vm_flags & VM_SHARED)
2905 return VM_FAULT_SIGBUS; 2871 return VM_FAULT_SIGBUS;
2906 2872
2907 /* Check if we need to add a guard page to the stack */
2908 if (check_stack_guard_page(vma, vmf->address) < 0)
2909 return VM_FAULT_SIGSEGV;
2910
2911 /* 2873 /*
2912 * Use pte_alloc() instead of pte_alloc_map(). We can't run 2874 * Use pte_alloc() instead of pte_alloc_map(). We can't run
2913 * pte_offset_map() on pmds where a huge pmd might be created 2875 * pte_offset_map() on pmds where a huge pmd might be created
@@ -3029,6 +2991,17 @@ static int __do_fault(struct vm_fault *vmf)
3029 return ret; 2991 return ret;
3030} 2992}
3031 2993
2994/*
2995 * The ordering of these checks is important for pmds with _PAGE_DEVMAP set.
2996 * If we check pmd_trans_unstable() first we will trip the bad_pmd() check
2997 * inside of pmd_none_or_trans_huge_or_clear_bad(). This will end up correctly
2998 * returning 1 but not before it spams dmesg with the pmd_clear_bad() output.
2999 */
3000static int pmd_devmap_trans_unstable(pmd_t *pmd)
3001{
3002 return pmd_devmap(*pmd) || pmd_trans_unstable(pmd);
3003}
3004
3032static int pte_alloc_one_map(struct vm_fault *vmf) 3005static int pte_alloc_one_map(struct vm_fault *vmf)
3033{ 3006{
3034 struct vm_area_struct *vma = vmf->vma; 3007 struct vm_area_struct *vma = vmf->vma;
@@ -3052,18 +3025,27 @@ static int pte_alloc_one_map(struct vm_fault *vmf)
3052map_pte: 3025map_pte:
3053 /* 3026 /*
3054 * If a huge pmd materialized under us just retry later. Use 3027 * If a huge pmd materialized under us just retry later. Use
3055 * pmd_trans_unstable() instead of pmd_trans_huge() to ensure the pmd 3028 * pmd_trans_unstable() via pmd_devmap_trans_unstable() instead of
3056 * didn't become pmd_trans_huge under us and then back to pmd_none, as 3029 * pmd_trans_huge() to ensure the pmd didn't become pmd_trans_huge
3057 * a result of MADV_DONTNEED running immediately after a huge pmd fault 3030 * under us and then back to pmd_none, as a result of MADV_DONTNEED
3058 * in a different thread of this mm, in turn leading to a misleading 3031 * running immediately after a huge pmd fault in a different thread of
3059 * pmd_trans_huge() retval. All we have to ensure is that it is a 3032 * this mm, in turn leading to a misleading pmd_trans_huge() retval.
3060 * regular pmd that we can walk with pte_offset_map() and we can do that 3033 * All we have to ensure is that it is a regular pmd that we can walk
3061 * through an atomic read in C, which is what pmd_trans_unstable() 3034 * with pte_offset_map() and we can do that through an atomic read in
3062 * provides. 3035 * C, which is what pmd_trans_unstable() provides.
3063 */ 3036 */
3064 if (pmd_trans_unstable(vmf->pmd) || pmd_devmap(*vmf->pmd)) 3037 if (pmd_devmap_trans_unstable(vmf->pmd))
3065 return VM_FAULT_NOPAGE; 3038 return VM_FAULT_NOPAGE;
3066 3039
3040 /*
3041 * At this point we know that our vmf->pmd points to a page of ptes
3042 * and it cannot become pmd_none(), pmd_devmap() or pmd_trans_huge()
3043 * for the duration of the fault. If a racing MADV_DONTNEED runs and
3044 * we zap the ptes pointed to by our vmf->pmd, the vmf->ptl will still
3045 * be valid and we will re-check to make sure the vmf->pte isn't
3046 * pte_none() under vmf->ptl protection when we return to
3047 * alloc_set_pte().
3048 */
3067 vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address, 3049 vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address,
3068 &vmf->ptl); 3050 &vmf->ptl);
3069 return 0; 3051 return 0;
@@ -3690,7 +3672,7 @@ static int handle_pte_fault(struct vm_fault *vmf)
3690 vmf->pte = NULL; 3672 vmf->pte = NULL;
3691 } else { 3673 } else {
3692 /* See comment in pte_alloc_one_map() */ 3674 /* See comment in pte_alloc_one_map() */
3693 if (pmd_trans_unstable(vmf->pmd) || pmd_devmap(*vmf->pmd)) 3675 if (pmd_devmap_trans_unstable(vmf->pmd))
3694 return 0; 3676 return 0;
3695 /* 3677 /*
3696 * A regular pmd is established and it can't morph into a huge 3678 * A regular pmd is established and it can't morph into a huge
diff --git a/mm/mlock.c b/mm/mlock.c
index c483c5c20b4b..b562b5523a65 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -284,7 +284,7 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
284{ 284{
285 int i; 285 int i;
286 int nr = pagevec_count(pvec); 286 int nr = pagevec_count(pvec);
287 int delta_munlocked; 287 int delta_munlocked = -nr;
288 struct pagevec pvec_putback; 288 struct pagevec pvec_putback;
289 int pgrescued = 0; 289 int pgrescued = 0;
290 290
@@ -304,6 +304,8 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
304 continue; 304 continue;
305 else 305 else
306 __munlock_isolation_failed(page); 306 __munlock_isolation_failed(page);
307 } else {
308 delta_munlocked++;
307 } 309 }
308 310
309 /* 311 /*
@@ -315,7 +317,6 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
315 pagevec_add(&pvec_putback, pvec->pages[i]); 317 pagevec_add(&pvec_putback, pvec->pages[i]);
316 pvec->pages[i] = NULL; 318 pvec->pages[i] = NULL;
317 } 319 }
318 delta_munlocked = -nr + pagevec_count(&pvec_putback);
319 __mod_zone_page_state(zone, NR_MLOCK, delta_munlocked); 320 __mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
320 spin_unlock_irq(zone_lru_lock(zone)); 321 spin_unlock_irq(zone_lru_lock(zone));
321 322
diff --git a/mm/mmap.c b/mm/mmap.c
index f82741e199c0..a5e3dcd75e79 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -183,6 +183,7 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
183 unsigned long retval; 183 unsigned long retval;
184 unsigned long newbrk, oldbrk; 184 unsigned long newbrk, oldbrk;
185 struct mm_struct *mm = current->mm; 185 struct mm_struct *mm = current->mm;
186 struct vm_area_struct *next;
186 unsigned long min_brk; 187 unsigned long min_brk;
187 bool populate; 188 bool populate;
188 LIST_HEAD(uf); 189 LIST_HEAD(uf);
@@ -229,7 +230,8 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
229 } 230 }
230 231
231 /* Check against existing mmap mappings. */ 232 /* Check against existing mmap mappings. */
232 if (find_vma_intersection(mm, oldbrk, newbrk+PAGE_SIZE)) 233 next = find_vma(mm, oldbrk);
234 if (next && newbrk + PAGE_SIZE > vm_start_gap(next))
233 goto out; 235 goto out;
234 236
235 /* Ok, looks good - let it rip. */ 237 /* Ok, looks good - let it rip. */
@@ -253,10 +255,22 @@ out:
253 255
254static long vma_compute_subtree_gap(struct vm_area_struct *vma) 256static long vma_compute_subtree_gap(struct vm_area_struct *vma)
255{ 257{
256 unsigned long max, subtree_gap; 258 unsigned long max, prev_end, subtree_gap;
257 max = vma->vm_start; 259
258 if (vma->vm_prev) 260 /*
259 max -= vma->vm_prev->vm_end; 261 * Note: in the rare case of a VM_GROWSDOWN above a VM_GROWSUP, we
262 * allow two stack_guard_gaps between them here, and when choosing
263 * an unmapped area; whereas when expanding we only require one.
264 * That's a little inconsistent, but keeps the code here simpler.
265 */
266 max = vm_start_gap(vma);
267 if (vma->vm_prev) {
268 prev_end = vm_end_gap(vma->vm_prev);
269 if (max > prev_end)
270 max -= prev_end;
271 else
272 max = 0;
273 }
260 if (vma->vm_rb.rb_left) { 274 if (vma->vm_rb.rb_left) {
261 subtree_gap = rb_entry(vma->vm_rb.rb_left, 275 subtree_gap = rb_entry(vma->vm_rb.rb_left,
262 struct vm_area_struct, vm_rb)->rb_subtree_gap; 276 struct vm_area_struct, vm_rb)->rb_subtree_gap;
@@ -352,7 +366,7 @@ static void validate_mm(struct mm_struct *mm)
352 anon_vma_unlock_read(anon_vma); 366 anon_vma_unlock_read(anon_vma);
353 } 367 }
354 368
355 highest_address = vma->vm_end; 369 highest_address = vm_end_gap(vma);
356 vma = vma->vm_next; 370 vma = vma->vm_next;
357 i++; 371 i++;
358 } 372 }
@@ -541,7 +555,7 @@ void __vma_link_rb(struct mm_struct *mm, struct vm_area_struct *vma,
541 if (vma->vm_next) 555 if (vma->vm_next)
542 vma_gap_update(vma->vm_next); 556 vma_gap_update(vma->vm_next);
543 else 557 else
544 mm->highest_vm_end = vma->vm_end; 558 mm->highest_vm_end = vm_end_gap(vma);
545 559
546 /* 560 /*
547 * vma->vm_prev wasn't known when we followed the rbtree to find the 561 * vma->vm_prev wasn't known when we followed the rbtree to find the
@@ -856,7 +870,7 @@ again:
856 vma_gap_update(vma); 870 vma_gap_update(vma);
857 if (end_changed) { 871 if (end_changed) {
858 if (!next) 872 if (!next)
859 mm->highest_vm_end = end; 873 mm->highest_vm_end = vm_end_gap(vma);
860 else if (!adjust_next) 874 else if (!adjust_next)
861 vma_gap_update(next); 875 vma_gap_update(next);
862 } 876 }
@@ -941,7 +955,7 @@ again:
941 * mm->highest_vm_end doesn't need any update 955 * mm->highest_vm_end doesn't need any update
942 * in remove_next == 1 case. 956 * in remove_next == 1 case.
943 */ 957 */
944 VM_WARN_ON(mm->highest_vm_end != end); 958 VM_WARN_ON(mm->highest_vm_end != vm_end_gap(vma));
945 } 959 }
946 } 960 }
947 if (insert && file) 961 if (insert && file)
@@ -1787,7 +1801,7 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
1787 1801
1788 while (true) { 1802 while (true) {
1789 /* Visit left subtree if it looks promising */ 1803 /* Visit left subtree if it looks promising */
1790 gap_end = vma->vm_start; 1804 gap_end = vm_start_gap(vma);
1791 if (gap_end >= low_limit && vma->vm_rb.rb_left) { 1805 if (gap_end >= low_limit && vma->vm_rb.rb_left) {
1792 struct vm_area_struct *left = 1806 struct vm_area_struct *left =
1793 rb_entry(vma->vm_rb.rb_left, 1807 rb_entry(vma->vm_rb.rb_left,
@@ -1798,12 +1812,13 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
1798 } 1812 }
1799 } 1813 }
1800 1814
1801 gap_start = vma->vm_prev ? vma->vm_prev->vm_end : 0; 1815 gap_start = vma->vm_prev ? vm_end_gap(vma->vm_prev) : 0;
1802check_current: 1816check_current:
1803 /* Check if current node has a suitable gap */ 1817 /* Check if current node has a suitable gap */
1804 if (gap_start > high_limit) 1818 if (gap_start > high_limit)
1805 return -ENOMEM; 1819 return -ENOMEM;
1806 if (gap_end >= low_limit && gap_end - gap_start >= length) 1820 if (gap_end >= low_limit &&
1821 gap_end > gap_start && gap_end - gap_start >= length)
1807 goto found; 1822 goto found;
1808 1823
1809 /* Visit right subtree if it looks promising */ 1824 /* Visit right subtree if it looks promising */
@@ -1825,8 +1840,8 @@ check_current:
1825 vma = rb_entry(rb_parent(prev), 1840 vma = rb_entry(rb_parent(prev),
1826 struct vm_area_struct, vm_rb); 1841 struct vm_area_struct, vm_rb);
1827 if (prev == vma->vm_rb.rb_left) { 1842 if (prev == vma->vm_rb.rb_left) {
1828 gap_start = vma->vm_prev->vm_end; 1843 gap_start = vm_end_gap(vma->vm_prev);
1829 gap_end = vma->vm_start; 1844 gap_end = vm_start_gap(vma);
1830 goto check_current; 1845 goto check_current;
1831 } 1846 }
1832 } 1847 }
@@ -1890,7 +1905,7 @@ unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info)
1890 1905
1891 while (true) { 1906 while (true) {
1892 /* Visit right subtree if it looks promising */ 1907 /* Visit right subtree if it looks promising */
1893 gap_start = vma->vm_prev ? vma->vm_prev->vm_end : 0; 1908 gap_start = vma->vm_prev ? vm_end_gap(vma->vm_prev) : 0;
1894 if (gap_start <= high_limit && vma->vm_rb.rb_right) { 1909 if (gap_start <= high_limit && vma->vm_rb.rb_right) {
1895 struct vm_area_struct *right = 1910 struct vm_area_struct *right =
1896 rb_entry(vma->vm_rb.rb_right, 1911 rb_entry(vma->vm_rb.rb_right,
@@ -1903,10 +1918,11 @@ unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info)
1903 1918
1904check_current: 1919check_current:
1905 /* Check if current node has a suitable gap */ 1920 /* Check if current node has a suitable gap */
1906 gap_end = vma->vm_start; 1921 gap_end = vm_start_gap(vma);
1907 if (gap_end < low_limit) 1922 if (gap_end < low_limit)
1908 return -ENOMEM; 1923 return -ENOMEM;
1909 if (gap_start <= high_limit && gap_end - gap_start >= length) 1924 if (gap_start <= high_limit &&
1925 gap_end > gap_start && gap_end - gap_start >= length)
1910 goto found; 1926 goto found;
1911 1927
1912 /* Visit left subtree if it looks promising */ 1928 /* Visit left subtree if it looks promising */
@@ -1929,7 +1945,7 @@ check_current:
1929 struct vm_area_struct, vm_rb); 1945 struct vm_area_struct, vm_rb);
1930 if (prev == vma->vm_rb.rb_right) { 1946 if (prev == vma->vm_rb.rb_right) {
1931 gap_start = vma->vm_prev ? 1947 gap_start = vma->vm_prev ?
1932 vma->vm_prev->vm_end : 0; 1948 vm_end_gap(vma->vm_prev) : 0;
1933 goto check_current; 1949 goto check_current;
1934 } 1950 }
1935 } 1951 }
@@ -1967,7 +1983,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
1967 unsigned long len, unsigned long pgoff, unsigned long flags) 1983 unsigned long len, unsigned long pgoff, unsigned long flags)
1968{ 1984{
1969 struct mm_struct *mm = current->mm; 1985 struct mm_struct *mm = current->mm;
1970 struct vm_area_struct *vma; 1986 struct vm_area_struct *vma, *prev;
1971 struct vm_unmapped_area_info info; 1987 struct vm_unmapped_area_info info;
1972 1988
1973 if (len > TASK_SIZE - mmap_min_addr) 1989 if (len > TASK_SIZE - mmap_min_addr)
@@ -1978,9 +1994,10 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
1978 1994
1979 if (addr) { 1995 if (addr) {
1980 addr = PAGE_ALIGN(addr); 1996 addr = PAGE_ALIGN(addr);
1981 vma = find_vma(mm, addr); 1997 vma = find_vma_prev(mm, addr, &prev);
1982 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr && 1998 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
1983 (!vma || addr + len <= vma->vm_start)) 1999 (!vma || addr + len <= vm_start_gap(vma)) &&
2000 (!prev || addr >= vm_end_gap(prev)))
1984 return addr; 2001 return addr;
1985 } 2002 }
1986 2003
@@ -2003,7 +2020,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
2003 const unsigned long len, const unsigned long pgoff, 2020 const unsigned long len, const unsigned long pgoff,
2004 const unsigned long flags) 2021 const unsigned long flags)
2005{ 2022{
2006 struct vm_area_struct *vma; 2023 struct vm_area_struct *vma, *prev;
2007 struct mm_struct *mm = current->mm; 2024 struct mm_struct *mm = current->mm;
2008 unsigned long addr = addr0; 2025 unsigned long addr = addr0;
2009 struct vm_unmapped_area_info info; 2026 struct vm_unmapped_area_info info;
@@ -2018,9 +2035,10 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
2018 /* requesting a specific address */ 2035 /* requesting a specific address */
2019 if (addr) { 2036 if (addr) {
2020 addr = PAGE_ALIGN(addr); 2037 addr = PAGE_ALIGN(addr);
2021 vma = find_vma(mm, addr); 2038 vma = find_vma_prev(mm, addr, &prev);
2022 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr && 2039 if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
2023 (!vma || addr + len <= vma->vm_start)) 2040 (!vma || addr + len <= vm_start_gap(vma)) &&
2041 (!prev || addr >= vm_end_gap(prev)))
2024 return addr; 2042 return addr;
2025 } 2043 }
2026 2044
@@ -2155,21 +2173,19 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr,
2155 * update accounting. This is shared with both the 2173 * update accounting. This is shared with both the
2156 * grow-up and grow-down cases. 2174 * grow-up and grow-down cases.
2157 */ 2175 */
2158static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, unsigned long grow) 2176static int acct_stack_growth(struct vm_area_struct *vma,
2177 unsigned long size, unsigned long grow)
2159{ 2178{
2160 struct mm_struct *mm = vma->vm_mm; 2179 struct mm_struct *mm = vma->vm_mm;
2161 struct rlimit *rlim = current->signal->rlim; 2180 struct rlimit *rlim = current->signal->rlim;
2162 unsigned long new_start, actual_size; 2181 unsigned long new_start;
2163 2182
2164 /* address space limit tests */ 2183 /* address space limit tests */
2165 if (!may_expand_vm(mm, vma->vm_flags, grow)) 2184 if (!may_expand_vm(mm, vma->vm_flags, grow))
2166 return -ENOMEM; 2185 return -ENOMEM;
2167 2186
2168 /* Stack limit test */ 2187 /* Stack limit test */
2169 actual_size = size; 2188 if (size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur))
2170 if (size && (vma->vm_flags & (VM_GROWSUP | VM_GROWSDOWN)))
2171 actual_size -= PAGE_SIZE;
2172 if (actual_size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur))
2173 return -ENOMEM; 2189 return -ENOMEM;
2174 2190
2175 /* mlock limit tests */ 2191 /* mlock limit tests */
@@ -2207,16 +2223,32 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
2207int expand_upwards(struct vm_area_struct *vma, unsigned long address) 2223int expand_upwards(struct vm_area_struct *vma, unsigned long address)
2208{ 2224{
2209 struct mm_struct *mm = vma->vm_mm; 2225 struct mm_struct *mm = vma->vm_mm;
2226 struct vm_area_struct *next;
2227 unsigned long gap_addr;
2210 int error = 0; 2228 int error = 0;
2211 2229
2212 if (!(vma->vm_flags & VM_GROWSUP)) 2230 if (!(vma->vm_flags & VM_GROWSUP))
2213 return -EFAULT; 2231 return -EFAULT;
2214 2232
2215 /* Guard against wrapping around to address 0. */ 2233 /* Guard against exceeding limits of the address space. */
2216 if (address < PAGE_ALIGN(address+4)) 2234 address &= PAGE_MASK;
2217 address = PAGE_ALIGN(address+4); 2235 if (address >= TASK_SIZE)
2218 else
2219 return -ENOMEM; 2236 return -ENOMEM;
2237 address += PAGE_SIZE;
2238
2239 /* Enforce stack_guard_gap */
2240 gap_addr = address + stack_guard_gap;
2241
2242 /* Guard against overflow */
2243 if (gap_addr < address || gap_addr > TASK_SIZE)
2244 gap_addr = TASK_SIZE;
2245
2246 next = vma->vm_next;
2247 if (next && next->vm_start < gap_addr) {
2248 if (!(next->vm_flags & VM_GROWSUP))
2249 return -ENOMEM;
2250 /* Check that both stack segments have the same anon_vma? */
2251 }
2220 2252
2221 /* We must make sure the anon_vma is allocated. */ 2253 /* We must make sure the anon_vma is allocated. */
2222 if (unlikely(anon_vma_prepare(vma))) 2254 if (unlikely(anon_vma_prepare(vma)))
@@ -2261,7 +2293,7 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
2261 if (vma->vm_next) 2293 if (vma->vm_next)
2262 vma_gap_update(vma->vm_next); 2294 vma_gap_update(vma->vm_next);
2263 else 2295 else
2264 mm->highest_vm_end = address; 2296 mm->highest_vm_end = vm_end_gap(vma);
2265 spin_unlock(&mm->page_table_lock); 2297 spin_unlock(&mm->page_table_lock);
2266 2298
2267 perf_event_mmap(vma); 2299 perf_event_mmap(vma);
@@ -2282,6 +2314,8 @@ int expand_downwards(struct vm_area_struct *vma,
2282 unsigned long address) 2314 unsigned long address)
2283{ 2315{
2284 struct mm_struct *mm = vma->vm_mm; 2316 struct mm_struct *mm = vma->vm_mm;
2317 struct vm_area_struct *prev;
2318 unsigned long gap_addr;
2285 int error; 2319 int error;
2286 2320
2287 address &= PAGE_MASK; 2321 address &= PAGE_MASK;
@@ -2289,6 +2323,17 @@ int expand_downwards(struct vm_area_struct *vma,
2289 if (error) 2323 if (error)
2290 return error; 2324 return error;
2291 2325
2326 /* Enforce stack_guard_gap */
2327 gap_addr = address - stack_guard_gap;
2328 if (gap_addr > address)
2329 return -ENOMEM;
2330 prev = vma->vm_prev;
2331 if (prev && prev->vm_end > gap_addr) {
2332 if (!(prev->vm_flags & VM_GROWSDOWN))
2333 return -ENOMEM;
2334 /* Check that both stack segments have the same anon_vma? */
2335 }
2336
2292 /* We must make sure the anon_vma is allocated. */ 2337 /* We must make sure the anon_vma is allocated. */
2293 if (unlikely(anon_vma_prepare(vma))) 2338 if (unlikely(anon_vma_prepare(vma)))
2294 return -ENOMEM; 2339 return -ENOMEM;
@@ -2343,28 +2388,25 @@ int expand_downwards(struct vm_area_struct *vma,
2343 return error; 2388 return error;
2344} 2389}
2345 2390
2346/* 2391/* enforced gap between the expanding stack and other mappings. */
2347 * Note how expand_stack() refuses to expand the stack all the way to 2392unsigned long stack_guard_gap = 256UL<<PAGE_SHIFT;
2348 * abut the next virtual mapping, *unless* that mapping itself is also 2393
2349 * a stack mapping. We want to leave room for a guard page, after all 2394static int __init cmdline_parse_stack_guard_gap(char *p)
2350 * (the guard page itself is not added here, that is done by the 2395{
2351 * actual page faulting logic) 2396 unsigned long val;
2352 * 2397 char *endptr;
2353 * This matches the behavior of the guard page logic (see mm/memory.c: 2398
2354 * check_stack_guard_page()), which only allows the guard page to be 2399 val = simple_strtoul(p, &endptr, 10);
2355 * removed under these circumstances. 2400 if (!*endptr)
2356 */ 2401 stack_guard_gap = val << PAGE_SHIFT;
2402
2403 return 0;
2404}
2405__setup("stack_guard_gap=", cmdline_parse_stack_guard_gap);
2406
2357#ifdef CONFIG_STACK_GROWSUP 2407#ifdef CONFIG_STACK_GROWSUP
2358int expand_stack(struct vm_area_struct *vma, unsigned long address) 2408int expand_stack(struct vm_area_struct *vma, unsigned long address)
2359{ 2409{
2360 struct vm_area_struct *next;
2361
2362 address &= PAGE_MASK;
2363 next = vma->vm_next;
2364 if (next && next->vm_start == address + PAGE_SIZE) {
2365 if (!(next->vm_flags & VM_GROWSUP))
2366 return -ENOMEM;
2367 }
2368 return expand_upwards(vma, address); 2410 return expand_upwards(vma, address);
2369} 2411}
2370 2412
@@ -2386,14 +2428,6 @@ find_extend_vma(struct mm_struct *mm, unsigned long addr)
2386#else 2428#else
2387int expand_stack(struct vm_area_struct *vma, unsigned long address) 2429int expand_stack(struct vm_area_struct *vma, unsigned long address)
2388{ 2430{
2389 struct vm_area_struct *prev;
2390
2391 address &= PAGE_MASK;
2392 prev = vma->vm_prev;
2393 if (prev && prev->vm_end == address) {
2394 if (!(prev->vm_flags & VM_GROWSDOWN))
2395 return -ENOMEM;
2396 }
2397 return expand_downwards(vma, address); 2431 return expand_downwards(vma, address);
2398} 2432}
2399 2433
@@ -2491,7 +2525,7 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma,
2491 vma->vm_prev = prev; 2525 vma->vm_prev = prev;
2492 vma_gap_update(vma); 2526 vma_gap_update(vma);
2493 } else 2527 } else
2494 mm->highest_vm_end = prev ? prev->vm_end : 0; 2528 mm->highest_vm_end = prev ? vm_end_gap(prev) : 0;
2495 tail_vma->vm_next = NULL; 2529 tail_vma->vm_next = NULL;
2496 2530
2497 /* Kill the cache */ 2531 /* Kill the cache */
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index f9e450c6b6e4..2302f250d6b1 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -292,6 +292,26 @@ int page_group_by_mobility_disabled __read_mostly;
292#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT 292#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
293static inline void reset_deferred_meminit(pg_data_t *pgdat) 293static inline void reset_deferred_meminit(pg_data_t *pgdat)
294{ 294{
295 unsigned long max_initialise;
296 unsigned long reserved_lowmem;
297
298 /*
299 * Initialise at least 2G of a node but also take into account that
300 * two large system hashes that can take up 1GB for 0.25TB/node.
301 */
302 max_initialise = max(2UL << (30 - PAGE_SHIFT),
303 (pgdat->node_spanned_pages >> 8));
304
305 /*
306 * Compensate the all the memblock reservations (e.g. crash kernel)
307 * from the initial estimation to make sure we will initialize enough
308 * memory to boot.
309 */
310 reserved_lowmem = memblock_reserved_memory_within(pgdat->node_start_pfn,
311 pgdat->node_start_pfn + max_initialise);
312 max_initialise += reserved_lowmem;
313
314 pgdat->static_init_size = min(max_initialise, pgdat->node_spanned_pages);
295 pgdat->first_deferred_pfn = ULONG_MAX; 315 pgdat->first_deferred_pfn = ULONG_MAX;
296} 316}
297 317
@@ -314,20 +334,11 @@ static inline bool update_defer_init(pg_data_t *pgdat,
314 unsigned long pfn, unsigned long zone_end, 334 unsigned long pfn, unsigned long zone_end,
315 unsigned long *nr_initialised) 335 unsigned long *nr_initialised)
316{ 336{
317 unsigned long max_initialise;
318
319 /* Always populate low zones for address-contrained allocations */ 337 /* Always populate low zones for address-contrained allocations */
320 if (zone_end < pgdat_end_pfn(pgdat)) 338 if (zone_end < pgdat_end_pfn(pgdat))
321 return true; 339 return true;
322 /*
323 * Initialise at least 2G of a node but also take into account that
324 * two large system hashes that can take up 1GB for 0.25TB/node.
325 */
326 max_initialise = max(2UL << (30 - PAGE_SHIFT),
327 (pgdat->node_spanned_pages >> 8));
328
329 (*nr_initialised)++; 340 (*nr_initialised)++;
330 if ((*nr_initialised > max_initialise) && 341 if ((*nr_initialised > pgdat->static_init_size) &&
331 (pfn & (PAGES_PER_SECTION - 1)) == 0) { 342 (pfn & (PAGES_PER_SECTION - 1)) == 0) {
332 pgdat->first_deferred_pfn = pfn; 343 pgdat->first_deferred_pfn = pfn;
333 return false; 344 return false;
@@ -3870,7 +3881,9 @@ retry:
3870 goto got_pg; 3881 goto got_pg;
3871 3882
3872 /* Avoid allocations with no watermarks from looping endlessly */ 3883 /* Avoid allocations with no watermarks from looping endlessly */
3873 if (test_thread_flag(TIF_MEMDIE)) 3884 if (test_thread_flag(TIF_MEMDIE) &&
3885 (alloc_flags == ALLOC_NO_WATERMARKS ||
3886 (gfp_mask & __GFP_NOMEMALLOC)))
3874 goto nopage; 3887 goto nopage;
3875 3888
3876 /* Retry as long as the OOM killer is making progress */ 3889 /* Retry as long as the OOM killer is making progress */
@@ -6136,7 +6149,6 @@ void __paginginit free_area_init_node(int nid, unsigned long *zones_size,
6136 /* pg_data_t should be reset to zero when it's allocated */ 6149 /* pg_data_t should be reset to zero when it's allocated */
6137 WARN_ON(pgdat->nr_zones || pgdat->kswapd_classzone_idx); 6150 WARN_ON(pgdat->nr_zones || pgdat->kswapd_classzone_idx);
6138 6151
6139 reset_deferred_meminit(pgdat);
6140 pgdat->node_id = nid; 6152 pgdat->node_id = nid;
6141 pgdat->node_start_pfn = node_start_pfn; 6153 pgdat->node_start_pfn = node_start_pfn;
6142 pgdat->per_cpu_nodestats = NULL; 6154 pgdat->per_cpu_nodestats = NULL;
@@ -6158,6 +6170,7 @@ void __paginginit free_area_init_node(int nid, unsigned long *zones_size,
6158 (unsigned long)pgdat->node_mem_map); 6170 (unsigned long)pgdat->node_mem_map);
6159#endif 6171#endif
6160 6172
6173 reset_deferred_meminit(pgdat);
6161 free_area_init_core(pgdat); 6174 free_area_init_core(pgdat);
6162} 6175}
6163 6176
diff --git a/mm/slub.c b/mm/slub.c
index 57e5156f02be..8addc535bcdc 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -5512,6 +5512,7 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s)
5512 char mbuf[64]; 5512 char mbuf[64];
5513 char *buf; 5513 char *buf;
5514 struct slab_attribute *attr = to_slab_attr(slab_attrs[i]); 5514 struct slab_attribute *attr = to_slab_attr(slab_attrs[i]);
5515 ssize_t len;
5515 5516
5516 if (!attr || !attr->store || !attr->show) 5517 if (!attr || !attr->store || !attr->show)
5517 continue; 5518 continue;
@@ -5536,8 +5537,9 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s)
5536 buf = buffer; 5537 buf = buffer;
5537 } 5538 }
5538 5539
5539 attr->show(root_cache, buf); 5540 len = attr->show(root_cache, buf);
5540 attr->store(s, buf, strlen(buf)); 5541 if (len > 0)
5542 attr->store(s, buf, len);
5541 } 5543 }
5542 5544
5543 if (buffer) 5545 if (buffer)
@@ -5623,6 +5625,28 @@ static char *create_unique_id(struct kmem_cache *s)
5623 return name; 5625 return name;
5624} 5626}
5625 5627
5628static void sysfs_slab_remove_workfn(struct work_struct *work)
5629{
5630 struct kmem_cache *s =
5631 container_of(work, struct kmem_cache, kobj_remove_work);
5632
5633 if (!s->kobj.state_in_sysfs)
5634 /*
5635 * For a memcg cache, this may be called during
5636 * deactivation and again on shutdown. Remove only once.
5637 * A cache is never shut down before deactivation is
5638 * complete, so no need to worry about synchronization.
5639 */
5640 return;
5641
5642#ifdef CONFIG_MEMCG
5643 kset_unregister(s->memcg_kset);
5644#endif
5645 kobject_uevent(&s->kobj, KOBJ_REMOVE);
5646 kobject_del(&s->kobj);
5647 kobject_put(&s->kobj);
5648}
5649
5626static int sysfs_slab_add(struct kmem_cache *s) 5650static int sysfs_slab_add(struct kmem_cache *s)
5627{ 5651{
5628 int err; 5652 int err;
@@ -5630,6 +5654,8 @@ static int sysfs_slab_add(struct kmem_cache *s)
5630 struct kset *kset = cache_kset(s); 5654 struct kset *kset = cache_kset(s);
5631 int unmergeable = slab_unmergeable(s); 5655 int unmergeable = slab_unmergeable(s);
5632 5656
5657 INIT_WORK(&s->kobj_remove_work, sysfs_slab_remove_workfn);
5658
5633 if (!kset) { 5659 if (!kset) {
5634 kobject_init(&s->kobj, &slab_ktype); 5660 kobject_init(&s->kobj, &slab_ktype);
5635 return 0; 5661 return 0;
@@ -5693,20 +5719,8 @@ static void sysfs_slab_remove(struct kmem_cache *s)
5693 */ 5719 */
5694 return; 5720 return;
5695 5721
5696 if (!s->kobj.state_in_sysfs) 5722 kobject_get(&s->kobj);
5697 /* 5723 schedule_work(&s->kobj_remove_work);
5698 * For a memcg cache, this may be called during
5699 * deactivation and again on shutdown. Remove only once.
5700 * A cache is never shut down before deactivation is
5701 * complete, so no need to worry about synchronization.
5702 */
5703 return;
5704
5705#ifdef CONFIG_MEMCG
5706 kset_unregister(s->memcg_kset);
5707#endif
5708 kobject_uevent(&s->kobj, KOBJ_REMOVE);
5709 kobject_del(&s->kobj);
5710} 5724}
5711 5725
5712void sysfs_slab_release(struct kmem_cache *s) 5726void sysfs_slab_release(struct kmem_cache *s)
diff --git a/mm/swap_cgroup.c b/mm/swap_cgroup.c
index ac6318a064d3..3405b4ee1757 100644
--- a/mm/swap_cgroup.c
+++ b/mm/swap_cgroup.c
@@ -48,6 +48,9 @@ static int swap_cgroup_prepare(int type)
48 if (!page) 48 if (!page)
49 goto not_enough_page; 49 goto not_enough_page;
50 ctrl->map[idx] = page; 50 ctrl->map[idx] = page;
51
52 if (!(idx % SWAP_CLUSTER_MAX))
53 cond_resched();
51 } 54 }
52 return 0; 55 return 0;
53not_enough_page: 56not_enough_page:
diff --git a/mm/util.c b/mm/util.c
index 464df3489903..26be6407abd7 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -357,8 +357,11 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node)
357 WARN_ON_ONCE((flags & GFP_KERNEL) != GFP_KERNEL); 357 WARN_ON_ONCE((flags & GFP_KERNEL) != GFP_KERNEL);
358 358
359 /* 359 /*
360 * Make sure that larger requests are not too disruptive - no OOM 360 * We want to attempt a large physically contiguous block first because
361 * killer and no allocation failure warnings as we have a fallback 361 * it is less likely to fragment multiple larger blocks and therefore
362 * contribute to a long term fragmentation less than vmalloc fallback.
363 * However make sure that larger requests are not too disruptive - no
364 * OOM killer and no allocation failure warnings as we have a fallback.
362 */ 365 */
363 if (size > PAGE_SIZE) { 366 if (size > PAGE_SIZE) {
364 kmalloc_flags |= __GFP_NOWARN; 367 kmalloc_flags |= __GFP_NOWARN;
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 34a1c3e46ed7..ecc97f74ab18 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -287,10 +287,21 @@ struct page *vmalloc_to_page(const void *vmalloc_addr)
287 if (p4d_none(*p4d)) 287 if (p4d_none(*p4d))
288 return NULL; 288 return NULL;
289 pud = pud_offset(p4d, addr); 289 pud = pud_offset(p4d, addr);
290 if (pud_none(*pud)) 290
291 /*
292 * Don't dereference bad PUD or PMD (below) entries. This will also
293 * identify huge mappings, which we may encounter on architectures
294 * that define CONFIG_HAVE_ARCH_HUGE_VMAP=y. Such regions will be
295 * identified as vmalloc addresses by is_vmalloc_addr(), but are
296 * not [unambiguously] associated with a struct page, so there is
297 * no correct value to return for them.
298 */
299 WARN_ON_ONCE(pud_bad(*pud));
300 if (pud_none(*pud) || pud_bad(*pud))
291 return NULL; 301 return NULL;
292 pmd = pmd_offset(pud, addr); 302 pmd = pmd_offset(pud, addr);
293 if (pmd_none(*pmd)) 303 WARN_ON_ONCE(pmd_bad(*pmd));
304 if (pmd_none(*pmd) || pmd_bad(*pmd))
294 return NULL; 305 return NULL;
295 306
296 ptep = pte_offset_map(pmd, addr); 307 ptep = pte_offset_map(pmd, addr);
diff --git a/mm/vmpressure.c b/mm/vmpressure.c
index 6063581f705c..ce0618bfa8d0 100644
--- a/mm/vmpressure.c
+++ b/mm/vmpressure.c
@@ -115,9 +115,9 @@ static enum vmpressure_levels vmpressure_calc_level(unsigned long scanned,
115 unsigned long pressure = 0; 115 unsigned long pressure = 0;
116 116
117 /* 117 /*
118 * reclaimed can be greater than scanned in cases 118 * reclaimed can be greater than scanned for things such as reclaimed
119 * like THP, where the scanned is 1 and reclaimed 119 * slab pages. shrink_node() just adds reclaimed pages without a
120 * could be 512 120 * related increment to scanned pages.
121 */ 121 */
122 if (reclaimed >= scanned) 122 if (reclaimed >= scanned)
123 goto out; 123 goto out;
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index 467069b73ce1..9649579b5b9f 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -277,7 +277,8 @@ static int register_vlan_device(struct net_device *real_dev, u16 vlan_id)
277 return 0; 277 return 0;
278 278
279out_free_newdev: 279out_free_newdev:
280 free_netdev(new_dev); 280 if (new_dev->reg_state == NETREG_UNINITIALIZED)
281 free_netdev(new_dev);
281 return err; 282 return err;
282} 283}
283 284
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index 953b6728bd00..abc5f400fc71 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -813,7 +813,6 @@ static void vlan_dev_free(struct net_device *dev)
813 813
814 free_percpu(vlan->vlan_pcpu_stats); 814 free_percpu(vlan->vlan_pcpu_stats);
815 vlan->vlan_pcpu_stats = NULL; 815 vlan->vlan_pcpu_stats = NULL;
816 free_netdev(dev);
817} 816}
818 817
819void vlan_setup(struct net_device *dev) 818void vlan_setup(struct net_device *dev)
@@ -826,7 +825,8 @@ void vlan_setup(struct net_device *dev)
826 netif_keep_dst(dev); 825 netif_keep_dst(dev);
827 826
828 dev->netdev_ops = &vlan_netdev_ops; 827 dev->netdev_ops = &vlan_netdev_ops;
829 dev->destructor = vlan_dev_free; 828 dev->needs_free_netdev = true;
829 dev->priv_destructor = vlan_dev_free;
830 dev->ethtool_ops = &vlan_ethtool_ops; 830 dev->ethtool_ops = &vlan_ethtool_ops;
831 831
832 dev->min_mtu = 0; 832 dev->min_mtu = 0;
diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c
index 013e970eff39..000ca2f113ab 100644
--- a/net/batman-adv/distributed-arp-table.c
+++ b/net/batman-adv/distributed-arp-table.c
@@ -1064,8 +1064,9 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
1064 1064
1065 skb_new->protocol = eth_type_trans(skb_new, soft_iface); 1065 skb_new->protocol = eth_type_trans(skb_new, soft_iface);
1066 1066
1067 soft_iface->stats.rx_packets++; 1067 batadv_inc_counter(bat_priv, BATADV_CNT_RX);
1068 soft_iface->stats.rx_bytes += skb->len + ETH_HLEN + hdr_size; 1068 batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES,
1069 skb->len + ETH_HLEN + hdr_size);
1069 1070
1070 netif_rx(skb_new); 1071 netif_rx(skb_new);
1071 batadv_dbg(BATADV_DBG_DAT, bat_priv, "ARP request replied locally\n"); 1072 batadv_dbg(BATADV_DBG_DAT, bat_priv, "ARP request replied locally\n");
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index e1ebe14ee2a6..ae9f4d37d34f 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -987,7 +987,7 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,
987 batadv_dbg(BATADV_DBG_BLA, bat_priv, 987 batadv_dbg(BATADV_DBG_BLA, bat_priv,
988 "recv_unicast_packet(): Dropped unicast pkt received from another backbone gw %pM.\n", 988 "recv_unicast_packet(): Dropped unicast pkt received from another backbone gw %pM.\n",
989 orig_addr_gw); 989 orig_addr_gw);
990 return NET_RX_DROP; 990 goto free_skb;
991 } 991 }
992 } 992 }
993 993
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index b25789abf7b9..10f7edfb176e 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -1034,8 +1034,6 @@ static void batadv_softif_free(struct net_device *dev)
1034 * netdev and its private data (bat_priv) 1034 * netdev and its private data (bat_priv)
1035 */ 1035 */
1036 rcu_barrier(); 1036 rcu_barrier();
1037
1038 free_netdev(dev);
1039} 1037}
1040 1038
1041/** 1039/**
@@ -1047,7 +1045,8 @@ static void batadv_softif_init_early(struct net_device *dev)
1047 ether_setup(dev); 1045 ether_setup(dev);
1048 1046
1049 dev->netdev_ops = &batadv_netdev_ops; 1047 dev->netdev_ops = &batadv_netdev_ops;
1050 dev->destructor = batadv_softif_free; 1048 dev->needs_free_netdev = true;
1049 dev->priv_destructor = batadv_softif_free;
1051 dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_NETNS_LOCAL; 1050 dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_NETNS_LOCAL;
1052 dev->priv_flags |= IFF_NO_QUEUE; 1051 dev->priv_flags |= IFF_NO_QUEUE;
1053 1052
diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
index 608959989f8e..ab3b654b05cc 100644
--- a/net/bluetooth/6lowpan.c
+++ b/net/bluetooth/6lowpan.c
@@ -598,7 +598,7 @@ static void netdev_setup(struct net_device *dev)
598 598
599 dev->netdev_ops = &netdev_ops; 599 dev->netdev_ops = &netdev_ops;
600 dev->header_ops = &header_ops; 600 dev->header_ops = &header_ops;
601 dev->destructor = free_netdev; 601 dev->needs_free_netdev = true;
602} 602}
603 603
604static struct device_type bt_type = { 604static struct device_type bt_type = {
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index 430b53e7d941..f0f3447e8aa4 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -379,7 +379,7 @@ void br_dev_setup(struct net_device *dev)
379 ether_setup(dev); 379 ether_setup(dev);
380 380
381 dev->netdev_ops = &br_netdev_ops; 381 dev->netdev_ops = &br_netdev_ops;
382 dev->destructor = free_netdev; 382 dev->needs_free_netdev = true;
383 dev->ethtool_ops = &br_ethtool_ops; 383 dev->ethtool_ops = &br_ethtool_ops;
384 SET_NETDEV_DEVTYPE(dev, &br_type); 384 SET_NETDEV_DEVTYPE(dev, &br_type);
385 dev->priv_flags = IFF_EBRIDGE | IFF_NO_QUEUE; 385 dev->priv_flags = IFF_EBRIDGE | IFF_NO_QUEUE;
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 574f78824d8a..32bd3ead9ba1 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
@@ -595,7 +595,7 @@ static int br_afspec(struct net_bridge *br,
595 err = 0; 595 err = 0;
596 switch (nla_type(attr)) { 596 switch (nla_type(attr)) {
597 case IFLA_BRIDGE_VLAN_TUNNEL_INFO: 597 case IFLA_BRIDGE_VLAN_TUNNEL_INFO:
598 if (!(p->flags & BR_VLAN_TUNNEL)) 598 if (!p || !(p->flags & BR_VLAN_TUNNEL))
599 return -EINVAL; 599 return -EINVAL;
600 err = br_parse_vlan_tunnel_info(attr, &tinfo_curr); 600 err = br_parse_vlan_tunnel_info(attr, &tinfo_curr);
601 if (err) 601 if (err)
diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c
index 08341d2aa9c9..6f12a5271219 100644
--- a/net/bridge/br_stp_if.c
+++ b/net/bridge/br_stp_if.c
@@ -179,6 +179,8 @@ static void br_stp_start(struct net_bridge *br)
179 br_debug(br, "using kernel STP\n"); 179 br_debug(br, "using kernel STP\n");
180 180
181 /* To start timers on any ports left in blocking */ 181 /* To start timers on any ports left in blocking */
182 if (br->dev->flags & IFF_UP)
183 mod_timer(&br->hello_timer, jiffies + br->hello_time);
182 br_port_state_selection(br); 184 br_port_state_selection(br);
183 } 185 }
184 186
diff --git a/net/bridge/br_stp_timer.c b/net/bridge/br_stp_timer.c
index c98b3e5c140a..60b6fe277a8b 100644
--- a/net/bridge/br_stp_timer.c
+++ b/net/bridge/br_stp_timer.c
@@ -40,7 +40,7 @@ static void br_hello_timer_expired(unsigned long arg)
40 if (br->dev->flags & IFF_UP) { 40 if (br->dev->flags & IFF_UP) {
41 br_config_bpdu_generation(br); 41 br_config_bpdu_generation(br);
42 42
43 if (br->stp_enabled != BR_USER_STP) 43 if (br->stp_enabled == BR_KERNEL_STP)
44 mod_timer(&br->hello_timer, 44 mod_timer(&br->hello_timer,
45 round_jiffies(jiffies + br->hello_time)); 45 round_jiffies(jiffies + br->hello_time));
46 } 46 }
diff --git a/net/bridge/netfilter/ebt_arpreply.c b/net/bridge/netfilter/ebt_arpreply.c
index 5929309beaa1..db85230e49c3 100644
--- a/net/bridge/netfilter/ebt_arpreply.c
+++ b/net/bridge/netfilter/ebt_arpreply.c
@@ -68,6 +68,9 @@ static int ebt_arpreply_tg_check(const struct xt_tgchk_param *par)
68 if (e->ethproto != htons(ETH_P_ARP) || 68 if (e->ethproto != htons(ETH_P_ARP) ||
69 e->invflags & EBT_IPROTO) 69 e->invflags & EBT_IPROTO)
70 return -EINVAL; 70 return -EINVAL;
71 if (ebt_invalid_target(info->target))
72 return -EINVAL;
73
71 return 0; 74 return 0;
72} 75}
73 76
diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
index 9ec0c9f908fa..9c6e619f452b 100644
--- a/net/bridge/netfilter/ebtables.c
+++ b/net/bridge/netfilter/ebtables.c
@@ -1373,7 +1373,8 @@ static inline int ebt_obj_to_user(char __user *um, const char *_name,
1373 strlcpy(name, _name, sizeof(name)); 1373 strlcpy(name, _name, sizeof(name));
1374 if (copy_to_user(um, name, EBT_FUNCTION_MAXNAMELEN) || 1374 if (copy_to_user(um, name, EBT_FUNCTION_MAXNAMELEN) ||
1375 put_user(datasize, (int __user *)(um + EBT_FUNCTION_MAXNAMELEN)) || 1375 put_user(datasize, (int __user *)(um + EBT_FUNCTION_MAXNAMELEN)) ||
1376 xt_data_to_user(um + entrysize, data, usersize, datasize)) 1376 xt_data_to_user(um + entrysize, data, usersize, datasize,
1377 XT_ALIGN(datasize)))
1377 return -EFAULT; 1378 return -EFAULT;
1378 1379
1379 return 0; 1380 return 0;
@@ -1658,7 +1659,8 @@ static int compat_match_to_user(struct ebt_entry_match *m, void __user **dstptr,
1658 if (match->compat_to_user(cm->data, m->data)) 1659 if (match->compat_to_user(cm->data, m->data))
1659 return -EFAULT; 1660 return -EFAULT;
1660 } else { 1661 } else {
1661 if (xt_data_to_user(cm->data, m->data, match->usersize, msize)) 1662 if (xt_data_to_user(cm->data, m->data, match->usersize, msize,
1663 COMPAT_XT_ALIGN(msize)))
1662 return -EFAULT; 1664 return -EFAULT;
1663 } 1665 }
1664 1666
@@ -1687,7 +1689,8 @@ static int compat_target_to_user(struct ebt_entry_target *t,
1687 if (target->compat_to_user(cm->data, t->data)) 1689 if (target->compat_to_user(cm->data, t->data))
1688 return -EFAULT; 1690 return -EFAULT;
1689 } else { 1691 } else {
1690 if (xt_data_to_user(cm->data, t->data, target->usersize, tsize)) 1692 if (xt_data_to_user(cm->data, t->data, target->usersize, tsize,
1693 COMPAT_XT_ALIGN(tsize)))
1691 return -EFAULT; 1694 return -EFAULT;
1692 } 1695 }
1693 1696
diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
index adcad344c843..21f18ea2fce4 100644
--- a/net/caif/caif_socket.c
+++ b/net/caif/caif_socket.c
@@ -754,6 +754,10 @@ static int caif_connect(struct socket *sock, struct sockaddr *uaddr,
754 754
755 lock_sock(sk); 755 lock_sock(sk);
756 756
757 err = -EINVAL;
758 if (addr_len < offsetofend(struct sockaddr, sa_family))
759 goto out;
760
757 err = -EAFNOSUPPORT; 761 err = -EAFNOSUPPORT;
758 if (uaddr->sa_family != AF_CAIF) 762 if (uaddr->sa_family != AF_CAIF)
759 goto out; 763 goto out;
diff --git a/net/caif/cfpkt_skbuff.c b/net/caif/cfpkt_skbuff.c
index 59ce1fcc220c..71b6ab240dea 100644
--- a/net/caif/cfpkt_skbuff.c
+++ b/net/caif/cfpkt_skbuff.c
@@ -81,11 +81,7 @@ static struct cfpkt *cfpkt_create_pfx(u16 len, u16 pfx)
81{ 81{
82 struct sk_buff *skb; 82 struct sk_buff *skb;
83 83
84 if (likely(in_interrupt())) 84 skb = alloc_skb(len + pfx, GFP_ATOMIC);
85 skb = alloc_skb(len + pfx, GFP_ATOMIC);
86 else
87 skb = alloc_skb(len + pfx, GFP_KERNEL);
88
89 if (unlikely(skb == NULL)) 85 if (unlikely(skb == NULL))
90 return NULL; 86 return NULL;
91 87
diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c
index 1816fc9f1ee7..fe3c53efb949 100644
--- a/net/caif/chnl_net.c
+++ b/net/caif/chnl_net.c
@@ -392,14 +392,14 @@ static void chnl_net_destructor(struct net_device *dev)
392{ 392{
393 struct chnl_net *priv = netdev_priv(dev); 393 struct chnl_net *priv = netdev_priv(dev);
394 caif_free_client(&priv->chnl); 394 caif_free_client(&priv->chnl);
395 free_netdev(dev);
396} 395}
397 396
398static void ipcaif_net_setup(struct net_device *dev) 397static void ipcaif_net_setup(struct net_device *dev)
399{ 398{
400 struct chnl_net *priv; 399 struct chnl_net *priv;
401 dev->netdev_ops = &netdev_ops; 400 dev->netdev_ops = &netdev_ops;
402 dev->destructor = chnl_net_destructor; 401 dev->needs_free_netdev = true;
402 dev->priv_destructor = chnl_net_destructor;
403 dev->flags |= IFF_NOARP; 403 dev->flags |= IFF_NOARP;
404 dev->flags |= IFF_POINTOPOINT; 404 dev->flags |= IFF_POINTOPOINT;
405 dev->mtu = GPRS_PDP_MTU; 405 dev->mtu = GPRS_PDP_MTU;
diff --git a/net/can/af_can.c b/net/can/af_can.c
index b6406fe33c76..88edac0f3e36 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
@@ -872,8 +872,7 @@ static int can_notifier(struct notifier_block *nb, unsigned long msg,
872 872
873static int can_pernet_init(struct net *net) 873static int can_pernet_init(struct net *net)
874{ 874{
875 net->can.can_rcvlists_lock = 875 spin_lock_init(&net->can.can_rcvlists_lock);
876 __SPIN_LOCK_UNLOCKED(net->can.can_rcvlists_lock);
877 net->can.can_rx_alldev_list = 876 net->can.can_rx_alldev_list =
878 kzalloc(sizeof(struct dev_rcv_lists), GFP_KERNEL); 877 kzalloc(sizeof(struct dev_rcv_lists), GFP_KERNEL);
879 878
diff --git a/net/ceph/auth_x.c b/net/ceph/auth_x.c
index 2034fb926670..8757fb87dab8 100644
--- a/net/ceph/auth_x.c
+++ b/net/ceph/auth_x.c
@@ -151,7 +151,7 @@ static int process_one_ticket(struct ceph_auth_client *ac,
151 struct timespec validity; 151 struct timespec validity;
152 void *tp, *tpend; 152 void *tp, *tpend;
153 void **ptp; 153 void **ptp;
154 struct ceph_crypto_key new_session_key; 154 struct ceph_crypto_key new_session_key = { 0 };
155 struct ceph_buffer *new_ticket_blob; 155 struct ceph_buffer *new_ticket_blob;
156 unsigned long new_expires, new_renew_after; 156 unsigned long new_expires, new_renew_after;
157 u64 new_secret_id; 157 u64 new_secret_id;
@@ -215,6 +215,9 @@ static int process_one_ticket(struct ceph_auth_client *ac,
215 dout(" ticket blob is %d bytes\n", dlen); 215 dout(" ticket blob is %d bytes\n", dlen);
216 ceph_decode_need(ptp, tpend, 1 + sizeof(u64), bad); 216 ceph_decode_need(ptp, tpend, 1 + sizeof(u64), bad);
217 blob_struct_v = ceph_decode_8(ptp); 217 blob_struct_v = ceph_decode_8(ptp);
218 if (blob_struct_v != 1)
219 goto bad;
220
218 new_secret_id = ceph_decode_64(ptp); 221 new_secret_id = ceph_decode_64(ptp);
219 ret = ceph_decode_buffer(&new_ticket_blob, ptp, tpend); 222 ret = ceph_decode_buffer(&new_ticket_blob, ptp, tpend);
220 if (ret) 223 if (ret)
@@ -234,13 +237,13 @@ static int process_one_ticket(struct ceph_auth_client *ac,
234 type, ceph_entity_type_name(type), th->secret_id, 237 type, ceph_entity_type_name(type), th->secret_id,
235 (int)th->ticket_blob->vec.iov_len); 238 (int)th->ticket_blob->vec.iov_len);
236 xi->have_keys |= th->service; 239 xi->have_keys |= th->service;
237 240 return 0;
238out:
239 return ret;
240 241
241bad: 242bad:
242 ret = -EINVAL; 243 ret = -EINVAL;
243 goto out; 244out:
245 ceph_crypto_key_destroy(&new_session_key);
246 return ret;
244} 247}
245 248
246static int ceph_x_proc_ticket_reply(struct ceph_auth_client *ac, 249static int ceph_x_proc_ticket_reply(struct ceph_auth_client *ac,
diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c
index 4fd02831beed..47e94b560ba0 100644
--- a/net/ceph/ceph_common.c
+++ b/net/ceph/ceph_common.c
@@ -56,19 +56,6 @@ static const struct kernel_param_ops param_ops_supported_features = {
56module_param_cb(supported_features, &param_ops_supported_features, NULL, 56module_param_cb(supported_features, &param_ops_supported_features, NULL,
57 S_IRUGO); 57 S_IRUGO);
58 58
59/*
60 * find filename portion of a path (/foo/bar/baz -> baz)
61 */
62const char *ceph_file_part(const char *s, int len)
63{
64 const char *e = s + len;
65
66 while (e != s && *(e-1) != '/')
67 e--;
68 return e;
69}
70EXPORT_SYMBOL(ceph_file_part);
71
72const char *ceph_msg_type_name(int type) 59const char *ceph_msg_type_name(int type)
73{ 60{
74 switch (type) { 61 switch (type) {
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index 5766a6c896c4..588a91930051 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -1174,8 +1174,8 @@ static struct page *ceph_msg_data_next(struct ceph_msg_data_cursor *cursor,
1174 * Returns true if the result moves the cursor on to the next piece 1174 * Returns true if the result moves the cursor on to the next piece
1175 * of the data item. 1175 * of the data item.
1176 */ 1176 */
1177static bool ceph_msg_data_advance(struct ceph_msg_data_cursor *cursor, 1177static void ceph_msg_data_advance(struct ceph_msg_data_cursor *cursor,
1178 size_t bytes) 1178 size_t bytes)
1179{ 1179{
1180 bool new_piece; 1180 bool new_piece;
1181 1181
@@ -1207,8 +1207,6 @@ static bool ceph_msg_data_advance(struct ceph_msg_data_cursor *cursor,
1207 new_piece = true; 1207 new_piece = true;
1208 } 1208 }
1209 cursor->need_crc = new_piece; 1209 cursor->need_crc = new_piece;
1210
1211 return new_piece;
1212} 1210}
1213 1211
1214static size_t sizeof_footer(struct ceph_connection *con) 1212static size_t sizeof_footer(struct ceph_connection *con)
@@ -1577,7 +1575,6 @@ static int write_partial_message_data(struct ceph_connection *con)
1577 size_t page_offset; 1575 size_t page_offset;
1578 size_t length; 1576 size_t length;
1579 bool last_piece; 1577 bool last_piece;
1580 bool need_crc;
1581 int ret; 1578 int ret;
1582 1579
1583 page = ceph_msg_data_next(cursor, &page_offset, &length, 1580 page = ceph_msg_data_next(cursor, &page_offset, &length,
@@ -1592,7 +1589,7 @@ static int write_partial_message_data(struct ceph_connection *con)
1592 } 1589 }
1593 if (do_datacrc && cursor->need_crc) 1590 if (do_datacrc && cursor->need_crc)
1594 crc = ceph_crc32c_page(crc, page, page_offset, length); 1591 crc = ceph_crc32c_page(crc, page, page_offset, length);
1595 need_crc = ceph_msg_data_advance(cursor, (size_t)ret); 1592 ceph_msg_data_advance(cursor, (size_t)ret);
1596 } 1593 }
1597 1594
1598 dout("%s %p msg %p done\n", __func__, con, msg); 1595 dout("%s %p msg %p done\n", __func__, con, msg);
@@ -2231,10 +2228,18 @@ static void process_ack(struct ceph_connection *con)
2231 struct ceph_msg *m; 2228 struct ceph_msg *m;
2232 u64 ack = le64_to_cpu(con->in_temp_ack); 2229 u64 ack = le64_to_cpu(con->in_temp_ack);
2233 u64 seq; 2230 u64 seq;
2231 bool reconnect = (con->in_tag == CEPH_MSGR_TAG_SEQ);
2232 struct list_head *list = reconnect ? &con->out_queue : &con->out_sent;
2234 2233
2235 while (!list_empty(&con->out_sent)) { 2234 /*
2236 m = list_first_entry(&con->out_sent, struct ceph_msg, 2235 * In the reconnect case, con_fault() has requeued messages
2237 list_head); 2236 * in out_sent. We should cleanup old messages according to
2237 * the reconnect seq.
2238 */
2239 while (!list_empty(list)) {
2240 m = list_first_entry(list, struct ceph_msg, list_head);
2241 if (reconnect && m->needs_out_seq)
2242 break;
2238 seq = le64_to_cpu(m->hdr.seq); 2243 seq = le64_to_cpu(m->hdr.seq);
2239 if (seq > ack) 2244 if (seq > ack)
2240 break; 2245 break;
@@ -2243,6 +2248,7 @@ static void process_ack(struct ceph_connection *con)
2243 m->ack_stamp = jiffies; 2248 m->ack_stamp = jiffies;
2244 ceph_msg_remove(m); 2249 ceph_msg_remove(m);
2245 } 2250 }
2251
2246 prepare_read_tag(con); 2252 prepare_read_tag(con);
2247} 2253}
2248 2254
@@ -2299,7 +2305,7 @@ static int read_partial_msg_data(struct ceph_connection *con)
2299 2305
2300 if (do_datacrc) 2306 if (do_datacrc)
2301 crc = ceph_crc32c_page(crc, page, page_offset, ret); 2307 crc = ceph_crc32c_page(crc, page, page_offset, ret);
2302 (void) ceph_msg_data_advance(cursor, (size_t)ret); 2308 ceph_msg_data_advance(cursor, (size_t)ret);
2303 } 2309 }
2304 if (do_datacrc) 2310 if (do_datacrc)
2305 con->in_data_crc = crc; 2311 con->in_data_crc = crc;
diff --git a/net/ceph/mon_client.c b/net/ceph/mon_client.c
index 29a0ef351c5e..250f11f78609 100644
--- a/net/ceph/mon_client.c
+++ b/net/ceph/mon_client.c
@@ -43,15 +43,13 @@ struct ceph_monmap *ceph_monmap_decode(void *p, void *end)
43 int i, err = -EINVAL; 43 int i, err = -EINVAL;
44 struct ceph_fsid fsid; 44 struct ceph_fsid fsid;
45 u32 epoch, num_mon; 45 u32 epoch, num_mon;
46 u16 version;
47 u32 len; 46 u32 len;
48 47
49 ceph_decode_32_safe(&p, end, len, bad); 48 ceph_decode_32_safe(&p, end, len, bad);
50 ceph_decode_need(&p, end, len, bad); 49 ceph_decode_need(&p, end, len, bad);
51 50
52 dout("monmap_decode %p %p len %d\n", p, end, (int)(end-p)); 51 dout("monmap_decode %p %p len %d\n", p, end, (int)(end-p));
53 52 p += sizeof(u16); /* skip version */
54 ceph_decode_16_safe(&p, end, version, bad);
55 53
56 ceph_decode_need(&p, end, sizeof(fsid) + 2*sizeof(u32), bad); 54 ceph_decode_need(&p, end, sizeof(fsid) + 2*sizeof(u32), bad);
57 ceph_decode_copy(&p, &fsid, sizeof(fsid)); 55 ceph_decode_copy(&p, &fsid, sizeof(fsid));
diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
index ffe9e904d4d1..55e3a477f92d 100644
--- a/net/ceph/osdmap.c
+++ b/net/ceph/osdmap.c
@@ -317,6 +317,7 @@ static struct crush_map *crush_decode(void *pbyval, void *end)
317 u32 yes; 317 u32 yes;
318 struct crush_rule *r; 318 struct crush_rule *r;
319 319
320 err = -EINVAL;
320 ceph_decode_32_safe(p, end, yes, bad); 321 ceph_decode_32_safe(p, end, yes, bad);
321 if (!yes) { 322 if (!yes) {
322 dout("crush_decode NO rule %d off %x %p to %p\n", 323 dout("crush_decode NO rule %d off %x %p to %p\n",
diff --git a/net/core/dev.c b/net/core/dev.c
index fca407b4a6ea..416137c64bf8 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1253,8 +1253,9 @@ int dev_set_alias(struct net_device *dev, const char *alias, size_t len)
1253 if (!new_ifalias) 1253 if (!new_ifalias)
1254 return -ENOMEM; 1254 return -ENOMEM;
1255 dev->ifalias = new_ifalias; 1255 dev->ifalias = new_ifalias;
1256 memcpy(dev->ifalias, alias, len);
1257 dev->ifalias[len] = 0;
1256 1258
1257 strlcpy(dev->ifalias, alias, len+1);
1258 return len; 1259 return len;
1259} 1260}
1260 1261
@@ -4766,6 +4767,13 @@ struct packet_offload *gro_find_complete_by_type(__be16 type)
4766} 4767}
4767EXPORT_SYMBOL(gro_find_complete_by_type); 4768EXPORT_SYMBOL(gro_find_complete_by_type);
4768 4769
4770static void napi_skb_free_stolen_head(struct sk_buff *skb)
4771{
4772 skb_dst_drop(skb);
4773 secpath_reset(skb);
4774 kmem_cache_free(skbuff_head_cache, skb);
4775}
4776
4769static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb) 4777static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
4770{ 4778{
4771 switch (ret) { 4779 switch (ret) {
@@ -4779,13 +4787,10 @@ static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
4779 break; 4787 break;
4780 4788
4781 case GRO_MERGED_FREE: 4789 case GRO_MERGED_FREE:
4782 if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD) { 4790 if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD)
4783 skb_dst_drop(skb); 4791 napi_skb_free_stolen_head(skb);
4784 secpath_reset(skb); 4792 else
4785 kmem_cache_free(skbuff_head_cache, skb);
4786 } else {
4787 __kfree_skb(skb); 4793 __kfree_skb(skb);
4788 }
4789 break; 4794 break;
4790 4795
4791 case GRO_HELD: 4796 case GRO_HELD:
@@ -4857,10 +4862,16 @@ static gro_result_t napi_frags_finish(struct napi_struct *napi,
4857 break; 4862 break;
4858 4863
4859 case GRO_DROP: 4864 case GRO_DROP:
4860 case GRO_MERGED_FREE:
4861 napi_reuse_skb(napi, skb); 4865 napi_reuse_skb(napi, skb);
4862 break; 4866 break;
4863 4867
4868 case GRO_MERGED_FREE:
4869 if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD)
4870 napi_skb_free_stolen_head(skb);
4871 else
4872 napi_reuse_skb(napi, skb);
4873 break;
4874
4864 case GRO_MERGED: 4875 case GRO_MERGED:
4865 case GRO_CONSUMED: 4876 case GRO_CONSUMED:
4866 break; 4877 break;
@@ -4948,6 +4959,19 @@ __sum16 __skb_gro_checksum_complete(struct sk_buff *skb)
4948} 4959}
4949EXPORT_SYMBOL(__skb_gro_checksum_complete); 4960EXPORT_SYMBOL(__skb_gro_checksum_complete);
4950 4961
4962static void net_rps_send_ipi(struct softnet_data *remsd)
4963{
4964#ifdef CONFIG_RPS
4965 while (remsd) {
4966 struct softnet_data *next = remsd->rps_ipi_next;
4967
4968 if (cpu_online(remsd->cpu))
4969 smp_call_function_single_async(remsd->cpu, &remsd->csd);
4970 remsd = next;
4971 }
4972#endif
4973}
4974
4951/* 4975/*
4952 * net_rps_action_and_irq_enable sends any pending IPI's for rps. 4976 * net_rps_action_and_irq_enable sends any pending IPI's for rps.
4953 * Note: called with local irq disabled, but exits with local irq enabled. 4977 * Note: called with local irq disabled, but exits with local irq enabled.
@@ -4963,14 +4987,7 @@ static void net_rps_action_and_irq_enable(struct softnet_data *sd)
4963 local_irq_enable(); 4987 local_irq_enable();
4964 4988
4965 /* Send pending IPI's to kick RPS processing on remote cpus. */ 4989 /* Send pending IPI's to kick RPS processing on remote cpus. */
4966 while (remsd) { 4990 net_rps_send_ipi(remsd);
4967 struct softnet_data *next = remsd->rps_ipi_next;
4968
4969 if (cpu_online(remsd->cpu))
4970 smp_call_function_single_async(remsd->cpu,
4971 &remsd->csd);
4972 remsd = next;
4973 }
4974 } else 4991 } else
4975#endif 4992#endif
4976 local_irq_enable(); 4993 local_irq_enable();
@@ -5199,8 +5216,6 @@ static void busy_poll_stop(struct napi_struct *napi, void *have_poll_lock)
5199 if (rc == BUSY_POLL_BUDGET) 5216 if (rc == BUSY_POLL_BUDGET)
5200 __napi_schedule(napi); 5217 __napi_schedule(napi);
5201 local_bh_enable(); 5218 local_bh_enable();
5202 if (local_softirq_pending())
5203 do_softirq();
5204} 5219}
5205 5220
5206void napi_busy_loop(unsigned int napi_id, 5221void napi_busy_loop(unsigned int napi_id,
@@ -7501,6 +7516,8 @@ out:
7501err_uninit: 7516err_uninit:
7502 if (dev->netdev_ops->ndo_uninit) 7517 if (dev->netdev_ops->ndo_uninit)
7503 dev->netdev_ops->ndo_uninit(dev); 7518 dev->netdev_ops->ndo_uninit(dev);
7519 if (dev->priv_destructor)
7520 dev->priv_destructor(dev);
7504 goto out; 7521 goto out;
7505} 7522}
7506EXPORT_SYMBOL(register_netdevice); 7523EXPORT_SYMBOL(register_netdevice);
@@ -7708,8 +7725,10 @@ void netdev_run_todo(void)
7708 WARN_ON(rcu_access_pointer(dev->ip6_ptr)); 7725 WARN_ON(rcu_access_pointer(dev->ip6_ptr));
7709 WARN_ON(dev->dn_ptr); 7726 WARN_ON(dev->dn_ptr);
7710 7727
7711 if (dev->destructor) 7728 if (dev->priv_destructor)
7712 dev->destructor(dev); 7729 dev->priv_destructor(dev);
7730 if (dev->needs_free_netdev)
7731 free_netdev(dev);
7713 7732
7714 /* Report a network device has been unregistered */ 7733 /* Report a network device has been unregistered */
7715 rtnl_lock(); 7734 rtnl_lock();
@@ -7774,9 +7793,9 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
7774 } else { 7793 } else {
7775 netdev_stats_to_stats64(storage, &dev->stats); 7794 netdev_stats_to_stats64(storage, &dev->stats);
7776 } 7795 }
7777 storage->rx_dropped += atomic_long_read(&dev->rx_dropped); 7796 storage->rx_dropped += (unsigned long)atomic_long_read(&dev->rx_dropped);
7778 storage->tx_dropped += atomic_long_read(&dev->tx_dropped); 7797 storage->tx_dropped += (unsigned long)atomic_long_read(&dev->tx_dropped);
7779 storage->rx_nohandler += atomic_long_read(&dev->rx_nohandler); 7798 storage->rx_nohandler += (unsigned long)atomic_long_read(&dev->rx_nohandler);
7780 return storage; 7799 return storage;
7781} 7800}
7782EXPORT_SYMBOL(dev_get_stats); 7801EXPORT_SYMBOL(dev_get_stats);
@@ -8192,7 +8211,7 @@ static int dev_cpu_dead(unsigned int oldcpu)
8192 struct sk_buff **list_skb; 8211 struct sk_buff **list_skb;
8193 struct sk_buff *skb; 8212 struct sk_buff *skb;
8194 unsigned int cpu; 8213 unsigned int cpu;
8195 struct softnet_data *sd, *oldsd; 8214 struct softnet_data *sd, *oldsd, *remsd = NULL;
8196 8215
8197 local_irq_disable(); 8216 local_irq_disable();
8198 cpu = smp_processor_id(); 8217 cpu = smp_processor_id();
@@ -8233,6 +8252,13 @@ static int dev_cpu_dead(unsigned int oldcpu)
8233 raise_softirq_irqoff(NET_TX_SOFTIRQ); 8252 raise_softirq_irqoff(NET_TX_SOFTIRQ);
8234 local_irq_enable(); 8253 local_irq_enable();
8235 8254
8255#ifdef CONFIG_RPS
8256 remsd = oldsd->rps_ipi_list;
8257 oldsd->rps_ipi_list = NULL;
8258#endif
8259 /* send out pending IPI's on offline CPU */
8260 net_rps_send_ipi(remsd);
8261
8236 /* Process offline CPU's input_pkt_queue */ 8262 /* Process offline CPU's input_pkt_queue */
8237 while ((skb = __skb_dequeue(&oldsd->process_queue))) { 8263 while ((skb = __skb_dequeue(&oldsd->process_queue))) {
8238 netif_rx_ni(skb); 8264 netif_rx_ni(skb);
diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c
index b94b1d293506..27fad31784a8 100644
--- a/net/core/dev_ioctl.c
+++ b/net/core/dev_ioctl.c
@@ -410,6 +410,22 @@ int dev_ioctl(struct net *net, unsigned int cmd, void __user *arg)
410 if (cmd == SIOCGIFNAME) 410 if (cmd == SIOCGIFNAME)
411 return dev_ifname(net, (struct ifreq __user *)arg); 411 return dev_ifname(net, (struct ifreq __user *)arg);
412 412
413 /*
414 * Take care of Wireless Extensions. Unfortunately struct iwreq
415 * isn't a proper subset of struct ifreq (it's 8 byte shorter)
416 * so we need to treat it specially, otherwise applications may
417 * fault if the struct they're passing happens to land at the
418 * end of a mapped page.
419 */
420 if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
421 struct iwreq iwr;
422
423 if (copy_from_user(&iwr, arg, sizeof(iwr)))
424 return -EFAULT;
425
426 return wext_handle_ioctl(net, &iwr, cmd, arg);
427 }
428
413 if (copy_from_user(&ifr, arg, sizeof(struct ifreq))) 429 if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
414 return -EFAULT; 430 return -EFAULT;
415 431
@@ -559,9 +575,6 @@ int dev_ioctl(struct net *net, unsigned int cmd, void __user *arg)
559 ret = -EFAULT; 575 ret = -EFAULT;
560 return ret; 576 return ret;
561 } 577 }
562 /* Take care of Wireless Extensions */
563 if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST)
564 return wext_handle_ioctl(net, &ifr, cmd, arg);
565 return -ENOTTY; 578 return -ENOTTY;
566 } 579 }
567} 580}
diff --git a/net/core/devlink.c b/net/core/devlink.c
index b0b87a292e7c..a0adfc31a3fe 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -1680,8 +1680,10 @@ start_again:
1680 1680
1681 hdr = genlmsg_put(skb, info->snd_portid, info->snd_seq, 1681 hdr = genlmsg_put(skb, info->snd_portid, info->snd_seq,
1682 &devlink_nl_family, NLM_F_MULTI, cmd); 1682 &devlink_nl_family, NLM_F_MULTI, cmd);
1683 if (!hdr) 1683 if (!hdr) {
1684 nlmsg_free(skb);
1684 return -EMSGSIZE; 1685 return -EMSGSIZE;
1686 }
1685 1687
1686 if (devlink_nl_put_handle(skb, devlink)) 1688 if (devlink_nl_put_handle(skb, devlink))
1687 goto nla_put_failure; 1689 goto nla_put_failure;
@@ -2098,8 +2100,10 @@ start_again:
2098 2100
2099 hdr = genlmsg_put(skb, info->snd_portid, info->snd_seq, 2101 hdr = genlmsg_put(skb, info->snd_portid, info->snd_seq,
2100 &devlink_nl_family, NLM_F_MULTI, cmd); 2102 &devlink_nl_family, NLM_F_MULTI, cmd);
2101 if (!hdr) 2103 if (!hdr) {
2104 nlmsg_free(skb);
2102 return -EMSGSIZE; 2105 return -EMSGSIZE;
2106 }
2103 2107
2104 if (devlink_nl_put_handle(skb, devlink)) 2108 if (devlink_nl_put_handle(skb, devlink))
2105 goto nla_put_failure; 2109 goto nla_put_failure;
diff --git a/net/core/dst.c b/net/core/dst.c
index 960e503b5a52..13ba4a090c41 100644
--- a/net/core/dst.c
+++ b/net/core/dst.c
@@ -151,13 +151,13 @@ int dst_discard_out(struct net *net, struct sock *sk, struct sk_buff *skb)
151} 151}
152EXPORT_SYMBOL(dst_discard_out); 152EXPORT_SYMBOL(dst_discard_out);
153 153
154const u32 dst_default_metrics[RTAX_MAX + 1] = { 154const struct dst_metrics dst_default_metrics = {
155 /* This initializer is needed to force linker to place this variable 155 /* This initializer is needed to force linker to place this variable
156 * into const section. Otherwise it might end into bss section. 156 * into const section. Otherwise it might end into bss section.
157 * We really want to avoid false sharing on this variable, and catch 157 * We really want to avoid false sharing on this variable, and catch
158 * any writes on it. 158 * any writes on it.
159 */ 159 */
160 [RTAX_MAX] = 0xdeadbeef, 160 .refcnt = ATOMIC_INIT(1),
161}; 161};
162 162
163void dst_init(struct dst_entry *dst, struct dst_ops *ops, 163void dst_init(struct dst_entry *dst, struct dst_ops *ops,
@@ -169,7 +169,7 @@ void dst_init(struct dst_entry *dst, struct dst_ops *ops,
169 if (dev) 169 if (dev)
170 dev_hold(dev); 170 dev_hold(dev);
171 dst->ops = ops; 171 dst->ops = ops;
172 dst_init_metrics(dst, dst_default_metrics, true); 172 dst_init_metrics(dst, dst_default_metrics.metrics, true);
173 dst->expires = 0UL; 173 dst->expires = 0UL;
174 dst->path = dst; 174 dst->path = dst;
175 dst->from = NULL; 175 dst->from = NULL;
@@ -314,25 +314,30 @@ EXPORT_SYMBOL(dst_release);
314 314
315u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old) 315u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old)
316{ 316{
317 u32 *p = kmalloc(sizeof(u32) * RTAX_MAX, GFP_ATOMIC); 317 struct dst_metrics *p = kmalloc(sizeof(*p), GFP_ATOMIC);
318 318
319 if (p) { 319 if (p) {
320 u32 *old_p = __DST_METRICS_PTR(old); 320 struct dst_metrics *old_p = (struct dst_metrics *)__DST_METRICS_PTR(old);
321 unsigned long prev, new; 321 unsigned long prev, new;
322 322
323 memcpy(p, old_p, sizeof(u32) * RTAX_MAX); 323 atomic_set(&p->refcnt, 1);
324 memcpy(p->metrics, old_p->metrics, sizeof(p->metrics));
324 325
325 new = (unsigned long) p; 326 new = (unsigned long) p;
326 prev = cmpxchg(&dst->_metrics, old, new); 327 prev = cmpxchg(&dst->_metrics, old, new);
327 328
328 if (prev != old) { 329 if (prev != old) {
329 kfree(p); 330 kfree(p);
330 p = __DST_METRICS_PTR(prev); 331 p = (struct dst_metrics *)__DST_METRICS_PTR(prev);
331 if (prev & DST_METRICS_READ_ONLY) 332 if (prev & DST_METRICS_READ_ONLY)
332 p = NULL; 333 p = NULL;
334 } else if (prev & DST_METRICS_REFCOUNTED) {
335 if (atomic_dec_and_test(&old_p->refcnt))
336 kfree(old_p);
333 } 337 }
334 } 338 }
335 return p; 339 BUILD_BUG_ON(offsetof(struct dst_metrics, metrics) != 0);
340 return (u32 *)p;
336} 341}
337EXPORT_SYMBOL(dst_cow_metrics_generic); 342EXPORT_SYMBOL(dst_cow_metrics_generic);
338 343
@@ -341,7 +346,7 @@ void __dst_destroy_metrics_generic(struct dst_entry *dst, unsigned long old)
341{ 346{
342 unsigned long prev, new; 347 unsigned long prev, new;
343 348
344 new = ((unsigned long) dst_default_metrics) | DST_METRICS_READ_ONLY; 349 new = ((unsigned long) &dst_default_metrics) | DST_METRICS_READ_ONLY;
345 prev = cmpxchg(&dst->_metrics, old, new); 350 prev = cmpxchg(&dst->_metrics, old, new);
346 if (prev == old) 351 if (prev == old)
347 kfree(__DST_METRICS_PTR(old)); 352 kfree(__DST_METRICS_PTR(old));
@@ -464,6 +469,20 @@ static int dst_dev_event(struct notifier_block *this, unsigned long event,
464 spin_lock_bh(&dst_garbage.lock); 469 spin_lock_bh(&dst_garbage.lock);
465 dst = dst_garbage.list; 470 dst = dst_garbage.list;
466 dst_garbage.list = NULL; 471 dst_garbage.list = NULL;
472 /* The code in dst_ifdown places a hold on the loopback device.
473 * If the gc entry processing is set to expire after a lengthy
474 * interval, this hold can cause netdev_wait_allrefs() to hang
475 * out and wait for a long time -- until the the loopback
476 * interface is released. If we're really unlucky, it'll emit
477 * pr_emerg messages to console too. Reset the interval here,
478 * so dst cleanups occur in a more timely fashion.
479 */
480 if (dst_garbage.timer_inc > DST_GC_INC) {
481 dst_garbage.timer_inc = DST_GC_INC;
482 dst_garbage.timer_expires = DST_GC_MIN;
483 mod_delayed_work(system_wq, &dst_gc_work,
484 dst_garbage.timer_expires);
485 }
467 spin_unlock_bh(&dst_garbage.lock); 486 spin_unlock_bh(&dst_garbage.lock);
468 487
469 if (last) 488 if (last)
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c
index f21c4d3aeae0..3bba291c6c32 100644
--- a/net/core/fib_rules.c
+++ b/net/core/fib_rules.c
@@ -568,7 +568,7 @@ int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr *nlh,
568 struct net *net = sock_net(skb->sk); 568 struct net *net = sock_net(skb->sk);
569 struct fib_rule_hdr *frh = nlmsg_data(nlh); 569 struct fib_rule_hdr *frh = nlmsg_data(nlh);
570 struct fib_rules_ops *ops = NULL; 570 struct fib_rules_ops *ops = NULL;
571 struct fib_rule *rule, *tmp; 571 struct fib_rule *rule, *r;
572 struct nlattr *tb[FRA_MAX+1]; 572 struct nlattr *tb[FRA_MAX+1];
573 struct fib_kuid_range range; 573 struct fib_kuid_range range;
574 int err = -EINVAL; 574 int err = -EINVAL;
@@ -668,16 +668,23 @@ int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr *nlh,
668 668
669 /* 669 /*
670 * Check if this rule is a target to any of them. If so, 670 * Check if this rule is a target to any of them. If so,
671 * adjust to the next one with the same preference or
671 * disable them. As this operation is eventually very 672 * disable them. As this operation is eventually very
672 * expensive, it is only performed if goto rules have 673 * expensive, it is only performed if goto rules, except
673 * actually been added. 674 * current if it is goto rule, have actually been added.
674 */ 675 */
675 if (ops->nr_goto_rules > 0) { 676 if (ops->nr_goto_rules > 0) {
676 list_for_each_entry(tmp, &ops->rules_list, list) { 677 struct fib_rule *n;
677 if (rtnl_dereference(tmp->ctarget) == rule) { 678
678 RCU_INIT_POINTER(tmp->ctarget, NULL); 679 n = list_next_entry(rule, list);
680 if (&n->list == &ops->rules_list || n->pref != rule->pref)
681 n = NULL;
682 list_for_each_entry(r, &ops->rules_list, list) {
683 if (rtnl_dereference(r->ctarget) != rule)
684 continue;
685 rcu_assign_pointer(r->ctarget, n);
686 if (!n)
679 ops->unresolved_rules++; 687 ops->unresolved_rules++;
680 }
681 } 688 }
682 } 689 }
683 690
diff --git a/net/core/filter.c b/net/core/filter.c
index a253a6197e6b..a6bb95fa87b2 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -2281,6 +2281,7 @@ bool bpf_helper_changes_pkt_data(void *func)
2281 func == bpf_skb_change_head || 2281 func == bpf_skb_change_head ||
2282 func == bpf_skb_change_tail || 2282 func == bpf_skb_change_tail ||
2283 func == bpf_skb_pull_data || 2283 func == bpf_skb_pull_data ||
2284 func == bpf_clone_redirect ||
2284 func == bpf_l3_csum_replace || 2285 func == bpf_l3_csum_replace ||
2285 func == bpf_l4_csum_replace || 2286 func == bpf_l4_csum_replace ||
2286 func == bpf_xdp_adjust_head) 2287 func == bpf_xdp_adjust_head)
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index 1934efd4a9d4..26bbfababff2 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -315,6 +315,25 @@ out_undo:
315 goto out; 315 goto out;
316} 316}
317 317
318static int __net_init net_defaults_init_net(struct net *net)
319{
320 net->core.sysctl_somaxconn = SOMAXCONN;
321 return 0;
322}
323
324static struct pernet_operations net_defaults_ops = {
325 .init = net_defaults_init_net,
326};
327
328static __init int net_defaults_init(void)
329{
330 if (register_pernet_subsys(&net_defaults_ops))
331 panic("Cannot initialize net default settings");
332
333 return 0;
334}
335
336core_initcall(net_defaults_init);
318 337
319#ifdef CONFIG_NET_NS 338#ifdef CONFIG_NET_NS
320static struct ucounts *inc_net_namespaces(struct user_namespace *ns) 339static struct ucounts *inc_net_namespaces(struct user_namespace *ns)
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 49a279a7cc15..467a2f4510a7 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -931,6 +931,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
931 + nla_total_size(1) /* IFLA_LINKMODE */ 931 + nla_total_size(1) /* IFLA_LINKMODE */
932 + nla_total_size(4) /* IFLA_CARRIER_CHANGES */ 932 + nla_total_size(4) /* IFLA_CARRIER_CHANGES */
933 + nla_total_size(4) /* IFLA_LINK_NETNSID */ 933 + nla_total_size(4) /* IFLA_LINK_NETNSID */
934 + nla_total_size(4) /* IFLA_GROUP */
934 + nla_total_size(ext_filter_mask 935 + nla_total_size(ext_filter_mask
935 & RTEXT_FILTER_VF ? 4 : 0) /* IFLA_NUM_VF */ 936 & RTEXT_FILTER_VF ? 4 : 0) /* IFLA_NUM_VF */
936 + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */ 937 + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */
@@ -1124,6 +1125,8 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
1124 struct ifla_vf_mac vf_mac; 1125 struct ifla_vf_mac vf_mac;
1125 struct ifla_vf_info ivi; 1126 struct ifla_vf_info ivi;
1126 1127
1128 memset(&ivi, 0, sizeof(ivi));
1129
1127 /* Not all SR-IOV capable drivers support the 1130 /* Not all SR-IOV capable drivers support the
1128 * spoofcheck and "RSS query enable" query. Preset to 1131 * spoofcheck and "RSS query enable" query. Preset to
1129 * -1 so the user space tool can detect that the driver 1132 * -1 so the user space tool can detect that the driver
@@ -1132,7 +1135,6 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
1132 ivi.spoofchk = -1; 1135 ivi.spoofchk = -1;
1133 ivi.rss_query_en = -1; 1136 ivi.rss_query_en = -1;
1134 ivi.trusted = -1; 1137 ivi.trusted = -1;
1135 memset(ivi.mac, 0, sizeof(ivi.mac));
1136 /* The default value for VF link state is "auto" 1138 /* The default value for VF link state is "auto"
1137 * IFLA_VF_LINK_STATE_AUTO which equals zero 1139 * IFLA_VF_LINK_STATE_AUTO which equals zero
1138 */ 1140 */
@@ -1467,6 +1469,7 @@ static const struct nla_policy ifla_policy[IFLA_MAX+1] = {
1467 [IFLA_LINK_NETNSID] = { .type = NLA_S32 }, 1469 [IFLA_LINK_NETNSID] = { .type = NLA_S32 },
1468 [IFLA_PROTO_DOWN] = { .type = NLA_U8 }, 1470 [IFLA_PROTO_DOWN] = { .type = NLA_U8 },
1469 [IFLA_XDP] = { .type = NLA_NESTED }, 1471 [IFLA_XDP] = { .type = NLA_NESTED },
1472 [IFLA_GROUP] = { .type = NLA_U32 },
1470}; 1473};
1471 1474
1472static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = { 1475static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
@@ -3231,8 +3234,11 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
3231 int err = 0; 3234 int err = 0;
3232 int fidx = 0; 3235 int fidx = 0;
3233 3236
3234 if (nlmsg_parse(cb->nlh, sizeof(struct ifinfomsg), tb, 3237 err = nlmsg_parse(cb->nlh, sizeof(struct ifinfomsg), tb,
3235 IFLA_MAX, ifla_policy, NULL) == 0) { 3238 IFLA_MAX, ifla_policy, NULL);
3239 if (err < 0) {
3240 return -EINVAL;
3241 } else if (err == 0) {
3236 if (tb[IFLA_MASTER]) 3242 if (tb[IFLA_MASTER])
3237 br_idx = nla_get_u32(tb[IFLA_MASTER]); 3243 br_idx = nla_get_u32(tb[IFLA_MASTER]);
3238 } 3244 }
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 346d3e85dfbc..b1be7c01efe2 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -3754,8 +3754,11 @@ struct sk_buff *sock_dequeue_err_skb(struct sock *sk)
3754 3754
3755 spin_lock_irqsave(&q->lock, flags); 3755 spin_lock_irqsave(&q->lock, flags);
3756 skb = __skb_dequeue(q); 3756 skb = __skb_dequeue(q);
3757 if (skb && (skb_next = skb_peek(q))) 3757 if (skb && (skb_next = skb_peek(q))) {
3758 icmp_next = is_icmp_err_skb(skb_next); 3758 icmp_next = is_icmp_err_skb(skb_next);
3759 if (icmp_next)
3760 sk->sk_err = SKB_EXT_ERR(skb_next)->ee.ee_origin;
3761 }
3759 spin_unlock_irqrestore(&q->lock, flags); 3762 spin_unlock_irqrestore(&q->lock, flags);
3760 3763
3761 if (is_icmp_err_skb(skb) && !icmp_next) 3764 if (is_icmp_err_skb(skb) && !icmp_next)
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
index ea23254b2457..b7cd9aafe99e 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -479,8 +479,6 @@ static __net_init int sysctl_core_net_init(struct net *net)
479{ 479{
480 struct ctl_table *tbl; 480 struct ctl_table *tbl;
481 481
482 net->core.sysctl_somaxconn = SOMAXCONN;
483
484 tbl = netns_core_table; 482 tbl = netns_core_table;
485 if (!net_eq(net, &init_net)) { 483 if (!net_eq(net, &init_net)) {
486 tbl = kmemdup(tbl, sizeof(netns_core_table), GFP_KERNEL); 484 tbl = kmemdup(tbl, sizeof(netns_core_table), GFP_KERNEL);
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
index 4b9518a0d248..6f95612b4d32 100644
--- a/net/decnet/dn_route.c
+++ b/net/decnet/dn_route.c
@@ -188,12 +188,6 @@ static inline void dnrt_free(struct dn_route *rt)
188 call_rcu_bh(&rt->dst.rcu_head, dst_rcu_free); 188 call_rcu_bh(&rt->dst.rcu_head, dst_rcu_free);
189} 189}
190 190
191static inline void dnrt_drop(struct dn_route *rt)
192{
193 dst_release(&rt->dst);
194 call_rcu_bh(&rt->dst.rcu_head, dst_rcu_free);
195}
196
197static void dn_dst_check_expire(unsigned long dummy) 191static void dn_dst_check_expire(unsigned long dummy)
198{ 192{
199 int i; 193 int i;
@@ -248,7 +242,7 @@ static int dn_dst_gc(struct dst_ops *ops)
248 } 242 }
249 *rtp = rt->dst.dn_next; 243 *rtp = rt->dst.dn_next;
250 rt->dst.dn_next = NULL; 244 rt->dst.dn_next = NULL;
251 dnrt_drop(rt); 245 dnrt_free(rt);
252 break; 246 break;
253 } 247 }
254 spin_unlock_bh(&dn_rt_hash_table[i].lock); 248 spin_unlock_bh(&dn_rt_hash_table[i].lock);
@@ -350,7 +344,7 @@ static int dn_insert_route(struct dn_route *rt, unsigned int hash, struct dn_rou
350 dst_use(&rth->dst, now); 344 dst_use(&rth->dst, now);
351 spin_unlock_bh(&dn_rt_hash_table[hash].lock); 345 spin_unlock_bh(&dn_rt_hash_table[hash].lock);
352 346
353 dnrt_drop(rt); 347 dst_free(&rt->dst);
354 *rp = rth; 348 *rp = rth;
355 return 0; 349 return 0;
356 } 350 }
@@ -380,7 +374,7 @@ static void dn_run_flush(unsigned long dummy)
380 for(; rt; rt = next) { 374 for(; rt; rt = next) {
381 next = rcu_dereference_raw(rt->dst.dn_next); 375 next = rcu_dereference_raw(rt->dst.dn_next);
382 RCU_INIT_POINTER(rt->dst.dn_next, NULL); 376 RCU_INIT_POINTER(rt->dst.dn_next, NULL);
383 dst_free((struct dst_entry *)rt); 377 dnrt_free(rt);
384 } 378 }
385 379
386nothing_to_declare: 380nothing_to_declare:
@@ -1187,7 +1181,7 @@ make_route:
1187 if (dev_out->flags & IFF_LOOPBACK) 1181 if (dev_out->flags & IFF_LOOPBACK)
1188 flags |= RTCF_LOCAL; 1182 flags |= RTCF_LOCAL;
1189 1183
1190 rt = dst_alloc(&dn_dst_ops, dev_out, 1, DST_OBSOLETE_NONE, DST_HOST); 1184 rt = dst_alloc(&dn_dst_ops, dev_out, 0, DST_OBSOLETE_NONE, DST_HOST);
1191 if (rt == NULL) 1185 if (rt == NULL)
1192 goto e_nobufs; 1186 goto e_nobufs;
1193 1187
diff --git a/net/decnet/netfilter/dn_rtmsg.c b/net/decnet/netfilter/dn_rtmsg.c
index 1ed81ac6dd1a..aa8ffecc46a4 100644
--- a/net/decnet/netfilter/dn_rtmsg.c
+++ b/net/decnet/netfilter/dn_rtmsg.c
@@ -102,7 +102,9 @@ static inline void dnrmg_receive_user_skb(struct sk_buff *skb)
102{ 102{
103 struct nlmsghdr *nlh = nlmsg_hdr(skb); 103 struct nlmsghdr *nlh = nlmsg_hdr(skb);
104 104
105 if (nlh->nlmsg_len < sizeof(*nlh) || skb->len < nlh->nlmsg_len) 105 if (skb->len < sizeof(*nlh) ||
106 nlh->nlmsg_len < sizeof(*nlh) ||
107 skb->len < nlh->nlmsg_len)
106 return; 108 return;
107 109
108 if (!netlink_capable(skb, CAP_NET_ADMIN)) 110 if (!netlink_capable(skb, CAP_NET_ADMIN))
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index 26130ae438da..90038d45a547 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -223,6 +223,53 @@ static int dsa_switch_rcv(struct sk_buff *skb, struct net_device *dev,
223 return 0; 223 return 0;
224} 224}
225 225
226#ifdef CONFIG_PM_SLEEP
227int dsa_switch_suspend(struct dsa_switch *ds)
228{
229 int i, ret = 0;
230
231 /* Suspend slave network devices */
232 for (i = 0; i < ds->num_ports; i++) {
233 if (!dsa_is_port_initialized(ds, i))
234 continue;
235
236 ret = dsa_slave_suspend(ds->ports[i].netdev);
237 if (ret)
238 return ret;
239 }
240
241 if (ds->ops->suspend)
242 ret = ds->ops->suspend(ds);
243
244 return ret;
245}
246EXPORT_SYMBOL_GPL(dsa_switch_suspend);
247
248int dsa_switch_resume(struct dsa_switch *ds)
249{
250 int i, ret = 0;
251
252 if (ds->ops->resume)
253 ret = ds->ops->resume(ds);
254
255 if (ret)
256 return ret;
257
258 /* Resume slave network devices */
259 for (i = 0; i < ds->num_ports; i++) {
260 if (!dsa_is_port_initialized(ds, i))
261 continue;
262
263 ret = dsa_slave_resume(ds->ports[i].netdev);
264 if (ret)
265 return ret;
266 }
267
268 return 0;
269}
270EXPORT_SYMBOL_GPL(dsa_switch_resume);
271#endif
272
226static struct packet_type dsa_pack_type __read_mostly = { 273static struct packet_type dsa_pack_type __read_mostly = {
227 .type = cpu_to_be16(ETH_P_XDSA), 274 .type = cpu_to_be16(ETH_P_XDSA),
228 .func = dsa_switch_rcv, 275 .func = dsa_switch_rcv,
diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index 033b3bfb63dc..7796580e99ee 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -484,8 +484,10 @@ static void dsa_dst_unapply(struct dsa_switch_tree *dst)
484 dsa_ds_unapply(dst, ds); 484 dsa_ds_unapply(dst, ds);
485 } 485 }
486 486
487 if (dst->cpu_switch) 487 if (dst->cpu_switch) {
488 dsa_cpu_port_ethtool_restore(dst->cpu_switch); 488 dsa_cpu_port_ethtool_restore(dst->cpu_switch);
489 dst->cpu_switch = NULL;
490 }
489 491
490 pr_info("DSA: tree %d unapplied\n", dst->tree); 492 pr_info("DSA: tree %d unapplied\n", dst->tree);
491 dst->applied = false; 493 dst->applied = false;
diff --git a/net/dsa/legacy.c b/net/dsa/legacy.c
index ad345c8b0b06..7281098df04e 100644
--- a/net/dsa/legacy.c
+++ b/net/dsa/legacy.c
@@ -289,53 +289,6 @@ static void dsa_switch_destroy(struct dsa_switch *ds)
289 dsa_switch_unregister_notifier(ds); 289 dsa_switch_unregister_notifier(ds);
290} 290}
291 291
292#ifdef CONFIG_PM_SLEEP
293int dsa_switch_suspend(struct dsa_switch *ds)
294{
295 int i, ret = 0;
296
297 /* Suspend slave network devices */
298 for (i = 0; i < ds->num_ports; i++) {
299 if (!dsa_is_port_initialized(ds, i))
300 continue;
301
302 ret = dsa_slave_suspend(ds->ports[i].netdev);
303 if (ret)
304 return ret;
305 }
306
307 if (ds->ops->suspend)
308 ret = ds->ops->suspend(ds);
309
310 return ret;
311}
312EXPORT_SYMBOL_GPL(dsa_switch_suspend);
313
314int dsa_switch_resume(struct dsa_switch *ds)
315{
316 int i, ret = 0;
317
318 if (ds->ops->resume)
319 ret = ds->ops->resume(ds);
320
321 if (ret)
322 return ret;
323
324 /* Resume slave network devices */
325 for (i = 0; i < ds->num_ports; i++) {
326 if (!dsa_is_port_initialized(ds, i))
327 continue;
328
329 ret = dsa_slave_resume(ds->ports[i].netdev);
330 if (ret)
331 return ret;
332 }
333
334 return 0;
335}
336EXPORT_SYMBOL_GPL(dsa_switch_resume);
337#endif
338
339/* platform driver init and cleanup *****************************************/ 292/* platform driver init and cleanup *****************************************/
340static int dev_is_class(struct device *dev, void *class) 293static int dev_is_class(struct device *dev, void *class)
341{ 294{
diff --git a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c
index c73160fb11e7..0a0a392dc2bd 100644
--- a/net/hsr/hsr_device.c
+++ b/net/hsr/hsr_device.c
@@ -378,7 +378,6 @@ static void hsr_dev_destroy(struct net_device *hsr_dev)
378 del_timer_sync(&hsr->announce_timer); 378 del_timer_sync(&hsr->announce_timer);
379 379
380 synchronize_rcu(); 380 synchronize_rcu();
381 free_netdev(hsr_dev);
382} 381}
383 382
384static const struct net_device_ops hsr_device_ops = { 383static const struct net_device_ops hsr_device_ops = {
@@ -404,7 +403,8 @@ void hsr_dev_setup(struct net_device *dev)
404 SET_NETDEV_DEVTYPE(dev, &hsr_type); 403 SET_NETDEV_DEVTYPE(dev, &hsr_type);
405 dev->priv_flags |= IFF_NO_QUEUE; 404 dev->priv_flags |= IFF_NO_QUEUE;
406 405
407 dev->destructor = hsr_dev_destroy; 406 dev->needs_free_netdev = true;
407 dev->priv_destructor = hsr_dev_destroy;
408 408
409 dev->hw_features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | 409 dev->hw_features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA |
410 NETIF_F_GSO_MASK | NETIF_F_HW_CSUM | 410 NETIF_F_GSO_MASK | NETIF_F_HW_CSUM |
diff --git a/net/hsr/hsr_forward.c b/net/hsr/hsr_forward.c
index 4ebe2aa3e7d3..04b5450c5a55 100644
--- a/net/hsr/hsr_forward.c
+++ b/net/hsr/hsr_forward.c
@@ -324,8 +324,7 @@ static int hsr_fill_frame_info(struct hsr_frame_info *frame,
324 unsigned long irqflags; 324 unsigned long irqflags;
325 325
326 frame->is_supervision = is_supervision_frame(port->hsr, skb); 326 frame->is_supervision = is_supervision_frame(port->hsr, skb);
327 frame->node_src = hsr_get_node(&port->hsr->node_db, skb, 327 frame->node_src = hsr_get_node(port, skb, frame->is_supervision);
328 frame->is_supervision);
329 if (frame->node_src == NULL) 328 if (frame->node_src == NULL)
330 return -1; /* Unknown node and !is_supervision, or no mem */ 329 return -1; /* Unknown node and !is_supervision, or no mem */
331 330
diff --git a/net/hsr/hsr_framereg.c b/net/hsr/hsr_framereg.c
index 7ea925816f79..284a9b820df8 100644
--- a/net/hsr/hsr_framereg.c
+++ b/net/hsr/hsr_framereg.c
@@ -158,9 +158,10 @@ struct hsr_node *hsr_add_node(struct list_head *node_db, unsigned char addr[],
158 158
159/* Get the hsr_node from which 'skb' was sent. 159/* Get the hsr_node from which 'skb' was sent.
160 */ 160 */
161struct hsr_node *hsr_get_node(struct list_head *node_db, struct sk_buff *skb, 161struct hsr_node *hsr_get_node(struct hsr_port *port, struct sk_buff *skb,
162 bool is_sup) 162 bool is_sup)
163{ 163{
164 struct list_head *node_db = &port->hsr->node_db;
164 struct hsr_node *node; 165 struct hsr_node *node;
165 struct ethhdr *ethhdr; 166 struct ethhdr *ethhdr;
166 u16 seq_out; 167 u16 seq_out;
@@ -186,7 +187,11 @@ struct hsr_node *hsr_get_node(struct list_head *node_db, struct sk_buff *skb,
186 */ 187 */
187 seq_out = hsr_get_skb_sequence_nr(skb) - 1; 188 seq_out = hsr_get_skb_sequence_nr(skb) - 1;
188 } else { 189 } else {
189 WARN_ONCE(1, "%s: Non-HSR frame\n", __func__); 190 /* this is called also for frames from master port and
191 * so warn only for non master ports
192 */
193 if (port->type != HSR_PT_MASTER)
194 WARN_ONCE(1, "%s: Non-HSR frame\n", __func__);
190 seq_out = HSR_SEQNR_START; 195 seq_out = HSR_SEQNR_START;
191 } 196 }
192 197
diff --git a/net/hsr/hsr_framereg.h b/net/hsr/hsr_framereg.h
index 438b40f98f5a..4e04f0e868e9 100644
--- a/net/hsr/hsr_framereg.h
+++ b/net/hsr/hsr_framereg.h
@@ -18,7 +18,7 @@ struct hsr_node;
18 18
19struct hsr_node *hsr_add_node(struct list_head *node_db, unsigned char addr[], 19struct hsr_node *hsr_add_node(struct list_head *node_db, unsigned char addr[],
20 u16 seq_out); 20 u16 seq_out);
21struct hsr_node *hsr_get_node(struct list_head *node_db, struct sk_buff *skb, 21struct hsr_node *hsr_get_node(struct hsr_port *port, struct sk_buff *skb,
22 bool is_sup); 22 bool is_sup);
23void hsr_handle_sup_frame(struct sk_buff *skb, struct hsr_node *node_curr, 23void hsr_handle_sup_frame(struct sk_buff *skb, struct hsr_node *node_curr,
24 struct hsr_port *port); 24 struct hsr_port *port);
diff --git a/net/ieee802154/6lowpan/core.c b/net/ieee802154/6lowpan/core.c
index d7efbf0dad20..0a866f332290 100644
--- a/net/ieee802154/6lowpan/core.c
+++ b/net/ieee802154/6lowpan/core.c
@@ -107,7 +107,7 @@ static void lowpan_setup(struct net_device *ldev)
107 107
108 ldev->netdev_ops = &lowpan_netdev_ops; 108 ldev->netdev_ops = &lowpan_netdev_ops;
109 ldev->header_ops = &lowpan_header_ops; 109 ldev->header_ops = &lowpan_header_ops;
110 ldev->destructor = free_netdev; 110 ldev->needs_free_netdev = true;
111 ldev->features |= NETIF_F_NETNS_LOCAL; 111 ldev->features |= NETIF_F_NETNS_LOCAL;
112} 112}
113 113
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index f3dad1661343..58925b6597de 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -1043,7 +1043,7 @@ static struct inet_protosw inetsw_array[] =
1043 .type = SOCK_DGRAM, 1043 .type = SOCK_DGRAM,
1044 .protocol = IPPROTO_ICMP, 1044 .protocol = IPPROTO_ICMP,
1045 .prot = &ping_prot, 1045 .prot = &ping_prot,
1046 .ops = &inet_dgram_ops, 1046 .ops = &inet_sockraw_ops,
1047 .flags = INET_PROTOSW_REUSE, 1047 .flags = INET_PROTOSW_REUSE,
1048 }, 1048 },
1049 1049
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index d54345a06f72..e9f3386a528b 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -641,6 +641,32 @@ void arp_xmit(struct sk_buff *skb)
641} 641}
642EXPORT_SYMBOL(arp_xmit); 642EXPORT_SYMBOL(arp_xmit);
643 643
644static bool arp_is_garp(struct net *net, struct net_device *dev,
645 int *addr_type, __be16 ar_op,
646 __be32 sip, __be32 tip,
647 unsigned char *sha, unsigned char *tha)
648{
649 bool is_garp = tip == sip;
650
651 /* Gratuitous ARP _replies_ also require target hwaddr to be
652 * the same as source.
653 */
654 if (is_garp && ar_op == htons(ARPOP_REPLY))
655 is_garp =
656 /* IPv4 over IEEE 1394 doesn't provide target
657 * hardware address field in its ARP payload.
658 */
659 tha &&
660 !memcmp(tha, sha, dev->addr_len);
661
662 if (is_garp) {
663 *addr_type = inet_addr_type_dev_table(net, dev, sip);
664 if (*addr_type != RTN_UNICAST)
665 is_garp = false;
666 }
667 return is_garp;
668}
669
644/* 670/*
645 * Process an arp request. 671 * Process an arp request.
646 */ 672 */
@@ -837,29 +863,25 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
837 863
838 n = __neigh_lookup(&arp_tbl, &sip, dev, 0); 864 n = __neigh_lookup(&arp_tbl, &sip, dev, 0);
839 865
840 if (IN_DEV_ARP_ACCEPT(in_dev)) { 866 addr_type = -1;
841 unsigned int addr_type = inet_addr_type_dev_table(net, dev, sip); 867 if (n || IN_DEV_ARP_ACCEPT(in_dev)) {
868 is_garp = arp_is_garp(net, dev, &addr_type, arp->ar_op,
869 sip, tip, sha, tha);
870 }
842 871
872 if (IN_DEV_ARP_ACCEPT(in_dev)) {
843 /* Unsolicited ARP is not accepted by default. 873 /* Unsolicited ARP is not accepted by default.
844 It is possible, that this option should be enabled for some 874 It is possible, that this option should be enabled for some
845 devices (strip is candidate) 875 devices (strip is candidate)
846 */ 876 */
847 is_garp = tip == sip && addr_type == RTN_UNICAST;
848
849 /* Unsolicited ARP _replies_ also require target hwaddr to be
850 * the same as source.
851 */
852 if (is_garp && arp->ar_op == htons(ARPOP_REPLY))
853 is_garp =
854 /* IPv4 over IEEE 1394 doesn't provide target
855 * hardware address field in its ARP payload.
856 */
857 tha &&
858 !memcmp(tha, sha, dev->addr_len);
859
860 if (!n && 877 if (!n &&
861 ((arp->ar_op == htons(ARPOP_REPLY) && 878 (is_garp ||
862 addr_type == RTN_UNICAST) || is_garp)) 879 (arp->ar_op == htons(ARPOP_REPLY) &&
880 (addr_type == RTN_UNICAST ||
881 (addr_type < 0 &&
882 /* postpone calculation to as late as possible */
883 inet_addr_type_dev_table(net, dev, sip) ==
884 RTN_UNICAST)))))
863 n = __neigh_lookup(&arp_tbl, &sip, dev, 1); 885 n = __neigh_lookup(&arp_tbl, &sip, dev, 1);
864 } 886 }
865 887
diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c
index 65cc02bd82bc..93322f895eab 100644
--- a/net/ipv4/esp4.c
+++ b/net/ipv4/esp4.c
@@ -248,6 +248,7 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *
248 u8 *tail; 248 u8 *tail;
249 u8 *vaddr; 249 u8 *vaddr;
250 int nfrags; 250 int nfrags;
251 int esph_offset;
251 struct page *page; 252 struct page *page;
252 struct sk_buff *trailer; 253 struct sk_buff *trailer;
253 int tailen = esp->tailen; 254 int tailen = esp->tailen;
@@ -313,11 +314,13 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *
313 } 314 }
314 315
315cow: 316cow:
317 esph_offset = (unsigned char *)esp->esph - skb_transport_header(skb);
318
316 nfrags = skb_cow_data(skb, tailen, &trailer); 319 nfrags = skb_cow_data(skb, tailen, &trailer);
317 if (nfrags < 0) 320 if (nfrags < 0)
318 goto out; 321 goto out;
319 tail = skb_tail_pointer(trailer); 322 tail = skb_tail_pointer(trailer);
320 esp->esph = ip_esp_hdr(skb); 323 esp->esph = (struct ip_esp_hdr *)(skb_transport_header(skb) + esph_offset);
321 324
322skip_cow: 325skip_cow:
323 esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto); 326 esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto);
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index da449ddb8cc1..ad9ad4aab5da 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -203,6 +203,7 @@ static void rt_fibinfo_free_cpus(struct rtable __rcu * __percpu *rtp)
203static void free_fib_info_rcu(struct rcu_head *head) 203static void free_fib_info_rcu(struct rcu_head *head)
204{ 204{
205 struct fib_info *fi = container_of(head, struct fib_info, rcu); 205 struct fib_info *fi = container_of(head, struct fib_info, rcu);
206 struct dst_metrics *m;
206 207
207 change_nexthops(fi) { 208 change_nexthops(fi) {
208 if (nexthop_nh->nh_dev) 209 if (nexthop_nh->nh_dev)
@@ -213,8 +214,9 @@ static void free_fib_info_rcu(struct rcu_head *head)
213 rt_fibinfo_free(&nexthop_nh->nh_rth_input); 214 rt_fibinfo_free(&nexthop_nh->nh_rth_input);
214 } endfor_nexthops(fi); 215 } endfor_nexthops(fi);
215 216
216 if (fi->fib_metrics != (u32 *) dst_default_metrics) 217 m = fi->fib_metrics;
217 kfree(fi->fib_metrics); 218 if (m != &dst_default_metrics && atomic_dec_and_test(&m->refcnt))
219 kfree(m);
218 kfree(fi); 220 kfree(fi);
219} 221}
220 222
@@ -971,11 +973,11 @@ fib_convert_metrics(struct fib_info *fi, const struct fib_config *cfg)
971 val = 255; 973 val = 255;
972 if (type == RTAX_FEATURES && (val & ~RTAX_FEATURE_MASK)) 974 if (type == RTAX_FEATURES && (val & ~RTAX_FEATURE_MASK))
973 return -EINVAL; 975 return -EINVAL;
974 fi->fib_metrics[type - 1] = val; 976 fi->fib_metrics->metrics[type - 1] = val;
975 } 977 }
976 978
977 if (ecn_ca) 979 if (ecn_ca)
978 fi->fib_metrics[RTAX_FEATURES - 1] |= DST_FEATURE_ECN_CA; 980 fi->fib_metrics->metrics[RTAX_FEATURES - 1] |= DST_FEATURE_ECN_CA;
979 981
980 return 0; 982 return 0;
981} 983}
@@ -1033,11 +1035,12 @@ struct fib_info *fib_create_info(struct fib_config *cfg)
1033 goto failure; 1035 goto failure;
1034 fib_info_cnt++; 1036 fib_info_cnt++;
1035 if (cfg->fc_mx) { 1037 if (cfg->fc_mx) {
1036 fi->fib_metrics = kzalloc(sizeof(u32) * RTAX_MAX, GFP_KERNEL); 1038 fi->fib_metrics = kzalloc(sizeof(*fi->fib_metrics), GFP_KERNEL);
1037 if (!fi->fib_metrics) 1039 if (!fi->fib_metrics)
1038 goto failure; 1040 goto failure;
1041 atomic_set(&fi->fib_metrics->refcnt, 1);
1039 } else 1042 } else
1040 fi->fib_metrics = (u32 *) dst_default_metrics; 1043 fi->fib_metrics = (struct dst_metrics *)&dst_default_metrics;
1041 1044
1042 fi->fib_net = net; 1045 fi->fib_net = net;
1043 fi->fib_protocol = cfg->fc_protocol; 1046 fi->fib_protocol = cfg->fc_protocol;
@@ -1238,7 +1241,7 @@ int fib_dump_info(struct sk_buff *skb, u32 portid, u32 seq, int event,
1238 if (fi->fib_priority && 1241 if (fi->fib_priority &&
1239 nla_put_u32(skb, RTA_PRIORITY, fi->fib_priority)) 1242 nla_put_u32(skb, RTA_PRIORITY, fi->fib_priority))
1240 goto nla_put_failure; 1243 goto nla_put_failure;
1241 if (rtnetlink_put_metrics(skb, fi->fib_metrics) < 0) 1244 if (rtnetlink_put_metrics(skb, fi->fib_metrics->metrics) < 0)
1242 goto nla_put_failure; 1245 goto nla_put_failure;
1243 1246
1244 if (fi->fib_prefsrc && 1247 if (fi->fib_prefsrc &&
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index 43318b5f5647..9144fa7df2ad 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -657,8 +657,12 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
657 /* Needed by both icmp_global_allow and icmp_xmit_lock */ 657 /* Needed by both icmp_global_allow and icmp_xmit_lock */
658 local_bh_disable(); 658 local_bh_disable();
659 659
660 /* Check global sysctl_icmp_msgs_per_sec ratelimit */ 660 /* Check global sysctl_icmp_msgs_per_sec ratelimit, unless
661 if (!icmpv4_global_allow(net, type, code)) 661 * incoming dev is loopback. If outgoing dev change to not be
662 * loopback, then peer ratelimit still work (in icmpv4_xrlim_allow)
663 */
664 if (!(skb_in->dev && (skb_in->dev->flags&IFF_LOOPBACK)) &&
665 !icmpv4_global_allow(net, type, code))
662 goto out_bh_enable; 666 goto out_bh_enable;
663 667
664 sk = icmp_xmit_lock(net); 668 sk = icmp_xmit_lock(net);
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index 44fd86de2823..ec9a396fa466 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -1112,6 +1112,7 @@ static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im)
1112 pmc = kzalloc(sizeof(*pmc), GFP_KERNEL); 1112 pmc = kzalloc(sizeof(*pmc), GFP_KERNEL);
1113 if (!pmc) 1113 if (!pmc)
1114 return; 1114 return;
1115 spin_lock_init(&pmc->lock);
1115 spin_lock_bh(&im->lock); 1116 spin_lock_bh(&im->lock);
1116 pmc->interface = im->interface; 1117 pmc->interface = im->interface;
1117 in_dev_hold(in_dev); 1118 in_dev_hold(in_dev);
@@ -2071,21 +2072,26 @@ static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
2071 2072
2072static void ip_mc_clear_src(struct ip_mc_list *pmc) 2073static void ip_mc_clear_src(struct ip_mc_list *pmc)
2073{ 2074{
2074 struct ip_sf_list *psf, *nextpsf; 2075 struct ip_sf_list *psf, *nextpsf, *tomb, *sources;
2075 2076
2076 for (psf = pmc->tomb; psf; psf = nextpsf) { 2077 spin_lock_bh(&pmc->lock);
2078 tomb = pmc->tomb;
2079 pmc->tomb = NULL;
2080 sources = pmc->sources;
2081 pmc->sources = NULL;
2082 pmc->sfmode = MCAST_EXCLUDE;
2083 pmc->sfcount[MCAST_INCLUDE] = 0;
2084 pmc->sfcount[MCAST_EXCLUDE] = 1;
2085 spin_unlock_bh(&pmc->lock);
2086
2087 for (psf = tomb; psf; psf = nextpsf) {
2077 nextpsf = psf->sf_next; 2088 nextpsf = psf->sf_next;
2078 kfree(psf); 2089 kfree(psf);
2079 } 2090 }
2080 pmc->tomb = NULL; 2091 for (psf = sources; psf; psf = nextpsf) {
2081 for (psf = pmc->sources; psf; psf = nextpsf) {
2082 nextpsf = psf->sf_next; 2092 nextpsf = psf->sf_next;
2083 kfree(psf); 2093 kfree(psf);
2084 } 2094 }
2085 pmc->sources = NULL;
2086 pmc->sfmode = MCAST_EXCLUDE;
2087 pmc->sfcount[MCAST_INCLUDE] = 0;
2088 pmc->sfcount[MCAST_EXCLUDE] = 1;
2089} 2095}
2090 2096
2091/* Join a multicast group 2097/* Join a multicast group
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 7a3fd25e8913..532b36e9ce2a 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -964,7 +964,8 @@ static int __ip_append_data(struct sock *sk,
964 csummode = CHECKSUM_PARTIAL; 964 csummode = CHECKSUM_PARTIAL;
965 965
966 cork->length += length; 966 cork->length += length;
967 if ((((length + fragheaderlen) > mtu) || (skb && skb_is_gso(skb))) && 967 if ((((length + (skb ? skb->len : fragheaderlen)) > mtu) ||
968 (skb && skb_is_gso(skb))) &&
968 (sk->sk_protocol == IPPROTO_UDP) && 969 (sk->sk_protocol == IPPROTO_UDP) &&
969 (rt->dst.dev->features & NETIF_F_UFO) && !dst_xfrm(&rt->dst) && 970 (rt->dst.dev->features & NETIF_F_UFO) && !dst_xfrm(&rt->dst) &&
970 (sk->sk_type == SOCK_DGRAM) && !sk->sk_no_check_tx) { 971 (sk->sk_type == SOCK_DGRAM) && !sk->sk_no_check_tx) {
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
index b878ecbc0608..129d1a3616f8 100644
--- a/net/ipv4/ip_tunnel.c
+++ b/net/ipv4/ip_tunnel.c
@@ -446,6 +446,8 @@ int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
446 return 0; 446 return 0;
447 447
448drop: 448drop:
449 if (tun_dst)
450 dst_release((struct dst_entry *)tun_dst);
449 kfree_skb(skb); 451 kfree_skb(skb);
450 return 0; 452 return 0;
451} 453}
@@ -967,7 +969,6 @@ static void ip_tunnel_dev_free(struct net_device *dev)
967 gro_cells_destroy(&tunnel->gro_cells); 969 gro_cells_destroy(&tunnel->gro_cells);
968 dst_cache_destroy(&tunnel->dst_cache); 970 dst_cache_destroy(&tunnel->dst_cache);
969 free_percpu(dev->tstats); 971 free_percpu(dev->tstats);
970 free_netdev(dev);
971} 972}
972 973
973void ip_tunnel_dellink(struct net_device *dev, struct list_head *head) 974void ip_tunnel_dellink(struct net_device *dev, struct list_head *head)
@@ -1155,7 +1156,8 @@ int ip_tunnel_init(struct net_device *dev)
1155 struct iphdr *iph = &tunnel->parms.iph; 1156 struct iphdr *iph = &tunnel->parms.iph;
1156 int err; 1157 int err;
1157 1158
1158 dev->destructor = ip_tunnel_dev_free; 1159 dev->needs_free_netdev = true;
1160 dev->priv_destructor = ip_tunnel_dev_free;
1159 dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); 1161 dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
1160 if (!dev->tstats) 1162 if (!dev->tstats)
1161 return -ENOMEM; 1163 return -ENOMEM;
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
index 551de4d023a8..8ae425cad818 100644
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
@@ -101,8 +101,8 @@ static struct mr_table *ipmr_new_table(struct net *net, u32 id);
101static void ipmr_free_table(struct mr_table *mrt); 101static void ipmr_free_table(struct mr_table *mrt);
102 102
103static void ip_mr_forward(struct net *net, struct mr_table *mrt, 103static void ip_mr_forward(struct net *net, struct mr_table *mrt,
104 struct sk_buff *skb, struct mfc_cache *cache, 104 struct net_device *dev, struct sk_buff *skb,
105 int local); 105 struct mfc_cache *cache, int local);
106static int ipmr_cache_report(struct mr_table *mrt, 106static int ipmr_cache_report(struct mr_table *mrt,
107 struct sk_buff *pkt, vifi_t vifi, int assert); 107 struct sk_buff *pkt, vifi_t vifi, int assert);
108static int __ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb, 108static int __ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
@@ -501,7 +501,7 @@ static void reg_vif_setup(struct net_device *dev)
501 dev->mtu = ETH_DATA_LEN - sizeof(struct iphdr) - 8; 501 dev->mtu = ETH_DATA_LEN - sizeof(struct iphdr) - 8;
502 dev->flags = IFF_NOARP; 502 dev->flags = IFF_NOARP;
503 dev->netdev_ops = &reg_vif_netdev_ops; 503 dev->netdev_ops = &reg_vif_netdev_ops;
504 dev->destructor = free_netdev; 504 dev->needs_free_netdev = true;
505 dev->features |= NETIF_F_NETNS_LOCAL; 505 dev->features |= NETIF_F_NETNS_LOCAL;
506} 506}
507 507
@@ -988,7 +988,7 @@ static void ipmr_cache_resolve(struct net *net, struct mr_table *mrt,
988 988
989 rtnl_unicast(skb, net, NETLINK_CB(skb).portid); 989 rtnl_unicast(skb, net, NETLINK_CB(skb).portid);
990 } else { 990 } else {
991 ip_mr_forward(net, mrt, skb, c, 0); 991 ip_mr_forward(net, mrt, skb->dev, skb, c, 0);
992 } 992 }
993 } 993 }
994} 994}
@@ -1073,7 +1073,7 @@ static int ipmr_cache_report(struct mr_table *mrt,
1073 1073
1074/* Queue a packet for resolution. It gets locked cache entry! */ 1074/* Queue a packet for resolution. It gets locked cache entry! */
1075static int ipmr_cache_unresolved(struct mr_table *mrt, vifi_t vifi, 1075static int ipmr_cache_unresolved(struct mr_table *mrt, vifi_t vifi,
1076 struct sk_buff *skb) 1076 struct sk_buff *skb, struct net_device *dev)
1077{ 1077{
1078 const struct iphdr *iph = ip_hdr(skb); 1078 const struct iphdr *iph = ip_hdr(skb);
1079 struct mfc_cache *c; 1079 struct mfc_cache *c;
@@ -1130,6 +1130,10 @@ static int ipmr_cache_unresolved(struct mr_table *mrt, vifi_t vifi,
1130 kfree_skb(skb); 1130 kfree_skb(skb);
1131 err = -ENOBUFS; 1131 err = -ENOBUFS;
1132 } else { 1132 } else {
1133 if (dev) {
1134 skb->dev = dev;
1135 skb->skb_iif = dev->ifindex;
1136 }
1133 skb_queue_tail(&c->mfc_un.unres.unresolved, skb); 1137 skb_queue_tail(&c->mfc_un.unres.unresolved, skb);
1134 err = 0; 1138 err = 0;
1135 } 1139 }
@@ -1828,10 +1832,10 @@ static int ipmr_find_vif(struct mr_table *mrt, struct net_device *dev)
1828 1832
1829/* "local" means that we should preserve one skb (for local delivery) */ 1833/* "local" means that we should preserve one skb (for local delivery) */
1830static void ip_mr_forward(struct net *net, struct mr_table *mrt, 1834static void ip_mr_forward(struct net *net, struct mr_table *mrt,
1831 struct sk_buff *skb, struct mfc_cache *cache, 1835 struct net_device *dev, struct sk_buff *skb,
1832 int local) 1836 struct mfc_cache *cache, int local)
1833{ 1837{
1834 int true_vifi = ipmr_find_vif(mrt, skb->dev); 1838 int true_vifi = ipmr_find_vif(mrt, dev);
1835 int psend = -1; 1839 int psend = -1;
1836 int vif, ct; 1840 int vif, ct;
1837 1841
@@ -1853,13 +1857,7 @@ static void ip_mr_forward(struct net *net, struct mr_table *mrt,
1853 } 1857 }
1854 1858
1855 /* Wrong interface: drop packet and (maybe) send PIM assert. */ 1859 /* Wrong interface: drop packet and (maybe) send PIM assert. */
1856 if (mrt->vif_table[vif].dev != skb->dev) { 1860 if (mrt->vif_table[vif].dev != dev) {
1857 struct net_device *mdev;
1858
1859 mdev = l3mdev_master_dev_rcu(mrt->vif_table[vif].dev);
1860 if (mdev == skb->dev)
1861 goto forward;
1862
1863 if (rt_is_output_route(skb_rtable(skb))) { 1861 if (rt_is_output_route(skb_rtable(skb))) {
1864 /* It is our own packet, looped back. 1862 /* It is our own packet, looped back.
1865 * Very complicated situation... 1863 * Very complicated situation...
@@ -2053,7 +2051,7 @@ int ip_mr_input(struct sk_buff *skb)
2053 read_lock(&mrt_lock); 2051 read_lock(&mrt_lock);
2054 vif = ipmr_find_vif(mrt, dev); 2052 vif = ipmr_find_vif(mrt, dev);
2055 if (vif >= 0) { 2053 if (vif >= 0) {
2056 int err2 = ipmr_cache_unresolved(mrt, vif, skb); 2054 int err2 = ipmr_cache_unresolved(mrt, vif, skb, dev);
2057 read_unlock(&mrt_lock); 2055 read_unlock(&mrt_lock);
2058 2056
2059 return err2; 2057 return err2;
@@ -2064,7 +2062,7 @@ int ip_mr_input(struct sk_buff *skb)
2064 } 2062 }
2065 2063
2066 read_lock(&mrt_lock); 2064 read_lock(&mrt_lock);
2067 ip_mr_forward(net, mrt, skb, cache, local); 2065 ip_mr_forward(net, mrt, dev, skb, cache, local);
2068 read_unlock(&mrt_lock); 2066 read_unlock(&mrt_lock);
2069 2067
2070 if (local) 2068 if (local)
@@ -2238,7 +2236,7 @@ int ipmr_get_route(struct net *net, struct sk_buff *skb,
2238 iph->saddr = saddr; 2236 iph->saddr = saddr;
2239 iph->daddr = daddr; 2237 iph->daddr = daddr;
2240 iph->version = 0; 2238 iph->version = 0;
2241 err = ipmr_cache_unresolved(mrt, vif, skb2); 2239 err = ipmr_cache_unresolved(mrt, vif, skb2, dev);
2242 read_unlock(&mrt_lock); 2240 read_unlock(&mrt_lock);
2243 rcu_read_unlock(); 2241 rcu_read_unlock();
2244 return err; 2242 return err;
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 655d9eebe43e..6883b3d4ba8f 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1385,8 +1385,12 @@ static void rt_add_uncached_list(struct rtable *rt)
1385 1385
1386static void ipv4_dst_destroy(struct dst_entry *dst) 1386static void ipv4_dst_destroy(struct dst_entry *dst)
1387{ 1387{
1388 struct dst_metrics *p = (struct dst_metrics *)DST_METRICS_PTR(dst);
1388 struct rtable *rt = (struct rtable *) dst; 1389 struct rtable *rt = (struct rtable *) dst;
1389 1390
1391 if (p != &dst_default_metrics && atomic_dec_and_test(&p->refcnt))
1392 kfree(p);
1393
1390 if (!list_empty(&rt->rt_uncached)) { 1394 if (!list_empty(&rt->rt_uncached)) {
1391 struct uncached_list *ul = rt->rt_uncached_list; 1395 struct uncached_list *ul = rt->rt_uncached_list;
1392 1396
@@ -1438,7 +1442,11 @@ static void rt_set_nexthop(struct rtable *rt, __be32 daddr,
1438 rt->rt_gateway = nh->nh_gw; 1442 rt->rt_gateway = nh->nh_gw;
1439 rt->rt_uses_gateway = 1; 1443 rt->rt_uses_gateway = 1;
1440 } 1444 }
1441 dst_init_metrics(&rt->dst, fi->fib_metrics, true); 1445 dst_init_metrics(&rt->dst, fi->fib_metrics->metrics, true);
1446 if (fi->fib_metrics != &dst_default_metrics) {
1447 rt->dst._metrics |= DST_METRICS_REFCOUNTED;
1448 atomic_inc(&fi->fib_metrics->refcnt);
1449 }
1442#ifdef CONFIG_IP_ROUTE_CLASSID 1450#ifdef CONFIG_IP_ROUTE_CLASSID
1443 rt->dst.tclassid = nh->nh_tclassid; 1451 rt->dst.tclassid = nh->nh_tclassid;
1444#endif 1452#endif
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 1e4c76d2b827..40aca7803cf2 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1084,9 +1084,12 @@ static int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg,
1084{ 1084{
1085 struct tcp_sock *tp = tcp_sk(sk); 1085 struct tcp_sock *tp = tcp_sk(sk);
1086 struct inet_sock *inet = inet_sk(sk); 1086 struct inet_sock *inet = inet_sk(sk);
1087 struct sockaddr *uaddr = msg->msg_name;
1087 int err, flags; 1088 int err, flags;
1088 1089
1089 if (!(sysctl_tcp_fastopen & TFO_CLIENT_ENABLE)) 1090 if (!(sysctl_tcp_fastopen & TFO_CLIENT_ENABLE) ||
1091 (uaddr && msg->msg_namelen >= sizeof(uaddr->sa_family) &&
1092 uaddr->sa_family == AF_UNSPEC))
1090 return -EOPNOTSUPP; 1093 return -EOPNOTSUPP;
1091 if (tp->fastopen_req) 1094 if (tp->fastopen_req)
1092 return -EALREADY; /* Another Fast Open is in progress */ 1095 return -EALREADY; /* Another Fast Open is in progress */
@@ -1108,7 +1111,7 @@ static int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg,
1108 } 1111 }
1109 } 1112 }
1110 flags = (msg->msg_flags & MSG_DONTWAIT) ? O_NONBLOCK : 0; 1113 flags = (msg->msg_flags & MSG_DONTWAIT) ? O_NONBLOCK : 0;
1111 err = __inet_stream_connect(sk->sk_socket, msg->msg_name, 1114 err = __inet_stream_connect(sk->sk_socket, uaddr,
1112 msg->msg_namelen, flags, 1); 1115 msg->msg_namelen, flags, 1);
1113 /* fastopen_req could already be freed in __inet_stream_connect 1116 /* fastopen_req could already be freed in __inet_stream_connect
1114 * if the connection times out or gets rst 1117 * if the connection times out or gets rst
@@ -2320,9 +2323,15 @@ int tcp_disconnect(struct sock *sk, int flags)
2320 tcp_set_ca_state(sk, TCP_CA_Open); 2323 tcp_set_ca_state(sk, TCP_CA_Open);
2321 tcp_clear_retrans(tp); 2324 tcp_clear_retrans(tp);
2322 inet_csk_delack_init(sk); 2325 inet_csk_delack_init(sk);
2326 /* Initialize rcv_mss to TCP_MIN_MSS to avoid division by 0
2327 * issue in __tcp_select_window()
2328 */
2329 icsk->icsk_ack.rcv_mss = TCP_MIN_MSS;
2323 tcp_init_send_head(sk); 2330 tcp_init_send_head(sk);
2324 memset(&tp->rx_opt, 0, sizeof(tp->rx_opt)); 2331 memset(&tp->rx_opt, 0, sizeof(tp->rx_opt));
2325 __sk_dst_reset(sk); 2332 __sk_dst_reset(sk);
2333 dst_release(sk->sk_rx_dst);
2334 sk->sk_rx_dst = NULL;
2326 tcp_saved_syn_free(tp); 2335 tcp_saved_syn_free(tp);
2327 2336
2328 /* Clean up fastopen related fields */ 2337 /* Clean up fastopen related fields */
@@ -2374,9 +2383,10 @@ static int tcp_repair_set_window(struct tcp_sock *tp, char __user *optbuf, int l
2374 return 0; 2383 return 0;
2375} 2384}
2376 2385
2377static int tcp_repair_options_est(struct tcp_sock *tp, 2386static int tcp_repair_options_est(struct sock *sk,
2378 struct tcp_repair_opt __user *optbuf, unsigned int len) 2387 struct tcp_repair_opt __user *optbuf, unsigned int len)
2379{ 2388{
2389 struct tcp_sock *tp = tcp_sk(sk);
2380 struct tcp_repair_opt opt; 2390 struct tcp_repair_opt opt;
2381 2391
2382 while (len >= sizeof(opt)) { 2392 while (len >= sizeof(opt)) {
@@ -2389,6 +2399,7 @@ static int tcp_repair_options_est(struct tcp_sock *tp,
2389 switch (opt.opt_code) { 2399 switch (opt.opt_code) {
2390 case TCPOPT_MSS: 2400 case TCPOPT_MSS:
2391 tp->rx_opt.mss_clamp = opt.opt_val; 2401 tp->rx_opt.mss_clamp = opt.opt_val;
2402 tcp_mtup_init(sk);
2392 break; 2403 break;
2393 case TCPOPT_WINDOW: 2404 case TCPOPT_WINDOW:
2394 { 2405 {
@@ -2548,7 +2559,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
2548 if (!tp->repair) 2559 if (!tp->repair)
2549 err = -EINVAL; 2560 err = -EINVAL;
2550 else if (sk->sk_state == TCP_ESTABLISHED) 2561 else if (sk->sk_state == TCP_ESTABLISHED)
2551 err = tcp_repair_options_est(tp, 2562 err = tcp_repair_options_est(sk,
2552 (struct tcp_repair_opt __user *)optval, 2563 (struct tcp_repair_opt __user *)optval,
2553 optlen); 2564 optlen);
2554 else 2565 else
diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c
index 6e3c512054a6..324c9bcc5456 100644
--- a/net/ipv4/tcp_cong.c
+++ b/net/ipv4/tcp_cong.c
@@ -180,6 +180,7 @@ void tcp_init_congestion_control(struct sock *sk)
180{ 180{
181 const struct inet_connection_sock *icsk = inet_csk(sk); 181 const struct inet_connection_sock *icsk = inet_csk(sk);
182 182
183 tcp_sk(sk)->prior_ssthresh = 0;
183 if (icsk->icsk_ca_ops->init) 184 if (icsk->icsk_ca_ops->init)
184 icsk->icsk_ca_ops->init(sk); 185 icsk->icsk_ca_ops->init(sk);
185 if (tcp_ca_needs_ecn(sk)) 186 if (tcp_ca_needs_ecn(sk))
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 6a4fb1e629fb..1d2dbace42ff 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -332,9 +332,9 @@ static void addrconf_mod_rs_timer(struct inet6_dev *idev,
332static void addrconf_mod_dad_work(struct inet6_ifaddr *ifp, 332static void addrconf_mod_dad_work(struct inet6_ifaddr *ifp,
333 unsigned long delay) 333 unsigned long delay)
334{ 334{
335 if (!delayed_work_pending(&ifp->dad_work)) 335 in6_ifa_hold(ifp);
336 in6_ifa_hold(ifp); 336 if (mod_delayed_work(addrconf_wq, &ifp->dad_work, delay))
337 mod_delayed_work(addrconf_wq, &ifp->dad_work, delay); 337 in6_ifa_put(ifp);
338} 338}
339 339
340static int snmp6_alloc_dev(struct inet6_dev *idev) 340static int snmp6_alloc_dev(struct inet6_dev *idev)
@@ -3369,6 +3369,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
3369 struct net_device *dev = netdev_notifier_info_to_dev(ptr); 3369 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
3370 struct netdev_notifier_changeupper_info *info; 3370 struct netdev_notifier_changeupper_info *info;
3371 struct inet6_dev *idev = __in6_dev_get(dev); 3371 struct inet6_dev *idev = __in6_dev_get(dev);
3372 struct net *net = dev_net(dev);
3372 int run_pending = 0; 3373 int run_pending = 0;
3373 int err; 3374 int err;
3374 3375
@@ -3384,7 +3385,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
3384 case NETDEV_CHANGEMTU: 3385 case NETDEV_CHANGEMTU:
3385 /* if MTU under IPV6_MIN_MTU stop IPv6 on this interface. */ 3386 /* if MTU under IPV6_MIN_MTU stop IPv6 on this interface. */
3386 if (dev->mtu < IPV6_MIN_MTU) { 3387 if (dev->mtu < IPV6_MIN_MTU) {
3387 addrconf_ifdown(dev, 1); 3388 addrconf_ifdown(dev, dev != net->loopback_dev);
3388 break; 3389 break;
3389 } 3390 }
3390 3391
@@ -3500,7 +3501,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
3500 * IPV6_MIN_MTU stop IPv6 on this interface. 3501 * IPV6_MIN_MTU stop IPv6 on this interface.
3501 */ 3502 */
3502 if (dev->mtu < IPV6_MIN_MTU) 3503 if (dev->mtu < IPV6_MIN_MTU)
3503 addrconf_ifdown(dev, 1); 3504 addrconf_ifdown(dev, dev != net->loopback_dev);
3504 } 3505 }
3505 break; 3506 break;
3506 3507
diff --git a/net/ipv6/calipso.c b/net/ipv6/calipso.c
index 37ac9de713c6..8d772fea1dde 100644
--- a/net/ipv6/calipso.c
+++ b/net/ipv6/calipso.c
@@ -1319,7 +1319,7 @@ static int calipso_skbuff_setattr(struct sk_buff *skb,
1319 struct ipv6hdr *ip6_hdr; 1319 struct ipv6hdr *ip6_hdr;
1320 struct ipv6_opt_hdr *hop; 1320 struct ipv6_opt_hdr *hop;
1321 unsigned char buf[CALIPSO_MAX_BUFFER]; 1321 unsigned char buf[CALIPSO_MAX_BUFFER];
1322 int len_delta, new_end, pad; 1322 int len_delta, new_end, pad, payload;
1323 unsigned int start, end; 1323 unsigned int start, end;
1324 1324
1325 ip6_hdr = ipv6_hdr(skb); 1325 ip6_hdr = ipv6_hdr(skb);
@@ -1346,6 +1346,8 @@ static int calipso_skbuff_setattr(struct sk_buff *skb,
1346 if (ret_val < 0) 1346 if (ret_val < 0)
1347 return ret_val; 1347 return ret_val;
1348 1348
1349 ip6_hdr = ipv6_hdr(skb); /* Reset as skb_cow() may have moved it */
1350
1349 if (len_delta) { 1351 if (len_delta) {
1350 if (len_delta > 0) 1352 if (len_delta > 0)
1351 skb_push(skb, len_delta); 1353 skb_push(skb, len_delta);
@@ -1355,6 +1357,8 @@ static int calipso_skbuff_setattr(struct sk_buff *skb,
1355 sizeof(*ip6_hdr) + start); 1357 sizeof(*ip6_hdr) + start);
1356 skb_reset_network_header(skb); 1358 skb_reset_network_header(skb);
1357 ip6_hdr = ipv6_hdr(skb); 1359 ip6_hdr = ipv6_hdr(skb);
1360 payload = ntohs(ip6_hdr->payload_len);
1361 ip6_hdr->payload_len = htons(payload + len_delta);
1358 } 1362 }
1359 1363
1360 hop = (struct ipv6_opt_hdr *)(ip6_hdr + 1); 1364 hop = (struct ipv6_opt_hdr *)(ip6_hdr + 1);
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
index e011122ebd43..5c786f5ab961 100644
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
@@ -250,8 +250,14 @@ ipv4_connected:
250 */ 250 */
251 251
252 err = ip6_datagram_dst_update(sk, true); 252 err = ip6_datagram_dst_update(sk, true);
253 if (err) 253 if (err) {
254 /* Reset daddr and dport so that udp_v6_early_demux()
255 * fails to find this socket
256 */
257 memset(&sk->sk_v6_daddr, 0, sizeof(sk->sk_v6_daddr));
258 inet->inet_dport = 0;
254 goto out; 259 goto out;
260 }
255 261
256 sk->sk_state = TCP_ESTABLISHED; 262 sk->sk_state = TCP_ESTABLISHED;
257 sk_set_txhash(sk); 263 sk_set_txhash(sk);
diff --git a/net/ipv6/esp6_offload.c b/net/ipv6/esp6_offload.c
index d950d43ba255..f02f131f6435 100644
--- a/net/ipv6/esp6_offload.c
+++ b/net/ipv6/esp6_offload.c
@@ -30,6 +30,25 @@
30#include <net/ipv6.h> 30#include <net/ipv6.h>
31#include <linux/icmpv6.h> 31#include <linux/icmpv6.h>
32 32
33static __u16 esp6_nexthdr_esp_offset(struct ipv6hdr *ipv6_hdr, int nhlen)
34{
35 int off = sizeof(struct ipv6hdr);
36 struct ipv6_opt_hdr *exthdr;
37
38 if (likely(ipv6_hdr->nexthdr == NEXTHDR_ESP))
39 return offsetof(struct ipv6hdr, nexthdr);
40
41 while (off < nhlen) {
42 exthdr = (void *)ipv6_hdr + off;
43 if (exthdr->nexthdr == NEXTHDR_ESP)
44 return off;
45
46 off += ipv6_optlen(exthdr);
47 }
48
49 return 0;
50}
51
33static struct sk_buff **esp6_gro_receive(struct sk_buff **head, 52static struct sk_buff **esp6_gro_receive(struct sk_buff **head,
34 struct sk_buff *skb) 53 struct sk_buff *skb)
35{ 54{
@@ -38,6 +57,7 @@ static struct sk_buff **esp6_gro_receive(struct sk_buff **head,
38 struct xfrm_state *x; 57 struct xfrm_state *x;
39 __be32 seq; 58 __be32 seq;
40 __be32 spi; 59 __be32 spi;
60 int nhoff;
41 int err; 61 int err;
42 62
43 skb_pull(skb, offset); 63 skb_pull(skb, offset);
@@ -72,6 +92,11 @@ static struct sk_buff **esp6_gro_receive(struct sk_buff **head,
72 92
73 xo->flags |= XFRM_GRO; 93 xo->flags |= XFRM_GRO;
74 94
95 nhoff = esp6_nexthdr_esp_offset(ipv6_hdr(skb), offset);
96 if (!nhoff)
97 goto out;
98
99 IP6CB(skb)->nhoff = nhoff;
75 XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6 = NULL; 100 XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6 = NULL;
76 XFRM_SPI_SKB_CB(skb)->family = AF_INET6; 101 XFRM_SPI_SKB_CB(skb)->family = AF_INET6;
77 XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct ipv6hdr, daddr); 102 XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct ipv6hdr, daddr);
diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c
index eea23b57c6a5..ec849d88a662 100644
--- a/net/ipv6/fib6_rules.c
+++ b/net/ipv6/fib6_rules.c
@@ -32,7 +32,6 @@ struct fib6_rule {
32struct dst_entry *fib6_rule_lookup(struct net *net, struct flowi6 *fl6, 32struct dst_entry *fib6_rule_lookup(struct net *net, struct flowi6 *fl6,
33 int flags, pol_lookup_t lookup) 33 int flags, pol_lookup_t lookup)
34{ 34{
35 struct rt6_info *rt;
36 struct fib_lookup_arg arg = { 35 struct fib_lookup_arg arg = {
37 .lookup_ptr = lookup, 36 .lookup_ptr = lookup,
38 .flags = FIB_LOOKUP_NOREF, 37 .flags = FIB_LOOKUP_NOREF,
@@ -44,21 +43,11 @@ struct dst_entry *fib6_rule_lookup(struct net *net, struct flowi6 *fl6,
44 fib_rules_lookup(net->ipv6.fib6_rules_ops, 43 fib_rules_lookup(net->ipv6.fib6_rules_ops,
45 flowi6_to_flowi(fl6), flags, &arg); 44 flowi6_to_flowi(fl6), flags, &arg);
46 45
47 rt = arg.result; 46 if (arg.result)
47 return arg.result;
48 48
49 if (!rt) { 49 dst_hold(&net->ipv6.ip6_null_entry->dst);
50 dst_hold(&net->ipv6.ip6_null_entry->dst); 50 return &net->ipv6.ip6_null_entry->dst;
51 return &net->ipv6.ip6_null_entry->dst;
52 }
53
54 if (rt->rt6i_flags & RTF_REJECT &&
55 rt->dst.error == -EAGAIN) {
56 ip6_rt_put(rt);
57 rt = net->ipv6.ip6_null_entry;
58 dst_hold(&rt->dst);
59 }
60
61 return &rt->dst;
62} 51}
63 52
64static int fib6_rule_action(struct fib_rule *rule, struct flowi *flp, 53static int fib6_rule_action(struct fib_rule *rule, struct flowi *flp,
@@ -121,7 +110,8 @@ static int fib6_rule_action(struct fib_rule *rule, struct flowi *flp,
121 flp6->saddr = saddr; 110 flp6->saddr = saddr;
122 } 111 }
123 err = rt->dst.error; 112 err = rt->dst.error;
124 goto out; 113 if (err != -EAGAIN)
114 goto out;
125 } 115 }
126again: 116again:
127 ip6_rt_put(rt); 117 ip6_rt_put(rt);
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
index 230b5aac9f03..8d7b113958b1 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
@@ -491,7 +491,7 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,
491 local_bh_disable(); 491 local_bh_disable();
492 492
493 /* Check global sysctl_icmp_msgs_per_sec ratelimit */ 493 /* Check global sysctl_icmp_msgs_per_sec ratelimit */
494 if (!icmpv6_global_allow(type)) 494 if (!(skb->dev->flags&IFF_LOOPBACK) && !icmpv6_global_allow(type))
495 goto out_bh_enable; 495 goto out_bh_enable;
496 496
497 mip6_addr_swap(skb); 497 mip6_addr_swap(skb);
diff --git a/net/ipv6/ila/ila_xlat.c b/net/ipv6/ila/ila_xlat.c
index 2fd5ca151dcf..77f7f8c7d93d 100644
--- a/net/ipv6/ila/ila_xlat.c
+++ b/net/ipv6/ila/ila_xlat.c
@@ -62,6 +62,7 @@ static inline u32 ila_locator_hash(struct ila_locator loc)
62{ 62{
63 u32 *v = (u32 *)loc.v32; 63 u32 *v = (u32 *)loc.v32;
64 64
65 __ila_hash_secret_init();
65 return jhash_2words(v[0], v[1], hashrnd); 66 return jhash_2words(v[0], v[1], hashrnd);
66} 67}
67 68
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
index d4bf2c68a545..e6b78ba0e636 100644
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -289,8 +289,7 @@ struct dst_entry *fib6_rule_lookup(struct net *net, struct flowi6 *fl6,
289 struct rt6_info *rt; 289 struct rt6_info *rt;
290 290
291 rt = lookup(net, net->ipv6.fib6_main_tbl, fl6, flags); 291 rt = lookup(net, net->ipv6.fib6_main_tbl, fl6, flags);
292 if (rt->rt6i_flags & RTF_REJECT && 292 if (rt->dst.error == -EAGAIN) {
293 rt->dst.error == -EAGAIN) {
294 ip6_rt_put(rt); 293 ip6_rt_put(rt);
295 rt = net->ipv6.ip6_null_entry; 294 rt = net->ipv6.ip6_null_entry;
296 dst_hold(&rt->dst); 295 dst_hold(&rt->dst);
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
index 8d128ba79b66..64eea3962733 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
@@ -537,11 +537,10 @@ static inline int ip6gre_xmit_ipv4(struct sk_buff *skb, struct net_device *dev)
537 537
538 memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6)); 538 memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6));
539 539
540 dsfield = ipv4_get_dsfield(iph);
541
542 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS) 540 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
543 fl6.flowlabel |= htonl((__u32)iph->tos << IPV6_TCLASS_SHIFT) 541 dsfield = ipv4_get_dsfield(iph);
544 & IPV6_TCLASS_MASK; 542 else
543 dsfield = ip6_tclass(t->parms.flowinfo);
545 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) 544 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
546 fl6.flowi6_mark = skb->mark; 545 fl6.flowi6_mark = skb->mark;
547 else 546 else
@@ -598,9 +597,11 @@ static inline int ip6gre_xmit_ipv6(struct sk_buff *skb, struct net_device *dev)
598 597
599 memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6)); 598 memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6));
600 599
601 dsfield = ipv6_get_dsfield(ipv6h);
602 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS) 600 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
603 fl6.flowlabel |= (*(__be32 *) ipv6h & IPV6_TCLASS_MASK); 601 dsfield = ipv6_get_dsfield(ipv6h);
602 else
603 dsfield = ip6_tclass(t->parms.flowinfo);
604
604 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FLOWLABEL) 605 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FLOWLABEL)
605 fl6.flowlabel |= ip6_flowlabel(ipv6h); 606 fl6.flowlabel |= ip6_flowlabel(ipv6h);
606 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) 607 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
@@ -990,13 +991,13 @@ static void ip6gre_dev_free(struct net_device *dev)
990 991
991 dst_cache_destroy(&t->dst_cache); 992 dst_cache_destroy(&t->dst_cache);
992 free_percpu(dev->tstats); 993 free_percpu(dev->tstats);
993 free_netdev(dev);
994} 994}
995 995
996static void ip6gre_tunnel_setup(struct net_device *dev) 996static void ip6gre_tunnel_setup(struct net_device *dev)
997{ 997{
998 dev->netdev_ops = &ip6gre_netdev_ops; 998 dev->netdev_ops = &ip6gre_netdev_ops;
999 dev->destructor = ip6gre_dev_free; 999 dev->needs_free_netdev = true;
1000 dev->priv_destructor = ip6gre_dev_free;
1000 1001
1001 dev->type = ARPHRD_IP6GRE; 1002 dev->type = ARPHRD_IP6GRE;
1002 1003
@@ -1147,7 +1148,7 @@ static int __net_init ip6gre_init_net(struct net *net)
1147 return 0; 1148 return 0;
1148 1149
1149err_reg_dev: 1150err_reg_dev:
1150 ip6gre_dev_free(ign->fb_tunnel_dev); 1151 free_netdev(ign->fb_tunnel_dev);
1151err_alloc_dev: 1152err_alloc_dev:
1152 return err; 1153 return err;
1153} 1154}
@@ -1299,7 +1300,8 @@ static void ip6gre_tap_setup(struct net_device *dev)
1299 ether_setup(dev); 1300 ether_setup(dev);
1300 1301
1301 dev->netdev_ops = &ip6gre_tap_netdev_ops; 1302 dev->netdev_ops = &ip6gre_tap_netdev_ops;
1302 dev->destructor = ip6gre_dev_free; 1303 dev->needs_free_netdev = true;
1304 dev->priv_destructor = ip6gre_dev_free;
1303 1305
1304 dev->features |= NETIF_F_NETNS_LOCAL; 1306 dev->features |= NETIF_F_NETNS_LOCAL;
1305 dev->priv_flags &= ~IFF_TX_SKB_SHARING; 1307 dev->priv_flags &= ~IFF_TX_SKB_SHARING;
diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c
index 280268f1dd7b..cdb3728faca7 100644
--- a/net/ipv6/ip6_offload.c
+++ b/net/ipv6/ip6_offload.c
@@ -116,8 +116,10 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb,
116 116
117 if (udpfrag) { 117 if (udpfrag) {
118 int err = ip6_find_1stfragopt(skb, &prevhdr); 118 int err = ip6_find_1stfragopt(skb, &prevhdr);
119 if (err < 0) 119 if (err < 0) {
120 kfree_skb_list(segs);
120 return ERR_PTR(err); 121 return ERR_PTR(err);
122 }
121 fptr = (struct frag_hdr *)((u8 *)ipv6h + err); 123 fptr = (struct frag_hdr *)((u8 *)ipv6h + err);
122 fptr->frag_off = htons(offset); 124 fptr->frag_off = htons(offset);
123 if (skb->next) 125 if (skb->next)
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index d4a31becbd25..1699acb2fa2c 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1390,7 +1390,7 @@ emsgsize:
1390 */ 1390 */
1391 1391
1392 cork->length += length; 1392 cork->length += length;
1393 if ((((length + fragheaderlen) > mtu) || 1393 if ((((length + (skb ? skb->len : headersize)) > mtu) ||
1394 (skb && skb_is_gso(skb))) && 1394 (skb && skb_is_gso(skb))) &&
1395 (sk->sk_protocol == IPPROTO_UDP) && 1395 (sk->sk_protocol == IPPROTO_UDP) &&
1396 (rt->dst.dev->features & NETIF_F_UFO) && !dst_xfrm(&rt->dst) && 1396 (rt->dst.dev->features & NETIF_F_UFO) && !dst_xfrm(&rt->dst) &&
@@ -1466,6 +1466,11 @@ alloc_new_skb:
1466 */ 1466 */
1467 alloclen += sizeof(struct frag_hdr); 1467 alloclen += sizeof(struct frag_hdr);
1468 1468
1469 copy = datalen - transhdrlen - fraggap;
1470 if (copy < 0) {
1471 err = -EINVAL;
1472 goto error;
1473 }
1469 if (transhdrlen) { 1474 if (transhdrlen) {
1470 skb = sock_alloc_send_skb(sk, 1475 skb = sock_alloc_send_skb(sk,
1471 alloclen + hh_len, 1476 alloclen + hh_len,
@@ -1515,13 +1520,9 @@ alloc_new_skb:
1515 data += fraggap; 1520 data += fraggap;
1516 pskb_trim_unique(skb_prev, maxfraglen); 1521 pskb_trim_unique(skb_prev, maxfraglen);
1517 } 1522 }
1518 copy = datalen - transhdrlen - fraggap; 1523 if (copy > 0 &&
1519 1524 getfrag(from, data + transhdrlen, offset,
1520 if (copy < 0) { 1525 copy, fraggap, skb) < 0) {
1521 err = -EINVAL;
1522 kfree_skb(skb);
1523 goto error;
1524 } else if (copy > 0 && getfrag(from, data + transhdrlen, offset, copy, fraggap, skb) < 0) {
1525 err = -EFAULT; 1526 err = -EFAULT;
1526 kfree_skb(skb); 1527 kfree_skb(skb);
1527 goto error; 1528 goto error;
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 6eb2ae507500..8c6c3c8e7eef 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -254,7 +254,6 @@ static void ip6_dev_free(struct net_device *dev)
254 gro_cells_destroy(&t->gro_cells); 254 gro_cells_destroy(&t->gro_cells);
255 dst_cache_destroy(&t->dst_cache); 255 dst_cache_destroy(&t->dst_cache);
256 free_percpu(dev->tstats); 256 free_percpu(dev->tstats);
257 free_netdev(dev);
258} 257}
259 258
260static int ip6_tnl_create2(struct net_device *dev) 259static int ip6_tnl_create2(struct net_device *dev)
@@ -322,7 +321,7 @@ static struct ip6_tnl *ip6_tnl_create(struct net *net, struct __ip6_tnl_parm *p)
322 return t; 321 return t;
323 322
324failed_free: 323failed_free:
325 ip6_dev_free(dev); 324 free_netdev(dev);
326failed: 325failed:
327 return ERR_PTR(err); 326 return ERR_PTR(err);
328} 327}
@@ -859,6 +858,8 @@ static int __ip6_tnl_rcv(struct ip6_tnl *tunnel, struct sk_buff *skb,
859 return 0; 858 return 0;
860 859
861drop: 860drop:
861 if (tun_dst)
862 dst_release((struct dst_entry *)tun_dst);
862 kfree_skb(skb); 863 kfree_skb(skb);
863 return 0; 864 return 0;
864} 865}
@@ -1095,6 +1096,9 @@ int ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev, __u8 dsfield,
1095 1096
1096 if (!dst) { 1097 if (!dst) {
1097route_lookup: 1098route_lookup:
1099 /* add dsfield to flowlabel for route lookup */
1100 fl6->flowlabel = ip6_make_flowinfo(dsfield, fl6->flowlabel);
1101
1098 dst = ip6_route_output(net, NULL, fl6); 1102 dst = ip6_route_output(net, NULL, fl6);
1099 1103
1100 if (dst->error) 1104 if (dst->error)
@@ -1196,7 +1200,7 @@ route_lookup:
1196 skb_push(skb, sizeof(struct ipv6hdr)); 1200 skb_push(skb, sizeof(struct ipv6hdr));
1197 skb_reset_network_header(skb); 1201 skb_reset_network_header(skb);
1198 ipv6h = ipv6_hdr(skb); 1202 ipv6h = ipv6_hdr(skb);
1199 ip6_flow_hdr(ipv6h, INET_ECN_encapsulate(0, dsfield), 1203 ip6_flow_hdr(ipv6h, dsfield,
1200 ip6_make_flowlabel(net, skb, fl6->flowlabel, true, fl6)); 1204 ip6_make_flowlabel(net, skb, fl6->flowlabel, true, fl6));
1201 ipv6h->hop_limit = hop_limit; 1205 ipv6h->hop_limit = hop_limit;
1202 ipv6h->nexthdr = proto; 1206 ipv6h->nexthdr = proto;
@@ -1231,8 +1235,6 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
1231 if (tproto != IPPROTO_IPIP && tproto != 0) 1235 if (tproto != IPPROTO_IPIP && tproto != 0)
1232 return -1; 1236 return -1;
1233 1237
1234 dsfield = ipv4_get_dsfield(iph);
1235
1236 if (t->parms.collect_md) { 1238 if (t->parms.collect_md) {
1237 struct ip_tunnel_info *tun_info; 1239 struct ip_tunnel_info *tun_info;
1238 const struct ip_tunnel_key *key; 1240 const struct ip_tunnel_key *key;
@@ -1246,6 +1248,7 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
1246 fl6.flowi6_proto = IPPROTO_IPIP; 1248 fl6.flowi6_proto = IPPROTO_IPIP;
1247 fl6.daddr = key->u.ipv6.dst; 1249 fl6.daddr = key->u.ipv6.dst;
1248 fl6.flowlabel = key->label; 1250 fl6.flowlabel = key->label;
1251 dsfield = key->tos;
1249 } else { 1252 } else {
1250 if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT)) 1253 if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT))
1251 encap_limit = t->parms.encap_limit; 1254 encap_limit = t->parms.encap_limit;
@@ -1254,8 +1257,9 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
1254 fl6.flowi6_proto = IPPROTO_IPIP; 1257 fl6.flowi6_proto = IPPROTO_IPIP;
1255 1258
1256 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS) 1259 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
1257 fl6.flowlabel |= htonl((__u32)iph->tos << IPV6_TCLASS_SHIFT) 1260 dsfield = ipv4_get_dsfield(iph);
1258 & IPV6_TCLASS_MASK; 1261 else
1262 dsfield = ip6_tclass(t->parms.flowinfo);
1259 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) 1263 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
1260 fl6.flowi6_mark = skb->mark; 1264 fl6.flowi6_mark = skb->mark;
1261 else 1265 else
@@ -1267,6 +1271,8 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
1267 if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6)) 1271 if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6))
1268 return -1; 1272 return -1;
1269 1273
1274 dsfield = INET_ECN_encapsulate(dsfield, ipv4_get_dsfield(iph));
1275
1270 skb_set_inner_ipproto(skb, IPPROTO_IPIP); 1276 skb_set_inner_ipproto(skb, IPPROTO_IPIP);
1271 1277
1272 err = ip6_tnl_xmit(skb, dev, dsfield, &fl6, encap_limit, &mtu, 1278 err = ip6_tnl_xmit(skb, dev, dsfield, &fl6, encap_limit, &mtu,
@@ -1300,8 +1306,6 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
1300 ip6_tnl_addr_conflict(t, ipv6h)) 1306 ip6_tnl_addr_conflict(t, ipv6h))
1301 return -1; 1307 return -1;
1302 1308
1303 dsfield = ipv6_get_dsfield(ipv6h);
1304
1305 if (t->parms.collect_md) { 1309 if (t->parms.collect_md) {
1306 struct ip_tunnel_info *tun_info; 1310 struct ip_tunnel_info *tun_info;
1307 const struct ip_tunnel_key *key; 1311 const struct ip_tunnel_key *key;
@@ -1315,6 +1319,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
1315 fl6.flowi6_proto = IPPROTO_IPV6; 1319 fl6.flowi6_proto = IPPROTO_IPV6;
1316 fl6.daddr = key->u.ipv6.dst; 1320 fl6.daddr = key->u.ipv6.dst;
1317 fl6.flowlabel = key->label; 1321 fl6.flowlabel = key->label;
1322 dsfield = key->tos;
1318 } else { 1323 } else {
1319 offset = ip6_tnl_parse_tlv_enc_lim(skb, skb_network_header(skb)); 1324 offset = ip6_tnl_parse_tlv_enc_lim(skb, skb_network_header(skb));
1320 /* ip6_tnl_parse_tlv_enc_lim() might have reallocated skb->head */ 1325 /* ip6_tnl_parse_tlv_enc_lim() might have reallocated skb->head */
@@ -1337,7 +1342,9 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
1337 fl6.flowi6_proto = IPPROTO_IPV6; 1342 fl6.flowi6_proto = IPPROTO_IPV6;
1338 1343
1339 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS) 1344 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
1340 fl6.flowlabel |= (*(__be32 *)ipv6h & IPV6_TCLASS_MASK); 1345 dsfield = ipv6_get_dsfield(ipv6h);
1346 else
1347 dsfield = ip6_tclass(t->parms.flowinfo);
1341 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FLOWLABEL) 1348 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FLOWLABEL)
1342 fl6.flowlabel |= ip6_flowlabel(ipv6h); 1349 fl6.flowlabel |= ip6_flowlabel(ipv6h);
1343 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) 1350 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
@@ -1351,6 +1358,8 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
1351 if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6)) 1358 if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6))
1352 return -1; 1359 return -1;
1353 1360
1361 dsfield = INET_ECN_encapsulate(dsfield, ipv6_get_dsfield(ipv6h));
1362
1354 skb_set_inner_ipproto(skb, IPPROTO_IPV6); 1363 skb_set_inner_ipproto(skb, IPPROTO_IPV6);
1355 1364
1356 err = ip6_tnl_xmit(skb, dev, dsfield, &fl6, encap_limit, &mtu, 1365 err = ip6_tnl_xmit(skb, dev, dsfield, &fl6, encap_limit, &mtu,
@@ -1769,7 +1778,8 @@ static const struct net_device_ops ip6_tnl_netdev_ops = {
1769static void ip6_tnl_dev_setup(struct net_device *dev) 1778static void ip6_tnl_dev_setup(struct net_device *dev)
1770{ 1779{
1771 dev->netdev_ops = &ip6_tnl_netdev_ops; 1780 dev->netdev_ops = &ip6_tnl_netdev_ops;
1772 dev->destructor = ip6_dev_free; 1781 dev->needs_free_netdev = true;
1782 dev->priv_destructor = ip6_dev_free;
1773 1783
1774 dev->type = ARPHRD_TUNNEL6; 1784 dev->type = ARPHRD_TUNNEL6;
1775 dev->flags |= IFF_NOARP; 1785 dev->flags |= IFF_NOARP;
@@ -2216,7 +2226,7 @@ static int __net_init ip6_tnl_init_net(struct net *net)
2216 return 0; 2226 return 0;
2217 2227
2218err_register: 2228err_register:
2219 ip6_dev_free(ip6n->fb_tnl_dev); 2229 free_netdev(ip6n->fb_tnl_dev);
2220err_alloc_dev: 2230err_alloc_dev:
2221 return err; 2231 return err;
2222} 2232}
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
index d67ef56454b2..837ea1eefe7f 100644
--- a/net/ipv6/ip6_vti.c
+++ b/net/ipv6/ip6_vti.c
@@ -180,7 +180,6 @@ vti6_tnl_unlink(struct vti6_net *ip6n, struct ip6_tnl *t)
180static void vti6_dev_free(struct net_device *dev) 180static void vti6_dev_free(struct net_device *dev)
181{ 181{
182 free_percpu(dev->tstats); 182 free_percpu(dev->tstats);
183 free_netdev(dev);
184} 183}
185 184
186static int vti6_tnl_create2(struct net_device *dev) 185static int vti6_tnl_create2(struct net_device *dev)
@@ -235,7 +234,7 @@ static struct ip6_tnl *vti6_tnl_create(struct net *net, struct __ip6_tnl_parm *p
235 return t; 234 return t;
236 235
237failed_free: 236failed_free:
238 vti6_dev_free(dev); 237 free_netdev(dev);
239failed: 238failed:
240 return NULL; 239 return NULL;
241} 240}
@@ -842,7 +841,8 @@ static const struct net_device_ops vti6_netdev_ops = {
842static void vti6_dev_setup(struct net_device *dev) 841static void vti6_dev_setup(struct net_device *dev)
843{ 842{
844 dev->netdev_ops = &vti6_netdev_ops; 843 dev->netdev_ops = &vti6_netdev_ops;
845 dev->destructor = vti6_dev_free; 844 dev->needs_free_netdev = true;
845 dev->priv_destructor = vti6_dev_free;
846 846
847 dev->type = ARPHRD_TUNNEL6; 847 dev->type = ARPHRD_TUNNEL6;
848 dev->hard_header_len = LL_MAX_HEADER + sizeof(struct ipv6hdr); 848 dev->hard_header_len = LL_MAX_HEADER + sizeof(struct ipv6hdr);
@@ -1100,7 +1100,7 @@ static int __net_init vti6_init_net(struct net *net)
1100 return 0; 1100 return 0;
1101 1101
1102err_register: 1102err_register:
1103 vti6_dev_free(ip6n->fb_tnl_dev); 1103 free_netdev(ip6n->fb_tnl_dev);
1104err_alloc_dev: 1104err_alloc_dev:
1105 return err; 1105 return err;
1106} 1106}
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
index 374997d26488..2ecb39b943b5 100644
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
@@ -733,7 +733,7 @@ static void reg_vif_setup(struct net_device *dev)
733 dev->mtu = 1500 - sizeof(struct ipv6hdr) - 8; 733 dev->mtu = 1500 - sizeof(struct ipv6hdr) - 8;
734 dev->flags = IFF_NOARP; 734 dev->flags = IFF_NOARP;
735 dev->netdev_ops = &reg_vif_netdev_ops; 735 dev->netdev_ops = &reg_vif_netdev_ops;
736 dev->destructor = free_netdev; 736 dev->needs_free_netdev = true;
737 dev->features |= NETIF_F_NETNS_LOCAL; 737 dev->features |= NETIF_F_NETNS_LOCAL;
738} 738}
739 739
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
index 9b522fa90e6d..ac826dd338ff 100644
--- a/net/ipv6/ping.c
+++ b/net/ipv6/ping.c
@@ -192,7 +192,7 @@ static struct inet_protosw pingv6_protosw = {
192 .type = SOCK_DGRAM, 192 .type = SOCK_DGRAM,
193 .protocol = IPPROTO_ICMPV6, 193 .protocol = IPPROTO_ICMPV6,
194 .prot = &pingv6_prot, 194 .prot = &pingv6_prot,
195 .ops = &inet6_dgram_ops, 195 .ops = &inet6_sockraw_ops,
196 .flags = INET_PROTOSW_REUSE, 196 .flags = INET_PROTOSW_REUSE,
197}; 197};
198 198
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index cc8e3ae9ca73..e88bcb8ff0fd 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -219,7 +219,7 @@ static void snmp6_seq_show_item64(struct seq_file *seq, void __percpu *mib,
219 u64 buff64[SNMP_MIB_MAX]; 219 u64 buff64[SNMP_MIB_MAX];
220 int i; 220 int i;
221 221
222 memset(buff64, 0, sizeof(unsigned long) * SNMP_MIB_MAX); 222 memset(buff64, 0, sizeof(u64) * SNMP_MIB_MAX);
223 223
224 snmp_get_cpu_field64_batch(buff64, itemlist, mib, syncpoff); 224 snmp_get_cpu_field64_batch(buff64, itemlist, mib, syncpoff);
225 for (i = 0; itemlist[i].name; i++) 225 for (i = 0; itemlist[i].name; i++)
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
index 1f992d9e261d..60be012fe708 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -1338,7 +1338,7 @@ void raw6_proc_exit(void)
1338#endif /* CONFIG_PROC_FS */ 1338#endif /* CONFIG_PROC_FS */
1339 1339
1340/* Same as inet6_dgram_ops, sans udp_poll. */ 1340/* Same as inet6_dgram_ops, sans udp_poll. */
1341static const struct proto_ops inet6_sockraw_ops = { 1341const struct proto_ops inet6_sockraw_ops = {
1342 .family = PF_INET6, 1342 .family = PF_INET6,
1343 .owner = THIS_MODULE, 1343 .owner = THIS_MODULE,
1344 .release = inet6_release, 1344 .release = inet6_release,
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index dc61b0b5e64e..322bd62e688b 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -2804,6 +2804,7 @@ static int fib6_ifdown(struct rt6_info *rt, void *arg)
2804 if ((rt->dst.dev == dev || !dev) && 2804 if ((rt->dst.dev == dev || !dev) &&
2805 rt != adn->net->ipv6.ip6_null_entry && 2805 rt != adn->net->ipv6.ip6_null_entry &&
2806 (rt->rt6i_nsiblings == 0 || 2806 (rt->rt6i_nsiblings == 0 ||
2807 (dev && netdev_unregistering(dev)) ||
2807 !rt->rt6i_idev->cnf.ignore_routes_with_linkdown)) 2808 !rt->rt6i_idev->cnf.ignore_routes_with_linkdown))
2808 return -1; 2809 return -1;
2809 2810
@@ -3721,7 +3722,11 @@ static int ip6_route_dev_notify(struct notifier_block *this,
3721 net->ipv6.ip6_blk_hole_entry->dst.dev = dev; 3722 net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
3722 net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); 3723 net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
3723#endif 3724#endif
3724 } else if (event == NETDEV_UNREGISTER) { 3725 } else if (event == NETDEV_UNREGISTER &&
3726 dev->reg_state != NETREG_UNREGISTERED) {
3727 /* NETDEV_UNREGISTER could be fired for multiple times by
3728 * netdev_wait_allrefs(). Make sure we only call this once.
3729 */
3725 in6_dev_put(net->ipv6.ip6_null_entry->rt6i_idev); 3730 in6_dev_put(net->ipv6.ip6_null_entry->rt6i_idev);
3726#ifdef CONFIG_IPV6_MULTIPLE_TABLES 3731#ifdef CONFIG_IPV6_MULTIPLE_TABLES
3727 in6_dev_put(net->ipv6.ip6_prohibit_entry->rt6i_idev); 3732 in6_dev_put(net->ipv6.ip6_prohibit_entry->rt6i_idev);
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index 61e5902f0687..f8ad15891cd7 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -265,7 +265,7 @@ static struct ip_tunnel *ipip6_tunnel_locate(struct net *net,
265 return nt; 265 return nt;
266 266
267failed_free: 267failed_free:
268 ipip6_dev_free(dev); 268 free_netdev(dev);
269failed: 269failed:
270 return NULL; 270 return NULL;
271} 271}
@@ -305,7 +305,7 @@ static int ipip6_tunnel_get_prl(struct ip_tunnel *t,
305 * we try harder to allocate. 305 * we try harder to allocate.
306 */ 306 */
307 kp = (cmax <= 1 || capable(CAP_NET_ADMIN)) ? 307 kp = (cmax <= 1 || capable(CAP_NET_ADMIN)) ?
308 kcalloc(cmax, sizeof(*kp), GFP_KERNEL) : 308 kcalloc(cmax, sizeof(*kp), GFP_KERNEL | __GFP_NOWARN) :
309 NULL; 309 NULL;
310 310
311 rcu_read_lock(); 311 rcu_read_lock();
@@ -1336,7 +1336,6 @@ static void ipip6_dev_free(struct net_device *dev)
1336 1336
1337 dst_cache_destroy(&tunnel->dst_cache); 1337 dst_cache_destroy(&tunnel->dst_cache);
1338 free_percpu(dev->tstats); 1338 free_percpu(dev->tstats);
1339 free_netdev(dev);
1340} 1339}
1341 1340
1342#define SIT_FEATURES (NETIF_F_SG | \ 1341#define SIT_FEATURES (NETIF_F_SG | \
@@ -1351,7 +1350,8 @@ static void ipip6_tunnel_setup(struct net_device *dev)
1351 int t_hlen = tunnel->hlen + sizeof(struct iphdr); 1350 int t_hlen = tunnel->hlen + sizeof(struct iphdr);
1352 1351
1353 dev->netdev_ops = &ipip6_netdev_ops; 1352 dev->netdev_ops = &ipip6_netdev_ops;
1354 dev->destructor = ipip6_dev_free; 1353 dev->needs_free_netdev = true;
1354 dev->priv_destructor = ipip6_dev_free;
1355 1355
1356 dev->type = ARPHRD_SIT; 1356 dev->type = ARPHRD_SIT;
1357 dev->hard_header_len = LL_MAX_HEADER + t_hlen; 1357 dev->hard_header_len = LL_MAX_HEADER + t_hlen;
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 06ec39b79609..75703fda23e7 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -879,7 +879,8 @@ static struct sock *__udp6_lib_demux_lookup(struct net *net,
879 struct sock *sk; 879 struct sock *sk;
880 880
881 udp_portaddr_for_each_entry_rcu(sk, &hslot2->head) { 881 udp_portaddr_for_each_entry_rcu(sk, &hslot2->head) {
882 if (INET6_MATCH(sk, net, rmt_addr, loc_addr, ports, dif)) 882 if (sk->sk_state == TCP_ESTABLISHED &&
883 INET6_MATCH(sk, net, rmt_addr, loc_addr, ports, dif))
883 return sk; 884 return sk;
884 /* Only check first socket in chain */ 885 /* Only check first socket in chain */
885 break; 886 break;
diff --git a/net/ipv6/xfrm6_input.c b/net/ipv6/xfrm6_input.c
index 08a807b29298..3ef5d913e7a3 100644
--- a/net/ipv6/xfrm6_input.c
+++ b/net/ipv6/xfrm6_input.c
@@ -43,8 +43,8 @@ int xfrm6_transport_finish(struct sk_buff *skb, int async)
43 return 1; 43 return 1;
44#endif 44#endif
45 45
46 ipv6_hdr(skb)->payload_len = htons(skb->len);
47 __skb_push(skb, skb->data - skb_network_header(skb)); 46 __skb_push(skb, skb->data - skb_network_header(skb));
47 ipv6_hdr(skb)->payload_len = htons(skb->len - sizeof(struct ipv6hdr));
48 48
49 if (xo && (xo->flags & XFRM_GRO)) { 49 if (xo && (xo->flags & XFRM_GRO)) {
50 skb_mac_header_rebuild(skb); 50 skb_mac_header_rebuild(skb);
diff --git a/net/ipv6/xfrm6_mode_ro.c b/net/ipv6/xfrm6_mode_ro.c
index 0e015906f9ca..07d36573f50b 100644
--- a/net/ipv6/xfrm6_mode_ro.c
+++ b/net/ipv6/xfrm6_mode_ro.c
@@ -47,6 +47,8 @@ static int xfrm6_ro_output(struct xfrm_state *x, struct sk_buff *skb)
47 iph = ipv6_hdr(skb); 47 iph = ipv6_hdr(skb);
48 48
49 hdr_len = x->type->hdr_offset(x, skb, &prevhdr); 49 hdr_len = x->type->hdr_offset(x, skb, &prevhdr);
50 if (hdr_len < 0)
51 return hdr_len;
50 skb_set_mac_header(skb, (prevhdr - x->props.header_len) - skb->data); 52 skb_set_mac_header(skb, (prevhdr - x->props.header_len) - skb->data);
51 skb_set_network_header(skb, -x->props.header_len); 53 skb_set_network_header(skb, -x->props.header_len);
52 skb->transport_header = skb->network_header + hdr_len; 54 skb->transport_header = skb->network_header + hdr_len;
diff --git a/net/ipv6/xfrm6_mode_transport.c b/net/ipv6/xfrm6_mode_transport.c
index 7a92c0f31912..9ad07a91708e 100644
--- a/net/ipv6/xfrm6_mode_transport.c
+++ b/net/ipv6/xfrm6_mode_transport.c
@@ -30,6 +30,8 @@ static int xfrm6_transport_output(struct xfrm_state *x, struct sk_buff *skb)
30 skb_set_inner_transport_header(skb, skb_transport_offset(skb)); 30 skb_set_inner_transport_header(skb, skb_transport_offset(skb));
31 31
32 hdr_len = x->type->hdr_offset(x, skb, &prevhdr); 32 hdr_len = x->type->hdr_offset(x, skb, &prevhdr);
33 if (hdr_len < 0)
34 return hdr_len;
33 skb_set_mac_header(skb, (prevhdr - x->props.header_len) - skb->data); 35 skb_set_mac_header(skb, (prevhdr - x->props.header_len) - skb->data);
34 skb_set_network_header(skb, -x->props.header_len); 36 skb_set_network_header(skb, -x->props.header_len);
35 skb->transport_header = skb->network_header + hdr_len; 37 skb->transport_header = skb->network_header + hdr_len;
diff --git a/net/irda/irlan/irlan_eth.c b/net/irda/irlan/irlan_eth.c
index 74d09f91709e..3be852808a9d 100644
--- a/net/irda/irlan/irlan_eth.c
+++ b/net/irda/irlan/irlan_eth.c
@@ -65,7 +65,7 @@ static void irlan_eth_setup(struct net_device *dev)
65 ether_setup(dev); 65 ether_setup(dev);
66 66
67 dev->netdev_ops = &irlan_eth_netdev_ops; 67 dev->netdev_ops = &irlan_eth_netdev_ops;
68 dev->destructor = free_netdev; 68 dev->needs_free_netdev = true;
69 dev->min_mtu = 0; 69 dev->min_mtu = 0;
70 dev->max_mtu = ETH_MAX_MTU; 70 dev->max_mtu = ETH_MAX_MTU;
71 71
diff --git a/net/key/af_key.c b/net/key/af_key.c
index c1950bb14735..b1432b668033 100644
--- a/net/key/af_key.c
+++ b/net/key/af_key.c
@@ -1157,6 +1157,7 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
1157 goto out; 1157 goto out;
1158 } 1158 }
1159 1159
1160 err = -ENOBUFS;
1160 key = ext_hdrs[SADB_EXT_KEY_AUTH - 1]; 1161 key = ext_hdrs[SADB_EXT_KEY_AUTH - 1];
1161 if (sa->sadb_sa_auth) { 1162 if (sa->sadb_sa_auth) {
1162 int keysize = 0; 1163 int keysize = 0;
@@ -1168,8 +1169,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
1168 if (key) 1169 if (key)
1169 keysize = (key->sadb_key_bits + 7) / 8; 1170 keysize = (key->sadb_key_bits + 7) / 8;
1170 x->aalg = kmalloc(sizeof(*x->aalg) + keysize, GFP_KERNEL); 1171 x->aalg = kmalloc(sizeof(*x->aalg) + keysize, GFP_KERNEL);
1171 if (!x->aalg) 1172 if (!x->aalg) {
1173 err = -ENOMEM;
1172 goto out; 1174 goto out;
1175 }
1173 strcpy(x->aalg->alg_name, a->name); 1176 strcpy(x->aalg->alg_name, a->name);
1174 x->aalg->alg_key_len = 0; 1177 x->aalg->alg_key_len = 0;
1175 if (key) { 1178 if (key) {
@@ -1188,8 +1191,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
1188 goto out; 1191 goto out;
1189 } 1192 }
1190 x->calg = kmalloc(sizeof(*x->calg), GFP_KERNEL); 1193 x->calg = kmalloc(sizeof(*x->calg), GFP_KERNEL);
1191 if (!x->calg) 1194 if (!x->calg) {
1195 err = -ENOMEM;
1192 goto out; 1196 goto out;
1197 }
1193 strcpy(x->calg->alg_name, a->name); 1198 strcpy(x->calg->alg_name, a->name);
1194 x->props.calgo = sa->sadb_sa_encrypt; 1199 x->props.calgo = sa->sadb_sa_encrypt;
1195 } else { 1200 } else {
@@ -1203,8 +1208,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
1203 if (key) 1208 if (key)
1204 keysize = (key->sadb_key_bits + 7) / 8; 1209 keysize = (key->sadb_key_bits + 7) / 8;
1205 x->ealg = kmalloc(sizeof(*x->ealg) + keysize, GFP_KERNEL); 1210 x->ealg = kmalloc(sizeof(*x->ealg) + keysize, GFP_KERNEL);
1206 if (!x->ealg) 1211 if (!x->ealg) {
1212 err = -ENOMEM;
1207 goto out; 1213 goto out;
1214 }
1208 strcpy(x->ealg->alg_name, a->name); 1215 strcpy(x->ealg->alg_name, a->name);
1209 x->ealg->alg_key_len = 0; 1216 x->ealg->alg_key_len = 0;
1210 if (key) { 1217 if (key) {
@@ -1249,8 +1256,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
1249 struct xfrm_encap_tmpl *natt; 1256 struct xfrm_encap_tmpl *natt;
1250 1257
1251 x->encap = kmalloc(sizeof(*x->encap), GFP_KERNEL); 1258 x->encap = kmalloc(sizeof(*x->encap), GFP_KERNEL);
1252 if (!x->encap) 1259 if (!x->encap) {
1260 err = -ENOMEM;
1253 goto out; 1261 goto out;
1262 }
1254 1263
1255 natt = x->encap; 1264 natt = x->encap;
1256 n_type = ext_hdrs[SADB_X_EXT_NAT_T_TYPE-1]; 1265 n_type = ext_hdrs[SADB_X_EXT_NAT_T_TYPE-1];
@@ -2755,6 +2764,8 @@ static int pfkey_spdflush(struct sock *sk, struct sk_buff *skb, const struct sad
2755 int err, err2; 2764 int err, err2;
2756 2765
2757 err = xfrm_policy_flush(net, XFRM_POLICY_TYPE_MAIN, true); 2766 err = xfrm_policy_flush(net, XFRM_POLICY_TYPE_MAIN, true);
2767 if (!err)
2768 xfrm_garbage_collect(net);
2758 err2 = unicast_flush_resp(sk, hdr); 2769 err2 = unicast_flush_resp(sk, hdr);
2759 if (err || err2) { 2770 if (err || err2) {
2760 if (err == -ESRCH) /* empty table - old silent behavior */ 2771 if (err == -ESRCH) /* empty table - old silent behavior */
@@ -3285,7 +3296,7 @@ static struct xfrm_policy *pfkey_compile_policy(struct sock *sk, int opt,
3285 p += pol->sadb_x_policy_len*8; 3296 p += pol->sadb_x_policy_len*8;
3286 sec_ctx = (struct sadb_x_sec_ctx *)p; 3297 sec_ctx = (struct sadb_x_sec_ctx *)p;
3287 if (len < pol->sadb_x_policy_len*8 + 3298 if (len < pol->sadb_x_policy_len*8 +
3288 sec_ctx->sadb_x_sec_len) { 3299 sec_ctx->sadb_x_sec_len*8) {
3289 *dir = -EINVAL; 3300 *dir = -EINVAL;
3290 goto out; 3301 goto out;
3291 } 3302 }
diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c
index 8b21af7321b9..4de2ec94b08c 100644
--- a/net/l2tp/l2tp_eth.c
+++ b/net/l2tp/l2tp_eth.c
@@ -114,12 +114,13 @@ static void l2tp_eth_get_stats64(struct net_device *dev,
114{ 114{
115 struct l2tp_eth *priv = netdev_priv(dev); 115 struct l2tp_eth *priv = netdev_priv(dev);
116 116
117 stats->tx_bytes = atomic_long_read(&priv->tx_bytes); 117 stats->tx_bytes = (unsigned long) atomic_long_read(&priv->tx_bytes);
118 stats->tx_packets = atomic_long_read(&priv->tx_packets); 118 stats->tx_packets = (unsigned long) atomic_long_read(&priv->tx_packets);
119 stats->tx_dropped = atomic_long_read(&priv->tx_dropped); 119 stats->tx_dropped = (unsigned long) atomic_long_read(&priv->tx_dropped);
120 stats->rx_bytes = atomic_long_read(&priv->rx_bytes); 120 stats->rx_bytes = (unsigned long) atomic_long_read(&priv->rx_bytes);
121 stats->rx_packets = atomic_long_read(&priv->rx_packets); 121 stats->rx_packets = (unsigned long) atomic_long_read(&priv->rx_packets);
122 stats->rx_errors = atomic_long_read(&priv->rx_errors); 122 stats->rx_errors = (unsigned long) atomic_long_read(&priv->rx_errors);
123
123} 124}
124 125
125static const struct net_device_ops l2tp_eth_netdev_ops = { 126static const struct net_device_ops l2tp_eth_netdev_ops = {
@@ -141,7 +142,7 @@ static void l2tp_eth_dev_setup(struct net_device *dev)
141 dev->priv_flags &= ~IFF_TX_SKB_SHARING; 142 dev->priv_flags &= ~IFF_TX_SKB_SHARING;
142 dev->features |= NETIF_F_LLTX; 143 dev->features |= NETIF_F_LLTX;
143 dev->netdev_ops = &l2tp_eth_netdev_ops; 144 dev->netdev_ops = &l2tp_eth_netdev_ops;
144 dev->destructor = free_netdev; 145 dev->needs_free_netdev = true;
145} 146}
146 147
147static void l2tp_eth_dev_recv(struct l2tp_session *session, struct sk_buff *skb, int data_len) 148static void l2tp_eth_dev_recv(struct l2tp_session *session, struct sk_buff *skb, int data_len)
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
index 8364fe5b59e4..c38d16f22d2a 100644
--- a/net/llc/af_llc.c
+++ b/net/llc/af_llc.c
@@ -311,6 +311,8 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
311 int rc = -EINVAL; 311 int rc = -EINVAL;
312 312
313 dprintk("%s: binding %02X\n", __func__, addr->sllc_sap); 313 dprintk("%s: binding %02X\n", __func__, addr->sllc_sap);
314
315 lock_sock(sk);
314 if (unlikely(!sock_flag(sk, SOCK_ZAPPED) || addrlen != sizeof(*addr))) 316 if (unlikely(!sock_flag(sk, SOCK_ZAPPED) || addrlen != sizeof(*addr)))
315 goto out; 317 goto out;
316 rc = -EAFNOSUPPORT; 318 rc = -EAFNOSUPPORT;
@@ -382,6 +384,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
382out_put: 384out_put:
383 llc_sap_put(sap); 385 llc_sap_put(sap);
384out: 386out:
387 release_sock(sk);
385 return rc; 388 return rc;
386} 389}
387 390
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index 60e2a62f7bef..cf2392b2ac71 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -7,7 +7,7 @@
7 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 7 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
8 * Copyright 2007, Michael Wu <flamingice@sourmilk.net> 8 * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
9 * Copyright 2007-2010, Intel Corporation 9 * Copyright 2007-2010, Intel Corporation
10 * Copyright(c) 2015 Intel Deutschland GmbH 10 * Copyright(c) 2015-2017 Intel Deutschland GmbH
11 * 11 *
12 * This program is free software; you can redistribute it and/or modify 12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as 13 * it under the terms of the GNU General Public License version 2 as
@@ -741,46 +741,43 @@ static void ieee80211_agg_tx_operational(struct ieee80211_local *local,
741 ieee80211_agg_start_txq(sta, tid, true); 741 ieee80211_agg_start_txq(sta, tid, true);
742} 742}
743 743
744void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid) 744void ieee80211_start_tx_ba_cb(struct sta_info *sta, int tid,
745 struct tid_ampdu_tx *tid_tx)
745{ 746{
746 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); 747 struct ieee80211_sub_if_data *sdata = sta->sdata;
747 struct ieee80211_local *local = sdata->local; 748 struct ieee80211_local *local = sdata->local;
748 struct sta_info *sta;
749 struct tid_ampdu_tx *tid_tx;
750 749
751 trace_api_start_tx_ba_cb(sdata, ra, tid); 750 if (WARN_ON(test_and_set_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state)))
751 return;
752
753 if (test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state))
754 ieee80211_agg_tx_operational(local, sta, tid);
755}
756
757static struct tid_ampdu_tx *
758ieee80211_lookup_tid_tx(struct ieee80211_sub_if_data *sdata,
759 const u8 *ra, u16 tid, struct sta_info **sta)
760{
761 struct tid_ampdu_tx *tid_tx;
752 762
753 if (tid >= IEEE80211_NUM_TIDS) { 763 if (tid >= IEEE80211_NUM_TIDS) {
754 ht_dbg(sdata, "Bad TID value: tid = %d (>= %d)\n", 764 ht_dbg(sdata, "Bad TID value: tid = %d (>= %d)\n",
755 tid, IEEE80211_NUM_TIDS); 765 tid, IEEE80211_NUM_TIDS);
756 return; 766 return NULL;
757 } 767 }
758 768
759 mutex_lock(&local->sta_mtx); 769 *sta = sta_info_get_bss(sdata, ra);
760 sta = sta_info_get_bss(sdata, ra); 770 if (!*sta) {
761 if (!sta) {
762 mutex_unlock(&local->sta_mtx);
763 ht_dbg(sdata, "Could not find station: %pM\n", ra); 771 ht_dbg(sdata, "Could not find station: %pM\n", ra);
764 return; 772 return NULL;
765 } 773 }
766 774
767 mutex_lock(&sta->ampdu_mlme.mtx); 775 tid_tx = rcu_dereference((*sta)->ampdu_mlme.tid_tx[tid]);
768 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
769 776
770 if (WARN_ON(!tid_tx)) { 777 if (WARN_ON(!tid_tx))
771 ht_dbg(sdata, "addBA was not requested!\n"); 778 ht_dbg(sdata, "addBA was not requested!\n");
772 goto unlock;
773 }
774 779
775 if (WARN_ON(test_and_set_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state))) 780 return tid_tx;
776 goto unlock;
777
778 if (test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state))
779 ieee80211_agg_tx_operational(local, sta, tid);
780
781 unlock:
782 mutex_unlock(&sta->ampdu_mlme.mtx);
783 mutex_unlock(&local->sta_mtx);
784} 781}
785 782
786void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, 783void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif,
@@ -788,19 +785,20 @@ void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif,
788{ 785{
789 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); 786 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
790 struct ieee80211_local *local = sdata->local; 787 struct ieee80211_local *local = sdata->local;
791 struct ieee80211_ra_tid *ra_tid; 788 struct sta_info *sta;
792 struct sk_buff *skb = dev_alloc_skb(0); 789 struct tid_ampdu_tx *tid_tx;
793 790
794 if (unlikely(!skb)) 791 trace_api_start_tx_ba_cb(sdata, ra, tid);
795 return;
796 792
797 ra_tid = (struct ieee80211_ra_tid *) &skb->cb; 793 rcu_read_lock();
798 memcpy(&ra_tid->ra, ra, ETH_ALEN); 794 tid_tx = ieee80211_lookup_tid_tx(sdata, ra, tid, &sta);
799 ra_tid->tid = tid; 795 if (!tid_tx)
796 goto out;
800 797
801 skb->pkt_type = IEEE80211_SDATA_QUEUE_AGG_START; 798 set_bit(HT_AGG_STATE_START_CB, &tid_tx->state);
802 skb_queue_tail(&sdata->skb_queue, skb); 799 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work);
803 ieee80211_queue_work(&local->hw, &sdata->work); 800 out:
801 rcu_read_unlock();
804} 802}
805EXPORT_SYMBOL(ieee80211_start_tx_ba_cb_irqsafe); 803EXPORT_SYMBOL(ieee80211_start_tx_ba_cb_irqsafe);
806 804
@@ -860,37 +858,18 @@ int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
860} 858}
861EXPORT_SYMBOL(ieee80211_stop_tx_ba_session); 859EXPORT_SYMBOL(ieee80211_stop_tx_ba_session);
862 860
863void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid) 861void ieee80211_stop_tx_ba_cb(struct sta_info *sta, int tid,
862 struct tid_ampdu_tx *tid_tx)
864{ 863{
865 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); 864 struct ieee80211_sub_if_data *sdata = sta->sdata;
866 struct ieee80211_local *local = sdata->local;
867 struct sta_info *sta;
868 struct tid_ampdu_tx *tid_tx;
869 bool send_delba = false; 865 bool send_delba = false;
870 866
871 trace_api_stop_tx_ba_cb(sdata, ra, tid); 867 ht_dbg(sdata, "Stopping Tx BA session for %pM tid %d\n",
872 868 sta->sta.addr, tid);
873 if (tid >= IEEE80211_NUM_TIDS) {
874 ht_dbg(sdata, "Bad TID value: tid = %d (>= %d)\n",
875 tid, IEEE80211_NUM_TIDS);
876 return;
877 }
878
879 ht_dbg(sdata, "Stopping Tx BA session for %pM tid %d\n", ra, tid);
880
881 mutex_lock(&local->sta_mtx);
882
883 sta = sta_info_get_bss(sdata, ra);
884 if (!sta) {
885 ht_dbg(sdata, "Could not find station: %pM\n", ra);
886 goto unlock;
887 }
888 869
889 mutex_lock(&sta->ampdu_mlme.mtx);
890 spin_lock_bh(&sta->lock); 870 spin_lock_bh(&sta->lock);
891 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
892 871
893 if (!tid_tx || !test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { 872 if (!test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) {
894 ht_dbg(sdata, 873 ht_dbg(sdata,
895 "unexpected callback to A-MPDU stop for %pM tid %d\n", 874 "unexpected callback to A-MPDU stop for %pM tid %d\n",
896 sta->sta.addr, tid); 875 sta->sta.addr, tid);
@@ -906,12 +885,8 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid)
906 spin_unlock_bh(&sta->lock); 885 spin_unlock_bh(&sta->lock);
907 886
908 if (send_delba) 887 if (send_delba)
909 ieee80211_send_delba(sdata, ra, tid, 888 ieee80211_send_delba(sdata, sta->sta.addr, tid,
910 WLAN_BACK_INITIATOR, WLAN_REASON_QSTA_NOT_USE); 889 WLAN_BACK_INITIATOR, WLAN_REASON_QSTA_NOT_USE);
911
912 mutex_unlock(&sta->ampdu_mlme.mtx);
913 unlock:
914 mutex_unlock(&local->sta_mtx);
915} 890}
916 891
917void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, 892void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif,
@@ -919,19 +894,20 @@ void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif,
919{ 894{
920 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); 895 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
921 struct ieee80211_local *local = sdata->local; 896 struct ieee80211_local *local = sdata->local;
922 struct ieee80211_ra_tid *ra_tid; 897 struct sta_info *sta;
923 struct sk_buff *skb = dev_alloc_skb(0); 898 struct tid_ampdu_tx *tid_tx;
924 899
925 if (unlikely(!skb)) 900 trace_api_stop_tx_ba_cb(sdata, ra, tid);
926 return;
927 901
928 ra_tid = (struct ieee80211_ra_tid *) &skb->cb; 902 rcu_read_lock();
929 memcpy(&ra_tid->ra, ra, ETH_ALEN); 903 tid_tx = ieee80211_lookup_tid_tx(sdata, ra, tid, &sta);
930 ra_tid->tid = tid; 904 if (!tid_tx)
905 goto out;
931 906
932 skb->pkt_type = IEEE80211_SDATA_QUEUE_AGG_STOP; 907 set_bit(HT_AGG_STATE_STOP_CB, &tid_tx->state);
933 skb_queue_tail(&sdata->skb_queue, skb); 908 ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work);
934 ieee80211_queue_work(&local->hw, &sdata->work); 909 out:
910 rcu_read_unlock();
935} 911}
936EXPORT_SYMBOL(ieee80211_stop_tx_ba_cb_irqsafe); 912EXPORT_SYMBOL(ieee80211_stop_tx_ba_cb_irqsafe);
937 913
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 6c2e6060cd54..4a388fe8c2d1 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -902,6 +902,8 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
902 default: 902 default:
903 return -EINVAL; 903 return -EINVAL;
904 } 904 }
905 sdata->u.ap.req_smps = sdata->smps_mode;
906
905 sdata->needed_rx_chains = sdata->local->rx_chains; 907 sdata->needed_rx_chains = sdata->local->rx_chains;
906 908
907 sdata->vif.bss_conf.beacon_int = params->beacon_interval; 909 sdata->vif.bss_conf.beacon_int = params->beacon_interval;
diff --git a/net/mac80211/ht.c b/net/mac80211/ht.c
index f4a528773563..6ca5442b1e03 100644
--- a/net/mac80211/ht.c
+++ b/net/mac80211/ht.c
@@ -7,6 +7,7 @@
7 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 7 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
8 * Copyright 2007, Michael Wu <flamingice@sourmilk.net> 8 * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
9 * Copyright 2007-2010, Intel Corporation 9 * Copyright 2007-2010, Intel Corporation
10 * Copyright 2017 Intel Deutschland GmbH
10 * 11 *
11 * This program is free software; you can redistribute it and/or modify 12 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as 13 * it under the terms of the GNU General Public License version 2 as
@@ -289,8 +290,6 @@ void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta,
289{ 290{
290 int i; 291 int i;
291 292
292 cancel_work_sync(&sta->ampdu_mlme.work);
293
294 for (i = 0; i < IEEE80211_NUM_TIDS; i++) { 293 for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
295 __ieee80211_stop_tx_ba_session(sta, i, reason); 294 __ieee80211_stop_tx_ba_session(sta, i, reason);
296 __ieee80211_stop_rx_ba_session(sta, i, WLAN_BACK_RECIPIENT, 295 __ieee80211_stop_rx_ba_session(sta, i, WLAN_BACK_RECIPIENT,
@@ -298,6 +297,9 @@ void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta,
298 reason != AGG_STOP_DESTROY_STA && 297 reason != AGG_STOP_DESTROY_STA &&
299 reason != AGG_STOP_PEER_REQUEST); 298 reason != AGG_STOP_PEER_REQUEST);
300 } 299 }
300
301 /* stopping might queue the work again - so cancel only afterwards */
302 cancel_work_sync(&sta->ampdu_mlme.work);
301} 303}
302 304
303void ieee80211_ba_session_work(struct work_struct *work) 305void ieee80211_ba_session_work(struct work_struct *work)
@@ -352,10 +354,16 @@ void ieee80211_ba_session_work(struct work_struct *work)
352 spin_unlock_bh(&sta->lock); 354 spin_unlock_bh(&sta->lock);
353 355
354 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); 356 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
355 if (tid_tx && test_and_clear_bit(HT_AGG_STATE_WANT_STOP, 357 if (!tid_tx)
356 &tid_tx->state)) 358 continue;
359
360 if (test_and_clear_bit(HT_AGG_STATE_START_CB, &tid_tx->state))
361 ieee80211_start_tx_ba_cb(sta, tid, tid_tx);
362 if (test_and_clear_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state))
357 ___ieee80211_stop_tx_ba_session(sta, tid, 363 ___ieee80211_stop_tx_ba_session(sta, tid,
358 AGG_STOP_LOCAL_REQUEST); 364 AGG_STOP_LOCAL_REQUEST);
365 if (test_and_clear_bit(HT_AGG_STATE_STOP_CB, &tid_tx->state))
366 ieee80211_stop_tx_ba_cb(sta, tid, tid_tx);
359 } 367 }
360 mutex_unlock(&sta->ampdu_mlme.mtx); 368 mutex_unlock(&sta->ampdu_mlme.mtx);
361} 369}
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index f8f6c148f554..5e002f62c235 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -1036,8 +1036,6 @@ struct ieee80211_rx_agg {
1036 1036
1037enum sdata_queue_type { 1037enum sdata_queue_type {
1038 IEEE80211_SDATA_QUEUE_TYPE_FRAME = 0, 1038 IEEE80211_SDATA_QUEUE_TYPE_FRAME = 0,
1039 IEEE80211_SDATA_QUEUE_AGG_START = 1,
1040 IEEE80211_SDATA_QUEUE_AGG_STOP = 2,
1041 IEEE80211_SDATA_QUEUE_RX_AGG_START = 3, 1039 IEEE80211_SDATA_QUEUE_RX_AGG_START = 3,
1042 IEEE80211_SDATA_QUEUE_RX_AGG_STOP = 4, 1040 IEEE80211_SDATA_QUEUE_RX_AGG_STOP = 4,
1043}; 1041};
@@ -1427,12 +1425,6 @@ ieee80211_get_sband(struct ieee80211_sub_if_data *sdata)
1427 return local->hw.wiphy->bands[band]; 1425 return local->hw.wiphy->bands[band];
1428} 1426}
1429 1427
1430/* this struct represents 802.11n's RA/TID combination */
1431struct ieee80211_ra_tid {
1432 u8 ra[ETH_ALEN];
1433 u16 tid;
1434};
1435
1436/* this struct holds the value parsing from channel switch IE */ 1428/* this struct holds the value parsing from channel switch IE */
1437struct ieee80211_csa_ie { 1429struct ieee80211_csa_ie {
1438 struct cfg80211_chan_def chandef; 1430 struct cfg80211_chan_def chandef;
@@ -1539,7 +1531,7 @@ ieee80211_have_rx_timestamp(struct ieee80211_rx_status *status)
1539 return true; 1531 return true;
1540 /* can't handle non-legacy preamble yet */ 1532 /* can't handle non-legacy preamble yet */
1541 if (status->flag & RX_FLAG_MACTIME_PLCP_START && 1533 if (status->flag & RX_FLAG_MACTIME_PLCP_START &&
1542 status->encoding != RX_ENC_LEGACY) 1534 status->encoding == RX_ENC_LEGACY)
1543 return true; 1535 return true;
1544 return false; 1536 return false;
1545} 1537}
@@ -1794,8 +1786,10 @@ int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
1794 enum ieee80211_agg_stop_reason reason); 1786 enum ieee80211_agg_stop_reason reason);
1795int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, 1787int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
1796 enum ieee80211_agg_stop_reason reason); 1788 enum ieee80211_agg_stop_reason reason);
1797void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid); 1789void ieee80211_start_tx_ba_cb(struct sta_info *sta, int tid,
1798void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid); 1790 struct tid_ampdu_tx *tid_tx);
1791void ieee80211_stop_tx_ba_cb(struct sta_info *sta, int tid,
1792 struct tid_ampdu_tx *tid_tx);
1799void ieee80211_ba_session_work(struct work_struct *work); 1793void ieee80211_ba_session_work(struct work_struct *work);
1800void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid); 1794void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid);
1801void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid); 1795void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid);
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 3bd5b81f5d81..f5f50150ba1c 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -1213,7 +1213,6 @@ static const struct net_device_ops ieee80211_monitorif_ops = {
1213static void ieee80211_if_free(struct net_device *dev) 1213static void ieee80211_if_free(struct net_device *dev)
1214{ 1214{
1215 free_percpu(dev->tstats); 1215 free_percpu(dev->tstats);
1216 free_netdev(dev);
1217} 1216}
1218 1217
1219static void ieee80211_if_setup(struct net_device *dev) 1218static void ieee80211_if_setup(struct net_device *dev)
@@ -1221,7 +1220,8 @@ static void ieee80211_if_setup(struct net_device *dev)
1221 ether_setup(dev); 1220 ether_setup(dev);
1222 dev->priv_flags &= ~IFF_TX_SKB_SHARING; 1221 dev->priv_flags &= ~IFF_TX_SKB_SHARING;
1223 dev->netdev_ops = &ieee80211_dataif_ops; 1222 dev->netdev_ops = &ieee80211_dataif_ops;
1224 dev->destructor = ieee80211_if_free; 1223 dev->needs_free_netdev = true;
1224 dev->priv_destructor = ieee80211_if_free;
1225} 1225}
1226 1226
1227static void ieee80211_if_setup_no_queue(struct net_device *dev) 1227static void ieee80211_if_setup_no_queue(struct net_device *dev)
@@ -1237,7 +1237,6 @@ static void ieee80211_iface_work(struct work_struct *work)
1237 struct ieee80211_local *local = sdata->local; 1237 struct ieee80211_local *local = sdata->local;
1238 struct sk_buff *skb; 1238 struct sk_buff *skb;
1239 struct sta_info *sta; 1239 struct sta_info *sta;
1240 struct ieee80211_ra_tid *ra_tid;
1241 struct ieee80211_rx_agg *rx_agg; 1240 struct ieee80211_rx_agg *rx_agg;
1242 1241
1243 if (!ieee80211_sdata_running(sdata)) 1242 if (!ieee80211_sdata_running(sdata))
@@ -1253,15 +1252,7 @@ static void ieee80211_iface_work(struct work_struct *work)
1253 while ((skb = skb_dequeue(&sdata->skb_queue))) { 1252 while ((skb = skb_dequeue(&sdata->skb_queue))) {
1254 struct ieee80211_mgmt *mgmt = (void *)skb->data; 1253 struct ieee80211_mgmt *mgmt = (void *)skb->data;
1255 1254
1256 if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_START) { 1255 if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_START) {
1257 ra_tid = (void *)&skb->cb;
1258 ieee80211_start_tx_ba_cb(&sdata->vif, ra_tid->ra,
1259 ra_tid->tid);
1260 } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_STOP) {
1261 ra_tid = (void *)&skb->cb;
1262 ieee80211_stop_tx_ba_cb(&sdata->vif, ra_tid->ra,
1263 ra_tid->tid);
1264 } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_START) {
1265 rx_agg = (void *)&skb->cb; 1256 rx_agg = (void *)&skb->cb;
1266 mutex_lock(&local->sta_mtx); 1257 mutex_lock(&local->sta_mtx);
1267 sta = sta_info_get_bss(sdata, rx_agg->addr); 1258 sta = sta_info_get_bss(sdata, rx_agg->addr);
@@ -1825,6 +1816,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
1825 ret = dev_alloc_name(ndev, ndev->name); 1816 ret = dev_alloc_name(ndev, ndev->name);
1826 if (ret < 0) { 1817 if (ret < 0) {
1827 ieee80211_if_free(ndev); 1818 ieee80211_if_free(ndev);
1819 free_netdev(ndev);
1828 return ret; 1820 return ret;
1829 } 1821 }
1830 1822
@@ -1914,7 +1906,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
1914 1906
1915 ret = register_netdevice(ndev); 1907 ret = register_netdevice(ndev);
1916 if (ret) { 1908 if (ret) {
1917 ieee80211_if_free(ndev); 1909 free_netdev(ndev);
1918 return ret; 1910 return ret;
1919 } 1911 }
1920 } 1912 }
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 0ea9712bd99e..cc8e6ea1b27e 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -601,7 +601,7 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
601 struct ieee80211_supported_band *sband; 601 struct ieee80211_supported_band *sband;
602 struct ieee80211_chanctx_conf *chanctx_conf; 602 struct ieee80211_chanctx_conf *chanctx_conf;
603 struct ieee80211_channel *chan; 603 struct ieee80211_channel *chan;
604 u32 rate_flags, rates = 0; 604 u32 rates = 0;
605 605
606 sdata_assert_lock(sdata); 606 sdata_assert_lock(sdata);
607 607
@@ -612,7 +612,6 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
612 return; 612 return;
613 } 613 }
614 chan = chanctx_conf->def.chan; 614 chan = chanctx_conf->def.chan;
615 rate_flags = ieee80211_chandef_rate_flags(&chanctx_conf->def);
616 rcu_read_unlock(); 615 rcu_read_unlock();
617 sband = local->hw.wiphy->bands[chan->band]; 616 sband = local->hw.wiphy->bands[chan->band];
618 shift = ieee80211_vif_get_shift(&sdata->vif); 617 shift = ieee80211_vif_get_shift(&sdata->vif);
@@ -636,9 +635,6 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
636 */ 635 */
637 rates_len = 0; 636 rates_len = 0;
638 for (i = 0; i < sband->n_bitrates; i++) { 637 for (i = 0; i < sband->n_bitrates; i++) {
639 if ((rate_flags & sband->bitrates[i].flags)
640 != rate_flags)
641 continue;
642 rates |= BIT(i); 638 rates |= BIT(i);
643 rates_len++; 639 rates_len++;
644 } 640 }
@@ -2818,7 +2814,7 @@ static void ieee80211_get_rates(struct ieee80211_supported_band *sband,
2818 u32 *rates, u32 *basic_rates, 2814 u32 *rates, u32 *basic_rates,
2819 bool *have_higher_than_11mbit, 2815 bool *have_higher_than_11mbit,
2820 int *min_rate, int *min_rate_index, 2816 int *min_rate, int *min_rate_index,
2821 int shift, u32 rate_flags) 2817 int shift)
2822{ 2818{
2823 int i, j; 2819 int i, j;
2824 2820
@@ -2846,8 +2842,6 @@ static void ieee80211_get_rates(struct ieee80211_supported_band *sband,
2846 int brate; 2842 int brate;
2847 2843
2848 br = &sband->bitrates[j]; 2844 br = &sband->bitrates[j];
2849 if ((rate_flags & br->flags) != rate_flags)
2850 continue;
2851 2845
2852 brate = DIV_ROUND_UP(br->bitrate, (1 << shift) * 5); 2846 brate = DIV_ROUND_UP(br->bitrate, (1 << shift) * 5);
2853 if (brate == rate) { 2847 if (brate == rate) {
@@ -4398,40 +4392,32 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata,
4398 return -ENOMEM; 4392 return -ENOMEM;
4399 } 4393 }
4400 4394
4401 if (new_sta || override) { 4395 /*
4402 err = ieee80211_prep_channel(sdata, cbss); 4396 * Set up the information for the new channel before setting the
4403 if (err) { 4397 * new channel. We can't - completely race-free - change the basic
4404 if (new_sta) 4398 * rates bitmap and the channel (sband) that it refers to, but if
4405 sta_info_free(local, new_sta); 4399 * we set it up before we at least avoid calling into the driver's
4406 return -EINVAL; 4400 * bss_info_changed() method with invalid information (since we do
4407 } 4401 * call that from changing the channel - only for IDLE and perhaps
4408 } 4402 * some others, but ...).
4409 4403 *
4404 * So to avoid that, just set up all the new information before the
4405 * channel, but tell the driver to apply it only afterwards, since
4406 * it might need the new channel for that.
4407 */
4410 if (new_sta) { 4408 if (new_sta) {
4411 u32 rates = 0, basic_rates = 0; 4409 u32 rates = 0, basic_rates = 0;
4412 bool have_higher_than_11mbit; 4410 bool have_higher_than_11mbit;
4413 int min_rate = INT_MAX, min_rate_index = -1; 4411 int min_rate = INT_MAX, min_rate_index = -1;
4414 struct ieee80211_chanctx_conf *chanctx_conf;
4415 const struct cfg80211_bss_ies *ies; 4412 const struct cfg80211_bss_ies *ies;
4416 int shift = ieee80211_vif_get_shift(&sdata->vif); 4413 int shift = ieee80211_vif_get_shift(&sdata->vif);
4417 u32 rate_flags;
4418
4419 rcu_read_lock();
4420 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
4421 if (WARN_ON(!chanctx_conf)) {
4422 rcu_read_unlock();
4423 sta_info_free(local, new_sta);
4424 return -EINVAL;
4425 }
4426 rate_flags = ieee80211_chandef_rate_flags(&chanctx_conf->def);
4427 rcu_read_unlock();
4428 4414
4429 ieee80211_get_rates(sband, bss->supp_rates, 4415 ieee80211_get_rates(sband, bss->supp_rates,
4430 bss->supp_rates_len, 4416 bss->supp_rates_len,
4431 &rates, &basic_rates, 4417 &rates, &basic_rates,
4432 &have_higher_than_11mbit, 4418 &have_higher_than_11mbit,
4433 &min_rate, &min_rate_index, 4419 &min_rate, &min_rate_index,
4434 shift, rate_flags); 4420 shift);
4435 4421
4436 /* 4422 /*
4437 * This used to be a workaround for basic rates missing 4423 * This used to be a workaround for basic rates missing
@@ -4489,8 +4475,22 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata,
4489 sdata->vif.bss_conf.sync_dtim_count = 0; 4475 sdata->vif.bss_conf.sync_dtim_count = 0;
4490 } 4476 }
4491 rcu_read_unlock(); 4477 rcu_read_unlock();
4478 }
4492 4479
4493 /* tell driver about BSSID, basic rates and timing */ 4480 if (new_sta || override) {
4481 err = ieee80211_prep_channel(sdata, cbss);
4482 if (err) {
4483 if (new_sta)
4484 sta_info_free(local, new_sta);
4485 return -EINVAL;
4486 }
4487 }
4488
4489 if (new_sta) {
4490 /*
4491 * tell driver about BSSID, basic rates and timing
4492 * this was set up above, before setting the channel
4493 */
4494 ieee80211_bss_info_change_notify(sdata, 4494 ieee80211_bss_info_change_notify(sdata,
4495 BSS_CHANGED_BSSID | BSS_CHANGED_BASIC_RATES | 4495 BSS_CHANGED_BSSID | BSS_CHANGED_BASIC_RATES |
4496 BSS_CHANGED_BEACON_INT); 4496 BSS_CHANGED_BEACON_INT);
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 35f4c7d7a500..3674fe3d67dc 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1613,12 +1613,16 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
1613 */ 1613 */
1614 if (!ieee80211_hw_check(&sta->local->hw, AP_LINK_PS) && 1614 if (!ieee80211_hw_check(&sta->local->hw, AP_LINK_PS) &&
1615 !ieee80211_has_morefrags(hdr->frame_control) && 1615 !ieee80211_has_morefrags(hdr->frame_control) &&
1616 !ieee80211_is_back_req(hdr->frame_control) &&
1616 !(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) && 1617 !(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) &&
1617 (rx->sdata->vif.type == NL80211_IFTYPE_AP || 1618 (rx->sdata->vif.type == NL80211_IFTYPE_AP ||
1618 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) && 1619 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) &&
1619 /* PM bit is only checked in frames where it isn't reserved, 1620 /*
1621 * PM bit is only checked in frames where it isn't reserved,
1620 * in AP mode it's reserved in non-bufferable management frames 1622 * in AP mode it's reserved in non-bufferable management frames
1621 * (cf. IEEE 802.11-2012 8.2.4.1.7 Power Management field) 1623 * (cf. IEEE 802.11-2012 8.2.4.1.7 Power Management field)
1624 * BAR frames should be ignored as specified in
1625 * IEEE 802.11-2012 10.2.1.2.
1622 */ 1626 */
1623 (!ieee80211_is_mgmt(hdr->frame_control) || 1627 (!ieee80211_is_mgmt(hdr->frame_control) ||
1624 ieee80211_is_bufferable_mmpdu(hdr->frame_control))) { 1628 ieee80211_is_bufferable_mmpdu(hdr->frame_control))) {
@@ -2492,7 +2496,8 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2492 if (is_multicast_ether_addr(hdr->addr1)) { 2496 if (is_multicast_ether_addr(hdr->addr1)) {
2493 mpp_addr = hdr->addr3; 2497 mpp_addr = hdr->addr3;
2494 proxied_addr = mesh_hdr->eaddr1; 2498 proxied_addr = mesh_hdr->eaddr1;
2495 } else if (mesh_hdr->flags & MESH_FLAGS_AE_A5_A6) { 2499 } else if ((mesh_hdr->flags & MESH_FLAGS_AE) ==
2500 MESH_FLAGS_AE_A5_A6) {
2496 /* has_a4 already checked in ieee80211_rx_mesh_check */ 2501 /* has_a4 already checked in ieee80211_rx_mesh_check */
2497 mpp_addr = hdr->addr4; 2502 mpp_addr = hdr->addr4;
2498 proxied_addr = mesh_hdr->eaddr2; 2503 proxied_addr = mesh_hdr->eaddr2;
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 7cdf7a835bb0..403e3cc58b57 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -2155,7 +2155,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
2155 struct ieee80211_sta_rx_stats *cpurxs; 2155 struct ieee80211_sta_rx_stats *cpurxs;
2156 2156
2157 cpurxs = per_cpu_ptr(sta->pcpu_rx_stats, cpu); 2157 cpurxs = per_cpu_ptr(sta->pcpu_rx_stats, cpu);
2158 sinfo->rx_packets += cpurxs->dropped; 2158 sinfo->rx_dropped_misc += cpurxs->dropped;
2159 } 2159 }
2160 } 2160 }
2161 2161
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index 5609cacb20d5..ea0747d6a6da 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -116,6 +116,8 @@ enum ieee80211_sta_info_flags {
116#define HT_AGG_STATE_STOPPING 3 116#define HT_AGG_STATE_STOPPING 3
117#define HT_AGG_STATE_WANT_START 4 117#define HT_AGG_STATE_WANT_START 4
118#define HT_AGG_STATE_WANT_STOP 5 118#define HT_AGG_STATE_WANT_STOP 5
119#define HT_AGG_STATE_START_CB 6
120#define HT_AGG_STATE_STOP_CB 7
119 121
120enum ieee80211_agg_stop_reason { 122enum ieee80211_agg_stop_reason {
121 AGG_STOP_DECLINED, 123 AGG_STOP_DECLINED,
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c
index c1ef22df865f..cc19614ff4e6 100644
--- a/net/mac80211/wpa.c
+++ b/net/mac80211/wpa.c
@@ -17,6 +17,7 @@
17#include <asm/unaligned.h> 17#include <asm/unaligned.h>
18#include <net/mac80211.h> 18#include <net/mac80211.h>
19#include <crypto/aes.h> 19#include <crypto/aes.h>
20#include <crypto/algapi.h>
20 21
21#include "ieee80211_i.h" 22#include "ieee80211_i.h"
22#include "michael.h" 23#include "michael.h"
@@ -153,7 +154,7 @@ ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx)
153 data_len = skb->len - hdrlen - MICHAEL_MIC_LEN; 154 data_len = skb->len - hdrlen - MICHAEL_MIC_LEN;
154 key = &rx->key->conf.key[NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY]; 155 key = &rx->key->conf.key[NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY];
155 michael_mic(key, hdr, data, data_len, mic); 156 michael_mic(key, hdr, data, data_len, mic);
156 if (memcmp(mic, data + data_len, MICHAEL_MIC_LEN) != 0) 157 if (crypto_memneq(mic, data + data_len, MICHAEL_MIC_LEN))
157 goto mic_fail; 158 goto mic_fail;
158 159
159 /* remove Michael MIC from payload */ 160 /* remove Michael MIC from payload */
@@ -1048,7 +1049,7 @@ ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx)
1048 bip_aad(skb, aad); 1049 bip_aad(skb, aad);
1049 ieee80211_aes_cmac(key->u.aes_cmac.tfm, aad, 1050 ieee80211_aes_cmac(key->u.aes_cmac.tfm, aad,
1050 skb->data + 24, skb->len - 24, mic); 1051 skb->data + 24, skb->len - 24, mic);
1051 if (memcmp(mic, mmie->mic, sizeof(mmie->mic)) != 0) { 1052 if (crypto_memneq(mic, mmie->mic, sizeof(mmie->mic))) {
1052 key->u.aes_cmac.icverrors++; 1053 key->u.aes_cmac.icverrors++;
1053 return RX_DROP_UNUSABLE; 1054 return RX_DROP_UNUSABLE;
1054 } 1055 }
@@ -1098,7 +1099,7 @@ ieee80211_crypto_aes_cmac_256_decrypt(struct ieee80211_rx_data *rx)
1098 bip_aad(skb, aad); 1099 bip_aad(skb, aad);
1099 ieee80211_aes_cmac_256(key->u.aes_cmac.tfm, aad, 1100 ieee80211_aes_cmac_256(key->u.aes_cmac.tfm, aad,
1100 skb->data + 24, skb->len - 24, mic); 1101 skb->data + 24, skb->len - 24, mic);
1101 if (memcmp(mic, mmie->mic, sizeof(mmie->mic)) != 0) { 1102 if (crypto_memneq(mic, mmie->mic, sizeof(mmie->mic))) {
1102 key->u.aes_cmac.icverrors++; 1103 key->u.aes_cmac.icverrors++;
1103 return RX_DROP_UNUSABLE; 1104 return RX_DROP_UNUSABLE;
1104 } 1105 }
@@ -1202,7 +1203,7 @@ ieee80211_crypto_aes_gmac_decrypt(struct ieee80211_rx_data *rx)
1202 if (ieee80211_aes_gmac(key->u.aes_gmac.tfm, aad, nonce, 1203 if (ieee80211_aes_gmac(key->u.aes_gmac.tfm, aad, nonce,
1203 skb->data + 24, skb->len - 24, 1204 skb->data + 24, skb->len - 24,
1204 mic) < 0 || 1205 mic) < 0 ||
1205 memcmp(mic, mmie->mic, sizeof(mmie->mic)) != 0) { 1206 crypto_memneq(mic, mmie->mic, sizeof(mmie->mic))) {
1206 key->u.aes_gmac.icverrors++; 1207 key->u.aes_gmac.icverrors++;
1207 return RX_DROP_UNUSABLE; 1208 return RX_DROP_UNUSABLE;
1208 } 1209 }
diff --git a/net/mac802154/iface.c b/net/mac802154/iface.c
index 06019dba4b10..bd88a9b80773 100644
--- a/net/mac802154/iface.c
+++ b/net/mac802154/iface.c
@@ -526,8 +526,6 @@ static void mac802154_wpan_free(struct net_device *dev)
526 struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev); 526 struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
527 527
528 mac802154_llsec_destroy(&sdata->sec); 528 mac802154_llsec_destroy(&sdata->sec);
529
530 free_netdev(dev);
531} 529}
532 530
533static void ieee802154_if_setup(struct net_device *dev) 531static void ieee802154_if_setup(struct net_device *dev)
@@ -593,7 +591,8 @@ ieee802154_setup_sdata(struct ieee802154_sub_if_data *sdata,
593 sdata->dev->dev_addr); 591 sdata->dev->dev_addr);
594 592
595 sdata->dev->header_ops = &mac802154_header_ops; 593 sdata->dev->header_ops = &mac802154_header_ops;
596 sdata->dev->destructor = mac802154_wpan_free; 594 sdata->dev->needs_free_netdev = true;
595 sdata->dev->priv_destructor = mac802154_wpan_free;
597 sdata->dev->netdev_ops = &mac802154_wpan_ops; 596 sdata->dev->netdev_ops = &mac802154_wpan_ops;
598 sdata->dev->ml_priv = &mac802154_mlme_wpan; 597 sdata->dev->ml_priv = &mac802154_mlme_wpan;
599 wpan_dev->promiscuous_mode = false; 598 wpan_dev->promiscuous_mode = false;
@@ -608,7 +607,7 @@ ieee802154_setup_sdata(struct ieee802154_sub_if_data *sdata,
608 607
609 break; 608 break;
610 case NL802154_IFTYPE_MONITOR: 609 case NL802154_IFTYPE_MONITOR:
611 sdata->dev->destructor = free_netdev; 610 sdata->dev->needs_free_netdev = true;
612 sdata->dev->netdev_ops = &mac802154_monitor_ops; 611 sdata->dev->netdev_ops = &mac802154_monitor_ops;
613 wpan_dev->promiscuous_mode = true; 612 wpan_dev->promiscuous_mode = true;
614 break; 613 break;
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
index 257ec66009da..7b05fd1497ce 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
@@ -1418,7 +1418,7 @@ static void mpls_ifup(struct net_device *dev, unsigned int flags)
1418 continue; 1418 continue;
1419 alive++; 1419 alive++;
1420 nh_flags &= ~flags; 1420 nh_flags &= ~flags;
1421 WRITE_ONCE(nh->nh_flags, flags); 1421 WRITE_ONCE(nh->nh_flags, nh_flags);
1422 } endfor_nexthops(rt); 1422 } endfor_nexthops(rt);
1423 1423
1424 WRITE_ONCE(rt->rt_nhn_alive, alive); 1424 WRITE_ONCE(rt->rt_nhn_alive, alive);
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
index d2d7bdf1d510..ad99c1ceea6f 100644
--- a/net/netfilter/ipvs/ip_vs_core.c
+++ b/net/netfilter/ipvs/ip_vs_core.c
@@ -849,10 +849,8 @@ static int handle_response_icmp(int af, struct sk_buff *skb,
849{ 849{
850 unsigned int verdict = NF_DROP; 850 unsigned int verdict = NF_DROP;
851 851
852 if (IP_VS_FWD_METHOD(cp) != 0) { 852 if (IP_VS_FWD_METHOD(cp) != IP_VS_CONN_F_MASQ)
853 pr_err("shouldn't reach here, because the box is on the " 853 goto ignore_cp;
854 "half connection in the tun/dr module.\n");
855 }
856 854
857 /* Ensure the checksum is correct */ 855 /* Ensure the checksum is correct */
858 if (!skb_csum_unnecessary(skb) && ip_vs_checksum_complete(skb, ihl)) { 856 if (!skb_csum_unnecessary(skb) && ip_vs_checksum_complete(skb, ihl)) {
@@ -886,6 +884,8 @@ static int handle_response_icmp(int af, struct sk_buff *skb,
886 ip_vs_notrack(skb); 884 ip_vs_notrack(skb);
887 else 885 else
888 ip_vs_update_conntrack(skb, cp, 0); 886 ip_vs_update_conntrack(skb, cp, 0);
887
888ignore_cp:
889 verdict = NF_ACCEPT; 889 verdict = NF_ACCEPT;
890 890
891out: 891out:
@@ -1385,8 +1385,11 @@ ip_vs_out(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, in
1385 */ 1385 */
1386 cp = pp->conn_out_get(ipvs, af, skb, &iph); 1386 cp = pp->conn_out_get(ipvs, af, skb, &iph);
1387 1387
1388 if (likely(cp)) 1388 if (likely(cp)) {
1389 if (IP_VS_FWD_METHOD(cp) != IP_VS_CONN_F_MASQ)
1390 goto ignore_cp;
1389 return handle_response(af, skb, pd, cp, &iph, hooknum); 1391 return handle_response(af, skb, pd, cp, &iph, hooknum);
1392 }
1390 1393
1391 /* Check for real-server-started requests */ 1394 /* Check for real-server-started requests */
1392 if (atomic_read(&ipvs->conn_out_counter)) { 1395 if (atomic_read(&ipvs->conn_out_counter)) {
@@ -1444,9 +1447,15 @@ ip_vs_out(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, in
1444 } 1447 }
1445 } 1448 }
1446 } 1449 }
1450
1451out:
1447 IP_VS_DBG_PKT(12, af, pp, skb, iph.off, 1452 IP_VS_DBG_PKT(12, af, pp, skb, iph.off,
1448 "ip_vs_out: packet continues traversal as normal"); 1453 "ip_vs_out: packet continues traversal as normal");
1449 return NF_ACCEPT; 1454 return NF_ACCEPT;
1455
1456ignore_cp:
1457 __ip_vs_conn_put(cp);
1458 goto out;
1450} 1459}
1451 1460
1452/* 1461/*
diff --git a/net/netfilter/nf_conntrack_helper.c b/net/netfilter/nf_conntrack_helper.c
index 3a60efa7799b..7f6100ca63be 100644
--- a/net/netfilter/nf_conntrack_helper.c
+++ b/net/netfilter/nf_conntrack_helper.c
@@ -174,6 +174,10 @@ nf_conntrack_helper_try_module_get(const char *name, u16 l3num, u8 protonum)
174#endif 174#endif
175 if (h != NULL && !try_module_get(h->me)) 175 if (h != NULL && !try_module_get(h->me))
176 h = NULL; 176 h = NULL;
177 if (h != NULL && !refcount_inc_not_zero(&h->refcnt)) {
178 module_put(h->me);
179 h = NULL;
180 }
177 181
178 rcu_read_unlock(); 182 rcu_read_unlock();
179 183
@@ -181,6 +185,13 @@ nf_conntrack_helper_try_module_get(const char *name, u16 l3num, u8 protonum)
181} 185}
182EXPORT_SYMBOL_GPL(nf_conntrack_helper_try_module_get); 186EXPORT_SYMBOL_GPL(nf_conntrack_helper_try_module_get);
183 187
188void nf_conntrack_helper_put(struct nf_conntrack_helper *helper)
189{
190 refcount_dec(&helper->refcnt);
191 module_put(helper->me);
192}
193EXPORT_SYMBOL_GPL(nf_conntrack_helper_put);
194
184struct nf_conn_help * 195struct nf_conn_help *
185nf_ct_helper_ext_add(struct nf_conn *ct, 196nf_ct_helper_ext_add(struct nf_conn *ct,
186 struct nf_conntrack_helper *helper, gfp_t gfp) 197 struct nf_conntrack_helper *helper, gfp_t gfp)
@@ -417,6 +428,7 @@ int nf_conntrack_helper_register(struct nf_conntrack_helper *me)
417 } 428 }
418 } 429 }
419 } 430 }
431 refcount_set(&me->refcnt, 1);
420 hlist_add_head_rcu(&me->hnode, &nf_ct_helper_hash[h]); 432 hlist_add_head_rcu(&me->hnode, &nf_ct_helper_hash[h]);
421 nf_ct_helper_count++; 433 nf_ct_helper_count++;
422out: 434out:
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
index dcf561b5c97a..a8be9b72e6cd 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@ -45,6 +45,8 @@
45#include <net/netfilter/nf_conntrack_zones.h> 45#include <net/netfilter/nf_conntrack_zones.h>
46#include <net/netfilter/nf_conntrack_timestamp.h> 46#include <net/netfilter/nf_conntrack_timestamp.h>
47#include <net/netfilter/nf_conntrack_labels.h> 47#include <net/netfilter/nf_conntrack_labels.h>
48#include <net/netfilter/nf_conntrack_seqadj.h>
49#include <net/netfilter/nf_conntrack_synproxy.h>
48#ifdef CONFIG_NF_NAT_NEEDED 50#ifdef CONFIG_NF_NAT_NEEDED
49#include <net/netfilter/nf_nat_core.h> 51#include <net/netfilter/nf_nat_core.h>
50#include <net/netfilter/nf_nat_l4proto.h> 52#include <net/netfilter/nf_nat_l4proto.h>
@@ -888,8 +890,13 @@ restart:
888 } 890 }
889out: 891out:
890 local_bh_enable(); 892 local_bh_enable();
891 if (last) 893 if (last) {
894 /* nf ct hash resize happened, now clear the leftover. */
895 if ((struct nf_conn *)cb->args[1] == last)
896 cb->args[1] = 0;
897
892 nf_ct_put(last); 898 nf_ct_put(last);
899 }
893 900
894 while (i) { 901 while (i) {
895 i--; 902 i--;
@@ -1007,9 +1014,8 @@ static const struct nla_policy tuple_nla_policy[CTA_TUPLE_MAX+1] = {
1007 1014
1008static int 1015static int
1009ctnetlink_parse_tuple(const struct nlattr * const cda[], 1016ctnetlink_parse_tuple(const struct nlattr * const cda[],
1010 struct nf_conntrack_tuple *tuple, 1017 struct nf_conntrack_tuple *tuple, u32 type,
1011 enum ctattr_type type, u_int8_t l3num, 1018 u_int8_t l3num, struct nf_conntrack_zone *zone)
1012 struct nf_conntrack_zone *zone)
1013{ 1019{
1014 struct nlattr *tb[CTA_TUPLE_MAX+1]; 1020 struct nlattr *tb[CTA_TUPLE_MAX+1];
1015 int err; 1021 int err;
@@ -1828,6 +1834,8 @@ ctnetlink_create_conntrack(struct net *net,
1828 nf_ct_tstamp_ext_add(ct, GFP_ATOMIC); 1834 nf_ct_tstamp_ext_add(ct, GFP_ATOMIC);
1829 nf_ct_ecache_ext_add(ct, 0, 0, GFP_ATOMIC); 1835 nf_ct_ecache_ext_add(ct, 0, 0, GFP_ATOMIC);
1830 nf_ct_labels_ext_add(ct); 1836 nf_ct_labels_ext_add(ct);
1837 nfct_seqadj_ext_add(ct);
1838 nfct_synproxy_ext_add(ct);
1831 1839
1832 /* we must add conntrack extensions before confirmation. */ 1840 /* we must add conntrack extensions before confirmation. */
1833 ct->status |= IPS_CONFIRMED; 1841 ct->status |= IPS_CONFIRMED;
@@ -2447,7 +2455,7 @@ static struct nfnl_ct_hook ctnetlink_glue_hook = {
2447 2455
2448static int ctnetlink_exp_dump_tuple(struct sk_buff *skb, 2456static int ctnetlink_exp_dump_tuple(struct sk_buff *skb,
2449 const struct nf_conntrack_tuple *tuple, 2457 const struct nf_conntrack_tuple *tuple,
2450 enum ctattr_expect type) 2458 u32 type)
2451{ 2459{
2452 struct nlattr *nest_parms; 2460 struct nlattr *nest_parms;
2453 2461
diff --git a/net/netfilter/nf_conntrack_proto_sctp.c b/net/netfilter/nf_conntrack_proto_sctp.c
index 13875d599a85..1c5b14a6cab3 100644
--- a/net/netfilter/nf_conntrack_proto_sctp.c
+++ b/net/netfilter/nf_conntrack_proto_sctp.c
@@ -512,16 +512,19 @@ static int sctp_error(struct net *net, struct nf_conn *tpl, struct sk_buff *skb,
512 u8 pf, unsigned int hooknum) 512 u8 pf, unsigned int hooknum)
513{ 513{
514 const struct sctphdr *sh; 514 const struct sctphdr *sh;
515 struct sctphdr _sctph;
516 const char *logmsg; 515 const char *logmsg;
517 516
518 sh = skb_header_pointer(skb, dataoff, sizeof(_sctph), &_sctph); 517 if (skb->len < dataoff + sizeof(struct sctphdr)) {
519 if (!sh) {
520 logmsg = "nf_ct_sctp: short packet "; 518 logmsg = "nf_ct_sctp: short packet ";
521 goto out_invalid; 519 goto out_invalid;
522 } 520 }
523 if (net->ct.sysctl_checksum && hooknum == NF_INET_PRE_ROUTING && 521 if (net->ct.sysctl_checksum && hooknum == NF_INET_PRE_ROUTING &&
524 skb->ip_summed == CHECKSUM_NONE) { 522 skb->ip_summed == CHECKSUM_NONE) {
523 if (!skb_make_writable(skb, dataoff + sizeof(struct sctphdr))) {
524 logmsg = "nf_ct_sctp: failed to read header ";
525 goto out_invalid;
526 }
527 sh = (const struct sctphdr *)(skb->data + dataoff);
525 if (sh->checksum != sctp_compute_cksum(skb, dataoff)) { 528 if (sh->checksum != sctp_compute_cksum(skb, dataoff)) {
526 logmsg = "nf_ct_sctp: bad CRC "; 529 logmsg = "nf_ct_sctp: bad CRC ";
527 goto out_invalid; 530 goto out_invalid;
diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c
index b48d6b5aae8a..6c72922d20ca 100644
--- a/net/netfilter/nf_nat_core.c
+++ b/net/netfilter/nf_nat_core.c
@@ -409,6 +409,10 @@ nf_nat_setup_info(struct nf_conn *ct,
409{ 409{
410 struct nf_conntrack_tuple curr_tuple, new_tuple; 410 struct nf_conntrack_tuple curr_tuple, new_tuple;
411 411
412 /* Can't setup nat info for confirmed ct. */
413 if (nf_ct_is_confirmed(ct))
414 return NF_ACCEPT;
415
412 NF_CT_ASSERT(maniptype == NF_NAT_MANIP_SRC || 416 NF_CT_ASSERT(maniptype == NF_NAT_MANIP_SRC ||
413 maniptype == NF_NAT_MANIP_DST); 417 maniptype == NF_NAT_MANIP_DST);
414 BUG_ON(nf_nat_initialized(ct, maniptype)); 418 BUG_ON(nf_nat_initialized(ct, maniptype));
@@ -562,7 +566,7 @@ static int nf_nat_proto_clean(struct nf_conn *ct, void *data)
562 * Else, when the conntrack is destoyed, nf_nat_cleanup_conntrack() 566 * Else, when the conntrack is destoyed, nf_nat_cleanup_conntrack()
563 * will delete entry from already-freed table. 567 * will delete entry from already-freed table.
564 */ 568 */
565 ct->status &= ~IPS_NAT_DONE_MASK; 569 clear_bit(IPS_SRC_NAT_DONE_BIT, &ct->status);
566 rhltable_remove(&nf_nat_bysource_table, &ct->nat_bysource, 570 rhltable_remove(&nf_nat_bysource_table, &ct->nat_bysource,
567 nf_nat_bysource_params); 571 nf_nat_bysource_params);
568 572
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index 559225029740..da314be0c048 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -3367,35 +3367,50 @@ static int nf_tables_dump_setelem(const struct nft_ctx *ctx,
3367 return nf_tables_fill_setelem(args->skb, set, elem); 3367 return nf_tables_fill_setelem(args->skb, set, elem);
3368} 3368}
3369 3369
3370struct nft_set_dump_ctx {
3371 const struct nft_set *set;
3372 struct nft_ctx ctx;
3373};
3374
3370static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb) 3375static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb)
3371{ 3376{
3377 struct nft_set_dump_ctx *dump_ctx = cb->data;
3372 struct net *net = sock_net(skb->sk); 3378 struct net *net = sock_net(skb->sk);
3373 u8 genmask = nft_genmask_cur(net); 3379 struct nft_af_info *afi;
3380 struct nft_table *table;
3374 struct nft_set *set; 3381 struct nft_set *set;
3375 struct nft_set_dump_args args; 3382 struct nft_set_dump_args args;
3376 struct nft_ctx ctx; 3383 bool set_found = false;
3377 struct nlattr *nla[NFTA_SET_ELEM_LIST_MAX + 1];
3378 struct nfgenmsg *nfmsg; 3384 struct nfgenmsg *nfmsg;
3379 struct nlmsghdr *nlh; 3385 struct nlmsghdr *nlh;
3380 struct nlattr *nest; 3386 struct nlattr *nest;
3381 u32 portid, seq; 3387 u32 portid, seq;
3382 int event, err; 3388 int event;
3383 3389
3384 err = nlmsg_parse(cb->nlh, sizeof(struct nfgenmsg), nla, 3390 rcu_read_lock();
3385 NFTA_SET_ELEM_LIST_MAX, nft_set_elem_list_policy, 3391 list_for_each_entry_rcu(afi, &net->nft.af_info, list) {
3386 NULL); 3392 if (afi != dump_ctx->ctx.afi)
3387 if (err < 0) 3393 continue;
3388 return err;
3389 3394
3390 err = nft_ctx_init_from_elemattr(&ctx, net, cb->skb, cb->nlh, 3395 list_for_each_entry_rcu(table, &afi->tables, list) {
3391 (void *)nla, genmask); 3396 if (table != dump_ctx->ctx.table)
3392 if (err < 0) 3397 continue;
3393 return err;
3394 3398
3395 set = nf_tables_set_lookup(ctx.table, nla[NFTA_SET_ELEM_LIST_SET], 3399 list_for_each_entry_rcu(set, &table->sets, list) {
3396 genmask); 3400 if (set == dump_ctx->set) {
3397 if (IS_ERR(set)) 3401 set_found = true;
3398 return PTR_ERR(set); 3402 break;
3403 }
3404 }
3405 break;
3406 }
3407 break;
3408 }
3409
3410 if (!set_found) {
3411 rcu_read_unlock();
3412 return -ENOENT;
3413 }
3399 3414
3400 event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWSETELEM); 3415 event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWSETELEM);
3401 portid = NETLINK_CB(cb->skb).portid; 3416 portid = NETLINK_CB(cb->skb).portid;
@@ -3407,11 +3422,11 @@ static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb)
3407 goto nla_put_failure; 3422 goto nla_put_failure;
3408 3423
3409 nfmsg = nlmsg_data(nlh); 3424 nfmsg = nlmsg_data(nlh);
3410 nfmsg->nfgen_family = ctx.afi->family; 3425 nfmsg->nfgen_family = afi->family;
3411 nfmsg->version = NFNETLINK_V0; 3426 nfmsg->version = NFNETLINK_V0;
3412 nfmsg->res_id = htons(ctx.net->nft.base_seq & 0xffff); 3427 nfmsg->res_id = htons(net->nft.base_seq & 0xffff);
3413 3428
3414 if (nla_put_string(skb, NFTA_SET_ELEM_LIST_TABLE, ctx.table->name)) 3429 if (nla_put_string(skb, NFTA_SET_ELEM_LIST_TABLE, table->name))
3415 goto nla_put_failure; 3430 goto nla_put_failure;
3416 if (nla_put_string(skb, NFTA_SET_ELEM_LIST_SET, set->name)) 3431 if (nla_put_string(skb, NFTA_SET_ELEM_LIST_SET, set->name))
3417 goto nla_put_failure; 3432 goto nla_put_failure;
@@ -3422,12 +3437,13 @@ static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb)
3422 3437
3423 args.cb = cb; 3438 args.cb = cb;
3424 args.skb = skb; 3439 args.skb = skb;
3425 args.iter.genmask = nft_genmask_cur(ctx.net); 3440 args.iter.genmask = nft_genmask_cur(net);
3426 args.iter.skip = cb->args[0]; 3441 args.iter.skip = cb->args[0];
3427 args.iter.count = 0; 3442 args.iter.count = 0;
3428 args.iter.err = 0; 3443 args.iter.err = 0;
3429 args.iter.fn = nf_tables_dump_setelem; 3444 args.iter.fn = nf_tables_dump_setelem;
3430 set->ops->walk(&ctx, set, &args.iter); 3445 set->ops->walk(&dump_ctx->ctx, set, &args.iter);
3446 rcu_read_unlock();
3431 3447
3432 nla_nest_end(skb, nest); 3448 nla_nest_end(skb, nest);
3433 nlmsg_end(skb, nlh); 3449 nlmsg_end(skb, nlh);
@@ -3441,9 +3457,16 @@ static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb)
3441 return skb->len; 3457 return skb->len;
3442 3458
3443nla_put_failure: 3459nla_put_failure:
3460 rcu_read_unlock();
3444 return -ENOSPC; 3461 return -ENOSPC;
3445} 3462}
3446 3463
3464static int nf_tables_dump_set_done(struct netlink_callback *cb)
3465{
3466 kfree(cb->data);
3467 return 0;
3468}
3469
3447static int nf_tables_getsetelem(struct net *net, struct sock *nlsk, 3470static int nf_tables_getsetelem(struct net *net, struct sock *nlsk,
3448 struct sk_buff *skb, const struct nlmsghdr *nlh, 3471 struct sk_buff *skb, const struct nlmsghdr *nlh,
3449 const struct nlattr * const nla[]) 3472 const struct nlattr * const nla[])
@@ -3465,7 +3488,18 @@ static int nf_tables_getsetelem(struct net *net, struct sock *nlsk,
3465 if (nlh->nlmsg_flags & NLM_F_DUMP) { 3488 if (nlh->nlmsg_flags & NLM_F_DUMP) {
3466 struct netlink_dump_control c = { 3489 struct netlink_dump_control c = {
3467 .dump = nf_tables_dump_set, 3490 .dump = nf_tables_dump_set,
3491 .done = nf_tables_dump_set_done,
3468 }; 3492 };
3493 struct nft_set_dump_ctx *dump_ctx;
3494
3495 dump_ctx = kmalloc(sizeof(*dump_ctx), GFP_KERNEL);
3496 if (!dump_ctx)
3497 return -ENOMEM;
3498
3499 dump_ctx->set = set;
3500 dump_ctx->ctx = ctx;
3501
3502 c.data = dump_ctx;
3469 return netlink_dump_start(nlsk, skb, nlh, &c); 3503 return netlink_dump_start(nlsk, skb, nlh, &c);
3470 } 3504 }
3471 return -EOPNOTSUPP; 3505 return -EOPNOTSUPP;
@@ -3593,9 +3627,9 @@ void nft_set_elem_destroy(const struct nft_set *set, void *elem,
3593{ 3627{
3594 struct nft_set_ext *ext = nft_set_elem_ext(set, elem); 3628 struct nft_set_ext *ext = nft_set_elem_ext(set, elem);
3595 3629
3596 nft_data_uninit(nft_set_ext_key(ext), NFT_DATA_VALUE); 3630 nft_data_release(nft_set_ext_key(ext), NFT_DATA_VALUE);
3597 if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA)) 3631 if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA))
3598 nft_data_uninit(nft_set_ext_data(ext), set->dtype); 3632 nft_data_release(nft_set_ext_data(ext), set->dtype);
3599 if (destroy_expr && nft_set_ext_exists(ext, NFT_SET_EXT_EXPR)) 3633 if (destroy_expr && nft_set_ext_exists(ext, NFT_SET_EXT_EXPR))
3600 nf_tables_expr_destroy(NULL, nft_set_ext_expr(ext)); 3634 nf_tables_expr_destroy(NULL, nft_set_ext_expr(ext));
3601 if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF)) 3635 if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF))
@@ -3604,6 +3638,18 @@ void nft_set_elem_destroy(const struct nft_set *set, void *elem,
3604} 3638}
3605EXPORT_SYMBOL_GPL(nft_set_elem_destroy); 3639EXPORT_SYMBOL_GPL(nft_set_elem_destroy);
3606 3640
3641/* Only called from commit path, nft_set_elem_deactivate() already deals with
3642 * the refcounting from the preparation phase.
3643 */
3644static void nf_tables_set_elem_destroy(const struct nft_set *set, void *elem)
3645{
3646 struct nft_set_ext *ext = nft_set_elem_ext(set, elem);
3647
3648 if (nft_set_ext_exists(ext, NFT_SET_EXT_EXPR))
3649 nf_tables_expr_destroy(NULL, nft_set_ext_expr(ext));
3650 kfree(elem);
3651}
3652
3607static int nft_setelem_parse_flags(const struct nft_set *set, 3653static int nft_setelem_parse_flags(const struct nft_set *set,
3608 const struct nlattr *attr, u32 *flags) 3654 const struct nlattr *attr, u32 *flags)
3609{ 3655{
@@ -3815,9 +3861,9 @@ err4:
3815 kfree(elem.priv); 3861 kfree(elem.priv);
3816err3: 3862err3:
3817 if (nla[NFTA_SET_ELEM_DATA] != NULL) 3863 if (nla[NFTA_SET_ELEM_DATA] != NULL)
3818 nft_data_uninit(&data, d2.type); 3864 nft_data_release(&data, d2.type);
3819err2: 3865err2:
3820 nft_data_uninit(&elem.key.val, d1.type); 3866 nft_data_release(&elem.key.val, d1.type);
3821err1: 3867err1:
3822 return err; 3868 return err;
3823} 3869}
@@ -3862,6 +3908,53 @@ static int nf_tables_newsetelem(struct net *net, struct sock *nlsk,
3862 return err; 3908 return err;
3863} 3909}
3864 3910
3911/**
3912 * nft_data_hold - hold a nft_data item
3913 *
3914 * @data: struct nft_data to release
3915 * @type: type of data
3916 *
3917 * Hold a nft_data item. NFT_DATA_VALUE types can be silently discarded,
3918 * NFT_DATA_VERDICT bumps the reference to chains in case of NFT_JUMP and
3919 * NFT_GOTO verdicts. This function must be called on active data objects
3920 * from the second phase of the commit protocol.
3921 */
3922static void nft_data_hold(const struct nft_data *data, enum nft_data_types type)
3923{
3924 if (type == NFT_DATA_VERDICT) {
3925 switch (data->verdict.code) {
3926 case NFT_JUMP:
3927 case NFT_GOTO:
3928 data->verdict.chain->use++;
3929 break;
3930 }
3931 }
3932}
3933
3934static void nft_set_elem_activate(const struct net *net,
3935 const struct nft_set *set,
3936 struct nft_set_elem *elem)
3937{
3938 const struct nft_set_ext *ext = nft_set_elem_ext(set, elem->priv);
3939
3940 if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA))
3941 nft_data_hold(nft_set_ext_data(ext), set->dtype);
3942 if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF))
3943 (*nft_set_ext_obj(ext))->use++;
3944}
3945
3946static void nft_set_elem_deactivate(const struct net *net,
3947 const struct nft_set *set,
3948 struct nft_set_elem *elem)
3949{
3950 const struct nft_set_ext *ext = nft_set_elem_ext(set, elem->priv);
3951
3952 if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA))
3953 nft_data_release(nft_set_ext_data(ext), set->dtype);
3954 if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF))
3955 (*nft_set_ext_obj(ext))->use--;
3956}
3957
3865static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set, 3958static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set,
3866 const struct nlattr *attr) 3959 const struct nlattr *attr)
3867{ 3960{
@@ -3927,6 +4020,8 @@ static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set,
3927 kfree(elem.priv); 4020 kfree(elem.priv);
3928 elem.priv = priv; 4021 elem.priv = priv;
3929 4022
4023 nft_set_elem_deactivate(ctx->net, set, &elem);
4024
3930 nft_trans_elem(trans) = elem; 4025 nft_trans_elem(trans) = elem;
3931 list_add_tail(&trans->list, &ctx->net->nft.commit_list); 4026 list_add_tail(&trans->list, &ctx->net->nft.commit_list);
3932 return 0; 4027 return 0;
@@ -3936,7 +4031,7 @@ err4:
3936err3: 4031err3:
3937 kfree(elem.priv); 4032 kfree(elem.priv);
3938err2: 4033err2:
3939 nft_data_uninit(&elem.key.val, desc.type); 4034 nft_data_release(&elem.key.val, desc.type);
3940err1: 4035err1:
3941 return err; 4036 return err;
3942} 4037}
@@ -4743,8 +4838,8 @@ static void nf_tables_commit_release(struct nft_trans *trans)
4743 nft_set_destroy(nft_trans_set(trans)); 4838 nft_set_destroy(nft_trans_set(trans));
4744 break; 4839 break;
4745 case NFT_MSG_DELSETELEM: 4840 case NFT_MSG_DELSETELEM:
4746 nft_set_elem_destroy(nft_trans_elem_set(trans), 4841 nf_tables_set_elem_destroy(nft_trans_elem_set(trans),
4747 nft_trans_elem(trans).priv, true); 4842 nft_trans_elem(trans).priv);
4748 break; 4843 break;
4749 case NFT_MSG_DELOBJ: 4844 case NFT_MSG_DELOBJ:
4750 nft_obj_destroy(nft_trans_obj(trans)); 4845 nft_obj_destroy(nft_trans_obj(trans));
@@ -4979,6 +5074,7 @@ static int nf_tables_abort(struct net *net, struct sk_buff *skb)
4979 case NFT_MSG_DELSETELEM: 5074 case NFT_MSG_DELSETELEM:
4980 te = (struct nft_trans_elem *)trans->data; 5075 te = (struct nft_trans_elem *)trans->data;
4981 5076
5077 nft_set_elem_activate(net, te->set, &te->elem);
4982 te->set->ops->activate(net, te->set, &te->elem); 5078 te->set->ops->activate(net, te->set, &te->elem);
4983 te->set->ndeact--; 5079 te->set->ndeact--;
4984 5080
@@ -5464,7 +5560,7 @@ int nft_data_init(const struct nft_ctx *ctx,
5464EXPORT_SYMBOL_GPL(nft_data_init); 5560EXPORT_SYMBOL_GPL(nft_data_init);
5465 5561
5466/** 5562/**
5467 * nft_data_uninit - release a nft_data item 5563 * nft_data_release - release a nft_data item
5468 * 5564 *
5469 * @data: struct nft_data to release 5565 * @data: struct nft_data to release
5470 * @type: type of data 5566 * @type: type of data
@@ -5472,7 +5568,7 @@ EXPORT_SYMBOL_GPL(nft_data_init);
5472 * Release a nft_data item. NFT_DATA_VALUE types can be silently discarded, 5568 * Release a nft_data item. NFT_DATA_VALUE types can be silently discarded,
5473 * all others need to be released by calling this function. 5569 * all others need to be released by calling this function.
5474 */ 5570 */
5475void nft_data_uninit(const struct nft_data *data, enum nft_data_types type) 5571void nft_data_release(const struct nft_data *data, enum nft_data_types type)
5476{ 5572{
5477 if (type < NFT_DATA_VERDICT) 5573 if (type < NFT_DATA_VERDICT)
5478 return; 5574 return;
@@ -5483,7 +5579,7 @@ void nft_data_uninit(const struct nft_data *data, enum nft_data_types type)
5483 WARN_ON(1); 5579 WARN_ON(1);
5484 } 5580 }
5485} 5581}
5486EXPORT_SYMBOL_GPL(nft_data_uninit); 5582EXPORT_SYMBOL_GPL(nft_data_release);
5487 5583
5488int nft_data_dump(struct sk_buff *skb, int attr, const struct nft_data *data, 5584int nft_data_dump(struct sk_buff *skb, int attr, const struct nft_data *data,
5489 enum nft_data_types type, unsigned int len) 5585 enum nft_data_types type, unsigned int len)
diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
index 950bf6eadc65..be678a323598 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -686,6 +686,7 @@ static int nfnl_cthelper_del(struct net *net, struct sock *nfnl,
686 tuple_set = true; 686 tuple_set = true;
687 } 687 }
688 688
689 ret = -ENOENT;
689 list_for_each_entry_safe(nlcth, n, &nfnl_cthelper_list, list) { 690 list_for_each_entry_safe(nlcth, n, &nfnl_cthelper_list, list) {
690 cur = &nlcth->helper; 691 cur = &nlcth->helper;
691 j++; 692 j++;
@@ -699,16 +700,20 @@ static int nfnl_cthelper_del(struct net *net, struct sock *nfnl,
699 tuple.dst.protonum != cur->tuple.dst.protonum)) 700 tuple.dst.protonum != cur->tuple.dst.protonum))
700 continue; 701 continue;
701 702
702 found = true; 703 if (refcount_dec_if_one(&cur->refcnt)) {
703 nf_conntrack_helper_unregister(cur); 704 found = true;
704 kfree(cur->expect_policy); 705 nf_conntrack_helper_unregister(cur);
706 kfree(cur->expect_policy);
705 707
706 list_del(&nlcth->list); 708 list_del(&nlcth->list);
707 kfree(nlcth); 709 kfree(nlcth);
710 } else {
711 ret = -EBUSY;
712 }
708 } 713 }
709 714
710 /* Make sure we return success if we flush and there is no helpers */ 715 /* Make sure we return success if we flush and there is no helpers */
711 return (found || j == 0) ? 0 : -ENOENT; 716 return (found || j == 0) ? 0 : ret;
712} 717}
713 718
714static const struct nla_policy nfnl_cthelper_policy[NFCTH_MAX+1] = { 719static const struct nla_policy nfnl_cthelper_policy[NFCTH_MAX+1] = {
diff --git a/net/netfilter/nft_bitwise.c b/net/netfilter/nft_bitwise.c
index 877d9acd91ef..fff8073e2a56 100644
--- a/net/netfilter/nft_bitwise.c
+++ b/net/netfilter/nft_bitwise.c
@@ -83,17 +83,26 @@ static int nft_bitwise_init(const struct nft_ctx *ctx,
83 tb[NFTA_BITWISE_MASK]); 83 tb[NFTA_BITWISE_MASK]);
84 if (err < 0) 84 if (err < 0)
85 return err; 85 return err;
86 if (d1.len != priv->len) 86 if (d1.len != priv->len) {
87 return -EINVAL; 87 err = -EINVAL;
88 goto err1;
89 }
88 90
89 err = nft_data_init(NULL, &priv->xor, sizeof(priv->xor), &d2, 91 err = nft_data_init(NULL, &priv->xor, sizeof(priv->xor), &d2,
90 tb[NFTA_BITWISE_XOR]); 92 tb[NFTA_BITWISE_XOR]);
91 if (err < 0) 93 if (err < 0)
92 return err; 94 goto err1;
93 if (d2.len != priv->len) 95 if (d2.len != priv->len) {
94 return -EINVAL; 96 err = -EINVAL;
97 goto err2;
98 }
95 99
96 return 0; 100 return 0;
101err2:
102 nft_data_release(&priv->xor, d2.type);
103err1:
104 nft_data_release(&priv->mask, d1.type);
105 return err;
97} 106}
98 107
99static int nft_bitwise_dump(struct sk_buff *skb, const struct nft_expr *expr) 108static int nft_bitwise_dump(struct sk_buff *skb, const struct nft_expr *expr)
diff --git a/net/netfilter/nft_cmp.c b/net/netfilter/nft_cmp.c
index 2b96effeadc1..c2945eb3397c 100644
--- a/net/netfilter/nft_cmp.c
+++ b/net/netfilter/nft_cmp.c
@@ -201,10 +201,18 @@ nft_cmp_select_ops(const struct nft_ctx *ctx, const struct nlattr * const tb[])
201 if (err < 0) 201 if (err < 0)
202 return ERR_PTR(err); 202 return ERR_PTR(err);
203 203
204 if (desc.type != NFT_DATA_VALUE) {
205 err = -EINVAL;
206 goto err1;
207 }
208
204 if (desc.len <= sizeof(u32) && op == NFT_CMP_EQ) 209 if (desc.len <= sizeof(u32) && op == NFT_CMP_EQ)
205 return &nft_cmp_fast_ops; 210 return &nft_cmp_fast_ops;
206 else 211
207 return &nft_cmp_ops; 212 return &nft_cmp_ops;
213err1:
214 nft_data_release(&data, desc.type);
215 return ERR_PTR(-EINVAL);
208} 216}
209 217
210struct nft_expr_type nft_cmp_type __read_mostly = { 218struct nft_expr_type nft_cmp_type __read_mostly = {
diff --git a/net/netfilter/nft_ct.c b/net/netfilter/nft_ct.c
index a34ceb38fc55..1678e9e75e8e 100644
--- a/net/netfilter/nft_ct.c
+++ b/net/netfilter/nft_ct.c
@@ -826,9 +826,9 @@ static void nft_ct_helper_obj_destroy(struct nft_object *obj)
826 struct nft_ct_helper_obj *priv = nft_obj_data(obj); 826 struct nft_ct_helper_obj *priv = nft_obj_data(obj);
827 827
828 if (priv->helper4) 828 if (priv->helper4)
829 module_put(priv->helper4->me); 829 nf_conntrack_helper_put(priv->helper4);
830 if (priv->helper6) 830 if (priv->helper6)
831 module_put(priv->helper6->me); 831 nf_conntrack_helper_put(priv->helper6);
832} 832}
833 833
834static void nft_ct_helper_obj_eval(struct nft_object *obj, 834static void nft_ct_helper_obj_eval(struct nft_object *obj,
diff --git a/net/netfilter/nft_immediate.c b/net/netfilter/nft_immediate.c
index 728baf88295a..4717d7796927 100644
--- a/net/netfilter/nft_immediate.c
+++ b/net/netfilter/nft_immediate.c
@@ -65,7 +65,7 @@ static int nft_immediate_init(const struct nft_ctx *ctx,
65 return 0; 65 return 0;
66 66
67err1: 67err1:
68 nft_data_uninit(&priv->data, desc.type); 68 nft_data_release(&priv->data, desc.type);
69 return err; 69 return err;
70} 70}
71 71
@@ -73,7 +73,8 @@ static void nft_immediate_destroy(const struct nft_ctx *ctx,
73 const struct nft_expr *expr) 73 const struct nft_expr *expr)
74{ 74{
75 const struct nft_immediate_expr *priv = nft_expr_priv(expr); 75 const struct nft_immediate_expr *priv = nft_expr_priv(expr);
76 return nft_data_uninit(&priv->data, nft_dreg_to_type(priv->dreg)); 76
77 return nft_data_release(&priv->data, nft_dreg_to_type(priv->dreg));
77} 78}
78 79
79static int nft_immediate_dump(struct sk_buff *skb, const struct nft_expr *expr) 80static int nft_immediate_dump(struct sk_buff *skb, const struct nft_expr *expr)
diff --git a/net/netfilter/nft_range.c b/net/netfilter/nft_range.c
index 9edc74eedc10..cedb96c3619f 100644
--- a/net/netfilter/nft_range.c
+++ b/net/netfilter/nft_range.c
@@ -102,9 +102,9 @@ static int nft_range_init(const struct nft_ctx *ctx, const struct nft_expr *expr
102 priv->len = desc_from.len; 102 priv->len = desc_from.len;
103 return 0; 103 return 0;
104err2: 104err2:
105 nft_data_uninit(&priv->data_to, desc_to.type); 105 nft_data_release(&priv->data_to, desc_to.type);
106err1: 106err1:
107 nft_data_uninit(&priv->data_from, desc_from.type); 107 nft_data_release(&priv->data_from, desc_from.type);
108 return err; 108 return err;
109} 109}
110 110
diff --git a/net/netfilter/nft_set_hash.c b/net/netfilter/nft_set_hash.c
index 8ec086b6b56b..3d3a6df4ce70 100644
--- a/net/netfilter/nft_set_hash.c
+++ b/net/netfilter/nft_set_hash.c
@@ -222,7 +222,7 @@ static void nft_hash_walk(const struct nft_ctx *ctx, struct nft_set *set,
222 struct nft_set_elem elem; 222 struct nft_set_elem elem;
223 int err; 223 int err;
224 224
225 err = rhashtable_walk_init(&priv->ht, &hti, GFP_KERNEL); 225 err = rhashtable_walk_init(&priv->ht, &hti, GFP_ATOMIC);
226 iter->err = err; 226 iter->err = err;
227 if (err) 227 if (err)
228 return; 228 return;
diff --git a/net/netfilter/nft_set_rbtree.c b/net/netfilter/nft_set_rbtree.c
index e97e2fb53f0a..fbdbaa00dd5f 100644
--- a/net/netfilter/nft_set_rbtree.c
+++ b/net/netfilter/nft_set_rbtree.c
@@ -116,17 +116,17 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
116 else if (d > 0) 116 else if (d > 0)
117 p = &parent->rb_right; 117 p = &parent->rb_right;
118 else { 118 else {
119 if (nft_set_elem_active(&rbe->ext, genmask)) { 119 if (nft_rbtree_interval_end(rbe) &&
120 if (nft_rbtree_interval_end(rbe) && 120 !nft_rbtree_interval_end(new)) {
121 !nft_rbtree_interval_end(new)) 121 p = &parent->rb_left;
122 p = &parent->rb_left; 122 } else if (!nft_rbtree_interval_end(rbe) &&
123 else if (!nft_rbtree_interval_end(rbe) && 123 nft_rbtree_interval_end(new)) {
124 nft_rbtree_interval_end(new)) 124 p = &parent->rb_right;
125 p = &parent->rb_right; 125 } else if (nft_set_elem_active(&rbe->ext, genmask)) {
126 else { 126 *ext = &rbe->ext;
127 *ext = &rbe->ext; 127 return -EEXIST;
128 return -EEXIST; 128 } else {
129 } 129 p = &parent->rb_left;
130 } 130 }
131 } 131 }
132 } 132 }
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
index 8876b7da6884..1770c1d9b37f 100644
--- a/net/netfilter/x_tables.c
+++ b/net/netfilter/x_tables.c
@@ -283,28 +283,30 @@ static int xt_obj_to_user(u16 __user *psize, u16 size,
283 &U->u.user.revision, K->u.kernel.TYPE->revision) 283 &U->u.user.revision, K->u.kernel.TYPE->revision)
284 284
285int xt_data_to_user(void __user *dst, const void *src, 285int xt_data_to_user(void __user *dst, const void *src,
286 int usersize, int size) 286 int usersize, int size, int aligned_size)
287{ 287{
288 usersize = usersize ? : size; 288 usersize = usersize ? : size;
289 if (copy_to_user(dst, src, usersize)) 289 if (copy_to_user(dst, src, usersize))
290 return -EFAULT; 290 return -EFAULT;
291 if (usersize != size && clear_user(dst + usersize, size - usersize)) 291 if (usersize != aligned_size &&
292 clear_user(dst + usersize, aligned_size - usersize))
292 return -EFAULT; 293 return -EFAULT;
293 294
294 return 0; 295 return 0;
295} 296}
296EXPORT_SYMBOL_GPL(xt_data_to_user); 297EXPORT_SYMBOL_GPL(xt_data_to_user);
297 298
298#define XT_DATA_TO_USER(U, K, TYPE, C_SIZE) \ 299#define XT_DATA_TO_USER(U, K, TYPE) \
299 xt_data_to_user(U->data, K->data, \ 300 xt_data_to_user(U->data, K->data, \
300 K->u.kernel.TYPE->usersize, \ 301 K->u.kernel.TYPE->usersize, \
301 C_SIZE ? : K->u.kernel.TYPE->TYPE##size) 302 K->u.kernel.TYPE->TYPE##size, \
303 XT_ALIGN(K->u.kernel.TYPE->TYPE##size))
302 304
303int xt_match_to_user(const struct xt_entry_match *m, 305int xt_match_to_user(const struct xt_entry_match *m,
304 struct xt_entry_match __user *u) 306 struct xt_entry_match __user *u)
305{ 307{
306 return XT_OBJ_TO_USER(u, m, match, 0) || 308 return XT_OBJ_TO_USER(u, m, match, 0) ||
307 XT_DATA_TO_USER(u, m, match, 0); 309 XT_DATA_TO_USER(u, m, match);
308} 310}
309EXPORT_SYMBOL_GPL(xt_match_to_user); 311EXPORT_SYMBOL_GPL(xt_match_to_user);
310 312
@@ -312,7 +314,7 @@ int xt_target_to_user(const struct xt_entry_target *t,
312 struct xt_entry_target __user *u) 314 struct xt_entry_target __user *u)
313{ 315{
314 return XT_OBJ_TO_USER(u, t, target, 0) || 316 return XT_OBJ_TO_USER(u, t, target, 0) ||
315 XT_DATA_TO_USER(u, t, target, 0); 317 XT_DATA_TO_USER(u, t, target);
316} 318}
317EXPORT_SYMBOL_GPL(xt_target_to_user); 319EXPORT_SYMBOL_GPL(xt_target_to_user);
318 320
@@ -611,6 +613,12 @@ void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr,
611} 613}
612EXPORT_SYMBOL_GPL(xt_compat_match_from_user); 614EXPORT_SYMBOL_GPL(xt_compat_match_from_user);
613 615
616#define COMPAT_XT_DATA_TO_USER(U, K, TYPE, C_SIZE) \
617 xt_data_to_user(U->data, K->data, \
618 K->u.kernel.TYPE->usersize, \
619 C_SIZE, \
620 COMPAT_XT_ALIGN(C_SIZE))
621
614int xt_compat_match_to_user(const struct xt_entry_match *m, 622int xt_compat_match_to_user(const struct xt_entry_match *m,
615 void __user **dstptr, unsigned int *size) 623 void __user **dstptr, unsigned int *size)
616{ 624{
@@ -626,7 +634,7 @@ int xt_compat_match_to_user(const struct xt_entry_match *m,
626 if (match->compat_to_user((void __user *)cm->data, m->data)) 634 if (match->compat_to_user((void __user *)cm->data, m->data))
627 return -EFAULT; 635 return -EFAULT;
628 } else { 636 } else {
629 if (XT_DATA_TO_USER(cm, m, match, msize - sizeof(*cm))) 637 if (COMPAT_XT_DATA_TO_USER(cm, m, match, msize - sizeof(*cm)))
630 return -EFAULT; 638 return -EFAULT;
631 } 639 }
632 640
@@ -972,7 +980,7 @@ int xt_compat_target_to_user(const struct xt_entry_target *t,
972 if (target->compat_to_user((void __user *)ct->data, t->data)) 980 if (target->compat_to_user((void __user *)ct->data, t->data))
973 return -EFAULT; 981 return -EFAULT;
974 } else { 982 } else {
975 if (XT_DATA_TO_USER(ct, t, target, tsize - sizeof(*ct))) 983 if (COMPAT_XT_DATA_TO_USER(ct, t, target, tsize - sizeof(*ct)))
976 return -EFAULT; 984 return -EFAULT;
977 } 985 }
978 986
diff --git a/net/netfilter/xt_CT.c b/net/netfilter/xt_CT.c
index bb7ad82dcd56..623ef37de886 100644
--- a/net/netfilter/xt_CT.c
+++ b/net/netfilter/xt_CT.c
@@ -96,7 +96,7 @@ xt_ct_set_helper(struct nf_conn *ct, const char *helper_name,
96 96
97 help = nf_ct_helper_ext_add(ct, helper, GFP_KERNEL); 97 help = nf_ct_helper_ext_add(ct, helper, GFP_KERNEL);
98 if (help == NULL) { 98 if (help == NULL) {
99 module_put(helper->me); 99 nf_conntrack_helper_put(helper);
100 return -ENOMEM; 100 return -ENOMEM;
101 } 101 }
102 102
@@ -263,7 +263,7 @@ out:
263err4: 263err4:
264 help = nfct_help(ct); 264 help = nfct_help(ct);
265 if (help) 265 if (help)
266 module_put(help->helper->me); 266 nf_conntrack_helper_put(help->helper);
267err3: 267err3:
268 nf_ct_tmpl_free(ct); 268 nf_ct_tmpl_free(ct);
269err2: 269err2:
@@ -346,7 +346,7 @@ static void xt_ct_tg_destroy(const struct xt_tgdtor_param *par,
346 if (ct) { 346 if (ct) {
347 help = nfct_help(ct); 347 help = nfct_help(ct);
348 if (help) 348 if (help)
349 module_put(help->helper->me); 349 nf_conntrack_helper_put(help->helper);
350 350
351 nf_ct_netns_put(par->net, par->family); 351 nf_ct_netns_put(par->net, par->family);
352 352
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index ee841f00a6ec..7586d446d7dc 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -62,6 +62,7 @@
62#include <asm/cacheflush.h> 62#include <asm/cacheflush.h>
63#include <linux/hash.h> 63#include <linux/hash.h>
64#include <linux/genetlink.h> 64#include <linux/genetlink.h>
65#include <linux/net_namespace.h>
65 66
66#include <net/net_namespace.h> 67#include <net/net_namespace.h>
67#include <net/sock.h> 68#include <net/sock.h>
@@ -1415,7 +1416,8 @@ static void do_one_broadcast(struct sock *sk,
1415 goto out; 1416 goto out;
1416 } 1417 }
1417 NETLINK_CB(p->skb2).nsid = peernet2id(sock_net(sk), p->net); 1418 NETLINK_CB(p->skb2).nsid = peernet2id(sock_net(sk), p->net);
1418 NETLINK_CB(p->skb2).nsid_is_set = true; 1419 if (NETLINK_CB(p->skb2).nsid != NETNSA_NSID_NOT_ASSIGNED)
1420 NETLINK_CB(p->skb2).nsid_is_set = true;
1419 val = netlink_broadcast_deliver(sk, p->skb2); 1421 val = netlink_broadcast_deliver(sk, p->skb2);
1420 if (val < 0) { 1422 if (val < 0) {
1421 netlink_overrun(sk); 1423 netlink_overrun(sk);
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
index bf602e33c40a..08679ebb3068 100644
--- a/net/openvswitch/conntrack.c
+++ b/net/openvswitch/conntrack.c
@@ -1123,7 +1123,7 @@ static int ovs_ct_add_helper(struct ovs_conntrack_info *info, const char *name,
1123 1123
1124 help = nf_ct_helper_ext_add(info->ct, helper, GFP_KERNEL); 1124 help = nf_ct_helper_ext_add(info->ct, helper, GFP_KERNEL);
1125 if (!help) { 1125 if (!help) {
1126 module_put(helper->me); 1126 nf_conntrack_helper_put(helper);
1127 return -ENOMEM; 1127 return -ENOMEM;
1128 } 1128 }
1129 1129
@@ -1584,7 +1584,7 @@ void ovs_ct_free_action(const struct nlattr *a)
1584static void __ovs_ct_free_action(struct ovs_conntrack_info *ct_info) 1584static void __ovs_ct_free_action(struct ovs_conntrack_info *ct_info)
1585{ 1585{
1586 if (ct_info->helper) 1586 if (ct_info->helper)
1587 module_put(ct_info->helper->me); 1587 nf_conntrack_helper_put(ct_info->helper);
1588 if (ct_info->ct) 1588 if (ct_info->ct)
1589 nf_ct_tmpl_free(ct_info->ct); 1589 nf_ct_tmpl_free(ct_info->ct);
1590} 1590}
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
index 89193a634da4..04a3128adcf0 100644
--- a/net/openvswitch/vport-internal_dev.c
+++ b/net/openvswitch/vport-internal_dev.c
@@ -94,7 +94,6 @@ static void internal_dev_destructor(struct net_device *dev)
94 struct vport *vport = ovs_internal_dev_get_vport(dev); 94 struct vport *vport = ovs_internal_dev_get_vport(dev);
95 95
96 ovs_vport_free(vport); 96 ovs_vport_free(vport);
97 free_netdev(dev);
98} 97}
99 98
100static void 99static void
@@ -156,7 +155,8 @@ static void do_setup(struct net_device *netdev)
156 netdev->priv_flags &= ~IFF_TX_SKB_SHARING; 155 netdev->priv_flags &= ~IFF_TX_SKB_SHARING;
157 netdev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_OPENVSWITCH | 156 netdev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_OPENVSWITCH |
158 IFF_PHONY_HEADROOM | IFF_NO_QUEUE; 157 IFF_PHONY_HEADROOM | IFF_NO_QUEUE;
159 netdev->destructor = internal_dev_destructor; 158 netdev->needs_free_netdev = true;
159 netdev->priv_destructor = internal_dev_destructor;
160 netdev->ethtool_ops = &internal_dev_ethtool_ops; 160 netdev->ethtool_ops = &internal_dev_ethtool_ops;
161 netdev->rtnl_link_ops = &internal_dev_link_ops; 161 netdev->rtnl_link_ops = &internal_dev_link_ops;
162 162
diff --git a/net/phonet/pep-gprs.c b/net/phonet/pep-gprs.c
index 21c28b51be94..2c9337946e30 100644
--- a/net/phonet/pep-gprs.c
+++ b/net/phonet/pep-gprs.c
@@ -236,7 +236,7 @@ static void gprs_setup(struct net_device *dev)
236 dev->tx_queue_len = 10; 236 dev->tx_queue_len = 10;
237 237
238 dev->netdev_ops = &gprs_netdev_ops; 238 dev->netdev_ops = &gprs_netdev_ops;
239 dev->destructor = free_netdev; 239 dev->needs_free_netdev = true;
240} 240}
241 241
242/* 242/*
diff --git a/net/rxrpc/key.c b/net/rxrpc/key.c
index 0a4e28477ad9..54369225766e 100644
--- a/net/rxrpc/key.c
+++ b/net/rxrpc/key.c
@@ -217,7 +217,7 @@ static int rxrpc_krb5_decode_principal(struct krb5_principal *princ,
217 unsigned int *_toklen) 217 unsigned int *_toklen)
218{ 218{
219 const __be32 *xdr = *_xdr; 219 const __be32 *xdr = *_xdr;
220 unsigned int toklen = *_toklen, n_parts, loop, tmp; 220 unsigned int toklen = *_toklen, n_parts, loop, tmp, paddedlen;
221 221
222 /* there must be at least one name, and at least #names+1 length 222 /* there must be at least one name, and at least #names+1 length
223 * words */ 223 * words */
@@ -247,16 +247,16 @@ static int rxrpc_krb5_decode_principal(struct krb5_principal *princ,
247 toklen -= 4; 247 toklen -= 4;
248 if (tmp <= 0 || tmp > AFSTOKEN_STRING_MAX) 248 if (tmp <= 0 || tmp > AFSTOKEN_STRING_MAX)
249 return -EINVAL; 249 return -EINVAL;
250 if (tmp > toklen) 250 paddedlen = (tmp + 3) & ~3;
251 if (paddedlen > toklen)
251 return -EINVAL; 252 return -EINVAL;
252 princ->name_parts[loop] = kmalloc(tmp + 1, GFP_KERNEL); 253 princ->name_parts[loop] = kmalloc(tmp + 1, GFP_KERNEL);
253 if (!princ->name_parts[loop]) 254 if (!princ->name_parts[loop])
254 return -ENOMEM; 255 return -ENOMEM;
255 memcpy(princ->name_parts[loop], xdr, tmp); 256 memcpy(princ->name_parts[loop], xdr, tmp);
256 princ->name_parts[loop][tmp] = 0; 257 princ->name_parts[loop][tmp] = 0;
257 tmp = (tmp + 3) & ~3; 258 toklen -= paddedlen;
258 toklen -= tmp; 259 xdr += paddedlen >> 2;
259 xdr += tmp >> 2;
260 } 260 }
261 261
262 if (toklen < 4) 262 if (toklen < 4)
@@ -265,16 +265,16 @@ static int rxrpc_krb5_decode_principal(struct krb5_principal *princ,
265 toklen -= 4; 265 toklen -= 4;
266 if (tmp <= 0 || tmp > AFSTOKEN_K5_REALM_MAX) 266 if (tmp <= 0 || tmp > AFSTOKEN_K5_REALM_MAX)
267 return -EINVAL; 267 return -EINVAL;
268 if (tmp > toklen) 268 paddedlen = (tmp + 3) & ~3;
269 if (paddedlen > toklen)
269 return -EINVAL; 270 return -EINVAL;
270 princ->realm = kmalloc(tmp + 1, GFP_KERNEL); 271 princ->realm = kmalloc(tmp + 1, GFP_KERNEL);
271 if (!princ->realm) 272 if (!princ->realm)
272 return -ENOMEM; 273 return -ENOMEM;
273 memcpy(princ->realm, xdr, tmp); 274 memcpy(princ->realm, xdr, tmp);
274 princ->realm[tmp] = 0; 275 princ->realm[tmp] = 0;
275 tmp = (tmp + 3) & ~3; 276 toklen -= paddedlen;
276 toklen -= tmp; 277 xdr += paddedlen >> 2;
277 xdr += tmp >> 2;
278 278
279 _debug("%s/...@%s", princ->name_parts[0], princ->realm); 279 _debug("%s/...@%s", princ->name_parts[0], princ->realm);
280 280
@@ -293,7 +293,7 @@ static int rxrpc_krb5_decode_tagged_data(struct krb5_tagged_data *td,
293 unsigned int *_toklen) 293 unsigned int *_toklen)
294{ 294{
295 const __be32 *xdr = *_xdr; 295 const __be32 *xdr = *_xdr;
296 unsigned int toklen = *_toklen, len; 296 unsigned int toklen = *_toklen, len, paddedlen;
297 297
298 /* there must be at least one tag and one length word */ 298 /* there must be at least one tag and one length word */
299 if (toklen <= 8) 299 if (toklen <= 8)
@@ -307,15 +307,17 @@ static int rxrpc_krb5_decode_tagged_data(struct krb5_tagged_data *td,
307 toklen -= 8; 307 toklen -= 8;
308 if (len > max_data_size) 308 if (len > max_data_size)
309 return -EINVAL; 309 return -EINVAL;
310 paddedlen = (len + 3) & ~3;
311 if (paddedlen > toklen)
312 return -EINVAL;
310 td->data_len = len; 313 td->data_len = len;
311 314
312 if (len > 0) { 315 if (len > 0) {
313 td->data = kmemdup(xdr, len, GFP_KERNEL); 316 td->data = kmemdup(xdr, len, GFP_KERNEL);
314 if (!td->data) 317 if (!td->data)
315 return -ENOMEM; 318 return -ENOMEM;
316 len = (len + 3) & ~3; 319 toklen -= paddedlen;
317 toklen -= len; 320 xdr += paddedlen >> 2;
318 xdr += len >> 2;
319 } 321 }
320 322
321 _debug("tag %x len %x", td->tag, td->data_len); 323 _debug("tag %x len %x", td->tag, td->data_len);
@@ -387,7 +389,7 @@ static int rxrpc_krb5_decode_ticket(u8 **_ticket, u16 *_tktlen,
387 const __be32 **_xdr, unsigned int *_toklen) 389 const __be32 **_xdr, unsigned int *_toklen)
388{ 390{
389 const __be32 *xdr = *_xdr; 391 const __be32 *xdr = *_xdr;
390 unsigned int toklen = *_toklen, len; 392 unsigned int toklen = *_toklen, len, paddedlen;
391 393
392 /* there must be at least one length word */ 394 /* there must be at least one length word */
393 if (toklen <= 4) 395 if (toklen <= 4)
@@ -399,6 +401,9 @@ static int rxrpc_krb5_decode_ticket(u8 **_ticket, u16 *_tktlen,
399 toklen -= 4; 401 toklen -= 4;
400 if (len > AFSTOKEN_K5_TIX_MAX) 402 if (len > AFSTOKEN_K5_TIX_MAX)
401 return -EINVAL; 403 return -EINVAL;
404 paddedlen = (len + 3) & ~3;
405 if (paddedlen > toklen)
406 return -EINVAL;
402 *_tktlen = len; 407 *_tktlen = len;
403 408
404 _debug("ticket len %u", len); 409 _debug("ticket len %u", len);
@@ -407,9 +412,8 @@ static int rxrpc_krb5_decode_ticket(u8 **_ticket, u16 *_tktlen,
407 *_ticket = kmemdup(xdr, len, GFP_KERNEL); 412 *_ticket = kmemdup(xdr, len, GFP_KERNEL);
408 if (!*_ticket) 413 if (!*_ticket)
409 return -ENOMEM; 414 return -ENOMEM;
410 len = (len + 3) & ~3; 415 toklen -= paddedlen;
411 toklen -= len; 416 xdr += paddedlen >> 2;
412 xdr += len >> 2;
413 } 417 }
414 418
415 *_xdr = xdr; 419 *_xdr = xdr;
@@ -552,7 +556,7 @@ static int rxrpc_preparse_xdr(struct key_preparsed_payload *prep)
552{ 556{
553 const __be32 *xdr = prep->data, *token; 557 const __be32 *xdr = prep->data, *token;
554 const char *cp; 558 const char *cp;
555 unsigned int len, tmp, loop, ntoken, toklen, sec_ix; 559 unsigned int len, paddedlen, loop, ntoken, toklen, sec_ix;
556 size_t datalen = prep->datalen; 560 size_t datalen = prep->datalen;
557 int ret; 561 int ret;
558 562
@@ -578,22 +582,21 @@ static int rxrpc_preparse_xdr(struct key_preparsed_payload *prep)
578 if (len < 1 || len > AFSTOKEN_CELL_MAX) 582 if (len < 1 || len > AFSTOKEN_CELL_MAX)
579 goto not_xdr; 583 goto not_xdr;
580 datalen -= 4; 584 datalen -= 4;
581 tmp = (len + 3) & ~3; 585 paddedlen = (len + 3) & ~3;
582 if (tmp > datalen) 586 if (paddedlen > datalen)
583 goto not_xdr; 587 goto not_xdr;
584 588
585 cp = (const char *) xdr; 589 cp = (const char *) xdr;
586 for (loop = 0; loop < len; loop++) 590 for (loop = 0; loop < len; loop++)
587 if (!isprint(cp[loop])) 591 if (!isprint(cp[loop]))
588 goto not_xdr; 592 goto not_xdr;
589 if (len < tmp) 593 for (; loop < paddedlen; loop++)
590 for (; loop < tmp; loop++) 594 if (cp[loop])
591 if (cp[loop]) 595 goto not_xdr;
592 goto not_xdr;
593 _debug("cellname: [%u/%u] '%*.*s'", 596 _debug("cellname: [%u/%u] '%*.*s'",
594 len, tmp, len, len, (const char *) xdr); 597 len, paddedlen, len, len, (const char *) xdr);
595 datalen -= tmp; 598 datalen -= paddedlen;
596 xdr += tmp >> 2; 599 xdr += paddedlen >> 2;
597 600
598 /* get the token count */ 601 /* get the token count */
599 if (datalen < 12) 602 if (datalen < 12)
@@ -614,10 +617,11 @@ static int rxrpc_preparse_xdr(struct key_preparsed_payload *prep)
614 sec_ix = ntohl(*xdr); 617 sec_ix = ntohl(*xdr);
615 datalen -= 4; 618 datalen -= 4;
616 _debug("token: [%x/%zx] %x", toklen, datalen, sec_ix); 619 _debug("token: [%x/%zx] %x", toklen, datalen, sec_ix);
617 if (toklen < 20 || toklen > datalen) 620 paddedlen = (toklen + 3) & ~3;
621 if (toklen < 20 || toklen > datalen || paddedlen > datalen)
618 goto not_xdr; 622 goto not_xdr;
619 datalen -= (toklen + 3) & ~3; 623 datalen -= paddedlen;
620 xdr += (toklen + 3) >> 2; 624 xdr += paddedlen >> 2;
621 625
622 } while (--loop > 0); 626 } while (--loop > 0);
623 627
diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c
index 164b5ac094be..7dc5892671c8 100644
--- a/net/sched/act_pedit.c
+++ b/net/sched/act_pedit.c
@@ -94,8 +94,10 @@ static struct tcf_pedit_key_ex *tcf_pedit_keys_ex_parse(struct nlattr *nla,
94 k++; 94 k++;
95 } 95 }
96 96
97 if (n) 97 if (n) {
98 err = -EINVAL;
98 goto err_out; 99 goto err_out;
100 }
99 101
100 return keys_ex; 102 return keys_ex;
101 103
diff --git a/net/sched/act_police.c b/net/sched/act_police.c
index f42008b29311..b062bc80c7cb 100644
--- a/net/sched/act_police.c
+++ b/net/sched/act_police.c
@@ -132,21 +132,21 @@ static int tcf_act_police_init(struct net *net, struct nlattr *nla,
132 } 132 }
133 } 133 }
134 134
135 spin_lock_bh(&police->tcf_lock);
136 if (est) { 135 if (est) {
137 err = gen_replace_estimator(&police->tcf_bstats, NULL, 136 err = gen_replace_estimator(&police->tcf_bstats, NULL,
138 &police->tcf_rate_est, 137 &police->tcf_rate_est,
139 &police->tcf_lock, 138 &police->tcf_lock,
140 NULL, est); 139 NULL, est);
141 if (err) 140 if (err)
142 goto failure_unlock; 141 goto failure;
143 } else if (tb[TCA_POLICE_AVRATE] && 142 } else if (tb[TCA_POLICE_AVRATE] &&
144 (ret == ACT_P_CREATED || 143 (ret == ACT_P_CREATED ||
145 !gen_estimator_active(&police->tcf_rate_est))) { 144 !gen_estimator_active(&police->tcf_rate_est))) {
146 err = -EINVAL; 145 err = -EINVAL;
147 goto failure_unlock; 146 goto failure;
148 } 147 }
149 148
149 spin_lock_bh(&police->tcf_lock);
150 /* No failure allowed after this point */ 150 /* No failure allowed after this point */
151 police->tcfp_mtu = parm->mtu; 151 police->tcfp_mtu = parm->mtu;
152 if (police->tcfp_mtu == 0) { 152 if (police->tcfp_mtu == 0) {
@@ -192,8 +192,6 @@ static int tcf_act_police_init(struct net *net, struct nlattr *nla,
192 192
193 return ret; 193 return ret;
194 194
195failure_unlock:
196 spin_unlock_bh(&police->tcf_lock);
197failure: 195failure:
198 qdisc_put_rtab(P_tab); 196 qdisc_put_rtab(P_tab);
199 qdisc_put_rtab(R_tab); 197 qdisc_put_rtab(R_tab);
diff --git a/net/sched/cls_matchall.c b/net/sched/cls_matchall.c
index dee469fed967..51859b8edd7e 100644
--- a/net/sched/cls_matchall.c
+++ b/net/sched/cls_matchall.c
@@ -203,7 +203,6 @@ static int mall_change(struct net *net, struct sk_buff *in_skb,
203 203
204 *arg = (unsigned long) head; 204 *arg = (unsigned long) head;
205 rcu_assign_pointer(tp->root, new); 205 rcu_assign_pointer(tp->root, new);
206 call_rcu(&head->rcu, mall_destroy_rcu);
207 return 0; 206 return 0;
208 207
209err_replace_hw_filter: 208err_replace_hw_filter:
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index e88342fde1bc..cfdbfa18a95e 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -1019,7 +1019,8 @@ static struct Qdisc *qdisc_create(struct net_device *dev,
1019 return sch; 1019 return sch;
1020 } 1020 }
1021 /* ops->init() failed, we call ->destroy() like qdisc_create_dflt() */ 1021 /* ops->init() failed, we call ->destroy() like qdisc_create_dflt() */
1022 ops->destroy(sch); 1022 if (ops->destroy)
1023 ops->destroy(sch);
1023err_out3: 1024err_out3:
1024 dev_put(dev); 1025 dev_put(dev);
1025 kfree((char *) sch - sch->padded); 1026 kfree((char *) sch - sch->padded);
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index a9708da28eb5..95238284c422 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -1176,7 +1176,9 @@ void sctp_assoc_update(struct sctp_association *asoc,
1176 1176
1177 asoc->ctsn_ack_point = asoc->next_tsn - 1; 1177 asoc->ctsn_ack_point = asoc->next_tsn - 1;
1178 asoc->adv_peer_ack_point = asoc->ctsn_ack_point; 1178 asoc->adv_peer_ack_point = asoc->ctsn_ack_point;
1179 if (!asoc->stream) { 1179
1180 if (sctp_state(asoc, COOKIE_WAIT)) {
1181 sctp_stream_free(asoc->stream);
1180 asoc->stream = new->stream; 1182 asoc->stream = new->stream;
1181 new->stream = NULL; 1183 new->stream = NULL;
1182 } 1184 }
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
index 8c589230794f..3dcd0ecf3d99 100644
--- a/net/sctp/endpointola.c
+++ b/net/sctp/endpointola.c
@@ -275,6 +275,7 @@ static void sctp_endpoint_destroy(struct sctp_endpoint *ep)
275 if (sctp_sk(sk)->bind_hash) 275 if (sctp_sk(sk)->bind_hash)
276 sctp_put_port(sk); 276 sctp_put_port(sk);
277 277
278 sctp_sk(sk)->ep = NULL;
278 sock_put(sk); 279 sock_put(sk);
279 } 280 }
280 281
diff --git a/net/sctp/input.c b/net/sctp/input.c
index 0e06a278d2a9..ba9ad32fc447 100644
--- a/net/sctp/input.c
+++ b/net/sctp/input.c
@@ -473,15 +473,14 @@ struct sock *sctp_err_lookup(struct net *net, int family, struct sk_buff *skb,
473 struct sctp_association **app, 473 struct sctp_association **app,
474 struct sctp_transport **tpp) 474 struct sctp_transport **tpp)
475{ 475{
476 struct sctp_init_chunk *chunkhdr, _chunkhdr;
476 union sctp_addr saddr; 477 union sctp_addr saddr;
477 union sctp_addr daddr; 478 union sctp_addr daddr;
478 struct sctp_af *af; 479 struct sctp_af *af;
479 struct sock *sk = NULL; 480 struct sock *sk = NULL;
480 struct sctp_association *asoc; 481 struct sctp_association *asoc;
481 struct sctp_transport *transport = NULL; 482 struct sctp_transport *transport = NULL;
482 struct sctp_init_chunk *chunkhdr;
483 __u32 vtag = ntohl(sctphdr->vtag); 483 __u32 vtag = ntohl(sctphdr->vtag);
484 int len = skb->len - ((void *)sctphdr - (void *)skb->data);
485 484
486 *app = NULL; *tpp = NULL; 485 *app = NULL; *tpp = NULL;
487 486
@@ -516,13 +515,16 @@ struct sock *sctp_err_lookup(struct net *net, int family, struct sk_buff *skb,
516 * discard the packet. 515 * discard the packet.
517 */ 516 */
518 if (vtag == 0) { 517 if (vtag == 0) {
519 chunkhdr = (void *)sctphdr + sizeof(struct sctphdr); 518 /* chunk header + first 4 octects of init header */
520 if (len < sizeof(struct sctphdr) + sizeof(sctp_chunkhdr_t) 519 chunkhdr = skb_header_pointer(skb, skb_transport_offset(skb) +
521 + sizeof(__be32) || 520 sizeof(struct sctphdr),
521 sizeof(struct sctp_chunkhdr) +
522 sizeof(__be32), &_chunkhdr);
523 if (!chunkhdr ||
522 chunkhdr->chunk_hdr.type != SCTP_CID_INIT || 524 chunkhdr->chunk_hdr.type != SCTP_CID_INIT ||
523 ntohl(chunkhdr->init_hdr.init_tag) != asoc->c.my_vtag) { 525 ntohl(chunkhdr->init_hdr.init_tag) != asoc->c.my_vtag)
524 goto out; 526 goto out;
525 } 527
526 } else if (vtag != asoc->c.peer_vtag) { 528 } else if (vtag != asoc->c.peer_vtag) {
527 goto out; 529 goto out;
528 } 530 }
diff --git a/net/sctp/sctp_diag.c b/net/sctp/sctp_diag.c
index 048954eee984..9a647214a91e 100644
--- a/net/sctp/sctp_diag.c
+++ b/net/sctp/sctp_diag.c
@@ -278,7 +278,6 @@ out:
278 278
279static int sctp_sock_dump(struct sock *sk, void *p) 279static int sctp_sock_dump(struct sock *sk, void *p)
280{ 280{
281 struct sctp_endpoint *ep = sctp_sk(sk)->ep;
282 struct sctp_comm_param *commp = p; 281 struct sctp_comm_param *commp = p;
283 struct sk_buff *skb = commp->skb; 282 struct sk_buff *skb = commp->skb;
284 struct netlink_callback *cb = commp->cb; 283 struct netlink_callback *cb = commp->cb;
@@ -287,7 +286,9 @@ static int sctp_sock_dump(struct sock *sk, void *p)
287 int err = 0; 286 int err = 0;
288 287
289 lock_sock(sk); 288 lock_sock(sk);
290 list_for_each_entry(assoc, &ep->asocs, asocs) { 289 if (!sctp_sk(sk)->ep)
290 goto release;
291 list_for_each_entry(assoc, &sctp_sk(sk)->ep->asocs, asocs) {
291 if (cb->args[4] < cb->args[1]) 292 if (cb->args[4] < cb->args[1])
292 goto next; 293 goto next;
293 294
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
index 8a08f13469c4..92e332e17391 100644
--- a/net/sctp/sm_make_chunk.c
+++ b/net/sctp/sm_make_chunk.c
@@ -2454,16 +2454,11 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk,
2454 * stream sequence number shall be set to 0. 2454 * stream sequence number shall be set to 0.
2455 */ 2455 */
2456 2456
2457 /* Allocate storage for the negotiated streams if it is not a temporary 2457 if (sctp_stream_init(asoc, gfp))
2458 * association. 2458 goto clean_up;
2459 */
2460 if (!asoc->temp) {
2461 if (sctp_stream_init(asoc, gfp))
2462 goto clean_up;
2463 2459
2464 if (sctp_assoc_set_id(asoc, gfp)) 2460 if (!asoc->temp && sctp_assoc_set_id(asoc, gfp))
2465 goto clean_up; 2461 goto clean_up;
2466 }
2467 2462
2468 /* ADDIP Section 4.1 ASCONF Chunk Procedures 2463 /* ADDIP Section 4.1 ASCONF Chunk Procedures
2469 * 2464 *
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
index 4f5e6cfc7f60..f863b5573e42 100644
--- a/net/sctp/sm_statefuns.c
+++ b/net/sctp/sm_statefuns.c
@@ -2088,6 +2088,9 @@ sctp_disposition_t sctp_sf_do_5_2_4_dupcook(struct net *net,
2088 } 2088 }
2089 } 2089 }
2090 2090
2091 /* Set temp so that it won't be added into hashtable */
2092 new_asoc->temp = 1;
2093
2091 /* Compare the tie_tag in cookie with the verification tag of 2094 /* Compare the tie_tag in cookie with the verification tag of
2092 * current association. 2095 * current association.
2093 */ 2096 */
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index f16c8d97b7f3..3a8318e518f1 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -4622,13 +4622,13 @@ int sctp_for_each_endpoint(int (*cb)(struct sctp_endpoint *, void *),
4622 4622
4623 for (head = sctp_ep_hashtable; hash < sctp_ep_hashsize; 4623 for (head = sctp_ep_hashtable; hash < sctp_ep_hashsize;
4624 hash++, head++) { 4624 hash++, head++) {
4625 read_lock(&head->lock); 4625 read_lock_bh(&head->lock);
4626 sctp_for_each_hentry(epb, &head->chain) { 4626 sctp_for_each_hentry(epb, &head->chain) {
4627 err = cb(sctp_ep(epb), p); 4627 err = cb(sctp_ep(epb), p);
4628 if (err) 4628 if (err)
4629 break; 4629 break;
4630 } 4630 }
4631 read_unlock(&head->lock); 4631 read_unlock_bh(&head->lock);
4632 } 4632 }
4633 4633
4634 return err; 4634 return err;
@@ -4666,9 +4666,8 @@ int sctp_for_each_transport(int (*cb)(struct sctp_transport *, void *),
4666 if (err) 4666 if (err)
4667 return err; 4667 return err;
4668 4668
4669 sctp_transport_get_idx(net, &hti, pos); 4669 obj = sctp_transport_get_idx(net, &hti, pos + 1);
4670 obj = sctp_transport_get_next(net, &hti); 4670 for (; !IS_ERR_OR_NULL(obj); obj = sctp_transport_get_next(net, &hti)) {
4671 for (; obj && !IS_ERR(obj); obj = sctp_transport_get_next(net, &hti)) {
4672 struct sctp_transport *transport = obj; 4671 struct sctp_transport *transport = obj;
4673 4672
4674 if (!sctp_transport_hold(transport)) 4673 if (!sctp_transport_hold(transport))
diff --git a/net/sunrpc/xprtrdma/backchannel.c b/net/sunrpc/xprtrdma/backchannel.c
index 24fedd4b117e..03f6b5840764 100644
--- a/net/sunrpc/xprtrdma/backchannel.c
+++ b/net/sunrpc/xprtrdma/backchannel.c
@@ -119,11 +119,9 @@ int xprt_rdma_bc_setup(struct rpc_xprt *xprt, unsigned int reqs)
119 119
120 for (i = 0; i < (reqs << 1); i++) { 120 for (i = 0; i < (reqs << 1); i++) {
121 rqst = kzalloc(sizeof(*rqst), GFP_KERNEL); 121 rqst = kzalloc(sizeof(*rqst), GFP_KERNEL);
122 if (!rqst) { 122 if (!rqst)
123 pr_err("RPC: %s: Failed to create bc rpc_rqst\n",
124 __func__);
125 goto out_free; 123 goto out_free;
126 } 124
127 dprintk("RPC: %s: new rqst %p\n", __func__, rqst); 125 dprintk("RPC: %s: new rqst %p\n", __func__, rqst);
128 126
129 rqst->rq_xprt = &r_xprt->rx_xprt; 127 rqst->rq_xprt = &r_xprt->rx_xprt;
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 16aff8ddc16f..d5b54c020dec 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2432,7 +2432,12 @@ static void xs_tcp_setup_socket(struct work_struct *work)
2432 case -ENETUNREACH: 2432 case -ENETUNREACH:
2433 case -EADDRINUSE: 2433 case -EADDRINUSE:
2434 case -ENOBUFS: 2434 case -ENOBUFS:
2435 /* retry with existing socket, after a delay */ 2435 /*
2436 * xs_tcp_force_close() wakes tasks with -EIO.
2437 * We need to wake them first to ensure the
2438 * correct error code.
2439 */
2440 xprt_wake_pending_tasks(xprt, status);
2436 xs_tcp_force_close(xprt); 2441 xs_tcp_force_close(xprt);
2437 goto out; 2442 goto out;
2438 } 2443 }
diff --git a/net/tipc/msg.c b/net/tipc/msg.c
index 312ef7de57d7..ab3087687a32 100644
--- a/net/tipc/msg.c
+++ b/net/tipc/msg.c
@@ -508,7 +508,7 @@ bool tipc_msg_reverse(u32 own_node, struct sk_buff **skb, int err)
508 } 508 }
509 509
510 if (skb_cloned(_skb) && 510 if (skb_cloned(_skb) &&
511 pskb_expand_head(_skb, BUF_HEADROOM, BUF_TAILROOM, GFP_KERNEL)) 511 pskb_expand_head(_skb, BUF_HEADROOM, BUF_TAILROOM, GFP_ATOMIC))
512 goto exit; 512 goto exit;
513 513
514 /* Now reverse the concerned fields */ 514 /* Now reverse the concerned fields */
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 6a7fe7660551..1a0c961f4ffe 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -999,7 +999,8 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
999 struct path path = { }; 999 struct path path = { };
1000 1000
1001 err = -EINVAL; 1001 err = -EINVAL;
1002 if (sunaddr->sun_family != AF_UNIX) 1002 if (addr_len < offsetofend(struct sockaddr_un, sun_family) ||
1003 sunaddr->sun_family != AF_UNIX)
1003 goto out; 1004 goto out;
1004 1005
1005 if (addr_len == sizeof(short)) { 1006 if (addr_len == sizeof(short)) {
@@ -1110,6 +1111,10 @@ static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr,
1110 unsigned int hash; 1111 unsigned int hash;
1111 int err; 1112 int err;
1112 1113
1114 err = -EINVAL;
1115 if (alen < offsetofend(struct sockaddr, sa_family))
1116 goto out;
1117
1113 if (addr->sa_family != AF_UNSPEC) { 1118 if (addr->sa_family != AF_UNSPEC) {
1114 err = unix_mkname(sunaddr, alen, &hash); 1119 err = unix_mkname(sunaddr, alen, &hash);
1115 if (err < 0) 1120 if (err < 0)
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index 6f7f6757ceef..dfc8c51e4d74 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -1540,8 +1540,7 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1540 long timeout; 1540 long timeout;
1541 int err; 1541 int err;
1542 struct vsock_transport_send_notify_data send_data; 1542 struct vsock_transport_send_notify_data send_data;
1543 1543 DEFINE_WAIT_FUNC(wait, woken_wake_function);
1544 DEFINE_WAIT(wait);
1545 1544
1546 sk = sock->sk; 1545 sk = sock->sk;
1547 vsk = vsock_sk(sk); 1546 vsk = vsock_sk(sk);
@@ -1584,11 +1583,10 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1584 if (err < 0) 1583 if (err < 0)
1585 goto out; 1584 goto out;
1586 1585
1587
1588 while (total_written < len) { 1586 while (total_written < len) {
1589 ssize_t written; 1587 ssize_t written;
1590 1588
1591 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 1589 add_wait_queue(sk_sleep(sk), &wait);
1592 while (vsock_stream_has_space(vsk) == 0 && 1590 while (vsock_stream_has_space(vsk) == 0 &&
1593 sk->sk_err == 0 && 1591 sk->sk_err == 0 &&
1594 !(sk->sk_shutdown & SEND_SHUTDOWN) && 1592 !(sk->sk_shutdown & SEND_SHUTDOWN) &&
@@ -1597,33 +1595,30 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1597 /* Don't wait for non-blocking sockets. */ 1595 /* Don't wait for non-blocking sockets. */
1598 if (timeout == 0) { 1596 if (timeout == 0) {
1599 err = -EAGAIN; 1597 err = -EAGAIN;
1600 finish_wait(sk_sleep(sk), &wait); 1598 remove_wait_queue(sk_sleep(sk), &wait);
1601 goto out_err; 1599 goto out_err;
1602 } 1600 }
1603 1601
1604 err = transport->notify_send_pre_block(vsk, &send_data); 1602 err = transport->notify_send_pre_block(vsk, &send_data);
1605 if (err < 0) { 1603 if (err < 0) {
1606 finish_wait(sk_sleep(sk), &wait); 1604 remove_wait_queue(sk_sleep(sk), &wait);
1607 goto out_err; 1605 goto out_err;
1608 } 1606 }
1609 1607
1610 release_sock(sk); 1608 release_sock(sk);
1611 timeout = schedule_timeout(timeout); 1609 timeout = wait_woken(&wait, TASK_INTERRUPTIBLE, timeout);
1612 lock_sock(sk); 1610 lock_sock(sk);
1613 if (signal_pending(current)) { 1611 if (signal_pending(current)) {
1614 err = sock_intr_errno(timeout); 1612 err = sock_intr_errno(timeout);
1615 finish_wait(sk_sleep(sk), &wait); 1613 remove_wait_queue(sk_sleep(sk), &wait);
1616 goto out_err; 1614 goto out_err;
1617 } else if (timeout == 0) { 1615 } else if (timeout == 0) {
1618 err = -EAGAIN; 1616 err = -EAGAIN;
1619 finish_wait(sk_sleep(sk), &wait); 1617 remove_wait_queue(sk_sleep(sk), &wait);
1620 goto out_err; 1618 goto out_err;
1621 } 1619 }
1622
1623 prepare_to_wait(sk_sleep(sk), &wait,
1624 TASK_INTERRUPTIBLE);
1625 } 1620 }
1626 finish_wait(sk_sleep(sk), &wait); 1621 remove_wait_queue(sk_sleep(sk), &wait);
1627 1622
1628 /* These checks occur both as part of and after the loop 1623 /* These checks occur both as part of and after the loop
1629 * conditional since we need to check before and after 1624 * conditional since we need to check before and after
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index 14d5f0c8c45f..9f0901f3e42b 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -322,9 +322,9 @@ cfg80211_find_sched_scan_req(struct cfg80211_registered_device *rdev, u64 reqid)
322{ 322{
323 struct cfg80211_sched_scan_request *pos; 323 struct cfg80211_sched_scan_request *pos;
324 324
325 ASSERT_RTNL(); 325 WARN_ON_ONCE(!rcu_read_lock_held() && !lockdep_rtnl_is_held());
326 326
327 list_for_each_entry(pos, &rdev->sched_scan_req_list, list) { 327 list_for_each_entry_rcu(pos, &rdev->sched_scan_req_list, list) {
328 if (pos->reqid == reqid) 328 if (pos->reqid == reqid)
329 return pos; 329 return pos;
330 } 330 }
@@ -398,13 +398,13 @@ void cfg80211_sched_scan_results(struct wiphy *wiphy, u64 reqid)
398 trace_cfg80211_sched_scan_results(wiphy, reqid); 398 trace_cfg80211_sched_scan_results(wiphy, reqid);
399 /* ignore if we're not scanning */ 399 /* ignore if we're not scanning */
400 400
401 rtnl_lock(); 401 rcu_read_lock();
402 request = cfg80211_find_sched_scan_req(rdev, reqid); 402 request = cfg80211_find_sched_scan_req(rdev, reqid);
403 if (request) { 403 if (request) {
404 request->report_results = true; 404 request->report_results = true;
405 queue_work(cfg80211_wq, &rdev->sched_scan_res_wk); 405 queue_work(cfg80211_wq, &rdev->sched_scan_res_wk);
406 } 406 }
407 rtnl_unlock(); 407 rcu_read_unlock();
408} 408}
409EXPORT_SYMBOL(cfg80211_sched_scan_results); 409EXPORT_SYMBOL(cfg80211_sched_scan_results);
410 410
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 7198373e2920..4992f1025c9d 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -454,6 +454,8 @@ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
454 if (iftype == NL80211_IFTYPE_MESH_POINT) 454 if (iftype == NL80211_IFTYPE_MESH_POINT)
455 skb_copy_bits(skb, hdrlen, &mesh_flags, 1); 455 skb_copy_bits(skb, hdrlen, &mesh_flags, 1);
456 456
457 mesh_flags &= MESH_FLAGS_AE;
458
457 switch (hdr->frame_control & 459 switch (hdr->frame_control &
458 cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) { 460 cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) {
459 case cpu_to_le16(IEEE80211_FCTL_TODS): 461 case cpu_to_le16(IEEE80211_FCTL_TODS):
@@ -469,9 +471,9 @@ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
469 iftype != NL80211_IFTYPE_STATION)) 471 iftype != NL80211_IFTYPE_STATION))
470 return -1; 472 return -1;
471 if (iftype == NL80211_IFTYPE_MESH_POINT) { 473 if (iftype == NL80211_IFTYPE_MESH_POINT) {
472 if (mesh_flags & MESH_FLAGS_AE_A4) 474 if (mesh_flags == MESH_FLAGS_AE_A4)
473 return -1; 475 return -1;
474 if (mesh_flags & MESH_FLAGS_AE_A5_A6) { 476 if (mesh_flags == MESH_FLAGS_AE_A5_A6) {
475 skb_copy_bits(skb, hdrlen + 477 skb_copy_bits(skb, hdrlen +
476 offsetof(struct ieee80211s_hdr, eaddr1), 478 offsetof(struct ieee80211s_hdr, eaddr1),
477 tmp.h_dest, 2 * ETH_ALEN); 479 tmp.h_dest, 2 * ETH_ALEN);
@@ -487,9 +489,9 @@ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
487 ether_addr_equal(tmp.h_source, addr))) 489 ether_addr_equal(tmp.h_source, addr)))
488 return -1; 490 return -1;
489 if (iftype == NL80211_IFTYPE_MESH_POINT) { 491 if (iftype == NL80211_IFTYPE_MESH_POINT) {
490 if (mesh_flags & MESH_FLAGS_AE_A5_A6) 492 if (mesh_flags == MESH_FLAGS_AE_A5_A6)
491 return -1; 493 return -1;
492 if (mesh_flags & MESH_FLAGS_AE_A4) 494 if (mesh_flags == MESH_FLAGS_AE_A4)
493 skb_copy_bits(skb, hdrlen + 495 skb_copy_bits(skb, hdrlen +
494 offsetof(struct ieee80211s_hdr, eaddr1), 496 offsetof(struct ieee80211s_hdr, eaddr1),
495 tmp.h_source, ETH_ALEN); 497 tmp.h_source, ETH_ALEN);
diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c
index 1a4db6790e20..6cdb054484d6 100644
--- a/net/wireless/wext-core.c
+++ b/net/wireless/wext-core.c
@@ -914,13 +914,12 @@ int call_commit_handler(struct net_device *dev)
914 * Main IOCTl dispatcher. 914 * Main IOCTl dispatcher.
915 * Check the type of IOCTL and call the appropriate wrapper... 915 * Check the type of IOCTL and call the appropriate wrapper...
916 */ 916 */
917static int wireless_process_ioctl(struct net *net, struct ifreq *ifr, 917static int wireless_process_ioctl(struct net *net, struct iwreq *iwr,
918 unsigned int cmd, 918 unsigned int cmd,
919 struct iw_request_info *info, 919 struct iw_request_info *info,
920 wext_ioctl_func standard, 920 wext_ioctl_func standard,
921 wext_ioctl_func private) 921 wext_ioctl_func private)
922{ 922{
923 struct iwreq *iwr = (struct iwreq *) ifr;
924 struct net_device *dev; 923 struct net_device *dev;
925 iw_handler handler; 924 iw_handler handler;
926 925
@@ -928,7 +927,7 @@ static int wireless_process_ioctl(struct net *net, struct ifreq *ifr,
928 * The copy_to/from_user() of ifr is also dealt with in there */ 927 * The copy_to/from_user() of ifr is also dealt with in there */
929 928
930 /* Make sure the device exist */ 929 /* Make sure the device exist */
931 if ((dev = __dev_get_by_name(net, ifr->ifr_name)) == NULL) 930 if ((dev = __dev_get_by_name(net, iwr->ifr_name)) == NULL)
932 return -ENODEV; 931 return -ENODEV;
933 932
934 /* A bunch of special cases, then the generic case... 933 /* A bunch of special cases, then the generic case...
@@ -957,9 +956,6 @@ static int wireless_process_ioctl(struct net *net, struct ifreq *ifr,
957 else if (private) 956 else if (private)
958 return private(dev, iwr, cmd, info, handler); 957 return private(dev, iwr, cmd, info, handler);
959 } 958 }
960 /* Old driver API : call driver ioctl handler */
961 if (dev->netdev_ops->ndo_do_ioctl)
962 return dev->netdev_ops->ndo_do_ioctl(dev, ifr, cmd);
963 return -EOPNOTSUPP; 959 return -EOPNOTSUPP;
964} 960}
965 961
@@ -977,7 +973,7 @@ static int wext_permission_check(unsigned int cmd)
977} 973}
978 974
979/* entry point from dev ioctl */ 975/* entry point from dev ioctl */
980static int wext_ioctl_dispatch(struct net *net, struct ifreq *ifr, 976static int wext_ioctl_dispatch(struct net *net, struct iwreq *iwr,
981 unsigned int cmd, struct iw_request_info *info, 977 unsigned int cmd, struct iw_request_info *info,
982 wext_ioctl_func standard, 978 wext_ioctl_func standard,
983 wext_ioctl_func private) 979 wext_ioctl_func private)
@@ -987,9 +983,9 @@ static int wext_ioctl_dispatch(struct net *net, struct ifreq *ifr,
987 if (ret) 983 if (ret)
988 return ret; 984 return ret;
989 985
990 dev_load(net, ifr->ifr_name); 986 dev_load(net, iwr->ifr_name);
991 rtnl_lock(); 987 rtnl_lock();
992 ret = wireless_process_ioctl(net, ifr, cmd, info, standard, private); 988 ret = wireless_process_ioctl(net, iwr, cmd, info, standard, private);
993 rtnl_unlock(); 989 rtnl_unlock();
994 990
995 return ret; 991 return ret;
@@ -1039,18 +1035,18 @@ static int ioctl_standard_call(struct net_device * dev,
1039} 1035}
1040 1036
1041 1037
1042int wext_handle_ioctl(struct net *net, struct ifreq *ifr, unsigned int cmd, 1038int wext_handle_ioctl(struct net *net, struct iwreq *iwr, unsigned int cmd,
1043 void __user *arg) 1039 void __user *arg)
1044{ 1040{
1045 struct iw_request_info info = { .cmd = cmd, .flags = 0 }; 1041 struct iw_request_info info = { .cmd = cmd, .flags = 0 };
1046 int ret; 1042 int ret;
1047 1043
1048 ret = wext_ioctl_dispatch(net, ifr, cmd, &info, 1044 ret = wext_ioctl_dispatch(net, iwr, cmd, &info,
1049 ioctl_standard_call, 1045 ioctl_standard_call,
1050 ioctl_private_call); 1046 ioctl_private_call);
1051 if (ret >= 0 && 1047 if (ret >= 0 &&
1052 IW_IS_GET(cmd) && 1048 IW_IS_GET(cmd) &&
1053 copy_to_user(arg, ifr, sizeof(struct iwreq))) 1049 copy_to_user(arg, iwr, sizeof(struct iwreq)))
1054 return -EFAULT; 1050 return -EFAULT;
1055 1051
1056 return ret; 1052 return ret;
@@ -1107,7 +1103,7 @@ int compat_wext_handle_ioctl(struct net *net, unsigned int cmd,
1107 info.cmd = cmd; 1103 info.cmd = cmd;
1108 info.flags = IW_REQUEST_FLAG_COMPAT; 1104 info.flags = IW_REQUEST_FLAG_COMPAT;
1109 1105
1110 ret = wext_ioctl_dispatch(net, (struct ifreq *) &iwr, cmd, &info, 1106 ret = wext_ioctl_dispatch(net, &iwr, cmd, &info,
1111 compat_standard_call, 1107 compat_standard_call,
1112 compat_private_call); 1108 compat_private_call);
1113 1109
diff --git a/net/xfrm/Makefile b/net/xfrm/Makefile
index abf81b329dc1..55b2ac300995 100644
--- a/net/xfrm/Makefile
+++ b/net/xfrm/Makefile
@@ -4,8 +4,7 @@
4 4
5obj-$(CONFIG_XFRM) := xfrm_policy.o xfrm_state.o xfrm_hash.o \ 5obj-$(CONFIG_XFRM) := xfrm_policy.o xfrm_state.o xfrm_hash.o \
6 xfrm_input.o xfrm_output.o \ 6 xfrm_input.o xfrm_output.o \
7 xfrm_sysctl.o xfrm_replay.o 7 xfrm_sysctl.o xfrm_replay.o xfrm_device.o
8obj-$(CONFIG_XFRM_OFFLOAD) += xfrm_device.o
9obj-$(CONFIG_XFRM_STATISTICS) += xfrm_proc.o 8obj-$(CONFIG_XFRM_STATISTICS) += xfrm_proc.o
10obj-$(CONFIG_XFRM_ALGO) += xfrm_algo.o 9obj-$(CONFIG_XFRM_ALGO) += xfrm_algo.o
11obj-$(CONFIG_XFRM_USER) += xfrm_user.o 10obj-$(CONFIG_XFRM_USER) += xfrm_user.o
diff --git a/net/xfrm/xfrm_device.c b/net/xfrm/xfrm_device.c
index 8ec8a3fcf8d4..5aba03685d7d 100644
--- a/net/xfrm/xfrm_device.c
+++ b/net/xfrm/xfrm_device.c
@@ -22,6 +22,7 @@
22#include <net/xfrm.h> 22#include <net/xfrm.h>
23#include <linux/notifier.h> 23#include <linux/notifier.h>
24 24
25#ifdef CONFIG_XFRM_OFFLOAD
25int validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features) 26int validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features)
26{ 27{
27 int err; 28 int err;
@@ -137,6 +138,7 @@ ok:
137 return true; 138 return true;
138} 139}
139EXPORT_SYMBOL_GPL(xfrm_dev_offload_ok); 140EXPORT_SYMBOL_GPL(xfrm_dev_offload_ok);
141#endif
140 142
141int xfrm_dev_register(struct net_device *dev) 143int xfrm_dev_register(struct net_device *dev)
142{ 144{
@@ -170,7 +172,7 @@ static int xfrm_dev_feat_change(struct net_device *dev)
170 172
171static int xfrm_dev_down(struct net_device *dev) 173static int xfrm_dev_down(struct net_device *dev)
172{ 174{
173 if (dev->hw_features & NETIF_F_HW_ESP) 175 if (dev->features & NETIF_F_HW_ESP)
174 xfrm_dev_state_flush(dev_net(dev), dev, true); 176 xfrm_dev_state_flush(dev_net(dev), dev, true);
175 177
176 xfrm_garbage_collect(dev_net(dev)); 178 xfrm_garbage_collect(dev_net(dev));
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index b00a1d5a7f52..643a18f72032 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -1006,10 +1006,6 @@ int xfrm_policy_flush(struct net *net, u8 type, bool task_valid)
1006 err = -ESRCH; 1006 err = -ESRCH;
1007out: 1007out:
1008 spin_unlock_bh(&net->xfrm.xfrm_policy_lock); 1008 spin_unlock_bh(&net->xfrm.xfrm_policy_lock);
1009
1010 if (cnt)
1011 xfrm_garbage_collect(net);
1012
1013 return err; 1009 return err;
1014} 1010}
1015EXPORT_SYMBOL(xfrm_policy_flush); 1011EXPORT_SYMBOL(xfrm_policy_flush);
@@ -1797,43 +1793,6 @@ free_dst:
1797 goto out; 1793 goto out;
1798} 1794}
1799 1795
1800#ifdef CONFIG_XFRM_SUB_POLICY
1801static int xfrm_dst_alloc_copy(void **target, const void *src, int size)
1802{
1803 if (!*target) {
1804 *target = kmalloc(size, GFP_ATOMIC);
1805 if (!*target)
1806 return -ENOMEM;
1807 }
1808
1809 memcpy(*target, src, size);
1810 return 0;
1811}
1812#endif
1813
1814static int xfrm_dst_update_parent(struct dst_entry *dst,
1815 const struct xfrm_selector *sel)
1816{
1817#ifdef CONFIG_XFRM_SUB_POLICY
1818 struct xfrm_dst *xdst = (struct xfrm_dst *)dst;
1819 return xfrm_dst_alloc_copy((void **)&(xdst->partner),
1820 sel, sizeof(*sel));
1821#else
1822 return 0;
1823#endif
1824}
1825
1826static int xfrm_dst_update_origin(struct dst_entry *dst,
1827 const struct flowi *fl)
1828{
1829#ifdef CONFIG_XFRM_SUB_POLICY
1830 struct xfrm_dst *xdst = (struct xfrm_dst *)dst;
1831 return xfrm_dst_alloc_copy((void **)&(xdst->origin), fl, sizeof(*fl));
1832#else
1833 return 0;
1834#endif
1835}
1836
1837static int xfrm_expand_policies(const struct flowi *fl, u16 family, 1796static int xfrm_expand_policies(const struct flowi *fl, u16 family,
1838 struct xfrm_policy **pols, 1797 struct xfrm_policy **pols,
1839 int *num_pols, int *num_xfrms) 1798 int *num_pols, int *num_xfrms)
@@ -1905,16 +1864,6 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols,
1905 1864
1906 xdst = (struct xfrm_dst *)dst; 1865 xdst = (struct xfrm_dst *)dst;
1907 xdst->num_xfrms = err; 1866 xdst->num_xfrms = err;
1908 if (num_pols > 1)
1909 err = xfrm_dst_update_parent(dst, &pols[1]->selector);
1910 else
1911 err = xfrm_dst_update_origin(dst, fl);
1912 if (unlikely(err)) {
1913 dst_free(dst);
1914 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTBUNDLECHECKERROR);
1915 return ERR_PTR(err);
1916 }
1917
1918 xdst->num_pols = num_pols; 1867 xdst->num_pols = num_pols;
1919 memcpy(xdst->pols, pols, sizeof(struct xfrm_policy *) * num_pols); 1868 memcpy(xdst->pols, pols, sizeof(struct xfrm_policy *) * num_pols);
1920 xdst->policy_genid = atomic_read(&pols[0]->genid); 1869 xdst->policy_genid = atomic_read(&pols[0]->genid);
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index fc3c5aa38754..2e291bc5f1fc 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -1383,6 +1383,8 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig)
1383 x->curlft.add_time = orig->curlft.add_time; 1383 x->curlft.add_time = orig->curlft.add_time;
1384 x->km.state = orig->km.state; 1384 x->km.state = orig->km.state;
1385 x->km.seq = orig->km.seq; 1385 x->km.seq = orig->km.seq;
1386 x->replay = orig->replay;
1387 x->preplay = orig->preplay;
1386 1388
1387 return x; 1389 return x;
1388 1390
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index 38614df33ec8..86116e9aaf3d 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -2027,6 +2027,7 @@ static int xfrm_flush_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
2027 return 0; 2027 return 0;
2028 return err; 2028 return err;
2029 } 2029 }
2030 xfrm_garbage_collect(net);
2030 2031
2031 c.data.type = type; 2032 c.data.type = type;
2032 c.event = nlh->nlmsg_type; 2033 c.event = nlh->nlmsg_type;
diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst
index ce753a408c56..c583a1e1bd3c 100644
--- a/scripts/Makefile.headersinst
+++ b/scripts/Makefile.headersinst
@@ -14,7 +14,15 @@ __headers:
14include scripts/Kbuild.include 14include scripts/Kbuild.include
15 15
16srcdir := $(srctree)/$(obj) 16srcdir := $(srctree)/$(obj)
17subdirs := $(patsubst $(srcdir)/%/.,%,$(wildcard $(srcdir)/*/.)) 17
18# When make is run under a fakechroot environment, the function
19# $(wildcard $(srcdir)/*/.) doesn't only return directories, but also regular
20# files. So, we are using a combination of sort/dir/wildcard which works
21# with fakechroot.
22subdirs := $(patsubst $(srcdir)/%/,%,\
23 $(filter-out $(srcdir)/,\
24 $(sort $(dir $(wildcard $(srcdir)/*/)))))
25
18# caller may set destination dir (when installing to asm/) 26# caller may set destination dir (when installing to asm/)
19_dst := $(if $(dst),$(dst),$(obj)) 27_dst := $(if $(dst),$(dst),$(obj))
20 28
diff --git a/scripts/gdb/linux/dmesg.py b/scripts/gdb/linux/dmesg.py
index f9b92ece7834..5afd1098e33a 100644
--- a/scripts/gdb/linux/dmesg.py
+++ b/scripts/gdb/linux/dmesg.py
@@ -23,10 +23,11 @@ class LxDmesg(gdb.Command):
23 super(LxDmesg, self).__init__("lx-dmesg", gdb.COMMAND_DATA) 23 super(LxDmesg, self).__init__("lx-dmesg", gdb.COMMAND_DATA)
24 24
25 def invoke(self, arg, from_tty): 25 def invoke(self, arg, from_tty):
26 log_buf_addr = int(str(gdb.parse_and_eval("log_buf")).split()[0], 16) 26 log_buf_addr = int(str(gdb.parse_and_eval(
27 log_first_idx = int(gdb.parse_and_eval("log_first_idx")) 27 "'printk.c'::log_buf")).split()[0], 16)
28 log_next_idx = int(gdb.parse_and_eval("log_next_idx")) 28 log_first_idx = int(gdb.parse_and_eval("'printk.c'::log_first_idx"))
29 log_buf_len = int(gdb.parse_and_eval("log_buf_len")) 29 log_next_idx = int(gdb.parse_and_eval("'printk.c'::log_next_idx"))
30 log_buf_len = int(gdb.parse_and_eval("'printk.c'::log_buf_len"))
30 31
31 inf = gdb.inferiors()[0] 32 inf = gdb.inferiors()[0]
32 start = log_buf_addr + log_first_idx 33 start = log_buf_addr + log_first_idx
diff --git a/scripts/genksyms/genksyms.h b/scripts/genksyms/genksyms.h
index 3bffdcaaa274..b724a0290c75 100644
--- a/scripts/genksyms/genksyms.h
+++ b/scripts/genksyms/genksyms.h
@@ -75,7 +75,7 @@ struct string_list *copy_list_range(struct string_list *start,
75int yylex(void); 75int yylex(void);
76int yyparse(void); 76int yyparse(void);
77 77
78void error_with_pos(const char *, ...); 78void error_with_pos(const char *, ...) __attribute__ ((format(printf, 1, 2)));
79 79
80/*----------------------------------------------------------------------*/ 80/*----------------------------------------------------------------------*/
81#define xmalloc(size) ({ void *__ptr = malloc(size); \ 81#define xmalloc(size) ({ void *__ptr = malloc(size); \
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 90a091b6ae4d..eb8144643b78 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -196,7 +196,7 @@ clean-files += config.pot linux.pot
196 196
197# Check that we have the required ncurses stuff installed for lxdialog (menuconfig) 197# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
198PHONY += $(obj)/dochecklxdialog 198PHONY += $(obj)/dochecklxdialog
199$(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog 199$(addprefix $(obj)/, mconf.o $(lxdialog)): $(obj)/dochecklxdialog
200$(obj)/dochecklxdialog: 200$(obj)/dochecklxdialog:
201 $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf) 201 $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf)
202 202
diff --git a/scripts/kconfig/nconf.c b/scripts/kconfig/nconf.c
index a9bc5334a478..003114779815 100644
--- a/scripts/kconfig/nconf.c
+++ b/scripts/kconfig/nconf.c
@@ -271,7 +271,7 @@ static struct mitem k_menu_items[MAX_MENU_ITEMS];
271static int items_num; 271static int items_num;
272static int global_exit; 272static int global_exit;
273/* the currently selected button */ 273/* the currently selected button */
274const char *current_instructions = menu_instructions; 274static const char *current_instructions = menu_instructions;
275 275
276static char *dialog_input_result; 276static char *dialog_input_result;
277static int dialog_input_result_len; 277static int dialog_input_result_len;
@@ -305,7 +305,7 @@ struct function_keys {
305}; 305};
306 306
307static const int function_keys_num = 9; 307static const int function_keys_num = 9;
308struct function_keys function_keys[] = { 308static struct function_keys function_keys[] = {
309 { 309 {
310 .key_str = "F1", 310 .key_str = "F1",
311 .func = "Help", 311 .func = "Help",
@@ -508,7 +508,7 @@ static int get_mext_match(const char *match_str, match_f flag)
508 index = (index + items_num) % items_num; 508 index = (index + items_num) % items_num;
509 while (true) { 509 while (true) {
510 char *str = k_menu_items[index].str; 510 char *str = k_menu_items[index].str;
511 if (strcasestr(str, match_str) != 0) 511 if (strcasestr(str, match_str) != NULL)
512 return index; 512 return index;
513 if (flag == FIND_NEXT_MATCH_UP || 513 if (flag == FIND_NEXT_MATCH_UP ||
514 flag == MATCH_TINKER_PATTERN_UP) 514 flag == MATCH_TINKER_PATTERN_UP)
@@ -1067,7 +1067,7 @@ static int do_match(int key, struct match_state *state, int *ans)
1067 1067
1068static void conf(struct menu *menu) 1068static void conf(struct menu *menu)
1069{ 1069{
1070 struct menu *submenu = 0; 1070 struct menu *submenu = NULL;
1071 const char *prompt = menu_get_prompt(menu); 1071 const char *prompt = menu_get_prompt(menu);
1072 struct symbol *sym; 1072 struct symbol *sym;
1073 int res; 1073 int res;
@@ -1234,7 +1234,7 @@ static void show_help(struct menu *menu)
1234static void conf_choice(struct menu *menu) 1234static void conf_choice(struct menu *menu)
1235{ 1235{
1236 const char *prompt = _(menu_get_prompt(menu)); 1236 const char *prompt = _(menu_get_prompt(menu));
1237 struct menu *child = 0; 1237 struct menu *child = NULL;
1238 struct symbol *active; 1238 struct symbol *active;
1239 int selected_index = 0; 1239 int selected_index = 0;
1240 int last_top_row = 0; 1240 int last_top_row = 0;
@@ -1456,7 +1456,7 @@ static void conf_save(void)
1456 } 1456 }
1457} 1457}
1458 1458
1459void setup_windows(void) 1459static void setup_windows(void)
1460{ 1460{
1461 int lines, columns; 1461 int lines, columns;
1462 1462
diff --git a/scripts/kconfig/nconf.gui.c b/scripts/kconfig/nconf.gui.c
index 4b2f44c20caf..a64b1c31253e 100644
--- a/scripts/kconfig/nconf.gui.c
+++ b/scripts/kconfig/nconf.gui.c
@@ -129,7 +129,7 @@ static void no_colors_theme(void)
129 mkattrn(FUNCTION_TEXT, A_REVERSE); 129 mkattrn(FUNCTION_TEXT, A_REVERSE);
130} 130}
131 131
132void set_colors() 132void set_colors(void)
133{ 133{
134 start_color(); 134 start_color();
135 use_default_colors(); 135 use_default_colors();
@@ -192,7 +192,7 @@ const char *get_line(const char *text, int line_no)
192 int lines = 0; 192 int lines = 0;
193 193
194 if (!text) 194 if (!text)
195 return 0; 195 return NULL;
196 196
197 for (i = 0; text[i] != '\0' && lines < line_no; i++) 197 for (i = 0; text[i] != '\0' && lines < line_no; i++)
198 if (text[i] == '\n') 198 if (text[i] == '\n')
diff --git a/scripts/tags.sh b/scripts/tags.sh
index d661f2f3ef61..d23dcbf17457 100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
@@ -106,6 +106,7 @@ all_compiled_sources()
106 case "$i" in 106 case "$i" in
107 *.[cS]) 107 *.[cS])
108 j=${i/\.[cS]/\.o} 108 j=${i/\.[cS]/\.o}
109 j="${j#$tree}"
109 if [ -e $j ]; then 110 if [ -e $j ]; then
110 echo $i 111 echo $i
111 fi 112 fi
diff --git a/security/keys/Kconfig b/security/keys/Kconfig
index 6fd95f76bfae..a7a23b5541f8 100644
--- a/security/keys/Kconfig
+++ b/security/keys/Kconfig
@@ -20,6 +20,10 @@ config KEYS
20 20
21 If you are unsure as to whether this is required, answer N. 21 If you are unsure as to whether this is required, answer N.
22 22
23config KEYS_COMPAT
24 def_bool y
25 depends on COMPAT && KEYS
26
23config PERSISTENT_KEYRINGS 27config PERSISTENT_KEYRINGS
24 bool "Enable register of persistent per-UID keyrings" 28 bool "Enable register of persistent per-UID keyrings"
25 depends on KEYS 29 depends on KEYS
@@ -89,9 +93,9 @@ config ENCRYPTED_KEYS
89config KEY_DH_OPERATIONS 93config KEY_DH_OPERATIONS
90 bool "Diffie-Hellman operations on retained keys" 94 bool "Diffie-Hellman operations on retained keys"
91 depends on KEYS 95 depends on KEYS
92 select MPILIB
93 select CRYPTO 96 select CRYPTO
94 select CRYPTO_HASH 97 select CRYPTO_HASH
98 select CRYPTO_DH
95 help 99 help
96 This option provides support for calculating Diffie-Hellman 100 This option provides support for calculating Diffie-Hellman
97 public keys and shared secrets using values stored as keys 101 public keys and shared secrets using values stored as keys
diff --git a/security/keys/dh.c b/security/keys/dh.c
index e603bd912e4c..4755d4b4f945 100644
--- a/security/keys/dh.c
+++ b/security/keys/dh.c
@@ -8,34 +8,17 @@
8 * 2 of the License, or (at your option) any later version. 8 * 2 of the License, or (at your option) any later version.
9 */ 9 */
10 10
11#include <linux/mpi.h>
12#include <linux/slab.h> 11#include <linux/slab.h>
13#include <linux/uaccess.h> 12#include <linux/uaccess.h>
13#include <linux/scatterlist.h>
14#include <linux/crypto.h> 14#include <linux/crypto.h>
15#include <crypto/hash.h> 15#include <crypto/hash.h>
16#include <crypto/kpp.h>
17#include <crypto/dh.h>
16#include <keys/user-type.h> 18#include <keys/user-type.h>
17#include "internal.h" 19#include "internal.h"
18 20
19/* 21static ssize_t dh_data_from_key(key_serial_t keyid, void **data)
20 * Public key or shared secret generation function [RFC2631 sec 2.1.1]
21 *
22 * ya = g^xa mod p;
23 * or
24 * ZZ = yb^xa mod p;
25 *
26 * where xa is the local private key, ya is the local public key, g is
27 * the generator, p is the prime, yb is the remote public key, and ZZ
28 * is the shared secret.
29 *
30 * Both are the same calculation, so g or yb are the "base" and ya or
31 * ZZ are the "result".
32 */
33static int do_dh(MPI result, MPI base, MPI xa, MPI p)
34{
35 return mpi_powm(result, base, xa, p);
36}
37
38static ssize_t mpi_from_key(key_serial_t keyid, size_t maxlen, MPI *mpi)
39{ 22{
40 struct key *key; 23 struct key *key;
41 key_ref_t key_ref; 24 key_ref_t key_ref;
@@ -56,19 +39,17 @@ static ssize_t mpi_from_key(key_serial_t keyid, size_t maxlen, MPI *mpi)
56 status = key_validate(key); 39 status = key_validate(key);
57 if (status == 0) { 40 if (status == 0) {
58 const struct user_key_payload *payload; 41 const struct user_key_payload *payload;
42 uint8_t *duplicate;
59 43
60 payload = user_key_payload_locked(key); 44 payload = user_key_payload_locked(key);
61 45
62 if (maxlen == 0) { 46 duplicate = kmemdup(payload->data, payload->datalen,
63 *mpi = NULL; 47 GFP_KERNEL);
48 if (duplicate) {
49 *data = duplicate;
64 ret = payload->datalen; 50 ret = payload->datalen;
65 } else if (payload->datalen <= maxlen) {
66 *mpi = mpi_read_raw_data(payload->data,
67 payload->datalen);
68 if (*mpi)
69 ret = payload->datalen;
70 } else { 51 } else {
71 ret = -EINVAL; 52 ret = -ENOMEM;
72 } 53 }
73 } 54 }
74 up_read(&key->sem); 55 up_read(&key->sem);
@@ -79,6 +60,29 @@ error:
79 return ret; 60 return ret;
80} 61}
81 62
63static void dh_free_data(struct dh *dh)
64{
65 kzfree(dh->key);
66 kzfree(dh->p);
67 kzfree(dh->g);
68}
69
70struct dh_completion {
71 struct completion completion;
72 int err;
73};
74
75static void dh_crypto_done(struct crypto_async_request *req, int err)
76{
77 struct dh_completion *compl = req->data;
78
79 if (err == -EINPROGRESS)
80 return;
81
82 compl->err = err;
83 complete(&compl->completion);
84}
85
82struct kdf_sdesc { 86struct kdf_sdesc {
83 struct shash_desc shash; 87 struct shash_desc shash;
84 char ctx[]; 88 char ctx[];
@@ -89,6 +93,7 @@ static int kdf_alloc(struct kdf_sdesc **sdesc_ret, char *hashname)
89 struct crypto_shash *tfm; 93 struct crypto_shash *tfm;
90 struct kdf_sdesc *sdesc; 94 struct kdf_sdesc *sdesc;
91 int size; 95 int size;
96 int err;
92 97
93 /* allocate synchronous hash */ 98 /* allocate synchronous hash */
94 tfm = crypto_alloc_shash(hashname, 0, 0); 99 tfm = crypto_alloc_shash(hashname, 0, 0);
@@ -97,16 +102,25 @@ static int kdf_alloc(struct kdf_sdesc **sdesc_ret, char *hashname)
97 return PTR_ERR(tfm); 102 return PTR_ERR(tfm);
98 } 103 }
99 104
105 err = -EINVAL;
106 if (crypto_shash_digestsize(tfm) == 0)
107 goto out_free_tfm;
108
109 err = -ENOMEM;
100 size = sizeof(struct shash_desc) + crypto_shash_descsize(tfm); 110 size = sizeof(struct shash_desc) + crypto_shash_descsize(tfm);
101 sdesc = kmalloc(size, GFP_KERNEL); 111 sdesc = kmalloc(size, GFP_KERNEL);
102 if (!sdesc) 112 if (!sdesc)
103 return -ENOMEM; 113 goto out_free_tfm;
104 sdesc->shash.tfm = tfm; 114 sdesc->shash.tfm = tfm;
105 sdesc->shash.flags = 0x0; 115 sdesc->shash.flags = 0x0;
106 116
107 *sdesc_ret = sdesc; 117 *sdesc_ret = sdesc;
108 118
109 return 0; 119 return 0;
120
121out_free_tfm:
122 crypto_free_shash(tfm);
123 return err;
110} 124}
111 125
112static void kdf_dealloc(struct kdf_sdesc *sdesc) 126static void kdf_dealloc(struct kdf_sdesc *sdesc)
@@ -120,14 +134,6 @@ static void kdf_dealloc(struct kdf_sdesc *sdesc)
120 kzfree(sdesc); 134 kzfree(sdesc);
121} 135}
122 136
123/* convert 32 bit integer into its string representation */
124static inline void crypto_kw_cpu_to_be32(u32 val, u8 *buf)
125{
126 __be32 *a = (__be32 *)buf;
127
128 *a = cpu_to_be32(val);
129}
130
131/* 137/*
132 * Implementation of the KDF in counter mode according to SP800-108 section 5.1 138 * Implementation of the KDF in counter mode according to SP800-108 section 5.1
133 * as well as SP800-56A section 5.8.1 (Single-step KDF). 139 * as well as SP800-56A section 5.8.1 (Single-step KDF).
@@ -138,25 +144,39 @@ static inline void crypto_kw_cpu_to_be32(u32 val, u8 *buf)
138 * 5.8.1.2). 144 * 5.8.1.2).
139 */ 145 */
140static int kdf_ctr(struct kdf_sdesc *sdesc, const u8 *src, unsigned int slen, 146static int kdf_ctr(struct kdf_sdesc *sdesc, const u8 *src, unsigned int slen,
141 u8 *dst, unsigned int dlen) 147 u8 *dst, unsigned int dlen, unsigned int zlen)
142{ 148{
143 struct shash_desc *desc = &sdesc->shash; 149 struct shash_desc *desc = &sdesc->shash;
144 unsigned int h = crypto_shash_digestsize(desc->tfm); 150 unsigned int h = crypto_shash_digestsize(desc->tfm);
145 int err = 0; 151 int err = 0;
146 u8 *dst_orig = dst; 152 u8 *dst_orig = dst;
147 u32 i = 1; 153 __be32 counter = cpu_to_be32(1);
148 u8 iteration[sizeof(u32)];
149 154
150 while (dlen) { 155 while (dlen) {
151 err = crypto_shash_init(desc); 156 err = crypto_shash_init(desc);
152 if (err) 157 if (err)
153 goto err; 158 goto err;
154 159
155 crypto_kw_cpu_to_be32(i, iteration); 160 err = crypto_shash_update(desc, (u8 *)&counter, sizeof(__be32));
156 err = crypto_shash_update(desc, iteration, sizeof(u32));
157 if (err) 161 if (err)
158 goto err; 162 goto err;
159 163
164 if (zlen && h) {
165 u8 tmpbuffer[h];
166 size_t chunk = min_t(size_t, zlen, h);
167 memset(tmpbuffer, 0, chunk);
168
169 do {
170 err = crypto_shash_update(desc, tmpbuffer,
171 chunk);
172 if (err)
173 goto err;
174
175 zlen -= chunk;
176 chunk = min_t(size_t, zlen, h);
177 } while (zlen);
178 }
179
160 if (src && slen) { 180 if (src && slen) {
161 err = crypto_shash_update(desc, src, slen); 181 err = crypto_shash_update(desc, src, slen);
162 if (err) 182 if (err)
@@ -179,7 +199,7 @@ static int kdf_ctr(struct kdf_sdesc *sdesc, const u8 *src, unsigned int slen,
179 199
180 dlen -= h; 200 dlen -= h;
181 dst += h; 201 dst += h;
182 i++; 202 counter = cpu_to_be32(be32_to_cpu(counter) + 1);
183 } 203 }
184 } 204 }
185 205
@@ -192,7 +212,7 @@ err:
192 212
193static int keyctl_dh_compute_kdf(struct kdf_sdesc *sdesc, 213static int keyctl_dh_compute_kdf(struct kdf_sdesc *sdesc,
194 char __user *buffer, size_t buflen, 214 char __user *buffer, size_t buflen,
195 uint8_t *kbuf, size_t kbuflen) 215 uint8_t *kbuf, size_t kbuflen, size_t lzero)
196{ 216{
197 uint8_t *outbuf = NULL; 217 uint8_t *outbuf = NULL;
198 int ret; 218 int ret;
@@ -203,7 +223,7 @@ static int keyctl_dh_compute_kdf(struct kdf_sdesc *sdesc,
203 goto err; 223 goto err;
204 } 224 }
205 225
206 ret = kdf_ctr(sdesc, kbuf, kbuflen, outbuf, buflen); 226 ret = kdf_ctr(sdesc, kbuf, kbuflen, outbuf, buflen, lzero);
207 if (ret) 227 if (ret)
208 goto err; 228 goto err;
209 229
@@ -221,21 +241,26 @@ long __keyctl_dh_compute(struct keyctl_dh_params __user *params,
221 struct keyctl_kdf_params *kdfcopy) 241 struct keyctl_kdf_params *kdfcopy)
222{ 242{
223 long ret; 243 long ret;
224 MPI base, private, prime, result; 244 ssize_t dlen;
225 unsigned nbytes; 245 int secretlen;
246 int outlen;
226 struct keyctl_dh_params pcopy; 247 struct keyctl_dh_params pcopy;
227 uint8_t *kbuf; 248 struct dh dh_inputs;
228 ssize_t keylen; 249 struct scatterlist outsg;
229 size_t resultlen; 250 struct dh_completion compl;
251 struct crypto_kpp *tfm;
252 struct kpp_request *req;
253 uint8_t *secret;
254 uint8_t *outbuf;
230 struct kdf_sdesc *sdesc = NULL; 255 struct kdf_sdesc *sdesc = NULL;
231 256
232 if (!params || (!buffer && buflen)) { 257 if (!params || (!buffer && buflen)) {
233 ret = -EINVAL; 258 ret = -EINVAL;
234 goto out; 259 goto out1;
235 } 260 }
236 if (copy_from_user(&pcopy, params, sizeof(pcopy)) != 0) { 261 if (copy_from_user(&pcopy, params, sizeof(pcopy)) != 0) {
237 ret = -EFAULT; 262 ret = -EFAULT;
238 goto out; 263 goto out1;
239 } 264 }
240 265
241 if (kdfcopy) { 266 if (kdfcopy) {
@@ -244,104 +269,147 @@ long __keyctl_dh_compute(struct keyctl_dh_params __user *params,
244 if (buflen > KEYCTL_KDF_MAX_OUTPUT_LEN || 269 if (buflen > KEYCTL_KDF_MAX_OUTPUT_LEN ||
245 kdfcopy->otherinfolen > KEYCTL_KDF_MAX_OI_LEN) { 270 kdfcopy->otherinfolen > KEYCTL_KDF_MAX_OI_LEN) {
246 ret = -EMSGSIZE; 271 ret = -EMSGSIZE;
247 goto out; 272 goto out1;
248 } 273 }
249 274
250 /* get KDF name string */ 275 /* get KDF name string */
251 hashname = strndup_user(kdfcopy->hashname, CRYPTO_MAX_ALG_NAME); 276 hashname = strndup_user(kdfcopy->hashname, CRYPTO_MAX_ALG_NAME);
252 if (IS_ERR(hashname)) { 277 if (IS_ERR(hashname)) {
253 ret = PTR_ERR(hashname); 278 ret = PTR_ERR(hashname);
254 goto out; 279 goto out1;
255 } 280 }
256 281
257 /* allocate KDF from the kernel crypto API */ 282 /* allocate KDF from the kernel crypto API */
258 ret = kdf_alloc(&sdesc, hashname); 283 ret = kdf_alloc(&sdesc, hashname);
259 kfree(hashname); 284 kfree(hashname);
260 if (ret) 285 if (ret)
261 goto out; 286 goto out1;
262 } 287 }
263 288
264 /* 289 memset(&dh_inputs, 0, sizeof(dh_inputs));
265 * If the caller requests postprocessing with a KDF, allow an 290
266 * arbitrary output buffer size since the KDF ensures proper truncation. 291 dlen = dh_data_from_key(pcopy.prime, &dh_inputs.p);
267 */ 292 if (dlen < 0) {
268 keylen = mpi_from_key(pcopy.prime, kdfcopy ? SIZE_MAX : buflen, &prime); 293 ret = dlen;
269 if (keylen < 0 || !prime) { 294 goto out1;
270 /* buflen == 0 may be used to query the required buffer size, 295 }
271 * which is the prime key length. 296 dh_inputs.p_size = dlen;
272 */ 297
273 ret = keylen; 298 dlen = dh_data_from_key(pcopy.base, &dh_inputs.g);
274 goto out; 299 if (dlen < 0) {
300 ret = dlen;
301 goto out2;
275 } 302 }
303 dh_inputs.g_size = dlen;
276 304
277 /* The result is never longer than the prime */ 305 dlen = dh_data_from_key(pcopy.private, &dh_inputs.key);
278 resultlen = keylen; 306 if (dlen < 0) {
307 ret = dlen;
308 goto out2;
309 }
310 dh_inputs.key_size = dlen;
279 311
280 keylen = mpi_from_key(pcopy.base, SIZE_MAX, &base); 312 secretlen = crypto_dh_key_len(&dh_inputs);
281 if (keylen < 0 || !base) { 313 secret = kmalloc(secretlen, GFP_KERNEL);
282 ret = keylen; 314 if (!secret) {
283 goto error1; 315 ret = -ENOMEM;
316 goto out2;
284 } 317 }
318 ret = crypto_dh_encode_key(secret, secretlen, &dh_inputs);
319 if (ret)
320 goto out3;
285 321
286 keylen = mpi_from_key(pcopy.private, SIZE_MAX, &private); 322 tfm = crypto_alloc_kpp("dh", CRYPTO_ALG_TYPE_KPP, 0);
287 if (keylen < 0 || !private) { 323 if (IS_ERR(tfm)) {
288 ret = keylen; 324 ret = PTR_ERR(tfm);
289 goto error2; 325 goto out3;
326 }
327
328 ret = crypto_kpp_set_secret(tfm, secret, secretlen);
329 if (ret)
330 goto out4;
331
332 outlen = crypto_kpp_maxsize(tfm);
333
334 if (!kdfcopy) {
335 /*
336 * When not using a KDF, buflen 0 is used to read the
337 * required buffer length
338 */
339 if (buflen == 0) {
340 ret = outlen;
341 goto out4;
342 } else if (outlen > buflen) {
343 ret = -EOVERFLOW;
344 goto out4;
345 }
290 } 346 }
291 347
292 result = mpi_alloc(0); 348 outbuf = kzalloc(kdfcopy ? (outlen + kdfcopy->otherinfolen) : outlen,
293 if (!result) { 349 GFP_KERNEL);
350 if (!outbuf) {
294 ret = -ENOMEM; 351 ret = -ENOMEM;
295 goto error3; 352 goto out4;
296 } 353 }
297 354
298 /* allocate space for DH shared secret and SP800-56A otherinfo */ 355 sg_init_one(&outsg, outbuf, outlen);
299 kbuf = kmalloc(kdfcopy ? (resultlen + kdfcopy->otherinfolen) : resultlen, 356
300 GFP_KERNEL); 357 req = kpp_request_alloc(tfm, GFP_KERNEL);
301 if (!kbuf) { 358 if (!req) {
302 ret = -ENOMEM; 359 ret = -ENOMEM;
303 goto error4; 360 goto out5;
304 } 361 }
305 362
363 kpp_request_set_input(req, NULL, 0);
364 kpp_request_set_output(req, &outsg, outlen);
365 init_completion(&compl.completion);
366 kpp_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG |
367 CRYPTO_TFM_REQ_MAY_SLEEP,
368 dh_crypto_done, &compl);
369
306 /* 370 /*
307 * Concatenate SP800-56A otherinfo past DH shared secret -- the 371 * For DH, generate_public_key and generate_shared_secret are
308 * input to the KDF is (DH shared secret || otherinfo) 372 * the same calculation
309 */ 373 */
310 if (kdfcopy && kdfcopy->otherinfo && 374 ret = crypto_kpp_generate_public_key(req);
311 copy_from_user(kbuf + resultlen, kdfcopy->otherinfo, 375 if (ret == -EINPROGRESS) {
312 kdfcopy->otherinfolen) != 0) { 376 wait_for_completion(&compl.completion);
313 ret = -EFAULT; 377 ret = compl.err;
314 goto error5; 378 if (ret)
379 goto out6;
315 } 380 }
316 381
317 ret = do_dh(result, base, private, prime);
318 if (ret)
319 goto error5;
320
321 ret = mpi_read_buffer(result, kbuf, resultlen, &nbytes, NULL);
322 if (ret != 0)
323 goto error5;
324
325 if (kdfcopy) { 382 if (kdfcopy) {
326 ret = keyctl_dh_compute_kdf(sdesc, buffer, buflen, kbuf, 383 /*
327 resultlen + kdfcopy->otherinfolen); 384 * Concatenate SP800-56A otherinfo past DH shared secret -- the
328 } else { 385 * input to the KDF is (DH shared secret || otherinfo)
329 ret = nbytes; 386 */
330 if (copy_to_user(buffer, kbuf, nbytes) != 0) 387 if (copy_from_user(outbuf + req->dst_len, kdfcopy->otherinfo,
388 kdfcopy->otherinfolen) != 0) {
331 ret = -EFAULT; 389 ret = -EFAULT;
390 goto out6;
391 }
392
393 ret = keyctl_dh_compute_kdf(sdesc, buffer, buflen, outbuf,
394 req->dst_len + kdfcopy->otherinfolen,
395 outlen - req->dst_len);
396 } else if (copy_to_user(buffer, outbuf, req->dst_len) == 0) {
397 ret = req->dst_len;
398 } else {
399 ret = -EFAULT;
332 } 400 }
333 401
334error5: 402out6:
335 kzfree(kbuf); 403 kpp_request_free(req);
336error4: 404out5:
337 mpi_free(result); 405 kzfree(outbuf);
338error3: 406out4:
339 mpi_free(private); 407 crypto_free_kpp(tfm);
340error2: 408out3:
341 mpi_free(base); 409 kzfree(secret);
342error1: 410out2:
343 mpi_free(prime); 411 dh_free_data(&dh_inputs);
344out: 412out1:
345 kdf_dealloc(sdesc); 413 kdf_dealloc(sdesc);
346 return ret; 414 return ret;
347} 415}
diff --git a/security/keys/encrypted-keys/encrypted.c b/security/keys/encrypted-keys/encrypted.c
index 0010955d7876..bb6324d1ccec 100644
--- a/security/keys/encrypted-keys/encrypted.c
+++ b/security/keys/encrypted-keys/encrypted.c
@@ -30,6 +30,7 @@
30#include <linux/scatterlist.h> 30#include <linux/scatterlist.h>
31#include <linux/ctype.h> 31#include <linux/ctype.h>
32#include <crypto/aes.h> 32#include <crypto/aes.h>
33#include <crypto/algapi.h>
33#include <crypto/hash.h> 34#include <crypto/hash.h>
34#include <crypto/sha.h> 35#include <crypto/sha.h>
35#include <crypto/skcipher.h> 36#include <crypto/skcipher.h>
@@ -54,13 +55,7 @@ static int blksize;
54#define MAX_DATA_SIZE 4096 55#define MAX_DATA_SIZE 4096
55#define MIN_DATA_SIZE 20 56#define MIN_DATA_SIZE 20
56 57
57struct sdesc { 58static struct crypto_shash *hash_tfm;
58 struct shash_desc shash;
59 char ctx[];
60};
61
62static struct crypto_shash *hashalg;
63static struct crypto_shash *hmacalg;
64 59
65enum { 60enum {
66 Opt_err = -1, Opt_new, Opt_load, Opt_update 61 Opt_err = -1, Opt_new, Opt_load, Opt_update
@@ -141,23 +136,22 @@ static int valid_ecryptfs_desc(const char *ecryptfs_desc)
141 */ 136 */
142static int valid_master_desc(const char *new_desc, const char *orig_desc) 137static int valid_master_desc(const char *new_desc, const char *orig_desc)
143{ 138{
144 if (!memcmp(new_desc, KEY_TRUSTED_PREFIX, KEY_TRUSTED_PREFIX_LEN)) { 139 int prefix_len;
145 if (strlen(new_desc) == KEY_TRUSTED_PREFIX_LEN) 140
146 goto out; 141 if (!strncmp(new_desc, KEY_TRUSTED_PREFIX, KEY_TRUSTED_PREFIX_LEN))
147 if (orig_desc) 142 prefix_len = KEY_TRUSTED_PREFIX_LEN;
148 if (memcmp(new_desc, orig_desc, KEY_TRUSTED_PREFIX_LEN)) 143 else if (!strncmp(new_desc, KEY_USER_PREFIX, KEY_USER_PREFIX_LEN))
149 goto out; 144 prefix_len = KEY_USER_PREFIX_LEN;
150 } else if (!memcmp(new_desc, KEY_USER_PREFIX, KEY_USER_PREFIX_LEN)) { 145 else
151 if (strlen(new_desc) == KEY_USER_PREFIX_LEN) 146 return -EINVAL;
152 goto out; 147
153 if (orig_desc) 148 if (!new_desc[prefix_len])
154 if (memcmp(new_desc, orig_desc, KEY_USER_PREFIX_LEN)) 149 return -EINVAL;
155 goto out; 150
156 } else 151 if (orig_desc && strncmp(new_desc, orig_desc, prefix_len))
157 goto out; 152 return -EINVAL;
153
158 return 0; 154 return 0;
159out:
160 return -EINVAL;
161} 155}
162 156
163/* 157/*
@@ -321,53 +315,38 @@ error:
321 return ukey; 315 return ukey;
322} 316}
323 317
324static struct sdesc *alloc_sdesc(struct crypto_shash *alg) 318static int calc_hash(struct crypto_shash *tfm, u8 *digest,
325{
326 struct sdesc *sdesc;
327 int size;
328
329 size = sizeof(struct shash_desc) + crypto_shash_descsize(alg);
330 sdesc = kmalloc(size, GFP_KERNEL);
331 if (!sdesc)
332 return ERR_PTR(-ENOMEM);
333 sdesc->shash.tfm = alg;
334 sdesc->shash.flags = 0x0;
335 return sdesc;
336}
337
338static int calc_hmac(u8 *digest, const u8 *key, unsigned int keylen,
339 const u8 *buf, unsigned int buflen) 319 const u8 *buf, unsigned int buflen)
340{ 320{
341 struct sdesc *sdesc; 321 SHASH_DESC_ON_STACK(desc, tfm);
342 int ret; 322 int err;
343 323
344 sdesc = alloc_sdesc(hmacalg); 324 desc->tfm = tfm;
345 if (IS_ERR(sdesc)) { 325 desc->flags = 0;
346 pr_info("encrypted_key: can't alloc %s\n", hmac_alg);
347 return PTR_ERR(sdesc);
348 }
349 326
350 ret = crypto_shash_setkey(hmacalg, key, keylen); 327 err = crypto_shash_digest(desc, buf, buflen, digest);
351 if (!ret) 328 shash_desc_zero(desc);
352 ret = crypto_shash_digest(&sdesc->shash, buf, buflen, digest); 329 return err;
353 kfree(sdesc);
354 return ret;
355} 330}
356 331
357static int calc_hash(u8 *digest, const u8 *buf, unsigned int buflen) 332static int calc_hmac(u8 *digest, const u8 *key, unsigned int keylen,
333 const u8 *buf, unsigned int buflen)
358{ 334{
359 struct sdesc *sdesc; 335 struct crypto_shash *tfm;
360 int ret; 336 int err;
361 337
362 sdesc = alloc_sdesc(hashalg); 338 tfm = crypto_alloc_shash(hmac_alg, 0, CRYPTO_ALG_ASYNC);
363 if (IS_ERR(sdesc)) { 339 if (IS_ERR(tfm)) {
364 pr_info("encrypted_key: can't alloc %s\n", hash_alg); 340 pr_err("encrypted_key: can't alloc %s transform: %ld\n",
365 return PTR_ERR(sdesc); 341 hmac_alg, PTR_ERR(tfm));
342 return PTR_ERR(tfm);
366 } 343 }
367 344
368 ret = crypto_shash_digest(&sdesc->shash, buf, buflen, digest); 345 err = crypto_shash_setkey(tfm, key, keylen);
369 kfree(sdesc); 346 if (!err)
370 return ret; 347 err = calc_hash(tfm, digest, buf, buflen);
348 crypto_free_shash(tfm);
349 return err;
371} 350}
372 351
373enum derived_key_type { ENC_KEY, AUTH_KEY }; 352enum derived_key_type { ENC_KEY, AUTH_KEY };
@@ -385,10 +364,9 @@ static int get_derived_key(u8 *derived_key, enum derived_key_type key_type,
385 derived_buf_len = HASH_SIZE; 364 derived_buf_len = HASH_SIZE;
386 365
387 derived_buf = kzalloc(derived_buf_len, GFP_KERNEL); 366 derived_buf = kzalloc(derived_buf_len, GFP_KERNEL);
388 if (!derived_buf) { 367 if (!derived_buf)
389 pr_err("encrypted_key: out of memory\n");
390 return -ENOMEM; 368 return -ENOMEM;
391 } 369
392 if (key_type) 370 if (key_type)
393 strcpy(derived_buf, "AUTH_KEY"); 371 strcpy(derived_buf, "AUTH_KEY");
394 else 372 else
@@ -396,8 +374,8 @@ static int get_derived_key(u8 *derived_key, enum derived_key_type key_type,
396 374
397 memcpy(derived_buf + strlen(derived_buf) + 1, master_key, 375 memcpy(derived_buf + strlen(derived_buf) + 1, master_key,
398 master_keylen); 376 master_keylen);
399 ret = calc_hash(derived_key, derived_buf, derived_buf_len); 377 ret = calc_hash(hash_tfm, derived_key, derived_buf, derived_buf_len);
400 kfree(derived_buf); 378 kzfree(derived_buf);
401 return ret; 379 return ret;
402} 380}
403 381
@@ -480,12 +458,9 @@ static int derived_key_encrypt(struct encrypted_key_payload *epayload,
480 struct skcipher_request *req; 458 struct skcipher_request *req;
481 unsigned int encrypted_datalen; 459 unsigned int encrypted_datalen;
482 u8 iv[AES_BLOCK_SIZE]; 460 u8 iv[AES_BLOCK_SIZE];
483 unsigned int padlen;
484 char pad[16];
485 int ret; 461 int ret;
486 462
487 encrypted_datalen = roundup(epayload->decrypted_datalen, blksize); 463 encrypted_datalen = roundup(epayload->decrypted_datalen, blksize);
488 padlen = encrypted_datalen - epayload->decrypted_datalen;
489 464
490 req = init_skcipher_req(derived_key, derived_keylen); 465 req = init_skcipher_req(derived_key, derived_keylen);
491 ret = PTR_ERR(req); 466 ret = PTR_ERR(req);
@@ -493,11 +468,10 @@ static int derived_key_encrypt(struct encrypted_key_payload *epayload,
493 goto out; 468 goto out;
494 dump_decrypted_data(epayload); 469 dump_decrypted_data(epayload);
495 470
496 memset(pad, 0, sizeof pad);
497 sg_init_table(sg_in, 2); 471 sg_init_table(sg_in, 2);
498 sg_set_buf(&sg_in[0], epayload->decrypted_data, 472 sg_set_buf(&sg_in[0], epayload->decrypted_data,
499 epayload->decrypted_datalen); 473 epayload->decrypted_datalen);
500 sg_set_buf(&sg_in[1], pad, padlen); 474 sg_set_page(&sg_in[1], ZERO_PAGE(0), AES_BLOCK_SIZE, 0);
501 475
502 sg_init_table(sg_out, 1); 476 sg_init_table(sg_out, 1);
503 sg_set_buf(sg_out, epayload->encrypted_data, encrypted_datalen); 477 sg_set_buf(sg_out, epayload->encrypted_data, encrypted_datalen);
@@ -533,6 +507,7 @@ static int datablob_hmac_append(struct encrypted_key_payload *epayload,
533 if (!ret) 507 if (!ret)
534 dump_hmac(NULL, digest, HASH_SIZE); 508 dump_hmac(NULL, digest, HASH_SIZE);
535out: 509out:
510 memzero_explicit(derived_key, sizeof(derived_key));
536 return ret; 511 return ret;
537} 512}
538 513
@@ -561,8 +536,8 @@ static int datablob_hmac_verify(struct encrypted_key_payload *epayload,
561 ret = calc_hmac(digest, derived_key, sizeof derived_key, p, len); 536 ret = calc_hmac(digest, derived_key, sizeof derived_key, p, len);
562 if (ret < 0) 537 if (ret < 0)
563 goto out; 538 goto out;
564 ret = memcmp(digest, epayload->format + epayload->datablob_len, 539 ret = crypto_memneq(digest, epayload->format + epayload->datablob_len,
565 sizeof digest); 540 sizeof(digest));
566 if (ret) { 541 if (ret) {
567 ret = -EINVAL; 542 ret = -EINVAL;
568 dump_hmac("datablob", 543 dump_hmac("datablob",
@@ -571,6 +546,7 @@ static int datablob_hmac_verify(struct encrypted_key_payload *epayload,
571 dump_hmac("calc", digest, HASH_SIZE); 546 dump_hmac("calc", digest, HASH_SIZE);
572 } 547 }
573out: 548out:
549 memzero_explicit(derived_key, sizeof(derived_key));
574 return ret; 550 return ret;
575} 551}
576 552
@@ -584,9 +560,14 @@ static int derived_key_decrypt(struct encrypted_key_payload *epayload,
584 struct skcipher_request *req; 560 struct skcipher_request *req;
585 unsigned int encrypted_datalen; 561 unsigned int encrypted_datalen;
586 u8 iv[AES_BLOCK_SIZE]; 562 u8 iv[AES_BLOCK_SIZE];
587 char pad[16]; 563 u8 *pad;
588 int ret; 564 int ret;
589 565
566 /* Throwaway buffer to hold the unused zero padding at the end */
567 pad = kmalloc(AES_BLOCK_SIZE, GFP_KERNEL);
568 if (!pad)
569 return -ENOMEM;
570
590 encrypted_datalen = roundup(epayload->decrypted_datalen, blksize); 571 encrypted_datalen = roundup(epayload->decrypted_datalen, blksize);
591 req = init_skcipher_req(derived_key, derived_keylen); 572 req = init_skcipher_req(derived_key, derived_keylen);
592 ret = PTR_ERR(req); 573 ret = PTR_ERR(req);
@@ -594,13 +575,12 @@ static int derived_key_decrypt(struct encrypted_key_payload *epayload,
594 goto out; 575 goto out;
595 dump_encrypted_data(epayload, encrypted_datalen); 576 dump_encrypted_data(epayload, encrypted_datalen);
596 577
597 memset(pad, 0, sizeof pad);
598 sg_init_table(sg_in, 1); 578 sg_init_table(sg_in, 1);
599 sg_init_table(sg_out, 2); 579 sg_init_table(sg_out, 2);
600 sg_set_buf(sg_in, epayload->encrypted_data, encrypted_datalen); 580 sg_set_buf(sg_in, epayload->encrypted_data, encrypted_datalen);
601 sg_set_buf(&sg_out[0], epayload->decrypted_data, 581 sg_set_buf(&sg_out[0], epayload->decrypted_data,
602 epayload->decrypted_datalen); 582 epayload->decrypted_datalen);
603 sg_set_buf(&sg_out[1], pad, sizeof pad); 583 sg_set_buf(&sg_out[1], pad, AES_BLOCK_SIZE);
604 584
605 memcpy(iv, epayload->iv, sizeof(iv)); 585 memcpy(iv, epayload->iv, sizeof(iv));
606 skcipher_request_set_crypt(req, sg_in, sg_out, encrypted_datalen, iv); 586 skcipher_request_set_crypt(req, sg_in, sg_out, encrypted_datalen, iv);
@@ -612,6 +592,7 @@ static int derived_key_decrypt(struct encrypted_key_payload *epayload,
612 goto out; 592 goto out;
613 dump_decrypted_data(epayload); 593 dump_decrypted_data(epayload);
614out: 594out:
595 kfree(pad);
615 return ret; 596 return ret;
616} 597}
617 598
@@ -722,6 +703,7 @@ static int encrypted_key_decrypt(struct encrypted_key_payload *epayload,
722out: 703out:
723 up_read(&mkey->sem); 704 up_read(&mkey->sem);
724 key_put(mkey); 705 key_put(mkey);
706 memzero_explicit(derived_key, sizeof(derived_key));
725 return ret; 707 return ret;
726} 708}
727 709
@@ -828,13 +810,13 @@ static int encrypted_instantiate(struct key *key,
828 ret = encrypted_init(epayload, key->description, format, master_desc, 810 ret = encrypted_init(epayload, key->description, format, master_desc,
829 decrypted_datalen, hex_encoded_iv); 811 decrypted_datalen, hex_encoded_iv);
830 if (ret < 0) { 812 if (ret < 0) {
831 kfree(epayload); 813 kzfree(epayload);
832 goto out; 814 goto out;
833 } 815 }
834 816
835 rcu_assign_keypointer(key, epayload); 817 rcu_assign_keypointer(key, epayload);
836out: 818out:
837 kfree(datablob); 819 kzfree(datablob);
838 return ret; 820 return ret;
839} 821}
840 822
@@ -843,8 +825,7 @@ static void encrypted_rcu_free(struct rcu_head *rcu)
843 struct encrypted_key_payload *epayload; 825 struct encrypted_key_payload *epayload;
844 826
845 epayload = container_of(rcu, struct encrypted_key_payload, rcu); 827 epayload = container_of(rcu, struct encrypted_key_payload, rcu);
846 memset(epayload->decrypted_data, 0, epayload->decrypted_datalen); 828 kzfree(epayload);
847 kfree(epayload);
848} 829}
849 830
850/* 831/*
@@ -902,7 +883,7 @@ static int encrypted_update(struct key *key, struct key_preparsed_payload *prep)
902 rcu_assign_keypointer(key, new_epayload); 883 rcu_assign_keypointer(key, new_epayload);
903 call_rcu(&epayload->rcu, encrypted_rcu_free); 884 call_rcu(&epayload->rcu, encrypted_rcu_free);
904out: 885out:
905 kfree(buf); 886 kzfree(buf);
906 return ret; 887 return ret;
907} 888}
908 889
@@ -960,33 +941,26 @@ static long encrypted_read(const struct key *key, char __user *buffer,
960 941
961 up_read(&mkey->sem); 942 up_read(&mkey->sem);
962 key_put(mkey); 943 key_put(mkey);
944 memzero_explicit(derived_key, sizeof(derived_key));
963 945
964 if (copy_to_user(buffer, ascii_buf, asciiblob_len) != 0) 946 if (copy_to_user(buffer, ascii_buf, asciiblob_len) != 0)
965 ret = -EFAULT; 947 ret = -EFAULT;
966 kfree(ascii_buf); 948 kzfree(ascii_buf);
967 949
968 return asciiblob_len; 950 return asciiblob_len;
969out: 951out:
970 up_read(&mkey->sem); 952 up_read(&mkey->sem);
971 key_put(mkey); 953 key_put(mkey);
954 memzero_explicit(derived_key, sizeof(derived_key));
972 return ret; 955 return ret;
973} 956}
974 957
975/* 958/*
976 * encrypted_destroy - before freeing the key, clear the decrypted data 959 * encrypted_destroy - clear and free the key's payload
977 *
978 * Before freeing the key, clear the memory containing the decrypted
979 * key data.
980 */ 960 */
981static void encrypted_destroy(struct key *key) 961static void encrypted_destroy(struct key *key)
982{ 962{
983 struct encrypted_key_payload *epayload = key->payload.data[0]; 963 kzfree(key->payload.data[0]);
984
985 if (!epayload)
986 return;
987
988 memzero_explicit(epayload->decrypted_data, epayload->decrypted_datalen);
989 kfree(key->payload.data[0]);
990} 964}
991 965
992struct key_type key_type_encrypted = { 966struct key_type key_type_encrypted = {
@@ -999,47 +973,17 @@ struct key_type key_type_encrypted = {
999}; 973};
1000EXPORT_SYMBOL_GPL(key_type_encrypted); 974EXPORT_SYMBOL_GPL(key_type_encrypted);
1001 975
1002static void encrypted_shash_release(void) 976static int __init init_encrypted(void)
1003{
1004 if (hashalg)
1005 crypto_free_shash(hashalg);
1006 if (hmacalg)
1007 crypto_free_shash(hmacalg);
1008}
1009
1010static int __init encrypted_shash_alloc(void)
1011{ 977{
1012 int ret; 978 int ret;
1013 979
1014 hmacalg = crypto_alloc_shash(hmac_alg, 0, CRYPTO_ALG_ASYNC); 980 hash_tfm = crypto_alloc_shash(hash_alg, 0, CRYPTO_ALG_ASYNC);
1015 if (IS_ERR(hmacalg)) { 981 if (IS_ERR(hash_tfm)) {
1016 pr_info("encrypted_key: could not allocate crypto %s\n", 982 pr_err("encrypted_key: can't allocate %s transform: %ld\n",
1017 hmac_alg); 983 hash_alg, PTR_ERR(hash_tfm));
1018 return PTR_ERR(hmacalg); 984 return PTR_ERR(hash_tfm);
1019 }
1020
1021 hashalg = crypto_alloc_shash(hash_alg, 0, CRYPTO_ALG_ASYNC);
1022 if (IS_ERR(hashalg)) {
1023 pr_info("encrypted_key: could not allocate crypto %s\n",
1024 hash_alg);
1025 ret = PTR_ERR(hashalg);
1026 goto hashalg_fail;
1027 } 985 }
1028 986
1029 return 0;
1030
1031hashalg_fail:
1032 crypto_free_shash(hmacalg);
1033 return ret;
1034}
1035
1036static int __init init_encrypted(void)
1037{
1038 int ret;
1039
1040 ret = encrypted_shash_alloc();
1041 if (ret < 0)
1042 return ret;
1043 ret = aes_get_sizes(); 987 ret = aes_get_sizes();
1044 if (ret < 0) 988 if (ret < 0)
1045 goto out; 989 goto out;
@@ -1048,14 +992,14 @@ static int __init init_encrypted(void)
1048 goto out; 992 goto out;
1049 return 0; 993 return 0;
1050out: 994out:
1051 encrypted_shash_release(); 995 crypto_free_shash(hash_tfm);
1052 return ret; 996 return ret;
1053 997
1054} 998}
1055 999
1056static void __exit cleanup_encrypted(void) 1000static void __exit cleanup_encrypted(void)
1057{ 1001{
1058 encrypted_shash_release(); 1002 crypto_free_shash(hash_tfm);
1059 unregister_key_type(&key_type_encrypted); 1003 unregister_key_type(&key_type_encrypted);
1060} 1004}
1061 1005
diff --git a/security/keys/gc.c b/security/keys/gc.c
index 595becc6d0d2..87cb260e4890 100644
--- a/security/keys/gc.c
+++ b/security/keys/gc.c
@@ -158,9 +158,7 @@ static noinline void key_gc_unused_keys(struct list_head *keys)
158 158
159 kfree(key->description); 159 kfree(key->description);
160 160
161#ifdef KEY_DEBUGGING 161 memzero_explicit(key, sizeof(*key));
162 key->magic = KEY_DEBUG_MAGIC_X;
163#endif
164 kmem_cache_free(key_jar, key); 162 kmem_cache_free(key_jar, key);
165 } 163 }
166} 164}
diff --git a/security/keys/key.c b/security/keys/key.c
index 455c04d80bbb..83da68d98b40 100644
--- a/security/keys/key.c
+++ b/security/keys/key.c
@@ -660,14 +660,11 @@ not_found:
660 goto error; 660 goto error;
661 661
662found: 662found:
663 /* pretend it doesn't exist if it is awaiting deletion */ 663 /* A key is allowed to be looked up only if someone still owns a
664 if (refcount_read(&key->usage) == 0) 664 * reference to it - otherwise it's awaiting the gc.
665 goto not_found;
666
667 /* this races with key_put(), but that doesn't matter since key_put()
668 * doesn't actually change the key
669 */ 665 */
670 __key_get(key); 666 if (!refcount_inc_not_zero(&key->usage))
667 goto not_found;
671 668
672error: 669error:
673 spin_unlock(&key_serial_lock); 670 spin_unlock(&key_serial_lock);
@@ -966,12 +963,11 @@ int key_update(key_ref_t key_ref, const void *payload, size_t plen)
966 /* the key must be writable */ 963 /* the key must be writable */
967 ret = key_permission(key_ref, KEY_NEED_WRITE); 964 ret = key_permission(key_ref, KEY_NEED_WRITE);
968 if (ret < 0) 965 if (ret < 0)
969 goto error; 966 return ret;
970 967
971 /* attempt to update it if supported */ 968 /* attempt to update it if supported */
972 ret = -EOPNOTSUPP;
973 if (!key->type->update) 969 if (!key->type->update)
974 goto error; 970 return -EOPNOTSUPP;
975 971
976 memset(&prep, 0, sizeof(prep)); 972 memset(&prep, 0, sizeof(prep));
977 prep.data = payload; 973 prep.data = payload;
diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
index 447a7d5cee0f..ab0b337c84b4 100644
--- a/security/keys/keyctl.c
+++ b/security/keys/keyctl.c
@@ -99,7 +99,7 @@ SYSCALL_DEFINE5(add_key, const char __user *, _type,
99 /* pull the payload in if one was supplied */ 99 /* pull the payload in if one was supplied */
100 payload = NULL; 100 payload = NULL;
101 101
102 if (_payload) { 102 if (plen) {
103 ret = -ENOMEM; 103 ret = -ENOMEM;
104 payload = kvmalloc(plen, GFP_KERNEL); 104 payload = kvmalloc(plen, GFP_KERNEL);
105 if (!payload) 105 if (!payload)
@@ -132,7 +132,10 @@ SYSCALL_DEFINE5(add_key, const char __user *, _type,
132 132
133 key_ref_put(keyring_ref); 133 key_ref_put(keyring_ref);
134 error3: 134 error3:
135 kvfree(payload); 135 if (payload) {
136 memzero_explicit(payload, plen);
137 kvfree(payload);
138 }
136 error2: 139 error2:
137 kfree(description); 140 kfree(description);
138 error: 141 error:
@@ -324,7 +327,7 @@ long keyctl_update_key(key_serial_t id,
324 327
325 /* pull the payload in if one was supplied */ 328 /* pull the payload in if one was supplied */
326 payload = NULL; 329 payload = NULL;
327 if (_payload) { 330 if (plen) {
328 ret = -ENOMEM; 331 ret = -ENOMEM;
329 payload = kmalloc(plen, GFP_KERNEL); 332 payload = kmalloc(plen, GFP_KERNEL);
330 if (!payload) 333 if (!payload)
@@ -347,7 +350,7 @@ long keyctl_update_key(key_serial_t id,
347 350
348 key_ref_put(key_ref); 351 key_ref_put(key_ref);
349error2: 352error2:
350 kfree(payload); 353 kzfree(payload);
351error: 354error:
352 return ret; 355 return ret;
353} 356}
@@ -1093,7 +1096,10 @@ long keyctl_instantiate_key_common(key_serial_t id,
1093 keyctl_change_reqkey_auth(NULL); 1096 keyctl_change_reqkey_auth(NULL);
1094 1097
1095error2: 1098error2:
1096 kvfree(payload); 1099 if (payload) {
1100 memzero_explicit(payload, plen);
1101 kvfree(payload);
1102 }
1097error: 1103error:
1098 return ret; 1104 return ret;
1099} 1105}
diff --git a/security/keys/keyring.c b/security/keys/keyring.c
index 4d1678e4586f..de81793f9920 100644
--- a/security/keys/keyring.c
+++ b/security/keys/keyring.c
@@ -706,7 +706,7 @@ descend_to_keyring:
706 * Non-keyrings avoid the leftmost branch of the root entirely (root 706 * Non-keyrings avoid the leftmost branch of the root entirely (root
707 * slots 1-15). 707 * slots 1-15).
708 */ 708 */
709 ptr = ACCESS_ONCE(keyring->keys.root); 709 ptr = READ_ONCE(keyring->keys.root);
710 if (!ptr) 710 if (!ptr)
711 goto not_this_keyring; 711 goto not_this_keyring;
712 712
@@ -720,7 +720,7 @@ descend_to_keyring:
720 if ((shortcut->index_key[0] & ASSOC_ARRAY_FAN_MASK) != 0) 720 if ((shortcut->index_key[0] & ASSOC_ARRAY_FAN_MASK) != 0)
721 goto not_this_keyring; 721 goto not_this_keyring;
722 722
723 ptr = ACCESS_ONCE(shortcut->next_node); 723 ptr = READ_ONCE(shortcut->next_node);
724 node = assoc_array_ptr_to_node(ptr); 724 node = assoc_array_ptr_to_node(ptr);
725 goto begin_node; 725 goto begin_node;
726 } 726 }
@@ -740,7 +740,7 @@ descend_to_node:
740 if (assoc_array_ptr_is_shortcut(ptr)) { 740 if (assoc_array_ptr_is_shortcut(ptr)) {
741 shortcut = assoc_array_ptr_to_shortcut(ptr); 741 shortcut = assoc_array_ptr_to_shortcut(ptr);
742 smp_read_barrier_depends(); 742 smp_read_barrier_depends();
743 ptr = ACCESS_ONCE(shortcut->next_node); 743 ptr = READ_ONCE(shortcut->next_node);
744 BUG_ON(!assoc_array_ptr_is_node(ptr)); 744 BUG_ON(!assoc_array_ptr_is_node(ptr));
745 } 745 }
746 node = assoc_array_ptr_to_node(ptr); 746 node = assoc_array_ptr_to_node(ptr);
@@ -752,7 +752,7 @@ begin_node:
752ascend_to_node: 752ascend_to_node:
753 /* Go through the slots in a node */ 753 /* Go through the slots in a node */
754 for (; slot < ASSOC_ARRAY_FAN_OUT; slot++) { 754 for (; slot < ASSOC_ARRAY_FAN_OUT; slot++) {
755 ptr = ACCESS_ONCE(node->slots[slot]); 755 ptr = READ_ONCE(node->slots[slot]);
756 756
757 if (assoc_array_ptr_is_meta(ptr) && node->back_pointer) 757 if (assoc_array_ptr_is_meta(ptr) && node->back_pointer)
758 goto descend_to_node; 758 goto descend_to_node;
@@ -790,13 +790,13 @@ ascend_to_node:
790 /* We've dealt with all the slots in the current node, so now we need 790 /* We've dealt with all the slots in the current node, so now we need
791 * to ascend to the parent and continue processing there. 791 * to ascend to the parent and continue processing there.
792 */ 792 */
793 ptr = ACCESS_ONCE(node->back_pointer); 793 ptr = READ_ONCE(node->back_pointer);
794 slot = node->parent_slot; 794 slot = node->parent_slot;
795 795
796 if (ptr && assoc_array_ptr_is_shortcut(ptr)) { 796 if (ptr && assoc_array_ptr_is_shortcut(ptr)) {
797 shortcut = assoc_array_ptr_to_shortcut(ptr); 797 shortcut = assoc_array_ptr_to_shortcut(ptr);
798 smp_read_barrier_depends(); 798 smp_read_barrier_depends();
799 ptr = ACCESS_ONCE(shortcut->back_pointer); 799 ptr = READ_ONCE(shortcut->back_pointer);
800 slot = shortcut->parent_slot; 800 slot = shortcut->parent_slot;
801 } 801 }
802 if (!ptr) 802 if (!ptr)
diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c
index 2217dfec7996..86bced9fdbdf 100644
--- a/security/keys/process_keys.c
+++ b/security/keys/process_keys.c
@@ -809,15 +809,14 @@ long join_session_keyring(const char *name)
809 ret = PTR_ERR(keyring); 809 ret = PTR_ERR(keyring);
810 goto error2; 810 goto error2;
811 } else if (keyring == new->session_keyring) { 811 } else if (keyring == new->session_keyring) {
812 key_put(keyring);
813 ret = 0; 812 ret = 0;
814 goto error2; 813 goto error3;
815 } 814 }
816 815
817 /* we've got a keyring - now to install it */ 816 /* we've got a keyring - now to install it */
818 ret = install_session_keyring_to_cred(new, keyring); 817 ret = install_session_keyring_to_cred(new, keyring);
819 if (ret < 0) 818 if (ret < 0)
820 goto error2; 819 goto error3;
821 820
822 commit_creds(new); 821 commit_creds(new);
823 mutex_unlock(&key_session_mutex); 822 mutex_unlock(&key_session_mutex);
@@ -827,6 +826,8 @@ long join_session_keyring(const char *name)
827okay: 826okay:
828 return ret; 827 return ret;
829 828
829error3:
830 key_put(keyring);
830error2: 831error2:
831 mutex_unlock(&key_session_mutex); 832 mutex_unlock(&key_session_mutex);
832error: 833error:
diff --git a/security/keys/trusted.c b/security/keys/trusted.c
index 2ae31c5a87de..435e86e13879 100644
--- a/security/keys/trusted.c
+++ b/security/keys/trusted.c
@@ -70,7 +70,7 @@ static int TSS_sha1(const unsigned char *data, unsigned int datalen,
70 } 70 }
71 71
72 ret = crypto_shash_digest(&sdesc->shash, data, datalen, digest); 72 ret = crypto_shash_digest(&sdesc->shash, data, datalen, digest);
73 kfree(sdesc); 73 kzfree(sdesc);
74 return ret; 74 return ret;
75} 75}
76 76
@@ -114,7 +114,7 @@ static int TSS_rawhmac(unsigned char *digest, const unsigned char *key,
114 if (!ret) 114 if (!ret)
115 ret = crypto_shash_final(&sdesc->shash, digest); 115 ret = crypto_shash_final(&sdesc->shash, digest);
116out: 116out:
117 kfree(sdesc); 117 kzfree(sdesc);
118 return ret; 118 return ret;
119} 119}
120 120
@@ -165,7 +165,7 @@ static int TSS_authhmac(unsigned char *digest, const unsigned char *key,
165 paramdigest, TPM_NONCE_SIZE, h1, 165 paramdigest, TPM_NONCE_SIZE, h1,
166 TPM_NONCE_SIZE, h2, 1, &c, 0, 0); 166 TPM_NONCE_SIZE, h2, 1, &c, 0, 0);
167out: 167out:
168 kfree(sdesc); 168 kzfree(sdesc);
169 return ret; 169 return ret;
170} 170}
171 171
@@ -246,7 +246,7 @@ static int TSS_checkhmac1(unsigned char *buffer,
246 if (memcmp(testhmac, authdata, SHA1_DIGEST_SIZE)) 246 if (memcmp(testhmac, authdata, SHA1_DIGEST_SIZE))
247 ret = -EINVAL; 247 ret = -EINVAL;
248out: 248out:
249 kfree(sdesc); 249 kzfree(sdesc);
250 return ret; 250 return ret;
251} 251}
252 252
@@ -347,7 +347,7 @@ static int TSS_checkhmac2(unsigned char *buffer,
347 if (memcmp(testhmac2, authdata2, SHA1_DIGEST_SIZE)) 347 if (memcmp(testhmac2, authdata2, SHA1_DIGEST_SIZE))
348 ret = -EINVAL; 348 ret = -EINVAL;
349out: 349out:
350 kfree(sdesc); 350 kzfree(sdesc);
351 return ret; 351 return ret;
352} 352}
353 353
@@ -564,7 +564,7 @@ static int tpm_seal(struct tpm_buf *tb, uint16_t keytype,
564 *bloblen = storedsize; 564 *bloblen = storedsize;
565 } 565 }
566out: 566out:
567 kfree(td); 567 kzfree(td);
568 return ret; 568 return ret;
569} 569}
570 570
@@ -678,7 +678,7 @@ static int key_seal(struct trusted_key_payload *p,
678 if (ret < 0) 678 if (ret < 0)
679 pr_info("trusted_key: srkseal failed (%d)\n", ret); 679 pr_info("trusted_key: srkseal failed (%d)\n", ret);
680 680
681 kfree(tb); 681 kzfree(tb);
682 return ret; 682 return ret;
683} 683}
684 684
@@ -703,7 +703,7 @@ static int key_unseal(struct trusted_key_payload *p,
703 /* pull migratable flag out of sealed key */ 703 /* pull migratable flag out of sealed key */
704 p->migratable = p->key[--p->key_len]; 704 p->migratable = p->key[--p->key_len];
705 705
706 kfree(tb); 706 kzfree(tb);
707 return ret; 707 return ret;
708} 708}
709 709
@@ -1037,12 +1037,12 @@ static int trusted_instantiate(struct key *key,
1037 if (!ret && options->pcrlock) 1037 if (!ret && options->pcrlock)
1038 ret = pcrlock(options->pcrlock); 1038 ret = pcrlock(options->pcrlock);
1039out: 1039out:
1040 kfree(datablob); 1040 kzfree(datablob);
1041 kfree(options); 1041 kzfree(options);
1042 if (!ret) 1042 if (!ret)
1043 rcu_assign_keypointer(key, payload); 1043 rcu_assign_keypointer(key, payload);
1044 else 1044 else
1045 kfree(payload); 1045 kzfree(payload);
1046 return ret; 1046 return ret;
1047} 1047}
1048 1048
@@ -1051,8 +1051,7 @@ static void trusted_rcu_free(struct rcu_head *rcu)
1051 struct trusted_key_payload *p; 1051 struct trusted_key_payload *p;
1052 1052
1053 p = container_of(rcu, struct trusted_key_payload, rcu); 1053 p = container_of(rcu, struct trusted_key_payload, rcu);
1054 memset(p->key, 0, p->key_len); 1054 kzfree(p);
1055 kfree(p);
1056} 1055}
1057 1056
1058/* 1057/*
@@ -1094,13 +1093,13 @@ static int trusted_update(struct key *key, struct key_preparsed_payload *prep)
1094 ret = datablob_parse(datablob, new_p, new_o); 1093 ret = datablob_parse(datablob, new_p, new_o);
1095 if (ret != Opt_update) { 1094 if (ret != Opt_update) {
1096 ret = -EINVAL; 1095 ret = -EINVAL;
1097 kfree(new_p); 1096 kzfree(new_p);
1098 goto out; 1097 goto out;
1099 } 1098 }
1100 1099
1101 if (!new_o->keyhandle) { 1100 if (!new_o->keyhandle) {
1102 ret = -EINVAL; 1101 ret = -EINVAL;
1103 kfree(new_p); 1102 kzfree(new_p);
1104 goto out; 1103 goto out;
1105 } 1104 }
1106 1105
@@ -1114,22 +1113,22 @@ static int trusted_update(struct key *key, struct key_preparsed_payload *prep)
1114 ret = key_seal(new_p, new_o); 1113 ret = key_seal(new_p, new_o);
1115 if (ret < 0) { 1114 if (ret < 0) {
1116 pr_info("trusted_key: key_seal failed (%d)\n", ret); 1115 pr_info("trusted_key: key_seal failed (%d)\n", ret);
1117 kfree(new_p); 1116 kzfree(new_p);
1118 goto out; 1117 goto out;
1119 } 1118 }
1120 if (new_o->pcrlock) { 1119 if (new_o->pcrlock) {
1121 ret = pcrlock(new_o->pcrlock); 1120 ret = pcrlock(new_o->pcrlock);
1122 if (ret < 0) { 1121 if (ret < 0) {
1123 pr_info("trusted_key: pcrlock failed (%d)\n", ret); 1122 pr_info("trusted_key: pcrlock failed (%d)\n", ret);
1124 kfree(new_p); 1123 kzfree(new_p);
1125 goto out; 1124 goto out;
1126 } 1125 }
1127 } 1126 }
1128 rcu_assign_keypointer(key, new_p); 1127 rcu_assign_keypointer(key, new_p);
1129 call_rcu(&p->rcu, trusted_rcu_free); 1128 call_rcu(&p->rcu, trusted_rcu_free);
1130out: 1129out:
1131 kfree(datablob); 1130 kzfree(datablob);
1132 kfree(new_o); 1131 kzfree(new_o);
1133 return ret; 1132 return ret;
1134} 1133}
1135 1134
@@ -1158,24 +1157,19 @@ static long trusted_read(const struct key *key, char __user *buffer,
1158 for (i = 0; i < p->blob_len; i++) 1157 for (i = 0; i < p->blob_len; i++)
1159 bufp = hex_byte_pack(bufp, p->blob[i]); 1158 bufp = hex_byte_pack(bufp, p->blob[i]);
1160 if ((copy_to_user(buffer, ascii_buf, 2 * p->blob_len)) != 0) { 1159 if ((copy_to_user(buffer, ascii_buf, 2 * p->blob_len)) != 0) {
1161 kfree(ascii_buf); 1160 kzfree(ascii_buf);
1162 return -EFAULT; 1161 return -EFAULT;
1163 } 1162 }
1164 kfree(ascii_buf); 1163 kzfree(ascii_buf);
1165 return 2 * p->blob_len; 1164 return 2 * p->blob_len;
1166} 1165}
1167 1166
1168/* 1167/*
1169 * trusted_destroy - before freeing the key, clear the decrypted data 1168 * trusted_destroy - clear and free the key's payload
1170 */ 1169 */
1171static void trusted_destroy(struct key *key) 1170static void trusted_destroy(struct key *key)
1172{ 1171{
1173 struct trusted_key_payload *p = key->payload.data[0]; 1172 kzfree(key->payload.data[0]);
1174
1175 if (!p)
1176 return;
1177 memset(p->key, 0, p->key_len);
1178 kfree(key->payload.data[0]);
1179} 1173}
1180 1174
1181struct key_type key_type_trusted = { 1175struct key_type key_type_trusted = {
diff --git a/security/keys/user_defined.c b/security/keys/user_defined.c
index 26605134f17a..3d8c68eba516 100644
--- a/security/keys/user_defined.c
+++ b/security/keys/user_defined.c
@@ -86,10 +86,18 @@ EXPORT_SYMBOL_GPL(user_preparse);
86 */ 86 */
87void user_free_preparse(struct key_preparsed_payload *prep) 87void user_free_preparse(struct key_preparsed_payload *prep)
88{ 88{
89 kfree(prep->payload.data[0]); 89 kzfree(prep->payload.data[0]);
90} 90}
91EXPORT_SYMBOL_GPL(user_free_preparse); 91EXPORT_SYMBOL_GPL(user_free_preparse);
92 92
93static void user_free_payload_rcu(struct rcu_head *head)
94{
95 struct user_key_payload *payload;
96
97 payload = container_of(head, struct user_key_payload, rcu);
98 kzfree(payload);
99}
100
93/* 101/*
94 * update a user defined key 102 * update a user defined key
95 * - the key's semaphore is write-locked 103 * - the key's semaphore is write-locked
@@ -112,7 +120,7 @@ int user_update(struct key *key, struct key_preparsed_payload *prep)
112 prep->payload.data[0] = NULL; 120 prep->payload.data[0] = NULL;
113 121
114 if (zap) 122 if (zap)
115 kfree_rcu(zap, rcu); 123 call_rcu(&zap->rcu, user_free_payload_rcu);
116 return ret; 124 return ret;
117} 125}
118EXPORT_SYMBOL_GPL(user_update); 126EXPORT_SYMBOL_GPL(user_update);
@@ -130,7 +138,7 @@ void user_revoke(struct key *key)
130 138
131 if (upayload) { 139 if (upayload) {
132 rcu_assign_keypointer(key, NULL); 140 rcu_assign_keypointer(key, NULL);
133 kfree_rcu(upayload, rcu); 141 call_rcu(&upayload->rcu, user_free_payload_rcu);
134 } 142 }
135} 143}
136 144
@@ -143,7 +151,7 @@ void user_destroy(struct key *key)
143{ 151{
144 struct user_key_payload *upayload = key->payload.data[0]; 152 struct user_key_payload *upayload = key->payload.data[0];
145 153
146 kfree(upayload); 154 kzfree(upayload);
147} 155}
148 156
149EXPORT_SYMBOL_GPL(user_destroy); 157EXPORT_SYMBOL_GPL(user_destroy);
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index e67a526d1f30..819fd6858b49 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -1106,10 +1106,8 @@ static int selinux_parse_opts_str(char *options,
1106 1106
1107 opts->mnt_opts_flags = kcalloc(NUM_SEL_MNT_OPTS, sizeof(int), 1107 opts->mnt_opts_flags = kcalloc(NUM_SEL_MNT_OPTS, sizeof(int),
1108 GFP_KERNEL); 1108 GFP_KERNEL);
1109 if (!opts->mnt_opts_flags) { 1109 if (!opts->mnt_opts_flags)
1110 kfree(opts->mnt_opts);
1111 goto out_err; 1110 goto out_err;
1112 }
1113 1111
1114 if (fscontext) { 1112 if (fscontext) {
1115 opts->mnt_opts[num_mnt_opts] = fscontext; 1113 opts->mnt_opts[num_mnt_opts] = fscontext;
@@ -1132,6 +1130,7 @@ static int selinux_parse_opts_str(char *options,
1132 return 0; 1130 return 0;
1133 1131
1134out_err: 1132out_err:
1133 security_free_mnt_opts(opts);
1135 kfree(context); 1134 kfree(context);
1136 kfree(defcontext); 1135 kfree(defcontext);
1137 kfree(fscontext); 1136 kfree(fscontext);
diff --git a/sound/soc/atmel/atmel-pcm.h b/sound/soc/atmel/atmel-pcm.h
index 6eaf081cad50..4b27aed40a51 100644
--- a/sound/soc/atmel/atmel-pcm.h
+++ b/sound/soc/atmel/atmel-pcm.h
@@ -83,8 +83,7 @@ struct atmel_pcm_dma_params {
83#define ssc_readx(base, reg) (__raw_readl((base) + (reg))) 83#define ssc_readx(base, reg) (__raw_readl((base) + (reg)))
84#define ssc_writex(base, reg, value) __raw_writel((value), (base) + (reg)) 84#define ssc_writex(base, reg, value) __raw_writel((value), (base) + (reg))
85 85
86#if defined(CONFIG_SND_ATMEL_SOC_PDC) || \ 86#if IS_ENABLED(CONFIG_SND_ATMEL_SOC_PDC)
87 defined(CONFIG_SND_ATMEL_SOC_PDC_MODULE)
88int atmel_pcm_pdc_platform_register(struct device *dev); 87int atmel_pcm_pdc_platform_register(struct device *dev);
89void atmel_pcm_pdc_platform_unregister(struct device *dev); 88void atmel_pcm_pdc_platform_unregister(struct device *dev);
90#else 89#else
@@ -97,8 +96,7 @@ static inline void atmel_pcm_pdc_platform_unregister(struct device *dev)
97} 96}
98#endif 97#endif
99 98
100#if defined(CONFIG_SND_ATMEL_SOC_DMA) || \ 99#if IS_ENABLED(CONFIG_SND_ATMEL_SOC_DMA)
101 defined(CONFIG_SND_ATMEL_SOC_DMA_MODULE)
102int atmel_pcm_dma_platform_register(struct device *dev); 100int atmel_pcm_dma_platform_register(struct device *dev);
103void atmel_pcm_dma_platform_unregister(struct device *dev); 101void atmel_pcm_dma_platform_unregister(struct device *dev);
104#else 102#else
diff --git a/sound/soc/atmel/tse850-pcm5142.c b/sound/soc/atmel/tse850-pcm5142.c
index a72c7d642026..3a1393283156 100644
--- a/sound/soc/atmel/tse850-pcm5142.c
+++ b/sound/soc/atmel/tse850-pcm5142.c
@@ -227,7 +227,7 @@ int tse850_put_ana(struct snd_kcontrol *kctrl,
227static const char * const mux_text[] = { "Mixer", "Loop" }; 227static const char * const mux_text[] = { "Mixer", "Loop" };
228 228
229static const struct soc_enum mux_enum = 229static const struct soc_enum mux_enum =
230 SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, 2, mux_text); 230 SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, ARRAY_SIZE(mux_text), mux_text);
231 231
232static const struct snd_kcontrol_new mux1 = 232static const struct snd_kcontrol_new mux1 =
233 SOC_DAPM_ENUM_EXT("MUX1", mux_enum, tse850_get_mux1, tse850_put_mux1); 233 SOC_DAPM_ENUM_EXT("MUX1", mux_enum, tse850_get_mux1, tse850_put_mux1);
@@ -252,7 +252,7 @@ static const char * const ana_text[] = {
252}; 252};
253 253
254static const struct soc_enum ana_enum = 254static const struct soc_enum ana_enum =
255 SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, 9, ana_text); 255 SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, ARRAY_SIZE(ana_text), ana_text);
256 256
257static const struct snd_kcontrol_new out = 257static const struct snd_kcontrol_new out =
258 SOC_DAPM_ENUM_EXT("ANA", ana_enum, tse850_get_ana, tse850_put_ana); 258 SOC_DAPM_ENUM_EXT("ANA", ana_enum, tse850_get_ana, tse850_put_ana);
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 883ed4c8a551..6c78b0b49b81 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -72,6 +72,7 @@ config SND_SOC_ALL_CODECS
72 select SND_SOC_DA9055 if I2C 72 select SND_SOC_DA9055 if I2C
73 select SND_SOC_DIO2125 73 select SND_SOC_DIO2125
74 select SND_SOC_DMIC 74 select SND_SOC_DMIC
75 select SND_SOC_ES8316 if I2C
75 select SND_SOC_ES8328_SPI if SPI_MASTER 76 select SND_SOC_ES8328_SPI if SPI_MASTER
76 select SND_SOC_ES8328_I2C if I2C 77 select SND_SOC_ES8328_I2C if I2C
77 select SND_SOC_ES7134 78 select SND_SOC_ES7134
@@ -543,6 +544,10 @@ config SND_SOC_HDMI_CODEC
543config SND_SOC_ES7134 544config SND_SOC_ES7134
544 tristate "Everest Semi ES7134 CODEC" 545 tristate "Everest Semi ES7134 CODEC"
545 546
547config SND_SOC_ES8316
548 tristate "Everest Semi ES8316 CODEC"
549 depends on I2C
550
546config SND_SOC_ES8328 551config SND_SOC_ES8328
547 tristate 552 tristate
548 553
@@ -1114,6 +1119,11 @@ config SND_SOC_WM9713
1114 tristate 1119 tristate
1115 select REGMAP_AC97 1120 select REGMAP_AC97
1116 1121
1122config SND_SOC_ZX_AUD96P22
1123 tristate "ZTE ZX AUD96P22 CODEC"
1124 depends on I2C
1125 select REGMAP_I2C
1126
1117# Amp 1127# Amp
1118config SND_SOC_LM4857 1128config SND_SOC_LM4857
1119 tristate 1129 tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 28a63fdaf982..1755a54e3dc9 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -65,6 +65,7 @@ snd-soc-da732x-objs := da732x.o
65snd-soc-da9055-objs := da9055.o 65snd-soc-da9055-objs := da9055.o
66snd-soc-dmic-objs := dmic.o 66snd-soc-dmic-objs := dmic.o
67snd-soc-es7134-objs := es7134.o 67snd-soc-es7134-objs := es7134.o
68snd-soc-es8316-objs := es8316.o
68snd-soc-es8328-objs := es8328.o 69snd-soc-es8328-objs := es8328.o
69snd-soc-es8328-i2c-objs := es8328-i2c.o 70snd-soc-es8328-i2c-objs := es8328-i2c.o
70snd-soc-es8328-spi-objs := es8328-spi.o 71snd-soc-es8328-spi-objs := es8328-spi.o
@@ -224,6 +225,7 @@ snd-soc-wm9705-objs := wm9705.o
224snd-soc-wm9712-objs := wm9712.o 225snd-soc-wm9712-objs := wm9712.o
225snd-soc-wm9713-objs := wm9713.o 226snd-soc-wm9713-objs := wm9713.o
226snd-soc-wm-hubs-objs := wm_hubs.o 227snd-soc-wm-hubs-objs := wm_hubs.o
228snd-soc-zx-aud96p22-objs := zx_aud96p22.o
227# Amp 229# Amp
228snd-soc-dio2125-objs := dio2125.o 230snd-soc-dio2125-objs := dio2125.o
229snd-soc-max9877-objs := max9877.o 231snd-soc-max9877-objs := max9877.o
@@ -300,6 +302,7 @@ obj-$(CONFIG_SND_SOC_DA732X) += snd-soc-da732x.o
300obj-$(CONFIG_SND_SOC_DA9055) += snd-soc-da9055.o 302obj-$(CONFIG_SND_SOC_DA9055) += snd-soc-da9055.o
301obj-$(CONFIG_SND_SOC_DMIC) += snd-soc-dmic.o 303obj-$(CONFIG_SND_SOC_DMIC) += snd-soc-dmic.o
302obj-$(CONFIG_SND_SOC_ES7134) += snd-soc-es7134.o 304obj-$(CONFIG_SND_SOC_ES7134) += snd-soc-es7134.o
305obj-$(CONFIG_SND_SOC_ES8316) += snd-soc-es8316.o
303obj-$(CONFIG_SND_SOC_ES8328) += snd-soc-es8328.o 306obj-$(CONFIG_SND_SOC_ES8328) += snd-soc-es8328.o
304obj-$(CONFIG_SND_SOC_ES8328_I2C)+= snd-soc-es8328-i2c.o 307obj-$(CONFIG_SND_SOC_ES8328_I2C)+= snd-soc-es8328-i2c.o
305obj-$(CONFIG_SND_SOC_ES8328_SPI)+= snd-soc-es8328-spi.o 308obj-$(CONFIG_SND_SOC_ES8328_SPI)+= snd-soc-es8328-spi.o
@@ -455,6 +458,7 @@ obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o
455obj-$(CONFIG_SND_SOC_WM9713) += snd-soc-wm9713.o 458obj-$(CONFIG_SND_SOC_WM9713) += snd-soc-wm9713.o
456obj-$(CONFIG_SND_SOC_WM_ADSP) += snd-soc-wm-adsp.o 459obj-$(CONFIG_SND_SOC_WM_ADSP) += snd-soc-wm-adsp.o
457obj-$(CONFIG_SND_SOC_WM_HUBS) += snd-soc-wm-hubs.o 460obj-$(CONFIG_SND_SOC_WM_HUBS) += snd-soc-wm-hubs.o
461obj-$(CONFIG_SND_SOC_ZX_AUD96P22) += snd-soc-zx-aud96p22.o
458 462
459# Amp 463# Amp
460obj-$(CONFIG_SND_SOC_DIO2125) += snd-soc-dio2125.o 464obj-$(CONFIG_SND_SOC_DIO2125) += snd-soc-dio2125.o
diff --git a/sound/soc/codecs/ak4613.c b/sound/soc/codecs/ak4613.c
index b2dfddead227..690edebf029e 100644
--- a/sound/soc/codecs/ak4613.c
+++ b/sound/soc/codecs/ak4613.c
@@ -94,6 +94,8 @@ struct ak4613_interface {
94struct ak4613_priv { 94struct ak4613_priv {
95 struct mutex lock; 95 struct mutex lock;
96 const struct ak4613_interface *iface; 96 const struct ak4613_interface *iface;
97 struct snd_pcm_hw_constraint_list constraint;
98 unsigned int sysclk;
97 99
98 unsigned int fmt; 100 unsigned int fmt;
99 u8 oc; 101 u8 oc;
@@ -139,9 +141,7 @@ static const struct reg_default ak4613_reg[] = {
139#define AUDIO_IFACE(b, fmt) { b, SND_SOC_DAIFMT_##fmt } 141#define AUDIO_IFACE(b, fmt) { b, SND_SOC_DAIFMT_##fmt }
140static const struct ak4613_interface ak4613_iface[] = { 142static const struct ak4613_interface ak4613_iface[] = {
141 /* capture */ /* playback */ 143 /* capture */ /* playback */
142 [0] = { AUDIO_IFACE(24, LEFT_J), AUDIO_IFACE(16, RIGHT_J) }, 144 /* [0] - [2] are not supported */
143 [1] = { AUDIO_IFACE(24, LEFT_J), AUDIO_IFACE(20, RIGHT_J) },
144 [2] = { AUDIO_IFACE(24, LEFT_J), AUDIO_IFACE(24, RIGHT_J) },
145 [3] = { AUDIO_IFACE(24, LEFT_J), AUDIO_IFACE(24, LEFT_J) }, 145 [3] = { AUDIO_IFACE(24, LEFT_J), AUDIO_IFACE(24, LEFT_J) },
146 [4] = { AUDIO_IFACE(24, I2S), AUDIO_IFACE(24, I2S) }, 146 [4] = { AUDIO_IFACE(24, I2S), AUDIO_IFACE(24, I2S) },
147}; 147};
@@ -254,6 +254,74 @@ static void ak4613_dai_shutdown(struct snd_pcm_substream *substream,
254 mutex_unlock(&priv->lock); 254 mutex_unlock(&priv->lock);
255} 255}
256 256
257static void ak4613_hw_constraints(struct ak4613_priv *priv,
258 struct snd_pcm_runtime *runtime)
259{
260 static const unsigned int ak4613_rates[] = {
261 32000,
262 44100,
263 48000,
264 64000,
265 88200,
266 96000,
267 176400,
268 192000,
269 };
270 struct snd_pcm_hw_constraint_list *constraint = &priv->constraint;
271 unsigned int fs;
272 int i;
273
274 constraint->list = ak4613_rates;
275 constraint->mask = 0;
276 constraint->count = 0;
277
278 /*
279 * Slave Mode
280 * Normal: [32kHz, 48kHz] : 256fs,384fs or 512fs
281 * Double: [64kHz, 96kHz] : 256fs
282 * Quad : [128kHz,192kHz]: 128fs
283 *
284 * Master mode
285 * Normal: [32kHz, 48kHz] : 256fs or 512fs
286 * Double: [64kHz, 96kHz] : 256fs
287 * Quad : [128kHz,192kHz]: 128fs
288 */
289 for (i = 0; i < ARRAY_SIZE(ak4613_rates); i++) {
290 /* minimum fs on each range */
291 fs = (ak4613_rates[i] <= 96000) ? 256 : 128;
292
293 if (priv->sysclk >= ak4613_rates[i] * fs)
294 constraint->count = i + 1;
295 }
296
297 snd_pcm_hw_constraint_list(runtime, 0,
298 SNDRV_PCM_HW_PARAM_RATE, constraint);
299}
300
301static int ak4613_dai_startup(struct snd_pcm_substream *substream,
302 struct snd_soc_dai *dai)
303{
304 struct snd_soc_codec *codec = dai->codec;
305 struct ak4613_priv *priv = snd_soc_codec_get_drvdata(codec);
306
307 priv->cnt++;
308
309 ak4613_hw_constraints(priv, substream->runtime);
310
311 return 0;
312}
313
314static int ak4613_dai_set_sysclk(struct snd_soc_dai *codec_dai,
315 int clk_id, unsigned int freq, int dir)
316{
317 struct snd_soc_codec *codec = codec_dai->codec;
318 struct ak4613_priv *priv = snd_soc_codec_get_drvdata(codec);
319
320 priv->sysclk = freq;
321
322 return 0;
323}
324
257static int ak4613_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) 325static int ak4613_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
258{ 326{
259 struct snd_soc_codec *codec = dai->codec; 327 struct snd_soc_codec *codec = dai->codec;
@@ -262,11 +330,9 @@ static int ak4613_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
262 fmt &= SND_SOC_DAIFMT_FORMAT_MASK; 330 fmt &= SND_SOC_DAIFMT_FORMAT_MASK;
263 331
264 switch (fmt) { 332 switch (fmt) {
265 case SND_SOC_DAIFMT_RIGHT_J:
266 case SND_SOC_DAIFMT_LEFT_J: 333 case SND_SOC_DAIFMT_LEFT_J:
267 case SND_SOC_DAIFMT_I2S: 334 case SND_SOC_DAIFMT_I2S:
268 priv->fmt = fmt; 335 priv->fmt = fmt;
269
270 break; 336 break;
271 default: 337 default:
272 return -EINVAL; 338 return -EINVAL;
@@ -286,13 +352,8 @@ static bool ak4613_dai_fmt_matching(const struct ak4613_interface *iface,
286 if (fmts->fmt != fmt) 352 if (fmts->fmt != fmt)
287 return false; 353 return false;
288 354
289 if (fmt == SND_SOC_DAIFMT_RIGHT_J) { 355 if (fmts->width != width)
290 if (fmts->width != width) 356 return false;
291 return false;
292 } else {
293 if (fmts->width < width)
294 return false;
295 }
296 357
297 return true; 358 return true;
298} 359}
@@ -319,6 +380,7 @@ static int ak4613_dai_hw_params(struct snd_pcm_substream *substream,
319 case 48000: 380 case 48000:
320 ctrl2 = DFS_NORMAL_SPEED; 381 ctrl2 = DFS_NORMAL_SPEED;
321 break; 382 break;
383 case 64000:
322 case 88200: 384 case 88200:
323 case 96000: 385 case 96000:
324 ctrl2 = DFS_DOUBLE_SPEED; 386 ctrl2 = DFS_DOUBLE_SPEED;
@@ -345,7 +407,7 @@ static int ak4613_dai_hw_params(struct snd_pcm_substream *substream,
345 if (ak4613_dai_fmt_matching(priv->iface, is_play, fmt, width)) 407 if (ak4613_dai_fmt_matching(priv->iface, is_play, fmt, width))
346 iface = priv->iface; 408 iface = priv->iface;
347 } else { 409 } else {
348 for (i = ARRAY_SIZE(ak4613_iface); i >= 0; i--) { 410 for (i = ARRAY_SIZE(ak4613_iface) - 1; i >= 0; i--) {
349 if (!ak4613_dai_fmt_matching(ak4613_iface + i, 411 if (!ak4613_dai_fmt_matching(ak4613_iface + i,
350 is_play, 412 is_play,
351 fmt, width)) 413 fmt, width))
@@ -358,7 +420,6 @@ static int ak4613_dai_hw_params(struct snd_pcm_substream *substream,
358 if ((priv->iface == NULL) || 420 if ((priv->iface == NULL) ||
359 (priv->iface == iface)) { 421 (priv->iface == iface)) {
360 priv->iface = iface; 422 priv->iface = iface;
361 priv->cnt++;
362 ret = 0; 423 ret = 0;
363 } 424 }
364 mutex_unlock(&priv->lock); 425 mutex_unlock(&priv->lock);
@@ -407,7 +468,9 @@ static int ak4613_set_bias_level(struct snd_soc_codec *codec,
407} 468}
408 469
409static const struct snd_soc_dai_ops ak4613_dai_ops = { 470static const struct snd_soc_dai_ops ak4613_dai_ops = {
471 .startup = ak4613_dai_startup,
410 .shutdown = ak4613_dai_shutdown, 472 .shutdown = ak4613_dai_shutdown,
473 .set_sysclk = ak4613_dai_set_sysclk,
411 .set_fmt = ak4613_dai_set_fmt, 474 .set_fmt = ak4613_dai_set_fmt,
412 .hw_params = ak4613_dai_hw_params, 475 .hw_params = ak4613_dai_hw_params,
413}; 476};
@@ -420,8 +483,7 @@ static const struct snd_soc_dai_ops ak4613_dai_ops = {
420 SNDRV_PCM_RATE_96000 |\ 483 SNDRV_PCM_RATE_96000 |\
421 SNDRV_PCM_RATE_176400 |\ 484 SNDRV_PCM_RATE_176400 |\
422 SNDRV_PCM_RATE_192000) 485 SNDRV_PCM_RATE_192000)
423#define AK4613_PCM_FMTBIT (SNDRV_PCM_FMTBIT_S16_LE |\ 486#define AK4613_PCM_FMTBIT (SNDRV_PCM_FMTBIT_S24_LE)
424 SNDRV_PCM_FMTBIT_S24_LE)
425 487
426static struct snd_soc_dai_driver ak4613_dai = { 488static struct snd_soc_dai_driver ak4613_dai = {
427 .name = "ak4613-hifi", 489 .name = "ak4613-hifi",
@@ -527,6 +589,7 @@ static int ak4613_i2c_probe(struct i2c_client *i2c,
527 589
528 priv->iface = NULL; 590 priv->iface = NULL;
529 priv->cnt = 0; 591 priv->cnt = 0;
592 priv->sysclk = 0;
530 593
531 mutex_init(&priv->lock); 594 mutex_init(&priv->lock);
532 595
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index 23ab9646c351..66de8a2013a6 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -433,7 +433,7 @@ static int ak4642_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
433static int ak4642_set_mcko(struct snd_soc_codec *codec, 433static int ak4642_set_mcko(struct snd_soc_codec *codec,
434 u32 frequency) 434 u32 frequency)
435{ 435{
436 u32 fs_list[] = { 436 static const u32 fs_list[] = {
437 [0] = 8000, 437 [0] = 8000,
438 [1] = 12000, 438 [1] = 12000,
439 [2] = 16000, 439 [2] = 16000,
@@ -447,7 +447,7 @@ static int ak4642_set_mcko(struct snd_soc_codec *codec,
447 [14] = 29400, 447 [14] = 29400,
448 [15] = 44100, 448 [15] = 44100,
449 }; 449 };
450 u32 ps_list[] = { 450 static const u32 ps_list[] = {
451 [0] = 256, 451 [0] = 256,
452 [1] = 128, 452 [1] = 128,
453 [2] = 64, 453 [2] = 64,
diff --git a/sound/soc/codecs/cs35l34.c b/sound/soc/codecs/cs35l34.c
index 7c5d1510cf2c..0a747c66cc6c 100644
--- a/sound/soc/codecs/cs35l34.c
+++ b/sound/soc/codecs/cs35l34.c
@@ -567,12 +567,12 @@ static int cs35l34_pcm_hw_params(struct snd_pcm_substream *substream,
567 return ret; 567 return ret;
568} 568}
569 569
570static unsigned int cs35l34_src_rates[] = { 570static const unsigned int cs35l34_src_rates[] = {
571 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 571 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000
572}; 572};
573 573
574 574
575static struct snd_pcm_hw_constraint_list cs35l34_constraints = { 575static const struct snd_pcm_hw_constraint_list cs35l34_constraints = {
576 .count = ARRAY_SIZE(cs35l34_src_rates), 576 .count = ARRAY_SIZE(cs35l34_src_rates),
577 .list = cs35l34_src_rates, 577 .list = cs35l34_src_rates,
578}; 578};
diff --git a/sound/soc/codecs/cs35l35.c b/sound/soc/codecs/cs35l35.c
index f8aef5869b03..f1ee184ecab2 100644
--- a/sound/soc/codecs/cs35l35.c
+++ b/sound/soc/codecs/cs35l35.c
@@ -162,6 +162,14 @@ static bool cs35l35_precious_register(struct device *dev, unsigned int reg)
162 } 162 }
163} 163}
164 164
165static void cs35l35_reset(struct cs35l35_private *cs35l35)
166{
167 gpiod_set_value_cansleep(cs35l35->reset_gpio, 0);
168 usleep_range(2000, 2100);
169 gpiod_set_value_cansleep(cs35l35->reset_gpio, 1);
170 usleep_range(1000, 1100);
171}
172
165static int cs35l35_wait_for_pdn(struct cs35l35_private *cs35l35) 173static int cs35l35_wait_for_pdn(struct cs35l35_private *cs35l35)
166{ 174{
167 int ret; 175 int ret;
@@ -756,6 +764,76 @@ static int cs35l35_codec_set_sysclk(struct snd_soc_codec *codec,
756 return ret; 764 return ret;
757} 765}
758 766
767static int cs35l35_boost_inductor(struct cs35l35_private *cs35l35,
768 int inductor)
769{
770 struct regmap *regmap = cs35l35->regmap;
771 unsigned int bst_ipk = 0;
772
773 /*
774 * Digital Boost Converter Configuration for feedback,
775 * ramping, switching frequency, and estimation block seeding.
776 */
777
778 regmap_update_bits(regmap, CS35L35_BST_CONV_SW_FREQ,
779 CS35L35_BST_CONV_SWFREQ_MASK, 0x00);
780
781 regmap_read(regmap, CS35L35_BST_PEAK_I, &bst_ipk);
782 bst_ipk &= CS35L35_BST_IPK_MASK;
783
784 switch (inductor) {
785 case 1000: /* 1 uH */
786 regmap_write(regmap, CS35L35_BST_CONV_COEF_1, 0x24);
787 regmap_write(regmap, CS35L35_BST_CONV_COEF_2, 0x24);
788 regmap_update_bits(regmap, CS35L35_BST_CONV_SW_FREQ,
789 CS35L35_BST_CONV_LBST_MASK, 0x00);
790
791 if (bst_ipk < 0x04)
792 regmap_write(regmap, CS35L35_BST_CONV_SLOPE_COMP, 0x1B);
793 else
794 regmap_write(regmap, CS35L35_BST_CONV_SLOPE_COMP, 0x4E);
795 break;
796 case 1200: /* 1.2 uH */
797 regmap_write(regmap, CS35L35_BST_CONV_COEF_1, 0x20);
798 regmap_write(regmap, CS35L35_BST_CONV_COEF_2, 0x20);
799 regmap_update_bits(regmap, CS35L35_BST_CONV_SW_FREQ,
800 CS35L35_BST_CONV_LBST_MASK, 0x01);
801
802 if (bst_ipk < 0x04)
803 regmap_write(regmap, CS35L35_BST_CONV_SLOPE_COMP, 0x1B);
804 else
805 regmap_write(regmap, CS35L35_BST_CONV_SLOPE_COMP, 0x47);
806 break;
807 case 1500: /* 1.5uH */
808 regmap_write(regmap, CS35L35_BST_CONV_COEF_1, 0x20);
809 regmap_write(regmap, CS35L35_BST_CONV_COEF_2, 0x20);
810 regmap_update_bits(regmap, CS35L35_BST_CONV_SW_FREQ,
811 CS35L35_BST_CONV_LBST_MASK, 0x02);
812
813 if (bst_ipk < 0x04)
814 regmap_write(regmap, CS35L35_BST_CONV_SLOPE_COMP, 0x1B);
815 else
816 regmap_write(regmap, CS35L35_BST_CONV_SLOPE_COMP, 0x3C);
817 break;
818 case 2200: /* 2.2uH */
819 regmap_write(regmap, CS35L35_BST_CONV_COEF_1, 0x19);
820 regmap_write(regmap, CS35L35_BST_CONV_COEF_2, 0x25);
821 regmap_update_bits(regmap, CS35L35_BST_CONV_SW_FREQ,
822 CS35L35_BST_CONV_LBST_MASK, 0x03);
823
824 if (bst_ipk < 0x04)
825 regmap_write(regmap, CS35L35_BST_CONV_SLOPE_COMP, 0x1B);
826 else
827 regmap_write(regmap, CS35L35_BST_CONV_SLOPE_COMP, 0x23);
828 break;
829 default:
830 dev_err(cs35l35->dev, "Invalid Inductor Value %d uH\n",
831 inductor);
832 return -EINVAL;
833 }
834 return 0;
835}
836
759static int cs35l35_codec_probe(struct snd_soc_codec *codec) 837static int cs35l35_codec_probe(struct snd_soc_codec *codec)
760{ 838{
761 struct cs35l35_private *cs35l35 = snd_soc_codec_get_drvdata(codec); 839 struct cs35l35_private *cs35l35 = snd_soc_codec_get_drvdata(codec);
@@ -775,6 +853,10 @@ static int cs35l35_codec_probe(struct snd_soc_codec *codec)
775 cs35l35->pdata.bst_ipk << 853 cs35l35->pdata.bst_ipk <<
776 CS35L35_BST_IPK_SHIFT); 854 CS35L35_BST_IPK_SHIFT);
777 855
856 ret = cs35l35_boost_inductor(cs35l35, cs35l35->pdata.boost_ind);
857 if (ret)
858 return ret;
859
778 if (cs35l35->pdata.gain_zc) 860 if (cs35l35->pdata.gain_zc)
779 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL, 861 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
780 CS35L35_AMP_GAIN_ZC_MASK, 862 CS35L35_AMP_GAIN_ZC_MASK,
@@ -1195,7 +1277,15 @@ static int cs35l35_handle_of_data(struct i2c_client *i2c_client,
1195 return -EINVAL; 1277 return -EINVAL;
1196 } 1278 }
1197 1279
1198 pdata->bst_ipk = (val32 - 1680) / 110; 1280 pdata->bst_ipk = ((val32 - 1680) / 110) | CS35L35_VALID_PDATA;
1281 }
1282
1283 ret = of_property_read_u32(np, "cirrus,boost-ind-nanohenry", &val32);
1284 if (ret >= 0) {
1285 pdata->boost_ind = val32;
1286 } else {
1287 dev_err(&i2c_client->dev, "Inductor not specified.\n");
1288 return -EINVAL;
1199 } 1289 }
1200 1290
1201 if (of_property_read_u32(np, "cirrus,sp-drv-strength", &val32) >= 0) 1291 if (of_property_read_u32(np, "cirrus,sp-drv-strength", &val32) >= 0)
@@ -1454,7 +1544,7 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
1454 } 1544 }
1455 } 1545 }
1456 1546
1457 gpiod_set_value_cansleep(cs35l35->reset_gpio, 1); 1547 cs35l35_reset(cs35l35);
1458 1548
1459 init_completion(&cs35l35->pdn_done); 1549 init_completion(&cs35l35->pdn_done);
1460 1550
diff --git a/sound/soc/codecs/cs35l35.h b/sound/soc/codecs/cs35l35.h
index 5a6e43a87c4d..621bfef70d03 100644
--- a/sound/soc/codecs/cs35l35.h
+++ b/sound/soc/codecs/cs35l35.h
@@ -200,6 +200,12 @@
200#define CS35L35_SP_I2S_DRV_MASK 0x03 200#define CS35L35_SP_I2S_DRV_MASK 0x03
201#define CS35L35_SP_I2S_DRV_SHIFT 0 201#define CS35L35_SP_I2S_DRV_SHIFT 0
202 202
203/* Boost Converter Config */
204#define CS35L35_BST_CONV_COEFF_MASK 0xFF
205#define CS35L35_BST_CONV_SLOPE_MASK 0xFF
206#define CS35L35_BST_CONV_LBST_MASK 0x03
207#define CS35L35_BST_CONV_SWFREQ_MASK 0xF0
208
203/* Class H Algorithm Control */ 209/* Class H Algorithm Control */
204#define CS35L35_CH_STEREO_MASK 0x40 210#define CS35L35_CH_STEREO_MASK 0x40
205#define CS35L35_CH_STEREO_SHIFT 6 211#define CS35L35_CH_STEREO_SHIFT 6
diff --git a/sound/soc/codecs/cs4271.c b/sound/soc/codecs/cs4271.c
index e78b5f055f25..d8824773dc29 100644
--- a/sound/soc/codecs/cs4271.c
+++ b/sound/soc/codecs/cs4271.c
@@ -674,8 +674,6 @@ static int cs4271_common_probe(struct device *dev,
674 cs4271->gpio_nreset = cs4271plat->gpio_nreset; 674 cs4271->gpio_nreset = cs4271plat->gpio_nreset;
675 675
676 if (gpio_is_valid(cs4271->gpio_nreset)) { 676 if (gpio_is_valid(cs4271->gpio_nreset)) {
677 int ret;
678
679 ret = devm_gpio_request(dev, cs4271->gpio_nreset, 677 ret = devm_gpio_request(dev, cs4271->gpio_nreset,
680 "CS4271 Reset"); 678 "CS4271 Reset");
681 if (ret < 0) 679 if (ret < 0)
diff --git a/sound/soc/codecs/cs53l30.c b/sound/soc/codecs/cs53l30.c
index 1e0d5973b758..06933a5d0a75 100644
--- a/sound/soc/codecs/cs53l30.c
+++ b/sound/soc/codecs/cs53l30.c
@@ -747,7 +747,7 @@ static unsigned int const cs53l30_src_rates[] = {
747 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 747 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000
748}; 748};
749 749
750static struct snd_pcm_hw_constraint_list src_constraints = { 750static const struct snd_pcm_hw_constraint_list src_constraints = {
751 .count = ARRAY_SIZE(cs53l30_src_rates), 751 .count = ARRAY_SIZE(cs53l30_src_rates),
752 .list = cs53l30_src_rates, 752 .list = cs53l30_src_rates,
753}; 753};
diff --git a/sound/soc/codecs/da7213.c b/sound/soc/codecs/da7213.c
index 024d83fa6a7f..c3e11897f8ae 100644
--- a/sound/soc/codecs/da7213.c
+++ b/sound/soc/codecs/da7213.c
@@ -13,6 +13,8 @@
13 */ 13 */
14 14
15#include <linux/acpi.h> 15#include <linux/acpi.h>
16#include <linux/of_device.h>
17#include <linux/property.h>
16#include <linux/clk.h> 18#include <linux/clk.h>
17#include <linux/delay.h> 19#include <linux/delay.h>
18#include <linux/i2c.h> 20#include <linux/i2c.h>
@@ -1606,12 +1608,12 @@ static enum da7213_dmic_clk_rate
1606} 1608}
1607 1609
1608static struct da7213_platform_data 1610static struct da7213_platform_data
1609 *da7213_of_to_pdata(struct snd_soc_codec *codec) 1611 *da7213_fw_to_pdata(struct snd_soc_codec *codec)
1610{ 1612{
1611 struct device_node *np = codec->dev->of_node; 1613 struct device *dev = codec->dev;
1612 struct da7213_platform_data *pdata; 1614 struct da7213_platform_data *pdata;
1613 const char *of_str; 1615 const char *fw_str;
1614 u32 of_val32; 1616 u32 fw_val32;
1615 1617
1616 pdata = devm_kzalloc(codec->dev, sizeof(*pdata), GFP_KERNEL); 1618 pdata = devm_kzalloc(codec->dev, sizeof(*pdata), GFP_KERNEL);
1617 if (!pdata) { 1619 if (!pdata) {
@@ -1619,29 +1621,29 @@ static struct da7213_platform_data
1619 return NULL; 1621 return NULL;
1620 } 1622 }
1621 1623
1622 if (of_property_read_u32(np, "dlg,micbias1-lvl", &of_val32) >= 0) 1624 if (device_property_read_u32(dev, "dlg,micbias1-lvl", &fw_val32) >= 0)
1623 pdata->micbias1_lvl = da7213_of_micbias_lvl(codec, of_val32); 1625 pdata->micbias1_lvl = da7213_of_micbias_lvl(codec, fw_val32);
1624 else 1626 else
1625 pdata->micbias1_lvl = DA7213_MICBIAS_2_2V; 1627 pdata->micbias1_lvl = DA7213_MICBIAS_2_2V;
1626 1628
1627 if (of_property_read_u32(np, "dlg,micbias2-lvl", &of_val32) >= 0) 1629 if (device_property_read_u32(dev, "dlg,micbias2-lvl", &fw_val32) >= 0)
1628 pdata->micbias2_lvl = da7213_of_micbias_lvl(codec, of_val32); 1630 pdata->micbias2_lvl = da7213_of_micbias_lvl(codec, fw_val32);
1629 else 1631 else
1630 pdata->micbias2_lvl = DA7213_MICBIAS_2_2V; 1632 pdata->micbias2_lvl = DA7213_MICBIAS_2_2V;
1631 1633
1632 if (!of_property_read_string(np, "dlg,dmic-data-sel", &of_str)) 1634 if (!device_property_read_string(dev, "dlg,dmic-data-sel", &fw_str))
1633 pdata->dmic_data_sel = da7213_of_dmic_data_sel(codec, of_str); 1635 pdata->dmic_data_sel = da7213_of_dmic_data_sel(codec, fw_str);
1634 else 1636 else
1635 pdata->dmic_data_sel = DA7213_DMIC_DATA_LRISE_RFALL; 1637 pdata->dmic_data_sel = DA7213_DMIC_DATA_LRISE_RFALL;
1636 1638
1637 if (!of_property_read_string(np, "dlg,dmic-samplephase", &of_str)) 1639 if (!device_property_read_string(dev, "dlg,dmic-samplephase", &fw_str))
1638 pdata->dmic_samplephase = 1640 pdata->dmic_samplephase =
1639 da7213_of_dmic_samplephase(codec, of_str); 1641 da7213_of_dmic_samplephase(codec, fw_str);
1640 else 1642 else
1641 pdata->dmic_samplephase = DA7213_DMIC_SAMPLE_ON_CLKEDGE; 1643 pdata->dmic_samplephase = DA7213_DMIC_SAMPLE_ON_CLKEDGE;
1642 1644
1643 if (of_property_read_u32(np, "dlg,dmic-clkrate", &of_val32) >= 0) 1645 if (device_property_read_u32(dev, "dlg,dmic-clkrate", &fw_val32) >= 0)
1644 pdata->dmic_clk_rate = da7213_of_dmic_clkrate(codec, of_val32); 1646 pdata->dmic_clk_rate = da7213_of_dmic_clkrate(codec, fw_val32);
1645 else 1647 else
1646 pdata->dmic_clk_rate = DA7213_DMIC_CLK_3_0MHZ; 1648 pdata->dmic_clk_rate = DA7213_DMIC_CLK_3_0MHZ;
1647 1649
@@ -1713,10 +1715,9 @@ static int da7213_probe(struct snd_soc_codec *codec)
1713 DA7213_LINE_AMP_OE, DA7213_LINE_AMP_OE); 1715 DA7213_LINE_AMP_OE, DA7213_LINE_AMP_OE);
1714 1716
1715 /* Handle DT/Platform data */ 1717 /* Handle DT/Platform data */
1716 if (codec->dev->of_node) 1718 da7213->pdata = dev_get_platdata(codec->dev);
1717 da7213->pdata = da7213_of_to_pdata(codec); 1719 if (!da7213->pdata)
1718 else 1720 da7213->pdata = da7213_fw_to_pdata(codec);
1719 da7213->pdata = dev_get_platdata(codec->dev);
1720 1721
1721 /* Set platform data values */ 1722 /* Set platform data values */
1722 if (da7213->pdata) { 1723 if (da7213->pdata) {
diff --git a/sound/soc/codecs/da7218.c b/sound/soc/codecs/da7218.c
index d256ebf9e309..6e1940eb0653 100644
--- a/sound/soc/codecs/da7218.c
+++ b/sound/soc/codecs/da7218.c
@@ -1457,7 +1457,7 @@ static int da7218_dai_event(struct snd_soc_dapm_widget *w,
1457 ++i; 1457 ++i;
1458 msleep(DA7218_SRM_CHECK_DELAY); 1458 msleep(DA7218_SRM_CHECK_DELAY);
1459 } 1459 }
1460 } while ((i < DA7218_SRM_CHECK_TRIES) & (!success)); 1460 } while ((i < DA7218_SRM_CHECK_TRIES) && (!success));
1461 1461
1462 if (!success) 1462 if (!success)
1463 dev_warn(codec->dev, "SRM failed to lock\n"); 1463 dev_warn(codec->dev, "SRM failed to lock\n");
diff --git a/sound/soc/codecs/da7219-aad.c b/sound/soc/codecs/da7219-aad.c
index 6274d79c1353..1d1d10dd92ae 100644
--- a/sound/soc/codecs/da7219-aad.c
+++ b/sound/soc/codecs/da7219-aad.c
@@ -115,19 +115,21 @@ static void da7219_aad_hptest_work(struct work_struct *work)
115 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec); 115 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec);
116 116
117 u16 tonegen_freq_hptest; 117 u16 tonegen_freq_hptest;
118 u8 pll_srm_sts, gain_ramp_ctrl, accdet_cfg8; 118 u8 pll_srm_sts, pll_ctrl, gain_ramp_ctrl, accdet_cfg8;
119 int report = 0, ret = 0; 119 int report = 0, ret = 0;
120 120
121 /* Lock DAPM and any Kcontrols that are affected by this test */ 121 /* Lock DAPM, Kcontrols affected by this test and the PLL */
122 snd_soc_dapm_mutex_lock(dapm); 122 snd_soc_dapm_mutex_lock(dapm);
123 mutex_lock(&da7219->lock); 123 mutex_lock(&da7219->ctrl_lock);
124 mutex_lock(&da7219->pll_lock);
124 125
125 /* Ensure MCLK is available for HP test procedure */ 126 /* Ensure MCLK is available for HP test procedure */
126 if (da7219->mclk) { 127 if (da7219->mclk) {
127 ret = clk_prepare_enable(da7219->mclk); 128 ret = clk_prepare_enable(da7219->mclk);
128 if (ret) { 129 if (ret) {
129 dev_err(codec->dev, "Failed to enable mclk - %d\n", ret); 130 dev_err(codec->dev, "Failed to enable mclk - %d\n", ret);
130 mutex_unlock(&da7219->lock); 131 mutex_unlock(&da7219->pll_lock);
132 mutex_unlock(&da7219->ctrl_lock);
131 snd_soc_dapm_mutex_unlock(dapm); 133 snd_soc_dapm_mutex_unlock(dapm);
132 return; 134 return;
133 } 135 }
@@ -136,12 +138,21 @@ static void da7219_aad_hptest_work(struct work_struct *work)
136 /* 138 /*
137 * If MCLK not present, then we're using the internal oscillator and 139 * If MCLK not present, then we're using the internal oscillator and
138 * require different frequency settings to achieve the same result. 140 * require different frequency settings to achieve the same result.
141 *
142 * If MCLK is present, but PLL is not enabled then we enable it here to
143 * ensure a consistent detection procedure.
139 */ 144 */
140 pll_srm_sts = snd_soc_read(codec, DA7219_PLL_SRM_STS); 145 pll_srm_sts = snd_soc_read(codec, DA7219_PLL_SRM_STS);
141 if (pll_srm_sts & DA7219_PLL_SRM_STS_MCLK) 146 if (pll_srm_sts & DA7219_PLL_SRM_STS_MCLK) {
142 tonegen_freq_hptest = cpu_to_le16(DA7219_AAD_HPTEST_RAMP_FREQ); 147 tonegen_freq_hptest = cpu_to_le16(DA7219_AAD_HPTEST_RAMP_FREQ);
143 else 148
149 pll_ctrl = snd_soc_read(codec, DA7219_PLL_CTRL);
150 if ((pll_ctrl & DA7219_PLL_MODE_MASK) == DA7219_PLL_MODE_BYPASS)
151 da7219_set_pll(codec, DA7219_SYSCLK_PLL,
152 DA7219_PLL_FREQ_OUT_98304);
153 } else {
144 tonegen_freq_hptest = cpu_to_le16(DA7219_AAD_HPTEST_RAMP_FREQ_INT_OSC); 154 tonegen_freq_hptest = cpu_to_le16(DA7219_AAD_HPTEST_RAMP_FREQ_INT_OSC);
155 }
145 156
146 /* Ensure gain ramping at fastest rate */ 157 /* Ensure gain ramping at fastest rate */
147 gain_ramp_ctrl = snd_soc_read(codec, DA7219_GAIN_RAMP_CTRL); 158 gain_ramp_ctrl = snd_soc_read(codec, DA7219_GAIN_RAMP_CTRL);
@@ -302,11 +313,17 @@ static void da7219_aad_hptest_work(struct work_struct *work)
302 snd_soc_update_bits(codec, DA7219_HP_R_CTRL, DA7219_HP_R_AMP_OE_MASK, 313 snd_soc_update_bits(codec, DA7219_HP_R_CTRL, DA7219_HP_R_AMP_OE_MASK,
303 DA7219_HP_R_AMP_OE_MASK); 314 DA7219_HP_R_AMP_OE_MASK);
304 315
316 /* Restore PLL to previous configuration, if re-configured */
317 if ((pll_srm_sts & DA7219_PLL_SRM_STS_MCLK) &&
318 ((pll_ctrl & DA7219_PLL_MODE_MASK) == DA7219_PLL_MODE_BYPASS))
319 da7219_set_pll(codec, DA7219_SYSCLK_MCLK, 0);
320
305 /* Remove MCLK, if previously enabled */ 321 /* Remove MCLK, if previously enabled */
306 if (da7219->mclk) 322 if (da7219->mclk)
307 clk_disable_unprepare(da7219->mclk); 323 clk_disable_unprepare(da7219->mclk);
308 324
309 mutex_unlock(&da7219->lock); 325 mutex_unlock(&da7219->pll_lock);
326 mutex_unlock(&da7219->ctrl_lock);
310 snd_soc_dapm_mutex_unlock(dapm); 327 snd_soc_dapm_mutex_unlock(dapm);
311 328
312 /* 329 /*
diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c
index 99601627f83c..f71d72c22bfc 100644
--- a/sound/soc/codecs/da7219.c
+++ b/sound/soc/codecs/da7219.c
@@ -260,9 +260,9 @@ static int da7219_volsw_locked_get(struct snd_kcontrol *kcontrol,
260 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec); 260 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec);
261 int ret; 261 int ret;
262 262
263 mutex_lock(&da7219->lock); 263 mutex_lock(&da7219->ctrl_lock);
264 ret = snd_soc_get_volsw(kcontrol, ucontrol); 264 ret = snd_soc_get_volsw(kcontrol, ucontrol);
265 mutex_unlock(&da7219->lock); 265 mutex_unlock(&da7219->ctrl_lock);
266 266
267 return ret; 267 return ret;
268} 268}
@@ -274,9 +274,9 @@ static int da7219_volsw_locked_put(struct snd_kcontrol *kcontrol,
274 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec); 274 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec);
275 int ret; 275 int ret;
276 276
277 mutex_lock(&da7219->lock); 277 mutex_lock(&da7219->ctrl_lock);
278 ret = snd_soc_put_volsw(kcontrol, ucontrol); 278 ret = snd_soc_put_volsw(kcontrol, ucontrol);
279 mutex_unlock(&da7219->lock); 279 mutex_unlock(&da7219->ctrl_lock);
280 280
281 return ret; 281 return ret;
282} 282}
@@ -288,9 +288,9 @@ static int da7219_enum_locked_get(struct snd_kcontrol *kcontrol,
288 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec); 288 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec);
289 int ret; 289 int ret;
290 290
291 mutex_lock(&da7219->lock); 291 mutex_lock(&da7219->ctrl_lock);
292 ret = snd_soc_get_enum_double(kcontrol, ucontrol); 292 ret = snd_soc_get_enum_double(kcontrol, ucontrol);
293 mutex_unlock(&da7219->lock); 293 mutex_unlock(&da7219->ctrl_lock);
294 294
295 return ret; 295 return ret;
296} 296}
@@ -302,9 +302,9 @@ static int da7219_enum_locked_put(struct snd_kcontrol *kcontrol,
302 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec); 302 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec);
303 int ret; 303 int ret;
304 304
305 mutex_lock(&da7219->lock); 305 mutex_lock(&da7219->ctrl_lock);
306 ret = snd_soc_put_enum_double(kcontrol, ucontrol); 306 ret = snd_soc_put_enum_double(kcontrol, ucontrol);
307 mutex_unlock(&da7219->lock); 307 mutex_unlock(&da7219->ctrl_lock);
308 308
309 return ret; 309 return ret;
310} 310}
@@ -424,9 +424,9 @@ static int da7219_tonegen_freq_get(struct snd_kcontrol *kcontrol,
424 u16 val; 424 u16 val;
425 int ret; 425 int ret;
426 426
427 mutex_lock(&da7219->lock); 427 mutex_lock(&da7219->ctrl_lock);
428 ret = regmap_raw_read(da7219->regmap, reg, &val, sizeof(val)); 428 ret = regmap_raw_read(da7219->regmap, reg, &val, sizeof(val));
429 mutex_unlock(&da7219->lock); 429 mutex_unlock(&da7219->ctrl_lock);
430 430
431 if (ret) 431 if (ret)
432 return ret; 432 return ret;
@@ -458,9 +458,9 @@ static int da7219_tonegen_freq_put(struct snd_kcontrol *kcontrol,
458 */ 458 */
459 val = cpu_to_le16(ucontrol->value.integer.value[0]); 459 val = cpu_to_le16(ucontrol->value.integer.value[0]);
460 460
461 mutex_lock(&da7219->lock); 461 mutex_lock(&da7219->ctrl_lock);
462 ret = regmap_raw_write(da7219->regmap, reg, &val, sizeof(val)); 462 ret = regmap_raw_write(da7219->regmap, reg, &val, sizeof(val));
463 mutex_unlock(&da7219->lock); 463 mutex_unlock(&da7219->ctrl_lock);
464 464
465 return ret; 465 return ret;
466} 466}
@@ -801,7 +801,7 @@ static int da7219_dai_event(struct snd_soc_dapm_widget *w,
801 ++i; 801 ++i;
802 msleep(50); 802 msleep(50);
803 } 803 }
804 } while ((i < DA7219_SRM_CHECK_RETRIES) && (!srm_lock)); 804 } while ((i < DA7219_SRM_CHECK_RETRIES) & (!srm_lock));
805 805
806 if (!srm_lock) 806 if (!srm_lock)
807 dev_warn(codec->dev, "SRM failed to lock\n"); 807 dev_warn(codec->dev, "SRM failed to lock\n");
@@ -1129,6 +1129,8 @@ static int da7219_set_dai_sysclk(struct snd_soc_dai *codec_dai,
1129 return -EINVAL; 1129 return -EINVAL;
1130 } 1130 }
1131 1131
1132 mutex_lock(&da7219->pll_lock);
1133
1132 switch (clk_id) { 1134 switch (clk_id) {
1133 case DA7219_CLKSRC_MCLK_SQR: 1135 case DA7219_CLKSRC_MCLK_SQR:
1134 snd_soc_update_bits(codec, DA7219_PLL_CTRL, 1136 snd_soc_update_bits(codec, DA7219_PLL_CTRL,
@@ -1141,6 +1143,7 @@ static int da7219_set_dai_sysclk(struct snd_soc_dai *codec_dai,
1141 break; 1143 break;
1142 default: 1144 default:
1143 dev_err(codec_dai->dev, "Unknown clock source %d\n", clk_id); 1145 dev_err(codec_dai->dev, "Unknown clock source %d\n", clk_id);
1146 mutex_unlock(&da7219->pll_lock);
1144 return -EINVAL; 1147 return -EINVAL;
1145 } 1148 }
1146 1149
@@ -1152,19 +1155,20 @@ static int da7219_set_dai_sysclk(struct snd_soc_dai *codec_dai,
1152 if (ret) { 1155 if (ret) {
1153 dev_err(codec_dai->dev, "Failed to set clock rate %d\n", 1156 dev_err(codec_dai->dev, "Failed to set clock rate %d\n",
1154 freq); 1157 freq);
1158 mutex_unlock(&da7219->pll_lock);
1155 return ret; 1159 return ret;
1156 } 1160 }
1157 } 1161 }
1158 1162
1159 da7219->mclk_rate = freq; 1163 da7219->mclk_rate = freq;
1160 1164
1165 mutex_unlock(&da7219->pll_lock);
1166
1161 return 0; 1167 return 0;
1162} 1168}
1163 1169
1164static int da7219_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, 1170int da7219_set_pll(struct snd_soc_codec *codec, int source, unsigned int fout)
1165 int source, unsigned int fref, unsigned int fout)
1166{ 1171{
1167 struct snd_soc_codec *codec = codec_dai->codec;
1168 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec); 1172 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec);
1169 1173
1170 u8 pll_ctrl, indiv_bits, indiv; 1174 u8 pll_ctrl, indiv_bits, indiv;
@@ -1237,6 +1241,20 @@ static int da7219_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
1237 return 0; 1241 return 0;
1238} 1242}
1239 1243
1244static int da7219_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
1245 int source, unsigned int fref, unsigned int fout)
1246{
1247 struct snd_soc_codec *codec = codec_dai->codec;
1248 struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec);
1249 int ret;
1250
1251 mutex_lock(&da7219->pll_lock);
1252 ret = da7219_set_pll(codec, source, fout);
1253 mutex_unlock(&da7219->pll_lock);
1254
1255 return ret;
1256}
1257
1240static int da7219_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) 1258static int da7219_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
1241{ 1259{
1242 struct snd_soc_codec *codec = codec_dai->codec; 1260 struct snd_soc_codec *codec = codec_dai->codec;
@@ -1741,7 +1759,8 @@ static int da7219_probe(struct snd_soc_codec *codec)
1741 unsigned int rev; 1759 unsigned int rev;
1742 int ret; 1760 int ret;
1743 1761
1744 mutex_init(&da7219->lock); 1762 mutex_init(&da7219->ctrl_lock);
1763 mutex_init(&da7219->pll_lock);
1745 1764
1746 /* Regulator configuration */ 1765 /* Regulator configuration */
1747 ret = da7219_handle_supplies(codec); 1766 ret = da7219_handle_supplies(codec);
diff --git a/sound/soc/codecs/da7219.h b/sound/soc/codecs/da7219.h
index 6baba7455fa1..8d6c3c8c8026 100644
--- a/sound/soc/codecs/da7219.h
+++ b/sound/soc/codecs/da7219.h
@@ -810,7 +810,8 @@ struct da7219_priv {
810 bool wakeup_source; 810 bool wakeup_source;
811 struct regulator_bulk_data supplies[DA7219_NUM_SUPPLIES]; 811 struct regulator_bulk_data supplies[DA7219_NUM_SUPPLIES];
812 struct regmap *regmap; 812 struct regmap *regmap;
813 struct mutex lock; 813 struct mutex ctrl_lock;
814 struct mutex pll_lock;
814 815
815 struct clk *mclk; 816 struct clk *mclk;
816 unsigned int mclk_rate; 817 unsigned int mclk_rate;
@@ -821,4 +822,6 @@ struct da7219_priv {
821 u8 gain_ramp_ctrl; 822 u8 gain_ramp_ctrl;
822}; 823};
823 824
825int da7219_set_pll(struct snd_soc_codec *codec, int source, unsigned int fout);
826
824#endif /* __DA7219_H */ 827#endif /* __DA7219_H */
diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c
new file mode 100644
index 000000000000..ecc02449c569
--- /dev/null
+++ b/sound/soc/codecs/es8316.c
@@ -0,0 +1,637 @@
1/*
2 * es8316.c -- es8316 ALSA SoC audio driver
3 * Copyright Everest Semiconductor Co.,Ltd
4 *
5 * Authors: David Yang <yangxiaohua@everest-semi.com>,
6 * Daniel Drake <drake@endlessm.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/module.h>
14#include <linux/acpi.h>
15#include <linux/delay.h>
16#include <linux/i2c.h>
17#include <linux/mod_devicetable.h>
18#include <linux/regmap.h>
19#include <sound/pcm.h>
20#include <sound/pcm_params.h>
21#include <sound/soc.h>
22#include <sound/soc-dapm.h>
23#include <sound/tlv.h>
24#include "es8316.h"
25
26/* In slave mode at single speed, the codec is documented as accepting 5
27 * MCLK/LRCK ratios, but we also add ratio 400, which is commonly used on
28 * Intel Cherry Trail platforms (19.2MHz MCLK, 48kHz LRCK).
29 */
30#define NR_SUPPORTED_MCLK_LRCK_RATIOS 6
31static const unsigned int supported_mclk_lrck_ratios[] = {
32 256, 384, 400, 512, 768, 1024
33};
34
35struct es8316_priv {
36 unsigned int sysclk;
37 unsigned int allowed_rates[NR_SUPPORTED_MCLK_LRCK_RATIOS];
38 struct snd_pcm_hw_constraint_list sysclk_constraints;
39};
40
41/*
42 * ES8316 controls
43 */
44static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(dac_vol_tlv, -9600, 50, 1);
45static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(adc_vol_tlv, -9600, 50, 1);
46static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(alc_max_gain_tlv, -650, 150, 0);
47static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(alc_min_gain_tlv, -1200, 150, 0);
48static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(alc_target_tlv, -1650, 150, 0);
49static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(hpmixer_gain_tlv, -1200, 150, 0);
50
51static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(adc_pga_gain_tlv,
52 0, 0, TLV_DB_SCALE_ITEM(-350, 0, 0),
53 1, 1, TLV_DB_SCALE_ITEM(0, 0, 0),
54 2, 2, TLV_DB_SCALE_ITEM(250, 0, 0),
55 3, 3, TLV_DB_SCALE_ITEM(450, 0, 0),
56 4, 4, TLV_DB_SCALE_ITEM(700, 0, 0),
57 5, 5, TLV_DB_SCALE_ITEM(1000, 0, 0),
58 6, 6, TLV_DB_SCALE_ITEM(1300, 0, 0),
59 7, 7, TLV_DB_SCALE_ITEM(1600, 0, 0),
60 8, 8, TLV_DB_SCALE_ITEM(1800, 0, 0),
61 9, 9, TLV_DB_SCALE_ITEM(2100, 0, 0),
62 10, 10, TLV_DB_SCALE_ITEM(2400, 0, 0),
63);
64
65static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(hpout_vol_tlv,
66 0, 0, TLV_DB_SCALE_ITEM(-4800, 0, 0),
67 1, 3, TLV_DB_SCALE_ITEM(-2400, 1200, 0),
68);
69
70static const char * const ng_type_txt[] =
71 { "Constant PGA Gain", "Mute ADC Output" };
72static const struct soc_enum ng_type =
73 SOC_ENUM_SINGLE(ES8316_ADC_ALC_NG, 6, 2, ng_type_txt);
74
75static const char * const adcpol_txt[] = { "Normal", "Invert" };
76static const struct soc_enum adcpol =
77 SOC_ENUM_SINGLE(ES8316_ADC_MUTE, 1, 2, adcpol_txt);
78static const char *const dacpol_txt[] =
79 { "Normal", "R Invert", "L Invert", "L + R Invert" };
80static const struct soc_enum dacpol =
81 SOC_ENUM_SINGLE(ES8316_DAC_SET1, 0, 4, dacpol_txt);
82
83static const struct snd_kcontrol_new es8316_snd_controls[] = {
84 SOC_DOUBLE_TLV("Headphone Playback Volume", ES8316_CPHP_ICAL_VOL,
85 4, 0, 3, 1, hpout_vol_tlv),
86 SOC_DOUBLE_TLV("Headphone Mixer Volume", ES8316_HPMIX_VOL,
87 0, 4, 7, 0, hpmixer_gain_tlv),
88
89 SOC_ENUM("Playback Polarity", dacpol),
90 SOC_DOUBLE_R_TLV("DAC Playback Volume", ES8316_DAC_VOLL,
91 ES8316_DAC_VOLR, 0, 0xc0, 1, dac_vol_tlv),
92 SOC_SINGLE("DAC Soft Ramp Switch", ES8316_DAC_SET1, 4, 1, 1),
93 SOC_SINGLE("DAC Soft Ramp Rate", ES8316_DAC_SET1, 2, 4, 0),
94 SOC_SINGLE("DAC Notch Filter Switch", ES8316_DAC_SET2, 6, 1, 0),
95 SOC_SINGLE("DAC Double Fs Switch", ES8316_DAC_SET2, 7, 1, 0),
96 SOC_SINGLE("DAC Stereo Enhancement", ES8316_DAC_SET3, 0, 7, 0),
97
98 SOC_ENUM("Capture Polarity", adcpol),
99 SOC_SINGLE("Mic Boost Switch", ES8316_ADC_D2SEPGA, 0, 1, 0),
100 SOC_SINGLE_TLV("ADC Capture Volume", ES8316_ADC_VOLUME,
101 0, 0xc0, 1, adc_vol_tlv),
102 SOC_SINGLE_TLV("ADC PGA Gain Volume", ES8316_ADC_PGAGAIN,
103 4, 10, 0, adc_pga_gain_tlv),
104 SOC_SINGLE("ADC Soft Ramp Switch", ES8316_ADC_MUTE, 4, 1, 0),
105 SOC_SINGLE("ADC Double Fs Switch", ES8316_ADC_DMIC, 4, 1, 0),
106
107 SOC_SINGLE("ALC Capture Switch", ES8316_ADC_ALC1, 6, 1, 0),
108 SOC_SINGLE_TLV("ALC Capture Max Volume", ES8316_ADC_ALC1, 0, 28, 0,
109 alc_max_gain_tlv),
110 SOC_SINGLE_TLV("ALC Capture Min Volume", ES8316_ADC_ALC2, 0, 28, 0,
111 alc_min_gain_tlv),
112 SOC_SINGLE_TLV("ALC Capture Target Volume", ES8316_ADC_ALC3, 4, 10, 0,
113 alc_target_tlv),
114 SOC_SINGLE("ALC Capture Hold Time", ES8316_ADC_ALC3, 0, 10, 0),
115 SOC_SINGLE("ALC Capture Decay Time", ES8316_ADC_ALC4, 4, 10, 0),
116 SOC_SINGLE("ALC Capture Attack Time", ES8316_ADC_ALC4, 0, 10, 0),
117 SOC_SINGLE("ALC Capture Noise Gate Switch", ES8316_ADC_ALC_NG,
118 5, 1, 0),
119 SOC_SINGLE("ALC Capture Noise Gate Threshold", ES8316_ADC_ALC_NG,
120 0, 31, 0),
121 SOC_ENUM("ALC Capture Noise Gate Type", ng_type),
122};
123
124/* Analog Input Mux */
125static const char * const es8316_analog_in_txt[] = {
126 "lin1-rin1",
127 "lin2-rin2",
128 "lin1-rin1 with 20db Boost",
129 "lin2-rin2 with 20db Boost"
130};
131static const unsigned int es8316_analog_in_values[] = { 0, 1, 2, 3 };
132static const struct soc_enum es8316_analog_input_enum =
133 SOC_VALUE_ENUM_SINGLE(ES8316_ADC_PDN_LINSEL, 4, 3,
134 ARRAY_SIZE(es8316_analog_in_txt),
135 es8316_analog_in_txt,
136 es8316_analog_in_values);
137static const struct snd_kcontrol_new es8316_analog_in_mux_controls =
138 SOC_DAPM_ENUM("Route", es8316_analog_input_enum);
139
140static const char * const es8316_dmic_txt[] = {
141 "dmic disable",
142 "dmic data at high level",
143 "dmic data at low level",
144};
145static const unsigned int es8316_dmic_values[] = { 0, 1, 2 };
146static const struct soc_enum es8316_dmic_src_enum =
147 SOC_VALUE_ENUM_SINGLE(ES8316_ADC_DMIC, 0, 3,
148 ARRAY_SIZE(es8316_dmic_txt),
149 es8316_dmic_txt,
150 es8316_dmic_values);
151static const struct snd_kcontrol_new es8316_dmic_src_controls =
152 SOC_DAPM_ENUM("Route", es8316_dmic_src_enum);
153
154/* hp mixer mux */
155static const char * const es8316_hpmux_texts[] = {
156 "lin1-rin1",
157 "lin2-rin2",
158 "lin-rin with Boost",
159 "lin-rin with Boost and PGA"
160};
161
162static const unsigned int es8316_hpmux_values[] = { 0, 1, 2, 3 };
163
164static SOC_ENUM_SINGLE_DECL(es8316_left_hpmux_enum, ES8316_HPMIX_SEL,
165 4, es8316_hpmux_texts);
166
167static const struct snd_kcontrol_new es8316_left_hpmux_controls =
168 SOC_DAPM_ENUM("Route", es8316_left_hpmux_enum);
169
170static SOC_ENUM_SINGLE_DECL(es8316_right_hpmux_enum, ES8316_HPMIX_SEL,
171 0, es8316_hpmux_texts);
172
173static const struct snd_kcontrol_new es8316_right_hpmux_controls =
174 SOC_DAPM_ENUM("Route", es8316_right_hpmux_enum);
175
176/* headphone Output Mixer */
177static const struct snd_kcontrol_new es8316_out_left_mix[] = {
178 SOC_DAPM_SINGLE("LLIN Switch", ES8316_HPMIX_SWITCH, 6, 1, 0),
179 SOC_DAPM_SINGLE("Left DAC Switch", ES8316_HPMIX_SWITCH, 7, 1, 0),
180};
181static const struct snd_kcontrol_new es8316_out_right_mix[] = {
182 SOC_DAPM_SINGLE("RLIN Switch", ES8316_HPMIX_SWITCH, 2, 1, 0),
183 SOC_DAPM_SINGLE("Right DAC Switch", ES8316_HPMIX_SWITCH, 3, 1, 0),
184};
185
186/* DAC data source mux */
187static const char * const es8316_dacsrc_texts[] = {
188 "LDATA TO LDAC, RDATA TO RDAC",
189 "LDATA TO LDAC, LDATA TO RDAC",
190 "RDATA TO LDAC, RDATA TO RDAC",
191 "RDATA TO LDAC, LDATA TO RDAC",
192};
193
194static const unsigned int es8316_dacsrc_values[] = { 0, 1, 2, 3 };
195
196static SOC_ENUM_SINGLE_DECL(es8316_dacsrc_mux_enum, ES8316_DAC_SET1,
197 6, es8316_dacsrc_texts);
198
199static const struct snd_kcontrol_new es8316_dacsrc_mux_controls =
200 SOC_DAPM_ENUM("Route", es8316_dacsrc_mux_enum);
201
202static const struct snd_soc_dapm_widget es8316_dapm_widgets[] = {
203 SND_SOC_DAPM_SUPPLY("Bias", ES8316_SYS_PDN, 3, 1, NULL, 0),
204 SND_SOC_DAPM_SUPPLY("Analog power", ES8316_SYS_PDN, 4, 1, NULL, 0),
205 SND_SOC_DAPM_SUPPLY("Mic Bias", ES8316_SYS_PDN, 5, 1, NULL, 0),
206
207 SND_SOC_DAPM_INPUT("DMIC"),
208 SND_SOC_DAPM_INPUT("MIC1"),
209 SND_SOC_DAPM_INPUT("MIC2"),
210
211 /* Input Mux */
212 SND_SOC_DAPM_MUX("Differential Mux", SND_SOC_NOPM, 0, 0,
213 &es8316_analog_in_mux_controls),
214
215 SND_SOC_DAPM_SUPPLY("ADC Vref", ES8316_SYS_PDN, 1, 1, NULL, 0),
216 SND_SOC_DAPM_SUPPLY("ADC bias", ES8316_SYS_PDN, 2, 1, NULL, 0),
217 SND_SOC_DAPM_SUPPLY("ADC Clock", ES8316_CLKMGR_CLKSW, 3, 0, NULL, 0),
218 SND_SOC_DAPM_PGA("Line input PGA", ES8316_ADC_PDN_LINSEL,
219 7, 1, NULL, 0),
220 SND_SOC_DAPM_ADC("Mono ADC", NULL, ES8316_ADC_PDN_LINSEL, 6, 1),
221 SND_SOC_DAPM_MUX("Digital Mic Mux", SND_SOC_NOPM, 0, 0,
222 &es8316_dmic_src_controls),
223
224 /* Digital Interface */
225 SND_SOC_DAPM_AIF_OUT("I2S OUT", "I2S1 Capture", 1,
226 ES8316_SERDATA_ADC, 6, 1),
227 SND_SOC_DAPM_AIF_IN("I2S IN", "I2S1 Playback", 0,
228 SND_SOC_NOPM, 0, 0),
229
230 SND_SOC_DAPM_MUX("DAC Source Mux", SND_SOC_NOPM, 0, 0,
231 &es8316_dacsrc_mux_controls),
232
233 SND_SOC_DAPM_SUPPLY("DAC Vref", ES8316_SYS_PDN, 0, 1, NULL, 0),
234 SND_SOC_DAPM_SUPPLY("DAC Clock", ES8316_CLKMGR_CLKSW, 2, 0, NULL, 0),
235 SND_SOC_DAPM_DAC("Right DAC", NULL, ES8316_DAC_PDN, 0, 1),
236 SND_SOC_DAPM_DAC("Left DAC", NULL, ES8316_DAC_PDN, 4, 1),
237
238 /* Headphone Output Side */
239 SND_SOC_DAPM_MUX("Left Headphone Mux", SND_SOC_NOPM, 0, 0,
240 &es8316_left_hpmux_controls),
241 SND_SOC_DAPM_MUX("Right Headphone Mux", SND_SOC_NOPM, 0, 0,
242 &es8316_right_hpmux_controls),
243 SND_SOC_DAPM_MIXER("Left Headphone Mixer", ES8316_HPMIX_PDN,
244 5, 1, &es8316_out_left_mix[0],
245 ARRAY_SIZE(es8316_out_left_mix)),
246 SND_SOC_DAPM_MIXER("Right Headphone Mixer", ES8316_HPMIX_PDN,
247 1, 1, &es8316_out_right_mix[0],
248 ARRAY_SIZE(es8316_out_right_mix)),
249 SND_SOC_DAPM_PGA("Left Headphone Mixer Out", ES8316_HPMIX_PDN,
250 4, 1, NULL, 0),
251 SND_SOC_DAPM_PGA("Right Headphone Mixer Out", ES8316_HPMIX_PDN,
252 0, 1, NULL, 0),
253
254 SND_SOC_DAPM_OUT_DRV("Left Headphone Charge Pump", ES8316_CPHP_OUTEN,
255 6, 0, NULL, 0),
256 SND_SOC_DAPM_OUT_DRV("Right Headphone Charge Pump", ES8316_CPHP_OUTEN,
257 2, 0, NULL, 0),
258 SND_SOC_DAPM_SUPPLY("Headphone Charge Pump", ES8316_CPHP_PDN2,
259 5, 1, NULL, 0),
260 SND_SOC_DAPM_SUPPLY("Headphone Charge Pump Clock", ES8316_CLKMGR_CLKSW,
261 4, 0, NULL, 0),
262
263 SND_SOC_DAPM_OUT_DRV("Left Headphone Driver", ES8316_CPHP_OUTEN,
264 5, 0, NULL, 0),
265 SND_SOC_DAPM_OUT_DRV("Right Headphone Driver", ES8316_CPHP_OUTEN,
266 1, 0, NULL, 0),
267 SND_SOC_DAPM_SUPPLY("Headphone Out", ES8316_CPHP_PDN1, 2, 1, NULL, 0),
268
269 /* pdn_Lical and pdn_Rical bits are documented as Reserved, but must
270 * be explicitly unset in order to enable HP output
271 */
272 SND_SOC_DAPM_SUPPLY("Left Headphone ical", ES8316_CPHP_ICAL_VOL,
273 7, 1, NULL, 0),
274 SND_SOC_DAPM_SUPPLY("Right Headphone ical", ES8316_CPHP_ICAL_VOL,
275 3, 1, NULL, 0),
276
277 SND_SOC_DAPM_OUTPUT("HPOL"),
278 SND_SOC_DAPM_OUTPUT("HPOR"),
279};
280
281static const struct snd_soc_dapm_route es8316_dapm_routes[] = {
282 /* Recording */
283 {"MIC1", NULL, "Mic Bias"},
284 {"MIC2", NULL, "Mic Bias"},
285 {"MIC1", NULL, "Bias"},
286 {"MIC2", NULL, "Bias"},
287 {"MIC1", NULL, "Analog power"},
288 {"MIC2", NULL, "Analog power"},
289
290 {"Differential Mux", "lin1-rin1", "MIC1"},
291 {"Differential Mux", "lin2-rin2", "MIC2"},
292 {"Line input PGA", NULL, "Differential Mux"},
293
294 {"Mono ADC", NULL, "ADC Clock"},
295 {"Mono ADC", NULL, "ADC Vref"},
296 {"Mono ADC", NULL, "ADC bias"},
297 {"Mono ADC", NULL, "Line input PGA"},
298
299 /* It's not clear why, but to avoid recording only silence,
300 * the DAC clock must be running for the ADC to work.
301 */
302 {"Mono ADC", NULL, "DAC Clock"},
303
304 {"Digital Mic Mux", "dmic disable", "Mono ADC"},
305
306 {"I2S OUT", NULL, "Digital Mic Mux"},
307
308 /* Playback */
309 {"DAC Source Mux", "LDATA TO LDAC, RDATA TO RDAC", "I2S IN"},
310
311 {"Left DAC", NULL, "DAC Clock"},
312 {"Right DAC", NULL, "DAC Clock"},
313
314 {"Left DAC", NULL, "DAC Vref"},
315 {"Right DAC", NULL, "DAC Vref"},
316
317 {"Left DAC", NULL, "DAC Source Mux"},
318 {"Right DAC", NULL, "DAC Source Mux"},
319
320 {"Left Headphone Mux", "lin-rin with Boost and PGA", "Line input PGA"},
321 {"Right Headphone Mux", "lin-rin with Boost and PGA", "Line input PGA"},
322
323 {"Left Headphone Mixer", "LLIN Switch", "Left Headphone Mux"},
324 {"Left Headphone Mixer", "Left DAC Switch", "Left DAC"},
325
326 {"Right Headphone Mixer", "RLIN Switch", "Right Headphone Mux"},
327 {"Right Headphone Mixer", "Right DAC Switch", "Right DAC"},
328
329 {"Left Headphone Mixer Out", NULL, "Left Headphone Mixer"},
330 {"Right Headphone Mixer Out", NULL, "Right Headphone Mixer"},
331
332 {"Left Headphone Charge Pump", NULL, "Left Headphone Mixer Out"},
333 {"Right Headphone Charge Pump", NULL, "Right Headphone Mixer Out"},
334
335 {"Left Headphone Charge Pump", NULL, "Headphone Charge Pump"},
336 {"Right Headphone Charge Pump", NULL, "Headphone Charge Pump"},
337
338 {"Left Headphone Charge Pump", NULL, "Headphone Charge Pump Clock"},
339 {"Right Headphone Charge Pump", NULL, "Headphone Charge Pump Clock"},
340
341 {"Left Headphone Driver", NULL, "Left Headphone Charge Pump"},
342 {"Right Headphone Driver", NULL, "Right Headphone Charge Pump"},
343
344 {"HPOL", NULL, "Left Headphone Driver"},
345 {"HPOR", NULL, "Right Headphone Driver"},
346
347 {"HPOL", NULL, "Left Headphone ical"},
348 {"HPOR", NULL, "Right Headphone ical"},
349
350 {"Headphone Out", NULL, "Bias"},
351 {"Headphone Out", NULL, "Analog power"},
352 {"HPOL", NULL, "Headphone Out"},
353 {"HPOR", NULL, "Headphone Out"},
354};
355
356static int es8316_set_dai_sysclk(struct snd_soc_dai *codec_dai,
357 int clk_id, unsigned int freq, int dir)
358{
359 struct snd_soc_codec *codec = codec_dai->codec;
360 struct es8316_priv *es8316 = snd_soc_codec_get_drvdata(codec);
361 int i;
362 int count = 0;
363
364 es8316->sysclk = freq;
365
366 if (freq == 0)
367 return 0;
368
369 /* Limit supported sample rates to ones that can be autodetected
370 * by the codec running in slave mode.
371 */
372 for (i = 0; i < NR_SUPPORTED_MCLK_LRCK_RATIOS; i++) {
373 const unsigned int ratio = supported_mclk_lrck_ratios[i];
374
375 if (freq % ratio == 0)
376 es8316->allowed_rates[count++] = freq / ratio;
377 }
378
379 es8316->sysclk_constraints.list = es8316->allowed_rates;
380 es8316->sysclk_constraints.count = count;
381
382 return 0;
383}
384
385static int es8316_set_dai_fmt(struct snd_soc_dai *codec_dai,
386 unsigned int fmt)
387{
388 struct snd_soc_codec *codec = codec_dai->codec;
389 u8 serdata1 = 0;
390 u8 serdata2 = 0;
391 u8 clksw;
392 u8 mask;
393
394 if ((fmt & SND_SOC_DAIFMT_MASTER_MASK) != SND_SOC_DAIFMT_CBS_CFS) {
395 dev_err(codec->dev, "Codec driver only supports slave mode\n");
396 return -EINVAL;
397 }
398
399 if ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) != SND_SOC_DAIFMT_I2S) {
400 dev_err(codec->dev, "Codec driver only supports I2S format\n");
401 return -EINVAL;
402 }
403
404 /* Clock inversion */
405 switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
406 case SND_SOC_DAIFMT_NB_NF:
407 break;
408 case SND_SOC_DAIFMT_IB_IF:
409 serdata1 |= ES8316_SERDATA1_BCLK_INV;
410 serdata2 |= ES8316_SERDATA2_ADCLRP;
411 break;
412 case SND_SOC_DAIFMT_IB_NF:
413 serdata1 |= ES8316_SERDATA1_BCLK_INV;
414 break;
415 case SND_SOC_DAIFMT_NB_IF:
416 serdata2 |= ES8316_SERDATA2_ADCLRP;
417 break;
418 default:
419 return -EINVAL;
420 }
421
422 mask = ES8316_SERDATA1_MASTER | ES8316_SERDATA1_BCLK_INV;
423 snd_soc_update_bits(codec, ES8316_SERDATA1, mask, serdata1);
424
425 mask = ES8316_SERDATA2_FMT_MASK | ES8316_SERDATA2_ADCLRP;
426 snd_soc_update_bits(codec, ES8316_SERDATA_ADC, mask, serdata2);
427 snd_soc_update_bits(codec, ES8316_SERDATA_DAC, mask, serdata2);
428
429 /* Enable BCLK and MCLK inputs in slave mode */
430 clksw = ES8316_CLKMGR_CLKSW_MCLK_ON | ES8316_CLKMGR_CLKSW_BCLK_ON;
431 snd_soc_update_bits(codec, ES8316_CLKMGR_CLKSW, clksw, clksw);
432
433 return 0;
434}
435
436static int es8316_pcm_startup(struct snd_pcm_substream *substream,
437 struct snd_soc_dai *dai)
438{
439 struct snd_soc_codec *codec = dai->codec;
440 struct es8316_priv *es8316 = snd_soc_codec_get_drvdata(codec);
441
442 if (es8316->sysclk == 0) {
443 dev_err(codec->dev, "No sysclk provided\n");
444 return -EINVAL;
445 }
446
447 /* The set of sample rates that can be supported depends on the
448 * MCLK supplied to the CODEC.
449 */
450 snd_pcm_hw_constraint_list(substream->runtime, 0,
451 SNDRV_PCM_HW_PARAM_RATE,
452 &es8316->sysclk_constraints);
453
454 return 0;
455}
456
457static int es8316_pcm_hw_params(struct snd_pcm_substream *substream,
458 struct snd_pcm_hw_params *params,
459 struct snd_soc_dai *dai)
460{
461 struct snd_soc_pcm_runtime *rtd = substream->private_data;
462 struct snd_soc_codec *codec = rtd->codec;
463 struct es8316_priv *es8316 = snd_soc_codec_get_drvdata(codec);
464 u8 wordlen = 0;
465
466 if (!es8316->sysclk) {
467 dev_err(codec->dev, "No MCLK configured\n");
468 return -EINVAL;
469 }
470
471 switch (params_format(params)) {
472 case SNDRV_PCM_FORMAT_S16_LE:
473 wordlen = ES8316_SERDATA2_LEN_16;
474 break;
475 case SNDRV_PCM_FORMAT_S20_3LE:
476 wordlen = ES8316_SERDATA2_LEN_20;
477 break;
478 case SNDRV_PCM_FORMAT_S24_LE:
479 wordlen = ES8316_SERDATA2_LEN_24;
480 break;
481 case SNDRV_PCM_FORMAT_S32_LE:
482 wordlen = ES8316_SERDATA2_LEN_32;
483 break;
484 default:
485 return -EINVAL;
486 }
487
488 snd_soc_update_bits(codec, ES8316_SERDATA_DAC,
489 ES8316_SERDATA2_LEN_MASK, wordlen);
490 snd_soc_update_bits(codec, ES8316_SERDATA_ADC,
491 ES8316_SERDATA2_LEN_MASK, wordlen);
492 return 0;
493}
494
495static int es8316_mute(struct snd_soc_dai *dai, int mute)
496{
497 snd_soc_update_bits(dai->codec, ES8316_DAC_SET1, 0x20,
498 mute ? 0x20 : 0);
499 return 0;
500}
501
502#define ES8316_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
503 SNDRV_PCM_FMTBIT_S24_LE)
504
505static struct snd_soc_dai_ops es8316_ops = {
506 .startup = es8316_pcm_startup,
507 .hw_params = es8316_pcm_hw_params,
508 .set_fmt = es8316_set_dai_fmt,
509 .set_sysclk = es8316_set_dai_sysclk,
510 .digital_mute = es8316_mute,
511};
512
513static struct snd_soc_dai_driver es8316_dai = {
514 .name = "ES8316 HiFi",
515 .playback = {
516 .stream_name = "Playback",
517 .channels_min = 1,
518 .channels_max = 2,
519 .rates = SNDRV_PCM_RATE_8000_48000,
520 .formats = ES8316_FORMATS,
521 },
522 .capture = {
523 .stream_name = "Capture",
524 .channels_min = 1,
525 .channels_max = 2,
526 .rates = SNDRV_PCM_RATE_8000_48000,
527 .formats = ES8316_FORMATS,
528 },
529 .ops = &es8316_ops,
530 .symmetric_rates = 1,
531};
532
533static int es8316_probe(struct snd_soc_codec *codec)
534{
535 /* Reset codec and enable current state machine */
536 snd_soc_write(codec, ES8316_RESET, 0x3f);
537 usleep_range(5000, 5500);
538 snd_soc_write(codec, ES8316_RESET, ES8316_RESET_CSM_ON);
539 msleep(30);
540
541 /*
542 * Documentation is unclear, but this value from the vendor driver is
543 * needed otherwise audio output is silent.
544 */
545 snd_soc_write(codec, ES8316_SYS_VMIDSEL, 0xff);
546
547 /*
548 * Documentation for this register is unclear and incomplete,
549 * but here is a vendor-provided value that improves volume
550 * and quality for Intel CHT platforms.
551 */
552 snd_soc_write(codec, ES8316_CLKMGR_ADCOSR, 0x32);
553
554 return 0;
555}
556
557static struct snd_soc_codec_driver soc_codec_dev_es8316 = {
558 .probe = es8316_probe,
559 .idle_bias_off = true,
560
561 .component_driver = {
562 .controls = es8316_snd_controls,
563 .num_controls = ARRAY_SIZE(es8316_snd_controls),
564 .dapm_widgets = es8316_dapm_widgets,
565 .num_dapm_widgets = ARRAY_SIZE(es8316_dapm_widgets),
566 .dapm_routes = es8316_dapm_routes,
567 .num_dapm_routes = ARRAY_SIZE(es8316_dapm_routes),
568 },
569};
570
571static const struct regmap_config es8316_regmap = {
572 .reg_bits = 8,
573 .val_bits = 8,
574 .max_register = 0x53,
575 .cache_type = REGCACHE_RBTREE,
576};
577
578static int es8316_i2c_probe(struct i2c_client *i2c_client,
579 const struct i2c_device_id *id)
580{
581 struct es8316_priv *es8316;
582 struct regmap *regmap;
583
584 es8316 = devm_kzalloc(&i2c_client->dev, sizeof(struct es8316_priv),
585 GFP_KERNEL);
586 if (es8316 == NULL)
587 return -ENOMEM;
588
589 i2c_set_clientdata(i2c_client, es8316);
590
591 regmap = devm_regmap_init_i2c(i2c_client, &es8316_regmap);
592 if (IS_ERR(regmap))
593 return PTR_ERR(regmap);
594
595 return snd_soc_register_codec(&i2c_client->dev, &soc_codec_dev_es8316,
596 &es8316_dai, 1);
597}
598
599static int es8316_i2c_remove(struct i2c_client *client)
600{
601 snd_soc_unregister_codec(&client->dev);
602 return 0;
603}
604
605static const struct i2c_device_id es8316_i2c_id[] = {
606 {"es8316", 0 },
607 {}
608};
609MODULE_DEVICE_TABLE(i2c, es8316_i2c_id);
610
611static const struct of_device_id es8316_of_match[] = {
612 { .compatible = "everest,es8316", },
613 {},
614};
615MODULE_DEVICE_TABLE(of, es8316_of_match);
616
617static const struct acpi_device_id es8316_acpi_match[] = {
618 {"ESSX8316", 0},
619 {},
620};
621MODULE_DEVICE_TABLE(acpi, es8316_acpi_match);
622
623static struct i2c_driver es8316_i2c_driver = {
624 .driver = {
625 .name = "es8316",
626 .acpi_match_table = ACPI_PTR(es8316_acpi_match),
627 .of_match_table = of_match_ptr(es8316_of_match),
628 },
629 .probe = es8316_i2c_probe,
630 .remove = es8316_i2c_remove,
631 .id_table = es8316_i2c_id,
632};
633module_i2c_driver(es8316_i2c_driver);
634
635MODULE_DESCRIPTION("Everest Semi ES8316 ALSA SoC Codec Driver");
636MODULE_AUTHOR("David Yang <yangxiaohua@everest-semi.com>");
637MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/codecs/es8316.h b/sound/soc/codecs/es8316.h
new file mode 100644
index 000000000000..6bcdd63ea459
--- /dev/null
+++ b/sound/soc/codecs/es8316.h
@@ -0,0 +1,129 @@
1/*
2 * Copyright Everest Semiconductor Co.,Ltd
3 *
4 * Author: David Yang <yangxiaohua@everest-semi.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 */
11
12#ifndef _ES8316_H
13#define _ES8316_H
14
15/*
16 * ES8316 register space
17 */
18
19/* Reset Control */
20#define ES8316_RESET 0x00
21
22/* Clock Management */
23#define ES8316_CLKMGR_CLKSW 0x01
24#define ES8316_CLKMGR_CLKSEL 0x02
25#define ES8316_CLKMGR_ADCOSR 0x03
26#define ES8316_CLKMGR_ADCDIV1 0x04
27#define ES8316_CLKMGR_ADCDIV2 0x05
28#define ES8316_CLKMGR_DACDIV1 0x06
29#define ES8316_CLKMGR_DACDIV2 0x07
30#define ES8316_CLKMGR_CPDIV 0x08
31
32/* Serial Data Port Control */
33#define ES8316_SERDATA1 0x09
34#define ES8316_SERDATA_ADC 0x0a
35#define ES8316_SERDATA_DAC 0x0b
36
37/* System Control */
38#define ES8316_SYS_VMIDSEL 0x0c
39#define ES8316_SYS_PDN 0x0d
40#define ES8316_SYS_LP1 0x0e
41#define ES8316_SYS_LP2 0x0f
42#define ES8316_SYS_VMIDLOW 0x10
43#define ES8316_SYS_VSEL 0x11
44#define ES8316_SYS_REF 0x12
45
46/* Headphone Mixer */
47#define ES8316_HPMIX_SEL 0x13
48#define ES8316_HPMIX_SWITCH 0x14
49#define ES8316_HPMIX_PDN 0x15
50#define ES8316_HPMIX_VOL 0x16
51
52/* Charge Pump Headphone driver */
53#define ES8316_CPHP_OUTEN 0x17
54#define ES8316_CPHP_ICAL_VOL 0x18
55#define ES8316_CPHP_PDN1 0x19
56#define ES8316_CPHP_PDN2 0x1a
57#define ES8316_CPHP_LDOCTL 0x1b
58
59/* Calibration */
60#define ES8316_CAL_TYPE 0x1c
61#define ES8316_CAL_SET 0x1d
62#define ES8316_CAL_HPLIV 0x1e
63#define ES8316_CAL_HPRIV 0x1f
64#define ES8316_CAL_HPLMV 0x20
65#define ES8316_CAL_HPRMV 0x21
66
67/* ADC Control */
68#define ES8316_ADC_PDN_LINSEL 0x22
69#define ES8316_ADC_PGAGAIN 0x23
70#define ES8316_ADC_D2SEPGA 0x24
71#define ES8316_ADC_DMIC 0x25
72#define ES8316_ADC_MUTE 0x26
73#define ES8316_ADC_VOLUME 0x27
74#define ES8316_ADC_ALC1 0x29
75#define ES8316_ADC_ALC2 0x2a
76#define ES8316_ADC_ALC3 0x2b
77#define ES8316_ADC_ALC4 0x2c
78#define ES8316_ADC_ALC5 0x2d
79#define ES8316_ADC_ALC_NG 0x2e
80
81/* DAC Control */
82#define ES8316_DAC_PDN 0x2f
83#define ES8316_DAC_SET1 0x30
84#define ES8316_DAC_SET2 0x31
85#define ES8316_DAC_SET3 0x32
86#define ES8316_DAC_VOLL 0x33
87#define ES8316_DAC_VOLR 0x34
88
89/* GPIO */
90#define ES8316_GPIO_SEL 0x4d
91#define ES8316_GPIO_DEBOUNCE 0x4e
92#define ES8316_GPIO_FLAG 0x4f
93
94/* Test mode */
95#define ES8316_TESTMODE 0x50
96#define ES8316_TEST1 0x51
97#define ES8316_TEST2 0x52
98#define ES8316_TEST3 0x53
99
100/*
101 * Field definitions
102 */
103
104/* ES8316_RESET */
105#define ES8316_RESET_CSM_ON 0x80
106
107/* ES8316_CLKMGR_CLKSW */
108#define ES8316_CLKMGR_CLKSW_MCLK_ON 0x40
109#define ES8316_CLKMGR_CLKSW_BCLK_ON 0x20
110
111/* ES8316_SERDATA1 */
112#define ES8316_SERDATA1_MASTER 0x80
113#define ES8316_SERDATA1_BCLK_INV 0x20
114
115/* ES8316_SERDATA_ADC and _DAC */
116#define ES8316_SERDATA2_FMT_MASK 0x3
117#define ES8316_SERDATA2_FMT_I2S 0x00
118#define ES8316_SERDATA2_FMT_LEFTJ 0x01
119#define ES8316_SERDATA2_FMT_RIGHTJ 0x02
120#define ES8316_SERDATA2_FMT_PCM 0x03
121#define ES8316_SERDATA2_ADCLRP 0x20
122#define ES8316_SERDATA2_LEN_MASK 0x1c
123#define ES8316_SERDATA2_LEN_24 0x00
124#define ES8316_SERDATA2_LEN_20 0x04
125#define ES8316_SERDATA2_LEN_18 0x08
126#define ES8316_SERDATA2_LEN_16 0x0c
127#define ES8316_SERDATA2_LEN_32 0x10
128
129#endif
diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
index 8c5ae1fc23a9..22ed0dc88f0a 100644
--- a/sound/soc/codecs/hdmi-codec.c
+++ b/sound/soc/codecs/hdmi-codec.c
@@ -25,17 +25,6 @@
25 25
26#include <drm/drm_crtc.h> /* This is only to get MAX_ELD_BYTES */ 26#include <drm/drm_crtc.h> /* This is only to get MAX_ELD_BYTES */
27 27
28struct hdmi_device {
29 struct device *dev;
30 struct list_head list;
31 int cnt;
32};
33#define pos_to_hdmi_device(pos) container_of((pos), struct hdmi_device, list)
34LIST_HEAD(hdmi_device_list);
35static DEFINE_MUTEX(hdmi_mutex);
36
37#define DAI_NAME_SIZE 16
38
39#define HDMI_CODEC_CHMAP_IDX_UNKNOWN -1 28#define HDMI_CODEC_CHMAP_IDX_UNKNOWN -1
40 29
41struct hdmi_codec_channel_map_table { 30struct hdmi_codec_channel_map_table {
@@ -293,7 +282,6 @@ struct hdmi_codec_priv {
293 struct hdmi_codec_daifmt daifmt[2]; 282 struct hdmi_codec_daifmt daifmt[2];
294 struct mutex current_stream_lock; 283 struct mutex current_stream_lock;
295 struct snd_pcm_substream *current_stream; 284 struct snd_pcm_substream *current_stream;
296 struct snd_pcm_hw_constraint_list ratec;
297 uint8_t eld[MAX_ELD_BYTES]; 285 uint8_t eld[MAX_ELD_BYTES];
298 struct snd_pcm_chmap *chmap_info; 286 struct snd_pcm_chmap *chmap_info;
299 unsigned int chmap_idx; 287 unsigned int chmap_idx;
@@ -702,6 +690,7 @@ static int hdmi_codec_pcm_new(struct snd_soc_pcm_runtime *rtd,
702} 690}
703 691
704static struct snd_soc_dai_driver hdmi_i2s_dai = { 692static struct snd_soc_dai_driver hdmi_i2s_dai = {
693 .name = "i2s-hifi",
705 .id = DAI_ID_I2S, 694 .id = DAI_ID_I2S,
706 .playback = { 695 .playback = {
707 .stream_name = "Playback", 696 .stream_name = "Playback",
@@ -716,6 +705,7 @@ static struct snd_soc_dai_driver hdmi_i2s_dai = {
716}; 705};
717 706
718static const struct snd_soc_dai_driver hdmi_spdif_dai = { 707static const struct snd_soc_dai_driver hdmi_spdif_dai = {
708 .name = "spdif-hifi",
719 .id = DAI_ID_SPDIF, 709 .id = DAI_ID_SPDIF,
720 .playback = { 710 .playback = {
721 .stream_name = "Playback", 711 .stream_name = "Playback",
@@ -728,30 +718,16 @@ static const struct snd_soc_dai_driver hdmi_spdif_dai = {
728 .pcm_new = hdmi_codec_pcm_new, 718 .pcm_new = hdmi_codec_pcm_new,
729}; 719};
730 720
731static char hdmi_dai_name[][DAI_NAME_SIZE] = { 721static int hdmi_of_xlate_dai_id(struct snd_soc_component *component,
732 "hdmi-hifi.0", 722 struct device_node *endpoint)
733 "hdmi-hifi.1",
734 "hdmi-hifi.2",
735 "hdmi-hifi.3",
736};
737
738static int hdmi_of_xlate_dai_name(struct snd_soc_component *component,
739 struct of_phandle_args *args,
740 const char **dai_name)
741{ 723{
742 int id; 724 struct hdmi_codec_priv *hcp = snd_soc_component_get_drvdata(component);
725 int ret = -ENOTSUPP; /* see snd_soc_get_dai_id() */
743 726
744 if (args->args_count) 727 if (hcp->hcd.ops->get_dai_id)
745 id = args->args[0]; 728 ret = hcp->hcd.ops->get_dai_id(component, endpoint);
746 else
747 id = 0;
748 729
749 if (id < ARRAY_SIZE(hdmi_dai_name)) { 730 return ret;
750 *dai_name = hdmi_dai_name[id];
751 return 0;
752 }
753
754 return -EAGAIN;
755} 731}
756 732
757static struct snd_soc_codec_driver hdmi_codec = { 733static struct snd_soc_codec_driver hdmi_codec = {
@@ -762,7 +738,7 @@ static struct snd_soc_codec_driver hdmi_codec = {
762 .num_dapm_widgets = ARRAY_SIZE(hdmi_widgets), 738 .num_dapm_widgets = ARRAY_SIZE(hdmi_widgets),
763 .dapm_routes = hdmi_routes, 739 .dapm_routes = hdmi_routes,
764 .num_dapm_routes = ARRAY_SIZE(hdmi_routes), 740 .num_dapm_routes = ARRAY_SIZE(hdmi_routes),
765 .of_xlate_dai_name = hdmi_of_xlate_dai_name, 741 .of_xlate_dai_id = hdmi_of_xlate_dai_id,
766 }, 742 },
767}; 743};
768 744
@@ -771,8 +747,6 @@ static int hdmi_codec_probe(struct platform_device *pdev)
771 struct hdmi_codec_pdata *hcd = pdev->dev.platform_data; 747 struct hdmi_codec_pdata *hcd = pdev->dev.platform_data;
772 struct device *dev = &pdev->dev; 748 struct device *dev = &pdev->dev;
773 struct hdmi_codec_priv *hcp; 749 struct hdmi_codec_priv *hcp;
774 struct hdmi_device *hd;
775 struct list_head *pos;
776 int dai_count, i = 0; 750 int dai_count, i = 0;
777 int ret; 751 int ret;
778 752
@@ -794,35 +768,6 @@ static int hdmi_codec_probe(struct platform_device *pdev)
794 if (!hcp) 768 if (!hcp)
795 return -ENOMEM; 769 return -ENOMEM;
796 770
797 hd = NULL;
798 mutex_lock(&hdmi_mutex);
799 list_for_each(pos, &hdmi_device_list) {
800 struct hdmi_device *tmp = pos_to_hdmi_device(pos);
801
802 if (tmp->dev == dev->parent) {
803 hd = tmp;
804 break;
805 }
806 }
807
808 if (!hd) {
809 hd = devm_kzalloc(dev, sizeof(*hd), GFP_KERNEL);
810 if (!hd) {
811 mutex_unlock(&hdmi_mutex);
812 return -ENOMEM;
813 }
814
815 hd->dev = dev->parent;
816
817 list_add_tail(&hd->list, &hdmi_device_list);
818 }
819 mutex_unlock(&hdmi_mutex);
820
821 if (hd->cnt >= ARRAY_SIZE(hdmi_dai_name)) {
822 dev_err(dev, "too many hdmi codec are deteced\n");
823 return -EINVAL;
824 }
825
826 hcp->hcd = *hcd; 771 hcp->hcd = *hcd;
827 mutex_init(&hcp->current_stream_lock); 772 mutex_init(&hcp->current_stream_lock);
828 773
@@ -835,14 +780,11 @@ static int hdmi_codec_probe(struct platform_device *pdev)
835 hcp->daidrv[i] = hdmi_i2s_dai; 780 hcp->daidrv[i] = hdmi_i2s_dai;
836 hcp->daidrv[i].playback.channels_max = 781 hcp->daidrv[i].playback.channels_max =
837 hcd->max_i2s_channels; 782 hcd->max_i2s_channels;
838 hcp->daidrv[i].name = hdmi_dai_name[hd->cnt++];
839 i++; 783 i++;
840 } 784 }
841 785
842 if (hcd->spdif) { 786 if (hcd->spdif)
843 hcp->daidrv[i] = hdmi_spdif_dai; 787 hcp->daidrv[i] = hdmi_spdif_dai;
844 hcp->daidrv[i].name = hdmi_dai_name[hd->cnt++];
845 }
846 788
847 ret = snd_soc_register_codec(dev, &hdmi_codec, hcp->daidrv, 789 ret = snd_soc_register_codec(dev, &hdmi_codec, hcp->daidrv,
848 dai_count); 790 dai_count);
@@ -859,20 +801,8 @@ static int hdmi_codec_probe(struct platform_device *pdev)
859static int hdmi_codec_remove(struct platform_device *pdev) 801static int hdmi_codec_remove(struct platform_device *pdev)
860{ 802{
861 struct device *dev = &pdev->dev; 803 struct device *dev = &pdev->dev;
862 struct list_head *pos;
863 struct hdmi_codec_priv *hcp; 804 struct hdmi_codec_priv *hcp;
864 805
865 mutex_lock(&hdmi_mutex);
866 list_for_each(pos, &hdmi_device_list) {
867 struct hdmi_device *tmp = pos_to_hdmi_device(pos);
868
869 if (tmp->dev == dev->parent) {
870 list_del(pos);
871 break;
872 }
873 }
874 mutex_unlock(&hdmi_mutex);
875
876 hcp = dev_get_drvdata(dev); 806 hcp = dev_get_drvdata(dev);
877 kfree(hcp->chmap_info); 807 kfree(hcp->chmap_info);
878 snd_soc_unregister_codec(dev); 808 snd_soc_unregister_codec(dev);
diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
index 0247edc9c84e..2a40a69a7513 100644
--- a/sound/soc/codecs/max9867.c
+++ b/sound/soc/codecs/max9867.c
@@ -132,7 +132,7 @@ enum rates {
132 pcm_rate_48, max_pcm_rate, 132 pcm_rate_48, max_pcm_rate,
133}; 133};
134 134
135struct ni_div_rates { 135static const struct ni_div_rates {
136 u32 mclk; 136 u32 mclk;
137 u16 ni[max_pcm_rate]; 137 u16 ni[max_pcm_rate];
138} ni_div[] = { 138} ni_div[] = {
diff --git a/sound/soc/codecs/msm8916-wcd-analog.c b/sound/soc/codecs/msm8916-wcd-analog.c
index d8e8590746af..a78802920c3c 100644
--- a/sound/soc/codecs/msm8916-wcd-analog.c
+++ b/sound/soc/codecs/msm8916-wcd-analog.c
@@ -223,8 +223,8 @@ struct pm8916_wcd_analog_priv {
223 u16 codec_version; 223 u16 codec_version;
224 struct clk *mclk; 224 struct clk *mclk;
225 struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)]; 225 struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)];
226 bool micbias1_cap_mode; 226 unsigned int micbias1_cap_mode;
227 bool micbias2_cap_mode; 227 unsigned int micbias2_cap_mode;
228}; 228};
229 229
230static const char *const adc2_mux_text[] = { "ZERO", "INP2", "INP3" }; 230static const char *const adc2_mux_text[] = { "ZERO", "INP2", "INP3" };
@@ -285,7 +285,7 @@ static void pm8916_wcd_analog_micbias_enable(struct snd_soc_codec *codec)
285 285
286static int pm8916_wcd_analog_enable_micbias_ext(struct snd_soc_codec 286static int pm8916_wcd_analog_enable_micbias_ext(struct snd_soc_codec
287 *codec, int event, 287 *codec, int event,
288 int reg, u32 cap_mode) 288 int reg, unsigned int cap_mode)
289{ 289{
290 switch (event) { 290 switch (event) {
291 case SND_SOC_DAPM_POST_PMU: 291 case SND_SOC_DAPM_POST_PMU:
diff --git a/sound/soc/codecs/nau8824.c b/sound/soc/codecs/nau8824.c
index cca974d26136..3a309b18035e 100644
--- a/sound/soc/codecs/nau8824.c
+++ b/sound/soc/codecs/nau8824.c
@@ -1125,6 +1125,57 @@ static int nau8824_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
1125} 1125}
1126 1126
1127/** 1127/**
1128 * nau8824_set_tdm_slot - configure DAI TDM.
1129 * @dai: DAI
1130 * @tx_mask: Bitmask representing active TX slots. Ex.
1131 * 0xf for normal 4 channel TDM.
1132 * 0xf0 for shifted 4 channel TDM
1133 * @rx_mask: Bitmask [0:1] representing active DACR RX slots.
1134 * Bitmask [2:3] representing active DACL RX slots.
1135 * 00=CH0,01=CH1,10=CH2,11=CH3. Ex.
1136 * 0xf for DACL/R selecting TDM CH3.
1137 * 0xf0 for DACL/R selecting shifted TDM CH3.
1138 * @slots: Number of slots in use.
1139 * @slot_width: Width in bits for each slot.
1140 *
1141 * Configures a DAI for TDM operation. Only support 4 slots TDM.
1142 */
1143static int nau8824_set_tdm_slot(struct snd_soc_dai *dai,
1144 unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width)
1145{
1146 struct snd_soc_codec *codec = dai->codec;
1147 struct nau8824 *nau8824 = snd_soc_codec_get_drvdata(codec);
1148 unsigned int tslot_l = 0, ctrl_val = 0;
1149
1150 if (slots > 4 || ((tx_mask & 0xf0) && (tx_mask & 0xf)) ||
1151 ((rx_mask & 0xf0) && (rx_mask & 0xf)) ||
1152 ((rx_mask & 0xf0) && (tx_mask & 0xf)) ||
1153 ((rx_mask & 0xf) && (tx_mask & 0xf0)))
1154 return -EINVAL;
1155
1156 ctrl_val |= (NAU8824_TDM_MODE | NAU8824_TDM_OFFSET_EN);
1157 if (tx_mask & 0xf0) {
1158 tslot_l = 4 * slot_width;
1159 ctrl_val |= (tx_mask >> 4);
1160 } else {
1161 ctrl_val |= tx_mask;
1162 }
1163 if (rx_mask & 0xf0)
1164 ctrl_val |= ((rx_mask >> 4) << NAU8824_TDM_DACR_RX_SFT);
1165 else
1166 ctrl_val |= (rx_mask << NAU8824_TDM_DACR_RX_SFT);
1167
1168 regmap_update_bits(nau8824->regmap, NAU8824_REG_TDM_CTRL,
1169 NAU8824_TDM_MODE | NAU8824_TDM_OFFSET_EN |
1170 NAU8824_TDM_DACL_RX_MASK | NAU8824_TDM_DACR_RX_MASK |
1171 NAU8824_TDM_TX_MASK, ctrl_val);
1172 regmap_update_bits(nau8824->regmap, NAU8824_REG_PORT0_LEFT_TIME_SLOT,
1173 NAU8824_TSLOT_L_MASK, tslot_l);
1174
1175 return 0;
1176}
1177
1178/**
1128 * nau8824_calc_fll_param - Calculate FLL parameters. 1179 * nau8824_calc_fll_param - Calculate FLL parameters.
1129 * @fll_in: external clock provided to codec. 1180 * @fll_in: external clock provided to codec.
1130 * @fs: sampling rate. 1181 * @fs: sampling rate.
@@ -1440,6 +1491,7 @@ static struct snd_soc_codec_driver nau8824_codec_driver = {
1440static const struct snd_soc_dai_ops nau8824_dai_ops = { 1491static const struct snd_soc_dai_ops nau8824_dai_ops = {
1441 .hw_params = nau8824_hw_params, 1492 .hw_params = nau8824_hw_params,
1442 .set_fmt = nau8824_set_fmt, 1493 .set_fmt = nau8824_set_fmt,
1494 .set_tdm_slot = nau8824_set_tdm_slot,
1443}; 1495};
1444 1496
1445#define NAU8824_RATES SNDRV_PCM_RATE_8000_192000 1497#define NAU8824_RATES SNDRV_PCM_RATE_8000_192000
diff --git a/sound/soc/codecs/nau8824.h b/sound/soc/codecs/nau8824.h
index 87ac9a382aed..21eae2431c83 100644
--- a/sound/soc/codecs/nau8824.h
+++ b/sound/soc/codecs/nau8824.h
@@ -258,6 +258,18 @@
258#define NAU8824_I2S_MS_SLAVE (0 << NAU8824_I2S_MS_SFT) 258#define NAU8824_I2S_MS_SLAVE (0 << NAU8824_I2S_MS_SFT)
259#define NAU8824_I2S_BLK_DIV_MASK 0x7 259#define NAU8824_I2S_BLK_DIV_MASK 0x7
260 260
261/* PORT0_LEFT_TIME_SLOT (0x1E) */
262#define NAU8824_TSLOT_L_MASK 0x3ff
263
264/* TDM_CTRL (0x20) */
265#define NAU8824_TDM_MODE (0x1 << 15)
266#define NAU8824_TDM_OFFSET_EN (0x1 << 14)
267#define NAU8824_TDM_DACL_RX_SFT 6
268#define NAU8824_TDM_DACL_RX_MASK (0x3 << NAU8824_TDM_DACL_RX_SFT)
269#define NAU8824_TDM_DACR_RX_SFT 4
270#define NAU8824_TDM_DACR_RX_MASK (0x3 << NAU8824_TDM_DACR_RX_SFT)
271#define NAU8824_TDM_TX_MASK 0xf
272
261/* ADC_FILTER_CTRL (0x24) */ 273/* ADC_FILTER_CTRL (0x24) */
262#define NAU8824_ADC_SYNC_DOWN_MASK 0x3 274#define NAU8824_ADC_SYNC_DOWN_MASK 0x3
263#define NAU8824_ADC_SYNC_DOWN_32 0 275#define NAU8824_ADC_SYNC_DOWN_32 0
diff --git a/sound/soc/codecs/nau8825.c b/sound/soc/codecs/nau8825.c
index 97fbeba9498f..46a30eaa7ace 100644
--- a/sound/soc/codecs/nau8825.c
+++ b/sound/soc/codecs/nau8825.c
@@ -1612,7 +1612,6 @@ static int nau8825_jack_insert(struct nau8825 *nau8825)
1612 snd_soc_dapm_sync(dapm); 1612 snd_soc_dapm_sync(dapm);
1613 break; 1613 break;
1614 case 2: 1614 case 2:
1615 case 3:
1616 dev_dbg(nau8825->dev, "CTIA (micgnd2) mic connected\n"); 1615 dev_dbg(nau8825->dev, "CTIA (micgnd2) mic connected\n");
1617 type = SND_JACK_HEADSET; 1616 type = SND_JACK_HEADSET;
1618 1617
@@ -1632,6 +1631,11 @@ static int nau8825_jack_insert(struct nau8825 *nau8825)
1632 snd_soc_dapm_force_enable_pin(dapm, "SAR"); 1631 snd_soc_dapm_force_enable_pin(dapm, "SAR");
1633 snd_soc_dapm_sync(dapm); 1632 snd_soc_dapm_sync(dapm);
1634 break; 1633 break;
1634 case 3:
1635 /* detect error case */
1636 dev_err(nau8825->dev, "detection error; disable mic function\n");
1637 type = SND_JACK_HEADPHONE;
1638 break;
1635 } 1639 }
1636 1640
1637 /* Leaving HPOL/R grounded after jack insert by default. They will be 1641 /* Leaving HPOL/R grounded after jack insert by default. They will be
@@ -1682,7 +1686,7 @@ static irqreturn_t nau8825_interrupt(int irq, void *data)
1682 } else if (active_irq & NAU8825_HEADSET_COMPLETION_IRQ) { 1686 } else if (active_irq & NAU8825_HEADSET_COMPLETION_IRQ) {
1683 if (nau8825_is_jack_inserted(regmap)) { 1687 if (nau8825_is_jack_inserted(regmap)) {
1684 event |= nau8825_jack_insert(nau8825); 1688 event |= nau8825_jack_insert(nau8825);
1685 if (!nau8825->high_imped) { 1689 if (!nau8825->xtalk_bypass && !nau8825->high_imped) {
1686 /* Apply the cross talk suppression in the 1690 /* Apply the cross talk suppression in the
1687 * headset without high impedance. 1691 * headset without high impedance.
1688 */ 1692 */
@@ -2328,6 +2332,13 @@ static int nau8825_set_bias_level(struct snd_soc_codec *codec,
2328 break; 2332 break;
2329 2333
2330 case SND_SOC_BIAS_OFF: 2334 case SND_SOC_BIAS_OFF:
2335 /* Reset the configuration of jack type for detection */
2336 /* Detach 2kOhm Resistors from MICBIAS to MICGND1/2 */
2337 regmap_update_bits(nau8825->regmap, NAU8825_REG_MIC_BIAS,
2338 NAU8825_MICBIAS_JKSLV | NAU8825_MICBIAS_JKR2, 0);
2339 /* ground HPL/HPR, MICGRND1/2 */
2340 regmap_update_bits(nau8825->regmap,
2341 NAU8825_REG_HSD_CTRL, 0xf, 0xf);
2331 /* Cancel and reset cross talk detection funciton */ 2342 /* Cancel and reset cross talk detection funciton */
2332 nau8825_xtalk_cancel(nau8825); 2343 nau8825_xtalk_cancel(nau8825);
2333 /* Turn off all interruptions before system shutdown. Keep the 2344 /* Turn off all interruptions before system shutdown. Keep the
@@ -2351,6 +2362,10 @@ static int __maybe_unused nau8825_suspend(struct snd_soc_codec *codec)
2351 2362
2352 disable_irq(nau8825->irq); 2363 disable_irq(nau8825->irq);
2353 snd_soc_codec_force_bias_level(codec, SND_SOC_BIAS_OFF); 2364 snd_soc_codec_force_bias_level(codec, SND_SOC_BIAS_OFF);
2365 /* Power down codec power; don't suppoet button wakeup */
2366 snd_soc_dapm_disable_pin(nau8825->dapm, "SAR");
2367 snd_soc_dapm_disable_pin(nau8825->dapm, "MICBIAS");
2368 snd_soc_dapm_sync(nau8825->dapm);
2354 regcache_cache_only(nau8825->regmap, true); 2369 regcache_cache_only(nau8825->regmap, true);
2355 regcache_mark_dirty(nau8825->regmap); 2370 regcache_mark_dirty(nau8825->regmap);
2356 2371
@@ -2425,10 +2440,13 @@ static void nau8825_print_device_properties(struct nau8825 *nau8825)
2425 nau8825->jack_insert_debounce); 2440 nau8825->jack_insert_debounce);
2426 dev_dbg(dev, "jack-eject-debounce: %d\n", 2441 dev_dbg(dev, "jack-eject-debounce: %d\n",
2427 nau8825->jack_eject_debounce); 2442 nau8825->jack_eject_debounce);
2443 dev_dbg(dev, "crosstalk-bypass: %d\n",
2444 nau8825->xtalk_bypass);
2428} 2445}
2429 2446
2430static int nau8825_read_device_properties(struct device *dev, 2447static int nau8825_read_device_properties(struct device *dev,
2431 struct nau8825 *nau8825) { 2448 struct nau8825 *nau8825) {
2449 int ret;
2432 2450
2433 nau8825->jkdet_enable = device_property_read_bool(dev, 2451 nau8825->jkdet_enable = device_property_read_bool(dev,
2434 "nuvoton,jkdet-enable"); 2452 "nuvoton,jkdet-enable");
@@ -2436,30 +2454,60 @@ static int nau8825_read_device_properties(struct device *dev,
2436 "nuvoton,jkdet-pull-enable"); 2454 "nuvoton,jkdet-pull-enable");
2437 nau8825->jkdet_pull_up = device_property_read_bool(dev, 2455 nau8825->jkdet_pull_up = device_property_read_bool(dev,
2438 "nuvoton,jkdet-pull-up"); 2456 "nuvoton,jkdet-pull-up");
2439 device_property_read_u32(dev, "nuvoton,jkdet-polarity", 2457 ret = device_property_read_u32(dev, "nuvoton,jkdet-polarity",
2440 &nau8825->jkdet_polarity); 2458 &nau8825->jkdet_polarity);
2441 device_property_read_u32(dev, "nuvoton,micbias-voltage", 2459 if (ret)
2460 nau8825->jkdet_polarity = 1;
2461 ret = device_property_read_u32(dev, "nuvoton,micbias-voltage",
2442 &nau8825->micbias_voltage); 2462 &nau8825->micbias_voltage);
2443 device_property_read_u32(dev, "nuvoton,vref-impedance", 2463 if (ret)
2464 nau8825->micbias_voltage = 6;
2465 ret = device_property_read_u32(dev, "nuvoton,vref-impedance",
2444 &nau8825->vref_impedance); 2466 &nau8825->vref_impedance);
2445 device_property_read_u32(dev, "nuvoton,sar-threshold-num", 2467 if (ret)
2468 nau8825->vref_impedance = 2;
2469 ret = device_property_read_u32(dev, "nuvoton,sar-threshold-num",
2446 &nau8825->sar_threshold_num); 2470 &nau8825->sar_threshold_num);
2447 device_property_read_u32_array(dev, "nuvoton,sar-threshold", 2471 if (ret)
2472 nau8825->sar_threshold_num = 4;
2473 ret = device_property_read_u32_array(dev, "nuvoton,sar-threshold",
2448 nau8825->sar_threshold, nau8825->sar_threshold_num); 2474 nau8825->sar_threshold, nau8825->sar_threshold_num);
2449 device_property_read_u32(dev, "nuvoton,sar-hysteresis", 2475 if (ret) {
2476 nau8825->sar_threshold[0] = 0x08;
2477 nau8825->sar_threshold[1] = 0x12;
2478 nau8825->sar_threshold[2] = 0x26;
2479 nau8825->sar_threshold[3] = 0x73;
2480 }
2481 ret = device_property_read_u32(dev, "nuvoton,sar-hysteresis",
2450 &nau8825->sar_hysteresis); 2482 &nau8825->sar_hysteresis);
2451 device_property_read_u32(dev, "nuvoton,sar-voltage", 2483 if (ret)
2484 nau8825->sar_hysteresis = 0;
2485 ret = device_property_read_u32(dev, "nuvoton,sar-voltage",
2452 &nau8825->sar_voltage); 2486 &nau8825->sar_voltage);
2453 device_property_read_u32(dev, "nuvoton,sar-compare-time", 2487 if (ret)
2488 nau8825->sar_voltage = 6;
2489 ret = device_property_read_u32(dev, "nuvoton,sar-compare-time",
2454 &nau8825->sar_compare_time); 2490 &nau8825->sar_compare_time);
2455 device_property_read_u32(dev, "nuvoton,sar-sampling-time", 2491 if (ret)
2492 nau8825->sar_compare_time = 1;
2493 ret = device_property_read_u32(dev, "nuvoton,sar-sampling-time",
2456 &nau8825->sar_sampling_time); 2494 &nau8825->sar_sampling_time);
2457 device_property_read_u32(dev, "nuvoton,short-key-debounce", 2495 if (ret)
2496 nau8825->sar_sampling_time = 1;
2497 ret = device_property_read_u32(dev, "nuvoton,short-key-debounce",
2458 &nau8825->key_debounce); 2498 &nau8825->key_debounce);
2459 device_property_read_u32(dev, "nuvoton,jack-insert-debounce", 2499 if (ret)
2500 nau8825->key_debounce = 3;
2501 ret = device_property_read_u32(dev, "nuvoton,jack-insert-debounce",
2460 &nau8825->jack_insert_debounce); 2502 &nau8825->jack_insert_debounce);
2461 device_property_read_u32(dev, "nuvoton,jack-eject-debounce", 2503 if (ret)
2504 nau8825->jack_insert_debounce = 7;
2505 ret = device_property_read_u32(dev, "nuvoton,jack-eject-debounce",
2462 &nau8825->jack_eject_debounce); 2506 &nau8825->jack_eject_debounce);
2507 if (ret)
2508 nau8825->jack_eject_debounce = 0;
2509 nau8825->xtalk_bypass = device_property_read_bool(dev,
2510 "nuvoton,crosstalk-bypass");
2463 2511
2464 nau8825->mclk = devm_clk_get(dev, "mclk"); 2512 nau8825->mclk = devm_clk_get(dev, "mclk");
2465 if (PTR_ERR(nau8825->mclk) == -EPROBE_DEFER) { 2513 if (PTR_ERR(nau8825->mclk) == -EPROBE_DEFER) {
diff --git a/sound/soc/codecs/nau8825.h b/sound/soc/codecs/nau8825.h
index 514fd13c2f46..8aee5c8647ae 100644
--- a/sound/soc/codecs/nau8825.h
+++ b/sound/soc/codecs/nau8825.h
@@ -476,6 +476,7 @@ struct nau8825 {
476 int xtalk_event_mask; 476 int xtalk_event_mask;
477 bool xtalk_protect; 477 bool xtalk_protect;
478 int imp_rms[NAU8825_XTALK_IMM]; 478 int imp_rms[NAU8825_XTALK_IMM];
479 int xtalk_bypass;
479}; 480};
480 481
481int nau8825_enable_jack_detect(struct snd_soc_codec *codec, 482int nau8825_enable_jack_detect(struct snd_soc_codec *codec,
diff --git a/sound/soc/codecs/rt5514.c b/sound/soc/codecs/rt5514.c
index f91221b1ddf0..1b6796c4c471 100644
--- a/sound/soc/codecs/rt5514.c
+++ b/sound/soc/codecs/rt5514.c
@@ -9,6 +9,7 @@
9 * published by the Free Software Foundation. 9 * published by the Free Software Foundation.
10 */ 10 */
11 11
12#include <linux/acpi.h>
12#include <linux/fs.h> 13#include <linux/fs.h>
13#include <linux/module.h> 14#include <linux/module.h>
14#include <linux/moduleparam.h> 15#include <linux/moduleparam.h>
@@ -395,14 +396,14 @@ static const char * const rt5514_dmic_src[] = {
395 "DMIC1", "DMIC2" 396 "DMIC1", "DMIC2"
396}; 397};
397 398
398static const SOC_ENUM_SINGLE_DECL( 399static SOC_ENUM_SINGLE_DECL(
399 rt5514_stereo1_dmic_enum, RT5514_DIG_SOURCE_CTRL, 400 rt5514_stereo1_dmic_enum, RT5514_DIG_SOURCE_CTRL,
400 RT5514_AD0_DMIC_INPUT_SEL_SFT, rt5514_dmic_src); 401 RT5514_AD0_DMIC_INPUT_SEL_SFT, rt5514_dmic_src);
401 402
402static const struct snd_kcontrol_new rt5514_sto1_dmic_mux = 403static const struct snd_kcontrol_new rt5514_sto1_dmic_mux =
403 SOC_DAPM_ENUM("Stereo1 DMIC Source", rt5514_stereo1_dmic_enum); 404 SOC_DAPM_ENUM("Stereo1 DMIC Source", rt5514_stereo1_dmic_enum);
404 405
405static const SOC_ENUM_SINGLE_DECL( 406static SOC_ENUM_SINGLE_DECL(
406 rt5514_stereo2_dmic_enum, RT5514_DIG_SOURCE_CTRL, 407 rt5514_stereo2_dmic_enum, RT5514_DIG_SOURCE_CTRL,
407 RT5514_AD1_DMIC_INPUT_SEL_SFT, rt5514_dmic_src); 408 RT5514_AD1_DMIC_INPUT_SEL_SFT, rt5514_dmic_src);
408 409
@@ -906,9 +907,23 @@ static int rt5514_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
906 if (rx_mask || tx_mask) 907 if (rx_mask || tx_mask)
907 val |= RT5514_TDM_MODE; 908 val |= RT5514_TDM_MODE;
908 909
909 if (slots == 4) 910 switch (slots) {
911 case 4:
910 val |= RT5514_TDMSLOT_SEL_RX_4CH | RT5514_TDMSLOT_SEL_TX_4CH; 912 val |= RT5514_TDMSLOT_SEL_RX_4CH | RT5514_TDMSLOT_SEL_TX_4CH;
913 break;
914
915 case 6:
916 val |= RT5514_TDMSLOT_SEL_RX_6CH | RT5514_TDMSLOT_SEL_TX_6CH;
917 break;
911 918
919 case 8:
920 val |= RT5514_TDMSLOT_SEL_RX_8CH | RT5514_TDMSLOT_SEL_TX_8CH;
921 break;
922
923 case 2:
924 default:
925 break;
926 }
912 927
913 switch (slot_width) { 928 switch (slot_width) {
914 case 20: 929 case 20:
@@ -919,6 +934,10 @@ static int rt5514_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
919 val |= RT5514_CH_LEN_RX_24 | RT5514_CH_LEN_TX_24; 934 val |= RT5514_CH_LEN_RX_24 | RT5514_CH_LEN_TX_24;
920 break; 935 break;
921 936
937 case 25:
938 val |= RT5514_TDM_MODE2;
939 break;
940
922 case 32: 941 case 32:
923 val |= RT5514_CH_LEN_RX_32 | RT5514_CH_LEN_TX_32; 942 val |= RT5514_CH_LEN_RX_32 | RT5514_CH_LEN_TX_32;
924 break; 943 break;
@@ -930,7 +949,8 @@ static int rt5514_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
930 949
931 regmap_update_bits(rt5514->regmap, RT5514_I2S_CTRL1, RT5514_TDM_MODE | 950 regmap_update_bits(rt5514->regmap, RT5514_I2S_CTRL1, RT5514_TDM_MODE |
932 RT5514_TDMSLOT_SEL_RX_MASK | RT5514_TDMSLOT_SEL_TX_MASK | 951 RT5514_TDMSLOT_SEL_RX_MASK | RT5514_TDMSLOT_SEL_TX_MASK |
933 RT5514_CH_LEN_RX_MASK | RT5514_CH_LEN_TX_MASK, val); 952 RT5514_CH_LEN_RX_MASK | RT5514_CH_LEN_TX_MASK |
953 RT5514_TDM_MODE2, val);
934 954
935 return 0; 955 return 0;
936} 956}
@@ -1076,6 +1096,14 @@ static const struct of_device_id rt5514_of_match[] = {
1076MODULE_DEVICE_TABLE(of, rt5514_of_match); 1096MODULE_DEVICE_TABLE(of, rt5514_of_match);
1077#endif 1097#endif
1078 1098
1099#ifdef CONFIG_ACPI
1100static struct acpi_device_id rt5514_acpi_match[] = {
1101 { "10EC5514", 0},
1102 {},
1103};
1104MODULE_DEVICE_TABLE(acpi, rt5514_acpi_match);
1105#endif
1106
1079static int rt5514_parse_dt(struct rt5514_priv *rt5514, struct device *dev) 1107static int rt5514_parse_dt(struct rt5514_priv *rt5514, struct device *dev)
1080{ 1108{
1081 device_property_read_u32(dev, "realtek,dmic-init-delay-ms", 1109 device_property_read_u32(dev, "realtek,dmic-init-delay-ms",
@@ -1179,6 +1207,7 @@ static const struct dev_pm_ops rt5514_i2_pm_ops = {
1179static struct i2c_driver rt5514_i2c_driver = { 1207static struct i2c_driver rt5514_i2c_driver = {
1180 .driver = { 1208 .driver = {
1181 .name = "rt5514", 1209 .name = "rt5514",
1210 .acpi_match_table = ACPI_PTR(rt5514_acpi_match),
1182 .of_match_table = of_match_ptr(rt5514_of_match), 1211 .of_match_table = of_match_ptr(rt5514_of_match),
1183 .pm = &rt5514_i2_pm_ops, 1212 .pm = &rt5514_i2_pm_ops,
1184 }, 1213 },
diff --git a/sound/soc/codecs/rt5514.h b/sound/soc/codecs/rt5514.h
index 5d343fb6d125..02bc212a86d9 100644
--- a/sound/soc/codecs/rt5514.h
+++ b/sound/soc/codecs/rt5514.h
@@ -117,6 +117,8 @@
117#define RT5514_POW_ADCFEDL_BIT 0 117#define RT5514_POW_ADCFEDL_BIT 0
118 118
119/* RT5514_I2S_CTRL1 (0x2010) */ 119/* RT5514_I2S_CTRL1 (0x2010) */
120#define RT5514_TDM_MODE2 (0x1 << 30)
121#define RT5514_TDM_MODE2_SFT 30
120#define RT5514_TDM_MODE (0x1 << 28) 122#define RT5514_TDM_MODE (0x1 << 28)
121#define RT5514_TDM_MODE_SFT 28 123#define RT5514_TDM_MODE_SFT 28
122#define RT5514_I2S_LR_MASK (0x1 << 26) 124#define RT5514_I2S_LR_MASK (0x1 << 26)
@@ -136,6 +138,8 @@
136#define RT5514_TDMSLOT_SEL_RX_MASK (0x3 << 10) 138#define RT5514_TDMSLOT_SEL_RX_MASK (0x3 << 10)
137#define RT5514_TDMSLOT_SEL_RX_SFT 10 139#define RT5514_TDMSLOT_SEL_RX_SFT 10
138#define RT5514_TDMSLOT_SEL_RX_4CH (0x1 << 10) 140#define RT5514_TDMSLOT_SEL_RX_4CH (0x1 << 10)
141#define RT5514_TDMSLOT_SEL_RX_6CH (0x2 << 10)
142#define RT5514_TDMSLOT_SEL_RX_8CH (0x3 << 10)
139#define RT5514_CH_LEN_RX_MASK (0x3 << 8) 143#define RT5514_CH_LEN_RX_MASK (0x3 << 8)
140#define RT5514_CH_LEN_RX_SFT 8 144#define RT5514_CH_LEN_RX_SFT 8
141#define RT5514_CH_LEN_RX_16 (0x0 << 8) 145#define RT5514_CH_LEN_RX_16 (0x0 << 8)
@@ -145,6 +149,8 @@
145#define RT5514_TDMSLOT_SEL_TX_MASK (0x3 << 6) 149#define RT5514_TDMSLOT_SEL_TX_MASK (0x3 << 6)
146#define RT5514_TDMSLOT_SEL_TX_SFT 6 150#define RT5514_TDMSLOT_SEL_TX_SFT 6
147#define RT5514_TDMSLOT_SEL_TX_4CH (0x1 << 6) 151#define RT5514_TDMSLOT_SEL_TX_4CH (0x1 << 6)
152#define RT5514_TDMSLOT_SEL_TX_6CH (0x2 << 6)
153#define RT5514_TDMSLOT_SEL_TX_8CH (0x3 << 6)
148#define RT5514_CH_LEN_TX_MASK (0x3 << 4) 154#define RT5514_CH_LEN_TX_MASK (0x3 << 4)
149#define RT5514_CH_LEN_TX_SFT 4 155#define RT5514_CH_LEN_TX_SFT 4
150#define RT5514_CH_LEN_TX_16 (0x0 << 4) 156#define RT5514_CH_LEN_TX_16 (0x0 << 4)
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
index 87844a45886a..9ec58166f7c4 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
@@ -34,6 +34,17 @@
34#include "rl6231.h" 34#include "rl6231.h"
35#include "rt5645.h" 35#include "rt5645.h"
36 36
37#define QUIRK_INV_JD1_1(q) ((q) & 1)
38#define QUIRK_LEVEL_IRQ(q) (((q) >> 1) & 1)
39#define QUIRK_IN2_DIFF(q) (((q) >> 2) & 1)
40#define QUIRK_JD_MODE(q) (((q) >> 4) & 7)
41#define QUIRK_DMIC1_DATA_PIN(q) (((q) >> 8) & 3)
42#define QUIRK_DMIC2_DATA_PIN(q) (((q) >> 12) & 3)
43
44static unsigned int quirk = -1;
45module_param(quirk, uint, 0444);
46MODULE_PARM_DESC(quirk, "RT5645 pdata quirk override");
47
37#define RT5645_DEVICE_ID 0x6308 48#define RT5645_DEVICE_ID 0x6308
38#define RT5650_DEVICE_ID 0x6419 49#define RT5650_DEVICE_ID 0x6419
39 50
@@ -59,7 +70,7 @@ static const struct regmap_range_cfg rt5645_ranges[] = {
59 70
60static const struct reg_sequence init_list[] = { 71static const struct reg_sequence init_list[] = {
61 {RT5645_PR_BASE + 0x3d, 0x3600}, 72 {RT5645_PR_BASE + 0x3d, 0x3600},
62 {RT5645_PR_BASE + 0x1c, 0xfd20}, 73 {RT5645_PR_BASE + 0x1c, 0xfd70},
63 {RT5645_PR_BASE + 0x20, 0x611f}, 74 {RT5645_PR_BASE + 0x20, 0x611f},
64 {RT5645_PR_BASE + 0x21, 0x4040}, 75 {RT5645_PR_BASE + 0x21, 0x4040},
65 {RT5645_PR_BASE + 0x23, 0x0004}, 76 {RT5645_PR_BASE + 0x23, 0x0004},
@@ -3151,7 +3162,7 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
3151 snd_soc_dapm_sync(dapm); 3162 snd_soc_dapm_sync(dapm);
3152 rt5645->jack_type = SND_JACK_HEADPHONE; 3163 rt5645->jack_type = SND_JACK_HEADPHONE;
3153 } 3164 }
3154 if (rt5645->pdata.jd_invert) 3165 if (rt5645->pdata.level_trigger_irq)
3155 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2, 3166 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
3156 RT5645_JD_1_1_MASK, RT5645_JD_1_1_NOR); 3167 RT5645_JD_1_1_MASK, RT5645_JD_1_1_NOR);
3157 } else { /* jack out */ 3168 } else { /* jack out */
@@ -3172,7 +3183,7 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
3172 snd_soc_dapm_disable_pin(dapm, "LDO2"); 3183 snd_soc_dapm_disable_pin(dapm, "LDO2");
3173 snd_soc_dapm_disable_pin(dapm, "Mic Det Power"); 3184 snd_soc_dapm_disable_pin(dapm, "Mic Det Power");
3174 snd_soc_dapm_sync(dapm); 3185 snd_soc_dapm_sync(dapm);
3175 if (rt5645->pdata.jd_invert) 3186 if (rt5645->pdata.level_trigger_irq)
3176 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2, 3187 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
3177 RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV); 3188 RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV);
3178 } 3189 }
@@ -3238,24 +3249,16 @@ static void rt5645_jack_detect_work(struct work_struct *work)
3238 snd_soc_jack_report(rt5645->mic_jack, 3249 snd_soc_jack_report(rt5645->mic_jack,
3239 report, SND_JACK_MICROPHONE); 3250 report, SND_JACK_MICROPHONE);
3240 return; 3251 return;
3241 case 1: /* 2 port */ 3252 default: /* read rt5645 jd1_1 status */
3242 val = snd_soc_read(rt5645->codec, RT5645_A_JD_CTRL1) & 0x0070; 3253 val = snd_soc_read(rt5645->codec, RT5645_INT_IRQ_ST) & 0x1000;
3243 break;
3244 default: /* 1 port */
3245 val = snd_soc_read(rt5645->codec, RT5645_A_JD_CTRL1) & 0x0020;
3246 break; 3254 break;
3247 3255
3248 } 3256 }
3249 3257
3250 switch (val) { 3258 if (!val && (rt5645->jack_type == 0)) { /* jack in */
3251 /* jack in */ 3259 report = rt5645_jack_detect(rt5645->codec, 1);
3252 case 0x30: /* 2 port */ 3260 } else if (!val && rt5645->jack_type != 0) {
3253 case 0x0: /* 1 port or 2 port */ 3261 /* for push button and jack out */
3254 if (rt5645->jack_type == 0) {
3255 report = rt5645_jack_detect(rt5645->codec, 1);
3256 /* for push button and jack out */
3257 break;
3258 }
3259 btn_type = 0; 3262 btn_type = 0;
3260 if (snd_soc_read(rt5645->codec, RT5645_INT_IRQ_ST) & 0x4) { 3263 if (snd_soc_read(rt5645->codec, RT5645_INT_IRQ_ST) & 0x4) {
3261 /* button pressed */ 3264 /* button pressed */
@@ -3302,19 +3305,12 @@ static void rt5645_jack_detect_work(struct work_struct *work)
3302 mod_timer(&rt5645->btn_check_timer, 3305 mod_timer(&rt5645->btn_check_timer,
3303 msecs_to_jiffies(100)); 3306 msecs_to_jiffies(100));
3304 } 3307 }
3305 3308 } else {
3306 break; 3309 /* jack out */
3307 /* jack out */
3308 case 0x70: /* 2 port */
3309 case 0x10: /* 2 port */
3310 case 0x20: /* 1 port */
3311 report = 0; 3310 report = 0;
3312 snd_soc_update_bits(rt5645->codec, 3311 snd_soc_update_bits(rt5645->codec,
3313 RT5645_INT_IRQ_ST, 0x1, 0x0); 3312 RT5645_INT_IRQ_ST, 0x1, 0x0);
3314 rt5645_jack_detect(rt5645->codec, 0); 3313 rt5645_jack_detect(rt5645->codec, 0);
3315 break;
3316 default:
3317 break;
3318 } 3314 }
3319 3315
3320 snd_soc_jack_report(rt5645->hp_jack, report, SND_JACK_HEADPHONE); 3316 snd_soc_jack_report(rt5645->hp_jack, report, SND_JACK_HEADPHONE);
@@ -3601,7 +3597,7 @@ static struct rt5645_platform_data buddy_platform_data = {
3601 .dmic1_data_pin = RT5645_DMIC_DATA_GPIO5, 3597 .dmic1_data_pin = RT5645_DMIC_DATA_GPIO5,
3602 .dmic2_data_pin = RT5645_DMIC_DATA_IN2P, 3598 .dmic2_data_pin = RT5645_DMIC_DATA_IN2P,
3603 .jd_mode = 3, 3599 .jd_mode = 3,
3604 .jd_invert = true, 3600 .level_trigger_irq = true,
3605}; 3601};
3606 3602
3607static struct dmi_system_id dmi_platform_intel_broadwell[] = { 3603static struct dmi_system_id dmi_platform_intel_broadwell[] = {
@@ -3614,6 +3610,33 @@ static struct dmi_system_id dmi_platform_intel_broadwell[] = {
3614 { } 3610 { }
3615}; 3611};
3616 3612
3613static struct rt5645_platform_data gpd_win_platform_data = {
3614 .jd_mode = 3,
3615 .inv_jd1_1 = true,
3616};
3617
3618static const struct dmi_system_id dmi_platform_gpd_win[] = {
3619 {
3620 /*
3621 * Match for the GPDwin which unfortunately uses somewhat
3622 * generic dmi strings, which is why we test for 4 strings.
3623 * Comparing against 23 other byt/cht boards, board_vendor
3624 * and board_name are unique to the GPDwin, where as only one
3625 * other board has the same board_serial and 3 others have
3626 * the same default product_name. Also the GPDwin is the
3627 * only device to have both board_ and product_name not set.
3628 */
3629 .ident = "GPD Win",
3630 .matches = {
3631 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
3632 DMI_MATCH(DMI_BOARD_NAME, "Default string"),
3633 DMI_MATCH(DMI_BOARD_SERIAL, "Default string"),
3634 DMI_MATCH(DMI_PRODUCT_NAME, "Default string"),
3635 },
3636 },
3637 {}
3638};
3639
3617static bool rt5645_check_dp(struct device *dev) 3640static bool rt5645_check_dp(struct device *dev)
3618{ 3641{
3619 if (device_property_present(dev, "realtek,in2-differential") || 3642 if (device_property_present(dev, "realtek,in2-differential") ||
@@ -3664,6 +3687,17 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
3664 rt5645_parse_dt(rt5645, &i2c->dev); 3687 rt5645_parse_dt(rt5645, &i2c->dev);
3665 else if (dmi_check_system(dmi_platform_intel_braswell)) 3688 else if (dmi_check_system(dmi_platform_intel_braswell))
3666 rt5645->pdata = general_platform_data; 3689 rt5645->pdata = general_platform_data;
3690 else if (dmi_check_system(dmi_platform_gpd_win))
3691 rt5645->pdata = gpd_win_platform_data;
3692
3693 if (quirk != -1) {
3694 rt5645->pdata.in2_diff = QUIRK_IN2_DIFF(quirk);
3695 rt5645->pdata.level_trigger_irq = QUIRK_LEVEL_IRQ(quirk);
3696 rt5645->pdata.inv_jd1_1 = QUIRK_INV_JD1_1(quirk);
3697 rt5645->pdata.jd_mode = QUIRK_JD_MODE(quirk);
3698 rt5645->pdata.dmic1_data_pin = QUIRK_DMIC1_DATA_PIN(quirk);
3699 rt5645->pdata.dmic2_data_pin = QUIRK_DMIC2_DATA_PIN(quirk);
3700 }
3667 3701
3668 rt5645->gpiod_hp_det = devm_gpiod_get_optional(&i2c->dev, "hp-detect", 3702 rt5645->gpiod_hp_det = devm_gpiod_get_optional(&i2c->dev, "hp-detect",
3669 GPIOD_IN); 3703 GPIOD_IN);
@@ -3745,6 +3779,8 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
3745 ret); 3779 ret);
3746 } 3780 }
3747 3781
3782 regmap_update_bits(rt5645->regmap, RT5645_CLSD_OUT_CTRL, 0xc0, 0xc0);
3783
3748 if (rt5645->pdata.in2_diff) 3784 if (rt5645->pdata.in2_diff)
3749 regmap_update_bits(rt5645->regmap, RT5645_IN2_CTRL, 3785 regmap_update_bits(rt5645->regmap, RT5645_IN2_CTRL,
3750 RT5645_IN_DF2, RT5645_IN_DF2); 3786 RT5645_IN_DF2, RT5645_IN_DF2);
@@ -3848,12 +3884,16 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
3848 default: 3884 default:
3849 break; 3885 break;
3850 } 3886 }
3887 if (rt5645->pdata.inv_jd1_1) {
3888 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
3889 RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV);
3890 }
3851 } 3891 }
3852 3892
3853 regmap_update_bits(rt5645->regmap, RT5645_ADDA_CLK1, 3893 regmap_update_bits(rt5645->regmap, RT5645_ADDA_CLK1,
3854 RT5645_I2S_PD1_MASK, RT5645_I2S_PD1_2); 3894 RT5645_I2S_PD1_MASK, RT5645_I2S_PD1_2);
3855 3895
3856 if (rt5645->pdata.jd_invert) { 3896 if (rt5645->pdata.level_trigger_irq) {
3857 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2, 3897 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
3858 RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV); 3898 RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV);
3859 } 3899 }
@@ -3897,6 +3937,7 @@ static int rt5645_i2c_remove(struct i2c_client *i2c)
3897 3937
3898 cancel_delayed_work_sync(&rt5645->jack_detect_work); 3938 cancel_delayed_work_sync(&rt5645->jack_detect_work);
3899 cancel_delayed_work_sync(&rt5645->rcclock_work); 3939 cancel_delayed_work_sync(&rt5645->rcclock_work);
3940 del_timer_sync(&rt5645->btn_check_timer);
3900 3941
3901 snd_soc_unregister_codec(&i2c->dev); 3942 snd_soc_unregister_codec(&i2c->dev);
3902 regulator_bulk_disable(ARRAY_SIZE(rt5645->supplies), rt5645->supplies); 3943 regulator_bulk_disable(ARRAY_SIZE(rt5645->supplies), rt5645->supplies);
diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
index f5d34153e21f..db05b60d5002 100644
--- a/sound/soc/codecs/rt5651.c
+++ b/sound/soc/codecs/rt5651.c
@@ -586,44 +586,6 @@ static const struct snd_kcontrol_new hpo_r_mute_control =
586 SOC_DAPM_SINGLE_AUTODISABLE("Switch", RT5651_HP_VOL, 586 SOC_DAPM_SINGLE_AUTODISABLE("Switch", RT5651_HP_VOL,
587 RT5651_R_MUTE_SFT, 1, 1); 587 RT5651_R_MUTE_SFT, 1, 1);
588 588
589/* INL/R source */
590static const char * const rt5651_inl_src[] = {"IN2P", "HPOVOLLP"};
591
592static SOC_ENUM_SINGLE_DECL(
593 rt5651_inl_enum, RT5651_INL1_INR1_VOL,
594 RT5651_INL_SEL_SFT, rt5651_inl_src);
595
596static const struct snd_kcontrol_new rt5651_inl1_mux =
597 SOC_DAPM_ENUM("INL1 source", rt5651_inl_enum);
598
599static const char * const rt5651_inr1_src[] = {"IN2N", "HPOVOLRP"};
600
601static SOC_ENUM_SINGLE_DECL(
602 rt5651_inr1_enum, RT5651_INL1_INR1_VOL,
603 RT5651_INR_SEL_SFT, rt5651_inr1_src);
604
605static const struct snd_kcontrol_new rt5651_inr1_mux =
606 SOC_DAPM_ENUM("INR1 source", rt5651_inr1_enum);
607
608static const char * const rt5651_inl2_src[] = {"IN3P", "OUTVOLLP"};
609
610static SOC_ENUM_SINGLE_DECL(
611 rt5651_inl2_enum, RT5651_INL2_INR2_VOL,
612 RT5651_INL_SEL_SFT, rt5651_inl2_src);
613
614static const struct snd_kcontrol_new rt5651_inl2_mux =
615 SOC_DAPM_ENUM("INL2 source", rt5651_inl2_enum);
616
617static const char * const rt5651_inr2_src[] = {"IN3N", "OUTVOLRP"};
618
619static SOC_ENUM_SINGLE_DECL(
620 rt5651_inr2_enum, RT5651_INL2_INR2_VOL,
621 RT5651_INR_SEL_SFT, rt5651_inr2_src);
622
623static const struct snd_kcontrol_new rt5651_inr2_mux =
624 SOC_DAPM_ENUM("INR2 source", rt5651_inr2_enum);
625
626
627/* Stereo ADC source */ 589/* Stereo ADC source */
628static const char * const rt5651_stereo1_adc1_src[] = {"DD MIX", "ADC"}; 590static const char * const rt5651_stereo1_adc1_src[] = {"DD MIX", "ADC"};
629 591
@@ -955,11 +917,7 @@ static const struct snd_soc_dapm_widget rt5651_dapm_widgets[] = {
955 RT5651_PWR_IN2_L_BIT, 0, NULL, 0), 917 RT5651_PWR_IN2_L_BIT, 0, NULL, 0),
956 SND_SOC_DAPM_PGA("INR2 VOL", RT5651_PWR_VOL, 918 SND_SOC_DAPM_PGA("INR2 VOL", RT5651_PWR_VOL,
957 RT5651_PWR_IN2_R_BIT, 0, NULL, 0), 919 RT5651_PWR_IN2_R_BIT, 0, NULL, 0),
958 /* IN Mux */ 920
959 SND_SOC_DAPM_MUX("INL1 Mux", SND_SOC_NOPM, 0, 0, &rt5651_inl1_mux),
960 SND_SOC_DAPM_MUX("INR1 Mux", SND_SOC_NOPM, 0, 0, &rt5651_inr1_mux),
961 SND_SOC_DAPM_MUX("INL2 Mux", SND_SOC_NOPM, 0, 0, &rt5651_inl2_mux),
962 SND_SOC_DAPM_MUX("INR2 Mux", SND_SOC_NOPM, 0, 0, &rt5651_inr2_mux),
963 /* REC Mixer */ 921 /* REC Mixer */
964 SND_SOC_DAPM_MIXER("RECMIXL", RT5651_PWR_MIXER, RT5651_PWR_RM_L_BIT, 0, 922 SND_SOC_DAPM_MIXER("RECMIXL", RT5651_PWR_MIXER, RT5651_PWR_RM_L_BIT, 0,
965 rt5651_rec_l_mix, ARRAY_SIZE(rt5651_rec_l_mix)), 923 rt5651_rec_l_mix, ARRAY_SIZE(rt5651_rec_l_mix)),
diff --git a/sound/soc/codecs/rt5663.c b/sound/soc/codecs/rt5663.c
index a32508d7dcfd..a33202affeb1 100644
--- a/sound/soc/codecs/rt5663.c
+++ b/sound/soc/codecs/rt5663.c
@@ -2847,6 +2847,8 @@ static int rt5663_resume(struct snd_soc_codec *codec)
2847 regcache_cache_only(rt5663->regmap, false); 2847 regcache_cache_only(rt5663->regmap, false);
2848 regcache_sync(rt5663->regmap); 2848 regcache_sync(rt5663->regmap);
2849 2849
2850 rt5663_irq(0, rt5663);
2851
2850 return 0; 2852 return 0;
2851} 2853}
2852#else 2854#else
@@ -3141,7 +3143,7 @@ static int rt5663_i2c_probe(struct i2c_client *i2c,
3141 regmap_update_bits(rt5663->regmap, RT5663_DIG_MISC, 3143 regmap_update_bits(rt5663->regmap, RT5663_DIG_MISC,
3142 RT5663_DIG_GATE_CTRL_MASK, RT5663_DIG_GATE_CTRL_EN); 3144 RT5663_DIG_GATE_CTRL_MASK, RT5663_DIG_GATE_CTRL_EN);
3143 regmap_update_bits(rt5663->regmap, RT5663_AUTO_1MRC_CLK, 3145 regmap_update_bits(rt5663->regmap, RT5663_AUTO_1MRC_CLK,
3144 RT5663_IRQ_POW_SAV_MASK, RT5663_IRQ_POW_SAV_EN); 3146 RT5663_IRQ_MANUAL_MASK, RT5663_IRQ_MANUAL_EN);
3145 regmap_update_bits(rt5663->regmap, RT5663_IRQ_1, 3147 regmap_update_bits(rt5663->regmap, RT5663_IRQ_1,
3146 RT5663_EN_IRQ_JD1_MASK, RT5663_EN_IRQ_JD1_EN); 3148 RT5663_EN_IRQ_JD1_MASK, RT5663_EN_IRQ_JD1_EN);
3147 regmap_update_bits(rt5663->regmap, RT5663_GPIO_1, 3149 regmap_update_bits(rt5663->regmap, RT5663_GPIO_1,
diff --git a/sound/soc/codecs/rt5663.h b/sound/soc/codecs/rt5663.h
index d77fae619f2f..4621812c94d8 100644
--- a/sound/soc/codecs/rt5663.h
+++ b/sound/soc/codecs/rt5663.h
@@ -590,6 +590,10 @@
590#define RT5663_IRQ_POW_SAV_JD1_SHIFT 14 590#define RT5663_IRQ_POW_SAV_JD1_SHIFT 14
591#define RT5663_IRQ_POW_SAV_JD1_DIS (0x0 << 14) 591#define RT5663_IRQ_POW_SAV_JD1_DIS (0x0 << 14)
592#define RT5663_IRQ_POW_SAV_JD1_EN (0x1 << 14) 592#define RT5663_IRQ_POW_SAV_JD1_EN (0x1 << 14)
593#define RT5663_IRQ_MANUAL_MASK (0x1 << 8)
594#define RT5663_IRQ_MANUAL_SHIFT 8
595#define RT5663_IRQ_MANUAL_DIS (0x0 << 8)
596#define RT5663_IRQ_MANUAL_EN (0x1 << 8)
593 597
594/* IRQ Control 1 (0x00b6) */ 598/* IRQ Control 1 (0x00b6) */
595#define RT5663_EN_CB_JD_MASK (0x1 << 3) 599#define RT5663_EN_CB_JD_MASK (0x1 << 3)
diff --git a/sound/soc/codecs/rt5665.c b/sound/soc/codecs/rt5665.c
index 8cd22307f5b6..370ed54d1e15 100644
--- a/sound/soc/codecs/rt5665.c
+++ b/sound/soc/codecs/rt5665.c
@@ -70,6 +70,7 @@ struct rt5665_priv {
70 int jack_type; 70 int jack_type;
71 int irq_work_delay_time; 71 int irq_work_delay_time;
72 unsigned int sar_adc_value; 72 unsigned int sar_adc_value;
73 bool calibration_done;
73}; 74};
74 75
75static const struct reg_default rt5665_reg[] = { 76static const struct reg_default rt5665_reg[] = {
@@ -912,46 +913,46 @@ static const char * const rt5665_data_select[] = {
912 "L/R", "R/L", "L/L", "R/R" 913 "L/R", "R/L", "L/L", "R/R"
913}; 914};
914 915
915static const SOC_ENUM_SINGLE_DECL(rt5665_if1_1_01_adc_enum, 916static SOC_ENUM_SINGLE_DECL(rt5665_if1_1_01_adc_enum,
916 RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT01_SFT, rt5665_data_select); 917 RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT01_SFT, rt5665_data_select);
917 918
918static const SOC_ENUM_SINGLE_DECL(rt5665_if1_1_23_adc_enum, 919static SOC_ENUM_SINGLE_DECL(rt5665_if1_1_23_adc_enum,
919 RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT23_SFT, rt5665_data_select); 920 RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT23_SFT, rt5665_data_select);
920 921
921static const SOC_ENUM_SINGLE_DECL(rt5665_if1_1_45_adc_enum, 922static SOC_ENUM_SINGLE_DECL(rt5665_if1_1_45_adc_enum,
922 RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT45_SFT, rt5665_data_select); 923 RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT45_SFT, rt5665_data_select);
923 924
924static const SOC_ENUM_SINGLE_DECL(rt5665_if1_1_67_adc_enum, 925static SOC_ENUM_SINGLE_DECL(rt5665_if1_1_67_adc_enum,
925 RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT67_SFT, rt5665_data_select); 926 RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT67_SFT, rt5665_data_select);
926 927
927static const SOC_ENUM_SINGLE_DECL(rt5665_if1_2_01_adc_enum, 928static SOC_ENUM_SINGLE_DECL(rt5665_if1_2_01_adc_enum,
928 RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT01_SFT, rt5665_data_select); 929 RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT01_SFT, rt5665_data_select);
929 930
930static const SOC_ENUM_SINGLE_DECL(rt5665_if1_2_23_adc_enum, 931static SOC_ENUM_SINGLE_DECL(rt5665_if1_2_23_adc_enum,
931 RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT23_SFT, rt5665_data_select); 932 RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT23_SFT, rt5665_data_select);
932 933
933static const SOC_ENUM_SINGLE_DECL(rt5665_if1_2_45_adc_enum, 934static SOC_ENUM_SINGLE_DECL(rt5665_if1_2_45_adc_enum,
934 RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT45_SFT, rt5665_data_select); 935 RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT45_SFT, rt5665_data_select);
935 936
936static const SOC_ENUM_SINGLE_DECL(rt5665_if1_2_67_adc_enum, 937static SOC_ENUM_SINGLE_DECL(rt5665_if1_2_67_adc_enum,
937 RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT67_SFT, rt5665_data_select); 938 RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT67_SFT, rt5665_data_select);
938 939
939static const SOC_ENUM_SINGLE_DECL(rt5665_if2_1_dac_enum, 940static SOC_ENUM_SINGLE_DECL(rt5665_if2_1_dac_enum,
940 RT5665_DIG_INF2_DATA, RT5665_IF2_1_DAC_SEL_SFT, rt5665_data_select); 941 RT5665_DIG_INF2_DATA, RT5665_IF2_1_DAC_SEL_SFT, rt5665_data_select);
941 942
942static const SOC_ENUM_SINGLE_DECL(rt5665_if2_1_adc_enum, 943static SOC_ENUM_SINGLE_DECL(rt5665_if2_1_adc_enum,
943 RT5665_DIG_INF2_DATA, RT5665_IF2_1_ADC_SEL_SFT, rt5665_data_select); 944 RT5665_DIG_INF2_DATA, RT5665_IF2_1_ADC_SEL_SFT, rt5665_data_select);
944 945
945static const SOC_ENUM_SINGLE_DECL(rt5665_if2_2_dac_enum, 946static SOC_ENUM_SINGLE_DECL(rt5665_if2_2_dac_enum,
946 RT5665_DIG_INF2_DATA, RT5665_IF2_2_DAC_SEL_SFT, rt5665_data_select); 947 RT5665_DIG_INF2_DATA, RT5665_IF2_2_DAC_SEL_SFT, rt5665_data_select);
947 948
948static const SOC_ENUM_SINGLE_DECL(rt5665_if2_2_adc_enum, 949static SOC_ENUM_SINGLE_DECL(rt5665_if2_2_adc_enum,
949 RT5665_DIG_INF2_DATA, RT5665_IF2_2_ADC_SEL_SFT, rt5665_data_select); 950 RT5665_DIG_INF2_DATA, RT5665_IF2_2_ADC_SEL_SFT, rt5665_data_select);
950 951
951static const SOC_ENUM_SINGLE_DECL(rt5665_if3_dac_enum, 952static SOC_ENUM_SINGLE_DECL(rt5665_if3_dac_enum,
952 RT5665_DIG_INF3_DATA, RT5665_IF3_DAC_SEL_SFT, rt5665_data_select); 953 RT5665_DIG_INF3_DATA, RT5665_IF3_DAC_SEL_SFT, rt5665_data_select);
953 954
954static const SOC_ENUM_SINGLE_DECL(rt5665_if3_adc_enum, 955static SOC_ENUM_SINGLE_DECL(rt5665_if3_adc_enum,
955 RT5665_DIG_INF3_DATA, RT5665_IF3_ADC_SEL_SFT, rt5665_data_select); 956 RT5665_DIG_INF3_DATA, RT5665_IF3_ADC_SEL_SFT, rt5665_data_select);
956 957
957static const struct snd_kcontrol_new rt5665_if1_1_01_adc_swap_mux = 958static const struct snd_kcontrol_new rt5665_if1_1_01_adc_swap_mux =
@@ -1305,6 +1306,11 @@ static void rt5665_jack_detect_handler(struct work_struct *work)
1305 usleep_range(10000, 15000); 1306 usleep_range(10000, 15000);
1306 } 1307 }
1307 1308
1309 while (!rt5665->calibration_done) {
1310 pr_debug("%s calibration not ready\n", __func__);
1311 usleep_range(10000, 15000);
1312 }
1313
1308 mutex_lock(&rt5665->calibrate_mutex); 1314 mutex_lock(&rt5665->calibrate_mutex);
1309 1315
1310 val = snd_soc_read(rt5665->codec, RT5665_AJD1_CTRL) & 0x0010; 1316 val = snd_soc_read(rt5665->codec, RT5665_AJD1_CTRL) & 0x0010;
@@ -1819,14 +1825,14 @@ static const char * const rt5665_dac2_src[] = {
1819 "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC", "Mono ADC MIX" 1825 "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC", "Mono ADC MIX"
1820}; 1826};
1821 1827
1822static const SOC_ENUM_SINGLE_DECL( 1828static SOC_ENUM_SINGLE_DECL(
1823 rt5665_dac_l2_enum, RT5665_DAC2_CTRL, 1829 rt5665_dac_l2_enum, RT5665_DAC2_CTRL,
1824 RT5665_DAC_L2_SEL_SFT, rt5665_dac2_src); 1830 RT5665_DAC_L2_SEL_SFT, rt5665_dac2_src);
1825 1831
1826static const struct snd_kcontrol_new rt5665_dac_l2_mux = 1832static const struct snd_kcontrol_new rt5665_dac_l2_mux =
1827 SOC_DAPM_ENUM("Digital DAC L2 Source", rt5665_dac_l2_enum); 1833 SOC_DAPM_ENUM("Digital DAC L2 Source", rt5665_dac_l2_enum);
1828 1834
1829static const SOC_ENUM_SINGLE_DECL( 1835static SOC_ENUM_SINGLE_DECL(
1830 rt5665_dac_r2_enum, RT5665_DAC2_CTRL, 1836 rt5665_dac_r2_enum, RT5665_DAC2_CTRL,
1831 RT5665_DAC_R2_SEL_SFT, rt5665_dac2_src); 1837 RT5665_DAC_R2_SEL_SFT, rt5665_dac2_src);
1832 1838
@@ -1839,14 +1845,14 @@ static const char * const rt5665_dac3_src[] = {
1839 "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC", "STO2 ADC MIX" 1845 "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC", "STO2 ADC MIX"
1840}; 1846};
1841 1847
1842static const SOC_ENUM_SINGLE_DECL( 1848static SOC_ENUM_SINGLE_DECL(
1843 rt5665_dac_l3_enum, RT5665_DAC3_CTRL, 1849 rt5665_dac_l3_enum, RT5665_DAC3_CTRL,
1844 RT5665_DAC_L3_SEL_SFT, rt5665_dac3_src); 1850 RT5665_DAC_L3_SEL_SFT, rt5665_dac3_src);
1845 1851
1846static const struct snd_kcontrol_new rt5665_dac_l3_mux = 1852static const struct snd_kcontrol_new rt5665_dac_l3_mux =
1847 SOC_DAPM_ENUM("Digital DAC L3 Source", rt5665_dac_l3_enum); 1853 SOC_DAPM_ENUM("Digital DAC L3 Source", rt5665_dac_l3_enum);
1848 1854
1849static const SOC_ENUM_SINGLE_DECL( 1855static SOC_ENUM_SINGLE_DECL(
1850 rt5665_dac_r3_enum, RT5665_DAC3_CTRL, 1856 rt5665_dac_r3_enum, RT5665_DAC3_CTRL,
1851 RT5665_DAC_R3_SEL_SFT, rt5665_dac3_src); 1857 RT5665_DAC_R3_SEL_SFT, rt5665_dac3_src);
1852 1858
@@ -1859,14 +1865,14 @@ static const char * const rt5665_sto1_adc1_src[] = {
1859 "DD Mux", "ADC" 1865 "DD Mux", "ADC"
1860}; 1866};
1861 1867
1862static const SOC_ENUM_SINGLE_DECL( 1868static SOC_ENUM_SINGLE_DECL(
1863 rt5665_sto1_adc1l_enum, RT5665_STO1_ADC_MIXER, 1869 rt5665_sto1_adc1l_enum, RT5665_STO1_ADC_MIXER,
1864 RT5665_STO1_ADC1L_SRC_SFT, rt5665_sto1_adc1_src); 1870 RT5665_STO1_ADC1L_SRC_SFT, rt5665_sto1_adc1_src);
1865 1871
1866static const struct snd_kcontrol_new rt5665_sto1_adc1l_mux = 1872static const struct snd_kcontrol_new rt5665_sto1_adc1l_mux =
1867 SOC_DAPM_ENUM("Stereo1 ADC1L Source", rt5665_sto1_adc1l_enum); 1873 SOC_DAPM_ENUM("Stereo1 ADC1L Source", rt5665_sto1_adc1l_enum);
1868 1874
1869static const SOC_ENUM_SINGLE_DECL( 1875static SOC_ENUM_SINGLE_DECL(
1870 rt5665_sto1_adc1r_enum, RT5665_STO1_ADC_MIXER, 1876 rt5665_sto1_adc1r_enum, RT5665_STO1_ADC_MIXER,
1871 RT5665_STO1_ADC1R_SRC_SFT, rt5665_sto1_adc1_src); 1877 RT5665_STO1_ADC1R_SRC_SFT, rt5665_sto1_adc1_src);
1872 1878
@@ -1879,14 +1885,14 @@ static const char * const rt5665_sto1_adc_src[] = {
1879 "ADC1 L", "ADC1 R", "ADC2 L", "ADC2 R" 1885 "ADC1 L", "ADC1 R", "ADC2 L", "ADC2 R"
1880}; 1886};
1881 1887
1882static const SOC_ENUM_SINGLE_DECL( 1888static SOC_ENUM_SINGLE_DECL(
1883 rt5665_sto1_adcl_enum, RT5665_STO1_ADC_MIXER, 1889 rt5665_sto1_adcl_enum, RT5665_STO1_ADC_MIXER,
1884 RT5665_STO1_ADCL_SRC_SFT, rt5665_sto1_adc_src); 1890 RT5665_STO1_ADCL_SRC_SFT, rt5665_sto1_adc_src);
1885 1891
1886static const struct snd_kcontrol_new rt5665_sto1_adcl_mux = 1892static const struct snd_kcontrol_new rt5665_sto1_adcl_mux =
1887 SOC_DAPM_ENUM("Stereo1 ADCL Source", rt5665_sto1_adcl_enum); 1893 SOC_DAPM_ENUM("Stereo1 ADCL Source", rt5665_sto1_adcl_enum);
1888 1894
1889static const SOC_ENUM_SINGLE_DECL( 1895static SOC_ENUM_SINGLE_DECL(
1890 rt5665_sto1_adcr_enum, RT5665_STO1_ADC_MIXER, 1896 rt5665_sto1_adcr_enum, RT5665_STO1_ADC_MIXER,
1891 RT5665_STO1_ADCR_SRC_SFT, rt5665_sto1_adc_src); 1897 RT5665_STO1_ADCR_SRC_SFT, rt5665_sto1_adc_src);
1892 1898
@@ -1899,14 +1905,14 @@ static const char * const rt5665_sto1_adc2_src[] = {
1899 "DAC MIX", "DMIC" 1905 "DAC MIX", "DMIC"
1900}; 1906};
1901 1907
1902static const SOC_ENUM_SINGLE_DECL( 1908static SOC_ENUM_SINGLE_DECL(
1903 rt5665_sto1_adc2l_enum, RT5665_STO1_ADC_MIXER, 1909 rt5665_sto1_adc2l_enum, RT5665_STO1_ADC_MIXER,
1904 RT5665_STO1_ADC2L_SRC_SFT, rt5665_sto1_adc2_src); 1910 RT5665_STO1_ADC2L_SRC_SFT, rt5665_sto1_adc2_src);
1905 1911
1906static const struct snd_kcontrol_new rt5665_sto1_adc2l_mux = 1912static const struct snd_kcontrol_new rt5665_sto1_adc2l_mux =
1907 SOC_DAPM_ENUM("Stereo1 ADC2L Source", rt5665_sto1_adc2l_enum); 1913 SOC_DAPM_ENUM("Stereo1 ADC2L Source", rt5665_sto1_adc2l_enum);
1908 1914
1909static const SOC_ENUM_SINGLE_DECL( 1915static SOC_ENUM_SINGLE_DECL(
1910 rt5665_sto1_adc2r_enum, RT5665_STO1_ADC_MIXER, 1916 rt5665_sto1_adc2r_enum, RT5665_STO1_ADC_MIXER,
1911 RT5665_STO1_ADC2R_SRC_SFT, rt5665_sto1_adc2_src); 1917 RT5665_STO1_ADC2R_SRC_SFT, rt5665_sto1_adc2_src);
1912 1918
@@ -1919,7 +1925,7 @@ static const char * const rt5665_sto1_dmic_src[] = {
1919 "DMIC1", "DMIC2" 1925 "DMIC1", "DMIC2"
1920}; 1926};
1921 1927
1922static const SOC_ENUM_SINGLE_DECL( 1928static SOC_ENUM_SINGLE_DECL(
1923 rt5665_sto1_dmic_enum, RT5665_STO1_ADC_MIXER, 1929 rt5665_sto1_dmic_enum, RT5665_STO1_ADC_MIXER,
1924 RT5665_STO1_DMIC_SRC_SFT, rt5665_sto1_dmic_src); 1930 RT5665_STO1_DMIC_SRC_SFT, rt5665_sto1_dmic_src);
1925 1931
@@ -1931,7 +1937,7 @@ static const char * const rt5665_sto1_dd_l_src[] = {
1931 "STO2 DAC", "MONO DAC" 1937 "STO2 DAC", "MONO DAC"
1932}; 1938};
1933 1939
1934static const SOC_ENUM_SINGLE_DECL( 1940static SOC_ENUM_SINGLE_DECL(
1935 rt5665_sto1_dd_l_enum, RT5665_STO1_ADC_MIXER, 1941 rt5665_sto1_dd_l_enum, RT5665_STO1_ADC_MIXER,
1936 RT5665_STO1_DD_L_SRC_SFT, rt5665_sto1_dd_l_src); 1942 RT5665_STO1_DD_L_SRC_SFT, rt5665_sto1_dd_l_src);
1937 1943
@@ -1943,7 +1949,7 @@ static const char * const rt5665_sto1_dd_r_src[] = {
1943 "STO2 DAC", "MONO DAC", "AEC REF" 1949 "STO2 DAC", "MONO DAC", "AEC REF"
1944}; 1950};
1945 1951
1946static const SOC_ENUM_SINGLE_DECL( 1952static SOC_ENUM_SINGLE_DECL(
1947 rt5665_sto1_dd_r_enum, RT5665_STO1_ADC_MIXER, 1953 rt5665_sto1_dd_r_enum, RT5665_STO1_ADC_MIXER,
1948 RT5665_STO1_DD_R_SRC_SFT, rt5665_sto1_dd_r_src); 1954 RT5665_STO1_DD_R_SRC_SFT, rt5665_sto1_dd_r_src);
1949 1955
@@ -1956,7 +1962,7 @@ static const char * const rt5665_mono_adc_l2_src[] = {
1956 "DAC MIXL", "DMIC" 1962 "DAC MIXL", "DMIC"
1957}; 1963};
1958 1964
1959static const SOC_ENUM_SINGLE_DECL( 1965static SOC_ENUM_SINGLE_DECL(
1960 rt5665_mono_adc_l2_enum, RT5665_MONO_ADC_MIXER, 1966 rt5665_mono_adc_l2_enum, RT5665_MONO_ADC_MIXER,
1961 RT5665_MONO_ADC_L2_SRC_SFT, rt5665_mono_adc_l2_src); 1967 RT5665_MONO_ADC_L2_SRC_SFT, rt5665_mono_adc_l2_src);
1962 1968
@@ -1970,7 +1976,7 @@ static const char * const rt5665_mono_adc_l1_src[] = {
1970 "DD Mux", "ADC" 1976 "DD Mux", "ADC"
1971}; 1977};
1972 1978
1973static const SOC_ENUM_SINGLE_DECL( 1979static SOC_ENUM_SINGLE_DECL(
1974 rt5665_mono_adc_l1_enum, RT5665_MONO_ADC_MIXER, 1980 rt5665_mono_adc_l1_enum, RT5665_MONO_ADC_MIXER,
1975 RT5665_MONO_ADC_L1_SRC_SFT, rt5665_mono_adc_l1_src); 1981 RT5665_MONO_ADC_L1_SRC_SFT, rt5665_mono_adc_l1_src);
1976 1982
@@ -1982,14 +1988,14 @@ static const char * const rt5665_mono_dd_src[] = {
1982 "STO2 DAC", "MONO DAC" 1988 "STO2 DAC", "MONO DAC"
1983}; 1989};
1984 1990
1985static const SOC_ENUM_SINGLE_DECL( 1991static SOC_ENUM_SINGLE_DECL(
1986 rt5665_mono_dd_l_enum, RT5665_MONO_ADC_MIXER, 1992 rt5665_mono_dd_l_enum, RT5665_MONO_ADC_MIXER,
1987 RT5665_MONO_DD_L_SRC_SFT, rt5665_mono_dd_src); 1993 RT5665_MONO_DD_L_SRC_SFT, rt5665_mono_dd_src);
1988 1994
1989static const struct snd_kcontrol_new rt5665_mono_dd_l_mux = 1995static const struct snd_kcontrol_new rt5665_mono_dd_l_mux =
1990 SOC_DAPM_ENUM("Mono DD L Source", rt5665_mono_dd_l_enum); 1996 SOC_DAPM_ENUM("Mono DD L Source", rt5665_mono_dd_l_enum);
1991 1997
1992static const SOC_ENUM_SINGLE_DECL( 1998static SOC_ENUM_SINGLE_DECL(
1993 rt5665_mono_dd_r_enum, RT5665_MONO_ADC_MIXER, 1999 rt5665_mono_dd_r_enum, RT5665_MONO_ADC_MIXER,
1994 RT5665_MONO_DD_R_SRC_SFT, rt5665_mono_dd_src); 2000 RT5665_MONO_DD_R_SRC_SFT, rt5665_mono_dd_src);
1995 2001
@@ -2002,14 +2008,14 @@ static const char * const rt5665_mono_adc_src[] = {
2002 "ADC1 L", "ADC1 R", "ADC2 L", "ADC2 R" 2008 "ADC1 L", "ADC1 R", "ADC2 L", "ADC2 R"
2003}; 2009};
2004 2010
2005static const SOC_ENUM_SINGLE_DECL( 2011static SOC_ENUM_SINGLE_DECL(
2006 rt5665_mono_adc_l_enum, RT5665_MONO_ADC_MIXER, 2012 rt5665_mono_adc_l_enum, RT5665_MONO_ADC_MIXER,
2007 RT5665_MONO_ADC_L_SRC_SFT, rt5665_mono_adc_src); 2013 RT5665_MONO_ADC_L_SRC_SFT, rt5665_mono_adc_src);
2008 2014
2009static const struct snd_kcontrol_new rt5665_mono_adc_l_mux = 2015static const struct snd_kcontrol_new rt5665_mono_adc_l_mux =
2010 SOC_DAPM_ENUM("Mono ADC L Source", rt5665_mono_adc_l_enum); 2016 SOC_DAPM_ENUM("Mono ADC L Source", rt5665_mono_adc_l_enum);
2011 2017
2012static const SOC_ENUM_SINGLE_DECL( 2018static SOC_ENUM_SINGLE_DECL(
2013 rt5665_mono_adcr_enum, RT5665_MONO_ADC_MIXER, 2019 rt5665_mono_adcr_enum, RT5665_MONO_ADC_MIXER,
2014 RT5665_MONO_ADC_R_SRC_SFT, rt5665_mono_adc_src); 2020 RT5665_MONO_ADC_R_SRC_SFT, rt5665_mono_adc_src);
2015 2021
@@ -2022,7 +2028,7 @@ static const char * const rt5665_mono_dmic_l_src[] = {
2022 "DMIC1 L", "DMIC2 L" 2028 "DMIC1 L", "DMIC2 L"
2023}; 2029};
2024 2030
2025static const SOC_ENUM_SINGLE_DECL( 2031static SOC_ENUM_SINGLE_DECL(
2026 rt5665_mono_dmic_l_enum, RT5665_MONO_ADC_MIXER, 2032 rt5665_mono_dmic_l_enum, RT5665_MONO_ADC_MIXER,
2027 RT5665_MONO_DMIC_L_SRC_SFT, rt5665_mono_dmic_l_src); 2033 RT5665_MONO_DMIC_L_SRC_SFT, rt5665_mono_dmic_l_src);
2028 2034
@@ -2035,7 +2041,7 @@ static const char * const rt5665_mono_adc_r2_src[] = {
2035 "DAC MIXR", "DMIC" 2041 "DAC MIXR", "DMIC"
2036}; 2042};
2037 2043
2038static const SOC_ENUM_SINGLE_DECL( 2044static SOC_ENUM_SINGLE_DECL(
2039 rt5665_mono_adc_r2_enum, RT5665_MONO_ADC_MIXER, 2045 rt5665_mono_adc_r2_enum, RT5665_MONO_ADC_MIXER,
2040 RT5665_MONO_ADC_R2_SRC_SFT, rt5665_mono_adc_r2_src); 2046 RT5665_MONO_ADC_R2_SRC_SFT, rt5665_mono_adc_r2_src);
2041 2047
@@ -2048,7 +2054,7 @@ static const char * const rt5665_mono_adc_r1_src[] = {
2048 "DD Mux", "ADC" 2054 "DD Mux", "ADC"
2049}; 2055};
2050 2056
2051static const SOC_ENUM_SINGLE_DECL( 2057static SOC_ENUM_SINGLE_DECL(
2052 rt5665_mono_adc_r1_enum, RT5665_MONO_ADC_MIXER, 2058 rt5665_mono_adc_r1_enum, RT5665_MONO_ADC_MIXER,
2053 RT5665_MONO_ADC_R1_SRC_SFT, rt5665_mono_adc_r1_src); 2059 RT5665_MONO_ADC_R1_SRC_SFT, rt5665_mono_adc_r1_src);
2054 2060
@@ -2061,7 +2067,7 @@ static const char * const rt5665_mono_dmic_r_src[] = {
2061 "DMIC1 R", "DMIC2 R" 2067 "DMIC1 R", "DMIC2 R"
2062}; 2068};
2063 2069
2064static const SOC_ENUM_SINGLE_DECL( 2070static SOC_ENUM_SINGLE_DECL(
2065 rt5665_mono_dmic_r_enum, RT5665_MONO_ADC_MIXER, 2071 rt5665_mono_dmic_r_enum, RT5665_MONO_ADC_MIXER,
2066 RT5665_MONO_DMIC_R_SRC_SFT, rt5665_mono_dmic_r_src); 2072 RT5665_MONO_DMIC_R_SRC_SFT, rt5665_mono_dmic_r_src);
2067 2073
@@ -2075,14 +2081,14 @@ static const char * const rt5665_sto2_adc1_src[] = {
2075 "DD Mux", "ADC" 2081 "DD Mux", "ADC"
2076}; 2082};
2077 2083
2078static const SOC_ENUM_SINGLE_DECL( 2084static SOC_ENUM_SINGLE_DECL(
2079 rt5665_sto2_adc1l_enum, RT5665_STO2_ADC_MIXER, 2085 rt5665_sto2_adc1l_enum, RT5665_STO2_ADC_MIXER,
2080 RT5665_STO2_ADC1L_SRC_SFT, rt5665_sto2_adc1_src); 2086 RT5665_STO2_ADC1L_SRC_SFT, rt5665_sto2_adc1_src);
2081 2087
2082static const struct snd_kcontrol_new rt5665_sto2_adc1l_mux = 2088static const struct snd_kcontrol_new rt5665_sto2_adc1l_mux =
2083 SOC_DAPM_ENUM("Stereo2 ADC1L Source", rt5665_sto2_adc1l_enum); 2089 SOC_DAPM_ENUM("Stereo2 ADC1L Source", rt5665_sto2_adc1l_enum);
2084 2090
2085static const SOC_ENUM_SINGLE_DECL( 2091static SOC_ENUM_SINGLE_DECL(
2086 rt5665_sto2_adc1r_enum, RT5665_STO2_ADC_MIXER, 2092 rt5665_sto2_adc1r_enum, RT5665_STO2_ADC_MIXER,
2087 RT5665_STO2_ADC1R_SRC_SFT, rt5665_sto2_adc1_src); 2093 RT5665_STO2_ADC1R_SRC_SFT, rt5665_sto2_adc1_src);
2088 2094
@@ -2095,14 +2101,14 @@ static const char * const rt5665_sto2_adc_src[] = {
2095 "ADC1 L", "ADC1 R", "ADC2 L" 2101 "ADC1 L", "ADC1 R", "ADC2 L"
2096}; 2102};
2097 2103
2098static const SOC_ENUM_SINGLE_DECL( 2104static SOC_ENUM_SINGLE_DECL(
2099 rt5665_sto2_adcl_enum, RT5665_STO2_ADC_MIXER, 2105 rt5665_sto2_adcl_enum, RT5665_STO2_ADC_MIXER,
2100 RT5665_STO2_ADCL_SRC_SFT, rt5665_sto2_adc_src); 2106 RT5665_STO2_ADCL_SRC_SFT, rt5665_sto2_adc_src);
2101 2107
2102static const struct snd_kcontrol_new rt5665_sto2_adcl_mux = 2108static const struct snd_kcontrol_new rt5665_sto2_adcl_mux =
2103 SOC_DAPM_ENUM("Stereo2 ADCL Source", rt5665_sto2_adcl_enum); 2109 SOC_DAPM_ENUM("Stereo2 ADCL Source", rt5665_sto2_adcl_enum);
2104 2110
2105static const SOC_ENUM_SINGLE_DECL( 2111static SOC_ENUM_SINGLE_DECL(
2106 rt5665_sto2_adcr_enum, RT5665_STO2_ADC_MIXER, 2112 rt5665_sto2_adcr_enum, RT5665_STO2_ADC_MIXER,
2107 RT5665_STO2_ADCR_SRC_SFT, rt5665_sto2_adc_src); 2113 RT5665_STO2_ADCR_SRC_SFT, rt5665_sto2_adc_src);
2108 2114
@@ -2115,14 +2121,14 @@ static const char * const rt5665_sto2_adc2_src[] = {
2115 "DAC MIX", "DMIC" 2121 "DAC MIX", "DMIC"
2116}; 2122};
2117 2123
2118static const SOC_ENUM_SINGLE_DECL( 2124static SOC_ENUM_SINGLE_DECL(
2119 rt5665_sto2_adc2l_enum, RT5665_STO2_ADC_MIXER, 2125 rt5665_sto2_adc2l_enum, RT5665_STO2_ADC_MIXER,
2120 RT5665_STO2_ADC2L_SRC_SFT, rt5665_sto2_adc2_src); 2126 RT5665_STO2_ADC2L_SRC_SFT, rt5665_sto2_adc2_src);
2121 2127
2122static const struct snd_kcontrol_new rt5665_sto2_adc2l_mux = 2128static const struct snd_kcontrol_new rt5665_sto2_adc2l_mux =
2123 SOC_DAPM_ENUM("Stereo2 ADC2L Source", rt5665_sto2_adc2l_enum); 2129 SOC_DAPM_ENUM("Stereo2 ADC2L Source", rt5665_sto2_adc2l_enum);
2124 2130
2125static const SOC_ENUM_SINGLE_DECL( 2131static SOC_ENUM_SINGLE_DECL(
2126 rt5665_sto2_adc2r_enum, RT5665_STO2_ADC_MIXER, 2132 rt5665_sto2_adc2r_enum, RT5665_STO2_ADC_MIXER,
2127 RT5665_STO2_ADC2R_SRC_SFT, rt5665_sto2_adc2_src); 2133 RT5665_STO2_ADC2R_SRC_SFT, rt5665_sto2_adc2_src);
2128 2134
@@ -2135,7 +2141,7 @@ static const char * const rt5665_sto2_dmic_src[] = {
2135 "DMIC1", "DMIC2" 2141 "DMIC1", "DMIC2"
2136}; 2142};
2137 2143
2138static const SOC_ENUM_SINGLE_DECL( 2144static SOC_ENUM_SINGLE_DECL(
2139 rt5665_sto2_dmic_enum, RT5665_STO2_ADC_MIXER, 2145 rt5665_sto2_dmic_enum, RT5665_STO2_ADC_MIXER,
2140 RT5665_STO2_DMIC_SRC_SFT, rt5665_sto2_dmic_src); 2146 RT5665_STO2_DMIC_SRC_SFT, rt5665_sto2_dmic_src);
2141 2147
@@ -2147,7 +2153,7 @@ static const char * const rt5665_sto2_dd_l_src[] = {
2147 "STO2 DAC", "MONO DAC" 2153 "STO2 DAC", "MONO DAC"
2148}; 2154};
2149 2155
2150static const SOC_ENUM_SINGLE_DECL( 2156static SOC_ENUM_SINGLE_DECL(
2151 rt5665_sto2_dd_l_enum, RT5665_STO2_ADC_MIXER, 2157 rt5665_sto2_dd_l_enum, RT5665_STO2_ADC_MIXER,
2152 RT5665_STO2_DD_L_SRC_SFT, rt5665_sto2_dd_l_src); 2158 RT5665_STO2_DD_L_SRC_SFT, rt5665_sto2_dd_l_src);
2153 2159
@@ -2159,7 +2165,7 @@ static const char * const rt5665_sto2_dd_r_src[] = {
2159 "STO2 DAC", "MONO DAC" 2165 "STO2 DAC", "MONO DAC"
2160}; 2166};
2161 2167
2162static const SOC_ENUM_SINGLE_DECL( 2168static SOC_ENUM_SINGLE_DECL(
2163 rt5665_sto2_dd_r_enum, RT5665_STO2_ADC_MIXER, 2169 rt5665_sto2_dd_r_enum, RT5665_STO2_ADC_MIXER,
2164 RT5665_STO2_DD_R_SRC_SFT, rt5665_sto2_dd_r_src); 2170 RT5665_STO2_DD_R_SRC_SFT, rt5665_sto2_dd_r_src);
2165 2171
@@ -2172,14 +2178,14 @@ static const char * const rt5665_dac1_src[] = {
2172 "IF1 DAC1", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC" 2178 "IF1 DAC1", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC"
2173}; 2179};
2174 2180
2175static const SOC_ENUM_SINGLE_DECL( 2181static SOC_ENUM_SINGLE_DECL(
2176 rt5665_dac_r1_enum, RT5665_AD_DA_MIXER, 2182 rt5665_dac_r1_enum, RT5665_AD_DA_MIXER,
2177 RT5665_DAC1_R_SEL_SFT, rt5665_dac1_src); 2183 RT5665_DAC1_R_SEL_SFT, rt5665_dac1_src);
2178 2184
2179static const struct snd_kcontrol_new rt5665_dac_r1_mux = 2185static const struct snd_kcontrol_new rt5665_dac_r1_mux =
2180 SOC_DAPM_ENUM("DAC R1 Source", rt5665_dac_r1_enum); 2186 SOC_DAPM_ENUM("DAC R1 Source", rt5665_dac_r1_enum);
2181 2187
2182static const SOC_ENUM_SINGLE_DECL( 2188static SOC_ENUM_SINGLE_DECL(
2183 rt5665_dac_l1_enum, RT5665_AD_DA_MIXER, 2189 rt5665_dac_l1_enum, RT5665_AD_DA_MIXER,
2184 RT5665_DAC1_L_SEL_SFT, rt5665_dac1_src); 2190 RT5665_DAC1_L_SEL_SFT, rt5665_dac1_src);
2185 2191
@@ -2192,14 +2198,14 @@ static const char * const rt5665_dig_dac_mix_src[] = {
2192 "Stereo1 DAC Mixer", "Stereo2 DAC Mixer", "Mono DAC Mixer" 2198 "Stereo1 DAC Mixer", "Stereo2 DAC Mixer", "Mono DAC Mixer"
2193}; 2199};
2194 2200
2195static const SOC_ENUM_SINGLE_DECL( 2201static SOC_ENUM_SINGLE_DECL(
2196 rt5665_dig_dac_mixl_enum, RT5665_A_DAC1_MUX, 2202 rt5665_dig_dac_mixl_enum, RT5665_A_DAC1_MUX,
2197 RT5665_DAC_MIX_L_SFT, rt5665_dig_dac_mix_src); 2203 RT5665_DAC_MIX_L_SFT, rt5665_dig_dac_mix_src);
2198 2204
2199static const struct snd_kcontrol_new rt5665_dig_dac_mixl_mux = 2205static const struct snd_kcontrol_new rt5665_dig_dac_mixl_mux =
2200 SOC_DAPM_ENUM("DAC Digital Mixer L Source", rt5665_dig_dac_mixl_enum); 2206 SOC_DAPM_ENUM("DAC Digital Mixer L Source", rt5665_dig_dac_mixl_enum);
2201 2207
2202static const SOC_ENUM_SINGLE_DECL( 2208static SOC_ENUM_SINGLE_DECL(
2203 rt5665_dig_dac_mixr_enum, RT5665_A_DAC1_MUX, 2209 rt5665_dig_dac_mixr_enum, RT5665_A_DAC1_MUX,
2204 RT5665_DAC_MIX_R_SFT, rt5665_dig_dac_mix_src); 2210 RT5665_DAC_MIX_R_SFT, rt5665_dig_dac_mix_src);
2205 2211
@@ -2212,14 +2218,14 @@ static const char * const rt5665_alg_dac1_src[] = {
2212 "Stereo1 DAC Mixer", "DAC1", "DMIC1" 2218 "Stereo1 DAC Mixer", "DAC1", "DMIC1"
2213}; 2219};
2214 2220
2215static const SOC_ENUM_SINGLE_DECL( 2221static SOC_ENUM_SINGLE_DECL(
2216 rt5665_alg_dac_l1_enum, RT5665_A_DAC1_MUX, 2222 rt5665_alg_dac_l1_enum, RT5665_A_DAC1_MUX,
2217 RT5665_A_DACL1_SFT, rt5665_alg_dac1_src); 2223 RT5665_A_DACL1_SFT, rt5665_alg_dac1_src);
2218 2224
2219static const struct snd_kcontrol_new rt5665_alg_dac_l1_mux = 2225static const struct snd_kcontrol_new rt5665_alg_dac_l1_mux =
2220 SOC_DAPM_ENUM("Analog DAC L1 Source", rt5665_alg_dac_l1_enum); 2226 SOC_DAPM_ENUM("Analog DAC L1 Source", rt5665_alg_dac_l1_enum);
2221 2227
2222static const SOC_ENUM_SINGLE_DECL( 2228static SOC_ENUM_SINGLE_DECL(
2223 rt5665_alg_dac_r1_enum, RT5665_A_DAC1_MUX, 2229 rt5665_alg_dac_r1_enum, RT5665_A_DAC1_MUX,
2224 RT5665_A_DACR1_SFT, rt5665_alg_dac1_src); 2230 RT5665_A_DACR1_SFT, rt5665_alg_dac1_src);
2225 2231
@@ -2232,14 +2238,14 @@ static const char * const rt5665_alg_dac2_src[] = {
2232 "Mono DAC Mixer", "DAC2" 2238 "Mono DAC Mixer", "DAC2"
2233}; 2239};
2234 2240
2235static const SOC_ENUM_SINGLE_DECL( 2241static SOC_ENUM_SINGLE_DECL(
2236 rt5665_alg_dac_l2_enum, RT5665_A_DAC2_MUX, 2242 rt5665_alg_dac_l2_enum, RT5665_A_DAC2_MUX,
2237 RT5665_A_DACL2_SFT, rt5665_alg_dac2_src); 2243 RT5665_A_DACL2_SFT, rt5665_alg_dac2_src);
2238 2244
2239static const struct snd_kcontrol_new rt5665_alg_dac_l2_mux = 2245static const struct snd_kcontrol_new rt5665_alg_dac_l2_mux =
2240 SOC_DAPM_ENUM("Analog DAC L2 Source", rt5665_alg_dac_l2_enum); 2246 SOC_DAPM_ENUM("Analog DAC L2 Source", rt5665_alg_dac_l2_enum);
2241 2247
2242static const SOC_ENUM_SINGLE_DECL( 2248static SOC_ENUM_SINGLE_DECL(
2243 rt5665_alg_dac_r2_enum, RT5665_A_DAC2_MUX, 2249 rt5665_alg_dac_r2_enum, RT5665_A_DAC2_MUX,
2244 RT5665_A_DACR2_SFT, rt5665_alg_dac2_src); 2250 RT5665_A_DACR2_SFT, rt5665_alg_dac2_src);
2245 2251
@@ -2253,7 +2259,7 @@ static const char * const rt5665_if2_1_adc_in_src[] = {
2253 "IF1 DAC2", "IF2_2 DAC", "IF3 DAC", "DAC1 MIX" 2259 "IF1 DAC2", "IF2_2 DAC", "IF3 DAC", "DAC1 MIX"
2254}; 2260};
2255 2261
2256static const SOC_ENUM_SINGLE_DECL( 2262static SOC_ENUM_SINGLE_DECL(
2257 rt5665_if2_1_adc_in_enum, RT5665_DIG_INF2_DATA, 2263 rt5665_if2_1_adc_in_enum, RT5665_DIG_INF2_DATA,
2258 RT5665_IF2_1_ADC_IN_SFT, rt5665_if2_1_adc_in_src); 2264 RT5665_IF2_1_ADC_IN_SFT, rt5665_if2_1_adc_in_src);
2259 2265
@@ -2266,7 +2272,7 @@ static const char * const rt5665_if2_2_adc_in_src[] = {
2266 "IF1 DAC2", "IF2_1 DAC", "IF3 DAC", "DAC1 MIX" 2272 "IF1 DAC2", "IF2_1 DAC", "IF3 DAC", "DAC1 MIX"
2267}; 2273};
2268 2274
2269static const SOC_ENUM_SINGLE_DECL( 2275static SOC_ENUM_SINGLE_DECL(
2270 rt5665_if2_2_adc_in_enum, RT5665_DIG_INF2_DATA, 2276 rt5665_if2_2_adc_in_enum, RT5665_DIG_INF2_DATA,
2271 RT5665_IF2_2_ADC_IN_SFT, rt5665_if2_2_adc_in_src); 2277 RT5665_IF2_2_ADC_IN_SFT, rt5665_if2_2_adc_in_src);
2272 2278
@@ -2280,7 +2286,7 @@ static const char * const rt5665_if3_adc_in_src[] = {
2280 "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "DAC1 MIX" 2286 "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "DAC1 MIX"
2281}; 2287};
2282 2288
2283static const SOC_ENUM_SINGLE_DECL( 2289static SOC_ENUM_SINGLE_DECL(
2284 rt5665_if3_adc_in_enum, RT5665_DIG_INF3_DATA, 2290 rt5665_if3_adc_in_enum, RT5665_DIG_INF3_DATA,
2285 RT5665_IF3_ADC_IN_SFT, rt5665_if3_adc_in_src); 2291 RT5665_IF3_ADC_IN_SFT, rt5665_if3_adc_in_src);
2286 2292
@@ -2293,14 +2299,14 @@ static const char * const rt5665_pdm_src[] = {
2293 "Stereo1 DAC", "Stereo2 DAC", "Mono DAC" 2299 "Stereo1 DAC", "Stereo2 DAC", "Mono DAC"
2294}; 2300};
2295 2301
2296static const SOC_ENUM_SINGLE_DECL( 2302static SOC_ENUM_SINGLE_DECL(
2297 rt5665_pdm_l_enum, RT5665_PDM_OUT_CTRL, 2303 rt5665_pdm_l_enum, RT5665_PDM_OUT_CTRL,
2298 RT5665_PDM1_L_SFT, rt5665_pdm_src); 2304 RT5665_PDM1_L_SFT, rt5665_pdm_src);
2299 2305
2300static const struct snd_kcontrol_new rt5665_pdm_l_mux = 2306static const struct snd_kcontrol_new rt5665_pdm_l_mux =
2301 SOC_DAPM_ENUM("PDM L Source", rt5665_pdm_l_enum); 2307 SOC_DAPM_ENUM("PDM L Source", rt5665_pdm_l_enum);
2302 2308
2303static const SOC_ENUM_SINGLE_DECL( 2309static SOC_ENUM_SINGLE_DECL(
2304 rt5665_pdm_r_enum, RT5665_PDM_OUT_CTRL, 2310 rt5665_pdm_r_enum, RT5665_PDM_OUT_CTRL,
2305 RT5665_PDM1_R_SFT, rt5665_pdm_src); 2311 RT5665_PDM1_R_SFT, rt5665_pdm_src);
2306 2312
@@ -2314,7 +2320,7 @@ static const char * const rt5665_if1_1_adc1_data_src[] = {
2314 "STO1 ADC", "IF2_1 DAC", 2320 "STO1 ADC", "IF2_1 DAC",
2315}; 2321};
2316 2322
2317static const SOC_ENUM_SINGLE_DECL( 2323static SOC_ENUM_SINGLE_DECL(
2318 rt5665_if1_1_adc1_data_enum, RT5665_TDM_CTRL_3, 2324 rt5665_if1_1_adc1_data_enum, RT5665_TDM_CTRL_3,
2319 RT5665_IF1_ADC1_SEL_SFT, rt5665_if1_1_adc1_data_src); 2325 RT5665_IF1_ADC1_SEL_SFT, rt5665_if1_1_adc1_data_src);
2320 2326
@@ -2326,7 +2332,7 @@ static const char * const rt5665_if1_1_adc2_data_src[] = {
2326 "STO2 ADC", "IF2_2 DAC", 2332 "STO2 ADC", "IF2_2 DAC",
2327}; 2333};
2328 2334
2329static const SOC_ENUM_SINGLE_DECL( 2335static SOC_ENUM_SINGLE_DECL(
2330 rt5665_if1_1_adc2_data_enum, RT5665_TDM_CTRL_3, 2336 rt5665_if1_1_adc2_data_enum, RT5665_TDM_CTRL_3,
2331 RT5665_IF1_ADC2_SEL_SFT, rt5665_if1_1_adc2_data_src); 2337 RT5665_IF1_ADC2_SEL_SFT, rt5665_if1_1_adc2_data_src);
2332 2338
@@ -2338,7 +2344,7 @@ static const char * const rt5665_if1_1_adc3_data_src[] = {
2338 "MONO ADC", "IF3 DAC", 2344 "MONO ADC", "IF3 DAC",
2339}; 2345};
2340 2346
2341static const SOC_ENUM_SINGLE_DECL( 2347static SOC_ENUM_SINGLE_DECL(
2342 rt5665_if1_1_adc3_data_enum, RT5665_TDM_CTRL_3, 2348 rt5665_if1_1_adc3_data_enum, RT5665_TDM_CTRL_3,
2343 RT5665_IF1_ADC3_SEL_SFT, rt5665_if1_1_adc3_data_src); 2349 RT5665_IF1_ADC3_SEL_SFT, rt5665_if1_1_adc3_data_src);
2344 2350
@@ -2350,7 +2356,7 @@ static const char * const rt5665_if1_2_adc1_data_src[] = {
2350 "STO1 ADC", "IF1 DAC", 2356 "STO1 ADC", "IF1 DAC",
2351}; 2357};
2352 2358
2353static const SOC_ENUM_SINGLE_DECL( 2359static SOC_ENUM_SINGLE_DECL(
2354 rt5665_if1_2_adc1_data_enum, RT5665_TDM_CTRL_4, 2360 rt5665_if1_2_adc1_data_enum, RT5665_TDM_CTRL_4,
2355 RT5665_IF1_ADC1_SEL_SFT, rt5665_if1_2_adc1_data_src); 2361 RT5665_IF1_ADC1_SEL_SFT, rt5665_if1_2_adc1_data_src);
2356 2362
@@ -2362,7 +2368,7 @@ static const char * const rt5665_if1_2_adc2_data_src[] = {
2362 "STO2 ADC", "IF2_1 DAC", 2368 "STO2 ADC", "IF2_1 DAC",
2363}; 2369};
2364 2370
2365static const SOC_ENUM_SINGLE_DECL( 2371static SOC_ENUM_SINGLE_DECL(
2366 rt5665_if1_2_adc2_data_enum, RT5665_TDM_CTRL_4, 2372 rt5665_if1_2_adc2_data_enum, RT5665_TDM_CTRL_4,
2367 RT5665_IF1_ADC2_SEL_SFT, rt5665_if1_2_adc2_data_src); 2373 RT5665_IF1_ADC2_SEL_SFT, rt5665_if1_2_adc2_data_src);
2368 2374
@@ -2374,7 +2380,7 @@ static const char * const rt5665_if1_2_adc3_data_src[] = {
2374 "MONO ADC", "IF2_2 DAC", 2380 "MONO ADC", "IF2_2 DAC",
2375}; 2381};
2376 2382
2377static const SOC_ENUM_SINGLE_DECL( 2383static SOC_ENUM_SINGLE_DECL(
2378 rt5665_if1_2_adc3_data_enum, RT5665_TDM_CTRL_4, 2384 rt5665_if1_2_adc3_data_enum, RT5665_TDM_CTRL_4,
2379 RT5665_IF1_ADC3_SEL_SFT, rt5665_if1_2_adc3_data_src); 2385 RT5665_IF1_ADC3_SEL_SFT, rt5665_if1_2_adc3_data_src);
2380 2386
@@ -2386,7 +2392,7 @@ static const char * const rt5665_if1_2_adc4_data_src[] = {
2386 "DAC1", "IF3 DAC", 2392 "DAC1", "IF3 DAC",
2387}; 2393};
2388 2394
2389static const SOC_ENUM_SINGLE_DECL( 2395static SOC_ENUM_SINGLE_DECL(
2390 rt5665_if1_2_adc4_data_enum, RT5665_TDM_CTRL_4, 2396 rt5665_if1_2_adc4_data_enum, RT5665_TDM_CTRL_4,
2391 RT5665_IF1_ADC4_SEL_SFT, rt5665_if1_2_adc4_data_src); 2397 RT5665_IF1_ADC4_SEL_SFT, rt5665_if1_2_adc4_data_src);
2392 2398
@@ -2401,14 +2407,14 @@ static const char * const rt5665_tdm_adc_data_src[] = {
2401 "4123", "4132", "4213", "4231", "4312", "4321" 2407 "4123", "4132", "4213", "4231", "4312", "4321"
2402}; 2408};
2403 2409
2404static const SOC_ENUM_SINGLE_DECL( 2410static SOC_ENUM_SINGLE_DECL(
2405 rt5665_tdm1_adc_data_enum, RT5665_TDM_CTRL_3, 2411 rt5665_tdm1_adc_data_enum, RT5665_TDM_CTRL_3,
2406 RT5665_TDM_ADC_SEL_SFT, rt5665_tdm_adc_data_src); 2412 RT5665_TDM_ADC_SEL_SFT, rt5665_tdm_adc_data_src);
2407 2413
2408static const struct snd_kcontrol_new rt5665_tdm1_adc_mux = 2414static const struct snd_kcontrol_new rt5665_tdm1_adc_mux =
2409 SOC_DAPM_ENUM("TDM1 ADC Mux", rt5665_tdm1_adc_data_enum); 2415 SOC_DAPM_ENUM("TDM1 ADC Mux", rt5665_tdm1_adc_data_enum);
2410 2416
2411static const SOC_ENUM_SINGLE_DECL( 2417static SOC_ENUM_SINGLE_DECL(
2412 rt5665_tdm2_adc_data_enum, RT5665_TDM_CTRL_4, 2418 rt5665_tdm2_adc_data_enum, RT5665_TDM_CTRL_4,
2413 RT5665_TDM_ADC_SEL_SFT, rt5665_tdm_adc_data_src); 2419 RT5665_TDM_ADC_SEL_SFT, rt5665_tdm_adc_data_src);
2414 2420
@@ -2607,7 +2613,7 @@ static int rt5665_i2s_pin_event(struct snd_soc_dapm_widget *w,
2607 struct snd_kcontrol *kcontrol, int event) 2613 struct snd_kcontrol *kcontrol, int event)
2608{ 2614{
2609 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); 2615 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
2610 unsigned int val1, val2, mask1, mask2 = 0; 2616 unsigned int val1, val2, mask1 = 0, mask2 = 0;
2611 2617
2612 switch (w->shift) { 2618 switch (w->shift) {
2613 case RT5665_PWR_I2S2_1_BIT: 2619 case RT5665_PWR_I2S2_1_BIT:
@@ -2635,13 +2641,17 @@ static int rt5665_i2s_pin_event(struct snd_soc_dapm_widget *w,
2635 } 2641 }
2636 switch (event) { 2642 switch (event) {
2637 case SND_SOC_DAPM_PRE_PMU: 2643 case SND_SOC_DAPM_PRE_PMU:
2638 snd_soc_update_bits(codec, RT5665_GPIO_CTRL_1, mask1, val1); 2644 if (mask1)
2645 snd_soc_update_bits(codec, RT5665_GPIO_CTRL_1,
2646 mask1, val1);
2639 if (mask2) 2647 if (mask2)
2640 snd_soc_update_bits(codec, RT5665_GPIO_CTRL_2, 2648 snd_soc_update_bits(codec, RT5665_GPIO_CTRL_2,
2641 mask2, val2); 2649 mask2, val2);
2642 break; 2650 break;
2643 case SND_SOC_DAPM_POST_PMD: 2651 case SND_SOC_DAPM_POST_PMD:
2644 snd_soc_update_bits(codec, RT5665_GPIO_CTRL_1, mask1, 0); 2652 if (mask1)
2653 snd_soc_update_bits(codec, RT5665_GPIO_CTRL_1,
2654 mask1, 0);
2645 if (mask2) 2655 if (mask2)
2646 snd_soc_update_bits(codec, RT5665_GPIO_CTRL_2, 2656 snd_soc_update_bits(codec, RT5665_GPIO_CTRL_2,
2647 mask2, 0); 2657 mask2, 0);
@@ -2684,6 +2694,8 @@ static const struct snd_soc_dapm_widget rt5665_dapm_widgets[] = {
2684 RT5665_DAC_MONO_R_ASRC_SFT, 0, NULL, 0), 2694 RT5665_DAC_MONO_R_ASRC_SFT, 0, NULL, 0),
2685 SND_SOC_DAPM_SUPPLY_S("ADC STO1 ASRC", 1, RT5665_ASRC_1, 2695 SND_SOC_DAPM_SUPPLY_S("ADC STO1 ASRC", 1, RT5665_ASRC_1,
2686 RT5665_ADC_STO1_ASRC_SFT, 0, NULL, 0), 2696 RT5665_ADC_STO1_ASRC_SFT, 0, NULL, 0),
2697 SND_SOC_DAPM_SUPPLY_S("ADC STO2 ASRC", 1, RT5665_ASRC_1,
2698 RT5665_ADC_STO2_ASRC_SFT, 0, NULL, 0),
2687 SND_SOC_DAPM_SUPPLY_S("ADC Mono L ASRC", 1, RT5665_ASRC_1, 2699 SND_SOC_DAPM_SUPPLY_S("ADC Mono L ASRC", 1, RT5665_ASRC_1,
2688 RT5665_ADC_MONO_L_ASRC_SFT, 0, NULL, 0), 2700 RT5665_ADC_MONO_L_ASRC_SFT, 0, NULL, 0),
2689 SND_SOC_DAPM_SUPPLY_S("ADC Mono R ASRC", 1, RT5665_ASRC_1, 2701 SND_SOC_DAPM_SUPPLY_S("ADC Mono R ASRC", 1, RT5665_ASRC_1,
@@ -3227,6 +3239,7 @@ static const struct snd_soc_dapm_route rt5665_dapm_routes[] = {
3227 3239
3228 /*ASRC*/ 3240 /*ASRC*/
3229 {"ADC Stereo1 Filter", NULL, "ADC STO1 ASRC", is_using_asrc}, 3241 {"ADC Stereo1 Filter", NULL, "ADC STO1 ASRC", is_using_asrc},
3242 {"ADC Stereo2 Filter", NULL, "ADC STO2 ASRC", is_using_asrc},
3230 {"ADC Mono Left Filter", NULL, "ADC Mono L ASRC", is_using_asrc}, 3243 {"ADC Mono Left Filter", NULL, "ADC Mono L ASRC", is_using_asrc},
3231 {"ADC Mono Right Filter", NULL, "ADC Mono R ASRC", is_using_asrc}, 3244 {"ADC Mono Right Filter", NULL, "ADC Mono R ASRC", is_using_asrc},
3232 {"DAC Mono Left Filter", NULL, "DAC Mono L ASRC", is_using_asrc}, 3245 {"DAC Mono Left Filter", NULL, "DAC Mono L ASRC", is_using_asrc},
@@ -4688,6 +4701,7 @@ static void rt5665_calibrate(struct rt5665_priv *rt5665)
4688 regmap_write(rt5665->regmap, RT5665_ASRC_8, 0x0120); 4701 regmap_write(rt5665->regmap, RT5665_ASRC_8, 0x0120);
4689 4702
4690out_unlock: 4703out_unlock:
4704 rt5665->calibration_done = true;
4691 mutex_unlock(&rt5665->calibrate_mutex); 4705 mutex_unlock(&rt5665->calibrate_mutex);
4692} 4706}
4693 4707
@@ -4922,7 +4936,7 @@ static struct acpi_device_id rt5665_acpi_match[] = {
4922MODULE_DEVICE_TABLE(acpi, rt5665_acpi_match); 4936MODULE_DEVICE_TABLE(acpi, rt5665_acpi_match);
4923#endif 4937#endif
4924 4938
4925struct i2c_driver rt5665_i2c_driver = { 4939static struct i2c_driver rt5665_i2c_driver = {
4926 .driver = { 4940 .driver = {
4927 .name = "rt5665", 4941 .name = "rt5665",
4928 .of_match_table = of_match_ptr(rt5665_of_match), 4942 .of_match_table = of_match_ptr(rt5665_of_match),
diff --git a/sound/soc/codecs/rt5670.c b/sound/soc/codecs/rt5670.c
index e27c5a4a0a15..0ec7985ed306 100644
--- a/sound/soc/codecs/rt5670.c
+++ b/sound/soc/codecs/rt5670.c
@@ -1717,7 +1717,6 @@ static const struct snd_soc_dapm_widget rt5670_dapm_widgets[] = {
1717 SND_SOC_DAPM_PGA("IF1_ADC1", SND_SOC_NOPM, 0, 0, NULL, 0), 1717 SND_SOC_DAPM_PGA("IF1_ADC1", SND_SOC_NOPM, 0, 0, NULL, 0),
1718 SND_SOC_DAPM_PGA("IF1_ADC2", SND_SOC_NOPM, 0, 0, NULL, 0), 1718 SND_SOC_DAPM_PGA("IF1_ADC2", SND_SOC_NOPM, 0, 0, NULL, 0),
1719 SND_SOC_DAPM_PGA("IF1_ADC3", SND_SOC_NOPM, 0, 0, NULL, 0), 1719 SND_SOC_DAPM_PGA("IF1_ADC3", SND_SOC_NOPM, 0, 0, NULL, 0),
1720 SND_SOC_DAPM_PGA("IF1_ADC4", SND_SOC_NOPM, 0, 0, NULL, 0),
1721 1720
1722 /* DSP */ 1721 /* DSP */
1723 SND_SOC_DAPM_PGA("TxDP_ADC", SND_SOC_NOPM, 0, 0, NULL, 0), 1722 SND_SOC_DAPM_PGA("TxDP_ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
@@ -2023,7 +2022,6 @@ static const struct snd_soc_dapm_route rt5670_dapm_routes[] = {
2023 2022
2024 { "Stereo1 ADC MIXL", NULL, "Sto1 ADC MIXL" }, 2023 { "Stereo1 ADC MIXL", NULL, "Sto1 ADC MIXL" },
2025 { "Stereo1 ADC MIXL", NULL, "ADC Stereo1 Filter" }, 2024 { "Stereo1 ADC MIXL", NULL, "ADC Stereo1 Filter" },
2026 { "ADC Stereo1 Filter", NULL, "PLL1", is_sys_clk_from_pll },
2027 2025
2028 { "Stereo1 ADC MIXR", NULL, "Sto1 ADC MIXR" }, 2026 { "Stereo1 ADC MIXR", NULL, "Sto1 ADC MIXR" },
2029 { "Stereo1 ADC MIXR", NULL, "ADC Stereo1 Filter" }, 2027 { "Stereo1 ADC MIXR", NULL, "ADC Stereo1 Filter" },
@@ -2062,7 +2060,6 @@ static const struct snd_soc_dapm_route rt5670_dapm_routes[] = {
2062 2060
2063 { "Stereo2 ADC MIXL", NULL, "Stereo2 ADC LR Mux" }, 2061 { "Stereo2 ADC MIXL", NULL, "Stereo2 ADC LR Mux" },
2064 { "Stereo2 ADC MIXL", NULL, "ADC Stereo2 Filter" }, 2062 { "Stereo2 ADC MIXL", NULL, "ADC Stereo2 Filter" },
2065 { "ADC Stereo2 Filter", NULL, "PLL1", is_sys_clk_from_pll },
2066 2063
2067 { "Stereo2 ADC MIXR", NULL, "Sto2 ADC MIXR" }, 2064 { "Stereo2 ADC MIXR", NULL, "Sto2 ADC MIXR" },
2068 { "Stereo2 ADC MIXR", NULL, "ADC Stereo2 Filter" }, 2065 { "Stereo2 ADC MIXR", NULL, "ADC Stereo2 Filter" },
@@ -2086,13 +2083,13 @@ static const struct snd_soc_dapm_route rt5670_dapm_routes[] = {
2086 { "IF1 ADC1 IN1 Mux", "IF1_ADC3", "IF1_ADC3" }, 2083 { "IF1 ADC1 IN1 Mux", "IF1_ADC3", "IF1_ADC3" },
2087 2084
2088 { "IF1 ADC1 IN2 Mux", "IF1_ADC1_IN1", "IF1 ADC1 IN1 Mux" }, 2085 { "IF1 ADC1 IN2 Mux", "IF1_ADC1_IN1", "IF1 ADC1 IN1 Mux" },
2089 { "IF1 ADC1 IN2 Mux", "IF1_ADC4", "IF1_ADC4" }, 2086 { "IF1 ADC1 IN2 Mux", "IF1_ADC4", "TxDP_ADC" },
2090 2087
2091 { "IF1 ADC2 IN Mux", "IF_ADC2", "IF_ADC2" }, 2088 { "IF1 ADC2 IN Mux", "IF_ADC2", "IF_ADC2" },
2092 { "IF1 ADC2 IN Mux", "VAD_ADC", "VAD_ADC" }, 2089 { "IF1 ADC2 IN Mux", "VAD_ADC", "VAD_ADC" },
2093 2090
2094 { "IF1 ADC2 IN1 Mux", "IF1_ADC2_IN", "IF1 ADC2 IN Mux" }, 2091 { "IF1 ADC2 IN1 Mux", "IF1_ADC2_IN", "IF1 ADC2 IN Mux" },
2095 { "IF1 ADC2 IN1 Mux", "IF1_ADC4", "IF1_ADC4" }, 2092 { "IF1 ADC2 IN1 Mux", "IF1_ADC4", "TxDP_ADC" },
2096 2093
2097 { "IF1_ADC1" , NULL, "IF1 ADC1 IN2 Mux" }, 2094 { "IF1_ADC1" , NULL, "IF1 ADC1 IN2 Mux" },
2098 { "IF1_ADC2" , NULL, "IF1 ADC2 IN1 Mux" }, 2095 { "IF1_ADC2" , NULL, "IF1 ADC2 IN1 Mux" },
@@ -2445,10 +2442,9 @@ static int rt5670_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
2445 return 0; 2442 return 0;
2446} 2443}
2447 2444
2448static int rt5670_set_dai_sysclk(struct snd_soc_dai *dai, 2445static int rt5670_set_codec_sysclk(struct snd_soc_codec *codec, int clk_id,
2449 int clk_id, unsigned int freq, int dir) 2446 int source, unsigned int freq, int dir)
2450{ 2447{
2451 struct snd_soc_codec *codec = dai->codec;
2452 struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec); 2448 struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec);
2453 unsigned int reg_val = 0; 2449 unsigned int reg_val = 0;
2454 2450
@@ -2472,7 +2468,7 @@ static int rt5670_set_dai_sysclk(struct snd_soc_dai *dai,
2472 if (clk_id != RT5670_SCLK_S_RCCLK) 2468 if (clk_id != RT5670_SCLK_S_RCCLK)
2473 rt5670->sysclk_src = clk_id; 2469 rt5670->sysclk_src = clk_id;
2474 2470
2475 dev_dbg(dai->dev, "Sysclk is %dHz and clock id is %d\n", freq, clk_id); 2471 dev_dbg(codec->dev, "Sysclk : %dHz clock id : %d\n", freq, clk_id);
2476 2472
2477 return 0; 2473 return 0;
2478} 2474}
@@ -2724,7 +2720,6 @@ static int rt5670_resume(struct snd_soc_codec *codec)
2724static const struct snd_soc_dai_ops rt5670_aif_dai_ops = { 2720static const struct snd_soc_dai_ops rt5670_aif_dai_ops = {
2725 .hw_params = rt5670_hw_params, 2721 .hw_params = rt5670_hw_params,
2726 .set_fmt = rt5670_set_dai_fmt, 2722 .set_fmt = rt5670_set_dai_fmt,
2727 .set_sysclk = rt5670_set_dai_sysclk,
2728 .set_tdm_slot = rt5670_set_tdm_slot, 2723 .set_tdm_slot = rt5670_set_tdm_slot,
2729 .set_pll = rt5670_set_dai_pll, 2724 .set_pll = rt5670_set_dai_pll,
2730}; 2725};
@@ -2777,6 +2772,7 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5670 = {
2777 .resume = rt5670_resume, 2772 .resume = rt5670_resume,
2778 .set_bias_level = rt5670_set_bias_level, 2773 .set_bias_level = rt5670_set_bias_level,
2779 .idle_bias_off = true, 2774 .idle_bias_off = true,
2775 .set_sysclk = rt5670_set_codec_sysclk,
2780 .component_driver = { 2776 .component_driver = {
2781 .controls = rt5670_snd_controls, 2777 .controls = rt5670_snd_controls,
2782 .num_controls = ARRAY_SIZE(rt5670_snd_controls), 2778 .num_controls = ARRAY_SIZE(rt5670_snd_controls),
@@ -2849,6 +2845,10 @@ static const struct dmi_system_id dmi_platform_intel_braswell[] = {
2849 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"), 2845 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"),
2850 }, 2846 },
2851 }, 2847 },
2848 {}
2849};
2850
2851static const struct dmi_system_id dmi_platform_intel_bytcht_jdmode2[] = {
2852 { 2852 {
2853 .ident = "Lenovo Thinkpad Tablet 10", 2853 .ident = "Lenovo Thinkpad Tablet 10",
2854 .matches = { 2854 .matches = {
@@ -2883,6 +2883,11 @@ static int rt5670_i2c_probe(struct i2c_client *i2c,
2883 rt5670->pdata.dmic1_data_pin = RT5670_DMIC_DATA_IN2P; 2883 rt5670->pdata.dmic1_data_pin = RT5670_DMIC_DATA_IN2P;
2884 rt5670->pdata.dev_gpio = true; 2884 rt5670->pdata.dev_gpio = true;
2885 rt5670->pdata.jd_mode = 1; 2885 rt5670->pdata.jd_mode = 1;
2886 } else if (dmi_check_system(dmi_platform_intel_bytcht_jdmode2)) {
2887 rt5670->pdata.dmic_en = true;
2888 rt5670->pdata.dmic1_data_pin = RT5670_DMIC_DATA_IN2P;
2889 rt5670->pdata.dev_gpio = true;
2890 rt5670->pdata.jd_mode = 2;
2886 } 2891 }
2887 2892
2888 rt5670->regmap = devm_regmap_init_i2c(i2c, &rt5670_regmap); 2893 rt5670->regmap = devm_regmap_init_i2c(i2c, &rt5670_regmap);
diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c
index 65ac4518ad06..36e530a36c82 100644
--- a/sound/soc/codecs/rt5677.c
+++ b/sound/soc/codecs/rt5677.c
@@ -41,15 +41,6 @@
41 41
42#define RT5677_PR_BASE (RT5677_PR_RANGE_BASE + (0 * RT5677_PR_SPACING)) 42#define RT5677_PR_BASE (RT5677_PR_RANGE_BASE + (0 * RT5677_PR_SPACING))
43 43
44/* GPIO indexes defined by ACPI */
45enum {
46 RT5677_GPIO_PLUG_DET = 0,
47 RT5677_GPIO_MIC_PRESENT_L = 1,
48 RT5677_GPIO_HOTWORD_DET_L = 2,
49 RT5677_GPIO_DSP_INT = 3,
50 RT5677_GPIO_HP_AMP_SHDN_L = 4,
51};
52
53static const struct regmap_range_cfg rt5677_ranges[] = { 44static const struct regmap_range_cfg rt5677_ranges[] = {
54 { 45 {
55 .name = "PR", 46 .name = "PR",
@@ -5030,7 +5021,6 @@ static const struct regmap_config rt5677_regmap = {
5030static const struct i2c_device_id rt5677_i2c_id[] = { 5021static const struct i2c_device_id rt5677_i2c_id[] = {
5031 { "rt5677", RT5677 }, 5022 { "rt5677", RT5677 },
5032 { "rt5676", RT5676 }, 5023 { "rt5676", RT5676 },
5033 { "RT5677CE:00", RT5677 },
5034 { } 5024 { }
5035}; 5025};
5036MODULE_DEVICE_TABLE(i2c, rt5677_i2c_id); 5026MODULE_DEVICE_TABLE(i2c, rt5677_i2c_id);
@@ -5041,28 +5031,19 @@ static const struct of_device_id rt5677_of_match[] = {
5041}; 5031};
5042MODULE_DEVICE_TABLE(of, rt5677_of_match); 5032MODULE_DEVICE_TABLE(of, rt5677_of_match);
5043 5033
5044static const struct acpi_gpio_params plug_det_gpio = { RT5677_GPIO_PLUG_DET, 0, false }; 5034#ifdef CONFIG_ACPI
5045static const struct acpi_gpio_params mic_present_gpio = { RT5677_GPIO_MIC_PRESENT_L, 0, false }; 5035static const struct acpi_device_id rt5677_acpi_match[] = {
5046static const struct acpi_gpio_params headphone_enable_gpio = { RT5677_GPIO_HP_AMP_SHDN_L, 0, false }; 5036 { "RT5677CE", RT5677 },
5047 5037 { }
5048static const struct acpi_gpio_mapping bdw_rt5677_gpios[] = {
5049 { "plug-det-gpios", &plug_det_gpio, 1 },
5050 { "mic-present-gpios", &mic_present_gpio, 1 },
5051 { "headphone-enable-gpios", &headphone_enable_gpio, 1 },
5052 { NULL },
5053}; 5038};
5039MODULE_DEVICE_TABLE(acpi, rt5677_acpi_match);
5040#endif
5054 5041
5055static void rt5677_read_acpi_properties(struct rt5677_priv *rt5677, 5042static void rt5677_read_acpi_properties(struct rt5677_priv *rt5677,
5056 struct device *dev) 5043 struct device *dev)
5057{ 5044{
5058 int ret;
5059 u32 val; 5045 u32 val;
5060 5046
5061 ret = acpi_dev_add_driver_gpios(ACPI_COMPANION(dev),
5062 bdw_rt5677_gpios);
5063 if (ret)
5064 dev_warn(dev, "Failed to add driver gpios\n");
5065
5066 if (!device_property_read_u32(dev, "DCLK", &val)) 5047 if (!device_property_read_u32(dev, "DCLK", &val))
5067 rt5677->pdata.dmic2_clk_pin = val; 5048 rt5677->pdata.dmic2_clk_pin = val;
5068 5049
@@ -5301,6 +5282,7 @@ static struct i2c_driver rt5677_i2c_driver = {
5301 .driver = { 5282 .driver = {
5302 .name = "rt5677", 5283 .name = "rt5677",
5303 .of_match_table = rt5677_of_match, 5284 .of_match_table = rt5677_of_match,
5285 .acpi_match_table = ACPI_PTR(rt5677_acpi_match),
5304 }, 5286 },
5305 .probe = rt5677_i2c_probe, 5287 .probe = rt5677_i2c_probe,
5306 .remove = rt5677_i2c_remove, 5288 .remove = rt5677_i2c_remove,
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index 5a2702edeb77..8f6814c1eb6b 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -74,6 +74,20 @@ static const struct reg_default sgtl5000_reg_defaults[] = {
74 { SGTL5000_DAP_AVC_DECAY, 0x0050 }, 74 { SGTL5000_DAP_AVC_DECAY, 0x0050 },
75}; 75};
76 76
77/* AVC: Threshold dB -> register: pre-calculated values */
78static const u16 avc_thr_db2reg[97] = {
79 0x5168, 0x488E, 0x40AA, 0x39A1, 0x335D, 0x2DC7, 0x28CC, 0x245D, 0x2068,
80 0x1CE2, 0x19BE, 0x16F1, 0x1472, 0x1239, 0x103E, 0x0E7A, 0x0CE6, 0x0B7F,
81 0x0A3F, 0x0922, 0x0824, 0x0741, 0x0677, 0x05C3, 0x0522, 0x0493, 0x0414,
82 0x03A2, 0x033D, 0x02E3, 0x0293, 0x024B, 0x020B, 0x01D2, 0x019F, 0x0172,
83 0x014A, 0x0126, 0x0106, 0x00E9, 0x00D0, 0x00B9, 0x00A5, 0x0093, 0x0083,
84 0x0075, 0x0068, 0x005D, 0x0052, 0x0049, 0x0041, 0x003A, 0x0034, 0x002E,
85 0x0029, 0x0025, 0x0021, 0x001D, 0x001A, 0x0017, 0x0014, 0x0012, 0x0010,
86 0x000E, 0x000D, 0x000B, 0x000A, 0x0009, 0x0008, 0x0007, 0x0006, 0x0005,
87 0x0005, 0x0004, 0x0004, 0x0003, 0x0003, 0x0002, 0x0002, 0x0002, 0x0002,
88 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000,
89 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
90
77/* regulator supplies for sgtl5000, VDDD is an optional external supply */ 91/* regulator supplies for sgtl5000, VDDD is an optional external supply */
78enum sgtl5000_regulator_supplies { 92enum sgtl5000_regulator_supplies {
79 VDDA, 93 VDDA,
@@ -382,6 +396,65 @@ static int dac_put_volsw(struct snd_kcontrol *kcontrol,
382 return 0; 396 return 0;
383} 397}
384 398
399/*
400 * custom function to get AVC threshold
401 *
402 * The threshold dB is calculated by rearranging the calculation from the
403 * avc_put_threshold function: register_value = 10^(dB/20) * 0.636 * 2^15 ==>
404 * dB = ( fls(register_value) - 14.347 ) * 6.02
405 *
406 * As this calculation is expensive and the threshold dB values may not exeed
407 * 0 to 96 we use pre-calculated values.
408 */
409static int avc_get_threshold(struct snd_kcontrol *kcontrol,
410 struct snd_ctl_elem_value *ucontrol)
411{
412 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
413 int db, i;
414 u16 reg = snd_soc_read(codec, SGTL5000_DAP_AVC_THRESHOLD);
415
416 /* register value 0 => -96dB */
417 if (!reg) {
418 ucontrol->value.integer.value[0] = 96;
419 ucontrol->value.integer.value[1] = 96;
420 return 0;
421 }
422
423 /* get dB from register value (rounded down) */
424 for (i = 0; avc_thr_db2reg[i] > reg; i++)
425 ;
426 db = i;
427
428 ucontrol->value.integer.value[0] = db;
429 ucontrol->value.integer.value[1] = db;
430
431 return 0;
432}
433
434/*
435 * custom function to put AVC threshold
436 *
437 * The register value is calculated by following formula:
438 * register_value = 10^(dB/20) * 0.636 * 2^15
439 * As this calculation is expensive and the threshold dB values may not exeed
440 * 0 to 96 we use pre-calculated values.
441 */
442static int avc_put_threshold(struct snd_kcontrol *kcontrol,
443 struct snd_ctl_elem_value *ucontrol)
444{
445 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
446 int db;
447 u16 reg;
448
449 db = (int)ucontrol->value.integer.value[0];
450 if (db < 0 || db > 96)
451 return -EINVAL;
452 reg = avc_thr_db2reg[db];
453 snd_soc_write(codec, SGTL5000_DAP_AVC_THRESHOLD, reg);
454
455 return 0;
456}
457
385static const DECLARE_TLV_DB_SCALE(capture_6db_attenuate, -600, 600, 0); 458static const DECLARE_TLV_DB_SCALE(capture_6db_attenuate, -600, 600, 0);
386 459
387/* tlv for mic gain, 0db 20db 30db 40db */ 460/* tlv for mic gain, 0db 20db 30db 40db */
@@ -396,6 +469,12 @@ static const DECLARE_TLV_DB_SCALE(headphone_volume, -5150, 50, 0);
396/* tlv for lineout volume, 31 steps of .5db each */ 469/* tlv for lineout volume, 31 steps of .5db each */
397static const DECLARE_TLV_DB_SCALE(lineout_volume, -1550, 50, 0); 470static const DECLARE_TLV_DB_SCALE(lineout_volume, -1550, 50, 0);
398 471
472/* tlv for dap avc max gain, 0db, 6db, 12db */
473static const DECLARE_TLV_DB_SCALE(avc_max_gain, 0, 600, 0);
474
475/* tlv for dap avc threshold, */
476static const DECLARE_TLV_DB_MINMAX(avc_threshold, 0, 9600);
477
399static const struct snd_kcontrol_new sgtl5000_snd_controls[] = { 478static const struct snd_kcontrol_new sgtl5000_snd_controls[] = {
400 /* SOC_DOUBLE_S8_TLV with invert */ 479 /* SOC_DOUBLE_S8_TLV with invert */
401 { 480 {
@@ -434,6 +513,16 @@ static const struct snd_kcontrol_new sgtl5000_snd_controls[] = {
434 0x1f, 1, 513 0x1f, 1,
435 lineout_volume), 514 lineout_volume),
436 SOC_SINGLE("Lineout Playback Switch", SGTL5000_CHIP_ANA_CTRL, 8, 1, 1), 515 SOC_SINGLE("Lineout Playback Switch", SGTL5000_CHIP_ANA_CTRL, 8, 1, 1),
516
517 /* Automatic Volume Control (DAP AVC) */
518 SOC_SINGLE("AVC Switch", SGTL5000_DAP_AVC_CTRL, 0, 1, 0),
519 SOC_SINGLE("AVC Hard Limiter Switch", SGTL5000_DAP_AVC_CTRL, 5, 1, 0),
520 SOC_SINGLE_TLV("AVC Max Gain Volume", SGTL5000_DAP_AVC_CTRL, 12, 2, 0,
521 avc_max_gain),
522 SOC_SINGLE("AVC Integrator Response", SGTL5000_DAP_AVC_CTRL, 8, 3, 0),
523 SOC_SINGLE_EXT_TLV("AVC Threshold Volume", SGTL5000_DAP_AVC_THRESHOLD,
524 0, 96, 0, avc_get_threshold, avc_put_threshold,
525 avc_threshold),
437}; 526};
438 527
439/* mute the codec used by alsa core */ 528/* mute the codec used by alsa core */
diff --git a/sound/soc/codecs/tlv320aic31xx.c b/sound/soc/codecs/tlv320aic31xx.c
index f8a90ba8cd71..d7d03c92cb8a 100644
--- a/sound/soc/codecs/tlv320aic31xx.c
+++ b/sound/soc/codecs/tlv320aic31xx.c
@@ -1210,7 +1210,7 @@ static const struct snd_soc_dai_ops aic31xx_dai_ops = {
1210 1210
1211static struct snd_soc_dai_driver dac31xx_dai_driver[] = { 1211static struct snd_soc_dai_driver dac31xx_dai_driver[] = {
1212 { 1212 {
1213 .name = "tlv32dac31xx-hifi", 1213 .name = "tlv320dac31xx-hifi",
1214 .playback = { 1214 .playback = {
1215 .stream_name = "Playback", 1215 .stream_name = "Playback",
1216 .channels_min = 2, 1216 .channels_min = 2,
diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index 20695b691aff..65c059b5ffd7 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -482,8 +482,6 @@ struct wm_coeff_ctl_ops {
482 struct snd_ctl_elem_value *ucontrol); 482 struct snd_ctl_elem_value *ucontrol);
483 int (*xput)(struct snd_kcontrol *kcontrol, 483 int (*xput)(struct snd_kcontrol *kcontrol,
484 struct snd_ctl_elem_value *ucontrol); 484 struct snd_ctl_elem_value *ucontrol);
485 int (*xinfo)(struct snd_kcontrol *kcontrol,
486 struct snd_ctl_elem_info *uinfo);
487}; 485};
488 486
489struct wm_coeff_ctl { 487struct wm_coeff_ctl {
@@ -1890,7 +1888,7 @@ static void *wm_adsp_read_algs(struct wm_adsp *dsp, size_t n_algs,
1890 } 1888 }
1891 1889
1892 if (be32_to_cpu(val) != 0xbedead) 1890 if (be32_to_cpu(val) != 0xbedead)
1893 adsp_warn(dsp, "Algorithm list end %x 0x%x != 0xbeadead\n", 1891 adsp_warn(dsp, "Algorithm list end %x 0x%x != 0xbedead\n",
1894 pos + len, be32_to_cpu(val)); 1892 pos + len, be32_to_cpu(val));
1895 1893
1896 alg = kzalloc(len * 2, GFP_KERNEL | GFP_DMA); 1894 alg = kzalloc(len * 2, GFP_KERNEL | GFP_DMA);
@@ -2654,7 +2652,7 @@ int wm_adsp2_preloader_put(struct snd_kcontrol *kcontrol,
2654 (struct soc_mixer_control *)kcontrol->private_value; 2652 (struct soc_mixer_control *)kcontrol->private_value;
2655 char preload[32]; 2653 char preload[32];
2656 2654
2657 snprintf(preload, ARRAY_SIZE(preload), "DSP%d Preload", mc->shift); 2655 snprintf(preload, ARRAY_SIZE(preload), "DSP%u Preload", mc->shift);
2658 2656
2659 dsp->preloaded = ucontrol->value.integer.value[0]; 2657 dsp->preloaded = ucontrol->value.integer.value[0];
2660 2658
diff --git a/sound/soc/codecs/zx_aud96p22.c b/sound/soc/codecs/zx_aud96p22.c
new file mode 100644
index 000000000000..032fb7cf6cbd
--- /dev/null
+++ b/sound/soc/codecs/zx_aud96p22.c
@@ -0,0 +1,403 @@
1/*
2 * Copyright (C) 2017 Sanechips Technology Co., Ltd.
3 * Copyright 2017 Linaro Ltd.
4 *
5 * Author: Baoyou Xie <baoyou.xie@linaro.org>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/gpio/consumer.h>
13#include <linux/i2c.h>
14#include <linux/module.h>
15#include <linux/regmap.h>
16#include <sound/pcm.h>
17#include <sound/pcm_params.h>
18#include <sound/soc.h>
19#include <sound/soc-dai.h>
20#include <sound/tlv.h>
21
22#define AUD96P22_RESET 0x00
23#define RST_DAC_DPZ BIT(0)
24#define RST_ADC_DPZ BIT(1)
25#define AUD96P22_I2S1_CONFIG_0 0x03
26#define I2S1_MS_MODE BIT(3)
27#define I2S1_MODE_MASK 0x7
28#define I2S1_MODE_RIGHT_J 0x0
29#define I2S1_MODE_I2S 0x1
30#define I2S1_MODE_LEFT_J 0x2
31#define AUD96P22_PD_0 0x15
32#define AUD96P22_PD_1 0x16
33#define AUD96P22_PD_3 0x18
34#define AUD96P22_PD_4 0x19
35#define AUD96P22_MUTE_0 0x1d
36#define AUD96P22_MUTE_2 0x1f
37#define AUD96P22_MUTE_4 0x21
38#define AUD96P22_RECVOL_0 0x24
39#define AUD96P22_RECVOL_1 0x25
40#define AUD96P22_PGA1VOL_0 0x26
41#define AUD96P22_PGA1VOL_1 0x27
42#define AUD96P22_LMVOL_0 0x34
43#define AUD96P22_LMVOL_1 0x35
44#define AUD96P22_HS1VOL_0 0x38
45#define AUD96P22_HS1VOL_1 0x39
46#define AUD96P22_PGA1SEL_0 0x47
47#define AUD96P22_PGA1SEL_1 0x48
48#define AUD96P22_LDR1SEL_0 0x59
49#define AUD96P22_LDR1SEL_1 0x60
50#define AUD96P22_LDR2SEL_0 0x5d
51#define AUD96P22_REG_MAX 0xfb
52
53struct aud96p22_priv {
54 struct regmap *regmap;
55};
56
57static int aud96p22_adc_event(struct snd_soc_dapm_widget *w,
58 struct snd_kcontrol *kcontrol, int event)
59{
60 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
61 struct aud96p22_priv *priv = snd_soc_codec_get_drvdata(codec);
62 struct regmap *regmap = priv->regmap;
63
64 if (event != SND_SOC_DAPM_POST_PMU)
65 return -EINVAL;
66
67 /* Assert/de-assert the bit to reset ADC data path */
68 regmap_update_bits(regmap, AUD96P22_RESET, RST_ADC_DPZ, 0);
69 regmap_update_bits(regmap, AUD96P22_RESET, RST_ADC_DPZ, RST_ADC_DPZ);
70
71 return 0;
72}
73
74static int aud96p22_dac_event(struct snd_soc_dapm_widget *w,
75 struct snd_kcontrol *kcontrol, int event)
76{
77 struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
78 struct aud96p22_priv *priv = snd_soc_codec_get_drvdata(codec);
79 struct regmap *regmap = priv->regmap;
80
81 if (event != SND_SOC_DAPM_POST_PMU)
82 return -EINVAL;
83
84 /* Assert/de-assert the bit to reset DAC data path */
85 regmap_update_bits(regmap, AUD96P22_RESET, RST_DAC_DPZ, 0);
86 regmap_update_bits(regmap, AUD96P22_RESET, RST_DAC_DPZ, RST_DAC_DPZ);
87
88 return 0;
89}
90
91static const DECLARE_TLV_DB_SCALE(lm_tlv, -11550, 50, 0);
92static const DECLARE_TLV_DB_SCALE(hs_tlv, -3900, 300, 0);
93static const DECLARE_TLV_DB_SCALE(rec_tlv, -9550, 50, 0);
94static const DECLARE_TLV_DB_SCALE(pga_tlv, -1800, 100, 0);
95
96static const struct snd_kcontrol_new aud96p22_snd_controls[] = {
97 /* Volume control */
98 SOC_DOUBLE_R_TLV("Master Playback Volume", AUD96P22_LMVOL_0,
99 AUD96P22_LMVOL_1, 0, 0xff, 0, lm_tlv),
100 SOC_DOUBLE_R_TLV("Headphone Volume", AUD96P22_HS1VOL_0,
101 AUD96P22_HS1VOL_1, 0, 0xf, 0, hs_tlv),
102 SOC_DOUBLE_R_TLV("Master Capture Volume", AUD96P22_RECVOL_0,
103 AUD96P22_RECVOL_1, 0, 0xff, 0, rec_tlv),
104 SOC_DOUBLE_R_TLV("Analogue Capture Volume", AUD96P22_PGA1VOL_0,
105 AUD96P22_PGA1VOL_1, 0, 0x37, 0, pga_tlv),
106
107 /* Mute control */
108 SOC_DOUBLE("Master Playback Switch", AUD96P22_MUTE_2, 0, 1, 1, 1),
109 SOC_DOUBLE("Headphone Switch", AUD96P22_MUTE_2, 4, 5, 1, 1),
110 SOC_DOUBLE("Line Out Switch", AUD96P22_MUTE_4, 0, 1, 1, 1),
111 SOC_DOUBLE("Speaker Switch", AUD96P22_MUTE_4, 2, 3, 1, 1),
112 SOC_DOUBLE("Master Capture Switch", AUD96P22_MUTE_0, 0, 1, 1, 1),
113 SOC_DOUBLE("Analogue Capture Switch", AUD96P22_MUTE_0, 2, 3, 1, 1),
114};
115
116/* Input mux kcontrols */
117static const unsigned int ain_mux_values[] = {
118 0, 1, 3, 4, 5,
119};
120
121static const char * const ainl_mux_texts[] = {
122 "AINL1 differential",
123 "AINL1 single-ended",
124 "AINL3 single-ended",
125 "AINL2 differential",
126 "AINL2 single-ended",
127};
128
129static const char * const ainr_mux_texts[] = {
130 "AINR1 differential",
131 "AINR1 single-ended",
132 "AINR3 single-ended",
133 "AINR2 differential",
134 "AINR2 single-ended",
135};
136
137static SOC_VALUE_ENUM_SINGLE_DECL(ainl_mux_enum, AUD96P22_PGA1SEL_0,
138 0, 0x7, ainl_mux_texts, ain_mux_values);
139static SOC_VALUE_ENUM_SINGLE_DECL(ainr_mux_enum, AUD96P22_PGA1SEL_1,
140 0, 0x7, ainr_mux_texts, ain_mux_values);
141
142static const struct snd_kcontrol_new ainl_mux_kcontrol =
143 SOC_DAPM_ENUM("AINL Mux", ainl_mux_enum);
144static const struct snd_kcontrol_new ainr_mux_kcontrol =
145 SOC_DAPM_ENUM("AINR Mux", ainr_mux_enum);
146
147/* Output mixer kcontrols */
148static const struct snd_kcontrol_new ld1_left_kcontrols[] = {
149 SOC_DAPM_SINGLE("DACL LD1L Switch", AUD96P22_LDR1SEL_0, 0, 1, 0),
150 SOC_DAPM_SINGLE("AINL LD1L Switch", AUD96P22_LDR1SEL_0, 1, 1, 0),
151 SOC_DAPM_SINGLE("AINR LD1L Switch", AUD96P22_LDR1SEL_0, 2, 1, 0),
152};
153
154static const struct snd_kcontrol_new ld1_right_kcontrols[] = {
155 SOC_DAPM_SINGLE("DACR LD1R Switch", AUD96P22_LDR1SEL_1, 8, 1, 0),
156 SOC_DAPM_SINGLE("AINR LD1R Switch", AUD96P22_LDR1SEL_1, 9, 1, 0),
157 SOC_DAPM_SINGLE("AINL LD1R Switch", AUD96P22_LDR1SEL_1, 10, 1, 0),
158};
159
160static const struct snd_kcontrol_new ld2_kcontrols[] = {
161 SOC_DAPM_SINGLE("DACL LD2 Switch", AUD96P22_LDR2SEL_0, 0, 1, 0),
162 SOC_DAPM_SINGLE("AINL LD2 Switch", AUD96P22_LDR2SEL_0, 1, 1, 0),
163 SOC_DAPM_SINGLE("DACR LD2 Switch", AUD96P22_LDR2SEL_0, 2, 1, 0),
164};
165
166static const struct snd_soc_dapm_widget aud96p22_dapm_widgets[] = {
167 /* Overall power bit */
168 SND_SOC_DAPM_SUPPLY("POWER", AUD96P22_PD_0, 0, 0, NULL, 0),
169
170 /* Input pins */
171 SND_SOC_DAPM_INPUT("AINL1P"),
172 SND_SOC_DAPM_INPUT("AINL2P"),
173 SND_SOC_DAPM_INPUT("AINL3"),
174 SND_SOC_DAPM_INPUT("AINL1N"),
175 SND_SOC_DAPM_INPUT("AINL2N"),
176 SND_SOC_DAPM_INPUT("AINR2N"),
177 SND_SOC_DAPM_INPUT("AINR1N"),
178 SND_SOC_DAPM_INPUT("AINR3"),
179 SND_SOC_DAPM_INPUT("AINR2P"),
180 SND_SOC_DAPM_INPUT("AINR1P"),
181
182 /* Input muxes */
183 SND_SOC_DAPM_MUX("AINLMUX", AUD96P22_PD_1, 2, 0, &ainl_mux_kcontrol),
184 SND_SOC_DAPM_MUX("AINRMUX", AUD96P22_PD_1, 3, 0, &ainr_mux_kcontrol),
185
186 /* ADCs */
187 SND_SOC_DAPM_ADC_E("ADCL", "Capture Left", AUD96P22_PD_1, 0, 0,
188 aud96p22_adc_event, SND_SOC_DAPM_POST_PMU),
189 SND_SOC_DAPM_ADC_E("ADCR", "Capture Right", AUD96P22_PD_1, 1, 0,
190 aud96p22_adc_event, SND_SOC_DAPM_POST_PMU),
191
192 /* DACs */
193 SND_SOC_DAPM_DAC_E("DACL", "Playback Left", AUD96P22_PD_3, 0, 0,
194 aud96p22_dac_event, SND_SOC_DAPM_POST_PMU),
195 SND_SOC_DAPM_DAC_E("DACR", "Playback Right", AUD96P22_PD_3, 1, 0,
196 aud96p22_dac_event, SND_SOC_DAPM_POST_PMU),
197
198 /* Output mixers */
199 SND_SOC_DAPM_MIXER("LD1L", AUD96P22_PD_3, 6, 0, ld1_left_kcontrols,
200 ARRAY_SIZE(ld1_left_kcontrols)),
201 SND_SOC_DAPM_MIXER("LD1R", AUD96P22_PD_3, 7, 0, ld1_right_kcontrols,
202 ARRAY_SIZE(ld1_right_kcontrols)),
203 SND_SOC_DAPM_MIXER("LD2", AUD96P22_PD_4, 2, 0, ld2_kcontrols,
204 ARRAY_SIZE(ld2_kcontrols)),
205
206 /* Headset power switch */
207 SND_SOC_DAPM_SUPPLY("HS1L", AUD96P22_PD_3, 4, 0, NULL, 0),
208 SND_SOC_DAPM_SUPPLY("HS1R", AUD96P22_PD_3, 5, 0, NULL, 0),
209
210 /* Output pins */
211 SND_SOC_DAPM_OUTPUT("HSOUTL"),
212 SND_SOC_DAPM_OUTPUT("LINEOUTL"),
213 SND_SOC_DAPM_OUTPUT("LINEOUTMP"),
214 SND_SOC_DAPM_OUTPUT("LINEOUTMN"),
215 SND_SOC_DAPM_OUTPUT("LINEOUTR"),
216 SND_SOC_DAPM_OUTPUT("HSOUTR"),
217};
218
219static const struct snd_soc_dapm_route aud96p22_dapm_routes[] = {
220 { "AINLMUX", "AINL1 differential", "AINL1N" },
221 { "AINLMUX", "AINL1 single-ended", "AINL1P" },
222 { "AINLMUX", "AINL3 single-ended", "AINL3" },
223 { "AINLMUX", "AINL2 differential", "AINL2N" },
224 { "AINLMUX", "AINL2 single-ended", "AINL2P" },
225
226 { "AINRMUX", "AINR1 differential", "AINR1N" },
227 { "AINRMUX", "AINR1 single-ended", "AINR1P" },
228 { "AINRMUX", "AINR3 single-ended", "AINR3" },
229 { "AINRMUX", "AINR2 differential", "AINR2N" },
230 { "AINRMUX", "AINR2 single-ended", "AINR2P" },
231
232 { "ADCL", NULL, "AINLMUX" },
233 { "ADCR", NULL, "AINRMUX" },
234
235 { "ADCL", NULL, "POWER" },
236 { "ADCR", NULL, "POWER" },
237 { "DACL", NULL, "POWER" },
238 { "DACR", NULL, "POWER" },
239
240 { "LD1L", "DACL LD1L Switch", "DACL" },
241 { "LD1L", "AINL LD1L Switch", "AINLMUX" },
242 { "LD1L", "AINR LD1L Switch", "AINRMUX" },
243
244 { "LD1R", "DACR LD1R Switch", "DACR" },
245 { "LD1R", "AINR LD1R Switch", "AINRMUX" },
246 { "LD1R", "AINL LD1R Switch", "AINLMUX" },
247
248 { "LD2", "DACL LD2 Switch", "DACL" },
249 { "LD2", "AINL LD2 Switch", "AINLMUX" },
250 { "LD2", "DACR LD2 Switch", "DACR" },
251
252 { "HSOUTL", NULL, "LD1L" },
253 { "HSOUTR", NULL, "LD1R" },
254 { "HSOUTL", NULL, "HS1L" },
255 { "HSOUTR", NULL, "HS1R" },
256
257 { "LINEOUTL", NULL, "LD1L" },
258 { "LINEOUTR", NULL, "LD1R" },
259
260 { "LINEOUTMP", NULL, "LD2" },
261 { "LINEOUTMN", NULL, "LD2" },
262};
263
264static struct snd_soc_codec_driver aud96p22_driver = {
265 .component_driver = {
266 .controls = aud96p22_snd_controls,
267 .num_controls = ARRAY_SIZE(aud96p22_snd_controls),
268 .dapm_widgets = aud96p22_dapm_widgets,
269 .num_dapm_widgets = ARRAY_SIZE(aud96p22_dapm_widgets),
270 .dapm_routes = aud96p22_dapm_routes,
271 .num_dapm_routes = ARRAY_SIZE(aud96p22_dapm_routes),
272 },
273};
274
275static int aud96p22_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
276{
277 struct aud96p22_priv *priv = snd_soc_codec_get_drvdata(dai->codec);
278 struct regmap *regmap = priv->regmap;
279 unsigned int val;
280
281 /* Master/slave mode */
282 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
283 case SND_SOC_DAIFMT_CBS_CFS:
284 val = 0;
285 break;
286 case SND_SOC_DAIFMT_CBM_CFM:
287 val = I2S1_MS_MODE;
288 break;
289 default:
290 return -EINVAL;
291 }
292
293 regmap_update_bits(regmap, AUD96P22_I2S1_CONFIG_0, I2S1_MS_MODE, val);
294
295 /* Audio format */
296 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
297 case SND_SOC_DAIFMT_RIGHT_J:
298 val = I2S1_MODE_RIGHT_J;
299 break;
300 case SND_SOC_DAIFMT_I2S:
301 val = I2S1_MODE_I2S;
302 break;
303 case SND_SOC_DAIFMT_LEFT_J:
304 val = I2S1_MODE_LEFT_J;
305 break;
306 default:
307 return -EINVAL;
308 }
309
310 regmap_update_bits(regmap, AUD96P22_I2S1_CONFIG_0, I2S1_MODE_MASK, val);
311
312 return 0;
313}
314
315static struct snd_soc_dai_ops aud96p22_dai_ops = {
316 .set_fmt = aud96p22_set_fmt,
317};
318
319#define AUD96P22_RATES SNDRV_PCM_RATE_8000_192000
320#define AUD96P22_FORMATS (\
321 SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE | \
322 SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE)
323
324static struct snd_soc_dai_driver aud96p22_dai = {
325 .name = "aud96p22-dai",
326 .playback = {
327 .stream_name = "Playback",
328 .channels_min = 1,
329 .channels_max = 2,
330 .rates = AUD96P22_RATES,
331 .formats = AUD96P22_FORMATS,
332 },
333 .capture = {
334 .stream_name = "Capture",
335 .channels_min = 1,
336 .channels_max = 2,
337 .rates = AUD96P22_RATES,
338 .formats = AUD96P22_FORMATS,
339 },
340 .ops = &aud96p22_dai_ops,
341};
342
343static const struct regmap_config aud96p22_regmap = {
344 .reg_bits = 8,
345 .val_bits = 8,
346 .max_register = AUD96P22_REG_MAX,
347 .cache_type = REGCACHE_RBTREE,
348};
349
350static int aud96p22_i2c_probe(struct i2c_client *i2c,
351 const struct i2c_device_id *id)
352{
353 struct device *dev = &i2c->dev;
354 struct aud96p22_priv *priv;
355 int ret;
356
357 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
358 if (priv == NULL)
359 return -ENOMEM;
360
361 priv->regmap = devm_regmap_init_i2c(i2c, &aud96p22_regmap);
362 if (IS_ERR(priv->regmap)) {
363 ret = PTR_ERR(priv->regmap);
364 dev_err(dev, "failed to init i2c regmap: %d\n", ret);
365 return ret;
366 }
367
368 i2c_set_clientdata(i2c, priv);
369
370 ret = snd_soc_register_codec(dev, &aud96p22_driver, &aud96p22_dai, 1);
371 if (ret) {
372 dev_err(dev, "failed to register codec: %d\n", ret);
373 return ret;
374 }
375
376 return 0;
377}
378
379static int aud96p22_i2c_remove(struct i2c_client *i2c)
380{
381 snd_soc_unregister_codec(&i2c->dev);
382 return 0;
383}
384
385const struct of_device_id aud96p22_dt_ids[] = {
386 { .compatible = "zte,zx-aud96p22", },
387 { }
388};
389MODULE_DEVICE_TABLE(of, aud96p22_dt_ids);
390
391static struct i2c_driver aud96p22_i2c_driver = {
392 .driver = {
393 .name = "zx_aud96p22",
394 .of_match_table = aud96p22_dt_ids,
395 },
396 .probe = aud96p22_i2c_probe,
397 .remove = aud96p22_i2c_remove,
398};
399module_i2c_driver(aud96p22_i2c_driver);
400
401MODULE_DESCRIPTION("ZTE ASoC AUD96P22 CODEC driver");
402MODULE_AUTHOR("Baoyou Xie <baoyou.xie@linaro.org>");
403MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
index 3c5a9804d3f5..56ec1d301ac2 100644
--- a/sound/soc/davinci/davinci-mcasp.c
+++ b/sound/soc/davinci/davinci-mcasp.c
@@ -629,7 +629,7 @@ static int davinci_mcasp_ch_constraint(struct davinci_mcasp *mcasp, int stream,
629 if (mcasp->tdm_mask[stream]) 629 if (mcasp->tdm_mask[stream])
630 slots = hweight32(mcasp->tdm_mask[stream]); 630 slots = hweight32(mcasp->tdm_mask[stream]);
631 631
632 for (i = 2; i <= slots; i++) 632 for (i = 1; i <= slots; i++)
633 list[count++] = i; 633 list[count++] = i;
634 634
635 for (i = 2; i <= serializers; i++) 635 for (i = 2; i <= serializers; i++)
@@ -1297,7 +1297,7 @@ static int davinci_mcasp_startup(struct snd_pcm_substream *substream,
1297 1297
1298 snd_pcm_hw_constraint_minmax(substream->runtime, 1298 snd_pcm_hw_constraint_minmax(substream->runtime,
1299 SNDRV_PCM_HW_PARAM_CHANNELS, 1299 SNDRV_PCM_HW_PARAM_CHANNELS,
1300 2, max_channels); 1300 0, max_channels);
1301 1301
1302 snd_pcm_hw_constraint_list(substream->runtime, 1302 snd_pcm_hw_constraint_list(substream->runtime,
1303 0, SNDRV_PCM_HW_PARAM_CHANNELS, 1303 0, SNDRV_PCM_HW_PARAM_CHANNELS,
@@ -1459,13 +1459,13 @@ static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
1459 .suspend = davinci_mcasp_suspend, 1459 .suspend = davinci_mcasp_suspend,
1460 .resume = davinci_mcasp_resume, 1460 .resume = davinci_mcasp_resume,
1461 .playback = { 1461 .playback = {
1462 .channels_min = 2, 1462 .channels_min = 1,
1463 .channels_max = 32 * 16, 1463 .channels_max = 32 * 16,
1464 .rates = DAVINCI_MCASP_RATES, 1464 .rates = DAVINCI_MCASP_RATES,
1465 .formats = DAVINCI_MCASP_PCM_FMTS, 1465 .formats = DAVINCI_MCASP_PCM_FMTS,
1466 }, 1466 },
1467 .capture = { 1467 .capture = {
1468 .channels_min = 2, 1468 .channels_min = 1,
1469 .channels_max = 32 * 16, 1469 .channels_max = 32 * 16,
1470 .rates = DAVINCI_MCASP_RATES, 1470 .rates = DAVINCI_MCASP_RATES,
1471 .formats = DAVINCI_MCASP_PCM_FMTS, 1471 .formats = DAVINCI_MCASP_PCM_FMTS,
@@ -1971,12 +1971,12 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
1971 */ 1971 */
1972 mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list = 1972 mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list =
1973 devm_kzalloc(mcasp->dev, sizeof(unsigned int) * 1973 devm_kzalloc(mcasp->dev, sizeof(unsigned int) *
1974 (32 + mcasp->num_serializer - 2), 1974 (32 + mcasp->num_serializer - 1),
1975 GFP_KERNEL); 1975 GFP_KERNEL);
1976 1976
1977 mcasp->chconstr[SNDRV_PCM_STREAM_CAPTURE].list = 1977 mcasp->chconstr[SNDRV_PCM_STREAM_CAPTURE].list =
1978 devm_kzalloc(mcasp->dev, sizeof(unsigned int) * 1978 devm_kzalloc(mcasp->dev, sizeof(unsigned int) *
1979 (32 + mcasp->num_serializer - 2), 1979 (32 + mcasp->num_serializer - 1),
1980 GFP_KERNEL); 1980 GFP_KERNEL);
1981 1981
1982 if (!mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list || 1982 if (!mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list ||
diff --git a/sound/soc/dwc/dwc-i2s.c b/sound/soc/dwc/dwc-i2s.c
index 9c46e4112026..916067638180 100644
--- a/sound/soc/dwc/dwc-i2s.c
+++ b/sound/soc/dwc/dwc-i2s.c
@@ -496,6 +496,8 @@ static int dw_configure_dai(struct dw_i2s_dev *dev,
496 idx = COMP1_TX_WORDSIZE_0(comp1); 496 idx = COMP1_TX_WORDSIZE_0(comp1);
497 if (WARN_ON(idx >= ARRAY_SIZE(formats))) 497 if (WARN_ON(idx >= ARRAY_SIZE(formats)))
498 return -EINVAL; 498 return -EINVAL;
499 if (dev->quirks & DW_I2S_QUIRK_16BIT_IDX_OVERRIDE)
500 idx = 1;
499 dw_i2s_dai->playback.channels_min = MIN_CHANNEL_NUM; 501 dw_i2s_dai->playback.channels_min = MIN_CHANNEL_NUM;
500 dw_i2s_dai->playback.channels_max = 502 dw_i2s_dai->playback.channels_max =
501 1 << (COMP1_TX_CHANNELS(comp1) + 1); 503 1 << (COMP1_TX_CHANNELS(comp1) + 1);
@@ -508,6 +510,8 @@ static int dw_configure_dai(struct dw_i2s_dev *dev,
508 idx = COMP2_RX_WORDSIZE_0(comp2); 510 idx = COMP2_RX_WORDSIZE_0(comp2);
509 if (WARN_ON(idx >= ARRAY_SIZE(formats))) 511 if (WARN_ON(idx >= ARRAY_SIZE(formats)))
510 return -EINVAL; 512 return -EINVAL;
513 if (dev->quirks & DW_I2S_QUIRK_16BIT_IDX_OVERRIDE)
514 idx = 1;
511 dw_i2s_dai->capture.channels_min = MIN_CHANNEL_NUM; 515 dw_i2s_dai->capture.channels_min = MIN_CHANNEL_NUM;
512 dw_i2s_dai->capture.channels_max = 516 dw_i2s_dai->capture.channels_max =
513 1 << (COMP1_RX_CHANNELS(comp1) + 1); 517 1 << (COMP1_RX_CHANNELS(comp1) + 1);
@@ -543,6 +547,8 @@ static int dw_configure_dai_by_pd(struct dw_i2s_dev *dev,
543 if (ret < 0) 547 if (ret < 0)
544 return ret; 548 return ret;
545 549
550 if (dev->quirks & DW_I2S_QUIRK_16BIT_IDX_OVERRIDE)
551 idx = 1;
546 /* Set DMA slaves info */ 552 /* Set DMA slaves info */
547 dev->play_dma_data.pd.data = pdata->play_dma_data; 553 dev->play_dma_data.pd.data = pdata->play_dma_data;
548 dev->capture_dma_data.pd.data = pdata->capture_dma_data; 554 dev->capture_dma_data.pd.data = pdata->capture_dma_data;
diff --git a/sound/soc/fsl/mpc5200_dma.c b/sound/soc/fsl/mpc5200_dma.c
index 0b82e209b6e3..1f7e70bfbd55 100644
--- a/sound/soc/fsl/mpc5200_dma.c
+++ b/sound/soc/fsl/mpc5200_dma.c
@@ -302,7 +302,6 @@ static int psc_dma_new(struct snd_soc_pcm_runtime *rtd)
302 struct snd_card *card = rtd->card->snd_card; 302 struct snd_card *card = rtd->card->snd_card;
303 struct snd_soc_dai *dai = rtd->cpu_dai; 303 struct snd_soc_dai *dai = rtd->cpu_dai;
304 struct snd_pcm *pcm = rtd->pcm; 304 struct snd_pcm *pcm = rtd->pcm;
305 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai);
306 size_t size = psc_dma_hardware.buffer_bytes_max; 305 size_t size = psc_dma_hardware.buffer_bytes_max;
307 int rc; 306 int rc;
308 307
diff --git a/sound/soc/generic/Kconfig b/sound/soc/generic/Kconfig
index d023959b8cd6..c954be0a0f96 100644
--- a/sound/soc/generic/Kconfig
+++ b/sound/soc/generic/Kconfig
@@ -14,3 +14,20 @@ config SND_SIMPLE_SCU_CARD
14 help 14 help
15 This option enables generic simple SCU sound card support. 15 This option enables generic simple SCU sound card support.
16 It supports DPCM of multi CPU single Codec system. 16 It supports DPCM of multi CPU single Codec system.
17
18config SND_AUDIO_GRAPH_CARD
19 tristate "ASoC Audio Graph sound card support"
20 depends on OF
21 select SND_SIMPLE_CARD_UTILS
22 help
23 This option enables generic simple simple sound card support
24 with OF-graph DT bindings.
25
26config SND_AUDIO_GRAPH_SCU_CARD
27 tristate "ASoC Audio Graph SCU sound card support"
28 depends on OF
29 select SND_SIMPLE_CARD_UTILS
30 help
31 This option enables generic simple SCU sound card support
32 with OF-graph DT bindings.
33 It supports DPCM of multi CPU single Codec ststem.
diff --git a/sound/soc/generic/Makefile b/sound/soc/generic/Makefile
index ee750f3023ba..9e000523a3b4 100644
--- a/sound/soc/generic/Makefile
+++ b/sound/soc/generic/Makefile
@@ -1,7 +1,11 @@
1snd-soc-simple-card-utils-objs := simple-card-utils.o 1snd-soc-simple-card-utils-objs := simple-card-utils.o
2snd-soc-simple-card-objs := simple-card.o 2snd-soc-simple-card-objs := simple-card.o
3snd-soc-simple-scu-card-objs := simple-scu-card.o 3snd-soc-simple-scu-card-objs := simple-scu-card.o
4snd-soc-audio-graph-card-objs := audio-graph-card.o
5snd-soc-audio-graph-scu-card-objs := audio-graph-scu-card.o
4 6
5obj-$(CONFIG_SND_SIMPLE_CARD_UTILS) += snd-soc-simple-card-utils.o 7obj-$(CONFIG_SND_SIMPLE_CARD_UTILS) += snd-soc-simple-card-utils.o
6obj-$(CONFIG_SND_SIMPLE_CARD) += snd-soc-simple-card.o 8obj-$(CONFIG_SND_SIMPLE_CARD) += snd-soc-simple-card.o
7obj-$(CONFIG_SND_SIMPLE_SCU_CARD) += snd-soc-simple-scu-card.o 9obj-$(CONFIG_SND_SIMPLE_SCU_CARD) += snd-soc-simple-scu-card.o
10obj-$(CONFIG_SND_AUDIO_GRAPH_CARD) += snd-soc-audio-graph-card.o
11obj-$(CONFIG_SND_AUDIO_GRAPH_SCU_CARD) += snd-soc-audio-graph-scu-card.o
diff --git a/sound/soc/generic/audio-graph-card.c b/sound/soc/generic/audio-graph-card.c
new file mode 100644
index 000000000000..105ec3a6e30d
--- /dev/null
+++ b/sound/soc/generic/audio-graph-card.c
@@ -0,0 +1,338 @@
1/*
2 * ASoC audio graph sound card support
3 *
4 * Copyright (C) 2016 Renesas Solutions Corp.
5 * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
6 *
7 * based on ${LINUX}/sound/soc/generic/simple-card.c
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13#include <linux/clk.h>
14#include <linux/device.h>
15#include <linux/gpio.h>
16#include <linux/gpio/consumer.h>
17#include <linux/module.h>
18#include <linux/of.h>
19#include <linux/of_device.h>
20#include <linux/of_gpio.h>
21#include <linux/of_graph.h>
22#include <linux/platform_device.h>
23#include <linux/string.h>
24#include <sound/jack.h>
25#include <sound/simple_card_utils.h>
26
27struct graph_card_data {
28 struct snd_soc_card snd_card;
29 struct graph_dai_props {
30 struct asoc_simple_dai cpu_dai;
31 struct asoc_simple_dai codec_dai;
32 } *dai_props;
33 struct snd_soc_dai_link *dai_link;
34 struct gpio_desc *pa_gpio;
35};
36
37static int asoc_graph_card_outdrv_event(struct snd_soc_dapm_widget *w,
38 struct snd_kcontrol *kcontrol,
39 int event)
40{
41 struct snd_soc_dapm_context *dapm = w->dapm;
42 struct graph_card_data *priv = snd_soc_card_get_drvdata(dapm->card);
43
44 switch (event) {
45 case SND_SOC_DAPM_POST_PMU:
46 gpiod_set_value_cansleep(priv->pa_gpio, 1);
47 break;
48 case SND_SOC_DAPM_PRE_PMD:
49 gpiod_set_value_cansleep(priv->pa_gpio, 0);
50 break;
51 default:
52 return -EINVAL;
53 }
54
55 return 0;
56}
57
58static const struct snd_soc_dapm_widget asoc_graph_card_dapm_widgets[] = {
59 SND_SOC_DAPM_OUT_DRV_E("Amplifier", SND_SOC_NOPM,
60 0, 0, NULL, 0, asoc_graph_card_outdrv_event,
61 SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
62};
63
64#define graph_priv_to_card(priv) (&(priv)->snd_card)
65#define graph_priv_to_props(priv, i) ((priv)->dai_props + (i))
66#define graph_priv_to_dev(priv) (graph_priv_to_card(priv)->dev)
67#define graph_priv_to_link(priv, i) (graph_priv_to_card(priv)->dai_link + (i))
68
69static int asoc_graph_card_startup(struct snd_pcm_substream *substream)
70{
71 struct snd_soc_pcm_runtime *rtd = substream->private_data;
72 struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card);
73 struct graph_dai_props *dai_props = graph_priv_to_props(priv, rtd->num);
74 int ret;
75
76 ret = asoc_simple_card_clk_enable(&dai_props->cpu_dai);
77 if (ret)
78 return ret;
79
80 ret = asoc_simple_card_clk_enable(&dai_props->codec_dai);
81 if (ret)
82 asoc_simple_card_clk_disable(&dai_props->cpu_dai);
83
84 return ret;
85}
86
87static void asoc_graph_card_shutdown(struct snd_pcm_substream *substream)
88{
89 struct snd_soc_pcm_runtime *rtd = substream->private_data;
90 struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card);
91 struct graph_dai_props *dai_props = graph_priv_to_props(priv, rtd->num);
92
93 asoc_simple_card_clk_disable(&dai_props->cpu_dai);
94
95 asoc_simple_card_clk_disable(&dai_props->codec_dai);
96}
97
98static struct snd_soc_ops asoc_graph_card_ops = {
99 .startup = asoc_graph_card_startup,
100 .shutdown = asoc_graph_card_shutdown,
101};
102
103static int asoc_graph_card_dai_init(struct snd_soc_pcm_runtime *rtd)
104{
105 struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card);
106 struct snd_soc_dai *codec = rtd->codec_dai;
107 struct snd_soc_dai *cpu = rtd->cpu_dai;
108 struct graph_dai_props *dai_props =
109 graph_priv_to_props(priv, rtd->num);
110 int ret;
111
112 ret = asoc_simple_card_init_dai(codec, &dai_props->codec_dai);
113 if (ret < 0)
114 return ret;
115
116 ret = asoc_simple_card_init_dai(cpu, &dai_props->cpu_dai);
117 if (ret < 0)
118 return ret;
119
120 return 0;
121}
122
123static int asoc_graph_card_dai_link_of(struct device_node *cpu_port,
124 struct graph_card_data *priv,
125 int idx)
126{
127 struct device *dev = graph_priv_to_dev(priv);
128 struct snd_soc_dai_link *dai_link = graph_priv_to_link(priv, idx);
129 struct graph_dai_props *dai_props = graph_priv_to_props(priv, idx);
130 struct asoc_simple_dai *cpu_dai = &dai_props->cpu_dai;
131 struct asoc_simple_dai *codec_dai = &dai_props->codec_dai;
132 struct device_node *cpu_ep = of_get_next_child(cpu_port, NULL);
133 struct device_node *codec_ep = of_graph_get_remote_endpoint(cpu_ep);
134 struct device_node *rcpu_ep = of_graph_get_remote_endpoint(codec_ep);
135 int ret;
136
137 if (rcpu_ep != cpu_ep) {
138 dev_err(dev, "remote-endpoint mismatch (%s/%s/%s)\n",
139 cpu_ep->name, codec_ep->name, rcpu_ep->name);
140 ret = -EINVAL;
141 goto dai_link_of_err;
142 }
143
144 ret = asoc_simple_card_parse_daifmt(dev, cpu_ep, codec_ep,
145 NULL, &dai_link->dai_fmt);
146 if (ret < 0)
147 goto dai_link_of_err;
148
149 /*
150 * we need to consider "mclk-fs" around here
151 * see simple-card
152 */
153
154 ret = asoc_simple_card_parse_graph_cpu(cpu_ep, dai_link);
155 if (ret < 0)
156 goto dai_link_of_err;
157
158 ret = asoc_simple_card_parse_graph_codec(codec_ep, dai_link);
159 if (ret < 0)
160 goto dai_link_of_err;
161
162 ret = asoc_simple_card_of_parse_tdm(cpu_ep, cpu_dai);
163 if (ret < 0)
164 goto dai_link_of_err;
165
166 ret = asoc_simple_card_of_parse_tdm(codec_ep, codec_dai);
167 if (ret < 0)
168 goto dai_link_of_err;
169
170 ret = asoc_simple_card_parse_clk_cpu(dev, cpu_ep, dai_link, cpu_dai);
171 if (ret < 0)
172 goto dai_link_of_err;
173
174 ret = asoc_simple_card_parse_clk_codec(dev, codec_ep, dai_link, codec_dai);
175 if (ret < 0)
176 goto dai_link_of_err;
177
178 ret = asoc_simple_card_canonicalize_dailink(dai_link);
179 if (ret < 0)
180 goto dai_link_of_err;
181
182 ret = asoc_simple_card_set_dailink_name(dev, dai_link,
183 "%s-%s",
184 dai_link->cpu_dai_name,
185 dai_link->codec_dai_name);
186 if (ret < 0)
187 goto dai_link_of_err;
188
189 dai_link->ops = &asoc_graph_card_ops;
190 dai_link->init = asoc_graph_card_dai_init;
191
192 asoc_simple_card_canonicalize_cpu(dai_link,
193 of_graph_get_endpoint_count(dai_link->cpu_of_node) == 1);
194
195dai_link_of_err:
196 of_node_put(cpu_ep);
197 of_node_put(rcpu_ep);
198 of_node_put(codec_ep);
199
200 return ret;
201}
202
203static int asoc_graph_card_parse_of(struct graph_card_data *priv)
204{
205 struct of_phandle_iterator it;
206 struct device *dev = graph_priv_to_dev(priv);
207 struct snd_soc_card *card = graph_priv_to_card(priv);
208 struct device_node *node = dev->of_node;
209 int rc, idx = 0;
210 int ret;
211
212 ret = asoc_simple_card_of_parse_widgets(card, NULL);
213 if (ret < 0)
214 return ret;
215
216 ret = asoc_simple_card_of_parse_routing(card, NULL, 1);
217 if (ret < 0)
218 return ret;
219
220 /*
221 * we need to consider "mclk-fs" around here
222 * see simple-card
223 */
224
225 of_for_each_phandle(&it, rc, node, "dais", NULL, 0) {
226 ret = asoc_graph_card_dai_link_of(it.node, priv, idx++);
227 of_node_put(it.node);
228 if (ret < 0)
229 return ret;
230 }
231
232 return asoc_simple_card_parse_card_name(card, NULL);
233}
234
235static int asoc_graph_get_dais_count(struct device *dev)
236{
237 struct of_phandle_iterator it;
238 struct device_node *node = dev->of_node;
239 int count = 0;
240 int rc;
241
242 of_for_each_phandle(&it, rc, node, "dais", NULL, 0) {
243 count++;
244 of_node_put(it.node);
245 }
246
247 return count;
248}
249
250static int asoc_graph_card_probe(struct platform_device *pdev)
251{
252 struct graph_card_data *priv;
253 struct snd_soc_dai_link *dai_link;
254 struct graph_dai_props *dai_props;
255 struct device *dev = &pdev->dev;
256 struct snd_soc_card *card;
257 int num, ret;
258
259 /* Allocate the private data and the DAI link array */
260 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
261 if (!priv)
262 return -ENOMEM;
263
264 num = asoc_graph_get_dais_count(dev);
265 if (num == 0)
266 return -EINVAL;
267
268 dai_props = devm_kzalloc(dev, sizeof(*dai_props) * num, GFP_KERNEL);
269 dai_link = devm_kzalloc(dev, sizeof(*dai_link) * num, GFP_KERNEL);
270 if (!dai_props || !dai_link)
271 return -ENOMEM;
272
273 priv->pa_gpio = devm_gpiod_get_optional(dev, "pa", GPIOD_OUT_LOW);
274 if (IS_ERR(priv->pa_gpio)) {
275 ret = PTR_ERR(priv->pa_gpio);
276 dev_err(dev, "failed to get amplifier gpio: %d\n", ret);
277 return ret;
278 }
279
280 priv->dai_props = dai_props;
281 priv->dai_link = dai_link;
282
283 /* Init snd_soc_card */
284 card = graph_priv_to_card(priv);
285 card->owner = THIS_MODULE;
286 card->dev = dev;
287 card->dai_link = dai_link;
288 card->num_links = num;
289 card->dapm_widgets = asoc_graph_card_dapm_widgets;
290 card->num_dapm_widgets = ARRAY_SIZE(asoc_graph_card_dapm_widgets);
291
292 ret = asoc_graph_card_parse_of(priv);
293 if (ret < 0) {
294 if (ret != -EPROBE_DEFER)
295 dev_err(dev, "parse error %d\n", ret);
296 goto err;
297 }
298
299 snd_soc_card_set_drvdata(card, priv);
300
301 ret = devm_snd_soc_register_card(dev, card);
302 if (ret < 0)
303 goto err;
304
305 return 0;
306err:
307 asoc_simple_card_clean_reference(card);
308
309 return ret;
310}
311
312static int asoc_graph_card_remove(struct platform_device *pdev)
313{
314 struct snd_soc_card *card = platform_get_drvdata(pdev);
315
316 return asoc_simple_card_clean_reference(card);
317}
318
319static const struct of_device_id asoc_graph_of_match[] = {
320 { .compatible = "audio-graph-card", },
321 {},
322};
323MODULE_DEVICE_TABLE(of, asoc_graph_of_match);
324
325static struct platform_driver asoc_graph_card = {
326 .driver = {
327 .name = "asoc-audio-graph-card",
328 .of_match_table = asoc_graph_of_match,
329 },
330 .probe = asoc_graph_card_probe,
331 .remove = asoc_graph_card_remove,
332};
333module_platform_driver(asoc_graph_card);
334
335MODULE_ALIAS("platform:asoc-audio-graph-card");
336MODULE_LICENSE("GPL v2");
337MODULE_DESCRIPTION("ASoC Audio Graph Sound Card");
338MODULE_AUTHOR("Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>");
diff --git a/sound/soc/generic/audio-graph-scu-card.c b/sound/soc/generic/audio-graph-scu-card.c
new file mode 100644
index 000000000000..dcd2df37bc3b
--- /dev/null
+++ b/sound/soc/generic/audio-graph-scu-card.c
@@ -0,0 +1,411 @@
1/*
2 * ASoC audio graph SCU sound card support
3 *
4 * Copyright (C) 2017 Renesas Solutions Corp.
5 * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
6 *
7 * based on
8 * ${LINUX}/sound/soc/generic/simple-scu-card.c
9 * ${LINUX}/sound/soc/generic/audio-graph-card.c
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15#include <linux/clk.h>
16#include <linux/device.h>
17#include <linux/gpio.h>
18#include <linux/module.h>
19#include <linux/of.h>
20#include <linux/of_device.h>
21#include <linux/of_gpio.h>
22#include <linux/of_graph.h>
23#include <linux/platform_device.h>
24#include <linux/string.h>
25#include <sound/jack.h>
26#include <sound/simple_card_utils.h>
27
28struct graph_card_data {
29 struct snd_soc_card snd_card;
30 struct snd_soc_codec_conf codec_conf;
31 struct asoc_simple_dai *dai_props;
32 struct snd_soc_dai_link *dai_link;
33 struct asoc_simple_card_data adata;
34};
35
36#define graph_priv_to_card(priv) (&(priv)->snd_card)
37#define graph_priv_to_props(priv, i) ((priv)->dai_props + (i))
38#define graph_priv_to_dev(priv) (graph_priv_to_card(priv)->dev)
39#define graph_priv_to_link(priv, i) (graph_priv_to_card(priv)->dai_link + (i))
40
41static int asoc_graph_card_startup(struct snd_pcm_substream *substream)
42{
43 struct snd_soc_pcm_runtime *rtd = substream->private_data;
44 struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card);
45 struct asoc_simple_dai *dai_props = graph_priv_to_props(priv, rtd->num);
46
47 return asoc_simple_card_clk_enable(dai_props);
48}
49
50static void asoc_graph_card_shutdown(struct snd_pcm_substream *substream)
51{
52 struct snd_soc_pcm_runtime *rtd = substream->private_data;
53 struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card);
54 struct asoc_simple_dai *dai_props = graph_priv_to_props(priv, rtd->num);
55
56 asoc_simple_card_clk_disable(dai_props);
57}
58
59static struct snd_soc_ops asoc_graph_card_ops = {
60 .startup = asoc_graph_card_startup,
61 .shutdown = asoc_graph_card_shutdown,
62};
63
64static int asoc_graph_card_dai_init(struct snd_soc_pcm_runtime *rtd)
65{
66 struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card);
67 struct snd_soc_dai *dai;
68 struct snd_soc_dai_link *dai_link;
69 struct asoc_simple_dai *dai_props;
70 int num = rtd->num;
71
72 dai_link = graph_priv_to_link(priv, num);
73 dai_props = graph_priv_to_props(priv, num);
74 dai = dai_link->dynamic ?
75 rtd->cpu_dai :
76 rtd->codec_dai;
77
78 return asoc_simple_card_init_dai(dai, dai_props);
79}
80
81static int asoc_graph_card_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
82 struct snd_pcm_hw_params *params)
83{
84 struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card);
85
86 asoc_simple_card_convert_fixup(&priv->adata, params);
87
88 return 0;
89}
90
91static int asoc_graph_card_dai_link_of(struct device_node *ep,
92 struct graph_card_data *priv,
93 unsigned int daifmt,
94 int idx, int is_fe)
95{
96 struct device *dev = graph_priv_to_dev(priv);
97 struct snd_soc_dai_link *dai_link = graph_priv_to_link(priv, idx);
98 struct asoc_simple_dai *dai_props = graph_priv_to_props(priv, idx);
99 struct snd_soc_card *card = graph_priv_to_card(priv);
100 int ret;
101
102 if (is_fe) {
103 /* BE is dummy */
104 dai_link->codec_of_node = NULL;
105 dai_link->codec_dai_name = "snd-soc-dummy-dai";
106 dai_link->codec_name = "snd-soc-dummy";
107
108 /* FE settings */
109 dai_link->dynamic = 1;
110 dai_link->dpcm_merged_format = 1;
111
112 ret = asoc_simple_card_parse_graph_cpu(ep, dai_link);
113 if (ret)
114 return ret;
115
116 ret = asoc_simple_card_parse_clk_cpu(dev, ep, dai_link, dai_props);
117 if (ret < 0)
118 return ret;
119
120 ret = asoc_simple_card_set_dailink_name(dev, dai_link,
121 "fe.%s",
122 dai_link->cpu_dai_name);
123 if (ret < 0)
124 return ret;
125
126 /* card->num_links includes Codec */
127 asoc_simple_card_canonicalize_cpu(dai_link,
128 of_graph_get_endpoint_count(dai_link->cpu_of_node) == 1);
129 } else {
130 /* FE is dummy */
131 dai_link->cpu_of_node = NULL;
132 dai_link->cpu_dai_name = "snd-soc-dummy-dai";
133 dai_link->cpu_name = "snd-soc-dummy";
134
135 /* BE settings */
136 dai_link->no_pcm = 1;
137 dai_link->be_hw_params_fixup = asoc_graph_card_be_hw_params_fixup;
138
139 ret = asoc_simple_card_parse_graph_codec(ep, dai_link);
140 if (ret < 0)
141 return ret;
142
143 ret = asoc_simple_card_parse_clk_codec(dev, ep, dai_link, dai_props);
144 if (ret < 0)
145 return ret;
146
147 ret = asoc_simple_card_set_dailink_name(dev, dai_link,
148 "be.%s",
149 dai_link->codec_dai_name);
150 if (ret < 0)
151 return ret;
152
153 snd_soc_of_parse_audio_prefix(card,
154 &priv->codec_conf,
155 dai_link->codec_of_node,
156 "prefix");
157 }
158
159 ret = asoc_simple_card_of_parse_tdm(ep, dai_props);
160 if (ret)
161 return ret;
162
163 ret = asoc_simple_card_canonicalize_dailink(dai_link);
164 if (ret < 0)
165 return ret;
166
167 dai_link->dai_fmt = daifmt;
168 dai_link->dpcm_playback = 1;
169 dai_link->dpcm_capture = 1;
170 dai_link->ops = &asoc_graph_card_ops;
171 dai_link->init = asoc_graph_card_dai_init;
172
173 return 0;
174}
175
176static int asoc_graph_card_parse_of(struct graph_card_data *priv)
177{
178 struct of_phandle_iterator it;
179 struct device *dev = graph_priv_to_dev(priv);
180 struct snd_soc_card *card = graph_priv_to_card(priv);
181 struct device_node *node = dev->of_node;
182 struct device_node *cpu_port;
183 struct device_node *cpu_ep;
184 struct device_node *codec_ep;
185 struct device_node *rcpu_ep;
186 struct device_node *codec_port;
187 struct device_node *codec_port_old;
188 unsigned int daifmt = 0;
189 int dai_idx, ret;
190 int rc, codec;
191
192 if (!node)
193 return -EINVAL;
194
195 /*
196 * we need to consider "widgets", "mclk-fs" around here
197 * see simple-card
198 */
199
200 ret = asoc_simple_card_of_parse_routing(card, NULL, 0);
201 if (ret < 0)
202 return ret;
203
204 asoc_simple_card_parse_convert(dev, NULL, &priv->adata);
205
206 /*
207 * it supports multi CPU, single CODEC only here
208 * see asoc_graph_get_dais_count
209 */
210
211 /* find 1st codec */
212 of_for_each_phandle(&it, rc, node, "dais", NULL, 0) {
213 cpu_port = it.node;
214 cpu_ep = of_get_next_child(cpu_port, NULL);
215 codec_ep = of_graph_get_remote_endpoint(cpu_ep);
216 rcpu_ep = of_graph_get_remote_endpoint(codec_ep);
217
218 of_node_put(cpu_port);
219 of_node_put(cpu_ep);
220 of_node_put(codec_ep);
221 of_node_put(rcpu_ep);
222
223 if (!codec_ep)
224 continue;
225
226 if (rcpu_ep != cpu_ep) {
227 dev_err(dev, "remote-endpoint missmatch (%s/%s/%s)\n",
228 cpu_ep->name, codec_ep->name, rcpu_ep->name);
229 ret = -EINVAL;
230 goto parse_of_err;
231 }
232
233 ret = asoc_simple_card_parse_daifmt(dev, cpu_ep, codec_ep,
234 NULL, &daifmt);
235 if (ret < 0)
236 goto parse_of_err;
237 }
238
239 dai_idx = 0;
240 codec_port_old = NULL;
241 for (codec = 0; codec < 2; codec++) {
242 /*
243 * To listup valid sounds continuously,
244 * detect all CPU-dummy first, and
245 * detect all dummy-Codec second
246 */
247 of_for_each_phandle(&it, rc, node, "dais", NULL, 0) {
248 cpu_port = it.node;
249 cpu_ep = of_get_next_child(cpu_port, NULL);
250 codec_ep = of_graph_get_remote_endpoint(cpu_ep);
251 codec_port = of_graph_get_port_parent(codec_ep);
252
253 of_node_put(cpu_port);
254 of_node_put(cpu_ep);
255 of_node_put(codec_ep);
256 of_node_put(codec_port);
257
258 if (codec) {
259 if (!codec_port)
260 continue;
261
262 if (codec_port_old == codec_port)
263 continue;
264
265 codec_port_old = codec_port;
266
267 /* Back-End (= Codec) */
268 ret = asoc_graph_card_dai_link_of(codec_ep, priv, daifmt, dai_idx++, 0);
269 if (ret < 0)
270 goto parse_of_err;
271 } else {
272 /* Front-End (= CPU) */
273 ret = asoc_graph_card_dai_link_of(cpu_ep, priv, daifmt, dai_idx++, 1);
274 if (ret < 0)
275 goto parse_of_err;
276 }
277 }
278 }
279
280 ret = asoc_simple_card_parse_card_name(card, NULL);
281 if (ret)
282 goto parse_of_err;
283
284 ret = 0;
285
286parse_of_err:
287 return ret;
288}
289
290static int asoc_graph_get_dais_count(struct device *dev)
291{
292 struct of_phandle_iterator it;
293 struct device_node *node = dev->of_node;
294 struct device_node *cpu_port;
295 struct device_node *cpu_ep;
296 struct device_node *codec_ep;
297 struct device_node *codec_port;
298 struct device_node *codec_port_old;
299 int count = 0;
300 int rc;
301
302 codec_port_old = NULL;
303 of_for_each_phandle(&it, rc, node, "dais", NULL, 0) {
304 cpu_port = it.node;
305 cpu_ep = of_get_next_child(cpu_port, NULL);
306 codec_ep = of_graph_get_remote_endpoint(cpu_ep);
307 codec_port = of_graph_get_port_parent(codec_ep);
308
309 of_node_put(cpu_port);
310 of_node_put(cpu_ep);
311 of_node_put(codec_ep);
312 of_node_put(codec_port);
313
314 if (cpu_ep)
315 count++;
316
317 if (!codec_port)
318 continue;
319
320 if (codec_port_old == codec_port)
321 continue;
322
323 count++;
324 codec_port_old = codec_port;
325 }
326
327 return count;
328}
329
330static int asoc_graph_card_probe(struct platform_device *pdev)
331{
332 struct graph_card_data *priv;
333 struct snd_soc_dai_link *dai_link;
334 struct asoc_simple_dai *dai_props;
335 struct device *dev = &pdev->dev;
336 struct snd_soc_card *card;
337 int num, ret;
338
339 /* Allocate the private data and the DAI link array */
340 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
341 if (!priv)
342 return -ENOMEM;
343
344 num = asoc_graph_get_dais_count(dev);
345 if (num == 0)
346 return -EINVAL;
347
348 dai_props = devm_kzalloc(dev, sizeof(*dai_props) * num, GFP_KERNEL);
349 dai_link = devm_kzalloc(dev, sizeof(*dai_link) * num, GFP_KERNEL);
350 if (!dai_props || !dai_link)
351 return -ENOMEM;
352
353 priv->dai_props = dai_props;
354 priv->dai_link = dai_link;
355
356 /* Init snd_soc_card */
357 card = graph_priv_to_card(priv);
358 card->owner = THIS_MODULE;
359 card->dev = dev;
360 card->dai_link = priv->dai_link;
361 card->num_links = num;
362 card->codec_conf = &priv->codec_conf;
363 card->num_configs = 1;
364
365 ret = asoc_graph_card_parse_of(priv);
366 if (ret < 0) {
367 if (ret != -EPROBE_DEFER)
368 dev_err(dev, "parse error %d\n", ret);
369 goto err;
370 }
371
372 snd_soc_card_set_drvdata(card, priv);
373
374 ret = devm_snd_soc_register_card(dev, card);
375 if (ret < 0)
376 goto err;
377
378 return 0;
379err:
380 asoc_simple_card_clean_reference(card);
381
382 return ret;
383}
384
385static int asoc_graph_card_remove(struct platform_device *pdev)
386{
387 struct snd_soc_card *card = platform_get_drvdata(pdev);
388
389 return asoc_simple_card_clean_reference(card);
390}
391
392static const struct of_device_id asoc_graph_of_match[] = {
393 { .compatible = "audio-graph-scu-card", },
394 {},
395};
396MODULE_DEVICE_TABLE(of, asoc_graph_of_match);
397
398static struct platform_driver asoc_graph_card = {
399 .driver = {
400 .name = "asoc-audio-graph-scu-card",
401 .of_match_table = asoc_graph_of_match,
402 },
403 .probe = asoc_graph_card_probe,
404 .remove = asoc_graph_card_remove,
405};
406module_platform_driver(asoc_graph_card);
407
408MODULE_ALIAS("platform:asoc-audio-graph-scu-card");
409MODULE_LICENSE("GPL v2");
410MODULE_DESCRIPTION("ASoC Audio Graph SCU Sound Card");
411MODULE_AUTHOR("Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>");
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index 343b291fc372..26d64fa40c9c 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -10,8 +10,49 @@
10#include <linux/clk.h> 10#include <linux/clk.h>
11#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/of.h> 12#include <linux/of.h>
13#include <linux/of_graph.h>
13#include <sound/simple_card_utils.h> 14#include <sound/simple_card_utils.h>
14 15
16void asoc_simple_card_convert_fixup(struct asoc_simple_card_data *data,
17 struct snd_pcm_hw_params *params)
18{
19 struct snd_interval *rate = hw_param_interval(params,
20 SNDRV_PCM_HW_PARAM_RATE);
21 struct snd_interval *channels = hw_param_interval(params,
22 SNDRV_PCM_HW_PARAM_CHANNELS);
23
24 if (data->convert_rate)
25 rate->min =
26 rate->max = data->convert_rate;
27
28 if (data->convert_channels)
29 channels->min =
30 channels->max = data->convert_channels;
31}
32EXPORT_SYMBOL_GPL(asoc_simple_card_convert_fixup);
33
34void asoc_simple_card_parse_convert(struct device *dev, char *prefix,
35 struct asoc_simple_card_data *data)
36{
37 struct device_node *np = dev->of_node;
38 char prop[128];
39
40 if (!prefix)
41 prefix = "";
42
43 /* sampling rate convert */
44 snprintf(prop, sizeof(prop), "%s%s", prefix, "convert-rate");
45 of_property_read_u32(np, prop, &data->convert_rate);
46
47 /* channels transfer */
48 snprintf(prop, sizeof(prop), "%s%s", prefix, "convert-channels");
49 of_property_read_u32(np, prop, &data->convert_channels);
50
51 dev_dbg(dev, "convert_rate %d\n", data->convert_rate);
52 dev_dbg(dev, "convert_channels %d\n", data->convert_channels);
53}
54EXPORT_SYMBOL_GPL(asoc_simple_card_parse_convert);
55
15int asoc_simple_card_parse_daifmt(struct device *dev, 56int asoc_simple_card_parse_daifmt(struct device *dev,
16 struct device_node *node, 57 struct device_node *node,
17 struct device_node *codec, 58 struct device_node *codec,
@@ -20,14 +61,13 @@ int asoc_simple_card_parse_daifmt(struct device *dev,
20{ 61{
21 struct device_node *bitclkmaster = NULL; 62 struct device_node *bitclkmaster = NULL;
22 struct device_node *framemaster = NULL; 63 struct device_node *framemaster = NULL;
23 int prefix_len = prefix ? strlen(prefix) : 0;
24 unsigned int daifmt; 64 unsigned int daifmt;
25 65
26 daifmt = snd_soc_of_parse_daifmt(node, prefix, 66 daifmt = snd_soc_of_parse_daifmt(node, prefix,
27 &bitclkmaster, &framemaster); 67 &bitclkmaster, &framemaster);
28 daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK; 68 daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK;
29 69
30 if (prefix_len && !bitclkmaster && !framemaster) { 70 if (!bitclkmaster && !framemaster) {
31 /* 71 /*
32 * No dai-link level and master setting was not found from 72 * No dai-link level and master setting was not found from
33 * sound node level, revert back to legacy DT parsing and 73 * sound node level, revert back to legacy DT parsing and
@@ -51,6 +91,8 @@ int asoc_simple_card_parse_daifmt(struct device *dev,
51 91
52 *retfmt = daifmt; 92 *retfmt = daifmt;
53 93
94 dev_dbg(dev, "format : %04x\n", daifmt);
95
54 return 0; 96 return 0;
55} 97}
56EXPORT_SYMBOL_GPL(asoc_simple_card_parse_daifmt); 98EXPORT_SYMBOL_GPL(asoc_simple_card_parse_daifmt);
@@ -72,6 +114,8 @@ int asoc_simple_card_set_dailink_name(struct device *dev,
72 114
73 dai_link->name = name; 115 dai_link->name = name;
74 dai_link->stream_name = name; 116 dai_link->stream_name = name;
117
118 dev_dbg(dev, "name : %s\n", name);
75 } 119 }
76 120
77 return ret; 121 return ret;
@@ -81,27 +125,54 @@ EXPORT_SYMBOL_GPL(asoc_simple_card_set_dailink_name);
81int asoc_simple_card_parse_card_name(struct snd_soc_card *card, 125int asoc_simple_card_parse_card_name(struct snd_soc_card *card,
82 char *prefix) 126 char *prefix)
83{ 127{
84 char prop[128];
85 int ret; 128 int ret;
86 129
87 snprintf(prop, sizeof(prop), "%sname", prefix); 130 if (!prefix)
131 prefix = "";
88 132
89 /* Parse the card name from DT */ 133 /* Parse the card name from DT */
90 ret = snd_soc_of_parse_card_name(card, prop); 134 ret = snd_soc_of_parse_card_name(card, "label");
91 if (ret < 0) 135 if (ret < 0) {
92 return ret; 136 char prop[128];
137
138 snprintf(prop, sizeof(prop), "%sname", prefix);
139 ret = snd_soc_of_parse_card_name(card, prop);
140 if (ret < 0)
141 return ret;
142 }
93 143
94 if (!card->name && card->dai_link) 144 if (!card->name && card->dai_link)
95 card->name = card->dai_link->name; 145 card->name = card->dai_link->name;
96 146
147 dev_dbg(card->dev, "Card Name: %s\n", card->name ? card->name : "");
148
97 return 0; 149 return 0;
98} 150}
99EXPORT_SYMBOL_GPL(asoc_simple_card_parse_card_name); 151EXPORT_SYMBOL_GPL(asoc_simple_card_parse_card_name);
100 152
153static void asoc_simple_card_clk_register(struct asoc_simple_dai *dai,
154 struct clk *clk)
155{
156 dai->clk = clk;
157}
158
159int asoc_simple_card_clk_enable(struct asoc_simple_dai *dai)
160{
161 return clk_prepare_enable(dai->clk);
162}
163EXPORT_SYMBOL_GPL(asoc_simple_card_clk_enable);
164
165void asoc_simple_card_clk_disable(struct asoc_simple_dai *dai)
166{
167 clk_disable_unprepare(dai->clk);
168}
169EXPORT_SYMBOL_GPL(asoc_simple_card_clk_disable);
170
101int asoc_simple_card_parse_clk(struct device *dev, 171int asoc_simple_card_parse_clk(struct device *dev,
102 struct device_node *node, 172 struct device_node *node,
103 struct device_node *dai_of_node, 173 struct device_node *dai_of_node,
104 struct asoc_simple_dai *simple_dai) 174 struct asoc_simple_dai *simple_dai,
175 const char *name)
105{ 176{
106 struct clk *clk; 177 struct clk *clk;
107 u32 val; 178 u32 val;
@@ -115,7 +186,8 @@ int asoc_simple_card_parse_clk(struct device *dev,
115 clk = devm_get_clk_from_child(dev, node, NULL); 186 clk = devm_get_clk_from_child(dev, node, NULL);
116 if (!IS_ERR(clk)) { 187 if (!IS_ERR(clk)) {
117 simple_dai->sysclk = clk_get_rate(clk); 188 simple_dai->sysclk = clk_get_rate(clk);
118 simple_dai->clk = clk; 189
190 asoc_simple_card_clk_register(simple_dai, clk);
119 } else if (!of_property_read_u32(node, "system-clock-frequency", &val)) { 191 } else if (!of_property_read_u32(node, "system-clock-frequency", &val)) {
120 simple_dai->sysclk = val; 192 simple_dai->sysclk = val;
121 } else { 193 } else {
@@ -124,6 +196,8 @@ int asoc_simple_card_parse_clk(struct device *dev,
124 simple_dai->sysclk = clk_get_rate(clk); 196 simple_dai->sysclk = clk_get_rate(clk);
125 } 197 }
126 198
199 dev_dbg(dev, "%s : sysclk = %d\n", name, simple_dai->sysclk);
200
127 return 0; 201 return 0;
128} 202}
129EXPORT_SYMBOL_GPL(asoc_simple_card_parse_clk); 203EXPORT_SYMBOL_GPL(asoc_simple_card_parse_clk);
@@ -165,6 +239,71 @@ int asoc_simple_card_parse_dai(struct device_node *node,
165} 239}
166EXPORT_SYMBOL_GPL(asoc_simple_card_parse_dai); 240EXPORT_SYMBOL_GPL(asoc_simple_card_parse_dai);
167 241
242static int asoc_simple_card_get_dai_id(struct device_node *ep)
243{
244 struct device_node *node;
245 struct device_node *endpoint;
246 int i, id;
247 int ret;
248
249 ret = snd_soc_get_dai_id(ep);
250 if (ret != -ENOTSUPP)
251 return ret;
252
253 node = of_graph_get_port_parent(ep);
254
255 /*
256 * Non HDMI sound case, counting port/endpoint on its DT
257 * is enough. Let's count it.
258 */
259 i = 0;
260 id = -1;
261 for_each_endpoint_of_node(node, endpoint) {
262 if (endpoint == ep)
263 id = i;
264 i++;
265 }
266 if (id < 0)
267 return -ENODEV;
268
269 return id;
270}
271
272int asoc_simple_card_parse_graph_dai(struct device_node *ep,
273 struct device_node **dai_of_node,
274 const char **dai_name)
275{
276 struct device_node *node;
277 struct of_phandle_args args;
278 int ret;
279
280 if (!ep)
281 return 0;
282 if (!dai_name)
283 return 0;
284
285 /*
286 * of_graph_get_port_parent() will call
287 * of_node_put(). So, call of_node_get() here
288 */
289 of_node_get(ep);
290 node = of_graph_get_port_parent(ep);
291
292 /* Get dai->name */
293 args.np = node;
294 args.args[0] = asoc_simple_card_get_dai_id(ep);
295 args.args_count = (of_graph_get_endpoint_count(node) > 1);
296
297 ret = snd_soc_get_dai_name(&args, dai_name);
298 if (ret < 0)
299 return ret;
300
301 *dai_of_node = node;
302
303 return 0;
304}
305EXPORT_SYMBOL_GPL(asoc_simple_card_parse_graph_dai);
306
168int asoc_simple_card_init_dai(struct snd_soc_dai *dai, 307int asoc_simple_card_init_dai(struct snd_soc_dai *dai,
169 struct asoc_simple_dai *simple_dai) 308 struct asoc_simple_dai *simple_dai)
170{ 309{
@@ -236,6 +375,47 @@ int asoc_simple_card_clean_reference(struct snd_soc_card *card)
236} 375}
237EXPORT_SYMBOL_GPL(asoc_simple_card_clean_reference); 376EXPORT_SYMBOL_GPL(asoc_simple_card_clean_reference);
238 377
378int asoc_simple_card_of_parse_routing(struct snd_soc_card *card,
379 char *prefix,
380 int optional)
381{
382 struct device_node *node = card->dev->of_node;
383 char prop[128];
384
385 if (!prefix)
386 prefix = "";
387
388 snprintf(prop, sizeof(prop), "%s%s", prefix, "routing");
389
390 if (!of_property_read_bool(node, prop)) {
391 if (optional)
392 return 0;
393 return -EINVAL;
394 }
395
396 return snd_soc_of_parse_audio_routing(card, prop);
397}
398EXPORT_SYMBOL_GPL(asoc_simple_card_of_parse_routing);
399
400int asoc_simple_card_of_parse_widgets(struct snd_soc_card *card,
401 char *prefix)
402{
403 struct device_node *node = card->dev->of_node;
404 char prop[128];
405
406 if (!prefix)
407 prefix = "";
408
409 snprintf(prop, sizeof(prop), "%s%s", prefix, "widgets");
410
411 if (of_property_read_bool(node, prop))
412 return snd_soc_of_parse_audio_simple_widgets(card, prop);
413
414 /* no widgets is not error */
415 return 0;
416}
417EXPORT_SYMBOL_GPL(asoc_simple_card_of_parse_widgets);
418
239/* Module information */ 419/* Module information */
240MODULE_AUTHOR("Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>"); 420MODULE_AUTHOR("Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>");
241MODULE_DESCRIPTION("ALSA SoC Simple Card Utils"); 421MODULE_DESCRIPTION("ALSA SoC Simple Card Utils");
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index bc136d2bd7cd..dfaf48ff88b0 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -118,13 +118,13 @@ static int asoc_simple_card_startup(struct snd_pcm_substream *substream)
118 simple_priv_to_props(priv, rtd->num); 118 simple_priv_to_props(priv, rtd->num);
119 int ret; 119 int ret;
120 120
121 ret = clk_prepare_enable(dai_props->cpu_dai.clk); 121 ret = asoc_simple_card_clk_enable(&dai_props->cpu_dai);
122 if (ret) 122 if (ret)
123 return ret; 123 return ret;
124 124
125 ret = clk_prepare_enable(dai_props->codec_dai.clk); 125 ret = asoc_simple_card_clk_enable(&dai_props->codec_dai);
126 if (ret) 126 if (ret)
127 clk_disable_unprepare(dai_props->cpu_dai.clk); 127 asoc_simple_card_clk_disable(&dai_props->cpu_dai);
128 128
129 return ret; 129 return ret;
130} 130}
@@ -136,9 +136,9 @@ static void asoc_simple_card_shutdown(struct snd_pcm_substream *substream)
136 struct simple_dai_props *dai_props = 136 struct simple_dai_props *dai_props =
137 simple_priv_to_props(priv, rtd->num); 137 simple_priv_to_props(priv, rtd->num);
138 138
139 clk_disable_unprepare(dai_props->cpu_dai.clk); 139 asoc_simple_card_clk_disable(&dai_props->cpu_dai);
140 140
141 clk_disable_unprepare(dai_props->codec_dai.clk); 141 asoc_simple_card_clk_disable(&dai_props->codec_dai);
142} 142}
143 143
144static int asoc_simple_card_hw_params(struct snd_pcm_substream *substream, 144static int asoc_simple_card_hw_params(struct snd_pcm_substream *substream,
@@ -233,13 +233,19 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
233 snprintf(prop, sizeof(prop), "%scpu", prefix); 233 snprintf(prop, sizeof(prop), "%scpu", prefix);
234 cpu = of_get_child_by_name(node, prop); 234 cpu = of_get_child_by_name(node, prop);
235 235
236 if (!cpu) {
237 ret = -EINVAL;
238 dev_err(dev, "%s: Can't find %s DT node\n", __func__, prop);
239 goto dai_link_of_err;
240 }
241
236 snprintf(prop, sizeof(prop), "%splat", prefix); 242 snprintf(prop, sizeof(prop), "%splat", prefix);
237 plat = of_get_child_by_name(node, prop); 243 plat = of_get_child_by_name(node, prop);
238 244
239 snprintf(prop, sizeof(prop), "%scodec", prefix); 245 snprintf(prop, sizeof(prop), "%scodec", prefix);
240 codec = of_get_child_by_name(node, prop); 246 codec = of_get_child_by_name(node, prop);
241 247
242 if (!cpu || !codec) { 248 if (!codec) {
243 ret = -EINVAL; 249 ret = -EINVAL;
244 dev_err(dev, "%s: Can't find %s DT node\n", __func__, prop); 250 dev_err(dev, "%s: Can't find %s DT node\n", __func__, prop);
245 goto dai_link_of_err; 251 goto dai_link_of_err;
@@ -265,17 +271,11 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
265 if (ret < 0) 271 if (ret < 0)
266 goto dai_link_of_err; 272 goto dai_link_of_err;
267 273
268 ret = snd_soc_of_parse_tdm_slot(cpu, &cpu_dai->tx_slot_mask, 274 ret = asoc_simple_card_of_parse_tdm(cpu, cpu_dai);
269 &cpu_dai->rx_slot_mask,
270 &cpu_dai->slots,
271 &cpu_dai->slot_width);
272 if (ret < 0) 275 if (ret < 0)
273 goto dai_link_of_err; 276 goto dai_link_of_err;
274 277
275 ret = snd_soc_of_parse_tdm_slot(codec, &codec_dai->tx_slot_mask, 278 ret = asoc_simple_card_of_parse_tdm(codec, codec_dai);
276 &codec_dai->rx_slot_mask,
277 &codec_dai->slots,
278 &codec_dai->slot_width);
279 if (ret < 0) 279 if (ret < 0)
280 goto dai_link_of_err; 280 goto dai_link_of_err;
281 281
@@ -301,15 +301,6 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
301 dai_link->ops = &asoc_simple_card_ops; 301 dai_link->ops = &asoc_simple_card_ops;
302 dai_link->init = asoc_simple_card_dai_init; 302 dai_link->init = asoc_simple_card_dai_init;
303 303
304 dev_dbg(dev, "\tname : %s\n", dai_link->stream_name);
305 dev_dbg(dev, "\tformat : %04x\n", dai_link->dai_fmt);
306 dev_dbg(dev, "\tcpu : %s / %d\n",
307 dai_link->cpu_dai_name,
308 dai_props->cpu_dai.sysclk);
309 dev_dbg(dev, "\tcodec : %s / %d\n",
310 dai_link->codec_dai_name,
311 dai_props->codec_dai.sysclk);
312
313 asoc_simple_card_canonicalize_cpu(dai_link, single_cpu); 304 asoc_simple_card_canonicalize_cpu(dai_link, single_cpu);
314 305
315dai_link_of_err: 306dai_link_of_err:
@@ -350,12 +341,12 @@ static int asoc_simple_card_parse_aux_devs(struct device_node *node,
350 return 0; 341 return 0;
351} 342}
352 343
353static int asoc_simple_card_parse_of(struct device_node *node, 344static int asoc_simple_card_parse_of(struct simple_card_data *priv)
354 struct simple_card_data *priv)
355{ 345{
356 struct device *dev = simple_priv_to_dev(priv); 346 struct device *dev = simple_priv_to_dev(priv);
357 struct snd_soc_card *card = simple_priv_to_card(priv); 347 struct snd_soc_card *card = simple_priv_to_card(priv);
358 struct device_node *dai_link; 348 struct device_node *dai_link;
349 struct device_node *node = dev->of_node;
359 int ret; 350 int ret;
360 351
361 if (!node) 352 if (!node)
@@ -363,21 +354,13 @@ static int asoc_simple_card_parse_of(struct device_node *node,
363 354
364 dai_link = of_get_child_by_name(node, PREFIX "dai-link"); 355 dai_link = of_get_child_by_name(node, PREFIX "dai-link");
365 356
366 /* The off-codec widgets */ 357 ret = asoc_simple_card_of_parse_widgets(card, PREFIX);
367 if (of_property_read_bool(node, PREFIX "widgets")) { 358 if (ret < 0)
368 ret = snd_soc_of_parse_audio_simple_widgets(card, 359 goto card_parse_end;
369 PREFIX "widgets");
370 if (ret)
371 goto card_parse_end;
372 }
373 360
374 /* DAPM routes */ 361 ret = asoc_simple_card_of_parse_routing(card, PREFIX, 1);
375 if (of_property_read_bool(node, PREFIX "routing")) { 362 if (ret < 0)
376 ret = snd_soc_of_parse_audio_routing(card, 363 goto card_parse_end;
377 PREFIX "routing");
378 if (ret)
379 goto card_parse_end;
380 }
381 364
382 /* Factor to mclk, used in hw_params() */ 365 /* Factor to mclk, used in hw_params() */
383 of_property_read_u32(node, PREFIX "mclk-fs", &priv->mclk_fs); 366 of_property_read_u32(node, PREFIX "mclk-fs", &priv->mclk_fs);
@@ -454,7 +437,7 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
454 437
455 if (np && of_device_is_available(np)) { 438 if (np && of_device_is_available(np)) {
456 439
457 ret = asoc_simple_card_parse_of(np, priv); 440 ret = asoc_simple_card_parse_of(priv);
458 if (ret < 0) { 441 if (ret < 0) {
459 if (ret != -EPROBE_DEFER) 442 if (ret != -EPROBE_DEFER)
460 dev_err(dev, "parse error %d\n", ret); 443 dev_err(dev, "parse error %d\n", ret);
@@ -497,8 +480,10 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
497 snd_soc_card_set_drvdata(card, priv); 480 snd_soc_card_set_drvdata(card, priv);
498 481
499 ret = devm_snd_soc_register_card(dev, card); 482 ret = devm_snd_soc_register_card(dev, card);
500 if (ret >= 0) 483 if (ret < 0)
501 return ret; 484 goto err;
485
486 return 0;
502err: 487err:
503 asoc_simple_card_clean_reference(card); 488 asoc_simple_card_clean_reference(card);
504 489
diff --git a/sound/soc/generic/simple-scu-card.c b/sound/soc/generic/simple-scu-card.c
index dcbcab230d1b..a75b385455c4 100644
--- a/sound/soc/generic/simple-scu-card.c
+++ b/sound/soc/generic/simple-scu-card.c
@@ -27,8 +27,7 @@ struct simple_card_data {
27 struct snd_soc_codec_conf codec_conf; 27 struct snd_soc_codec_conf codec_conf;
28 struct asoc_simple_dai *dai_props; 28 struct asoc_simple_dai *dai_props;
29 struct snd_soc_dai_link *dai_link; 29 struct snd_soc_dai_link *dai_link;
30 u32 convert_rate; 30 struct asoc_simple_card_data adata;
31 u32 convert_channels;
32}; 31};
33 32
34#define simple_priv_to_card(priv) (&(priv)->snd_card) 33#define simple_priv_to_card(priv) (&(priv)->snd_card)
@@ -47,7 +46,7 @@ static int asoc_simple_card_startup(struct snd_pcm_substream *substream)
47 struct asoc_simple_dai *dai_props = 46 struct asoc_simple_dai *dai_props =
48 simple_priv_to_props(priv, rtd->num); 47 simple_priv_to_props(priv, rtd->num);
49 48
50 return clk_prepare_enable(dai_props->clk); 49 return asoc_simple_card_clk_enable(dai_props);
51} 50}
52 51
53static void asoc_simple_card_shutdown(struct snd_pcm_substream *substream) 52static void asoc_simple_card_shutdown(struct snd_pcm_substream *substream)
@@ -57,7 +56,7 @@ static void asoc_simple_card_shutdown(struct snd_pcm_substream *substream)
57 struct asoc_simple_dai *dai_props = 56 struct asoc_simple_dai *dai_props =
58 simple_priv_to_props(priv, rtd->num); 57 simple_priv_to_props(priv, rtd->num);
59 58
60 clk_disable_unprepare(dai_props->clk); 59 asoc_simple_card_clk_disable(dai_props);
61} 60}
62 61
63static const struct snd_soc_ops asoc_simple_card_ops = { 62static const struct snd_soc_ops asoc_simple_card_ops = {
@@ -86,18 +85,8 @@ static int asoc_simple_card_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
86 struct snd_pcm_hw_params *params) 85 struct snd_pcm_hw_params *params)
87{ 86{
88 struct simple_card_data *priv = snd_soc_card_get_drvdata(rtd->card); 87 struct simple_card_data *priv = snd_soc_card_get_drvdata(rtd->card);
89 struct snd_interval *rate = hw_param_interval(params,
90 SNDRV_PCM_HW_PARAM_RATE);
91 struct snd_interval *channels = hw_param_interval(params,
92 SNDRV_PCM_HW_PARAM_CHANNELS);
93 88
94 if (priv->convert_rate) 89 asoc_simple_card_convert_fixup(&priv->adata, params);
95 rate->min =
96 rate->max = priv->convert_rate;
97
98 if (priv->convert_channels)
99 channels->min =
100 channels->max = priv->convert_channels;
101 90
102 return 0; 91 return 0;
103} 92}
@@ -171,11 +160,7 @@ static int asoc_simple_card_dai_link_of(struct device_node *np,
171 PREFIX "prefix"); 160 PREFIX "prefix");
172 } 161 }
173 162
174 ret = snd_soc_of_parse_tdm_slot(np, 163 ret = asoc_simple_card_of_parse_tdm(np, dai_props);
175 &dai_props->tx_slot_mask,
176 &dai_props->rx_slot_mask,
177 &dai_props->slots,
178 &dai_props->slot_width);
179 if (ret) 164 if (ret)
180 return ret; 165 return ret;
181 166
@@ -189,21 +174,16 @@ static int asoc_simple_card_dai_link_of(struct device_node *np,
189 dai_link->ops = &asoc_simple_card_ops; 174 dai_link->ops = &asoc_simple_card_ops;
190 dai_link->init = asoc_simple_card_dai_init; 175 dai_link->init = asoc_simple_card_dai_init;
191 176
192 dev_dbg(dev, "\t%s / %04x / %d\n",
193 dai_link->name,
194 dai_link->dai_fmt,
195 dai_props->sysclk);
196
197 return 0; 177 return 0;
198} 178}
199 179
200static int asoc_simple_card_parse_of(struct device_node *node, 180static int asoc_simple_card_parse_of(struct simple_card_data *priv)
201 struct simple_card_data *priv)
202 181
203{ 182{
204 struct device *dev = simple_priv_to_dev(priv); 183 struct device *dev = simple_priv_to_dev(priv);
205 struct device_node *np; 184 struct device_node *np;
206 struct snd_soc_card *card = simple_priv_to_card(priv); 185 struct snd_soc_card *card = simple_priv_to_card(priv);
186 struct device_node *node = dev->of_node;
207 unsigned int daifmt = 0; 187 unsigned int daifmt = 0;
208 bool is_fe; 188 bool is_fe;
209 int ret, i; 189 int ret, i;
@@ -211,15 +191,11 @@ static int asoc_simple_card_parse_of(struct device_node *node,
211 if (!node) 191 if (!node)
212 return -EINVAL; 192 return -EINVAL;
213 193
214 ret = snd_soc_of_parse_audio_routing(card, PREFIX "routing"); 194 ret = asoc_simple_card_of_parse_routing(card, PREFIX, 0);
215 if (ret < 0) 195 if (ret < 0)
216 return ret; 196 return ret;
217 197
218 /* sampling rate convert */ 198 asoc_simple_card_parse_convert(dev, PREFIX, &priv->adata);
219 of_property_read_u32(node, PREFIX "convert-rate", &priv->convert_rate);
220
221 /* channels transfer */
222 of_property_read_u32(node, PREFIX "convert-channels", &priv->convert_channels);
223 199
224 /* find 1st codec */ 200 /* find 1st codec */
225 np = of_get_child_by_name(node, PREFIX "codec"); 201 np = of_get_child_by_name(node, PREFIX "codec");
@@ -246,11 +222,6 @@ static int asoc_simple_card_parse_of(struct device_node *node,
246 if (ret < 0) 222 if (ret < 0)
247 return ret; 223 return ret;
248 224
249 dev_dbg(dev, "New card: %s\n",
250 card->name ? card->name : "");
251 dev_dbg(dev, "convert_rate %d\n", priv->convert_rate);
252 dev_dbg(dev, "convert_channels %d\n", priv->convert_channels);
253
254 return 0; 225 return 0;
255} 226}
256 227
@@ -288,7 +259,7 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
288 card->codec_conf = &priv->codec_conf; 259 card->codec_conf = &priv->codec_conf;
289 card->num_configs = 1; 260 card->num_configs = 1;
290 261
291 ret = asoc_simple_card_parse_of(np, priv); 262 ret = asoc_simple_card_parse_of(priv);
292 if (ret < 0) { 263 if (ret < 0) {
293 if (ret != -EPROBE_DEFER) 264 if (ret != -EPROBE_DEFER)
294 dev_err(dev, "parse error %d\n", ret); 265 dev_err(dev, "parse error %d\n", ret);
@@ -298,8 +269,10 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
298 snd_soc_card_set_drvdata(card, priv); 269 snd_soc_card_set_drvdata(card, priv);
299 270
300 ret = devm_snd_soc_register_card(dev, card); 271 ret = devm_snd_soc_register_card(dev, card);
301 if (ret >= 0) 272 if (ret < 0)
302 return ret; 273 goto err;
274
275 return 0;
303err: 276err:
304 asoc_simple_card_clean_reference(card); 277 asoc_simple_card_clean_reference(card);
305 278
diff --git a/sound/soc/hisilicon/hi6210-i2s.c b/sound/soc/hisilicon/hi6210-i2s.c
index 45163e5202f5..b193d3beb253 100644
--- a/sound/soc/hisilicon/hi6210-i2s.c
+++ b/sound/soc/hisilicon/hi6210-i2s.c
@@ -97,8 +97,8 @@ static inline u32 hi6210_read_reg(struct hi6210_i2s *i2s, int reg)
97 return readl(i2s->base + reg); 97 return readl(i2s->base + reg);
98} 98}
99 99
100int hi6210_i2s_startup(struct snd_pcm_substream *substream, 100static int hi6210_i2s_startup(struct snd_pcm_substream *substream,
101 struct snd_soc_dai *cpu_dai) 101 struct snd_soc_dai *cpu_dai)
102{ 102{
103 struct hi6210_i2s *i2s = dev_get_drvdata(cpu_dai->dev); 103 struct hi6210_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
104 int ret, n; 104 int ret, n;
@@ -175,8 +175,9 @@ int hi6210_i2s_startup(struct snd_pcm_substream *substream,
175 175
176 return 0; 176 return 0;
177} 177}
178void hi6210_i2s_shutdown(struct snd_pcm_substream *substream, 178
179 struct snd_soc_dai *cpu_dai) 179static void hi6210_i2s_shutdown(struct snd_pcm_substream *substream,
180 struct snd_soc_dai *cpu_dai)
180{ 181{
181 struct hi6210_i2s *i2s = dev_get_drvdata(cpu_dai->dev); 182 struct hi6210_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
182 int n; 183 int n;
@@ -524,7 +525,7 @@ static struct snd_soc_dai_ops hi6210_i2s_dai_ops = {
524 .shutdown = hi6210_i2s_shutdown, 525 .shutdown = hi6210_i2s_shutdown,
525}; 526};
526 527
527struct snd_soc_dai_driver hi6210_i2s_dai_init = { 528static const struct snd_soc_dai_driver hi6210_i2s_dai_init = {
528 .probe = hi6210_i2s_dai_probe, 529 .probe = hi6210_i2s_dai_probe,
529 .playback = { 530 .playback = {
530 .channels_min = 2, 531 .channels_min = 2,
diff --git a/sound/soc/intel/Kconfig b/sound/soc/intel/Kconfig
index 67968ef3bbda..b301bfff1c09 100644
--- a/sound/soc/intel/Kconfig
+++ b/sound/soc/intel/Kconfig
@@ -214,6 +214,18 @@ config SND_SOC_INTEL_BYT_CHT_DA7213_MACH
214 platforms with DA7212/7213 audio codec. 214 platforms with DA7212/7213 audio codec.
215 If unsure select "N". 215 If unsure select "N".
216 216
217config SND_SOC_INTEL_BYT_CHT_ES8316_MACH
218 tristate "ASoC Audio driver for Intel Baytrail & Cherrytrail with ES8316 codec"
219 depends on X86_INTEL_LPSS && I2C && ACPI
220 select SND_SOC_ES8316
221 select SND_SST_ATOM_HIFI2_PLATFORM
222 select SND_SST_IPC_ACPI
223 select SND_SOC_INTEL_SST_MATCH if ACPI
224 help
225 This adds support for ASoC machine driver for Intel(R) Baytrail &
226 Cherrytrail platforms with ES8316 audio codec.
227 If unsure select "N".
228
217config SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH 229config SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH
218 tristate "ASoC Audio driver for Intel Baytrail & Cherrytrail platform with no codec (MinnowBoard MAX, Up)" 230 tristate "ASoC Audio driver for Intel Baytrail & Cherrytrail platform with no codec (MinnowBoard MAX, Up)"
219 depends on X86_INTEL_LPSS && I2C && ACPI 231 depends on X86_INTEL_LPSS && I2C && ACPI
@@ -226,6 +238,36 @@ config SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH
226 connector 238 connector
227 If unsure select "N". 239 If unsure select "N".
228 240
241config SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH
242 tristate "ASoC Audio driver for KBL with RT5663 and MAX98927 in I2S Mode"
243 depends on X86_INTEL_LPSS && I2C
244 select SND_SOC_INTEL_SST
245 select SND_SOC_INTEL_SKYLAKE
246 select SND_SOC_RT5663
247 select SND_SOC_MAX98927
248 select SND_SOC_DMIC
249 select SND_SOC_HDAC_HDMI
250 help
251 This adds support for ASoC Onboard Codec I2S machine driver. This will
252 create an alsa sound card for RT5663 + MAX98927.
253 Say Y if you have such a device.
254 If unsure select "N".
255
256config SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH
257 tristate "ASoC Audio driver for KBL with RT5663, RT5514 and MAX98927 in I2S Mode"
258 depends on X86_INTEL_LPSS && I2C
259 select SND_SOC_INTEL_SST
260 select SND_SOC_INTEL_SKYLAKE
261 select SND_SOC_RT5663
262 select SND_SOC_RT5514
263 select SND_SOC_MAX98927
264 select SND_SOC_HDAC_HDMI
265 help
266 This adds support for ASoC Onboard Codec I2S machine driver. This will
267 create an alsa sound card for RT5663 + RT5514 + MAX98927.
268 Say Y if you have such a device.
269 If unsure select "N".
270
229config SND_SOC_INTEL_SKYLAKE 271config SND_SOC_INTEL_SKYLAKE
230 tristate 272 tristate
231 select SND_HDA_EXT_CORE 273 select SND_HDA_EXT_CORE
diff --git a/sound/soc/intel/atom/sst-mfld-platform-pcm.c b/sound/soc/intel/atom/sst-mfld-platform-pcm.c
index 21cac1c8dd4c..b082b31023d5 100644
--- a/sound/soc/intel/atom/sst-mfld-platform-pcm.c
+++ b/sound/soc/intel/atom/sst-mfld-platform-pcm.c
@@ -690,7 +690,7 @@ static int sst_pcm_new(struct snd_soc_pcm_runtime *rtd)
690 snd_dma_continuous_data(GFP_DMA), 690 snd_dma_continuous_data(GFP_DMA),
691 SST_MIN_BUFFER, SST_MAX_BUFFER); 691 SST_MIN_BUFFER, SST_MAX_BUFFER);
692 if (retval) { 692 if (retval) {
693 dev_err(rtd->dev, "dma buffer allocationf fail\n"); 693 dev_err(rtd->dev, "dma buffer allocation failure\n");
694 return retval; 694 return retval;
695 } 695 }
696 } 696 }
diff --git a/sound/soc/intel/atom/sst/sst.c b/sound/soc/intel/atom/sst/sst.c
index f9ba71315e33..8afdff457579 100644
--- a/sound/soc/intel/atom/sst/sst.c
+++ b/sound/soc/intel/atom/sst/sst.c
@@ -258,7 +258,7 @@ static ssize_t firmware_version_show(struct device *dev,
258 258
259} 259}
260 260
261DEVICE_ATTR_RO(firmware_version); 261static DEVICE_ATTR_RO(firmware_version);
262 262
263static const struct attribute *sst_fw_version_attrs[] = { 263static const struct attribute *sst_fw_version_attrs[] = {
264 &dev_attr_firmware_version.attr, 264 &dev_attr_firmware_version.attr,
@@ -382,37 +382,6 @@ void sst_context_cleanup(struct intel_sst_drv *ctx)
382} 382}
383EXPORT_SYMBOL_GPL(sst_context_cleanup); 383EXPORT_SYMBOL_GPL(sst_context_cleanup);
384 384
385static inline void sst_save_shim64(struct intel_sst_drv *ctx,
386 void __iomem *shim,
387 struct sst_shim_regs64 *shim_regs)
388{
389 unsigned long irq_flags;
390
391 spin_lock_irqsave(&ctx->ipc_spin_lock, irq_flags);
392
393 shim_regs->imrx = sst_shim_read64(shim, SST_IMRX);
394 shim_regs->csr = sst_shim_read64(shim, SST_CSR);
395
396
397 spin_unlock_irqrestore(&ctx->ipc_spin_lock, irq_flags);
398}
399
400static inline void sst_restore_shim64(struct intel_sst_drv *ctx,
401 void __iomem *shim,
402 struct sst_shim_regs64 *shim_regs)
403{
404 unsigned long irq_flags;
405
406 /*
407 * we only need to restore IMRX for this case, rest will be
408 * initialize by FW or driver when firmware is loaded
409 */
410 spin_lock_irqsave(&ctx->ipc_spin_lock, irq_flags);
411 sst_shim_write64(shim, SST_IMRX, shim_regs->imrx);
412 sst_shim_write64(shim, SST_CSR, shim_regs->csr);
413 spin_unlock_irqrestore(&ctx->ipc_spin_lock, irq_flags);
414}
415
416void sst_configure_runtime_pm(struct intel_sst_drv *ctx) 385void sst_configure_runtime_pm(struct intel_sst_drv *ctx)
417{ 386{
418 pm_runtime_set_autosuspend_delay(ctx->dev, SST_SUSPEND_DELAY); 387 pm_runtime_set_autosuspend_delay(ctx->dev, SST_SUSPEND_DELAY);
@@ -432,8 +401,6 @@ void sst_configure_runtime_pm(struct intel_sst_drv *ctx)
432 pm_runtime_set_active(ctx->dev); 401 pm_runtime_set_active(ctx->dev);
433 else 402 else
434 pm_runtime_put_noidle(ctx->dev); 403 pm_runtime_put_noidle(ctx->dev);
435
436 sst_save_shim64(ctx, ctx->shim, ctx->shim_regs64);
437} 404}
438EXPORT_SYMBOL_GPL(sst_configure_runtime_pm); 405EXPORT_SYMBOL_GPL(sst_configure_runtime_pm);
439 406
@@ -457,8 +424,6 @@ static int intel_sst_runtime_suspend(struct device *dev)
457 flush_workqueue(ctx->post_msg_wq); 424 flush_workqueue(ctx->post_msg_wq);
458 425
459 ctx->ops->reset(ctx); 426 ctx->ops->reset(ctx);
460 /* save the shim registers because PMC doesn't save state */
461 sst_save_shim64(ctx, ctx->shim, ctx->shim_regs64);
462 427
463 return ret; 428 return ret;
464} 429}
@@ -499,23 +464,23 @@ static int intel_sst_suspend(struct device *dev)
499 fw_save = kzalloc(sizeof(*fw_save), GFP_KERNEL); 464 fw_save = kzalloc(sizeof(*fw_save), GFP_KERNEL);
500 if (!fw_save) 465 if (!fw_save)
501 return -ENOMEM; 466 return -ENOMEM;
502 fw_save->iram = kzalloc(ctx->iram_end - ctx->iram_base, GFP_KERNEL); 467 fw_save->iram = kvzalloc(ctx->iram_end - ctx->iram_base, GFP_KERNEL);
503 if (!fw_save->iram) { 468 if (!fw_save->iram) {
504 ret = -ENOMEM; 469 ret = -ENOMEM;
505 goto iram; 470 goto iram;
506 } 471 }
507 fw_save->dram = kzalloc(ctx->dram_end - ctx->dram_base, GFP_KERNEL); 472 fw_save->dram = kvzalloc(ctx->dram_end - ctx->dram_base, GFP_KERNEL);
508 if (!fw_save->dram) { 473 if (!fw_save->dram) {
509 ret = -ENOMEM; 474 ret = -ENOMEM;
510 goto dram; 475 goto dram;
511 } 476 }
512 fw_save->sram = kzalloc(SST_MAILBOX_SIZE, GFP_KERNEL); 477 fw_save->sram = kvzalloc(SST_MAILBOX_SIZE, GFP_KERNEL);
513 if (!fw_save->sram) { 478 if (!fw_save->sram) {
514 ret = -ENOMEM; 479 ret = -ENOMEM;
515 goto sram; 480 goto sram;
516 } 481 }
517 482
518 fw_save->ddr = kzalloc(ctx->ddr_end - ctx->ddr_base, GFP_KERNEL); 483 fw_save->ddr = kvzalloc(ctx->ddr_end - ctx->ddr_base, GFP_KERNEL);
519 if (!fw_save->ddr) { 484 if (!fw_save->ddr) {
520 ret = -ENOMEM; 485 ret = -ENOMEM;
521 goto ddr; 486 goto ddr;
@@ -530,11 +495,11 @@ static int intel_sst_suspend(struct device *dev)
530 ctx->ops->reset(ctx); 495 ctx->ops->reset(ctx);
531 return 0; 496 return 0;
532ddr: 497ddr:
533 kfree(fw_save->sram); 498 kvfree(fw_save->sram);
534sram: 499sram:
535 kfree(fw_save->dram); 500 kvfree(fw_save->dram);
536dram: 501dram:
537 kfree(fw_save->iram); 502 kvfree(fw_save->iram);
538iram: 503iram:
539 kfree(fw_save); 504 kfree(fw_save);
540 return ret; 505 return ret;
@@ -562,10 +527,10 @@ static int intel_sst_resume(struct device *dev)
562 memcpy32_toio(ctx->mailbox, fw_save->sram, SST_MAILBOX_SIZE); 527 memcpy32_toio(ctx->mailbox, fw_save->sram, SST_MAILBOX_SIZE);
563 memcpy32_toio(ctx->ddr, fw_save->ddr, ctx->ddr_end - ctx->ddr_base); 528 memcpy32_toio(ctx->ddr, fw_save->ddr, ctx->ddr_end - ctx->ddr_base);
564 529
565 kfree(fw_save->sram); 530 kvfree(fw_save->sram);
566 kfree(fw_save->dram); 531 kvfree(fw_save->dram);
567 kfree(fw_save->iram); 532 kvfree(fw_save->iram);
568 kfree(fw_save->ddr); 533 kvfree(fw_save->ddr);
569 kfree(fw_save); 534 kfree(fw_save);
570 535
571 block = sst_create_block(ctx, 0, FW_DWNL_ID); 536 block = sst_create_block(ctx, 0, FW_DWNL_ID);
diff --git a/sound/soc/intel/atom/sst/sst.h b/sound/soc/intel/atom/sst/sst.h
index 5c9a51cc77aa..e02e2b4cc08f 100644
--- a/sound/soc/intel/atom/sst/sst.h
+++ b/sound/soc/intel/atom/sst/sst.h
@@ -317,31 +317,11 @@ struct sst_ipc_reg {
317 int ipcd; 317 int ipcd;
318}; 318};
319 319
320struct sst_shim_regs64 {
321 u64 csr;
322 u64 pisr;
323 u64 pimr;
324 u64 isrx;
325 u64 isrd;
326 u64 imrx;
327 u64 imrd;
328 u64 ipcx;
329 u64 ipcd;
330 u64 isrsc;
331 u64 isrlpesc;
332 u64 imrsc;
333 u64 imrlpesc;
334 u64 ipcsc;
335 u64 ipclpesc;
336 u64 clkctl;
337 u64 csr2;
338};
339
340struct sst_fw_save { 320struct sst_fw_save {
341 void *iram; 321 void *iram; /* allocated via kvmalloc() */
342 void *dram; 322 void *dram; /* allocated via kvmalloc() */
343 void *sram; 323 void *sram; /* allocated via kvmalloc() */
344 void *ddr; 324 void *ddr; /* allocated via kvmalloc() */
345}; 325};
346 326
347/** 327/**
@@ -356,7 +336,6 @@ struct sst_fw_save {
356 * @dram : SST DRAM pointer 336 * @dram : SST DRAM pointer
357 * @pdata : SST info passed as a part of pci platform data 337 * @pdata : SST info passed as a part of pci platform data
358 * @shim_phy_add : SST shim phy addr 338 * @shim_phy_add : SST shim phy addr
359 * @shim_regs64: Struct to save shim registers
360 * @ipc_dispatch_list : ipc messages dispatched 339 * @ipc_dispatch_list : ipc messages dispatched
361 * @rx_list : to copy the process_reply/process_msg from DSP 340 * @rx_list : to copy the process_reply/process_msg from DSP
362 * @ipc_post_msg_wq : wq to post IPC messages context 341 * @ipc_post_msg_wq : wq to post IPC messages context
@@ -398,7 +377,6 @@ struct intel_sst_drv {
398 unsigned int ddr_end; 377 unsigned int ddr_end;
399 unsigned int ddr_base; 378 unsigned int ddr_base;
400 unsigned int mailbox_recv_offset; 379 unsigned int mailbox_recv_offset;
401 struct sst_shim_regs64 *shim_regs64;
402 struct list_head block_list; 380 struct list_head block_list;
403 struct list_head ipc_dispatch_list; 381 struct list_head ipc_dispatch_list;
404 struct sst_platform_info *pdata; 382 struct sst_platform_info *pdata;
diff --git a/sound/soc/intel/atom/sst/sst_acpi.c b/sound/soc/intel/atom/sst/sst_acpi.c
index dd250b8b26f2..0e928d54305d 100644
--- a/sound/soc/intel/atom/sst/sst_acpi.c
+++ b/sound/soc/intel/atom/sst/sst_acpi.c
@@ -303,8 +303,6 @@ static int sst_acpi_probe(struct platform_device *pdev)
303 dev_err(dev, "No matching machine driver found\n"); 303 dev_err(dev, "No matching machine driver found\n");
304 return -ENODEV; 304 return -ENODEV;
305 } 305 }
306 if (mach->machine_quirk)
307 mach = mach->machine_quirk(mach);
308 306
309 pdata = mach->pdata; 307 pdata = mach->pdata;
310 308
@@ -360,23 +358,9 @@ static int sst_acpi_probe(struct platform_device *pdev)
360 if (ret < 0) 358 if (ret < 0)
361 return ret; 359 return ret;
362 360
363 /* need to save shim registers in BYT */
364 ctx->shim_regs64 = devm_kzalloc(ctx->dev, sizeof(*ctx->shim_regs64),
365 GFP_KERNEL);
366 if (!ctx->shim_regs64) {
367 ret = -ENOMEM;
368 goto do_sst_cleanup;
369 }
370
371 sst_configure_runtime_pm(ctx); 361 sst_configure_runtime_pm(ctx);
372 platform_set_drvdata(pdev, ctx); 362 platform_set_drvdata(pdev, ctx);
373 return ret; 363 return ret;
374
375do_sst_cleanup:
376 sst_context_cleanup(ctx);
377 platform_set_drvdata(pdev, NULL);
378 dev_err(ctx->dev, "failed with %d\n", ret);
379 return ret;
380} 364}
381 365
382/** 366/**
@@ -453,12 +437,20 @@ static const struct dmi_system_id cht_table[] = {
453 437
454 438
455static struct sst_acpi_mach cht_surface_mach = { 439static struct sst_acpi_mach cht_surface_mach = {
456 "10EC5640", "cht-bsw-rt5645", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, 440 .id = "10EC5640",
457 &chv_platform_data }; 441 .drv_name = "cht-bsw-rt5645",
442 .fw_filename = "intel/fw_sst_22a8.bin",
443 .board = "cht-bsw",
444 .pdata = &chv_platform_data,
445};
458 446
459static struct sst_acpi_mach byt_thinkpad_10 = { 447static struct sst_acpi_mach byt_thinkpad_10 = {
460 "10EC5640", "cht-bsw-rt5672", "intel/fw_sst_0f28.bin", "cht-bsw", NULL, 448 .id = "10EC5640",
461 &byt_rvp_platform_data }; 449 .drv_name = "cht-bsw-rt5672",
450 .fw_filename = "intel/fw_sst_0f28.bin",
451 .board = "cht-bsw",
452 .pdata = &byt_rvp_platform_data,
453};
462 454
463static struct sst_acpi_mach *cht_quirk(void *arg) 455static struct sst_acpi_mach *cht_quirk(void *arg)
464{ 456{
@@ -486,68 +478,182 @@ static struct sst_acpi_mach *byt_quirk(void *arg)
486 478
487 479
488static struct sst_acpi_mach sst_acpi_bytcr[] = { 480static struct sst_acpi_mach sst_acpi_bytcr[] = {
489 {"10EC5640", "bytcr_rt5640", "intel/fw_sst_0f28.bin", "bytcr_rt5640", byt_quirk, 481 {
490 &byt_rvp_platform_data }, 482 .id = "10EC5640",
491 {"10EC5642", "bytcr_rt5640", "intel/fw_sst_0f28.bin", "bytcr_rt5640", NULL, 483 .drv_name = "bytcr_rt5640",
492 &byt_rvp_platform_data }, 484 .fw_filename = "intel/fw_sst_0f28.bin",
493 {"INTCCFFD", "bytcr_rt5640", "intel/fw_sst_0f28.bin", "bytcr_rt5640", NULL, 485 .board = "bytcr_rt5640",
494 &byt_rvp_platform_data }, 486 .machine_quirk = byt_quirk,
495 {"10EC5651", "bytcr_rt5651", "intel/fw_sst_0f28.bin", "bytcr_rt5651", NULL, 487 .pdata = &byt_rvp_platform_data,
496 &byt_rvp_platform_data }, 488 },
497 {"DLGS7212", "bytcht_da7213", "intel/fw_sst_0f28.bin", "bytcht_da7213", NULL, 489 {
498 &byt_rvp_platform_data }, 490 .id = "10EC5642",
499 {"DLGS7213", "bytcht_da7213", "intel/fw_sst_0f28.bin", "bytcht_da7213", NULL, 491 .drv_name = "bytcr_rt5640",
500 &byt_rvp_platform_data }, 492 .fw_filename = "intel/fw_sst_0f28.bin",
493 .board = "bytcr_rt5640",
494 .pdata = &byt_rvp_platform_data
495 },
496 {
497 .id = "INTCCFFD",
498 .drv_name = "bytcr_rt5640",
499 .fw_filename = "intel/fw_sst_0f28.bin",
500 .board = "bytcr_rt5640",
501 .pdata = &byt_rvp_platform_data
502 },
503 {
504 .id = "10EC5651",
505 .drv_name = "bytcr_rt5651",
506 .fw_filename = "intel/fw_sst_0f28.bin",
507 .board = "bytcr_rt5651",
508 .pdata = &byt_rvp_platform_data
509 },
510 {
511 .id = "DLGS7212",
512 .drv_name = "bytcht_da7213",
513 .fw_filename = "intel/fw_sst_0f28.bin",
514 .board = "bytcht_da7213",
515 .pdata = &byt_rvp_platform_data
516 },
517 {
518 .id = "DLGS7213",
519 .drv_name = "bytcht_da7213",
520 .fw_filename = "intel/fw_sst_0f28.bin",
521 .board = "bytcht_da7213",
522 .pdata = &byt_rvp_platform_data
523 },
501 /* some Baytrail platforms rely on RT5645, use CHT machine driver */ 524 /* some Baytrail platforms rely on RT5645, use CHT machine driver */
502 {"10EC5645", "cht-bsw-rt5645", "intel/fw_sst_0f28.bin", "cht-bsw", NULL, 525 {
503 &byt_rvp_platform_data }, 526 .id = "10EC5645",
504 {"10EC5648", "cht-bsw-rt5645", "intel/fw_sst_0f28.bin", "cht-bsw", NULL, 527 .drv_name = "cht-bsw-rt5645",
505 &byt_rvp_platform_data }, 528 .fw_filename = "intel/fw_sst_0f28.bin",
529 .board = "cht-bsw",
530 .pdata = &byt_rvp_platform_data
531 },
532 {
533 .id = "10EC5648",
534 .drv_name = "cht-bsw-rt5645",
535 .fw_filename = "intel/fw_sst_0f28.bin",
536 .board = "cht-bsw",
537 .pdata = &byt_rvp_platform_data
538 },
506#if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) 539#if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)
507 /* 540 /*
508 * This is always last in the table so that it is selected only when 541 * This is always last in the table so that it is selected only when
509 * enabled explicitly and there is no codec-related information in SSDT 542 * enabled explicitly and there is no codec-related information in SSDT
510 */ 543 */
511 {"80860F28", "bytcht_nocodec", "intel/fw_sst_0f28.bin", "bytcht_nocodec", NULL, 544 {
512 &byt_rvp_platform_data }, 545 .id = "80860F28",
546 .drv_name = "bytcht_nocodec",
547 .fw_filename = "intel/fw_sst_0f28.bin",
548 .board = "bytcht_nocodec",
549 .pdata = &byt_rvp_platform_data
550 },
513#endif 551#endif
514 {}, 552 {},
515}; 553};
516 554
517/* Cherryview-based platforms: CherryTrail and Braswell */ 555/* Cherryview-based platforms: CherryTrail and Braswell */
518static struct sst_acpi_mach sst_acpi_chv[] = { 556static struct sst_acpi_mach sst_acpi_chv[] = {
519 {"10EC5670", "cht-bsw-rt5672", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, 557 {
520 &chv_platform_data }, 558 .id = "10EC5670",
521 {"10EC5672", "cht-bsw-rt5672", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, 559 .drv_name = "cht-bsw-rt5672",
522 &chv_platform_data }, 560 .fw_filename = "intel/fw_sst_22a8.bin",
523 {"10EC5645", "cht-bsw-rt5645", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, 561 .board = "cht-bsw",
524 &chv_platform_data }, 562 .pdata = &chv_platform_data
525 {"10EC5650", "cht-bsw-rt5645", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, 563 },
526 &chv_platform_data }, 564 {
527 {"10EC3270", "cht-bsw-rt5645", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, 565 .id = "10EC5672",
528 &chv_platform_data }, 566 .drv_name = "cht-bsw-rt5672",
529 567 .fw_filename = "intel/fw_sst_22a8.bin",
530 {"193C9890", "cht-bsw-max98090", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, 568 .board = "cht-bsw",
531 &chv_platform_data }, 569 .pdata = &chv_platform_data
532 {"DLGS7212", "bytcht_da7213", "intel/fw_sst_22a8.bin", "bytcht_da7213", NULL, 570 },
533 &chv_platform_data }, 571 {
534 {"DLGS7213", "bytcht_da7213", "intel/fw_sst_22a8.bin", "bytcht_da7213", NULL, 572 .id = "10EC5645",
535 &chv_platform_data }, 573 .drv_name = "cht-bsw-rt5645",
574 .fw_filename = "intel/fw_sst_22a8.bin",
575 .board = "cht-bsw",
576 .pdata = &chv_platform_data
577 },
578 {
579 .id = "10EC5650",
580 .drv_name = "cht-bsw-rt5645",
581 .fw_filename = "intel/fw_sst_22a8.bin",
582 .board = "cht-bsw",
583 .pdata = &chv_platform_data
584 },
585 {
586 .id = "10EC3270",
587 .drv_name = "cht-bsw-rt5645",
588 .fw_filename = "intel/fw_sst_22a8.bin",
589 .board = "cht-bsw",
590 .pdata = &chv_platform_data
591 },
592
593 {
594 .id = "193C9890",
595 .drv_name = "cht-bsw-max98090",
596 .fw_filename = "intel/fw_sst_22a8.bin",
597 .board = "cht-bsw",
598 .pdata = &chv_platform_data
599 },
600 {
601 .id = "DLGS7212",
602 .drv_name = "bytcht_da7213",
603 .fw_filename = "intel/fw_sst_22a8.bin",
604 .board = "bytcht_da7213",
605 .pdata = &chv_platform_data
606 },
607 {
608 .id = "DLGS7213",
609 .drv_name = "bytcht_da7213",
610 .fw_filename = "intel/fw_sst_22a8.bin",
611 .board = "bytcht_da7213",
612 .pdata = &chv_platform_data
613 },
614 {
615 .id = "ESSX8316",
616 .drv_name = "bytcht_es8316",
617 .fw_filename = "intel/fw_sst_22a8.bin",
618 .board = "bytcht_es8316",
619 .pdata = &chv_platform_data
620 },
536 /* some CHT-T platforms rely on RT5640, use Baytrail machine driver */ 621 /* some CHT-T platforms rely on RT5640, use Baytrail machine driver */
537 {"10EC5640", "bytcr_rt5640", "intel/fw_sst_22a8.bin", "bytcr_rt5640", cht_quirk, 622 {
538 &chv_platform_data }, 623 .id = "10EC5640",
539 {"10EC3276", "bytcr_rt5640", "intel/fw_sst_22a8.bin", "bytcr_rt5640", NULL, 624 .drv_name = "bytcr_rt5640",
540 &chv_platform_data }, 625 .fw_filename = "intel/fw_sst_22a8.bin",
626 .board = "bytcr_rt5640",
627 .machine_quirk = cht_quirk,
628 .pdata = &chv_platform_data
629 },
630 {
631 .id = "10EC3276",
632 .drv_name = "bytcr_rt5640",
633 .fw_filename = "intel/fw_sst_22a8.bin",
634 .board = "bytcr_rt5640",
635 .pdata = &chv_platform_data
636 },
541 /* some CHT-T platforms rely on RT5651, use Baytrail machine driver */ 637 /* some CHT-T platforms rely on RT5651, use Baytrail machine driver */
542 {"10EC5651", "bytcr_rt5651", "intel/fw_sst_22a8.bin", "bytcr_rt5651", NULL, 638 {
543 &chv_platform_data }, 639 .id = "10EC5651",
640 .drv_name = "bytcr_rt5651",
641 .fw_filename = "intel/fw_sst_22a8.bin",
642 .board = "bytcr_rt5651",
643 .pdata = &chv_platform_data
644 },
544#if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) 645#if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)
545 /* 646 /*
546 * This is always last in the table so that it is selected only when 647 * This is always last in the table so that it is selected only when
547 * enabled explicitly and there is no codec-related information in SSDT 648 * enabled explicitly and there is no codec-related information in SSDT
548 */ 649 */
549 {"808622A8", "bytcht_nocodec", "intel/fw_sst_22a8.bin", "bytcht_nocodec", NULL, 650 {
550 &chv_platform_data }, 651 .id = "808622A8",
652 .drv_name = "bytcht_nocodec",
653 .fw_filename = "intel/fw_sst_22a8.bin",
654 .board = "bytcht_nocodec",
655 .pdata = &chv_platform_data
656 },
551#endif 657#endif
552 {}, 658 {},
553}; 659};
diff --git a/sound/soc/intel/boards/Makefile b/sound/soc/intel/boards/Makefile
index 56896e09445d..a5c5bc5732a2 100644
--- a/sound/soc/intel/boards/Makefile
+++ b/sound/soc/intel/boards/Makefile
@@ -11,7 +11,10 @@ snd-soc-sst-cht-bsw-rt5672-objs := cht_bsw_rt5672.o
11snd-soc-sst-cht-bsw-rt5645-objs := cht_bsw_rt5645.o 11snd-soc-sst-cht-bsw-rt5645-objs := cht_bsw_rt5645.o
12snd-soc-sst-cht-bsw-max98090_ti-objs := cht_bsw_max98090_ti.o 12snd-soc-sst-cht-bsw-max98090_ti-objs := cht_bsw_max98090_ti.o
13snd-soc-sst-byt-cht-da7213-objs := bytcht_da7213.o 13snd-soc-sst-byt-cht-da7213-objs := bytcht_da7213.o
14snd-soc-sst-byt-cht-es8316-objs := bytcht_es8316.o
14snd-soc-sst-byt-cht-nocodec-objs := bytcht_nocodec.o 15snd-soc-sst-byt-cht-nocodec-objs := bytcht_nocodec.o
16snd-soc-kbl_rt5663_max98927-objs := kbl_rt5663_max98927.o
17snd-soc-kbl_rt5663_rt5514_max98927-objs := kbl_rt5663_rt5514_max98927.o
15snd-soc-skl_rt286-objs := skl_rt286.o 18snd-soc-skl_rt286-objs := skl_rt286.o
16snd-skl_nau88l25_max98357a-objs := skl_nau88l25_max98357a.o 19snd-skl_nau88l25_max98357a-objs := skl_nau88l25_max98357a.o
17snd-soc-skl_nau88l25_ssm4567-objs := skl_nau88l25_ssm4567.o 20snd-soc-skl_nau88l25_ssm4567-objs := skl_nau88l25_ssm4567.o
@@ -29,7 +32,10 @@ obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH) += snd-soc-sst-cht-bsw-rt5672.o
29obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH) += snd-soc-sst-cht-bsw-rt5645.o 32obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH) += snd-soc-sst-cht-bsw-rt5645.o
30obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH) += snd-soc-sst-cht-bsw-max98090_ti.o 33obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH) += snd-soc-sst-cht-bsw-max98090_ti.o
31obj-$(CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH) += snd-soc-sst-byt-cht-da7213.o 34obj-$(CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH) += snd-soc-sst-byt-cht-da7213.o
35obj-$(CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH) += snd-soc-sst-byt-cht-es8316.o
32obj-$(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) += snd-soc-sst-byt-cht-nocodec.o 36obj-$(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) += snd-soc-sst-byt-cht-nocodec.o
37obj-$(CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH) += snd-soc-kbl_rt5663_max98927.o
38obj-$(CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH) += snd-soc-kbl_rt5663_rt5514_max98927.o
33obj-$(CONFIG_SND_SOC_INTEL_SKL_RT286_MACH) += snd-soc-skl_rt286.o 39obj-$(CONFIG_SND_SOC_INTEL_SKL_RT286_MACH) += snd-soc-skl_rt286.o
34obj-$(CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH) += snd-skl_nau88l25_max98357a.o 40obj-$(CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH) += snd-skl_nau88l25_max98357a.o
35obj-$(CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH) += snd-soc-skl_nau88l25_ssm4567.o 41obj-$(CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH) += snd-soc-skl_nau88l25_ssm4567.o
diff --git a/sound/soc/intel/boards/bdw-rt5677.c b/sound/soc/intel/boards/bdw-rt5677.c
index 14d9693c1641..058b8ccedf02 100644
--- a/sound/soc/intel/boards/bdw-rt5677.c
+++ b/sound/soc/intel/boards/bdw-rt5677.c
@@ -16,6 +16,7 @@
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */ 17 */
18 18
19#include <linux/acpi.h>
19#include <linux/module.h> 20#include <linux/module.h>
20#include <linux/platform_device.h> 21#include <linux/platform_device.h>
21#include <linux/gpio/consumer.h> 22#include <linux/gpio/consumer.h>
@@ -120,6 +121,26 @@ static struct snd_soc_jack_gpio mic_jack_gpio = {
120 .invert = 1, 121 .invert = 1,
121}; 122};
122 123
124/* GPIO indexes defined by ACPI */
125enum {
126 RT5677_GPIO_PLUG_DET = 0,
127 RT5677_GPIO_MIC_PRESENT_L = 1,
128 RT5677_GPIO_HOTWORD_DET_L = 2,
129 RT5677_GPIO_DSP_INT = 3,
130 RT5677_GPIO_HP_AMP_SHDN_L = 4,
131};
132
133static const struct acpi_gpio_params plug_det_gpio = { RT5677_GPIO_PLUG_DET, 0, false };
134static const struct acpi_gpio_params mic_present_gpio = { RT5677_GPIO_MIC_PRESENT_L, 0, false };
135static const struct acpi_gpio_params headphone_enable_gpio = { RT5677_GPIO_HP_AMP_SHDN_L, 0, false };
136
137static const struct acpi_gpio_mapping bdw_rt5677_gpios[] = {
138 { "plug-det-gpios", &plug_det_gpio, 1 },
139 { "mic-present-gpios", &mic_present_gpio, 1 },
140 { "headphone-enable-gpios", &headphone_enable_gpio, 1 },
141 { NULL },
142};
143
123static int broadwell_ssp0_fixup(struct snd_soc_pcm_runtime *rtd, 144static int broadwell_ssp0_fixup(struct snd_soc_pcm_runtime *rtd,
124 struct snd_pcm_hw_params *params) 145 struct snd_pcm_hw_params *params)
125{ 146{
@@ -184,6 +205,11 @@ static int bdw_rt5677_init(struct snd_soc_pcm_runtime *rtd)
184 snd_soc_card_get_drvdata(rtd->card); 205 snd_soc_card_get_drvdata(rtd->card);
185 struct snd_soc_codec *codec = rtd->codec; 206 struct snd_soc_codec *codec = rtd->codec;
186 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); 207 struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
208 int ret;
209
210 ret = devm_acpi_dev_add_driver_gpios(codec->dev, bdw_rt5677_gpios);
211 if (ret)
212 dev_warn(codec->dev, "Failed to add driver gpios\n");
187 213
188 /* Enable codec ASRC function for Stereo DAC/Stereo1 ADC/DMIC/I2S1. 214 /* Enable codec ASRC function for Stereo DAC/Stereo1 ADC/DMIC/I2S1.
189 * The ASRC clock source is clk_i2s1_asrc. 215 * The ASRC clock source is clk_i2s1_asrc.
diff --git a/sound/soc/intel/boards/bxt_da7219_max98357a.c b/sound/soc/intel/boards/bxt_da7219_max98357a.c
index 3a8c4d954a91..ce35ec7884d1 100644
--- a/sound/soc/intel/boards/bxt_da7219_max98357a.c
+++ b/sound/soc/intel/boards/bxt_da7219_max98357a.c
@@ -89,11 +89,6 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
89 if (ret) 89 if (ret)
90 dev_err(card->dev, "failed to stop PLL: %d\n", ret); 90 dev_err(card->dev, "failed to stop PLL: %d\n", ret);
91 } else if(SND_SOC_DAPM_EVENT_ON(event)) { 91 } else if(SND_SOC_DAPM_EVENT_ON(event)) {
92 ret = snd_soc_dai_set_sysclk(codec_dai,
93 DA7219_CLKSRC_MCLK, 19200000, SND_SOC_CLOCK_IN);
94 if (ret)
95 dev_err(card->dev, "can't set codec sysclk configuration\n");
96
97 ret = snd_soc_dai_set_pll(codec_dai, 0, 92 ret = snd_soc_dai_set_pll(codec_dai, 0,
98 DA7219_SYSCLK_PLL_SRM, 0, DA7219_PLL_FREQ_OUT_98304); 93 DA7219_SYSCLK_PLL_SRM, 0, DA7219_PLL_FREQ_OUT_98304);
99 if (ret) 94 if (ret)
@@ -187,8 +182,17 @@ static int broxton_ssp_fixup(struct snd_soc_pcm_runtime *rtd,
187static int broxton_da7219_codec_init(struct snd_soc_pcm_runtime *rtd) 182static int broxton_da7219_codec_init(struct snd_soc_pcm_runtime *rtd)
188{ 183{
189 int ret; 184 int ret;
185 struct snd_soc_dai *codec_dai = rtd->codec_dai;
190 struct snd_soc_codec *codec = rtd->codec; 186 struct snd_soc_codec *codec = rtd->codec;
191 187
188 /* Configure sysclk for codec */
189 ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, 19200000,
190 SND_SOC_CLOCK_IN);
191 if (ret) {
192 dev_err(rtd->dev, "can't set codec sysclk configuration\n");
193 return ret;
194 }
195
192 /* 196 /*
193 * Headset buttons map to the google Reference headset. 197 * Headset buttons map to the google Reference headset.
194 * These can be configured by userspace. 198 * These can be configured by userspace.
@@ -238,31 +242,31 @@ static int broxton_da7219_fe_init(struct snd_soc_pcm_runtime *rtd)
238 return 0; 242 return 0;
239} 243}
240 244
241static unsigned int rates[] = { 245static const unsigned int rates[] = {
242 48000, 246 48000,
243}; 247};
244 248
245static struct snd_pcm_hw_constraint_list constraints_rates = { 249static const struct snd_pcm_hw_constraint_list constraints_rates = {
246 .count = ARRAY_SIZE(rates), 250 .count = ARRAY_SIZE(rates),
247 .list = rates, 251 .list = rates,
248 .mask = 0, 252 .mask = 0,
249}; 253};
250 254
251static unsigned int channels[] = { 255static const unsigned int channels[] = {
252 DUAL_CHANNEL, 256 DUAL_CHANNEL,
253}; 257};
254 258
255static struct snd_pcm_hw_constraint_list constraints_channels = { 259static const struct snd_pcm_hw_constraint_list constraints_channels = {
256 .count = ARRAY_SIZE(channels), 260 .count = ARRAY_SIZE(channels),
257 .list = channels, 261 .list = channels,
258 .mask = 0, 262 .mask = 0,
259}; 263};
260 264
261static unsigned int channels_quad[] = { 265static const unsigned int channels_quad[] = {
262 QUAD_CHANNEL, 266 QUAD_CHANNEL,
263}; 267};
264 268
265static struct snd_pcm_hw_constraint_list constraints_channels_quad = { 269static const struct snd_pcm_hw_constraint_list constraints_channels_quad = {
266 .count = ARRAY_SIZE(channels_quad), 270 .count = ARRAY_SIZE(channels_quad),
267 .list = channels_quad, 271 .list = channels_quad,
268 .mask = 0, 272 .mask = 0,
diff --git a/sound/soc/intel/boards/bxt_rt298.c b/sound/soc/intel/boards/bxt_rt298.c
index 1a68d043c803..0c3a3cbcb884 100644
--- a/sound/soc/intel/boards/bxt_rt298.c
+++ b/sound/soc/intel/boards/bxt_rt298.c
@@ -207,11 +207,11 @@ static const struct snd_soc_ops broxton_rt298_ops = {
207 .hw_params = broxton_rt298_hw_params, 207 .hw_params = broxton_rt298_hw_params,
208}; 208};
209 209
210static unsigned int rates[] = { 210static const unsigned int rates[] = {
211 48000, 211 48000,
212}; 212};
213 213
214static struct snd_pcm_hw_constraint_list constraints_rates = { 214static const struct snd_pcm_hw_constraint_list constraints_rates = {
215 .count = ARRAY_SIZE(rates), 215 .count = ARRAY_SIZE(rates),
216 .list = rates, 216 .list = rates,
217 .mask = 0, 217 .mask = 0,
@@ -222,19 +222,16 @@ static int broxton_dmic_fixup(struct snd_soc_pcm_runtime *rtd,
222{ 222{
223 struct snd_interval *channels = hw_param_interval(params, 223 struct snd_interval *channels = hw_param_interval(params,
224 SNDRV_PCM_HW_PARAM_CHANNELS); 224 SNDRV_PCM_HW_PARAM_CHANNELS);
225 if (params_channels(params) == 2) 225 channels->min = channels->max = 4;
226 channels->min = channels->max = 2;
227 else
228 channels->min = channels->max = 4;
229 226
230 return 0; 227 return 0;
231} 228}
232 229
233static unsigned int channels_dmic[] = { 230static const unsigned int channels_dmic[] = {
234 2, 4, 231 1, 2, 3, 4,
235}; 232};
236 233
237static struct snd_pcm_hw_constraint_list constraints_dmic_channels = { 234static const struct snd_pcm_hw_constraint_list constraints_dmic_channels = {
238 .count = ARRAY_SIZE(channels_dmic), 235 .count = ARRAY_SIZE(channels_dmic),
239 .list = channels_dmic, 236 .list = channels_dmic,
240 .mask = 0, 237 .mask = 0,
@@ -256,11 +253,11 @@ static const struct snd_soc_ops broxton_dmic_ops = {
256 .startup = broxton_dmic_startup, 253 .startup = broxton_dmic_startup,
257}; 254};
258 255
259static unsigned int channels[] = { 256static const unsigned int channels[] = {
260 2, 257 2,
261}; 258};
262 259
263static struct snd_pcm_hw_constraint_list constraints_channels = { 260static const struct snd_pcm_hw_constraint_list constraints_channels = {
264 .count = ARRAY_SIZE(channels), 261 .count = ARRAY_SIZE(channels),
265 .list = channels, 262 .list = channels,
266 .mask = 0, 263 .mask = 0,
diff --git a/sound/soc/intel/boards/byt-max98090.c b/sound/soc/intel/boards/byt-max98090.c
index d9f81b8d915d..047be7fa0ce9 100644
--- a/sound/soc/intel/boards/byt-max98090.c
+++ b/sound/soc/intel/boards/byt-max98090.c
@@ -67,20 +67,27 @@ static struct snd_soc_jack_pin hs_jack_pins[] = {
67 67
68static struct snd_soc_jack_gpio hs_jack_gpios[] = { 68static struct snd_soc_jack_gpio hs_jack_gpios[] = {
69 { 69 {
70 .name = "hp-gpio", 70 .name = "hp",
71 .idx = 0,
72 .report = SND_JACK_HEADPHONE | SND_JACK_LINEOUT, 71 .report = SND_JACK_HEADPHONE | SND_JACK_LINEOUT,
73 .debounce_time = 200, 72 .debounce_time = 200,
74 }, 73 },
75 { 74 {
76 .name = "mic-gpio", 75 .name = "mic",
77 .idx = 1,
78 .invert = 1, 76 .invert = 1,
79 .report = SND_JACK_MICROPHONE, 77 .report = SND_JACK_MICROPHONE,
80 .debounce_time = 200, 78 .debounce_time = 200,
81 }, 79 },
82}; 80};
83 81
82static const struct acpi_gpio_params hp_gpios = { 0, 0, false };
83static const struct acpi_gpio_params mic_gpios = { 1, 0, false };
84
85static const struct acpi_gpio_mapping acpi_byt_max98090_gpios[] = {
86 { "hp-gpios", &hp_gpios, 1 },
87 { "mic-gpios", &mic_gpios, 1 },
88 {},
89};
90
84static int byt_max98090_init(struct snd_soc_pcm_runtime *runtime) 91static int byt_max98090_init(struct snd_soc_pcm_runtime *runtime)
85{ 92{
86 int ret; 93 int ret;
@@ -140,8 +147,9 @@ static struct snd_soc_card byt_max98090_card = {
140 147
141static int byt_max98090_probe(struct platform_device *pdev) 148static int byt_max98090_probe(struct platform_device *pdev)
142{ 149{
143 int ret_val = 0; 150 struct device *dev = &pdev->dev;
144 struct byt_max98090_private *priv; 151 struct byt_max98090_private *priv;
152 int ret_val;
145 153
146 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_ATOMIC); 154 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_ATOMIC);
147 if (!priv) { 155 if (!priv) {
@@ -149,6 +157,10 @@ static int byt_max98090_probe(struct platform_device *pdev)
149 return -ENOMEM; 157 return -ENOMEM;
150 } 158 }
151 159
160 ret_val = devm_acpi_dev_add_driver_gpios(dev->parent, acpi_byt_max98090_gpios);
161 if (ret_val)
162 dev_dbg(dev, "Unable to add GPIO mapping table\n");
163
152 byt_max98090_card.dev = &pdev->dev; 164 byt_max98090_card.dev = &pdev->dev;
153 snd_soc_card_set_drvdata(&byt_max98090_card, priv); 165 snd_soc_card_set_drvdata(&byt_max98090_card, priv);
154 ret_val = devm_snd_soc_register_card(&pdev->dev, &byt_max98090_card); 166 ret_val = devm_snd_soc_register_card(&pdev->dev, &byt_max98090_card);
@@ -158,7 +170,7 @@ static int byt_max98090_probe(struct platform_device *pdev)
158 return ret_val; 170 return ret_val;
159 } 171 }
160 172
161 return ret_val; 173 return 0;
162} 174}
163 175
164static int byt_max98090_remove(struct platform_device *pdev) 176static int byt_max98090_remove(struct platform_device *pdev)
diff --git a/sound/soc/intel/boards/bytcht_es8316.c b/sound/soc/intel/boards/bytcht_es8316.c
new file mode 100644
index 000000000000..52635462dac6
--- /dev/null
+++ b/sound/soc/intel/boards/bytcht_es8316.c
@@ -0,0 +1,300 @@
1/*
2 * bytcht_es8316.c - ASoc Machine driver for Intel Baytrail/Cherrytrail
3 * platforms with Everest ES8316 SoC
4 *
5 * Copyright (C) 2017 Endless Mobile, Inc.
6 * Authors: David Yang <yangxiaohua@everest-semi.com>,
7 * Daniel Drake <drake@endlessm.com>
8 *
9 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; version 2 of the License.
14 *
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21 */
22#include <linux/init.h>
23#include <linux/module.h>
24#include <linux/platform_device.h>
25#include <linux/device.h>
26#include <linux/slab.h>
27#include <asm/platform_sst_audio.h>
28#include <linux/clk.h>
29#include <sound/pcm.h>
30#include <sound/pcm_params.h>
31#include <sound/soc.h>
32#include "../atom/sst-atom-controls.h"
33#include "../common/sst-acpi.h"
34#include "../common/sst-dsp.h"
35
36struct byt_cht_es8316_private {
37 struct clk *mclk;
38};
39
40#define CODEC_DAI1 "ES8316 HiFi"
41
42static inline struct snd_soc_dai *get_codec_dai(struct snd_soc_card *card)
43{
44 struct snd_soc_pcm_runtime *rtd;
45
46 list_for_each_entry(rtd, &card->rtd_list, list) {
47 if (!strncmp(rtd->codec_dai->name, CODEC_DAI1,
48 strlen(CODEC_DAI1)))
49 return rtd->codec_dai;
50 }
51 return NULL;
52}
53
54static const struct snd_soc_dapm_widget byt_cht_es8316_widgets[] = {
55 SND_SOC_DAPM_HP("Headphone", NULL),
56
57 /*
58 * The codec supports two analog microphone inputs. I have only
59 * tested MIC1. A DMIC route could also potentially be added
60 * if such functionality is found on another platform.
61 */
62 SND_SOC_DAPM_MIC("Microphone 1", NULL),
63 SND_SOC_DAPM_MIC("Microphone 2", NULL),
64};
65
66static const struct snd_soc_dapm_route byt_cht_es8316_audio_map[] = {
67 {"MIC1", NULL, "Microphone 1"},
68 {"MIC2", NULL, "Microphone 2"},
69
70 {"Headphone", NULL, "HPOL"},
71 {"Headphone", NULL, "HPOR"},
72
73 {"Playback", NULL, "ssp2 Tx"},
74 {"ssp2 Tx", NULL, "codec_out0"},
75 {"ssp2 Tx", NULL, "codec_out1"},
76 {"codec_in0", NULL, "ssp2 Rx" },
77 {"codec_in1", NULL, "ssp2 Rx" },
78 {"ssp2 Rx", NULL, "Capture"},
79};
80
81static const struct snd_kcontrol_new byt_cht_es8316_controls[] = {
82 SOC_DAPM_PIN_SWITCH("Headphone"),
83 SOC_DAPM_PIN_SWITCH("Microphone 1"),
84 SOC_DAPM_PIN_SWITCH("Microphone 2"),
85};
86
87static int byt_cht_es8316_init(struct snd_soc_pcm_runtime *runtime)
88{
89 struct snd_soc_card *card = runtime->card;
90 struct byt_cht_es8316_private *priv = snd_soc_card_get_drvdata(card);
91 int ret;
92
93 card->dapm.idle_bias_off = true;
94
95 /*
96 * The firmware might enable the clock at boot (this information
97 * may or may not be reflected in the enable clock register).
98 * To change the rate we must disable the clock first to cover these
99 * cases. Due to common clock framework restrictions that do not allow
100 * to disable a clock that has not been enabled, we need to enable
101 * the clock first.
102 */
103 ret = clk_prepare_enable(priv->mclk);
104 if (!ret)
105 clk_disable_unprepare(priv->mclk);
106
107 ret = clk_set_rate(priv->mclk, 19200000);
108 if (ret)
109 dev_err(card->dev, "unable to set MCLK rate\n");
110
111 ret = clk_prepare_enable(priv->mclk);
112 if (ret)
113 dev_err(card->dev, "unable to enable MCLK\n");
114
115 ret = snd_soc_dai_set_sysclk(runtime->codec_dai, 0, 19200000,
116 SND_SOC_CLOCK_IN);
117 if (ret < 0) {
118 dev_err(card->dev, "can't set codec clock %d\n", ret);
119 return ret;
120 }
121
122 return 0;
123}
124
125static const struct snd_soc_pcm_stream byt_cht_es8316_dai_params = {
126 .formats = SNDRV_PCM_FMTBIT_S24_LE,
127 .rate_min = 48000,
128 .rate_max = 48000,
129 .channels_min = 2,
130 .channels_max = 2,
131};
132
133static int byt_cht_es8316_codec_fixup(struct snd_soc_pcm_runtime *rtd,
134 struct snd_pcm_hw_params *params)
135{
136 struct snd_interval *rate = hw_param_interval(params,
137 SNDRV_PCM_HW_PARAM_RATE);
138 struct snd_interval *channels = hw_param_interval(params,
139 SNDRV_PCM_HW_PARAM_CHANNELS);
140 int ret;
141
142 /* The DSP will covert the FE rate to 48k, stereo */
143 rate->min = rate->max = 48000;
144 channels->min = channels->max = 2;
145
146 /* set SSP2 to 24-bit */
147 params_set_format(params, SNDRV_PCM_FORMAT_S24_LE);
148
149 /*
150 * Default mode for SSP configuration is TDM 4 slot, override config
151 * with explicit setting to I2S 2ch 24-bit. The word length is set with
152 * dai_set_tdm_slot() since there is no other API exposed
153 */
154 ret = snd_soc_dai_set_fmt(rtd->cpu_dai,
155 SND_SOC_DAIFMT_I2S |
156 SND_SOC_DAIFMT_NB_NF |
157 SND_SOC_DAIFMT_CBS_CFS
158 );
159 if (ret < 0) {
160 dev_err(rtd->dev, "can't set format to I2S, err %d\n", ret);
161 return ret;
162 }
163
164 ret = snd_soc_dai_set_tdm_slot(rtd->cpu_dai, 0x3, 0x3, 2, 24);
165 if (ret < 0) {
166 dev_err(rtd->dev, "can't set I2S config, err %d\n", ret);
167 return ret;
168 }
169
170 return 0;
171}
172
173static int byt_cht_es8316_aif1_startup(struct snd_pcm_substream *substream)
174{
175 return snd_pcm_hw_constraint_single(substream->runtime,
176 SNDRV_PCM_HW_PARAM_RATE, 48000);
177}
178
179static const struct snd_soc_ops byt_cht_es8316_aif1_ops = {
180 .startup = byt_cht_es8316_aif1_startup,
181};
182
183static struct snd_soc_dai_link byt_cht_es8316_dais[] = {
184 [MERR_DPCM_AUDIO] = {
185 .name = "Audio Port",
186 .stream_name = "Audio",
187 .cpu_dai_name = "media-cpu-dai",
188 .codec_dai_name = "snd-soc-dummy-dai",
189 .codec_name = "snd-soc-dummy",
190 .platform_name = "sst-mfld-platform",
191 .nonatomic = true,
192 .dynamic = 1,
193 .dpcm_playback = 1,
194 .dpcm_capture = 1,
195 .ops = &byt_cht_es8316_aif1_ops,
196 },
197
198 [MERR_DPCM_DEEP_BUFFER] = {
199 .name = "Deep-Buffer Audio Port",
200 .stream_name = "Deep-Buffer Audio",
201 .cpu_dai_name = "deepbuffer-cpu-dai",
202 .codec_dai_name = "snd-soc-dummy-dai",
203 .codec_name = "snd-soc-dummy",
204 .platform_name = "sst-mfld-platform",
205 .nonatomic = true,
206 .dynamic = 1,
207 .dpcm_playback = 1,
208 .ops = &byt_cht_es8316_aif1_ops,
209 },
210
211 [MERR_DPCM_COMPR] = {
212 .name = "Compressed Port",
213 .stream_name = "Compress",
214 .cpu_dai_name = "compress-cpu-dai",
215 .codec_dai_name = "snd-soc-dummy-dai",
216 .codec_name = "snd-soc-dummy",
217 .platform_name = "sst-mfld-platform",
218 },
219
220 /* back ends */
221 {
222 /* Only SSP2 has been tested here, so BYT-CR platforms that
223 * require SSP0 will not work.
224 */
225 .name = "SSP2-Codec",
226 .id = 1,
227 .cpu_dai_name = "ssp2-port",
228 .platform_name = "sst-mfld-platform",
229 .no_pcm = 1,
230 .codec_dai_name = "ES8316 HiFi",
231 .codec_name = "i2c-ESSX8316:00",
232 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
233 | SND_SOC_DAIFMT_CBS_CFS,
234 .be_hw_params_fixup = byt_cht_es8316_codec_fixup,
235 .nonatomic = true,
236 .dpcm_playback = 1,
237 .dpcm_capture = 1,
238 .init = byt_cht_es8316_init,
239 },
240};
241
242
243/* SoC card */
244static struct snd_soc_card byt_cht_es8316_card = {
245 .name = "bytcht-es8316",
246 .owner = THIS_MODULE,
247 .dai_link = byt_cht_es8316_dais,
248 .num_links = ARRAY_SIZE(byt_cht_es8316_dais),
249 .dapm_widgets = byt_cht_es8316_widgets,
250 .num_dapm_widgets = ARRAY_SIZE(byt_cht_es8316_widgets),
251 .dapm_routes = byt_cht_es8316_audio_map,
252 .num_dapm_routes = ARRAY_SIZE(byt_cht_es8316_audio_map),
253 .controls = byt_cht_es8316_controls,
254 .num_controls = ARRAY_SIZE(byt_cht_es8316_controls),
255 .fully_routed = true,
256};
257
258static int snd_byt_cht_es8316_mc_probe(struct platform_device *pdev)
259{
260 int ret = 0;
261 struct byt_cht_es8316_private *priv;
262
263 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_ATOMIC);
264 if (!priv)
265 return -ENOMEM;
266
267 /* register the soc card */
268 byt_cht_es8316_card.dev = &pdev->dev;
269 snd_soc_card_set_drvdata(&byt_cht_es8316_card, priv);
270
271 priv->mclk = devm_clk_get(&pdev->dev, "pmc_plt_clk_3");
272 if (IS_ERR(priv->mclk)) {
273 ret = PTR_ERR(priv->mclk);
274 dev_err(&pdev->dev,
275 "Failed to get MCLK from pmc_plt_clk_3: %d\n",
276 ret);
277 return ret;
278 }
279
280 ret = devm_snd_soc_register_card(&pdev->dev, &byt_cht_es8316_card);
281 if (ret) {
282 dev_err(&pdev->dev, "snd_soc_register_card failed %d\n", ret);
283 return ret;
284 }
285 platform_set_drvdata(pdev, &byt_cht_es8316_card);
286 return ret;
287}
288
289static struct platform_driver snd_byt_cht_es8316_mc_driver = {
290 .driver = {
291 .name = "bytcht_es8316",
292 },
293 .probe = snd_byt_cht_es8316_mc_probe,
294};
295
296module_platform_driver(snd_byt_cht_es8316_mc_driver);
297MODULE_DESCRIPTION("ASoC Intel(R) Baytrail/Cherrytrail Machine driver");
298MODULE_AUTHOR("David Yang <yangxiaohua@everest-semi.com>");
299MODULE_LICENSE("GPL v2");
300MODULE_ALIAS("platform:bytcht_es8316");
diff --git a/sound/soc/intel/boards/bytcht_nocodec.c b/sound/soc/intel/boards/bytcht_nocodec.c
index 89853eeaaf9d..1dd9441806fa 100644
--- a/sound/soc/intel/boards/bytcht_nocodec.c
+++ b/sound/soc/intel/boards/bytcht_nocodec.c
@@ -85,11 +85,11 @@ static int codec_fixup(struct snd_soc_pcm_runtime *rtd,
85 return 0; 85 return 0;
86} 86}
87 87
88static unsigned int rates_48000[] = { 88static const unsigned int rates_48000[] = {
89 48000, 89 48000,
90}; 90};
91 91
92static struct snd_pcm_hw_constraint_list constraints_48000 = { 92static const struct snd_pcm_hw_constraint_list constraints_48000 = {
93 .count = ARRAY_SIZE(rates_48000), 93 .count = ARRAY_SIZE(rates_48000),
94 .list = rates_48000, 94 .list = rates_48000,
95}; 95};
diff --git a/sound/soc/intel/boards/bytcr_rt5651.c b/sound/soc/intel/boards/bytcr_rt5651.c
index 8164bec63bf1..4a3516b38c2c 100644
--- a/sound/soc/intel/boards/bytcr_rt5651.c
+++ b/sound/soc/intel/boards/bytcr_rt5651.c
@@ -203,11 +203,11 @@ static int byt_rt5651_codec_fixup(struct snd_soc_pcm_runtime *rtd,
203 return 0; 203 return 0;
204} 204}
205 205
206static unsigned int rates_48000[] = { 206static const unsigned int rates_48000[] = {
207 48000, 207 48000,
208}; 208};
209 209
210static struct snd_pcm_hw_constraint_list constraints_48000 = { 210static const struct snd_pcm_hw_constraint_list constraints_48000 = {
211 .count = ARRAY_SIZE(rates_48000), 211 .count = ARRAY_SIZE(rates_48000),
212 .list = rates_48000, 212 .list = rates_48000,
213}; 213};
diff --git a/sound/soc/intel/boards/cht_bsw_max98090_ti.c b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
index 742bc0d4e681..20755ecc7f9e 100644
--- a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
+++ b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
@@ -39,18 +39,6 @@ struct cht_mc_private {
39 bool ts3a227e_present; 39 bool ts3a227e_present;
40}; 40};
41 41
42static inline struct snd_soc_dai *cht_get_codec_dai(struct snd_soc_card *card)
43{
44 struct snd_soc_pcm_runtime *rtd;
45
46 list_for_each_entry(rtd, &card->rtd_list, list) {
47 if (!strncmp(rtd->codec_dai->name, CHT_CODEC_DAI,
48 strlen(CHT_CODEC_DAI)))
49 return rtd->codec_dai;
50 }
51 return NULL;
52}
53
54static const struct snd_soc_dapm_widget cht_dapm_widgets[] = { 42static const struct snd_soc_dapm_widget cht_dapm_widgets[] = {
55 SND_SOC_DAPM_HP("Headphone", NULL), 43 SND_SOC_DAPM_HP("Headphone", NULL),
56 SND_SOC_DAPM_MIC("Headset Mic", NULL), 44 SND_SOC_DAPM_MIC("Headset Mic", NULL),
diff --git a/sound/soc/intel/boards/cht_bsw_rt5672.c b/sound/soc/intel/boards/cht_bsw_rt5672.c
index e4d46d4360d7..bc2a52de06a3 100644
--- a/sound/soc/intel/boards/cht_bsw_rt5672.c
+++ b/sound/soc/intel/boards/cht_bsw_rt5672.c
@@ -19,6 +19,8 @@
19#include <linux/module.h> 19#include <linux/module.h>
20#include <linux/platform_device.h> 20#include <linux/platform_device.h>
21#include <linux/slab.h> 21#include <linux/slab.h>
22#include <linux/clk.h>
23#include <asm/cpu_device_id.h>
22#include <sound/pcm.h> 24#include <sound/pcm.h>
23#include <sound/pcm_params.h> 25#include <sound/pcm_params.h>
24#include <sound/soc.h> 26#include <sound/soc.h>
@@ -31,8 +33,11 @@
31#define CHT_PLAT_CLK_3_HZ 19200000 33#define CHT_PLAT_CLK_3_HZ 19200000
32#define CHT_CODEC_DAI "rt5670-aif1" 34#define CHT_CODEC_DAI "rt5670-aif1"
33 35
34static struct snd_soc_jack cht_bsw_headset; 36struct cht_mc_private {
35static char cht_bsw_codec_name[16]; 37 struct snd_soc_jack headset;
38 char codec_name[16];
39 struct clk *mclk;
40};
36 41
37/* Headset jack detection DAPM pins */ 42/* Headset jack detection DAPM pins */
38static struct snd_soc_jack_pin cht_bsw_headset_pins[] = { 43static struct snd_soc_jack_pin cht_bsw_headset_pins[] = {
@@ -64,6 +69,7 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
64 struct snd_soc_dapm_context *dapm = w->dapm; 69 struct snd_soc_dapm_context *dapm = w->dapm;
65 struct snd_soc_card *card = dapm->card; 70 struct snd_soc_card *card = dapm->card;
66 struct snd_soc_dai *codec_dai; 71 struct snd_soc_dai *codec_dai;
72 struct cht_mc_private *ctx = snd_soc_card_get_drvdata(card);
67 int ret; 73 int ret;
68 74
69 codec_dai = cht_get_codec_dai(card); 75 codec_dai = cht_get_codec_dai(card);
@@ -73,6 +79,15 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
73 } 79 }
74 80
75 if (SND_SOC_DAPM_EVENT_ON(event)) { 81 if (SND_SOC_DAPM_EVENT_ON(event)) {
82 if (ctx->mclk) {
83 ret = clk_prepare_enable(ctx->mclk);
84 if (ret < 0) {
85 dev_err(card->dev,
86 "could not configure MCLK state");
87 return ret;
88 }
89 }
90
76 /* set codec PLL source to the 19.2MHz platform clock (MCLK) */ 91 /* set codec PLL source to the 19.2MHz platform clock (MCLK) */
77 ret = snd_soc_dai_set_pll(codec_dai, 0, RT5670_PLL1_S_MCLK, 92 ret = snd_soc_dai_set_pll(codec_dai, 0, RT5670_PLL1_S_MCLK,
78 CHT_PLAT_CLK_3_HZ, 48000 * 512); 93 CHT_PLAT_CLK_3_HZ, 48000 * 512);
@@ -96,6 +111,9 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
96 */ 111 */
97 snd_soc_dai_set_sysclk(codec_dai, RT5670_SCLK_S_RCCLK, 112 snd_soc_dai_set_sysclk(codec_dai, RT5670_SCLK_S_RCCLK,
98 48000 * 512, SND_SOC_CLOCK_IN); 113 48000 * 512, SND_SOC_CLOCK_IN);
114
115 if (ctx->mclk)
116 clk_disable_unprepare(ctx->mclk);
99 } 117 }
100 return 0; 118 return 0;
101} 119}
@@ -171,6 +189,7 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
171 int ret; 189 int ret;
172 struct snd_soc_dai *codec_dai = runtime->codec_dai; 190 struct snd_soc_dai *codec_dai = runtime->codec_dai;
173 struct snd_soc_codec *codec = codec_dai->codec; 191 struct snd_soc_codec *codec = codec_dai->codec;
192 struct cht_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card);
174 193
175 /* TDM 4 slots 24 bit, set Rx & Tx bitmask to 4 active slots */ 194 /* TDM 4 slots 24 bit, set Rx & Tx bitmask to 4 active slots */
176 ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xF, 0xF, 4, 24); 195 ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xF, 0xF, 4, 24);
@@ -194,13 +213,37 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
194 RT5670_CLK_SEL_I2S1_ASRC); 213 RT5670_CLK_SEL_I2S1_ASRC);
195 214
196 ret = snd_soc_card_jack_new(runtime->card, "Headset", 215 ret = snd_soc_card_jack_new(runtime->card, "Headset",
197 SND_JACK_HEADSET | SND_JACK_BTN_0 | 216 SND_JACK_HEADSET | SND_JACK_BTN_0 |
198 SND_JACK_BTN_1 | SND_JACK_BTN_2, &cht_bsw_headset, 217 SND_JACK_BTN_1 | SND_JACK_BTN_2,
199 cht_bsw_headset_pins, ARRAY_SIZE(cht_bsw_headset_pins)); 218 &ctx->headset,
219 cht_bsw_headset_pins,
220 ARRAY_SIZE(cht_bsw_headset_pins));
200 if (ret) 221 if (ret)
201 return ret; 222 return ret;
202 223
203 rt5670_set_jack_detect(codec, &cht_bsw_headset); 224 rt5670_set_jack_detect(codec, &ctx->headset);
225 if (ctx->mclk) {
226 /*
227 * The firmware might enable the clock at
228 * boot (this information may or may not
229 * be reflected in the enable clock register).
230 * To change the rate we must disable the clock
231 * first to cover these cases. Due to common
232 * clock framework restrictions that do not allow
233 * to disable a clock that has not been enabled,
234 * we need to enable the clock first.
235 */
236 ret = clk_prepare_enable(ctx->mclk);
237 if (!ret)
238 clk_disable_unprepare(ctx->mclk);
239
240 ret = clk_set_rate(ctx->mclk, CHT_PLAT_CLK_3_HZ);
241
242 if (ret) {
243 dev_err(runtime->dev, "unable to set MCLK rate\n");
244 return ret;
245 }
246 }
204 return 0; 247 return 0;
205} 248}
206 249
@@ -341,34 +384,62 @@ static struct snd_soc_card snd_soc_card_cht = {
341 .resume_post = cht_resume_post, 384 .resume_post = cht_resume_post,
342}; 385};
343 386
387static bool is_valleyview(void)
388{
389 static const struct x86_cpu_id cpu_ids[] = {
390 { X86_VENDOR_INTEL, 6, 55 }, /* Valleyview, Bay Trail */
391 {}
392 };
393
394 if (!x86_match_cpu(cpu_ids))
395 return false;
396 return true;
397}
398
344#define RT5672_I2C_DEFAULT "i2c-10EC5670:00" 399#define RT5672_I2C_DEFAULT "i2c-10EC5670:00"
345 400
346static int snd_cht_mc_probe(struct platform_device *pdev) 401static int snd_cht_mc_probe(struct platform_device *pdev)
347{ 402{
348 int ret_val = 0; 403 int ret_val = 0;
404 struct cht_mc_private *drv;
349 struct sst_acpi_mach *mach = pdev->dev.platform_data; 405 struct sst_acpi_mach *mach = pdev->dev.platform_data;
350 const char *i2c_name; 406 const char *i2c_name;
351 int i; 407 int i;
352 408
353 strcpy(cht_bsw_codec_name, RT5672_I2C_DEFAULT); 409 drv = devm_kzalloc(&pdev->dev, sizeof(*drv), GFP_ATOMIC);
410 if (!drv)
411 return -ENOMEM;
412
413 strcpy(drv->codec_name, RT5672_I2C_DEFAULT);
354 414
355 /* fixup codec name based on HID */ 415 /* fixup codec name based on HID */
356 if (mach) { 416 if (mach) {
357 i2c_name = sst_acpi_find_name_from_hid(mach->id); 417 i2c_name = sst_acpi_find_name_from_hid(mach->id);
358 if (i2c_name) { 418 if (i2c_name) {
359 snprintf(cht_bsw_codec_name, sizeof(cht_bsw_codec_name), 419 snprintf(drv->codec_name, sizeof(drv->codec_name),
360 "i2c-%s", i2c_name); 420 "i2c-%s", i2c_name);
361 for (i = 0; i < ARRAY_SIZE(cht_dailink); i++) { 421 for (i = 0; i < ARRAY_SIZE(cht_dailink); i++) {
362 if (!strcmp(cht_dailink[i].codec_name, 422 if (!strcmp(cht_dailink[i].codec_name,
363 RT5672_I2C_DEFAULT)) { 423 RT5672_I2C_DEFAULT)) {
364 cht_dailink[i].codec_name = 424 cht_dailink[i].codec_name =
365 cht_bsw_codec_name; 425 drv->codec_name;
366 break; 426 break;
367 } 427 }
368 } 428 }
369 } 429 }
370 } 430 }
371 431
432 if (is_valleyview()) {
433 drv->mclk = devm_clk_get(&pdev->dev, "pmc_plt_clk_3");
434 if (IS_ERR(drv->mclk)) {
435 dev_err(&pdev->dev,
436 "Failed to get MCLK from pmc_plt_clk_3: %ld\n",
437 PTR_ERR(drv->mclk));
438 return PTR_ERR(drv->mclk);
439 }
440 }
441 snd_soc_card_set_drvdata(&snd_soc_card_cht, drv);
442
372 /* register the soc card */ 443 /* register the soc card */
373 snd_soc_card_cht.dev = &pdev->dev; 444 snd_soc_card_cht.dev = &pdev->dev;
374 ret_val = devm_snd_soc_register_card(&pdev->dev, &snd_soc_card_cht); 445 ret_val = devm_snd_soc_register_card(&pdev->dev, &snd_soc_card_cht);
diff --git a/sound/soc/intel/boards/kbl_rt5663_max98927.c b/sound/soc/intel/boards/kbl_rt5663_max98927.c
new file mode 100644
index 000000000000..f9ba97788157
--- /dev/null
+++ b/sound/soc/intel/boards/kbl_rt5663_max98927.c
@@ -0,0 +1,687 @@
1/*
2 * Intel Kabylake I2S Machine Driver with MAXIM98927
3 * and RT5663 Codecs
4 *
5 * Copyright (C) 2017, Intel Corporation. All rights reserved.
6 *
7 * Modified from:
8 * Intel Skylake I2S Machine driver
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License version
12 * 2 as published by the Free Software Foundation.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 */
19
20#include <linux/module.h>
21#include <linux/platform_device.h>
22#include <sound/core.h>
23#include <sound/jack.h>
24#include <sound/pcm.h>
25#include <sound/pcm_params.h>
26#include <sound/soc.h>
27#include "../../codecs/rt5663.h"
28#include "../../codecs/hdac_hdmi.h"
29#include "../skylake/skl.h"
30
31#define KBL_REALTEK_CODEC_DAI "rt5663-aif"
32#define KBL_MAXIM_CODEC_DAI "max98927-aif1"
33#define DMIC_CH(p) p->list[p->count-1]
34#define MAXIM_DEV0_NAME "i2c-MX98927:00"
35#define MAXIM_DEV1_NAME "i2c-MX98927:01"
36
37static struct snd_soc_card kabylake_audio_card;
38static const struct snd_pcm_hw_constraint_list *dmic_constraints;
39static struct snd_soc_jack skylake_hdmi[3];
40
41struct kbl_hdmi_pcm {
42 struct list_head head;
43 struct snd_soc_dai *codec_dai;
44 int device;
45};
46
47struct kbl_rt5663_private {
48 struct snd_soc_jack kabylake_headset;
49 struct list_head hdmi_pcm_list;
50};
51
52enum {
53 KBL_DPCM_AUDIO_PB = 0,
54 KBL_DPCM_AUDIO_CP,
55 KBL_DPCM_AUDIO_REF_CP,
56 KBL_DPCM_AUDIO_DMIC_CP,
57 KBL_DPCM_AUDIO_HDMI1_PB,
58 KBL_DPCM_AUDIO_HDMI2_PB,
59 KBL_DPCM_AUDIO_HDMI3_PB,
60};
61
62static const struct snd_kcontrol_new kabylake_controls[] = {
63 SOC_DAPM_PIN_SWITCH("Headphone Jack"),
64 SOC_DAPM_PIN_SWITCH("Headset Mic"),
65 SOC_DAPM_PIN_SWITCH("Left Spk"),
66 SOC_DAPM_PIN_SWITCH("Right Spk"),
67};
68
69static const struct snd_soc_dapm_widget kabylake_widgets[] = {
70 SND_SOC_DAPM_HP("Headphone Jack", NULL),
71 SND_SOC_DAPM_MIC("Headset Mic", NULL),
72 SND_SOC_DAPM_SPK("Left Spk", NULL),
73 SND_SOC_DAPM_SPK("Right Spk", NULL),
74 SND_SOC_DAPM_MIC("SoC DMIC", NULL),
75 SND_SOC_DAPM_SPK("DP", NULL),
76 SND_SOC_DAPM_SPK("HDMI", NULL),
77
78};
79
80static const struct snd_soc_dapm_route kabylake_map[] = {
81 /* HP jack connectors - unknown if we have jack detection */
82 { "Headphone Jack", NULL, "HPOL" },
83 { "Headphone Jack", NULL, "HPOR" },
84
85 /* speaker */
86 { "Left Spk", NULL, "Left BE_OUT" },
87 { "Right Spk", NULL, "Right BE_OUT" },
88
89 /* other jacks */
90 { "IN1P", NULL, "Headset Mic" },
91 { "IN1N", NULL, "Headset Mic" },
92 { "DMic", NULL, "SoC DMIC" },
93
94 { "HDMI", NULL, "hif5 Output" },
95 { "DP", NULL, "hif6 Output" },
96
97 /* CODEC BE connections */
98 { "Left HiFi Playback", NULL, "ssp0 Tx" },
99 { "Right HiFi Playback", NULL, "ssp0 Tx" },
100 { "ssp0 Tx", NULL, "codec0_out" },
101
102 { "AIF Playback", NULL, "ssp1 Tx" },
103 { "ssp1 Tx", NULL, "codec1_out" },
104
105 { "codec0_in", NULL, "ssp1 Rx" },
106 { "ssp1 Rx", NULL, "AIF Capture" },
107
108 /* DMIC */
109 { "dmic01_hifi", NULL, "DMIC01 Rx" },
110 { "DMIC01 Rx", NULL, "DMIC AIF" },
111
112 { "hifi3", NULL, "iDisp3 Tx"},
113 { "iDisp3 Tx", NULL, "iDisp3_out"},
114 { "hifi2", NULL, "iDisp2 Tx"},
115 { "iDisp2 Tx", NULL, "iDisp2_out"},
116 { "hifi1", NULL, "iDisp1 Tx"},
117 { "iDisp1 Tx", NULL, "iDisp1_out"},
118};
119
120static struct snd_soc_codec_conf max98927_codec_conf[] = {
121 {
122 .dev_name = MAXIM_DEV0_NAME,
123 .name_prefix = "Right",
124 },
125 {
126 .dev_name = MAXIM_DEV1_NAME,
127 .name_prefix = "Left",
128 },
129};
130
131static struct snd_soc_dai_link_component max98927_codec_components[] = {
132 { /* Left */
133 .name = MAXIM_DEV0_NAME,
134 .dai_name = KBL_MAXIM_CODEC_DAI,
135 },
136 { /* Right */
137 .name = MAXIM_DEV1_NAME,
138 .dai_name = KBL_MAXIM_CODEC_DAI,
139 },
140};
141
142static int kabylake_rt5663_fe_init(struct snd_soc_pcm_runtime *rtd)
143{
144 int ret;
145 struct snd_soc_dapm_context *dapm;
146 struct snd_soc_component *component = rtd->cpu_dai->component;
147
148 dapm = snd_soc_component_get_dapm(component);
149 ret = snd_soc_dapm_ignore_suspend(dapm, "Reference Capture");
150 if (ret) {
151 dev_err(rtd->dev, "Ref Cap ignore suspend failed %d\n", ret);
152 return ret;
153 }
154
155 return ret;
156}
157
158static int kabylake_rt5663_codec_init(struct snd_soc_pcm_runtime *rtd)
159{
160 int ret;
161 struct kbl_rt5663_private *ctx = snd_soc_card_get_drvdata(rtd->card);
162 struct snd_soc_codec *codec = rtd->codec;
163
164 /*
165 * Headset buttons map to the google Reference headset.
166 * These can be configured by userspace.
167 */
168 ret = snd_soc_card_jack_new(&kabylake_audio_card, "Headset Jack",
169 SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
170 SND_JACK_BTN_2 | SND_JACK_BTN_3, &ctx->kabylake_headset,
171 NULL, 0);
172 if (ret) {
173 dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret);
174 return ret;
175 }
176
177 rt5663_set_jack_detect(codec, &ctx->kabylake_headset);
178 ret = snd_soc_dapm_ignore_suspend(&rtd->card->dapm, "SoC DMIC");
179 if (ret) {
180 dev_err(rtd->dev, "SoC DMIC ignore suspend failed %d\n", ret);
181 return ret;
182 }
183
184 return ret;
185}
186
187static int kabylake_hdmi1_init(struct snd_soc_pcm_runtime *rtd)
188{
189 struct kbl_rt5663_private *ctx = snd_soc_card_get_drvdata(rtd->card);
190 struct snd_soc_dai *dai = rtd->codec_dai;
191 struct kbl_hdmi_pcm *pcm;
192
193 pcm = devm_kzalloc(rtd->card->dev, sizeof(*pcm), GFP_KERNEL);
194 if (!pcm)
195 return -ENOMEM;
196
197 pcm->device = KBL_DPCM_AUDIO_HDMI1_PB;
198 pcm->codec_dai = dai;
199
200 list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);
201
202 return 0;
203}
204
205static int kabylake_hdmi2_init(struct snd_soc_pcm_runtime *rtd)
206{
207 struct kbl_rt5663_private *ctx = snd_soc_card_get_drvdata(rtd->card);
208 struct snd_soc_dai *dai = rtd->codec_dai;
209 struct kbl_hdmi_pcm *pcm;
210
211 pcm = devm_kzalloc(rtd->card->dev, sizeof(*pcm), GFP_KERNEL);
212 if (!pcm)
213 return -ENOMEM;
214
215 pcm->device = KBL_DPCM_AUDIO_HDMI2_PB;
216 pcm->codec_dai = dai;
217
218 list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);
219
220 return 0;
221}
222
223static int kabylake_hdmi3_init(struct snd_soc_pcm_runtime *rtd)
224{
225 struct kbl_rt5663_private *ctx = snd_soc_card_get_drvdata(rtd->card);
226 struct snd_soc_dai *dai = rtd->codec_dai;
227 struct kbl_hdmi_pcm *pcm;
228
229 pcm = devm_kzalloc(rtd->card->dev, sizeof(*pcm), GFP_KERNEL);
230 if (!pcm)
231 return -ENOMEM;
232
233 pcm->device = KBL_DPCM_AUDIO_HDMI3_PB;
234 pcm->codec_dai = dai;
235
236 list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);
237
238 return 0;
239}
240
241static unsigned int rates[] = {
242 48000,
243};
244
245static struct snd_pcm_hw_constraint_list constraints_rates = {
246 .count = ARRAY_SIZE(rates),
247 .list = rates,
248 .mask = 0,
249};
250
251static unsigned int channels[] = {
252 2,
253};
254
255static struct snd_pcm_hw_constraint_list constraints_channels = {
256 .count = ARRAY_SIZE(channels),
257 .list = channels,
258 .mask = 0,
259};
260
261static int kbl_fe_startup(struct snd_pcm_substream *substream)
262{
263 struct snd_pcm_runtime *runtime = substream->runtime;
264
265 /*
266 * On this platform for PCM device we support,
267 * 48Khz
268 * stereo
269 * 16 bit audio
270 */
271
272 runtime->hw.channels_max = 2;
273 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
274 &constraints_channels);
275
276 runtime->hw.formats = SNDRV_PCM_FMTBIT_S16_LE;
277 snd_pcm_hw_constraint_msbits(runtime, 0, 16, 16);
278
279 snd_pcm_hw_constraint_list(runtime, 0,
280 SNDRV_PCM_HW_PARAM_RATE, &constraints_rates);
281
282 return 0;
283}
284
285static const struct snd_soc_ops kabylake_rt5663_fe_ops = {
286 .startup = kbl_fe_startup,
287};
288
289static int kabylake_ssp_fixup(struct snd_soc_pcm_runtime *rtd,
290 struct snd_pcm_hw_params *params)
291{
292 struct snd_interval *rate = hw_param_interval(params,
293 SNDRV_PCM_HW_PARAM_RATE);
294 struct snd_interval *channels = hw_param_interval(params,
295 SNDRV_PCM_HW_PARAM_CHANNELS);
296 struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
297
298 /* The ADSP will convert the FE rate to 48k, stereo */
299 rate->min = rate->max = 48000;
300 channels->min = channels->max = 2;
301 /* set SSP1 to 24 bit */
302 snd_mask_none(fmt);
303 snd_mask_set(fmt, SNDRV_PCM_FORMAT_S24_LE);
304
305 return 0;
306}
307
308static int kabylake_rt5663_hw_params(struct snd_pcm_substream *substream,
309 struct snd_pcm_hw_params *params)
310{
311 struct snd_soc_pcm_runtime *rtd = substream->private_data;
312 struct snd_soc_dai *codec_dai = rtd->codec_dai;
313 int ret;
314
315 ret = snd_soc_dai_set_sysclk(codec_dai,
316 RT5663_SCLK_S_MCLK, 24576000, SND_SOC_CLOCK_IN);
317 /* use ASRC for internal clocks, as PLL rate isn't multiple of BCLK */
318 rt5663_sel_asrc_clk_src(codec_dai->codec, RT5663_DA_STEREO_FILTER, 1);
319
320 if (ret < 0)
321 dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret);
322
323 return ret;
324}
325
326static struct snd_soc_ops kabylake_rt5663_ops = {
327 .hw_params = kabylake_rt5663_hw_params,
328};
329
330static int kabylake_dmic_fixup(struct snd_soc_pcm_runtime *rtd,
331 struct snd_pcm_hw_params *params)
332{
333 struct snd_interval *channels = hw_param_interval(params,
334 SNDRV_PCM_HW_PARAM_CHANNELS);
335
336 if (params_channels(params) == 2 || DMIC_CH(dmic_constraints) == 2)
337 channels->min = channels->max = 2;
338 else
339 channels->min = channels->max = 4;
340
341 return 0;
342}
343
344static unsigned int channels_dmic[] = {
345 2, 4,
346};
347
348static struct snd_pcm_hw_constraint_list constraints_dmic_channels = {
349 .count = ARRAY_SIZE(channels_dmic),
350 .list = channels_dmic,
351 .mask = 0,
352};
353
354static const unsigned int dmic_2ch[] = {
355 2,
356};
357
358static const struct snd_pcm_hw_constraint_list constraints_dmic_2ch = {
359 .count = ARRAY_SIZE(dmic_2ch),
360 .list = dmic_2ch,
361 .mask = 0,
362};
363
364static int kabylake_dmic_startup(struct snd_pcm_substream *substream)
365{
366 struct snd_pcm_runtime *runtime = substream->runtime;
367
368 runtime->hw.channels_max = DMIC_CH(dmic_constraints);
369 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
370 dmic_constraints);
371
372 return snd_pcm_hw_constraint_list(substream->runtime, 0,
373 SNDRV_PCM_HW_PARAM_RATE, &constraints_rates);
374}
375
376static struct snd_soc_ops kabylake_dmic_ops = {
377 .startup = kabylake_dmic_startup,
378};
379
380static unsigned int rates_16000[] = {
381 16000,
382};
383
384static struct snd_pcm_hw_constraint_list constraints_16000 = {
385 .count = ARRAY_SIZE(rates_16000),
386 .list = rates_16000,
387};
388
389static const unsigned int ch_mono[] = {
390 1,
391};
392
393static const struct snd_pcm_hw_constraint_list constraints_refcap = {
394 .count = ARRAY_SIZE(ch_mono),
395 .list = ch_mono,
396};
397
398static int kabylake_refcap_startup(struct snd_pcm_substream *substream)
399{
400 substream->runtime->hw.channels_max = 1;
401 snd_pcm_hw_constraint_list(substream->runtime, 0,
402 SNDRV_PCM_HW_PARAM_CHANNELS,
403 &constraints_refcap);
404
405 return snd_pcm_hw_constraint_list(substream->runtime, 0,
406 SNDRV_PCM_HW_PARAM_RATE,
407 &constraints_16000);
408}
409
410static struct snd_soc_ops skylaye_refcap_ops = {
411 .startup = kabylake_refcap_startup,
412};
413
414/* kabylake digital audio interface glue - connects codec <--> CPU */
415static struct snd_soc_dai_link kabylake_dais[] = {
416 /* Front End DAI links */
417 [KBL_DPCM_AUDIO_PB] = {
418 .name = "Kbl Audio Port",
419 .stream_name = "Audio",
420 .cpu_dai_name = "System Pin",
421 .platform_name = "0000:00:1f.3",
422 .dynamic = 1,
423 .codec_name = "snd-soc-dummy",
424 .codec_dai_name = "snd-soc-dummy-dai",
425 .nonatomic = 1,
426 .init = kabylake_rt5663_fe_init,
427 .trigger = {
428 SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
429 .dpcm_playback = 1,
430 .ops = &kabylake_rt5663_fe_ops,
431 },
432 [KBL_DPCM_AUDIO_CP] = {
433 .name = "Kbl Audio Capture Port",
434 .stream_name = "Audio Record",
435 .cpu_dai_name = "System Pin",
436 .platform_name = "0000:00:1f.3",
437 .dynamic = 1,
438 .codec_name = "snd-soc-dummy",
439 .codec_dai_name = "snd-soc-dummy-dai",
440 .nonatomic = 1,
441 .trigger = {
442 SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
443 .dpcm_capture = 1,
444 .ops = &kabylake_rt5663_fe_ops,
445 },
446 [KBL_DPCM_AUDIO_REF_CP] = {
447 .name = "Kbl Audio Reference cap",
448 .stream_name = "Wake on Voice",
449 .cpu_dai_name = "Reference Pin",
450 .codec_name = "snd-soc-dummy",
451 .codec_dai_name = "snd-soc-dummy-dai",
452 .platform_name = "0000:00:1f.3",
453 .init = NULL,
454 .dpcm_capture = 1,
455 .nonatomic = 1,
456 .dynamic = 1,
457 .ops = &skylaye_refcap_ops,
458 },
459 [KBL_DPCM_AUDIO_DMIC_CP] = {
460 .name = "Kbl Audio DMIC cap",
461 .stream_name = "dmiccap",
462 .cpu_dai_name = "DMIC Pin",
463 .codec_name = "snd-soc-dummy",
464 .codec_dai_name = "snd-soc-dummy-dai",
465 .platform_name = "0000:00:1f.3",
466 .init = NULL,
467 .dpcm_capture = 1,
468 .nonatomic = 1,
469 .dynamic = 1,
470 .ops = &kabylake_dmic_ops,
471 },
472 [KBL_DPCM_AUDIO_HDMI1_PB] = {
473 .name = "Kbl HDMI Port1",
474 .stream_name = "Hdmi1",
475 .cpu_dai_name = "HDMI1 Pin",
476 .codec_name = "snd-soc-dummy",
477 .codec_dai_name = "snd-soc-dummy-dai",
478 .platform_name = "0000:00:1f.3",
479 .dpcm_playback = 1,
480 .init = NULL,
481 .trigger = {
482 SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
483 .nonatomic = 1,
484 .dynamic = 1,
485 },
486 [KBL_DPCM_AUDIO_HDMI2_PB] = {
487 .name = "Kbl HDMI Port2",
488 .stream_name = "Hdmi2",
489 .cpu_dai_name = "HDMI2 Pin",
490 .codec_name = "snd-soc-dummy",
491 .codec_dai_name = "snd-soc-dummy-dai",
492 .platform_name = "0000:00:1f.3",
493 .dpcm_playback = 1,
494 .init = NULL,
495 .trigger = {
496 SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
497 .nonatomic = 1,
498 .dynamic = 1,
499 },
500 [KBL_DPCM_AUDIO_HDMI3_PB] = {
501 .name = "Kbl HDMI Port3",
502 .stream_name = "Hdmi3",
503 .cpu_dai_name = "HDMI3 Pin",
504 .codec_name = "snd-soc-dummy",
505 .codec_dai_name = "snd-soc-dummy-dai",
506 .platform_name = "0000:00:1f.3",
507 .trigger = {
508 SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
509 .dpcm_playback = 1,
510 .init = NULL,
511 .nonatomic = 1,
512 .dynamic = 1,
513 },
514
515 /* Back End DAI links */
516 {
517 /* SSP0 - Codec */
518 .name = "SSP0-Codec",
519 .id = 0,
520 .cpu_dai_name = "SSP0 Pin",
521 .platform_name = "0000:00:1f.3",
522 .no_pcm = 1,
523 .codecs = max98927_codec_components,
524 .num_codecs = ARRAY_SIZE(max98927_codec_components),
525 .dai_fmt = SND_SOC_DAIFMT_I2S |
526 SND_SOC_DAIFMT_NB_NF |
527 SND_SOC_DAIFMT_CBS_CFS,
528 .ignore_pmdown_time = 1,
529 .be_hw_params_fixup = kabylake_ssp_fixup,
530 .dpcm_playback = 1,
531 },
532 {
533 /* SSP1 - Codec */
534 .name = "SSP1-Codec",
535 .id = 1,
536 .cpu_dai_name = "SSP1 Pin",
537 .platform_name = "0000:00:1f.3",
538 .no_pcm = 1,
539 .codec_name = "i2c-10EC5663:00",
540 .codec_dai_name = KBL_REALTEK_CODEC_DAI,
541 .init = kabylake_rt5663_codec_init,
542 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
543 SND_SOC_DAIFMT_CBS_CFS,
544 .ignore_pmdown_time = 1,
545 .be_hw_params_fixup = kabylake_ssp_fixup,
546 .ops = &kabylake_rt5663_ops,
547 .dpcm_playback = 1,
548 .dpcm_capture = 1,
549 },
550 {
551 .name = "dmic01",
552 .id = 2,
553 .cpu_dai_name = "DMIC01 Pin",
554 .codec_name = "dmic-codec",
555 .codec_dai_name = "dmic-hifi",
556 .platform_name = "0000:00:1f.3",
557 .be_hw_params_fixup = kabylake_dmic_fixup,
558 .ignore_suspend = 1,
559 .dpcm_capture = 1,
560 .no_pcm = 1,
561 },
562 {
563 .name = "iDisp1",
564 .id = 3,
565 .cpu_dai_name = "iDisp1 Pin",
566 .codec_name = "ehdaudio0D2",
567 .codec_dai_name = "intel-hdmi-hifi1",
568 .platform_name = "0000:00:1f.3",
569 .dpcm_playback = 1,
570 .init = kabylake_hdmi1_init,
571 .no_pcm = 1,
572 },
573 {
574 .name = "iDisp2",
575 .id = 4,
576 .cpu_dai_name = "iDisp2 Pin",
577 .codec_name = "ehdaudio0D2",
578 .codec_dai_name = "intel-hdmi-hifi2",
579 .platform_name = "0000:00:1f.3",
580 .init = kabylake_hdmi2_init,
581 .dpcm_playback = 1,
582 .no_pcm = 1,
583 },
584 {
585 .name = "iDisp3",
586 .id = 5,
587 .cpu_dai_name = "iDisp3 Pin",
588 .codec_name = "ehdaudio0D2",
589 .codec_dai_name = "intel-hdmi-hifi3",
590 .platform_name = "0000:00:1f.3",
591 .init = kabylake_hdmi3_init,
592 .dpcm_playback = 1,
593 .no_pcm = 1,
594 },
595};
596
597#define NAME_SIZE 32
598static int kabylake_card_late_probe(struct snd_soc_card *card)
599{
600 struct kbl_rt5663_private *ctx = snd_soc_card_get_drvdata(card);
601 struct kbl_hdmi_pcm *pcm;
602 int err, i = 0;
603 char jack_name[NAME_SIZE];
604
605 list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
606 snprintf(jack_name, sizeof(jack_name),
607 "HDMI/DP, pcm=%d Jack", pcm->device);
608 err = snd_soc_card_jack_new(card, jack_name,
609 SND_JACK_AVOUT, &skylake_hdmi[i],
610 NULL, 0);
611
612 if (err)
613 return err;
614
615 err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device,
616 &skylake_hdmi[i]);
617 if (err < 0)
618 return err;
619
620 i++;
621 }
622
623 return 0;
624}
625
626/* kabylake audio machine driver for SPT + RT5663 */
627static struct snd_soc_card kabylake_audio_card = {
628 .name = "kblrt5663max",
629 .owner = THIS_MODULE,
630 .dai_link = kabylake_dais,
631 .num_links = ARRAY_SIZE(kabylake_dais),
632 .controls = kabylake_controls,
633 .num_controls = ARRAY_SIZE(kabylake_controls),
634 .dapm_widgets = kabylake_widgets,
635 .num_dapm_widgets = ARRAY_SIZE(kabylake_widgets),
636 .dapm_routes = kabylake_map,
637 .num_dapm_routes = ARRAY_SIZE(kabylake_map),
638 .codec_conf = max98927_codec_conf,
639 .num_configs = ARRAY_SIZE(max98927_codec_conf),
640 .fully_routed = true,
641 .late_probe = kabylake_card_late_probe,
642};
643
644static int kabylake_audio_probe(struct platform_device *pdev)
645{
646 struct kbl_rt5663_private *ctx;
647 struct skl_machine_pdata *pdata;
648
649 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_ATOMIC);
650 if (!ctx)
651 return -ENOMEM;
652
653 INIT_LIST_HEAD(&ctx->hdmi_pcm_list);
654
655 kabylake_audio_card.dev = &pdev->dev;
656 snd_soc_card_set_drvdata(&kabylake_audio_card, ctx);
657
658 pdata = dev_get_drvdata(&pdev->dev);
659 if (pdata)
660 dmic_constraints = pdata->dmic_num == 2 ?
661 &constraints_dmic_2ch : &constraints_dmic_channels;
662
663 return devm_snd_soc_register_card(&pdev->dev, &kabylake_audio_card);
664}
665
666static const struct platform_device_id kbl_board_ids[] = {
667 { .name = "kbl_rt5663_m98927" },
668 { }
669};
670
671static struct platform_driver kabylake_audio = {
672 .probe = kabylake_audio_probe,
673 .driver = {
674 .name = "kbl_rt5663_m98927",
675 .pm = &snd_soc_pm_ops,
676 },
677 .id_table = kbl_board_ids,
678};
679
680module_platform_driver(kabylake_audio)
681
682/* Module information */
683MODULE_DESCRIPTION("Audio Machine driver-RT5663 & MAX98927 in I2S mode");
684MODULE_AUTHOR("Naveen M <naveen.m@intel.com>");
685MODULE_AUTHOR("Harsha Priya <harshapriya.n@intel.com>");
686MODULE_LICENSE("GPL v2");
687MODULE_ALIAS("platform:kbl_rt5663_m98927");
diff --git a/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c b/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c
new file mode 100644
index 000000000000..3fe4a0807095
--- /dev/null
+++ b/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c
@@ -0,0 +1,640 @@
1/*
2 * Intel Kabylake I2S Machine Driver with MAXIM98927
3 * RT5514 and RT5663 Codecs
4 *
5 * Copyright (C) 2017, Intel Corporation. All rights reserved.
6 *
7 * Modified from:
8 * Intel Kabylake I2S Machine driver supporting MAXIM98927 and
9 * RT5663 codecs
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License version
13 * 2 as published by the Free Software Foundation.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 */
20
21#include <linux/module.h>
22#include <linux/platform_device.h>
23#include <sound/core.h>
24#include <sound/jack.h>
25#include <sound/pcm.h>
26#include <sound/pcm_params.h>
27#include <sound/soc.h>
28#include "../../codecs/rt5514.h"
29#include "../../codecs/rt5663.h"
30#include "../../codecs/hdac_hdmi.h"
31#include "../skylake/skl.h"
32
33#define KBL_REALTEK_CODEC_DAI "rt5663-aif"
34#define KBL_REALTEK_DMIC_CODEC_DAI "rt5514-aif1"
35#define KBL_MAXIM_CODEC_DAI "max98927-aif1"
36#define MAXIM_DEV0_NAME "i2c-MX98927:00"
37#define MAXIM_DEV1_NAME "i2c-MX98927:01"
38#define RT5514_DEV_NAME "i2c-10EC5514:00"
39#define RT5663_DEV_NAME "i2c-10EC5663:00"
40#define RT5514_AIF1_BCLK_FREQ (48000 * 8 * 16)
41#define RT5514_AIF1_SYSCLK_FREQ 12288000
42#define NAME_SIZE 32
43
44#define DMIC_CH(p) p->list[p->count-1]
45
46
47static struct snd_soc_card kabylake_audio_card;
48static const struct snd_pcm_hw_constraint_list *dmic_constraints;
49
50struct kbl_hdmi_pcm {
51 struct list_head head;
52 struct snd_soc_dai *codec_dai;
53 int device;
54};
55
56struct kbl_codec_private {
57 struct snd_soc_jack kabylake_headset;
58 struct list_head hdmi_pcm_list;
59 struct snd_soc_jack kabylake_hdmi[2];
60};
61
62enum {
63 KBL_DPCM_AUDIO_PB = 0,
64 KBL_DPCM_AUDIO_CP,
65 KBL_DPCM_AUDIO_DMIC_CP,
66 KBL_DPCM_AUDIO_HDMI1_PB,
67 KBL_DPCM_AUDIO_HDMI2_PB,
68};
69
70static const struct snd_kcontrol_new kabylake_controls[] = {
71 SOC_DAPM_PIN_SWITCH("Headphone Jack"),
72 SOC_DAPM_PIN_SWITCH("Headset Mic"),
73 SOC_DAPM_PIN_SWITCH("Left Spk"),
74 SOC_DAPM_PIN_SWITCH("Right Spk"),
75 SOC_DAPM_PIN_SWITCH("DMIC"),
76};
77
78static const struct snd_soc_dapm_widget kabylake_widgets[] = {
79 SND_SOC_DAPM_HP("Headphone Jack", NULL),
80 SND_SOC_DAPM_MIC("Headset Mic", NULL),
81 SND_SOC_DAPM_SPK("Left Spk", NULL),
82 SND_SOC_DAPM_SPK("Right Spk", NULL),
83 SND_SOC_DAPM_MIC("DMIC", NULL),
84 SND_SOC_DAPM_SPK("DP", NULL),
85 SND_SOC_DAPM_SPK("HDMI", NULL),
86
87};
88
89static const struct snd_soc_dapm_route kabylake_map[] = {
90 /* Headphones */
91 { "Headphone Jack", NULL, "HPOL" },
92 { "Headphone Jack", NULL, "HPOR" },
93
94 /* speaker */
95 { "Left Spk", NULL, "Left BE_OUT" },
96 { "Right Spk", NULL, "Right BE_OUT" },
97
98 /* other jacks */
99 { "IN1P", NULL, "Headset Mic" },
100 { "IN1N", NULL, "Headset Mic" },
101
102 { "HDMI", NULL, "hif5 Output" },
103 { "DP", NULL, "hif6 Output" },
104
105 /* CODEC BE connections */
106 { "Left HiFi Playback", NULL, "ssp0 Tx" },
107 { "Right HiFi Playback", NULL, "ssp0 Tx" },
108 { "ssp0 Tx", NULL, "codec0_out" },
109
110 { "AIF Playback", NULL, "ssp1 Tx" },
111 { "ssp1 Tx", NULL, "codec1_out" },
112
113 { "codec0_in", NULL, "ssp1 Rx" },
114 { "ssp1 Rx", NULL, "AIF Capture" },
115
116 { "codec1_in", NULL, "ssp0 Rx" },
117 { "ssp0 Rx", NULL, "AIF1 Capture" },
118
119 /* DMIC */
120 { "DMIC1L", NULL, "DMIC" },
121 { "DMIC1R", NULL, "DMIC" },
122 { "DMIC2L", NULL, "DMIC" },
123 { "DMIC2R", NULL, "DMIC" },
124
125 { "hifi2", NULL, "iDisp2 Tx" },
126 { "iDisp2 Tx", NULL, "iDisp2_out" },
127 { "hifi1", NULL, "iDisp1 Tx" },
128 { "iDisp1 Tx", NULL, "iDisp1_out" },
129};
130
131static struct snd_soc_codec_conf max98927_codec_conf[] = {
132 {
133 .dev_name = MAXIM_DEV0_NAME,
134 .name_prefix = "Right",
135 },
136 {
137 .dev_name = MAXIM_DEV1_NAME,
138 .name_prefix = "Left",
139 },
140};
141
142static struct snd_soc_dai_link_component ssp0_codec_components[] = {
143 { /* Left */
144 .name = MAXIM_DEV0_NAME,
145 .dai_name = KBL_MAXIM_CODEC_DAI,
146 },
147 { /* Right */
148 .name = MAXIM_DEV1_NAME,
149 .dai_name = KBL_MAXIM_CODEC_DAI,
150 },
151 { /*dmic */
152 .name = RT5514_DEV_NAME,
153 .dai_name = KBL_REALTEK_DMIC_CODEC_DAI,
154 },
155};
156
157static int kabylake_rt5663_fe_init(struct snd_soc_pcm_runtime *rtd)
158{
159 struct snd_soc_dapm_context *dapm;
160 struct snd_soc_component *component = rtd->cpu_dai->component;
161 int ret;
162
163 dapm = snd_soc_component_get_dapm(component);
164 ret = snd_soc_dapm_ignore_suspend(dapm, "Reference Capture");
165 if (ret)
166 dev_err(rtd->dev, "Ref Cap -Ignore suspend failed = %d\n", ret);
167
168 return ret;
169}
170
171static int kabylake_rt5663_codec_init(struct snd_soc_pcm_runtime *rtd)
172{
173 int ret;
174 struct kbl_codec_private *ctx = snd_soc_card_get_drvdata(rtd->card);
175 struct snd_soc_codec *codec = rtd->codec;
176
177 /*
178 * Headset buttons map to the google Reference headset.
179 * These can be configured by userspace.
180 */
181 ret = snd_soc_card_jack_new(&kabylake_audio_card, "Headset Jack",
182 SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
183 SND_JACK_BTN_2 | SND_JACK_BTN_3, &ctx->kabylake_headset,
184 NULL, 0);
185 if (ret) {
186 dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret);
187 return ret;
188 }
189
190 rt5663_set_jack_detect(codec, &ctx->kabylake_headset);
191
192 ret = snd_soc_dapm_ignore_suspend(&rtd->card->dapm, "DMIC");
193 if (ret)
194 dev_err(rtd->dev, "DMIC - Ignore suspend failed = %d\n", ret);
195
196 return ret;
197}
198
199static int kabylake_hdmi_init(struct snd_soc_pcm_runtime *rtd, int device)
200{
201 struct kbl_codec_private *ctx = snd_soc_card_get_drvdata(rtd->card);
202 struct snd_soc_dai *dai = rtd->codec_dai;
203 struct kbl_hdmi_pcm *pcm;
204
205 pcm = devm_kzalloc(rtd->card->dev, sizeof(*pcm), GFP_KERNEL);
206 if (!pcm)
207 return -ENOMEM;
208
209 pcm->device = device;
210 pcm->codec_dai = dai;
211
212 list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);
213
214 return 0;
215}
216
217static int kabylake_hdmi1_init(struct snd_soc_pcm_runtime *rtd)
218{
219 return kabylake_hdmi_init(rtd, KBL_DPCM_AUDIO_HDMI1_PB);
220}
221
222static int kabylake_hdmi2_init(struct snd_soc_pcm_runtime *rtd)
223{
224 return kabylake_hdmi_init(rtd, KBL_DPCM_AUDIO_HDMI2_PB);
225}
226
227static const unsigned int rates[] = {
228 48000,
229};
230
231static const struct snd_pcm_hw_constraint_list constraints_rates = {
232 .count = ARRAY_SIZE(rates),
233 .list = rates,
234 .mask = 0,
235};
236
237static const unsigned int channels[] = {
238 2,
239};
240
241static const struct snd_pcm_hw_constraint_list constraints_channels = {
242 .count = ARRAY_SIZE(channels),
243 .list = channels,
244 .mask = 0,
245};
246
247static int kbl_fe_startup(struct snd_pcm_substream *substream)
248{
249 struct snd_pcm_runtime *runtime = substream->runtime;
250
251 /*
252 * On this platform for PCM device we support,
253 * 48Khz
254 * stereo
255 * 16 bit audio
256 */
257
258 runtime->hw.channels_max = 2;
259 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
260 &constraints_channels);
261
262 runtime->hw.formats = SNDRV_PCM_FMTBIT_S16_LE;
263 snd_pcm_hw_constraint_msbits(runtime, 0, 16, 16);
264
265 snd_pcm_hw_constraint_list(runtime, 0,
266 SNDRV_PCM_HW_PARAM_RATE, &constraints_rates);
267
268 return 0;
269}
270
271static const struct snd_soc_ops kabylake_rt5663_fe_ops = {
272 .startup = kbl_fe_startup,
273};
274
275static int kabylake_ssp_fixup(struct snd_soc_pcm_runtime *rtd,
276 struct snd_pcm_hw_params *params)
277{
278 struct snd_interval *rate = hw_param_interval(params,
279 SNDRV_PCM_HW_PARAM_RATE);
280 struct snd_interval *channels = hw_param_interval(params,
281 SNDRV_PCM_HW_PARAM_CHANNELS);
282 struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
283 struct snd_soc_dpcm *dpcm = container_of(
284 params, struct snd_soc_dpcm, hw_params);
285 struct snd_soc_dai_link *fe_dai_link = dpcm->fe->dai_link;
286 struct snd_soc_dai_link *be_dai_link = dpcm->be->dai_link;
287
288 /*
289 * The ADSP will convert the FE rate to 48k, stereo, 24 bit
290 */
291 if (!strcmp(fe_dai_link->name, "Kbl Audio Port") ||
292 !strcmp(fe_dai_link->name, "Kbl Audio Capture Port")) {
293 rate->min = rate->max = 48000;
294 channels->min = channels->max = 2;
295 snd_mask_none(fmt);
296 snd_mask_set(fmt, SNDRV_PCM_FORMAT_S24_LE);
297 } else if (!strcmp(fe_dai_link->name, "Kbl Audio DMIC cap")) {
298 if (params_channels(params) == 2 ||
299 DMIC_CH(dmic_constraints) == 2)
300 channels->min = channels->max = 2;
301 else
302 channels->min = channels->max = 4;
303 }
304 /*
305 * The speaker on the SSP0 supports S16_LE and not S24_LE.
306 * thus changing the mask here
307 */
308 if (!strcmp(be_dai_link->name, "SSP0-Codec"))
309 snd_mask_set(fmt, SNDRV_PCM_FORMAT_S16_LE);
310
311 return 0;
312}
313
314static int kabylake_rt5663_hw_params(struct snd_pcm_substream *substream,
315 struct snd_pcm_hw_params *params)
316{
317 struct snd_soc_pcm_runtime *rtd = substream->private_data;
318 struct snd_soc_dai *codec_dai = rtd->codec_dai;
319 int ret;
320
321 /* use ASRC for internal clocks, as PLL rate isn't multiple of BCLK */
322 rt5663_sel_asrc_clk_src(codec_dai->codec, RT5663_DA_STEREO_FILTER, 1);
323
324 ret = snd_soc_dai_set_sysclk(codec_dai,
325 RT5663_SCLK_S_MCLK, 24576000, SND_SOC_CLOCK_IN);
326 if (ret < 0)
327 dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret);
328
329 return ret;
330}
331
332static struct snd_soc_ops kabylake_rt5663_ops = {
333 .hw_params = kabylake_rt5663_hw_params,
334};
335
336static int kabylake_ssp0_hw_params(struct snd_pcm_substream *substream,
337 struct snd_pcm_hw_params *params)
338{
339 struct snd_soc_pcm_runtime *rtd = substream->private_data;
340 int ret = 0, j;
341
342 for (j = 0; j < rtd->num_codecs; j++) {
343 struct snd_soc_dai *codec_dai = rtd->codec_dais[j];
344
345 if (!strcmp(codec_dai->component->name, RT5514_DEV_NAME)) {
346 ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xF, 0, 8, 16);
347 if (ret < 0) {
348 dev_err(rtd->dev, "set TDM slot err:%d\n", ret);
349 return ret;
350 }
351
352 ret = snd_soc_dai_set_pll(codec_dai, 0,
353 RT5514_PLL1_S_BCLK, RT5514_AIF1_BCLK_FREQ,
354 RT5514_AIF1_SYSCLK_FREQ);
355 if (ret < 0) {
356 dev_err(rtd->dev, "set bclk err: %d\n", ret);
357 return ret;
358 }
359
360 ret = snd_soc_dai_set_sysclk(codec_dai,
361 RT5514_SCLK_S_PLL1, RT5514_AIF1_SYSCLK_FREQ,
362 SND_SOC_CLOCK_IN);
363 if (ret < 0) {
364 dev_err(rtd->dev, "set sclk err: %d\n", ret);
365 return ret;
366 }
367 }
368 if (!strcmp(codec_dai->component->name, MAXIM_DEV0_NAME) ||
369 !strcmp(codec_dai->component->name, MAXIM_DEV1_NAME)) {
370 ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xF0, 3, 8, 16);
371 if (ret < 0) {
372 dev_err(rtd->dev, "set TDM slot err:%d\n", ret);
373 return ret;
374 }
375 }
376 }
377 return ret;
378}
379
380static struct snd_soc_ops kabylake_ssp0_ops = {
381 .hw_params = kabylake_ssp0_hw_params,
382};
383
384static const unsigned int channels_dmic[] = {
385 4,
386};
387
388static const struct snd_pcm_hw_constraint_list constraints_dmic_channels = {
389 .count = ARRAY_SIZE(channels_dmic),
390 .list = channels_dmic,
391 .mask = 0,
392};
393
394static const unsigned int dmic_2ch[] = {
395 4,
396};
397
398static const struct snd_pcm_hw_constraint_list constraints_dmic_2ch = {
399 .count = ARRAY_SIZE(dmic_2ch),
400 .list = dmic_2ch,
401 .mask = 0,
402};
403
404static int kabylake_dmic_startup(struct snd_pcm_substream *substream)
405{
406 struct snd_pcm_runtime *runtime = substream->runtime;
407
408 runtime->hw.channels_max = DMIC_CH(dmic_constraints);
409 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
410 dmic_constraints);
411
412 return snd_pcm_hw_constraint_list(substream->runtime, 0,
413 SNDRV_PCM_HW_PARAM_RATE, &constraints_rates);
414}
415
416static struct snd_soc_ops kabylake_dmic_ops = {
417 .startup = kabylake_dmic_startup,
418};
419
420/* kabylake digital audio interface glue - connects codec <--> CPU */
421static struct snd_soc_dai_link kabylake_dais[] = {
422 /* Front End DAI links */
423 [KBL_DPCM_AUDIO_PB] = {
424 .name = "Kbl Audio Port",
425 .stream_name = "Audio",
426 .cpu_dai_name = "System Pin",
427 .platform_name = "0000:00:1f.3",
428 .dynamic = 1,
429 .codec_name = "snd-soc-dummy",
430 .codec_dai_name = "snd-soc-dummy-dai",
431 .nonatomic = 1,
432 .init = kabylake_rt5663_fe_init,
433 .trigger = {
434 SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
435 .dpcm_playback = 1,
436 .ops = &kabylake_rt5663_fe_ops,
437 },
438 [KBL_DPCM_AUDIO_CP] = {
439 .name = "Kbl Audio Capture Port",
440 .stream_name = "Audio Record",
441 .cpu_dai_name = "System Pin",
442 .platform_name = "0000:00:1f.3",
443 .dynamic = 1,
444 .codec_name = "snd-soc-dummy",
445 .codec_dai_name = "snd-soc-dummy-dai",
446 .nonatomic = 1,
447 .trigger = {
448 SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
449 .dpcm_capture = 1,
450 .ops = &kabylake_rt5663_fe_ops,
451 },
452 [KBL_DPCM_AUDIO_DMIC_CP] = {
453 .name = "Kbl Audio DMIC cap",
454 .stream_name = "dmiccap",
455 .cpu_dai_name = "DMIC Pin",
456 .codec_name = "snd-soc-dummy",
457 .codec_dai_name = "snd-soc-dummy-dai",
458 .platform_name = "0000:00:1f.3",
459 .init = NULL,
460 .dpcm_capture = 1,
461 .nonatomic = 1,
462 .dynamic = 1,
463 .ops = &kabylake_dmic_ops,
464 },
465 [KBL_DPCM_AUDIO_HDMI1_PB] = {
466 .name = "Kbl HDMI Port1",
467 .stream_name = "Hdmi1",
468 .cpu_dai_name = "HDMI1 Pin",
469 .codec_name = "snd-soc-dummy",
470 .codec_dai_name = "snd-soc-dummy-dai",
471 .platform_name = "0000:00:1f.3",
472 .dpcm_playback = 1,
473 .init = NULL,
474 .trigger = {
475 SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
476 .nonatomic = 1,
477 .dynamic = 1,
478 },
479 [KBL_DPCM_AUDIO_HDMI2_PB] = {
480 .name = "Kbl HDMI Port2",
481 .stream_name = "Hdmi2",
482 .cpu_dai_name = "HDMI2 Pin",
483 .codec_name = "snd-soc-dummy",
484 .codec_dai_name = "snd-soc-dummy-dai",
485 .platform_name = "0000:00:1f.3",
486 .dpcm_playback = 1,
487 .init = NULL,
488 .trigger = {
489 SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
490 .nonatomic = 1,
491 .dynamic = 1,
492 },
493 /* Back End DAI links */
494 /* single Back end dai for both max speakers and dmic */
495 {
496 /* SSP0 - Codec */
497 .name = "SSP0-Codec",
498 .id = 0,
499 .cpu_dai_name = "SSP0 Pin",
500 .platform_name = "0000:00:1f.3",
501 .no_pcm = 1,
502 .codecs = ssp0_codec_components,
503 .num_codecs = ARRAY_SIZE(ssp0_codec_components),
504 .dai_fmt = SND_SOC_DAIFMT_DSP_B |
505 SND_SOC_DAIFMT_NB_NF |
506 SND_SOC_DAIFMT_CBS_CFS,
507 .ignore_pmdown_time = 1,
508 .be_hw_params_fixup = kabylake_ssp_fixup,
509 .dpcm_playback = 1,
510 .dpcm_capture = 1,
511 .ops = &kabylake_ssp0_ops,
512 },
513 {
514 .name = "SSP1-Codec",
515 .id = 1,
516 .cpu_dai_name = "SSP1 Pin",
517 .platform_name = "0000:00:1f.3",
518 .no_pcm = 1,
519 .codec_name = RT5663_DEV_NAME,
520 .codec_dai_name = KBL_REALTEK_CODEC_DAI,
521 .init = kabylake_rt5663_codec_init,
522 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
523 SND_SOC_DAIFMT_CBS_CFS,
524 .ignore_pmdown_time = 1,
525 .be_hw_params_fixup = kabylake_ssp_fixup,
526 .ops = &kabylake_rt5663_ops,
527 .dpcm_playback = 1,
528 .dpcm_capture = 1,
529 },
530 {
531 .name = "iDisp1",
532 .id = 3,
533 .cpu_dai_name = "iDisp1 Pin",
534 .codec_name = "ehdaudio0D2",
535 .codec_dai_name = "intel-hdmi-hifi1",
536 .platform_name = "0000:00:1f.3",
537 .dpcm_playback = 1,
538 .init = kabylake_hdmi1_init,
539 .no_pcm = 1,
540 },
541 {
542 .name = "iDisp2",
543 .id = 4,
544 .cpu_dai_name = "iDisp2 Pin",
545 .codec_name = "ehdaudio0D2",
546 .codec_dai_name = "intel-hdmi-hifi2",
547 .platform_name = "0000:00:1f.3",
548 .init = kabylake_hdmi2_init,
549 .dpcm_playback = 1,
550 .no_pcm = 1,
551 },
552};
553
554static int kabylake_card_late_probe(struct snd_soc_card *card)
555{
556 struct kbl_codec_private *ctx = snd_soc_card_get_drvdata(card);
557 struct kbl_hdmi_pcm *pcm;
558 int err, i = 0;
559 char jack_name[NAME_SIZE];
560
561 list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
562 err = snd_soc_card_jack_new(card, jack_name,
563 SND_JACK_AVOUT, &ctx->kabylake_hdmi[i],
564 NULL, 0);
565
566 if (err)
567 return err;
568 err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device,
569 &ctx->kabylake_hdmi[i]);
570 if (err < 0)
571 return err;
572 i++;
573 }
574
575 return 0;
576}
577
578/*
579 * kabylake audio machine driver for MAX98927 + RT5514 + RT5663
580 */
581static struct snd_soc_card kabylake_audio_card = {
582 .name = "kbl_r5514_5663_max",
583 .owner = THIS_MODULE,
584 .dai_link = kabylake_dais,
585 .num_links = ARRAY_SIZE(kabylake_dais),
586 .controls = kabylake_controls,
587 .num_controls = ARRAY_SIZE(kabylake_controls),
588 .dapm_widgets = kabylake_widgets,
589 .num_dapm_widgets = ARRAY_SIZE(kabylake_widgets),
590 .dapm_routes = kabylake_map,
591 .num_dapm_routes = ARRAY_SIZE(kabylake_map),
592 .codec_conf = max98927_codec_conf,
593 .num_configs = ARRAY_SIZE(max98927_codec_conf),
594 .fully_routed = true,
595 .late_probe = kabylake_card_late_probe,
596};
597
598static int kabylake_audio_probe(struct platform_device *pdev)
599{
600 struct kbl_codec_private *ctx;
601 struct skl_machine_pdata *pdata;
602
603 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_ATOMIC);
604 if (!ctx)
605 return -ENOMEM;
606
607 INIT_LIST_HEAD(&ctx->hdmi_pcm_list);
608
609 kabylake_audio_card.dev = &pdev->dev;
610 snd_soc_card_set_drvdata(&kabylake_audio_card, ctx);
611
612 pdata = dev_get_drvdata(&pdev->dev);
613 if (pdata)
614 dmic_constraints = pdata->dmic_num == 2 ?
615 &constraints_dmic_2ch : &constraints_dmic_channels;
616
617 return devm_snd_soc_register_card(&pdev->dev, &kabylake_audio_card);
618}
619
620static const struct platform_device_id kbl_board_ids[] = {
621 { .name = "kbl_r5514_5663_max" },
622 { }
623};
624
625static struct platform_driver kabylake_audio = {
626 .probe = kabylake_audio_probe,
627 .driver = {
628 .name = "kbl_r5514_5663_max",
629 .pm = &snd_soc_pm_ops,
630 },
631 .id_table = kbl_board_ids,
632};
633
634module_platform_driver(kabylake_audio)
635
636/* Module information */
637MODULE_DESCRIPTION("Audio Machine driver-RT5663 RT5514 & MAX98927");
638MODULE_AUTHOR("Harsha Priya <harshapriya.n@intel.com>");
639MODULE_LICENSE("GPL v2");
640MODULE_ALIAS("platform:kbl_r5514_5663_max");
diff --git a/sound/soc/intel/boards/skl_nau88l25_max98357a.c b/sound/soc/intel/boards/skl_nau88l25_max98357a.c
index 3b12bc1fa518..5ed0aa27b467 100644
--- a/sound/soc/intel/boards/skl_nau88l25_max98357a.c
+++ b/sound/soc/intel/boards/skl_nau88l25_max98357a.c
@@ -266,21 +266,21 @@ static int skylake_nau8825_fe_init(struct snd_soc_pcm_runtime *rtd)
266 return 0; 266 return 0;
267} 267}
268 268
269static unsigned int rates[] = { 269static const unsigned int rates[] = {
270 48000, 270 48000,
271}; 271};
272 272
273static struct snd_pcm_hw_constraint_list constraints_rates = { 273static const struct snd_pcm_hw_constraint_list constraints_rates = {
274 .count = ARRAY_SIZE(rates), 274 .count = ARRAY_SIZE(rates),
275 .list = rates, 275 .list = rates,
276 .mask = 0, 276 .mask = 0,
277}; 277};
278 278
279static unsigned int channels[] = { 279static const unsigned int channels[] = {
280 2, 280 2,
281}; 281};
282 282
283static struct snd_pcm_hw_constraint_list constraints_channels = { 283static const struct snd_pcm_hw_constraint_list constraints_channels = {
284 .count = ARRAY_SIZE(channels), 284 .count = ARRAY_SIZE(channels),
285 .list = channels, 285 .list = channels,
286 .mask = 0, 286 .mask = 0,
@@ -348,11 +348,11 @@ static int skylake_dmic_fixup(struct snd_soc_pcm_runtime *rtd,
348 return 0; 348 return 0;
349} 349}
350 350
351static unsigned int channels_dmic[] = { 351static const unsigned int channels_dmic[] = {
352 2, 4, 352 2, 4,
353}; 353};
354 354
355static struct snd_pcm_hw_constraint_list constraints_dmic_channels = { 355static const struct snd_pcm_hw_constraint_list constraints_dmic_channels = {
356 .count = ARRAY_SIZE(channels_dmic), 356 .count = ARRAY_SIZE(channels_dmic),
357 .list = channels_dmic, 357 .list = channels_dmic,
358 .mask = 0, 358 .mask = 0,
@@ -384,11 +384,11 @@ static const struct snd_soc_ops skylake_dmic_ops = {
384 .startup = skylake_dmic_startup, 384 .startup = skylake_dmic_startup,
385}; 385};
386 386
387static unsigned int rates_16000[] = { 387static const unsigned int rates_16000[] = {
388 16000, 388 16000,
389}; 389};
390 390
391static struct snd_pcm_hw_constraint_list constraints_16000 = { 391static const struct snd_pcm_hw_constraint_list constraints_16000 = {
392 .count = ARRAY_SIZE(rates_16000), 392 .count = ARRAY_SIZE(rates_16000),
393 .list = rates_16000, 393 .list = rates_16000,
394}; 394};
diff --git a/sound/soc/intel/boards/skl_nau88l25_ssm4567.c b/sound/soc/intel/boards/skl_nau88l25_ssm4567.c
index eb7751b0599b..01b8b140bb08 100644
--- a/sound/soc/intel/boards/skl_nau88l25_ssm4567.c
+++ b/sound/soc/intel/boards/skl_nau88l25_ssm4567.c
@@ -297,21 +297,21 @@ static int skylake_nau8825_fe_init(struct snd_soc_pcm_runtime *rtd)
297 return 0; 297 return 0;
298} 298}
299 299
300static unsigned int rates[] = { 300static const unsigned int rates[] = {
301 48000, 301 48000,
302}; 302};
303 303
304static struct snd_pcm_hw_constraint_list constraints_rates = { 304static const struct snd_pcm_hw_constraint_list constraints_rates = {
305 .count = ARRAY_SIZE(rates), 305 .count = ARRAY_SIZE(rates),
306 .list = rates, 306 .list = rates,
307 .mask = 0, 307 .mask = 0,
308}; 308};
309 309
310static unsigned int channels[] = { 310static const unsigned int channels[] = {
311 2, 311 2,
312}; 312};
313 313
314static struct snd_pcm_hw_constraint_list constraints_channels = { 314static const struct snd_pcm_hw_constraint_list constraints_channels = {
315 .count = ARRAY_SIZE(channels), 315 .count = ARRAY_SIZE(channels),
316 .list = channels, 316 .list = channels,
317 .mask = 0, 317 .mask = 0,
@@ -397,11 +397,11 @@ static const struct snd_soc_ops skylake_nau8825_ops = {
397 .hw_params = skylake_nau8825_hw_params, 397 .hw_params = skylake_nau8825_hw_params,
398}; 398};
399 399
400static unsigned int channels_dmic[] = { 400static const unsigned int channels_dmic[] = {
401 2, 4, 401 2, 4,
402}; 402};
403 403
404static struct snd_pcm_hw_constraint_list constraints_dmic_channels = { 404static const struct snd_pcm_hw_constraint_list constraints_dmic_channels = {
405 .count = ARRAY_SIZE(channels_dmic), 405 .count = ARRAY_SIZE(channels_dmic),
406 .list = channels_dmic, 406 .list = channels_dmic,
407 .mask = 0, 407 .mask = 0,
@@ -433,11 +433,11 @@ static const struct snd_soc_ops skylake_dmic_ops = {
433 .startup = skylake_dmic_startup, 433 .startup = skylake_dmic_startup,
434}; 434};
435 435
436static unsigned int rates_16000[] = { 436static const unsigned int rates_16000[] = {
437 16000, 437 16000,
438}; 438};
439 439
440static struct snd_pcm_hw_constraint_list constraints_16000 = { 440static const struct snd_pcm_hw_constraint_list constraints_16000 = {
441 .count = ARRAY_SIZE(rates_16000), 441 .count = ARRAY_SIZE(rates_16000),
442 .list = rates_16000, 442 .list = rates_16000,
443}; 443};
diff --git a/sound/soc/intel/boards/skl_rt286.c b/sound/soc/intel/boards/skl_rt286.c
index f5ab7b8d51d1..2bc4cfca594e 100644
--- a/sound/soc/intel/boards/skl_rt286.c
+++ b/sound/soc/intel/boards/skl_rt286.c
@@ -43,6 +43,7 @@ struct skl_rt286_private {
43 43
44enum { 44enum {
45 SKL_DPCM_AUDIO_PB = 0, 45 SKL_DPCM_AUDIO_PB = 0,
46 SKL_DPCM_AUDIO_DB_PB,
46 SKL_DPCM_AUDIO_CP, 47 SKL_DPCM_AUDIO_CP,
47 SKL_DPCM_AUDIO_REF_CP, 48 SKL_DPCM_AUDIO_REF_CP,
48 SKL_DPCM_AUDIO_DMIC_CP, 49 SKL_DPCM_AUDIO_DMIC_CP,
@@ -165,21 +166,21 @@ static int skylake_hdmi_init(struct snd_soc_pcm_runtime *rtd)
165 return 0; 166 return 0;
166} 167}
167 168
168static unsigned int rates[] = { 169static const unsigned int rates[] = {
169 48000, 170 48000,
170}; 171};
171 172
172static struct snd_pcm_hw_constraint_list constraints_rates = { 173static const struct snd_pcm_hw_constraint_list constraints_rates = {
173 .count = ARRAY_SIZE(rates), 174 .count = ARRAY_SIZE(rates),
174 .list = rates, 175 .list = rates,
175 .mask = 0, 176 .mask = 0,
176}; 177};
177 178
178static unsigned int channels[] = { 179static const unsigned int channels[] = {
179 2, 180 2,
180}; 181};
181 182
182static struct snd_pcm_hw_constraint_list constraints_channels = { 183static const struct snd_pcm_hw_constraint_list constraints_channels = {
183 .count = ARRAY_SIZE(channels), 184 .count = ARRAY_SIZE(channels),
184 .list = channels, 185 .list = channels,
185 .mask = 0, 186 .mask = 0,
@@ -264,11 +265,11 @@ static int skylake_dmic_fixup(struct snd_soc_pcm_runtime *rtd,
264 return 0; 265 return 0;
265} 266}
266 267
267static unsigned int channels_dmic[] = { 268static const unsigned int channels_dmic[] = {
268 2, 4, 269 2, 4,
269}; 270};
270 271
271static struct snd_pcm_hw_constraint_list constraints_dmic_channels = { 272static const struct snd_pcm_hw_constraint_list constraints_dmic_channels = {
272 .count = ARRAY_SIZE(channels_dmic), 273 .count = ARRAY_SIZE(channels_dmic),
273 .list = channels_dmic, 274 .list = channels_dmic,
274 .mask = 0, 275 .mask = 0,
@@ -310,6 +311,23 @@ static struct snd_soc_dai_link skylake_rt286_dais[] = {
310 .dpcm_playback = 1, 311 .dpcm_playback = 1,
311 .ops = &skylake_rt286_fe_ops, 312 .ops = &skylake_rt286_fe_ops,
312 }, 313 },
314 [SKL_DPCM_AUDIO_DB_PB] = {
315 .name = "Skl Deepbuffer Port",
316 .stream_name = "Deep Buffer Audio",
317 .cpu_dai_name = "Deepbuffer Pin",
318 .platform_name = "0000:00:1f.3",
319 .nonatomic = 1,
320 .dynamic = 1,
321 .codec_name = "snd-soc-dummy",
322 .codec_dai_name = "snd-soc-dummy-dai",
323 .trigger = {
324 SND_SOC_DPCM_TRIGGER_POST,
325 SND_SOC_DPCM_TRIGGER_POST
326 },
327 .dpcm_playback = 1,
328 .ops = &skylake_rt286_fe_ops,
329
330 },
313 [SKL_DPCM_AUDIO_CP] = { 331 [SKL_DPCM_AUDIO_CP] = {
314 .name = "Skl Audio Capture Port", 332 .name = "Skl Audio Capture Port",
315 .stream_name = "Audio Record", 333 .stream_name = "Audio Record",
diff --git a/sound/soc/intel/common/sst-acpi.h b/sound/soc/intel/common/sst-acpi.h
index 214e000667ae..afe9b87b8bd5 100644
--- a/sound/soc/intel/common/sst-acpi.h
+++ b/sound/soc/intel/common/sst-acpi.h
@@ -43,6 +43,9 @@ static inline bool sst_acpi_find_package_from_hid(const u8 hid[ACPI_ID_LEN],
43/* acpi match */ 43/* acpi match */
44struct sst_acpi_mach *sst_acpi_find_machine(struct sst_acpi_mach *machines); 44struct sst_acpi_mach *sst_acpi_find_machine(struct sst_acpi_mach *machines);
45 45
46/* acpi check hid */
47bool sst_acpi_check_hid(const u8 hid[ACPI_ID_LEN]);
48
46/* Descriptor for SST ASoC machine driver */ 49/* Descriptor for SST ASoC machine driver */
47struct sst_acpi_mach { 50struct sst_acpi_mach {
48 /* ACPI ID for the matching machine driver. Audio codec for instance */ 51 /* ACPI ID for the matching machine driver. Audio codec for instance */
@@ -55,5 +58,25 @@ struct sst_acpi_mach {
55 /* board name */ 58 /* board name */
56 const char *board; 59 const char *board;
57 struct sst_acpi_mach * (*machine_quirk)(void *arg); 60 struct sst_acpi_mach * (*machine_quirk)(void *arg);
61 const void *quirk_data;
58 void *pdata; 62 void *pdata;
59}; 63};
64
65#define SST_ACPI_MAX_CODECS 3
66
67/**
68 * struct sst_codecs: Structure to hold secondary codec information apart from
69 * the matched one, this data will be passed to the quirk function to match
70 * with the ACPI detected devices
71 *
72 * @num_codecs: number of secondary codecs used in the platform
73 * @codecs: holds the codec IDs
74 *
75 */
76struct sst_codecs {
77 int num_codecs;
78 u8 codecs[SST_ACPI_MAX_CODECS][ACPI_ID_LEN];
79};
80
81/* check all codecs */
82struct sst_acpi_mach *sst_acpi_codec_list(void *arg);
diff --git a/sound/soc/intel/common/sst-dsp-priv.h b/sound/soc/intel/common/sst-dsp-priv.h
index d13c84364c3c..8734040d64d3 100644
--- a/sound/soc/intel/common/sst-dsp-priv.h
+++ b/sound/soc/intel/common/sst-dsp-priv.h
@@ -77,6 +77,10 @@ struct sst_addr {
77 u32 dram_offset; 77 u32 dram_offset;
78 u32 dsp_iram_offset; 78 u32 dsp_iram_offset;
79 u32 dsp_dram_offset; 79 u32 dsp_dram_offset;
80 u32 sram0_base;
81 u32 sram1_base;
82 u32 w0_stat_sz;
83 u32 w0_up_sz;
80 void __iomem *lpe; 84 void __iomem *lpe;
81 void __iomem *shim; 85 void __iomem *shim;
82 void __iomem *pci_cfg; 86 void __iomem *pci_cfg;
diff --git a/sound/soc/intel/common/sst-match-acpi.c b/sound/soc/intel/common/sst-match-acpi.c
index 1070f3ad23e5..56d26f36a3cb 100644
--- a/sound/soc/intel/common/sst-match-acpi.c
+++ b/sound/soc/intel/common/sst-match-acpi.c
@@ -63,16 +63,33 @@ static acpi_status sst_acpi_mach_match(acpi_handle handle, u32 level,
63 return AE_OK; 63 return AE_OK;
64} 64}
65 65
66bool sst_acpi_check_hid(const u8 hid[ACPI_ID_LEN])
67{
68 acpi_status status;
69 bool found = false;
70
71 status = acpi_get_devices(hid, sst_acpi_mach_match, &found, NULL);
72
73 if (ACPI_FAILURE(status))
74 return false;
75
76 return found;
77}
78EXPORT_SYMBOL_GPL(sst_acpi_check_hid);
79
66struct sst_acpi_mach *sst_acpi_find_machine(struct sst_acpi_mach *machines) 80struct sst_acpi_mach *sst_acpi_find_machine(struct sst_acpi_mach *machines)
67{ 81{
68 struct sst_acpi_mach *mach; 82 struct sst_acpi_mach *mach;
69 bool found = false;
70 83
71 for (mach = machines; mach->id[0]; mach++) 84 for (mach = machines; mach->id[0]; mach++) {
72 if (ACPI_SUCCESS(acpi_get_devices(mach->id, 85 if (sst_acpi_check_hid(mach->id) == true) {
73 sst_acpi_mach_match, 86 if (mach->machine_quirk == NULL)
74 &found, NULL)) && found) 87 return mach;
75 return mach; 88
89 if (mach->machine_quirk(mach) != NULL)
90 return mach;
91 }
92 }
76 return NULL; 93 return NULL;
77} 94}
78EXPORT_SYMBOL_GPL(sst_acpi_find_machine); 95EXPORT_SYMBOL_GPL(sst_acpi_find_machine);
@@ -134,5 +151,23 @@ bool sst_acpi_find_package_from_hid(const u8 hid[ACPI_ID_LEN],
134} 151}
135EXPORT_SYMBOL_GPL(sst_acpi_find_package_from_hid); 152EXPORT_SYMBOL_GPL(sst_acpi_find_package_from_hid);
136 153
154struct sst_acpi_mach *sst_acpi_codec_list(void *arg)
155{
156 struct sst_acpi_mach *mach = arg;
157 struct sst_codecs *codec_list = (struct sst_codecs *) mach->quirk_data;
158 int i;
159
160 if (mach->quirk_data == NULL)
161 return mach;
162
163 for (i = 0; i < codec_list->num_codecs; i++) {
164 if (sst_acpi_check_hid(codec_list->codecs[i]) != true)
165 return NULL;
166 }
167
168 return mach;
169}
170EXPORT_SYMBOL_GPL(sst_acpi_codec_list);
171
137MODULE_LICENSE("GPL v2"); 172MODULE_LICENSE("GPL v2");
138MODULE_DESCRIPTION("Intel Common ACPI Match module"); 173MODULE_DESCRIPTION("Intel Common ACPI Match module");
diff --git a/sound/soc/intel/skylake/Makefile b/sound/soc/intel/skylake/Makefile
index 60fbc9bbe473..e7d77722d560 100644
--- a/sound/soc/intel/skylake/Makefile
+++ b/sound/soc/intel/skylake/Makefile
@@ -1,6 +1,10 @@
1snd-soc-skl-objs := skl.o skl-pcm.o skl-nhlt.o skl-messages.o \ 1snd-soc-skl-objs := skl.o skl-pcm.o skl-nhlt.o skl-messages.o \
2skl-topology.o 2skl-topology.o
3 3
4ifdef CONFIG_DEBUG_FS
5 snd-soc-skl-objs += skl-debug.o
6endif
7
4obj-$(CONFIG_SND_SOC_INTEL_SKYLAKE) += snd-soc-skl.o 8obj-$(CONFIG_SND_SOC_INTEL_SKYLAKE) += snd-soc-skl.o
5 9
6# Skylake IPC Support 10# Skylake IPC Support
diff --git a/sound/soc/intel/skylake/bxt-sst.c b/sound/soc/intel/skylake/bxt-sst.c
index f5e7dbb1ba39..cf11b84888b9 100644
--- a/sound/soc/intel/skylake/bxt-sst.c
+++ b/sound/soc/intel/skylake/bxt-sst.c
@@ -573,6 +573,10 @@ int bxt_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq,
573 sst->fw_ops = bxt_fw_ops; 573 sst->fw_ops = bxt_fw_ops;
574 sst->addr.lpe = mmio_base; 574 sst->addr.lpe = mmio_base;
575 sst->addr.shim = mmio_base; 575 sst->addr.shim = mmio_base;
576 sst->addr.sram0_base = BXT_ADSP_SRAM0_BASE;
577 sst->addr.sram1_base = BXT_ADSP_SRAM1_BASE;
578 sst->addr.w0_stat_sz = SKL_ADSP_W0_STAT_SZ;
579 sst->addr.w0_up_sz = SKL_ADSP_W0_UP_SZ;
576 580
577 sst_dsp_mailbox_init(sst, (BXT_ADSP_SRAM0_BASE + SKL_ADSP_W0_STAT_SZ), 581 sst_dsp_mailbox_init(sst, (BXT_ADSP_SRAM0_BASE + SKL_ADSP_W0_STAT_SZ),
578 SKL_ADSP_W0_UP_SZ, BXT_ADSP_SRAM1_BASE, SKL_ADSP_W1_SZ); 582 SKL_ADSP_W0_UP_SZ, BXT_ADSP_SRAM1_BASE, SKL_ADSP_W1_SZ);
diff --git a/sound/soc/intel/skylake/skl-debug.c b/sound/soc/intel/skylake/skl-debug.c
new file mode 100644
index 000000000000..dc20d91f62e6
--- /dev/null
+++ b/sound/soc/intel/skylake/skl-debug.c
@@ -0,0 +1,261 @@
1/*
2 * skl-debug.c - Debugfs for skl driver
3 *
4 * Copyright (C) 2016-17 Intel Corp
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 */
15
16#include <linux/pci.h>
17#include <linux/debugfs.h>
18#include "skl.h"
19#include "skl-sst-dsp.h"
20#include "skl-sst-ipc.h"
21#include "skl-tplg-interface.h"
22#include "skl-topology.h"
23#include "../common/sst-dsp.h"
24#include "../common/sst-dsp-priv.h"
25
26#define MOD_BUF PAGE_SIZE
27#define FW_REG_BUF PAGE_SIZE
28#define FW_REG_SIZE 0x60
29
30struct skl_debug {
31 struct skl *skl;
32 struct device *dev;
33
34 struct dentry *fs;
35 struct dentry *modules;
36 u8 fw_read_buff[FW_REG_BUF];
37};
38
39static ssize_t skl_print_pins(struct skl_module_pin *m_pin, char *buf,
40 int max_pin, ssize_t size, bool direction)
41{
42 int i;
43 ssize_t ret = 0;
44
45 for (i = 0; i < max_pin; i++)
46 ret += snprintf(buf + size, MOD_BUF - size,
47 "%s %d\n\tModule %d\n\tInstance %d\n\t"
48 "In-used %s\n\tType %s\n"
49 "\tState %d\n\tIndex %d\n",
50 direction ? "Input Pin:" : "Output Pin:",
51 i, m_pin[i].id.module_id,
52 m_pin[i].id.instance_id,
53 m_pin[i].in_use ? "Used" : "Unused",
54 m_pin[i].is_dynamic ? "Dynamic" : "Static",
55 m_pin[i].pin_state, i);
56 return ret;
57}
58
59static ssize_t skl_print_fmt(struct skl_module_fmt *fmt, char *buf,
60 ssize_t size, bool direction)
61{
62 return snprintf(buf + size, MOD_BUF - size,
63 "%s\n\tCh %d\n\tFreq %d\n\tBit depth %d\n\t"
64 "Valid bit depth %d\n\tCh config %#x\n\tInterleaving %d\n\t"
65 "Sample Type %d\n\tCh Map %#x\n",
66 direction ? "Input Format:" : "Output Format:",
67 fmt->channels, fmt->s_freq, fmt->bit_depth,
68 fmt->valid_bit_depth, fmt->ch_cfg,
69 fmt->interleaving_style, fmt->sample_type,
70 fmt->ch_map);
71}
72
73static ssize_t module_read(struct file *file, char __user *user_buf,
74 size_t count, loff_t *ppos)
75{
76 struct skl_module_cfg *mconfig = file->private_data;
77 char *buf;
78 ssize_t ret;
79
80 buf = kzalloc(MOD_BUF, GFP_KERNEL);
81 if (!buf)
82 return -ENOMEM;
83
84 ret = snprintf(buf, MOD_BUF, "Module:\n\tUUID %pUL\n\tModule id %d\n"
85 "\tInstance id %d\n\tPvt_id %d\n", mconfig->guid,
86 mconfig->id.module_id, mconfig->id.instance_id,
87 mconfig->id.pvt_id);
88
89 ret += snprintf(buf + ret, MOD_BUF - ret,
90 "Resources:\n\tMCPS %#x\n\tIBS %#x\n\tOBS %#x\t\n",
91 mconfig->mcps, mconfig->ibs, mconfig->obs);
92
93 ret += snprintf(buf + ret, MOD_BUF - ret,
94 "Module data:\n\tCore %d\n\tIn queue %d\n\t"
95 "Out queue %d\n\tType %s\n",
96 mconfig->core_id, mconfig->max_in_queue,
97 mconfig->max_out_queue,
98 mconfig->is_loadable ? "loadable" : "inbuilt");
99
100 ret += skl_print_fmt(mconfig->in_fmt, buf, ret, true);
101 ret += skl_print_fmt(mconfig->out_fmt, buf, ret, false);
102
103 ret += snprintf(buf + ret, MOD_BUF - ret,
104 "Fixup:\n\tParams %#x\n\tConverter %#x\n",
105 mconfig->params_fixup, mconfig->converter);
106
107 ret += snprintf(buf + ret, MOD_BUF - ret,
108 "Module Gateway:\n\tType %#x\n\tVbus %#x\n\tHW conn %#x\n\tSlot %#x\n",
109 mconfig->dev_type, mconfig->vbus_id,
110 mconfig->hw_conn_type, mconfig->time_slot);
111
112 ret += snprintf(buf + ret, MOD_BUF - ret,
113 "Pipeline:\n\tID %d\n\tPriority %d\n\tConn Type %d\n\t"
114 "Pages %#x\n", mconfig->pipe->ppl_id,
115 mconfig->pipe->pipe_priority, mconfig->pipe->conn_type,
116 mconfig->pipe->memory_pages);
117
118 ret += snprintf(buf + ret, MOD_BUF - ret,
119 "\tParams:\n\t\tHost DMA %d\n\t\tLink DMA %d\n",
120 mconfig->pipe->p_params->host_dma_id,
121 mconfig->pipe->p_params->link_dma_id);
122
123 ret += snprintf(buf + ret, MOD_BUF - ret,
124 "\tPCM params:\n\t\tCh %d\n\t\tFreq %d\n\t\tFormat %d\n",
125 mconfig->pipe->p_params->ch,
126 mconfig->pipe->p_params->s_freq,
127 mconfig->pipe->p_params->s_fmt);
128
129 ret += snprintf(buf + ret, MOD_BUF - ret,
130 "\tLink %#x\n\tStream %#x\n",
131 mconfig->pipe->p_params->linktype,
132 mconfig->pipe->p_params->stream);
133
134 ret += snprintf(buf + ret, MOD_BUF - ret,
135 "\tState %d\n\tPassthru %s\n",
136 mconfig->pipe->state,
137 mconfig->pipe->passthru ? "true" : "false");
138
139 ret += skl_print_pins(mconfig->m_in_pin, buf,
140 mconfig->max_in_queue, ret, true);
141 ret += skl_print_pins(mconfig->m_out_pin, buf,
142 mconfig->max_out_queue, ret, false);
143
144 ret += snprintf(buf + ret, MOD_BUF - ret,
145 "Other:\n\tDomain %d\n\tHomogenous Input %s\n\t"
146 "Homogenous Output %s\n\tIn Queue Mask %d\n\t"
147 "Out Queue Mask %d\n\tDMA ID %d\n\tMem Pages %d\n\t"
148 "Module Type %d\n\tModule State %d\n",
149 mconfig->domain,
150 mconfig->homogenous_inputs ? "true" : "false",
151 mconfig->homogenous_outputs ? "true" : "false",
152 mconfig->in_queue_mask, mconfig->out_queue_mask,
153 mconfig->dma_id, mconfig->mem_pages, mconfig->m_state,
154 mconfig->m_type);
155
156 ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
157
158 kfree(buf);
159 return ret;
160}
161
162static const struct file_operations mcfg_fops = {
163 .open = simple_open,
164 .read = module_read,
165 .llseek = default_llseek,
166};
167
168
169void skl_debug_init_module(struct skl_debug *d,
170 struct snd_soc_dapm_widget *w,
171 struct skl_module_cfg *mconfig)
172{
173 if (!debugfs_create_file(w->name, 0444,
174 d->modules, mconfig,
175 &mcfg_fops))
176 dev_err(d->dev, "%s: module debugfs init failed\n", w->name);
177}
178
179static ssize_t fw_softreg_read(struct file *file, char __user *user_buf,
180 size_t count, loff_t *ppos)
181{
182 struct skl_debug *d = file->private_data;
183 struct sst_dsp *sst = d->skl->skl_sst->dsp;
184 size_t w0_stat_sz = sst->addr.w0_stat_sz;
185 void __iomem *in_base = sst->mailbox.in_base;
186 void __iomem *fw_reg_addr;
187 unsigned int offset;
188 char *tmp;
189 ssize_t ret = 0;
190
191 tmp = kzalloc(FW_REG_BUF, GFP_KERNEL);
192 if (!tmp)
193 return -ENOMEM;
194
195 fw_reg_addr = in_base - w0_stat_sz;
196 memset(d->fw_read_buff, 0, FW_REG_BUF);
197
198 if (w0_stat_sz > 0)
199 __iowrite32_copy(d->fw_read_buff, fw_reg_addr, w0_stat_sz >> 2);
200
201 for (offset = 0; offset < FW_REG_SIZE; offset += 16) {
202 ret += snprintf(tmp + ret, FW_REG_BUF - ret, "%#.4x: ", offset);
203 hex_dump_to_buffer(d->fw_read_buff + offset, 16, 16, 4,
204 tmp + ret, FW_REG_BUF - ret, 0);
205 ret += strlen(tmp + ret);
206
207 /* print newline for each offset */
208 if (FW_REG_BUF - ret > 0)
209 tmp[ret++] = '\n';
210 }
211
212 ret = simple_read_from_buffer(user_buf, count, ppos, tmp, ret);
213 kfree(tmp);
214
215 return ret;
216}
217
218static const struct file_operations soft_regs_ctrl_fops = {
219 .open = simple_open,
220 .read = fw_softreg_read,
221 .llseek = default_llseek,
222};
223
224struct skl_debug *skl_debugfs_init(struct skl *skl)
225{
226 struct skl_debug *d;
227
228 d = devm_kzalloc(&skl->pci->dev, sizeof(*d), GFP_KERNEL);
229 if (!d)
230 return NULL;
231
232 /* create the debugfs dir with platform component's debugfs as parent */
233 d->fs = debugfs_create_dir("dsp",
234 skl->platform->component.debugfs_root);
235 if (IS_ERR(d->fs) || !d->fs) {
236 dev_err(&skl->pci->dev, "debugfs root creation failed\n");
237 return NULL;
238 }
239
240 d->skl = skl;
241 d->dev = &skl->pci->dev;
242
243 /* now create the module dir */
244 d->modules = debugfs_create_dir("modules", d->fs);
245 if (IS_ERR(d->modules) || !d->modules) {
246 dev_err(&skl->pci->dev, "modules debugfs create failed\n");
247 goto err;
248 }
249
250 if (!debugfs_create_file("fw_soft_regs_rd", 0444, d->fs, d,
251 &soft_regs_ctrl_fops)) {
252 dev_err(d->dev, "fw soft regs control debugfs init failed\n");
253 goto err;
254 }
255
256 return d;
257
258err:
259 debugfs_remove_recursive(d->fs);
260 return NULL;
261}
diff --git a/sound/soc/intel/skylake/skl-messages.c b/sound/soc/intel/skylake/skl-messages.c
index ab1adc0c9cc3..eca85827dbd2 100644
--- a/sound/soc/intel/skylake/skl-messages.c
+++ b/sound/soc/intel/skylake/skl-messages.c
@@ -507,6 +507,8 @@ static void skl_setup_cpr_gateway_cfg(struct skl_sst *ctx,
507 struct skl_module_cfg *mconfig, 507 struct skl_module_cfg *mconfig,
508 struct skl_cpr_cfg *cpr_mconfig) 508 struct skl_cpr_cfg *cpr_mconfig)
509{ 509{
510 u32 dma_io_buf;
511
510 cpr_mconfig->gtw_cfg.node_id = skl_get_node_id(ctx, mconfig); 512 cpr_mconfig->gtw_cfg.node_id = skl_get_node_id(ctx, mconfig);
511 513
512 if (cpr_mconfig->gtw_cfg.node_id == SKL_NON_GATEWAY_CPR_NODE_ID) { 514 if (cpr_mconfig->gtw_cfg.node_id == SKL_NON_GATEWAY_CPR_NODE_ID) {
@@ -514,10 +516,29 @@ static void skl_setup_cpr_gateway_cfg(struct skl_sst *ctx,
514 return; 516 return;
515 } 517 }
516 518
517 if (SKL_CONN_SOURCE == mconfig->hw_conn_type) 519 switch (mconfig->hw_conn_type) {
518 cpr_mconfig->gtw_cfg.dma_buffer_size = 2 * mconfig->obs; 520 case SKL_CONN_SOURCE:
519 else 521 if (mconfig->dev_type == SKL_DEVICE_HDAHOST)
520 cpr_mconfig->gtw_cfg.dma_buffer_size = 2 * mconfig->ibs; 522 dma_io_buf = mconfig->ibs;
523 else
524 dma_io_buf = mconfig->obs;
525 break;
526
527 case SKL_CONN_SINK:
528 if (mconfig->dev_type == SKL_DEVICE_HDAHOST)
529 dma_io_buf = mconfig->obs;
530 else
531 dma_io_buf = mconfig->ibs;
532 break;
533
534 default:
535 dev_warn(ctx->dev, "wrong connection type: %d\n",
536 mconfig->hw_conn_type);
537 return;
538 }
539
540 cpr_mconfig->gtw_cfg.dma_buffer_size =
541 mconfig->dma_buffer_size * dma_io_buf;
521 542
522 cpr_mconfig->cpr_feature_mask = 0; 543 cpr_mconfig->cpr_feature_mask = 0;
523 cpr_mconfig->gtw_cfg.config_length = 0; 544 cpr_mconfig->gtw_cfg.config_length = 0;
@@ -707,6 +728,7 @@ static u16 skl_get_module_param_size(struct skl_sst *ctx,
707 return param_size; 728 return param_size;
708 729
709 case SKL_MODULE_TYPE_BASE_OUTFMT: 730 case SKL_MODULE_TYPE_BASE_OUTFMT:
731 case SKL_MODULE_TYPE_MIC_SELECT:
710 case SKL_MODULE_TYPE_KPB: 732 case SKL_MODULE_TYPE_KPB:
711 return sizeof(struct skl_base_outfmt_cfg); 733 return sizeof(struct skl_base_outfmt_cfg);
712 734
@@ -761,6 +783,7 @@ static int skl_set_module_format(struct skl_sst *ctx,
761 break; 783 break;
762 784
763 case SKL_MODULE_TYPE_BASE_OUTFMT: 785 case SKL_MODULE_TYPE_BASE_OUTFMT:
786 case SKL_MODULE_TYPE_MIC_SELECT:
764 case SKL_MODULE_TYPE_KPB: 787 case SKL_MODULE_TYPE_KPB:
765 skl_set_base_outfmt_format(ctx, module_config, *param_data); 788 skl_set_base_outfmt_format(ctx, module_config, *param_data);
766 break; 789 break;
diff --git a/sound/soc/intel/skylake/skl-pcm.c b/sound/soc/intel/skylake/skl-pcm.c
index e91bbcffc856..0ebea34a4988 100644
--- a/sound/soc/intel/skylake/skl-pcm.c
+++ b/sound/soc/intel/skylake/skl-pcm.c
@@ -1249,12 +1249,16 @@ static int skl_platform_soc_probe(struct snd_soc_platform *platform)
1249 1249
1250 pm_runtime_get_sync(platform->dev); 1250 pm_runtime_get_sync(platform->dev);
1251 if ((ebus_to_hbus(ebus))->ppcap) { 1251 if ((ebus_to_hbus(ebus))->ppcap) {
1252 skl->platform = platform;
1253
1254 /* init debugfs */
1255 skl->debugfs = skl_debugfs_init(skl);
1256
1252 ret = skl_tplg_init(platform, ebus); 1257 ret = skl_tplg_init(platform, ebus);
1253 if (ret < 0) { 1258 if (ret < 0) {
1254 dev_err(platform->dev, "Failed to init topology!\n"); 1259 dev_err(platform->dev, "Failed to init topology!\n");
1255 return ret; 1260 return ret;
1256 } 1261 }
1257 skl->platform = platform;
1258 1262
1259 /* load the firmwares, since all is set */ 1263 /* load the firmwares, since all is set */
1260 ops = skl_get_dsp_ops(skl->pci->device); 1264 ops = skl_get_dsp_ops(skl->pci->device);
diff --git a/sound/soc/intel/skylake/skl-sst.c b/sound/soc/intel/skylake/skl-sst.c
index 155e456b7a3a..aba9ea11ac74 100644
--- a/sound/soc/intel/skylake/skl-sst.c
+++ b/sound/soc/intel/skylake/skl-sst.c
@@ -553,6 +553,11 @@ int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq,
553 sst = skl->dsp; 553 sst = skl->dsp;
554 sst->addr.lpe = mmio_base; 554 sst->addr.lpe = mmio_base;
555 sst->addr.shim = mmio_base; 555 sst->addr.shim = mmio_base;
556 sst->addr.sram0_base = SKL_ADSP_SRAM0_BASE;
557 sst->addr.sram1_base = SKL_ADSP_SRAM1_BASE;
558 sst->addr.w0_stat_sz = SKL_ADSP_W0_STAT_SZ;
559 sst->addr.w0_up_sz = SKL_ADSP_W0_UP_SZ;
560
556 sst_dsp_mailbox_init(sst, (SKL_ADSP_SRAM0_BASE + SKL_ADSP_W0_STAT_SZ), 561 sst_dsp_mailbox_init(sst, (SKL_ADSP_SRAM0_BASE + SKL_ADSP_W0_STAT_SZ),
557 SKL_ADSP_W0_UP_SZ, SKL_ADSP_SRAM1_BASE, SKL_ADSP_W1_SZ); 562 SKL_ADSP_W0_UP_SZ, SKL_ADSP_SRAM1_BASE, SKL_ADSP_W1_SZ);
558 563
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c
index 64a0f8ed33e1..68c3f121efc3 100644
--- a/sound/soc/intel/skylake/skl-topology.c
+++ b/sound/soc/intel/skylake/skl-topology.c
@@ -36,6 +36,19 @@
36#define SKL_IN_DIR_BIT_MASK BIT(0) 36#define SKL_IN_DIR_BIT_MASK BIT(0)
37#define SKL_PIN_COUNT_MASK GENMASK(7, 4) 37#define SKL_PIN_COUNT_MASK GENMASK(7, 4)
38 38
39static const int mic_mono_list[] = {
400, 1, 2, 3,
41};
42static const int mic_stereo_list[][SKL_CH_STEREO] = {
43{0, 1}, {0, 2}, {0, 3}, {1, 2}, {1, 3}, {2, 3},
44};
45static const int mic_trio_list[][SKL_CH_TRIO] = {
46{0, 1, 2}, {0, 1, 3}, {0, 2, 3}, {1, 2, 3},
47};
48static const int mic_quatro_list[][SKL_CH_QUATRO] = {
49{0, 1, 2, 3},
50};
51
39void skl_tplg_d0i3_get(struct skl *skl, enum d0i3_capability caps) 52void skl_tplg_d0i3_get(struct skl *skl, enum d0i3_capability caps)
40{ 53{
41 struct skl_d0i3_data *d0i3 = &skl->skl_sst->d0i3; 54 struct skl_d0i3_data *d0i3 = &skl->skl_sst->d0i3;
@@ -1314,6 +1327,111 @@ static int skl_tplg_tlv_control_set(struct snd_kcontrol *kcontrol,
1314 return 0; 1327 return 0;
1315} 1328}
1316 1329
1330static int skl_tplg_mic_control_get(struct snd_kcontrol *kcontrol,
1331 struct snd_ctl_elem_value *ucontrol)
1332{
1333 struct snd_soc_dapm_widget *w = snd_soc_dapm_kcontrol_widget(kcontrol);
1334 struct skl_module_cfg *mconfig = w->priv;
1335 struct soc_enum *ec = (struct soc_enum *)kcontrol->private_value;
1336 u32 ch_type = *((u32 *)ec->dobj.private);
1337
1338 if (mconfig->dmic_ch_type == ch_type)
1339 ucontrol->value.enumerated.item[0] =
1340 mconfig->dmic_ch_combo_index;
1341 else
1342 ucontrol->value.enumerated.item[0] = 0;
1343
1344 return 0;
1345}
1346
1347static int skl_fill_mic_sel_params(struct skl_module_cfg *mconfig,
1348 struct skl_mic_sel_config *mic_cfg, struct device *dev)
1349{
1350 struct skl_specific_cfg *sp_cfg = &mconfig->formats_config;
1351
1352 sp_cfg->caps_size = sizeof(struct skl_mic_sel_config);
1353 sp_cfg->set_params = SKL_PARAM_SET;
1354 sp_cfg->param_id = 0x00;
1355 if (!sp_cfg->caps) {
1356 sp_cfg->caps = devm_kzalloc(dev, sp_cfg->caps_size, GFP_KERNEL);
1357 if (!sp_cfg->caps)
1358 return -ENOMEM;
1359 }
1360
1361 mic_cfg->mic_switch = SKL_MIC_SEL_SWITCH;
1362 mic_cfg->flags = 0;
1363 memcpy(sp_cfg->caps, mic_cfg, sp_cfg->caps_size);
1364
1365 return 0;
1366}
1367
1368static int skl_tplg_mic_control_set(struct snd_kcontrol *kcontrol,
1369 struct snd_ctl_elem_value *ucontrol)
1370{
1371 struct snd_soc_dapm_widget *w = snd_soc_dapm_kcontrol_widget(kcontrol);
1372 struct skl_module_cfg *mconfig = w->priv;
1373 struct skl_mic_sel_config mic_cfg = {0};
1374 struct soc_enum *ec = (struct soc_enum *)kcontrol->private_value;
1375 u32 ch_type = *((u32 *)ec->dobj.private);
1376 const int *list;
1377 u8 in_ch, out_ch, index;
1378
1379 mconfig->dmic_ch_type = ch_type;
1380 mconfig->dmic_ch_combo_index = ucontrol->value.enumerated.item[0];
1381
1382 /* enum control index 0 is INVALID, so no channels to be set */
1383 if (mconfig->dmic_ch_combo_index == 0)
1384 return 0;
1385
1386 /* No valid channel selection map for index 0, so offset by 1 */
1387 index = mconfig->dmic_ch_combo_index - 1;
1388
1389 switch (ch_type) {
1390 case SKL_CH_MONO:
1391 if (mconfig->dmic_ch_combo_index > ARRAY_SIZE(mic_mono_list))
1392 return -EINVAL;
1393
1394 list = &mic_mono_list[index];
1395 break;
1396
1397 case SKL_CH_STEREO:
1398 if (mconfig->dmic_ch_combo_index > ARRAY_SIZE(mic_stereo_list))
1399 return -EINVAL;
1400
1401 list = mic_stereo_list[index];
1402 break;
1403
1404 case SKL_CH_TRIO:
1405 if (mconfig->dmic_ch_combo_index > ARRAY_SIZE(mic_trio_list))
1406 return -EINVAL;
1407
1408 list = mic_trio_list[index];
1409 break;
1410
1411 case SKL_CH_QUATRO:
1412 if (mconfig->dmic_ch_combo_index > ARRAY_SIZE(mic_quatro_list))
1413 return -EINVAL;
1414
1415 list = mic_quatro_list[index];
1416 break;
1417
1418 default:
1419 dev_err(w->dapm->dev,
1420 "Invalid channel %d for mic_select module\n",
1421 ch_type);
1422 return -EINVAL;
1423
1424 }
1425
1426 /* channel type enum map to number of chanels for that type */
1427 for (out_ch = 0; out_ch < ch_type; out_ch++) {
1428 in_ch = list[out_ch];
1429 mic_cfg.blob[out_ch][in_ch] = SKL_DEFAULT_MIC_SEL_GAIN;
1430 }
1431
1432 return skl_fill_mic_sel_params(mconfig, &mic_cfg, w->dapm->dev);
1433}
1434
1317/* 1435/*
1318 * Fill the dma id for host and link. In case of passthrough 1436 * Fill the dma id for host and link. In case of passthrough
1319 * pipeline, this will both host and link in the same 1437 * pipeline, this will both host and link in the same
@@ -1666,6 +1784,14 @@ static const struct snd_soc_tplg_bytes_ext_ops skl_tlv_ops[] = {
1666 skl_tplg_tlv_control_set}, 1784 skl_tplg_tlv_control_set},
1667}; 1785};
1668 1786
1787static const struct snd_soc_tplg_kcontrol_ops skl_tplg_kcontrol_ops[] = {
1788 {
1789 .id = SKL_CONTROL_TYPE_MIC_SELECT,
1790 .get = skl_tplg_mic_control_get,
1791 .put = skl_tplg_mic_control_set,
1792 },
1793};
1794
1669static int skl_tplg_fill_pipe_tkn(struct device *dev, 1795static int skl_tplg_fill_pipe_tkn(struct device *dev,
1670 struct skl_pipe *pipe, u32 tkn, 1796 struct skl_pipe *pipe, u32 tkn,
1671 u32 tkn_val) 1797 u32 tkn_val)
@@ -1995,7 +2121,7 @@ static int skl_tplg_get_token(struct device *dev,
1995 mconfig->converter = tkn_elem->value; 2121 mconfig->converter = tkn_elem->value;
1996 break; 2122 break;
1997 2123
1998 case SKL_TKL_U32_D0I3_CAPS: 2124 case SKL_TKN_U32_D0I3_CAPS:
1999 mconfig->d0i3_caps = tkn_elem->value; 2125 mconfig->d0i3_caps = tkn_elem->value;
2000 break; 2126 break;
2001 2127
@@ -2070,12 +2196,26 @@ static int skl_tplg_get_token(struct device *dev,
2070 2196
2071 break; 2197 break;
2072 2198
2199 case SKL_TKN_U32_CAPS_SET_PARAMS:
2200 mconfig->formats_config.set_params =
2201 tkn_elem->value;
2202 break;
2203
2204 case SKL_TKN_U32_CAPS_PARAMS_ID:
2205 mconfig->formats_config.param_id =
2206 tkn_elem->value;
2207 break;
2208
2073 case SKL_TKN_U32_PROC_DOMAIN: 2209 case SKL_TKN_U32_PROC_DOMAIN:
2074 mconfig->domain = 2210 mconfig->domain =
2075 tkn_elem->value; 2211 tkn_elem->value;
2076 2212
2077 break; 2213 break;
2078 2214
2215 case SKL_TKN_U32_DMA_BUF_SIZE:
2216 mconfig->dma_buffer_size = tkn_elem->value;
2217 break;
2218
2079 case SKL_TKN_U8_IN_PIN_TYPE: 2219 case SKL_TKN_U8_IN_PIN_TYPE:
2080 case SKL_TKN_U8_OUT_PIN_TYPE: 2220 case SKL_TKN_U8_OUT_PIN_TYPE:
2081 case SKL_TKN_U8_CONN_TYPE: 2221 case SKL_TKN_U8_CONN_TYPE:
@@ -2147,7 +2287,7 @@ static int skl_tplg_get_tokens(struct device *dev,
2147 tuple_size += tkn_count * sizeof(*tkn_elem); 2287 tuple_size += tkn_count * sizeof(*tkn_elem);
2148 } 2288 }
2149 2289
2150 return 0; 2290 return off;
2151} 2291}
2152 2292
2153/* 2293/*
@@ -2198,10 +2338,11 @@ static int skl_tplg_get_pvt_data(struct snd_soc_tplg_dapm_widget *tplg_w,
2198 num_blocks = ret; 2338 num_blocks = ret;
2199 2339
2200 off += array->size; 2340 off += array->size;
2201 array = (struct snd_soc_tplg_vendor_array *)(tplg_w->priv.data + off);
2202
2203 /* Read the BLOCK_TYPE and BLOCK_SIZE descriptor */ 2341 /* Read the BLOCK_TYPE and BLOCK_SIZE descriptor */
2204 while (num_blocks > 0) { 2342 while (num_blocks > 0) {
2343 array = (struct snd_soc_tplg_vendor_array *)
2344 (tplg_w->priv.data + off);
2345
2205 ret = skl_tplg_get_desc_blocks(dev, array); 2346 ret = skl_tplg_get_desc_blocks(dev, array);
2206 2347
2207 if (ret < 0) 2348 if (ret < 0)
@@ -2237,7 +2378,9 @@ static int skl_tplg_get_pvt_data(struct snd_soc_tplg_dapm_widget *tplg_w,
2237 memcpy(mconfig->formats_config.caps, data, 2378 memcpy(mconfig->formats_config.caps, data,
2238 mconfig->formats_config.caps_size); 2379 mconfig->formats_config.caps_size);
2239 --num_blocks; 2380 --num_blocks;
2381 ret = mconfig->formats_config.caps_size;
2240 } 2382 }
2383 off += ret;
2241 } 2384 }
2242 2385
2243 return 0; 2386 return 0;
@@ -2329,6 +2472,9 @@ static int skl_tplg_widget_load(struct snd_soc_component *cmpnt,
2329 ret = skl_tplg_get_pvt_data(tplg_w, skl, bus->dev, mconfig); 2472 ret = skl_tplg_get_pvt_data(tplg_w, skl, bus->dev, mconfig);
2330 if (ret < 0) 2473 if (ret < 0)
2331 return ret; 2474 return ret;
2475
2476 skl_debug_init_module(skl->debugfs, w, mconfig);
2477
2332bind_event: 2478bind_event:
2333 if (tplg_w->event_type == 0) { 2479 if (tplg_w->event_type == 0) {
2334 dev_dbg(bus->dev, "ASoC: No event handler required\n"); 2480 dev_dbg(bus->dev, "ASoC: No event handler required\n");
@@ -2377,14 +2523,34 @@ static int skl_init_algo_data(struct device *dev, struct soc_bytes_ext *be,
2377 return 0; 2523 return 0;
2378} 2524}
2379 2525
2526static int skl_init_enum_data(struct device *dev, struct soc_enum *se,
2527 struct snd_soc_tplg_enum_control *ec)
2528{
2529
2530 void *data;
2531
2532 if (ec->priv.size) {
2533 data = devm_kzalloc(dev, sizeof(ec->priv.size), GFP_KERNEL);
2534 if (!data)
2535 return -ENOMEM;
2536 memcpy(data, ec->priv.data, ec->priv.size);
2537 se->dobj.private = data;
2538 }
2539
2540 return 0;
2541
2542}
2543
2380static int skl_tplg_control_load(struct snd_soc_component *cmpnt, 2544static int skl_tplg_control_load(struct snd_soc_component *cmpnt,
2381 struct snd_kcontrol_new *kctl, 2545 struct snd_kcontrol_new *kctl,
2382 struct snd_soc_tplg_ctl_hdr *hdr) 2546 struct snd_soc_tplg_ctl_hdr *hdr)
2383{ 2547{
2384 struct soc_bytes_ext *sb; 2548 struct soc_bytes_ext *sb;
2385 struct snd_soc_tplg_bytes_control *tplg_bc; 2549 struct snd_soc_tplg_bytes_control *tplg_bc;
2550 struct snd_soc_tplg_enum_control *tplg_ec;
2386 struct hdac_ext_bus *ebus = snd_soc_component_get_drvdata(cmpnt); 2551 struct hdac_ext_bus *ebus = snd_soc_component_get_drvdata(cmpnt);
2387 struct hdac_bus *bus = ebus_to_hbus(ebus); 2552 struct hdac_bus *bus = ebus_to_hbus(ebus);
2553 struct soc_enum *se;
2388 2554
2389 switch (hdr->ops.info) { 2555 switch (hdr->ops.info) {
2390 case SND_SOC_TPLG_CTL_BYTES: 2556 case SND_SOC_TPLG_CTL_BYTES:
@@ -2398,6 +2564,17 @@ static int skl_tplg_control_load(struct snd_soc_component *cmpnt,
2398 } 2564 }
2399 break; 2565 break;
2400 2566
2567 case SND_SOC_TPLG_CTL_ENUM:
2568 tplg_ec = container_of(hdr,
2569 struct snd_soc_tplg_enum_control, hdr);
2570 if (kctl->access & SNDRV_CTL_ELEM_ACCESS_READWRITE) {
2571 se = (struct soc_enum *)kctl->private_value;
2572 if (tplg_ec->priv.size)
2573 return skl_init_enum_data(bus->dev, se,
2574 tplg_ec);
2575 }
2576 break;
2577
2401 default: 2578 default:
2402 dev_warn(bus->dev, "Control load not supported %d:%d:%d\n", 2579 dev_warn(bus->dev, "Control load not supported %d:%d:%d\n",
2403 hdr->ops.get, hdr->ops.put, hdr->ops.info); 2580 hdr->ops.get, hdr->ops.put, hdr->ops.info);
@@ -2626,6 +2803,8 @@ static struct snd_soc_tplg_ops skl_tplg_ops = {
2626 .control_load = skl_tplg_control_load, 2803 .control_load = skl_tplg_control_load,
2627 .bytes_ext_ops = skl_tlv_ops, 2804 .bytes_ext_ops = skl_tlv_ops,
2628 .bytes_ext_ops_count = ARRAY_SIZE(skl_tlv_ops), 2805 .bytes_ext_ops_count = ARRAY_SIZE(skl_tlv_ops),
2806 .io_ops = skl_tplg_kcontrol_ops,
2807 .io_ops_count = ARRAY_SIZE(skl_tplg_kcontrol_ops),
2629 .manifest = skl_manifest_load, 2808 .manifest = skl_manifest_load,
2630}; 2809};
2631 2810
diff --git a/sound/soc/intel/skylake/skl-topology.h b/sound/soc/intel/skylake/skl-topology.h
index cc64d6bdb4f6..c25e8868b84e 100644
--- a/sound/soc/intel/skylake/skl-topology.h
+++ b/sound/soc/intel/skylake/skl-topology.h
@@ -39,6 +39,11 @@
39#define MODULE_MAX_IN_PINS 8 39#define MODULE_MAX_IN_PINS 8
40#define MODULE_MAX_OUT_PINS 8 40#define MODULE_MAX_OUT_PINS 8
41 41
42#define SKL_MIC_CH_SUPPORT 4
43#define SKL_MIC_MAX_CH_SUPPORT 8
44#define SKL_DEFAULT_MIC_SEL_GAIN 0x3FF
45#define SKL_MIC_SEL_SWITCH 0x3
46
42enum skl_channel_index { 47enum skl_channel_index {
43 SKL_CHANNEL_LEFT = 0, 48 SKL_CHANNEL_LEFT = 0,
44 SKL_CHANNEL_RIGHT = 1, 49 SKL_CHANNEL_RIGHT = 1,
@@ -309,11 +314,14 @@ struct skl_module_cfg {
309 u8 dev_type; 314 u8 dev_type;
310 u8 dma_id; 315 u8 dma_id;
311 u8 time_slot; 316 u8 time_slot;
317 u8 dmic_ch_combo_index;
318 u32 dmic_ch_type;
312 u32 params_fixup; 319 u32 params_fixup;
313 u32 converter; 320 u32 converter;
314 u32 vbus_id; 321 u32 vbus_id;
315 u32 mem_pages; 322 u32 mem_pages;
316 enum d0i3_capability d0i3_caps; 323 enum d0i3_capability d0i3_caps;
324 u32 dma_buffer_size; /* in milli seconds */
317 struct skl_module_pin *m_in_pin; 325 struct skl_module_pin *m_in_pin;
318 struct skl_module_pin *m_out_pin; 326 struct skl_module_pin *m_out_pin;
319 enum skl_module_type m_type; 327 enum skl_module_type m_type;
@@ -342,6 +350,19 @@ struct skl_module_deferred_bind {
342 struct list_head node; 350 struct list_head node;
343}; 351};
344 352
353struct skl_mic_sel_config {
354 u16 mic_switch;
355 u16 flags;
356 u16 blob[SKL_MIC_MAX_CH_SUPPORT][SKL_MIC_MAX_CH_SUPPORT];
357} __packed;
358
359enum skl_channel {
360 SKL_CH_MONO = 1,
361 SKL_CH_STEREO = 2,
362 SKL_CH_TRIO = 3,
363 SKL_CH_QUATRO = 4,
364};
365
345static inline struct skl *get_skl_ctx(struct device *dev) 366static inline struct skl *get_skl_ctx(struct device *dev)
346{ 367{
347 struct hdac_ext_bus *ebus = dev_get_drvdata(dev); 368 struct hdac_ext_bus *ebus = dev_get_drvdata(dev);
diff --git a/sound/soc/intel/skylake/skl-tplg-interface.h b/sound/soc/intel/skylake/skl-tplg-interface.h
index 7a2febf99019..f8d1749a2e0c 100644
--- a/sound/soc/intel/skylake/skl-tplg-interface.h
+++ b/sound/soc/intel/skylake/skl-tplg-interface.h
@@ -24,6 +24,7 @@
24 * SST types start at higher to avoid any overlapping in future 24 * SST types start at higher to avoid any overlapping in future
25 */ 25 */
26#define SKL_CONTROL_TYPE_BYTE_TLV 0x100 26#define SKL_CONTROL_TYPE_BYTE_TLV 0x100
27#define SKL_CONTROL_TYPE_MIC_SELECT 0x102
27 28
28#define HDA_SST_CFG_MAX 900 /* size of copier cfg*/ 29#define HDA_SST_CFG_MAX 900 /* size of copier cfg*/
29#define MAX_IN_QUEUE 8 30#define MAX_IN_QUEUE 8
@@ -82,6 +83,7 @@ enum skl_module_type {
82 SKL_MODULE_TYPE_ALGO, 83 SKL_MODULE_TYPE_ALGO,
83 SKL_MODULE_TYPE_BASE_OUTFMT, 84 SKL_MODULE_TYPE_BASE_OUTFMT,
84 SKL_MODULE_TYPE_KPB, 85 SKL_MODULE_TYPE_KPB,
86 SKL_MODULE_TYPE_MIC_SELECT,
85}; 87};
86 88
87enum skl_core_affinity { 89enum skl_core_affinity {
diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c
index 4c9b5781282b..334917ee41cf 100644
--- a/sound/soc/intel/skylake/skl.c
+++ b/sound/soc/intel/skylake/skl.c
@@ -866,6 +866,7 @@ static void skl_remove(struct pci_dev *pci)
866 /* codec removal, invoke bus_device_remove */ 866 /* codec removal, invoke bus_device_remove */
867 snd_hdac_ext_bus_device_remove(ebus); 867 snd_hdac_ext_bus_device_remove(ebus);
868 868
869 skl->debugfs = NULL;
869 skl_platform_unregister(&pci->dev); 870 skl_platform_unregister(&pci->dev);
870 skl_free_dsp(skl); 871 skl_free_dsp(skl);
871 skl_machine_device_unregister(skl); 872 skl_machine_device_unregister(skl);
@@ -876,29 +877,120 @@ static void skl_remove(struct pci_dev *pci)
876 dev_set_drvdata(&pci->dev, NULL); 877 dev_set_drvdata(&pci->dev, NULL);
877} 878}
878 879
880static struct sst_codecs skl_codecs = {
881 .num_codecs = 1,
882 .codecs = {"NAU88L25"}
883};
884
885static struct sst_codecs kbl_codecs = {
886 .num_codecs = 1,
887 .codecs = {"NAU88L25"}
888};
889
890static struct sst_codecs bxt_codecs = {
891 .num_codecs = 1,
892 .codecs = {"MX98357A"}
893};
894
895static struct sst_codecs kbl_poppy_codecs = {
896 .num_codecs = 1,
897 .codecs = {"10EC5663"}
898};
899
900static struct sst_codecs kbl_5663_5514_codecs = {
901 .num_codecs = 2,
902 .codecs = {"10EC5663", "10EC5514"}
903};
904
905
879static struct sst_acpi_mach sst_skl_devdata[] = { 906static struct sst_acpi_mach sst_skl_devdata[] = {
880 { "INT343A", "skl_alc286s_i2s", "intel/dsp_fw_release.bin", NULL, NULL, NULL }, 907 {
881 { "INT343B", "skl_n88l25_s4567", "intel/dsp_fw_release.bin", 908 .id = "INT343A",
882 NULL, NULL, &skl_dmic_data }, 909 .drv_name = "skl_alc286s_i2s",
883 { "MX98357A", "skl_n88l25_m98357a", "intel/dsp_fw_release.bin", 910 .fw_filename = "intel/dsp_fw_release.bin",
884 NULL, NULL, &skl_dmic_data }, 911 },
912 {
913 .id = "INT343B",
914 .drv_name = "skl_n88l25_s4567",
915 .fw_filename = "intel/dsp_fw_release.bin",
916 .machine_quirk = sst_acpi_codec_list,
917 .quirk_data = &skl_codecs,
918 .pdata = &skl_dmic_data
919 },
920 {
921 .id = "MX98357A",
922 .drv_name = "skl_n88l25_m98357a",
923 .fw_filename = "intel/dsp_fw_release.bin",
924 .machine_quirk = sst_acpi_codec_list,
925 .quirk_data = &skl_codecs,
926 .pdata = &skl_dmic_data
927 },
885 {} 928 {}
886}; 929};
887 930
888static struct sst_acpi_mach sst_bxtp_devdata[] = { 931static struct sst_acpi_mach sst_bxtp_devdata[] = {
889 { "INT343A", "bxt_alc298s_i2s", "intel/dsp_fw_bxtn.bin", NULL, NULL, NULL }, 932 {
890 { "DLGS7219", "bxt_da7219_max98357a_i2s", "intel/dsp_fw_bxtn.bin", NULL, NULL, NULL }, 933 .id = "INT343A",
934 .drv_name = "bxt_alc298s_i2s",
935 .fw_filename = "intel/dsp_fw_bxtn.bin",
936 },
937 {
938 .id = "DLGS7219",
939 .drv_name = "bxt_da7219_max98357a_i2s",
940 .fw_filename = "intel/dsp_fw_bxtn.bin",
941 .machine_quirk = sst_acpi_codec_list,
942 .quirk_data = &bxt_codecs,
943 },
891}; 944};
892 945
893static struct sst_acpi_mach sst_kbl_devdata[] = { 946static struct sst_acpi_mach sst_kbl_devdata[] = {
894 { "INT343A", "kbl_alc286s_i2s", "intel/dsp_fw_kbl.bin", NULL, NULL, NULL }, 947 {
895 { "INT343B", "kbl_n88l25_s4567", "intel/dsp_fw_kbl.bin", NULL, NULL, &skl_dmic_data }, 948 .id = "INT343A",
896 { "MX98357A", "kbl_n88l25_m98357a", "intel/dsp_fw_kbl.bin", NULL, NULL, &skl_dmic_data }, 949 .drv_name = "kbl_alc286s_i2s",
950 .fw_filename = "intel/dsp_fw_kbl.bin",
951 },
952 {
953 .id = "INT343B",
954 .drv_name = "kbl_n88l25_s4567",
955 .fw_filename = "intel/dsp_fw_kbl.bin",
956 .machine_quirk = sst_acpi_codec_list,
957 .quirk_data = &kbl_codecs,
958 .pdata = &skl_dmic_data
959 },
960 {
961 .id = "MX98357A",
962 .drv_name = "kbl_n88l25_m98357a",
963 .fw_filename = "intel/dsp_fw_kbl.bin",
964 .machine_quirk = sst_acpi_codec_list,
965 .quirk_data = &kbl_codecs,
966 .pdata = &skl_dmic_data
967 },
968 {
969 .id = "MX98927",
970 .drv_name = "kbl_r5514_5663_max",
971 .fw_filename = "intel/dsp_fw_kbl.bin",
972 .machine_quirk = sst_acpi_codec_list,
973 .quirk_data = &kbl_5663_5514_codecs,
974 .pdata = &skl_dmic_data
975 },
976 {
977 .id = "MX98927",
978 .drv_name = "kbl_rt5663_m98927",
979 .fw_filename = "intel/dsp_fw_kbl.bin",
980 .machine_quirk = sst_acpi_codec_list,
981 .quirk_data = &kbl_poppy_codecs,
982 .pdata = &skl_dmic_data
983 },
984
897 {} 985 {}
898}; 986};
899 987
900static struct sst_acpi_mach sst_glk_devdata[] = { 988static struct sst_acpi_mach sst_glk_devdata[] = {
901 { "INT343A", "glk_alc298s_i2s", "intel/dsp_fw_glk.bin", NULL, NULL, NULL }, 989 {
990 .id = "INT343A",
991 .drv_name = "glk_alc298s_i2s",
992 .fw_filename = "intel/dsp_fw_glk.bin",
993 },
902}; 994};
903 995
904/* PCI IDs */ 996/* PCI IDs */
diff --git a/sound/soc/intel/skylake/skl.h b/sound/soc/intel/skylake/skl.h
index 2a630fcb7f08..a6b134b4c037 100644
--- a/sound/soc/intel/skylake/skl.h
+++ b/sound/soc/intel/skylake/skl.h
@@ -23,6 +23,7 @@
23 23
24#include <sound/hda_register.h> 24#include <sound/hda_register.h>
25#include <sound/hdaudio_ext.h> 25#include <sound/hdaudio_ext.h>
26#include <sound/soc.h>
26#include "skl-nhlt.h" 27#include "skl-nhlt.h"
27 28
28#define SKL_SUSPEND_DELAY 2000 29#define SKL_SUSPEND_DELAY 2000
@@ -42,6 +43,8 @@ struct skl_dsp_resource {
42 u32 mem; 43 u32 mem;
43}; 44};
44 45
46struct skl_debug;
47
45struct skl { 48struct skl {
46 struct hdac_ext_bus ebus; 49 struct hdac_ext_bus ebus;
47 struct pci_dev *pci; 50 struct pci_dev *pci;
@@ -66,6 +69,8 @@ struct skl {
66 int supend_active; 69 int supend_active;
67 70
68 struct work_struct probe_work; 71 struct work_struct probe_work;
72
73 struct skl_debug *debugfs;
69}; 74};
70 75
71#define skl_to_ebus(s) (&(s)->ebus) 76#define skl_to_ebus(s) (&(s)->ebus)
@@ -116,4 +121,22 @@ void skl_update_d0i3c(struct device *dev, bool enable);
116int skl_nhlt_create_sysfs(struct skl *skl); 121int skl_nhlt_create_sysfs(struct skl *skl);
117void skl_nhlt_remove_sysfs(struct skl *skl); 122void skl_nhlt_remove_sysfs(struct skl *skl);
118 123
124struct skl_module_cfg;
125
126#ifdef CONFIG_DEBUG_FS
127struct skl_debug *skl_debugfs_init(struct skl *skl);
128void skl_debug_init_module(struct skl_debug *d,
129 struct snd_soc_dapm_widget *w,
130 struct skl_module_cfg *mconfig);
131#else
132static inline struct skl_debug *skl_debugfs_init(struct skl *skl)
133{
134 return NULL;
135}
136static inline void skl_debug_init_module(struct skl_debug *d,
137 struct snd_soc_dapm_widget *w,
138 struct skl_module_cfg *mconfig)
139{}
140#endif
141
119#endif /* __SOUND_SOC_SKL_H */ 142#endif /* __SOUND_SOC_SKL_H */
diff --git a/sound/soc/mediatek/mt2701/mt2701-cs42448.c b/sound/soc/mediatek/mt2701/mt2701-cs42448.c
index aa5b31b121e3..70f61d53fe05 100644
--- a/sound/soc/mediatek/mt2701/mt2701-cs42448.c
+++ b/sound/soc/mediatek/mt2701/mt2701-cs42448.c
@@ -107,7 +107,7 @@ static const struct snd_kcontrol_new mt2701_cs42448_controls[] = {
107 107
108static const unsigned int mt2701_cs42448_sampling_rates[] = {48000}; 108static const unsigned int mt2701_cs42448_sampling_rates[] = {48000};
109 109
110static struct snd_pcm_hw_constraint_list mt2701_cs42448_constraints_rates = { 110static const struct snd_pcm_hw_constraint_list mt2701_cs42448_constraints_rates = {
111 .count = ARRAY_SIZE(mt2701_cs42448_sampling_rates), 111 .count = ARRAY_SIZE(mt2701_cs42448_sampling_rates),
112 .list = mt2701_cs42448_sampling_rates, 112 .list = mt2701_cs42448_sampling_rates,
113 .mask = 0, 113 .mask = 0,
diff --git a/sound/soc/omap/mcbsp.c b/sound/soc/omap/mcbsp.c
index 06fec5699cc8..7a54e3083203 100644
--- a/sound/soc/omap/mcbsp.c
+++ b/sound/soc/omap/mcbsp.c
@@ -835,15 +835,11 @@ static ssize_t dma_op_mode_store(struct device *dev,
835 const char *buf, size_t size) 835 const char *buf, size_t size)
836{ 836{
837 struct omap_mcbsp *mcbsp = dev_get_drvdata(dev); 837 struct omap_mcbsp *mcbsp = dev_get_drvdata(dev);
838 const char * const *s; 838 int i;
839 int i = 0;
840
841 for (s = &dma_op_modes[i]; i < ARRAY_SIZE(dma_op_modes); s++, i++)
842 if (sysfs_streq(buf, *s))
843 break;
844 839
845 if (i == ARRAY_SIZE(dma_op_modes)) 840 i = sysfs_match_string(dma_op_modes, buf);
846 return -EINVAL; 841 if (i < 0)
842 return i;
847 843
848 spin_lock_irq(&mcbsp->lock); 844 spin_lock_irq(&mcbsp->lock);
849 if (!mcbsp->free) { 845 if (!mcbsp->free) {
diff --git a/sound/soc/pxa/Kconfig b/sound/soc/pxa/Kconfig
index 823b5a236d8d..960744e46edc 100644
--- a/sound/soc/pxa/Kconfig
+++ b/sound/soc/pxa/Kconfig
@@ -1,6 +1,6 @@
1config SND_PXA2XX_SOC 1config SND_PXA2XX_SOC
2 tristate "SoC Audio for the Intel PXA2xx chip" 2 tristate "SoC Audio for the Intel PXA2xx chip"
3 depends on ARCH_PXA 3 depends on ARCH_PXA || COMPILE_TEST
4 select SND_PXA2XX_LIB 4 select SND_PXA2XX_LIB
5 help 5 help
6 Say Y or M if you want to add support for codecs attached to 6 Say Y or M if you want to add support for codecs attached to
diff --git a/sound/soc/rockchip/Kconfig b/sound/soc/rockchip/Kconfig
index e3ca1e973de5..c84487805876 100644
--- a/sound/soc/rockchip/Kconfig
+++ b/sound/soc/rockchip/Kconfig
@@ -15,6 +15,15 @@ config SND_SOC_ROCKCHIP_I2S
15 Rockchip I2S device. The device supports upto maximum of 15 Rockchip I2S device. The device supports upto maximum of
16 8 channels each for play and record. 16 8 channels each for play and record.
17 17
18config SND_SOC_ROCKCHIP_PDM
19 tristate "Rockchip PDM Controller Driver"
20 depends on CLKDEV_LOOKUP && SND_SOC_ROCKCHIP
21 select SND_SOC_GENERIC_DMAENGINE_PCM
22 help
23 Say Y or M if you want to add support for PDM driver for
24 Rockchip PDM Controller. The Controller supports up to maximum of
25 8 channels record.
26
18config SND_SOC_ROCKCHIP_SPDIF 27config SND_SOC_ROCKCHIP_SPDIF
19 tristate "Rockchip SPDIF Device Driver" 28 tristate "Rockchip SPDIF Device Driver"
20 depends on CLKDEV_LOOKUP && SND_SOC_ROCKCHIP 29 depends on CLKDEV_LOOKUP && SND_SOC_ROCKCHIP
diff --git a/sound/soc/rockchip/Makefile b/sound/soc/rockchip/Makefile
index 991f91bea9f9..105f0e14a4ab 100644
--- a/sound/soc/rockchip/Makefile
+++ b/sound/soc/rockchip/Makefile
@@ -1,8 +1,10 @@
1# ROCKCHIP Platform Support 1# ROCKCHIP Platform Support
2snd-soc-rockchip-i2s-objs := rockchip_i2s.o 2snd-soc-rockchip-i2s-objs := rockchip_i2s.o
3snd-soc-rockchip-pdm-objs := rockchip_pdm.o
3snd-soc-rockchip-spdif-objs := rockchip_spdif.o 4snd-soc-rockchip-spdif-objs := rockchip_spdif.o
4 5
5obj-$(CONFIG_SND_SOC_ROCKCHIP_I2S) += snd-soc-rockchip-i2s.o 6obj-$(CONFIG_SND_SOC_ROCKCHIP_I2S) += snd-soc-rockchip-i2s.o
7obj-$(CONFIG_SND_SOC_ROCKCHIP_PDM) += snd-soc-rockchip-pdm.o
6obj-$(CONFIG_SND_SOC_ROCKCHIP_SPDIF) += snd-soc-rockchip-spdif.o 8obj-$(CONFIG_SND_SOC_ROCKCHIP_SPDIF) += snd-soc-rockchip-spdif.o
7 9
8snd-soc-rockchip-max98090-objs := rockchip_max98090.o 10snd-soc-rockchip-max98090-objs := rockchip_max98090.o
diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c
index 974915cb4c4f..199338fdeda0 100644
--- a/sound/soc/rockchip/rockchip_i2s.c
+++ b/sound/soc/rockchip/rockchip_i2s.c
@@ -116,6 +116,7 @@ static void rockchip_snd_txctrl(struct rk_i2s_dev *i2s, int on)
116 I2S_XFER_TXS_STOP | 116 I2S_XFER_TXS_STOP |
117 I2S_XFER_RXS_STOP); 117 I2S_XFER_RXS_STOP);
118 118
119 udelay(150);
119 regmap_update_bits(i2s->regmap, I2S_CLR, 120 regmap_update_bits(i2s->regmap, I2S_CLR,
120 I2S_CLR_TXC | I2S_CLR_RXC, 121 I2S_CLR_TXC | I2S_CLR_RXC,
121 I2S_CLR_TXC | I2S_CLR_RXC); 122 I2S_CLR_TXC | I2S_CLR_RXC);
@@ -162,6 +163,7 @@ static void rockchip_snd_rxctrl(struct rk_i2s_dev *i2s, int on)
162 I2S_XFER_TXS_STOP | 163 I2S_XFER_TXS_STOP |
163 I2S_XFER_RXS_STOP); 164 I2S_XFER_RXS_STOP);
164 165
166 udelay(150);
165 regmap_update_bits(i2s->regmap, I2S_CLR, 167 regmap_update_bits(i2s->regmap, I2S_CLR,
166 I2S_CLR_TXC | I2S_CLR_RXC, 168 I2S_CLR_TXC | I2S_CLR_RXC,
167 I2S_CLR_TXC | I2S_CLR_RXC); 169 I2S_CLR_TXC | I2S_CLR_RXC);
@@ -204,7 +206,21 @@ static int rockchip_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
204 206
205 regmap_update_bits(i2s->regmap, I2S_CKR, mask, val); 207 regmap_update_bits(i2s->regmap, I2S_CKR, mask, val);
206 208
207 mask = I2S_TXCR_IBM_MASK; 209 mask = I2S_CKR_CKP_MASK;
210 switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
211 case SND_SOC_DAIFMT_NB_NF:
212 val = I2S_CKR_CKP_NEG;
213 break;
214 case SND_SOC_DAIFMT_IB_NF:
215 val = I2S_CKR_CKP_POS;
216 break;
217 default:
218 return -EINVAL;
219 }
220
221 regmap_update_bits(i2s->regmap, I2S_CKR, mask, val);
222
223 mask = I2S_TXCR_IBM_MASK | I2S_TXCR_TFS_MASK | I2S_TXCR_PBM_MASK;
208 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { 224 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
209 case SND_SOC_DAIFMT_RIGHT_J: 225 case SND_SOC_DAIFMT_RIGHT_J:
210 val = I2S_TXCR_IBM_RSJM; 226 val = I2S_TXCR_IBM_RSJM;
@@ -215,13 +231,19 @@ static int rockchip_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
215 case SND_SOC_DAIFMT_I2S: 231 case SND_SOC_DAIFMT_I2S:
216 val = I2S_TXCR_IBM_NORMAL; 232 val = I2S_TXCR_IBM_NORMAL;
217 break; 233 break;
234 case SND_SOC_DAIFMT_DSP_A: /* PCM no delay mode */
235 val = I2S_TXCR_TFS_PCM;
236 break;
237 case SND_SOC_DAIFMT_DSP_B: /* PCM delay 1 mode */
238 val = I2S_TXCR_TFS_PCM | I2S_TXCR_PBM_MODE(1);
239 break;
218 default: 240 default:
219 return -EINVAL; 241 return -EINVAL;
220 } 242 }
221 243
222 regmap_update_bits(i2s->regmap, I2S_TXCR, mask, val); 244 regmap_update_bits(i2s->regmap, I2S_TXCR, mask, val);
223 245
224 mask = I2S_RXCR_IBM_MASK; 246 mask = I2S_RXCR_IBM_MASK | I2S_RXCR_TFS_MASK | I2S_RXCR_PBM_MASK;
225 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { 247 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
226 case SND_SOC_DAIFMT_RIGHT_J: 248 case SND_SOC_DAIFMT_RIGHT_J:
227 val = I2S_RXCR_IBM_RSJM; 249 val = I2S_RXCR_IBM_RSJM;
@@ -232,6 +254,12 @@ static int rockchip_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
232 case SND_SOC_DAIFMT_I2S: 254 case SND_SOC_DAIFMT_I2S:
233 val = I2S_RXCR_IBM_NORMAL; 255 val = I2S_RXCR_IBM_NORMAL;
234 break; 256 break;
257 case SND_SOC_DAIFMT_DSP_A: /* PCM no delay mode */
258 val = I2S_RXCR_TFS_PCM;
259 break;
260 case SND_SOC_DAIFMT_DSP_B: /* PCM delay 1 mode */
261 val = I2S_RXCR_TFS_PCM | I2S_RXCR_PBM_MODE(1);
262 break;
235 default: 263 default:
236 return -EINVAL; 264 return -EINVAL;
237 } 265 }
@@ -615,12 +643,13 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
615 goto err_pm_disable; 643 goto err_pm_disable;
616 } 644 }
617 645
618 soc_dai = devm_kzalloc(&pdev->dev, 646 soc_dai = devm_kmemdup(&pdev->dev, &rockchip_i2s_dai,
619 sizeof(*soc_dai), GFP_KERNEL); 647 sizeof(*soc_dai), GFP_KERNEL);
620 if (!soc_dai) 648 if (!soc_dai) {
621 return -ENOMEM; 649 ret = -ENOMEM;
650 goto err_pm_disable;
651 }
622 652
623 memcpy(soc_dai, &rockchip_i2s_dai, sizeof(*soc_dai));
624 if (!of_property_read_u32(node, "rockchip,playback-channels", &val)) { 653 if (!of_property_read_u32(node, "rockchip,playback-channels", &val)) {
625 if (val >= 2 && val <= 8) 654 if (val >= 2 && val <= 8)
626 soc_dai->playback.channels_max = val; 655 soc_dai->playback.channels_max = val;
diff --git a/sound/soc/rockchip/rockchip_i2s.h b/sound/soc/rockchip/rockchip_i2s.h
index 31f11fd25393..a7b8527d8a73 100644
--- a/sound/soc/rockchip/rockchip_i2s.h
+++ b/sound/soc/rockchip/rockchip_i2s.h
@@ -41,6 +41,7 @@
41#define I2S_TXCR_TFS_SHIFT 5 41#define I2S_TXCR_TFS_SHIFT 5
42#define I2S_TXCR_TFS_I2S (0 << I2S_TXCR_TFS_SHIFT) 42#define I2S_TXCR_TFS_I2S (0 << I2S_TXCR_TFS_SHIFT)
43#define I2S_TXCR_TFS_PCM (1 << I2S_TXCR_TFS_SHIFT) 43#define I2S_TXCR_TFS_PCM (1 << I2S_TXCR_TFS_SHIFT)
44#define I2S_TXCR_TFS_MASK (1 << I2S_TXCR_TFS_SHIFT)
44#define I2S_TXCR_VDW_SHIFT 0 45#define I2S_TXCR_VDW_SHIFT 0
45#define I2S_TXCR_VDW(x) ((x - 1) << I2S_TXCR_VDW_SHIFT) 46#define I2S_TXCR_VDW(x) ((x - 1) << I2S_TXCR_VDW_SHIFT)
46#define I2S_TXCR_VDW_MASK (0x1f << I2S_TXCR_VDW_SHIFT) 47#define I2S_TXCR_VDW_MASK (0x1f << I2S_TXCR_VDW_SHIFT)
@@ -70,6 +71,7 @@
70#define I2S_RXCR_TFS_SHIFT 5 71#define I2S_RXCR_TFS_SHIFT 5
71#define I2S_RXCR_TFS_I2S (0 << I2S_RXCR_TFS_SHIFT) 72#define I2S_RXCR_TFS_I2S (0 << I2S_RXCR_TFS_SHIFT)
72#define I2S_RXCR_TFS_PCM (1 << I2S_RXCR_TFS_SHIFT) 73#define I2S_RXCR_TFS_PCM (1 << I2S_RXCR_TFS_SHIFT)
74#define I2S_RXCR_TFS_MASK (1 << I2S_RXCR_TFS_SHIFT)
73#define I2S_RXCR_VDW_SHIFT 0 75#define I2S_RXCR_VDW_SHIFT 0
74#define I2S_RXCR_VDW(x) ((x - 1) << I2S_RXCR_VDW_SHIFT) 76#define I2S_RXCR_VDW(x) ((x - 1) << I2S_RXCR_VDW_SHIFT)
75#define I2S_RXCR_VDW_MASK (0x1f << I2S_RXCR_VDW_SHIFT) 77#define I2S_RXCR_VDW_MASK (0x1f << I2S_RXCR_VDW_SHIFT)
@@ -91,6 +93,7 @@
91#define I2S_CKR_CKP_SHIFT 26 93#define I2S_CKR_CKP_SHIFT 26
92#define I2S_CKR_CKP_NEG (0 << I2S_CKR_CKP_SHIFT) 94#define I2S_CKR_CKP_NEG (0 << I2S_CKR_CKP_SHIFT)
93#define I2S_CKR_CKP_POS (1 << I2S_CKR_CKP_SHIFT) 95#define I2S_CKR_CKP_POS (1 << I2S_CKR_CKP_SHIFT)
96#define I2S_CKR_CKP_MASK (1 << I2S_CKR_CKP_SHIFT)
94#define I2S_CKR_RLP_SHIFT 25 97#define I2S_CKR_RLP_SHIFT 25
95#define I2S_CKR_RLP_NORMAL (0 << I2S_CKR_RLP_SHIFT) 98#define I2S_CKR_RLP_NORMAL (0 << I2S_CKR_RLP_SHIFT)
96#define I2S_CKR_RLP_OPPSITE (1 << I2S_CKR_RLP_SHIFT) 99#define I2S_CKR_RLP_OPPSITE (1 << I2S_CKR_RLP_SHIFT)
diff --git a/sound/soc/rockchip/rockchip_pdm.c b/sound/soc/rockchip/rockchip_pdm.c
new file mode 100644
index 000000000000..c5ddeed97260
--- /dev/null
+++ b/sound/soc/rockchip/rockchip_pdm.c
@@ -0,0 +1,516 @@
1/*
2 * Rockchip PDM ALSA SoC Digital Audio Interface(DAI) driver
3 *
4 * Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd
5 *
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 */
16
17#include <linux/module.h>
18#include <linux/clk.h>
19#include <linux/of.h>
20#include <linux/pm_runtime.h>
21#include <linux/regmap.h>
22#include <sound/dmaengine_pcm.h>
23#include <sound/pcm_params.h>
24
25#include "rockchip_pdm.h"
26
27#define PDM_DMA_BURST_SIZE (16) /* size * width: 16*4 = 64 bytes */
28
29struct rk_pdm_dev {
30 struct device *dev;
31 struct clk *clk;
32 struct clk *hclk;
33 struct regmap *regmap;
34 struct snd_dmaengine_dai_dma_data capture_dma_data;
35};
36
37struct rk_pdm_clkref {
38 unsigned int sr;
39 unsigned int clk;
40};
41
42static struct rk_pdm_clkref clkref[] = {
43 { 8000, 40960000 },
44 { 11025, 56448000 },
45 { 12000, 61440000 },
46};
47
48static unsigned int get_pdm_clk(unsigned int sr)
49{
50 unsigned int i, count, clk, div;
51
52 clk = 0;
53 if (!sr)
54 return clk;
55
56 count = ARRAY_SIZE(clkref);
57 for (i = 0; i < count; i++) {
58 if (sr % clkref[i].sr)
59 continue;
60 div = sr / clkref[i].sr;
61 if ((div & (div - 1)) == 0) {
62 clk = clkref[i].clk;
63 break;
64 }
65 }
66
67 return clk;
68}
69
70static inline struct rk_pdm_dev *to_info(struct snd_soc_dai *dai)
71{
72 return snd_soc_dai_get_drvdata(dai);
73}
74
75static void rockchip_pdm_rxctrl(struct rk_pdm_dev *pdm, int on)
76{
77 if (on) {
78 regmap_update_bits(pdm->regmap, PDM_DMA_CTRL,
79 PDM_DMA_RD_MSK, PDM_DMA_RD_EN);
80 regmap_update_bits(pdm->regmap, PDM_SYSCONFIG,
81 PDM_RX_MASK, PDM_RX_START);
82 } else {
83 regmap_update_bits(pdm->regmap, PDM_DMA_CTRL,
84 PDM_DMA_RD_MSK, PDM_DMA_RD_DIS);
85 regmap_update_bits(pdm->regmap, PDM_SYSCONFIG,
86 PDM_RX_MASK | PDM_RX_CLR_MASK,
87 PDM_RX_STOP | PDM_RX_CLR_WR);
88 }
89}
90
91static int rockchip_pdm_hw_params(struct snd_pcm_substream *substream,
92 struct snd_pcm_hw_params *params,
93 struct snd_soc_dai *dai)
94{
95 struct rk_pdm_dev *pdm = to_info(dai);
96 unsigned int val = 0;
97 unsigned int clk_rate, clk_div, samplerate;
98 int ret;
99
100 samplerate = params_rate(params);
101 clk_rate = get_pdm_clk(samplerate);
102 if (!clk_rate)
103 return -EINVAL;
104
105 ret = clk_set_rate(pdm->clk, clk_rate);
106 if (ret)
107 return -EINVAL;
108
109 clk_div = DIV_ROUND_CLOSEST(clk_rate, samplerate);
110
111 switch (clk_div) {
112 case 320:
113 val = PDM_CLK_320FS;
114 break;
115 case 640:
116 val = PDM_CLK_640FS;
117 break;
118 case 1280:
119 val = PDM_CLK_1280FS;
120 break;
121 case 2560:
122 val = PDM_CLK_2560FS;
123 break;
124 case 5120:
125 val = PDM_CLK_5120FS;
126 break;
127 default:
128 dev_err(pdm->dev, "unsupported div: %d\n", clk_div);
129 return -EINVAL;
130 }
131
132 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_DS_RATIO_MSK, val);
133 regmap_update_bits(pdm->regmap, PDM_HPF_CTRL,
134 PDM_HPF_CF_MSK, PDM_HPF_60HZ);
135 regmap_update_bits(pdm->regmap, PDM_HPF_CTRL,
136 PDM_HPF_LE | PDM_HPF_RE, PDM_HPF_LE | PDM_HPF_RE);
137 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_CLK_EN, PDM_CLK_EN);
138
139 val = 0;
140 switch (params_format(params)) {
141 case SNDRV_PCM_FORMAT_S8:
142 val |= PDM_VDW(8);
143 break;
144 case SNDRV_PCM_FORMAT_S16_LE:
145 val |= PDM_VDW(16);
146 break;
147 case SNDRV_PCM_FORMAT_S20_3LE:
148 val |= PDM_VDW(20);
149 break;
150 case SNDRV_PCM_FORMAT_S24_LE:
151 val |= PDM_VDW(24);
152 break;
153 case SNDRV_PCM_FORMAT_S32_LE:
154 val |= PDM_VDW(32);
155 break;
156 default:
157 return -EINVAL;
158 }
159
160 switch (params_channels(params)) {
161 case 8:
162 val |= PDM_PATH3_EN;
163 /* fallthrough */
164 case 6:
165 val |= PDM_PATH2_EN;
166 /* fallthrough */
167 case 4:
168 val |= PDM_PATH1_EN;
169 /* fallthrough */
170 case 2:
171 val |= PDM_PATH0_EN;
172 break;
173 default:
174 dev_err(pdm->dev, "invalid channel: %d\n",
175 params_channels(params));
176 return -EINVAL;
177 }
178
179 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
180 regmap_update_bits(pdm->regmap, PDM_CTRL0,
181 PDM_PATH_MSK | PDM_VDW_MSK,
182 val);
183 regmap_update_bits(pdm->regmap, PDM_DMA_CTRL, PDM_DMA_RDL_MSK,
184 PDM_DMA_RDL(16));
185 regmap_update_bits(pdm->regmap, PDM_SYSCONFIG,
186 PDM_RX_MASK | PDM_RX_CLR_MASK,
187 PDM_RX_STOP | PDM_RX_CLR_WR);
188 }
189
190 return 0;
191}
192
193static int rockchip_pdm_set_fmt(struct snd_soc_dai *cpu_dai,
194 unsigned int fmt)
195{
196 struct rk_pdm_dev *pdm = to_info(cpu_dai);
197 unsigned int mask = 0, val = 0;
198
199 mask = PDM_CKP_MSK;
200 switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
201 case SND_SOC_DAIFMT_NB_NF:
202 val = PDM_CKP_NORMAL;
203 break;
204 case SND_SOC_DAIFMT_IB_NF:
205 val = PDM_CKP_INVERTED;
206 break;
207 default:
208 return -EINVAL;
209 }
210
211 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, mask, val);
212
213 return 0;
214}
215
216static int rockchip_pdm_trigger(struct snd_pcm_substream *substream, int cmd,
217 struct snd_soc_dai *dai)
218{
219 struct rk_pdm_dev *pdm = to_info(dai);
220 int ret = 0;
221
222 switch (cmd) {
223 case SNDRV_PCM_TRIGGER_START:
224 case SNDRV_PCM_TRIGGER_RESUME:
225 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
226 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
227 rockchip_pdm_rxctrl(pdm, 1);
228 break;
229 case SNDRV_PCM_TRIGGER_SUSPEND:
230 case SNDRV_PCM_TRIGGER_STOP:
231 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
232 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
233 rockchip_pdm_rxctrl(pdm, 0);
234 break;
235 default:
236 ret = -EINVAL;
237 break;
238 }
239
240 return ret;
241}
242
243static int rockchip_pdm_dai_probe(struct snd_soc_dai *dai)
244{
245 struct rk_pdm_dev *pdm = to_info(dai);
246
247 dai->capture_dma_data = &pdm->capture_dma_data;
248
249 return 0;
250}
251
252static struct snd_soc_dai_ops rockchip_pdm_dai_ops = {
253 .set_fmt = rockchip_pdm_set_fmt,
254 .trigger = rockchip_pdm_trigger,
255 .hw_params = rockchip_pdm_hw_params,
256};
257
258#define ROCKCHIP_PDM_RATES SNDRV_PCM_RATE_8000_192000
259#define ROCKCHIP_PDM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
260 SNDRV_PCM_FMTBIT_S20_3LE | \
261 SNDRV_PCM_FMTBIT_S24_LE | \
262 SNDRV_PCM_FMTBIT_S32_LE)
263
264static struct snd_soc_dai_driver rockchip_pdm_dai = {
265 .probe = rockchip_pdm_dai_probe,
266 .capture = {
267 .stream_name = "Capture",
268 .channels_min = 2,
269 .channels_max = 8,
270 .rates = ROCKCHIP_PDM_RATES,
271 .formats = ROCKCHIP_PDM_FORMATS,
272 },
273 .ops = &rockchip_pdm_dai_ops,
274 .symmetric_rates = 1,
275};
276
277static const struct snd_soc_component_driver rockchip_pdm_component = {
278 .name = "rockchip-pdm",
279};
280
281static int rockchip_pdm_runtime_suspend(struct device *dev)
282{
283 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
284
285 clk_disable_unprepare(pdm->clk);
286 clk_disable_unprepare(pdm->hclk);
287
288 return 0;
289}
290
291static int rockchip_pdm_runtime_resume(struct device *dev)
292{
293 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
294 int ret;
295
296 ret = clk_prepare_enable(pdm->clk);
297 if (ret) {
298 dev_err(pdm->dev, "clock enable failed %d\n", ret);
299 return ret;
300 }
301
302 ret = clk_prepare_enable(pdm->hclk);
303 if (ret) {
304 dev_err(pdm->dev, "hclock enable failed %d\n", ret);
305 return ret;
306 }
307
308 return 0;
309}
310
311static bool rockchip_pdm_wr_reg(struct device *dev, unsigned int reg)
312{
313 switch (reg) {
314 case PDM_SYSCONFIG:
315 case PDM_CTRL0:
316 case PDM_CTRL1:
317 case PDM_CLK_CTRL:
318 case PDM_HPF_CTRL:
319 case PDM_FIFO_CTRL:
320 case PDM_DMA_CTRL:
321 case PDM_INT_EN:
322 case PDM_INT_CLR:
323 case PDM_DATA_VALID:
324 return true;
325 default:
326 return false;
327 }
328}
329
330static bool rockchip_pdm_rd_reg(struct device *dev, unsigned int reg)
331{
332 switch (reg) {
333 case PDM_SYSCONFIG:
334 case PDM_CTRL0:
335 case PDM_CTRL1:
336 case PDM_CLK_CTRL:
337 case PDM_HPF_CTRL:
338 case PDM_FIFO_CTRL:
339 case PDM_DMA_CTRL:
340 case PDM_INT_EN:
341 case PDM_INT_CLR:
342 case PDM_INT_ST:
343 case PDM_DATA_VALID:
344 case PDM_VERSION:
345 return true;
346 default:
347 return false;
348 }
349}
350
351static bool rockchip_pdm_volatile_reg(struct device *dev, unsigned int reg)
352{
353 switch (reg) {
354 case PDM_SYSCONFIG:
355 case PDM_INT_CLR:
356 case PDM_INT_ST:
357 return true;
358 default:
359 return false;
360 }
361}
362
363static const struct regmap_config rockchip_pdm_regmap_config = {
364 .reg_bits = 32,
365 .reg_stride = 4,
366 .val_bits = 32,
367 .max_register = PDM_VERSION,
368 .writeable_reg = rockchip_pdm_wr_reg,
369 .readable_reg = rockchip_pdm_rd_reg,
370 .volatile_reg = rockchip_pdm_volatile_reg,
371 .cache_type = REGCACHE_FLAT,
372};
373
374static int rockchip_pdm_probe(struct platform_device *pdev)
375{
376 struct rk_pdm_dev *pdm;
377 struct resource *res;
378 void __iomem *regs;
379 int ret;
380
381 pdm = devm_kzalloc(&pdev->dev, sizeof(*pdm), GFP_KERNEL);
382 if (!pdm)
383 return -ENOMEM;
384
385 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
386 regs = devm_ioremap_resource(&pdev->dev, res);
387 if (IS_ERR(regs))
388 return PTR_ERR(regs);
389
390 pdm->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
391 &rockchip_pdm_regmap_config);
392 if (IS_ERR(pdm->regmap))
393 return PTR_ERR(pdm->regmap);
394
395 pdm->capture_dma_data.addr = res->start + PDM_RXFIFO_DATA;
396 pdm->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
397 pdm->capture_dma_data.maxburst = PDM_DMA_BURST_SIZE;
398
399 pdm->dev = &pdev->dev;
400 dev_set_drvdata(&pdev->dev, pdm);
401
402 pdm->clk = devm_clk_get(&pdev->dev, "pdm_clk");
403 if (IS_ERR(pdm->clk))
404 return PTR_ERR(pdm->clk);
405
406 pdm->hclk = devm_clk_get(&pdev->dev, "pdm_hclk");
407 if (IS_ERR(pdm->hclk))
408 return PTR_ERR(pdm->hclk);
409
410 ret = clk_prepare_enable(pdm->hclk);
411 if (ret)
412 return ret;
413
414 pm_runtime_enable(&pdev->dev);
415 if (!pm_runtime_enabled(&pdev->dev)) {
416 ret = rockchip_pdm_runtime_resume(&pdev->dev);
417 if (ret)
418 goto err_pm_disable;
419 }
420
421 ret = devm_snd_soc_register_component(&pdev->dev,
422 &rockchip_pdm_component,
423 &rockchip_pdm_dai, 1);
424
425 if (ret) {
426 dev_err(&pdev->dev, "could not register dai: %d\n", ret);
427 goto err_suspend;
428 }
429
430 ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
431 if (ret) {
432 dev_err(&pdev->dev, "could not register pcm: %d\n", ret);
433 goto err_suspend;
434 }
435
436 return 0;
437
438err_suspend:
439 if (!pm_runtime_status_suspended(&pdev->dev))
440 rockchip_pdm_runtime_suspend(&pdev->dev);
441err_pm_disable:
442 pm_runtime_disable(&pdev->dev);
443
444 clk_disable_unprepare(pdm->hclk);
445
446 return ret;
447}
448
449static int rockchip_pdm_remove(struct platform_device *pdev)
450{
451 struct rk_pdm_dev *pdm = dev_get_drvdata(&pdev->dev);
452
453 pm_runtime_disable(&pdev->dev);
454 if (!pm_runtime_status_suspended(&pdev->dev))
455 rockchip_pdm_runtime_suspend(&pdev->dev);
456
457 clk_disable_unprepare(pdm->clk);
458 clk_disable_unprepare(pdm->hclk);
459
460 return 0;
461}
462
463#ifdef CONFIG_PM_SLEEP
464static int rockchip_pdm_suspend(struct device *dev)
465{
466 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
467
468 regcache_mark_dirty(pdm->regmap);
469
470 return 0;
471}
472
473static int rockchip_pdm_resume(struct device *dev)
474{
475 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
476 int ret;
477
478 ret = pm_runtime_get_sync(dev);
479 if (ret < 0)
480 return ret;
481
482 ret = regcache_sync(pdm->regmap);
483
484 pm_runtime_put(dev);
485
486 return ret;
487}
488#endif
489
490static const struct dev_pm_ops rockchip_pdm_pm_ops = {
491 SET_RUNTIME_PM_OPS(rockchip_pdm_runtime_suspend,
492 rockchip_pdm_runtime_resume, NULL)
493 SET_SYSTEM_SLEEP_PM_OPS(rockchip_pdm_suspend, rockchip_pdm_resume)
494};
495
496static const struct of_device_id rockchip_pdm_match[] = {
497 { .compatible = "rockchip,pdm", },
498 {},
499};
500MODULE_DEVICE_TABLE(of, rockchip_pdm_match);
501
502static struct platform_driver rockchip_pdm_driver = {
503 .probe = rockchip_pdm_probe,
504 .remove = rockchip_pdm_remove,
505 .driver = {
506 .name = "rockchip-pdm",
507 .of_match_table = of_match_ptr(rockchip_pdm_match),
508 .pm = &rockchip_pdm_pm_ops,
509 },
510};
511
512module_platform_driver(rockchip_pdm_driver);
513
514MODULE_AUTHOR("Sugar <sugar.zhang@rock-chips.com>");
515MODULE_DESCRIPTION("Rockchip PDM Controller Driver");
516MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/rockchip/rockchip_pdm.h b/sound/soc/rockchip/rockchip_pdm.h
new file mode 100644
index 000000000000..886b48d128fd
--- /dev/null
+++ b/sound/soc/rockchip/rockchip_pdm.h
@@ -0,0 +1,83 @@
1/*
2 * Rockchip PDM ALSA SoC Digital Audio Interface(DAI) driver
3 *
4 * Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd
5 *
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 */
16
17#ifndef _ROCKCHIP_PDM_H
18#define _ROCKCHIP_PDM_H
19
20/* PDM REGS */
21#define PDM_SYSCONFIG (0x0000)
22#define PDM_CTRL0 (0x0004)
23#define PDM_CTRL1 (0x0008)
24#define PDM_CLK_CTRL (0x000c)
25#define PDM_HPF_CTRL (0x0010)
26#define PDM_FIFO_CTRL (0x0014)
27#define PDM_DMA_CTRL (0x0018)
28#define PDM_INT_EN (0x001c)
29#define PDM_INT_CLR (0x0020)
30#define PDM_INT_ST (0x0024)
31#define PDM_RXFIFO_DATA (0x0030)
32#define PDM_DATA_VALID (0x0054)
33#define PDM_VERSION (0x0058)
34
35/* PDM_SYSCONFIG */
36#define PDM_RX_MASK (0x1 << 2)
37#define PDM_RX_START (0x1 << 2)
38#define PDM_RX_STOP (0x0 << 2)
39#define PDM_RX_CLR_MASK (0x1 << 0)
40#define PDM_RX_CLR_WR (0x1 << 0)
41#define PDM_RX_CLR_DONE (0x0 << 0)
42
43/* PDM CTRL0 */
44#define PDM_PATH_MSK (0xf << 27)
45#define PDM_PATH3_EN BIT(30)
46#define PDM_PATH2_EN BIT(29)
47#define PDM_PATH1_EN BIT(28)
48#define PDM_PATH0_EN BIT(27)
49#define PDM_HWT_EN BIT(26)
50#define PDM_VDW_MSK (0x1f << 0)
51#define PDM_VDW(X) ((X - 1) << 0)
52
53/* PDM CLK CTRL */
54#define PDM_CLK_MSK BIT(5)
55#define PDM_CLK_EN BIT(5)
56#define PDM_CLK_DIS (0x0 << 5)
57#define PDM_CKP_MSK BIT(3)
58#define PDM_CKP_NORMAL (0x0 << 3)
59#define PDM_CKP_INVERTED BIT(3)
60#define PDM_DS_RATIO_MSK (0x7 << 0)
61#define PDM_CLK_320FS (0x0 << 0)
62#define PDM_CLK_640FS (0x1 << 0)
63#define PDM_CLK_1280FS (0x2 << 0)
64#define PDM_CLK_2560FS (0x3 << 0)
65#define PDM_CLK_5120FS (0x4 << 0)
66
67/* PDM HPF CTRL */
68#define PDM_HPF_LE BIT(3)
69#define PDM_HPF_RE BIT(2)
70#define PDM_HPF_CF_MSK (0x3 << 0)
71#define PDM_HPF_3P79HZ (0x0 << 0)
72#define PDM_HPF_60HZ (0x1 << 0)
73#define PDM_HPF_243HZ (0x2 << 0)
74#define PDM_HPF_493HZ (0x3 << 0)
75
76/* PDM DMA CTRL */
77#define PDM_DMA_RD_MSK BIT(8)
78#define PDM_DMA_RD_EN BIT(8)
79#define PDM_DMA_RD_DIS (0x0 << 8)
80#define PDM_DMA_RDL_MSK (0x7f << 0)
81#define PDM_DMA_RDL(X) ((X - 1) << 0)
82
83#endif /* _ROCKCHIP_PDM_H */
diff --git a/sound/soc/rockchip/rockchip_spdif.c b/sound/soc/rockchip/rockchip_spdif.c
index fa8101d1e16f..ee5055d47d13 100644
--- a/sound/soc/rockchip/rockchip_spdif.c
+++ b/sound/soc/rockchip/rockchip_spdif.c
@@ -49,8 +49,12 @@ static const struct of_device_id rk_spdif_match[] = {
49 .data = (void *)RK_SPDIF_RK3066 }, 49 .data = (void *)RK_SPDIF_RK3066 },
50 { .compatible = "rockchip,rk3188-spdif", 50 { .compatible = "rockchip,rk3188-spdif",
51 .data = (void *)RK_SPDIF_RK3188 }, 51 .data = (void *)RK_SPDIF_RK3188 },
52 { .compatible = "rockchip,rk3228-spdif",
53 .data = (void *)RK_SPDIF_RK3366 },
52 { .compatible = "rockchip,rk3288-spdif", 54 { .compatible = "rockchip,rk3288-spdif",
53 .data = (void *)RK_SPDIF_RK3288 }, 55 .data = (void *)RK_SPDIF_RK3288 },
56 { .compatible = "rockchip,rk3328-spdif",
57 .data = (void *)RK_SPDIF_RK3366 },
54 { .compatible = "rockchip,rk3366-spdif", 58 { .compatible = "rockchip,rk3366-spdif",
55 .data = (void *)RK_SPDIF_RK3366 }, 59 .data = (void *)RK_SPDIF_RK3366 },
56 { .compatible = "rockchip,rk3368-spdif", 60 { .compatible = "rockchip,rk3368-spdif",
diff --git a/sound/soc/samsung/s3c24xx_uda134x.c b/sound/soc/samsung/s3c24xx_uda134x.c
index 81a78940967c..55538e333cc8 100644
--- a/sound/soc/samsung/s3c24xx_uda134x.c
+++ b/sound/soc/samsung/s3c24xx_uda134x.c
@@ -44,7 +44,7 @@ struct s3c24xx_uda134x {
44 44
45static unsigned int rates[33 * 2]; 45static unsigned int rates[33 * 2];
46#ifdef ENFORCE_RATES 46#ifdef ENFORCE_RATES
47static struct snd_pcm_hw_constraint_list hw_constraints_rates = { 47static const struct snd_pcm_hw_constraint_list hw_constraints_rates = {
48 .count = ARRAY_SIZE(rates), 48 .count = ARRAY_SIZE(rates),
49 .list = rates, 49 .list = rates,
50 .mask = 0, 50 .mask = 0,
diff --git a/sound/soc/sh/Kconfig b/sound/soc/sh/Kconfig
index 147ebecfed94..1aa5cd77ca24 100644
--- a/sound/soc/sh/Kconfig
+++ b/sound/soc/sh/Kconfig
@@ -38,7 +38,7 @@ config SND_SOC_RCAR
38 tristate "R-Car series SRU/SCU/SSIU/SSI support" 38 tristate "R-Car series SRU/SCU/SSIU/SSI support"
39 depends on COMMON_CLK 39 depends on COMMON_CLK
40 depends on OF || COMPILE_TEST 40 depends on OF || COMPILE_TEST
41 select SND_SIMPLE_CARD 41 select SND_SIMPLE_CARD_UTILS
42 select REGMAP_MMIO 42 select REGMAP_MMIO
43 help 43 help
44 This option enables R-Car SRU/SCU/SSIU/SSI sound support 44 This option enables R-Car SRU/SCU/SSIU/SSI sound support
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index ead520182e26..7c4bdd82bb95 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -301,7 +301,12 @@ struct fsi_master {
301 spinlock_t lock; 301 spinlock_t lock;
302}; 302};
303 303
304static int fsi_stream_is_play(struct fsi_priv *fsi, struct fsi_stream *io); 304static inline int fsi_stream_is_play(struct fsi_priv *fsi,
305 struct fsi_stream *io)
306{
307 return &fsi->playback == io;
308}
309
305 310
306/* 311/*
307 * basic read write function 312 * basic read write function
@@ -489,12 +494,6 @@ static void fsi_count_fifo_err(struct fsi_priv *fsi)
489/* 494/*
490 * fsi_stream_xx() function 495 * fsi_stream_xx() function
491 */ 496 */
492static inline int fsi_stream_is_play(struct fsi_priv *fsi,
493 struct fsi_stream *io)
494{
495 return &fsi->playback == io;
496}
497
498static inline struct fsi_stream *fsi_stream_get(struct fsi_priv *fsi, 497static inline struct fsi_stream *fsi_stream_get(struct fsi_priv *fsi,
499 struct snd_pcm_substream *substream) 498 struct snd_pcm_substream *substream)
500{ 499{
diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c
index d3b0dc145a56..197cb3ec075f 100644
--- a/sound/soc/sh/rcar/adg.c
+++ b/sound/soc/sh/rcar/adg.c
@@ -308,23 +308,12 @@ static void rsnd_adg_set_ssi_clk(struct rsnd_mod *ssi_mod, u32 val)
308 } 308 }
309} 309}
310 310
311int rsnd_adg_ssi_clk_stop(struct rsnd_mod *ssi_mod) 311int rsnd_adg_clk_query(struct rsnd_priv *priv, unsigned int rate)
312{
313 rsnd_adg_set_ssi_clk(ssi_mod, 0);
314
315 return 0;
316}
317
318int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *ssi_mod, unsigned int rate)
319{ 312{
320 struct rsnd_priv *priv = rsnd_mod_to_priv(ssi_mod);
321 struct rsnd_adg *adg = rsnd_priv_to_adg(priv); 313 struct rsnd_adg *adg = rsnd_priv_to_adg(priv);
322 struct device *dev = rsnd_priv_to_dev(priv); 314 struct device *dev = rsnd_priv_to_dev(priv);
323 struct rsnd_mod *adg_mod = rsnd_mod_get(adg);
324 struct clk *clk; 315 struct clk *clk;
325 int i; 316 int i;
326 u32 data;
327 u32 ckr = 0;
328 int sel_table[] = { 317 int sel_table[] = {
329 [CLKA] = 0x1, 318 [CLKA] = 0x1,
330 [CLKB] = 0x2, 319 [CLKB] = 0x2,
@@ -338,30 +327,42 @@ int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *ssi_mod, unsigned int rate)
338 * find suitable clock from 327 * find suitable clock from
339 * AUDIO_CLKA/AUDIO_CLKB/AUDIO_CLKC/AUDIO_CLKI. 328 * AUDIO_CLKA/AUDIO_CLKB/AUDIO_CLKC/AUDIO_CLKI.
340 */ 329 */
341 data = 0;
342 for_each_rsnd_clk(clk, adg, i) { 330 for_each_rsnd_clk(clk, adg, i) {
343 if (rate == clk_get_rate(clk)) { 331 if (rate == clk_get_rate(clk))
344 data = sel_table[i]; 332 return sel_table[i];
345 goto found_clock;
346 }
347 } 333 }
348 334
349 /* 335 /*
350 * find divided clock from BRGA/BRGB 336 * find divided clock from BRGA/BRGB
351 */ 337 */
352 if (rate == adg->rbga_rate_for_441khz) { 338 if (rate == adg->rbga_rate_for_441khz)
353 data = 0x10; 339 return 0x10;
354 goto found_clock;
355 }
356 340
357 if (rate == adg->rbgb_rate_for_48khz) { 341 if (rate == adg->rbgb_rate_for_48khz)
358 data = 0x20; 342 return 0x20;
359 goto found_clock;
360 }
361 343
362 return -EIO; 344 return -EIO;
345}
363 346
364found_clock: 347int rsnd_adg_ssi_clk_stop(struct rsnd_mod *ssi_mod)
348{
349 rsnd_adg_set_ssi_clk(ssi_mod, 0);
350
351 return 0;
352}
353
354int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *ssi_mod, unsigned int rate)
355{
356 struct rsnd_priv *priv = rsnd_mod_to_priv(ssi_mod);
357 struct rsnd_adg *adg = rsnd_priv_to_adg(priv);
358 struct device *dev = rsnd_priv_to_dev(priv);
359 struct rsnd_mod *adg_mod = rsnd_mod_get(adg);
360 int data;
361 u32 ckr = 0;
362
363 data = rsnd_adg_clk_query(priv, rate);
364 if (data < 0)
365 return data;
365 366
366 rsnd_adg_set_ssi_clk(ssi_mod, data); 367 rsnd_adg_set_ssi_clk(ssi_mod, data);
367 368
@@ -480,6 +481,9 @@ static void rsnd_adg_get_clkout(struct rsnd_priv *priv,
480 if (req_rate[0] % 48000 == 0) 481 if (req_rate[0] % 48000 == 0)
481 adg->flags = AUDIO_OUT_48; 482 adg->flags = AUDIO_OUT_48;
482 483
484 if (of_get_property(np, "clkout-lr-asynchronous", NULL))
485 adg->flags = LRCLK_ASYNC;
486
483 /* 487 /*
484 * This driver is assuming that AUDIO_CLKA/AUDIO_CLKB/AUDIO_CLKC 488 * This driver is assuming that AUDIO_CLKA/AUDIO_CLKB/AUDIO_CLKC
485 * have 44.1kHz or 48kHz base clocks for now. 489 * have 44.1kHz or 48kHz base clocks for now.
@@ -555,7 +559,6 @@ static void rsnd_adg_get_clkout(struct rsnd_priv *priv,
555 clk = clk_register_fixed_rate(dev, clkout_name[i], 559 clk = clk_register_fixed_rate(dev, clkout_name[i],
556 parent_clk_name, 0, 560 parent_clk_name, 0,
557 req_rate[0]); 561 req_rate[0]);
558 adg->clkout[i] = ERR_PTR(-ENOENT);
559 if (!IS_ERR(clk)) 562 if (!IS_ERR(clk))
560 adg->clkout[i] = clk; 563 adg->clkout[i] = clk;
561 } 564 }
@@ -580,7 +583,6 @@ int rsnd_adg_probe(struct rsnd_priv *priv)
580{ 583{
581 struct rsnd_adg *adg; 584 struct rsnd_adg *adg;
582 struct device *dev = rsnd_priv_to_dev(priv); 585 struct device *dev = rsnd_priv_to_dev(priv);
583 struct device_node *np = dev->of_node;
584 int ret; 586 int ret;
585 587
586 adg = devm_kzalloc(dev, sizeof(*adg), GFP_KERNEL); 588 adg = devm_kzalloc(dev, sizeof(*adg), GFP_KERNEL);
@@ -597,9 +599,6 @@ int rsnd_adg_probe(struct rsnd_priv *priv)
597 rsnd_adg_get_clkin(priv, adg); 599 rsnd_adg_get_clkin(priv, adg);
598 rsnd_adg_get_clkout(priv, adg); 600 rsnd_adg_get_clkout(priv, adg);
599 601
600 if (of_get_property(np, "clkout-lr-asynchronous", NULL))
601 adg->flags = LRCLK_ASYNC;
602
603 priv->adg = adg; 602 priv->adg = adg;
604 603
605 rsnd_adg_clk_enable(priv); 604 rsnd_adg_clk_enable(priv);
diff --git a/sound/soc/sh/rcar/cmd.c b/sound/soc/sh/rcar/cmd.c
index d879c010cf03..f1d4fb566892 100644
--- a/sound/soc/sh/rcar/cmd.c
+++ b/sound/soc/sh/rcar/cmd.c
@@ -31,7 +31,7 @@ static int rsnd_cmd_init(struct rsnd_mod *mod,
31 struct rsnd_mod *mix = rsnd_io_to_mod_mix(io); 31 struct rsnd_mod *mix = rsnd_io_to_mod_mix(io);
32 struct device *dev = rsnd_priv_to_dev(priv); 32 struct device *dev = rsnd_priv_to_dev(priv);
33 u32 data; 33 u32 data;
34 u32 path[] = { 34 static const u32 path[] = {
35 [1] = 1 << 0, 35 [1] = 1 << 0,
36 [5] = 1 << 8, 36 [5] = 1 << 8,
37 [6] = 1 << 12, 37 [6] = 1 << 12,
@@ -71,7 +71,7 @@ static int rsnd_cmd_init(struct rsnd_mod *mod,
71 } else { 71 } else {
72 struct rsnd_mod *src = rsnd_io_to_mod_src(io); 72 struct rsnd_mod *src = rsnd_io_to_mod_src(io);
73 73
74 u8 cmd_case[] = { 74 static const u8 cmd_case[] = {
75 [0] = 0x3, 75 [0] = 0x3,
76 [1] = 0x3, 76 [1] = 0x3,
77 [2] = 0x4, 77 [2] = 0x4,
@@ -82,6 +82,9 @@ static int rsnd_cmd_init(struct rsnd_mod *mod,
82 [9] = 0x2, 82 [9] = 0x2,
83 }; 83 };
84 84
85 if (unlikely(!src))
86 return -EIO;
87
85 data = path[rsnd_mod_id(src)] | 88 data = path[rsnd_mod_id(src)] |
86 cmd_case[rsnd_mod_id(src)] << 16; 89 cmd_case[rsnd_mod_id(src)] << 16;
87 } 90 }
diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c
index 8c1f4e2e0c4f..3f2ced26ed37 100644
--- a/sound/soc/sh/rcar/core.c
+++ b/sound/soc/sh/rcar/core.c
@@ -203,27 +203,6 @@ int rsnd_io_is_working(struct rsnd_dai_stream *io)
203 return !!io->substream; 203 return !!io->substream;
204} 204}
205 205
206void rsnd_set_slot(struct rsnd_dai *rdai,
207 int slots, int num)
208{
209 rdai->slots = slots;
210 rdai->slots_num = num;
211}
212
213int rsnd_get_slot(struct rsnd_dai_stream *io)
214{
215 struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
216
217 return rdai->slots;
218}
219
220int rsnd_get_slot_num(struct rsnd_dai_stream *io)
221{
222 struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
223
224 return rdai->slots_num;
225}
226
227int rsnd_runtime_channel_original(struct rsnd_dai_stream *io) 206int rsnd_runtime_channel_original(struct rsnd_dai_stream *io)
228{ 207{
229 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); 208 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
@@ -248,13 +227,14 @@ int rsnd_runtime_channel_after_ctu(struct rsnd_dai_stream *io)
248 227
249int rsnd_runtime_channel_for_ssi(struct rsnd_dai_stream *io) 228int rsnd_runtime_channel_for_ssi(struct rsnd_dai_stream *io)
250{ 229{
230 struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
251 int chan = rsnd_io_is_play(io) ? 231 int chan = rsnd_io_is_play(io) ?
252 rsnd_runtime_channel_after_ctu(io) : 232 rsnd_runtime_channel_after_ctu(io) :
253 rsnd_runtime_channel_original(io); 233 rsnd_runtime_channel_original(io);
254 234
255 /* Use Multi SSI */ 235 /* Use Multi SSI */
256 if (rsnd_runtime_is_ssi_multi(io)) 236 if (rsnd_runtime_is_ssi_multi(io))
257 chan /= rsnd_get_slot_num(io); 237 chan /= rsnd_rdai_ssi_lane_get(rdai);
258 238
259 /* TDM Extend Mode needs 8ch */ 239 /* TDM Extend Mode needs 8ch */
260 if (chan == 6) 240 if (chan == 6)
@@ -265,12 +245,13 @@ int rsnd_runtime_channel_for_ssi(struct rsnd_dai_stream *io)
265 245
266int rsnd_runtime_is_ssi_multi(struct rsnd_dai_stream *io) 246int rsnd_runtime_is_ssi_multi(struct rsnd_dai_stream *io)
267{ 247{
268 int slots = rsnd_get_slot_num(io); 248 struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
249 int lane = rsnd_rdai_ssi_lane_get(rdai);
269 int chan = rsnd_io_is_play(io) ? 250 int chan = rsnd_io_is_play(io) ?
270 rsnd_runtime_channel_after_ctu(io) : 251 rsnd_runtime_channel_after_ctu(io) :
271 rsnd_runtime_channel_original(io); 252 rsnd_runtime_channel_original(io);
272 253
273 return (chan >= 6) && (slots > 1); 254 return (chan > 2) && (lane > 1);
274} 255}
275 256
276int rsnd_runtime_is_ssi_tdm(struct rsnd_dai_stream *io) 257int rsnd_runtime_is_ssi_tdm(struct rsnd_dai_stream *io)
@@ -310,6 +291,24 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
310 u32 val = 0x76543210; 291 u32 val = 0x76543210;
311 u32 mask = ~0; 292 u32 mask = ~0;
312 293
294 /*
295 * *Hardware* L/R and *Software* L/R are inverted.
296 * We need to care about inversion timing to control
297 * Playback/Capture correctly.
298 * The point is [DVC] needs *Hardware* L/R, [MEM] needs *Software* L/R
299 *
300 * sL/R : software L/R
301 * hL/R : hardware L/R
302 * (*) : conversion timing
303 *
304 * Playback
305 * sL/R (*) hL/R hL/R hL/R hL/R hL/R
306 * [MEM] -> [SRC] -> [DVC] -> [CMD] -> [SSIU] -> [SSI] -> codec
307 *
308 * Capture
309 * hL/R hL/R hL/R hL/R hL/R (*) sL/R
310 * codec -> [SSI] -> [SSIU] -> [SRC] -> [DVC] -> [CMD] -> [MEM]
311 */
313 if (rsnd_io_is_play(io)) { 312 if (rsnd_io_is_play(io)) {
314 struct rsnd_mod *src = rsnd_io_to_mod_src(io); 313 struct rsnd_mod *src = rsnd_io_to_mod_src(io);
315 314
@@ -470,8 +469,7 @@ static int rsnd_status_update(u32 *status,
470 469
471#define rsnd_dai_call(fn, io, param...) \ 470#define rsnd_dai_call(fn, io, param...) \
472({ \ 471({ \
473 struct rsnd_priv *priv = rsnd_io_to_priv(io); \ 472 struct device *dev = rsnd_priv_to_dev(rsnd_io_to_priv(io)); \
474 struct device *dev = rsnd_priv_to_dev(priv); \
475 struct rsnd_mod *mod; \ 473 struct rsnd_mod *mod; \
476 int is_play = rsnd_io_is_play(io); \ 474 int is_play = rsnd_io_is_play(io); \
477 int ret = 0, i; \ 475 int ret = 0, i; \
@@ -532,6 +530,24 @@ static void rsnd_dai_disconnect(struct rsnd_mod *mod,
532 io->mod[type] = NULL; 530 io->mod[type] = NULL;
533} 531}
534 532
533int rsnd_rdai_channels_ctrl(struct rsnd_dai *rdai,
534 int max_channels)
535{
536 if (max_channels > 0)
537 rdai->max_channels = max_channels;
538
539 return rdai->max_channels;
540}
541
542int rsnd_rdai_ssi_lane_ctrl(struct rsnd_dai *rdai,
543 int ssi_lane)
544{
545 if (ssi_lane > 0)
546 rdai->ssi_lane = ssi_lane;
547
548 return rdai->ssi_lane;
549}
550
535struct rsnd_dai *rsnd_rdai_get(struct rsnd_priv *priv, int id) 551struct rsnd_dai *rsnd_rdai_get(struct rsnd_priv *priv, int id)
536{ 552{
537 if ((id < 0) || (id >= rsnd_rdai_nr(priv))) 553 if ((id < 0) || (id >= rsnd_rdai_nr(priv)))
@@ -551,40 +567,6 @@ static struct rsnd_dai *rsnd_dai_to_rdai(struct snd_soc_dai *dai)
551/* 567/*
552 * rsnd_soc_dai functions 568 * rsnd_soc_dai functions
553 */ 569 */
554int rsnd_dai_pointer_offset(struct rsnd_dai_stream *io, int additional)
555{
556 struct snd_pcm_substream *substream = io->substream;
557 struct snd_pcm_runtime *runtime = substream->runtime;
558 int pos = io->byte_pos + additional;
559
560 pos %= (runtime->periods * io->byte_per_period);
561
562 return pos;
563}
564
565bool rsnd_dai_pointer_update(struct rsnd_dai_stream *io, int byte)
566{
567 io->byte_pos += byte;
568
569 if (io->byte_pos >= io->next_period_byte) {
570 struct snd_pcm_substream *substream = io->substream;
571 struct snd_pcm_runtime *runtime = substream->runtime;
572
573 io->period_pos++;
574 io->next_period_byte += io->byte_per_period;
575
576 if (io->period_pos >= runtime->periods) {
577 io->byte_pos = 0;
578 io->period_pos = 0;
579 io->next_period_byte = io->byte_per_period;
580 }
581
582 return true;
583 }
584
585 return false;
586}
587
588void rsnd_dai_period_elapsed(struct rsnd_dai_stream *io) 570void rsnd_dai_period_elapsed(struct rsnd_dai_stream *io)
589{ 571{
590 struct snd_pcm_substream *substream = io->substream; 572 struct snd_pcm_substream *substream = io->substream;
@@ -602,15 +584,7 @@ void rsnd_dai_period_elapsed(struct rsnd_dai_stream *io)
602static void rsnd_dai_stream_init(struct rsnd_dai_stream *io, 584static void rsnd_dai_stream_init(struct rsnd_dai_stream *io,
603 struct snd_pcm_substream *substream) 585 struct snd_pcm_substream *substream)
604{ 586{
605 struct snd_pcm_runtime *runtime = substream->runtime;
606
607 io->substream = substream; 587 io->substream = substream;
608 io->byte_pos = 0;
609 io->period_pos = 0;
610 io->byte_per_period = runtime->period_size *
611 runtime->channels *
612 samples_to_bytes(runtime, 1);
613 io->next_period_byte = io->byte_per_period;
614} 588}
615 589
616static void rsnd_dai_stream_quit(struct rsnd_dai_stream *io) 590static void rsnd_dai_stream_quit(struct rsnd_dai_stream *io)
@@ -749,9 +723,13 @@ static int rsnd_soc_set_dai_tdm_slot(struct snd_soc_dai *dai,
749 struct device *dev = rsnd_priv_to_dev(priv); 723 struct device *dev = rsnd_priv_to_dev(priv);
750 724
751 switch (slots) { 725 switch (slots) {
726 case 2:
752 case 6: 727 case 6:
728 case 8:
729 case 16:
753 /* TDM Extend Mode */ 730 /* TDM Extend Mode */
754 rsnd_set_slot(rdai, slots, 1); 731 rsnd_rdai_channels_set(rdai, slots);
732 rsnd_rdai_ssi_lane_set(rdai, 1);
755 break; 733 break;
756 default: 734 default:
757 dev_err(dev, "unsupported TDM slots (%d)\n", slots); 735 dev_err(dev, "unsupported TDM slots (%d)\n", slots);
@@ -761,22 +739,177 @@ static int rsnd_soc_set_dai_tdm_slot(struct snd_soc_dai *dai,
761 return 0; 739 return 0;
762} 740}
763 741
742static unsigned int rsnd_soc_hw_channels_list[] = {
743 2, 6, 8, 16,
744};
745
746static unsigned int rsnd_soc_hw_rate_list[] = {
747 8000,
748 11025,
749 16000,
750 22050,
751 32000,
752 44100,
753 48000,
754 64000,
755 88200,
756 96000,
757 176400,
758 192000,
759};
760
761static int rsnd_soc_hw_rule(struct rsnd_priv *priv,
762 unsigned int *list, int list_num,
763 struct snd_interval *baseline, struct snd_interval *iv)
764{
765 struct snd_interval p;
766 unsigned int rate;
767 int i;
768
769 snd_interval_any(&p);
770 p.min = UINT_MAX;
771 p.max = 0;
772
773 for (i = 0; i < list_num; i++) {
774
775 if (!snd_interval_test(iv, list[i]))
776 continue;
777
778 rate = rsnd_ssi_clk_query(priv,
779 baseline->min, list[i], NULL);
780 if (rate > 0) {
781 p.min = min(p.min, list[i]);
782 p.max = max(p.max, list[i]);
783 }
784
785 rate = rsnd_ssi_clk_query(priv,
786 baseline->max, list[i], NULL);
787 if (rate > 0) {
788 p.min = min(p.min, list[i]);
789 p.max = max(p.max, list[i]);
790 }
791 }
792
793 return snd_interval_refine(iv, &p);
794}
795
796static int rsnd_soc_hw_rule_rate(struct snd_pcm_hw_params *params,
797 struct snd_pcm_hw_rule *rule)
798{
799 struct snd_interval *ic_ = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
800 struct snd_interval *ir = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
801 struct snd_interval ic;
802 struct snd_soc_dai *dai = rule->private;
803 struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
804 struct rsnd_priv *priv = rsnd_rdai_to_priv(rdai);
805
806 /*
807 * possible sampling rate limitation is same as
808 * 2ch if it supports multi ssi
809 */
810 ic = *ic_;
811 if (1 < rsnd_rdai_ssi_lane_get(rdai)) {
812 ic.min = 2;
813 ic.max = 2;
814 }
815
816 return rsnd_soc_hw_rule(priv, rsnd_soc_hw_rate_list,
817 ARRAY_SIZE(rsnd_soc_hw_rate_list),
818 &ic, ir);
819}
820
821
822static int rsnd_soc_hw_rule_channels(struct snd_pcm_hw_params *params,
823 struct snd_pcm_hw_rule *rule)
824{
825 struct snd_interval *ic_ = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
826 struct snd_interval *ir = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
827 struct snd_interval ic;
828 struct snd_soc_dai *dai = rule->private;
829 struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
830 struct rsnd_priv *priv = rsnd_rdai_to_priv(rdai);
831
832 /*
833 * possible sampling rate limitation is same as
834 * 2ch if it supports multi ssi
835 */
836 ic = *ic_;
837 if (1 < rsnd_rdai_ssi_lane_get(rdai)) {
838 ic.min = 2;
839 ic.max = 2;
840 }
841
842 return rsnd_soc_hw_rule(priv, rsnd_soc_hw_channels_list,
843 ARRAY_SIZE(rsnd_soc_hw_channels_list),
844 ir, &ic);
845}
846
847static void rsnd_soc_hw_constraint(struct snd_pcm_runtime *runtime,
848 struct snd_soc_dai *dai)
849{
850 struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
851 struct snd_pcm_hw_constraint_list *constraint = &rdai->constraint;
852 unsigned int max_channels = rsnd_rdai_channels_get(rdai);
853 int i;
854
855 /*
856 * Channel Limitation
857 * It depends on Platform design
858 */
859 constraint->list = rsnd_soc_hw_channels_list;
860 constraint->count = 0;
861 constraint->mask = 0;
862
863 for (i = 0; i < ARRAY_SIZE(rsnd_soc_hw_channels_list); i++) {
864 if (rsnd_soc_hw_channels_list[i] > max_channels)
865 break;
866 constraint->count = i + 1;
867 }
868
869 snd_pcm_hw_constraint_list(runtime, 0,
870 SNDRV_PCM_HW_PARAM_CHANNELS, constraint);
871
872 /*
873 * Sampling Rate / Channel Limitation
874 * It depends on Clock Master Mode
875 */
876 if (!rsnd_rdai_is_clk_master(rdai))
877 return;
878
879 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
880 rsnd_soc_hw_rule_rate, dai,
881 SNDRV_PCM_HW_PARAM_CHANNELS, -1);
882 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
883 rsnd_soc_hw_rule_channels, dai,
884 SNDRV_PCM_HW_PARAM_RATE, -1);
885}
886
764static int rsnd_soc_dai_startup(struct snd_pcm_substream *substream, 887static int rsnd_soc_dai_startup(struct snd_pcm_substream *substream,
765 struct snd_soc_dai *dai) 888 struct snd_soc_dai *dai)
766{ 889{
767 struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai); 890 struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
891 struct rsnd_priv *priv = rsnd_rdai_to_priv(rdai);
768 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); 892 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream);
893 int ret;
894
895 /* rsnd_io_to_runtime() is not yet enabled here */
896 rsnd_soc_hw_constraint(substream->runtime, dai);
769 897
770 /* 898 /*
771 * call rsnd_dai_call without spinlock 899 * call rsnd_dai_call without spinlock
772 */ 900 */
773 return rsnd_dai_call(nolock_start, io, priv); 901 ret = rsnd_dai_call(nolock_start, io, priv);
902 if (ret < 0)
903 rsnd_dai_call(nolock_stop, io, priv);
904
905 return ret;
774} 906}
775 907
776static void rsnd_soc_dai_shutdown(struct snd_pcm_substream *substream, 908static void rsnd_soc_dai_shutdown(struct snd_pcm_substream *substream,
777 struct snd_soc_dai *dai) 909 struct snd_soc_dai *dai)
778{ 910{
779 struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai); 911 struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
912 struct rsnd_priv *priv = rsnd_rdai_to_priv(rdai);
780 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); 913 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream);
781 914
782 /* 915 /*
@@ -820,32 +953,132 @@ void rsnd_parse_connect_common(struct rsnd_dai *rdai,
820 of_node_put(node); 953 of_node_put(node);
821} 954}
822 955
823static int rsnd_dai_probe(struct rsnd_priv *priv) 956static struct device_node *rsnd_dai_of_node(struct rsnd_priv *priv,
957 int *is_graph)
824{ 958{
959 struct device *dev = rsnd_priv_to_dev(priv);
960 struct device_node *np = dev->of_node;
825 struct device_node *dai_node; 961 struct device_node *dai_node;
826 struct device_node *dai_np; 962 struct device_node *ret;
963
964 *is_graph = 0;
965
966 /*
967 * parse both previous dai (= rcar_sound,dai), and
968 * graph dai (= ports/port)
969 */
970 dai_node = of_get_child_by_name(np, RSND_NODE_DAI);
971 if (dai_node) {
972 ret = dai_node;
973 goto of_node_compatible;
974 }
975
976 ret = np;
977
978 dai_node = of_graph_get_next_endpoint(np, NULL);
979 if (dai_node)
980 goto of_node_graph;
981
982 return NULL;
983
984of_node_graph:
985 *is_graph = 1;
986of_node_compatible:
987 of_node_put(dai_node);
988
989 return ret;
990}
991
992static void __rsnd_dai_probe(struct rsnd_priv *priv,
993 struct device_node *dai_np,
994 int dai_i, int is_graph)
995{
827 struct device_node *playback, *capture; 996 struct device_node *playback, *capture;
828 struct rsnd_dai_stream *io_playback; 997 struct rsnd_dai_stream *io_playback;
829 struct rsnd_dai_stream *io_capture; 998 struct rsnd_dai_stream *io_capture;
830 struct snd_soc_dai_driver *rdrv, *drv; 999 struct snd_soc_dai_driver *drv;
831 struct rsnd_dai *rdai; 1000 struct rsnd_dai *rdai;
832 struct device *dev = rsnd_priv_to_dev(priv); 1001 struct device *dev = rsnd_priv_to_dev(priv);
833 int nr, dai_i, io_i; 1002 int io_i;
834 int ret; 1003
1004 rdai = rsnd_rdai_get(priv, dai_i);
1005 drv = priv->daidrv + dai_i;
1006 io_playback = &rdai->playback;
1007 io_capture = &rdai->capture;
1008
1009 snprintf(rdai->name, RSND_DAI_NAME_SIZE, "rsnd-dai.%d", dai_i);
1010
1011 rdai->priv = priv;
1012 drv->name = rdai->name;
1013 drv->ops = &rsnd_soc_dai_ops;
1014
1015 snprintf(rdai->playback.name, RSND_DAI_NAME_SIZE,
1016 "DAI%d Playback", dai_i);
1017 drv->playback.rates = RSND_RATES;
1018 drv->playback.formats = RSND_FMTS;
1019 drv->playback.channels_min = 2;
1020 drv->playback.channels_max = 16;
1021 drv->playback.stream_name = rdai->playback.name;
1022
1023 snprintf(rdai->capture.name, RSND_DAI_NAME_SIZE,
1024 "DAI%d Capture", dai_i);
1025 drv->capture.rates = RSND_RATES;
1026 drv->capture.formats = RSND_FMTS;
1027 drv->capture.channels_min = 2;
1028 drv->capture.channels_max = 16;
1029 drv->capture.stream_name = rdai->capture.name;
1030
1031 rdai->playback.rdai = rdai;
1032 rdai->capture.rdai = rdai;
1033 rsnd_rdai_channels_set(rdai, 2); /* default 2ch */
1034 rsnd_rdai_ssi_lane_set(rdai, 1); /* default 1lane */
1035
1036 for (io_i = 0;; io_i++) {
1037 playback = of_parse_phandle(dai_np, "playback", io_i);
1038 capture = of_parse_phandle(dai_np, "capture", io_i);
1039
1040 if (!playback && !capture)
1041 break;
835 1042
836 dai_node = rsnd_dai_of_node(priv); 1043 rsnd_parse_connect_ssi(rdai, playback, capture);
837 nr = of_get_child_count(dai_node); 1044 rsnd_parse_connect_src(rdai, playback, capture);
838 if (!nr) { 1045 rsnd_parse_connect_ctu(rdai, playback, capture);
839 ret = -EINVAL; 1046 rsnd_parse_connect_mix(rdai, playback, capture);
840 goto rsnd_dai_probe_done; 1047 rsnd_parse_connect_dvc(rdai, playback, capture);
1048
1049 of_node_put(playback);
1050 of_node_put(capture);
841 } 1051 }
842 1052
1053 dev_dbg(dev, "%s (%s/%s)\n", rdai->name,
1054 rsnd_io_to_mod_ssi(io_playback) ? "play" : " -- ",
1055 rsnd_io_to_mod_ssi(io_capture) ? "capture" : " -- ");
1056}
1057
1058static int rsnd_dai_probe(struct rsnd_priv *priv)
1059{
1060 struct device_node *dai_node;
1061 struct device_node *dai_np;
1062 struct snd_soc_dai_driver *rdrv;
1063 struct device *dev = rsnd_priv_to_dev(priv);
1064 struct rsnd_dai *rdai;
1065 int nr;
1066 int is_graph;
1067 int dai_i;
1068
1069 dai_node = rsnd_dai_of_node(priv, &is_graph);
1070 if (is_graph)
1071 nr = of_graph_get_endpoint_count(dai_node);
1072 else
1073 nr = of_get_child_count(dai_node);
1074
1075 if (!nr)
1076 return -EINVAL;
1077
843 rdrv = devm_kzalloc(dev, sizeof(*rdrv) * nr, GFP_KERNEL); 1078 rdrv = devm_kzalloc(dev, sizeof(*rdrv) * nr, GFP_KERNEL);
844 rdai = devm_kzalloc(dev, sizeof(*rdai) * nr, GFP_KERNEL); 1079 rdai = devm_kzalloc(dev, sizeof(*rdai) * nr, GFP_KERNEL);
845 if (!rdrv || !rdai) { 1080 if (!rdrv || !rdai)
846 ret = -ENOMEM; 1081 return -ENOMEM;
847 goto rsnd_dai_probe_done;
848 }
849 1082
850 priv->rdai_nr = nr; 1083 priv->rdai_nr = nr;
851 priv->daidrv = rdrv; 1084 priv->daidrv = rdrv;
@@ -855,68 +1088,18 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
855 * parse all dai 1088 * parse all dai
856 */ 1089 */
857 dai_i = 0; 1090 dai_i = 0;
858 for_each_child_of_node(dai_node, dai_np) { 1091 if (is_graph) {
859 rdai = rsnd_rdai_get(priv, dai_i); 1092 for_each_endpoint_of_node(dai_node, dai_np) {
860 drv = rdrv + dai_i; 1093 __rsnd_dai_probe(priv, dai_np, dai_i, is_graph);
861 io_playback = &rdai->playback; 1094 rsnd_ssi_parse_hdmi_connection(priv, dai_np, dai_i);
862 io_capture = &rdai->capture; 1095 dai_i++;
863
864 snprintf(rdai->name, RSND_DAI_NAME_SIZE, "rsnd-dai.%d", dai_i);
865
866 rdai->priv = priv;
867 drv->name = rdai->name;
868 drv->ops = &rsnd_soc_dai_ops;
869
870 snprintf(rdai->playback.name, RSND_DAI_NAME_SIZE,
871 "DAI%d Playback", dai_i);
872 drv->playback.rates = RSND_RATES;
873 drv->playback.formats = RSND_FMTS;
874 drv->playback.channels_min = 2;
875 drv->playback.channels_max = 6;
876 drv->playback.stream_name = rdai->playback.name;
877
878 snprintf(rdai->capture.name, RSND_DAI_NAME_SIZE,
879 "DAI%d Capture", dai_i);
880 drv->capture.rates = RSND_RATES;
881 drv->capture.formats = RSND_FMTS;
882 drv->capture.channels_min = 2;
883 drv->capture.channels_max = 6;
884 drv->capture.stream_name = rdai->capture.name;
885
886 rdai->playback.rdai = rdai;
887 rdai->capture.rdai = rdai;
888 rsnd_set_slot(rdai, 2, 1); /* default */
889
890 for (io_i = 0;; io_i++) {
891 playback = of_parse_phandle(dai_np, "playback", io_i);
892 capture = of_parse_phandle(dai_np, "capture", io_i);
893
894 if (!playback && !capture)
895 break;
896
897 rsnd_parse_connect_ssi(rdai, playback, capture);
898 rsnd_parse_connect_src(rdai, playback, capture);
899 rsnd_parse_connect_ctu(rdai, playback, capture);
900 rsnd_parse_connect_mix(rdai, playback, capture);
901 rsnd_parse_connect_dvc(rdai, playback, capture);
902
903 of_node_put(playback);
904 of_node_put(capture);
905 } 1096 }
906 1097 } else {
907 dai_i++; 1098 for_each_child_of_node(dai_node, dai_np)
908 1099 __rsnd_dai_probe(priv, dai_np, dai_i++, is_graph);
909 dev_dbg(dev, "%s (%s/%s)\n", rdai->name,
910 rsnd_io_to_mod_ssi(io_playback) ? "play" : " -- ",
911 rsnd_io_to_mod_ssi(io_capture) ? "capture" : " -- ");
912 } 1100 }
913 1101
914 ret = 0; 1102 return 0;
915
916rsnd_dai_probe_done:
917 of_node_put(dai_node);
918
919 return ret;
920} 1103}
921 1104
922/* 1105/*
@@ -965,12 +1148,14 @@ static int rsnd_hw_params(struct snd_pcm_substream *substream,
965 1148
966static snd_pcm_uframes_t rsnd_pointer(struct snd_pcm_substream *substream) 1149static snd_pcm_uframes_t rsnd_pointer(struct snd_pcm_substream *substream)
967{ 1150{
968 struct snd_pcm_runtime *runtime = substream->runtime;
969 struct snd_soc_dai *dai = rsnd_substream_to_dai(substream); 1151 struct snd_soc_dai *dai = rsnd_substream_to_dai(substream);
970 struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai); 1152 struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
971 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream); 1153 struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream);
1154 snd_pcm_uframes_t pointer = 0;
1155
1156 rsnd_dai_call(pointer, io, &pointer);
972 1157
973 return bytes_to_frames(runtime, io->byte_pos); 1158 return pointer;
974} 1159}
975 1160
976static struct snd_pcm_ops rsnd_pcm_ops = { 1161static struct snd_pcm_ops rsnd_pcm_ops = {
@@ -1033,6 +1218,9 @@ static int rsnd_kctrl_put(struct snd_kcontrol *kctrl,
1033 struct rsnd_kctrl_cfg *cfg = kcontrol_to_cfg(kctrl); 1218 struct rsnd_kctrl_cfg *cfg = kcontrol_to_cfg(kctrl);
1034 int i, change = 0; 1219 int i, change = 0;
1035 1220
1221 if (!cfg->accept(cfg->io))
1222 return 0;
1223
1036 for (i = 0; i < cfg->size; i++) { 1224 for (i = 0; i < cfg->size; i++) {
1037 if (cfg->texts) { 1225 if (cfg->texts) {
1038 change |= (uc->value.enumerated.item[i] != cfg->val[i]); 1226 change |= (uc->value.enumerated.item[i] != cfg->val[i]);
@@ -1049,6 +1237,18 @@ static int rsnd_kctrl_put(struct snd_kcontrol *kctrl,
1049 return change; 1237 return change;
1050} 1238}
1051 1239
1240int rsnd_kctrl_accept_anytime(struct rsnd_dai_stream *io)
1241{
1242 return 1;
1243}
1244
1245int rsnd_kctrl_accept_runtime(struct rsnd_dai_stream *io)
1246{
1247 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
1248
1249 return !!runtime;
1250}
1251
1052struct rsnd_kctrl_cfg *rsnd_kctrl_init_m(struct rsnd_kctrl_cfg_m *cfg) 1252struct rsnd_kctrl_cfg *rsnd_kctrl_init_m(struct rsnd_kctrl_cfg_m *cfg)
1053{ 1253{
1054 cfg->cfg.val = cfg->val; 1254 cfg->cfg.val = cfg->val;
@@ -1067,6 +1267,7 @@ int rsnd_kctrl_new(struct rsnd_mod *mod,
1067 struct rsnd_dai_stream *io, 1267 struct rsnd_dai_stream *io,
1068 struct snd_soc_pcm_runtime *rtd, 1268 struct snd_soc_pcm_runtime *rtd,
1069 const unsigned char *name, 1269 const unsigned char *name,
1270 int (*accept)(struct rsnd_dai_stream *io),
1070 void (*update)(struct rsnd_dai_stream *io, 1271 void (*update)(struct rsnd_dai_stream *io,
1071 struct rsnd_mod *mod), 1272 struct rsnd_mod *mod),
1072 struct rsnd_kctrl_cfg *cfg, 1273 struct rsnd_kctrl_cfg *cfg,
@@ -1101,6 +1302,7 @@ int rsnd_kctrl_new(struct rsnd_mod *mod,
1101 cfg->texts = texts; 1302 cfg->texts = texts;
1102 cfg->max = max; 1303 cfg->max = max;
1103 cfg->size = size; 1304 cfg->size = size;
1305 cfg->accept = accept;
1104 cfg->update = update; 1306 cfg->update = update;
1105 cfg->card = card; 1307 cfg->card = card;
1106 cfg->kctrl = kctrl; 1308 cfg->kctrl = kctrl;
@@ -1332,7 +1534,7 @@ static int rsnd_resume(struct device *dev)
1332 return 0; 1534 return 0;
1333} 1535}
1334 1536
1335static struct dev_pm_ops rsnd_pm_ops = { 1537static const struct dev_pm_ops rsnd_pm_ops = {
1336 .suspend = rsnd_suspend, 1538 .suspend = rsnd_suspend,
1337 .resume = rsnd_resume, 1539 .resume = rsnd_resume,
1338}; 1540};
diff --git a/sound/soc/sh/rcar/ctu.c b/sound/soc/sh/rcar/ctu.c
index 9dcc1f9db026..4ba8f2fe7a4c 100644
--- a/sound/soc/sh/rcar/ctu.c
+++ b/sound/soc/sh/rcar/ctu.c
@@ -279,12 +279,14 @@ static int rsnd_ctu_pcm_new(struct rsnd_mod *mod,
279 279
280 /* CTU Pass */ 280 /* CTU Pass */
281 ret = rsnd_kctrl_new_m(mod, io, rtd, "CTU Pass", 281 ret = rsnd_kctrl_new_m(mod, io, rtd, "CTU Pass",
282 rsnd_kctrl_accept_anytime,
282 NULL, 283 NULL,
283 &ctu->pass, RSND_MAX_CHANNELS, 284 &ctu->pass, RSND_MAX_CHANNELS,
284 0xC); 285 0xC);
285 286
286 /* ROW0 */ 287 /* ROW0 */
287 ret = rsnd_kctrl_new_m(mod, io, rtd, "CTU SV0", 288 ret = rsnd_kctrl_new_m(mod, io, rtd, "CTU SV0",
289 rsnd_kctrl_accept_anytime,
288 NULL, 290 NULL,
289 &ctu->sv0, RSND_MAX_CHANNELS, 291 &ctu->sv0, RSND_MAX_CHANNELS,
290 0x00FFFFFF); 292 0x00FFFFFF);
@@ -293,6 +295,7 @@ static int rsnd_ctu_pcm_new(struct rsnd_mod *mod,
293 295
294 /* ROW1 */ 296 /* ROW1 */
295 ret = rsnd_kctrl_new_m(mod, io, rtd, "CTU SV1", 297 ret = rsnd_kctrl_new_m(mod, io, rtd, "CTU SV1",
298 rsnd_kctrl_accept_anytime,
296 NULL, 299 NULL,
297 &ctu->sv1, RSND_MAX_CHANNELS, 300 &ctu->sv1, RSND_MAX_CHANNELS,
298 0x00FFFFFF); 301 0x00FFFFFF);
@@ -301,6 +304,7 @@ static int rsnd_ctu_pcm_new(struct rsnd_mod *mod,
301 304
302 /* ROW2 */ 305 /* ROW2 */
303 ret = rsnd_kctrl_new_m(mod, io, rtd, "CTU SV2", 306 ret = rsnd_kctrl_new_m(mod, io, rtd, "CTU SV2",
307 rsnd_kctrl_accept_anytime,
304 NULL, 308 NULL,
305 &ctu->sv2, RSND_MAX_CHANNELS, 309 &ctu->sv2, RSND_MAX_CHANNELS,
306 0x00FFFFFF); 310 0x00FFFFFF);
@@ -309,6 +313,7 @@ static int rsnd_ctu_pcm_new(struct rsnd_mod *mod,
309 313
310 /* ROW3 */ 314 /* ROW3 */
311 ret = rsnd_kctrl_new_m(mod, io, rtd, "CTU SV3", 315 ret = rsnd_kctrl_new_m(mod, io, rtd, "CTU SV3",
316 rsnd_kctrl_accept_anytime,
312 NULL, 317 NULL,
313 &ctu->sv3, RSND_MAX_CHANNELS, 318 &ctu->sv3, RSND_MAX_CHANNELS,
314 0x00FFFFFF); 319 0x00FFFFFF);
@@ -317,6 +322,7 @@ static int rsnd_ctu_pcm_new(struct rsnd_mod *mod,
317 322
318 /* Reset */ 323 /* Reset */
319 ret = rsnd_kctrl_new_s(mod, io, rtd, "CTU Reset", 324 ret = rsnd_kctrl_new_s(mod, io, rtd, "CTU Reset",
325 rsnd_kctrl_accept_anytime,
320 rsnd_ctu_value_reset, 326 rsnd_ctu_value_reset,
321 &ctu->reset, 1); 327 &ctu->reset, 1);
322 328
diff --git a/sound/soc/sh/rcar/dma.c b/sound/soc/sh/rcar/dma.c
index 241cb3b08a07..60aa5e96a49f 100644
--- a/sound/soc/sh/rcar/dma.c
+++ b/sound/soc/sh/rcar/dma.c
@@ -25,6 +25,7 @@
25 25
26struct rsnd_dmaen { 26struct rsnd_dmaen {
27 struct dma_chan *chan; 27 struct dma_chan *chan;
28 dma_cookie_t cookie;
28 dma_addr_t dma_buf; 29 dma_addr_t dma_buf;
29 unsigned int dma_len; 30 unsigned int dma_len;
30 unsigned int dma_period; 31 unsigned int dma_period;
@@ -103,10 +104,6 @@ static void __rsnd_dmaen_complete(struct rsnd_mod *mod,
103 * In Gen2 case, it are Audio-DMAC, and Audio-DMAC-peri-peri. 104 * In Gen2 case, it are Audio-DMAC, and Audio-DMAC-peri-peri.
104 * But, Audio-DMAC-peri-peri doesn't have interrupt, 105 * But, Audio-DMAC-peri-peri doesn't have interrupt,
105 * and this driver is assuming that here. 106 * and this driver is assuming that here.
106 *
107 * If Audio-DMAC-peri-peri has interrpt,
108 * rsnd_dai_pointer_update() will be called twice,
109 * ant it will breaks io->byte_pos
110 */ 107 */
111 spin_lock_irqsave(&priv->lock, flags); 108 spin_lock_irqsave(&priv->lock, flags);
112 109
@@ -121,7 +118,7 @@ static void __rsnd_dmaen_complete(struct rsnd_mod *mod,
121 */ 118 */
122 rsnd_dmaen_sync(dmaen, io, dmaen->dma_cnt + 2); 119 rsnd_dmaen_sync(dmaen, io, dmaen->dma_cnt + 2);
123 120
124 elapsed = rsnd_dai_pointer_update(io, io->byte_per_period); 121 elapsed = true;
125 122
126 dmaen->dma_cnt++; 123 dmaen->dma_cnt++;
127 } 124 }
@@ -292,7 +289,8 @@ static int rsnd_dmaen_start(struct rsnd_mod *mod,
292 for (i = 0; i < 2; i++) 289 for (i = 0; i < 2; i++)
293 rsnd_dmaen_sync(dmaen, io, i); 290 rsnd_dmaen_sync(dmaen, io, i);
294 291
295 if (dmaengine_submit(desc) < 0) { 292 dmaen->cookie = dmaengine_submit(desc);
293 if (dmaen->cookie < 0) {
296 dev_err(dev, "dmaengine_submit() fail\n"); 294 dev_err(dev, "dmaengine_submit() fail\n");
297 return -EIO; 295 return -EIO;
298 } 296 }
@@ -348,12 +346,34 @@ static int rsnd_dmaen_attach(struct rsnd_dai_stream *io,
348 return 0; 346 return 0;
349} 347}
350 348
349static int rsnd_dmaen_pointer(struct rsnd_mod *mod,
350 struct rsnd_dai_stream *io,
351 snd_pcm_uframes_t *pointer)
352{
353 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
354 struct rsnd_dma *dma = rsnd_mod_to_dma(mod);
355 struct rsnd_dmaen *dmaen = rsnd_dma_to_dmaen(dma);
356 struct dma_tx_state state;
357 enum dma_status status;
358 unsigned int pos = 0;
359
360 status = dmaengine_tx_status(dmaen->chan, dmaen->cookie, &state);
361 if (status == DMA_IN_PROGRESS || status == DMA_PAUSED) {
362 if (state.residue > 0 && state.residue <= dmaen->dma_len)
363 pos = dmaen->dma_len - state.residue;
364 }
365 *pointer = bytes_to_frames(runtime, pos);
366
367 return 0;
368}
369
351static struct rsnd_mod_ops rsnd_dmaen_ops = { 370static struct rsnd_mod_ops rsnd_dmaen_ops = {
352 .name = "audmac", 371 .name = "audmac",
353 .nolock_start = rsnd_dmaen_nolock_start, 372 .nolock_start = rsnd_dmaen_nolock_start,
354 .nolock_stop = rsnd_dmaen_nolock_stop, 373 .nolock_stop = rsnd_dmaen_nolock_stop,
355 .start = rsnd_dmaen_start, 374 .start = rsnd_dmaen_start,
356 .stop = rsnd_dmaen_stop, 375 .stop = rsnd_dmaen_stop,
376 .pointer= rsnd_dmaen_pointer,
357}; 377};
358 378
359/* 379/*
diff --git a/sound/soc/sh/rcar/dvc.c b/sound/soc/sh/rcar/dvc.c
index 463de8360985..99d2d9459e75 100644
--- a/sound/soc/sh/rcar/dvc.c
+++ b/sound/soc/sh/rcar/dvc.c
@@ -249,16 +249,18 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod,
249 struct snd_soc_pcm_runtime *rtd) 249 struct snd_soc_pcm_runtime *rtd)
250{ 250{
251 struct rsnd_dvc *dvc = rsnd_mod_to_dvc(mod); 251 struct rsnd_dvc *dvc = rsnd_mod_to_dvc(mod);
252 struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
252 int is_play = rsnd_io_is_play(io); 253 int is_play = rsnd_io_is_play(io);
253 int slots = rsnd_get_slot(io); 254 int channels = rsnd_rdai_channels_get(rdai);
254 int ret; 255 int ret;
255 256
256 /* Volume */ 257 /* Volume */
257 ret = rsnd_kctrl_new_m(mod, io, rtd, 258 ret = rsnd_kctrl_new_m(mod, io, rtd,
258 is_play ? 259 is_play ?
259 "DVC Out Playback Volume" : "DVC In Capture Volume", 260 "DVC Out Playback Volume" : "DVC In Capture Volume",
261 rsnd_kctrl_accept_anytime,
260 rsnd_dvc_volume_update, 262 rsnd_dvc_volume_update,
261 &dvc->volume, slots, 263 &dvc->volume, channels,
262 0x00800000 - 1); 264 0x00800000 - 1);
263 if (ret < 0) 265 if (ret < 0)
264 return ret; 266 return ret;
@@ -267,8 +269,9 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod,
267 ret = rsnd_kctrl_new_m(mod, io, rtd, 269 ret = rsnd_kctrl_new_m(mod, io, rtd,
268 is_play ? 270 is_play ?
269 "DVC Out Mute Switch" : "DVC In Mute Switch", 271 "DVC Out Mute Switch" : "DVC In Mute Switch",
272 rsnd_kctrl_accept_anytime,
270 rsnd_dvc_volume_update, 273 rsnd_dvc_volume_update,
271 &dvc->mute, slots, 274 &dvc->mute, channels,
272 1); 275 1);
273 if (ret < 0) 276 if (ret < 0)
274 return ret; 277 return ret;
@@ -277,6 +280,7 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod,
277 ret = rsnd_kctrl_new_s(mod, io, rtd, 280 ret = rsnd_kctrl_new_s(mod, io, rtd,
278 is_play ? 281 is_play ?
279 "DVC Out Ramp Switch" : "DVC In Ramp Switch", 282 "DVC Out Ramp Switch" : "DVC In Ramp Switch",
283 rsnd_kctrl_accept_anytime,
280 rsnd_dvc_volume_update, 284 rsnd_dvc_volume_update,
281 &dvc->ren, 1); 285 &dvc->ren, 1);
282 if (ret < 0) 286 if (ret < 0)
@@ -285,6 +289,7 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod,
285 ret = rsnd_kctrl_new_e(mod, io, rtd, 289 ret = rsnd_kctrl_new_e(mod, io, rtd,
286 is_play ? 290 is_play ?
287 "DVC Out Ramp Up Rate" : "DVC In Ramp Up Rate", 291 "DVC Out Ramp Up Rate" : "DVC In Ramp Up Rate",
292 rsnd_kctrl_accept_anytime,
288 rsnd_dvc_volume_update, 293 rsnd_dvc_volume_update,
289 &dvc->rup, 294 &dvc->rup,
290 dvc_ramp_rate); 295 dvc_ramp_rate);
@@ -294,6 +299,7 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod,
294 ret = rsnd_kctrl_new_e(mod, io, rtd, 299 ret = rsnd_kctrl_new_e(mod, io, rtd,
295 is_play ? 300 is_play ?
296 "DVC Out Ramp Down Rate" : "DVC In Ramp Down Rate", 301 "DVC Out Ramp Down Rate" : "DVC In Ramp Down Rate",
302 rsnd_kctrl_accept_anytime,
297 rsnd_dvc_volume_update, 303 rsnd_dvc_volume_update,
298 &dvc->rdown, 304 &dvc->rdown,
299 dvc_ramp_rate); 305 dvc_ramp_rate);
diff --git a/sound/soc/sh/rcar/gen.c b/sound/soc/sh/rcar/gen.c
index 4b0980728e13..ee00e3516911 100644
--- a/sound/soc/sh/rcar/gen.c
+++ b/sound/soc/sh/rcar/gen.c
@@ -219,6 +219,8 @@ static int rsnd_gen2_probe(struct rsnd_priv *priv)
219 RSND_GEN_S_REG(SSI_SYS_STATUS5, 0x884), 219 RSND_GEN_S_REG(SSI_SYS_STATUS5, 0x884),
220 RSND_GEN_S_REG(SSI_SYS_STATUS6, 0x888), 220 RSND_GEN_S_REG(SSI_SYS_STATUS6, 0x888),
221 RSND_GEN_S_REG(SSI_SYS_STATUS7, 0x88c), 221 RSND_GEN_S_REG(SSI_SYS_STATUS7, 0x88c),
222 RSND_GEN_S_REG(HDMI0_SEL, 0x9e0),
223 RSND_GEN_S_REG(HDMI1_SEL, 0x9e4),
222 224
223 /* FIXME: it needs SSI_MODE2/3 in the future */ 225 /* FIXME: it needs SSI_MODE2/3 in the future */
224 RSND_GEN_M_REG(SSI_BUSIF_MODE, 0x0, 0x80), 226 RSND_GEN_M_REG(SSI_BUSIF_MODE, 0x0, 0x80),
diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h
index 323af41ecfcb..99c57611df88 100644
--- a/sound/soc/sh/rcar/rsnd.h
+++ b/sound/soc/sh/rcar/rsnd.h
@@ -18,6 +18,7 @@
18#include <linux/list.h> 18#include <linux/list.h>
19#include <linux/module.h> 19#include <linux/module.h>
20#include <linux/of_device.h> 20#include <linux/of_device.h>
21#include <linux/of_graph.h>
21#include <linux/of_irq.h> 22#include <linux/of_irq.h>
22#include <linux/sh_dma.h> 23#include <linux/sh_dma.h>
23#include <linux/workqueue.h> 24#include <linux/workqueue.h>
@@ -170,6 +171,8 @@ enum rsnd_reg {
170 RSND_REG_SSI_SYS_STATUS5, 171 RSND_REG_SSI_SYS_STATUS5,
171 RSND_REG_SSI_SYS_STATUS6, 172 RSND_REG_SSI_SYS_STATUS6,
172 RSND_REG_SSI_SYS_STATUS7, 173 RSND_REG_SSI_SYS_STATUS7,
174 RSND_REG_HDMI0_SEL,
175 RSND_REG_HDMI1_SEL,
173 176
174 /* SSI */ 177 /* SSI */
175 RSND_REG_SSICR, 178 RSND_REG_SSICR,
@@ -268,6 +271,9 @@ struct rsnd_mod_ops {
268 struct rsnd_dai_stream *io, 271 struct rsnd_dai_stream *io,
269 struct snd_pcm_substream *substream, 272 struct snd_pcm_substream *substream,
270 struct snd_pcm_hw_params *hw_params); 273 struct snd_pcm_hw_params *hw_params);
274 int (*pointer)(struct rsnd_mod *mod,
275 struct rsnd_dai_stream *io,
276 snd_pcm_uframes_t *pointer);
271 int (*fallback)(struct rsnd_mod *mod, 277 int (*fallback)(struct rsnd_mod *mod,
272 struct rsnd_dai_stream *io, 278 struct rsnd_dai_stream *io,
273 struct rsnd_priv *priv); 279 struct rsnd_priv *priv);
@@ -305,6 +311,7 @@ struct rsnd_mod {
305 * H 0: pcm_new 311 * H 0: pcm_new
306 * H 0: fallback 312 * H 0: fallback
307 * H 0: hw_params 313 * H 0: hw_params
314 * H 0: pointer
308 */ 315 */
309#define __rsnd_mod_shift_nolock_start 0 316#define __rsnd_mod_shift_nolock_start 0
310#define __rsnd_mod_shift_nolock_stop 0 317#define __rsnd_mod_shift_nolock_stop 0
@@ -318,6 +325,7 @@ struct rsnd_mod {
318#define __rsnd_mod_shift_pcm_new 28 /* always called */ 325#define __rsnd_mod_shift_pcm_new 28 /* always called */
319#define __rsnd_mod_shift_fallback 28 /* always called */ 326#define __rsnd_mod_shift_fallback 28 /* always called */
320#define __rsnd_mod_shift_hw_params 28 /* always called */ 327#define __rsnd_mod_shift_hw_params 28 /* always called */
328#define __rsnd_mod_shift_pointer 28 /* always called */
321 329
322#define __rsnd_mod_add_probe 0 330#define __rsnd_mod_add_probe 0
323#define __rsnd_mod_add_remove 0 331#define __rsnd_mod_add_remove 0
@@ -331,6 +339,7 @@ struct rsnd_mod {
331#define __rsnd_mod_add_pcm_new 0 339#define __rsnd_mod_add_pcm_new 0
332#define __rsnd_mod_add_fallback 0 340#define __rsnd_mod_add_fallback 0
333#define __rsnd_mod_add_hw_params 0 341#define __rsnd_mod_add_hw_params 0
342#define __rsnd_mod_add_pointer 0
334 343
335#define __rsnd_mod_call_probe 0 344#define __rsnd_mod_call_probe 0
336#define __rsnd_mod_call_remove 0 345#define __rsnd_mod_call_remove 0
@@ -342,6 +351,7 @@ struct rsnd_mod {
342#define __rsnd_mod_call_pcm_new 0 351#define __rsnd_mod_call_pcm_new 0
343#define __rsnd_mod_call_fallback 0 352#define __rsnd_mod_call_fallback 0
344#define __rsnd_mod_call_hw_params 0 353#define __rsnd_mod_call_hw_params 0
354#define __rsnd_mod_call_pointer 0
345#define __rsnd_mod_call_nolock_start 0 355#define __rsnd_mod_call_nolock_start 0
346#define __rsnd_mod_call_nolock_stop 1 356#define __rsnd_mod_call_nolock_stop 1
347 357
@@ -389,11 +399,6 @@ void rsnd_parse_connect_common(struct rsnd_dai *rdai,
389 struct device_node *playback, 399 struct device_node *playback,
390 struct device_node *capture); 400 struct device_node *capture);
391 401
392void rsnd_set_slot(struct rsnd_dai *rdai,
393 int slots, int slots_total);
394int rsnd_get_slot(struct rsnd_dai_stream *io);
395int rsnd_get_slot_num(struct rsnd_dai_stream *io);
396
397int rsnd_runtime_channel_original(struct rsnd_dai_stream *io); 402int rsnd_runtime_channel_original(struct rsnd_dai_stream *io);
398int rsnd_runtime_channel_after_ctu(struct rsnd_dai_stream *io); 403int rsnd_runtime_channel_after_ctu(struct rsnd_dai_stream *io);
399int rsnd_runtime_channel_for_ssi(struct rsnd_dai_stream *io); 404int rsnd_runtime_channel_for_ssi(struct rsnd_dai_stream *io);
@@ -420,13 +425,8 @@ struct rsnd_dai_stream {
420 char name[RSND_DAI_NAME_SIZE]; 425 char name[RSND_DAI_NAME_SIZE];
421 struct snd_pcm_substream *substream; 426 struct snd_pcm_substream *substream;
422 struct rsnd_mod *mod[RSND_MOD_MAX]; 427 struct rsnd_mod *mod[RSND_MOD_MAX];
423 struct rsnd_dai_path_info *info; /* rcar_snd.h */
424 struct rsnd_dai *rdai; 428 struct rsnd_dai *rdai;
425 u32 parent_ssi_status; 429 u32 parent_ssi_status;
426 int byte_pos;
427 int period_pos;
428 int byte_per_period;
429 int next_period_byte;
430}; 430};
431#define rsnd_io_to_mod(io, i) ((i) < RSND_MOD_MAX ? (io)->mod[(i)] : NULL) 431#define rsnd_io_to_mod(io, i) ((i) < RSND_MOD_MAX ? (io)->mod[(i)] : NULL)
432#define rsnd_io_to_mod_ssi(io) rsnd_io_to_mod((io), RSND_MOD_SSI) 432#define rsnd_io_to_mod_ssi(io) rsnd_io_to_mod((io), RSND_MOD_SSI)
@@ -449,9 +449,10 @@ struct rsnd_dai {
449 struct rsnd_dai_stream playback; 449 struct rsnd_dai_stream playback;
450 struct rsnd_dai_stream capture; 450 struct rsnd_dai_stream capture;
451 struct rsnd_priv *priv; 451 struct rsnd_priv *priv;
452 struct snd_pcm_hw_constraint_list constraint;
452 453
453 int slots; 454 int max_channels; /* 2ch - 16ch */
454 int slots_num; 455 int ssi_lane; /* 1lane - 4lane */
455 456
456 unsigned int clk_master:1; 457 unsigned int clk_master:1;
457 unsigned int bit_clk_inv:1; 458 unsigned int bit_clk_inv:1;
@@ -471,13 +472,24 @@ struct rsnd_dai {
471 472
472struct rsnd_dai *rsnd_rdai_get(struct rsnd_priv *priv, int id); 473struct rsnd_dai *rsnd_rdai_get(struct rsnd_priv *priv, int id);
473 474
474bool rsnd_dai_pointer_update(struct rsnd_dai_stream *io, int cnt); 475#define rsnd_rdai_channels_set(rdai, max_channels) \
476 rsnd_rdai_channels_ctrl(rdai, max_channels)
477#define rsnd_rdai_channels_get(rdai) \
478 rsnd_rdai_channels_ctrl(rdai, 0)
479int rsnd_rdai_channels_ctrl(struct rsnd_dai *rdai,
480 int max_channels);
481
482#define rsnd_rdai_ssi_lane_set(rdai, ssi_lane) \
483 rsnd_rdai_ssi_lane_ctrl(rdai, ssi_lane)
484#define rsnd_rdai_ssi_lane_get(rdai) \
485 rsnd_rdai_ssi_lane_ctrl(rdai, 0)
486int rsnd_rdai_ssi_lane_ctrl(struct rsnd_dai *rdai,
487 int ssi_lane);
488
475void rsnd_dai_period_elapsed(struct rsnd_dai_stream *io); 489void rsnd_dai_period_elapsed(struct rsnd_dai_stream *io);
476int rsnd_dai_pointer_offset(struct rsnd_dai_stream *io, int additional);
477int rsnd_dai_connect(struct rsnd_mod *mod, 490int rsnd_dai_connect(struct rsnd_mod *mod,
478 struct rsnd_dai_stream *io, 491 struct rsnd_dai_stream *io,
479 enum rsnd_mod_type type); 492 enum rsnd_mod_type type);
480#define rsnd_dai_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_DAI)
481 493
482/* 494/*
483 * R-Car Gen1/Gen2 495 * R-Car Gen1/Gen2
@@ -491,6 +503,7 @@ phys_addr_t rsnd_gen_get_phy_addr(struct rsnd_priv *priv, int reg_id);
491/* 503/*
492 * R-Car ADG 504 * R-Car ADG
493 */ 505 */
506int rsnd_adg_clk_query(struct rsnd_priv *priv, unsigned int rate);
494int rsnd_adg_ssi_clk_stop(struct rsnd_mod *mod); 507int rsnd_adg_ssi_clk_stop(struct rsnd_mod *mod);
495int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *mod, unsigned int rate); 508int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *mod, unsigned int rate);
496int rsnd_adg_probe(struct rsnd_priv *priv); 509int rsnd_adg_probe(struct rsnd_priv *priv);
@@ -596,6 +609,7 @@ struct rsnd_kctrl_cfg {
596 unsigned int size; 609 unsigned int size;
597 u32 *val; 610 u32 *val;
598 const char * const *texts; 611 const char * const *texts;
612 int (*accept)(struct rsnd_dai_stream *io);
599 void (*update)(struct rsnd_dai_stream *io, struct rsnd_mod *mod); 613 void (*update)(struct rsnd_dai_stream *io, struct rsnd_mod *mod);
600 struct rsnd_dai_stream *io; 614 struct rsnd_dai_stream *io;
601 struct snd_card *card; 615 struct snd_card *card;
@@ -613,12 +627,15 @@ struct rsnd_kctrl_cfg_s {
613 u32 val; 627 u32 val;
614}; 628};
615 629
630int rsnd_kctrl_accept_anytime(struct rsnd_dai_stream *io);
631int rsnd_kctrl_accept_runtime(struct rsnd_dai_stream *io);
616struct rsnd_kctrl_cfg *rsnd_kctrl_init_m(struct rsnd_kctrl_cfg_m *cfg); 632struct rsnd_kctrl_cfg *rsnd_kctrl_init_m(struct rsnd_kctrl_cfg_m *cfg);
617struct rsnd_kctrl_cfg *rsnd_kctrl_init_s(struct rsnd_kctrl_cfg_s *cfg); 633struct rsnd_kctrl_cfg *rsnd_kctrl_init_s(struct rsnd_kctrl_cfg_s *cfg);
618int rsnd_kctrl_new(struct rsnd_mod *mod, 634int rsnd_kctrl_new(struct rsnd_mod *mod,
619 struct rsnd_dai_stream *io, 635 struct rsnd_dai_stream *io,
620 struct snd_soc_pcm_runtime *rtd, 636 struct snd_soc_pcm_runtime *rtd,
621 const unsigned char *name, 637 const unsigned char *name,
638 int (*accept)(struct rsnd_dai_stream *io),
622 void (*update)(struct rsnd_dai_stream *io, 639 void (*update)(struct rsnd_dai_stream *io,
623 struct rsnd_mod *mod), 640 struct rsnd_mod *mod),
624 struct rsnd_kctrl_cfg *cfg, 641 struct rsnd_kctrl_cfg *cfg,
@@ -626,16 +643,16 @@ int rsnd_kctrl_new(struct rsnd_mod *mod,
626 int size, 643 int size,
627 u32 max); 644 u32 max);
628 645
629#define rsnd_kctrl_new_m(mod, io, rtd, name, update, cfg, size, max) \ 646#define rsnd_kctrl_new_m(mod, io, rtd, name, accept, update, cfg, size, max) \
630 rsnd_kctrl_new(mod, io, rtd, name, update, rsnd_kctrl_init_m(cfg), \ 647 rsnd_kctrl_new(mod, io, rtd, name, accept, update, rsnd_kctrl_init_m(cfg), \
631 NULL, size, max) 648 NULL, size, max)
632 649
633#define rsnd_kctrl_new_s(mod, io, rtd, name, update, cfg, max) \ 650#define rsnd_kctrl_new_s(mod, io, rtd, name, accept, update, cfg, max) \
634 rsnd_kctrl_new(mod, io, rtd, name, update, rsnd_kctrl_init_s(cfg), \ 651 rsnd_kctrl_new(mod, io, rtd, name, accept, update, rsnd_kctrl_init_s(cfg), \
635 NULL, 1, max) 652 NULL, 1, max)
636 653
637#define rsnd_kctrl_new_e(mod, io, rtd, name, update, cfg, texts) \ 654#define rsnd_kctrl_new_e(mod, io, rtd, name, accept, update, cfg, texts) \
638 rsnd_kctrl_new(mod, io, rtd, name, update, rsnd_kctrl_init_s(cfg), \ 655 rsnd_kctrl_new(mod, io, rtd, name, accept, update, rsnd_kctrl_init_s(cfg), \
639 texts, 1, ARRAY_SIZE(texts)) 656 texts, 1, ARRAY_SIZE(texts))
640 657
641/* 658/*
@@ -648,6 +665,13 @@ int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod);
648int rsnd_ssi_use_busif(struct rsnd_dai_stream *io); 665int rsnd_ssi_use_busif(struct rsnd_dai_stream *io);
649u32 rsnd_ssi_multi_slaves_runtime(struct rsnd_dai_stream *io); 666u32 rsnd_ssi_multi_slaves_runtime(struct rsnd_dai_stream *io);
650 667
668#define RSND_SSI_HDMI_PORT0 0xf0
669#define RSND_SSI_HDMI_PORT1 0xf1
670int rsnd_ssi_hdmi_port(struct rsnd_dai_stream *io);
671void rsnd_ssi_parse_hdmi_connection(struct rsnd_priv *priv,
672 struct device_node *endpoint,
673 int dai_i);
674
651#define rsnd_ssi_is_pin_sharing(io) \ 675#define rsnd_ssi_is_pin_sharing(io) \
652 __rsnd_ssi_is_pin_sharing(rsnd_io_to_mod_ssi(io)) 676 __rsnd_ssi_is_pin_sharing(rsnd_io_to_mod_ssi(io))
653int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod); 677int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod);
@@ -656,6 +680,8 @@ int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod);
656void rsnd_parse_connect_ssi(struct rsnd_dai *rdai, 680void rsnd_parse_connect_ssi(struct rsnd_dai *rdai,
657 struct device_node *playback, 681 struct device_node *playback,
658 struct device_node *capture); 682 struct device_node *capture);
683unsigned int rsnd_ssi_clk_query(struct rsnd_priv *priv,
684 int param1, int param2, int *idx);
659 685
660/* 686/*
661 * R-Car SSIU 687 * R-Car SSIU
diff --git a/sound/soc/sh/rcar/src.c b/sound/soc/sh/rcar/src.c
index 76a477a3ccb5..7aa239e28491 100644
--- a/sound/soc/sh/rcar/src.c
+++ b/sound/soc/sh/rcar/src.c
@@ -12,10 +12,6 @@
12 12
13#define SRC_NAME "src" 13#define SRC_NAME "src"
14 14
15/* SRCx_STATUS */
16#define OUF_SRCO ((1 << 12) | (1 << 13))
17#define OUF_SRCI ((1 << 9) | (1 << 8))
18
19/* SCU_SYSTEM_STATUS0/1 */ 15/* SCU_SYSTEM_STATUS0/1 */
20#define OUF_SRC(id) ((1 << (id + 16)) | (1 << id)) 16#define OUF_SRC(id) ((1 << (id + 16)) | (1 << id))
21 17
@@ -55,20 +51,6 @@ struct rsnd_src {
55 * 51 *
56 */ 52 */
57 53
58/*
59 * src.c is caring...
60 *
61 * Gen1
62 *
63 * [mem] -> [SRU] -> [SSI]
64 * |--------|
65 *
66 * Gen2
67 *
68 * [mem] -> [SRC] -> [SSIU] -> [SSI]
69 * |-----------------|
70 */
71
72static void rsnd_src_activation(struct rsnd_mod *mod) 54static void rsnd_src_activation(struct rsnd_mod *mod)
73{ 55{
74 rsnd_mod_write(mod, SRC_SWRSR, 0); 56 rsnd_mod_write(mod, SRC_SWRSR, 0);
@@ -515,6 +497,7 @@ static int rsnd_src_pcm_new(struct rsnd_mod *mod,
515 rsnd_io_is_play(io) ? 497 rsnd_io_is_play(io) ?
516 "SRC Out Rate Switch" : 498 "SRC Out Rate Switch" :
517 "SRC In Rate Switch", 499 "SRC In Rate Switch",
500 rsnd_kctrl_accept_anytime,
518 rsnd_src_set_convert_rate, 501 rsnd_src_set_convert_rate,
519 &src->sen, 1); 502 &src->sen, 1);
520 if (ret < 0) 503 if (ret < 0)
@@ -524,6 +507,7 @@ static int rsnd_src_pcm_new(struct rsnd_mod *mod,
524 rsnd_io_is_play(io) ? 507 rsnd_io_is_play(io) ?
525 "SRC Out Rate" : 508 "SRC Out Rate" :
526 "SRC In Rate", 509 "SRC In Rate",
510 rsnd_kctrl_accept_runtime,
527 rsnd_src_set_convert_rate, 511 rsnd_src_set_convert_rate,
528 &src->sync, 192000); 512 &src->sync, 192000);
529 513
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index 91e5c07911b4..46feddd78ee2 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -11,6 +11,7 @@
11 * it under the terms of the GNU General Public License version 2 as 11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation. 12 * published by the Free Software Foundation.
13 */ 13 */
14#include <sound/simple_card_utils.h>
14#include <linux/delay.h> 15#include <linux/delay.h>
15#include "rsnd.h" 16#include "rsnd.h"
16#define RSND_SSI_NAME_SIZE 16 17#define RSND_SSI_NAME_SIZE 16
@@ -76,11 +77,18 @@ struct rsnd_ssi {
76 int rate; 77 int rate;
77 int irq; 78 int irq;
78 unsigned int usrcnt; 79 unsigned int usrcnt;
80
81 int byte_pos;
82 int period_pos;
83 int byte_per_period;
84 int next_period_byte;
79}; 85};
80 86
81/* flags */ 87/* flags */
82#define RSND_SSI_CLK_PIN_SHARE (1 << 0) 88#define RSND_SSI_CLK_PIN_SHARE (1 << 0)
83#define RSND_SSI_NO_BUSIF (1 << 1) /* SSI+DMA without BUSIF */ 89#define RSND_SSI_NO_BUSIF (1 << 1) /* SSI+DMA without BUSIF */
90#define RSND_SSI_HDMI0 (1 << 2) /* for HDMI0 */
91#define RSND_SSI_HDMI1 (1 << 3) /* for HDMI1 */
84 92
85#define for_each_rsnd_ssi(pos, priv, i) \ 93#define for_each_rsnd_ssi(pos, priv, i) \
86 for (i = 0; \ 94 for (i = 0; \
@@ -99,6 +107,20 @@ struct rsnd_ssi {
99#define rsnd_ssi_is_run_mods(mod, io) \ 107#define rsnd_ssi_is_run_mods(mod, io) \
100 (rsnd_ssi_run_mods(io) & (1 << rsnd_mod_id(mod))) 108 (rsnd_ssi_run_mods(io) & (1 << rsnd_mod_id(mod)))
101 109
110int rsnd_ssi_hdmi_port(struct rsnd_dai_stream *io)
111{
112 struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io);
113 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
114
115 if (rsnd_ssi_mode_flags(ssi) & RSND_SSI_HDMI0)
116 return RSND_SSI_HDMI_PORT0;
117
118 if (rsnd_ssi_mode_flags(ssi) & RSND_SSI_HDMI1)
119 return RSND_SSI_HDMI_PORT1;
120
121 return 0;
122}
123
102int rsnd_ssi_use_busif(struct rsnd_dai_stream *io) 124int rsnd_ssi_use_busif(struct rsnd_dai_stream *io)
103{ 125{
104 struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io); 126 struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io);
@@ -186,6 +208,46 @@ u32 rsnd_ssi_multi_slaves_runtime(struct rsnd_dai_stream *io)
186 return 0; 208 return 0;
187} 209}
188 210
211unsigned int rsnd_ssi_clk_query(struct rsnd_priv *priv,
212 int param1, int param2, int *idx)
213{
214 int ssi_clk_mul_table[] = {
215 1, 2, 4, 8, 16, 6, 12,
216 };
217 int j, ret;
218 unsigned int main_rate;
219
220 for (j = 0; j < ARRAY_SIZE(ssi_clk_mul_table); j++) {
221
222 /*
223 * It will set SSIWSR.CONT here, but SSICR.CKDV = 000
224 * with it is not allowed. (SSIWSR.WS_MODE with
225 * SSICR.CKDV = 000 is not allowed either).
226 * Skip it. See SSICR.CKDV
227 */
228 if (j == 0)
229 continue;
230
231 /*
232 * this driver is assuming that
233 * system word is 32bit x chan
234 * see rsnd_ssi_init()
235 */
236 main_rate = 32 * param1 * param2 * ssi_clk_mul_table[j];
237
238 ret = rsnd_adg_clk_query(priv, main_rate);
239 if (ret < 0)
240 continue;
241
242 if (idx)
243 *idx = j;
244
245 return main_rate;
246 }
247
248 return 0;
249}
250
189static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod, 251static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
190 struct rsnd_dai_stream *io) 252 struct rsnd_dai_stream *io)
191{ 253{
@@ -195,10 +257,7 @@ static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
195 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); 257 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
196 struct rsnd_mod *ssi_parent_mod = rsnd_io_to_mod_ssip(io); 258 struct rsnd_mod *ssi_parent_mod = rsnd_io_to_mod_ssip(io);
197 int chan = rsnd_runtime_channel_for_ssi(io); 259 int chan = rsnd_runtime_channel_for_ssi(io);
198 int j, ret; 260 int idx, ret;
199 int ssi_clk_mul_table[] = {
200 1, 2, 4, 8, 16, 6, 12,
201 };
202 unsigned int main_rate; 261 unsigned int main_rate;
203 unsigned int rate = rsnd_io_is_play(io) ? 262 unsigned int rate = rsnd_io_is_play(io) ?
204 rsnd_src_get_out_rate(priv, io) : 263 rsnd_src_get_out_rate(priv, io) :
@@ -222,45 +281,25 @@ static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
222 return 0; 281 return 0;
223 } 282 }
224 283
225 /* 284 main_rate = rsnd_ssi_clk_query(priv, rate, chan, &idx);
226 * Find best clock, and try to start ADG 285 if (!main_rate) {
227 */ 286 dev_err(dev, "unsupported clock rate\n");
228 for (j = 0; j < ARRAY_SIZE(ssi_clk_mul_table); j++) { 287 return -EIO;
229 288 }
230 /*
231 * It will set SSIWSR.CONT here, but SSICR.CKDV = 000
232 * with it is not allowed. (SSIWSR.WS_MODE with
233 * SSICR.CKDV = 000 is not allowed either).
234 * Skip it. See SSICR.CKDV
235 */
236 if (j == 0)
237 continue;
238
239 /*
240 * this driver is assuming that
241 * system word is 32bit x chan
242 * see rsnd_ssi_init()
243 */
244 main_rate = rate * 32 * chan * ssi_clk_mul_table[j];
245
246 ret = rsnd_adg_ssi_clk_try_start(mod, main_rate);
247 if (0 == ret) {
248 ssi->cr_clk = FORCE | SWL_32 |
249 SCKD | SWSD | CKDV(j);
250 ssi->wsr = CONT;
251 289
252 ssi->rate = rate; 290 ret = rsnd_adg_ssi_clk_try_start(mod, main_rate);
291 if (ret < 0)
292 return ret;
253 293
254 dev_dbg(dev, "%s[%d] outputs %u Hz\n", 294 ssi->cr_clk = FORCE | SWL_32 | SCKD | SWSD | CKDV(idx);
255 rsnd_mod_name(mod), 295 ssi->wsr = CONT;
256 rsnd_mod_id(mod), rate); 296 ssi->rate = rate;
257 297
258 return 0; 298 dev_dbg(dev, "%s[%d] outputs %u Hz\n",
259 } 299 rsnd_mod_name(mod),
260 } 300 rsnd_mod_id(mod), rate);
261 301
262 dev_err(dev, "unsupported clock rate\n"); 302 return 0;
263 return -EIO;
264} 303}
265 304
266static void rsnd_ssi_master_clk_stop(struct rsnd_mod *mod, 305static void rsnd_ssi_master_clk_stop(struct rsnd_mod *mod,
@@ -357,6 +396,59 @@ static void rsnd_ssi_register_setup(struct rsnd_mod *mod)
357 ssi->cr_mode); /* without EN */ 396 ssi->cr_mode); /* without EN */
358} 397}
359 398
399static void rsnd_ssi_pointer_init(struct rsnd_mod *mod,
400 struct rsnd_dai_stream *io)
401{
402 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
403 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
404
405 ssi->byte_pos = 0;
406 ssi->period_pos = 0;
407 ssi->byte_per_period = runtime->period_size *
408 runtime->channels *
409 samples_to_bytes(runtime, 1);
410 ssi->next_period_byte = ssi->byte_per_period;
411}
412
413static int rsnd_ssi_pointer_offset(struct rsnd_mod *mod,
414 struct rsnd_dai_stream *io,
415 int additional)
416{
417 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
418 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
419 int pos = ssi->byte_pos + additional;
420
421 pos %= (runtime->periods * ssi->byte_per_period);
422
423 return pos;
424}
425
426static bool rsnd_ssi_pointer_update(struct rsnd_mod *mod,
427 struct rsnd_dai_stream *io,
428 int byte)
429{
430 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
431
432 ssi->byte_pos += byte;
433
434 if (ssi->byte_pos >= ssi->next_period_byte) {
435 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
436
437 ssi->period_pos++;
438 ssi->next_period_byte += ssi->byte_per_period;
439
440 if (ssi->period_pos >= runtime->periods) {
441 ssi->byte_pos = 0;
442 ssi->period_pos = 0;
443 ssi->next_period_byte = ssi->byte_per_period;
444 }
445
446 return true;
447 }
448
449 return false;
450}
451
360/* 452/*
361 * SSI mod common functions 453 * SSI mod common functions
362 */ 454 */
@@ -370,6 +462,8 @@ static int rsnd_ssi_init(struct rsnd_mod *mod,
370 if (!rsnd_ssi_is_run_mods(mod, io)) 462 if (!rsnd_ssi_is_run_mods(mod, io))
371 return 0; 463 return 0;
372 464
465 rsnd_ssi_pointer_init(mod, io);
466
373 ssi->usrcnt++; 467 ssi->usrcnt++;
374 468
375 rsnd_mod_power_on(mod); 469 rsnd_mod_power_on(mod);
@@ -549,7 +643,7 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
549 if (!is_dma && (status & DIRQ)) { 643 if (!is_dma && (status & DIRQ)) {
550 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); 644 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
551 u32 *buf = (u32 *)(runtime->dma_area + 645 u32 *buf = (u32 *)(runtime->dma_area +
552 rsnd_dai_pointer_offset(io, 0)); 646 rsnd_ssi_pointer_offset(mod, io, 0));
553 int shift = 0; 647 int shift = 0;
554 648
555 switch (runtime->sample_bits) { 649 switch (runtime->sample_bits) {
@@ -568,7 +662,7 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
568 else 662 else
569 *buf = (rsnd_mod_read(mod, SSIRDR) >> shift); 663 *buf = (rsnd_mod_read(mod, SSIRDR) >> shift);
570 664
571 elapsed = rsnd_dai_pointer_update(io, sizeof(*buf)); 665 elapsed = rsnd_ssi_pointer_update(mod, io, sizeof(*buf));
572 } 666 }
573 667
574 /* DMA only */ 668 /* DMA only */
@@ -675,6 +769,18 @@ static int rsnd_ssi_common_probe(struct rsnd_mod *mod,
675 return ret; 769 return ret;
676} 770}
677 771
772static int rsnd_ssi_pointer(struct rsnd_mod *mod,
773 struct rsnd_dai_stream *io,
774 snd_pcm_uframes_t *pointer)
775{
776 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
777 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
778
779 *pointer = bytes_to_frames(runtime, ssi->byte_pos);
780
781 return 0;
782}
783
678static struct rsnd_mod_ops rsnd_ssi_pio_ops = { 784static struct rsnd_mod_ops rsnd_ssi_pio_ops = {
679 .name = SSI_NAME, 785 .name = SSI_NAME,
680 .probe = rsnd_ssi_common_probe, 786 .probe = rsnd_ssi_common_probe,
@@ -683,6 +789,7 @@ static struct rsnd_mod_ops rsnd_ssi_pio_ops = {
683 .start = rsnd_ssi_start, 789 .start = rsnd_ssi_start,
684 .stop = rsnd_ssi_stop, 790 .stop = rsnd_ssi_stop,
685 .irq = rsnd_ssi_irq, 791 .irq = rsnd_ssi_irq,
792 .pointer= rsnd_ssi_pointer,
686 .pcm_new = rsnd_ssi_pcm_new, 793 .pcm_new = rsnd_ssi_pcm_new,
687 .hw_params = rsnd_ssi_hw_params, 794 .hw_params = rsnd_ssi_hw_params,
688}; 795};
@@ -787,13 +894,6 @@ int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod)
787 894
788 895
789/* 896/*
790 * Non SSI
791 */
792static struct rsnd_mod_ops rsnd_ssi_non_ops = {
793 .name = SSI_NAME,
794};
795
796/*
797 * ssi mod function 897 * ssi mod function
798 */ 898 */
799static void rsnd_ssi_connect(struct rsnd_mod *mod, 899static void rsnd_ssi_connect(struct rsnd_mod *mod,
@@ -814,7 +914,8 @@ static void rsnd_ssi_connect(struct rsnd_mod *mod,
814 type = types[i]; 914 type = types[i];
815 if (!rsnd_io_to_mod(io, type)) { 915 if (!rsnd_io_to_mod(io, type)) {
816 rsnd_dai_connect(mod, io, type); 916 rsnd_dai_connect(mod, io, type);
817 rsnd_set_slot(rdai, 2 * (i + 1), (i + 1)); 917 rsnd_rdai_channels_set(rdai, (i + 1) * 2);
918 rsnd_rdai_ssi_lane_set(rdai, (i + 1));
818 return; 919 return;
819 } 920 }
820 } 921 }
@@ -847,6 +948,47 @@ void rsnd_parse_connect_ssi(struct rsnd_dai *rdai,
847 of_node_put(node); 948 of_node_put(node);
848} 949}
849 950
951static void __rsnd_ssi_parse_hdmi_connection(struct rsnd_priv *priv,
952 struct rsnd_dai_stream *io,
953 struct device_node *remote_ep)
954{
955 struct device *dev = rsnd_priv_to_dev(priv);
956 struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io);
957 struct rsnd_ssi *ssi;
958
959 if (!mod)
960 return;
961
962 ssi = rsnd_mod_to_ssi(mod);
963
964 if (strstr(remote_ep->full_name, "hdmi0")) {
965 ssi->flags |= RSND_SSI_HDMI0;
966 dev_dbg(dev, "%s[%d] connected to HDMI0\n",
967 rsnd_mod_name(mod), rsnd_mod_id(mod));
968 }
969
970 if (strstr(remote_ep->full_name, "hdmi1")) {
971 ssi->flags |= RSND_SSI_HDMI1;
972 dev_dbg(dev, "%s[%d] connected to HDMI1\n",
973 rsnd_mod_name(mod), rsnd_mod_id(mod));
974 }
975}
976
977void rsnd_ssi_parse_hdmi_connection(struct rsnd_priv *priv,
978 struct device_node *endpoint,
979 int dai_i)
980{
981 struct rsnd_dai *rdai = rsnd_rdai_get(priv, dai_i);
982 struct device_node *remote_ep;
983
984 remote_ep = of_graph_get_remote_endpoint(endpoint);
985 if (!remote_ep)
986 return;
987
988 __rsnd_ssi_parse_hdmi_connection(priv, &rdai->playback, remote_ep);
989 __rsnd_ssi_parse_hdmi_connection(priv, &rdai->capture, remote_ep);
990}
991
850struct rsnd_mod *rsnd_ssi_mod_get(struct rsnd_priv *priv, int id) 992struct rsnd_mod *rsnd_ssi_mod_get(struct rsnd_priv *priv, int id)
851{ 993{
852 if (WARN_ON(id < 0 || id >= rsnd_ssi_nr(priv))) 994 if (WARN_ON(id < 0 || id >= rsnd_ssi_nr(priv)))
@@ -952,7 +1094,6 @@ int rsnd_ssi_probe(struct rsnd_priv *priv)
952 goto rsnd_ssi_probe_done; 1094 goto rsnd_ssi_probe_done;
953 } 1095 }
954 1096
955 ops = &rsnd_ssi_non_ops;
956 if (of_property_read_bool(np, "pio-transfer")) 1097 if (of_property_read_bool(np, "pio-transfer"))
957 ops = &rsnd_ssi_pio_ops; 1098 ops = &rsnd_ssi_pio_ops;
958 else 1099 else
diff --git a/sound/soc/sh/rcar/ssiu.c b/sound/soc/sh/rcar/ssiu.c
index 512d238b79e2..bed2c9c0004b 100644
--- a/sound/soc/sh/rcar/ssiu.c
+++ b/sound/soc/sh/rcar/ssiu.c
@@ -123,6 +123,7 @@ static int rsnd_ssiu_init_gen2(struct rsnd_mod *mod,
123 struct rsnd_dai_stream *io, 123 struct rsnd_dai_stream *io,
124 struct rsnd_priv *priv) 124 struct rsnd_priv *priv)
125{ 125{
126 int hdmi = rsnd_ssi_hdmi_port(io);
126 int ret; 127 int ret;
127 128
128 ret = rsnd_ssiu_init(mod, io, priv); 129 ret = rsnd_ssiu_init(mod, io, priv);
@@ -150,6 +151,42 @@ static int rsnd_ssiu_init_gen2(struct rsnd_mod *mod,
150 rsnd_get_dalign(mod, io)); 151 rsnd_get_dalign(mod, io));
151 } 152 }
152 153
154 if (hdmi) {
155 enum rsnd_mod_type rsnd_ssi_array[] = {
156 RSND_MOD_SSIM1,
157 RSND_MOD_SSIM2,
158 RSND_MOD_SSIM3,
159 };
160 struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io);
161 struct rsnd_mod *pos;
162 u32 val;
163 int i, shift;
164
165 i = rsnd_mod_id(ssi_mod);
166
167 /* output all same SSI as default */
168 val = i << 16 |
169 i << 20 |
170 i << 24 |
171 i << 28 |
172 i;
173
174 for_each_rsnd_mod_array(i, pos, io, rsnd_ssi_array) {
175 shift = (i * 4) + 16;
176 val = (val & ~(0xF << shift)) |
177 rsnd_mod_id(pos) << shift;
178 }
179
180 switch (hdmi) {
181 case RSND_SSI_HDMI_PORT0:
182 rsnd_mod_write(mod, HDMI0_SEL, val);
183 break;
184 case RSND_SSI_HDMI_PORT1:
185 rsnd_mod_write(mod, HDMI1_SEL, val);
186 break;
187 }
188 }
189
153 return 0; 190 return 0;
154} 191}
155 192
diff --git a/sound/soc/soc-compress.c b/sound/soc/soc-compress.c
index bfd71b873ca2..206f36bf43e8 100644
--- a/sound/soc/soc-compress.c
+++ b/sound/soc/soc-compress.c
@@ -81,7 +81,8 @@ out:
81static int soc_compr_open_fe(struct snd_compr_stream *cstream) 81static int soc_compr_open_fe(struct snd_compr_stream *cstream)
82{ 82{
83 struct snd_soc_pcm_runtime *fe = cstream->private_data; 83 struct snd_soc_pcm_runtime *fe = cstream->private_data;
84 struct snd_pcm_substream *fe_substream = fe->pcm->streams[0].substream; 84 struct snd_pcm_substream *fe_substream =
85 fe->pcm->streams[cstream->direction].substream;
85 struct snd_soc_platform *platform = fe->platform; 86 struct snd_soc_platform *platform = fe->platform;
86 struct snd_soc_dai *cpu_dai = fe->cpu_dai; 87 struct snd_soc_dai *cpu_dai = fe->cpu_dai;
87 struct snd_soc_dpcm *dpcm; 88 struct snd_soc_dpcm *dpcm;
@@ -467,7 +468,8 @@ static int soc_compr_set_params_fe(struct snd_compr_stream *cstream,
467 struct snd_compr_params *params) 468 struct snd_compr_params *params)
468{ 469{
469 struct snd_soc_pcm_runtime *fe = cstream->private_data; 470 struct snd_soc_pcm_runtime *fe = cstream->private_data;
470 struct snd_pcm_substream *fe_substream = fe->pcm->streams[0].substream; 471 struct snd_pcm_substream *fe_substream =
472 fe->pcm->streams[cstream->direction].substream;
471 struct snd_soc_platform *platform = fe->platform; 473 struct snd_soc_platform *platform = fe->platform;
472 struct snd_soc_dai *cpu_dai = fe->cpu_dai; 474 struct snd_soc_dai *cpu_dai = fe->cpu_dai;
473 int ret = 0, stream; 475 int ret = 0, stream;
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 754e3ef8d7ae..921622a01944 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -34,6 +34,7 @@
34#include <linux/ctype.h> 34#include <linux/ctype.h>
35#include <linux/slab.h> 35#include <linux/slab.h>
36#include <linux/of.h> 36#include <linux/of.h>
37#include <linux/of_graph.h>
37#include <linux/dmi.h> 38#include <linux/dmi.h>
38#include <sound/core.h> 39#include <sound/core.h>
39#include <sound/jack.h> 40#include <sound/jack.h>
@@ -68,6 +69,20 @@ static int pmdown_time = 5000;
68module_param(pmdown_time, int, 0); 69module_param(pmdown_time, int, 0);
69MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)"); 70MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)");
70 71
72/* If a DMI filed contain strings in this blacklist (e.g.
73 * "Type2 - Board Manufacturer" or "Type1 - TBD by OEM"), it will be taken
74 * as invalid and dropped when setting the card long name from DMI info.
75 */
76static const char * const dmi_blacklist[] = {
77 "To be filled by OEM",
78 "TBD by OEM",
79 "Default String",
80 "Board Manufacturer",
81 "Board Vendor Name",
82 "Board Product Name",
83 NULL, /* terminator */
84};
85
71/* returns the minimum number of bytes needed to represent 86/* returns the minimum number of bytes needed to represent
72 * a particular given value */ 87 * a particular given value */
73static int min_bytes_needed(unsigned long val) 88static int min_bytes_needed(unsigned long val)
@@ -1933,6 +1948,22 @@ static void cleanup_dmi_name(char *name)
1933 name[j] = '\0'; 1948 name[j] = '\0';
1934} 1949}
1935 1950
1951/* Check if a DMI field is valid, i.e. not containing any string
1952 * in the black list.
1953 */
1954static int is_dmi_valid(const char *field)
1955{
1956 int i = 0;
1957
1958 while (dmi_blacklist[i]) {
1959 if (strstr(field, dmi_blacklist[i]))
1960 return 0;
1961 i++;
1962 }
1963
1964 return 1;
1965}
1966
1936/** 1967/**
1937 * snd_soc_set_dmi_name() - Register DMI names to card 1968 * snd_soc_set_dmi_name() - Register DMI names to card
1938 * @card: The card to register DMI names 1969 * @card: The card to register DMI names
@@ -1975,17 +2006,18 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
1975 2006
1976 /* make up dmi long name as: vendor.product.version.board */ 2007 /* make up dmi long name as: vendor.product.version.board */
1977 vendor = dmi_get_system_info(DMI_BOARD_VENDOR); 2008 vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
1978 if (!vendor) { 2009 if (!vendor || !is_dmi_valid(vendor)) {
1979 dev_warn(card->dev, "ASoC: no DMI vendor name!\n"); 2010 dev_warn(card->dev, "ASoC: no DMI vendor name!\n");
1980 return 0; 2011 return 0;
1981 } 2012 }
1982 2013
2014
1983 snprintf(card->dmi_longname, sizeof(card->snd_card->longname), 2015 snprintf(card->dmi_longname, sizeof(card->snd_card->longname),
1984 "%s", vendor); 2016 "%s", vendor);
1985 cleanup_dmi_name(card->dmi_longname); 2017 cleanup_dmi_name(card->dmi_longname);
1986 2018
1987 product = dmi_get_system_info(DMI_PRODUCT_NAME); 2019 product = dmi_get_system_info(DMI_PRODUCT_NAME);
1988 if (product) { 2020 if (product && is_dmi_valid(product)) {
1989 len = strlen(card->dmi_longname); 2021 len = strlen(card->dmi_longname);
1990 snprintf(card->dmi_longname + len, 2022 snprintf(card->dmi_longname + len,
1991 longname_buf_size - len, 2023 longname_buf_size - len,
@@ -1999,7 +2031,7 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
1999 * name in the product version field 2031 * name in the product version field
2000 */ 2032 */
2001 product_version = dmi_get_system_info(DMI_PRODUCT_VERSION); 2033 product_version = dmi_get_system_info(DMI_PRODUCT_VERSION);
2002 if (product_version) { 2034 if (product_version && is_dmi_valid(product_version)) {
2003 len = strlen(card->dmi_longname); 2035 len = strlen(card->dmi_longname);
2004 snprintf(card->dmi_longname + len, 2036 snprintf(card->dmi_longname + len,
2005 longname_buf_size - len, 2037 longname_buf_size - len,
@@ -2012,7 +2044,7 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
2012 } 2044 }
2013 2045
2014 board = dmi_get_system_info(DMI_BOARD_NAME); 2046 board = dmi_get_system_info(DMI_BOARD_NAME);
2015 if (board) { 2047 if (board && is_dmi_valid(board)) {
2016 len = strlen(card->dmi_longname); 2048 len = strlen(card->dmi_longname);
2017 snprintf(card->dmi_longname + len, 2049 snprintf(card->dmi_longname + len,
2018 longname_buf_size - len, 2050 longname_buf_size - len,
@@ -3961,11 +3993,15 @@ unsigned int snd_soc_of_parse_daifmt(struct device_node *np,
3961 prefix = ""; 3993 prefix = "";
3962 3994
3963 /* 3995 /*
3964 * check "[prefix]format = xxx" 3996 * check "dai-format = xxx"
3997 * or "[prefix]format = xxx"
3965 * SND_SOC_DAIFMT_FORMAT_MASK area 3998 * SND_SOC_DAIFMT_FORMAT_MASK area
3966 */ 3999 */
3967 snprintf(prop, sizeof(prop), "%sformat", prefix); 4000 ret = of_property_read_string(np, "dai-format", &str);
3968 ret = of_property_read_string(np, prop, &str); 4001 if (ret < 0) {
4002 snprintf(prop, sizeof(prop), "%sformat", prefix);
4003 ret = of_property_read_string(np, prop, &str);
4004 }
3969 if (ret == 0) { 4005 if (ret == 0) {
3970 for (i = 0; i < ARRAY_SIZE(of_fmt_table); i++) { 4006 for (i = 0; i < ARRAY_SIZE(of_fmt_table); i++) {
3971 if (strcmp(str, of_fmt_table[i].name) == 0) { 4007 if (strcmp(str, of_fmt_table[i].name) == 0) {
@@ -4045,6 +4081,42 @@ unsigned int snd_soc_of_parse_daifmt(struct device_node *np,
4045} 4081}
4046EXPORT_SYMBOL_GPL(snd_soc_of_parse_daifmt); 4082EXPORT_SYMBOL_GPL(snd_soc_of_parse_daifmt);
4047 4083
4084int snd_soc_get_dai_id(struct device_node *ep)
4085{
4086 struct snd_soc_component *pos;
4087 struct device_node *node;
4088 int ret;
4089
4090 node = of_graph_get_port_parent(ep);
4091
4092 /*
4093 * For example HDMI case, HDMI has video/sound port,
4094 * but ALSA SoC needs sound port number only.
4095 * Thus counting HDMI DT port/endpoint doesn't work.
4096 * Then, it should have .of_xlate_dai_id
4097 */
4098 ret = -ENOTSUPP;
4099 mutex_lock(&client_mutex);
4100 list_for_each_entry(pos, &component_list, list) {
4101 struct device_node *component_of_node = pos->dev->of_node;
4102
4103 if (!component_of_node && pos->dev->parent)
4104 component_of_node = pos->dev->parent->of_node;
4105
4106 if (component_of_node != node)
4107 continue;
4108
4109 if (pos->driver->of_xlate_dai_id)
4110 ret = pos->driver->of_xlate_dai_id(pos, ep);
4111
4112 break;
4113 }
4114 mutex_unlock(&client_mutex);
4115
4116 return ret;
4117}
4118EXPORT_SYMBOL_GPL(snd_soc_get_dai_id);
4119
4048int snd_soc_get_dai_name(struct of_phandle_args *args, 4120int snd_soc_get_dai_name(struct of_phandle_args *args,
4049 const char **dai_name) 4121 const char **dai_name)
4050{ 4122{
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index 002772e3ba2c..dd471d2c0266 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -242,6 +242,14 @@ static const struct soc_tplg_map dapm_map[] = {
242 {SND_SOC_TPLG_DAPM_DAI_IN, snd_soc_dapm_dai_in}, 242 {SND_SOC_TPLG_DAPM_DAI_IN, snd_soc_dapm_dai_in},
243 {SND_SOC_TPLG_DAPM_DAI_OUT, snd_soc_dapm_dai_out}, 243 {SND_SOC_TPLG_DAPM_DAI_OUT, snd_soc_dapm_dai_out},
244 {SND_SOC_TPLG_DAPM_DAI_LINK, snd_soc_dapm_dai_link}, 244 {SND_SOC_TPLG_DAPM_DAI_LINK, snd_soc_dapm_dai_link},
245 {SND_SOC_TPLG_DAPM_BUFFER, snd_soc_dapm_buffer},
246 {SND_SOC_TPLG_DAPM_SCHEDULER, snd_soc_dapm_scheduler},
247 {SND_SOC_TPLG_DAPM_EFFECT, snd_soc_dapm_effect},
248 {SND_SOC_TPLG_DAPM_SIGGEN, snd_soc_dapm_siggen},
249 {SND_SOC_TPLG_DAPM_SRC, snd_soc_dapm_src},
250 {SND_SOC_TPLG_DAPM_ASRC, snd_soc_dapm_asrc},
251 {SND_SOC_TPLG_DAPM_ENCODER, snd_soc_dapm_encoder},
252 {SND_SOC_TPLG_DAPM_DECODER, snd_soc_dapm_decoder},
245}; 253};
246 254
247static int tplc_chan_get_reg(struct soc_tplg *tplg, 255static int tplc_chan_get_reg(struct soc_tplg *tplg,
@@ -344,6 +352,17 @@ static int soc_tplg_widget_load(struct soc_tplg *tplg,
344 return 0; 352 return 0;
345} 353}
346 354
355/* optionally pass new dynamic widget to component driver. This is mainly for
356 * external widgets where we can assign private data/ops */
357static int soc_tplg_widget_ready(struct soc_tplg *tplg,
358 struct snd_soc_dapm_widget *w, struct snd_soc_tplg_dapm_widget *tplg_w)
359{
360 if (tplg->comp && tplg->ops && tplg->ops->widget_ready)
361 return tplg->ops->widget_ready(tplg->comp, w, tplg_w);
362
363 return 0;
364}
365
347/* pass DAI configurations to component driver for extra initialization */ 366/* pass DAI configurations to component driver for extra initialization */
348static int soc_tplg_dai_load(struct soc_tplg *tplg, 367static int soc_tplg_dai_load(struct soc_tplg *tplg,
349 struct snd_soc_dai_driver *dai_drv) 368 struct snd_soc_dai_driver *dai_drv)
@@ -1152,7 +1171,8 @@ static int soc_tplg_dapm_graph_elems_load(struct soc_tplg *tplg,
1152 return -EINVAL; 1171 return -EINVAL;
1153 } 1172 }
1154 1173
1155 dev_dbg(tplg->dev, "ASoC: adding %d DAPM routes\n", count); 1174 dev_dbg(tplg->dev, "ASoC: adding %d DAPM routes for index %d\n", count,
1175 hdr->index);
1156 1176
1157 for (i = 0; i < count; i++) { 1177 for (i = 0; i < count; i++) {
1158 elem = (struct snd_soc_tplg_dapm_graph_elem *)tplg->pos; 1178 elem = (struct snd_soc_tplg_dapm_graph_elem *)tplg->pos;
@@ -1465,6 +1485,7 @@ static int soc_tplg_dapm_widget_create(struct soc_tplg *tplg,
1465 if (template.id < 0) 1485 if (template.id < 0)
1466 return template.id; 1486 return template.id;
1467 1487
1488 /* strings are allocated here, but used and freed by the widget */
1468 template.name = kstrdup(w->name, GFP_KERNEL); 1489 template.name = kstrdup(w->name, GFP_KERNEL);
1469 if (!template.name) 1490 if (!template.name)
1470 return -ENOMEM; 1491 return -ENOMEM;
@@ -1577,11 +1598,17 @@ widget:
1577 widget->dobj.widget.kcontrol_type = kcontrol_type; 1598 widget->dobj.widget.kcontrol_type = kcontrol_type;
1578 widget->dobj.ops = tplg->ops; 1599 widget->dobj.ops = tplg->ops;
1579 widget->dobj.index = tplg->index; 1600 widget->dobj.index = tplg->index;
1580 kfree(template.sname);
1581 kfree(template.name);
1582 list_add(&widget->dobj.list, &tplg->comp->dobj_list); 1601 list_add(&widget->dobj.list, &tplg->comp->dobj_list);
1602
1603 ret = soc_tplg_widget_ready(tplg, widget, w);
1604 if (ret < 0)
1605 goto ready_err;
1606
1583 return 0; 1607 return 0;
1584 1608
1609ready_err:
1610 snd_soc_tplg_widget_remove(widget);
1611 snd_soc_dapm_free_widget(widget);
1585hdr_err: 1612hdr_err:
1586 kfree(template.sname); 1613 kfree(template.sname);
1587err: 1614err:
@@ -1628,7 +1655,7 @@ static int soc_tplg_dapm_complete(struct soc_tplg *tplg)
1628 */ 1655 */
1629 if (!card || !card->instantiated) { 1656 if (!card || !card->instantiated) {
1630 dev_warn(tplg->dev, "ASoC: Parent card not yet available," 1657 dev_warn(tplg->dev, "ASoC: Parent card not yet available,"
1631 "Do not add new widgets now\n"); 1658 " widget card binding deferred\n");
1632 return 0; 1659 return 0;
1633 } 1660 }
1634 1661
@@ -2363,7 +2390,7 @@ static int soc_tplg_load_header(struct soc_tplg *tplg,
2363 2390
2364 /* check for matching ID */ 2391 /* check for matching ID */
2365 if (hdr->index != tplg->req_index && 2392 if (hdr->index != tplg->req_index &&
2366 hdr->index != SND_SOC_TPLG_INDEX_ALL) 2393 tplg->req_index != SND_SOC_TPLG_INDEX_ALL)
2367 return 0; 2394 return 0;
2368 2395
2369 tplg->index = hdr->index; 2396 tplg->index = hdr->index;
diff --git a/sound/soc/stm/Kconfig b/sound/soc/stm/Kconfig
index 972970f0890a..3398e6c57f37 100644
--- a/sound/soc/stm/Kconfig
+++ b/sound/soc/stm/Kconfig
@@ -1,8 +1,31 @@
1menuconfig SND_SOC_STM32 1menu "STMicroelectronics STM32 SOC audio support"
2 tristate "STMicroelectronics STM32 SOC audio support" 2
3config SND_SOC_STM32_SAI
4 tristate "STM32 SAI interface (Serial Audio Interface) support"
3 depends on ARCH_STM32 || COMPILE_TEST 5 depends on ARCH_STM32 || COMPILE_TEST
4 depends on SND_SOC 6 depends on SND_SOC
5 select SND_SOC_GENERIC_DMAENGINE_PCM 7 select SND_SOC_GENERIC_DMAENGINE_PCM
6 select REGMAP_MMIO 8 select REGMAP_MMIO
7 help 9 help
8 Say Y if you want to enable ASoC-support for STM32 10 Say Y if you want to enable SAI for STM32
11
12config SND_SOC_STM32_I2S
13 tristate "STM32 I2S interface (SPI/I2S block) support"
14 depends on ARCH_STM32 || COMPILE_TEST
15 depends on SND_SOC
16 select SND_SOC_GENERIC_DMAENGINE_PCM
17 select REGMAP_MMIO
18 help
19 Say Y if you want to enable I2S for STM32
20
21config SND_SOC_STM32_SPDIFRX
22 tristate "STM32 S/PDIF receiver (SPDIFRX) support"
23 depends on ARCH_STM32 || COMPILE_TEST
24 depends on SND_SOC
25 select SND_SOC_GENERIC_DMAENGINE_PCM
26 select REGMAP_MMIO
27 select SND_SOC_SPDIF
28 help
29 Say Y if you want to enable S/PDIF capture for STM32
30
31endmenu
diff --git a/sound/soc/stm/Makefile b/sound/soc/stm/Makefile
index e466a4759698..4ed22e648a9a 100644
--- a/sound/soc/stm/Makefile
+++ b/sound/soc/stm/Makefile
@@ -1,6 +1,14 @@
1# SAI 1# SAI
2snd-soc-stm32-sai-sub-objs := stm32_sai_sub.o 2snd-soc-stm32-sai-sub-objs := stm32_sai_sub.o
3obj-$(CONFIG_SND_SOC_STM32) += snd-soc-stm32-sai-sub.o 3obj-$(CONFIG_SND_SOC_STM32_SAI) += snd-soc-stm32-sai-sub.o
4 4
5snd-soc-stm32-sai-objs := stm32_sai.o 5snd-soc-stm32-sai-objs := stm32_sai.o
6obj-$(CONFIG_SND_SOC_STM32) += snd-soc-stm32-sai.o 6obj-$(CONFIG_SND_SOC_STM32_SAI) += snd-soc-stm32-sai.o
7
8# I2S
9snd-soc-stm32-i2s-objs := stm32_i2s.o
10obj-$(CONFIG_SND_SOC_STM32_I2S) += snd-soc-stm32-i2s.o
11
12# SPDIFRX
13snd-soc-stm32-spdifrx-objs := stm32_spdifrx.o
14obj-$(CONFIG_SND_SOC_STM32_SPDIFRX) += snd-soc-stm32-spdifrx.o
diff --git a/sound/soc/stm/stm32_i2s.c b/sound/soc/stm/stm32_i2s.c
new file mode 100644
index 000000000000..8052629a89df
--- /dev/null
+++ b/sound/soc/stm/stm32_i2s.c
@@ -0,0 +1,946 @@
1/*
2 * STM32 ALSA SoC Digital Audio Interface (I2S) driver.
3 *
4 * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
5 * Author(s): Olivier Moysan <olivier.moysan@st.com> for STMicroelectronics.
6 *
7 * License terms: GPL V2.0.
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License version 2 as published by
11 * the Free Software Foundation.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16 * details.
17 */
18
19#include <linux/clk.h>
20#include <linux/delay.h>
21#include <linux/module.h>
22#include <linux/of_irq.h>
23#include <linux/of_platform.h>
24#include <linux/regmap.h>
25#include <linux/reset.h>
26#include <linux/spinlock.h>
27
28#include <sound/dmaengine_pcm.h>
29#include <sound/pcm_params.h>
30
31#define STM32_I2S_CR1_REG 0x0
32#define STM32_I2S_CFG1_REG 0x08
33#define STM32_I2S_CFG2_REG 0x0C
34#define STM32_I2S_IER_REG 0x10
35#define STM32_I2S_SR_REG 0x14
36#define STM32_I2S_IFCR_REG 0x18
37#define STM32_I2S_TXDR_REG 0X20
38#define STM32_I2S_RXDR_REG 0x30
39#define STM32_I2S_CGFR_REG 0X50
40
41/* Bit definition for SPI2S_CR1 register */
42#define I2S_CR1_SPE BIT(0)
43#define I2S_CR1_CSTART BIT(9)
44#define I2S_CR1_CSUSP BIT(10)
45#define I2S_CR1_HDDIR BIT(11)
46#define I2S_CR1_SSI BIT(12)
47#define I2S_CR1_CRC33_17 BIT(13)
48#define I2S_CR1_RCRCI BIT(14)
49#define I2S_CR1_TCRCI BIT(15)
50
51/* Bit definition for SPI_CFG2 register */
52#define I2S_CFG2_IOSWP_SHIFT 15
53#define I2S_CFG2_IOSWP BIT(I2S_CFG2_IOSWP_SHIFT)
54#define I2S_CFG2_LSBFRST BIT(23)
55#define I2S_CFG2_AFCNTR BIT(31)
56
57/* Bit definition for SPI_CFG1 register */
58#define I2S_CFG1_FTHVL_SHIFT 5
59#define I2S_CFG1_FTHVL_MASK GENMASK(8, I2S_CFG1_FTHVL_SHIFT)
60#define I2S_CFG1_FTHVL_SET(x) ((x) << I2S_CFG1_FTHVL_SHIFT)
61
62#define I2S_CFG1_TXDMAEN BIT(15)
63#define I2S_CFG1_RXDMAEN BIT(14)
64
65/* Bit definition for SPI2S_IER register */
66#define I2S_IER_RXPIE BIT(0)
67#define I2S_IER_TXPIE BIT(1)
68#define I2S_IER_DPXPIE BIT(2)
69#define I2S_IER_EOTIE BIT(3)
70#define I2S_IER_TXTFIE BIT(4)
71#define I2S_IER_UDRIE BIT(5)
72#define I2S_IER_OVRIE BIT(6)
73#define I2S_IER_CRCEIE BIT(7)
74#define I2S_IER_TIFREIE BIT(8)
75#define I2S_IER_MODFIE BIT(9)
76#define I2S_IER_TSERFIE BIT(10)
77
78/* Bit definition for SPI2S_SR register */
79#define I2S_SR_RXP BIT(0)
80#define I2S_SR_TXP BIT(1)
81#define I2S_SR_DPXP BIT(2)
82#define I2S_SR_EOT BIT(3)
83#define I2S_SR_TXTF BIT(4)
84#define I2S_SR_UDR BIT(5)
85#define I2S_SR_OVR BIT(6)
86#define I2S_SR_CRCERR BIT(7)
87#define I2S_SR_TIFRE BIT(8)
88#define I2S_SR_MODF BIT(9)
89#define I2S_SR_TSERF BIT(10)
90#define I2S_SR_SUSP BIT(11)
91#define I2S_SR_TXC BIT(12)
92#define I2S_SR_RXPLVL GENMASK(14, 13)
93#define I2S_SR_RXWNE BIT(15)
94
95#define I2S_SR_MASK GENMASK(15, 0)
96
97/* Bit definition for SPI_IFCR register */
98#define I2S_IFCR_EOTC BIT(3)
99#define I2S_IFCR_TXTFC BIT(4)
100#define I2S_IFCR_UDRC BIT(5)
101#define I2S_IFCR_OVRC BIT(6)
102#define I2S_IFCR_CRCEC BIT(7)
103#define I2S_IFCR_TIFREC BIT(8)
104#define I2S_IFCR_MODFC BIT(9)
105#define I2S_IFCR_TSERFC BIT(10)
106#define I2S_IFCR_SUSPC BIT(11)
107
108#define I2S_IFCR_MASK GENMASK(11, 3)
109
110/* Bit definition for SPI_I2SCGFR register */
111#define I2S_CGFR_I2SMOD BIT(0)
112
113#define I2S_CGFR_I2SCFG_SHIFT 1
114#define I2S_CGFR_I2SCFG_MASK GENMASK(3, I2S_CGFR_I2SCFG_SHIFT)
115#define I2S_CGFR_I2SCFG_SET(x) ((x) << I2S_CGFR_I2SCFG_SHIFT)
116
117#define I2S_CGFR_I2SSTD_SHIFT 4
118#define I2S_CGFR_I2SSTD_MASK GENMASK(5, I2S_CGFR_I2SSTD_SHIFT)
119#define I2S_CGFR_I2SSTD_SET(x) ((x) << I2S_CGFR_I2SSTD_SHIFT)
120
121#define I2S_CGFR_PCMSYNC BIT(7)
122
123#define I2S_CGFR_DATLEN_SHIFT 8
124#define I2S_CGFR_DATLEN_MASK GENMASK(9, I2S_CGFR_DATLEN_SHIFT)
125#define I2S_CGFR_DATLEN_SET(x) ((x) << I2S_CGFR_DATLEN_SHIFT)
126
127#define I2S_CGFR_CHLEN_SHIFT 10
128#define I2S_CGFR_CHLEN BIT(I2S_CGFR_CHLEN_SHIFT)
129#define I2S_CGFR_CKPOL BIT(11)
130#define I2S_CGFR_FIXCH BIT(12)
131#define I2S_CGFR_WSINV BIT(13)
132#define I2S_CGFR_DATFMT BIT(14)
133
134#define I2S_CGFR_I2SDIV_SHIFT 16
135#define I2S_CGFR_I2SDIV_BIT_H 23
136#define I2S_CGFR_I2SDIV_MASK GENMASK(I2S_CGFR_I2SDIV_BIT_H,\
137 I2S_CGFR_I2SDIV_SHIFT)
138#define I2S_CGFR_I2SDIV_SET(x) ((x) << I2S_CGFR_I2SDIV_SHIFT)
139#define I2S_CGFR_I2SDIV_MAX ((1 << (I2S_CGFR_I2SDIV_BIT_H -\
140 I2S_CGFR_I2SDIV_SHIFT)) - 1)
141
142#define I2S_CGFR_ODD_SHIFT 24
143#define I2S_CGFR_ODD BIT(I2S_CGFR_ODD_SHIFT)
144#define I2S_CGFR_MCKOE BIT(25)
145
146enum i2s_master_mode {
147 I2S_MS_NOT_SET,
148 I2S_MS_MASTER,
149 I2S_MS_SLAVE,
150};
151
152enum i2s_mode {
153 I2S_I2SMOD_TX_SLAVE,
154 I2S_I2SMOD_RX_SLAVE,
155 I2S_I2SMOD_TX_MASTER,
156 I2S_I2SMOD_RX_MASTER,
157 I2S_I2SMOD_FD_SLAVE,
158 I2S_I2SMOD_FD_MASTER,
159};
160
161enum i2s_fifo_th {
162 I2S_FIFO_TH_NONE,
163 I2S_FIFO_TH_ONE_QUARTER,
164 I2S_FIFO_TH_HALF,
165 I2S_FIFO_TH_THREE_QUARTER,
166 I2S_FIFO_TH_FULL,
167};
168
169enum i2s_std {
170 I2S_STD_I2S,
171 I2S_STD_LEFT_J,
172 I2S_STD_RIGHT_J,
173 I2S_STD_DSP,
174};
175
176enum i2s_datlen {
177 I2S_I2SMOD_DATLEN_16,
178 I2S_I2SMOD_DATLEN_24,
179 I2S_I2SMOD_DATLEN_32,
180};
181
182#define STM32_I2S_DAI_NAME_SIZE 20
183#define STM32_I2S_FIFO_SIZE 16
184
185#define STM32_I2S_IS_MASTER(x) ((x)->ms_flg == I2S_MS_MASTER)
186#define STM32_I2S_IS_SLAVE(x) ((x)->ms_flg == I2S_MS_SLAVE)
187
188/**
189 * @regmap_conf: I2S register map configuration pointer
190 * @egmap: I2S register map pointer
191 * @pdev: device data pointer
192 * @dai_drv: DAI driver pointer
193 * @dma_data_tx: dma configuration data for tx channel
194 * @dma_data_rx: dma configuration data for tx channel
195 * @substream: PCM substream data pointer
196 * @i2sclk: kernel clock feeding the I2S clock generator
197 * @pclk: peripheral clock driving bus interface
198 * @x8kclk: I2S parent clock for sampling frequencies multiple of 8kHz
199 * @x11kclk: I2S parent clock for sampling frequencies multiple of 11kHz
200 * @base: mmio register base virtual address
201 * @phys_addr: I2S registers physical base address
202 * @lock_fd: lock to manage race conditions in full duplex mode
203 * @dais_name: DAI name
204 * @mclk_rate: master clock frequency (Hz)
205 * @fmt: DAI protocol
206 * @refcount: keep count of opened streams on I2S
207 * @ms_flg: master mode flag.
208 */
209struct stm32_i2s_data {
210 const struct regmap_config *regmap_conf;
211 struct regmap *regmap;
212 struct platform_device *pdev;
213 struct snd_soc_dai_driver *dai_drv;
214 struct snd_dmaengine_dai_dma_data dma_data_tx;
215 struct snd_dmaengine_dai_dma_data dma_data_rx;
216 struct snd_pcm_substream *substream;
217 struct clk *i2sclk;
218 struct clk *pclk;
219 struct clk *x8kclk;
220 struct clk *x11kclk;
221 void __iomem *base;
222 dma_addr_t phys_addr;
223 spinlock_t lock_fd; /* Manage race conditions for full duplex */
224 char dais_name[STM32_I2S_DAI_NAME_SIZE];
225 unsigned int mclk_rate;
226 unsigned int fmt;
227 int refcount;
228 int ms_flg;
229};
230
231static irqreturn_t stm32_i2s_isr(int irq, void *devid)
232{
233 struct stm32_i2s_data *i2s = (struct stm32_i2s_data *)devid;
234 struct platform_device *pdev = i2s->pdev;
235 u32 sr, ier;
236 unsigned long flags;
237 int err = 0;
238
239 regmap_read(i2s->regmap, STM32_I2S_SR_REG, &sr);
240 regmap_read(i2s->regmap, STM32_I2S_IER_REG, &ier);
241
242 flags = sr & ier;
243 if (!flags) {
244 dev_dbg(&pdev->dev, "Spurious IRQ sr=0x%08x, ier=0x%08x\n",
245 sr, ier);
246 return IRQ_NONE;
247 }
248
249 regmap_update_bits(i2s->regmap, STM32_I2S_IFCR_REG,
250 I2S_IFCR_MASK, flags);
251
252 if (flags & I2S_SR_OVR) {
253 dev_dbg(&pdev->dev, "Overrun\n");
254 err = 1;
255 }
256
257 if (flags & I2S_SR_UDR) {
258 dev_dbg(&pdev->dev, "Underrun\n");
259 err = 1;
260 }
261
262 if (flags & I2S_SR_TIFRE)
263 dev_dbg(&pdev->dev, "Frame error\n");
264
265 if (err)
266 snd_pcm_stop_xrun(i2s->substream);
267
268 return IRQ_HANDLED;
269}
270
271static bool stm32_i2s_readable_reg(struct device *dev, unsigned int reg)
272{
273 switch (reg) {
274 case STM32_I2S_CR1_REG:
275 case STM32_I2S_CFG1_REG:
276 case STM32_I2S_CFG2_REG:
277 case STM32_I2S_IER_REG:
278 case STM32_I2S_SR_REG:
279 case STM32_I2S_IFCR_REG:
280 case STM32_I2S_TXDR_REG:
281 case STM32_I2S_RXDR_REG:
282 case STM32_I2S_CGFR_REG:
283 return true;
284 default:
285 return false;
286 }
287}
288
289static bool stm32_i2s_volatile_reg(struct device *dev, unsigned int reg)
290{
291 switch (reg) {
292 case STM32_I2S_TXDR_REG:
293 case STM32_I2S_RXDR_REG:
294 return true;
295 default:
296 return false;
297 }
298}
299
300static bool stm32_i2s_writeable_reg(struct device *dev, unsigned int reg)
301{
302 switch (reg) {
303 case STM32_I2S_CR1_REG:
304 case STM32_I2S_CFG1_REG:
305 case STM32_I2S_CFG2_REG:
306 case STM32_I2S_IER_REG:
307 case STM32_I2S_IFCR_REG:
308 case STM32_I2S_TXDR_REG:
309 case STM32_I2S_CGFR_REG:
310 return true;
311 default:
312 return false;
313 }
314}
315
316static int stm32_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
317{
318 struct stm32_i2s_data *i2s = snd_soc_dai_get_drvdata(cpu_dai);
319 u32 cgfr;
320 u32 cgfr_mask = I2S_CGFR_I2SSTD_MASK | I2S_CGFR_CKPOL |
321 I2S_CGFR_WSINV | I2S_CGFR_I2SCFG_MASK;
322
323 dev_dbg(cpu_dai->dev, "fmt %x\n", fmt);
324
325 /*
326 * winv = 0 : default behavior (high/low) for all standards
327 * ckpol = 0 for all standards.
328 */
329 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
330 case SND_SOC_DAIFMT_I2S:
331 cgfr = I2S_CGFR_I2SSTD_SET(I2S_STD_I2S);
332 break;
333 case SND_SOC_DAIFMT_MSB:
334 cgfr = I2S_CGFR_I2SSTD_SET(I2S_STD_LEFT_J);
335 break;
336 case SND_SOC_DAIFMT_LSB:
337 cgfr = I2S_CGFR_I2SSTD_SET(I2S_STD_RIGHT_J);
338 break;
339 case SND_SOC_DAIFMT_DSP_A:
340 cgfr = I2S_CGFR_I2SSTD_SET(I2S_STD_DSP);
341 break;
342 /* DSP_B not mapped on I2S PCM long format. 1 bit offset does not fit */
343 default:
344 dev_err(cpu_dai->dev, "Unsupported protocol %#x\n",
345 fmt & SND_SOC_DAIFMT_FORMAT_MASK);
346 return -EINVAL;
347 }
348
349 /* DAI clock strobing */
350 switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
351 case SND_SOC_DAIFMT_NB_NF:
352 break;
353 case SND_SOC_DAIFMT_IB_NF:
354 cgfr |= I2S_CGFR_CKPOL;
355 break;
356 case SND_SOC_DAIFMT_NB_IF:
357 cgfr |= I2S_CGFR_WSINV;
358 break;
359 case SND_SOC_DAIFMT_IB_IF:
360 cgfr |= I2S_CGFR_CKPOL;
361 cgfr |= I2S_CGFR_WSINV;
362 break;
363 default:
364 dev_err(cpu_dai->dev, "Unsupported strobing %#x\n",
365 fmt & SND_SOC_DAIFMT_INV_MASK);
366 return -EINVAL;
367 }
368
369 /* DAI clock master masks */
370 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
371 case SND_SOC_DAIFMT_CBM_CFM:
372 i2s->ms_flg = I2S_MS_SLAVE;
373 break;
374 case SND_SOC_DAIFMT_CBS_CFS:
375 i2s->ms_flg = I2S_MS_MASTER;
376 break;
377 default:
378 dev_err(cpu_dai->dev, "Unsupported mode %#x\n",
379 fmt & SND_SOC_DAIFMT_MASTER_MASK);
380 return -EINVAL;
381 }
382
383 i2s->fmt = fmt;
384 return regmap_update_bits(i2s->regmap, STM32_I2S_CGFR_REG,
385 cgfr_mask, cgfr);
386}
387
388static int stm32_i2s_set_sysclk(struct snd_soc_dai *cpu_dai,
389 int clk_id, unsigned int freq, int dir)
390{
391 struct stm32_i2s_data *i2s = snd_soc_dai_get_drvdata(cpu_dai);
392
393 dev_dbg(cpu_dai->dev, "I2S MCLK frequency is %uHz\n", freq);
394
395 if ((dir == SND_SOC_CLOCK_OUT) && STM32_I2S_IS_MASTER(i2s)) {
396 i2s->mclk_rate = freq;
397
398 /* Enable master clock if master mode and mclk-fs are set */
399 return regmap_update_bits(i2s->regmap, STM32_I2S_CGFR_REG,
400 I2S_CGFR_MCKOE, I2S_CGFR_MCKOE);
401 }
402
403 return 0;
404}
405
406static int stm32_i2s_configure_clock(struct snd_soc_dai *cpu_dai,
407 struct snd_pcm_hw_params *params)
408{
409 struct stm32_i2s_data *i2s = snd_soc_dai_get_drvdata(cpu_dai);
410 unsigned long i2s_clock_rate;
411 unsigned int tmp, div, real_div, nb_bits, frame_len;
412 unsigned int rate = params_rate(params);
413 int ret;
414 u32 cgfr, cgfr_mask;
415 bool odd;
416
417 if (!(rate % 11025))
418 clk_set_parent(i2s->i2sclk, i2s->x11kclk);
419 else
420 clk_set_parent(i2s->i2sclk, i2s->x8kclk);
421 i2s_clock_rate = clk_get_rate(i2s->i2sclk);
422
423 /*
424 * mckl = mclk_ratio x ws
425 * i2s mode : mclk_ratio = 256
426 * dsp mode : mclk_ratio = 128
427 *
428 * mclk on
429 * i2s mode : div = i2s_clk / (mclk_ratio * ws)
430 * dsp mode : div = i2s_clk / (mclk_ratio * ws)
431 * mclk off
432 * i2s mode : div = i2s_clk / (nb_bits x ws)
433 * dsp mode : div = i2s_clk / (nb_bits x ws)
434 */
435 if (i2s->mclk_rate) {
436 tmp = DIV_ROUND_CLOSEST(i2s_clock_rate, i2s->mclk_rate);
437 } else {
438 frame_len = 32;
439 if ((i2s->fmt & SND_SOC_DAIFMT_FORMAT_MASK) ==
440 SND_SOC_DAIFMT_DSP_A)
441 frame_len = 16;
442
443 /* master clock not enabled */
444 ret = regmap_read(i2s->regmap, STM32_I2S_CGFR_REG, &cgfr);
445 if (ret < 0)
446 return ret;
447
448 nb_bits = frame_len * ((cgfr & I2S_CGFR_CHLEN) + 1);
449 tmp = DIV_ROUND_CLOSEST(i2s_clock_rate, (nb_bits * rate));
450 }
451
452 /* Check the parity of the divider */
453 odd = tmp & 0x1;
454
455 /* Compute the div prescaler */
456 div = tmp >> 1;
457
458 cgfr = I2S_CGFR_I2SDIV_SET(div) | (odd << I2S_CGFR_ODD_SHIFT);
459 cgfr_mask = I2S_CGFR_I2SDIV_MASK | I2S_CGFR_ODD;
460
461 real_div = ((2 * div) + odd);
462 dev_dbg(cpu_dai->dev, "I2S clk: %ld, SCLK: %d\n",
463 i2s_clock_rate, rate);
464 dev_dbg(cpu_dai->dev, "Divider: 2*%d(div)+%d(odd) = %d\n",
465 div, odd, real_div);
466
467 if (((div == 1) && odd) || (div > I2S_CGFR_I2SDIV_MAX)) {
468 dev_err(cpu_dai->dev, "Wrong divider setting\n");
469 return -EINVAL;
470 }
471
472 if (!div && !odd)
473 dev_warn(cpu_dai->dev, "real divider forced to 1\n");
474
475 ret = regmap_update_bits(i2s->regmap, STM32_I2S_CGFR_REG,
476 cgfr_mask, cgfr);
477 if (ret < 0)
478 return ret;
479
480 /* Set bitclock and frameclock to their inactive state */
481 return regmap_update_bits(i2s->regmap, STM32_I2S_CFG2_REG,
482 I2S_CFG2_AFCNTR, I2S_CFG2_AFCNTR);
483}
484
485static int stm32_i2s_configure(struct snd_soc_dai *cpu_dai,
486 struct snd_pcm_hw_params *params,
487 struct snd_pcm_substream *substream)
488{
489 struct stm32_i2s_data *i2s = snd_soc_dai_get_drvdata(cpu_dai);
490 int format = params_width(params);
491 u32 cfgr, cfgr_mask, cfg1, cfg1_mask;
492 unsigned int fthlv;
493 int ret;
494
495 if ((params_channels(params) == 1) &&
496 ((i2s->fmt & SND_SOC_DAIFMT_FORMAT_MASK) != SND_SOC_DAIFMT_DSP_A)) {
497 dev_err(cpu_dai->dev, "Mono mode supported only by DSP_A\n");
498 return -EINVAL;
499 }
500
501 switch (format) {
502 case 16:
503 cfgr = I2S_CGFR_DATLEN_SET(I2S_I2SMOD_DATLEN_16);
504 cfgr_mask = I2S_CGFR_DATLEN_MASK;
505 break;
506 case 32:
507 cfgr = I2S_CGFR_DATLEN_SET(I2S_I2SMOD_DATLEN_32) |
508 I2S_CGFR_CHLEN;
509 cfgr_mask = I2S_CGFR_DATLEN_MASK | I2S_CGFR_CHLEN;
510 break;
511 default:
512 dev_err(cpu_dai->dev, "Unexpected format %d", format);
513 return -EINVAL;
514 }
515
516 if (STM32_I2S_IS_SLAVE(i2s)) {
517 cfgr |= I2S_CGFR_I2SCFG_SET(I2S_I2SMOD_FD_SLAVE);
518
519 /* As data length is either 16 or 32 bits, fixch always set */
520 cfgr |= I2S_CGFR_FIXCH;
521 cfgr_mask |= I2S_CGFR_FIXCH;
522 } else {
523 cfgr |= I2S_CGFR_I2SCFG_SET(I2S_I2SMOD_FD_MASTER);
524 }
525 cfgr_mask |= I2S_CGFR_I2SCFG_MASK;
526
527 ret = regmap_update_bits(i2s->regmap, STM32_I2S_CGFR_REG,
528 cfgr_mask, cfgr);
529 if (ret < 0)
530 return ret;
531
532 cfg1 = I2S_CFG1_RXDMAEN | I2S_CFG1_TXDMAEN;
533 cfg1_mask = cfg1;
534
535 fthlv = STM32_I2S_FIFO_SIZE * I2S_FIFO_TH_ONE_QUARTER / 4;
536 cfg1 |= I2S_CFG1_FTHVL_SET(fthlv - 1);
537 cfg1_mask |= I2S_CFG1_FTHVL_MASK;
538
539 return regmap_update_bits(i2s->regmap, STM32_I2S_CFG1_REG,
540 cfg1_mask, cfg1);
541}
542
543static int stm32_i2s_startup(struct snd_pcm_substream *substream,
544 struct snd_soc_dai *cpu_dai)
545{
546 struct stm32_i2s_data *i2s = snd_soc_dai_get_drvdata(cpu_dai);
547
548 i2s->substream = substream;
549
550 spin_lock(&i2s->lock_fd);
551 i2s->refcount++;
552 spin_unlock(&i2s->lock_fd);
553
554 return regmap_update_bits(i2s->regmap, STM32_I2S_IFCR_REG,
555 I2S_IFCR_MASK, I2S_IFCR_MASK);
556}
557
558static int stm32_i2s_hw_params(struct snd_pcm_substream *substream,
559 struct snd_pcm_hw_params *params,
560 struct snd_soc_dai *cpu_dai)
561{
562 struct stm32_i2s_data *i2s = snd_soc_dai_get_drvdata(cpu_dai);
563 int ret;
564
565 ret = stm32_i2s_configure(cpu_dai, params, substream);
566 if (ret < 0) {
567 dev_err(cpu_dai->dev, "Configuration returned error %d\n", ret);
568 return ret;
569 }
570
571 if (STM32_I2S_IS_MASTER(i2s))
572 ret = stm32_i2s_configure_clock(cpu_dai, params);
573
574 return ret;
575}
576
577static int stm32_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
578 struct snd_soc_dai *cpu_dai)
579{
580 struct stm32_i2s_data *i2s = snd_soc_dai_get_drvdata(cpu_dai);
581 bool playback_flg = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
582 u32 cfg1_mask, ier;
583 int ret;
584
585 switch (cmd) {
586 case SNDRV_PCM_TRIGGER_START:
587 case SNDRV_PCM_TRIGGER_RESUME:
588 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
589 /* Enable i2s */
590 dev_dbg(cpu_dai->dev, "start I2S\n");
591
592 ret = regmap_update_bits(i2s->regmap, STM32_I2S_CR1_REG,
593 I2S_CR1_SPE, I2S_CR1_SPE);
594 if (ret < 0) {
595 dev_err(cpu_dai->dev, "Error %d enabling I2S\n", ret);
596 return ret;
597 }
598
599 ret = regmap_update_bits(i2s->regmap, STM32_I2S_CR1_REG,
600 I2S_CR1_CSTART, I2S_CR1_CSTART);
601 if (ret < 0) {
602 dev_err(cpu_dai->dev, "Error %d starting I2S\n", ret);
603 return ret;
604 }
605
606 regmap_update_bits(i2s->regmap, STM32_I2S_IFCR_REG,
607 I2S_IFCR_MASK, I2S_IFCR_MASK);
608
609 if (playback_flg) {
610 ier = I2S_IER_UDRIE;
611 } else {
612 ier = I2S_IER_OVRIE;
613
614 spin_lock(&i2s->lock_fd);
615 if (i2s->refcount == 1)
616 /* dummy write to trigger capture */
617 regmap_write(i2s->regmap,
618 STM32_I2S_TXDR_REG, 0);
619 spin_unlock(&i2s->lock_fd);
620 }
621
622 if (STM32_I2S_IS_SLAVE(i2s))
623 ier |= I2S_IER_TIFREIE;
624
625 regmap_update_bits(i2s->regmap, STM32_I2S_IER_REG, ier, ier);
626 break;
627 case SNDRV_PCM_TRIGGER_STOP:
628 case SNDRV_PCM_TRIGGER_SUSPEND:
629 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
630 if (playback_flg)
631 regmap_update_bits(i2s->regmap, STM32_I2S_IER_REG,
632 I2S_IER_UDRIE,
633 (unsigned int)~I2S_IER_UDRIE);
634 else
635 regmap_update_bits(i2s->regmap, STM32_I2S_IER_REG,
636 I2S_IER_OVRIE,
637 (unsigned int)~I2S_IER_OVRIE);
638
639 spin_lock(&i2s->lock_fd);
640 i2s->refcount--;
641 if (i2s->refcount) {
642 spin_unlock(&i2s->lock_fd);
643 break;
644 }
645 spin_unlock(&i2s->lock_fd);
646
647 dev_dbg(cpu_dai->dev, "stop I2S\n");
648
649 ret = regmap_update_bits(i2s->regmap, STM32_I2S_CR1_REG,
650 I2S_CR1_SPE, 0);
651 if (ret < 0) {
652 dev_err(cpu_dai->dev, "Error %d disabling I2S\n", ret);
653 return ret;
654 }
655
656 cfg1_mask = I2S_CFG1_RXDMAEN | I2S_CFG1_TXDMAEN;
657 regmap_update_bits(i2s->regmap, STM32_I2S_CFG1_REG,
658 cfg1_mask, 0);
659 break;
660 default:
661 return -EINVAL;
662 }
663
664 return 0;
665}
666
667static void stm32_i2s_shutdown(struct snd_pcm_substream *substream,
668 struct snd_soc_dai *cpu_dai)
669{
670 struct stm32_i2s_data *i2s = snd_soc_dai_get_drvdata(cpu_dai);
671
672 i2s->substream = NULL;
673
674 regmap_update_bits(i2s->regmap, STM32_I2S_CGFR_REG,
675 I2S_CGFR_MCKOE, (unsigned int)~I2S_CGFR_MCKOE);
676}
677
678static int stm32_i2s_dai_probe(struct snd_soc_dai *cpu_dai)
679{
680 struct stm32_i2s_data *i2s = dev_get_drvdata(cpu_dai->dev);
681 struct snd_dmaengine_dai_dma_data *dma_data_tx = &i2s->dma_data_tx;
682 struct snd_dmaengine_dai_dma_data *dma_data_rx = &i2s->dma_data_rx;
683
684 /* Buswidth will be set by framework */
685 dma_data_tx->addr_width = DMA_SLAVE_BUSWIDTH_UNDEFINED;
686 dma_data_tx->addr = (dma_addr_t)(i2s->phys_addr) + STM32_I2S_TXDR_REG;
687 dma_data_tx->maxburst = 1;
688 dma_data_rx->addr_width = DMA_SLAVE_BUSWIDTH_UNDEFINED;
689 dma_data_rx->addr = (dma_addr_t)(i2s->phys_addr) + STM32_I2S_RXDR_REG;
690 dma_data_rx->maxburst = 1;
691
692 snd_soc_dai_init_dma_data(cpu_dai, dma_data_tx, dma_data_rx);
693
694 return 0;
695}
696
697static const struct regmap_config stm32_h7_i2s_regmap_conf = {
698 .reg_bits = 32,
699 .reg_stride = 4,
700 .val_bits = 32,
701 .max_register = STM32_I2S_CGFR_REG,
702 .readable_reg = stm32_i2s_readable_reg,
703 .volatile_reg = stm32_i2s_volatile_reg,
704 .writeable_reg = stm32_i2s_writeable_reg,
705 .fast_io = true,
706};
707
708static const struct snd_soc_dai_ops stm32_i2s_pcm_dai_ops = {
709 .set_sysclk = stm32_i2s_set_sysclk,
710 .set_fmt = stm32_i2s_set_dai_fmt,
711 .startup = stm32_i2s_startup,
712 .hw_params = stm32_i2s_hw_params,
713 .trigger = stm32_i2s_trigger,
714 .shutdown = stm32_i2s_shutdown,
715};
716
717static const struct snd_pcm_hardware stm32_i2s_pcm_hw = {
718 .info = SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP,
719 .buffer_bytes_max = 8 * PAGE_SIZE,
720 .period_bytes_max = 2048,
721 .periods_min = 2,
722 .periods_max = 8,
723};
724
725static const struct snd_dmaengine_pcm_config stm32_i2s_pcm_config = {
726 .pcm_hardware = &stm32_i2s_pcm_hw,
727 .prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
728 .prealloc_buffer_size = PAGE_SIZE * 8,
729};
730
731static const struct snd_soc_component_driver stm32_i2s_component = {
732 .name = "stm32-i2s",
733};
734
735static void stm32_i2s_dai_init(struct snd_soc_pcm_stream *stream,
736 char *stream_name)
737{
738 stream->stream_name = stream_name;
739 stream->channels_min = 1;
740 stream->channels_max = 2;
741 stream->rates = SNDRV_PCM_RATE_8000_192000;
742 stream->formats = SNDRV_PCM_FMTBIT_S16_LE |
743 SNDRV_PCM_FMTBIT_S32_LE;
744}
745
746static int stm32_i2s_dais_init(struct platform_device *pdev,
747 struct stm32_i2s_data *i2s)
748{
749 struct snd_soc_dai_driver *dai_ptr;
750
751 dai_ptr = devm_kzalloc(&pdev->dev, sizeof(struct snd_soc_dai_driver),
752 GFP_KERNEL);
753 if (!dai_ptr)
754 return -ENOMEM;
755
756 snprintf(i2s->dais_name, STM32_I2S_DAI_NAME_SIZE,
757 "%s", dev_name(&pdev->dev));
758
759 dai_ptr->probe = stm32_i2s_dai_probe;
760 dai_ptr->ops = &stm32_i2s_pcm_dai_ops;
761 dai_ptr->name = i2s->dais_name;
762 dai_ptr->id = 1;
763 stm32_i2s_dai_init(&dai_ptr->playback, "playback");
764 stm32_i2s_dai_init(&dai_ptr->capture, "capture");
765 i2s->dai_drv = dai_ptr;
766
767 return 0;
768}
769
770static const struct of_device_id stm32_i2s_ids[] = {
771 {
772 .compatible = "st,stm32h7-i2s",
773 .data = &stm32_h7_i2s_regmap_conf
774 },
775 {},
776};
777
778static int stm32_i2s_parse_dt(struct platform_device *pdev,
779 struct stm32_i2s_data *i2s)
780{
781 struct device_node *np = pdev->dev.of_node;
782 const struct of_device_id *of_id;
783 struct reset_control *rst;
784 struct resource *res;
785 int irq, ret;
786
787 if (!np)
788 return -ENODEV;
789
790 of_id = of_match_device(stm32_i2s_ids, &pdev->dev);
791 if (of_id)
792 i2s->regmap_conf = (const struct regmap_config *)of_id->data;
793 else
794 return -EINVAL;
795
796 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
797 i2s->base = devm_ioremap_resource(&pdev->dev, res);
798 if (IS_ERR(i2s->base))
799 return PTR_ERR(i2s->base);
800
801 i2s->phys_addr = res->start;
802
803 /* Get clocks */
804 i2s->pclk = devm_clk_get(&pdev->dev, "pclk");
805 if (IS_ERR(i2s->pclk)) {
806 dev_err(&pdev->dev, "Could not get pclk\n");
807 return PTR_ERR(i2s->pclk);
808 }
809
810 i2s->i2sclk = devm_clk_get(&pdev->dev, "i2sclk");
811 if (IS_ERR(i2s->i2sclk)) {
812 dev_err(&pdev->dev, "Could not get i2sclk\n");
813 return PTR_ERR(i2s->i2sclk);
814 }
815
816 i2s->x8kclk = devm_clk_get(&pdev->dev, "x8k");
817 if (IS_ERR(i2s->x8kclk)) {
818 dev_err(&pdev->dev, "missing x8k parent clock\n");
819 return PTR_ERR(i2s->x8kclk);
820 }
821
822 i2s->x11kclk = devm_clk_get(&pdev->dev, "x11k");
823 if (IS_ERR(i2s->x11kclk)) {
824 dev_err(&pdev->dev, "missing x11k parent clock\n");
825 return PTR_ERR(i2s->x11kclk);
826 }
827
828 /* Get irqs */
829 irq = platform_get_irq(pdev, 0);
830 if (irq < 0) {
831 dev_err(&pdev->dev, "no irq for node %s\n", pdev->name);
832 return -ENOENT;
833 }
834
835 ret = devm_request_irq(&pdev->dev, irq, stm32_i2s_isr, IRQF_ONESHOT,
836 dev_name(&pdev->dev), i2s);
837 if (ret) {
838 dev_err(&pdev->dev, "irq request returned %d\n", ret);
839 return ret;
840 }
841
842 /* Reset */
843 rst = devm_reset_control_get(&pdev->dev, NULL);
844 if (!IS_ERR(rst)) {
845 reset_control_assert(rst);
846 udelay(2);
847 reset_control_deassert(rst);
848 }
849
850 return 0;
851}
852
853static int stm32_i2s_probe(struct platform_device *pdev)
854{
855 struct stm32_i2s_data *i2s;
856 int ret;
857
858 i2s = devm_kzalloc(&pdev->dev, sizeof(*i2s), GFP_KERNEL);
859 if (!i2s)
860 return -ENOMEM;
861
862 ret = stm32_i2s_parse_dt(pdev, i2s);
863 if (ret)
864 return ret;
865
866 i2s->pdev = pdev;
867 i2s->ms_flg = I2S_MS_NOT_SET;
868 spin_lock_init(&i2s->lock_fd);
869 platform_set_drvdata(pdev, i2s);
870
871 ret = stm32_i2s_dais_init(pdev, i2s);
872 if (ret)
873 return ret;
874
875 i2s->regmap = devm_regmap_init_mmio(&pdev->dev, i2s->base,
876 i2s->regmap_conf);
877 if (IS_ERR(i2s->regmap)) {
878 dev_err(&pdev->dev, "regmap init failed\n");
879 return PTR_ERR(i2s->regmap);
880 }
881
882 ret = clk_prepare_enable(i2s->pclk);
883 if (ret) {
884 dev_err(&pdev->dev, "Enable pclk failed: %d\n", ret);
885 return ret;
886 }
887
888 ret = clk_prepare_enable(i2s->i2sclk);
889 if (ret) {
890 dev_err(&pdev->dev, "Enable i2sclk failed: %d\n", ret);
891 goto err_pclk_disable;
892 }
893
894 ret = devm_snd_soc_register_component(&pdev->dev, &stm32_i2s_component,
895 i2s->dai_drv, 1);
896 if (ret)
897 goto err_clocks_disable;
898
899 ret = devm_snd_dmaengine_pcm_register(&pdev->dev,
900 &stm32_i2s_pcm_config, 0);
901 if (ret)
902 goto err_clocks_disable;
903
904 /* Set SPI/I2S in i2s mode */
905 ret = regmap_update_bits(i2s->regmap, STM32_I2S_CGFR_REG,
906 I2S_CGFR_I2SMOD, I2S_CGFR_I2SMOD);
907 if (ret)
908 goto err_clocks_disable;
909
910 return ret;
911
912err_clocks_disable:
913 clk_disable_unprepare(i2s->i2sclk);
914err_pclk_disable:
915 clk_disable_unprepare(i2s->pclk);
916
917 return ret;
918}
919
920static int stm32_i2s_remove(struct platform_device *pdev)
921{
922 struct stm32_i2s_data *i2s = platform_get_drvdata(pdev);
923
924 clk_disable_unprepare(i2s->i2sclk);
925 clk_disable_unprepare(i2s->pclk);
926
927 return 0;
928}
929
930MODULE_DEVICE_TABLE(of, stm32_i2s_ids);
931
932static struct platform_driver stm32_i2s_driver = {
933 .driver = {
934 .name = "st,stm32-i2s",
935 .of_match_table = stm32_i2s_ids,
936 },
937 .probe = stm32_i2s_probe,
938 .remove = stm32_i2s_remove,
939};
940
941module_platform_driver(stm32_i2s_driver);
942
943MODULE_DESCRIPTION("STM32 Soc i2s Interface");
944MODULE_AUTHOR("Olivier Moysan, <olivier.moysan@st.com>");
945MODULE_ALIAS("platform:stm32-i2s");
946MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/stm/stm32_sai.c b/sound/soc/stm/stm32_sai.c
index 2a27a26bf7a1..f7713314913b 100644
--- a/sound/soc/stm/stm32_sai.c
+++ b/sound/soc/stm/stm32_sai.c
@@ -27,8 +27,17 @@
27 27
28#include "stm32_sai.h" 28#include "stm32_sai.h"
29 29
30static const struct stm32_sai_conf stm32_sai_conf_f4 = {
31 .version = SAI_STM32F4,
32};
33
34static const struct stm32_sai_conf stm32_sai_conf_h7 = {
35 .version = SAI_STM32H7,
36};
37
30static const struct of_device_id stm32_sai_ids[] = { 38static const struct of_device_id stm32_sai_ids[] = {
31 { .compatible = "st,stm32f4-sai", .data = (void *)SAI_STM32F4 }, 39 { .compatible = "st,stm32f4-sai", .data = (void *)&stm32_sai_conf_f4 },
40 { .compatible = "st,stm32h7-sai", .data = (void *)&stm32_sai_conf_h7 },
32 {} 41 {}
33}; 42};
34 43
@@ -52,7 +61,7 @@ static int stm32_sai_probe(struct platform_device *pdev)
52 61
53 of_id = of_match_device(stm32_sai_ids, &pdev->dev); 62 of_id = of_match_device(stm32_sai_ids, &pdev->dev);
54 if (of_id) 63 if (of_id)
55 sai->version = (enum stm32_sai_version)of_id->data; 64 sai->conf = (struct stm32_sai_conf *)of_id->data;
56 else 65 else
57 return -EINVAL; 66 return -EINVAL;
58 67
@@ -110,6 +119,6 @@ static struct platform_driver stm32_sai_driver = {
110module_platform_driver(stm32_sai_driver); 119module_platform_driver(stm32_sai_driver);
111 120
112MODULE_DESCRIPTION("STM32 Soc SAI Interface"); 121MODULE_DESCRIPTION("STM32 Soc SAI Interface");
113MODULE_AUTHOR("Olivier Moysan, <olivier.moysan@st.com>"); 122MODULE_AUTHOR("Olivier Moysan <olivier.moysan@st.com>");
114MODULE_ALIAS("platform:st,stm32-sai"); 123MODULE_ALIAS("platform:st,stm32-sai");
115MODULE_LICENSE("GPL v2"); 124MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/stm/stm32_sai.h b/sound/soc/stm/stm32_sai.h
index a801fda5066f..889974dc62d9 100644
--- a/sound/soc/stm/stm32_sai.h
+++ b/sound/soc/stm/stm32_sai.h
@@ -31,6 +31,10 @@
31#define STM_SAI_CLRFR_REGX 0x18 31#define STM_SAI_CLRFR_REGX 0x18
32#define STM_SAI_DR_REGX 0x1C 32#define STM_SAI_DR_REGX 0x1C
33 33
34/* Sub-block A registers, relative to sub-block A address */
35#define STM_SAI_PDMCR_REGX 0x40
36#define STM_SAI_PDMLY_REGX 0x44
37
34/******************** Bit definition for SAI_GCR register *******************/ 38/******************** Bit definition for SAI_GCR register *******************/
35#define SAI_GCR_SYNCIN_SHIFT 0 39#define SAI_GCR_SYNCIN_SHIFT 0
36#define SAI_GCR_SYNCIN_MASK GENMASK(1, SAI_GCR_SYNCIN_SHIFT) 40#define SAI_GCR_SYNCIN_MASK GENMASK(1, SAI_GCR_SYNCIN_SHIFT)
@@ -75,10 +79,11 @@
75#define SAI_XCR1_NODIV BIT(SAI_XCR1_NODIV_SHIFT) 79#define SAI_XCR1_NODIV BIT(SAI_XCR1_NODIV_SHIFT)
76 80
77#define SAI_XCR1_MCKDIV_SHIFT 20 81#define SAI_XCR1_MCKDIV_SHIFT 20
78#define SAI_XCR1_MCKDIV_WIDTH 4 82#define SAI_XCR1_MCKDIV_WIDTH(x) (((x) == SAI_STM32F4) ? 4 : 6)
79#define SAI_XCR1_MCKDIV_MASK GENMASK(24, SAI_XCR1_MCKDIV_SHIFT) 83#define SAI_XCR1_MCKDIV_MASK(x) GENMASK((SAI_XCR1_MCKDIV_SHIFT + (x) - 1),\
84 SAI_XCR1_MCKDIV_SHIFT)
80#define SAI_XCR1_MCKDIV_SET(x) ((x) << SAI_XCR1_MCKDIV_SHIFT) 85#define SAI_XCR1_MCKDIV_SET(x) ((x) << SAI_XCR1_MCKDIV_SHIFT)
81#define SAI_XCR1_MCKDIV_MAX ((1 << SAI_XCR1_MCKDIV_WIDTH) - 1) 86#define SAI_XCR1_MCKDIV_MAX(x) ((1 << SAI_XCR1_MCKDIV_WIDTH(x)) - 1)
82 87
83#define SAI_XCR1_OSR_SHIFT 26 88#define SAI_XCR1_OSR_SHIFT 26
84#define SAI_XCR1_OSR BIT(SAI_XCR1_OSR_SHIFT) 89#define SAI_XCR1_OSR BIT(SAI_XCR1_OSR_SHIFT)
@@ -125,7 +130,6 @@
125#define SAI_XFRCR_FSOFF BIT(SAI_XFRCR_FSOFF_SHIFT) 130#define SAI_XFRCR_FSOFF BIT(SAI_XFRCR_FSOFF_SHIFT)
126 131
127/****************** Bit definition for SAI_XSLOTR register ******************/ 132/****************** Bit definition for SAI_XSLOTR register ******************/
128
129#define SAI_XSLOTR_FBOFF_SHIFT 0 133#define SAI_XSLOTR_FBOFF_SHIFT 0
130#define SAI_XSLOTR_FBOFF_MASK GENMASK(4, SAI_XSLOTR_FBOFF_SHIFT) 134#define SAI_XSLOTR_FBOFF_MASK GENMASK(4, SAI_XSLOTR_FBOFF_SHIFT)
131#define SAI_XSLOTR_FBOFF_SET(x) ((x) << SAI_XSLOTR_FBOFF_SHIFT) 135#define SAI_XSLOTR_FBOFF_SET(x) ((x) << SAI_XSLOTR_FBOFF_SHIFT)
@@ -179,8 +183,65 @@
179#define SAI_XCLRFR_SHIFT 0 183#define SAI_XCLRFR_SHIFT 0
180#define SAI_XCLRFR_MASK GENMASK(6, SAI_XCLRFR_SHIFT) 184#define SAI_XCLRFR_MASK GENMASK(6, SAI_XCLRFR_SHIFT)
181 185
186/****************** Bit definition for SAI_PDMCR register ******************/
187#define SAI_PDMCR_PDMEN BIT(0)
188
189#define SAI_PDMCR_MICNBR_SHIFT 4
190#define SAI_PDMCR_MICNBR_MASK GENMASK(5, SAI_PDMCR_MICNBR_SHIFT)
191#define SAI_PDMCR_MICNBR_SET(x) ((x) << SAI_PDMCR_MICNBR_SHIFT)
192
193#define SAI_PDMCR_CKEN1 BIT(8)
194#define SAI_PDMCR_CKEN2 BIT(9)
195#define SAI_PDMCR_CKEN3 BIT(10)
196#define SAI_PDMCR_CKEN4 BIT(11)
197
198/****************** Bit definition for (SAI_PDMDLY register ****************/
199#define SAI_PDMDLY_1L_SHIFT 0
200#define SAI_PDMDLY_1L_MASK GENMASK(2, SAI_PDMDLY_1L_SHIFT)
201#define SAI_PDMDLY_1L_WIDTH 3
202
203#define SAI_PDMDLY_1R_SHIFT 4
204#define SAI_PDMDLY_1R_MASK GENMASK(6, SAI_PDMDLY_1R_SHIFT)
205#define SAI_PDMDLY_1R_WIDTH 3
206
207#define SAI_PDMDLY_2L_SHIFT 8
208#define SAI_PDMDLY_2L_MASK GENMASK(10, SAI_PDMDLY_2L_SHIFT)
209#define SAI_PDMDLY_2L_WIDTH 3
210
211#define SAI_PDMDLY_2R_SHIFT 12
212#define SAI_PDMDLY_2R_MASK GENMASK(14, SAI_PDMDLY_2R_SHIFT)
213#define SAI_PDMDLY_2R_WIDTH 3
214
215#define SAI_PDMDLY_3L_SHIFT 16
216#define SAI_PDMDLY_3L_MASK GENMASK(18, SAI_PDMDLY_3L_SHIFT)
217#define SAI_PDMDLY_3L_WIDTH 3
218
219#define SAI_PDMDLY_3R_SHIFT 20
220#define SAI_PDMDLY_3R_MASK GENMASK(22, SAI_PDMDLY_3R_SHIFT)
221#define SAI_PDMDLY_3R_WIDTH 3
222
223#define SAI_PDMDLY_4L_SHIFT 24
224#define SAI_PDMDLY_4L_MASK GENMASK(26, SAI_PDMDLY_4L_SHIFT)
225#define SAI_PDMDLY_4L_WIDTH 3
226
227#define SAI_PDMDLY_4R_SHIFT 28
228#define SAI_PDMDLY_4R_MASK GENMASK(30, SAI_PDMDLY_4R_SHIFT)
229#define SAI_PDMDLY_4R_WIDTH 3
230
231#define STM_SAI_IS_F4(ip) ((ip)->conf->version == SAI_STM32F4)
232#define STM_SAI_IS_H7(ip) ((ip)->conf->version == SAI_STM32H7)
233
182enum stm32_sai_version { 234enum stm32_sai_version {
183 SAI_STM32F4 235 SAI_STM32F4,
236 SAI_STM32H7
237};
238
239/**
240 * struct stm32_sai_conf - SAI configuration
241 * @version: SAI version
242 */
243struct stm32_sai_conf {
244 int version;
184}; 245};
185 246
186/** 247/**
@@ -195,6 +256,6 @@ struct stm32_sai_data {
195 struct platform_device *pdev; 256 struct platform_device *pdev;
196 struct clk *clk_x8k; 257 struct clk *clk_x8k;
197 struct clk *clk_x11k; 258 struct clk *clk_x11k;
198 int version; 259 struct stm32_sai_conf *conf;
199 int irq; 260 int irq;
200}; 261};
diff --git a/sound/soc/stm/stm32_sai_sub.c b/sound/soc/stm/stm32_sai_sub.c
index ae4706ca265b..90d439613899 100644
--- a/sound/soc/stm/stm32_sai_sub.c
+++ b/sound/soc/stm/stm32_sai_sub.c
@@ -51,12 +51,15 @@
51#define STM_SAI_A_ID 0x0 51#define STM_SAI_A_ID 0x0
52#define STM_SAI_B_ID 0x1 52#define STM_SAI_B_ID 0x1
53 53
54#define STM_SAI_IS_SUB_A(x) ((x)->id == STM_SAI_A_ID)
55#define STM_SAI_IS_SUB_B(x) ((x)->id == STM_SAI_B_ID)
54#define STM_SAI_BLOCK_NAME(x) (((x)->id == STM_SAI_A_ID) ? "A" : "B") 56#define STM_SAI_BLOCK_NAME(x) (((x)->id == STM_SAI_A_ID) ? "A" : "B")
55 57
56/** 58/**
57 * struct stm32_sai_sub_data - private data of SAI sub block (block A or B) 59 * struct stm32_sai_sub_data - private data of SAI sub block (block A or B)
58 * @pdev: device data pointer 60 * @pdev: device data pointer
59 * @regmap: SAI register map pointer 61 * @regmap: SAI register map pointer
62 * @regmap_config: SAI sub block register map configuration pointer
60 * @dma_params: dma configuration data for rx or tx channel 63 * @dma_params: dma configuration data for rx or tx channel
61 * @cpu_dai_drv: DAI driver data pointer 64 * @cpu_dai_drv: DAI driver data pointer
62 * @cpu_dai: DAI runtime data pointer 65 * @cpu_dai: DAI runtime data pointer
@@ -79,6 +82,7 @@
79struct stm32_sai_sub_data { 82struct stm32_sai_sub_data {
80 struct platform_device *pdev; 83 struct platform_device *pdev;
81 struct regmap *regmap; 84 struct regmap *regmap;
85 const struct regmap_config *regmap_config;
82 struct snd_dmaengine_dai_dma_data dma_params; 86 struct snd_dmaengine_dai_dma_data dma_params;
83 struct snd_soc_dai_driver *cpu_dai_drv; 87 struct snd_soc_dai_driver *cpu_dai_drv;
84 struct snd_soc_dai *cpu_dai; 88 struct snd_soc_dai *cpu_dai;
@@ -118,6 +122,8 @@ static bool stm32_sai_sub_readable_reg(struct device *dev, unsigned int reg)
118 case STM_SAI_SR_REGX: 122 case STM_SAI_SR_REGX:
119 case STM_SAI_CLRFR_REGX: 123 case STM_SAI_CLRFR_REGX:
120 case STM_SAI_DR_REGX: 124 case STM_SAI_DR_REGX:
125 case STM_SAI_PDMCR_REGX:
126 case STM_SAI_PDMLY_REGX:
121 return true; 127 return true;
122 default: 128 default:
123 return false; 129 return false;
@@ -145,13 +151,15 @@ static bool stm32_sai_sub_writeable_reg(struct device *dev, unsigned int reg)
145 case STM_SAI_SR_REGX: 151 case STM_SAI_SR_REGX:
146 case STM_SAI_CLRFR_REGX: 152 case STM_SAI_CLRFR_REGX:
147 case STM_SAI_DR_REGX: 153 case STM_SAI_DR_REGX:
154 case STM_SAI_PDMCR_REGX:
155 case STM_SAI_PDMLY_REGX:
148 return true; 156 return true;
149 default: 157 default:
150 return false; 158 return false;
151 } 159 }
152} 160}
153 161
154static const struct regmap_config stm32_sai_sub_regmap_config = { 162static const struct regmap_config stm32_sai_sub_regmap_config_f4 = {
155 .reg_bits = 32, 163 .reg_bits = 32,
156 .reg_stride = 4, 164 .reg_stride = 4,
157 .val_bits = 32, 165 .val_bits = 32,
@@ -162,6 +170,17 @@ static const struct regmap_config stm32_sai_sub_regmap_config = {
162 .fast_io = true, 170 .fast_io = true,
163}; 171};
164 172
173static const struct regmap_config stm32_sai_sub_regmap_config_h7 = {
174 .reg_bits = 32,
175 .reg_stride = 4,
176 .val_bits = 32,
177 .max_register = STM_SAI_PDMLY_REGX,
178 .readable_reg = stm32_sai_sub_readable_reg,
179 .volatile_reg = stm32_sai_sub_volatile_reg,
180 .writeable_reg = stm32_sai_sub_writeable_reg,
181 .fast_io = true,
182};
183
165static irqreturn_t stm32_sai_isr(int irq, void *devid) 184static irqreturn_t stm32_sai_isr(int irq, void *devid)
166{ 185{
167 struct stm32_sai_sub_data *sai = (struct stm32_sai_sub_data *)devid; 186 struct stm32_sai_sub_data *sai = (struct stm32_sai_sub_data *)devid;
@@ -181,29 +200,29 @@ static irqreturn_t stm32_sai_isr(int irq, void *devid)
181 SAI_XCLRFR_MASK); 200 SAI_XCLRFR_MASK);
182 201
183 if (flags & SAI_XIMR_OVRUDRIE) { 202 if (flags & SAI_XIMR_OVRUDRIE) {
184 dev_err(&pdev->dev, "IT %s\n", 203 dev_err(&pdev->dev, "IRQ %s\n",
185 STM_SAI_IS_PLAYBACK(sai) ? "underrun" : "overrun"); 204 STM_SAI_IS_PLAYBACK(sai) ? "underrun" : "overrun");
186 status = SNDRV_PCM_STATE_XRUN; 205 status = SNDRV_PCM_STATE_XRUN;
187 } 206 }
188 207
189 if (flags & SAI_XIMR_MUTEDETIE) 208 if (flags & SAI_XIMR_MUTEDETIE)
190 dev_dbg(&pdev->dev, "IT mute detected\n"); 209 dev_dbg(&pdev->dev, "IRQ mute detected\n");
191 210
192 if (flags & SAI_XIMR_WCKCFGIE) { 211 if (flags & SAI_XIMR_WCKCFGIE) {
193 dev_err(&pdev->dev, "IT wrong clock configuration\n"); 212 dev_err(&pdev->dev, "IRQ wrong clock configuration\n");
194 status = SNDRV_PCM_STATE_DISCONNECTED; 213 status = SNDRV_PCM_STATE_DISCONNECTED;
195 } 214 }
196 215
197 if (flags & SAI_XIMR_CNRDYIE) 216 if (flags & SAI_XIMR_CNRDYIE)
198 dev_warn(&pdev->dev, "IT Codec not ready\n"); 217 dev_err(&pdev->dev, "IRQ Codec not ready\n");
199 218
200 if (flags & SAI_XIMR_AFSDETIE) { 219 if (flags & SAI_XIMR_AFSDETIE) {
201 dev_warn(&pdev->dev, "IT Anticipated frame synchro\n"); 220 dev_err(&pdev->dev, "IRQ Anticipated frame synchro\n");
202 status = SNDRV_PCM_STATE_XRUN; 221 status = SNDRV_PCM_STATE_XRUN;
203 } 222 }
204 223
205 if (flags & SAI_XIMR_LFSDETIE) { 224 if (flags & SAI_XIMR_LFSDETIE) {
206 dev_warn(&pdev->dev, "IT Late frame synchro\n"); 225 dev_err(&pdev->dev, "IRQ Late frame synchro\n");
207 status = SNDRV_PCM_STATE_XRUN; 226 status = SNDRV_PCM_STATE_XRUN;
208 } 227 }
209 228
@@ -220,8 +239,15 @@ static int stm32_sai_set_sysclk(struct snd_soc_dai *cpu_dai,
220 int clk_id, unsigned int freq, int dir) 239 int clk_id, unsigned int freq, int dir)
221{ 240{
222 struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai); 241 struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai);
242 int ret;
223 243
224 if ((dir == SND_SOC_CLOCK_OUT) && sai->master) { 244 if ((dir == SND_SOC_CLOCK_OUT) && sai->master) {
245 ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX,
246 SAI_XCR1_NODIV,
247 (unsigned int)~SAI_XCR1_NODIV);
248 if (ret < 0)
249 return ret;
250
225 sai->mclk_rate = freq; 251 sai->mclk_rate = freq;
226 dev_dbg(cpu_dai->dev, "SAI MCLK frequency is %uHz\n", freq); 252 dev_dbg(cpu_dai->dev, "SAI MCLK frequency is %uHz\n", freq);
227 } 253 }
@@ -235,7 +261,7 @@ static int stm32_sai_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai, u32 tx_mask,
235 struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai); 261 struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai);
236 int slotr, slotr_mask, slot_size; 262 int slotr, slotr_mask, slot_size;
237 263
238 dev_dbg(cpu_dai->dev, "masks tx/rx:%#x/%#x, slots:%d, width:%d\n", 264 dev_dbg(cpu_dai->dev, "Masks tx/rx:%#x/%#x, slots:%d, width:%d\n",
239 tx_mask, rx_mask, slots, slot_width); 265 tx_mask, rx_mask, slots, slot_width);
240 266
241 switch (slot_width) { 267 switch (slot_width) {
@@ -356,6 +382,10 @@ static int stm32_sai_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
356 } 382 }
357 cr1_mask |= SAI_XCR1_SLAVE; 383 cr1_mask |= SAI_XCR1_SLAVE;
358 384
385 /* do not generate master by default */
386 cr1 |= SAI_XCR1_NODIV;
387 cr1_mask |= SAI_XCR1_NODIV;
388
359 ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, cr1_mask, cr1); 389 ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, cr1_mask, cr1);
360 if (ret < 0) { 390 if (ret < 0) {
361 dev_err(cpu_dai->dev, "Failed to update CR1 register\n"); 391 dev_err(cpu_dai->dev, "Failed to update CR1 register\n");
@@ -377,7 +407,7 @@ static int stm32_sai_startup(struct snd_pcm_substream *substream,
377 407
378 ret = clk_prepare_enable(sai->sai_ck); 408 ret = clk_prepare_enable(sai->sai_ck);
379 if (ret < 0) { 409 if (ret < 0) {
380 dev_err(cpu_dai->dev, "failed to enable clock: %d\n", ret); 410 dev_err(cpu_dai->dev, "Failed to enable clock: %d\n", ret);
381 return ret; 411 return ret;
382 } 412 }
383 413
@@ -497,7 +527,7 @@ static int stm32_sai_set_slots(struct snd_soc_dai *cpu_dai)
497 SAI_XSLOTR_SLOTEN_SET(sai->slot_mask)); 527 SAI_XSLOTR_SLOTEN_SET(sai->slot_mask));
498 } 528 }
499 529
500 dev_dbg(cpu_dai->dev, "slots %d, slot width %d\n", 530 dev_dbg(cpu_dai->dev, "Slots %d, slot width %d\n",
501 sai->slots, sai->slot_width); 531 sai->slots, sai->slot_width);
502 532
503 return 0; 533 return 0;
@@ -521,7 +551,7 @@ static void stm32_sai_set_frame(struct snd_soc_dai *cpu_dai)
521 frcr |= SAI_XFRCR_FSALL_SET((fs_active - 1)); 551 frcr |= SAI_XFRCR_FSALL_SET((fs_active - 1));
522 frcr_mask = SAI_XFRCR_FRL_MASK | SAI_XFRCR_FSALL_MASK; 552 frcr_mask = SAI_XFRCR_FRL_MASK | SAI_XFRCR_FSALL_MASK;
523 553
524 dev_dbg(cpu_dai->dev, "frame length %d, frame active %d\n", 554 dev_dbg(cpu_dai->dev, "Frame length %d, frame active %d\n",
525 sai->fs_length, fs_active); 555 sai->fs_length, fs_active);
526 556
527 regmap_update_bits(sai->regmap, STM_SAI_FRCR_REGX, frcr_mask, frcr); 557 regmap_update_bits(sai->regmap, STM_SAI_FRCR_REGX, frcr_mask, frcr);
@@ -540,7 +570,8 @@ static int stm32_sai_configure_clock(struct snd_soc_dai *cpu_dai,
540{ 570{
541 struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai); 571 struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai);
542 int cr1, mask, div = 0; 572 int cr1, mask, div = 0;
543 int sai_clk_rate, ret; 573 int sai_clk_rate, mclk_ratio, den, ret;
574 int version = sai->pdata->conf->version;
544 575
545 if (!sai->mclk_rate) { 576 if (!sai->mclk_rate) {
546 dev_err(cpu_dai->dev, "Mclk rate is null\n"); 577 dev_err(cpu_dai->dev, "Mclk rate is null\n");
@@ -553,21 +584,53 @@ static int stm32_sai_configure_clock(struct snd_soc_dai *cpu_dai,
553 clk_set_parent(sai->sai_ck, sai->pdata->clk_x8k); 584 clk_set_parent(sai->sai_ck, sai->pdata->clk_x8k);
554 sai_clk_rate = clk_get_rate(sai->sai_ck); 585 sai_clk_rate = clk_get_rate(sai->sai_ck);
555 586
556 /* 587 if (STM_SAI_IS_F4(sai->pdata)) {
557 * mclk_rate = 256 * fs 588 /*
558 * MCKDIV = 0 if sai_ck < 3/2 * mclk_rate 589 * mclk_rate = 256 * fs
559 * MCKDIV = sai_ck / (2 * mclk_rate) otherwise 590 * MCKDIV = 0 if sai_ck < 3/2 * mclk_rate
560 */ 591 * MCKDIV = sai_ck / (2 * mclk_rate) otherwise
561 if (2 * sai_clk_rate >= 3 * sai->mclk_rate) 592 */
562 div = DIV_ROUND_CLOSEST(sai_clk_rate, 2 * sai->mclk_rate); 593 if (2 * sai_clk_rate >= 3 * sai->mclk_rate)
563 594 div = DIV_ROUND_CLOSEST(sai_clk_rate,
564 if (div > SAI_XCR1_MCKDIV_MAX) { 595 2 * sai->mclk_rate);
596 } else {
597 /*
598 * TDM mode :
599 * mclk on
600 * MCKDIV = sai_ck / (ws x 256) (NOMCK=0. OSR=0)
601 * MCKDIV = sai_ck / (ws x 512) (NOMCK=0. OSR=1)
602 * mclk off
603 * MCKDIV = sai_ck / (frl x ws) (NOMCK=1)
604 * Note: NOMCK/NODIV correspond to same bit.
605 */
606 if (sai->mclk_rate) {
607 mclk_ratio = sai->mclk_rate / params_rate(params);
608 if (mclk_ratio != 256) {
609 if (mclk_ratio == 512) {
610 mask = SAI_XCR1_OSR;
611 cr1 = SAI_XCR1_OSR;
612 } else {
613 dev_err(cpu_dai->dev,
614 "Wrong mclk ratio %d\n",
615 mclk_ratio);
616 return -EINVAL;
617 }
618 }
619 div = DIV_ROUND_CLOSEST(sai_clk_rate, sai->mclk_rate);
620 } else {
621 /* mclk-fs not set, master clock not active. NOMCK=1 */
622 den = sai->fs_length * params_rate(params);
623 div = DIV_ROUND_CLOSEST(sai_clk_rate, den);
624 }
625 }
626
627 if (div > SAI_XCR1_MCKDIV_MAX(version)) {
565 dev_err(cpu_dai->dev, "Divider %d out of range\n", div); 628 dev_err(cpu_dai->dev, "Divider %d out of range\n", div);
566 return -EINVAL; 629 return -EINVAL;
567 } 630 }
568 dev_dbg(cpu_dai->dev, "SAI clock %d, divider %d\n", sai_clk_rate, div); 631 dev_dbg(cpu_dai->dev, "SAI clock %d, divider %d\n", sai_clk_rate, div);
569 632
570 mask = SAI_XCR1_MCKDIV_MASK; 633 mask = SAI_XCR1_MCKDIV_MASK(SAI_XCR1_MCKDIV_WIDTH(version));
571 cr1 = SAI_XCR1_MCKDIV_SET(div); 634 cr1 = SAI_XCR1_MCKDIV_SET(div);
572 ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, mask, cr1); 635 ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, mask, cr1);
573 if (ret < 0) { 636 if (ret < 0) {
@@ -629,12 +692,12 @@ static int stm32_sai_trigger(struct snd_pcm_substream *substream, int cmd,
629 dev_dbg(cpu_dai->dev, "Disable DMA and SAI\n"); 692 dev_dbg(cpu_dai->dev, "Disable DMA and SAI\n");
630 693
631 regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, 694 regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX,
632 SAI_XCR1_DMAEN, 695 SAI_XCR1_SAIEN,
633 (unsigned int)~SAI_XCR1_DMAEN); 696 (unsigned int)~SAI_XCR1_SAIEN);
634 697
635 ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, 698 ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX,
636 SAI_XCR1_SAIEN, 699 SAI_XCR1_DMAEN,
637 (unsigned int)~SAI_XCR1_SAIEN); 700 (unsigned int)~SAI_XCR1_DMAEN);
638 if (ret < 0) 701 if (ret < 0)
639 dev_err(cpu_dai->dev, "Failed to update CR1 register\n"); 702 dev_err(cpu_dai->dev, "Failed to update CR1 register\n");
640 break; 703 break;
@@ -652,6 +715,9 @@ static void stm32_sai_shutdown(struct snd_pcm_substream *substream,
652 715
653 regmap_update_bits(sai->regmap, STM_SAI_IMR_REGX, SAI_XIMR_MASK, 0); 716 regmap_update_bits(sai->regmap, STM_SAI_IMR_REGX, SAI_XIMR_MASK, 0);
654 717
718 regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, SAI_XCR1_NODIV,
719 SAI_XCR1_NODIV);
720
655 clk_disable_unprepare(sai->sai_ck); 721 clk_disable_unprepare(sai->sai_ck);
656 sai->substream = NULL; 722 sai->substream = NULL;
657} 723}
@@ -761,16 +827,23 @@ static int stm32_sai_sub_parse_of(struct platform_device *pdev,
761 return -ENODEV; 827 return -ENODEV;
762 828
763 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 829 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
764
765 dev_err(&pdev->dev, "res %pr\n", res);
766
767 base = devm_ioremap_resource(&pdev->dev, res); 830 base = devm_ioremap_resource(&pdev->dev, res);
768 if (IS_ERR(base)) 831 if (IS_ERR(base))
769 return PTR_ERR(base); 832 return PTR_ERR(base);
770 833
771 sai->phys_addr = res->start; 834 sai->phys_addr = res->start;
772 sai->regmap = devm_regmap_init_mmio(&pdev->dev, base, 835
773 &stm32_sai_sub_regmap_config); 836 sai->regmap_config = &stm32_sai_sub_regmap_config_f4;
837 /* Note: PDM registers not available for H7 sub-block B */
838 if (STM_SAI_IS_H7(sai->pdata) && STM_SAI_IS_SUB_A(sai))
839 sai->regmap_config = &stm32_sai_sub_regmap_config_h7;
840
841 sai->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "sai_ck",
842 base, sai->regmap_config);
843 if (IS_ERR(sai->regmap)) {
844 dev_err(&pdev->dev, "Failed to initialize MMIO\n");
845 return PTR_ERR(sai->regmap);
846 }
774 847
775 /* Get direction property */ 848 /* Get direction property */
776 if (of_property_match_string(np, "dma-names", "tx") >= 0) { 849 if (of_property_match_string(np, "dma-names", "tx") >= 0) {
@@ -784,7 +857,7 @@ static int stm32_sai_sub_parse_of(struct platform_device *pdev,
784 857
785 sai->sai_ck = devm_clk_get(&pdev->dev, "sai_ck"); 858 sai->sai_ck = devm_clk_get(&pdev->dev, "sai_ck");
786 if (IS_ERR(sai->sai_ck)) { 859 if (IS_ERR(sai->sai_ck)) {
787 dev_err(&pdev->dev, "missing kernel clock sai_ck\n"); 860 dev_err(&pdev->dev, "Missing kernel clock sai_ck\n");
788 return PTR_ERR(sai->sai_ck); 861 return PTR_ERR(sai->sai_ck);
789 } 862 }
790 863
@@ -849,7 +922,7 @@ static int stm32_sai_sub_probe(struct platform_device *pdev)
849 ret = devm_request_irq(&pdev->dev, sai->pdata->irq, stm32_sai_isr, 922 ret = devm_request_irq(&pdev->dev, sai->pdata->irq, stm32_sai_isr,
850 IRQF_SHARED, dev_name(&pdev->dev), sai); 923 IRQF_SHARED, dev_name(&pdev->dev), sai);
851 if (ret) { 924 if (ret) {
852 dev_err(&pdev->dev, "irq request returned %d\n", ret); 925 dev_err(&pdev->dev, "IRQ request returned %d\n", ret);
853 return ret; 926 return ret;
854 } 927 }
855 928
@@ -861,7 +934,7 @@ static int stm32_sai_sub_probe(struct platform_device *pdev)
861 ret = devm_snd_dmaengine_pcm_register(&pdev->dev, 934 ret = devm_snd_dmaengine_pcm_register(&pdev->dev,
862 &stm32_sai_pcm_config, 0); 935 &stm32_sai_pcm_config, 0);
863 if (ret) { 936 if (ret) {
864 dev_err(&pdev->dev, "could not register pcm dma\n"); 937 dev_err(&pdev->dev, "Could not register pcm dma\n");
865 return ret; 938 return ret;
866 } 939 }
867 940
@@ -879,6 +952,6 @@ static struct platform_driver stm32_sai_sub_driver = {
879module_platform_driver(stm32_sai_sub_driver); 952module_platform_driver(stm32_sai_sub_driver);
880 953
881MODULE_DESCRIPTION("STM32 Soc SAI sub-block Interface"); 954MODULE_DESCRIPTION("STM32 Soc SAI sub-block Interface");
882MODULE_AUTHOR("Olivier Moysan, <olivier.moysan@st.com>"); 955MODULE_AUTHOR("Olivier Moysan <olivier.moysan@st.com>");
883MODULE_ALIAS("platform:st,stm32-sai-sub"); 956MODULE_ALIAS("platform:st,stm32-sai-sub");
884MODULE_LICENSE("GPL v2"); 957MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/stm/stm32_spdifrx.c b/sound/soc/stm/stm32_spdifrx.c
new file mode 100644
index 000000000000..4e4250bdb75a
--- /dev/null
+++ b/sound/soc/stm/stm32_spdifrx.c
@@ -0,0 +1,998 @@
1/*
2 * STM32 ALSA SoC Digital Audio Interface (SPDIF-rx) driver.
3 *
4 * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
5 * Author(s): Olivier Moysan <olivier.moysan@st.com> for STMicroelectronics.
6 *
7 * License terms: GPL V2.0.
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License version 2 as published by
11 * the Free Software Foundation.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16 * details.
17 */
18
19#include <linux/clk.h>
20#include <linux/completion.h>
21#include <linux/delay.h>
22#include <linux/module.h>
23#include <linux/of_platform.h>
24#include <linux/regmap.h>
25#include <linux/reset.h>
26
27#include <sound/dmaengine_pcm.h>
28#include <sound/pcm_params.h>
29
30/* SPDIF-rx Register Map */
31#define STM32_SPDIFRX_CR 0x00
32#define STM32_SPDIFRX_IMR 0x04
33#define STM32_SPDIFRX_SR 0x08
34#define STM32_SPDIFRX_IFCR 0x0C
35#define STM32_SPDIFRX_DR 0x10
36#define STM32_SPDIFRX_CSR 0x14
37#define STM32_SPDIFRX_DIR 0x18
38
39/* Bit definition for SPDIF_CR register */
40#define SPDIFRX_CR_SPDIFEN_SHIFT 0
41#define SPDIFRX_CR_SPDIFEN_MASK GENMASK(1, SPDIFRX_CR_SPDIFEN_SHIFT)
42#define SPDIFRX_CR_SPDIFENSET(x) ((x) << SPDIFRX_CR_SPDIFEN_SHIFT)
43
44#define SPDIFRX_CR_RXDMAEN BIT(2)
45#define SPDIFRX_CR_RXSTEO BIT(3)
46
47#define SPDIFRX_CR_DRFMT_SHIFT 4
48#define SPDIFRX_CR_DRFMT_MASK GENMASK(5, SPDIFRX_CR_DRFMT_SHIFT)
49#define SPDIFRX_CR_DRFMTSET(x) ((x) << SPDIFRX_CR_DRFMT_SHIFT)
50
51#define SPDIFRX_CR_PMSK BIT(6)
52#define SPDIFRX_CR_VMSK BIT(7)
53#define SPDIFRX_CR_CUMSK BIT(8)
54#define SPDIFRX_CR_PTMSK BIT(9)
55#define SPDIFRX_CR_CBDMAEN BIT(10)
56#define SPDIFRX_CR_CHSEL_SHIFT 11
57#define SPDIFRX_CR_CHSEL BIT(SPDIFRX_CR_CHSEL_SHIFT)
58
59#define SPDIFRX_CR_NBTR_SHIFT 12
60#define SPDIFRX_CR_NBTR_MASK GENMASK(13, SPDIFRX_CR_NBTR_SHIFT)
61#define SPDIFRX_CR_NBTRSET(x) ((x) << SPDIFRX_CR_NBTR_SHIFT)
62
63#define SPDIFRX_CR_WFA BIT(14)
64
65#define SPDIFRX_CR_INSEL_SHIFT 16
66#define SPDIFRX_CR_INSEL_MASK GENMASK(18, PDIFRX_CR_INSEL_SHIFT)
67#define SPDIFRX_CR_INSELSET(x) ((x) << SPDIFRX_CR_INSEL_SHIFT)
68
69#define SPDIFRX_CR_CKSEN_SHIFT 20
70#define SPDIFRX_CR_CKSEN BIT(20)
71#define SPDIFRX_CR_CKSBKPEN BIT(21)
72
73/* Bit definition for SPDIFRX_IMR register */
74#define SPDIFRX_IMR_RXNEI BIT(0)
75#define SPDIFRX_IMR_CSRNEIE BIT(1)
76#define SPDIFRX_IMR_PERRIE BIT(2)
77#define SPDIFRX_IMR_OVRIE BIT(3)
78#define SPDIFRX_IMR_SBLKIE BIT(4)
79#define SPDIFRX_IMR_SYNCDIE BIT(5)
80#define SPDIFRX_IMR_IFEIE BIT(6)
81
82#define SPDIFRX_XIMR_MASK GENMASK(6, 0)
83
84/* Bit definition for SPDIFRX_SR register */
85#define SPDIFRX_SR_RXNE BIT(0)
86#define SPDIFRX_SR_CSRNE BIT(1)
87#define SPDIFRX_SR_PERR BIT(2)
88#define SPDIFRX_SR_OVR BIT(3)
89#define SPDIFRX_SR_SBD BIT(4)
90#define SPDIFRX_SR_SYNCD BIT(5)
91#define SPDIFRX_SR_FERR BIT(6)
92#define SPDIFRX_SR_SERR BIT(7)
93#define SPDIFRX_SR_TERR BIT(8)
94
95#define SPDIFRX_SR_WIDTH5_SHIFT 16
96#define SPDIFRX_SR_WIDTH5_MASK GENMASK(30, PDIFRX_SR_WIDTH5_SHIFT)
97#define SPDIFRX_SR_WIDTH5SET(x) ((x) << SPDIFRX_SR_WIDTH5_SHIFT)
98
99/* Bit definition for SPDIFRX_IFCR register */
100#define SPDIFRX_IFCR_PERRCF BIT(2)
101#define SPDIFRX_IFCR_OVRCF BIT(3)
102#define SPDIFRX_IFCR_SBDCF BIT(4)
103#define SPDIFRX_IFCR_SYNCDCF BIT(5)
104
105#define SPDIFRX_XIFCR_MASK GENMASK(5, 2)
106
107/* Bit definition for SPDIFRX_DR register (DRFMT = 0b00) */
108#define SPDIFRX_DR0_DR_SHIFT 0
109#define SPDIFRX_DR0_DR_MASK GENMASK(23, SPDIFRX_DR0_DR_SHIFT)
110#define SPDIFRX_DR0_DRSET(x) ((x) << SPDIFRX_DR0_DR_SHIFT)
111
112#define SPDIFRX_DR0_PE BIT(24)
113
114#define SPDIFRX_DR0_V BIT(25)
115#define SPDIFRX_DR0_U BIT(26)
116#define SPDIFRX_DR0_C BIT(27)
117
118#define SPDIFRX_DR0_PT_SHIFT 28
119#define SPDIFRX_DR0_PT_MASK GENMASK(29, SPDIFRX_DR0_PT_SHIFT)
120#define SPDIFRX_DR0_PTSET(x) ((x) << SPDIFRX_DR0_PT_SHIFT)
121
122/* Bit definition for SPDIFRX_DR register (DRFMT = 0b01) */
123#define SPDIFRX_DR1_PE BIT(0)
124#define SPDIFRX_DR1_V BIT(1)
125#define SPDIFRX_DR1_U BIT(2)
126#define SPDIFRX_DR1_C BIT(3)
127
128#define SPDIFRX_DR1_PT_SHIFT 4
129#define SPDIFRX_DR1_PT_MASK GENMASK(5, SPDIFRX_DR1_PT_SHIFT)
130#define SPDIFRX_DR1_PTSET(x) ((x) << SPDIFRX_DR1_PT_SHIFT)
131
132#define SPDIFRX_DR1_DR_SHIFT 8
133#define SPDIFRX_DR1_DR_MASK GENMASK(31, SPDIFRX_DR1_DR_SHIFT)
134#define SPDIFRX_DR1_DRSET(x) ((x) << SPDIFRX_DR1_DR_SHIFT)
135
136/* Bit definition for SPDIFRX_DR register (DRFMT = 0b10) */
137#define SPDIFRX_DR1_DRNL1_SHIFT 0
138#define SPDIFRX_DR1_DRNL1_MASK GENMASK(15, SPDIFRX_DR1_DRNL1_SHIFT)
139#define SPDIFRX_DR1_DRNL1SET(x) ((x) << SPDIFRX_DR1_DRNL1_SHIFT)
140
141#define SPDIFRX_DR1_DRNL2_SHIFT 16
142#define SPDIFRX_DR1_DRNL2_MASK GENMASK(31, SPDIFRX_DR1_DRNL2_SHIFT)
143#define SPDIFRX_DR1_DRNL2SET(x) ((x) << SPDIFRX_DR1_DRNL2_SHIFT)
144
145/* Bit definition for SPDIFRX_CSR register */
146#define SPDIFRX_CSR_USR_SHIFT 0
147#define SPDIFRX_CSR_USR_MASK GENMASK(15, SPDIFRX_CSR_USR_SHIFT)
148#define SPDIFRX_CSR_USRGET(x) (((x) & SPDIFRX_CSR_USR_MASK)\
149 >> SPDIFRX_CSR_USR_SHIFT)
150
151#define SPDIFRX_CSR_CS_SHIFT 16
152#define SPDIFRX_CSR_CS_MASK GENMASK(23, SPDIFRX_CSR_CS_SHIFT)
153#define SPDIFRX_CSR_CSGET(x) (((x) & SPDIFRX_CSR_CS_MASK)\
154 >> SPDIFRX_CSR_CS_SHIFT)
155
156#define SPDIFRX_CSR_SOB BIT(24)
157
158/* Bit definition for SPDIFRX_DIR register */
159#define SPDIFRX_DIR_THI_SHIFT 0
160#define SPDIFRX_DIR_THI_MASK GENMASK(12, SPDIFRX_DIR_THI_SHIFT)
161#define SPDIFRX_DIR_THI_SET(x) ((x) << SPDIFRX_DIR_THI_SHIFT)
162
163#define SPDIFRX_DIR_TLO_SHIFT 16
164#define SPDIFRX_DIR_TLO_MASK GENMASK(28, SPDIFRX_DIR_TLO_SHIFT)
165#define SPDIFRX_DIR_TLO_SET(x) ((x) << SPDIFRX_DIR_TLO_SHIFT)
166
167#define SPDIFRX_SPDIFEN_DISABLE 0x0
168#define SPDIFRX_SPDIFEN_SYNC 0x1
169#define SPDIFRX_SPDIFEN_ENABLE 0x3
170
171#define SPDIFRX_IN1 0x1
172#define SPDIFRX_IN2 0x2
173#define SPDIFRX_IN3 0x3
174#define SPDIFRX_IN4 0x4
175#define SPDIFRX_IN5 0x5
176#define SPDIFRX_IN6 0x6
177#define SPDIFRX_IN7 0x7
178#define SPDIFRX_IN8 0x8
179
180#define SPDIFRX_NBTR_NONE 0x0
181#define SPDIFRX_NBTR_3 0x1
182#define SPDIFRX_NBTR_15 0x2
183#define SPDIFRX_NBTR_63 0x3
184
185#define SPDIFRX_DRFMT_RIGHT 0x0
186#define SPDIFRX_DRFMT_LEFT 0x1
187#define SPDIFRX_DRFMT_PACKED 0x2
188
189/* 192 CS bits in S/PDIF frame. i.e 24 CS bytes */
190#define SPDIFRX_CS_BYTES_NB 24
191#define SPDIFRX_UB_BYTES_NB 48
192
193/*
194 * CSR register is retrieved as a 32 bits word
195 * It contains 1 channel status byte and 2 user data bytes
196 * 2 S/PDIF frames are acquired to get all CS/UB bits
197 */
198#define SPDIFRX_CSR_BUF_LENGTH (SPDIFRX_CS_BYTES_NB * 4 * 2)
199
200/**
201 * struct stm32_spdifrx_data - private data of SPDIFRX
202 * @pdev: device data pointer
203 * @base: mmio register base virtual address
204 * @regmap: SPDIFRX register map pointer
205 * @regmap_conf: SPDIFRX register map configuration pointer
206 * @cs_completion: channel status retrieving completion
207 * @kclk: kernel clock feeding the SPDIFRX clock generator
208 * @dma_params: dma configuration data for rx channel
209 * @substream: PCM substream data pointer
210 * @dmab: dma buffer info pointer
211 * @ctrl_chan: dma channel for S/PDIF control bits
212 * @desc:dma async transaction descriptor
213 * @slave_config: dma slave channel runtime config pointer
214 * @phys_addr: SPDIFRX registers physical base address
215 * @lock: synchronization enabling lock
216 * @cs: channel status buffer
217 * @ub: user data buffer
218 * @irq: SPDIFRX interrupt line
219 * @refcount: keep count of opened DMA channels
220 */
221struct stm32_spdifrx_data {
222 struct platform_device *pdev;
223 void __iomem *base;
224 struct regmap *regmap;
225 const struct regmap_config *regmap_conf;
226 struct completion cs_completion;
227 struct clk *kclk;
228 struct snd_dmaengine_dai_dma_data dma_params;
229 struct snd_pcm_substream *substream;
230 struct snd_dma_buffer *dmab;
231 struct dma_chan *ctrl_chan;
232 struct dma_async_tx_descriptor *desc;
233 struct dma_slave_config slave_config;
234 dma_addr_t phys_addr;
235 spinlock_t lock; /* Sync enabling lock */
236 unsigned char cs[SPDIFRX_CS_BYTES_NB];
237 unsigned char ub[SPDIFRX_UB_BYTES_NB];
238 int irq;
239 int refcount;
240};
241
242static void stm32_spdifrx_dma_complete(void *data)
243{
244 struct stm32_spdifrx_data *spdifrx = (struct stm32_spdifrx_data *)data;
245 struct platform_device *pdev = spdifrx->pdev;
246 u32 *p_start = (u32 *)spdifrx->dmab->area;
247 u32 *p_end = p_start + (2 * SPDIFRX_CS_BYTES_NB) - 1;
248 u32 *ptr = p_start;
249 u16 *ub_ptr = (short *)spdifrx->ub;
250 int i = 0;
251
252 regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_CR,
253 SPDIFRX_CR_CBDMAEN,
254 (unsigned int)~SPDIFRX_CR_CBDMAEN);
255
256 if (!spdifrx->dmab->area)
257 return;
258
259 while (ptr <= p_end) {
260 if (*ptr & SPDIFRX_CSR_SOB)
261 break;
262 ptr++;
263 }
264
265 if (ptr > p_end) {
266 dev_err(&pdev->dev, "Start of S/PDIF block not found\n");
267 return;
268 }
269
270 while (i < SPDIFRX_CS_BYTES_NB) {
271 spdifrx->cs[i] = (unsigned char)SPDIFRX_CSR_CSGET(*ptr);
272 *ub_ptr++ = SPDIFRX_CSR_USRGET(*ptr++);
273 if (ptr > p_end) {
274 dev_err(&pdev->dev, "Failed to get channel status\n");
275 return;
276 }
277 i++;
278 }
279
280 complete(&spdifrx->cs_completion);
281}
282
283static int stm32_spdifrx_dma_ctrl_start(struct stm32_spdifrx_data *spdifrx)
284{
285 dma_cookie_t cookie;
286 int err;
287
288 spdifrx->desc = dmaengine_prep_slave_single(spdifrx->ctrl_chan,
289 spdifrx->dmab->addr,
290 SPDIFRX_CSR_BUF_LENGTH,
291 DMA_DEV_TO_MEM,
292 DMA_CTRL_ACK);
293 if (!spdifrx->desc)
294 return -EINVAL;
295
296 spdifrx->desc->callback = stm32_spdifrx_dma_complete;
297 spdifrx->desc->callback_param = spdifrx;
298 cookie = dmaengine_submit(spdifrx->desc);
299 err = dma_submit_error(cookie);
300 if (err)
301 return -EINVAL;
302
303 dma_async_issue_pending(spdifrx->ctrl_chan);
304
305 return 0;
306}
307
308static void stm32_spdifrx_dma_ctrl_stop(struct stm32_spdifrx_data *spdifrx)
309{
310 dmaengine_terminate_async(spdifrx->ctrl_chan);
311}
312
313static int stm32_spdifrx_start_sync(struct stm32_spdifrx_data *spdifrx)
314{
315 int cr, cr_mask, imr, ret;
316
317 /* Enable IRQs */
318 imr = SPDIFRX_IMR_IFEIE | SPDIFRX_IMR_SYNCDIE | SPDIFRX_IMR_PERRIE;
319 ret = regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_IMR, imr, imr);
320 if (ret)
321 return ret;
322
323 spin_lock(&spdifrx->lock);
324
325 spdifrx->refcount++;
326
327 regmap_read(spdifrx->regmap, STM32_SPDIFRX_CR, &cr);
328
329 if (!(cr & SPDIFRX_CR_SPDIFEN_MASK)) {
330 /*
331 * Start sync if SPDIFRX is still in idle state.
332 * SPDIFRX reception enabled when sync done
333 */
334 dev_dbg(&spdifrx->pdev->dev, "start synchronization\n");
335
336 /*
337 * SPDIFRX configuration:
338 * Wait for activity before starting sync process. This avoid
339 * to issue sync errors when spdif signal is missing on input.
340 * Preamble, CS, user, validity and parity error bits not copied
341 * to DR register.
342 */
343 cr = SPDIFRX_CR_WFA | SPDIFRX_CR_PMSK | SPDIFRX_CR_VMSK |
344 SPDIFRX_CR_CUMSK | SPDIFRX_CR_PTMSK | SPDIFRX_CR_RXSTEO;
345 cr_mask = cr;
346
347 cr |= SPDIFRX_CR_SPDIFENSET(SPDIFRX_SPDIFEN_SYNC);
348 cr_mask |= SPDIFRX_CR_SPDIFEN_MASK;
349 ret = regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_CR,
350 cr_mask, cr);
351 if (ret < 0)
352 dev_err(&spdifrx->pdev->dev,
353 "Failed to start synchronization\n");
354 }
355
356 spin_unlock(&spdifrx->lock);
357
358 return ret;
359}
360
361static void stm32_spdifrx_stop(struct stm32_spdifrx_data *spdifrx)
362{
363 int cr, cr_mask, reg;
364
365 spin_lock(&spdifrx->lock);
366
367 if (--spdifrx->refcount) {
368 spin_unlock(&spdifrx->lock);
369 return;
370 }
371
372 cr = SPDIFRX_CR_SPDIFENSET(SPDIFRX_SPDIFEN_DISABLE);
373 cr_mask = SPDIFRX_CR_SPDIFEN_MASK | SPDIFRX_CR_RXDMAEN;
374
375 regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_CR, cr_mask, cr);
376
377 regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_IMR,
378 SPDIFRX_XIMR_MASK, 0);
379
380 regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_IFCR,
381 SPDIFRX_XIFCR_MASK, SPDIFRX_XIFCR_MASK);
382
383 /* dummy read to clear CSRNE and RXNE in status register */
384 regmap_read(spdifrx->regmap, STM32_SPDIFRX_DR, &reg);
385 regmap_read(spdifrx->regmap, STM32_SPDIFRX_CSR, &reg);
386
387 spin_unlock(&spdifrx->lock);
388}
389
390static int stm32_spdifrx_dma_ctrl_register(struct device *dev,
391 struct stm32_spdifrx_data *spdifrx)
392{
393 int ret;
394
395 spdifrx->dmab = devm_kzalloc(dev, sizeof(struct snd_dma_buffer),
396 GFP_KERNEL);
397 if (!spdifrx->dmab)
398 return -ENOMEM;
399
400 spdifrx->dmab->dev.type = SNDRV_DMA_TYPE_DEV_IRAM;
401 spdifrx->dmab->dev.dev = dev;
402 ret = snd_dma_alloc_pages(spdifrx->dmab->dev.type, dev,
403 SPDIFRX_CSR_BUF_LENGTH, spdifrx->dmab);
404 if (ret < 0) {
405 dev_err(dev, "snd_dma_alloc_pages returned error %d\n", ret);
406 return ret;
407 }
408
409 spdifrx->ctrl_chan = dma_request_chan(dev, "rx-ctrl");
410 if (!spdifrx->ctrl_chan) {
411 dev_err(dev, "dma_request_slave_channel failed\n");
412 return -EINVAL;
413 }
414
415 spdifrx->slave_config.direction = DMA_DEV_TO_MEM;
416 spdifrx->slave_config.src_addr = (dma_addr_t)(spdifrx->phys_addr +
417 STM32_SPDIFRX_CSR);
418 spdifrx->slave_config.dst_addr = spdifrx->dmab->addr;
419 spdifrx->slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
420 spdifrx->slave_config.src_maxburst = 1;
421
422 ret = dmaengine_slave_config(spdifrx->ctrl_chan,
423 &spdifrx->slave_config);
424 if (ret < 0) {
425 dev_err(dev, "dmaengine_slave_config returned error %d\n", ret);
426 dma_release_channel(spdifrx->ctrl_chan);
427 spdifrx->ctrl_chan = NULL;
428 }
429
430 return ret;
431};
432
433static const char * const spdifrx_enum_input[] = {
434 "in0", "in1", "in2", "in3"
435};
436
437/* By default CS bits are retrieved from channel A */
438static const char * const spdifrx_enum_cs_channel[] = {
439 "A", "B"
440};
441
442static SOC_ENUM_SINGLE_DECL(ctrl_enum_input,
443 STM32_SPDIFRX_CR, SPDIFRX_CR_INSEL_SHIFT,
444 spdifrx_enum_input);
445
446static SOC_ENUM_SINGLE_DECL(ctrl_enum_cs_channel,
447 STM32_SPDIFRX_CR, SPDIFRX_CR_CHSEL_SHIFT,
448 spdifrx_enum_cs_channel);
449
450static int stm32_spdifrx_info(struct snd_kcontrol *kcontrol,
451 struct snd_ctl_elem_info *uinfo)
452{
453 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
454 uinfo->count = 1;
455
456 return 0;
457}
458
459static int stm32_spdifrx_ub_info(struct snd_kcontrol *kcontrol,
460 struct snd_ctl_elem_info *uinfo)
461{
462 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
463 uinfo->count = 1;
464
465 return 0;
466}
467
468static int stm32_spdifrx_get_ctrl_data(struct stm32_spdifrx_data *spdifrx)
469{
470 int ret = 0;
471
472 memset(spdifrx->cs, 0, SPDIFRX_CS_BYTES_NB);
473 memset(spdifrx->ub, 0, SPDIFRX_UB_BYTES_NB);
474
475 ret = stm32_spdifrx_dma_ctrl_start(spdifrx);
476 if (ret < 0)
477 return ret;
478
479 ret = clk_prepare_enable(spdifrx->kclk);
480 if (ret) {
481 dev_err(&spdifrx->pdev->dev, "Enable kclk failed: %d\n", ret);
482 return ret;
483 }
484
485 ret = regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_CR,
486 SPDIFRX_CR_CBDMAEN, SPDIFRX_CR_CBDMAEN);
487 if (ret < 0)
488 goto end;
489
490 ret = stm32_spdifrx_start_sync(spdifrx);
491 if (ret < 0)
492 goto end;
493
494 if (wait_for_completion_interruptible_timeout(&spdifrx->cs_completion,
495 msecs_to_jiffies(100))
496 <= 0) {
497 dev_err(&spdifrx->pdev->dev, "Failed to get control data\n");
498 ret = -EAGAIN;
499 }
500
501 stm32_spdifrx_stop(spdifrx);
502 stm32_spdifrx_dma_ctrl_stop(spdifrx);
503
504end:
505 clk_disable_unprepare(spdifrx->kclk);
506
507 return ret;
508}
509
510static int stm32_spdifrx_capture_get(struct snd_kcontrol *kcontrol,
511 struct snd_ctl_elem_value *ucontrol)
512{
513 struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
514 struct stm32_spdifrx_data *spdifrx = snd_soc_dai_get_drvdata(cpu_dai);
515
516 stm32_spdifrx_get_ctrl_data(spdifrx);
517
518 ucontrol->value.iec958.status[0] = spdifrx->cs[0];
519 ucontrol->value.iec958.status[1] = spdifrx->cs[1];
520 ucontrol->value.iec958.status[2] = spdifrx->cs[2];
521 ucontrol->value.iec958.status[3] = spdifrx->cs[3];
522 ucontrol->value.iec958.status[4] = spdifrx->cs[4];
523
524 return 0;
525}
526
527static int stm32_spdif_user_bits_get(struct snd_kcontrol *kcontrol,
528 struct snd_ctl_elem_value *ucontrol)
529{
530 struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
531 struct stm32_spdifrx_data *spdifrx = snd_soc_dai_get_drvdata(cpu_dai);
532
533 stm32_spdifrx_get_ctrl_data(spdifrx);
534
535 ucontrol->value.iec958.status[0] = spdifrx->ub[0];
536 ucontrol->value.iec958.status[1] = spdifrx->ub[1];
537 ucontrol->value.iec958.status[2] = spdifrx->ub[2];
538 ucontrol->value.iec958.status[3] = spdifrx->ub[3];
539 ucontrol->value.iec958.status[4] = spdifrx->ub[4];
540
541 return 0;
542}
543
544static struct snd_kcontrol_new stm32_spdifrx_iec_ctrls[] = {
545 /* Channel status control */
546 {
547 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
548 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
549 .access = SNDRV_CTL_ELEM_ACCESS_READ |
550 SNDRV_CTL_ELEM_ACCESS_VOLATILE,
551 .info = stm32_spdifrx_info,
552 .get = stm32_spdifrx_capture_get,
553 },
554 /* User bits control */
555 {
556 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
557 .name = "IEC958 User Bit Capture Default",
558 .access = SNDRV_CTL_ELEM_ACCESS_READ |
559 SNDRV_CTL_ELEM_ACCESS_VOLATILE,
560 .info = stm32_spdifrx_ub_info,
561 .get = stm32_spdif_user_bits_get,
562 },
563};
564
565static struct snd_kcontrol_new stm32_spdifrx_ctrls[] = {
566 SOC_ENUM("SPDIFRX input", ctrl_enum_input),
567 SOC_ENUM("SPDIFRX CS channel", ctrl_enum_cs_channel),
568};
569
570static int stm32_spdifrx_dai_register_ctrls(struct snd_soc_dai *cpu_dai)
571{
572 int ret;
573
574 ret = snd_soc_add_dai_controls(cpu_dai, stm32_spdifrx_iec_ctrls,
575 ARRAY_SIZE(stm32_spdifrx_iec_ctrls));
576 if (ret < 0)
577 return ret;
578
579 return snd_soc_add_component_controls(cpu_dai->component,
580 stm32_spdifrx_ctrls,
581 ARRAY_SIZE(stm32_spdifrx_ctrls));
582}
583
584static int stm32_spdifrx_dai_probe(struct snd_soc_dai *cpu_dai)
585{
586 struct stm32_spdifrx_data *spdifrx = dev_get_drvdata(cpu_dai->dev);
587
588 spdifrx->dma_params.addr = (dma_addr_t)(spdifrx->phys_addr +
589 STM32_SPDIFRX_DR);
590 spdifrx->dma_params.maxburst = 1;
591
592 snd_soc_dai_init_dma_data(cpu_dai, NULL, &spdifrx->dma_params);
593
594 return stm32_spdifrx_dai_register_ctrls(cpu_dai);
595}
596
597static bool stm32_spdifrx_readable_reg(struct device *dev, unsigned int reg)
598{
599 switch (reg) {
600 case STM32_SPDIFRX_CR:
601 case STM32_SPDIFRX_IMR:
602 case STM32_SPDIFRX_SR:
603 case STM32_SPDIFRX_IFCR:
604 case STM32_SPDIFRX_DR:
605 case STM32_SPDIFRX_CSR:
606 case STM32_SPDIFRX_DIR:
607 return true;
608 default:
609 return false;
610 }
611}
612
613static bool stm32_spdifrx_volatile_reg(struct device *dev, unsigned int reg)
614{
615 if (reg == STM32_SPDIFRX_DR)
616 return true;
617
618 return false;
619}
620
621static bool stm32_spdifrx_writeable_reg(struct device *dev, unsigned int reg)
622{
623 switch (reg) {
624 case STM32_SPDIFRX_CR:
625 case STM32_SPDIFRX_IMR:
626 case STM32_SPDIFRX_IFCR:
627 return true;
628 default:
629 return false;
630 }
631}
632
633static const struct regmap_config stm32_h7_spdifrx_regmap_conf = {
634 .reg_bits = 32,
635 .reg_stride = 4,
636 .val_bits = 32,
637 .max_register = STM32_SPDIFRX_DIR,
638 .readable_reg = stm32_spdifrx_readable_reg,
639 .volatile_reg = stm32_spdifrx_volatile_reg,
640 .writeable_reg = stm32_spdifrx_writeable_reg,
641 .fast_io = true,
642};
643
644static irqreturn_t stm32_spdifrx_isr(int irq, void *devid)
645{
646 struct stm32_spdifrx_data *spdifrx = (struct stm32_spdifrx_data *)devid;
647 struct snd_pcm_substream *substream = spdifrx->substream;
648 struct platform_device *pdev = spdifrx->pdev;
649 unsigned int cr, mask, sr, imr;
650 unsigned int flags;
651 int err = 0, err_xrun = 0;
652
653 regmap_read(spdifrx->regmap, STM32_SPDIFRX_SR, &sr);
654 regmap_read(spdifrx->regmap, STM32_SPDIFRX_IMR, &imr);
655
656 mask = imr & SPDIFRX_XIMR_MASK;
657 /* SERR, TERR, FERR IRQs are generated if IFEIE is set */
658 if (mask & SPDIFRX_IMR_IFEIE)
659 mask |= (SPDIFRX_IMR_IFEIE << 1) | (SPDIFRX_IMR_IFEIE << 2);
660
661 flags = sr & mask;
662 if (!flags) {
663 dev_err(&pdev->dev, "Unexpected IRQ. rflags=%#x, imr=%#x\n",
664 sr, imr);
665 return IRQ_NONE;
666 }
667
668 /* Clear IRQs */
669 regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_IFCR,
670 SPDIFRX_XIFCR_MASK, flags);
671
672 if (flags & SPDIFRX_SR_PERR) {
673 dev_dbg(&pdev->dev, "Parity error\n");
674 err_xrun = 1;
675 }
676
677 if (flags & SPDIFRX_SR_OVR) {
678 dev_dbg(&pdev->dev, "Overrun error\n");
679 err_xrun = 1;
680 }
681
682 if (flags & SPDIFRX_SR_SBD)
683 dev_dbg(&pdev->dev, "Synchronization block detected\n");
684
685 if (flags & SPDIFRX_SR_SYNCD) {
686 dev_dbg(&pdev->dev, "Synchronization done\n");
687
688 /* Enable spdifrx */
689 cr = SPDIFRX_CR_SPDIFENSET(SPDIFRX_SPDIFEN_ENABLE);
690 regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_CR,
691 SPDIFRX_CR_SPDIFEN_MASK, cr);
692 }
693
694 if (flags & SPDIFRX_SR_FERR) {
695 dev_dbg(&pdev->dev, "Frame error\n");
696 err = 1;
697 }
698
699 if (flags & SPDIFRX_SR_SERR) {
700 dev_dbg(&pdev->dev, "Synchronization error\n");
701 err = 1;
702 }
703
704 if (flags & SPDIFRX_SR_TERR) {
705 dev_dbg(&pdev->dev, "Timeout error\n");
706 err = 1;
707 }
708
709 if (err) {
710 /* SPDIFRX in STATE_STOP. Disable SPDIFRX to clear errors */
711 cr = SPDIFRX_CR_SPDIFENSET(SPDIFRX_SPDIFEN_DISABLE);
712 regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_CR,
713 SPDIFRX_CR_SPDIFEN_MASK, cr);
714
715 if (substream)
716 snd_pcm_stop(substream, SNDRV_PCM_STATE_DISCONNECTED);
717
718 return IRQ_HANDLED;
719 }
720
721 if (err_xrun && substream)
722 snd_pcm_stop_xrun(substream);
723
724 return IRQ_HANDLED;
725}
726
727static int stm32_spdifrx_startup(struct snd_pcm_substream *substream,
728 struct snd_soc_dai *cpu_dai)
729{
730 struct stm32_spdifrx_data *spdifrx = snd_soc_dai_get_drvdata(cpu_dai);
731 int ret;
732
733 spdifrx->substream = substream;
734
735 ret = clk_prepare_enable(spdifrx->kclk);
736 if (ret)
737 dev_err(&spdifrx->pdev->dev, "Enable kclk failed: %d\n", ret);
738
739 return ret;
740}
741
742static int stm32_spdifrx_hw_params(struct snd_pcm_substream *substream,
743 struct snd_pcm_hw_params *params,
744 struct snd_soc_dai *cpu_dai)
745{
746 struct stm32_spdifrx_data *spdifrx = snd_soc_dai_get_drvdata(cpu_dai);
747 int data_size = params_width(params);
748 int fmt;
749
750 switch (data_size) {
751 case 16:
752 fmt = SPDIFRX_DRFMT_PACKED;
753 spdifrx->dma_params.addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
754 break;
755 case 32:
756 fmt = SPDIFRX_DRFMT_LEFT;
757 spdifrx->dma_params.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
758 break;
759 default:
760 dev_err(&spdifrx->pdev->dev, "Unexpected data format\n");
761 return -EINVAL;
762 }
763
764 snd_soc_dai_init_dma_data(cpu_dai, NULL, &spdifrx->dma_params);
765
766 return regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_CR,
767 SPDIFRX_CR_DRFMT_MASK,
768 SPDIFRX_CR_DRFMTSET(fmt));
769}
770
771static int stm32_spdifrx_trigger(struct snd_pcm_substream *substream, int cmd,
772 struct snd_soc_dai *cpu_dai)
773{
774 struct stm32_spdifrx_data *spdifrx = snd_soc_dai_get_drvdata(cpu_dai);
775 int ret = 0;
776
777 switch (cmd) {
778 case SNDRV_PCM_TRIGGER_START:
779 case SNDRV_PCM_TRIGGER_RESUME:
780 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
781 regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_IMR,
782 SPDIFRX_IMR_OVRIE, SPDIFRX_IMR_OVRIE);
783
784 regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_CR,
785 SPDIFRX_CR_RXDMAEN, SPDIFRX_CR_RXDMAEN);
786
787 ret = stm32_spdifrx_start_sync(spdifrx);
788 break;
789 case SNDRV_PCM_TRIGGER_SUSPEND:
790 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
791 case SNDRV_PCM_TRIGGER_STOP:
792 stm32_spdifrx_stop(spdifrx);
793 break;
794 default:
795 return -EINVAL;
796 }
797
798 return ret;
799}
800
801static void stm32_spdifrx_shutdown(struct snd_pcm_substream *substream,
802 struct snd_soc_dai *cpu_dai)
803{
804 struct stm32_spdifrx_data *spdifrx = snd_soc_dai_get_drvdata(cpu_dai);
805
806 spdifrx->substream = NULL;
807 clk_disable_unprepare(spdifrx->kclk);
808}
809
810static const struct snd_soc_dai_ops stm32_spdifrx_pcm_dai_ops = {
811 .startup = stm32_spdifrx_startup,
812 .hw_params = stm32_spdifrx_hw_params,
813 .trigger = stm32_spdifrx_trigger,
814 .shutdown = stm32_spdifrx_shutdown,
815};
816
817static struct snd_soc_dai_driver stm32_spdifrx_dai[] = {
818 {
819 .name = "spdifrx-capture-cpu-dai",
820 .probe = stm32_spdifrx_dai_probe,
821 .capture = {
822 .stream_name = "CPU-Capture",
823 .channels_min = 1,
824 .channels_max = 2,
825 .rates = SNDRV_PCM_RATE_8000_192000,
826 .formats = SNDRV_PCM_FMTBIT_S32_LE |
827 SNDRV_PCM_FMTBIT_S16_LE,
828 },
829 .ops = &stm32_spdifrx_pcm_dai_ops,
830 }
831};
832
833static const struct snd_pcm_hardware stm32_spdifrx_pcm_hw = {
834 .info = SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP,
835 .buffer_bytes_max = 8 * PAGE_SIZE,
836 .period_bytes_max = 2048, /* MDMA constraint */
837 .periods_min = 2,
838 .periods_max = 8,
839};
840
841static const struct snd_soc_component_driver stm32_spdifrx_component = {
842 .name = "stm32-spdifrx",
843};
844
845static const struct snd_dmaengine_pcm_config stm32_spdifrx_pcm_config = {
846 .pcm_hardware = &stm32_spdifrx_pcm_hw,
847 .prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
848};
849
850static const struct of_device_id stm32_spdifrx_ids[] = {
851 {
852 .compatible = "st,stm32h7-spdifrx",
853 .data = &stm32_h7_spdifrx_regmap_conf
854 },
855 {}
856};
857
858static int stm_spdifrx_parse_of(struct platform_device *pdev,
859 struct stm32_spdifrx_data *spdifrx)
860{
861 struct device_node *np = pdev->dev.of_node;
862 const struct of_device_id *of_id;
863 struct resource *res;
864
865 if (!np)
866 return -ENODEV;
867
868 of_id = of_match_device(stm32_spdifrx_ids, &pdev->dev);
869 if (of_id)
870 spdifrx->regmap_conf =
871 (const struct regmap_config *)of_id->data;
872 else
873 return -EINVAL;
874
875 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
876 spdifrx->base = devm_ioremap_resource(&pdev->dev, res);
877 if (IS_ERR(spdifrx->base))
878 return PTR_ERR(spdifrx->base);
879
880 spdifrx->phys_addr = res->start;
881
882 spdifrx->kclk = devm_clk_get(&pdev->dev, "kclk");
883 if (IS_ERR(spdifrx->kclk)) {
884 dev_err(&pdev->dev, "Could not get kclk\n");
885 return PTR_ERR(spdifrx->kclk);
886 }
887
888 spdifrx->irq = platform_get_irq(pdev, 0);
889 if (spdifrx->irq < 0) {
890 dev_err(&pdev->dev, "No irq for node %s\n", pdev->name);
891 return spdifrx->irq;
892 }
893
894 return 0;
895}
896
897static int stm32_spdifrx_probe(struct platform_device *pdev)
898{
899 struct stm32_spdifrx_data *spdifrx;
900 struct reset_control *rst;
901 const struct snd_dmaengine_pcm_config *pcm_config = NULL;
902 int ret;
903
904 spdifrx = devm_kzalloc(&pdev->dev, sizeof(*spdifrx), GFP_KERNEL);
905 if (!spdifrx)
906 return -ENOMEM;
907
908 spdifrx->pdev = pdev;
909 init_completion(&spdifrx->cs_completion);
910 spin_lock_init(&spdifrx->lock);
911
912 platform_set_drvdata(pdev, spdifrx);
913
914 ret = stm_spdifrx_parse_of(pdev, spdifrx);
915 if (ret)
916 return ret;
917
918 spdifrx->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "kclk",
919 spdifrx->base,
920 spdifrx->regmap_conf);
921 if (IS_ERR(spdifrx->regmap)) {
922 dev_err(&pdev->dev, "Regmap init failed\n");
923 return PTR_ERR(spdifrx->regmap);
924 }
925
926 ret = devm_request_irq(&pdev->dev, spdifrx->irq, stm32_spdifrx_isr, 0,
927 dev_name(&pdev->dev), spdifrx);
928 if (ret) {
929 dev_err(&pdev->dev, "IRQ request returned %d\n", ret);
930 return ret;
931 }
932
933 rst = devm_reset_control_get(&pdev->dev, NULL);
934 if (!IS_ERR(rst)) {
935 reset_control_assert(rst);
936 udelay(2);
937 reset_control_deassert(rst);
938 }
939
940 ret = devm_snd_soc_register_component(&pdev->dev,
941 &stm32_spdifrx_component,
942 stm32_spdifrx_dai,
943 ARRAY_SIZE(stm32_spdifrx_dai));
944 if (ret)
945 return ret;
946
947 ret = stm32_spdifrx_dma_ctrl_register(&pdev->dev, spdifrx);
948 if (ret)
949 goto error;
950
951 pcm_config = &stm32_spdifrx_pcm_config;
952 ret = devm_snd_dmaengine_pcm_register(&pdev->dev, pcm_config, 0);
953 if (ret) {
954 dev_err(&pdev->dev, "PCM DMA register returned %d\n", ret);
955 goto error;
956 }
957
958 return 0;
959
960error:
961 if (spdifrx->ctrl_chan)
962 dma_release_channel(spdifrx->ctrl_chan);
963 if (spdifrx->dmab)
964 snd_dma_free_pages(spdifrx->dmab);
965
966 return ret;
967}
968
969static int stm32_spdifrx_remove(struct platform_device *pdev)
970{
971 struct stm32_spdifrx_data *spdifrx = platform_get_drvdata(pdev);
972
973 if (spdifrx->ctrl_chan)
974 dma_release_channel(spdifrx->ctrl_chan);
975
976 if (spdifrx->dmab)
977 snd_dma_free_pages(spdifrx->dmab);
978
979 return 0;
980}
981
982MODULE_DEVICE_TABLE(of, stm32_spdifrx_ids);
983
984static struct platform_driver stm32_spdifrx_driver = {
985 .driver = {
986 .name = "st,stm32-spdifrx",
987 .of_match_table = stm32_spdifrx_ids,
988 },
989 .probe = stm32_spdifrx_probe,
990 .remove = stm32_spdifrx_remove,
991};
992
993module_platform_driver(stm32_spdifrx_driver);
994
995MODULE_DESCRIPTION("STM32 Soc spdifrx Interface");
996MODULE_AUTHOR("Olivier Moysan, <olivier.moysan@st.com>");
997MODULE_ALIAS("platform:stm32-spdifrx");
998MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
index c3aab10fa085..150069987c0c 100644
--- a/sound/soc/sunxi/sun4i-codec.c
+++ b/sound/soc/sunxi/sun4i-codec.c
@@ -1339,6 +1339,44 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
1339 return card; 1339 return card;
1340}; 1340};
1341 1341
1342static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
1343{
1344 struct snd_soc_card *card;
1345 int ret;
1346
1347 card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
1348 if (!card)
1349 return ERR_PTR(-ENOMEM);
1350
1351 aux_dev.codec_of_node = of_parse_phandle(dev->of_node,
1352 "allwinner,codec-analog-controls",
1353 0);
1354 if (!aux_dev.codec_of_node) {
1355 dev_err(dev, "Can't find analog controls for codec.\n");
1356 return ERR_PTR(-EINVAL);
1357 };
1358
1359 card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
1360 if (!card->dai_link)
1361 return ERR_PTR(-ENOMEM);
1362
1363 card->dev = dev;
1364 card->name = "V3s Audio Codec";
1365 card->dapm_widgets = sun6i_codec_card_dapm_widgets;
1366 card->num_dapm_widgets = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
1367 card->dapm_routes = sun8i_codec_card_routes;
1368 card->num_dapm_routes = ARRAY_SIZE(sun8i_codec_card_routes);
1369 card->aux_dev = &aux_dev;
1370 card->num_aux_devs = 1;
1371 card->fully_routed = true;
1372
1373 ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
1374 if (ret)
1375 dev_warn(dev, "failed to parse audio-routing: %d\n", ret);
1376
1377 return card;
1378};
1379
1342static const struct regmap_config sun4i_codec_regmap_config = { 1380static const struct regmap_config sun4i_codec_regmap_config = {
1343 .reg_bits = 32, 1381 .reg_bits = 32,
1344 .reg_stride = 4, 1382 .reg_stride = 4,
@@ -1374,6 +1412,13 @@ static const struct regmap_config sun8i_h3_codec_regmap_config = {
1374 .max_register = SUN8I_H3_CODEC_ADC_DBG, 1412 .max_register = SUN8I_H3_CODEC_ADC_DBG,
1375}; 1413};
1376 1414
1415static const struct regmap_config sun8i_v3s_codec_regmap_config = {
1416 .reg_bits = 32,
1417 .reg_stride = 4,
1418 .val_bits = 32,
1419 .max_register = SUN8I_H3_CODEC_ADC_DBG,
1420};
1421
1377struct sun4i_codec_quirks { 1422struct sun4i_codec_quirks {
1378 const struct regmap_config *regmap_config; 1423 const struct regmap_config *regmap_config;
1379 const struct snd_soc_codec_driver *codec; 1424 const struct snd_soc_codec_driver *codec;
@@ -1437,6 +1482,20 @@ static const struct sun4i_codec_quirks sun8i_h3_codec_quirks = {
1437 .has_reset = true, 1482 .has_reset = true,
1438}; 1483};
1439 1484
1485static const struct sun4i_codec_quirks sun8i_v3s_codec_quirks = {
1486 .regmap_config = &sun8i_v3s_codec_regmap_config,
1487 /*
1488 * TODO The codec structure should be split out, like
1489 * H3, when adding digital audio processing support.
1490 */
1491 .codec = &sun8i_a23_codec_codec,
1492 .create_card = sun8i_v3s_codec_create_card,
1493 .reg_adc_fifoc = REG_FIELD(SUN6I_CODEC_ADC_FIFOC, 0, 31),
1494 .reg_dac_txdata = SUN8I_H3_CODEC_DAC_TXDATA,
1495 .reg_adc_rxdata = SUN6I_CODEC_ADC_RXDATA,
1496 .has_reset = true,
1497};
1498
1440static const struct of_device_id sun4i_codec_of_match[] = { 1499static const struct of_device_id sun4i_codec_of_match[] = {
1441 { 1500 {
1442 .compatible = "allwinner,sun4i-a10-codec", 1501 .compatible = "allwinner,sun4i-a10-codec",
@@ -1458,6 +1517,10 @@ static const struct of_device_id sun4i_codec_of_match[] = {
1458 .compatible = "allwinner,sun8i-h3-codec", 1517 .compatible = "allwinner,sun8i-h3-codec",
1459 .data = &sun8i_h3_codec_quirks, 1518 .data = &sun8i_h3_codec_quirks,
1460 }, 1519 },
1520 {
1521 .compatible = "allwinner,sun8i-v3s-codec",
1522 .data = &sun8i_v3s_codec_quirks,
1523 },
1461 {} 1524 {}
1462}; 1525};
1463MODULE_DEVICE_TABLE(of, sun4i_codec_of_match); 1526MODULE_DEVICE_TABLE(of, sun4i_codec_of_match);
diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index 6c17c99c2c8d..485e79f292c4 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -219,6 +219,22 @@ static const struct snd_kcontrol_new sun8i_codec_mixer_controls[] = {
219 SUN8I_ADDA_LOMIXSC_MIC2, 1, 0), 219 SUN8I_ADDA_LOMIXSC_MIC2, 1, 0),
220}; 220};
221 221
222/* mixer controls */
223static const struct snd_kcontrol_new sun8i_v3s_codec_mixer_controls[] = {
224 SOC_DAPM_DOUBLE_R("DAC Playback Switch",
225 SUN8I_ADDA_LOMIXSC,
226 SUN8I_ADDA_ROMIXSC,
227 SUN8I_ADDA_LOMIXSC_DACL, 1, 0),
228 SOC_DAPM_DOUBLE_R("DAC Reversed Playback Switch",
229 SUN8I_ADDA_LOMIXSC,
230 SUN8I_ADDA_ROMIXSC,
231 SUN8I_ADDA_LOMIXSC_DACR, 1, 0),
232 SOC_DAPM_DOUBLE_R("Mic1 Playback Switch",
233 SUN8I_ADDA_LOMIXSC,
234 SUN8I_ADDA_ROMIXSC,
235 SUN8I_ADDA_LOMIXSC_MIC1, 1, 0),
236};
237
222/* ADC mixer controls */ 238/* ADC mixer controls */
223static const struct snd_kcontrol_new sun8i_codec_adc_mixer_controls[] = { 239static const struct snd_kcontrol_new sun8i_codec_adc_mixer_controls[] = {
224 SOC_DAPM_DOUBLE_R("Mixer Capture Switch", 240 SOC_DAPM_DOUBLE_R("Mixer Capture Switch",
@@ -243,6 +259,22 @@ static const struct snd_kcontrol_new sun8i_codec_adc_mixer_controls[] = {
243 SUN8I_ADDA_LADCMIXSC_MIC2, 1, 0), 259 SUN8I_ADDA_LADCMIXSC_MIC2, 1, 0),
244}; 260};
245 261
262/* ADC mixer controls */
263static const struct snd_kcontrol_new sun8i_v3s_codec_adc_mixer_controls[] = {
264 SOC_DAPM_DOUBLE_R("Mixer Capture Switch",
265 SUN8I_ADDA_LADCMIXSC,
266 SUN8I_ADDA_RADCMIXSC,
267 SUN8I_ADDA_LADCMIXSC_OMIXRL, 1, 0),
268 SOC_DAPM_DOUBLE_R("Mixer Reversed Capture Switch",
269 SUN8I_ADDA_LADCMIXSC,
270 SUN8I_ADDA_RADCMIXSC,
271 SUN8I_ADDA_LADCMIXSC_OMIXRR, 1, 0),
272 SOC_DAPM_DOUBLE_R("Mic1 Capture Switch",
273 SUN8I_ADDA_LADCMIXSC,
274 SUN8I_ADDA_RADCMIXSC,
275 SUN8I_ADDA_LADCMIXSC_MIC1, 1, 0),
276};
277
246/* volume / mute controls */ 278/* volume / mute controls */
247static const DECLARE_TLV_DB_SCALE(sun8i_codec_out_mixer_pregain_scale, 279static const DECLARE_TLV_DB_SCALE(sun8i_codec_out_mixer_pregain_scale,
248 -450, 150, 0); 280 -450, 150, 0);
@@ -289,16 +321,12 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
289 /* Microphone input */ 321 /* Microphone input */
290 SND_SOC_DAPM_INPUT("MIC1"), 322 SND_SOC_DAPM_INPUT("MIC1"),
291 323
292 /* Microphone Bias */
293 SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
294 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
295 0, NULL, 0),
296
297 /* Mic input path */ 324 /* Mic input path */
298 SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL, 325 SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
299 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0), 326 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
327};
300 328
301 /* Mixers */ 329static const struct snd_soc_dapm_widget sun8i_codec_mixer_widgets[] = {
302 SND_SOC_DAPM_MIXER("Left Mixer", SUN8I_ADDA_DAC_PA_SRC, 330 SND_SOC_DAPM_MIXER("Left Mixer", SUN8I_ADDA_DAC_PA_SRC,
303 SUN8I_ADDA_DAC_PA_SRC_LMIXEN, 0, 331 SUN8I_ADDA_DAC_PA_SRC_LMIXEN, 0,
304 sun8i_codec_mixer_controls, 332 sun8i_codec_mixer_controls,
@@ -317,10 +345,31 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
317 ARRAY_SIZE(sun8i_codec_adc_mixer_controls)), 345 ARRAY_SIZE(sun8i_codec_adc_mixer_controls)),
318}; 346};
319 347
348static const struct snd_soc_dapm_widget sun8i_v3s_codec_mixer_widgets[] = {
349 SND_SOC_DAPM_MIXER("Left Mixer", SUN8I_ADDA_DAC_PA_SRC,
350 SUN8I_ADDA_DAC_PA_SRC_LMIXEN, 0,
351 sun8i_v3s_codec_mixer_controls,
352 ARRAY_SIZE(sun8i_v3s_codec_mixer_controls)),
353 SND_SOC_DAPM_MIXER("Right Mixer", SUN8I_ADDA_DAC_PA_SRC,
354 SUN8I_ADDA_DAC_PA_SRC_RMIXEN, 0,
355 sun8i_v3s_codec_mixer_controls,
356 ARRAY_SIZE(sun8i_v3s_codec_mixer_controls)),
357 SND_SOC_DAPM_MIXER("Left ADC Mixer", SUN8I_ADDA_ADC_AP_EN,
358 SUN8I_ADDA_ADC_AP_EN_ADCLEN, 0,
359 sun8i_v3s_codec_adc_mixer_controls,
360 ARRAY_SIZE(sun8i_v3s_codec_adc_mixer_controls)),
361 SND_SOC_DAPM_MIXER("Right ADC Mixer", SUN8I_ADDA_ADC_AP_EN,
362 SUN8I_ADDA_ADC_AP_EN_ADCREN, 0,
363 sun8i_v3s_codec_adc_mixer_controls,
364 ARRAY_SIZE(sun8i_v3s_codec_adc_mixer_controls)),
365};
366
320static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = { 367static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
321 /* Microphone Routes */ 368 /* Microphone Routes */
322 { "Mic1 Amplifier", NULL, "MIC1"}, 369 { "Mic1 Amplifier", NULL, "MIC1"},
370};
323 371
372static const struct snd_soc_dapm_route sun8i_codec_mixer_routes[] = {
324 /* Left Mixer Routes */ 373 /* Left Mixer Routes */
325 { "Left Mixer", "DAC Playback Switch", "Left DAC" }, 374 { "Left Mixer", "DAC Playback Switch", "Left DAC" },
326 { "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" }, 375 { "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
@@ -453,6 +502,27 @@ static int sun8i_codec_add_headphone(struct snd_soc_component *cmpnt)
453 return 0; 502 return 0;
454} 503}
455 504
505/* mbias specific widget */
506static const struct snd_soc_dapm_widget sun8i_codec_mbias_widgets[] = {
507 SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
508 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
509 0, NULL, 0),
510};
511
512static int sun8i_codec_add_mbias(struct snd_soc_component *cmpnt)
513{
514 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
515 struct device *dev = cmpnt->dev;
516 int ret;
517
518 ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mbias_widgets,
519 ARRAY_SIZE(sun8i_codec_mbias_widgets));
520 if (ret)
521 dev_err(dev, "Failed to add MBIAS DAPM widgets: %d\n", ret);
522
523 return ret;
524}
525
456/* hmic specific widget */ 526/* hmic specific widget */
457static const struct snd_soc_dapm_widget sun8i_codec_hmic_widgets[] = { 527static const struct snd_soc_dapm_widget sun8i_codec_hmic_widgets[] = {
458 SND_SOC_DAPM_SUPPLY("HBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL, 528 SND_SOC_DAPM_SUPPLY("HBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
@@ -679,6 +749,7 @@ struct sun8i_codec_analog_quirks {
679 bool has_hmic; 749 bool has_hmic;
680 bool has_linein; 750 bool has_linein;
681 bool has_lineout; 751 bool has_lineout;
752 bool has_mbias;
682 bool has_mic2; 753 bool has_mic2;
683}; 754};
684 755
@@ -686,15 +757,64 @@ static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
686 .has_headphone = true, 757 .has_headphone = true,
687 .has_hmic = true, 758 .has_hmic = true,
688 .has_linein = true, 759 .has_linein = true,
760 .has_mbias = true,
689 .has_mic2 = true, 761 .has_mic2 = true,
690}; 762};
691 763
692static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = { 764static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
693 .has_linein = true, 765 .has_linein = true,
694 .has_lineout = true, 766 .has_lineout = true,
767 .has_mbias = true,
695 .has_mic2 = true, 768 .has_mic2 = true,
696}; 769};
697 770
771static int sun8i_codec_analog_add_mixer(struct snd_soc_component *cmpnt,
772 const struct sun8i_codec_analog_quirks *quirks)
773{
774 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
775 struct device *dev = cmpnt->dev;
776 int ret;
777
778 if (!quirks->has_mic2 && !quirks->has_linein) {
779 /*
780 * Apply the special widget set which has uses a control
781 * without MIC2 and Line In, for SoCs without these.
782 * TODO: not all special cases are supported now, this case
783 * is present because it's the case of V3s.
784 */
785 ret = snd_soc_dapm_new_controls(dapm,
786 sun8i_v3s_codec_mixer_widgets,
787 ARRAY_SIZE(sun8i_v3s_codec_mixer_widgets));
788 if (ret) {
789 dev_err(dev, "Failed to add V3s Mixer DAPM widgets: %d\n", ret);
790 return ret;
791 }
792 } else {
793 /* Apply the generic mixer widget set. */
794 ret = snd_soc_dapm_new_controls(dapm,
795 sun8i_codec_mixer_widgets,
796 ARRAY_SIZE(sun8i_codec_mixer_widgets));
797 if (ret) {
798 dev_err(dev, "Failed to add Mixer DAPM widgets: %d\n", ret);
799 return ret;
800 }
801 }
802
803 ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_mixer_routes,
804 ARRAY_SIZE(sun8i_codec_mixer_routes));
805 if (ret) {
806 dev_err(dev, "Failed to add Mixer DAPM routes: %d\n", ret);
807 return ret;
808 }
809
810 return 0;
811}
812
813static const struct sun8i_codec_analog_quirks sun8i_v3s_quirks = {
814 .has_headphone = true,
815 .has_hmic = true,
816};
817
698static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt) 818static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
699{ 819{
700 struct device *dev = cmpnt->dev; 820 struct device *dev = cmpnt->dev;
@@ -709,6 +829,9 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
709 quirks = of_device_get_match_data(dev); 829 quirks = of_device_get_match_data(dev);
710 830
711 /* Add controls, widgets, and routes for individual features */ 831 /* Add controls, widgets, and routes for individual features */
832 ret = sun8i_codec_analog_add_mixer(cmpnt, quirks);
833 if (ret)
834 return ret;
712 835
713 if (quirks->has_headphone) { 836 if (quirks->has_headphone) {
714 ret = sun8i_codec_add_headphone(cmpnt); 837 ret = sun8i_codec_add_headphone(cmpnt);
@@ -734,6 +857,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
734 return ret; 857 return ret;
735 } 858 }
736 859
860 if (quirks->has_mbias) {
861 ret = sun8i_codec_add_mbias(cmpnt);
862 if (ret)
863 return ret;
864 }
865
737 if (quirks->has_mic2) { 866 if (quirks->has_mic2) {
738 ret = sun8i_codec_add_mic2(cmpnt); 867 ret = sun8i_codec_add_mic2(cmpnt);
739 if (ret) 868 if (ret)
@@ -762,6 +891,10 @@ static const struct of_device_id sun8i_codec_analog_of_match[] = {
762 .compatible = "allwinner,sun8i-h3-codec-analog", 891 .compatible = "allwinner,sun8i-h3-codec-analog",
763 .data = &sun8i_h3_quirks, 892 .data = &sun8i_h3_quirks,
764 }, 893 },
894 {
895 .compatible = "allwinner,sun8i-v3s-codec-analog",
896 .data = &sun8i_v3s_quirks,
897 },
765 {} 898 {}
766}; 899};
767MODULE_DEVICE_TABLE(of, sun8i_codec_analog_of_match); 900MODULE_DEVICE_TABLE(of, sun8i_codec_analog_of_match);
diff --git a/sound/soc/zte/zx-i2s.c b/sound/soc/zte/zx-i2s.c
index a865f37c2a56..8bbad1d72bc5 100644
--- a/sound/soc/zte/zx-i2s.c
+++ b/sound/soc/zte/zx-i2s.c
@@ -203,13 +203,15 @@ static int zx_i2s_set_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
203 203
204 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { 204 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
205 case SND_SOC_DAIFMT_CBM_CFM: 205 case SND_SOC_DAIFMT_CBM_CFM:
206 i2s->master = 1; 206 /* Codec is master, and I2S is slave. */
207 val |= ZX_I2S_TIMING_MAST;
208 break;
209 case SND_SOC_DAIFMT_CBS_CFS:
210 i2s->master = 0; 207 i2s->master = 0;
211 val |= ZX_I2S_TIMING_SLAVE; 208 val |= ZX_I2S_TIMING_SLAVE;
212 break; 209 break;
210 case SND_SOC_DAIFMT_CBS_CFS:
211 /* Codec is slave, and I2S is master. */
212 i2s->master = 1;
213 val |= ZX_I2S_TIMING_MAST;
214 break;
213 default: 215 default:
214 dev_err(cpu_dai->dev, "Unknown master/slave format\n"); 216 dev_err(cpu_dai->dev, "Unknown master/slave format\n");
215 return -EINVAL; 217 return -EINVAL;
@@ -226,11 +228,12 @@ static int zx_i2s_hw_params(struct snd_pcm_substream *substream,
226 struct zx_i2s_info *i2s = snd_soc_dai_get_drvdata(socdai); 228 struct zx_i2s_info *i2s = snd_soc_dai_get_drvdata(socdai);
227 struct snd_dmaengine_dai_dma_data *dma_data; 229 struct snd_dmaengine_dai_dma_data *dma_data;
228 unsigned int lane, ch_num, len, ret = 0; 230 unsigned int lane, ch_num, len, ret = 0;
231 unsigned int ts_width = 32;
229 unsigned long val; 232 unsigned long val;
230 unsigned long chn_cfg; 233 unsigned long chn_cfg;
231 234
232 dma_data = snd_soc_dai_get_dma_data(socdai, substream); 235 dma_data = snd_soc_dai_get_dma_data(socdai, substream);
233 dma_data->addr_width = params_width(params) >> 3; 236 dma_data->addr_width = ts_width >> 3;
234 237
235 val = readl_relaxed(i2s->reg_base + ZX_I2S_TIMING_CTRL); 238 val = readl_relaxed(i2s->reg_base + ZX_I2S_TIMING_CTRL);
236 val &= ~(ZX_I2S_TIMING_TS_WIDTH_MASK | ZX_I2S_TIMING_DATA_SIZE_MASK | 239 val &= ~(ZX_I2S_TIMING_TS_WIDTH_MASK | ZX_I2S_TIMING_DATA_SIZE_MASK |
@@ -251,7 +254,7 @@ static int zx_i2s_hw_params(struct snd_pcm_substream *substream,
251 dev_err(socdai->dev, "Unknown data format\n"); 254 dev_err(socdai->dev, "Unknown data format\n");
252 return -EINVAL; 255 return -EINVAL;
253 } 256 }
254 val |= ZX_I2S_TIMING_TS_WIDTH(len) | ZX_I2S_TIMING_DATA_SIZE(len); 257 val |= ZX_I2S_TIMING_TS_WIDTH(ts_width) | ZX_I2S_TIMING_DATA_SIZE(len);
255 258
256 ch_num = params_channels(params); 259 ch_num = params_channels(params);
257 switch (ch_num) { 260 switch (ch_num) {
diff --git a/tools/arch/arm/include/uapi/asm/kvm.h b/tools/arch/arm/include/uapi/asm/kvm.h
index 6ebd3e6a1fd1..5e3c673fa3f4 100644
--- a/tools/arch/arm/include/uapi/asm/kvm.h
+++ b/tools/arch/arm/include/uapi/asm/kvm.h
@@ -27,6 +27,8 @@
27#define __KVM_HAVE_IRQ_LINE 27#define __KVM_HAVE_IRQ_LINE
28#define __KVM_HAVE_READONLY_MEM 28#define __KVM_HAVE_READONLY_MEM
29 29
30#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
31
30#define KVM_REG_SIZE(id) \ 32#define KVM_REG_SIZE(id) \
31 (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT)) 33 (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
32 34
@@ -114,6 +116,8 @@ struct kvm_debug_exit_arch {
114}; 116};
115 117
116struct kvm_sync_regs { 118struct kvm_sync_regs {
119 /* Used with KVM_CAP_ARM_USER_IRQ */
120 __u64 device_irq_level;
117}; 121};
118 122
119struct kvm_arch_memory_slot { 123struct kvm_arch_memory_slot {
@@ -192,13 +196,17 @@ struct kvm_arch_memory_slot {
192#define KVM_DEV_ARM_VGIC_GRP_REDIST_REGS 5 196#define KVM_DEV_ARM_VGIC_GRP_REDIST_REGS 5
193#define KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS 6 197#define KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS 6
194#define KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO 7 198#define KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO 7
199#define KVM_DEV_ARM_VGIC_GRP_ITS_REGS 8
195#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT 10 200#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT 10
196#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_MASK \ 201#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_MASK \
197 (0x3fffffULL << KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT) 202 (0x3fffffULL << KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT)
198#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INTID_MASK 0x3ff 203#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INTID_MASK 0x3ff
199#define VGIC_LEVEL_INFO_LINE_LEVEL 0 204#define VGIC_LEVEL_INFO_LINE_LEVEL 0
200 205
201#define KVM_DEV_ARM_VGIC_CTRL_INIT 0 206#define KVM_DEV_ARM_VGIC_CTRL_INIT 0
207#define KVM_DEV_ARM_ITS_SAVE_TABLES 1
208#define KVM_DEV_ARM_ITS_RESTORE_TABLES 2
209#define KVM_DEV_ARM_VGIC_SAVE_PENDING_TABLES 3
202 210
203/* KVM_IRQ_LINE irq field index values */ 211/* KVM_IRQ_LINE irq field index values */
204#define KVM_ARM_IRQ_TYPE_SHIFT 24 212#define KVM_ARM_IRQ_TYPE_SHIFT 24
diff --git a/tools/arch/arm64/include/uapi/asm/kvm.h b/tools/arch/arm64/include/uapi/asm/kvm.h
index c2860358ae3e..70eea2ecc663 100644
--- a/tools/arch/arm64/include/uapi/asm/kvm.h
+++ b/tools/arch/arm64/include/uapi/asm/kvm.h
@@ -39,6 +39,8 @@
39#define __KVM_HAVE_IRQ_LINE 39#define __KVM_HAVE_IRQ_LINE
40#define __KVM_HAVE_READONLY_MEM 40#define __KVM_HAVE_READONLY_MEM
41 41
42#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
43
42#define KVM_REG_SIZE(id) \ 44#define KVM_REG_SIZE(id) \
43 (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT)) 45 (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
44 46
@@ -143,6 +145,8 @@ struct kvm_debug_exit_arch {
143#define KVM_GUESTDBG_USE_HW (1 << 17) 145#define KVM_GUESTDBG_USE_HW (1 << 17)
144 146
145struct kvm_sync_regs { 147struct kvm_sync_regs {
148 /* Used with KVM_CAP_ARM_USER_IRQ */
149 __u64 device_irq_level;
146}; 150};
147 151
148struct kvm_arch_memory_slot { 152struct kvm_arch_memory_slot {
@@ -212,13 +216,17 @@ struct kvm_arch_memory_slot {
212#define KVM_DEV_ARM_VGIC_GRP_REDIST_REGS 5 216#define KVM_DEV_ARM_VGIC_GRP_REDIST_REGS 5
213#define KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS 6 217#define KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS 6
214#define KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO 7 218#define KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO 7
219#define KVM_DEV_ARM_VGIC_GRP_ITS_REGS 8
215#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT 10 220#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT 10
216#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_MASK \ 221#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_MASK \
217 (0x3fffffULL << KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT) 222 (0x3fffffULL << KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT)
218#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INTID_MASK 0x3ff 223#define KVM_DEV_ARM_VGIC_LINE_LEVEL_INTID_MASK 0x3ff
219#define VGIC_LEVEL_INFO_LINE_LEVEL 0 224#define VGIC_LEVEL_INFO_LINE_LEVEL 0
220 225
221#define KVM_DEV_ARM_VGIC_CTRL_INIT 0 226#define KVM_DEV_ARM_VGIC_CTRL_INIT 0
227#define KVM_DEV_ARM_ITS_SAVE_TABLES 1
228#define KVM_DEV_ARM_ITS_RESTORE_TABLES 2
229#define KVM_DEV_ARM_VGIC_SAVE_PENDING_TABLES 3
222 230
223/* Device Control API on vcpu fd */ 231/* Device Control API on vcpu fd */
224#define KVM_ARM_VCPU_PMU_V3_CTRL 0 232#define KVM_ARM_VCPU_PMU_V3_CTRL 0
diff --git a/tools/arch/powerpc/include/uapi/asm/kvm.h b/tools/arch/powerpc/include/uapi/asm/kvm.h
index 4edbe4bb0e8b..07fbeb927834 100644
--- a/tools/arch/powerpc/include/uapi/asm/kvm.h
+++ b/tools/arch/powerpc/include/uapi/asm/kvm.h
@@ -29,6 +29,9 @@
29#define __KVM_HAVE_IRQ_LINE 29#define __KVM_HAVE_IRQ_LINE
30#define __KVM_HAVE_GUEST_DEBUG 30#define __KVM_HAVE_GUEST_DEBUG
31 31
32/* Not always available, but if it is, this is the correct offset. */
33#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
34
32struct kvm_regs { 35struct kvm_regs {
33 __u64 pc; 36 __u64 pc;
34 __u64 cr; 37 __u64 cr;
diff --git a/tools/arch/s390/include/uapi/asm/kvm.h b/tools/arch/s390/include/uapi/asm/kvm.h
index 7f4fd65e9208..3dd2a1d308dd 100644
--- a/tools/arch/s390/include/uapi/asm/kvm.h
+++ b/tools/arch/s390/include/uapi/asm/kvm.h
@@ -26,6 +26,8 @@
26#define KVM_DEV_FLIC_ADAPTER_REGISTER 6 26#define KVM_DEV_FLIC_ADAPTER_REGISTER 6
27#define KVM_DEV_FLIC_ADAPTER_MODIFY 7 27#define KVM_DEV_FLIC_ADAPTER_MODIFY 7
28#define KVM_DEV_FLIC_CLEAR_IO_IRQ 8 28#define KVM_DEV_FLIC_CLEAR_IO_IRQ 8
29#define KVM_DEV_FLIC_AISM 9
30#define KVM_DEV_FLIC_AIRQ_INJECT 10
29/* 31/*
30 * We can have up to 4*64k pending subchannels + 8 adapter interrupts, 32 * We can have up to 4*64k pending subchannels + 8 adapter interrupts,
31 * as well as up to ASYNC_PF_PER_VCPU*KVM_MAX_VCPUS pfault done interrupts. 33 * as well as up to ASYNC_PF_PER_VCPU*KVM_MAX_VCPUS pfault done interrupts.
@@ -41,7 +43,14 @@ struct kvm_s390_io_adapter {
41 __u8 isc; 43 __u8 isc;
42 __u8 maskable; 44 __u8 maskable;
43 __u8 swap; 45 __u8 swap;
44 __u8 pad; 46 __u8 flags;
47};
48
49#define KVM_S390_ADAPTER_SUPPRESSIBLE 0x01
50
51struct kvm_s390_ais_req {
52 __u8 isc;
53 __u16 mode;
45}; 54};
46 55
47#define KVM_S390_IO_ADAPTER_MASK 1 56#define KVM_S390_IO_ADAPTER_MASK 1
@@ -110,6 +119,7 @@ struct kvm_s390_vm_cpu_machine {
110#define KVM_S390_VM_CPU_FEAT_CMMA 10 119#define KVM_S390_VM_CPU_FEAT_CMMA 10
111#define KVM_S390_VM_CPU_FEAT_PFMFI 11 120#define KVM_S390_VM_CPU_FEAT_PFMFI 11
112#define KVM_S390_VM_CPU_FEAT_SIGPIF 12 121#define KVM_S390_VM_CPU_FEAT_SIGPIF 12
122#define KVM_S390_VM_CPU_FEAT_KSS 13
113struct kvm_s390_vm_cpu_feat { 123struct kvm_s390_vm_cpu_feat {
114 __u64 feat[16]; 124 __u64 feat[16];
115}; 125};
@@ -198,6 +208,10 @@ struct kvm_guest_debug_arch {
198#define KVM_SYNC_VRS (1UL << 6) 208#define KVM_SYNC_VRS (1UL << 6)
199#define KVM_SYNC_RICCB (1UL << 7) 209#define KVM_SYNC_RICCB (1UL << 7)
200#define KVM_SYNC_FPRS (1UL << 8) 210#define KVM_SYNC_FPRS (1UL << 8)
211#define KVM_SYNC_GSCB (1UL << 9)
212/* length and alignment of the sdnx as a power of two */
213#define SDNXC 8
214#define SDNXL (1UL << SDNXC)
201/* definition of registers in kvm_run */ 215/* definition of registers in kvm_run */
202struct kvm_sync_regs { 216struct kvm_sync_regs {
203 __u64 prefix; /* prefix register */ 217 __u64 prefix; /* prefix register */
@@ -218,8 +232,16 @@ struct kvm_sync_regs {
218 }; 232 };
219 __u8 reserved[512]; /* for future vector expansion */ 233 __u8 reserved[512]; /* for future vector expansion */
220 __u32 fpc; /* valid on KVM_SYNC_VRS or KVM_SYNC_FPRS */ 234 __u32 fpc; /* valid on KVM_SYNC_VRS or KVM_SYNC_FPRS */
221 __u8 padding[52]; /* riccb needs to be 64byte aligned */ 235 __u8 padding1[52]; /* riccb needs to be 64byte aligned */
222 __u8 riccb[64]; /* runtime instrumentation controls block */ 236 __u8 riccb[64]; /* runtime instrumentation controls block */
237 __u8 padding2[192]; /* sdnx needs to be 256byte aligned */
238 union {
239 __u8 sdnx[SDNXL]; /* state description annex */
240 struct {
241 __u64 reserved1[2];
242 __u64 gscb[4];
243 };
244 };
223}; 245};
224 246
225#define KVM_REG_S390_TODPR (KVM_REG_S390 | KVM_REG_SIZE_U32 | 0x1) 247#define KVM_REG_S390_TODPR (KVM_REG_S390 | KVM_REG_SIZE_U32 | 0x1)
diff --git a/tools/arch/x86/include/asm/cpufeatures.h b/tools/arch/x86/include/asm/cpufeatures.h
index 0fe00446f9ca..2701e5f8145b 100644
--- a/tools/arch/x86/include/asm/cpufeatures.h
+++ b/tools/arch/x86/include/asm/cpufeatures.h
@@ -202,6 +202,8 @@
202#define X86_FEATURE_AVX512_4VNNIW (7*32+16) /* AVX-512 Neural Network Instructions */ 202#define X86_FEATURE_AVX512_4VNNIW (7*32+16) /* AVX-512 Neural Network Instructions */
203#define X86_FEATURE_AVX512_4FMAPS (7*32+17) /* AVX-512 Multiply Accumulation Single precision */ 203#define X86_FEATURE_AVX512_4FMAPS (7*32+17) /* AVX-512 Multiply Accumulation Single precision */
204 204
205#define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */
206
205/* Virtualization flags: Linux defined, word 8 */ 207/* Virtualization flags: Linux defined, word 8 */
206#define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */ 208#define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */
207#define X86_FEATURE_VNMI ( 8*32+ 1) /* Intel Virtual NMI */ 209#define X86_FEATURE_VNMI ( 8*32+ 1) /* Intel Virtual NMI */
diff --git a/tools/arch/x86/include/asm/disabled-features.h b/tools/arch/x86/include/asm/disabled-features.h
index 85599ad4d024..5dff775af7cd 100644
--- a/tools/arch/x86/include/asm/disabled-features.h
+++ b/tools/arch/x86/include/asm/disabled-features.h
@@ -36,6 +36,12 @@
36# define DISABLE_OSPKE (1<<(X86_FEATURE_OSPKE & 31)) 36# define DISABLE_OSPKE (1<<(X86_FEATURE_OSPKE & 31))
37#endif /* CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS */ 37#endif /* CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS */
38 38
39#ifdef CONFIG_X86_5LEVEL
40# define DISABLE_LA57 0
41#else
42# define DISABLE_LA57 (1<<(X86_FEATURE_LA57 & 31))
43#endif
44
39/* 45/*
40 * Make sure to add features to the correct mask 46 * Make sure to add features to the correct mask
41 */ 47 */
@@ -55,7 +61,7 @@
55#define DISABLED_MASK13 0 61#define DISABLED_MASK13 0
56#define DISABLED_MASK14 0 62#define DISABLED_MASK14 0
57#define DISABLED_MASK15 0 63#define DISABLED_MASK15 0
58#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE) 64#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57)
59#define DISABLED_MASK17 0 65#define DISABLED_MASK17 0
60#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18) 66#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18)
61 67
diff --git a/tools/arch/x86/include/asm/required-features.h b/tools/arch/x86/include/asm/required-features.h
index fac9a5c0abe9..d91ba04dd007 100644
--- a/tools/arch/x86/include/asm/required-features.h
+++ b/tools/arch/x86/include/asm/required-features.h
@@ -53,6 +53,12 @@
53# define NEED_MOVBE 0 53# define NEED_MOVBE 0
54#endif 54#endif
55 55
56#ifdef CONFIG_X86_5LEVEL
57# define NEED_LA57 (1<<(X86_FEATURE_LA57 & 31))
58#else
59# define NEED_LA57 0
60#endif
61
56#ifdef CONFIG_X86_64 62#ifdef CONFIG_X86_64
57#ifdef CONFIG_PARAVIRT 63#ifdef CONFIG_PARAVIRT
58/* Paravirtualized systems may not have PSE or PGE available */ 64/* Paravirtualized systems may not have PSE or PGE available */
@@ -98,7 +104,7 @@
98#define REQUIRED_MASK13 0 104#define REQUIRED_MASK13 0
99#define REQUIRED_MASK14 0 105#define REQUIRED_MASK14 0
100#define REQUIRED_MASK15 0 106#define REQUIRED_MASK15 0
101#define REQUIRED_MASK16 0 107#define REQUIRED_MASK16 (NEED_LA57)
102#define REQUIRED_MASK17 0 108#define REQUIRED_MASK17 0
103#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18) 109#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18)
104 110
diff --git a/tools/arch/x86/include/uapi/asm/kvm.h b/tools/arch/x86/include/uapi/asm/kvm.h
index 739c0c594022..c2824d02ba37 100644
--- a/tools/arch/x86/include/uapi/asm/kvm.h
+++ b/tools/arch/x86/include/uapi/asm/kvm.h
@@ -9,6 +9,9 @@
9#include <linux/types.h> 9#include <linux/types.h>
10#include <linux/ioctl.h> 10#include <linux/ioctl.h>
11 11
12#define KVM_PIO_PAGE_OFFSET 1
13#define KVM_COALESCED_MMIO_PAGE_OFFSET 2
14
12#define DE_VECTOR 0 15#define DE_VECTOR 0
13#define DB_VECTOR 1 16#define DB_VECTOR 1
14#define BP_VECTOR 3 17#define BP_VECTOR 3
diff --git a/tools/arch/x86/include/uapi/asm/vmx.h b/tools/arch/x86/include/uapi/asm/vmx.h
index 14458658e988..690a2dcf4078 100644
--- a/tools/arch/x86/include/uapi/asm/vmx.h
+++ b/tools/arch/x86/include/uapi/asm/vmx.h
@@ -76,7 +76,11 @@
76#define EXIT_REASON_WBINVD 54 76#define EXIT_REASON_WBINVD 54
77#define EXIT_REASON_XSETBV 55 77#define EXIT_REASON_XSETBV 55
78#define EXIT_REASON_APIC_WRITE 56 78#define EXIT_REASON_APIC_WRITE 56
79#define EXIT_REASON_RDRAND 57
79#define EXIT_REASON_INVPCID 58 80#define EXIT_REASON_INVPCID 58
81#define EXIT_REASON_VMFUNC 59
82#define EXIT_REASON_ENCLS 60
83#define EXIT_REASON_RDSEED 61
80#define EXIT_REASON_PML_FULL 62 84#define EXIT_REASON_PML_FULL 62
81#define EXIT_REASON_XSAVES 63 85#define EXIT_REASON_XSAVES 63
82#define EXIT_REASON_XRSTORS 64 86#define EXIT_REASON_XRSTORS 64
@@ -90,6 +94,7 @@
90 { EXIT_REASON_TASK_SWITCH, "TASK_SWITCH" }, \ 94 { EXIT_REASON_TASK_SWITCH, "TASK_SWITCH" }, \
91 { EXIT_REASON_CPUID, "CPUID" }, \ 95 { EXIT_REASON_CPUID, "CPUID" }, \
92 { EXIT_REASON_HLT, "HLT" }, \ 96 { EXIT_REASON_HLT, "HLT" }, \
97 { EXIT_REASON_INVD, "INVD" }, \
93 { EXIT_REASON_INVLPG, "INVLPG" }, \ 98 { EXIT_REASON_INVLPG, "INVLPG" }, \
94 { EXIT_REASON_RDPMC, "RDPMC" }, \ 99 { EXIT_REASON_RDPMC, "RDPMC" }, \
95 { EXIT_REASON_RDTSC, "RDTSC" }, \ 100 { EXIT_REASON_RDTSC, "RDTSC" }, \
@@ -108,6 +113,8 @@
108 { EXIT_REASON_IO_INSTRUCTION, "IO_INSTRUCTION" }, \ 113 { EXIT_REASON_IO_INSTRUCTION, "IO_INSTRUCTION" }, \
109 { EXIT_REASON_MSR_READ, "MSR_READ" }, \ 114 { EXIT_REASON_MSR_READ, "MSR_READ" }, \
110 { EXIT_REASON_MSR_WRITE, "MSR_WRITE" }, \ 115 { EXIT_REASON_MSR_WRITE, "MSR_WRITE" }, \
116 { EXIT_REASON_INVALID_STATE, "INVALID_STATE" }, \
117 { EXIT_REASON_MSR_LOAD_FAIL, "MSR_LOAD_FAIL" }, \
111 { EXIT_REASON_MWAIT_INSTRUCTION, "MWAIT_INSTRUCTION" }, \ 118 { EXIT_REASON_MWAIT_INSTRUCTION, "MWAIT_INSTRUCTION" }, \
112 { EXIT_REASON_MONITOR_TRAP_FLAG, "MONITOR_TRAP_FLAG" }, \ 119 { EXIT_REASON_MONITOR_TRAP_FLAG, "MONITOR_TRAP_FLAG" }, \
113 { EXIT_REASON_MONITOR_INSTRUCTION, "MONITOR_INSTRUCTION" }, \ 120 { EXIT_REASON_MONITOR_INSTRUCTION, "MONITOR_INSTRUCTION" }, \
@@ -115,20 +122,24 @@
115 { EXIT_REASON_MCE_DURING_VMENTRY, "MCE_DURING_VMENTRY" }, \ 122 { EXIT_REASON_MCE_DURING_VMENTRY, "MCE_DURING_VMENTRY" }, \
116 { EXIT_REASON_TPR_BELOW_THRESHOLD, "TPR_BELOW_THRESHOLD" }, \ 123 { EXIT_REASON_TPR_BELOW_THRESHOLD, "TPR_BELOW_THRESHOLD" }, \
117 { EXIT_REASON_APIC_ACCESS, "APIC_ACCESS" }, \ 124 { EXIT_REASON_APIC_ACCESS, "APIC_ACCESS" }, \
118 { EXIT_REASON_GDTR_IDTR, "GDTR_IDTR" }, \ 125 { EXIT_REASON_EOI_INDUCED, "EOI_INDUCED" }, \
119 { EXIT_REASON_LDTR_TR, "LDTR_TR" }, \ 126 { EXIT_REASON_GDTR_IDTR, "GDTR_IDTR" }, \
127 { EXIT_REASON_LDTR_TR, "LDTR_TR" }, \
120 { EXIT_REASON_EPT_VIOLATION, "EPT_VIOLATION" }, \ 128 { EXIT_REASON_EPT_VIOLATION, "EPT_VIOLATION" }, \
121 { EXIT_REASON_EPT_MISCONFIG, "EPT_MISCONFIG" }, \ 129 { EXIT_REASON_EPT_MISCONFIG, "EPT_MISCONFIG" }, \
122 { EXIT_REASON_INVEPT, "INVEPT" }, \ 130 { EXIT_REASON_INVEPT, "INVEPT" }, \
131 { EXIT_REASON_RDTSCP, "RDTSCP" }, \
123 { EXIT_REASON_PREEMPTION_TIMER, "PREEMPTION_TIMER" }, \ 132 { EXIT_REASON_PREEMPTION_TIMER, "PREEMPTION_TIMER" }, \
133 { EXIT_REASON_INVVPID, "INVVPID" }, \
124 { EXIT_REASON_WBINVD, "WBINVD" }, \ 134 { EXIT_REASON_WBINVD, "WBINVD" }, \
135 { EXIT_REASON_XSETBV, "XSETBV" }, \
125 { EXIT_REASON_APIC_WRITE, "APIC_WRITE" }, \ 136 { EXIT_REASON_APIC_WRITE, "APIC_WRITE" }, \
126 { EXIT_REASON_EOI_INDUCED, "EOI_INDUCED" }, \ 137 { EXIT_REASON_RDRAND, "RDRAND" }, \
127 { EXIT_REASON_INVALID_STATE, "INVALID_STATE" }, \
128 { EXIT_REASON_MSR_LOAD_FAIL, "MSR_LOAD_FAIL" }, \
129 { EXIT_REASON_INVD, "INVD" }, \
130 { EXIT_REASON_INVVPID, "INVVPID" }, \
131 { EXIT_REASON_INVPCID, "INVPCID" }, \ 138 { EXIT_REASON_INVPCID, "INVPCID" }, \
139 { EXIT_REASON_VMFUNC, "VMFUNC" }, \
140 { EXIT_REASON_ENCLS, "ENCLS" }, \
141 { EXIT_REASON_RDSEED, "RDSEED" }, \
142 { EXIT_REASON_PML_FULL, "PML_FULL" }, \
132 { EXIT_REASON_XSAVES, "XSAVES" }, \ 143 { EXIT_REASON_XSAVES, "XSAVES" }, \
133 { EXIT_REASON_XRSTORS, "XRSTORS" } 144 { EXIT_REASON_XRSTORS, "XRSTORS" }
134 145
diff --git a/tools/include/linux/filter.h b/tools/include/linux/filter.h
index 390d7c9685fd..4ce25d43e8e3 100644
--- a/tools/include/linux/filter.h
+++ b/tools/include/linux/filter.h
@@ -208,6 +208,16 @@
208 .off = OFF, \ 208 .off = OFF, \
209 .imm = IMM }) 209 .imm = IMM })
210 210
211/* Unconditional jumps, goto pc + off16 */
212
213#define BPF_JMP_A(OFF) \
214 ((struct bpf_insn) { \
215 .code = BPF_JMP | BPF_JA, \
216 .dst_reg = 0, \
217 .src_reg = 0, \
218 .off = OFF, \
219 .imm = 0 })
220
211/* Function call */ 221/* Function call */
212 222
213#define BPF_EMIT_CALL(FUNC) \ 223#define BPF_EMIT_CALL(FUNC) \
diff --git a/tools/include/uapi/linux/stat.h b/tools/include/uapi/linux/stat.h
index d538897b8e08..17b10304c393 100644
--- a/tools/include/uapi/linux/stat.h
+++ b/tools/include/uapi/linux/stat.h
@@ -48,17 +48,13 @@
48 * tv_sec holds the number of seconds before (negative) or after (positive) 48 * tv_sec holds the number of seconds before (negative) or after (positive)
49 * 00:00:00 1st January 1970 UTC. 49 * 00:00:00 1st January 1970 UTC.
50 * 50 *
51 * tv_nsec holds a number of nanoseconds before (0..-999,999,999 if tv_sec is 51 * tv_nsec holds a number of nanoseconds (0..999,999,999) after the tv_sec time.
52 * negative) or after (0..999,999,999 if tv_sec is positive) the tv_sec time.
53 *
54 * Note that if both tv_sec and tv_nsec are non-zero, then the two values must
55 * either be both positive or both negative.
56 * 52 *
57 * __reserved is held in case we need a yet finer resolution. 53 * __reserved is held in case we need a yet finer resolution.
58 */ 54 */
59struct statx_timestamp { 55struct statx_timestamp {
60 __s64 tv_sec; 56 __s64 tv_sec;
61 __s32 tv_nsec; 57 __u32 tv_nsec;
62 __s32 __reserved; 58 __s32 __reserved;
63}; 59};
64 60
diff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c
index 282a60368b14..5f66697fe1e0 100644
--- a/tools/objtool/builtin-check.c
+++ b/tools/objtool/builtin-check.c
@@ -192,7 +192,8 @@ static int __dead_end_function(struct objtool_file *file, struct symbol *func,
192 "complete_and_exit", 192 "complete_and_exit",
193 "kvm_spurious_fault", 193 "kvm_spurious_fault",
194 "__reiserfs_panic", 194 "__reiserfs_panic",
195 "lbug_with_loc" 195 "lbug_with_loc",
196 "fortify_panic",
196 }; 197 };
197 198
198 if (func->bind == STB_WEAK) 199 if (func->bind == STB_WEAK)
diff --git a/tools/perf/Documentation/perf-probe.txt b/tools/perf/Documentation/perf-probe.txt
index e6c9902c6d82..165c2b1d4317 100644
--- a/tools/perf/Documentation/perf-probe.txt
+++ b/tools/perf/Documentation/perf-probe.txt
@@ -240,9 +240,13 @@ Add a probe on schedule() function 12th line with recording cpu local variable:
240 or 240 or
241 ./perf probe --add='schedule:12 cpu' 241 ./perf probe --add='schedule:12 cpu'
242 242
243 this will add one or more probes which has the name start with "schedule". 243Add one or more probes which has the name start with "schedule".
244 244
245 Add probes on lines in schedule() function which calls update_rq_clock(). 245 ./perf probe schedule*
246 or
247 ./perf probe --add='schedule*'
248
249Add probes on lines in schedule() function which calls update_rq_clock().
246 250
247 ./perf probe 'schedule;update_rq_clock*' 251 ./perf probe 'schedule;update_rq_clock*'
248 or 252 or
diff --git a/tools/perf/Documentation/perf-script-perl.txt b/tools/perf/Documentation/perf-script-perl.txt
index dfbb506d2c34..142606c0ec9c 100644
--- a/tools/perf/Documentation/perf-script-perl.txt
+++ b/tools/perf/Documentation/perf-script-perl.txt
@@ -39,7 +39,7 @@ EVENT HANDLERS
39When perf script is invoked using a trace script, a user-defined 39When perf script is invoked using a trace script, a user-defined
40'handler function' is called for each event in the trace. If there's 40'handler function' is called for each event in the trace. If there's
41no handler function defined for a given event type, the event is 41no handler function defined for a given event type, the event is
42ignored (or passed to a 'trace_handled' function, see below) and the 42ignored (or passed to a 'trace_unhandled' function, see below) and the
43next event is processed. 43next event is processed.
44 44
45Most of the event's field values are passed as arguments to the 45Most of the event's field values are passed as arguments to the
diff --git a/tools/perf/Documentation/perf-script-python.txt b/tools/perf/Documentation/perf-script-python.txt
index 54acba221558..51ec2d20068a 100644
--- a/tools/perf/Documentation/perf-script-python.txt
+++ b/tools/perf/Documentation/perf-script-python.txt
@@ -149,10 +149,8 @@ def raw_syscalls__sys_enter(event_name, context, common_cpu,
149 print "id=%d, args=%s\n" % \ 149 print "id=%d, args=%s\n" % \
150 (id, args), 150 (id, args),
151 151
152def trace_unhandled(event_name, context, common_cpu, common_secs, common_nsecs, 152def trace_unhandled(event_name, context, event_fields_dict):
153 common_pid, common_comm): 153 print ' '.join(['%s=%s'%(k,str(v))for k,v in sorted(event_fields_dict.items())])
154 print_header(event_name, common_cpu, common_secs, common_nsecs,
155 common_pid, common_comm)
156 154
157def print_header(event_name, cpu, secs, nsecs, pid, comm): 155def print_header(event_name, cpu, secs, nsecs, pid, comm):
158 print "%-20s %5u %05u.%09u %8u %-20s " % \ 156 print "%-20s %5u %05u.%09u %8u %-20s " % \
@@ -321,7 +319,7 @@ So those are the essential steps in writing and running a script. The
321process can be generalized to any tracepoint or set of tracepoints 319process can be generalized to any tracepoint or set of tracepoints
322you're interested in - basically find the tracepoint(s) you're 320you're interested in - basically find the tracepoint(s) you're
323interested in by looking at the list of available events shown by 321interested in by looking at the list of available events shown by
324'perf list' and/or look in /sys/kernel/debug/tracing events for 322'perf list' and/or look in /sys/kernel/debug/tracing/events/ for
325detailed event and field info, record the corresponding trace data 323detailed event and field info, record the corresponding trace data
326using 'perf record', passing it the list of interesting events, 324using 'perf record', passing it the list of interesting events,
327generate a skeleton script using 'perf script -g python' and modify the 325generate a skeleton script using 'perf script -g python' and modify the
@@ -334,7 +332,7 @@ right place, you can have your script listed alongside the other
334scripts listed by the 'perf script -l' command e.g.: 332scripts listed by the 'perf script -l' command e.g.:
335 333
336---- 334----
337root@tropicana:~# perf script -l 335# perf script -l
338List of available trace scripts: 336List of available trace scripts:
339 wakeup-latency system-wide min/max/avg wakeup latency 337 wakeup-latency system-wide min/max/avg wakeup latency
340 rw-by-file <comm> r/w activity for a program, by file 338 rw-by-file <comm> r/w activity for a program, by file
@@ -383,8 +381,6 @@ source tree:
383 381
384---- 382----
385# ls -al kernel-source/tools/perf/scripts/python 383# ls -al kernel-source/tools/perf/scripts/python
386
387root@tropicana:/home/trz/src/tip# ls -al tools/perf/scripts/python
388total 32 384total 32
389drwxr-xr-x 4 trz trz 4096 2010-01-26 22:30 . 385drwxr-xr-x 4 trz trz 4096 2010-01-26 22:30 .
390drwxr-xr-x 4 trz trz 4096 2010-01-26 22:29 .. 386drwxr-xr-x 4 trz trz 4096 2010-01-26 22:29 ..
@@ -399,7 +395,7 @@ otherwise your script won't show up at run-time), 'perf script -l'
399should show a new entry for your script: 395should show a new entry for your script:
400 396
401---- 397----
402root@tropicana:~# perf script -l 398# perf script -l
403List of available trace scripts: 399List of available trace scripts:
404 wakeup-latency system-wide min/max/avg wakeup latency 400 wakeup-latency system-wide min/max/avg wakeup latency
405 rw-by-file <comm> r/w activity for a program, by file 401 rw-by-file <comm> r/w activity for a program, by file
@@ -437,7 +433,7 @@ EVENT HANDLERS
437When perf script is invoked using a trace script, a user-defined 433When perf script is invoked using a trace script, a user-defined
438'handler function' is called for each event in the trace. If there's 434'handler function' is called for each event in the trace. If there's
439no handler function defined for a given event type, the event is 435no handler function defined for a given event type, the event is
440ignored (or passed to a 'trace_handled' function, see below) and the 436ignored (or passed to a 'trace_unhandled' function, see below) and the
441next event is processed. 437next event is processed.
442 438
443Most of the event's field values are passed as arguments to the 439Most of the event's field values are passed as arguments to the
@@ -532,7 +528,7 @@ can implement a set of optional functions:
532gives scripts a chance to do setup tasks: 528gives scripts a chance to do setup tasks:
533 529
534---- 530----
535def trace_begin: 531def trace_begin():
536 pass 532 pass
537---- 533----
538 534
@@ -541,7 +537,7 @@ def trace_begin:
541 as display results: 537 as display results:
542 538
543---- 539----
544def trace_end: 540def trace_end():
545 pass 541 pass
546---- 542----
547 543
@@ -550,8 +546,7 @@ def trace_end:
550 of common arguments are passed into it: 546 of common arguments are passed into it:
551 547
552---- 548----
553def trace_unhandled(event_name, context, common_cpu, common_secs, 549def trace_unhandled(event_name, context, event_fields_dict):
554 common_nsecs, common_pid, common_comm):
555 pass 550 pass
556---- 551----
557 552
diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt
index cb0eda3925e6..3517e204a2b3 100644
--- a/tools/perf/Documentation/perf-script.txt
+++ b/tools/perf/Documentation/perf-script.txt
@@ -311,6 +311,10 @@ include::itrace.txt[]
311 Set the maximum number of program blocks to print with brstackasm for 311 Set the maximum number of program blocks to print with brstackasm for
312 each sample. 312 each sample.
313 313
314--inline::
315 If a callgraph address belongs to an inlined function, the inline stack
316 will be printed. Each entry has function name and file/line.
317
314SEE ALSO 318SEE ALSO
315-------- 319--------
316linkperf:perf-record[1], linkperf:perf-script-perl[1], 320linkperf:perf-record[1], linkperf:perf-script-perl[1],
diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 8354d04b392f..1f4fbc9a3292 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -19,18 +19,18 @@ CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)
19 19
20include $(srctree)/tools/scripts/Makefile.arch 20include $(srctree)/tools/scripts/Makefile.arch
21 21
22$(call detected_var,ARCH) 22$(call detected_var,SRCARCH)
23 23
24NO_PERF_REGS := 1 24NO_PERF_REGS := 1
25 25
26# Additional ARCH settings for ppc 26# Additional ARCH settings for ppc
27ifeq ($(ARCH),powerpc) 27ifeq ($(SRCARCH),powerpc)
28 NO_PERF_REGS := 0 28 NO_PERF_REGS := 0
29 LIBUNWIND_LIBS := -lunwind -lunwind-ppc64 29 LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
30endif 30endif
31 31
32# Additional ARCH settings for x86 32# Additional ARCH settings for x86
33ifeq ($(ARCH),x86) 33ifeq ($(SRCARCH),x86)
34 $(call detected,CONFIG_X86) 34 $(call detected,CONFIG_X86)
35 ifeq (${IS_64_BIT}, 1) 35 ifeq (${IS_64_BIT}, 1)
36 CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT -DHAVE_SYSCALL_TABLE -I$(OUTPUT)arch/x86/include/generated 36 CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT -DHAVE_SYSCALL_TABLE -I$(OUTPUT)arch/x86/include/generated
@@ -43,12 +43,12 @@ ifeq ($(ARCH),x86)
43 NO_PERF_REGS := 0 43 NO_PERF_REGS := 0
44endif 44endif
45 45
46ifeq ($(ARCH),arm) 46ifeq ($(SRCARCH),arm)
47 NO_PERF_REGS := 0 47 NO_PERF_REGS := 0
48 LIBUNWIND_LIBS = -lunwind -lunwind-arm 48 LIBUNWIND_LIBS = -lunwind -lunwind-arm
49endif 49endif
50 50
51ifeq ($(ARCH),arm64) 51ifeq ($(SRCARCH),arm64)
52 NO_PERF_REGS := 0 52 NO_PERF_REGS := 0
53 LIBUNWIND_LIBS = -lunwind -lunwind-aarch64 53 LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
54endif 54endif
@@ -61,7 +61,7 @@ endif
61# Disable it on all other architectures in case libdw unwind 61# Disable it on all other architectures in case libdw unwind
62# support is detected in system. Add supported architectures 62# support is detected in system. Add supported architectures
63# to the check. 63# to the check.
64ifneq ($(ARCH),$(filter $(ARCH),x86 arm)) 64ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm))
65 NO_LIBDW_DWARF_UNWIND := 1 65 NO_LIBDW_DWARF_UNWIND := 1
66endif 66endif
67 67
@@ -115,9 +115,9 @@ endif
115FEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS) 115FEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS)
116FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf 116FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
117 117
118FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi 118FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi -I$(srctree)/tools/include/uapi
119# include ARCH specific config 119# include ARCH specific config
120-include $(src-perf)/arch/$(ARCH)/Makefile 120-include $(src-perf)/arch/$(SRCARCH)/Makefile
121 121
122ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET 122ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
123 CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET 123 CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
@@ -228,12 +228,12 @@ ifeq ($(DEBUG),0)
228endif 228endif
229 229
230INC_FLAGS += -I$(src-perf)/util/include 230INC_FLAGS += -I$(src-perf)/util/include
231INC_FLAGS += -I$(src-perf)/arch/$(ARCH)/include 231INC_FLAGS += -I$(src-perf)/arch/$(SRCARCH)/include
232INC_FLAGS += -I$(srctree)/tools/include/uapi 232INC_FLAGS += -I$(srctree)/tools/include/uapi
233INC_FLAGS += -I$(srctree)/tools/include/ 233INC_FLAGS += -I$(srctree)/tools/include/
234INC_FLAGS += -I$(srctree)/tools/arch/$(ARCH)/include/uapi 234INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi
235INC_FLAGS += -I$(srctree)/tools/arch/$(ARCH)/include/ 235INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/
236INC_FLAGS += -I$(srctree)/tools/arch/$(ARCH)/ 236INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/
237 237
238# $(obj-perf) for generated common-cmds.h 238# $(obj-perf) for generated common-cmds.h
239# $(obj-perf)/util for generated bison/flex headers 239# $(obj-perf)/util for generated bison/flex headers
@@ -355,7 +355,7 @@ ifndef NO_LIBELF
355 355
356 ifndef NO_DWARF 356 ifndef NO_DWARF
357 ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined) 357 ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
358 msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled); 358 msg := $(warning DWARF register mappings have not been defined for architecture $(SRCARCH), DWARF support disabled);
359 NO_DWARF := 1 359 NO_DWARF := 1
360 else 360 else
361 CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS) 361 CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
@@ -380,7 +380,7 @@ ifndef NO_LIBELF
380 CFLAGS += -DHAVE_BPF_PROLOGUE 380 CFLAGS += -DHAVE_BPF_PROLOGUE
381 $(call detected,CONFIG_BPF_PROLOGUE) 381 $(call detected,CONFIG_BPF_PROLOGUE)
382 else 382 else
383 msg := $(warning BPF prologue is not supported by architecture $(ARCH), missing regs_query_register_offset()); 383 msg := $(warning BPF prologue is not supported by architecture $(SRCARCH), missing regs_query_register_offset());
384 endif 384 endif
385 else 385 else
386 msg := $(warning DWARF support is off, BPF prologue is disabled); 386 msg := $(warning DWARF support is off, BPF prologue is disabled);
@@ -406,7 +406,7 @@ ifdef PERF_HAVE_JITDUMP
406 endif 406 endif
407endif 407endif
408 408
409ifeq ($(ARCH),powerpc) 409ifeq ($(SRCARCH),powerpc)
410 ifndef NO_DWARF 410 ifndef NO_DWARF
411 CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX 411 CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
412 endif 412 endif
@@ -487,7 +487,7 @@ else
487endif 487endif
488 488
489ifndef NO_LOCAL_LIBUNWIND 489ifndef NO_LOCAL_LIBUNWIND
490 ifeq ($(ARCH),$(filter $(ARCH),arm arm64)) 490 ifeq ($(SRCARCH),$(filter $(SRCARCH),arm arm64))
491 $(call feature_check,libunwind-debug-frame) 491 $(call feature_check,libunwind-debug-frame)
492 ifneq ($(feature-libunwind-debug-frame), 1) 492 ifneq ($(feature-libunwind-debug-frame), 1)
493 msg := $(warning No debug_frame support found in libunwind); 493 msg := $(warning No debug_frame support found in libunwind);
@@ -740,7 +740,7 @@ ifeq (${IS_64_BIT}, 1)
740 NO_PERF_READ_VDSO32 := 1 740 NO_PERF_READ_VDSO32 := 1
741 endif 741 endif
742 endif 742 endif
743 ifneq ($(ARCH), x86) 743 ifneq ($(SRCARCH), x86)
744 NO_PERF_READ_VDSOX32 := 1 744 NO_PERF_READ_VDSOX32 := 1
745 endif 745 endif
746 ifndef NO_PERF_READ_VDSOX32 746 ifndef NO_PERF_READ_VDSOX32
@@ -769,7 +769,7 @@ ifdef LIBBABELTRACE
769endif 769endif
770 770
771ifndef NO_AUXTRACE 771ifndef NO_AUXTRACE
772 ifeq ($(ARCH),x86) 772 ifeq ($(SRCARCH),x86)
773 ifeq ($(feature-get_cpuid), 0) 773 ifeq ($(feature-get_cpuid), 0)
774 msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc); 774 msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc);
775 NO_AUXTRACE := 1 775 NO_AUXTRACE := 1
@@ -872,7 +872,7 @@ sysconfdir = $(prefix)/etc
872ETC_PERFCONFIG = etc/perfconfig 872ETC_PERFCONFIG = etc/perfconfig
873endif 873endif
874ifndef lib 874ifndef lib
875ifeq ($(ARCH)$(IS_64_BIT), x861) 875ifeq ($(SRCARCH)$(IS_64_BIT), x861)
876lib = lib64 876lib = lib64
877else 877else
878lib = lib 878lib = lib
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
index 79fe31f20a17..5008f51a08a2 100644
--- a/tools/perf/Makefile.perf
+++ b/tools/perf/Makefile.perf
@@ -226,7 +226,7 @@ endif
226 226
227ifeq ($(config),0) 227ifeq ($(config),0)
228include $(srctree)/tools/scripts/Makefile.arch 228include $(srctree)/tools/scripts/Makefile.arch
229-include arch/$(ARCH)/Makefile 229-include arch/$(SRCARCH)/Makefile
230endif 230endif
231 231
232# The FEATURE_DUMP_EXPORT holds location of the actual 232# The FEATURE_DUMP_EXPORT holds location of the actual
diff --git a/tools/perf/arch/Build b/tools/perf/arch/Build
index 109eb75cf7de..d9b6af837c7d 100644
--- a/tools/perf/arch/Build
+++ b/tools/perf/arch/Build
@@ -1,2 +1,2 @@
1libperf-y += common.o 1libperf-y += common.o
2libperf-y += $(ARCH)/ 2libperf-y += $(SRCARCH)/
diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c
index 837067f48a4c..6b40e9f01740 100644
--- a/tools/perf/arch/common.c
+++ b/tools/perf/arch/common.c
@@ -26,6 +26,7 @@ const char *const arm64_triplets[] = {
26 26
27const char *const powerpc_triplets[] = { 27const char *const powerpc_triplets[] = {
28 "powerpc-unknown-linux-gnu-", 28 "powerpc-unknown-linux-gnu-",
29 "powerpc-linux-gnu-",
29 "powerpc64-unknown-linux-gnu-", 30 "powerpc64-unknown-linux-gnu-",
30 "powerpc64-linux-gnu-", 31 "powerpc64-linux-gnu-",
31 "powerpc64le-linux-gnu-", 32 "powerpc64le-linux-gnu-",
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index d05aec491cff..4761b0d7fcb5 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -2494,6 +2494,8 @@ int cmd_script(int argc, const char **argv)
2494 "Enable kernel symbol demangling"), 2494 "Enable kernel symbol demangling"),
2495 OPT_STRING(0, "time", &script.time_str, "str", 2495 OPT_STRING(0, "time", &script.time_str, "str",
2496 "Time span of interest (start,stop)"), 2496 "Time span of interest (start,stop)"),
2497 OPT_BOOLEAN(0, "inline", &symbol_conf.inline_name,
2498 "Show inline function"),
2497 OPT_END() 2499 OPT_END()
2498 }; 2500 };
2499 const char * const script_subcommands[] = { "record", "report", NULL }; 2501 const char * const script_subcommands[] = { "record", "report", NULL };
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index a935b5023732..ad9324d1daf9 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -1578,6 +1578,7 @@ static void print_header(int argc, const char **argv)
1578static void print_footer(void) 1578static void print_footer(void)
1579{ 1579{
1580 FILE *output = stat_config.output; 1580 FILE *output = stat_config.output;
1581 int n;
1581 1582
1582 if (!null_run) 1583 if (!null_run)
1583 fprintf(output, "\n"); 1584 fprintf(output, "\n");
@@ -1590,7 +1591,9 @@ static void print_footer(void)
1590 } 1591 }
1591 fprintf(output, "\n\n"); 1592 fprintf(output, "\n\n");
1592 1593
1593 if (print_free_counters_hint) 1594 if (print_free_counters_hint &&
1595 sysctl__read_int("kernel/nmi_watchdog", &n) >= 0 &&
1596 n > 0)
1594 fprintf(output, 1597 fprintf(output,
1595"Some events weren't counted. Try disabling the NMI watchdog:\n" 1598"Some events weren't counted. Try disabling the NMI watchdog:\n"
1596" echo 0 > /proc/sys/kernel/nmi_watchdog\n" 1599" echo 0 > /proc/sys/kernel/nmi_watchdog\n"
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index d014350adc52..4b2a5d298197 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -681,6 +681,10 @@ static struct syscall_fmt {
681 { .name = "mlockall", .errmsg = true, 681 { .name = "mlockall", .errmsg = true,
682 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, }, 682 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, },
683 { .name = "mmap", .hexret = true, 683 { .name = "mmap", .hexret = true,
684/* The standard mmap maps to old_mmap on s390x */
685#if defined(__s390x__)
686 .alias = "old_mmap",
687#endif
684 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ 688 .arg_scnprintf = { [0] = SCA_HEX, /* addr */
685 [2] = SCA_MMAP_PROT, /* prot */ 689 [2] = SCA_MMAP_PROT, /* prot */
686 [3] = SCA_MMAP_FLAGS, /* flags */ }, }, 690 [3] = SCA_MMAP_FLAGS, /* flags */ }, },
diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build
index 9213a1273697..999a4e878162 100644
--- a/tools/perf/pmu-events/Build
+++ b/tools/perf/pmu-events/Build
@@ -2,7 +2,7 @@ hostprogs := jevents
2 2
3jevents-y += json.o jsmn.o jevents.o 3jevents-y += json.o jsmn.o jevents.o
4pmu-events-y += pmu-events.o 4pmu-events-y += pmu-events.o
5JDIR = pmu-events/arch/$(ARCH) 5JDIR = pmu-events/arch/$(SRCARCH)
6JSON = $(shell [ -d $(JDIR) ] && \ 6JSON = $(shell [ -d $(JDIR) ] && \
7 find $(JDIR) -name '*.json' -o -name 'mapfile.csv') 7 find $(JDIR) -name '*.json' -o -name 'mapfile.csv')
8# 8#
@@ -10,4 +10,4 @@ JSON = $(shell [ -d $(JDIR) ] && \
10# directory and create tables in pmu-events.c. 10# directory and create tables in pmu-events.c.
11# 11#
12$(OUTPUT)pmu-events/pmu-events.c: $(JSON) $(JEVENTS) 12$(OUTPUT)pmu-events/pmu-events.c: $(JSON) $(JEVENTS)
13 $(Q)$(call echo-cmd,gen)$(JEVENTS) $(ARCH) pmu-events/arch $(OUTPUT)pmu-events/pmu-events.c $(V) 13 $(Q)$(call echo-cmd,gen)$(JEVENTS) $(SRCARCH) pmu-events/arch $(OUTPUT)pmu-events/pmu-events.c $(V)
diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
index af58ebc243ef..84222bdb8689 100644
--- a/tools/perf/tests/Build
+++ b/tools/perf/tests/Build
@@ -75,7 +75,7 @@ $(OUTPUT)tests/llvm-src-relocation.c: tests/bpf-script-test-relocation.c tests/B
75 $(Q)sed -e 's/"/\\"/g' -e 's/\(.*\)/"\1\\n"/g' $< >> $@ 75 $(Q)sed -e 's/"/\\"/g' -e 's/\(.*\)/"\1\\n"/g' $< >> $@
76 $(Q)echo ';' >> $@ 76 $(Q)echo ';' >> $@
77 77
78ifeq ($(ARCH),$(filter $(ARCH),x86 arm arm64 powerpc)) 78ifeq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc))
79perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o 79perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
80endif 80endif
81 81
diff --git a/tools/perf/tests/bp_signal.c b/tools/perf/tests/bp_signal.c
index e7664fe3bd33..8ba2c4618fe9 100644
--- a/tools/perf/tests/bp_signal.c
+++ b/tools/perf/tests/bp_signal.c
@@ -288,3 +288,17 @@ int test__bp_signal(int subtest __maybe_unused)
288 return count1 == 1 && overflows == 3 && count2 == 3 && overflows_2 == 3 && count3 == 2 ? 288 return count1 == 1 && overflows == 3 && count2 == 3 && overflows_2 == 3 && count3 == 2 ?
289 TEST_OK : TEST_FAIL; 289 TEST_OK : TEST_FAIL;
290} 290}
291
292bool test__bp_signal_is_supported(void)
293{
294/*
295 * The powerpc so far does not have support to even create
296 * instruction breakpoint using the perf event interface.
297 * Once it's there we can release this.
298 */
299#ifdef __powerpc__
300 return false;
301#else
302 return true;
303#endif
304}
diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
index 9e08d297f1a9..3ccfd58a8c3c 100644
--- a/tools/perf/tests/builtin-test.c
+++ b/tools/perf/tests/builtin-test.c
@@ -97,10 +97,12 @@ static struct test generic_tests[] = {
97 { 97 {
98 .desc = "Breakpoint overflow signal handler", 98 .desc = "Breakpoint overflow signal handler",
99 .func = test__bp_signal, 99 .func = test__bp_signal,
100 .is_supported = test__bp_signal_is_supported,
100 }, 101 },
101 { 102 {
102 .desc = "Breakpoint overflow sampling", 103 .desc = "Breakpoint overflow sampling",
103 .func = test__bp_signal_overflow, 104 .func = test__bp_signal_overflow,
105 .is_supported = test__bp_signal_is_supported,
104 }, 106 },
105 { 107 {
106 .desc = "Number of exit events of a simple workload", 108 .desc = "Number of exit events of a simple workload",
@@ -401,6 +403,11 @@ static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)
401 if (!perf_test__matches(t, curr, argc, argv)) 403 if (!perf_test__matches(t, curr, argc, argv))
402 continue; 404 continue;
403 405
406 if (t->is_supported && !t->is_supported()) {
407 pr_debug("%2d: %-*s: Disabled\n", i, width, t->desc);
408 continue;
409 }
410
404 pr_info("%2d: %-*s:", i, width, t->desc); 411 pr_info("%2d: %-*s:", i, width, t->desc);
405 412
406 if (intlist__find(skiplist, i)) { 413 if (intlist__find(skiplist, i)) {
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 1f14e7612cbb..94b7c7b02bde 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -229,6 +229,8 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
229 unsigned char buf2[BUFSZ]; 229 unsigned char buf2[BUFSZ];
230 size_t ret_len; 230 size_t ret_len;
231 u64 objdump_addr; 231 u64 objdump_addr;
232 const char *objdump_name;
233 char decomp_name[KMOD_DECOMP_LEN];
232 int ret; 234 int ret;
233 235
234 pr_debug("Reading object code for memory address: %#"PRIx64"\n", addr); 236 pr_debug("Reading object code for memory address: %#"PRIx64"\n", addr);
@@ -289,9 +291,25 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
289 state->done[state->done_cnt++] = al.map->start; 291 state->done[state->done_cnt++] = al.map->start;
290 } 292 }
291 293
294 objdump_name = al.map->dso->long_name;
295 if (dso__needs_decompress(al.map->dso)) {
296 if (dso__decompress_kmodule_path(al.map->dso, objdump_name,
297 decomp_name,
298 sizeof(decomp_name)) < 0) {
299 pr_debug("decompression failed\n");
300 return -1;
301 }
302
303 objdump_name = decomp_name;
304 }
305
292 /* Read the object code using objdump */ 306 /* Read the object code using objdump */
293 objdump_addr = map__rip_2objdump(al.map, al.addr); 307 objdump_addr = map__rip_2objdump(al.map, al.addr);
294 ret = read_via_objdump(al.map->dso->long_name, objdump_addr, buf2, len); 308 ret = read_via_objdump(objdump_name, objdump_addr, buf2, len);
309
310 if (dso__needs_decompress(al.map->dso))
311 unlink(objdump_name);
312
295 if (ret > 0) { 313 if (ret > 0) {
296 /* 314 /*
297 * The kernel maps are inaccurate - assume objdump is right in 315 * The kernel maps are inaccurate - assume objdump is right in
diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
index 32873ec91a4e..cf00ebad2ef5 100644
--- a/tools/perf/tests/task-exit.c
+++ b/tools/perf/tests/task-exit.c
@@ -83,7 +83,7 @@ int test__task_exit(int subtest __maybe_unused)
83 83
84 evsel = perf_evlist__first(evlist); 84 evsel = perf_evlist__first(evlist);
85 evsel->attr.task = 1; 85 evsel->attr.task = 1;
86 evsel->attr.sample_freq = 0; 86 evsel->attr.sample_freq = 1;
87 evsel->attr.inherit = 0; 87 evsel->attr.inherit = 0;
88 evsel->attr.watermark = 0; 88 evsel->attr.watermark = 0;
89 evsel->attr.wakeup_events = 1; 89 evsel->attr.wakeup_events = 1;
diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
index 631859629403..577363809c9b 100644
--- a/tools/perf/tests/tests.h
+++ b/tools/perf/tests/tests.h
@@ -34,6 +34,7 @@ struct test {
34 int (*get_nr)(void); 34 int (*get_nr)(void);
35 const char *(*get_desc)(int subtest); 35 const char *(*get_desc)(int subtest);
36 } subtest; 36 } subtest;
37 bool (*is_supported)(void);
37}; 38};
38 39
39/* Tests */ 40/* Tests */
@@ -99,6 +100,8 @@ const char *test__clang_subtest_get_desc(int subtest);
99int test__clang_subtest_get_nr(void); 100int test__clang_subtest_get_nr(void);
100int test__unit_number__scnprint(int subtest); 101int test__unit_number__scnprint(int subtest);
101 102
103bool test__bp_signal_is_supported(void);
104
102#if defined(__arm__) || defined(__aarch64__) 105#if defined(__arm__) || defined(__aarch64__)
103#ifdef HAVE_DWARF_UNWIND_SUPPORT 106#ifdef HAVE_DWARF_UNWIND_SUPPORT
104struct thread; 107struct thread;
diff --git a/tools/perf/ui/hist.c b/tools/perf/ui/hist.c
index 59addd52d9cd..ddb2c6fbdf91 100644
--- a/tools/perf/ui/hist.c
+++ b/tools/perf/ui/hist.c
@@ -210,6 +210,8 @@ static int __hpp__sort_acc(struct hist_entry *a, struct hist_entry *b,
210 return 0; 210 return 0;
211 211
212 ret = b->callchain->max_depth - a->callchain->max_depth; 212 ret = b->callchain->max_depth - a->callchain->max_depth;
213 if (callchain_param.order == ORDER_CALLER)
214 ret = -ret;
213 } 215 }
214 return ret; 216 return ret;
215} 217}
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 683f8340460c..ddbd56df9187 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -239,10 +239,20 @@ static int jump__parse(struct arch *arch __maybe_unused, struct ins_operands *op
239 const char *s = strchr(ops->raw, '+'); 239 const char *s = strchr(ops->raw, '+');
240 const char *c = strchr(ops->raw, ','); 240 const char *c = strchr(ops->raw, ',');
241 241
242 if (c++ != NULL) 242 /*
243 * skip over possible up to 2 operands to get to address, e.g.:
244 * tbnz w0, #26, ffff0000083cd190 <security_file_permission+0xd0>
245 */
246 if (c++ != NULL) {
243 ops->target.addr = strtoull(c, NULL, 16); 247 ops->target.addr = strtoull(c, NULL, 16);
244 else 248 if (!ops->target.addr) {
249 c = strchr(c, ',');
250 if (c++ != NULL)
251 ops->target.addr = strtoull(c, NULL, 16);
252 }
253 } else {
245 ops->target.addr = strtoull(ops->raw, NULL, 16); 254 ops->target.addr = strtoull(ops->raw, NULL, 16);
255 }
246 256
247 if (s++ != NULL) { 257 if (s++ != NULL) {
248 ops->target.offset = strtoull(s, NULL, 16); 258 ops->target.offset = strtoull(s, NULL, 16);
@@ -257,10 +267,27 @@ static int jump__parse(struct arch *arch __maybe_unused, struct ins_operands *op
257static int jump__scnprintf(struct ins *ins, char *bf, size_t size, 267static int jump__scnprintf(struct ins *ins, char *bf, size_t size,
258 struct ins_operands *ops) 268 struct ins_operands *ops)
259{ 269{
270 const char *c = strchr(ops->raw, ',');
271
260 if (!ops->target.addr || ops->target.offset < 0) 272 if (!ops->target.addr || ops->target.offset < 0)
261 return ins__raw_scnprintf(ins, bf, size, ops); 273 return ins__raw_scnprintf(ins, bf, size, ops);
262 274
263 return scnprintf(bf, size, "%-6.6s %" PRIx64, ins->name, ops->target.offset); 275 if (c != NULL) {
276 const char *c2 = strchr(c + 1, ',');
277
278 /* check for 3-op insn */
279 if (c2 != NULL)
280 c = c2;
281 c++;
282
283 /* mirror arch objdump's space-after-comma style */
284 if (*c == ' ')
285 c++;
286 }
287
288 return scnprintf(bf, size, "%-6.6s %.*s%" PRIx64,
289 ins->name, c ? c - ops->raw : 0, ops->raw,
290 ops->target.offset);
264} 291}
265 292
266static struct ins_ops jump_ops = { 293static struct ins_ops jump_ops = {
@@ -1294,6 +1321,7 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
1294 char linkname[PATH_MAX]; 1321 char linkname[PATH_MAX];
1295 char *build_id_filename; 1322 char *build_id_filename;
1296 char *build_id_path = NULL; 1323 char *build_id_path = NULL;
1324 char *pos;
1297 1325
1298 if (dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS && 1326 if (dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS &&
1299 !dso__is_kcore(dso)) 1327 !dso__is_kcore(dso))
@@ -1313,7 +1341,14 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
1313 if (!build_id_path) 1341 if (!build_id_path)
1314 return -1; 1342 return -1;
1315 1343
1316 dirname(build_id_path); 1344 /*
1345 * old style build-id cache has name of XX/XXXXXXX.. while
1346 * new style has XX/XXXXXXX../{elf,kallsyms,vdso}.
1347 * extract the build-id part of dirname in the new style only.
1348 */
1349 pos = strrchr(build_id_path, '/');
1350 if (pos && strlen(pos) < SBUILD_ID_SIZE - 2)
1351 dirname(build_id_path);
1317 1352
1318 if (dso__is_kcore(dso) || 1353 if (dso__is_kcore(dso) ||
1319 readlink(build_id_path, linkname, sizeof(linkname)) < 0 || 1354 readlink(build_id_path, linkname, sizeof(linkname)) < 0 ||
@@ -1396,31 +1431,10 @@ int symbol__disassemble(struct symbol *sym, struct map *map, const char *arch_na
1396 sizeof(symfs_filename)); 1431 sizeof(symfs_filename));
1397 } 1432 }
1398 } else if (dso__needs_decompress(dso)) { 1433 } else if (dso__needs_decompress(dso)) {
1399 char tmp[PATH_MAX]; 1434 char tmp[KMOD_DECOMP_LEN];
1400 struct kmod_path m;
1401 int fd;
1402 bool ret;
1403
1404 if (kmod_path__parse_ext(&m, symfs_filename))
1405 goto out;
1406
1407 snprintf(tmp, PATH_MAX, "/tmp/perf-kmod-XXXXXX");
1408
1409 fd = mkstemp(tmp);
1410 if (fd < 0) {
1411 free(m.ext);
1412 goto out;
1413 }
1414
1415 ret = decompress_to_file(m.ext, symfs_filename, fd);
1416
1417 if (ret)
1418 pr_err("Cannot decompress %s %s\n", m.ext, symfs_filename);
1419
1420 free(m.ext);
1421 close(fd);
1422 1435
1423 if (!ret) 1436 if (dso__decompress_kmodule_path(dso, symfs_filename,
1437 tmp, sizeof(tmp)) < 0)
1424 goto out; 1438 goto out;
1425 1439
1426 strcpy(symfs_filename, tmp); 1440 strcpy(symfs_filename, tmp);
@@ -1429,7 +1443,7 @@ int symbol__disassemble(struct symbol *sym, struct map *map, const char *arch_na
1429 snprintf(command, sizeof(command), 1443 snprintf(command, sizeof(command),
1430 "%s %s%s --start-address=0x%016" PRIx64 1444 "%s %s%s --start-address=0x%016" PRIx64
1431 " --stop-address=0x%016" PRIx64 1445 " --stop-address=0x%016" PRIx64
1432 " -l -d %s %s -C %s 2>/dev/null|grep -v %s:|expand", 1446 " -l -d %s %s -C \"%s\" 2>/dev/null|grep -v \"%s:\"|expand",
1433 objdump_path ? objdump_path : "objdump", 1447 objdump_path ? objdump_path : "objdump",
1434 disassembler_style ? "-M " : "", 1448 disassembler_style ? "-M " : "",
1435 disassembler_style ? disassembler_style : "", 1449 disassembler_style ? disassembler_style : "",
diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c
index 168cc49654e7..e0148b081bdf 100644
--- a/tools/perf/util/build-id.c
+++ b/tools/perf/util/build-id.c
@@ -278,51 +278,6 @@ char *dso__build_id_filename(const struct dso *dso, char *bf, size_t size)
278 return bf; 278 return bf;
279} 279}
280 280
281bool dso__build_id_is_kmod(const struct dso *dso, char *bf, size_t size)
282{
283 char *id_name = NULL, *ch;
284 struct stat sb;
285 char sbuild_id[SBUILD_ID_SIZE];
286
287 if (!dso->has_build_id)
288 goto err;
289
290 build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
291 id_name = build_id_cache__linkname(sbuild_id, NULL, 0);
292 if (!id_name)
293 goto err;
294 if (access(id_name, F_OK))
295 goto err;
296 if (lstat(id_name, &sb) == -1)
297 goto err;
298 if ((size_t)sb.st_size > size - 1)
299 goto err;
300 if (readlink(id_name, bf, size - 1) < 0)
301 goto err;
302
303 bf[sb.st_size] = '\0';
304
305 /*
306 * link should be:
307 * ../../lib/modules/4.4.0-rc4/kernel/net/ipv4/netfilter/nf_nat_ipv4.ko/a09fe3eb3147dafa4e3b31dbd6257e4d696bdc92
308 */
309 ch = strrchr(bf, '/');
310 if (!ch)
311 goto err;
312 if (ch - 3 < bf)
313 goto err;
314
315 free(id_name);
316 return strncmp(".ko", ch - 3, 3) == 0;
317err:
318 pr_err("Invalid build id: %s\n", id_name ? :
319 dso->long_name ? :
320 dso->short_name ? :
321 "[unknown]");
322 free(id_name);
323 return false;
324}
325
326#define dsos__for_each_with_build_id(pos, head) \ 281#define dsos__for_each_with_build_id(pos, head) \
327 list_for_each_entry(pos, head, node) \ 282 list_for_each_entry(pos, head, node) \
328 if (!pos->has_build_id) \ 283 if (!pos->has_build_id) \
diff --git a/tools/perf/util/build-id.h b/tools/perf/util/build-id.h
index 8a89b195c1fc..96690a55c62c 100644
--- a/tools/perf/util/build-id.h
+++ b/tools/perf/util/build-id.h
@@ -17,7 +17,6 @@ char *build_id_cache__kallsyms_path(const char *sbuild_id, char *bf,
17 size_t size); 17 size_t size);
18 18
19char *dso__build_id_filename(const struct dso *dso, char *bf, size_t size); 19char *dso__build_id_filename(const struct dso *dso, char *bf, size_t size);
20bool dso__build_id_is_kmod(const struct dso *dso, char *bf, size_t size);
21 20
22int build_id__mark_dso_hit(struct perf_tool *tool, union perf_event *event, 21int build_id__mark_dso_hit(struct perf_tool *tool, union perf_event *event,
23 struct perf_sample *sample, struct perf_evsel *evsel, 22 struct perf_sample *sample, struct perf_evsel *evsel,
diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c
index 81fc29ac798f..b4204b43ed58 100644
--- a/tools/perf/util/callchain.c
+++ b/tools/perf/util/callchain.c
@@ -621,14 +621,19 @@ enum match_result {
621static enum match_result match_chain_srcline(struct callchain_cursor_node *node, 621static enum match_result match_chain_srcline(struct callchain_cursor_node *node,
622 struct callchain_list *cnode) 622 struct callchain_list *cnode)
623{ 623{
624 char *left = get_srcline(cnode->ms.map->dso, 624 char *left = NULL;
625 char *right = NULL;
626 enum match_result ret = MATCH_EQ;
627 int cmp;
628
629 if (cnode->ms.map)
630 left = get_srcline(cnode->ms.map->dso,
625 map__rip_2objdump(cnode->ms.map, cnode->ip), 631 map__rip_2objdump(cnode->ms.map, cnode->ip),
626 cnode->ms.sym, true, false); 632 cnode->ms.sym, true, false);
627 char *right = get_srcline(node->map->dso, 633 if (node->map)
634 right = get_srcline(node->map->dso,
628 map__rip_2objdump(node->map, node->ip), 635 map__rip_2objdump(node->map, node->ip),
629 node->sym, true, false); 636 node->sym, true, false);
630 enum match_result ret = MATCH_EQ;
631 int cmp;
632 637
633 if (left && right) 638 if (left && right)
634 cmp = strcmp(left, right); 639 cmp = strcmp(left, right);
diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index a96a99d2369f..4e7ab611377a 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -248,6 +248,64 @@ bool dso__needs_decompress(struct dso *dso)
248 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP; 248 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
249} 249}
250 250
251static int decompress_kmodule(struct dso *dso, const char *name, char *tmpbuf)
252{
253 int fd = -1;
254 struct kmod_path m;
255
256 if (!dso__needs_decompress(dso))
257 return -1;
258
259 if (kmod_path__parse_ext(&m, dso->long_name))
260 return -1;
261
262 if (!m.comp)
263 goto out;
264
265 fd = mkstemp(tmpbuf);
266 if (fd < 0) {
267 dso->load_errno = errno;
268 goto out;
269 }
270
271 if (!decompress_to_file(m.ext, name, fd)) {
272 dso->load_errno = DSO_LOAD_ERRNO__DECOMPRESSION_FAILURE;
273 close(fd);
274 fd = -1;
275 }
276
277out:
278 free(m.ext);
279 return fd;
280}
281
282int dso__decompress_kmodule_fd(struct dso *dso, const char *name)
283{
284 char tmpbuf[] = KMOD_DECOMP_NAME;
285 int fd;
286
287 fd = decompress_kmodule(dso, name, tmpbuf);
288 unlink(tmpbuf);
289 return fd;
290}
291
292int dso__decompress_kmodule_path(struct dso *dso, const char *name,
293 char *pathname, size_t len)
294{
295 char tmpbuf[] = KMOD_DECOMP_NAME;
296 int fd;
297
298 fd = decompress_kmodule(dso, name, tmpbuf);
299 if (fd < 0) {
300 unlink(tmpbuf);
301 return -1;
302 }
303
304 strncpy(pathname, tmpbuf, len);
305 close(fd);
306 return 0;
307}
308
251/* 309/*
252 * Parses kernel module specified in @path and updates 310 * Parses kernel module specified in @path and updates
253 * @m argument like: 311 * @m argument like:
@@ -335,6 +393,21 @@ int __kmod_path__parse(struct kmod_path *m, const char *path,
335 return 0; 393 return 0;
336} 394}
337 395
396void dso__set_module_info(struct dso *dso, struct kmod_path *m,
397 struct machine *machine)
398{
399 if (machine__is_host(machine))
400 dso->symtab_type = DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE;
401 else
402 dso->symtab_type = DSO_BINARY_TYPE__GUEST_KMODULE;
403
404 /* _KMODULE_COMP should be next to _KMODULE */
405 if (m->kmod && m->comp)
406 dso->symtab_type++;
407
408 dso__set_short_name(dso, strdup(m->name), true);
409}
410
338/* 411/*
339 * Global list of open DSOs and the counter. 412 * Global list of open DSOs and the counter.
340 */ 413 */
@@ -381,7 +454,7 @@ static int do_open(char *name)
381 454
382static int __open_dso(struct dso *dso, struct machine *machine) 455static int __open_dso(struct dso *dso, struct machine *machine)
383{ 456{
384 int fd; 457 int fd = -EINVAL;
385 char *root_dir = (char *)""; 458 char *root_dir = (char *)"";
386 char *name = malloc(PATH_MAX); 459 char *name = malloc(PATH_MAX);
387 460
@@ -392,15 +465,30 @@ static int __open_dso(struct dso *dso, struct machine *machine)
392 root_dir = machine->root_dir; 465 root_dir = machine->root_dir;
393 466
394 if (dso__read_binary_type_filename(dso, dso->binary_type, 467 if (dso__read_binary_type_filename(dso, dso->binary_type,
395 root_dir, name, PATH_MAX)) { 468 root_dir, name, PATH_MAX))
396 free(name); 469 goto out;
397 return -EINVAL;
398 }
399 470
400 if (!is_regular_file(name)) 471 if (!is_regular_file(name))
401 return -EINVAL; 472 goto out;
473
474 if (dso__needs_decompress(dso)) {
475 char newpath[KMOD_DECOMP_LEN];
476 size_t len = sizeof(newpath);
477
478 if (dso__decompress_kmodule_path(dso, name, newpath, len) < 0) {
479 fd = -dso->load_errno;
480 goto out;
481 }
482
483 strcpy(name, newpath);
484 }
402 485
403 fd = do_open(name); 486 fd = do_open(name);
487
488 if (dso__needs_decompress(dso))
489 unlink(name);
490
491out:
404 free(name); 492 free(name);
405 return fd; 493 return fd;
406} 494}
diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
index 12350b171727..bd061ba7b47c 100644
--- a/tools/perf/util/dso.h
+++ b/tools/perf/util/dso.h
@@ -244,6 +244,12 @@ bool is_supported_compression(const char *ext);
244bool is_kernel_module(const char *pathname, int cpumode); 244bool is_kernel_module(const char *pathname, int cpumode);
245bool decompress_to_file(const char *ext, const char *filename, int output_fd); 245bool decompress_to_file(const char *ext, const char *filename, int output_fd);
246bool dso__needs_decompress(struct dso *dso); 246bool dso__needs_decompress(struct dso *dso);
247int dso__decompress_kmodule_fd(struct dso *dso, const char *name);
248int dso__decompress_kmodule_path(struct dso *dso, const char *name,
249 char *pathname, size_t len);
250
251#define KMOD_DECOMP_NAME "/tmp/perf-kmod-XXXXXX"
252#define KMOD_DECOMP_LEN sizeof(KMOD_DECOMP_NAME)
247 253
248struct kmod_path { 254struct kmod_path {
249 char *name; 255 char *name;
@@ -259,6 +265,9 @@ int __kmod_path__parse(struct kmod_path *m, const char *path,
259#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false) 265#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
260#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true) 266#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
261 267
268void dso__set_module_info(struct dso *dso, struct kmod_path *m,
269 struct machine *machine);
270
262/* 271/*
263 * The dso__data_* external interface provides following functions: 272 * The dso__data_* external interface provides following functions:
264 * dso__data_get_fd 273 * dso__data_get_fd
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index e4f7902d5afa..cda44b0e821c 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -273,8 +273,20 @@ struct perf_evsel *perf_evsel__new_cycles(void)
273 struct perf_evsel *evsel; 273 struct perf_evsel *evsel;
274 274
275 event_attr_init(&attr); 275 event_attr_init(&attr);
276 /*
277 * Unnamed union member, not supported as struct member named
278 * initializer in older compilers such as gcc 4.4.7
279 *
280 * Just for probing the precise_ip:
281 */
282 attr.sample_period = 1;
276 283
277 perf_event_attr__set_max_precise_ip(&attr); 284 perf_event_attr__set_max_precise_ip(&attr);
285 /*
286 * Now let the usual logic to set up the perf_event_attr defaults
287 * to kick in when we return and before perf_evsel__open() is called.
288 */
289 attr.sample_period = 0;
278 290
279 evsel = perf_evsel__new(&attr); 291 evsel = perf_evsel__new(&attr);
280 if (evsel == NULL) 292 if (evsel == NULL)
diff --git a/tools/perf/util/evsel_fprintf.c b/tools/perf/util/evsel_fprintf.c
index e415aee6a245..583f3a602506 100644
--- a/tools/perf/util/evsel_fprintf.c
+++ b/tools/perf/util/evsel_fprintf.c
@@ -7,6 +7,7 @@
7#include "map.h" 7#include "map.h"
8#include "strlist.h" 8#include "strlist.h"
9#include "symbol.h" 9#include "symbol.h"
10#include "srcline.h"
10 11
11static int comma_fprintf(FILE *fp, bool *first, const char *fmt, ...) 12static int comma_fprintf(FILE *fp, bool *first, const char *fmt, ...)
12{ 13{
@@ -168,6 +169,38 @@ int sample__fprintf_callchain(struct perf_sample *sample, int left_alignment,
168 if (!print_oneline) 169 if (!print_oneline)
169 printed += fprintf(fp, "\n"); 170 printed += fprintf(fp, "\n");
170 171
172 if (symbol_conf.inline_name && node->map) {
173 struct inline_node *inode;
174
175 addr = map__rip_2objdump(node->map, node->ip),
176 inode = dso__parse_addr_inlines(node->map->dso, addr);
177
178 if (inode) {
179 struct inline_list *ilist;
180
181 list_for_each_entry(ilist, &inode->val, list) {
182 if (print_arrow)
183 printed += fprintf(fp, " <-");
184
185 /* IP is same, just skip it */
186 if (print_ip)
187 printed += fprintf(fp, "%c%16s",
188 s, "");
189 if (print_sym)
190 printed += fprintf(fp, " %s",
191 ilist->funcname);
192 if (print_srcline)
193 printed += fprintf(fp, "\n %s:%d",
194 ilist->filename,
195 ilist->line_nr);
196 if (!print_oneline)
197 printed += fprintf(fp, "\n");
198 }
199
200 inline_node__delete(inode);
201 }
202 }
203
171 if (symbol_conf.bt_stop_list && 204 if (symbol_conf.bt_stop_list &&
172 node->sym && 205 node->sym &&
173 strlist__has_entry(symbol_conf.bt_stop_list, 206 strlist__has_entry(symbol_conf.bt_stop_list,
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 314a07151fb7..b5baff3007bb 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -841,7 +841,7 @@ static int write_group_desc(int fd, struct perf_header *h __maybe_unused,
841 841
842/* 842/*
843 * default get_cpuid(): nothing gets recorded 843 * default get_cpuid(): nothing gets recorded
844 * actual implementation must be in arch/$(ARCH)/util/header.c 844 * actual implementation must be in arch/$(SRCARCH)/util/header.c
845 */ 845 */
846int __weak get_cpuid(char *buffer __maybe_unused, size_t sz __maybe_unused) 846int __weak get_cpuid(char *buffer __maybe_unused, size_t sz __maybe_unused)
847{ 847{
@@ -1469,8 +1469,16 @@ static int __event_process_build_id(struct build_id_event *bev,
1469 1469
1470 dso__set_build_id(dso, &bev->build_id); 1470 dso__set_build_id(dso, &bev->build_id);
1471 1471
1472 if (!is_kernel_module(filename, cpumode)) 1472 if (dso_type != DSO_TYPE_USER) {
1473 dso->kernel = dso_type; 1473 struct kmod_path m = { .name = NULL, };
1474
1475 if (!kmod_path__parse_name(&m, filename) && m.kmod)
1476 dso__set_module_info(dso, &m, machine);
1477 else
1478 dso->kernel = dso_type;
1479
1480 free(m.name);
1481 }
1474 1482
1475 build_id__sprintf(dso->build_id, sizeof(dso->build_id), 1483 build_id__sprintf(dso->build_id, sizeof(dso->build_id),
1476 sbuild_id); 1484 sbuild_id);
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index d97e014c3df3..5de2b86b9880 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -572,16 +572,7 @@ static struct dso *machine__findnew_module_dso(struct machine *machine,
572 if (dso == NULL) 572 if (dso == NULL)
573 goto out_unlock; 573 goto out_unlock;
574 574
575 if (machine__is_host(machine)) 575 dso__set_module_info(dso, m, machine);
576 dso->symtab_type = DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE;
577 else
578 dso->symtab_type = DSO_BINARY_TYPE__GUEST_KMODULE;
579
580 /* _KMODULE_COMP should be next to _KMODULE */
581 if (m->kmod && m->comp)
582 dso->symtab_type++;
583
584 dso__set_short_name(dso, strdup(m->name), true);
585 dso__set_long_name(dso, strdup(filename), true); 576 dso__set_long_name(dso, strdup(filename), true);
586 } 577 }
587 578
@@ -1218,10 +1209,12 @@ int machine__create_kernel_maps(struct machine *machine)
1218 */ 1209 */
1219 map_groups__fixup_end(&machine->kmaps); 1210 map_groups__fixup_end(&machine->kmaps);
1220 1211
1221 if (machine__get_running_kernel_start(machine, &name, &addr)) { 1212 if (!machine__get_running_kernel_start(machine, &name, &addr)) {
1222 } else if (maps__set_kallsyms_ref_reloc_sym(machine->vmlinux_maps, name, addr)) { 1213 if (name &&
1223 machine__destroy_kernel_maps(machine); 1214 maps__set_kallsyms_ref_reloc_sym(machine->vmlinux_maps, name, addr)) {
1224 return -1; 1215 machine__destroy_kernel_maps(machine);
1216 return -1;
1217 }
1225 } 1218 }
1226 1219
1227 return 0; 1220 return 0;
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 84e7e698411e..a2670e9d652d 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -619,7 +619,7 @@ static int post_process_probe_trace_point(struct probe_trace_point *tp,
619 struct map *map, unsigned long offs) 619 struct map *map, unsigned long offs)
620{ 620{
621 struct symbol *sym; 621 struct symbol *sym;
622 u64 addr = tp->address + tp->offset - offs; 622 u64 addr = tp->address - offs;
623 623
624 sym = map__find_symbol(map, addr); 624 sym = map__find_symbol(map, addr);
625 if (!sym) 625 if (!sym)
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index 9d92af7d0718..40de3cb40d21 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -1219,7 +1219,7 @@ static int python_generate_script(struct pevent *pevent, const char *outfile)
1219 fprintf(ofp, "# be retrieved using Python functions of the form " 1219 fprintf(ofp, "# be retrieved using Python functions of the form "
1220 "common_*(context).\n"); 1220 "common_*(context).\n");
1221 1221
1222 fprintf(ofp, "# See the perf-trace-python Documentation for the list " 1222 fprintf(ofp, "# See the perf-script-python Documentation for the list "
1223 "of available functions.\n\n"); 1223 "of available functions.\n\n");
1224 1224
1225 fprintf(ofp, "import os\n"); 1225 fprintf(ofp, "import os\n");
diff --git a/tools/perf/util/srcline.c b/tools/perf/util/srcline.c
index df051a52393c..ebc88a74e67b 100644
--- a/tools/perf/util/srcline.c
+++ b/tools/perf/util/srcline.c
@@ -56,7 +56,10 @@ static int inline_list__append(char *filename, char *funcname, int line_nr,
56 } 56 }
57 } 57 }
58 58
59 list_add_tail(&ilist->list, &node->val); 59 if (callchain_param.order == ORDER_CALLEE)
60 list_add_tail(&ilist->list, &node->val);
61 else
62 list_add(&ilist->list, &node->val);
60 63
61 return 0; 64 return 0;
62} 65}
@@ -200,12 +203,14 @@ static void addr2line_cleanup(struct a2l_data *a2l)
200 203
201#define MAX_INLINE_NEST 1024 204#define MAX_INLINE_NEST 1024
202 205
203static void inline_list__reverse(struct inline_node *node) 206static int inline_list__append_dso_a2l(struct dso *dso,
207 struct inline_node *node)
204{ 208{
205 struct inline_list *ilist, *n; 209 struct a2l_data *a2l = dso->a2l;
210 char *funcname = a2l->funcname ? strdup(a2l->funcname) : NULL;
211 char *filename = a2l->filename ? strdup(a2l->filename) : NULL;
206 212
207 list_for_each_entry_safe_reverse(ilist, n, &node->val, list) 213 return inline_list__append(filename, funcname, a2l->line, node, dso);
208 list_move_tail(&ilist->list, &node->val);
209} 214}
210 215
211static int addr2line(const char *dso_name, u64 addr, 216static int addr2line(const char *dso_name, u64 addr,
@@ -230,36 +235,36 @@ static int addr2line(const char *dso_name, u64 addr,
230 235
231 bfd_map_over_sections(a2l->abfd, find_address_in_section, a2l); 236 bfd_map_over_sections(a2l->abfd, find_address_in_section, a2l);
232 237
233 if (a2l->found && unwind_inlines) { 238 if (!a2l->found)
239 return 0;
240
241 if (unwind_inlines) {
234 int cnt = 0; 242 int cnt = 0;
235 243
244 if (node && inline_list__append_dso_a2l(dso, node))
245 return 0;
246
236 while (bfd_find_inliner_info(a2l->abfd, &a2l->filename, 247 while (bfd_find_inliner_info(a2l->abfd, &a2l->filename,
237 &a2l->funcname, &a2l->line) && 248 &a2l->funcname, &a2l->line) &&
238 cnt++ < MAX_INLINE_NEST) { 249 cnt++ < MAX_INLINE_NEST) {
239 250
240 if (node != NULL) { 251 if (node != NULL) {
241 if (inline_list__append(strdup(a2l->filename), 252 if (inline_list__append_dso_a2l(dso, node))
242 strdup(a2l->funcname),
243 a2l->line, node,
244 dso) != 0)
245 return 0; 253 return 0;
254 // found at least one inline frame
255 ret = 1;
246 } 256 }
247 } 257 }
258 }
248 259
249 if ((node != NULL) && 260 if (file) {
250 (callchain_param.order != ORDER_CALLEE)) { 261 *file = a2l->filename ? strdup(a2l->filename) : NULL;
251 inline_list__reverse(node); 262 ret = *file ? 1 : 0;
252 }
253 } 263 }
254 264
255 if (a2l->found && a2l->filename) { 265 if (line)
256 *file = strdup(a2l->filename);
257 *line = a2l->line; 266 *line = a2l->line;
258 267
259 if (*file)
260 ret = 1;
261 }
262
263 return ret; 268 return ret;
264} 269}
265 270
@@ -278,8 +283,6 @@ void dso__free_a2l(struct dso *dso)
278static struct inline_node *addr2inlines(const char *dso_name, u64 addr, 283static struct inline_node *addr2inlines(const char *dso_name, u64 addr,
279 struct dso *dso) 284 struct dso *dso)
280{ 285{
281 char *file = NULL;
282 unsigned int line = 0;
283 struct inline_node *node; 286 struct inline_node *node;
284 287
285 node = zalloc(sizeof(*node)); 288 node = zalloc(sizeof(*node));
@@ -291,7 +294,7 @@ static struct inline_node *addr2inlines(const char *dso_name, u64 addr,
291 INIT_LIST_HEAD(&node->val); 294 INIT_LIST_HEAD(&node->val);
292 node->addr = addr; 295 node->addr = addr;
293 296
294 if (!addr2line(dso_name, addr, &file, &line, dso, TRUE, node)) 297 if (!addr2line(dso_name, addr, NULL, NULL, dso, TRUE, node))
295 goto out_free_inline_node; 298 goto out_free_inline_node;
296 299
297 if (list_empty(&node->val)) 300 if (list_empty(&node->val))
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
index e7ee47f7377a..502505cf236a 100644
--- a/tools/perf/util/symbol-elf.c
+++ b/tools/perf/util/symbol-elf.c
@@ -637,43 +637,6 @@ static int dso__swap_init(struct dso *dso, unsigned char eidata)
637 return 0; 637 return 0;
638} 638}
639 639
640static int decompress_kmodule(struct dso *dso, const char *name,
641 enum dso_binary_type type)
642{
643 int fd = -1;
644 char tmpbuf[] = "/tmp/perf-kmod-XXXXXX";
645 struct kmod_path m;
646
647 if (type != DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP &&
648 type != DSO_BINARY_TYPE__GUEST_KMODULE_COMP &&
649 type != DSO_BINARY_TYPE__BUILD_ID_CACHE)
650 return -1;
651
652 if (type == DSO_BINARY_TYPE__BUILD_ID_CACHE)
653 name = dso->long_name;
654
655 if (kmod_path__parse_ext(&m, name) || !m.comp)
656 return -1;
657
658 fd = mkstemp(tmpbuf);
659 if (fd < 0) {
660 dso->load_errno = errno;
661 goto out;
662 }
663
664 if (!decompress_to_file(m.ext, name, fd)) {
665 dso->load_errno = DSO_LOAD_ERRNO__DECOMPRESSION_FAILURE;
666 close(fd);
667 fd = -1;
668 }
669
670 unlink(tmpbuf);
671
672out:
673 free(m.ext);
674 return fd;
675}
676
677bool symsrc__possibly_runtime(struct symsrc *ss) 640bool symsrc__possibly_runtime(struct symsrc *ss)
678{ 641{
679 return ss->dynsym || ss->opdsec; 642 return ss->dynsym || ss->opdsec;
@@ -705,9 +668,11 @@ int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name,
705 int fd; 668 int fd;
706 669
707 if (dso__needs_decompress(dso)) { 670 if (dso__needs_decompress(dso)) {
708 fd = decompress_kmodule(dso, name, type); 671 fd = dso__decompress_kmodule_fd(dso, name);
709 if (fd < 0) 672 if (fd < 0)
710 return -1; 673 return -1;
674
675 type = dso->symtab_type;
711 } else { 676 } else {
712 fd = open(name, O_RDONLY); 677 fd = open(name, O_RDONLY);
713 if (fd < 0) { 678 if (fd < 0) {
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 8f2b068ff756..e7a98dbd2aed 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -1562,10 +1562,6 @@ int dso__load(struct dso *dso, struct map *map)
1562 if (!runtime_ss && syms_ss) 1562 if (!runtime_ss && syms_ss)
1563 runtime_ss = syms_ss; 1563 runtime_ss = syms_ss;
1564 1564
1565 if (syms_ss && syms_ss->type == DSO_BINARY_TYPE__BUILD_ID_CACHE)
1566 if (dso__build_id_is_kmod(dso, name, PATH_MAX))
1567 kmod = true;
1568
1569 if (syms_ss) 1565 if (syms_ss)
1570 ret = dso__load_sym(dso, map, syms_ss, runtime_ss, kmod); 1566 ret = dso__load_sym(dso, map, syms_ss, runtime_ss, kmod);
1571 else 1567 else
diff --git a/tools/perf/util/unwind-libdw.c b/tools/perf/util/unwind-libdw.c
index f90e11a555b2..7755a5e0fe5e 100644
--- a/tools/perf/util/unwind-libdw.c
+++ b/tools/perf/util/unwind-libdw.c
@@ -39,6 +39,14 @@ static int __report_module(struct addr_location *al, u64 ip,
39 return 0; 39 return 0;
40 40
41 mod = dwfl_addrmodule(ui->dwfl, ip); 41 mod = dwfl_addrmodule(ui->dwfl, ip);
42 if (mod) {
43 Dwarf_Addr s;
44
45 dwfl_module_info(mod, NULL, &s, NULL, NULL, NULL, NULL, NULL);
46 if (s != al->map->start)
47 mod = 0;
48 }
49
42 if (!mod) 50 if (!mod)
43 mod = dwfl_report_elf(ui->dwfl, dso->short_name, 51 mod = dwfl_report_elf(ui->dwfl, dso->short_name,
44 dso->long_name, -1, al->map->start, 52 dso->long_name, -1, al->map->start,
@@ -168,12 +176,24 @@ frame_callback(Dwfl_Frame *state, void *arg)
168{ 176{
169 struct unwind_info *ui = arg; 177 struct unwind_info *ui = arg;
170 Dwarf_Addr pc; 178 Dwarf_Addr pc;
179 bool isactivation;
171 180
172 if (!dwfl_frame_pc(state, &pc, NULL)) { 181 if (!dwfl_frame_pc(state, &pc, NULL)) {
173 pr_err("%s", dwfl_errmsg(-1)); 182 pr_err("%s", dwfl_errmsg(-1));
174 return DWARF_CB_ABORT; 183 return DWARF_CB_ABORT;
175 } 184 }
176 185
186 // report the module before we query for isactivation
187 report_module(pc, ui);
188
189 if (!dwfl_frame_pc(state, &pc, &isactivation)) {
190 pr_err("%s", dwfl_errmsg(-1));
191 return DWARF_CB_ABORT;
192 }
193
194 if (!isactivation)
195 --pc;
196
177 return entry(pc, ui) || !(--ui->max_stack) ? 197 return entry(pc, ui) || !(--ui->max_stack) ?
178 DWARF_CB_ABORT : DWARF_CB_OK; 198 DWARF_CB_ABORT : DWARF_CB_OK;
179} 199}
@@ -220,7 +240,7 @@ int unwind__get_entries(unwind_entry_cb_t cb, void *arg,
220 240
221 err = dwfl_getthread_frames(ui->dwfl, thread->tid, frame_callback, ui); 241 err = dwfl_getthread_frames(ui->dwfl, thread->tid, frame_callback, ui);
222 242
223 if (err && !ui->max_stack) 243 if (err && ui->max_stack != max_stack)
224 err = 0; 244 err = 0;
225 245
226 /* 246 /*
diff --git a/tools/perf/util/unwind-libunwind-local.c b/tools/perf/util/unwind-libunwind-local.c
index f8455bed6e65..672c2ada9357 100644
--- a/tools/perf/util/unwind-libunwind-local.c
+++ b/tools/perf/util/unwind-libunwind-local.c
@@ -692,6 +692,17 @@ static int get_entries(struct unwind_info *ui, unwind_entry_cb_t cb,
692 692
693 while (!ret && (unw_step(&c) > 0) && i < max_stack) { 693 while (!ret && (unw_step(&c) > 0) && i < max_stack) {
694 unw_get_reg(&c, UNW_REG_IP, &ips[i]); 694 unw_get_reg(&c, UNW_REG_IP, &ips[i]);
695
696 /*
697 * Decrement the IP for any non-activation frames.
698 * this is required to properly find the srcline
699 * for caller frames.
700 * See also the documentation for dwfl_frame_pc(),
701 * which this code tries to replicate.
702 */
703 if (unw_is_signal_frame(&c) <= 0)
704 --ips[i];
705
695 ++i; 706 ++i;
696 } 707 }
697 708
diff --git a/tools/power/acpi/.gitignore b/tools/power/acpi/.gitignore
new file mode 100644
index 000000000000..cba3d994995c
--- /dev/null
+++ b/tools/power/acpi/.gitignore
@@ -0,0 +1,4 @@
1acpidbg
2acpidump
3ec
4include
diff --git a/tools/testing/selftests/bpf/bpf_endian.h b/tools/testing/selftests/bpf/bpf_endian.h
index 19d0604f8694..487cbfb89beb 100644
--- a/tools/testing/selftests/bpf/bpf_endian.h
+++ b/tools/testing/selftests/bpf/bpf_endian.h
@@ -1,23 +1,42 @@
1#ifndef __BPF_ENDIAN__ 1#ifndef __BPF_ENDIAN__
2#define __BPF_ENDIAN__ 2#define __BPF_ENDIAN__
3 3
4#include <asm/byteorder.h> 4#include <linux/swab.h>
5 5
6#if __BYTE_ORDER == __LITTLE_ENDIAN 6/* LLVM's BPF target selects the endianness of the CPU
7# define __bpf_ntohs(x) __builtin_bswap16(x) 7 * it compiles on, or the user specifies (bpfel/bpfeb),
8# define __bpf_htons(x) __builtin_bswap16(x) 8 * respectively. The used __BYTE_ORDER__ is defined by
9#elif __BYTE_ORDER == __BIG_ENDIAN 9 * the compiler, we cannot rely on __BYTE_ORDER from
10# define __bpf_ntohs(x) (x) 10 * libc headers, since it doesn't reflect the actual
11# define __bpf_htons(x) (x) 11 * requested byte order.
12 *
13 * Note, LLVM's BPF target has different __builtin_bswapX()
14 * semantics. It does map to BPF_ALU | BPF_END | BPF_TO_BE
15 * in bpfel and bpfeb case, which means below, that we map
16 * to cpu_to_be16(). We could use it unconditionally in BPF
17 * case, but better not rely on it, so that this header here
18 * can be used from application and BPF program side, which
19 * use different targets.
20 */
21#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
22# define __bpf_ntohs(x) __builtin_bswap16(x)
23# define __bpf_htons(x) __builtin_bswap16(x)
24# define __bpf_constant_ntohs(x) ___constant_swab16(x)
25# define __bpf_constant_htons(x) ___constant_swab16(x)
26#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
27# define __bpf_ntohs(x) (x)
28# define __bpf_htons(x) (x)
29# define __bpf_constant_ntohs(x) (x)
30# define __bpf_constant_htons(x) (x)
12#else 31#else
13# error "Fix your __BYTE_ORDER?!" 32# error "Fix your compiler's __BYTE_ORDER__?!"
14#endif 33#endif
15 34
16#define bpf_htons(x) \ 35#define bpf_htons(x) \
17 (__builtin_constant_p(x) ? \ 36 (__builtin_constant_p(x) ? \
18 __constant_htons(x) : __bpf_htons(x)) 37 __bpf_constant_htons(x) : __bpf_htons(x))
19#define bpf_ntohs(x) \ 38#define bpf_ntohs(x) \
20 (__builtin_constant_p(x) ? \ 39 (__builtin_constant_p(x) ? \
21 __constant_ntohs(x) : __bpf_ntohs(x)) 40 __bpf_constant_ntohs(x) : __bpf_ntohs(x))
22 41
23#endif 42#endif /* __BPF_ENDIAN__ */
diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c
index 3773562056da..0ff8c55c0464 100644
--- a/tools/testing/selftests/bpf/test_verifier.c
+++ b/tools/testing/selftests/bpf/test_verifier.c
@@ -49,6 +49,7 @@
49#define MAX_NR_MAPS 4 49#define MAX_NR_MAPS 4
50 50
51#define F_NEEDS_EFFICIENT_UNALIGNED_ACCESS (1 << 0) 51#define F_NEEDS_EFFICIENT_UNALIGNED_ACCESS (1 << 0)
52#define F_LOAD_WITH_STRICT_ALIGNMENT (1 << 1)
52 53
53struct bpf_test { 54struct bpf_test {
54 const char *descr; 55 const char *descr;
@@ -2615,6 +2616,30 @@ static struct bpf_test tests[] = {
2615 .prog_type = BPF_PROG_TYPE_SCHED_CLS, 2616 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
2616 }, 2617 },
2617 { 2618 {
2619 "direct packet access: test17 (pruning, alignment)",
2620 .insns = {
2621 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
2622 offsetof(struct __sk_buff, data)),
2623 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
2624 offsetof(struct __sk_buff, data_end)),
2625 BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
2626 offsetof(struct __sk_buff, mark)),
2627 BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
2628 BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 14),
2629 BPF_JMP_IMM(BPF_JGT, BPF_REG_7, 1, 4),
2630 BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
2631 BPF_STX_MEM(BPF_W, BPF_REG_0, BPF_REG_0, -4),
2632 BPF_MOV64_IMM(BPF_REG_0, 0),
2633 BPF_EXIT_INSN(),
2634 BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 1),
2635 BPF_JMP_A(-6),
2636 },
2637 .errstr = "misaligned packet access off 2+15+-4 size 4",
2638 .result = REJECT,
2639 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
2640 .flags = F_LOAD_WITH_STRICT_ALIGNMENT,
2641 },
2642 {
2618 "helper access to packet: test1, valid packet_ptr range", 2643 "helper access to packet: test1, valid packet_ptr range",
2619 .insns = { 2644 .insns = {
2620 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 2645 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
@@ -3341,6 +3366,70 @@ static struct bpf_test tests[] = {
3341 .prog_type = BPF_PROG_TYPE_SCHED_CLS 3366 .prog_type = BPF_PROG_TYPE_SCHED_CLS
3342 }, 3367 },
3343 { 3368 {
3369 "alu ops on ptr_to_map_value_or_null, 1",
3370 .insns = {
3371 BPF_MOV64_IMM(BPF_REG_1, 10),
3372 BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_1, -8),
3373 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
3374 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
3375 BPF_LD_MAP_FD(BPF_REG_1, 0),
3376 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0,
3377 BPF_FUNC_map_lookup_elem),
3378 BPF_MOV64_REG(BPF_REG_4, BPF_REG_0),
3379 BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, -2),
3380 BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 2),
3381 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1),
3382 BPF_ST_MEM(BPF_DW, BPF_REG_4, 0, 0),
3383 BPF_EXIT_INSN(),
3384 },
3385 .fixup_map1 = { 4 },
3386 .errstr = "R4 invalid mem access",
3387 .result = REJECT,
3388 .prog_type = BPF_PROG_TYPE_SCHED_CLS
3389 },
3390 {
3391 "alu ops on ptr_to_map_value_or_null, 2",
3392 .insns = {
3393 BPF_MOV64_IMM(BPF_REG_1, 10),
3394 BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_1, -8),
3395 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
3396 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
3397 BPF_LD_MAP_FD(BPF_REG_1, 0),
3398 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0,
3399 BPF_FUNC_map_lookup_elem),
3400 BPF_MOV64_REG(BPF_REG_4, BPF_REG_0),
3401 BPF_ALU64_IMM(BPF_AND, BPF_REG_4, -1),
3402 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1),
3403 BPF_ST_MEM(BPF_DW, BPF_REG_4, 0, 0),
3404 BPF_EXIT_INSN(),
3405 },
3406 .fixup_map1 = { 4 },
3407 .errstr = "R4 invalid mem access",
3408 .result = REJECT,
3409 .prog_type = BPF_PROG_TYPE_SCHED_CLS
3410 },
3411 {
3412 "alu ops on ptr_to_map_value_or_null, 3",
3413 .insns = {
3414 BPF_MOV64_IMM(BPF_REG_1, 10),
3415 BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_1, -8),
3416 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
3417 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
3418 BPF_LD_MAP_FD(BPF_REG_1, 0),
3419 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0,
3420 BPF_FUNC_map_lookup_elem),
3421 BPF_MOV64_REG(BPF_REG_4, BPF_REG_0),
3422 BPF_ALU64_IMM(BPF_LSH, BPF_REG_4, 1),
3423 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1),
3424 BPF_ST_MEM(BPF_DW, BPF_REG_4, 0, 0),
3425 BPF_EXIT_INSN(),
3426 },
3427 .fixup_map1 = { 4 },
3428 .errstr = "R4 invalid mem access",
3429 .result = REJECT,
3430 .prog_type = BPF_PROG_TYPE_SCHED_CLS
3431 },
3432 {
3344 "invalid memory access with multiple map_lookup_elem calls", 3433 "invalid memory access with multiple map_lookup_elem calls",
3345 .insns = { 3434 .insns = {
3346 BPF_MOV64_IMM(BPF_REG_1, 10), 3435 BPF_MOV64_IMM(BPF_REG_1, 10),
@@ -3660,6 +3749,72 @@ static struct bpf_test tests[] = {
3660 .errstr = "invalid bpf_context access", 3749 .errstr = "invalid bpf_context access",
3661 }, 3750 },
3662 { 3751 {
3752 "leak pointer into ctx 1",
3753 .insns = {
3754 BPF_MOV64_IMM(BPF_REG_0, 0),
3755 BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0,
3756 offsetof(struct __sk_buff, cb[0])),
3757 BPF_LD_MAP_FD(BPF_REG_2, 0),
3758 BPF_STX_XADD(BPF_DW, BPF_REG_1, BPF_REG_2,
3759 offsetof(struct __sk_buff, cb[0])),
3760 BPF_EXIT_INSN(),
3761 },
3762 .fixup_map1 = { 2 },
3763 .errstr_unpriv = "R2 leaks addr into mem",
3764 .result_unpriv = REJECT,
3765 .result = ACCEPT,
3766 },
3767 {
3768 "leak pointer into ctx 2",
3769 .insns = {
3770 BPF_MOV64_IMM(BPF_REG_0, 0),
3771 BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0,
3772 offsetof(struct __sk_buff, cb[0])),
3773 BPF_STX_XADD(BPF_DW, BPF_REG_1, BPF_REG_10,
3774 offsetof(struct __sk_buff, cb[0])),
3775 BPF_EXIT_INSN(),
3776 },
3777 .errstr_unpriv = "R10 leaks addr into mem",
3778 .result_unpriv = REJECT,
3779 .result = ACCEPT,
3780 },
3781 {
3782 "leak pointer into ctx 3",
3783 .insns = {
3784 BPF_MOV64_IMM(BPF_REG_0, 0),
3785 BPF_LD_MAP_FD(BPF_REG_2, 0),
3786 BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_2,
3787 offsetof(struct __sk_buff, cb[0])),
3788 BPF_EXIT_INSN(),
3789 },
3790 .fixup_map1 = { 1 },
3791 .errstr_unpriv = "R2 leaks addr into ctx",
3792 .result_unpriv = REJECT,
3793 .result = ACCEPT,
3794 },
3795 {
3796 "leak pointer into map val",
3797 .insns = {
3798 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
3799 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
3800 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
3801 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
3802 BPF_LD_MAP_FD(BPF_REG_1, 0),
3803 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0,
3804 BPF_FUNC_map_lookup_elem),
3805 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 3),
3806 BPF_MOV64_IMM(BPF_REG_3, 0),
3807 BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_3, 0),
3808 BPF_STX_XADD(BPF_DW, BPF_REG_0, BPF_REG_6, 0),
3809 BPF_MOV64_IMM(BPF_REG_0, 0),
3810 BPF_EXIT_INSN(),
3811 },
3812 .fixup_map1 = { 4 },
3813 .errstr_unpriv = "R6 leaks addr into mem",
3814 .result_unpriv = REJECT,
3815 .result = ACCEPT,
3816 },
3817 {
3663 "helper access to map: full range", 3818 "helper access to map: full range",
3664 .insns = { 3819 .insns = {
3665 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 3820 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
@@ -4937,7 +5092,149 @@ static struct bpf_test tests[] = {
4937 .fixup_map_in_map = { 3 }, 5092 .fixup_map_in_map = { 3 },
4938 .errstr = "R1 type=map_value_or_null expected=map_ptr", 5093 .errstr = "R1 type=map_value_or_null expected=map_ptr",
4939 .result = REJECT, 5094 .result = REJECT,
4940 } 5095 },
5096 {
5097 "ld_abs: check calling conv, r1",
5098 .insns = {
5099 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5100 BPF_MOV64_IMM(BPF_REG_1, 0),
5101 BPF_LD_ABS(BPF_W, -0x200000),
5102 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
5103 BPF_EXIT_INSN(),
5104 },
5105 .errstr = "R1 !read_ok",
5106 .result = REJECT,
5107 },
5108 {
5109 "ld_abs: check calling conv, r2",
5110 .insns = {
5111 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5112 BPF_MOV64_IMM(BPF_REG_2, 0),
5113 BPF_LD_ABS(BPF_W, -0x200000),
5114 BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
5115 BPF_EXIT_INSN(),
5116 },
5117 .errstr = "R2 !read_ok",
5118 .result = REJECT,
5119 },
5120 {
5121 "ld_abs: check calling conv, r3",
5122 .insns = {
5123 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5124 BPF_MOV64_IMM(BPF_REG_3, 0),
5125 BPF_LD_ABS(BPF_W, -0x200000),
5126 BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
5127 BPF_EXIT_INSN(),
5128 },
5129 .errstr = "R3 !read_ok",
5130 .result = REJECT,
5131 },
5132 {
5133 "ld_abs: check calling conv, r4",
5134 .insns = {
5135 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5136 BPF_MOV64_IMM(BPF_REG_4, 0),
5137 BPF_LD_ABS(BPF_W, -0x200000),
5138 BPF_MOV64_REG(BPF_REG_0, BPF_REG_4),
5139 BPF_EXIT_INSN(),
5140 },
5141 .errstr = "R4 !read_ok",
5142 .result = REJECT,
5143 },
5144 {
5145 "ld_abs: check calling conv, r5",
5146 .insns = {
5147 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5148 BPF_MOV64_IMM(BPF_REG_5, 0),
5149 BPF_LD_ABS(BPF_W, -0x200000),
5150 BPF_MOV64_REG(BPF_REG_0, BPF_REG_5),
5151 BPF_EXIT_INSN(),
5152 },
5153 .errstr = "R5 !read_ok",
5154 .result = REJECT,
5155 },
5156 {
5157 "ld_abs: check calling conv, r7",
5158 .insns = {
5159 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5160 BPF_MOV64_IMM(BPF_REG_7, 0),
5161 BPF_LD_ABS(BPF_W, -0x200000),
5162 BPF_MOV64_REG(BPF_REG_0, BPF_REG_7),
5163 BPF_EXIT_INSN(),
5164 },
5165 .result = ACCEPT,
5166 },
5167 {
5168 "ld_ind: check calling conv, r1",
5169 .insns = {
5170 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5171 BPF_MOV64_IMM(BPF_REG_1, 1),
5172 BPF_LD_IND(BPF_W, BPF_REG_1, -0x200000),
5173 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
5174 BPF_EXIT_INSN(),
5175 },
5176 .errstr = "R1 !read_ok",
5177 .result = REJECT,
5178 },
5179 {
5180 "ld_ind: check calling conv, r2",
5181 .insns = {
5182 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5183 BPF_MOV64_IMM(BPF_REG_2, 1),
5184 BPF_LD_IND(BPF_W, BPF_REG_2, -0x200000),
5185 BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
5186 BPF_EXIT_INSN(),
5187 },
5188 .errstr = "R2 !read_ok",
5189 .result = REJECT,
5190 },
5191 {
5192 "ld_ind: check calling conv, r3",
5193 .insns = {
5194 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5195 BPF_MOV64_IMM(BPF_REG_3, 1),
5196 BPF_LD_IND(BPF_W, BPF_REG_3, -0x200000),
5197 BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
5198 BPF_EXIT_INSN(),
5199 },
5200 .errstr = "R3 !read_ok",
5201 .result = REJECT,
5202 },
5203 {
5204 "ld_ind: check calling conv, r4",
5205 .insns = {
5206 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5207 BPF_MOV64_IMM(BPF_REG_4, 1),
5208 BPF_LD_IND(BPF_W, BPF_REG_4, -0x200000),
5209 BPF_MOV64_REG(BPF_REG_0, BPF_REG_4),
5210 BPF_EXIT_INSN(),
5211 },
5212 .errstr = "R4 !read_ok",
5213 .result = REJECT,
5214 },
5215 {
5216 "ld_ind: check calling conv, r5",
5217 .insns = {
5218 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5219 BPF_MOV64_IMM(BPF_REG_5, 1),
5220 BPF_LD_IND(BPF_W, BPF_REG_5, -0x200000),
5221 BPF_MOV64_REG(BPF_REG_0, BPF_REG_5),
5222 BPF_EXIT_INSN(),
5223 },
5224 .errstr = "R5 !read_ok",
5225 .result = REJECT,
5226 },
5227 {
5228 "ld_ind: check calling conv, r7",
5229 .insns = {
5230 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
5231 BPF_MOV64_IMM(BPF_REG_7, 1),
5232 BPF_LD_IND(BPF_W, BPF_REG_7, -0x200000),
5233 BPF_MOV64_REG(BPF_REG_0, BPF_REG_7),
5234 BPF_EXIT_INSN(),
5235 },
5236 .result = ACCEPT,
5237 },
4941}; 5238};
4942 5239
4943static int probe_filter_length(const struct bpf_insn *fp) 5240static int probe_filter_length(const struct bpf_insn *fp)
@@ -5059,9 +5356,9 @@ static void do_test_single(struct bpf_test *test, bool unpriv,
5059 5356
5060 do_test_fixup(test, prog, map_fds); 5357 do_test_fixup(test, prog, map_fds);
5061 5358
5062 fd_prog = bpf_load_program(prog_type ? : BPF_PROG_TYPE_SOCKET_FILTER, 5359 fd_prog = bpf_verify_program(prog_type ? : BPF_PROG_TYPE_SOCKET_FILTER,
5063 prog, prog_len, "GPL", 0, bpf_vlog, 5360 prog, prog_len, test->flags & F_LOAD_WITH_STRICT_ALIGNMENT,
5064 sizeof(bpf_vlog)); 5361 "GPL", 0, bpf_vlog, sizeof(bpf_vlog));
5065 5362
5066 expected_ret = unpriv && test->result_unpriv != UNDEF ? 5363 expected_ret = unpriv && test->result_unpriv != UNDEF ?
5067 test->result_unpriv : test->result; 5364 test->result_unpriv : test->result;
diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/multiple_kprobes.tc b/tools/testing/selftests/ftrace/test.d/kprobe/multiple_kprobes.tc
new file mode 100644
index 000000000000..f4d1ff785d67
--- /dev/null
+++ b/tools/testing/selftests/ftrace/test.d/kprobe/multiple_kprobes.tc
@@ -0,0 +1,21 @@
1#!/bin/sh
2# description: Register/unregister many kprobe events
3
4# ftrace fentry skip size depends on the machine architecture.
5# Currently HAVE_KPROBES_ON_FTRACE defined on x86 and powerpc
6case `uname -m` in
7 x86_64|i[3456]86) OFFS=5;;
8 ppc*) OFFS=4;;
9 *) OFFS=0;;
10esac
11
12echo "Setup up to 256 kprobes"
13grep t /proc/kallsyms | cut -f3 -d" " | grep -v .*\\..* | \
14head -n 256 | while read i; do echo p ${i}+${OFFS} ; done > kprobe_events ||:
15
16echo 1 > events/kprobes/enable
17echo 0 > events/kprobes/enable
18echo > kprobe_events
19echo "Waiting for unoptimizing & freeing"
20sleep 5
21echo "Done"
diff --git a/tools/testing/selftests/ntb/ntb_test.sh b/tools/testing/selftests/ntb/ntb_test.sh
index a676d3eefefb..13f5198ba0ee 100755
--- a/tools/testing/selftests/ntb/ntb_test.sh
+++ b/tools/testing/selftests/ntb/ntb_test.sh
@@ -305,7 +305,7 @@ function perf_test()
305 echo "Running remote perf test $WITH DMA" 305 echo "Running remote perf test $WITH DMA"
306 write_file "" $REMOTE_PERF/run 306 write_file "" $REMOTE_PERF/run
307 echo -n " " 307 echo -n " "
308 read_file $LOCAL_PERF/run 308 read_file $REMOTE_PERF/run
309 echo " Passed" 309 echo " Passed"
310 310
311 _modprobe -r ntb_perf 311 _modprobe -r ntb_perf
diff --git a/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c b/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c
index d9c49f41515e..e79ccd6aada1 100644
--- a/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c
+++ b/tools/testing/selftests/powerpc/tm/tm-resched-dscr.c
@@ -42,12 +42,12 @@ int test_body(void)
42 printf("Check DSCR TM context switch: "); 42 printf("Check DSCR TM context switch: ");
43 fflush(stdout); 43 fflush(stdout);
44 for (;;) { 44 for (;;) {
45 rv = 1;
46 asm __volatile__ ( 45 asm __volatile__ (
47 /* set a known value into the DSCR */ 46 /* set a known value into the DSCR */
48 "ld 3, %[dscr1];" 47 "ld 3, %[dscr1];"
49 "mtspr %[sprn_dscr], 3;" 48 "mtspr %[sprn_dscr], 3;"
50 49
50 "li %[rv], 1;"
51 /* start and suspend a transaction */ 51 /* start and suspend a transaction */
52 "tbegin.;" 52 "tbegin.;"
53 "beq 1f;" 53 "beq 1f;"
diff --git a/usr/Kconfig b/usr/Kconfig
index c0c48507e44e..ad0543e21760 100644
--- a/usr/Kconfig
+++ b/usr/Kconfig
@@ -220,6 +220,7 @@ config INITRAMFS_COMPRESSION_LZ4
220endchoice 220endchoice
221 221
222config INITRAMFS_COMPRESSION 222config INITRAMFS_COMPRESSION
223 depends on INITRAMFS_SOURCE!=""
223 string 224 string
224 default "" if INITRAMFS_COMPRESSION_NONE 225 default "" if INITRAMFS_COMPRESSION_NONE
225 default ".gz" if INITRAMFS_COMPRESSION_GZIP 226 default ".gz" if INITRAMFS_COMPRESSION_GZIP
diff --git a/virt/kvm/arm/hyp/vgic-v3-sr.c b/virt/kvm/arm/hyp/vgic-v3-sr.c
index 32c3295929b0..87940364570b 100644
--- a/virt/kvm/arm/hyp/vgic-v3-sr.c
+++ b/virt/kvm/arm/hyp/vgic-v3-sr.c
@@ -22,7 +22,7 @@
22#include <asm/kvm_hyp.h> 22#include <asm/kvm_hyp.h>
23 23
24#define vtr_to_max_lr_idx(v) ((v) & 0xf) 24#define vtr_to_max_lr_idx(v) ((v) & 0xf)
25#define vtr_to_nr_pre_bits(v) (((u32)(v) >> 26) + 1) 25#define vtr_to_nr_pre_bits(v) ((((u32)(v) >> 26) & 7) + 1)
26 26
27static u64 __hyp_text __gic_v3_get_lr(unsigned int lr) 27static u64 __hyp_text __gic_v3_get_lr(unsigned int lr)
28{ 28{
diff --git a/virt/kvm/arm/mmu.c b/virt/kvm/arm/mmu.c
index a2d63247d1bb..e2e5effba2a9 100644
--- a/virt/kvm/arm/mmu.c
+++ b/virt/kvm/arm/mmu.c
@@ -879,6 +879,9 @@ static pmd_t *stage2_get_pmd(struct kvm *kvm, struct kvm_mmu_memory_cache *cache
879 pmd_t *pmd; 879 pmd_t *pmd;
880 880
881 pud = stage2_get_pud(kvm, cache, addr); 881 pud = stage2_get_pud(kvm, cache, addr);
882 if (!pud)
883 return NULL;
884
882 if (stage2_pud_none(*pud)) { 885 if (stage2_pud_none(*pud)) {
883 if (!cache) 886 if (!cache)
884 return NULL; 887 return NULL;
diff --git a/virt/kvm/arm/vgic/vgic-mmio-v2.c b/virt/kvm/arm/vgic/vgic-mmio-v2.c
index 0a4283ed9aa7..63e0bbdcddcc 100644
--- a/virt/kvm/arm/vgic/vgic-mmio-v2.c
+++ b/virt/kvm/arm/vgic/vgic-mmio-v2.c
@@ -226,7 +226,13 @@ static unsigned long vgic_mmio_read_vcpuif(struct kvm_vcpu *vcpu,
226 226
227 switch (addr & 0xff) { 227 switch (addr & 0xff) {
228 case GIC_CPU_CTRL: 228 case GIC_CPU_CTRL:
229 val = vmcr.ctlr; 229 val = vmcr.grpen0 << GIC_CPU_CTRL_EnableGrp0_SHIFT;
230 val |= vmcr.grpen1 << GIC_CPU_CTRL_EnableGrp1_SHIFT;
231 val |= vmcr.ackctl << GIC_CPU_CTRL_AckCtl_SHIFT;
232 val |= vmcr.fiqen << GIC_CPU_CTRL_FIQEn_SHIFT;
233 val |= vmcr.cbpr << GIC_CPU_CTRL_CBPR_SHIFT;
234 val |= vmcr.eoim << GIC_CPU_CTRL_EOImodeNS_SHIFT;
235
230 break; 236 break;
231 case GIC_CPU_PRIMASK: 237 case GIC_CPU_PRIMASK:
232 /* 238 /*
@@ -267,7 +273,13 @@ static void vgic_mmio_write_vcpuif(struct kvm_vcpu *vcpu,
267 273
268 switch (addr & 0xff) { 274 switch (addr & 0xff) {
269 case GIC_CPU_CTRL: 275 case GIC_CPU_CTRL:
270 vmcr.ctlr = val; 276 vmcr.grpen0 = !!(val & GIC_CPU_CTRL_EnableGrp0);
277 vmcr.grpen1 = !!(val & GIC_CPU_CTRL_EnableGrp1);
278 vmcr.ackctl = !!(val & GIC_CPU_CTRL_AckCtl);
279 vmcr.fiqen = !!(val & GIC_CPU_CTRL_FIQEn);
280 vmcr.cbpr = !!(val & GIC_CPU_CTRL_CBPR);
281 vmcr.eoim = !!(val & GIC_CPU_CTRL_EOImodeNS);
282
271 break; 283 break;
272 case GIC_CPU_PRIMASK: 284 case GIC_CPU_PRIMASK:
273 /* 285 /*
diff --git a/virt/kvm/arm/vgic/vgic-v2.c b/virt/kvm/arm/vgic/vgic-v2.c
index 504b4bd0d651..e4187e52bb26 100644
--- a/virt/kvm/arm/vgic/vgic-v2.c
+++ b/virt/kvm/arm/vgic/vgic-v2.c
@@ -177,7 +177,18 @@ void vgic_v2_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp)
177 struct vgic_v2_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v2; 177 struct vgic_v2_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v2;
178 u32 vmcr; 178 u32 vmcr;
179 179
180 vmcr = (vmcrp->ctlr << GICH_VMCR_CTRL_SHIFT) & GICH_VMCR_CTRL_MASK; 180 vmcr = (vmcrp->grpen0 << GICH_VMCR_ENABLE_GRP0_SHIFT) &
181 GICH_VMCR_ENABLE_GRP0_MASK;
182 vmcr |= (vmcrp->grpen1 << GICH_VMCR_ENABLE_GRP1_SHIFT) &
183 GICH_VMCR_ENABLE_GRP1_MASK;
184 vmcr |= (vmcrp->ackctl << GICH_VMCR_ACK_CTL_SHIFT) &
185 GICH_VMCR_ACK_CTL_MASK;
186 vmcr |= (vmcrp->fiqen << GICH_VMCR_FIQ_EN_SHIFT) &
187 GICH_VMCR_FIQ_EN_MASK;
188 vmcr |= (vmcrp->cbpr << GICH_VMCR_CBPR_SHIFT) &
189 GICH_VMCR_CBPR_MASK;
190 vmcr |= (vmcrp->eoim << GICH_VMCR_EOI_MODE_SHIFT) &
191 GICH_VMCR_EOI_MODE_MASK;
181 vmcr |= (vmcrp->abpr << GICH_VMCR_ALIAS_BINPOINT_SHIFT) & 192 vmcr |= (vmcrp->abpr << GICH_VMCR_ALIAS_BINPOINT_SHIFT) &
182 GICH_VMCR_ALIAS_BINPOINT_MASK; 193 GICH_VMCR_ALIAS_BINPOINT_MASK;
183 vmcr |= (vmcrp->bpr << GICH_VMCR_BINPOINT_SHIFT) & 194 vmcr |= (vmcrp->bpr << GICH_VMCR_BINPOINT_SHIFT) &
@@ -195,8 +206,19 @@ void vgic_v2_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp)
195 206
196 vmcr = cpu_if->vgic_vmcr; 207 vmcr = cpu_if->vgic_vmcr;
197 208
198 vmcrp->ctlr = (vmcr & GICH_VMCR_CTRL_MASK) >> 209 vmcrp->grpen0 = (vmcr & GICH_VMCR_ENABLE_GRP0_MASK) >>
199 GICH_VMCR_CTRL_SHIFT; 210 GICH_VMCR_ENABLE_GRP0_SHIFT;
211 vmcrp->grpen1 = (vmcr & GICH_VMCR_ENABLE_GRP1_MASK) >>
212 GICH_VMCR_ENABLE_GRP1_SHIFT;
213 vmcrp->ackctl = (vmcr & GICH_VMCR_ACK_CTL_MASK) >>
214 GICH_VMCR_ACK_CTL_SHIFT;
215 vmcrp->fiqen = (vmcr & GICH_VMCR_FIQ_EN_MASK) >>
216 GICH_VMCR_FIQ_EN_SHIFT;
217 vmcrp->cbpr = (vmcr & GICH_VMCR_CBPR_MASK) >>
218 GICH_VMCR_CBPR_SHIFT;
219 vmcrp->eoim = (vmcr & GICH_VMCR_EOI_MODE_MASK) >>
220 GICH_VMCR_EOI_MODE_SHIFT;
221
200 vmcrp->abpr = (vmcr & GICH_VMCR_ALIAS_BINPOINT_MASK) >> 222 vmcrp->abpr = (vmcr & GICH_VMCR_ALIAS_BINPOINT_MASK) >>
201 GICH_VMCR_ALIAS_BINPOINT_SHIFT; 223 GICH_VMCR_ALIAS_BINPOINT_SHIFT;
202 vmcrp->bpr = (vmcr & GICH_VMCR_BINPOINT_MASK) >> 224 vmcrp->bpr = (vmcr & GICH_VMCR_BINPOINT_MASK) >>
diff --git a/virt/kvm/arm/vgic/vgic-v3.c b/virt/kvm/arm/vgic/vgic-v3.c
index 6fe3f003636a..030248e669f6 100644
--- a/virt/kvm/arm/vgic/vgic-v3.c
+++ b/virt/kvm/arm/vgic/vgic-v3.c
@@ -159,15 +159,24 @@ void vgic_v3_clear_lr(struct kvm_vcpu *vcpu, int lr)
159void vgic_v3_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp) 159void vgic_v3_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp)
160{ 160{
161 struct vgic_v3_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v3; 161 struct vgic_v3_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v3;
162 u32 model = vcpu->kvm->arch.vgic.vgic_model;
162 u32 vmcr; 163 u32 vmcr;
163 164
164 /* 165 if (model == KVM_DEV_TYPE_ARM_VGIC_V2) {
165 * Ignore the FIQen bit, because GIC emulation always implies 166 vmcr = (vmcrp->ackctl << ICH_VMCR_ACK_CTL_SHIFT) &
166 * SRE=1 which means the vFIQEn bit is also RES1. 167 ICH_VMCR_ACK_CTL_MASK;
167 */ 168 vmcr |= (vmcrp->fiqen << ICH_VMCR_FIQ_EN_SHIFT) &
168 vmcr = ((vmcrp->ctlr >> ICC_CTLR_EL1_EOImode_SHIFT) << 169 ICH_VMCR_FIQ_EN_MASK;
169 ICH_VMCR_EOIM_SHIFT) & ICH_VMCR_EOIM_MASK; 170 } else {
170 vmcr |= (vmcrp->ctlr << ICH_VMCR_CBPR_SHIFT) & ICH_VMCR_CBPR_MASK; 171 /*
172 * When emulating GICv3 on GICv3 with SRE=1 on the
173 * VFIQEn bit is RES1 and the VAckCtl bit is RES0.
174 */
175 vmcr = ICH_VMCR_FIQ_EN_MASK;
176 }
177
178 vmcr |= (vmcrp->cbpr << ICH_VMCR_CBPR_SHIFT) & ICH_VMCR_CBPR_MASK;
179 vmcr |= (vmcrp->eoim << ICH_VMCR_EOIM_SHIFT) & ICH_VMCR_EOIM_MASK;
171 vmcr |= (vmcrp->abpr << ICH_VMCR_BPR1_SHIFT) & ICH_VMCR_BPR1_MASK; 180 vmcr |= (vmcrp->abpr << ICH_VMCR_BPR1_SHIFT) & ICH_VMCR_BPR1_MASK;
172 vmcr |= (vmcrp->bpr << ICH_VMCR_BPR0_SHIFT) & ICH_VMCR_BPR0_MASK; 181 vmcr |= (vmcrp->bpr << ICH_VMCR_BPR0_SHIFT) & ICH_VMCR_BPR0_MASK;
173 vmcr |= (vmcrp->pmr << ICH_VMCR_PMR_SHIFT) & ICH_VMCR_PMR_MASK; 182 vmcr |= (vmcrp->pmr << ICH_VMCR_PMR_SHIFT) & ICH_VMCR_PMR_MASK;
@@ -180,17 +189,27 @@ void vgic_v3_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp)
180void vgic_v3_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp) 189void vgic_v3_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp)
181{ 190{
182 struct vgic_v3_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v3; 191 struct vgic_v3_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v3;
192 u32 model = vcpu->kvm->arch.vgic.vgic_model;
183 u32 vmcr; 193 u32 vmcr;
184 194
185 vmcr = cpu_if->vgic_vmcr; 195 vmcr = cpu_if->vgic_vmcr;
186 196
187 /* 197 if (model == KVM_DEV_TYPE_ARM_VGIC_V2) {
188 * Ignore the FIQen bit, because GIC emulation always implies 198 vmcrp->ackctl = (vmcr & ICH_VMCR_ACK_CTL_MASK) >>
189 * SRE=1 which means the vFIQEn bit is also RES1. 199 ICH_VMCR_ACK_CTL_SHIFT;
190 */ 200 vmcrp->fiqen = (vmcr & ICH_VMCR_FIQ_EN_MASK) >>
191 vmcrp->ctlr = ((vmcr >> ICH_VMCR_EOIM_SHIFT) << 201 ICH_VMCR_FIQ_EN_SHIFT;
192 ICC_CTLR_EL1_EOImode_SHIFT) & ICC_CTLR_EL1_EOImode_MASK; 202 } else {
193 vmcrp->ctlr |= (vmcr & ICH_VMCR_CBPR_MASK) >> ICH_VMCR_CBPR_SHIFT; 203 /*
204 * When emulating GICv3 on GICv3 with SRE=1 on the
205 * VFIQEn bit is RES1 and the VAckCtl bit is RES0.
206 */
207 vmcrp->fiqen = 1;
208 vmcrp->ackctl = 0;
209 }
210
211 vmcrp->cbpr = (vmcr & ICH_VMCR_CBPR_MASK) >> ICH_VMCR_CBPR_SHIFT;
212 vmcrp->eoim = (vmcr & ICH_VMCR_EOIM_MASK) >> ICH_VMCR_EOIM_SHIFT;
194 vmcrp->abpr = (vmcr & ICH_VMCR_BPR1_MASK) >> ICH_VMCR_BPR1_SHIFT; 213 vmcrp->abpr = (vmcr & ICH_VMCR_BPR1_MASK) >> ICH_VMCR_BPR1_SHIFT;
195 vmcrp->bpr = (vmcr & ICH_VMCR_BPR0_MASK) >> ICH_VMCR_BPR0_SHIFT; 214 vmcrp->bpr = (vmcr & ICH_VMCR_BPR0_MASK) >> ICH_VMCR_BPR0_SHIFT;
196 vmcrp->pmr = (vmcr & ICH_VMCR_PMR_MASK) >> ICH_VMCR_PMR_SHIFT; 215 vmcrp->pmr = (vmcr & ICH_VMCR_PMR_MASK) >> ICH_VMCR_PMR_SHIFT;
diff --git a/virt/kvm/arm/vgic/vgic.h b/virt/kvm/arm/vgic/vgic.h
index da83e4caa272..bba7fa22a7f7 100644
--- a/virt/kvm/arm/vgic/vgic.h
+++ b/virt/kvm/arm/vgic/vgic.h
@@ -111,14 +111,18 @@ static inline bool irq_is_pending(struct vgic_irq *irq)
111 * registers regardless of the hardware backed GIC used. 111 * registers regardless of the hardware backed GIC used.
112 */ 112 */
113struct vgic_vmcr { 113struct vgic_vmcr {
114 u32 ctlr; 114 u32 grpen0;
115 u32 grpen1;
116
117 u32 ackctl;
118 u32 fiqen;
119 u32 cbpr;
120 u32 eoim;
121
115 u32 abpr; 122 u32 abpr;
116 u32 bpr; 123 u32 bpr;
117 u32 pmr; /* Priority mask field in the GICC_PMR and 124 u32 pmr; /* Priority mask field in the GICC_PMR and
118 * ICC_PMR_EL1 priority field format */ 125 * ICC_PMR_EL1 priority field format */
119 /* Below member variable are valid only for GICv3 */
120 u32 grpen0;
121 u32 grpen1;
122}; 126};
123 127
124struct vgic_reg_attr { 128struct vgic_reg_attr {