Linux 5.10.30
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.30 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/net/ethernet-controller.yaml | 2 Makefile | 2 arch/arm/boot/dts/armada-385-turris-omnia.dts | 1 arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi | 2 arch/arm/mach-omap2/omap-secure.c | 39 ++ arch/arm/mach-omap2/omap-secure.h | 1 arch/arm/mach-omap2/pmic-cpcap.c | 4 arch/arm64/boot/dts/freescale/imx8mm-pinfunc.h | 2 arch/arm64/boot/dts/freescale/imx8mq-pinfunc.h | 2 arch/ia64/include/asm/ptrace.h | 8 arch/nds32/mm/cacheflush.c | 2 arch/parisc/include/asm/cmpxchg.h | 2 arch/s390/kernel/cpcmd.c | 6 arch/x86/include/asm/smp.h | 2 arch/x86/kernel/smpboot.c | 26 - arch/x86/kvm/mmu/mmu.c | 13 arch/x86/kvm/mmu/tdp_iter.c | 30 - arch/x86/kvm/mmu/tdp_iter.h | 11 arch/x86/kvm/mmu/tdp_mmu.c | 99 +++-- arch/x86/kvm/mmu/tdp_mmu.h | 18 drivers/acpi/processor_idle.c | 4 drivers/base/dd.c | 8 drivers/char/agp/Kconfig | 2 drivers/clk/clk.c | 47 +- drivers/clk/socfpga/clk-gate.c | 2 drivers/gpio/gpiolib.c | 12 drivers/gpu/drm/i915/display/intel_acpi.c | 22 + drivers/gpu/drm/msm/msm_drv.c | 1 drivers/gpu/drm/vc4/vc4_crtc.c | 17 drivers/i2c/busses/i2c-designware-master.c | 1 drivers/i2c/busses/i2c-jz4780.c | 4 drivers/i2c/i2c-core-base.c | 7 drivers/infiniband/core/addr.c | 4 drivers/infiniband/hw/cxgb4/cm.c | 3 drivers/infiniband/hw/hfi1/affinity.c | 21 - drivers/infiniband/hw/hfi1/hfi.h | 1 drivers/infiniband/hw/hfi1/init.c | 10 drivers/infiniband/hw/hfi1/netdev_rx.c | 3 drivers/infiniband/hw/qedr/verbs.c | 3 drivers/infiniband/ulp/rtrs/rtrs-clt.c | 2 drivers/net/can/spi/mcp251x.c | 24 - drivers/net/can/usb/peak_usb/pcan_usb_core.c | 6 drivers/net/dsa/lantiq_gswip.c | 195 ++++++++-- drivers/net/ethernet/amd/xgbe/xgbe.h | 6 drivers/net/ethernet/cadence/macb_main.c | 7 drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c | 23 - drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 3 drivers/net/ethernet/freescale/gianfar.c | 6 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 4 drivers/net/ethernet/intel/i40e/i40e.h | 1 drivers/net/ethernet/intel/i40e/i40e_debugfs.c | 3 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 55 ++ drivers/net/ethernet/intel/i40e/i40e_main.c | 11 drivers/net/ethernet/intel/i40e/i40e_txrx.c | 12 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 9 drivers/net/ethernet/intel/ice/ice.h | 4 drivers/net/ethernet/intel/ice/ice_common.c | 2 drivers/net/ethernet/intel/ice/ice_controlq.h | 4 drivers/net/ethernet/intel/ice/ice_dcb.c | 76 ++- drivers/net/ethernet/intel/ice/ice_dcb_lib.c | 47 +- drivers/net/ethernet/intel/ice/ice_dcb_nl.c | 52 +- drivers/net/ethernet/intel/ice/ice_ethtool.c | 8 drivers/net/ethernet/intel/ice/ice_lib.c | 7 drivers/net/ethernet/intel/ice/ice_main.c | 53 ++ drivers/net/ethernet/intel/ice/ice_switch.c | 15 drivers/net/ethernet/intel/ice/ice_txrx.c | 2 drivers/net/ethernet/intel/ice/ice_type.h | 17 drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c | 36 + drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 22 - drivers/net/ethernet/mellanox/mlx5/core/eq.c | 13 drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 15 drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.c | 7 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c | 7 drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 2 drivers/net/ethernet/netronome/nfp/bpf/cmsg.c | 1 drivers/net/ethernet/netronome/nfp/flower/main.h | 8 drivers/net/ethernet/netronome/nfp/flower/metadata.c | 16 drivers/net/ethernet/netronome/nfp/flower/offload.c | 48 ++ drivers/net/geneve.c | 24 + drivers/net/ieee802154/atusb.c | 1 drivers/net/phy/bcm-phy-lib.c | 13 drivers/net/tun.c | 48 ++ drivers/net/usb/hso.c | 33 - drivers/net/vxlan.c | 18 drivers/net/wan/hdlc_fr.c | 5 drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c | 2 drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c | 31 - drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c | 3 drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c | 35 + drivers/of/property.c | 11 drivers/ras/cec.c | 15 drivers/regulator/bd9571mwv-regulator.c | 4 drivers/remoteproc/qcom_pil_info.c | 2 drivers/scsi/pm8001/pm8001_hwi.c | 8 drivers/scsi/ufs/ufshcd.c | 31 - drivers/soc/fsl/qbman/qman.c | 2 drivers/target/iscsi/iscsi_target.c | 3 drivers/thunderbolt/retimer.c | 4 drivers/usb/usbip/stub_dev.c | 11 drivers/usb/usbip/usbip_common.h | 3 drivers/usb/usbip/usbip_event.c | 2 drivers/usb/usbip/vhci_hcd.c | 1 drivers/usb/usbip/vhci_sysfs.c | 30 + drivers/usb/usbip/vudc_dev.c | 1 drivers/usb/usbip/vudc_sysfs.c | 5 drivers/vdpa/mlx5/core/mlx5_vdpa.h | 4 drivers/vdpa/mlx5/net/mlx5_vnet.c | 40 +- drivers/xen/events/events_base.c | 12 fs/direct-io.c | 5 fs/hostfs/hostfs_kern.c | 7 fs/namei.c | 8 fs/ocfs2/aops.c | 11 fs/ocfs2/file.c | 8 include/linux/avf/virtchnl.h | 2 include/linux/mlx5/mlx5_ifc.h | 10 include/linux/skmsg.h | 7 include/linux/virtio_net.h | 2 include/net/act_api.h | 12 include/net/netns/xfrm.h | 4 include/net/red.h | 4 include/net/sock.h | 9 include/net/xfrm.h | 4 kernel/bpf/inode.c | 2 kernel/bpf/stackmap.c | 12 kernel/bpf/verifier.c | 5 kernel/gcov/clang.c | 29 - kernel/locking/lockdep.c | 2 kernel/workqueue.c | 2 mm/percpu-internal.h | 2 mm/percpu-stats.c | 9 mm/percpu.c | 14 net/batman-adv/translation-table.c | 2 net/can/bcm.c | 10 net/can/isotp.c | 11 net/can/raw.c | 14 net/core/skmsg.c | 12 net/core/sock.c | 12 net/core/xdp.c | 3 net/dsa/dsa2.c | 8 net/ethtool/eee.c | 4 net/hsr/hsr_device.c | 1 net/hsr/hsr_forward.c | 6 net/ieee802154/nl-mac.c | 7 net/ieee802154/nl802154.c | 23 - net/ipv4/ah4.c | 2 net/ipv4/esp4.c | 2 net/ipv4/esp4_offload.c | 17 net/ipv4/udp.c | 4 net/ipv6/ah6.c | 2 net/ipv6/esp6.c | 2 net/ipv6/esp6_offload.c | 17 net/ipv6/raw.c | 2 net/ipv6/route.c | 8 net/mac80211/mlme.c | 5 net/mac80211/tx.c | 2 net/mac802154/llsec.c | 2 net/mptcp/protocol.c | 45 ++ net/ncsi/ncsi-manage.c | 20 - net/nfc/llcp_sock.c | 10 net/openvswitch/conntrack.c | 14 net/qrtr/qrtr.c | 5 net/rds/message.c | 3 net/sched/act_api.c | 48 +- net/sched/cls_api.c | 16 net/sched/sch_teql.c | 3 net/sctp/ipv6.c | 7 net/tipc/crypto.c | 3 net/tipc/socket.c | 2 net/wireless/nl80211.c | 10 net/wireless/scan.c | 14 net/wireless/sme.c | 2 net/xfrm/xfrm_compat.c | 12 net/xfrm/xfrm_device.c | 2 net/xfrm/xfrm_interface.c | 3 net/xfrm/xfrm_output.c | 10 net/xfrm/xfrm_state.c | 10 security/selinux/ss/avtab.c | 101 +---- security/selinux/ss/avtab.h | 2 security/selinux/ss/conditional.c | 12 security/selinux/ss/services.c | 157 ++++++-- security/selinux/ss/sidtab.c | 21 + security/selinux/ss/sidtab.h | 4 sound/drivers/aloop.c | 11 sound/pci/hda/patch_conexant.c | 1 sound/pci/hda/patch_realtek.c | 16 sound/soc/codecs/wm8960.c | 8 sound/soc/intel/atom/sst-mfld-platform-pcm.c | 6 sound/soc/sof/intel/hda-dsp.c | 15 sound/soc/sunxi/sun4i-codec.c | 5 tools/lib/bpf/ringbuf.c | 2 tools/lib/bpf/xsk.c | 57 +- tools/perf/builtin-inject.c | 2 tools/perf/util/block-info.c | 6 193 files changed, 1827 insertions(+), 861 deletions(-)
Adrian Hunter (1):
perf inject: Fix repipe usage
Ahmed S. Darwish (1):
net: xfrm: Localize sequence counter per network namespace
Al Viro (2):
LOOKUP_MOUNTPOINT: we are cleaning "jumped" flag too late
hostfs: fix memory handling in follow_link()
Alexander Aring (8):
net: ieee802154: nl-mac: fix check on panid
net: ieee802154: fix nl802154 del llsec key
net: ieee802154: fix nl802154 del llsec dev
net: ieee802154: fix nl802154 add llsec key
net: ieee802154: fix nl802154 del llsec devkey
net: ieee802154: forbid monitor for set llsec params
net: ieee802154: forbid monitor for del llsec seclevel
net: ieee802154: stop dump llsec params for monitors
Alexander Gordeev (1):
s390/cpcmd: fix inline assembly register clobbering
Andy Shevchenko (2):
i2c: designware: Adjust bus_freq_hz when refuse high speed mode set
gpiolib: Read "gpio-line-names" from a firmware node
Anirudh Rayabharam (1):
net: hso: fix null-ptr-deref during tty device unregistration
Anirudh Venkataramanan (2):
ice: Continue probe on link/PHY errors
ice: Use port number instead of PF ID for WoL
Antoine Tenart (2):
vxlan: do not modify the shared tunnel info when PMTU triggers an ICMP reply
geneve: do not modify the shared tunnel info when PMTU triggers an ICMP reply
Ariel Levkovich (1):
net/mlx5e: Fix mapping of ct_label zero
Arkadiusz Kubalewski (4):
i40e: Fix sparse warning: missing error code 'err'
i40e: Fix sparse error: 'vsi->netdev' could be null
i40e: Fix sparse error: uninitialized symbol 'ring'
i40e: Fix sparse errors in i40e_txrx.c
Arnd Bergmann (3):
remoteproc: qcom: pil_info: avoid 64-bit division soc/fsl: qbman: fix conflicting alignment attributes
lockdep: Address clang -Wformat warning printing for %hd
Aya Levin (3):
net/mlx5e: Fix ethtool indication of connector type net/mlx5: Fix PPLM register mapping net/mlx5: Fix PBMC register mapping
Bastian Germann (1):
ASoC: sunxi: sun4i-codec: fill ASoC card owner
Ben Gardon (5):
KVM: x86/mmu: change TDP MMU yield function returns to match cond_resched
KVM: x86/mmu: Merge flush and non-flush tdp_mmu_iter_cond_resched
KVM: x86/mmu: Rename goal_gfn to next_last_level_gfn
KVM: x86/mmu: Ensure forward progress when yielding in TDP MMU iter
KVM: x86/mmu: Yield in TDU MMU iter even if no SPTES changed
Ben Greear (1):
mac80211: fix time-is-after bug in mlme
Bruce Allan (1):
ice: fix memory allocation call
Can Guo (2):
scsi: ufs: core: Fix task management request completion timeout
scsi: ufs: core: Fix wrong Task Tag used in task management request UPIUs
Carlos Leija (1):
ARM: OMAP4: PM: update ROM return address for OSWR and OFF
Chinh T Cao (2):
ice: Refactor DCB related variables out of the ice_port_info struct
ice: Recognize 860 as iSCSI port in CEE mode
Ciara Loftus (3):
libbpf: Ensure umem pointer is non-NULL before dereferencing
libbpf: Restore umem state after socket create failure
libbpf: Only create rx and tx XDP rings when necessary
Claudiu Beznea (1):
net: macb: restore cmp registers on resume path
Claudiu Manoil (1):
gianfar: Handle error code at MAC address change
Dan Carpenter (2):
thunderbolt: Fix a leak in tb_retimer_add()
thunderbolt: Fix off by one in tb_port_find_retimer()
Daniel Jurgens (1):
net/mlx5: Don't request more than supported EQs
Dave Ertman (1):
ice: remove DCBNL_DEVRESET bit from PF state
Dave Marchevsky (1):
bpf: Refcount task stack in bpf_get_task_stack
Dmitry Safonov (1):
xfrm/compat: Cleanup WARN()s that can be user-triggered
Dom Cobley (1):
drm/vc4: crtc: Reduce PV fifo threshold on hvs4
Du Cheng (1):
cfg80211: remove WARN_ON() in cfg80211_sme_connect
Eli Cohen (2):
vdpa/mlx5: Fix suspend/resume index restoration vdpa/mlx5: Fix wrong use of bit numbers
Eric Dumazet (2):
net: ensure mac header is set in virtio_net_hdr_to_skb()
sch_red: fix off-by-one checks in red_check_params()
Eryk Rybak (2):
i40e: Fix kernel oops when i40e driver removes VF's
i40e: Fix display statistics for veb_tc
Evan Nimmo (1):
xfrm: Use actual socket sk instead of skb socket for xfrm_output_resume
Eyal Birger (1):
xfrm: interface: fix ipv4 pmtu check to honor ip header df
Fabio Pricoco (1):
ice: Increase control queue timeout
Florian Fainelli (1):
net: phy: broadcom: Only advertise EEE for supported modes
Gao Xiang (1):
parisc: avoid a warning on u8 cast for cmpxchg on u8 pointers
Geert Uytterhoeven (1):
regulator: bd9571mwv: Fix AVS and DVFS voltage range
Greg Kroah-Hartman (1):
Linux 5.10.30
Grzegorz Siwik (1):
i40e: Fix parameters in aq_get_phy_register()
Guangbin Huang (1):
net: hns3: clear VF down state bit before request link status
Guennadi Liakhovetski (1):
ASoC: SOF: Intel: HDA: fix core status verification
Hans de Goede (1):
ASoC: intel: atom: Stop advertising non working S24LE support
Helge Deller (1):
parisc: parisc-agp requires SBA IOMMU driver
Ido Schimmel (1):
mlxsw: spectrum: Fix ECN marking in tunnel decapsulation
Ilya Lipnitskiy (1):
of: property: fw_devlink: do not link ".*,nr-gpios"
Ilya Maximets (1):
openvswitch: fix send of uninitialized stack memory in ct limit reply
Jacek Bułatek (1):
ice: Fix for dereference of NULL pointer
Jack Qiu (1):
fs: direct-io: fix missing sdio->boundary
Jin Yao (1):
perf report: Fix wrong LBR block sorting
Johannes Berg (5):
iwlwifi: pcie: properly set LTR workarounds on 22000 devices
nl80211: fix beacon head validation
nl80211: fix potential leak of ACL params
cfg80211: check S1G beacon compat element length
mac80211: fix TXQ AC confusion
John Fastabend (2):
bpf, sockmap: Fix sk->prot unhash op reset bpf, sockmap: Fix incorrect fwd_alloc accounting
Jonas Holmberg (1):
ALSA: aloop: Fix initialization of controls
Kamal Heib (1):
RDMA/qedr: Fix kernel panic when trying to access recv_cq
Krzysztof Goreczny (1):
ice: prevent ice_open and ice_stop during reset
Krzysztof Kozlowski (1):
clk: socfpga: fix iomem pointer cast on 64-bit
Kumar Kartikeya Dwivedi (1):
net: sched: bump refcount for new action in ACT replace mode
Kurt Kanzenbach (1):
net: hsr: Reset MAC header for Tx path
Leon Romanovsky (1):
RDMA/addr: Be strict with gid size
Loic Poulain (1):
net: qrtr: Fix memory leak on qrtr_tx_wait failure
Lorenz Bauer (1):
bpf: link: Refuse non-O_RDWR flags in BPF_OBJ_GET
Luca Coelho (1):
iwlwifi: fix 11ax disabled bit in the regulatory capability flags
Luca Fancellu (1):
xen/evtchn: Change irq_info lock to raw_spinlock_t
Lukasz Bartosik (2):
clk: fix invalid usage of list cursor in register
clk: fix invalid usage of list cursor in unregister
Lv Yunlong (5):
ethernet/netronome/nfp: Fix a use after free in nfp_bpf_ctrl_msg_rx drivers/net/wan/hdlc_fr: Fix a double free in pvc_xmit
ethernet: myri10ge: Fix a use after free in myri10ge_sw_tso net:tipc: Fix a double free in tipc_sk_mcast_rcv net/rds: Fix a use after free in rds_message_map_pages
Maciej Żenczykowski (1):
net-ipv6: bugfix - raw & sctp - switch to ipv6_can_nonlocal_bind()
Marc Kleine-Budde (1):
can: mcp251x: fix support for half duplex SPI host controllers
Marek Behún (1):
ARM: dts: turris-omnia: configure LED[2]/INTn pin as interrupt pin
Martin Blumenstingl (3):
net: dsa: lantiq_gswip: Let GSWIP automatically set the xMII clock
net: dsa: lantiq_gswip: Don't use PHY auto polling
net: dsa: lantiq_gswip: Configure all remaining GSWIP_MII_CFG bits
Mateusz Palczewski (1):
i40e: Added Asym_Pause to supported link modes
Maxim Kochetkov (1):
net: dsa: Fix type was not set for devlink port
Md Haris Iqbal (1):
RDMA/rtrs-clt: Close rtrs client conn before destroying rtrs clt session files
Mike Marciniszyn (1):
IB/hfi1: Fix probe time panic when AIP is enabled with a buggy BIOS
Mike Rapoport (1):
nds32: flush_dcache_page: use page_mapping_file to avoid races with swapoff
Milton Miller (1):
net/ncsi: Avoid channel_monitor hrtimer deadlock
Muhammad Usama Anjum (1):
net: ipv6: check for validity before dereferencing cfg->fc_nlinfo.nlh
Nick Desaulniers (1):
gcov: re-fix clang-11+ support
Norbert Ciosek (1):
virtchnl: Fix layout of RSS structures
Norman Maurer (1):
net: udp: Add support for getsockopt(..., ..., UDP_GRO, ..., ...);
Oliver Hartkopp (2):
can: bcm/raw: fix msg_namelen values depending on CAN_REQUIRED_SIZE
can: isotp: fix msg_namelen values depending on CAN_REQUIRED_SIZE
Oliver Stäbler (1):
arm64: dts: imx8mm/q: Fix pad control of SD1_DATA0
Ondrej Mosnacek (3):
selinux: make nslot handling in avtab more robust
selinux: fix cond_list corruption when changing booleans
selinux: fix race between old and new sidtab
Ong Boon Leong (1):
xdp: fix xdp_return_frame() kernel BUG throw for page_pool memory model
Paolo Abeni (2):
net: let skb_orphan_partial wake-up waiters.
mptcp: forbit mcast-related sockopt on MPTCP sockets
Paolo Bonzini (1):
KVM: x86/mmu: preserve pending TLB flush across calls to kvm_tdp_mmu_zap_sp
Pavel Skripkin (3):
drivers: net: fix memory leak in atusb_probe
drivers: net: fix memory leak in peak_usb_create_dev
net: mac802154: Fix general protection fault
Pavel Tikhomirov (1):
net: sched: sch_teql: fix null-pointer dereference
Pedro Tammela (1):
libbpf: Fix bail out from 'ringbuf_process_ring()' on error
Phillip Potter (1):
net: tun: set tun->dev->addr_len during TUNSETLINK processing
Potnuri Bharat Teja (1):
RDMA/cxgb4: check for ipv6 address properly while destroying listener
Raed Salem (1):
net/mlx5: Fix placement of log_max_flow_counter
Rafał Miłecki (1):
dt-bindings: net: ethernet-controller: fix typo in NVMEM
Rahul Lakkireddy (1):
cxgb4: avoid collecting SGE_QBASE regs during traffic
Robert Malz (1):
ice: Cleanup fltr list in case of allocation issues
Roman Bolshakov (1):
scsi: target: iscsi: Fix zero tag inside a trace event
Roman Gushchin (1):
percpu: make pcpu_nr_empty_pop_pages per chunk type
Saravana Kannan (1):
driver core: Fix locking bug in deferred_probe_timeout_work_func()
Sean Christopherson (3):
KVM: x86/mmu: Ensure TLBs are flushed when yielding during GFN range zap
KVM: x86/mmu: Ensure TLBs are flushed for TDP MMU during NX zapping
KVM: x86/mmu: Don't allow TDP MMU to yield when recovering NX pages
Sergei Trofimovich (1):
ia64: fix user_stack_pointer() for ptrace()
Shengjiu Wang (1):
ASoC: wm8960: Fix wrong bclk and lrclk with pll enabled for some chips
Shuah Khan (4):
usbip: add sysfs_lock to synchronize sysfs code paths
usbip: stub-dev synchronize sysfs code paths
usbip: vudc synchronize sysfs code paths
usbip: synchronize event handler with sysfs code paths
Shyam Sundar S K (1):
amd-xgbe: Update DMA coherency values
Si-Wei Liu (1):
vdpa/mlx5: should exclude header length and fcs from mtu
Stefan Riedmueller (1):
ARM: dts: imx6: pbab01: Set vmmc supply for both SD interfaces
Steffen Klassert (2):
xfrm: Fix NULL pointer dereference on policy lookup
xfrm: Provide private skb extensions for segmented and hw offloaded ESP packets
Stephen Boyd (1):
drm/msm: Set drvdata to NULL when msm_drm_init() fails
Takashi Iwai (3):
ALSA: hda/realtek: Fix speaker amp setup on Acer Aspire E1
ALSA: hda/conexant: Apply quirk for another HP ZBook G5 model drm/i915: Fix invalid access to ACPI _DSM objects
Tetsuo Handa (1):
batman-adv: initialize "struct batadv_tvlv_tt_vlan_data"->reserved field
Toke Høiland-Jørgensen (1):
bpf: Enforce that struct_ops programs be GPL-only
Tony Lindgren (1):
ARM: OMAP4: Fix PMIC voltage domains for bionic
Viswas G (1):
scsi: pm80xx: Fix chip initialization failure
Vitaly Kuznetsov (1):
ACPI: processor: Fix build when CONFIG_ACPI_PROCESSOR=m
Vlad Buslov (3):
net: sched: fix action overwrite reference counting
net: sched: fix err handler in tcf_action_init()
Revert "net: sched: bump refcount for new action in ACT replace mode"
Wengang Wang (1):
ocfs2: fix deadlock between setattr and dio_end_io_write
William Roche (1):
RAS/CEC: Correct ce_add_elem()'s returned values
Wolfram Sang (1):
i2c: turn recovery error on init to debug
Wong Vee Khee (1):
ethtool: fix incorrect datatype in set_eee ops
Xiaoming Ni (4):
nfc: fix refcount leak in llcp_sock_bind()
nfc: fix refcount leak in llcp_sock_connect()
nfc: fix memory leak in llcp_sock_connect()
nfc: Avoid endless loops caused by repeated llcp_sock_connect()
Xin Long (2):
esp: delete NETIF_F_SCTP_CRC bit from features for esp offload
tipc: increment the tmp aead refcnt before attaching it
Yinjun Zhang (1):
nfp: flower: ignore duplicate merge hints from FW
Yongxin Liu (1):
ice: fix memory leak of aRFS after resuming from suspend
Yunjian Wang (1):
net: cls_api: Fix uninitialised struct field bo->unlocked_driver_cb
Zheng Yongjun (1):
net: openvswitch: conntrack: simplify the return expression of ovs_ct_limit_get_default_limit()
Zqiang (1):
workqueue: Move the position of debug_work_activate() in __queue_work()
周琰杰 (Zhou Yanjie) (1):
I2C: JZ4780: Fix bug for Ingenic X1000.
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/net/ethernet-controller.yaml +1 -1
@@ -49,7 +49,7 @@ properties: description: Reference to an nvmem node for the MAC address - nvmem-cells-names: + nvmem-cell-names: const: mac-address phy-connection-type:
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 29 +SUBLEVEL = 30 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/armada-385-turris-omnia.dts +1 -0
@@ -236,6 +236,7 @@ phy1: phy@1 { status = "okay"; compatible = "ethernet-phy-id0141.0DD1", "ethernet-phy-ieee802.3-c22"; reg = <1>; + marvell,reg-init = <3 18 0 0x4985>; /* irq is connected to &pcawan pin 7 */ };
arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi +2 -0
@@ -432,6 +432,7 @@ &usdhc2 { pinctrl-0 = <&pinctrl_usdhc2>; cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; wp-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; + vmmc-supply = <&vdd_sd1_reg>; status = "disabled"; };
@@ -441,5 +442,6 @@ &usdhc3 { &pinctrl_usdhc3_cdwp>; cd-gpios = <&gpio1 27 GPIO_ACTIVE_LOW>; wp-gpios = <&gpio1 29 GPIO_ACTIVE_HIGH>; + vmmc-supply = <&vdd_sd0_reg>; status = "disabled"; };
arch/arm/mach-omap2/omap-secure.c +39 -0
@@ -9,6 +9,7 @@*/ #include <linux/arm-smccc.h> +#include <linux/cpu_pm.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/io.h>
@@ -20,6 +21,7 @@#include "common.h" #include "omap-secure.h" +#include "soc.h" static phys_addr_t omap_secure_memblock_base;
@@ -213,3 +215,40 @@ void __init omap_secure_init(void) {omap_optee_init_check (); } + +/* +* Dummy dispatcher call after core OSWR and MPU off. Updates the ROM return +* address after MMU has been re-enabled after CPU1 has been woken up again. +* Otherwise the ROM code will attempt to use the earlier physical return +* address that got set with MMU off when waking up CPU1. Only used on secure +* devices. +*/ +static int cpu_notifier (struct notifier_block *nb,unsigned long cmd,void *v) +{ +switch (cmd) { +case CPU_CLUSTER_PM_EXIT : +omap_secure_dispatcher (OMAP4_PPA_SERVICE_0 , +FLAG_START_CRITICAL , +0 ,0 ,0 ,0 ,0 ); +break ; +default : +break ; + } + +return NOTIFY_OK ; +} + +static struct notifier_block secure_notifier_block = { + .notifier_call = cpu_notifier, +}; + +static int __init secure_pm_init (void ) +{ +if (omap_type () ==OMAP2_DEVICE_TYPE_GP || !soc_is_omap44xx ()) +return 0 ; + +cpu_pm_register_notifier (&secure_notifier_block); + +return 0 ; +} +omap_arch_initcall (secure_pm_init);
arch/arm/mach-omap2/omap-secure.h +1 -0
@@ -50,6 +50,7 @@#define OMAP5_DRA7_MON_SET_ACR_INDEX 0x107/* Secure PPA(Primary Protected Application) APIs */ +#define OMAP4_PPA_SERVICE_0 0x21#define OMAP4_PPA_L2_POR_INDEX 0x23#define OMAP4_PPA_CPU_ACTRL_SMP_INDEX 0x25
arch/arm/mach-omap2/pmic-cpcap.c +2 -2
@@ -246,10 +246,10 @@ int __init omap4_cpcap_init(void)omap_voltage_register_pmic (voltdm, &omap443x_max8952_mpu);if (of_machine_is_compatible ("motorola,droid-bionic" )) { - voltdm =voltdm_lookup ("mpu" ); + voltdm =voltdm_lookup ("core" );omap_voltage_register_pmic (voltdm, &omap_cpcap_core); - voltdm =voltdm_lookup ("mpu" ); + voltdm =voltdm_lookup ("iva" );omap_voltage_register_pmic (voltdm, &omap_cpcap_iva); }else { voltdm =voltdm_lookup ("core" );
arch/arm64/boot/dts/freescale/imx8mm-pinfunc.h +1 -1
@@ -124,7 +124,7 @@#define MX8MM_IOMUXC_SD1_CMD_USDHC1_CMD 0x0A4 0x30C 0x000 0x0 0x0#define MX8MM_IOMUXC_SD1_CMD_GPIO2_IO1 0x0A4 0x30C 0x000 0x5 0x0#define MX8MM_IOMUXC_SD1_DATA0_USDHC1_DATA0 0x0A8 0x310 0x000 0x0 0x0 -#define MX8MM_IOMUXC_SD1_DATA0_GPIO2_IO2 0x0A8 0x31 0x000 0x5 0x0 +#define MX8MM_IOMUXC_SD1_DATA0_GPIO2_IO2 0x0A8 0x310 0x000 0x5 0x0#define MX8MM_IOMUXC_SD1_DATA1_USDHC1_DATA1 0x0AC 0x314 0x000 0x0 0x0#define MX8MM_IOMUXC_SD1_DATA1_GPIO2_IO3 0x0AC 0x314 0x000 0x5 0x0#define MX8MM_IOMUXC_SD1_DATA2_USDHC1_DATA2 0x0B0 0x318 0x000 0x0 0x0
arch/arm64/boot/dts/freescale/imx8mq-pinfunc.h +1 -1
@@ -130,7 +130,7 @@#define MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0x0A4 0x30C 0x000 0x0 0x0#define MX8MQ_IOMUXC_SD1_CMD_GPIO2_IO1 0x0A4 0x30C 0x000 0x5 0x0#define MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0x0A8 0x310 0x000 0x0 0x0 -#define MX8MQ_IOMUXC_SD1_DATA0_GPIO2_IO2 0x0A8 0x31 0x000 0x5 0x0 +#define MX8MQ_IOMUXC_SD1_DATA0_GPIO2_IO2 0x0A8 0x310 0x000 0x5 0x0#define MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0x0AC 0x314 0x000 0x0 0x0#define MX8MQ_IOMUXC_SD1_DATA1_GPIO2_IO3 0x0AC 0x314 0x000 0x5 0x0#define MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0x0B0 0x318 0x000 0x0 0x0
arch/ia64/include/asm/ptrace.h +1 -7
@@ -54,8 +54,7 @@static inline unsigned long user_stack_pointer (struct pt_regs *regs) { -/* FIXME: should this be bspstore + nr_dirty regs? */ -return regs->ar_bspstore; +return regs->r12; }static inline int is_syscall_success (struct pt_regs *regs)
@@ -79,11 +78,6 @@ static inline long regs_return_value(struct pt_regs *regs)unsigned long __ip =instruction_pointer (regs); \ (__ip & ~3UL ) + ((__ip &3UL ) <<2 ); \ }) -/* -* Why not default? Because user_stack_pointer() on ia64 gives register -* stack backing store instead... -*/ -#define current_user_stack_pointer () (current_pt_regs()->r12)/* given a pointer to a task_struct, return the user's pt_regs */ # define task_pt_regs (t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)
arch/nds32/mm/cacheflush.c +1 -1
@@ -238,7 +238,7 @@ void flush_dcache_page(struct page *page) {struct address_space *mapping; - mapping =page_mapping (page); + mapping =page_mapping_file (page);if (mapping && !mapping_mapped (mapping))set_bit (PG_dcache_dirty, &page->flags);else {
arch/parisc/include/asm/cmpxchg.h +1 -1
@@ -72,7 +72,7 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)#endif case 4 :return __cmpxchg_u32 ((unsigned int *)ptr, (unsigned int )old, (unsigned int )new_); -case 1 :return __cmpxchg_u8 ((u8 *)ptr, (u8 )old, (u8 )new_); +case 1 :return __cmpxchg_u8 ((u8 *)ptr, old &0xff , new_ &0xff ); }__cmpxchg_called_with_bad_pointer ();return old;
arch/s390/kernel/cpcmd.c +4 -2
@@ -37,10 +37,12 @@ static int diag8_noresponse(int cmdlen)static int diag8_response (int cmdlen,char *response,int *rlen) { +unsigned long _cmdlen = cmdlen |0x40000000L ; +unsigned long _rlen = *rlen; register unsigned long reg2 asm ("2") = (addr_t) cpcmd_buf; register unsigned long reg3 asm ("3") = (addr_t) response; - register unsigned long reg4 asm ("4") = cmdlen | 0x40000000L; - register unsigned long reg5 asm ("5") = *rlen; + register unsigned long reg4 asm ("4") = _cmdlen; + register unsigned long reg5 asm ("5") = _rlen; asmvolatile ( " diag %2,%0,0x8\n"
arch/x86/include/asm/smp.h +1 -1
@@ -132,7 +132,7 @@ void native_play_dead(void);void play_dead_common (void );void wbinvd_on_cpu (int cpu);int wbinvd_on_all_cpus (void ); -bool wakeup_cpu0 (void ); +void cond_wakeup_cpu0 (void );void native_smp_send_reschedule (int cpu);void native_send_call_func_ipi (const struct cpumask *mask);
arch/x86/kernel/smpboot.c +12 -14
@@ -1655,13 +1655,17 @@ void play_dead_common(void)local_irq_disable (); } -bool wakeup_cpu0 (void ) +/** +* cond_wakeup_cpu0 - Wake up CPU0 if needed. +* +* If NMI wants to wake up CPU0, start CPU0. +*/ +void cond_wakeup_cpu0 (void ) {if (smp_processor_id () ==0 && enable_start_cpu0) -return true; - -return false; +start_cpu0 (); } +EXPORT_SYMBOL_GPL (cond_wakeup_cpu0);/* * We need to flush the caches before going to sleep, lest we have
@@ -1730,11 +1734,8 @@ static inline void mwait_play_dead(void)__monitor (mwait_ptr,0 ,0 );mb ();__mwait (eax,0 ); -/* -* If NMI wants to wake up CPU0, start CPU0. -*/ -if (wakeup_cpu0 ()) -start_cpu0 (); + +cond_wakeup_cpu0 (); } }
@@ -1745,11 +1746,8 @@ void hlt_play_dead(void)while (1 ) {native_halt (); -/* -* If NMI wants to wake up CPU0, start CPU0. -*/ -if (wakeup_cpu0 ()) -start_cpu0 (); + +cond_wakeup_cpu0 (); } }
arch/x86/kvm/mmu/mmu.c +7 -6
@@ -5972,6 +5972,7 @@ static void kvm_recover_nx_lpages(struct kvm *kvm)struct kvm_mmu_page *sp;unsigned int ratio;LIST_HEAD (invalid_list); +bool flush = false;ulong to_zap; rcu_idx =srcu_read_lock (&kvm->srcu);
@@ -5992,20 +5993,20 @@ static void kvm_recover_nx_lpages(struct kvm *kvm) struct kvm_mmu_page, lpage_disallowed_link);WARN_ON_ONCE (!sp->lpage_disallowed); -if (sp->tdp_mmu_page) -kvm_tdp_mmu_zap_gfn_range (kvm, sp->gfn, - sp->gfn +KVM_PAGES_PER_HPAGE (sp->role.level)); -else { +if (sp->tdp_mmu_page) { + flush |=kvm_tdp_mmu_zap_sp (kvm, sp); + }else {kvm_mmu_prepare_zap_page (kvm, sp, &invalid_list);WARN_ON_ONCE (sp->lpage_disallowed); }if (need_resched () ||spin_needbreak (&kvm->mmu_lock)) { -kvm_mmu_commit_zap_page (kvm, &invalid_list); +kvm_mmu_remote_flush_or_zap (kvm, &invalid_list, flush);cond_resched_lock (&kvm->mmu_lock); + flush = false; } } -kvm_mmu_commit_zap_page (kvm, &invalid_list); +kvm_mmu_remote_flush_or_zap (kvm, &invalid_list, flush);spin_unlock (&kvm->mmu_lock);srcu_read_unlock (&kvm->srcu, rcu_idx);
arch/x86/kvm/mmu/tdp_iter.c +7 -23
@@ -22,21 +22,22 @@ static gfn_t round_gfn_for_level(gfn_t gfn, int level)/* * Sets a TDP iterator to walk a pre-order traversal of the paging structure -* rooted at root_pt, starting with the walk to translate goal_gfn. +* rooted at root_pt, starting with the walk to translate next_last_level_gfn. */ void tdp_iter_start (struct tdp_iter *iter,u64 *root_pt,int root_level, -int min_level,gfn_t goal_gfn) +int min_level,gfn_t next_last_level_gfn) {WARN_ON (root_level <1 );WARN_ON (root_level >PT64_ROOT_MAX_LEVEL ); - iter->goal_gfn = goal_gfn; + iter->next_last_level_gfn = next_last_level_gfn; + iter->yielded_gfn = iter->next_last_level_gfn; iter->root_level = root_level; iter->min_level = min_level; iter->level = root_level; iter->pt_path[iter->level -1 ] = root_pt; - iter->gfn =round_gfn_for_level (iter->goal_gfn, iter->level); + iter->gfn =round_gfn_for_level (iter->next_last_level_gfn, iter->level);tdp_iter_refresh_sptep (iter); iter->valid = true;
@@ -82,7 +83,7 @@ static bool try_step_down(struct tdp_iter *iter) iter->level--; iter->pt_path[iter->level -1 ] = child_pt; - iter->gfn =round_gfn_for_level (iter->goal_gfn, iter->level); + iter->gfn =round_gfn_for_level (iter->next_last_level_gfn, iter->level);tdp_iter_refresh_sptep (iter);return true;
@@ -106,7 +107,7 @@ static bool try_step_side(struct tdp_iter *iter)return false; iter->gfn +=KVM_PAGES_PER_HPAGE (iter->level); - iter->goal_gfn = iter->gfn; + iter->next_last_level_gfn = iter->gfn; iter->sptep++; iter->old_spte =READ_ONCE (*iter->sptep);
@@ -158,23 +159,6 @@ void tdp_iter_next(struct tdp_iter *iter) iter->valid = false; } -/* -* Restart the walk over the paging structure from the root, starting from the -* highest gfn the iterator had previously reached. Assumes that the entire -* paging structure, except the root page, may have been completely torn down -* and rebuilt. -*/ -void tdp_iter_refresh_walk (struct tdp_iter *iter) -{ -gfn_t goal_gfn = iter->goal_gfn; - -if (iter->gfn > goal_gfn) - goal_gfn = iter->gfn; - -tdp_iter_start (iter, iter->pt_path[iter->root_level -1 ], - iter->root_level, iter->min_level, goal_gfn); -} -u64 *tdp_iter_root_pt (struct tdp_iter *iter) {return iter->pt_path[iter->root_level -1 ];
arch/x86/kvm/mmu/tdp_iter.h +8 -3
@@ -15,7 +15,13 @@ struct tdp_iter {* The iterator will traverse the paging structure towards the mapping * for this GFN. */ -gfn_t goal_gfn; +gfn_t next_last_level_gfn; +/* +* The next_last_level_gfn at the time when the thread last +* yielded. Only yielding when the next_last_level_gfn != +* yielded_gfn helps ensure forward progress. +*/ +gfn_t yielded_gfn;/* Pointers to the page tables traversed to reach the current SPTE */ u64 *pt_path[PT64_ROOT_MAX_LEVEL ];/* A pointer to the current SPTE */
@@ -52,9 +58,8 @@ struct tdp_iter {u64 *spte_to_child_pt (u64 pte,int level);void tdp_iter_start (struct tdp_iter *iter,u64 *root_pt,int root_level, -int min_level,gfn_t goal_gfn); +int min_level,gfn_t next_last_level_gfn);void tdp_iter_next (struct tdp_iter *iter); -void tdp_iter_refresh_walk (struct tdp_iter *iter);u64 *tdp_iter_root_pt (struct tdp_iter *iter);#endif /* __KVM_X86_MMU_TDP_ITER_H */
arch/x86/kvm/mmu/tdp_mmu.c +64 -35
208 lines not on this page · raw message
arch/x86/kvm/mmu/tdp_mmu.h +17 -1
@@ -12,7 +12,23 @@ bool is_tdp_mmu_root(struct kvm *kvm, hpa_t root);hpa_t kvm_tdp_mmu_get_vcpu_root_hpa (struct kvm_vcpu *vcpu);void kvm_tdp_mmu_free_root (struct kvm *kvm,struct kvm_mmu_page *root); -bool kvm_tdp_mmu_zap_gfn_range (struct kvm *kvm,gfn_t start,gfn_t end); +bool __kvm_tdp_mmu_zap_gfn_range (struct kvm *kvm,gfn_t start,gfn_t end, +bool can_yield); +static inline bool kvm_tdp_mmu_zap_gfn_range (struct kvm *kvm,gfn_t start, +gfn_t end) +{ +return __kvm_tdp_mmu_zap_gfn_range (kvm, start, end, true); +} +static inline bool kvm_tdp_mmu_zap_sp (struct kvm *kvm,struct kvm_mmu_page *sp) +{ +gfn_t end = sp->gfn +KVM_PAGES_PER_HPAGE (sp->role.level); + +/* +* Don't allow yielding, as the caller may have pending pages to zap +* on the shadow MMU. +*/ +return __kvm_tdp_mmu_zap_gfn_range (kvm, sp->gfn, end, false); +}void kvm_tdp_mmu_zap_all (struct kvm *kvm); int kvm_tdp_mmu_map(struct kvm_vcpu *vcpu, gpa_t gpa, u32 error_code,
drivers/acpi/processor_idle.c +1 -3
@@ -545,9 +545,7 @@ static int acpi_idle_play_dead(struct cpuidle_device *dev, int index)return -ENODEV ;#if defined(CONFIG_X86 ) && defined(CONFIG_HOTPLUG_CPU ) -/* If NMI wants to wake up CPU0, start CPU0. */ -if (wakeup_cpu0 ()) -start_cpu0 (); +cond_wakeup_cpu0 ();#endif }
drivers/base/dd.c +5 -3
@@ -292,14 +292,16 @@ int driver_deferred_probe_check_state(struct device *dev)static void deferred_probe_timeout_work_func (struct work_struct *work) { -struct device_private *private, *p; +struct device_private *p; driver_deferred_probe_timeout =0 ;driver_deferred_probe_trigger ();flush_work (&deferred_probe_work); -list_for_each_entry_safe (private, p, &deferred_probe_pending_list, deferred_probe) -dev_info (private->device,"deferred probe pending\n" ); +mutex_lock (&deferred_probe_mutex); +list_for_each_entry (p, &deferred_probe_pending_list, deferred_probe) +dev_info (p->device,"deferred probe pending\n" ); +mutex_unlock (&deferred_probe_mutex);wake_up_all (&probe_timeout_waitqueue); } static DECLARE_DELAYED_WORK(deferred_probe_timeout_work, deferred_probe_timeout_work_func);
drivers/char/agp/Kconfig +1 -1
@@ -125,7 +125,7 @@ config AGP_HP_ZX1 config AGP_PARISC tristate "HP Quicksilver AGP support" - depends on AGP && PARISC && 64BIT + depends on AGP && PARISC && 64BIT && IOMMU_SBA help This option gives you AGP GART support for the HP Quicksilver AGP bus adapter on HP PA-RISC machines (Ok, just on the C8000
drivers/clk/clk.c +21 -26
73 lines not on this page · raw message
drivers/clk/socfpga/clk-gate.c +1 -1
@@ -99,7 +99,7 @@ static unsigned long socfpga_clk_recalc_rate(struct clk_hw *hwclk, val =readl (socfpgaclk->div_reg) >> socfpgaclk->shift; val &=GENMASK (socfpgaclk->width -1 ,0 );/* Check for GPIO_DB_CLK by its offset */ -if ((int ) socfpgaclk->div_reg &SOCFPGA_GPIO_DB_CLK_OFFSET ) +if ((uintptr_t ) socfpgaclk->div_reg &SOCFPGA_GPIO_DB_CLK_OFFSET ) div = val +1 ;else div = (1 << val);
drivers/gpio/gpiolib.c +4 -8
@@ -364,22 +364,18 @@ static int gpiochip_set_desc_names(struct gpio_chip *gc)* * Looks for device property "gpio-line-names" and if it exists assigns * GPIO line names for the chip. The memory allocated for the assigned -* names belong to the underlying software node and should not be released +* names belong to the underlying firmware node and should not be released * by the caller. */ static int devprop_gpiochip_set_names (struct gpio_chip *chip) {struct gpio_device *gdev = chip->gpiodev; -struct device *dev = chip->parent; +struct fwnode_handle *fwnode =dev_fwnode (&gdev->dev);const char **names;int ret, i;int count; -/* GPIO chip may not have a parent device whose properties we inspect. */ -if (!dev) -return 0 ; - - count =device_property_string_array_count (dev,"gpio-line-names" ); + count =fwnode_property_string_array_count (fwnode,"gpio-line-names" );if (count <0 )return 0 ;
@@ -393,7 +389,7 @@ static int devprop_gpiochip_set_names(struct gpio_chip *chip)if (!names)return -ENOMEM ; - ret =device_property_read_string_array (dev,"gpio-line-names" , + ret =fwnode_property_read_string_array (fwnode,"gpio-line-names" , names, count);if (ret <0 ) {dev_warn (&gdev->dev,"failed to read GPIO line names\n" );
drivers/gpu/drm/i915/display/intel_acpi.c +20 -2
@@ -84,13 +84,31 @@ static void intel_dsm_platform_mux_info(acpi_handle dhandle)return ; } +if (!pkg->package.count) { +DRM_DEBUG_DRIVER ("no connection in _DSM\n" ); +return ; + } + connector_count = &pkg->package.elements[0 ];DRM_DEBUG_DRIVER ("MUX info connectors: %lld\n" , (unsigned long long )connector_count->integer.value);for (i =1 ; i < pkg->package.count; i++) {union acpi_object *obj = &pkg->package.elements[i]; -union acpi_object *connector_id = &obj->package.elements[0 ]; -union acpi_object *info = &obj->package.elements[1 ]; +union acpi_object *connector_id; +union acpi_object *info; + +if (obj->type !=ACPI_TYPE_PACKAGE || obj->package.count <2 ) { +DRM_DEBUG_DRIVER ("Invalid object for MUX #%d\n" , i); +continue ; + } + + connector_id = &obj->package.elements[0 ]; + info = &obj->package.elements[1 ]; +if (info->type !=ACPI_TYPE_BUFFER || info->buffer.length <4 ) { +DRM_DEBUG_DRIVER ("Invalid info for MUX obj #%d\n" , i); +continue ; + } +DRM_DEBUG_DRIVER ("Connector id: 0x%016llx\n" , (unsigned long long )connector_id->integer.value); DRM_DEBUG_DRIVER(" port id: %s\n",
drivers/gpu/drm/msm/msm_drv.c +1 -0
@@ -557,6 +557,7 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)kfree (priv); err_put_drm_dev:drm_dev_put (ddev); +platform_set_drvdata (pdev,NULL );return ret; }
drivers/gpu/drm/vc4/vc4_crtc.c +17 -0
@@ -210,6 +210,7 @@ static u32 vc4_get_fifo_full_level(struct vc4_crtc *vc4_crtc, u32 format) {const struct vc4_crtc_data *crtc_data =vc4_crtc_to_vc4_crtc_data (vc4_crtc);const struct vc4_pv_data *pv_data =vc4_crtc_to_vc4_pv_data (vc4_crtc); +struct vc4_dev *vc4 =to_vc4_dev (vc4_crtc->base.dev);u32 fifo_len_bytes = pv_data->fifo_depth;/*
@@ -238,6 +239,22 @@ static u32 vc4_get_fifo_full_level(struct vc4_crtc *vc4_crtc, u32 format)if (crtc_data->hvs_output ==5 )return 32 ; +/* +* It looks like in some situations, we will overflow +* the PixelValve FIFO (with the bit 10 of PV stat being +* set) and stall the HVS / PV, eventually resulting in +* a page flip timeout. +* +* Displaying the video overlay during a playback with +* Kodi on an RPi3 seems to be a great solution with a +* failure rate around 50%. +* +* Removing 1 from the FIFO full level however +* seems to completely remove that issue. +*/ +if (!vc4->hvs->hvs5) +return fifo_len_bytes -3 *HVS_FIFO_LATENCY_PIX -1 ; +return fifo_len_bytes -3 *HVS_FIFO_LATENCY_PIX ; } }
drivers/i2c/busses/i2c-designware-master.c +1 -0
@@ -129,6 +129,7 @@ static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev)if ((comp_param1 &DW_IC_COMP_PARAM_1_SPEED_MODE_MASK ) !=DW_IC_COMP_PARAM_1_SPEED_MODE_HIGH ) {dev_err (dev->dev,"High Speed not supported!\n" ); + t->bus_freq_hz =I2C_MAX_FAST_MODE_FREQ ; dev->master_cfg &= ~DW_IC_CON_SPEED_MASK ; dev->master_cfg |=DW_IC_CON_SPEED_FAST ; dev->hs_hcnt =0 ;
drivers/i2c/busses/i2c-jz4780.c +2 -2
@@ -526,8 +526,8 @@ static irqreturn_t jz4780_i2c_irq(int irqno, void *dev_id) i2c_sta =jz4780_i2c_readw (i2c,JZ4780_I2C_STA ); data = *i2c->wbuf; data &= ~JZ4780_I2C_DC_READ ; -if ((!i2c->stop_hold) && (i2c->cdata->version >= -ID_X1000 )) +if ((i2c->wt_len ==1 ) && (!i2c->stop_hold) && + (i2c->cdata->version >=ID_X1000 )) data |=X1000_I2C_DC_STOP ;jz4780_i2c_writew (i2c,JZ4780_I2C_DC , data); i2c->wbuf++;
drivers/i2c/i2c-core-base.c +4 -3
@@ -378,7 +378,7 @@ static int i2c_gpio_init_recovery(struct i2c_adapter *adap)static int i2c_init_recovery (struct i2c_adapter *adap) {struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; -char *err_str; +char *err_str, *err_level =KERN_ERR ;if (!bri)return 0 ;
@@ -387,7 +387,8 @@ static int i2c_init_recovery(struct i2c_adapter *adap)return -EPROBE_DEFER ;if (!bri->recover_bus) { - err_str ="no recover_bus() found" ; + err_str ="no suitable method provided" ; + err_level =KERN_DEBUG ; goto err; }
@@ -414,7 +415,7 @@ static int i2c_init_recovery(struct i2c_adapter *adap)return 0 ; err: -dev_err (&adap->dev,"Not using recovery: %s\n" , err_str); +dev_printk (err_level, &adap->dev,"Not using recovery: %s\n" , err_str); adap->bus_recovery_info =NULL ;return -EINVAL ;
drivers/infiniband/core/addr.c +3 -1
@@ -76,7 +76,9 @@ static struct workqueue_struct *addr_wq;static const struct nla_policy ib_nl_addr_policy[LS_NLA_TYPE_MAX ] = { [LS_NLA_TYPE_DGID ] = {.type =NLA_BINARY , - .len =sizeof (struct rdma_nla_ls_gid )}, + .len =sizeof (struct rdma_nla_ls_gid ), + .validation_type =NLA_VALIDATE_MIN , + .min =sizeof (struct rdma_nla_ls_gid )}, };static inline bool ib_nl_is_good_ip_resp (const struct nlmsghdr *nlh)
drivers/infiniband/hw/cxgb4/cm.c +2 -1
@@ -3616,7 +3616,8 @@ int c4iw_destroy_listen(struct iw_cm_id *cm_id)c4iw_init_wr_wait (ep->com.wr_waitp); err =cxgb4_remove_server ( ep->com.dev->rdev.lldi.ports[0 ], ep->stid, - ep->com.dev->rdev.lldi.rxq_ids[0 ], true); + ep->com.dev->rdev.lldi.rxq_ids[0 ], + ep->com.local_addr.ss_family ==AF_INET6 );if (err) goto done; err = c4iw_wait_for_reply(&ep->com.dev->rdev, ep->com.wr_waitp,
drivers/infiniband/hw/hfi1/affinity.c +5 -16
@@ -632,22 +632,11 @@ static void _dev_comp_vect_cpu_mask_clean_up(struct hfi1_devdata *dd,*/ int hfi1_dev_affinity_init (struct hfi1_devdata *dd) { -int node =pcibus_to_node (dd->pcidev->bus);struct hfi1_affinity_node *entry;const struct cpumask *local_mask;int curr_cpu, possible, i, ret;bool new_entry = false; -/* -* If the BIOS does not have the NUMA node information set, select -* NUMA 0 so we get consistent performance. -*/ -if (node <0 ) { -dd_dev_err (dd,"Invalid PCI NUMA node. Performance may be affected\n" ); - node =0 ; - } - dd->node = node; - local_mask =cpumask_of_node (dd->node);if (cpumask_first (local_mask) >= nr_cpu_ids) local_mask =topology_core_cpumask (0 );
@@ -660,7 +649,7 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)* create an entry in the global affinity structure and initialize it. */ if (!entry) { - entry =node_affinity_allocate (node); + entry =node_affinity_allocate (dd->node);if (!entry) {dd_dev_err (dd,"Unable to allocate global affinity node\n" );
@@ -751,6 +740,7 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)if (new_entry)node_affinity_add_tail (entry); + dd->affinity_entry = entry;mutex_unlock (&node_affinity.lock);return 0 ;
@@ -766,10 +756,9 @@ void hfi1_dev_affinity_clean_up(struct hfi1_devdata *dd) {struct hfi1_affinity_node *entry; -if (dd->node <0 ) -return ; -mutex_lock (&node_affinity.lock); +if (!dd->affinity_entry) + goto unlock; entry =node_affinity_lookup (dd->node);if (!entry) goto unlock;
@@ -780,8 +769,8 @@ void hfi1_dev_affinity_clean_up(struct hfi1_devdata *dd)*/ _dev_comp_vect_cpu_mask_clean_up (dd, entry); unlock: + dd->affinity_entry =NULL ;mutex_unlock (&node_affinity.lock); - dd->node =NUMA_NO_NODE ; }/*
drivers/infiniband/hw/hfi1/hfi.h +1 -0
@@ -1409,6 +1409,7 @@ struct hfi1_devdata {spinlock_t irq_src_lock;int vnic_num_vports;struct net_device *dummy_netdev; +struct hfi1_affinity_node *affinity_entry;/* Keeps track of IPoIB RSM rule users */ atomic_t ipoib_rsm_usr_num;
drivers/infiniband/hw/hfi1/init.c +9 -1
@@ -1277,7 +1277,6 @@ static struct hfi1_devdata *hfi1_alloc_devdata(struct pci_dev *pdev, dd->pport = (struct hfi1_pportdata *)(dd +1 ); dd->pcidev = pdev;pci_set_drvdata (pdev, dd); - dd->node =NUMA_NO_NODE ; ret =xa_alloc_irq (&hfi1_dev_table, &dd->unit, dd, xa_limit_32b,GFP_KERNEL );
@@ -1287,6 +1286,15 @@ static struct hfi1_devdata *hfi1_alloc_devdata(struct pci_dev *pdev, goto bail; }rvt_set_ibdev_name (&dd->verbs_dev.rdi,"%s_%d" ,class_name (), dd->unit); +/* +* If the BIOS does not have the NUMA node information set, select +* NUMA 0 so we get consistent performance. +*/ + dd->node =pcibus_to_node (pdev->bus); +if (dd->node ==NUMA_NO_NODE ) { +dd_dev_err (dd,"Invalid PCI NUMA node. Performance may be affected\n" ); + dd->node =0 ; + }/* * Initialize all locks for the device. This needs to be as early as
drivers/infiniband/hw/hfi1/netdev_rx.c +1 -2
@@ -173,8 +173,7 @@ u32 hfi1_num_netdev_contexts(struct hfi1_devdata *dd, u32 available_contexts,return 0 ; } -cpumask_and (node_cpu_mask, cpu_mask, -cpumask_of_node (pcibus_to_node (dd->pcidev->bus))); +cpumask_and (node_cpu_mask, cpu_mask,cpumask_of_node (dd->node)); available_cpus =cpumask_weight (node_cpu_mask);
drivers/infiniband/hw/qedr/verbs.c +2 -1
@@ -1241,7 +1241,8 @@ static int qedr_check_qp_attrs(struct ib_pd *ibpd, struct qedr_dev *dev,* TGT QP isn't associated with RQ/SQ */ if ((attrs->qp_type !=IB_QPT_GSI ) && (dev->gsi_qp_created) && - (attrs->qp_type !=IB_QPT_XRC_TGT )) { + (attrs->qp_type !=IB_QPT_XRC_TGT ) && + (attrs->qp_type !=IB_QPT_XRC_INI )) {struct qedr_cq *send_cq =get_qedr_cq (attrs->send_cq);struct qedr_cq *recv_cq =get_qedr_cq (attrs->recv_cq);
drivers/infiniband/ulp/rtrs/rtrs-clt.c +1 -1
@@ -2739,8 +2739,8 @@ void rtrs_clt_close(struct rtrs_clt *clt)/* Now it is safe to iterate over all paths without locks */ list_for_each_entry_safe (sess, tmp, &clt->paths_list, s.entry) { -rtrs_clt_destroy_sess_files (sess,NULL );rtrs_clt_close_conns (sess, true); +rtrs_clt_destroy_sess_files (sess,NULL );kobject_put (&sess->kobj); }free_clt (clt);
drivers/net/can/spi/mcp251x.c +18 -6
@@ -314,6 +314,18 @@ static int mcp251x_spi_trans(struct spi_device *spi, int len)return ret; } +static int mcp251x_spi_write (struct spi_device *spi,int len) +{ +struct mcp251x_priv *priv =spi_get_drvdata (spi); +int ret; + + ret =spi_write (spi, priv->spi_tx_buf, len); +if (ret) +dev_err (&spi->dev,"spi write failed: ret = %d\n" , ret); + +return ret; +} +static u8 mcp251x_read_reg (struct spi_device *spi,u8 reg) {struct mcp251x_priv *priv =spi_get_drvdata (spi);
@@ -361,7 +373,7 @@ static void mcp251x_write_reg(struct spi_device *spi, u8 reg, u8 val) priv->spi_tx_buf[1 ] = reg; priv->spi_tx_buf[2 ] = val; -mcp251x_spi_trans (spi,3 ); +mcp251x_spi_write (spi,3 ); }static void mcp251x_write_2regs (struct spi_device *spi,u8 reg,u8 v1,u8 v2)
@@ -373,7 +385,7 @@ static void mcp251x_write_2regs(struct spi_device *spi, u8 reg, u8 v1, u8 v2) priv->spi_tx_buf[2 ] = v1; priv->spi_tx_buf[3 ] = v2; -mcp251x_spi_trans (spi,4 ); +mcp251x_spi_write (spi,4 ); } static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
@@ -386,7 +398,7 @@ static void mcp251x_write_bits(struct spi_device *spi, u8 reg, priv->spi_tx_buf[2 ] = mask; priv->spi_tx_buf[3 ] = val; -mcp251x_spi_trans (spi,4 ); +mcp251x_spi_write (spi,4 ); }static u8 mcp251x_read_stat (struct spi_device *spi)
@@ -618,7 +630,7 @@ static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf, buf[i]); }else {memcpy (priv->spi_tx_buf, buf,TXBDAT_OFF + len); -mcp251x_spi_trans (spi,TXBDAT_OFF + len); +mcp251x_spi_write (spi,TXBDAT_OFF + len); } }
@@ -650,7 +662,7 @@ static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame,/* use INSTRUCTION_RTS, to avoid "repeated frame problem" */ priv->spi_tx_buf[0 ] =INSTRUCTION_RTS (1 << tx_buf_idx); -mcp251x_spi_trans (priv->spi,1 ); +mcp251x_spi_write (priv->spi,1 ); } static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf,
@@ -888,7 +900,7 @@ static int mcp251x_hw_reset(struct spi_device *spi)mdelay (MCP251X_OST_DELAY_MS ); priv->spi_tx_buf[0 ] =INSTRUCTION_RESET ; - ret =mcp251x_spi_trans (spi,1 ); + ret =mcp251x_spi_write (spi,1 );if (ret)return ret;
drivers/net/can/usb/peak_usb/pcan_usb_core.c +5 -1
@@ -856,7 +856,7 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,if (dev->adapter->dev_set_bus) { err = dev->adapter->dev_set_bus (dev,0 );if (err) - goto lbl_unregister_candev; + goto adap_dev_free; }/* get device number early */
@@ -868,6 +868,10 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,return 0 ; +adap_dev_free: +if (dev->adapter->dev_free) + dev->adapter->dev_free (dev); + lbl_unregister_candev:unregister_candev (netdev);
drivers/net/dsa/lantiq_gswip.c +173 -22
262 lines not on this page · raw message
drivers/net/ethernet/amd/xgbe/xgbe.h +3 -3
@@ -180,9 +180,9 @@#define XGBE_DMA_SYS_AWCR 0x30303030/* DMA cache settings - PCI device */ -#define XGBE_DMA_PCI_ARCR 0x00000003 -#define XGBE_DMA_PCI_AWCR 0x13131313 -#define XGBE_DMA_PCI_AWARCR 0x00000313 +#define XGBE_DMA_PCI_ARCR 0x000f0f0f +#define XGBE_DMA_PCI_AWCR 0x0f0f0f0f +#define XGBE_DMA_PCI_AWARCR 0x00000f0f/* DMA channel interrupt modes */ #define XGBE_IRQ_MODE_EDGE 0
drivers/net/ethernet/cadence/macb_main.c +7 -0
@@ -3111,6 +3111,9 @@ static void gem_prog_cmp_regs(struct macb *bp, struct ethtool_rx_flow_spec *fs)bool cmp_b = false;bool cmp_c = false; +if (!macb_is_gem (bp)) +return ; + tp4sp_v = &(fs->h_u.tcp_ip4_spec); tp4sp_m = &(fs->m_u.tcp_ip4_spec);
@@ -3479,6 +3482,7 @@ static void macb_restore_features(struct macb *bp) {struct net_device *netdev = bp->dev;netdev_features_t features = netdev->features; +struct ethtool_rx_fs_item *item;/* TX checksum offload */ macb_set_txcsum_feature (bp, features);
@@ -3487,6 +3491,9 @@ static void macb_restore_features(struct macb *bp)macb_set_rxcsum_feature (bp, features);/* RX Flow Filters */ +list_for_each_entry (item, &bp->rx_fs_list.list, list) +gem_prog_cmp_regs (bp, &item->fs); +macb_set_rxflow_feature (bp, features); }
drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c +19 -4
@@ -1794,11 +1794,25 @@ int cudbg_collect_sge_indirect(struct cudbg_init *pdbg_init,struct cudbg_buffer temp_buff = {0 };struct sge_qbase_reg_field *sge_qbase;struct ireg_buf *ch_sge_dbg; +u8 padap_running =0 ;int i, rc; +u32 size; - rc =cudbg_get_buff (pdbg_init, dbg_buff, -sizeof (*ch_sge_dbg) *2 +sizeof (*sge_qbase), - &temp_buff); +/* Accessing SGE_QBASE_MAP[0-3] and SGE_QBASE_INDEX regs can +* lead to SGE missing doorbells under heavy traffic. So, only +* collect them when adapter is idle. +*/ +for_each_port (padap, i) { + padap_running =netif_running (padap->port[i]); +if (padap_running) +break ; + } + + size =sizeof (*ch_sge_dbg) *2 ; +if (!padap_running) + size +=sizeof (*sge_qbase); + + rc =cudbg_get_buff (pdbg_init, dbg_buff, size, &temp_buff);if (rc)return rc;
@@ -1820,7 +1834,8 @@ int cudbg_collect_sge_indirect(struct cudbg_init *pdbg_init, ch_sge_dbg++; } -if (CHELSIO_CHIP_VERSION (padap->params.chip) >CHELSIO_T5 ) { +if (CHELSIO_CHIP_VERSION (padap->params.chip) >CHELSIO_T5 && + !padap_running) { sge_qbase = (struct sge_qbase_reg_field *)ch_sge_dbg;/* 1 addr reg SGE_QBASE_INDEX and 4 data reg * SGE_QBASE_MAP[0-3]
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +2 -1
@@ -2090,7 +2090,8 @@ void t4_get_regs(struct adapter *adap, void *buf, size_t buf_size)0x1190 ,0x1194 ,0x11a0 ,0x11a4 ,0x11b0 ,0x11b4 , -0x11fc ,0x1274 , +0x11fc ,0x123c , +0x1254 ,0x1274 ,0x1280 ,0x133c ,0x1800 ,0x18fc , 0x3000, 0x302c,
drivers/net/ethernet/freescale/gianfar.c +5 -1
@@ -364,7 +364,11 @@ static void gfar_set_mac_for_addr(struct net_device *dev, int num,static int gfar_set_mac_addr (struct net_device *dev,void *p) { -eth_mac_addr (dev, p); +int ret; + + ret =eth_mac_addr (dev, p); +if (ret) +return ret;gfar_set_mac_for_addr (dev,0 , dev->dev_addr);
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +2 -2
@@ -2554,14 +2554,14 @@ static int hclgevf_ae_start(struct hnae3_handle *handle) {struct hclgevf_dev *hdev =hclgevf_ae_get_hdev (handle); +clear_bit (HCLGEVF_STATE_DOWN , &hdev->state); +hclgevf_reset_tqp_stats (handle);hclgevf_request_link_info (hdev);hclgevf_update_link_mode (hdev); -clear_bit (HCLGEVF_STATE_DOWN , &hdev->state); -return 0 ; }
drivers/net/ethernet/intel/i40e/i40e.h +1 -0
@@ -142,6 +142,7 @@ enum i40e_state_t { __I40E_VIRTCHNL_OP_PENDING, __I40E_RECOVERY_MODE, __I40E_VF_RESETS_DISABLED,/* disable resets during i40e_remove */ + __I40E_VFS_RELEASING,/* This must be last as it determines the size of the BITMAP */ __I40E_STATE_SIZE__, };
drivers/net/ethernet/intel/i40e/i40e_debugfs.c +3 -0
@@ -578,6 +578,9 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,case RING_TYPE_XDP : ring =kmemdup (vsi->xdp_rings[ring_id],sizeof (*ring),GFP_KERNEL );break ; +default : + ring =NULL ; +break ; }if (!ring)return ;
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +48 -7
92 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_main.c +7 -4
@@ -2560,8 +2560,7 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi)i40e_stat_str (hw, aq_ret), i40e_aq_str(hw, hw->aq.asq_last_status)); }else { -dev_info (&pf->pdev->dev,"%s is %s allmulti mode.\n" , - vsi->netdev->name, +dev_info (&pf->pdev->dev,"%s allmulti mode.\n" , cur_multipromisc ?"entering" :"leaving" ); } }
@@ -14647,12 +14646,16 @@ static int i40e_init_recovery_mode(struct i40e_pf *pf, struct i40e_hw *hw)* in order to register the netdev */ v_idx =i40e_vsi_mem_alloc (pf,I40E_VSI_MAIN ); -if (v_idx <0 ) +if (v_idx <0 ) { + err = v_idx; goto err_switch_setup; + } pf->lan_vsi = v_idx; vsi = pf->vsi[v_idx]; -if (!vsi) +if (!vsi) { + err = -EFAULT ; goto err_switch_setup; + } vsi->alloc_queue_pairs =1 ; err =i40e_config_netdev (vsi);if (err)
drivers/net/ethernet/intel/i40e/i40e_txrx.c +5 -7
@@ -2187,8 +2187,7 @@ int i40e_xmit_xdp_tx_ring(struct xdp_buff *xdp, struct i40e_ring *xdp_ring)* @rx_ring: Rx ring being processed * @xdp: XDP buffer containing the frame **/ -static struct sk_buff *i40e_run_xdp (struct i40e_ring *rx_ring, -struct xdp_buff *xdp) +static int i40e_run_xdp (struct i40e_ring *rx_ring,struct xdp_buff *xdp) {int err, result =I40E_XDP_PASS ;struct i40e_ring *xdp_ring;
@@ -2227,7 +2226,7 @@ static struct sk_buff *i40e_run_xdp(struct i40e_ring *rx_ring, } xdp_out:rcu_read_unlock (); -return ERR_PTR (-result); +return result; }/**
@@ -2339,6 +2338,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)unsigned int xdp_xmit =0 ;bool failure = false;struct xdp_buff xdp; +int xdp_res =0 ;#if (PAGE_SIZE <8192 ) xdp.frame_sz =i40e_rx_frame_truesize (rx_ring,0 );
@@ -2405,12 +2405,10 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)/* At larger PAGE_SIZE, frame_sz depend on len size */ xdp.frame_sz =i40e_rx_frame_truesize (rx_ring, size);#endif - skb =i40e_run_xdp (rx_ring, &xdp); + xdp_res =i40e_run_xdp (rx_ring, &xdp); } -if (IS_ERR (skb)) { -unsigned int xdp_res = -PTR_ERR (skb); - +if (xdp_res) {if (xdp_res & (I40E_XDP_TX |I40E_XDP_REDIR )) { xdp_xmit |= xdp_res;i40e_rx_buffer_flip (rx_ring, rx_buffer, size);
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +9 -0
@@ -137,6 +137,7 @@ void i40e_vc_notify_vf_reset(struct i40e_vf *vf)**/ static inline void i40e_vc_disable_vf (struct i40e_vf *vf) { +struct i40e_pf *pf = vf->pf;int i;i40e_vc_notify_vf_reset (vf);
@@ -147,6 +148,11 @@ static inline void i40e_vc_disable_vf(struct i40e_vf *vf)* ensure a reset. */ for (i =0 ; i <20 ; i++) { +/* If PF is in VFs releasing state reset VF is impossible, +* so leave it. +*/ +if (test_bit (__I40E_VFS_RELEASING, pf->state)) +return ;if (i40e_reset_vf (vf, false))return ;usleep_range (10000 ,20000 );
@@ -1574,6 +1580,8 @@ void i40e_free_vfs(struct i40e_pf *pf)if (!pf->vf)return ; + +set_bit (__I40E_VFS_RELEASING, pf->state);while (test_and_set_bit (__I40E_VF_DISABLE, pf->state))usleep_range (1000 ,2000 );
@@ -1631,6 +1639,7 @@ void i40e_free_vfs(struct i40e_pf *pf) } }clear_bit (__I40E_VF_DISABLE, pf->state); +clear_bit (__I40E_VFS_RELEASING, pf->state); }#ifdef CONFIG_PCI_IOV
drivers/net/ethernet/intel/ice/ice.h +2 -2
@@ -194,7 +194,6 @@ enum ice_state { __ICE_NEEDS_RESTART, __ICE_PREPARED_FOR_RESET,/* set by driver when prepared */ __ICE_RESET_OICR_RECV,/* set by driver after rcv reset OICR */ - __ICE_DCBNL_DEVRESET,/* set by dcbnl devreset */ __ICE_PFR_REQ,/* set by driver and peers */ __ICE_CORER_REQ,/* set by driver and peers */ __ICE_GLOBR_REQ, /* set by driver and peers */
@@ -587,7 +586,7 @@ int ice_schedule_reset(struct ice_pf *pf, enum ice_reset_req reset);void ice_print_link_msg (struct ice_vsi *vsi,bool isup);const char *ice_stat_str (enum ice_status stat_err);const char *ice_aq_str (enum ice_aq_err aq_err); -bool ice_is_wol_supported (struct ice_pf *pf); +bool ice_is_wol_supported (struct ice_hw *hw);int ice_fdir_write_fltr (struct ice_pf *pf,struct ice_fdir_fltr *input,bool add,bool is_tun);
@@ -605,6 +604,7 @@ int ice_fdir_create_dflt_rules(struct ice_pf *pf);int ice_aq_wait_for_event (struct ice_pf *pf,u16 opcode,unsigned long timeout,struct ice_rq_event_info *event);int ice_open (struct net_device *netdev); +int ice_open_internal (struct net_device *netdev);int ice_stop (struct net_device *netdev);void ice_service_task_schedule (struct ice_pf *pf);
drivers/net/ethernet/intel/ice/ice_common.c +1 -1
@@ -717,8 +717,8 @@ static enum ice_status ice_cfg_fw_log(struct ice_hw *hw, bool enable)if (!data) { data =devm_kcalloc (ice_hw_to_dev (hw), -sizeof (*data),ICE_AQC_FW_LOG_ID_MAX , +sizeof (*data),GFP_KERNEL );if (!data)return ICE_ERR_NO_MEMORY ;
drivers/net/ethernet/intel/ice/ice_controlq.h +2 -2
@@ -31,8 +31,8 @@ enum ice_ctl_q { ICE_CTL_Q_MAILBOX, }; -/* Control Queue timeout settings - max delay 250ms */ -#define ICE_CTL_Q_SQ_CMD_TIMEOUT 2500/* Count 2500 times */ +/* Control Queue timeout settings - max delay 1s */ +#define ICE_CTL_Q_SQ_CMD_TIMEOUT 10000/* Count 10000 times */ #define ICE_CTL_Q_SQ_CMD_USEC 100/* Check every 100usec */ #define ICE_CTL_Q_ADMIN_INIT_TIMEOUT 10/* Count 10 times */ #define ICE_CTL_Q_ADMIN_INIT_MSEC 100/* Check every 100msec */
drivers/net/ethernet/intel/ice/ice_dcb.c +48 -28
177 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_dcb_lib.c +25 -22
155 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_dcb_nl.c +25 -27
189 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_ethtool.c +4 -4
@@ -2986,7 +2986,7 @@ ice_get_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause) pause->rx_pause =0 ; pause->tx_pause =0 ; - dcbx_cfg = &pi->local_dcbx_cfg; + dcbx_cfg = &pi->qos_cfg.local_dcbx_cfg; pcaps =kzalloc (sizeof (*pcaps),GFP_KERNEL );if (!pcaps)
@@ -3038,7 +3038,7 @@ ice_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause) pi = vsi->port_info; hw_link_info = &pi->phy.link_info; - dcbx_cfg = &pi->local_dcbx_cfg; + dcbx_cfg = &pi->qos_cfg.local_dcbx_cfg; link_up = hw_link_info->link_info &ICE_AQ_LINK_UP ;/* Changing the port's flow control is not supported if this isn't the
@@ -3472,7 +3472,7 @@ static void ice_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)netdev_warn (netdev,"Wake on LAN is not supported on this interface!\n" );/* Get WoL settings based on the HW capability */ -if (ice_is_wol_supported (pf)) { +if (ice_is_wol_supported (&pf->hw)) { wol->supported =WAKE_MAGIC ; wol->wolopts = pf->wol_ena ?WAKE_MAGIC :0 ; }else {
@@ -3492,7 +3492,7 @@ static int ice_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)struct ice_vsi *vsi = np->vsi;struct ice_pf *pf = vsi->back; -if (vsi->type !=ICE_VSI_PF || !ice_is_wol_supported (pf)) +if (vsi->type !=ICE_VSI_PF || !ice_is_wol_supported (&pf->hw))return -EOPNOTSUPP ;/* only magic packet is supported */
drivers/net/ethernet/intel/ice/ice_lib.c +3 -4
@@ -2078,7 +2078,7 @@ int ice_cfg_vlan_pruning(struct ice_vsi *vsi, bool ena, bool vlan_promisc)static void ice_vsi_set_tc_cfg (struct ice_vsi *vsi) { -struct ice_dcbx_cfg *cfg = &vsi->port_info->local_dcbx_cfg; +struct ice_dcbx_cfg *cfg = &vsi->port_info->qos_cfg.local_dcbx_cfg; vsi->tc_cfg.ena_tc =ice_dcb_get_ena_tc (cfg); vsi->tc_cfg.numtc =ice_dcb_get_num_tc (cfg);
@@ -2489,7 +2489,7 @@ int ice_ena_vsi(struct ice_vsi *vsi, bool locked)if (!locked)rtnl_lock (); - err =ice_open (vsi->netdev); + err =ice_open_internal (vsi->netdev);if (!locked)rtnl_unlock ();
@@ -2518,7 +2518,7 @@ void ice_dis_vsi(struct ice_vsi *vsi, bool locked)if (!locked)rtnl_lock (); -ice_stop (vsi->netdev); +ice_vsi_close (vsi);if (!locked)rtnl_unlock ();
@@ -2944,7 +2944,6 @@ int ice_vsi_rebuild(struct ice_vsi *vsi, bool init_vsi)bool ice_is_reset_in_progress (unsigned long *state) {return test_bit (__ICE_RESET_OICR_RECV, state) || -test_bit (__ICE_DCBNL_DEVRESET, state) ||test_bit (__ICE_PFR_REQ, state) ||test_bit (__ICE_CORER_REQ, state) ||test_bit (__ICE_GLOBR_REQ, state);
drivers/net/ethernet/intel/ice/ice_main.c +39 -14
107 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_switch.c +9 -6
@@ -1239,6 +1239,9 @@ ice_add_update_vsi_list(struct ice_hw *hw,ice_create_vsi_list_map (hw, &vsi_handle_arr[0 ],2 , vsi_list_id); +if (!m_entry->vsi_list_info) +return ICE_ERR_NO_MEMORY ; +/* If this entry was large action then the large action needs * to be updated to point to FWD to VSI list */
@@ -2224,6 +2227,7 @@ ice_vsi_uses_fltr(struct ice_fltr_mgmt_list_entry *fm_entry, u16 vsi_handle)return ((fm_entry->fltr_info.fltr_act ==ICE_FWD_TO_VSI && fm_entry->fltr_info.vsi_handle == vsi_handle) || (fm_entry->fltr_info.fltr_act ==ICE_FWD_TO_VSI_LIST && + fm_entry->vsi_list_info && (test_bit (vsi_handle, fm_entry->vsi_list_info->vsi_map)))); }
@@ -2296,14 +2300,12 @@ ice_add_to_vsi_fltr_list(struct ice_hw *hw, u16 vsi_handle,return ICE_ERR_PARAM ;list_for_each_entry (fm_entry, lkup_list_head, list_entry) { -struct ice_fltr_info *fi; - - fi = &fm_entry->fltr_info; -if (!fi || !ice_vsi_uses_fltr (fm_entry, vsi_handle)) +if (!ice_vsi_uses_fltr (fm_entry, vsi_handle))continue ; status =ice_add_entry_to_vsi_fltr_list (hw, vsi_handle, - vsi_list_head, fi); + vsi_list_head, + &fm_entry->fltr_info);if (status)return status; }
@@ -2626,7 +2628,7 @@ ice_remove_vsi_lkup_fltr(struct ice_hw *hw, u16 vsi_handle, &remove_list_head);mutex_unlock (rule_lock);if (status) -return ; + goto free_fltr_list;switch (lkup) {case ICE_SW_LKUP_MAC :
@@ -2649,6 +2651,7 @@ ice_remove_vsi_lkup_fltr(struct ice_hw *hw, u16 vsi_handle,break ; } +free_fltr_list:list_for_each_entry_safe (fm_entry, tmp, &remove_list_head, list_entry) {list_del (&fm_entry->list_entry);devm_kfree (ice_hw_to_dev (hw), fm_entry);
drivers/net/ethernet/intel/ice/ice_txrx.c +1 -1
@@ -2421,7 +2421,7 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_ring *tx_ring)/* allow CONTROL frames egress from main VSI if FW LLDP disabled */ if (unlikely (skb->priority ==TC_PRIO_CONTROL && vsi->type ==ICE_VSI_PF && - vsi->port_info->is_sw_lldp)) + vsi->port_info->qos_cfg.is_sw_lldp)) offload.cd_qw1 |= (u64)(ICE_TX_DESC_DTYPE_CTX |ICE_TX_CTX_DESC_SWTCH_UPLINK <<ICE_TXD_CTX_QW1_CMD_S );
drivers/net/ethernet/intel/ice/ice_type.h +10 -7
@@ -493,6 +493,7 @@ struct ice_dcb_app_priority_table {#define ICE_TLV_STATUS_ERR 0x4#define ICE_APP_PROT_ID_FCOE 0x8906#define ICE_APP_PROT_ID_ISCSI 0x0cbc +#define ICE_APP_PROT_ID_ISCSI_860 0x035c#define ICE_APP_PROT_ID_FIP 0x8914#define ICE_APP_SEL_ETHTYPE 0x1#define ICE_APP_SEL_TCPIP 0x2
@@ -514,6 +515,14 @@ struct ice_dcbx_cfg {#define ICE_DCBX_APPS_NON_WILLING 0x1 }; +struct ice_qos_cfg { +struct ice_dcbx_cfg local_dcbx_cfg;/* Oper/Local Cfg */ +struct ice_dcbx_cfg desired_dcbx_cfg;/* CEE Desired Cfg */ +struct ice_dcbx_cfg remote_dcbx_cfg;/* Peer Cfg */ +u8 dcbx_status :3 ;/* see ICE_DCBX_STATUS_DIS */ +u8 is_sw_lldp :1 ; +}; +struct ice_port_info {struct ice_sched_node *root;/* Root Node per Port */ struct ice_hw *hw;/* back pointer to HW instance */
@@ -537,13 +546,7 @@ struct ice_port_info { sib_head[ICE_MAX_TRAFFIC_CLASS ][ICE_AQC_TOPO_MAX_LEVEL_NUM ];/* List contain profile ID(s) and other params per layer */ struct list_head rl_prof_list[ICE_AQC_TOPO_MAX_LEVEL_NUM ]; -struct ice_dcbx_cfg local_dcbx_cfg;/* Oper/Local Cfg */ -/* DCBX info */ -struct ice_dcbx_cfg remote_dcbx_cfg;/* Peer Cfg */ -struct ice_dcbx_cfg desired_dcbx_cfg;/* CEE Desired Cfg */ -/* LLDP/DCBX Status */ - u8 dcbx_status:3; /* see ICE_DCBX_STATUS_DIS */ - u8 is_sw_lldp:1; +struct ice_qos_cfg qos_cfg; u8 is_vf:1; };
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c +29 -7
@@ -184,6 +184,28 @@ mlx5_tc_ct_entry_has_nat(struct mlx5_ct_entry *entry)return !!(entry->tuple_nat_node.next); } +static int +mlx5_get_label_mapping (struct mlx5_tc_ct_priv *ct_priv, +u32 *labels,u32 *id) +{ +if (!memchr_inv (labels,0 ,sizeof (u32) *4 )) { + *id =0 ; +return 0 ; + } + +if (mapping_add (ct_priv->labels_mapping, labels, id)) +return -EOPNOTSUPP ; + +return 0 ; +} + +static void +mlx5_put_label_mapping (struct mlx5_tc_ct_priv *ct_priv,u32 id) +{ +if (id) +mapping_remove (ct_priv->labels_mapping, id); +} +static int mlx5_tc_ct_rule_to_tuple (struct mlx5_ct_tuple *tuple,struct flow_rule *rule) {
@@ -435,7 +457,7 @@ mlx5_tc_ct_entry_del_rule(struct mlx5_tc_ct_priv *ct_priv,mlx5_tc_rule_delete (netdev_priv (ct_priv->netdev), zone_rule->rule, attr);mlx5e_mod_hdr_detach (ct_priv->dev, ct_priv->mod_hdr_tbl, zone_rule->mh); -mapping_remove (ct_priv->labels_mapping, attr->ct_attr.ct_labels_id); +mlx5_put_label_mapping (ct_priv, attr->ct_attr.ct_labels_id);kfree (attr); }
@@ -638,8 +660,8 @@ mlx5_tc_ct_entry_create_mod_hdr(struct mlx5_tc_ct_priv *ct_priv,if (!meta)return -EOPNOTSUPP ; - err =mapping_add (ct_priv->labels_mapping, meta->ct_metadata.labels, - &attr->ct_attr.ct_labels_id); + err =mlx5_get_label_mapping (ct_priv, meta->ct_metadata.labels, + &attr->ct_attr.ct_labels_id);if (err)return -EOPNOTSUPP ;if (nat) {
@@ -675,7 +697,7 @@ mlx5_tc_ct_entry_create_mod_hdr(struct mlx5_tc_ct_priv *ct_priv, err_mapping:dealloc_mod_hdr_actions (&mod_acts); -mapping_remove (ct_priv->labels_mapping, attr->ct_attr.ct_labels_id); +mlx5_put_label_mapping (ct_priv, attr->ct_attr.ct_labels_id);return err; }
@@ -743,7 +765,7 @@ mlx5_tc_ct_entry_add_rule(struct mlx5_tc_ct_priv *ct_priv, err_rule:mlx5e_mod_hdr_detach (ct_priv->dev, ct_priv->mod_hdr_tbl, zone_rule->mh); -mapping_remove (ct_priv->labels_mapping, attr->ct_attr.ct_labels_id); +mlx5_put_label_mapping (ct_priv, attr->ct_attr.ct_labels_id); err_mod_hdr:kfree (attr); err_attr:
@@ -1198,7 +1220,7 @@ void mlx5_tc_ct_match_del(struct mlx5_tc_ct_priv *priv, struct mlx5_ct_attr *ct_if (!priv || !ct_attr->ct_labels_id)return ; -mapping_remove (priv->labels_mapping, ct_attr->ct_labels_id); +mlx5_put_label_mapping (priv, ct_attr->ct_labels_id); }int
@@ -1276,7 +1298,7 @@ mlx5_tc_ct_match_add(struct mlx5_tc_ct_priv *priv, ct_labels[1 ] = key->ct_labels[1 ] & mask->ct_labels[1 ]; ct_labels[2 ] = key->ct_labels[2 ] & mask->ct_labels[2 ]; ct_labels[3 ] = key->ct_labels[3 ] & mask->ct_labels[3 ]; -if (mapping_add (priv->labels_mapping, ct_labels, &ct_attr->ct_labels_id)) +if (mlx5_get_label_mapping (priv, ct_labels, &ct_attr->ct_labels_id))return -EOPNOTSUPP ;mlx5e_tc_match_to_reg_match (spec,LABELS_TO_REG , ct_attr->ct_labels_id,MLX5_CT_LABELS_MASK );
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +11 -11
@@ -744,11 +744,11 @@ static int get_fec_supported_advertised(struct mlx5_core_dev *dev,return 0 ; } -static void ptys2ethtool_supported_advertised_port (struct ethtool_link_ksettings *link_ksettings, -u32 eth_proto_cap, -u8 connector_type,bool ext) +static void ptys2ethtool_supported_advertised_port (struct mlx5_core_dev *mdev, +struct ethtool_link_ksettings *link_ksettings, +u32 eth_proto_cap,u8 connector_type) { -if ((!connector_type && !ext) || connector_type >=MLX5E_CONNECTOR_TYPE_NUMBER ) { +if (!MLX5_CAP_PCAM_FEATURE (mdev, ptys_connector_type)) { if (eth_proto_cap & (MLX5E_PROT_MASK(MLX5E_10GBASE_CR) | MLX5E_PROT_MASK(MLX5E_10GBASE_SR) | MLX5E_PROT_MASK(MLX5E_40GBASE_CR4)
@@ -884,9 +884,9 @@ static int ptys2connector_type[MLX5E_CONNECTOR_TYPE_NUMBER] = { [MLX5E_PORT_OTHER] = PORT_OTHER, }; -static u8 get_connector_port (u32 eth_proto,u8 connector_type,bool ext) +static u8 get_connector_port (struct mlx5_core_dev *mdev,u32 eth_proto,u8 connector_type) { -if ((connector_type || ext) && connector_type <MLX5E_CONNECTOR_TYPE_NUMBER ) +if (MLX5_CAP_PCAM_FEATURE (mdev, ptys_connector_type))return ptys2connector_type[connector_type]; if (eth_proto &
@@ -987,11 +987,11 @@ int mlx5e_ethtool_get_link_ksettings(struct mlx5e_priv *priv, data_rate_oper, link_ksettings); eth_proto_oper = eth_proto_oper ? eth_proto_oper : eth_proto_cap; - - link_ksettings->base.port =get_connector_port (eth_proto_oper, - connector_type, ext); -ptys2ethtool_supported_advertised_port (link_ksettings, eth_proto_admin, - connector_type, ext); + connector_type = connector_type <MLX5E_CONNECTOR_TYPE_NUMBER ? + connector_type :MLX5E_PORT_UNKNOWN ; + link_ksettings->base.port =get_connector_port (mdev, eth_proto_oper, connector_type); +ptys2ethtool_supported_advertised_port (mdev, link_ksettings, eth_proto_admin, + connector_type);get_lp_advertising (mdev, eth_proto_lp, link_ksettings);if (an_status ==MLX5_AN_COMPLETE )
drivers/net/ethernet/mellanox/mlx5/core/eq.c +12 -1
@@ -926,13 +926,24 @@ void mlx5_core_eq_free_irqs(struct mlx5_core_dev *dev)mutex_unlock (&table->lock); } +#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING +#define MLX5_MAX_ASYNC_EQS 4 +#else +#define MLX5_MAX_ASYNC_EQS 3 +#endif +int mlx5_eq_table_create (struct mlx5_core_dev *dev) {struct mlx5_eq_table *eq_table = dev->priv.eq_table; +int num_eqs =MLX5_CAP_GEN (dev, max_num_eqs) ? +MLX5_CAP_GEN (dev, max_num_eqs) : +1 <<MLX5_CAP_GEN (dev, log_max_eq);int err; eq_table->num_comp_eqs = -mlx5_irq_get_num_comp (eq_table->irq_table); +min_t (int, +mlx5_irq_get_num_comp (eq_table->irq_table), + num_eqs -MLX5_MAX_ASYNC_EQS ); err =create_async_eqs (dev);if (err) {
drivers/net/ethernet/mellanox/mlxsw/spectrum.h +15 -0
@@ -20,6 +20,7 @@#include <net/red.h> #include <net/vxlan.h> #include <net/flow_offload.h> +#include <net/inet_ecn.h> #include "port.h" #include "core.h"
@@ -345,6 +346,20 @@ struct mlxsw_sp_port_type_speed_ops {u32 (*ptys_proto_cap_masked_get)(u32 eth_proto_cap); }; +static inline u8 mlxsw_sp_tunnel_ecn_decap (u8 outer_ecn,u8 inner_ecn, +bool *trap_en) +{ +bool set_ce = false; + + *trap_en = !!__INET_ECN_decapsulate (outer_ecn, inner_ecn, &set_ce); +if (set_ce) +return INET_ECN_CE ; +else if (outer_ecn ==INET_ECN_ECT_1 && inner_ecn ==INET_ECN_ECT_0 ) +return INET_ECN_ECT_1 ; +else +return inner_ecn; +} +static inline struct net_device *mlxsw_sp_bridge_vxlan_dev_find (struct net_device *br_dev) {
drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.c +3 -4
@@ -371,12 +371,11 @@ static int mlxsw_sp_ipip_ecn_decap_init_one(struct mlxsw_sp *mlxsw_sp, u8 inner_ecn, u8 outer_ecn) { char tidem_pl[MLXSW_REG_TIDEM_LEN]; -bool trap_en, set_ce = false;u8 new_inner_ecn; +bool trap_en; - trap_en =__INET_ECN_decapsulate (outer_ecn, inner_ecn, &set_ce); - new_inner_ecn = set_ce ?INET_ECN_CE : inner_ecn; - + new_inner_ecn =mlxsw_sp_tunnel_ecn_decap (outer_ecn, inner_ecn, + &trap_en);mlxsw_reg_tidem_pack (tidem_pl, outer_ecn, inner_ecn, new_inner_ecn, trap_en, trap_en ?MLXSW_TRAP_ID_DECAP_ECN0 :0 );return mlxsw_reg_write (mlxsw_sp->core,MLXSW_REG (tidem), tidem_pl);
drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c +3 -4
@@ -909,12 +909,11 @@ static int __mlxsw_sp_nve_ecn_decap_init(struct mlxsw_sp *mlxsw_sp, u8 inner_ecn, u8 outer_ecn) { char tndem_pl[MLXSW_REG_TNDEM_LEN]; -bool trap_en, set_ce = false;u8 new_inner_ecn; +bool trap_en; - trap_en = !!__INET_ECN_decapsulate (outer_ecn, inner_ecn, &set_ce); - new_inner_ecn = set_ce ?INET_ECN_CE : inner_ecn; - + new_inner_ecn =mlxsw_sp_tunnel_ecn_decap (outer_ecn, inner_ecn, + &trap_en);mlxsw_reg_tndem_pack (tndem_pl, outer_ecn, inner_ecn, new_inner_ecn, trap_en, trap_en ?MLXSW_TRAP_ID_DECAP_ECN0 :0 );return mlxsw_reg_write (mlxsw_sp->core,MLXSW_REG (tndem), tndem_pl);
drivers/net/ethernet/myricom/myri10ge/myri10ge.c +1 -1
@@ -2897,7 +2897,7 @@ static netdev_tx_t myri10ge_sw_tso(struct sk_buff *skb,dev_kfree_skb_any (curr);if (segs !=NULL ) { curr = segs; - segs = segs->next; + segs = next; curr->next =NULL ;dev_kfree_skb_any (segs); }
drivers/net/ethernet/netronome/nfp/bpf/cmsg.c +1 -0
@@ -454,6 +454,7 @@ void nfp_bpf_ctrl_msg_rx(struct nfp_app *app, struct sk_buff *skb)dev_consume_skb_any (skb); elsedev_kfree_skb_any (skb ); +return ; }nfp_ccm_rx (&bpf->ccm, skb);
drivers/net/ethernet/netronome/nfp/flower/main.h +8 -0
@@ -190,6 +190,7 @@ struct nfp_fl_internal_ports {* @qos_rate_limiters: Current active qos rate limiters * @qos_stats_lock: Lock on qos stats updates * @pre_tun_rule_cnt: Number of pre-tunnel rules offloaded +* @merge_table: Hash table to store merged flows */ struct nfp_flower_priv {struct nfp_app *app;
@@ -223,6 +224,7 @@ struct nfp_flower_priv {unsigned int qos_rate_limiters;spinlock_t qos_stats_lock;/* Protect the qos stats */ int pre_tun_rule_cnt; +struct rhashtable merge_table; };/**
@@ -350,6 +352,12 @@ struct nfp_fl_payload_link { };extern const struct rhashtable_params nfp_flower_table_params; +extern const struct rhashtable_params merge_table_params; + +struct nfp_merge_info { +u64 parent_ctx; +struct rhash_head ht_node; +};struct nfp_fl_stats_frame {__be32 stats_con_id;
drivers/net/ethernet/netronome/nfp/flower/metadata.c +15 -1
@@ -490,6 +490,12 @@ const struct rhashtable_params nfp_flower_table_params = { .automatic_shrinking = true, }; +const struct rhashtable_params merge_table_params = { + .key_offset = offsetof(struct nfp_merge_info , parent_ctx), + .head_offset = offsetof(struct nfp_merge_info , ht_node), + .key_len =sizeof (u64), +}; +int nfp_flower_metadata_init (struct nfp_app *app,u64 host_ctx_count,unsigned int host_num_mems) {
@@ -506,6 +512,10 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count,if (err) goto err_free_flow_table; + err =rhashtable_init (&priv->merge_table, &merge_table_params); +if (err) + goto err_free_stats_ctx_table; +get_random_bytes (&priv->mask_id_seed,sizeof (priv->mask_id_seed));/* Init ring buffer and unallocated mask_ids. */
@@ -513,7 +523,7 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count,kmalloc_array (NFP_FLOWER_MASK_ENTRY_RS ,NFP_FLOWER_MASK_ELEMENT_RS ,GFP_KERNEL );if (!priv->mask_ids.mask_id_free_list.buf) - goto err_free_stats_ctx_table; + goto err_free_merge_table; priv->mask_ids.init_unallocated =NFP_FLOWER_MASK_ENTRY_RS -1 ;
@@ -550,6 +560,8 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count,kfree (priv->mask_ids.last_used); err_free_mask_id:kfree (priv->mask_ids.mask_id_free_list.buf); +err_free_merge_table: +rhashtable_destroy (&priv->merge_table); err_free_stats_ctx_table:rhashtable_destroy (&priv->stats_ctx_table); err_free_flow_table:
@@ -568,6 +580,8 @@ void nfp_flower_metadata_cleanup(struct nfp_app *app) nfp_check_rhashtable_empty, NULL);rhashtable_free_and_destroy (&priv->stats_ctx_table, nfp_check_rhashtable_empty,NULL ); +rhashtable_free_and_destroy (&priv->merge_table, + nfp_check_rhashtable_empty,NULL );kvfree (priv->stats);kfree (priv->mask_ids.mask_id_free_list.buf);kfree (priv->mask_ids.last_used);
drivers/net/ethernet/netronome/nfp/flower/offload.c +46 -2
89 lines not on this page · raw message
drivers/net/geneve.c +20 -4
@@ -907,8 +907,16 @@ static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev, info =skb_tunnel_info (skb);if (info) { - info->key.u.ipv4.dst = fl4.saddr; - info->key.u.ipv4.src = fl4.daddr; +struct ip_tunnel_info *unclone; + + unclone =skb_tunnel_info_unclone (skb); +if (unlikely (!unclone)) { +dst_release (&rt->dst); +return -ENOMEM ; + } + + unclone->key.u.ipv4.dst = fl4.saddr; + unclone->key.u.ipv4.src = fl4.daddr; }if (!pskb_may_pull (skb,ETH_HLEN )) {
@@ -992,8 +1000,16 @@ static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev,struct ip_tunnel_info *info =skb_tunnel_info (skb);if (info) { - info->key.u.ipv6.dst = fl6.saddr; - info->key.u.ipv6.src = fl6.daddr; +struct ip_tunnel_info *unclone; + + unclone =skb_tunnel_info_unclone (skb); +if (unlikely (!unclone)) { +dst_release (dst); +return -ENOMEM ; + } + + unclone->key.u.ipv6.dst = fl6.saddr; + unclone->key.u.ipv6.src = fl6.daddr; }if (!pskb_may_pull (skb,ETH_HLEN )) {
drivers/net/ieee802154/atusb.c +1 -0
@@ -365,6 +365,7 @@ static int atusb_alloc_urbs(struct atusb *atusb, int n)return -ENOMEM ; }usb_anchor_urb (urb, &atusb->idle_urbs); +usb_free_urb (urb); n--; }return 0 ;
drivers/net/phy/bcm-phy-lib.c +10 -3
@@ -328,7 +328,7 @@ EXPORT_SYMBOL_GPL(bcm_phy_enable_apd);int bcm_phy_set_eee (struct phy_device *phydev,bool enable) { -int val; +int val, mask =0 ;/* Enable EEE at PHY level */ val =phy_read_mmd (phydev,MDIO_MMD_AN ,BRCM_CL45VEN_EEE_CONTROL );
@@ -347,10 +347,17 @@ int bcm_phy_set_eee(struct phy_device *phydev, bool enable)if (val <0 )return val; +if (linkmode_test_bit (ETHTOOL_LINK_MODE_1000baseT_Full_BIT, + phydev->supported)) + mask |=MDIO_EEE_1000T ; +if (linkmode_test_bit (ETHTOOL_LINK_MODE_100baseT_Full_BIT, + phydev->supported)) + mask |=MDIO_EEE_100TX ; +if (enable) - val |= (MDIO_EEE_100TX |MDIO_EEE_1000T ); + val |= mask;else - val &= ~(MDIO_EEE_100TX |MDIO_EEE_1000T ); + val &= ~mask;phy_write_mmd (phydev,MDIO_MMD_AN ,BCM_CL45VEN_EEE_ADV , (u32 )val);
drivers/net/tun.c +48 -0
66 lines not on this page · raw message
drivers/net/usb/hso.c +12 -21
@@ -611,7 +611,7 @@ static struct hso_serial *get_serial_by_index(unsigned index)return serial; } -static int get_free_serial_index (void ) +static int obtain_minor (struct hso_serial *serial) {int index;unsigned long flags;
@@ -619,8 +619,10 @@ static int get_free_serial_index(void)spin_lock_irqsave (&serial_table_lock, flags);for (index =0 ; index <HSO_SERIAL_TTY_MINORS ; index++) {if (serial_table[index] ==NULL ) { + serial_table[index] = serial->parent; + serial->minor = index;spin_unlock_irqrestore (&serial_table_lock, flags); -return index; +return 0 ; } }spin_unlock_irqrestore (&serial_table_lock, flags);
@@ -629,15 +631,12 @@ static int get_free_serial_index(void)return -1 ; }
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c +1 -30
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c +1 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c +35 -0
Lines of this file are not shown. View the raw message.
drivers/regulator/bd9571mwv-regulator.c +2 -2
Lines of this file are not shown. View the raw message.
net/mptcp/protocol.c +45 -0
45 lines not on this page · raw message
net/sched/act_api.c +31 -17
48 lines not on this page · raw message
security/selinux/ss/avtab.c +33 -68
101 lines not on this page · raw message
security/selinux/ss/services.c +120 -37
157 lines not on this page · raw message
sound/soc/intel/atom/sst-mfld-platform-pcm.c +3 -3
Lines of this file are not shown. View the raw message.
tools/lib/bpf/xsk.c +37 -20
57 lines not on this page · 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.
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 5.10.30 kernel.
All users of the 5.10 kernel series must upgrade.
Quoted 9 lines
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-5.10.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=summarythanks,
greg k-h
Tested on arm64 and x86 for 5.10.30,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-5.10.y
Version: 5.10.30
Commit: 1e798745fa8ef91ffe4fd38d443f9d44b59e3cb3
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 5764
passed: 5764
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 5764
passed: 5764
failed: 0
timeout: 0
--------------------------------------------------------------------