Linux 5.15.56
Greg Kroah-Hartman
maintainerI'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
Greg Kroah-Hartman
maintainerDocumentation/driver-api/firmware/other_interfaces.rst +6 -0
@@ -13,6 +13,12 @@ EDD Interfaces .. kernel-doc:: drivers/firmware/edd.c :internal: +Generic System Framebuffers Interface +------------------------------------- + +.. kernel-doc:: drivers/firmware/sysfb.c + :export: + Intel Stratix10 SoC Service Layer --------------------------------- Some features of the Intel Stratix10 SoC require a level of privilege
Documentation/networking/ip-sysctl.rst +2 -2
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -27,6 +27,7 @@ enum {MT_HIGH_VECTORS ,MT_MEMORY_RWX ,MT_MEMORY_RW , +MT_MEMORY_RO ,MT_ROM ,MT_MEMORY_RWX_NONCACHED , MT_MEMORY_RW_DTCM,
arch/arm/include/asm/ptrace.h +26 -0
@@ -163,5 +163,31 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs) ((current_stack_pointer | (THREAD_SIZE -1 )) -7 ) -1 ; \ }) + +/* +* Update ITSTATE after normal execution of an IT block instruction. +* +* The 8 IT state bits are split into two parts in CPSR: +* ITSTATE<1:0> are in CPSR<26:25> +* ITSTATE<7:2> are in CPSR<15:10> +*/ +static inline unsigned long it_advance (unsigned long cpsr) +{ +if ((cpsr &0x06000400 ) ==0 ) { +/* ITSTATE<2:0> == 0 means end of IT block, so clear IT state */ + cpsr &= ~PSR_IT_MASK ; + }else { +/* We need to shift left ITSTATE<4:0> */ +const unsigned long mask =0x06001c00 ;/* Mask ITSTATE<4:0> */ +unsigned long it = cpsr & mask; + it <<=1 ; + it |= it >> (27 -10 );/* Carry ITSTATE<2> to correct place */ + it &= mask; + cpsr &= ~mask; + cpsr |= it; + } +return cpsr; +} +#endif /* __ASSEMBLY__ */ #endif
arch/arm/mm/alignment.c +3 -0
@@ -935,6 +935,9 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)if (type ==TYPE_LDST )do_alignment_finish_ldst (addr, instr, regs, offset); +if (thumb_mode (regs)) + regs->ARM_cpsr =it_advance (regs->ARM_cpsr); +return 0 ; bad_or_fault:
arch/arm/mm/mmu.c +14 -1
@@ -296,6 +296,13 @@ static struct mem_type mem_types[] __ro_after_init = { .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE, .domain = DOMAIN_KERNEL, }, + [MT_MEMORY_RO] = { + .prot_pte =L_PTE_PRESENT |L_PTE_YOUNG |L_PTE_DIRTY | + L_PTE_XN | L_PTE_RDONLY, + .prot_l1 = PMD_TYPE_TABLE, + .prot_sect = PMD_TYPE_SECT, + .domain = DOMAIN_KERNEL, + }, [MT_ROM] = { .prot_sect = PMD_TYPE_SECT, .domain = DOMAIN_KERNEL,
@@ -489,6 +496,7 @@ static void __init build_mem_type_table(void)/* Also setup NX memory mapping */ mem_types[MT_MEMORY_RW ].prot_sect |=PMD_SECT_XN ; + mem_types[MT_MEMORY_RO ].prot_sect |=PMD_SECT_XN ; }if (cpu_arch >= CPU_ARCH_ARMv7 && (cr &CR_TRE )) {/*
@@ -568,6 +576,7 @@ static void __init build_mem_type_table(void) mem_types[MT_ROM ].prot_sect |=PMD_SECT_APX |PMD_SECT_AP_WRITE ; mem_types[MT_MINICLEAN ].prot_sect |=PMD_SECT_APX |PMD_SECT_AP_WRITE ; mem_types[MT_CACHECLEAN ].prot_sect |=PMD_SECT_APX |PMD_SECT_AP_WRITE ; + mem_types[MT_MEMORY_RO ].prot_sect |=PMD_SECT_APX |PMD_SECT_AP_WRITE ;#endif /*
@@ -587,6 +596,8 @@ static void __init build_mem_type_table(void) mem_types[MT_MEMORY_RWX ].prot_pte |=L_PTE_SHARED ; mem_types[MT_MEMORY_RW ].prot_sect |=PMD_SECT_S ; mem_types[MT_MEMORY_RW ].prot_pte |=L_PTE_SHARED ; + mem_types[MT_MEMORY_RO ].prot_sect |=PMD_SECT_S ; + mem_types[MT_MEMORY_RO ].prot_pte |=L_PTE_SHARED ; mem_types[MT_MEMORY_DMA_READY ].prot_pte |=L_PTE_SHARED ; mem_types[MT_MEMORY_RWX_NONCACHED ].prot_sect |=PMD_SECT_S ; mem_types[MT_MEMORY_RWX_NONCACHED ].prot_pte |=L_PTE_SHARED ;
@@ -647,6 +658,8 @@ static void __init build_mem_type_table(void) mem_types[MT_MEMORY_RWX ].prot_pte |= kern_pgprot; mem_types[MT_MEMORY_RW ].prot_sect |= ecc_mask | cp->pmd; mem_types[MT_MEMORY_RW ].prot_pte |= kern_pgprot; + mem_types[MT_MEMORY_RO ].prot_sect |= ecc_mask | cp->pmd; + mem_types[MT_MEMORY_RO ].prot_pte |= kern_pgprot; mem_types[MT_MEMORY_DMA_READY ].prot_pte |= kern_pgprot; mem_types[MT_MEMORY_RWX_NONCACHED ].prot_sect |= ecc_mask; mem_types[MT_ROM ].prot_sect |= cp->pmd;
@@ -1360,7 +1373,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc) map.pfn =__phys_to_pfn (__atags_pointer &SECTION_MASK ); map.virtual =FDT_FIXED_BASE ; map.length =FDT_FIXED_SIZE ; - map.type =MT_ROM ; + map.type =MT_MEMORY_RO ;create_mapping (&map); }
arch/arm/mm/proc-v7-bugs.c +4 -5
@@ -108,8 +108,7 @@ static unsigned int spectre_v2_install_workaround(unsigned int method)#else static unsigned int spectre_v2_install_workaround (unsigned int method) { -pr_info ("CPU%u: Spectre V2: workarounds disabled by configuration\n" , -smp_processor_id ()); +pr_info_once ("Spectre V2: workarounds disabled by configuration\n" );return SPECTRE_VULNERABLE ; }
@@ -209,10 +208,10 @@ static int spectre_bhb_install_workaround(int method)return SPECTRE_VULNERABLE ; spectre_bhb_method = method; - } -pr_info ("CPU%u: Spectre BHB: using %s workaround\n" , -smp_processor_id (),spectre_bhb_method_name (method)); +pr_info ("CPU%u: Spectre BHB: enabling %s workaround for all CPUs\n" , +smp_processor_id (),spectre_bhb_method_name (method)); + }return SPECTRE_MITIGATED ; }
arch/arm/probes/decode.h +1 -25
@@ -14,6 +14,7 @@#include <linux/types.h> #include <linux/stddef.h> #include <asm/probes.h> +#include <asm/ptrace.h> #include <asm/kprobes.h> void __init arm_probes_decode_init (void );
@@ -35,31 +36,6 @@ void __init find_str_pc_offset(void);#endif -/* -* Update ITSTATE after normal execution of an IT block instruction. -* -* The 8 IT state bits are split into two parts in CPSR: -* ITSTATE<1:0> are in CPSR<26:25> -* ITSTATE<7:2> are in CPSR<15:10> -*/ -static inline unsigned long it_advance (unsigned long cpsr) - { -if ((cpsr &0x06000400 ) ==0 ) { -/* ITSTATE<2:0> == 0 means end of IT block, so clear IT state */ - cpsr &= ~PSR_IT_MASK ; - }else { -/* We need to shift left ITSTATE<4:0> */ -const unsigned long mask =0x06001c00 ;/* Mask ITSTATE<4:0> */ -unsigned long it = cpsr & mask; - it <<=1 ; - it |= it >> (27 -10 );/* Carry ITSTATE<2> to correct place */ - it &= mask; - cpsr &= ~mask; - cpsr |= it; - } -return cpsr; -} -static inline void __kprobes bx_write_pc (long pcv,struct pt_regs *regs) {long cpsr = regs->ARM_cpsr;
arch/arm64/boot/dts/broadcom/bcm4908/bcm4906.dtsi +8 -0
@@ -9,6 +9,14 @@ cpus { /delete-node/ cpu@3; }; + timer { + compatible = "arm,armv8-timer"; + interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, + <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, + <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, + <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>; + }; + pmu { compatible = "arm,cortex-a53-pmu"; interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi +2 -0
@@ -29,6 +29,8 @@ cpu0: cpu@0 { device_type = "cpu"; compatible = "brcm,brahma-b53"; reg = <0x0>; + enable-method = "spin-table"; + cpu-release-addr = <0x0 0xfff8>; next-level-cache = <&l2>; };
arch/powerpc/sysdev/xive/spapr.c +3 -2
@@ -13,6 +13,7 @@#include <linux/of.h> #include <linux/slab.h> #include <linux/spinlock.h> +#include <linux/bitmap.h> #include <linux/cpumask.h> #include <linux/mm.h> #include <linux/delay.h>
@@ -55,7 +56,7 @@ static int 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 (®ister_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
@@ -470,6 +470,10 @@ static int pmac_cpufreq_init_MacRISC3(struct device_node *cpunode)if (slew_done_gpio_np) slew_done_gpio =read_gpio (slew_done_gpio_np); +of_node_put (volt_gpio_np); +of_node_put (freq_gpio_np); +of_node_put (slew_done_gpio_np); +/* If we use the frequency GPIOs, calculate the min/max speeds based * on the bus frequencies */
drivers/firmware/sysfb.c +50 -8
88 lines not on this page · raw message
drivers/firmware/sysfb_simplefb.c +8 -8
@@ -57,8 +57,8 @@ __init bool sysfb_parse_mode(const struct screen_info *si,return false; } -__init int sysfb_create_simplefb (const struct screen_info *si, -const struct simplefb_platform_data *mode) +__init struct platform_device *sysfb_create_simplefb (const struct screen_info *si, +const struct simplefb_platform_data *mode) {struct platform_device *pd;struct resource res;
@@ -76,7 +76,7 @@ __init int sysfb_create_simplefb(const struct screen_info *si, base |= (u64 )si->ext_lfb_base <<32 ;if (!base || (u64 )(resource_size_t )base != base) {printk (KERN_DEBUG "sysfb: inaccessible VRAM base\n" ); -return -EINVAL ; +return ERR_PTR (-EINVAL ); }/*
@@ -93,7 +93,7 @@ __init int sysfb_create_simplefb(const struct screen_info *si, length = mode->height * mode->stride;if (length > size) {printk (KERN_WARNING "sysfb: VRAM smaller than advertised\n" ); -return -EINVAL ; +return ERR_PTR (-EINVAL ); } length =PAGE_ALIGN (length);
@@ -104,11 +104,11 @@ __init int sysfb_create_simplefb(const struct screen_info *si, res.start = base; res.end = res.start + length -1 ;if (res.end <= res.start) -return -EINVAL ; +return ERR_PTR (-EINVAL ); pd =platform_device_alloc ("simple-framebuffer" ,0 );if (!pd) -return -ENOMEM ; +return ERR_PTR (-ENOMEM );sysfb_apply_efi_quirks (pd);
@@ -124,10 +124,10 @@ __init int sysfb_create_simplefb(const struct screen_info *si,if (ret) goto err_put_device; -return 0 ; +return pd; err_put_device:platform_device_put (pd); -return ret; +return ERR_PTR (ret); }
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +6 -5
@@ -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
@@ -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
@@ -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
@@ -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
@@ -970,6 +970,20 @@ void intel_gt_invalidate_tlbs(struct intel_gt *gt)mutex_lock (>->tlb_invalidate_lock);intel_uncore_forcewake_get (uncore,FORCEWAKE_ALL ); +spin_lock_irq (&uncore->lock);/* serialise invalidate with GT reset */ + +for_each_engine (engine, gt, id) { +struct reg_and_bit rb; + + rb =get_reg_and_bit (engine, regs == gen8_regs, regs, num); +if (!i915_mmio_reg_offset (rb.reg)) +continue ; + +intel_uncore_write_fw (uncore, rb.reg, rb.bit); + } + +spin_unlock_irq (&uncore->lock); +for_each_engine (engine, gt, id) {/* * HW architecture suggest typical invalidation time at 40us,
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -66,7 +66,6 @@ static struct or1k_pic_dev or1k_pic_level = { .name = "or1k-PIC-level", .irq_unmask = or1k_pic_unmask, .irq_mask = or1k_pic_mask, - .irq_mask_ack = or1k_pic_mask_ack, }, .handle = handle_level_irq, .flags = IRQ_LEVEL | IRQ_NOPROBE,
drivers/net/can/xilinx_can.c +2 -2
@@ -259,7 +259,7 @@ static const struct can_bittiming_const xcan_bittiming_const_canfd2 = { .tseg2_min = 1, .tseg2_max = 128, .sjw_max = 128, - .brp_min = 2, + .brp_min = 1, .brp_max = 256, .brp_inc = 1, };
@@ -272,7 +272,7 @@ static const struct can_bittiming_const xcan_data_bittiming_const_canfd2 = { .tseg2_min = 1, .tseg2_max = 16, .sjw_max = 16, - .brp_min = 2, + .brp_min = 1, .brp_max = 256, .brp_inc = 1, };
drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c +8 -15
@@ -379,7 +379,7 @@ static void aq_pci_shutdown(struct pci_dev *pdev) } } -static int aq_suspend_common (struct device *dev,bool deep) +static int aq_suspend_common (struct device *dev) {struct aq_nic_s *nic =pci_get_drvdata (to_pci_dev (dev));
@@ -392,17 +392,15 @@ static int aq_suspend_common(struct device *dev, bool deep)if (netif_running (nic->ndev))aq_nic_stop (nic); -if (deep) { -aq_nic_deinit (nic, !nic->aq_hw->aq_nic_cfg->wol); -aq_nic_set_power (nic); - } +aq_nic_deinit (nic, !nic->aq_hw->aq_nic_cfg->wol); +aq_nic_set_power (nic);rtnl_unlock ();return 0 ; } -static int atl_resume_common (struct device *dev,bool deep) +static int atl_resume_common (struct device *dev) {struct pci_dev *pdev =to_pci_dev (dev);struct aq_nic_s *nic;
@@ -415,11 +413,6 @@ static int atl_resume_common(struct device *dev, bool deep)pci_set_power_state (pdev,PCI_D0 );pci_restore_state (pdev); -if (deep) { -/* Reinitialize Nic/Vecs objects */ -aq_nic_deinit (nic, !nic->aq_hw->aq_nic_cfg->wol); - } -if (netif_running (nic->ndev)) { ret =aq_nic_init (nic);if (ret)
@@ -444,22 +437,22 @@ static int atl_resume_common(struct device *dev, bool deep)static int aq_pm_freeze (struct device *dev) { -return aq_suspend_common (dev, true); +return aq_suspend_common (dev); }static int aq_pm_suspend_poweroff (struct device *dev) { -return aq_suspend_common (dev, true); +return aq_suspend_common (dev); }static int aq_pm_thaw (struct device *dev) { -return atl_resume_common (dev, true); +return atl_resume_common (dev); }static int aq_pm_resume_restore (struct device *dev) { -return atl_resume_common (dev, true); +return atl_resume_common (dev); }static const struct dev_pm_ops aq_pm_ops = {
drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 -1
@@ -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
@@ -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
@@ -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
@@ -231,8 +231,7 @@ mlx5e_set_ktls_rx_priv_ctx(struct tls_context *tls_ctx,struct mlx5e_ktls_offload_context_rx **ctx =__tls_driver_ctx (tls_ctx,TLS_OFFLOAD_CTX_DIR_RX ); -BUILD_BUG_ON (sizeof (struct mlx5e_ktls_offload_context_rx *) > -TLS_OFFLOAD_CONTEXT_SIZE_RX ); +BUILD_BUG_ON (sizeof (priv_rx) >TLS_DRIVER_STATE_SIZE_RX ); *ctx = priv_rx; }
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c +1 -2
@@ -68,8 +68,7 @@ mlx5e_set_ktls_tx_priv_ctx(struct tls_context *tls_ctx,struct mlx5e_ktls_offload_context_tx **ctx =__tls_driver_ctx (tls_ctx,TLS_OFFLOAD_CTX_DIR_TX ); -BUILD_BUG_ON (sizeof (struct mlx5e_ktls_offload_context_tx *) > -TLS_OFFLOAD_CONTEXT_SIZE_TX ); +BUILD_BUG_ON (sizeof (priv_tx) >TLS_DRIVER_STATE_SIZE_TX ); *ctx = priv_tx; }
drivers/net/ethernet/mellanox/mlx5/core/en_stats.c +1 -1
@@ -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
@@ -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
@@ -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
@@ -1932,7 +1932,10 @@ static int efx_ef10_try_update_nic_stats_vf(struct efx_nic *efx)efx_update_sw_stats (efx, stats); out: +/* releasing a DMA coherent buffer with BH disabled can panic */ +spin_unlock_bh (&efx->stats_lock);efx_nic_free_buffer (efx, &stats_buf); +spin_lock_bh (&efx->stats_lock);return rc; }
drivers/net/ethernet/sfc/ef10_sriov.c +7 -3
@@ -408,8 +408,9 @@ static int efx_ef10_pci_sriov_enable(struct efx_nic *efx, int num_vfs)static int efx_ef10_pci_sriov_disable (struct efx_nic *efx,bool force) {struct pci_dev *dev = efx->pci_dev; +struct efx_ef10_nic_data *nic_data = efx->nic_data;unsigned int vfs_assigned =pci_vfs_assigned (dev); -int rc =0 ; +int i, rc =0 ;if (vfs_assigned && !force) { netif_info(efx, drv, efx->net_dev, "VFs are assigned to guests; "
@@ -417,10 +418,13 @@ static int efx_ef10_pci_sriov_disable(struct efx_nic *efx, bool force)return -EBUSY ; } -if (!vfs_assigned) +if (!vfs_assigned) { +for (i =0 ; i < efx->vf_count; i++) + nic_data->vf[i].pci_dev =NULL ;pci_disable_sriov (dev); -else + }else { rc = -EBUSY ; + }efx_ef10_sriov_free_vf_vswitching (efx); efx->vf_count =0 ;
drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c +1 -0
@@ -361,6 +361,7 @@ static int tegra_eqos_probe(struct platform_device *pdev, data->fix_mac_speed = tegra_eqos_fix_speed; data->init = tegra_eqos_init; data->bsp_priv = eqos; + data->sph_disable =1 ; err =tegra_eqos_init (pdev, eqos);if (err <0 )
drivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c +4 -2
@@ -273,7 +273,8 @@ static int ingenic_mac_probe(struct platform_device *pdev) mac->tx_delay = tx_delay_ps *1000 ; }else {dev_err (&pdev->dev,"Invalid TX clock delay: %dps\n" , tx_delay_ps); -return -EINVAL ; + ret = -EINVAL ; + goto err_remove_config_dt; } }
@@ -283,7 +284,8 @@ static int ingenic_mac_probe(struct platform_device *pdev) mac->rx_delay = rx_delay_ps *1000 ; }else {dev_err (&pdev->dev,"Invalid RX clock delay: %dps\n" , rx_delay_ps); -return -EINVAL ; + ret = -EINVAL ; + goto err_remove_config_dt; } }
drivers/net/ethernet/ti/am65-cpsw-nuss.c +10 -7
@@ -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
@@ -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
@@ -495,6 +495,7 @@ void xenvif_rx_action(struct xenvif_queue *queue) queue->rx_copy.completed = &completed_skbs;while (xenvif_rx_ring_slots_available (queue) && + !skb_queue_empty (&queue->rx_queue) && work_done <RX_BATCH_SIZE ) {xenvif_rx_skb (queue); work_done++;
drivers/nfc/nxp-nci/i2c.c +6 -2
@@ -122,7 +122,9 @@ static int nxp_nci_i2c_fw_read(struct nxp_nci_i2c_phy *phy,skb_put_data (*skb, &header,NXP_NCI_FW_HDR_LEN ); r =i2c_master_recv (client,skb_put (*skb, frame_len), frame_len); -if (r != frame_len) { +if (r <0 ) { + goto fw_read_exit_free_skb; + }else if (r != frame_len) {nfc_err (&client->dev,"Invalid frame length: %u (expected %zu)\n" , r, frame_len);
@@ -166,7 +168,9 @@ static int nxp_nci_i2c_nci_read(struct nxp_nci_i2c_phy *phy,return 0 ; r =i2c_master_recv (client,skb_put (*skb, header.plen), header.plen); -if (r != header.plen) { +if (r <0 ) { + goto nci_read_exit_free_skb; + }else if (r != header.plen) {nfc_err (&client->dev,"Invalid frame payload length: %u (expected %u)\n" , r, header.plen);
drivers/nvme/host/core.c +2 -0
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 (®istration_lock);do_remove_conflicting_framebuffers (a, name, primary);mutex_unlock (®istration_lock);
drivers/virtio/virtio_mmio.c +26 -0
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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/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
kernel/sysctl.c +31 -26
57 lines not on this page · raw message
net/netfilter/nf_tables_api.c +51 -21
72 lines not on this page · raw message
sound/soc/codecs/tas2764.c +28 -18
46 lines not on this page · raw message
sound/soc/intel/boards/sof_sdw.c +29 -22
51 lines not on this page · raw message
sound/usb/quirks-table.h +248 -0
248 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.