Skip to contentSkip to conversation

Linux 6.0.19

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Jan 12, 2023 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 6.0.19 kernel.

Note, this is the LAST 6.0.y kernel release. All users must move to the 6.1.y branch at this point in time, as this branch is now end-of-life.

The updated 6.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.0.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/include/asm/thread_info.h                             |   13 
 arch/mips/ralink/of.c                                          |    2 
 arch/riscv/include/asm/uaccess.h                               |    2 
 arch/riscv/kernel/probes/simulate-insn.h                       |    4 
 arch/x86/kernel/cpu/bugs.c                                     |    2 
 arch/x86/kernel/crash.c                                        |    4 
 block/blk-merge.c                                              |   10 
 drivers/block/ublk_drv.c                                       |    3 
 drivers/block/virtio_blk.c                                     |   33 
 drivers/crypto/virtio/virtio_crypto_skcipher_algs.c            |    3 
 drivers/firmware/efi/efi.c                                     |    4 
 drivers/firmware/efi/libstub/efistub.h                         |    2 
 drivers/firmware/efi/libstub/random.c                          |   42 
 drivers/gpio/gpio-sifive.c                                     |    1 
 drivers/gpu/drm/amd/amdgpu/amdgpu.h                            |    1 
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h                     |    4 
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c               |   39 
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c                        |   27 
 drivers/gpu/drm/amd/amdgpu/amdgpu_object.c                     |   19 
 drivers/gpu/drm/amd/amdkfd/kfd_process.c                       |   24 
 drivers/gpu/drm/amd/amdkfd/kfd_topology.c                      |    2 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c              |   12 
 drivers/gpu/drm/i915/gvt/debugfs.c                             |   17 
 drivers/gpu/drm/i915/gvt/gtt.c                                 |   17 
 drivers/gpu/drm/i915/gvt/scheduler.c                           |    1 
 drivers/gpu/drm/imx/ipuv3-plane.c                              |   14 
 drivers/gpu/drm/meson/meson_viu.c                              |    5 
 drivers/gpu/drm/mgag200/mgag200_pll.c                          |    3 
 drivers/gpu/drm/panfrost/panfrost_drv.c                        |   27 
 drivers/gpu/drm/panfrost/panfrost_gem.c                        |   16 
 drivers/gpu/drm/panfrost/panfrost_gem.h                        |    5 
 drivers/infiniband/hw/mlx5/counters.c                          |    6 
 drivers/infiniband/hw/mlx5/qp.c                                |   49 -
 drivers/net/bonding/bond_3ad.c                                 |    1 
 drivers/net/bonding/bond_main.c                                |    8 
 drivers/net/dsa/mv88e6xxx/Kconfig                              |    4 
 drivers/net/dsa/qca/qca8k-8xxx.c                               |  106 --
 drivers/net/dsa/qca/qca8k.h                                    |    5 
 drivers/net/ethernet/amazon/ena/ena_com.c                      |   29 
 drivers/net/ethernet/amazon/ena/ena_ethtool.c                  |    6 
 drivers/net/ethernet/amazon/ena/ena_netdev.c                   |   83 +
 drivers/net/ethernet/amazon/ena/ena_netdev.h                   |   17 
 drivers/net/ethernet/amd/xgbe/xgbe-drv.c                       |    3 
 drivers/net/ethernet/amd/xgbe/xgbe-i2c.c                       |    4 
 drivers/net/ethernet/amd/xgbe/xgbe-mdio.c                      |    4 
 drivers/net/ethernet/broadcom/bnxt/bnxt.c                      |   22 
 drivers/net/ethernet/broadcom/bnxt/bnxt.h                      |   15 
 drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c                  |   20 
 drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h                  |    6 
 drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h                |   11 
 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c                |   10 
 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c        |  132 +-
 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h        |    7 
 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c         |  486 ++++++----
 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c      |    3 
 drivers/net/ethernet/intel/ice/ice_xsk.c                       |    2 
 drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c       |   30 
 drivers/net/ethernet/mellanox/mlx5/core/devlink.c              |    4 
 drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c             |    7 
 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c      |    9 
 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c     |    5 
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c              |    2 
 drivers/net/ethernet/mellanox/mlx5/core/esw/acl/egress_lgcy.c  |    7 
 drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c |   33 
 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c              |   30 
 drivers/net/ethernet/mellanox/mlx5/core/eswitch.h              |    6 
 drivers/net/ethernet/mellanox/mlx5/core/health.c               |    6 
 drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c          |    4 
 drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c              |    1 
 drivers/net/ethernet/mellanox/mlx5/core/main.c                 |    4 
 drivers/net/ethernet/microchip/lan966x/lan966x_port.c          |    2 
 drivers/net/ethernet/microchip/sparx5/sparx5_main.c            |    2 
 drivers/net/ethernet/qlogic/qed/qed_debug.c                    |   28 
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c          |    8 
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h                |   10 
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c               |    8 
 drivers/net/phy/xilinx_gmii2rgmii.c                            |    1 
 drivers/net/usb/rndis_host.c                                   |    3 
 drivers/net/veth.c                                             |    5 
 drivers/net/vmxnet3/vmxnet3_drv.c                              |    8 
 drivers/net/vrf.c                                              |    6 
 drivers/net/vxlan/vxlan_core.c                                 |   19 
 drivers/net/wireless/ath/ath9k/htc.h                           |   14 
 drivers/nvme/host/core.c                                       |   32 
 drivers/nvme/host/nvme.h                                       |    2 
 drivers/nvme/target/admin-cmd.c                                |   35 
 drivers/of/fdt.c                                               |    6 
 drivers/phy/qualcomm/phy-qcom-qmp-combo.c                      |   20 
 drivers/thermal/intel/int340x_thermal/processor_thermal_rfim.c |    4 
 drivers/usb/dwc3/dwc3-xilinx.c                                 |    1 
 drivers/usb/dwc3/gadget.c                                      |    5 
 drivers/vdpa/mlx5/net/mlx5_vnet.c                              |   10 
 drivers/vdpa/vdpa_sim/vdpa_sim.c                               |    7 
 drivers/vdpa/vdpa_sim/vdpa_sim_blk.c                           |    4 
 drivers/vdpa/vdpa_sim/vdpa_sim_net.c                           |    4 
 drivers/vdpa/virtio_pci/vp_vdpa.c                              |    2 
 drivers/vhost/vdpa.c                                           |   52 -
 drivers/vhost/vhost.c                                          |    4 
 drivers/vhost/vringh.c                                         |    5 
 drivers/vhost/vsock.c                                          |    9 
 drivers/video/fbdev/matrox/matroxfb_base.c                     |    4 
 fs/btrfs/block-rsv.c                                           |    1 
 fs/btrfs/ctree.h                                               |   30 
 fs/btrfs/disk-io.c                                             |  271 +++--
 fs/btrfs/disk-io.h                                             |    9 
 fs/btrfs/extent_io.c                                           |   11 
 fs/btrfs/ioctl.c                                               |    9 
 fs/btrfs/rcu-string.h                                          |    6 
 fs/btrfs/super.c                                               |   95 +
 fs/btrfs/sysfs.c                                               |    2 
 fs/btrfs/transaction.c                                         |    8 
 fs/btrfs/tree-defrag.c                                         |    6 
 fs/btrfs/volumes.c                                             |    2 
 fs/ceph/caps.c                                                 |    2 
 fs/ceph/locks.c                                                |    4 
 fs/ceph/super.h                                                |    1 
 fs/cifs/sess.c                                                 |    3 
 fs/cifs/smb2ops.c                                              |    3 
 fs/ext4/super.c                                                |   19 
 fs/hfs/inode.c                                                 |   15 
 fs/ksmbd/auth.c                                                |    3 
 fs/ksmbd/connection.c                                          |    7 
 fs/ksmbd/smb2pdu.c                                             |    7 
 fs/ksmbd/transport_tcp.c                                       |    5 
 fs/locks.c                                                     |   23 
 fs/nfsd/nfs4xdr.c                                              |   11 
 fs/nfsd/nfssvc.c                                               |    2 
 fs/ntfs3/file.c                                                |    4 
 fs/udf/inode.c                                                 |    2 
 include/linux/dsa/tag_qca.h                                    |    4 
 include/linux/efi.h                                            |    2 
 include/linux/fs.h                                             |    6 
 include/linux/mlx5/device.h                                    |    5 
 include/linux/mlx5/mlx5_ifc.h                                  |    3 
 include/linux/netfilter/ipset/ip_set.h                         |    2 
 include/linux/sunrpc/rpc_pipe_fs.h                             |    5 
 include/net/netfilter/nf_tables.h                              |   25 
 include/uapi/linux/btrfs.h                                     |    6 
 io_uring/io_uring.c                                            |   11 
 kernel/bpf/trampoline.c                                        |    4 
 net/9p/client.c                                                |   15 
 net/9p/trans_fd.c                                              |   12 
 net/9p/trans_rdma.c                                            |    4 
 net/9p/trans_virtio.c                                          |    9 
 net/9p/trans_xen.c                                             |    4 
 net/caif/cfctrl.c                                              |    6 
 net/core/filter.c                                              |    7 
 net/ipv4/inet_connection_sock.c                                |   14 
 net/ipv4/tcp_ulp.c                                             |    4 
 net/mptcp/protocol.c                                           |    2 
 net/mptcp/protocol.h                                           |    2 
 net/mptcp/subflow.c                                            |   19 
 net/netfilter/ipset/ip_set_core.c                              |    7 
 net/netfilter/ipset/ip_set_hash_ip.c                           |   14 
 net/netfilter/ipset/ip_set_hash_ipmark.c                       |   13 
 net/netfilter/ipset/ip_set_hash_ipport.c                       |   13 
 net/netfilter/ipset/ip_set_hash_ipportip.c                     |   13 
 net/netfilter/ipset/ip_set_hash_ipportnet.c                    |   13 
 net/netfilter/ipset/ip_set_hash_net.c                          |   17 
 net/netfilter/ipset/ip_set_hash_netiface.c                     |   15 
 net/netfilter/ipset/ip_set_hash_netnet.c                       |   23 
 net/netfilter/ipset/ip_set_hash_netport.c                      |   19 
 net/netfilter/ipset/ip_set_hash_netportnet.c                   |   40 
 net/netfilter/nf_tables_api.c                                  |  261 +++--
 net/nfc/netlink.c                                              |   52 -
 net/sched/cls_tcindex.c                                        |   12 
 net/sched/sch_atm.c                                            |    5 
 net/sched/sch_cbq.c                                            |    4 
 net/sunrpc/auth_gss/auth_gss.c                                 |   19 
 sound/soc/intel/boards/bytcr_rt5640.c                          |   15 
 sound/soc/sof/core.c                                           |    9 
 sound/soc/sof/intel/hda-dsp.c                                  |   72 +
 sound/soc/sof/intel/hda.h                                      |    1 
 sound/soc/sof/intel/tgl.c                                      |    2 
 sound/soc/sof/mediatek/mtk-adsp-common.c                       |    2 
 tools/perf/builtin-lock.c                                      |    2 
 tools/perf/util/bpf_counter_cgroup.c                           |   14 
 tools/perf/util/cgroup.c                                       |   23 
 tools/perf/util/data.c                                         |    2 
 tools/perf/util/dwarf-aux.c                                    |   23 
 tools/testing/selftests/net/arp_ndisc_evict_nocarrier.sh       |   15 
 182 files changed, 2178 insertions(+), 1141 deletions(-)

Adham Faris (1):
net/mlx5e: Fix hw mtu initializing at XDP SQ allocation

Andreas Rammhold (1):
of/fdt: run soc memory setup when early_init_dt_scan_memory fails

Antoine Tenart (1):
net: vrf: determine the dst using the original ifindex for multicast

Ard Biesheuvel (1):
efi: random: combine bootloader provided RNG seed with RNG protocol output

Arnd Bergmann (2):
wifi: ath9k: use proper statements in conditionals
usb: dwc3: xilinx: include linux/gpio/consumer.h

Baokun Li (1):
ext4: correct inconsistent error msg in nojournal mode

Ben Dooks (1):
riscv: uaccess: fix type of 0 variable on error in get_user()

Björn Töpel (1):
riscv, kprobes: Stricter c.jr/c.jalr decoding

Caleb Sander (1):
qed: allow sleep in qed_mcp_trace_dump()

Carlo Caione (1):
drm/meson: Reduce the FIFO lines held when AFBC is not used

Chris Mi (2):
net/mlx5e: CT: Fix ct debugfs folder name net/mlx5e: Always clear dest encap in neigh-update-del

Christian Marangi (3):
Revert "net: dsa: qca8k: cache lo and hi for mdio write"
net: dsa: qca8k: fix wrong length value for mgmt eth packet
net: dsa: tag_qca: fix wrong MGMT_DATA2 size

Christoph Hellwig (2):
nvmet: use NVME_CMD_EFFECTS_CSUPP instead of open coding it
nvme: also return I/O command effects from nvme_command_effects

Chuang Wang (1):

      bpf: Fix panic due to wrong pageattr of im->image

Cindy Lu (1):
vhost_vdpa: fix the crash in unmap a large memory

Dan Carpenter (1):
drm/i915: unpin on error in intel_vgpu_shadow_mm_pin()

Daniil Tatianin (2):
qlcnic: prevent ->dcb use-after-free on qlcnic_dcb_enable() failure drivers/net/bonding/bond_3ad: return when there's no aggregator

David Arinzon (7):
net: ena: Fix toeplitz initial hash value
net: ena: Don't register memory info on XDP exchange
net: ena: Account for the number of processed bytes in XDP
net: ena: Use bitmask to indicate packet redirection
net: ena: Fix rx_copybreak value update
net: ena: Set default value for RX interrupt moderation
net: ena: Update NUMA TPH hint register upon NUMA node update

Dmitry Fomichev (1):
virtio-blk: use a helper to handle request queuing errors

Dominique Martinet (1):

      9p/client: fix data race on req->status

Dragos Tatulea (1):
net/mlx5e: IPoIB, Don't allow CQE compression to be turned on by default

Eli Cohen (3):
vdpa/mlx5: Fix rule forwarding VLAN to TIR vdpa/mlx5: Fix wrong mac address deletion net/mlx5: Lag, fix failure to cancel delayed bond work

Eric Dumazet (1):
bonding: fix lockdep splat in bond_miimon_commit()

Geetha sowjanya (1):
octeontx2-pf: Fix lmtst ID used in aura free

Greg Kroah-Hartman (1):

      Linux 6.0.19

Hans de Goede (1):
ASoC: Intel: bytcr_rt5640: Add quirk for the Advantech MICA-071 tablet

Hao Lan (1):
net: hns3: refactor function hclge_mbx_handler()

Hawkins Jiawei (1):
net: sched: fix memory leak in tcindex_set_parms

Horatiu Vultur (2):
net: lan966x: Fix configuration of the PCS
net: sparx5: Fix reading of the MAC address

Ido Schimmel (1):
vxlan: Fix memory leaks in error path

Jakub Kicinski (1):
bpf: pull before calling skb_postpull_rcsum()

Jamal Hadi Salim (2):
net: sched: atm: dont intepret cls results when asked to drop
net: sched: cbq: dont intepret cls results when asked to drop

Jan Kara (1):
udf: Fix extension of the last extent in the file

Jason Wang (1):
vdpasim: fix memory leak when freeing IOTLBs

Jason Yan (1):
ext4: goto right label 'failed_mount3a'

Jeff Layton (3):
nfsd: shut down the NFSv4 state objects before the filecache
filelock: new helper: vfs_inode_has_locks
nfsd: fix handling of readdir in v4root vs. mount upcall timeout

Jens Axboe (3):
ARM: renumber bits related to _TIF_WORK_MASK
io_uring: check for valid register opcode earlier
block: don't allow splitting of a REQ_NOWAIT bio

Jian Shen (3):
net: hns3: fix miss L3E checking for rx packet
net: hns3: fix VF promisc mode not update when mac table full
net: hns3: refine the handling for VF heartbeat

Jie Wang (1):
net: hns3: add interrupts re-initialization while doing VF FLR

Jiguang Xiao (1):
net: amd-xgbe: add missed tasklet_kill

Jiri Pirko (1):
net/mlx5: Add forgotten cleanup calls into mlx5_init_once() error path

Jocelyn Falempe (1):

      drm/mgag200: Fix PLL setup for G200_SE_A rev >=4

Johan Hovold (1):
phy: qcom-qmp-combo: fix broken power on

Johnny S. Lee (1):
net: dsa: mv88e6xxx: depend on PTP conditionally

Jozsef Kadlecsik (2):
netfilter: ipset: fix hash:net,port,net hang with /0 subnet
netfilter: ipset: Rework long task execution when adding/deleting entries

Kai Vehmanen (2):
ASoC: SOF: Revert: "core: unregister clients and machine drivers in .shutdown"
ASoC: SOF: Intel: pci-tgl: unblock S5 entry if DMA stop has failed"

Linus Torvalds (1):
hfs/hfsplus: avoid WARN_ON() for sanity check, use proper error handling

Luben Tuikov (1):
drm/amdgpu: Fix size validation for non-exclusive domains (v4)

Maciej Fijalkowski (1):

      ice: xsk: do not use xdp_return_frame() on tx_buf->raw_buf

Maor Dickman (1):
net/mlx5e: Set geneve_tlv_option_0_exist when matching on geneve option

Maor Gottlieb (1):
RDMA/mlx5: Fix validation of max_rd_atomic caps for DC

Marios Makassikis (1):
ksmbd: send proper error response in smb2_tree_connect()

Masami Hiramatsu (Google) (2):
perf probe: Use dwarf_attr_integrate as generic DWARF attr accessor perf probe: Fix to get the DW_AT_decl_file and DW_AT_call_file as unsinged data

Miaoqian Lin (4):
nfc: Fix potential resource leaks
net: phy: xgmiitorgmii: Fix refcount leak in xgmiitorgmii_probe
gpio: sifive: Fix refcount leak in sifive_gpio_probe perf tools: Fix resources leak in perf_data__open_dir()

Michael Chan (4):
bnxt_en: Simplify bnxt_xdp_buff_init()
bnxt_en: Fix XDP RX path
bnxt_en: Fix first buffer size calculations for XDP multi-buffer
bnxt_en: Fix HDS and jumbo thresholds for RX packets

Michel Dänzer (1):
Revert "drm/amd/display: Enable Freesync Video Mode by default"

Ming Lei (1):
ublk: honor IO_URING_F_NONBLOCK for handling control command

Moshe Shemesh (1):
net/mlx5: E-Switch, properly handle ingress tagged packets on VST

Mukul Joshi (1):
drm/amdkfd: Fix kernel warning during topology setup

Namhyung Kim (2):
perf stat: Fix handling of unsupported cgroup events when using BPF counters perf stat: Fix handling of --for-each-cgroup with --bpf-counters to match non BPF mode

Namjae Jeon (1):
ksmbd: fix infinite loop in ksmbd_conn_handler_loop()

Pablo Neira Ayuso (4):
netfilter: nf_tables: consolidate set description
netfilter: nf_tables: add function to create set stateful expressions
netfilter: nf_tables: perform type checking for existing sets
netfilter: nf_tables: honor set timeout and garbage collection updates

Paolo Abeni (2):
mptcp: fix lockdep false positive
net/ulp: prevent ULP without clone op from entering the LISTEN status

Paul Menzel (1):
fbdev: matroxfb: G200eW: Increase max memory from 1 MB to 16 MB

Pavel Begunkov (1):
io_uring: fix CQ waiting timeout handling

Philip Yang (2):
drm/amdkfd: Fix kfd_process_device_init_vm error handling drm/amdkfd: Fix double release compute pasid

Philipp Zabel (1):
drm/imx: ipuv3-plane: Fix overlay plane width

Po-Hsu Lin (2):
selftests: net: fix cleanup_v6() for arp_ndisc_evict_nocarrier
selftests: net: return non-zero for failures reported in arp_ndisc_evict_nocarrier

Qu Wenruo (7):
btrfs: check superblock to ensure the fs was not modified at thaw time
btrfs: don't save block group root into super block
btrfs: separate BLOCK_GROUP_TREE compat RO flag from EXTENT_TREE_V2
btrfs: relax block-group-tree feature dependency checks
btrfs: fix compat_ro checks against remount
btrfs: handle case when repair happens with dev-replace
btrfs: make thaw time super block check to also verify checksum

Rafael Mendonca (1):
virtio_blk: Fix signedness bug in virtblk_prep_rq()

Rodrigo Branco (1):
x86/bugs: Flush IBP in ib_prctl_set()

Ronak Doshi (1):
vmxnet3: correctly report csum_level for encapsulated packet

Rong Wang (1):
vdpa/vp_vdpa: fix kfree a wrong pointer in vp_vdpa_remove

Sasha Levin (2):
btrfs: replace strncpy() with strscpy()
btrfs: fix an error handling path in btrfs_defrag_leaves()

Shawn Bohrer (1):
veth: Fix race with AF_XDP exposing old or uninitialized descriptors

Shay Drory (4):
net/mlx5: Fix io_eq_size and event_eq_size params validation net/mlx5: Avoid recovery in probe flows
net/mlx5: Fix RoCE setting at HCA level RDMA/mlx5: Fix mlx5_ib_get_hw_stats when used for device

Shyam Prasad N (2):
cifs: fix interface count calculation during refresh
cifs: refcount only the selected iface during interface update

Srinivas Pandruvada (1):

      thermal: int340x: Add missing attribute for data rate base

Stefano Garzarella (4):
vringh: fix range used in iotlb_translate()
vhost: fix range used in translate_desc()
vhost-vdpa: fix an iotlb memory leak
vdpa_sim: fix vringh initialization in vdpasim_queue_ready()

Steven Price (1):
drm/panfrost: Fix GEM handle creation ref-counting

Szymon Heidrich (1):
usb: rndis_host: Secure rndis_query check against int overflow

Takashi Iwai (1):
x86/kexec: Fix double-free of elf header buffer

Tetsuo Handa (1):
fs/ntfs3: don't hold ni_lock when calling truncate_setsize()

Thinh Nguyen (1):
usb: dwc3: gadget: Ignore End Transfer delay on teardown

Thomas Richter (1):
perf lock contention: Fix core dump related to not finding the "__sched_text_end" symbol on s/390

Wei Yongjun (1):
virtio-crypto: fix memory leak in virtio_crypto_alg_skcipher_close_session()

William Liu (1):
ksmbd: check nt_len to be at least CIFS_ENCPWD_SIZE in ksmbd_decode_ntlmssp_auth_blob

Xiubo Li (1):
ceph: switch to vfs_inode_has_locks() to fix file lock bug

YC Hung (1):
ASoC: SOF: mediatek: initialize panic_info to zero

Yanjun Zhang (1):
nvme: fix multipath crash caused by flush request when blktrace is enabled

Yuan Can (1):
vhost/vsock: Fix error handling in vhost_vsock_init()

Zheng Wang (1):
drm/i915/gvt: fix double free bug in split_2MB_gtt_entry

Zhengchao Shao (1):
caif: fix memory leak in cfctrl_linkup_request()

Zhenyu Wang (2):
drm/i915/gvt: fix gvt debugfs destroy drm/i915/gvt: fix vgpu debugfs clean in remove

minoura makoto (1):
SUNRPC: ensure the matching upcall is in-flight upon downcall

ruanjinjie (1):
vdpa_sim: fix possible memory leak in vdpasim_net_init() and vdpasim_blk_init()

author maintainer
#1 lore raw
Makefile +1 -1
index 0104f69d30bb..b978809a1c7c 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 6
 PATCHLEVEL = 0
-SUBLEVEL = 18
+SUBLEVEL = 19
 EXTRAVERSION =
 NAME = Hurr durr I'ma ninja sloth
 
arch/arm/include/asm/thread_info.h +7 -6
index aecc403b2880..7f092cb55a41 100644
@@ -128,15 +128,16 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
 #define TIF_NEED_RESCHED	1	/* rescheduling necessary */
 #define TIF_NOTIFY_RESUME	2	/* callback before returning to user */
 #define TIF_UPROBE		3	/* breakpointed or singlestepping */
-#define TIF_SYSCALL_TRACE	4	/* syscall trace active */
-#define TIF_SYSCALL_AUDIT	5	/* syscall auditing active */
-#define TIF_SYSCALL_TRACEPOINT	6	/* syscall tracepoint instrumentation */
-#define TIF_SECCOMP		7	/* seccomp syscall filtering active */
-#define TIF_NOTIFY_SIGNAL	8	/* signal notifications exist */
+#define TIF_NOTIFY_SIGNAL	4	/* signal notifications exist */
 
 #define TIF_USING_IWMMXT	17
 #define TIF_MEMDIE		18	/* is terminating due to OOM killer */
-#define TIF_RESTORE_SIGMASK	20
+#define TIF_RESTORE_SIGMASK	19
+#define TIF_SYSCALL_TRACE	20	/* syscall trace active */
+#define TIF_SYSCALL_AUDIT	21	/* syscall auditing active */
+#define TIF_SYSCALL_TRACEPOINT	22	/* syscall tracepoint instrumentation */
+#define TIF_SECCOMP		23	/* seccomp syscall filtering active */
+
 
 #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
arch/mips/ralink/of.c +1 -1
index 01c132bc33d5..4d06de77d92a 100644
@@ -64,7 +64,7 @@ void __init plat_mem_setup(void)
 	dtb = get_fdt();
 	__dt_setup_arch(dtb);
 
-	if (!early_init_dt_scan_memory())
+	if (early_init_dt_scan_memory())
 		return;
 
 	if (soc_info.mem_detect)
arch/riscv/include/asm/uaccess.h +1 -1
index 855450bed9f5..ec0cab9fbddd 100644
@@ -165,7 +165,7 @@ do {								\
 	might_fault();						\
 	access_ok(__p, sizeof(*__p)) ?		\
 		__get_user((x), __p) :				\
-		((x) = 0, -EFAULT);				\
+		((x) = (__force __typeof__(x))0, -EFAULT);	\
 })
 
 #define __put_user_asm(insn, x, ptr, err)			\
arch/riscv/kernel/probes/simulate-insn.h +2 -2
index cb6ff7dccb92..de8474146a9b 100644
@@ -31,9 +31,9 @@ __RISCV_INSN_FUNCS(fence,	0x7f, 0x0f);
 	} while (0)
 
 __RISCV_INSN_FUNCS(c_j,		0xe003, 0xa001);
-__RISCV_INSN_FUNCS(c_jr,	0xf007, 0x8002);
+__RISCV_INSN_FUNCS(c_jr,	0xf07f, 0x8002);
 __RISCV_INSN_FUNCS(c_jal,	0xe003, 0x2001);
-__RISCV_INSN_FUNCS(c_jalr,	0xf007, 0x9002);
+__RISCV_INSN_FUNCS(c_jalr,	0xf07f, 0x9002);
 __RISCV_INSN_FUNCS(c_beqz,	0xe003, 0xc001);
 __RISCV_INSN_FUNCS(c_bnez,	0xe003, 0xe001);
 __RISCV_INSN_FUNCS(c_ebreak,	0xffff, 0x9002);
arch/x86/kernel/cpu/bugs.c +2 -0
index 06ad95ae78ce..2d6915fe7385 100644
@@ -1951,6 +1951,8 @@ static int ib_prctl_set(struct task_struct *task, unsigned long ctrl)
 		if (ctrl == PR_SPEC_FORCE_DISABLE)
 			task_set_spec_ib_force_disable(task);
 		task_update_spec_tif(task);
+		if (task == current)
+			indirect_branch_prediction_barrier();
 		break;
 	default:
 		return -ERANGE;
arch/x86/kernel/crash.c +1 -3
index 9730c88530fc..305514431f26 100644
@@ -401,10 +401,8 @@ int crash_load_segments(struct kimage *image)
 	kbuf.buf_align = ELF_CORE_HEADER_ALIGN;
 	kbuf.mem = KEXEC_BUF_MEM_UNKNOWN;
 	ret = kexec_add_buffer(&kbuf);
-	if (ret) {
-		vfree((void *)image->elf_headers);
+	if (ret)
 		return ret;
-	}
 	image->elf_load_addr = kbuf.mem;
 	pr_debug("Loaded ELF headers at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
 		 image->elf_load_addr, kbuf.bufsz, kbuf.memsz);
block/blk-merge.c +10 -0
index ff04e9290715..f46c87ef951d 100644
@@ -300,6 +300,16 @@ static struct bio *bio_split_rw(struct bio *bio, struct queue_limits *lim,
 	*segs = nsegs;
 	return NULL;
 split:
+	/*
+	 * We can't sanely support splitting for a REQ_NOWAIT bio. End it
+	 * with EAGAIN if splitting is required and return an error pointer.
+	 */
+	if (bio->bi_opf & REQ_NOWAIT) {
+		bio->bi_status = BLK_STS_AGAIN;
+		bio_endio(bio);
+		return ERR_PTR(-EAGAIN);
+	}
+
 	*segs = nsegs;
 
 	/*
drivers/block/ublk_drv.c +3 -0
index 31a8715d3a4d..ebb5c846d826 100644
@@ -1718,6 +1718,9 @@ static int ublk_ctrl_uring_cmd(struct io_uring_cmd *cmd,
 	struct ublksrv_ctrl_cmd *header = (struct ublksrv_ctrl_cmd *)cmd->cmd;
 	int ret = -EINVAL;
 
+	if (issue_flags & IO_URING_F_NONBLOCK)
+		return -EAGAIN;
+
 	ublk_ctrl_cmd_dump(cmd);
 
 	if (!(issue_flags & IO_URING_F_SQE128))
drivers/block/virtio_blk.c +19 -14
index dd9a05174726..53931fcef0d5 100644
@@ -311,22 +311,35 @@ static void virtio_commit_rqs(struct blk_mq_hw_ctx *hctx)
 		virtqueue_notify(vq->vq);
 }
 
+static blk_status_t virtblk_fail_to_queue(struct request *req, int rc)
+{
+	virtblk_cleanup_cmd(req);
+	switch (rc) {
+	case -ENOSPC:
+		return BLK_STS_DEV_RESOURCE;
+	case -ENOMEM:
+		return BLK_STS_RESOURCE;
+	default:
+		return BLK_STS_IOERR;
+	}
+}
+
 static blk_status_t virtblk_prep_rq(struct blk_mq_hw_ctx *hctx,
 					struct virtio_blk *vblk,
 					struct request *req,
 					struct virtblk_req *vbr)
 {
 	blk_status_t status;
+	int num;
 
 	status = virtblk_setup_cmd(vblk->vdev, req, vbr);
 	if (unlikely(status))
 		return status;
 
-	vbr->sg_table.nents = virtblk_map_data(hctx, req, vbr);
-	if (unlikely(vbr->sg_table.nents < 0)) {
-		virtblk_cleanup_cmd(req);
-		return BLK_STS_RESOURCE;
-	}
+	num = virtblk_map_data(hctx, req, vbr);
+	if (unlikely(num < 0))
+		return virtblk_fail_to_queue(req, -ENOMEM);
+	vbr->sg_table.nents = num;
 
 	blk_mq_start_request(req);
 
@@ -360,15 +373,7 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx,
 			blk_mq_stop_hw_queue(hctx);
 		spin_unlock_irqrestore(&vblk->vqs[qid].lock, flags);
 		virtblk_unmap_data(req, vbr);
-		virtblk_cleanup_cmd(req);
-		switch (err) {
-		case -ENOSPC:
-			return BLK_STS_DEV_RESOURCE;
-		case -ENOMEM:
-			return BLK_STS_RESOURCE;
-		default:
-			return BLK_STS_IOERR;
-		}
+		return virtblk_fail_to_queue(req, err);
 	}
 
 	if (bd->last && virtqueue_kick_prepare(vblk->vqs[qid].vq))
drivers/crypto/virtio/virtio_crypto_skcipher_algs.c +2 -1
index e553ccadbcbc..e5876286828b 100644
@@ -239,7 +239,8 @@ static int virtio_crypto_alg_skcipher_close_session(
 		pr_err("virtio_crypto: Close session failed status: %u, session_id: 0x%llx\n",
 			ctrl_status->status, destroy_session->session_id);
 
-		return -EINVAL;
+		err = -EINVAL;
+		goto out;
 	}
 
 	err = 0;
drivers/firmware/efi/efi.c +2 -2
index a06decee51e0..a6e9968a2ddc 100644
@@ -608,7 +608,7 @@ int __init efi_config_parse_tables(const efi_config_table_t *config_tables,
 
 		seed = early_memremap(efi_rng_seed, sizeof(*seed));
 		if (seed != NULL) {
-			size = min(seed->size, EFI_RANDOM_SEED_SIZE);
+			size = min_t(u32, seed->size, SZ_1K); // sanity check
 			early_memunmap(seed, sizeof(*seed));
 		} else {
 			pr_err("Could not map UEFI random seed!\n");
@@ -617,8 +617,8 @@ int __init efi_config_parse_tables(const efi_config_table_t *config_tables,
 			seed = early_memremap(efi_rng_seed,
 					      sizeof(*seed) + size);
 			if (seed != NULL) {
-				pr_notice("seeding entropy pool\n");
 				add_bootloader_randomness(seed->bits, size);
+				memzero_explicit(seed->bits, size);
 				early_memunmap(seed, sizeof(*seed) + size);
 			} else {
 				pr_err("Could not map UEFI random seed!\n");
drivers/firmware/efi/libstub/efistub.h +2 -0
index b0ae0a454404..0ce2bf4b8b58 100644
@@ -873,6 +873,8 @@ efi_status_t efi_get_random_bytes(unsigned long size, u8 *out);
 efi_status_t efi_random_alloc(unsigned long size, unsigned long align,
 			      unsigned long *addr, unsigned long random_seed);
 
+efi_status_t efi_random_get_seed(void);
+
 efi_status_t check_platform_features(void);
 
 void *get_efi_config_table(efi_guid_t guid);
drivers/firmware/efi/libstub/random.c +36 -6

77 lines not on this page · raw message

drivers/gpio/gpio-sifive.c +1 -0
index 238f3210970c..bc5660f61c57 100644
@@ -215,6 +215,7 @@ static int sifive_gpio_probe(struct platform_device *pdev)
 		return -ENODEV;
 	}
 	parent = irq_find_host(irq_parent);
+	of_node_put(irq_parent);
 	if (!parent) {
 		dev_err(dev, "no IRQ parent domain\n");
 		return -ENODEV;
drivers/gpu/drm/amd/amdgpu/amdgpu.h +1 -0
index d597e2656c47..2fb7bf47f41a 100644
@@ -196,6 +196,7 @@ extern int amdgpu_emu_mode;
 extern uint amdgpu_smu_memory_pool_size;
 extern int amdgpu_smu_pptable_id;
 extern uint amdgpu_dc_feature_mask;
+extern uint amdgpu_freesync_vid_mode;
 extern uint amdgpu_dc_debug_mask;
 extern uint amdgpu_dc_visual_confirm;
 extern uint amdgpu_dm_abm_level;
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +3 -1
index 647220a8762d..30f145dc8724 100644
@@ -265,8 +265,10 @@ int amdgpu_amdkfd_get_pcie_bandwidth_mbytes(struct amdgpu_device *adev, bool is_
 	(&((struct amdgpu_fpriv *)					\
 		((struct drm_file *)(drm_priv))->driver_priv)->vm)
 
+int amdgpu_amdkfd_gpuvm_set_vm_pasid(struct amdgpu_device *adev,
+				     struct file *filp, u32 pasid);
 int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct amdgpu_device *adev,
-					struct file *filp, u32 pasid,
+					struct file *filp,
 					void **process_info,
 					struct dma_fence **ef);
 void amdgpu_amdkfd_gpuvm_release_process_vm(struct amdgpu_device *adev,
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +28 -11
index 6659630303a3..ba5a09c2b3ce 100644
@@ -1471,10 +1471,9 @@ static void amdgpu_amdkfd_gpuvm_unpin_bo(struct amdgpu_bo *bo)
 	amdgpu_bo_unreserve(bo);
 }
 
-int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct amdgpu_device *adev,
-					   struct file *filp, u32 pasid,
-					   void **process_info,
-					   struct dma_fence **ef)
+int amdgpu_amdkfd_gpuvm_set_vm_pasid(struct amdgpu_device *adev,
+				     struct file *filp, u32 pasid)
+
 {
 	struct amdgpu_fpriv *drv_priv;
 	struct amdgpu_vm *avm;
@@ -1485,10 +1484,6 @@ int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct amdgpu_device *adev,
 		return ret;
 	avm = &drv_priv->vm;
 
-	/* Already a compute VM? */
-	if (avm->process_info)
-		return -EINVAL;
-
 	/* Free the original amdgpu allocated pasid,
 	 * will be replaced with kfd allocated pasid.
 	 */
@@ -1497,14 +1492,36 @@ int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct amdgpu_device *adev,
 		amdgpu_vm_set_pasid(adev, avm, 0);
 	}
 
-	/* Convert VM into a compute VM */
-	ret = amdgpu_vm_make_compute(adev, avm);
+	ret = amdgpu_vm_set_pasid(adev, avm, pasid);
 	if (ret)
 		return ret;
 
-	ret = amdgpu_vm_set_pasid(adev, avm, pasid);
+	return 0;
+}
+
+int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct amdgpu_device *adev,
+					   struct file *filp,
+					   void **process_info,
+					   struct dma_fence **ef)
+{
+	struct amdgpu_fpriv *drv_priv;
+	struct amdgpu_vm *avm;
+	int ret;
+
+	ret = amdgpu_file_to_fpriv(filp, &drv_priv);
 	if (ret)
 		return ret;
+	avm = &drv_priv->vm;
+
+	/* Already a compute VM? */
+	if (avm->process_info)
+		return -EINVAL;
+
+	/* Convert VM into a compute VM */
+	ret = amdgpu_vm_make_compute(adev, avm);
+	if (ret)
+		return ret;
+
 	/* Initialize KFD part of the VM and process info */
 	ret = init_kfd_vm(avm, process_info, ef);
 	if (ret)
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +27 -0
index 379e65ea8afb..adb369bb7295 100644
@@ -177,6 +177,7 @@ int amdgpu_mes_kiq;
 int amdgpu_noretry = -1;
 int amdgpu_force_asic_type = -1;
 int amdgpu_tmz = -1; /* auto */
+uint amdgpu_freesync_vid_mode;
 int amdgpu_reset_method = -1; /* auto */
 int amdgpu_num_kcq = -1;
 int amdgpu_smartshift_bias;
@@ -862,6 +863,32 @@ module_param_named(backlight, amdgpu_backlight, bint, 0444);
 MODULE_PARM_DESC(tmz, "Enable TMZ feature (-1 = auto (default), 0 = off, 1 = on)");
 module_param_named(tmz, amdgpu_tmz, int, 0444);
 
+/**
+ * DOC: freesync_video (uint)
+ * Enable the optimization to adjust front porch timing to achieve seamless
+ * mode change experience when setting a freesync supported mode for which full
+ * modeset is not needed.
+ *
+ * The Display Core will add a set of modes derived from the base FreeSync
+ * video mode into the corresponding connector's mode list based on commonly
+ * used refresh rates and VRR range of the connected display, when users enable
+ * this feature. From the userspace perspective, they can see a seamless mode
+ * change experience when the change between different refresh rates under the
+ * same resolution. Additionally, userspace applications such as Video playback
+ * can read this modeset list and change the refresh rate based on the video
+ * frame rate. Finally, the userspace can also derive an appropriate mode for a
+ * particular refresh rate based on the FreeSync Mode and add it to the
+ * connector's mode list.
+ *
+ * Note: This is an experimental feature.
+ *
+ * The default value: 0 (off).
+ */
+MODULE_PARM_DESC(
+	freesync_video,
+	"Enable freesync modesetting optimization feature (0 = off (default), 1 = on)");
+module_param_named(freesync_video, amdgpu_freesync_vid_mode, uint, 0444);
+
 /**
  * DOC: reset_method (int)
  * GPU reset method (-1 = auto (default), 0 = legacy, 1 = mode0, 2 = mode1, 3 = mode2, 4 = baco)
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +8 -11
index bfe0fc258fc1..60ab2d952d5c 100644
@@ -446,27 +446,24 @@ static bool amdgpu_bo_validate_size(struct amdgpu_device *adev,
 
 	/*
 	 * If GTT is part of requested domains the check must succeed to
-	 * allow fall back to GTT
+	 * allow fall back to GTT.
 	 */
 	if (domain & AMDGPU_GEM_DOMAIN_GTT) {
 		man = ttm_manager_type(&adev->mman.bdev, TTM_PL_TT);
 
-		if (size < man->size)
+		if (man && size < man->size)
 			return true;
-		else
-			goto fail;
-	}
-
-	if (domain & AMDGPU_GEM_DOMAIN_VRAM) {
+		else if (!man)
+			WARN_ON_ONCE("GTT domain requested but GTT mem manager uninitialized");
+		goto fail;
+	} else if (domain & AMDGPU_GEM_DOMAIN_VRAM) {
 		man = ttm_manager_type(&adev->mman.bdev, TTM_PL_VRAM);
 
-		if (size < man->size)
+		if (man && size < man->size)
 			return true;
-		else
-			goto fail;
+		goto fail;
 	}
 
-
 	/* TODO add more domains checks, such as AMDGPU_GEM_DOMAIN_CPU */
 	return true;
 
drivers/gpu/drm/amd/amdkfd/kfd_process.c +15 -9
index 6c83a519b3a1..febf0e9f7af1 100644
@@ -689,13 +689,13 @@ void kfd_process_destroy_wq(void)
 }
 
 static void kfd_process_free_gpuvm(struct kgd_mem *mem,
-			struct kfd_process_device *pdd, void *kptr)
+			struct kfd_process_device *pdd, void **kptr)
 {
 	struct kfd_dev *dev = pdd->dev;
 
-	if (kptr) {
+	if (kptr && *kptr) {
 		amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(mem);
-		kptr = NULL;
+		*kptr = NULL;
 	}
 
 	amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(dev->adev, mem, pdd->drm_priv);
@@ -795,7 +795,7 @@ static void kfd_process_device_destroy_ib_mem(struct kfd_process_device *pdd)
 	if (!qpd->ib_kaddr || !qpd->ib_base)
 		return;
 
-	kfd_process_free_gpuvm(qpd->ib_mem, pdd, qpd->ib_kaddr);
+	kfd_process_free_gpuvm(qpd->ib_mem, pdd, &qpd->ib_kaddr);
 }
 
 struct kfd_process *kfd_create_process(struct file *filep)
@@ -1277,7 +1277,7 @@ static void kfd_process_device_destroy_cwsr_dgpu(struct kfd_process_device *pdd)
 	if (!dev->cwsr_enabled || !qpd->cwsr_kaddr || !qpd->cwsr_base)
 		return;
 
-	kfd_process_free_gpuvm(qpd->cwsr_mem, pdd, qpd->cwsr_kaddr);
+	kfd_process_free_gpuvm(qpd->cwsr_mem, pdd, &qpd->cwsr_kaddr);
 }
 
 void kfd_process_set_trap_handler(struct qcm_process_device *qpd,
@@ -1581,9 +1581,9 @@ int kfd_process_device_init_vm(struct kfd_process_device *pdd,
 	p = pdd->process;
 	dev = pdd->dev;
 
-	ret = amdgpu_amdkfd_gpuvm_acquire_process_vm(
-		dev->adev, drm_file, p->pasid,
-		&p->kgd_process_info, &p->ef);
+	ret = amdgpu_amdkfd_gpuvm_acquire_process_vm(dev->adev, drm_file,
+						     &p->kgd_process_info,
+						     &p->ef);
 	if (ret) {
 		pr_err("Failed to create process VM object\n");
 		return ret;
@@ -1598,13 +1598,19 @@ int kfd_process_device_init_vm(struct kfd_process_device *pdd,
 	if (ret)
 		goto err_init_cwsr;
 
+	ret = amdgpu_amdkfd_gpuvm_set_vm_pasid(dev->adev, drm_file, p->pasid);
+	if (ret)
+		goto err_set_pasid;
+
 	pdd->drm_file = drm_file;
 
 	return 0;
 
+err_set_pasid:
+	kfd_process_device_destroy_cwsr_dgpu(pdd);
 err_init_cwsr:
+	kfd_process_device_destroy_ib_mem(pdd);
 err_reserve_ib_mem:
-	kfd_process_device_free_bos(pdd);
 	pdd->drm_priv = NULL;
 
 	return ret;
drivers/gpu/drm/amd/amdkfd/kfd_topology.c +1 -1
index 3f0a4a415907..35a9b702508a 100644
@@ -801,7 +801,7 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev,
 
 		p2plink->attr.name = "properties";
 		p2plink->attr.mode = KFD_SYSFS_FILE_MODE;
-		sysfs_attr_init(&iolink->attr);
+		sysfs_attr_init(&p2plink->attr);
 		ret = sysfs_create_file(p2plink->kobj, &p2plink->attr);
 		if (ret < 0)
 			return ret;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +7 -5
index 895bbd20dd07..68f2eb215e81 100644
@@ -5821,7 +5821,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
 		 */
 		DRM_DEBUG_DRIVER("No preferred mode found\n");
 	} else {
-		recalculate_timing = is_freesync_video_mode(&mode, aconnector);
+		recalculate_timing = amdgpu_freesync_vid_mode &&
+				 is_freesync_video_mode(&mode, aconnector);
 		if (recalculate_timing) {
 			freesync_mode = get_highest_refresh_rate_mode(aconnector, false);
 			drm_mode_copy(&saved_mode, &mode);
@@ -6895,7 +6896,7 @@ static void amdgpu_dm_connector_add_freesync_modes(struct drm_connector *connect
 	struct amdgpu_dm_connector *amdgpu_dm_connector =
 		to_amdgpu_dm_connector(connector);
 
-	if (!edid)
+	if (!(amdgpu_freesync_vid_mode && edid))
 		return;
 
 	if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10)
@@ -8766,7 +8767,8 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
 		 * TODO: Refactor this function to allow this check to work
 		 * in all conditions.
 		 */
-		if (dm_new_crtc_state->stream &&
+		if (amdgpu_freesync_vid_mode &&
+		    dm_new_crtc_state->stream &&
 		    is_timing_unchanged_for_freesync(new_crtc_state, old_crtc_state))
 			goto skip_modeset;
 
@@ -8801,7 +8803,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
 		if (!dm_old_crtc_state->stream)
 			goto skip_modeset;
 
-		if (dm_new_crtc_state->stream &&
+		if (amdgpu_freesync_vid_mode && dm_new_crtc_state->stream &&
 		    is_timing_unchanged_for_freesync(new_crtc_state,
 						     old_crtc_state)) {
 			new_crtc_state->mode_changed = false;
@@ -8813,7 +8815,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
 			set_freesync_fixed_config(dm_new_crtc_state);
 
 			goto skip_modeset;
-		} else if (aconnector &&
+		} else if (amdgpu_freesync_vid_mode && aconnector &&
 			   is_freesync_video_mode(&new_crtc_state->mode,
 						  aconnector)) {
 			struct drm_display_mode *high_mode;
drivers/gpu/drm/i915/gvt/debugfs.c +13 -4
index 9f1c209d9251..e08ed0e9f165 100644
@@ -175,8 +175,13 @@ void intel_gvt_debugfs_add_vgpu(struct intel_vgpu *vgpu)
  */
 void intel_gvt_debugfs_remove_vgpu(struct intel_vgpu *vgpu)
 {
-	debugfs_remove_recursive(vgpu->debugfs);
-	vgpu->debugfs = NULL;
+	struct intel_gvt *gvt = vgpu->gvt;
+	struct drm_minor *minor = gvt->gt->i915->drm.primary;
+
+	if (minor->debugfs_root && gvt->debugfs_root) {
+		debugfs_remove_recursive(vgpu->debugfs);
+		vgpu->debugfs = NULL;
+	}
 }
 
 /**
@@ -199,6 +204,10 @@ void intel_gvt_debugfs_init(struct intel_gvt *gvt)
  */
 void intel_gvt_debugfs_clean(struct intel_gvt *gvt)
 {
-	debugfs_remove_recursive(gvt->debugfs_root);
-	gvt->debugfs_root = NULL;
+	struct drm_minor *minor = gvt->gt->i915->drm.primary;
+
+	if (minor->debugfs_root) {
+		debugfs_remove_recursive(gvt->debugfs_root);
+		gvt->debugfs_root = NULL;
+	}
 }
drivers/gpu/drm/i915/gvt/gtt.c +13 -4
index ce0eb03709c3..80c60754a5c1 100644
@@ -1214,10 +1214,8 @@ static int split_2MB_gtt_entry(struct intel_vgpu *vgpu,
 	for_each_shadow_entry(sub_spt, &sub_se, sub_index) {
 		ret = intel_gvt_dma_map_guest_page(vgpu, start_gfn + sub_index,
 						   PAGE_SIZE, &dma_addr);
-		if (ret) {
-			ppgtt_invalidate_spt(spt);
-			return ret;
-		}
+		if (ret)
+			goto err;
 		sub_se.val64 = se->val64;
 
 		/* Copy the PAT field from PDE. */
@@ -1236,6 +1234,17 @@ static int split_2MB_gtt_entry(struct intel_vgpu *vgpu,
 	ops->set_pfn(se, sub_spt->shadow_page.mfn);
 	ppgtt_set_shadow_entry(spt, se, index);
 	return 0;
+err:
+	/* Cancel the existing addess mappings of DMA addr. */
+	for_each_present_shadow_entry(sub_spt, &sub_se, sub_index) {
+		gvt_vdbg_mm("invalidate 4K entry\n");
+		ppgtt_invalidate_pte(sub_spt, &sub_se);
+	}
+	/* Release the new allocated spt. */
+	trace_spt_change(sub_spt->vgpu->id, "release", sub_spt,
+		sub_spt->guest_page.gfn, sub_spt->shadow_page.type);
+	ppgtt_free_spt(sub_spt);
+	return ret;
 }
 
 static int split_64KB_gtt_entry(struct intel_vgpu *vgpu,
drivers/gpu/drm/i915/gvt/scheduler.c +1 -0
index d6fe94cd0fdb..8342d95f56cb 100644
@@ -696,6 +696,7 @@ intel_vgpu_shadow_mm_pin(struct intel_vgpu_workload *workload)
 
 	if (workload->shadow_mm->type != INTEL_GVT_MM_PPGTT ||
 	    !workload->shadow_mm->ppgtt_mm.shadowed) {
+		intel_vgpu_unpin_mm(workload->shadow_mm);
 		gvt_vgpu_err("workload shadow ppgtt isn't ready\n");
 		return -EINVAL;
 	}
drivers/gpu/drm/imx/ipuv3-plane.c +8 -6
index ea5f594955df..4b05f310071c 100644
@@ -615,6 +615,11 @@ static void ipu_plane_atomic_update(struct drm_plane *plane,
 		break;
 	}
 
+	if (ipu_plane->dp_flow == IPU_DP_FLOW_SYNC_BG)
+		width = ipu_src_rect_width(new_state);
+	else
+		width = drm_rect_width(&new_state->src) >> 16;
+
 	eba = drm_plane_state_to_eba(new_state, 0);
 
 	/*
@@ -623,8 +628,7 @@ static void ipu_plane_atomic_update(struct drm_plane *plane,
 	 */
 	if (ipu_state->use_pre) {
 		axi_id = ipu_chan_assign_axi_id(ipu_plane->dma);
-		ipu_prg_channel_configure(ipu_plane->ipu_ch, axi_id,
-					  ipu_src_rect_width(new_state),
+		ipu_prg_channel_configure(ipu_plane->ipu_ch, axi_id, width,
 					  drm_rect_height(&new_state->src) >> 16,
 					  fb->pitches[0], fb->format->format,
 					  fb->modifier, &eba);
@@ -679,9 +683,8 @@ static void ipu_plane_atomic_update(struct drm_plane *plane,
 		break;
 	}
 
-	ipu_dmfc_config_wait4eot(ipu_plane->dmfc, ALIGN(drm_rect_width(dst), 8));
+	ipu_dmfc_config_wait4eot(ipu_plane->dmfc, width);
 
-	width = ipu_src_rect_width(new_state);
 	height = drm_rect_height(&new_state->src) >> 16;
 	info = drm_format_info(fb->format->format);
 	ipu_calculate_bursts(width, info->cpp[0], fb->pitches[0],
@@ -745,8 +748,7 @@ static void ipu_plane_atomic_update(struct drm_plane *plane,
 		ipu_cpmem_set_burstsize(ipu_plane->ipu_ch, 16);
 
 		ipu_cpmem_zero(ipu_plane->alpha_ch);
-		ipu_cpmem_set_resolution(ipu_plane->alpha_ch,
-					 ipu_src_rect_width(new_state),
+		ipu_cpmem_set_resolution(ipu_plane->alpha_ch, width,
 					 drm_rect_height(&new_state->src) >> 16);
 		ipu_cpmem_set_format_passthrough(ipu_plane->alpha_ch, 8);
 		ipu_cpmem_set_high_priority(ipu_plane->alpha_ch);
drivers/gpu/drm/meson/meson_viu.c +2 -3
index d4b907889a21..cd399b0b7181 100644
@@ -436,15 +436,14 @@ void meson_viu_init(struct meson_drm *priv)
 
 	/* Initialize OSD1 fifo control register */
 	reg = VIU_OSD_DDR_PRIORITY_URGENT |
-		VIU_OSD_HOLD_FIFO_LINES(31) |
 		VIU_OSD_FIFO_DEPTH_VAL(32) | /* fifo_depth_val: 32*8=256 */
 		VIU_OSD_WORDS_PER_BURST(4) | /* 4 words in 1 burst */
 		VIU_OSD_FIFO_LIMITS(2);      /* fifo_lim: 2*16=32 */
 
 	if (meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A))
-		reg |= VIU_OSD_BURST_LENGTH_32;
+		reg |= (VIU_OSD_BURST_LENGTH_32 | VIU_OSD_HOLD_FIFO_LINES(31));
 	else
-		reg |= VIU_OSD_BURST_LENGTH_64;
+		reg |= (VIU_OSD_BURST_LENGTH_64 | VIU_OSD_HOLD_FIFO_LINES(4));
 
 	writel_relaxed(reg, priv->io_base + _REG(VIU_OSD1_FIFO_CTRL_STAT));
 	writel_relaxed(reg, priv->io_base + _REG(VIU_OSD2_FIFO_CTRL_STAT));
drivers/gpu/drm/mgag200/mgag200_pll.c +2 -1
index 8065ca5d8de9..4f55961848a8 100644
@@ -269,7 +269,8 @@ static void mgag200_pixpll_update_g200se_04(struct mgag200_pll *pixpll,
 	pixpllcp = pixpllc->p - 1;
 	pixpllcs = pixpllc->s;
 
-	xpixpllcm = pixpllcm | ((pixpllcn & BIT(8)) >> 1);
+	// For G200SE A, BIT(7) should be set unconditionally.
+	xpixpllcm = BIT(7) | pixpllcm;
 	xpixpllcn = pixpllcn;
 	xpixpllcp = (pixpllcs << 3) | pixpllcp;
 
drivers/gpu/drm/panfrost/panfrost_drv.c +18 -9
index 2fa5afe21288..919e6cc04982 100644
@@ -82,6 +82,7 @@ static int panfrost_ioctl_create_bo(struct drm_device *dev, void *data,
 	struct panfrost_gem_object *bo;
 	struct drm_panfrost_create_bo *args = data;
 	struct panfrost_gem_mapping *mapping;
+	int ret;
 
 	if (!args->size || args->pad ||
 	    (args->flags & ~(PANFROST_BO_NOEXEC | PANFROST_BO_HEAP)))
@@ -92,21 +93,29 @@ static int panfrost_ioctl_create_bo(struct drm_device *dev, void *data,
 	    !(args->flags & PANFROST_BO_NOEXEC))
 		return -EINVAL;
 
-	bo = panfrost_gem_create_with_handle(file, dev, args->size, args->flags,
-					     &args->handle);
+	bo = panfrost_gem_create(dev, args->size, args->flags);
 	if (IS_ERR(bo))
 		return PTR_ERR(bo);
 
+	ret = drm_gem_handle_create(file, &bo->base.base, &args->handle);
+	if (ret)
+		goto out;
+
 	mapping = panfrost_gem_mapping_get(bo, priv);
-	if (!mapping) {
-		drm_gem_object_put(&bo->base.base);
-		return -EINVAL;
+	if (mapping) {
+		args->offset = mapping->mmnode.start << PAGE_SHIFT;
+		panfrost_gem_mapping_put(mapping);
+	} else {
+		/* This can only happen if the handle from
+		 * drm_gem_handle_create() has already been guessed and freed
+		 * by user space
+		 */
+		ret = -EINVAL;
 	}
 
-	args->offset = mapping->mmnode.start << PAGE_SHIFT;
-	panfrost_gem_mapping_put(mapping);
-
-	return 0;
+out:
+	drm_gem_object_put(&bo->base.base);
+	return ret;
 }
 
 /**
drivers/gpu/drm/panfrost/panfrost_gem.c +1 -15
index 293e799e2fe8..3c812fbd126f 100644
@@ -235,12 +235,8 @@ struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, size_t
 }
 
 struct panfrost_gem_object *
-panfrost_gem_create_with_handle(struct drm_file *file_priv,
-				struct drm_device *dev, size_t size,
-				u32 flags,
-				uint32_t *handle)
+panfrost_gem_create(struct drm_device *dev, size_t size, u32 flags)
 {
-	int ret;
 	struct drm_gem_shmem_object *shmem;
 	struct panfrost_gem_object *bo;
 
@@ -256,16 +252,6 @@ panfrost_gem_create_with_handle(struct drm_file *file_priv,
 	bo->noexec = !!(flags & PANFROST_BO_NOEXEC);
 	bo->is_heap = !!(flags & PANFROST_BO_HEAP);
 
-	/*
-	 * Allocate an id of idr table where the obj is registered
-	 * and handle has the id what user can see.
-	 */
-	ret = drm_gem_handle_create(file_priv, &shmem->base, handle);
-	/* drop reference from allocate - handle holds it now. */
-	drm_gem_object_put(&shmem->base);
-	if (ret)
-		return ERR_PTR(ret);
-
 	return bo;
 }
 
drivers/gpu/drm/panfrost/panfrost_gem.h +1 -4
index 8088d5fd8480..ad2877eeeccd 100644
@@ -69,10 +69,7 @@ panfrost_gem_prime_import_sg_table(struct drm_device *dev,
 				   struct sg_table *sgt);
 
 struct panfrost_gem_object *
-panfrost_gem_create_with_handle(struct drm_file *file_priv,
-				struct drm_device *dev, size_t size,
-				u32 flags,
-				uint32_t *handle);
+panfrost_gem_create(struct drm_device *dev, size_t size, u32 flags);
 
 int panfrost_gem_open(struct drm_gem_object *obj, struct drm_file *file_priv);
 void panfrost_gem_close(struct drm_gem_object *obj,
drivers/infiniband/hw/mlx5/counters.c +3 -3
index 945758f39523..3e1272695d99 100644
@@ -278,7 +278,6 @@ static int do_get_hw_stats(struct ib_device *ibdev,
 	const struct mlx5_ib_counters *cnts = get_counters(dev, port_num - 1);
 	struct mlx5_core_dev *mdev;
 	int ret, num_counters;
-	u32 mdev_port_num;
 
 	if (!stats)
 		return -EINVAL;
@@ -299,8 +298,9 @@ static int do_get_hw_stats(struct ib_device *ibdev,
 	}
 
 	if (MLX5_CAP_GEN(dev->mdev, cc_query_allowed)) {
-		mdev = mlx5_ib_get_native_port_mdev(dev, port_num,
-						    &mdev_port_num);
+		if (!port_num)
+			port_num = 1;
+		mdev = mlx5_ib_get_native_port_mdev(dev, port_num, NULL);
 		if (!mdev) {
 			/* If port is not affiliated yet, its in down state
 			 * which doesn't have any counters yet, so it would be
drivers/infiniband/hw/mlx5/qp.c +35 -14

62 lines not on this page · raw message

drivers/net/bonding/bond_3ad.c +1 -0
index e58a1e0cadd2..9270977e6c7f 100644
@@ -1540,6 +1540,7 @@ static void ad_port_selection_logic(struct port *port, bool *update_slave_arr)
 			slave_err(bond->dev, port->slave->dev,
 				  "Port %d did not find a suitable aggregator\n",
 				  port->actor_port_number);
+			return;
 		}
 	}
 	/* if all aggregator's ports are READY_N == TRUE, set ready=TRUE
drivers/net/bonding/bond_main.c +5 -3
index 771f2a533d3f..7807113e0910 100644
@@ -2653,10 +2653,12 @@ static void bond_miimon_link_change(struct bonding *bond,
 
 static void bond_miimon_commit(struct bonding *bond)
 {
-	struct slave *slave, *primary;
+	struct slave *slave, *primary, *active;
 	bool do_failover = false;
 	struct list_head *iter;
 
+	ASSERT_RTNL();
+
 	bond_for_each_slave(bond, slave, iter) {
 		switch (slave->link_new_state) {
 		case BOND_LINK_NOCHANGE:
@@ -2699,8 +2701,8 @@ static void bond_miimon_commit(struct bonding *bond)
 
 			bond_miimon_link_change(bond, slave, BOND_LINK_UP);
 
-			if (!rcu_access_pointer(bond->curr_active_slave) || slave == primary ||
-			    slave->prio > rcu_dereference(bond->curr_active_slave)->prio)
+			active = rtnl_dereference(bond->curr_active_slave);
+			if (!active || slave == primary || slave->prio > active->prio)
 				do_failover = true;
 
 			continue;
drivers/net/dsa/mv88e6xxx/Kconfig +2 -2
index 7a2445a34eb7..e3181d5471df 100644
@@ -2,7 +2,6 @@
 config NET_DSA_MV88E6XXX
 	tristate "Marvell 88E6xxx Ethernet switch fabric support"
 	depends on NET_DSA
-	depends on PTP_1588_CLOCK_OPTIONAL
 	select IRQ_DOMAIN
 	select NET_DSA_TAG_EDSA
 	select NET_DSA_TAG_DSA
@@ -13,7 +12,8 @@ config NET_DSA_MV88E6XXX
 config NET_DSA_MV88E6XXX_PTP
 	bool "PTP support for Marvell 88E6xxx"
 	default n
-	depends on NET_DSA_MV88E6XXX && PTP_1588_CLOCK
+	depends on (NET_DSA_MV88E6XXX = y && PTP_1588_CLOCK = y) || \
+	           (NET_DSA_MV88E6XXX = m && PTP_1588_CLOCK)
 	help
 	  Say Y to enable PTP hardware timestamping on Marvell 88E6xxx switch
 	  chips that support it.
drivers/net/dsa/qca/qca8k-8xxx.c +47 -59

181 lines not on this page · raw message

drivers/net/dsa/qca/qca8k.h +0 -5
index e36ecc9777f4..342e9d945dfb 100644
@@ -375,11 +375,6 @@ struct qca8k_mdio_cache {
  * mdio writes
  */
 	u16 page;
-/* lo and hi can also be cached and from Documentation we can skip one
- * extra mdio write if lo or hi is didn't change.
- */
-	u16 lo;
-	u16 hi;
 };
 
 struct qca8k_pcs {
drivers/net/ethernet/amazon/ena/ena_com.c +9 -20
index 8c8b4c88c7de..451c3a1b6255 100644
@@ -2400,29 +2400,18 @@ int ena_com_fill_hash_function(struct ena_com_dev *ena_dev,
 		return -EOPNOTSUPP;
 	}
 
-	switch (func) {
-	case ENA_ADMIN_TOEPLITZ:
-		if (key) {
-			if (key_len != sizeof(hash_key->key)) {
-				netdev_err(ena_dev->net_device,
-					   "key len (%u) doesn't equal the supported size (%zu)\n",
-					   key_len, sizeof(hash_key->key));
-				return -EINVAL;
-			}
-			memcpy(hash_key->key, key, key_len);
-			rss->hash_init_val = init_val;
-			hash_key->key_parts = key_len / sizeof(hash_key->key[0]);
+	if ((func == ENA_ADMIN_TOEPLITZ) && key) {
+		if (key_len != sizeof(hash_key->key)) {
+			netdev_err(ena_dev->net_device,
+				   "key len (%u) doesn't equal the supported size (%zu)\n",
+				   key_len, sizeof(hash_key->key));
+			return -EINVAL;
 		}
-		break;
-	case ENA_ADMIN_CRC32:
-		rss->hash_init_val = init_val;
-		break;
-	default:
-		netdev_err(ena_dev->net_device, "Invalid hash function (%d)\n",
-			   func);
-		return -EINVAL;
+		memcpy(hash_key->key, key, key_len);
+		hash_key->key_parts = key_len / sizeof(hash_key->key[0]);
 	}
 
+	rss->hash_init_val = init_val;
 	old_func = rss->hash_func;
 	rss->hash_func = func;
 	rc = ena_com_set_hash_function(ena_dev);
drivers/net/ethernet/amazon/ena/ena_ethtool.c +1 -5
index 39242c5a1729..108506721bcf 100644
@@ -887,11 +887,7 @@ static int ena_set_tunable(struct net_device *netdev,
 	switch (tuna->id) {
 	case ETHTOOL_RX_COPYBREAK:
 		len = *(u32 *)data;
-		if (len > adapter->netdev->mtu) {
-			ret = -EINVAL;
-			break;
-		}
-		adapter->rx_copybreak = len;
+		ret = ena_set_rx_copybreak(adapter, len);
 		break;
 	default:
 		ret = -EINVAL;
drivers/net/ethernet/amazon/ena/ena_netdev.c +60 -23

245 lines not on this page · raw message

drivers/net/ethernet/amazon/ena/ena_netdev.h +15 -2
index 1bdce99bf688..2cb141079474 100644
@@ -262,9 +262,11 @@ struct ena_ring {
 	bool disable_meta_caching;
 	u16 no_interrupt_event_cnt;
 
-	/* cpu for TPH */
+	/* cpu and NUMA for TPH */
 	int cpu;
-	 /* number of tx/rx_buffer_info's entries */
+	int numa_node;
+
+	/* number of tx/rx_buffer_info's entries */
 	int ring_size;
 
 	enum ena_admin_placement_policy_type tx_mem_queue_type;
@@ -392,6 +394,8 @@ int ena_update_queue_sizes(struct ena_adapter *adapter,
 
 int ena_update_queue_count(struct ena_adapter *adapter, u32 new_channel_count);
 
+int ena_set_rx_copybreak(struct ena_adapter *adapter, u32 rx_copybreak);
+
 int ena_get_sset_count(struct net_device *netdev, int sset);
 
 static inline void ena_reset_device(struct ena_adapter *adapter,
@@ -409,6 +413,15 @@ enum ena_xdp_errors_t {
 	ENA_XDP_NO_ENOUGH_QUEUES,
 };
 
+enum ENA_XDP_ACTIONS {
+	ENA_XDP_PASS		= 0,
+	ENA_XDP_TX		= BIT(0),
+	ENA_XDP_REDIRECT	= BIT(1),
+	ENA_XDP_DROP		= BIT(2)
+};
+
+#define ENA_XDP_FORWARDED (ENA_XDP_TX | ENA_XDP_REDIRECT)
+
 static inline bool ena_xdp_present(struct ena_adapter *adapter)
 {
 	return !!adapter->xdp_bpf_prog;
drivers/net/ethernet/amd/xgbe/xgbe-drv.c +3 -0
index f342bb853189..2ee2cd4a1e35 100644
@@ -1064,6 +1064,9 @@ static void xgbe_free_irqs(struct xgbe_prv_data *pdata)
 
 	devm_free_irq(pdata->dev, pdata->dev_irq, pdata);
 
+	tasklet_kill(&pdata->tasklet_dev);
+	tasklet_kill(&pdata->tasklet_ecc);
+
 	if (pdata->vdata->ecc_support && (pdata->dev_irq != pdata->ecc_irq))
 		devm_free_irq(pdata->dev, pdata->ecc_irq, pdata);
 
drivers/net/ethernet/amd/xgbe/xgbe-i2c.c +3 -1
index 22d4fc547a0a..a9ccc4258ee5 100644
@@ -447,8 +447,10 @@ static void xgbe_i2c_stop(struct xgbe_prv_data *pdata)
 	xgbe_i2c_disable(pdata);
 	xgbe_i2c_clear_all_interrupts(pdata);
 
-	if (pdata->dev_irq != pdata->i2c_irq)
+	if (pdata->dev_irq != pdata->i2c_irq) {
 		devm_free_irq(pdata->dev, pdata->i2c_irq, pdata);
+		tasklet_kill(&pdata->tasklet_i2c);
+	}
 }
 
 static int xgbe_i2c_start(struct xgbe_prv_data *pdata)
drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +3 -1
index 4e97b4869522..0c5c1b155683 100644
@@ -1390,8 +1390,10 @@ static void xgbe_phy_stop(struct xgbe_prv_data *pdata)
 	/* Disable auto-negotiation */
 	xgbe_an_disable_all(pdata);
 
-	if (pdata->dev_irq != pdata->an_irq)
+	if (pdata->dev_irq != pdata->an_irq) {
 		devm_free_irq(pdata->dev, pdata->an_irq, pdata);
+		tasklet_kill(&pdata->tasklet_an);
+	}
 
 	pdata->phy_if.phy_impl.stop(pdata);
 
drivers/net/ethernet/broadcom/bnxt/bnxt.c +12 -10
index 57cabe20aa12..1b38295254e2 100644
@@ -988,8 +988,7 @@ static struct sk_buff *bnxt_rx_multi_page_skb(struct bnxt *bp,
 	dma_addr -= bp->rx_dma_offset;
 	dma_unmap_page_attrs(&bp->pdev->dev, dma_addr, PAGE_SIZE, bp->rx_dir,
 			     DMA_ATTR_WEAK_ORDERING);
-	skb = build_skb(page_address(page), BNXT_PAGE_MODE_BUF_SIZE +
-					    bp->rx_dma_offset);
+	skb = build_skb(page_address(page), PAGE_SIZE);
 	if (!skb) {
 		__free_page(page);
 		return NULL;
@@ -1922,7 +1921,7 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
 	dma_addr = rx_buf->mapping;
 
 	if (bnxt_xdp_attached(bp, rxr)) {
-		bnxt_xdp_buff_init(bp, rxr, cons, &data_ptr, &len, &xdp);
+		bnxt_xdp_buff_init(bp, rxr, cons, data_ptr, len, &xdp);
 		if (agg_bufs) {
 			u32 frag_len = bnxt_rx_agg_pages_xdp(bp, cpr, &xdp,
 							     cp_cons, agg_bufs,
@@ -1937,7 +1936,7 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
 	}
 
 	if (xdp_active) {
-		if (bnxt_rx_xdp(bp, rxr, cons, xdp, data, &len, event)) {
+		if (bnxt_rx_xdp(bp, rxr, cons, xdp, data, &data_ptr, &len, event)) {
 			rc = 1;
 			goto next_rx;
 		}
@@ -3966,8 +3965,10 @@ void bnxt_set_ring_params(struct bnxt *bp)
 		bp->rx_agg_ring_mask = (bp->rx_agg_nr_pages * RX_DESC_CNT) - 1;
 
 		if (BNXT_RX_PAGE_MODE(bp)) {
-			rx_space = BNXT_PAGE_MODE_BUF_SIZE;
-			rx_size = BNXT_MAX_PAGE_MODE_MTU;
+			rx_space = PAGE_SIZE;
+			rx_size = PAGE_SIZE -
+				  ALIGN(max(NET_SKB_PAD, XDP_PACKET_HEADROOM), 8) -
+				  SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
 		} else {
 			rx_size = SKB_DATA_ALIGN(BNXT_RX_COPY_THRESH + NET_IP_ALIGN);
 			rx_space = rx_size + NET_SKB_PAD +
@@ -5370,15 +5371,16 @@ static int bnxt_hwrm_vnic_set_hds(struct bnxt *bp, u16 vnic_id)
 	req->flags = cpu_to_le32(VNIC_PLCMODES_CFG_REQ_FLAGS_JUMBO_PLACEMENT);
 	req->enables = cpu_to_le32(VNIC_PLCMODES_CFG_REQ_ENABLES_JUMBO_THRESH_VALID);
 
-	if (BNXT_RX_PAGE_MODE(bp) && !BNXT_RX_JUMBO_MODE(bp)) {
+	if (BNXT_RX_PAGE_MODE(bp)) {
+		req->jumbo_thresh = cpu_to_le16(bp->rx_buf_use_size);
+	} else {
 		req->flags |= cpu_to_le32(VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV4 |
 					  VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV6);
 		req->enables |=
 			cpu_to_le32(VNIC_PLCMODES_CFG_REQ_ENABLES_HDS_THRESHOLD_VALID);
+		req->jumbo_thresh = cpu_to_le16(bp->rx_copy_thresh);
+		req->hds_threshold = cpu_to_le16(bp->rx_copy_thresh);
 	}
-	/* thresholds not implemented in firmware yet */
-	req->jumbo_thresh = cpu_to_le16(bp->rx_copy_thresh);
-	req->hds_threshold = cpu_to_le16(bp->rx_copy_thresh);
 	req->vnic_id = cpu_to_le32(vnic->fw_vnic_id);
 	return hwrm_req_send(bp, req);
 }
drivers/net/ethernet/broadcom/bnxt/bnxt.h +11 -4
index d5fa43cfe524..02741d499bf4 100644
@@ -591,12 +591,20 @@ struct nqe_cn {
 #define BNXT_RX_PAGE_SIZE (1 << BNXT_RX_PAGE_SHIFT)
 
 #define BNXT_MAX_MTU		9500
-#define BNXT_PAGE_MODE_BUF_SIZE \
+
+/* First RX buffer page in XDP multi-buf mode
+ *
+ * +-------------------------------------------------------------------------+
+ * | XDP_PACKET_HEADROOM | bp->rx_buf_use_size              | skb_shared_info|
+ * | (bp->rx_dma_offset) |                                  |                |
+ * +-------------------------------------------------------------------------+
+ */
+#define BNXT_MAX_PAGE_MODE_MTU_SBUF \
 	((unsigned int)PAGE_SIZE - VLAN_ETH_HLEN - NET_IP_ALIGN -	\
 	 XDP_PACKET_HEADROOM)
 #define BNXT_MAX_PAGE_MODE_MTU	\
-	BNXT_PAGE_MODE_BUF_SIZE - \
-	SKB_DATA_ALIGN((unsigned int)sizeof(struct skb_shared_info))
+	(BNXT_MAX_PAGE_MODE_MTU_SBUF - \
+	 SKB_DATA_ALIGN((unsigned int)sizeof(struct skb_shared_info)))
 
 #define BNXT_MIN_PKT_SIZE	52
 
@@ -2131,7 +2139,6 @@ struct bnxt {
 #define BNXT_DUMP_CRASH		1
 
 	struct bpf_prog		*xdp_prog;
-	u8			xdp_has_frags;
 
 	struct bnxt_ptp_cfg	*ptp_cfg;
 	u8			ptp_all_rx_tstamp;
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c +9 -11
index c3065ec0a479..36d5202c0aee 100644
@@ -177,7 +177,7 @@ bool bnxt_xdp_attached(struct bnxt *bp, struct bnxt_rx_ring_info *rxr)
 }
 
 void bnxt_xdp_buff_init(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
-			u16 cons, u8 **data_ptr, unsigned int *len,
+			u16 cons, u8 *data_ptr, unsigned int len,
 			struct xdp_buff *xdp)
 {
 	struct bnxt_sw_rx_bd *rx_buf;
@@ -191,13 +191,10 @@ void bnxt_xdp_buff_init(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
 	offset = bp->rx_offset;
 
 	mapping = rx_buf->mapping - bp->rx_dma_offset;
-	dma_sync_single_for_cpu(&pdev->dev, mapping + offset, *len, bp->rx_dir);
-
-	if (bp->xdp_has_frags)
-		buflen = BNXT_PAGE_MODE_BUF_SIZE + offset;
+	dma_sync_single_for_cpu(&pdev->dev, mapping + offset, len, bp->rx_dir);
 
 	xdp_init_buff(xdp, buflen, &rxr->xdp_rxq);
-	xdp_prepare_buff(xdp, *data_ptr - offset, offset, *len, false);
+	xdp_prepare_buff(xdp, data_ptr - offset, offset, len, false);
 }
 
 void bnxt_xdp_buff_frags_free(struct bnxt_rx_ring_info *rxr,
@@ -222,7 +219,8 @@ void bnxt_xdp_buff_frags_free(struct bnxt_rx_ring_info *rxr,
  * false   - packet should be passed to the stack.
  */
 bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
-		 struct xdp_buff xdp, struct page *page, unsigned int *len, u8 *event)
+		 struct xdp_buff xdp, struct page *page, u8 **data_ptr,
+		 unsigned int *len, u8 *event)
 {
 	struct bpf_prog *xdp_prog = READ_ONCE(rxr->xdp_prog);
 	struct bnxt_tx_ring_info *txr;
@@ -255,8 +253,10 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
 		*event &= ~BNXT_RX_EVENT;
 
 	*len = xdp.data_end - xdp.data;
-	if (orig_data != xdp.data)
+	if (orig_data != xdp.data) {
 		offset = xdp.data - xdp.data_hard_start;
+		*data_ptr = xdp.data_hard_start + offset;
+	}
 
 	switch (act) {
 	case XDP_PASS:
@@ -401,10 +401,8 @@ static int bnxt_xdp_set(struct bnxt *bp, struct bpf_prog *prog)
 		netdev_warn(dev, "ethtool rx/tx channels must be combined to support XDP.\n");
 		return -EOPNOTSUPP;
 	}
-	if (prog) {
+	if (prog)
 		tx_xdp = bp->rx_nr_rings;
-		bp->xdp_has_frags = prog->aux->xdp_has_frags;
-	}
 
 	tc = netdev_get_num_tc(dev);
 	if (!tc)
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h +3 -3
index 505911ae095d..ea430d6961df 100644
@@ -18,8 +18,8 @@ struct bnxt_sw_tx_bd *bnxt_xmit_bd(struct bnxt *bp,
 				   struct xdp_buff *xdp);
 void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts);
 bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
-		 struct xdp_buff xdp, struct page *page, unsigned int *len,
-		 u8 *event);
+		 struct xdp_buff xdp, struct page *page, u8 **data_ptr,
+		 unsigned int *len, u8 *event);
 int bnxt_xdp(struct net_device *dev, struct netdev_bpf *xdp);
 int bnxt_xdp_xmit(struct net_device *dev, int num_frames,
 		  struct xdp_frame **frames, u32 flags);
@@ -27,7 +27,7 @@ int bnxt_xdp_xmit(struct net_device *dev, int num_frames,
 bool bnxt_xdp_attached(struct bnxt *bp, struct bnxt_rx_ring_info *rxr);
 
 void bnxt_xdp_buff_init(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
-			u16 cons, u8 **data_ptr, unsigned int *len,
+			u16 cons, u8 *data_ptr, unsigned int len,
 			struct xdp_buff *xdp);
 void bnxt_xdp_buff_frags_free(struct bnxt_rx_ring_info *rxr,
 			      struct xdp_buff *xdp);
drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h +11 -0
index 7d4ae467f3ad..abcd7877f7d2 100644
@@ -233,6 +233,17 @@ struct hclgevf_mbx_arq_ring {
 	__le16 msg_q[HCLGE_MBX_MAX_ARQ_MSG_NUM][HCLGE_MBX_MAX_ARQ_MSG_SIZE];
 };
 
+struct hclge_dev;
+
+#define HCLGE_MBX_OPCODE_MAX 256
+struct hclge_mbx_ops_param {
+	struct hclge_vport *vport;
+	struct hclge_mbx_vf_to_pf_cmd *req;
+	struct hclge_respond_to_vf_msg *resp_msg;
+};
+
+typedef int (*hclge_mbx_ops_fn)(struct hclge_mbx_ops_param *param);
+
 #define hclge_mbx_ring_ptr_move_crq(crq) \
 	(crq->next_to_use = (crq->next_to_use + 1) % crq->desc_num)
 #define hclge_mbx_tail_ptr_move_arq(arq) \
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +4 -6
index 44d4265f109a..d5d7fae354e7 100644
@@ -3813,18 +3813,16 @@ static int hns3_gro_complete(struct sk_buff *skb, u32 l234info)
 	return 0;
 }
 
-static bool hns3_checksum_complete(struct hns3_enet_ring *ring,
+static void hns3_checksum_complete(struct hns3_enet_ring *ring,
 				   struct sk_buff *skb, u32 ptype, u16 csum)
 {
 	if (ptype == HNS3_INVALID_PTYPE ||
 	    hns3_rx_ptype_tbl[ptype].ip_summed != CHECKSUM_COMPLETE)
-		return false;
+		return;
 
 	hns3_ring_stats_update(ring, csum_complete);
 	skb->ip_summed = CHECKSUM_COMPLETE;
 	skb->csum = csum_unfold((__force __sum16)csum);
-
-	return true;
 }
 
 static void hns3_rx_handle_csum(struct sk_buff *skb, u32 l234info,
@@ -3884,8 +3882,7 @@ static void hns3_rx_checksum(struct hns3_enet_ring *ring, struct sk_buff *skb,
 		ptype = hnae3_get_field(ol_info, HNS3_RXD_PTYPE_M,
 					HNS3_RXD_PTYPE_S);
 
-	if (hns3_checksum_complete(ring, skb, ptype, csum))
-		return;
+	hns3_checksum_complete(ring, skb, ptype, csum);
 
 	/* check if hardware has done checksum */
 	if (!(bd_base_info & BIT(HNS3_RXD_L3L4P_B)))
@@ -3894,6 +3891,7 @@ static void hns3_rx_checksum(struct hns3_enet_ring *ring, struct sk_buff *skb,
 	if (unlikely(l234info & (BIT(HNS3_RXD_L3E_B) | BIT(HNS3_RXD_L4E_B) |
 				 BIT(HNS3_RXD_OL3E_B) |
 				 BIT(HNS3_RXD_OL4E_B)))) {
+		skb->ip_summed = CHECKSUM_NONE;
 		hns3_ring_stats_update(ring, l3l4_csum_err);
 
 		return;
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +86 -46

221 lines not on this page · raw message

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h +7 -0
index 18caddd541f8..14473e29fe03 100644
@@ -972,9 +972,15 @@ enum HCLGE_VPORT_STATE {
 	HCLGE_VPORT_STATE_MAC_TBL_CHANGE,
 	HCLGE_VPORT_STATE_PROMISC_CHANGE,
 	HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE,
+	HCLGE_VPORT_STATE_INITED,
 	HCLGE_VPORT_STATE_MAX
 };
 
+enum HCLGE_VPORT_NEED_NOTIFY {
+	HCLGE_VPORT_NEED_NOTIFY_RESET,
+	HCLGE_VPORT_NEED_NOTIFY_VF_VLAN,
+};
+
 struct hclge_vlan_info {
 	u16 vlan_proto; /* so far support 802.1Q only */
 	u16 qos;
@@ -1021,6 +1027,7 @@ struct hclge_vport {
 	struct hnae3_handle roce;
 
 	unsigned long state;
+	unsigned long need_notify;
 	unsigned long last_active_jiffies;
 	u32 mps; /* Max packet size */
 	struct hclge_vf_info vf_info;
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c +335 -151

541 lines not on this page · raw message

drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +2 -1
index 26f87330173e..c551508e6932 100644
@@ -2767,7 +2767,8 @@ static int hclgevf_pci_reset(struct hclgevf_dev *hdev)
 	struct pci_dev *pdev = hdev->pdev;
 	int ret = 0;
 
-	if (hdev->reset_type == HNAE3_VF_FULL_RESET &&
+	if ((hdev->reset_type == HNAE3_VF_FULL_RESET ||
+	     hdev->reset_type == HNAE3_FLR_RESET) &&
 	    test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) {
 		hclgevf_misc_irq_uninit(hdev);
 		hclgevf_uninit_msi(hdev);
drivers/net/ethernet/intel/ice/ice_xsk.c +1 -1
index 056c904b83cc..79fa65d1cf20 100644
@@ -772,7 +772,7 @@ int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring, int budget)
 static void
 ice_clean_xdp_tx_buf(struct ice_tx_ring *xdp_ring, struct ice_tx_buf *tx_buf)
 {
-	xdp_return_frame((struct xdp_frame *)tx_buf->raw_buf);
+	page_frag_free(tx_buf->raw_buf);
 	xdp_ring->xdp_tx_active--;
 	dma_unmap_single(xdp_ring->dev, dma_unmap_addr(tx_buf, dma),
 			 dma_unmap_len(tx_buf, len), DMA_TO_DEVICE);
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c +21 -9
index 9c2baa437c23..2926d754ade8 100644
@@ -977,6 +977,7 @@ static void otx2_pool_refill_task(struct work_struct *work)
 	rbpool = cq->rbpool;
 	free_ptrs = cq->pool_ptrs;
 
+	get_cpu();
 	while (cq->pool_ptrs) {
 		if (otx2_alloc_rbuf(pfvf, rbpool, &bufptr)) {
 			/* Schedule a WQ if we fails to free atleast half of the
@@ -996,6 +997,7 @@ static void otx2_pool_refill_task(struct work_struct *work)
 		pfvf->hw_ops->aura_freeptr(pfvf, qidx, bufptr + OTX2_HEAD_ROOM);
 		cq->pool_ptrs--;
 	}
+	put_cpu();
 	cq->refill_task_sched = false;
 }
 
@@ -1333,6 +1335,7 @@ int otx2_sq_aura_pool_init(struct otx2_nic *pfvf)
 	if (err)
 		goto fail;
 
+	get_cpu();
 	/* Allocate pointers and free them to aura/pool */
 	for (qidx = 0; qidx < hw->tot_tx_queues; qidx++) {
 		pool_id = otx2_get_pool_idx(pfvf, AURA_NIX_SQ, qidx);
@@ -1341,18 +1344,24 @@ int otx2_sq_aura_pool_init(struct otx2_nic *pfvf)
 		sq = &qset->sq[qidx];
 		sq->sqb_count = 0;
 		sq->sqb_ptrs = kcalloc(num_sqbs, sizeof(*sq->sqb_ptrs), GFP_KERNEL);
-		if (!sq->sqb_ptrs)
-			return -ENOMEM;
+		if (!sq->sqb_ptrs) {
+			err = -ENOMEM;
+			goto err_mem;
+		}
 
 		for (ptr = 0; ptr < num_sqbs; ptr++) {
-			if (otx2_alloc_rbuf(pfvf, pool, &bufptr))
-				return -ENOMEM;
+			err = otx2_alloc_rbuf(pfvf, pool, &bufptr);
+			if (err)
+				goto err_mem;
 			pfvf->hw_ops->aura_freeptr(pfvf, pool_id, bufptr);
 			sq->sqb_ptrs[sq->sqb_count++] = (u64)bufptr;
 		}
 	}
 
-	return 0;
+err_mem:
+	put_cpu();
+	return err ? -ENOMEM : 0;
+
 fail:
 	otx2_mbox_reset(&pfvf->mbox.mbox, 0);
 	otx2_aura_pool_free(pfvf);
@@ -1391,18 +1400,21 @@ int otx2_rq_aura_pool_init(struct otx2_nic *pfvf)
 	if (err)
 		goto fail;
 
+	get_cpu();
 	/* Allocate pointers and free them to aura/pool */
 	for (pool_id = 0; pool_id < hw->rqpool_cnt; pool_id++) {
 		pool = &pfvf->qset.pool[pool_id];
 		for (ptr = 0; ptr < num_ptrs; ptr++) {
-			if (otx2_alloc_rbuf(pfvf, pool, &bufptr))
-				return -ENOMEM;
+			err = otx2_alloc_rbuf(pfvf, pool, &bufptr);
+			if (err)
+				goto err_mem;
 			pfvf->hw_ops->aura_freeptr(pfvf, pool_id,
 						   bufptr + OTX2_HEAD_ROOM);
 		}
 	}
-
-	return 0;
+err_mem:
+	put_cpu();
+	return err ? -ENOMEM : 0;
 fail:
 	otx2_mbox_reset(&pfvf->mbox.mbox, 0);
 	otx2_aura_pool_free(pfvf);
drivers/net/ethernet/mellanox/mlx5/core/devlink.c +2 -2
index 66c6a7017695..97e9ec44a759 100644
@@ -468,7 +468,7 @@ static int mlx5_devlink_enable_roce_validate(struct devlink *devlink, u32 id,
 	bool new_state = val.vbool;
 
 	if (new_state && !MLX5_CAP_GEN(dev, roce) &&
-	    !MLX5_CAP_GEN(dev, roce_rw_supported)) {
+	    !(MLX5_CAP_GEN(dev, roce_rw_supported) && MLX5_CAP_GEN_MAX(dev, roce))) {
 		NL_SET_ERR_MSG_MOD(extack, "Device doesn't support RoCE");
 		return -EOPNOTSUPP;
 	}
@@ -563,7 +563,7 @@ static int mlx5_devlink_eq_depth_validate(struct devlink *devlink, u32 id,
 					  union devlink_param_value val,
 					  struct netlink_ext_ack *extack)
 {
-	return (val.vu16 >= 64 && val.vu16 <= 4096) ? 0 : -EINVAL;
+	return (val.vu32 >= 64 && val.vu32 <= 4096) ? 0 : -EINVAL;
 }
 
 static const struct devlink_param mlx5_devlink_params[] = {
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c +1 -6
index 864ce0c393e6..f01f7dfdbcf8 100644
@@ -2080,14 +2080,9 @@ mlx5_tc_ct_init_check_support(struct mlx5e_priv *priv,
 static void
 mlx5_ct_tc_create_dbgfs(struct mlx5_tc_ct_priv *ct_priv)
 {
-	bool is_fdb = ct_priv->ns_type == MLX5_FLOW_NAMESPACE_FDB;
 	struct mlx5_tc_ct_debugfs *ct_dbgfs = &ct_priv->debugfs;
-	char dirname[16] = {};
 
-	if (sscanf(dirname, "ct_%s", is_fdb ? "fdb" : "nic") < 0)
-		return;
-
-	ct_dbgfs->root = debugfs_create_dir(dirname, mlx5_debugfs_get_dev_root(ct_priv->dev));
+	ct_dbgfs->root = debugfs_create_dir("ct", mlx5_debugfs_get_dev_root(ct_priv->dev));
 	debugfs_create_atomic_t("offloaded", 0400, ct_dbgfs->root,
 				&ct_dbgfs->stats.offloaded);
 	debugfs_create_atomic_t("rx_dropped", 0400, ct_dbgfs->root,
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c +8 -1
index ff73d25bc6eb..2aaf8ab857b8 100644
@@ -222,7 +222,7 @@ void mlx5e_tc_encap_flows_del(struct mlx5e_priv *priv,
 	int err;
 
 	list_for_each_entry(flow, flow_list, tmp_list) {
-		if (!mlx5e_is_offloaded_flow(flow) || flow_flag_test(flow, SLOW))
+		if (!mlx5e_is_offloaded_flow(flow))
 			continue;
 
 		attr = mlx5e_tc_get_encap_attr(flow);
@@ -231,6 +231,13 @@ void mlx5e_tc_encap_flows_del(struct mlx5e_priv *priv,
 		esw_attr->dests[flow->tmp_entry_index].flags &= ~MLX5_ESW_DEST_ENCAP_VALID;
 		esw_attr->dests[flow->tmp_entry_index].pkt_reformat = NULL;
 
+		/* Clear pkt_reformat before checking slow path flag. Because
+		 * in next iteration, the same flow is already set slow path
+		 * flag, but still need to clear the pkt_reformat.
+		 */
+		if (flow_flag_test(flow, SLOW))
+			continue;
+
 		/* update from encap rule to slow path rule */
 		spec = &flow->attr->parse_attr->spec;
 		rule = mlx5e_tc_offload_to_slow_path(esw, flow, spec);
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c +5 -0
index f5b26f5a7de4..054d80c4e65c 100644
@@ -273,6 +273,11 @@ static int mlx5e_tc_tun_parse_geneve_options(struct mlx5e_priv *priv,
 		 geneve_tlv_option_0_data, be32_to_cpu(opt_data_key));
 	MLX5_SET(fte_match_set_misc3, misc_3_c,
 		 geneve_tlv_option_0_data, be32_to_cpu(opt_data_mask));
+	if (MLX5_CAP_ESW_FLOWTABLE_FDB(priv->mdev,
+				       ft_field_support.geneve_tlv_option_0_exist)) {
+		MLX5_SET_TO_ONES(fte_match_set_misc, misc_c, geneve_tlv_option_0_exist);
+		MLX5_SET_TO_ONES(fte_match_set_misc, misc_v, geneve_tlv_option_0_exist);
+	}
 
 	spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS_3;
 
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +1 -1
index 6cf6a81775a8..5c16efb8be81 100644
@@ -1146,7 +1146,7 @@ static int mlx5e_alloc_xdpsq(struct mlx5e_channel *c,
 	sq->channel   = c;
 	sq->uar_map   = mdev->mlx5e_res.hw_objs.bfreg.map;
 	sq->min_inline_mode = params->tx_min_inline_mode;
-	sq->hw_mtu    = MLX5E_SW2HW_MTU(params, params->sw_mtu);
+	sq->hw_mtu    = MLX5E_SW2HW_MTU(params, params->sw_mtu) - ETH_FCS_LEN;
 	sq->xsk_pool  = xsk_pool;
 
 	sq->stats = sq->xsk_pool ?
drivers/net/ethernet/mellanox/mlx5/core/esw/acl/egress_lgcy.c +6 -1
index 60a73990017c..6b4c9ffad95b 100644
@@ -67,6 +67,7 @@ static void esw_acl_egress_lgcy_groups_destroy(struct mlx5_vport *vport)
 int esw_acl_egress_lgcy_setup(struct mlx5_eswitch *esw,
 			      struct mlx5_vport *vport)
 {
+	bool vst_mode_steering = esw_vst_mode_is_steering(esw);
 	struct mlx5_flow_destination drop_ctr_dst = {};
 	struct mlx5_flow_destination *dst = NULL;
 	struct mlx5_fc *drop_counter = NULL;
@@ -77,6 +78,7 @@ int esw_acl_egress_lgcy_setup(struct mlx5_eswitch *esw,
 	 */
 	int table_size = 2;
 	int dest_num = 0;
+	int actions_flag;
 	int err = 0;
 
 	if (vport->egress.legacy.drop_counter) {
@@ -119,8 +121,11 @@ int esw_acl_egress_lgcy_setup(struct mlx5_eswitch *esw,
 		  vport->vport, vport->info.vlan, vport->info.qos);
 
 	/* Allowed vlan rule */
+	actions_flag = MLX5_FLOW_CONTEXT_ACTION_ALLOW;
+	if (vst_mode_steering)
+		actions_flag |= MLX5_FLOW_CONTEXT_ACTION_VLAN_POP;
 	err = esw_egress_acl_vlan_create(esw, vport, NULL, vport->info.vlan,
-					 MLX5_FLOW_CONTEXT_ACTION_ALLOW);
+					 actions_flag);
 	if (err)
 		goto out;
 
drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c +28 -5
index b1a5199260f6..093ed86a0acd 100644
@@ -139,11 +139,14 @@ static void esw_acl_ingress_lgcy_groups_destroy(struct mlx5_vport *vport)
 int esw_acl_ingress_lgcy_setup(struct mlx5_eswitch *esw,
 			       struct mlx5_vport *vport)
 {
+	bool vst_mode_steering = esw_vst_mode_is_steering(esw);
 	struct mlx5_flow_destination drop_ctr_dst = {};
 	struct mlx5_flow_destination *dst = NULL;
 	struct mlx5_flow_act flow_act = {};
 	struct mlx5_flow_spec *spec = NULL;
 	struct mlx5_fc *counter = NULL;
+	bool vst_check_cvlan = false;
+	bool vst_push_cvlan = false;
 	/* The ingress acl table contains 4 groups
 	 * (2 active rules at the same time -
 	 *      1 allow rule from one of the first 3 groups.
@@ -203,7 +206,26 @@ int esw_acl_ingress_lgcy_setup(struct mlx5_eswitch *esw,
 		goto out;
 	}
 
-	if (vport->info.vlan || vport->info.qos)
+	if ((vport->info.vlan || vport->info.qos)) {
+		if (vst_mode_steering)
+			vst_push_cvlan = true;
+		else if (!MLX5_CAP_ESW(esw->dev, vport_cvlan_insert_always))
+			vst_check_cvlan = true;
+	}
+
+	if (vst_check_cvlan || vport->info.spoofchk)
+		spec->match_criteria_enable = MLX5_MATCH_OUTER_HEADERS;
+
+	/* Create ingress allow rule */
+	flow_act.action = MLX5_FLOW_CONTEXT_ACTION_ALLOW;
+	if (vst_push_cvlan) {
+		flow_act.action |= MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH;
+		flow_act.vlan[0].prio = vport->info.qos;
+		flow_act.vlan[0].vid = vport->info.vlan;
+		flow_act.vlan[0].ethtype = ETH_P_8021Q;
+	}
+
+	if (vst_check_cvlan)
 		MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria,
 				 outer_headers.cvlan_tag);
 
@@ -218,9 +240,6 @@ int esw_acl_ingress_lgcy_setup(struct mlx5_eswitch *esw,
 		ether_addr_copy(smac_v, vport->info.mac);
 	}
 
-	/* Create ingress allow rule */
-	spec->match_criteria_enable = MLX5_MATCH_OUTER_HEADERS;
-	flow_act.action = MLX5_FLOW_CONTEXT_ACTION_ALLOW;
 	vport->ingress.allow_rule = mlx5_add_flow_rules(vport->ingress.acl, spec,
 							&flow_act, NULL, 0);
 	if (IS_ERR(vport->ingress.allow_rule)) {
@@ -232,6 +251,9 @@ int esw_acl_ingress_lgcy_setup(struct mlx5_eswitch *esw,
 		goto out;
 	}
 
+	if (!vst_check_cvlan && !vport->info.spoofchk)
+		goto out;
+
 	memset(&flow_act, 0, sizeof(flow_act));
 	flow_act.action = MLX5_FLOW_CONTEXT_ACTION_DROP;
 	/* Attach drop flow counter */
@@ -257,7 +279,8 @@ int esw_acl_ingress_lgcy_setup(struct mlx5_eswitch *esw,
 	return 0;
 
 out:
-	esw_acl_ingress_lgcy_cleanup(esw, vport);
+	if (err)
+		esw_acl_ingress_lgcy_cleanup(esw, vport);
 	kvfree(spec);
 	return err;
 }
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +21 -9
index 59cffa49e4b5..940e893f3f09 100644
@@ -161,10 +161,17 @@ static int modify_esw_vport_cvlan(struct mlx5_core_dev *dev, u16 vport,
 			 esw_vport_context.vport_cvlan_strip, 1);
 
 	if (set_flags & SET_VLAN_INSERT) {
-		/* insert only if no vlan in packet */
-		MLX5_SET(modify_esw_vport_context_in, in,
-			 esw_vport_context.vport_cvlan_insert, 1);
-
+		if (MLX5_CAP_ESW(dev, vport_cvlan_insert_always)) {
+			/* insert either if vlan exist in packet or not */
+			MLX5_SET(modify_esw_vport_context_in, in,
+				 esw_vport_context.vport_cvlan_insert,
+				 MLX5_VPORT_CVLAN_INSERT_ALWAYS);
+		} else {
+			/* insert only if no vlan in packet */
+			MLX5_SET(modify_esw_vport_context_in, in,
+				 esw_vport_context.vport_cvlan_insert,
+				 MLX5_VPORT_CVLAN_INSERT_WHEN_NO_CVLAN);
+		}
 		MLX5_SET(modify_esw_vport_context_in, in,
 			 esw_vport_context.cvlan_pcp, qos);
 		MLX5_SET(modify_esw_vport_context_in, in,
@@ -774,6 +781,7 @@ static void esw_vport_cleanup_acl(struct mlx5_eswitch *esw,
 
 static int esw_vport_setup(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
+	bool vst_mode_steering = esw_vst_mode_is_steering(esw);
 	u16 vport_num = vport->vport;
 	int flags;
 	int err;
@@ -800,8 +808,9 @@ static int esw_vport_setup(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 
 	flags = (vport->info.vlan || vport->info.qos) ?
 		SET_VLAN_STRIP | SET_VLAN_INSERT : 0;
-	modify_esw_vport_cvlan(esw->dev, vport_num, vport->info.vlan,
-			       vport->info.qos, flags);
+	if (esw->mode == MLX5_ESWITCH_OFFLOADS || !vst_mode_steering)
+		modify_esw_vport_cvlan(esw->dev, vport_num, vport->info.vlan,
+				       vport->info.qos, flags);
 
 	return 0;
 }
@@ -1806,6 +1815,7 @@ int __mlx5_eswitch_set_vport_vlan(struct mlx5_eswitch *esw,
 				  u16 vport, u16 vlan, u8 qos, u8 set_flags)
 {
 	struct mlx5_vport *evport = mlx5_eswitch_get_vport(esw, vport);
+	bool vst_mode_steering = esw_vst_mode_is_steering(esw);
 	int err = 0;
 
 	if (IS_ERR(evport))
@@ -1813,9 +1823,11 @@ int __mlx5_eswitch_set_vport_vlan(struct mlx5_eswitch *esw,
 	if (vlan > 4095 || qos > 7)
 		return -EINVAL;
 
-	err = modify_esw_vport_cvlan(esw->dev, vport, vlan, qos, set_flags);
-	if (err)
-		return err;
+	if (esw->mode == MLX5_ESWITCH_OFFLOADS || !vst_mode_steering) {
+		err = modify_esw_vport_cvlan(esw->dev, vport, vlan, qos, set_flags);
+		if (err)
+			return err;
+	}
 
 	evport->info.vlan = vlan;
 	evport->info.qos = qos;
drivers/net/ethernet/mellanox/mlx5/core/eswitch.h +6 -0
index 5ceed4e6c658..03080e8161cb 100644
@@ -513,6 +513,12 @@ int mlx5_eswitch_del_vlan_action(struct mlx5_eswitch *esw,
 int __mlx5_eswitch_set_vport_vlan(struct mlx5_eswitch *esw,
 				  u16 vport, u16 vlan, u8 qos, u8 set_flags);
 
+static inline bool esw_vst_mode_is_steering(struct mlx5_eswitch *esw)
+{
+	return (MLX5_CAP_ESW_EGRESS_ACL(esw->dev, pop_vlan) &&
+		MLX5_CAP_ESW_INGRESS_ACL(esw->dev, push_vlan));
+}
+
 static inline bool mlx5_eswitch_vlan_actions_supported(struct mlx5_core_dev *dev,
 						       u8 vlan_depth)
 {
drivers/net/ethernet/mellanox/mlx5/core/health.c +6 -0
index 2cf2c9948446..0ed239eadf39 100644
@@ -674,6 +674,12 @@ static void mlx5_fw_fatal_reporter_err_work(struct work_struct *work)
 	dev = container_of(priv, struct mlx5_core_dev, priv);
 	devlink = priv_to_devlink(dev);
 
+	mutex_lock(&dev->intf_state_mutex);
+	if (test_bit(MLX5_DROP_NEW_HEALTH_WORK, &health->flags)) {
+		mlx5_core_err(dev, "health works are not permitted at this stage\n");
+		return;
+	}
+	mutex_unlock(&dev->intf_state_mutex);
 	enter_error_state(dev, false);
 	if (IS_ERR_OR_NULL(health->fw_fatal_reporter)) {
 		devl_lock(devlink);
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c +4 -0
index c02b7b08fb4c..2032d5c0ad86 100644
@@ -70,6 +70,10 @@ static void mlx5i_build_nic_params(struct mlx5_core_dev *mdev,
 	params->packet_merge.type = MLX5E_PACKET_MERGE_NONE;
 	params->hard_mtu = MLX5_IB_GRH_BYTES + MLX5_IPOIB_HARD_LEN;
 	params->tunneled_offload_en = false;
+
+	/* CQE compression is not supported for IPoIB */
+	params->rx_cqe_compress_def = false;
+	MLX5E_SET_PFLAG(params, MLX5E_PFLAG_RX_CQE_COMPRESS, params->rx_cqe_compress_def);
 }
 
 /* Called directly after IPoIB netdevice was created to initialize SW structs */
drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c +1 -0
index bbe810f3b373..c142011d2097 100644
@@ -201,6 +201,7 @@ static void mlx5_ldev_free(struct kref *ref)
 	if (ldev->nb.notifier_call)
 		unregister_netdevice_notifier_net(&init_net, &ldev->nb);
 	mlx5_lag_mp_cleanup(ldev);
+	cancel_delayed_work_sync(&ldev->bond_work);
 	destroy_workqueue(ldev->wq);
 	mlx5_lag_mpesw_cleanup(ldev);
 	mutex_destroy(&ldev->lock);
drivers/net/ethernet/mellanox/mlx5/core/main.c +3 -1
index ac178796e484..0a2f23a7082a 100644
@@ -614,7 +614,7 @@ static int handle_hca_cap(struct mlx5_core_dev *dev, void *set_ctx)
 		MLX5_SET(cmd_hca_cap, set_hca_cap, num_total_dynamic_vf_msix,
 			 MLX5_CAP_GEN_MAX(dev, num_total_dynamic_vf_msix));
 
-	if (MLX5_CAP_GEN(dev, roce_rw_supported))
+	if (MLX5_CAP_GEN(dev, roce_rw_supported) && MLX5_CAP_GEN_MAX(dev, roce))
 		MLX5_SET(cmd_hca_cap, set_hca_cap, roce,
 			 mlx5_is_roce_on(dev));
 
@@ -1017,6 +1017,8 @@ static int mlx5_init_once(struct mlx5_core_dev *dev)
 err_tables_cleanup:
 	mlx5_geneve_destroy(dev->geneve);
 	mlx5_vxlan_destroy(dev->vxlan);
+	mlx5_cleanup_clock(dev);
+	mlx5_cleanup_reserved_gids(dev);
 	mlx5_cq_debugfs_cleanup(dev);
 	mlx5_fw_reset_cleanup(dev);
 err_events_cleanup:
drivers/net/ethernet/microchip/lan966x/lan966x_port.c +1 -1
index f141644e4372..26c5cdf373c4 100644
@@ -369,7 +369,7 @@ int lan966x_port_pcs_set(struct lan966x_port *port,
 	}
 
 	/* Take PCS out of reset */
-	lan_rmw(DEV_CLOCK_CFG_LINK_SPEED_SET(2) |
+	lan_rmw(DEV_CLOCK_CFG_LINK_SPEED_SET(LAN966X_SPEED_1000) |
 		DEV_CLOCK_CFG_PCS_RX_RST_SET(0) |
 		DEV_CLOCK_CFG_PCS_TX_RST_SET(0),
 		DEV_CLOCK_CFG_LINK_SPEED |
drivers/net/ethernet/microchip/sparx5/sparx5_main.c +1 -1
index e58de119186a..a2d0631f7ac7 100644
@@ -819,7 +819,7 @@ static int mchp_sparx5_probe(struct platform_device *pdev)
 	if (err)
 		goto cleanup_config;
 
-	if (!of_get_mac_address(np, sparx5->base_mac)) {
+	if (of_get_mac_address(np, sparx5->base_mac)) {
 		dev_info(sparx5->dev, "MAC addr was not set, use random MAC\n");
 		eth_random_addr(sparx5->base_mac);
 		sparx5->base_mac[5] = 0;
drivers/net/ethernet/qlogic/qed/qed_debug.c +20 -8
index 86ecb080b153..cdcead614e9f 100644
@@ -1832,7 +1832,8 @@ static enum dbg_status qed_find_nvram_image(struct qed_hwfn *p_hwfn,
 					    struct qed_ptt *p_ptt,
 					    u32 image_type,
 					    u32 *nvram_offset_bytes,
-					    u32 *nvram_size_bytes)
+					    u32 *nvram_size_bytes,
+					    bool b_can_sleep)
 {
 	u32 ret_mcp_resp, ret_mcp_param, ret_txn_size;
 	struct mcp_file_att file_att;
@@ -1846,7 +1847,8 @@ static enum dbg_status qed_find_nvram_image(struct qed_hwfn *p_hwfn,
 					&ret_mcp_resp,
 					&ret_mcp_param,
 					&ret_txn_size,
-					(u32 *)&file_att, false);
+					(u32 *)&file_att,
+					b_can_sleep);
 
 	/* Check response */
 	if (nvm_result || (ret_mcp_resp & FW_MSG_CODE_MASK) !=
@@ -1873,7 +1875,9 @@ static enum dbg_status qed_find_nvram_image(struct qed_hwfn *p_hwfn,
 static enum dbg_status qed_nvram_read(struct qed_hwfn *p_hwfn,
 				      struct qed_ptt *p_ptt,
 				      u32 nvram_offset_bytes,
-				      u32 nvram_size_bytes, u32 *ret_buf)
+				      u32 nvram_size_bytes,
+				      u32 *ret_buf,
+				      bool b_can_sleep)
 {
 	u32 ret_mcp_resp, ret_mcp_param, ret_read_size, bytes_to_copy;
 	s32 bytes_left = nvram_size_bytes;
@@ -1899,7 +1903,7 @@ static enum dbg_status qed_nvram_read(struct qed_hwfn *p_hwfn,
 				       &ret_mcp_resp,
 				       &ret_mcp_param, &ret_read_size,
 				       (u32 *)((u8 *)ret_buf + read_offset),
-				       false))
+				       b_can_sleep))
 			return DBG_STATUS_NVRAM_READ_FAILED;
 
 		/* Check response */
@@ -3380,7 +3384,8 @@ static u32 qed_grc_dump_mcp_hw_dump(struct qed_hwfn *p_hwfn,
 				      p_ptt,
 				      NVM_TYPE_HW_DUMP_OUT,
 				      &hw_dump_offset_bytes,
-				      &hw_dump_size_bytes);
+				      &hw_dump_size_bytes,
+				      false);
 	if (status != DBG_STATUS_OK)
 		return 0;
 
@@ -3397,7 +3402,9 @@ static u32 qed_grc_dump_mcp_hw_dump(struct qed_hwfn *p_hwfn,
 		status = qed_nvram_read(p_hwfn,
 					p_ptt,
 					hw_dump_offset_bytes,
-					hw_dump_size_bytes, dump_buf + offset);
+					hw_dump_size_bytes,
+					dump_buf + offset,
+					false);
 		if (status != DBG_STATUS_OK) {
 			DP_NOTICE(p_hwfn,
 				  "Failed to read MCP HW Dump image from NVRAM\n");
@@ -4123,7 +4130,9 @@ static enum dbg_status qed_mcp_trace_get_meta_info(struct qed_hwfn *p_hwfn,
 	return qed_find_nvram_image(p_hwfn,
 				    p_ptt,
 				    nvram_image_type,
-				    trace_meta_offset, trace_meta_size);
+				    trace_meta_offset,
+				    trace_meta_size,
+				    true);
 }
 
 /* Reads the MCP Trace meta data from NVRAM into the specified buffer */
@@ -4139,7 +4148,10 @@ static enum dbg_status qed_mcp_trace_read_meta(struct qed_hwfn *p_hwfn,
 	/* Read meta data from NVRAM */
 	status = qed_nvram_read(p_hwfn,
 				p_ptt,
-				nvram_offset_in_bytes, size_in_bytes, buf);
+				nvram_offset_in_bytes,
+				size_in_bytes,
+				buf,
+				true);
 	if (status != DBG_STATUS_OK)
 		return status;
 
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +7 -1
index dbb800769cb6..c95d56e56c59 100644
@@ -2505,7 +2505,13 @@ int qlcnic_83xx_init(struct qlcnic_adapter *adapter)
 		goto disable_mbx_intr;
 
 	qlcnic_83xx_clear_function_resources(adapter);
-	qlcnic_dcb_enable(adapter->dcb);
+
+	err = qlcnic_dcb_enable(adapter->dcb);
+	if (err) {
+		qlcnic_dcb_free(adapter->dcb);
+		goto disable_mbx_intr;
+	}
+
 	qlcnic_83xx_initialize_nic(adapter, 1);
 	qlcnic_dcb_get_info(adapter->dcb);
 
drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h +2 -8
index 7519773eaca6..22afa2be85fd 100644
@@ -41,11 +41,6 @@ struct qlcnic_dcb {
 	unsigned long			state;
 };
 
-static inline void qlcnic_clear_dcb_ops(struct qlcnic_dcb *dcb)
-{
-	kfree(dcb);
-}
-
 static inline int qlcnic_dcb_get_hw_capability(struct qlcnic_dcb *dcb)
 {
 	if (dcb && dcb->ops->get_hw_capability)
@@ -112,9 +107,8 @@ static inline void qlcnic_dcb_init_dcbnl_ops(struct qlcnic_dcb *dcb)
 		dcb->ops->init_dcbnl_ops(dcb);
 }
 
-static inline void qlcnic_dcb_enable(struct qlcnic_dcb *dcb)
+static inline int qlcnic_dcb_enable(struct qlcnic_dcb *dcb)
 {
-	if (dcb && qlcnic_dcb_attach(dcb))
-		qlcnic_clear_dcb_ops(dcb);
+	return dcb ? qlcnic_dcb_attach(dcb) : 0;
 }
 #endif
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +7 -1
index 28476b982bab..44dac3c0908e 100644
@@ -2599,7 +2599,13 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 			 "Device does not support MSI interrupts\n");
 
 	if (qlcnic_82xx_check(adapter)) {
-		qlcnic_dcb_enable(adapter->dcb);
+		err = qlcnic_dcb_enable(adapter->dcb);
+		if (err) {
+			qlcnic_dcb_free(adapter->dcb);
+			dev_err(&pdev->dev, "Failed to enable DCB\n");
+			goto err_out_free_hw;
+		}
+
 		qlcnic_dcb_get_info(adapter->dcb);
 		err = qlcnic_setup_intr(adapter);
 
drivers/net/phy/xilinx_gmii2rgmii.c +1 -0
index 8dcb49ed1f3d..7fd9fe6a602b 100644
@@ -105,6 +105,7 @@ static int xgmiitorgmii_probe(struct mdio_device *mdiodev)
 
 	if (!priv->phy_dev->drv) {
 		dev_info(dev, "Attached phy not ready\n");
+		put_device(&priv->phy_dev->mdio.dev);
 		return -EPROBE_DEFER;
 	}
 
drivers/net/usb/rndis_host.c +2 -1
index f79333fe1783..7b3739b29c8f 100644
@@ -255,7 +255,8 @@ static int rndis_query(struct usbnet *dev, struct usb_interface *intf,
 
 	off = le32_to_cpu(u.get_c->offset);
 	len = le32_to_cpu(u.get_c->len);
-	if (unlikely((8 + off + len) > CONTROL_BUFFER_SIZE))
+	if (unlikely((off > CONTROL_BUFFER_SIZE - 8) ||
+		     (len > CONTROL_BUFFER_SIZE - 8 - off)))
 		goto response_error;
 
 	if (*reply_len != -1 && len != *reply_len)
drivers/net/veth.c +3 -2
index 466da01ba2e3..909427d99a59 100644
@@ -974,6 +974,9 @@ static int veth_poll(struct napi_struct *napi, int budget)
 	xdp_set_return_frame_no_direct();
 	done = veth_xdp_rcv(rq, budget, &bq, &stats);
 
+	if (stats.xdp_redirect > 0)
+		xdp_do_flush();
+
 	if (done < budget && napi_complete_done(napi, done)) {
 		/* Write rx_notify_masked before reading ptr_ring */
 		smp_store_mb(rq->rx_notify_masked, false);
@@ -987,8 +990,6 @@ static int veth_poll(struct napi_struct *napi, int budget)
 
 	if (stats.xdp_tx > 0)
 		veth_xdp_flush(rq, &bq);
-	if (stats.xdp_redirect > 0)
-		xdp_do_flush();
 	xdp_clear_return_frame_no_direct();
 
 	return done;
drivers/net/vmxnet3/vmxnet3_drv.c +8 -0
index c28c4a654615..c312d16f580c 100644
@@ -1288,6 +1288,10 @@ vmxnet3_rx_csum(struct vmxnet3_adapter *adapter,
 		    (le32_to_cpu(gdesc->dword[3]) &
 		     VMXNET3_RCD_CSUM_OK) == VMXNET3_RCD_CSUM_OK) {
 			skb->ip_summed = CHECKSUM_UNNECESSARY;
+			if ((le32_to_cpu(gdesc->dword[0]) &
+				     (1UL << VMXNET3_RCD_HDR_INNER_SHIFT))) {
+				skb->csum_level = 1;
+			}
 			WARN_ON_ONCE(!(gdesc->rcd.tcp || gdesc->rcd.udp) &&
 				     !(le32_to_cpu(gdesc->dword[0]) &
 				     (1UL << VMXNET3_RCD_HDR_INNER_SHIFT)));
@@ -1297,6 +1301,10 @@ vmxnet3_rx_csum(struct vmxnet3_adapter *adapter,
 		} else if (gdesc->rcd.v6 && (le32_to_cpu(gdesc->dword[3]) &
 					     (1 << VMXNET3_RCD_TUC_SHIFT))) {
 			skb->ip_summed = CHECKSUM_UNNECESSARY;
+			if ((le32_to_cpu(gdesc->dword[0]) &
+				     (1UL << VMXNET3_RCD_HDR_INNER_SHIFT))) {
+				skb->csum_level = 1;
+			}
 			WARN_ON_ONCE(!(gdesc->rcd.tcp || gdesc->rcd.udp) &&
 				     !(le32_to_cpu(gdesc->dword[0]) &
[… more lines in the raw message]

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

drivers/net/vrf.c +3 -3
index 5df7a0abc39d..f7f40e3fe9cc 100644

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

drivers/net/vxlan/vxlan_core.c +13 -6
index c3285242f74f..a03752ef544f 100644

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

drivers/net/wireless/ath/ath9k/htc.h +7 -7
index 30f0765fb9fd..237f4ec2cffd 100644

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

drivers/nvme/host/core.c +26 -6
index 3582a28a1dce..f06bae83e8ee 100644

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

drivers/nvme/host/nvme.h +1 -1
index 70555022cb44..35352206b5de 100644

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

drivers/nvme/target/admin-cmd.c +19 -16
index fc8a957fad0a..4aaa27cc8d2b 100644

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

drivers/of/fdt.c +4 -2
index 1c573e7a60bc..f4bfaf1669fb 100644

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

drivers/phy/qualcomm/phy-qcom-qmp-combo.c +13 -7
index 0feda8eb93b5..5e011520650d 100644

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

drivers/thermal/intel/int340x_thermal/processor_thermal_rfim.c +4 -0
index 8c42e7662033..92ed1213fe37 100644

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

drivers/usb/dwc3/dwc3-xilinx.c +1 -0
index 67b237c7a76a..550ae64350df 100644

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

drivers/usb/dwc3/gadget.c +4 -1
index c2075b90f3df..40f75ba53e80 100644

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

drivers/vdpa/mlx5/net/mlx5_vnet.c +6 -4
index 90913365def4..444d6572b2d0 100644

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

drivers/vdpa/vdpa_sim/vdpa_sim.c +4 -3
index 225b7f5d8be3..6489f44bca1a 100644

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

drivers/vdpa/vdpa_sim/vdpa_sim_blk.c +3 -1
index c8bfea3b7db2..cc0534f8ae93 100644

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

drivers/vdpa/vdpa_sim/vdpa_sim_net.c +3 -1
index 886449e88502..c2e19dd06419 100644

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

drivers/vdpa/virtio_pci/vp_vdpa.c +1 -1
index 04522077735b..f4e375b1d903 100644

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

drivers/vhost/vdpa.c +31 -21

52 lines not on this page · raw message

drivers/vhost/vhost.c +2 -2
index 40097826cff0..3c2359570df9 100644

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

drivers/vhost/vringh.c +2 -3
index 11f59dd06a74..828c29306565 100644

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

drivers/vhost/vsock.c +8 -1
index 5703775af129..10a7d23731fe 100644

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

drivers/video/fbdev/matrox/matroxfb_base.c +2 -2
index 68bba2688f4c..3d1bca3bcd4f 100644

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

fs/btrfs/block-rsv.c +1 -0
index 06be0644dd37..6ce704d3bdd2 100644

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

fs/btrfs/ctree.h +4 -26
index bad06add93d7..8e77acdecd25 100644

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

fs/btrfs/disk-io.c +166 -105

271 lines not on this page · raw message

fs/btrfs/disk-io.h +7 -2
index 47ad8e0a2d33..7322af63c0cc 100644

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

fs/btrfs/extent_io.c +10 -1
index cf4f19e80e2f..0982995177a6 100644

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

fs/btrfs/ioctl.c +3 -6
index 4fff0067bd2a..c498d5e164eb 100644

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

fs/btrfs/rcu-string.h +5 -1
index 5c1a617eb25d..5c2b66d155ef 100644

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

fs/btrfs/super.c +79 -16

95 lines not on this page · raw message

fs/btrfs/sysfs.c +2 -0
index 00b97e6eb507..897367ba68d2 100644

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

fs/btrfs/transaction.c +0 -8
index 0bec10740ad3..8fab3b274957 100644

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

fs/btrfs/tree-defrag.c +4 -2
index b6cf39f4e7e4..072ab9a1374b 100644

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

fs/btrfs/volumes.c +1 -1
index 6f006430115a..55c8bf9a5c89 100644

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

fs/ceph/caps.c +1 -1
index 02b5c0ac5654..af8dbcf932ab 100644

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

fs/ceph/locks.c +0 -4
index 3e2843e86e27..b191426bf880 100644

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

fs/ceph/super.h +0 -1
index 40630e6f691c..ae4126f63410 100644

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

fs/cifs/sess.c +2 -1
index 5d93154572c0..4ef2d08de5b6 100644

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

fs/cifs/smb2ops.c +2 -1
index 74052b51655e..05c9c75360fa 100644

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

fs/ext4/super.c +10 -9
index 2eae6e038f38..ac083526c115 100644

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

fs/hfs/inode.c +10 -5
index a0746be3c1de..80d17c520d0b 100644

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

fs/ksmbd/auth.c +2 -1
index c5a5c7b90d72..93b2290addd5 100644

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

fs/ksmbd/connection.c +5 -2
index 756ad631c019..eab9950b5a68 100644

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

fs/ksmbd/smb2pdu.c +5 -2
index 7a9497a7b0a3..a71a7cc0e576 100644

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

fs/ksmbd/transport_tcp.c +4 -1
index 143bba4e4db8..434891db42a2 100644

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

fs/locks.c +23 -0
index 607f94a0e789..7dc129cc1a26 100644

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

fs/nfsd/nfs4xdr.c +11 -0
index 2960d0a8e8f9..355164a52754 100644

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

fs/nfsd/nfssvc.c +1 -1
index 4bb5baa17040..011c556caa1e 100644

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

fs/ntfs3/file.c +2 -2
index 4f2ffc7ef296..f31c0389a2e7 100644

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

fs/udf/inode.c +1 -1
index b9a83820e1ad..3c380140515d 100644

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

include/linux/dsa/tag_qca.h +2 -2
index b1b5720d89a5..ee657452f122 100644

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

include/linux/efi.h +0 -2
index f87b2f5db9f8..4f51616f01b2 100644

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

include/linux/fs.h +6 -0
index 8e79a761c56c..17a1a57adbe0 100644

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

include/linux/mlx5/device.h +5 -0
index b5f58fd37a0f..4b00221f57e2 100644

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

include/linux/mlx5/mlx5_ifc.h +2 -1
index 4acd5610e96b..e640c27b1b6d 100644

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

include/linux/netfilter/ipset/ip_set.h +1 -1
index ada1296c87d5..72f5ebc5c97a 100644

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

include/linux/sunrpc/rpc_pipe_fs.h +5 -0
index cd188a527d16..3b35b6f6533a 100644

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

include/net/netfilter/nf_tables.h +24 -1
index cdb7db9b0e25..1daededfa75e 100644

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

include/uapi/linux/btrfs.h +6 -0
index 7ada84e4a3ed..5655e89b962b 100644

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

io_uring/io_uring.c +6 -5
index b8a39be3bcb4..9c49a1a4ceda 100644

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

kernel/bpf/trampoline.c +4 -0
index 41b67eb83ab3..2fb6d8e196e6 100644

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

net/9p/client.c +8 -7
index 8464d95805d0..1f50dce8765d 100644

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

net/9p/trans_fd.c +6 -6
index 080b5de3e1ed..a2eb1363d293 100644

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

net/9p/trans_rdma.c +2 -2
index d817d3745238..d8b0a6f3b15e 100644

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

net/9p/trans_virtio.c +5 -4
index b84d35cf6899..947c038a0470 100644

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

net/9p/trans_xen.c +2 -2
index 0f862d5a5960..a103aed85465 100644

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

net/caif/cfctrl.c +5 -1
index 2809cbd6b7f7..d8cb4b2a076b 100644

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

net/core/filter.c +5 -2
index 3aae1885b970..50d685be517d 100644

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

net/ipv4/inet_connection_sock.c +14 -0
index 971969cc7e17..fb01211a255b 100644

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

net/ipv4/tcp_ulp.c +4 -0
index 9ae50b1bd844..05b6077b9f2c 100644

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

net/mptcp/protocol.c +1 -1
index 42d5e0a7952a..a2cc25cca33e 100644

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

net/mptcp/protocol.h +1 -1
index c1eaa1685592..df6937c8cf54 100644

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

net/mptcp/subflow.c +17 -2
index 613f515fedf0..9d3701fdb293 100644

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

net/netfilter/ipset/ip_set_core.c +4 -3
index 6b31746f9be3..751ac89b07a5 100644

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

net/netfilter/ipset/ip_set_hash_ip.c +7 -7
index 75d556d71652..24adcdd7a0b1 100644

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

net/netfilter/ipset/ip_set_hash_ipmark.c +7 -6
index 153de3457423..a22ec1a6f6ec 100644

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

net/netfilter/ipset/ip_set_hash_ipport.c +7 -6
index 7303138e46be..10481760a9b2 100644

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

net/netfilter/ipset/ip_set_hash_ipportip.c +7 -6
index 334fb1ad0e86..39a01934b153 100644

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

net/netfilter/ipset/ip_set_hash_ipportnet.c +8 -5
index 7df94f437f60..5c6de605a9fb 100644

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

net/netfilter/ipset/ip_set_hash_net.c +7 -10
index 1422739d9aa2..ce0a9ce5a91f 100644

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

net/netfilter/ipset/ip_set_hash_netiface.c +6 -9
index 9810f5bf63f5..031073286236 100644

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

net/netfilter/ipset/ip_set_hash_netnet.c +7 -16
index 3d09eefe998a..c07b70bf32db 100644

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

net/netfilter/ipset/ip_set_hash_netport.c +7 -12
index 09cf72eb37f8..d1a0628df4ef 100644

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

net/netfilter/ipset/ip_set_hash_netportnet.c +21 -19
index 19bcdb3141f6..005a7ce87217 100644

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

net/netfilter/nf_tables_api.c +175 -86

261 lines not on this page · raw message

net/nfc/netlink.c +38 -14

52 lines not on this page · raw message

net/sched/cls_tcindex.c +2 -10
index 742c7d49a958..8d1ef858db87 100644

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

net/sched/sch_atm.c +4 -1
index 816fd0d7ba38..28e1897e0da7 100644

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

net/sched/sch_cbq.c +2 -2
index ba99ce05cd52..5d9f4f259d69 100644

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

net/sunrpc/auth_gss/auth_gss.c +17 -2
index 7bb247c51e2f..2d7b1e03110a 100644

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

sound/soc/intel/boards/bytcr_rt5640.c +15 -0
index fb9d9e271845..ddd2625bed90 100644

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

sound/soc/sof/core.c +0 -9
index c99b5e6c026c..694a2d94a222 100644

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

sound/soc/sof/intel/hda-dsp.c +72 -0

72 lines not on this page · raw message

sound/soc/sof/intel/hda.h +1 -0
index 5ef3e8775e36..554891e78cca 100644

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

sound/soc/sof/intel/tgl.c +1 -1
index 6dfb4786c782..0173e5b255da 100644

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

sound/soc/sof/mediatek/mtk-adsp-common.c +1 -1
index 1e0769c668a7..de8dbe27cd0d 100644

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

tools/perf/builtin-lock.c +2 -0
index ea40ae52cd2c..2bc9231d86b6 100644

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

tools/perf/util/bpf_counter_cgroup.c +3 -11
index 3c2df7522f6f..1c82377ed78b 100644

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

tools/perf/util/cgroup.c +18 -5
index e99b41f9be45..cd978c240e0d 100644

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

tools/perf/util/data.c +2 -0
index a7f68c309545..fc16299c915f 100644

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

tools/perf/util/dwarf-aux.c +5 -18
index 609ca1671501..623527edeac1 100644

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

tools/testing/selftests/net/arp_ndisc_evict_nocarrier.sh +11 -4
index b5af08af8559..4a110bb01e53 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.