Linux 5.7.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.7.11 kernel.
All users of the 5.7 kernel series must upgrade.
The updated 5.7.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.7.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
------------
Makefile | 6 arch/arm/boot/dts/omap3-n900.dts | 12 + arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts | 5 arch/arm64/kernel/debug-monitors.c | 4 arch/arm64/kernel/vdso32/Makefile | 2 arch/mips/pci/pci-xtalk-bridge.c | 5 arch/parisc/include/asm/atomic.h | 2 arch/riscv/include/asm/barrier.h | 10 + arch/riscv/mm/init.c | 33 +++- arch/s390/kernel/perf_cpum_cf_events.c | 4 arch/x86/boot/compressed/Makefile | 4 arch/x86/kernel/apic/io_apic.c | 10 - arch/x86/kernel/apic/msi.c | 18 +- arch/x86/kernel/apic/vector.c | 1 arch/x86/kernel/vmlinux.lds.S | 1 arch/x86/math-emu/wm_sqrt.S | 2 arch/x86/platform/uv/uv_irq.c | 3 arch/xtensa/kernel/setup.c | 3 arch/xtensa/kernel/xtensa_ksyms.c | 4 drivers/android/binder_alloc.c | 2 drivers/base/regmap/regmap.c | 2 drivers/char/mem.c | 10 - drivers/crypto/chelsio/chtls/chtls_io.c | 7 drivers/dma/fsl-edma-common.c | 26 +-- drivers/dma/ioat/dma.c | 12 + drivers/dma/ioat/dma.h | 2 drivers/dma/tegra210-adma.c | 5 drivers/dma/ti/k3-udma-private.c | 1 drivers/dma/ti/k3-udma.c | 33 ++-- drivers/firmware/efi/efi-pstore.c | 5 drivers/firmware/efi/efi.c | 12 + drivers/firmware/efi/efivars.c | 5 drivers/firmware/efi/vars.c | 6 drivers/firmware/psci/psci_checker.c | 5 drivers/fpga/dfl-afu-main.c | 3 drivers/fpga/dfl-pci.c | 3 drivers/gpio/gpio-arizona.c | 7 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 20 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 9 - drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 9 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 7 drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c | 10 - drivers/gpu/drm/nouveau/nouveau_svm.c | 1 drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.c | 4 drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c | 4 drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 2 drivers/hid/hid-alps.c | 2 drivers/hid/hid-apple.c | 18 ++ drivers/hid/hid-steam.c | 6 drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c | 8 + drivers/hwmon/aspeed-pwm-tacho.c | 2 drivers/hwmon/nct6775.c | 6 drivers/hwmon/pmbus/adm1275.c | 10 + drivers/hwmon/scmi-hwmon.c | 2 drivers/i2c/busses/i2c-qcom-geni.c | 6 drivers/i2c/busses/i2c-rcar.c | 3 drivers/infiniband/core/cm.c | 2 drivers/infiniband/core/rdma_core.c | 6 drivers/infiniband/hw/mlx5/odp.c | 22 ++- drivers/infiniband/hw/mlx5/srq_cmd.c | 4 drivers/input/mouse/elan_i2c_core.c | 9 - drivers/input/mouse/synaptics.c | 1 drivers/interconnect/qcom/msm8916.c | 14 - drivers/iommu/amd_iommu.c | 5 drivers/iommu/hyperv-iommu.c | 5 drivers/iommu/intel_irq_remapping.c | 2 drivers/iommu/qcom_iommu.c | 37 ++--- drivers/md/dm-integrity.c | 4 drivers/md/dm.c | 22 ++- drivers/mfd/ioc3.c | 5 drivers/mmc/host/sdhci-of-aspeed.c | 2 drivers/net/bonding/bond_main.c | 10 - drivers/net/bonding/bond_netlink.c | 3 drivers/net/dsa/microchip/ksz9477.c | 42 +++-- drivers/net/dsa/microchip/ksz_common.c | 2 drivers/net/dsa/microchip/ksz_common.h | 2 drivers/net/dsa/mv88e6xxx/chip.c | 22 ++- drivers/net/dsa/mv88e6xxx/chip.h | 1 drivers/net/ethernet/atheros/ag71xx.c | 3 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 22 ++- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 5 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 2 drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 2 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 2 drivers/net/ethernet/freescale/enetc/enetc_pf.c | 1 drivers/net/ethernet/freescale/fec.h | 1 drivers/net/ethernet/freescale/fec_main.c | 23 ++- drivers/net/ethernet/freescale/fec_ptp.c | 12 + drivers/net/ethernet/hisilicon/hns3/hnae3.h | 1 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 10 + drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 2 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 49 +++--- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h | 3 drivers/net/ethernet/marvell/sky2.c | 2 drivers/net/ethernet/mellanox/mlxsw/core.c | 3 drivers/net/ethernet/mellanox/mlxsw/core_env.c | 48 ++++-- drivers/net/ethernet/pensando/ionic/ionic_ethtool.c | 7 drivers/net/ethernet/pensando/ionic/ionic_lif.c | 50 +++---- drivers/net/ethernet/pensando/ionic/ionic_lif.h | 8 - drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c | 29 ++++ drivers/net/ethernet/pensando/ionic/ionic_txrx.c | 6 drivers/net/ethernet/qlogic/qed/qed_cxt.c | 4 drivers/net/ethernet/qlogic/qed/qed_dev.c | 2 drivers/net/ethernet/qlogic/qed/qed_int.c | 50 ++++--- drivers/net/ethernet/qlogic/qed/qed_int.h | 4 drivers/net/ethernet/smsc/smc91x.c | 4 drivers/net/ethernet/socionext/sni_ave.c | 2 drivers/net/geneve.c | 2 drivers/net/hippi/rrunner.c | 2 drivers/net/ieee802154/adf7242.c | 4 drivers/net/netdevsim/netdev.c | 4 drivers/net/phy/dp83640.c | 4 drivers/net/usb/ax88172a.c | 1 drivers/net/wan/lapbether.c | 9 + drivers/net/wireless/ath/ath9k/hif_usb.c | 52 +++++-- drivers/net/wireless/ath/ath9k/hif_usb.h | 5 drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 8 - drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 2 drivers/net/wireless/mediatek/mt76/mt76.h | 1 drivers/net/wireless/mediatek/mt76/mt76x0/pci.c | 2 drivers/net/wireless/mediatek/mt76/mt76x02.h | 2 drivers/net/wireless/mediatek/mt76/mt76x02_mcu.c | 3 drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c | 16 ++ drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c | 1 drivers/net/wireless/mediatek/mt76/mt76x2/pci_main.c | 19 -- drivers/pci/controller/vmd.c | 5 drivers/pci/pci.c | 30 +--- drivers/perf/arm-cci.c | 1 drivers/perf/arm-ccn.c | 1 drivers/perf/arm_dsu_pmu.c | 1 drivers/perf/arm_smmuv3_pmu.c | 2 drivers/perf/arm_spe_pmu.c | 1 drivers/perf/fsl_imx8_ddr_perf.c | 2 drivers/perf/hisilicon/hisi_uncore_ddrc_pmu.c | 2 drivers/perf/hisilicon/hisi_uncore_hha_pmu.c | 2 drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c | 2 drivers/perf/qcom_l2_pmu.c | 1 drivers/perf/qcom_l3_pmu.c | 1 drivers/perf/thunderx2_pmu.c | 1 drivers/perf/xgene_pmu.c | 1 drivers/pinctrl/pinctrl-amd.h | 2 drivers/platform/x86/asus-wmi.c | 1 drivers/platform/x86/intel_speed_select_if/isst_if_common.h | 3 drivers/platform/x86/intel_speed_select_if/isst_if_mbox_pci.c | 1 drivers/platform/x86/intel_speed_select_if/isst_if_mmio.c | 1 drivers/scsi/mpt3sas/mpt3sas_ctl.c | 12 - drivers/scsi/scsi_devinfo.c | 1 drivers/scsi/scsi_dh.c | 1 drivers/scsi/scsi_transport_spi.c | 2 drivers/soc/amlogic/meson-gx-socinfo.c | 8 - drivers/soc/qcom/rpmh.c | 8 - drivers/spi/spi-mt65xx.c | 15 +- drivers/staging/comedi/drivers/addi_apci_1032.c | 20 +- drivers/staging/comedi/drivers/addi_apci_1500.c | 24 ++- drivers/staging/comedi/drivers/addi_apci_1564.c | 20 +- drivers/staging/comedi/drivers/ni_6527.c | 2 drivers/staging/wlan-ng/prism2usb.c | 16 ++ drivers/tty/serial/8250/8250_core.c | 2 drivers/tty/serial/8250/8250_exar.c | 12 + drivers/tty/serial/8250/8250_mtk.c | 18 ++ drivers/tty/serial/serial-tegra.c | 7 drivers/tty/serial/xilinx_uartps.c | 8 - drivers/tty/vt/vt.c | 29 ++-- drivers/usb/cdns3/ep0.c | 30 ++-- drivers/usb/cdns3/trace.h | 6 drivers/usb/dwc3/dwc3-pci.c | 8 + drivers/usb/gadget/udc/gr_udc.c | 7 drivers/usb/host/xhci-mtk-sch.c | 4 drivers/usb/host/xhci-pci.c | 3 drivers/usb/host/xhci-tegra.c | 2 drivers/video/fbdev/core/bitblit.c | 4 drivers/video/fbdev/core/fbcon_ccw.c | 4 drivers/video/fbdev/core/fbcon_cw.c | 4 drivers/video/fbdev/core/fbcon_ud.c | 4 fs/btrfs/backref.c | 1 fs/btrfs/disk-io.c | 1 fs/btrfs/extent_io.c | 3 fs/btrfs/relocation.c | 2 fs/btrfs/volumes.c | 8 + fs/cifs/inode.c | 10 - fs/efivarfs/super.c | 6 fs/exfat/dir.c | 2 fs/exfat/exfat_fs.h | 2 fs/exfat/file.c | 2 fs/exfat/nls.c | 8 - fs/fuse/dev.c | 3 fs/nfs/direct.c | 13 - fs/nfs/file.c | 1 fs/nfsd/nfs4state.c | 20 ++ include/asm-generic/mmiowb.h | 6 include/asm-generic/vmlinux.lds.h | 5 include/linux/device-mapper.h | 1 include/linux/efi.h | 1 include/linux/io-mapping.h | 5 include/linux/mod_devicetable.h | 2 include/linux/xattr.h | 3 include/sound/rt5670.h | 1 include/uapi/linux/idxd.h | 3 include/uapi/linux/input-event-codes.h | 3 kernel/bpf/verifier.c | 10 + kernel/events/uprobes.c | 2 mm/hugetlb.c | 15 +- mm/khugepaged.c | 3 mm/memcontrol.c | 4 mm/mmap.c | 16 +- mm/shmem.c | 2 mm/slab_common.c | 35 +++- net/mac80211/rx.c | 26 +++ net/netfilter/ipvs/ip_vs_sync.c | 12 + net/netfilter/nf_tables_api.c | 41 +---- net/vmw_vsock/virtio_transport.c | 2 scripts/decode_stacktrace.sh | 4 scripts/gdb/linux/symbols.py | 2 sound/core/info.c | 4 sound/pci/hda/patch_hdmi.c | 36 +++-- sound/pci/hda/patch_realtek.c | 2 sound/soc/codecs/rt5670.c | 71 +++++++--- sound/soc/codecs/rt5670.h | 2 sound/soc/intel/boards/bdw-rt5677.c | 1 sound/soc/intel/boards/bytcht_es8316.c | 4 sound/soc/intel/boards/cht_bsw_rt5672.c | 23 +-- sound/soc/qcom/Kconfig | 2 sound/soc/soc-topology.c | 24 ++- tools/perf/pmu-events/arch/s390/cf_z15/extended.json | 2 224 files changed, 1283 insertions(+), 636 deletions(-)
Aaron Ma (1):
drm/amd/display: add dmcub check on RENOIR
Alessio Bonfiglio (1):
iwlwifi: Make some Killer Wireless-AC 1550 cards work again
Alexander Lobakin (2):
qed: suppress "don't support RoCE & iWARP" flooding on HW init
qed: suppress false-positives interrupt error messages on HW init
Angelo Dureghello (1):
dmaengine: fsl-edma: fix wrong tcd endianness for big-endian cpu
Ard Biesheuvel (1):
efi/efivars: Expose RT service availability via efivars abstraction
Arnd Bergmann (1):
x86: math-emu: Fix up 'cmp' insn for clang ias
Arvind Sankar (1):
x86/boot: Don't add the EFI stub to targets
Atish Patra (1):
RISC-V: Do not rely on initrd_start/end computed during early dt parsing
Barry Song (1):
mm/hugetlb: avoid hardcoding while checking if cma is enabled
Ben Skeggs (1):
drm/nouveau/i2c/g94-: increase NV_PMGR_DP_AUXCTL_TRANSACTREQ timeout
Bjorn Helgaas (1):
Revert "PCI/PM: Assume ports without DLL Link Active train links in 100 ms"
Boris Burkov (1):
btrfs: fix mount failure caused by race with umount
Caiyuan Xie (1):
HID: alps: support devices with report id 2
Chen-Yu Tsai (1):
drm: sun4i: hdmi: Fix inverted HPD result
Chengguang Xu (1):
vfs/xattr: mm/shmem: kernfs: release simple xattr entry in a right way
Christian Hewitt (1):
soc: amlogic: meson-gx-socinfo: Fix S905X3 and S905D3 ID's
Christoph Hellwig (1):
dm: use bio_uninit instead of bio_disassociate_blkg
Christophe JAILLET (1):
hippi: Fix a size used in a 'pci_free_consistent()' in an error handling path
Chu Lin (1):
hwmon: (adm1275) Make sure we are reading enough data for different chips
Chunfeng Yun (1):
usb: xhci-mtk: fix the failure of bandwidth allocation
Claudiu Manoil (1):
enetc: Remove the mdio bus on PF probe bailout
Cong Wang (2):
bonding: check return value of register_netdevice() in bond_newlink()
geneve: fix an uninitialized value in geneve_changelink()
Cristian Marussi (1):
hwmon: (scmi) Fix potential buffer overflow in scmi_hwmon_probe()
Damien Le Moal (1):
scsi: mpt3sas: Fix unlock imbalance
Dave Jiang (1):
dmaengine: idxd: fix hw descriptor fields for delta record
Derek Basehore (1):
Input: elan_i2c - only increment wakeup count on touch
Dinghao Liu (1):
dmaengine: tegra210-adma: Fix runtime PM imbalance on error
Douglas Anderson (2):
soc: qcom: rpmh: Dirt can only make you dirtier, not cleaner
i2c: i2c-qcom-geni: Fix DMA transfer race
Eddie James (1):
mmc: sdhci-of-aspeed: Fix clock divider calculation
Eric Biggers (1):
/dev/mem: Add missing memory barriers for devmem_inode
Evgeny Novikov (2):
hwmon: (aspeed-pwm-tacho) Avoid possible buffer overflow
usb: gadget: udc: gr_udc: fix memleak on error handling path in gr_ep_init()
Fangrui Song (1):
Makefile: Fix GCC_TOOLCHAIN_DIR prefix for Clang cross compilation
Federico Ricchiuto (1):
HID: i2c-hid: add Mediacom FlexBook edge13 to descriptor override
Felix Fietkau (1):
mt76: mt76x02: fix handling MCU timeouts during hw restart
Filipe Manana (1):
btrfs: fix double free on ulist after backref resolution failure
Florian Westphal (1):
netfilter: nf_tables: fix nat hook table deletion
Forest Crossman (1):
usb: xhci: Fix ASM2142/ASM3142 DMA addressing
Gavin Shan (1):
drivers/firmware/psci: Fix memory leakage in alloc_init_cpu_groups()
Geert Uytterhoeven (1):
ASoC: qcom: Drop HAS_DMA dependency to fix link failure
George Kennedy (1):
ax88172a: fix ax88172a_unbind() failures
Georgi Djakov (1):
interconnect: msm8916: Fix buswidth of pcnoc_s nodes
Greg Kroah-Hartman (1):
Linux 5.7.11
Guenter Roeck (1):
hwmon: (nct6775) Accept PECI Calibration as temperature source for NCT6798D
Hans de Goede (4):
ASoC: rt5670: Correct RT5670_LDO_SEL_MASK
ASoC: Intel: cht_bsw_rt5672: Change bus format to I2S 2 channel
HID: apple: Disable Fn-key key-re-mapping on clone keyboards
ASoC: rt5670: Add new gpio1_is_ext_spk_en quirk and enable it on the Lenovo Miix 2 10
Heikki Krogerus (2):
usb: dwc3: pci: add support for the Intel Tiger Lake PCH -H variant
usb: dwc3: pci: add support for the Intel Jasper Lake
Helmut Grohne (2):
net: dsa: microchip: call phy_remove_link_mode during probe
tty: xilinx_uartps: Really fix id assignment
Huang Guobin (1):
net: ag71xx: add missed clk_disable_unprepare in error path of probe
Hugh Dickins (1):
mm/memcg: fix refcount error while moving and swapping
Hyeongseok Kim (1):
exfat: fix wrong size update of stream entry by typo
Ian Abbott (4):
staging: comedi: addi_apci_1032: check INSN_CONFIG_DIGITAL_TRIG shift
staging: comedi: ni_6527: fix INSN_CONFIG_DIGITAL_TRIG support
staging: comedi: addi_apci_1500: check INSN_CONFIG_DIGITAL_TRIG shift
staging: comedi: addi_apci_1564: check INSN_CONFIG_DIGITAL_TRIG shift
Ilya Katsnelson (1):
Input: synaptics - enable InterTouch for ThinkPad X1E 1st gen
Ilya Ponetayev (1):
exfat: fix name_hash computation on big endian systems
Ioana Ciornei (1):
dpaa2-eth: check fsl_mc_get_endpoint for IS_ERR_OR_NULL()
J. Bruce Fields (1):
nfsd4: fix NULL dereference in nfsd/clients display code
Jack Xiao (2):
drm/amdgpu/gfx10: fix race condition for kiq drm/amdgpu: fix preemption unit test
Jacky Hu (1):
pinctrl: amd: fix npins for uart0 in kerncz_groups
Jason Gunthorpe (1):
RDMA/mlx5: Prevent prefetch from racing with implicit destruction
Jerry (Fangzhi) Zuo (1):
drm/amd/display: Check DMCU Exists Before Loading
Jian Shen (1):
net: hns3: fix return value error when query MAC link status fail
Jing Xiangfeng (1):
ASoC: Intel: bytcht_es8316: Add missed put_device()
Joerg Roedel (1):
x86, vmlinux.lds: Page-align end of ..page_aligned sections
Johan Hovold (1):
serial: tegra: fix CREAD handling for PIO
Johannes Berg (1):
iwlwifi: mvm: don't call iwl_mvm_free_inactive_queue() under RCU
Johannes Thumshirn (1):
scsi: mpt3sas: Fix error returns in BRM_status_show
John David Anglin (1):
parisc: Add atomic64_set_release() define to avoid CPU soft lockups
Jon Hunter (1):
usb: tegra: Fix allocation for the FPCI context
Joonho Wohn (1):
ALSA: hda/realtek: Fixed ALC298 sound bug by adding quirk for Samsung Notebook Pen S
Kai Vehmanen (1):
ALSA: hda/hdmi: fix failures at PCM open on Intel ICL and later
Kirill A. Shutemov (2):
mm/mmap.c: close race between munmap() and expand_upwards()/downwards()
khugepaged: fix null-pointer dereference due to race
Leon Romanovsky (1):
RDMA/core: Fix race in rdma_alloc_commit_uobject()
Leonid Ravich (1):
dmaengine: ioat setting ioat timeout as module parameter
Liu Jian (3):
ieee802154: fix one possible memleak in adf7242_probe
dpaa_eth: Fix one possible memleak in dpaa_eth_probe
mlxsw: destroy workqueue when trap_register in mlxsw_emad_init
Maor Gottlieb (2):
RDMA/mlx5: Use xa_lock_irq when access to SRQ table RDMA/cm: Protect access to remote_sidr_table
Marc Kleine-Budde (1):
regmap: dev_get_regmap_match(): fix string comparison
Mark O'Donovan (1):
ath9k: Fix regression with Atheros 9271
Markus Theil (1):
mac80211: allow rx of mesh eapol frames with default rx key
Masahiro Yamada (1):
kbuild: fix single target builds for external modules
Matthew Gerlach (1):
fpga: dfl: fix bug in port reset handshake
Matthew Howell (1):
serial: exar: Fix GPIO configuration for Sealevel cards based on XR17V35X
Max Filippov (2):
xtensa: fix __sync_fetch_and_{and,or}_4 declarations
xtensa: update *pos in cpuinfo_op.next
Merlijn Wajer (2):
Input: add SW_MACHINE_COVER
ARM: dts: n900: remove mmc1 card detect gpio
Michael Chan (1):
bnxt_en: Fix completion ring sizing with TPA enabled.
Michael J. Ruhl (1):
io-mapping: indicate mapping failure
Miklos Szeredi (1):
fuse: fix weird page warning
Mikulas Patocka (1):
dm integrity: fix integrity recalculation that is improperly skipped
Muchun Song (1):
mm: memcg/slab: fix memory leak at non-root kmem_cache destroy
Namjae Jeon (2):
exfat: fix overflow issue in exfat_cluster_to_sector()
exfat: fix wrong hint_stat initialization in exfat_find_dir_entry()
Nathan Chancellor (1):
arm64: vdso32: Fix '--prefix=' value for newer versions of clang
Navid Emamdoost (2):
gpio: arizona: handle pm_runtime_get_sync failure case
gpio: arizona: put pm_runtime in case of failure
Oleg Nesterov (1):
uprobes: Change handle_swbp() to send SIGTRAP with si_code=SI_KERNEL, to fix GDB regression
Olga Kornievskaia (1):
SUNRPC reverting d03727b248d0 ("NFSv4 fix CLOSE not waiting for direct IO compeletion")
Palmer Dabbelt (1):
RISC-V: Upgrade smp_mb__after_spinlock() to iorw,iorw
Paweł Gronowski (1):
drm/amdgpu: Fix NULL dereference in dpm sysfs handlers
PeiSen Hou (1):
ALSA: hda/realtek - fixup for yet another Intel reference board
Peter Chen (2):
usb: cdns3: ep0: fix some endian issues
usb: cdns3: trace: fix some endian issues
Peter Ujfalusi (2):
dmaengine: ti: k3-udma: Fix cleanup code for alloc_chan_resources
dmaengine: ti: k3-udma: Fix the running channel handling in alloc_chan_resources
Pi-Hsun Shih (1):
scripts/decode_stacktrace: strip basepath from all paths
Pierre-Louis Bossart (3):
ASoC: topology: fix kernel oops on route addition error
ASoC: topology: fix tlvs in error handling for widget_dmixer
ASoC: Intel: bdw-rt5677: fix non BE conversion
Qi Liu (2):
drivers/perf: Fix kernel panic when rmmod PMU modules during perf sampling drivers/perf: Prevent forced unbinding of PMU drivers
Qiu Wenbo (1):
drm/amd/powerplay: fix a crash when overclocking Vega M
Qiujun Huang (1):
ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb
Qu Wenruo (1):
btrfs: reloc: clear DEAD_RELOC_TREE bit for orphan roots to prevent runaway balance
Ralph Campbell (1):
drm/nouveau/nouveau: fix page fault on device private memory
Rob Clark (1):
iommu/qcom: Use domain rather than dev as tlb cookie
Robbie Ko (1):
btrfs: fix page leaks after failure to lock page for delalloc
Rodrigo Rivas Costa (1):
HID: steam: fixes race in handling device list.
Russell King (2):
net: dsa: mv88e6xxx: fix in-band AN link establishment
arm64: dts: clearfog-gt-8k: fix switch link configuration
Rustam Kovhaev (1):
staging: wlan-ng: properly check endpoint types
Serge Semin (1):
serial: 8250_mtk: Fix high-speed baud rates clamping
Sergey Organov (2):
net: fec: fix hardware time stamping by external devices
net: dp83640: fix SIOCSHWTSTAMP to update the struct with actual configuration
Shannon Nelson (5):
ionic: use offset for ethtool regs data
ionic: fix up filter locks and debug msgs
ionic: update filter id after replay
ionic: keep rss hash after fw update
ionic: use mutex to protect queue operations
Srinivas Pandruvada (1):
platform/x86: ISST: Add new PCI device ids
Stefano Garzarella (2):
vsock/virtio: annotate 'the_virtio_vsock' RCU pointer scripts/gdb: fix lx-symbols 'gdb.error' while loading modules
Steve French (1):
Revert "cifs: Fix the target file was deleted when rename failed."
Steve Schremmer (1):
scsi: dh: Add Fujitsu device to devinfo and dh lists
Taehee Yoo (2):
bonding: check error value of register_netdevice() immediately
netdevsim: fix unbalaced locking in nsim_create()
Takashi Iwai (1):
ALSA: info: Drop WARN_ON() from buffer NULL sanity check
Tetsuo Handa (3):
binder: Don't use mmput() from shrinker function.
fbdev: Detect integer underflow at "struct fbcon_ops"->clear_margins.
vt: Reject zero-sized screen buffer size.
Thomas Gleixner (1):
irqdomain/treewide: Keep firmware node unconditionally allocated
Thomas Richter (1):
s390/cpum_cf,perf: change DFLT_CCERROR counter name
Tom Rix (2):
scsi: scsi_transport_spi: Fix function pointer check
net: sky2: initialize return of gm_phy_read
Vadim Pasternak (1):
mlxsw: core: Fix wrong SFP EEPROM reading for upper pages 1-3
Vasiliy Kupriakov (1):
platform/x86: asus-wmi: allow BAT1 battery name
Vasundhara Volam (2):
bnxt_en: Fix race when modifying pause settings.
bnxt_en: Init ethtool link settings after reading updated PHY configuration.
Vinay Kumar Yadav (1):
crypto/chtls: fix tls alert messages corrupted by tls data
Wang Hai (2):
net: smc91x: Fix possible memory leak in smc_drv_probe()
net: ethernet: ave: Fix error returns in ave_init
Will Deacon (2):
arm64: Use test_tsk_thread_flag() for checking TIF_SINGLESTEP asm-generic/mmiowb: Allow mmiowb_set_pending() when preemptible()
Wolfram Sang (1):
i2c: rcar: always clear ICSAR to avoid side effects
Xie He (1):
drivers/net/wan/lapbether: Fixed the value of hard_header_len
Xu Yilun (1):
fpga: dfl: pci: reduce the scope of variable 'ret'
Yang Yingliang (1):
serial: 8250: fix null-ptr-deref in serial8250_start_tx()
Yonghong Song (1):
bpf: Set the number of exception entries properly for subprograms
Yu Kuai (1):
dmaengine: ti: k3-udma: add missing put_device() call in of_xudma_dev_get()
Yunsheng Lin (2):
net: hns3: fix for not calculating TX BD send size correctly
net: hns3: fix error handling for desc filling
Zhang Changzhong (1):
net: bcmgenet: fix error returns in bcmgenet_probe()
guodeqing (1):
ipvs: fix the connection sync failed in some cases
leilk.liu (1):
spi: mediatek: use correct SPI_CFG2_REG MACRO
Greg Kroah-Hartman
maintainerMakefile +3 -3
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 7 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Kleptomaniac Octopus
@@ -549,7 +549,7 @@ ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) ifneq ($(CROSS_COMPILE),) CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%)) GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit)) -CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR) +CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE)) GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..) endif ifneq ($(GCC_TOOLCHAIN),)
@@ -1730,7 +1730,7 @@ PHONY += descend $(build-dirs) descend: $(build-dirs) $(build-dirs): prepare $(Q)$(MAKE) $(build)=$@ \ - single-build=$(if $(filter-out $@/, $(filter $@/%, $(single-no-ko))),1) \ + single-build=$(if $(filter-out $@/, $(filter $@/%, $(KBUILD_SINGLE_TARGETS))),1) \ need-builtin=1 need-modorder=1 clean-dirs := $(addprefix _clean_, $(clean-dirs))
arch/arm/boot/dts/omap3-n900.dts +8 -4
@@ -105,6 +105,14 @@ proximity_sensor { linux,code = <SW_FRONT_PROXIMITY>; linux,can-disable; }; + + machine_cover { + label = "Machine Cover"; + gpios = <&gpio6 0 GPIO_ACTIVE_LOW>; /* 160 */ + linux,input-type = <EV_SW>; + linux,code = <SW_MACHINE_COVER>; + linux,can-disable; + }; }; isp1707: isp1707 {
@@ -819,10 +827,6 @@ &mmc1 { pinctrl-0 = <&mmc1_pins>; vmmc-supply = <&vmmc1>; bus-width = <4>; - /* For debugging, it is often good idea to remove this GPIO. - It means you can remove back cover (to reboot by removing - battery) and still use the MMC card. */ - cd-gpios = <&gpio6 0 GPIO_ACTIVE_LOW>; /* 160 */ }; /* most boards use vaux3, only some old versions use vmmc2 instead */
arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts +1 -4
@@ -454,10 +454,7 @@ &cp1_eth2 { status = "okay"; phy-mode = "2500base-x"; phys = <&cp1_comphy5 2>; - fixed-link { - speed = <2500>; - full-duplex; - }; + managed = "in-band-status"; }; &cp1_spi1 {
arch/arm64/kernel/debug-monitors.c +2 -2
@@ -396,14 +396,14 @@ void user_rewind_single_step(struct task_struct *task)* If single step is active for this thread, then set SPSR.SS * to 1 to avoid returning to the active-pending state. */ -if (test_ti_thread_flag (task_thread_info (task),TIF_SINGLESTEP )) +if (test_tsk_thread_flag (task,TIF_SINGLESTEP ))set_regs_spsr_ss (task_pt_regs (task)); }NOKPROBE_SYMBOL (user_rewind_single_step);void user_fastforward_single_step (struct task_struct *task) { -if (test_ti_thread_flag (task_thread_info (task),TIF_SINGLESTEP )) +if (test_tsk_thread_flag (task,TIF_SINGLESTEP ))clear_regs_spsr_ss (task_pt_regs (task)); }
arch/arm64/kernel/vdso32/Makefile +1 -1
@@ -14,7 +14,7 @@ COMPAT_GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE_COMPAT)elfedit)) COMPAT_GCC_TOOLCHAIN := $(realpath $(COMPAT_GCC_TOOLCHAIN_DIR)/..) CC_COMPAT_CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE_COMPAT:%-=%)) -CC_COMPAT_CLANG_FLAGS += --prefix=$(COMPAT_GCC_TOOLCHAIN_DIR) +CC_COMPAT_CLANG_FLAGS += --prefix=$(COMPAT_GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE_COMPAT)) CC_COMPAT_CLANG_FLAGS += -no-integrated-as -Qunused-arguments ifneq ($(COMPAT_GCC_TOOLCHAIN),) CC_COMPAT_CLANG_FLAGS += --gcc-toolchain=$(COMPAT_GCC_TOOLCHAIN)
arch/mips/pci/pci-xtalk-bridge.c +3 -2
@@ -627,9 +627,10 @@ static int bridge_probe(struct platform_device *pdev)return -ENOMEM ; domain =irq_domain_create_hierarchy (parent,0 ,8 , fn, &bridge_domain_ops,NULL ); -irq_domain_free_fwnode (fn); -if (!domain) +if (!domain) { +irq_domain_free_fwnode (fn);return -ENOMEM ; + }pci_set_flags (PCI_PROBE_ONLY );
arch/parisc/include/asm/atomic.h +2 -0
@@ -212,6 +212,8 @@ atomic64_set(atomic64_t *v, s64 i)_atomic_spin_unlock_irqrestore (v, flags); } +#define atomic64_set_release (v, i) atomic64_set((v), (i)) +static __inline__s64 atomic64_read (const atomic64_t *v) {
arch/riscv/include/asm/barrier.h +9 -1
@@ -58,8 +58,16 @@ do { \* The AQ/RL pair provides a RCpc critical section, but there's not really any * way we can take advantage of that here because the ordering is only enforced * on that one lock. Thus, we're just doing a full fence. +* +* Since we allow writeX to be called from preemptive regions we need at least +* an "o" in the predecessor set to ensure device writes are visible before the +* task is marked as available for scheduling on a new hart. While I don't see +* any concrete reason we need a full IO fence, it seems safer to just upgrade +* this in order to avoid any IO crossing a scheduling boundary. In both +* instances the scheduler pairs this with an mb(), so nothing is necessary on +* the new hart. */ -#define smp_mb__after_spinlock () RISCV_FENCE(rw,rw) +#define smp_mb__after_spinlock () RISCV_FENCE(iorw,iorw)#include <asm-generic/barrier.h>
arch/riscv/mm/init.c +27 -6
@@ -94,19 +94,40 @@ void __init mem_init(void)#ifdef CONFIG_BLK_DEV_INITRD static void __init setup_initrd (void ) { +phys_addr_t start;unsigned long size; -if (initrd_start >= initrd_end) { -pr_info ("initrd not found or empty" ); +/* Ignore the virtul address computed during device tree parsing */ + initrd_start = initrd_end =0 ; + +if (!phys_initrd_size) +return ; +/* +* Round the memory region to page boundaries as per free_initrd_mem() +* This allows us to detect whether the pages overlapping the initrd +* are in use, but more importantly, reserves the entire set of pages +* as we don't want these pages allocated for other purposes. +*/ + start =round_down (phys_initrd_start,PAGE_SIZE ); + size = phys_initrd_size + (phys_initrd_start - start); + size =round_up (size,PAGE_SIZE ); + +if (!memblock_is_region_memory (start, size)) { +pr_err ("INITRD: 0x%08llx+0x%08lx is not a memory region" , + (u64 )start, size); goto disable; } -if (__pa_symbol (initrd_end) >PFN_PHYS (max_low_pfn)) { -pr_err ("initrd extends beyond end of memory" ); + +if (memblock_is_region_reserved (start, size)) { +pr_err ("INITRD: 0x%08llx+0x%08lx overlaps in-use memory region\n" , + (u64 )start, size); goto disable; } - size = initrd_end - initrd_start; -memblock_reserve (__pa_symbol (initrd_start), size); +memblock_reserve (start, size); +/* Now convert initrd to virtual addresses */ + initrd_start = (unsigned long )__va (phys_initrd_start); + initrd_end = initrd_start + phys_initrd_size; initrd_below_start_ok =1 ; pr_info("Initial ramdisk at: 0x%p (%lu bytes)\n",
arch/s390/kernel/perf_cpum_cf_events.c +2 -2
@@ -292,7 +292,7 @@ CPUMF_EVENT_ATTR(cf_z15, TX_C_TABORT_SPECIAL, 0x00f5);CPUMF_EVENT_ATTR (cf_z15,DFLT_ACCESS ,0x00f7 );CPUMF_EVENT_ATTR (cf_z15,DFLT_CYCLES ,0x00fc );CPUMF_EVENT_ATTR (cf_z15,DFLT_CC ,0x00108 ); -CPUMF_EVENT_ATTR (cf_z15,DFLT_CCERROR ,0x00109 ); +CPUMF_EVENT_ATTR (cf_z15,DFLT_CCFINISH ,0x00109 );CPUMF_EVENT_ATTR (cf_z15,MT_DIAG_CYCLES_ONE_THR_ACTIVE ,0x01c0 );CPUMF_EVENT_ATTR (cf_z15,MT_DIAG_CYCLES_TWO_THR_ACTIVE ,0x01c1 );
@@ -629,7 +629,7 @@ static struct attribute *cpumcf_z15_pmu_event_attr[] __initdata = {CPUMF_EVENT_PTR (cf_z15,DFLT_ACCESS ),CPUMF_EVENT_PTR (cf_z15,DFLT_CYCLES ),CPUMF_EVENT_PTR (cf_z15,DFLT_CC ), -CPUMF_EVENT_PTR (cf_z15,DFLT_CCERROR ), +CPUMF_EVENT_PTR (cf_z15,DFLT_CCFINISH ),CPUMF_EVENT_PTR (cf_z15,MT_DIAG_CYCLES_ONE_THR_ACTIVE ),CPUMF_EVENT_PTR (cf_z15,MT_DIAG_CYCLES_TWO_THR_ACTIVE ), NULL,
arch/x86/boot/compressed/Makefile +2 -2
@@ -88,8 +88,8 @@ endif vmlinux-objs-$(CONFIG_ACPI) += $(obj)/acpi.o -vmlinux-objs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a vmlinux-objs-$(CONFIG_EFI_MIXED) += $(obj)/efi_thunk_$(BITS).o +efi-obj-$(CONFIG_EFI_STUB) = $(objtree)/drivers/firmware/efi/libstub/lib.a # The compressed kernel is built with -fPIC/-fPIE so that a boot loader # can place it anywhere in memory and it will still run. However, since
@@ -113,7 +113,7 @@ endef quiet_cmd_check-and-link-vmlinux = LD $@ cmd_check-and-link-vmlinux = $(cmd_check_data_rel); $(cmd_ld) -$(obj)/vmlinux: $(vmlinux-objs-y) FORCE +$(obj)/vmlinux: $(vmlinux-objs-y) $(efi-obj-y) FORCE $(call if_changed,check-and-link-vmlinux) OBJCOPYFLAGS_vmlinux.bin := -R .comment -S
arch/x86/kernel/apic/io_apic.c +5 -5
@@ -2329,12 +2329,12 @@ static int mp_irqdomain_create(int ioapic) ip->irqdomain =irq_domain_create_linear (fn, hwirqs, cfg->ops, (void *)(long )ioapic); -/* Release fw handle if it was allocated above */ -if (!cfg->dev) -irq_domain_free_fwnode (fn); - -if (!ip->irqdomain) +if (!ip->irqdomain) { +/* Release fw handle if it was allocated above */ +if (!cfg->dev) +irq_domain_free_fwnode (fn);return -ENOMEM ; + } ip->irqdomain->parent = parent;
arch/x86/kernel/apic/msi.c +12 -6
@@ -262,12 +262,13 @@ void __init arch_init_msi_domain(struct irq_domain *parent) msi_default_domain =pci_msi_create_irq_domain (fn, &pci_msi_domain_info, parent); -irq_domain_free_fwnode (fn); } -if (!msi_default_domain) +if (!msi_default_domain) { +irq_domain_free_fwnode (fn);pr_warn ("failed to initialize irqdomain for MSI/MSI-x.\n" ); -else + }else { msi_default_domain->flags |=IRQ_DOMAIN_MSI_NOMASK_QUIRK ; + } }#ifdef CONFIG_IRQ_REMAP
@@ -300,7 +301,8 @@ struct irq_domain *arch_create_remap_msi_irq_domain(struct irq_domain *parent,if (!fn)return NULL ; d =pci_msi_create_irq_domain (fn, &pci_msi_ir_domain_info, parent); -irq_domain_free_fwnode (fn); +if (!d) +irq_domain_free_fwnode (fn); return d; }#endif
@@ -363,7 +365,8 @@ static struct irq_domain *dmar_get_irq_domain(void)if (fn) { dmar_domain =msi_create_irq_domain (fn, &dmar_msi_domain_info, x86_vector_domain); -irq_domain_free_fwnode (fn); +if (!dmar_domain) +irq_domain_free_fwnode (fn); } out:mutex_unlock (&dmar_lock);
@@ -488,7 +491,10 @@ struct irq_domain *hpet_create_irq_domain(int hpet_id) } d =msi_create_irq_domain (fn, domain_info, parent); -irq_domain_free_fwnode (fn); +if (!d) { +irq_domain_free_fwnode (fn); +kfree (domain_info); + }return d; }
arch/x86/kernel/apic/vector.c +0 -1
@@ -707,7 +707,6 @@ int __init arch_early_irq_init(void) x86_vector_domain =irq_domain_create_tree (fn, &x86_vector_domain_ops,NULL );BUG_ON (x86_vector_domain ==NULL ); -irq_domain_free_fwnode (fn);irq_set_default_host (x86_vector_domain);arch_init_msi_domain (x86_vector_domain);
arch/x86/kernel/vmlinux.lds.S +1 -0
@@ -359,6 +359,7 @@ SECTIONS .bss : AT(ADDR(.bss) - LOAD_OFFSET) { __bss_start = .; *(.bss..page_aligned) + . = ALIGN(PAGE_SIZE); *(BSS_MAIN) BSS_DECRYPTED . = ALIGN(PAGE_SIZE);
arch/x86/math-emu/wm_sqrt.S +1 -1
@@ -209,7 +209,7 @@ sqrt_stage_2_finish: #ifdef PARANOID /* It should be possible to get here only if the arg is ffff....ffff */ - cmp $0xffffffff,FPU_fsqrt_arg_1 + cmpl $0xffffffff,FPU_fsqrt_arg_1 jnz sqrt_stage_2_error #endif /* PARANOID */
arch/x86/platform/uv/uv_irq.c +2 -1
@@ -167,9 +167,10 @@ static struct irq_domain *uv_get_irq_domain(void) goto out; uv_domain =irq_domain_create_tree (fn, &uv_domain_ops,NULL ); -irq_domain_free_fwnode (fn);if (uv_domain) uv_domain->parent = x86_vector_domain; +else +irq_domain_free_fwnode (fn); out:mutex_unlock (&uv_lock);
arch/xtensa/kernel/setup.c +2 -1
@@ -725,7 +725,8 @@ c_start(struct seq_file *f, loff_t *pos)static void *c_next (struct seq_file *f,void *v,loff_t *pos) { -return NULL ; + ++*pos; +return c_start (f, pos); } static void
arch/xtensa/kernel/xtensa_ksyms.c +2 -2
@@ -87,13 +87,13 @@ void __xtensa_libgcc_window_spill(void) }EXPORT_SYMBOL (__xtensa_libgcc_window_spill); -unsigned long __sync_fetch_and_and_4 (unsigned long *p,unsigned long v) +unsigned int __sync_fetch_and_and_4 (volatile void *p,unsigned int v) {BUG (); }EXPORT_SYMBOL (__sync_fetch_and_and_4); -unsigned long __sync_fetch_and_or_4 (unsigned long *p,unsigned long v) +unsigned int __sync_fetch_and_or_4 (volatile void *p,unsigned int v) {BUG (); }
drivers/android/binder_alloc.c +1 -1
@@ -947,7 +947,7 @@ enum lru_status binder_alloc_free_page(struct list_head *item,trace_binder_unmap_user_end (alloc, index); }up_read (&mm->mmap_sem); -mmput (mm); +mmput_async (mm);trace_binder_unmap_kernel_start (alloc, index);
drivers/base/regmap/regmap.c +1 -1
@@ -1363,7 +1363,7 @@ static int dev_get_regmap_match(struct device *dev, void *res, void *data)/* If the user didn't specify a name match any */ if (data) -return (*r)->name == data; +return !strcmp ((*r)->name, data);else return 1 ; }
drivers/char/mem.c +7 -3
@@ -814,7 +814,8 @@ static struct inode *devmem_inode;#ifdef CONFIG_IO_STRICT_DEVMEM void revoke_devmem (struct resource *res) { -struct inode *inode =READ_ONCE (devmem_inode); +/* pairs with smp_store_release() in devmem_init_inode() */ +struct inode *inode =smp_load_acquire (&devmem_inode);/* * Check that the initialization has completed. Losing the race
@@ -1028,8 +1029,11 @@ static int devmem_init_inode(void)return rc; } -/* publish /dev/mem initialized */ -WRITE_ONCE (devmem_inode, inode); +/* +* Publish /dev/mem initialized. +* Pairs with smp_load_acquire() in revoke_devmem(). +*/ +smp_store_release (&devmem_inode, inode);return 0 ; }
drivers/crypto/chelsio/chtls/chtls_io.c +4 -3
@@ -1052,14 +1052,15 @@ int chtls_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) &record_type);if (err) goto out_err; + +/* Avoid appending tls handshake, alert to tls data */ +if (skb) +tx_skb_finalize (skb); } recordsz = size; csk->tlshws.txleft = recordsz; csk->tlshws.type = record_type; - -if (skb) -ULP_SKB_CB (skb)->ulp.tls.type = record_type; } if (!skb || (ULP_SKB_CB(skb)->flags & ULPCB_FLAG_NO_APPEND) ||
drivers/dma/fsl-edma-common.c +14 -12
@@ -352,26 +352,28 @@ static void fsl_edma_set_tcd_regs(struct fsl_edma_chan *fsl_chan,/* * TCD parameters are stored in struct fsl_edma_hw_tcd in little * endian format. However, we need to load the TCD registers in -* big- or little-endian obeying the eDMA engine model endian. +* big- or little-endian obeying the eDMA engine model endian, +* and this is performed from specific edma_write functions */ edma_writew (edma,0 , ®s->tcd[ch].csr); -edma_writel (edma,le32_to_cpu (tcd->saddr), ®s->tcd[ch].saddr); -edma_writel (edma,le32_to_cpu (tcd->daddr), ®s->tcd[ch].daddr); -edma_writew (edma,le16_to_cpu (tcd->attr), ®s->tcd[ch].attr); -edma_writew (edma,le16_to_cpu (tcd->soff), ®s->tcd[ch].soff); +edma_writel (edma, (s32 )tcd->saddr, ®s->tcd[ch].saddr); +edma_writel (edma, (s32 )tcd->daddr, ®s->tcd[ch].daddr); -edma_writel (edma,le32_to_cpu (tcd->nbytes), ®s->tcd[ch].nbytes); -edma_writel (edma,le32_to_cpu (tcd->slast), ®s->tcd[ch].slast); +edma_writew (edma, (s16 )tcd->attr, ®s->tcd[ch].attr); +edma_writew (edma, tcd->soff, ®s->tcd[ch].soff); -edma_writew (edma,le16_to_cpu (tcd->citer), ®s->tcd[ch].citer); -edma_writew (edma,le16_to_cpu (tcd->biter), ®s->tcd[ch].biter); -edma_writew (edma,le16_to_cpu (tcd->doff), ®s->tcd[ch].doff); +edma_writel (edma, (s32 )tcd->nbytes, ®s->tcd[ch].nbytes); +edma_writel (edma, (s32 )tcd->slast, ®s->tcd[ch].slast); -edma_writel (edma,le32_to_cpu (tcd->dlast_sga), +edma_writew (edma, (s16 )tcd->citer, ®s->tcd[ch].citer); +edma_writew (edma, (s16 )tcd->biter, ®s->tcd[ch].biter); +edma_writew (edma, (s16 )tcd->doff, ®s->tcd[ch].doff); + +edma_writel (edma, (s32 )tcd->dlast_sga, ®s->tcd[ch].dlast_sga); -edma_writew (edma,le16_to_cpu (tcd->csr), ®s->tcd[ch].csr); +edma_writew (edma, (s16 )tcd->csr, ®s->tcd[ch].csr); } static inline
drivers/dma/ioat/dma.c +12 -0
@@ -26,6 +26,18 @@#include "../dmaengine.h" +int completion_timeout =200 ; +module_param (completion_timeout, int,0644 ); +MODULE_PARM_DESC (completion_timeout, +"set ioat completion timeout [msec] (default 200 [msec])" ); +int idle_timeout =2000 ; +module_param (idle_timeout, int,0644 ); +MODULE_PARM_DESC (idle_timeout, +"set ioat idel timeout [msec] (default 2000 [msec])" ); + +#define IDLE_TIMEOUT msecs_to_jiffies(idle_timeout) +#define COMPLETION_TIMEOUT msecs_to_jiffies(completion_timeout) +static char *chanerr_str[] = {"DMA Transfer Source Address Error" ,"DMA Transfer Destination Address Error" ,
drivers/dma/ioat/dma.h +0 -2
@@ -99,8 +99,6 @@ struct ioatdma_chan {#define IOAT_RUN 5#define IOAT_CHAN_ACTIVE 6struct timer_list timer; -#define COMPLETION_TIMEOUT msecs_to_jiffies(100) -#define IDLE_TIMEOUT msecs_to_jiffies(2000)#define RESET_DELAY msecs_to_jiffies(100)struct ioatdma_device *ioat_dma;dma_addr_t completion_dma;
drivers/dma/tegra210-adma.c +4 -1
@@ -658,6 +658,7 @@ static int tegra_adma_alloc_chan_resources(struct dma_chan *dc) ret =pm_runtime_get_sync (tdc2dev (tdc));if (ret <0 ) { +pm_runtime_put_noidle (tdc2dev (tdc));free_irq (tdc->irq, tdc);return ret; }
@@ -869,8 +870,10 @@ static int tegra_adma_probe(struct platform_device *pdev)pm_runtime_enable (&pdev->dev); ret =pm_runtime_get_sync (&pdev->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (&pdev->dev); goto rpm_disable; + } ret =tegra_adma_init (tdma);if (ret)
drivers/dma/ti/k3-udma-private.c +1 -0
@@ -42,6 +42,7 @@ struct udma_dev *of_xudma_dev_get(struct device_node *np, const char *property) ud =platform_get_drvdata (pdev);if (!ud) {pr_debug ("UDMA has not been probed\n" ); +put_device (&pdev->dev);return ERR_PTR (-EPROBE_DEFER ); }
drivers/dma/ti/k3-udma.c +17 -16
@@ -1773,7 +1773,8 @@ static int udma_alloc_chan_resources(struct dma_chan *chan)dev_err (ud->ddev.dev,"Descriptor pool allocation failed\n" ); uc->use_dma_pool = false; -return -ENOMEM ; + ret = -ENOMEM ; + goto err_cleanup; } }
@@ -1793,16 +1794,18 @@ static int udma_alloc_chan_resources(struct dma_chan *chan) ret =udma_get_chan_pair (uc);if (ret) -return ret; + goto err_cleanup; ret =udma_alloc_tx_resources (uc); -if (ret) -return ret; +if (ret) { +udma_put_rchan (uc); + goto err_cleanup; + } ret =udma_alloc_rx_resources (uc);if (ret) {udma_free_tx_resources (uc); -return ret; + goto err_cleanup; } uc->config.src_thread = ud->psil_base + uc->tchan->id;
@@ -1820,10 +1823,8 @@ static int udma_alloc_chan_resources(struct dma_chan *chan) uc->id); ret =udma_alloc_tx_resources (uc); -if (ret) { - uc->config.remote_thread_id =-1 ; -return ret; - } +if (ret) + goto err_cleanup; uc->config.src_thread = ud->psil_base + uc->tchan->id; uc->config.dst_thread = uc->config.remote_thread_id;
@@ -1840,10 +1841,8 @@ static int udma_alloc_chan_resources(struct dma_chan *chan) uc->id); ret =udma_alloc_rx_resources (uc); -if (ret) { - uc->config.remote_thread_id =-1 ; -return ret; - } +if (ret) + goto err_cleanup; uc->config.src_thread = uc->config.remote_thread_id; uc->config.dst_thread = (ud->psil_base + uc->rchan->id) |
@@ -1858,7 +1857,9 @@ static int udma_alloc_chan_resources(struct dma_chan *chan)/* Can not happen */ dev_err (uc->ud->dev,"%s: chan%d invalid direction (%u)\n" , __func__, uc->id, uc->config.dir); -return -EINVAL ; + ret = -EINVAL ; + goto err_cleanup; + }/* check if the channel configuration was successful */
@@ -1867,7 +1868,7 @@ static int udma_alloc_chan_resources(struct dma_chan *chan)if (udma_is_chan_running (uc)) {dev_warn (ud->dev,"chan%d: is running!\n" , uc->id); -udma_stop (uc); +udma_reset_chan (uc, false);if (udma_is_chan_running (uc)) {dev_err (ud->dev,"chan%d: won't stop!\n" , uc->id); goto err_res_free;
@@ -1936,7 +1937,7 @@ static int udma_alloc_chan_resources(struct dma_chan *chan) err_res_free:udma_free_tx_resources (uc);udma_free_rx_resources (uc); - +err_cleanup:udma_reset_uchan (uc);if (uc->use_dma_pool) {
drivers/firmware/efi/efi-pstore.c +1 -4
@@ -356,10 +356,7 @@ static struct pstore_info efi_pstore_info = {static __init int efivars_pstore_init (void ) { -if (!efi_rt_services_supported (EFI_RT_SUPPORTED_VARIABLE_SERVICES )) -return 0 ; - -if (!efivars_kobject ()) +if (!efivars_kobject () || !efivar_supports_writes ())return 0 ;if (efivars_pstore_disable)
drivers/firmware/efi/efi.c +8 -4
@@ -176,11 +176,13 @@ static struct efivar_operations generic_ops;static int generic_ops_register (void ) { generic_ops.get_variable = efi.get_variable; - generic_ops.set_variable = efi.set_variable; - generic_ops.set_variable_nonblocking = efi.set_variable_nonblocking; generic_ops.get_next_variable = efi.get_next_variable; generic_ops.query_variable_store = efi_query_variable_store; +if (efi_rt_services_supported (EFI_RT_SUPPORTED_SET_VARIABLE )) { + generic_ops.set_variable = efi.set_variable; + generic_ops.set_variable_nonblocking = efi.set_variable_nonblocking; + }return efivars_register (&generic_efivars, &generic_ops, efi_kobj); }
@@ -382,7 +384,8 @@ static int __init efisubsys_init(void)return -ENOMEM ; } -if (efi_rt_services_supported (EFI_RT_SUPPORTED_VARIABLE_SERVICES )) { +if (efi_rt_services_supported (EFI_RT_SUPPORTED_GET_VARIABLE | +EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME )) {efivar_ssdt_load (); error =generic_ops_register ();if (error)
@@ -416,7 +419,8 @@ static int __init efisubsys_init(void) err_remove_group:sysfs_remove_group (efi_kobj, &efi_subsys_attr_group); err_unregister: -if (efi_rt_services_supported (EFI_RT_SUPPORTED_VARIABLE_SERVICES )) +if (efi_rt_services_supported (EFI_RT_SUPPORTED_GET_VARIABLE | +EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME ))generic_ops_unregister (); err_put:kobject_put (efi_kobj);
drivers/firmware/efi/efivars.c +1 -4
@@ -680,11 +680,8 @@ int efivars_sysfs_init(void)struct kobject *parent_kobj =efivars_kobject ();int error =0 ; -if (!efi_rt_services_supported (EFI_RT_SUPPORTED_VARIABLE_SERVICES )) -return -ENODEV ; -/* No efivars has been registered yet */ -if (!parent_kobj) +if (!parent_kobj || !efivar_supports_writes ())return 0 ; printk(KERN_INFO "EFI Variables Facility v%s %s\n", EFIVARS_VERSION,
drivers/firmware/efi/vars.c +6 -0
@@ -1229,3 +1229,9 @@ int efivars_unregister(struct efivars *efivars)return rv; }EXPORT_SYMBOL_GPL (efivars_unregister); + +int efivar_supports_writes (void ) +{ +return __efivars && __efivars->ops->set_variable; +} +EXPORT_SYMBOL_GPL (efivar_supports_writes);
drivers/firmware/psci/psci_checker.c +4 -1
@@ -157,8 +157,10 @@ static int alloc_init_cpu_groups(cpumask_var_t **pcpu_groups) cpu_groups =kcalloc (nb_available_cpus,sizeof (cpu_groups),GFP_KERNEL ); -if (!cpu_groups) +if (!cpu_groups) { +free_cpumask_var (tmp);return -ENOMEM ; + }cpumask_copy (tmp, cpu_online_mask);
@@ -167,6 +169,7 @@ static int alloc_init_cpu_groups(cpumask_var_t **pcpu_groups)topology_core_cpumask (cpumask_any (tmp));if (!alloc_cpumask_var (&cpu_groups[num_groups],GFP_KERNEL )) { +free_cpumask_var (tmp);free_cpu_groups (num_groups, &cpu_groups);return -ENOMEM ; }
drivers/fpga/dfl-afu-main.c +2 -1
@@ -83,7 +83,8 @@ int __afu_port_disable(struct platform_device *pdev)* on this port and minimum soft reset pulse width has elapsed. * Driver polls port_soft_reset_ack to determine if reset done by HW. */ -if (readq_poll_timeout (base +PORT_HDR_CTRL , v, v &PORT_CTRL_SFTRST , +if (readq_poll_timeout (base +PORT_HDR_CTRL , v, + v &PORT_CTRL_SFTRST_ACK ,RST_POLL_INVL ,RST_POLL_TIMEOUT )) {dev_err (&pdev->dev,"timeout, fail to reset device\n" );return -ETIMEDOUT ;
drivers/fpga/dfl-pci.c +2 -1
@@ -227,7 +227,6 @@ static int cci_pci_sriov_configure(struct pci_dev *pcidev, int num_vfs) {struct cci_drvdata *drvdata =pci_get_drvdata (pcidev);struct dfl_fpga_cdev *cdev = drvdata->cdev; -int ret =0 ;if (!num_vfs) {/*
@@ -239,6 +238,8 @@ static int cci_pci_sriov_configure(struct pci_dev *pcidev, int num_vfs)dfl_fpga_cdev_config_ports_pf (cdev); }else { +int ret; +/* * before enable SRIOV, put released ports into VF access mode * first of all.
drivers/gpio/gpio-arizona.c +6 -1
@@ -64,6 +64,7 @@ static int arizona_gpio_get(struct gpio_chip *chip, unsigned offset) ret =pm_runtime_get_sync (chip->parent);if (ret <0 ) {dev_err (chip->parent,"Failed to resume: %d\n" , ret); +pm_runtime_put_autosuspend (chip->parent);return ret; }
@@ -72,12 +73,15 @@ static int arizona_gpio_get(struct gpio_chip *chip, unsigned offset)if (ret <0 ) {dev_err (chip->parent,"Failed to drop cache: %d\n" , ret); +pm_runtime_put_autosuspend (chip->parent);return ret; } ret =regmap_read (arizona->regmap, reg, &val); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_autosuspend (chip->parent);return ret; + }pm_runtime_mark_last_busy (chip->parent);pm_runtime_put_autosuspend (chip->parent);
@@ -106,6 +110,7 @@ static int arizona_gpio_direction_out(struct gpio_chip *chip, ret =pm_runtime_get_sync (chip->parent);if (ret <0 ) {dev_err (chip->parent,"Failed to resume: %d\n" , ret); +pm_runtime_put (chip->parent);return ret; } }
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +15 -5
@@ -1156,27 +1156,37 @@ static void amdgpu_ib_preempt_job_recovery(struct drm_gpu_scheduler *sched)static void amdgpu_ib_preempt_mark_partial_job (struct amdgpu_ring *ring) {struct amdgpu_job *job; -struct drm_sched_job *s_job; +struct drm_sched_job *s_job, *tmp;uint32_t preempt_seq;struct dma_fence *fence, **ptr;struct amdgpu_fence_driver *drv = &ring->fence_drv;struct drm_gpu_scheduler *sched = &ring->sched; +bool preempted = true;if (ring->funcs->type !=AMDGPU_RING_TYPE_GFX )return ; preempt_seq =le32_to_cpu (*(drv->cpu_addr +2 )); -if (preempt_seq <=atomic_read (&drv->last_seq)) -return ; +if (preempt_seq <=atomic_read (&drv->last_seq)) { + preempted = false; + goto no_preempt; + } preempt_seq &= drv->num_fences_mask; ptr = &drv->fences[preempt_seq]; fence =rcu_dereference_protected (*ptr,1 ); +no_preempt:spin_lock (&sched->job_list_lock); -list_for_each_entry (s_job, &sched->ring_mirror_list, node) { +list_for_each_entry_safe (s_job, tmp, &sched->ring_mirror_list, node) { +if (dma_fence_is_signaled (&s_job->s_fence->finished)) { +/* remove job from ring_mirror_list */ +list_del_init (&s_job->node); + sched->ops->free_job (s_job); +continue ; + } job =to_amdgpu_job (s_job); -if (job->fence == fence) +if (preempted && job->fence == fence)/* mark the job as preempted */ job->preemption_status |=AMDGPU_IB_PREEMPTED ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +3 -6
@@ -775,8 +775,7 @@ static ssize_t amdgpu_set_pp_od_clk_voltage(struct device *dev, tmp_str++;while (isspace (*++tmp_str)); -while (tmp_str[0 ]) { - sub_str =strsep (&tmp_str, delimiter); +while ((sub_str =strsep (&tmp_str, delimiter)) !=NULL ) { ret =kstrtol (sub_str,0 , ¶meter[parameter_size]);if (ret)return -EINVAL ;
@@ -1036,8 +1035,7 @@ static ssize_t amdgpu_read_mask(const char *buf, size_t count, uint32_t *mask)memcpy (buf_cpy, buf, bytes); buf_cpy[bytes] ='\0' ; tmp = buf_cpy; -while (tmp[0 ]) { - sub_str =strsep (&tmp, delimiter); +while ((sub_str =strsep (&tmp, delimiter)) !=NULL ) {if (strlen (sub_str)) { ret =kstrtol (sub_str,0 , &level);if (ret)
@@ -1634,8 +1632,7 @@ static ssize_t amdgpu_set_pp_power_profile_mode(struct device *dev, i++;memcpy (buf_cpy, buf, count-i); tmp_str = buf_cpy; -while (tmp_str[0 ]) { - sub_str =strsep (&tmp_str, delimiter); +while ((sub_str =strsep (&tmp_str, delimiter)) !=NULL ) { ret =kstrtol (sub_str,0 , ¶meter[parameter_size]);if (ret)return -EINVAL ;
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +8 -1
@@ -4746,12 +4746,17 @@ static int gfx_v10_0_ring_preempt_ib(struct amdgpu_ring *ring)struct amdgpu_device *adev = ring->adev;struct amdgpu_kiq *kiq = &adev->gfx.kiq;struct amdgpu_ring *kiq_ring = &kiq->ring; +unsigned long flags;if (!kiq->pmf || !kiq->pmf->kiq_unmap_queues)return -EINVAL ; -if (amdgpu_ring_alloc (kiq_ring, kiq->pmf->unmap_queues_size)) +spin_lock_irqsave (&kiq->ring_lock, flags); + +if (amdgpu_ring_alloc (kiq_ring, kiq->pmf->unmap_queues_size)) { +spin_unlock_irqrestore (&kiq->ring_lock, flags);return -ENOMEM ; + }/* assert preemption condition */ amdgpu_ring_set_preempt_cond_exec (ring, false);
@@ -4762,6 +4767,8 @@ static int gfx_v10_0_ring_preempt_ib(struct amdgpu_ring *ring) ++ring->trail_seq);amdgpu_ring_commit (kiq_ring); +spin_unlock_irqrestore (&kiq->ring_lock, flags); +/* poll the trailing fence */ for (i =0 ; i < adev->usec_timeout; i++) { if (ring->trail_seq ==
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +6 -1
@@ -1342,9 +1342,14 @@ static int dm_late_init(void *handle)struct dmcu_iram_parameters params;unsigned int linear_lut[16 ];int i; -struct dmcu *dmcu = adev->dm.dc->res_pool->dmcu; +struct dmcu *dmcu =NULL ;bool ret; +if (!adev->dm.fw_dmcu && !adev->dm.dmub_fw) +return detect_mst_link_for_all_connectors (adev->ddev); + + dmcu = adev->dm.dc->res_pool->dmcu; +for (i =0 ; i <16 ; i++) linear_lut[i] =0xFFFF * i /15 ;
drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c +6 -4
@@ -642,9 +642,6 @@ static int vegam_get_dependency_volt_by_clk(struct pp_hwmgr *hwmgr,/* sclk is bigger than max sclk in the dependence table */ *voltage |= (dep_table->entries[i -1 ].vddc *VOLTAGE_SCALE ) <<VDDC_SHIFT ; - vddci =phm_find_closest_vddci (&(data->vddci_voltage_table), - (dep_table->entries[i -1 ].vddc - - (uint16_t )VDDC_VDDCI_DELTA ));if (SMU7_VOLTAGE_CONTROL_NONE == data->vddci_control) *voltage |= (data->vbios_boot_state.vddci_bootup_value *
@@ -652,8 +649,13 @@ static int vegam_get_dependency_volt_by_clk(struct pp_hwmgr *hwmgr,else if (dep_table->entries[i -1 ].vddci) *voltage |= (dep_table->entries[i -1 ].vddci *VOLTAGE_SCALE ) <<VDDC_SHIFT ; -else +else { + vddci =phm_find_closest_vddci (&(data->vddci_voltage_table), + (dep_table->entries[i -1 ].vddc - + (uint16_t )VDDC_VDDCI_DELTA )); + *voltage |= (vddci *VOLTAGE_SCALE ) <<VDDCI_SHIFT ; + }if (SMU7_VOLTAGE_CONTROL_NONE == data->mvdd_control) *mvdd = data->vbios_boot_state.mvdd_bootup_value *VOLTAGE_SCALE ;
drivers/gpu/drm/nouveau/nouveau_svm.c +1 -0
@@ -534,6 +534,7 @@ static int nouveau_range_fault(struct nouveau_svmm *svmm, .flags = nouveau_svm_pfn_flags, .values = nouveau_svm_pfn_values, .pfn_shift = NVIF_VMM_PFNMAP_V0_ADDR_SHIFT, + .dev_private_owner = drm->dev, };struct mm_struct *mm = notifier->notifier.mm;long ret;
drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.c +2 -2
@@ -118,10 +118,10 @@ g94_i2c_aux_xfer(struct nvkm_i2c_aux *obj, bool retry,if (retries)udelay (400 ); -/* transaction request, wait up to 1ms for it to complete */ +/* transaction request, wait up to 2ms for it to complete */ nvkm_wr32 (device,0x00e4e4 + base,0x00010000 | ctrl); - timeout =1000 ; + timeout =2000 ; do { ctrl = nvkm_rd32(device, 0x00e4e4 + base); udelay(1);
drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c +2 -2
@@ -118,10 +118,10 @@ gm200_i2c_aux_xfer(struct nvkm_i2c_aux *obj, bool retry,if (retries)udelay (400 ); -/* transaction request, wait up to 1ms for it to complete */ +/* transaction request, wait up to 2ms for it to complete */ nvkm_wr32 (device,0x00d954 + base,0x00010000 | ctrl); - timeout =1000 ; + timeout =2000 ; do { ctrl = nvkm_rd32(device, 0x00d954 + base); udelay(1);
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c +1 -1
@@ -263,7 +263,7 @@ sun4i_hdmi_connector_detect(struct drm_connector *connector, bool force)unsigned long reg; reg =readl (hdmi->base +SUN4I_HDMI_HPD_REG ); -if (reg &SUN4I_HDMI_HPD_HIGH ) { +if (!(reg &SUN4I_HDMI_HPD_HIGH )) {cec_phys_addr_invalidate (hdmi->cec_adap);return connector_status_disconnected; }
drivers/hid/hid-alps.c +2 -0
@@ -25,6 +25,7 @@#define U1_MOUSE_REPORT_ID 0x01/* Mouse data ReportID */ #define U1_ABSOLUTE_REPORT_ID 0x03/* Absolute data ReportID */ +#define U1_ABSOLUTE_REPORT_ID_SECD 0x02/* FW-PTP Absolute data ReportID */ #define U1_FEATURE_REPORT_ID 0x05/* Feature ReportID */ #define U1_SP_ABSOLUTE_REPORT_ID 0x06/* Feature ReportID */
@@ -368,6 +369,7 @@ static int u1_raw_event(struct alps_dev *hdata, u8 *data, int size)case U1_FEATURE_REPORT_ID :break ;case U1_ABSOLUTE_REPORT_ID : +case U1_ABSOLUTE_REPORT_ID_SECD :for (i =0 ; i < hdata->max_fingers; i++) {u8 *contact = &data[i *5 ];
drivers/hid/hid-apple.c +18 -0
@@ -54,6 +54,7 @@ MODULE_PARM_DESC(swap_opt_cmd, "Swap the Option (\"Alt\") and Command (\"Flag\")struct apple_sc {unsigned long quirks;unsigned int fn_on; +unsigned int fn_found; DECLARE_BITMAP(pressed_numlock, KEY_CNT); };
@@ -339,12 +340,15 @@ static int apple_input_mapping(struct hid_device *hdev, struct hid_input *hi, struct hid_field *field, struct hid_usage *usage, unsigned long **bit, int *max) { + struct apple_sc *asc = hid_get_drvdata(hdev); +if (usage->hid == (HID_UP_CUSTOM |0x0003 ) || usage->hid == (HID_UP_MSVENDOR |0x0003 ) || usage->hid == (HID_UP_HPVENDOR2 |0x0003 )) {/* The fn key on Apple USB keyboards */ set_bit (EV_REP , hi->input->evbit);hid_map_usage_clear (hi, usage, bit, max,EV_KEY ,KEY_FN ); + asc->fn_found = true;apple_setup_input (hi->input);return 1 ; }
@@ -371,6 +375,19 @@ static int apple_input_mapped(struct hid_device *hdev, struct hid_input *hi,return 0 ; } +static int apple_input_configured (struct hid_device *hdev, +struct hid_input *hidinput) +{ +struct apple_sc *asc =hid_get_drvdata (hdev); + +if ((asc->quirks &APPLE_HAS_FN ) && !asc->fn_found) { +hid_info (hdev,"Fn key not found (Apple Wireless Keyboard clone?), disabling Fn key handling\n" ); + asc->quirks =0 ; + } + +return 0 ; +} +static int apple_probe (struct hid_device *hdev,const struct hid_device_id *id) {
@@ -585,6 +602,7 @@ static struct hid_driver apple_driver = { .event = apple_event, .input_mapping = apple_input_mapping, .input_mapped = apple_input_mapped, + .input_configured = apple_input_configured, };module_hid_driver (apple_driver);
drivers/hid/hid-steam.c +4 -2
@@ -526,7 +526,8 @@ static int steam_register(struct steam_device *steam)steam_battery_register (steam);mutex_lock (&steam_devices_lock); -list_add (&steam->list, &steam_devices); +if (list_empty (&steam->list)) +list_add (&steam->list, &steam_devices);mutex_unlock (&steam_devices_lock); }
@@ -552,7 +553,7 @@ static void steam_unregister(struct steam_device *steam)hid_info (steam->hdev,"Steam Controller '%s' disconnected" , steam->serial_no);mutex_lock (&steam_devices_lock); -list_del (&steam->list); +list_del_init (&steam->list);mutex_unlock (&steam_devices_lock); steam->serial_no[0 ] =0 ; }
@@ -738,6 +739,7 @@ static int steam_probe(struct hid_device *hdev,mutex_init (&steam->mutex); steam->quirks = id->driver_data;INIT_WORK (&steam->work_connect, steam_work_connect_cb); +INIT_LIST_HEAD (&steam->list); steam->client_hdev =steam_create_client_hid (hdev);if (IS_ERR (steam->client_hdev)) {
drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c +8 -0
@@ -373,6 +373,14 @@ static const struct dmi_system_id i2c_hid_dmi_desc_override_table[] = { }, .driver_data = (void *)&sipodev_desc }, + { + .ident = "Mediacom FlexBook edge 13", + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"MEDIACOM" ), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "FlexBook_edge13-M-FBE13"), + }, + .driver_data = (void *)&sipodev_desc + }, { .ident ="Odys Winbook 13" , .matches = {
drivers/hwmon/aspeed-pwm-tacho.c +2 -0
@@ -851,6 +851,8 @@ static int aspeed_create_fan(struct device *dev, ret =of_property_read_u32 (child,"reg" , &pwm_port);if (ret)return ret; +if (pwm_port >=ARRAY_SIZE (pwm_port_params)) +return -EINVAL ;aspeed_create_pwm_port (priv, (u8 )pwm_port); ret =of_property_count_u8_elems (child,"cooling-levels" );
drivers/hwmon/nct6775.c +3 -3
@@ -786,13 +786,13 @@ static const char *const nct6798_temp_label[] = {"Agent1 Dimm1" ,"BYTE_TEMP0" ,"BYTE_TEMP1" , -"" , -"" , +"PECI Agent 0 Calibration" ,/* undocumented */ +"PECI Agent 1 Calibration" ,/* undocumented */ "" , "Virtual_TEMP" }; -#define NCT6798_TEMP_MASK 0x8fff0ffe +#define NCT6798_TEMP_MASK 0xbfff0ffe#define NCT6798_VIRT_TEMP_MASK 0x80000c00/* NCT6102D/NCT6106D specific data */
drivers/hwmon/pmbus/adm1275.c +8 -2
@@ -465,6 +465,7 @@ MODULE_DEVICE_TABLE(i2c, adm1275_id);static int adm1275_probe (struct i2c_client *client,const struct i2c_device_id *id) { +s32 (*config_read_fn)(const struct i2c_client *client,u8 reg);u8 block_buffer[I2C_SMBUS_BLOCK_MAX +1 ];int config, device_config;int ret;
@@ -510,11 +511,16 @@ static int adm1275_probe(struct i2c_client *client,"Device mismatch: Configured %s, detected %s\n" , id->name, mid->name); - config =i2c_smbus_read_byte_data (client,ADM1275_PMON_CONFIG ); +if (mid->driver_data == adm1272 || mid->driver_data == adm1278 || + mid->driver_data == adm1293 || mid->driver_data == adm1294) + config_read_fn = i2c_smbus_read_word_data; +else + config_read_fn = i2c_smbus_read_byte_data; + config =config_read_fn (client,ADM1275_PMON_CONFIG );if (config <0 )return config; - device_config =i2c_smbus_read_byte_data (client,ADM1275_DEVICE_CONFIG ); + device_config =config_read_fn (client,ADM1275_DEVICE_CONFIG );if (device_config <0 )return device_config;
drivers/hwmon/scmi-hwmon.c +1 -1
@@ -147,7 +147,7 @@ static enum hwmon_sensor_types scmi_types[] = { [ENERGY] = hwmon_energy, }; -static u32 hwmon_attributes[] = { +static u32 hwmon_attributes[hwmon_max] = { [hwmon_chip] =HWMON_C_REGISTER_TZ , [hwmon_temp] =HWMON_T_INPUT |HWMON_T_LABEL , [hwmon_in] =HWMON_I_INPUT |HWMON_I_LABEL ,
drivers/i2c/busses/i2c-qcom-geni.c +4 -2
@@ -367,7 +367,6 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,geni_se_select_mode (se,GENI_SE_FIFO );writel_relaxed (len, se->base +SE_I2C_RX_TRANS_LEN ); -geni_se_setup_m_cmd (se,I2C_READ , m_param);if (dma_buf &&geni_se_rx_dma_prep (se, dma_buf, len, &rx_dma)) {geni_se_select_mode (se,GENI_SE_FIFO );
@@ -375,6 +374,8 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg, dma_buf =NULL ; } +geni_se_setup_m_cmd (se,I2C_READ , m_param); + time_left =wait_for_completion_timeout (&gi2c->done,XFER_TIMEOUT );if (!time_left)geni_i2c_abort_xfer (gi2c);
@@ -408,7 +409,6 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,geni_se_select_mode (se,GENI_SE_FIFO );writel_relaxed (len, se->base +SE_I2C_TX_TRANS_LEN ); -geni_se_setup_m_cmd (se,I2C_WRITE , m_param);if (dma_buf &&geni_se_tx_dma_prep (se, dma_buf, len, &tx_dma)) {geni_se_select_mode (se,GENI_SE_FIFO );
@@ -416,6 +416,8 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg, dma_buf =NULL ; } +geni_se_setup_m_cmd (se,I2C_WRITE , m_param); +if (!dma_buf)/* Get FIFO IRQ */ writel_relaxed (1 , se->base +SE_GENI_TX_WATERMARK_REG );
drivers/i2c/busses/i2c-rcar.c +3 -0
@@ -868,6 +868,7 @@ static int rcar_unreg_slave(struct i2c_client *slave)/* disable irqs and ensure none is running before clearing ptr */ rcar_i2c_write (priv,ICSIER ,0 );rcar_i2c_write (priv,ICSCR ,0 ); +rcar_i2c_write (priv,ICSAR ,0 );/* Gen2: must be 0 if not using slave */ synchronize_irq (priv->irq); priv->slave =NULL ;
@@ -971,6 +972,8 @@ static int rcar_i2c_probe(struct platform_device *pdev)if (ret <0 ) goto out_pm_put; +rcar_i2c_write (priv,ICSAR ,0 );/* Gen2: must be 0 if not using slave */ +if (priv->devtype ==I2C_RCAR_GEN3 ) { priv->rstc =devm_reset_control_get_exclusive (&pdev->dev,NULL );if (!IS_ERR (priv->rstc)) {
drivers/infiniband/core/cm.c +2 -0
@@ -3723,10 +3723,12 @@ static int cm_send_sidr_rep_locked(struct cm_id_private *cm_id_priv,return ret; } cm_id_priv->id.state =IB_CM_IDLE ; +spin_lock_irq (&cm.lock);if (!RB_EMPTY_NODE (&cm_id_priv->sidr_id_node)) {rb_erase (&cm_id_priv->sidr_id_node, &cm.remote_sidr_table);RB_CLEAR_NODE (&cm_id_priv->sidr_id_node); } +spin_unlock_irq (&cm.lock);return 0 ; }
drivers/infiniband/core/rdma_core.c +3 -3
@@ -638,9 +638,6 @@ void rdma_alloc_commit_uobject(struct ib_uobject *uobj, {struct ib_uverbs_file *ufile = attrs->ufile; -/* alloc_commit consumes the uobj kref */ - uobj->uapi_object->type_class->alloc_commit (uobj); -/* kref is held so long as the uobj is on the uobj list. */ uverbs_uobject_get (uobj);spin_lock_irq (&ufile->uobjects_lock);
@@ -650,6 +647,9 @@ void rdma_alloc_commit_uobject(struct ib_uobject *uobj,/* matches atomic_set(-1) in alloc_uobj */ atomic_set (&uobj->usecnt,0 ); +/* alloc_commit consumes the uobj kref */ + uobj->uapi_object->type_class->alloc_commit (uobj); +/* Matches the down_read in rdma_alloc_begin_uobject */ up_read (&ufile->hw_destroy_rwsem); }
drivers/infiniband/hw/mlx5/odp.c +19 -3
@@ -601,6 +601,23 @@ void mlx5_ib_free_implicit_mr(struct mlx5_ib_mr *imr)*/ synchronize_srcu (&dev->odp_srcu); +/* +* All work on the prefetch list must be completed, xa_erase() prevented +* new work from being created. +*/ +wait_event (imr->q_deferred_work, !atomic_read (&imr->num_deferred_work)); + +/* +* At this point it is forbidden for any other thread to enter +* pagefault_mr() on this imr. It is already forbidden to call +* pagefault_mr() on an implicit child. Due to this additions to +* implicit_children are prevented. +*/ + +/* +* Block destroy_unused_implicit_child_mr() from incrementing +* num_deferred_work. +*/ xa_lock (&imr->implicit_children); xa_for_each (&imr->implicit_children, idx, mtt) {__xa_erase (&imr->implicit_children, idx);
@@ -609,9 +626,8 @@ void mlx5_ib_free_implicit_mr(struct mlx5_ib_mr *imr)xa_unlock (&imr->implicit_children);/* -* num_deferred_work can only be incremented inside the odp_srcu, or -* under xa_lock while the child is in the xarray. Thus at this point -* it is only decreasing, and all work holding it is now on the wq. +* Wait for any concurrent destroy_unused_implicit_child_mr() to +* complete. */ wait_event (imr->q_deferred_work, !atomic_read (&imr->num_deferred_work));
drivers/infiniband/hw/mlx5/srq_cmd.c +2 -2
@@ -83,11 +83,11 @@ struct mlx5_core_srq *mlx5_cmd_get_srq(struct mlx5_ib_dev *dev, u32 srqn)struct mlx5_srq_table *table = &dev->srq_table;struct mlx5_core_srq *srq; -xa_lock (&table->array); +xa_lock_irq (&table->array); srq =xa_load (&table->array, srqn);if (srq)refcount_inc (&srq->common.refcount); -xa_unlock (&table->array); +xa_unlock_irq (&table->array);return srq; }
drivers/input/mouse/elan_i2c_core.c +5 -4
@@ -951,6 +951,8 @@ static void elan_report_absolute(struct elan_tp_data *data, u8 *packet)u8 hover_info = packet[ETP_HOVER_INFO_OFFSET ];bool contact_valid, hover_event; +pm_wakeup_event (&data->client->dev,0 ); + hover_event = hover_info &0x40 ;for (i =0 ; i <ETP_MAX_FINGERS ; i++) { contact_valid = tp_info & (1U << (3 + i));
@@ -974,6 +976,8 @@ static void elan_report_trackpoint(struct elan_tp_data *data, u8 *report)u8 *packet = &report[ETP_REPORT_ID_OFFSET +1 ];int x, y; +pm_wakeup_event (&data->client->dev,0 ); +if (!data->tp_input) {dev_warn_once (&data->client->dev,"received a trackpoint report while no trackpoint device has been created. Please report upstream.\n" );
@@ -998,7 +1002,6 @@ static void elan_report_trackpoint(struct elan_tp_data *data, u8 *report)static irqreturn_t elan_isr (int irq,void *dev_id) {struct elan_tp_data *data = dev_id; -struct device *dev = &data->client->dev;int error;u8 report[ETP_MAX_REPORT_LEN ];
@@ -1016,8 +1019,6 @@ static irqreturn_t elan_isr(int irq, void *dev_id)if (error) goto out; -pm_wakeup_event (dev,0 ); -switch (report[ETP_REPORT_ID_OFFSET ]) {case ETP_REPORT_ID :elan_report_absolute (data, report);
@@ -1026,7 +1027,7 @@ static irqreturn_t elan_isr(int irq, void *dev_id)elan_report_trackpoint (data, report);break ;default : -dev_err (dev,"invalid report id data (%x)\n" , +dev_err (&data->client->dev,"invalid report id data (%x)\n" , report[ETP_REPORT_ID_OFFSET ]); }
drivers/input/mouse/synaptics.c +1 -0
@@ -179,6 +179,7 @@ static const char * const smbus_pnp_ids[] = {"LEN0093" ,/* T480 */ "LEN0096" ,/* X280 */ "LEN0097" ,/* X280 -> ALPS trackpoint */ +"LEN0099" ,/* X1 Extreme 1st */ "LEN009b" ,/* T580 */ "LEN200f" ,/* T450s */ "LEN2044", /* L470 */
drivers/interconnect/qcom/msm8916.c +7 -7
@@ -197,13 +197,13 @@ DEFINE_QNODE(pcnoc_int_0, MSM8916_PNOC_INT_0, 8, -1, -1, MSM8916_PNOC_SNOC_MAS,DEFINE_QNODE (pcnoc_int_1,MSM8916_PNOC_INT_1 ,8 ,-1 ,-1 ,MSM8916_PNOC_SNOC_MAS );DEFINE_QNODE (pcnoc_m_0,MSM8916_PNOC_MAS_0 ,8 ,-1 ,-1 ,MSM8916_PNOC_INT_0 );DEFINE_QNODE (pcnoc_m_1,MSM8916_PNOC_MAS_1 ,8 ,-1 ,-1 ,MSM8916_PNOC_SNOC_MAS ); -DEFINE_QNODE (pcnoc_s_0,MSM8916_PNOC_SLV_0 ,8 ,-1 ,-1 ,MSM8916_SLAVE_CLK_CTL ,MSM8916_SLAVE_TLMM ,MSM8916_SLAVE_TCSR ,MSM8916_SLAVE_SECURITY ,MSM8916_SLAVE_MSS ); -DEFINE_QNODE (pcnoc_s_1,MSM8916_PNOC_SLV_1 ,8 ,-1 ,-1 ,MSM8916_SLAVE_IMEM_CFG ,MSM8916_SLAVE_CRYPTO_0_CFG ,MSM8916_SLAVE_MSG_RAM ,MSM8916_SLAVE_PDM ,MSM8916_SLAVE_PRNG ); -DEFINE_QNODE (pcnoc_s_2,MSM8916_PNOC_SLV_2 ,8 ,-1 ,-1 ,MSM8916_SLAVE_SPDM ,MSM8916_SLAVE_BOOT_ROM ,MSM8916_SLAVE_BIMC_CFG ,MSM8916_SLAVE_PNOC_CFG ,MSM8916_SLAVE_PMIC_ARB ); -DEFINE_QNODE (pcnoc_s_3,MSM8916_PNOC_SLV_3 ,8 ,-1 ,-1 ,MSM8916_SLAVE_MPM ,MSM8916_SLAVE_SNOC_CFG ,MSM8916_SLAVE_RBCPR_CFG ,MSM8916_SLAVE_QDSS_CFG ,MSM8916_SLAVE_DEHR_CFG ); -DEFINE_QNODE (pcnoc_s_4,MSM8916_PNOC_SLV_4 ,8 ,-1 ,-1 ,MSM8916_SLAVE_VENUS_CFG ,MSM8916_SLAVE_CAMERA_CFG ,MSM8916_SLAVE_DISPLAY_CFG ); -DEFINE_QNODE (pcnoc_s_8,MSM8916_PNOC_SLV_8 ,8 ,-1 ,-1 ,MSM8916_SLAVE_USB_HS ,MSM8916_SLAVE_SDCC_1 ,MSM8916_SLAVE_BLSP_1 ); -DEFINE_QNODE (pcnoc_s_9,MSM8916_PNOC_SLV_9 ,8 ,-1 ,-1 ,MSM8916_SLAVE_SDCC_2 ,MSM8916_SLAVE_LPASS ,MSM8916_SLAVE_GRAPHICS_3D_CFG ); +DEFINE_QNODE (pcnoc_s_0,MSM8916_PNOC_SLV_0 ,4 ,-1 ,-1 ,MSM8916_SLAVE_CLK_CTL ,MSM8916_SLAVE_TLMM ,MSM8916_SLAVE_TCSR ,MSM8916_SLAVE_SECURITY ,MSM8916_SLAVE_MSS ); +DEFINE_QNODE (pcnoc_s_1,MSM8916_PNOC_SLV_1 ,4 ,-1 ,-1 ,MSM8916_SLAVE_IMEM_CFG ,MSM8916_SLAVE_CRYPTO_0_CFG ,MSM8916_SLAVE_MSG_RAM ,MSM8916_SLAVE_PDM ,MSM8916_SLAVE_PRNG ); +DEFINE_QNODE (pcnoc_s_2,MSM8916_PNOC_SLV_2 ,4 ,-1 ,-1 ,MSM8916_SLAVE_SPDM ,MSM8916_SLAVE_BOOT_ROM ,MSM8916_SLAVE_BIMC_CFG ,MSM8916_SLAVE_PNOC_CFG ,MSM8916_SLAVE_PMIC_ARB ); +DEFINE_QNODE (pcnoc_s_3,MSM8916_PNOC_SLV_3 ,4 ,-1 ,-1 ,MSM8916_SLAVE_MPM ,MSM8916_SLAVE_SNOC_CFG ,MSM8916_SLAVE_RBCPR_CFG ,MSM8916_SLAVE_QDSS_CFG ,MSM8916_SLAVE_DEHR_CFG ); +DEFINE_QNODE (pcnoc_s_4,MSM8916_PNOC_SLV_4 ,4 ,-1 ,-1 ,MSM8916_SLAVE_VENUS_CFG ,MSM8916_SLAVE_CAMERA_CFG ,MSM8916_SLAVE_DISPLAY_CFG ); +DEFINE_QNODE (pcnoc_s_8,MSM8916_PNOC_SLV_8 ,4 ,-1 ,-1 ,MSM8916_SLAVE_USB_HS ,MSM8916_SLAVE_SDCC_1 ,MSM8916_SLAVE_BLSP_1 ); +DEFINE_QNODE (pcnoc_s_9,MSM8916_PNOC_SLV_9 ,4 ,-1 ,-1 ,MSM8916_SLAVE_SDCC_2 ,MSM8916_SLAVE_LPASS ,MSM8916_SLAVE_GRAPHICS_3D_CFG );DEFINE_QNODE (pcnoc_snoc_mas,MSM8916_PNOC_SNOC_MAS ,8 ,29 ,-1 ,MSM8916_PNOC_SNOC_SLV );DEFINE_QNODE (pcnoc_snoc_slv,MSM8916_PNOC_SNOC_SLV ,8 ,-1 ,45 ,MSM8916_SNOC_INT_0 ,MSM8916_SNOC_INT_BIMC ,MSM8916_SNOC_INT_1 );DEFINE_QNODE (qdss_int,MSM8916_SNOC_QDSS_INT ,8 ,-1 ,-1 ,MSM8916_SNOC_INT_0 ,MSM8916_SNOC_INT_BIMC );
drivers/iommu/amd_iommu.c +3 -2
@@ -4090,9 +4090,10 @@ int amd_iommu_create_irq_domain(struct amd_iommu *iommu)if (!fn)return -ENOMEM ; iommu->ir_domain =irq_domain_create_tree (fn, &amd_ir_domain_ops, iommu); -irq_domain_free_fwnode (fn); -if (!iommu->ir_domain) +if (!iommu->ir_domain) { +irq_domain_free_fwnode (fn);return -ENOMEM ; + } iommu->ir_domain->parent =arch_get_ir_parent_domain (); iommu->msi_domain = arch_create_remap_msi_irq_domain(iommu->ir_domain,
drivers/iommu/hyperv-iommu.c +4 -1
@@ -155,7 +155,10 @@ static int __init hyperv_prepare_irq_remapping(void)0 ,IOAPIC_REMAPPING_ENTRY , fn, &hyperv_ir_domain_ops, NULL); -irq_domain_free_fwnode (fn); +if (!ioapic_ir_domain) { +irq_domain_free_fwnode (fn); +return -ENOMEM ; + }/* * Hyper-V doesn't provide irq remapping function for
drivers/iommu/intel_irq_remapping.c +1 -1
@@ -563,8 +563,8 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)0 ,INTR_REMAP_TABLE_ENTRIES , fn, &intel_ir_domain_ops, iommu); -irq_domain_free_fwnode (fn);if (!iommu->ir_domain) { +irq_domain_free_fwnode (fn);pr_err ("IR%d: failed to allocate irqdomain\n" , iommu->seq_id); goto out_free_bitmap; }
drivers/iommu/qcom_iommu.c +17 -20
@@ -65,6 +65,7 @@ struct qcom_iommu_domain {struct mutex init_mutex;/* Protects iommu pointer */ struct iommu_domain domain;struct qcom_iommu_dev *iommu; +struct iommu_fwspec *fwspec; };static struct qcom_iommu_domain *to_qcom_iommu_domain (struct iommu_domain *dom)
@@ -84,9 +85,9 @@ static struct qcom_iommu_dev * to_iommu(struct device *dev)return dev_iommu_priv_get (dev); } -static struct qcom_iommu_ctx *to_ctx (struct device *dev,unsigned asid) +static struct qcom_iommu_ctx *to_ctx (struct qcom_iommu_domain *d,unsigned asid) { -struct qcom_iommu_dev *qcom_iommu =to_iommu (dev); +struct qcom_iommu_dev *qcom_iommu = d->iommu;if (!qcom_iommu)return NULL ;return qcom_iommu->ctxs[asid -1 ];
@@ -118,14 +119,12 @@ iommu_readq(struct qcom_iommu_ctx *ctx, unsigned reg)static void qcom_iommu_tlb_sync (void *cookie) { -struct iommu_fwspec *fwspec; -struct device *dev = cookie; +struct qcom_iommu_domain *qcom_domain = cookie; +struct iommu_fwspec *fwspec = qcom_domain->fwspec;unsigned i; - fwspec =dev_iommu_fwspec_get (dev); -for (i =0 ; i < fwspec->num_ids; i++) { -struct qcom_iommu_ctx *ctx =to_ctx (dev, fwspec->ids[i]); +struct qcom_iommu_ctx *ctx =to_ctx (qcom_domain, fwspec->ids[i]);unsigned int val, ret;iommu_writel (ctx,ARM_SMMU_CB_TLBSYNC ,0 );
@@ -139,14 +138,12 @@ static void qcom_iommu_tlb_sync(void *cookie)static void qcom_iommu_tlb_inv_context (void *cookie) { -struct device *dev = cookie; -struct iommu_fwspec *fwspec; +struct qcom_iommu_domain *qcom_domain = cookie; +struct iommu_fwspec *fwspec = qcom_domain->fwspec;unsigned i; - fwspec =dev_iommu_fwspec_get (dev); -for (i =0 ; i < fwspec->num_ids; i++) { -struct qcom_iommu_ctx *ctx =to_ctx (dev, fwspec->ids[i]); +struct qcom_iommu_ctx *ctx =to_ctx (qcom_domain, fwspec->ids[i]);iommu_writel (ctx,ARM_SMMU_CB_S1_TLBIASID , ctx->asid); }
@@ -156,16 +153,14 @@ static void qcom_iommu_tlb_inv_context(void *cookie)static void qcom_iommu_tlb_inv_range_nosync (unsigned long iova,size_t size,size_t granule,bool leaf,void *cookie) { -struct device *dev = cookie; -struct iommu_fwspec *fwspec; +struct qcom_iommu_domain *qcom_domain = cookie; +struct iommu_fwspec *fwspec = qcom_domain->fwspec;unsigned i, reg; reg = leaf ?ARM_SMMU_CB_S1_TLBIVAL :ARM_SMMU_CB_S1_TLBIVA ; - fwspec =dev_iommu_fwspec_get (dev); -for (i =0 ; i < fwspec->num_ids; i++) { -struct qcom_iommu_ctx *ctx =to_ctx (dev, fwspec->ids[i]); +struct qcom_iommu_ctx *ctx =to_ctx (qcom_domain, fwspec->ids[i]);size_t s = size; iova = (iova >>12 ) <<12 ;
@@ -256,7 +251,9 @@ static int qcom_iommu_init_domain(struct iommu_domain *domain, }; qcom_domain->iommu = qcom_iommu; - pgtbl_ops =alloc_io_pgtable_ops (ARM_32_LPAE_S1 , &pgtbl_cfg, dev); + qcom_domain->fwspec = fwspec; + + pgtbl_ops =alloc_io_pgtable_ops (ARM_32_LPAE_S1 , &pgtbl_cfg, qcom_domain);if (!pgtbl_ops) {dev_err (qcom_iommu->dev,"failed to allocate pagetable ops\n" ); ret = -ENOMEM ;
@@ -269,7 +266,7 @@ static int qcom_iommu_init_domain(struct iommu_domain *domain, domain->geometry.force_aperture = true;for (i =0 ; i < fwspec->num_ids; i++) { -struct qcom_iommu_ctx *ctx =to_ctx (dev, fwspec->ids[i]); +struct qcom_iommu_ctx *ctx =to_ctx (qcom_domain, fwspec->ids[i]);if (!ctx->secure_init) { ret =qcom_scm_restore_sec_cfg (qcom_iommu->sec_id, ctx->asid);
@@ -419,7 +416,7 @@ static void qcom_iommu_detach_dev(struct iommu_domain *domain, struct device *depm_runtime_get_sync (qcom_iommu->dev);for (i =0 ; i < fwspec->num_ids; i++) { -struct qcom_iommu_ctx *ctx =to_ctx (dev, fwspec->ids[i]); +struct qcom_iommu_ctx *ctx =to_ctx (qcom_domain, fwspec->ids[i]);/* Disable the context bank: */ iommu_writel (ctx,ARM_SMMU_CB_SCTLR ,0 );
drivers/md/dm-integrity.c +2 -2
@@ -2424,7 +2424,7 @@ static void integrity_writer(struct work_struct *w)unsigned prev_free_sectors;/* the following test is not needed, but it tests the replay code */ -if (unlikely (dm_suspended (ic->ti)) && !ic->meta_dev) +if (unlikely (dm_post_suspending (ic->ti)) && !ic->meta_dev)return ;spin_lock_irq (&ic->endio_wait.lock);
@@ -2485,7 +2485,7 @@ static void integrity_recalc(struct work_struct *w) next_chunk: -if (unlikely (dm_suspended (ic->ti))) +if (unlikely (dm_post_suspending (ic->ti))) goto unlock_ret; range.logical_sector =le64_to_cpu (ic->sb->recalc_sector);
drivers/md/dm.c +19 -3
@@ -142,6 +142,7 @@ EXPORT_SYMBOL_GPL(dm_bio_get_target_bio_nr);#define DMF_NOFLUSH_SUSPENDING 5#define DMF_DEFERRED_REMOVE 6#define DMF_SUSPENDED_INTERNALLY 7 +#define DMF_POST_SUSPENDING 8#define DM_NUMA_NODE NUMA_NO_NODEstatic int dm_numa_node =DM_NUMA_NODE ;
@@ -1446,9 +1447,6 @@ static int __send_empty_flush(struct clone_info *ci)BUG_ON (bio_has_data (ci->bio));while ((ti =dm_table_get_target (ci->map, target_nr++)))__send_duplicate_bios (ci, ti, ti->num_flush_bios,NULL ); - -bio_disassociate_blkg (ci->bio); -return 0 ; }
@@ -1636,6 +1634,7 @@ static blk_qc_t __split_and_process_bio(struct mapped_device *md, ci.bio = &flush_bio; ci.sector_count =0 ; error =__send_empty_flush (&ci); +bio_uninit (ci.bio);/* dec_pending submits any data associated with flush */ }else if (op_is_zone_mgmt (bio_op (bio))) { ci.bio = bio;
@@ -1710,6 +1709,7 @@ static blk_qc_t __process_bio(struct mapped_device *md, struct dm_table *map, ci.bio = &flush_bio; ci.sector_count =0 ; error =__send_empty_flush (&ci); +bio_uninit (ci.bio);/* dec_pending submits any data associated with flush */ }else {struct dm_target_io *tio;
@@ -2399,6 +2399,7 @@ static void __dm_destroy(struct mapped_device *md, bool wait)if (!dm_suspended_md (md)) {dm_table_presuspend_targets (map);set_bit (DMF_SUSPENDED , &md->flags); +set_bit (DMF_POST_SUSPENDING , &md->flags);dm_table_postsuspend_targets (map); }/* dm_put_live_table must be before msleep, otherwise deadlock is possible */
@@ -2721,7 +2722,9 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags)if (r) goto out_unlock; +set_bit (DMF_POST_SUSPENDING , &md->flags);dm_table_postsuspend_targets (map); +clear_bit (DMF_POST_SUSPENDING , &md->flags); out_unlock:mutex_unlock (&md->suspend_lock);
@@ -2818,7 +2821,9 @@ static void __dm_internal_suspend(struct mapped_device *md, unsigned suspend_fla (void )__dm_suspend (md, map, suspend_flags,TASK_UNINTERRUPTIBLE ,DMF_SUSPENDED_INTERNALLY ); +set_bit (DMF_POST_SUSPENDING , &md->flags);dm_table_postsuspend_targets (map); +clear_bit (DMF_POST_SUSPENDING , &md->flags); }static void __dm_internal_resume (struct mapped_device *md)
@@ -2979,6 +2984,11 @@ int dm_suspended_md(struct mapped_device *md)return test_bit (DMF_SUSPENDED , &md->flags); } +static int dm_post_suspending_md (struct mapped_device *md) +{ +return test_bit (DMF_POST_SUSPENDING , &md->flags); +} +int dm_suspended_internally_md (struct mapped_device *md) {return test_bit (DMF_SUSPENDED_INTERNALLY , &md->flags);
@@ -2995,6 +3005,12 @@ int dm_suspended(struct dm_target *ti) }EXPORT_SYMBOL_GPL (dm_suspended); +int dm_post_suspending (struct dm_target *ti) +{ +return dm_post_suspending_md (dm_table_get_md (ti->table)); +} +EXPORT_SYMBOL_GPL (dm_post_suspending); +int dm_noflush_suspending (struct dm_target *ti) {return __noflush_suspending (dm_table_get_md (ti->table));
drivers/mfd/ioc3.c +3 -2
@@ -142,10 +142,11 @@ static int ioc3_irq_domain_setup(struct ioc3_priv_data *ipd, int irq) goto err; domain =irq_domain_create_linear (fn,24 , &ioc3_irq_domain_ops, ipd); -if (!domain) +if (!domain) { +irq_domain_free_fwnode (fn); goto err; + } -irq_domain_free_fwnode (fn); ipd->domain = domain;irq_set_chained_handler_and_data (irq, ioc3_irq_handler, domain);
drivers/mmc/host/sdhci-of-aspeed.c +1 -1
@@ -68,7 +68,7 @@ static void aspeed_sdhci_set_clock(struct sdhci_host *host, unsigned int clock)if (WARN_ON (clock > host->max_clk)) clock = host->max_clk; -for (div =1 ; div <256 ; div *=2 ) { +for (div =2 ; div <256 ; div *=2 ) {if ((parent / div) <= clock)break ; }
drivers/net/bonding/bond_main.c +7 -3
@@ -4953,15 +4953,19 @@ int bond_create(struct net *net, const char *name) bond_dev->rtnl_link_ops = &bond_link_ops; res =register_netdevice (bond_dev); +if (res <0 ) { +free_netdev (bond_dev); +rtnl_unlock (); + +return res; + }netif_carrier_off (bond_dev);bond_work_init_all (bond);rtnl_unlock (); -if (res <0 ) -free_netdev (bond_dev); -return res; +return 0 ; }static int __net_init bond_net_init (struct net *net)
drivers/net/bonding/bond_netlink.c +1 -2
@@ -456,11 +456,10 @@ static int bond_newlink(struct net *src_net, struct net_device *bond_dev,return err; err =register_netdevice (bond_dev); - -netif_carrier_off (bond_dev);if (!err) {struct bonding *bond =netdev_priv (bond_dev); +netif_carrier_off (bond_dev);bond_work_init_all (bond); }
drivers/net/dsa/microchip/ksz9477.c +23 -19
60 lines not on this page · raw message
drivers/net/dsa/microchip/ksz_common.c +0 -2
@@ -358,8 +358,6 @@ int ksz_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy)/* setup slave port */ dev->dev_ops->port_setup (dev, port, false); -if (dev->dev_ops->phy_setup) - dev->dev_ops->phy_setup (dev, port, phy);/* port_stp_state_set() will be called after to enable the port so * there is no need to do anything.
drivers/net/dsa/microchip/ksz_common.h +0 -2
@@ -119,8 +119,6 @@ struct ksz_dev_ops {u32 (*get_port_addr)(int port,int offset);void (*cfg_port_member)(struct ksz_device *dev,int port,u8 member);void (*flush_dyn_mac_table)(struct ksz_device *dev,int port); -void (*phy_setup)(struct ksz_device *dev,int port, -struct phy_device *phy);void (*port_cleanup)(struct ksz_device *dev,int port);void (*port_setup)(struct ksz_device *dev,int port,bool cpu_port);void (*r_phy)(struct ksz_device *dev,u16 phy,u16 reg,u16 *val);
drivers/net/dsa/mv88e6xxx/chip.c +19 -3
@@ -664,8 +664,11 @@ static void mv88e6xxx_mac_config(struct dsa_switch *ds, int port, const struct phylink_link_state *state) {struct mv88e6xxx_chip *chip = ds->priv; +struct mv88e6xxx_port *p;int err; + p = &chip->ports[port]; +/* FIXME: is this the correct test? If we're in fixed mode on an * internal port, why should we process this any different from * PHY mode? On the other hand, the port may be automedia between
@@ -675,10 +678,14 @@ static void mv88e6xxx_mac_config(struct dsa_switch *ds, int port,return ;mv88e6xxx_reg_lock (chip); -/* FIXME: should we force the link down here - but if we do, how -* do we restore the link force/unforce state? The driver layering -* gets in the way. +/* In inband mode, the link may come up at any time while the link +* is not forced down. Force the link down while we reconfigure the +* interface mode. */ +if (mode ==MLO_AN_INBAND && p->interface != state->interface && + chip->info->ops->port_set_link) + chip->info->ops->port_set_link (chip, port,LINK_FORCED_DOWN ); + err =mv88e6xxx_port_config_interface (chip, port, state->interface);if (err && err != -EOPNOTSUPP ) goto err_unlock;
@@ -691,6 +698,15 @@ static void mv88e6xxx_mac_config(struct dsa_switch *ds, int port,if (err >0 ) err =0 ; +/* Undo the forced down state above after completing configuration +* irrespective of its state on entry, which allows the link to come up. +*/ +if (mode ==MLO_AN_INBAND && p->interface != state->interface && + chip->info->ops->port_set_link) + chip->info->ops->port_set_link (chip, port,LINK_UNFORCED ); + + p->interface = state->interface; + err_unlock:mv88e6xxx_reg_unlock (chip);
drivers/net/dsa/mv88e6xxx/chip.h +1 -0
@@ -232,6 +232,7 @@ struct mv88e6xxx_port {u64 atu_full_violation;u64 vtu_member_violation;u64 vtu_miss_violation; +phy_interface_t interface;u8 cmode;bool mirror_ingress;bool mirror_egress;
drivers/net/ethernet/atheros/ag71xx.c +2 -1
@@ -556,7 +556,8 @@ static int ag71xx_mdio_probe(struct ag71xx *ag) ag->mdio_reset =of_reset_control_get_exclusive (np,"mdio" );if (IS_ERR (ag->mdio_reset)) {netif_err (ag, probe, ndev,"Failed to get reset mdio.\n" ); -return PTR_ERR (ag->mdio_reset); + err =PTR_ERR (ag->mdio_reset); + goto mdio_err_put_clk; } mii_bus->name ="ag71xx_mdio" ;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +15 -7
@@ -3418,7 +3418,7 @@ void bnxt_set_tpa_flags(struct bnxt *bp)*/ void bnxt_set_ring_params (struct bnxt *bp) { -u32 ring_size, rx_size, rx_space; +u32 ring_size, rx_size, rx_space, max_rx_cmpl;u32 agg_factor =0 , agg_ring_size =0 ;/* 8 for CRC and VLAN */
@@ -3474,7 +3474,15 @@ void bnxt_set_ring_params(struct bnxt *bp) bp->tx_nr_pages =bnxt_calc_nr_ring_pages (ring_size,TX_DESC_CNT ); bp->tx_ring_mask = (bp->tx_nr_pages *TX_DESC_CNT ) -1 ; - ring_size = bp->rx_ring_size * (2 + agg_factor) + bp->tx_ring_size; + max_rx_cmpl = bp->rx_ring_size; +/* MAX TPA needs to be added because TPA_START completions are +* immediately recycled, so the TPA completions are not bound by +* the RX ring size. +*/ +if (bp->flags &BNXT_FLAG_TPA ) + max_rx_cmpl += bp->max_tpa; +/* RX and TPA completions are 32-byte, all others are 16-byte */ + ring_size = max_rx_cmpl *2 + agg_ring_size + bp->tx_ring_size; bp->cp_ring_size = ring_size; bp->cp_nr_pages =bnxt_calc_nr_ring_pages (ring_size,CP_DESC_CNT );
@@ -10362,15 +10370,15 @@ static void bnxt_sp_task(struct work_struct *work) &bp->sp_event))bnxt_hwrm_phy_qcaps (bp); -if (test_and_clear_bit (BNXT_LINK_CFG_CHANGE_SP_EVENT , - &bp->sp_event)) -bnxt_init_ethtool_link_settings (bp); - rc =bnxt_update_link (bp, true); -mutex_unlock (&bp->link_lock);if (rc)netdev_err (bp->dev,"SP task can't update link (rc: %x)\n" , rc); + +if (test_and_clear_bit (BNXT_LINK_CFG_CHANGE_SP_EVENT , + &bp->sp_event)) +bnxt_init_ethtool_link_settings (bp); +mutex_unlock (&bp->link_lock); }if (test_and_clear_bit (BNXT_UPDATE_PHY_SP_EVENT , &bp->sp_event)) {int rc;
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +4 -1
@@ -1687,8 +1687,11 @@ static int bnxt_set_pauseparam(struct net_device *dev,if (epause->tx_pause) link_info->req_flow_ctrl |=BNXT_LINK_PAUSE_TX ; -if (netif_running (dev)) +if (netif_running (dev)) { +mutex_lock (&bp->link_lock); rc =bnxt_hwrm_set_pause (bp); +mutex_unlock (&bp->link_lock); + }return rc; }
drivers/net/ethernet/broadcom/genet/bcmgenet.c +1 -1
@@ -3522,7 +3522,7 @@ static int bcmgenet_probe(struct platform_device *pdev)if (err) err =dma_set_mask_and_coherent (&pdev->dev,DMA_BIT_MASK (32 ));if (err) - goto err; + goto err_clk_disable;/* Mii wait queue */ init_waitqueue_head (&priv->wq);
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +1 -1
@@ -2938,7 +2938,7 @@ static int dpaa_eth_probe(struct platform_device *pdev) DMA_BIT_MASK(40));if (err) {netdev_err (net_dev,"dma_coerce_mask_and_coherent() failed\n" ); -return err; + goto free_netdev; }/* If fsl_fm_max_frm is set to a higher value than the all-common 1500,
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +1 -1
@@ -3383,7 +3383,7 @@ static int dpaa2_eth_connect_mac(struct dpaa2_eth_priv *priv) dpni_dev =to_fsl_mc_device (priv->net_dev->dev.parent); dpmac_dev =fsl_mc_get_endpoint (dpni_dev); -if (IS_ERR (dpmac_dev) || dpmac_dev->dev.type != &fsl_mc_bus_dpmac_type) +if (IS_ERR_OR_NULL (dpmac_dev) || dpmac_dev->dev.type != &fsl_mc_bus_dpmac_type)return 0 ;if (dpaa2_mac_is_type_fixed (dpmac_dev, priv->mc_io))
drivers/net/ethernet/freescale/enetc/enetc_pf.c +1 -0
@@ -919,6 +919,7 @@ static int enetc_pf_probe(struct pci_dev *pdev,return 0 ; err_reg_netdev: +enetc_mdio_remove (pf);enetc_of_put_phy (priv);enetc_free_msix (priv); err_alloc_msix:
drivers/net/ethernet/freescale/fec.h +1 -0
@@ -597,6 +597,7 @@ struct fec_enet_private {void fec_ptp_init (struct platform_device *pdev,int irq_idx);void fec_ptp_stop (struct platform_device *pdev);void fec_ptp_start_cyclecounter (struct net_device *ndev); +void fec_ptp_disable_hwts (struct net_device *ndev);int fec_ptp_set (struct net_device *ndev,struct ifreq *ifr);int fec_ptp_get (struct net_device *ndev,struct ifreq *ifr);
drivers/net/ethernet/freescale/fec_main.c +17 -6
@@ -1302,8 +1302,13 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue_id) ndev->stats.tx_bytes += skb->len; } -if (unlikely (skb_shinfo (skb)->tx_flags &SKBTX_IN_PROGRESS ) && - fep->bufdesc_ex) { +/* NOTE: SKBTX_IN_PROGRESS being set does not imply it's we who +* are to time stamp the packet, so we still need to check time +* stamping enabled flag. +*/ +if (unlikely (skb_shinfo (skb)->tx_flags &SKBTX_IN_PROGRESS && + fep->hwts_tx_en) && + fep->bufdesc_ex) {struct skb_shared_hwtstamps shhwtstamps;struct bufdesc_ex *ebdp = (struct bufdesc_ex *)bdp;
@@ -2731,10 +2736,16 @@ static int fec_enet_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)return -ENODEV ;if (fep->bufdesc_ex) { -if (cmd ==SIOCSHWTSTAMP ) -return fec_ptp_set (ndev, rq); -if (cmd ==SIOCGHWTSTAMP ) -return fec_ptp_get (ndev, rq); +bool use_fec_hwts = !phy_has_hwtstamp (phydev); + +if (cmd ==SIOCSHWTSTAMP ) { +if (use_fec_hwts) +return fec_ptp_set (ndev, rq); +fec_ptp_disable_hwts (ndev); + }else if (cmd ==SIOCGHWTSTAMP ) { +if (use_fec_hwts) +return fec_ptp_get (ndev, rq); + } }return phy_mii_ioctl (phydev, rq, cmd);
drivers/net/ethernet/freescale/fec_ptp.c +12 -0
@@ -452,6 +452,18 @@ static int fec_ptp_enable(struct ptp_clock_info *ptp,return -EOPNOTSUPP ; } +/** +* fec_ptp_disable_hwts - disable hardware time stamping +* @ndev: pointer to net_device +*/ +void fec_ptp_disable_hwts (struct net_device *ndev) +{ +struct fec_enet_private *fep =netdev_priv (ndev); + + fep->hwts_tx_en =0 ; + fep->hwts_rx_en =0 ; +} +int fec_ptp_set (struct net_device *ndev,struct ifreq *ifr) {struct fec_enet_private *fep =netdev_priv (ndev);
drivers/net/ethernet/hisilicon/hns3/hnae3.h +1 -0
@@ -77,6 +77,7 @@ ((ring)->p = ((ring)->p - 1 + (ring)->desc_num) % (ring)->desc_num)enum hns_desc_type { +DESC_TYPE_UNKNOWN ,DESC_TYPE_SKB ,DESC_TYPE_FRAGLIST_SKB ,DESC_TYPE_PAGE ,
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +9 -1
@@ -1140,7 +1140,7 @@ static int hns3_fill_desc(struct hns3_enet_ring *ring, void *priv, } frag_buf_num =hns3_tx_bd_count (size); - sizeoflast = size &HNS3_TX_LAST_SIZE_M ; + sizeoflast = size %HNS3_MAX_BD_SIZE ; sizeoflast = sizeoflast ? sizeoflast :HNS3_MAX_BD_SIZE ;/* When frag size is bigger than hardware limit, split this frag */
@@ -1351,6 +1351,10 @@ static void hns3_clear_desc(struct hns3_enet_ring *ring, int next_to_use_orig)unsigned int i;for (i =0 ; i < ring->desc_num; i++) { +struct hns3_desc *desc = &ring->desc[ring->next_to_use]; + +memset (desc,0 ,sizeof (*desc)); +/* check if this is where we started */ if (ring->next_to_use == next_to_use_orig)break ;
@@ -1358,6 +1362,9 @@ static void hns3_clear_desc(struct hns3_enet_ring *ring, int next_to_use_orig)/* rollback one */ ring_ptr_move_bw (ring, next_to_use); +if (!ring->desc_cb[ring->next_to_use].dma) +continue ; +/* unmap the descriptor dma address */ if (ring->desc_cb[ring->next_to_use].type ==DESC_TYPE_SKB || ring->desc_cb[ring->next_to_use].type ==
@@ -1374,6 +1381,7 @@ static void hns3_clear_desc(struct hns3_enet_ring *ring, int next_to_use_orig) ring->desc_cb[ring->next_to_use].length =0 ; ring->desc_cb[ring->next_to_use].dma =0 ; + ring->desc_cb[ring->next_to_use].type =DESC_TYPE_UNKNOWN ; } }
drivers/net/ethernet/hisilicon/hns3/hns3_enet.h +0 -2
@@ -186,8 +186,6 @@ enum hns3_nic_state {#define HNS3_TXD_MSS_S 0#define HNS3_TXD_MSS_M (0x3fff << HNS3_TXD_MSS_S) -#define HNS3_TX_LAST_SIZE_M 0xffff -#define HNS3_VECTOR_TX_IRQ BIT_ULL(0)#define HNS3_VECTOR_RX_IRQ BIT_ULL(1)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +22 -27
102 lines not on this page · raw message
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h +3 -0
@@ -316,6 +316,9 @@ enum hclge_link_fail_code { HCLGE_LF_XSFP_ABSENT, }; +#define HCLGE_LINK_STATUS_DOWN 0 +#define HCLGE_LINK_STATUS_UP 1 +#define HCLGE_PG_NUM 4#define HCLGE_SCH_MODE_SP 0#define HCLGE_SCH_MODE_DWRR 1
drivers/net/ethernet/marvell/sky2.c +1 -1
@@ -203,7 +203,7 @@ static int __gm_phy_read(struct sky2_hw *hw, unsigned port, u16 reg, u16 *val)static inline u16 gm_phy_read (struct sky2_hw *hw,unsigned port,u16 reg) { -u16 v; +u16 v =0 ;__gm_phy_read (hw, port, reg, &v);return v; }
drivers/net/ethernet/mellanox/mlxsw/core.c +2 -1
@@ -710,7 +710,7 @@ static int mlxsw_emad_init(struct mlxsw_core *mlxsw_core) err =mlxsw_core_trap_register (mlxsw_core, &mlxsw_emad_rx_listener, mlxsw_core);if (err) -return err; + goto err_trap_register; err = mlxsw_core->driver->basic_trap_groups_set (mlxsw_core);if (err)
@@ -722,6 +722,7 @@ static int mlxsw_emad_init(struct mlxsw_core *mlxsw_core) err_emad_trap_set:mlxsw_core_trap_unregister (mlxsw_core, &mlxsw_emad_rx_listener, mlxsw_core); +err_trap_register:destroy_workqueue (mlxsw_core->emad_wq);return err; }
drivers/net/ethernet/mellanox/mlxsw/core_env.c +32 -16
94 lines not on this page · raw message
drivers/net/ethernet/pensando/ionic/ionic_ethtool.c +5 -2
@@ -102,15 +102,18 @@ static void ionic_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p) {struct ionic_lif *lif =netdev_priv (netdev); +unsigned int offset;unsigned int size; regs->version =IONIC_DEV_CMD_REG_VERSION ; + offset =0 ; size =IONIC_DEV_INFO_REG_COUNT *sizeof (u32); -memcpy_fromio (p, lif->ionic->idev.dev_info_regs->words, size); +memcpy_fromio (p + offset, lif->ionic->idev.dev_info_regs->words, size); + offset += size; size =IONIC_DEV_CMD_REG_COUNT *sizeof (u32); -memcpy_fromio (p, lif->ionic->idev.dev_cmd_regs->words, size); +memcpy_fromio (p + offset, lif->ionic->idev.dev_cmd_regs->words, size); } static int ionic_get_link_ksettings(struct net_device *netdev,
drivers/net/ethernet/pensando/ionic/ionic_lif.c +25 -25
146 lines not on this page · raw message
drivers/net/ethernet/pensando/ionic/ionic_lif.h +1 -7
@@ -126,7 +126,6 @@ enum ionic_lif_state_flags {IONIC_LIF_F_SW_DEBUG_STATS ,IONIC_LIF_F_UP ,IONIC_LIF_F_LINK_CHECK_REQUESTED , -IONIC_LIF_F_QUEUE_RESET , IONIC_LIF_F_FW_RESET,/* leave this as last */
@@ -145,6 +144,7 @@ struct ionic_lif {unsigned int hw_index;unsigned int kern_pid;u64 __iomem *kern_dbpage; +struct mutex queue_lock;/* lock for queue structures */ spinlock_t adminq_lock;/* lock for AdminQ operations */ struct ionic_qcq *adminqcq;struct ionic_qcq *notifyqcq;
@@ -191,12 +191,6 @@ struct ionic_lif {#define lif_to_txq (lif, i) (&lif_to_txqcq((lif), i)->q)#define lif_to_rxq (lif, i) (&lif_to_txqcq((lif), i)->q) -/* return 0 if successfully set the bit, else non-zero */ -static inline int ionic_wait_for_bit (struct ionic_lif *lif,int bitname) -{ -return wait_on_bit_lock (lif->state, bitname,TASK_INTERRUPTIBLE ); -} -static inline u32 ionic_coal_usec_to_hw (struct ionic *ionic,u32 usecs) {u32 mult =le32_to_cpu (ionic->ident.dev.intr_coal_mult);
drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c +29 -0
@@ -21,13 +21,16 @@ void ionic_rx_filter_free(struct ionic_lif *lif, struct ionic_rx_filter *f)void ionic_rx_filter_replay (struct ionic_lif *lif) {struct ionic_rx_filter_add_cmd *ac; +struct hlist_head new_id_list;struct ionic_admin_ctx ctx;struct ionic_rx_filter *f;struct hlist_head *head;struct hlist_node *tmp; +unsigned int key;unsigned int i;int err; +INIT_HLIST_HEAD (&new_id_list); ac = &ctx.cmd.rx_filter_add;for (i =0 ; i <IONIC_RX_FILTER_HLISTS ; i++) {
@@ -58,9 +61,30 @@ void ionic_rx_filter_replay(struct ionic_lif *lif) ac->mac.addr);break ; } +spin_lock_bh (&lif->rx_filters.lock); +ionic_rx_filter_free (lif, f); +spin_unlock_bh (&lif->rx_filters.lock); + +continue ; } + +/* remove from old id list, save new id in tmp list */ +spin_lock_bh (&lif->rx_filters.lock); +hlist_del (&f->by_id); +spin_unlock_bh (&lif->rx_filters.lock); + f->filter_id =le32_to_cpu (ctx.comp.rx_filter_add.filter_id); +hlist_add_head (&f->by_id, &new_id_list); } } + +/* rebuild the by_id hash lists with the new filter ids */ +spin_lock_bh (&lif->rx_filters.lock); +hlist_for_each_entry_safe (f, tmp, &new_id_list, by_id) { + key = f->filter_id &IONIC_RX_FILTER_HLISTS_MASK ; + head = &lif->rx_filters.by_id[key]; +hlist_add_head (&f->by_id, head); + } +spin_unlock_bh (&lif->rx_filters.lock); }int ionic_rx_filters_init (struct ionic_lif *lif)
@@ -69,10 +93,12 @@ int ionic_rx_filters_init(struct ionic_lif *lif)spin_lock_init (&lif->rx_filters.lock); +spin_lock_bh (&lif->rx_filters.lock);for (i =0 ; i <IONIC_RX_FILTER_HLISTS ; i++) {INIT_HLIST_HEAD (&lif->rx_filters.by_hash[i]);INIT_HLIST_HEAD (&lif->rx_filters.by_id[i]); } +spin_unlock_bh (&lif->rx_filters.lock);return 0 ; }
@@ -84,11 +110,13 @@ void ionic_rx_filters_deinit(struct ionic_lif *lif)struct hlist_node *tmp;unsigned int i; +spin_lock_bh (&lif->rx_filters.lock);for (i =0 ; i <IONIC_RX_FILTER_HLISTS ; i++) { head = &lif->rx_filters.by_id[i];hlist_for_each_entry_safe (f, tmp, head, by_id)ionic_rx_filter_free (lif, f); } +spin_unlock_bh (&lif->rx_filters.lock); } int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, u16 rxq_index,
@@ -124,6 +152,7 @@ int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, u16 rxq_index, f->filter_id =le32_to_cpu (ctx->comp.rx_filter_add.filter_id); f->rxq_index = rxq_index;memcpy (&f->cmd, ac,sizeof (f->cmd)); +netdev_dbg (lif->netdev,"rx_filter add filter_id %d\n" , f->filter_id);INIT_HLIST_NODE (&f->by_hash);INIT_HLIST_NODE (&f->by_id);
drivers/net/ethernet/pensando/ionic/ionic_txrx.c +0 -6
@@ -157,12 +157,6 @@ static void ionic_rx_clean(struct ionic_queue *q, struct ionic_desc_info *desc_ireturn ; } -/* no packet processing while resetting */ -if (unlikely (test_bit (IONIC_LIF_F_QUEUE_RESET , q->lif->state))) { - stats->dropped++; -return ; - } - stats->pkts++; stats->bytes +=le16_to_cpu (comp->len);
drivers/net/ethernet/qlogic/qed/qed_cxt.c +2 -2
@@ -1987,8 +1987,8 @@ static void qed_rdma_set_pf_params(struct qed_hwfn *p_hwfn, num_srqs =min_t (u32,QED_RDMA_MAX_SRQS , p_params->num_srqs);if (p_hwfn->mcp_info->func_info.protocol ==QED_PCI_ETH_RDMA ) { -DP_NOTICE (p_hwfn, -"Current day drivers don't support RoCE & iWARP simultaneously on the same PF. Default to RoCE-only\n" ); +DP_VERBOSE (p_hwfn,QED_MSG_SP , +"Current day drivers don't support RoCE & iWARP simultaneously on the same PF. Default to RoCE-only\n" ); p_hwfn->hw_info.personality =QED_PCI_ETH_ROCE ; }
drivers/net/ethernet/qlogic/qed/qed_dev.c +1 -1
@@ -3096,7 +3096,7 @@ int qed_hw_init(struct qed_dev *cdev, struct qed_hw_init_params *p_params) }/* Log and clear previous pglue_b errors if such exist */ -qed_pglueb_rbc_attn_handler (p_hwfn, p_hwfn->p_main_ptt); +qed_pglueb_rbc_attn_handler (p_hwfn, p_hwfn->p_main_ptt, true);/* Enable the PF's internal FID_enable in the PXP */ rc = qed_pglueb_set_pfid_enable(p_hwfn, p_hwfn->p_main_ptt,
drivers/net/ethernet/qlogic/qed/qed_int.c +29 -21
75 lines not on this page · raw message
drivers/net/ethernet/qlogic/qed/qed_int.h +2 -2
@@ -431,7 +431,7 @@ int qed_int_set_timer_res(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt,#define QED_MAPPING_MEMORY_SIZE (dev) (NUM_OF_SBS(dev)) -int qed_pglueb_rbc_attn_handler (struct qed_hwfn *p_hwfn, -struct qed_ptt *p_ptt); +int qed_pglueb_rbc_attn_handler (struct qed_hwfn *p_hwfn,struct qed_ptt *p_ptt, +bool hw_init);#endif
drivers/net/ethernet/smsc/smc91x.c +2 -2
@@ -2274,7 +2274,7 @@ static int smc_drv_probe(struct platform_device *pdev) ret =try_toggle_control_gpio (&pdev->dev, &lp->power_gpio,"power" ,0 ,0 ,100 );if (ret) -return ret; + goto out_free_netdev;/* * Optional reset GPIO configured? Minimum 100 ns reset needed
@@ -2283,7 +2283,7 @@ static int smc_drv_probe(struct platform_device *pdev) ret =try_toggle_control_gpio (&pdev->dev, &lp->reset_gpio,"reset" ,0 ,0 ,100 );if (ret) -return ret; + goto out_free_netdev;/* * Need to wait for optional EEPROM to load, max 750 us according
drivers/net/ethernet/socionext/sni_ave.c +1 -1
@@ -1191,7 +1191,7 @@ static int ave_init(struct net_device *ndev) ret =regmap_update_bits (priv->regmap,SG_ETPINMODE , priv->pinmode_mask, priv->pinmode_val);if (ret) -return ret; + goto out_reset_assert;ave_global_reset (ndev);
drivers/net/geneve.c +1 -1
@@ -1615,11 +1615,11 @@ static int geneve_changelink(struct net_device *dev, struct nlattr *tb[], struct netlink_ext_ack *extack) {struct geneve_dev *geneve =netdev_priv (dev); +enum ifla_geneve_df df = geneve->df;struct geneve_sock *gs4, *gs6;struct ip_tunnel_info info;bool metadata;bool use_udp6_rx_checksums; -enum ifla_geneve_df df;bool ttl_inherit;int err;
drivers/net/hippi/rrunner.c +1 -1
@@ -1242,7 +1242,7 @@ static int rr_open(struct net_device *dev) rrpriv->info =NULL ; }if (rrpriv->rx_ctrl) { -pci_free_consistent (pdev,sizeof (struct ring_ctrl ), +pci_free_consistent (pdev,256 *sizeof (struct ring_ctrl ), rrpriv->rx_ctrl, rrpriv->rx_ctrl_dma); rrpriv->rx_ctrl =NULL ; }
drivers/net/ieee802154/adf7242.c +3 -1
@@ -1262,7 +1262,7 @@ static int adf7242_probe(struct spi_device *spi) WQ_MEM_RECLAIM);if (unlikely (!lp->wqueue)) { ret = -ENOMEM ; - goto err_hw_init; + goto err_alloc_wq; } ret =adf7242_hw_init (lp);
@@ -1294,6 +1294,8 @@ static int adf7242_probe(struct spi_device *spi)return ret; err_hw_init: +destroy_workqueue (lp->wqueue); +err_alloc_wq:mutex_destroy (&lp->bmux);ieee802154_free_hw (lp->hw);
drivers/net/netdevsim/netdev.c +2 -2
@@ -302,7 +302,7 @@ nsim_create(struct nsim_dev *nsim_dev, struct nsim_dev_port *nsim_dev_port)rtnl_lock (); err =nsim_bpf_init (ns);if (err) - goto err_free_netdev; + goto err_rtnl_unlock;nsim_ipsec_init (ns);
@@ -316,8 +316,8 @@ nsim_create(struct nsim_dev *nsim_dev, struct nsim_dev_port *nsim_dev_port) err_ipsec_teardown:nsim_ipsec_teardown (ns);nsim_bpf_uninit (ns); +err_rtnl_unlock:rtnl_unlock (); -err_free_netdev:free_netdev (dev);return ERR_PTR (err); }
drivers/net/phy/dp83640.c +4 -0
@@ -1260,6 +1260,7 @@ static int dp83640_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr) dp83640->hwts_rx_en =1 ; dp83640->layer =PTP_CLASS_L4 ; dp83640->version =PTP_CLASS_V1 ; + cfg.rx_filter =HWTSTAMP_FILTER_PTP_V1_L4_EVENT ;break ;case HWTSTAMP_FILTER_PTP_V2_L4_EVENT :case HWTSTAMP_FILTER_PTP_V2_L4_SYNC :
@@ -1267,6 +1268,7 @@ static int dp83640_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr) dp83640->hwts_rx_en =1 ; dp83640->layer =PTP_CLASS_L4 ; dp83640->version =PTP_CLASS_V2 ; + cfg.rx_filter =HWTSTAMP_FILTER_PTP_V2_L4_EVENT ;break ;case HWTSTAMP_FILTER_PTP_V2_L2_EVENT :case HWTSTAMP_FILTER_PTP_V2_L2_SYNC :
@@ -1274,6 +1276,7 @@ static int dp83640_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr) dp83640->hwts_rx_en =1 ; dp83640->layer =PTP_CLASS_L2 ; dp83640->version =PTP_CLASS_V2 ; + cfg.rx_filter =HWTSTAMP_FILTER_PTP_V2_L2_EVENT ;break ;case HWTSTAMP_FILTER_PTP_V2_EVENT :case HWTSTAMP_FILTER_PTP_V2_SYNC :
@@ -1281,6 +1284,7 @@ static int dp83640_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr) dp83640->hwts_rx_en =1 ; dp83640->layer =PTP_CLASS_L4 |PTP_CLASS_L2 ; dp83640->version =PTP_CLASS_V2 ; + cfg.rx_filter =HWTSTAMP_FILTER_PTP_V2_EVENT ;break ;default :return -ERANGE ;
drivers/net/usb/ax88172a.c +1 -0
@@ -187,6 +187,7 @@ static int ax88172a_bind(struct usbnet *dev, struct usb_interface *intf) ret =asix_read_cmd (dev,AX_CMD_READ_NODE_ID ,0 ,0 ,ETH_ALEN , buf,0 );if (ret <ETH_ALEN ) {netdev_err (dev->net,"Failed to read MAC address: %d\n" , ret); + ret = -EIO ; goto free; }memcpy (dev->net->dev_addr, buf,ETH_ALEN );
drivers/net/wan/lapbether.c +8 -1
@@ -303,7 +303,6 @@ static void lapbeth_setup(struct net_device *dev) dev->netdev_ops = &lapbeth_netdev_ops; dev->needs_free_netdev = true; dev->type =ARPHRD_X25 ; - dev->hard_header_len =3 ; dev->mtu =1000 ; dev->addr_len =0 ; }
@@ -324,6 +323,14 @@ static int lapbeth_new_device(struct net_device *dev)if (!ndev) goto out; +/* When transmitting data: +* first this driver removes a pseudo header of 1 byte, +* then the lapb module prepends an LAPB header of at most 3 bytes, +* then this driver prepends a length field of 2 bytes, +* then the underlying Ethernet device prepends its own header. +*/ + ndev->hard_header_len =-1 +3 +2 + dev->hard_header_len; + lapbeth =netdev_priv (ndev); lapbeth->axdev = ndev;
drivers/net/wireless/ath/ath9k/hif_usb.c +40 -12
149 lines not on this page · raw message
drivers/net/wireless/ath/ath9k/hif_usb.h +5 -0
@@ -86,6 +86,11 @@ struct tx_buf {struct list_head list; }; +struct rx_buf { +struct sk_buff *skb; +struct hif_device_usb *hif_dev; +}; +#define HIF_USB_TX_STOP BIT(0)#define HIF_USB_TX_FLUSH BIT(1)
drivers/net/wireless/intel/iwlwifi/mvm/sta.c +3 -5
@@ -1184,17 +1184,15 @@ static int iwl_mvm_inactivity_check(struct iwl_mvm *mvm, u8 alloc_for_sta)for_each_set_bit (i, &changetid_queues,IWL_MAX_HW_QUEUES )iwl_mvm_change_queue_tid (mvm, i); +rcu_read_unlock (); +if (free_queue >=0 && alloc_for_sta !=IWL_MVM_INVALID_STA ) { ret =iwl_mvm_free_inactive_queue (mvm, free_queue, queue_owner, alloc_for_sta); -if (ret) { -rcu_read_unlock (); +if (ret)return ret; - } } -rcu_read_unlock (); -return free_queue; }
drivers/net/wireless/intel/iwlwifi/pcie/drv.c +2 -0
@@ -577,6 +577,8 @@ static const struct iwl_dev_info iwl_dev_info_table[] = {IWL_DEV_INFO (0x30DC ,0x1552 , iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),IWL_DEV_INFO (0x31DC ,0x1551 , iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),IWL_DEV_INFO (0x31DC ,0x1552 , iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name), +IWL_DEV_INFO (0xA370 ,0x1551 , iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name), +IWL_DEV_INFO (0xA370 ,0x1552 , iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name), IWL_DEV_INFO(0x271C, 0x0214, iwl9260_2ac_cfg, iwl9260_1_name),
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -275,6 +275,7 @@ enum {MT76_STATE_RUNNING ,MT76_STATE_MCU_RUNNING ,MT76_SCANNING , +MT76_RESTART ,MT76_RESET ,MT76_MCU_RESET , MT76_REMOVED,
drivers/net/wireless/mediatek/mt76/mt76x0/pci.c +2 -0
@@ -29,6 +29,7 @@ static void mt76x0e_stop_hw(struct mt76x02_dev *dev) {cancel_delayed_work_sync (&dev->cal_work);cancel_delayed_work_sync (&dev->mt76.mac_work); +clear_bit (MT76_RESTART , &dev->mphy.state);if (!mt76_poll (dev,MT_WPDMA_GLO_CFG ,MT_WPDMA_GLO_CFG_TX_DMA_BUSY ,0 ,1000 ))
@@ -83,6 +84,7 @@ static const struct ieee80211_ops mt76x0e_ops = { .set_coverage_class = mt76x02_set_coverage_class, .set_rts_threshold = mt76x02_set_rts_threshold, .get_antenna = mt76_get_antenna, + .reconfig_complete = mt76x02_reconfig_complete, };static int mt76x0e_register_device (struct mt76x02_dev *dev)
drivers/net/wireless/mediatek/mt76/mt76x02.h +2 -0
@@ -187,6 +187,8 @@ void mt76x02_sta_ps(struct mt76_dev *dev, struct ieee80211_sta *sta, bool ps);void mt76x02_bss_info_changed (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_bss_conf *info,u32 changed); +void mt76x02_reconfig_complete (struct ieee80211_hw *hw, +enum ieee80211_reconfig_type reconfig_type);struct beacon_bc_data {struct mt76x02_dev *dev;
drivers/net/wireless/mediatek/mt76/mt76x02_mcu.c +3 -0
@@ -20,6 +20,9 @@ int mt76x02_mcu_msg_send(struct mt76_dev *mdev, int cmd, const void *data,int ret;u8 seq; +if (mt76_is_mmio (&dev->mt76) && dev->mcu_timeout) +return -EIO ; + skb =mt76x02_mcu_msg_alloc (data, len);if (!skb)return -ENOMEM ;
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c +16 -0
@@ -520,6 +520,7 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev) }if (restart) { +set_bit (MT76_RESTART , &dev->mphy.state);mt76x02_mcu_function_select (dev,Q_SELECT ,1 );ieee80211_restart_hw (dev->mt76.hw); }else {
@@ -528,8 +529,23 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev) } } +void mt76x02_reconfig_complete (struct ieee80211_hw *hw, +enum ieee80211_reconfig_type reconfig_type) +{ +struct mt76x02_dev *dev = hw->priv; + +if (reconfig_type !=IEEE80211_RECONFIG_TYPE_RESTART ) +return ; + +clear_bit (MT76_RESTART , &dev->mphy.state); +} +EXPORT_SYMBOL_GPL (mt76x02_reconfig_complete); +static void mt76x02_check_tx_hang (struct mt76x02_dev *dev) { +if (test_bit (MT76_RESTART , &dev->mphy.state)) +return ; +if (mt76x02_tx_hang (dev)) {if (++dev->tx_hang_check >=MT_TX_HANG_TH ) goto restart;
drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c +1 -0
@@ -256,6 +256,7 @@ void mt76x2_stop_hardware(struct mt76x02_dev *dev)cancel_delayed_work_sync (&dev->cal_work);cancel_delayed_work_sync (&dev->mt76.mac_work);cancel_delayed_work_sync (&dev->wdt_work); +clear_bit (MT76_RESTART , &dev->mphy.state);mt76x02_mcu_set_radio_state (dev, false);mt76x2_mac_stop (dev, false); }
drivers/net/wireless/mediatek/mt76/mt76x2/pci_main.c +6 -13
@@ -10,12 +10,9 @@ static int mt76x2_start(struct ieee80211_hw *hw) {struct mt76x02_dev *dev = hw->priv; -int ret;mt76x02_mac_start (dev); - ret =mt76x2_phy_start (dev); -if (ret) -return ret; +mt76x2_phy_start (dev);ieee80211_queue_delayed_work (mt76_hw (dev), &dev->mt76.mac_work,MT_MAC_WORK_INTERVAL );
@@ -35,11 +32,9 @@ mt76x2_stop(struct ieee80211_hw *hw)mt76x2_stop_hardware (dev); } -static int +static void mt76x2_set_channel (struct mt76x02_dev *dev,struct cfg80211_chan_def *chandef) { -int ret; -cancel_delayed_work_sync (&dev->cal_work);tasklet_disable (&dev->mt76.pre_tbtt_tasklet);tasklet_disable (&dev->dfs_pd.dfs_tasklet);
@@ -50,7 +45,7 @@ mt76x2_set_channel(struct mt76x02_dev *dev, struct cfg80211_chan_def *chandef)mt76_set_channel (&dev->mphy);mt76x2_mac_stop (dev, true); - ret =mt76x2_phy_set_channel (dev, chandef); +mt76x2_phy_set_channel (dev, chandef);mt76x02_mac_cc_reset (dev);mt76x02_dfs_init_params (dev);
@@ -64,15 +59,12 @@ mt76x2_set_channel(struct mt76x02_dev *dev, struct cfg80211_chan_def *chandef)tasklet_enable (&dev->mt76.pre_tbtt_tasklet);mt76_txq_schedule_all (&dev->mphy); - -return ret; }static int mt76x2_config (struct ieee80211_hw *hw,u32 changed) {struct mt76x02_dev *dev = hw->priv; -int ret =0 ;mutex_lock (&dev->mt76.mutex);
@@ -101,11 +93,11 @@ mt76x2_config(struct ieee80211_hw *hw, u32 changed)if (changed &IEEE80211_CONF_CHANGE_CHANNEL ) {ieee80211_stop_queues (hw); - ret =mt76x2_set_channel (dev, &hw->conf.chandef); +mt76x2_set_channel (dev, &hw->conf.chandef);ieee80211_wake_queues (hw); } -return ret; +return 0 ; } static void
@@ -162,5 +154,6 @@ const struct ieee80211_ops mt76x2_ops = { .set_antenna = mt76x2_set_antenna, .get_antenna = mt76_get_antenna, .set_rts_threshold = mt76x02_set_rts_threshold, + .reconfig_complete = mt76x02_reconfig_complete, };
drivers/pci/controller/vmd.c +3 -2
@@ -546,9 +546,10 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features) vmd->irq_domain =pci_msi_create_irq_domain (fn, &vmd_msi_domain_info, x86_vector_domain); -irq_domain_free_fwnode (fn); -if (!vmd->irq_domain) +if (!vmd->irq_domain) { +irq_domain_free_fwnode (fn);return -ENODEV ; + }pci_add_resource (&resources, &vmd->resources[0 ]);pci_add_resource_offset (&resources, &vmd->resources[1 ], offset[0 ]);
drivers/pci/pci.c +9 -21
@@ -4662,8 +4662,7 @@ static int pci_pm_reset(struct pci_dev *dev, int probe)* pcie_wait_for_link_delay - Wait until link is active or inactive * @pdev: Bridge device * @active: waiting for active or inactive? -* @delay: Delay to wait after link has become active (in ms). Specify %0 -* for no delay. +* @delay: Delay to wait after link has become active (in ms) * * Use this to wait till link becomes active or inactive. */
@@ -4704,7 +4703,7 @@ static bool pcie_wait_for_link_delay(struct pci_dev *pdev, bool active,msleep (10 ); timeout -=10 ; } -if (active && ret && delay) +if (active && ret)msleep (delay);else if (ret != active) pci_info(pdev, "Data Link Layer Link Active not %s in 1000 msec\n",
@@ -4825,28 +4824,17 @@ void pci_bridge_wait_for_secondary_bus(struct pci_dev *dev)if (!pcie_downstream_port (dev))return ; -/* -* Per PCIe r5.0, sec 6.6.1, for downstream ports that support -* speeds > 5 GT/s, we must wait for link training to complete -* before the mandatory delay. -* -* We can only tell when link training completes via DLL Link -* Active, which is required for downstream ports that support -* speeds > 5 GT/s (sec 7.5.3.6). Unfortunately some common -* devices do not implement Link Active reporting even when it's -* required, so we'll check for that directly instead of checking -* the supported link speed. We assume devices without Link Active -* reporting can train in 100 ms regardless of speed. -*/ -if (dev->link_active_reporting) { -pci_dbg (dev,"waiting for link to train\n" ); -if (!pcie_wait_for_link_delay (dev, true,0 )) { +if (pcie_get_speed_cap (dev) <=PCIE_SPEED_5_0GT ) { +pci_dbg (dev,"waiting %d ms for downstream link\n" , delay); +msleep (delay); + }else { +pci_dbg (dev,"waiting %d ms for downstream link, after activation\n" , + delay); +if (!pcie_wait_for_link_delay (dev, true, delay)) {/* Did not train, no need to wait any further */ return ; } } -pci_dbg (child,"waiting %d ms to become accessible\n" , delay); -msleep (delay);if (!pci_device_is_present (child)) {pci_dbg (child,"waiting additional %d ms to become accessible\n" , delay);
drivers/perf/arm-cci.c +1 -0
@@ -1718,6 +1718,7 @@ static struct platform_driver cci_pmu_driver = { .driver = { .name = DRIVER_NAME, .of_match_table = arm_cci_pmu_matches, + .suppress_bind_attrs = true, }, .probe = cci_pmu_probe, .remove = cci_pmu_remove,
drivers/perf/arm-ccn.c +1 -0
@@ -1545,6 +1545,7 @@ static struct platform_driver arm_ccn_driver = { .driver = { .name = "arm-ccn", .of_match_table = arm_ccn_match, + .suppress_bind_attrs = true, }, .probe = arm_ccn_probe, .remove = arm_ccn_remove,
drivers/perf/arm_dsu_pmu.c +1 -0
@@ -759,6 +759,7 @@ static struct platform_driver dsu_pmu_driver = { .driver = { .name = DRVNAME, .of_match_table = of_match_ptr(dsu_pmu_of_match), + .suppress_bind_attrs = true, }, .probe = dsu_pmu_device_probe, .remove = dsu_pmu_device_remove,
drivers/perf/arm_smmuv3_pmu.c +2 -0
@@ -742,6 +742,7 @@ static int smmu_pmu_probe(struct platform_device *pdev)platform_set_drvdata (pdev, smmu_pmu); smmu_pmu->pmu = (struct pmu ) { + .module =THIS_MODULE , .task_ctx_nr = perf_invalid_context, .pmu_enable = smmu_pmu_enable, .pmu_disable = smmu_pmu_disable,
@@ -859,6 +860,7 @@ static void smmu_pmu_shutdown(struct platform_device *pdev)static struct platform_driver smmu_pmu_driver = { .driver = { .name ="arm-smmu-v3-pmcg" , + .suppress_bind_attrs = true, }, .probe = smmu_pmu_probe, .remove = smmu_pmu_remove,
drivers/perf/arm_spe_pmu.c +1 -0
@@ -1228,6 +1228,7 @@ static struct platform_driver arm_spe_pmu_driver = { .driver = { .name = DRVNAME, .of_match_table = of_match_ptr(arm_spe_pmu_of_match), + .suppress_bind_attrs = true, }, .probe = arm_spe_pmu_device_probe, .remove = arm_spe_pmu_device_remove,
drivers/perf/fsl_imx8_ddr_perf.c +2 -0
@@ -512,6 +512,7 @@ static int ddr_perf_init(struct ddr_pmu *pmu, void __iomem *base, { *pmu = (struct ddr_pmu ) { .pmu = (struct pmu ) { + .module =THIS_MODULE , .capabilities =PERF_PMU_CAP_NO_EXCLUDE , .task_ctx_nr = perf_invalid_context, .attr_groups = attr_groups,
@@ -706,6 +707,7 @@ static struct platform_driver imx_ddr_pmu_driver = { .driver = { .name = "imx-ddr-pmu", .of_match_table = imx_ddr_pmu_dt_ids,
Lines of this file are not shown. View the raw message.
drivers/perf/hisilicon/hisi_uncore_ddrc_pmu.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/perf/hisilicon/hisi_uncore_hha_pmu.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/platform/x86/intel_speed_select_if/isst_if_common.h +3 -0
Lines of this file are not shown. View the raw message.
drivers/platform/x86/intel_speed_select_if/isst_if_mbox_pci.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/platform/x86/intel_speed_select_if/isst_if_mmio.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/addi_apci_1032.c +14 -6
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/addi_apci_1500.c +19 -5
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/addi_apci_1564.c +14 -6
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/ni_6527.c +1 -1
Lines of this file are not shown. View the raw message.
net/netfilter/nf_tables_api.c +14 -27
41 lines not on this page · raw message
sound/soc/codecs/rt5670.c +56 -15
71 lines not on this page · raw message
sound/soc/intel/boards/cht_bsw_rt5672.c +11 -12
Lines of this file are not shown. View the raw message.
tools/perf/pmu-events/arch/s390/cf_z15/extended.json +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.