Linux 6.5.8
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.5.8 kernel.
All users of the 6.5 kernel series must upgrade.
The updated 6.5.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.5.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/interrupt-controller/renesas,rzg2l-irqc.yaml | 5 Documentation/devicetree/bindings/media/nxp,imx7-csi.yaml | 1 Documentation/filesystems/overlayfs.rst | 12 Makefile | 2 arch/arm64/boot/dts/mediatek/mt7622.dtsi | 2 arch/arm64/boot/dts/mediatek/mt7986a.dtsi | 2 arch/arm64/boot/dts/mediatek/mt8195-demo.dts | 39 ++- arch/arm64/boot/dts/mediatek/mt8195.dtsi | 1 arch/arm64/boot/dts/qcom/sm8150.dtsi | 2 arch/arm64/include/asm/acpi.h | 20 + arch/powerpc/include/asm/nohash/32/pte-8xx.h | 7 arch/powerpc/include/asm/nohash/64/pgtable.h | 2 arch/powerpc/include/asm/nohash/pgtable.h | 2 arch/powerpc/kernel/entry_32.S | 8 arch/powerpc/platforms/pseries/hvCall.S | 4 arch/riscv/Makefile | 1 arch/riscv/include/asm/kprobes.h | 11 arch/riscv/include/asm/uprobes.h | 13 - arch/riscv/kernel/irq.c | 4 arch/riscv/kernel/signal.c | 7 arch/riscv/kernel/traps.c | 28 +- arch/riscv/net/bpf_jit_comp64.c | 18 - arch/s390/net/bpf_jit_comp.c | 25 + arch/x86/events/utils.c | 5 arch/x86/include/asm/msr-index.h | 9 arch/x86/include/asm/smp.h | 2 arch/x86/kernel/alternative.c | 13 + arch/x86/kernel/cpu/amd.c | 8 arch/x86/kernel/smp.c | 39 --- arch/x86/kernel/smpboot.c | 27 -- block/fops.c | 21 + drivers/acpi/ec.c | 11 drivers/acpi/processor_idle.c | 3 drivers/acpi/resource.c | 26 +- drivers/android/binder.c | 2 drivers/ata/libata-core.c | 90 +++++++ drivers/ata/libata-eh.c | 54 ++++ drivers/ata/libata-scsi.c | 16 - drivers/ata/libata.h | 2 drivers/ata/pata_parport/pata_parport.c | 10 drivers/counter/counter-chrdev.c | 4 drivers/counter/microchip-tcb-capture.c | 2 drivers/dma-buf/dma-fence-unwrap.c | 13 - drivers/dma-buf/sync_file.c | 9 drivers/dma/idxd/device.c | 5 drivers/dma/mediatek/mtk-uart-apdma.c | 3 drivers/dma/stm32-dma.c | 11 drivers/dma/stm32-mdma.c | 33 +- drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 2 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c | 4 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c | 4 drivers/gpu/drm/amd/display/dc/core/dc.c | 3 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 35 ++ drivers/gpu/drm/amd/display/dc/inc/resource.h | 106 ++++++++ drivers/gpu/drm/drm_atomic_helper.c | 17 + drivers/gpu/drm/drm_gem.c | 6 drivers/gpu/drm/i915/i915_gem.c | 9 drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 27 +- drivers/gpu/drm/msm/dp/dp_ctrl.c | 13 - drivers/gpu/drm/msm/dp/dp_link.c | 4 drivers/gpu/drm/msm/dsi/dsi_host.c | 19 + drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c | 4 drivers/gpu/drm/scheduler/sched_main.c | 2 drivers/gpu/drm/tiny/simpledrm.c | 2 drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 7 drivers/gpu/drm/vmwgfx/vmwgfx_bo.h | 17 - drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c | 6 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 4 drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 12 drivers/gpu/drm/vmwgfx/vmwgfx_gem.c | 18 + drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 6 drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c | 2 drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 12 drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 4 drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 31 -- drivers/hid/hid-logitech-hidpp.c | 3 drivers/hwtracing/coresight/coresight-tmc-etr.c | 24 + drivers/iio/adc/ad7192.c | 29 +- drivers/iio/adc/imx8qxp-adc.c | 4 drivers/iio/addac/Kconfig | 2 drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c | 6 drivers/iio/dac/ad3552r.c | 4 drivers/iio/frequency/admv1013.c | 4 drivers/iio/imu/bno055/Kconfig | 2 drivers/iio/pressure/bmp280-core.c | 2 drivers/iio/pressure/dps310.c | 8 drivers/iio/pressure/ms5611_core.c | 2 drivers/infiniband/hw/cxgb4/cm.c | 3 drivers/input/joystick/xpad.c | 4 drivers/input/misc/powermate.c | 1 drivers/input/mouse/elantech.c | 1 drivers/input/mouse/synaptics.c | 1 drivers/input/serio/i8042-acpipnpio.h | 8 drivers/input/touchscreen/goodix.c | 19 + drivers/irqchip/irq-renesas-rzg2l.c | 2 drivers/mcb/mcb-core.c | 10 drivers/mcb/mcb-parse.c | 2 drivers/md/dm-crypt.c | 3 drivers/media/v4l2-core/v4l2-subdev.c | 7 drivers/net/can/Kconfig | 2 drivers/net/can/sja1000/sja1000.c | 8 drivers/net/dsa/qca/qca8k-8xxx.c | 15 + drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 5 drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c | 13 - drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c | 1 drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 3 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c | 4 drivers/net/ethernet/netronome/nfp/flower/cmsg.c | 10 drivers/net/ethernet/netronome/nfp/flower/conntrack.c | 19 + drivers/net/ethernet/netronome/nfp/flower/main.h | 2 drivers/net/ethernet/netronome/nfp/flower/metadata.c | 2 drivers/net/ethernet/netronome/nfp/flower/offload.c | 24 + drivers/net/ethernet/netronome/nfp/flower/qos_conf.c | 20 + drivers/net/ethernet/renesas/ravb_main.c | 6 drivers/net/ethernet/renesas/rswitch.c | 12 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 30 -- drivers/net/ieee802154/ca8210.c | 17 - drivers/net/macsec.c | 2 drivers/net/phy/mscc/mscc_macsec.c | 6 drivers/net/usb/dm9601.c | 7 drivers/net/xen-netback/interface.c | 4 drivers/perf/arm-cmn.c | 2 drivers/phy/freescale/phy-fsl-lynx-28g.c | 27 +- drivers/pinctrl/core.c | 16 - drivers/pinctrl/nuvoton/pinctrl-wpcm450.c | 6 drivers/pinctrl/renesas/Kconfig | 1 drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c | 2 drivers/platform/x86/hp/hp-wmi.c | 8 drivers/platform/x86/think-lmi.c | 24 + drivers/power/supply/qcom_battmgr.c | 8 drivers/s390/net/Kconfig | 2 drivers/scsi/scsi_scan.c | 11 drivers/tee/amdtee/core.c | 10 drivers/thunderbolt/icm.c | 40 +-- drivers/thunderbolt/switch.c | 7 drivers/thunderbolt/tmu.c | 2 drivers/thunderbolt/xdomain.c | 58 +++- drivers/tty/serial/8250/8250_omap.c | 25 - drivers/tty/serial/serial_core.c | 15 - drivers/ufs/core/ufshcd.c | 2 drivers/usb/cdns3/cdnsp-gadget.c | 3 drivers/usb/cdns3/core.h | 3 drivers/usb/core/hub.c | 25 + drivers/usb/core/hub.h | 2 drivers/usb/dwc3/core.c | 39 +++ drivers/usb/gadget/function/f_ncm.c | 26 +- drivers/usb/gadget/udc/udc-xilinx.c | 20 - drivers/usb/host/xhci-hub.c | 19 - drivers/usb/host/xhci-mem.c | 4 drivers/usb/host/xhci-ring.c | 16 - drivers/usb/host/xhci.h | 2 drivers/usb/misc/onboard_usb_hub.c | 1 drivers/usb/misc/onboard_usb_hub.h | 1 drivers/usb/musb/musb_debugfs.c | 2 drivers/usb/musb/musb_host.c | 9 drivers/usb/typec/altmodes/displayport.c | 5 drivers/usb/typec/tcpm/qcom/qcom_pmic_typec_pdphy.c | 12 drivers/usb/typec/ucsi/psy.c | 9 drivers/usb/typec/ucsi/ucsi.c | 2 fs/ceph/file.c | 2 fs/ceph/inode.c | 4 fs/file.c | 3 fs/fs_context.c | 46 +++ fs/ioctl.c | 10 fs/kernel_read_file.c | 12 fs/namei.c | 3 fs/open.c | 4 fs/overlayfs/ovl_entry.h | 10 fs/overlayfs/params.c | 126 ++++------ fs/overlayfs/super.c | 18 - fs/quota/dquot.c | 66 +++-- fs/smb/server/vfs_cache.c | 4 include/linux/acpi.h | 9 include/linux/dma-fence.h | 19 + include/linux/fs_context.h | 2 include/linux/libata.h | 6 include/linux/mcb.h | 1 include/linux/quota.h | 4 include/linux/quotaops.h | 2 include/net/macsec.h | 1 include/uapi/linux/if_packet.h | 6 kernel/bpf/verifier.c | 6 kernel/cgroup/cgroup-v1.c | 5 kernel/workqueue.c | 8 net/can/isotp.c | 19 - net/ceph/messenger.c | 4 net/core/dev.c | 8 net/devlink/health.c | 30 +- net/ipv4/tcp_output.c | 1 net/mctp/route.c | 22 + net/netfilter/ipvs/ip_vs_sync.c | 4 net/nfc/llcp_core.c | 30 -- net/nfc/nci/core.c | 5 net/packet/af_packet.c | 7 net/rds/tcp_connect.c | 2 net/rds/tcp_listen.c | 2 net/smc/Kconfig | 1 net/smc/smc_stats.h | 14 - net/socket.c | 6 net/xdp/xsk_queue.c | 10 security/keys/trusted-keys/trusted_core.c | 13 - sound/pci/hda/cs35l41_hda.c | 115 ++++++--- sound/pci/hda/patch_realtek.c | 89 ++++++- sound/soc/amd/yc/acp6x-mach.c | 7 sound/soc/codecs/hdmi-codec.c | 5 sound/soc/fsl/fsl_sai.c | 9 sound/soc/generic/simple-card-utils.c | 3 sound/soc/intel/boards/sof_es8336.c | 10 sound/soc/intel/boards/sof_sdw.c | 10 sound/soc/intel/common/soc-acpi-intel-adl-match.c | 12 sound/soc/intel/common/soc-acpi-intel-mtl-match.c | 25 + sound/soc/sof/amd/pci-rmb.c | 1 sound/usb/mixer.c | 7 sound/usb/quirks.c | 8 216 files changed, 1870 insertions(+), 830 deletions(-)
Abhinav Kumar (3):
drm/msm/dsi: skip the wait for video mode done if not applicable drm/msm/dpu: change _dpu_plane_calc_bw() to use u64 to avoid overflow drm/msm/dpu: fail dpu_plane_atomic_check() based on mdp clk limits
Alexander Zangerl (1):
iio: pressure: ms5611: ms5611_prom_is_valid false negative bug
Alisa-Dariana Roman (1):
iio: adc: ad7192: Correct reference voltage
Amelie Delaunay (5):
dmaengine: stm32-mdma: abort resume if no ongoing transfer
dmaengine: stm32-dma: fix stm32_dma_prep_slave_sg in case of MDMA chaining
dmaengine: stm32-dma: fix residue in case of MDMA chaining
dmaengine: stm32-mdma: use Link Address Register to compute residue
dmaengine: stm32-mdma: set in_flight_bytes in case CRQA flag is set
Amir Goldstein (5):
ovl: temporarily disable appending lowedirs
fs: factor out vfs_parse_monolithic_sep() helper
ovl: fix regression in parsing of mount options with escaped comma
ovl: make use of ->layers safe in rcu pathwalk
ovl: fix regression in showing lowerdir mount option
Andrew Kanner (1):
xdp: Fix zero-size allocation warning in xskq_create()
Andy Chiu (1):
riscv: signal: fix sigaltstack frame size checking
Antoniu Miclaus (2):
iio: admv1013: add mixer_vgate corner cases
iio: addac: Kconfig: update ad74413r selections
Armin Wolf (1):
platform/x86: think-lmi: Fix reference leak
Artem Chernyshev (1):
RDMA/cxgb4: Check skb value for failure to allocate
Athira Rajeev (1):
powerpc/pseries: Fix STK_PARAM access in the hcall tracing code
Balamurugan C (2):
ASoC: Intel: soc-acpi: Add entry for HDMI_In capture support in MTL match table
ASoC: Intel: soc-acpi: Add entry for sof_es8336 in MTL match table.
Biju Das (1):
irqchip: renesas-rzg2l: Fix logic to clear TINT interrupt source
Björn Töpel (3):
riscv, bpf: Sign-extend return values
riscv, bpf: Track both a0 (RISC-V ABI) and a5 (BPF) return values
riscv: Only consider swbp/ss handlers for correct privileged mode
Borislav Petkov (AMD) (1):
x86/cpu: Fix AMD erratum #1485 on Zen4-based CPUs
Carlos Llamas (1):
binder: fix memory leaks of spam and pending work
Christian König (2):
drm/amdgpu: add missing NULL check
dma-buf: add dma_fence_timestamp helper
Christophe Leroy (2):
powerpc/8xx: Fix pte_access_permitted() for PAGE_NONE powerpc/64e: Fix wrong test in __ptep_test_and_clear_young()
Christos Skevis (1):
ALSA: usb-audio: Fix microphone sound on Nexigo webcam.
Damien Le Moal (2):
scsi: Do not rescan devices with a suspended queue
ata: libata-scsi: Disable scsi device manage_system_start_stop
Dan Carpenter (4):
drm/msm/dsi: fix irq_of_parse_and_map() error checking
mlxsw: fix mlxsw_sp2_nve_vxlan_learning_set() return type
ixgbe: fix crash with empty VF macvlan list
ceph: fix type promotion bug on 32bit systems
Daniel Miess (1):
drm/amd/display: Don't set dpms_off for seamless boot
David Vernet (1):
bpf: Fix verifier log for async callback return values
Dharma Balasubiramani (1):
counter: microchip-tcb-capture: Fix the use of internal GCLK logic
Dinghao Liu (1):
ieee802154: ca8210: Fix a potential UAF in ca8210_probe
Dmitry Baryshkov (1):
arm64: dts: qcom: sm8150: extend the size of the PDC resource
Dmitry Torokhov (1):
pinctrl: avoid unsafe code pattern in find_pinctrl()
Duoming Zhou (1):
dmaengine: mediatek: Fix deadlock caused by synchronize_irq()
Eric Dumazet (2):
net: refine debug info in skb_checksum_help()
net: nfc: fix races in nfc_llcp_sock_get() and nfc_llcp_sock_get_sn()
Eugen Hristev (1):
arm64: dts: mediatek: fix t-phy unit name
Fabian Vogt (1):
ALSA: hda/realtek: Add quirk for mute LEDs on HP ENVY x360 15-eu0xxx
Fabio Estevam (1):
media: dt-bindings: imx7-csi: Make power-domains not required for imx8mq
Fabrice Gasnier (1):
counter: chrdev: fix getting array extensions
Gerd Bayer (1):
net/smc: Fix dependency of SMC on ISM
Greg Kroah-Hartman (1):
Linux 6.5.8
Hal Feng (1):
pinctrl: starfive: jh7110: Fix failure to set irq after CONFIG_PM is enabled
Hans de Goede (6):
HID: logitech-hidpp: Fix kernel crash on receiver USB disconnect
media: subdev: Don't report V4L2_SUBDEV_CAP_STREAMS when the streams API is disabled
ACPI: resource: Skip IRQ override on ASUS ExpertBook B1402CBA
ACPI: resource: Add TongFang GM6BGEQ, GM6BG5Q and GM6BG0Q to irq1_edge_low_force_override[]
ACPI: EC: Add quirk for the HP Pavilion Gaming 15-dk1xxx
Input: goodix - ensure int GPIO is in input for gpio_count == 1 && gpio_int_idx == 0 case
Heikki Krogerus (1):
usb: typec: ucsi: Fix missing link removal
Herbert Xu (1):
dm crypt: Fix reqsize in crypt_iv_eboiv_gen
Hui Liu (1):
usb: typec: qcom: Update the logic of regulator enable and disable
Ilya Leoshkevich (2):
s390/bpf: Fix clobbering the caller's backchain in the trampoline s390/bpf: Fix unwinding past the trampoline
Ioana Ciornei (1):
phy: lynx-28g: cancel the CDR check work item on the remove path
JP Kobryn (1):
perf/x86/lbr: Filter vsyscall addresses
Jakub Kicinski (1):
net: tcp: fix crashes trying to free half-baked MTU probes
Jan Kara (1):
quota: Fix slow quotaoff
Javier Carrasco (3):
net: usb: dm9601: fix uninitialized variable use in dm9601_mdio_read
Input: powermate - fix use-after-free in powermate_config_complete
usb: misc: onboard_hub: add support for Microchip USB2412 USB 2.0 hub
Jeffery Miller (1):
Input: psmouse - fix fast_reconnect function for PS/2 mode
Jeremy Cline (1):
nfc: nci: assert requested protocol is valid
Jeremy Kerr (1):
mctp: perform route lookups under a RCU read-side lock
Jiexun Wang (1):
RISC-V: Fix wrong use of CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK
Jing Zhang (1):
perf/arm-cmn: Fix the unhandled overflow status of counter 4 to 7
Joey Gouly (1):
drm/tiny: correctly print struct resource * on error
Johan Hovold (1):
power: supply: qcom_battmgr: fix enable request endianness
John Watts (1):
can: sun4i_can: Only show Kconfig if ARCH_SUNXI is set
Jonathan Cameron (1):
iio: imu: bno055: Fix missing Kconfig dependencies
Jordan Rife (2):
net: prevent address rewrite in kernel_bind()
libceph: use kernel_connect()
Jorge Sanjuan Garcia (1):
mcb: remove is_added flag from mcb_device struct
Kailang Yang (4):
ALSA: hda/realtek: Change model for Intel RVP board
ALSA: hda/realtek - ALC287 I2S speaker platform support
ALSA: hda/realtek - ALC287 merge RTK codec with CS CS35L41 AMP
ALSA: hda/realtek - Fixed two speaker platform
Kirill A. Shutemov (1):
x86/alternatives: Disable KASAN in apply_alternatives()
Konstantin Meskhidze (1):
drm/vmwgfx: fix typo of sizeof argument
Krishna Kurapati (1):
usb: gadget: ncm: Handle decoding of multiple NTB's in unwrap call
Kuninori Morimoto (1):
ASoC: simple-card-utils: fixup simple_util_startup() error handling
Kuniyuki Iwashima (1):
af_packet: Fix fortified memcpy() without flex array.
Kuogee Hsieh (1):
drm/msm/dp: do not reinitialize phy unless retry during link training
Lad Prabhakar (1):
dt-bindings: interrupt-controller: renesas,rzg2l-irqc: Update description for '#interrupt-cells' property
Lakshmi Yadlapati (1):
iio: pressure: dps310: Adjust Timeout Settings
Linu Cherian (1):
coresight: Fix run time warnings while reusing ETR buffer
Linus Torvalds (1):
Revert "x86/smp: Put CPUs into INIT on shutdown if possible"
Luben Tuikov (1):
drm/amdgpu: Fix a memory leak
Lukas Magel (1):
can: isotp: isotp_sendmsg(): fix TX state detection and wait behavior
Lukas Wunner (3):
xhci: Clear EHB bit only at end of interrupt handler
xhci: Preserve RsvdP bits in ERSTBA register correctly
serial: Reduce spinlocked portion of uart_rs485_config()
Macpaul Lin (2):
arm64: dts: mediatek: mt8195-demo: fix the memory size to 8GB
arm64: dts: mediatek: mt8195-demo: update and reorder reserved memory regions
Marcelo Schmitt (1):
iio: dac: ad3552r: Correct device IDs
Marek Behún (2):
net: dsa: qca8k: fix regmap bulk read/write methods on big endian systems
net: dsa: qca8k: fix potential MDIO bus conflict when accessing internal PHYs via management frames
Mario Limonciello (1):
usb: typec: ucsi: Use GET_CAPABILITY attributes data to set power supply scope
Mathias Krause (1):
drm/i915: Register engines early to avoid type confusion
Mathias Nyman (1):
xhci: track port suspend state correctly in unsuccessful resume cases
Matthew Wilcox (Oracle) (2):
drm: Do not overrun array in drm_gem_get_pages()
fs: Fix kernel-doc warnings
Matthias Berndt (1):
Input: xpad - add PXN V900 support
Matthias Reichl (1):
ASoC: hdmi-codec: Fix broken channel map reporting
Max Nguyen (1):
Input: xpad - add HyperX Clutch Gladiate Support
Michael Ellerman (1):
powerpc/47x: Fix 47x syscall return crash
Michal Koutný (1):
cgroup: Remove duplicates in cgroup v1 tasks file
Mika Westerberg (4):
thunderbolt: Workaround an IOMMU fault on certain systems with Intel Maple Ridge
thunderbolt: Check that lane 1 is in CL0 before enabling lane bonding
thunderbolt: Correct TMU mode initialization from hardware
thunderbolt: Restart XDomain discovery handshake after failure
Mikhail Kobuk (1):
pinctrl: nuvoton: wpcm450: fix out of bounds write
Miquel Raynal (1):
can: sja1000: Always restart the Tx queue after an overrun
Moshe Shemesh (1):
devlink: Hold devlink lock on health reporter dump get
Namjae Jeon (1):
ksmbd: not allow to open file if delelete on close bit is set
Nils Hoppmann (1):
net/smc: Fix pos miscalculation in statistics
Nícolas F. R. A. Prado (1):
arm64: dts: mediatek: mt8195: Set DSU PMU status to fail
Ondrej Zary (2):
ata: pata_parport: fix pata_parport_devchk
ata: pata_parport: implement set_devctl
Oza Pawandeep (1):
cpuidle, ACPI: Evaluate LPI arch_flags for broadcast timer
Pawel Laszczak (1):
usb: cdnsp: Fixes issue with dequeuing not queued requests
Peter Wang (1):
scsi: ufs: core: Correct clear TM error log
Phil Elwell (1):
iio: pressure: bmp280: Fix NULL pointer exception
Philipp Rossak (1):
iio: adc: imx8qxp: Fix address for command buffer registers
Pierre-Louis Bossart (2):
ASoC: Intel: soc-acpi: fix Dell SKU 0B34
ASoC: Intel: sof_sdw: add support for SKU 0B14
Piyush Mehta (1):
usb: gadget: udc-xilinx: replace memcpy with memcpy_toio
Prashanth K (1):
usb: typec: ucsi: Clear EVENT_PENDING bit if ucsi_send_command fails
RD Babiera (1):
usb: typec: altmodes/displayport: Signal hpd low when exiting mode
Radu Pirea (NXP OSS) (4):
octeontx2-pf: mcs: update PN only when update_pn is true
net: macsec: indicate next pn update when offloading
net: phy: mscc: macsec: reject PN update requests net/mlx5e: macsec: use update_pn flag instead of PN comparation
Ralph Siemsen (1):
pinctrl: renesas: rzn1: Enable missing PINMUX
Ratheesh Kannoth (1):
octeontx2-pf: Fix page pool frag allocation warning
Remi Pommarel (1):
net: stmmac: remove unneeded stmmac_poll_controller
Rex Zhang (1):
dmaengine: idxd: use spin_lock_irqsave before wait_event_lock_irq
Ricardo Cañuelo (1):
usb: hub: Guard against accesses to uninitialized BOS descriptors
Rijo Thomas (1):
tee: amdtee: fix use-after-free vulnerability in amdtee_close_session
Roger Pau Monne (1):
xen-netback: use default TX queue size for vifs
Ruihai Zhou (1):
drm/panel: boe-tv101wum-nl6: Completely pull GPW to VGL before TP term
Samson Tam (1):
drm/amd/display: apply edge-case DISPCLK WDIVIDER changes to master OTG pipes only
Sarthak Kukreti (1):
block: Don't invalidate pagecache for invalid falloc modes
Sebastian Reichel (1):
power: supply: qcom_battmgr: fix battery_id type
Shengjiu Wang (1):
ASoC: fsl_sai: Don't disable bitclock for i.MX8MP
Simon Ser (1):
drm/atomic-helper: relax unregistered connector check
Song Shuai (1):
riscv: Remove duplicate objcopy flag
Stefan Binding (1):
ALSA: hda: cs35l41: Cleanup and fix double free in firmware request
Stephen Boyd (1):
drm/msm/dp: Add newlines to debug printks
Sumit Garg (1):
KEYS: trusted: Remove redundant static calls usage
SungHwan Jung (1):
ALSA: hda/realtek: Add quirk for HP Victus 16-d1xxx to enable mute LED
Sven Frotscher (1):
ASoC: amd: yc: Fix non-functional mic on Lenovo 82YM
Szilard Fabian (1):
Input: i8042 - add Fujitsu Lifebook E5411 to i8042 quirk table
Thinh Nguyen (1):
usb: dwc3: Soft reset phy on probe for host
Tony Lindgren (2):
serial: 8250_omap: Fix errors with no_console_suspend
serial: core: Fix checks for tx runtime PM state
Tzung-Bi Shih (1):
iio: cros_ec: fix an use-after-free in cros_ec_sensors_push_data()
Uwe Kleine-König (1):
platform/x86: hp-wmi:: Mark driver struct with __refdata to prevent section mismatch warning
Vijendar Mukunda (1):
ASoC: SOF: amd: fix for firmware reload failure after playback
Vladimir Oltean (2):
phy: lynx-28g: lock PHY while performing CDR lock workaround
phy: lynx-28g: serialize concurrent phy_set_mode_ext() calls to shared registers
Waiman Long (1):
workqueue: Override implicit ordered attribute in workqueue_apply_unbound_cpumask()
Wenjing Liu (1):
drm/amd/display: implement pipe type definition and adding accessors
Wesley Cheng (1):
usb: xhci: xhci-ring: Use sysdev for mapping bounce buffer
WhaleChang (1):
ALSA: usb-audio: Fix microphone sound on Opencomm2 Headset
Will Mortensen (1):
net/mlx5e: Again mutually exclude RX-FCS and RX-port-timestamp
Xiaolei Wang (1):
usb: cdns3: Modify the return value of cdns_set_active () to void when CONFIG_PM_SLEEP is disabled
Xingxing Luo (2):
usb: musb: Get the musb_qh poniter after musb_giveback
usb: musb: Modify the "HWVers" register address
Xiubo Li (1):
ceph: fix incorrect revoked caps assert in ceph_fill_file_size()
Yanguo Li (1):
nfp: flower: avoid rmmod nfp crash issues
Yoshihiro Shimoda (4):
ravb: Fix up dma_free_coherent() call in ravb_remove()
ravb: Fix use-after-free issue in ravb_tx_timeout_work()
rswitch: Fix renesas_eth_sw_remove() implementation
rswitch: Fix imbalance phy_power_off() calling
Zack Rusin (1):
drm/vmwgfx: Keep a gem reference to user bos in surfaces
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/interrupt-controller/renesas,rzg2l-irqc.yaml +3 -2
@@ -31,8 +31,9 @@ properties: - const: renesas,rzg2l-irqc '#interrupt-cells': - description: The first cell should contain external interrupt number (IRQ0-7) and the - second cell is used to specify the flag. + description: The first cell should contain a macro RZG2L_{NMI,IRQX} included in the + include/dt-bindings/interrupt-controller/irqc-rzg2l.h and the second + cell is used to specify the flag. const: 2 '#address-cells':
Documentation/devicetree/bindings/media/nxp,imx7-csi.yaml +0 -1
@@ -59,7 +59,6 @@ allOf: compatible: contains: enum: - - fsl,imx8mq-csi - fsl,imx8mm-csi then: required:
Documentation/filesystems/overlayfs.rst +12 -0
@@ -339,6 +339,18 @@ The specified lower directories will be stacked beginning from the rightmost one and going left. In the above example lower1 will be the top, lower2 the middle and lower3 the bottom layer. +Note: directory names containing colons can be provided as lower layer by +escaping the colons with a single backslash. For example: + + mount -t overlay overlay -olowerdir=/a\:lower\:\:dir /merged + +Since kernel version v6.5, directory names containing colons can also +be provided as lower layer using the fsconfig syscall from new mount api: + + fsconfig(fs_fd, FSCONFIG_SET_STRING, "lowerdir", "/a:lower::dir", 0); + +In the latter case, colons in lower layer directory names will be escaped +as an octal characters (\072) when displayed in /proc/self/mountinfo. Metadata only copy up ---------------------
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 5 -SUBLEVEL = 7 +SUBLEVEL = 8 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm64/boot/dts/mediatek/mt7622.dtsi +1 -1
@@ -905,7 +905,7 @@ sata: sata@1a200000 { status = "disabled"; }; - sata_phy: t-phy@1a243000 { + sata_phy: t-phy { compatible = "mediatek,mt7622-tphy", "mediatek,generic-tphy-v1"; #address-cells = <2>;
arch/arm64/boot/dts/mediatek/mt7986a.dtsi +1 -1
@@ -434,7 +434,7 @@ pcie_intc: interrupt-controller { }; }; - pcie_phy: t-phy@11c00000 { + pcie_phy: t-phy { compatible = "mediatek,mt7986-tphy", "mediatek,generic-tphy-v2"; #address-cells = <2>;
arch/arm64/boot/dts/mediatek/mt8195-demo.dts +31 -8
@@ -48,7 +48,7 @@ key-0 { memory@40000000 { device_type = "memory"; - reg = <0 0x40000000 0 0x80000000>; + reg = <0 0x40000000 0x2 0x00000000>; }; reserved-memory {
@@ -56,13 +56,8 @@ reserved-memory { #size-cells = <2>; ranges; - /* 2 MiB reserved for ARM Trusted Firmware (BL31) */ - bl31_secmon_reserved: secmon@54600000 { - no-map; - reg = <0 0x54600000 0x0 0x200000>; - }; - - /* 12 MiB reserved for OP-TEE (BL32) + /* + * 12 MiB reserved for OP-TEE (BL32) * +-----------------------+ 0x43e0_0000 * | SHMEM 2MiB | * +-----------------------+ 0x43c0_0000
@@ -75,6 +70,34 @@ optee_reserved: optee@43200000 { no-map; reg = <0 0x43200000 0 0x00c00000>; }; + + scp_mem: memory@50000000 { + compatible = "shared-dma-pool"; + reg = <0 0x50000000 0 0x2900000>; + no-map; + }; + + vpu_mem: memory@53000000 { + compatible = "shared-dma-pool"; + reg = <0 0x53000000 0 0x1400000>; /* 20 MB */ + }; + + /* 2 MiB reserved for ARM Trusted Firmware (BL31) */ + bl31_secmon_mem: memory@54600000 { + no-map; + reg = <0 0x54600000 0x0 0x200000>; + }; + + snd_dma_mem: memory@60000000 { + compatible = "shared-dma-pool"; + reg = <0 0x60000000 0 0x1100000>; + no-map; + }; + + apu_mem: memory@62000000 { + compatible = "shared-dma-pool"; + reg = <0 0x62000000 0 0x1400000>; /* 20 MB */ + }; }; };
arch/arm64/boot/dts/mediatek/mt8195.dtsi +1 -0
@@ -313,6 +313,7 @@ dsu-pmu { interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH 0>; cpus = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>, <&cpu4>, <&cpu5>, <&cpu6>, <&cpu7>; + status = "fail"; }; dmic_codec: dmic-codec {
arch/arm64/boot/dts/qcom/sm8150.dtsi +1 -1
@@ -3958,7 +3958,7 @@ dispcc: clock-controller@af00000 { pdc: interrupt-controller@b220000 { compatible = "qcom,sm8150-pdc", "qcom,pdc"; - reg = <0 0x0b220000 0 0x400>; + reg = <0 0x0b220000 0 0x30000>; qcom,pdc-ranges = <0 480 94>, <94 609 31>, <125 63 1>; #interrupt-cells = <2>;
arch/arm64/include/asm/acpi.h +20 -0
@@ -9,6 +9,7 @@#ifndef _ASM_ACPI_H#define _ASM_ACPI_H +#include <linux/cpuidle.h> #include <linux/efi.h> #include <linux/memblock.h> #include <linux/psci.h>
@@ -42,6 +43,25 @@#define ACPI_MADT_GICC_SPE (offsetof(struct acpi_madt_generic_interrupt, \ spe_interrupt) + sizeof(u16)) +/* +* Arm® Functional Fixed Hardware Specification Version 1.2. +* Table 2: Arm Architecture context loss flags +*/ +#define CPUIDLE_CORE_CTXT BIT(0)/* Core context Lost */ + +static inline unsigned int arch_get_idle_state_flags (u32 arch_flags) +{ +if (arch_flags &CPUIDLE_CORE_CTXT ) +return CPUIDLE_FLAG_TIMER_STOP ; + +return 0 ; +} +#define arch_get_idle_state_flags arch_get_idle_state_flags + +#define CPUIDLE_TRACE_CTXT BIT(1)/* Trace context loss */ +#define CPUIDLE_GICR_CTXT BIT(2)/* GICR */ +#define CPUIDLE_GICD_CTXT BIT(3)/* GICD */ +/* Basic configuration for ACPI */ #ifdef CONFIG_ACPI pgprot_t __acpi_get_mem_attribute (phys_addr_t addr);
arch/powerpc/include/asm/nohash/32/pte-8xx.h +7 -0
@@ -94,6 +94,13 @@ static inline pte_t pte_wrprotect(pte_t pte)#define pte_wrprotect pte_wrprotect +static inline int pte_read (pte_t pte) +{ +return (pte_val (pte) & _PAGE_RO) != _PAGE_NA; +} + +#define pte_read pte_read +static inline int pte_write (pte_t pte) {return !(pte_val (pte) & _PAGE_RO);
arch/powerpc/include/asm/nohash/64/pgtable.h +1 -1
@@ -197,7 +197,7 @@ static inline int __ptep_test_and_clear_young(struct mm_struct *mm, {unsigned long old; -if (pte_young (*ptep)) +if (!pte_young (*ptep))return 0 ; old =pte_update (mm, addr, ptep, _PAGE_ACCESSED,0 ,0 );return (old & _PAGE_ACCESSED) !=0 ;
arch/powerpc/include/asm/nohash/pgtable.h +2 -0
@@ -25,7 +25,9 @@ static inline int pte_write(pte_t pte) return pte_val(pte) & _PAGE_RW; }#endif +#ifndef pte_readstatic inline int pte_read (pte_t pte) {return 1 ; } +#endif static inline int pte_dirty (pte_t pte) {return pte_val (pte) & _PAGE_DIRTY; }static inline int pte_special (pte_t pte) {return pte_val (pte) & _PAGE_SPECIAL; }static inline int pte_none (pte_t pte) {return (pte_val (pte) & ~_PTE_NONE_MASK) ==0 ; }
arch/powerpc/kernel/entry_32.S +5 -3
@@ -138,8 +138,9 @@ ret_from_syscall: lis r4,icache_44x_need_flush@ha lwz r5,icache_44x_need_flush@l(r4) cmplwi cr0,r5,0 - bne- 2f + bne- .L44x_icache_flush #endif /* CONFIG_PPC_47x */ +.L44x_icache_flush_return: kuep_unlock lwz r4,_LINK(r1) lwz r5,_CCR(r1)
@@ -173,10 +174,11 @@ syscall_exit_finish: b 1b #ifdef CONFIG_44x -2: li r7,0 +.L44x_icache_flush: + li r7,0 iccci r0,r0 stw r7,icache_44x_need_flush@l(r4) - b 1b + b .L44x_icache_flush_return #endif /* CONFIG_44x */ .globl ret_from_fork
arch/powerpc/platforms/pseries/hvCall.S +1 -3
@@ -185,7 +185,6 @@ _GLOBAL_TOC(plpar_hcall) plpar_hcall_trace: HCALL_INST_PRECALL(R5) - std r4,STK_PARAM(R4)(r1) mr r0,r4 mr r4,r5
@@ -197,7 +196,7 @@ plpar_hcall_trace: HVSC - ld r12,STK_PARAM(R4)(r1) + ld r12,STACK_FRAME_MIN_SIZE+STK_PARAM(R4)(r1) std r4,0(r12) std r5,8(r12) std r6,16(r12)
@@ -297,7 +296,6 @@ _GLOBAL_TOC(plpar_hcall9) plpar_hcall9_trace: HCALL_INST_PRECALL(R5) - std r4,STK_PARAM(R4)(r1) mr r0,r4 mr r4,r5
arch/riscv/Makefile +0 -1
@@ -6,7 +6,6 @@ # for more details. # -OBJCOPYFLAGS := -O binary LDFLAGS_vmlinux := -z norelro ifeq ($(CONFIG_RELOCATABLE),y) LDFLAGS_vmlinux += -shared -Bsymbolic -z notext --emit-relocs
arch/riscv/include/asm/kprobes.h +10 -1
@@ -40,6 +40,15 @@ void arch_remove_kprobe(struct kprobe *p);int kprobe_fault_handler (struct pt_regs *regs,unsigned int trapnr);bool kprobe_breakpoint_handler (struct pt_regs *regs);bool kprobe_single_step_handler (struct pt_regs *regs); - +#else +static inline bool kprobe_breakpoint_handler (struct pt_regs *regs) +{ +return false; +} + +static inline bool kprobe_single_step_handler (struct pt_regs *regs) +{ +return false; +}#endif /* CONFIG_KPROBES */ #endif /* _ASM_RISCV_KPROBES_H */
arch/riscv/include/asm/uprobes.h +12 -1
@@ -34,7 +34,18 @@ struct arch_uprobe { bool simulate; }; +#ifdef CONFIG_UPROBES bool uprobe_breakpoint_handler (struct pt_regs *regs);bool uprobe_single_step_handler (struct pt_regs *regs); - +#else +static inline bool uprobe_breakpoint_handler (struct pt_regs *regs) +{ +return false; +} + +static inline bool uprobe_single_step_handler (struct pt_regs *regs) +{ +return false; +} +#endif /* CONFIG_UPROBES */ #endif /* _ASM_RISCV_UPROBES_H */
arch/riscv/kernel/irq.c +2 -2
@@ -60,7 +60,7 @@ static void init_irq_stacks(void) }#endif /* CONFIG_VMAP_STACK */ -#ifdef CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK +#ifdef CONFIG_SOFTIRQ_ON_OWN_STACK void do_softirq_own_stack (void ) {#ifdef CONFIG_IRQ_STACKS
@@ -92,7 +92,7 @@ void do_softirq_own_stack(void)#endif __do_softirq(); } -#endif /* CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK */ +#endif /* CONFIG_SOFTIRQ_ON_OWN_STACK */ #else static void init_irq_stacks (void ) {}
arch/riscv/kernel/signal.c +0 -7
@@ -311,13 +311,6 @@ static inline void __user *get_sigframe(struct ksignal *ksig,/* Align the stack frame. */ sp &= ~0xfUL ; -/* -* Fail if the size of the altstack is not large enough for the -* sigframe construction. -*/ -if (current->sas_ss_size && sp < current->sas_ss_sp) -return (void __user __force *)-1UL ; -return (void __user *)sp; }
arch/riscv/kernel/traps.c +18 -10
@@ -13,6 +13,8 @@#include <linux/kdebug.h> #include <linux/uaccess.h> #include <linux/kprobes.h> +#include <linux/uprobes.h> +#include <asm/uprobes.h> #include <linux/mm.h> #include <linux/module.h> #include <linux/irq.h>
@@ -246,22 +248,28 @@ static inline unsigned long get_break_insn_length(unsigned long pc)return GET_INSN_LENGTH (insn); } +static bool probe_single_step_handler (struct pt_regs *regs) +{ +bool user =user_mode (regs); + +return user ?uprobe_single_step_handler (regs) :kprobe_single_step_handler (regs); +} + +static bool probe_breakpoint_handler (struct pt_regs *regs) +{ +bool user =user_mode (regs); + +return user ?uprobe_breakpoint_handler (regs) :kprobe_breakpoint_handler (regs); +} +void handle_break (struct pt_regs *regs) { -#ifdef CONFIG_KPROBES -if (kprobe_single_step_handler (regs)) +if (probe_single_step_handler (regs))return ; -if (kprobe_breakpoint_handler (regs)) -return ; -#endif -#ifdef CONFIG_UPROBES -if (uprobe_single_step_handler (regs)) +if (probe_breakpoint_handler (regs))return ; -if (uprobe_breakpoint_handler (regs)) -return ; -#endif current->thread.bad_cause = regs->cause;if (user_mode (regs))
arch/riscv/net/bpf_jit_comp64.c +12 -6
@@ -239,7 +239,7 @@ static void __build_epilogue(bool is_tail_call, struct rv_jit_context *ctx)emit_addi (RV_REG_SP ,RV_REG_SP , stack_adjust, ctx);/* Set return value. */ if (!is_tail_call) -emit_mv (RV_REG_A0 ,RV_REG_A5 , ctx); +emit_addiw (RV_REG_A0 ,RV_REG_A5 ,0 , ctx);emit_jalr (RV_REG_ZERO , is_tail_call ?RV_REG_T3 :RV_REG_RA , is_tail_call ?20 :0 ,/* skip reserved nops and TCC init */ ctx);
@@ -757,8 +757,10 @@ static int invoke_bpf_prog(struct bpf_tramp_link *l, int args_off, int retval_ofif (ret)return ret; -if (save_ret) -emit_sd (RV_REG_FP , -retval_off, regmap[BPF_REG_0 ], ctx); +if (save_ret) { +emit_sd (RV_REG_FP , -retval_off,RV_REG_A0 , ctx); +emit_sd (RV_REG_FP , -(retval_off -8 ), regmap[BPF_REG_0 ], ctx); + }/* update branch with beqz */ if (ctx->insns) {
@@ -844,7 +846,7 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, save_ret = flags & (BPF_TRAMP_F_CALL_ORIG |BPF_TRAMP_F_RET_FENTRY_RET );if (save_ret) { - stack_size +=8 ; + stack_size +=16 ;/* Save both A5 (BPF R0) and A0 */ retval_off = stack_size; }
@@ -931,6 +933,7 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,if (ret) goto out;emit_sd (RV_REG_FP , -retval_off,RV_REG_A0 , ctx); +emit_sd (RV_REG_FP , -(retval_off -8 ), regmap[BPF_REG_0 ], ctx); im->ip_after_call = ctx->insns + ctx->ninsns;/* 2 nops reserved for auipc+jalr pair */ emit (rv_nop (), ctx);
@@ -962,8 +965,10 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,if (flags &BPF_TRAMP_F_RESTORE_REGS )restore_args (nregs, args_off, ctx); -if (save_ret) +if (save_ret) {emit_ld (RV_REG_A0 , -retval_off,RV_REG_FP , ctx); +emit_ld (regmap[BPF_REG_0 ], -(retval_off -8 ),RV_REG_FP , ctx); + }emit_ld (RV_REG_S1 , -sreg_off,RV_REG_FP , ctx);
@@ -1436,7 +1441,8 @@ int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx,if (ret)return ret; -emit_mv (bpf_to_rv_reg (BPF_REG_0 , ctx),RV_REG_A0 , ctx); +if (insn->src_reg !=BPF_PSEUDO_CALL ) +emit_mv (bpf_to_rv_reg (BPF_REG_0 , ctx),RV_REG_A0 , ctx);break ; }/* tail call */
arch/s390/net/bpf_jit_comp.c +20 -5
@@ -2066,6 +2066,7 @@ struct bpf_tramp_jit {* func_addr's original caller */ int stack_size;/* Trampoline stack size */ +int backchain_off;/* Offset of backchain */ int stack_args_off;/* Offset of stack arguments for calling * func_addr, has to be at the top */
@@ -2086,9 +2087,10 @@ struct bpf_tramp_jit {* for __bpf_prog_enter() return value and * func_addr respectively */ -int r14_off;/* Offset of saved %r14 */ int run_ctx_off;/* Offset of struct bpf_tramp_run_ctx */ int tccnt_off;/* Offset of saved tailcall counter */ +int r14_off;/* Offset of saved %r14, has to be at the +* bottom */ int do_fexit;/* do_fexit: label */ };
@@ -2247,8 +2249,12 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,* Calculate the stack layout. */ -/* Reserve STACK_FRAME_OVERHEAD bytes for the callees. */ +/* +* Allocate STACK_FRAME_OVERHEAD bytes for the callees. As the s390x +* ABI requires, put our backchain at the end of the allocated memory. +*/ tjit->stack_size =STACK_FRAME_OVERHEAD ; + tjit->backchain_off = tjit->stack_size -sizeof (u64); tjit->stack_args_off =alloc_stack (tjit, nr_stack_args *sizeof (u64)); tjit->reg_args_off =alloc_stack (tjit, nr_reg_args *sizeof (u64)); tjit->ip_off =alloc_stack (tjit,sizeof (u64));
@@ -2256,16 +2262,25 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, tjit->bpf_args_off =alloc_stack (tjit, nr_bpf_args *sizeof (u64)); tjit->retval_off =alloc_stack (tjit,sizeof (u64)); tjit->r7_r8_off =alloc_stack (tjit,2 *sizeof (u64)); - tjit->r14_off =alloc_stack (tjit,sizeof (u64)); tjit->run_ctx_off =alloc_stack (tjit,sizeof (struct bpf_tramp_run_ctx )); tjit->tccnt_off =alloc_stack (tjit,sizeof (u64)); -/* The caller has already reserved STACK_FRAME_OVERHEAD bytes. */ - tjit->stack_size -=STACK_FRAME_OVERHEAD ; + tjit->r14_off =alloc_stack (tjit,sizeof (u64) *2 ); +/* +* In accordance with the s390x ABI, the caller has allocated +* STACK_FRAME_OVERHEAD bytes for us. 8 of them contain the caller's +* backchain, and the rest we can use. +*/ + tjit->stack_size -=STACK_FRAME_OVERHEAD -sizeof (u64); tjit->orig_stack_args_off = tjit->stack_size +STACK_FRAME_OVERHEAD ; +/* lgr %r1,%r15 */ +EMIT4 (0xb9040000 ,REG_1 ,REG_15 );/* aghi %r15,-stack_size */ EMIT4_IMM (0xa70b0000 ,REG_15 , -tjit->stack_size); +/* stg %r1,backchain_off(%r15) */ +EMIT6_DISP_LH (0xe3000000 ,0x0024 ,REG_1 ,REG_0 ,REG_15 , + tjit->backchain_off);/* mvc tccnt_off(4,%r15),stack_size+STK_OFF_TCCNT(%r15) */ _EMIT6 (0xd203f000 | tjit->tccnt_off,0xf000 | (tjit->stack_size +STK_OFF_TCCNT ));
arch/x86/events/utils.c +3 -2
@@ -1,5 +1,6 @@// SPDX-License-Identifier: GPL-2.0 #include <asm/insn.h> +#include <linux/mm.h> #include "perf_event.h"
@@ -132,9 +133,9 @@ static int get_branch_type(unsigned long from, unsigned long to, int abort,* The LBR logs any address in the IP, even if the IP just * faulted. This means userspace can control the from address. * Ensure we don't blindly read any address by validating it is -* a known text address. +* a known text address and not a vsyscall address. */ -if (kernel_text_address (from)) { +if (kernel_text_address (from) && !in_gate_area_no_mm (from)) { addr = (void *)from;/* * Assume we can get the maximum possible size
arch/x86/include/asm/msr-index.h +7 -2
@@ -637,12 +637,17 @@/* AMD Last Branch Record MSRs */ #define MSR_AMD64_LBR_SELECT 0xc000010e -/* Fam 17h MSRs */ -#define MSR_F17H_IRPERF 0xc00000e9 +/* Zen4 */ +#define MSR_ZEN4_BP_CFG 0xc001102e +#define MSR_ZEN4_BP_CFG_SHARED_BTB_FIX_BIT 5 +/* Zen 2 */ #define MSR_ZEN2_SPECTRAL_CHICKEN 0xc00110e3#define MSR_ZEN2_SPECTRAL_CHICKEN_BIT BIT_ULL(1) +/* Fam 17h MSRs */ +#define MSR_F17H_IRPERF 0xc00000e9 +/* Fam 16h MSRs */ #define MSR_F16H_L2I_PERF_CTL 0xc0010230#define MSR_F16H_L2I_PERF_CTR 0xc0010231
arch/x86/include/asm/smp.h +0 -2
@@ -134,8 +134,6 @@ void native_send_call_func_ipi(const struct cpumask *mask);void native_send_call_func_single_ipi (int cpu);void x86_idle_thread_init (unsigned int cpu,struct task_struct *idle); -bool smp_park_other_cpus_in_init (void ); -void smp_store_boot_cpu_info (void );void smp_store_cpu_info (int id);
arch/x86/kernel/alternative.c +13 -0
@@ -403,6 +403,17 @@ void __init_or_module noinline apply_alternatives(struct alt_instr *start,u8 insn_buff[MAX_PATCH_LEN ];DPRINTK (ALT ,"alt table %px, -> %px" , start, end); + +/* +* In the case CONFIG_X86_5LEVEL=y, KASAN_SHADOW_START is defined using +* cpu_feature_enabled(X86_FEATURE_LA57) and is therefore patched here. +* During the process, KASAN becomes confused seeing partial LA57 +* conversion and triggers a false-positive out-of-bound report. +* +* Disable KASAN until the patching is complete. +*/ +kasan_disable_current (); +/* * The scan order should be from start to end. A later scanned * alternative code can overwrite previously scanned alternative code.
@@ -452,6 +463,8 @@ void __init_or_module noinline apply_alternatives(struct alt_instr *start,text_poke_early (instr, insn_buff, insn_buff_sz); } + +kasan_enable_current (); }static inline bool is_jcc32 (struct insn *insn)
arch/x86/kernel/cpu/amd.c +8 -0
@@ -80,6 +80,10 @@ static const int amd_div0[] =AMD_LEGACY_ERRATUM (AMD_MODEL_RANGE (0x17 ,0x00 ,0x0 ,0x2f ,0xf ),AMD_MODEL_RANGE (0x17 ,0x50 ,0x0 ,0x5f ,0xf )); +static const int amd_erratum_1485[] = +AMD_LEGACY_ERRATUM (AMD_MODEL_RANGE (0x19 ,0x10 ,0x0 ,0x1f ,0xf ), +AMD_MODEL_RANGE (0x19 ,0x60 ,0x0 ,0xaf ,0xf )); +static bool cpu_has_amd_erratum (struct cpuinfo_x86 *cpu,const int *erratum) {int osvw_id = *erratum++;
@@ -1149,6 +1153,10 @@ static void init_amd(struct cpuinfo_x86 *c)pr_notice_once ("AMD Zen1 DIV0 bug detected. Disable SMT for full protection.\n" );setup_force_cpu_bug (X86_BUG_DIV0 ); } + +if (!cpu_has (c,X86_FEATURE_HYPERVISOR ) && +cpu_has_amd_erratum (c, amd_erratum_1485)) +msr_set_bit (MSR_ZEN4_BP_CFG ,MSR_ZEN4_BP_CFG_SHARED_BTB_FIX_BIT ); }#ifdef CONFIG_X86_32
arch/x86/kernel/smp.c +7 -32
@@ -131,7 +131,7 @@ static int smp_stop_nmi_callback(unsigned int val, struct pt_regs *regs) }/* -* Disable virtualization, APIC etc. and park the CPU in a HLT loop +* this function calls the 'stop' function on all other CPUs in the system. */ DEFINE_IDTENTRY_SYSVEC (sysvec_reboot) {
@@ -172,17 +172,13 @@ static void native_stop_other_cpus(int wait)* 2) Wait for all other CPUs to report that they reached the * HLT loop in stop_this_cpu() * -* 3) If the system uses INIT/STARTUP for CPU bringup, then -* send all present CPUs an INIT vector, which brings them -* completely out of the way. +* 3) If #2 timed out send an NMI to the CPUs which did not +* yet report * -* 4) If #3 is not possible and #2 timed out send an NMI to the -* CPUs which did not yet report -* -* 5) Wait for all other CPUs to report that they reached the +* 4) Wait for all other CPUs to report that they reached the * HLT loop in stop_this_cpu() * -* #4 can obviously race against a CPU reaching the HLT loop late. +* #3 can obviously race against a CPU reaching the HLT loop late. * That CPU will have reported already and the "have all CPUs * reached HLT" condition will be true despite the fact that the * other CPU is still handling the NMI. Again, there is no
@@ -198,7 +194,7 @@ static void native_stop_other_cpus(int wait)/* * Don't wait longer than a second for IPI completion. The * wait request is not checked here because that would -* prevent an NMI/INIT shutdown in case that not all +* prevent an NMI shutdown attempt in case that not all * CPUs reach shutdown state. */ timeout =USEC_PER_SEC ;
@@ -206,27 +202,7 @@ static void native_stop_other_cpus(int wait)udelay (1 ); } -/* -* Park all other CPUs in INIT including "offline" CPUs, if -* possible. That's a safe place where they can't resume execution -* of HLT and then execute the HLT loop from overwritten text or -* page tables. -* -* The only downside is a broadcast MCE, but up to the point where -* the kexec() kernel brought all APs online again an MCE will just -* make HLT resume and handle the MCE. The machine crashes and burns -* due to overwritten text, page tables and data. So there is a -* choice between fire and frying pan. The result is pretty much -* the same. Chose frying pan until x86 provides a sane mechanism -* to park a CPU. -*/ -if (smp_park_other_cpus_in_init ()) - goto done; - -/* -* If park with INIT was not possible and the REBOOT_VECTOR didn't -* take all secondary CPUs offline, try with the NMI. -*/ +/* if the REBOOT_VECTOR didn't work, try with the NMI */ if (!cpumask_empty (&cpus_stop_mask)) {/* * If NMI IPI is enabled, try to register the stop handler
@@ -249,7 +225,6 @@ static void native_stop_other_cpus(int wait)udelay (1 ); } -done:local_irq_save (flags);disable_local_APIC ();mcheck_cpu_clear (this_cpu_ptr (&cpu_info));
arch/x86/kernel/smpboot.c +0 -27
@@ -1346,33 +1346,6 @@ void arch_thaw_secondary_cpus_end(void)cache_aps_init (); } -bool smp_park_other_cpus_in_init (void ) -{ -unsigned int cpu, this_cpu =smp_processor_id (); -unsigned int apicid; - -if (apic->wakeup_secondary_cpu_64 || apic->wakeup_secondary_cpu) -return false; - -/* -* If this is a crash stop which does not execute on the boot CPU, -* then this cannot use the INIT mechanism because INIT to the boot -* CPU will reset the machine. -*/ -if (this_cpu) -return false; - -for_each_cpu_and (cpu, &cpus_booted_once_mask, cpu_present_mask) { -if (cpu == this_cpu) -continue ; - apicid = apic->cpu_present_to_apicid (cpu); -if (apicid ==BAD_APICID ) -continue ; -send_init_sequence (apicid); - } -return true; -} -/* * Early setup to make printk work. */
block/fops.c +16 -5
@@ -659,24 +659,35 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,filemap_invalidate_lock (inode->i_mapping); -/* Invalidate the page cache, including dirty pages. */ - error =truncate_bdev_range (bdev,file_to_blk_mode (file), start, end); -if (error) - goto fail; - +/* +* Invalidate the page cache, including dirty pages, for valid +* de-allocate mode calls to fallocate(). +*/ switch (mode) {case FALLOC_FL_ZERO_RANGE :case FALLOC_FL_ZERO_RANGE |FALLOC_FL_KEEP_SIZE : + error =truncate_bdev_range (bdev,file_to_blk_mode (file), start, end); +if (error) + goto fail; + error =blkdev_issue_zeroout (bdev, start >>SECTOR_SHIFT , len >>SECTOR_SHIFT ,GFP_KERNEL ,BLKDEV_ZERO_NOUNMAP );break ;case FALLOC_FL_PUNCH_HOLE |FALLOC_FL_KEEP_SIZE : + error =truncate_bdev_range (bdev,file_to_blk_mode (file), start, end); +if (error) + goto fail; + error =blkdev_issue_zeroout (bdev, start >>SECTOR_SHIFT , len >>SECTOR_SHIFT ,GFP_KERNEL ,BLKDEV_ZERO_NOFALLBACK );break ;case FALLOC_FL_PUNCH_HOLE |FALLOC_FL_KEEP_SIZE |FALLOC_FL_NO_HIDE_STALE : + error =truncate_bdev_range (bdev,file_to_blk_mode (file), start, end); +if (error) + goto fail; + error =blkdev_issue_discard (bdev, start >>SECTOR_SHIFT , len >>SECTOR_SHIFT ,GFP_KERNEL );break ;
drivers/acpi/ec.c +11 -0
@@ -1913,6 +1913,17 @@ static const struct dmi_system_id ec_dmi_table[] __initconst = { DMI_MATCH(DMI_PRODUCT_NAME, "HP 15-cx0041ur"), }, }, + { +/* +* HP Pavilion Gaming Laptop 15-dk1xxx +* https://github.com/systemd/systemd/issues/28942 +*/ + .callback = ec_honor_dsdt_gpe, + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"HP" ), + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Gaming Laptop 15-dk1xxx"), + }, + }, {/* * Samsung hardware
drivers/acpi/processor_idle.c +1 -2
@@ -1217,8 +1217,7 @@ static int acpi_processor_setup_lpi_states(struct acpi_processor *pr)strscpy (state->desc, lpi->desc,CPUIDLE_DESC_LEN ); state->exit_latency = lpi->wake_latency; state->target_residency = lpi->min_residency; -if (lpi->arch_flags) - state->flags |=CPUIDLE_FLAG_TIMER_STOP ; + state->flags |=arch_get_idle_state_flags (lpi->arch_flags);if (i !=0 && lpi->entry_method ==ACPI_CSTATE_FFH ) state->flags |=CPUIDLE_FLAG_RCU_IDLE ; state->enter = acpi_idle_lpi_enter;
drivers/acpi/resource.c +20 -6
@@ -439,6 +439,13 @@ static const struct dmi_system_id asus_laptop[] = { DMI_MATCH(DMI_BOARD_NAME, "S5602ZA"), }, }, + { + .ident = "Asus ExpertBook B1402CBA", + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), + DMI_MATCH(DMI_BOARD_NAME, "B1402CBA"), + }, + }, { .ident ="Asus ExpertBook B1502CBA" , .matches = {
@@ -500,16 +507,23 @@ static const struct dmi_system_id maingear_laptop[] = {static const struct dmi_system_id pcspecialist_laptop[] = { { - .ident ="PCSpecialist Elimina Pro 16 M" , -/* -* Some models have product-name "Elimina Pro 16 M", -* others "GM6BGEQ". Match on board-name to match both. -*/ +/* TongFang GM6BGEQ / PCSpecialist Elimina Pro 16 M, RTX 3050 */ .matches = { -DMI_MATCH (DMI_SYS_VENDOR ,"PCSpecialist" ),DMI_MATCH (DMI_BOARD_NAME ,"GM6BGEQ" ), }, }, + { +/* TongFang GM6BG5Q, RTX 4050 */ + .matches = { +DMI_MATCH (DMI_BOARD_NAME ,"GM6BG5Q" ), + }, + }, + { +/* TongFang GM6BG0Q / PCSpecialist Elimina Pro 16 M, RTX 4060 */ + .matches = { +DMI_MATCH (DMI_BOARD_NAME ,"GM6BG0Q" ), + }, + }, { } };
drivers/android/binder.c +2 -0
@@ -4812,6 +4812,8 @@ static void binder_release_work(struct binder_proc *proc,"undelivered TRANSACTION_ERROR: %u\n" , e->cmd); }break ; +case BINDER_WORK_TRANSACTION_PENDING : +case BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT :case BINDER_WORK_TRANSACTION_COMPLETE : {binder_debug (BINDER_DEBUG_DEAD_TRANSACTION ,"undelivered TRANSACTION_COMPLETE\n" );
drivers/ata/libata-core.c +90 -0
96 lines not on this page · raw message
drivers/ata/libata-eh.c +53 -1
114 lines not on this page · raw message
drivers/ata/libata-scsi.c +7 -9
@@ -1100,15 +1100,13 @@ int ata_scsi_dev_config(struct scsi_device *sdev, struct ata_device *dev) } }else { sdev->sector_size =ata_id_logical_sector_size (dev->id); +/* -* Stop the drive on suspend but do not issue START STOP UNIT -* on resume as this is not necessary and may fail: the device -* will be woken up by ata_port_pm_resume() with a port reset -* and device revalidation. +* Ask the sd driver to issue START STOP UNIT on runtime suspend +* and resume only. For system level suspend/resume, devices +* power state is handled directly by libata EH. */ - sdev->manage_system_start_stop = true; sdev->manage_runtime_start_stop = true; - sdev->no_start_on_resume =1 ; }/*
@@ -1284,7 +1282,7 @@ static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc) }if (cdb[4 ] &0x1 ) { - tf->nsect =1 ;/* 1 sector, lba=0 */ + tf->nsect =1 ;/* 1 sector, lba=0 */ if (qc->dev->flags &ATA_DFLAG_LBA ) { tf->flags |=ATA_TFLAG_LBA ;
@@ -1300,7 +1298,7 @@ static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc) tf->lbah =0x0 ;/* cyl high */ } - tf->command =ATA_CMD_VERIFY ;/* READ VERIFY */ + tf->command =ATA_CMD_VERIFY ;/* READ VERIFY */ }else {/* Some odd clown BIOSen issue spindown on power off (ACPI S4 * or S5) causing some drives to spin up and down again.
@@ -1310,7 +1308,7 @@ static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc) goto skip;if ((qc->ap->flags &ATA_FLAG_NO_HIBERNATE_SPINDOWN ) && -system_entering_hibernation ()) +system_entering_hibernation ()) goto skip;/* Issue ATA STANDBY IMMEDIATE command */
drivers/ata/libata.h +2 -0
@@ -62,6 +62,8 @@ extern int ata_dev_reread_id(struct ata_device *dev, unsigned int readid_flags);extern int ata_dev_revalidate (struct ata_device *dev,unsigned int new_class,unsigned int readid_flags);extern int ata_dev_configure (struct ata_device *dev); +extern void ata_dev_power_set_standby (struct ata_device *dev); +extern void ata_dev_power_set_active (struct ata_device *dev);extern int sata_down_spd_limit (struct ata_link *link,u32 spd_limit);extern int ata_down_xfermask_limit (struct ata_device *dev,unsigned int sel); extern unsigned int ata_dev_set_feature(struct ata_device *dev,
drivers/ata/pata_parport/pata_parport.c +9 -1
@@ -51,6 +51,13 @@ static void pata_parport_dev_select(struct ata_port *ap, unsigned int device)ata_sff_pause (ap); } +static void pata_parport_set_devctl (struct ata_port *ap,u8 ctl) +{ +struct pi_adapter *pi = ap->host->private_data; + + pi->proto->write_regr (pi,1 ,6 , ctl); +} +static bool pata_parport_devchk (struct ata_port *ap,unsigned int device) {struct pi_adapter *pi = ap->host->private_data;
@@ -64,7 +71,7 @@ static bool pata_parport_devchk(struct ata_port *ap, unsigned int device) pi->proto->write_regr (pi,0 ,ATA_REG_NSECT ,0xaa ); pi->proto->write_regr (pi,0 ,ATA_REG_LBAL ,0x55 ); - pi->proto->write_regr (pi,0 ,ATA_REG_NSECT ,055 ); + pi->proto->write_regr (pi,0 ,ATA_REG_NSECT ,0x55 ); pi->proto->write_regr (pi,0 ,ATA_REG_LBAL ,0xaa ); nsect = pi->proto->read_regr (pi,0 ,ATA_REG_NSECT );
@@ -252,6 +259,7 @@ static struct ata_port_operations pata_parport_port_ops = { .hardreset = NULL, .sff_dev_select = pata_parport_dev_select, + .sff_set_devctl = pata_parport_set_devctl, .sff_check_status = pata_parport_check_status, .sff_check_altstatus = pata_parport_check_altstatus, .sff_tf_load = pata_parport_tf_load,
drivers/counter/counter-chrdev.c +2 -2
@@ -247,8 +247,8 @@ static int counter_get_ext(const struct counter_comp *const ext,if (*id == component_id)return 0 ; -if (ext->type ==COUNTER_COMP_ARRAY ) { - element = ext->priv; +if (ext[*ext_idx].type ==COUNTER_COMP_ARRAY ) { + element = ext[*ext_idx].priv;if (component_id - *id < element->length)return 0 ;
drivers/counter/microchip-tcb-capture.c +1 -1
@@ -98,7 +98,7 @@ static int mchp_tc_count_function_write(struct counter_device *counter, priv->qdec_mode =0 ;/* Set highest rate based on whether soc has gclk or not */ bmr &= ~(ATMEL_TC_QDEN |ATMEL_TC_POSEN ); -if (priv->tc_cfg->has_gclk) +if (!priv->tc_cfg->has_gclk) cmr |=ATMEL_TC_TIMER_CLOCK2 ;else cmr |=ATMEL_TC_TIMER_CLOCK1 ;
drivers/dma-buf/dma-fence-unwrap.c +4 -9
@@ -76,16 +76,11 @@ struct dma_fence *__dma_fence_unwrap_merge(unsigned int num_fences,dma_fence_unwrap_for_each (tmp, &iter[i], fences[i]) {if (!dma_fence_is_signaled (tmp)) { ++count; - }else if (test_bit (DMA_FENCE_FLAG_TIMESTAMP_BIT , - &tmp->flags)) { -if (ktime_after (tmp->timestamp, timestamp)) - timestamp = tmp->timestamp; }else { -/* -* Use the current time if the fence is -* currently signaling. -*/ - timestamp =ktime_get (); +ktime_t t =dma_fence_timestamp (tmp); + +if (ktime_after (t, timestamp)) + timestamp = t; } } }
drivers/dma-buf/sync_file.c +3 -6
@@ -268,13 +268,10 @@ static int sync_fill_fence_info(struct dma_fence *fence, sizeof(info->driver_name)); info->status =dma_fence_get_status (fence); -while (test_bit (DMA_FENCE_FLAG_SIGNALED_BIT , &fence->flags) && - !test_bit (DMA_FENCE_FLAG_TIMESTAMP_BIT , &fence->flags)) -cpu_relax (); info->timestamp_ns = -test_bit (DMA_FENCE_FLAG_TIMESTAMP_BIT , &fence->flags) ? -ktime_to_ns (fence->timestamp) : -ktime_set (0 ,0 ); +dma_fence_is_signaled (fence) ? +ktime_to_ns (dma_fence_timestamp (fence)) : +ktime_set (0 ,0 );return info->status; }
drivers/dma/idxd/device.c +3 -2
@@ -492,6 +492,7 @@ static void idxd_cmd_exec(struct idxd_device *idxd, int cmd_code, u32 operand,union idxd_command_reg cmd;DECLARE_COMPLETION_ONSTACK (done);u32 stat; +unsigned long flags;if (idxd_device_is_halted (idxd)) {dev_warn (&idxd->pdev->dev,"Device is HALTED!\n" );
@@ -505,7 +506,7 @@ static void idxd_cmd_exec(struct idxd_device *idxd, int cmd_code, u32 operand, cmd.operand = operand; cmd.int_req =1 ; -spin_lock (&idxd->cmd_lock); +spin_lock_irqsave (&idxd->cmd_lock, flags);wait_event_lock_irq (idxd->cmd_waitq, !test_bit (IDXD_FLAG_CMD_RUNNING , &idxd->flags), idxd->cmd_lock);
@@ -522,7 +523,7 @@ static void idxd_cmd_exec(struct idxd_device *idxd, int cmd_code, u32 operand,* After command submitted, release lock and go to sleep until * the command completes via interrupt. */ -spin_unlock (&idxd->cmd_lock); +spin_unlock_irqrestore (&idxd->cmd_lock, flags);wait_for_completion (&done); stat =ioread32 (idxd->reg_base +IDXD_CMDSTS_OFFSET );spin_lock (&idxd->cmd_lock);
drivers/dma/mediatek/mtk-uart-apdma.c +1 -2
@@ -451,9 +451,8 @@ static int mtk_uart_apdma_device_pause(struct dma_chan *chan)mtk_uart_apdma_write (c,VFF_EN ,VFF_EN_CLR_B );mtk_uart_apdma_write (c,VFF_INT_EN ,VFF_INT_EN_CLR_B ); -synchronize_irq (c->irq); -spin_unlock_irqrestore (&c->vc.lock, flags); +synchronize_irq (c->irq);return 0 ; }
drivers/dma/stm32-dma.c +7 -4
@@ -1113,8 +1113,10 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_slave_sg( chan->chan_reg.dma_scr &= ~STM32_DMA_SCR_PFCTRL ;/* Activate Double Buffer Mode if DMA triggers STM32 MDMA and more than 1 sg */ -if (chan->trig_mdma && sg_len >1 ) +if (chan->trig_mdma && sg_len >1 ) { chan->chan_reg.dma_scr |=STM32_DMA_SCR_DBM ; + chan->chan_reg.dma_scr &= ~STM32_DMA_SCR_CT ; + }for_each_sg (sgl, sg, sg_len, i) { ret = stm32_dma_set_xfer_param(chan, direction, &buswidth,
@@ -1387,11 +1389,12 @@ static size_t stm32_dma_desc_residue(struct stm32_dma_chan *chan, residue =stm32_dma_get_remaining_bytes (chan); -if (chan->desc->cyclic && !stm32_dma_is_current_sg (chan)) { +if ((chan->desc->cyclic || chan->trig_mdma) && !stm32_dma_is_current_sg (chan)) { n_sg++;if (n_sg == chan->desc->num_sgs) n_sg =0 ; - residue = sg_req->len; +if (!chan->trig_mdma) + residue = sg_req->len; }/*
@@ -1401,7 +1404,7 @@ static size_t stm32_dma_desc_residue(struct stm32_dma_chan *chan,* residue = remaining bytes from NDTR + remaining * periods/sg to be transferred */ -if (!chan->desc->cyclic || n_sg !=0 ) +if ((!chan->desc->cyclic && !chan->trig_mdma) || n_sg !=0 )for (i = n_sg; i < desc->num_sgs; i++) residue += desc->sg_req[i].len;
drivers/dma/stm32-mdma.c +24 -9
@@ -778,8 +778,6 @@ static int stm32_mdma_setup_xfer(struct stm32_mdma_chan *chan,/* Enable interrupts */ ccr &= ~STM32_MDMA_CCR_IRQ_MASK ; ccr |=STM32_MDMA_CCR_TEIE |STM32_MDMA_CCR_CTCIE ; -if (sg_len >1 ) - ccr |=STM32_MDMA_CCR_BTIE ; desc->ccr = ccr;return 0 ;
@@ -1237,6 +1235,10 @@ static int stm32_mdma_resume(struct dma_chan *c)unsigned long flags;u32 status, reg; +/* Transfer can be terminated */ +if (!chan->desc || (stm32_mdma_read (dmadev,STM32_MDMA_CCR (chan->id)) &STM32_MDMA_CCR_EN )) +return -EPERM ; + hwdesc = chan->desc->node[chan->curr_hwdesc].hwdesc;spin_lock_irqsave (&chan->vchan.lock, flags);
@@ -1317,21 +1319,35 @@ static int stm32_mdma_slave_config(struct dma_chan *c,static size_t stm32_mdma_desc_residue (struct stm32_mdma_chan *chan,struct stm32_mdma_desc *desc, -u32 curr_hwdesc) +u32 curr_hwdesc, +struct dma_tx_state *state) {struct stm32_mdma_device *dmadev =stm32_mdma_get_dev (chan);struct stm32_mdma_hwdesc *hwdesc; -u32 cbndtr, residue, modulo, burst_size; +u32 cisr, clar, cbndtr, residue, modulo, burst_size;int i; + cisr =stm32_mdma_read (dmadev,STM32_MDMA_CISR (chan->id)); + residue =0 ; -for (i = curr_hwdesc +1 ; i < desc->count; i++) { +/* Get the next hw descriptor to process from current transfer */ + clar =stm32_mdma_read (dmadev,STM32_MDMA_CLAR (chan->id)); +for (i = desc->count -1 ; i >=0 ; i--) { hwdesc = desc->node[i].hwdesc; + +if (hwdesc->clar == clar) +break ;/* Current transfer found, stop cumulating */ + +/* Cumulate residue of unprocessed hw descriptors */ residue +=STM32_MDMA_CBNDTR_BNDT (hwdesc->cbndtr); } cbndtr =stm32_mdma_read (dmadev,STM32_MDMA_CBNDTR (chan->id)); residue += cbndtr &STM32_MDMA_CBNDTR_BNDT_MASK ; + state->in_flight_bytes =0 ; +if (chan->chan_config.m2m_hw && (cisr &STM32_MDMA_CISR_CRQA )) + state->in_flight_bytes = cbndtr &STM32_MDMA_CBNDTR_BNDT_MASK ; +if (!chan->mem_burst)return residue;
@@ -1361,11 +1377,10 @@ static enum dma_status stm32_mdma_tx_status(struct dma_chan *c, vdesc =vchan_find_desc (&chan->vchan, cookie);if (chan->desc && cookie == chan->desc->vdesc.tx.cookie) - residue =stm32_mdma_desc_residue (chan, chan->desc, - chan->curr_hwdesc); + residue =stm32_mdma_desc_residue (chan, chan->desc, chan->curr_hwdesc, state);else if (vdesc) - residue =stm32_mdma_desc_residue (chan, -to_stm32_mdma_desc (vdesc),0 ); + residue =stm32_mdma_desc_residue (chan,to_stm32_mdma_desc (vdesc),0 , state); +dma_set_residue (state, residue);spin_unlock_irqrestore (&chan->vchan.lock, flags);
drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c +1 -0
@@ -169,6 +169,7 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev) csum += pia[size -1 ];if (csum) {DRM_ERROR ("Bad Product Info Area checksum: 0x%02x" , csum); +kfree (pia);return -EIO ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +1 -1
@@ -250,7 +250,7 @@ static inline bool amdgpu_bo_in_cpu_visible_vram(struct amdgpu_bo *bo)struct amdgpu_device *adev =amdgpu_ttm_adev (bo->tbo.bdev);struct amdgpu_res_cursor cursor; -if (bo->tbo.resource->mem_type !=TTM_PL_VRAM ) +if (!bo->tbo.resource || bo->tbo.resource->mem_type !=TTM_PL_VRAM )return false;amdgpu_res_first (bo->tbo.resource,0 ,amdgpu_bo_size (bo), &cursor);
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c +2 -2
@@ -157,7 +157,7 @@ void dcn20_update_clocks_update_dentist(struct clk_mgr_internal *clk_mgr, structint32_t N ;int32_t j; -if (!pipe_ctx->stream) +if (!resource_is_pipe_type (pipe_ctx,OTG_MASTER ))continue ;/* Virtual encoders don't have this function */ if (!stream_enc->funcs->get_fifo_cal_average_level)
@@ -188,7 +188,7 @@ void dcn20_update_clocks_update_dentist(struct clk_mgr_internal *clk_mgr, structint32_t N ;int32_t j; -if (!pipe_ctx->stream) +if (!resource_is_pipe_type (pipe_ctx,OTG_MASTER ))continue ;/* Virtual encoders don't have this function */ if (!stream_enc->funcs->get_fifo_cal_average_level)
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c +2 -2
@@ -355,7 +355,7 @@ static void dcn32_update_clocks_update_dentist(int32_t N ;int32_t j; -if (!pipe_ctx->stream) +if (!resource_is_pipe_type (pipe_ctx,OTG_MASTER ))continue ;/* Virtual encoders don't have this function */ if (!stream_enc->funcs->get_fifo_cal_average_level)
@@ -401,7 +401,7 @@ static void dcn32_update_clocks_update_dentist(int32_t N ;int32_t j; -if (!pipe_ctx->stream) +if (!resource_is_pipe_type (pipe_ctx,OTG_MASTER ))continue ;/* Virtual encoders don't have this function */ if (!stream_enc->funcs->get_fifo_cal_average_level)
drivers/gpu/drm/amd/display/dc/core/dc.c +3 -0
@@ -1263,6 +1263,9 @@ static void disable_vbios_mode_if_required(if (stream ==NULL )continue ; +if (stream->apply_seamless_boot_optimization) +continue ; +// only looking for first odm pipe if (pipe->prev_odm_pipe)continue ;
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +35 -0
@@ -1348,6 +1348,41 @@ struct pipe_ctx *find_idle_secondary_pipe(return secondary_pipe; } +bool resource_is_pipe_type (const struct pipe_ctx *pipe_ctx,enum pipe_type type) +{ +#ifdef DBG +if (pipe_ctx->stream ==NULL ) { +/* a free pipe with dangling states */ +ASSERT (!pipe_ctx->plane_state); +ASSERT (!pipe_ctx->prev_odm_pipe); +ASSERT (!pipe_ctx->next_odm_pipe); +ASSERT (!pipe_ctx->top_pipe); +ASSERT (!pipe_ctx->bottom_pipe); + }else if (pipe_ctx->top_pipe) { +/* a secondary DPP pipe must be signed to a plane */ + ASSERT(pipe_ctx->plane_state) + } +/* Add more checks here to prevent corrupted pipe ctx. It is very hard +* to debug this issue afterwards because we can't pinpoint the code +* location causing inconsistent pipe context states. +*/ +#endif +switch (type) { +case OTG_MASTER : +return !pipe_ctx->prev_odm_pipe && + !pipe_ctx->top_pipe && + pipe_ctx->stream; +case OPP_HEAD : +return !pipe_ctx->top_pipe && pipe_ctx->stream; +case DPP_PIPE : +return pipe_ctx->plane_state && pipe_ctx->stream; +case FREE_PIPE : +return !pipe_ctx->plane_state && !pipe_ctx->stream; +default : +return false; + } +} +struct pipe_ctx *resource_get_head_pipe_for_stream (struct resource_context *res_ctx,struct dc_stream_state *stream)
drivers/gpu/drm/amd/display/dc/inc/resource.h +106 -0
112 lines not on this page · raw message
drivers/gpu/drm/drm_atomic_helper.c +13 -4
@@ -290,7 +290,8 @@ static int update_connector_routing(struct drm_atomic_state *state, struct drm_connector *connector, struct drm_connector_state *old_connector_state, - struct drm_connector_state *new_connector_state) + struct drm_connector_state *new_connector_state, + bool added_by_user) { const struct drm_connector_helper_funcs *funcs;struct drm_encoder *new_encoder;
@@ -339,9 +340,13 @@ update_connector_routing(struct drm_atomic_state *state,* there's a chance the connector may have been destroyed during the * process, but it's better to ignore that then cause * drm_atomic_helper_resume() to fail. +* +* Last, we want to ignore connector registration when the connector +* was not pulled in the atomic state by user-space (ie, was pulled +* in by the driver, e.g. when updating a DP-MST stream). */ if (!state->duplicated &&drm_connector_is_unregistered (connector) && - crtc_state->active) { + added_by_user && crtc_state->active) {drm_dbg_atomic (connector->dev,"[CONNECTOR:%d:%s] is not registered\n" , connector->base.id, connector->name);
@@ -620,7 +625,10 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,struct drm_connector *connector;struct drm_connector_state *old_connector_state, *new_connector_state;int i, ret; -unsigned int connectors_mask =0 ; +unsigned int connectors_mask =0 , user_connectors_mask =0 ; + +for_each_oldnew_connector_in_state (state, connector, old_connector_state, new_connector_state, i) + user_connectors_mask |=BIT (i);for_each_oldnew_crtc_in_state (state, crtc, old_crtc_state, new_crtc_state, i) { bool has_connectors =
@@ -685,7 +693,8 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,*/ ret =update_connector_routing (state, connector, old_connector_state, - new_connector_state); + new_connector_state, +BIT (i) & user_connectors_mask);if (ret)return ret;if (old_connector_state->crtc) {
drivers/gpu/drm/drm_gem.c +4 -2
@@ -537,7 +537,7 @@ struct page **drm_gem_get_pages(struct drm_gem_object *obj)struct page **pages;struct folio *folio;struct folio_batch fbatch; -int i, j, npages; +long i, j, npages;if (WARN_ON (!obj->filp))return ERR_PTR (-EINVAL );
@@ -561,11 +561,13 @@ struct page **drm_gem_get_pages(struct drm_gem_object *obj) i =0 ;while (i < npages) { +long nr; folio =shmem_read_folio_gfp (mapping, i,mapping_gfp_mask (mapping));if (IS_ERR (folio)) goto fail; -for (j =0 ; j <folio_nr_pages (folio); j++, i++) + nr =min (npages - i,folio_nr_pages (folio)); +for (j =0 ; j < nr; j++, i++) pages[i] =folio_file_page (folio, i);/* Make sure shmem keeps __GFP_DMA32 allocated pages in the
drivers/gpu/drm/i915/i915_gem.c +7 -2
@@ -1199,6 +1199,13 @@ int i915_gem_init(struct drm_i915_private *dev_priv) goto err_unlock; } +/* +* Register engines early to ensure the engine list is in its final +* rb-tree form, lowering the amount of code that has to deal with +* the intermediate llist state. +*/ +intel_engines_driver_register (dev_priv); +return 0 ;/*
@@ -1246,8 +1253,6 @@ int i915_gem_init(struct drm_i915_private *dev_priv)void i915_gem_driver_register (struct drm_i915_private *i915) {i915_gem_driver_register__shrinker (i915); - -intel_engines_driver_register (i915); }void i915_gem_driver_unregister (struct drm_i915_private *i915)
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +18 -9
@@ -119,6 +119,7 @@ static u64 _dpu_plane_calc_bw(const struct dpu_mdss_cfg *catalog, struct dpu_sw_pipe_cfg *pipe_cfg) {int src_width, src_height, dst_height, fps; +u64 plane_pixel_rate, plane_bit_rate;u64 plane_prefill_bw;u64 plane_bw;u32 hw_latency_lines;
@@ -136,13 +137,12 @@ static u64 _dpu_plane_calc_bw(const struct dpu_mdss_cfg *catalog, scale_factor = src_height > dst_height ?mult_frac (src_height,1 , dst_height) :1 ; - plane_bw = - src_width * mode->vtotal * fps * fmt->bpp * - scale_factor; + plane_pixel_rate = src_width * mode->vtotal * fps; + plane_bit_rate = plane_pixel_rate * fmt->bpp; - plane_prefill_bw = - src_width * hw_latency_lines * fps * fmt->bpp * - scale_factor * mode->vtotal; + plane_bw = plane_bit_rate * scale_factor; + + plane_prefill_bw = plane_bw * hw_latency_lines;if ((vbp+vpw) > hw_latency_lines)do_div (plane_prefill_bw, (vbp+vpw));
@@ -733,9 +733,11 @@ static int dpu_plane_check_inline_rotation(struct dpu_plane *pdpu,static int dpu_plane_atomic_check_pipe (struct dpu_plane *pdpu,struct dpu_sw_pipe *pipe,struct dpu_sw_pipe_cfg *pipe_cfg, -const struct dpu_format *fmt) +const struct dpu_format *fmt, +const struct drm_display_mode *mode) {uint32_t min_src_size; +struct dpu_kms *kms =_dpu_plane_get_kms (&pdpu->base); min_src_size =DPU_FORMAT_IS_YUV (fmt) ?2 :1 ;
@@ -774,6 +776,12 @@ static int dpu_plane_atomic_check_pipe(struct dpu_plane *pdpu,return -EINVAL ; } +/* max clk check */ +if (_dpu_plane_calc_clk (mode, pipe_cfg) > kms->perf.max_core_clk_rate) { +DPU_DEBUG_PLANE (pdpu,"plane exceeds max mdp core clk limits\n" ); +return -E2BIG ; + } +return 0 ; }
@@ -899,12 +907,13 @@ static int dpu_plane_atomic_check(struct drm_plane *plane, r_pipe_cfg->dst_rect.x1 = pipe_cfg->dst_rect.x2; } - ret =dpu_plane_atomic_check_pipe (pdpu, pipe, pipe_cfg, fmt); + ret =dpu_plane_atomic_check_pipe (pdpu, pipe, pipe_cfg, fmt, &crtc_state->adjusted_mode);if (ret)return ret;if (r_pipe->sspp) { - ret =dpu_plane_atomic_check_pipe (pdpu, r_pipe, r_pipe_cfg, fmt); + ret =dpu_plane_atomic_check_pipe (pdpu, r_pipe, r_pipe_cfg, fmt, + &crtc_state->adjusted_mode);if (ret)return ret; }
drivers/gpu/drm/msm/dp/dp_ctrl.c +6 -7
@@ -1774,13 +1774,6 @@ int dp_ctrl_on_link(struct dp_ctrl *dp_ctrl)return rc;while (--link_train_max_retries) { - rc =dp_ctrl_reinitialize_mainlink (ctrl); -if (rc) { -DRM_ERROR ("Failed to reinitialize mainlink. rc=%d\n" , - rc); -break ; - } - training_step =DP_TRAINING_NONE ; rc =dp_ctrl_setup_main_link (ctrl, &training_step);if (rc ==0 ) {
@@ -1832,6 +1825,12 @@ int dp_ctrl_on_link(struct dp_ctrl *dp_ctrl)/* stop link training before start re training */ dp_ctrl_clear_training_pattern (ctrl); } + + rc =dp_ctrl_reinitialize_mainlink (ctrl); +if (rc) { +DRM_ERROR ("Failed to reinitialize mainlink. rc=%d\n" , rc); +break ; + } }if (ctrl->link->sink_request &DP_TEST_LINK_PHY_TEST_PATTERN )
drivers/gpu/drm/msm/dp/dp_link.c +2 -2
@@ -1090,7 +1090,7 @@ int dp_link_process_request(struct dp_link *dp_link) }else if (dp_link_read_psr_error_status (link)) {DRM_ERROR ("PSR IRQ_HPD received\n" ); }else if (dp_link_psr_capability_changed (link)) { -drm_dbg_dp (link->drm_dev,"PSR Capability changed" ); +drm_dbg_dp (link->drm_dev,"PSR Capability changed\n" ); }else { ret =dp_link_process_link_status_update (link);if (!ret) {
@@ -1107,7 +1107,7 @@ int dp_link_process_request(struct dp_link *dp_link) } } -drm_dbg_dp (link->drm_dev,"sink request=%#x" , +drm_dbg_dp (link->drm_dev,"sink request=%#x\n" , dp_link->sink_request);return ret; }
drivers/gpu/drm/msm/dsi/dsi_host.c +15 -4
@@ -1075,9 +1075,21 @@ static void dsi_wait4video_done(struct msm_dsi_host *msm_host)static void dsi_wait4video_eng_busy (struct msm_dsi_host *msm_host) { +u32 data; +if (!(msm_host->mode_flags &MIPI_DSI_MODE_VIDEO ))return ; + data =dsi_read (msm_host,REG_DSI_STATUS0 ); + +/* if video mode engine is not busy, its because +* either timing engine was not turned on or the +* DSI controller has finished transmitting the video +* data already, so no need to wait in those cases +*/ +if (!(data &DSI_STATUS0_VIDEO_MODE_ENGINE_BUSY )) +return ; +if (msm_host->power_on && msm_host->enabled) {dsi_wait4video_done (msm_host);/* delay 4 ms to skip BLLP */
@@ -1887,10 +1899,9 @@ int msm_dsi_host_init(struct msm_dsi *msm_dsi) } msm_host->irq =irq_of_parse_and_map (pdev->dev.of_node,0 ); -if (msm_host->irq <0 ) { - ret = msm_host->irq; -dev_err (&pdev->dev,"failed to get irq: %d\n" , ret); -return ret; +if (!msm_host->irq) { +dev_err (&pdev->dev,"failed to get irq\n" ); +return -EINVAL ; }/* do not autoenable, will be enabled later */
drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c +1 -3
@@ -1343,9 +1343,7 @@ static const struct panel_init_cmd starry_himax83102_j02_init_cmd[] = {_INIT_DCS_CMD (0xB1 ,0x01 ,0xBF ,0x11 ),_INIT_DCS_CMD (0xCB ,0x86 ),_INIT_DCS_CMD (0xD2 ,0x3C ,0xFA ), -_INIT_DCS_CMD (0xE9 ,0xC5 ), -_INIT_DCS_CMD (0xD3 ,0x00 ,0x00 ,0x00 ,0x00 ,0x80 ,0x0C ,0x01 ), -_INIT_DCS_CMD (0xE9 ,0x3F ), +_INIT_DCS_CMD (0xD3 ,0x00 ,0x00 ,0x44 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x80 ,0x0C ,0x01 ),_INIT_DCS_CMD (0xE7 ,0x02 ,0x00 ,0x28 ,0x01 ,0x7E ,0x0F ,0x7E ,0x10 ,0xA0 ,0x00 ,0x00 ,0x20 ,0x40 ,0x50 ,0x40 ),_INIT_DCS_CMD (0xBD ,0x02 ), _INIT_DCS_CMD(0xD8, 0xFF, 0xFF, 0xBF, 0xFE, 0xAA, 0xA0, 0xFF, 0xFF, 0xBF, 0xFE, 0xAA, 0xA0),
drivers/gpu/drm/scheduler/sched_main.c +1 -1
@@ -929,7 +929,7 @@ drm_sched_get_cleanup_job(struct drm_gpu_scheduler *sched)if (next) { next->s_fence->scheduled.timestamp = - job->s_fence->finished.timestamp; +dma_fence_timestamp (&job->s_fence->finished);/* start TO timer for next job */ drm_sched_start_timeout (sched); }
drivers/gpu/drm/tiny/simpledrm.c +1 -1
@@ -745,7 +745,7 @@ static struct simpledrm_device *simpledrm_device_create(struct drm_driver *drv, ret =devm_aperture_acquire_from_firmware (dev, res->start,resource_size (res));if (ret) { -drm_err (dev,"could not acquire memory range %pr: %d\n" , &res, ret); +drm_err (dev,"could not acquire memory range %pr: %d\n" , res, ret);return ERR_PTR (ret); }
drivers/gpu/drm/vmwgfx/vmwgfx_bo.c +4 -3
@@ -34,6 +34,8 @@static void vmw_bo_release (struct vmw_bo *vbo) { +WARN_ON (vbo->tbo.base.funcs && +kref_read (&vbo->tbo.base.refcount) !=0 );vmw_bo_unmap (vbo);drm_gem_object_release (&vbo->tbo.base); }
@@ -497,7 +499,7 @@ static int vmw_user_bo_synccpu_release(struct drm_file *filp,if (!(flags & drm_vmw_synccpu_allow_cs)) {atomic_dec (&vmw_bo->cpu_writers); } -vmw_user_bo_unref (vmw_bo); +vmw_user_bo_unref (&vmw_bo); }return ret;
@@ -539,7 +541,7 @@ int vmw_user_bo_synccpu_ioctl(struct drm_device *dev, void *data,return ret; ret =vmw_user_bo_synccpu_grab (vbo, arg->flags); -vmw_user_bo_unref (vbo); +vmw_user_bo_unref (&vbo);if (unlikely (ret !=0 )) {if (ret == -ERESTARTSYS || ret == -EBUSY )return -EBUSY ;
@@ -612,7 +614,6 @@ int vmw_user_bo_lookup(struct drm_file *filp, } *out =to_vmw_bo (gobj); -ttm_bo_get (&(*out)->tbo);return 0 ; }
drivers/gpu/drm/vmwgfx/vmwgfx_bo.h +12 -5
@@ -195,12 +195,19 @@ static inline struct vmw_bo *vmw_bo_reference(struct vmw_bo *buf)return buf; } -static inline void vmw_user_bo_unref (struct vmw_bo *vbo) +static inline struct vmw_bo *vmw_user_bo_ref (struct vmw_bo *vbo) { -if (vbo) { -ttm_bo_put (&vbo->tbo); -drm_gem_object_put (&vbo->tbo.base); - } +drm_gem_object_get (&vbo->tbo.base); +return vbo; +} + +static inline void vmw_user_bo_unref (struct vmw_bo **buf) +{ +struct vmw_bo *tmp_buf = *buf; + + *buf =NULL ; +if (tmp_buf) +drm_gem_object_put (&tmp_buf->tbo.base); }static inline struct vmw_bo *to_vmw_bo (struct drm_gem_object *gobj)
drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c +3 -3
@@ -432,7 +432,7 @@ static int vmw_cotable_resize(struct vmw_resource *res, size_t new_size)* for the new COTable. Initially pin the buffer object to make sure * we can use tryreserve without failure. */ - ret =vmw_bo_create (dev_priv, &bo_params, &buf); + ret =vmw_gem_object_create (dev_priv, &bo_params, &buf);if (ret) {DRM_ERROR ("Failed initializing new cotable MOB.\n" ); goto out_done;
@@ -502,7 +502,7 @@ static int vmw_cotable_resize(struct vmw_resource *res, size_t new_size)vmw_resource_mob_attach (res);/* Let go of the old mob. */ -vmw_bo_unreference (&old_buf); +vmw_user_bo_unref (&old_buf); res->id = vcotbl->type; ret =dma_resv_reserve_fences (bo->base.resv,1 );
@@ -521,7 +521,7 @@ static int vmw_cotable_resize(struct vmw_resource *res, size_t new_size) out_wait:ttm_bo_unpin (bo);ttm_bo_unreserve (bo); -vmw_bo_unreference (&buf); +vmw_user_bo_unref (&buf); out_done:MKS_STAT_TIME_POP (MKSSTAT_KERN_COTABLE_RESIZE );
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +4 -0
@@ -853,6 +853,10 @@ static inline bool vmw_resource_mob_attached(const struct vmw_resource *res)/** * GEM related functionality - vmwgfx_gem.c */ +struct vmw_bo_params ; +int vmw_gem_object_create (struct vmw_private *vmw, +struct vmw_bo_params *params, +struct vmw_bo **p_vbo); extern int vmw_gem_object_create_with_handle(struct vmw_private *dev_priv, struct drm_file *filp, uint32_t size,
drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +7 -5
@@ -1151,7 +1151,7 @@ static int vmw_translate_mob_ptr(struct vmw_private *dev_priv,SVGAMobId *id, struct vmw_bo **vmw_bo_p) { - struct vmw_bo *vmw_bo; + struct vmw_bo *vmw_bo, *tmp_bo;uint32_t handle = *id;struct vmw_relocation *reloc;int ret;
@@ -1164,7 +1164,8 @@ static int vmw_translate_mob_ptr(struct vmw_private *dev_priv, }vmw_bo_placement_set (vmw_bo,VMW_BO_DOMAIN_MOB ,VMW_BO_DOMAIN_MOB ); ret =vmw_validation_add_bo (sw_context->ctx, vmw_bo); -vmw_user_bo_unref (vmw_bo); + tmp_bo = vmw_bo; +vmw_user_bo_unref (&tmp_bo);if (unlikely (ret !=0 ))return ret;
@@ -1206,7 +1207,7 @@ static int vmw_translate_guest_ptr(struct vmw_private *dev_priv,SVGAGuestPtr *ptr, struct vmw_bo **vmw_bo_p) { - struct vmw_bo *vmw_bo; + struct vmw_bo *vmw_bo, *tmp_bo;uint32_t handle = ptr->gmrId;struct vmw_relocation *reloc;int ret;
@@ -1220,7 +1221,8 @@ static int vmw_translate_guest_ptr(struct vmw_private *dev_priv,vmw_bo_placement_set (vmw_bo,VMW_BO_DOMAIN_GMR |VMW_BO_DOMAIN_VRAM ,VMW_BO_DOMAIN_GMR |VMW_BO_DOMAIN_VRAM ); ret =vmw_validation_add_bo (sw_context->ctx, vmw_bo); -vmw_user_bo_unref (vmw_bo); + tmp_bo = vmw_bo; +vmw_user_bo_unref (&tmp_bo);if (unlikely (ret !=0 ))return ret;
@@ -1619,7 +1621,7 @@ static int vmw_cmd_tex_state(struct vmw_private *dev_priv, {VMW_DECLARE_CMD_VAR (*cmd, SVGA3dCmdSetTextureState);SVGA3dTextureState *last_state = (SVGA3dTextureState *) - ((unsigned long ) header + header->size +sizeof (header)); + ((unsigned long ) header + header->size +sizeof (*header));SVGA3dTextureState *cur_state = (SVGA3dTextureState *) ((unsigned long ) header +sizeof (*cmd));struct vmw_resource *ctx;
drivers/gpu/drm/vmwgfx/vmwgfx_gem.c +15 -3
@@ -111,6 +111,20 @@ static const struct drm_gem_object_funcs vmw_gem_object_funcs = { .vm_ops = &vmw_vm_ops, }; +int vmw_gem_object_create (struct vmw_private *vmw, +struct vmw_bo_params *params, +struct vmw_bo **p_vbo) +{ +int ret =vmw_bo_create (vmw, params, p_vbo); + +if (ret !=0 ) + goto out_no_bo; + + (*p_vbo)->tbo.base.funcs = &vmw_gem_object_funcs; +out_no_bo: +return ret; +} + int vmw_gem_object_create_with_handle(struct vmw_private *dev_priv, struct drm_file *filp, uint32_t size,
@@ -126,12 +140,10 @@ int vmw_gem_object_create_with_handle(struct vmw_private *dev_priv, .pin = false }; - ret =vmw_bo_create (dev_priv, ¶ms, p_vbo); + ret =vmw_gem_object_create (dev_priv, ¶ms, p_vbo);if (ret !=0 ) goto out_no_bo; - (*p_vbo)->tbo.base.funcs = &vmw_gem_object_funcs; - ret =drm_gem_handle_create (filp, &(*p_vbo)->tbo.base, handle); out_no_bo:return ret;
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +3 -3
@@ -1471,8 +1471,8 @@ static int vmw_create_bo_proxy(struct drm_device *dev,/* Reserve and switch the backing mob. */ mutex_lock (&res->dev_priv->cmdbuf_mutex); (void )vmw_resource_reserve (res, false, true); -vmw_bo_unreference (&res->guest_memory_bo); - res->guest_memory_bo =vmw_bo_reference (bo_mob); +vmw_user_bo_unref (&res->guest_memory_bo); + res->guest_memory_bo =vmw_user_bo_ref (bo_mob); res->guest_memory_offset =0 ;vmw_resource_unreserve (res, false, false, false,NULL ,0 );mutex_unlock (&res->dev_priv->cmdbuf_mutex);
@@ -1666,7 +1666,7 @@ static struct drm_framebuffer *vmw_kms_fb_create(struct drm_device *dev, err_out:/* vmw_user_lookup_handle takes one ref so does new_fb */ if (bo) -vmw_user_bo_unref (bo); +vmw_user_bo_unref (&bo);if (surface)vmw_surface_unreference (&surface);
drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c +1 -1
@@ -451,7 +451,7 @@ int vmw_overlay_ioctl(struct drm_device *dev, void *data, ret =vmw_overlay_update_stream (dev_priv, buf, arg, true); -vmw_user_bo_unref (buf); +vmw_user_bo_unref (&buf); out_unlock:mutex_unlock (&overlay->mutex);
drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +6 -6
@@ -141,7 +141,7 @@ static void vmw_resource_release(struct kref *kref)if (res->coherent)vmw_bo_dirty_release (res->guest_memory_bo);ttm_bo_unreserve (bo); -vmw_bo_unreference (&res->guest_memory_bo); +vmw_user_bo_unref (&res->guest_memory_bo); }if (likely (res->hw_destroy !=NULL )) {
@@ -338,7 +338,7 @@ static int vmw_resource_buf_alloc(struct vmw_resource *res,return 0 ; } - ret =vmw_bo_create (res->dev_priv, &bo_params, &gbo); + ret =vmw_gem_object_create (res->dev_priv, &bo_params, &gbo);if (unlikely (ret !=0 )) goto out_no_bo;
@@ -457,11 +457,11 @@ void vmw_resource_unreserve(struct vmw_resource *res,vmw_resource_mob_detach (res);if (res->coherent)vmw_bo_dirty_release (res->guest_memory_bo); -vmw_bo_unreference (&res->guest_memory_bo); +vmw_user_bo_unref (&res->guest_memory_bo); }if (new_guest_memory_bo) { - res->guest_memory_bo =vmw_bo_reference (new_guest_memory_bo); + res->guest_memory_bo =vmw_user_bo_ref (new_guest_memory_bo);/* * The validation code should already have added a
@@ -551,7 +551,7 @@ vmw_resource_check_buffer(struct ww_acquire_ctx *ticket,ttm_bo_put (val_buf->bo); val_buf->bo =NULL ;if (guest_memory_dirty) -vmw_bo_unreference (&res->guest_memory_bo); +vmw_user_bo_unref (&res->guest_memory_bo);return ret; }
@@ -727,7 +727,7 @@ int vmw_resource_validate(struct vmw_resource *res, bool intr, goto out_no_validate; else if (!res->func->needs_guest_memory && res->guest_memory_bo) {WARN_ON_ONCE (vmw_resource_mob_attached (res)); -vmw_bo_unreference (&res->guest_memory_bo); +vmw_user_bo_unref (&res->guest_memory_bo); }return 0 ;
drivers/gpu/drm/vmwgfx/vmwgfx_shader.c +2 -2
@@ -180,7 +180,7 @@ static int vmw_gb_shader_init(struct vmw_private *dev_priv, res->guest_memory_size = size;if (byte_code) { - res->guest_memory_bo =vmw_bo_reference (byte_code); + res->guest_memory_bo =vmw_user_bo_ref (byte_code); res->guest_memory_offset = offset; } shader->size = size;
@@ -809,7 +809,7 @@ static int vmw_shader_define(struct drm_device *dev, struct drm_file *file_priv, shader_type, num_input_sig, num_output_sig, tfile, shader_handle); out_bad_arg: -vmw_user_bo_unref (buffer); +vmw_user_bo_unref (&buffer);return ret; }
drivers/gpu/drm/vmwgfx/vmwgfx_surface.c +12 -19
@@ -686,9 +686,6 @@ static void vmw_user_surface_base_release(struct ttm_base_object **p_base) container_of(base, struct vmw_user_surface, prime.base);struct vmw_resource *res = &user_srf->srf.res; -if (res->guest_memory_bo) -drm_gem_object_put (&res->guest_memory_bo->tbo.base); - *p_base =NULL ;vmw_resource_unreference (&res); }
@@ -855,23 +852,21 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,* expect a backup buffer to be present. */ if (dev_priv->has_mob && req->shareable) { -uint32_t backup_handle; - - ret =vmw_gem_object_create_with_handle (dev_priv, - file_priv, - res->guest_memory_size, - &backup_handle, - &res->guest_memory_bo); +struct vmw_bo_params params = { + .domain =VMW_BO_DOMAIN_SYS , + .busy_domain =VMW_BO_DOMAIN_SYS , + .bo_type = ttm_bo_type_device, + .size = res->guest_memory_size, + .pin = false + }; + + ret =vmw_gem_object_create (dev_priv, + ¶ms, + &res->guest_memory_bo);if (unlikely (ret !=0 )) {vmw_resource_unreference (&res); goto out_unlock; } -vmw_bo_reference (res->guest_memory_bo); -/* -* We don't expose the handle to the userspace and surface -* already holds a gem reference -*/ -drm_gem_handle_delete (file_priv, backup_handle); } tmp =vmw_resource_reference (&srf->res);
@@ -1512,7 +1507,7 @@ vmw_gb_surface_define_internal(struct drm_device *dev,if (ret ==0 ) {if (res->guest_memory_bo->tbo.base.size < res->guest_memory_size) {VMW_DEBUG_USER ("Surface backup buffer too small.\n" ); -vmw_bo_unreference (&res->guest_memory_bo); +vmw_user_bo_unref (&res->guest_memory_bo); ret = -EINVAL ; goto out_unlock; }else {
@@ -1526,8 +1521,6 @@ vmw_gb_surface_define_internal(struct drm_device *dev, res->guest_memory_size, &backup_handle, &res->guest_memory_bo); -if (ret ==0 ) -vmw_bo_reference (res->guest_memory_bo); }if (unlikely (ret !=0 )) {
drivers/hid/hid-logitech-hidpp.c +2 -1
@@ -4515,7 +4515,8 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id) goto hid_hw_init_fail; } -hidpp_connect_event (hidpp); +schedule_work (&hidpp->work); +flush_work (&hidpp->work);if (will_restart) {/* Reset the HID node state */
drivers/hwtracing/coresight/coresight-tmc-etr.c +13 -11
@@ -1173,16 +1173,6 @@ static struct etr_buf *tmc_etr_get_sysfs_buffer(struct coresight_device *csdev) goto out; } -/* -* In sysFS mode we can have multiple writers per sink. Since this -* sink is already enabled no memory is needed and the HW need not be -* touched, even if the buffer size has changed. -*/ -if (drvdata->mode ==CS_MODE_SYSFS ) { -atomic_inc (&csdev->refcnt); - goto out; - } -/* * If we don't have a buffer or it doesn't match the requested size, * use the buffer allocated above. Otherwise reuse the existing buffer.
@@ -1204,7 +1194,7 @@ static struct etr_buf *tmc_etr_get_sysfs_buffer(struct coresight_device *csdev)static int tmc_enable_etr_sink_sysfs (struct coresight_device *csdev) { -int ret; +int ret =0 ;unsigned long flags;struct tmc_drvdata *drvdata =dev_get_drvdata (csdev->dev.parent);struct etr_buf *sysfs_buf =tmc_etr_get_sysfs_buffer (csdev);
@@ -1213,12 +1203,24 @@ static int tmc_enable_etr_sink_sysfs(struct coresight_device *csdev)return PTR_ERR (sysfs_buf);spin_lock_irqsave (&drvdata->spinlock, flags); + +/* +* In sysFS mode we can have multiple writers per sink. Since this +* sink is already enabled no memory is needed and the HW need not be +* touched, even if the buffer size has changed. +*/ +if (drvdata->mode ==CS_MODE_SYSFS ) { +atomic_inc (&csdev->refcnt); + goto out; + } + ret =tmc_etr_enable_hw (drvdata, sysfs_buf);if (!ret) { drvdata->mode =CS_MODE_SYSFS ;atomic_inc (&csdev->refcnt); } +out:spin_unlock_irqrestore (&drvdata->spinlock, flags);if (!ret)
drivers/iio/adc/ad7192.c +25 -4
@@ -177,6 +177,7 @@ struct ad7192_chip_info {struct ad7192_state {const struct ad7192_chip_info *chip_info;struct regulator *avdd; +struct regulator *vref;struct clk *mclk;u16 int_vref_mv;u32 fclk;
@@ -1014,10 +1015,30 @@ static int ad7192_probe(struct spi_device *spi)if (ret)return dev_err_probe (&spi->dev, ret,"Failed to enable specified DVdd supply\n" ); - ret =regulator_get_voltage (st->avdd); -if (ret <0 ) { -dev_err (&spi->dev,"Device tree error, reference voltage undefined\n" ); -return ret; + st->vref =devm_regulator_get_optional (&spi->dev,"vref" ); +if (IS_ERR (st->vref)) { +if (PTR_ERR (st->vref) != -ENODEV ) +return PTR_ERR (st->vref); + + ret =regulator_get_voltage (st->avdd); +if (ret <0 ) +return dev_err_probe (&spi->dev, ret, +"Device tree error, AVdd voltage undefined\n" ); + }else { + ret =regulator_enable (st->vref); +if (ret) { +dev_err (&spi->dev,"Failed to enable specified Vref supply\n" ); +return ret; + } + + ret =devm_add_action_or_reset (&spi->dev, ad7192_reg_disable, st->vref); +if (ret) +return ret; + + ret =regulator_get_voltage (st->vref); +if (ret <0 ) +return dev_err_probe (&spi->dev, ret, +"Device tree error, Vref voltage undefined\n" ); } st->int_vref_mv = ret /1000 ;
drivers/iio/adc/imx8qxp-adc.c +2 -2
@@ -38,8 +38,8 @@#define IMX8QXP_ADR_ADC_FCTRL 0x30#define IMX8QXP_ADR_ADC_SWTRIG 0x34#define IMX8QXP_ADR_ADC_TCTRL (tid) (0xc0 + (tid) * 4) -#define IMX8QXP_ADR_ADC_CMDH (cid) (0x100 + (cid) * 8) -#define IMX8QXP_ADR_ADC_CMDL (cid) (0x104 + (cid) * 8) +#define IMX8QXP_ADR_ADC_CMDL (cid) (0x100 + (cid) * 8) +#define IMX8QXP_ADR_ADC_CMDH (cid) (0x104 + (cid) * 8)#define IMX8QXP_ADR_ADC_RESFIFO 0x300#define IMX8QXP_ADR_ADC_TST 0xffc
drivers/iio/addac/Kconfig +2 -0
@@ -24,6 +24,8 @@ config AD74413R depends on GPIOLIB && SPI select REGMAP_SPI select CRC8 + select IIO_BUFFER + select IIO_TRIGGERED_BUFFER help Say yes here to build support for Analog Devices AD74412R/AD74413R quad-channel software configurable input/output solution.
drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c +5 -1
@@ -190,8 +190,11 @@ int cros_ec_sensors_push_data(struct iio_dev *indio_dev,/* * Ignore samples if the buffer is not set: it is needed if the ODR is * set but the buffer is not enabled yet. +* +* Note: iio_device_claim_buffer_mode() returns -EBUSY if the buffer +* is not enabled. */ -if (!iio_buffer_enabled (indio_dev)) +if (iio_device_claim_buffer_mode (indio_dev) <0 )return 0 ; out = (s16 *)st->samples;
@@ -210,6 +213,7 @@ int cros_ec_sensors_push_data(struct iio_dev *indio_dev,iio_push_to_buffers_with_timestamp (indio_dev, st->samples, timestamp + delta); +iio_device_release_buffer_mode (indio_dev);return 0 ; }EXPORT_SYMBOL_GPL (cros_ec_sensors_push_data);
drivers/iio/dac/ad3552r.c +2 -2
@@ -140,8 +140,8 @@ enum ad3552r_ch_vref_select { };enum ad3542r_id { -AD3542R_ID =0x4008 , -AD3552R_ID =0x4009 , +AD3542R_ID =0x4009 , +AD3552R_ID =0x4008 , };enum ad3552r_ch_output_range {
drivers/iio/frequency/admv1013.c +2 -2
@@ -351,9 +351,9 @@ static int admv1013_update_mixer_vgate(struct admv1013_state *st)if (vcm <0 )return vcm; -if (vcm <1800000 ) +if (vcm <=1800000 ) mixer_vgate = (2389 * vcm /1000000 +8100 ) /100 ; -else if (vcm >1800000 && vcm <2600000 ) +else if (vcm >1800000 && vcm <=2600000 ) mixer_vgate = (2375 * vcm /1000000 +125 ) /100 ;else return -EINVAL ;
drivers/iio/imu/bno055/Kconfig +2 -0
@@ -2,6 +2,8 @@ config BOSCH_BNO055 tristate + select IIO_BUFFER + select IIO_TRIGGERED_BUFFER config BOSCH_BNO055_SERIAL tristate "Bosch BNO055 attached via UART"
drivers/iio/pressure/bmp280-core.c +1 -1
@@ -2179,7 +2179,7 @@ int bmp280_common_probe(struct device *dev,* however as it happens, the BMP085 shares the chip ID of BMP180 * so we look for an IRQ if we have that. */ -if (irq >0 || (chip_id ==BMP180_CHIP_ID )) { +if (irq >0 && (chip_id ==BMP180_CHIP_ID )) { ret =bmp085_fetch_eoc_irq (dev, name, irq, data);if (ret)return ret;
drivers/iio/pressure/dps310.c +4 -4
@@ -57,8 +57,8 @@#define DPS310_RESET_MAGIC 0x09#define DPS310_COEF_BASE 0x10 -/* Make sure sleep time is <= 20ms for usleep_range */ -#define DPS310_POLL_SLEEP_US (t) min(20000, (t) / 8) +/* Make sure sleep time is <= 30ms for usleep_range */ +#define DPS310_POLL_SLEEP_US (t) min(30000, (t) / 8)/* Silently handle error in rate value here */ #define DPS310_POLL_TIMEOUT_US (rc) ((rc) <= 0 ? 1000000 : 1000000 / (rc))
@@ -402,8 +402,8 @@ static int dps310_reset_wait(struct dps310_data *data)if (rc)return rc; -/* Wait for device chip access: 2.5ms in specification */ -usleep_range (2500 ,12000 ); +/* Wait for device chip access: 15ms in specification */ +usleep_range (15000 ,55000 );return 0 ; }
drivers/iio/pressure/ms5611_core.c +1 -1
@@ -76,7 +76,7 @@ static bool ms5611_prom_is_valid(u16 *prom, size_t len) crc = (crc >>12 ) &0x000F ; -return crc_orig !=0x0000 && crc == crc_orig; +return crc == crc_orig; }static int ms5611_read_prom (struct iio_dev *indio_dev)
drivers/infiniband/hw/cxgb4/cm.c +3 -0
@@ -1965,6 +1965,9 @@ static int send_fw_act_open_req(struct c4iw_ep *ep, unsigned int atid)int win; skb =get_skb (NULL ,sizeof (*req),GFP_KERNEL ); +if (!skb) +return -ENOMEM ; + req =__skb_put_zero (skb,sizeof (*req)); req->op_compl =htonl (WR_OP_V (FW_OFLD_CONNECTION_WR )); req->len16_pkd =htonl (FW_WR_LEN16_V (DIV_ROUND_UP (sizeof (*req),16 )));
drivers/input/joystick/xpad.c +4 -0
@@ -130,6 +130,7 @@ static const struct xpad_device { { 0x0079, 0x18d4, "GPD Win 2 X-Box Controller", 0, XTYPE_XBOX360 }, { 0x03eb, 0xff01, "Wooting One (Legacy)", 0, XTYPE_XBOX360 }, { 0x03eb, 0xff02, "Wooting Two (Legacy)", 0, XTYPE_XBOX360 }, + { 0x03f0, 0x0495, "HyperX Clutch Gladiate", 0, XTYPE_XBOXONE }, { 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX }, { 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX }, { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
@@ -271,6 +272,7 @@ static const struct xpad_device { { 0x1038, 0x1430, "SteelSeries Stratus Duo", 0, XTYPE_XBOX360 }, { 0x1038, 0x1431, "SteelSeries Stratus Duo", 0, XTYPE_XBOX360 }, { 0x11c9, 0x55f0, "Nacon GC-100XF", 0, XTYPE_XBOX360 }, + { 0x11ff, 0x0511, "PXN V900", 0, XTYPE_XBOX360 }, { 0x1209, 0x2882, "Ardwiino Controller", 0, XTYPE_XBOX360 }, { 0x12ab, 0x0004, "Honey Bee Xbox360 dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, { 0x12ab, 0x0301, "PDP AFTERGLOW AX.1", 0, XTYPE_XBOX360 },
@@ -457,6 +459,7 @@ static const struct usb_device_id xpad_table[] = { { USB_INTERFACE_INFO('X', 'B', 0) }, /* Xbox USB-IF not-approved class */XPAD_XBOX360_VENDOR (0x0079 ),/* GPD Win 2 controller */ XPAD_XBOX360_VENDOR (0x03eb ),/* Wooting Keyboards (Legacy) */ +XPAD_XBOXONE_VENDOR (0x03f0 ),/* HP HyperX Xbox One controllers */ XPAD_XBOX360_VENDOR (0x044f ),/* Thrustmaster Xbox 360 controllers */ XPAD_XBOX360_VENDOR (0x045e ),/* Microsoft Xbox 360 controllers */ XPAD_XBOXONE_VENDOR(0x045e), /* Microsoft Xbox One controllers */
@@ -475,6 +478,7 @@ static const struct usb_device_id xpad_table[] = {XPAD_XBOX360_VENDOR (0x1038 ),/* SteelSeries controllers */ XPAD_XBOXONE_VENDOR (0x10f5 ),/* Turtle Beach Controllers */ XPAD_XBOX360_VENDOR (0x11c9 ),/* Nacon GC100XF */ +XPAD_XBOX360_VENDOR (0x11ff ),/* PXN V900 */ XPAD_XBOX360_VENDOR (0x1209 ),/* Ardwiino Controllers */ XPAD_XBOX360_VENDOR (0x12ab ),/* Xbox 360 dance pads */ XPAD_XBOX360_VENDOR(0x1430), /* RedOctane Xbox 360 controllers */
drivers/input/misc/powermate.c +1 -0
@@ -425,6 +425,7 @@ static void powermate_disconnect(struct usb_interface *intf) pm->requires_update =0 ;usb_kill_urb (pm->irq);input_unregister_device (pm->input); +usb_kill_urb (pm->config);usb_free_urb (pm->irq);usb_free_urb (pm->config);powermate_free_buffers (interface_to_usbdev (intf), pm);
drivers/input/mouse/elantech.c +1 -0
@@ -2114,6 +2114,7 @@ static int elantech_setup_ps2(struct psmouse *psmouse, psmouse->protocol_handler = elantech_process_byte; psmouse->disconnect = elantech_disconnect; psmouse->reconnect = elantech_reconnect; + psmouse->fast_reconnect =NULL ; psmouse->pktsize = info->hw_version >1 ?6 :4 ;return 0 ;
drivers/input/mouse/synaptics.c +1 -0
@@ -1623,6 +1623,7 @@ static int synaptics_init_ps2(struct psmouse *psmouse, psmouse->set_rate = synaptics_set_rate; psmouse->disconnect = synaptics_disconnect; psmouse->reconnect = synaptics_reconnect; + psmouse->fast_reconnect =NULL ; psmouse->cleanup = synaptics_reset;/* Synaptics can usually stay in sync without extra help */ psmouse->resync_time =0 ;
drivers/input/serio/i8042-acpipnpio.h +8 -0
@@ -618,6 +618,14 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { }, .driver_data = (void *)(SERIO_QUIRK_NOMUX) }, + { +/* Fujitsu Lifebook E5411 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"FUJITSU CLIENT COMPUTING LIMITED" ), + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E5411"), + }, + .driver_data = (void *)(SERIO_QUIRK_NOAUX ) + }, {/* Gigabyte M912 */ .matches = {
drivers/input/touchscreen/goodix.c +19 -0
@@ -900,6 +900,25 @@ static int goodix_add_acpi_gpio_mappings(struct goodix_ts_data *ts)dev_info (dev,"No ACPI GpioInt resource, assuming that the GPIO order is reset, int\n" ); ts->irq_pin_access_method =IRQ_PIN_ACCESS_ACPI_GPIO ; gpio_mapping = acpi_goodix_int_last_gpios; + }else if (ts->gpio_count ==1 && ts->gpio_int_idx ==0 ) { +/* +* On newer devices there is only 1 GpioInt resource and _PS0 +* does the whole reset sequence for us. +*/ +acpi_device_fix_up_power (ACPI_COMPANION (dev)); + +/* +* Before the _PS0 call the int GPIO may have been in output +* mode and the call should have put the int GPIO in input mode, +* but the GPIO subsys cached state may still think it is +* in output mode, causing gpiochip_lock_as_irq() failure. +* +* Add a mapping for the int GPIO to make the +* gpiod_int = gpiod_get(..., GPIOD_IN) call succeed, +* which will explicitly set the direction to input. +*/ + ts->irq_pin_access_method =IRQ_PIN_ACCESS_NONE ; + gpio_mapping = acpi_goodix_int_first_gpios; }else {dev_warn (dev,"Unexpected ACPI resources: gpio_count %d, gpio_int_idx %d\n" , ts->gpio_count, ts->gpio_int_idx);
drivers/irqchip/irq-renesas-rzg2l.c +1 -1
@@ -118,7 +118,7 @@ static void rzg2l_irqc_irq_disable(struct irq_data *d)raw_spin_lock (&priv->lock); reg =readl_relaxed (priv->base +TSSR (tssr_index)); - reg &= ~(TSSEL_MASK << tssr_offset); + reg &= ~(TSSEL_MASK <<TSSEL_SHIFT (tssr_offset));writel_relaxed (reg, priv->base +TSSR (tssr_index));raw_spin_unlock (&priv->lock); }
drivers/mcb/mcb-core.c +3 -7
@@ -387,17 +387,13 @@ EXPORT_SYMBOL_NS_GPL(mcb_free_dev, MCB);static int __mcb_bus_add_devices (struct device *dev,void *data) { -struct mcb_device *mdev =to_mcb_device (dev);int retval; -if (mdev->is_added) -return 0 ; - retval =device_attach (dev); -if (retval <0 ) +if (retval <0 ) {dev_err (dev,"Error adding device (%d)\n" , retval); - - mdev->is_added = true; +return retval; + }return 0 ; }
drivers/mcb/mcb-parse.c +0 -2
@@ -99,8 +99,6 @@ static int chameleon_parse_gdd(struct mcb_bus *bus, mdev->mem.end = mdev->mem.start + size -1 ; mdev->mem.flags =IORESOURCE_MEM ; - mdev->is_added = false; - ret =mcb_device_register (bus, mdev);if (ret <0 ) goto err;
drivers/md/dm-crypt.c +2 -1
@@ -753,7 +753,8 @@ static int crypt_iv_eboiv_gen(struct crypt_config *cc, u8 *iv,int err;u8 *buf; - reqsize =ALIGN (crypto_skcipher_reqsize (tfm), __alignof__(__le64 )); + reqsize =sizeof (*req) +crypto_skcipher_reqsize (tfm); + reqsize =ALIGN (reqsize, __alignof__(__le64 )); req =kmalloc (reqsize + cc->iv_size,GFP_NOIO );if (!req)
drivers/media/v4l2-core/v4l2-subdev.c +7 -0
@@ -517,6 +517,13 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg,V4L2_SUBDEV_CLIENT_CAP_STREAMS ;int rval; +/* +* If the streams API is not enabled, remove V4L2_SUBDEV_CAP_STREAMS. +* Remove this when the API is no longer experimental. +*/ +if (!v4l2_subdev_enable_streams_api) + streams_subdev = false; +switch (cmd) {case VIDIOC_SUBDEV_QUERYCAP : {struct v4l2_subdev_capability *cap = arg;
drivers/net/can/Kconfig +1 -1
@@ -185,7 +185,7 @@ config CAN_SLCAN config CAN_SUN4I tristate "Allwinner A10 CAN controller" - depends on MACH_SUN4I || MACH_SUN7I || RISCV || COMPILE_TEST + depends on MACH_SUN4I || MACH_SUN7I || (RISCV && ARCH_SUNXI) || COMPILE_TEST help Say Y here if you want to use CAN controller found on Allwinner A10/A20/D1 SoCs.
drivers/net/can/sja1000/sja1000.c +7 -1
@@ -392,7 +392,13 @@ static irqreturn_t sja1000_reset_interrupt(int irq, void *dev_id)struct net_device *dev = (struct net_device *)dev_id;netdev_dbg (dev,"performing a soft reset upon overrun\n" ); -sja1000_start (dev); + +netif_tx_lock (dev); + +can_free_echo_skb (dev,0 ,NULL ); +sja1000_set_mode (dev,CAN_MODE_START ); + +netif_tx_unlock (dev);return IRQ_HANDLED ; }
drivers/net/dsa/qca/qca8k-8xxx.c +13 -2
@@ -505,8 +505,8 @@ qca8k_bulk_read(void *ctx, const void *reg_buf, size_t reg_len, void *val_buf, size_t val_len) { int i, count = val_len / sizeof(u32), ret; -u32 reg = *(u32 *)reg_buf &U16_MAX ;struct qca8k_priv *priv = ctx; +u32 reg = *(u16 *)reg_buf;if (priv->mgmt_master && !qca8k_read_eth (priv, reg, val_buf, val_len))
@@ -527,8 +527,8 @@ qca8k_bulk_gather_write(void *ctx, const void *reg_buf, size_t reg_len, const void *val_buf, size_t val_len) { int i, count = val_len / sizeof(u32), ret; -u32 reg = *(u32 *)reg_buf &U16_MAX ;struct qca8k_priv *priv = ctx; +u32 reg = *(u16 *)reg_buf;u32 *val = (u32 *)val_buf; if (priv->mgmt_master &&
@@ -666,6 +666,15 @@ qca8k_phy_eth_command(struct qca8k_priv *priv, bool read, int phy, goto err_read_skb; } +/* It seems that accessing the switch's internal PHYs via management +* packets still uses the MDIO bus within the switch internally, and +* these accesses can conflict with external MDIO accesses to other +* devices on the MDIO bus. +* We therefore need to lock the MDIO bus onto which the switch is +* connected. +*/ +mutex_lock (&priv->bus->mdio_lock); +/* Actually start the request: * 1. Send mdio master packet * 2. Busy Wait for mdio master command
@@ -678,6 +687,7 @@ qca8k_phy_eth_command(struct qca8k_priv *priv, bool read, int phy, mgmt_master = priv->mgmt_master;if (!mgmt_master) {mutex_unlock (&mgmt_eth_data->mutex); +mutex_unlock (&priv->bus->mdio_lock); ret = -EINVAL ; goto err_mgmt_master; }
@@ -765,6 +775,7 @@ qca8k_phy_eth_command(struct qca8k_priv *priv, bool read, int phy, QCA8K_ETHERNET_TIMEOUT);mutex_unlock (&mgmt_eth_data->mutex); +mutex_unlock (&priv->bus->mdio_lock);return ret;
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +3 -2
@@ -28,6 +28,9 @@ static inline void ixgbe_alloc_vf_macvlans(struct ixgbe_adapter *adapter,struct vf_macvlans *mv_list;int num_vf_macvlans, i; +/* Initialize list of VF macvlans */ +INIT_LIST_HEAD (&adapter->vf_mvs.l); + num_vf_macvlans = hw->mac.num_rar_entries - (IXGBE_MAX_PF_MACVLANS +1 + num_vfs);if (!num_vf_macvlans)
@@ -36,8 +39,6 @@ static inline void ixgbe_alloc_vf_macvlans(struct ixgbe_adapter *adapter, mv_list =kcalloc (num_vf_macvlans,sizeof (struct vf_macvlans ),GFP_KERNEL );if (mv_list) { -/* Initialize list of VF macvlans */ -INIT_LIST_HEAD (&adapter->vf_mvs.l);for (i =0 ; i < num_vf_macvlans; i++) { mv_list[i].vf =-1 ; mv_list[i].free = true;
drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c +9 -4
@@ -1357,10 +1357,12 @@ static int cn10k_mdo_upd_txsa(struct macsec_context *ctx)if (netif_running (secy->netdev)) {/* Keys cannot be changed after creation */ - err =cn10k_write_tx_sa_pn (pfvf, txsc, sa_num, - sw_tx_sa->next_pn); -if (err) -return err; +if (ctx->sa.update_pn) { + err =cn10k_write_tx_sa_pn (pfvf, txsc, sa_num, + sw_tx_sa->next_pn); +if (err) +return err; + } err =cn10k_mcs_link_tx_sa2sc (pfvf, secy, txsc, sa_num, sw_tx_sa->active);
@@ -1529,6 +1531,9 @@ static int cn10k_mdo_upd_rxsa(struct macsec_context *ctx)if (err)return err; +if (!ctx->sa.update_pn) +return 0 ; + err =cn10k_mcs_write_rx_sa_pn (pfvf, rxsc, sa_num, rx_sa->next_pn);if (err)
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c +1 -0
@@ -1401,6 +1401,7 @@ int otx2_pool_init(struct otx2_nic *pfvf, u16 pool_id,return 0 ; } + pp_params.order =get_order (buf_size); pp_params.flags =PP_FLAG_PAGE_FRAG |PP_FLAG_DMA_MAP ; pp_params.pool_size =min (OTX2_PAGE_POOL_SZ , numptrs); pp_params.nid =NUMA_NO_NODE ;
drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c +2 -2
@@ -612,7 +612,7 @@ static int mlx5e_macsec_upd_txsa(struct macsec_context *ctx) goto out; } -if (tx_sa->next_pn != ctx_tx_sa->next_pn_halves.lower) { +if (ctx->sa.update_pn) {netdev_err (netdev,"MACsec offload: update TX sa %d PN isn't supported\n" , assoc_num); err = -EINVAL ;
@@ -1017,7 +1017,7 @@ static int mlx5e_macsec_upd_rxsa(struct macsec_context *ctx) goto out; } -if (rx_sa->next_pn != ctx_rx_sa->next_pn_halves.lower) { +if (ctx->sa.update_pn) {netdev_err (ctx->netdev,"MACsec offload update RX sa %d PN isn't supported\n" , assoc_num);
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +2 -1
@@ -3952,13 +3952,14 @@ static int set_feature_rx_fcs(struct net_device *netdev, bool enable)struct mlx5e_channels *chs = &priv->channels;struct mlx5e_params new_params;int err; +bool rx_ts_over_crc = !enable;mutex_lock (&priv->state_lock); new_params = chs->params; new_params.scatter_fcs_en = enable; err =mlx5e_safe_switch_params (priv, &new_params, mlx5e_set_rx_port_ts_wrap, - &new_params.scatter_fcs_en, true); + &rx_ts_over_crc, true);mutex_unlock (&priv->state_lock);return err; }
drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c +2 -2
@@ -310,8 +310,8 @@ const struct mlxsw_sp_nve_ops mlxsw_sp1_nve_vxlan_ops = { .fdb_clear_offload = mlxsw_sp_nve_vxlan_clear_offload, }; -static bool mlxsw_sp2_nve_vxlan_learning_set (struct mlxsw_sp *mlxsw_sp, -bool learning_en) +static int mlxsw_sp2_nve_vxlan_learning_set (struct mlxsw_sp *mlxsw_sp, +bool learning_en) {char tnpc_pl[MLXSW_REG_TNPC_LEN ];
drivers/net/ethernet/netronome/nfp/flower/cmsg.c +6 -4
@@ -210,6 +210,7 @@ nfp_flower_cmsg_merge_hint_rx(struct nfp_app *app, struct sk_buff *skb)unsigned int msg_len =nfp_flower_cmsg_get_data_len (skb);struct nfp_flower_cmsg_merge_hint *msg;struct nfp_fl_payload *sub_flows[2 ]; +struct nfp_flower_priv *priv;int err, i, flow_cnt; msg =nfp_flower_cmsg_get_data (skb);
@@ -228,14 +229,15 @@ nfp_flower_cmsg_merge_hint_rx(struct nfp_app *app, struct sk_buff *skb)return ; } -rtnl_lock (); + priv = app->priv; +mutex_lock (&priv->nfp_fl_lock);for (i =0 ; i < flow_cnt; i++) {u32 ctx =be32_to_cpu (msg->flow[i].host_ctx); sub_flows[i] =nfp_flower_get_fl_payload_from_ctx (app, ctx);if (!sub_flows[i]) {nfp_flower_cmsg_warn (app,"Invalid flow in merge hint\n" ); - goto err_rtnl_unlock; + goto err_mutex_unlock; } }
@@ -244,8 +246,8 @@ nfp_flower_cmsg_merge_hint_rx(struct nfp_app *app, struct sk_buff *skb)if (err == -ENOMEM )nfp_flower_cmsg_warn (app,"Flow merge memory fail.\n" ); -err_rtnl_unlock: -rtnl_unlock (); +err_mutex_unlock: +mutex_unlock (&priv->nfp_fl_lock); } static void
drivers/net/ethernet/netronome/nfp/flower/conntrack.c +13 -6
@@ -2130,8 +2130,6 @@ nfp_fl_ct_offload_nft_flow(struct nfp_fl_ct_zone_entry *zt, struct flow_cls_offlstruct nfp_fl_ct_flow_entry *ct_entry;struct netlink_ext_ack *extack =NULL ; -ASSERT_RTNL (); - extack = flow->common.extack;switch (flow->command) {case FLOW_CLS_REPLACE :
@@ -2177,9 +2175,13 @@ int nfp_fl_ct_handle_nft_flow(enum tc_setup_type type, void *type_data, void *cbswitch (type) {case TC_SETUP_CLSFLOWER : -rtnl_lock (); +while (!mutex_trylock (&zt->priv->nfp_fl_lock)) { +if (!zt->nft)/* avoid deadlock */ +return err; +msleep (20 ); + } err =nfp_fl_ct_offload_nft_flow (zt, flow); -rtnl_unlock (); +mutex_unlock (&zt->priv->nfp_fl_lock);break ;default :return -EOPNOTSUPP ;
@@ -2207,6 +2209,7 @@ int nfp_fl_ct_del_flow(struct nfp_fl_ct_map_entry *ct_map_ent)struct nfp_fl_ct_flow_entry *ct_entry;struct nfp_fl_ct_zone_entry *zt;struct rhashtable *m_table; +struct nf_flowtable *nft;if (!ct_map_ent)return -ENOENT ;
@@ -2225,8 +2228,12 @@ int nfp_fl_ct_del_flow(struct nfp_fl_ct_map_entry *ct_map_ent)if (ct_map_ent->cookie >0 )kfree (ct_map_ent); -if (!zt->pre_ct_count) { - zt->nft =NULL ; +if (!zt->pre_ct_count && zt->nft) { + nft = zt->nft; + zt->nft =NULL ;/* avoid deadlock */ +nf_flow_table_offload_del_cb (nft, + nfp_fl_ct_handle_nft_flow, + zt);nfp_fl_ct_clean_nft_entries (zt); }break ;
drivers/net/ethernet/netronome/nfp/flower/main.h +2 -0
@@ -297,6 +297,7 @@ struct nfp_fl_internal_ports {* @predt_list: List to keep track of decap pretun flows * @neigh_table: Table to keep track of neighbor entries * @predt_lock: Lock to serialise predt/neigh table updates +* @nfp_fl_lock: Lock to protect the flow offload operation */ struct nfp_flower_priv {struct nfp_app *app;
@@ -339,6 +340,7 @@ struct nfp_flower_priv {struct list_head predt_list;struct rhashtable neigh_table;spinlock_t predt_lock;/* Lock to serialise predt/neigh table updates */ +struct mutex nfp_fl_lock;/* Protect the flow operation */ };/**
drivers/net/ethernet/netronome/nfp/flower/metadata.c +2 -0
@@ -528,6 +528,8 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count,if (err) goto err_free_stats_ctx_table; +mutex_init (&priv->nfp_fl_lock); + err =rhashtable_init (&priv->ct_zone_table, &nfp_zone_table_params);if (err) goto err_free_merge_table;
drivers/net/ethernet/netronome/nfp/flower/offload.c +18 -6
@@ -1009,8 +1009,6 @@ int nfp_flower_merge_offloaded_flows(struct nfp_app *app,u64 parent_ctx =0 ;int err; -ASSERT_RTNL (); -if (sub_flow1 == sub_flow2 ||nfp_flower_is_merge_flow (sub_flow1) ||nfp_flower_is_merge_flow (sub_flow2))
@@ -1727,19 +1725,30 @@ static int nfp_flower_repr_offload(struct nfp_app *app, struct net_device *netdev, struct flow_cls_offload *flower) { + struct nfp_flower_priv *priv = app->priv; +int ret; +if (!eth_proto_is_802_3 (flower->common.protocol))return -EOPNOTSUPP ; +mutex_lock (&priv->nfp_fl_lock);switch (flower->command) {case FLOW_CLS_REPLACE : -return nfp_flower_add_offload (app, netdev, flower); + ret =nfp_flower_add_offload (app, netdev, flower); +break ;case FLOW_CLS_DESTROY : -return nfp_flower_del_offload (app, netdev, flower); + ret =nfp_flower_del_offload (app, netdev, flower); +break ;case FLOW_CLS_STATS : -return nfp_flower_get_stats (app, netdev, flower); + ret =nfp_flower_get_stats (app, netdev, flower); +break ;default : -return -EOPNOTSUPP ; + ret = -EOPNOTSUPP ; +break ; } +mutex_unlock (&priv->nfp_fl_lock); + +return ret; } static int nfp_flower_setup_tc_block_cb(enum tc_setup_type type,
@@ -1778,6 +1787,7 @@ static int nfp_flower_setup_tc_block(struct net_device *netdev, repr_priv = repr->app_priv; repr_priv->block_shared = f->block_shared; f->driver_block_list = &nfp_block_cb_list; + f->unlocked_driver_cb = true;switch (f->command) {case FLOW_BLOCK_BIND :
@@ -1876,6 +1886,8 @@ nfp_flower_setup_indr_tc_block(struct net_device *netdev, struct Qdisc *sch, str nfp_flower_internal_port_can_offload(app, netdev)))return -EOPNOTSUPP ; + f->unlocked_driver_cb = true; +switch (f->command) {case FLOW_BLOCK_BIND : cb_priv =nfp_flower_indr_block_cb_priv_lookup (app, netdev);
drivers/net/ethernet/netronome/nfp/flower/qos_conf.c +13 -7
@@ -523,25 +523,31 @@ int nfp_flower_setup_qos_offload(struct nfp_app *app, struct net_device *netdev, {struct netlink_ext_ack *extack = flow->common.extack;struct nfp_flower_priv *fl_priv = app->priv; +int ret;if (!(fl_priv->flower_ext_feats &NFP_FL_FEATS_VF_RLIM )) {NL_SET_ERR_MSG_MOD (extack,"unsupported offload: loaded firmware does not support qos rate limit offload" );return -EOPNOTSUPP ; } +mutex_lock (&fl_priv->nfp_fl_lock);switch (flow->command) {case TC_CLSMATCHALL_REPLACE : -return nfp_flower_install_rate_limiter (app, netdev, flow, - extack); + ret =nfp_flower_install_rate_limiter (app, netdev, flow, extack); +break ;case TC_CLSMATCHALL_DESTROY : -return nfp_flower_remove_rate_limiter (app, netdev, flow, - extack); + ret =nfp_flower_remove_rate_limiter (app, netdev, flow, extack); +break ;case TC_CLSMATCHALL_STATS : -return nfp_flower_stats_rate_limiter (app, netdev, flow, - extack); + ret =nfp_flower_stats_rate_limiter (app, netdev, flow, extack); +break ;default : -return -EOPNOTSUPP ; + ret = -EOPNOTSUPP ; +break ; } +mutex_unlock (&fl_priv->nfp_fl_lock); + +return ret; }/* Offload tc action, currently only for tc police */
drivers/net/ethernet/renesas/ravb_main.c +4 -2
@@ -2168,6 +2168,8 @@ static int ravb_close(struct net_device *ndev)of_phy_deregister_fixed_link (np); } +cancel_work_sync (&priv->work); +if (info->multi_irqs) {free_irq (priv->tx_irqs[RAVB_NC ], ndev);free_irq (priv->rx_irqs[RAVB_NC ], ndev);
@@ -2892,8 +2894,6 @@ static int ravb_remove(struct platform_device *pdev)clk_disable_unprepare (priv->gptp_clk);clk_disable_unprepare (priv->refclk); -dma_free_coherent (ndev->dev.parent, priv->desc_bat_size, priv->desc_bat, - priv->desc_bat_dma);/* Set reset mode */ ravb_write (ndev,CCC_OPC_RESET ,CCC );unregister_netdev (ndev);
@@ -2901,6 +2901,8 @@ static int ravb_remove(struct platform_device *pdev)netif_napi_del (&priv->napi[RAVB_NC ]);netif_napi_del (&priv->napi[RAVB_BE ]);ravb_mdio_release (priv); +dma_free_coherent (ndev->dev.parent, priv->desc_bat_size, priv->desc_bat, + priv->desc_bat_dma);pm_runtime_put_sync (&pdev->dev);pm_runtime_disable (&pdev->dev);reset_control_assert (priv->rstc);
drivers/net/ethernet/renesas/rswitch.c +7 -5
@@ -1255,7 +1255,7 @@ static void rswitch_adjust_link(struct net_device *ndev)phy_print_status (phydev);if (phydev->link)phy_power_on (rdev->serdes); -else +else if (rdev->serdes->power_count)phy_power_off (rdev->serdes); rdev->etha->link = phydev->link;
@@ -1942,15 +1942,17 @@ static void rswitch_deinit(struct rswitch_private *priv)rswitch_gwca_hw_deinit (priv);rcar_gen4_ptp_unregister (priv->ptp_priv); -for (i =0 ; i <RSWITCH_NUM_PORTS ; i++) { +rswitch_for_each_enabled_port (priv, i) {struct rswitch_device *rdev = priv->rdev[i]; -phy_exit (priv->rdev[i]->serdes); -rswitch_ether_port_deinit_one (rdev);unregister_netdev (rdev->ndev); -rswitch_device_free (priv, i); +rswitch_ether_port_deinit_one (rdev); +phy_exit (priv->rdev[i]->serdes); } +for (i =0 ; i <RSWITCH_NUM_PORTS ; i++) +rswitch_device_free (priv, i); +rswitch_gwca_ts_queue_free (priv);rswitch_gwca_linkfix_free (priv);
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +0 -30
@@ -5940,33 +5940,6 @@ static irqreturn_t stmmac_msi_intr_rx(int irq, void *data)return IRQ_HANDLED ; } -#ifdef CONFIG_NET_POLL_CONTROLLER -/* Polling receive - used by NETCONSOLE and other diagnostic tools -* to allow network I/O with interrupts disabled. -*/ -static void stmmac_poll_controller (struct net_device *dev) -{ -struct stmmac_priv *priv =netdev_priv (dev); -int i; - -/* If adapter is down, do nothing */ -if (test_bit (STMMAC_DOWN , &priv->state)) -return ; - -if (priv->plat->multi_msi_en) { -for (i =0 ; i < priv->plat->rx_queues_to_use; i++) -stmmac_msi_intr_rx (0 , &priv->dma_conf.rx_queue[i]); - -for (i =0 ; i < priv->plat->tx_queues_to_use; i++) -stmmac_msi_intr_tx (0 , &priv->dma_conf.tx_queue[i]); - }else { -disable_irq (dev->irq); -stmmac_interrupt (dev->irq, dev); -enable_irq (dev->irq); - } -} -#endif -/** * stmmac_ioctl - Entry point for the Ioctl * @dev: Device pointer.
@@ -6802,9 +6775,6 @@ static const struct net_device_ops stmmac_netdev_ops = { .ndo_eth_ioctl = stmmac_ioctl, .ndo_setup_tc = stmmac_setup_tc, .ndo_select_queue = stmmac_select_queue, -#ifdef CONFIG_NET_POLL_CONTROLLER - .ndo_poll_controller = stmmac_poll_controller, -#endif .ndo_set_mac_address = stmmac_set_mac_address, .ndo_vlan_rx_add_vid = stmmac_vlan_rx_add_vid, .ndo_vlan_rx_kill_vid = stmmac_vlan_rx_kill_vid,
drivers/net/ieee802154/ca8210.c +3 -14
@@ -2741,7 +2741,6 @@ static int ca8210_register_ext_clock(struct spi_device *spi)struct device_node *np = spi->dev.of_node;struct ca8210_priv *priv =spi_get_drvdata (spi);struct ca8210_platform_data *pdata = spi->dev.platform_data; -int ret =0 ;if (!np)return -EFAULT ;
@@ -2758,18 +2757,8 @@ static int ca8210_register_ext_clock(struct spi_device *spi)dev_crit (&spi->dev,"Failed to register external clk\n" );return PTR_ERR (priv->clk); } - ret =of_clk_add_provider (np, of_clk_src_simple_get, priv->clk); -if (ret) { -clk_unregister (priv->clk); -dev_crit ( - &spi->dev, -"Failed to register external clock as clock provider\n" - ); - }else { -dev_info (&spi->dev,"External clock set as clock provider\n" ); - } -return ret; +return of_clk_add_provider (np, of_clk_src_simple_get, priv->clk); }/**
@@ -2781,8 +2770,8 @@ static void ca8210_unregister_ext_clock(struct spi_device *spi) {struct ca8210_priv *priv =spi_get_drvdata (spi); -if (!priv->clk) -return +if (IS_ERR_OR_NULL (priv->clk)) +return ;of_clk_del_provider (spi->dev.of_node);clk_unregister (priv->clk);
drivers/net/macsec.c +2 -0
@@ -2394,6 +2394,7 @@ static int macsec_upd_txsa(struct sk_buff *skb, struct genl_info *info) ctx.sa.assoc_num = assoc_num; ctx.sa.tx_sa = tx_sa; + ctx.sa.update_pn = !!prev_pn.full64; ctx.secy = secy; ret =macsec_offload (ops->mdo_upd_txsa, &ctx);
@@ -2487,6 +2488,7 @@ static int macsec_upd_rxsa(struct sk_buff *skb, struct genl_info *info) ctx.sa.assoc_num = assoc_num; ctx.sa.rx_sa = rx_sa; + ctx.sa.update_pn = !!prev_pn.full64; ctx.secy = secy; ret =macsec_offload (ops->mdo_upd_rxsa, &ctx);
drivers/net/phy/mscc/mscc_macsec.c +6 -0
@@ -849,6 +849,9 @@ static int vsc8584_macsec_upd_rxsa(struct macsec_context *ctx)struct macsec_flow *flow;int ret; +if (ctx->sa.update_pn) +return -EINVAL ; + flow =vsc8584_macsec_find_flow (ctx,MACSEC_INGR );if (IS_ERR (flow))return PTR_ERR (flow);
@@ -900,6 +903,9 @@ static int vsc8584_macsec_upd_txsa(struct macsec_context *ctx)struct macsec_flow *flow;int ret; +if (ctx->sa.update_pn) +return -EINVAL ; + flow =vsc8584_macsec_find_flow (ctx,MACSEC_EGR );if (IS_ERR (flow))return PTR_ERR (flow);
drivers/net/usb/dm9601.c +6 -1
@@ -222,13 +222,18 @@ static int dm9601_mdio_read(struct net_device *netdev, int phy_id, int loc)struct usbnet *dev =netdev_priv (netdev);__le16 res; +int err;if (phy_id) {netdev_dbg (dev->net,"Only internal phy supported\n" );return 0 ; } -dm_read_shared_word (dev,1 , loc, &res); + err =dm_read_shared_word (dev,1 , loc, &res); +if (err <0 ) { +netdev_err (dev->net,"MDIO read error: %d\n" , err); +return err; + } netdev_dbg(dev->net, "dm9601_mdio_read() phy_id=0x%02x, loc=0x%02x, returns=0x%04x\n",
drivers/net/xen-netback/interface.c +0 -4
@@ -41,8 +41,6 @@#include <asm/xen/hypercall.h> #include <xen/balloon.h> -#define XENVIF_QUEUE_LENGTH 32 -/* Number of bytes allowed on the internal guest Rx queue. */ #define XENVIF_RX_QUEUE_BYTES (XEN_NETIF_RX_RING_SIZE/2 * PAGE_SIZE)
@@ -530,8 +528,6 @@ struct xenvif *xenvif_alloc(struct device *parent, domid_t domid, dev->features = dev->hw_features |NETIF_F_RXCSUM ; dev->ethtool_ops = &xenvif_ethtool_ops; - dev->tx_queue_len =XENVIF_QUEUE_LENGTH ; - dev->min_mtu =ETH_MIN_MTU ; dev->max_mtu =ETH_MAX_MTU -VLAN_ETH_HLEN ;
drivers/perf/arm-cmn.c +1 -1
@@ -1862,7 +1862,7 @@ static irqreturn_t arm_cmn_handle_irq(int irq, void *dev_id)u64 delta;int i; -for (i =0 ; i <CMN_DTM_NUM_COUNTERS ; i++) { +for (i =0 ; i <CMN_DT_NUM_COUNTERS ; i++) {if (status & (1U << i)) { ret =IRQ_HANDLED ;if (WARN_ON (!dtc->counters[i]))
drivers/phy/freescale/phy-fsl-lynx-28g.c +24 -3
@@ -126,6 +126,10 @@ struct lynx_28g_lane {struct lynx_28g_priv {void __iomem *base;struct device *dev; +/* Serialize concurrent access to registers shared between lanes, +* like PCCn +*/ +spinlock_t pcc_lock;struct lynx_28g_pll pll[LYNX_28G_NUM_PLL ];struct lynx_28g_lane lane[LYNX_28G_NUM_LANE ];
@@ -396,6 +400,8 @@ static int lynx_28g_set_mode(struct phy *phy, enum phy_mode mode, int submode)if (powered_up)lynx_28g_power_off (phy); +spin_lock (&priv->pcc_lock); +switch (submode) {case PHY_INTERFACE_MODE_SGMII :case PHY_INTERFACE_MODE_1000BASEX :
@@ -412,6 +418,8 @@ static int lynx_28g_set_mode(struct phy *phy, enum phy_mode mode, int submode) lane->interface = submode; out: +spin_unlock (&priv->pcc_lock); +/* Power up the lane if necessary */ if (powered_up)lynx_28g_power_on (phy);
@@ -507,11 +515,12 @@ static void lynx_28g_cdr_lock_check(struct work_struct *work)for (i =0 ; i <LYNX_28G_NUM_LANE ; i++) { lane = &priv->lane[i]; -if (!lane->init) -continue ; +mutex_lock (&lane->phy->mutex); -if (!lane->powered_up) +if (!lane->init || !lane->powered_up) { +mutex_unlock (&lane->phy->mutex);continue ; + } rrstctl =lynx_28g_lane_read (lane, LNaRRSTCTL);if (!(rrstctl & LYNX_28G_LNaRRSTCTL_CDR_LOCK)) {
@@ -520,6 +529,8 @@ static void lynx_28g_cdr_lock_check(struct work_struct *work) rrstctl =lynx_28g_lane_read (lane, LNaRRSTCTL); }while (!(rrstctl & LYNX_28G_LNaRRSTCTL_RST_DONE)); } + +mutex_unlock (&lane->phy->mutex); }queue_delayed_work (system_power_efficient_wq, &priv->cdr_check,msecs_to_jiffies (1000 ));
@@ -592,6 +603,7 @@ static int lynx_28g_probe(struct platform_device *pdev)dev_set_drvdata (dev, priv); +spin_lock_init (&priv->pcc_lock);INIT_DELAYED_WORK (&priv->cdr_check, lynx_28g_cdr_lock_check); queue_delayed_work(system_power_efficient_wq, &priv->cdr_check,
Lines of this file are not shown. View the raw message.
drivers/pinctrl/nuvoton/pinctrl-wpcm450.c +3 -3
Lines of this file are not shown. View the raw message.
drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c +0 -2
Lines of this file are not shown. View the raw message.
drivers/thunderbolt/xdomain.c +41 -17
58 lines not on this page · raw message
drivers/usb/typec/altmodes/displayport.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/usb/typec/tcpm/qcom/qcom_pmic_typec_pdphy.c +6 -6
Lines of this file are not shown. View the raw message.
fs/fs_context.c +38 -8
46 lines not on this page · raw message
fs/overlayfs/params.c +59 -67
126 lines not on this page · raw message
fs/quota/dquot.c +39 -27
66 lines not on this page · raw message
security/keys/trusted-keys/trusted_core.c +5 -8
Lines of this file are not shown. View the raw message.
sound/pci/hda/cs35l41_hda.c +79 -36
115 lines not on this page · raw message
sound/pci/hda/patch_realtek.c +79 -10
89 lines not on this page · raw message
sound/soc/intel/common/soc-acpi-intel-adl-match.c +6 -6
Lines of this file are not shown. View the raw message.
sound/soc/intel/common/soc-acpi-intel-mtl-match.c +25 -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.