Linux 5.5.4
Greg KH
maintainerI'm announcing the release of the 5.5.4 kernel.
All users of the 5.5 kernel series must upgrade.
The updated 5.5.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.5.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/iio/adc/adi,ad7606.yaml | 8 - Makefile | 2 arch/arc/boot/dts/axs10x_mb.dtsi | 1 arch/arm/boot/dts/am43xx-clocks.dtsi | 54 ++++++++ arch/arm/boot/dts/at91sam9260.dtsi | 12 - arch/arm/boot/dts/at91sam9261.dtsi | 6 arch/arm/boot/dts/at91sam9263.dtsi | 6 arch/arm/boot/dts/at91sam9g45.dtsi | 8 - arch/arm/boot/dts/at91sam9rl.dtsi | 8 - arch/arm/boot/dts/meson8.dtsi | 4 arch/arm/boot/dts/meson8b.dtsi | 4 arch/arm/boot/dts/sama5d3.dtsi | 28 ++-- arch/arm/boot/dts/sama5d3_can.dtsi | 4 arch/arm/boot/dts/sama5d3_tcb1.dtsi | 1 arch/arm/boot/dts/sama5d3_uart.dtsi | 4 arch/arm/crypto/chacha-glue.c | 4 arch/arm/mach-at91/pm.c | 9 + arch/arm/mm/init.c | 2 arch/arm64/boot/dts/marvell/armada-3720-uDPU.dts | 4 arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts | 2 arch/arm64/boot/dts/qcom/msm8998-mtp.dtsi | 1 arch/arm64/boot/dts/qcom/msm8998.dtsi | 2 arch/arm64/boot/dts/renesas/r8a77990-ebisu.dts | 1 arch/arm64/kernel/cpufeature.c | 39 +++++- arch/arm64/kernel/entry.S | 5 arch/arm64/kernel/fpsimd.c | 30 ++++ arch/arm64/kernel/ptrace.c | 21 +++ arch/arm64/kvm/hyp/switch.c | 10 + arch/arm64/kvm/va_layout.c | 56 +++----- arch/mips/loongson64/platform.c | 3 arch/powerpc/Kconfig.debug | 2 arch/powerpc/mm/pgtable_32.c | 1 arch/powerpc/platforms/pseries/iommu.c | 54 ++++---- arch/powerpc/platforms/pseries/papr_scm.c | 2 arch/powerpc/platforms/pseries/vio.c | 2 arch/x86/boot/compressed/acpi.c | 6 arch/x86/kernel/alternative.c | 1 crypto/testmgr.c | 20 ++- drivers/base/regmap/regmap.c | 17 +- drivers/clk/meson/g12a.c | 1 drivers/crypto/atmel-sha.c | 7 - drivers/crypto/axis/artpec6_crypto.c | 2 drivers/crypto/caam/caamalg_qi2.c | 2 drivers/dma/dma-axi-dmac.c | 10 + drivers/i2c/busses/i2c-cros-ec-tunnel.c | 3 drivers/infiniband/core/addr.c | 2 drivers/infiniband/core/cma.c | 2 drivers/infiniband/core/ib_core_uverbs.c | 2 drivers/infiniband/core/sa_query.c | 4 drivers/infiniband/core/umem.c | 9 - drivers/infiniband/core/uverbs_main.c | 32 ++--- drivers/infiniband/hw/i40iw/i40iw_main.c | 2 drivers/infiniband/hw/mlx4/cm.c | 29 ---- drivers/infiniband/hw/mlx4/main.c | 20 ++- drivers/infiniband/hw/mlx5/ib_virt.c | 28 +--- drivers/infiniband/hw/mlx5/mr.c | 2 drivers/infiniband/hw/mlx5/odp.c | 19 ++- drivers/infiniband/ulp/srp/ib_srp.c | 3 drivers/iommu/arm-smmu-v3.c | 1 drivers/md/bcache/journal.c | 80 +++++++++++- drivers/media/i2c/adv748x/adv748x.h | 8 - drivers/mfd/Kconfig | 1 drivers/mtd/nand/onenand/onenand_base.c | 82 ++++++------- drivers/mtd/parsers/sharpslpart.c | 4 drivers/net/netdevsim/bus.c | 64 +++++++++- drivers/net/netdevsim/dev.c | 13 +- drivers/net/netdevsim/health.c | 2 drivers/net/netdevsim/netdevsim.h | 4 drivers/net/wireless/ath/ath10k/pci.c | 19 ++- drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c | 5 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 2 drivers/net/wireless/intel/iwlwifi/mvm/tdls.c | 10 + drivers/net/wireless/intel/iwlwifi/mvm/time-event.c | 71 +++++++++-- drivers/net/wireless/intel/iwlwifi/mvm/time-event.h | 4 drivers/net/wireless/marvell/libertas/cfg.c | 2 drivers/net/wireless/marvell/mwifiex/scan.c | 7 + drivers/net/wireless/marvell/mwifiex/wmm.c | 4 drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c | 3 drivers/pci/controller/pci-tegra.c | 2 drivers/pci/iov.c | 9 - drivers/pci/pcie/aer.c | 1 drivers/pci/setup-bus.c | 20 ++- drivers/pci/switch/switchtec.c | 4 drivers/pinctrl/intel/pinctrl-baytrail.c | 19 +-- drivers/pinctrl/qcom/pinctrl-msm.c | 5 drivers/pinctrl/sh-pfc/pfc-r8a7778.c | 4 drivers/pinctrl/sh-pfc/pfc-r8a77965.c | 6 drivers/platform/x86/intel_mid_powerbtn.c | 5 drivers/rtc/rtc-cmos.c | 2 drivers/rtc/rtc-hym8563.c | 2 drivers/rtc/rtc-mt6397.c | 10 - drivers/scsi/ufs/ufshcd.c | 3 drivers/soc/qcom/rpmhpd.c | 2 drivers/watchdog/qcom-wdt.c | 2 drivers/watchdog/stm32_iwdg.c | 18 ++ fs/nfs/Kconfig | 2 fs/nfs/direct.c | 4 fs/nfs/nfs3xdr.c | 5 fs/nfs/nfs42proc.c | 36 ++++- fs/nfs/nfs4_fs.h | 4 fs/nfs/nfs4proc.c | 19 ++- fs/nfs/nfs4renewd.c | 5 fs/nfs/nfs4state.c | 4 fs/nfs/nfs4trace.h | 33 ++--- fs/nfs/nfs4xdr.c | 5 fs/nfs/pnfs.c | 4 fs/nfs/pnfs_nfs.c | 7 - fs/nfs/write.c | 12 + include/linux/mlx5/driver.h | 5 include/rdma/ib_verbs.h | 3 kernel/sched/core.c | 6 net/core/bpf_sk_storage.c | 5 net/core/sock_map.c | 28 ++-- net/netfilter/nf_flow_table_core.c | 8 - net/netfilter/nf_flow_table_offload.c | 11 + security/selinux/avc.c | 42 +++--- security/selinux/hooks.c | 26 +++- security/selinux/include/avc.h | 13 +- sound/soc/soc-generic-dmaengine-pcm.c | 16 +- tools/bpf/bpftool/prog.c | 2 tools/power/acpi/Makefile.config | 2 tools/testing/selftests/bpf/prog_tests/sockmap_basic.c | 74 +++++++++++ virt/kvm/arm/aarch32.c | 14 +- virt/kvm/arm/arch_timer.c | 3 virt/kvm/arm/mmu.c | 3 virt/kvm/arm/pmu.c | 42 ++++-- virt/kvm/arm/vgic/vgic-its.c | 3 127 files changed, 1106 insertions(+), 463 deletions(-)
Akshu Agrawal (1):
i2c: cros-ec-tunnel: Fix slave device enumeration
Alexandre Belloni (2):
ARM: dts: at91: sama5d3: fix maximum peripheral clock rates
ARM: dts: at91: sama5d3: define clock rate range for tcb1
Alexandru Elisei (1):
KVM: arm64: Treat emulated TVAL TimerValue as a signed 32-bit integer
Alexey Kardashevskiy (1):
powerpc/pseries: Allow not having ibm, hypertas-functions::hcall-multi-tce for DDW
Andy Shevchenko (2):
rtc: cmos: Stop using shared IRQ
pinctrl: baytrail: Allocate IRQ chip dynamic
Ard Biesheuvel (1):
crypto: arm/chacha - fix build failured when kernel mode NEON is disabled
Artemy Kovalyov (1):
RDMA/umem: Fix ib_umem_find_best_pgsz()
Avraham Stern (1):
iwlwifi: mvm: avoid use after free for pmsr request
Bartosz Golaszewski (1):
mfd: max77650: Select REGMAP_IRQ in Kconfig
Baruch Siach (1):
arm64: dts: marvell: clearfog-gt-8k: fix switch cpu port node
Bean Huo (1):
scsi: ufs: Fix ufshcd_probe_hba() reture value in case ufshcd_scsi_add_wlus() fails
Ben Whitten (1):
regmap: fix writes to non incrementing registers
Beniamin Bia (1):
dt-bindings: iio: adc: ad7606: Fix wrong maxItems value
Bjorn Andersson (1):
arm64: dts: qcom: msm8998-mtp: Add alias for blsp1_uart3
Bryan O'Donoghue (1):
ath10k: pci: Only dump ATH10K_MEM_REGION_TYPE_IOREG when safe
Christophe Leroy (2):
powerpc/ptdump: Fix W+X verification call in mark_rodata_ro() powerpc/ptdump: Only enable PPC_CHECK_WX with STRICT_KERNEL_RWX
Christophe Roullier (1):
drivers: watchdog: stm32_iwdg: set WDOG_HW_RUNNING at probe
Chuhong Yuan (1):
dmaengine: axi-dmac: add a check for devm_regmap_init_mmio
Claudiu Beznea (2):
ARM: at91: pm: use SAM9X60 PMC's compatible
ARM: at91: pm: use of_device_id array to find the proper shdwc node
Coly Li (1):
bcache: avoid unnecessary btree nodes flushing in btree_flush_write()
Danit Goldberg (1):
IB/mlx5: Return the administrative GUID if exists
Dave Hansen (1):
x86/alternatives: add missing insn.h include
Dongdong Liu (1):
PCI/AER: Initialize aer_fifo
Douglas Anderson (1):
soc: qcom: rpmhpd: Set 'active_only' for active only power domains
Emmanuel Grumbach (1):
iwlwifi: mvm: fix TDLS discovery with the new firmware API
Eric Auger (3):
KVM: arm/arm64: vgic-its: Fix restoration of unmapped collections
KVM: arm64: pmu: Don't increment SW_INCR if PMCR.E is unset
KVM: arm64: pmu: Fix chained SW_INCR counters
Eric Biggers (3):
crypto: testmgr - don't try to decrypt uninitialized buffers
crypto: artpec6 - return correct error code for failed setkey()
crypto: atmel-sha - fix error handling when setting hmac key
Gavin Shan (1):
KVM: arm/arm64: Fix young bit from mmu notifier
Geert Uytterhoeven (3):
nfs: NFS_SWAP should depend on SWAP
pinctrl: sh-pfc: r8a77965: Fix DU_DOTCLKIN3 drive/bias control
pinctrl: sh-pfc: r8a7778: Fix duplicate SDSELF_B and SD1_CLK_B
Greg Kroah-Hartman (1):
Linux 5.5.4
Gustavo A. R. Silva (1):
media: i2c: adv748x: Fix unsafe macros
Horia Geantă (1):
crypto: caam/qi2 - fix typo in algorithm's driver name
Håkon Bugge (2):
IB/mlx4: Fix leak in id_map_find_del
RDMA/netlink: Do not always generate an ACK for some netlink operations
Ingo van Lil (1):
ARM: dts: at91: Reenable UART TX pull-ups
Jack Morgenstein (1):
IB/mlx4: Fix memory leak in add_gid error flow
Jakub Sitnicki (3):
bpf, sockmap: Don't sleep while holding RCU lock on tear-down bpf, sockhash: Synchronize_rcu before free'ing map selftests/bpf: Test freeing sockmap/sockhash with a socket in it
James Morse (2):
KVM: arm: Fix DFSR setting for non-LPAE aarch32 guests
KVM: arm: Make inject_abt32() inject an external abort instead
Jason Gunthorpe (3):
RDMA/core: Fix locking in ib_uverbs_event_read RDMA/mlx5: Fix handling of IOVA != user_va in ODP paths RDMA/core: Ensure that rdma_user_mmap_entry_remove() is a fence
Jeffrey Hugo (1):
arm64: dts: qcom: msm8998: Fix tcsr syscon size
Jerome Brunet (1):
clk: meson: g12a: fix missing uart2 in regmap table
Jose Abreu (1):
ARC: [plat-axs10x]: Add missing multicast filter number to GMAC node
Kuninori Morimoto (1):
arm64: dts: renesas: r8a77990: ebisu: Remove clkout-lr-synchronous from sound
Logan Gunthorpe (2):
PCI/switchtec: Fix vep_vector_number ioread width
PCI: Don't disable bridge BARs when assigning bus resources
Lorenz Bauer (1):
bpf, sockmap: Check update requirements after locking
Lorenzo Bianconi (1):
mt76: mt7615: fix max_nss in mt7615_eeprom_parse_hw_cap
Marcel Ziswiler (1):
PCI: tegra: Fix afi_pex2_ctrl reg offset for Tegra30
Mark Brown (1):
arm64: kernel: Correct annotation of end of el0_sync
Martin Blumenstingl (2):
ARM: dts: meson8: use the actual frequency for the GPU's 182.1MHz OPP
ARM: dts: meson8b: use the actual frequency for the GPU's 364MHz OPP
Martin KaFai Lau (1):
bpf: Improve bucket_log calculation logic
Michael Guralnik (1):
RDMA/uverbs: Verify MR access flags
Mika Westerberg (1):
platform/x86: intel_mid_powerbtn: Take a copy of ddata
Nathan Chancellor (1):
mtd: onenand_base: Adjust indentation in onenand_read_ops_nolock
Navid Emamdoost (1):
PCI/IOV: Fix memory leak in pci_iov_add_virtfn()
Nicolai Stange (2):
libertas: don't exit from lbs_ibss_join_existing() with RCU read lock held
libertas: make lbs_ibss_join_existing() return error code on rates overflow
Olga Kornievskaia (1):
NFSv4.x recover from pre-mature loss of openstateid
Olof Johansson (1):
ARM: 8949/1: mm: mark free_memmap as __init
Pablo Neira Ayuso (2):
netfilter: flowtable: fetch stats only if flow is still alive
netfilter: flowtable: restrict flow dissector match on meta ingress device
Parav Pandit (1):
RDMA/cma: Fix unbalanced cm_id reference count during address resolve
Paul Blakey (2):
netfilter: flowtable: Fix hardware flush order on nf_flow_table_cleanup
netfilter: flowtable: Fix missing flush hardware on table free
Paul Kocialkowski (1):
rtc: hym8563: Return -EINVAL if the time is known to be invalid
Qais Yousef (1):
sched/uclamp: Fix a bug in propagating uclamp value in new cgroups
Qing Xu (2):
mwifiex: Fix possible buffer overflows in mwifiex_ret_wmm_get_status()
mwifiex: Fix possible buffer overflows in mwifiex_cmd_append_vsie_tlv()
Ram Pai (1):
Revert "powerpc/pseries/iommu: Don't use dma_iommu_ops on secure guests"
Raul E Rangel (1):
i2c: cros-ec-tunnel: Fix ACPI identifier
Robert Milkowski (2):
NFSv4: try lease recovery on NFS4ERR_EXPIRED NFSv4.0: nfs4_do_fsinfo() should not do implicit lease renewals
Russell King (2):
arm64: dts: uDPU: fix broken ethernet
arm64: kvm: Fix IDMAP overlap with HYP VA
Sai Prakash Ranjan (1):
watchdog: qcom: Use platform_get_irq_optional() for bark irq
Sergey Gorenko (1):
IB/srp: Never use immediate data if it is disabled by a user
Shameer Kolothum (1):
iommu/arm-smmu-v3: Populate VMID field for CMDQ_OP_TLBI_NH_VA
Shengjiu Wang (1):
ASoC: soc-generic-dmaengine-pcm: Fix error handling
Stephen Boyd (1):
pinctrl: qcom: Don't lock around irq_set_irq_wake()
Stephen Smalley (3):
selinux: revert "stop passing MAY_NOT_BLOCK to the AVC upon follow_link"
selinux: fix regression introduced by move_mount(2) syscall
selinux: fall back to ref-walk if audit is required
Steven Clarkson (1):
x86/boot: Handle malformed SRAT tables during early ACPI parsing
Suzuki K Poulose (4):
arm64: cpufeature: Fix the type of no FP/SIMD capability
arm64: cpufeature: Set the FP/SIMD compat HWCAP bits properly
arm64: ptrace: nofpsimd: Fail FP/SIMD regset operations
arm64: nofpsmid: Handle TIF_FOREIGN_FPSTATE flag cleanly
Taehee Yoo (4):
netdevsim: fix using uninitialized resources
netdevsim: disable devlink reload when resources are being used
netdevsim: fix panic in nsim_dev_take_snapshot_write()
netdevsim: use __GFP_NOWARN to avoid memalloc warning
Tero Kristo (1):
ARM: dts: am43xx: add support for clkout1 clock
Tiezhu Yang (1):
MIPS: Loongson: Fix potential NULL dereference in loongson3_platform_init()
Toke Høiland-Jørgensen (1):
bpftool: Don't crash on missing xlated program instructions
Trond Myklebust (4):
NFS: Revalidate the file size on a fatal write error NFS/pnfs: Fix pnfs_generic_prepare_to_resend_writes()
NFS: Fix fix of show_nfs_errors
NFSv4: pnfs_roc() must use cred_fscmp() to compare creds
Tyrel Datwyler (1):
powerpc/pseries/vio: Fix iommu_table use-after-free refcount warning
Vaibhav Jain (1):
powerpc/papr_scm: Fix leaking 'bus_desc.provider_name' in some paths
Wei Yongjun (1):
rtc: mt6397: drop free_irq of devm_ allocated irq
Wesley Sheng (1):
PCI/switchtec: Use dma_set_mask_and_coherent()
Xiyu Yang (1):
RDMA/i40iw: fix a potential NULL pointer dereference
YueHaibing (1):
mtd: sharpslpart: Fix unsigned comparison to zero
Zhengyuan Liu (1):
tools/power/acpi: fix compilation error
Greg KH
maintainerDocumentation/devicetree/bindings/iio/adc/adi,ad7606.yaml +4 -4
@@ -82,7 +82,7 @@ properties: Must be the device tree identifier of the over-sampling mode pins. As the line is active high, it should be marked GPIO_ACTIVE_HIGH. - maxItems: 1 + maxItems: 3 adi,sw-mode: description:
@@ -125,9 +125,9 @@ examples: adi,conversion-start-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpio 27 GPIO_ACTIVE_HIGH>; adi,first-data-gpios = <&gpio 22 GPIO_ACTIVE_HIGH>; - adi,oversampling-ratio-gpios = <&gpio 18 GPIO_ACTIVE_HIGH - &gpio 23 GPIO_ACTIVE_HIGH - &gpio 26 GPIO_ACTIVE_HIGH>; + adi,oversampling-ratio-gpios = <&gpio 18 GPIO_ACTIVE_HIGH>, + <&gpio 23 GPIO_ACTIVE_HIGH>, + <&gpio 26 GPIO_ACTIVE_HIGH>; standby-gpios = <&gpio 24 GPIO_ACTIVE_LOW>; adi,sw-mode; };
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 5 -SUBLEVEL = 3 +SUBLEVEL = 4 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arc/boot/dts/axs10x_mb.dtsi +1 -0
@@ -78,6 +78,7 @@ gmac: ethernet@18000 { interrupt-names = "macirq"; phy-mode = "rgmii"; snps,pbl = < 32 >; + snps,multicast-filter-bins = <256>; clocks = <&apbclk>; clock-names = "stmmaceth"; max-speed = <100>;
arch/arm/boot/dts/am43xx-clocks.dtsi +54 -0
60 lines not on this page · raw message
arch/arm/boot/dts/at91sam9260.dtsi +6 -6
@@ -187,7 +187,7 @@ pinctrl_dbgu: dbgu-0 { usart0 { pinctrl_usart0: usart0-0 { atmel,pins = - <AT91_PIOB 4 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOB 4 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOB 5 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -221,7 +221,7 @@ pinctrl_usart0_ri: usart0_ri-0 { usart1 { pinctrl_usart1: usart1-0 { atmel,pins = - <AT91_PIOB 6 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOB 6 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOB 7 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -239,7 +239,7 @@ pinctrl_usart1_cts: usart1_cts-0 { usart2 { pinctrl_usart2: usart2-0 { atmel,pins = - <AT91_PIOB 8 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOB 8 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOB 9 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -257,7 +257,7 @@ pinctrl_usart2_cts: usart2_cts-0 { usart3 { pinctrl_usart3: usart3-0 { atmel,pins = - <AT91_PIOB 10 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOB 10 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOB 11 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -275,7 +275,7 @@ pinctrl_usart3_cts: usart3_cts-0 { uart0 { pinctrl_uart0: uart0-0 { atmel,pins = - <AT91_PIOA 31 AT91_PERIPH_B AT91_PINCTRL_NONE + <AT91_PIOA 31 AT91_PERIPH_B AT91_PINCTRL_PULL_UP AT91_PIOA 30 AT91_PERIPH_B AT91_PINCTRL_PULL_UP>; }; };
@@ -283,7 +283,7 @@ pinctrl_uart0: uart0-0 { uart1 { pinctrl_uart1: uart1-0 { atmel,pins = - <AT91_PIOB 12 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOB 12 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOB 13 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; }; };
arch/arm/boot/dts/at91sam9261.dtsi +3 -3
@@ -329,7 +329,7 @@ pinctrl_dbgu: dbgu-0 { usart0 { pinctrl_usart0: usart0-0 { atmel,pins = - <AT91_PIOC 8 AT91_PERIPH_A AT91_PINCTRL_NONE>, + <AT91_PIOC 8 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>, <AT91_PIOC 9 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -347,7 +347,7 @@ pinctrl_usart0_cts: usart0_cts-0 { usart1 { pinctrl_usart1: usart1-0 { atmel,pins = - <AT91_PIOC 12 AT91_PERIPH_A AT91_PINCTRL_NONE>, + <AT91_PIOC 12 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>, <AT91_PIOC 13 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -365,7 +365,7 @@ pinctrl_usart1_cts: usart1_cts-0 { usart2 { pinctrl_usart2: usart2-0 { atmel,pins = - <AT91_PIOC 14 AT91_PERIPH_A AT91_PINCTRL_NONE>, + <AT91_PIOC 14 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>, <AT91_PIOC 15 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
arch/arm/boot/dts/at91sam9263.dtsi +3 -3
@@ -183,7 +183,7 @@ pinctrl_dbgu: dbgu-0 { usart0 { pinctrl_usart0: usart0-0 { atmel,pins = - <AT91_PIOA 26 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOA 26 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOA 27 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -201,7 +201,7 @@ pinctrl_usart0_cts: usart0_cts-0 { usart1 { pinctrl_usart1: usart1-0 { atmel,pins = - <AT91_PIOD 0 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOD 0 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOD 1 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -219,7 +219,7 @@ pinctrl_usart1_cts: usart1_cts-0 { usart2 { pinctrl_usart2: usart2-0 { atmel,pins = - <AT91_PIOD 2 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOD 2 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOD 3 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
arch/arm/boot/dts/at91sam9g45.dtsi +4 -4
@@ -556,7 +556,7 @@ pinctrl_isi_data_10_11: isi-0-data-10-11 { usart0 { pinctrl_usart0: usart0-0 { atmel,pins = - <AT91_PIOB 19 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOB 19 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOB 18 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -574,7 +574,7 @@ pinctrl_usart0_cts: usart0_cts-0 { usart1 { pinctrl_usart1: usart1-0 { atmel,pins = - <AT91_PIOB 4 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOB 4 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOB 5 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -592,7 +592,7 @@ pinctrl_usart1_cts: usart1_cts-0 { usart2 { pinctrl_usart2: usart2-0 { atmel,pins = - <AT91_PIOB 6 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOB 6 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOB 7 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -610,7 +610,7 @@ pinctrl_usart2_cts: usart2_cts-0 { usart3 { pinctrl_usart3: usart3-0 { atmel,pins = - <AT91_PIOB 8 AT91_PERIPH_A AT91_PINCTRL_NONE + <AT91_PIOB 8 AT91_PERIPH_A AT91_PINCTRL_PULL_UP AT91_PIOB 9 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
arch/arm/boot/dts/at91sam9rl.dtsi +4 -4
@@ -682,7 +682,7 @@ pinctrl_tcb0_tiob2: tcb0_tiob2-0 { usart0 { pinctrl_usart0: usart0-0 { atmel,pins = - <AT91_PIOA 6 AT91_PERIPH_A AT91_PINCTRL_NONE>, + <AT91_PIOA 6 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>, <AT91_PIOA 7 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -721,7 +721,7 @@ pinctrl_usart0_sck: usart0_sck-0 { usart1 { pinctrl_usart1: usart1-0 { atmel,pins = - <AT91_PIOA 11 AT91_PERIPH_A AT91_PINCTRL_NONE>, + <AT91_PIOA 11 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>, <AT91_PIOA 12 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -744,7 +744,7 @@ pinctrl_usart1_sck: usart1_sck-0 { usart2 { pinctrl_usart2: usart2-0 { atmel,pins = - <AT91_PIOA 13 AT91_PERIPH_A AT91_PINCTRL_NONE>, + <AT91_PIOA 13 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>, <AT91_PIOA 14 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
@@ -767,7 +767,7 @@ pinctrl_usart2_sck: usart2_sck-0 { usart3 { pinctrl_usart3: usart3-0 { atmel,pins = - <AT91_PIOB 0 AT91_PERIPH_A AT91_PINCTRL_NONE>, + <AT91_PIOB 0 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>, <AT91_PIOB 1 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>; };
arch/arm/boot/dts/meson8.dtsi +2 -2
@@ -129,8 +129,8 @@ opp-1992000000 { gpu_opp_table: gpu-opp-table { compatible = "operating-points-v2"; - opp-182150000 { - opp-hz = /bits/ 64 <182150000>; + opp-182142857 { + opp-hz = /bits/ 64 <182142857>; opp-microvolt = <1150000>; }; opp-318750000 {
arch/arm/boot/dts/meson8b.dtsi +2 -2
@@ -125,8 +125,8 @@ opp-255000000 { opp-hz = /bits/ 64 <255000000>; opp-microvolt = <1100000>; }; - opp-364300000 { - opp-hz = /bits/ 64 <364300000>; + opp-364285714 { + opp-hz = /bits/ 64 <364285714>; opp-microvolt = <1100000>; }; opp-425000000 {
arch/arm/boot/dts/sama5d3.dtsi +14 -14
@@ -1188,49 +1188,49 @@ pioE_clk: pioE_clk { usart0_clk: usart0_clk { #clock-cells = <0>; reg = <12>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; usart1_clk: usart1_clk { #clock-cells = <0>; reg = <13>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; usart2_clk: usart2_clk { #clock-cells = <0>; reg = <14>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; usart3_clk: usart3_clk { #clock-cells = <0>; reg = <15>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; uart0_clk: uart0_clk { #clock-cells = <0>; reg = <16>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; twi0_clk: twi0_clk { reg = <18>; #clock-cells = <0>; - atmel,clk-output-range = <0 16625000>; + atmel,clk-output-range = <0 41500000>; }; twi1_clk: twi1_clk { #clock-cells = <0>; reg = <19>; - atmel,clk-output-range = <0 16625000>; + atmel,clk-output-range = <0 41500000>; }; twi2_clk: twi2_clk { #clock-cells = <0>; reg = <20>; - atmel,clk-output-range = <0 16625000>; + atmel,clk-output-range = <0 41500000>; }; mci0_clk: mci0_clk {
@@ -1246,19 +1246,19 @@ mci1_clk: mci1_clk { spi0_clk: spi0_clk { #clock-cells = <0>; reg = <24>; - atmel,clk-output-range = <0 133000000>; + atmel,clk-output-range = <0 166000000>; }; spi1_clk: spi1_clk { #clock-cells = <0>; reg = <25>; - atmel,clk-output-range = <0 133000000>; + atmel,clk-output-range = <0 166000000>; }; tcb0_clk: tcb0_clk { #clock-cells = <0>; reg = <26>; - atmel,clk-output-range = <0 133000000>; + atmel,clk-output-range = <0 166000000>; }; pwm_clk: pwm_clk {
@@ -1269,7 +1269,7 @@ pwm_clk: pwm_clk { adc_clk: adc_clk { #clock-cells = <0>; reg = <29>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; dma0_clk: dma0_clk {
@@ -1300,13 +1300,13 @@ isi_clk: isi_clk { ssc0_clk: ssc0_clk { #clock-cells = <0>; reg = <38>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; ssc1_clk: ssc1_clk { #clock-cells = <0>; reg = <39>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; sha_clk: sha_clk {
arch/arm/boot/dts/sama5d3_can.dtsi +2 -2
@@ -36,13 +36,13 @@ periphck { can0_clk: can0_clk { #clock-cells = <0>; reg = <40>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; can1_clk: can1_clk { #clock-cells = <0>; reg = <41>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; }; };
arch/arm/boot/dts/sama5d3_tcb1.dtsi +1 -0
@@ -22,6 +22,7 @@ periphck { tcb1_clk: tcb1_clk { #clock-cells = <0>; reg = <27>; + atmel,clk-output-range = <0 166000000>; }; }; };
arch/arm/boot/dts/sama5d3_uart.dtsi +2 -2
@@ -41,13 +41,13 @@ periphck { uart0_clk: uart0_clk { #clock-cells = <0>; reg = <16>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; uart1_clk: uart1_clk { #clock-cells = <0>; reg = <17>; - atmel,clk-output-range = <0 66000000>; + atmel,clk-output-range = <0 83000000>; }; }; };
arch/arm/crypto/chacha-glue.c +2 -2
@@ -115,7 +115,7 @@ static int chacha_stream_xor(struct skcipher_request *req,if (nbytes < walk.total) nbytes =round_down (nbytes, walk.stride); -if (!neon) { +if (!IS_ENABLED (CONFIG_KERNEL_MODE_NEON ) || !neon) {chacha_doarm (walk.dst.virt.addr, walk.src.virt.addr, nbytes, state, ctx->nrounds); state[12 ] +=DIV_ROUND_UP (nbytes,CHACHA_BLOCK_SIZE );
@@ -159,7 +159,7 @@ static int do_xchacha(struct skcipher_request *req, bool neon)chacha_init_generic (state, ctx->key, req->iv); -if (!neon) { +if (!IS_ENABLED (CONFIG_KERNEL_MODE_NEON ) || !neon) {hchacha_block_arm (state, subctx.key, ctx->nrounds); }else {kernel_neon_begin ();
arch/arm/mach-at91/pm.c +8 -1
@@ -691,6 +691,12 @@ static void __init at91_pm_use_default_mode(int pm_mode) soc_pm.data.suspend_mode =AT91_PM_ULP0 ; } +static const struct of_device_id atmel_shdwc_ids[] = { + { .compatible ="atmel,sama5d2-shdwc" }, + { .compatible ="microchip,sam9x60-shdwc" }, + {/* sentinel. */ } +}; +static void __init at91_pm_modes_init (void ) {struct device_node *np;
@@ -700,7 +706,7 @@ static void __init at91_pm_modes_init(void) !at91_is_pm_mode_active(AT91_PM_ULP1))return ; - np =of_find_compatible_node (NULL ,NULL ,"atmel,sama5d2-shdwc" ); + np =of_find_matching_node (NULL , atmel_shdwc_ids);if (!np) {pr_warn ("%s: failed to find shdwc!\n" , __func__); goto ulp1_default;
@@ -751,6 +757,7 @@ static const struct of_device_id atmel_pmc_ids[] __initconst = { { .compatible = "atmel,sama5d3-pmc", .data = &pmc_infos[1] }, { .compatible = "atmel,sama5d4-pmc", .data = &pmc_infos[1] }, { .compatible = "atmel,sama5d2-pmc", .data = &pmc_infos[1] }, + { .compatible = "microchip,sam9x60-pmc", .data = &pmc_infos[1] }, { /* sentinel */ }, };
arch/arm/mm/init.c +1 -1
@@ -324,7 +324,7 @@ static inline void poison_init_mem(void *s, size_t count) *p++ =0xe7fddef0 ; } -static inline void +static inline void __init free_memmap (unsigned long start_pfn,unsigned long end_pfn) {struct page *start_pg, *end_pg;
arch/arm64/boot/dts/marvell/armada-3720-uDPU.dts +4 -0
@@ -143,6 +143,7 @@ ð0 { phy-mode = "sgmii"; status = "okay"; managed = "in-band-status"; + phys = <&comphy1 0>; sfp = <&sfp_eth0>; };
@@ -150,11 +151,14 @@ ð1 { phy-mode = "sgmii"; status = "okay"; managed = "in-band-status"; + phys = <&comphy0 1>; sfp = <&sfp_eth1>; }; &usb3 { status = "okay"; + phys = <&usb2_utmi_otg_phy>; + phy-names = "usb2-utmi-otg-phy"; }; &uart0 {
arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts +2 -0
@@ -408,6 +408,8 @@ port@5 { reg = <5>; label = "cpu"; ethernet = <&cp1_eth2>; + phy-mode = "2500base-x"; + managed = "in-band-status"; }; };
arch/arm64/boot/dts/qcom/msm8998-mtp.dtsi +1 -0
@@ -9,6 +9,7 @@ / { aliases { serial0 = &blsp2_uart1; + serial1 = &blsp1_uart3; }; chosen {
arch/arm64/boot/dts/qcom/msm8998.dtsi +1 -1
@@ -987,7 +987,7 @@ ufsphy_lanes: lanes@1da7400 { tcsr_mutex_regs: syscon@1f40000 { compatible = "syscon"; - reg = <0x01f40000 0x20000>; + reg = <0x01f40000 0x40000>; }; tlmm: pinctrl@3400000 {
arch/arm64/boot/dts/renesas/r8a77990-ebisu.dts +0 -1
@@ -636,7 +636,6 @@ &rcar_sound { /* audio_clkout0/1/2/3 */ #clock-cells = <1>; clock-frequency = <12288000 11289600>; - clkout-lr-synchronous; status = "okay";
arch/arm64/kernel/cpufeature.c +35 -4
@@ -32,9 +32,7 @@ static unsigned long elf_hwcap __read_mostly;#define COMPAT_ELF_HWCAP_DEFAULT \ (COMPAT_HWCAP_HALF|COMPAT_HWCAP_THUMB|\ COMPAT_HWCAP_FAST_MULT|COMPAT_HWCAP_EDSP|\ - COMPAT_HWCAP_TLS|COMPAT_HWCAP_VFP|\ - COMPAT_HWCAP_VFPv3|COMPAT_HWCAP_VFPv4|\ - COMPAT_HWCAP_NEON|COMPAT_HWCAP_IDIV|\ + COMPAT_HWCAP_TLS|COMPAT_HWCAP_IDIV|\ COMPAT_HWCAP_LPAE)unsigned int compat_elf_hwcap__read_mostly =COMPAT_ELF_HWCAP_DEFAULT ;unsigned int compat_elf_hwcap2__read_mostly ;
@@ -1368,7 +1366,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { {/* FP/SIMD is not implemented */ .capability = ARM64_HAS_NO_FPSIMD, - .type = ARM64_CPUCAP_SYSTEM_FEATURE, + .type = ARM64_CPUCAP_BOOT_RESTRICTED_CPU_LOCAL_FEATURE, .min_field_value = 0, .matches = has_no_fpsimd, },
@@ -1596,6 +1594,12 @@ static const struct arm64_cpu_capabilities arm64_features[] = { .match_list = list, \ } +#define HWCAP_CAP_MATCH (match, cap_type, cap) \ + { \ + __HWCAP_CAP(#cap, cap_type, cap) \ + .matches = match, \ + } + #ifdef CONFIG_ARM64_PTR_AUTH static const struct arm64_cpu_capabilities ptr_auth_hwcap_addr_matches[] = { {
@@ -1669,8 +1673,35 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = { {}, }; +#ifdef CONFIG_COMPAT +static bool compat_has_neon (const struct arm64_cpu_capabilities *cap,int scope) +{ +/* +* Check that all of MVFR1_EL1.{SIMDSP, SIMDInt, SIMDLS} are available, +* in line with that of arm32 as in vfp_init(). We make sure that the +* check is future proof, by making sure value is non-zero. +*/ +u32 mvfr1; + +WARN_ON (scope ==SCOPE_LOCAL_CPU &&preemptible ()); +if (scope ==SCOPE_SYSTEM ) + mvfr1 =read_sanitised_ftr_reg (SYS_MVFR1_EL1 ); +else + mvfr1 =read_sysreg_s (SYS_MVFR1_EL1 ); + +return cpuid_feature_extract_unsigned_field (mvfr1,MVFR1_SIMDSP_SHIFT ) && +cpuid_feature_extract_unsigned_field (mvfr1,MVFR1_SIMDINT_SHIFT ) && +cpuid_feature_extract_unsigned_field (mvfr1,MVFR1_SIMDLS_SHIFT ); +} +#endif +static const struct arm64_cpu_capabilities compat_elf_hwcaps[] = { #ifdef CONFIG_COMPAT +HWCAP_CAP_MATCH (compat_has_neon,CAP_COMPAT_HWCAP ,COMPAT_HWCAP_NEON ), +HWCAP_CAP (SYS_MVFR1_EL1 ,MVFR1_SIMDFMAC_SHIFT ,FTR_UNSIGNED ,1 ,CAP_COMPAT_HWCAP , COMPAT_HWCAP_VFPv4), +/* Arm v8 mandates MVFR0.FPDP == {0, 2}. So, piggy back on this for the presence of VFP support */ +HWCAP_CAP (SYS_MVFR0_EL1 ,MVFR0_FPDP_SHIFT ,FTR_UNSIGNED ,2 ,CAP_COMPAT_HWCAP ,COMPAT_HWCAP_VFP ), +HWCAP_CAP (SYS_MVFR0_EL1 ,MVFR0_FPDP_SHIFT ,FTR_UNSIGNED ,2 ,CAP_COMPAT_HWCAP , COMPAT_HWCAP_VFPv3),HWCAP_CAP (SYS_ID_ISAR5_EL1 ,ID_ISAR5_AES_SHIFT ,FTR_UNSIGNED ,2 ,CAP_COMPAT_HWCAP2 ,COMPAT_HWCAP2_PMULL ),HWCAP_CAP (SYS_ID_ISAR5_EL1 ,ID_ISAR5_AES_SHIFT ,FTR_UNSIGNED ,1 ,CAP_COMPAT_HWCAP2 ,COMPAT_HWCAP2_AES ), HWCAP_CAP(SYS_ID_ISAR5_EL1, ID_ISAR5_SHA1_SHIFT, FTR_UNSIGNED, 1, CAP_COMPAT_HWCAP2, COMPAT_HWCAP2_SHA1),
arch/arm64/kernel/entry.S +4 -1
@@ -653,6 +653,7 @@ el0_sync: mov x0, sp bl el0_sync_handler b ret_to_user +ENDPROC(el0_sync) #ifdef CONFIG_COMPAT .align 6
@@ -661,16 +662,18 @@ el0_sync_compat: mov x0, sp bl el0_sync_compat_handler b ret_to_user -ENDPROC(el0_sync) +ENDPROC(el0_sync_compat) .align 6 el0_irq_compat: kernel_entry 0, 32 b el0_irq_naked +ENDPROC(el0_irq_compat) el0_error_compat: kernel_entry 0, 32 b el0_error_naked +ENDPROC(el0_error_compat) #endif .align 6
arch/arm64/kernel/fpsimd.c +27 -3
@@ -269,6 +269,7 @@ static void sve_free(struct task_struct *task)*/ static void task_fpsimd_load (void ) { +WARN_ON (!system_supports_fpsimd ());WARN_ON (!have_cpu_fpsimd_context ());if (system_supports_sve () &&test_thread_flag (TIF_SVE ))
@@ -289,6 +290,7 @@ static void fpsimd_save(void)this_cpu_ptr (&fpsimd_last_state);/* set by fpsimd_bind_task_to_cpu() or fpsimd_bind_state_to_cpu() */ +WARN_ON (!system_supports_fpsimd ());WARN_ON (!have_cpu_fpsimd_context ());if (!test_thread_flag (TIF_FOREIGN_FPSTATE )) {
@@ -1092,6 +1094,7 @@ void fpsimd_bind_task_to_cpu(void)struct fpsimd_last_state_struct *last =this_cpu_ptr (&fpsimd_last_state); +WARN_ON (!system_supports_fpsimd ()); last->st = ¤t->thread.uw.fpsimd_state; last->sve_state = current->thread.sve_state; last->sve_vl = current->thread.sve_vl;
@@ -1114,6 +1117,7 @@ void fpsimd_bind_state_to_cpu(struct user_fpsimd_state *st, void *sve_state,struct fpsimd_last_state_struct *last =this_cpu_ptr (&fpsimd_last_state); +WARN_ON (!system_supports_fpsimd ());WARN_ON (!in_softirq () && !irqs_disabled ()); last->st = st;
@@ -1128,8 +1132,19 @@ void fpsimd_bind_state_to_cpu(struct user_fpsimd_state *st, void *sve_state,*/ void fpsimd_restore_current_state (void ) { -if (!system_supports_fpsimd ()) +/* +* For the tasks that were created before we detected the absence of +* FP/SIMD, the TIF_FOREIGN_FPSTATE could be set via fpsimd_thread_switch(), +* e.g, init. This could be then inherited by the children processes. +* If we later detect that the system doesn't support FP/SIMD, +* we must clear the flag for all the tasks to indicate that the +* FPSTATE is clean (as we can't have one) to avoid looping for ever in +* do_notify_resume(). +*/ +if (!system_supports_fpsimd ()) { +clear_thread_flag (TIF_FOREIGN_FPSTATE );return ; + }get_cpu_fpsimd_context ();
@@ -1148,7 +1163,7 @@ void fpsimd_restore_current_state(void)*/ void fpsimd_update_current_state (struct user_fpsimd_state const *state) { -if (!system_supports_fpsimd ()) +if (WARN_ON (!system_supports_fpsimd ()))return ;get_cpu_fpsimd_context ();
@@ -1179,7 +1194,13 @@ void fpsimd_update_current_state(struct user_fpsimd_state const *state)void fpsimd_flush_task_state (struct task_struct *t) { t->thread.fpsimd_cpu =NR_CPUS ; - +/* +* If we don't support fpsimd, bail out after we have +* reset the fpsimd_cpu for this task and clear the +* FPSTATE. +*/ +if (!system_supports_fpsimd ()) +return ;barrier ();set_tsk_thread_flag (t,TIF_FOREIGN_FPSTATE );
@@ -1193,6 +1214,7 @@ void fpsimd_flush_task_state(struct task_struct *t)*/ static void fpsimd_flush_cpu_state (void ) { +WARN_ON (!system_supports_fpsimd ());__this_cpu_write (fpsimd_last_state.st,NULL );set_thread_flag (TIF_FOREIGN_FPSTATE ); }
@@ -1203,6 +1225,8 @@ static void fpsimd_flush_cpu_state(void)*/ void fpsimd_save_and_flush_cpu_state (void ) { +if (!system_supports_fpsimd ()) +return ;WARN_ON (preemptible ());__get_cpu_fpsimd_context ();fpsimd_save ();
arch/arm64/kernel/ptrace.c +21 -0
@@ -615,6 +615,13 @@ static int gpr_set(struct task_struct *target, const struct user_regset *regset,return 0 ; } +static int fpr_active (struct task_struct *target,const struct user_regset *regset) +{ +if (!system_supports_fpsimd ()) +return -ENODEV ; +return regset->n; +} +/* * TODO: update fp accessors for lazy context switching (sync/flush hwstate) */
@@ -637,6 +644,9 @@ static int fpr_get(struct task_struct *target, const struct user_regset *regset, unsigned int pos, unsigned int count, void *kbuf, void __user *ubuf) { + if (!system_supports_fpsimd()) + return -EINVAL; +if (target == current)fpsimd_preserve_current_state ();
@@ -676,6 +686,9 @@ static int fpr_set(struct task_struct *target, const struct user_regset *regset, {int ret; +if (!system_supports_fpsimd ()) +return -EINVAL ; + ret =__fpr_set (target, regset, pos, count, kbuf, ubuf,0 );if (ret)return ret;
@@ -1134,6 +1147,7 @@ static const struct user_regset aarch64_regsets[] = {*/ .size = sizeof(u32), .align = sizeof(u32), + .active = fpr_active, .get = fpr_get, .set = fpr_set },
@@ -1348,6 +1362,9 @@ static int compat_vfp_get(struct task_struct *target,compat_ulong_t fpscr;int ret, vregs_end_pos; +if (!system_supports_fpsimd ()) +return -EINVAL ; + uregs = &target->thread.uw.fpsimd_state;if (target == current)
@@ -1381,6 +1398,9 @@ static int compat_vfp_set(struct task_struct *target,compat_ulong_t fpscr;int ret, vregs_end_pos; +if (!system_supports_fpsimd ()) +return -EINVAL ; + uregs = &target->thread.uw.fpsimd_state; vregs_end_pos =VFP_STATE_SIZE -sizeof (compat_ulong_t);
@@ -1438,6 +1458,7 @@ static const struct user_regset aarch32_regsets[] = { .n = VFP_STATE_SIZE / sizeof(compat_ulong_t), .size = sizeof(compat_ulong_t), .align = sizeof(compat_ulong_t), + .active = fpr_active, .get = compat_vfp_get, .set = compat_vfp_set },
arch/arm64/kvm/hyp/switch.c +9 -1
@@ -28,7 +28,15 @@/* Check whether the FP regs were dirtied while in the host-side run loop: */ static bool __hyp_text update_fp_enabled(struct kvm_vcpu *vcpu) { -if (vcpu->arch.host_thread_info->flags & _TIF_FOREIGN_FPSTATE) +/* +* When the system doesn't support FP/SIMD, we cannot rely on +* the _TIF_FOREIGN_FPSTATE flag. However, we always inject an +* abort on the very first access to FP and thus we should never +* see KVM_ARM64_FP_ENABLED. For added safety, make sure we always +* trap the accesses. +*/ +if (!system_supports_fpsimd () || + vcpu->arch.host_thread_info->flags & _TIF_FOREIGN_FPSTATE) vcpu->arch.flags &= ~(KVM_ARM64_FP_ENABLED |KVM_ARM64_FP_HOST );
arch/arm64/kvm/va_layout.c +25 -31
88 lines not on this page · raw message
arch/mips/loongson64/platform.c +3 -0
@@ -27,6 +27,9 @@ static int __init loongson3_platform_init(void)continue ; pdev =kzalloc (sizeof (struct platform_device ),GFP_KERNEL ); +if (!pdev) +return -ENOMEM ; + pdev->name = loongson_sysconf.sensors[i].name; pdev->id = loongson_sysconf.sensors[i].id; pdev->dev.platform_data = &loongson_sysconf.sensors[i];
arch/powerpc/Kconfig.debug +1 -1
@@ -371,7 +371,7 @@ config PPC_PTDUMP config PPC_DEBUG_WX bool "Warn on W+X mappings at boot" - depends on PPC_PTDUMP + depends on PPC_PTDUMP && STRICT_KERNEL_RWX help Generate a warning if any W+X mappings are found at boot.
arch/powerpc/mm/pgtable_32.c +1 -0
@@ -218,6 +218,7 @@ void mark_rodata_ro(void)if (v_block_mapped ((unsigned long )_sinittext)) {mmu_mark_rodata_ro (); +ptdump_check_wx ();return ; }
arch/powerpc/platforms/pseries/iommu.c +30 -24
131 lines not on this page · raw message
arch/powerpc/platforms/pseries/papr_scm.c +2 -0
@@ -322,6 +322,7 @@ static int papr_scm_nvdimm_init(struct papr_scm_priv *p) p->bus =nvdimm_bus_register (NULL , &p->bus_desc);if (!p->bus) {dev_err (dev,"Error creating nvdimm bus %pOF\n" , p->dn); +kfree (p->bus_desc.provider_name);return -ENXIO ; }
@@ -477,6 +478,7 @@ static int papr_scm_remove(struct platform_device *pdev)nvdimm_bus_unregister (p->bus);drc_pmem_unbind (p); +kfree (p->bus_desc.provider_name);kfree (p);return 0 ;
arch/powerpc/platforms/pseries/vio.c +2 -0
@@ -1176,6 +1176,8 @@ static struct iommu_table *vio_build_iommu_table(struct vio_dev *dev)if (tbl ==NULL )return NULL ; +kref_init (&tbl->it_kref); +of_parse_dma_window (dev->dev.of_node, dma_window, &tbl->it_index, &offset, &size);
arch/x86/boot/compressed/acpi.c +6 -0
@@ -393,7 +393,13 @@ int count_immovable_mem_regions(void) table = table_addr +sizeof (struct acpi_table_srat );while (table +sizeof (struct acpi_subtable_header ) < table_end) { + sub_table = (struct acpi_subtable_header *)table; +if (!sub_table->length) { +debug_putstr ("Invalid zero length SRAT subtable.\n" ); +return 0 ; + } +if (sub_table->type ==ACPI_SRAT_TYPE_MEMORY_AFFINITY ) {struct acpi_srat_mem_affinity *ma;
arch/x86/kernel/alternative.c +1 -0
@@ -23,6 +23,7 @@#include <asm/nmi.h> #include <asm/cacheflush.h> #include <asm/tlbflush.h> +#include <asm/insn.h> #include <asm/io.h> #include <asm/fixmap.h>
crypto/testmgr.c +16 -4
@@ -2102,6 +2102,7 @@ static void generate_random_aead_testvec(struct aead_request *req,* If the key or authentication tag size couldn't be set, no need to * continue to encrypt. */ + vec->crypt_error =0 ;if (vec->setkey_error || vec->setauthsize_error) goto done;
@@ -2245,10 +2246,12 @@ static int test_aead_vs_generic_impl(const char *driver, req, tsgls);if (err) goto out; - err =test_aead_vec_cfg (driver,DECRYPT , &vec, vec_name, cfg, - req, tsgls); -if (err) - goto out; +if (vec.crypt_error ==0 ) { + err =test_aead_vec_cfg (driver,DECRYPT , &vec, vec_name, + cfg, req, tsgls); +if (err) + goto out; + }cond_resched (); } err =0 ;
@@ -2678,6 +2681,15 @@ static void generate_random_cipher_testvec(struct skcipher_request *req,skcipher_request_set_callback (req,0 , crypto_req_done, &wait);skcipher_request_set_crypt (req, &src, &dst, vec->len, iv); vec->crypt_error =crypto_wait_req (crypto_skcipher_encrypt (req), &wait); +if (vec->crypt_error !=0 ) { +/* +* The only acceptable error here is for an invalid length, so +* skcipher decryption should fail with the same error too. +* We'll test for this. But to keep the API usage well-defined, +* explicitly initialize the ciphertext buffer too. +*/ +memset ((u8 *)vec->ctext,0 , vec->len); + } done:snprintf (name, max_namelen,"\"random: len=%u klen=%u\"" , vec->len, vec->klen);
drivers/base/regmap/regmap.c +12 -5
@@ -1488,11 +1488,18 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg,WARN_ON (!map->bus); -/* Check for unwritable registers before we start */ -for (i =0 ; i < val_len / map->format.val_bytes; i++) -if (!regmap_writeable (map, - reg +regmap_get_offset (map, i))) -return -EINVAL ; +/* Check for unwritable or noinc registers in range +* before we start +*/ +if (!regmap_writeable_noinc (map, reg)) { +for (i =0 ; i < val_len / map->format.val_bytes; i++) { +unsigned int element = + reg +regmap_get_offset (map, i); +if (!regmap_writeable (map, element) || +regmap_writeable_noinc (map, element)) +return -EINVAL ; + } + }if (!map->cache_bypass && map->format.parse_val) {unsigned int ival;
drivers/clk/meson/g12a.c +1 -0
@@ -4692,6 +4692,7 @@ static struct clk_regmap *const g12a_clk_regmaps[] = { &g12a_bt656, &g12a_usb1_to_ddr, &g12a_mmc_pclk, + &g12a_uart2, &g12a_vpu_intr, &g12a_gic, &g12a_sd_emmc_a_clk0,
drivers/crypto/atmel-sha.c +1 -6
@@ -1918,12 +1918,7 @@ static int atmel_sha_hmac_setkey(struct crypto_ahash *tfm, const u8 *key, {struct atmel_sha_hmac_ctx *hmac =crypto_ahash_ctx (tfm); -if (atmel_sha_hmac_key_set (&hmac->hkey, key, keylen)) { -crypto_ahash_set_flags (tfm,CRYPTO_TFM_RES_BAD_KEY_LEN ); -return -EINVAL ; - } - -return 0 ; +return atmel_sha_hmac_key_set (&hmac->hkey, key, keylen); }static int atmel_sha_hmac_init (struct ahash_request *req)
drivers/crypto/axis/artpec6_crypto.c +1 -1
@@ -1251,7 +1251,7 @@ static int artpec6_crypto_aead_set_key(struct crypto_aead *tfm, const u8 *key,if (len !=16 && len !=24 && len !=32 ) {crypto_aead_set_flags (tfm,CRYPTO_TFM_RES_BAD_KEY_LEN ); -return -1 ; +return -EINVAL ; } ctx->key_length = len;
drivers/crypto/caam/caamalg_qi2.c +1 -1
@@ -2481,7 +2481,7 @@ static struct caam_aead_alg driver_aeads[] = { .cra_name = "echainiv(authenc(hmac(sha256)," "cbc(des)))", .cra_driver_name ="echainiv-authenc-" -"hmac-sha256-cbc-desi-" +"hmac-sha256-cbc-des-" "caam-qi2", .cra_blocksize = DES_BLOCK_SIZE, },
drivers/dma/dma-axi-dmac.c +9 -1
@@ -830,6 +830,7 @@ static int axi_dmac_probe(struct platform_device *pdev)struct dma_device *dma_dev;struct axi_dmac *dmac;struct resource *res; +struct regmap *regmap;int ret; dmac =devm_kzalloc (&pdev->dev,sizeof (*dmac),GFP_KERNEL );
@@ -921,10 +922,17 @@ static int axi_dmac_probe(struct platform_device *pdev)platform_set_drvdata (pdev, dmac); -devm_regmap_init_mmio (&pdev->dev, dmac->base, &axi_dmac_regmap_config); + regmap =devm_regmap_init_mmio (&pdev->dev, dmac->base, + &axi_dmac_regmap_config); +if (IS_ERR (regmap)) { + ret =PTR_ERR (regmap); + goto err_free_irq; + }return 0 ; +err_free_irq: +free_irq (dmac->irq, dmac); err_unregister_of:of_dma_controller_free (pdev->dev.of_node); err_unregister_device:
drivers/i2c/busses/i2c-cros-ec-tunnel.c +2 -1
@@ -273,6 +273,7 @@ static int ec_i2c_probe(struct platform_device *pdev) bus->adap.dev.parent = &pdev->dev; bus->adap.dev.of_node = pdev->dev.of_node; bus->adap.retries =I2C_MAX_RETRIES ; +ACPI_COMPANION_SET (&bus->adap.dev,ACPI_COMPANION (&pdev->dev)); err =i2c_add_adapter (&bus->adap);if (err)
@@ -298,7 +299,7 @@ static const struct of_device_id cros_ec_i2c_of_match[] = {MODULE_DEVICE_TABLE (of, cros_ec_i2c_of_match);static const struct acpi_device_id cros_ec_i2c_tunnel_acpi_id[] = { - {"GOOG001A" ,0 }, + {"GOOG0012" ,0 }, { } };MODULE_DEVICE_TABLE (acpi, cros_ec_i2c_tunnel_acpi_id);
drivers/infiniband/core/addr.c +1 -1
@@ -139,7 +139,7 @@ int ib_nl_handle_ip_res_resp(struct sk_buff *skb,if (ib_nl_is_good_ip_resp (nlh))ib_nl_process_good_ip_rsep (nlh); -return skb->len; +return 0 ; } static int ib_nl_ip_send_msg(struct rdma_dev_addr *dev_addr,
drivers/infiniband/core/cma.c +2 -0
@@ -3118,6 +3118,7 @@ static int cma_resolve_loopback(struct rdma_id_private *id_priv)rdma_addr_get_sgid (&id_priv->id.route.addr.dev_addr, &gid);rdma_addr_set_dgid (&id_priv->id.route.addr.dev_addr, &gid); +atomic_inc (&id_priv->refcount);cma_init_resolve_addr_work (work, id_priv);queue_work (cma_wq, &work->work);return 0 ;
@@ -3144,6 +3145,7 @@ static int cma_resolve_ib_addr(struct rdma_id_private *id_priv)rdma_addr_set_dgid (&id_priv->id.route.addr.dev_addr, (union ib_gid *) &(((struct sockaddr_ib *) &id_priv->id.route.addr.dst_addr)->sib_addr)); +atomic_inc (&id_priv->refcount);cma_init_resolve_addr_work (work, id_priv);queue_work (cma_wq, &work->work);return 0 ;
drivers/infiniband/core/ib_core_uverbs.c +2 -0
@@ -232,7 +232,9 @@ void rdma_user_mmap_entry_remove(struct rdma_user_mmap_entry *entry)if (!entry)return ; +xa_lock (&entry->ucontext->mmap_xa); entry->driver_removed = true; +xa_unlock (&entry->ucontext->mmap_xa);kref_put (&entry->ref, rdma_user_mmap_entry_free); }EXPORT_SYMBOL (rdma_user_mmap_entry_remove);
drivers/infiniband/core/sa_query.c +2 -2
@@ -1068,7 +1068,7 @@ int ib_nl_handle_set_timeout(struct sk_buff *skb, } settimeout_out: -return skb->len; +return 0 ; }static inline int ib_nl_is_good_resolve_resp (const struct nlmsghdr *nlh)
@@ -1139,7 +1139,7 @@ int ib_nl_handle_resolve_resp(struct sk_buff *skb, } resp_out: -return skb->len; +return 0 ; }static void free_sm_ah (struct kref *kref)
drivers/infiniband/core/umem.c +6 -3
@@ -166,10 +166,13 @@ unsigned long ib_umem_find_best_pgsz(struct ib_umem *umem,* for any address. */ mask |= (sg_dma_address (sg) + pgoff) ^ va; -if (i && i != (umem->nmap -1 )) -/* restrict by length as well for interior SGEs */ - mask |=sg_dma_len (sg); va +=sg_dma_len (sg) - pgoff; +/* Except for the last entry, the ending iova alignment sets +* the maximum possible page size as the low bits of the iova +* must be zero when starting the next chunk. +*/ +if (i != (umem->nmap -1 )) + mask |= va; pgoff =0 ; } best_pg_bit =rdma_find_pg_bit (mask, pgsz_bitmap);
drivers/infiniband/core/uverbs_main.c +14 -18
@@ -220,7 +220,6 @@ void ib_uverbs_release_file(struct kref *ref) }static ssize_t ib_uverbs_event_read (struct ib_uverbs_event_queue *ev_queue, -struct ib_uverbs_file *uverbs_file,struct file *filp,char __user *buf,size_t count,loff_t *pos,size_t eventsz)
@@ -238,19 +237,16 @@ static ssize_t ib_uverbs_event_read(struct ib_uverbs_event_queue *ev_queue,if (wait_event_interruptible (ev_queue->poll_wait, (!list_empty (&ev_queue->event_list) || -/* The barriers built into wait_event_interruptible() -* and wake_up() guarentee this will see the null set -* without using RCU -*/ - !uverbs_file->device->ib_dev))) + ev_queue->is_closed)))return -ERESTARTSYS ; +spin_lock_irq (&ev_queue->lock); +/* If device was disassociated and no event exists set an error */ -if (list_empty (&ev_queue->event_list) && - !uverbs_file->device->ib_dev) +if (list_empty (&ev_queue->event_list) && ev_queue->is_closed) { +spin_unlock_irq (&ev_queue->lock);return -EIO ; - -spin_lock_irq (&ev_queue->lock); + } } event = list_entry(ev_queue->event_list.next, struct ib_uverbs_event, list);
@@ -285,8 +281,7 @@ static ssize_t ib_uverbs_async_event_read(struct file *filp, char __user *buf, {struct ib_uverbs_async_event_file *file = filp->private_data; -return ib_uverbs_event_read (&file->ev_queue, file->uverbs_file, filp, - buf, count, pos, +return ib_uverbs_event_read (&file->ev_queue, filp, buf, count, pos,sizeof (struct ib_uverbs_async_event_desc )); }
@@ -296,9 +291,8 @@ static ssize_t ib_uverbs_comp_event_read(struct file *filp, char __user *buf,struct ib_uverbs_completion_event_file *comp_ev_file = filp->private_data; -return ib_uverbs_event_read (&comp_ev_file->ev_queue, - comp_ev_file->uobj.ufile, filp, - buf, count, pos, +return ib_uverbs_event_read (&comp_ev_file->ev_queue, filp, buf, count, + pos,sizeof (struct ib_uverbs_comp_event_desc )); }
@@ -321,7 +315,9 @@ static __poll_t ib_uverbs_event_poll(struct ib_uverbs_event_queue *ev_queue,static __poll_t ib_uverbs_async_event_poll (struct file *filp,struct poll_table_struct *wait) { -return ib_uverbs_event_poll (filp->private_data, filp, wait); +struct ib_uverbs_async_event_file *file = filp->private_data; + +return ib_uverbs_event_poll (&file->ev_queue, filp, wait); } static __poll_t ib_uverbs_comp_event_poll(struct file *filp,
@@ -335,9 +331,9 @@ static __poll_t ib_uverbs_comp_event_poll(struct file *filp,static int ib_uverbs_async_event_fasync (int fd,struct file *filp,int on) { -struct ib_uverbs_event_queue *ev_queue = filp->private_data; +struct ib_uverbs_async_event_file *file = filp->private_data; -return fasync_helper (fd, filp, on, &ev_queue->async_queue); +return fasync_helper (fd, filp, on, &file->ev_queue.async_queue); }static int ib_uverbs_comp_event_fasync (int fd,struct file *filp,int on)
drivers/infiniband/hw/i40iw/i40iw_main.c +2 -0
@@ -1225,6 +1225,8 @@ static void i40iw_add_ipv4_addr(struct i40iw_device *iwdev)const struct in_ifaddr *ifa; idev =in_dev_get (dev); +if (!idev) +continue ;in_dev_for_each_ifa_rtnl (ifa, idev) { i40iw_debug(&iwdev->sc_dev, I40IW_DEBUG_CM, "IP=%pI4, vlan_id=%d, MAC=%pM\n", &ifa->ifa_address,
drivers/infiniband/hw/mlx4/cm.c +3 -26
@@ -186,23 +186,6 @@ static void id_map_ent_timeout(struct work_struct *work)kfree (ent); } -static void id_map_find_del (struct ib_device *ibdev,int pv_cm_id) -{ -struct mlx4_ib_sriov *sriov = &to_mdev (ibdev)->sriov; -struct rb_root *sl_id_map = &sriov->sl_id_map; -struct id_map_entry *ent, *found_ent; - -spin_lock (&sriov->id_map_lock); - ent =xa_erase (&sriov->pv_id_table, pv_cm_id); -if (!ent) - goto out; - found_ent =id_map_find_by_sl_id (ibdev, ent->slave_id, ent->sl_cm_id); -if (found_ent && found_ent == ent) -rb_erase (&found_ent->node, sl_id_map); -out: -spin_unlock (&sriov->id_map_lock); -} -static void sl_id_map_add (struct ib_device *ibdev,struct id_map_entry *new) {struct rb_root *sl_id_map = &to_mdev (ibdev)->sriov.sl_id_map;
@@ -294,7 +277,7 @@ static void schedule_delayed(struct ib_device *ibdev, struct id_map_entry *id)spin_lock (&sriov->id_map_lock);spin_lock_irqsave (&sriov->going_down_lock, flags);/*make sure that there is no schedule inside the scheduled work.*/ -if (!sriov->is_going_down) { +if (!sriov->is_going_down && !id->scheduled_delete) { id->scheduled_delete =1 ;schedule_delayed_work (&id->timeout,CM_CLEANUP_CACHE_TIMEOUT ); }
@@ -341,9 +324,6 @@ int mlx4_ib_multiplex_cm_handler(struct ib_device *ibdev, int port, int slave_idif (mad->mad_hdr.attr_id ==CM_DREQ_ATTR_ID )schedule_delayed (ibdev, id); -else if (mad->mad_hdr.attr_id ==CM_DREP_ATTR_ID ) -id_map_find_del (ibdev, pv_cm_id); -return 0 ; }
@@ -382,12 +362,9 @@ int mlx4_ib_demux_cm_handler(struct ib_device *ibdev, int port, int *slave, *slave = id->slave_id;set_remote_comm_id (mad, id->sl_cm_id); -if (mad->mad_hdr.attr_id ==CM_DREQ_ATTR_ID ) +if (mad->mad_hdr.attr_id ==CM_DREQ_ATTR_ID || + mad->mad_hdr.attr_id ==CM_REJ_ATTR_ID )schedule_delayed (ibdev, id); -else if (mad->mad_hdr.attr_id ==CM_REJ_ATTR_ID || - mad->mad_hdr.attr_id ==CM_DREP_ATTR_ID ) { -id_map_find_del (ibdev, (int ) pv_cm_id); - }return 0 ; }
drivers/infiniband/hw/mlx4/main.c +16 -4
@@ -246,6 +246,13 @@ static int mlx4_ib_update_gids(struct gid_entry *gids,return mlx4_ib_update_gids_v1 (gids, ibdev, port_num); } +static void free_gid_entry (struct gid_entry *entry) +{ +memset (&entry->gid,0 ,sizeof (entry->gid)); +kfree (entry->ctx); + entry->ctx =NULL ; +} +static int mlx4_ib_add_gid (const struct ib_gid_attr *attr,void **context) {struct mlx4_ib_dev *ibdev =to_mdev (attr->device);
@@ -313,6 +320,8 @@ static int mlx4_ib_add_gid(const struct ib_gid_attr *attr, void **context) GFP_ATOMIC);if (!gids) { ret = -ENOMEM ; + *context =NULL ; +free_gid_entry (&port_gid_table->gids[free]); }else {for (i =0 ; i <MLX4_MAX_PORT_GIDS ; i++) {memcpy (&gids[i].gid, &port_gid_table->gids[i].gid,sizeof (union ib_gid ));
@@ -324,6 +333,12 @@ static int mlx4_ib_add_gid(const struct ib_gid_attr *attr, void **context)if (!ret && hw_update) { ret =mlx4_ib_update_gids (gids, ibdev, attr->port_num); +if (ret) { +spin_lock_bh (&iboe->lock); + *context =NULL ; +free_gid_entry (&port_gid_table->gids[free]); +spin_unlock_bh (&iboe->lock); + }kfree (gids); }
@@ -353,10 +368,7 @@ static int mlx4_ib_del_gid(const struct ib_gid_attr *attr, void **context)if (!ctx->refcount) {unsigned int real_index = ctx->real_index; -memset (&port_gid_table->gids[real_index].gid,0 , -sizeof (port_gid_table->gids[real_index].gid)); -kfree (port_gid_table->gids[real_index].ctx); - port_gid_table->gids[real_index].ctx =NULL ; +free_gid_entry (&port_gid_table->gids[real_index]); hw_update =1 ; } }
drivers/infiniband/hw/mlx5/ib_virt.c +12 -16
@@ -164,8 +164,10 @@ static int set_vf_node_guid(struct ib_device *device, int vf, u8 port, u64 guid) in->field_select =MLX5_HCA_VPORT_SEL_NODE_GUID ; in->node_guid = guid; err =mlx5_core_modify_hca_vport_context (mdev,1 ,1 , vf +1 , in); -if (!err) +if (!err) { vfs_ctx[vf].node_guid = guid; + vfs_ctx[vf].node_guid_valid =1 ; + }kfree (in);return err; }
@@ -185,8 +187,10 @@ static int set_vf_port_guid(struct ib_device *device, int vf, u8 port, u64 guid) in->field_select =MLX5_HCA_VPORT_SEL_PORT_GUID ; in->port_guid = guid; err =mlx5_core_modify_hca_vport_context (mdev,1 ,1 , vf +1 , in); -if (!err) +if (!err) { vfs_ctx[vf].port_guid = guid; + vfs_ctx[vf].port_guid_valid =1 ; + }kfree (in);return err; }
@@ -208,20 +212,12 @@ int mlx5_ib_get_vf_guid(struct ib_device *device, int vf, u8 port, {struct mlx5_ib_dev *dev =to_mdev (device);struct mlx5_core_dev *mdev = dev->mdev; -struct mlx5_hca_vport_context *rep; -int err; - - rep =kzalloc (sizeof (*rep),GFP_KERNEL ); -if (!rep) -return -ENOMEM ; +struct mlx5_vf_context *vfs_ctx = mdev->priv.sriov.vfs_ctx; - err =mlx5_query_hca_vport_context (mdev,1 ,1 , vf+1 , rep); -if (err) - goto ex; + node_guid->guid = + vfs_ctx[vf].node_guid_valid ? vfs_ctx[vf].node_guid :0 ; + port_guid->guid = + vfs_ctx[vf].port_guid_valid ? vfs_ctx[vf].port_guid :0 ; - port_guid->guid = rep->port_guid; - node_guid->guid = rep->node_guid; -ex: -kfree (rep); -return err; +return 0 ; }
drivers/infiniband/hw/mlx5/mr.c +2 -0
@@ -1247,6 +1247,8 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,if (IS_ENABLED (CONFIG_INFINIBAND_ON_DEMAND_PAGING ) && !start && length ==U64_MAX ) { +if (virt_addr != start) +return ERR_PTR (-EINVAL );if (!(access_flags &IB_ACCESS_ON_DEMAND ) || !(dev->odp_caps.general_caps &IB_ODP_SUPPORT_IMPLICIT ))return ERR_PTR (-EINVAL );
drivers/infiniband/hw/mlx5/odp.c +13 -6
@@ -624,11 +624,10 @@ static int pagefault_real_mr(struct mlx5_ib_mr *mr, struct ib_umem_odp *odp,bool downgrade = flags &MLX5_PF_FLAGS_DOWNGRADE ;unsigned long current_seq;u64 access_mask; -u64 start_idx, page_mask; +u64 start_idx; page_shift = odp->page_shift; - page_mask = ~(BIT (page_shift) -1 ); - start_idx = (user_va - (mr->mmkey.iova & page_mask)) >> page_shift; + start_idx = (user_va -ib_umem_start (odp)) >> page_shift; access_mask =ODP_READ_ALLOWED_BIT ;if (odp->umem.writable && !downgrade)
@@ -767,11 +766,19 @@ static int pagefault_mr(struct mlx5_ib_mr *mr, u64 io_virt, size_t bcnt, {struct ib_umem_odp *odp =to_ib_umem_odp (mr->umem); +if (unlikely (io_virt < mr->mmkey.iova)) +return -EFAULT ; +if (!odp->is_implicit_odp) { -if (unlikely (io_virt <ib_umem_start (odp) || -ib_umem_end (odp) - io_virt < bcnt)) +u64 user_va; + +if (check_add_overflow (io_virt - mr->mmkey.iova, + (u64 )odp->umem.address, &user_va)) +return -EFAULT ; +if (unlikely (user_va >=ib_umem_end (odp) || +ib_umem_end (odp) - user_va < bcnt))return -EFAULT ; -return pagefault_real_mr (mr, odp, io_virt, bcnt, bytes_mapped, +return pagefault_real_mr (mr, odp, user_va, bcnt, bytes_mapped, flags); } return pagefault_implicit_mr(mr, odp, io_virt, bcnt, bytes_mapped,
drivers/infiniband/ulp/srp/ib_srp.c +2 -1
@@ -2546,7 +2546,8 @@ static void srp_cm_rep_handler(struct ib_cm_id *cm_id,if (lrsp->opcode ==SRP_LOGIN_RSP ) { ch->max_ti_iu_len =be32_to_cpu (lrsp->max_ti_iu_len); ch->req_lim =be32_to_cpu (lrsp->req_lim_delta); - ch->use_imm_data = lrsp->rsp_flags &SRP_LOGIN_RSP_IMMED_SUPP ; + ch->use_imm_data = srp_use_imm_data && + (lrsp->rsp_flags &SRP_LOGIN_RSP_IMMED_SUPP ); ch->max_it_iu_len =srp_max_it_iu_len (target->cmd_sg_cnt, ch->use_imm_data, target->max_it_iu_size);
drivers/iommu/arm-smmu-v3.c +1 -0
@@ -856,6 +856,7 @@ static int arm_smmu_cmdq_build_cmd(u64 *cmd, struct arm_smmu_cmdq_ent *ent) cmd[1 ] |=FIELD_PREP (CMDQ_CFGI_1_RANGE ,31 );break ;case CMDQ_OP_TLBI_NH_VA : + cmd[0 ] |=FIELD_PREP (CMDQ_TLBI_0_VMID , ent->tlbi.vmid); cmd[0 ] |=FIELD_PREP (CMDQ_TLBI_0_ASID , ent->tlbi.asid); cmd[1 ] |=FIELD_PREP (CMDQ_TLBI_1_LEAF , ent->tlbi.leaf); cmd[1 ] |= ent->tlbi.addr &CMDQ_TLBI_1_VA_MASK ;
drivers/md/bcache/journal.c +75 -5
120 lines not on this page · raw message
drivers/media/i2c/adv748x/adv748x.h +4 -4
@@ -394,10 +394,10 @@ int adv748x_write_block(struct adv748x_state *state, int client_page,#define io_read (s, r) adv748x_read(s, ADV748X_PAGE_IO, r)#define io_write (s, r, v) adv748x_write(s, ADV748X_PAGE_IO, r, v) -#define io_clrset (s, r, m, v) io_write(s, r, (io_read(s, r) & ~m) | v) +#define io_clrset (s, r, m, v) io_write(s, r, (io_read(s, r) & ~(m)) | (v))#define hdmi_read (s, r) adv748x_read(s, ADV748X_PAGE_HDMI, r) -#define hdmi_read16 (s, r, m) (((hdmi_read(s, r) << 8) | hdmi_read(s, r+1)) & m) +#define hdmi_read16 (s, r, m) (((hdmi_read(s, r) << 8) | hdmi_read(s, (r)+1)) & (m))#define hdmi_write (s, r, v) adv748x_write(s, ADV748X_PAGE_HDMI, r, v)#define repeater_read (s, r) adv748x_read(s, ADV748X_PAGE_REPEATER, r)
@@ -405,11 +405,11 @@ int adv748x_write_block(struct adv748x_state *state, int client_page,#define sdp_read (s, r) adv748x_read(s, ADV748X_PAGE_SDP, r)#define sdp_write (s, r, v) adv748x_write(s, ADV748X_PAGE_SDP, r, v) -#define sdp_clrset (s, r, m, v) sdp_write(s, r, (sdp_read(s, r) & ~m) | v) +#define sdp_clrset (s, r, m, v) sdp_write(s, r, (sdp_read(s, r) & ~(m)) | (v))#define cp_read (s, r) adv748x_read(s, ADV748X_PAGE_CP, r)#define cp_write (s, r, v) adv748x_write(s, ADV748X_PAGE_CP, r, v) -#define cp_clrset (s, r, m, v) cp_write(s, r, (cp_read(s, r) & ~m) | v) +#define cp_clrset (s, r, m, v) cp_write(s, r, (cp_read(s, r) & ~(m)) | (v))#define tx_read (t, r) adv748x_read(t->state, t->page, r)#define tx_write (t, r, v) adv748x_write(t->state, t->page, r, v)
drivers/mfd/Kconfig +1 -0
@@ -758,6 +758,7 @@ config MFD_MAX77650 depends on OF || COMPILE_TEST select MFD_CORE select REGMAP_I2C + select REGMAP_IRQ help Say Y here to add support for Maxim Semiconductor MAX77650 and MAX77651 Power Management ICs. This is the core multifunction
drivers/mtd/nand/onenand/onenand_base.c +41 -41
109 lines not on this page · raw message
drivers/mtd/parsers/sharpslpart.c +2 -2
@@ -165,10 +165,10 @@ static int sharpsl_nand_get_logical_num(u8 *oob)static int sharpsl_nand_init_ftl (struct mtd_info *mtd,struct sharpsl_ftl *ftl) { -unsigned int block_num, log_num, phymax; +unsigned int block_num, phymax; +int i, ret, log_num;loff_t block_adr;u8 *oob; -int i, ret; oob =kzalloc (mtd->oobsize,GFP_KERNEL );if (!oob)
drivers/net/netdevsim/bus.c +60 -4
150 lines not on this page · raw message
drivers/net/netdevsim/dev.c +11 -2
@@ -88,8 +88,11 @@ static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev) &nsim_dev->max_macs);debugfs_create_bool ("test1" ,0600 , nsim_dev->ddir, &nsim_dev->test1); -debugfs_create_file ("take_snapshot" ,0200 , nsim_dev->ddir, nsim_dev, - &nsim_dev_take_snapshot_fops); + nsim_dev->take_snapshot =debugfs_create_file ("take_snapshot" , +0200 , + nsim_dev->ddir, + nsim_dev, + &nsim_dev_take_snapshot_fops);debugfs_create_bool ("dont_allow_reload" ,0600 , nsim_dev->ddir, &nsim_dev->dont_allow_reload); debugfs_create_bool("fail_reload", 0600, nsim_dev->ddir,
@@ -740,6 +743,11 @@ static int nsim_dev_reload_create(struct nsim_dev *nsim_dev,if (err) goto err_health_exit; + nsim_dev->take_snapshot =debugfs_create_file ("take_snapshot" , +0200 , + nsim_dev->ddir, + nsim_dev, + &nsim_dev_take_snapshot_fops);return 0 ; err_health_exit:
@@ -853,6 +861,7 @@ static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev)if (devlink_is_reload_failed (devlink))return ; +debugfs_remove (nsim_dev->take_snapshot);nsim_dev_port_del_all (nsim_dev);nsim_dev_health_exit (nsim_dev);nsim_dev_traps_exit (devlink);
drivers/net/netdevsim/health.c +1 -1
@@ -82,7 +82,7 @@ static int nsim_dev_dummy_fmsg_put(struct devlink_fmsg *fmsg, u32 binary_len)if (err)return err; - binary =kmalloc (binary_len,GFP_KERNEL ); + binary =kmalloc (binary_len,GFP_KERNEL | __GFP_NOWARN);if (!binary)return -ENOMEM ;get_random_bytes (binary, binary_len);
drivers/net/netdevsim/netdevsim.h +4 -0
@@ -160,6 +160,7 @@ struct nsim_dev {struct nsim_trap_data *trap_data;struct dentry *ddir;struct dentry *ports_ddir; +struct dentry *take_snapshot;struct bpf_offload_dev *bpf_dev;bool bpf_bind_accept;u32 bpf_bind_verifier_delay;
@@ -240,6 +241,9 @@ struct nsim_bus_dev {*/ unsigned int num_vfs;struct nsim_vf_config *vfconfigs; +/* Lock for devlink->reload_enabled in netdevsim module */ +struct mutex nsim_bus_reload_lock; +bool init; };int nsim_bus_init (void );
drivers/net/wireless/ath/ath10k/pci.c +17 -2
@@ -1604,11 +1604,22 @@ static int ath10k_pci_dump_memory_reg(struct ath10k *ar, {struct ath10k_pci *ar_pci =ath10k_pci_priv (ar);u32 i; +int ret; + +mutex_lock (&ar->conf_mutex); +if (ar->state !=ATH10K_STATE_ON ) { +ath10k_warn (ar,"Skipping pci_dump_memory_reg invalid state\n" ); + ret = -EIO ; + goto done; + }for (i =0 ; i < region->len; i +=4 ) *(u32 *)(buf + i) =ioread32 (ar_pci->mem + region->start + i); -return region->len; + ret = region->len; +done: +mutex_unlock (&ar->conf_mutex); +return ret; }/* if an error happened returns < 0, otherwise the length */
@@ -1704,7 +1715,11 @@ static void ath10k_pci_dump_memory(struct ath10k *ar, count =ath10k_pci_dump_memory_sram (ar, current_region, buf);break ;case ATH10K_MEM_REGION_TYPE_IOREG : - count =ath10k_pci_dump_memory_reg (ar, current_region, buf); + ret =ath10k_pci_dump_memory_reg (ar, current_region, buf); +if (ret <0 ) +break ; + + count = ret;break ;default : ret =ath10k_pci_dump_memory_generic (ar, current_region, buf);
drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c +4 -1
@@ -8,6 +8,7 @@* Copyright(c) 2015 - 2017 Intel Deutschland GmbH * Copyright (C) 2018 Intel Corporation * Copyright (C) 2019 Intel Corporation +* Copyright (C) 2020 Intel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -30,6 +31,7 @@* Copyright(c) 2015 - 2017 Intel Deutschland GmbH * Copyright (C) 2018 Intel Corporation * Copyright (C) 2019 Intel Corporation +* Copyright (C) 2020 Intel Corporation * All rights reserved. * * Redistribution and use in source and binary forms, with or without
@@ -389,6 +391,8 @@ void iwl_mvm_ftm_abort(struct iwl_mvm *mvm, struct cfg80211_pmsr_request *req)if (req != mvm->ftm_initiator.req)return ; +iwl_mvm_ftm_reset (mvm); +if (iwl_mvm_send_cmd_pdu (mvm,iwl_cmd_id (TOF_RANGE_ABORT_CMD ,LOCATION_GROUP ,0 ),0 ,sizeof (cmd), &cmd))
@@ -502,7 +506,6 @@ void iwl_mvm_ftm_range_resp(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb)lockdep_assert_held (&mvm->mutex);if (!mvm->ftm_initiator.req) { -IWL_ERR (mvm,"Got FTM response but have no request?\n" );return ; }
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +1 -1
@@ -3293,7 +3293,7 @@ static void iwl_mvm_mac_mgd_prepare_tx(struct ieee80211_hw *hw,if (fw_has_capa (&mvm->fw->ucode_capa,IWL_UCODE_TLV_CAPA_SESSION_PROT_CMD ))iwl_mvm_schedule_session_protection (mvm, vif,900 , - min_duration); + min_duration, false);else iwl_mvm_protect_session (mvm, vif, duration, min_duration,500 , false);
drivers/net/wireless/intel/iwlwifi/mvm/tdls.c +8 -2
@@ -205,9 +205,15 @@ void iwl_mvm_mac_mgd_protect_tdls_discover(struct ieee80211_hw *hw,struct iwl_mvm *mvm =IWL_MAC80211_GET_MVM (hw);u32 duration =2 * vif->bss_conf.dtim_period * vif->bss_conf.beacon_int; -mutex_lock (&mvm->mutex);/* Protect the session to hear the TDLS setup response on the channel */ -iwl_mvm_protect_session (mvm, vif, duration, duration,100 , true); +mutex_lock (&mvm->mutex); +if (fw_has_capa (&mvm->fw->ucode_capa, +IWL_UCODE_TLV_CAPA_SESSION_PROT_CMD )) +iwl_mvm_schedule_session_protection (mvm, vif, duration, + duration, true); +else +iwl_mvm_protect_session (mvm, vif, duration, + duration,100 , true);mutex_unlock (&mvm->mutex); }
drivers/net/wireless/intel/iwlwifi/mvm/time-event.c +60 -11
94 lines not on this page · raw message
drivers/net/wireless/intel/iwlwifi/mvm/time-event.h +3 -1
@@ -250,10 +250,12 @@ iwl_mvm_te_scheduled(struct iwl_mvm_time_event_data *te_data)* @mvm: the mvm component * @vif: the virtual interface for which the protection issued * @duration: the duration of the protection +* @wait_for_notif: if true, will block until the start of the protection */ void iwl_mvm_schedule_session_protection (struct iwl_mvm *mvm,struct ieee80211_vif *vif, -u32 duration,u32 min_duration); +u32 duration,u32 min_duration, +bool wait_for_notif);/** * iwl_mvm_rx_session_protect_notif - handles %SESSION_PROTECTION_NOTIF
drivers/net/wireless/marvell/libertas/cfg.c +2 -0
@@ -1785,6 +1785,8 @@ static int lbs_ibss_join_existing(struct lbs_private *priv, rates_max = rates_eid[1 ];if (rates_max >MAX_RATES ) {lbs_deb_join ("invalid rates" ); +rcu_read_unlock (); + ret = -EINVAL ; goto out; } rates = cmd.bss.rates;
drivers/net/wireless/marvell/mwifiex/scan.c +7 -0
@@ -2884,6 +2884,13 @@ mwifiex_cmd_append_vsie_tlv(struct mwifiex_private *priv, vs_param_set->header.len =cpu_to_le16 ((((u16 ) priv->vs_ie[id].ie[1 ]) &0x00FF ) +2 ); +if (le16_to_cpu (vs_param_set->header.len) > +MWIFIEX_MAX_VSIE_LEN ) { +mwifiex_dbg (priv->adapter,ERROR , +"Invalid param length!\n" ); +break ; + } +memcpy (vs_param_set->ie, priv->vs_ie[id].ie,le16_to_cpu (vs_param_set->header.len)); *buffer += le16_to_cpu(vs_param_set->header.len) +
drivers/net/wireless/marvell/mwifiex/wmm.c +4 -0
@@ -970,6 +970,10 @@ int mwifiex_ret_wmm_get_status(struct mwifiex_private *priv,"WMM Parameter Set Count: %d\n" , wmm_param_ie->qos_info_bitmap & mask); +if (wmm_param_ie->vend_hdr.len +2 > +sizeof (struct ieee_types_wmm_parameter )) +break ; +memcpy ((u8 *) &priv->curr_bss_params.bss_descriptor. wmm_ie, wmm_param_ie, wmm_param_ie->vend_hdr.len +2 );
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +2 -1
@@ -92,8 +92,9 @@ static int mt7615_check_eeprom(struct mt76_dev *dev)static void mt7615_eeprom_parse_hw_cap (struct mt7615_dev *dev) { -u8 val, *eeprom = dev->mt76.eeprom.data; +u8 *eeprom = dev->mt76.eeprom.data;u8 tx_mask, rx_mask, max_nss; +u32 val; val =FIELD_GET (MT_EE_NIC_WIFI_CONF_BAND_SEL , eeprom[MT_EE_WIFI_CONF ]);
drivers/pci/controller/pci-tegra.c +1 -1
@@ -2499,7 +2499,6 @@ static const struct tegra_pcie_soc tegra20_pcie = { .num_ports = 2, .ports = tegra20_pcie_ports, .msi_base_shift = 0, - .afi_pex2_ctrl = 0x128, .pads_pll_ctl = PADS_PLL_CTL_TEGRA20, .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_DIV10, .pads_refclk_cfg0 = 0xfa5cfa5c,
@@ -2528,6 +2527,7 @@ static const struct tegra_pcie_soc tegra30_pcie = { .num_ports = 3, .ports = tegra30_pcie_ports, .msi_base_shift = 8, + .afi_pex2_ctrl = 0x128, .pads_pll_ctl = PADS_PLL_CTL_TEGRA30, .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN, .pads_refclk_cfg0 = 0xfa5cfa5c,
drivers/pci/iov.c +4 -5
@@ -186,10 +186,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)sprintf (buf,"virtfn%u" , id); rc =sysfs_create_link (&dev->dev.kobj, &virtfn->dev.kobj, buf);if (rc) - goto failed2; + goto failed1; rc =sysfs_create_link (&virtfn->dev.kobj, &dev->dev.kobj,"physfn" );if (rc) - goto failed3; + goto failed2;kobject_uevent (&virtfn->dev.kobj,KOBJ_CHANGE );
@@ -197,11 +197,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)return 0 ; -failed3: -sysfs_remove_link (&dev->dev.kobj, buf); failed2: -pci_stop_and_remove_bus_device (virtfn); +sysfs_remove_link (&dev->dev.kobj, buf); failed1: +pci_stop_and_remove_bus_device (virtfn);pci_dev_put (dev); failed0:virtfn_remove_bus (dev->bus, bus);
drivers/pci/pcie/aer.c +1 -0
@@ -1445,6 +1445,7 @@ static int aer_probe(struct pcie_device *dev)return -ENOMEM ; rpc->rpd = port; +INIT_KFIFO (rpc->aer_fifo);set_service_data (dev, rpc); status = devm_request_threaded_irq(device, dev->irq, aer_irq, aer_isr,
drivers/pci/setup-bus.c +16 -4
@@ -1803,12 +1803,18 @@ void pci_assign_unassigned_root_bus_resources(struct pci_bus *bus)/* Restore size and flags */ list_for_each_entry (fail_res, &fail_head, list) {struct resource *res = fail_res->res; +int idx; res->start = fail_res->start; res->end = fail_res->end; res->flags = fail_res->flags; -if (fail_res->dev->subordinate) - res->flags =0 ; + +if (pci_is_bridge (fail_res->dev)) { + idx = res - &fail_res->dev->resource[0 ]; +if (idx >=PCI_BRIDGE_RESOURCES && + idx <=PCI_BRIDGE_RESOURCE_END ) + res->flags =0 ; + } }free_list (&fail_head);
@@ -2055,12 +2061,18 @@ void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge)/* Restore size and flags */ list_for_each_entry (fail_res, &fail_head, list) {struct resource *res = fail_res->res; +int idx; res->start = fail_res->start; res->end = fail_res->end; res->flags = fail_res->flags; -if (fail_res->dev->subordinate) - res->flags =0 ; + +if (pci_is_bridge (fail_res->dev)) { + idx = res - &fail_res->dev->resource[0 ]; +if (idx >=PCI_BRIDGE_RESOURCES && + idx <=PCI_BRIDGE_RESOURCE_END ) + res->flags =0 ; + } }free_list (&fail_head);
drivers/pci/switch/switchtec.c +2 -2
@@ -1276,7 +1276,7 @@ static int switchtec_init_isr(struct switchtec_dev *stdev)if (nvecs <0 )return nvecs; - event_irq =ioread32 (&stdev->mmio_part_cfg->vep_vector_number); + event_irq =ioread16 (&stdev->mmio_part_cfg->vep_vector_number);if (event_irq <0 || event_irq >= nvecs)return -EFAULT ;
@@ -1349,7 +1349,7 @@ static int switchtec_init_pci(struct switchtec_dev *stdev,if (rc)return rc; - rc =dma_set_coherent_mask (&pdev->dev,DMA_BIT_MASK (64 )); + rc =dma_set_mask_and_coherent (&pdev->dev,DMA_BIT_MASK (64 ));if (rc)return rc;
drivers/pinctrl/intel/pinctrl-baytrail.c +9 -10
@@ -107,6 +107,7 @@ struct byt_gpio_pin_context {struct byt_gpio {struct gpio_chip chip; +struct irq_chip irqchip;struct platform_device *pdev;struct pinctrl_dev *pctl_dev;struct pinctrl_desc pctl_desc;
@@ -1395,15 +1396,6 @@ static int byt_irq_type(struct irq_data *d, unsigned int type)return 0 ; } -static struct irq_chip byt_irqchip = { - .name ="BYT-GPIO" , - .irq_ack = byt_irq_ack, - .irq_mask = byt_irq_mask, - .irq_unmask = byt_irq_unmask, - .irq_set_type = byt_irq_type, - .flags =IRQCHIP_SKIP_SET_WAKE , -}; -static void byt_gpio_irq_handler (struct irq_desc *desc) {struct irq_data *data =irq_desc_get_irq_data (desc);
@@ -1551,8 +1543,15 @@ static int byt_gpio_probe(struct byt_gpio *vg)if (irq_rc && irq_rc->start) {struct gpio_irq_chip *girq; + vg->irqchip.name ="BYT-GPIO" , + vg->irqchip.irq_ack = byt_irq_ack, + vg->irqchip.irq_mask = byt_irq_mask, + vg->irqchip.irq_unmask = byt_irq_unmask, + vg->irqchip.irq_set_type = byt_irq_type, + vg->irqchip.flags =IRQCHIP_SKIP_SET_WAKE , + girq = &gc->irq; - girq->chip = &byt_irqchip; + girq->chip = &vg->irqchip; girq->init_hw = byt_gpio_irq_init_hw; girq->parent_handler = byt_gpio_irq_handler; girq->num_parents =1 ;
drivers/pinctrl/qcom/pinctrl-msm.c +0 -5
@@ -960,7 +960,6 @@ static int msm_gpio_irq_set_wake(struct irq_data *d, unsigned int on) {struct gpio_chip *gc =irq_data_get_irq_chip_data (d);struct msm_pinctrl *pctrl =gpiochip_get_data (gc); -unsigned long flags;/* * While they may not wake up when the TLMM is powered off,
@@ -971,12 +970,8 @@ static int msm_gpio_irq_set_wake(struct irq_data *d, unsigned int on)if (d->parent_data)irq_chip_set_wake_parent (d, on); -raw_spin_lock_irqsave (&pctrl->lock, flags); -irq_set_irq_wake (pctrl->irq, on); -raw_spin_unlock_irqrestore (&pctrl->lock, flags); -return 0 ; }
drivers/pinctrl/sh-pfc/pfc-r8a7778.c +2 -2
@@ -2305,7 +2305,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {FN_ATAG0_A ,0 ,FN_REMOCON_B ,0 ,/* IP0_11_8 [4] */ FN_SD1_DAT2_A ,FN_MMC_D2 ,0 ,FN_BS , -FN_ATADIR0_A ,0 ,FN_SDSELF_B ,0 , +FN_ATADIR0_A ,0 ,FN_SDSELF_A ,0 ,FN_PWM4_B ,0 ,0 ,0 ,0 ,0 ,0 ,0 , /* IP0_7_5 [3] */
@@ -2349,7 +2349,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {FN_TS_SDAT0_A ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,/* IP1_10_8 [3] */ -FN_SD1_CLK_B ,FN_MMC_D6 ,0 ,FN_A24 , +FN_SD1_CD_A ,FN_MMC_D6 ,0 ,FN_A24 ,FN_DREQ1_A ,0 ,FN_HRX0_B ,FN_TS_SPSYNC0_A ,/* IP1_7_5 [3] */ FN_A23, FN_HTX0_B, FN_TX2_B, FN_DACK2_A,
drivers/pinctrl/sh-pfc/pfc-r8a77965.c +3 -3
@@ -5998,7 +5998,7 @@ static const struct pinmux_drive_reg pinmux_drive_regs[] = { { PIN_DU_DOTCLKIN1, 0, 2 }, /* DU_DOTCLKIN1 */ } }, { PINMUX_DRIVE_REG("DRVCTRL12", 0xe6060330) { - { PIN_DU_DOTCLKIN3, 28, 2 }, /* DU_DOTCLKIN3 */ + { PIN_DU_DOTCLKIN3, 24, 2 }, /* DU_DOTCLKIN3 */ { PIN_FSCLKST, 20, 2 }, /* FSCLKST */ { PIN_TMS, 4, 2 }, /* TMS */ } },
@@ -6254,8 +6254,8 @@ static const struct pinmux_bias_reg pinmux_bias_regs[] = { [31 ] =PIN_DU_DOTCLKIN1 ,/* DU_DOTCLKIN1 */ } }, { PINMUX_BIAS_REG("PUEN3", 0xe606040c, "PUD3", 0xe606044c) { - [ 0] = PIN_DU_DOTCLKIN3, /* DU_DOTCLKIN3 */ - [ 1] = SH_PFC_PIN_NONE, + [ 0] = SH_PFC_PIN_NONE, + [ 1] = PIN_DU_DOTCLKIN3, /* DU_DOTCLKIN3 */ [ 2] = PIN_FSCLKST, /* FSCLKST */ [ 3] = PIN_EXTALR, /* EXTALR*/ [ 4] = PIN_TRST_N, /* TRST# */
drivers/platform/x86/intel_mid_powerbtn.c +3 -2
@@ -146,9 +146,10 @@ static int mid_pb_probe(struct platform_device *pdev)input_set_capability (input,EV_KEY ,KEY_POWER ); - ddata = (struct mid_pb_ddata *)id->driver_data; + ddata =devm_kmemdup (&pdev->dev, (void *)id->driver_data, +sizeof (*ddata),GFP_KERNEL );if (!ddata) -return -ENODATA ; +return -ENOMEM ; ddata->dev = &pdev->dev; ddata->irq = irq;
drivers/rtc/rtc-cmos.c +1 -1
@@ -850,7 +850,7 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq) rtc_cmos_int_handler = cmos_interrupt; retval =request_irq (rtc_irq, rtc_cmos_int_handler, -IRQF_SHARED ,dev_name (&cmos_rtc.rtc->dev), +0 ,dev_name (&cmos_rtc.rtc->dev), cmos_rtc.rtc);if (retval <0 ) {dev_dbg (dev,"IRQ %d is already in use\n" , rtc_irq);
drivers/rtc/rtc-hym8563.c +1 -1
@@ -97,7 +97,7 @@ static int hym8563_rtc_read_time(struct device *dev, struct rtc_time *tm)if (!hym8563->valid) {dev_warn (&client->dev,"no valid clock/calendar values available\n" ); -return -EPERM ; +return -EINVAL ; } ret =i2c_smbus_read_i2c_block_data (client,HYM8563_SEC ,7 , buf);
drivers/rtc/rtc-mt6397.c +1 -9
@@ -297,15 +297,7 @@ static int mtk_rtc_probe(struct platform_device *pdev) rtc->rtc_dev->ops = &mtk_rtc_ops; - ret =rtc_register_device (rtc->rtc_dev); -if (ret) - goto out_free_irq; - -return 0 ; - -out_free_irq: -free_irq (rtc->irq, rtc); -return ret; +return rtc_register_device (rtc->rtc_dev); }#ifdef CONFIG_PM_SLEEP
drivers/scsi/ufs/ufshcd.c +2 -1
@@ -7030,7 +7030,8 @@ static int ufshcd_probe_hba(struct ufs_hba *hba)ufshcd_init_icc_levels (hba);/* Add required well known logical units to scsi mid layer */ -if (ufshcd_scsi_add_wlus (hba)) + ret =ufshcd_scsi_add_wlus (hba); +if (ret) goto out;/* Initialize devfreq after UFS device is detected */
drivers/soc/qcom/rpmhpd.c +2 -0
@@ -93,6 +93,7 @@ static struct rpmhpd sdm845_mx = {static struct rpmhpd sdm845_mx_ao = { .pd = { .name ="mx_ao" , }, + .active_only = true, .peer = &sdm845_mx, .res_name ="mx.lvl" , };
@@ -107,6 +108,7 @@ static struct rpmhpd sdm845_cx = {static struct rpmhpd sdm845_cx_ao = { .pd = { .name ="cx_ao" , }, + .active_only = true, .peer = &sdm845_cx, .parent = &sdm845_mx_ao.pd, .res_name ="cx.lvl" ,
drivers/watchdog/qcom-wdt.c +1 -1
@@ -246,7 +246,7 @@ static int qcom_wdt_probe(struct platform_device *pdev) }/* check if there is pretimeout support */ - irq =platform_get_irq (pdev,0 ); + irq =platform_get_irq_optional (pdev,0 );if (irq >0 ) { ret = devm_request_irq(dev, irq, qcom_wdt_isr, IRQF_TRIGGER_RISING,
drivers/watchdog/stm32_iwdg.c +18 -0
@@ -262,6 +262,24 @@ static int stm32_iwdg_probe(struct platform_device *pdev)watchdog_set_nowayout (wdd,WATCHDOG_NOWAYOUT );watchdog_init_timeout (wdd,0 , dev); +/* +* In case of CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED is set +* (Means U-Boot/bootloaders leaves the watchdog running) +* When we get here we should make a decision to prevent +* any side effects before user space daemon will take care of it. +* The best option, taking into consideration that there is no +* way to read values back from hardware, is to enforce watchdog +* being run with deterministic values. +*/ +if (IS_ENABLED (CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED )) { + ret =stm32_iwdg_start (wdd); +if (ret) +return ret; + +/* Make sure the watchdog is serviced */ +set_bit (WDOG_HW_RUNNING , &wdd->status); + } + ret =devm_watchdog_register_device (dev, wdd);if (ret)return ret;
fs/nfs/Kconfig +1 -1
@@ -90,7 +90,7 @@ config NFS_V4 config NFS_SWAP bool "Provide swap over NFS support" default n - depends on NFS_FS + depends on NFS_FS && SWAP select SUNRPC_SWAP help This option enables swapon to work on files located on NFS mounts.
fs/nfs/direct.c +2 -2
@@ -245,10 +245,10 @@ static int nfs_direct_cmp_commit_data_verf(struct nfs_direct_req *dreq, data->ds_commit_index);/* verifier not set so always fail */ -if (verfp->committed <0 ) +if (verfp->committed <0 || data->res.verf->committed <=NFS_UNSTABLE )return 1 ; -return nfs_direct_cmp_verf (verfp, &data->verf); +return nfs_direct_cmp_verf (verfp, data->res.verf); }/**
fs/nfs/nfs3xdr.c +4 -1
@@ -2334,6 +2334,7 @@ static int nfs3_xdr_dec_commit3res(struct rpc_rqst *req, void *data) {struct nfs_commitres *result = data; +struct nfs_writeverf *verf = result->verf;enum nfs_stat status;int error;
@@ -2346,7 +2347,9 @@ static int nfs3_xdr_dec_commit3res(struct rpc_rqst *req, result->op_status = status;if (status !=NFS3_OK ) goto out_status; - error =decode_writeverf3 (xdr, &result->verf->verifier); + error =decode_writeverf3 (xdr, &verf->verifier); +if (!error) + verf->committed =NFS_FILE_SYNC ; out:return error; out_status:
fs/nfs/nfs42proc.c +28 -8
@@ -61,8 +61,11 @@ static int _nfs42_proc_fallocate(struct rpc_message *msg, struct file *filep, status =nfs4_set_rw_stateid (&args.falloc_stateid, lock->open_context, lock,FMODE_WRITE ); -if (status) +if (status) { +if (status == -EAGAIN ) + status = -NFS4ERR_BAD_STATEID ;return status; + } res.falloc_fattr =nfs_alloc_fattr ();if (!res.falloc_fattr)
@@ -287,8 +290,11 @@ static ssize_t _nfs42_proc_copy(struct file *src, }else { status =nfs4_set_rw_stateid (&args->src_stateid, src_lock->open_context, src_lock,FMODE_READ ); -if (status) +if (status) { +if (status == -EAGAIN ) + status = -NFS4ERR_BAD_STATEID ;return status; + } } status =nfs_filemap_write_and_wait_range (file_inode (src)->i_mapping, pos_src, pos_src + (loff_t )count -1 );
@@ -297,8 +303,11 @@ static ssize_t _nfs42_proc_copy(struct file *src, status =nfs4_set_rw_stateid (&args->dst_stateid, dst_lock->open_context, dst_lock,FMODE_WRITE ); -if (status) +if (status) { +if (status == -EAGAIN ) + status = -NFS4ERR_BAD_STATEID ;return status; + } status =nfs_sync_inode (dst_inode);if (status)
@@ -546,8 +555,11 @@ static int _nfs42_proc_copy_notify(struct file *src, struct file *dst, status =nfs4_set_rw_stateid (&args->cna_src_stateid, ctx, l_ctx,FMODE_READ );nfs_put_lock_context (l_ctx); -if (status) +if (status) { +if (status == -EAGAIN ) + status = -NFS4ERR_BAD_STATEID ;return status; + } status =nfs4_call_sync (src_server->client, src_server, &msg, &args->cna_seq_args, &res->cnr_seq_res,0 );
@@ -618,8 +630,11 @@ static loff_t _nfs42_proc_llseek(struct file *filep, status =nfs4_set_rw_stateid (&args.sa_stateid, lock->open_context, lock,FMODE_READ ); -if (status) +if (status) { +if (status == -EAGAIN ) + status = -NFS4ERR_BAD_STATEID ;return status; + } status =nfs_filemap_write_and_wait_range (inode->i_mapping, offset,LLONG_MAX );
@@ -994,13 +1009,18 @@ static int _nfs42_proc_clone(struct rpc_message *msg, struct file *src_f, status =nfs4_set_rw_stateid (&args.src_stateid, src_lock->open_context, src_lock,FMODE_READ ); -if (status) +if (status) { +if (status == -EAGAIN ) + status = -NFS4ERR_BAD_STATEID ;return status; - + } status =nfs4_set_rw_stateid (&args.dst_stateid, dst_lock->open_context, dst_lock,FMODE_WRITE ); -if (status) +if (status) { +if (status == -EAGAIN ) + status = -NFS4ERR_BAD_STATEID ;return status; + } res.dst_fattr =nfs_alloc_fattr ();if (!res.dst_fattr)
fs/nfs/nfs4_fs.h +1 -3
@@ -446,9 +446,7 @@ extern void nfs4_schedule_state_renewal(struct nfs_client *);extern void nfs4_renewd_prepare_shutdown (struct nfs_server *);extern void nfs4_kill_renewd (struct nfs_client *);extern void nfs4_renew_state (struct work_struct *); -extern void nfs4_set_lease_period (struct nfs_client *clp, -unsigned long lease, -unsigned long lastrenewed); +extern void nfs4_set_lease_period (struct nfs_client *clp,unsigned long lease);/* nfs4state.c */
fs/nfs/nfs4proc.c +15 -4
@@ -3187,6 +3187,11 @@ static struct nfs4_state *nfs4_do_open(struct inode *dir, exception.retry =1 ;continue ; } +if (status == -NFS4ERR_EXPIRED ) { +nfs4_schedule_lease_recovery (server->nfs_client); + exception.retry =1 ; +continue ; + }if (status == -EAGAIN ) {/* We must have found a delegation */ exception.retry =1 ;
@@ -3239,6 +3244,8 @@ static int _nfs4_do_setattr(struct inode *inode,nfs_put_lock_context (l_ctx);if (status == -EIO )return -EBADF ; +else if (status == -EAGAIN ) + goto zero_stateid; }else { zero_stateid:nfs4_stateid_copy (&arg->stateid, &zero_stateid);
@@ -5019,16 +5026,13 @@ static int nfs4_do_fsinfo(struct nfs_server *server, struct nfs_fh *fhandle, strstruct nfs4_exception exception = { .interruptible = true, }; -unsigned long now = jiffies;int err; do { err = _nfs4_do_fsinfo(server, fhandle, fsinfo); trace_nfs4_fsinfo(server, fhandle, fsinfo->fattr, err); if (err == 0) { - nfs4_set_lease_period(server->nfs_client, - fsinfo->lease_time * HZ, - now); + nfs4_set_lease_period(server->nfs_client, fsinfo->lease_time * HZ); break; } err = nfs4_handle_exception(server, err, &exception);
@@ -6084,6 +6088,7 @@ int nfs4_proc_setclientid(struct nfs_client *clp, u32 program, .callback_data = &setclientid, .flags = RPC_TASK_TIMEOUT | RPC_TASK_NO_ROUND_ROBIN, }; +unsigned long now = jiffies;int status;/* nfs_client_id4 */
@@ -6116,6 +6121,9 @@ int nfs4_proc_setclientid(struct nfs_client *clp, u32 program, clp->cl_acceptor =rpcauth_stringify_acceptor (setclientid.sc_cred);put_rpccred (setclientid.sc_cred); } + +if (status ==0 ) +do_renew_lease (clp, now); out:trace_nfs4_setclientid (clp, status);dprintk ("NFS reply setclientid: %d\n" , status);
@@ -8203,6 +8211,7 @@ static int _nfs4_proc_exchange_id(struct nfs_client *clp, const struct cred *crestruct rpc_task *task;struct nfs41_exchange_id_args *argp;struct nfs41_exchange_id_res *resp; +unsigned long now = jiffies;int status; task =nfs4_run_exchange_id (clp, cred, sp4_how,NULL );
@@ -8223,6 +8232,8 @@ static int _nfs4_proc_exchange_id(struct nfs_client *clp, const struct cred *creif (status !=0 ) goto out; +do_renew_lease (clp, now); + clp->cl_clientid = resp->clientid; clp->cl_exchange_flags = resp->flags; clp->cl_seqid = resp->seqid;
fs/nfs/nfs4renewd.c +1 -4
@@ -138,15 +138,12 @@ nfs4_kill_renewd(struct nfs_client *clp)* * @clp: pointer to nfs_client * @lease: new value for lease period -* @lastrenewed: time at which lease was last renewed */ void nfs4_set_lease_period (struct nfs_client *clp, -unsigned long lease, -unsigned long lastrenewed) +unsigned long lease) {spin_lock (&clp->cl_lock); clp->cl_lease_time = lease; - clp->cl_last_renewal = lastrenewed;spin_unlock (&clp->cl_lock);/* Cap maximum reconnect timeout at 1/2 lease period */
fs/nfs/nfs4state.c +1 -3
@@ -92,17 +92,15 @@ static int nfs4_setup_state_renewal(struct nfs_client *clp) {int status;struct nfs_fsinfo fsinfo; -unsigned long now;if (!test_bit (NFS_CS_CHECK_LEASE_TIME , &clp->cl_res_state)) {nfs4_schedule_state_renewal (clp);return 0 ; } - now = jiffies; status =nfs4_proc_get_lease_time (clp, &fsinfo);if (status ==0 ) { -nfs4_set_lease_period (clp, fsinfo.lease_time *HZ , now); +nfs4_set_lease_period (clp, fsinfo.lease_time *HZ );nfs4_schedule_state_renewal (clp); }
fs/nfs/nfs4trace.h +17 -16
@@ -352,7 +352,7 @@ DECLARE_EVENT_CLASS(nfs4_clientid_event, ), TP_fast_assign( - __entry->error = error; + __entry->error = error < 0 ? -error : 0;__assign_str (dstaddr, clp->cl_hostname); ),
@@ -432,7 +432,8 @@ TRACE_EVENT(nfs4_sequence_done, __entry->target_highest_slotid = res->sr_target_highest_slotid; __entry->status_flags = res->sr_status_flags; - __entry->error = res->sr_status; + __entry->error = res->sr_status <0 ? + -res->sr_status :0 ; ), TP_printk( "error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u "
@@ -640,7 +641,7 @@ TRACE_EVENT(nfs4_state_mgr_failed, ), TP_fast_assign( - __entry->error = status; + __entry->error = status < 0 ? -status : 0; __entry->state = clp->cl_state;__assign_str (hostname, clp->cl_hostname);__assign_str (section, section);
@@ -659,7 +660,7 @@ TRACE_EVENT(nfs4_xdr_status,TP_PROTO ( const struct xdr_stream *xdr, u32 op, - int error + u32 error ), TP_ARGS(xdr, op, error),
@@ -849,7 +850,7 @@ TRACE_EVENT(nfs4_close, __entry->fileid =NFS_FILEID (inode); __entry->fhandle =nfs_fhandle_hash (NFS_FH (inode)); __entry->fmode = (__force unsigned int )state->state; - __entry->error = error; + __entry->error = error <0 ? -error :0 ; __entry->stateid_seq =be32_to_cpu (args->stateid.seqid); __entry->stateid_hash =
@@ -914,7 +915,7 @@ DECLARE_EVENT_CLASS(nfs4_lock_event,TP_fast_assign ( const struct inode *inode = state->inode; - __entry->error = error; + __entry->error = error <0 ? -error :0 ; __entry->cmd = cmd; __entry->type = request->fl_type; __entry->start = request->fl_start;
@@ -986,7 +987,7 @@ TRACE_EVENT(nfs4_set_lock,TP_fast_assign ( const struct inode *inode = state->inode; - __entry->error = error; + __entry->error = error <0 ? -error :0 ; __entry->cmd = cmd; __entry->type = request->fl_type; __entry->start = request->fl_start;
@@ -1164,7 +1165,7 @@ TRACE_EVENT(nfs4_delegreturn_exit,TP_fast_assign ( __entry->dev = res->server->s_dev; __entry->fhandle =nfs_fhandle_hash (args->fhandle); - __entry->error = error; + __entry->error = error <0 ? -error :0 ; __entry->stateid_seq =be32_to_cpu (args->stateid->seqid); __entry->stateid_hash =
@@ -1204,7 +1205,7 @@ DECLARE_EVENT_CLASS(nfs4_test_stateid_event,TP_fast_assign ( const struct inode *inode = state->inode; - __entry->error = error; + __entry->error = error <0 ? -error :0 ; __entry->dev = inode->i_sb->s_dev; __entry->fileid =NFS_FILEID (inode); __entry->fhandle =nfs_fhandle_hash (NFS_FH (inode));
@@ -1306,7 +1307,7 @@ TRACE_EVENT(nfs4_lookupp,TP_fast_assign ( __entry->dev = inode->i_sb->s_dev; __entry->ino =NFS_FILEID (inode); - __entry->error = error; + __entry->error = error <0 ? -error :0 ; ), TP_printk(
@@ -1342,7 +1343,7 @@ TRACE_EVENT(nfs4_rename, __entry->dev = olddir->i_sb->s_dev; __entry->olddir =NFS_FILEID (olddir); __entry->newdir =NFS_FILEID (newdir); - __entry->error = error; + __entry->error = error <0 ? -error :0 ;__assign_str (oldname, oldname->name);__assign_str (newname, newname->name); ),
@@ -1433,7 +1434,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_stateid_event, __entry->dev = inode->i_sb->s_dev; __entry->fileid =NFS_FILEID (inode); __entry->fhandle =nfs_fhandle_hash (NFS_FH (inode)); - __entry->error = error; + __entry->error = error <0 ? -error :0 ; __entry->stateid_seq =be32_to_cpu (stateid->seqid); __entry->stateid_hash =
@@ -1489,7 +1490,7 @@ DECLARE_EVENT_CLASS(nfs4_getattr_event, __entry->valid = fattr->valid; __entry->fhandle =nfs_fhandle_hash (fhandle); __entry->fileid = (fattr->valid &NFS_ATTR_FATTR_FILEID ) ? fattr->fileid :0 ; - __entry->error = error; + __entry->error = error <0 ? -error :0 ; ), TP_printk(
@@ -1536,7 +1537,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_callback_event, ), TP_fast_assign( - __entry->error = error; + __entry->error = error < 0 ? -error : 0; __entry->fhandle =nfs_fhandle_hash (fhandle);if (!IS_ERR_OR_NULL (inode)) { __entry->fileid =NFS_FILEID (inode);
@@ -1593,7 +1594,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_stateid_callback_event, ), TP_fast_assign( - __entry->error = error; + __entry->error = error < 0 ? -error : 0; __entry->fhandle =nfs_fhandle_hash (fhandle);if (!IS_ERR_OR_NULL (inode)) { __entry->fileid =NFS_FILEID (inode);
@@ -1896,7 +1897,7 @@ TRACE_EVENT(nfs4_layoutget, __entry->iomode = args->iomode; __entry->offset = args->offset; __entry->count = args->length; - __entry->error = error; + __entry->error = error <0 ? -error :0 ; __entry->stateid_seq =be32_to_cpu (state->stateid.seqid); __entry->stateid_hash =
fs/nfs/nfs4xdr.c +4 -1
@@ -4313,11 +4313,14 @@ static int decode_write_verifier(struct xdr_stream *xdr, struct nfs_write_verifistatic int decode_commit (struct xdr_stream *xdr,struct nfs_commitres *res) { +struct nfs_writeverf *verf = res->verf;int status; status =decode_op_hdr (xdr,OP_COMMIT );if (!status) - status =decode_write_verifier (xdr, &res->verf->verifier); + status =decode_write_verifier (xdr, &verf->verifier); +if (!status) + verf->committed =NFS_FILE_SYNC ;return status; }
fs/nfs/pnfs.c +1 -3
@@ -1425,7 +1425,7 @@ bool pnfs_roc(struct inode *ino,/* lo ref dropped in pnfs_roc_release() */ layoutreturn =pnfs_prepare_layoutreturn (lo, &stateid, &iomode);/* If the creds don't match, we can't compound the layoutreturn */ -if (!layoutreturn || cred != lo->plh_lc_cred) +if (!layoutreturn ||cred_fscmp (cred, lo->plh_lc_cred) !=0 ) goto out_noroc; roc = layoutreturn;
@@ -1998,8 +1998,6 @@ pnfs_update_layout(struct inode *ino,trace_pnfs_update_layout (ino, pos, count, iomode, lo, lseg,PNFS_UPDATE_LAYOUT_INVALID_OPEN ); -if (status != -EAGAIN ) - goto out_unlock;spin_unlock (&ino->i_lock);nfs4_schedule_stateid_recovery (server, ctx->state);pnfs_clear_first_layoutget (lo);
fs/nfs/pnfs_nfs.c +3 -4
@@ -31,12 +31,11 @@ EXPORT_SYMBOL_GPL(pnfs_generic_rw_release);/* Fake up some data that will cause nfs_commit_release to retry the writes. */ void pnfs_generic_prepare_to_resend_writes (struct nfs_commit_data *data) { -struct nfs_page *first =nfs_list_entry (data->pages.next); +struct nfs_writeverf *verf = data->res.verf; data->task.tk_status =0 ; -memcpy (&data->verf.verifier, &first->wb_verf, -sizeof (data->verf.verifier)); - data->verf.verifier.data[0 ]++;/* ensure verifier mismatch */ +memset (&verf->verifier,0 ,sizeof (verf->verifier)); + verf->committed =NFS_UNSTABLE ; }EXPORT_SYMBOL_GPL (pnfs_generic_prepare_to_resend_writes);
fs/nfs/write.c +11 -1
@@ -243,7 +243,15 @@ static void nfs_grow_file(struct page *page, unsigned int offset, unsigned int c/* A writeback failed: mark the page as bad, and invalidate the page cache */ static void nfs_set_pageerror (struct address_space *mapping) { +struct inode *inode = mapping->host; +nfs_zap_mapping (mapping->host, mapping); +/* Force file size revalidation */ +spin_lock (&inode->i_lock); +NFS_I (inode)->cache_validity |=NFS_INO_REVAL_FORCED | +NFS_INO_REVAL_PAGECACHE | +NFS_INO_INVALID_SIZE ; +spin_unlock (&inode->i_lock); }static void nfs_mapping_set_error (struct page *page,int error)
@@ -1829,6 +1837,7 @@ static void nfs_commit_done(struct rpc_task *task, void *calldata)static void nfs_commit_release_pages (struct nfs_commit_data *data) { +const struct nfs_writeverf *verf = data->res.verf;struct nfs_page *req;int status = data->task.tk_status;struct nfs_commit_info cinfo;
@@ -1856,7 +1865,8 @@ static void nfs_commit_release_pages(struct nfs_commit_data *data)/* Okay, COMMIT succeeded, apparently. Check the verifier * returned by the server against all stored verfs. */ -if (!nfs_write_verifier_cmp (&req->wb_verf, &data->verf.verifier)) { +if (verf->committed >NFS_UNSTABLE && + !nfs_write_verifier_cmp (&req->wb_verf, &verf->verifier)) {/* We have a match */ if (req->wb_page)nfs_inode_remove_request (req);
include/linux/mlx5/driver.h +5 -0
@@ -461,6 +461,11 @@ struct mlx5_vf_context {int enabled;u64 port_guid;u64 node_guid; +/* Valid bits are used to validate administrative guid only. +* Enabled after ndo_set_vf_guid +*/ + u8 port_guid_valid:1; + u8 node_guid_valid:1;enum port_state_policy policy; };
include/rdma/ib_verbs.h +3 -0
@@ -4300,6 +4300,9 @@ static inline int ib_check_mr_access(int flags) !(flags & IB_ACCESS_LOCAL_WRITE))return -EINVAL ; +if (flags & ~IB_ACCESS_SUPPORTED ) +return -EINVAL ;
Lines of this file are not shown. View the raw message.
security/selinux/avc.c +24 -18
42 lines not on this page · raw message
tools/testing/selftests/bpf/prog_tests/sockmap_basic.c new file +74 -0
74 lines not on this page · raw message
virt/kvm/arm/pmu.c +31 -11
42 lines not on this page · 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.