Skip to contentSkip to conversation

Linux 6.1.35

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Jun 21, 2023 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 6.1.35 kernel.

All users of the 6.1 kernel series must upgrade.

The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary

thanks,

greg k-h

------------

 Makefile                                                    |    2 
 arch/arm/boot/dts/vexpress-v2p-ca5s.dts                     |    1 
 arch/loongarch/kernel/perf_event.c                          |    6 
 arch/mips/Kconfig                                           |    1 
 arch/mips/Makefile                                          |    4 
 arch/mips/alchemy/common/dbdma.c                            |   27 -
 arch/mips/kernel/cpu-probe.c                                |    5 
 arch/mips/kernel/setup.c                                    |    9 
 arch/mips/loongson2ef/Platform                              |    2 
 arch/nios2/boot/dts/10m50_devboard.dts                      |    2 
 arch/nios2/boot/dts/3c120_devboard.dts                      |    2 
 arch/parisc/include/asm/assembly.h                          |    4 
 arch/parisc/kernel/pci-dma.c                                |   18 
 arch/powerpc/purgatory/Makefile                             |    5 
 arch/riscv/purgatory/Makefile                               |    5 
 arch/x86/boot/compressed/Makefile                           |    2 
 arch/x86/kernel/head_64.S                                   |   18 
 arch/x86/purgatory/Makefile                                 |    5 
 drivers/block/xen-blkfront.c                                |    3 
 drivers/char/agp/parisc-agp.c                               |   15 
 drivers/clk/pxa/clk-pxa3xx.c                                |    2 
 drivers/edac/qcom_edac.c                                    |  122 ++---
 drivers/gpu/drm/amd/amdgpu/amdgpu_display.c                 |    1 
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c                     |    1 
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c                     |    7 
 drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c                      |    4 
 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c                       |    4 
 drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c                       |    6 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c           |   10 
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c        |   33 +
 drivers/gpu/drm/bridge/ti-sn65dsi86.c                       |    4 
 drivers/gpu/drm/drm_panel_orientation_quirks.c              |    2 
 drivers/gpu/drm/nouveau/nouveau_acpi.c                      |    3 
 drivers/gpu/drm/nouveau/nouveau_connector.c                 |    7 
 drivers/gpu/drm/nouveau/nouveau_drm.c                       |   14 
 drivers/infiniband/core/cma.c                               |    4 
 drivers/infiniband/core/uverbs_cmd.c                        |    7 
 drivers/infiniband/core/uverbs_main.c                       |   12 
 drivers/infiniband/hw/mlx5/fs.c                             |  276 +++++++++++-
 drivers/infiniband/hw/mlx5/fs.h                             |   16 
 drivers/infiniband/hw/mlx5/main.c                           |    3 
 drivers/infiniband/hw/mlx5/mlx5_ib.h                        |   14 
 drivers/infiniband/hw/mlx5/qp.c                             |    3 
 drivers/infiniband/sw/rxe/rxe_net.c                         |    6 
 drivers/infiniband/sw/rxe/rxe_qp.c                          |   16 
 drivers/infiniband/sw/rxe/rxe_resp.c                        |    3 
 drivers/infiniband/sw/rxe/rxe_task.c                        |    4 
 drivers/infiniband/sw/rxe/rxe_task.h                        |    4 
 drivers/infiniband/ulp/isert/ib_isert.c                     |   16 
 drivers/infiniband/ulp/rtrs/rtrs-clt.c                      |   55 +-
 drivers/infiniband/ulp/rtrs/rtrs.c                          |    4 
 drivers/irqchip/irq-gic-common.c                            |   10 
 drivers/irqchip/irq-gic-common.h                            |    1 
 drivers/irqchip/irq-gic-v3.c                                |   20 
 drivers/irqchip/irq-meson-gpio.c                            |    2 
 drivers/md/dm-ioctl.c                                       |    5 
 drivers/md/dm-thin-metadata.c                               |   20 
 drivers/md/dm-thin.c                                        |    3 
 drivers/md/dm.c                                             |    4 
 drivers/net/dsa/ocelot/felix_vsc9959.c                      |    2 
 drivers/net/ethernet/freescale/enetc/enetc_qos.c            |    4 
 drivers/net/ethernet/intel/iavf/iavf.h                      |    2 
 drivers/net/ethernet/intel/iavf/iavf_main.c                 |   15 
 drivers/net/ethernet/intel/iavf/iavf_register.h             |    2 
 drivers/net/ethernet/intel/ice/ice_main.c                   |    4 
 drivers/net/ethernet/intel/igb/igb_ethtool.c                |    3 
 drivers/net/ethernet/intel/igb/igb_main.c                   |    8 
 drivers/net/ethernet/intel/igc/igc_main.c                   |   12 
 drivers/net/ethernet/marvell/octeon_ep/octep_main.c         |    7 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c         |    7 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_hash.c    |   29 -
 drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h         |   12 
 drivers/net/ethernet/sfc/efx_channels.c                     |    2 
 drivers/net/ethernet/sfc/siena/efx_channels.c               |    2 
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c           |    9 
 drivers/net/ipvlan/ipvlan_l3s.c                             |    4 
 drivers/net/macsec.c                                        |   12 
 drivers/net/phy/phylink.c                                   |   41 +
 drivers/net/usb/qmi_wwan.c                                  |    2 
 drivers/net/wan/lapbether.c                                 |    3 
 drivers/nvme/host/pci.c                                     |    2 
 drivers/of/overlay.c                                        |    1 
 drivers/pci/quirks.c                                        |    9 
 drivers/platform/x86/asus-nb-wmi.c                          |    2 
 drivers/power/supply/ab8500_btemp.c                         |    6 
 drivers/power/supply/ab8500_fg.c                            |    6 
 drivers/power/supply/bq27xxx_battery.c                      |    6 
 drivers/power/supply/power_supply_core.c                    |    8 
 drivers/power/supply/power_supply_sysfs.c                   |    3 
 drivers/power/supply/sc27xx_fuel_gauge.c                    |    9 
 drivers/regulator/core.c                                    |    4 
 drivers/soc/qcom/llcc-qcom.c                                |   72 +--
 drivers/spi/spi-cadence-quadspi.c                           |    7 
 drivers/spi/spi-fsl-dspi.c                                  |   15 
 drivers/target/target_core_transport.c                      |    2 
 drivers/thunderbolt/dma_test.c                              |    8 
 drivers/thunderbolt/nhi.c                                   |   11 
 drivers/thunderbolt/tb.c                                    |   17 
 drivers/tty/serial/lantiq.c                                 |    1 
 drivers/usb/dwc3/core.c                                     |    5 
 drivers/usb/dwc3/dwc3-qcom.c                                |   11 
 drivers/usb/dwc3/gadget.c                                   |    1 
 drivers/usb/gadget/udc/core.c                               |  180 +++++--
 drivers/usb/serial/option.c                                 |   16 
 drivers/usb/typec/pd.c                                      |    2 
 drivers/usb/typec/ucsi/ucsi.c                               |   11 
 fs/afs/vl_probe.c                                           |    4 
 fs/btrfs/block-group.c                                      |   14 
 fs/btrfs/disk-io.c                                          |   10 
 fs/btrfs/file-item.c                                        |    4 
 fs/btrfs/inode.c                                            |   20 
 fs/btrfs/scrub.c                                            |    9 
 fs/cifs/file.c                                              |    8 
 fs/eventpoll.c                                              |    6 
 fs/ext4/balloc.c                                            |   20 
 fs/ksmbd/connection.c                                       |    5 
 fs/ksmbd/smb_common.c                                       |   14 
 fs/nilfs2/btnode.c                                          |   12 
 fs/nilfs2/sufile.c                                          |    9 
 fs/nilfs2/the_nilfs.c                                       |   43 +
 fs/ocfs2/file.c                                             |    8 
 fs/ocfs2/super.c                                            |    6 
 include/linux/mlx5/driver.h                                 |   12 
 include/linux/soc/qcom/llcc-qcom.h                          |   12 
 include/net/neighbour.h                                     |    2 
 include/net/netfilter/nf_tables.h                           |    4 
 include/net/sch_generic.h                                   |    8 
 include/rdma/ib_addr.h                                      |   23 -
 include/sound/soc-acpi.h                                    |    1 
 include/sound/soc-dpcm.h                                    |    4 
 include/uapi/linux/ethtool_netlink.h                        |    2 
 include/uapi/linux/rtnetlink.h                              |    2 
 io_uring/net.c                                              |    8 
 io_uring/sqpoll.c                                           |    6 
 kernel/bpf/cgroup.c                                         |   38 -
 kernel/bpf/cgroup_iter.c                                    |    4 
 kernel/bpf/local_storage.c                                  |    4 
 kernel/cgroup/cgroup-v1.c                                   |   20 
 kernel/cgroup/cgroup.c                                      |   77 +--
 kernel/kexec_file.c                                         |   14 
 kernel/rcu/tree.c                                           |   27 -
 lib/test_firmware.c                                         |   55 +-
 mm/zswap.c                                                  |   11 
 net/core/neighbour.c                                        |   31 -
 net/ipv6/ping.c                                             |    3 
 net/mac80211/cfg.c                                          |    9 
 net/mac80211/link.c                                         |    4 
 net/netfilter/nf_tables_api.c                               |   59 ++
 net/netfilter/nfnetlink.c                                   |    3 
 net/netfilter/nft_set_pipapo.c                              |   55 +-
 net/sched/act_api.c                                         |   15 
 net/sched/act_pedit.c                                       |  176 ++++---
 net/sched/cls_api.c                                         |   74 ++-
 net/sched/cls_u32.c                                         |   18 
 net/sched/sch_api.c                                         |   97 ++--
 net/sched/sch_generic.c                                     |   14 
 net/sctp/sm_statefuns.c                                     |    2 
 net/tipc/bearer.c                                           |    4 
 net/wireless/rdev-ops.h                                     |    6 
 net/wireless/reg.c                                          |    7 
 scripts/Kconfig.include                                     |    2 
 scripts/Makefile.compiler                                   |    8 
 scripts/as-version.sh                                       |    2 
 sound/pci/hda/patch_realtek.c                               |    1 
 sound/soc/codecs/cs35l41-lib.c                              |    6 
 sound/soc/dwc/dwc-i2s.c                                     |   41 -
 sound/soc/intel/avs/board_selection.c                       |    2 
 sound/soc/intel/avs/pcm.c                                   |   23 -
 sound/soc/soc-pcm.c                                         |   20 
 sound/usb/pcm.c                                             |    4 
 sound/usb/quirks.c                                          |    2 
 tools/gpio/lsgpio.c                                         |    2 
 tools/testing/selftests/gpio/gpio-sim.sh                    |    3 
 tools/testing/selftests/net/forwarding/hw_stats_l3.sh       |   11 
 tools/testing/selftests/ptp/testptp.c                       |    6 
 tools/testing/selftests/tc-testing/config                   |    1 
 tools/testing/selftests/tc-testing/tc-tests/qdiscs/sfb.json |    4 
 tools/testing/selftests/tc-testing/tdc.sh                   |    1 
 178 files changed, 1837 insertions(+), 866 deletions(-)

Ahmed Zaki (1):
iavf: remove mask from iavf_irq_enable_queues()

Aleksandr Loktionov (1):
igb: fix nvm.ops.read() error handling

Alex Deucher (1):
drm/amdgpu: add missing radeon secondary PCI ID

Alex Maftei (1):
selftests/ptp: Fix timestamp printf format for PTP_SYS_OFFSET

Alexandru Sorodoc (1):

      platform/x86: asus-wmi: Ignore WMI events with codes 0x7B, 0xC0

Amadeusz Sławiński (1):
ASoC: Intel: avs: Add missing checks on FE startup

Arnd Bergmann (1):
clk: pxa: fix NULL pointer dereference in pxa3xx_clk_update_accr

Badhri Jagan Sridharan (2):
usb: gadget: udc: core: Offload usb_udc_vbus_handler processing
usb: gadget: udc: core: Prevent soft_connect_store() race

Ben Hutchings (1):
parisc: Delete redundant register definitions in <asm/assembly.h>

Benjamin Berg (2):
wifi: cfg80211: fix link del callback to call correct handler
wifi: mac80211: take lock before setting vif links

Benjamin Segall (1):
epoll: ep_autoremove_wake_function should use list_del_init_careful

Bernhard Seibold (1):
serial: lantiq: add missing interrupt ack

Bob Pearson (4):
RDMA/rxe: Fix packet length checks
RDMA/rxe: Fix ref count error in check_rkey() RDMA/rxe: Removed unused name from rxe_task struct
scsi: target: core: Fix error path in target_setup_session()

Cezary Rojewski (1):
ASoC: Intel: avs: Account for UID of ACPI device

Chris Mason (1):

      btrfs: can_nocow_file_extent should pass down args->strict from callers

Christian Marangi (1):
net: ethernet: stmicro: stmmac: fix possible memory leak in __stmmac_open

Christoph Hellwig (1):
btrfs: fix iomap_begin length for nocow writes

Christophe JAILLET (1):
test_firmware: Use kstrtobool() instead of strtobool()

Dan Carpenter (2):
wifi: cfg80211: fix double lock bug in reg_wdev_chan_valid()
sctp: fix an error code in sctp_sf_eat_auth()

Danielle Ratson (1):
selftests: forwarding: hw_stats_l3: Set addrgenmode in a separate step

Dave Airlie (1):
nouveau: fix client work fence deletion race

David Howells (1):
afs: Fix vlserver probe RTT handling

Douglas Anderson (1):
irqchip/gic-v3: Disable pseudo NMIs on Mediatek devices w/ firmware issues

Edson Juliano Drosdeck (1):
ALSA: hda/realtek: Add a quirk for Compaq N14JP6

Edward Srouji (1):
RDMA/uverbs: Restrict usage of privileged QKEYs

Elson Roy Serrao (1):
usb: dwc3: gadget: Reset num TRBs before giving back the request

Eric Dumazet (1):
net: lapbether: only support ethernet devices

Fabio M. De Francesco (1):
ext4: drop the call to ext4_error() from ext4_get_group_info()

Fedor Pchelkin (1):
net: macsec: fix double free of percpu stats

Greg Kroah-Hartman (1):

      Linux 6.1.35

Guillaume Nault (1):
ping6: Fix send to link-local addresses with VRF.

Hangbin Liu (4):
ipvlan: fix bound dev checking for IPv6 l3s mode
sched: add new attr TCA_EXT_WARN_MSG to report tc extact message Revert "net/sched: act_api: move TCA_EXT_WARN_MSG to the correct hierarchy" net/sched: act_api: add specific EXT_WARN_MSG for tc action

Hans de Goede (3):
power: supply: ab8500: Fix external_power_changed race
power: supply: sc27xx: Fix external_power_changed race
power: supply: bq27xxx: Use mod_delayed_work() instead of cancel() + schedule()

Heikki Krogerus (1):
usb: typec: ucsi: Fix command cancellation

Helge Deller (2):
parisc: Improve cache flushing for PCXL in arch_sync_dma_for_cpu()
parisc: Flush gatt writes and adjust gatt mask in parisc_agp_mask_memory()

Hersen Wu (1):
drm/amd/display: edp do not add non-edid timings

Huacai Chen (1):
LoongArch: Fix perf event id calculation

Jakub Kicinski (1):
net: ethtool: correct MAX attribute value for stats

Janne Grunau (1):
nios2: dts: Fix tse_mac "max-frame-size" property

Jens Axboe (1):

      io_uring/net: save msghdr->msg_control for retries

Jerry Meng (1):
USB: serial: option: add Quectel EM061KGL series

Jiasheng Jiang (2):
spi: cadence-quadspi: Add missing check for dma_set_mask
octeon_ep: Add missing check for ioremap

Johan Hovold (2):
USB: dwc3: qcom: fix NULL-deref on suspend
USB: dwc3: fix use-after-free on core driver unbind

Johannes Berg (2):
wifi: cfg80211: fix locking in regulatory disconnect
wifi: mac80211: fix link activation settings order

Johannes Thumshirn (1):
btrfs: handle memory allocation failure in btrfs_csum_one_bio

John Sperbeck (1):
cgroup: always put cset in cgroup_css_set_put_fork

Kamalesh Babulal (1):
cgroup: bpf: use cgroup_lock()/cgroup_unlock() wrappers

Kamil Maziarz (1):
ice: Fix XDP memory leak when NIC is brought up and down

Kenneth Feng (1):
drm/amd/pm: workaround for compute workload type on some skus

Krzysztof Kozlowski (2):
ARM: dts: vexpress: add missing cache properties irqchip/meson-gpio: Mark OF related data as maybe unused

Kunihiko Hayashi (1):
of: overlay: Fix missing of_node_put() in error case of init_overlay_changeset()

Lee Jones (1):
net/sched: cls_u32: Fix reference counter leak leading to overflow

Leon Romanovsky (1):
neighbour: delete neigh_lookup_nodev as not used

Li Lingfeng (2):
dm thin metadata: check fail_io before using data_sm
dm: don't lock fs when the map is NULL during suspend or resume

Li Zhijian (2):
RDMA/rtrs: Fix the last iu->buf leak in err path RDMA/rtrs: Fix rxe_dealloc_pd warning

Lin Ma (1):
net: tipc: resize nlattr array to correct size

Liviu Dudau (1):
mips: Move initrd_start check after initrd address sanitisation.

Lukasz Tyl (1):
ALSA: usb-audio: Add quirk flag for HEM devices to enable native DSD playback

Luís Henriques (2):
ocfs2: fix use-after-free when unmounting read-only filesystem
ocfs2: check new file size on fallocate call

Maher Sanalla (1):
RDMA/mlx5: Initiate dropless RQ for RAW Ethernet functions

Manivannan Sadhasivam (2):
qcom: llcc/edac: Fix the base address used for accessing LLCC banks EDAC/qcom: Get rid of hardcoded register offsets

Manuel Lauss (3):
MIPS: unhide PATA_PLATFORM
MIPS: Restore Au1300 support
MIPS: Alchemy: fix dbdma2

Marc Zyngier (1):
irqchip/gic: Correctly validate OF quirk descriptors

Marek Vasut (1):
power: supply: Ratelimit no data debug output

Mario Limonciello (3):
power: supply: Fix logic checking if system is running from battery drm/amd: Make sure image is written to trigger VBIOS image update flow drm/amd: Tighten permissions on VBIOS flashing attributes

Mark Bloch (2):
RDMA/mlx5: Create an indirect flow table for steering anchor RDMA/mlx5: Fix affinity assignment

Mark Zhang (1):
RDMA/cma: Always set static rate to 0 for RoCE

Max Tottenham (1):
net/sched: act_pedit: Parse L3 Header for L4 offset

Maxim Kochetkov (1):
ASoC: dwc: move DMA init to snd_soc_dai_driver probe()

Maxime Chevallier (2):
net: phylink: report correct max speed for QUSGMII
net: phylink: use a dedicated helper to parse usgmii control word

Maya Matuszczyk (1):
drm: panel-orientation-quirks: Change Air's quirk to support Air Plus

Mika Westerberg (4):
PCI/DPC: Quirk PIO log size for Intel Ice Lake Root Ports
thunderbolt: Do not touch CL state configuration during discovery
thunderbolt: dma_test: Use correct value for absent rings when creating paths
thunderbolt: Mask ring interrupt on Intel hardware as well

Mike Snitzer (1):
dm thin: fix issue_discard to pass GFP_NOIO to __blkdev_issue_discard

Milo Spadacini (1):
tools: gpio: fix debounce_period_us output of lsgpio

Mirsad Goran Todorovac (1):
test_firmware: prevent race conditions by a correct implementation of locking

Mirsad Todorovac (1):
selftests: gpio: gpio-sim: Fix BUG: test FAILED due to recent change

Muhammad Husaini Zulkifli (1):
igc: Clean the TX buffer and TX descriptor ring

Namjae Jeon (1):
ksmbd: validate smb request protocol id

Natalia Petrova (2):
drm/nouveau/dp: check for NULL nv_connector->native_mode drm/nouveau: add nv_encoder pointer check for NULL

Nathan Chancellor (2):
MIPS: Move '-Wa,-msoft-float' check from as-option to cc-option
MIPS: Prefer cc-option for additions to cflags

Nhat Pham (1):
zswap: do not shrink if cgroup may not zswap

Nick Desaulniers (2):
x86/boot/compressed: prefer cc-option for CFLAGS additions
kbuild: Update assembler calls to use proper flags and language target

Nithin Dabilpuram (1):
octeontx2-af: fix lbk link credits on cn10k

Osama Muhammad (1):
regulator: Fix error checking for debugfs_create_dir

Pablo Neira Ayuso (3):
netfilter: nf_tables: integrate pipapo into commit protocol
netfilter: nfnetlink: skip error delivery on batch in case of ENOMEM
netfilter: nf_tables: incorrect error path handling with NFT_MSG_NEWRULE

Pavan Holla (1):
usb: typec: Fix fast_role_swap_current show function

Pedro Tammela (3):
net/sched: simplify tcf_pedit_act
net/sched: act_pedit: remove extra check for key type net/sched: act_api: move TCA_EXT_WARN_MSG to the correct hierarchy

Peilin Ye (2):
net/sched: Refactor qdisc_graft() for ingress and clsact Qdiscs net/sched: qdisc_destroy() old ingress and clsact Qdiscs before grafting

Qi Zheng (1):
cgroup: fix missing cpus_read_{lock,unlock}() in cgroup_transfer_tasks()

Qu Wenruo (2):
btrfs: scrub: try harder to mark RAID56 block groups read-only
btrfs: do not ASSERT() on duplicated global roots

Ranjani Sridharan (1):
ASoC: soc-pcm: test if a BE can be prepared

Ratchanan Srirattanamet (1):
drm/nouveau: don't detect DSM for non-NVIDIA device

Ratheesh Kannoth (1):
octeontx2-af: Fix promiscuous mode

Ricardo Ribalda (4):
kexec: support purgatories with .text.hot sections x86/purgatory: remove PGO flags riscv/purgatory: remove PGO flags powerpc/purgatory: remove PGO flags

Ross Lagerwall (1):
xen/blkfront: Only check REQ_FUA for writes

Ryusuke Konishi (3):
nilfs2: fix incomplete buffer cleanup in nilfs_btnode_abort_change_key()
nilfs2: fix possible out-of-bounds segment allocation in resize ioctl
nilfs2: reject devices with insufficient block count

Saravanan Vajravel (3):
IB/isert: Fix dead lock in ib_isert IB/isert: Fix possible list corruption in CMA handler IB/isert: Fix incorrect release of isert connection

Satha Rao (1):
octeontx2-af: fixed resource availability check

Sonny Jiang (1):
drm/amdgpu: vcn_4_0 set instance 0 init sched score to 1

Stefan Binding (1):
ASoC: cs35l41: Fix default regmap values for some registers

Steve French (1):
cifs: fix lease break oops in xfstest generic/098

Su Hui (1):
drm/bridge: ti-sn65dsi86: Avoid possible buffer overflow

Sukrut Bellary (1):
drm:amd:amdgpu: Fix missing buffer object unlock in failure path

Takashi Iwai (1):
ALSA: usb-audio: Fix broken resume due to UAC3 power state

Tatsuki Sugiura (1):
NVMe: Add MAXIO 1602 to bogus nid list.

Thomas Zimmermann (1):
drm/amdgpu: Don't set struct drm_driver.output_poll_changed

Tom Lendacky (1):
x86/head/64: Switch to KERNEL_CS as soon as new GDT is installed

Vinicius Costa Gomes (1):
igc: Fix possible system crash when loading module

Vlad Buslov (4):
selftests/tc-testing: Fix Error: Specified qdisc kind is unknown. selftests/tc-testing: Fix Error: failed to find target LOG selftests/tc-testing: Fix SFB db test
net/sched: cls_api: Fix lockup on flushing explicitly created chain

Vladimir Oltean (2):
spi: fsl-dspi: avoid SCK glitches with continuous transfers
net: dsa: felix: fix taprio guard band overflow at 10Mbps with jumbo frames

Wei Fang (1):
net: enetc: correct the indexes of highest and 2nd highest TCs

Wenwen Chen (1):

      io_uring: unlock sqd->lock before sq thread release CPU

Wes Huang (1):
net: usb: qmi_wwan: add support for Compal RXM-G1

Yishai Hadas (1):
IB/uverbs: Fix to consider event queue closing also upon non-blocking mode

Yuezhen Luan (1):

      igb: Fix extts capture value format for 82580/i354/i350

Zhu Yanjun (1):
RDMA/rxe: Fix the use-before-initialization error of resp_pkts

Ziwei Dai (1):
rcu/kvfree: Avoid freeing new kfree_rcu() memory after old grace period

Íñigo Huguet (1):
sfc: fix XDP queues mode with legacy IRQ

author maintainer
#1 lore raw
Makefile +1 -1
index bc7cc17b0e75..46c06af912d9 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 6
 PATCHLEVEL = 1
-SUBLEVEL = 34
+SUBLEVEL = 35
 EXTRAVERSION =
 NAME = Curry Ramen
 
arch/arm/boot/dts/vexpress-v2p-ca5s.dts +1 -0
index 3b88209bacea..ff1f9a1bcfcf 100644
@@ -132,6 +132,7 @@ L2: cache-controller@2c0f0000 {
 		reg = <0x2c0f0000 0x1000>;
 		interrupts = <0 84 4>;
 		cache-level = <2>;
+		cache-unified;
 	};
 
 	pmu {
arch/loongarch/kernel/perf_event.c +3 -3
index 707bd32e5c4f..3a2edb157b65 100644
@@ -271,7 +271,7 @@ static void loongarch_pmu_enable_event(struct hw_perf_event *evt, int idx)
 	WARN_ON(idx < 0 || idx >= loongarch_pmu.num_counters);
 
 	/* Make sure interrupt enabled. */
-	cpuc->saved_ctrl[idx] = M_PERFCTL_EVENT(evt->event_base & 0xff) |
+	cpuc->saved_ctrl[idx] = M_PERFCTL_EVENT(evt->event_base) |
 		(evt->config_base & M_PERFCTL_CONFIG_MASK) | CSR_PERFCTRL_IE;
 
 	cpu = (event->cpu >= 0) ? event->cpu : smp_processor_id();
@@ -594,7 +594,7 @@ static struct pmu pmu = {
 
 static unsigned int loongarch_pmu_perf_event_encode(const struct loongarch_perf_event *pev)
 {
-	return (pev->event_id & 0xff);
+	return M_PERFCTL_EVENT(pev->event_id);
 }
 
 static const struct loongarch_perf_event *loongarch_pmu_map_general_event(int idx)
@@ -849,7 +849,7 @@ static void resume_local_counters(void)
 
 static const struct loongarch_perf_event *loongarch_pmu_map_raw_event(u64 config)
 {
-	raw_event.event_id = config & 0xff;
+	raw_event.event_id = M_PERFCTL_EVENT(config);
 
 	return &raw_event;
 }
arch/mips/Kconfig +1 -0
index b26b77673c2c..2f5835e300a8 100644
@@ -82,6 +82,7 @@ config MIPS
 	select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_NMI
+	select HAVE_PATA_PLATFORM
 	select HAVE_PERF_EVENTS
 	select HAVE_PERF_REGS
 	select HAVE_PERF_USER_STACK_DUMP
arch/mips/Makefile +2 -2
index b296e33f8e33..85d3c3b4b7bd 100644
@@ -109,7 +109,7 @@ endif
 # (specifically newer than 2.24.51.20140728) we then also need to explicitly
 # set ".set hardfloat" in all files which manipulate floating point registers.
 #
-ifneq ($(call as-option,-Wa$(comma)-msoft-float,),)
+ifneq ($(call cc-option,$(cflags-y) -Wa$(comma)-msoft-float,),)
 	cflags-y		+= -DGAS_HAS_SET_HARDFLOAT -Wa,-msoft-float
 endif
 
@@ -152,7 +152,7 @@ cflags-y += -fno-stack-check
 #
 # Avoid this by explicitly disabling that assembler behaviour.
 #
-cflags-y += $(call as-option,-Wa$(comma)-mno-fix-loongson3-llsc,)
+cflags-y += $(call cc-option,-Wa$(comma)-mno-fix-loongson3-llsc,)
 
 #
 # CPU-dependent compiler/assembler options for optimization.
arch/mips/alchemy/common/dbdma.c +15 -12
index 5ab043000409..6a3c890f7bbf 100644
@@ -30,6 +30,7 @@
  *
  */
 
+#include <linux/dma-map-ops.h> /* for dma_default_coherent */
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/slab.h>
@@ -623,17 +624,18 @@ u32 au1xxx_dbdma_put_source(u32 chanid, dma_addr_t buf, int nbytes, u32 flags)
 		dp->dscr_cmd0 &= ~DSCR_CMD0_IE;
 
 	/*
-	 * There is an errata on the Au1200/Au1550 parts that could result
-	 * in "stale" data being DMA'ed. It has to do with the snoop logic on
-	 * the cache eviction buffer.  DMA_NONCOHERENT is on by default for
-	 * these parts. If it is fixed in the future, these dma_cache_inv will
-	 * just be nothing more than empty macros. See io.h.
+	 * There is an erratum on certain Au1200/Au1550 revisions that could
+	 * result in "stale" data being DMA'ed. It has to do with the snoop
+	 * logic on the cache eviction buffer.  dma_default_coherent is set
+	 * to false on these parts.
 	 */
-	dma_cache_wback_inv((unsigned long)buf, nbytes);
+	if (!dma_default_coherent)
+		dma_cache_wback_inv(KSEG0ADDR(buf), nbytes);
 	dp->dscr_cmd0 |= DSCR_CMD0_V;	/* Let it rip */
 	wmb(); /* drain writebuffer */
 	dma_cache_wback_inv((unsigned long)dp, sizeof(*dp));
 	ctp->chan_ptr->ddma_dbell = 0;
+	wmb(); /* force doorbell write out to dma engine */
 
 	/* Get next descriptor pointer. */
 	ctp->put_ptr = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr));
@@ -685,17 +687,18 @@ u32 au1xxx_dbdma_put_dest(u32 chanid, dma_addr_t buf, int nbytes, u32 flags)
 			  dp->dscr_source1, dp->dscr_dest0, dp->dscr_dest1);
 #endif
 	/*
-	 * There is an errata on the Au1200/Au1550 parts that could result in
-	 * "stale" data being DMA'ed. It has to do with the snoop logic on the
-	 * cache eviction buffer.  DMA_NONCOHERENT is on by default for these
-	 * parts. If it is fixed in the future, these dma_cache_inv will just
-	 * be nothing more than empty macros. See io.h.
+	 * There is an erratum on certain Au1200/Au1550 revisions that could
+	 * result in "stale" data being DMA'ed. It has to do with the snoop
+	 * logic on the cache eviction buffer.  dma_default_coherent is set
+	 * to false on these parts.
 	 */
-	dma_cache_inv((unsigned long)buf, nbytes);
+	if (!dma_default_coherent)
+		dma_cache_inv(KSEG0ADDR(buf), nbytes);
 	dp->dscr_cmd0 |= DSCR_CMD0_V;	/* Let it rip */
 	wmb(); /* drain writebuffer */
 	dma_cache_wback_inv((unsigned long)dp, sizeof(*dp));
 	ctp->chan_ptr->ddma_dbell = 0;
+	wmb(); /* force doorbell write out to dma engine */
 
 	/* Get next descriptor pointer. */
 	ctp->put_ptr = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr));
arch/mips/kernel/cpu-probe.c +5 -0
index 7ddf07f255f3..6f5d82595877 100644
@@ -1502,6 +1502,10 @@ static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu)
 			break;
 		}
 		break;
+	case PRID_IMP_NETLOGIC_AU13XX:
+		c->cputype = CPU_ALCHEMY;
+		__cpu_name[cpu] = "Au1300";
+		break;
 	}
 }
 
@@ -1861,6 +1865,7 @@ void cpu_probe(void)
 		cpu_probe_mips(c, cpu);
 		break;
 	case PRID_COMP_ALCHEMY:
+	case PRID_COMP_NETLOGIC:
 		cpu_probe_alchemy(c, cpu);
 		break;
 	case PRID_COMP_SIBYTE:
arch/mips/kernel/setup.c +5 -4
index f1c88f8a1dc5..81dbb4ef5231 100644
@@ -158,10 +158,6 @@ static unsigned long __init init_initrd(void)
 		pr_err("initrd start must be page aligned\n");
 		goto disable;
 	}
-	if (initrd_start < PAGE_OFFSET) {
-		pr_err("initrd start < PAGE_OFFSET\n");
-		goto disable;
-	}
 
 	/*
 	 * Sanitize initrd addresses. For example firmware
@@ -174,6 +170,11 @@ static unsigned long __init init_initrd(void)
 	initrd_end = (unsigned long)__va(end);
 	initrd_start = (unsigned long)__va(__pa(initrd_start));
 
+	if (initrd_start < PAGE_OFFSET) {
+		pr_err("initrd start < PAGE_OFFSET\n");
+		goto disable;
+	}
+
 	ROOT_DEV = Root_RAM0;
 	return PFN_UP(end);
 disable:
arch/mips/loongson2ef/Platform +1 -1
index eebabf9df6ac..c6f7a4b95997 100644
@@ -25,7 +25,7 @@ cflags-$(CONFIG_CPU_LOONGSON2F) += -march=loongson2f
 # binutils does not merge support for the flag then we can revisit & remove
 # this later - for now it ensures vendor toolchains don't cause problems.
 #
-cflags-$(CONFIG_CPU_LOONGSON2EF)	+= $(call as-option,-Wa$(comma)-mno-fix-loongson3-llsc,)
+cflags-$(CONFIG_CPU_LOONGSON2EF)	+= $(call cc-option,-Wa$(comma)-mno-fix-loongson3-llsc,)
 
 # Enable the workarounds for Loongson2f
 ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS
arch/nios2/boot/dts/10m50_devboard.dts +1 -1
index 56339bef3247..0e7e5b0dd685 100644
@@ -97,7 +97,7 @@ rgmii_0_eth_tse_0: ethernet@400 {
 			rx-fifo-depth = <8192>;
 			tx-fifo-depth = <8192>;
 			address-bits = <48>;
-			max-frame-size = <1518>;
+			max-frame-size = <1500>;
 			local-mac-address = [00 00 00 00 00 00];
 			altr,has-supplementary-unicast;
 			altr,enable-sup-addr = <1>;
arch/nios2/boot/dts/3c120_devboard.dts +1 -1
index d10fb81686c7..3ee316906379 100644
@@ -106,7 +106,7 @@ tse_mac: ethernet@4000 {
 				interrupt-names = "rx_irq", "tx_irq";
 				rx-fifo-depth = <8192>;
 				tx-fifo-depth = <8192>;
-				max-frame-size = <1518>;
+				max-frame-size = <1500>;
 				local-mac-address = [ 00 00 00 00 00 00 ];
 				phy-mode = "rgmii-id";
 				phy-handle = <&phy0>;
arch/parisc/include/asm/assembly.h +0 -4
index 0f0d4a496fef..75677b526b2b 100644
@@ -90,10 +90,6 @@
 #include <asm/asmregs.h>
 #include <asm/psw.h>
 
-	sp	=	30
-	gp	=	27
-	ipsw	=	22
-
 	/*
 	 * We provide two versions of each macro to convert from physical
 	 * to virtual and vice versa. The "_r1" versions take one argument
arch/parisc/kernel/pci-dma.c +17 -1
index ba87f791323b..71ed5391f29d 100644
@@ -446,11 +446,27 @@ void arch_dma_free(struct device *dev, size_t size, void *vaddr,
 void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
 		enum dma_data_direction dir)
 {
+	/*
+	 * fdc: The data cache line is written back to memory, if and only if
+	 * it is dirty, and then invalidated from the data cache.
+	 */
 	flush_kernel_dcache_range((unsigned long)phys_to_virt(paddr), size);
 }
 
 void arch_sync_dma_for_cpu(phys_addr_t paddr, size_t size,
 		enum dma_data_direction dir)
 {
-	flush_kernel_dcache_range((unsigned long)phys_to_virt(paddr), size);
+	unsigned long addr = (unsigned long) phys_to_virt(paddr);
+
+	switch (dir) {
+	case DMA_TO_DEVICE:
+	case DMA_BIDIRECTIONAL:
+		flush_kernel_dcache_range(addr, size);
+		return;
+	case DMA_FROM_DEVICE:
+		purge_kernel_dcache_range_asm(addr, addr + size);
+		return;
+	default:
+		BUG();
+	}
 }
arch/powerpc/purgatory/Makefile +5 -0
index a81d155b89ae..df50b155c767 100644
@@ -4,6 +4,11 @@ KASAN_SANITIZE := n
 
 targets += trampoline_$(BITS).o purgatory.ro
 
+# When profile-guided optimization is enabled, llvm emits two different
+# overlapping text sections, which is not supported by kexec. Remove profile
+# optimization flags.
+KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
+
 LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined
 
 $(obj)/purgatory.ro: $(obj)/trampoline_$(BITS).o FORCE
arch/riscv/purgatory/Makefile +5 -0
index 659e21862077..6574c91c99b1 100644
@@ -25,6 +25,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
 CFLAGS_string.o := -D__DISABLE_EXPORTS
 CFLAGS_ctype.o := -D__DISABLE_EXPORTS
 
+# When profile-guided optimization is enabled, llvm emits two different
+# overlapping text sections, which is not supported by kexec. Remove profile
+# optimization flags.
+KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
+
 # When linking purgatory.ro with -r unresolved symbols are not checked,
 # also link a purgatory.chk binary without -r to check for unresolved symbols.
 PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
arch/x86/boot/compressed/Makefile +1 -1
index 3a261abb6d15..15b7b403a4bd 100644
@@ -50,7 +50,7 @@ KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
 KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
 KBUILD_CFLAGS += -D__DISABLE_EXPORTS
 # Disable relocation relaxation in case the link is not PIE.
-KBUILD_CFLAGS += $(call as-option,-Wa$(comma)-mrelax-relocations=no)
+KBUILD_CFLAGS += $(call cc-option,-Wa$(comma)-mrelax-relocations=no)
 KBUILD_CFLAGS += -include $(srctree)/include/linux/hidden.h
 
 # sev.c indirectly inludes inat-table.h which is generated during
arch/x86/kernel/head_64.S +9 -9
index d860d437631b..998cdb112b72 100644
@@ -85,6 +85,15 @@ SYM_CODE_START_NOALIGN(startup_64)
 	call	startup_64_setup_env
 	popq	%rsi
 
+	/* Now switch to __KERNEL_CS so IRET works reliably */
+	pushq	$__KERNEL_CS
+	leaq	.Lon_kernel_cs(%rip), %rax
+	pushq	%rax
+	lretq
+
+.Lon_kernel_cs:
+	UNWIND_HINT_EMPTY
+
 #ifdef CONFIG_AMD_MEM_ENCRYPT
 	/*
 	 * Activate SEV/SME memory encryption if supported/enabled. This needs to
@@ -98,15 +107,6 @@ SYM_CODE_START_NOALIGN(startup_64)
 	popq	%rsi
 #endif
 
-	/* Now switch to __KERNEL_CS so IRET works reliably */
-	pushq	$__KERNEL_CS
-	leaq	.Lon_kernel_cs(%rip), %rax
-	pushq	%rax
-	lretq
-
-.Lon_kernel_cs:
-	UNWIND_HINT_EMPTY
-
 	/* Sanitize CPU configuration */
 	call verify_cpu
 
arch/x86/purgatory/Makefile +5 -0
index 82fec66d46d2..42abd6af1198 100644
@@ -14,6 +14,11 @@ $(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
 
 CFLAGS_sha256.o := -D__DISABLE_EXPORTS
 
+# When profile-guided optimization is enabled, llvm emits two different
+# overlapping text sections, which is not supported by kexec. Remove profile
+# optimization flags.
+KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
+
 # When linking purgatory.ro with -r unresolved symbols are not checked,
 # also link a purgatory.chk binary without -r to check for unresolved symbols.
 PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
drivers/block/xen-blkfront.c +2 -1
index 35b9bcad9db9..5ddf393aa390 100644
@@ -780,7 +780,8 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 		ring_req->u.rw.handle = info->handle;
 		ring_req->operation = rq_data_dir(req) ?
 			BLKIF_OP_WRITE : BLKIF_OP_READ;
-		if (req_op(req) == REQ_OP_FLUSH || req->cmd_flags & REQ_FUA) {
+		if (req_op(req) == REQ_OP_FLUSH ||
+		    (req_op(req) == REQ_OP_WRITE && (req->cmd_flags & REQ_FUA))) {
 			/*
 			 * Ideally we can do an unordered flush-to-disk.
 			 * In case the backend onlysupports barriers, use that.
drivers/char/agp/parisc-agp.c +14 -1
index d68d05d5d383..514f9f287a78 100644
@@ -90,6 +90,9 @@ parisc_agp_tlbflush(struct agp_memory *mem)
 {
 	struct _parisc_agp_info *info = &parisc_agp_info;
 
+	/* force fdc ops to be visible to IOMMU */
+	asm_io_sync();
+
 	writeq(info->gart_base | ilog2(info->gart_size), info->ioc_regs+IOC_PCOM);
 	readq(info->ioc_regs+IOC_PCOM);	/* flush */
 }
@@ -158,6 +161,7 @@ parisc_agp_insert_memory(struct agp_memory *mem, off_t pg_start, int type)
 			info->gatt[j] =
 				parisc_agp_mask_memory(agp_bridge,
 					paddr, type);
+			asm_io_fdc(&info->gatt[j]);
 		}
 	}
 
@@ -191,7 +195,16 @@ static unsigned long
 parisc_agp_mask_memory(struct agp_bridge_data *bridge, dma_addr_t addr,
 		       int type)
 {
-	return SBA_PDIR_VALID_BIT | addr;
+	unsigned ci;			/* coherent index */
+	dma_addr_t pa;
+
+	pa = addr & IOVP_MASK;
+	asm("lci 0(%1), %0" : "=r" (ci) : "r" (phys_to_virt(pa)));
+
+	pa |= (ci >> PAGE_SHIFT) & 0xff;/* move CI (8 bits) into lowest byte */
+	pa |= SBA_PDIR_VALID_BIT;	/* set "valid" bit */
+
+	return cpu_to_le64(pa);
 }
 
 static void
drivers/clk/pxa/clk-pxa3xx.c +1 -1
index 42958a542662..621e298f101a 100644
@@ -164,7 +164,7 @@ void pxa3xx_clk_update_accr(u32 disable, u32 enable, u32 xclkcfg, u32 mask)
 	accr &= ~disable;
 	accr |= enable;
 
-	writel(accr, ACCR);
+	writel(accr, clk_regs + ACCR);
 	if (xclkcfg)
 		__asm__("mcr p14, 0, %0, c6, c0, 0\n" : : "r"(xclkcfg));
 
drivers/edac/qcom_edac.c +59 -63

258 lines not on this page · raw message

drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +0 -1
index 1a06b8d724f3..dd6f9ae6fbe9 100644
@@ -1214,7 +1214,6 @@ amdgpu_display_user_framebuffer_create(struct drm_device *dev,
 
 const struct drm_mode_config_funcs amdgpu_mode_funcs = {
 	.fb_create = amdgpu_display_user_framebuffer_create,
-	.output_poll_changed = drm_fb_helper_output_poll_changed,
 };
 
 static const struct drm_prop_enum_list amdgpu_underscan_enum_list[] =
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +1 -0
index 88a9ece7f464..49a023f59b2f 100644
@@ -1605,6 +1605,7 @@ static const u16 amdgpu_unsupported_pciidlist[] = {
 	0x5874,
 	0x5940,
 	0x5941,
+	0x5b70,
 	0x5b72,
 	0x5b73,
 	0x5b74,
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +5 -2
index 3b8825a3e233..a3cd816f98a1 100644
@@ -3550,6 +3550,9 @@ static ssize_t amdgpu_psp_vbflash_read(struct file *filp, struct kobject *kobj,
 	void *fw_pri_cpu_addr;
 	int ret;
 
+	if (adev->psp.vbflash_image_size == 0)
+		return -EINVAL;
+
 	dev_info(adev->dev, "VBIOS flash to PSP started");
 
 	ret = amdgpu_bo_create_kernel(adev, adev->psp.vbflash_image_size,
@@ -3601,13 +3604,13 @@ static ssize_t amdgpu_psp_vbflash_status(struct device *dev,
 }
 
 static const struct bin_attribute psp_vbflash_bin_attr = {
-	.attr = {.name = "psp_vbflash", .mode = 0664},
+	.attr = {.name = "psp_vbflash", .mode = 0660},
 	.size = 0,
 	.write = amdgpu_psp_vbflash_write,
 	.read = amdgpu_psp_vbflash_read,
 };
 
-static DEVICE_ATTR(psp_vbflash_status, 0444, amdgpu_psp_vbflash_status, NULL);
+static DEVICE_ATTR(psp_vbflash_status, 0440, amdgpu_psp_vbflash_status, NULL);
 
 int amdgpu_psp_sysfs_init(struct amdgpu_device *adev)
 {
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +3 -1
index 2127aab74a68..84a36b50ddd8 100644
@@ -6969,8 +6969,10 @@ static int gfx_v10_0_kiq_resume(struct amdgpu_device *adev)
 		return r;
 
 	r = amdgpu_bo_kmap(ring->mqd_obj, (void **)&ring->mqd_ptr);
-	if (unlikely(r != 0))
+	if (unlikely(r != 0)) {
+		amdgpu_bo_unreserve(ring->mqd_obj);
 		return r;
+	}
 
 	gfx_v10_0_kiq_init_queue(ring);
 	amdgpu_bo_kunmap(ring->mqd_obj);
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +3 -1
index 1f3fdf6cb903..fe371022e510 100644
@@ -3650,8 +3650,10 @@ static int gfx_v9_0_kiq_resume(struct amdgpu_device *adev)
 		return r;
 
 	r = amdgpu_bo_kmap(ring->mqd_obj, (void **)&ring->mqd_ptr);
-	if (unlikely(r != 0))
+	if (unlikely(r != 0)) {
+		amdgpu_bo_unreserve(ring->mqd_obj);
 		return r;
+	}
 
 	gfx_v9_0_kiq_init_queue(ring);
 	amdgpu_bo_kunmap(ring->mqd_obj);
drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c +5 -1
index dcc49b01bd59..300bb926dcba 100644
@@ -117,7 +117,11 @@ static int vcn_v4_0_sw_init(void *handle)
 		if (adev->vcn.harvest_config & (1 << i))
 			continue;
 
-		atomic_set(&adev->vcn.inst[i].sched_score, 0);
+		/* Init instance 0 sched_score to 1, so it's scheduled after other instances */
+		if (i == 0)
+			atomic_set(&adev->vcn.inst[i].sched_score, 1);
+		else
+			atomic_set(&adev->vcn.inst[i].sched_score, 0);
 
 		/* VCN UNIFIED TRAP */
 		r = amdgpu_irq_add_id(adev, amdgpu_ih_clientid_vcns[i],
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +7 -3
index 8ab0dd799b3c..53687de6c053 100644
@@ -83,7 +83,6 @@
 #include <drm/drm_atomic_uapi.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_blend.h>
-#include <drm/drm_fb_helper.h>
 #include <drm/drm_fourcc.h>
 #include <drm/drm_edid.h>
 #include <drm/drm_vblank.h>
@@ -2875,7 +2874,6 @@ const struct amdgpu_ip_block_version dm_ip_block =
 static const struct drm_mode_config_funcs amdgpu_dm_mode_funcs = {
 	.fb_create = amdgpu_display_user_framebuffer_create,
 	.get_format_info = amd_get_format_info,
-	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = amdgpu_dm_atomic_check,
 	.atomic_commit = drm_atomic_helper_commit,
 };
@@ -6942,7 +6940,13 @@ static int amdgpu_dm_connector_get_modes(struct drm_connector *connector)
 				drm_add_modes_noedid(connector, 640, 480);
 	} else {
 		amdgpu_dm_connector_ddc_get_modes(connector, edid);
-		amdgpu_dm_connector_add_common_modes(encoder, connector);
+		/* most eDP supports only timings from its edid,
+		 * usually only detailed timings are available
+		 * from eDP edid. timings which are not from edid
+		 * may damage eDP
+		 */
+		if (connector->connector_type != DRM_MODE_CONNECTOR_eDP)
+			amdgpu_dm_connector_add_common_modes(encoder, connector);
 		amdgpu_dm_connector_add_freesync_modes(connector, edid);
 	}
 	amdgpu_dm_fbc_init(connector);
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c +31 -2
index 508e392547d7..54fc42dad775 100644
@@ -1675,10 +1675,39 @@ static int smu_v13_0_0_set_power_profile_mode(struct smu_context *smu,
 		}
 	}
 
-	/* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */
-	workload_type = smu_cmn_to_asic_specific_index(smu,
+	if (smu->power_profile_mode == PP_SMC_POWER_PROFILE_COMPUTE &&
+		(((smu->adev->pdev->device == 0x744C) && (smu->adev->pdev->revision == 0xC8)) ||
+		((smu->adev->pdev->device == 0x744C) && (smu->adev->pdev->revision == 0xCC)))) {
+		ret = smu_cmn_update_table(smu,
+					   SMU_TABLE_ACTIVITY_MONITOR_COEFF,
+					   WORKLOAD_PPLIB_COMPUTE_BIT,
+					   (void *)(&activity_monitor_external),
+					   false);
+		if (ret) {
+			dev_err(smu->adev->dev, "[%s] Failed to get activity monitor!", __func__);
+			return ret;
+		}
+
+		ret = smu_cmn_update_table(smu,
+					   SMU_TABLE_ACTIVITY_MONITOR_COEFF,
+					   WORKLOAD_PPLIB_CUSTOM_BIT,
+					   (void *)(&activity_monitor_external),
+					   true);
+		if (ret) {
+			dev_err(smu->adev->dev, "[%s] Failed to set activity monitor!", __func__);
+			return ret;
+		}
+
+		workload_type = smu_cmn_to_asic_specific_index(smu,
+						       CMN2ASIC_MAPPING_WORKLOAD,
+						       PP_SMC_POWER_PROFILE_CUSTOM);
+	} else {
+		/* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */
+		workload_type = smu_cmn_to_asic_specific_index(smu,
 						       CMN2ASIC_MAPPING_WORKLOAD,
 						       smu->power_profile_mode);
+	}
+
 	if (workload_type < 0)
 		return -EINVAL;
 
drivers/gpu/drm/bridge/ti-sn65dsi86.c +4 -0
index aeca9c066bf2..d16775c973c4 100644
@@ -298,6 +298,10 @@ static void ti_sn_bridge_set_refclk_freq(struct ti_sn65dsi86 *pdata)
 		if (refclk_lut[i] == refclk_rate)
 			break;
 
+	/* avoid buffer overflow and "1" is the default rate in the datasheet. */
+	if (i >= refclk_lut_size)
+		i = 1;
+
 	regmap_update_bits(pdata->regmap, SN_DPPLL_SRC_REG, REFCLK_FREQ_MASK,
 			   REFCLK_FREQ(i));
 
drivers/gpu/drm/drm_panel_orientation_quirks.c +1 -1
index b1a38e6ce2f8..0cb646cb04ee 100644
@@ -179,7 +179,7 @@ static const struct dmi_system_id orientation_data[] = {
 	}, {	/* AYA NEO AIR */
 		.matches = {
 		  DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AYANEO"),
-		  DMI_MATCH(DMI_BOARD_NAME, "AIR"),
+		  DMI_MATCH(DMI_PRODUCT_NAME, "AIR"),
 		},
 		.driver_data = (void *)&lcd1080x1920_leftside_up,
 	}, {	/* AYA NEO NEXT */
drivers/gpu/drm/nouveau/nouveau_acpi.c +3 -0
index 8cf096f841a9..a2ae8c21e4dc 100644
@@ -220,6 +220,9 @@ static void nouveau_dsm_pci_probe(struct pci_dev *pdev, acpi_handle *dhandle_out
 	int optimus_funcs;
 	struct pci_dev *parent_pdev;
 
+	if (pdev->vendor != PCI_VENDOR_ID_NVIDIA)
+		return;
+
 	*has_pr3 = false;
 	parent_pdev = pci_upstream_bridge(pdev);
 	if (parent_pdev) {
drivers/gpu/drm/nouveau/nouveau_connector.c +4 -3
index 1991bbb1d05c..f40310559d13 100644
@@ -730,7 +730,8 @@ nouveau_connector_detect_lvds(struct drm_connector *connector, bool force)
 #endif
 
 	nouveau_connector_set_edid(nv_connector, edid);
-	nouveau_connector_set_encoder(connector, nv_encoder);
+	if (nv_encoder)
+		nouveau_connector_set_encoder(connector, nv_encoder);
 	return status;
 }
 
@@ -966,7 +967,7 @@ nouveau_connector_get_modes(struct drm_connector *connector)
 	/* Determine display colour depth for everything except LVDS now,
 	 * DP requires this before mode_valid() is called.
 	 */
-	if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS)
+	if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS && nv_connector->native_mode)
 		nouveau_connector_detect_depth(connector);
 
 	/* Find the native mode if this is a digital panel, if we didn't
@@ -987,7 +988,7 @@ nouveau_connector_get_modes(struct drm_connector *connector)
 	 * "native" mode as some VBIOS tables require us to use the
 	 * pixel clock as part of the lookup...
 	 */
-	if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)
+	if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS && nv_connector->native_mode)
 		nouveau_connector_detect_depth(connector);
 
 	if (nv_encoder->dcb->type == DCB_OUTPUT_TV)
drivers/gpu/drm/nouveau/nouveau_drm.c +10 -4
index fd99ec0f4257..28062d682f43 100644
@@ -139,10 +139,16 @@ nouveau_name(struct drm_device *dev)
 static inline bool
 nouveau_cli_work_ready(struct dma_fence *fence)
 {
-	if (!dma_fence_is_signaled(fence))
-		return false;
-	dma_fence_put(fence);
-	return true;
+	bool ret = true;
+
+	spin_lock_irq(fence->lock);
+	if (!dma_fence_is_signaled_locked(fence))
+		ret = false;
+	spin_unlock_irq(fence->lock);
+
+	if (ret == true)
+		dma_fence_put(fence);
+	return ret;
 }
 
 static void
drivers/infiniband/core/cma.c +2 -2
index c6a671edba5c..4632b1833381 100644
@@ -3293,7 +3293,7 @@ static int cma_resolve_iboe_route(struct rdma_id_private *id_priv)
 	route->path_rec->traffic_class = tos;
 	route->path_rec->mtu = iboe_get_mtu(ndev->mtu);
 	route->path_rec->rate_selector = IB_SA_EQ;
-	route->path_rec->rate = iboe_get_rate(ndev);
+	route->path_rec->rate = IB_RATE_PORT_CURRENT;
 	dev_put(ndev);
 	route->path_rec->packet_life_time_selector = IB_SA_EQ;
 	/* In case ACK timeout is set, use this value to calculate
@@ -4955,7 +4955,7 @@ static int cma_iboe_join_multicast(struct rdma_id_private *id_priv,
 	if (!ndev)
 		return -ENODEV;
 
-	ib.rec.rate = iboe_get_rate(ndev);
+	ib.rec.rate = IB_RATE_PORT_CURRENT;
 	ib.rec.hop_limit = 1;
 	ib.rec.mtu = iboe_get_mtu(ndev->mtu);
 
drivers/infiniband/core/uverbs_cmd.c +6 -1
index 4796f6a8828c..e836c9c477f6 100644
@@ -1850,8 +1850,13 @@ static int modify_qp(struct uverbs_attr_bundle *attrs,
 		attr->path_mtu = cmd->base.path_mtu;
 	if (cmd->base.attr_mask & IB_QP_PATH_MIG_STATE)
 		attr->path_mig_state = cmd->base.path_mig_state;
-	if (cmd->base.attr_mask & IB_QP_QKEY)
+	if (cmd->base.attr_mask & IB_QP_QKEY) {
+		if (cmd->base.qkey & IB_QP_SET_QKEY && !capable(CAP_NET_RAW)) {
+			ret = -EPERM;
+			goto release_qp;
+		}
 		attr->qkey = cmd->base.qkey;
+	}
 	if (cmd->base.attr_mask & IB_QP_RQ_PSN)
 		attr->rq_psn = cmd->base.rq_psn;
 	if (cmd->base.attr_mask & IB_QP_SQ_PSN)
drivers/infiniband/core/uverbs_main.c +5 -7
index d54434088727..fa937cd26821 100644
@@ -222,8 +222,12 @@ static ssize_t ib_uverbs_event_read(struct ib_uverbs_event_queue *ev_queue,
 	spin_lock_irq(&ev_queue->lock);
 
 	while (list_empty(&ev_queue->event_list)) {
-		spin_unlock_irq(&ev_queue->lock);
+		if (ev_queue->is_closed) {
+			spin_unlock_irq(&ev_queue->lock);
+			return -EIO;
+		}
 
+		spin_unlock_irq(&ev_queue->lock);
 		if (filp->f_flags & O_NONBLOCK)
 			return -EAGAIN;
 
@@ -233,12 +237,6 @@ static ssize_t ib_uverbs_event_read(struct ib_uverbs_event_queue *ev_queue,
 			return -ERESTARTSYS;
 
 		spin_lock_irq(&ev_queue->lock);
-
-		/* If device was disassociated and no event exists set an error */
-		if (list_empty(&ev_queue->event_list) && ev_queue->is_closed) {
-			spin_unlock_irq(&ev_queue->lock);
-			return -EIO;
-		}
 	}
 
 	event = list_entry(ev_queue->event_list.next, struct ib_uverbs_event, list);
drivers/infiniband/hw/mlx5/fs.c +269 -7

324 lines not on this page · raw message

drivers/infiniband/hw/mlx5/fs.h +16 -0
index ad320adaf321..b9734904f5f0 100644
@@ -10,6 +10,7 @@
 
 #if IS_ENABLED(CONFIG_INFINIBAND_USER_ACCESS)
 int mlx5_ib_fs_init(struct mlx5_ib_dev *dev);
+void mlx5_ib_fs_cleanup_anchor(struct mlx5_ib_dev *dev);
 #else
 static inline int mlx5_ib_fs_init(struct mlx5_ib_dev *dev)
 {
@@ -21,9 +22,24 @@ static inline int mlx5_ib_fs_init(struct mlx5_ib_dev *dev)
 	mutex_init(&dev->flow_db->lock);
 	return 0;
 }
+
+inline void mlx5_ib_fs_cleanup_anchor(struct mlx5_ib_dev *dev) {}
 #endif
+
 static inline void mlx5_ib_fs_cleanup(struct mlx5_ib_dev *dev)
 {
+	/* When a steering anchor is created, a special flow table is also
+	 * created for the user to reference. Since the user can reference it,
+	 * the kernel cannot trust that when the user destroys the steering
+	 * anchor, they no longer reference the flow table.
+	 *
+	 * To address this issue, when a user destroys a steering anchor, only
+	 * the flow steering rule in the table is destroyed, but the table
+	 * itself is kept to deal with the above scenario. The remaining
+	 * resources are only removed when the RDMA device is destroyed, which
+	 * is a safe assumption that all references are gone.
+	 */
+	mlx5_ib_fs_cleanup_anchor(dev);
 	kfree(dev->flow_db);
 }
 #endif /* _MLX5_IB_FS_H */
drivers/infiniband/hw/mlx5/main.c +3 -0
index eaa35e1df2a8..3178df55c4d8 100644
@@ -4250,6 +4250,9 @@ const struct mlx5_ib_profile raw_eth_profile = {
 	STAGE_CREATE(MLX5_IB_STAGE_POST_IB_REG_UMR,
 		     mlx5_ib_stage_post_ib_reg_umr_init,
 		     NULL),
+	STAGE_CREATE(MLX5_IB_STAGE_DELAY_DROP,
+		     mlx5_ib_stage_delay_drop_init,
+		     mlx5_ib_stage_delay_drop_cleanup),
 	STAGE_CREATE(MLX5_IB_STAGE_RESTRACK,
 		     mlx5_ib_restrack_init,
 		     NULL),
drivers/infiniband/hw/mlx5/mlx5_ib.h +14 -0
index 4a7f7064bd0e..8d94e6834e01 100644
@@ -233,8 +233,19 @@ enum {
 #define MLX5_IB_NUM_SNIFFER_FTS		2
 #define MLX5_IB_NUM_EGRESS_FTS		1
 #define MLX5_IB_NUM_FDB_FTS		MLX5_BY_PASS_NUM_REGULAR_PRIOS
+
+struct mlx5_ib_anchor {
+	struct mlx5_flow_table *ft;
+	struct mlx5_flow_group *fg_goto_table;
+	struct mlx5_flow_group *fg_drop;
+	struct mlx5_flow_handle *rule_goto_table;
+	struct mlx5_flow_handle *rule_drop;
+	unsigned int rule_goto_table_ref;
+};
+
 struct mlx5_ib_flow_prio {
 	struct mlx5_flow_table		*flow_table;
+	struct mlx5_ib_anchor		anchor;
 	unsigned int			refcount;
 };
 
@@ -1553,6 +1564,9 @@ static inline bool mlx5_ib_lag_should_assign_affinity(struct mlx5_ib_dev *dev)
 	    MLX5_CAP_PORT_SELECTION(dev->mdev, port_select_flow_table_bypass))
 		return 0;
 
+	if (mlx5_lag_is_lacp_owner(dev->mdev) && !dev->lag_active)
+		return 0;
+
 	return dev->lag_active ||
 		(MLX5_CAP_GEN(dev->mdev, num_lag_ports) > 1 &&
 		 MLX5_CAP_GEN(dev->mdev, lag_tx_port_affinity));
drivers/infiniband/hw/mlx5/qp.c +3 -0
index f7d3643b08f5..ac53ed79ca64 100644
@@ -1156,6 +1156,9 @@ static int create_raw_packet_qp_tis(struct mlx5_ib_dev *dev,
 
 	MLX5_SET(create_tis_in, in, uid, to_mpd(pd)->uid);
 	MLX5_SET(tisc, tisc, transport_domain, tdn);
+	if (!mlx5_ib_lag_should_assign_affinity(dev) &&
+	    mlx5_lag_is_lacp_owner(dev->mdev))
+		MLX5_SET(tisc, tisc, strict_lag_tx_port_affinity, 1);
 	if (qp->flags & IB_QP_CREATE_SOURCE_QPN)
 		MLX5_SET(tisc, tisc, underlay_qpn, qp->underlay_qpn);
 
drivers/infiniband/sw/rxe/rxe_net.c +6 -0
index 35f327b9d4b8..65d16024b3bf 100644
@@ -156,6 +156,9 @@ static int rxe_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
 	pkt->mask = RXE_GRH_MASK;
 	pkt->paylen = be16_to_cpu(udph->len) - sizeof(*udph);
 
+	/* remove udp header */
+	skb_pull(skb, sizeof(struct udphdr));
+
 	rxe_rcv(skb);
 
 	return 0;
@@ -397,6 +400,9 @@ static int rxe_loopback(struct sk_buff *skb, struct rxe_pkt_info *pkt)
 		return -EIO;
 	}
 
+	/* remove udp header */
+	skb_pull(skb, sizeof(struct udphdr));
+
 	rxe_rcv(skb);
 
 	return 0;
drivers/infiniband/sw/rxe/rxe_qp.c +6 -10
index 1f6e006c51c4..59b2024b34ef 100644
@@ -180,6 +180,9 @@ static void rxe_qp_init_misc(struct rxe_dev *rxe, struct rxe_qp *qp,
 	spin_lock_init(&qp->rq.producer_lock);
 	spin_lock_init(&qp->rq.consumer_lock);
 
+	skb_queue_head_init(&qp->req_pkts);
+	skb_queue_head_init(&qp->resp_pkts);
+
 	atomic_set(&qp->ssn, 0);
 	atomic_set(&qp->skb_out, 0);
 }
@@ -240,12 +243,8 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
 	qp->req.opcode		= -1;
 	qp->comp.opcode		= -1;
 
-	skb_queue_head_init(&qp->req_pkts);
-
-	rxe_init_task(&qp->req.task, qp,
-		      rxe_requester, "req");
-	rxe_init_task(&qp->comp.task, qp,
-		      rxe_completer, "comp");
+	rxe_init_task(&qp->req.task, qp, rxe_requester);
+	rxe_init_task(&qp->comp.task, qp, rxe_completer);
 
 	qp->qp_timeout_jiffies = 0; /* Can't be set for UD/UC in modify_qp */
 	if (init->qp_type == IB_QPT_RC) {
@@ -290,10 +289,7 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,
 		}
 	}
 
-	skb_queue_head_init(&qp->resp_pkts);
-
-	rxe_init_task(&qp->resp.task, qp,
-		      rxe_responder, "resp");
+	rxe_init_task(&qp->resp.task, qp, rxe_responder);
 
 	qp->resp.opcode		= OPCODE_NONE;
 	qp->resp.msn		= 0;
drivers/infiniband/sw/rxe/rxe_resp.c +2 -1
index 693081e813ec..9f65c346d843 100644
@@ -466,8 +466,9 @@ static enum resp_states check_rkey(struct rxe_qp *qp,
 		if (mw->access & IB_ZERO_BASED)
 			qp->resp.offset = mw->addr;
 
-		rxe_put(mw);
 		rxe_get(mr);
+		rxe_put(mw);
+		mw = NULL;
 	} else {
 		mr = lookup_mr(qp->pd, access, rkey, RXE_LOOKUP_REMOTE);
 		if (!mr) {
drivers/infiniband/sw/rxe/rxe_task.c +1 -3
index ec2b7de1c497..182d0532a8ab 100644
@@ -94,12 +94,10 @@ void rxe_do_task(struct tasklet_struct *t)
 	task->ret = ret;
 }
 
-int rxe_init_task(struct rxe_task *task,
-		  void *arg, int (*func)(void *), char *name)
+int rxe_init_task(struct rxe_task *task, void *arg, int (*func)(void *))
 {
 	task->arg	= arg;
 	task->func	= func;
-	snprintf(task->name, sizeof(task->name), "%s", name);
 	task->destroyed	= false;
 
 	tasklet_setup(&task->tasklet, rxe_do_task);
drivers/infiniband/sw/rxe/rxe_task.h +1 -3
index 7f612a1c68a7..b3dfd970d1dc 100644
@@ -25,7 +25,6 @@ struct rxe_task {
 	void			*arg;
 	int			(*func)(void *arg);
 	int			ret;
-	char			name[16];
 	bool			destroyed;
 };
 
@@ -34,8 +33,7 @@ struct rxe_task {
  *	arg  => parameter to pass to fcn
  *	func => function to call until it returns != 0
  */
-int rxe_init_task(struct rxe_task *task,
-		  void *arg, int (*func)(void *), char *name);
+int rxe_init_task(struct rxe_task *task, void *arg, int (*func)(void *));
 
 /* cleanup task */
 void rxe_cleanup_task(struct rxe_task *task);
drivers/infiniband/ulp/isert/ib_isert.c +12 -4
index 7cca171478a2..a7fef3ea77fe 100644
@@ -657,9 +657,13 @@ static int
 isert_connect_error(struct rdma_cm_id *cma_id)
 {
 	struct isert_conn *isert_conn = cma_id->qp->qp_context;
+	struct isert_np *isert_np = cma_id->context;
 
 	ib_drain_qp(isert_conn->qp);
+
+	mutex_lock(&isert_np->mutex);
 	list_del_init(&isert_conn->node);
+	mutex_unlock(&isert_np->mutex);
 	isert_conn->cm_id = NULL;
 	isert_put_conn(isert_conn);
 
@@ -2432,6 +2436,7 @@ isert_free_np(struct iscsi_np *np)
 {
 	struct isert_np *isert_np = np->np_context;
 	struct isert_conn *isert_conn, *n;
+	LIST_HEAD(drop_conn_list);
 
 	if (isert_np->cm_id)
 		rdma_destroy_id(isert_np->cm_id);
@@ -2451,7 +2456,7 @@ isert_free_np(struct iscsi_np *np)
 					 node) {
 			isert_info("cleaning isert_conn %p state (%d)\n",
 				   isert_conn, isert_conn->state);
-			isert_connect_release(isert_conn);
+			list_move_tail(&isert_conn->node, &drop_conn_list);
 		}
 	}
 
@@ -2462,11 +2467,16 @@ isert_free_np(struct iscsi_np *np)
 					 node) {
 			isert_info("cleaning isert_conn %p state (%d)\n",
 				   isert_conn, isert_conn->state);
-			isert_connect_release(isert_conn);
+			list_move_tail(&isert_conn->node, &drop_conn_list);
 		}
 	}
 	mutex_unlock(&isert_np->mutex);
 
+	list_for_each_entry_safe(isert_conn, n, &drop_conn_list, node) {
+		list_del_init(&isert_conn->node);
+		isert_connect_release(isert_conn);
+	}
+
 	np->np_context = NULL;
 	kfree(isert_np);
 }
@@ -2561,8 +2571,6 @@ static void isert_wait_conn(struct iscsit_conn *conn)
 	isert_put_unsol_pending_cmds(conn);
 	isert_wait4cmds(conn);
 	isert_wait4logout(isert_conn);
-
-	queue_work(isert_release_wq, &isert_conn->release_work);
 }
 
 static void isert_free_conn(struct iscsit_conn *conn)
drivers/infiniband/ulp/rtrs/rtrs-clt.c +23 -32

104 lines not on this page · raw message

drivers/infiniband/ulp/rtrs/rtrs.c +3 -1
index ed324b47d93a..716ec7baddef 100644
@@ -37,8 +37,10 @@ struct rtrs_iu *rtrs_iu_alloc(u32 iu_num, size_t size, gfp_t gfp_mask,
 			goto err;
 
 		iu->dma_addr = ib_dma_map_single(dma_dev, iu->buf, size, dir);
-		if (ib_dma_mapping_error(dma_dev, iu->dma_addr))
+		if (ib_dma_mapping_error(dma_dev, iu->dma_addr)) {
+			kfree(iu->buf);
 			goto err;
+		}
 
 		iu->cqe.done  = done;
 		iu->size      = size;
drivers/irqchip/irq-gic-common.c +8 -2
index a610821c8ff2..afd6a1841715 100644
@@ -16,7 +16,13 @@ void gic_enable_of_quirks(const struct device_node *np,
 			  const struct gic_quirk *quirks, void *data)
 {
 	for (; quirks->desc; quirks++) {
-		if (!of_device_is_compatible(np, quirks->compatible))
+		if (!quirks->compatible && !quirks->property)
+			continue;
+		if (quirks->compatible &&
+		    !of_device_is_compatible(np, quirks->compatible))
+			continue;
+		if (quirks->property &&
+		    !of_property_read_bool(np, quirks->property))
 			continue;
 		if (quirks->init(data))
 			pr_info("GIC: enabling workaround for %s\n",
@@ -28,7 +34,7 @@ void gic_enable_quirks(u32 iidr, const struct gic_quirk *quirks,
 		void *data)
 {
 	for (; quirks->desc; quirks++) {
-		if (quirks->compatible)
+		if (quirks->compatible || quirks->property)
 			continue;
 		if (quirks->iidr != (quirks->mask & iidr))
 			continue;
drivers/irqchip/irq-gic-common.h +1 -0
index 27e3d4ed4f32..3db4592cda1c 100644
@@ -13,6 +13,7 @@
 struct gic_quirk {
 	const char *desc;
 	const char *compatible;
+	const char *property;
 	bool (*init)(void *data);
 	u32 iidr;
 	u32 mask;
drivers/irqchip/irq-gic-v3.c +20 -0
index 2182f87d2d12..11f7c53e4b63 100644
@@ -38,6 +38,7 @@
 
 #define FLAGS_WORKAROUND_GICR_WAKER_MSM8996	(1ULL << 0)
 #define FLAGS_WORKAROUND_CAVIUM_ERRATUM_38539	(1ULL << 1)
+#define FLAGS_WORKAROUND_MTK_GICR_SAVE		(1ULL << 2)
 
 #define GIC_IRQ_TYPE_PARTITION	(GIC_IRQ_TYPE_LPI + 1)
 
@@ -1730,6 +1731,15 @@ static bool gic_enable_quirk_msm8996(void *data)
 	return true;
 }
 
+static bool gic_enable_quirk_mtk_gicr(void *data)
+{
+	struct gic_chip_data *d = data;
+
+	d->flags |= FLAGS_WORKAROUND_MTK_GICR_SAVE;
+
+	return true;
+}
+
 static bool gic_enable_quirk_cavium_38539(void *data)
 {
 	struct gic_chip_data *d = data;
@@ -1802,6 +1812,11 @@ static const struct gic_quirk gic_quirks[] = {
 		.compatible = "qcom,msm8996-gic-v3",
 		.init	= gic_enable_quirk_msm8996,
 	},
+	{
+		.desc	= "GICv3: Mediatek Chromebook GICR save problem",
+		.property = "mediatek,broken-save-restore-fw",
+		.init	= gic_enable_quirk_mtk_gicr,
+	},
 	{
 		.desc	= "GICv3: HIP06 erratum 161010803",
 		.iidr	= 0x0204043b,
@@ -1844,6 +1859,11 @@ static void gic_enable_nmi_support(void)
 	if (!gic_prio_masking_enabled())
 		return;
 
+	if (gic_data.flags & FLAGS_WORKAROUND_MTK_GICR_SAVE) {
+		pr_warn("Skipping NMI enable due to firmware issues\n");
+		return;
+	}
+
 	ppi_nmi_refs = kcalloc(gic_data.ppi_nr, sizeof(*ppi_nmi_refs), GFP_KERNEL);
 	if (!ppi_nmi_refs)
 		return;
drivers/irqchip/irq-meson-gpio.c +1 -1
index 2aaa9aad3e87..7da18ef95211 100644
@@ -150,7 +150,7 @@ static const struct meson_gpio_irq_params s4_params = {
 	INIT_MESON_S4_COMMON_DATA(82)
 };
 
-static const struct of_device_id meson_irq_gpio_matches[] = {
+static const struct of_device_id meson_irq_gpio_matches[] __maybe_unused = {
 	{ .compatible = "amlogic,meson8-gpio-intc", .data = &meson8_params },
 	{ .compatible = "amlogic,meson8b-gpio-intc", .data = &meson8b_params },
 	{ .compatible = "amlogic,meson-gxbb-gpio-intc", .data = &gxbb_params },
drivers/md/dm-ioctl.c +1 -4
index 83aecd9250ba..6ae1c19b8243 100644
@@ -1151,13 +1151,10 @@ static int do_resume(struct dm_ioctl *param)
 	/* Do we need to load a new map ? */
 	if (new_map) {
 		sector_t old_size, new_size;
-		int srcu_idx;
 
 		/* Suspend if it isn't already suspended */
-		old_map = dm_get_live_table(md, &srcu_idx);
-		if ((param->flags & DM_SKIP_LOCKFS_FLAG) || !old_map)
+		if (param->flags & DM_SKIP_LOCKFS_FLAG)
 			suspend_flags &= ~DM_SUSPEND_LOCKFS_FLAG;
-		dm_put_live_table(md, srcu_idx);
 		if (param->flags & DM_NOFLUSH_FLAG)
 			suspend_flags |= DM_SUSPEND_NOFLUSH_FLAG;
 		if (!dm_suspended_md(md))
drivers/md/dm-thin-metadata.c +12 -8
index 80545ec54121..59eb1cb7037a 100644
@@ -1750,13 +1750,15 @@ int dm_thin_remove_range(struct dm_thin_device *td,
 
 int dm_pool_block_is_shared(struct dm_pool_metadata *pmd, dm_block_t b, bool *result)
 {
-	int r;
+	int r = -EINVAL;
 	uint32_t ref_count;
 
 	down_read(&pmd->root_lock);
-	r = dm_sm_get_count(pmd->data_sm, b, &ref_count);
-	if (!r)
-		*result = (ref_count > 1);
+	if (!pmd->fail_io) {
+		r = dm_sm_get_count(pmd->data_sm, b, &ref_count);
+		if (!r)
+			*result = (ref_count > 1);
+	}
 	up_read(&pmd->root_lock);
 
 	return r;
@@ -1764,10 +1766,11 @@ int dm_pool_block_is_shared(struct dm_pool_metadata *pmd, dm_block_t b, bool *re
 
 int dm_pool_inc_data_range(struct dm_pool_metadata *pmd, dm_block_t b, dm_block_t e)
 {
-	int r = 0;
+	int r = -EINVAL;
 
 	pmd_write_lock(pmd);
-	r = dm_sm_inc_blocks(pmd->data_sm, b, e);
+	if (!pmd->fail_io)
+		r = dm_sm_inc_blocks(pmd->data_sm, b, e);
 	pmd_write_unlock(pmd);
 
 	return r;
@@ -1775,10 +1778,11 @@ int dm_pool_inc_data_range(struct dm_pool_metadata *pmd, dm_block_t b, dm_block_
 
 int dm_pool_dec_data_range(struct dm_pool_metadata *pmd, dm_block_t b, dm_block_t e)
 {
-	int r = 0;
+	int r = -EINVAL;
 
 	pmd_write_lock(pmd);
-	r = dm_sm_dec_blocks(pmd->data_sm, b, e);
+	if (!pmd->fail_io)
+		r = dm_sm_dec_blocks(pmd->data_sm, b, e);
 	pmd_write_unlock(pmd);
 
 	return r;
drivers/md/dm-thin.c +1 -2
index d12aff50974a..601f9e4e6234 100644
@@ -398,8 +398,7 @@ static int issue_discard(struct discard_op *op, dm_block_t data_b, dm_block_t da
 	sector_t s = block_to_sectors(tc->pool, data_b);
 	sector_t len = block_to_sectors(tc->pool, data_e - data_b);
 
-	return __blkdev_issue_discard(tc->pool_dev->bdev, s, len, GFP_NOWAIT,
-				      &op->bio);
+	return __blkdev_issue_discard(tc->pool_dev->bdev, s, len, GFP_NOIO, &op->bio);
 }
 
 static void end_discard(struct discard_op *op, int r)
drivers/md/dm.c +4 -0
index 24284d22f15b..acf7e7551c94 100644
@@ -2801,6 +2801,10 @@ int dm_suspend(struct mapped_device *md, unsigned int suspend_flags)
 	}
 
 	map = rcu_dereference_protected(md->map, lockdep_is_held(&md->suspend_lock));
+	if (!map) {
+		/* avoid deadlock with fs/namespace.c:do_mount() */
+		suspend_flags &= ~DM_SUSPEND_LOCKFS_FLAG;
+	}
 
 	r = __dm_suspend(md, map, suspend_flags, TASK_INTERRUPTIBLE, DMF_SUSPENDED);
 	if (r)
drivers/net/dsa/ocelot/felix_vsc9959.c +1 -1
index cc89cff029e1..5f6af0870dfd 100644
@@ -1253,7 +1253,7 @@ static void vsc9959_tas_guard_bands_update(struct ocelot *ocelot, int port)
 	/* Consider the standard Ethernet overhead of 8 octets preamble+SFD,
 	 * 4 octets FCS, 12 octets IFG.
 	 */
-	needed_bit_time_ps = (maxlen + 24) * picos_per_byte;
+	needed_bit_time_ps = (u64)(maxlen + 24) * picos_per_byte;
 
 	dev_dbg(ocelot->dev,
 		"port %d: max frame size %d needs %llu ps at speed %d\n",
drivers/net/ethernet/freescale/enetc/enetc_qos.c +2 -2
index a8539a8554a1..762849959cc1 100644
@@ -189,8 +189,8 @@ int enetc_setup_tc_cbs(struct net_device *ndev, void *type_data)
 	int bw_sum = 0;
 	u8 bw;
 
-	prio_top = netdev_get_prio_tc_map(ndev, tc_nums - 1);
-	prio_next = netdev_get_prio_tc_map(ndev, tc_nums - 2);
+	prio_top = tc_nums - 1;
+	prio_next = tc_nums - 2;
 
 	/* Support highest prio and second prio tc in cbs mode */
 	if (tc != prio_top && tc != prio_next)
drivers/net/ethernet/intel/iavf/iavf.h +1 -1
index 93a998f169de..6625625f91e4 100644
@@ -525,7 +525,7 @@ void iavf_set_ethtool_ops(struct net_device *netdev);
 void iavf_update_stats(struct iavf_adapter *adapter);
 void iavf_reset_interrupt_capability(struct iavf_adapter *adapter);
 int iavf_init_interrupt_scheme(struct iavf_adapter *adapter);
-void iavf_irq_enable_queues(struct iavf_adapter *adapter, u32 mask);
+void iavf_irq_enable_queues(struct iavf_adapter *adapter);
 void iavf_free_all_tx_resources(struct iavf_adapter *adapter);
 void iavf_free_all_rx_resources(struct iavf_adapter *adapter);
 
drivers/net/ethernet/intel/iavf/iavf_main.c +6 -9
index 34711a88dbaa..965d02d7ff80 100644
@@ -359,21 +359,18 @@ static void iavf_irq_disable(struct iavf_adapter *adapter)
 }
 
 /**
- * iavf_irq_enable_queues - Enable interrupt for specified queues
+ * iavf_irq_enable_queues - Enable interrupt for all queues
  * @adapter: board private structure
- * @mask: bitmap of queues to enable
  **/
-void iavf_irq_enable_queues(struct iavf_adapter *adapter, u32 mask)
+void iavf_irq_enable_queues(struct iavf_adapter *adapter)
 {
 	struct iavf_hw *hw = &adapter->hw;
 	int i;
 
 	for (i = 1; i < adapter->num_msix_vectors; i++) {
-		if (mask & BIT(i - 1)) {
-			wr32(hw, IAVF_VFINT_DYN_CTLN1(i - 1),
-			     IAVF_VFINT_DYN_CTLN1_INTENA_MASK |
-			     IAVF_VFINT_DYN_CTLN1_ITR_INDX_MASK);
-		}
+		wr32(hw, IAVF_VFINT_DYN_CTLN1(i - 1),
+		     IAVF_VFINT_DYN_CTLN1_INTENA_MASK |
+		     IAVF_VFINT_DYN_CTLN1_ITR_INDX_MASK);
 	}
 }
 
@@ -387,7 +384,7 @@ void iavf_irq_enable(struct iavf_adapter *adapter, bool flush)
 	struct iavf_hw *hw = &adapter->hw;
 
 	iavf_misc_irq_enable(adapter);
-	iavf_irq_enable_queues(adapter, ~0);
+	iavf_irq_enable_queues(adapter);
 
 	if (flush)
 		iavf_flush(hw);
drivers/net/ethernet/intel/iavf/iavf_register.h +1 -1
index bf793332fc9d..a19e88898a0b 100644
@@ -40,7 +40,7 @@
 #define IAVF_VFINT_DYN_CTL01_INTENA_MASK IAVF_MASK(0x1, IAVF_VFINT_DYN_CTL01_INTENA_SHIFT)
 #define IAVF_VFINT_DYN_CTL01_ITR_INDX_SHIFT 3
 #define IAVF_VFINT_DYN_CTL01_ITR_INDX_MASK IAVF_MASK(0x3, IAVF_VFINT_DYN_CTL01_ITR_INDX_SHIFT)
-#define IAVF_VFINT_DYN_CTLN1(_INTVF) (0x00003800 + ((_INTVF) * 4)) /* _i=0...15 */ /* Reset: VFR */
+#define IAVF_VFINT_DYN_CTLN1(_INTVF) (0x00003800 + ((_INTVF) * 4)) /* _i=0...63 */ /* Reset: VFR */
 #define IAVF_VFINT_DYN_CTLN1_INTENA_SHIFT 0
 #define IAVF_VFINT_DYN_CTLN1_INTENA_MASK IAVF_MASK(0x1, IAVF_VFINT_DYN_CTLN1_INTENA_SHIFT)
 #define IAVF_VFINT_DYN_CTLN1_SWINT_TRIG_SHIFT 2
drivers/net/ethernet/intel/ice/ice_main.c +4 -0
index 6a50f8ba3940..4095fe40dfc9 100644
@@ -6784,6 +6784,10 @@ int ice_down(struct ice_vsi *vsi)
 	ice_for_each_txq(vsi, i)
 		ice_clean_tx_ring(vsi->tx_rings[i]);
 
+	if (ice_is_xdp_ena_vsi(vsi))
+		ice_for_each_xdp_txq(vsi, i)
+			ice_clean_tx_ring(vsi->xdp_rings[i]);
+
 	ice_for_each_rxq(vsi, i)
 		ice_clean_rx_ring(vsi->rx_rings[i]);
 
drivers/net/ethernet/intel/igb/igb_ethtool.c +3 -0
index ff911af16a4b..96fa1c420f91 100644
@@ -822,6 +822,8 @@ static int igb_set_eeprom(struct net_device *netdev,
 		 */
 		ret_val = hw->nvm.ops.read(hw, last_word, 1,
 				   &eeprom_buff[last_word - first_word]);
+		if (ret_val)
+			goto out;
 	}
 
 	/* Device's eeprom is always little-endian, word addressable */
@@ -841,6 +843,7 @@ static int igb_set_eeprom(struct net_device *netdev,
 		hw->nvm.ops.update(hw);
 
 	igb_set_fw_version(adapter);
+out:
 	kfree(eeprom_buff);
 	return ret_val;
 }
drivers/net/ethernet/intel/igb/igb_main.c +6 -2
index b3aed4e2ca91..18ffbc892f86 100644
@@ -6893,6 +6893,7 @@ static void igb_extts(struct igb_adapter *adapter, int tsintr_tt)
 	struct e1000_hw *hw = &adapter->hw;
 	struct ptp_clock_event event;
 	struct timespec64 ts;
+	unsigned long flags;
 
 	if (pin < 0 || pin >= IGB_N_SDP)
 		return;
@@ -6900,9 +6901,12 @@ static void igb_extts(struct igb_adapter *adapter, int tsintr_tt)
 	if (hw->mac.type == e1000_82580 ||
 	    hw->mac.type == e1000_i354 ||
 	    hw->mac.type == e1000_i350) {
-		s64 ns = rd32(auxstmpl);
+		u64 ns = rd32(auxstmpl);
 
-		ns += ((s64)(rd32(auxstmph) & 0xFF)) << 32;
+		ns += ((u64)(rd32(auxstmph) & 0xFF)) << 32;
+		spin_lock_irqsave(&adapter->tmreg_lock, flags);
+		ns = timecounter_cyc2time(&adapter->tc, ns);
+		spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
 		ts = ns_to_timespec64(ns);
 	} else {
 		ts.tv_nsec = rd32(auxstmpl);
drivers/net/ethernet/intel/igc/igc_main.c +11 -1
index 1d9b70e0ff67..3509974c1f8e 100644
@@ -255,6 +255,13 @@ static void igc_clean_tx_ring(struct igc_ring *tx_ring)
 	/* reset BQL for queue */
 	netdev_tx_reset_queue(txring_txq(tx_ring));
 
+	/* Zero out the buffer ring */
+	memset(tx_ring->tx_buffer_info, 0,
+	       sizeof(*tx_ring->tx_buffer_info) * tx_ring->count);
+
+	/* Zero out the descriptor ring */
+	memset(tx_ring->desc, 0, tx_ring->size);
+
 	/* reset next_to_use and next_to_clean */
 	tx_ring->next_to_use = 0;
 	tx_ring->next_to_clean = 0;
@@ -268,7 +275,7 @@ static void igc_clean_tx_ring(struct igc_ring *tx_ring)
  */
 void igc_free_tx_resources(struct igc_ring *tx_ring)
 {
-	igc_clean_tx_ring(tx_ring);
+	igc_disable_tx_ring(tx_ring);
 
 	vfree(tx_ring->tx_buffer_info);
 	tx_ring->tx_buffer_info = NULL;
@@ -6678,6 +6685,9 @@ static void igc_remove(struct pci_dev *pdev)
 
 	igc_ptp_stop(adapter);
 
+	pci_disable_ptm(pdev);
+	pci_clear_master(pdev);
+
 	set_bit(__IGC_DOWN, &adapter->state);
 
 	del_timer_sync(&adapter->watchdog_timer);
drivers/net/ethernet/marvell/octeon_ep/octep_main.c +6 -1
index b45dd7f04e21..8979dd05e873 100644
@@ -928,6 +928,9 @@ int octep_device_setup(struct octep_device *oct)
 		oct->mmio[i].hw_addr =
 			ioremap(pci_resource_start(oct->pdev, i * 2),
 				pci_resource_len(oct->pdev, i * 2));
+		if (!oct->mmio[i].hw_addr)
+			goto unmap_prev;
+
 		oct->mmio[i].mapped = 1;
 	}
 
@@ -966,7 +969,9 @@ int octep_device_setup(struct octep_device *oct)
 	return 0;
 
 unsupported_dev:
-	for (i = 0; i < OCTEP_MMIO_REGIONS; i++)
+	i = OCTEP_MMIO_REGIONS;
+unmap_prev:
+	while (i--)
 		iounmap(oct->mmio[i].hw_addr);
 
 	kfree(oct->conf);
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +2 -5
index 84f2ba53b8b6..8cb2a0181fb9 100644
@@ -1878,7 +1878,8 @@ static int nix_check_txschq_alloc_req(struct rvu *rvu, int lvl, u16 pcifunc,
 		free_cnt = rvu_rsrc_free_count(&txsch->schq);
 	}
 
-	if (free_cnt < req_schq || req_schq > MAX_TXSCHQ_PER_FUNC)
+	if (free_cnt < req_schq || req->schq[lvl] > MAX_TXSCHQ_PER_FUNC ||
+	    req->schq_contig[lvl] > MAX_TXSCHQ_PER_FUNC)
 		return NIX_AF_ERR_TLX_ALLOC_FAIL;
 
 	/* If contiguous queues are needed, check for availability */
@@ -4069,10 +4070,6 @@ int rvu_mbox_handler_nix_set_rx_cfg(struct rvu *rvu, struct nix_rx_cfg *req,
 
 static u64 rvu_get_lbk_link_credits(struct rvu *rvu, u16 lbk_max_frs)
 {
-	/* CN10k supports 72KB FIFO size and max packet size of 64k */
-	if (rvu->hw->lbk_bufsize == 0x12000)
-		return (rvu->hw->lbk_bufsize - lbk_max_frs) / 16;
-
 	return 1600; /* 16 * max LBK datarate = 16 * 100Gbps */
 }
 
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_hash.c +2 -27
index 3182adb7b9a8..3b48b635977f 100644
@@ -1168,10 +1168,8 @@ static u16 __rvu_npc_exact_cmd_rules_cnt_update(struct rvu *rvu, int drop_mcam_i
 {
 	struct npc_exact_table *table;
 	u16 *cnt, old_cnt;
-	bool promisc;
 
 	table = rvu->hw->table;
-	promisc = table->promisc_mode[drop_mcam_idx];
 
 	cnt = &table->cnt_cmd_rules[drop_mcam_idx];
 	old_cnt = *cnt;
@@ -1183,16 +1181,13 @@ static u16 __rvu_npc_exact_cmd_rules_cnt_update(struct rvu *rvu, int drop_mcam_i
 
 	*enable_or_disable_cam = false;
 
-	if (promisc)
-		goto done;
-
-	/* If all rules are deleted and not already in promisc mode; disable cam */
+	/* If all rules are deleted, disable cam */
 	if (!*cnt && val < 0) {
 		*enable_or_disable_cam = true;
 		goto done;
 	}
 
-	/* If rule got added and not already in promisc mode; enable cam */
+	/* If rule got added, enable cam */
 	if (!old_cnt && val > 0) {
 		*enable_or_disable_cam = true;
 		goto done;
@@ -1447,7 +1442,6 @@ int rvu_npc_exact_promisc_disable(struct rvu *rvu, u16 pcifunc)
 	u32 drop_mcam_idx;
 	bool *promisc;
 	bool rc;
-	u32 cnt;
 
 	table = rvu->hw->table;
 
@@ -1470,17 +1464,8 @@ int rvu_npc_exact_promisc_disable(struct rvu *rvu, u16 pcifunc)
 		return LMAC_AF_ERR_INVALID_PARAM;
 	}
 	*promisc = false;
-	cnt = __rvu_npc_exact_cmd_rules_cnt_update(rvu, drop_mcam_idx, 0, NULL);
 	mutex_unlock(&table->lock);
 
-	/* If no dmac filter entries configured, disable drop rule */
-	if (!cnt)
-		rvu_npc_enable_mcam_by_entry_index(rvu, drop_mcam_idx, NIX_INTF_RX, false);
-	else
-		rvu_npc_enable_mcam_by_entry_index(rvu, drop_mcam_idx, NIX_INTF_RX, !*promisc);
-
-	dev_dbg(rvu->dev, "%s: disabled  promisc mode (cgx=%d lmac=%d, cnt=%d)\n",
-		__func__, cgx_id, lmac_id, cnt);
 	return 0;
 }
 
@@ -1498,7 +1483,6 @@ int rvu_npc_exact_promisc_enable(struct rvu *rvu, u16 pcifunc)
 	u32 drop_mcam_idx;
 	bool *promisc;
 	bool rc;
-	u32 cnt;
 
 	table = rvu->hw->table;
 
@@ -1521,17 +1505,8 @@ int rvu_npc_exact_promisc_enable(struct rvu *rvu, u16 pcifunc)
 		return LMAC_AF_ERR_INVALID_PARAM;
 	}
 	*promisc = true;
-	cnt = __rvu_npc_exact_cmd_rules_cnt_update(rvu, drop_mcam_idx, 0, NULL);
 	mutex_unlock(&table->lock);
 
-	/* If no dmac filter entries configured, disable drop rule */
-	if (!cnt)
-		rvu_npc_enable_mcam_by_entry_index(rvu, drop_mcam_idx, NIX_INTF_RX, false);
-	else
-		rvu_npc_enable_mcam_by_entry_index(rvu, drop_mcam_idx, NIX_INTF_RX, !*promisc);
-
-	dev_dbg(rvu->dev, "%s: Enabled promisc mode (cgx=%d lmac=%d cnt=%d)\n",
-		__func__, cgx_id, lmac_id, cnt);
 	return 0;
 }
 
drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h +0 -12
index 1a35b3c2a367..0b560e97a356 100644
@@ -275,18 +275,6 @@ static inline bool mlx5_sriov_is_enabled(struct mlx5_core_dev *dev)
 	return pci_num_vf(dev->pdev) ? true : false;
 }
 
-static inline int mlx5_lag_is_lacp_owner(struct mlx5_core_dev *dev)
-{
-	/* LACP owner conditions:
-	 * 1) Function is physical.
-	 * 2) LAG is supported by FW.
-	 * 3) LAG is managed by driver (currently the only option).
-	 */
-	return  MLX5_CAP_GEN(dev, vport_group_manager) &&
-		   (MLX5_CAP_GEN(dev, num_lag_ports) > 1) &&
-		    MLX5_CAP_GEN(dev, lag_master);
-}
-
 int mlx5_rescan_drivers_locked(struct mlx5_core_dev *dev);
 static inline int mlx5_rescan_drivers(struct mlx5_core_dev *dev)
 {
drivers/net/ethernet/sfc/efx_channels.c +2 -0
index aaa381743bca..27d00ffac68f 100644
@@ -301,6 +301,7 @@ int efx_probe_interrupts(struct efx_nic *efx)
 		efx->tx_channel_offset = 0;
 		efx->n_xdp_channels = 0;
 		efx->xdp_channel_offset = efx->n_channels;
+		efx->xdp_txq_queues_mode = EFX_XDP_TX_QUEUES_BORROWED;
 		rc = pci_enable_msi(efx->pci_dev);
 		if (rc == 0) {
 			efx_get_channel(efx, 0)->irq = efx->pci_dev->irq;
@@ -322,6 +323,7 @@ int efx_probe_interrupts(struct efx_nic *efx)
 		efx->tx_channel_offset = efx_separate_tx_channels ? 1 : 0;
 		efx->n_xdp_channels = 0;
 		efx->xdp_channel_offset = efx->n_channels;
+		efx->xdp_txq_queues_mode = EFX_XDP_TX_QUEUES_BORROWED;
 		efx->legacy_irq = efx->pci_dev->irq;
 	}
 
drivers/net/ethernet/sfc/siena/efx_channels.c +2 -0
index 06ed74994e36..1776f7f8a7a9 100644
@@ -302,6 +302,7 @@ int efx_siena_probe_interrupts(struct efx_nic *efx)
 		efx->tx_channel_offset = 0;
 		efx->n_xdp_channels = 0;
 		efx->xdp_channel_offset = efx->n_channels;
+		efx->xdp_txq_queues_mode = EFX_XDP_TX_QUEUES_BORROWED;
 		rc = pci_enable_msi(efx->pci_dev);
 		if (rc == 0) {
 			efx_get_channel(efx, 0)->irq = efx->pci_dev->irq;
@@ -323,6 +324,7 @@ int efx_siena_probe_interrupts(struct efx_nic *efx)
 		efx->tx_channel_offset = efx_siena_separate_tx_channels ? 1 : 0;
 		efx->n_xdp_channels = 0;
 		efx->xdp_channel_offset = efx->n_channels;
+		efx->xdp_txq_queues_mode = EFX_XDP_TX_QUEUES_BORROWED;
 		efx->legacy_irq = efx->pci_dev->irq;
 	}
 
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +7 -2
index 490315723062..30ce07305578 100644
@@ -3865,7 +3865,6 @@ static int __stmmac_open(struct net_device *dev,
 
 	stmmac_hw_teardown(dev);
 init_error:
-	free_dma_desc_resources(priv, &priv->dma_conf);
 	phylink_disconnect_phy(priv->phylink);
 init_phy_error:
 	pm_runtime_put(priv->device);
@@ -3883,6 +3882,9 @@ static int stmmac_open(struct net_device *dev)
 		return PTR_ERR(dma_conf);
 
 	ret = __stmmac_open(dev, dma_conf);
+	if (ret)
+		free_dma_desc_resources(priv, dma_conf);
+
 	kfree(dma_conf);
 	return ret;
 }
@@ -5607,12 +5609,15 @@ static int stmmac_change_mtu(struct net_device *dev, int new_mtu)
 		stmmac_release(dev);
 
 		ret = __stmmac_open(dev, dma_conf);
-		kfree(dma_conf);
 		if (ret) {
+			free_dma_desc_resources(priv, dma_conf);
+			kfree(dma_conf);
 			netdev_err(priv->dev, "failed reopening the interface after MTU change\n");
 			return ret;
 		}
 
+		kfree(dma_conf);
+
 		stmmac_set_rx_mode(dev);
 	}
 
drivers/net/ipvlan/ipvlan_l3s.c +4 -0
index 71712ea25403..d5b05e803219 100644
@@ -102,6 +102,10 @@ static unsigned int ipvlan_nf_input(void *priv, struct sk_buff *skb,
 
 	skb->dev = addr->master->dev;
 	skb->skb_iif = skb->dev->ifindex;
+#if IS_ENABLED(CONFIG_IPV6)
+	if (addr->atype == IPVL_IPV6)
+		IP6CB(skb)->iif = skb->dev->ifindex;
+#endif
 	len = skb->len + ETH_HLEN;
 	ipvlan_count_rx(addr->master, len, true, false);
 out:
drivers/net/macsec.c +5 -7
index 038a78794392..983cabf9a0f6 100644
@@ -3981,17 +3981,15 @@ static int macsec_add_dev(struct net_device *dev, sci_t sci, u8 icv_len)
 		return -ENOMEM;
 
 	secy->tx_sc.stats = netdev_alloc_pcpu_stats(struct pcpu_tx_sc_stats);
-	if (!secy->tx_sc.stats) {
-		free_percpu(macsec->stats);
+	if (!secy->tx_sc.stats)
 		return -ENOMEM;
-	}
 
 	secy->tx_sc.md_dst = metadata_dst_alloc(0, METADATA_MACSEC, GFP_KERNEL);
-	if (!secy->tx_sc.md_dst) {
-		free_percpu(secy->tx_sc.stats);
-		free_percpu(macsec->stats);
+	if (!secy->tx_sc.md_dst)
+		/* macsec and secy percpu stats will be freed when unregistering
+		 * net_device in macsec_free_netdev()
+		 */
 		return -ENOMEM;
-	}
 
 	if (sci == MACSEC_UNDEF_SCI)
 		sci = dev_to_sci(dev, MACSEC_PORT_ES);
drivers/net/phy/phylink.c +39 -2

67 lines not on this page · raw message

drivers/net/usb/qmi_wwan.c +2 -0
index 45c258501135..68829a5a93d3 100644
@@ -1219,7 +1219,9 @@ static const struct usb_device_id products[] = {
 	{QMI_FIXED_INTF(0x05c6, 0x9080, 8)},
 	{QMI_FIXED_INTF(0x05c6, 0x9083, 3)},
 	{QMI_FIXED_INTF(0x05c6, 0x9084, 4)},
+	{QMI_QUIRK_SET_DTR(0x05c6, 0x9091, 2)},	/* Compal RXM-G1 */
 	{QMI_FIXED_INTF(0x05c6, 0x90b2, 3)},    /* ublox R410M */
+	{QMI_QUIRK_SET_DTR(0x05c6, 0x90db, 2)},	/* Compal RXM-G1 */
 	{QMI_FIXED_INTF(0x05c6, 0x920d, 0)},
 	{QMI_FIXED_INTF(0x05c6, 0x920d, 5)},
 	{QMI_QUIRK_SET_DTR(0x05c6, 0x9625, 4)},	/* YUGA CLM920-NC5 */
drivers/net/wan/lapbether.c +3 -0
index d62a904d2e42..56326f38fe8a 100644
@@ -384,6 +384,9 @@ static int lapbeth_new_device(struct net_device *dev)
 
 	ASSERT_RTNL();
 
+	if (dev->type != ARPHRD_ETHER)
+		return -EINVAL;
+
 	ndev = alloc_netdev(sizeof(*lapbeth), "lapb%d", NET_NAME_UNKNOWN,
 			    lapbeth_setup);
 	if (!ndev)
drivers/nvme/host/pci.c +2 -0
index ba4903c86f7f..145fa7ef3f74 100644
@@ -3537,6 +3537,8 @@ static const struct pci_device_id nvme_id_table[] = {
 		.driver_data = NVME_QUIRK_BOGUS_NID, },
 	{ PCI_DEVICE(0x1e4B, 0x1202),   /* MAXIO MAP1202 */
 		.driver_data = NVME_QUIRK_BOGUS_NID, },
+	{ PCI_DEVICE(0x1e4B, 0x1602),   /* MAXIO MAP1602 */
+		.driver_data = NVME_QUIRK_BOGUS_NID, },
 	{ PCI_DEVICE(0x1cc1, 0x5350),   /* ADATA XPG GAMMIX S50 */
 		.driver_data = NVME_QUIRK_BOGUS_NID, },
 	{ PCI_DEVICE(0x1dbe, 0x5236),   /* ADATA XPG GAMMIX S70 */
drivers/of/overlay.c +1 -0
index ed4e6c144a68..5289975bad70 100644
@@ -811,6 +811,7 @@ static int init_overlay_changeset(struct overlay_changeset *ovcs)
 		if (!fragment->target) {
 			pr_err("symbols in overlay, but not in live tree\n");
 			ret = -EINVAL;
+			of_node_put(node);
 			goto err_out;
 		}
 
drivers/pci/quirks.c +7 -2
index 8d32a3834688..ccc90656130a 100644
@@ -5995,8 +5995,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x56c1, aspm_l1_acceptable_latency
 
 #ifdef CONFIG_PCIE_DPC
 /*
- * Intel Tiger Lake and Alder Lake BIOS has a bug that clears the DPC
- * RP PIO Log Size of the integrated Thunderbolt PCIe Root Ports.
+ * Intel Ice Lake, Tiger Lake and Alder Lake BIOS has a bug that clears
+ * the DPC RP PIO Log Size of the integrated Thunderbolt PCIe Root
+ * Ports.
  */
 static void dpc_log_size(struct pci_dev *dev)
 {
@@ -6019,6 +6020,10 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x461f, dpc_log_size);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x462f, dpc_log_size);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x463f, dpc_log_size);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x466e, dpc_log_size);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x8a1d, dpc_log_size);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x8a1f, dpc_log_size);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x8a21, dpc_log_size);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x8a23, dpc_log_size);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x9a23, dpc_log_size);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x9a25, dpc_log_size);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x9a27, dpc_log_size);
drivers/platform/x86/asus-nb-wmi.c +2 -0
index e2c9a68d12df..fdf7da06af30 100644
@@ -555,6 +555,7 @@ static const struct key_entry asus_nb_wmi_keymap[] = {
 	{ KE_KEY, 0x71, { KEY_F13 } }, /* General-purpose button */
 	{ KE_IGNORE, 0x79, },  /* Charger type dectection notification */
 	{ KE_KEY, 0x7a, { KEY_ALS_TOGGLE } }, /* Ambient Light Sensor Toggle */
+	{ KE_IGNORE, 0x7B, }, /* Charger connect/disconnect notification */
 	{ KE_KEY, 0x7c, { KEY_MICMUTE } },
 	{ KE_KEY, 0x7D, { KEY_BLUETOOTH } }, /* Bluetooth Enable */
 	{ KE_KEY, 0x7E, { KEY_BLUETOOTH } }, /* Bluetooth Disable */
@@ -584,6 +585,7 @@ static const struct key_entry asus_nb_wmi_keymap[] = {
 	{ KE_KEY, 0xAE, { KEY_FN_F5 } }, /* Fn+F5 fan mode on 2020+ */
 	{ KE_KEY, 0xB3, { KEY_PROG4 } }, /* AURA */
 	{ KE_KEY, 0xB5, { KEY_CALC } },
+	{ KE_IGNORE, 0xC0, }, /* External display connect/disconnect notification */
 	{ KE_KEY, 0xC4, { KEY_KBDILLUMUP } },
 	{ KE_KEY, 0xC5, { KEY_KBDILLUMDOWN } },
 	{ KE_IGNORE, 0xC6, },  /* Ambient Light Sensor notification */
drivers/power/supply/ab8500_btemp.c +2 -4
index 307ee6f71042..6f83e99d2eb7 100644
@@ -624,10 +624,8 @@ static int ab8500_btemp_get_ext_psy_data(struct device *dev, void *data)
  */
 static void ab8500_btemp_external_power_changed(struct power_supply *psy)
 {
-	struct ab8500_btemp *di = power_supply_get_drvdata(psy);
-
-	class_for_each_device(power_supply_class, NULL,
-		di->btemp_psy, ab8500_btemp_get_ext_psy_data);
+	class_for_each_device(power_supply_class, NULL, psy,
+			      ab8500_btemp_get_ext_psy_data);
 }
 
 /* ab8500 btemp driver interrupts and their respective isr */
drivers/power/supply/ab8500_fg.c +2 -4
index c6c9804280db..71ce28eed463 100644
@@ -2407,10 +2407,8 @@ static int ab8500_fg_init_hw_registers(struct ab8500_fg *di)
  */
 static void ab8500_fg_external_power_changed(struct power_supply *psy)
 {
-	struct ab8500_fg *di = power_supply_get_drvdata(psy);
-
-	class_for_each_device(power_supply_class, NULL,
-		di->fg_psy, ab8500_fg_get_ext_psy_data);
+	class_for_each_device(power_supply_class, NULL, psy,
+			      ab8500_fg_get_ext_psy_data);
 }
 
 /**
drivers/power/supply/bq27xxx_battery.c +2 -4
index 17a09d103a59..4a5371a3a531 100644
@@ -1083,10 +1083,8 @@ static int poll_interval_param_set(const char *val, const struct kernel_param *k
 		return ret;
 
 	mutex_lock(&bq27xxx_list_lock);
-	list_for_each_entry(di, &bq27xxx_battery_devices, list) {
-		cancel_delayed_work_sync(&di->work);
-		schedule_delayed_work(&di->work, 0);
-	}
+	list_for_each_entry(di, &bq27xxx_battery_devices, list)
+		mod_delayed_work(system_wq, &di->work, 0);
 	mutex_unlock(&bq27xxx_list_lock);
 
 	return ret;
drivers/power/supply/power_supply_core.c +6 -2
index 8382be867d27..7871ab5e979c 100644
@@ -348,6 +348,10 @@ static int __power_supply_is_system_supplied(struct device *dev, void *data)
 	struct power_supply *psy = dev_get_drvdata(dev);
 	unsigned int *count = data;
 
+	if (!psy->desc->get_property(psy, POWER_SUPPLY_PROP_SCOPE, &ret))
+		if (ret.intval == POWER_SUPPLY_SCOPE_DEVICE)
+			return 0;
+
 	(*count)++;
 	if (psy->desc->type != POWER_SUPPLY_TYPE_BATTERY)
 		if (!psy->desc->get_property(psy, POWER_SUPPLY_PROP_ONLINE,
@@ -366,8 +370,8 @@ int power_supply_is_system_supplied(void)
 				      __power_supply_is_system_supplied);
 
 	/*
-	 * If no power class device was found at all, most probably we are
-	 * running on a desktop system, so assume we are on mains power.
+	 * If no system scope power class device was found at all, most probably we
+	 * are running on a desktop system, so assume we are on mains power.
 	 */
 	if (count == 0)
 		return 1;
drivers/power/supply/power_supply_sysfs.c +2 -1
index 5369abaceb5c..7abd916d005a 100644
@@ -285,7 +285,8 @@ static ssize_t power_supply_show_property(struct device *dev,
 
 		if (ret < 0) {
 			if (ret == -ENODATA)
-				dev_dbg(dev, "driver has no data for `%s' property\n",
+				dev_dbg_ratelimited(dev,
+					"driver has no data for `%s' property\n",
 					attr->attr.name);
 			else if (ret != -ENODEV && ret != -EAGAIN)
 				dev_err_ratelimited(dev,
drivers/power/supply/sc27xx_fuel_gauge.c +1 -8
index 632977f84b95..bd23c4d9fed4 100644
@@ -733,13 +733,6 @@ static int sc27xx_fgu_set_property(struct power_supply *psy,
 	return ret;
 }
 
-static void sc27xx_fgu_external_power_changed(struct power_supply *psy)
-{
-	struct sc27xx_fgu_data *data = power_supply_get_drvdata(psy);
-
-	power_supply_changed(data->battery);
-}
-
 static int sc27xx_fgu_property_is_writeable(struct power_supply *psy,
 					    enum power_supply_property psp)
 {
@@ -774,7 +767,7 @@ static const struct power_supply_desc sc27xx_fgu_desc = {
 	.num_properties		= ARRAY_SIZE(sc27xx_fgu_props),
 	.get_property		= sc27xx_fgu_get_property,
 	.set_property		= sc27xx_fgu_set_property,
-	.external_power_changed	= sc27xx_fgu_external_power_changed,
+	.external_power_changed	= power_supply_changed,
 	.property_is_writeable	= sc27xx_fgu_property_is_writeable,
 	.no_thermal		= true,
 };
drivers/regulator/core.c +2 -2
index c417eae887b2..e01cade8be0c 100644
@@ -5257,7 +5257,7 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
 	}
 
 	rdev->debugfs = debugfs_create_dir(rname, debugfs_root);
-	if (!rdev->debugfs) {
+	if (IS_ERR(rdev->debugfs)) {
 		rdev_warn(rdev, "Failed to create debugfs directory\n");
 		return;
 	}
@@ -6179,7 +6179,7 @@ static int __init regulator_init(void)
 	ret = class_register(&regulator_class);
 
 	debugfs_root = debugfs_create_dir("regulator", NULL);
-	if (!debugfs_root)
+	if (IS_ERR(debugfs_root))
 		pr_warn("regulator: Failed to create debugfs directory\n");
 
 #ifdef CONFIG_DEBUG_FS
drivers/soc/qcom/llcc-qcom.c +41 -31

122 lines not on this page · raw message

drivers/spi/spi-cadence-quadspi.c +5 -2
index 30fd4bc90580..b371e4eb41ec 100644
@@ -1697,8 +1697,11 @@ static int cqspi_probe(struct platform_device *pdev)
 			cqspi->slow_sram = true;
 
 		if (of_device_is_compatible(pdev->dev.of_node,
-					    "xlnx,versal-ospi-1.0"))
-			dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));
+					    "xlnx,versal-ospi-1.0")) {
+			ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));
+			if (ret)
+				goto probe_reset_failed;
+		}
 	}
 
 	ret = devm_request_irq(dev, irq, cqspi_irq_handler, 0,
drivers/spi/spi-fsl-dspi.c +15 -0
index a33e547b7d39..01930b52c4fb 100644
@@ -975,7 +975,9 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr,
 static int dspi_setup(struct spi_device *spi)
 {
 	struct fsl_dspi *dspi = spi_controller_get_devdata(spi->controller);
+	u32 period_ns = DIV_ROUND_UP(NSEC_PER_SEC, spi->max_speed_hz);
 	unsigned char br = 0, pbr = 0, pcssck = 0, cssck = 0;
+	u32 quarter_period_ns = DIV_ROUND_UP(period_ns, 4);
 	u32 cs_sck_delay = 0, sck_cs_delay = 0;
 	struct fsl_dspi_platform_data *pdata;
 	unsigned char pasc = 0, asc = 0;
@@ -1003,6 +1005,19 @@ static int dspi_setup(struct spi_device *spi)
 		sck_cs_delay = pdata->sck_cs_delay;
 	}
 
+	/* Since tCSC and tASC apply to continuous transfers too, avoid SCK
+	 * glitches of half a cycle by never allowing tCSC + tASC to go below
+	 * half a SCK period.
+	 */
+	if (cs_sck_delay < quarter_period_ns)
+		cs_sck_delay = quarter_period_ns;
+	if (sck_cs_delay < quarter_period_ns)
+		sck_cs_delay = quarter_period_ns;
+
+	dev_dbg(&spi->dev,
+		"DSPI controller timing params: CS-to-SCK delay %u ns, SCK-to-CS delay %u ns\n",
+		cs_sck_delay, sck_cs_delay);
+
 	clkrate = clk_get_rate(dspi->clk);
 	hz_to_spi_baud(&pbr, &br, spi->max_speed_hz, clkrate);
 
drivers/target/target_core_transport.c +2 -0
index 86adff2a86ed..687adc9e086c 100644
@@ -504,6 +504,8 @@ target_setup_session(struct se_portal_group *tpg,
 
 free_sess:
 	transport_free_session(sess);
+	return ERR_PTR(rc);
+
 free_cnt:
 	target_free_cmd_counter(cmd_cnt);
 	return ERR_PTR(rc);
drivers/thunderbolt/dma_test.c +4 -4
index 3bedecb236e0..14bb6dec6c4b 100644
@@ -192,9 +192,9 @@ static int dma_test_start_rings(struct dma_test *dt)
 	}
 
 	ret = tb_xdomain_enable_paths(dt->xd, dt->tx_hopid,
-				      dt->tx_ring ? dt->tx_ring->hop : 0,
+				      dt->tx_ring ? dt->tx_ring->hop : -1,
 				      dt->rx_hopid,
-				      dt->rx_ring ? dt->rx_ring->hop : 0);
+				      dt->rx_ring ? dt->rx_ring->hop : -1);
 	if (ret) {
 		dma_test_free_rings(dt);
 		return ret;
@@ -218,9 +218,9 @@ static void dma_test_stop_rings(struct dma_test *dt)
 		tb_ring_stop(dt->tx_ring);
 
 	ret = tb_xdomain_disable_paths(dt->xd, dt->tx_hopid,
-				       dt->tx_ring ? dt->tx_ring->hop : 0,
+				       dt->tx_ring ? dt->tx_ring->hop : -1,
 				       dt->rx_hopid,
-				       dt->rx_ring ? dt->rx_ring->hop : 0);
+				       dt->rx_ring ? dt->rx_ring->hop : -1);
 	if (ret)
 		dev_warn(&dt->svc->dev, "failed to disable DMA paths\n");
 
drivers/thunderbolt/nhi.c +8 -3
index 0a525f44ea31..4a6a3802d7e5 100644
@@ -56,9 +56,14 @@ static int ring_interrupt_index(const struct tb_ring *ring)
 
 static void nhi_mask_interrupt(struct tb_nhi *nhi, int mask, int ring)
 {
-	if (nhi->quirks & QUIRK_AUTO_CLEAR_INT)
-		return;
-	iowrite32(mask, nhi->iobase + REG_RING_INTERRUPT_MASK_CLEAR_BASE + ring);
+	if (nhi->quirks & QUIRK_AUTO_CLEAR_INT) {
+		u32 val;
+
+		val = ioread32(nhi->iobase + REG_RING_INTERRUPT_BASE + ring);
+		iowrite32(val & ~mask, nhi->iobase + REG_RING_INTERRUPT_BASE + ring);
+	} else {
+		iowrite32(mask, nhi->iobase + REG_RING_INTERRUPT_MASK_CLEAR_BASE + ring);
+	}
 }
 
 static void nhi_clear_interrupt(struct tb_nhi *nhi, int ring)
drivers/thunderbolt/tb.c +12 -5
index 3f1ab30c4fb1..e1eb092ad1d6 100644
@@ -607,6 +607,7 @@ static void tb_scan_port(struct tb_port *port)
 {
 	struct tb_cm *tcm = tb_priv(port->sw->tb);
 	struct tb_port *upstream_port;
+	bool discovery = false;
 	struct tb_switch *sw;
 	int ret;
 
@@ -674,8 +675,10 @@ static void tb_scan_port(struct tb_port *port)
 	 * tunnels and know which switches were authorized already by
 	 * the boot firmware.
 	 */
-	if (!tcm->hotplug_active)
+	if (!tcm->hotplug_active) {
 		dev_set_uevent_suppress(&sw->dev, true);
+		discovery = true;
+	}
 
 	/*
 	 * At the moment Thunderbolt 2 and beyond (devices with LC) we
@@ -705,10 +708,14 @@ static void tb_scan_port(struct tb_port *port)
 	 * CL0s and CL1 are enabled and supported together.
 	 * Silently ignore CLx enabling in case CLx is not supported.
 	 */
-	ret = tb_switch_enable_clx(sw, TB_CL1);
-	if (ret && ret != -EOPNOTSUPP)
-		tb_sw_warn(sw, "failed to enable %s on upstream port\n",
-			   tb_switch_clx_name(TB_CL1));
+	if (discovery) {
+		tb_sw_dbg(sw, "discovery, not touching CL states\n");
+	} else {
+		ret = tb_switch_enable_clx(sw, TB_CL1);
+		if (ret && ret != -EOPNOTSUPP)
+			tb_sw_warn(sw, "failed to enable %s on upstream port\n",
+				   tb_switch_clx_name(TB_CL1));
+	}
 
 	if (tb_switch_is_clx_enabled(sw, TB_CL1))
 		/*
drivers/tty/serial/lantiq.c +1 -0
index c892f3c7d1ab..112a2f5f6ac3 100644
@@ -278,6 +278,7 @@ lqasc_err_int(int irq, void *_port)
 	struct ltq_uart_port *ltq_port = to_ltq_uart_port(port);
 
 	spin_lock_irqsave(&ltq_port->lock, flags);
+	__raw_writel(ASC_IRNCR_EIR, port->membase + LTQ_ASC_IRNCR);
 	/* clear any pending interrupts */
 	asc_update_bits(0, ASCWHBSTATE_CLRPE | ASCWHBSTATE_CLRFE |
 		ASCWHBSTATE_CLRROE, port->membase + LTQ_ASC_WHBSTATE);
drivers/usb/dwc3/core.c +5 -0
index 9f8c988c25cb..e999e6079ae0 100644
@@ -1982,6 +1982,11 @@ static int dwc3_remove(struct platform_device *pdev)
 	pm_runtime_allow(&pdev->dev);
 	pm_runtime_disable(&pdev->dev);
 	pm_runtime_put_noidle(&pdev->dev);
+	/*
+	 * HACK: Clear the driver data, which is currently accessed by parent
+	 * glue drivers, before allowing the parent to suspend.
+	 */
+	platform_set_drvdata(pdev, NULL);
 	pm_runtime_set_suspended(&pdev->dev);
 
 	dwc3_free_event_buffers(dwc);
drivers/usb/dwc3/dwc3-qcom.c +10 -1
index 959fc925ca7c..79b22abf9727 100644
@@ -308,7 +308,16 @@ static void dwc3_qcom_interconnect_exit(struct dwc3_qcom *qcom)
 /* Only usable in contexts where the role can not change. */
 static bool dwc3_qcom_is_host(struct dwc3_qcom *qcom)
 {
-	struct dwc3 *dwc = platform_get_drvdata(qcom->dwc3);
+	struct dwc3 *dwc;
+
+	/*
+	 * FIXME: Fix this layering violation.
+	 */
+	dwc = platform_get_drvdata(qcom->dwc3);
+
+	/* Core driver may not have probed yet. */
+	if (!dwc)
+		return false;
 
 	return dwc->xhci;
 }
drivers/usb/dwc3/gadget.c +1 -0
index 8cd0d919ef63..7e94d31687e9 100644
@@ -180,6 +180,7 @@ static void dwc3_gadget_del_and_unmap_request(struct dwc3_ep *dep,
 	list_del(&req->list);
 	req->remaining = 0;
 	req->needs_extra_trb = false;
+	req->num_trbs = 0;
 
 	if (req->request.status == -EINPROGRESS)
 		req->request.status = status;
drivers/usb/gadget/udc/core.c +131 -49

349 lines not on this page · raw message

drivers/usb/serial/option.c +16 -0
index f05aea57e2d8..e12fec4c2e2f 100644
@@ -248,6 +248,8 @@ static void option_instat_callback(struct urb *urb);
 #define QUECTEL_VENDOR_ID			0x2c7c
 /* These Quectel products use Quectel's vendor ID */
 #define QUECTEL_PRODUCT_EC21			0x0121
+#define QUECTEL_PRODUCT_EM061K_LTA		0x0123
+#define QUECTEL_PRODUCT_EM061K_LMS		0x0124
 #define QUECTEL_PRODUCT_EC25			0x0125
 #define QUECTEL_PRODUCT_EG91			0x0191
 #define QUECTEL_PRODUCT_EG95			0x0195
@@ -266,6 +268,8 @@ static void option_instat_callback(struct urb *urb);
 #define QUECTEL_PRODUCT_RM520N			0x0801
 #define QUECTEL_PRODUCT_EC200U			0x0901
 #define QUECTEL_PRODUCT_EC200S_CN		0x6002
+#define QUECTEL_PRODUCT_EM061K_LWW		0x6008
+#define QUECTEL_PRODUCT_EM061K_LCN		0x6009
 #define QUECTEL_PRODUCT_EC200T			0x6026
 #define QUECTEL_PRODUCT_RM500K			0x7001
 
@@ -1189,6 +1193,18 @@ static const struct usb_device_id option_ids[] = {
 	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0x00, 0x40) },
 	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x30) },
 	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x40) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0xff, 0x30) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0x00, 0x40) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0xff, 0x40) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0xff, 0x30) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0x00, 0x40) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0xff, 0x40) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0xff, 0x30) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0x00, 0x40) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0xff, 0x40) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0x30) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0x00, 0x40) },
+	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0x40) },
 	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff),
 	  .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
 	{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) },
drivers/usb/typec/pd.c +1 -1
index b5ab26422c34..fd2477161e45 100644
@@ -89,7 +89,7 @@ peak_current_show(struct device *dev, struct device_attribute *attr, char *buf)
 static ssize_t
 fast_role_swap_current_show(struct device *dev, struct device_attribute *attr, char *buf)
 {
-	return sysfs_emit(buf, "%u\n", to_pdo(dev)->pdo >> PDO_FIXED_FRS_CURR_SHIFT) & 3;
+	return sysfs_emit(buf, "%u\n", (to_pdo(dev)->pdo >> PDO_FIXED_FRS_CURR_SHIFT) & 3);
 }
 static DEVICE_ATTR_RO(fast_role_swap_current);
 
drivers/usb/typec/ucsi/ucsi.c +7 -4
index 086b50968983..47a2c73df342 100644
@@ -132,10 +132,8 @@ static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd)
 	if (ret)
 		return ret;
 
-	if (cci & UCSI_CCI_BUSY) {
-		ucsi->ops->async_write(ucsi, UCSI_CANCEL, NULL, 0);
-		return -EBUSY;
-	}
+	if (cmd != UCSI_CANCEL && cci & UCSI_CCI_BUSY)
+		return ucsi_exec_command(ucsi, UCSI_CANCEL);
 
 	if (!(cci & UCSI_CCI_COMMAND_COMPLETE))
 		return -EIO;
@@ -149,6 +147,11 @@ static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd)
 		return ucsi_read_error(ucsi);
 	}
 
+	if (cmd == UCSI_CANCEL && cci & UCSI_CCI_CANCEL_COMPLETE) {
+		ret = ucsi_acknowledge_command(ucsi);
+		return ret ? ret : -EBUSY;
+	}
+
 	return UCSI_CCI_LENGTH(cci);
 }
 
fs/afs/vl_probe.c +2 -2
index d1c7068b4346..58452b86e672 100644
@@ -115,8 +115,8 @@ void afs_vlserver_probe_result(struct afs_call *call)
 		}
 	}
 
-	if (rxrpc_kernel_get_srtt(call->net->socket, call->rxcall, &rtt_us) &&
-	    rtt_us < server->probe.rtt) {
+	rxrpc_kernel_get_srtt(call->net->socket, call->rxcall, &rtt_us);
+	if (rtt_us < server->probe.rtt) {
 		server->probe.rtt = rtt_us;
 		server->rtt = rtt_us;
 		alist->preferred = index;
fs/btrfs/block-group.c +12 -2
index f33ddd5922b8..74a5c94898b0 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/disk-io.c +8 -2
index ca69a46f1006..f22e00dfec6c 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/file-item.c +3 -1
index 4fab7da63259..b14d2da9b26d 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/inode.c +13 -7
index 56e9efbffd58..c5583fc2a585 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/scrub.c +8 -1
index c5d8dc112fd5..1672d4846baa 100644

Lines of this file are not shown. View the raw message.

fs/cifs/file.c +6 -2
index 9a4c33ffb75f..87dcffece762 100644

Lines of this file are not shown. View the raw message.

fs/eventpoll.c +5 -1
index 64659b110973..eccecd3fac90 100644

Lines of this file are not shown. View the raw message.

fs/ext4/balloc.c +9 -11
index a38aa33af08e..8e83b51e3c68 100644

Lines of this file are not shown. View the raw message.

fs/ksmbd/connection.c +3 -2
index bf8531b80a18..e1d2be19cddf 100644

Lines of this file are not shown. View the raw message.

fs/ksmbd/smb_common.c +13 -1
index 95afb6b23a91..05d7f3e910bf 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/btnode.c +10 -2
index e74fda212620..ee2cde07264b 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/sufile.c +9 -0
index dc359b56fdfa..2c6078a6b8ec 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/the_nilfs.c +42 -1

43 lines not on this page · raw message

fs/ocfs2/file.c +7 -1
index 4d78e0979517..cae410568bb2 100644

Lines of this file are not shown. View the raw message.

fs/ocfs2/super.c +4 -2
index 0b0e6a132101..988d1c076861 100644

Lines of this file are not shown. View the raw message.

include/linux/mlx5/driver.h +12 -0
index fff61e6d6d4d..3660ce6a9349 100644

Lines of this file are not shown. View the raw message.

include/linux/soc/qcom/llcc-qcom.h +2 -10
index bc2fb8343a94..af093281e335 100644

Lines of this file are not shown. View the raw message.

include/net/neighbour.h +0 -2
index 94a1599824d8..794e45981891 100644

Lines of this file are not shown. View the raw message.

include/net/netfilter/nf_tables.h +3 -1
index a1ccf1276f3e..22e96b7e1b44 100644

Lines of this file are not shown. View the raw message.

include/net/sch_generic.h +8 -0
index 989eb972fcae..b3e312840296 100644

Lines of this file are not shown. View the raw message.

include/rdma/ib_addr.h +0 -23
index d808dc3d239e..811a0f11d0db 100644

Lines of this file are not shown. View the raw message.

include/sound/soc-acpi.h +1 -0
index b38fd25c5729..528279056b3a 100644

Lines of this file are not shown. View the raw message.

include/sound/soc-dpcm.h +4 -0
index 5b689c663290..27a5642f07cd 100644

Lines of this file are not shown. View the raw message.

include/uapi/linux/ethtool_netlink.h +1 -1
index bb57084ac524..69f5bec347c2 100644

Lines of this file are not shown. View the raw message.

include/uapi/linux/rtnetlink.h +2 -0
index eb2747d58a81..51c13cf9c5ae 100644

Lines of this file are not shown. View the raw message.

io_uring/net.c +7 -1
index f6d8b02387a9..05792a689994 100644

Lines of this file are not shown. View the raw message.

io_uring/sqpoll.c +5 -1
index 559652380672..6ffa5cf1bbb8 100644

Lines of this file are not shown. View the raw message.

kernel/bpf/cgroup.c +19 -19
index 819f011f0a9c..b86b907e566c 100644

Lines of this file are not shown. View the raw message.

kernel/bpf/cgroup_iter.c +2 -2
index c187a9e62bdb..d57ccb02477f 100644

Lines of this file are not shown. View the raw message.

kernel/bpf/local_storage.c +2 -2
index 098cf336fae6..f01ca6f1ee03 100644

Lines of this file are not shown. View the raw message.

kernel/cgroup/cgroup-v1.c +10 -10
index 52bb5a74a23b..5407241dbb45 100644

Lines of this file are not shown. View the raw message.

kernel/cgroup/cgroup.c +38 -39

77 lines not on this page · raw message

kernel/kexec_file.c +13 -1
index 45637511e0de..6d787ae9deca 100644

Lines of this file are not shown. View the raw message.

kernel/rcu/tree.c +19 -8
index ce34ca0b5b98..d03122f90cc4 100644

Lines of this file are not shown. View the raw message.

lib/test_firmware.c +37 -18

55 lines not on this page · raw message

mm/zswap.c +9 -2
index 708b82dbe8a4..b3829ada4a41 100644

Lines of this file are not shown. View the raw message.

net/core/neighbour.c +0 -31
index bf081f62ae58..6c0f2149f2c7 100644

Lines of this file are not shown. View the raw message.

net/ipv6/ping.c +2 -1
index 808983bc2ec9..4651aaf70db4 100644

Lines of this file are not shown. View the raw message.

net/mac80211/cfg.c +8 -1
index 06b9df2fbcd7..23a44edcb11f 100644

Lines of this file are not shown. View the raw message.

net/mac80211/link.c +2 -2
index a1b3031fefce..a85b44c1bc99 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_tables_api.c +58 -1

59 lines not on this page · raw message

net/netfilter/nfnetlink.c +2 -1
index ae7146475d17..c9fbe0f707b5 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nft_set_pipapo.c +40 -15

55 lines not on this page · raw message

net/sched/act_api.c +10 -5
index 9b31a10cc639..b33f88e50aa9 100644

Lines of this file are not shown. View the raw message.

net/sched/act_pedit.c +98 -78

176 lines not on this page · raw message

net/sched/cls_api.c +46 -28

74 lines not on this page · raw message

net/sched/cls_u32.c +10 -8
index 34d25f7a0687..a3477537c102 100644

Lines of this file are not shown. View the raw message.

net/sched/sch_api.c +64 -33

97 lines not on this page · raw message

net/sched/sch_generic.c +11 -3
index ee43e8ac039e..a5693e25b248 100644

Lines of this file are not shown. View the raw message.

net/sctp/sm_statefuns.c +1 -1
index f6ee7f4040c1..5383b6a9da61 100644

Lines of this file are not shown. View the raw message.

net/tipc/bearer.c +2 -2
index 53881406e200..cdcd2731860b 100644

Lines of this file are not shown. View the raw message.

net/wireless/rdev-ops.h +3 -3
index 13b209a8db28..ee853a14a02d 100644

Lines of this file are not shown. View the raw message.

net/wireless/reg.c +2 -5
index 4f3f31244e8b..522180919a1a 100644

Lines of this file are not shown. View the raw message.

scripts/Kconfig.include +1 -1
index 274125307ebd..5a84b6443875 100644

Lines of this file are not shown. View the raw message.

scripts/Makefile.compiler +4 -4
index 20d353dcabfb..158c57f2acfd 100644

Lines of this file are not shown. View the raw message.

scripts/as-version.sh +1 -1
index 1a21495e9ff0..af717476152d 100755

Lines of this file are not shown. View the raw message.

sound/pci/hda/patch_realtek.c +1 -0
index 48a0e87136f1..920e44ba998a 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/cs35l41-lib.c +3 -3
index 04be71435491..c2c56e560809 100644

Lines of this file are not shown. View the raw message.

sound/soc/dwc/dwc-i2s.c +9 -32

41 lines not on this page · raw message

sound/soc/intel/avs/board_selection.c +1 -1
index 87f9c18be238..87353b4b0cd7 100644

Lines of this file are not shown. View the raw message.

sound/soc/intel/avs/pcm.c +18 -5
index 8fe5917b1e26..22f21f3f612d 100644

Lines of this file are not shown. View the raw message.

sound/soc/soc-pcm.c +20 -0
index 7a486ca9633c..f3964060a044 100644

Lines of this file are not shown. View the raw message.

sound/usb/pcm.c +4 -0
index 1e1d7458bce1..f2c798c4506b 100644

Lines of this file are not shown. View the raw message.

sound/usb/quirks.c +2 -0
index 3ecd1ba7fd4b..6cf55b7f7a04 100644

Lines of this file are not shown. View the raw message.

tools/gpio/lsgpio.c +1 -1
index c61d061247e1..52a0be45410c 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/gpio/gpio-sim.sh +3 -0
index 341e3de00896..bf67b23ed29a 100755

Lines of this file are not shown. View the raw message.

tools/testing/selftests/net/forwarding/hw_stats_l3.sh +7 -4
index 9c1f76e108af..1a936ffbacee 100755

Lines of this file are not shown. View the raw message.

tools/testing/selftests/ptp/testptp.c +3 -3
index 198ad5f32187..cfa9562f3cd8 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/tc-testing/config +1 -0
index 4638c63a339f..aec4de8bea78 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/tc-testing/tc-tests/qdiscs/sfb.json +2 -2
index ba2f5e79cdbf..e21c7f22c6d4 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/tc-testing/tdc.sh +1 -0
index afb0cd86fa3d..eb357bd7923c 100755

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.