Linux 4.20.11
Greg KH
maintainerI'm announcing the release of the 4.20.11 kernel.
All users of the 4.20 kernel series must upgrade.
The updated 4.20.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.20.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/eeprom/at24.txt | 1 Makefile | 2 arch/alpha/include/asm/irq.h | 6 - arch/alpha/mm/fault.c | 2 arch/arm/boot/dts/da850-evm.dts | 31 +++++++- arch/arm/boot/dts/da850-lcdk.dts | 38 ++++++++++ arch/arm/boot/dts/kirkwood-dnskw.dtsi | 4 - arch/arm/boot/dts/omap5-board-common.dtsi | 9 +- arch/arm/boot/dts/omap5-cm-t54.dts | 12 +++ arch/arm/mach-integrator/impd1.c | 6 + arch/arm/mach-omap2/omap-wakeupgen.c | 36 +++++++++ arch/arm64/boot/dts/rockchip/rk3328-rock64.dts | 2 arch/csky/include/asm/io.h | 25 ++++++ arch/csky/kernel/module.c | 38 ++++++---- arch/powerpc/include/asm/book3s/64/pgtable.h | 4 - arch/riscv/include/asm/pgtable-bits.h | 6 + arch/riscv/include/asm/pgtable.h | 8 +- arch/riscv/kernel/ptrace.c | 2 arch/s390/kernel/swsusp.S | 4 - arch/x86/events/core.c | 14 +++ arch/x86/events/intel/core.c | 9 ++ arch/x86/events/perf_event.h | 16 +++- arch/x86/ia32/ia32_aout.c | 6 + arch/x86/include/asm/uv/bios.h | 8 +- arch/x86/kvm/svm.c | 3 arch/x86/kvm/vmx.c | 11 +-- arch/x86/platform/uv/bios_uv.c | 23 +++++- block/blk-flush.c | 2 drivers/acpi/numa.c | 6 - drivers/cpufreq/cpufreq.c | 12 +-- drivers/crypto/ccree/cc_driver.c | 7 + drivers/crypto/ccree/cc_pm.c | 13 +-- drivers/crypto/ccree/cc_pm.h | 3 drivers/firmware/efi/runtime-wrappers.c | 7 + drivers/gpio/gpio-mxc.c | 41 ++++++----- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 8 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 3 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 10 +- drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c | 2 drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 3 drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c | 14 +++ drivers/gpu/drm/bridge/tc358767.c | 45 +++++++++--- drivers/gpu/drm/drm_lease.c | 3 drivers/gpu/drm/i915/i915_gem.c | 12 +++ drivers/gpu/drm/i915/intel_drv.h | 10 ++ drivers/gpu/drm/i915/intel_fbdev.c | 33 ++++++++- drivers/gpu/drm/nouveau/nvkm/engine/falcon.c | 7 + drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c | 7 + drivers/gpu/drm/scheduler/sched_entity.c | 7 - drivers/gpu/drm/vkms/vkms_crc.c | 3 drivers/gpu/drm/vkms/vkms_crtc.c | 8 -- drivers/gpu/drm/vkms/vkms_drv.c | 7 - drivers/gpu/drm/vkms/vkms_drv.h | 2 drivers/gpu/drm/vkms/vkms_gem.c | 8 -- drivers/gpu/drm/vkms/vkms_output.c | 8 -- drivers/gpu/drm/vkms/vkms_plane.c | 8 -- drivers/input/misc/bma150.c | 9 +- drivers/input/mouse/elan_i2c_core.c | 2 drivers/input/mouse/elantech.c | 9 ++ drivers/irqchip/irq-csky-apb-intc.c | 77 +++++++++++---------- drivers/md/dm-crypt.c | 2 drivers/md/dm-thin.c | 55 +++++++++++++-- drivers/md/raid1.c | 28 ++++--- drivers/misc/eeprom/Kconfig | 2 drivers/misc/eeprom/at24.c | 3 drivers/mmc/core/block.c | 10 ++ drivers/mmc/host/sunxi-mmc.c | 26 ++++++- drivers/nvme/host/core.c | 18 ++-- drivers/nvme/host/multipath.c | 2 drivers/nvme/host/nvme.h | 5 + drivers/nvme/host/pci.c | 16 +++- drivers/s390/crypto/ap_bus.c | 3 drivers/scsi/sd.c | 12 ++- drivers/soc/renesas/r8a774c0-sysc.c | 23 +----- fs/cifs/cifsglob.h | 20 +++++ fs/cifs/cifssmb.c | 7 + fs/cifs/file.c | 37 ++++++++-- fs/cifs/inode.c | 10 ++ fs/cifs/smb2file.c | 4 + fs/cifs/smb2inode.c | 17 ++++ fs/cifs/smb2ops.c | 6 + fs/cifs/smb2pdu.c | 15 +++- fs/cifs/transport.c | 58 ++++++++++++--- fs/inode.c | 7 - fs/nfsd/nfsctl.c | 4 - fs/proc/task_mmu.c | 22 +++--- include/linux/mmc/card.h | 1 include/linux/perf_event.h | 5 + kernel/events/core.c | 16 ++++ kernel/events/ring_buffer.c | 2 kernel/signal.c | 7 + kernel/trace/trace_probe_tmpl.h | 6 + mm/vmscan.c | 10 -- net/sunrpc/auth_gss/gss_krb5_seqnum.c | 49 ++++++++++--- sound/core/pcm_lib.c | 20 +---- sound/pci/hda/patch_conexant.c | 1 sound/soc/codecs/hdmi-codec.c | 4 - sound/usb/pcm.c | 9 ++ tools/arch/riscv/include/uapi/asm/bitsperlong.h | 25 ++++++ tools/include/uapi/asm/bitsperlong.h | 4 + tools/perf/builtin-stat.c | 3 tools/perf/tests/shell/lib/probe_vfs_getname.sh | 3 tools/perf/util/callchain.c | 32 +++++--- tools/perf/util/callchain.h | 1 tools/perf/util/machine.c | 2 105 files changed, 972 insertions(+), 362 deletions(-)
Adrian Bunk (2):
dt-bindings: eeprom: at24: add "atmel,24c2048" compatible string
eeprom: at24: add support for 24c2048
Andreas Ziegler (1):
tracing: probeevent: Correctly update remaining space in dynamic area
Anson Huang (1):
gpio: mxc: move gpio noirq suspend/resume to syscore phase
Arnaldo Carvalho de Melo (1):
perf test shell: Use a fallback to get the pathname in vfs_getname
Aurelien Jarno (1):
tools uapi: fix RISC-V 64-bit support
Biju Das (1):
soc: renesas: r8a774c0-sysc: Fix initialization order of 3DG-{A,B}Bob Tracy (1):
tools uapi: fix Alpha support
Borislav Petkov (1):
x86/a.out: Clear the dump structure initially
Chao Fan (1):
ACPI: NUMA: Use correct type for printing addresses on i386-PAE
Chen-Yu Tsai (2):
mmc: sunxi: Disable HS-DDR mode for H5 eMMC controller by default
mmc: sunxi: Filter out unsupported modes declared in the device tree
Christian König (1):
drm/amdgpu: disable system memory page tables for now
Dave Chinner (2):
Revert "mm: don't reclaim inodes with many attached pages" Revert "mm: slowly shrink slabs with a relatively small number of objects"
David Abdurachmanov (1):
riscv: fix trace_sys_exit hook
David Rientjes (1):
kvm: sev: Fail KVM_SEV_INIT if already initialized
Dmitry Torokhov (1):
Revert "Input: elan_i2c - add ACPI ID for touchpad in ASUS Aspire F5-573G"
Dmitry Voytik (1):
arm64: dts: rockchip: enable usb-host regulators at boot on rk3328-rock64
Emily Deng (1):
drm/amdgpu/sriov:Correct pfvf exchange logic
Eric Anholt (1):
drm/sched: Always trace the dependencies we wait on, to fix a race.
Eric W. Biederman (1):
signal: Restore the stop PTRACE_EVENT_EXIT
Evan Quan (1):
drm/amd/powerplay: avoid possible buffer overflow
Gilad Ben-Yossef (1):
crypto: ccree - fix resume race condition on init
Greg Kroah-Hartman (1):
Linux 4.20.11
Guo Ren (4):
csky: fixup relocation error with 807 & 860
csky: fixup CACHEV1 store instruction fast retire irqchip/csky: fixup handle_irq_perbit break irq
csky: fixup compile error with CPU 810.
Hannes Reinecke (1):
nvme-multipath: zero out ANA log buffer
Harald Freudenberger (1):
s390/zcrypt: fix specification exception on z196 during ap probe
Hedi Berriche (1):
x86/platform/UV: Use efi_runtime_lock to serialise BIOS calls
Hongbo Yao (1):
nvme-pci: fix out of bounds access in nvme_cqe_pending
Ilia Mirkin (1):
drm/nouveau/falcon: avoid touching registers if engine is off
Ingo Molnar (1):
perf/core: Fix impossible ring-buffer sizes warning
J. Bruce Fields (1):
Revert "nfsd4: return default lease period"
James Bottomley (1):
scsi: sd: fix entropy gathering for most rotational disks
James Dingwall (1):
nvme: introduce NVME_QUIRK_IGNORE_DEV_SUBNQN
Jianchao Wang (1):
blk-mq: fix a hung issue when fsync
Jim Qu (1):
drm/amdgpu: set WRITE_BURST_LENGTH to 64B to workaround SDMA1 hang
Jin Yao (2):
perf stat: Fix endless wait for child process perf report: Fix wrong iteration count in --branch-history
Jiri Olsa (1):
perf/x86: Add check_period PMU callback
Jonathan Bakker (1):
Input: bma150 - register input device after setting private data
Joonas Lahtinen (1):
drm/i915: Prevent a race during I915_GEM_MMAP ioctl with WC set
Jurica Vukadin (1):
ALSA: hda - Add quirk for HP EliteBook 840 G5
Keith Busch (1):
nvme: pad fake subsys NQN vid and ssvid with zeros
Linus Walleij (1):
ARM: dts: kirkwood: Fix polarity of GPIO fan lines
Liviu Dudau (1):
nvme-pci: use the same attributes when freeing host_mem_desc_bufs.
Lyude Paul (1):
drm/i915: Block fbdev HPD processing during suspend
Manuel Reinhardt (1):
ALSA: usb-audio: Fix implicit fb endpoint setup by quirk
Martin Schwidefsky (1):
s390/suspend: fix stack setup in swsusp_arch_suspend
Matthew Wilcox (1):
drm: Use array_size() when creating lease
Matti Kurkela (1):
Input: elantech - enable 3rd button support on Fujitsu CELSIUS H780
Mauro Ciancio (1):
Input: elan_i2c - add ACPI ID for touchpad in Lenovo V330-15ISK
Meelis Roos (1):
alpha: Fix Eiger NR_IRQS to 128
Michael Ellerman (1):
powerpc/64s: Fix possible corruption on big endian due to pgd/pud_present()
Mikulas Patocka (1):
dm crypt: don't overallocate the integrity tag space
Nate Dailey (1):
md/raid1: don't clear bitmap bits on interrupted recovery.
Nicholas Mc Guire (1):
gpio: pl061: handle failed allocations
Nikos Tsironis (1):
dm thin: fix bug where bio that overwrites thin block ignores FUA
Pavel Shilovsky (6):
CIFS: Fix credits calculation for cancelled requests
CIFS: Move credit processing to mid callbacks for SMB3
CIFS: Fix error paths in writeback code
CIFS: Fix credit calculations in compound mid callback
CIFS: Do not assume one credit for async responses
CIFS: Fix mounts if the client is low on credits
Peter Ujfalusi (4):
ARM: dts: da850-evm: Correct the audio codec regulators
ARM: dts: da850-evm: Correct the sound card name
ARM: dts: da850-lcdk: Correct the audio codec regulators
ARM: dts: da850-lcdk: Correct the sound card name
Rodrigo Siqueira (1):
drm/vkms: Fix license inconsistent
Ross Lagerwall (1):
cifs: Limit memory used by lock request calls to a page
Russell King (1):
ASoC: hdmi-codec: fix oops on re-probe
Sandeep Patil (1):
mm: proc: smaps_rollup: fix pss_locked calculation
Scott Mayhew (1):
sunrpc: fix 4 more call sites that were using stack memory with a scatterlist
Sergei Trofimovich (1):
alpha: fix page fault handling for r16-r18 targets
Stefan O'Rear (1):
riscv: Add pte bit to distinguish swap from invalid
Sudeep Holla (1):
cpufreq: check if policy is inactive early in __cpufreq_get()
Takashi Iwai (2):
drm/nouveau: Don't disable polling in fallback mode
ALSA: pcm: Revert capture stream behavior change in blocking mode
Tao Zhou (1):
drm/amdgpu: fix CPDMA hang in PRT mode for VEGA20
Tomi Valkeinen (6):
drm/bridge: tc358767: add bus flags
drm/bridge: tc358767: add defines for DP1_SRCCTRL & PHY_2LANE drm/bridge: tc358767: fix single lane configuration drm/bridge: tc358767: fix initial DP0/1_SRCCTRL value drm/bridge: tc358767: reject modes which require too much BW drm/bridge: tc358767: fix output H/V syncs
Tony Lindgren (1):
ARM: OMAP5+: Fix inverted nirq pin interrupts with irq_set_type
Vitaly Kuznetsov (1):
x86/kvm/nVMX: read from MSR_IA32_VMX_PROCBASED_CTLS2 only when it is available
Xiaoyao Li (1):
kvm: vmx: Fix entry number check for add_atomic_switch_msr()
Zachary Hays (1):
mmc: block: handle complete_work on separate workqueue
Greg KH
maintainerDocumentation/devicetree/bindings/eeprom/at24.txt +1 -0
@@ -27,6 +27,7 @@ Required properties: "atmel,24c256", "atmel,24c512", "atmel,24c1024", + "atmel,24c2048", If <manufacturer> is not "atmel", then a fallback must be used with the same <model> and "atmel" as manufacturer.
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 20 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Shy Crocodile
arch/alpha/include/asm/irq.h +3 -3
@@ -56,15 +56,15 @@#elif defined(CONFIG_ALPHA_DP264 ) || \ defined(CONFIG_ALPHA_LYNX ) || \ - defined(CONFIG_ALPHA_SHARK ) || \ - defined(CONFIG_ALPHA_EIGER ) + defined(CONFIG_ALPHA_SHARK )# define NR_IRQS 64#elif defined(CONFIG_ALPHA_TITAN )#define NR_IRQS 80#elif defined(CONFIG_ALPHA_RAWHIDE ) || \ - defined(CONFIG_ALPHA_TAKARA ) + defined(CONFIG_ALPHA_TAKARA ) || \ + defined(CONFIG_ALPHA_EIGER )# define NR_IRQS 128#elif defined(CONFIG_ALPHA_WILDFIRE )
arch/alpha/mm/fault.c +1 -1
@@ -78,7 +78,7 @@ __load_new_mm_context(struct mm_struct *next_mm)/* Macro for exception fixup code to access integer registers. */ #define dpf_reg (r) \ (((unsigned long *)regs)[(r) <= 8 ? (r) : (r) <= 15 ? (r)-16 : \ - (r) <= 18 ? (r)+8 : (r)-10]) + (r) <= 18 ? (r)+10 : (r)-10]) asmlinkage void do_page_fault(unsigned long address, unsigned long mmcsr,
arch/arm/boot/dts/da850-evm.dts +26 -5
@@ -94,6 +94,28 @@ regulator-boot-on; }; + baseboard_3v3: fixedregulator-3v3 { + /* TPS73701DCQ */ + compatible = "regulator-fixed"; + regulator-name = "baseboard_3v3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vbat>; + regulator-always-on; + regulator-boot-on; + }; + + baseboard_1v8: fixedregulator-1v8 { + /* TPS73701DCQ */ + compatible = "regulator-fixed"; + regulator-name = "baseboard_1v8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + vin-supply = <&vbat>; + regulator-always-on; + regulator-boot-on; + }; + backlight_lcd: backlight-regulator { compatible = "regulator-fixed"; regulator-name = "lcd_backlight_pwr";
@@ -105,7 +127,7 @@ sound { compatible = "simple-audio-card"; - simple-audio-card,name = "DA850/OMAP-L138 EVM"; + simple-audio-card,name = "DA850-OMAPL138 EVM"; simple-audio-card,widgets = "Line", "Line In", "Line", "Line Out";
@@ -210,10 +232,9 @@ /* Regulators */ IOVDD-supply = <&vdcdc2_reg>; - /* Derived from VBAT: Baseboard 3.3V / 1.8V */ - AVDD-supply = <&vbat>; - DRVDD-supply = <&vbat>; - DVDD-supply = <&vbat>; + AVDD-supply = <&baseboard_3v3>; + DRVDD-supply = <&baseboard_3v3>; + DVDD-supply = <&baseboard_1v8>; }; tca6416: gpio@20 { compatible = "ti,tca6416";
arch/arm/boot/dts/da850-lcdk.dts +37 -1
@@ -39,9 +39,39 @@ }; }; + vcc_5vd: fixedregulator-vcc_5vd { + compatible = "regulator-fixed"; + regulator-name = "vcc_5vd"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-boot-on; + }; + + vcc_3v3d: fixedregulator-vcc_3v3d { + /* TPS650250 - VDCDC1 */ + compatible = "regulator-fixed"; + regulator-name = "vcc_3v3d"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vcc_5vd>; + regulator-always-on; + regulator-boot-on; + }; + + vcc_1v8d: fixedregulator-vcc_1v8d { + /* TPS650250 - VDCDC2 */ + compatible = "regulator-fixed"; + regulator-name = "vcc_1v8d"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + vin-supply = <&vcc_5vd>; + regulator-always-on; + regulator-boot-on; + }; + sound { compatible = "simple-audio-card"; - simple-audio-card,name = "DA850/OMAP-L138 LCDK"; + simple-audio-card,name = "DA850-OMAPL138 LCDK"; simple-audio-card,widgets = "Line", "Line In", "Line", "Line Out";
@@ -221,6 +251,12 @@ compatible = "ti,tlv320aic3106"; reg = <0x18>; status = "okay"; + + /* Regulators */ + IOVDD-supply = <&vcc_3v3d>; + AVDD-supply = <&vcc_3v3d>; + DRVDD-supply = <&vcc_3v3d>; + DVDD-supply = <&vcc_1v8d>; }; };
arch/arm/boot/dts/kirkwood-dnskw.dtsi +2 -2
@@ -36,8 +36,8 @@ compatible = "gpio-fan"; pinctrl-0 = <&pmx_fan_high_speed &pmx_fan_low_speed>; pinctrl-names = "default"; - gpios = <&gpio1 14 GPIO_ACTIVE_LOW - &gpio1 13 GPIO_ACTIVE_LOW>; + gpios = <&gpio1 14 GPIO_ACTIVE_HIGH + &gpio1 13 GPIO_ACTIVE_HIGH>; gpio-fan,speed-map = <0 0 3000 1 6000 2>;
arch/arm/boot/dts/omap5-board-common.dtsi +6 -3
@@ -317,7 +317,8 @@ palmas_sys_nirq_pins: pinmux_palmas_sys_nirq_pins { pinctrl-single,pins = < - OMAP5_IOPAD(0x068, PIN_INPUT_PULLUP | MUX_MODE0) /* sys_nirq1 */ + /* sys_nirq1 is pulled down as the SoC is inverting it for GIC */ + OMAP5_IOPAD(0x068, PIN_INPUT_PULLUP | MUX_MODE0) >; };
@@ -385,7 +386,8 @@ palmas: palmas@48 { compatible = "ti,palmas"; - interrupts = <GIC_SPI 7 IRQ_TYPE_NONE>; /* IRQ_SYS_1N */ + /* sys_nirq/ext_sys_irq pins get inverted at mpuss wakeupgen */ + interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_LOW>; reg = <0x48>; interrupt-controller; #interrupt-cells = <2>;
@@ -651,7 +653,8 @@ pinctrl-names = "default"; pinctrl-0 = <&twl6040_pins>; - interrupts = <GIC_SPI 119 IRQ_TYPE_NONE>; /* IRQ_SYS_2N cascaded to gic */ + /* sys_nirq/ext_sys_irq pins get inverted at mpuss wakeupgen */ + interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_LOW>; /* audpwron gpio defined in the board specific dts */
arch/arm/boot/dts/omap5-cm-t54.dts +11 -1
@@ -181,6 +181,13 @@ OMAP5_IOPAD(0x0042, PIN_INPUT_PULLDOWN | MUX_MODE6) /* llib_wakereqin.gpio1_wk15 */ >; }; + + palmas_sys_nirq_pins: pinmux_palmas_sys_nirq_pins { + pinctrl-single,pins = < + /* sys_nirq1 is pulled down as the SoC is inverting it for GIC */ + OMAP5_IOPAD(0x068, PIN_INPUT_PULLUP | MUX_MODE0) + >; + }; }; &omap5_pmx_core {
@@ -414,8 +421,11 @@ palmas: palmas@48 { compatible = "ti,palmas"; - interrupts = <GIC_SPI 7 IRQ_TYPE_NONE>; /* IRQ_SYS_1N */ reg = <0x48>; + pinctrl-0 = <&palmas_sys_nirq_pins>; + pinctrl-names = "default"; + /* sys_nirq/ext_sys_irq pins get inverted at mpuss wakeupgen */ + interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_LOW>; interrupt-controller; #interrupt-cells = <2>; ti,system-power-controller;
arch/arm/mach-integrator/impd1.c +5 -1
@@ -393,7 +393,11 @@ static int __ref impd1_probe(struct lm_device *dev)sizeof (*lookup) +3 *sizeof (struct gpiod_lookup ), GFP_KERNEL); chipname =devm_kstrdup (&dev->dev, devname,GFP_KERNEL ); - mmciname =kasprintf (GFP_KERNEL ,"lm%x:00700" , dev->id); + mmciname =devm_kasprintf (&dev->dev,GFP_KERNEL , +"lm%x:00700" , dev->id); +if (!lookup || !chipname || !mmciname) +return -ENOMEM ; + lookup->dev_id = mmciname;/* * Offsets on GPIO block 1:
arch/arm/mach-omap2/omap-wakeupgen.c +35 -1
@@ -50,6 +50,9 @@#define OMAP4_NR_BANKS 4#define OMAP4_NR_IRQS 128 +#define SYS_NIRQ1_EXT_SYS_IRQ_1 7 +#define SYS_NIRQ2_EXT_SYS_IRQ_2 119 +static void __iomem *wakeupgen_base;static void __iomem *sar_base;static DEFINE_RAW_SPINLOCK (wakeupgen_lock);
@@ -153,6 +156,37 @@ static void wakeupgen_unmask(struct irq_data *d)irq_chip_unmask_parent (d); } +/* +* The sys_nirq pins bypass peripheral modules and are wired directly +* to MPUSS wakeupgen. They get automatically inverted for GIC. +*/ +static int wakeupgen_irq_set_type (struct irq_data *d,unsigned int type) +{ +bool inverted = false; + +switch (type) { +case IRQ_TYPE_LEVEL_LOW : + type &= ~IRQ_TYPE_LEVEL_MASK ; + type |=IRQ_TYPE_LEVEL_HIGH ; + inverted = true; +break ; +case IRQ_TYPE_EDGE_FALLING : + type &= ~IRQ_TYPE_EDGE_BOTH ; + type |=IRQ_TYPE_EDGE_RISING ; + inverted = true; +break ; +default : +break ; + } + +if (inverted && d->hwirq !=SYS_NIRQ1_EXT_SYS_IRQ_1 && + d->hwirq !=SYS_NIRQ2_EXT_SYS_IRQ_2 ) +pr_warn ("wakeupgen: irq%li polarity inverted in dts\n" , + d->hwirq); + +return irq_chip_set_type_parent (d, type); +} +#ifdef CONFIG_HOTPLUG_CPU static DEFINE_PER_CPU(u32 [MAX_NR_REG_BANKS], irqmasks);
@@ -446,7 +480,7 @@ static struct irq_chip wakeupgen_chip = { .irq_mask = wakeupgen_mask, .irq_unmask = wakeupgen_unmask, .irq_retrigger = irq_chip_retrigger_hierarchy, - .irq_set_type = irq_chip_set_type_parent, + .irq_set_type = wakeupgen_irq_set_type, .flags =IRQCHIP_SKIP_SET_WAKE |IRQCHIP_MASK_ON_SUSPEND , #ifdef CONFIG_SMP .irq_set_affinity = irq_chip_set_affinity_parent,
arch/arm64/boot/dts/rockchip/rk3328-rock64.dts +2 -0
@@ -40,6 +40,7 @@ pinctrl-0 = <&usb30_host_drv>; regulator-name = "vcc_host_5v"; regulator-always-on; + regulator-boot-on; vin-supply = <&vcc_sys>; };
@@ -51,6 +52,7 @@ pinctrl-0 = <&usb20_host_drv>; regulator-name = "vcc_host1_5v"; regulator-always-on; + regulator-boot-on; vin-supply = <&vcc_sys>; };
arch/csky/include/asm/io.h +25 -0
@@ -15,6 +15,31 @@ extern void iounmap(void *addr);extern int remap_area_pages (unsigned long address,phys_addr_t phys_addr,size_t size,unsigned long flags); +/* +* I/O memory access primitives. Reads are ordered relative to any +* following Normal memory access. Writes are ordered relative to any prior +* Normal memory access. +* +* For CACHEV1 (807, 810), store instruction could fast retire, so we need +* another mb() to prevent st fast retire. +* +* For CACHEV2 (860), store instruction with PAGE_ATTR_NO_BUFFERABLE won't +* fast retire. +*/ +#define readb (c) ({ u8 __v = readb_relaxed(c); rmb(); __v; }) +#define readw (c) ({ u16 __v = readw_relaxed(c); rmb(); __v; }) +#define readl (c) ({ u32 __v = readl_relaxed(c); rmb(); __v; }) + +#ifdef CONFIG_CPU_HAS_CACHEV2 +#define writeb (v,c) ({ wmb(); writeb_relaxed((v),(c)); }) +#define writew (v,c) ({ wmb(); writew_relaxed((v),(c)); }) +#define writel (v,c) ({ wmb(); writel_relaxed((v),(c)); }) +#else +#define writeb (v,c) ({ wmb(); writeb_relaxed((v),(c)); mb(); }) +#define writew (v,c) ({ wmb(); writew_relaxed((v),(c)); mb(); }) +#define writel (v,c) ({ wmb(); writel_relaxed((v),(c)); mb(); }) +#endif +#define ioremap_nocache (phy, sz) ioremap(phy, sz)#define ioremap_wc ioremap_nocache#define ioremap_wt ioremap_nocache
arch/csky/kernel/module.c +22 -16
@@ -12,7 +12,7 @@#include <linux/spinlock.h> #include <asm/pgtable.h> -#if defined(__CSKYABIV2__) +#ifdef CONFIG_CPU_CK810 #define IS_BSR32 (hi16, lo16) (((hi16) & 0xFC00) == 0xE000)#define IS_JSRI32 (hi16, lo16) ((hi16) == 0xEAE0)
@@ -25,6 +25,26 @@ *(uint16_t *)(addr) =0xE8Fa ; \ *((uint16_t *)(addr) +1 ) =0x0000 ; \ } while (0) + +static void jsri_2_lrw_jsr(uint32_t *location) +{ +uint16_t *location_tmp = (uint16_t *)location; + +if (IS_BSR32 (*location_tmp, *(location_tmp +1 ))) +return ; + +if (IS_JSRI32 (*location_tmp, *(location_tmp +1 ))) { +/* jsri 0x... --> lrw r26, 0x... */ +CHANGE_JSRI_TO_LRW (location); +/* lsli r0, r0 --> jsr r26 */ +SET_JSR32_R26 (location +1 ); + } +} +#else +static void inline jsri_2_lrw_jsr (uint32_t *location) +{ +return ; +}#endif int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab,
@@ -35,9 +55,6 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab,Elf32_Sym *sym;uint32_t *location;short *temp; -#if defined(__CSKYABIV2__) -uint16_t *location_tmp; -#endif for (i =0 ; i < sechdrs[relsec].sh_size /sizeof (*rel); i++) {/* This is where to make the change */
@@ -59,18 +76,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab,case R_CSKY_PCRELJSR_IMM11BY2 :break ;case R_CSKY_PCRELJSR_IMM26BY2 : -#if defined(__CSKYABIV2__) - location_tmp = (uint16_t *)location; -if (IS_BSR32 (*location_tmp, *(location_tmp +1 ))) -break ; - -if (IS_JSRI32 (*location_tmp, *(location_tmp +1 ))) { -/* jsri 0x... --> lrw r26, 0x... */ -CHANGE_JSRI_TO_LRW (location); -/* lsli r0, r0 --> jsr r26 */ -SET_JSR32_R26 (location +1 ); - } -#endif +jsri_2_lrw_jsr (location);break ;case R_CSKY_ADDR_HI16 : temp = ((short *)location) +1 ;
arch/powerpc/include/asm/book3s/64/pgtable.h +2 -2
@@ -904,7 +904,7 @@ static inline int pud_none(pud_t pud)static inline int pud_present (pud_t pud) { -return (pud_raw (pud) &cpu_to_be64 (_PAGE_PRESENT)); +return !!(pud_raw (pud) &cpu_to_be64 (_PAGE_PRESENT)); }extern struct page *pud_page (pud_t pud);
@@ -951,7 +951,7 @@ static inline int pgd_none(pgd_t pgd)static inline int pgd_present (pgd_t pgd) { -return (pgd_raw (pgd) &cpu_to_be64 (_PAGE_PRESENT)); +return !!(pgd_raw (pgd) &cpu_to_be64 (_PAGE_PRESENT)); }static inline pte_t pgd_pte (pgd_t pgd)
arch/riscv/include/asm/pgtable-bits.h +6 -0
@@ -35,6 +35,12 @@#define _PAGE_SPECIAL _PAGE_SOFT#define _PAGE_TABLE _PAGE_PRESENT +/* +* _PAGE_PROT_NONE is set on not-present pages (and ignored by the hardware) to +* distinguish them from swapped out pages +*/ +#define _PAGE_PROT_NONE _PAGE_READ +#define _PAGE_PFN_SHIFT 10/* Set of bits to preserve across pte_modify() */
arch/riscv/include/asm/pgtable.h +4 -4
@@ -44,7 +44,7 @@/* Page protection bits */ #define _PAGE_BASE (_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_USER) -#define PAGE_NONE __pgprot(0) +#define PAGE_NONE __pgprot(_PAGE_PROT_NONE)#define PAGE_READ __pgprot(_PAGE_BASE | _PAGE_READ)#define PAGE_WRITE __pgprot(_PAGE_BASE | _PAGE_READ | _PAGE_WRITE)#define PAGE_EXEC __pgprot(_PAGE_BASE | _PAGE_EXEC)
@@ -98,7 +98,7 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];static inline int pmd_present (pmd_t pmd) { -return (pmd_val (pmd) & _PAGE_PRESENT); +return (pmd_val (pmd) & (_PAGE_PRESENT | _PAGE_PROT_NONE)); }static inline int pmd_none (pmd_t pmd)
@@ -178,7 +178,7 @@ static inline pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long addr)static inline int pte_present (pte_t pte) { -return (pte_val (pte) & _PAGE_PRESENT); +return (pte_val (pte) & (_PAGE_PRESENT | _PAGE_PROT_NONE)); }static inline int pte_none (pte_t pte)
@@ -380,7 +380,7 @@ static inline int ptep_clear_flush_young(struct vm_area_struct *vma,* * Format of swap PTE: * bit 0: _PAGE_PRESENT (zero) -* bit 1: reserved for future use (zero) +* bit 1: _PAGE_PROT_NONE (zero) * bits 2 to 6: swap type * bits 7 to XLEN-1: swap offset */
arch/riscv/kernel/ptrace.c +1 -1
@@ -172,6 +172,6 @@ void do_syscall_trace_exit(struct pt_regs *regs)#ifdef CONFIG_HAVE_SYSCALL_TRACEPOINTS if (test_thread_flag (TIF_SYSCALL_TRACEPOINT )) -trace_sys_exit (regs, regs->regs[0 ]); +trace_sys_exit (regs,regs_return_value (regs));#endif }
arch/s390/kernel/swsusp.S +2 -2
@@ -30,10 +30,10 @@ .section .text ENTRY(swsusp_arch_suspend) lg %r1,__LC_NODAT_STACK - aghi %r1,-STACK_FRAME_OVERHEAD stmg %r6,%r15,__SF_GPRS(%r1) + aghi %r1,-STACK_FRAME_OVERHEAD stg %r15,__SF_BACKCHAIN(%r1) - lgr %r1,%r15 + lgr %r15,%r1 /* Store FPU registers */ brasl %r14,save_fpu_regs
arch/x86/events/core.c +14 -0
@@ -2278,6 +2278,19 @@ void perf_check_microcode(void) x86_pmu.check_microcode (); } +static int x86_pmu_check_period (struct perf_event *event,u64 value) +{ +if (x86_pmu.check_period && x86_pmu.check_period (event, value)) +return -EINVAL ; + +if (value && x86_pmu.limit_period) { +if (x86_pmu.limit_period (event, value) > value) +return -EINVAL ; + } + +return 0 ; +} +static struct pmu pmu = { .pmu_enable = x86_pmu_enable, .pmu_disable = x86_pmu_disable,
@@ -2302,6 +2315,7 @@ static struct pmu pmu = { .event_idx = x86_pmu_event_idx, .sched_task = x86_pmu_sched_task, .task_ctx_size = sizeof(struct x86_perf_task_context), + .check_period = x86_pmu_check_period, }; void arch_perf_update_userpage(struct perf_event *event,
arch/x86/events/intel/core.c +9 -0
@@ -3587,6 +3587,11 @@ static void intel_pmu_sched_task(struct perf_event_context *ctx,intel_pmu_lbr_sched_task (ctx, sched_in); } +static int intel_pmu_check_period (struct perf_event *event,u64 value) +{ +return intel_pmu_has_bts_period (event, value) ? -EINVAL :0 ; +} +PMU_FORMAT_ATTR (offcore_rsp,"config1:0-63" );PMU_FORMAT_ATTR (ldlat,"config1:0-15" );
@@ -3667,6 +3672,8 @@ static __initconst const struct x86_pmu core_pmu = { .cpu_starting = intel_pmu_cpu_starting, .cpu_dying = intel_pmu_cpu_dying, .cpu_dead = intel_pmu_cpu_dead, + + .check_period = intel_pmu_check_period, };static struct attribute *intel_pmu_attrs[];
@@ -3711,6 +3718,8 @@ static __initconst const struct x86_pmu intel_pmu = { .guest_get_msrs = intel_guest_get_msrs, .sched_task = intel_pmu_sched_task, + + .check_period = intel_pmu_check_period, };static __init void intel_clovertown_quirk (void )
arch/x86/events/perf_event.h +14 -2
@@ -646,6 +646,11 @@ struct x86_pmu {* Intel host/guest support (KVM) */ struct perf_guest_switch_msr *(*guest_get_msrs)(int *nr); + +/* +* Check period value for PERF_EVENT_IOC_PERIOD ioctl. +*/ +int (*check_period) (struct perf_event *event,u64 period); };struct x86_perf_task_context {
@@ -857,7 +862,7 @@ static inline int amd_pmu_init(void)#ifdef CONFIG_CPU_SUP_INTEL -static inline bool intel_pmu_has_bts (struct perf_event *event) +static inline bool intel_pmu_has_bts_period (struct perf_event *event,u64 period) {struct hw_perf_event *hwc = &event->hw;unsigned int hw_event, bts_event;
@@ -868,7 +873,14 @@ static inline bool intel_pmu_has_bts(struct perf_event *event) hw_event = hwc->config &INTEL_ARCH_EVENT_MASK ; bts_event = x86_pmu.event_map (PERF_COUNT_HW_BRANCH_INSTRUCTIONS ); -return hw_event == bts_event && hwc->sample_period ==1 ; +return hw_event == bts_event && period ==1 ; +} + +static inline bool intel_pmu_has_bts (struct perf_event *event) +{ +struct hw_perf_event *hwc = &event->hw; + +return intel_pmu_has_bts_period (event, hwc->sample_period); }int intel_pmu_save_and_restart (struct perf_event *event);
arch/x86/ia32/ia32_aout.c +4 -2
@@ -51,7 +51,7 @@ static unsigned long get_dr(int n)/* * fill in the user structure for a core dump.. */ -static void dump_thread32 (struct pt_regs *regs,struct user32 *dump) +static void fill_dump (struct pt_regs *regs,struct user32 *dump) {u32 fs, gs;memset (dump,0 ,sizeof (*dump));
@@ -157,10 +157,12 @@ static int aout_core_dump(struct coredump_params *cprm) fs =get_fs ();set_fs (KERNEL_DS ); has_dumped =1 ; + +fill_dump (cprm->regs, &dump); +strncpy (dump.u_comm, current->comm,sizeof (current->comm)); dump.u_ar0 = offsetof(struct user32 , regs); dump.signal = cprm->siginfo->si_signo; -dump_thread32 (cprm->regs, &dump);/* * If the size of the dump file exceeds the rlimit, then see
arch/x86/include/asm/uv/bios.h +7 -1
@@ -48,7 +48,8 @@ enum {BIOS_STATUS_SUCCESS =0 ,BIOS_STATUS_UNIMPLEMENTED = -ENOSYS ,BIOS_STATUS_EINVAL = -EINVAL , - BIOS_STATUS_UNAVAIL = -EBUSY +BIOS_STATUS_UNAVAIL = -EBUSY , + BIOS_STATUS_ABORT = -EINTR, };/* Address map parameters */
@@ -167,4 +168,9 @@ extern long system_serial_number;extern struct kobject *sgi_uv_kobj;/* /sys/firmware/sgi_uv */ +/* +* EFI runtime lock; cf. firmware/efi/runtime-wrappers.c for details +*/ +extern struct semaphore __efi_uv_runtime_lock; +#endif /* _ASM_X86_UV_BIOS_H */
arch/x86/kvm/svm.c +3 -0
@@ -6255,6 +6255,9 @@ static int sev_guest_init(struct kvm *kvm, struct kvm_sev_cmd *argp)int asid, ret; ret = -EBUSY ; +if (unlikely (sev->active)) +return ret; + asid =sev_asid_new ();if (asid <0 )return ret;
arch/x86/kvm/vmx.c +7 -4
@@ -2779,7 +2779,8 @@ static void add_atomic_switch_msr(struct vcpu_vmx *vmx, unsigned msr,if (!entry_only) j =find_msr (&m->host, msr); -if (i ==NR_AUTOLOAD_MSRS || j ==NR_AUTOLOAD_MSRS ) { +if ((i <0 && m->guest.nr ==NR_AUTOLOAD_MSRS ) || + (j <0 && m->host.nr ==NR_AUTOLOAD_MSRS )) {printk_once (KERN_WARNING "Not enough msr switch entries. " "Can't add msr %x\n" , msr);return ;
@@ -3620,9 +3621,11 @@ static void nested_vmx_setup_ctls_msrs(struct nested_vmx_msrs *msrs, bool apicv)* secondary cpu-based controls. Do not include those that * depend on CPUID bits, they are added later by vmx_cpuid_update. */ -rdmsr (MSR_IA32_VMX_PROCBASED_CTLS2 , - msrs->secondary_ctls_low, - msrs->secondary_ctls_high); +if (msrs->procbased_ctls_high &CPU_BASED_ACTIVATE_SECONDARY_CONTROLS ) +rdmsr (MSR_IA32_VMX_PROCBASED_CTLS2 , + msrs->secondary_ctls_low, + msrs->secondary_ctls_high); + msrs->secondary_ctls_low =0 ; msrs->secondary_ctls_high &= SECONDARY_EXEC_DESC |
arch/x86/platform/uv/bios_uv.c +21 -2
@@ -29,7 +29,8 @@struct uv_systab *uv_systab; -s64 uv_bios_call (enum uv_bios_cmd which,u64 a1,u64 a2,u64 a3,u64 a4,u64 a5) +static s64 __uv_bios_call (enum uv_bios_cmd which,u64 a1,u64 a2,u64 a3, +u64 a4,u64 a5) {struct uv_systab *tab = uv_systab;s64 ret;
@@ -51,6 +52,19 @@ s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)return ret; } + +s64 uv_bios_call (enum uv_bios_cmd which,u64 a1,u64 a2,u64 a3,u64 a4,u64 a5) +{ +s64 ret; + +if (down_interruptible (&__efi_uv_runtime_lock)) +return BIOS_STATUS_ABORT ; + + ret =__uv_bios_call (which, a1, a2, a3, a4, a5); +up (&__efi_uv_runtime_lock); + +return ret; +}EXPORT_SYMBOL_GPL (uv_bios_call); s64 uv_bios_call_irqsave(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
@@ -59,10 +73,15 @@ s64 uv_bios_call_irqsave(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,unsigned long bios_flags;s64 ret; +if (down_interruptible (&__efi_uv_runtime_lock)) +return BIOS_STATUS_ABORT ; +local_irq_save (bios_flags); - ret =uv_bios_call (which, a1, a2, a3, a4, a5); + ret =__uv_bios_call (which, a1, a2, a3, a4, a5);local_irq_restore (bios_flags); +up (&__efi_uv_runtime_lock); +return ret; }
block/blk-flush.c +1 -1
@@ -424,7 +424,7 @@ static void mq_flush_data_end_io(struct request *rq, blk_status_t error)blk_flush_complete_seq (rq, fq,REQ_FSEQ_DATA , error);spin_unlock_irqrestore (&fq->mq_flush_lock, flags); -blk_mq_run_hw_queue (hctx, true); +blk_mq_sched_restart (hctx); }/**
drivers/acpi/numa.c +3 -3
@@ -146,9 +146,9 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header) {struct acpi_srat_mem_affinity *p = (struct acpi_srat_mem_affinity *)header; - pr_debug("SRAT Memory (0x%lx length 0x%lx) in proximity domain %d %s%s%s\n", - (unsigned long)p->base_address, - (unsigned long)p->length, + pr_debug("SRAT Memory (0x%llx length 0x%llx) in proximity domain %d %s%s%s\n", + (unsigned long long)p->base_address, + (unsigned long long)p->length, p->proximity_domain, (p->flags & ACPI_SRAT_MEM_ENABLED) ? "enabled" : "disabled",
drivers/cpufreq/cpufreq.c +4 -8
@@ -1530,17 +1530,16 @@ static unsigned int __cpufreq_get(struct cpufreq_policy *policy) {unsigned int ret_freq =0 ; -if (!cpufreq_driver->get) +if (unlikely (policy_is_inactive (policy)) || !cpufreq_driver->get)return ret_freq; ret_freq = cpufreq_driver->get (policy->cpu);/* -* Updating inactive policies is invalid, so avoid doing that. Also -* if fast frequency switching is used with the given policy, the check +* If fast frequency switching is used with the given policy, the check * against policy->cur is pointless, so skip it in that case too. */ -if (unlikely (policy_is_inactive (policy)) || policy->fast_switch_enabled) +if (policy->fast_switch_enabled)return ret_freq; if (ret_freq && policy->cur &&
@@ -1569,10 +1568,7 @@ unsigned int cpufreq_get(unsigned int cpu)if (policy) {down_read (&policy->rwsem); - -if (!policy_is_inactive (policy)) - ret_freq =__cpufreq_get (policy); - + ret_freq =__cpufreq_get (policy);up_read (&policy->rwsem);cpufreq_cpu_put (policy);
drivers/crypto/ccree/cc_driver.c +4 -3
@@ -364,7 +364,7 @@ static int init_cc_resources(struct platform_device *plat_dev) rc =cc_ivgen_init (new_drvdata);if (rc) {dev_err (dev,"cc_ivgen_init failed\n" ); - goto post_power_mgr_err; + goto post_buf_mgr_err; }/* Allocate crypto algs */
@@ -387,6 +387,9 @@ static int init_cc_resources(struct platform_device *plat_dev) goto post_hash_err; } +/* All set, we can allow autosuspend */ +cc_pm_go (new_drvdata); +/* If we got here and FIPS mode is enabled * it means all FIPS test passed, so let TEE * know we're good.
@@ -401,8 +404,6 @@ static int init_cc_resources(struct platform_device *plat_dev)cc_cipher_free (new_drvdata); post_ivgen_err:cc_ivgen_fini (new_drvdata); -post_power_mgr_err: -cc_pm_fini (new_drvdata); post_buf_mgr_err:cc_buffer_mgr_fini (new_drvdata); post_req_mgr_err:
drivers/crypto/ccree/cc_pm.c +6 -7
@@ -100,20 +100,19 @@ int cc_pm_put_suspend(struct device *dev)int cc_pm_init (struct cc_drvdata *drvdata) { -int rc =0 ;struct device *dev =drvdata_to_dev (drvdata);/* must be before the enabling to avoid resdundent suspending */ pm_runtime_set_autosuspend_delay (dev,CC_SUSPEND_TIMEOUT );pm_runtime_use_autosuspend (dev);/* activate the PM module */ - rc =pm_runtime_set_active (dev); -if (rc) -return rc; -/* enable the PM module*/ -pm_runtime_enable (dev); +return pm_runtime_set_active (dev); +} -return rc; +/* enable the PM module*/ +void cc_pm_go (struct cc_drvdata *drvdata) +{ +pm_runtime_enable (drvdata_to_dev (drvdata)); }void cc_pm_fini (struct cc_drvdata *drvdata)
drivers/crypto/ccree/cc_pm.h +3 -0
@@ -16,6 +16,7 @@extern const struct dev_pm_ops ccree_pm;int cc_pm_init (struct cc_drvdata *drvdata); +void cc_pm_go (struct cc_drvdata *drvdata);void cc_pm_fini (struct cc_drvdata *drvdata);int cc_pm_suspend (struct device *dev);int cc_pm_resume (struct device *dev);
@@ -29,6 +30,8 @@ static inline int cc_pm_init(struct cc_drvdata *drvdata)return 0 ; } +static void cc_pm_go (struct cc_drvdata *drvdata) {} +static inline void cc_pm_fini (struct cc_drvdata *drvdata) {}static inline int cc_pm_suspend (struct device *dev)
drivers/firmware/efi/runtime-wrappers.c +7 -0
@@ -146,6 +146,13 @@ void efi_call_virt_check_flags(unsigned long flags, const char *call)*/ static DEFINE_SEMAPHORE (efi_runtime_lock); +/* +* Expose the EFI runtime lock to the UV platform +*/ +#ifdef CONFIG_X86_UV +extern struct semaphore __efi_uv_runtime_lock __alias(efi_runtime_lock); +#endif +/* * Calls the appropriate efi_runtime_service() with the appropriate * arguments.
drivers/gpio/gpio-mxc.c +24 -17
76 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +4 -4
@@ -1684,8 +1684,10 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)amdgpu_xgmi_add_device (adev);amdgpu_amdkfd_device_init (adev); -if (amdgpu_sriov_vf (adev)) +if (amdgpu_sriov_vf (adev)) { +amdgpu_virt_init_data_exchange (adev);amdgpu_virt_release_full_gpu (adev, true); + }return 0 ; }
@@ -2597,9 +2599,6 @@ int amdgpu_device_init(struct amdgpu_device *adev, goto failed; } -if (amdgpu_sriov_vf (adev)) -amdgpu_virt_init_data_exchange (adev); -amdgpu_fbdev_init (adev); r =amdgpu_pm_sysfs_init (adev);
@@ -3271,6 +3270,7 @@ static int amdgpu_device_reset_sriov(struct amdgpu_device *adev, r =amdgpu_ib_ring_tests (adev); error: +amdgpu_virt_init_data_exchange (adev);amdgpu_virt_release_full_gpu (adev, true);if (!r && adev->virt.gim_feature &AMDGIM_FEATURE_GIM_FLR_VRAMLOST ) {atomic_inc (&adev->vram_lost_counter);
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +0 -3
@@ -850,9 +850,6 @@ static void amdgpu_vm_bo_param(struct amdgpu_device *adev, struct amdgpu_vm *vm, bp->size =amdgpu_vm_bo_size (adev, level); bp->byte_align =AMDGPU_GPU_PAGE_SIZE ; bp->domain =AMDGPU_GEM_DOMAIN_VRAM ; -if (bp->size <=PAGE_SIZE && adev->asic_type >=CHIP_VEGA10 && - adev->flags &AMD_IS_APU ) - bp->domain |=AMDGPU_GEM_DOMAIN_GTT ; bp->domain =amdgpu_bo_get_preferred_pin_domain (adev, bp->domain); bp->flags =AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |AMDGPU_GEM_CREATE_CPU_GTT_USWC ;
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +5 -5
@@ -112,7 +112,10 @@ static const struct soc15_reg_golden golden_settings_gc_9_0[] =SOC15_REG_GOLDEN_VALUE (GC ,0 , mmTCP_CHAN_STEER_HI,0xffffffff ,0x4a2c0e68 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmTCP_CHAN_STEER_LO,0xffffffff ,0xb5d3f197 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmVGT_CACHE_INVALIDATION,0x3fff3af3 ,0x19200000 ), -SOC15_REG_GOLDEN_VALUE (GC ,0 , mmVGT_GS_MAX_WAVE_ID,0x00000fff ,0x000003ff ) +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmVGT_GS_MAX_WAVE_ID,0x00000fff ,0x000003ff ), +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmCP_MEC1_F32_INT_DIS,0x00000000 ,0x00000800 ), +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmCP_MEC2_F32_INT_DIS,0x00000000 ,0x00000800 ), +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmCP_DEBUG,0x00000000 ,0x00008000 ) }; static const struct soc15_reg_golden golden_settings_gc_9_0_vg10[] =
@@ -134,10 +137,7 @@ static const struct soc15_reg_golden golden_settings_gc_9_0_vg10[] =SOC15_REG_GOLDEN_VALUE (GC ,0 , mmRMI_UTCL1_CNTL2,0x00030000 ,0x00020000 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSPI_CONFIG_CNTL_1,0x0000000f ,0x01000107 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmTD_CNTL,0x00001800 ,0x00000800 ), -SOC15_REG_GOLDEN_VALUE (GC ,0 , mmWD_UTCL1_CNTL,0x08000000 ,0x08000080 ), -SOC15_REG_GOLDEN_VALUE (GC ,0 , mmCP_MEC1_F32_INT_DIS,0x00000000 ,0x00000800 ), -SOC15_REG_GOLDEN_VALUE (GC ,0 , mmCP_MEC2_F32_INT_DIS,0x00000000 ,0x00000800 ), -SOC15_REG_GOLDEN_VALUE (GC ,0 , mmCP_DEBUG,0x00000000 ,0x00008000 ) +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmWD_UTCL1_CNTL,0x08000000 ,0x08000080 ) }; static const struct soc15_reg_golden golden_settings_gc_9_0_vg20[] =
drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c +1 -1
@@ -174,7 +174,7 @@ static int xgpu_ai_send_access_requests(struct amdgpu_device *adev,return r; }/* Retrieve checksum from mailbox2 */ -if (req ==IDH_REQ_GPU_INIT_ACCESS ) { +if (req ==IDH_REQ_GPU_INIT_ACCESS || req ==IDH_REQ_GPU_RESET_ACCESS ) { adev->virt.fw_reserve.checksum_key =RREG32_NO_KIQ (SOC15_REG_OFFSET (NBIO ,0 , mmBIF_BX_PF0_MAILBOX_MSGBUF_RCV_DW2));
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +2 -1
@@ -73,7 +73,6 @@ static const struct soc15_reg_golden golden_settings_sdma_4[] = {SOC15_REG_GOLDEN_VALUE (SDMA0 ,0 , mmSDMA0_RLC1_RB_WPTR_POLL_CNTL,0x0000fff0 ,0x00403000 ),SOC15_REG_GOLDEN_VALUE (SDMA0 ,0 , mmSDMA0_UTCL1_PAGE,0x000003ff ,0x000003c0 ),SOC15_REG_GOLDEN_VALUE (SDMA0 ,0 , mmSDMA0_UTCL1_WATERMK,0xfc000000 ,0x00000000 ), -SOC15_REG_GOLDEN_VALUE (SDMA1 ,0 , mmSDMA1_CHICKEN_BITS,0xfe931f07 ,0x02831f07 ),SOC15_REG_GOLDEN_VALUE (SDMA1 ,0 , mmSDMA1_CLK_CTRL,0xffffffff ,0x3f000100 ),SOC15_REG_GOLDEN_VALUE (SDMA1 ,0 , mmSDMA1_GFX_IB_CNTL,0x800f0100 ,0x00000100 ), SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GFX_RB_WPTR_POLL_CNTL, 0x0000fff0, 0x00403000),
@@ -91,6 +90,7 @@ static const struct soc15_reg_golden golden_settings_sdma_4[] = {static const struct soc15_reg_golden golden_settings_sdma_vg10[] = {SOC15_REG_GOLDEN_VALUE (SDMA0 ,0 , mmSDMA0_GB_ADDR_CONFIG,0x0018773f ,0x00104002 ),SOC15_REG_GOLDEN_VALUE (SDMA0 ,0 , mmSDMA0_GB_ADDR_CONFIG_READ,0x0018773f ,0x00104002 ), +SOC15_REG_GOLDEN_VALUE (SDMA1 ,0 , mmSDMA1_CHICKEN_BITS,0xfe931f07 ,0x02831d07 ),SOC15_REG_GOLDEN_VALUE (SDMA1 ,0 , mmSDMA1_GB_ADDR_CONFIG,0x0018773f ,0x00104002 ),SOC15_REG_GOLDEN_VALUE (SDMA1 ,0 , mmSDMA1_GB_ADDR_CONFIG_READ,0x0018773f ,0x00104002 ) };
@@ -98,6 +98,7 @@ static const struct soc15_reg_golden golden_settings_sdma_vg10[] = {static const struct soc15_reg_golden golden_settings_sdma_vg12[] = {SOC15_REG_GOLDEN_VALUE (SDMA0 ,0 , mmSDMA0_GB_ADDR_CONFIG,0x0018773f ,0x00104001 ),SOC15_REG_GOLDEN_VALUE (SDMA0 ,0 , mmSDMA0_GB_ADDR_CONFIG_READ,0x0018773f ,0x00104001 ), +SOC15_REG_GOLDEN_VALUE (SDMA1 ,0 , mmSDMA1_CHICKEN_BITS,0xfe931f07 ,0x02831d07 ),SOC15_REG_GOLDEN_VALUE (SDMA1 ,0 , mmSDMA1_GB_ADDR_CONFIG,0x0018773f ,0x00104001 ),SOC15_REG_GOLDEN_VALUE (SDMA1 ,0 , mmSDMA1_GB_ADDR_CONFIG_READ,0x0018773f ,0x00104001 ) };
drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c +14 -0
@@ -2244,6 +2244,13 @@ static int vega20_force_clock_level(struct pp_hwmgr *hwmgr, soft_min_level = mask ? (ffs (mask) -1 ) :0 ; soft_max_level = mask ? (fls (mask) -1 ) :0 ; +if (soft_max_level >= data->dpm_table.gfx_table.count) { +pr_err ("Clock level specified %d is over max allowed %d\n" , + soft_max_level, + data->dpm_table.gfx_table.count -1 ); +return -EINVAL ; + } + data->dpm_table.gfx_table.dpm_state.soft_min_level = data->dpm_table.gfx_table.dpm_levels[soft_min_level].value; data->dpm_table.gfx_table.dpm_state.soft_max_level =
@@ -2264,6 +2271,13 @@ static int vega20_force_clock_level(struct pp_hwmgr *hwmgr, soft_min_level = mask ? (ffs (mask) -1 ) :0 ; soft_max_level = mask ? (fls (mask) -1 ) :0 ; +if (soft_max_level >= data->dpm_table.mem_table.count) { +pr_err ("Clock level specified %d is over max allowed %d\n" , + soft_max_level, + data->dpm_table.mem_table.count -1 ); +return -EINVAL ; + } + data->dpm_table.mem_table.dpm_state.soft_min_level = data->dpm_table.mem_table.dpm_levels[soft_min_level].value; data->dpm_table.mem_table.dpm_state.soft_max_level =
drivers/gpu/drm/bridge/tc358767.c +36 -9
110 lines not on this page · raw message
drivers/gpu/drm/drm_lease.c +2 -1
@@ -521,7 +521,8 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev, object_count = cl->object_count; - object_ids =memdup_user (u64_to_user_ptr (cl->object_ids), object_count *sizeof (__u32)); + object_ids =memdup_user (u64_to_user_ptr (cl->object_ids), +array_size (object_count,sizeof (__u32)));if (IS_ERR (object_ids))return PTR_ERR (object_ids);
drivers/gpu/drm/i915/i915_gem.c +11 -1
@@ -1826,6 +1826,16 @@ i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,return 0 ; } +static inline bool +__vma_matches (struct vm_area_struct *vma,struct file *filp, +unsigned long addr,unsigned long size) +{ +if (vma->vm_file != filp) +return false; + +return vma->vm_start == addr && (vma->vm_end - vma->vm_start) == size; +} +/** * i915_gem_mmap_ioctl - Maps the contents of an object, returning the address * it is mapped to.
@@ -1884,7 +1894,7 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,return -EINTR ; } vma =find_vma (mm, addr); -if (vma) +if (vma &&__vma_matches (vma, obj->base.filp, addr, args->size)) vma->vm_page_prot =pgprot_writecombine (vm_get_page_prot (vma->vm_flags));else
drivers/gpu/drm/i915/intel_drv.h +10 -0
@@ -209,6 +209,16 @@ struct intel_fbdev {unsigned long vma_flags;async_cookie_t cookie;int preferred_bpp; + +/* Whether or not fbdev hpd processing is temporarily suspended */ + bool hpd_suspended : 1; +/* Set when a hotplug was received while HPD processing was +* suspended +*/ + bool hpd_waiting : 1; + +/* Protects hpd_suspended */ +struct mutex hpd_lock; };struct intel_encoder {
drivers/gpu/drm/i915/intel_fbdev.c +32 -1
@@ -679,6 +679,7 @@ int intel_fbdev_init(struct drm_device *dev)if (ifbdev ==NULL )return -ENOMEM ; +mutex_init (&ifbdev->hpd_lock);drm_fb_helper_prepare (dev, &ifbdev->helper, &intel_fb_helper_funcs);if (!intel_fbdev_init_bios (dev, ifbdev))
@@ -752,6 +753,26 @@ void intel_fbdev_fini(struct drm_i915_private *dev_priv)intel_fbdev_destroy (ifbdev); } +/* Suspends/resumes fbdev processing of incoming HPD events. When resuming HPD +* processing, fbdev will perform a full connector reprobe if a hotplug event +* was received while HPD was suspended. +*/ +static void intel_fbdev_hpd_set_suspend (struct intel_fbdev *ifbdev,int state) +{ +bool send_hpd = false; + +mutex_lock (&ifbdev->hpd_lock); + ifbdev->hpd_suspended = state ==FBINFO_STATE_SUSPENDED ; + send_hpd = !ifbdev->hpd_suspended && ifbdev->hpd_waiting; + ifbdev->hpd_waiting = false; +mutex_unlock (&ifbdev->hpd_lock); + +if (send_hpd) { +DRM_DEBUG_KMS ("Handling delayed fbcon HPD event\n" ); +drm_fb_helper_hotplug_event (&ifbdev->helper); + } +} +void intel_fbdev_set_suspend (struct drm_device *dev,int state,bool synchronous) {struct drm_i915_private *dev_priv =to_i915 (dev);
@@ -773,6 +794,7 @@ void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool synchronous*/ if (state !=FBINFO_STATE_RUNNING )flush_work (&dev_priv->fbdev_suspend_work); +console_lock (); }else {/*
@@ -800,17 +822,26 @@ void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool synchronousdrm_fb_helper_set_suspend (&ifbdev->helper, state);console_unlock (); + +intel_fbdev_hpd_set_suspend (ifbdev, state); }void intel_fbdev_output_poll_changed (struct drm_device *dev) {struct intel_fbdev *ifbdev =to_i915 (dev)->fbdev; +bool send_hpd;if (!ifbdev)return ;intel_fbdev_sync (ifbdev); -if (ifbdev->vma || ifbdev->helper.deferred_setup) + +mutex_lock (&ifbdev->hpd_lock); + send_hpd = !ifbdev->hpd_suspended; + ifbdev->hpd_waiting = true; +mutex_unlock (&ifbdev->hpd_lock); + +if (send_hpd && (ifbdev->vma || ifbdev->helper.deferred_setup))drm_fb_helper_hotplug_event (&ifbdev->helper); }
drivers/gpu/drm/nouveau/nvkm/engine/falcon.c +5 -2
@@ -22,6 +22,7 @@#include <engine/falcon.h> #include <core/gpuobj.h> +#include <subdev/mc.h> #include <subdev/timer.h> #include <engine/fifo.h>
@@ -107,8 +108,10 @@ nvkm_falcon_fini(struct nvkm_engine *engine, bool suspend) } } -nvkm_mask (device, base +0x048 ,0x00000003 ,0x00000000 ); -nvkm_wr32 (device, base +0x014 ,0xffffffff ); +if (nvkm_mc_enabled (device, engine->subdev.index)) { +nvkm_mask (device, base +0x048 ,0x00000003 ,0x00000000 ); +nvkm_wr32 (device, base +0x014 ,0xffffffff ); + }return 0 ; }
drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c +4 -3
@@ -132,11 +132,12 @@ nvkm_therm_update(struct nvkm_therm *therm, int mode) duty =nvkm_therm_update_linear (therm);break ;case NVBIOS_THERM_FAN_OTHER : -if (therm->cstate) +if (therm->cstate) { duty = therm->cstate; -else + poll = false; + }else { duty =nvkm_therm_update_linear_fallback (therm); - poll = false; + }break ; } immd = false;
drivers/gpu/drm/scheduler/sched_entity.c +2 -5
@@ -434,13 +434,10 @@ struct drm_sched_job *drm_sched_entity_pop_job(struct drm_sched_entity *entity)while ((entity->dependency = sched->ops->dependency (sched_job, entity))) { +trace_drm_sched_job_wait_dep (sched_job, entity->dependency); -if (drm_sched_entity_add_dependency_cb (entity)) { - -trace_drm_sched_job_wait_dep (sched_job, - entity->dependency); +if (drm_sched_entity_add_dependency_cb (entity))return NULL ; - } }/* skip jobs from entity that marked guilty */
drivers/gpu/drm/vkms/vkms_crc.c +2 -1
@@ -1,4 +1,5 @@ -// SPDX-License-Identifier: GPL-2.0 +// SPDX-License-Identifier: GPL-2.0+ +#include "vkms_drv.h" #include <linux/crc32.h> #include <drm/drm_atomic.h>
drivers/gpu/drm/vkms/vkms_crtc.c +1 -7
@@ -1,10 +1,4 @@ -// SPDX-License-Identifier: GPL-2.0 -/* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -*/ +// SPDX-License-Identifier: GPL-2.0+ #include "vkms_drv.h" #include <drm/drm_atomic_helper.h>
drivers/gpu/drm/vkms/vkms_drv.c +1 -6
@@ -1,9 +1,4 @@ -/* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -*/ +// SPDX-License-Identifier: GPL-2.0+ /** * DOC: vkms (Virtual Kernel Modesetting)
drivers/gpu/drm/vkms/vkms_drv.h +2 -0
@@ -1,3 +1,5 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +#ifndef _VKMS_DRV_H_#define _VKMS_DRV_H_
drivers/gpu/drm/vkms/vkms_gem.c +1 -7
@@ -1,10 +1,4 @@ -// SPDX-License-Identifier: GPL-2.0 -/* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -*/ +// SPDX-License-Identifier: GPL-2.0+ #include <linux/shmem_fs.h>
drivers/gpu/drm/vkms/vkms_output.c +1 -7
@@ -1,10 +1,4 @@ -// SPDX-License-Identifier: GPL-2.0 -/* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -*/ +// SPDX-License-Identifier: GPL-2.0+ #include "vkms_drv.h" #include <drm/drm_crtc_helper.h>
drivers/gpu/drm/vkms/vkms_plane.c +1 -7
@@ -1,10 +1,4 @@ -// SPDX-License-Identifier: GPL-2.0 -/* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -*/ +// SPDX-License-Identifier: GPL-2.0+ #include "vkms_drv.h" #include <drm/drm_plane_helper.h>
drivers/input/misc/bma150.c +5 -4
@@ -481,13 +481,14 @@ static int bma150_register_input_device(struct bma150_data *bma150) idev->close = bma150_irq_close;input_set_drvdata (idev, bma150); + bma150->input = idev; + error =input_register_device (idev);if (error) {input_free_device (idev);return error; } - bma150->input = idev;return 0 ; }
@@ -510,15 +511,15 @@ static int bma150_register_polled_device(struct bma150_data *bma150)bma150_init_input_device (bma150, ipoll_dev->input); + bma150->input_polled = ipoll_dev; + bma150->input = ipoll_dev->input; + error =input_register_polled_device (ipoll_dev);if (error) {input_free_polled_device (ipoll_dev);return error; } - bma150->input_polled = ipoll_dev; - bma150->input = ipoll_dev->input; -return 0 ; }
drivers/input/mouse/elan_i2c_core.c +1 -1
@@ -1336,7 +1336,6 @@ MODULE_DEVICE_TABLE(i2c, elan_id);static const struct acpi_device_id elan_acpi_id[] = { {"ELAN0000" ,0 }, {"ELAN0100" ,0 }, - {"ELAN0501" ,0 }, {"ELAN0600" ,0 }, {"ELAN0602" ,0 }, {"ELAN0605" ,0 },
@@ -1346,6 +1345,7 @@ static const struct acpi_device_id elan_acpi_id[] = { { "ELAN060C", 0 }, { "ELAN0611", 0 }, { "ELAN0612", 0 }, + { "ELAN0617", 0 }, { "ELAN0618", 0 }, { "ELAN061C", 0 }, { "ELAN061D", 0 },
drivers/input/mouse/elantech.c +9 -0
@@ -1119,6 +1119,8 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,* Asus UX31 0x361f00 20, 15, 0e clickpad * Asus UX32VD 0x361f02 00, 15, 0e clickpad * Avatar AVIU-145A2 0x361f00 ? clickpad +* Fujitsu CELSIUS H760 0x570f02 40, 14, 0c 3 hw buttons (**) +* Fujitsu CELSIUS H780 0x5d0f02 41, 16, 0d 3 hw buttons (**) * Fujitsu LIFEBOOK E544 0x470f00 d0, 12, 09 2 hw buttons * Fujitsu LIFEBOOK E546 0x470f00 50, 12, 09 2 hw buttons * Fujitsu LIFEBOOK E547 0x470f00 50, 12, 09 2 hw buttons
@@ -1171,6 +1173,13 @@ static const struct dmi_system_id elantech_dmi_has_middle_button[] = { DMI_MATCH(DMI_PRODUCT_NAME, "CELSIUS H760"), }, }, + { +/* Fujitsu H780 also has a middle button */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"FUJITSU" ), + DMI_MATCH(DMI_PRODUCT_NAME, "CELSIUS H780"), + }, + }, #endif { } };
drivers/irqchip/irq-csky-apb-intc.c +42 -35
130 lines not on this page · raw message
drivers/md/dm-crypt.c +1 -1
@@ -932,7 +932,7 @@ static int dm_crypt_integrity_io_alloc(struct dm_crypt_io *io, struct bio *bio)if (IS_ERR (bip))return PTR_ERR (bip); - tag_len = io->cc->on_disk_tag_size *bio_sectors (bio); + tag_len = io->cc->on_disk_tag_size * (bio_sectors (bio) >> io->cc->sector_shift); bip->bip_iter.bi_size = tag_len; bip->bip_iter.bi_sector = io->cc->start + io->sector;
drivers/md/dm-thin.c +50 -5
108 lines not on this page · raw message
drivers/md/raid1.c +18 -10
@@ -1863,6 +1863,20 @@ static void end_sync_read(struct bio *bio)reschedule_retry (r1_bio); } +static void abort_sync_write (struct mddev *mddev,struct r1bio *r1_bio) +{ +sector_t sync_blocks =0 ; +sector_t s = r1_bio->sector; +long sectors_to_go = r1_bio->sectors; + +/* make sure these bits don't get cleared. */ +do { +md_bitmap_end_sync (mddev->bitmap, s, &sync_blocks,1 ); + s += sync_blocks; + sectors_to_go -= sync_blocks; + }while (sectors_to_go >0 ); +} +static void end_sync_write (struct bio *bio) {int uptodate = !bio->bi_status;
@@ -1874,15 +1888,7 @@ static void end_sync_write(struct bio *bio)struct md_rdev *rdev = conf->mirrors[find_bio_disk (r1_bio, bio)].rdev;if (!uptodate) { -sector_t sync_blocks =0 ; -sector_t s = r1_bio->sector; -long sectors_to_go = r1_bio->sectors; -/* make sure these bits doesn't get cleared. */ -do { -md_bitmap_end_sync (mddev->bitmap, s, &sync_blocks,1 ); - s += sync_blocks; - sectors_to_go -= sync_blocks; - }while (sectors_to_go >0 ); +abort_sync_write (mddev, r1_bio);set_bit (WriteErrorSeen, &rdev->flags);if (!test_and_set_bit (WantReplacement, &rdev->flags)) set_bit(MD_RECOVERY_NEEDED, &
@@ -2172,8 +2178,10 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio) (i == r1_bio->read_disk || !test_bit(MD_RECOVERY_SYNC, &mddev->recovery)))) continue; -if (test_bit (Faulty, &conf->mirrors[i].rdev->flags)) +if (test_bit (Faulty, &conf->mirrors[i].rdev->flags)) { +abort_sync_write (mddev, r1_bio);continue ; + }bio_set_op_attrs (wbio,REQ_OP_WRITE ,0 );if (test_bit (FailFast, &conf->mirrors[i].rdev->flags))
drivers/misc/eeprom/Kconfig +1 -1
@@ -13,7 +13,7 @@ config EEPROM_AT24 ones like at24c64, 24lc02 or fm24c04: 24c00, 24c01, 24c02, spd (readonly 24c02), 24c04, 24c08, - 24c16, 24c32, 24c64, 24c128, 24c256, 24c512, 24c1024 + 24c16, 24c32, 24c64, 24c128, 24c256, 24c512, 24c1024, 24c2048 Unless you like data loss puzzles, always be sure that any chip you configure as a 24c32 (32 kbit) or larger is NOT really a
drivers/misc/eeprom/at24.c +3 -0
@@ -156,6 +156,7 @@ AT24_CHIP_DATA(at24_data_24c128, 131072 / 8, AT24_FLAG_ADDR16);AT24_CHIP_DATA (at24_data_24c256,262144 /8 ,AT24_FLAG_ADDR16 );AT24_CHIP_DATA (at24_data_24c512,524288 /8 ,AT24_FLAG_ADDR16 );AT24_CHIP_DATA (at24_data_24c1024,1048576 /8 ,AT24_FLAG_ADDR16 ); +AT24_CHIP_DATA (at24_data_24c2048,2097152 /8 ,AT24_FLAG_ADDR16 );/* identical to 24c08 ? */ AT24_CHIP_DATA (at24_data_INT3499,8192 /8 ,0 );
@@ -182,6 +183,7 @@ static const struct i2c_device_id at24_ids[] = { { "24c256", (kernel_ulong_t)&at24_data_24c256 }, { "24c512", (kernel_ulong_t)&at24_data_24c512 }, { "24c1024", (kernel_ulong_t)&at24_data_24c1024 }, + { "24c2048", (kernel_ulong_t)&at24_data_24c2048 }, { "at24", 0 }, { /* END OF LIST */ } };
@@ -210,6 +212,7 @@ static const struct of_device_id at24_of_match[] = { { .compatible = "atmel,24c256", .data = &at24_data_24c256 }, { .compatible = "atmel,24c512", .data = &at24_data_24c512 }, { .compatible = "atmel,24c1024", .data = &at24_data_24c1024 }, + { .compatible = "atmel,24c2048", .data = &at24_data_24c2048 }, { /* END OF LIST */ }, };MODULE_DEVICE_TABLE (of, at24_of_match);
drivers/mmc/core/block.c +9 -1
@@ -2114,7 +2114,7 @@ static void mmc_blk_mq_req_done(struct mmc_request *mrq)if (waiting)wake_up (&mq->wait);else -kblockd_schedule_work (&mq->complete_work); +queue_work (mq->card->complete_wq, &mq->complete_work);return ; }
@@ -2928,6 +2928,13 @@ static int mmc_blk_probe(struct mmc_card *card)mmc_fixup_device (card, mmc_blk_fixups); + card->complete_wq =alloc_workqueue ("mmc_complete" , +WQ_MEM_RECLAIM |WQ_HIGHPRI ,0 ); +if (unlikely (!card->complete_wq)) { +pr_err ("Failed to create mmc completion workqueue" ); +return -ENOMEM ; + } + md =mmc_blk_alloc (card);if (IS_ERR (md))return PTR_ERR (md);
@@ -2991,6 +2998,7 @@ static void mmc_blk_remove(struct mmc_card *card)pm_runtime_put_noidle (&card->dev);mmc_blk_remove_req (md);dev_set_drvdata (&card->dev,NULL ); +destroy_workqueue (card->complete_wq); }static int _mmc_blk_suspend (struct mmc_card *card)
drivers/mmc/host/sunxi-mmc.c +25 -1
@@ -1399,13 +1399,37 @@ static int sunxi_mmc_probe(struct platform_device *pdev) mmc->caps |=MMC_CAP_MMC_HIGHSPEED |MMC_CAP_SD_HIGHSPEED |MMC_CAP_ERASE |MMC_CAP_SDIO_IRQ ; -if (host->cfg->clk_delays || host->use_new_timings) +/* +* Some H5 devices do not have signal traces precise enough to +* use HS DDR mode for their eMMC chips. +* +* We still enable HS DDR modes for all the other controller +* variants that support them. +*/ +if ((host->cfg->clk_delays || host->use_new_timings) && + !of_device_is_compatible (pdev->dev.of_node, +"allwinner,sun50i-h5-emmc" )) mmc->caps |=MMC_CAP_1_8V_DDR |MMC_CAP_3_3V_DDR ; ret =mmc_of_parse (mmc);if (ret) goto error_free_dma; +/* +* If we don't support delay chains in the SoC, we can't use any +* of the higher speed modes. Mask them out in case the device +* tree specifies the properties for them, which gets added to +* the caps by mmc_of_parse() above. +*/ +if (!(host->cfg->clk_delays || host->use_new_timings)) { + mmc->caps &= ~(MMC_CAP_3_3V_DDR |MMC_CAP_1_8V_DDR | +MMC_CAP_1_2V_DDR |MMC_CAP_UHS ); + mmc->caps2 &= ~MMC_CAP2_HS200 ; + } + +/* TODO: This driver doesn't support HS400 mode yet */ + mmc->caps2 &= ~MMC_CAP2_HS400 ; + ret =sunxi_mmc_init_host (host);if (ret) goto error_free_dma;
drivers/nvme/host/core.c +10 -8
@@ -2084,18 +2084,20 @@ static void nvme_init_subnqn(struct nvme_subsystem *subsys, struct nvme_ctrl *ctsize_t nqnlen;int off; - nqnlen =strnlen (id->subnqn,NVMF_NQN_SIZE ); -if (nqnlen >0 && nqnlen <NVMF_NQN_SIZE ) { -strlcpy (subsys->subnqn, id->subnqn,NVMF_NQN_SIZE ); -return ; - } +if (!(ctrl->quirks &NVME_QUIRK_IGNORE_DEV_SUBNQN )) { + nqnlen =strnlen (id->subnqn,NVMF_NQN_SIZE ); +if (nqnlen >0 && nqnlen <NVMF_NQN_SIZE ) { +strlcpy (subsys->subnqn, id->subnqn,NVMF_NQN_SIZE ); +return ; + } -if (ctrl->vs >=NVME_VS (1 ,2 ,1 )) -dev_warn (ctrl->device,"missing or invalid SUBNQN field.\n" ); +if (ctrl->vs >=NVME_VS (1 ,2 ,1 )) +dev_warn (ctrl->device,"missing or invalid SUBNQN field.\n" ); + }/* Generate a "fake" NQN per Figure 254 in NVMe 1.3 + ECN 001 */ off =snprintf (subsys->subnqn,NVMF_NQN_SIZE , -"nqn.2014.08.org.nvmexpress:%4x%4x" , +"nqn.2014.08.org.nvmexpress:%04x%04x" ,le16_to_cpu (id->vid),le16_to_cpu (id->ssvid));memcpy (subsys->subnqn + off, id->sn,sizeof (id->sn)); off +=sizeof (id->sn);
drivers/nvme/host/multipath.c +2 -0
@@ -586,6 +586,7 @@ int nvme_mpath_init(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)return 0 ; out_free_ana_log_buf:kfree (ctrl->ana_log_buf); + ctrl->ana_log_buf =NULL ; out:return error; }
@@ -593,5 +594,6 @@ int nvme_mpath_init(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)void nvme_mpath_uninit (struct nvme_ctrl *ctrl) {kfree (ctrl->ana_log_buf); + ctrl->ana_log_buf =NULL ; }
drivers/nvme/host/nvme.h +5 -0
@@ -90,6 +90,11 @@ enum nvme_quirks {* Set MEDIUM priority on SQ creation */ NVME_QUIRK_MEDIUM_PRIO_SQ = (1 <<7 ), + +/* +* Ignore device provided subnqn. +*/ + NVME_QUIRK_IGNORE_DEV_SUBNQN = (1 << 8), };/*
drivers/nvme/host/pci.c +11 -5
@@ -913,9 +913,11 @@ static void nvme_complete_cqes(struct nvme_queue *nvmeq, u16 start, u16 end)static inline void nvme_update_cq_head (struct nvme_queue *nvmeq) { -if (++nvmeq->cq_head == nvmeq->q_depth) { +if (nvmeq->cq_head == nvmeq->q_depth -1 ) { nvmeq->cq_head =0 ; nvmeq->cq_phase = !nvmeq->cq_phase; + }else { + nvmeq->cq_head++; } }
@@ -1748,8 +1750,9 @@ static void nvme_free_host_mem(struct nvme_dev *dev)struct nvme_host_mem_buf_desc *desc = &dev->host_mem_descs[i];size_t size =le32_to_cpu (desc->size) * dev->ctrl.page_size; -dma_free_coherent (dev->dev, size, dev->host_mem_desc_bufs[i], -le64_to_cpu (desc->addr)); +dma_free_attrs (dev->dev, size, dev->host_mem_desc_bufs[i], +le64_to_cpu (desc->addr), +DMA_ATTR_NO_KERNEL_MAPPING |DMA_ATTR_NO_WARN ); }kfree (dev->host_mem_desc_bufs);
@@ -1815,8 +1818,9 @@ static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred,while (--i >=0 ) {size_t size =le32_to_cpu (descs[i].size) * dev->ctrl.page_size; -dma_free_coherent (dev->dev, size, bufs[i], -le64_to_cpu (descs[i].addr)); +dma_free_attrs (dev->dev, size, bufs[i], +le64_to_cpu (descs[i].addr), +DMA_ATTR_NO_KERNEL_MAPPING |DMA_ATTR_NO_WARN ); }kfree (bufs);
@@ -2696,6 +2700,8 @@ static const struct pci_device_id nvme_id_table[] = { { PCI_VDEVICE(INTEL, 0xf1a5), /* Intel 600P/P3100 */ .driver_data =NVME_QUIRK_NO_DEEPEST_PS | NVME_QUIRK_MEDIUM_PRIO_SQ }, + { PCI_VDEVICE(INTEL, 0xf1a6), /* Intel 760p/Pro 7600p */ + .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */ .driver_data = NVME_QUIRK_IDENTIFY_CNS, }, { PCI_DEVICE(0x1bb1, 0x0100), /* Seagate Nytro Flash Storage */
drivers/s390/crypto/ap_bus.c +2 -1
@@ -248,7 +248,8 @@ static inline int ap_test_config(unsigned int *field, unsigned int nr)static inline int ap_test_config_card_id (unsigned int id) {if (!ap_configuration)/* QCI not supported */ -return 1 ; +/* only ids 0...3F may be probed */ +return id <0x40 ?1 :0 ;return ap_test_config (ap_configuration->apm, id); }
drivers/scsi/sd.c +9 -3
@@ -2960,9 +2960,6 @@ static void sd_read_block_characteristics(struct scsi_disk *sdkp)if (rot ==1 ) {blk_queue_flag_set (QUEUE_FLAG_NONROT , q);blk_queue_flag_clear (QUEUE_FLAG_ADD_RANDOM , q); - }else { -blk_queue_flag_clear (QUEUE_FLAG_NONROT , q); -blk_queue_flag_set (QUEUE_FLAG_ADD_RANDOM , q); }if (sdkp->device->type ==TYPE_ZBC ) {
@@ -3099,6 +3096,15 @@ static int sd_revalidate_disk(struct gendisk *disk)if (sdkp->media_present) {sd_read_capacity (sdkp, buffer); +/* +* set the default to rotational. All non-rotational devices +* support the block characteristics VPD page, which will +* cause this to be updated correctly and any device which +* doesn't support it should be treated as rotational. +*/ +blk_queue_flag_clear (QUEUE_FLAG_NONROT , q); +blk_queue_flag_set (QUEUE_FLAG_ADD_RANDOM , q); +if (scsi_device_supports_vpd (sdp)) {sd_read_block_provisioning (sdkp);sd_read_block_limits (sdkp);
drivers/soc/renesas/r8a774c0-sysc.c +4 -19
@@ -28,19 +28,6 @@ static struct rcar_sysc_area r8a774c0_areas[] __initdata = { { "3dg-b", 0x100, 1, R8A774C0_PD_3DG_B, R8A774C0_PD_3DG_A }, }; -static void __init rcar_sysc_fix_parent (struct rcar_sysc_area *areas, -unsigned int num_areas,u8 id, -int new_parent) -{ -unsigned int i; - -for (i =0 ; i < num_areas; i++) -if (areas[i].isr_bit == id) { - areas[i].parent = new_parent; -return ; - } -} -/* Fixups for RZ/G2E ES1.0 revision */ static const struct soc_device_attribute r8a774c0[]__initconst = { { .soc_id = "r8a774c0", .revision = "ES1.0" },
@@ -50,12 +37,10 @@ static const struct soc_device_attribute r8a774c0[] __initconst = {static int __init r8a774c0_sysc_init (void ) {if (soc_device_match (r8a774c0)) { -rcar_sysc_fix_parent (r8a774c0_areas, -ARRAY_SIZE (r8a774c0_areas), -R8A774C0_PD_3DG_A ,R8A774C0_PD_3DG_B ); -rcar_sysc_fix_parent (r8a774c0_areas, -ARRAY_SIZE (r8a774c0_areas), -R8A774C0_PD_3DG_B ,R8A774C0_PD_ALWAYS_ON ); +/* Fix incorrect 3DG hierarchy */ +swap (r8a774c0_areas[6 ], r8a774c0_areas[7 ]); + r8a774c0_areas[6 ].parent =R8A774C0_PD_ALWAYS_ON ; + r8a774c0_areas[7 ].parent =R8A774C0_PD_3DG_B ; }return 0 ;
fs/cifs/cifsglob.h +20 -0
@@ -1426,6 +1426,7 @@ struct mid_q_entry {int mid_state;/* wish this were enum but can not pass to wait_event */ unsigned int mid_flags;__le16 command;/* smb command code */ +unsigned int optype;/* operation type */ bool large_buf:1; /* if valid response, is pointer to large buf */ bool multiRsp:1; /* multiple trans2 responses for one request */ bool multiEnd:1; /* both received */
@@ -1562,6 +1563,25 @@ static inline void free_dfs_info_array(struct dfs_info3_param *param,kfree (param); } +static inline bool is_interrupt_error (int error) +{ +switch (error) { +case -EINTR : +case -ERESTARTSYS : +case -ERESTARTNOHAND : +case -ERESTARTNOINTR : +return true; + } +return false; +} + +static inline bool is_retryable_error (int error) +{ +if (is_interrupt_error (error) || error == -EAGAIN ) +return true; +return false; +} +#define MID_FREE 0#define MID_REQUEST_ALLOCATED 1#define MID_REQUEST_SUBMITTED 2
fs/cifs/cifssmb.c +4 -3
@@ -2043,7 +2043,7 @@ cifs_writev_requeue(struct cifs_writedata *wdata)for (j =0 ; j < nr_pages; j++) {unlock_page (wdata2->pages[j]); -if (rc !=0 && rc != -EAGAIN ) { +if (rc !=0 && !is_retryable_error (rc)) {SetPageError (wdata2->pages[j]);end_page_writeback (wdata2->pages[j]);put_page (wdata2->pages[j]);
@@ -2052,7 +2052,7 @@ cifs_writev_requeue(struct cifs_writedata *wdata)if (rc) {kref_put (&wdata2->refcount, cifs_writedata_release); -if (rc == -EAGAIN ) +if (is_retryable_error (rc))continue ;break ; }
@@ -2061,7 +2061,8 @@ cifs_writev_requeue(struct cifs_writedata *wdata) i += nr_pages; }while (i < wdata->nr_pages); -mapping_set_error (inode->i_mapping, rc); +if (rc !=0 && !is_retryable_error (rc)) +mapping_set_error (inode->i_mapping, rc);kref_put (&wdata->refcount, cifs_writedata_release); }
fs/cifs/file.c +31 -6
@@ -732,7 +732,8 @@ cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush)if (can_flush) { rc =filemap_write_and_wait (inode->i_mapping); -mapping_set_error (inode->i_mapping, rc); +if (!is_interrupt_error (rc)) +mapping_set_error (inode->i_mapping, rc);if (tcon->unix_ext) rc = cifs_get_inode_info_unix(&inode, full_path,
@@ -1139,6 +1140,10 @@ cifs_push_mandatory_locks(struct cifsFileInfo *cfile)return -EINVAL ; } +BUILD_BUG_ON (sizeof (struct smb_hdr ) +sizeof (LOCKING_ANDX_RANGE ) > +PAGE_SIZE ); + max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr), +PAGE_SIZE ); max_num = (max_buf -sizeof (struct smb_hdr )) /sizeof (LOCKING_ANDX_RANGE ); buf =kcalloc (max_num,sizeof (LOCKING_ANDX_RANGE ),GFP_KERNEL );
@@ -1477,6 +1482,10 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,if (max_buf < (sizeof (struct smb_hdr ) +sizeof (LOCKING_ANDX_RANGE )))return -EINVAL ; +BUILD_BUG_ON (sizeof (struct smb_hdr ) +sizeof (LOCKING_ANDX_RANGE ) > +PAGE_SIZE ); + max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr), +PAGE_SIZE ); max_num = (max_buf -sizeof (struct smb_hdr )) /sizeof (LOCKING_ANDX_RANGE ); buf =kcalloc (max_num,sizeof (LOCKING_ANDX_RANGE ),GFP_KERNEL );
@@ -2109,6 +2118,7 @@ static int cifs_writepages(struct address_space *mapping,pgoff_t end, index;struct cifs_writedata *wdata;int rc =0 ; +int saved_rc =0 ;unsigned int xid;/*
@@ -2137,8 +2147,10 @@ static int cifs_writepages(struct address_space *mapping, rc = server->ops->wait_mtu_credits (server, cifs_sb->wsize, &wsize, &credits); -if (rc) +if (rc !=0 ) { + done = true;break ; + } tofind =min ((wsize /PAGE_SIZE ) -1 , end - index) +1 ;
@@ -2146,6 +2158,7 @@ static int cifs_writepages(struct address_space *mapping, &found_pages);if (!wdata) { rc = -ENOMEM ; + done = true;add_credits_and_wake_if (server, credits,0 );break ; }
@@ -2174,7 +2187,7 @@ static int cifs_writepages(struct address_space *mapping,if (rc !=0 ) {add_credits_and_wake_if (server, wdata->credits,0 );for (i =0 ; i < nr_pages; ++i) { -if (rc == -EAGAIN ) +if (is_retryable_error (rc))redirty_page_for_writepage (wbc, wdata->pages[i]);else
@@ -2182,7 +2195,7 @@ static int cifs_writepages(struct address_space *mapping,end_page_writeback (wdata->pages[i]);put_page (wdata->pages[i]); } -if (rc != -EAGAIN ) +if (!is_retryable_error (rc))mapping_set_error (mapping, rc); }kref_put (&wdata->refcount, cifs_writedata_release);
@@ -2192,6 +2205,15 @@ static int cifs_writepages(struct address_space *mapping,continue ; } +/* Return immediately if we received a signal during writing */ +if (is_interrupt_error (rc)) { + done = true; +break ; + } + +if (rc !=0 && saved_rc ==0 ) + saved_rc = rc; + wbc->nr_to_write -= nr_pages;if (wbc->nr_to_write <=0 ) done = true;
@@ -2209,6 +2231,9 @@ static int cifs_writepages(struct address_space *mapping, goto retry; } +if (saved_rc !=0 ) + rc = saved_rc; +if (wbc->range_cyclic || (range_whole && wbc->nr_to_write >0 )) mapping->writeback_index = index;
@@ -2241,8 +2266,8 @@ cifs_writepage_locked(struct page *page, struct writeback_control *wbc)set_page_writeback (page); retry_write: rc =cifs_partialpagewrite (page,0 ,PAGE_SIZE ); -if (rc == -EAGAIN ) { -if (wbc->sync_mode ==WB_SYNC_ALL ) +if (is_retryable_error (rc)) { +if (wbc->sync_mode ==WB_SYNC_ALL && rc == -EAGAIN ) goto retry_write;redirty_page_for_writepage (wbc, page); }else if (rc !=0 ) {
fs/cifs/inode.c +10 -0
@@ -2261,6 +2261,11 @@ cifs_setattr_unix(struct dentry *direntry, struct iattr *attrs)* the flush returns error? */ rc =filemap_write_and_wait (inode->i_mapping); +if (is_interrupt_error (rc)) { + rc = -ERESTARTSYS ; + goto out; + } +mapping_set_error (inode->i_mapping, rc); rc =0 ;
@@ -2404,6 +2409,11 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs)* the flush returns error? */ rc =filemap_write_and_wait (inode->i_mapping); +if (is_interrupt_error (rc)) { + rc = -ERESTARTSYS ; + goto cifs_setattr_exit; + } +mapping_set_error (inode->i_mapping, rc); rc =0 ;
fs/cifs/smb2file.c +4 -0
@@ -128,6 +128,8 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,if (max_buf <sizeof (struct smb2_lock_element ))return -EINVAL ; +BUILD_BUG_ON (sizeof (struct smb2_lock_element ) >PAGE_SIZE ); + max_buf = min_t(unsigned int, max_buf, PAGE_SIZE); max_num = max_buf /sizeof (struct smb2_lock_element ); buf =kcalloc (max_num,sizeof (struct smb2_lock_element ),GFP_KERNEL );if (!buf)
@@ -264,6 +266,8 @@ smb2_push_mandatory_locks(struct cifsFileInfo *cfile)return -EINVAL ; } +BUILD_BUG_ON (sizeof (struct smb2_lock_element ) >PAGE_SIZE ); + max_buf = min_t(unsigned int, max_buf, PAGE_SIZE); max_num = max_buf /sizeof (struct smb2_lock_element ); buf =kcalloc (max_num,sizeof (struct smb2_lock_element ),GFP_KERNEL );if (!buf) {
fs/cifs/smb2inode.c +17 -0
@@ -294,6 +294,8 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,int rc;struct smb2_file_all_info *smb2_data;__u32 create_options =0 ; +struct cifs_fid fid; +bool no_cached_open = tcon->nohandlecache; *adjust_tz = false; *symlink = false;
@@ -302,6 +304,21 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, GFP_KERNEL);if (smb2_data ==NULL )return -ENOMEM ; + +/* If it is a root and its handle is cached then use it */ +if (!strlen (full_path) && !no_cached_open) { + rc =open_shroot (xid, tcon, &fid); +if (rc) + goto out; + rc =SMB2_query_info (xid, tcon, fid.persistent_fid, + fid.volatile_fid, smb2_data); +close_shroot (&tcon->crfid); +if (rc) + goto out; +move_smb2_info_to_cifs (data, smb2_data); + goto out; + } +if (backup_cred (cifs_sb)) create_options |=CREATE_OPEN_BACKUP_INTENT ;
fs/cifs/smb2ops.c +5 -1
@@ -154,7 +154,11 @@ smb2_get_credits(struct mid_q_entry *mid) {struct smb2_sync_hdr *shdr = (struct smb2_sync_hdr *)mid->resp_buf; -return le16_to_cpu (shdr->CreditRequest); +if (mid->mid_state ==MID_RESPONSE_RECEIVED + || mid->mid_state ==MID_RESPONSE_MALFORMED ) +return le16_to_cpu (shdr->CreditRequest); + +return 0 ; } static int
fs/cifs/smb2pdu.c +11 -4
@@ -2826,9 +2826,10 @@ smb2_echo_callback(struct mid_q_entry *mid) {struct TCP_Server_Info *server = mid->callback_data;struct smb2_echo_rsp *rsp = (struct smb2_echo_rsp *)mid->resp_buf; -unsigned int credits_received =1 ; +unsigned int credits_received =0 ; -if (mid->mid_state ==MID_RESPONSE_RECEIVED ) +if (mid->mid_state ==MID_RESPONSE_RECEIVED + || mid->mid_state ==MID_RESPONSE_MALFORMED ) credits_received =le16_to_cpu (rsp->sync_hdr.CreditRequest);DeleteMidQEntry (mid);
@@ -3085,7 +3086,7 @@ smb2_readv_callback(struct mid_q_entry *mid)struct TCP_Server_Info *server = tcon->ses->server;struct smb2_sync_hdr *shdr = (struct smb2_sync_hdr *)rdata->iov[0 ].iov_base; -unsigned int credits_received =1 ; +unsigned int credits_received =0 ;struct smb_rqst rqst = { .rq_iov = rdata->iov, .rq_nvec =2 , .rq_pages = rdata->pages,
@@ -3124,6 +3125,9 @@ smb2_readv_callback(struct mid_q_entry *mid)task_io_account_read (rdata->got_bytes);cifs_stats_bytes_read (tcon, rdata->got_bytes);break ; +case MID_RESPONSE_MALFORMED : + credits_received =le16_to_cpu (shdr->CreditRequest); +/* fall through */ default :if (rdata->result != -ENODATA ) rdata->result = -EIO ;
@@ -3317,7 +3321,7 @@ smb2_writev_callback(struct mid_q_entry *mid)struct cifs_tcon *tcon =tlink_tcon (wdata->cfile->tlink);unsigned int written;struct smb2_write_rsp *rsp = (struct smb2_write_rsp *)mid->resp_buf; -unsigned int credits_received =1 ; +unsigned int credits_received =0 ;switch (mid->mid_state) {case MID_RESPONSE_RECEIVED :
@@ -3345,6 +3349,9 @@ smb2_writev_callback(struct mid_q_entry *mid)case MID_RETRY_NEEDED : wdata->result = -EAGAIN ;break ; +case MID_RESPONSE_MALFORMED : + credits_received =le16_to_cpu (rsp->sync_hdr.CreditRequest); +/* fall through */ default : wdata->result = -EIO ;break ;
fs/cifs/transport.c +45 -13
105 lines not on this page · raw message
fs/inode.c +2 -5
@@ -730,11 +730,8 @@ static enum lru_status inode_lru_isolate(struct list_head *item,return LRU_REMOVED ; } -/* -* Recently referenced inodes and inodes with many attached pages -* get one more pass. -*/ -if (inode->i_state &I_REFERENCED || inode->i_data.nrpages >1 ) { +/* recently referenced inodes get one more pass */ +if (inode->i_state &I_REFERENCED ) { inode->i_state &= ~I_REFERENCED ;spin_unlock (&inode->i_lock);return LRU_ROTATE ;
fs/nfsd/nfsctl.c +2 -2
@@ -1239,8 +1239,8 @@ static __net_init int nfsd_init_net(struct net *net) retval =nfsd_idmap_init (net);if (retval) goto out_idmap_error; - nn->nfsd4_lease =45 ;/* default lease time */ - nn->nfsd4_grace =45 ; + nn->nfsd4_lease =90 ;/* default lease time */ + nn->nfsd4_grace =90 ; nn->somebody_reclaimed = false; nn->clverifier_counter =prandom_u32 (); nn->clientid_counter =prandom_u32 ();
fs/proc/task_mmu.c +14 -8
@@ -423,7 +423,7 @@ struct mem_size_stats { };static void smaps_account (struct mem_size_stats *mss,struct page *page, -bool compound,bool young,bool dirty) +bool compound,bool young,bool dirty,bool locked) {int i, nr = compound ?1 <<compound_order (page) :1 ;unsigned long size = nr *PAGE_SIZE ;
@@ -450,24 +450,31 @@ static void smaps_account(struct mem_size_stats *mss, struct page *page,else mss->private_clean += size; mss->pss += (u64 )size <<PSS_SHIFT ; +if (locked) + mss->pss_locked += (u64 )size <<PSS_SHIFT ;return ; }for (i =0 ; i < nr; i++, page++) {int mapcount =page_mapcount (page); +unsigned long pss = (PAGE_SIZE <<PSS_SHIFT );if (mapcount >=2 ) {if (dirty ||PageDirty (page)) mss->shared_dirty +=PAGE_SIZE ;else mss->shared_clean +=PAGE_SIZE ; - mss->pss += (PAGE_SIZE <<PSS_SHIFT ) / mapcount; + mss->pss += pss / mapcount; +if (locked) + mss->pss_locked += pss / mapcount; }else {if (dirty ||PageDirty (page)) mss->private_dirty +=PAGE_SIZE ;else mss->private_clean +=PAGE_SIZE ; - mss->pss +=PAGE_SIZE <<PSS_SHIFT ; + mss->pss += pss; +if (locked) + mss->pss_locked += pss; } } }
@@ -490,6 +497,7 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr, {struct mem_size_stats *mss = walk->private;struct vm_area_struct *vma = walk->vma; +bool locked = !!(vma->vm_flags &VM_LOCKED );struct page *page =NULL ;if (pte_present (*pte)) {
@@ -532,7 +540,7 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr,if (!page)return ; -smaps_account (mss, page, false,pte_young (*pte),pte_dirty (*pte)); +smaps_account (mss, page, false,pte_young (*pte),pte_dirty (*pte), locked); }#ifdef CONFIG_TRANSPARENT_HUGEPAGE
@@ -541,6 +549,7 @@ static void smaps_pmd_entry(pmd_t *pmd, unsigned long addr, {struct mem_size_stats *mss = walk->private;struct vm_area_struct *vma = walk->vma; +bool locked = !!(vma->vm_flags &VM_LOCKED );struct page *page;/* FOLL_DUMP will return -EFAULT on huge zero page */
@@ -555,7 +564,7 @@ static void smaps_pmd_entry(pmd_t *pmd, unsigned long addr,/* pass */ ; else VM_BUG_ON_PAGE(1, page); -smaps_account (mss, page, true,pmd_young (*pmd),pmd_dirty (*pmd)); +smaps_account (mss, page, true,pmd_young (*pmd),pmd_dirty (*pmd), locked); }#else static void smaps_pmd_entry(pmd_t *pmd, unsigned long addr,
@@ -737,11 +746,8 @@ static void smap_gather_stats(struct vm_area_struct *vma, } }#endif -/* mmap_sem is held in m_start */ walk_page_vma (vma, &smaps_walk); -if (vma->vm_flags &VM_LOCKED ) - mss->pss_locked += mss->pss; }#define SEQ_PUT_DEC (str, val) \
include/linux/mmc/card.h +1 -0
@@ -308,6 +308,7 @@ struct mmc_card {unsigned int nr_parts;unsigned int bouncesz;/* Bounce buffer size */ +struct workqueue_struct *complete_wq;/* Private workqueue */ };static inline bool mmc_large_sector (struct mmc_card *card)
include/linux/perf_event.h +5 -0
@@ -447,6 +447,11 @@ struct pmu {* Filter events for PMU-specific reasons. */ int (*filter_match) (struct perf_event *event);/* optional */ + +/* +* Check period value for PERF_EVENT_IOC_PERIOD ioctl. +*/ +int (*check_period) (struct perf_event *event,u64 value);/* optional */ };enum perf_addr_filter_action_t {
kernel/events/core.c +16 -0
@@ -4963,6 +4963,11 @@ static void __perf_event_period(struct perf_event *event, } } +static int perf_event_check_period (struct perf_event *event,u64 value) +{ +return event->pmu->check_period (event, value); +} +static int perf_event_period (struct perf_event *event,u64 __user *arg) {u64 value;
@@ -4979,6 +4984,9 @@ static int perf_event_period(struct perf_event *event, u64 __user *arg)if (event->attr.freq && value > sysctl_perf_event_sample_rate)return -EINVAL ; +if (perf_event_check_period (event, value)) +return -EINVAL ; +event_function_call (event, __perf_event_period, &value);return 0 ;
@@ -9391,6 +9399,11 @@ static int perf_pmu_nop_int(struct pmu *pmu)return 0 ; } +static int perf_event_nop_int (struct perf_event *event,u64 value) +{ +return 0 ; +} + static DEFINE_PER_CPU(unsigned int, nop_txn_flags);static void perf_pmu_start_txn (struct pmu *pmu,unsigned int flags)
@@ -9691,6 +9704,9 @@ int perf_pmu_register(struct pmu *pmu, const char *name, int type) pmu->pmu_disable = perf_pmu_nop_void; } +if (!pmu->check_period) + pmu->check_period = perf_event_nop_int; +if (!pmu->event_idx) pmu->event_idx = perf_event_idx_default;
kernel/events/ring_buffer.c +1 -1
@@ -734,7 +734,7 @@ struct ring_buffer *rb_alloc(int nr_pages, long watermark, int cpu, int flags) size =sizeof (struct ring_buffer ); size += nr_pages *sizeof (void *); -if (order_base_2 (size) >=MAX_ORDER ) +if (order_base_2 (size) >=PAGE_SHIFT +MAX_ORDER ) goto fail; rb =kzalloc (size,GFP_KERNEL );
kernel/signal.c +5 -2
@@ -2436,9 +2436,12 @@ bool get_signal(struct ksignal *ksig) }/* Has this task already been marked for death? */ - ksig->info.si_signo = signr =SIGKILL ; -if (signal_group_exit (signal)) +if (signal_group_exit (signal)) { + ksig->info.si_signo = signr =SIGKILL ; +sigdelset (¤t->pending.signal,SIGKILL ); +recalc_sigpending (); goto fatal; + }for (;;) {struct k_sigaction *ka;
kernel/trace/trace_probe_tmpl.h +4 -2
@@ -180,10 +180,12 @@ store_trace_args(void *data, struct trace_probe *tp, struct pt_regs *regs,if (unlikely (arg->dynamic)) *dl =make_data_loc (maxlen, dyndata - base); ret =process_fetch_insn (arg->code, regs, dl, base); -if (unlikely (ret <0 && arg->dynamic)) +if (unlikely (ret <0 && arg->dynamic)) { *dl =make_data_loc (0 , dyndata - base); -else + }else { dyndata += ret; + maxlen -= ret; + } } }
mm/vmscan.c +0 -10
@@ -487,16 +487,6 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl, delta = freeable /2 ; } -/* -* Make sure we apply some minimal pressure on default priority -* even on small cgroups. Stale objects are not only consuming memory -* by themselves, but can also hold a reference to a dying cgroup, -* preventing it from being reclaimed. A dying cgroup with all -* corresponding structures like per-cpu stats and kmem caches -* can be really big, so it may lead to a significant waste of memory. -*/ - delta = max_t(unsigned long long, delta, min(freeable, batch_size)); - total_scan += delta;if (total_scan <0 ) { pr_err("shrink_slab: %pF negative objects to delete nr=%ld\n",
net/sunrpc/auth_gss/gss_krb5_seqnum.c +38 -11
128 lines not on this page · raw message
sound/core/pcm_lib.c +4 -16
@@ -2112,13 +2112,6 @@ int pcm_lib_apply_appl_ptr(struct snd_pcm_substream *substream,return 0 ; } -/* allow waiting for a capture stream that hasn't been started */ -#if IS_ENABLED (CONFIG_SND_PCM_OSS ) -#define wait_capture_start (substream) ((substream)->oss.oss) -#else -#define wait_capture_start (substream) false -#endif -/* the common loop for read/write data */ snd_pcm_sframes_t __snd_pcm_lib_xfer(struct snd_pcm_substream *substream, void *data, bool interleaved,
@@ -2184,16 +2177,11 @@ snd_pcm_sframes_t __snd_pcm_lib_xfer(struct snd_pcm_substream *substream,snd_pcm_update_hw_ptr (substream);if (!is_playback && - runtime->status->state ==SNDRV_PCM_STATE_PREPARED ) { -if (size >= runtime->start_threshold) { - err =snd_pcm_start (substream); -if (err <0 ) - goto _end_unlock; - }else if (!wait_capture_start (substream)) { -/* nothing to do */ - err =0 ; + runtime->status->state ==SNDRV_PCM_STATE_PREPARED && + size >= runtime->start_threshold) { + err =snd_pcm_start (substream); +if (err <0 ) goto _end_unlock; - } } avail =snd_pcm_avail (substream);
sound/pci/hda/patch_conexant.c +1 -0
@@ -924,6 +924,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {SND_PCI_QUIRK (0x103c ,0x807C ,"HP EliteBook 820 G3" ,CXT_FIXUP_HP_DOCK ),SND_PCI_QUIRK (0x103c ,0x80FD ,"HP ProBook 640 G2" ,CXT_FIXUP_HP_DOCK ),SND_PCI_QUIRK (0x103c ,0x828c ,"HP EliteBook 840 G4" ,CXT_FIXUP_HP_DOCK ), +SND_PCI_QUIRK (0x103c ,0x83b2 ,"HP EliteBook 840 G5" ,CXT_FIXUP_HP_DOCK ),SND_PCI_QUIRK (0x103c ,0x83b3 ,"HP EliteBook 830 G5" ,CXT_FIXUP_HP_DOCK ),SND_PCI_QUIRK (0x103c ,0x83d3 ,"HP ProBook 640 G4" ,CXT_FIXUP_HP_DOCK ), SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE),
sound/soc/codecs/hdmi-codec.c +2 -2
@@ -795,6 +795,8 @@ static int hdmi_codec_probe(struct platform_device *pdev)if (hcd->spdif) hcp->daidrv[i] = hdmi_spdif_dai; +dev_set_drvdata (dev, hcp); + ret =devm_snd_soc_register_component (dev, &hdmi_driver, hcp->daidrv, dai_count);if (ret) {
@@ -802,8 +804,6 @@ static int hdmi_codec_probe(struct platform_device *pdev) __func__, ret);return ret; } - -dev_set_drvdata (dev, hcp);return 0 ; }
sound/usb/pcm.c +8 -1
@@ -314,6 +314,9 @@ static int search_roland_implicit_fb(struct usb_device *dev, int ifnum,return 0 ; } +/* Setup an implicit feedback endpoint from a quirk. Returns 0 if no quirk +* applies. Returns 1 if a quirk was found. +*/ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs, struct usb_device *dev, struct usb_interface_descriptor *altsd,
@@ -384,7 +387,7 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs, subs->data_endpoint->sync_master = subs->sync_endpoint; -return 0 ; +return 1 ; } static int set_sync_endpoint(struct snd_usb_substream *subs,
@@ -423,6 +426,10 @@ static int set_sync_endpoint(struct snd_usb_substream *subs,if (err <0 )return err; +/* endpoint set by quirk */ +if (err >0 ) +return 0 ; +if (altsd->bNumEndpoints <2 )return 0 ;
tools/arch/riscv/include/uapi/asm/bitsperlong.h new file +25 -0
@@ -0,0 +1,25 @@ +/* +* Copyright (C) 2012 ARM Ltd. +* Copyright (C) 2015 Regents of the University of California +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _UAPI_ASM_RISCV_BITSPERLONG_H +#define _UAPI_ASM_RISCV_BITSPERLONG_H + +#define __BITS_PER_LONG (__SIZEOF_POINTER__ * 8) + +#include <asm-generic/bitsperlong.h> + +#endif /* _UAPI_ASM_RISCV_BITSPERLONG_H */
tools/include/uapi/asm/bitsperlong.h +4 -0
@@ -13,6 +13,10 @@#include "../../arch/mips/include/uapi/asm/bitsperlong.h" #elif defined(__ia64__)#include "../../arch/ia64/include/uapi/asm/bitsperlong.h" +#elif defined(__riscv) +#include "../../arch/riscv/include/uapi/asm/bitsperlong.h" +#elif defined(__alpha__) +#include "../../arch/alpha/include/uapi/asm/bitsperlong.h" #else #include <asm-generic/bitsperlong.h> #endif
tools/perf/builtin-stat.c +2 -1
@@ -561,7 +561,8 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)break ; } } -wait4 (child_pid, &status,0 , &stat_config.ru_data); +if (child_pid !=-1 ) +wait4 (child_pid, &status,0 , &stat_config.ru_data);if (workload_exec_errno) {const char *emsg =str_error_r (workload_exec_errno, msg,sizeof (msg));
tools/perf/tests/shell/lib/probe_vfs_getname.sh +2 -1
@@ -13,7 +13,8 @@ add_probe_vfs_getname() { local verbose=$1 if [ $had_vfs_getname -eq 1 ] ; then line=$(perf probe -L getname_flags 2>&1 | egrep 'result.*=.*filename;' | sed -r 's/[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*/\1/') - perf probe $verbose "vfs_getname=getname_flags:${line} pathname=result->name:string" + perf probe -q "vfs_getname=getname_flags:${line} pathname=result->name:string" || \ + perf probe $verbose "vfs_getname=getname_flags:${line} pathname=filename:string" fi }
tools/perf/util/callchain.c +20 -12
@@ -766,6 +766,7 @@ static enum match_result match_chain(struct callchain_cursor_node *node, cnode->cycles_count += node->branch_flags.cycles; cnode->iter_count += node->nr_loop_iter; cnode->iter_cycles += node->iter_cycles; + cnode->from_count++; } }
@@ -1345,10 +1346,10 @@ static int branch_to_str(char *bf, int bfsize,static int branch_from_str (char *bf,int bfsize,u64 branch_count,u64 cycles_count,u64 iter_count, -u64 iter_cycles) +u64 iter_cycles,u64 from_count) {int printed =0 , i =0 ; -u64 cycles; +u64 cycles, v =0 ; cycles = cycles_count / branch_count;if (cycles) {
@@ -1357,14 +1358,16 @@ static int branch_from_str(char *bf, int bfsize, bf + printed, bfsize - printed); } -if (iter_count) { - printed +=count_pri64_printf (i++,"iter" , - iter_count, - bf + printed, bfsize - printed); +if (iter_count && from_count) { + v = iter_count / from_count; +if (v) { + printed +=count_pri64_printf (i++,"iter" , + v, bf + printed, bfsize - printed); - printed +=count_pri64_printf (i++,"avg_cycles" , - iter_cycles / iter_count, - bf + printed, bfsize - printed); + printed +=count_pri64_printf (i++,"avg_cycles" , + iter_cycles / iter_count, + bf + printed, bfsize - printed); + } }if (i)
@@ -1377,6 +1380,7 @@ static int counts_str_build(char *bf, int bfsize, u64 branch_count, u64 predicted_count, u64 abort_count, u64 cycles_count, u64 iter_count, u64 iter_cycles, + u64 from_count, struct branch_type_stat *brtype_stat) { int printed;
@@ -1389,7 +1393,8 @@ static int counts_str_build(char *bf, int bfsize, predicted_count, abort_count, brtype_stat); }else { printed =branch_from_str (bf, bfsize, branch_count, - cycles_count, iter_count, iter_cycles); + cycles_count, iter_count, iter_cycles, + from_count); }if (!printed)
@@ -1402,13 +1407,14 @@ static int callchain_counts_printf(FILE *fp, char *bf, int bfsize, u64 branch_count, u64 predicted_count, u64 abort_count, u64 cycles_count, u64 iter_count, u64 iter_cycles, + u64 from_count, struct branch_type_stat *brtype_stat) { char str[256];counts_str_build (str,sizeof (str), branch_count, predicted_count, abort_count, cycles_count, - iter_count, iter_cycles, brtype_stat); + iter_count, iter_cycles, from_count, brtype_stat);if (fp)return fprintf (fp,"%s" , str);
@@ -1422,6 +1428,7 @@ int callchain_list_counts__printf_value(struct callchain_list *clist,u64 branch_count, predicted_count;u64 abort_count, cycles_count;u64 iter_count, iter_cycles; +u64 from_count; branch_count = clist->branch_count; predicted_count = clist->predicted_count;
@@ -1429,11 +1436,12 @@ int callchain_list_counts__printf_value(struct callchain_list *clist, cycles_count = clist->cycles_count; iter_count = clist->iter_count; iter_cycles = clist->iter_cycles; + from_count = clist->from_count;return callchain_counts_printf (fp, bf, bfsize, branch_count, predicted_count, abort_count, cycles_count, iter_count, iter_cycles, - &clist->brtype_stat); + from_count, &clist->brtype_stat); }static void free_callchain_node (struct callchain_node *node)
tools/perf/util/callchain.h +1 -0
@@ -118,6 +118,7 @@ struct callchain_list {bool has_children; };u64 branch_count; +u64 from_count;u64 predicted_count;u64 abort_count;u64 cycles_count;
tools/perf/util/machine.c +1 -1
@@ -2005,7 +2005,7 @@ static void save_iterations(struct iterations *iter, {int i; - iter->nr_loop_iter = nr; + iter->nr_loop_iter++; iter->cycles =0 ;for (i =0 ; i < nr; i++)