Linux 6.1.156
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.156 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/trace/histogram-design.rst | 4 Makefile | 2 arch/arm/mach-at91/pm_suspend.S | 4 arch/arm64/boot/dts/mediatek/mt8516-pumpkin.dts | 2 arch/arm64/boot/dts/renesas/rzg2lc-smarc.dtsi | 5 arch/arm64/kernel/fpsimd.c | 8 arch/sparc/lib/M7memcpy.S | 20 arch/sparc/lib/Memcpy_utils.S | 9 arch/sparc/lib/NG4memcpy.S | 2 arch/sparc/lib/NGmemcpy.S | 29 - arch/sparc/lib/U1memcpy.S | 19 arch/sparc/lib/U3memcpy.S | 2 arch/x86/include/asm/segment.h | 8 block/blk-mq-sysfs.c | 6 block/blk-settings.c | 3 crypto/rng.c | 8 drivers/acpi/nfit/core.c | 2 drivers/acpi/processor_idle.c | 3 drivers/base/node.c | 4 drivers/base/power/main.c | 14 drivers/base/regmap/regmap.c | 2 drivers/block/nbd.c | 8 drivers/block/null_blk/main.c | 2 drivers/bus/fsl-mc/fsl-mc-bus.c | 3 drivers/char/hw_random/Kconfig | 1 drivers/char/hw_random/ks-sa-rng.c | 4 drivers/cpufreq/scmi-cpufreq.c | 10 drivers/cpuidle/cpuidle-qcom-spm.c | 7 drivers/crypto/hisilicon/debugfs.c | 1 drivers/crypto/hisilicon/hpre/hpre_main.c | 3 drivers/crypto/hisilicon/qm.c | 3 drivers/crypto/hisilicon/sec2/sec_main.c | 80 +-- drivers/crypto/hisilicon/zip/zip_main.c | 17 drivers/devfreq/mtk-cci-devfreq.c | 3 drivers/firmware/meson/Kconfig | 2 drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c | 29 + drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 2 drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c | 1 drivers/gpu/drm/amd/pm/amdgpu_dpm_internal.c | 7 drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 92 ++-- drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c | 2 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c | 2 drivers/gpu/drm/panel/panel-novatek-nt35560.c | 2 drivers/gpu/drm/radeon/r600_cs.c | 4 drivers/hid/hid-mcp2221.c | 4 drivers/hwmon/mlxreg-fan.c | 24 - drivers/hwtracing/coresight/coresight-etm4x-core.c | 11 drivers/hwtracing/coresight/coresight-etm4x.h | 2 drivers/hwtracing/coresight/coresight-trbe.c | 9 drivers/i2c/busses/i2c-designware-platdrv.c | 1 drivers/i2c/busses/i2c-mt65xx.c | 17 drivers/i3c/master/svc-i3c-master.c | 31 + drivers/iio/inkern.c | 2 drivers/infiniband/core/addr.c | 10 drivers/infiniband/core/cm.c | 4 drivers/infiniband/core/sa_query.c | 6 drivers/infiniband/sw/siw/siw_verbs.c | 25 - drivers/input/misc/uinput.c | 1 drivers/input/touchscreen/atmel_mxt_ts.c | 2 drivers/input/touchscreen/cyttsp4_core.c | 2 drivers/irqchip/irq-sun6i-r.c | 2 drivers/md/dm-core.h | 1 drivers/md/dm-integrity.c | 4 drivers/md/dm.c | 13 drivers/media/i2c/rj54n1cb0c.c | 9 drivers/media/i2c/tc358743.c | 4 drivers/media/pci/b2c2/flexcop-pci.c | 2 drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c | 20 drivers/media/rc/imon.c | 27 - drivers/media/tuners/xc5000.c | 41 - drivers/mfd/vexpress-sysreg.c | 6 drivers/misc/fastrpc.c | 62 +- drivers/misc/genwqe/card_ddcb.c | 2 drivers/mtd/nand/raw/atmel/nand-controller.c | 4 drivers/net/can/rcar/rcar_canfd.c | 7 drivers/net/can/spi/hi311x.c | 33 - drivers/net/ethernet/amazon/ena/ena_ethtool.c | 5 drivers/net/ethernet/dlink/dl2k.c | 7 drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 6 drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h | 12 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 17 drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c | 24 + drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c | 7 drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c | 2 drivers/net/usb/asix_devices.c | 29 + drivers/net/usb/rtl8150.c | 2 drivers/net/wireless/ath/ath10k/wmi.c | 39 - drivers/net/wireless/marvell/mwifiex/cfg80211.c | 7 drivers/net/wireless/mediatek/mt76/mt7603/soc.c | 2 drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c | 1 drivers/net/wireless/realtek/rtw89/ser.c | 3 drivers/nvme/target/fc.c | 19 drivers/pci/controller/dwc/pcie-tegra194.c | 4 drivers/pci/controller/pci-tegra.c | 2 drivers/perf/arm_spe_pmu.c | 3 drivers/pinctrl/meson/pinctrl-meson-gxl.c | 10 drivers/pinctrl/pinmux.c | 2 drivers/pinctrl/renesas/pinctrl.c | 3 drivers/power/supply/cw2015_battery.c | 3 drivers/pps/kapi.c | 5 drivers/pps/pps.c | 5 drivers/pwm/pwm-tiehrpwm.c | 4 drivers/regulator/scmi-regulator.c | 3 drivers/remoteproc/qcom_q6v5.c | 3 drivers/scsi/mpt3sas/mpt3sas_transport.c | 8 drivers/scsi/myrs.c | 8 drivers/scsi/pm8001/pm8001_sas.c | 9 drivers/scsi/qla2xxx/qla_edif.c | 4 drivers/scsi/qla2xxx/qla_init.c | 4 drivers/soc/qcom/rpmh-rsc.c | 7 drivers/staging/axis-fifo/axis-fifo.c | 68 +-- drivers/target/target_core_configfs.c | 2 drivers/thermal/qcom/Kconfig | 3 drivers/thermal/qcom/lmh.c | 2 drivers/tty/serial/Kconfig | 2 drivers/tty/serial/max310x.c | 2 drivers/uio/uio_hv_generic.c | 7 drivers/usb/cdns3/cdnsp-pci.c | 5 drivers/usb/gadget/configfs.c | 2 drivers/usb/host/max3421-hcd.c | 2 drivers/usb/host/xhci-ring.c | 11 drivers/usb/phy/phy-twl6030-usb.c | 3 drivers/usb/serial/option.c | 6 drivers/usb/typec/tipd/core.c | 24 - drivers/usb/usbip/vhci_hcd.c | 22 drivers/vhost/vringh.c | 14 drivers/watchdog/mpc8xxx_wdt.c | 2 fs/btrfs/ref-verify.c | 9 fs/btrfs/tree-checker.c | 2 fs/ext4/ext4.h | 10 fs/ext4/file.c | 2 fs/ext4/inode.c | 2 fs/ext4/orphan.c | 6 fs/ext4/super.c | 4 fs/f2fs/data.c | 7 fs/nfs/nfs4proc.c | 2 fs/ntfs3/run.c | 12 fs/ocfs2/stack_user.c | 1 fs/smb/server/smb2pdu.c | 3 fs/smb/server/transport_rdma.c | 99 +++- fs/squashfs/inode.c | 7 fs/squashfs/squashfs_fs_i.h | 2 fs/udf/inode.c | 3 include/crypto/sha256_base.h | 2 include/linux/bpf.h | 1 include/linux/compiler.h | 9 include/linux/device.h | 3 include/linux/minmax.h | 222 +++++----- include/trace/events/filelock.h | 3 init/Kconfig | 1 kernel/bpf/core.c | 5 kernel/seccomp.c | 12 kernel/smp.c | 11 kernel/trace/bpf_trace.c | 9 lib/vsprintf.c | 2 mm/hugetlb.c | 2 net/9p/trans_fd.c | 8 net/bluetooth/hci_sync.c | 10 net/bluetooth/iso.c | 9 net/bluetooth/mgmt.c | 10 net/core/filter.c | 16 net/ipv4/tcp.c | 9 net/mac80211/rx.c | 28 - net/netfilter/ipset/ip_set_hash_gen.h | 8 net/netfilter/ipvs/ip_vs_ftp.c | 4 net/nfc/nci/ntf.c | 135 ++++-- scripts/gcc-plugins/gcc-common.h | 7 sound/pci/lx6464es/lx_core.c | 4 sound/soc/codecs/rt5682s.c | 17 sound/soc/intel/boards/bytcht_es8316.c | 20 sound/soc/intel/boards/bytcr_rt5640.c | 7 sound/soc/intel/boards/bytcr_rt5651.c | 26 - sound/soc/qcom/qdsp6/topology.c | 4 tools/include/nolibc/std.h | 2 tools/lib/bpf/libbpf.c | 10 tools/lib/subcmd/help.c | 3 tools/testing/nvdimm/test/ndtest.c | 13 tools/testing/selftests/arm64/pauth/exec_target.c | 7 tools/testing/selftests/bpf/progs/test_tcpnotify_kern.c | 1 tools/testing/selftests/bpf/test_tcpnotify_user.c | 20 tools/testing/selftests/net/mptcp/mptcp_connect.c | 2 tools/testing/selftests/watchdog/watchdog-test.c | 6 182 files changed, 1363 insertions(+), 751 deletions(-)
Abdun Nihaal (1):
wifi: mt76: fix potential memory leak in mt76_wmac_probe()
Aditya Kumar Singh (1):
wifi: mac80211: fix Rx packet handling when pubsta information is not available
Akhilesh Patil (1):
selftests: watchdog: skip ping loop if WDIOF_KEEPALIVEPING not supported
Alok Tiwari (1):
PCI: tegra: Fix devm_kcalloc() argument order for port->phys allocation
Andy Yan (1):
power: supply: cw2015: Fix a alignment coding style issue
AngeloGioacchino Del Regno (1):
arm64: dts: mediatek: mt8516-pumpkin: Fix machine compatible
Anthony Iliopoulos (1):
NFSv4.1: fix backchannel max_resp_sz verification check
Arnaud Lecomte (1):
hid: fix I2C read buffer overflow in raw_event() for mcp2221
Arnd Bergmann (2):
hwrng: nomadik - add ARM_AMBA dependency
media: st-delta: avoid excessive stack usage
Bagas Sanjaya (1):
Documentation: trace: historgram-design: Separate sched_waking histogram section heading and the following diagram
Bala-Vignesh-Reddy (1):
selftests: arm64: Check fread return value in exec_target
Baochen Qiang (1):
wifi: ath10k: avoid unnecessary wait for service ready message
Bartosz Golaszewski (2):
mfd: vexpress-sysreg: Check the return value of devm_gpiochip_add_data()
pinctrl: check the return value of pinmux_ops::get_function_name()
Bernard Metzler (1):
RDMA/siw: Always report immediate post SQ errors
Biju Das (1):
arm64: dts: renesas: rzg2lc-smarc: Disable CAN-FD channel0
Bitterblue Smith (1):
wifi: rtlwifi: rtl8192cu: Don't claim USB ID 07b8:8188
Brahmajit Das (1):
drm/radeon/r600_cs: clean up of dead code in r600_cs
Breno Leitao (1):
crypto: sha256 - fix crash at kexec
Brigham Campbell (1):
drm/panel: novatek-nt35560: Fix invalid return value
Chen Yufeng (1):
can: hi311x: fix null pointer dereference when resuming from sleep before interface was enabled
Chenghai Huang (3):
crypto: hisilicon/zip - remove unnecessary validation for high-performance mode configurations
crypto: hisilicon - re-enable address prefetch after device resuming
crypto: hisilicon/qm - set NULL to qm->debug.qm_diff_regs
Christophe Leroy (1):
watchdog: mpc8xxx_wdt: Reload the watchdog timer when enabling the watchdog
Colin Ian King (2):
misc: genwqe: Fix incorrect cmd field being reported in error
ACPI: NFIT: Fix incorrect ndr_desc being reportedin dev_err message
Cristian Ciocaltea (1):
usb: vhci-hcd: Prevent suspending virtually attached devices
Da Xue (1):
pinctrl: meson-gxl: add missing i2c_d pinmux
Dan Carpenter (4):
PM / devfreq: mtk-cci: Fix potential error pointer dereference in probe()
usb: host: max3421-hcd: Fix error pointer dereference in probe cleanup
serial: max310x: Add error checking in probe()
ocfs2: fix double free in user_cluster_connect()
Daniel Borkmann (1):
bpf: Enforce expected_attach_type for tailcall compatibility
Daniel Wagner (1):
nvmet-fc: move lsop put work to nvmet_fc_ls_req_op
David Laight (7):
minmax.h: add whitespace around operators and after commas minmax.h: update some comments
minmax.h: reduce the #define expansion of min(), max() and clamp() minmax.h: use BUILD_BUG_ON_MSG() for the lo < hi test in clamp() minmax.h: move all the clamp() definitions after the min/max() ones minmax.h: simplify the variants of clamp()
minmax.h: remove some #defines that are only expanded once
David Sterba (1):
btrfs: ref-verify: handle damaged extent root tree
Deepak Sharma (1):
net: nfc: nci: Add parameter validation for packet data
Dmitry Baryshkov (2):
thermal/drivers/qcom: Make LMH select QCOM_SCM thermal/drivers/qcom/lmh: Add missing IRQ includes
Donet Tom (2):
drivers/base/node: handle error properly in register_one_node() drivers/base/node: fix double free in register_one_node()
Duoming Zhou (3):
media: b2c2: Fix use-after-free causing by irq_check_work in flexcop_pci_remove
media: tuner: xc5000: Fix use-after-free in xc5000_release
media: i2c: tc358743: Fix use-after-free bugs caused by orphan timer in probe
Duy Nguyen (1):
can: rcar_canfd: Fix controller mode setting
Eric Dumazet (2):
nbd: restrict sockets to TCP and UDP
tcp: fix __tcp_close() to only send RST when required
Erick Karanja (1):
mtd: rawnand: atmel: Fix error handling path in atmel_nand_controller_add_nands
Fedor Pchelkin (1):
wifi: rtw89: avoid circular locking dependency in ser_state_run()
Florian Fainelli (1):
cpufreq: scmi: Account for malformed DT in scmi_dev_used_by_cpus()
Geert Uytterhoeven (2):
init: INITRAMFS_PRESERVE_MTIME should depend on BLK_DEV_INITRD
regmap: Remove superfluous check for !config in __regmap_init()
Genjian Zhang (1):
null_blk: Fix the description of the cache_size module argument
Greg Kroah-Hartman (1):
Linux 6.1.156
Guangshuo Li (1):
nvdimm: ndtest: Return -ENOMEM if devm_kcalloc() fails in ndtest_probe()
Hans de Goede (1):
iio: consumers: Fix offset handling in iio_convert_raw_to_processed()
Herbert Xu (1):
crypto: rng - Ensure set_ent is always present
Huisong Li (1):
ACPI: processor: idle: Fix memory leak when register cpuidle device failed
Håkon Bugge (1):
RDMA/cm: Rate limit destroy CM ID timeout error message
I Viswanath (1):
net: usb: Remove disruptive netif_wake_queue in rtl8150_set_multicast
Jack Yu (1):
ASoC: rt5682s: Adjust SAR ADC button mode to fix noise issue
Jakub Kicinski (1):
Revert "net/mlx5e: Update and set Xon/Xoff upon MTU set"
Jan Kara (1):
ext4: fix checks for orphan inodes
Jeff Layton (1):
filelock: add FL_RECLAIM to show_fl_flags() macro
Johan Hovold (2):
firmware: firmware: meson-sm: fix compile-test default
cpuidle: qcom-spm: fix device and OF node leaks at probe
Johannes Nixdorf (1):
seccomp: Fix a race with WAIT_KILLABLE_RECV if the tracer replies too fast
Kees Cook (1):
gcc-plugins: Remove TODO_verify_il for GCC >= 16
Kenta Akagi (1):
selftests: mptcp: connect: fix build regression caused by backport
Kohei Enju (2):
nfp: fix RSS hash key size when RSS is not supported
net: ena: return 0 in ena_get_rxfh_key_size() when RSS hash key is not configurable
Kunihiko Hayashi (1):
i2c: designware: Add disabling clocks when probe fails
Larshin Sergey (2):
media: rc: fix races with imon_disconnect()
fs: udf: fix OOB read in lengthAllocDescs handling
Leilk.Liu (1):
i2c: mediatek: fix potential incorrect use of I2C_MASTER_WRRD
Leo Yan (3):
coresight: trbe: Prevent overflow in PERF_IDX2OFF()
perf: arm_spe: Prevent overflow in PERF_IDX2OFF()
coresight: trbe: Return NULL pointer for allocation failures
Li Nan (1):
blk-mq: check kobject state_in_sysfs before deleting in blk_mq_unregister_hctx
Liao Yuanhong (1):
drm/amd/display: Remove redundant semicolons
Ling Xu (3):
misc: fastrpc: Fix fastrpc_map_lookup operation
misc: fastrpc: fix possible map leak in fastrpc_put_args
misc: fastrpc: Skip reference for DMA handles
Linus Torvalds (4):
minmax: don't use max() in situations that want a C constant expression
minmax: simplify min()/max()/clamp() implementation
minmax: improve macro expansion and type checking
minmax: fix up min3() and max3() too
Luiz Augusto von Dentz (3):
Bluetooth: MGMT: Fix not exposing debug UUID on MGMT_OP_READ_EXP_FEATURES_INFO
Bluetooth: ISO: Fix possible UAF on iso_conn_free
Bluetooth: hci_sync: Fix using random address for BIG/PA advertisements
Marek Vasut (1):
Input: atmel_mxt_ts - allow reset GPIO to sleep
Matt Bobrowski (1):
bpf/selftests: Fix test_tcpnotify_user
Matvey Kovalev (1):
ksmbd: fix error code overwriting in smb2_get_info_filesystem()
Miaoqian Lin (1):
usb: cdns3: cdnsp-pci: remove redundant pci_disable_device() call
Michael Karcher (5):
sparc: fix accurate exception reporting in copy_{from_to}_user for UltraSPARC
sparc: fix accurate exception reporting in copy_{from_to}_user for UltraSPARC III
sparc: fix accurate exception reporting in copy_{from_to}_user for Niagara
sparc: fix accurate exception reporting in copy_to_user for Niagara 4
sparc: fix accurate exception reporting in copy_{from,to}_user for M7
Michael S. Tsirkin (1):
vhost: vringh: Fix copy_to_iter return value check
Michal Pecio (1):
Revert "usb: xhci: Avoid Stop Endpoint retry loop if the endpoint seems Running"
Mikulas Patocka (1):
dm-integrity: limit MAX_TAG_SIZE to 255
Moshe Shemesh (2):
net/mlx5: Stop polling for command response if interface goes down net/mlx5: fw reset, add reset timeout work
Nagarjuna Kristam (1):
PCI: tegra194: Fix duplicate PLL disable in pex_ep_event_pex_rst_assert()
Nalivayko Sergey (1):
net/9p: fix double req put in p9_fd_cancelled
Naman Jain (1):
uio_hv_generic: Let userspace take care of interrupt mask
Nicolas Ferre (1):
ARM: at91: pm: fix MCKx restore routine
Niklas Cassel (1):
scsi: pm80xx: Fix array-index-out-of-of-bounds on rmmod
Nishanth Menon (1):
hwrng: ks-sa - fix division by zero in ks_sa_rng_init
Oleksij Rempel (1):
net: usb: asix: hold PM usage ref to avoid PM/MDIO + RTNL deadlock
Ovidiu Panait (3):
staging: axis-fifo: fix maximum TX packet length check
staging: axis-fifo: fix TX handling on copy_from_user() failure
staging: axis-fifo: flush RX FIFO on read errors
Parav Pandit (1):
RDMA/core: Resolve MAC of next-hop device without ARP support
Paul Chaignon (1):
bpf: Explicitly check accesses to bpf_sock_addr
Pauli Virtanen (1):
Bluetooth: ISO: don't leak skb in ISO_CONT RX
Phillip Lougher (1):
Squashfs: fix uninit-value in squashfs_get_parent
Qianfeng Rong (8):
regulator: scmi: Use int type to store negative error codes
block: use int to store blk_stack_limits() return value
pinctrl: renesas: Use int type to store negative error codes
ALSA: lx_core: use int type to store negative error codes drm/amdkfd: Fix error code sign for EINVAL in svm_ioctl() drm/msm/dpu: fix incorrect type for ret
scsi: qla2xxx: edif: Fix incorrect sign of error code
scsi: qla2xxx: Fix incorrect sign of error code in START_SP_W_RETRIES()
Rafael J. Wysocki (3):
driver core/PM: Set power.no_callbacks along with power.no_pm
PM: sleep: core: Clear power.must_resume in noirq suspend error path
smp: Fix up and expand the smp_call_function_many() kerneldoc
Ranjan Kumar (1):
scsi: mpt3sas: Fix crash in transport port remove by using ioc_info()
Raphael Gallais-Pou (1):
serial: stm32: allow selecting console when the driver is module
Ricardo Ribalda (1):
media: tunner: xc5000: Refactor firmware load
Salah Triki (1):
bus: fsl-mc: Check return value of platform_get_resource()
Shay Drory (1):
net/mlx5: pagealloc: Fix reclaim race during command interface teardown
Slavin Liu (1):
ipvs: Defer ip_vs_ftp unregister during netns cleanup
Sneh Mankad (1):
soc: qcom: rpmh-rsc: Unconditionally clear _TRIGGER bit for TCS
Srinivas Kandagatla (1):
ASoC: qcom: audioreach: fix potential null pointer dereference
Stanley Chu (2):
i3c: master: svc: Use manual response for IBI events
i3c: master: svc: Recycle unused IBI slot
Stefan Kerkmann (1):
wifi: mwifiex: send world regulatory domain to driver
Stefan Metzmacher (1):
smb: server: fix IRD/ORD negotiation with the client
Stephan Gerhold (1):
remoteproc: qcom: q6v5: Avoid disabling handover IRQ twice
Sven Peter (1):
usb: typec: tipd: Clear interrupts first
Takashi Iwai (3):
ASoC: Intel: bytcht_es8316: Fix invalid quirk input mapping
ASoC: Intel: bytcr_rt5640: Fix invalid quirk input mapping
ASoC: Intel: bytcr_rt5651: Fix invalid quirk input mapping
Tao Chen (1):
bpf: Remove migrate_disable in kprobe_multi_link_prog_run
Thomas Fourier (1):
scsi: myrs: Fix dma_alloc_coherent() error check
Timur Kristóf (7):
drm/amdgpu: Power up UVD 3 for FW validation (v2) drm/amd/pm: Disable ULV even if unsupported (v3) drm/amd/pm: Fix si_upload_smc_data (v3)
drm/amd/pm: Adjust si_upload_smc_data register programming (v3) drm/amd/pm: Treat zero vblank time as too short in si_dpm (v3) drm/amd/pm: Disable MCLK switching with non-DC at 120 Hz+ (v2) drm/amd/pm: Disable SCLK switching on Oland with high pixel clocks (v3)
Uros Bizjak (1):
x86/vdso: Fix output operand size of RDPID
Uwe Kleine-König (1):
pwm: tiehrpwm: Fix corner case in clock divisor calculation
Vadim Pasternak (1):
hwmon: (mlxreg-fan) Separate methods of fan setting coming from different subsystems
Vitaly Grigoryev (1):
fs: ntfs3: Fix integer overflow in run_unpack()
Vlad Dumitrescu (1):
IB/sa: Fix sa_local_svc_timeout_ms read race
Wang Haoran (1):
scsi: target: target_core_configfs: Add length check to avoid buffer overflow
Wang Liang (1):
pps: fix warning in pps_register_cdev when register device fail
Will Deacon (1):
KVM: arm64: Fix softirq masking in FPSIMD register saving sequence
William Wu (1):
usb: gadget: configfs: Correctly set use_os_string at bind
Xiaowei Li (1):
USB: serial: option: add SIMCom 8230C compositions
Xichao Zhao (1):
usb: phy: twl6030: Fix incorrect type for ret
Yang Shi (1):
mm: hugetlb: avoid soft lockup when mprotect to large memory area
Yeounsu Moon (1):
net: dlink: handle copy_thresh allocation failure
Yuanfang Zhang (1):
coresight-etm4x: Conditionally access register TRCEXTINSELR
Yureka Lilian (1):
libbpf: Fix reuse of DEVMAP
Zhang Shurong (1):
media: rj54n1cb0c: Fix memleak in rj54n1_probe()
Zhen Ni (2):
netfilter: ipset: Remove unused htable_bits in macro ahash_region
Input: uinput - zero-initialize uinput_ff_upload_compat to avoid info leak
Zheng Qixing (2):
dm: fix queue start/stop imbalance under suspend/load/resume races
dm: fix NULL pointer dereference in __dm_suspend()
Zhouyi Zhou (1):
tools/nolibc: make time_t robust if __kernel_old_time_t is missing in host headers
hupu (1):
perf subcmd: avoid crash in exclude_cmds when excludes is empty
wangzijie (1):
f2fs: fix zero-sized extent for precache extents
zhang jiao (1):
vhost: vringh: Modify the return value check
Greg Kroah-Hartman
maintainerDocumentation/trace/histogram-design.rst +3 -1
@@ -380,7 +380,9 @@ entry, ts0, corresponding to the ts0 variable in the sched_waking trigger above. sched_waking histogram -----------------------:: +---------------------- + +.. code-block:: +------------------+ | hist_data |<-------------------------------------------------------+
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 155 +SUBLEVEL = 156 EXTRAVERSION = NAME = Curry Ramen
arch/arm/mach-at91/pm_suspend.S +2 -2
@@ -868,7 +868,7 @@ e_done: /** * at91_mckx_ps_restore: restore MCK1..4 settings * - * Side effects: overwrites tmp1, tmp2 + * Side effects: overwrites tmp1, tmp2 and tmp3 */ .macro at91_mckx_ps_restore #ifdef CONFIG_SOC_SAMA7
@@ -912,7 +912,7 @@ r_ps: bic tmp3, tmp3, #AT91_PMC_MCR_V2_ID_MSK orr tmp3, tmp3, tmp1 orr tmp3, tmp3, #AT91_PMC_MCR_V2_CMD - str tmp2, [pmc, #AT91_PMC_MCR_V2] + str tmp3, [pmc, #AT91_PMC_MCR_V2] wait_mckrdy tmp1
arch/arm64/boot/dts/mediatek/mt8516-pumpkin.dts +1 -1
@@ -11,7 +11,7 @@ / { model = "Pumpkin MT8516"; - compatible = "mediatek,mt8516"; + compatible = "mediatek,mt8516-pumpkin", "mediatek,mt8516"; memory@40000000 { device_type = "memory";
arch/arm64/boot/dts/renesas/rzg2lc-smarc.dtsi +4 -1
@@ -50,7 +50,10 @@ aliases { #if (SW_SCIF_CAN || SW_RSPI_CAN) &canfd { pinctrl-0 = <&can1_pins>; - /delete-node/ channel@0; + + channel0 { + status = "disabled"; + }; }; #else &canfd {
arch/arm64/kernel/fpsimd.c +6 -2
@@ -1848,13 +1848,17 @@ static void fpsimd_flush_cpu_state(void)*/ void fpsimd_save_and_flush_cpu_state (void ) { +unsigned long flags; +if (!system_supports_fpsimd ())return ;WARN_ON (preemptible ()); -get_cpu_fpsimd_context (); +local_irq_save (flags); +__get_cpu_fpsimd_context ();fpsimd_save ();fpsimd_flush_cpu_state (); -put_cpu_fpsimd_context (); +__put_cpu_fpsimd_context (); +local_irq_restore (flags); }#ifdef CONFIG_KERNEL_MODE_NEON
arch/sparc/lib/M7memcpy.S +10 -10
@@ -696,16 +696,16 @@ FUNC_NAME: EX_LD_FP(LOAD(ldd, %o4+40, %f26), memcpy_retl_o2_plus_o5_plus_40) faligndata %f24, %f26, %f10 EX_ST_FP(STORE(std, %f6, %o0+24), memcpy_retl_o2_plus_o5_plus_40) - EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_40) + EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_32) faligndata %f26, %f28, %f12 - EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_40) + EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_32) add %o4, 64, %o4 - EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_40) + EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_24) faligndata %f28, %f30, %f14 - EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_40) - EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_40) + EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_24) + EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_16) add %o0, 64, %o0 - EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_40) + EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_8) fsrc2 %f30, %f14 bgu,pt %xcc, .Lunalign_sloop prefetch [%o4 + (8 * BLOCK_SIZE)], 20
@@ -728,7 +728,7 @@ FUNC_NAME: add %o4, 8, %o4 faligndata %f0, %f2, %f16 subcc %o5, 8, %o5 - EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5) + EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5_plus_8) fsrc2 %f2, %f0 bgu,pt %xcc, .Lunalign_by8 add %o0, 8, %o0
@@ -772,7 +772,7 @@ FUNC_NAME: subcc %o5, 0x20, %o5 EX_ST(STORE(stx, %o3, %o0 + 0x00), memcpy_retl_o2_plus_o5_plus_32) EX_ST(STORE(stx, %g2, %o0 + 0x08), memcpy_retl_o2_plus_o5_plus_24) - EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_24) + EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_16) EX_ST(STORE(stx, %o4, %o0 + 0x18), memcpy_retl_o2_plus_o5_plus_8) bne,pt %xcc, 1b add %o0, 0x20, %o0
@@ -804,12 +804,12 @@ FUNC_NAME: brz,pt %o3, 2f sub %o2, %o3, %o2 -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_g1) +1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_o3) add %o1, 1, %o1 subcc %o3, 1, %o3 add %o0, 1, %o0 bne,pt %xcc, 1b - EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_g1_plus_1) + EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_o3_plus_1) 2: and %o1, 0x7, %o3 brz,pn %o3, .Lmedium_noprefetch_cp
arch/sparc/lib/Memcpy_utils.S +9 -0
@@ -137,6 +137,15 @@ ENTRY(memcpy_retl_o2_plus_63_8) ba,pt %xcc, __restore_asi add %o2, 8, %o0 ENDPROC(memcpy_retl_o2_plus_63_8) +ENTRY(memcpy_retl_o2_plus_o3) + ba,pt %xcc, __restore_asi + add %o2, %o3, %o0 +ENDPROC(memcpy_retl_o2_plus_o3) +ENTRY(memcpy_retl_o2_plus_o3_plus_1) + add %o3, 1, %o3 + ba,pt %xcc, __restore_asi + add %o2, %o3, %o0 +ENDPROC(memcpy_retl_o2_plus_o3_plus_1) ENTRY(memcpy_retl_o2_plus_o5) ba,pt %xcc, __restore_asi add %o2, %o5, %o0
arch/sparc/lib/NG4memcpy.S +1 -1
@@ -281,7 +281,7 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */ subcc %o5, 0x20, %o5 EX_ST(STORE(stx, %g1, %o0 + 0x00), memcpy_retl_o2_plus_o5_plus_32) EX_ST(STORE(stx, %g2, %o0 + 0x08), memcpy_retl_o2_plus_o5_plus_24) - EX_ST(STORE(stx, GLOBAL_SPARE, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_24) + EX_ST(STORE(stx, GLOBAL_SPARE, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_16) EX_ST(STORE(stx, %o4, %o0 + 0x18), memcpy_retl_o2_plus_o5_plus_8) bne,pt %icc, 1b add %o0, 0x20, %o0
arch/sparc/lib/NGmemcpy.S +18 -11
@@ -79,8 +79,8 @@ #ifndef EX_RETVAL #define EX_RETVAL(x) x __restore_asi: - ret wr %g0, ASI_AIUS, %asi + ret restore ENTRY(NG_ret_i2_plus_i4_plus_1) ba,pt %xcc, __restore_asi
@@ -125,15 +125,16 @@ ENTRY(NG_ret_i2_plus_g1_minus_56) ba,pt %xcc, __restore_asi add %i2, %g1, %i0 ENDPROC(NG_ret_i2_plus_g1_minus_56) -ENTRY(NG_ret_i2_plus_i4) +ENTRY(NG_ret_i2_plus_i4_plus_16) + add %i4, 16, %i4 ba,pt %xcc, __restore_asi add %i2, %i4, %i0 -ENDPROC(NG_ret_i2_plus_i4) -ENTRY(NG_ret_i2_plus_i4_minus_8) - sub %i4, 8, %i4 +ENDPROC(NG_ret_i2_plus_i4_plus_16) +ENTRY(NG_ret_i2_plus_i4_plus_8) + add %i4, 8, %i4 ba,pt %xcc, __restore_asi add %i2, %i4, %i0 -ENDPROC(NG_ret_i2_plus_i4_minus_8) +ENDPROC(NG_ret_i2_plus_i4_plus_8) ENTRY(NG_ret_i2_plus_8) ba,pt %xcc, __restore_asi add %i2, 8, %i0
@@ -160,6 +161,12 @@ ENTRY(NG_ret_i2_and_7_plus_i4) ba,pt %xcc, __restore_asi add %i2, %i4, %i0 ENDPROC(NG_ret_i2_and_7_plus_i4) +ENTRY(NG_ret_i2_and_7_plus_i4_plus_8) + and %i2, 7, %i2 + add %i4, 8, %i4 + ba,pt %xcc, __restore_asi + add %i2, %i4, %i0 +ENDPROC(NG_ret_i2_and_7_plus_i4) #endif .align 64
@@ -405,13 +412,13 @@ FUNC_NAME: /* %i0=dst, %i1=src, %i2=len */ andn %i2, 0xf, %i4 and %i2, 0xf, %i2 1: subcc %i4, 0x10, %i4 - EX_LD(LOAD(ldx, %i1, %o4), NG_ret_i2_plus_i4) + EX_LD(LOAD(ldx, %i1, %o4), NG_ret_i2_plus_i4_plus_16) add %i1, 0x08, %i1 - EX_LD(LOAD(ldx, %i1, %g1), NG_ret_i2_plus_i4) + EX_LD(LOAD(ldx, %i1, %g1), NG_ret_i2_plus_i4_plus_16) sub %i1, 0x08, %i1 - EX_ST(STORE(stx, %o4, %i1 + %i3), NG_ret_i2_plus_i4) + EX_ST(STORE(stx, %o4, %i1 + %i3), NG_ret_i2_plus_i4_plus_16) add %i1, 0x8, %i1 - EX_ST(STORE(stx, %g1, %i1 + %i3), NG_ret_i2_plus_i4_minus_8) + EX_ST(STORE(stx, %g1, %i1 + %i3), NG_ret_i2_plus_i4_plus_8) bgu,pt %XCC, 1b add %i1, 0x8, %i1 73: andcc %i2, 0x8, %g0
@@ -468,7 +475,7 @@ FUNC_NAME: /* %i0=dst, %i1=src, %i2=len */ subcc %i4, 0x8, %i4 srlx %g3, %i3, %i5 or %i5, %g2, %i5 - EX_ST(STORE(stx, %i5, %o0), NG_ret_i2_and_7_plus_i4) + EX_ST(STORE(stx, %i5, %o0), NG_ret_i2_and_7_plus_i4_plus_8) add %o0, 0x8, %o0 bgu,pt %icc, 1b sllx %g3, %g1, %g2
arch/sparc/lib/U1memcpy.S +10 -9
@@ -164,17 +164,18 @@ ENTRY(U1_gs_40_fp) retl add %o0, %o2, %o0 ENDPROC(U1_gs_40_fp) -ENTRY(U1_g3_0_fp) - VISExitHalf - retl - add %g3, %o2, %o0 -ENDPROC(U1_g3_0_fp) ENTRY(U1_g3_8_fp) VISExitHalf add %g3, 8, %g3 retl add %g3, %o2, %o0 ENDPROC(U1_g3_8_fp) +ENTRY(U1_g3_16_fp) + VISExitHalf + add %g3, 16, %g3 + retl + add %g3, %o2, %o0 +ENDPROC(U1_g3_16_fp) ENTRY(U1_o2_0_fp) VISExitHalf retl
@@ -547,18 +548,18 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */ 62: FINISH_VISCHUNK(o0, f44, f46) 63: UNEVEN_VISCHUNK_LAST(o0, f46, f0) -93: EX_LD_FP(LOAD(ldd, %o1, %f2), U1_g3_0_fp) +93: EX_LD_FP(LOAD(ldd, %o1, %f2), U1_g3_8_fp) add %o1, 8, %o1 subcc %g3, 8, %g3 faligndata %f0, %f2, %f8 - EX_ST_FP(STORE(std, %f8, %o0), U1_g3_8_fp) + EX_ST_FP(STORE(std, %f8, %o0), U1_g3_16_fp) bl,pn %xcc, 95f add %o0, 8, %o0 - EX_LD_FP(LOAD(ldd, %o1, %f0), U1_g3_0_fp) + EX_LD_FP(LOAD(ldd, %o1, %f0), U1_g3_8_fp) add %o1, 8, %o1 subcc %g3, 8, %g3 faligndata %f2, %f0, %f8 - EX_ST_FP(STORE(std, %f8, %o0), U1_g3_8_fp) + EX_ST_FP(STORE(std, %f8, %o0), U1_g3_16_fp) bge,pt %xcc, 93b add %o0, 8, %o0
arch/sparc/lib/U3memcpy.S +1 -1
@@ -267,6 +267,7 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */ faligndata %f10, %f12, %f26 EX_LD_FP(LOAD(ldd, %o1 + 0x040, %f0), U3_retl_o2) + and %o2, 0x3f, %o2 subcc GLOBAL_SPARE, 0x80, GLOBAL_SPARE add %o1, 0x40, %o1 bgu,pt %XCC, 1f
@@ -336,7 +337,6 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */ * Also notice how this code is careful not to perform a * load past the end of the src buffer. */ - and %o2, 0x3f, %o2 andcc %o2, 0x38, %g2 be,pn %XCC, 2f subcc %g2, 0x8, %g2
arch/x86/include/asm/segment.h +4 -4
@@ -243,7 +243,7 @@ static inline unsigned long vdso_encode_cpunode(int cpu, unsigned long node)static inline void vdso_read_cpunode (unsigned *cpu,unsigned *node) { -unsigned int p; +unsigned long p;/* * Load CPU and node number from the GDT. LSL is faster than RDTSCP
@@ -253,10 +253,10 @@ static inline void vdso_read_cpunode(unsigned *cpu, unsigned *node)* * If RDPID is available, use it. */ -alternative_io ("lsl %[seg],%[p]" , -".byte 0xf3,0x0f,0xc7,0xf8" ,/* RDPID %eax/rax */ +alternative_io ("lsl %[seg],%k[p]" , +"rdpid %[p]" , X86_FEATURE_RDPID, - [p] "=a" (p), [seg] "r" (__CPUNODE_SEG)); + [p] "=r" (p), [seg] "r" (__CPUNODE_SEG)); if (cpu) *cpu = (p & VDSO_CPUNODE_MASK);
block/blk-mq-sysfs.c +4 -2
@@ -176,9 +176,11 @@ static void blk_mq_unregister_hctx(struct blk_mq_hw_ctx *hctx)return ;hctx_for_each_ctx (hctx, ctx, i) -kobject_del (&ctx->kobj); +if (ctx->kobj.state_in_sysfs) +kobject_del (&ctx->kobj); -kobject_del (&hctx->kobj); +if (hctx->kobj.state_in_sysfs) +kobject_del (&hctx->kobj); }static int blk_mq_register_hctx (struct blk_mq_hw_ctx *hctx)
block/blk-settings.c +2 -1
@@ -547,7 +547,8 @@ static unsigned int blk_round_down_sectors(unsigned int sectors, unsigned int lbint blk_stack_limits (struct queue_limits *t,struct queue_limits *b,sector_t start) { -unsigned int top, bottom, alignment, ret =0 ; +unsigned int top, bottom, alignment; +int ret =0 ; t->max_sectors =min_not_zero (t->max_sectors, b->max_sectors); t->max_hw_sectors =min_not_zero (t->max_hw_sectors, b->max_hw_sectors);
crypto/rng.c +8 -0
@@ -174,6 +174,11 @@ int crypto_del_default_rng(void)EXPORT_SYMBOL_GPL (crypto_del_default_rng);#endif +static void rng_default_set_ent (struct crypto_rng *tfm,const u8 *data, +unsigned int len) +{ +} +int crypto_register_rng (struct rng_alg *alg) {struct crypto_alg *base = &alg->base;
@@ -185,6 +190,9 @@ int crypto_register_rng(struct rng_alg *alg) base->cra_flags &= ~CRYPTO_ALG_TYPE_MASK ; base->cra_flags |=CRYPTO_ALG_TYPE_RNG ; +if (!alg->set_ent) + alg->set_ent = rng_default_set_ent; +return crypto_register_alg (base); }EXPORT_SYMBOL_GPL (crypto_register_rng);
drivers/acpi/nfit/core.c +1 -1
@@ -2643,7 +2643,7 @@ static int acpi_nfit_register_region(struct acpi_nfit_desc *acpi_desc,if (ndr_desc->target_node ==NUMA_NO_NODE ) { ndr_desc->target_node =phys_to_target_node (spa->address);dev_info (acpi_desc->dev,"changing target node from %d to %d for nfit region [%pa-%pa]" , -NUMA_NO_NODE , ndr_desc->numa_node, &res.start, &res.end); +NUMA_NO_NODE , ndr_desc->target_node, &res.start, &res.end); }/*
drivers/acpi/processor_idle.c +3 -0
@@ -1411,6 +1411,9 @@ int acpi_processor_power_init(struct acpi_processor *pr)if (retval) {if (acpi_processor_registered ==0 )cpuidle_unregister_driver (&acpi_idle_driver); + +per_cpu (acpi_cpuidle_device, pr->id) =NULL ; +kfree (dev);return retval; } acpi_processor_registered++;
drivers/base/node.c +4 -0
@@ -869,6 +869,10 @@ int __register_one_node(int nid) node_devices[nid] = node; error =register_node (node_devices[nid], nid); +if (error) { + node_devices[nid] =NULL ; +return error; + }/* link cpu under this node */ for_each_present_cpu (cpu) {
drivers/base/power/main.c +13 -1
@@ -600,8 +600,20 @@ static void __device_resume_noirq(struct device *dev, pm_message_t state, bool aif (dev->power.syscore || dev->power.direct_complete) goto Out; -if (!dev->power.is_noirq_suspended) +if (!dev->power.is_noirq_suspended) { +/* +* This means that system suspend has been aborted in the noirq +* phase before invoking the noirq suspend callback for the +* device, so if device_suspend_late() has left it in suspend, +* device_resume_early() should leave it in suspend either in +* case the early resume of it depends on the noirq resume that +* has not run. +*/ +if (dev_pm_skip_suspend (dev)) + dev->power.must_resume = false; + goto Out; + }if (!dpm_wait_for_superior (dev, async)) goto Out;
drivers/base/regmap/regmap.c +1 -1
@@ -880,7 +880,7 @@ struct regmap *__regmap_init(struct device *dev, map->read_flag_mask = bus->read_flag_mask; } -if (config && config->read && config->write) { +if (config->read && config->write) { map->reg_read = _regmap_bus_read;if (config->reg_update_bits) map->reg_update_bits = config->reg_update_bits;
drivers/block/nbd.c +8 -0
@@ -1107,6 +1107,14 @@ static struct socket *nbd_get_socket(struct nbd_device *nbd, unsigned long fd,if (!sock)return NULL ; +if (!sk_is_tcp (sock->sk) && + !sk_is_stream_unix (sock->sk)) { +dev_err (disk_to_dev (nbd->disk),"Unsupported socket: should be TCP or UNIX.\n" ); + *err = -EINVAL ; +sockfd_put (sock); +return NULL ; + } +if (sock->ops->shutdown == sock_no_shutdown) {dev_err (disk_to_dev (nbd->disk),"Unsupported socket: shutdown callout must be supported.\n" ); *err = -EINVAL ;
drivers/block/null_blk/main.c +1 -1
@@ -211,7 +211,7 @@ MODULE_PARM_DESC(discard, "Support discard operations (requires memory-backed nustatic unsigned long g_cache_size;module_param_named (cache_size, g_cache_size, ulong,0444 ); -MODULE_PARM_DESC (mbps,"Cache size in MiB for memory-backed device. Default: 0 (none)" ); +MODULE_PARM_DESC (cache_size,"Cache size in MiB for memory-backed device. Default: 0 (none)" );static unsigned int g_mbps;module_param_named (mbps, g_mbps, uint,0444 );
drivers/bus/fsl-mc/fsl-mc-bus.c +3 -0
@@ -1172,6 +1172,9 @@ static int fsl_mc_bus_probe(struct platform_device *pdev)* Get physical address of MC portal for the root DPRC: */ plat_res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); +if (!plat_res) +return -EINVAL ; + mc_portal_phys_addr = plat_res->start; mc_portal_size =resource_size (plat_res); mc_portal_base_phys_addr = mc_portal_phys_addr & ~0x3ffffff ;
drivers/char/hw_random/Kconfig +1 -0
@@ -286,6 +286,7 @@ config HW_RANDOM_INGENIC_TRNG config HW_RANDOM_NOMADIK tristate "ST-Ericsson Nomadik Random Number Generator support" depends on ARCH_NOMADIK || COMPILE_TEST + depends on ARM_AMBA default HW_RANDOM help This driver provides kernel-side support for the Random Number
drivers/char/hw_random/ks-sa-rng.c +4 -0
@@ -240,6 +240,10 @@ static int ks_sa_rng_probe(struct platform_device *pdev)return -EINVAL ; } + ks_sa_rng->clk =devm_clk_get_enabled (dev,NULL ); +if (IS_ERR (ks_sa_rng->clk)) +return dev_err_probe (dev,PTR_ERR (ks_sa_rng->clk),"Failed to get clock\n" ); +pm_runtime_enable (dev); ret =pm_runtime_resume_and_get (dev);if (ret <0 ) {
drivers/cpufreq/scmi-cpufreq.c +10 -0
@@ -15,6 +15,7 @@#include <linux/energy_model.h> #include <linux/export.h> #include <linux/module.h> +#include <linux/of.h> #include <linux/pm_opp.h> #include <linux/slab.h> #include <linux/scmi_protocol.h>
@@ -330,6 +331,15 @@ static bool scmi_dev_used_by_cpus(struct device *scmi_dev)return true; } +/* +* Older Broadcom STB chips had a "clocks" property for CPU node(s) +* that did not match the SCMI performance protocol node, if we got +* there, it means we had such an older Device Tree, therefore return +* true to preserve backwards compatibility. +*/ +if (of_machine_is_compatible ("brcm,brcmstb" )) +return true; +return false; }
drivers/cpuidle/cpuidle-qcom-spm.c +5 -2
@@ -97,20 +97,23 @@ static int spm_cpuidle_register(struct device *cpuidle_dev, int cpu)return -ENODEV ; saw_node =of_parse_phandle (cpu_node,"qcom,saw" ,0 ); +of_node_put (cpu_node);if (!saw_node)return -ENODEV ; pdev =of_find_device_by_node (saw_node);of_node_put (saw_node); -of_node_put (cpu_node);if (!pdev)return -ENODEV ; data =devm_kzalloc (cpuidle_dev,sizeof (*data),GFP_KERNEL ); -if (!data) +if (!data) { +put_device (&pdev->dev);return -ENOMEM ; + } data->spm =dev_get_drvdata (&pdev->dev); +put_device (&pdev->dev);if (!data->spm)return -EINVAL ;
drivers/crypto/hisilicon/debugfs.c +1 -0
@@ -815,6 +815,7 @@ static int qm_diff_regs_init(struct hisi_qm *qm,dfx_regs_uninit (qm, qm->debug.qm_diff_regs,ARRAY_SIZE (qm_diff_regs)); ret =PTR_ERR (qm->debug.acc_diff_regs); qm->debug.acc_diff_regs =NULL ; + qm->debug.qm_diff_regs =NULL ;return ret; }
drivers/crypto/hisilicon/hpre/hpre_main.c +1 -2
@@ -690,6 +690,7 @@ static int hpre_set_user_domain_and_cache(struct hisi_qm *qm)/* Config data buffer pasid needed by Kunpeng 920 */ hpre_config_pasid (qm); +hpre_open_sva_prefetch (qm);hpre_enable_clock_gate (qm);
@@ -1367,8 +1368,6 @@ static int hpre_pf_probe_init(struct hpre *hpre)if (ret)return ret; -hpre_open_sva_prefetch (qm); -hisi_qm_dev_err_init (qm); ret =hpre_show_last_regs_init (qm);if (ret)
drivers/crypto/hisilicon/qm.c +0 -3
@@ -4268,9 +4268,6 @@ static void qm_restart_prepare(struct hisi_qm *qm) {u32 value; -if (qm->err_ini->open_sva_prefetch) - qm->err_ini->open_sva_prefetch (qm); -if (qm->ver >=QM_HW_V3 )return ;
drivers/crypto/hisilicon/sec2/sec_main.c +40 -40
98 lines not on this page · raw message
drivers/crypto/hisilicon/zip/zip_main.c +3 -14
@@ -470,10 +470,9 @@ bool hisi_zip_alg_support(struct hisi_qm *qm, u32 alg)return false; } -static int hisi_zip_set_high_perf (struct hisi_qm *qm) +static void hisi_zip_set_high_perf (struct hisi_qm *qm) {u32 val; -int ret; val =readl_relaxed (qm->io_base +HZIP_HIGH_PERF_OFFSET );if (perf_mode ==HZIP_HIGH_COMP_PERF )
@@ -483,13 +482,6 @@ static int hisi_zip_set_high_perf(struct hisi_qm *qm)/* Set perf mode */ writel (val, qm->io_base +HZIP_HIGH_PERF_OFFSET ); - ret =readl_relaxed_poll_timeout (qm->io_base +HZIP_HIGH_PERF_OFFSET , - val, val == perf_mode,HZIP_DELAY_1_US , -HZIP_POLL_TIMEOUT_US ); -if (ret) -pci_err (qm->pdev,"failed to set perf mode\n" ); - -return ret; }static void hisi_zip_open_sva_prefetch (struct hisi_qm *qm)
@@ -586,6 +578,7 @@ static int hisi_zip_set_user_domain_and_cache(struct hisi_qm *qm)writel (AXUSER_BASE , base +HZIP_DATA_WUSER_32_63 );writel (AXUSER_BASE , base +HZIP_SGL_RUSER_32_63 ); } +hisi_zip_open_sva_prefetch (qm);/* let's open all compression/decompression cores */ dcomp_bm = qm->cap_tables.dev_cap_table[ZIP_DECOMP_ENABLE_BITMAP_IDX ].cap_val;
@@ -597,6 +590,7 @@ static int hisi_zip_set_user_domain_and_cache(struct hisi_qm *qm)CQC_CACHE_WB_ENABLE |FIELD_PREP (SQC_CACHE_WB_THRD ,1 ) | FIELD_PREP(CQC_CACHE_WB_THRD, 1), base + QM_CACHE_CTL); +hisi_zip_set_high_perf (qm);hisi_zip_enable_clock_gate (qm);return 0 ;
@@ -1181,11 +1175,6 @@ static int hisi_zip_pf_probe_init(struct hisi_zip *hisi_zip)if (ret)return ret; - ret =hisi_zip_set_high_perf (qm); -if (ret) -return ret; - -hisi_zip_open_sva_prefetch (qm);hisi_qm_dev_err_init (qm);hisi_zip_debug_regs_clear (qm);
drivers/devfreq/mtk-cci-devfreq.c +2 -1
@@ -385,7 +385,8 @@ static int mtk_ccifreq_probe(struct platform_device *pdev) out_free_resources:if (regulator_is_enabled (drv->proc_reg))regulator_disable (drv->proc_reg); -if (drv->sram_reg &®ulator_is_enabled (drv->sram_reg)) +if (!IS_ERR_OR_NULL (drv->sram_reg) && +regulator_is_enabled (drv->sram_reg))regulator_disable (drv->sram_reg);return ret;
drivers/firmware/meson/Kconfig +1 -1
@@ -5,7 +5,7 @@ config MESON_SM tristate "Amlogic Secure Monitor driver" depends on ARCH_MESON || COMPILE_TEST - default y + default ARCH_MESON depends on ARM64_4K_PAGES help Say y here to enable the Amlogic secure monitor driver
drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c +25 -4
@@ -625,7 +625,22 @@ static void uvd_v3_1_enable_mgcg(struct amdgpu_device *adev,* * @handle: handle used to pass amdgpu_device pointer * -* Initialize the hardware, boot up the VCPU and do some testing +* Initialize the hardware, boot up the VCPU and do some testing. +* +* On SI, the UVD is meant to be used in a specific power state, +* or alternatively the driver can manually enable its clock. +* In amdgpu we use the dedicated UVD power state when DPM is enabled. +* Calling amdgpu_dpm_enable_uvd makes DPM select the UVD power state +* for the SMU and afterwards enables the UVD clock. +* This is automatically done by amdgpu_uvd_ring_begin_use when work +* is submitted to the UVD ring. Here, we have to call it manually +* in order to power up UVD before firmware validation. +* +* Note that we must not disable the UVD clock here, as that would +* cause the ring test to fail. However, UVD is powered off +* automatically after the ring test: amdgpu_uvd_ring_end_use calls +* the UVD idle work handler which will disable the UVD clock when +* all fences are signalled. */ static int uvd_v3_1_hw_init (void *handle) {
@@ -635,6 +650,15 @@ static int uvd_v3_1_hw_init(void *handle)int r;uvd_v3_1_mc_resume (adev); +uvd_v3_1_enable_mgcg (adev, true); + +/* Make sure UVD is powered during FW validation. +* It's going to be automatically powered off after the ring test. +*/ +if (adev->pm.dpm_enabled) +amdgpu_dpm_enable_uvd (adev, true); +else +amdgpu_asic_set_uvd_clocks (adev,53300 ,40000 ); r =uvd_v3_1_fw_validate (adev);if (r) {
@@ -642,9 +666,6 @@ static int uvd_v3_1_hw_init(void *handle)return r; } -uvd_v3_1_enable_mgcg (adev, true); -amdgpu_asic_set_uvd_clocks (adev,53300 ,40000 ); -uvd_v3_1_start (adev); r =amdgpu_ring_test_helper (ring);
drivers/gpu/drm/amd/amdkfd/kfd_svm.c +1 -1
@@ -4002,7 +4002,7 @@ svm_ioctl(struct kfd_process *p, enum kfd_ioctl_svm_op op, uint64_t start, r =svm_range_get_attr (p, mm, start, size, nattrs, attrs);break ;default : - r =EINVAL ; + r = -EINVAL ;break ; }
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c +0 -1
@@ -139,7 +139,6 @@ void dml32_rq_dlg_get_rq_reg(display_rq_regs_st *rq_regs,if (dual_plane) {unsigned int p1_pte_row_height_linear =get_dpte_row_height_linear_c (mode_lib, e2e_pipe_param, num_pipes, pipe_idx); - ;if (src->sw_mode == dm_sw_linear)ASSERT (p1_pte_row_height_linear >=8 );
drivers/gpu/drm/amd/pm/amdgpu_dpm_internal.c +7 -0
@@ -66,6 +66,13 @@ u32 amdgpu_dpm_get_vblank_time(struct amdgpu_device *adev) (amdgpu_crtc->v_border * 2)); vblank_time_us = vblank_in_pixels *1000 / amdgpu_crtc->hw_mode.clock; + +/* we have issues with mclk switching with +* refresh rates over 120 hz on the non-DC code. +*/ +if (drm_mode_vrefresh (&amdgpu_crtc->hw_mode) >120 ) + vblank_time_us =0 ; +break ; } }
drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c +65 -27
139 lines not on this page · raw message
drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c +1 -1
@@ -700,7 +700,7 @@ static const char *smu_get_feature_name(struct smu_context *smu,size_t smu_cmn_get_pp_feature_mask (struct smu_context *smu,char *buf) { -int8_t sort_feature[max (SMU_FEATURE_COUNT ,SMU_FEATURE_MAX )]; +int8_t sort_feature[MAX (SMU_FEATURE_COUNT ,SMU_FEATURE_MAX )];uint64_t feature_mask;int i, feature_index;uint32_t count =0 ;
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c +1 -1
@@ -452,7 +452,7 @@ static void _dpu_encoder_phys_wb_handle_wbdone_timeout(static int dpu_encoder_phys_wb_wait_for_commit_done (struct dpu_encoder_phys *phys_enc) { -unsigned long ret; +int ret;struct dpu_encoder_wait_info wait_info;struct dpu_encoder_phys_wb *wb_enc =to_dpu_encoder_phys_wb (phys_enc);
drivers/gpu/drm/panel/panel-novatek-nt35560.c +1 -1
@@ -162,7 +162,7 @@ static int nt35560_set_brightness(struct backlight_device *bl) par =0x00 ; ret =mipi_dsi_dcs_write (dsi,MIPI_DCS_WRITE_CONTROL_DISPLAY , &par,1 ); -if (ret) { +if (ret <0 ) {dev_err (nt->dev,"failed to disable display backlight (%d)\n" , ret);return ret; }
drivers/gpu/drm/radeon/r600_cs.c +2 -2
@@ -1408,7 +1408,7 @@ static void r600_texture_size(unsigned nfaces, unsigned blevel, unsigned llevel, unsigned block_align, unsigned height_align, unsigned base_align, unsigned *l0_size, unsigned *mipmap_size) { - unsigned offset, i, level; + unsigned offset, i;unsigned width, height, depth, size;unsigned blocksize;unsigned nbx, nby;
@@ -1420,7 +1420,7 @@ static void r600_texture_size(unsigned nfaces, unsigned blevel, unsigned llevel, w0 =r600_mip_minify (w0,0 ); h0 =r600_mip_minify (h0,0 ); d0 =r600_mip_minify (d0,0 ); -for (i =0 , offset =0 , level = blevel; i < nlevels; i++, level++) { +for (i =0 , offset =0 ; i < nlevels; i++) { width =r600_mip_minify (w0, i); nbx =r600_fmt_get_nblocksx (format, width);
drivers/hid/hid-mcp2221.c +4 -0
@@ -791,6 +791,10 @@ static int mcp2221_raw_event(struct hid_device *hdev, }if (data[2 ] ==MCP2221_I2C_READ_COMPL || data[2 ] ==MCP2221_I2C_READ_PARTIAL ) { +if (!mcp->rxbuf || mcp->rxbuf_idx <0 || data[3 ] >60 ) { + mcp->status = -EINVAL ; +break ; + } buf = mcp->rxbuf;memcpy (&buf[mcp->rxbuf_idx], &data[4 ], data[3 ]); mcp->rxbuf_idx = mcp->rxbuf_idx + data[3 ];
drivers/hwmon/mlxreg-fan.c +16 -8
@@ -113,8 +113,8 @@ struct mlxreg_fan {int divider; }; -static int mlxreg_fan_set_cur_state (struct thermal_cooling_device *cdev, -unsigned long state); +static int _mlxreg_fan_set_cur_state (struct thermal_cooling_device *cdev, +unsigned long state,bool thermal); static int mlxreg_fan_read(struct device *dev, enum hwmon_sensor_types type, u32 attr,
@@ -224,8 +224,9 @@ mlxreg_fan_write(struct device *dev, enum hwmon_sensor_types type, u32 attr,* last thermal state. */ if (pwm->last_hwmon_state >= pwm->last_thermal_state) -return mlxreg_fan_set_cur_state (pwm->cdev, - pwm->last_hwmon_state); +return _mlxreg_fan_set_cur_state (pwm->cdev, + pwm->last_hwmon_state, + false);return 0 ; }return regmap_write (fan->regmap, pwm->reg, val);
@@ -347,9 +348,8 @@ static int mlxreg_fan_get_cur_state(struct thermal_cooling_device *cdev,return 0 ; } -static int mlxreg_fan_set_cur_state (struct thermal_cooling_device *cdev, -unsigned long state) - +static int _mlxreg_fan_set_cur_state (struct thermal_cooling_device *cdev, +unsigned long state,bool thermal) {struct mlxreg_fan_pwm *pwm = cdev->devdata;struct mlxreg_fan *fan = pwm->fan;
@@ -359,7 +359,8 @@ static int mlxreg_fan_set_cur_state(struct thermal_cooling_device *cdev,return -EINVAL ;/* Save thermal state. */ - pwm->last_thermal_state = state; +if (thermal) + pwm->last_thermal_state = state; state = max_t(unsigned long, state, pwm->last_hwmon_state); err = regmap_write(fan->regmap, pwm->reg,
@@ -371,6 +372,13 @@ static int mlxreg_fan_set_cur_state(struct thermal_cooling_device *cdev,return 0 ; } +static int mlxreg_fan_set_cur_state (struct thermal_cooling_device *cdev, +unsigned long state) + +{ +return _mlxreg_fan_set_cur_state (cdev, state, true); +} +static const struct thermal_cooling_device_ops mlxreg_fan_cooling_ops = { .get_max_state = mlxreg_fan_get_max_state, .get_cur_state = mlxreg_fan_get_cur_state,
drivers/hwtracing/coresight/coresight-etm4x-core.c +8 -3
@@ -451,7 +451,8 @@ static int etm4_enable_hw(struct etmv4_drvdata *drvdata)etm4x_relaxed_write32 (csa, config->seq_rst,TRCSEQRSTEVR );etm4x_relaxed_write32 (csa, config->seq_state,TRCSEQSTR ); } -etm4x_relaxed_write32 (csa, config->ext_inp,TRCEXTINSELR ); +if (drvdata->numextinsel) +etm4x_relaxed_write32 (csa, config->ext_inp,TRCEXTINSELR );for (i =0 ; i < drvdata->nr_cntr; i++) {etm4x_relaxed_write32 (csa, config->cntrldvr[i],TRCCNTRLDVRn (i));etm4x_relaxed_write32 (csa, config->cntr_ctrl[i],TRCCNTCTLRn (i));
@@ -1239,6 +1240,7 @@ static void etm4_init_arch_data(void *info) etmidr5 =etm4x_relaxed_read32 (csa,TRCIDR5 );/* NUMEXTIN, bits[8:0] number of external inputs implemented */ drvdata->nr_ext_inp =FIELD_GET (TRCIDR5_NUMEXTIN_MASK , etmidr5); + drvdata->numextinsel =FIELD_GET (TRCIDR5_NUMEXTINSEL_MASK , etmidr5);/* TRACEIDSIZE, bits[21:16] indicates the trace ID width */ drvdata->trcid_size =FIELD_GET (TRCIDR5_TRACEIDSIZE_MASK , etmidr5);/* ATBTRIG, bit[22] implementation can support ATB triggers? */
@@ -1671,7 +1673,9 @@ static int __etm4_cpu_save(struct etmv4_drvdata *drvdata) state->trcseqrstevr =etm4x_read32 (csa,TRCSEQRSTEVR ); state->trcseqstr =etm4x_read32 (csa,TRCSEQSTR ); } - state->trcextinselr =etm4x_read32 (csa,TRCEXTINSELR ); + +if (drvdata->numextinsel) + state->trcextinselr =etm4x_read32 (csa,TRCEXTINSELR );for (i =0 ; i < drvdata->nr_cntr; i++) { state->trccntrldvr[i] =etm4x_read32 (csa,TRCCNTRLDVRn (i));
@@ -1803,7 +1807,8 @@ static void __etm4_cpu_restore(struct etmv4_drvdata *drvdata)etm4x_relaxed_write32 (csa, state->trcseqrstevr,TRCSEQRSTEVR );etm4x_relaxed_write32 (csa, state->trcseqstr,TRCSEQSTR ); } -etm4x_relaxed_write32 (csa, state->trcextinselr,TRCEXTINSELR ); +if (drvdata->numextinsel) +etm4x_relaxed_write32 (csa, state->trcextinselr,TRCEXTINSELR );for (i =0 ; i < drvdata->nr_cntr; i++) {etm4x_relaxed_write32 (csa, state->trccntrldvr[i],TRCCNTRLDVRn (i));
drivers/hwtracing/coresight/coresight-etm4x.h +2 -0
@@ -162,6 +162,7 @@#define TRCIDR4_NUMVMIDC_MASK GENMASK(31, 28)#define TRCIDR5_NUMEXTIN_MASK GENMASK(8, 0) +#define TRCIDR5_NUMEXTINSEL_MASK GENMASK(11, 9)#define TRCIDR5_TRACEIDSIZE_MASK GENMASK(21, 16)#define TRCIDR5_ATBTRIG BIT(22)#define TRCIDR5_LPOVERRIDE BIT(23)
@@ -995,6 +996,7 @@ struct etmv4_drvdata {u8 nr_cntr;u8 nr_ext_inp;u8 numcidc; +u8 numextinsel;u8 numvmidc;u8 nrseqstate;u8 nr_event;
drivers/hwtracing/coresight/coresight-trbe.c +5 -4
@@ -21,7 +21,8 @@#include "coresight-self-hosted-trace.h" #include "coresight-trbe.h" -#define PERF_IDX2OFF (idx, buf) ((idx) % ((buf)->nr_pages << PAGE_SHIFT)) +#define PERF_IDX2OFF (idx, buf) \ + ((idx) % ((unsigned long)(buf)->nr_pages << PAGE_SHIFT))/* * A padding packet that will help the user space tools
@@ -742,12 +743,12 @@ static void *arm_trbe_alloc_buffer(struct coresight_device *csdev, buf =kzalloc_node (sizeof (*buf),GFP_KERNEL ,trbe_alloc_node (event));if (!buf) -return ERR_PTR (-ENOMEM ); +return NULL ; pglist =kcalloc (nr_pages,sizeof (*pglist),GFP_KERNEL );if (!pglist) {kfree (buf); -return ERR_PTR (-ENOMEM ); +return NULL ; }for (i =0 ; i < nr_pages; i++)
@@ -757,7 +758,7 @@ static void *arm_trbe_alloc_buffer(struct coresight_device *csdev,if (!buf->trbe_base) {kfree (pglist);kfree (buf); -return ERR_PTR (-ENOMEM ); +return NULL ; } buf->trbe_limit = buf->trbe_base + nr_pages *PAGE_SIZE ; buf->trbe_write = buf->trbe_base;
drivers/i2c/busses/i2c-designware-platdrv.c +1 -0
@@ -380,6 +380,7 @@ static int dw_i2c_plat_probe(struct platform_device *pdev) exit_probe:dw_i2c_plat_pm_cleanup (dev); +i2c_dw_prepare_clk (dev, false); exit_reset:reset_control_assert (dev->rst);return ret;
drivers/i2c/busses/i2c-mt65xx.c +10 -7
@@ -1218,6 +1218,7 @@ static int mtk_i2c_transfer(struct i2c_adapter *adap, {int ret;int left_num = num; +bool write_then_read_en = false;struct mtk_i2c *i2c =i2c_get_adapdata (adap); ret =clk_bulk_enable (I2C_MT65XX_CLK_MAX , i2c->clocks);
@@ -1231,6 +1232,7 @@ static int mtk_i2c_transfer(struct i2c_adapter *adap,if (!(msgs[0 ].flags &I2C_M_RD ) && (msgs[1 ].flags &I2C_M_RD ) && msgs[0 ].addr == msgs[1 ].addr) { i2c->auto_restart =0 ; + write_then_read_en = true; } }
@@ -1255,12 +1257,10 @@ static int mtk_i2c_transfer(struct i2c_adapter *adap,else i2c->op =I2C_MASTER_WR ; -if (!i2c->auto_restart) { -if (num >1 ) { -/* combined two messages into one transaction */ - i2c->op =I2C_MASTER_WRRD ; - left_num--; - } +if (write_then_read_en) { +/* combined two messages into one transaction */ + i2c->op =I2C_MASTER_WRRD ; + left_num--; }/* always use DMA mode. */
@@ -1268,7 +1268,10 @@ static int mtk_i2c_transfer(struct i2c_adapter *adap,if (ret <0 ) goto err_exit; - msgs++; +if (i2c->op ==I2C_MASTER_WRRD ) + msgs +=2 ; +else + msgs++; }/* the return value is number of executed messages */ ret = num;
drivers/i3c/master/svc-i3c-master.c +26 -5
@@ -361,6 +361,7 @@ static int svc_i3c_master_handle_ibi(struct svc_i3c_master *master, SVC_I3C_MSTATUS_COMPLETE(val), 0, 1000);if (ret) {dev_err (master->dev,"Timeout when polling for COMPLETE\n" ); +i3c_generic_ibi_recycle_slot (data->ibi_pool, slot);return ret; }
@@ -422,9 +423,24 @@ static void svc_i3c_master_ibi_work(struct work_struct *work)*/ writel (SVC_I3C_MINT_IBIWON , master->regs +SVC_I3C_MSTATUS ); -/* Acknowledge the incoming interrupt with the AUTOIBI mechanism */ -writel (SVC_I3C_MCTRL_REQUEST_AUTO_IBI | -SVC_I3C_MCTRL_IBIRESP_AUTO , +/* +* Write REQUEST_START_ADDR request to emit broadcast address for arbitration, +* instend of using AUTO_IBI. +* +* Using AutoIBI request may cause controller to remain in AutoIBI state when +* there is a glitch on SDA line (high->low->high). +* 1. SDA high->low, raising an interrupt to execute IBI isr. +* 2. SDA low->high. +* 3. IBI isr writes an AutoIBI request. +* 4. The controller will not start AutoIBI process because SDA is not low. +* 5. IBIWON polling times out. +* 6. Controller reamins in AutoIBI state and doesn't accept EmitStop request. +*/ +writel (SVC_I3C_MCTRL_REQUEST_START_ADDR | +SVC_I3C_MCTRL_TYPE_I3C | +SVC_I3C_MCTRL_IBIRESP_MANUAL | +SVC_I3C_MCTRL_DIR (SVC_I3C_MCTRL_DIR_WRITE ) | +SVC_I3C_MCTRL_ADDR (I3C_BROADCAST_ADDR ), master->regs +SVC_I3C_MCTRL );/* Wait for IBIWON, should take approximately 100us */
@@ -444,10 +460,15 @@ static void svc_i3c_master_ibi_work(struct work_struct *work)switch (ibitype) {case SVC_I3C_MSTATUS_IBITYPE_IBI : dev =svc_i3c_master_dev_from_addr (master, ibiaddr); -if (!dev || !is_events_enabled (master,SVC_I3C_EVENT_IBI )) +if (!dev || !is_events_enabled (master,SVC_I3C_EVENT_IBI )) {svc_i3c_master_nack_ibi (master); -else + }else { +if (dev->info.bcr &I3C_BCR_IBI_PAYLOAD ) +svc_i3c_master_ack_ibi (master, true); +else +svc_i3c_master_ack_ibi (master, false);svc_i3c_master_handle_ibi (master, dev); + }break ;case SVC_I3C_MSTATUS_IBITYPE_HOT_JOIN :if (is_events_enabled (master,SVC_I3C_EVENT_HOTJOIN ))
drivers/iio/inkern.c +1 -1
@@ -669,7 +669,7 @@ static int iio_convert_raw_to_processed_unlocked(struct iio_channel *chan,* If no channel scaling is available apply consumer scale to * raw value and return. */ - *processed = raw * scale; + *processed = raw64 * scale;return 0 ; }
drivers/infiniband/core/addr.c +3 -7
@@ -460,14 +460,10 @@ static int addr_resolve_neigh(const struct dst_entry *dst, {int ret =0 ; -if (ndev_flags &IFF_LOOPBACK ) { +if (ndev_flags &IFF_LOOPBACK )memcpy (addr->dst_dev_addr, addr->src_dev_addr,MAX_ADDR_LEN ); - }else { -if (!(ndev_flags &IFF_NOARP )) { -/* If the device doesn't do ARP internally */ - ret =fetch_ha (dst, addr, dst_in, seq); - } - } +else + ret =fetch_ha (dst, addr, dst_in, seq);return ret; }
drivers/infiniband/core/cm.c +2 -2
@@ -1032,8 +1032,8 @@ static noinline void cm_destroy_id_wait_timeout(struct ib_cm_id *cm_id,struct cm_id_private *cm_id_priv; cm_id_priv = container_of(cm_id, struct cm_id_private, id); -pr_err ("%s: cm_id=%p timed out. state %d -> %d, refcnt=%d\n" , __func__, - cm_id, old_state, cm_id->state,refcount_read (&cm_id_priv->refcount)); +pr_err_ratelimited ("%s: cm_id=%p timed out. state %d -> %d, refcnt=%d\n" , __func__, + cm_id, old_state, cm_id->state,refcount_read (&cm_id_priv->refcount)); }static void cm_destroy_id (struct ib_cm_id *cm_id,int err)
drivers/infiniband/core/sa_query.c +4 -2
@@ -1021,6 +1021,8 @@ int ib_nl_handle_set_timeout(struct sk_buff *skb,if (timeout >IB_SA_LOCAL_SVC_TIMEOUT_MAX ) timeout =IB_SA_LOCAL_SVC_TIMEOUT_MAX ; +spin_lock_irqsave (&ib_nl_request_lock, flags); + delta = timeout - sa_local_svc_timeout_ms;if (delta <0 ) abs_delta = -delta;
@@ -1028,7 +1030,6 @@ int ib_nl_handle_set_timeout(struct sk_buff *skb, abs_delta = delta;if (delta !=0 ) { -spin_lock_irqsave (&ib_nl_request_lock, flags); sa_local_svc_timeout_ms = timeout;list_for_each_entry (query, &ib_nl_request_list, list) {if (delta <0 && abs_delta > query->timeout)
@@ -1046,9 +1047,10 @@ int ib_nl_handle_set_timeout(struct sk_buff *skb,if (delay)mod_delayed_work (ib_nl_wq, &ib_nl_timed_work, (unsigned long )delay); -spin_unlock_irqrestore (&ib_nl_request_lock, flags); } +spin_unlock_irqrestore (&ib_nl_request_lock, flags); + settimeout_out:return 0 ; }
drivers/infiniband/sw/siw/siw_verbs.c +14 -11
@@ -761,7 +761,7 @@ int siw_post_send(struct ib_qp *base_qp, const struct ib_send_wr *wr,struct siw_wqe *wqe =tx_wqe (qp);unsigned long flags; -int rv =0 ; +int rv =0 , imm_err =0 ;if (wr && !rdma_is_kernel_res (&qp->base_qp.res)) {siw_dbg_qp (qp,"wr must be empty for user mapped sq\n" );
@@ -947,9 +947,17 @@ int siw_post_send(struct ib_qp *base_qp, const struct ib_send_wr *wr,* Send directly if SQ processing is not in progress. * Eventual immediate errors (rv < 0) do not affect the involved * RI resources (Verbs, 8.3.1) and thus do not prevent from SQ -* processing, if new work is already pending. But rv must be passed -* to caller. +* processing, if new work is already pending. But rv and pointer +* to failed work request must be passed to caller. */ +if (unlikely (rv <0 )) { +/* +* Immediate error +*/ +siw_dbg_qp (qp,"Immediate error %d\n" , rv); + imm_err = rv; + *bad_wr = wr; + }if (wqe->wr_status !=SIW_WR_IDLE ) {spin_unlock_irqrestore (&qp->sq_lock, flags); goto skip_direct_sending;
@@ -974,15 +982,10 @@ int siw_post_send(struct ib_qp *base_qp, const struct ib_send_wr *wr,up_read (&qp->state_lock); -if (rv >=0 ) -return 0 ; -/* -* Immediate error -*/ -siw_dbg_qp (qp,"error %d\n" , rv); +if (unlikely (imm_err)) +return imm_err; - *bad_wr = wr; -return rv; +return (rv >=0 ) ?0 : rv; }/*
drivers/input/misc/uinput.c +1 -0
@@ -741,6 +741,7 @@ static int uinput_ff_upload_to_user(char __user *buffer,if (in_compat_syscall ()) {struct uinput_ff_upload_compat ff_up_compat; +memset (&ff_up_compat,0 ,sizeof (ff_up_compat)); ff_up_compat.request_id = ff_up->request_id; ff_up_compat.retval = ff_up->retval;/*
drivers/input/touchscreen/atmel_mxt_ts.c +1 -1
@@ -3239,7 +3239,7 @@ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)if (data->reset_gpio) {/* Wait a while and then de-assert the RESET GPIO line */ msleep (MXT_RESET_GPIO_TIME ); -gpiod_set_value (data->reset_gpio,0 ); +gpiod_set_value_cansleep (data->reset_gpio,0 );msleep (MXT_RESET_INVALID_CHG ); }
drivers/input/touchscreen/cyttsp4_core.c +1 -1
@@ -871,7 +871,7 @@ static void cyttsp4_get_mt_touches(struct cyttsp4_mt_data *md, int num_cur_tch)struct cyttsp4_touch tch;int sig;int i, j, t =0 ; -int ids[max (CY_TMA1036_MAX_TCH ,CY_TMA4XX_MAX_TCH )]; +int ids[MAX (CY_TMA1036_MAX_TCH ,CY_TMA4XX_MAX_TCH )];memset (ids,0 , si->si_ofs.tch_abs[CY_TCH_T ].max *sizeof (int ));for (i =0 ; i < num_cur_tch; i++) {
drivers/irqchip/irq-sun6i-r.c +1 -1
@@ -270,7 +270,7 @@ static const struct irq_domain_ops sun6i_r_intc_domain_ops = {static int sun6i_r_intc_suspend (void ) { -u32 buf[BITS_TO_U32 (max (SUN6I_NR_TOP_LEVEL_IRQS ,SUN6I_NR_MUX_BITS ))]; +u32 buf[BITS_TO_U32 (MAX (SUN6I_NR_TOP_LEVEL_IRQS ,SUN6I_NR_MUX_BITS ))];int i;/* Wake IRQs are enabled during system sleep and shutdown. */
drivers/md/dm-core.h +1 -0
@@ -160,6 +160,7 @@ struct mapped_device {#define DMF_SUSPENDED_INTERNALLY 7#define DMF_POST_SUSPENDING 8#define DMF_EMULATE_ZONE_APPEND 9 +#define DMF_QUEUE_STOPPED 10void disable_discard (struct mapped_device *md);void disable_write_zeroes (struct mapped_device *md);
drivers/md/dm-integrity.c +2 -2
@@ -128,7 +128,7 @@ struct journal_sector {commit_id_t commit_id; }; -#define MAX_TAG_SIZE (JOURNAL_SECTOR_DATA - JOURNAL_MAC_PER_SECTOR - offsetof(struct journal_entry, last_bytes[MAX_SECTORS_PER_BLOCK])) +#define MAX_TAG_SIZE 255#define METADATA_PADDING_SECTORS 8
@@ -1794,7 +1794,7 @@ static void integrity_metadata(struct work_struct *w)struct bio *bio =dm_bio_from_per_bio_data (dio,sizeof (struct dm_integrity_io ));char *checksums;unsigned int extra_space =unlikely (digest_size > ic->tag_size) ? digest_size - ic->tag_size :0 ; -char checksums_onstack[max ((size_t )HASH_MAX_DIGESTSIZE ,MAX_TAG_SIZE )]; +char checksums_onstack[MAX (HASH_MAX_DIGESTSIZE ,MAX_TAG_SIZE )];sector_t sector;unsigned int sectors_to_process;
drivers/md/dm.c +8 -5
@@ -2668,7 +2668,7 @@ static int __dm_suspend(struct mapped_device *md, struct dm_table *map, {bool do_lockfs = suspend_flags &DM_SUSPEND_LOCKFS_FLAG ;bool noflush = suspend_flags &DM_SUSPEND_NOFLUSH_FLAG ; -int r; +int r =0 ;lockdep_assert_held (&md->suspend_lock);
@@ -2720,8 +2720,10 @@ static int __dm_suspend(struct mapped_device *md, struct dm_table *map,* Stop md->queue before flushing md->wq in case request-based * dm defers requests to md->wq from md->queue. */ -if (dm_request_based (md)) +if (map &&dm_request_based (md)) {dm_stop_queue (md->queue); +set_bit (DMF_QUEUE_STOPPED , &md->flags); + }flush_workqueue (md->wq);
@@ -2730,7 +2732,8 @@ static int __dm_suspend(struct mapped_device *md, struct dm_table *map,* We call dm_wait_for_completion to wait for all existing requests * to finish. */ - r =dm_wait_for_completion (md, task_state); +if (map) + r =dm_wait_for_completion (md, task_state);if (!r)set_bit (dmf_suspended_flag, &md->flags);
@@ -2743,7 +2746,7 @@ static int __dm_suspend(struct mapped_device *md, struct dm_table *map,if (r <0 ) {dm_queue_flush (md); -if (dm_request_based (md)) +if (test_and_clear_bit (DMF_QUEUE_STOPPED , &md->flags))dm_start_queue (md->queue);unlock_fs (md);
@@ -2826,7 +2829,7 @@ static int __dm_resume(struct mapped_device *md, struct dm_table *map)* so that mapping of targets can work correctly. * Request-based dm is queueing the deferred I/Os in its request_queue. */ -if (dm_request_based (md)) +if (test_and_clear_bit (DMF_QUEUE_STOPPED , &md->flags))dm_start_queue (md->queue);unlock_fs (md);
drivers/media/i2c/rj54n1cb0c.c +6 -3
@@ -1332,10 +1332,13 @@ static int rj54n1_probe(struct i2c_client *client, V4L2_CID_GAIN, 0, 127, 1, 66);v4l2_ctrl_new_std (&rj54n1->hdl, &rj54n1_ctrl_ops,V4L2_CID_AUTO_WHITE_BALANCE ,0 ,1 ,1 ,1 ); - rj54n1->subdev.ctrl_handler = &rj54n1->hdl; -if (rj54n1->hdl.error) -return rj54n1->hdl.error; +if (rj54n1->hdl.error) { + ret = rj54n1->hdl.error; + goto err_free_ctrl; + } + + rj54n1->subdev.ctrl_handler = &rj54n1->hdl; rj54n1->clk_div = clk_div; rj54n1->rect.left =RJ54N1_COLUMN_SKIP ; rj54n1->rect.top =RJ54N1_ROW_SKIP ;
drivers/media/i2c/tc358743.c +2 -2
@@ -2180,10 +2180,10 @@ static int tc358743_probe(struct i2c_client *client) err_work_queues:cec_unregister_adapter (state->cec_adap);if (!state->i2c_client->irq) { -del_timer (&state->timer); +timer_delete_sync (&state->timer);flush_work (&state->work_i2c_poll); } -cancel_delayed_work (&state->delayed_work_enable_hotplug); +cancel_delayed_work_sync (&state->delayed_work_enable_hotplug);mutex_destroy (&state->confctl_mutex); err_hdl:media_entity_cleanup (&sd->entity);
drivers/media/pci/b2c2/flexcop-pci.c +1 -1
@@ -411,7 +411,7 @@ static void flexcop_pci_remove(struct pci_dev *pdev)struct flexcop_pci *fc_pci =pci_get_drvdata (pdev);if (irq_chk_intv >0 ) -cancel_delayed_work (&fc_pci->irq_check_work); +cancel_delayed_work_sync (&fc_pci->irq_check_work);flexcop_pci_dma_exit (fc_pci);flexcop_device_exit (fc_pci->fc_dev);
drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c +11 -9
@@ -239,7 +239,7 @@ static int delta_mjpeg_ipc_open(struct delta_ctx *pctx)return 0 ; } -static int delta_mjpeg_ipc_decode (struct delta_ctx *pctx,struct delta_au *au) +static int delta_mjpeg_ipc_decode (struct delta_ctx *pctx,dma_addr_t pstart,dma_addr_t pend) {struct delta_dev *delta = pctx->dev;struct delta_mjpeg_ctx *ctx =to_ctx (pctx);
@@ -256,8 +256,8 @@ static int delta_mjpeg_ipc_decode(struct delta_ctx *pctx, struct delta_au *au)memset (params,0 ,sizeof (*params)); - params->picture_start_addr_p = (u32)(au->paddr); - params->picture_end_addr_p = (u32)(au->paddr + au->size -1 ); + params->picture_start_addr_p = pstart; + params->picture_end_addr_p = pend;/* * !WARNING!
@@ -374,12 +374,14 @@ static int delta_mjpeg_decode(struct delta_ctx *pctx, struct delta_au *pau)struct delta_dev *delta = pctx->dev;struct delta_mjpeg_ctx *ctx =to_ctx (pctx);int ret; -struct delta_au au = *pau; +void *au_vaddr = pau->vaddr; +dma_addr_t au_dma = pau->paddr; +size_t au_size = pau->size;unsigned int data_offset =0 ;struct mjpeg_header *header = &ctx->header_struct;if (!ctx->header) { - ret =delta_mjpeg_read_header (pctx, au.vaddr, au.size, + ret =delta_mjpeg_read_header (pctx, au_vaddr, au_size, header, &data_offset);if (ret) { pctx->stream_errors++;
@@ -405,17 +407,17 @@ static int delta_mjpeg_decode(struct delta_ctx *pctx, struct delta_au *pau) goto err; } - ret =delta_mjpeg_read_header (pctx, au.vaddr, au.size, + ret =delta_mjpeg_read_header (pctx, au_vaddr, au_size, ctx->header, &data_offset);if (ret) { pctx->stream_errors++; goto err; } - au.paddr += data_offset; - au.vaddr += data_offset; + au_dma += data_offset; + au_vaddr += data_offset; - ret =delta_mjpeg_ipc_decode (pctx, &au); + ret =delta_mjpeg_ipc_decode (pctx, au_dma, au_dma + au_size -1 );if (ret) goto err;
drivers/media/rc/imon.c +20 -7
@@ -536,7 +536,9 @@ static int display_open(struct inode *inode, struct file *file)mutex_lock (&ictx->lock); -if (!ictx->display_supported) { +if (ictx->disconnected) { + retval = -ENODEV ; + }else if (!ictx->display_supported) {pr_err ("display not supported by device\n" ); retval = -ENODEV ; }else if (ictx->display_isopen) {
@@ -598,6 +600,9 @@ static int send_packet(struct imon_context *ictx)int retval =0 ;struct usb_ctrlrequest *control_req =NULL ; +if (ictx->disconnected) +return -ENODEV ; +/* Check if we need to use control or interrupt urb */ if (!ictx->tx_control) { pipe = usb_sndintpipe(ictx->usbdev_intf0,
@@ -949,12 +954,14 @@ static ssize_t vfd_write(struct file *file, const char __user *buf,static const unsigned char vfd_packet6[] = {0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFF ,0xFF }; -if (ictx->disconnected) -return -ENODEV ; -if (mutex_lock_interruptible (&ictx->lock))return -ERESTARTSYS ; +if (ictx->disconnected) { + retval = -ENODEV ; + goto exit; + } +if (!ictx->dev_present_intf0) {pr_err_ratelimited ("no iMON device present\n" ); retval = -ENODEV ;
@@ -1029,11 +1036,13 @@ static ssize_t lcd_write(struct file *file, const char __user *buf,int retval =0 ;struct imon_context *ictx = file->private_data; -if (ictx->disconnected) -return -ENODEV ; -mutex_lock (&ictx->lock); +if (ictx->disconnected) { + retval = -ENODEV ; + goto exit; + } +if (!ictx->display_supported) {pr_err_ratelimited ("no iMON display present\n" ); retval = -ENODEV ;
@@ -2499,7 +2508,11 @@ static void imon_disconnect(struct usb_interface *interface)int ifnum; ictx =usb_get_intfdata (interface); + +mutex_lock (&ictx->lock); ictx->disconnected = true; +mutex_unlock (&ictx->lock); + dev = ictx->dev; ifnum = interface->cur_altsetting->desc.bInterfaceNumber;
drivers/media/tuners/xc5000.c +18 -23
78 lines not on this page · raw message
drivers/mfd/vexpress-sysreg.c +5 -1
@@ -98,6 +98,7 @@ static int vexpress_sysreg_probe(struct platform_device *pdev)struct resource *mem;void __iomem *base;struct gpio_chip *mmc_gpio_chip; +int ret; mem =platform_get_resource (pdev,IORESOURCE_MEM ,0 );if (!mem)
@@ -118,7 +119,10 @@ static int vexpress_sysreg_probe(struct platform_device *pdev)bgpio_init (mmc_gpio_chip, &pdev->dev,0x4 , base +SYS_MCI ,NULL ,NULL ,NULL ,NULL ,0 ); mmc_gpio_chip->ngpio =2 ; -devm_gpiochip_add_data (&pdev->dev, mmc_gpio_chip,NULL ); + + ret =devm_gpiochip_add_data (&pdev->dev, mmc_gpio_chip,NULL ); +if (ret) +return ret; return devm_mfd_add_devices(&pdev->dev, PLATFORM_DEVID_AUTO, vexpress_sysreg_cells,
drivers/misc/fastrpc.c +40 -22
125 lines not on this page · raw message
drivers/misc/genwqe/card_ddcb.c +1 -1
@@ -923,7 +923,7 @@ int __genwqe_execute_raw_ddcb(struct genwqe_dev *cd, }if (cmd->asv_length >DDCB_ASV_LENGTH ) {dev_err (&pci_dev->dev,"[%s] err: wrong asv_length of %d\n" , - __func__, cmd->asiv_length); + __func__, cmd->asv_length);return -EINVAL ; } rc =__genwqe_enqueue_ddcb (cd, req, f_flags);
drivers/mtd/nand/raw/atmel/nand-controller.c +2 -2
@@ -1859,7 +1859,7 @@ atmel_nand_controller_legacy_add_nands(struct atmel_nand_controller *nc)static int atmel_nand_controller_add_nands (struct atmel_nand_controller *nc) { -struct device_node *np, *nand_np; +struct device_node *np;struct device *dev = nc->dev;int ret, reg_cells;u32 val;
@@ -1886,7 +1886,7 @@ static int atmel_nand_controller_add_nands(struct atmel_nand_controller *nc) reg_cells += val; -for_each_child_of_node (np, nand_np) { +for_each_child_of_node_scoped (np, nand_np) {struct atmel_nand *nand; nand =atmel_nand_create (nc, nand_np, reg_cells);
drivers/net/can/rcar/rcar_canfd.c +4 -3
@@ -717,9 +717,6 @@ static int rcar_canfd_reset_controller(struct rcar_canfd_global *gpriv)/* Reset Global error flags */ rcar_canfd_write (gpriv->base,RCANFD_GERFL ,0x0 ); -/* Set the controller into appropriate mode */ -rcar_canfd_set_mode (gpriv); -/* Transition all Channels to reset mode */ for_each_set_bit (ch, &gpriv->channels_mask, gpriv->max_channels) { rcar_canfd_clear_bit(gpriv->base,
@@ -739,6 +736,10 @@ static int rcar_canfd_reset_controller(struct rcar_canfd_global *gpriv)return err; } } + +/* Set the controller into appropriate mode */ +rcar_canfd_set_mode (gpriv); +return 0 ; }
drivers/net/can/spi/hi311x.c +17 -16
@@ -545,8 +545,6 @@ static int hi3110_stop(struct net_device *net) priv->force_quit =1 ;free_irq (spi->irq, priv); -destroy_workqueue (priv->wq); - priv->wq =NULL ;mutex_lock (&priv->hi3110_lock);
@@ -771,34 +769,23 @@ static int hi3110_open(struct net_device *net) goto out_close; } - priv->wq =alloc_workqueue ("hi3110_wq" ,WQ_FREEZABLE |WQ_MEM_RECLAIM , -0 ); -if (!priv->wq) { - ret = -ENOMEM ; - goto out_free_irq; - } -INIT_WORK (&priv->tx_work, hi3110_tx_work_handler); -INIT_WORK (&priv->restart_work, hi3110_restart_work_handler); - ret =hi3110_hw_reset (spi);if (ret) - goto out_free_wq; + goto out_free_irq; ret =hi3110_setup (net);if (ret) - goto out_free_wq; + goto out_free_irq; ret =hi3110_set_normal_mode (spi);if (ret) - goto out_free_wq; + goto out_free_irq;netif_wake_queue (net);mutex_unlock (&priv->hi3110_lock);return 0 ; - out_free_wq: -destroy_workqueue (priv->wq); out_free_irq:free_irq (spi->irq, priv);hi3110_hw_sleep (spi);
@@ -915,6 +902,15 @@ static int hi3110_can_probe(struct spi_device *spi)if (ret) goto out_clk; + priv->wq =alloc_workqueue ("hi3110_wq" ,WQ_FREEZABLE |WQ_MEM_RECLAIM , +0 ); +if (!priv->wq) { + ret = -ENOMEM ; + goto out_clk; + } +INIT_WORK (&priv->tx_work, hi3110_tx_work_handler); +INIT_WORK (&priv->restart_work, hi3110_restart_work_handler); + priv->spi = spi;mutex_init (&priv->hi3110_lock);
@@ -950,6 +946,8 @@ static int hi3110_can_probe(struct spi_device *spi)return 0 ; error_probe: +destroy_workqueue (priv->wq); + priv->wq =NULL ;hi3110_power_enable (priv->power,0 ); out_clk:
@@ -970,6 +968,9 @@ static void hi3110_can_remove(struct spi_device *spi)hi3110_power_enable (priv->power,0 ); +destroy_workqueue (priv->wq); + priv->wq =NULL ; +clk_disable_unprepare (priv->clk);free_candev (net);
drivers/net/ethernet/amazon/ena/ena_ethtool.c +4 -1
@@ -695,7 +695,10 @@ static u32 ena_get_rxfh_indir_size(struct net_device *netdev)static u32 ena_get_rxfh_key_size (struct net_device *netdev) { -return ENA_HASH_KEY_SIZE ; +struct ena_adapter *adapter =netdev_priv (netdev); +struct ena_rss *rss = &adapter->ena_dev->rss; + +return rss->hash_key ?ENA_HASH_KEY_SIZE :0 ; } static int ena_indirection_table_set(struct ena_adapter *adapter,
drivers/net/ethernet/dlink/dl2k.c +5 -2
@@ -956,15 +956,18 @@ receive_packet (struct net_device *dev) }else {struct sk_buff *skb; + skb =NULL ;/* Small skbuffs for short packets */ -if (pkt_len > copy_thresh) { +if (pkt_len <= copy_thresh) + skb =netdev_alloc_skb_ip_align (dev, pkt_len); +if (!skb) {dma_unmap_single (&np->pdev->dev,desc_to_dma (desc), np->rx_buf_sz,DMA_FROM_DEVICE );skb_put (skb = np->rx_skbuff[entry], pkt_len); np->rx_skbuff[entry] =NULL ; - }else if ((skb =netdev_alloc_skb_ip_align (dev, pkt_len))) { + }else { dma_sync_single_for_cpu(&np->pdev->dev, desc_to_dma(desc), np->rx_buf_sz,
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +5 -1
@@ -289,6 +289,10 @@ static void poll_timeout(struct mlx5_cmd_work_ent *ent)return ; }cond_resched (); +if (mlx5_cmd_is_down (dev)) { + ent->ret = -ENXIO ; +return ; + } }while (time_before (jiffies, poll_end)); ent->ret = -ETIMEDOUT ;
@@ -1056,7 +1060,7 @@ static void cmd_work_handler(struct work_struct *work)poll_timeout (ent);/* make sure we read the descriptor after ownership is SW */ rmb (); -mlx5_cmd_comp_handler (dev,1ULL << ent->idx, (ent->ret == -ETIMEDOUT )); +mlx5_cmd_comp_handler (dev,1ULL << ent->idx, !!ent->ret); } }
drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h +0 -12
@@ -63,23 +63,11 @@ struct mlx5e_port_buffer {struct mlx5e_bufferx_reg buffer[MLX5E_MAX_BUFFER ]; }; -#ifdef CONFIG_MLX5_CORE_EN_DCB int mlx5e_port_manual_buffer_config (struct mlx5e_priv *priv,u32 change,unsigned int mtu,struct ieee_pfc *pfc,u32 *buffer_size,u8 *prio2buffer); -#else -static inline int -mlx5e_port_manual_buffer_config (struct mlx5e_priv *priv, -u32 change,unsigned int mtu, -void *pfc, -u32 *buffer_size, -u8 *prio2buffer) -{ -return 0 ; -} -#endif int mlx5e_port_query_buffer (struct mlx5e_priv *priv,struct mlx5e_port_buffer *port_buffer);
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +1 -16
@@ -42,7 +42,6 @@#include "eswitch.h" #include "en.h" #include "en/txrx.h" -#include "en/port_buffer.h" #include "en_tc.h" #include "en_rep.h" #include "en_accel/ipsec.h"
@@ -2641,11 +2640,9 @@ int mlx5e_set_dev_port_mtu(struct mlx5e_priv *priv)struct mlx5e_params *params = &priv->channels.params;struct net_device *netdev = priv->netdev;struct mlx5_core_dev *mdev = priv->mdev; -u16 mtu, prev_mtu; +u16 mtu;int err; -mlx5e_query_mtu (mdev, params, &prev_mtu); - err =mlx5e_set_mtu (mdev, params, params->sw_mtu);if (err)return err;
@@ -2655,18 +2652,6 @@ int mlx5e_set_dev_port_mtu(struct mlx5e_priv *priv)netdev_warn (netdev,"%s: VPort MTU %d is different than netdev mtu %d\n" , __func__, mtu, params->sw_mtu); -if (mtu != prev_mtu &&MLX5_BUFFER_SUPPORTED (mdev)) { - err =mlx5e_port_manual_buffer_config (priv,0 , mtu, -NULL ,NULL ,NULL ); -if (err) { -netdev_warn (netdev,"%s: Failed to set Xon/Xoff values with MTU %d (err %d), setting back to previous MTU %d\n" , - __func__, mtu, err, prev_mtu); - -mlx5e_set_mtu (mdev, params, prev_mtu); -return err; - } - } - params->sw_mtu = mtu;return 0 ; }
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c +24 -0
@@ -22,6 +22,7 @@ struct mlx5_fw_reset {struct work_struct reset_reload_work;struct work_struct reset_now_work;struct work_struct reset_abort_work; +struct delayed_work reset_timeout_work;unsigned long reset_flags;struct timer_list timer;struct completion done;
@@ -180,6 +181,8 @@ static int mlx5_sync_reset_clear_reset_requested(struct mlx5_core_dev *dev, boolreturn -EALREADY ; } +if (current_work () != &fw_reset->reset_timeout_work.work) +cancel_delayed_work (&fw_reset->reset_timeout_work);mlx5_stop_sync_reset_poll (dev);if (poll_health)mlx5_start_health_poll (dev);
@@ -250,6 +253,11 @@ static int mlx5_sync_reset_set_reset_requested(struct mlx5_core_dev *dev) }mlx5_stop_health_poll (dev, true);mlx5_start_sync_reset_poll (dev); + +if (!test_bit (MLX5_FW_RESET_FLAGS_DROP_NEW_REQUESTS , + &fw_reset->reset_flags)) +schedule_delayed_work (&fw_reset->reset_timeout_work, +msecs_to_jiffies (mlx5_tout_ms (dev,PCI_SYNC_UPDATE )));return 0 ; }
@@ -445,6 +453,19 @@ static void mlx5_sync_reset_events_handle(struct mlx5_fw_reset *fw_reset, struct } } +static void mlx5_sync_reset_timeout_work (struct work_struct *work) +{ + struct delayed_work *dwork = container_of(work, struct delayed_work, + work); +struct mlx5_fw_reset *fw_reset = + container_of(dwork, struct mlx5_fw_reset, reset_timeout_work); +struct mlx5_core_dev *dev = fw_reset->dev; + +if (mlx5_sync_reset_clear_reset_requested (dev, true)) +return ; +mlx5_core_warn (dev,"PCI Sync FW Update Reset Timeout.\n" ); +} +static int fw_reset_event_notifier (struct notifier_block *nb,unsigned long action,void *data) { struct mlx5_fw_reset *fw_reset = mlx5_nb_cof(nb, struct mlx5_fw_reset, nb);
@@ -513,6 +534,7 @@ void mlx5_drain_fw_reset(struct mlx5_core_dev *dev)cancel_work_sync (&fw_reset->reset_reload_work);cancel_work_sync (&fw_reset->reset_now_work);cancel_work_sync (&fw_reset->reset_abort_work); +cancel_delayed_work (&fw_reset->reset_timeout_work); }int mlx5_fw_reset_init (struct mlx5_core_dev *dev)
@@ -535,6 +557,8 @@ int mlx5_fw_reset_init(struct mlx5_core_dev *dev)INIT_WORK (&fw_reset->reset_reload_work, mlx5_sync_reset_reload_work);INIT_WORK (&fw_reset->reset_now_work, mlx5_sync_reset_now_event);INIT_WORK (&fw_reset->reset_abort_work, mlx5_sync_reset_abort_event); +INIT_DELAYED_WORK (&fw_reset->reset_timeout_work, + mlx5_sync_reset_timeout_work);init_completion (&fw_reset->done);return 0 ;
drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c +5 -2
@@ -483,9 +483,12 @@ static int reclaim_pages_cmd(struct mlx5_core_dev *dev,u32 func_id;u32 npages;u32 i =0 ; +int err; -if (!mlx5_cmd_is_down (dev)) -return mlx5_cmd_do (dev, in, in_size, out, out_size); + err =mlx5_cmd_do (dev, in, in_size, out, out_size); +/* If FW is gone (-ENXIO), proceed to forceful reclaim */ +if (err != -ENXIO ) +return err;/* No hard feelings, we want our pages back! */ npages =MLX5_GET (manage_pages_in, in, input_num_entries);
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +1 -1
@@ -1409,7 +1409,7 @@ static u32 nfp_net_get_rxfh_key_size(struct net_device *netdev)struct nfp_net *nn =netdev_priv (netdev);if (!(nn->cap &NFP_NET_CFG_CTRL_RSS_ANY )) -return -EOPNOTSUPP ; +return 0 ;return nfp_net_rss_key_sz (nn); }
drivers/net/usb/asix_devices.c +29 -0
@@ -625,6 +625,21 @@ static void ax88772_suspend(struct usbnet *dev) asix_read_medium_status(dev, 1)); } +/* Notes on PM callbacks and locking context: +* +* - asix_suspend()/asix_resume() are invoked for both runtime PM and +* system-wide suspend/resume. For struct usb_driver the ->resume() +* callback does not receive pm_message_t, so the resume type cannot +* be distinguished here. +* +* - The MAC driver must hold RTNL when calling phylink interfaces such as +* phylink_suspend()/resume(). Those calls will also perform MDIO I/O. +* +* - Taking RTNL and doing MDIO from a runtime-PM resume callback (while +* the USB PM lock is held) is fragile. Since autosuspend brings no +* measurable power saving here, we block it by holding a PM usage +* reference in ax88772_bind(). +*/ static int asix_suspend (struct usb_interface *intf,pm_message_t message) {struct usbnet *dev =usb_get_intfdata (intf);
@@ -922,6 +937,13 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)if (ret) goto initphy_err; +/* Keep this interface runtime-PM active by taking a usage ref. +* Prevents runtime suspend while bound and avoids resume paths +* that could deadlock (autoresume under RTNL while USB PM lock +* is held, phylink/MDIO wants RTNL). +*/ +pm_runtime_get_noresume (&intf->dev); +return 0 ; initphy_err:
@@ -951,6 +973,8 @@ static void ax88772_unbind(struct usbnet *dev, struct usb_interface *intf)phylink_destroy (priv->phylink);ax88772_mdio_unregister (priv);asix_rx_fixup_common_free (dev->driver_priv); +/* Drop the PM usage ref taken in bind() */ +pm_runtime_put (&intf->dev); }static void ax88178_unbind (struct usbnet *dev,struct usb_interface *intf)
@@ -1575,6 +1599,11 @@ static struct usb_driver asix_driver = { .resume = asix_resume, .reset_resume = asix_resume, .disconnect = usbnet_disconnect, +/* usbnet enables autosuspend by default (supports_autosuspend=1). +* We keep runtime-PM active for AX88772* by taking a PM usage +* reference in ax88772_bind() (pm_runtime_get_noresume()) and +* dropping it in unbind(), which effectively blocks autosuspend. +*/ .supports_autosuspend = 1, .disable_hub_initiated_lpm = 1, };
drivers/net/usb/rtl8150.c +0 -2
@@ -664,7 +664,6 @@ static void rtl8150_set_multicast(struct net_device *netdev)rtl8150_t *dev =netdev_priv (netdev);u16 rx_creg =0x9e ; -netif_stop_queue (netdev);if (netdev->flags &IFF_PROMISC ) { rx_creg |=0x0001 ;dev_info (&netdev->dev,"%s: promiscuous mode\n" , netdev->name);
@@ -678,7 +677,6 @@ static void rtl8150_set_multicast(struct net_device *netdev) rx_creg &=0x00fc ; }async_set_registers (dev,RCR ,sizeof (rx_creg), rx_creg); -netif_wake_queue (netdev); } static netdev_tx_t rtl8150_start_xmit(struct sk_buff *skb,
drivers/net/wireless/ath/ath10k/wmi.c +19 -20
@@ -1762,33 +1762,32 @@ void ath10k_wmi_put_wmi_channel(struct ath10k *ar, struct wmi_channel *ch,int ath10k_wmi_wait_for_service_ready (struct ath10k *ar) { +unsigned long timeout = jiffies +WMI_SERVICE_READY_TIMEOUT_HZ ;unsigned long time_left, i; - time_left =wait_for_completion_timeout (&ar->wmi.service_ready, -WMI_SERVICE_READY_TIMEOUT_HZ ); -if (!time_left) { -/* Sometimes the PCI HIF doesn't receive interrupt -* for the service ready message even if the buffer -* was completed. PCIe sniffer shows that it's -* because the corresponding CE ring doesn't fires -* it. Workaround here by polling CE rings once. -*/ -ath10k_warn (ar,"failed to receive service ready completion, polling..\n" ); - +/* Sometimes the PCI HIF doesn't receive interrupt +* for the service ready message even if the buffer +* was completed. PCIe sniffer shows that it's +* because the corresponding CE ring doesn't fires +* it. Workaround here by polling CE rings. Since +* the message could arrive at any time, continue +* polling until timeout. +*/ +do {for (i =0 ; i <CE_COUNT ; i++)ath10k_hif_send_complete_check (ar, i,1 ); +/* The 100 ms granularity is a tradeoff considering scheduler +* overhead and response latency +*/ time_left =wait_for_completion_timeout (&ar->wmi.service_ready, -WMI_SERVICE_READY_TIMEOUT_HZ ); -if (!time_left) { -ath10k_warn (ar,"polling timed out\n" ); -return -ETIMEDOUT ; - } - -ath10k_warn (ar,"service ready completion received, continuing normally\n" ); - } +msecs_to_jiffies (100 )); +if (time_left) +return 0 ; + }while (time_before (jiffies, timeout)); -return 0 ; +ath10k_warn (ar,"failed to receive service ready completion\n" ); +return -ETIMEDOUT ; }int ath10k_wmi_wait_for_unified_ready (struct ath10k *ar)
drivers/net/wireless/marvell/mwifiex/cfg80211.c +3 -4
@@ -659,10 +659,9 @@ static void mwifiex_reg_notifier(struct wiphy *wiphy,return ; } -/* Don't send world or same regdom info to firmware */ -if (strncmp (request->alpha2,"00" ,2 ) && -strncmp (request->alpha2, adapter->country_code, -sizeof (request->alpha2))) { +/* Don't send same regdom info to firmware */ +if (strncmp (request->alpha2, adapter->country_code, +sizeof (request->alpha2)) !=0 ) {memcpy (adapter->country_code, request->alpha2,sizeof (request->alpha2));mwifiex_send_domain_info_cmd_fw (wiphy);
drivers/net/wireless/mediatek/mt76/mt7603/soc.c +1 -1
@@ -48,7 +48,7 @@ mt76_wmac_probe(struct platform_device *pdev)return 0 ; error: -ieee80211_free_hw (mt76_hw (dev)); +mt76_free_device (mdev);return ret; }
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c +0 -1
@@ -296,7 +296,6 @@ static const struct usb_device_id rtl8192c_usb_ids[] = { {RTL_USB_DEVICE(0x050d, 0x1102, rtl92cu_hal_cfg)}, /*Belkin - Edimax*/ {RTL_USB_DEVICE(0x050d, 0x11f2, rtl92cu_hal_cfg)}, /*Belkin - ISY*/ {RTL_USB_DEVICE(0x06f8, 0xe033, rtl92cu_hal_cfg)}, /*Hercules - Edimax*/ - {RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/ {RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/ {RTL_USB_DEVICE(0x0846, 0x9041, rtl92cu_hal_cfg)}, /*NetGear WNA1000M*/ {RTL_USB_DEVICE(0x0846, 0x9043, rtl92cu_hal_cfg)}, /*NG WNA1000Mv2*/
drivers/net/wireless/realtek/rtw89/ser.c +1 -2
@@ -204,7 +204,6 @@ static void rtw89_ser_hdl_work(struct work_struct *work)static int ser_send_msg (struct rtw89_ser *ser,u8 event) { - struct rtw89_dev *rtwdev = container_of(ser, struct rtw89_dev, ser);struct ser_msg *msg =NULL ;if (test_bit (RTW89_SER_DRV_STOP_RUN , ser->flags))
@@ -220,7 +219,7 @@ static int ser_send_msg(struct rtw89_ser *ser, u8 event)list_add (&msg->list, &ser->msg_q);spin_unlock_irq (&ser->msg_q_lock); -ieee80211_queue_work (rtwdev->hw, &ser->ser_hdl_work); +schedule_work (&ser->ser_hdl_work);return 0 ; }
drivers/nvme/target/fc.c +9 -10
@@ -54,6 +54,8 @@ struct nvmet_fc_ls_req_op { /* for an LS RQST XMT */int ls_error;struct list_head lsreq_list;/* tgtport->ls_req_list */ bool req_queued; + +struct work_struct put_work; };
@@ -111,8 +113,6 @@ struct nvmet_fc_tgtport {struct nvmet_fc_port_entry *pe;struct kref ref;u32 max_sg_cnt; - -struct work_struct put_work; };struct nvmet_fc_port_entry {
@@ -236,12 +236,13 @@ static int nvmet_fc_tgt_a_get(struct nvmet_fc_tgt_assoc *assoc);static void nvmet_fc_tgt_q_put (struct nvmet_fc_tgt_queue *queue);static int nvmet_fc_tgt_q_get (struct nvmet_fc_tgt_queue *queue);static void nvmet_fc_tgtport_put (struct nvmet_fc_tgtport *tgtport); -static void nvmet_fc_put_tgtport_work (struct work_struct *work) +static void nvmet_fc_put_lsop_work (struct work_struct *work) { -struct nvmet_fc_tgtport *tgtport = - container_of(work, struct nvmet_fc_tgtport, put_work); +struct nvmet_fc_ls_req_op *lsop = + container_of(work, struct nvmet_fc_ls_req_op, put_work); -nvmet_fc_tgtport_put (tgtport); +nvmet_fc_tgtport_put (lsop->tgtport); +kfree (lsop); }static int nvmet_fc_tgtport_get (struct nvmet_fc_tgtport *tgtport); static void nvmet_fc_handle_fcp_rqst(struct nvmet_fc_tgtport *tgtport,
@@ -368,7 +369,7 @@ __nvmet_fc_finish_ls_req(struct nvmet_fc_ls_req_op *lsop) DMA_BIDIRECTIONAL); out_putwork: -queue_work (nvmet_wq, &tgtport->put_work); +queue_work (nvmet_wq, &lsop->put_work); } static int
@@ -389,6 +390,7 @@ __nvmet_fc_send_ls_req(struct nvmet_fc_tgtport *tgtport, lsreq->done = done; lsop->req_queued = false;INIT_LIST_HEAD (&lsop->lsreq_list); +INIT_WORK (&lsop->put_work, nvmet_fc_put_lsop_work); lsreq->rqstdma = fc_dma_map_single(tgtport->dev, lsreq->rqstaddr, lsreq->rqstlen + lsreq->rsplen,
@@ -448,8 +450,6 @@ nvmet_fc_disconnect_assoc_done(struct nvmefc_ls_req *lsreq, int status)__nvmet_fc_finish_ls_req (lsop);/* fc-nvme target doesn't care about success or failure of cmd */ - -kfree (lsop); }/*
@@ -1407,7 +1407,6 @@ nvmet_fc_register_targetport(struct nvmet_fc_port_info *pinfo,kref_init (&newrec->ref);ida_init (&newrec->assoc_cnt); newrec->max_sg_cnt = template->max_sgl_segments; -INIT_WORK (&newrec->put_work, nvmet_fc_put_tgtport_work); ret =nvmet_fc_alloc_ls_iodlist (newrec);if (ret) {
drivers/pci/controller/dwc/pcie-tegra194.c +2 -2
@@ -1720,9 +1720,9 @@ static void pex_ep_event_pex_rst_assert(struct tegra_pcie_dw *pcie) ret); } - ret =tegra_pcie_bpmp_set_pll_state (pcie, false); + ret =tegra_pcie_bpmp_set_ctrl_state (pcie, false);if (ret) -dev_err (pcie->dev,"Failed to turn off UPHY: %d\n" , ret); +dev_err (pcie->dev,"Failed to disable controller: %d\n" , ret); pcie->ep_state =EP_STATE_DISABLED ;dev_dbg (pcie->dev,"Uninitialization of endpoint is completed\n" );
drivers/pci/controller/pci-tegra.c +1 -1
@@ -1346,7 +1346,7 @@ static int tegra_pcie_port_get_phys(struct tegra_pcie_port *port)unsigned int i;int err; - port->phys =devm_kcalloc (dev,sizeof (phy), port->lanes,GFP_KERNEL ); + port->phys =devm_kcalloc (dev, port->lanes,sizeof (phy),GFP_KERNEL );if (!port->phys)return -ENOMEM ;
drivers/perf/arm_spe_pmu.c +2 -1
@@ -95,7 +95,8 @@ struct arm_spe_pmu {#define to_spe_pmu (p) (container_of(p, struct arm_spe_pmu, pmu))/* Convert a free-running index from perf into an SPE buffer offset */ -#define PERF_IDX2OFF (idx, buf) ((idx) % ((buf)->nr_pages << PAGE_SHIFT)) +#define PERF_IDX2OFF (idx, buf) \ + ((idx) % ((unsigned long)(buf)->nr_pages << PAGE_SHIFT))/* Keep track of our dynamic hotplug state */ static enum cpuhp_state arm_spe_pmu_online;
drivers/pinctrl/meson/pinctrl-meson-gxl.c +10 -0
@@ -187,6 +187,9 @@ static const unsigned int i2c_sda_c_pins[] = { GPIODV_28 };static const unsigned int i2c_sck_c_dv19_pins[] = {GPIODV_19 };static const unsigned int i2c_sda_c_dv18_pins[] = {GPIODV_18 }; +static const unsigned int i2c_sck_d_pins[] = {GPIOX_11 }; +static const unsigned int i2c_sda_d_pins[] = {GPIOX_10 }; +static const unsigned int eth_mdio_pins[] = {GPIOZ_0 };static const unsigned int eth_mdc_pins[] = {GPIOZ_1 };static const unsigned int eth_clk_rx_clk_pins[] = {GPIOZ_2 };
@@ -411,6 +414,8 @@ static struct meson_pmx_group meson_gxl_periphs_groups[] = {GPIO_GROUP (GPIO_TEST_N ),/* Bank X */ +GROUP (i2c_sda_d,5 ,5 ), +GROUP (i2c_sck_d,5 ,4 ),GROUP (sdio_d0,5 ,31 ),GROUP (sdio_d1,5 ,30 ), GROUP(sdio_d2, 5, 29),
@@ -651,6 +656,10 @@ static const char * const i2c_c_groups[] = { "i2c_sck_c", "i2c_sda_c", "i2c_sda_c_dv18", "i2c_sck_c_dv19", }; +static const char *const i2c_d_groups[] = { +"i2c_sck_d" ,"i2c_sda_d" , +}; +static const char *const eth_groups[] = {"eth_mdio" ,"eth_mdc" ,"eth_clk_rx_clk" ,"eth_rx_dv" ,"eth_rxd0" ,"eth_rxd1" ,"eth_rxd2" ,"eth_rxd3" ,
@@ -777,6 +786,7 @@ static struct meson_pmx_func meson_gxl_periphs_functions[] = {FUNCTION (i2c_a),FUNCTION (i2c_b),FUNCTION (i2c_c), +FUNCTION (i2c_d),FUNCTION (eth),FUNCTION (pwm_a), FUNCTION(pwm_b),
drivers/pinctrl/pinmux.c +1 -1
@@ -328,7 +328,7 @@ static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,while (selector < nfuncs) {const char *fname = ops->get_function_name (pctldev, selector); -if (!strcmp (function, fname)) +if (fname && !strcmp (function, fname))return selector; selector++;
drivers/pinctrl/renesas/pinctrl.c +2 -1
@@ -747,7 +747,8 @@ static int sh_pfc_pinconf_group_set(struct pinctrl_dev *pctldev, unsigned group,struct sh_pfc_pinctrl *pmx =pinctrl_dev_get_drvdata (pctldev);const unsigned int *pins;unsigned int num_pins; -unsigned int i, ret; +unsigned int i; +int ret; pins = pmx->pfc->info->groups[group].pins; num_pins = pmx->pfc->info->groups[group].nr_pins;
drivers/power/supply/cw2015_battery.c +1 -2
@@ -702,8 +702,7 @@ static int cw_bat_probe(struct i2c_client *client)if (!cw_bat->battery_workqueue)return -ENOMEM ; -devm_delayed_work_autocancel (&client->dev, - &cw_bat->battery_delay_work, cw_bat_work); +devm_delayed_work_autocancel (&client->dev, &cw_bat->battery_delay_work, cw_bat_work);queue_delayed_work (cw_bat->battery_workqueue, &cw_bat->battery_delay_work,msecs_to_jiffies (10 ));return 0 ;
drivers/pps/kapi.c +1 -4
@@ -109,16 +109,13 @@ struct pps_device *pps_register_source(struct pps_source_info *info,if (err <0 ) {pr_err ("%s: unable to create char device\n" , info->name); - goto kfree_pps; + goto pps_register_source_exit; }dev_dbg (&pps->dev,"new PPS source %s\n" , info->name);return pps; -kfree_pps: -kfree (pps); - pps_register_source_exit:pr_err ("%s: unable to register source\n" , info->name);
drivers/pps/pps.c +2 -3
@@ -375,6 +375,7 @@ int pps_register_cdev(struct pps_device *pps) pps->info.name); err = -EBUSY ; } +kfree (pps); goto out_unlock; } pps->id = err;
@@ -384,13 +385,11 @@ int pps_register_cdev(struct pps_device *pps) pps->dev.devt =MKDEV (pps_major, pps->id);dev_set_drvdata (&pps->dev, pps);dev_set_name (&pps->dev,"pps%d" , pps->id); + pps->dev.release = pps_device_destruct; err =device_register (&pps->dev);if (err) goto free_idr; -/* Override the release function with our own */ - pps->dev.release = pps_device_destruct; -pr_debug ("source %s got cdev (%d:%d)\n" , pps->info.name, pps_major, pps->id);
drivers/pwm/pwm-tiehrpwm.c +2 -2
@@ -167,7 +167,7 @@ static int set_prescale_div(unsigned long rqst_prescaler, u16 *prescale_div, *prescale_div = (1 << clkdiv) * (hspclkdiv ? (hspclkdiv *2 ) :1 ); -if (*prescale_div > rqst_prescaler) { +if (*prescale_div >= rqst_prescaler) { *tb_clk_div = (clkdiv <<TBCTL_CLKDIV_SHIFT ) | (hspclkdiv <<TBCTL_HSPCLKDIV_SHIFT );return 0 ;
@@ -266,7 +266,7 @@ static int ehrpwm_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, pc->period_cycles[pwm->hwpwm] = period_cycles;/* Configure clock prescaler to support Low frequency PWM wave */ -if (set_prescale_div (period_cycles/PERIOD_MAX , &ps_divval, +if (set_prescale_div (DIV_ROUND_UP (period_cycles,PERIOD_MAX ), &ps_divval, &tb_divval)) {dev_err (chip->dev,"Unsupported values\n" );return -EINVAL ;
drivers/regulator/scmi-regulator.c +2 -1
@@ -257,7 +257,8 @@ static int process_scmi_regulator_of_node(struct scmi_device *sdev,struct device_node *np, struct scmi_regulator_info *rinfo) { - u32 dom, ret; + u32 dom; +int ret; ret =of_property_read_u32 (np,"reg" , &dom);if (ret)
drivers/remoteproc/qcom_q6v5.c +0 -3
@@ -162,9 +162,6 @@ int qcom_q6v5_wait_for_start(struct qcom_q6v5 *q6v5, int timeout)int ret; ret =wait_for_completion_timeout (&q6v5->start_done, timeout); -if (!ret) -disable_irq (q6v5->handover_irq); -return !ret ? -ETIMEDOUT :0 ; }EXPORT_SYMBOL_GPL (qcom_q6v5_wait_for_start);
drivers/scsi/mpt3sas/mpt3sas_transport.c +3 -5
@@ -991,11 +991,9 @@ mpt3sas_transport_port_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,list_for_each_entry_safe (mpt3sas_phy, next_phy, &mpt3sas_port->phy_list, port_siblings) {if ((ioc->logging_level &MPT_DEBUG_TRANSPORT )) -dev_printk (KERN_INFO , &mpt3sas_port->port->dev, -"remove: sas_addr(0x%016llx), phy(%d)\n" , - (unsigned long long ) - mpt3sas_port->remote_identify.sas_address, - mpt3sas_phy->phy_id); +ioc_info (ioc,"remove: sas_addr(0x%016llx), phy(%d)\n" , + (unsigned long long ) mpt3sas_port->remote_identify.sas_address, + mpt3sas_phy->phy_id); mpt3sas_phy->phy_belongs_to_port =0 ;if (!ioc->remove_host) sas_port_delete_phy(mpt3sas_port->port,
drivers/scsi/myrs.c +4 -4
@@ -498,14 +498,14 @@ static bool myrs_enable_mmio_mbox(struct myrs_hba *cs,/* Temporary dma mapping, used only in the scope of this function */ mbox =dma_alloc_coherent (&pdev->dev,sizeof (union myrs_cmd_mbox ), &mbox_addr,GFP_KERNEL ); -if (dma_mapping_error (&pdev->dev, mbox_addr)) +if (!mbox)return false;/* These are the base addresses for the command memory mailbox array */ cs->cmd_mbox_size =MYRS_MAX_CMD_MBOX *sizeof (union myrs_cmd_mbox ); cmd_mbox =dma_alloc_coherent (&pdev->dev, cs->cmd_mbox_size, &cs->cmd_mbox_addr,GFP_KERNEL ); -if (dma_mapping_error (&pdev->dev, cs->cmd_mbox_addr)) { +if (!cmd_mbox) {dev_err (&pdev->dev,"Failed to map command mailbox\n" ); goto out_free; }
@@ -520,7 +520,7 @@ static bool myrs_enable_mmio_mbox(struct myrs_hba *cs, cs->stat_mbox_size =MYRS_MAX_STAT_MBOX *sizeof (struct myrs_stat_mbox ); stat_mbox =dma_alloc_coherent (&pdev->dev, cs->stat_mbox_size, &cs->stat_mbox_addr,GFP_KERNEL ); -if (dma_mapping_error (&pdev->dev, cs->stat_mbox_addr)) { +if (!stat_mbox) {dev_err (&pdev->dev,"Failed to map status mailbox\n" ); goto out_free; }
@@ -533,7 +533,7 @@ static bool myrs_enable_mmio_mbox(struct myrs_hba *cs, cs->fwstat_buf =dma_alloc_coherent (&pdev->dev,sizeof (struct myrs_fwstat ), &cs->fwstat_addr,GFP_KERNEL ); -if (dma_mapping_error (&pdev->dev, cs->fwstat_addr)) { +if (!cs->fwstat_buf) {dev_err (&pdev->dev,"Failed to map firmware health buffer\n" ); cs->fwstat_buf =NULL ; goto out_free;
drivers/scsi/pm8001/pm8001_sas.c +8 -1
@@ -704,6 +704,7 @@ static void pm8001_dev_gone_notify(struct domain_device *dev)unsigned long flags =0 ;struct pm8001_hba_info *pm8001_ha;struct pm8001_device *pm8001_dev = dev->lldd_dev; +struct domain_device *parent_dev = dev->parent; pm8001_ha =pm8001_find_ha_by_dev (dev);spin_lock_irqsave (&pm8001_ha->lock, flags);
@@ -720,7 +721,13 @@ static void pm8001_dev_gone_notify(struct domain_device *dev)spin_lock_irqsave (&pm8001_ha->lock, flags); }PM8001_CHIP_DISP ->dereg_dev_req (pm8001_ha, device_id); - pm8001_ha->phy[pm8001_dev->attached_phy].phy_attached =0 ; + +/* +* The phy array only contains local phys. Thus, we cannot clear +* phy_attached for a device behind an expander. +*/ +if (!(parent_dev &&dev_is_expander (parent_dev->dev_type))) + pm8001_ha->phy[pm8001_dev->attached_phy].phy_attached =0 ;pm8001_free_dev (pm8001_dev); }else {pm8001_dbg (pm8001_ha,DISC ,"Found dev has gone.\n" );
drivers/scsi/qla2xxx/qla_edif.c +2 -2
@@ -1755,7 +1755,7 @@ qla24xx_sadb_update(struct bsg_job *bsg_job)switch (rval) {case QLA_SUCCESS :break ; -case EAGAIN : +case -EAGAIN :msleep (EDIF_MSLEEP_INTERVAL ); cnt++;if (cnt <EDIF_RETRY_COUNT )
@@ -3621,7 +3621,7 @@ int qla_edif_process_els(scsi_qla_host_t *vha, struct bsg_job *bsg_job) p->e.extra_rx_xchg_address, p->e.extra_control_flags, sp->handle, sp->remap.req.len, bsg_job);break ; -case EAGAIN : +case -EAGAIN :msleep (EDIF_MSLEEP_INTERVAL ); cnt++;if (cnt <EDIF_RETRY_COUNT )
drivers/scsi/qla2xxx/qla_init.c +2 -2
@@ -2060,11 +2060,11 @@ static void qla_marker_sp_done(srb_t *sp, int res)int cnt =5 ; \ do { \ if (_chip_gen != sp->vha->hw->chip_reset || _login_gen != sp->fcport->login_gen) {\ - _rval = EINVAL; \ + _rval = -EINVAL; \ break; \ } \ _rval = qla2x00_start_sp(_sp); \ - if (_rval == EAGAIN) \ + if (_rval == -EAGAIN) \ msleep(1); \ else \ break; \
drivers/soc/qcom/rpmh-rsc.c +2 -5
@@ -415,13 +415,10 @@ static irqreturn_t tcs_tx_done(int irq, void *p)trace_rpmh_tx_done (drv, i, req, err); -/* -* If wake tcs was re-purposed for sending active -* votes, clear AMC trigger & enable modes and +/* Clear AMC trigger & enable modes and * disable interrupt for this TCS */ -if (!drv->tcs[ACTIVE_TCS ].num_tcs) -__tcs_set_trigger (drv, i, false); +__tcs_set_trigger (drv, i, false); skip:/* Reclaim the TCS */ write_tcs_reg (drv,RSC_DRV_CMD_ENABLE , i,0 );
drivers/staging/axis-fifo/axis-fifo.c +31 -37
134 lines not on this page · raw message
drivers/target/target_core_configfs.c +1 -1
@@ -2691,7 +2691,7 @@ static ssize_t target_lu_gp_members_show(struct config_item *item, char *page) config_item_name(&dev->dev_group.cg_item)); cur_len++;/* Extra byte for NULL terminator */ -if ((cur_len + len) >PAGE_SIZE ) { +if ((cur_len + len) >PAGE_SIZE || cur_len >LU_GROUP_NAME_BUF ) {pr_warn ("Ran out of lu_gp_show_attr" "_members buffer\n" );break ;
drivers/thermal/qcom/Kconfig +2 -1
@@ -34,7 +34,8 @@ config QCOM_SPMI_TEMP_ALARM config QCOM_LMH tristate "Qualcomm Limits Management Hardware" - depends on ARCH_QCOM && QCOM_SCM + depends on ARCH_QCOM || COMPILE_TEST + select QCOM_SCM help This enables initialization of Qualcomm limits management hardware(LMh). LMh allows for hardware-enforced mitigation for cpus based on
drivers/thermal/qcom/lmh.c +2 -0
@@ -5,6 +5,8 @@*/ #include <linux/module.h> #include <linux/interrupt.h> +#include <linux/irq.h> +#include <linux/irqdesc.h> #include <linux/irqdomain.h> #include <linux/err.h> #include <linux/platform_device.h>
drivers/tty/serial/Kconfig +1 -1
@@ -1410,7 +1410,7 @@ config SERIAL_STM32 config SERIAL_STM32_CONSOLE bool "Support for console on STM32" - depends on SERIAL_STM32=y + depends on SERIAL_STM32 select SERIAL_CORE_CONSOLE select SERIAL_EARLYCON
drivers/tty/serial/max310x.c +2 -0
@@ -1656,6 +1656,8 @@ static int max310x_i2c_probe(struct i2c_client *client) port_client =devm_i2c_new_dummy_device (&client->dev, client->adapter, port_addr); +if (IS_ERR (port_client)) +return PTR_ERR (port_client); regmaps[i] =devm_regmap_init_i2c (port_client, ®cfg_i2c); }
drivers/uio/uio_hv_generic.c +1 -6
@@ -96,7 +96,6 @@ static void hv_uio_channel_cb(void *context)struct hv_device *hv_dev = chan->device_obj;struct hv_uio_private_data *pdata =hv_get_drvdata (hv_dev); - chan->inbound.ring_buffer->interrupt_mask =1 ;virt_mb ();uio_event_notify (&pdata->info);
@@ -173,8 +172,6 @@ hv_uio_new_channel(struct vmbus_channel *new_sc)return ; } -/* Disable interrupts on sub channel */ - new_sc->inbound.ring_buffer->interrupt_mask =1 ;set_channel_read_mode (new_sc,HV_CALL_ISR ); ret =sysfs_create_bin_file (&new_sc->kobj, &ring_buffer_bin_attr);
@@ -218,9 +215,7 @@ hv_uio_open(struct uio_info *info, struct inode *inode) ret =vmbus_connect_ring (dev->channel, hv_uio_channel_cb, dev->channel); -if (ret ==0 ) - dev->channel->inbound.ring_buffer->interrupt_mask =1 ; -else +if (ret)atomic_dec (&pdata->refcnt);return ret;
drivers/usb/cdns3/cdnsp-pci.c +1 -4
@@ -90,7 +90,7 @@ static int cdnsp_pci_probe(struct pci_dev *pdev, cdnsp =kzalloc (sizeof (*cdnsp),GFP_KERNEL );if (!cdnsp) { ret = -ENOMEM ; - goto disable_pci; + goto put_pci; } }
@@ -173,9 +173,6 @@ static int cdnsp_pci_probe(struct pci_dev *pdev,if (!pci_is_enabled (func))kfree (cdnsp); -disable_pci: -pci_disable_device (pdev); - put_pci:pci_dev_put (func);
drivers/usb/gadget/configfs.c +2 -0
@@ -1356,6 +1356,8 @@ static int configfs_composite_bind(struct usb_gadget *gadget, cdev->use_os_string = true; cdev->b_vendor_code = gi->b_vendor_code;memcpy (cdev->qw_sign, gi->qw_sign,OS_STRING_QW_SIGN_LEN ); + }else { + cdev->use_os_string = false; }if (gadget_is_otg (gadget) && !otg_desc[0 ]) {
drivers/usb/host/max3421-hcd.c +1 -1
@@ -1925,7 +1925,7 @@ max3421_probe(struct spi_device *spi)if (hcd) {kfree (max3421_hcd->tx);kfree (max3421_hcd->rx); -if (max3421_hcd->spi_thread) +if (!IS_ERR_OR_NULL (max3421_hcd->spi_thread))kthread_stop (max3421_hcd->spi_thread);usb_put_hcd (hcd); }
drivers/usb/host/xhci-ring.c +4 -7
@@ -1175,19 +1175,16 @@ static void xhci_handle_cmd_stop_ep(struct xhci_hcd *xhci, int slot_id,* Stopped state, but it will soon change to Running. * * Assume this bug on unexpected Stop Endpoint failures. -* Keep retrying until the EP starts and stops again. +* Keep retrying until the EP starts and stops again, on +* chips where this is known to help. Wait for 100ms. */ +if (time_is_before_jiffies (ep->stop_time +msecs_to_jiffies (100 ))) +break ; fallthrough;case EP_STATE_RUNNING :/* Race, HW handled stop ep cmd before ep was running */ xhci_dbg (xhci,"Stop ep completion ctx error, ctx_state %d\n" ,GET_EP_CTX_STATE (ep_ctx)); -/* -* Don't retry forever if we guessed wrong or a defective HC never starts -* the EP or says 'Running' but fails the command. We must give back TDs. -*/ -if (time_is_before_jiffies (ep->stop_time +msecs_to_jiffies (100 ))) -break ; command =xhci_alloc_command (xhci, false,GFP_ATOMIC );if (!command) {
drivers/usb/phy/phy-twl6030-usb.c +1 -2
@@ -328,9 +328,8 @@ static int twl6030_set_vbus(struct phy_companion *comparator, bool enabled)static int twl6030_usb_probe (struct platform_device *pdev) { -u32 ret;struct twl6030_usb *twl; -int status, err; +int status, err, ret;struct device_node *np = pdev->dev.of_node;struct device *dev = &pdev->dev;
drivers/usb/serial/option.c +6 -0
@@ -2114,6 +2114,12 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */ { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff), /* Simcom SIM7500/SIM7600 RNDIS mode */ .driver_info = RSVD(7) }, + { USB_DEVICE(0x1e0e, 0x9071), /* Simcom SIM8230 RMNET mode */ + .driver_info = RSVD(3) | RSVD(4) }, + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9078, 0xff), /* Simcom SIM8230 ECM mode */ + .driver_info = RSVD(5) }, + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x907b, 0xff), /* Simcom SIM8230 RNDIS mode */ + .driver_info = RSVD(5) }, { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9205, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT+ECM mode */ { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9206, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT-only mode */ { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),
drivers/usb/typec/tipd/core.c +11 -13
@@ -491,24 +491,23 @@ static irqreturn_t cd321x_interrupt(int irq, void *data)if (!event) goto err_unlock; +tps6598x_write64 (tps,TPS_REG_INT_CLEAR1 , event); +if (!tps6598x_read_status (tps, &status)) - goto err_clear_ints; + goto err_unlock;if (event &APPLE_CD_REG_INT_POWER_STATUS_UPDATE )if (!tps6598x_read_power_status (tps)) - goto err_clear_ints; + goto err_unlock;if (event &APPLE_CD_REG_INT_DATA_STATUS_UPDATE )if (!tps6598x_read_data_status (tps)) - goto err_clear_ints; + goto err_unlock;/* Handle plug insert or removal */ if (event &APPLE_CD_REG_INT_PLUG_EVENT )tps6598x_handle_plug_event (tps, status); -err_clear_ints: -tps6598x_write64 (tps,TPS_REG_INT_CLEAR1 , event); - err_unlock:mutex_unlock (&tps->lock);
@@ -555,25 +554,24 @@ static irqreturn_t tps6598x_interrupt(int irq, void *data)if (!(event1[0 ] | event1[1 ] | event2[0 ] | event2[1 ])) goto err_unlock; +tps6598x_block_write (tps,TPS_REG_INT_CLEAR1 , event1, intev_len); +tps6598x_block_write (tps,TPS_REG_INT_CLEAR2 , event2, intev_len); +if (!tps6598x_read_status (tps, &status)) - goto err_clear_ints; + goto err_unlock;if ((event1[0 ] | event2[0 ]) &TPS_REG_INT_POWER_STATUS_UPDATE )if (!tps6598x_read_power_status (tps)) - goto err_clear_ints; + goto err_unlock;if ((event1[0 ] | event2[0 ]) &TPS_REG_INT_DATA_STATUS_UPDATE )if (!tps6598x_read_data_status (tps)) - goto err_clear_ints; + goto err_unlock;/* Handle plug insert or removal */ if ((event1[0 ] | event2[0 ]) &TPS_REG_INT_PLUG_EVENT )tps6598x_handle_plug_event (tps, status); -err_clear_ints: -tps6598x_block_write (tps,TPS_REG_INT_CLEAR1 , event1, intev_len); -tps6598x_block_write (tps,TPS_REG_INT_CLEAR2 , event2, intev_len); - err_unlock:mutex_unlock (&tps->lock);
drivers/usb/usbip/vhci_hcd.c +22 -0
@@ -764,6 +764,17 @@ static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flag ctrlreq->wValue, vdev->rhport); vdev->udev =usb_get_dev (urb->dev); +/* +* NOTE: A similar operation has been done via +* USB_REQ_GET_DESCRIPTOR handler below, which is +* supposed to always precede USB_REQ_SET_ADDRESS. +* +* It's not entirely clear if operating on a different +* usb_device instance here is a real possibility, +* otherwise this call and vdev->udev assignment above +* should be dropped. +*/ +dev_pm_syscore_device (&vdev->udev->dev, true);usb_put_dev (old);spin_lock (&vdev->ud.lock);
@@ -784,6 +795,17 @@ static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flag "Not yet?:Get_Descriptor to device 0 (get max pipe size)\n"); vdev->udev =usb_get_dev (urb->dev); +/* +* Set syscore PM flag for the virtually attached +* devices to ensure they will not enter suspend on +* the client side. +* +* Note this doesn't have any impact on the physical +* devices attached to the host system on the server +* side, hence there is no need to undo the operation +* on disconnect. +*/ +dev_pm_syscore_device (&vdev->udev->dev, true);usb_put_dev (old); goto out;
drivers/vhost/vringh.c +8 -6
@@ -1162,6 +1162,7 @@ static inline int copy_from_iotlb(const struct vringh *vrh, void *dst,struct iov_iter iter;u64 translated;int ret; +size_t size; ret = iotlb_translate(vrh, (u64)(uintptr_t)src, len - total_translated, &translated,
@@ -1173,9 +1174,9 @@ static inline int copy_from_iotlb(const struct vringh *vrh, void *dst,iov_iter_bvec (&iter,ITER_SOURCE , iov, ret, translated); - ret =copy_from_iter (dst, translated, &iter); -if (ret <0 ) -return ret; + size =copy_from_iter (dst, translated, &iter); +if (size != translated) +return -EFAULT ; src += translated; dst += translated;
@@ -1195,6 +1196,7 @@ static inline int copy_to_iotlb(const struct vringh *vrh, void *dst,struct iov_iter iter;u64 translated;int ret; +size_t size; ret = iotlb_translate(vrh, (u64)(uintptr_t)dst, len - total_translated, &translated,
@@ -1206,9 +1208,9 @@ static inline int copy_to_iotlb(const struct vringh *vrh, void *dst,iov_iter_bvec (&iter,ITER_DEST , iov, ret, translated); - ret =copy_to_iter (src, translated, &iter); -if (ret <0 ) -return ret; + size =copy_to_iter (src, translated, &iter); +if (size != translated) +return -EFAULT ; src += translated; dst += translated;
drivers/watchdog/mpc8xxx_wdt.c +2 -0
@@ -100,6 +100,8 @@ static int mpc8xxx_wdt_start(struct watchdog_device *w) ddata->swtc = tmp >>16 ;set_bit (WDOG_HW_RUNNING , &ddata->wdd.status); +mpc8xxx_wdt_keepalive (ddata); +return 0 ; }
fs/btrfs/ref-verify.c +8 -1
@@ -987,11 +987,18 @@ int btrfs_build_ref_tree(struct btrfs_fs_info *fs_info)if (!btrfs_test_opt (fs_info,REF_VERIFY ))return 0 ; + extent_root =btrfs_extent_root (fs_info,0 ); +/* If the extent tree is damaged we cannot ignore it (IGNOREBADROOTS). */ +if (IS_ERR (extent_root)) { +btrfs_warn (fs_info,"ref-verify: extent tree not available, disabling" ); +btrfs_clear_opt (fs_info->mount_opt,REF_VERIFY ); +return 0 ; + } + path =btrfs_alloc_path ();if (!path)return -ENOMEM ; - extent_root =btrfs_extent_root (fs_info,0 ); eb =btrfs_read_lock_root_node (extent_root);
Lines of this file are not shown. View the raw message.
fs/smb/server/transport_rdma.c +85 -14
99 lines not on this page · raw message
include/linux/minmax.h +128 -94
222 lines not on this page · raw message
net/nfc/nci/ntf.c +99 -36
135 lines not on this page · raw message
sound/soc/intel/boards/bytcht_es8316.c +17 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/arm64/pauth/exec_target.c +6 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/test_tcpnotify_kern.c +0 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/test_tcpnotify_user.c +10 -10
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_connect.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/watchdog/watchdog-test.c +6 -0
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.