Linux 5.18.13
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.18.13 kernel.
All users of the 5.18 kernel series must upgrade.
The updated 5.18.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.18.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/sound/qcom,lpass-cpu.yaml | 8 Documentation/driver-api/firmware/other_interfaces.rst | 6 Documentation/filesystems/netfs_library.rst | 8 Documentation/networking/ip-sysctl.rst | 4 Makefile | 2 arch/arm/boot/dts/imx6qdl-ts7970.dtsi | 2 arch/arm/boot/dts/sama5d2.dtsi | 2 arch/arm/boot/dts/stm32mp151.dtsi | 2 arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts | 2 arch/arm/include/asm/domain.h | 13 arch/arm/include/asm/mach/map.h | 1 arch/arm/include/asm/ptrace.h | 26 + arch/arm/mm/Kconfig | 6 arch/arm/mm/alignment.c | 3 arch/arm/mm/mmu.c | 15 arch/arm/mm/proc-v7-bugs.c | 9 arch/arm/probes/decode.h | 26 - arch/arm64/boot/dts/broadcom/bcm4908/bcm4906.dtsi | 8 arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi | 2 arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 5 arch/powerpc/sysdev/xive/spapr.c | 5 arch/riscv/boot/dts/microchip/microchip-mpfs.dtsi | 4 arch/riscv/kvm/vcpu.c | 2 arch/s390/Makefile | 8 arch/s390/lib/Makefile | 3 arch/s390/lib/expoline.S | 12 arch/s390/lib/expoline/Makefile | 3 arch/s390/lib/expoline/expoline.S | 12 arch/sh/include/asm/io.h | 8 arch/x86/include/asm/setup.h | 3 arch/x86/kernel/acpi/cppc.c | 6 arch/x86/kernel/head64.c | 4 arch/x86/kvm/x86.c | 18 arch/x86/mm/init.c | 14 arch/x86/xen/enlighten_pv.c | 8 arch/x86/xen/xen-head.S | 10 drivers/acpi/acpi_video.c | 11 drivers/cpufreq/pmac32-cpufreq.c | 4 drivers/firmware/sysfb.c | 58 ++ drivers/firmware/sysfb_simplefb.c | 16 drivers/gpio/gpio-sim.c | 16 drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 25 + drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c | 3 drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 3 drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 3 drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 3 drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 3 drivers/gpu/drm/amd/amdkfd/kfd_device.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 85 +++- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 8 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 17 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 11 drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 2 drivers/gpu/drm/drm_aperture.c | 26 - drivers/gpu/drm/i915/display/intel_dp_mst.c | 1 drivers/gpu/drm/i915/gem/i915_gem_region.c | 2 drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 11 drivers/gpu/drm/i915/gt/intel_gt.c | 15 drivers/gpu/drm/i915/gt/intel_reset.c | 37 + drivers/gpu/drm/i915/gt/selftest_lrc.c | 8 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c | 9 drivers/gpu/drm/i915/gvt/cmd_parser.c | 6 drivers/gpu/drm/i915/i915_scatterlist.c | 27 - drivers/gpu/drm/i915/i915_scatterlist.h | 6 drivers/gpu/drm/i915/intel_region_ttm.c | 10 drivers/gpu/drm/i915/intel_region_ttm.h | 3 drivers/gpu/drm/i915/selftests/i915_gem_gtt.c | 2 drivers/gpu/drm/i915/selftests/intel_memory_region.c | 21 - drivers/gpu/drm/i915/selftests/mock_region.c | 3 drivers/gpu/drm/panfrost/panfrost_drv.c | 4 drivers/gpu/drm/panfrost/panfrost_mmu.c | 2 drivers/irqchip/irq-or1k-pic.c | 1 drivers/net/can/xilinx_can.c | 4 drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c | 23 - drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 8 drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c | 13 drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 7 drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c | 2 drivers/net/ethernet/faraday/ftgmac100.c | 15 drivers/net/ethernet/intel/ice/ice_devids.h | 1 drivers/net/ethernet/intel/ice/ice_devlink.c | 59 +- drivers/net/ethernet/intel/ice/ice_fw_update.c | 96 ++++ drivers/net/ethernet/intel/ice/ice_main.c | 1 drivers/net/ethernet/marvell/prestera/prestera_router.c | 1 drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c | 20 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_stats.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 39 + drivers/net/ethernet/mellanox/mlx5/core/esw/legacy.c | 5 drivers/net/ethernet/mscc/ocelot_fdma.c | 17 drivers/net/ethernet/netronome/nfp/nfdk/dp.c | 33 + drivers/net/ethernet/sfc/ef10.c | 3 drivers/net/ethernet/sfc/ef10_sriov.c | 10 drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c | 1 drivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c | 6 drivers/net/ethernet/ti/am65-cpsw-nuss.c | 17 drivers/net/phy/sfp.c | 2 drivers/net/xen-netback/rx.c | 1 drivers/nfc/nxp-nci/i2c.c | 8 drivers/nvme/host/core.c | 8 drivers/nvme/host/nvme.h | 1 drivers/nvme/host/pci.c | 3 drivers/nvme/host/rdma.c | 12 drivers/nvme/host/tcp.c | 13 drivers/nvme/host/trace.h | 2 drivers/pinctrl/aspeed/pinctrl-aspeed.c | 4 drivers/pinctrl/freescale/pinctrl-imx93.c | 1 drivers/platform/x86/hp-wmi.c | 3 drivers/platform/x86/intel/pmc/core.c | 1 drivers/platform/x86/thinkpad_acpi.c | 50 +- drivers/power/supply/power_supply_core.c | 24 - drivers/s390/crypto/ap_bus.c | 2 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 7 drivers/scsi/megaraid/megaraid_sas_base.c | 3 drivers/scsi/ufs/ufshcd.c | 2 drivers/soc/ixp4xx/ixp4xx-npe.c | 2 drivers/spi/spi-amd.c | 8 drivers/tee/tee_core.c | 2 drivers/tty/pty.c | 14 drivers/tty/serial/8250/8250_core.c | 4 drivers/tty/serial/8250/8250_port.c | 4 drivers/tty/serial/amba-pl011.c | 23 + drivers/tty/serial/mvebu-uart.c | 25 - drivers/tty/serial/samsung_tty.c | 5 drivers/tty/serial/serial_core.c | 5 drivers/tty/serial/stm32-usart.c | 2 drivers/tty/tty.h | 3 drivers/tty/tty_buffer.c | 46 +- drivers/tty/vt/vt.c | 2 drivers/usb/dwc3/gadget.c | 4 drivers/usb/serial/ftdi_sio.c | 3 drivers/usb/serial/ftdi_sio_ids.h | 6 drivers/usb/typec/class.c | 1 drivers/vdpa/mlx5/net/mlx5_vnet.c | 31 - drivers/vdpa/vdpa_user/vduse_dev.c | 60 +- drivers/video/fbdev/core/fbmem.c | 12 drivers/virtio/virtio_mmio.c | 26 + drivers/xen/gntdev.c | 6 fs/afs/file.c | 2 fs/btrfs/inode.c | 14 fs/btrfs/zoned.c | 13 fs/ceph/addr.c | 11 fs/cifs/smb2pdu.c | 13 fs/exec.c | 2 fs/ksmbd/transport_tcp.c | 2 fs/lockd/svcsubs.c | 14 fs/netfs/buffered_read.c | 17 fs/nfsd/nfs4xdr.c | 9 fs/nfsd/nfsd.h | 3 fs/nilfs2/nilfs.h | 3 fs/remap_range.c | 3 include/linux/cgroup-defs.h | 3 include/linux/kexec.h | 6 include/linux/netfs.h | 2 include/linux/nvme.h | 2 include/linux/reset.h | 2 include/linux/sched/task.h | 2 include/linux/serial_core.h | 5 include/linux/sysfb.h | 22 - include/net/netfilter/nf_conntrack.h | 9 include/net/netfilter/nf_conntrack_ecache.h | 4 include/net/netfilter/nf_tables.h | 30 - include/net/netns/conntrack.h | 1 include/net/raw.h | 2 include/net/sock.h | 2 include/net/tls.h | 4 include/trace/events/sock.h | 6 kernel/cgroup/cgroup.c | 37 + kernel/exit.c | 2 kernel/kexec_file.c | 11 kernel/signal.c | 8 kernel/sysctl.c | 57 +- kernel/time/posix-timers.c | 19 kernel/trace/trace.c | 11 kernel/trace/trace_events_hist.c | 2 mm/damon/vaddr.c | 3 mm/memory.c | 27 - mm/sparse-vmemmap.c | 8 mm/userfaultfd.c | 5 net/8021q/vlan_netlink.c | 10 net/bridge/br_netfilter_hooks.c | 21 - net/core/filter.c | 1 net/ipv4/af_inet.c | 4 net/ipv4/cipso_ipv4.c | 12 net/ipv4/fib_semantics.c | 4 net/ipv4/fib_trie.c | 2 net/ipv4/icmp.c | 20 net/ipv4/inet_timewait_sock.c | 3 net/ipv4/inetpeer.c | 12 net/ipv4/nexthop.c | 5 net/ipv4/syncookies.c | 2 net/ipv4/sysctl_net_ipv4.c | 12 net/ipv4/tcp.c | 3 net/ipv4/tcp_input.c | 2 net/ipv4/tcp_output.c | 4 net/ipv6/icmp.c | 2 net/ipv6/route.c | 2 net/ipv6/seg6_iptunnel.c | 5 net/ipv6/seg6_local.c | 2 net/mac80211/wme.c | 4 net/mptcp/protocol.c | 4 net/netfilter/nf_conntrack_core.c | 86 ++-- net/netfilter/nf_conntrack_ecache.c | 139 +++--- net/netfilter/nf_conntrack_netlink.c | 125 ++++-- net/netfilter/nf_conntrack_standalone.c | 3 net/netfilter/nf_log_syslog.c | 8 net/netfilter/nf_tables_api.c | 72 ++- net/netfilter/nf_tables_core.c | 24 + net/netfilter/nf_tables_trace.c | 44 +- net/tipc/socket.c | 1 net/tls/tls_device.c | 4 net/tls/tls_main.c | 7 security/integrity/evm/evm_crypto.c | 7 security/integrity/ima/ima_appraise.c | 3 security/integrity/ima/ima_crypto.c | 1 security/integrity/ima/ima_efi.c | 2 sound/pci/hda/patch_conexant.c | 1 sound/pci/hda/patch_realtek.c | 20 sound/soc/codecs/cs35l41-lib.c | 10 sound/soc/codecs/cs35l41.c | 12 sound/soc/codecs/cs47l15.c | 5 sound/soc/codecs/madera.c | 14 sound/soc/codecs/max98373-sdw.c | 12 sound/soc/codecs/rt1308-sdw.c | 11 sound/soc/codecs/rt1316-sdw.c | 11 sound/soc/codecs/rt5682-sdw.c | 5 sound/soc/codecs/rt700-sdw.c | 6 sound/soc/codecs/rt700.c | 14 sound/soc/codecs/rt711-sdca-sdw.c | 9 sound/soc/codecs/rt711-sdca.c | 18 sound/soc/codecs/rt711-sdw.c | 9 sound/soc/codecs/rt711.c | 16 sound/soc/codecs/rt715-sdca-sdw.c | 12 sound/soc/codecs/rt715-sdw.c | 12 sound/soc/codecs/sgtl5000.c | 9 sound/soc/codecs/sgtl5000.h | 1 sound/soc/codecs/tas2764.c | 46 +- sound/soc/codecs/tas2764.h | 6 sound/soc/codecs/wcd9335.c | 8 sound/soc/codecs/wcd938x.c | 12 sound/soc/codecs/wm5110.c | 8 sound/soc/codecs/wm_adsp.c | 2 sound/soc/intel/boards/bytcr_wm5102.c | 13 sound/soc/intel/boards/sof_sdw.c | 51 +- sound/soc/intel/skylake/skl-nhlt.c | 40 + sound/soc/soc-dapm.c | 5 sound/soc/soc-ops.c | 4 sound/soc/sof/intel/hda-dsp.c | 10 sound/soc/sof/intel/hda-loader.c | 10 sound/soc/sof/intel/hda.h | 1 sound/usb/quirks-table.h | 248 ++++++++++++ sound/usb/quirks.c | 9 tools/testing/selftests/wireguard/qemu/Makefile | 5 tools/testing/selftests/wireguard/qemu/arch/arm.config | 1 tools/testing/selftests/wireguard/qemu/arch/armeb.config | 1 tools/testing/selftests/wireguard/qemu/arch/i686.config | 1 tools/testing/selftests/wireguard/qemu/arch/m68k.config | 1 tools/testing/selftests/wireguard/qemu/arch/mips.config | 1 tools/testing/selftests/wireguard/qemu/arch/mipsel.config | 1 tools/testing/selftests/wireguard/qemu/arch/powerpc.config | 1 tools/testing/selftests/wireguard/qemu/init.c | 11 264 files changed, 2390 insertions(+), 943 deletions(-)
Alex Deucher (2):
drm/amdgpu: keep fbdev buffers pinned during suspend drm/amdgpu/display: disable prefer_shadow for generic fb helpers
Andrea Mayer (3):
seg6: fix skb checksum evaluation in SRH encapsulation/insertion
seg6: fix skb checksum in SRv6 End.B6 and End.B6.Encaps behaviors
seg6: bpf: fix skb checksum in bpf_push_seg6_encap()
Andrzej Hajda (1):
drm/i915/selftests: fix subtraction overflow bug
Anup Patel (1):
RISC-V: KVM: Fix SRCU deadlock caused by kvm_riscv_check_vcpu_requests()
Ard Biesheuvel (2):
ARM: 9214/1: alignment: advance IT state after emulating Thumb instruction
ARM: 9209/1: Spectre-BHB: avoid pr_info() every time a CPU comes out of idle
Axel Rasmussen (1):
mm: userfaultfd: fix UFFDIO_CONTINUE on fallocated shmem pages
Baolin Wang (1):
mm/damon: use set_huge_pte_at() to make huge pte old
Baowen Zheng (1):
nfp: fix issue of skb segments exceeds descriptor limitation
Bartosz Golaszewski (1):
gpio: sim: fix the chip_name configfs item
Bjorn Andersson (1):
scsi: ufs: core: Drop loglevel of WriteBoost message
Bryan O'Donoghue (1):
ASoC: dt-bindings: Fix description for msm8916
Chanho Park (1):
tty: serial: samsung_tty: set dma burst_size to 1
Charles Keepax (8):
ASoC: wm_adsp: Fix event for preloader
ASoC: wm5110: Fix DRE control
ASoC: cs35l41: Correct some control names
ASoC: dapm: Initialise kcontrol data for mux/demux controls
ASoC: cs35l41: Add ASP TX3/4 source to register patch
ASoC: cs47l15: Fix event generation for low power mux control
ASoC: madera: Fix event generation for OUT1 demux
ASoC: madera: Fix event generation for rate controls
Chia-Lin Kao (AceLan) (2):
net: atlantic: remove deep parameter on suspend/resume functions
net: atlantic: remove aq_nic_deinit() when resume
Chris Wilson (2):
drm/i915/gt: Serialize GRDOM access between multiple engine resets drm/i915/gt: Serialize TLB invalidates with GT resets
Christoph Hellwig (1):
btrfs: zoned: fix a leaked bioc in read_zone_info
Chuck Lever (1):
NFSD: Decode NFSv4 birth time attribute
Coiby Xu (1):
ima: force signature verification when CONFIG_KEXEC_SIG is configured
Conor Dooley (1):
riscv: dts: microchip: hook up the mpfs' l2cache
Cristian Ciocaltea (1):
spi: amd: Limit max transfer and message size
Dan Carpenter (3):
drm/i915/gvt: IS_ERR() vs NULL bug in intel_gvt_update_reg_whitelist() drm/i915/selftests: fix a couple IS_ERR() vs NULL tests
net: stmmac: fix leaks in probe
Daniele Ceraolo Spurio (1):
drm/i915/guc: ADL-N should use the same GuC FW as ADL-S
Dave Chinner (1):
fs/remap: constrain dedupe of EOF blocks
Demi Marie Obenour (1):
xen/gntdev: Ignore failure to unmap INVALID_GRANT_HANDLE
Dmitry Osipenko (3):
ARM: 9213/1: Print message about disabled Spectre workarounds only once drm/panfrost: Put mapping instead of shmem obj on panfrost_mmu_map_fault_addr() error drm/panfrost: Fix shrinker list corruption by madvise IOCTL
Dorian Rudolph (1):
power: supply: core: Fix boundary conditions in interpolation
Douglas Anderson (1):
tracing: Fix sleeping while atomic in kdb ftdump
Egor Vorontsov (2):
ALSA: usb-audio: Add quirk for Fiero SC-01
ALSA: usb-audio: Add quirk for Fiero SC-01 (fw v1.0.0)
Eli Cohen (1):
vdpa/mlx5: Initialize CVQ vringh only once
Eric Dumazet (1):
vlan: fix memory leak in vlan_newlink()
Fangzhi Zuo (1):
drm/amd/display: Ignore First MST Sideband Message Return Error
Felix Fietkau (1):
wifi: mac80211: fix queue selection for mesh/OCB interfaces
Filipe Manana (1):
btrfs: return -EAGAIN for NOWAIT dio reads/writes on compressed and inline extents
Florian Westphal (8):
netfilter: ecache: move to separate structure
netfilter: conntrack: split inner loop of list dumping to own function
netfilter: ecache: use dedicated list for event redelivery
netfilter: conntrack: include ecache dying list in dumps
netfilter: conntrack: remove the percpu dying list
netfilter: conntrack: fix crash due to confirmed bit load reordering
netfilter: nf_tables: avoid skb access on nf_stolen
netfilter: br_netfilter: do not skip all hooks with 0 priority
Francesco Dolcini (1):
ASoC: sgtl5000: Fix noise on shutdown/remove
Gabriel Fernandez (1):
ARM: dts: stm32: use the correct clock source for CEC on stm32mp151
Gal Pressman (1):
net/mlx5e: Fix capability check for updating vnic env counters
Gayatri Kammela (1):
platform/x86: intel/pmc: Add Alder Lake N support to PMC core driver
Geert Uytterhoeven (1):
sh: convert nommu io{re,un}map() to static inline functions
Gowans, James (1):
mm: split huge PUD on wp_huge_pud fallback
Greg Kroah-Hartman (1):
Linux 5.18.13
Hangyu Hua (2):
drm/i915: fix a possible refcount leak in intel_dp_add_mst_connector()
net: tipc: fix possible refcount leak in tipc_sk_create()
Hans de Goede (2):
ASoC: Intel: bytcr_wm5102: Fix GPIO related probe-ordering problem
ACPI: video: Fix acpi_video_handles_brightness_key_presses()
Haowen Bai (1):
pinctrl: aspeed: Fix potential NULL dereference in aspeed_pinmux_set_mux()
Hector Martin (2):
ASoC: tas2764: Correct playback volume range
ASoC: tas2764: Fix amp gain register offset & default
Huaxin Lu (1):
ima: Fix a potential integer overflow in ima_appraise_measurement
Ilpo Järvinen (3):
serial: stm32: Clear prev values before setting RTS delays
serial: pl011: UPSTAT_AUTORTS requires .throttle/unthrottle
serial: 8250: Fix PM usage_count for console handover
Israel Rukshin (1):
nvme: fix block device naming collision
Jacky Bai (1):
pinctrl: imx: Add the zero base flag for imx93
Jason A. Donenfeld (2):
wireguard: selftests: set fake real time in init
wireguard: selftests: always call kernel makefile
Javier Martinez Canillas (3):
firmware: sysfb: Make sysfb_create_simplefb() return a pdev pointer
firmware: sysfb: Add sysfb_disable() helper function
fbdev: Disable sysfb device registration when removing conflicting FBs
Jeff Layton (2):
lockd: set fl_owner when unlocking files
lockd: fix nlm_close_files
Jeremy Szu (1):
ALSA: hda/realtek: fix mute/micmute LEDs for HP machines
Jianglei Nie (2):
ima: Fix potential memory leak in ima_init_crypto()
net: sfp: fix memory leak in sfp_probe()
Jiri Slaby (2):
tty: extract tty_flip_buffer_commit() from tty_flip_buffer_push()
tty: use new tty_insert_flip_string_and_push_buffer() in pty_write()
John Garry (1):
scsi: hisi_sas: Limit max hw sectors for v3 HW
John Veness (1):
ALSA: usb-audio: Add quirks for MacroSilicon MS2100/MS2106 devices
Jon Hunter (1):
net: stmmac: dwc-qos: Disable split header for Tegra194
Juergen Gross (4):
x86/xen: Use clear_bss() for Xen PV guests
xen/netback: avoid entering xenvif_rx_next_skb() with an empty rx queue
x86: Clear .brk area at early boot
x86/pat: Fix x86_has_pat_wp()
Kai-Heng Feng (1):
platform/x86: hp-wmi: Ignore Sanitization Mode event
Kashyap Desai (1):
bnxt_en: reclaim max resources if sriov enable fails
Keith Busch (2):
nvme-pci: phison e16 has bogus namespace ids
nvme: use struct group for generic command dwords
Kris Bahnsen (1):
ARM: dts: imx6qdl-ts7970: Fix ngpio typo and count
Kuniyuki Iwashima (27):
sysctl: Fix data races in proc_dointvec().
sysctl: Fix data races in proc_douintvec().
sysctl: Fix data races in proc_dointvec_minmax().
sysctl: Fix data races in proc_douintvec_minmax().
sysctl: Fix data races in proc_doulongvec_minmax().
sysctl: Fix data races in proc_dointvec_jiffies().
tcp: Fix a data-race around sysctl_tcp_max_orphans.
inetpeer: Fix data-races around sysctl.
net: Fix data-races around sysctl_mem.
cipso: Fix data-races around sysctl.
icmp: Fix data-races around sysctl.
ipv4: Fix a data-race around sysctl_fib_sync_mem.
sysctl: Fix data-races in proc_dou8vec_minmax().
sysctl: Fix data-races in proc_dointvec_ms_jiffies().
tcp: Fix a data-race around sysctl_max_tw_buckets.
icmp: Fix a data-race around sysctl_icmp_echo_ignore_all.
icmp: Fix data-races around sysctl_icmp_echo_enable_probe.
icmp: Fix a data-race around sysctl_icmp_echo_ignore_broadcasts.
icmp: Fix a data-race around sysctl_icmp_ignore_bogus_error_responses.
icmp: Fix a data-race around sysctl_icmp_errors_use_inbound_ifaddr.
icmp: Fix a data-race around sysctl_icmp_ratelimit.
icmp: Fix a data-race around sysctl_icmp_ratemask.
raw: Fix a data-race around sysctl_raw_l3mdev_accept.
tcp: Fix data-races around sysctl_tcp_ecn.
tcp: Fix a data-race around sysctl_tcp_ecn_fallback.
ipv4: Fix data-races around sysctl_ip_dynaddr.
nexthop: Fix data-races around nexthop_compat_mode.
Liang He (2):
net: ftgmac100: Hold reference returned by of_get_child_by_name()
cpufreq: pmac32-cpufreq: Fix refcount leak bug
Linus Torvalds (1):
signal handling: don't use BUG_ON() for debugging
Linus Walleij (3):
ARM: 9211/1: domain: drop modify_domain()
ARM: 9212/1: domain: Modify Kconfig help text
soc: ixp4xx/npe: Fix unused match warning
Linyu Yuan (1):
usb: typec: add missing uevent when partner support PD
Lucien Buchmann (1):
USB: serial: ftdi_sio: add Belimo device ids
Marc Kleine-Budde (1):
tee: tee_get_drvdata(): fix description of return value
Mario Kleiner (1):
drm/amd/display: Only use depth 36 bpp linebuffers on DCN display engines.
Mario Limonciello (1):
ACPI: CPPC: Fix enabling CPPC on AMD systems with shared memory
Mark Brown (3):
ASoC: ops: Fix off by one in range control validation
ASoC: wcd9335: Fix spurious event generation
ASoC: wcd938x: Fix event generation for some controls
Mark Pearson (2):
platform/x86: thinkpad-acpi: profile capabilities as integer platform/x86: thinkpad_acpi: do not use PSC mode on Intel platforms
Martin Povišer (2):
ASoC: tas2764: Add post reset delays
ASoC: tas2764: Fix and extend FSYNC polarity handling
Matthew Auld (2):
drm/i915/ttm: fix sg_table construction
drm/i915/ttm: fix 32b build
Maxim Mikityanskiy (1):
net/mlx5e: Ring the TX doorbell on DMA errors
Meng Tang (6):
ALSA: hda - Add fixup for Dell Latitidue E5430
ALSA: hda/conexant: Apply quirk for another HP ProDesk 600 G3 model
ALSA: hda/realtek: Fix headset mic for Acer SF313-51
ALSA: hda/realtek - Fix headset mic problem for a HP machine with alc671
ALSA: hda/realtek - Fix headset mic problem for a HP machine with alc221
ALSA: hda/realtek - Enable the headset-mic on a Xiaomi's laptop
Michael Chan (1):
bnxt_en: Fix bnxt_reinit_after_abort() code path
Michael Walle (1):
NFC: nxp-nci: don't print header length mismatch on i2c error
Michal Suchanek (1):
ARM: dts: sunxi: Fix SPI NOR campatible on Orange Pi Zero
Michel Dänzer (1):
drm/amd/display: Ensure valid event timestamp for cursor-only commits
Ming Lei (1):
scsi: megaraid: Clear READ queue map's nr_queues
Muchun Song (2):
mm: sparsemem: fix missing higher order allocation splitting
mm: sysctl: fix missing numa_stat when !CONFIG_HUGETLB_PAGE
Namjae Jeon (1):
ksmbd: use SOCK_NONBLOCK type for kernel_accept()
Nathan Lynch (1):
powerpc/xive/spapr: correct bitmap allocation size
Nicolas Dichtel (1):
ip: fix dflt addr selection for connected nexthop
Oleg Nesterov (1):
fix race between exit_itimers() and /proc/pid/timers
Pablo Neira Ayuso (2):
netfilter: nf_log: incorrect offset to network header
netfilter: nf_tables: replace BUG_ON by element length check
Pali Rohár (1):
serial: mvebu-uart: correctly report configured baudrate value
Paolo Abeni (1):
mptcp: fix subflow traversal at disconnect time
Parav Pandit (1):
vduse: Tie vduse mgmtdev and its device
Paul Blakey (1):
net/mlx5e: Fix enabling sriov while tc nic rules are offloaded
Paul M Stillwell Jr (2):
ice: handle E822 generic device ID in PLDM header
ice: change devlink code to read NVM in blocks
Pavan Chebbi (1):
bnxt_en: Fix bnxt_refclk_read()
Pavel Skripkin (1):
net: ocelot: fix wrong time_after usage
Peter Ujfalusi (5):
ASoC: Intel: Skylake: Correct the ssp rate discovery in skl_get_ssp_clks()
ASoC: Intel: Skylake: Correct the handling of fmt_config flexible array
ASoC: SOF: Intel: hda-dsp: Expose hda_dsp_core_power_up()
ASoC: SOF: Intel: hda-loader: Make sure that the fw load sequence is followed
ASoC: SOF: Intel: hda-loader: Clarify the cl_dsp_init() flow
Pierre-Louis Bossart (6):
ASoC: Realtek/Maxim SoundWire codecs: disable pm_runtime on remove
ASoC: rt711-sdca-sdw: fix calibrate mutex initialization
ASoC: Intel: sof_sdw: handle errors on card registration
ASoC: rt711: fix calibrate mutex initialization
ASoC: rt7*-sdw: harden jack_detect_handler
ASoC: codecs: rt700/rt711/rt711-sdca: initialize workqueues in probe
Prike Liang (1):
drm/amdkfd: correct the MEC atomic support firmware checking for GC 10.3.7
Roi Dayan (1):
net/mlx5e: CT: Use own workqueue instead of mlx5e priv
Ruozhu Li (1):
nvme: fix regression when disconnect a recovering ctrl
Ryan Wanner (1):
ARM: dts: at91: sama5d2: Fix typo in i2s1 node
Ryusuke Konishi (1):
nilfs2: fix incorrect masking of permission flags for symlinks
Sagi Grimberg (1):
nvme-tcp: always fail a request when sending it failed
Sean Anderson (1):
arm64: dts: ls1028a: Update SFP node to include clock
Serge Semin (1):
reset: Fix devm bulk optional exclusive control getter
Shuming Fan (1):
ASoC: rt711-sdca: fix kernel NULL pointer dereference when IO error
Siddharth Vadapalli (1):
net: ethernet: ti: am65-cpsw: Fix devlink port register sequence
Srinivas Neeli (1):
Revert "can: xilinx_can: Limit CANFD brp to 2"
Stafford Horne (1):
irqchip: or1k-pic: Undefine mask_ack for level triggered hardware
Stephan Gerhold (2):
virtio_mmio: Add missing PM calls to freeze/restore
virtio_mmio: Restore guest page size on resume
Steve French (1):
smb3: workaround negprot bug in some Samba servers
Steven Rostedt (Google) (1):
net: sock: tracing: Fix sock_exceed_buf_limit not to dereference stale pointer
Tariq Toukan (3):
net/mlx5e: kTLS, Fix build time constant test in TX net/mlx5e: kTLS, Fix build time constant test in RX net/tls: Check for errors in tls_device_init
Tejun Heo (1):
cgroup: Use separate src/dst nodes when preloading css_sets for migration
Thinh Nguyen (1):
usb: dwc3: gadget: Fix event pending check
Thomas Zimmermann (1):
drm/aperture: Run fbdev removal before internal helpers
Tony Krowiak (1):
s390/ap: fix error handling in __verify_queue_reservations()
Vasily Gorbik (1):
s390/nospec: build expoline.o for modules_prepare target
Vikas Gupta (1):
bnxt_en: fix livepatch query
Vitaly Kuznetsov (1):
KVM: x86: Fully initialize 'struct kvm_lapic_irq' in kvm_pv_kick_cpu_op()
William Zhang (2):
arm64: dts: broadcom: bcm4908: Fix timer node for BCM4906 SoC
arm64: dts: broadcom: bcm4908: Fix cpu node for smp boot
Xiu Jianfeng (1):
Revert "evm: Fix memleak in init_desc"
Xiubo Li (1):
netfs: do not unlock and put the folio twice
Yangxi Xiang (1):
vt: fix memory overlapping when deleting chars in the buffer
Yassine Oudjana (1):
ASoC: wcd9335: Remove RX channel from old list before adding it to a new one
Yefim Barashkin (1):
drm/amd/pm: Prevent divide by zero
Yevhen Orlov (1):
net: marvell: prestera: fix missed deinit sequence
Yi Yang (1):
serial: 8250: fix return error code in serial8250_request_std_resource()
Zhen Lei (1):
ARM: 9210/1: Mark the FDT_FIXED sections as shareable
Zheng Yejian (1):
tracing/histograms: Fix memory leak problem
Íñigo Huguet (2):
sfc: fix use after free when disabling sriov
sfc: fix kernel panic when creating VF
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/sound/qcom,lpass-cpu.yaml +4 -4
@@ -25,12 +25,12 @@ properties: - qcom,sc7280-lpass-cpu reg: - minItems: 2 + minItems: 1 maxItems: 6 description: LPAIF core registers reg-names: - minItems: 2 + minItems: 1 maxItems: 6 clocks:
@@ -42,12 +42,12 @@ properties: maxItems: 7 interrupts: - minItems: 2 + minItems: 1 maxItems: 4 description: LPAIF DMA buffer interrupt interrupt-names: - minItems: 2 + minItems: 1 maxItems: 4 qcom,adsp:
Documentation/driver-api/firmware/other_interfaces.rst +6 -0
@@ -13,6 +13,12 @@ EDD Interfaces .. kernel-doc:: drivers/firmware/edd.c :internal: +Generic System Framebuffers Interface +------------------------------------- + +.. kernel-doc:: drivers/firmware/sysfb.c + :export: + Intel Stratix10 SoC Service Layer --------------------------------- Some features of the Intel Stratix10 SoC require a level of privilege
Documentation/filesystems/netfs_library.rst +5 -3
@@ -300,7 +300,7 @@ through which it can issue requests and negotiate:: void (*issue_read)(struct netfs_io_subrequest *subreq); bool (*is_still_valid)(struct netfs_io_request *rreq); int (*check_write_begin)(struct file *file, loff_t pos, unsigned len, - struct folio *folio, void **_fsdata); + struct folio **foliop, void **_fsdata); void (*done)(struct netfs_io_request *rreq); void (*cleanup)(struct address_space *mapping, void *netfs_priv); };
@@ -376,8 +376,10 @@ The operations are as follows: allocated/grabbed the folio to be modified to allow the filesystem to flush conflicting state before allowing it to be modified. - It should return 0 if everything is now fine, -EAGAIN if the folio should be - regrabbed and any other error code to abort the operation. + It may unlock and discard the folio it was given and set the caller's folio + pointer to NULL. It should return 0 if everything is now fine (``*foliop`` + left set) or the op should be retried (``*foliop`` cleared) and any other + error code to abort the operation. * ``done``
Documentation/networking/ip-sysctl.rst +2 -2
@@ -1085,7 +1085,7 @@ cipso_cache_enable - BOOLEAN cipso_cache_bucket_size - INTEGER The CIPSO label cache consists of a fixed size hash table with each hash bucket containing a number of cache entries. This variable limits - the number of entries in each hash bucket; the larger the value the + the number of entries in each hash bucket; the larger the value is, the more CIPSO label mappings that can be cached. When the number of entries in a given hash bucket reaches this limit adding new entries causes the oldest entry in the bucket to be removed to make room.
@@ -1179,7 +1179,7 @@ ip_autobind_reuse - BOOLEAN option should only be set by experts. Default: 0 -ip_dynaddr - BOOLEAN +ip_dynaddr - INTEGER If set non-zero, enables support for dynamic addresses. If set to a non-zero value larger than 1, a kernel log message will be printed when dynamic address rewriting
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 18 -SUBLEVEL = 12 +SUBLEVEL = 13 EXTRAVERSION = NAME = Superb Owl
arch/arm/boot/dts/imx6qdl-ts7970.dtsi +1 -1
@@ -226,7 +226,7 @@ gpio8: gpio@28 { reg = <0x28>; #gpio-cells = <2>; gpio-controller; - ngpio = <32>; + ngpios = <62>; }; sgtl5000: codec@a {
arch/arm/boot/dts/sama5d2.dtsi +1 -1
@@ -1124,7 +1124,7 @@ AT91_XDMAC_DT_PERID(33))>, clocks = <&pmc PMC_TYPE_PERIPHERAL 55>, <&pmc PMC_TYPE_GCK 55>; clock-names = "pclk", "gclk"; assigned-clocks = <&pmc PMC_TYPE_CORE PMC_I2S1_MUX>; - assigned-parrents = <&pmc PMC_TYPE_GCK 55>; + assigned-clock-parents = <&pmc PMC_TYPE_GCK 55>; status = "disabled"; };
arch/arm/boot/dts/stm32mp151.dtsi +1 -1
@@ -565,7 +565,7 @@ cec: cec@40016000 { compatible = "st,stm32-cec"; reg = <0x40016000 0x400>; interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&rcc CEC_K>, <&clk_lse>; + clocks = <&rcc CEC_K>, <&rcc CEC>; clock-names = "cec", "hdmi-cec"; status = "disabled"; };
arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts +1 -1
@@ -169,7 +169,7 @@ &spi0 { flash@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "mxicy,mx25l1606e", "winbond,w25q128"; + compatible = "mxicy,mx25l1606e", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <40000000>; };
arch/arm/include/asm/domain.h +0 -13
@@ -112,19 +112,6 @@ static __always_inline void set_domain(unsigned int val) }#endif -#ifdef CONFIG_CPU_USE_DOMAINS -#define modify_domain (dom,type) \ - do { \ - unsigned int domain = get_domain(); \ - domain &= ~domain_mask(dom); \ - domain = domain | domain_val(dom, type); \ - set_domain(domain); \ - } while (0) - -#else -static inline void modify_domain (unsigned dom,unsigned type) { } -#endif -/* * Generate the T (user) versions of the LDR/STR and related * instructions (inline assembly)
arch/arm/include/asm/mach/map.h +1 -0
@@ -27,6 +27,7 @@ enum {MT_HIGH_VECTORS ,MT_MEMORY_RWX ,MT_MEMORY_RW , +MT_MEMORY_RO ,MT_ROM ,MT_MEMORY_RWX_NONCACHED , MT_MEMORY_RW_DTCM,
arch/arm/include/asm/ptrace.h +26 -0
@@ -163,5 +163,31 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs) ((current_stack_pointer | (THREAD_SIZE -1 )) -7 ) -1 ; \ }) + +/* +* Update ITSTATE after normal execution of an IT block instruction. +* +* The 8 IT state bits are split into two parts in CPSR: +* ITSTATE<1:0> are in CPSR<26:25> +* ITSTATE<7:2> are in CPSR<15:10> +*/ +static inline unsigned long it_advance (unsigned long cpsr) +{ +if ((cpsr &0x06000400 ) ==0 ) { +/* ITSTATE<2:0> == 0 means end of IT block, so clear IT state */ + cpsr &= ~PSR_IT_MASK ; + }else { +/* We need to shift left ITSTATE<4:0> */ +const unsigned long mask =0x06001c00 ;/* Mask ITSTATE<4:0> */ +unsigned long it = cpsr & mask; + it <<=1 ; + it |= it >> (27 -10 );/* Carry ITSTATE<2> to correct place */ + it &= mask; + cpsr &= ~mask; + cpsr |= it; + } +return cpsr; +} +#endif /* __ASSEMBLY__ */ #endif
arch/arm/mm/Kconfig +5 -1
@@ -631,7 +631,11 @@ config CPU_USE_DOMAINS bool help This option enables or disables the use of domain switching - via the set_fs() function. + using the DACR (domain access control register) to protect memory + domains from each other. In Linux we use three domains: kernel, user + and IO. The domains are used to protect userspace from kernelspace + and to handle IO-space as a special type of memory by assigning + manager or client roles to running code (such as a process). config CPU_V7M_NUM_IRQ int "Number of external interrupts connected to the NVIC"
arch/arm/mm/alignment.c +3 -0
@@ -935,6 +935,9 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)if (type ==TYPE_LDST )do_alignment_finish_ldst (addr, instr, regs, offset); +if (thumb_mode (regs)) + regs->ARM_cpsr =it_advance (regs->ARM_cpsr); +return 0 ; bad_or_fault:
arch/arm/mm/mmu.c +14 -1
@@ -296,6 +296,13 @@ static struct mem_type mem_types[] __ro_after_init = { .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE, .domain = DOMAIN_KERNEL, }, + [MT_MEMORY_RO] = { + .prot_pte =L_PTE_PRESENT |L_PTE_YOUNG |L_PTE_DIRTY | + L_PTE_XN | L_PTE_RDONLY, + .prot_l1 = PMD_TYPE_TABLE, + .prot_sect = PMD_TYPE_SECT, + .domain = DOMAIN_KERNEL, + }, [MT_ROM] = { .prot_sect = PMD_TYPE_SECT, .domain = DOMAIN_KERNEL,
@@ -489,6 +496,7 @@ static void __init build_mem_type_table(void)/* Also setup NX memory mapping */ mem_types[MT_MEMORY_RW ].prot_sect |=PMD_SECT_XN ; + mem_types[MT_MEMORY_RO ].prot_sect |=PMD_SECT_XN ; }if (cpu_arch >= CPU_ARCH_ARMv7 && (cr &CR_TRE )) {/*
@@ -568,6 +576,7 @@ static void __init build_mem_type_table(void) mem_types[MT_ROM ].prot_sect |=PMD_SECT_APX |PMD_SECT_AP_WRITE ; mem_types[MT_MINICLEAN ].prot_sect |=PMD_SECT_APX |PMD_SECT_AP_WRITE ; mem_types[MT_CACHECLEAN ].prot_sect |=PMD_SECT_APX |PMD_SECT_AP_WRITE ; + mem_types[MT_MEMORY_RO ].prot_sect |=PMD_SECT_APX |PMD_SECT_AP_WRITE ;#endif /*
@@ -587,6 +596,8 @@ static void __init build_mem_type_table(void) mem_types[MT_MEMORY_RWX ].prot_pte |=L_PTE_SHARED ; mem_types[MT_MEMORY_RW ].prot_sect |=PMD_SECT_S ; mem_types[MT_MEMORY_RW ].prot_pte |=L_PTE_SHARED ; + mem_types[MT_MEMORY_RO ].prot_sect |=PMD_SECT_S ; + mem_types[MT_MEMORY_RO ].prot_pte |=L_PTE_SHARED ; mem_types[MT_MEMORY_DMA_READY ].prot_pte |=L_PTE_SHARED ; mem_types[MT_MEMORY_RWX_NONCACHED ].prot_sect |=PMD_SECT_S ; mem_types[MT_MEMORY_RWX_NONCACHED ].prot_pte |=L_PTE_SHARED ;
@@ -647,6 +658,8 @@ static void __init build_mem_type_table(void) mem_types[MT_MEMORY_RWX ].prot_pte |= kern_pgprot; mem_types[MT_MEMORY_RW ].prot_sect |= ecc_mask | cp->pmd; mem_types[MT_MEMORY_RW ].prot_pte |= kern_pgprot; + mem_types[MT_MEMORY_RO ].prot_sect |= ecc_mask | cp->pmd; + mem_types[MT_MEMORY_RO ].prot_pte |= kern_pgprot; mem_types[MT_MEMORY_DMA_READY ].prot_pte |= kern_pgprot; mem_types[MT_MEMORY_RWX_NONCACHED ].prot_sect |= ecc_mask; mem_types[MT_ROM ].prot_sect |= cp->pmd;
@@ -1360,7 +1373,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc) map.pfn =__phys_to_pfn (__atags_pointer &SECTION_MASK ); map.virtual =FDT_FIXED_BASE ; map.length =FDT_FIXED_SIZE ; - map.type =MT_ROM ; + map.type =MT_MEMORY_RO ;create_mapping (&map); }
arch/arm/mm/proc-v7-bugs.c +4 -5
@@ -108,8 +108,7 @@ static unsigned int spectre_v2_install_workaround(unsigned int method)#else static unsigned int spectre_v2_install_workaround (unsigned int method) { -pr_info ("CPU%u: Spectre V2: workarounds disabled by configuration\n" , -smp_processor_id ()); +pr_info_once ("Spectre V2: workarounds disabled by configuration\n" );return SPECTRE_VULNERABLE ; }
@@ -209,10 +208,10 @@ static int spectre_bhb_install_workaround(int method)return SPECTRE_VULNERABLE ; spectre_bhb_method = method; - } -pr_info ("CPU%u: Spectre BHB: using %s workaround\n" , -smp_processor_id (),spectre_bhb_method_name (method)); +pr_info ("CPU%u: Spectre BHB: enabling %s workaround for all CPUs\n" , +smp_processor_id (),spectre_bhb_method_name (method)); + }return SPECTRE_MITIGATED ; }
arch/arm/probes/decode.h +1 -25
@@ -14,6 +14,7 @@#include <linux/types.h> #include <linux/stddef.h> #include <asm/probes.h> +#include <asm/ptrace.h> #include <asm/kprobes.h> void __init arm_probes_decode_init (void );
@@ -35,31 +36,6 @@ void __init find_str_pc_offset(void);#endif -/* -* Update ITSTATE after normal execution of an IT block instruction. -* -* The 8 IT state bits are split into two parts in CPSR: -* ITSTATE<1:0> are in CPSR<26:25> -* ITSTATE<7:2> are in CPSR<15:10> -*/ -static inline unsigned long it_advance (unsigned long cpsr) - { -if ((cpsr &0x06000400 ) ==0 ) { -/* ITSTATE<2:0> == 0 means end of IT block, so clear IT state */ - cpsr &= ~PSR_IT_MASK ; - }else { -/* We need to shift left ITSTATE<4:0> */ -const unsigned long mask =0x06001c00 ;/* Mask ITSTATE<4:0> */ -unsigned long it = cpsr & mask; - it <<=1 ; - it |= it >> (27 -10 );/* Carry ITSTATE<2> to correct place */ - it &= mask; - cpsr &= ~mask; - cpsr |= it; - } -return cpsr; -} -static inline void __kprobes bx_write_pc (long pcv,struct pt_regs *regs) {long cpsr = regs->ARM_cpsr;
arch/arm64/boot/dts/broadcom/bcm4908/bcm4906.dtsi +8 -0
@@ -9,6 +9,14 @@ cpus { /delete-node/ cpu@3; }; + timer { + compatible = "arm,armv8-timer"; + interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, + <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, + <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, + <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>; + }; + pmu { compatible = "arm,cortex-a53-pmu"; interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi +2 -0
@@ -29,6 +29,8 @@ cpu0: cpu@0 { device_type = "cpu"; compatible = "brcm,brahma-b53"; reg = <0x0>; + enable-method = "spin-table"; + cpu-release-addr = <0x0 0xfff8>; next-level-cache = <&l2>; };
arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi +4 -1
@@ -224,9 +224,12 @@ rst: syscon@1e60000 { little-endian; }; - efuse@1e80000 { + sfp: efuse@1e80000 { compatible = "fsl,ls1028a-sfp"; reg = <0x0 0x1e80000 0x0 0x10000>; + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL + QORIQ_CLK_PLL_DIV(4)>; + clock-names = "sfp"; #address-cells = <1>; #size-cells = <1>;
arch/powerpc/sysdev/xive/spapr.c +3 -2
@@ -13,6 +13,7 @@#include <linux/of.h> #include <linux/slab.h> #include <linux/spinlock.h> +#include <linux/bitmap.h> #include <linux/cpumask.h> #include <linux/mm.h> #include <linux/delay.h>
@@ -55,7 +56,7 @@ static int __init xive_irq_bitmap_add(int base, int count)spin_lock_init (&xibm->lock); xibm->base = base; xibm->count = count; - xibm->bitmap =kzalloc (xibm->count,GFP_KERNEL ); + xibm->bitmap =bitmap_zalloc (xibm->count,GFP_KERNEL );if (!xibm->bitmap) {kfree (xibm);return -ENOMEM ;
@@ -73,7 +74,7 @@ static void xive_irq_bitmap_remove_all(void)list_for_each_entry_safe (xibm, tmp, &xive_irq_bitmaps, list) {list_del (&xibm->list); -kfree (xibm->bitmap); +bitmap_free (xibm->bitmap);kfree (xibm); } }
arch/riscv/boot/dts/microchip/microchip-mpfs.dtsi +4 -0
@@ -51,6 +51,7 @@ cpu1: cpu@1 { riscv,isa = "rv64imafdc"; clocks = <&clkcfg CLK_CPU>; tlb-split; + next-level-cache = <&cctrllr>; status = "okay"; cpu1_intc: interrupt-controller {
@@ -78,6 +79,7 @@ cpu2: cpu@2 { riscv,isa = "rv64imafdc"; clocks = <&clkcfg CLK_CPU>; tlb-split; + next-level-cache = <&cctrllr>; status = "okay"; cpu2_intc: interrupt-controller {
@@ -105,6 +107,7 @@ cpu3: cpu@3 { riscv,isa = "rv64imafdc"; clocks = <&clkcfg CLK_CPU>; tlb-split; + next-level-cache = <&cctrllr>; status = "okay"; cpu3_intc: interrupt-controller {
@@ -132,6 +135,7 @@ cpu4: cpu@4 { riscv,isa = "rv64imafdc"; clocks = <&clkcfg CLK_CPU>; tlb-split; + next-level-cache = <&cctrllr>; status = "okay"; cpu4_intc: interrupt-controller { #interrupt-cells = <1>;
arch/riscv/kvm/vcpu.c +2 -0
@@ -673,9 +673,11 @@ static void kvm_riscv_check_vcpu_requests(struct kvm_vcpu *vcpu)if (kvm_request_pending (vcpu)) {if (kvm_check_request (KVM_REQ_SLEEP , vcpu)) { +kvm_vcpu_srcu_read_unlock (vcpu);rcuwait_wait_event (wait, (!vcpu->arch.power_off) && (!vcpu->arch.pause),TASK_INTERRUPTIBLE ); +kvm_vcpu_srcu_read_lock (vcpu);if (vcpu->arch.power_off || vcpu->arch.pause) {/*
arch/s390/Makefile +7 -1
@@ -80,7 +80,7 @@ endif ifdef CONFIG_EXPOLINE ifdef CONFIG_EXPOLINE_EXTERN - KBUILD_LDFLAGS_MODULE += arch/s390/lib/expoline.o + KBUILD_LDFLAGS_MODULE += arch/s390/lib/expoline/expoline.o CC_FLAGS_EXPOLINE := -mindirect-branch=thunk-extern CC_FLAGS_EXPOLINE += -mfunction-return=thunk-extern else
@@ -162,6 +162,12 @@ vdso_prepare: prepare0 $(Q)$(MAKE) $(build)=arch/s390/kernel/vdso64 include/generated/vdso64-offsets.h $(if $(CONFIG_COMPAT),$(Q)$(MAKE) \ $(build)=arch/s390/kernel/vdso32 include/generated/vdso32-offsets.h) + +ifdef CONFIG_EXPOLINE_EXTERN +modules_prepare: expoline_prepare +expoline_prepare: prepare0 + $(Q)$(MAKE) $(build)=arch/s390/lib/expoline arch/s390/lib/expoline/expoline.o +endif endif # Don't use tabs in echo arguments
arch/s390/lib/Makefile +2 -1
@@ -7,7 +7,6 @@ lib-y += delay.o string.o uaccess.o find.o spinlock.o obj-y += mem.o xor.o lib-$(CONFIG_KPROBES) += probes.o lib-$(CONFIG_UPROBES) += probes.o -obj-$(CONFIG_EXPOLINE_EXTERN) += expoline.o obj-$(CONFIG_S390_KPROBES_SANITY_TEST) += test_kprobes_s390.o test_kprobes_s390-objs += test_kprobes_asm.o test_kprobes.o
@@ -22,3 +21,5 @@ obj-$(CONFIG_S390_MODULES_SANITY_TEST) += test_modules.o obj-$(CONFIG_S390_MODULES_SANITY_TEST_HELPERS) += test_modules_helpers.o lib-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o + +obj-$(CONFIG_EXPOLINE_EXTERN) += expoline/
arch/s390/lib/expoline.S deleted +0 -12
@@ -1,12 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ - -#include <asm/nospec-insn.h> -#include <linux/linkage.h> - -.macro GEN_ALL_BR_THUNK_EXTERN - .irp r1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - GEN_BR_THUNK_EXTERN %r\r1 - .endr -.endm - -GEN_ALL_BR_THUNK_EXTERN
arch/s390/lib/expoline/Makefile new file +3 -0
@@ -0,0 +1,3 @@ +# SPDX-License-Identifier: GPL-2.0 + +obj-y += expoline.o
arch/s390/lib/expoline/expoline.S new file +12 -0
@@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#include <asm/nospec-insn.h> +#include <linux/linkage.h> + +.macro GEN_ALL_BR_THUNK_EXTERN + .irp r1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + GEN_BR_THUNK_EXTERN %r\r1 + .endr +.endm + +GEN_ALL_BR_THUNK_EXTERN
arch/sh/include/asm/io.h +6 -2
@@ -271,8 +271,12 @@ static inline void __iomem *ioremap_prot(phys_addr_t offset, unsigned long size,#endif /* CONFIG_HAVE_IOREMAP_PROT */ #else /* CONFIG_MMU */ -#define iounmap (addr) do { } while (0) -#define ioremap (offset, size) ((void __iomem *)(unsigned long)(offset)) +static inline void __iomem *ioremap (phys_addr_t offset,size_t size) +{ +return (void __iomem *)(unsigned long )offset; +} + +static inline void iounmap (volatile void __iomem *addr) { }#endif /* CONFIG_MMU */ #define ioremap_uc ioremap
arch/x86/include/asm/setup.h +3 -0
@@ -132,6 +132,9 @@ void *extend_brk(size_t size, size_t align); }extern void probe_roms (void ); + +void clear_bss (void ); +#ifdef __i386__ asmlinkage void __init i386_start_kernel(void);
arch/x86/kernel/acpi/cppc.c +6 -0
@@ -16,6 +16,12 @@ bool cpc_supported_by_cpu(void)switch (boot_cpu_data.x86_vendor) {case X86_VENDOR_AMD :case X86_VENDOR_HYGON : +if (boot_cpu_data.x86 ==0x19 && ((boot_cpu_data.x86_model <=0x0f ) || + (boot_cpu_data.x86_model >=0x20 && boot_cpu_data.x86_model <=0x2f ))) +return true; +else if (boot_cpu_data.x86 ==0x17 && + boot_cpu_data.x86_model >=0x70 && boot_cpu_data.x86_model <=0x7f ) +return true;return boot_cpu_has (X86_FEATURE_CPPC ); }return false;
arch/x86/kernel/head64.c +3 -1
@@ -421,10 +421,12 @@ void __init do_early_exception(struct pt_regs *regs, int trapnr)/* Don't add a printk in there. printk relies on the PDA which is not initialized yet. */ -static void __init clear_bss (void ) +void __init clear_bss (void ) {memset (__bss_start,0 , (unsigned long ) __bss_stop - (unsigned long ) __bss_start); +memset (__brk_base,0 , + (unsigned long ) __brk_limit - (unsigned long ) __brk_base); }static unsigned long get_cmd_line_ptr (void )
arch/x86/kvm/x86.c +10 -8
@@ -9074,15 +9074,17 @@ static int kvm_pv_clock_pairing(struct kvm_vcpu *vcpu, gpa_t paddr,*/ static void kvm_pv_kick_cpu_op (struct kvm *kvm,int apicid) { -struct kvm_lapic_irq lapic_irq; - - lapic_irq.shorthand =APIC_DEST_NOSHORT ; - lapic_irq.dest_mode =APIC_DEST_PHYSICAL ; - lapic_irq.level =0 ; - lapic_irq.dest_id = apicid; - lapic_irq.msi_redir_hint = false; +/* +* All other fields are unused for APIC_DM_REMRD, but may be consumed by +* common code, e.g. for tracing. Defer initialization to the compiler. +*/ +struct kvm_lapic_irq lapic_irq = { + .delivery_mode =APIC_DM_REMRD , + .dest_mode =APIC_DEST_PHYSICAL , + .shorthand =APIC_DEST_NOSHORT , + .dest_id = apicid, + }; - lapic_irq.delivery_mode =APIC_DM_REMRD ;kvm_irq_delivery_to_apic (kvm,NULL , &lapic_irq,NULL ); }
arch/x86/mm/init.c +12 -2
@@ -77,10 +77,20 @@ static uint8_t __pte2cachemode_tbl[8] = { [__pte2cm_idx(_PAGE_PWT | _PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC, }; -/* Check that the write-protect PAT entry is set for write-protect */ +/* +* Check that the write-protect PAT entry is set for write-protect. +* To do this without making assumptions how PAT has been set up (Xen has +* another layout than the kernel), translate the _PAGE_CACHE_MODE_WP cache +* mode via the __cachemode2pte_tbl[] into protection bits (those protection +* bits will select a cache mode of WP or better), and then translate the +* protection bits back into the cache mode using __pte2cm_idx() and the +* __pte2cachemode_tbl[] array. This will return the really used cache mode. +*/ bool x86_has_pat_wp (void ) { -return __pte2cachemode_tbl[_PAGE_CACHE_MODE_WP] == _PAGE_CACHE_MODE_WP; +uint16_t prot = __cachemode2pte_tbl[_PAGE_CACHE_MODE_WP]; + +return __pte2cachemode_tbl[__pte2cm_idx (prot)] == _PAGE_CACHE_MODE_WP; }enum page_cache_mode pgprot2cachemode (pgprot_t pgprot)
arch/x86/xen/enlighten_pv.c +6 -2
@@ -1183,15 +1183,19 @@ static void __init xen_domu_set_legacy_features(void)extern void early_xen_iret_patch (void );/* First C function to be called on Xen boot */ -asmlinkage __visible void __init xen_start_kernel(void) +asmlinkage __visible void __init xen_start_kernel(struct start_info *si) {struct physdev_set_iopl set_iopl;unsigned long initrd_start =0 ;int rc; -if (!xen_start_info) +if (!si)return ; +clear_bss (); + + xen_start_info = si; +__text_gen_insn (&early_xen_iret_patch,JMP32_INSN_OPCODE , &early_xen_iret_patch, &xen_iret,JMP32_INSN_SIZE );
arch/x86/xen/xen-head.S +1 -9
@@ -48,15 +48,6 @@ SYM_CODE_START(startup_xen) ANNOTATE_NOENDBR cld - /* Clear .bss */ - xor %eax,%eax - mov $__bss_start, %rdi - mov $__bss_stop, %rcx - sub %rdi, %rcx - shr $3, %rcx - rep stosq - - mov %rsi, xen_start_info mov initial_stack(%rip), %rsp /* Set up %gs.
@@ -71,6 +62,7 @@ SYM_CODE_START(startup_xen) cdq wrmsr + mov %rsi, %rdi call xen_start_kernel SYM_CODE_END(startup_xen) __FINIT
drivers/acpi/acpi_video.c +7 -4
@@ -73,7 +73,7 @@ module_param(device_id_scheme, bool, 0444);static int only_lcd =-1 ;module_param (only_lcd, int,0444 ); -static bool has_backlight; +static bool may_report_brightness_keys;static int register_count;static DEFINE_MUTEX (register_count_mutex);static DEFINE_MUTEX (video_list_lock);
@@ -1224,7 +1224,7 @@ acpi_video_bus_get_one_device(struct acpi_device *device,acpi_video_device_find_cap (data);if (data->cap._BCM && data->cap._BCL) - has_backlight = true; + may_report_brightness_keys = true;mutex_lock (&video->device_list_lock);list_add_tail (&data->entry, &video->video_device_list);
@@ -1693,6 +1693,9 @@ static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data)break ; } +if (keycode) + may_report_brightness_keys = true; +acpi_notifier_call_chain (device, event,0 );if (keycode && (report_key_events &REPORT_BRIGHTNESS_KEY_EVENTS )) {
@@ -2254,7 +2257,7 @@ void acpi_video_unregister(void)if (register_count) {acpi_bus_unregister_driver (&acpi_video_bus); register_count =0 ; - has_backlight = false; + may_report_brightness_keys = false; }mutex_unlock (®ister_count_mutex); }
@@ -2276,7 +2279,7 @@ void acpi_video_unregister_backlight(void)bool acpi_video_handles_brightness_key_presses (void ) { -return has_backlight && +return may_report_brightness_keys && (report_key_events &REPORT_BRIGHTNESS_KEY_EVENTS ); }EXPORT_SYMBOL (acpi_video_handles_brightness_key_presses);
drivers/cpufreq/pmac32-cpufreq.c +4 -0
@@ -470,6 +470,10 @@ static int pmac_cpufreq_init_MacRISC3(struct device_node *cpunode)if (slew_done_gpio_np) slew_done_gpio =read_gpio (slew_done_gpio_np); +of_node_put (volt_gpio_np); +of_node_put (freq_gpio_np); +of_node_put (slew_done_gpio_np); +/* If we use the frequency GPIOs, calculate the min/max speeds based * on the bus frequencies */
drivers/firmware/sysfb.c +50 -8
88 lines not on this page · raw message
drivers/firmware/sysfb_simplefb.c +8 -8
@@ -57,8 +57,8 @@ __init bool sysfb_parse_mode(const struct screen_info *si,return false; } -__init int sysfb_create_simplefb (const struct screen_info *si, -const struct simplefb_platform_data *mode) +__init struct platform_device *sysfb_create_simplefb (const struct screen_info *si, +const struct simplefb_platform_data *mode) {struct platform_device *pd;struct resource res;
@@ -76,7 +76,7 @@ __init int sysfb_create_simplefb(const struct screen_info *si, base |= (u64 )si->ext_lfb_base <<32 ;if (!base || (u64 )(resource_size_t )base != base) {printk (KERN_DEBUG "sysfb: inaccessible VRAM base\n" ); -return -EINVAL ; +return ERR_PTR (-EINVAL ); }/*
@@ -93,7 +93,7 @@ __init int sysfb_create_simplefb(const struct screen_info *si, length = mode->height * mode->stride;if (length > size) {printk (KERN_WARNING "sysfb: VRAM smaller than advertised\n" ); -return -EINVAL ; +return ERR_PTR (-EINVAL ); } length =PAGE_ALIGN (length);
@@ -104,11 +104,11 @@ __init int sysfb_create_simplefb(const struct screen_info *si, res.start = base; res.end = res.start + length -1 ;if (res.end <= res.start) -return -EINVAL ; +return ERR_PTR (-EINVAL ); pd =platform_device_alloc ("simple-framebuffer" ,0 );if (!pd) -return -ENOMEM ; +return ERR_PTR (-ENOMEM );sysfb_apply_efi_quirks (pd);
@@ -124,10 +124,10 @@ __init int sysfb_create_simplefb(const struct screen_info *si,if (ret) goto err_put_device; -return 0 ; +return pd; err_put_device:platform_device_put (pd); -return ret; +return ERR_PTR (ret); }
drivers/gpio/gpio-sim.c +5 -11
@@ -991,28 +991,22 @@ static struct configfs_attribute *gpio_sim_device_config_attrs[] = { };struct gpio_sim_chip_name_ctx { -struct gpio_sim_device *dev; +struct fwnode_handle *swnode;char *page; };static int gpio_sim_emit_chip_name (struct device *dev,void *data) {struct gpio_sim_chip_name_ctx *ctx = data; -struct fwnode_handle *swnode; -struct gpio_sim_bank *bank;/* This would be the sysfs device exported in /sys/class/gpio. */ if (dev->class)return 0 ; - swnode =dev_fwnode (dev); +if (device_match_fwnode (dev, ctx->swnode)) +return sprintf (ctx->page,"%s\n" ,dev_name (dev)); -list_for_each_entry (bank, &ctx->dev->bank_list, siblings) { -if (bank->swnode == swnode) -return sprintf (ctx->page,"%s\n" ,dev_name (dev)); - } - -return -ENODATA ; +return 0 ; } static ssize_t gpio_sim_bank_config_chip_name_show(struct config_item *item,
@@ -1020,7 +1014,7 @@ static ssize_t gpio_sim_bank_config_chip_name_show(struct config_item *item, {struct gpio_sim_bank *bank =to_gpio_sim_bank (item);struct gpio_sim_device *dev =gpio_sim_bank_get_device (bank); -struct gpio_sim_chip_name_ctx ctx = { dev, page }; +struct gpio_sim_chip_name_ctx ctx = { bank->swnode, page };int ret;mutex_lock (&dev->lock);
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +21 -4
@@ -1547,6 +1547,21 @@ bool amdgpu_crtc_get_scanout_position(struct drm_crtc *crtc, stime, etime, mode); } +static bool +amdgpu_display_robj_is_fb (struct amdgpu_device *adev,struct amdgpu_bo *robj) +{ +struct drm_device *dev =adev_to_drm (adev); +struct drm_fb_helper *fb_helper = dev->fb_helper; + +if (!fb_helper || !fb_helper->buffer) +return false; + +if (gem_to_amdgpu_bo (fb_helper->buffer->gem) != robj) +return false; + +return true; +} +int amdgpu_display_suspend_helper (struct amdgpu_device *adev) {struct drm_device *dev =adev_to_drm (adev);
@@ -1582,10 +1597,12 @@ int amdgpu_display_suspend_helper(struct amdgpu_device *adev)continue ; } robj =gem_to_amdgpu_bo (fb->obj[0 ]); - r =amdgpu_bo_reserve (robj, true); -if (r ==0 ) { -amdgpu_bo_unpin (robj); -amdgpu_bo_unreserve (robj); +if (!amdgpu_display_robj_is_fb (adev, robj)) { + r =amdgpu_bo_reserve (robj, true); +if (r ==0 ) { +amdgpu_bo_unpin (robj); +amdgpu_bo_unreserve (robj); + } } }return 0 ;
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c +2 -1
@@ -494,7 +494,8 @@ static int amdgpu_vkms_sw_init(void *handle)adev_to_drm (adev)->mode_config.max_height =YRES_MAX ;adev_to_drm (adev)->mode_config.preferred_depth =24 ; -adev_to_drm (adev)->mode_config.prefer_shadow =1 ; +/* disable prefer shadow for now due to hibernation issues */ +adev_to_drm (adev)->mode_config.prefer_shadow =0 ;adev_to_drm (adev)->mode_config.fb_base = adev->gmc.aper_base;
drivers/gpu/drm/amd/amdgpu/dce_v10_0.c +2 -1
@@ -2796,7 +2796,8 @@ static int dce_v10_0_sw_init(void *handle)adev_to_drm (adev)->mode_config.max_height =16384 ;adev_to_drm (adev)->mode_config.preferred_depth =24 ; -adev_to_drm (adev)->mode_config.prefer_shadow =1 ; +/* disable prefer shadow for now due to hibernation issues */ +adev_to_drm (adev)->mode_config.prefer_shadow =0 ;adev_to_drm (adev)->mode_config.fb_modifiers_not_supported = true;
drivers/gpu/drm/amd/amdgpu/dce_v11_0.c +2 -1
@@ -2914,7 +2914,8 @@ static int dce_v11_0_sw_init(void *handle)adev_to_drm (adev)->mode_config.max_height =16384 ;adev_to_drm (adev)->mode_config.preferred_depth =24 ; -adev_to_drm (adev)->mode_config.prefer_shadow =1 ; +/* disable prefer shadow for now due to hibernation issues */ +adev_to_drm (adev)->mode_config.prefer_shadow =0 ;adev_to_drm (adev)->mode_config.fb_modifiers_not_supported = true;
drivers/gpu/drm/amd/amdgpu/dce_v6_0.c +2 -1
@@ -2673,7 +2673,8 @@ static int dce_v6_0_sw_init(void *handle)adev_to_drm (adev)->mode_config.max_width =16384 ;adev_to_drm (adev)->mode_config.max_height =16384 ;adev_to_drm (adev)->mode_config.preferred_depth =24 ; -adev_to_drm (adev)->mode_config.prefer_shadow =1 ; +/* disable prefer shadow for now due to hibernation issues */ +adev_to_drm (adev)->mode_config.prefer_shadow =0 ;adev_to_drm (adev)->mode_config.fb_modifiers_not_supported = true;adev_to_drm (adev)->mode_config.fb_base = adev->gmc.aper_base;
drivers/gpu/drm/amd/amdgpu/dce_v8_0.c +2 -1
@@ -2693,7 +2693,8 @@ static int dce_v8_0_sw_init(void *handle)adev_to_drm (adev)->mode_config.max_height =16384 ;adev_to_drm (adev)->mode_config.preferred_depth =24 ; -adev_to_drm (adev)->mode_config.prefer_shadow =1 ; +/* disable prefer shadow for now due to hibernation issues */ +adev_to_drm (adev)->mode_config.prefer_shadow =0 ;adev_to_drm (adev)->mode_config.fb_modifiers_not_supported = true;
drivers/gpu/drm/amd/amdkfd/kfd_device.c +2 -0
@@ -158,6 +158,8 @@ static void kfd_device_info_init(struct kfd_dev *kfd,/* Navi2x+, Navi1x+ */ if (gc_version ==IP_VERSION (10 ,3 ,6 )) kfd->device_info.no_atomic_fw_version =14 ; +else if (gc_version ==IP_VERSION (10 ,3 ,7 )) + kfd->device_info.no_atomic_fw_version =3 ;else if (gc_version >=IP_VERSION (10 ,3 ,0 )) kfd->device_info.no_atomic_fw_version =92 ;else if (gc_version >=IP_VERSION (10 ,1 ,1 ))
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +81 -4
146 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +8 -0
@@ -546,6 +546,14 @@ struct amdgpu_display_manager {* last successfully applied backlight values. */ u32 actual_brightness[AMDGPU_DM_MAX_NUM_EDP ]; + +/** +* @aux_hpd_discon_quirk: +* +* quirk for hpd discon while aux is on-going. +* occurred on certain intel platform +*/ +bool aux_hpd_discon_quirk; };enum dsc_clock_force_state {
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +17 -0
@@ -58,6 +58,8 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,ssize_t result =0 ;struct aux_payload payload;enum aux_return_code_type operation_result; +struct amdgpu_device *adev; +struct ddc_service *ddc;if (WARN_ON (msg->size >16 ))return -E2BIG ;
@@ -76,6 +78,21 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, result =dc_link_aux_transfer_raw (TO_DM_AUX (aux)->ddc_service, &payload, &operation_result); +/* +* w/a on certain intel platform where hpd is unexpected to pull low during +* 1st sideband message transaction by return AUX_RET_ERROR_HPD_DISCON +* aux transaction is succuess in such case, therefore bypass the error +*/ + ddc =TO_DM_AUX (aux)->ddc_service; + adev = ddc->ctx->driver_context; +if (adev->dm.aux_hpd_discon_quirk) { +if (msg->address ==DP_SIDEBAND_MSG_DOWN_REQ_BASE && + operation_result ==AUX_RET_ERROR_HPD_DISCON ) { + result =0 ; + operation_result =AUX_RET_SUCCESS ; + } + } +if (payload.write && result >=0 ) result = msg->size;
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +6 -5
@@ -1113,12 +1113,13 @@ bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx)* on certain displays, such as the Sharp 4k. 36bpp is needed * to support SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616 and * SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616 with actual > 10 bpc -* precision on at least DCN display engines. However, at least -* Carrizo with DCE_VERSION_11_0 does not like 36 bpp lb depth, -* so use only 30 bpp on DCE_VERSION_11_0. Testing with DCE 11.2 and 8.3 -* did not show such problems, so this seems to be the exception. +* precision on DCN display engines, but apparently not for DCE, as +* far as testing on DCE-11.2 and DCE-8 showed. Various DCE parts have +* problems: Carrizo with DCE_VERSION_11_0 does not like 36 bpp lb depth, +* neither do DCE-8 at 4k resolution, or DCE-11.2 (broken identify pixel +* passthrough). Therefore only use 36 bpp on DCN where it is actually needed. */ -if (plane_state->ctx->dce_version >DCE_VERSION_11_0 ) +if (plane_state->ctx->dce_version >DCE_VERSION_MAX ) pipe_ctx->plane_res.scl_data.lb_params.depth =LB_PIXEL_DEPTH_36BPP ;else pipe_ctx->plane_res.scl_data.lb_params.depth =LB_PIXEL_DEPTH_30BPP ;
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c +2 -0
@@ -1228,6 +1228,8 @@ int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,uint32_t crystal_clock_freq =2500 ;uint32_t tach_period; +if (speed ==0 ) +return -EINVAL ;/* * To prevent from possible overheat, some ASICs may have requirement * for minimum fan speed:
drivers/gpu/drm/drm_aperture.c +15 -11
@@ -329,7 +329,20 @@ int drm_aperture_remove_conflicting_pci_framebuffers(struct pci_dev *pdev, const struct drm_driver *req_driver) {resource_size_t base, size; -int bar, ret =0 ; +int bar, ret; + +/* +* WARNING: Apparently we must kick fbdev drivers before vgacon, +* otherwise the vga fbdev driver falls over. +*/ +#if IS_REACHABLE (CONFIG_FB ) + ret =remove_conflicting_pci_framebuffers (pdev, req_driver->name); +if (ret) +return ret; +#endif + ret =vga_remove_vgacon (pdev); +if (ret) +return ret;for (bar =0 ; bar <PCI_STD_NUM_BARS ; ++bar) {if (!(pci_resource_flags (pdev, bar) &IORESOURCE_MEM ))
@@ -339,15 +352,6 @@ int drm_aperture_remove_conflicting_pci_framebuffers(struct pci_dev *pdev,drm_aperture_detach_drivers (base, size); } -/* -* WARNING: Apparently we must kick fbdev drivers before vgacon, -* otherwise the vga fbdev driver falls over. -*/ -#if IS_REACHABLE (CONFIG_FB ) - ret =remove_conflicting_pci_framebuffers (pdev, req_driver->name); -#endif -if (ret ==0 ) - ret =vga_remove_vgacon (pdev); -return ret; +return 0 ; }EXPORT_SYMBOL (drm_aperture_remove_conflicting_pci_framebuffers);
drivers/gpu/drm/i915/display/intel_dp_mst.c +1 -0
@@ -841,6 +841,7 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo ret =drm_connector_init (dev, connector, &intel_dp_mst_connector_funcs, DRM_MODE_CONNECTOR_DisplayPort);if (ret) { +drm_dp_mst_put_port_malloc (port);intel_connector_free (intel_connector);return NULL ; }
drivers/gpu/drm/i915/gem/i915_gem_region.c +2 -0
@@ -57,6 +57,8 @@ i915_gem_object_create_region(struct intel_memory_region *mem,if (page_size) default_page_size = page_size; +/* We should be able to fit a page within an sg entry */ +GEM_BUG_ON (overflows_type (default_page_size, u32));GEM_BUG_ON (!is_power_of_2_u64 (default_page_size));GEM_BUG_ON (default_page_size <PAGE_SIZE );
drivers/gpu/drm/i915/gem/i915_gem_ttm.c +9 -2
@@ -583,10 +583,15 @@ i915_ttm_resource_get_st(struct drm_i915_gem_object *obj, struct ttm_resource *res) {struct ttm_buffer_object *bo =i915_gem_to_ttm (obj); +u32 page_alignment;if (!i915_ttm_gtt_binds_lmem (res))return i915_ttm_tt_get_st (bo->ttm); + page_alignment = bo->page_alignment <<PAGE_SHIFT ; +if (!page_alignment) + page_alignment = obj->mm.region->min_page_size; +/* * If CPU mapping differs, we need to add the ttm_tt pages to * the resulting st. Might make sense for GGTT.
@@ -597,7 +602,8 @@ i915_ttm_resource_get_st(struct drm_i915_gem_object *obj,struct i915_refct_sgt *rsgt; rsgt =intel_region_ttm_resource_to_rsgt (obj->mm.region, - res); + res, + page_alignment);if (IS_ERR (rsgt))return rsgt;
@@ -606,7 +612,8 @@ i915_ttm_resource_get_st(struct drm_i915_gem_object *obj,return i915_refct_sgt_get (obj->ttm.cached_io_rsgt); } -return intel_region_ttm_resource_to_rsgt (obj->mm.region, res); +return intel_region_ttm_resource_to_rsgt (obj->mm.region, res, + page_alignment); }static int i915_ttm_truncate (struct drm_i915_gem_object *obj)
drivers/gpu/drm/i915/gt/intel_gt.c +14 -1
@@ -1012,6 +1012,20 @@ void intel_gt_invalidate_tlbs(struct intel_gt *gt)mutex_lock (>->tlb_invalidate_lock);intel_uncore_forcewake_get (uncore,FORCEWAKE_ALL ); +spin_lock_irq (&uncore->lock);/* serialise invalidate with GT reset */ + +for_each_engine (engine, gt, id) { +struct reg_and_bit rb; + + rb =get_reg_and_bit (engine, regs == gen8_regs, regs, num); +if (!i915_mmio_reg_offset (rb.reg)) +continue ; + +intel_uncore_write_fw (uncore, rb.reg, rb.bit); + } + +spin_unlock_irq (&uncore->lock); +for_each_engine (engine, gt, id) {/* * HW architecture suggest typical invalidation time at 40us,
@@ -1026,7 +1040,6 @@ void intel_gt_invalidate_tlbs(struct intel_gt *gt)if (!i915_mmio_reg_offset (rb.reg))continue ; -intel_uncore_write_fw (uncore, rb.reg, rb.bit); if (__intel_wait_for_register_fw(uncore, rb.reg, rb.bit, 0, timeout_us, timeout_ms,
drivers/gpu/drm/i915/gt/intel_reset.c +28 -9
@@ -299,9 +299,9 @@ static int gen6_hw_domain_reset(struct intel_gt *gt, u32 hw_domain_mask)return err; } -static int gen6_reset_engines (struct intel_gt *gt, -intel_engine_mask_t engine_mask, -unsigned int retry) +static int __gen6_reset_engines (struct intel_gt *gt, +intel_engine_mask_t engine_mask, +unsigned int retry) {struct intel_engine_cs *engine;u32 hw_mask;
@@ -320,6 +320,20 @@ static int gen6_reset_engines(struct intel_gt *gt,return gen6_hw_domain_reset (gt, hw_mask); } +static int gen6_reset_engines (struct intel_gt *gt, +intel_engine_mask_t engine_mask, +unsigned int retry) +{ +unsigned long flags; +int ret; + +spin_lock_irqsave (>->uncore->lock, flags); + ret =__gen6_reset_engines (gt, engine_mask, retry); +spin_unlock_irqrestore (>->uncore->lock, flags); + +return ret; +} +static struct intel_engine_cs *find_sfc_paired_vecs_engine (struct intel_engine_cs *engine) {int vecs_id;
@@ -486,9 +500,9 @@ static void gen11_unlock_sfc(struct intel_engine_cs *engine)rmw_clear_fw (uncore, sfc_lock.lock_reg, sfc_lock.lock_bit); } -static int gen11_reset_engines (struct intel_gt *gt, -intel_engine_mask_t engine_mask, -unsigned int retry) +static int __gen11_reset_engines (struct intel_gt *gt, +intel_engine_mask_t engine_mask, +unsigned int retry) {struct intel_engine_cs *engine;intel_engine_mask_t tmp;
@@ -582,8 +596,11 @@ static int gen8_reset_engines(struct intel_gt *gt,struct intel_engine_cs *engine;const bool reset_non_ready = retry >=1 ;intel_engine_mask_t tmp; +unsigned long flags;int ret; +spin_lock_irqsave (>->uncore->lock, flags); +for_each_engine_masked (engine, gt, engine_mask, tmp) { ret =gen8_engine_reset_prepare (engine);if (ret && !reset_non_ready)
@@ -611,17 +628,19 @@ static int gen8_reset_engines(struct intel_gt *gt,* This is best effort, so ignore any error from the initial reset. */ if (IS_DG2 (gt->i915) && engine_mask ==ALL_ENGINES ) -gen11_reset_engines (gt, gt->info.engine_mask,0 ); +__gen11_reset_engines (gt, gt->info.engine_mask,0 );if (GRAPHICS_VER (gt->i915) >=11 ) - ret =gen11_reset_engines (gt, engine_mask, retry); + ret =__gen11_reset_engines (gt, engine_mask, retry);else - ret =gen6_reset_engines (gt, engine_mask, retry); + ret =__gen6_reset_engines (gt, engine_mask, retry); skip_reset:for_each_engine_masked (engine, gt, engine_mask, tmp)gen8_engine_reset_cancel (engine); +spin_unlock_irqrestore (>->uncore->lock, flags); +return ret; }
drivers/gpu/drm/i915/gt/selftest_lrc.c +4 -4
@@ -155,8 +155,8 @@ static int live_lrc_layout(void *arg)continue ; hw =shmem_pin_map (engine->default_state); -if (IS_ERR (hw)) { - err =PTR_ERR (hw); +if (!hw) { + err = -ENOMEM ;break ; } hw +=LRC_STATE_OFFSET /sizeof (*hw);
@@ -331,8 +331,8 @@ static int live_lrc_fixed(void *arg)continue ; hw =shmem_pin_map (engine->default_state); -if (IS_ERR (hw)) { - err =PTR_ERR (hw); +if (!hw) { + err = -ENOMEM ;break ; } hw +=LRC_STATE_OFFSET /sizeof (*hw);
drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c +9 -0
@@ -160,6 +160,15 @@ __uc_fw_auto_select(struct drm_i915_private *i915, struct intel_uc_fw *uc_fw)u8 rev =INTEL_REVID (i915);int i; +/* +* The only difference between the ADL GuC FWs is the HWConfig support. +* ADL-N does not support HWConfig, so we should use the same binary as +* ADL-S, otherwise the GuC might attempt to fetch a config table that +* does not exist. +*/ +if (IS_ADLP_N (i915)) + p =INTEL_ALDERLAKE_S ; +GEM_BUG_ON (uc_fw->type >=ARRAY_SIZE (blobs_all)); fw_blobs = blobs_all[uc_fw->type].blobs; fw_count = blobs_all[uc_fw->type].count;
drivers/gpu/drm/i915/gvt/cmd_parser.c +3 -3
@@ -3117,9 +3117,9 @@ void intel_gvt_update_reg_whitelist(struct intel_vgpu *vgpu)continue ; vaddr =shmem_pin_map (engine->default_state); -if (IS_ERR (vaddr)) { -gvt_err ("failed to map %s->default state, err:%zd\n" , - engine->name,PTR_ERR (vaddr)); +if (!vaddr) { +gvt_err ("failed to map %s->default state\n" , + engine->name);return ; }
drivers/gpu/drm/i915/i915_scatterlist.c +19 -8
@@ -68,6 +68,7 @@ void i915_refct_sgt_init(struct i915_refct_sgt *rsgt, size_t size)* drm_mm_node * @node: The drm_mm_node. * @region_start: An offset to add to the dma addresses of the sg list. +* @page_alignment: Required page alignment for each sg entry. Power of two. * * Create a struct sg_table, initializing it from a struct drm_mm_node, * taking a maximum segment length into account, splitting into segments
@@ -77,22 +78,25 @@ void i915_refct_sgt_init(struct i915_refct_sgt *rsgt, size_t size)* error code cast to an error pointer on failure. */ struct i915_refct_sgt *i915_rsgt_from_mm_node (const struct drm_mm_node *node, -u64 region_start) +u64 region_start, +u32 page_alignment) { -const u64 max_segment =SZ_1G ;/* Do we have a limit on this? */ -u64 segment_pages = max_segment >>PAGE_SHIFT ; +const u32 max_segment =round_down (UINT_MAX , page_alignment); +const u32 segment_pages = max_segment >>PAGE_SHIFT ;u64 block_size, offset, prev_end;struct i915_refct_sgt *rsgt;struct sg_table *st;struct scatterlist *sg; +GEM_BUG_ON (!max_segment); + rsgt =kmalloc (sizeof (*rsgt),GFP_KERNEL );if (!rsgt)return ERR_PTR (-ENOMEM );i915_refct_sgt_init (rsgt, node->size <<PAGE_SHIFT ); st = &rsgt->table; -if (sg_alloc_table (st,DIV_ROUND_UP (node->size, segment_pages), +if (sg_alloc_table (st,DIV_ROUND_UP_ULL (node->size, segment_pages),GFP_KERNEL )) {i915_refct_sgt_put (rsgt);return ERR_PTR (-ENOMEM );
@@ -112,12 +116,14 @@ struct i915_refct_sgt *i915_rsgt_from_mm_node(const struct drm_mm_node *node, sg =__sg_next (sg);sg_dma_address (sg) = region_start + offset; +GEM_BUG_ON (!IS_ALIGNED (sg_dma_address (sg), + page_alignment));sg_dma_len (sg) =0 ; sg->length =0 ; st->nents++; } - len =min (block_size, max_segment - sg->length); + len =min_t (u64, block_size, max_segment - sg->length); sg->length += len;sg_dma_len (sg) += len;
@@ -138,6 +144,7 @@ struct i915_refct_sgt *i915_rsgt_from_mm_node(const struct drm_mm_node *node,* i915_buddy_block list * @res: The struct i915_ttm_buddy_resource. * @region_start: An offset to add to the dma addresses of the sg list. +* @page_alignment: Required page alignment for each sg entry. Power of two. * * Create a struct sg_table, initializing it from struct i915_buddy_block list, * taking a maximum segment length into account, splitting into segments
@@ -147,11 +154,12 @@ struct i915_refct_sgt *i915_rsgt_from_mm_node(const struct drm_mm_node *node,* error code cast to an error pointer on failure. */ struct i915_refct_sgt *i915_rsgt_from_buddy_resource (struct ttm_resource *res, -u64 region_start) +u64 region_start, +u32 page_alignment) {struct i915_ttm_buddy_resource *bman_res =to_ttm_buddy_resource (res);const u64 size = res->num_pages <<PAGE_SHIFT ; -const u64 max_segment =rounddown (UINT_MAX ,PAGE_SIZE ); +const u32 max_segment =round_down (UINT_MAX , page_alignment);struct drm_buddy *mm = bman_res->mm;struct list_head *blocks = &bman_res->blocks;struct drm_buddy_block *block;
@@ -161,6 +169,7 @@ struct i915_refct_sgt *i915_rsgt_from_buddy_resource(struct ttm_resource *res,resource_size_t prev_end;GEM_BUG_ON (list_empty (blocks)); +GEM_BUG_ON (!max_segment); rsgt =kmalloc (sizeof (*rsgt),GFP_KERNEL );if (!rsgt)
@@ -191,12 +200,14 @@ struct i915_refct_sgt *i915_rsgt_from_buddy_resource(struct ttm_resource *res, sg =__sg_next (sg);sg_dma_address (sg) = region_start + offset; +GEM_BUG_ON (!IS_ALIGNED (sg_dma_address (sg), + page_alignment));sg_dma_len (sg) =0 ; sg->length =0 ; st->nents++; } - len =min (block_size, max_segment - sg->length); + len =min_t (u64, block_size, max_segment - sg->length); sg->length += len;sg_dma_len (sg) += len;
drivers/gpu/drm/i915/i915_scatterlist.h +4 -2
@@ -213,9 +213,11 @@ static inline void __i915_refct_sgt_init(struct i915_refct_sgt *rsgt,void i915_refct_sgt_init (struct i915_refct_sgt *rsgt,size_t size);struct i915_refct_sgt *i915_rsgt_from_mm_node (const struct drm_mm_node *node, -u64 region_start); +u64 region_start, +u32 page_alignment);struct i915_refct_sgt *i915_rsgt_from_buddy_resource (struct ttm_resource *res, -u64 region_start); +u64 region_start, +u32 page_alignment);#endif
drivers/gpu/drm/i915/intel_region_ttm.c +7 -3
@@ -151,6 +151,7 @@ int intel_region_ttm_fini(struct intel_memory_region *mem)* Convert an opaque TTM resource manager resource to a refcounted sg_table. * @mem: The memory region. * @res: The resource manager resource obtained from the TTM resource manager. +* @page_alignment: Required page alignment for each sg entry. Power of two. * * The gem backends typically use sg-tables for operations on the underlying * io_memory. So provide a way for the backends to translate the
@@ -160,16 +161,19 @@ int intel_region_ttm_fini(struct intel_memory_region *mem)*/ struct i915_refct_sgt *intel_region_ttm_resource_to_rsgt (struct intel_memory_region *mem, -struct ttm_resource *res) +struct ttm_resource *res, +u32 page_alignment) {if (mem->is_range_manager) {struct ttm_range_mgr_node *range_node =to_ttm_range_mgr_node (res);return i915_rsgt_from_mm_node (&range_node->mm_nodes[0 ], - mem->region.start); + mem->region.start, + page_alignment); }else { -return i915_rsgt_from_buddy_resource (res, mem->region.start); +return i915_rsgt_from_buddy_resource (res, mem->region.start, + page_alignment); } }
drivers/gpu/drm/i915/intel_region_ttm.h +2 -1
@@ -24,7 +24,8 @@ int intel_region_ttm_fini(struct intel_memory_region *mem);struct i915_refct_sgt *intel_region_ttm_resource_to_rsgt (struct intel_memory_region *mem, -struct ttm_resource *res); +struct ttm_resource *res, +u32 page_alignment);void intel_region_ttm_resource_free (struct intel_memory_region *mem,struct ttm_resource *res);
drivers/gpu/drm/i915/selftests/i915_gem_gtt.c +1 -1
@@ -742,7 +742,7 @@ static int pot_hole(struct i915_address_space *vm,u64 addr;for (addr =round_up (hole_start + min_alignment, step) - min_alignment; - addr <=round_down (hole_end - (2 * min_alignment), step) - min_alignment; + hole_end > addr && hole_end - addr >=2 * min_alignment; addr += step) { err =i915_vma_pin (vma,0 ,0 , addr | flags);if (err) {
drivers/gpu/drm/i915/selftests/intel_memory_region.c +19 -2
@@ -451,7 +451,6 @@ static int igt_mock_splintered_region(void *arg)static int igt_mock_max_segment (void *arg) { -const unsigned int max_segment =rounddown (UINT_MAX ,PAGE_SIZE );struct intel_memory_region *mem = arg;struct drm_i915_private *i915 = mem->i915;struct i915_ttm_buddy_resource *res;
@@ -460,7 +459,10 @@ static int igt_mock_max_segment(void *arg)struct drm_buddy *mm;struct list_head *blocks;struct scatterlist *sg; +I915_RND_STATE (prng);LIST_HEAD (objects); +unsigned int max_segment; +unsigned int ps;u64 size;int err =0 ;
@@ -472,7 +474,13 @@ static int igt_mock_max_segment(void *arg)*/ size =SZ_8G ; - mem =mock_region_create (i915,0 , size,PAGE_SIZE ,0 ,0 ); + ps =PAGE_SIZE ; +if (i915_prandom_u64_state (&prng) &1 ) + ps =SZ_64K ;/* For something like DG2 */ + + max_segment =round_down (UINT_MAX , ps); + + mem =mock_region_create (i915,0 , size, ps,0 ,0 );if (IS_ERR (mem))return PTR_ERR (mem);
@@ -498,12 +506,21 @@ static int igt_mock_max_segment(void *arg) }for (sg = obj->mm.pages->sgl; sg; sg =sg_next (sg)) { +dma_addr_t daddr =sg_dma_address (sg); +if (sg->length > max_segment) {pr_err ("%s: Created an oversized scatterlist entry, %u > %u\n" , __func__, sg->length, max_segment); err = -EINVAL ; goto out_close; } + +if (!IS_ALIGNED (daddr, ps)) { +pr_err ("%s: Created an unaligned scatterlist entry, addr=%pa, ps=%u\n" , + __func__, &daddr, ps); + err = -EINVAL ; + goto out_close; + } } out_close:
drivers/gpu/drm/i915/selftests/mock_region.c +2 -1
@@ -32,7 +32,8 @@ static int mock_region_get_pages(struct drm_i915_gem_object *obj)return PTR_ERR (obj->mm.res); obj->mm.rsgt =intel_region_ttm_resource_to_rsgt (obj->mm.region, - obj->mm.res); + obj->mm.res, + obj->mm.region->min_page_size);if (IS_ERR (obj->mm.rsgt)) { err =PTR_ERR (obj->mm.rsgt); goto err_free_resource;
drivers/gpu/drm/panfrost/panfrost_drv.c +2 -2
@@ -432,8 +432,8 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data,if (args->retained) {if (args->madv ==PANFROST_MADV_DONTNEED ) -list_add_tail (&bo->base.madv_list, - &pfdev->shrinker_list); +list_move_tail (&bo->base.madv_list, + &pfdev->shrinker_list);else if (args->madv ==PANFROST_MADV_WILLNEED )list_del_init (&bo->base.madv_list); }
drivers/gpu/drm/panfrost/panfrost_mmu.c +1 -1
@@ -518,7 +518,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, err_pages:drm_gem_shmem_put_pages (&bo->base); err_bo: -drm_gem_object_put (&bo->base.base); +panfrost_gem_mapping_put (bomapping);return ret; }
drivers/irqchip/irq-or1k-pic.c +0 -1
@@ -66,7 +66,6 @@ static struct or1k_pic_dev or1k_pic_level = { .name = "or1k-PIC-level", .irq_unmask = or1k_pic_unmask, .irq_mask = or1k_pic_mask, - .irq_mask_ack = or1k_pic_mask_ack, }, .handle = handle_level_irq, .flags = IRQ_LEVEL | IRQ_NOPROBE,
drivers/net/can/xilinx_can.c +2 -2
@@ -259,7 +259,7 @@ static const struct can_bittiming_const xcan_bittiming_const_canfd2 = { .tseg2_min = 1, .tseg2_max = 128, .sjw_max = 128, - .brp_min = 2, + .brp_min = 1, .brp_max = 256, .brp_inc = 1, };
@@ -272,7 +272,7 @@ static const struct can_bittiming_const xcan_data_bittiming_const_canfd2 = { .tseg2_min = 1, .tseg2_max = 16, .sjw_max = 16, - .brp_min = 2, + .brp_min = 1, .brp_max = 256, .brp_inc = 1, };
drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c +8 -15
@@ -379,7 +379,7 @@ static void aq_pci_shutdown(struct pci_dev *pdev) } } -static int aq_suspend_common (struct device *dev,bool deep) +static int aq_suspend_common (struct device *dev) {struct aq_nic_s *nic =pci_get_drvdata (to_pci_dev (dev));
@@ -392,17 +392,15 @@ static int aq_suspend_common(struct device *dev, bool deep)if (netif_running (nic->ndev))aq_nic_stop (nic); -if (deep) { -aq_nic_deinit (nic, !nic->aq_hw->aq_nic_cfg->wol); -aq_nic_set_power (nic); - } +aq_nic_deinit (nic, !nic->aq_hw->aq_nic_cfg->wol); +aq_nic_set_power (nic);rtnl_unlock ();return 0 ; } -static int atl_resume_common (struct device *dev,bool deep) +static int atl_resume_common (struct device *dev) {struct pci_dev *pdev =to_pci_dev (dev);struct aq_nic_s *nic;
@@ -415,11 +413,6 @@ static int atl_resume_common(struct device *dev, bool deep)pci_set_power_state (pdev,PCI_D0 );pci_restore_state (pdev); -if (deep) { -/* Reinitialize Nic/Vecs objects */ -aq_nic_deinit (nic, !nic->aq_hw->aq_nic_cfg->wol); - } -if (netif_running (nic->ndev)) { ret =aq_nic_init (nic);if (ret)
@@ -444,22 +437,22 @@ static int atl_resume_common(struct device *dev, bool deep)static int aq_pm_freeze (struct device *dev) { -return aq_suspend_common (dev, true); +return aq_suspend_common (dev); }static int aq_pm_suspend_poweroff (struct device *dev) { -return aq_suspend_common (dev, true); +return aq_suspend_common (dev); }static int aq_pm_thaw (struct device *dev) { -return atl_resume_common (dev, true); +return atl_resume_common (dev); }static int aq_pm_resume_restore (struct device *dev) { -return atl_resume_common (dev, true); +return atl_resume_common (dev); }static const struct dev_pm_ops aq_pm_ops = {
drivers/net/ethernet/broadcom/bnxt/bnxt.c +3 -2
@@ -7641,7 +7641,7 @@ static void bnxt_hwrm_dbg_qcaps(struct bnxt *bp)static int bnxt_hwrm_queue_qportcfg (struct bnxt *bp); -static int bnxt_hwrm_func_qcaps (struct bnxt *bp) +int bnxt_hwrm_func_qcaps (struct bnxt *bp) {int rc;
@@ -9916,7 +9916,8 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)if (flags &FUNC_DRV_IF_CHANGE_RESP_FLAGS_RESC_CHANGE ) resc_reinit = true; -if (flags &FUNC_DRV_IF_CHANGE_RESP_FLAGS_HOT_FW_RESET_DONE ) +if (flags &FUNC_DRV_IF_CHANGE_RESP_FLAGS_HOT_FW_RESET_DONE || +test_bit (BNXT_STATE_FW_RESET_DET , &bp->state)) fw_reset = true;else bnxt_remap_fw_health_regs (bp);
drivers/net/ethernet/broadcom/bnxt/bnxt.h +1 -0
@@ -2310,6 +2310,7 @@ int bnxt_cancel_reservations(struct bnxt *bp, bool fw_reset);int bnxt_hwrm_alloc_wol_fltr (struct bnxt *bp);int bnxt_hwrm_free_wol_fltr (struct bnxt *bp);int bnxt_hwrm_func_resc_qcaps (struct bnxt *bp,bool all); +int bnxt_hwrm_func_qcaps (struct bnxt *bp);int bnxt_hwrm_fw_set_time (struct bnxt *);int bnxt_open_nic (struct bnxt *,bool ,bool );int bnxt_half_open_nic (struct bnxt *bp);
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c +5 -3
@@ -979,9 +979,11 @@ static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,if (rc)return rc; - rc =bnxt_dl_livepatch_info_put (bp, req,BNXT_FW_SRT_PATCH ); -if (rc) -return rc; +if (BNXT_CHIP_P5 (bp)) { + rc =bnxt_dl_livepatch_info_put (bp, req,BNXT_FW_SRT_PATCH ); +if (rc) +return rc; + }return bnxt_dl_livepatch_info_put (bp, req,BNXT_FW_CRT_PATCH ); }
drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c +11 -2
@@ -76,14 +76,23 @@ static int bnxt_refclk_read(struct bnxt *bp, struct ptp_system_timestamp *sts, u64 *ns) {struct bnxt_ptp_cfg *ptp = bp->ptp_cfg; +u32 high_before, high_now, low;if (test_bit (BNXT_STATE_IN_FW_RESET , &bp->state))return -EIO ; + high_before =readl (bp->bar0 + ptp->refclk_mapped_regs[1 ]);ptp_read_system_prets (sts); - *ns =readl (bp->bar0 + ptp->refclk_mapped_regs[0 ]); + low =readl (bp->bar0 + ptp->refclk_mapped_regs[0 ]);ptp_read_system_postts (sts); - *ns |= (u64 )readl (bp->bar0 + ptp->refclk_mapped_regs[1 ]) <<32 ; + high_now =readl (bp->bar0 + ptp->refclk_mapped_regs[1 ]); +if (high_now != high_before) { +ptp_read_system_prets (sts); + low =readl (bp->bar0 + ptp->refclk_mapped_regs[0 ]); +ptp_read_system_postts (sts); + } + *ns = ((u64 )high_now <<32 ) | low; +return 0 ; }
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c +6 -1
@@ -823,8 +823,10 @@ static int bnxt_sriov_enable(struct bnxt *bp, int *num_vfs) goto err_out2; rc =pci_enable_sriov (bp->pdev, *num_vfs); -if (rc) +if (rc) { +bnxt_ulp_sriov_cfg (bp,0 ); goto err_out2; + }return 0 ;
@@ -832,6 +834,9 @@ static int bnxt_sriov_enable(struct bnxt *bp, int *num_vfs)/* Free the resources reserved for various VF's */ bnxt_hwrm_func_vf_resource_free (bp, *num_vfs); +/* Restore the max resources */ +bnxt_hwrm_func_qcaps (bp); + err_out1:bnxt_free_vf_resources (bp);
drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c +1 -1
@@ -1392,7 +1392,7 @@ static void chtls_pass_accept_request(struct sock *sk, th_ecn = tcph->ece && tcph->cwr;if (th_ecn) { ect = !INET_ECN_is_not_ect (ip_dsfield); - ecn_ok =sock_net (sk)->ipv4.sysctl_tcp_ecn; + ecn_ok =READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_ecn);if ((!ect && ecn_ok) ||tcp_ca_needs_ecn (sk))inet_rsk (oreq)->ecn_ok =1 ; }
drivers/net/ethernet/faraday/ftgmac100.c +14 -1
@@ -1764,6 +1764,19 @@ static int ftgmac100_setup_clk(struct ftgmac100 *priv)return rc; } +static bool ftgmac100_has_child_node (struct device_node *np,const char *name) +{ +struct device_node *child_np =of_get_child_by_name (np, name); +bool ret = false; + +if (child_np) { + ret = true; +of_node_put (child_np); + } + +return ret; +} +static int ftgmac100_probe (struct platform_device *pdev) {struct resource *res;
@@ -1883,7 +1896,7 @@ static int ftgmac100_probe(struct platform_device *pdev)/* Display what we found */ phy_attached_info (phy); - }else if (np && !of_get_child_by_name (np,"mdio" )) { + }else if (np && !ftgmac100_has_child_node (np,"mdio" )) {/* Support legacy ASPEED devicetree descriptions that decribe a * MAC with an embedded MDIO controller but have no "mdio" * child node. Automatically scan the MDIO bus for available
drivers/net/ethernet/intel/ice/ice_devids.h +1 -0
@@ -5,6 +5,7 @@#define _ICE_DEVIDS_H_/* Device IDs */ +#define ICE_DEV_ID_E822_SI_DFLT 0x1888/* Intel(R) Ethernet Connection E823-L for backplane */ #define ICE_DEV_ID_E823L_BACKPLANE 0x124C/* Intel(R) Ethernet Connection E823-L for SFP */
drivers/net/ethernet/intel/ice/ice_devlink.c +40 -19
80 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_fw_update.c +94 -2
114 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_main.c +1 -0
@@ -5397,6 +5397,7 @@ static const struct pci_device_id ice_pci_tbl[] = { { PCI_VDEVICE(INTEL, ICE_DEV_ID_E823L_10G_BASE_T), 0 }, { PCI_VDEVICE(INTEL, ICE_DEV_ID_E823L_1GBE), 0 }, { PCI_VDEVICE(INTEL, ICE_DEV_ID_E823L_QSFP), 0 }, + { PCI_VDEVICE(INTEL, ICE_DEV_ID_E822_SI_DFLT), 0 },/* required last entry */ { 0, } };
drivers/net/ethernet/marvell/prestera/prestera_router.c +1 -0
@@ -587,6 +587,7 @@ int prestera_router_init(struct prestera_switch *sw)void prestera_router_fini (struct prestera_switch *sw) { +unregister_fib_notifier (&init_net, &sw->router->fib_nb);unregister_inetaddr_notifier (&sw->router->inetaddr_nb);unregister_inetaddr_validator_notifier (&sw->router->inetaddr_valid_nb);rhashtable_destroy (&sw->router->kern_fib_cache_ht);
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c +12 -8
@@ -66,6 +66,7 @@ struct mlx5_tc_ct_priv {struct mlx5_ct_fs *fs;struct mlx5_ct_fs_ops *fs_ops;spinlock_t ht_lock;/* protects ft entries */ +struct workqueue_struct *wq; };struct mlx5_ct_flow {
@@ -927,14 +928,11 @@ static void mlx5_tc_ct_entry_del_work(struct work_struct *work)static void __mlx5_tc_ct_entry_put (struct mlx5_ct_entry *entry) { -struct mlx5e_priv *priv; -if (!refcount_dec_and_test (&entry->refcnt))return ; - priv =netdev_priv (entry->ct_priv->netdev);INIT_WORK (&entry->work, mlx5_tc_ct_entry_del_work); -queue_work (priv->wq, &entry->work); +queue_work (entry->ct_priv->wq, &entry->work); } static struct mlx5_ct_counter *
@@ -1744,19 +1742,16 @@ mlx5_tc_ct_flush_ft_entry(void *ptr, void *arg)static void mlx5_tc_ct_del_ft_cb (struct mlx5_tc_ct_priv *ct_priv,struct mlx5_ct_ft *ft) { -struct mlx5e_priv *priv; -if (!refcount_dec_and_test (&ft->refcount))return ; +flush_workqueue (ct_priv->wq);nf_flow_table_offload_del_cb (ft->nf_ft, mlx5_tc_ct_block_flow_offload, ft);rhashtable_remove_fast (&ct_priv->zone_ht, &ft->node, zone_params);rhashtable_free_and_destroy (&ft->ct_entries_ht, mlx5_tc_ct_flush_ft_entry, ct_priv); - priv =netdev_priv (ct_priv->netdev); -flush_workqueue (priv->wq);mlx5_tc_ct_free_pre_ct_tables (ft);mapping_remove (ct_priv->zone_mapping, ft->zone_restore_id);kfree (ft);
@@ -2139,6 +2134,12 @@ mlx5_tc_ct_init(struct mlx5e_priv *priv, struct mlx5_fs_chains *chains,if (rhashtable_init (&ct_priv->ct_tuples_nat_ht, &tuples_nat_ht_params)) goto err_ct_tuples_nat_ht; + ct_priv->wq =alloc_ordered_workqueue ("mlx5e_ct_priv_wq" ,0 ); +if (!ct_priv->wq) { + err = -ENOMEM ; + goto err_wq; + } + err =mlx5_tc_ct_fs_init (ct_priv);if (err) goto err_init_fs;
@@ -2146,6 +2147,8 @@ mlx5_tc_ct_init(struct mlx5e_priv *priv, struct mlx5_fs_chains *chains,return ct_priv; err_init_fs: +destroy_workqueue (ct_priv->wq); +err_wq:rhashtable_destroy (&ct_priv->ct_tuples_nat_ht); err_ct_tuples_nat_ht:rhashtable_destroy (&ct_priv->ct_tuples_ht);
@@ -2175,6 +2178,7 @@ mlx5_tc_ct_clean(struct mlx5_tc_ct_priv *ct_priv)if (!ct_priv)return ; +destroy_workqueue (ct_priv->wq); chains = ct_priv->chains; ct_priv->fs_ops->destroy (ct_priv->fs);
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c +1 -2
@@ -231,8 +231,7 @@ mlx5e_set_ktls_rx_priv_ctx(struct tls_context *tls_ctx,struct mlx5e_ktls_offload_context_rx **ctx =__tls_driver_ctx (tls_ctx,TLS_OFFLOAD_CTX_DIR_RX ); -BUILD_BUG_ON (sizeof (struct mlx5e_ktls_offload_context_rx *) > -TLS_OFFLOAD_CONTEXT_SIZE_RX ); +BUILD_BUG_ON (sizeof (priv_rx) >TLS_DRIVER_STATE_SIZE_RX ); *ctx = priv_rx; }
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c +1 -2
@@ -68,8 +68,7 @@ mlx5e_set_ktls_tx_priv_ctx(struct tls_context *tls_ctx,struct mlx5e_ktls_offload_context_tx **ctx =__tls_driver_ctx (tls_ctx,TLS_OFFLOAD_CTX_DIR_TX ); -BUILD_BUG_ON (sizeof (struct mlx5e_ktls_offload_context_tx *) > -TLS_OFFLOAD_CONTEXT_SIZE_TX ); +BUILD_BUG_ON (sizeof (priv_tx) >TLS_DRIVER_STATE_SIZE_TX ); *ctx = priv_tx; }
drivers/net/ethernet/mellanox/mlx5/core/en_stats.c +1 -1
@@ -688,7 +688,7 @@ static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(vnic_env)u32 in[MLX5_ST_SZ_DW (query_vnic_env_in)] = {};struct mlx5_core_dev *mdev = priv->mdev; -if (!MLX5_CAP_GEN (priv->mdev, nic_receive_steering_discard)) +if (!mlx5e_stats_grp_vnic_env_num_stats (priv))return ;MLX5_SET (query_vnic_env_in, in, opcode,MLX5_CMD_OP_QUERY_VNIC_ENV );
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +30 -9
@@ -318,6 +318,26 @@ static void mlx5e_tx_check_stop(struct mlx5e_txqsq *sq) } } +static void mlx5e_tx_flush (struct mlx5e_txqsq *sq) +{ +struct mlx5e_tx_wqe_info *wi; +struct mlx5e_tx_wqe *wqe; +u16 pi; + +/* Must not be called when a MPWQE session is active but empty. */ +mlx5e_tx_mpwqe_ensure_complete (sq); + + pi =mlx5_wq_cyc_ctr2ix (&sq->wq, sq->pc); + wi = &sq->db.wqe_info[pi]; + + *wi = (struct mlx5e_tx_wqe_info ) { + .num_wqebbs =1 , + }; + + wqe =mlx5e_post_nop (&sq->wq, sq->sqn, &sq->pc); +mlx5e_notify_hw (&sq->wq, sq->pc, sq->uar_map, &wqe->ctrl); +} + static inline void mlx5e_txwqe_complete(struct mlx5e_txqsq *sq, struct sk_buff *skb, const struct mlx5e_tx_attr *attr,
@@ -410,6 +430,7 @@ mlx5e_sq_xmit_wqe(struct mlx5e_txqsq *sq, struct sk_buff *skb, err_drop: stats->dropped++;dev_kfree_skb_any (skb); +mlx5e_tx_flush (sq); }static bool mlx5e_tx_skb_supports_mpwqe (struct sk_buff *skb,struct mlx5e_tx_attr *attr)
@@ -511,6 +532,13 @@ mlx5e_sq_xmit_mpwqe(struct mlx5e_txqsq *sq, struct sk_buff *skb,struct mlx5_wqe_ctrl_seg *cseg;struct mlx5e_xmit_data txd; + txd.data = skb->data; + txd.len = skb->len; + + txd.dma_addr =dma_map_single (sq->pdev, txd.data, txd.len,DMA_TO_DEVICE ); +if (unlikely (dma_mapping_error (sq->pdev, txd.dma_addr))) + goto err_unmap; +if (!mlx5e_tx_mpwqe_session_is_active (sq)) {mlx5e_tx_mpwqe_session_start (sq, eseg); }else if (!mlx5e_tx_mpwqe_same_eseg (sq, eseg)) {
@@ -520,18 +548,9 @@ mlx5e_sq_xmit_mpwqe(struct mlx5e_txqsq *sq, struct sk_buff *skb, sq->stats->xmit_more += xmit_more; - txd.data = skb->data; - txd.len = skb->len; - - txd.dma_addr =dma_map_single (sq->pdev, txd.data, txd.len,DMA_TO_DEVICE ); -if (unlikely (dma_mapping_error (sq->pdev, txd.dma_addr))) - goto err_unmap;mlx5e_dma_push (sq, txd.dma_addr, txd.len,MLX5E_DMA_MAP_SINGLE ); -mlx5e_skb_fifo_push (&sq->db.skb_fifo, skb); -mlx5e_tx_mpwqe_add_dseg (sq, &txd); -mlx5e_tx_skb_update_hwts_flags (skb);if (unlikely (mlx5e_tx_mpwqe_is_full (&sq->mpwqe, sq->max_sq_mpw_wqebbs))) {
@@ -553,6 +572,7 @@ mlx5e_sq_xmit_mpwqe(struct mlx5e_txqsq *sq, struct sk_buff *skb,mlx5e_dma_unmap_wqe_err (sq,1 ); sq->stats->dropped++;dev_kfree_skb_any (skb); +mlx5e_tx_flush (sq); }void mlx5e_tx_mpwqe_ensure_complete (struct mlx5e_txqsq *sq)
@@ -935,5 +955,6 @@ void mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb, err_drop: stats->dropped++;dev_kfree_skb_any (skb); + mlx5e_tx_flush(sq); }#endif
drivers/net/ethernet/mellanox/mlx5/core/esw/legacy.c +3 -2
@@ -11,6 +11,7 @@#include "mlx5_core.h" #include "eswitch.h" #include "fs_core.h" +#include "fs_ft_pool.h" #include "esw/qos.h" enum {
@@ -95,8 +96,7 @@ static int esw_create_legacy_fdb_table(struct mlx5_eswitch *esw)if (!flow_group_in)return -ENOMEM ; - table_size =BIT (MLX5_CAP_ESW_FLOWTABLE_FDB (dev, log_max_ft_size)); - ft_attr.max_fte = table_size; + ft_attr.max_fte =POOL_NEXT_SIZE ; ft_attr.prio =LEGACY_FDB_PRIO ; fdb =mlx5_create_flow_table (root_ns, &ft_attr);if (IS_ERR (fdb)) {
@@ -105,6 +105,7 @@ static int esw_create_legacy_fdb_table(struct mlx5_eswitch *esw) goto out; } esw->fdb_table.legacy.fdb = fdb; + table_size = fdb->max_fte;/* Addresses group : Full match unicast/multicast addresses */ MLX5_SET(create_flow_group_in, flow_group_in, match_criteria_enable,
drivers/net/ethernet/mscc/ocelot_fdma.c +8 -9
@@ -94,19 +94,18 @@ static void ocelot_fdma_activate_chan(struct ocelot *ocelot, dma_addr_t dma,ocelot_fdma_writel (ocelot,MSCC_FDMA_CH_ACTIVATE ,BIT (chan)); } +static u32 ocelot_fdma_read_ch_safe (struct ocelot *ocelot) +{ +return ocelot_fdma_readl (ocelot,MSCC_FDMA_CH_SAFE ); +} +static int ocelot_fdma_wait_chan_safe (struct ocelot *ocelot,int chan) { -unsigned long timeout;u32 safe; - timeout = jiffies +usecs_to_jiffies (OCELOT_FDMA_CH_SAFE_TIMEOUT_US ); -do { - safe =ocelot_fdma_readl (ocelot,MSCC_FDMA_CH_SAFE ); -if (safe &BIT (chan)) -return 0 ; - }while (time_after (jiffies, timeout)); - -return -ETIMEDOUT ; +return readx_poll_timeout_atomic (ocelot_fdma_read_ch_safe, ocelot, safe, + safe &BIT (chan),0 , +OCELOT_FDMA_CH_SAFE_TIMEOUT_US ); } static void ocelot_fdma_dcb_set_data(struct ocelot_fdma_dcb *dcb,
drivers/net/ethernet/netronome/nfp/nfdk/dp.c +25 -8
@@ -125,17 +125,18 @@ nfp_nfdk_tx_csum(struct nfp_net_dp *dp, struct nfp_net_r_vector *r_vec,static int nfp_nfdk_tx_maybe_close_block (struct nfp_net_tx_ring *tx_ring, -unsigned int nr_frags,struct sk_buff *skb) +struct sk_buff *skb) {unsigned int n_descs, wr_p, nop_slots;const skb_frag_t *frag, *fend;struct nfp_nfdk_tx_desc *txd; +unsigned int nr_frags;unsigned int wr_idx;int err; recount_descs: n_descs =nfp_nfdk_headlen_to_segs (skb_headlen (skb)); - + nr_frags =skb_shinfo (skb)->nr_frags; frag =skb_shinfo (skb)->frags; fend = frag + nr_frags;for (; frag < fend; frag++)
@@ -281,10 +282,13 @@ netdev_tx_t nfp_nfdk_tx(struct sk_buff *skb, struct net_device *netdev)if (unlikely ((int )metadata <0 )) goto err_flush; - nr_frags =skb_shinfo (skb)->nr_frags; -if (nfp_nfdk_tx_maybe_close_block (tx_ring, nr_frags, skb)) +if (nfp_nfdk_tx_maybe_close_block (tx_ring, skb)) goto err_flush; +/* nr_frags will change after skb_linearize so we get nr_frags after +* nfp_nfdk_tx_maybe_close_block function +*/ + nr_frags =skb_shinfo (skb)->nr_frags;/* DMA map all */ wr_idx =D_IDX (tx_ring, tx_ring->wr_p); txd = &tx_ring->ktxds[wr_idx];
@@ -310,7 +314,16 @@ netdev_tx_t nfp_nfdk_tx(struct sk_buff *skb, struct net_device *netdev)/* FIELD_PREP() implicitly truncates to chunk */ dma_len -=1 ; - dlen_type =FIELD_PREP (NFDK_DESC_TX_DMA_LEN_HEAD , dma_len) | + +/* We will do our best to pass as much data as we can in descriptor +* and we need to make sure the first descriptor includes whole head +* since there is limitation in firmware side. Sometimes the value of +* dma_len bitwise and NFDK_DESC_TX_DMA_LEN_HEAD will less than +* headlen. +*/ + dlen_type =FIELD_PREP (NFDK_DESC_TX_DMA_LEN_HEAD , + dma_len >NFDK_DESC_TX_DMA_LEN_HEAD ? +NFDK_DESC_TX_DMA_LEN_HEAD : dma_len) |FIELD_PREP (NFDK_DESC_TX_TYPE_HEAD , type); txd->dma_len_type =cpu_to_le16 (dlen_type);
@@ -925,7 +938,9 @@ nfp_nfdk_tx_xdp_buf(struct nfp_net_dp *dp, struct nfp_net_rx_ring *rx_ring,/* FIELD_PREP() implicitly truncates to chunk */ dma_len -=1 ; - dlen_type =FIELD_PREP (NFDK_DESC_TX_DMA_LEN_HEAD , dma_len) | + dlen_type =FIELD_PREP (NFDK_DESC_TX_DMA_LEN_HEAD , + dma_len >NFDK_DESC_TX_DMA_LEN_HEAD ? +NFDK_DESC_TX_DMA_LEN_HEAD : dma_len) |FIELD_PREP (NFDK_DESC_TX_TYPE_HEAD , type); txd->dma_len_type =cpu_to_le16 (dlen_type);
@@ -1303,7 +1318,7 @@ nfp_nfdk_ctrl_tx_one(struct nfp_net *nn, struct nfp_net_r_vector *r_vec, skb_push(skb, 4)); } -if (nfp_nfdk_tx_maybe_close_block (tx_ring,0 , skb)) +if (nfp_nfdk_tx_maybe_close_block (tx_ring, skb)) goto err_free;/* DMA map all */
@@ -1328,7 +1343,9 @@ nfp_nfdk_ctrl_tx_one(struct nfp_net *nn, struct nfp_net_r_vector *r_vec, txbuf++; dma_len -=1 ; - dlen_type =FIELD_PREP (NFDK_DESC_TX_DMA_LEN_HEAD , dma_len) | + dlen_type =FIELD_PREP (NFDK_DESC_TX_DMA_LEN_HEAD , + dma_len >NFDK_DESC_TX_DMA_LEN_HEAD ? +NFDK_DESC_TX_DMA_LEN_HEAD : dma_len) |FIELD_PREP (NFDK_DESC_TX_TYPE_HEAD , type); txd->dma_len_type =cpu_to_le16 (dlen_type);
drivers/net/ethernet/sfc/ef10.c +3 -0
@@ -1932,7 +1932,10 @@ static int efx_ef10_try_update_nic_stats_vf(struct efx_nic *efx)efx_update_sw_stats (efx, stats); out: +/* releasing a DMA coherent buffer with BH disabled can panic */ +spin_unlock_bh (&efx->stats_lock);efx_nic_free_buffer (efx, &stats_buf); +spin_lock_bh (&efx->stats_lock);return rc; }
drivers/net/ethernet/sfc/ef10_sriov.c +7 -3
@@ -408,8 +408,9 @@ static int efx_ef10_pci_sriov_enable(struct efx_nic *efx, int num_vfs)static int efx_ef10_pci_sriov_disable (struct efx_nic *efx,bool force) {struct pci_dev *dev = efx->pci_dev; +struct efx_ef10_nic_data *nic_data = efx->nic_data;unsigned int vfs_assigned =pci_vfs_assigned (dev); -int rc =0 ; +int i, rc =0 ;if (vfs_assigned && !force) { netif_info(efx, drv, efx->net_dev, "VFs are assigned to guests; "
@@ -417,10 +418,13 @@ static int efx_ef10_pci_sriov_disable(struct efx_nic *efx, bool force)return -EBUSY ; } -if (!vfs_assigned) +if (!vfs_assigned) { +for (i =0 ; i < efx->vf_count; i++) + nic_data->vf[i].pci_dev =NULL ;pci_disable_sriov (dev); -else + }else { rc = -EBUSY ; + }efx_ef10_sriov_free_vf_vswitching (efx); efx->vf_count =0 ;
drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c +1 -0
@@ -361,6 +361,7 @@ static int tegra_eqos_probe(struct platform_device *pdev, data->fix_mac_speed = tegra_eqos_fix_speed; data->init = tegra_eqos_init; data->bsp_priv = eqos; + data->sph_disable =1 ; err =tegra_eqos_init (pdev, eqos);if (err <0 )
drivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c +4 -2
@@ -273,7 +273,8 @@ static int ingenic_mac_probe(struct platform_device *pdev) mac->tx_delay = tx_delay_ps *1000 ; }else {dev_err (&pdev->dev,"Invalid TX clock delay: %dps\n" , tx_delay_ps); -return -EINVAL ; + ret = -EINVAL ; + goto err_remove_config_dt; } }
@@ -283,7 +284,8 @@ static int ingenic_mac_probe(struct platform_device *pdev) mac->rx_delay = rx_delay_ps *1000 ; }else {dev_err (&pdev->dev,"Invalid RX clock delay: %dps\n" , rx_delay_ps); -return -EINVAL ; + ret = -EINVAL ; + goto err_remove_config_dt; } }
drivers/net/ethernet/ti/am65-cpsw-nuss.c +10 -7
@@ -2475,7 +2475,6 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common) port->port_id, ret); goto dl_port_unreg; } -devlink_port_type_eth_set (dl_port, port->ndev); }devlink_register (common->devlink);return ret;
@@ -2519,6 +2518,7 @@ static void am65_cpsw_unregister_devlink(struct am65_cpsw_common *common)static int am65_cpsw_nuss_register_ndevs (struct am65_cpsw_common *common) {struct device *dev = common->dev; +struct devlink_port *dl_port;struct am65_cpsw_port *port;int ret =0 , i;
@@ -2535,6 +2535,10 @@ static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)return ret; } + ret =am65_cpsw_nuss_register_devlink (common); +if (ret) +return ret; +for (i =0 ; i < common->port_num; i++) { port = &common->ports[i];
@@ -2547,25 +2551,24 @@ static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common) i, ret); goto err_cleanup_ndev; } + + dl_port = &port->devlink_port; +devlink_port_type_eth_set (dl_port, port->ndev); } ret =am65_cpsw_register_notifiers (common);if (ret) goto err_cleanup_ndev; - ret =am65_cpsw_nuss_register_devlink (common); -if (ret) - goto clean_unregister_notifiers; -/* can't auto unregister ndev using devm_add_action() due to * devres release sequence in DD core for DMA */ return 0 ; -clean_unregister_notifiers: -am65_cpsw_unregister_notifiers (common); + err_cleanup_ndev:am65_cpsw_nuss_cleanup_ndev (common); +am65_cpsw_unregister_devlink (common);return ret; }
drivers/net/phy/sfp.c +1 -1
@@ -2516,7 +2516,7 @@ static int sfp_probe(struct platform_device *pdev)platform_set_drvdata (pdev, sfp); - err =devm_add_action (sfp->dev, sfp_cleanup, sfp); + err =devm_add_action_or_reset (sfp->dev, sfp_cleanup, sfp);if (err <0 )return err;
drivers/net/xen-netback/rx.c +1 -0
@@ -495,6 +495,7 @@ void xenvif_rx_action(struct xenvif_queue *queue) queue->rx_copy.completed = &completed_skbs;while (xenvif_rx_ring_slots_available (queue) && + !skb_queue_empty (&queue->rx_queue) && work_done <RX_BATCH_SIZE ) {xenvif_rx_skb (queue); work_done++;
drivers/nfc/nxp-nci/i2c.c +6 -2
@@ -122,7 +122,9 @@ static int nxp_nci_i2c_fw_read(struct nxp_nci_i2c_phy *phy,skb_put_data (*skb, &header,NXP_NCI_FW_HDR_LEN ); r =i2c_master_recv (client,skb_put (*skb, frame_len), frame_len); -if (r != frame_len) { +if (r <0 ) { + goto fw_read_exit_free_skb; + }else if (r != frame_len) {nfc_err (&client->dev,"Invalid frame length: %u (expected %zu)\n" , r, frame_len);
@@ -166,7 +168,9 @@ static int nxp_nci_i2c_nci_read(struct nxp_nci_i2c_phy *phy,return 0 ; r =i2c_master_recv (client,skb_put (*skb, header.plen), header.plen); -if (r != header.plen) { +if (r <0 ) { + goto nci_read_exit_free_skb; + }else if (r != header.plen) {nfc_err (&client->dev,"Invalid frame payload length: %u (expected %u)\n" , r, header.plen);
drivers/nvme/host/core.c +5 -3
@@ -3726,7 +3726,7 @@ static int nvme_add_ns_cdev(struct nvme_ns *ns) }static struct nvme_ns_head *nvme_alloc_ns_head (struct nvme_ctrl *ctrl, -unsigned nsid,struct nvme_ns_ids *ids) +unsigned nsid,struct nvme_ns_ids *ids,bool is_shared) {struct nvme_ns_head *head;size_t size =sizeof (*head);
@@ -3750,6 +3750,7 @@ static struct nvme_ns_head *nvme_alloc_ns_head(struct nvme_ctrl *ctrl, head->subsys = ctrl->subsys; head->ns_id = nsid; head->ids = *ids; + head->shared = is_shared;kref_init (&head->ref);if (head->ids.csi) {
@@ -3830,12 +3831,11 @@ static int nvme_init_ns_head(struct nvme_ns *ns, unsigned nsid, nsid); goto out_unlock; } - head =nvme_alloc_ns_head (ctrl, nsid, ids); + head =nvme_alloc_ns_head (ctrl, nsid, ids, is_shared);if (IS_ERR (head)) { ret =PTR_ERR (head); goto out_unlock; } - head->shared = is_shared; }else { ret = -EINVAL ;if (!is_shared || !head->shared) {
@@ -4519,6 +4519,8 @@ void nvme_stop_ctrl(struct nvme_ctrl *ctrl)nvme_stop_failfast_work (ctrl);flush_work (&ctrl->async_event_work);cancel_work_sync (&ctrl->fw_act_work); +if (ctrl->ops->stop_ctrl) + ctrl->ops->stop_ctrl (ctrl); }EXPORT_SYMBOL_GPL (nvme_stop_ctrl);
drivers/nvme/host/nvme.h +1 -0
@@ -501,6 +501,7 @@ struct nvme_ctrl_ops {void (*free_ctrl)(struct nvme_ctrl *ctrl);void (*submit_async_event)(struct nvme_ctrl *ctrl);void (*delete_ctrl)(struct nvme_ctrl *ctrl); +void (*stop_ctrl)(struct nvme_ctrl *ctrl);int (*get_address)(struct nvme_ctrl *ctrl,char *buf,int size); };
drivers/nvme/host/pci.c +2 -1
@@ -3432,7 +3432,8 @@ static const struct pci_device_id nvme_id_table[] = {NVME_QUIRK_DISABLE_WRITE_ZEROES | NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_DEVICE(0x1987, 0x5016), /* Phison E16 */ - .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, }, + .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN | + NVME_QUIRK_BOGUS_NID, }, { PCI_DEVICE(0x1b4b, 0x1092), /* Lexar 256 GB SSD */ .driver_data = NVME_QUIRK_NO_NS_DESC_LIST | NVME_QUIRK_IGNORE_DEV_SUBNQN, },
drivers/nvme/host/rdma.c +9 -3
@@ -1048,6 +1048,14 @@ static void nvme_rdma_teardown_io_queues(struct nvme_rdma_ctrl *ctrl, } } +static void nvme_rdma_stop_ctrl (struct nvme_ctrl *nctrl) +{ +struct nvme_rdma_ctrl *ctrl =to_rdma_ctrl (nctrl); + +cancel_work_sync (&ctrl->err_work); +cancel_delayed_work_sync (&ctrl->reconnect_work); +} +static void nvme_rdma_free_ctrl (struct nvme_ctrl *nctrl) {struct nvme_rdma_ctrl *ctrl =to_rdma_ctrl (nctrl);
@@ -2255,9 +2263,6 @@ static const struct blk_mq_ops nvme_rdma_admin_mq_ops = {static void nvme_rdma_shutdown_ctrl (struct nvme_rdma_ctrl *ctrl,bool shutdown) { -cancel_work_sync (&ctrl->err_work); -cancel_delayed_work_sync (&ctrl->reconnect_work); -nvme_rdma_teardown_io_queues (ctrl, shutdown);nvme_stop_admin_queue (&ctrl->ctrl);if (shutdown)
@@ -2307,6 +2312,7 @@ static const struct nvme_ctrl_ops nvme_rdma_ctrl_ops = { .submit_async_event = nvme_rdma_submit_async_event, .delete_ctrl = nvme_rdma_delete_ctrl, .get_address = nvmf_get_address, + .stop_ctrl = nvme_rdma_stop_ctrl, };/*
drivers/nvme/host/tcp.c +8 -5
@@ -1180,8 +1180,7 @@ static int nvme_tcp_try_send(struct nvme_tcp_queue *queue) }else if (ret <0 ) {dev_err (queue->ctrl->ctrl.device,"failed to send request %d\n" , ret); -if (ret != -EPIPE && ret != -ECONNRESET ) -nvme_tcp_fail_request (queue->request); +nvme_tcp_fail_request (queue->request);nvme_tcp_done_send_req (queue); }return ret;
@@ -2194,9 +2193,6 @@ static void nvme_tcp_error_recovery_work(struct work_struct *work)static void nvme_tcp_teardown_ctrl (struct nvme_ctrl *ctrl,bool shutdown) { -cancel_work_sync (&to_tcp_ctrl (ctrl)->err_work); -cancel_delayed_work_sync (&to_tcp_ctrl (ctrl)->connect_work); -nvme_tcp_teardown_io_queues (ctrl, shutdown);nvme_stop_admin_queue (ctrl);if (shutdown)
@@ -2236,6 +2232,12 @@ static void nvme_reset_ctrl_work(struct work_struct *work)nvme_tcp_reconnect_or_remove (ctrl); } +static void nvme_tcp_stop_ctrl (struct nvme_ctrl *ctrl) +{ +cancel_work_sync (&to_tcp_ctrl (ctrl)->err_work); +cancel_delayed_work_sync (&to_tcp_ctrl (ctrl)->connect_work); +} +static void nvme_tcp_free_ctrl (struct nvme_ctrl *nctrl) {struct nvme_tcp_ctrl *ctrl =to_tcp_ctrl (nctrl);
@@ -2560,6 +2562,7 @@ static const struct nvme_ctrl_ops nvme_tcp_ctrl_ops = { .submit_async_event = nvme_tcp_submit_async_event, .delete_ctrl = nvme_tcp_delete_ctrl, .get_address = nvmf_get_address, + .stop_ctrl = nvme_tcp_stop_ctrl, }; static bool
drivers/nvme/host/trace.h +1 -1
@@ -69,7 +69,7 @@ TRACE_EVENT(nvme_setup_cmd, __entry->metadata = !!blk_integrity_rq (req); __entry->fctype = cmd->fabrics.fctype;__assign_disk_name (__entry->disk, req->q->disk); -memcpy (__entry->cdw10, &cmd->common.cdw10, +memcpy (__entry->cdw10, &cmd->common.cdws,sizeof (__entry->cdw10)); ), TP_printk("nvme%d: %sqid=%d, cmdid=%u, nsid=%u, flags=0x%x, meta=0x%x, cmd=(%s %s)",
drivers/pinctrl/aspeed/pinctrl-aspeed.c +2 -2
@@ -236,11 +236,11 @@ int aspeed_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int function,const struct aspeed_sig_expr **funcs;const struct aspeed_sig_expr ***prios; -pr_debug ("Muxing pin %s for %s\n" , pdesc->name, pfunc->name); -if (!pdesc)return -EINVAL ; +pr_debug ("Muxing pin %s for %s\n" , pdesc->name, pfunc->name); + prios = pdesc->prios;if (!prios)
drivers/pinctrl/freescale/pinctrl-imx93.c +1 -0
@@ -239,6 +239,7 @@ static const struct pinctrl_pin_desc imx93_pinctrl_pads[] = {static const struct imx_pinctrl_soc_info imx93_pinctrl_info = { .pins = imx93_pinctrl_pads, .npins =ARRAY_SIZE (imx93_pinctrl_pads), + .flags =ZERO_OFFSET_VALID , .gpr_compatible ="fsl,imx93-iomuxc-gpr" , };
drivers/platform/x86/hp-wmi.c +3 -0
@@ -89,6 +89,7 @@ enum hp_wmi_event_ids {HPWMI_BACKLIT_KB_BRIGHTNESS =0x0D ,HPWMI_PEAKSHIFT_PERIOD =0x0F ,HPWMI_BATTERY_CHARGE_PERIOD =0x10 , + HPWMI_SANITIZATION_MODE = 0x17, };/*
@@ -846,6 +847,8 @@ static void hp_wmi_notify(u32 value, void *context)break ;case HPWMI_BATTERY_CHARGE_PERIOD :break ; +case HPWMI_SANITIZATION_MODE : +break ;default :pr_info ("Unknown event_id - %d - 0x%x\n" , event_id, event_data);break ;
drivers/platform/x86/intel/pmc/core.c +1 -0
@@ -1911,6 +1911,7 @@ static const struct x86_cpu_id intel_pmc_core_ids[] = {X86_MATCH_INTEL_FAM6_MODEL (ATOM_TREMONT_L , &icl_reg_map),X86_MATCH_INTEL_FAM6_MODEL (ROCKETLAKE , &tgl_reg_map),X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE_L , &tgl_reg_map), +X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE_N , &tgl_reg_map),X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE , &adl_reg_map), X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P, &tgl_reg_map), {}
drivers/platform/x86/thinkpad_acpi.c +23 -27
133 lines not on this page · raw message
drivers/power/supply/power_supply_core.c +12 -12
@@ -846,17 +846,17 @@ int power_supply_temp2resist_simple(struct power_supply_resistance_temp_table *t {int i, high, low; -/* Break loop at table_len - 1 because that is the highest index */ -for (i =0 ; i < table_len -1 ; i++) +for (i =0 ; i < table_len; i++)if (temp > table[i].temp)break ;/* The library function will deal with high == low */ -if ((i ==0 ) || (i == (table_len -1 ))) - high = i; +if (i ==0 ) + high = low = i; +else if (i == table_len) + high = low = i -1 ;else - high = i -1 ; - low = i; + high = (low = i) -1 ; return fixp_linear_interpolate(table[low].temp, table[low].resistance,
@@ -958,17 +958,17 @@ int power_supply_ocv2cap_simple(struct power_supply_battery_ocv_table *table, {int i, high, low; -/* Break loop at table_len - 1 because that is the highest index */ -for (i =0 ; i < table_len -1 ; i++) +for (i =0 ; i < table_len; i++)if (ocv > table[i].ocv)break ;/* The library function will deal with high == low */ -if ((i ==0 ) || (i == (table_len -1 ))) - high = i -1 ; +if (i ==0 ) + high = low = i; +else if (i == table_len) + high = low = i -1 ;else - high = i;/* i.e. i == 0 */ - low = i; + high = (low = i) -1 ; return fixp_linear_interpolate(table[low].ocv, table[low].capacity,
drivers/s390/crypto/ap_bus.c +1 -1
@@ -1410,7 +1410,7 @@ static int __verify_queue_reservations(struct device_driver *drv, void *data)if (ap_drv->in_use) { rc = ap_drv->in_use (ap_perms.apm, newaqm);if (rc) -return -EBUSY ; + rc = -EBUSY ; }/* release the driver's module */
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +7 -0
@@ -2782,6 +2782,7 @@ static int slave_configure_v3_hw(struct scsi_device *sdev)struct hisi_hba *hisi_hba =shost_priv (shost);struct device *dev = hisi_hba->dev;int ret =sas_slave_configure (sdev); +unsigned int max_sectors;if (ret)return ret;
@@ -2799,6 +2800,12 @@ static int slave_configure_v3_hw(struct scsi_device *sdev) } } +/* Set according to IOMMU IOVA caching limit */ + max_sectors =min_t (size_t,queue_max_hw_sectors (sdev->request_queue), + (PAGE_SIZE *32 ) >>SECTOR_SHIFT ); + +blk_queue_max_hw_sectors (sdev->request_queue, max_sectors); +return 0 ; }
drivers/scsi/megaraid/megaraid_sas_base.c +3 -0
@@ -3195,6 +3195,9 @@ static int megasas_map_queues(struct Scsi_Host *shost) qoff += map->nr_queues; offset += map->nr_queues; +/* we never use READ queue, so can't cheat blk-mq */ + shost->tag_set.map[HCTX_TYPE_READ ].nr_queues =0 ; +/* Setup Poll hctx */ map = &shost->tag_set.map[HCTX_TYPE_POLL ]; map->nr_queues = instance->iopoll_q_count;
drivers/scsi/ufs/ufshcd.c +1 -1
@@ -5722,7 +5722,7 @@ int ufshcd_wb_toggle(struct ufs_hba *hba, bool enable) } hba->dev_info.wb_enabled = enable; -dev_info (hba->dev,"%s Write Booster %s\n" , +dev_dbg (hba->dev,"%s Write Booster %s\n" , __func__, enable ?"enabled" :"disabled" );return ret;
drivers/soc/ixp4xx/ixp4xx-npe.c +1 -1
@@ -758,7 +758,7 @@ static const struct of_device_id ixp4xx_npe_of_match[] = {static struct platform_driver ixp4xx_npe_driver = { .driver = { .name ="ixp4xx-npe" , - .of_match_table =of_match_ptr (ixp4xx_npe_of_match), + .of_match_table = ixp4xx_npe_of_match, }, .probe = ixp4xx_npe_probe, .remove = ixp4xx_npe_remove,
drivers/spi/spi-amd.c +8 -0
@@ -33,6 +33,7 @@#define AMD_SPI_RX_COUNT_REG 0x4B#define AMD_SPI_STATUS_REG 0x4C +#define AMD_SPI_FIFO_SIZE 70#define AMD_SPI_MEM_SIZE 200/* M_CMD OP codes for SPI */
@@ -270,6 +271,11 @@ static int amd_spi_master_transfer(struct spi_master *master,return 0 ; } +static size_t amd_spi_max_transfer_size (struct spi_device *spi) +{ +return AMD_SPI_FIFO_SIZE ; +} +static int amd_spi_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev;
@@ -302,6 +308,8 @@ static int amd_spi_probe(struct platform_device *pdev) master->flags =SPI_MASTER_HALF_DUPLEX ; master->setup = amd_spi_master_setup; master->transfer_one_message = amd_spi_master_transfer; + master->max_transfer_size = amd_spi_max_transfer_size; + master->max_message_size = amd_spi_max_transfer_size;/* Register the controller with SPI framework */ err =devm_spi_register_master (dev, master);
drivers/tee/tee_core.c +1 -1
@@ -1075,7 +1075,7 @@ EXPORT_SYMBOL_GPL(tee_device_unregister);/** * tee_get_drvdata() - Return driver_data pointer * @teedev: Device containing the driver_data pointer -* @returns the driver_data pointer supplied to tee_register(). +* @returns the driver_data pointer supplied to tee_device_alloc(). */ void *tee_get_drvdata (struct tee_device *teedev) {
drivers/tty/pty.c +2 -12
@@ -111,21 +111,11 @@ static void pty_unthrottle(struct tty_struct *tty)static int pty_write (struct tty_struct *tty,const unsigned char *buf,int c) {struct tty_struct *to = tty->link; -unsigned long flags; -if (tty->flow.stopped) +if (tty->flow.stopped || !c)return 0 ; -if (c >0 ) { -spin_lock_irqsave (&to->port->lock, flags); -/* Stuff the data into the input queue of the other end */ - c =tty_insert_flip_string (to->port, buf, c); -spin_unlock_irqrestore (&to->port->lock, flags); -/* And shovel */ -if (c) -tty_flip_buffer_push (to->port); - } -return c; +return tty_insert_flip_string_and_push_buffer (to->port, buf, c); }/**
drivers/tty/serial/8250/8250_core.c +4 -0
@@ -23,6 +23,7 @@#include <linux/sysrq.h> #include <linux/delay.h> #include <linux/platform_device.h> +#include <linux/pm_runtime.h> #include <linux/tty.h> #include <linux/ratelimit.h> #include <linux/tty_flip.h>
@@ -560,6 +561,9 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) up->port.dev = dev; +if (uart_console_enabled (&up->port)) +pm_runtime_get_sync (up->port.dev); +serial8250_apply_quirks (up);uart_add_one_port (drv, &up->port); }
drivers/tty/serial/8250/8250_port.c +3 -1
@@ -2971,8 +2971,10 @@ static int serial8250_request_std_resource(struct uart_8250_port *up)case UPIO_MEM32BE :case UPIO_MEM16 :case UPIO_MEM : -if (!port->mapbase) +if (!port->mapbase) { + ret = -EINVAL ;break ; + }if (!request_mem_region (port->mapbase, size,"serial" )) { ret = -EBUSY ;
drivers/tty/serial/amba-pl011.c +21 -2
@@ -1339,6 +1339,15 @@ static void pl011_stop_rx(struct uart_port *port)pl011_dma_rx_stop (uap); } +static void pl011_throttle_rx (struct uart_port *port) +{ +unsigned long flags; + +spin_lock_irqsave (&port->lock, flags); +pl011_stop_rx (port); +spin_unlock_irqrestore (&port->lock, flags); +} +static void pl011_enable_ms (struct uart_port *port) { struct uart_amba_port *uap =
@@ -1760,9 +1769,10 @@ static int pl011_allocate_irq(struct uart_amba_port *uap)*/ static void pl011_enable_interrupts (struct uart_amba_port *uap) { +unsigned long flags;unsigned int i; -spin_lock_irq (&uap->port.lock); +spin_lock_irqsave (&uap->port.lock, flags);/* Clear out any spuriously appearing RX interrupts */ pl011_write (UART011_RTIS |UART011_RXIS , uap,REG_ICR );
@@ -1784,7 +1794,14 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap)if (!pl011_dma_rx_running (uap)) uap->im |=UART011_RXIM ;pl011_write (uap->im, uap,REG_IMSC ); -spin_unlock_irq (&uap->port.lock); +spin_unlock_irqrestore (&uap->port.lock, flags); +} + +static void pl011_unthrottle_rx (struct uart_port *port) +{ + struct uart_amba_port *uap = container_of(port, struct uart_amba_port, port); + +pl011_enable_interrupts (uap); }static int pl011_startup (struct uart_port *port)
@@ -2211,6 +2228,8 @@ static const struct uart_ops amba_pl011_pops = { .stop_tx = pl011_stop_tx,
Lines of this file are not shown. View the raw message.
drivers/tty/tty_buffer.c +41 -5
46 lines not on this page · raw message
drivers/vdpa/vdpa_user/vduse_dev.c +37 -23
60 lines not on this page · raw message
include/net/netfilter/nf_conntrack_ecache.h +2 -2
Lines of this file are not shown. View the raw message.
kernel/sysctl.c +31 -26
57 lines not on this page · raw message
net/netfilter/nf_conntrack_core.c +54 -32
86 lines not on this page · raw message
net/netfilter/nf_conntrack_ecache.c +68 -71
139 lines not on this page · raw message
net/netfilter/nf_conntrack_netlink.c +89 -36
125 lines not on this page · raw message
net/netfilter/nf_conntrack_standalone.c +3 -0
Lines of this file are not shown. View the raw message.
net/netfilter/nf_tables_api.c +51 -21
72 lines not on this page · raw message
net/netfilter/nf_tables_trace.c +24 -20
44 lines not on this page · raw message
sound/soc/codecs/tas2764.c +28 -18
46 lines not on this page · raw message
sound/soc/intel/boards/sof_sdw.c +29 -22
51 lines not on this page · raw message
sound/usb/quirks-table.h +248 -0
248 lines not on this page · raw message
tools/testing/selftests/wireguard/qemu/Makefile +2 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/arch/arm.config +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/arch/armeb.config +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/arch/i686.config +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/arch/m68k.config +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/arch/mips.config +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/arch/mipsel.config +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/arch/powerpc.config +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/init.c +11 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.