Linux 5.8.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.8.11 kernel.
All users of the 5.8 kernel series must upgrade.
The updated 5.8.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.8.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/pci/intel-gw-pcie.yaml | 8 Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.txt | 16 - Makefile | 2 arch/arm64/kernel/cpu_errata.c | 8 arch/arm64/kernel/paravirt.c | 26 - arch/arm64/net/bpf_jit_comp.c | 43 ++ arch/mips/Kconfig | 1 arch/mips/kvm/mips.c | 2 arch/mips/sni/a20r.c | 9 arch/openrisc/mm/cache.c | 2 arch/powerpc/include/asm/book3s/64/mmu.h | 10 arch/powerpc/kernel/dma-iommu.c | 3 arch/powerpc/mm/book3s64/radix_pgtable.c | 15 arch/powerpc/mm/init_64.c | 11 arch/riscv/mm/init.c | 7 arch/s390/kernel/entry.h | 1 arch/s390/kernel/pgm_check.S | 2 arch/s390/mm/fault.c | 20 + arch/s390/pci/pci.c | 4 arch/s390/pci/pci_event.c | 2 arch/x86/boot/compressed/Makefile | 2 arch/x86/include/asm/frame.h | 19 + arch/x86/kernel/process.c | 3 block/bfq-iosched.c | 12 block/blk-mq-sched.h | 2 drivers/base/firmware_loader/firmware.h | 2 drivers/base/firmware_loader/main.c | 17 - drivers/block/loop.c | 4 drivers/clk/davinci/pll.c | 2 drivers/clk/rockchip/clk-rk3228.c | 2 drivers/dax/super.c | 4 drivers/firmware/efi/efibc.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 2 drivers/gpu/drm/i915/gem/i915_gem_context.c | 48 +-- drivers/gpu/drm/i915/i915_sw_fence.c | 10 drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 20 - drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 1 drivers/gpu/drm/mediatek/mtk_drm_drv.c | 18 - drivers/gpu/drm/mediatek/mtk_dsi.c | 9 drivers/gpu/drm/mediatek/mtk_hdmi.c | 26 + drivers/hv/channel_mgmt.c | 7 drivers/hv/vmbus_drv.c | 9 drivers/i2c/algos/i2c-algo-pca.c | 35 +- drivers/i2c/busses/i2c-i801.c | 21 - drivers/i2c/busses/i2c-mt65xx.c | 4 drivers/i2c/busses/i2c-mxs.c | 10 drivers/infiniband/hw/bnxt_re/qplib_sp.c | 2 drivers/infiniband/hw/bnxt_re/qplib_sp.h | 1 drivers/input/mouse/trackpoint.c | 10 drivers/input/mouse/trackpoint.h | 10 drivers/input/serio/i8042-x86ia64io.h | 16 + drivers/interconnect/core.c | 10 drivers/iommu/amd/iommu.c | 8 drivers/md/dm-table.c | 10 drivers/md/dm.c | 5 drivers/misc/habanalabs/debugfs.c | 2 drivers/misc/habanalabs/include/gaudi/gaudi_masks.h | 32 +- drivers/net/hyperv/netvsc_drv.c | 2 drivers/nvme/host/fc.c | 1 drivers/nvme/host/rdma.c | 1 drivers/nvme/host/tcp.c | 1 drivers/nvme/target/loop.c | 3 drivers/phy/ti/phy-omap-usb2.c | 47 ++- drivers/rapidio/Kconfig | 2 drivers/regulator/pwm-regulator.c | 2 drivers/s390/crypto/zcrypt_ccamisc.c | 8 drivers/scsi/libfc/fc_disc.c | 2 drivers/scsi/libsas/sas_discover.c | 3 drivers/scsi/lpfc/lpfc_els.c | 7 drivers/scsi/lpfc/lpfc_hw4.h | 2 drivers/scsi/pm8001/pm8001_sas.c | 2 drivers/spi/spi-loopback-test.c | 2 drivers/spi/spi.c | 9 drivers/thunderbolt/eeprom.c | 20 + drivers/tty/serial/8250/8250_pci.c | 11 drivers/tty/serial/serial_core.c | 44 +- drivers/usb/class/usblp.c | 5 drivers/usb/core/quirks.c | 4 drivers/usb/host/ehci-hcd.c | 1 drivers/usb/host/ehci-hub.c | 1 drivers/usb/storage/uas.c | 14 drivers/usb/typec/ucsi/ucsi.c | 22 + drivers/usb/typec/ucsi/ucsi_acpi.c | 2 drivers/video/fbdev/core/fbcon.c | 2 fs/cifs/inode.c | 4 fs/f2fs/data.c | 3 fs/f2fs/node.c | 3 fs/nfs/nfs4proc.c | 11 include/linux/cpuhotplug.h | 1 include/linux/dax.h | 21 + include/linux/i2c-algo-pca.h | 15 include/linux/percpu-rwsem.h | 8 include/linux/serial_core.h | 1 include/sound/soc.h | 4 include/uapi/linux/kvm.h | 5 kernel/kprobes.c | 9 kernel/locking/lockdep.c | 35 +- kernel/locking/lockdep_internals.h | 2 kernel/locking/percpu-rwsem.c | 4 mm/huge_memory.c | 42 +- mm/ksm.c | 4 mm/memory_hotplug.c | 14 mm/page_isolation.c | 8 mm/percpu.c | 2 mm/vmscan.c | 8 net/core/skbuff.c | 10 net/mptcp/protocol.c | 8 net/sunrpc/rpcb_clnt.c | 4 net/sunrpc/xprtrdma/verbs.c | 2 scripts/kconfig/qconf.cc | 2 sound/pci/hda/patch_realtek.c | 79 +++++ sound/soc/codecs/rt1308-sdw.c | 4 sound/soc/codecs/rt700-sdw.c | 4 sound/soc/codecs/rt711-sdw.c | 4 sound/soc/codecs/rt715-sdw.c | 4 sound/soc/codecs/tlv320adcx140.c | 4 sound/soc/intel/boards/skl_hda_dsp_generic.c | 2 sound/soc/intel/haswell/sst-haswell-dsp.c | 185 +++++------- sound/soc/meson/axg-toddr.c | 24 + sound/soc/qcom/apq8016_sbc.c | 1 sound/soc/qcom/apq8096.c | 1 sound/soc/qcom/common.c | 6 sound/soc/qcom/sdm845.c | 1 sound/soc/qcom/storm.c | 1 sound/soc/soc-core.c | 13 sound/soc/soc-dai.c | 4 sound/soc/soc-pcm.c | 2 tools/perf/tests/bp_signal.c | 5 tools/perf/tests/pmu-events.c | 5 tools/perf/tests/pmu.c | 1 tools/perf/util/evlist.c | 11 tools/perf/util/metricgroup.c | 7 tools/perf/util/parse-events.c | 2 tools/perf/util/pmu.c | 13 tools/perf/util/pmu.h | 2 tools/perf/util/record.c | 34 +- tools/testing/selftests/vm/map_hugetlb.c | 2 137 files changed, 1013 insertions(+), 447 deletions(-)
Alexey Kardashevskiy (1):
powerpc/dma: Fix dma_map_ops::get_required_mask
Andrew Jones (1):
arm64: paravirt: Initialize steal time when cpu is online
Aneesh Kumar K.V (1):
powerpc/book3s64/radix: Fix boot failure with large amount of guest memory
Ard Biesheuvel (1):
efi: efibc: check for efivars write capability
Arvind Sankar (1):
x86/boot/compressed: Disable relocation relaxation
Camel Guo (1):
ASoC: tlv320adcx140: Fix accessing uninitialized adcx140->dev
Cezary Rojewski (2):
ASoC: Intel: haswell: Fix power transition refactor
ASoC: core: Do not cleanup uninitialized dais on soc_pcm_open failure
Chaitanya Kulkarni (1):
nvme-loop: set ctrl state connecting after init
Chris Wilson (3):
drm/i915/gem: Reduce context termination list iteration guard to RCU drm/i915/gem: Delay tracking the GEM context until it is registered drm/i915: Filter wake_flags passed to default_wake_function
Christophe JAILLET (1):
clk: davinci: Use the correct size when allocating memory
Christophe Leroy (1):
selftests/vm: fix display of page size in map_hugetlb
Chuck Lever (2):
xprtrdma: Release in-flight MRs on disconnect
NFS: Zero-stateid SETATTR should first return delegation
Chun-Kuang Hu (1):
drm/mediatek: Use CPU when fail to get cmdq event
Dan Carpenter (1):
scsi: libsas: Fix error path in sas_notify_lldd_dev_found()
Dan Williams (1):
dm/dax: Fix table reference counts
David Milburn (3):
nvme-fc: cancel async events before freeing event struct
nvme-rdma: cancel async events before freeing event struct
nvme-tcp: cancel async events before freeing event struct
Dennis Li (1):
drm/kfd: fix a system crash issue during GPU recovery
Dexuan Cui (1):
Drivers: hv: vmbus: hibernation: do not hang forever in vmbus_bus_resume()
Dinghao Liu (2):
scsi: pm8001: Fix memleak in pm8001_exec_internal_task_abort
ASoC: qcom: common: Fix refcount imbalance on error
Evan Nimmo (1):
i2c: algo: pca: Reapply i2c bus settings after reset
Florian Fainelli (1):
dt-bindings: spi: Fix spi-bcm-qspi compatible ordering
Florian Westphal (1):
mptcp: sendmsg: reset iter on error
Gabriel Krisman Bertazi (1):
f2fs: Return EOF on unaligned end of file DIO read
Greentime Hu (1):
riscv: Add sfence.vma after early page table changes
Greg Kroah-Hartman (2):
Revert "ALSA: hda - Fix silent audio output and corrupted input on MSI X570-A PRO" Linux 5.8.11
Gustav Wiklander (1):
spi: Fix memory leak on splited transfers
Haiyang Zhang (1):
hv_netvsc: Remove "unlikely" from netvsc_select_queue
Hans de Goede (1):
Input: i8042 - add Entroware Proteus EL07R4 to nomux and reset lists
Harald Freudenberger (1):
s390/zcrypt: fix kmalloc 256k failure
Heikki Krogerus (2):
usb: typec: ucsi: acpi: Increase command completion timeout value
usb: typec: ucsi: Prevent mode overrun
Hou Tao (1):
locking/percpu-rwsem: Use this_cpu_{inc,dec}() for read_count
Huacai Chen (1):
KVM: MIPS: Change the definition of kvm type
Hugh Dickins (1):
ksm: reinstate memcg charge on copied pages
Hui Wang (1):
ALSA: hda/realtek - The Mic on a RedmiBook doesn't work
Ian Rogers (1):
perf record: Don't clear event's period if set by a term
Ilias Apalodimas (1):
arm64: bpf: Fix branch offset in JIT
J. Bruce Fields (1):
SUNRPC: stop printk reading past end of string
James Smart (2):
scsi: lpfc: Fix FLOGI/PLOGI receive race condition in pt2pt discovery
scsi: lpfc: Extend the RDF FPIN Registration descriptor for additional events
Jan Kara (2):
dm: Call proper helper to determine dax support
dax: Fix compilation for CONFIG_DAX && !CONFIG_FS_DAX
Janosch Frank (1):
s390: add 3f program exception handler
Javed Hasan (1):
scsi: libfc: Fix for double free()
Jerome Brunet (1):
ASoC: meson: axg-toddr: fix channel order on g12 platforms
Jiri Olsa (1):
perf test: Fix the "signal" test inline assembly
Jitao Shi (1):
drm/mediatek: dsi: Fix scrolling of panel with small hfp or hbp
Joao Martins (1):
iommu/amd: Fix potential @entry null deref
Johan Hovold (2):
serial: core: fix port-lock initialisation
serial: core: fix console port-lock regression
Josh Poimboeuf (1):
x86/unwind/fp: Fix FP unwinding in ret_from_fork
Kuninori Morimoto (1):
ASoC: soc-core: add snd_soc_find_dai_with_mutex()
Laurent Pinchart (1):
rapidio: Replace 'select' DMAENGINES 'with depends on'
Luke D Jones (1):
ALSA: hda: fixup headset for ASUS GX502 laptop
Marc Zyngier (1):
arm64: Allow CPUs unffected by ARM erratum 1418040 to come in late
Martijn Coenen (1):
loop: Set correct device size when using LOOP_CONFIGURE
Masahiro Yamada (1):
kconfig: qconf: use delete[] instead of delete to free array (again)
Mateusz Gorski (1):
ASoC: Intel: skl_hda_dsp_generic: Fix NULLptr dereference in autosuspend delay
Matthias Kaehlcke (1):
interconnect: Show bandwidth for disabled paths as zero in debugfs
Matthias Schiffer (1):
i2c: mxs: use MXS_DMA_CTRL_WAIT4END instead of DMA_CTRL_ACK
Miaohe Lin (1):
net: handle the return value of pskb_carve_frag_list() correctly
Michael Kelley (1):
Drivers: hv: vmbus: Add timeout to vmbus_wait_for_unload
Mika Westerberg (1):
thunderbolt: Retry DROM read once if parsing fails
Moti Haimovski (1):
habanalabs: prevent user buff overflow
Muchun Song (1):
kprobes: fix kill kprobe which has been marked as gone
Namhyung Kim (5):
perf test: Free aliases for PMU event map aliases test perf metric: Fix some memory leaks
perf evlist: Fix cpu/thread map leak
perf parse-event: Fix memory leak in evsel->unit perf test: Free formats for perf pmu parse test
Naresh Kumar PBS (1):
RDMA/bnxt_re: Restrict the max_gids to 256
Nathan Chancellor (1):
clk: rockchip: Fix initialization of mux_pll_src_4plls_p
Niklas Schnelle (1):
s390/pci: fix leak of DMA tables on hard unplug
Ofir Bitton (1):
habanalabs: fix report of RAZWI initiator coordinates
Olga Kornievskaia (1):
NFSv4.1 handle ERR_DELAY error reclaiming locking state on delegation recall
Oliver Neukum (2):
USB: UAS: fix disconnect by unplugging a hub
usblp: fix race between disconnect() and read()
Omar Sandoval (1):
block: only call sched requeue_request() for scheduled requests
Pavel Tatashin (1):
mm/memory_hotplug: drain per-cpu pages again during memory offline
Penghao (1):
USB: quirks: Add USB_QUIRK_IGNORE_REMOTE_WAKEUP quirk for BYD zhaoxin notebook
Prateek Sood (1):
firmware_loader: fix memory leak for paged buffer
Qii Wang (1):
i2c: mediatek: Fix generic definitions for bus frequency
Quentin Perret (1):
ehci-hcd: Move include to keep CRC stable
Ralph Campbell (1):
mm/thp: fix __split_huge_pmd_locked() for migration PMD
Rob Herring (1):
dt-bindings: PCI: intel,lgm-pcie: Fix matching on all snps,dw-pcie instances
Roger Quadros (1):
phy: omap-usb2-phy: disable PHY charger detect
Ronnie Sahlberg (1):
cifs: fix DFS mount with cifsacl/modefromsid
Sahitya Tummala (1):
f2fs: fix indefinite loop scanning for free nid
Stafford Horne (1):
openrisc: Fix cache API compile issue when not inlining
Stephan Gerhold (1):
ASoC: qcom: Set card->owner to avoid warnings
Sunghyun Jin (1):
percpu: fix first chunk size calculation for populated bitmap
Suravee Suthikulpanit (1):
iommu/amd: Restore IRTE.RemapEn bit for amd_iommu_activate_guest_mode
Tetsuo Handa (1):
fbcon: Fix user font detection test at fbcon_resize().
Thomas Bogendoerfer (2):
MIPS: SNI: Fix MIPS_L1_CACHE_SHIFT
MIPS: SNI: Fix spurious interrupts
Tobias Diedrich (1):
serial: 8250_pci: Add Realtek 816a and 816b
Vincent Huang (1):
Input: trackpoint - add new trackpoint variant IDs
Vincent Whitchurch (2):
regulator: pwm: Fix machine constraints application
spi: spi-loopback-test: Fix out-of-bounds read
Vinod Koul (4):
ASoC: rt1308-sdw: Fix return check for devm_regmap_init_sdw()
ASoC: rt711: Fix return check for devm_regmap_init_sdw()
ASoC: rt715: Fix return check for devm_regmap_init_sdw()
ASoC: rt700: Fix return check for devm_regmap_init_sdw()
Volker Rümelin (1):
i2c: i801: Fix resume bug
Xunlei Pang (1):
mm: memcg: fix memcg reclaim soft lockup
Yu Kuai (4):
drm/mediatek: Add missing put_device() call in mtk_ddp_comp_init() drm/mediatek: Add exception handing in mtk_drm_probe() if component init fail drm/mediatek: Add missing put_device() call in mtk_drm_kms_init() drm/mediatek: Add missing put_device() call in mtk_hdmi_dt_parse_pdata()
[email protected] (1):
locking/lockdep: Fix "USED" <- "IN-NMI" inversions
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/pci/intel-gw-pcie.yaml +8 -0
@@ -9,6 +9,14 @@ title: PCIe RC controller on Intel Gateway SoCs maintainers: - Dilip Kota <[email protected]> +select: + properties: + compatible: + contains: + const: intel,lgm-pcie + required: + - compatible + properties: compatible: items:
Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.txt +8 -8
@@ -23,8 +23,8 @@ Required properties: - compatible: Must be one of : - "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-qspi" : MSPI+BSPI on BRCMSTB SoCs - "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI + "brcm,spi-brcmstb-qspi", "brcm,spi-bcm-qspi" : MSPI+BSPI on BRCMSTB SoCs + "brcm,spi-brcmstb-mspi", "brcm,spi-bcm-qspi" : Second Instance of MSPI BRCMSTB SoCs "brcm,spi-bcm7425-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI BRCMSTB SoCs
@@ -36,8 +36,8 @@ Required properties: BRCMSTB SoCs "brcm,spi-bcm7278-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI BRCMSTB SoCs - "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi" : MSPI+BSPI on Cygnus, NSP - "brcm,spi-bcm-qspi", "brcm,spi-ns2-qspi" : NS2 SoCs + "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi" : MSPI+BSPI on Cygnus, NSP + "brcm,spi-ns2-qspi", "brcm,spi-bcm-qspi" : NS2 SoCs - reg: Define the bases and ranges of the associated I/O address spaces.
@@ -86,7 +86,7 @@ BRCMSTB SoC Example: spi@f03e3400 { #address-cells = <0x1>; #size-cells = <0x0>; - compatible = "brcm,spi-brcmstb-qspi", "brcm,spi-brcmstb-qspi"; + compatible = "brcm,spi-brcmstb-qspi", "brcm,spi-bcm-qspi"; reg = <0xf03e0920 0x4 0xf03e3400 0x188 0xf03e3200 0x50>; reg-names = "cs_reg", "mspi", "bspi"; interrupts = <0x6 0x5 0x4 0x3 0x2 0x1 0x0>;
@@ -149,7 +149,7 @@ BRCMSTB SoC Example: #address-cells = <1>; #size-cells = <0>; clocks = <&upg_fixed>; - compatible = "brcm,spi-brcmstb-qspi", "brcm,spi-brcmstb-mspi"; + compatible = "brcm,spi-brcmstb-mspi", "brcm,spi-bcm-qspi"; reg = <0xf0416000 0x180>; reg-names = "mspi"; interrupts = <0x14>;
@@ -160,7 +160,7 @@ BRCMSTB SoC Example: iProc SoC Example: qspi: spi@18027200 { - compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi"; + compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi"; reg = <0x18027200 0x184>, <0x18027000 0x124>, <0x1811c408 0x004>,
@@ -191,7 +191,7 @@ iProc SoC Example: NS2 SoC Example: qspi: spi@66470200 { - compatible = "brcm,spi-bcm-qspi", "brcm,spi-ns2-qspi"; + compatible = "brcm,spi-ns2-qspi", "brcm,spi-bcm-qspi"; reg = <0x66470200 0x184>, <0x66470000 0x124>, <0x67017408 0x004>,
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 8 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm64/kernel/cpu_errata.c +6 -2
@@ -910,8 +910,12 @@ const struct arm64_cpu_capabilities arm64_errata[] = { .desc = "ARM erratum 1418040", .capability =ARM64_WORKAROUND_1418040 ,ERRATA_MIDR_RANGE_LIST (erratum_1418040_list), - .type = (ARM64_CPUCAP_SCOPE_LOCAL_CPU | -ARM64_CPUCAP_PERMITTED_FOR_LATE_CPU ), +/* +* We need to allow affected CPUs to come in late, but +* also need the non-affected CPUs to be able to come +* in at any point in time. Wonderful. +*/ + .type = ARM64_CPUCAP_WEAK_LOCAL_CPU_FEATURE, }, #endif #ifdef CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT
arch/arm64/kernel/paravirt.c +15 -11
@@ -50,16 +50,19 @@ static u64 pv_steal_clock(int cpu)struct pv_time_stolen_time_region *reg; reg =per_cpu_ptr (&stolen_time_region, cpu); -if (!reg->kaddr) { -pr_warn_once ("stolen time enabled but not configured for cpu %d\n" , - cpu); + +/* +* paravirt_steal_clock() may be called before the CPU +* online notification callback runs. Until the callback +* has run we just return zero. +*/ +if (!reg->kaddr)return 0 ; - }return le64_to_cpu (READ_ONCE (reg->kaddr->stolen_time)); } -static int stolen_time_dying_cpu (unsigned int cpu) +static int stolen_time_cpu_down_prepare (unsigned int cpu) {struct pv_time_stolen_time_region *reg;
@@ -73,7 +76,7 @@ static int stolen_time_dying_cpu(unsigned int cpu)return 0 ; } -static int init_stolen_time_cpu (unsigned int cpu) +static int stolen_time_cpu_online (unsigned int cpu) {struct pv_time_stolen_time_region *reg;struct arm_smccc_res res;
@@ -103,19 +106,20 @@ static int init_stolen_time_cpu(unsigned int cpu)return 0 ; } -static int pv_time_init_stolen_time (void ) +static int __init pv_time_init_stolen_time (void ) {int ret; - ret =cpuhp_setup_state (CPUHP_AP_ARM_KVMPV_STARTING , -"hypervisor/arm/pvtime:starting" , - init_stolen_time_cpu, stolen_time_dying_cpu); + ret =cpuhp_setup_state (CPUHP_AP_ONLINE_DYN , +"hypervisor/arm/pvtime:online" , + stolen_time_cpu_online, + stolen_time_cpu_down_prepare);if (ret <0 )return ret;return 0 ; } -static bool has_pv_steal_clock (void ) +static bool __init has_pv_steal_clock (void ) {struct arm_smccc_res res;
arch/arm64/net/bpf_jit_comp.c +31 -12
94 lines not on this page · raw message
arch/mips/Kconfig +1 -0
@@ -876,6 +876,7 @@ config SNI_RM select I8253 select I8259 select ISA + select MIPS_L1_CACHE_SHIFT_6 select SWAP_IO_SPACE if CPU_BIG_ENDIAN select SYS_HAS_CPU_R4X00 select SYS_HAS_CPU_R5000
arch/mips/kvm/mips.c +2 -0
@@ -137,6 +137,8 @@ extern void kvm_init_loongson_ipi(struct kvm *kvm);int kvm_arch_init_vm (struct kvm *kvm,unsigned long type) {switch (type) { +case KVM_VM_MIPS_AUTO : +break ;#ifdef CONFIG_KVM_MIPS_VZ case KVM_VM_MIPS_VZ :#else
arch/mips/sni/a20r.c +7 -2
@@ -143,7 +143,10 @@ static struct platform_device sc26xx_pdev = { }, }; -static u32 a20r_ack_hwint (void ) +/* +* Trigger chipset to update CPU's CAUSE IP field +*/ +static u32 a20r_update_cause_ip (void ) {u32 status =read_c0_status ();
@@ -205,12 +208,14 @@ static void a20r_hwint(void)int irq;clear_c0_status (IE_IRQ0 ); - status =a20r_ack_hwint (); + status =a20r_update_cause_ip (); cause =read_c0_cause (); irq =ffs (((cause & status) >>8 ) &0xf8 );if (likely (irq >0 ))do_IRQ (SNI_A20R_IRQ_BASE + irq -1 ); + +a20r_update_cause_ip ();set_c0_status (IE_IRQ0 ); }
arch/openrisc/mm/cache.c +1 -1
@@ -16,7 +16,7 @@#include <asm/cacheflush.h> #include <asm/tlbflush.h> -static void cache_loop (struct page *page,const unsigned int reg) +static __always_inline void cache_loop(struct page *page, const unsigned int reg) {unsigned long paddr =page_to_pfn (page) <<PAGE_SHIFT ;unsigned long line = paddr & ~(L1_CACHE_BYTES -1 );
arch/powerpc/include/asm/book3s/64/mmu.h +5 -5
@@ -228,14 +228,14 @@ static inline void early_init_mmu_secondary(void)extern void hash__setup_initial_memory_limit (phys_addr_t first_memblock_base,phys_addr_t first_memblock_size); -extern void radix__setup_initial_memory_limit (phys_addr_t first_memblock_base, -phys_addr_t first_memblock_size);static inline void setup_initial_memory_limit (phys_addr_t first_memblock_base,phys_addr_t first_memblock_size) { -if (early_radix_enabled ()) -return radix__setup_initial_memory_limit (first_memblock_base, - first_memblock_size); +/* +* Hash has more strict restrictions. At this point we don't +* know which translations we will pick. Hence go with hash +* restrictions. +*/ return hash__setup_initial_memory_limit (first_memblock_base, first_memblock_size); }
arch/powerpc/kernel/dma-iommu.c +2 -1
@@ -160,7 +160,8 @@ u64 dma_iommu_get_required_mask(struct device *dev)return bypass_mask; } - mask =1ULL < (fls_long (tbl->it_offset + tbl->it_size) -1 ); + mask =1ULL << (fls_long (tbl->it_offset + tbl->it_size) + + tbl->it_page_shift -1 ); mask += mask -1 ;return mask;
arch/powerpc/mm/book3s64/radix_pgtable.c +0 -15
@@ -654,21 +654,6 @@ void radix__mmu_cleanup_all(void) } } -void radix__setup_initial_memory_limit (phys_addr_t first_memblock_base, -phys_addr_t first_memblock_size) -{ -/* -* We don't currently support the first MEMBLOCK not mapping 0 -* physical on those processors -*/ -BUG_ON (first_memblock_base !=0 ); - -/* -* Radix mode is not limited by RMA / VRMA addressing. -*/ - ppc64_rma_size =ULONG_MAX ; -} -#ifdef CONFIG_MEMORY_HOTPLUG static void free_pte_table (pte_t *pte_start,pmd_t *pmd) {
arch/powerpc/mm/init_64.c +9 -2
@@ -431,9 +431,16 @@ void __init mmu_early_init_devtree(void)if (!(mfmsr () &MSR_HV ))early_check_vec5 (); -if (early_radix_enabled ()) +if (early_radix_enabled ()) {radix__early_init_devtree (); -else +/* +* We have finalized the translation we are going to use by now. +* Radix mode is not limited by RMA / VRMA addressing. +* Hence don't limit memblock allocations. +*/ + ppc64_rma_size =ULONG_MAX ; +memblock_set_current_limit (MEMBLOCK_ALLOC_ANYWHERE ); + }else hash__early_init_devtree(); }#endif /* CONFIG_PPC_BOOK3S_64 */
arch/riscv/mm/init.c +3 -4
@@ -226,12 +226,11 @@ void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot) ptep = &fixmap_pte[pte_index (addr)]; -if (pgprot_val (prot)) { +if (pgprot_val (prot))set_pte (ptep,pfn_pte (phys >>PAGE_SHIFT , prot)); - }else { +else pte_clear (&init_mm, addr, ptep); -local_flush_tlb_page (addr); - } +local_flush_tlb_page (addr); }static pte_t *__init get_pte_virt (phys_addr_t pa)
arch/s390/kernel/entry.h +1 -0
@@ -26,6 +26,7 @@ void do_protection_exception(struct pt_regs *regs);void do_dat_exception (struct pt_regs *regs);void do_secure_storage_access (struct pt_regs *regs);void do_non_secure_storage_access (struct pt_regs *regs); +void do_secure_storage_violation (struct pt_regs *regs);void addressing_exception (struct pt_regs *regs);void data_exception (struct pt_regs *regs);
arch/s390/kernel/pgm_check.S +1 -1
@@ -80,7 +80,7 @@ PGM_CHECK(do_dat_exception) /* 3b */ PGM_CHECK_DEFAULT /* 3c */ PGM_CHECK(do_secure_storage_access) /* 3d */ PGM_CHECK(do_non_secure_storage_access) /* 3e */ -PGM_CHECK_DEFAULT /* 3f */ +PGM_CHECK(do_secure_storage_violation) /* 3f */ PGM_CHECK(monitor_event_exception) /* 40 */ PGM_CHECK_DEFAULT /* 41 */ PGM_CHECK_DEFAULT /* 42 */
arch/s390/mm/fault.c +20 -0
@@ -875,6 +875,21 @@ void do_non_secure_storage_access(struct pt_regs *regs) }NOKPROBE_SYMBOL (do_non_secure_storage_access); +void do_secure_storage_violation (struct pt_regs *regs) +{ +/* +* Either KVM messed up the secure guest mapping or the same +* page is mapped into multiple secure guests. +* +* This exception is only triggered when a guest 2 is running +* and can therefore never occur in kernel context. +*/ +printk_ratelimited (KERN_WARNING +"Secure storage violation in task: %s, pid %d\n" , + current->comm, current->pid); +send_sig (SIGSEGV , current,0 ); +} +#else void do_secure_storage_access (struct pt_regs *regs) {
@@ -885,4 +900,9 @@ void do_non_secure_storage_access(struct pt_regs *regs) {default_trap_handler (regs); } + +void do_secure_storage_violation (struct pt_regs *regs) +{ +default_trap_handler (regs); +}#endif
arch/s390/pci/pci.c +4 -0
@@ -668,6 +668,10 @@ EXPORT_SYMBOL_GPL(zpci_enable_device);int zpci_disable_device (struct zpci_dev *zdev) {zpci_dma_exit_device (zdev); +/* +* The zPCI function may already be disabled by the platform, this is +* detected in clp_disable_fh() which becomes a no-op. +*/ return clp_disable_fh (zdev); }EXPORT_SYMBOL_GPL (zpci_disable_device);
arch/s390/pci/pci_event.c +2 -0
@@ -143,6 +143,8 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)zpci_remove_device (zdev); } + zdev->fh = ccdf->fh; +zpci_disable_device (zdev); zdev->state =ZPCI_FN_STATE_STANDBY ;if (!clp_get_state (ccdf->fid, &state) && state ==ZPCI_FN_STATE_RESERVED ) {
arch/x86/boot/compressed/Makefile +2 -0
@@ -42,6 +42,8 @@ KBUILD_CFLAGS += $(call cc-disable-warning, gnu) KBUILD_CFLAGS += -Wno-pointer-sign KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=) KBUILD_CFLAGS += -fno-asynchronous-unwind-tables +# Disable relocation relaxation in case the link is not PIE. +KBUILD_CFLAGS += $(call as-option,-Wa$(comma)-mrelax-relocations=no) KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ GCOV_PROFILE := n
arch/x86/include/asm/frame.h +19 -0
@@ -60,12 +60,26 @@#define FRAME_END "pop %" _ASM_BP "\n"#ifdef CONFIG_X86_64 +#define ENCODE_FRAME_POINTER \ "lea 1(%rsp), %rbp\n\t" + +static inline unsigned long encode_frame_pointer (struct pt_regs *regs) +{ +return (unsigned long )regs +1 ; +} +#else /* !CONFIG_X86_64 */ +#define ENCODE_FRAME_POINTER \ "movl %esp, %ebp\n\t" \ "andl $0x7fffffff, %ebp\n\t" + +static inline unsigned long encode_frame_pointer (struct pt_regs *regs) +{ +return (unsigned long )regs &0x7fffffff ; +} +#endif /* CONFIG_X86_64 */ #endif /* __ASSEMBLY__ */
@@ -83,6 +97,11 @@#define ENCODE_FRAME_POINTER +static inline unsigned long encode_frame_pointer (struct pt_regs *regs) +{ +return 0 ; +} +#endif #define FRAME_BEGIN
arch/x86/kernel/process.c +2 -1
@@ -42,6 +42,7 @@#include <asm/spec-ctrl.h> #include <asm/io_bitmap.h> #include <asm/proto.h> +#include <asm/frame.h> #include "process.h"
@@ -133,7 +134,7 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp, fork_frame = container_of(childregs, struct fork_frame, regs); frame = &fork_frame->frame; - frame->bp =0 ; + frame->bp =encode_frame_pointer (childregs); frame->ret_addr = (unsigned long ) ret_from_fork; p->thread.sp = (unsigned long ) fork_frame; p->thread.io_bitmap =NULL ;
block/bfq-iosched.c +0 -12
@@ -5895,18 +5895,6 @@ static void bfq_finish_requeue_request(struct request *rq)struct bfq_queue *bfqq =RQ_BFQQ (rq);struct bfq_data *bfqd; -/* -* Requeue and finish hooks are invoked in blk-mq without -* checking whether the involved request is actually still -* referenced in the scheduler. To handle this fact, the -* following two checks make this function exit in case of -* spurious invocations, for which there is nothing to do. -* -* First, check whether rq has nothing to do with an elevator. -*/ -if (unlikely (!(rq->rq_flags &RQF_ELVPRIV ))) -return ; -/* * rq either is not associated with any icq, or is an already * requeued request that has not (yet) been re-inserted into
block/blk-mq-sched.h +1 -1
@@ -66,7 +66,7 @@ static inline void blk_mq_sched_requeue_request(struct request *rq)struct request_queue *q = rq->q;struct elevator_queue *e = q->elevator; -if (e && e->type->ops.requeue_request) +if ((rq->rq_flags &RQF_ELVPRIV ) && e && e->type->ops.requeue_request) e->type->ops.requeue_request (rq); }
drivers/base/firmware_loader/firmware.h +2 -0
@@ -142,10 +142,12 @@ int assign_fw(struct firmware *fw, struct device *device, u32 opt_flags);void fw_free_paged_buf (struct fw_priv *fw_priv);int fw_grow_paged_buf (struct fw_priv *fw_priv,int pages_needed);int fw_map_paged_buf (struct fw_priv *fw_priv); +bool fw_is_paged_buf (struct fw_priv *fw_priv);#else static inline void fw_free_paged_buf (struct fw_priv *fw_priv) {}static inline int fw_grow_paged_buf (struct fw_priv *fw_priv,int pages_needed) {return -ENXIO ; }static inline int fw_map_paged_buf (struct fw_priv *fw_priv) {return -ENXIO ; } +static inline bool fw_is_paged_buf (struct fw_priv *fw_priv) {return false; }#endif #endif /* __FIRMWARE_LOADER_H */
drivers/base/firmware_loader/main.c +11 -6
@@ -252,9 +252,11 @@ static void __free_fw_priv(struct kref *ref)list_del (&fw_priv->list);spin_unlock (&fwc->lock); -fw_free_paged_buf (fw_priv);/* free leftover pages */ -if (!fw_priv->allocated_size) +if (fw_is_paged_buf (fw_priv)) +fw_free_paged_buf (fw_priv); +else if (!fw_priv->allocated_size)vfree (fw_priv->data); +kfree_const (fw_priv->fw_name);kfree (fw_priv); }
@@ -268,6 +270,11 @@ static void free_fw_priv(struct fw_priv *fw_priv) }#ifdef CONFIG_FW_LOADER_PAGED_BUF +bool fw_is_paged_buf (struct fw_priv *fw_priv) +{ +return fw_priv->is_paged_buf; +} +void fw_free_paged_buf (struct fw_priv *fw_priv) {int i;
@@ -275,6 +282,8 @@ void fw_free_paged_buf(struct fw_priv *fw_priv)if (!fw_priv->pages)return ; +vunmap (fw_priv->data); +for (i =0 ; i < fw_priv->nr_pages; i++)__free_page (fw_priv->pages[i]);kvfree (fw_priv->pages);
@@ -328,10 +337,6 @@ int fw_map_paged_buf(struct fw_priv *fw_priv)if (!fw_priv->data)return -ENOMEM ; -/* page table is no longer needed after mapping, let's free */ -kvfree (fw_priv->pages); - fw_priv->pages =NULL ; - return 0; }#endif
drivers/block/loop.c +2 -2
@@ -1114,8 +1114,6 @@ static int loop_configure(struct loop_device *lo, fmode_t mode, mapping = file->f_mapping; inode = mapping->host; - size =get_loop_size (lo, file); -if ((config->info.lo_flags & ~LOOP_CONFIGURE_SETTABLE_FLAGS ) !=0 ) { error = -EINVAL ; goto out_unlock;
@@ -1165,6 +1163,8 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,loop_update_rotational (lo);loop_update_dio (lo);loop_sysfs_init (lo); + + size =get_loop_size (lo, file);loop_set_size (lo, size); set_blocksize(bdev, S_ISBLK(inode->i_mode) ?
drivers/clk/davinci/pll.c +1 -1
@@ -491,7 +491,7 @@ struct clk *davinci_pll_clk_register(struct device *dev, parent_name = postdiv_name; } - pllen =kzalloc (sizeof (*pllout),GFP_KERNEL ); + pllen =kzalloc (sizeof (*pllen),GFP_KERNEL );if (!pllen) { ret = -ENOMEM ; goto err_unregister_postdiv;
drivers/clk/rockchip/clk-rk3228.c +1 -1
@@ -137,7 +137,7 @@ PNAME(mux_usb480m_p) = { "usb480m_phy", "xin24m" };PNAME (mux_hdmiphy_p) = {"hdmiphy_phy" ,"xin24m" };PNAME (mux_aclk_cpu_src_p) = {"cpll_aclk_cpu" ,"gpll_aclk_cpu" ,"hdmiphy_aclk_cpu" }; -PNAME (mux_pll_src_4plls_p) = {"cpll" ,"gpll" ,"hdmiphy" "usb480m" }; +PNAME (mux_pll_src_4plls_p) = {"cpll" ,"gpll" ,"hdmiphy" ,"usb480m" };PNAME (mux_pll_src_3plls_p) = {"cpll" ,"gpll" ,"hdmiphy" };PNAME (mux_pll_src_2plls_p) = {"cpll" ,"gpll" };PNAME (mux_sclk_hdmi_cec_p) = {"cpll" ,"gpll" ,"xin24m" };
drivers/dax/super.c +4 -0
@@ -318,11 +318,15 @@ EXPORT_SYMBOL_GPL(dax_direct_access);bool dax_supported (struct dax_device *dax_dev,struct block_device *bdev,int blocksize,sector_t start,sector_t len) { +if (!dax_dev) +return false; +if (!dax_alive (dax_dev))return false;return dax_dev->ops->dax_supported (dax_dev, bdev, blocksize, start, len); } +EXPORT_SYMBOL_GPL (dax_supported);size_t dax_copy_from_iter (struct dax_device *dax_dev,pgoff_t pgoff,void *addr,size_t bytes,struct iov_iter *i)
drivers/firmware/efi/efibc.c +1 -1
@@ -84,7 +84,7 @@ static int __init efibc_init(void) {int ret; -if (!efi_enabled (EFI_RUNTIME_SERVICES )) +if (!efivars_kobject () || !efivar_supports_writes ())return -ENODEV ; ret =register_reboot_notifier (&efibc_reboot_notifier);
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +1 -1
@@ -1287,7 +1287,7 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,if (q->properties.is_active) {increment_queue_count (dqm, q->properties.type); - retval =execute_queues_cpsch (dqm, +execute_queues_cpsch (dqm,KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES ,0 ); }
drivers/gpu/drm/i915/gem/i915_gem_context.c +30 -18
106 lines not on this page · raw message
drivers/gpu/drm/i915/i915_sw_fence.c +7 -3
@@ -164,9 +164,13 @@ static void __i915_sw_fence_wake_up_all(struct i915_sw_fence *fence, do { list_for_each_entry_safe(pos, next, &x->head, entry) { - pos->func(pos, - TASK_NORMAL, fence->error, - &extra); + int wake_flags; + + wake_flags = fence->error; + if (pos->func == autoremove_wake_function) + wake_flags = 0; + + pos->func(pos, TASK_NORMAL, wake_flags, &extra); } if (list_empty(&extra))
drivers/gpu/drm/mediatek/mtk_drm_crtc.c +13 -7
@@ -834,13 +834,19 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, drm_crtc_index(&mtk_crtc->base)); mtk_crtc->cmdq_client = NULL; } - ret =of_property_read_u32_index (priv->mutex_node, -"mediatek,gce-events" , -drm_crtc_index (&mtk_crtc->base), - &mtk_crtc->cmdq_event); -if (ret) -dev_dbg (dev,"mtk_crtc %d failed to get mediatek,gce-events property\n" , -drm_crtc_index (&mtk_crtc->base)); + +if (mtk_crtc->cmdq_client) { + ret =of_property_read_u32_index (priv->mutex_node, +"mediatek,gce-events" , +drm_crtc_index (&mtk_crtc->base), + &mtk_crtc->cmdq_event); +if (ret) { +dev_dbg (dev,"mtk_crtc %d failed to get mediatek,gce-events property\n" , +drm_crtc_index (&mtk_crtc->base)); +cmdq_mbox_destroy (mtk_crtc->cmdq_client); + mtk_crtc->cmdq_client =NULL ; + } + }#endif return 0 ; }
drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c +1 -0
@@ -496,6 +496,7 @@ int mtk_ddp_comp_init(struct device *dev, struct device_node *node,#if IS_REACHABLE (CONFIG_MTK_CMDQ )if (of_address_to_resource (node,0 , &res) !=0 ) {dev_err (dev,"Missing reg in %s node\n" , node->full_name); +put_device (&larb_pdev->dev);return -EINVAL ; } comp->regs_pa = res.start;
drivers/gpu/drm/mediatek/mtk_drm_drv.c +13 -5
@@ -165,7 +165,7 @@ static int mtk_drm_kms_init(struct drm_device *drm) ret =drmm_mode_config_init (drm);if (ret) -return ret; + goto put_mutex_dev; drm->mode_config.min_width =64 ; drm->mode_config.min_height =64 ;
@@ -182,7 +182,7 @@ static int mtk_drm_kms_init(struct drm_device *drm) ret =component_bind_all (drm->dev, drm);if (ret) -return ret; + goto put_mutex_dev;/* * We currently support two fixed data streams, each optional,
@@ -229,7 +229,7 @@ static int mtk_drm_kms_init(struct drm_device *drm) }if (!dma_dev->dma_parms) { ret = -ENOMEM ; - goto err_component_unbind; + goto put_dma_dev; } ret =dma_set_max_seg_size (dma_dev, (unsigned int )DMA_BIT_MASK (32 ));
@@ -256,9 +256,12 @@ static int mtk_drm_kms_init(struct drm_device *drm) err_unset_dma_parms:if (private->dma_parms_allocated) dma_dev->dma_parms =NULL ; +put_dma_dev: +put_device (private->dma_dev); err_component_unbind:component_unbind_all (drm->dev, drm); - +put_mutex_dev: +put_device (private->mutex_dev);return ret; }
@@ -544,8 +547,13 @@ static int mtk_drm_probe(struct platform_device *pdev)pm_runtime_disable (dev); err_node:of_node_put (private->mutex_node); -for (i =0 ; i <DDP_COMPONENT_ID_MAX ; i++) +for (i =0 ; i <DDP_COMPONENT_ID_MAX ; i++) {of_node_put (private->comp_node[i]); +if (private->ddp_comp[i]) { +put_device (private->ddp_comp[i]->larb_dev); + private->ddp_comp[i] =NULL ; + } + }return ret; }
drivers/gpu/drm/mediatek/mtk_dsi.c +4 -5
@@ -470,14 +470,13 @@ static void mtk_dsi_config_vdo_timing(struct mtk_dsi *dsi) horizontal_sync_active_byte = (vm->hsync_len * dsi_tmp_buf_bpp -10 );if (dsi->mode_flags &MIPI_DSI_MODE_VIDEO_SYNC_PULSE ) - horizontal_backporch_byte = - (vm->hback_porch * dsi_tmp_buf_bpp -10 ); + horizontal_backporch_byte = vm->hback_porch * dsi_tmp_buf_bpp;else - horizontal_backporch_byte = ((vm->hback_porch + vm->hsync_len) * - dsi_tmp_buf_bpp -10 ); + horizontal_backporch_byte = (vm->hback_porch + vm->hsync_len) * + dsi_tmp_buf_bpp; data_phy_cycles = timing->lpx + timing->da_hs_prepare + - timing->da_hs_zero + timing->da_hs_exit +3 ; + timing->da_hs_zero + timing->da_hs_exit;if (dsi->mode_flags &MIPI_DSI_MODE_VIDEO_BURST ) { if ((vm->hfront_porch + vm->hback_porch) * dsi_tmp_buf_bpp >
drivers/gpu/drm/mediatek/mtk_hdmi.c +18 -8
@@ -1507,25 +1507,30 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,dev_err (dev,"Failed to get system configuration registers: %d\n" , ret); -return ret; + goto put_device; } hdmi->sys_regmap = regmap; mem =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); hdmi->regs =devm_ioremap_resource (dev, mem); -if (IS_ERR (hdmi->regs)) -return PTR_ERR (hdmi->regs); +if (IS_ERR (hdmi->regs)) { + ret =PTR_ERR (hdmi->regs); + goto put_device; + } remote =of_graph_get_remote_node (np,1 ,0 ); -if (!remote) -return -EINVAL ; +if (!remote) { + ret = -EINVAL ; + goto put_device; + }if (!of_device_is_compatible (remote,"hdmi-connector" )) { hdmi->next_bridge =of_drm_find_bridge (remote);if (!hdmi->next_bridge) {dev_err (dev,"Waiting for external bridge\n" );of_node_put (remote); -return -EPROBE_DEFER ; + ret = -EPROBE_DEFER ; + goto put_device; } }
@@ -1534,7 +1539,8 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,dev_err (dev,"Failed to find ddc-i2c-bus node in %pOF\n" , remote);of_node_put (remote); -return -EINVAL ; + ret = -EINVAL ; + goto put_device; }of_node_put (remote);
@@ -1542,10 +1548,14 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,of_node_put (i2c_np);if (!hdmi->ddc_adpt) {dev_err (dev,"Failed to get ddc i2c adapter by node\n" ); -return -EINVAL ; + ret = -EINVAL ; + goto put_device; }return 0 ; +put_device: +put_device (hdmi->cec_dev); +return ret; }/*
drivers/hv/channel_mgmt.c +5 -2
@@ -750,7 +750,7 @@ static void vmbus_wait_for_unload(void)void *page_addr;struct hv_message *msg;struct vmbus_channel_message_header *hdr; -u32 message_type; +u32 message_type, i;/* * CHANNELMSG_UNLOAD_RESPONSE is always delivered to the CPU which was
@@ -760,8 +760,11 @@ static void vmbus_wait_for_unload(void)* functional and vmbus_unload_response() will complete * vmbus_connection.unload_event. If not, the last thing we can do is * read message pages for all CPUs directly. +* +* Wait no more than 10 seconds so that the panic path can't get +* hung forever in case the response message isn't seen. */ -while (1 ) { +for (i =0 ; i <1000 ; i++) {if (completion_done (&vmbus_connection.unload_event))break ;
drivers/hv/vmbus_drv.c +7 -2
@@ -2383,7 +2383,10 @@ static int vmbus_bus_suspend(struct device *dev)if (atomic_read (&vmbus_connection.nr_chan_close_on_suspend) >0 )wait_for_completion (&vmbus_connection.ready_for_suspend_event); -WARN_ON (atomic_read (&vmbus_connection.nr_chan_fixup_on_resume) !=0 ); +if (atomic_read (&vmbus_connection.nr_chan_fixup_on_resume) !=0 ) { +pr_err ("Can not suspend due to a previous failed resuming\n" ); +return -EBUSY ; + }mutex_lock (&vmbus_connection.channel_mutex);
@@ -2459,7 +2462,9 @@ static int vmbus_bus_resume(struct device *dev)vmbus_request_offers (); -wait_for_completion (&vmbus_connection.ready_for_resume_event); +if (wait_for_completion_timeout ( + &vmbus_connection.ready_for_resume_event,10 *HZ ) ==0 ) +pr_err ("Some vmbus device is missing after suspending?\n" );/* Reset the event for the next suspend. */ reinit_completion (&vmbus_connection.ready_for_suspend_event);
drivers/i2c/algos/i2c-algo-pca.c +23 -12
@@ -41,8 +41,22 @@ static void pca_reset(struct i2c_algo_pca_data *adap)pca_outw (adap,I2C_PCA_INDPTR ,I2C_PCA_IPRESET );pca_outw (adap,I2C_PCA_IND ,0xA5 );pca_outw (adap,I2C_PCA_IND ,0x5A ); + +/* +* After a reset we need to re-apply any configuration +* (calculated in pca_init) to get the bus in a working state. +*/ +pca_outw (adap,I2C_PCA_INDPTR ,I2C_PCA_IMODE ); +pca_outw (adap,I2C_PCA_IND , adap->bus_settings.mode); +pca_outw (adap,I2C_PCA_INDPTR ,I2C_PCA_ISCLL ); +pca_outw (adap,I2C_PCA_IND , adap->bus_settings.tlow); +pca_outw (adap,I2C_PCA_INDPTR ,I2C_PCA_ISCLH ); +pca_outw (adap,I2C_PCA_IND , adap->bus_settings.thi); + +pca_set_con (adap,I2C_PCA_CON_ENSIO ); }else { adap->reset_chip (adap->data); +pca_set_con (adap,I2C_PCA_CON_ENSIO | adap->bus_settings.clock_freq); } }
@@ -423,13 +437,14 @@ static int pca_init(struct i2c_adapter *adap) " Use the nominal frequency.\n", adap->name); } -pca_reset (pca_data); - clock =pca_clock (pca_data);printk (KERN_INFO "%s: Clock frequency is %dkHz\n" , adap->name, freqs[clock]); -pca_set_con (pca_data,I2C_PCA_CON_ENSIO | clock); +/* Store settings as these will be needed when the PCA chip is reset */ + pca_data->bus_settings.clock_freq = clock; + +pca_reset (pca_data); }else {int clock;int mode;
@@ -496,19 +511,15 @@ static int pca_init(struct i2c_adapter *adap) thi = tlow * min_thi / min_tlow; } +/* Store settings as these will be needed when the PCA chip is reset */ + pca_data->bus_settings.mode = mode; + pca_data->bus_settings.tlow = tlow; + pca_data->bus_settings.thi = thi; +pca_reset (pca_data);printk (KERN_INFO "%s: Clock frequency is %dHz\n" , adap->name, clock *100 ); - -pca_outw (pca_data,I2C_PCA_INDPTR ,I2C_PCA_IMODE ); -pca_outw (pca_data,I2C_PCA_IND , mode); -pca_outw (pca_data,I2C_PCA_INDPTR ,I2C_PCA_ISCLL ); -pca_outw (pca_data,I2C_PCA_IND , tlow); -pca_outw (pca_data,I2C_PCA_INDPTR ,I2C_PCA_ISCLH ); -pca_outw (pca_data,I2C_PCA_IND , thi); - -pca_set_con (pca_data,I2C_PCA_CON_ENSIO ); }udelay (500 );/* 500 us for oscillator to stabilise */
drivers/i2c/busses/i2c-i801.c +14 -7
@@ -1706,6 +1706,16 @@ static inline int i801_acpi_probe(struct i801_priv *priv) { return 0; }static inline void i801_acpi_remove (struct i801_priv *priv) { }#endif +static unsigned char i801_setup_hstcfg (struct i801_priv *priv) +{ +unsigned char hstcfg = priv->original_hstcfg; + + hstcfg &= ~SMBHSTCFG_I2C_EN ;/* SMBus timing */ + hstcfg |=SMBHSTCFG_HST_EN ; +pci_write_config_byte (priv->pci_dev,SMBHSTCFG , hstcfg); +return hstcfg; +} +static int i801_probe (struct pci_dev *dev,const struct pci_device_id *id) {unsigned char temp;
@@ -1826,14 +1836,10 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)return err; } -pci_read_config_byte (priv->pci_dev,SMBHSTCFG , &temp); - priv->original_hstcfg = temp; - temp &= ~SMBHSTCFG_I2C_EN ;/* SMBus timing */ -if (!(temp &SMBHSTCFG_HST_EN )) { +pci_read_config_byte (priv->pci_dev,SMBHSTCFG , &priv->original_hstcfg); + temp =i801_setup_hstcfg (priv); +if (!(priv->original_hstcfg &SMBHSTCFG_HST_EN ))dev_info (&dev->dev,"Enabling SMBus device\n" ); - temp |=SMBHSTCFG_HST_EN ; - } -pci_write_config_byte (priv->pci_dev,SMBHSTCFG , temp);if (temp &SMBHSTCFG_SMB_SMI_EN ) {dev_dbg (&dev->dev,"SMBus using interrupt SMI#\n" );
@@ -1959,6 +1965,7 @@ static int i801_resume(struct device *dev) {struct i801_priv *priv =dev_get_drvdata (dev); +i801_setup_hstcfg (priv);i801_enable_host_notify (&priv->adapter);return 0 ;
drivers/i2c/busses/i2c-mt65xx.c +2 -2
@@ -658,8 +658,8 @@ static int mtk_i2c_calculate_speed(struct mtk_i2c *i2c, unsigned int clk_src,unsigned int cnt_mul;int ret = -EINVAL ; -if (target_speed >I2C_MAX_FAST_MODE_PLUS_FREQ ) - target_speed =I2C_MAX_FAST_MODE_PLUS_FREQ ; +if (target_speed >I2C_MAX_HIGH_SPEED_MODE_FREQ ) + target_speed =I2C_MAX_HIGH_SPEED_MODE_FREQ ; max_step_cnt =mtk_i2c_max_step_cnt (target_speed); base_step_cnt = max_step_cnt;
drivers/i2c/busses/i2c-mxs.c +7 -3
@@ -25,6 +25,7 @@#include <linux/of_device.h> #include <linux/dma-mapping.h> #include <linux/dmaengine.h> +#include <linux/dma/mxs-dma.h> #define DRIVER_NAME "mxs-i2c"
@@ -200,7 +201,8 @@ static int mxs_i2c_dma_setup_xfer(struct i2c_adapter *adap,dma_map_sg (i2c->dev, &i2c->sg_io[0 ],1 ,DMA_TO_DEVICE ); desc =dmaengine_prep_slave_sg (i2c->dmach, &i2c->sg_io[0 ],1 ,DMA_MEM_TO_DEV , -DMA_PREP_INTERRUPT |DMA_CTRL_ACK ); +DMA_PREP_INTERRUPT | +MXS_DMA_CTRL_WAIT4END );if (!desc) {dev_err (i2c->dev,"Failed to get DMA data write descriptor.\n" );
@@ -228,7 +230,8 @@ static int mxs_i2c_dma_setup_xfer(struct i2c_adapter *adap,dma_map_sg (i2c->dev, &i2c->sg_io[1 ],1 ,DMA_FROM_DEVICE ); desc =dmaengine_prep_slave_sg (i2c->dmach, &i2c->sg_io[1 ],1 ,DMA_DEV_TO_MEM , -DMA_PREP_INTERRUPT |DMA_CTRL_ACK ); +DMA_PREP_INTERRUPT | +MXS_DMA_CTRL_WAIT4END );if (!desc) {dev_err (i2c->dev,"Failed to get DMA data write descriptor.\n" );
@@ -260,7 +263,8 @@ static int mxs_i2c_dma_setup_xfer(struct i2c_adapter *adap,dma_map_sg (i2c->dev, i2c->sg_io,2 ,DMA_TO_DEVICE ); desc =dmaengine_prep_slave_sg (i2c->dmach, i2c->sg_io,2 ,DMA_MEM_TO_DEV , -DMA_PREP_INTERRUPT |DMA_CTRL_ACK ); +DMA_PREP_INTERRUPT | +MXS_DMA_CTRL_WAIT4END );if (!desc) {dev_err (i2c->dev,"Failed to get DMA data write descriptor.\n" );
drivers/infiniband/hw/bnxt_re/qplib_sp.c +1 -1
@@ -149,7 +149,7 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw, attr->max_inline_data =le32_to_cpu (sb->max_inline_data); attr->l2_db_size = (sb->l2_db_space_size +1 ) * (0x01 <<RCFW_DBR_BASE_PAGE_SHIFT ); - attr->max_sgid =le32_to_cpu (sb->max_gid); + attr->max_sgid =BNXT_QPLIB_NUM_GIDS_SUPPORTED ;bnxt_qplib_query_version (rcfw, attr->fw_ver);
drivers/infiniband/hw/bnxt_re/qplib_sp.h +1 -0
@@ -47,6 +47,7 @@struct bnxt_qplib_dev_attr {#define FW_VER_ARR_LEN 4u8 fw_ver[FW_VER_ARR_LEN ]; +#define BNXT_QPLIB_NUM_GIDS_SUPPORTED 256u16 max_sgid;u16 max_mrw;u32 max_qp;
drivers/input/mouse/trackpoint.c +6 -4
@@ -17,10 +17,12 @@#include "trackpoint.h" static const char *const trackpoint_variants[] = { - [TP_VARIANT_IBM ] ="IBM" , - [TP_VARIANT_ALPS ] ="ALPS" , - [TP_VARIANT_ELAN ] ="Elan" , - [TP_VARIANT_NXP ] ="NXP" , + [TP_VARIANT_IBM ] ="IBM" , + [TP_VARIANT_ALPS ] ="ALPS" , + [TP_VARIANT_ELAN ] ="Elan" , + [TP_VARIANT_NXP ] ="NXP" , + [TP_VARIANT_JYT_SYNAPTICS ] ="JYT_Synaptics" , + [TP_VARIANT_SYNAPTICS ] ="Synaptics" , };/*
drivers/input/mouse/trackpoint.h +6 -4
@@ -24,10 +24,12 @@* 0x01 was the original IBM trackpoint, others implement very limited * subset of trackpoint features. */ -#define TP_VARIANT_IBM 0x01 -#define TP_VARIANT_ALPS 0x02 -#define TP_VARIANT_ELAN 0x03 -#define TP_VARIANT_NXP 0x04 +#define TP_VARIANT_IBM 0x01 +#define TP_VARIANT_ALPS 0x02 +#define TP_VARIANT_ELAN 0x03 +#define TP_VARIANT_NXP 0x04 +#define TP_VARIANT_JYT_SYNAPTICS 0x05 +#define TP_VARIANT_SYNAPTICS 0x06/* * Commands
drivers/input/serio/i8042-x86ia64io.h +16 -0
@@ -548,6 +548,14 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5738"), }, }, + { + /* Entroware Proteus */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Entroware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"), + DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"), + }, + }, { } };
@@ -676,6 +684,14 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "33474HU"), }, }, + { + /* Entroware Proteus */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Entroware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"), + DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"), + }, + }, { } };
drivers/interconnect/core.c +8 -2
@@ -55,12 +55,18 @@ static int icc_summary_show(struct seq_file *s, void *data)icc_summary_show_one (s, n);hlist_for_each_entry (r, &n->req_list, req_node) { +u32 avg_bw =0 , peak_bw =0 ; +if (!r->dev)continue ; +if (r->enabled) { + avg_bw = r->avg_bw; + peak_bw = r->peak_bw; + } +seq_printf (s," %-27s %12u %12u %12u\n" , -dev_name (r->dev), r->tag, r->avg_bw, - r->peak_bw); +dev_name (r->dev), r->tag, avg_bw, peak_bw); } } }
drivers/iommu/amd/iommu.c +7 -1
@@ -3831,14 +3831,18 @@ int amd_iommu_activate_guest_mode(void *data) {struct amd_ir_data *ir_data = (struct amd_ir_data *)data;struct irte_ga *entry = (struct irte_ga *) ir_data->entry; +u64 valid;if (!AMD_IOMMU_GUEST_IR_VAPIC (amd_iommu_guest_ir) || !entry || entry->lo.fields_vapic.guest_mode)return 0 ; + valid = entry->lo.fields_vapic.valid; + entry->lo.val =0 ; entry->hi.val =0 ; + entry->lo.fields_vapic.valid = valid; entry->lo.fields_vapic.guest_mode =1 ; entry->lo.fields_vapic.ga_log_intr =1 ; entry->hi.fields.ga_root_ptr = ir_data->ga_root_ptr;
@@ -3855,12 +3859,14 @@ int amd_iommu_deactivate_guest_mode(void *data)struct amd_ir_data *ir_data = (struct amd_ir_data *)data;struct irte_ga *entry = (struct irte_ga *) ir_data->entry;struct irq_cfg *cfg = ir_data->cfg; -u64 valid = entry->lo.fields_remap.valid; +u64 valid;if (!AMD_IOMMU_GUEST_IR_VAPIC (amd_iommu_guest_ir) || !entry || !entry->lo.fields_vapic.guest_mode)return 0 ; + valid = entry->lo.fields_remap.valid; + entry->lo.val =0 ; entry->hi.val =0 ;
drivers/md/dm-table.c +7 -3
@@ -865,10 +865,14 @@ EXPORT_SYMBOL_GPL(dm_table_set_type);int device_supports_dax (struct dm_target *ti,struct dm_dev *dev,sector_t start,sector_t len,void *data) { -int blocksize = *(int *) data; +int blocksize = *(int *) data, id; +bool rc; -return generic_fsdax_supported (dev->dax_dev, dev->bdev, blocksize, - start, len); + id =dax_read_lock (); + rc =dax_supported (dev->dax_dev, dev->bdev, blocksize, start, len); +dax_read_unlock (id); + +return rc; }/* Check devices support synchronous DAX */
drivers/md/dm.c +3 -2
@@ -1136,15 +1136,16 @@ static bool dm_dax_supported(struct dax_device *dax_dev, struct block_device *bd {struct mapped_device *md =dax_get_private (dax_dev);struct dm_table *map; +bool ret = false;int srcu_idx; -bool ret; map =dm_get_live_table (md, &srcu_idx);if (!map) -return false; + goto out; ret =dm_table_supports_dax (map, device_supports_dax, &blocksize); +out:dm_put_live_table (md, srcu_idx);return ret;
drivers/misc/habanalabs/debugfs.c +1 -1
@@ -982,7 +982,7 @@ static ssize_t hl_clk_gate_read(struct file *f, char __user *buf,return 0 ;sprintf (tmp_buf,"0x%llx\n" , hdev->clock_gating_mask); - rc =simple_read_from_buffer (buf,strlen (tmp_buf) +1 , ppos, tmp_buf, + rc =simple_read_from_buffer (buf, count, ppos, tmp_buf,strlen (tmp_buf) +1 );return rc;
drivers/misc/habanalabs/include/gaudi/gaudi_masks.h +16 -16
@@ -378,15 +378,15 @@ enum axi_id { ((((y) &RAZWI_INITIATOR_Y_MASK ) <<RAZWI_INITIATOR_Y_SHIFT ) | \ (((x) & RAZWI_INITIATOR_X_MASK) << RAZWI_INITIATOR_X_SHIFT)) -#define RAZWI_INITIATOR_ID_X_Y_TPC0_NIC0 RAZWI_INITIATOR_ID_X_Y(1, 0) -#define RAZWI_INITIATOR_ID_X_Y_TPC1 RAZWI_INITIATOR_ID_X_Y(2, 0) -#define RAZWI_INITIATOR_ID_X_Y_MME0_0 RAZWI_INITIATOR_ID_X_Y(3, 0) -#define RAZWI_INITIATOR_ID_X_Y_MME0_1 RAZWI_INITIATOR_ID_X_Y(4, 0) -#define RAZWI_INITIATOR_ID_X_Y_MME1_0 RAZWI_INITIATOR_ID_X_Y(5, 0) -#define RAZWI_INITIATOR_ID_X_Y_MME1_1 RAZWI_INITIATOR_ID_X_Y(6, 0) -#define RAZWI_INITIATOR_ID_X_Y_TPC2 RAZWI_INITIATOR_ID_X_Y(7, 0) +#define RAZWI_INITIATOR_ID_X_Y_TPC0_NIC0 RAZWI_INITIATOR_ID_X_Y(1, 1) +#define RAZWI_INITIATOR_ID_X_Y_TPC1 RAZWI_INITIATOR_ID_X_Y(2, 1) +#define RAZWI_INITIATOR_ID_X_Y_MME0_0 RAZWI_INITIATOR_ID_X_Y(3, 1) +#define RAZWI_INITIATOR_ID_X_Y_MME0_1 RAZWI_INITIATOR_ID_X_Y(4, 1) +#define RAZWI_INITIATOR_ID_X_Y_MME1_0 RAZWI_INITIATOR_ID_X_Y(5, 1) +#define RAZWI_INITIATOR_ID_X_Y_MME1_1 RAZWI_INITIATOR_ID_X_Y(6, 1) +#define RAZWI_INITIATOR_ID_X_Y_TPC2 RAZWI_INITIATOR_ID_X_Y(7, 1)#define RAZWI_INITIATOR_ID_X_Y_TPC3_PCI_CPU_PSOC \ - RAZWI_INITIATOR_ID_X_Y(8, 0) + RAZWI_INITIATOR_ID_X_Y(8, 1)#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_W_S_0 RAZWI_INITIATOR_ID_X_Y(0, 1)#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_E_S_0 RAZWI_INITIATOR_ID_X_Y(9, 1)#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_W_S_1 RAZWI_INITIATOR_ID_X_Y(0, 2)
@@ -395,14 +395,14 @@ enum axi_id {#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_E_N_0 RAZWI_INITIATOR_ID_X_Y(9, 3)#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_W_N_1 RAZWI_INITIATOR_ID_X_Y(0, 4)#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_E_N_1 RAZWI_INITIATOR_ID_X_Y(9, 4) -#define RAZWI_INITIATOR_ID_X_Y_TPC4_NIC1_NIC2 RAZWI_INITIATOR_ID_X_Y(1, 5) -#define RAZWI_INITIATOR_ID_X_Y_TPC5 RAZWI_INITIATOR_ID_X_Y(2, 5) -#define RAZWI_INITIATOR_ID_X_Y_MME2_0 RAZWI_INITIATOR_ID_X_Y(3, 5) -#define RAZWI_INITIATOR_ID_X_Y_MME2_1 RAZWI_INITIATOR_ID_X_Y(4, 5) -#define RAZWI_INITIATOR_ID_X_Y_MME3_0 RAZWI_INITIATOR_ID_X_Y(5, 5) -#define RAZWI_INITIATOR_ID_X_Y_MME3_1 RAZWI_INITIATOR_ID_X_Y(6, 5) -#define RAZWI_INITIATOR_ID_X_Y_TPC6 RAZWI_INITIATOR_ID_X_Y(7, 5) -#define RAZWI_INITIATOR_ID_X_Y_TPC7_NIC4_NIC5 RAZWI_INITIATOR_ID_X_Y(8, 5) +#define RAZWI_INITIATOR_ID_X_Y_TPC4_NIC1_NIC2 RAZWI_INITIATOR_ID_X_Y(1, 6) +#define RAZWI_INITIATOR_ID_X_Y_TPC5 RAZWI_INITIATOR_ID_X_Y(2, 6) +#define RAZWI_INITIATOR_ID_X_Y_MME2_0 RAZWI_INITIATOR_ID_X_Y(3, 6) +#define RAZWI_INITIATOR_ID_X_Y_MME2_1 RAZWI_INITIATOR_ID_X_Y(4, 6) +#define RAZWI_INITIATOR_ID_X_Y_MME3_0 RAZWI_INITIATOR_ID_X_Y(5, 6) +#define RAZWI_INITIATOR_ID_X_Y_MME3_1 RAZWI_INITIATOR_ID_X_Y(6, 6) +#define RAZWI_INITIATOR_ID_X_Y_TPC6 RAZWI_INITIATOR_ID_X_Y(7, 6) +#define RAZWI_INITIATOR_ID_X_Y_TPC7_NIC4_NIC5 RAZWI_INITIATOR_ID_X_Y(8, 6)#define PSOC_ETR_AXICTL_PROTCTRLBIT1_SHIFT 1
drivers/net/hyperv/netvsc_drv.c +1 -1
@@ -367,7 +367,7 @@ static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb, }rcu_read_unlock (); -while (unlikely (txq >= ndev->real_num_tx_queues)) +while (txq >= ndev->real_num_tx_queues) txq -= ndev->real_num_tx_queues;return txq;
drivers/nvme/host/fc.c +1 -0
@@ -2158,6 +2158,7 @@ nvme_fc_term_aen_ops(struct nvme_fc_ctrl *ctrl)struct nvme_fc_fcp_op *aen_op;int i; +cancel_work_sync (&ctrl->ctrl.async_event_work); aen_op = ctrl->aen_ops;for (i =0 ; i <NVME_NR_AEN_COMMANDS ; i++, aen_op++) {__nvme_fc_exit_request (ctrl, aen_op);
drivers/nvme/host/rdma.c +1 -0
@@ -809,6 +809,7 @@ static void nvme_rdma_destroy_admin_queue(struct nvme_rdma_ctrl *ctrl,blk_mq_free_tag_set (ctrl->ctrl.admin_tagset); }if (ctrl->async_event_sqe.data) { +cancel_work_sync (&ctrl->ctrl.async_event_work);nvme_rdma_free_qe (ctrl->device->dev, &ctrl->async_event_sqe,sizeof (struct nvme_command ),DMA_TO_DEVICE ); ctrl->async_event_sqe.data =NULL ;
drivers/nvme/host/tcp.c +1 -0
@@ -1567,6 +1567,7 @@ static struct blk_mq_tag_set *nvme_tcp_alloc_tagset(struct nvme_ctrl *nctrl,static void nvme_tcp_free_admin_queue (struct nvme_ctrl *ctrl) {if (to_tcp_ctrl (ctrl)->async_req.pdu) { +cancel_work_sync (&ctrl->async_event_work);nvme_tcp_free_async_req (to_tcp_ctrl (ctrl));to_tcp_ctrl (ctrl)->async_req.pdu =NULL ; }
drivers/nvme/target/loop.c +3 -0
@@ -583,6 +583,9 @@ static struct nvme_ctrl *nvme_loop_create_ctrl(struct device *dev,if (ret) goto out_put_ctrl; + changed =nvme_change_ctrl_state (&ctrl->ctrl,NVME_CTRL_CONNECTING ); +WARN_ON_ONCE (!changed); + ret = -ENOMEM ; ctrl->ctrl.sqsize = opts->queue_size -1 ;
drivers/phy/ti/phy-omap-usb2.c +40 -7
82 lines not on this page · raw message
drivers/rapidio/Kconfig +1 -1
@@ -37,7 +37,7 @@ config RAPIDIO_ENABLE_RX_TX_PORTS config RAPIDIO_DMA_ENGINE bool "DMA Engine support for RapidIO" depends on RAPIDIO - select DMADEVICES + depends on DMADEVICES select DMA_ENGINE help Say Y here if you want to use DMA Engine frameork for RapidIO data
drivers/regulator/pwm-regulator.c +1 -1
@@ -279,7 +279,7 @@ static int pwm_regulator_init_table(struct platform_device *pdev,return ret; } - drvdata->state = -EINVAL ; + drvdata->state = -ENOTRECOVERABLE ; drvdata->duty_cycle_table = duty_cycle_table; drvdata->desc.ops = &pwm_regulator_voltage_table_ops; drvdata->desc.n_voltages = length /sizeof (*duty_cycle_table);
drivers/s390/crypto/zcrypt_ccamisc.c +4 -4
@@ -1685,9 +1685,9 @@ int cca_findcard2(u32 **apqns, u32 *nr_apqns, u16 cardnr, u16 domain, *nr_apqns =0 ;/* fetch status of all crypto cards */ - device_status =kmalloc_array (MAX_ZDEV_ENTRIES_EXT , -sizeof (struct zcrypt_device_status_ext ), -GFP_KERNEL ); + device_status =kvmalloc_array (MAX_ZDEV_ENTRIES_EXT , +sizeof (struct zcrypt_device_status_ext ), +GFP_KERNEL );if (!device_status)return -ENOMEM ;zcrypt_device_status_mask_ext (device_status);
@@ -1755,7 +1755,7 @@ int cca_findcard2(u32 **apqns, u32 *nr_apqns, u16 cardnr, u16 domain, verify =0 ; } -kfree (device_status); +kvfree (device_status);return rc; }EXPORT_SYMBOL (cca_findcard2);
drivers/scsi/libfc/fc_disc.c +0 -2
@@ -634,8 +634,6 @@ static void fc_disc_gpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,fc_frame_free (fp); out:kref_put (&rdata->kref, fc_rport_destroy); -if (!IS_ERR (fp)) -fc_frame_free (fp); }/**
drivers/scsi/libsas/sas_discover.c +2 -1
@@ -182,10 +182,11 @@ int sas_notify_lldd_dev_found(struct domain_device *dev)pr_warn ("driver on host %s cannot handle device %016llx, error:%d\n" ,dev_name (sas_ha->dev),SAS_ADDR (dev->sas_addr), res); +return res; }set_bit (SAS_DEV_FOUND , &dev->state);kref_get (&dev->kref); -return res; +return 0 ; }
drivers/scsi/lpfc/lpfc_els.c +6 -1
@@ -3512,6 +3512,9 @@ lpfc_issue_els_rdf(struct lpfc_vport *vport, uint8_t retry) FC_TLV_DESC_LENGTH_FROM_SZ(prdf->reg_d1)); prdf->reg_d1.reg_desc.count =cpu_to_be32 (ELS_RDF_REG_TAG_CNT ); prdf->reg_d1.desc_tags[0 ] =cpu_to_be32 (ELS_DTAG_LNK_INTEGRITY ); + prdf->reg_d1.desc_tags[1 ] =cpu_to_be32 (ELS_DTAG_DELIVERY ); + prdf->reg_d1.desc_tags[2 ] =cpu_to_be32 (ELS_DTAG_PEER_CONGEST ); + prdf->reg_d1.desc_tags[3 ] =cpu_to_be32 (ELS_DTAG_CONGESTION ); lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, "Issue RDF: did:x%x",
@@ -4644,7 +4647,9 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, out:if (ndlp &&NLP_CHK_NODE_ACT (ndlp) && shost) {spin_lock_irq (shost->host_lock); - ndlp->nlp_flag &= ~(NLP_ACC_REGLOGIN |NLP_RM_DFLT_RPI ); +if (mbox) + ndlp->nlp_flag &= ~NLP_ACC_REGLOGIN ; + ndlp->nlp_flag &= ~NLP_RM_DFLT_RPI ;spin_unlock_irq (shost->host_lock);/* If the node is not being used by another discovery thread,
drivers/scsi/lpfc/lpfc_hw4.h +1 -1
@@ -4797,7 +4797,7 @@ struct send_frame_wqe {uint32_t fc_hdr_wd5;/* word 15 */ }; -#define ELS_RDF_REG_TAG_CNT 1 +#define ELS_RDF_REG_TAG_CNT 4struct lpfc_els_rdf_reg_desc {struct fc_df_desc_fpin_reg reg_desc;/* descriptor header */ __be32 desc_tags[ELS_RDF_REG_TAG_CNT ];
drivers/scsi/pm8001/pm8001_sas.c +1 -1
@@ -818,7 +818,7 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha, res =pm8001_tag_alloc (pm8001_ha, &ccb_tag);if (res) -return res; + goto ex_err; ccb = &pm8001_ha->ccb_info[ccb_tag]; ccb->device = pm8001_dev; ccb->ccb_tag = ccb_tag;
drivers/spi/spi-loopback-test.c +1 -1
@@ -90,7 +90,7 @@ static struct spi_test spi_tests[] = { { .description = "tx/rx-transfer - crossing PAGE_SIZE", .fill_option = FILL_COUNT_8, - .iterate_len = { ITERATE_MAX_LEN }, + .iterate_len = { ITERATE_LEN }, .iterate_tx_align = ITERATE_ALIGN, .iterate_rx_align = ITERATE_ALIGN, .transfer_count = 1,
drivers/spi/spi.c +7 -2
@@ -1305,8 +1305,6 @@ static int spi_transfer_one_message(struct spi_controller *ctlr,if (msg->status && ctlr->handle_err) ctlr->handle_err (ctlr, msg); -spi_res_release (ctlr, msg); -spi_finalize_current_message (ctlr);return ret;
@@ -1694,6 +1692,13 @@ void spi_finalize_current_message(struct spi_controller *ctlr)spi_unmap_msg (ctlr, mesg); +/* In the prepare_messages callback the spi bus has the opportunity to +* split a transfer to smaller chunks. +* Release splited transfers here since spi_map_msg is done on the +* splited transfers. +*/ +spi_res_release (ctlr, mesg); +if (ctlr->cur_msg_prepared && ctlr->unprepare_message) { ret = ctlr->unprepare_message (ctlr, mesg);if (ret) {
drivers/thunderbolt/eeprom.c +16 -4
@@ -7,6 +7,7 @@*/ #include <linux/crc32.h> +#include <linux/delay.h> #include <linux/property.h> #include <linux/slab.h> #include "tb.h"
@@ -389,8 +390,8 @@ static int tb_drom_parse_entries(struct tb_switch *sw)struct tb_drom_entry_header *entry = (void *) (sw->drom + pos);if (pos +1 == drom_size || pos + entry->len > drom_size || !entry->len) { -tb_sw_warn (sw,"drom buffer overrun, aborting\n" ); -return -EIO ; +tb_sw_warn (sw,"DROM buffer overrun\n" ); +return -EILSEQ ; }switch (entry->type) {
@@ -526,7 +527,8 @@ int tb_drom_read(struct tb_switch *sw)u16 size;u32 crc;struct tb_drom_header *header; -int res; +int res, retries =1 ; +if (sw->drom)return 0 ;
@@ -611,7 +613,17 @@ int tb_drom_read(struct tb_switch *sw)tb_sw_warn (sw,"drom device_rom_revision %#x unknown\n" , header->device_rom_revision); -return tb_drom_parse_entries (sw); + res =tb_drom_parse_entries (sw); +/* If the DROM parsing fails, wait a moment and retry once */ +if (res == -EILSEQ && retries--) { +tb_sw_warn (sw,"parsing DROM failed, retrying\n" ); +msleep (100 ); + res =tb_drom_read_n (sw,0 , sw->drom, size); +if (!res) + goto parse; + } + +return res; err:kfree (sw->drom); sw->drom =NULL ;
drivers/tty/serial/8250/8250_pci.c +11 -0
@@ -5566,6 +5566,17 @@ static const struct pci_device_id serial_pci_tbl[] = {PCI_ANY_ID ,PCI_ANY_ID , 0, 0, pbn_wch384_4 }, +/* +* Realtek RealManage +*/ + { PCI_VENDOR_ID_REALTEK, 0x816a, +PCI_ANY_ID ,PCI_ANY_ID , + 0, 0, pbn_b0_1_115200 }, + + { PCI_VENDOR_ID_REALTEK, 0x816b, +PCI_ANY_ID ,PCI_ANY_ID , + 0, 0, pbn_b0_1_115200 }, +/* Fintek PCI serial cards */ { PCI_DEVICE(0x1c29, 0x1104), .driver_data = pbn_fintek_4 }, { PCI_DEVICE(0x1c29, 0x1108), .driver_data = pbn_fintek_8 },
drivers/tty/serial/serial_core.c +20 -24
81 lines not on this page · raw message
drivers/usb/class/usblp.c +5 -0
@@ -827,6 +827,11 @@ static ssize_t usblp_read(struct file *file, char __user *buffer, size_t len, loif (rv <0 )return rv; +if (!usblp->present) { + count = -ENODEV ; + goto done; + } +if ((avail = usblp->rstatus) <0 ) {printk (KERN_ERR "usblp%d: error %d reading from printer\n" , usblp->minor, (int )avail);
drivers/usb/core/quirks.c +4 -0
@@ -397,6 +397,10 @@ static const struct usb_device_id usb_quirk_list[] = {/* Generic RTL8153 based ethernet adapters */ { USB_DEVICE(0x0bda, 0x8153), .driver_info = USB_QUIRK_NO_LPM }, + /* SONiX USB DEVICE Touchpad */ + { USB_DEVICE(0x0c45, 0x7056), .driver_info = + USB_QUIRK_IGNORE_REMOTE_WAKEUP }, + /* Action Semiconductor flash disk */ { USB_DEVICE(0x10d6, 0x2200), .driver_info = USB_QUIRK_STRING_FETCH_255 },
drivers/usb/host/ehci-hcd.c +1 -0
@@ -22,6 +22,7 @@#include <linux/interrupt.h> #include <linux/usb.h> #include <linux/usb/hcd.h> +#include <linux/usb/otg.h> #include <linux/moduleparam.h> #include <linux/dma-mapping.h> #include <linux/debugfs.h>
drivers/usb/host/ehci-hub.c +0 -1
@@ -14,7 +14,6 @@*/ /*-------------------------------------------------------------------------*/ -#include <linux/usb/otg.h> #define PORT_WAKE_BITS (PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E)
drivers/usb/storage/uas.c +12 -2
@@ -662,8 +662,7 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,if (devinfo->resetting) { cmnd->result =DID_ERROR <<16 ; cmnd->scsi_done (cmnd); -spin_unlock_irqrestore (&devinfo->lock, flags); -return 0 ; + goto zombie; }/* Find a free uas-tag */
@@ -699,6 +698,16 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd, cmdinfo->state &= ~(SUBMIT_DATA_IN_URB |SUBMIT_DATA_OUT_URB ); err =uas_submit_urbs (cmnd, devinfo); +/* +* in case of fatal errors the SCSI layer is peculiar +* a command that has finished is a success for the purpose +* of queueing, no matter how fatal the error +*/ +if (err == -ENODEV ) { + cmnd->result =DID_ERROR <<16 ; + cmnd->scsi_done (cmnd); + goto zombie; + }if (err) {/* If we did nothing, give up now */ if (cmdinfo->state &SUBMIT_STATUS_URB ) {
@@ -709,6 +718,7 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd, } devinfo->cmnd[idx] = cmnd; +zombie:spin_unlock_irqrestore (&devinfo->lock, flags);return 0 ; }
drivers/usb/typec/ucsi/ucsi.c +16 -6
@@ -216,14 +216,18 @@ void ucsi_altmode_update_active(struct ucsi_connector *con) con->partner_altmode[i] == altmode); } -static u8 ucsi_altmode_next_mode (struct typec_altmode **alt,u16 svid) +static int ucsi_altmode_next_mode (struct typec_altmode **alt,u16 svid) {u8 mode =1 ;int i; -for (i =0 ; alt[i]; i++) +for (i =0 ; alt[i]; i++) { +if (i >MODE_DISCOVERY_MAX ) +return -ERANGE ; +if (alt[i]->svid == svid) mode++; + }return mode; }
@@ -258,8 +262,11 @@ static int ucsi_register_altmode(struct ucsi_connector *con, goto err; } - desc->mode =ucsi_altmode_next_mode (con->port_altmode, - desc->svid); + ret =ucsi_altmode_next_mode (con->port_altmode, desc->svid); +if (ret <0 ) +return ret; + + desc->mode = ret;switch (desc->svid) {case USB_TYPEC_DP_SID :
@@ -292,8 +299,11 @@ static int ucsi_register_altmode(struct ucsi_connector *con, goto err; } - desc->mode =ucsi_altmode_next_mode (con->partner_altmode, - desc->svid); + ret =ucsi_altmode_next_mode (con->partner_altmode, desc->svid); +if (ret <0 ) +return ret; + + desc->mode = ret; alt =typec_partner_register_altmode (con->partner, desc);if (IS_ERR (alt)) {
drivers/usb/typec/ucsi/ucsi_acpi.c +1 -1
@@ -78,7 +78,7 @@ static int ucsi_acpi_sync_write(struct ucsi *ucsi, unsigned int offset,if (ret) goto out_clear_bit; -if (!wait_for_completion_timeout (&ua->complete,msecs_to_jiffies (5000 ))) +if (!wait_for_completion_timeout (&ua->complete,60 *HZ )) ret = -ETIMEDOUT ; out_clear_bit:
drivers/video/fbdev/core/fbcon.c +1 -1
@@ -2018,7 +2018,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width,struct fb_var_screeninfo var = info->var;int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh; -if (ops->p && ops->p->userfont &&FNTSIZE (vc->vc_font.data)) { +if (p->userfont &&FNTSIZE (vc->vc_font.data)) {int size;int pitch =PITCH (vc->vc_font.width);
fs/cifs/inode.c +4 -0
@@ -1017,6 +1017,8 @@ cifs_get_inode_info(struct inode **inode,if (cifs_sb->mnt_cifs_flags &CIFS_MOUNT_MODE_FROM_SID ) { rc =cifs_acl_to_fattr (cifs_sb, &fattr, *inode, true, full_path, fid); +if (rc == -EREMOTE ) + rc =0 ;if (rc) {cifs_dbg (FYI ,"%s: Get mode from SID failed. rc=%d\n" , __func__, rc);
@@ -1025,6 +1027,8 @@ cifs_get_inode_info(struct inode **inode, }else if (cifs_sb->mnt_cifs_flags &CIFS_MOUNT_CIFS_ACL ) { rc =cifs_acl_to_fattr (cifs_sb, &fattr, *inode, false, full_path, fid); +if (rc == -EREMOTE ) + rc =0 ;if (rc) {cifs_dbg (FYI ,"%s: Getting ACL failed with error: %d\n" , __func__, rc);
fs/f2fs/data.c +3 -0
@@ -3463,6 +3463,9 @@ static int check_direct_IO(struct inode *inode, struct iov_iter *iter,unsigned long align = offset |iov_iter_alignment (iter);struct block_device *bdev = inode->i_sb->s_bdev; +if (iov_iter_rw (iter) ==READ && offset >=i_size_read (inode)) +return 1 ; +if (align & blocksize_mask) {if (bdev) blkbits =blksize_bits (bdev_logical_block_size (bdev));
fs/f2fs/node.c +3 -0
@@ -2375,6 +2375,9 @@ static int __f2fs_build_free_nids(struct f2fs_sb_info *sbi,if (unlikely (nid >= nm_i->max_nid)) nid =0 ; +if (unlikely (nid %NAT_ENTRY_PER_BLOCK )) + nid =NAT_BLOCK_OFFSET (nid) *NAT_ENTRY_PER_BLOCK ; +/* Enough entries */ if (nm_i->nid_cnt[FREE_NID ] >=NAT_ENTRY_PER_BLOCK )return 0 ;
fs/nfs/nfs4proc.c +9 -2
@@ -3272,8 +3272,10 @@ static int _nfs4_do_setattr(struct inode *inode,/* Servers should only apply open mode checks for file size changes */ truncate = (arg->iap->ia_valid &ATTR_SIZE ) ? true : false; -if (!truncate) +if (!truncate) { +nfs4_inode_make_writeable (inode); goto zero_stateid; + }if (nfs4_copy_delegation_stateid (inode,FMODE_WRITE , &arg->stateid, &delegation_cred)) {/* Use that stateid */
@@ -7271,7 +7273,12 @@ int nfs4_lock_delegation_recall(struct file_lock *fl, struct nfs4_state *state, err =nfs4_set_lock_state (state, fl);if (err !=0 )return err; - err =_nfs4_do_setlk (state,F_SETLK , fl,NFS_LOCK_NEW ); +do { + err =_nfs4_do_setlk (state,F_SETLK , fl,NFS_LOCK_NEW ); +if (err != -NFS4ERR_DELAY ) +break ; +ssleep (1 ); + }while (err == -NFS4ERR_DELAY );return nfs4_handle_delegation_recall_error (server, state, stateid, fl, err); }
include/linux/cpuhotplug.h +0 -1
@@ -141,7 +141,6 @@ enum cpuhp_state {/* Must be the last timer callback */ CPUHP_AP_DUMMY_TIMER_STARTING ,CPUHP_AP_ARM_XEN_STARTING , -CPUHP_AP_ARM_KVMPV_STARTING ,CPUHP_AP_ARM_CORESIGHT_STARTING ,CPUHP_AP_ARM_CORESIGHT_CTI_STARTING , CPUHP_AP_ARM64_ISNDEP_STARTING,
include/linux/dax.h +19 -2
@@ -58,6 +58,8 @@ static inline void set_dax_synchronous(struct dax_device *dax_dev) {__set_dax_synchronous (dax_dev); } +bool dax_supported (struct dax_device *dax_dev,struct block_device *bdev, +int blocksize,sector_t start,sector_t len);/* * Check if given mapping is supported by the file / underlying device. */
@@ -104,6 +106,12 @@ static inline bool dax_synchronous(struct dax_device *dax_dev)static inline void set_dax_synchronous (struct dax_device *dax_dev) { } +static inline bool dax_supported (struct dax_device *dax_dev, +struct block_device *bdev,int blocksize,sector_t start, +sector_t len) +{ +return false; +}static inline bool daxdev_mapping_supported (struct vm_area_struct *vma,struct dax_device *dax_dev) {
@@ -189,14 +197,23 @@ static inline void dax_unlock_page(struct page *page, dax_entry_t cookie) }#endif +#if IS_ENABLED (CONFIG_DAX )int dax_read_lock (void );void dax_read_unlock (int id); +#else +static inline int dax_read_lock (void ) +{ +return 0 ; +} + +static inline void dax_read_unlock (int id) +{ +} +#endif /* CONFIG_DAX */ bool dax_alive (struct dax_device *dax_dev);void *dax_get_private (struct dax_device *dax_dev);long dax_direct_access (struct dax_device *dax_dev,pgoff_t pgoff,long nr_pages,void **kaddr,pfn_t *pfn); -bool dax_supported (struct dax_device *dax_dev,struct block_device *bdev, -int blocksize,sector_t start,sector_t len);size_t dax_copy_from_iter (struct dax_device *dax_dev,pgoff_t pgoff,void *addr,size_t bytes,struct iov_iter *i); size_t dax_copy_to_iter(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
include/linux/i2c-algo-pca.h +15 -0
@@ -53,6 +53,20 @@#define I2C_PCA_CON_SI 0x08/* Serial Interrupt */ #define I2C_PCA_CON_CR 0x07/* Clock Rate (MASK) */ +/** +* struct pca_i2c_bus_settings - The configured PCA i2c bus settings +* @mode: Configured i2c bus mode +* @tlow: Configured SCL LOW period +* @thi: Configured SCL HIGH period +* @clock_freq: The configured clock frequency +*/ +struct pca_i2c_bus_settings { +int mode; +int tlow; +int thi; +int clock_freq; +}; +struct i2c_algo_pca_data {void *data;/* private low level data */ void (*write_byte) (void *data,int reg,int val);
@@ -64,6 +78,7 @@ struct i2c_algo_pca_data {* For PCA9665, use the frequency you want here. */ unsigned int i2c_clock;unsigned int chip; +struct pca_i2c_bus_settings bus_settings; };int i2c_pca_add_bus (struct i2c_adapter *);
include/linux/percpu-rwsem.h +4 -4
@@ -60,7 +60,7 @@ static inline void percpu_down_read(struct percpu_rw_semaphore *sem)* anything we did within this RCU-sched read-size critical section. */ if (likely (rcu_sync_is_idle (&sem->rss))) -__this_cpu_inc (*sem->read_count); +this_cpu_inc (*sem->read_count);else __percpu_down_read (sem, false);/* Unconditional memory barrier */ /*
@@ -79,7 +79,7 @@ static inline bool percpu_down_read_trylock(struct percpu_rw_semaphore *sem)* Same as in percpu_down_read(). */ if (likely (rcu_sync_is_idle (&sem->rss))) -__this_cpu_inc (*sem->read_count); +this_cpu_inc (*sem->read_count);else ret =__percpu_down_read (sem, true);/* Unconditional memory barrier */ preempt_enable ();
@@ -103,7 +103,7 @@ static inline void percpu_up_read(struct percpu_rw_semaphore *sem)* Same as in percpu_down_read(). */ if (likely (rcu_sync_is_idle (&sem->rss))) { -__this_cpu_dec (*sem->read_count); +this_cpu_dec (*sem->read_count); }else {/* * slowpath; reader will only ever wake a single blocked
@@ -115,7 +115,7 @@ static inline void percpu_up_read(struct percpu_rw_semaphore *sem)* aggregate zero, as that is the only time it matters) they * will also see our critical section. */ -__this_cpu_dec (*sem->read_count); +this_cpu_dec (*sem->read_count);rcuwait_wake_up (&sem->writer); }preempt_enable ();
include/linux/serial_core.h +1 -0
@@ -248,6 +248,7 @@ struct uart_port {unsigned char hub6;/* this should be in the 8250 driver */ unsigned char suspended; +unsigned char console_reinit;const char *name;/* port name */ struct attribute_group *attr_group;/* port specific attributes */ const struct attribute_group **tty_groups;/* all attributes (serial core use only) */
include/sound/soc.h +4 -0
@@ -1205,6 +1205,8 @@ struct snd_soc_pcm_runtime { ((i) < (rtd)->num_cpus + (rtd)->num_codecs) && \ ((dai) = (rtd)->dais[i]); \ (i)++) +#define for_each_rtd_dais_rollback (rtd, i, dai) \ + for (; (--(i) >= 0) && ((dai) = (rtd)->dais[i]);)void snd_soc_close_delayed_work (struct snd_soc_pcm_runtime *rtd);
@@ -1373,6 +1375,8 @@ void snd_soc_unregister_dai(struct snd_soc_dai *dai);struct snd_soc_dai *snd_soc_find_dai (const struct snd_soc_dai_link_component *dlc); +struct snd_soc_dai *snd_soc_find_dai_with_mutex ( +const struct snd_soc_dai_link_component *dlc);#include <sound/soc-dai.h>
include/uapi/linux/kvm.h +3 -2
@@ -789,9 +789,10 @@ struct kvm_ppc_resize_hpt {#define KVM_VM_PPC_HV 1#define KVM_VM_PPC_PR 2 -/* on MIPS, 0 forces trap & emulate, 1 forces VZ ASE */ -#define KVM_VM_MIPS_TE 0 +/* on MIPS, 0 indicates auto, 1 forces VZ ASE, 2 forces trap & emulate */ +#define KVM_VM_MIPS_AUTO 0#define KVM_VM_MIPS_VZ 1 +#define KVM_VM_MIPS_TE 2#define KVM_S390_SIE_PAGE_OFFSET 1
kernel/kprobes.c +8 -1
@@ -2108,6 +2108,9 @@ static void kill_kprobe(struct kprobe *p)lockdep_assert_held (&kprobe_mutex); +if (WARN_ON_ONCE (kprobe_gone (p))) +return ; + p->flags |=KPROBE_FLAG_GONE ;if (kprobe_aggrprobe (p)) {/*
@@ -2365,7 +2368,10 @@ static int kprobes_module_callback(struct notifier_block *nb,mutex_lock (&kprobe_mutex);for (i =0 ; i <KPROBE_TABLE_SIZE ; i++) { head = &kprobe_table[i]; -hlist_for_each_entry (p, head, hlist) +hlist_for_each_entry (p, head, hlist) { +if (kprobe_gone (p)) +continue ; +if (within_module_init ((unsigned long )p->addr, mod) || (checkcore &&within_module_core ((unsigned long )p->addr, mod))) {
@@ -2382,6 +2388,7 @@ static int kprobes_module_callback(struct notifier_block *nb,*/ kill_kprobe (p); } + } }if (val ==MODULE_STATE_GOING )remove_module_kprobe_blacklist (mod);
kernel/locking/lockdep.c +29 -6
@@ -3923,13 +3923,18 @@ static int separate_irq_context(struct task_struct *curr,static int mark_lock (struct task_struct *curr,struct held_lock *this,enum lock_usage_bit new_bit) { -unsigned int new_mask =1 << new_bit, ret =1 ; +unsigned int old_mask, new_mask, ret =1 ;if (new_bit >=LOCK_USAGE_STATES ) {DEBUG_LOCKS_WARN_ON (1 );return 0 ; } +if (new_bit ==LOCK_USED && this->read) + new_bit =LOCK_USED_READ ; + + new_mask =1 << new_bit; +/* * If already set then do not dirty the cacheline, * nor do any checks:
@@ -3942,13 +3947,22 @@ static int mark_lock(struct task_struct *curr, struct held_lock *this,/* * Make sure we didn't race: */ -if (unlikely (hlock_class (this)->usage_mask & new_mask)) { -graph_unlock (); -return 1 ; - } +if (unlikely (hlock_class (this)->usage_mask & new_mask)) + goto unlock; + old_mask =hlock_class (this)->usage_mask;hlock_class (this)->usage_mask |= new_mask; +/* +* Save one usage_traces[] entry and map both LOCK_USED and +* LOCK_USED_READ onto the same entry. +*/ +if (new_bit ==LOCK_USED || new_bit ==LOCK_USED_READ ) { +if (old_mask & (LOCKF_USED |LOCKF_USED_READ )) + goto unlock; + new_bit =LOCK_USED ; + } +if (!(hlock_class (this)->usage_traces[new_bit] =save_trace ()))return 0 ;
@@ -3962,6 +3976,7 @@ static int mark_lock(struct task_struct *curr, struct held_lock *this,return 0 ; } +unlock:graph_unlock ();/*
@@ -4896,12 +4911,20 @@ static void verify_lock_unused(struct lockdep_map *lock, struct held_lock *hlock {#ifdef CONFIG_PROVE_LOCKING struct lock_class *class =look_up_lock_class (lock, subclass); +unsigned long mask =LOCKF_USED ;/* if it doesn't have a class (yet), it certainly hasn't been used yet */ if (!class)return ; -if (!(class->usage_mask &LOCK_USED )) +/* +* READ locks only conflict with USED, such that if we only ever use +* READ locks, there is no deadlock possible -- RCU. +*/ +if (!hlock->read) + mask |=LOCKF_USED_READ ; + +if (!(class->usage_mask & mask))return ; hlock->class_idx = class - lock_classes;
kernel/locking/lockdep_internals.h +2 -0
@@ -19,6 +19,7 @@ enum lock_usage_bit {#include "lockdep_states.h" #undef LOCKDEP_STATELOCK_USED , +LOCK_USED_READ , LOCK_USAGE_STATES };
@@ -40,6 +41,7 @@ enum {#include "lockdep_states.h" #undef LOCKDEP_STATE __LOCKF(USED) + __LOCKF(USED_READ) };#define LOCKDEP_STATE (__STATE) LOCKF_ENABLED_##__STATE |
kernel/locking/percpu-rwsem.c +2 -2
@@ -45,7 +45,7 @@ EXPORT_SYMBOL_GPL(percpu_free_rwsem);static bool __percpu_down_read_trylock (struct percpu_rw_semaphore *sem) { -__this_cpu_inc (*sem->read_count); +this_cpu_inc (*sem->read_count);/* * Due to having preemption disabled the decrement happens on
@@ -71,7 +71,7 @@ static bool __percpu_down_read_trylock(struct percpu_rw_semaphore *sem)if (likely (!atomic_read_acquire (&sem->block)))return true; -__this_cpu_dec (*sem->read_count); +this_cpu_dec (*sem->read_count);/* Prod writer to re-evaluate readers_active_check() */ rcuwait_wake_up (&sem->writer);
mm/huge_memory.c +23 -19
60 lines not on this page · raw message
mm/ksm.c +4 -0
@@ -2585,6 +2585,10 @@ struct page *ksm_might_need_to_copy(struct page *page,return page;/* let do_swap_page report the error */ new_page =alloc_page_vma (GFP_HIGHUSER_MOVABLE , vma, address); +if (new_page &&mem_cgroup_charge (new_page, vma->vm_mm,GFP_KERNEL )) { +put_page (new_page); + new_page =NULL ; + }if (new_page) {copy_user_highpage (new_page, page, address, vma);
mm/memory_hotplug.c +14 -0
@@ -1557,6 +1557,20 @@ static int __ref __offline_pages(unsigned long start_pfn,/* check again */ ret =walk_system_ram_range (start_pfn, end_pfn - start_pfn,NULL , check_pages_isolated_cb); +/* +* per-cpu pages are drained in start_isolate_page_range, but if +* there are still pages that are not free, make sure that we +* drain again, because when we isolated range we might +* have raced with another thread that was adding pages to pcp +* list. +* +* Forward progress should be still guaranteed because +* pages on the pcp list can only belong to MOVABLE_ZONE +* because has_unmovable_pages explicitly checks for +* PageBuddy on freed pages on other zones. +*/ +if (ret) +drain_all_pages (zone); }while (ret);/* Ok, all of our target is isolated.
mm/page_isolation.c +8 -0
@@ -170,6 +170,14 @@ __first_valid_page(unsigned long pfn, unsigned long nr_pages)* pageblocks we may have modified and return -EBUSY to caller. This * prevents two threads from simultaneously working on overlapping ranges. * +* Please note that there is no strong synchronization with the page allocator +* either. Pages might be freed while their page blocks are marked ISOLATED. +* In some cases pages might still end up on pcp lists and that would allow +* for their allocation even when they are in fact isolated already. Depending +* on how strong of a guarantee the caller needs drain_all_pages might be needed +* (e.g. __offline_pages will need to call it after check for isolated range for +* a next retry). +* * Return: the number of isolated pageblocks on success and -EBUSY if any part * of range cannot be isolated. */
mm/percpu.c +1 -1
@@ -1300,7 +1300,7 @@ static struct pcpu_chunk * __init pcpu_alloc_first_chunk(unsigned long tmp_addr,/* allocate chunk */ alloc_size =sizeof (struct pcpu_chunk ) + -BITS_TO_LONGS (region_size >>PAGE_SHIFT ); +BITS_TO_LONGS (region_size >>PAGE_SHIFT ) *sizeof (unsigned long ); chunk =memblock_alloc (alloc_size,SMP_CACHE_BYTES );if (!chunk) panic("%s: Failed to allocate %zu bytes\n", __func__,
mm/vmscan.c +8 -0
@@ -2619,6 +2619,14 @@ static void shrink_node_memcgs(pg_data_t *pgdat, struct scan_control *sc)unsigned long reclaimed;unsigned long scanned; +/* +* This loop can become CPU-bound when target memcgs +* aren't eligible for reclaim - either because they +* don't have any reclaimable pages, or because their +* memory is explicitly protected. Avoid soft lockups. +*/ +cond_resched (); +switch (mem_cgroup_protected (target_memcg, memcg)) {case MEMCG_PROT_MIN :/*
net/core/skbuff.c +7 -3
@@ -5988,9 +5988,13 @@ static int pskb_carve_inside_nonlinear(struct sk_buff *skb, const u32 off,if (skb_has_frag_list (skb))skb_clone_fraglist (skb); -if (k ==0 ) { -/* split line is in frag list */ -pskb_carve_frag_list (skb, shinfo, off - pos, gfp_mask); +/* split line is in frag list */ +if (k ==0 &&pskb_carve_frag_list (skb, shinfo, off - pos, gfp_mask)) { +/* skb_frag_unref() is not needed here as shinfo->nr_frags = 0. */ +if (skb_has_frag_list (skb)) +kfree_skb_list (skb_shinfo (skb)->frag_list); +kfree (data); +return -ENOMEM ; }skb_release_data (skb);
net/mptcp/protocol.c +6 -2
@@ -605,8 +605,10 @@ static int mptcp_sendmsg_frag(struct sock *sk, struct sock *ssk,if (!psize)return -EINVAL ; -if (!sk_wmem_schedule (sk, psize + dfrag->overhead)) +if (!sk_wmem_schedule (sk, psize + dfrag->overhead)) { +iov_iter_revert (&msg->msg_iter, psize);return -ENOMEM ; + } }else { offset = dfrag->offset; psize =min_t (size_t, dfrag->data_len, avail_size);
@@ -617,8 +619,10 @@ static int mptcp_sendmsg_frag(struct sock *sk, struct sock *ssk,*/ ret =do_tcp_sendpages (ssk, page, offset, psize, msg->msg_flags |MSG_SENDPAGE_NOTLAST |MSG_DONTWAIT ); -if (ret <=0 ) +if (ret <=0 ) { +iov_iter_revert (&msg->msg_iter, psize);return ret; + } frag_truesize += ret;if (!retransmission) {
net/sunrpc/rpcb_clnt.c +2 -2
@@ -982,8 +982,8 @@ static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr, p =xdr_inline_decode (xdr, len);if (unlikely (p ==NULL )) goto out_fail; -dprintk ("RPC: %5u RPCB_%s reply: %s\n" , req->rq_task->tk_pid, - req->rq_task->tk_msg.rpc_proc->p_name, (char *)p); +dprintk ("RPC: %5u RPCB_%s reply: %*pE\n" , req->rq_task->tk_pid, + req->rq_task->tk_msg.rpc_proc->p_name, len, (char *)p);if (rpc_uaddr2sockaddr (req->rq_xprt->xprt_net, (char *)p, len, sap,sizeof (address)) ==0 )
net/sunrpc/xprtrdma/verbs.c +2 -0
@@ -933,6 +933,8 @@ static void rpcrdma_req_reset(struct rpcrdma_req *req)rpcrdma_regbuf_dma_unmap (req->rl_sendbuf);rpcrdma_regbuf_dma_unmap (req->rl_recvbuf); + +frwr_reset (req); }/* ASSUMPTION: the rb_allreqs list is stable for the duration,
scripts/kconfig/qconf.cc +1 -1
@@ -1263,7 +1263,7 @@ void ConfigInfoView::clicked(const QUrl &url) } free(result); - delete data; + delete[] data; } QMenu* ConfigInfoView::createStandardContextMenu(const QPoint & pos)
sound/pci/hda/patch_realtek.c +78 -1
133 lines not on this page · raw message
sound/soc/codecs/rt1308-sdw.c +2 -2
@@ -684,8 +684,8 @@ static int rt1308_sdw_probe(struct sdw_slave *slave,/* Regmap Initialization */ regmap =devm_regmap_init_sdw (slave, &rt1308_sdw_regmap); -if (!regmap) -return -EINVAL ; +if (IS_ERR (regmap)) +return PTR_ERR (regmap);rt1308_sdw_init (&slave->dev, regmap, slave);
sound/soc/codecs/rt700-sdw.c +2 -2
@@ -452,8 +452,8 @@ static int rt700_sdw_probe(struct sdw_slave *slave,/* Regmap Initialization */ sdw_regmap =devm_regmap_init_sdw (slave, &rt700_sdw_regmap); -if (!sdw_regmap) -return -EINVAL ; +if (IS_ERR (sdw_regmap)) +return PTR_ERR (sdw_regmap); regmap =devm_regmap_init (&slave->dev,NULL , &slave->dev, &rt700_regmap);
sound/soc/codecs/rt711-sdw.c +2 -2
@@ -452,8 +452,8 @@ static int rt711_sdw_probe(struct sdw_slave *slave,/* Regmap Initialization */ sdw_regmap =devm_regmap_init_sdw (slave, &rt711_sdw_regmap); -if (!sdw_regmap) -return -EINVAL ; +if (IS_ERR (sdw_regmap)) +return PTR_ERR (sdw_regmap); regmap =devm_regmap_init (&slave->dev,NULL , &slave->dev, &rt711_regmap);
sound/soc/codecs/rt715-sdw.c +2 -2
@@ -527,8 +527,8 @@ static int rt715_sdw_probe(struct sdw_slave *slave,/* Regmap Initialization */ sdw_regmap =devm_regmap_init_sdw (slave, &rt715_sdw_regmap); -if (!sdw_regmap) -return -EINVAL ; +if (IS_ERR (sdw_regmap)) +return PTR_ERR (sdw_regmap); regmap =devm_regmap_init (&slave->dev,NULL , &slave->dev, &rt715_regmap);
sound/soc/codecs/tlv320adcx140.c +3 -1
@@ -930,6 +930,8 @@ static int adcx140_i2c_probe(struct i2c_client *i2c,if (!adcx140)return -ENOMEM ; + adcx140->dev = &i2c->dev; + adcx140->gpio_reset =devm_gpiod_get_optional (adcx140->dev,"reset" ,GPIOD_OUT_LOW );if (IS_ERR (adcx140->gpio_reset))
@@ -957,7 +959,7 @@ static int adcx140_i2c_probe(struct i2c_client *i2c, ret);return ret; } - adcx140->dev = &i2c->dev; +i2c_set_clientdata (i2c, adcx140); return devm_snd_soc_register_component(&i2c->dev,
sound/soc/intel/boards/skl_hda_dsp_generic.c +1 -1
@@ -181,7 +181,7 @@ static void skl_set_hda_codec_autosuspend_delay(struct snd_soc_card *card)struct snd_soc_dai *dai;for_each_card_rtds (card, rtd) { -if (!strstr (rtd->dai_link->codecs->name,"ehdaudio" )) +if (!strstr (rtd->dai_link->codecs->name,"ehdaudio0D0" ))continue ; dai =asoc_rtd_to_codec (rtd,0 ); hda_pvt =snd_soc_component_get_drvdata (dai->component);
sound/soc/intel/haswell/sst-haswell-dsp.c +81 -104
247 lines not on this page · raw message
sound/soc/meson/axg-toddr.c +23 -1
@@ -18,6 +18,7 @@#define CTRL0_TODDR_SEL_RESAMPLE BIT(30)#define CTRL0_TODDR_EXT_SIGNED BIT(29)#define CTRL0_TODDR_PP_MODE BIT(28) +#define CTRL0_TODDR_SYNC_CH BIT(27)#define CTRL0_TODDR_TYPE_MASK GENMASK(15, 13)#define CTRL0_TODDR_TYPE (x) ((x) << 13)#define CTRL0_TODDR_MSB_POS_MASK GENMASK(12, 8)
@@ -189,10 +190,31 @@ static const struct axg_fifo_match_data axg_toddr_match_data = { .dai_drv = &axg_toddr_dai_drv }; +static int g12a_toddr_dai_startup (struct snd_pcm_substream *substream, +struct snd_soc_dai *dai) +{ +struct axg_fifo *fifo =snd_soc_dai_get_drvdata (dai); +int ret; + + ret =axg_toddr_dai_startup (substream, dai); +if (ret) +return ret; + +/* +* Make sure the first channel ends up in the at beginning of the output +* As weird as it looks, without this the first channel may be misplaced +* in memory, with a random shift of 2 channels. +*/ +regmap_update_bits (fifo->map,FIFO_CTRL0 ,CTRL0_TODDR_SYNC_CH , +CTRL0_TODDR_SYNC_CH ); + +return 0 ; +} +static const struct snd_soc_dai_ops g12a_toddr_ops = { .prepare = g12a_toddr_dai_prepare, .hw_params = axg_toddr_dai_hw_params, - .startup = axg_toddr_dai_startup, + .startup = g12a_toddr_dai_startup, .shutdown = axg_toddr_dai_shutdown, };
sound/soc/qcom/apq8016_sbc.c +1 -0
@@ -234,6 +234,7 @@ static int apq8016_sbc_platform_probe(struct platform_device *pdev)return -ENOMEM ; card->dev = dev; + card->owner =THIS_MODULE ; card->dapm_widgets = apq8016_sbc_dapm_widgets; card->num_dapm_widgets =ARRAY_SIZE (apq8016_sbc_dapm_widgets); data =apq8016_sbc_parse_of (card);
sound/soc/qcom/apq8096.c +1 -0
@@ -114,6 +114,7 @@ static int apq8096_platform_probe(struct platform_device *pdev)return -ENOMEM ; card->dev = dev; + card->owner =THIS_MODULE ;dev_set_drvdata (dev, card); ret =qcom_snd_parse_of (card);if (ret)
sound/soc/qcom/common.c +4 -2
@@ -45,8 +45,10 @@ int qcom_snd_parse_of(struct snd_soc_card *card)for_each_child_of_node (dev->of_node, np) { dlc =devm_kzalloc (dev,2 *sizeof (*dlc),GFP_KERNEL ); -if (!dlc) -return -ENOMEM ; +if (!dlc) { + ret = -ENOMEM ; + goto err; + } link->cpus = &dlc[0 ]; link->platforms = &dlc[1 ];
sound/soc/qcom/sdm845.c +1 -0
@@ -557,6 +557,7 @@ static int sdm845_snd_platform_probe(struct platform_device *pdev) card->dapm_widgets = sdm845_snd_widgets; card->num_dapm_widgets =ARRAY_SIZE (sdm845_snd_widgets); card->dev = dev; + card->owner =THIS_MODULE ;dev_set_drvdata (dev, card); ret =qcom_snd_parse_of (card);if (ret)
sound/soc/qcom/storm.c +1 -0
@@ -96,6 +96,7 @@ static int storm_platform_probe(struct platform_device *pdev)return -ENOMEM ; card->dev = &pdev->dev; + card->owner =THIS_MODULE ; ret =snd_soc_of_parse_card_name (card,"qcom,model" );if (ret) {
sound/soc/soc-core.c +13 -0
@@ -834,6 +834,19 @@ struct snd_soc_dai *snd_soc_find_dai( }EXPORT_SYMBOL_GPL (snd_soc_find_dai); +struct snd_soc_dai *snd_soc_find_dai_with_mutex ( +const struct snd_soc_dai_link_component *dlc) +{ +struct snd_soc_dai *dai; + +mutex_lock (&client_mutex); + dai =snd_soc_find_dai (dlc); +mutex_unlock (&client_mutex); + +return dai; +} +EXPORT_SYMBOL_GPL (snd_soc_find_dai_with_mutex); +static int soc_dai_link_sanity_check (struct snd_soc_card *card,struct snd_soc_dai_link *link) {
sound/soc/soc-dai.c +2 -2
@@ -410,14 +410,14 @@ void snd_soc_dai_link_set_capabilities(struct snd_soc_dai_link *dai_link) supported_codec = false;for_each_link_cpus (dai_link, i, cpu) { - dai =snd_soc_find_dai (cpu); + dai =snd_soc_find_dai_with_mutex (cpu);if (dai &&snd_soc_dai_stream_valid (dai, direction)) { supported_cpu = true;break ; } }for_each_link_codecs (dai_link, i, codec) { - dai =snd_soc_find_dai (codec); + dai =snd_soc_find_dai_with_mutex (codec);if (dai &&snd_soc_dai_stream_valid (dai, direction)) { supported_codec = true;break ;
sound/soc/soc-pcm.c +1 -1
@@ -811,7 +811,7 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)return 0 ; config_err: -for_each_rtd_dais (rtd, i, dai) +for_each_rtd_dais_rollback (rtd, i, dai)snd_soc_dai_shutdown (dai, substream);snd_soc_link_shutdown (substream);
tools/perf/tests/bp_signal.c +4 -1
@@ -45,10 +45,13 @@ volatile long the_var;#if defined (__x86_64__)extern void __test_function (volatile long *ptr); asm ( +".pushsection .text;" ".globl __test_function\n" +".type __test_function, @function;" "__test_function:\n" "incq (%rdi)\n" -"ret\n" ); +"ret\n" +".popsection\n" );#else static void __test_function (volatile long *ptr) {
tools/perf/tests/pmu-events.c +5 -0
@@ -274,6 +274,7 @@ static int __test__pmu_event_aliases(char *pmu_name, int *count)int res =0 ;bool use_uncore_table;struct pmu_events_map *map =__test_pmu_get_events_map (); +struct perf_pmu_alias *a, *tmp;if (!map)return -1 ;
@@ -347,6 +348,10 @@ static int __test__pmu_event_aliases(char *pmu_name, int *count) pmu_name, alias->name); } +list_for_each_entry_safe (a, tmp, &aliases, list) { +list_del (&a->list); +perf_pmu_free_alias (a); + }free (pmu);return res; }
tools/perf/tests/pmu.c +1 -0
@@ -173,6 +173,7 @@ int test__pmu(struct test *test __maybe_unused, int subtest __maybe_unused) ret =0 ; }while (0 ); +perf_pmu__del_formats (&formats);test_format_dir_put (format);return ret; }
tools/perf/util/evlist.c +8 -3
@@ -946,6 +946,10 @@ int perf_evlist__create_maps(struct evlist *evlist, struct target *target)perf_evlist__set_maps (&evlist->core, cpus, threads); +/* as evlist now has references, put count here */ +perf_cpu_map__put (cpus); +perf_thread_map__put (threads); +return 0 ; out_delete_threads:
@@ -1273,11 +1277,12 @@ static int perf_evlist__create_syswide_maps(struct evlist *evlist) goto out_put;perf_evlist__set_maps (&evlist->core, cpus, threads); -out: -return err; + +perf_thread_map__put (threads); out_put:perf_cpu_map__put (cpus); - goto out; +out: +return err; }int evlist__open (struct evlist *evlist)
tools/perf/util/metricgroup.c +5 -2
@@ -443,6 +443,9 @@ void metricgroup__print(bool metrics, bool metricgroups, char *filter,continue ;strlist__add (me->metrics, s); } + +if (!raw) +free (s); }free (omg); }
@@ -726,7 +729,7 @@ int metricgroup__parse_groups(const struct option *opt, ret =metricgroup__add_metric_list (str, metric_no_group, &extra_events, &group_list);if (ret)
Lines of this file are not shown. View the raw message.
tools/testing/selftests/vm/map_hugetlb.c +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.