Skip to contentSkip to conversation

Linux 5.15.56

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Jul 21, 2022 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 5.15.56 kernel.

All users of the 5.15 kernel series must upgrade.

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

thanks,

greg k-h

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

 Documentation/driver-api/firmware/other_interfaces.rst     |    6 
 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/mach/map.h                            |    1 
 arch/arm/include/asm/ptrace.h                              |   26 +
 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/powerpc/sysdev/xive/spapr.c                           |    5 
 arch/sh/include/asm/io.h                                   |    8 
 arch/x86/kernel/head64.c                                   |    2 
 arch/x86/kvm/x86.c                                         |   18 
 arch/x86/mm/init.c                                         |   14 
 drivers/acpi/acpi_video.c                                  |   11 
 drivers/cpufreq/pmac32-cpufreq.c                           |    4 
 drivers/firmware/sysfb.c                                   |   58 ++
 drivers/firmware/sysfb_simplefb.c                          |   16 
 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_execbuffer.c             |   50 ++
 drivers/gpu/drm/i915/gt/intel_gt.c                         |   15 
 drivers/gpu/drm/i915/gt/intel_reset.c                      |   44 +-
 drivers/gpu/drm/i915/gt/selftest_lrc.c                     |    8 
 drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c                  |    2 
 drivers/gpu/drm/i915/gt/uc/intel_huc.c                     |    2 
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c                   |    4 
 drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h                   |   17 
 drivers/gpu/drm/i915/gvt/cmd_parser.c                      |    6 
 drivers/gpu/drm/i915/i915_vma.c                            |    1 
 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                  |    3 
 drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c              |   13 
 drivers/net/ethernet/faraday/ftgmac100.c                   |   15 
 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/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                                   |    2 
 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/pinctrl/aspeed/pinctrl-aspeed.c                    |    4 
 drivers/platform/x86/hp-wmi.c                              |    3 
 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c                     |    7 
 drivers/soc/ixp4xx/ixp4xx-npe.c                            |    2 
 drivers/spi/spi-amd.c                                      |    8 
 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/samsung_tty.c                           |    5 
 drivers/tty/serial/serial_core.c                           |    5 
 drivers/tty/serial/stm32-usart.c                           |    2 
 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/btrfs/check-integrity.c                                 |    2 
 fs/btrfs/extent-tree.c                                     |   19 
 fs/btrfs/extent_io.c                                       |   18 
 fs/btrfs/extent_map.c                                      |    4 
 fs/btrfs/inode.c                                           |   14 
 fs/btrfs/raid56.c                                          |  127 +++---
 fs/btrfs/raid56.h                                          |    8 
 fs/btrfs/reada.c                                           |   26 -
 fs/btrfs/scrub.c                                           |  115 ++---
 fs/btrfs/volumes.c                                         |  267 ++++++-------
 fs/btrfs/volumes.h                                         |   38 +
 fs/btrfs/zoned.c                                           |   25 -
 fs/ceph/addr.c                                             |    6 
 fs/exec.c                                                  |    2 
 fs/ksmbd/transport_tcp.c                                   |    2 
 fs/lockd/svcsubs.c                                         |   14 
 fs/nilfs2/nilfs.h                                          |    3 
 fs/remap_range.c                                           |    3 
 fs/xfs/xfs_bio_io.c                                        |   35 -
 fs/xfs/xfs_fsops.c                                         |    2 
 fs/xfs/xfs_linux.h                                         |    2 
 fs/xfs/xfs_log.c                                           |   58 +-
 fs/xfs/xfs_log_cil.c                                       |   42 --
 fs/xfs/xfs_log_priv.h                                      |    3 
 fs/xfs/xfs_log_recover.c                                   |   24 +
 fs/xfs/xfs_mount.c                                         |   12 
 fs/xfs/xfs_mount.h                                         |   15 
 fs/xfs/xfs_reflink.c                                       |    5 
 fs/xfs/xfs_super.c                                         |    9 
 include/linux/cgroup-defs.h                                |    3 
 include/linux/kexec.h                                      |    6 
 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_tables.h                          |   14 
 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/memory.c                                                |   27 -
 mm/userfaultfd.c                                           |    5 
 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                                            |   16 
 net/ipv4/inetpeer.c                                        |   12 
 net/ipv4/nexthop.c                                         |    5 
 net/ipv4/sysctl_net_ipv4.c                                 |    6 
 net/ipv4/tcp.c                                             |    3 
 net/ipv4/tcp_output.c                                      |    2 
 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/netfilter/nf_log_syslog.c                              |    8 
 net/netfilter/nf_tables_api.c                              |   72 ++-
 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/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/wcd938x.c                                 |   12 
 sound/soc/codecs/wm5110.c                                  |    8 
 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-loader.c                           |    8 
 sound/usb/quirks-table.h                                   |  248 ++++++++++++
 sound/usb/quirks.c                                         |    9 
 191 files changed, 1886 insertions(+), 953 deletions(-)

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()

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

Bruce Chang (1):

      drm/i915/dg2: Add Wa_22011100796

Chanho Park (1):
tty: serial: samsung_tty: set dma burst_size to 1

Charles Keepax (5):
ASoC: wm5110: Fix DRE control
ASoC: dapm: Initialise kcontrol data for mux/demux controls
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

Coiby Xu (1):
ima: force signature verification when CONFIG_KEXEC_SIG is configured

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/uc: correctly track uc_fw init failure

Darrick J. Wong (2):
xfs: only run COW extent recovery when there are no live extents
xfs: don't include bnobt blocks when reserving free block pool

Dave Chinner (3):
fs/remap: constrain dedupe of EOF blocks
xfs: run callbacks before waking waiters in xlog_state_shutdown_callbacks
xfs: drop async cache flushes from CIL commits.

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

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

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 (1):
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

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.15.56

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):
ACPI: video: Fix acpi_video_handles_brightness_key_presses()
ASoC: Intel: bytcr_wm5102: Fix GPIO related probe-ordering problem

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

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 (3):
lockd: set fl_owner when unlocking files
lockd: fix nlm_close_files
ceph: switch netfs read ops to use rreq->inode instead of rreq->mapping->host

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()

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 (3):
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

Keith Busch (1):
nvme-pci: phison e16 has bogus namespace ids

Kris Bahnsen (1):
ARM: dts: imx6qdl-ts7970: Fix ngpio typo and count

Kuniyuki Iwashima (23):
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().
icmp: Fix data-races around sysctl_icmp_echo_enable_probe.
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 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 (1):
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

Mario Kleiner (1):
drm/amd/display: Only use depth 36 bpp linebuffers on DCN display engines.

Mark Brown (2):
ASoC: ops: Fix off by one in range control validation
ASoC: wcd938x: Fix event generation for some controls

Martin Povišer (2):
ASoC: tas2764: Add post reset delays
ASoC: tas2764: Fix and extend FSYNC polarity handling

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

Muchun Song (1):
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

Parav Pandit (1):
vduse: Tie vduse mgmtdev and its device

Paul Blakey (1):
net/mlx5e: Fix enabling sriov while tc nic rules are offloaded

Pavan Chebbi (1):
bnxt_en: Fix bnxt_refclk_read()

Peter Ujfalusi (3):
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-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

Qu Wenruo (1):
btrfs: rename btrfs_bio to btrfs_io_context

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

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

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 Hellström (1):
drm/i915: Require the vm mutex for i915_vma_bind()

Thomas Zimmermann (1):
drm/aperture: Run fbdev removal before internal helpers

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"

Yangxi Xiang (1):
vt: fix memory overlapping when deleting chars in the buffer

Yefim Barashkin (1):
drm/amd/pm: Prevent divide by zero

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

author maintainer
#1 lore raw
Documentation/driver-api/firmware/other_interfaces.rst +6 -0
index b81794e0cfbb..06ac89adaafb 100644
@@ -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/networking/ip-sysctl.rst +2 -2
index d91ab28718d4..b8b67041f955 100644
@@ -1063,7 +1063,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.
@@ -1157,7 +1157,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
index c95f0f59885f..2ce44168b1b5 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 15
-SUBLEVEL = 55
+SUBLEVEL = 56
 EXTRAVERSION =
 NAME = Trick or Treat
 
arch/arm/boot/dts/imx6qdl-ts7970.dtsi +1 -1
index fded07f370b3..d6ba4b2a60f6 100644
@@ -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
index de88eb484718..4c87c2aa8fc8 100644
@@ -1125,7 +1125,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
index a9b65b3bfda5..e0d483318798 100644
@@ -553,7 +553,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
index f19ed981da9d..3706216ffb40 100644
@@ -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/mach/map.h +1 -0
index 92282558caf7..2b8970d8e5a2 100644
@@ -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
index 93051e2f402c..1408a6a15d0e 100644
@@ -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/alignment.c +3 -0
index ea81e89e7740..bcefe3f51744 100644
@@ -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
index 5e2be37a198e..cd17e324aa51 100644
@@ -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
index fb9f3eb6bf48..8bc7a2d6d6c7 100644
@@ -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
index 973173598992..facc889d05ee 100644
@@ -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
index 66023d553524..d084c33d5ca8 100644
@@ -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
index e8907d3fe2d1..e510a6961cf9 100644
@@ -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/powerpc/sysdev/xive/spapr.c +3 -2
index a82f32fbe772..583b2c6df390 100644
@@ -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 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/sh/include/asm/io.h +6 -2
index cf9a3ec32406..fba90e670ed4 100644
@@ -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/kernel/head64.c +2 -0
index de01903c3735..5036104d5470 100644
@@ -418,6 +418,8 @@ static 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
index 8974884ef2ad..732c3f2f8ded 100644
@@ -8713,15 +8713,17 @@ static int kvm_pv_clock_pairing(struct kvm_vcpu *vcpu, gpa_t paddr,
  */
 static void kvm_pv_kick_cpu_op(struct kvm *kvm, unsigned long flags, 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
index 23a14d82e783..0e3667e529ab 100644
@@ -78,10 +78,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)
drivers/acpi/acpi_video.c +7 -4
index 007deb3a8ea3..390af28f6faf 100644
@@ -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)) {
@@ -2255,7 +2258,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(&register_count_mutex);
 }
@@ -2277,7 +2280,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
index 4f20c6a9108d..8e41fe9ee870 100644
@@ -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
index 757cc8b9f3de..eac51c2a27ba 100644
@@ -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/gpu/drm/amd/display/dc/core/dc_resource.c +6 -5
index 82f1f27baaf3..188556e41b9d 100644
@@ -1062,12 +1062,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
index e6c93396434f..614c3d049514 100644
@@ -1235,6 +1235,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
index 74bd4a76b253..059fd71424f6 100644
@@ -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
index 8d13d7b26a25..2a20487effcc 100644
@@ -817,6 +817,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_execbuffer.c +49 -1

65 lines not on this page · raw message

drivers/gpu/drm/i915/gt/intel_gt.c +14 -1
index e1e1d17d49fd..3a76000d15bf 100644
@@ -970,6 +970,20 @@ void intel_gt_invalidate_tlbs(struct intel_gt *gt)
 	mutex_lock(&gt->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,
@@ -984,7 +998,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 +36 -8

83 lines not on this page · raw message

drivers/gpu/drm/i915/gt/selftest_lrc.c +4 -4
index b0977a3b699b..bc2950fbbaf9 100644
@@ -153,8 +153,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);
@@ -329,8 +329,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_guc_fw.c +1 -1
index 76fe766ad1bc..bb951b8d5203 100644
@@ -159,6 +159,6 @@ int intel_guc_fw_upload(struct intel_guc *guc)
 	return 0;
 
 out:
-	intel_uc_fw_change_status(&guc->fw, INTEL_UC_FIRMWARE_FAIL);
+	intel_uc_fw_change_status(&guc->fw, INTEL_UC_FIRMWARE_LOAD_FAIL);
 	return ret;
 }
drivers/gpu/drm/i915/gt/uc/intel_huc.c +1 -1
index fc5387b410a2..9ee22ac92540 100644
@@ -191,7 +191,7 @@ int intel_huc_auth(struct intel_huc *huc)
 
 fail:
 	i915_probe_error(gt->i915, "HuC: Authentication failed %d\n", ret);
-	intel_uc_fw_change_status(&huc->fw, INTEL_UC_FIRMWARE_FAIL);
+	intel_uc_fw_change_status(&huc->fw, INTEL_UC_FIRMWARE_LOAD_FAIL);
 	return ret;
 }
 
drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c +2 -2
index 3a16d08608a5..6be7fbf9d18a 100644
@@ -526,7 +526,7 @@ int intel_uc_fw_upload(struct intel_uc_fw *uc_fw, u32 dst_offset, u32 dma_flags)
 	i915_probe_error(gt->i915, "Failed to load %s firmware %s (%d)\n",
 			 intel_uc_fw_type_repr(uc_fw->type), uc_fw->path,
 			 err);
-	intel_uc_fw_change_status(uc_fw, INTEL_UC_FIRMWARE_FAIL);
+	intel_uc_fw_change_status(uc_fw, INTEL_UC_FIRMWARE_LOAD_FAIL);
 	return err;
 }
 
@@ -544,7 +544,7 @@ int intel_uc_fw_init(struct intel_uc_fw *uc_fw)
 	if (err) {
 		DRM_DEBUG_DRIVER("%s fw pin-pages err=%d\n",
 				 intel_uc_fw_type_repr(uc_fw->type), err);
-		intel_uc_fw_change_status(uc_fw, INTEL_UC_FIRMWARE_FAIL);
+		intel_uc_fw_change_status(uc_fw, INTEL_UC_FIRMWARE_INIT_FAIL);
 	}
 
 	return err;
drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h +11 -6
index 99bb1fe1af66..c1a7246fb7d6 100644
@@ -31,11 +31,12 @@ struct intel_gt;
  * |            |    MISSING <--/    |    \--> ERROR                |
  * |   fetch    |                    V                              |
  * |            |                 AVAILABLE                         |
- * +------------+-                   |                             -+
+ * +------------+-                   |   \                         -+
+ * |            |                    |    \--> INIT FAIL            |
  * |   init     |                    V                              |
  * |            |        /------> LOADABLE <----<-----------\       |
  * +------------+-       \         /    \        \           \     -+
- * |            |         FAIL <--<      \--> TRANSFERRED     \     |
+ * |            |    LOAD FAIL <--<      \--> TRANSFERRED     \     |
  * |   upload   |                  \           /   \          /     |
  * |            |                   \---------/     \--> RUNNING    |
  * +------------+---------------------------------------------------+
@@ -49,8 +50,9 @@ enum intel_uc_fw_status {
 	INTEL_UC_FIRMWARE_MISSING, /* blob not found on the system */
 	INTEL_UC_FIRMWARE_ERROR, /* invalid format or version */
 	INTEL_UC_FIRMWARE_AVAILABLE, /* blob found and copied in mem */
+	INTEL_UC_FIRMWARE_INIT_FAIL, /* failed to prepare fw objects for load */
 	INTEL_UC_FIRMWARE_LOADABLE, /* all fw-required objects are ready */
-	INTEL_UC_FIRMWARE_FAIL, /* failed to xfer or init/auth the fw */
+	INTEL_UC_FIRMWARE_LOAD_FAIL, /* failed to xfer or init/auth the fw */
 	INTEL_UC_FIRMWARE_TRANSFERRED, /* dma xfer done */
 	INTEL_UC_FIRMWARE_RUNNING /* init/auth done */
 };
@@ -121,10 +123,12 @@ const char *intel_uc_fw_status_repr(enum intel_uc_fw_status status)
 		return "ERROR";
 	case INTEL_UC_FIRMWARE_AVAILABLE:
 		return "AVAILABLE";
+	case INTEL_UC_FIRMWARE_INIT_FAIL:
+		return "INIT FAIL";
 	case INTEL_UC_FIRMWARE_LOADABLE:
 		return "LOADABLE";
-	case INTEL_UC_FIRMWARE_FAIL:
-		return "FAIL";
+	case INTEL_UC_FIRMWARE_LOAD_FAIL:
+		return "LOAD FAIL";
 	case INTEL_UC_FIRMWARE_TRANSFERRED:
 		return "TRANSFERRED";
 	case INTEL_UC_FIRMWARE_RUNNING:
@@ -146,7 +150,8 @@ static inline int intel_uc_fw_status_to_error(enum intel_uc_fw_status status)
 		return -ENOENT;
 	case INTEL_UC_FIRMWARE_ERROR:
 		return -ENOEXEC;
-	case INTEL_UC_FIRMWARE_FAIL:
+	case INTEL_UC_FIRMWARE_INIT_FAIL:
+	case INTEL_UC_FIRMWARE_LOAD_FAIL:
 		return -EIO;
 	case INTEL_UC_FIRMWARE_SELECTED:
 		return -ESTALE;
drivers/gpu/drm/i915/gvt/cmd_parser.c +3 -3
index c4118b808268..11971ee929f8 100644
@@ -3115,9 +3115,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_vma.c +1 -0
index dfd20060812b..3df304edabc7 100644
@@ -376,6 +376,7 @@ int i915_vma_bind(struct i915_vma *vma,
 	u32 bind_flags;
 	u32 vma_flags;
 
+	lockdep_assert_held(&vma->vm->mutex);
 	GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
 	GEM_BUG_ON(vma->size > vma->node.size);
 
drivers/gpu/drm/panfrost/panfrost_drv.c +2 -2
index 1ffaef5ec5ff..de533f372764 100644
@@ -422,8 +422,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
index dfe5f1d29763..c0189cc9a2f1 100644
@@ -501,7 +501,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
index 03d2366118dd..d5f1fabc45d7 100644
@@ -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
index 262b783d1df8..a2e751f0ae0b 100644
@@ -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
index 831833911a52..8647125d60ae 100644
@@ -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 +2 -1
index cb5314945589..6962abe2358b 100644
@@ -9806,7 +9806,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 if (bp->fw_health && !bp->fw_health->status_reliable)
 		bnxt_try_map_fw_health_reg(bp);
drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c +11 -2
index 62a931de5b1a..a78cc65a38f2 100644
@@ -61,14 +61,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/faraday/ftgmac100.c +14 -1
index 0b833572205f..4a2dadb91f02 100644
@@ -1746,6 +1746,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;
@@ -1865,7 +1878,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/mellanox/mlx5/core/en_accel/ktls_rx.c +1 -2
index 15711814d2d2..d92b97c56f4c 100644
@@ -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
index 9ad3459fb63a..dadb71081ed0 100644
@@ -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
index e1dd17019030..5a5c6eda29d2 100644
@@ -614,7 +614,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
index 7fd33b356cc8..1544d4c2c636 100644
@@ -429,6 +429,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,
@@ -521,6 +541,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)
@@ -622,6 +643,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)) {
@@ -631,18 +659,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))) {
@@ -664,6 +683,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)
@@ -1033,5 +1053,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
index 0c4c743ca31e..3a2575dc5355 100644
@@ -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/sfc/ef10.c +3 -0
index c1cd1c97f09d..056c24ec1249 100644
@@ -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
index 752d6406f07e..f488461a23d1 100644
@@ -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
index bc91fd867dcd..358fc26f8d1f 100644
@@ -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
index 9a6d819b84ae..378b4dd826bb 100644
@@ -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
index ea9d073e87fa..901571c2626a 100644
@@ -2467,7 +2467,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);
 	}
 
 	return ret;
@@ -2514,6 +2513,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;
 
@@ -2530,6 +2530,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];
 
@@ -2542,25 +2546,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
index 90dfefc1f5f8..028a5df5c538 100644
@@ -2504,7 +2504,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
index dbac4c03d21a..a0335407be42 100644
@@ -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
index e8f3b35afbee..ae2ba08d8ac3 100644
@@ -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 +2 -0
index 19054b791c67..29b56ea01132 100644
@@ -4385,6 +4385,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
index 72bcd7e5716e..75a7e7baa1fc 100644
@@ -495,6 +495,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
index c3db9f12dac3..d820131d39b2 100644
@@ -3337,7 +3337,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
index d51f52e296f5..2db9c166a1b7 100644
@@ -1049,6 +1049,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);
@@ -2230,9 +2238,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);
 	blk_mq_quiesce_queue(ctrl->ctrl.admin_q);
 	if (shutdown)
@@ -2282,6 +2287,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
index 10882d3d554c..20138e132558 100644
@@ -1162,8 +1162,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;
@@ -2164,9 +2163,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);
 	blk_mq_quiesce_queue(ctrl->admin_q);
 	if (shutdown)
@@ -2206,6 +2202,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);
@@ -2529,6 +2531,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/pinctrl/aspeed/pinctrl-aspeed.c +2 -2
index c94e24aadf92..83d47ff1cea8 100644
@@ -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/platform/x86/hp-wmi.c +3 -0
index 027a1467d009..1cd168e32810 100644
@@ -63,6 +63,7 @@ enum hp_wmi_event_ids {
 	HPWMI_BACKLIT_KB_BRIGHTNESS	= 0x0D,
 	HPWMI_PEAKSHIFT_PERIOD		= 0x0F,
 	HPWMI_BATTERY_CHARGE_PERIOD	= 0x10,
+	HPWMI_SANITIZATION_MODE		= 0x17,
 };
 
 struct bios_args {
@@ -638,6 +639,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/scsi/hisi_sas/hisi_sas_v3_hw.c +7 -0
index 1f5e0688c0c8..15c7451fb30f 100644
@@ -2758,6 +2758,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;
@@ -2775,6 +2776,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/soc/ixp4xx/ixp4xx-npe.c +1 -1
index f490c4ca51f5..a0159805d061 100644
@@ -743,7 +743,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
index 3cf76096a76d..39dbe9903da2 100644
@@ -28,6 +28,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 */
@@ -245,6 +246,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;
@@ -275,6 +281,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/tty/serial/8250/8250_core.c +4 -0
index 1ce193daea7f..30b7890645ac 100644
@@ -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>
@@ -561,6 +562,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
index df9731f73746..4f66825abe67 100644
@@ -2982,8 +2982,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
index 0e908061b5d7..300a8bbb4b80 100644
@@ -1372,6 +1372,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 =
@@ -1793,9 +1802,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);
@@ -1817,7 +1827,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)
@@ -2245,6 +2262,8 @@ static const struct uart_ops amba_pl011_pops = {
 	.stop_tx	= pl011_stop_tx,
 	.start_tx	= pl011_start_tx,
 	.stop_rx	= pl011_stop_rx,
+	.throttle	= pl011_throttle_rx,
+	.unthrottle	= pl011_unthrottle_rx,
 	.enable_ms	= pl011_enable_ms,
 	.break_ctl	= pl011_break_ctl,
 	.startup	= pl011_startup,
drivers/tty/serial/samsung_tty.c +2 -3
index 319533b3c32a..f460b47ff6f2 100644
@@ -378,8 +378,7 @@ static void enable_tx_dma(struct s3c24xx_uart_port *ourport)
 	/* Enable tx dma mode */
 	ucon = rd_regl(port, S3C2410_UCON);
 	ucon &= ~(S3C64XX_UCON_TXBURST_MASK | S3C64XX_UCON_TXMODE_MASK);
-	ucon |= (dma_get_cache_alignment() >= 16) ?
-		S3C64XX_UCON_TXBURST_16 : S3C64XX_UCON_TXBURST_1;
+	ucon |= S3C64XX_UCON_TXBURST_1;
 	ucon |= S3C64XX_UCON_TXMODE_DMA;
 	wr_regl(port,  S3C2410_UCON, ucon);
 
@@ -675,7 +674,7 @@ static void enable_rx_dma(struct s3c24xx_uart_port *ourport)
 			S3C64XX_UCON_DMASUS_EN |
 			S3C64XX_UCON_TIMEOUT_EN |
 			S3C64XX_UCON_RXMODE_MASK);
-	ucon |= S3C64XX_UCON_RXBURST_16 |
+	ucon |= S3C64XX_UCON_RXBURST_1 |
 			0xf << S3C64XX_UCON_TIMEOUT_SHIFT |
 			S3C64XX_UCON_EMPTYINT_EN |
 			S3C64XX_UCON_TIMEOUT_EN |
drivers/tty/serial/serial_core.c +0 -5
index 4d3ad4c6c60f..82ddbb92d07d 100644
@@ -1912,11 +1912,6 @@ static int uart_proc_show(struct seq_file *m, void *v)
 }
 #endif
 
-static inline bool uart_console_enabled(struct uart_port *port)
-{
-	return uart_console(port) && (port->cons->flags & CON_ENABLED);
-}
-
 static void uart_port_spin_lock_init(struct uart_port *port)
 {
 	spin_lock_init(&port->lock);
drivers/tty/serial/stm32-usart.c +2 -0
index 10e9f983de62..fc166cc2c856 100644
@@ -71,6 +71,8 @@ static void stm32_usart_config_reg_rs485(u32 *cr1, u32 *cr3, u32 delay_ADE,
 	*cr3 |= USART_CR3_DEM;
 	over8 = *cr1 & USART_CR1_OVER8;
 
+	*cr1 &= ~(USART_CR1_DEDT_MASK | USART_CR1_DEAT_MASK);
+
 	if (over8)
 		rs485_deat_dedt = delay_ADE * baud * 8;
 	else
drivers/tty/vt/vt.c +1 -1
index 7359c3e80d63..55283a7f973f 100644
@@ -855,7 +855,7 @@ static void delete_char(struct vc_data *vc, unsigned int nr)
 	unsigned short *p = (unsigned short *) vc->vc_pos;
 
 	vc_uniscr_delete(vc, nr);
-	scr_memcpyw(p, p + nr, (vc->vc_cols - vc->state.x - nr) * 2);
+	scr_memmovew(p, p + nr, (vc->vc_cols - vc->state.x - nr) * 2);
 	scr_memsetw(p + vc->vc_cols - vc->state.x - nr, vc->vc_video_erase_char,
 			nr * 2);
 	vc->vc_need_wrap = 0;
drivers/usb/dwc3/gadget.c +3 -1
index 99d0372ed840..e534b98205ca 100644
@@ -4149,7 +4149,6 @@ static irqreturn_t dwc3_process_event_buf(struct dwc3_event_buffer *evt)
 	}
 
 	evt->count = 0;
-	evt->flags &= ~DWC3_EVENT_PENDING;
 	ret = IRQ_HANDLED;
 
 	/* Unmask interrupt */
@@ -4162,6 +4161,9 @@ static irqreturn_t dwc3_process_event_buf(struct dwc3_event_buffer *evt)
 		dwc3_writel(dwc->regs, DWC3_DEV_IMOD(0), dwc->imod_interval);
 	}
 
+	/* Keep the clearing of DWC3_EVENT_PENDING at the end */
+	evt->flags &= ~DWC3_EVENT_PENDING;
+
 	return ret;
 }
 
drivers/usb/serial/ftdi_sio.c +3 -0
index 7e852561d55c..e2a8c33f0cae 100644
@@ -1023,6 +1023,9 @@ static const struct usb_device_id id_table_combined[] = {
 	{ USB_DEVICE(FTDI_VID, CHETCO_SEASMART_DISPLAY_PID) },
 	{ USB_DEVICE(FTDI_VID, CHETCO_SEASMART_LITE_PID) },
 	{ USB_DEVICE(FTDI_VID, CHETCO_SEASMART_ANALOG_PID) },
+	/* Belimo Automation devices */
+	{ USB_DEVICE(FTDI_VID, BELIMO_ZTH_PID) },
+	{ USB_DEVICE(FTDI_VID, BELIMO_ZIP_PID) },
 	/* ICP DAS I-756xU devices */
 	{ USB_DEVICE(ICPDAS_VID, ICPDAS_I7560U_PID) },
 	{ USB_DEVICE(ICPDAS_VID, ICPDAS_I7561U_PID) },
drivers/usb/serial/ftdi_sio_ids.h +6 -0
index d1a9564697a4..4e92c165c86b 100644
@@ -1568,6 +1568,12 @@
 #define CHETCO_SEASMART_LITE_PID	0xA5AE /* SeaSmart Lite USB Adapter */
 #define CHETCO_SEASMART_ANALOG_PID	0xA5AF /* SeaSmart Analog Adapter */
 
+/*
+ * Belimo Automation
+ */
+#define BELIMO_ZTH_PID			0x8050
+#define BELIMO_ZIP_PID			0xC811
+
 /*
  * Unjo AB
  */
drivers/usb/typec/class.c +1 -0
index aeef453aa658..ff6c14d7b1a8 100644
@@ -1718,6 +1718,7 @@ void typec_set_pwr_opmode(struct typec_port *port,
 			partner->usb_pd = 1;
 			sysfs_notify(&partner_dev->kobj, NULL,
 				     "supports_usb_power_delivery");
+			kobject_uevent(&partner_dev->kobj, KOBJ_CHANGE);
 		}
 		put_device(partner_dev);
 	}
drivers/vdpa/mlx5/net/mlx5_vnet.c +20 -11
index 467a349dc26c..e748c00789f0 100644
@@ -1898,7 +1898,6 @@ static int verify_driver_features(struct mlx5_vdpa_dev *mvdev, u64 features)
 static int setup_virtqueues(struct mlx5_vdpa_dev *mvdev)
 {
 	struct mlx5_vdpa_net *ndev = to_mlx5_vdpa_ndev(mvdev);
-	struct mlx5_control_vq *cvq = &mvdev->cvq;
 	int err;
 	int i;
 
@@ -1908,16 +1907,6 @@ static int setup_virtqueues(struct mlx5_vdpa_dev *mvdev)
 			goto err_vq;
 	}
 
-	if (mvdev->actual_features & BIT_ULL(VIRTIO_NET_F_CTRL_VQ)) {
-		err = vringh_init_iotlb(&cvq->vring, mvdev->actual_features,
-					MLX5_CVQ_MAX_ENT, false,
-					(struct vring_desc *)(uintptr_t)cvq->desc_addr,
-					(struct vring_avail *)(uintptr_t)cvq->driver_addr,
-					(struct vring_used *)(uintptr_t)cvq->device_addr);
-		if (err)
-			goto err_vq;
-	}
-
 	return 0;
 
 err_vq:
@@ -2184,6 +2173,21 @@ static void clear_vqs_ready(struct mlx5_vdpa_net *ndev)
 	ndev->mvdev.cvq.ready = false;
 }
 
+static int setup_cvq_vring(struct mlx5_vdpa_dev *mvdev)
+{
+	struct mlx5_control_vq *cvq = &mvdev->cvq;
+	int err = 0;
+
+	if (mvdev->actual_features & BIT_ULL(VIRTIO_NET_F_CTRL_VQ))
+		err = vringh_init_iotlb(&cvq->vring, mvdev->actual_features,
+					MLX5_CVQ_MAX_ENT, false,
+					(struct vring_desc *)(uintptr_t)cvq->desc_addr,
+					(struct vring_avail *)(uintptr_t)cvq->driver_addr,
+					(struct vring_used *)(uintptr_t)cvq->device_addr);
+
+	return err;
+}
+
 static void mlx5_vdpa_set_status(struct vdpa_device *vdev, u8 status)
 {
 	struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev);
@@ -2194,6 +2198,11 @@ static void mlx5_vdpa_set_status(struct vdpa_device *vdev, u8 status)
 
 	if ((status ^ ndev->mvdev.status) & VIRTIO_CONFIG_S_DRIVER_OK) {
 		if (status & VIRTIO_CONFIG_S_DRIVER_OK) {
+			err = setup_cvq_vring(mvdev);
+			if (err) {
+				mlx5_vdpa_warn(mvdev, "failed to setup control VQ vring\n");
+				goto err_setup;
+			}
 			err = setup_driver(mvdev);
 			if (err) {
 				mlx5_vdpa_warn(mvdev, "failed to setup driver\n");
drivers/vdpa/vdpa_user/vduse_dev.c +37 -23

94 lines not on this page · raw message

drivers/video/fbdev/core/fbmem.c +12 -0
index 6d7868cc1fca..528c87ff14d8 100644
@@ -19,6 +19,7 @@
 #include <linux/kernel.h>
 #include <linux/major.h>
 #include <linux/slab.h>
+#include <linux/sysfb.h>
 #include <linux/mm.h>
 #include <linux/mman.h>
 #include <linux/vt.h>
@@ -1786,6 +1787,17 @@ int remove_conflicting_framebuffers(struct apertures_struct *a,
 		do_free = true;
 	}
 
+	/*
+	 * If a driver asked to unregister a platform device registered by
+	 * sysfb, then can be assumed that this is a driver for a display
+	 * that is set up by the system firmware and has a generic driver.
+	 *
+	 * Drivers for devices that don't have a generic driver will never
+	 * ask for this, so let's assume that a real driver for the display
+	 * was already probed and prevent sysfb to register devices later.
+	 */
+	sysfb_disable();
+
 	mutex_lock(&registration_lock);
 	do_remove_conflicting_framebuffers(a, name, primary);
 	mutex_unlock(&registration_lock);
drivers/virtio/virtio_mmio.c +26 -0
index 1dd396d4bebb..fe696aafaed8 100644
@@ -62,6 +62,7 @@
 #include <linux/list.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 #include <linux/virtio.h>
@@ -543,6 +544,28 @@ static const struct virtio_config_ops virtio_mmio_config_ops = {
 	.get_shm_region = vm_get_shm_region,
 };
 
+#ifdef CONFIG_PM_SLEEP
+static int virtio_mmio_freeze(struct device *dev)
+{
+	struct virtio_mmio_device *vm_dev = dev_get_drvdata(dev);
+
+	return virtio_device_freeze(&vm_dev->vdev);
+}
+
+static int virtio_mmio_restore(struct device *dev)
+{
+	struct virtio_mmio_device *vm_dev = dev_get_drvdata(dev);
+
+	if (vm_dev->version == 1)
+		writel(PAGE_SIZE, vm_dev->base + VIRTIO_MMIO_GUEST_PAGE_SIZE);
+
+	return virtio_device_restore(&vm_dev->vdev);
+}
+
+static const struct dev_pm_ops virtio_mmio_pm_ops = {
+	SET_SYSTEM_SLEEP_PM_OPS(virtio_mmio_freeze, virtio_mmio_restore)
+};
+#endif
 
 static void virtio_mmio_release_dev(struct device *_d)
 {
@@ -786,6 +809,9 @@ static struct platform_driver virtio_mmio_driver = {
 		.name	= "virtio-mmio",
 		.of_match_table	= virtio_mmio_match,
 		.acpi_match_table = ACPI_PTR(virtio_mmio_acpi_match),
+#ifdef CONFIG_PM_SLEEP
+		.pm	= &virtio_mmio_pm_ops,
+#endif
 	},
 };
 
drivers/xen/gntdev.c +4 -2
index 4b56c39f766d..84b143eef395 100644
@@ -396,13 +396,15 @@ static void __unmap_grant_pages_done(int result,
 	unsigned int offset = data->unmap_ops - map->unmap_ops;
 
 	for (i = 0; i < data->count; i++) {
-		WARN_ON(map->unmap_ops[offset+i].status);
+		WARN_ON(map->unmap_ops[offset + i].status != GNTST_okay &&
+			map->unmap_ops[offset + i].handle != INVALID_GRANT_HANDLE);
 		pr_debug("unmap handle=%d st=%d\n",
 			map->unmap_ops[offset+i].handle,
 			map->unmap_ops[offset+i].status);
 		map->unmap_ops[offset+i].handle = INVALID_GRANT_HANDLE;
 		if (use_ptemod) {
-			WARN_ON(map->kunmap_ops[offset+i].status);
+			WARN_ON(map->kunmap_ops[offset + i].status != GNTST_okay &&
+				map->kunmap_ops[offset + i].handle != INVALID_GRANT_HANDLE);
 			pr_debug("kunmap handle=%u st=%d\n",
 				 map->kunmap_ops[offset+i].handle,
 				 map->kunmap_ops[offset+i].status);
fs/btrfs/check-integrity.c +1 -1
index 86816088927f..81b11124b67a 100644
@@ -1455,7 +1455,7 @@ static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len,
 	struct btrfs_fs_info *fs_info = state->fs_info;
 	int ret;
 	u64 length;
-	struct btrfs_bio *multi = NULL;
+	struct btrfs_io_context *multi = NULL;
 	struct btrfs_device *device;
 
 	length = len;
fs/btrfs/extent-tree.c +9 -10
index f11616f61dd6..e3514f9a4e8d 100644
@@ -1266,7 +1266,7 @@ static int btrfs_issue_discard(struct block_device *bdev, u64 start, u64 len,
 	return ret;
 }
 
-static int do_discard_extent(struct btrfs_bio_stripe *stripe, u64 *bytes)
+static int do_discard_extent(struct btrfs_io_stripe *stripe, u64 *bytes)
 {
 	struct btrfs_device *dev = stripe->dev;
 	struct btrfs_fs_info *fs_info = dev->fs_info;
@@ -1313,22 +1313,21 @@ int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,
 	u64 discarded_bytes = 0;
 	u64 end = bytenr + num_bytes;
 	u64 cur = bytenr;
-	struct btrfs_bio *bbio = NULL;
-
+	struct btrfs_io_context *bioc = NULL;
 
 	/*
-	 * Avoid races with device replace and make sure our bbio has devices
+	 * Avoid races with device replace and make sure our bioc has devices
 	 * associated to its stripes that don't go away while we are discarding.
 	 */
 	btrfs_bio_counter_inc_blocked(fs_info);
 	while (cur < end) {
-		struct btrfs_bio_stripe *stripe;
+		struct btrfs_io_stripe *stripe;
 		int i;
 
 		num_bytes = end - cur;
 		/* Tell the block device(s) that the sectors can be discarded */
 		ret = btrfs_map_block(fs_info, BTRFS_MAP_DISCARD, cur,
-				      &num_bytes, &bbio, 0);
+				      &num_bytes, &bioc, 0);
 		/*
 		 * Error can be -ENOMEM, -ENOENT (no such chunk mapping) or
 		 * -EOPNOTSUPP. For any such error, @num_bytes is not updated,
@@ -1337,8 +1336,8 @@ int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,
 		if (ret < 0)
 			goto out;
 
-		stripe = bbio->stripes;
-		for (i = 0; i < bbio->num_stripes; i++, stripe++) {
+		stripe = bioc->stripes;
+		for (i = 0; i < bioc->num_stripes; i++, stripe++) {
 			u64 bytes;
 			struct btrfs_device *device = stripe->dev;
 
@@ -1361,7 +1360,7 @@ int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,
 				 * And since there are two loops, explicitly
 				 * go to out to avoid confusion.
 				 */
-				btrfs_put_bbio(bbio);
+				btrfs_put_bioc(bioc);
 				goto out;
 			}
 
@@ -1372,7 +1371,7 @@ int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,
 			 */
 			ret = 0;
 		}
-		btrfs_put_bbio(bbio);
+		btrfs_put_bioc(bioc);
 		cur += num_bytes;
 	}
 out:
fs/btrfs/extent_io.c +9 -9
index 059bd0753e27..b791e280af0c 100644
@@ -2290,7 +2290,7 @@ int repair_io_failure(struct btrfs_fs_info *fs_info, u64 ino, u64 start,
 	struct btrfs_device *dev;
 	u64 map_length = 0;
 	u64 sector;
-	struct btrfs_bio *bbio = NULL;
+	struct btrfs_io_context *bioc = NULL;
 	int ret;
 
 	ASSERT(!(fs_info->sb->s_flags & SB_RDONLY));
@@ -2304,7 +2304,7 @@ int repair_io_failure(struct btrfs_fs_info *fs_info, u64 ino, u64 start,
 	map_length = length;
 
 	/*
-	 * Avoid races with device replace and make sure our bbio has devices
+	 * Avoid races with device replace and make sure our bioc has devices
 	 * associated to its stripes that don't go away while we are doing the
 	 * read repair operation.
 	 */
@@ -2317,28 +2317,28 @@ int repair_io_failure(struct btrfs_fs_info *fs_info, u64 ino, u64 start,
 		 * stripe's dev and sector.
 		 */
 		ret = btrfs_map_block(fs_info, BTRFS_MAP_READ, logical,
-				      &map_length, &bbio, 0);
+				      &map_length, &bioc, 0);
 		if (ret) {
 			btrfs_bio_counter_dec(fs_info);
 			bio_put(bio);
 			return -EIO;
 		}
-		ASSERT(bbio->mirror_num == 1);
+		ASSERT(bioc->mirror_num == 1);
 	} else {
 		ret = btrfs_map_block(fs_info, BTRFS_MAP_WRITE, logical,
-				      &map_length, &bbio, mirror_num);
+				      &map_length, &bioc, mirror_num);
 		if (ret) {
 			btrfs_bio_counter_dec(fs_info);
 			bio_put(bio);
 			return -EIO;
 		}
-		BUG_ON(mirror_num != bbio->mirror_num);
+		BUG_ON(mirror_num != bioc->mirror_num);
 	}
 
-	sector = bbio->stripes[bbio->mirror_num - 1].physical >> 9;
+	sector = bioc->stripes[bioc->mirror_num - 1].physical >> 9;
 	bio->bi_iter.bi_sector = sector;
-	dev = bbio->stripes[bbio->mirror_num - 1].dev;
-	btrfs_put_bbio(bbio);
+	dev = bioc->stripes[bioc->mirror_num - 1].dev;
+	btrfs_put_bioc(bioc);
 	if (!dev || !dev->bdev ||
 	    !test_bit(BTRFS_DEV_STATE_WRITEABLE, &dev->dev_state)) {
 		btrfs_bio_counter_dec(fs_info);
fs/btrfs/extent_map.c +2 -2
index 4a8e02f7b6c7..5a36add21305 100644
@@ -360,7 +360,7 @@ static void extent_map_device_set_bits(struct extent_map *em, unsigned bits)
 	int i;
 
 	for (i = 0; i < map->num_stripes; i++) {
-		struct btrfs_bio_stripe *stripe = &map->stripes[i];
+		struct btrfs_io_stripe *stripe = &map->stripes[i];
 		struct btrfs_device *device = stripe->dev;
 
 		set_extent_bits_nowait(&device->alloc_state, stripe->physical,
@@ -375,7 +375,7 @@ static void extent_map_device_clear_bits(struct extent_map *em, unsigned bits)
 	int i;
 
 	for (i = 0; i < map->num_stripes; i++) {
-		struct btrfs_bio_stripe *stripe = &map->stripes[i];
+		struct btrfs_io_stripe *stripe = &map->stripes[i];
 		struct btrfs_device *device = stripe->dev;
 
 		__clear_extent_bit(&device->alloc_state, stripe->physical,
fs/btrfs/inode.c +13 -1
index d644dcaf3004..ea7262050790 100644
@@ -7957,7 +7957,19 @@ static int btrfs_dio_iomap_begin(struct inode *inode, loff_t start,
 	if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags) ||
 	    em->block_start == EXTENT_MAP_INLINE) {
 		free_extent_map(em);
-		ret = -ENOTBLK;
+		/*
+		 * If we are in a NOWAIT context, return -EAGAIN in order to
+		 * fallback to buffered IO. This is not only because we can
+		 * block with buffered IO (no support for NOWAIT semantics at
+		 * the moment) but also to avoid returning short reads to user
+		 * space - this happens if we were able to read some data from
+		 * previous non-compressed extents and then when we fallback to
+		 * buffered IO, at btrfs_file_read_iter() by calling
+		 * filemap_read(), we fail to fault in pages for the read buffer,
+		 * in which case filemap_read() returns a short read (the number
+		 * of bytes previously read is > 0, so it does not return -EFAULT).
+		 */
+		ret = (flags & IOMAP_NOWAIT) ? -EAGAIN : -ENOTBLK;
 		goto unlock_err;
 	}
 
fs/btrfs/raid56.c +63 -64

420 lines not on this page · raw message

fs/btrfs/raid56.h +4 -4
index 2503485db859..838d3a5e07ef 100644
@@ -31,24 +31,24 @@ struct btrfs_raid_bio;
 struct btrfs_device;
 
 int raid56_parity_recover(struct btrfs_fs_info *fs_info, struct bio *bio,
-			  struct btrfs_bio *bbio, u64 stripe_len,
+			  struct btrfs_io_context *bioc, u64 stripe_len,
 			  int mirror_num, int generic_io);
 int raid56_parity_write(struct btrfs_fs_info *fs_info, struct bio *bio,
-			       struct btrfs_bio *bbio, u64 stripe_len);
+			struct btrfs_io_context *bioc, u64 stripe_len);
 
 void raid56_add_scrub_pages(struct btrfs_raid_bio *rbio, struct page *page,
 			    u64 logical);
 
 struct btrfs_raid_bio *
 raid56_parity_alloc_scrub_rbio(struct btrfs_fs_info *fs_info, struct bio *bio,
-			       struct btrfs_bio *bbio, u64 stripe_len,
+			       struct btrfs_io_context *bioc, u64 stripe_len,
 			       struct btrfs_device *scrub_dev,
 			       unsigned long *dbitmap, int stripe_nsectors);
 void raid56_parity_submit_scrub_rbio(struct btrfs_raid_bio *rbio);
 
 struct btrfs_raid_bio *
 raid56_alloc_missing_rbio(struct btrfs_fs_info *fs_info, struct bio *bio,
-			  struct btrfs_bio *bbio, u64 length);
+			  struct btrfs_io_context *bioc, u64 length);
 void raid56_submit_missing_rbio(struct btrfs_raid_bio *rbio);
 
 int btrfs_alloc_stripe_hash_table(struct btrfs_fs_info *info);
fs/btrfs/reada.c +13 -13
index 06713a8fe26b..eb96fdc3be25 100644
@@ -227,7 +227,7 @@ int btree_readahead_hook(struct extent_buffer *eb, int err)
 }
 
 static struct reada_zone *reada_find_zone(struct btrfs_device *dev, u64 logical,
-					  struct btrfs_bio *bbio)
+					  struct btrfs_io_context *bioc)
 {
 	struct btrfs_fs_info *fs_info = dev->fs_info;
 	int ret;
@@ -275,11 +275,11 @@ static struct reada_zone *reada_find_zone(struct btrfs_device *dev, u64 logical,
 	kref_init(&zone->refcnt);
 	zone->elems = 0;
 	zone->device = dev; /* our device always sits at index 0 */
-	for (i = 0; i < bbio->num_stripes; ++i) {
+	for (i = 0; i < bioc->num_stripes; ++i) {
 		/* bounds have already been checked */
-		zone->devs[i] = bbio->stripes[i].dev;
+		zone->devs[i] = bioc->stripes[i].dev;
 	}
-	zone->ndevs = bbio->num_stripes;
+	zone->ndevs = bioc->num_stripes;
 
 	spin_lock(&fs_info->reada_lock);
 	ret = radix_tree_insert(&dev->reada_zones,
@@ -309,7 +309,7 @@ static struct reada_extent *reada_find_extent(struct btrfs_fs_info *fs_info,
 	int ret;
 	struct reada_extent *re = NULL;
 	struct reada_extent *re_exist = NULL;
-	struct btrfs_bio *bbio = NULL;
+	struct btrfs_io_context *bioc = NULL;
 	struct btrfs_device *dev;
 	struct btrfs_device *prev_dev;
 	u64 length;
@@ -345,28 +345,28 @@ static struct reada_extent *reada_find_extent(struct btrfs_fs_info *fs_info,
 	 */
 	length = fs_info->nodesize;
 	ret = btrfs_map_block(fs_info, BTRFS_MAP_GET_READ_MIRRORS, logical,
-			&length, &bbio, 0);
-	if (ret || !bbio || length < fs_info->nodesize)
+			      &length, &bioc, 0);
+	if (ret || !bioc || length < fs_info->nodesize)
 		goto error;
 
-	if (bbio->num_stripes > BTRFS_MAX_MIRRORS) {
+	if (bioc->num_stripes > BTRFS_MAX_MIRRORS) {
 		btrfs_err(fs_info,
 			   "readahead: more than %d copies not supported",
 			   BTRFS_MAX_MIRRORS);
 		goto error;
 	}
 
-	real_stripes = bbio->num_stripes - bbio->num_tgtdevs;
+	real_stripes = bioc->num_stripes - bioc->num_tgtdevs;
 	for (nzones = 0; nzones < real_stripes; ++nzones) {
 		struct reada_zone *zone;
 
-		dev = bbio->stripes[nzones].dev;
+		dev = bioc->stripes[nzones].dev;
 
 		/* cannot read ahead on missing device. */
 		if (!dev->bdev)
 			continue;
 
-		zone = reada_find_zone(dev, logical, bbio);
+		zone = reada_find_zone(dev, logical, bioc);
 		if (!zone)
 			continue;
 
@@ -464,7 +464,7 @@ static struct reada_extent *reada_find_extent(struct btrfs_fs_info *fs_info,
 	if (!have_zone)
 		goto error;
 
-	btrfs_put_bbio(bbio);
+	btrfs_put_bioc(bioc);
 	return re;
 
 error:
@@ -488,7 +488,7 @@ static struct reada_extent *reada_find_extent(struct btrfs_fs_info *fs_info,
 		kref_put(&zone->refcnt, reada_zone_release);
 		spin_unlock(&fs_info->reada_lock);
 	}
-	btrfs_put_bbio(bbio);
+	btrfs_put_bioc(bioc);
 	kfree(re);
 	return re_exist;
 }
fs/btrfs/scrub.c +57 -58

288 lines not on this page · raw message

fs/btrfs/volumes.c +132 -135

125 lines not on this page · raw message

fs/btrfs/volumes.h +27 -11
index 30288b728bbb..dfd7457709b3 100644

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

fs/btrfs/zoned.c +14 -11
index 3bc2f92cd197..574769f921a2 100644

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

fs/ceph/addr.c +3 -3
index 99b80b5c7a93..b218a26291b8 100644

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

fs/exec.c +1 -1
index 29e865c59854..76196ddefbdd 100644

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

fs/ksmbd/transport_tcp.c +1 -1
index 82a1429bbe12..755329c295ca 100644

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

fs/lockd/svcsubs.c +7 -7
index 0a22a2faf552..e1c4617de771 100644

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

fs/nilfs2/nilfs.h +3 -0
index 7dcb77d38759..aceb8aadca14 100644

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

fs/remap_range.c +2 -1
index 6d4a9beaa097..e69bafb96f09 100644

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

fs/xfs/xfs_bio_io.c +0 -35
index 667e297f59b1..17f36db2f792 100644

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

fs/xfs/xfs_fsops.c +1 -1
index 33e26690a8c4..710e857bb825 100644

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

fs/xfs/xfs_linux.h +0 -2
index 09a8fba84ff9..cb9105d667db 100644

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

fs/xfs/xfs_log.c +24 -34

58 lines not on this page · raw message

fs/xfs/xfs_log_cil.c +13 -29

42 lines not on this page · raw message

fs/xfs/xfs_log_priv.h +1 -2
index 844fbeec3545..f3d68ca39f45 100644

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

fs/xfs/xfs_log_recover.c +23 -1
index 10562ecbd9ea..581aeb288b32 100644

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

fs/xfs/xfs_mount.c +1 -11
index 06dac09eddbd..76056de83971 100644

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

fs/xfs/xfs_mount.h +15 -0
index e091f3b3fa15..86564295fce6 100644

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

fs/xfs/xfs_reflink.c +4 -1
index 76355f293488..36832e4bc803 100644

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

fs/xfs/xfs_super.c +0 -9
index e8d19916ba99..5410bf0ab426 100644

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

include/linux/cgroup-defs.h +2 -1
index db2e147e069f..cd8b8bd5ec4d 100644

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

include/linux/kexec.h +6 -0
index 33be67c2f7ff..cf042d41c87b 100644

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

include/linux/reset.h +1 -1
index db0e6115a2f6..7bb583737528 100644

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

include/linux/sched/task.h +1 -1
index 8db25fcc1eba..caae8e045160 100644

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

include/linux/serial_core.h +5 -0
index 8c32935e1059..6d07b5f9e3b8 100644

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

include/linux/sysfb.h +17 -5
index b0dcfa26d07b..8ba8b5be5567 100644

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

include/net/netfilter/nf_tables.h +9 -5
index bcfee89012a1..f56a1071c005 100644

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

include/net/raw.h +1 -1
index 8ad8df594853..c51a635671a7 100644

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

include/net/sock.h +1 -1
index 7d49196a3880..96f51d4b1649 100644

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

include/net/tls.h +2 -2
index 1fffb206f09f..bf3d63a52788 100644

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

include/trace/events/sock.h +4 -2
index 12c315782766..777ee6cbe933 100644

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

kernel/cgroup/cgroup.c +23 -14
index de8b4fa1e1fd..e7c3b0e586f2 100644

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

kernel/exit.c +1 -1
index 91a43e57a32e..aefe7445508d 100644

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

kernel/kexec_file.c +10 -1
index e289e60ba3ad..f7a4fd4d243f 100644

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

kernel/signal.c +4 -4
index d831f0aec56e..c7dbb19219b9 100644

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

kernel/sysctl.c +31 -26

57 lines not on this page · raw message

kernel/time/posix-timers.c +14 -5
index 1cd10b102c51..5dead89308b7 100644

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

kernel/trace/trace.c +6 -5
index 518ce39a878d..f752f2574630 100644

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

kernel/trace/trace_events_hist.c +2 -0
index 45a78e9c65c9..d5c7b9a37ed5 100644

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

mm/memory.c +14 -13
index 26d115ded4ab..036eb765c4e8 100644

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

mm/userfaultfd.c +4 -1
index c9bab48856c6..3bbaf5f5353e 100644

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

net/bridge/br_netfilter_hooks.c +18 -3
index 68c0d0f92890..10a2c7bca719 100644

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

net/core/filter.c +0 -1
index d1e2ef77ce4c..8b2bc855714b 100644

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

net/ipv4/af_inet.c +2 -2
index 77534b44b8c7..44f21278003d 100644

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

net/ipv4/cipso_ipv4.c +7 -5
index 099259fc826a..75ac14525344 100644

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

net/ipv4/fib_semantics.c +2 -2
index b5563f5ff176..674694d8ac61 100644

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

net/ipv4/fib_trie.c +1 -1
index f7f74d5c14da..a9cd9c2bd84e 100644

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

net/ipv4/icmp.c +9 -7
index b7e277d8a84d..a5cc89506c1e 100644

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

net/ipv4/inetpeer.c +8 -4
index da21dfce24d7..e9fed83e9b3c 100644

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

net/ipv4/nexthop.c +3 -2
index 5dbd4b5505eb..cc8f120149f6 100644

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

net/ipv4/sysctl_net_ipv4.c +6 -0
index 6f1e64d49232..616658e7c796 100644

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

net/ipv4/tcp.c +2 -1
index f79b5a98888c..4ac53c8f0583 100644

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

net/ipv4/tcp_output.c +1 -1
index dc3b4668fcde..509aab1b7ac9 100644

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

net/ipv6/icmp.c +1 -1
index 96c5cc0f30ce..716e7717fe8f 100644

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

net/ipv6/route.c +1 -1
index 4ca754c360a3..27274fc3619a 100644

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

net/ipv6/seg6_iptunnel.c +4 -1
index d64855010948..e756ba705fd9 100644

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

net/ipv6/seg6_local.c +0 -2
index ef88489c71f5..59454285d5c5 100644

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

net/mac80211/wme.c +2 -2
index 62c6733e0792..d50480b31750 100644

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

net/netfilter/nf_log_syslog.c +4 -4
index 13234641cdb3..7000e069bc07 100644

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/tipc/socket.c +1 -0
index 17f8c523e33b..43509c7e90fc 100644

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

net/tls/tls_device.c +2 -2
index f3e3d009cf1c..4775431cbd38 100644

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

net/tls/tls_main.c +6 -1
index 62b1c5e32bbd..a947cfb100bd 100644

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

security/integrity/evm/evm_crypto.c +2 -5
index 0450d79afdc8..b862f0f919bf 100644

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

security/integrity/ima/ima_appraise.c +2 -1
index dbba51583e7c..ed04bb7c7512 100644

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

security/integrity/ima/ima_crypto.c +1 -0
index a7206cc1d7d1..64499056648a 100644

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

security/integrity/ima/ima_efi.c +2 -0
index 71786d01946f..9db66fe310d4 100644

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

sound/pci/hda/patch_conexant.c +1 -0
index 0b7d500249f6..8c68e6e1387e 100644

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

sound/pci/hda/patch_realtek.c +20 -0
index 3c3eac2399da..f3fa35b302ce 100644

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

sound/soc/codecs/cs47l15.c +4 -1
index 1ee83160b83f..ac9ccdea15b5 100644

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

sound/soc/codecs/madera.c +10 -4
index f4ed7e04673f..fd4fa1d5d2d1 100644

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

sound/soc/codecs/max98373-sdw.c +11 -1
index dc520effc61c..12323d4b5bfa 100644

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

sound/soc/codecs/rt1308-sdw.c +11 -0
index f716668de640..8472d855c325 100644

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

sound/soc/codecs/rt1316-sdw.c +11 -0
index 09b4914bba1b..09cf3ca86fa4 100644

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

sound/soc/codecs/rt5682-sdw.c +4 -1
index 31a4f286043e..a030c9987b92 100644

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

sound/soc/codecs/rt700-sdw.c +5 -1
index bda594899664..f7439e40ca8b 100644

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

sound/soc/codecs/rt700.c +6 -8
index 614a40247679..e049d672ccfd 100644

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

sound/soc/codecs/rt711-sdca-sdw.c +8 -1
index aaf5af153d3f..a085b2f530aa 100644

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

sound/soc/codecs/rt711-sdca.c +7 -11
index c15fb98eac86..3b5df3ea2f60 100644

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

sound/soc/codecs/rt711-sdw.c +8 -1
index bda2cc9439c9..4fe68bcf2a7c 100644

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

sound/soc/codecs/rt711.c +7 -9
index fafb0ba8349f..51a98e730fc8 100644

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

sound/soc/codecs/rt715-sdca-sdw.c +12 -0
index a5c673f43d82..0f4354eafef2 100644

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

sound/soc/codecs/rt715-sdw.c +12 -0
index a7b21b03c08b..b047bf87a100 100644

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

sound/soc/codecs/sgtl5000.c +9 -0
index 97bf1f222805..dc56e6c6b668 100644

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

sound/soc/codecs/sgtl5000.h +1 -0
index 56ec5863f250..3a808c762299 100644

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

sound/soc/codecs/tas2764.c +28 -18

46 lines not on this page · raw message

sound/soc/codecs/tas2764.h +2 -4
index 67d6fd903c42..f015f22a083b 100644

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

sound/soc/codecs/wcd938x.c +12 -0
index 4480c118ed5d..8cdc45e669f2 100644

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

sound/soc/codecs/wm5110.c +6 -2
index 5c2d45d05c97..7c6e01720d65 100644

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

sound/soc/intel/boards/bytcr_wm5102.c +11 -2
index 580d5fddae5a..bb669d58eb8b 100644

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

sound/soc/intel/boards/sof_sdw.c +29 -22

51 lines not on this page · raw message

sound/soc/intel/skylake/skl-nhlt.c +27 -13
index 64226072f0ee..74f60f5dfaef 100644

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

sound/soc/soc-dapm.c +5 -0
index 47b85ba5b7d6..b957049bae33 100644

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

sound/soc/soc-ops.c +2 -2
index f32ba64c5dda..e73360e9de8f 100644

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

sound/soc/sof/intel/hda-loader.c +4 -4
index 14469e087b00..ee09393d42cb 100644

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

sound/usb/quirks-table.h +248 -0

248 lines not on this page · raw message

sound/usb/quirks.c +9 -0
index 12ce69b04f63..968d90caeefa 100644

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.