Linux 5.15.6
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.6 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/admin-guide/sysctl/kernel.rst | 2 Documentation/networking/ipvs-sysctl.rst | 3 Makefile | 2 arch/arm/boot/dts/bcm2711.dtsi | 8 arch/arm/boot/dts/bcm5301x.dtsi | 4 arch/arm/mach-socfpga/core.h | 2 arch/arm/mach-socfpga/platsmp.c | 8 arch/arm64/include/asm/pgalloc.h | 2 arch/arm64/include/asm/uaccess.h | 48 ++ arch/mips/Kconfig | 2 arch/mips/kernel/cpu-probe.c | 4 arch/parisc/kernel/vmlinux.lds.S | 3 arch/powerpc/kernel/head_32.h | 6 arch/powerpc/kvm/book3s_hv_builtin.c | 5 arch/riscv/boot/dts/microchip/microchip-mpfs-icicle-kit.dts | 13 arch/riscv/boot/dts/microchip/microchip-mpfs.dtsi | 33 - arch/x86/include/asm/xen/hypervisor.h | 5 block/blk-core.c | 4 block/blk-mq.c | 13 block/blk-mq.h | 2 block/blk-sysfs.c | 10 block/elevator.c | 10 block/genhd.c | 2 drivers/acpi/cppc_acpi.c | 9 drivers/acpi/property.c | 11 drivers/android/binder.c | 2 drivers/cpufreq/intel_pstate.c | 7 drivers/firmware/arm_scmi/base.c | 15 drivers/firmware/arm_scmi/scmi_pm_domain.c | 4 drivers/firmware/arm_scmi/sensors.c | 2 drivers/firmware/arm_scmi/virtio.c | 10 drivers/firmware/arm_scmi/voltage.c | 2 drivers/firmware/smccc/soc_id.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c | 3 drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 15 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 46 +- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 9 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c | 20 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 24 - drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c | 6 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 28 - drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 10 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 58 +- drivers/gpu/drm/aspeed/aspeed_gfx_drv.c | 2 drivers/gpu/drm/hyperv/hyperv_drm_drv.c | 19 drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 22 + drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c | 6 drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.c | 6 drivers/gpu/drm/vc4/vc4_bo.c | 2 drivers/hid/hid-input.c | 6 drivers/hid/hid-magicmouse.c | 7 drivers/hid/wacom_wac.c | 8 drivers/hid/wacom_wac.h | 1 drivers/i2c/busses/i2c-virtio.c | 14 drivers/iommu/amd/iommu_v2.c | 6 drivers/iommu/intel/iommu.c | 6 drivers/iommu/rockchip-iommu.c | 4 drivers/media/cec/core/cec-adap.c | 1 drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 41 -- drivers/mmc/host/sdhci-esdhc-imx.c | 2 drivers/mmc/host/sdhci.c | 21 - drivers/mmc/host/sdhci.h | 4 drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 4 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 4 drivers/net/ethernet/intel/iavf/iavf.h | 3 drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 33 + drivers/net/ethernet/intel/iavf/iavf_main.c | 51 +- drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 47 ++ drivers/net/ethernet/intel/ice/ice_lib.c | 9 drivers/net/ethernet/intel/ice/ice_main.c | 18 drivers/net/ethernet/intel/igb/igb_main.c | 2 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 14 drivers/net/ethernet/marvell/prestera/prestera_switchdev.c | 8 drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 2 drivers/net/ethernet/microchip/lan743x_main.c | 12 drivers/net/ethernet/mscc/ocelot.c | 11 drivers/net/ethernet/netronome/nfp/nfp_net.h | 3 drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c | 2 drivers/net/ethernet/stmicro/stmmac/stmmac.h | 1 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 127 ++++-- drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 2 drivers/net/ipa/ipa_cmd.c | 16 drivers/net/ipa/ipa_cmd.h | 6 drivers/net/ipa/ipa_endpoint.c | 2 drivers/net/ipa/ipa_main.c | 6 drivers/net/ipa/ipa_modem.c | 6 drivers/net/ipa/ipa_smp2p.c | 21 - drivers/net/ipa/ipa_smp2p.h | 7 drivers/net/mdio/mdio-aspeed.c | 7 drivers/net/phy/phylink.c | 26 + drivers/net/usb/smsc95xx.c | 55 +- drivers/nvme/target/io-cmd-file.c | 4 drivers/nvme/target/tcp.c | 7 drivers/pci/controller/pci-aardvark.c | 242 ++++-------- drivers/scsi/mpt3sas/mpt3sas_base.c | 4 drivers/scsi/mpt3sas/mpt3sas_base.h | 4 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 59 ++ drivers/scsi/qla2xxx/qla_edif.c | 2 drivers/scsi/scsi_debug.c | 5 drivers/scsi/scsi_sysfs.c | 2 drivers/scsi/sd.c | 7 drivers/staging/fbtft/fb_ssd1351.c | 4 drivers/staging/fbtft/fbtft-core.c | 9 drivers/staging/greybus/audio_helper.c | 8 drivers/staging/r8188eu/core/rtw_mlme_ext.c | 6 drivers/staging/r8188eu/os_dep/ioctl_linux.c | 8 drivers/staging/r8188eu/os_dep/mlme_linux.c | 2 drivers/staging/rtl8192e/rtl8192e/rtl_core.c | 3 drivers/usb/chipidea/ci_hdrc_imx.c | 18 drivers/usb/core/hub.c | 24 - drivers/usb/dwc2/gadget.c | 17 drivers/usb/dwc2/hcd_queue.c | 2 drivers/usb/dwc3/core.c | 8 drivers/usb/dwc3/core.h | 2 drivers/usb/dwc3/gadget.c | 39 + drivers/usb/host/xhci-tegra.c | 41 +- drivers/usb/serial/option.c | 5 drivers/usb/serial/pl2303.c | 1 drivers/usb/typec/tcpm/fusb302.c | 6 drivers/vdpa/vdpa_sim/vdpa_sim.c | 7 drivers/vhost/vsock.c | 2 drivers/xen/xenbus/xenbus_probe.c | 27 + fs/ceph/super.c | 11 fs/cifs/cifs_debug.c | 2 fs/cifs/cifsglob.h | 1 fs/cifs/connect.c | 7 fs/erofs/utils.c | 8 fs/f2fs/checkpoint.c | 3 fs/f2fs/node.c | 1 fs/fuse/dev.c | 10 fs/io_uring.c | 70 ++- fs/iomap/buffered-io.c | 11 fs/ksmbd/smb2pdu.c | 30 - fs/nfs/nfs42proc.c | 4 fs/nfs/nfs42xdr.c | 3 fs/proc/vmcore.c | 16 include/net/ip6_fib.h | 1 include/net/ipv6_stubs.h | 1 include/net/nl802154.h | 7 kernel/cpu.c | 7 kernel/events/core.c | 3 kernel/locking/rwsem.c | 171 ++++---- kernel/power/hibernate.c | 6 kernel/sched/core.c | 4 kernel/trace/trace.h | 24 - kernel/trace/trace_events.c | 10 kernel/trace/trace_uprobe.c | 1 net/8021q/vlan.c | 3 net/8021q/vlan_dev.c | 3 net/ethtool/ioctl.c | 2 net/ipv4/nexthop.c | 35 + net/ipv4/tcp_cubic.c | 5 net/ipv6/af_inet6.c | 1 net/ipv6/ip6_output.c | 2 net/ipv6/route.c | 19 net/mptcp/options.c | 32 - net/mptcp/protocol.c | 51 ++ net/mptcp/protocol.h | 17 net/ncsi/ncsi-cmd.c | 24 - net/netfilter/ipvs/ip_vs_core.c | 8 net/netfilter/nf_conntrack_netlink.c | 6 net/netfilter/nf_flow_table_offload.c | 4 net/sched/sch_ets.c | 8 net/smc/af_smc.c | 12 net/smc/smc_close.c | 6 net/smc/smc_core.c | 35 - net/tls/tls_main.c | 47 +- net/tls/tls_sw.c | 40 + net/unix/af_unix.c | 3 sound/hda/intel-dsp-config.c | 9 sound/pci/ctxfi/ctamixer.c | 14 sound/pci/ctxfi/ctdaio.c | 16 sound/pci/ctxfi/ctresource.c | 7 sound/pci/ctxfi/ctresource.h | 4 sound/pci/ctxfi/ctsrc.c | 7 sound/pci/hda/patch_realtek.c | 28 + sound/soc/codecs/lpass-rx-macro.c | 2 sound/soc/codecs/wcd934x.c | 3 sound/soc/codecs/wcd938x.c | 3 sound/soc/qcom/qdsp6/q6asm-dai.c | 19 sound/soc/qcom/qdsp6/q6routing.c | 6 sound/soc/soc-topology.c | 3 sound/soc/sof/intel/hda-bus.c | 17 sound/soc/sof/intel/hda-dsp.c | 3 sound/soc/sof/intel/hda.c | 16 sound/soc/stm/stm32_i2s.c | 2 186 files changed, 1694 insertions(+), 972 deletions(-)
Adamos Ttofari (1):
cpufreq: intel_pstate: Add Ice Lake server to out-of-band IDs
Adrian Hunter (1):
mmc: sdhci: Fix ADMA for PAGE_SIZE >= 64KiB
Albert Wang (1):
usb: dwc3: gadget: Fix null pointer exception
Alex Bee (1):
iommu/rockchip: Fix PAGE_DESC_HI_MASKs for RK3568
Alex Deucher (3):
drm/amdgpu/pm: fix powerplay OD interface drm/amdgpu/gfx10: add wraparound gpu counter check for APUs as well drm/amdgpu/gfx9: switch to golden tsc registers for renoir+
Alex Elder (3):
net: ipa: directly disable ipa-setup-ready interrupt
net: ipa: separate disabling setup from modem stop
net: ipa: kill ipa_cmd_pipeline_clear()
Alex Williamson (1):
iommu/vt-d: Fix unmap_pages support
Alexander Aring (1):
net: ieee802154: handle iftypes as u32
Amit Cohen (1):
mlxsw: spectrum: Protect driver from buggy firmware
Andreas Gruenbacher (1):
iomap: Fix inline extent handling in iomap_readpage
Arnd Bergmann (1):
media: v4l2-core: fix VIDIOC_DQEVENT handling on non-x86
Ben Skeggs (1):
drm/nouveau: recognise GA106
Benjamin Coddington (1):
NFSv42: Fix pagecache invalidation after COPY/CLONE
Brett Creeley (1):
iavf: Fix VLAN feature flags after VFR
Chao Yu (1):
f2fs: quota: fix potential deadlock
Christophe JAILLET (1):
ksmbd: Fix an error handling path in 'smb2_sess_setup()'
Christophe Leroy (1):
powerpc/32: Fix hardlockup on vmap stack overflow
Claudia Pellegrino (1):
HID: magicmouse: prevent division by 0 on scroll
Cristian Marussi (3):
firmware: arm_scmi: Fix null de-reference on error path
firmware: arm_scmi: Fix type error assignment in voltage protocol
firmware: arm_scmi: Fix type error in sensor protocol
Damien Le Moal (1):
scsi: sd: Fix sd_do_mode_sense() buffer length handling
Dan Carpenter (6):
usb: chipidea: ci_hdrc_imx: fix potential error pointer dereference in probe
staging: rtl8192e: Fix use after free in _rtl92e_pci_disconnect()
staging: r8188eu: fix a memory leak in rtw_wx_read32() drm/nouveau/acr: fix a couple NULL vs IS_ERR() checks
scsi: qla2xxx: edif: Fix off by one bug in qla_edif_app_getfcinfo() drm/vc4: fix error code in vc4_create_object()
Daniele Palmas (1):
USB: serial: option: add Telit LE910S1 0x9200 composition
David Hildenbrand (1):
proc/vmcore: fix clearing user buffer by properly using clear_user()
Davide Caratti (1):
net/sched: sch_ets: don't peek at classes beyond 'nbands'
Diana Wang (1):
nfp: checking parameter process for rx-usecs/tx-usecs is invalid
Dmitry Osipenko (1):
usb: xhci: tegra: Check padctrl interrupt presence in device tree
Dylan Hung (1):
mdio: aspeed: Fix "Link is Down" issue
Eric Dumazet (3):
mptcp: fix delack timer
ipv6: fix typos in __ip6_finish_output()
tcp_cubic: fix spurious Hystart ACK train detections for not-cwnd-limited flows
Fabio Aiuto (1):
usb: dwc3: leave default DMA for PCI devices
Fabio M. De Francesco (1):
staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context
Florent Fourcot (2):
netfilter: ctnetlink: fix filtering with CTA_TUPLE_REPLY
netfilter: ctnetlink: do not erase error code with EINVAL
Florian Fainelli (3):
ARM: dts: BCM5301X: Fix I2C controller interrupt
ARM: dts: BCM5301X: Add interrupt properties to GPIO node
ARM: dts: bcm2711: Fix PCIe interrupts
Greg Kroah-Hartman (1):
Linux 5.15.6
Guangbin Huang (1):
net: hns3: fix VF RSS failed problem after PF enable multi-TCs
Guo DaXing (1):
net/smc: Fix loop in smc_listen
Hans Verkuil (1):
media: cec: copy sequence field for the reply
Hans de Goede (1):
HID: input: Fix parsing of HID_CP_CONSUMER_CONTROL fields
Heiner Kallweit (1):
lan743x: fix deadlock in lan743x_phy_link_status_change()
Helge Deller (1):
Revert "parisc: Fix backtrace to always include init funtion names"
Holger Assmann (1):
net: stmmac: retain PTP clock time during SIOCSHWTSTAMP ioctls
Huang Jianan (1):
erofs: fix deadlock when shrink erofs slab
Huang Pei (2):
MIPS: loongson64: fix FTLB configuration
MIPS: use 3-level pgtable for 64KB page size on MIPS_VA_BITS_48
Jakub Kicinski (3):
tls: splice_read: fix record type check
tls: splice_read: fix accessing pre-processed records
tls: fix replacing proto_ops
Jason Gerecke (1):
HID: wacom: Use "Confidence" flag to prevent reporting invalid contacts
Jedrzej Jagielski (1):
iavf: Fix refreshing iavf adapter stats on ethtool request
Jeff Layton (1):
ceph: properly handle statfs on multifs setups
Jesse Brandeburg (1):
igb: fix netpoll exit with traffic
Jie Wang (1):
net: hns3: fix incorrect components info of ethtool --reset command
Jiri Olsa (1):
tracing/uprobe: Fix uprobe_perf_open probes iteration
Joel Stanley (1):
drm/aspeed: Fix vga_pw sysfs output
Joerg Roedel (1):
iommu/amd: Clarify AMD IOMMUv2 initialization messages
Johan Hovold (1):
USB: serial: pl2303: fix GC type detection
Juergen Gross (2):
x86/pvh: add prototype for xen_pvh_init()
xen/pvh: add missing prototype to header
Julian Wiedmann (1):
ethtool: ioctl: fix potential NULL deref in ethtool_set_coalesce()
Kai Vehmanen (1):
ASoC: SOF: Intel: hda: fix hotplug when only codec is suspended
Karsten Graul (1):
net/smc: Fix NULL pointer dereferencing in smc_vlan_by_tcpsk()
Krzysztof Kozlowski (2):
riscv: dts: microchip: fix board compatible
riscv: dts: microchip: drop duplicated MMC/SDHC node
Kumar Thangavel (1):
net/ncsi : Add payload to be 32-bit aligned to fix dropped packets
Larry Finger (1):
staging: r8188eu: Fix breakage introduced when 5G code was removed
Longpeng (1):
vdpa_sim: avoid putting an uninitialized iova_domain
Maciej Fijalkowski (1):
ice: fix vsi->txq_map sizing
Marco Elver (1):
perf: Ignore sigtrap for tracepoints destined for other tasks
Marek Behún (2):
PCI: aardvark: Deduplicate code in advk_pcie_rd_conf()
net: marvell: mvpp2: increase MTU limit when XDP enabled
Mark Rutland (2):
arm64: uaccess: avoid blocking within critical sections sched/scs: Reset task stack state in bringup_cpu()
Marta Plantykow (1):
ice: avoid bpf_prog refcount underflow
Martyn Welch (1):
net: usb: Correct PHY handling of smsc95xx
Mathias Nyman (2):
usb: hub: Fix usb enumeration issue due to address0 race
usb: hub: Fix locking issues with address0_mutex
Maurizio Lombardi (1):
nvmet: use IOCB_NOWAIT only if the filesystem supports it
Mauro Carvalho Chehab (1):
docs: accounting: update delay-accounting.rst reference
Michael Kelley (1):
firmware: smccc: Fix check for ARCH_SOC_ID not implemented
Michael Straube (1):
staging: r8188eu: use GFP_ATOMIC under spinlock
Mike Christie (1):
scsi: core: sysfs: Fix setting device state to SDEV_RUNNING
Miklos Szeredi (1):
fuse: release pipe buf after last use
Minas Harutyunyan (1):
usb: dwc2: gadget: Fix ISOC flow for elapsed frames
Ming Lei (2):
blk-mq: cancel blk-mq dispatch work in both blk_cleanup_queue and disk_release()
block: avoid to quiesce queue in elevator_init_mq
Mingjie Zhang (1):
USB: serial: option: add Fibocom FM101-GL variants
Mohammed Gamal (1):
drm/hyperv: Fix device removal on Gen1 VMs
Namjae Jeon (3):
ksmbd: downgrade addition info error msg to debug in smb2_get_info_sec()
ksmbd: contain default data stream even if xattr is empty
ksmbd: fix memleak in get_file_stream_info()
Nathan Chancellor (1):
usb: dwc2: hcd_queue: Fix use of floating point literal
Nicholas Kazlauskas (2):
drm/amd/display: Fix DPIA outbox timeout after GPU reset drm/amd/display: Set plane update flags for all planes in reset
Nicholas Piggin (1):
KVM: PPC: Book3S HV: Prevent POWER7/8 TLB flush flushing SLB
Nikolay Aleksandrov (3):
net: nexthop: fix null pointer dereference when IPv6 is not enabled
net: ipv6: add fib6_nh_release_dsts stub
net: nexthop: release IPv6 per-cpu dsts when replacing a nexthop group
Nitesh B Venkatesh (1):
iavf: Prevent changing static ITR values if adaptive moderation is on
Noralf Trønnes (1):
staging/fbtft: Fix backlight
Olivier Moysan (1):
ASoC: stm32: i2s: fix 32 bits channel length without mclk
Ondrej Jirman (1):
usb: typec: fusb302: Fix masking of comparator and bc_lvl interrupts
Pali Rohár (3):
PCI: aardvark: Implement re-issuing config requests on CRS response
PCI: aardvark: Simplify initialization of rootcap on virtual bridge
PCI: aardvark: Fix link training
Paolo Abeni (1):
mptcp: use delegate action to schedule 3rd ack retrans
Pavel Begunkov (3):
io_uring: correct link-list traversal locking
io_uring: fail cancellation for EXITING tasks
io_uring: fix link traversal locking
Peng Fan (1):
firmware: arm_scmi: pm: Propagate return value to caller
Philip Yang (1):
drm/amdgpu: IH process reset count when restart
Pierre-Louis Bossart (1):
ALSA: intel-dsp-config: add quirk for JSL devices based on ES8336 codec
Pingfan Liu (1):
arm64: mm: Fix VM_BUG_ON(mm != &init_mm) for trans_pgd
Rafael J. Wysocki (2):
ACPI: CPPC: Add NULL pointer check to cppc_get_perf()
cpufreq: intel_pstate: Fix active mode offline/online EPP handling
Roman Li (1):
drm/amd/display: Fix OLED brightness control on eDP
Russell King (Oracle) (2):
net: phylink: Force link down and retrigger resolve on interface change
net: phylink: Force retrigger in case of latched link-fail indicator
Sakari Ailus (1):
ACPI: Get acpi_device's parent from the parent field
Shin'ichiro Kawasaki (1):
scsi: scsi_debug: Zero clear zones at reset write pointer
Shyam Prasad N (2):
cifs: nosharesock should not share socket with future sessions
cifs: nosharesock should be set on new server
Sreekanth Reddy (3):
scsi: mpt3sas: Fix kernel panic during drive powercycle test
scsi: mpt3sas: Fix system going into read-only mode
scsi: mpt3sas: Fix incorrect system timestamp
Srinivas Kandagatla (5):
ASoC: qdsp6: q6routing: Conditionally reset FrontEnd Mixer
ASoC: qdsp6: q6asm: fix q6asm_dai_prepare error handling
ASoC: codecs: wcd938x: fix volatile register range
ASoC: codecs: wcd934x: return error code correctly from hw_params
ASoC: codecs: lpass-rx-macro: fix HPHR setting CLSH mask
Stefano Garzarella (1):
vhost/vsock: fix incorrect used length reported to the guest
Stefano Stabellini (2):
xen: don't continue xenstore initialization in case of errors
xen: detect uninitialized xenbus in xenbus_init
Steven Rostedt (VMware) (2):
tracing: Fix pid filtering when triggers are attached
tracing: Check pid filtering when creating events
Takashi Iwai (5):
ALSA: ctxfi: Fix out-of-range access
ALSA: hda/realtek: Fix LED on HP ProBook 435 G7
staging: greybus: Add missing rwsem around snd_ctl_remove() calls
ASoC: topology: Add missing rwsem around snd_ctl_remove() calls
ARM: socfpga: Fix crash with CONFIG_FORTIRY_SOURCE
Thinh Nguyen (3):
usb: dwc3: core: Revise GHWPARAMS9 offset
usb: dwc3: gadget: Ignore NoStream after End Transfer
usb: dwc3: gadget: Check for L1/L2/U3 for Start Transfer
Thomas Weißschuh (1):
HID: input: set usage type to key on keycode remap
Thomas Zeitlhofer (1):
PM: hibernate: use correct mode for swsusp_close()
Tim Harvey (1):
mmc: sdhci-esdhc-imx: disable CMDQ support
Todd Kjos (1):
binder: fix test regression due to sender_euid change
Tony Lu (2):
net/smc: Ensure the active closing peer first closes clcsock net/smc: Don't call clcsock shutdown twice when smc shutdown
Trond Myklebust (1):
NFSv42: Don't fail clone() unless the OP_CLONE operation failed
Varun Prakash (1):
nvmet-tcp: fix incomplete data digest send
Vincent Guittot (1):
firmware: arm_scmi: Fix base agent discover response
Vincent Whitchurch (2):
af_unix: fix regression in read after shutdown
i2c: virtio: disable timeout handling
Vladimir Oltean (2):
net: mscc: ocelot: don't downgrade timestamping RX filters in SIOCSHWTSTAMP
net: mscc: ocelot: correctly report the timestamping RX filters in ethtool
Volodymyr Mytnyk (2):
net: marvell: prestera: fix brige port operation
net: marvell: prestera: fix double free issue on err path
Waiman Long (1):
locking/rwsem: Make handoff bit handling more consistent
Weichao Guo (1):
f2fs: set SBI_NEED_FSCK flag when inconsistent node block found
Werner Sembach (1):
ALSA: hda/realtek: Add quirk for ASRock NUC Box 1100
Will Mortensen (1):
netfilter: flowtable: fix IPv6 tunnel addr match
Yannick Vignon (1):
net: stmmac: Disable Tx queues when reconfiguring the interface
Ye Bin (1):
io_uring: fix soft lockup when call __io_remove_buffers
Ziyang Xuan (1):
net: vlan: fix underflow for the real_dev refcnt
yangxingwu (1):
netfilter: ipvs: Fix reuse connection if RS weight is 0
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/sysctl/kernel.rst +1 -1
@@ -1099,7 +1099,7 @@ task_delayacct =============== Enables/disables task delay accounting (see -:doc:`accounting/delay-accounting.rst`). Enabling this feature incurs +Documentation/accounting/delay-accounting.rst. Enabling this feature incurs a small amount of overhead in the scheduler but is useful for debugging and performance tuning. It is required by some tools such as iotop.
Documentation/networking/ipvs-sysctl.rst +1 -2
@@ -37,8 +37,7 @@ conn_reuse_mode - INTEGER 0: disable any special handling on port reuse. The new connection will be delivered to the same real server that was - servicing the previous connection. This will effectively - disable expire_nodest_conn. + servicing the previous connection. bit 1: enable rescheduling of new connections when it is safe. That is, whenever expire_nodest_conn and for TCP sockets, when
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 5 +SUBLEVEL = 6 EXTRAVERSION = NAME = Trick or Treat
arch/arm/boot/dts/bcm2711.dtsi +7 -1
@@ -506,11 +506,17 @@ pcie0: pcie@7d500000 { #address-cells = <3>; #interrupt-cells = <1>; #size-cells = <2>; - interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>, + interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "pcie", "msi"; interrupt-map-mask = <0x0 0x0 0x0 0x7>; interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 143 + IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 2 &gicv2 GIC_SPI 144 + IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 3 &gicv2 GIC_SPI 145 + IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 4 &gicv2 GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>; msi-controller; msi-parent = <&pcie0>;
arch/arm/boot/dts/bcm5301x.dtsi +3 -1
@@ -242,6 +242,8 @@ chipcommon: chipcommon@0 { gpio-controller; #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; }; pcie0: pcie@12000 {
@@ -408,7 +410,7 @@ uart2: serial@18008000 { i2c0: i2c@18009000 { compatible = "brcm,iproc-i2c"; reg = <0x18009000 0x50>; - interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; #address-cells = <1>; #size-cells = <0>; clock-frequency = <100000>;
arch/arm/mach-socfpga/core.h +1 -1
@@ -33,7 +33,7 @@ extern void __iomem *sdr_ctl_base_addr;u32 socfpga_sdram_self_refresh (u32 sdr_base);extern unsigned int socfpga_sdram_self_refresh_sz; -extern char secondary_trampoline, secondary_trampoline_end; +extern char secondary_trampoline[], secondary_trampoline_end[];extern unsigned long socfpga_cpu1start_addr;
arch/arm/mach-socfpga/platsmp.c +4 -4
@@ -20,14 +20,14 @@static int socfpga_boot_secondary (unsigned int cpu,struct task_struct *idle) { -int trampoline_size = &secondary_trampoline_end - &secondary_trampoline; +int trampoline_size = secondary_trampoline_end - secondary_trampoline;if (socfpga_cpu1start_addr) {/* This will put CPU #1 into reset. */ writel (RSTMGR_MPUMODRST_CPU1 , rst_manager_base_addr +SOCFPGA_RSTMGR_MODMPURST ); -memcpy (phys_to_virt (0 ), &secondary_trampoline, trampoline_size); +memcpy (phys_to_virt (0 ), secondary_trampoline, trampoline_size);writel (__pa_symbol (secondary_startup), sys_manager_base_addr + (socfpga_cpu1start_addr &0x000000ff ));
@@ -45,12 +45,12 @@ static int socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle)static int socfpga_a10_boot_secondary (unsigned int cpu,struct task_struct *idle) { -int trampoline_size = &secondary_trampoline_end - &secondary_trampoline; +int trampoline_size = secondary_trampoline_end - secondary_trampoline;if (socfpga_cpu1start_addr) {writel (RSTMGR_MPUMODRST_CPU1 , rst_manager_base_addr +SOCFPGA_A10_RSTMGR_MODMPURST ); -memcpy (phys_to_virt (0 ), &secondary_trampoline, trampoline_size); +memcpy (phys_to_virt (0 ), secondary_trampoline, trampoline_size);writel (__pa_symbol (secondary_startup), sys_manager_base_addr + (socfpga_cpu1start_addr &0x00000fff ));
arch/arm64/include/asm/pgalloc.h +1 -1
@@ -76,7 +76,7 @@ static inline void __pmd_populate(pmd_t *pmdp, phys_addr_t ptep,static inline void pmd_populate_kernel (struct mm_struct *mm,pmd_t *pmdp,pte_t *ptep) { -VM_BUG_ON (mm != &init_mm); +VM_BUG_ON (mm && mm != &init_mm);__pmd_populate (pmdp,__pa (ptep),PMD_TYPE_TABLE |PMD_TABLE_UXN ); }
arch/arm64/include/asm/uaccess.h +41 -7
92 lines not on this page · raw message
arch/mips/Kconfig +1 -1
@@ -3189,7 +3189,7 @@ config STACKTRACE_SUPPORT config PGTABLE_LEVELS int default 4 if PAGE_SIZE_4KB && MIPS_VA_BITS_48 - default 3 if 64BIT && !PAGE_SIZE_64KB + default 3 if 64BIT && (!PAGE_SIZE_64KB || MIPS_VA_BITS_48) default 2 config MIPS_AUTO_PFN_OFFSET
arch/mips/kernel/cpu-probe.c +2 -2
@@ -1734,8 +1734,6 @@ static inline void decode_cpucfg(struct cpuinfo_mips *c)static inline void cpu_probe_loongson (struct cpuinfo_mips *c,unsigned int cpu) { -decode_configs (c); -/* All Loongson processors covered here define ExcCode 16 as GSExc. */ c->options |=MIPS_CPU_GSEXCEX ;
@@ -1796,6 +1794,8 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)panic ("Unknown Loongson Processor ID!" ); break; } + +decode_configs (c); }#else static inline void cpu_probe_loongson (struct cpuinfo_mips *c,unsigned int cpu) { }
arch/parisc/kernel/vmlinux.lds.S +1 -2
@@ -57,8 +57,6 @@ SECTIONS { . = KERNEL_BINARY_TEXT_START; - _stext = .; /* start of kernel text, includes init code & data */ - __init_begin = .; HEAD_TEXT_SECTION MLONGCALL_DISCARD(INIT_TEXT_SECTION(8))
@@ -82,6 +80,7 @@ SECTIONS /* freed after init ends here */ _text = .; /* Text and read-only data */ + _stext = .; MLONGCALL_KEEP(INIT_TEXT_SECTION(8)) .text ALIGN(PAGE_SIZE) : { TEXT_TEXT
arch/powerpc/kernel/head_32.h +3 -3
@@ -202,11 +202,11 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt)mfspr r1,SPRN_SPRG_THREAD lwz r1, TASK_CPU - THREAD(r1) slwi r1, r1, 3 - addis r1, r1, emergency_ctx@ha + addis r1, r1, emergency_ctx-PAGE_OFFSET@ha #else - lis r1, emergency_ctx@ha + lis r1, emergency_ctx-PAGE_OFFSET@ha #endif - lwz r1, emergency_ctx@l(r1) + lwz r1, emergency_ctx-PAGE_OFFSET@l(r1) addi r1, r1, THREAD_SIZE - INT_FRAME_SIZE EXCEPTION_PROLOG_2 0 vmap_stack_overflow prepare_transfer_to_handler
arch/powerpc/kvm/book3s_hv_builtin.c +4 -1
@@ -695,6 +695,7 @@ static void flush_guest_tlb(struct kvm *kvm) "r" (0) : "memory"); } asmvolatile ("ptesync" : : :"memory" ); +// POWER9 congruence-class TLBIEL leaves ERAT. Flush it now. asm volatile(PPC_RADIX_INVALIDATE_ERAT_GUEST : : :"memory"); }else {for (set =0 ; set < kvm->arch.tlb_sets; ++set) {
@@ -705,7 +706,9 @@ static void flush_guest_tlb(struct kvm *kvm) rb +=PPC_BIT (51 );/* increment set number */ } asmvolatile ("ptesync" : : :"memory" ); - asm volatile(PPC_ISA_3_0_INVALIDATE_ERAT : : :"memory"); +// POWER9 congruence-class TLBIEL leaves ERAT. Flush it now. +if (cpu_has_feature (CPU_FTR_ARCH_300 )) + asm volatile(PPC_ISA_3_0_INVALIDATE_ERAT : : :"memory"); } }
arch/riscv/boot/dts/microchip/microchip-mpfs-icicle-kit.dts +11 -2
@@ -12,7 +12,7 @@ / { #address-cells = <2>; #size-cells = <2>; model = "Microchip PolarFire-SoC Icicle Kit"; - compatible = "microchip,mpfs-icicle-kit"; + compatible = "microchip,mpfs-icicle-kit", "microchip,mpfs"; aliases { ethernet0 = &emac1;
@@ -56,8 +56,17 @@ &serial3 { status = "okay"; }; -&sdcard { +&mmc { status = "okay"; + + bus-width = <4>; + disable-wp; + cap-sd-highspeed; + card-detect-delay = <200>; + sd-uhs-sdr12; + sd-uhs-sdr25; + sd-uhs-sdr50; + sd-uhs-sdr104; }; &emac0 {
arch/riscv/boot/dts/microchip/microchip-mpfs.dtsi +4 -29
@@ -6,8 +6,8 @@ / { #address-cells = <2>; #size-cells = <2>; - model = "Microchip MPFS Icicle Kit"; - compatible = "microchip,mpfs-icicle-kit"; + model = "Microchip PolarFire SoC"; + compatible = "microchip,mpfs"; chosen { };
@@ -262,39 +262,14 @@ serial3: serial@20104000 { status = "disabled"; }; - emmc: mmc@20008000 { + /* Common node entry for emmc/sd */ + mmc: mmc@20008000 { compatible = "cdns,sd4hc"; reg = <0x0 0x20008000 0x0 0x1000>; interrupt-parent = <&plic>; interrupts = <88 89>; pinctrl-names = "default"; clocks = <&clkcfg 6>; - bus-width = <4>; - cap-mmc-highspeed; - mmc-ddr-3_3v; - max-frequency = <200000000>; - non-removable; - no-sd; - no-sdio; - voltage-ranges = <3300 3300>; - status = "disabled"; - }; - - sdcard: sdhc@20008000 { - compatible = "cdns,sd4hc"; - reg = <0x0 0x20008000 0x0 0x1000>; - interrupt-parent = <&plic>; - interrupts = <88>; - pinctrl-names = "default"; - clocks = <&clkcfg 6>; - bus-width = <4>; - disable-wp; - cap-sd-highspeed; - card-detect-delay = <200>; - sd-uhs-sdr12; - sd-uhs-sdr25; - sd-uhs-sdr50; - sd-uhs-sdr104; max-frequency = <200000000>; status = "disabled"; };
arch/x86/include/asm/xen/hypervisor.h +5 -0
@@ -62,4 +62,9 @@ void xen_arch_register_cpu(int num);void xen_arch_unregister_cpu (int num);#endif +#ifdef CONFIG_PVH +void __init xen_pvh_init (struct boot_params *boot_params); +void __init mem_map_via_hcall (struct boot_params *boot_params_p); +#endif +#endif /* _ASM_X86_XEN_HYPERVISOR_H */
block/blk-core.c +3 -1
@@ -389,8 +389,10 @@ void blk_cleanup_queue(struct request_queue *q)blk_queue_flag_set (QUEUE_FLAG_DEAD , q);blk_sync_queue (q); -if (queue_is_mq (q)) +if (queue_is_mq (q)) { +blk_mq_cancel_work_sync (q);blk_mq_exit_queue (q); + }/* * In theory, request pool of sched_tags belongs to request queue.
block/blk-mq.c +13 -0
@@ -4018,6 +4018,19 @@ unsigned int blk_mq_rq_cpu(struct request *rq) }EXPORT_SYMBOL (blk_mq_rq_cpu); +void blk_mq_cancel_work_sync (struct request_queue *q) +{ +if (queue_is_mq (q)) { +struct blk_mq_hw_ctx *hctx; +int i; + +cancel_delayed_work_sync (&q->requeue_work); + +queue_for_each_hw_ctx (q, hctx, i) +cancel_delayed_work_sync (&hctx->run_work); + } +} +static int __init blk_mq_init (void ) {int i;
block/blk-mq.h +2 -0
@@ -129,6 +129,8 @@ extern int blk_mq_sysfs_register(struct request_queue *q);extern void blk_mq_sysfs_unregister (struct request_queue *q);extern void blk_mq_hctx_kobj_init (struct blk_mq_hw_ctx *hctx); +void blk_mq_cancel_work_sync (struct request_queue *q); +void blk_mq_release (struct request_queue *q); static inline struct blk_mq_ctx *__blk_mq_get_ctx(struct request_queue *q,
block/blk-sysfs.c +0 -10
@@ -805,16 +805,6 @@ static void blk_release_queue(struct kobject *kobj)blk_free_queue_stats (q->stats); -if (queue_is_mq (q)) { -struct blk_mq_hw_ctx *hctx; -int i; - -cancel_delayed_work_sync (&q->requeue_work); - -queue_for_each_hw_ctx (q, hctx, i) -cancel_delayed_work_sync (&hctx->run_work); - } -blk_exit_queue (q);blk_queue_free_zone_bitmaps (q);
block/elevator.c +8 -2
@@ -694,12 +694,18 @@ void elevator_init_mq(struct request_queue *q)if (!e)return ; +/* +* We are called before adding disk, when there isn't any FS I/O, +* so freezing queue plus canceling dispatch work is enough to +* drain any dispatch activities originated from passthrough +* requests, then no need to quiesce queue which may add long boot +* latency, especially when lots of disks are involved. +*/ blk_mq_freeze_queue (q); -blk_mq_quiesce_queue (q); +blk_mq_cancel_work_sync (q); err =blk_mq_init_sched (q, e); -blk_mq_unquiesce_queue (q);blk_mq_unfreeze_queue (q);if (err) {
block/genhd.c +2 -0
@@ -1086,6 +1086,8 @@ static void disk_release(struct device *dev)might_sleep ();WARN_ON_ONCE (disk_live (disk)); +blk_mq_cancel_work_sync (disk->queue); +disk_release_events (disk);kfree (disk->random);xa_destroy (&disk->part_tbl);
drivers/acpi/cppc_acpi.c +8 -1
@@ -1011,7 +1011,14 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)static int cppc_get_perf (int cpunum,enum cppc_regs reg_idx,u64 *perf) {struct cpc_desc *cpc_desc =per_cpu (cpc_desc_ptr, cpunum); -struct cpc_register_resource *reg = &cpc_desc->cpc_regs[reg_idx]; +struct cpc_register_resource *reg; + +if (!cpc_desc) { +pr_debug ("No CPC descriptor for CPU:%d\n" , cpunum); +return -ENODEV ; + } + + reg = &cpc_desc->cpc_regs[reg_idx];if (CPC_IN_PCC (reg)) {int pcc_ss_id =per_cpu (cpu_pcc_subspace_idx, cpunum);
drivers/acpi/property.c +3 -8
@@ -1090,15 +1090,10 @@ struct fwnode_handle *acpi_node_get_parent(const struct fwnode_handle *fwnode)/* All data nodes have parent pointer so just return that */ return to_acpi_data_node (fwnode)->parent; }else if (is_acpi_device_node (fwnode)) { -acpi_handle handle, parent_handle; +struct device *dev =to_acpi_device_node (fwnode)->dev.parent; - handle =to_acpi_device_node (fwnode)->handle; -if (ACPI_SUCCESS (acpi_get_parent (handle, &parent_handle))) { -struct acpi_device *adev; - -if (!acpi_bus_get_device (parent_handle, &adev)) -return acpi_fwnode_handle (adev); - } +if (dev) +return acpi_fwnode_handle (to_acpi_device (dev)); }return NULL ;
drivers/android/binder.c +1 -1
@@ -2710,7 +2710,7 @@ static void binder_transaction(struct binder_proc *proc, t->from = thread; else t->from = NULL; - t->sender_euid = proc->cred->euid; + t->sender_euid =task_euid (proc->tsk); t->to_proc = target_proc; t->to_thread = target_thread; t->code = tr->code;
drivers/cpufreq/intel_pstate.c +7 -0
@@ -999,6 +999,12 @@ static void intel_pstate_hwp_offline(struct cpudata *cpu)*/ value &= ~GENMASK_ULL (31 ,24 ); value |=HWP_ENERGY_PERF_PREFERENCE (cpu->epp_cached); +/* +* However, make sure that EPP will be set to "performance" when +* the CPU is brought back online again and the "performance" +* scaling algorithm is still in effect. +*/ + cpu->epp_policy =CPUFREQ_POLICY_UNKNOWN ; }/*
@@ -2249,6 +2255,7 @@ static const struct x86_cpu_id intel_pstate_cpu_oob_ids[] __initconst = {X86_MATCH (BROADWELL_D , core_funcs),X86_MATCH (BROADWELL_X , core_funcs),X86_MATCH (SKYLAKE_X , core_funcs), + X86_MATCH(ICELAKE_X, core_funcs), {} };
drivers/firmware/arm_scmi/base.c +12 -3
@@ -34,6 +34,12 @@ struct scmi_msg_resp_base_attributes {__le16 reserved; }; +struct scmi_msg_resp_base_discover_agent { +__le32 agent_id; +u8 name[SCMI_MAX_STR_SIZE ]; +}; + +struct scmi_msg_base_error_notify {__le32 event_control;#define BASE_TP_NOTIFY_ALL BIT(0)
@@ -225,18 +231,21 @@ static int scmi_base_discover_agent_get(const struct scmi_protocol_handle *ph, int id, char *name) { int ret; +struct scmi_msg_resp_base_discover_agent *agent_info;struct scmi_xfer *t; ret = ph->xops->xfer_get_init (ph,BASE_DISCOVER_AGENT , -sizeof (__le32),SCMI_MAX_STR_SIZE , &t); +sizeof (__le32),sizeof (*agent_info), &t);if (ret)return ret;put_unaligned_le32 (id, t->tx.buf); ret = ph->xops->do_xfer (ph, t); -if (!ret) -strlcpy (name, t->rx.buf,SCMI_MAX_STR_SIZE ); +if (!ret) { + agent_info = t->rx.buf; +strlcpy (name, agent_info->name,SCMI_MAX_STR_SIZE ); + } ph->xops->xfer_put (ph, t);
drivers/firmware/arm_scmi/scmi_pm_domain.c +1 -3
@@ -138,9 +138,7 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev) scmi_pd_data->domains = domains; scmi_pd_data->num_domains = num_domains; -of_genpd_add_provider_onecell (np, scmi_pd_data); - -return 0 ; +return of_genpd_add_provider_onecell (np, scmi_pd_data); }static const struct scmi_device_id scmi_id_table[] = {
drivers/firmware/arm_scmi/sensors.c +1 -1
@@ -637,7 +637,7 @@ static int scmi_sensor_config_get(const struct scmi_protocol_handle *ph,if (ret)return ret; -put_unaligned_le32 (cpu_to_le32 (sensor_id), t->tx.buf); +put_unaligned_le32 (sensor_id, t->tx.buf); ret = ph->xops->do_xfer (ph, t);if (!ret) {struct sensors_info *si = ph->get_priv (ph);
drivers/firmware/arm_scmi/virtio.c +5 -5
@@ -82,7 +82,8 @@ static bool scmi_vio_have_vq_rx(struct virtio_device *vdev) }static int scmi_vio_feed_vq_rx (struct scmi_vio_channel *vioch, -struct scmi_vio_msg *msg) +struct scmi_vio_msg *msg, +struct device *dev) {struct scatterlist sg_in;int rc;
@@ -94,8 +95,7 @@ static int scmi_vio_feed_vq_rx(struct scmi_vio_channel *vioch, rc =virtqueue_add_inbuf (vioch->vqueue, &sg_in,1 , msg,GFP_ATOMIC );if (rc) -dev_err_once (vioch->cinfo->dev, -"failed to add to virtqueue (%d)\n" , rc); +dev_err_once (dev,"failed to add to virtqueue (%d)\n" , rc);else virtqueue_kick (vioch->vqueue);
@@ -108,7 +108,7 @@ static void scmi_finalize_message(struct scmi_vio_channel *vioch, struct scmi_vio_msg *msg) {if (vioch->is_rx) { -scmi_vio_feed_vq_rx (vioch, msg); +scmi_vio_feed_vq_rx (vioch, msg, vioch->cinfo->dev); }else {/* Here IRQs are assumed to be already disabled by the caller */ spin_lock (&vioch->lock);
@@ -269,7 +269,7 @@ static int virtio_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,list_add_tail (&msg->list, &vioch->free_list);spin_unlock_irqrestore (&vioch->lock, flags); }else { -scmi_vio_feed_vq_rx (vioch, msg); +scmi_vio_feed_vq_rx (vioch, msg, cinfo->dev); } }
drivers/firmware/arm_scmi/voltage.c +1 -1
@@ -156,7 +156,7 @@ static int scmi_voltage_descriptors_get(const struct scmi_protocol_handle *ph,int cnt; cmd->domain_id =cpu_to_le32 (v->id); - cmd->level_index = desc_index; + cmd->level_index =cpu_to_le32 (desc_index); ret = ph->xops->do_xfer (ph, tl);if (ret)break ;
drivers/firmware/smccc/soc_id.c +1 -1
@@ -50,7 +50,7 @@ static int __init smccc_soc_init(void)arm_smccc_1_1_invoke (ARM_SMCCC_ARCH_FEATURES_FUNC_ID ,ARM_SMCCC_ARCH_SOC_ID , &res); -if (res.a0 ==SMCCC_RET_NOT_SUPPORTED ) { +if ((int )res.a0 ==SMCCC_RET_NOT_SUPPORTED ) {pr_info ("ARCH_SOC_ID not implemented, skipping ....\n" );return 0 ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c +2 -1
@@ -223,7 +223,7 @@ int amdgpu_ih_wait_on_checkpoint_process(struct amdgpu_device *adev,*/ int amdgpu_ih_process (struct amdgpu_device *adev,struct amdgpu_ih_ring *ih) { -unsigned int count =AMDGPU_IH_MAX_NUM_IVS ; +unsigned int count;u32 wptr;if (!ih->enabled || adev->shutdown)
@@ -232,6 +232,7 @@ int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih) wptr =amdgpu_ih_get_wptr (adev, ih); restart_ih: + count =AMDGPU_IH_MAX_NUM_IVS ;DRM_DEBUG ("%s: rptr %d, wptr %d\n" , __func__, ih->rptr, wptr);/* Order reading of wptr vs. reading of IH ring data */
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +13 -2
@@ -7729,8 +7729,19 @@ static uint64_t gfx_v10_0_get_gpu_clock_counter(struct amdgpu_device *adev)switch (adev->asic_type) {case CHIP_VANGOGH :case CHIP_YELLOW_CARP : - clock = (uint64_t )RREG32_SOC15 (SMUIO ,0 , mmGOLDEN_TSC_COUNT_LOWER_Vangogh) | - ((uint64_t )RREG32_SOC15 (SMUIO ,0 , mmGOLDEN_TSC_COUNT_UPPER_Vangogh) <<32ULL ); +preempt_disable (); + clock_hi =RREG32_SOC15_NO_KIQ (SMUIO ,0 , mmGOLDEN_TSC_COUNT_UPPER_Vangogh); + clock_lo =RREG32_SOC15_NO_KIQ (SMUIO ,0 , mmGOLDEN_TSC_COUNT_LOWER_Vangogh); + hi_check =RREG32_SOC15_NO_KIQ (SMUIO ,0 , mmGOLDEN_TSC_COUNT_UPPER_Vangogh); +/* The SMUIO TSC clock frequency is 100MHz, which sets 32-bit carry over +* roughly every 42 seconds. +*/ +if (hi_check != clock_hi) { + clock_lo =RREG32_SOC15_NO_KIQ (SMUIO ,0 , mmGOLDEN_TSC_COUNT_LOWER_Vangogh); + clock_hi = hi_check; + } +preempt_enable (); + clock = clock_lo | (clock_hi <<32ULL );break ;default :preempt_disable ();
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +35 -11
60 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +7 -2
@@ -2213,6 +2213,8 @@ static int dm_resume(void *handle)if (amdgpu_in_reset (adev)) { dc_state = dm->cached_dc_state; +amdgpu_dm_outbox_init (adev); + r =dm_dmub_hw_init (adev);if (r)DRM_ERROR ("DMUB interface failed to initialize: status=%d\n" , r);
@@ -2224,8 +2226,8 @@ static int dm_resume(void *handle)for (i =0 ; i < dc_state->stream_count; i++) { dc_state->streams[i]->mode_changed = true; -for (j =0 ; j < dc_state->stream_status->plane_count; j++) { - dc_state->stream_status->plane_states[j]->update_flags.raw +for (j =0 ; j < dc_state->stream_status[i].plane_count; j++) { + dc_state->stream_status[i].plane_states[j]->update_flags.raw =0xffffffff ; } }
@@ -3846,6 +3848,9 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev) }else if (dc_link_detect (link,DETECT_REASON_BOOT )) {amdgpu_dm_update_connector_after_detect (aconnector);register_backlight_device (dm, link); + +if (dm->num_of_edps) +update_connector_ext_caps (aconnector);if (amdgpu_dc_feature_mask &DC_PSR_MASK )amdgpu_dm_set_psr_caps (link); }
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c +9 -11
@@ -1024,8 +1024,6 @@ static int smu10_print_clock_levels(struct pp_hwmgr *hwmgr,uint32_t min_freq, max_freq =0 ;uint32_t ret =0 ; -phm_get_sysfs_buf (&buf, &size); -switch (type) {case PP_SCLK :smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetGfxclkFrequency, &now);
@@ -1038,13 +1036,13 @@ static int smu10_print_clock_levels(struct pp_hwmgr *hwmgr,else i =1 ; - size +=sysfs_emit_at (buf, size,"0: %uMhz %s\n" , + size +=sprintf (buf + size,"0: %uMhz %s\n" , data->gfx_min_freq_limit/100 , i ==0 ?"*" :"" ); - size +=sysfs_emit_at (buf, size,"1: %uMhz %s\n" , + size +=sprintf (buf + size,"1: %uMhz %s\n" , i ==1 ? now :SMU10_UMD_PSTATE_GFXCLK , i ==1 ?"*" :"" ); - size +=sysfs_emit_at (buf, size,"2: %uMhz %s\n" , + size +=sprintf (buf + size,"2: %uMhz %s\n" , data->gfx_max_freq_limit/100 , i ==2 ?"*" :"" );break ;
@@ -1052,7 +1050,7 @@ static int smu10_print_clock_levels(struct pp_hwmgr *hwmgr,smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetFclkFrequency, &now);for (i =0 ; i < mclk_table->count; i++) - size += sysfs_emit_at(buf, size, "%d: %uMhz %s\n", + size += sprintf(buf + size, "%d: %uMhz %s\n", i, mclk_table->entries[i].clk / 100, ((mclk_table->entries[i].clk / 100)
@@ -1067,10 +1065,10 @@ static int smu10_print_clock_levels(struct pp_hwmgr *hwmgr,if (ret)return ret; - size +=sysfs_emit_at (buf, size,"%s:\n" ,"OD_SCLK" ); - size +=sysfs_emit_at (buf, size,"0: %10uMhz\n" , + size +=sprintf (buf + size,"%s:\n" ,"OD_SCLK" ); + size +=sprintf (buf + size,"0: %10uMhz\n" , (data->gfx_actual_soft_min_freq >0 ) ? data->gfx_actual_soft_min_freq : min_freq); - size +=sysfs_emit_at (buf, size,"1: %10uMhz\n" , + size +=sprintf (buf + size,"1: %10uMhz\n" , (data->gfx_actual_soft_max_freq >0 ) ? data->gfx_actual_soft_max_freq : max_freq); }break ;
@@ -1083,8 +1081,8 @@ static int smu10_print_clock_levels(struct pp_hwmgr *hwmgr,if (ret)return ret; - size +=sysfs_emit_at (buf, size,"%s:\n" ,"OD_RANGE" ); - size +=sysfs_emit_at (buf, size,"SCLK: %7uMHz %10uMHz\n" , + size +=sprintf (buf + size,"%s:\n" ,"OD_RANGE" ); + size +=sprintf (buf + size,"SCLK: %7uMHz %10uMHz\n" , min_freq, max_freq); }break ;
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c +11 -13
@@ -4914,8 +4914,6 @@ static int smu7_print_clock_levels(struct pp_hwmgr *hwmgr,int size =0 ;uint32_t i, now, clock, pcie_speed; -phm_get_sysfs_buf (&buf, &size); -switch (type) {case PP_SCLK :smum_send_msg_to_smc (hwmgr, PPSMC_MSG_API_GetSclkFrequency, &clock);
@@ -4928,7 +4926,7 @@ static int smu7_print_clock_levels(struct pp_hwmgr *hwmgr, now = i;for (i =0 ; i < sclk_table->count; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, sclk_table->dpm_levels[i].value /100 , (i == now) ?"*" :"" );break ;
@@ -4943,7 +4941,7 @@ static int smu7_print_clock_levels(struct pp_hwmgr *hwmgr, now = i;for (i =0 ; i < mclk_table->count; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, mclk_table->dpm_levels[i].value /100 , (i == now) ?"*" :"" );break ;
@@ -4957,7 +4955,7 @@ static int smu7_print_clock_levels(struct pp_hwmgr *hwmgr, now = i;for (i =0 ; i < pcie_table->count; i++) - size += sysfs_emit_at(buf, size, "%d: %s %s\n", i, + size += sprintf(buf + size, "%d: %s %s\n", i, (pcie_table->dpm_levels[i].value == 0) ? "2.5GT/s, x8" : (pcie_table->dpm_levels[i].value == 1) ? "5.0GT/s, x16" : (pcie_table->dpm_levels[i].value == 2) ? "8.0GT/s, x16" : "",
@@ -4965,32 +4963,32 @@ static int smu7_print_clock_levels(struct pp_hwmgr *hwmgr,break ;case OD_SCLK :if (hwmgr->od_enabled) { - size +=sysfs_emit_at (buf, size,"%s:\n" ,"OD_SCLK" ); + size +=sprintf (buf + size,"%s:\n" ,"OD_SCLK" );for (i =0 ; i < odn_sclk_table->num_of_pl; i++) - size +=sysfs_emit_at (buf, size,"%d: %10uMHz %10umV\n" , + size +=sprintf (buf + size,"%d: %10uMHz %10umV\n" , i, odn_sclk_table->entries[i].clock/100 , odn_sclk_table->entries[i].vddc); }break ;case OD_MCLK :if (hwmgr->od_enabled) { - size +=sysfs_emit_at (buf, size,"%s:\n" ,"OD_MCLK" ); + size +=sprintf (buf + size,"%s:\n" ,"OD_MCLK" );for (i =0 ; i < odn_mclk_table->num_of_pl; i++) - size +=sysfs_emit_at (buf, size,"%d: %10uMHz %10umV\n" , + size +=sprintf (buf + size,"%d: %10uMHz %10umV\n" , i, odn_mclk_table->entries[i].clock/100 , odn_mclk_table->entries[i].vddc); }break ;case OD_RANGE :if (hwmgr->od_enabled) { - size +=sysfs_emit_at (buf, size,"%s:\n" ,"OD_RANGE" ); - size +=sysfs_emit_at (buf, size,"SCLK: %7uMHz %10uMHz\n" , + size +=sprintf (buf + size,"%s:\n" ,"OD_RANGE" ); + size +=sprintf (buf + size,"SCLK: %7uMHz %10uMHz\n" , data->golden_dpm_table.sclk_table.dpm_levels[0 ].value/100 , hwmgr->platform_descriptor.overdriveLimit.engineClock/100 ); - size +=sysfs_emit_at (buf, size,"MCLK: %7uMHz %10uMHz\n" , + size +=sprintf (buf + size,"MCLK: %7uMHz %10uMHz\n" , data->golden_dpm_table.mclk_table.dpm_levels[0 ].value/100 , hwmgr->platform_descriptor.overdriveLimit.memoryClock/100 ); - size +=sysfs_emit_at (buf, size,"VDDC: %7umV %11umV\n" , + size +=sprintf (buf + size,"VDDC: %7umV %11umV\n" , data->odn_dpm_table.min_vddc, data->odn_dpm_table.max_vddc); }
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c +2 -4
@@ -1550,8 +1550,6 @@ static int smu8_print_clock_levels(struct pp_hwmgr *hwmgr,uint32_t i, now;int size =0 ; -phm_get_sysfs_buf (&buf, &size); -switch (type) {case PP_SCLK : now = PHM_GET_FIELD(cgs_read_ind_register(hwmgr->device,
@@ -1561,7 +1559,7 @@ static int smu8_print_clock_levels(struct pp_hwmgr *hwmgr, CURR_SCLK_INDEX);for (i =0 ; i < sclk_table->count; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, sclk_table->entries[i].clk /100 , (i == now) ?"*" :"" );break ;
@@ -1573,7 +1571,7 @@ static int smu8_print_clock_levels(struct pp_hwmgr *hwmgr, CURR_MCLK_INDEX);for (i =SMU8_NUM_NBPMEMORYCLOCK ; i >0 ; i--) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" ,SMU8_NUM_NBPMEMORYCLOCK -i, data->sys_info.nbp_memory_clock[i-1 ] /100 , (SMU8_NUM_NBPMEMORYCLOCK -i == now) ?"*" :"" );break ;
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c +13 -15
@@ -4639,8 +4639,6 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr,int i, now, size =0 , count =0 ; -phm_get_sysfs_buf (&buf, &size); -switch (type) {case PP_SCLK :if (data->registry_data.sclk_dpm_key_disabled)
@@ -4654,7 +4652,7 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr,else count = sclk_table->count;for (i =0 ; i < count; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, sclk_table->dpm_levels[i].value /100 , (i == now) ?"*" :"" );break ;
@@ -4665,7 +4663,7 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr,smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetCurrentUclkIndex, &now);for (i =0 ; i < mclk_table->count; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, mclk_table->dpm_levels[i].value /100 , (i == now) ?"*" :"" );break ;
@@ -4676,7 +4674,7 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr,smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetCurrentSocclkIndex, &now);for (i =0 ; i < soc_table->count; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, soc_table->dpm_levels[i].value /100 , (i == now) ?"*" :"" );break ;
@@ -4688,7 +4686,7 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr, PPSMC_MSG_GetClockFreqMHz, CLK_DCEFCLK, &now);for (i =0 ; i < dcef_table->count; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, dcef_table->dpm_levels[i].value /100 , (dcef_table->dpm_levels[i].value /100 == now) ?"*" :"" );
@@ -4702,7 +4700,7 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr, gen_speed = pptable->PcieGenSpeed[i]; lane_width = pptable->PcieLaneCount[i]; - size +=sysfs_emit_at (buf, size,"%d: %s %s %s\n" , i, + size +=sprintf (buf + size,"%d: %s %s %s\n" , i, (gen_speed ==0 ) ?"2.5GT/s," : (gen_speed ==1 ) ?"5.0GT/s," : (gen_speed == 2) ? "8.0GT/s," :
@@ -4721,34 +4719,34 @@ static int vega10_print_clock_levels(struct pp_hwmgr *hwmgr,case OD_SCLK :if (hwmgr->od_enabled) { - size +=sysfs_emit_at (buf, size,"%s:\n" ,"OD_SCLK" ); + size +=sprintf (buf + size,"%s:\n" ,"OD_SCLK" ); podn_vdd_dep = &data->odn_dpm_table.vdd_dep_on_sclk;for (i =0 ; i < podn_vdd_dep->count; i++) - size +=sysfs_emit_at (buf, size,"%d: %10uMhz %10umV\n" , + size +=sprintf (buf + size,"%d: %10uMhz %10umV\n" , i, podn_vdd_dep->entries[i].clk /100 , podn_vdd_dep->entries[i].vddc); }break ;case OD_MCLK :if (hwmgr->od_enabled) { - size +=sysfs_emit_at (buf, size,"%s:\n" ,"OD_MCLK" ); + size +=sprintf (buf + size,"%s:\n" ,"OD_MCLK" ); podn_vdd_dep = &data->odn_dpm_table.vdd_dep_on_mclk;for (i =0 ; i < podn_vdd_dep->count; i++) - size +=sysfs_emit_at (buf, size,"%d: %10uMhz %10umV\n" , + size +=sprintf (buf + size,"%d: %10uMhz %10umV\n" , i, podn_vdd_dep->entries[i].clk/100 , podn_vdd_dep->entries[i].vddc); }break ;case OD_RANGE :if (hwmgr->od_enabled) { - size +=sysfs_emit_at (buf, size,"%s:\n" ,"OD_RANGE" ); - size +=sysfs_emit_at (buf, size,"SCLK: %7uMHz %10uMHz\n" , + size +=sprintf (buf + size,"%s:\n" ,"OD_RANGE" ); + size +=sprintf (buf + size,"SCLK: %7uMHz %10uMHz\n" , data->golden_dpm_table.gfx_table.dpm_levels[0 ].value/100 , hwmgr->platform_descriptor.overdriveLimit.engineClock/100 ); - size +=sysfs_emit_at (buf, size,"MCLK: %7uMHz %10uMHz\n" , + size +=sprintf (buf + size,"MCLK: %7uMHz %10uMHz\n" , data->golden_dpm_table.mem_table.dpm_levels[0 ].value/100 , hwmgr->platform_descriptor.overdriveLimit.memoryClock/100 ); - size +=sysfs_emit_at (buf, size,"VDDC: %7umV %11umV\n" , + size +=sprintf (buf + size,"VDDC: %7umV %11umV\n" , data->odn_dpm_table.min_vddc, data->odn_dpm_table.max_vddc); }
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c +4 -6
@@ -2246,8 +2246,6 @@ static int vega12_print_clock_levels(struct pp_hwmgr *hwmgr,int i, now, size =0 ;struct pp_clock_levels_with_latency clocks; -phm_get_sysfs_buf (&buf, &size); -switch (type) {case PP_SCLK : PP_ASSERT_WITH_CODE(
@@ -2260,7 +2258,7 @@ static int vega12_print_clock_levels(struct pp_hwmgr *hwmgr,"Attempt to get gfx clk levels Failed!" , return -1);for (i =0 ; i < clocks.num_levels; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, clocks.data[i].clocks_in_khz /1000 , (clocks.data[i].clocks_in_khz /1000 == now /100 ) ?"*" :"" );break ;
@@ -2276,7 +2274,7 @@ static int vega12_print_clock_levels(struct pp_hwmgr *hwmgr,"Attempt to get memory clk levels Failed!" , return -1);for (i =0 ; i < clocks.num_levels; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, clocks.data[i].clocks_in_khz /1000 , (clocks.data[i].clocks_in_khz /1000 == now /100 ) ?"*" :"" );break ;
@@ -2294,7 +2292,7 @@ static int vega12_print_clock_levels(struct pp_hwmgr *hwmgr,"Attempt to get soc clk levels Failed!" , return -1);for (i =0 ; i < clocks.num_levels; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, clocks.data[i].clocks_in_khz /1000 , (clocks.data[i].clocks_in_khz /1000 == now) ?"*" :"" );break ;
@@ -2312,7 +2310,7 @@ static int vega12_print_clock_levels(struct pp_hwmgr *hwmgr,"Attempt to get dcef clk levels Failed!" , return -1);for (i =0 ; i < clocks.num_levels; i++) - size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , + size +=sprintf (buf + size,"%d: %uMhz %s\n" , i, clocks.data[i].clocks_in_khz /1000 , (clocks.data[i].clocks_in_khz /1000 == now) ?"*" :"" );break ;
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c +28 -30
173 lines not on this page · raw message
drivers/gpu/drm/aspeed/aspeed_gfx_drv.c +1 -1
@@ -291,7 +291,7 @@ vga_pw_show(struct device *dev, struct device_attribute *attr, char *buf)if (rc)return rc; -return sprintf (buf,"%u\n" , reg &1 ); +return sprintf (buf,"%u\n" , reg); }static DEVICE_ATTR_RO (vga_pw);
drivers/gpu/drm/hyperv/hyperv_drm_drv.c +18 -1
@@ -225,12 +225,29 @@ static int hyperv_vmbus_remove(struct hv_device *hdev) {struct drm_device *dev =hv_get_drvdata (hdev);struct hyperv_drm_device *hv =to_hv (dev); +struct pci_dev *pdev;drm_dev_unplug (dev);drm_atomic_helper_shutdown (dev);vmbus_close (hdev->channel);hv_set_drvdata (hdev,NULL ); -vmbus_free_mmio (hv->mem->start, hv->fb_size); + +/* +* Free allocated MMIO memory only on Gen2 VMs. +* On Gen1 VMs, release the PCI device +*/ +if (efi_enabled (EFI_BOOT )) { +vmbus_free_mmio (hv->mem->start, hv->fb_size); + }else { + pdev =pci_get_device (PCI_VENDOR_ID_MICROSOFT , +PCI_DEVICE_ID_HYPERV_VIDEO ,NULL ); +if (!pdev) { +drm_err (dev,"Unable to find PCI Hyper-V video\n" ); +return -ENODEV ; + } +pci_release_region (pdev,0 ); +pci_dev_put (pdev); + }return 0 ; }
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +22 -0
@@ -2626,6 +2626,27 @@ nv174_chipset = { .fifo = { 0x00000001, ga102_fifo_new }, }; +static const struct nvkm_device_chip +nv176_chipset = { + .name ="GA106" , + .bar = {0x00000001 , tu102_bar_new }, + .bios = {0x00000001 , nvkm_bios_new }, + .devinit = {0x00000001 , ga100_devinit_new }, + .fb = {0x00000001 , ga102_fb_new }, + .gpio = {0x00000001 , ga102_gpio_new }, + .i2c = {0x00000001 , gm200_i2c_new }, + .imem = {0x00000001 , nv50_instmem_new }, + .mc = {0x00000001 , ga100_mc_new }, + .mmu = {0x00000001 , tu102_mmu_new }, + .pci = {0x00000001 , gp100_pci_new }, + .privring = {0x00000001 , gm200_privring_new }, + .timer = {0x00000001 , gk20a_timer_new }, + .top = {0x00000001 , ga100_top_new }, + .disp = {0x00000001 , ga102_disp_new }, + .dma = {0x00000001 , gv100_dma_new }, + .fifo = {0x00000001 , ga102_fifo_new }, +}; +static const struct nvkm_device_chip nv177_chipset = { .name = "GA107",
@@ -3072,6 +3093,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,case 0x168 : device->chip = &nv168_chipset;break ;case 0x172 : device->chip = &nv172_chipset;break ;case 0x174 : device->chip = &nv174_chipset;break ; +case 0x176 : device->chip = &nv176_chipset;break ;case 0x177 : device->chip = &nv177_chipset;break ;default :if (nvkm_boolopt (device->cfgopt,"NvEnableUnsupportedChipsets" , false)) {
drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c +4 -2
@@ -207,11 +207,13 @@ int gm200_acr_wpr_parse(struct nvkm_acr *acr) {const struct wpr_header *hdr = (void *)acr->wpr_fw->data; +struct nvkm_acr_lsfw *lsfw;while (hdr->falcon_id !=WPR_HEADER_V0_FALCON_ID_INVALID ) {wpr_header_dump (&acr->subdev, hdr); -if (!nvkm_acr_lsfw_add (NULL , acr,NULL , (hdr++)->falcon_id)) -return -ENOMEM ; + lsfw =nvkm_acr_lsfw_add (NULL , acr,NULL , (hdr++)->falcon_id); +if (IS_ERR (lsfw)) +return PTR_ERR (lsfw); }return 0 ;
drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.c +4 -2
@@ -161,11 +161,13 @@ int gp102_acr_wpr_parse(struct nvkm_acr *acr) {const struct wpr_header_v1 *hdr = (void *)acr->wpr_fw->data; +struct nvkm_acr_lsfw *lsfw;while (hdr->falcon_id !=WPR_HEADER_V1_FALCON_ID_INVALID ) {wpr_header_v1_dump (&acr->subdev, hdr); -if (!nvkm_acr_lsfw_add (NULL , acr,NULL , (hdr++)->falcon_id)) -return -ENOMEM ; + lsfw =nvkm_acr_lsfw_add (NULL , acr,NULL , (hdr++)->falcon_id); +if (IS_ERR (lsfw)) +return PTR_ERR (lsfw); }return 0 ;
drivers/gpu/drm/vc4/vc4_bo.c +1 -1
@@ -391,7 +391,7 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size) bo =kzalloc (sizeof (*bo),GFP_KERNEL );if (!bo) -return ERR_PTR (-ENOMEM ); +return NULL ; bo->madv =VC4_MADV_WILLNEED ;refcount_set (&bo->usecnt,0 );
drivers/hid/hid-input.c +3 -3
@@ -160,6 +160,7 @@ static int hidinput_setkeycode(struct input_dev *dev,if (usage) { *old_keycode = usage->type ==EV_KEY ? usage->code :KEY_RESERVED ; + usage->type =EV_KEY ; usage->code = ke->keycode;clear_bit (*old_keycode, dev->keybit);
@@ -650,10 +651,9 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel code +=KEY_MACRO1 ; else code += BTN_TRIGGER_HAPPY - 0x1e; - }else { - goto ignore; +break ; } -break ; + fallthrough;default :switch (field->physical) {case HID_GD_MOUSE :
drivers/hid/hid-magicmouse.c +5 -2
@@ -256,8 +256,11 @@ static void magicmouse_emit_touch(struct magicmouse_sc *msc, int raw_id, u8 *tdaunsigned long now = jiffies;int step_x = msc->touches[id].scroll_x - x;int step_y = msc->touches[id].scroll_y - y; -int step_hr = ((64 - (int )scroll_speed) * msc->scroll_accel) / -SCROLL_HR_STEPS ; +int step_hr = +max_t (int, + ((64 - (int )scroll_speed) * msc->scroll_accel) / +SCROLL_HR_STEPS , +1 );int step_x_hr = msc->touches[id].scroll_x_hr - x;int step_y_hr = msc->touches[id].scroll_y_hr - y;
drivers/hid/wacom_wac.c +7 -1
@@ -2603,6 +2603,9 @@ static void wacom_wac_finger_event(struct hid_device *hdev,return ;switch (equivalent_usage) { +case HID_DG_CONFIDENCE : + wacom_wac->hid_data.confidence = value; +break ;case HID_GD_X : wacom_wac->hid_data.x = value;break ;
@@ -2635,7 +2638,8 @@ static void wacom_wac_finger_event(struct hid_device *hdev, }if (usage->usage_index +1 == field->report_count) { -if (equivalent_usage == wacom_wac->hid_data.last_slot_field) +if (equivalent_usage == wacom_wac->hid_data.last_slot_field && + wacom_wac->hid_data.confidence)wacom_wac_finger_slot (wacom_wac, wacom_wac->touch_input); } }
@@ -2653,6 +2657,8 @@ static void wacom_wac_finger_pre_report(struct hid_device *hdev, wacom_wac->is_invalid_bt_frame = false; + hid_data->confidence = true; +for (i =0 ; i < report->maxfield; i++) {struct hid_field *field = report->field[i];int j;
drivers/hid/wacom_wac.h +1 -0
@@ -301,6 +301,7 @@ struct hid_data {bool barrelswitch;bool barrelswitch2;bool serialhi; +bool confidence;int x;int y;int pressure;
drivers/i2c/busses/i2c-virtio.c +5 -9
@@ -106,11 +106,10 @@ static int virtio_i2c_prepare_reqs(struct virtqueue *vq,static int virtio_i2c_complete_reqs (struct virtqueue *vq,struct virtio_i2c_req *reqs, -struct i2c_msg *msgs,int num, -bool timedout) +struct i2c_msg *msgs,int num) {struct virtio_i2c_req *req; -bool failed = timedout; +bool failed = false;unsigned int len;int i, j =0 ;
@@ -132,7 +131,7 @@ static int virtio_i2c_complete_reqs(struct virtqueue *vq, j++; } -return timedout ? -ETIMEDOUT : j; +return j; } static int virtio_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
@@ -141,7 +140,6 @@ static int virtio_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,struct virtio_i2c *vi =i2c_get_adapdata (adap);struct virtqueue *vq = vi->vq;struct virtio_i2c_req *reqs; -unsigned long time_left;int count; reqs =kcalloc (num,sizeof (*reqs),GFP_KERNEL );
@@ -164,11 +162,9 @@ static int virtio_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,reinit_completion (&vi->completion);virtqueue_kick (vq); - time_left =wait_for_completion_timeout (&vi->completion, adap->timeout); -if (!time_left) -dev_err (&adap->dev,"virtio i2c backend timeout.\n" ); +wait_for_completion (&vi->completion); - count =virtio_i2c_complete_reqs (vq, reqs, msgs, count, !time_left); + count =virtio_i2c_complete_reqs (vq, reqs, msgs, count); err_free:kfree (reqs);
drivers/iommu/amd/iommu_v2.c +3 -3
@@ -928,10 +928,8 @@ static int __init amd_iommu_v2_init(void) {int ret; -pr_info ("AMD IOMMUv2 driver by Joerg Roedel <[email protected]>\n" ); -if (!amd_iommu_v2_supported ()) { -pr_info ("AMD IOMMUv2 functionality not available on this system\n" ); +pr_info ("AMD IOMMUv2 functionality not available on this system - This is not a bug.\n" );/* * Load anyway to provide the symbols to other modules * which may use AMD IOMMUv2 optionally.
@@ -946,6 +944,8 @@ static int __init amd_iommu_v2_init(void)amd_iommu_register_ppr_notifier (&ppr_nb); +pr_info ("AMD IOMMUv2 loaded and initialized\n" ); +return 0 ; out:
drivers/iommu/intel/iommu.c +2 -4
@@ -1226,13 +1226,11 @@ static struct page *dma_pte_clear_level(struct dmar_domain *domain, int level, pte = &pte[pfn_level_offset (pfn, level)]; do { - unsigned long level_pfn; + unsigned long level_pfn = pfn & level_mask(level); if (!dma_pte_present(pte)) goto next; - level_pfn = pfn & level_mask(level); - /* If range covers entire pagetable, free it */ if (start_pfn <= level_pfn && last_pfn >= level_pfn + level_size(level) - 1) {
@@ -1253,7 +1251,7 @@ static struct page *dma_pte_clear_level(struct dmar_domain *domain, int level, freelist); } next: - pfn +=level_size (level); + pfn = level_pfn +level_size (level); }while (!first_pte_in_page (++pte) && pfn <= last_pfn);if (first_pte)
drivers/iommu/rockchip-iommu.c +2 -2
@@ -200,8 +200,8 @@ static inline phys_addr_t rk_dte_pt_address(u32 dte)#define DTE_HI_MASK2 GENMASK(7, 4)#define DTE_HI_SHIFT1 24/* shift bit 8 to bit 32 */ #define DTE_HI_SHIFT2 32/* shift bit 4 to bit 36 */ -#define PAGE_DESC_HI_MASK1 GENMASK_ULL(39, 36) -#define PAGE_DESC_HI_MASK2 GENMASK_ULL(35, 32) +#define PAGE_DESC_HI_MASK1 GENMASK_ULL(35, 32) +#define PAGE_DESC_HI_MASK2 GENMASK_ULL(39, 36)static inline phys_addr_t rk_dte_pt_address_v2 (u32 dte) {
drivers/media/cec/core/cec-adap.c +1 -0
@@ -1199,6 +1199,7 @@ void cec_received_msg_ts(struct cec_adapter *adap,if (abort) dst->rx_status |=CEC_RX_STATUS_FEATURE_ABORT ; msg->flags = dst->flags; + msg->sequence = dst->sequence;/* Remove it from the wait_queue */ list_del_init (&data->list);
drivers/media/v4l2-core/v4l2-compat-ioctl32.c +17 -24
91 lines not on this page · raw message
drivers/mmc/host/sdhci-esdhc-imx.c +0 -2
@@ -300,7 +300,6 @@ static struct esdhc_soc_data usdhc_imx8qxp_data = { .flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_STD_TUNING |ESDHC_FLAG_HAVE_CAP1 |ESDHC_FLAG_HS200 |ESDHC_FLAG_HS400 |ESDHC_FLAG_HS400_ES - |ESDHC_FLAG_CQHCI |ESDHC_FLAG_STATE_LOST_IN_LPMODE | ESDHC_FLAG_CLK_RATE_LOST_IN_PM_RUNTIME, };
@@ -309,7 +308,6 @@ static struct esdhc_soc_data usdhc_imx8mm_data = { .flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_STD_TUNING |ESDHC_FLAG_HAVE_CAP1 |ESDHC_FLAG_HS200 |ESDHC_FLAG_HS400 |ESDHC_FLAG_HS400_ES - |ESDHC_FLAG_CQHCI | ESDHC_FLAG_STATE_LOST_IN_LPMODE, };
drivers/mmc/host/sdhci.c +18 -3
@@ -771,7 +771,19 @@ static void sdhci_adma_table_pre(struct sdhci_host *host, len -= offset; } -BUG_ON (len >65536 ); +/* +* The block layer forces a minimum segment size of PAGE_SIZE, +* so 'len' can be too big here if PAGE_SIZE >= 64KiB. Write +* multiple descriptors, noting that the ADMA table is sized +* for 4KiB chunks anyway, so it will be big enough. +*/ +while (len > host->max_adma) { +int n =32 *1024 ;/* 32KiB*/ + +__sdhci_adma_write_desc (host, &desc, addr, n,ADMA2_TRAN_VALID ); + addr += n; + len -= n; + }/* tran, valid */ if (len)
@@ -3952,6 +3964,7 @@ struct sdhci_host *sdhci_alloc_host(struct device *dev,* descriptor for each segment, plus 1 for a nop end descriptor. */ host->adma_table_cnt =SDHCI_MAX_SEGS *2 +1 ; + host->max_adma =65536 ; host->max_timeout_count =0xE ;
@@ -4617,10 +4630,12 @@ int sdhci_setup_host(struct sdhci_host *host)* be larger than 64 KiB though. */ if (host->flags &SDHCI_USE_ADMA ) { -if (host->quirks &SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC ) +if (host->quirks &SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC ) { + host->max_adma =65532 ;/* 32-bit alignment */ mmc->max_seg_size =65535 ; -else + }else { mmc->max_seg_size =65536 ; + } }else { mmc->max_seg_size = mmc->max_req_size; }
drivers/mmc/host/sdhci.h +3 -1
@@ -340,7 +340,8 @@ struct sdhci_adma2_64_desc {/* * Maximum segments assuming a 512KiB maximum requisition size and a minimum -* 4KiB page size. +* 4KiB page size. Note this also allows enough for multiple descriptors in +* case of PAGE_SIZE >= 64KiB. */ #define SDHCI_MAX_SEGS 128
@@ -543,6 +544,7 @@ struct sdhci_host {unsigned int blocks;/* remaining PIO blocks */ int sg_count;/* Mapped sg entries */ +int max_adma;/* Max. length in ADMA descriptor */ void *adma_table;/* ADMA descriptor table */ void *align_buffer;/* Bounce buffer */
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c +4 -0
@@ -985,6 +985,7 @@ static int hns3_set_reset(struct net_device *netdev, u32 *flags)struct hnae3_ae_dev *ae_dev =pci_get_drvdata (h->pdev);const struct hnae3_ae_ops *ops = h->ae_algo->ops;const struct hns3_reset_type_map *rst_type_map; +enum ethtool_reset_flags rst_flags;u32 i, size;if (ops->ae_dev_resetting && ops->ae_dev_resetting (h))
@@ -1004,6 +1005,7 @@ static int hns3_set_reset(struct net_device *netdev, u32 *flags)for (i =0 ; i < size; i++) {if (rst_type_map[i].rst_flags == *flags) { rst_type = rst_type_map[i].rst_type; + rst_flags = rst_type_map[i].rst_flags;break ; } }
@@ -1019,6 +1021,8 @@ static int hns3_set_reset(struct net_device *netdev, u32 *flags) ops->reset_event (h->pdev, h); + *flags &= ~rst_flags; +return 0 ; }
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +2 -2
@@ -703,9 +703,9 @@ static int hclgevf_set_rss_tc_mode(struct hclgevf_dev *hdev, u16 rss_size) roundup_size =ilog2 (roundup_size);for (i =0 ; i <HCLGEVF_MAX_TC_NUM ; i++) { - tc_valid[i] = !!(hdev->hw_tc_map &BIT (i)); + tc_valid[i] =1 ; tc_size[i] = roundup_size; - tc_offset[i] = rss_size * i; + tc_offset[i] = (hdev->hw_tc_map &BIT (i)) ? rss_size * i :0 ; }hclgevf_cmd_setup_basic_desc (&desc,HCLGEVF_OPC_RSS_TC_MODE , false);
drivers/net/ethernet/intel/iavf/iavf.h +3 -0
@@ -305,6 +305,7 @@ struct iavf_adapter {#define IAVF_FLAG_AQ_DEL_FDIR_FILTER BIT(26)#define IAVF_FLAG_AQ_ADD_ADV_RSS_CFG BIT(27)#define IAVF_FLAG_AQ_DEL_ADV_RSS_CFG BIT(28) +#define IAVF_FLAG_AQ_REQUEST_STATS BIT(29)/* OS defined structs */ struct net_device *netdev;
@@ -398,6 +399,7 @@ int iavf_up(struct iavf_adapter *adapter);void iavf_down (struct iavf_adapter *adapter);int iavf_process_config (struct iavf_adapter *adapter);void iavf_schedule_reset (struct iavf_adapter *adapter); +void iavf_schedule_request_stats (struct iavf_adapter *adapter);void iavf_reset (struct iavf_adapter *adapter);void iavf_set_ethtool_ops (struct net_device *netdev);void iavf_update_stats (struct iavf_adapter *adapter);
@@ -455,4 +457,5 @@ void iavf_add_adv_rss_cfg(struct iavf_adapter *adapter);void iavf_del_adv_rss_cfg (struct iavf_adapter *adapter);struct iavf_mac_filter *iavf_add_filter (struct iavf_adapter *adapter,const u8 *macaddr); +int iavf_lock_timeout (struct mutex *lock,unsigned int msecs);#endif /* _IAVF_H_ */
drivers/net/ethernet/intel/iavf/iavf_ethtool.c +29 -4
@@ -354,6 +354,9 @@ static void iavf_get_ethtool_stats(struct net_device *netdev,struct iavf_adapter *adapter =netdev_priv (netdev);unsigned int i; +/* Explicitly request stats refresh */ +iavf_schedule_request_stats (adapter); +iavf_add_ethtool_stats (&data, adapter, iavf_gstrings_stats);rcu_read_lock ();
@@ -723,12 +726,31 @@ static int iavf_get_per_queue_coalesce(struct net_device *netdev, u32 queue,* * Change the ITR settings for a specific queue. **/ -static void iavf_set_itr_per_queue (struct iavf_adapter *adapter, -struct ethtool_coalesce *ec,int queue) +static int iavf_set_itr_per_queue (struct iavf_adapter *adapter, +struct ethtool_coalesce *ec,int queue) {struct iavf_ring *rx_ring = &adapter->rx_rings[queue];struct iavf_ring *tx_ring = &adapter->tx_rings[queue];struct iavf_q_vector *q_vector; +u16 itr_setting; + + itr_setting = rx_ring->itr_setting & ~IAVF_ITR_DYNAMIC ; + +if (ec->rx_coalesce_usecs != itr_setting && + ec->use_adaptive_rx_coalesce) { +netif_info (adapter, drv, adapter->netdev, +"Rx interrupt throttling cannot be changed if adaptive-rx is enabled\n" ); +return -EINVAL ; + } + + itr_setting = tx_ring->itr_setting & ~IAVF_ITR_DYNAMIC ; + +if (ec->tx_coalesce_usecs != itr_setting && + ec->use_adaptive_tx_coalesce) { +netif_info (adapter, drv, adapter->netdev, +"Tx interrupt throttling cannot be changed if adaptive-tx is enabled\n" ); +return -EINVAL ; + } rx_ring->itr_setting =ITR_REG_ALIGN (ec->rx_coalesce_usecs); tx_ring->itr_setting =ITR_REG_ALIGN (ec->tx_coalesce_usecs);
@@ -751,6 +773,7 @@ static void iavf_set_itr_per_queue(struct iavf_adapter *adapter,* the Tx and Rx ITR values based on the values we have entered * into the q_vector, no need to write the values now. */ +return 0 ; }/**
@@ -792,9 +815,11 @@ static int __iavf_set_coalesce(struct net_device *netdev,*/ if (queue <0 ) {for (i =0 ; i < adapter->num_active_queues; i++) -iavf_set_itr_per_queue (adapter, ec, i); +if (iavf_set_itr_per_queue (adapter, ec, i)) +return -EINVAL ; }else if (queue < adapter->num_active_queues) { -iavf_set_itr_per_queue (adapter, ec, queue); +if (iavf_set_itr_per_queue (adapter, ec, queue)) +return -EINVAL ; }else {netif_info (adapter, drv, netdev,"Invalid queue value, queue range is 0 - %d\n" , adapter->num_active_queues -1 );
drivers/net/ethernet/intel/iavf/iavf_main.c +31 -20
108 lines not on this page · raw message
drivers/net/ethernet/intel/iavf/iavf_virtchnl.c +44 -3
74 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_lib.c +7 -2
@@ -83,8 +83,13 @@ static int ice_vsi_alloc_arrays(struct ice_vsi *vsi)if (!vsi->rx_rings) goto err_rings; -/* XDP will have vsi->alloc_txq Tx queues as well, so double the size */ - vsi->txq_map =devm_kcalloc (dev, (2 * vsi->alloc_txq), +/* txq_map needs to have enough space to track both Tx (stack) rings +* and XDP rings; at this point vsi->num_xdp_txq might not be set, +* so use num_possible_cpus() as we want to always provide XDP ring +* per CPU, regardless of queue count settings from user that might +* have come from ethtool's set_channels() callback; +*/ + vsi->txq_map =devm_kcalloc (dev, (vsi->alloc_txq +num_possible_cpus ()),sizeof (*vsi->txq_map),GFP_KERNEL );if (!vsi->txq_map)
drivers/net/ethernet/intel/ice/ice_main.c +17 -1
@@ -2497,7 +2497,18 @@ int ice_prepare_xdp_rings(struct ice_vsi *vsi, struct bpf_prog *prog) ice_stat_str(status)); goto clear_xdp_rings; } -ice_vsi_assign_bpf_prog (vsi, prog); + +/* assign the prog only when it's not already present on VSI; +* this flow is a subject of both ethtool -L and ndo_bpf flows; +* VSI rebuild that happens under ethtool -L can expose us to +* the bpf_prog refcount issues as we would be swapping same +* bpf_prog pointers from vsi->xdp_prog and calling bpf_prog_put +* on it as it would be treated as an 'old_prog'; for ndo_bpf +* this is not harmful as dev_xdp_install bumps the refcount +* before calling the op exposed by the driver; +*/ +if (!ice_is_xdp_ena_vsi (vsi)) +ice_vsi_assign_bpf_prog (vsi, prog);return 0 ; clear_xdp_rings:
@@ -2643,6 +2654,11 @@ ice_xdp_setup_prog(struct ice_vsi *vsi, struct bpf_prog *prog,if (xdp_ring_err)NL_SET_ERR_MSG_MOD (extack,"Freeing XDP Tx resources failed" ); }else { +/* safe to call even when prog == vsi->xdp_prog as +* dev_xdp_install in net/core/dev.c incremented prog's +* refcount so corresponding bpf_prog_put won't cause +* underflow +*/ ice_vsi_assign_bpf_prog (vsi, prog); }
drivers/net/ethernet/intel/igb/igb_main.c +1 -1
@@ -8019,7 +8019,7 @@ static int igb_poll(struct napi_struct *napi, int budget)if (likely (napi_complete_done (napi, work_done)))igb_ring_irq_enable (q_vector); -return min (work_done, budget -1 ); +return work_done; }/**
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +8 -6
@@ -5017,11 +5017,13 @@ static int mvpp2_change_mtu(struct net_device *dev, int mtu) mtu =ALIGN (MVPP2_RX_PKT_SIZE (mtu),8 ); } +if (port->xdp_prog && mtu >MVPP2_MAX_RX_BUF_SIZE ) { +netdev_err (dev,"Illegal MTU value %d (> %d) for XDP mode\n" , + mtu, (int )MVPP2_MAX_RX_BUF_SIZE ); +return -EINVAL ; + } +if (MVPP2_RX_PKT_SIZE (mtu) >MVPP2_BM_LONG_PKT_SIZE ) { -if (port->xdp_prog) { -netdev_err (dev,"Jumbo frames are not supported with XDP\n" ); -return -EINVAL ; - }if (priv->percpu_pools) {netdev_warn (dev,"mtu %d too high, switching to shared buffers" , mtu);mvpp2_bm_switch_buffers (priv, false);
@@ -5307,8 +5309,8 @@ static int mvpp2_xdp_setup(struct mvpp2_port *port, struct netdev_bpf *bpf)bool running =netif_running (port->dev);bool reset = !prog != !port->xdp_prog; -if (port->dev->mtu >ETH_DATA_LEN ) { -NL_SET_ERR_MSG_MOD (bpf->extack,"XDP is not supported with jumbo frames enabled" ); +if (port->dev->mtu >MVPP2_MAX_RX_BUF_SIZE ) { +NL_SET_ERR_MSG_MOD (bpf->extack,"MTU too large for XDP" );return -EOPNOTSUPP ; }
drivers/net/ethernet/marvell/prestera/prestera_switchdev.c +3 -5
@@ -497,8 +497,8 @@ int prestera_bridge_port_join(struct net_device *br_dev, br_port =prestera_bridge_port_add (bridge, port->dev);if (IS_ERR (br_port)) { - err =PTR_ERR (br_port); - goto err_brport_create; +prestera_bridge_put (bridge); +return PTR_ERR (br_port); } err = switchdev_bridge_port_offload(br_port->dev, port->dev, NULL,
@@ -519,8 +519,6 @@ int prestera_bridge_port_join(struct net_device *br_dev,switchdev_bridge_port_unoffload (br_port->dev,NULL ,NULL ,NULL ); err_switchdev_offload:prestera_bridge_port_put (br_port); -err_brport_create: -prestera_bridge_put (bridge);return err; }
@@ -1124,7 +1122,7 @@ static int prestera_switchdev_blk_event(struct notifier_block *unused, prestera_port_obj_attr_set);break ;default : - err = -EOPNOTSUPP ; +return NOTIFY_DONE ; }return notifier_from_errno (err);
drivers/net/ethernet/mellanox/mlxsw/spectrum.c +1 -1
@@ -2131,7 +2131,7 @@ static void mlxsw_sp_pude_event_func(const struct mlxsw_reg_info *reg, max_ports =mlxsw_core_max_ports (mlxsw_sp->core); local_port =mlxsw_reg_pude_local_port_get (pude_pl); -if (WARN_ON_ONCE (local_port >= max_ports)) +if (WARN_ON_ONCE (!local_port || local_port >= max_ports))return ; mlxsw_sp_port = mlxsw_sp->ports[local_port];if (!mlxsw_sp_port)
drivers/net/ethernet/microchip/lan743x_main.c +3 -9
@@ -914,8 +914,7 @@ static int lan743x_phy_reset(struct lan743x_adapter *adapter) }static void lan743x_phy_update_flowcontrol (struct lan743x_adapter *adapter, -u8 duplex,u16 local_adv, -u16 remote_adv) +u16 local_adv,u16 remote_adv) {struct lan743x_phy *phy = &adapter->phy;u8 cap;
@@ -943,7 +942,6 @@ static void lan743x_phy_link_status_change(struct net_device *netdev)phy_print_status (phydev);if (phydev->state ==PHY_RUNNING ) { -struct ethtool_link_ksettings ksettings;int remote_advertisement =0 ;int local_advertisement =0 ;
@@ -980,18 +978,14 @@ static void lan743x_phy_link_status_change(struct net_device *netdev) }lan743x_csr_write (adapter,MAC_CR , data); -memset (&ksettings,0 ,sizeof (ksettings)); -phy_ethtool_get_link_ksettings (netdev, &ksettings); local_advertisement =linkmode_adv_to_mii_adv_t (phydev->advertising); remote_advertisement =linkmode_adv_to_mii_adv_t (phydev->lp_advertising); -lan743x_phy_update_flowcontrol (adapter, - ksettings.base.duplex, - local_advertisement, +lan743x_phy_update_flowcontrol (adapter, local_advertisement, remote_advertisement); -lan743x_ptp_update_latency (adapter, ksettings.base.speed); +lan743x_ptp_update_latency (adapter, phydev->speed); } }
drivers/net/ethernet/mscc/ocelot.c +4 -7
@@ -1175,12 +1175,6 @@ int ocelot_hwstamp_set(struct ocelot *ocelot, int port, struct ifreq *ifr)switch (cfg.rx_filter) {case HWTSTAMP_FILTER_NONE :break ; -case HWTSTAMP_FILTER_ALL : -case HWTSTAMP_FILTER_SOME : -case HWTSTAMP_FILTER_PTP_V1_L4_EVENT : -case HWTSTAMP_FILTER_PTP_V1_L4_SYNC : -case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ : -case HWTSTAMP_FILTER_NTP_ALL :case HWTSTAMP_FILTER_PTP_V2_L4_EVENT :case HWTSTAMP_FILTER_PTP_V2_L4_SYNC :case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ :
@@ -1299,7 +1293,10 @@ int ocelot_get_ts_info(struct ocelot *ocelot, int port,SOF_TIMESTAMPING_RAW_HARDWARE ; info->tx_types =BIT (HWTSTAMP_TX_OFF ) |BIT (HWTSTAMP_TX_ON ) |BIT (HWTSTAMP_TX_ONESTEP_SYNC ); - info->rx_filters =BIT (HWTSTAMP_FILTER_NONE ) |BIT (HWTSTAMP_FILTER_ALL ); + info->rx_filters =BIT (HWTSTAMP_FILTER_NONE ) | +BIT (HWTSTAMP_FILTER_PTP_V2_EVENT ) | +BIT (HWTSTAMP_FILTER_PTP_V2_L2_EVENT ) | +BIT (HWTSTAMP_FILTER_PTP_V2_L4_EVENT );return 0 ; }
drivers/net/ethernet/netronome/nfp/nfp_net.h +0 -3
@@ -565,7 +565,6 @@ struct nfp_net_dp {* @exn_name: Name for Exception interrupt * @shared_handler: Handler for shared interrupts * @shared_name: Name for shared interrupt -* @me_freq_mhz: ME clock_freq (MHz) * @reconfig_lock: Protects @reconfig_posted, @reconfig_timer_active, * @reconfig_sync_present and HW reconfiguration request * regs/machinery from async requests (sync must take
@@ -650,8 +649,6 @@ struct nfp_net {irq_handler_t shared_handler;char shared_name[IFNAMSIZ +8 ]; -u32 me_freq_mhz; -bool link_up;spinlock_t link_status_lock;
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +1 -1
@@ -1343,7 +1343,7 @@ static int nfp_net_set_coalesce(struct net_device *netdev,* ME timestamp ticks. There are 16 ME clock cycles for each timestamp * count. */ - factor = nn->me_freq_mhz /16 ; + factor = nn->tlv_caps.me_freq_mhz /16 ;/* Each pair of (usecs, max_frames) fields specifies that interrupts * should be coalesced until
drivers/net/ethernet/stmicro/stmmac/stmmac.h +1 -0
@@ -314,6 +314,7 @@ int stmmac_mdio_reset(struct mii_bus *mii);int stmmac_xpcs_setup (struct mii_bus *mii);void stmmac_set_ethtool_ops (struct net_device *netdev); +int stmmac_init_tstamp_counter (struct stmmac_priv *priv,u32 systime_flags);void stmmac_ptp_register (struct stmmac_priv *priv);void stmmac_ptp_unregister (struct stmmac_priv *priv);int stmmac_open (struct net_device *dev);
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +81 -46
179 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +1 -1
@@ -816,7 +816,7 @@ static int __maybe_unused stmmac_pltfr_noirq_resume(struct device *dev)if (ret)return ret; -clk_prepare_enable (priv->plat->clk_ptp_ref); +stmmac_init_tstamp_counter (priv, priv->systime_flags); }return 0 ;
drivers/net/ipa/ipa_cmd.c +0 -16
@@ -661,22 +661,6 @@ void ipa_cmd_pipeline_clear_wait(struct ipa *ipa)wait_for_completion (&ipa->completion); } -void ipa_cmd_pipeline_clear (struct ipa *ipa) -{ -u32 count =ipa_cmd_pipeline_clear_count (); -struct gsi_trans *trans; - - trans =ipa_cmd_trans_alloc (ipa, count); -if (trans) { -ipa_cmd_pipeline_clear_add (trans); -gsi_trans_commit_wait (trans); -ipa_cmd_pipeline_clear_wait (ipa); - }else { -dev_err (&ipa->pdev->dev, -"error allocating %u entry tag transaction\n" , count); - } -} -static struct ipa_cmd_info *ipa_cmd_info_alloc (struct ipa_endpoint *endpoint,u32 tre_count) {
drivers/net/ipa/ipa_cmd.h +0 -6
@@ -163,12 +163,6 @@ u32 ipa_cmd_pipeline_clear_count(void);*/ void ipa_cmd_pipeline_clear_wait (struct ipa *ipa); -/** -* ipa_cmd_pipeline_clear() - Clear the hardware pipeline -* @ipa: - IPA pointer -*/ -void ipa_cmd_pipeline_clear (struct ipa *ipa); -/** * ipa_cmd_trans_alloc() - Allocate a transaction for the command TX endpoint * @ipa: IPA pointer
drivers/net/ipa/ipa_endpoint.c +0 -2
@@ -1636,8 +1636,6 @@ void ipa_endpoint_suspend(struct ipa *ipa)if (ipa->modem_netdev)ipa_modem_suspend (ipa->modem_netdev); -ipa_cmd_pipeline_clear (ipa); -ipa_endpoint_suspend_one (ipa->name_map[IPA_ENDPOINT_AP_LAN_RX ]);ipa_endpoint_suspend_one (ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX ]); }
drivers/net/ipa/ipa_main.c +6 -0
@@ -28,6 +28,7 @@#include "ipa_reg.h" #include "ipa_mem.h" #include "ipa_table.h" +#include "ipa_smp2p.h" #include "ipa_modem.h" #include "ipa_uc.h" #include "ipa_interrupt.h"
@@ -801,6 +802,11 @@ static int ipa_remove(struct platform_device *pdev)struct device *dev = &pdev->dev;int ret; +/* Prevent the modem from triggering a call to ipa_setup(). This +* also ensures a modem-initiated setup that's underway completes. +*/ +ipa_smp2p_irq_disable_setup (ipa); + ret =pm_runtime_get_sync (dev);if (WARN_ON (ret <0 )) goto out_power_put;
drivers/net/ipa/ipa_modem.c +3 -3
@@ -339,9 +339,6 @@ int ipa_modem_stop(struct ipa *ipa)if (state !=IPA_MODEM_STATE_RUNNING )return -EBUSY ; -/* Prevent the modem from triggering a call to ipa_setup() */ -ipa_smp2p_disable (ipa); -/* Clean up the netdev and endpoints if it was started */ if (netdev) {struct ipa_priv *priv =netdev_priv (netdev);
@@ -369,6 +366,9 @@ static void ipa_modem_crashed(struct ipa *ipa)struct device *dev = &ipa->pdev->dev;int ret; +/* Prevent the modem from triggering a call to ipa_setup() */ +ipa_smp2p_irq_disable_setup (ipa); + ret =pm_runtime_get_sync (dev);if (ret <0 ) {dev_err (dev,"error %d getting power to handle crash\n" , ret);
drivers/net/ipa/ipa_smp2p.c +10 -11
@@ -53,7 +53,7 @@* @setup_ready_irq: IPA interrupt triggered by modem to signal GSI ready * @power_on: Whether IPA power is on * @notified: Whether modem has been notified of power state -* @disabled: Whether setup ready interrupt handling is disabled +* @setup_disabled: Whether setup ready interrupt handler is disabled * @mutex: Mutex protecting ready-interrupt/shutdown interlock * @panic_notifier: Panic notifier structure */
@@ -67,7 +67,7 @@ struct ipa_smp2p {u32 setup_ready_irq;bool power_on;bool notified; -bool disabled; +bool setup_disabled;struct mutex mutex;struct notifier_block panic_notifier; };
@@ -155,11 +155,9 @@ static irqreturn_t ipa_smp2p_modem_setup_ready_isr(int irq, void *dev_id)struct device *dev;int ret; -mutex_lock (&smp2p->mutex); - -if (smp2p->disabled) - goto out_mutex_unlock; - smp2p->disabled = true;/* If any others arrive, ignore them */ +/* Ignore any (spurious) interrupts received after the first */ +if (smp2p->ipa->setup_complete) +return IRQ_HANDLED ;/* Power needs to be active for setup */ dev = &smp2p->ipa->pdev->dev;
@@ -176,8 +174,6 @@ static irqreturn_t ipa_smp2p_modem_setup_ready_isr(int irq, void *dev_id) out_power_put:pm_runtime_mark_last_busy (dev); (void )pm_runtime_put_autosuspend (dev); -out_mutex_unlock: -mutex_unlock (&smp2p->mutex);return IRQ_HANDLED ; }
@@ -313,7 +309,7 @@ void ipa_smp2p_exit(struct ipa *ipa)kfree (smp2p); } -void ipa_smp2p_disable (struct ipa *ipa) +void ipa_smp2p_irq_disable_setup (struct ipa *ipa) {struct ipa_smp2p *smp2p = ipa->smp2p;
@@ -322,7 +318,10 @@ void ipa_smp2p_disable(struct ipa *ipa)mutex_lock (&smp2p->mutex); - smp2p->disabled = true; +if (!smp2p->setup_disabled) { +disable_irq (smp2p->setup_ready_irq); + smp2p->setup_disabled = true; + }mutex_unlock (&smp2p->mutex); }
drivers/net/ipa/ipa_smp2p.h +3 -4
@@ -27,13 +27,12 @@ int ipa_smp2p_init(struct ipa *ipa, bool modem_init);void ipa_smp2p_exit (struct ipa *ipa);/** -* ipa_smp2p_disable() - Prevent "ipa-setup-ready" interrupt handling +* ipa_smp2p_irq_disable_setup() - Disable the "setup ready" interrupt * @ipa: IPA pointer * -* Prevent handling of the "setup ready" interrupt from the modem. -* This is used before initiating shutdown of the driver. +* Disable the "ipa-setup-ready" interrupt from the modem. */ -void ipa_smp2p_disable (struct ipa *ipa); +void ipa_smp2p_irq_disable_setup (struct ipa *ipa);/** * ipa_smp2p_notify_reset() - Reset modem notification state
drivers/net/mdio/mdio-aspeed.c +7 -0
@@ -61,6 +61,13 @@ static int aspeed_mdio_read(struct mii_bus *bus, int addr, int regnum)iowrite32 (ctrl, ctx->base +ASPEED_MDIO_CTRL ); + rc =readl_poll_timeout (ctx->base +ASPEED_MDIO_CTRL , ctrl, + !(ctrl &ASPEED_MDIO_CTRL_FIRE ), +ASPEED_MDIO_INTERVAL_US , +ASPEED_MDIO_TIMEOUT_US ); +if (rc <0 ) +return rc; + rc = readl_poll_timeout(ctx->base + ASPEED_MDIO_DATA, data, data & ASPEED_MDIO_DATA_IDLE, ASPEED_MDIO_INTERVAL_US,
drivers/net/phy/phylink.c +25 -1
@@ -657,6 +657,7 @@ static void phylink_resolve(struct work_struct *w)struct phylink_link_state link_state;struct net_device *ndev = pl->netdev;bool mac_config = false; +bool retrigger = false;bool cur_link_state;mutex_lock (&pl->state_mutex);
@@ -670,6 +671,7 @@ static void phylink_resolve(struct work_struct *w) link_state.link = false; }else if (pl->mac_link_dropped) { link_state.link = false; + retrigger = true; }else {switch (pl->cur_link_an_mode) {case MLO_AN_PHY :
@@ -686,6 +688,19 @@ static void phylink_resolve(struct work_struct *w)case MLO_AN_INBAND :phylink_mac_pcs_get_state (pl, &link_state); +/* The PCS may have a latching link-fail indicator. +* If the link was up, bring the link down and +* re-trigger the resolve. Otherwise, re-read the +* PCS state to get the current status of the link. +*/ +if (!link_state.link) { +if (cur_link_state) + retrigger = true; +else +phylink_mac_pcs_get_state (pl, + &link_state); + } +/* If we have a phy, the "up" state is the union of * both the PHY and the MAC */
@@ -694,6 +709,15 @@ static void phylink_resolve(struct work_struct *w)/* Only update if the PHY link is up */ if (pl->phydev && pl->phy_state.link) { +/* If the interface has changed, force a +* link down event if the link isn't already +* down, and re-resolve. +*/ +if (link_state.interface != + pl->phy_state.interface) { + retrigger = true; + link_state.link = false; + } link_state.interface = pl->phy_state.interface;/* If we have a PHY, we need to update with
@@ -736,7 +760,7 @@ static void phylink_resolve(struct work_struct *w)else phylink_link_up (pl, link_state); } -if (!link_state.link && pl->mac_link_dropped) { +if (!link_state.link && retrigger) { pl->mac_link_dropped = false;queue_work (system_power_efficient_wq, &pl->resolve); }
drivers/net/usb/smsc95xx.c +26 -29
92 lines not on this page · raw message
drivers/nvme/target/io-cmd-file.c +3 -1
@@ -8,6 +8,7 @@#include <linux/uio.h> #include <linux/falloc.h> #include <linux/file.h> +#include <linux/fs.h> #include "nvmet.h" #define NVMET_MAX_MPOOL_BVEC 16
@@ -266,7 +267,8 @@ static void nvmet_file_execute_rw(struct nvmet_req *req)if (req->ns->buffered_io) {if (likely (!req->f.mpool_alloc) && -nvmet_file_execute_io (req,IOCB_NOWAIT )) + (req->ns->file->f_mode &FMODE_NOWAIT ) && +nvmet_file_execute_io (req,IOCB_NOWAIT ))return ;nvmet_file_submit_buffered_io (req); }else
drivers/nvme/target/tcp.c +6 -1
@@ -700,10 +700,11 @@ static int nvmet_try_send_r2t(struct nvmet_tcp_cmd *cmd, bool last_in_batch)static int nvmet_try_send_ddgst (struct nvmet_tcp_cmd *cmd,bool last_in_batch) {struct nvmet_tcp_queue *queue = cmd->queue; +int left =NVME_TCP_DIGEST_LENGTH - cmd->offset;struct msghdr msg = { .msg_flags =MSG_DONTWAIT };struct kvec iov = { .iov_base = (u8 *)&cmd->exp_ddgst + cmd->offset, - .iov_len =NVME_TCP_DIGEST_LENGTH - cmd->offset + .iov_len = left };int ret;
@@ -717,6 +718,10 @@ static int nvmet_try_send_ddgst(struct nvmet_tcp_cmd *cmd, bool last_in_batch)return ret; cmd->offset += ret; + left -= ret; + +if (left) +return -EAGAIN ;if (queue->nvme_sq.sqhd_disabled) { cmd->queue->snd_cmd =NULL ;
drivers/pci/controller/pci-aardvark.c +99 -143
352 lines not on this page · raw message
drivers/scsi/mpt3sas/mpt3sas_scsih.c +57 -2
59 lines not on this page · raw message
drivers/staging/r8188eu/core/rtw_mlme_ext.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/staging/r8188eu/os_dep/ioctl_linux.c +7 -1
Lines of this file are not shown. View the raw message.
drivers/staging/r8188eu/os_dep/mlme_linux.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/staging/rtl8192e/rtl8192e/rtl_core.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/usb/host/xhci-tegra.c +29 -12
41 lines not on this page · raw message
fs/io_uring.c +49 -21
70 lines not on this page · raw message
kernel/locking/rwsem.c +85 -86
171 lines not on this page · raw message
net/mptcp/protocol.c +42 -9
51 lines not on this page · raw message
net/tls/tls_main.c +40 -7
47 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.