Skip to contentSkip to conversation

Linux 5.15.103

DISCUSSION Greg Kroah-Hartman 3 participants 7 messages Mar 17, 2023 – Apr 3, 2023 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 5.15.103 kernel.

All users of the 5.15 kernel series must upgrade.

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

thanks,

greg k-h

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

 Documentation/admin-guide/kernel-parameters.txt         |   51 +-
 Documentation/trace/ftrace.rst                          |    2 
 Makefile                                                |    3 
 arch/alpha/kernel/module.c                              |    4 
 arch/arm64/include/asm/efi.h                            |    6 
 arch/arm64/kernel/efi.c                                 |    2 
 arch/mips/include/asm/mach-rc32434/pci.h                |    2 
 arch/powerpc/boot/dts/fsl/t1040rdb-rev-a.dts            |    1 
 arch/powerpc/kernel/iommu.c                             |    4 
 arch/powerpc/kernel/time.c                              |    4 
 arch/powerpc/kernel/vmlinux.lds.S                       |    6 
 arch/riscv/include/asm/ftrace.h                         |    2 
 arch/riscv/include/asm/parse_asm.h                      |    5 
 arch/riscv/include/asm/patch.h                          |    2 
 arch/riscv/kernel/ftrace.c                              |   14 
 arch/riscv/kernel/patch.c                               |   28 +
 arch/riscv/kernel/stacktrace.c                          |    2 
 arch/riscv/kernel/traps.c                               |   14 
 arch/s390/kernel/ftrace.c                               |   86 ---
 arch/s390/kernel/vmlinux.lds.S                          |    2 
 arch/sh/kernel/vmlinux.lds.S                            |    1 
 arch/um/kernel/vmlinux.lds.S                            |    2 
 arch/x86/kernel/cpu/amd.c                               |    9 
 arch/x86/kvm/lapic.c                                    |    1 
 arch/x86/kvm/svm/avic.c                                 |   28 -
 arch/x86/kvm/vmx/evmcs.h                                |   11 
 arch/x86/kvm/vmx/vmx.c                                  |   44 +
 drivers/block/brd.c                                     |   10 
 drivers/block/nbd.c                                     |   14 
 drivers/char/ipmi/ipmi_ssif.c                           |   34 +
 drivers/char/tpm/eventlog/acpi.c                        |    6 
 drivers/gpu/drm/amd/amdgpu/soc15.c                      |    5 
 drivers/gpu/drm/drm_atomic.c                            |    1 
 drivers/gpu/drm/msm/adreno/a5xx_gpu.c                   |    6 
 drivers/gpu/drm/msm/adreno/a5xx_preempt.c               |    4 
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c          |    6 
 drivers/gpu/drm/msm/msm_gem_submit.c                    |    5 
 drivers/gpu/drm/nouveau/dispnv50/disp.c                 |   16 
 drivers/gpu/drm/nouveau/dispnv50/wndw.c                 |   12 
 drivers/gpu/drm/nouveau/dispnv50/wndw.h                 |    7 
 drivers/iommu/amd/init.c                                |  105 +++-
 drivers/iommu/intel/pasid.c                             |    7 
 drivers/macintosh/windfarm_lm75_sensor.c                |    4 
 drivers/macintosh/windfarm_smu_sensors.c                |    4 
 drivers/media/i2c/ov5640.c                              |    2 
 drivers/media/rc/gpio-ir-recv.c                         |   18 
 drivers/net/dsa/mt7530.c                                |   35 -
 drivers/net/ethernet/broadcom/bgmac.c                   |    8 
 drivers/net/ethernet/broadcom/bgmac.h                   |    2 
 drivers/net/ethernet/broadcom/bnxt/bnxt.c               |   23 -
 drivers/net/ethernet/intel/ice/ice_ethtool.c            |    6 
 drivers/net/ethernet/marvell/octeontx2/af/rvu.h         |    5 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c |    7 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c     |   16 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_npa.c     |   58 ++
 drivers/net/ethernet/marvell/octeontx2/af/rvu_reg.h     |    3 
 drivers/net/ethernet/mediatek/mtk_eth_soc.c             |    3 
 drivers/net/ethernet/mediatek/mtk_eth_soc.h             |    1 
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c       |    1 
 drivers/net/phy/microchip.c                             |   32 +
 drivers/net/phy/phy_device.c                            |    8 
 drivers/net/phy/smsc.c                                  |   20 
 drivers/net/usb/lan78xx.c                               |   27 -
 drivers/nfc/fdp/i2c.c                                   |    4 
 drivers/platform/x86/Kconfig                            |    3 
 drivers/regulator/core.c                                |   27 +
 drivers/scsi/hosts.c                                    |    2 
 drivers/scsi/megaraid/megaraid_sas.h                    |    2 
 drivers/scsi/megaraid/megaraid_sas_fp.c                 |    2 
 drivers/staging/rtl8723bs/core/rtw_ap.c                 |   20 
 drivers/staging/rtl8723bs/core/rtw_cmd.c                |   96 ++--
 drivers/staging/rtl8723bs/core/rtw_ioctl_set.c          |    4 
 drivers/staging/rtl8723bs/core/rtw_mlme.c               |    6 
 drivers/staging/rtl8723bs/core/rtw_mlme_ext.c           |   56 +-
 drivers/staging/rtl8723bs/core/rtw_security.c           |    6 
 drivers/staging/rtl8723bs/include/rtw_security.h        |    8 
 drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c       |  355 +++++-----------
 drivers/staging/rtl8723bs/os_dep/ioctl_linux.c          |   51 +-
 drivers/staging/rtl8723bs/os_dep/os_intfs.c             |    4 
 fs/attr.c                                               |   72 +++
 fs/btrfs/block-group.c                                  |    3 
 fs/dlm/lockspace.c                                      |   21 
 fs/dlm/lowcomms.c                                       |   16 
 fs/dlm/lowcomms.h                                       |    1 
 fs/dlm/main.c                                           |    7 
 fs/dlm/midcomms.c                                       |   17 
 fs/dlm/midcomms.h                                       |    3 
 fs/ext4/block_validity.c                                |   26 -
 fs/ext4/ext4.h                                          |    3 
 fs/ext4/fsmap.c                                         |    2 
 fs/ext4/inline.c                                        |    1 
 fs/ext4/inode.c                                         |    7 
 fs/ext4/ioctl.c                                         |    1 
 fs/ext4/mballoc.c                                       |  205 +++++----
 fs/ext4/namei.c                                         |   36 +
 fs/ext4/page-io.c                                       |   11 
 fs/ext4/xattr.c                                         |    3 
 fs/f2fs/checkpoint.c                                    |    2 
 fs/f2fs/compress.c                                      |    2 
 fs/f2fs/data.c                                          |    8 
 fs/f2fs/f2fs.h                                          |    2 
 fs/f2fs/file.c                                          |    2 
 fs/f2fs/gc.c                                            |    6 
 fs/f2fs/inline.c                                        |    4 
 fs/f2fs/inode.c                                         |   14 
 fs/f2fs/node.c                                          |   23 -
 fs/f2fs/recovery.c                                      |    2 
 fs/f2fs/segment.c                                       |    2 
 fs/file.c                                               |    1 
 fs/fuse/file.c                                          |    2 
 fs/inode.c                                              |   90 ++--
 fs/internal.h                                           |   10 
 fs/locks.c                                              |    3 
 fs/namei.c                                              |   82 +++
 fs/namespace.c                                          |   29 -
 fs/ocfs2/file.c                                         |    4 
 fs/ocfs2/namei.c                                        |    1 
 fs/open.c                                               |    8 
 fs/udf/inode.c                                          |    2 
 fs/xfs/xfs_bmap_util.c                                  |    9 
 fs/xfs/xfs_file.c                                       |   24 -
 fs/xfs/xfs_iops.c                                       |   56 --
 fs/xfs/xfs_iops.h                                       |    1 
 fs/xfs/xfs_pnfs.c                                       |    9 
 include/asm-generic/vmlinux.lds.h                       |    5 
 include/linux/fs.h                                      |    6 
 include/linux/pci_ids.h                                 |    2 
 include/net/netfilter/nf_tproxy.h                       |    7 
 kernel/bpf/btf.c                                        |    1 
 kernel/fork.c                                           |    2 
 kernel/irq/irqdomain.c                                  |  152 ++++--
 kernel/watch_queue.c                                    |    1 
 net/caif/caif_usb.c                                     |    3 
 net/ipv4/netfilter/nf_tproxy_ipv4.c                     |    2 
 net/ipv4/tcp_bpf.c                                      |    6 
 net/ipv4/udp_bpf.c                                      |    3 
 net/ipv6/ila/ila_xlat.c                                 |    1 
 net/ipv6/netfilter/nf_tproxy_ipv6.c                     |    2 
 net/netfilter/nf_conntrack_core.c                       |    4 
 net/netfilter/nf_conntrack_netlink.c                    |   14 
 net/nfc/netlink.c                                       |    2 
 net/smc/af_smc.c                                        |   13 
 net/sunrpc/svc.c                                        |    6 
 net/unix/af_unix.c                                      |   16 
 net/unix/unix_bpf.c                                     |    3 
 scripts/checkkconfigsymbols.py                          |   13 
 scripts/clang-tools/run-clang-tools.py                  |   21 
 scripts/diffconfig                                      |   16 
 tools/bpf/Makefile                                      |    5 
 tools/bpf/bpf_jit_disasm.c                              |    5 
 tools/bpf/bpftool/Makefile                              |    5 
 tools/bpf/bpftool/jit_disasm.c                          |   42 +
 tools/build/Makefile.feature                            |    1 
 tools/build/feature/Makefile                            |    4 
 tools/build/feature/test-all.c                          |    4 
 tools/build/feature/test-disassembler-init-styled.c     |   13 
 tools/include/tools/dis-asm-compat.h                    |   55 ++
 tools/perf/Makefile.config                              |    8 
 tools/perf/builtin-inject.c                             |    1 
 tools/perf/builtin-stat.c                               |   15 
 tools/perf/util/annotate.c                              |    7 
 tools/perf/util/stat.c                                  |    6 
 tools/perf/util/stat.h                                  |    1 
 tools/perf/util/target.h                                |   12 
 tools/testing/selftests/netfilter/nft_nat.sh            |    2 
 virt/kvm/kvm_main.c                                     |  145 ++++--
 166 files changed, 1779 insertions(+), 1189 deletions(-)

Alex Deucher (1):
drm/amdgpu: fix error checking in amdgpu_read_mm_registers for soc15

Alexander Aring (3):
fs: dlm: fix log of lowcomms vs midcomms
fs: dlm: add midcomms init/start functions
fs: dlm: start midcomms before scand

Alexandre Ghiti (1):
riscv: Use READ_ONCE_NOCHECK in imprecise unwinding stack mode

Alexandru Matei (1):
KVM: VMX: Fix crash due to uninitialized current_vmcs

Alvaro Karsz (1):
PCI: Add SolidRun vendor ID

Andres Freund (5):
tools build: Add feature test for init_disassemble_info API changes tools include: add dis-asm-compat.h to handle version differences tools perf: Fix compilation error with new binutils tools bpf_jit_disasm: Fix compilation error with new binutils tools bpftool: Fix compilation error with new binutils

Andrew Cooper (1):

      x86/CPU/AMD: Disable XSAVES on AMD family 0x17

Bart Van Assche (1):

      scsi: core: Remove the /proc/scsi/${proc_name} directory earlier

Ben Skeggs (1):
drm/nouveau/kms/nv50-: remove unused functions

Benjamin Coddington (1):
SUNRPC: Fix a server shutdown leak

Chandrakanth Patil (1):
scsi: megaraid_sas: Update max supported LD IDs to 240

Changbin Du (1):
perf stat: Fix counting when initial delay configured

Christian Brauner (6):
attr: add in_group_or_capable()
fs: move should_remove_suid()
attr: add setattr_should_drop_sgid()
attr: use consistent sgid stripping checks
fs: use consistent setgid checks in is_sxid()
fs: hold writers when changing mount's idmapping

Christian Kohlschütter (1):
regulator: core: Fix off-on-delay-us for always-on/boot-on regulators

Christoph Hellwig (1):
nbd: use the correct block_device in nbd_bdev_reset

Conor Dooley (1):
RISC-V: Don't check text_mutex during stop_machine

Corey Minyard (2):
ipmi:ssif: Increase the message retry time ipmi:ssif: Add a timer between request retries

D. Wythe (1):
net/smc: fix fallback failed while sendmsg with fastopen

Daniel Golle (1):
net: ethernet: mtk_eth_soc: fix RX data corruption issue

Darrick J. Wong (2):
ext4: fix another off-by-one fsmap error on 1k block filesystems
xfs: use setattr_copy to set vfs inode attributes

Dave Chinner (3):
xfs: remove XFS_PREALLOC_SYNC
xfs: fallocate() should call file_modified()
xfs: set prealloc flag in xfs_alloc_file_space()

David Disseldorp (1):
watch_queue: fix IOC_WATCH_QUEUE_SET_SIZE alloc error paths

Dmitry Baryshkov (5):
drm/msm/a5xx: fix setting of the CP_PREEMPT_ENABLE_LOCAL register drm/msm/a5xx: fix highest bank bit for a530 drm/msm/a5xx: fix the emptyness check in the preempt code drm/msm/a5xx: fix context faults during ring switch drm/msm/dpu: fix len of sc7180 ctl blocks

Edward Humes (1):
alpha: fix R_ALPHA_LITERAL reloc for large modules

Eric Biggers (1):
ext4: fix cgroup writeback accounting with fs-layer encryption

Eric Dumazet (3):
ila: do not generate empty messages in ila_xlat_nl_cmd_get_mapping()
netfilter: conntrack: adopt safer max chain length
af_unix: fix struct pid leaks in OOB support

Eric Whitney (1):
ext4: fix RENAME_WHITEOUT handling for inline directories

Fedor Pchelkin (1):
nfc: change order inside nfc_se_io error path

Florian Westphal (1):
netfilter: tproxy: fix deadlock due to missing BH disable

Gaosheng Cui (1):
xfs: remove xfs_setattr_time() declaration

Gavrilov Ilia (1):
iommu/amd: Add a length limitation for the ivrs_acpihid command-line parameter

Greg Kroah-Hartman (2):
powerpc/iommu: fix memory leak with using debugfs_lookup() Linux 5.15.103

Hangbin Liu (1):
selftests: nft_nat: ensuring the listening side is up before starting the client

Hannes Braun (1):
staging: rtl8723bs: fix placement of braces

Hans de Goede (2):
staging: rtl8723bs: Pass correct parameters to cfg80211_get_bss()
staging: rtl8723bs: Fix key-store index handling

Harry Wentland (1):
drm/connector: print max_requested_bpc in state debugfs

Heiko Carstens (1):
s390/ftrace: remove dead code

Heiner Kallweit (1):
net: phy: smsc: fix link up detection in forced irq mode

Ivan Delalande (1):
netfilter: ctnetlink: revert to dumping mark regardless of event type

Jacob Pan (1):
iommu/vt-d: Fix PASID directory pointer coherency

Jaegeuk Kim (3):
f2fs: avoid down_write on nat_tree_lock during checkpoint
f2fs: do not bother checkpoint by f2fs_get_node_info
f2fs: retry to update the inode page given data corruption

Jagath Jog J (1):
Staging: rtl8723bs: Placing opening { braces in previous line

Jan Kara (3):
udf: Fix off-by-one error when discarding preallocation
ext4: Fix possible corruption when moving a directory
ext4: Fix deadlock during directory rename

Jens Axboe (1):
brd: mark as nowait compatible

Jiri Slaby (SUSE) (1):
drm/nouveau/kms/nv50: fix nv50_wndw_new_ prototype

Johan Hovold (2):
irqdomain: Refactor __irq_domain_alloc_irqs()
irqdomain: Fix mapping-creation race

Johannes Thumshirn (1):
btrfs: fix percent calculation for bg reclaim message

Kang Chen (1):
nfc: fdp: add null check of devm_kmalloc_array in fdp_nci_i2c_read_device_properties

Kim Phillips (1):
iommu/amd: Fix ill-formed ivrs_ioapic, ivrs_hpet and ivrs_acpihid options

Kuniyuki Iwashima (1):
af_unix: Remove unnecessary brackets around CONFIG_AF_UNIX_OOB.

Li Jun (1):
media: rc: gpio-ir-recv: add remove function

Liao Chang (1):
riscv: Add header include guards to insn.h

Liu Jian (1):
bpf, sockmap: Fix an infinite loop error when len is 0 in tcp_bpf_recvmsg_parser()

Lorenz Bauer (1):
btf: fix resolving BTF_KIND_VAR after ARRAY, STRUCT, UNION, PTR

Luis Chamberlain (1):
block/brd: add error handling support for add_disk()

Lukas Czerner (1):
ext4: block range must be validated before use in ext4_mb_clear_bb()

Lukas Wunner (1):
net: phy: smsc: Cache interrupt mask

Mark Brown (1):
regulator: Flag uncontrollable regulators as always_on

Masahiro Yamada (4):
scripts: handle BrokenPipeError for python scripts
arch: fix broken BuildID for arm64 and riscv
s390: define RUNTIME_DISCARD_EXIT to fix link error with GNU ld < 2.36
UML: define RUNTIME_DISCARD_EXIT

Matthias Kaehlcke (1):
regulator: core: Use ktime_get_boottime() to determine how long a regulator was off

Mattias Nissler (1):
riscv: Avoid enabling interrupts in die()

Miaohe Lin (1):
KVM: fix memoryleak in kvm_init()

Michael Chan (1):
bnxt_en: Avoid order-5 memory allocation for TPA data

Michael Ellerman (2):
powerpc/vmlinux.lds: Define RUNTIME_DISCARD_EXIT powerpc/vmlinux.lds: Don't discard .rela* for relocatable builds

Michael Straube (1):
staging: rtl8723bs: clean up comparsions to NULL

Morten Linderud (1):
tpm/eventlog: Don't abort tpm_read_log on faulty ACPI address

Namhyung Kim (1):
perf inject: Fix --buildid-all not to eat up MMAP2

Nathan Chancellor (1):
macintosh: windfarm: Use unsigned type for 1-bit bitfields

Nick Desaulniers (1):

      Makefile: use -gdwarf-{4|5} for assembler for DEBUG_INFO_DWARF{4|5}

Palmer Dabbelt (1):
RISC-V: Avoid dereferening NULL regs in die()

Paul Elder (1):
media: ov5640: Fix analogue gain control

Petr Oros (1):
ice: copy last block omitted in ice_get_module_eeprom()

Pierre Gondois (1):
arm64: efi: Make efi_rt_lock a raw_spinlock

Rafał Miłecki (1):
bgmac: fix *initial* chip reset to support BCM5358

Randy Dunlap (1):
platform: x86: MLX_PLATFORM: select REGMAP instead of depending on it

Ritesh Harjani (3):
ext4: refactor ext4_free_blocks() to pull out ext4_mb_clear_bb()
ext4: add ext4_sb_block_valid() refactored out of ext4_inode_block_valid()
ext4: add strict range checks while freeing blocks

Rob Clark (1):
drm/msm: Fix potential invalid ptr free

Rohan McLure (1):
powerpc/kcsan: Exclude udelay to prevent recursive instrumentation

Rongguang Wei (1):
net: stmmac: add to set device wake up flag when stmmac init phy

Russell King (Oracle) (1):
net: phylib: get rid of unnecessary locking

Sean Christopherson (3):
KVM: Register /dev/kvm as the _very_ last thing during initialization
KVM: SVM: Don't rewrite guest ICR on AVIC IPI virtualization failure
KVM: SVM: Process ICR on AVIC IPI delivery failure due to invalid target

Seth Forshee (1):
filelocks: use mount idmapping for setlease permission check

Shigeru Yoshida (1):
net: caif: Fix use-after-free in cfusbl_device_notify()

Suman Ghosh (1):
octeontx2-af: Unlock contexts in the queue context cache in case of fault detection

Suravee Suthikulpanit (1):
iommu/amd: Add PCI segment support for ivrs_[ioapic/hpet/acpihid] commands

Theodore Ts'o (1):
fs: prevent out-of-bounds array speculation when closing a file descriptor

Tobias Klauser (1):
fork: allow CLONE_NEWTIME in clone3 flags

Tom Saeger (1):
sh: define RUNTIME_DISCARD_EXIT

Vitaly Kuznetsov (4):
KVM: Optimize kvm_make_vcpus_request_mask() a bit
KVM: Pre-allocate cpumasks for kvm_make_all_cpus_request_except()
KVM: nVMX: Don't use Enlightened MSR Bitmap for L3
KVM: VMX: Introduce vmx_msr_bitmap_l01_changed() helper

Vladimir Oltean (2):
powerpc: dts: t1040rdb: fix compatible string for Rev A boards
net: dsa: mt7530: permit port 5 to work without port 6 on MT7621 SoC

Yang Xu (2):
fs: add mode_strip_sgid() helper
fs: move S_ISGID stripping into the vfs_*() helpers

Ye Bin (2):
ext4: move where set the MAY_INLINE_DATA flag is set
ext4: fix WARNING in ext4_update_inline_data

Yuiko Oshino (1):
net: lan78xx: fix accessing the LAN7800's internal phy specific registers from the MAC driver

Zhihao Cheng (1):
ext4: zero i_disksize when initializing the bootloader inode

xurui (1):
MIPS: Fix a compilation issue

author maintainer
#1 lore raw
Documentation/admin-guide/kernel-parameters.txt +42 -9
index bcb102c91b19..4dbbc9531669 100644
@@ -2200,24 +2200,57 @@
 
 	ivrs_ioapic	[HW,X86-64]
 			Provide an override to the IOAPIC-ID<->DEVICE-ID
-			mapping provided in the IVRS ACPI table. For
-			example, to map IOAPIC-ID decimal 10 to
-			PCI device 00:14.0 write the parameter as:
+			mapping provided in the IVRS ACPI table.
+			By default, PCI segment is 0, and can be omitted.
+
+			For example, to map IOAPIC-ID decimal 10 to
+			PCI segment 0x1 and PCI device 00:14.0,
+			write the parameter as:
+				ivrs_ioapic=10@0001:00:14.0
+
+			Deprecated formats:
+			* To map IOAPIC-ID decimal 10 to PCI device 00:14.0
+			  write the parameter as:
 				ivrs_ioapic[10]=00:14.0
+			* To map IOAPIC-ID decimal 10 to PCI segment 0x1 and
+			  PCI device 00:14.0 write the parameter as:
+				ivrs_ioapic[10]=0001:00:14.0
 
 	ivrs_hpet	[HW,X86-64]
 			Provide an override to the HPET-ID<->DEVICE-ID
-			mapping provided in the IVRS ACPI table. For
-			example, to map HPET-ID decimal 0 to
-			PCI device 00:14.0 write the parameter as:
+			mapping provided in the IVRS ACPI table.
+			By default, PCI segment is 0, and can be omitted.
+
+			For example, to map HPET-ID decimal 10 to
+			PCI segment 0x1 and PCI device 00:14.0,
+			write the parameter as:
+				ivrs_hpet=10@0001:00:14.0
+
+			Deprecated formats:
+			* To map HPET-ID decimal 0 to PCI device 00:14.0
+			  write the parameter as:
 				ivrs_hpet[0]=00:14.0
+			* To map HPET-ID decimal 10 to PCI segment 0x1 and
+			  PCI device 00:14.0 write the parameter as:
+				ivrs_ioapic[10]=0001:00:14.0
 
 	ivrs_acpihid	[HW,X86-64]
 			Provide an override to the ACPI-HID:UID<->DEVICE-ID
-			mapping provided in the IVRS ACPI table. For
-			example, to map UART-HID:UID AMD0020:0 to
-			PCI device 00:14.5 write the parameter as:
+			mapping provided in the IVRS ACPI table.
+			By default, PCI segment is 0, and can be omitted.
+
+			For example, to map UART-HID:UID AMD0020:0 to
+			PCI segment 0x1 and PCI device ID 00:14.5,
+			write the parameter as:
+				ivrs_acpihid=AMD0020:0@0001:00:14.5
+
+			Deprecated formats:
+			* To map UART-HID:UID AMD0020:0 to PCI segment is 0,
+			  PCI device ID 00:14.5, write the parameter as:
 				ivrs_acpihid[00:14.5]=AMD0020:0
+			* To map UART-HID:UID AMD0020:0 to PCI segment 0x1 and
+			  PCI device ID 00:14.5, write the parameter as:
+				ivrs_acpihid[0001:00:14.5]=AMD0020:0
 
 	js=		[HW,JOY] Analog joystick
 			See Documentation/input/joydev/joystick.rst.
Documentation/trace/ftrace.rst +1 -1
index 4e5b26f03d5b..d036946bce7a 100644
@@ -2929,7 +2929,7 @@ Produces::
               bash-1994  [000] ....  4342.324898: ima_get_action <-process_measurement
               bash-1994  [000] ....  4342.324898: ima_match_policy <-ima_get_action
               bash-1994  [000] ....  4342.324899: do_truncate <-do_last
-              bash-1994  [000] ....  4342.324899: should_remove_suid <-do_truncate
+              bash-1994  [000] ....  4342.324899: setattr_should_drop_suidgid <-do_truncate
               bash-1994  [000] ....  4342.324899: notify_change <-do_truncate
               bash-1994  [000] ....  4342.324900: current_fs_time <-notify_change
               bash-1994  [000] ....  4342.324900: current_kernel_time <-current_fs_time
Makefile +2 -1
index a7b664680ea3..75acfd6c0cf2 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 15
-SUBLEVEL = 102
+SUBLEVEL = 103
 EXTRAVERSION =
 NAME = Trick or Treat
 
@@ -888,6 +888,7 @@ ifndef CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
 dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4
 dwarf-version-$(CONFIG_DEBUG_INFO_DWARF5) := 5
 DEBUG_CFLAGS	+= -gdwarf-$(dwarf-version-y)
+KBUILD_AFLAGS	+= -gdwarf-$(dwarf-version-y)
 endif
 
 ifdef CONFIG_DEBUG_INFO_REDUCED
arch/alpha/kernel/module.c +1 -3
index 5b60c248de9e..cbefa5a77384 100644
@@ -146,10 +146,8 @@ apply_relocate_add(Elf64_Shdr *sechdrs, const char *strtab,
 	base = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr;
 	symtab = (Elf64_Sym *)sechdrs[symindex].sh_addr;
 
-	/* The small sections were sorted to the end of the segment.
-	   The following should definitely cover them.  */
-	gp = (u64)me->core_layout.base + me->core_layout.size - 0x8000;
 	got = sechdrs[me->arch.gotsecindex].sh_addr;
+	gp = got + 0x8000;
 
 	for (i = 0; i < n; i++) {
 		unsigned long r_sym = ELF64_R_SYM (rela[i].r_info);
arch/arm64/include/asm/efi.h +3 -3
index c5d4551a1be7..53cbbb96f7eb 100644
@@ -25,7 +25,7 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);
 ({									\
 	efi_virtmap_load();						\
 	__efi_fpsimd_begin();						\
-	spin_lock(&efi_rt_lock);					\
+	raw_spin_lock(&efi_rt_lock);					\
 })
 
 #define arch_efi_call_virt(p, f, args...)				\
@@ -37,12 +37,12 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);
 
 #define arch_efi_call_virt_teardown()					\
 ({									\
-	spin_unlock(&efi_rt_lock);					\
+	raw_spin_unlock(&efi_rt_lock);					\
 	__efi_fpsimd_end();						\
 	efi_virtmap_unload();						\
 })
 
-extern spinlock_t efi_rt_lock;
+extern raw_spinlock_t efi_rt_lock;
 efi_status_t __efi_rt_asm_wrapper(void *, const char *, ...);
 
 #define ARCH_EFI_IRQ_FLAGS_MASK (PSR_D_BIT | PSR_A_BIT | PSR_I_BIT | PSR_F_BIT)
arch/arm64/kernel/efi.c +1 -1
index 386bd81ca12b..9669f3fa2aef 100644
@@ -145,7 +145,7 @@ asmlinkage efi_status_t efi_handle_corrupted_x18(efi_status_t s, const char *f)
 	return s;
 }
 
-DEFINE_SPINLOCK(efi_rt_lock);
+DEFINE_RAW_SPINLOCK(efi_rt_lock);
 
 asmlinkage u64 *efi_rt_stack_top __ro_after_init;
 
arch/mips/include/asm/mach-rc32434/pci.h +1 -1
index 9a6eefd12757..3eb767c8a4ee 100644
@@ -374,7 +374,7 @@ struct pci_msu {
 				 PCI_CFG04_STAT_SSE | \
 				 PCI_CFG04_STAT_PE)
 
-#define KORINA_CNFG1		((KORINA_STAT<<16)|KORINA_CMD)
+#define KORINA_CNFG1		(KORINA_STAT | KORINA_CMD)
 
 #define KORINA_REVID		0
 #define KORINA_CLASS_CODE	0
arch/powerpc/boot/dts/fsl/t1040rdb-rev-a.dts +0 -1
index 73f8c998c64d..d4f5f159d6f2 100644
@@ -10,7 +10,6 @@
 
 / {
 	model = "fsl,T1040RDB-REV-A";
-	compatible = "fsl,T1040RDB-REV-A";
 };
 
 &seville_port0 {
arch/powerpc/kernel/iommu.c +1 -3
index a67fd54ccc57..8bea336fa5b7 100644
@@ -68,11 +68,9 @@ static void iommu_debugfs_add(struct iommu_table *tbl)
 static void iommu_debugfs_del(struct iommu_table *tbl)
 {
 	char name[10];
-	struct dentry *liobn_entry;
 
 	sprintf(name, "%08lx", tbl->it_index);
-	liobn_entry = debugfs_lookup(name, iommu_debugfs_dir);
-	debugfs_remove(liobn_entry);
+	debugfs_lookup_and_remove(name, iommu_debugfs_dir);
 }
 #else
 static void iommu_debugfs_add(struct iommu_table *tbl){}
arch/powerpc/kernel/time.c +2 -2
index 934d8ae66cc6..4406d7a89558 100644
@@ -450,7 +450,7 @@ void vtime_flush(struct task_struct *tsk)
 #define calc_cputime_factors()
 #endif
 
-void __delay(unsigned long loops)
+void __no_kcsan __delay(unsigned long loops)
 {
 	unsigned long start;
 
@@ -471,7 +471,7 @@ void __delay(unsigned long loops)
 }
 EXPORT_SYMBOL(__delay);
 
-void udelay(unsigned long usecs)
+void __no_kcsan udelay(unsigned long usecs)
 {
 	__delay(tb_ticks_per_usec * usecs);
 }
arch/powerpc/kernel/vmlinux.lds.S +5 -1
index a664d0c4344a..d4531902d8c6 100644
@@ -8,6 +8,7 @@
 #define BSS_FIRST_SECTIONS *(.bss.prominit)
 #define EMITS_PT_NOTE
 #define RO_EXCEPTION_TABLE_ALIGN	0
+#define RUNTIME_DISCARD_EXIT
 
 #define SOFT_MASK_TABLE(align)						\
 	. = ALIGN(align);						\
@@ -407,9 +408,12 @@ SECTIONS
 	DISCARDS
 	/DISCARD/ : {
 		*(*.EMB.apuinfo)
-		*(.glink .iplt .plt .rela* .comment)
+		*(.glink .iplt .plt .comment)
 		*(.gnu.version*)
 		*(.gnu.attributes)
 		*(.eh_frame)
+#ifndef CONFIG_RELOCATABLE
+		*(.rela*)
+#endif
 	}
 }
arch/riscv/include/asm/ftrace.h +1 -1
index 9e73922e1e2e..d47d87c2d7e3 100644
@@ -109,6 +109,6 @@ int ftrace_init_nop(struct module *mod, struct dyn_ftrace *rec);
 #define ftrace_init_nop ftrace_init_nop
 #endif
 
-#endif
+#endif /* CONFIG_DYNAMIC_FTRACE */
 
 #endif /* _ASM_RISCV_FTRACE_H */
arch/riscv/include/asm/parse_asm.h +5 -0
index f36368de839f..3cd00332d70f 100644
@@ -3,6 +3,9 @@
  * Copyright (C) 2020 SiFive
  */
 
+#ifndef _ASM_RISCV_INSN_H
+#define _ASM_RISCV_INSN_H
+
 #include <linux/bits.h>
 
 /* The bit field of immediate value in I-type instruction */
@@ -217,3 +220,5 @@ static inline bool is_ ## INSN_NAME ## _insn(long insn) \
 	(RVC_X(x_, RVC_B_IMM_5_OPOFF, RVC_B_IMM_5_MASK) << RVC_B_IMM_5_OFF) | \
 	(RVC_X(x_, RVC_B_IMM_7_6_OPOFF, RVC_B_IMM_7_6_MASK) << RVC_B_IMM_7_6_OFF) | \
 	(RVC_IMM_SIGN(x_) << RVC_B_IMM_SIGN_OFF); })
+
+#endif /* _ASM_RISCV_INSN_H */
arch/riscv/include/asm/patch.h +2 -0
index 9a7d7346001e..98d9de07cba1 100644
@@ -9,4 +9,6 @@
 int patch_text_nosync(void *addr, const void *insns, size_t len);
 int patch_text(void *addr, u32 insn);
 
+extern int riscv_patch_in_stop_machine;
+
 #endif /* _ASM_RISCV_PATCH_H */
arch/riscv/kernel/ftrace.c +12 -2
index 47b43d8ee9a6..1bf92cfa6764 100644
@@ -15,11 +15,21 @@
 int ftrace_arch_code_modify_prepare(void) __acquires(&text_mutex)
 {
 	mutex_lock(&text_mutex);
+
+	/*
+	 * The code sequences we use for ftrace can't be patched while the
+	 * kernel is running, so we need to use stop_machine() to modify them
+	 * for now.  This doesn't play nice with text_mutex, we use this flag
+	 * to elide the check.
+	 */
+	riscv_patch_in_stop_machine = true;
+
 	return 0;
 }
 
 int ftrace_arch_code_modify_post_process(void) __releases(&text_mutex)
 {
+	riscv_patch_in_stop_machine = false;
 	mutex_unlock(&text_mutex);
 	return 0;
 }
@@ -109,9 +119,9 @@ int ftrace_init_nop(struct module *mod, struct dyn_ftrace *rec)
 {
 	int out;
 
-	ftrace_arch_code_modify_prepare();
+	mutex_lock(&text_mutex);
 	out = ftrace_make_nop(mod, rec, MCOUNT_ADDR);
-	ftrace_arch_code_modify_post_process();
+	mutex_unlock(&text_mutex);
 
 	return out;
 }
arch/riscv/kernel/patch.c +25 -3
index 765004b60513..e099961453cc 100644
@@ -11,6 +11,7 @@
 #include <asm/kprobes.h>
 #include <asm/cacheflush.h>
 #include <asm/fixmap.h>
+#include <asm/ftrace.h>
 #include <asm/patch.h>
 
 struct patch_insn {
@@ -19,6 +20,8 @@ struct patch_insn {
 	atomic_t cpu_count;
 };
 
+int riscv_patch_in_stop_machine = false;
+
 #ifdef CONFIG_MMU
 /*
  * The fix_to_virt(, idx) needs a const value (not a dynamic variable of
@@ -59,8 +62,15 @@ static int patch_insn_write(void *addr, const void *insn, size_t len)
 	 * Before reaching here, it was expected to lock the text_mutex
 	 * already, so we don't need to give another lock here and could
 	 * ensure that it was safe between each cores.
+	 *
+	 * We're currently using stop_machine() for ftrace & kprobes, and while
+	 * that ensures text_mutex is held before installing the mappings it
+	 * does not ensure text_mutex is held by the calling thread.  That's
+	 * safe but triggers a lockdep failure, so just elide it for that
+	 * specific case.
 	 */
-	lockdep_assert_held(&text_mutex);
+	if (!riscv_patch_in_stop_machine)
+		lockdep_assert_held(&text_mutex);
 
 	if (across_pages)
 		patch_map(addr + len, FIX_TEXT_POKE1);
@@ -121,13 +131,25 @@ NOKPROBE_SYMBOL(patch_text_cb);
 
 int patch_text(void *addr, u32 insn)
 {
+	int ret;
 	struct patch_insn patch = {
 		.addr = addr,
 		.insn = insn,
 		.cpu_count = ATOMIC_INIT(0),
 	};
 
-	return stop_machine_cpuslocked(patch_text_cb,
-				       &patch, cpu_online_mask);
+	/*
+	 * kprobes takes text_mutex, before calling patch_text(), but as we call
+	 * calls stop_machine(), the lockdep assertion in patch_insn_write()
+	 * gets confused by the context in which the lock is taken.
+	 * Instead, ensure the lock is held before calling stop_machine(), and
+	 * set riscv_patch_in_stop_machine to skip the check in
+	 * patch_insn_write().
+	 */
+	lockdep_assert_held(&text_mutex);
+	riscv_patch_in_stop_machine = true;
+	ret = stop_machine_cpuslocked(patch_text_cb, &patch, cpu_online_mask);
+	riscv_patch_in_stop_machine = false;
+	return ret;
 }
 NOKPROBE_SYMBOL(patch_text);
arch/riscv/kernel/stacktrace.c +1 -1
index ee8ef91c8aaf..894ae66421a7 100644
@@ -94,7 +94,7 @@ void notrace walk_stackframe(struct task_struct *task,
 	while (!kstack_end(ksp)) {
 		if (__kernel_text_address(pc) && unlikely(!fn(arg, pc)))
 			break;
-		pc = (*ksp++) - 0x4;
+		pc = READ_ONCE_NOCHECK(*ksp++) - 0x4;
 	}
 }
 
arch/riscv/kernel/traps.c +9 -5
index 6084bd93d2f5..4f38b3c47e6d 100644
@@ -33,25 +33,29 @@ void die(struct pt_regs *regs, const char *str)
 {
 	static int die_counter;
 	int ret;
+	long cause;
+	unsigned long flags;
 
 	oops_enter();
 
-	spin_lock_irq(&die_lock);
+	spin_lock_irqsave(&die_lock, flags);
 	console_verbose();
 	bust_spinlocks(1);
 
 	pr_emerg("%s [#%d]\n", str, ++die_counter);
 	print_modules();
-	show_regs(regs);
+	if (regs)
+		show_regs(regs);
 
-	ret = notify_die(DIE_OOPS, str, regs, 0, regs->cause, SIGSEGV);
+	cause = regs ? regs->cause : -1;
+	ret = notify_die(DIE_OOPS, str, regs, 0, cause, SIGSEGV);
 
-	if (regs && kexec_should_crash(current))
+	if (kexec_should_crash(current))
 		crash_kexec(regs);
 
 	bust_spinlocks(0);
 	add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
-	spin_unlock_irq(&die_lock);
+	spin_unlock_irqrestore(&die_lock, flags);
 	oops_exit();
 
 	if (in_interrupt())
arch/s390/kernel/ftrace.c +6 -80

134 lines not on this page · raw message

arch/s390/kernel/vmlinux.lds.S +2 -0
index 29059a1aed53..853b80770c6d 100644
@@ -17,6 +17,8 @@
 /* Handle ro_after_init data on our own. */
 #define RO_AFTER_INIT_DATA
 
+#define RUNTIME_DISCARD_EXIT
+
 #define EMITS_PT_NOTE
 
 #include <asm-generic/vmlinux.lds.h>
arch/sh/kernel/vmlinux.lds.S +1 -0
index 3161b9ccd2a5..b6276a3521d7 100644
@@ -4,6 +4,7 @@
  * Written by Niibe Yutaka and Paul Mundt
  */
 OUTPUT_ARCH(sh)
+#define RUNTIME_DISCARD_EXIT
 #include <asm/thread_info.h>
 #include <asm/cache.h>
 #include <asm/vmlinux.lds.h>
arch/um/kernel/vmlinux.lds.S +1 -1
index 16e49bfa2b42..53d719c04ba9 100644
@@ -1,4 +1,4 @@
-
+#define RUNTIME_DISCARD_EXIT
 KERNEL_STACK_SIZE = 4096 * (1 << CONFIG_KERNEL_STACK_ORDER);
 
 #ifdef CONFIG_LD_SCRIPT_STATIC
arch/x86/kernel/cpu/amd.c +9 -0
index c30e32097fb1..83bf26eaff2e 100644
@@ -904,6 +904,15 @@ void init_spectral_chicken(struct cpuinfo_x86 *c)
 		}
 	}
 #endif
+	/*
+	 * Work around Erratum 1386.  The XSAVES instruction malfunctions in
+	 * certain circumstances on Zen1/2 uarch, and not all parts have had
+	 * updated microcode at the time of writing (March 2023).
+	 *
+	 * Affected parts all have no supervisor XSAVE states, meaning that
+	 * the XSAVEC instruction (which works fine) is equivalent.
+	 */
+	clear_cpu_cap(c, X86_FEATURE_XSAVES);
 }
 
 static void init_amd_zn(struct cpuinfo_x86 *c)
arch/x86/kvm/lapic.c +1 -0
index 25530a908b4c..8c9e41ff2a24 100644
@@ -1295,6 +1295,7 @@ void kvm_apic_send_ipi(struct kvm_lapic *apic, u32 icr_low, u32 icr_high)
 
 	kvm_irq_delivery_to_apic(apic->vcpu->kvm, apic, &irq, NULL);
 }
+EXPORT_SYMBOL_GPL(kvm_apic_send_ipi);
 
 static u32 apic_get_tmcct(struct kvm_lapic *apic)
 {
arch/x86/kvm/svm/avic.c +15 -13
index 3d3f8dfb8045..b595a33860d7 100644
@@ -318,20 +318,24 @@ int avic_incomplete_ipi_interception(struct kvm_vcpu *vcpu)
 	trace_kvm_avic_incomplete_ipi(vcpu->vcpu_id, icrh, icrl, id, index);
 
 	switch (id) {
+	case AVIC_IPI_FAILURE_INVALID_TARGET:
 	case AVIC_IPI_FAILURE_INVALID_INT_TYPE:
 		/*
-		 * AVIC hardware handles the generation of
-		 * IPIs when the specified Message Type is Fixed
-		 * (also known as fixed delivery mode) and
-		 * the Trigger Mode is edge-triggered. The hardware
-		 * also supports self and broadcast delivery modes
-		 * specified via the Destination Shorthand(DSH)
-		 * field of the ICRL. Logical and physical APIC ID
-		 * formats are supported. All other IPI types cause
-		 * a #VMEXIT, which needs to emulated.
+		 * Emulate IPIs that are not handled by AVIC hardware, which
+		 * only virtualizes Fixed, Edge-Triggered INTRs, and falls over
+		 * if _any_ targets are invalid, e.g. if the logical mode mask
+		 * is a superset of running vCPUs.
+		 *
+		 * The exit is a trap, e.g. ICR holds the correct value and RIP
+		 * has been advanced, KVM is responsible only for emulating the
+		 * IPI.  Sadly, hardware may sometimes leave the BUSY flag set,
+		 * in which case KVM needs to emulate the ICR write as well in
+		 * order to clear the BUSY flag.
 		 */
-		kvm_lapic_reg_write(apic, APIC_ICR2, icrh);
-		kvm_lapic_reg_write(apic, APIC_ICR, icrl);
+		if (icrl & APIC_ICR_BUSY)
+			kvm_apic_write_nodecode(vcpu, APIC_ICR);
+		else
+			kvm_apic_send_ipi(apic, icrl, icrh);
 		break;
 	case AVIC_IPI_FAILURE_TARGET_NOT_RUNNING:
 		/*
@@ -341,8 +345,6 @@ int avic_incomplete_ipi_interception(struct kvm_vcpu *vcpu)
 		 */
 		avic_kick_target_vcpus(vcpu->kvm, apic, icrl, icrh);
 		break;
-	case AVIC_IPI_FAILURE_INVALID_TARGET:
-		break;
 	case AVIC_IPI_FAILURE_INVALID_BACKING_PAGE:
 		WARN_ONCE(1, "Invalid backing page\n");
 		break;
arch/x86/kvm/vmx/evmcs.h +0 -11
index b43976e4b963..57451cf622d3 100644
@@ -162,16 +162,6 @@ static inline u16 evmcs_read16(unsigned long field)
 	return *(u16 *)((char *)current_evmcs + offset);
 }
 
-static inline void evmcs_touch_msr_bitmap(void)
-{
-	if (unlikely(!current_evmcs))
-		return;
-
-	if (current_evmcs->hv_enlightenments_control.msr_bitmap)
-		current_evmcs->hv_clean_fields &=
-			~HV_VMX_ENLIGHTENED_CLEAN_FIELD_MSR_BITMAP;
-}
-
 static inline void evmcs_load(u64 phys_addr)
 {
 	struct hv_vp_assist_page *vp_ap =
@@ -192,7 +182,6 @@ static inline u64 evmcs_read64(unsigned long field) { return 0; }
 static inline u32 evmcs_read32(unsigned long field) { return 0; }
 static inline u16 evmcs_read16(unsigned long field) { return 0; }
 static inline void evmcs_load(u64 phys_addr) {}
-static inline void evmcs_touch_msr_bitmap(void) {}
 #endif /* IS_ENABLED(CONFIG_HYPERV) */
 
 #define EVMPTR_INVALID (-1ULL)
arch/x86/kvm/vmx/vmx.c +31 -13

74 lines not on this page · raw message

drivers/block/brd.c +8 -2
index 2427b2261e51..76ce6f766d55 100644
@@ -370,6 +370,7 @@ static int brd_alloc(int i)
 	struct brd_device *brd;
 	struct gendisk *disk;
 	char buf[DISK_NAME_LEN];
+	int err = -ENOMEM;
 
 	mutex_lock(&brd_devices_mutex);
 	list_for_each_entry(brd, &brd_devices, brd_list) {
@@ -420,16 +421,21 @@ static int brd_alloc(int i)
 	/* Tell the block layer that this is not a rotational device */
 	blk_queue_flag_set(QUEUE_FLAG_NONROT, disk->queue);
 	blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, disk->queue);
-	add_disk(disk);
+	blk_queue_flag_set(QUEUE_FLAG_NOWAIT, disk->queue);
+	err = add_disk(disk);
+	if (err)
+		goto out_cleanup_disk;
 
 	return 0;
 
+out_cleanup_disk:
+	blk_cleanup_disk(disk);
 out_free_dev:
 	mutex_lock(&brd_devices_mutex);
 	list_del(&brd->brd_list);
 	mutex_unlock(&brd_devices_mutex);
 	kfree(brd);
-	return -ENOMEM;
+	return err;
 }
 
 static void brd_probe(dev_t dev)
drivers/block/nbd.c +7 -7
index c1ef1df42eb6..ade8b839e445 100644
@@ -1167,11 +1167,11 @@ static int nbd_reconnect_socket(struct nbd_device *nbd, unsigned long arg)
 	return -ENOSPC;
 }
 
-static void nbd_bdev_reset(struct block_device *bdev)
+static void nbd_bdev_reset(struct nbd_device *nbd)
 {
-	if (bdev->bd_openers > 1)
+	if (nbd->disk->part0->bd_openers > 1)
 		return;
-	set_capacity(bdev->bd_disk, 0);
+	set_capacity(nbd->disk, 0);
 }
 
 static void nbd_parse_flags(struct nbd_device *nbd)
@@ -1337,7 +1337,7 @@ static int nbd_start_device(struct nbd_device *nbd)
 	return nbd_set_size(nbd, config->bytesize, nbd_blksize(config));
 }
 
-static int nbd_start_device_ioctl(struct nbd_device *nbd, struct block_device *bdev)
+static int nbd_start_device_ioctl(struct nbd_device *nbd)
 {
 	struct nbd_config *config = nbd->config;
 	int ret;
@@ -1358,7 +1358,7 @@ static int nbd_start_device_ioctl(struct nbd_device *nbd, struct block_device *b
 
 	flush_workqueue(nbd->recv_workq);
 	mutex_lock(&nbd->config_lock);
-	nbd_bdev_reset(bdev);
+	nbd_bdev_reset(nbd);
 	/* user requested, ignore socket errors */
 	if (test_bit(NBD_RT_DISCONNECT_REQUESTED, &config->runtime_flags))
 		ret = 0;
@@ -1372,7 +1372,7 @@ static void nbd_clear_sock_ioctl(struct nbd_device *nbd,
 {
 	nbd_clear_sock(nbd);
 	__invalidate_device(bdev, true);
-	nbd_bdev_reset(bdev);
+	nbd_bdev_reset(nbd);
 	if (test_and_clear_bit(NBD_RT_HAS_CONFIG_REF,
 			       &nbd->config->runtime_flags))
 		nbd_config_put(nbd);
@@ -1418,7 +1418,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
 		config->flags = arg;
 		return 0;
 	case NBD_DO_IT:
-		return nbd_start_device_ioctl(nbd, bdev);
+		return nbd_start_device_ioctl(nbd);
 	case NBD_CLEAR_QUE:
 		/*
 		 * This is for compatibility only.  The queue is always cleared
drivers/char/ipmi/ipmi_ssif.c +27 -7
index 427bf618c447..20dc2452815c 100644
@@ -74,7 +74,8 @@
 /*
  * Timer values
  */
-#define SSIF_MSG_USEC		20000	/* 20ms between message tries. */
+#define SSIF_MSG_USEC		60000	/* 60ms between message tries (T3). */
+#define SSIF_REQ_RETRY_USEC	60000	/* 60ms between send retries (T6). */
 #define SSIF_MSG_PART_USEC	5000	/* 5ms for a message part */
 
 /* How many times to we retry sending/receiving the message. */
@@ -82,7 +83,9 @@
 #define	SSIF_RECV_RETRIES	250
 
 #define SSIF_MSG_MSEC		(SSIF_MSG_USEC / 1000)
+#define SSIF_REQ_RETRY_MSEC	(SSIF_REQ_RETRY_USEC / 1000)
 #define SSIF_MSG_JIFFIES	((SSIF_MSG_USEC * 1000) / TICK_NSEC)
+#define SSIF_REQ_RETRY_JIFFIES	((SSIF_REQ_RETRY_USEC * 1000) / TICK_NSEC)
 #define SSIF_MSG_PART_JIFFIES	((SSIF_MSG_PART_USEC * 1000) / TICK_NSEC)
 
 /*
@@ -229,6 +232,9 @@ struct ssif_info {
 	bool		    got_alert;
 	bool		    waiting_alert;
 
+	/* Used to inform the timeout that it should do a resend. */
+	bool		    do_resend;
+
 	/*
 	 * If set to true, this will request events the next time the
 	 * state machine is idle.
@@ -538,22 +544,28 @@ static void start_get(struct ssif_info *ssif_info)
 		  ssif_info->recv, I2C_SMBUS_BLOCK_DATA);
 }
 
+static void start_resend(struct ssif_info *ssif_info);
+
 static void retry_timeout(struct timer_list *t)
 {
 	struct ssif_info *ssif_info = from_timer(ssif_info, t, retry_timer);
 	unsigned long oflags, *flags;
-	bool waiting;
+	bool waiting, resend;
 
 	if (ssif_info->stopping)
 		return;
 
 	flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
+	resend = ssif_info->do_resend;
+	ssif_info->do_resend = false;
 	waiting = ssif_info->waiting_alert;
 	ssif_info->waiting_alert = false;
 	ipmi_ssif_unlock_cond(ssif_info, flags);
 
 	if (waiting)
 		start_get(ssif_info);
+	if (resend)
+		start_resend(ssif_info);
 }
 
 static void watch_timeout(struct timer_list *t)
@@ -602,8 +614,6 @@ static void ssif_alert(struct i2c_client *client, enum i2c_alert_protocol type,
 		start_get(ssif_info);
 }
 
-static void start_resend(struct ssif_info *ssif_info);
-
 static void msg_done_handler(struct ssif_info *ssif_info, int result,
 			     unsigned char *data, unsigned int len)
 {
@@ -909,7 +919,13 @@ static void msg_written_handler(struct ssif_info *ssif_info, int result,
 	if (result < 0) {
 		ssif_info->retries_left--;
 		if (ssif_info->retries_left > 0) {
-			start_resend(ssif_info);
+			/*
+			 * Wait the retry timeout time per the spec,
+			 * then redo the send.
+			 */
+			ssif_info->do_resend = true;
+			mod_timer(&ssif_info->retry_timer,
+				  jiffies + SSIF_REQ_RETRY_JIFFIES);
 			return;
 		}
 
@@ -1322,8 +1338,10 @@ static int do_cmd(struct i2c_client *client, int len, unsigned char *msg,
 	ret = i2c_smbus_write_block_data(client, SSIF_IPMI_REQUEST, len, msg);
 	if (ret) {
 		retry_cnt--;
-		if (retry_cnt > 0)
+		if (retry_cnt > 0) {
+			msleep(SSIF_REQ_RETRY_MSEC);
 			goto retry1;
+		}
 		return -ENODEV;
 	}
 
@@ -1464,8 +1482,10 @@ static int start_multipart_test(struct i2c_client *client,
 					 32, msg);
 	if (ret) {
 		retry_cnt--;
-		if (retry_cnt > 0)
+		if (retry_cnt > 0) {
+			msleep(SSIF_REQ_RETRY_MSEC);
 			goto retry_write;
+		}
 		dev_err(&client->dev, "Could not write multi-part start, though the BMC said it could handle it.  Just limit sends to one part.\n");
 		return ret;
 	}
drivers/char/tpm/eventlog/acpi.c +5 -1
index 0913d3eb8d51..cd266021d010 100644
@@ -143,8 +143,12 @@ int tpm_read_log_acpi(struct tpm_chip *chip)
 
 	ret = -EIO;
 	virt = acpi_os_map_iomem(start, len);
-	if (!virt)
+	if (!virt) {
+		dev_warn(&chip->dev, "%s: Failed to map ACPI memory\n", __func__);
+		/* try EFI log next */
+		ret = -ENODEV;
 		goto err;
+	}
 
 	memcpy_fromio(log->bios_event_log, virt, len);
 
drivers/gpu/drm/amd/amdgpu/soc15.c +3 -2
index 0cde8fb9e30d..529bb6c6ac6f 100644
@@ -461,8 +461,9 @@ static int soc15_read_register(struct amdgpu_device *adev, u32 se_num,
 	*value = 0;
 	for (i = 0; i < ARRAY_SIZE(soc15_allowed_read_registers); i++) {
 		en = &soc15_allowed_read_registers[i];
-		if (adev->reg_offset[en->hwip][en->inst] &&
-			reg_offset != (adev->reg_offset[en->hwip][en->inst][en->seg]
+		if (!adev->reg_offset[en->hwip][en->inst])
+			continue;
+		else if (reg_offset != (adev->reg_offset[en->hwip][en->inst][en->seg]
 					+ en->reg_offset))
 			continue;
 
drivers/gpu/drm/drm_atomic.c +1 -0
index a1e4c7905ebb..1fcb5f8aea20 100644
@@ -1052,6 +1052,7 @@ static void drm_atomic_connector_print_state(struct drm_printer *p,
 	drm_printf(p, "connector[%u]: %s\n", connector->base.id, connector->name);
 	drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : "(null)");
 	drm_printf(p, "\tself_refresh_aware=%d\n", state->self_refresh_aware);
+	drm_printf(p, "\tmax_requested_bpc=%d\n", state->max_requested_bpc);
 
 	if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK)
 		if (state->writeback_job && state->writeback_job->fb)
drivers/gpu/drm/msm/adreno/a5xx_gpu.c +3 -3
index 5e2750eb3810..b8c49ba65254 100644
@@ -153,8 +153,8 @@ static void a5xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
 	OUT_RING(ring, 1);
 
 	/* Enable local preemption for finegrain preemption */
-	OUT_PKT7(ring, CP_PREEMPT_ENABLE_GLOBAL, 1);
-	OUT_RING(ring, 0x02);
+	OUT_PKT7(ring, CP_PREEMPT_ENABLE_LOCAL, 1);
+	OUT_RING(ring, 0x1);
 
 	/* Allow CP_CONTEXT_SWITCH_YIELD packets in the IB2 */
 	OUT_PKT7(ring, CP_YIELD_ENABLE, 1);
@@ -801,7 +801,7 @@ static int a5xx_hw_init(struct msm_gpu *gpu)
 	gpu_write(gpu, REG_A5XX_RBBM_AHB_CNTL2, 0x0000003F);
 
 	/* Set the highest bank bit */
-	if (adreno_is_a540(adreno_gpu))
+	if (adreno_is_a540(adreno_gpu) || adreno_is_a530(adreno_gpu))
 		regbit = 2;
 	else
 		regbit = 1;
drivers/gpu/drm/msm/adreno/a5xx_preempt.c +2 -2
index 8abc9a2b114a..e0eef47dae63 100644
@@ -63,7 +63,7 @@ static struct msm_ringbuffer *get_next_ring(struct msm_gpu *gpu)
 		struct msm_ringbuffer *ring = gpu->rb[i];
 
 		spin_lock_irqsave(&ring->preempt_lock, flags);
-		empty = (get_wptr(ring) == ring->memptrs->rptr);
+		empty = (get_wptr(ring) == gpu->funcs->get_rptr(gpu, ring));
 		spin_unlock_irqrestore(&ring->preempt_lock, flags);
 
 		if (!empty)
@@ -208,6 +208,7 @@ void a5xx_preempt_hw_init(struct msm_gpu *gpu)
 		a5xx_gpu->preempt[i]->wptr = 0;
 		a5xx_gpu->preempt[i]->rptr = 0;
 		a5xx_gpu->preempt[i]->rbase = gpu->rb[i]->iova;
+		a5xx_gpu->preempt[i]->rptr_addr = shadowptr(a5xx_gpu, gpu->rb[i]);
 	}
 
 	/* Write a 0 to signal that we aren't switching pagetables */
@@ -259,7 +260,6 @@ static int preempt_init_ring(struct a5xx_gpu *a5xx_gpu,
 	ptr->data = 0;
 	ptr->cntl = MSM_GPU_RB_CNTL_DEFAULT | AXXX_CP_RB_CNTL_NO_UPDATE;
 
-	ptr->rptr_addr = shadowptr(a5xx_gpu, ring);
 	ptr->counter = counters_iova;
 
 	return 0;
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c +3 -3
index 700d65e39feb..4c65259eecb9 100644
@@ -375,19 +375,19 @@ static const struct dpu_ctl_cfg sdm845_ctl[] = {
 static const struct dpu_ctl_cfg sc7180_ctl[] = {
 	{
 	.name = "ctl_0", .id = CTL_0,
-	.base = 0x1000, .len = 0xE4,
+	.base = 0x1000, .len = 0x1dc,
 	.features = BIT(DPU_CTL_ACTIVE_CFG),
 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
 	},
 	{
 	.name = "ctl_1", .id = CTL_1,
-	.base = 0x1200, .len = 0xE4,
+	.base = 0x1200, .len = 0x1dc,
 	.features = BIT(DPU_CTL_ACTIVE_CFG),
 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
 	},
 	{
 	.name = "ctl_2", .id = CTL_2,
-	.base = 0x1400, .len = 0xE4,
+	.base = 0x1400, .len = 0x1dc,
 	.features = BIT(DPU_CTL_ACTIVE_CFG),
 	.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
 	},
drivers/gpu/drm/msm/msm_gem_submit.c +2 -3
index 83e6ccad7728..fc2fb1019ea1 100644
@@ -640,8 +640,8 @@ static struct msm_submit_post_dep *msm_parse_post_deps(struct drm_device *dev,
 	int ret = 0;
 	uint32_t i, j;
 
-	post_deps = kmalloc_array(nr_syncobjs, sizeof(*post_deps),
-	                          GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
+	post_deps = kcalloc(nr_syncobjs, sizeof(*post_deps),
+			    GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
 	if (!post_deps)
 		return ERR_PTR(-ENOMEM);
 
@@ -656,7 +656,6 @@ static struct msm_submit_post_dep *msm_parse_post_deps(struct drm_device *dev,
 		}
 
 		post_deps[i].point = syncobj_desc.point;
-		post_deps[i].chain = NULL;
 
 		if (syncobj_desc.flags) {
 			ret = -EINVAL;
drivers/gpu/drm/nouveau/dispnv50/disp.c +0 -16
index d7b9f7f8c9e3..0722b907bfcf 100644
@@ -2622,14 +2622,6 @@ nv50_display_fini(struct drm_device *dev, bool runtime, bool suspend)
 {
 	struct nouveau_drm *drm = nouveau_drm(dev);
 	struct drm_encoder *encoder;
-	struct drm_plane *plane;
-
-	drm_for_each_plane(plane, dev) {
-		struct nv50_wndw *wndw = nv50_wndw(plane);
-		if (plane->funcs != &nv50_wndw)
-			continue;
-		nv50_wndw_fini(wndw);
-	}
 
 	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
 		if (encoder->encoder_type != DRM_MODE_ENCODER_DPMST)
@@ -2645,7 +2637,6 @@ nv50_display_init(struct drm_device *dev, bool resume, bool runtime)
 {
 	struct nv50_core *core = nv50_disp(dev)->core;
 	struct drm_encoder *encoder;
-	struct drm_plane *plane;
 
 	if (resume || runtime)
 		core->func->init(core);
@@ -2658,13 +2649,6 @@ nv50_display_init(struct drm_device *dev, bool resume, bool runtime)
 		}
 	}
 
-	drm_for_each_plane(plane, dev) {
-		struct nv50_wndw *wndw = nv50_wndw(plane);
-		if (plane->funcs != &nv50_wndw)
-			continue;
-		nv50_wndw_init(wndw);
-	}
-
 	return 0;
 }
 
drivers/gpu/drm/nouveau/dispnv50/wndw.c +0 -12
index 8d048bacd6f0..e1e62674e82d 100644
@@ -694,18 +694,6 @@ nv50_wndw_notify(struct nvif_notify *notify)
 	return NVIF_NOTIFY_KEEP;
 }
 
-void
-nv50_wndw_fini(struct nv50_wndw *wndw)
-{
-	nvif_notify_put(&wndw->notify);
-}
-
-void
-nv50_wndw_init(struct nv50_wndw *wndw)
-{
-	nvif_notify_get(&wndw->notify);
-}
-
 static const u64 nv50_cursor_format_modifiers[] = {
 	DRM_FORMAT_MOD_LINEAR,
 	DRM_FORMAT_MOD_INVALID,
drivers/gpu/drm/nouveau/dispnv50/wndw.h +3 -4
index f4e0c5080034..6c64864da455 100644
@@ -38,10 +38,9 @@ struct nv50_wndw {
 
 int nv50_wndw_new_(const struct nv50_wndw_func *, struct drm_device *,
 		   enum drm_plane_type, const char *name, int index,
-		   const u32 *format, enum nv50_disp_interlock_type,
-		   u32 interlock_data, u32 heads, struct nv50_wndw **);
-void nv50_wndw_init(struct nv50_wndw *);
-void nv50_wndw_fini(struct nv50_wndw *);
+		   const u32 *format, u32 heads,
+		   enum nv50_disp_interlock_type, u32 interlock_data,
+		   struct nv50_wndw **);
 void nv50_wndw_flush_set(struct nv50_wndw *, u32 *interlock,
 			 struct nv50_wndw_atom *);
 void nv50_wndw_flush_clr(struct nv50_wndw *, u32 *interlock, bool flush,
drivers/iommu/amd/init.c +79 -26

160 lines not on this page · raw message

drivers/iommu/intel/pasid.c +7 -0
index 9a3dd55aaa1c..6dbc43b414ca 100644
@@ -186,6 +186,9 @@ int intel_pasid_alloc_table(struct device *dev)
 attach_out:
 	device_attach_pasid_table(info, pasid_table);
 
+	if (!ecap_coherent(info->iommu->ecap))
+		clflush_cache_range(pasid_table->table, size);
+
 	return 0;
 }
 
@@ -276,6 +279,10 @@ static struct pasid_entry *intel_pasid_get_entry(struct device *dev, u32 pasid)
 			free_pgtable_page(entries);
 			goto retry;
 		}
+		if (!ecap_coherent(info->iommu->ecap)) {
+			clflush_cache_range(entries, VTD_PAGE_SIZE);
+			clflush_cache_range(&dir[dir_index].val, sizeof(*dir));
+		}
 	}
 
 	return &entries[index];
drivers/macintosh/windfarm_lm75_sensor.c +2 -2
index 29f48c2028b6..e90ad1b78e93 100644
@@ -34,8 +34,8 @@
 #endif
 
 struct wf_lm75_sensor {
-	int			ds1775 : 1;
-	int			inited : 1;
+	unsigned int		ds1775 : 1;
+	unsigned int		inited : 1;
 	struct i2c_client	*i2c;
 	struct wf_sensor	sens;
 };
drivers/macintosh/windfarm_smu_sensors.c +2 -2
index c8706cfb83fd..714c1e14074e 100644
@@ -273,8 +273,8 @@ struct smu_cpu_power_sensor {
 	struct list_head	link;
 	struct wf_sensor	*volts;
 	struct wf_sensor	*amps;
-	int			fake_volts : 1;
-	int			quadratic : 1;
+	unsigned int		fake_volts : 1;
+	unsigned int		quadratic : 1;
 	struct wf_sensor	sens;
 };
 #define to_smu_cpu_power(c) container_of(c, struct smu_cpu_power_sensor, sens)
drivers/media/i2c/ov5640.c +1 -1
index db5a19babe67..a141552531f7 100644
@@ -2776,7 +2776,7 @@ static int ov5640_init_controls(struct ov5640_dev *sensor)
 	/* Auto/manual gain */
 	ctrls->auto_gain = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_AUTOGAIN,
 					     0, 1, 1, 1);
-	ctrls->gain = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_GAIN,
+	ctrls->gain = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_ANALOGUE_GAIN,
 					0, 1023, 1, 0);
 
 	ctrls->saturation = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_SATURATION,
drivers/media/rc/gpio-ir-recv.c +18 -0
index 22e524b69806..a56c844d7f81 100644
@@ -130,6 +130,23 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 				"gpio-ir-recv-irq", gpio_dev);
 }
 
+static int gpio_ir_recv_remove(struct platform_device *pdev)
+{
+	struct gpio_rc_dev *gpio_dev = platform_get_drvdata(pdev);
+	struct device *pmdev = gpio_dev->pmdev;
+
+	if (pmdev) {
+		pm_runtime_get_sync(pmdev);
+		cpu_latency_qos_remove_request(&gpio_dev->qos);
+
+		pm_runtime_disable(pmdev);
+		pm_runtime_put_noidle(pmdev);
+		pm_runtime_set_suspended(pmdev);
+	}
+
+	return 0;
+}
+
 #ifdef CONFIG_PM
 static int gpio_ir_recv_suspend(struct device *dev)
 {
@@ -189,6 +206,7 @@ MODULE_DEVICE_TABLE(of, gpio_ir_recv_of_match);
 
 static struct platform_driver gpio_ir_recv_driver = {
 	.probe  = gpio_ir_recv_probe,
+	.remove = gpio_ir_recv_remove,
 	.driver = {
 		.name   = KBUILD_MODNAME,
 		.of_match_table = of_match_ptr(gpio_ir_recv_of_match),
drivers/net/dsa/mt7530.c +20 -15
index c1505de23957..7bcfa3be95e2 100644
@@ -388,6 +388,24 @@ mt7530_fdb_write(struct mt7530_priv *priv, u16 vid,
 		mt7530_write(priv, MT7530_ATA1 + (i * 4), reg[i]);
 }
 
+/* Set up switch core clock for MT7530 */
+static void mt7530_pll_setup(struct mt7530_priv *priv)
+{
+	/* Disable PLL */
+	core_write(priv, CORE_GSWPLL_GRP1, 0);
+
+	/* Set core clock into 500Mhz */
+	core_write(priv, CORE_GSWPLL_GRP2,
+		   RG_GSWPLL_POSDIV_500M(1) |
+		   RG_GSWPLL_FBKDIV_500M(25));
+
+	/* Enable PLL */
+	core_write(priv, CORE_GSWPLL_GRP1,
+		   RG_GSWPLL_EN_PRE |
+		   RG_GSWPLL_POSDIV_200M(2) |
+		   RG_GSWPLL_FBKDIV_200M(32));
+}
+
 /* Setup TX circuit including relevant PAD and driving */
 static int
 mt7530_pad_clk_setup(struct dsa_switch *ds, phy_interface_t interface)
@@ -448,21 +466,6 @@ mt7530_pad_clk_setup(struct dsa_switch *ds, phy_interface_t interface)
 	core_clear(priv, CORE_TRGMII_GSW_CLK_CG,
 		   REG_GSWCK_EN | REG_TRGMIICK_EN);
 
-	/* Setup core clock for MT7530 */
-	/* Disable PLL */
-	core_write(priv, CORE_GSWPLL_GRP1, 0);
-
-	/* Set core clock into 500Mhz */
-	core_write(priv, CORE_GSWPLL_GRP2,
-		   RG_GSWPLL_POSDIV_500M(1) |
-		   RG_GSWPLL_FBKDIV_500M(25));
-
-	/* Enable PLL */
-	core_write(priv, CORE_GSWPLL_GRP1,
-		   RG_GSWPLL_EN_PRE |
-		   RG_GSWPLL_POSDIV_200M(2) |
-		   RG_GSWPLL_FBKDIV_200M(32));
-
 	/* Setup the MT7530 TRGMII Tx Clock */
 	core_write(priv, CORE_PLL_GROUP5, RG_LCDDS_PCW_NCPO1(ncpo1));
 	core_write(priv, CORE_PLL_GROUP6, RG_LCDDS_PCW_NCPO0(0));
@@ -2163,6 +2166,8 @@ mt7530_setup(struct dsa_switch *ds)
 		     SYS_CTRL_PHY_RST | SYS_CTRL_SW_RST |
 		     SYS_CTRL_REG_RST);
 
+	mt7530_pll_setup(priv);
+
 	/* Enable Port 6 only; P5 as GMAC5 which currently is not supported */
 	val = mt7530_read(priv, MT7530_MHWTRAP);
 	val &= ~MHWTRAP_P6_DIS & ~MHWTRAP_PHY_ACCESS;
drivers/net/ethernet/broadcom/bgmac.c +6 -2
index fa2a43d465db..f8fd65ab663e 100644
@@ -890,13 +890,13 @@ static void bgmac_chip_reset_idm_config(struct bgmac *bgmac)
 
 		if (iost & BGMAC_BCMA_IOST_ATTACHED) {
 			flags = BGMAC_BCMA_IOCTL_SW_CLKEN;
-			if (!bgmac->has_robosw)
+			if (bgmac->in_init || !bgmac->has_robosw)
 				flags |= BGMAC_BCMA_IOCTL_SW_RESET;
 		}
 		bgmac_clk_enable(bgmac, flags);
 	}
 
-	if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw)
+	if (iost & BGMAC_BCMA_IOST_ATTACHED && (bgmac->in_init || !bgmac->has_robosw))
 		bgmac_idm_write(bgmac, BCMA_IOCTL,
 				bgmac_idm_read(bgmac, BCMA_IOCTL) &
 				~BGMAC_BCMA_IOCTL_SW_RESET);
@@ -1490,6 +1490,8 @@ int bgmac_enet_probe(struct bgmac *bgmac)
 	struct net_device *net_dev = bgmac->net_dev;
 	int err;
 
+	bgmac->in_init = true;
+
 	bgmac_chip_intrs_off(bgmac);
 
 	net_dev->irq = bgmac->irq;
@@ -1542,6 +1544,8 @@ int bgmac_enet_probe(struct bgmac *bgmac)
 	/* Omit FCS from max MTU size */
 	net_dev->max_mtu = BGMAC_RX_MAX_FRAME_SIZE - ETH_FCS_LEN;
 
+	bgmac->in_init = false;
+
 	err = register_netdev(bgmac->net_dev);
 	if (err) {
 		dev_err(bgmac->dev, "Cannot register net device\n");
drivers/net/ethernet/broadcom/bgmac.h +2 -0
index 110088e662ea..99a344175a75 100644
@@ -474,6 +474,8 @@ struct bgmac {
 	int irq;
 	u32 int_mask;
 
+	bool in_init;
+
 	/* Current MAC state */
 	int mac_speed;
 	int mac_duplex;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +12 -11
index f64df4d53289..4e98e34fc46b 100644
@@ -2999,7 +2999,7 @@ static int bnxt_alloc_ring(struct bnxt *bp, struct bnxt_ring_mem_info *rmem)
 
 static void bnxt_free_tpa_info(struct bnxt *bp)
 {
-	int i;
+	int i, j;
 
 	for (i = 0; i < bp->rx_nr_rings; i++) {
 		struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
@@ -3007,8 +3007,10 @@ static void bnxt_free_tpa_info(struct bnxt *bp)
 		kfree(rxr->rx_tpa_idx_map);
 		rxr->rx_tpa_idx_map = NULL;
 		if (rxr->rx_tpa) {
-			kfree(rxr->rx_tpa[0].agg_arr);
-			rxr->rx_tpa[0].agg_arr = NULL;
+			for (j = 0; j < bp->max_tpa; j++) {
+				kfree(rxr->rx_tpa[j].agg_arr);
+				rxr->rx_tpa[j].agg_arr = NULL;
+			}
 		}
 		kfree(rxr->rx_tpa);
 		rxr->rx_tpa = NULL;
@@ -3017,14 +3019,13 @@ static void bnxt_free_tpa_info(struct bnxt *bp)
 
 static int bnxt_alloc_tpa_info(struct bnxt *bp)
 {
-	int i, j, total_aggs = 0;
+	int i, j;
 
 	bp->max_tpa = MAX_TPA;
 	if (bp->flags & BNXT_FLAG_CHIP_P5) {
 		if (!bp->max_tpa_v2)
 			return 0;
 		bp->max_tpa = max_t(u16, bp->max_tpa_v2, MAX_TPA_P5);
-		total_aggs = bp->max_tpa * MAX_SKB_FRAGS;
 	}
 
 	for (i = 0; i < bp->rx_nr_rings; i++) {
@@ -3038,12 +3039,12 @@ static int bnxt_alloc_tpa_info(struct bnxt *bp)
 
 		if (!(bp->flags & BNXT_FLAG_CHIP_P5))
 			continue;
-		agg = kcalloc(total_aggs, sizeof(*agg), GFP_KERNEL);
-		rxr->rx_tpa[0].agg_arr = agg;
-		if (!agg)
-			return -ENOMEM;
-		for (j = 1; j < bp->max_tpa; j++)
-			rxr->rx_tpa[j].agg_arr = agg + j * MAX_SKB_FRAGS;
+		for (j = 0; j < bp->max_tpa; j++) {
+			agg = kcalloc(MAX_SKB_FRAGS, sizeof(*agg), GFP_KERNEL);
+			if (!agg)
+				return -ENOMEM;
+			rxr->rx_tpa[j].agg_arr = agg;
+		}
 		rxr->rx_tpa_idx_map = kzalloc(sizeof(*rxr->rx_tpa_idx_map),
 					      GFP_KERNEL);
 		if (!rxr->rx_tpa_idx_map)
drivers/net/ethernet/intel/ice/ice_ethtool.c +4 -2
index 24001035910e..60f73e775bee 100644
@@ -3998,6 +3998,8 @@ ice_get_module_eeprom(struct net_device *netdev,
 		 * SFP modules only ever use page 0.
 		 */
 		if (page == 0 || !(data[0x2] & 0x4)) {
+			u32 copy_len;
+
 			/* If i2c bus is busy due to slow page change or
 			 * link management access, call can fail. This is normal.
 			 * So we retry this a few times.
@@ -4021,8 +4023,8 @@ ice_get_module_eeprom(struct net_device *netdev,
 			}
 
 			/* Make sure we have enough room for the new block */
-			if ((i + SFF_READ_BLOCK_SIZE) < ee->len)
-				memcpy(data + i, value, SFF_READ_BLOCK_SIZE);
+			copy_len = min_t(u32, SFF_READ_BLOCK_SIZE, ee->len - i);
+			memcpy(data + i, value, copy_len);
 		}
 	}
 	return 0;
drivers/net/ethernet/marvell/octeontx2/af/rvu.h +5 -0
index a7213db38804..fed49d6a178d 100644
@@ -811,6 +811,9 @@ bool is_mcam_entry_enabled(struct rvu *rvu, struct npc_mcam *mcam, int blkaddr,
 /* CPT APIs */
 int rvu_cpt_lf_teardown(struct rvu *rvu, u16 pcifunc, int lf, int slot);
 
+#define NDC_AF_BANK_MASK       GENMASK_ULL(7, 0)
+#define NDC_AF_BANK_LINE_MASK  GENMASK_ULL(31, 16)
+
 /* CN10K RVU */
 int rvu_set_channels_base(struct rvu *rvu);
 void rvu_program_channels(struct rvu *rvu);
@@ -826,6 +829,8 @@ static inline void rvu_dbg_init(struct rvu *rvu) {}
 static inline void rvu_dbg_exit(struct rvu *rvu) {}
 #endif
 
+int rvu_ndc_fix_locked_cacheline(struct rvu *rvu, int blkaddr);
+
 /* RVU Switch */
 void rvu_switch_enable(struct rvu *rvu);
 void rvu_switch_disable(struct rvu *rvu);
drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c +3 -4
index 66d34699f160..4dddf6ec3be8 100644
@@ -196,9 +196,6 @@ enum cpt_eng_type {
 	CPT_IE_TYPE = 3,
 };
 
-#define NDC_MAX_BANK(rvu, blk_addr) (rvu_read64(rvu, \
-						blk_addr, NDC_AF_CONST) & 0xFF)
-
 #define rvu_dbg_NULL NULL
 #define rvu_dbg_open_NULL NULL
 
@@ -1009,6 +1006,7 @@ static int ndc_blk_hits_miss_stats(struct seq_file *s, int idx, int blk_addr)
 	struct nix_hw *nix_hw;
 	struct rvu *rvu;
 	int bank, max_bank;
+	u64 ndc_af_const;
 
 	if (blk_addr == BLKADDR_NDC_NPA0) {
 		rvu = s->private;
@@ -1017,7 +1015,8 @@ static int ndc_blk_hits_miss_stats(struct seq_file *s, int idx, int blk_addr)
 		rvu = nix_hw->rvu;
 	}
 
-	max_bank = NDC_MAX_BANK(rvu, blk_addr);
+	ndc_af_const = rvu_read64(rvu, blk_addr, NDC_AF_CONST);
+	max_bank = FIELD_GET(NDC_AF_BANK_MASK, ndc_af_const);
 	for (bank = 0; bank < max_bank; bank++) {
 		seq_printf(s, "BANK:%d\n", bank);
 		seq_printf(s, "\tHits:\t%lld\n",
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +15 -1
index 09892703cfd4..d274d552924a 100644
@@ -797,6 +797,7 @@ static int nix_aq_enqueue_wait(struct rvu *rvu, struct rvu_block *block,
 	struct nix_aq_res_s *result;
 	int timeout = 1000;
 	u64 reg, head;
+	int ret;
 
 	result = (struct nix_aq_res_s *)aq->res->base;
 
@@ -820,9 +821,22 @@ static int nix_aq_enqueue_wait(struct rvu *rvu, struct rvu_block *block,
 			return -EBUSY;
 	}
 
-	if (result->compcode != NIX_AQ_COMP_GOOD)
+	if (result->compcode != NIX_AQ_COMP_GOOD) {
 		/* TODO: Replace this with some error code */
+		if (result->compcode == NIX_AQ_COMP_CTX_FAULT ||
+		    result->compcode == NIX_AQ_COMP_LOCKERR ||
+		    result->compcode == NIX_AQ_COMP_CTX_POISON) {
+			ret = rvu_ndc_fix_locked_cacheline(rvu, BLKADDR_NDC_NIX0_RX);
+			ret |= rvu_ndc_fix_locked_cacheline(rvu, BLKADDR_NDC_NIX0_TX);
+			ret |= rvu_ndc_fix_locked_cacheline(rvu, BLKADDR_NDC_NIX1_RX);
+			ret |= rvu_ndc_fix_locked_cacheline(rvu, BLKADDR_NDC_NIX1_TX);
+			if (ret)
+				dev_err(rvu->dev,
+					"%s: Not able to unlock cachelines\n", __func__);
+		}
+
 		return -EBUSY;
+	}
 
 	return 0;
 }
drivers/net/ethernet/marvell/octeontx2/af/rvu_npa.c +56 -2

75 lines not on this page · raw message

drivers/net/ethernet/marvell/octeontx2/af/rvu_reg.h +3 -0
index 21f1ed4e222f..d81b63a0d430 100644
@@ -670,6 +670,7 @@
 #define NDC_AF_INTR_ENA_W1S		(0x00068)
 #define NDC_AF_INTR_ENA_W1C		(0x00070)
 #define NDC_AF_ACTIVE_PC		(0x00078)
+#define NDC_AF_CAMS_RD_INTERVAL		(0x00080)
 #define NDC_AF_BP_TEST_ENABLE		(0x001F8)
 #define NDC_AF_BP_TEST(a)		(0x00200 | (a) << 3)
 #define NDC_AF_BLK_RST			(0x002F0)
@@ -685,6 +686,8 @@
 		(0x00F00 | (a) << 5 | (b) << 4)
 #define NDC_AF_BANKX_HIT_PC(a)		(0x01000 | (a) << 3)
 #define NDC_AF_BANKX_MISS_PC(a)		(0x01100 | (a) << 3)
+#define NDC_AF_BANKX_LINEX_METADATA(a, b) \
+		(0x10000 | (a) << 12 | (b) << 3)
 
 /* LBK */
 #define LBK_CONST			(0x10ull)
drivers/net/ethernet/mediatek/mtk_eth_soc.c +2 -1
index cc6a5b2f24e3..bb1acdb0c62b 100644
@@ -363,7 +363,8 @@ static void mtk_mac_config(struct phylink_config *config, unsigned int mode,
 	mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
 	mcr_new = mcr_cur;
 	mcr_new |= MAC_MCR_IPG_CFG | MAC_MCR_FORCE_MODE |
-		   MAC_MCR_BACKOFF_EN | MAC_MCR_BACKPR_EN | MAC_MCR_FORCE_LINK;
+		   MAC_MCR_BACKOFF_EN | MAC_MCR_BACKPR_EN | MAC_MCR_FORCE_LINK |
+		   MAC_MCR_RX_FIFO_CLR_DIS;
 
 	/* Only update control register when needed! */
 	if (mcr_new != mcr_cur)
drivers/net/ethernet/mediatek/mtk_eth_soc.h +1 -0
index f2d90639d7ed..d60260e00a3f 100644
@@ -369,6 +369,7 @@
 #define MAC_MCR_FORCE_MODE	BIT(15)
 #define MAC_MCR_TX_EN		BIT(14)
 #define MAC_MCR_RX_EN		BIT(13)
+#define MAC_MCR_RX_FIFO_CLR_DIS	BIT(12)
 #define MAC_MCR_BACKOFF_EN	BIT(9)
 #define MAC_MCR_BACKPR_EN	BIT(8)
 #define MAC_MCR_FORCE_RX_FC	BIT(5)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +1 -0
index d56f65338ea6..728e68971c39 100644
@@ -1262,6 +1262,7 @@ static int stmmac_init_phy(struct net_device *dev)
 
 		phylink_ethtool_get_wol(priv->phylink, &wol);
 		device_set_wakeup_capable(priv->device, !!wol.supported);
+		device_set_wakeup_enable(priv->device, !!wol.wolopts);
 	}
 
 	return ret;
drivers/net/phy/microchip.c +32 -0
index 9f1f2b6c97d4..230f2fcf9c46 100644
@@ -342,6 +342,37 @@ static int lan88xx_config_aneg(struct phy_device *phydev)
 	return genphy_config_aneg(phydev);
 }
 
+static void lan88xx_link_change_notify(struct phy_device *phydev)
+{
+	int temp;
+
+	/* At forced 100 F/H mode, chip may fail to set mode correctly
+	 * when cable is switched between long(~50+m) and short one.
+	 * As workaround, set to 10 before setting to 100
+	 * at forced 100 F/H mode.
+	 */
+	if (!phydev->autoneg && phydev->speed == 100) {
+		/* disable phy interrupt */
+		temp = phy_read(phydev, LAN88XX_INT_MASK);
+		temp &= ~LAN88XX_INT_MASK_MDINTPIN_EN_;
+		phy_write(phydev, LAN88XX_INT_MASK, temp);
+
+		temp = phy_read(phydev, MII_BMCR);
+		temp &= ~(BMCR_SPEED100 | BMCR_SPEED1000);
+		phy_write(phydev, MII_BMCR, temp); /* set to 10 first */
+		temp |= BMCR_SPEED100;
+		phy_write(phydev, MII_BMCR, temp); /* set to 100 later */
+
+		/* clear pending interrupt generated while workaround */
+		temp = phy_read(phydev, LAN88XX_INT_STS);
+
+		/* enable phy interrupt back */
+		temp = phy_read(phydev, LAN88XX_INT_MASK);
+		temp |= LAN88XX_INT_MASK_MDINTPIN_EN_;
+		phy_write(phydev, LAN88XX_INT_MASK, temp);
+	}
+}
+
 static struct phy_driver microchip_phy_driver[] = {
 {
 	.phy_id		= 0x0007c130,
@@ -355,6 +386,7 @@ static struct phy_driver microchip_phy_driver[] = {
 
 	.config_init	= lan88xx_config_init,
 	.config_aneg	= lan88xx_config_aneg,
+	.link_change_notify = lan88xx_link_change_notify,
 
 	.config_intr	= lan88xx_phy_config_intr,
 	.handle_interrupt = lan88xx_handle_interrupt,
drivers/net/phy/phy_device.c +1 -7
index 996842a1a9a3..73485383db4e 100644
@@ -3052,8 +3052,6 @@ static int phy_probe(struct device *dev)
 	if (phydrv->flags & PHY_IS_INTERNAL)
 		phydev->is_internal = true;
 
-	mutex_lock(&phydev->lock);
-
 	/* Deassert the reset signal */
 	phy_device_reset(phydev, 0);
 
@@ -3121,12 +3119,10 @@ static int phy_probe(struct device *dev)
 	phydev->state = PHY_READY;
 
 out:
-	/* Assert the reset signal */
+	/* Re-assert the reset signal on error */
 	if (err)
 		phy_device_reset(phydev, 1);
 
-	mutex_unlock(&phydev->lock);
-
 	return err;
 }
 
@@ -3136,9 +3132,7 @@ static int phy_remove(struct device *dev)
 
 	cancel_delayed_work_sync(&phydev->state_queue);
 
-	mutex_lock(&phydev->lock);
 	phydev->state = PHY_DOWN;
-	mutex_unlock(&phydev->lock);
 
 	sfp_bus_del_upstream(phydev->sfp_bus);
 	phydev->sfp_bus = NULL;
drivers/net/phy/smsc.c +5 -15
index 636b0907a598..04e628788f1b 100644
@@ -57,8 +57,6 @@ static int smsc_phy_ack_interrupt(struct phy_device *phydev)
 
 static int smsc_phy_config_intr(struct phy_device *phydev)
 {
-	struct smsc_phy_priv *priv = phydev->priv;
-	u16 intmask = 0;
 	int rc;
 
 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
@@ -66,12 +64,10 @@ static int smsc_phy_config_intr(struct phy_device *phydev)
 		if (rc)
 			return rc;
 
-		intmask = MII_LAN83C185_ISF_INT4 | MII_LAN83C185_ISF_INT6;
-		if (priv->energy_enable)
-			intmask |= MII_LAN83C185_ISF_INT7;
-		rc = phy_write(phydev, MII_LAN83C185_IM, intmask);
+		rc = phy_write(phydev, MII_LAN83C185_IM,
+			       MII_LAN83C185_ISF_INT_PHYLIB_EVENTS);
 	} else {
-		rc = phy_write(phydev, MII_LAN83C185_IM, intmask);
+		rc = phy_write(phydev, MII_LAN83C185_IM, 0);
 		if (rc)
 			return rc;
 
@@ -83,13 +79,7 @@ static int smsc_phy_config_intr(struct phy_device *phydev)
 
 static irqreturn_t smsc_phy_handle_interrupt(struct phy_device *phydev)
 {
-	int irq_status, irq_enabled;
-
-	irq_enabled = phy_read(phydev, MII_LAN83C185_IM);
-	if (irq_enabled < 0) {
-		phy_error(phydev);
-		return IRQ_NONE;
-	}
+	int irq_status;
 
 	irq_status = phy_read(phydev, MII_LAN83C185_ISF);
 	if (irq_status < 0) {
@@ -97,7 +87,7 @@ static irqreturn_t smsc_phy_handle_interrupt(struct phy_device *phydev)
 		return IRQ_NONE;
 	}
 
-	if (!(irq_status & irq_enabled))
+	if (!(irq_status & MII_LAN83C185_ISF_INT_PHYLIB_EVENTS))
 		return IRQ_NONE;
 
 	phy_trigger_machine(phydev);
drivers/net/usb/lan78xx.c +1 -26
index 3e1a83a22fdd..5700c9d20a3e 100644
@@ -1950,33 +1950,8 @@ static void lan78xx_remove_mdio(struct lan78xx_net *dev)
 static void lan78xx_link_status_change(struct net_device *net)
 {
 	struct phy_device *phydev = net->phydev;
-	int temp;
-
-	/* At forced 100 F/H mode, chip may fail to set mode correctly
-	 * when cable is switched between long(~50+m) and short one.
-	 * As workaround, set to 10 before setting to 100
-	 * at forced 100 F/H mode.
-	 */
-	if (!phydev->autoneg && (phydev->speed == 100)) {
-		/* disable phy interrupt */
-		temp = phy_read(phydev, LAN88XX_INT_MASK);
-		temp &= ~LAN88XX_INT_MASK_MDINTPIN_EN_;
-		phy_write(phydev, LAN88XX_INT_MASK, temp);
 
-		temp = phy_read(phydev, MII_BMCR);
-		temp &= ~(BMCR_SPEED100 | BMCR_SPEED1000);
-		phy_write(phydev, MII_BMCR, temp); /* set to 10 first */
-		temp |= BMCR_SPEED100;
-		phy_write(phydev, MII_BMCR, temp); /* set to 100 later */
-
-		/* clear pending interrupt generated while workaround */
-		temp = phy_read(phydev, LAN88XX_INT_STS);
-
-		/* enable phy interrupt back */
-		temp = phy_read(phydev, LAN88XX_INT_MASK);
-		temp |= LAN88XX_INT_MASK_MDINTPIN_EN_;
-		phy_write(phydev, LAN88XX_INT_MASK, temp);
-	}
+	phy_print_status(phydev);
 }
 
 static int irq_map(struct irq_domain *d, unsigned int irq,
drivers/nfc/fdp/i2c.c +4 -0
index 051c43a2a52f..5f97dcf08dd0 100644
@@ -249,6 +249,9 @@ static void fdp_nci_i2c_read_device_properties(struct device *dev,
 					   len, sizeof(**fw_vsc_cfg),
 					   GFP_KERNEL);
 
+		if (!*fw_vsc_cfg)
+			goto alloc_err;
+
 		r = device_property_read_u8_array(dev, FDP_DP_FW_VSC_CFG_NAME,
 						  *fw_vsc_cfg, len);
 
@@ -262,6 +265,7 @@ static void fdp_nci_i2c_read_device_properties(struct device *dev,
 		*fw_vsc_cfg = NULL;
 	}
 
+alloc_err:
 	dev_dbg(dev, "Clock type: %d, clock frequency: %d, VSC: %s",
 		*clock_type, *clock_freq, *fw_vsc_cfg != NULL ? "yes" : "no");
 }
drivers/platform/x86/Kconfig +2 -1
index cd8146dbdd45..61186829d1f6 100644
@@ -943,7 +943,8 @@ config I2C_MULTI_INSTANTIATE
 
 config MLX_PLATFORM
 	tristate "Mellanox Technologies platform support"
-	depends on I2C && REGMAP
+	depends on I2C
+	select REGMAP
 	help
 	  This option enables system support for the Mellanox Technologies
 	  platform. The Mellanox systems provide data center networking
drivers/regulator/core.c +23 -4
index 3eae3aa5ad1d..cd10880378a6 100644
@@ -1521,6 +1521,27 @@ static int set_machine_constraints(struct regulator_dev *rdev)
 		}
 	}
 
+	/*
+	 * If there is no mechanism for controlling the regulator then
+	 * flag it as always_on so we don't end up duplicating checks
+	 * for this so much.  Note that we could control the state of
+	 * a supply to control the output on a regulator that has no
+	 * direct control.
+	 */
+	if (!rdev->ena_pin && !ops->enable) {
+		if (rdev->supply_name && !rdev->supply)
+			return -EPROBE_DEFER;
+
+		if (rdev->supply)
+			rdev->constraints->always_on =
+				rdev->supply->rdev->constraints->always_on;
+		else
+			rdev->constraints->always_on = true;
+	}
+
+	if (rdev->desc->off_on_delay)
+		rdev->last_off = ktime_get_boottime();
+
 	/* If the constraints say the regulator should be on at this point
 	 * and we have control then make sure it is enabled.
 	 */
@@ -1554,8 +1575,6 @@ static int set_machine_constraints(struct regulator_dev *rdev)
 
 		if (rdev->constraints->always_on)
 			rdev->use_count++;
-	} else if (rdev->desc->off_on_delay) {
-		rdev->last_off = ktime_get();
 	}
 
 	print_constraints(rdev);
@@ -2610,7 +2629,7 @@ static int _regulator_do_enable(struct regulator_dev *rdev)
 		 * this regulator was disabled.
 		 */
 		ktime_t end = ktime_add_us(rdev->last_off, rdev->desc->off_on_delay);
-		s64 remaining = ktime_us_delta(end, ktime_get());
+		s64 remaining = ktime_us_delta(end, ktime_get_boottime());
 
 		if (remaining > 0)
 			_regulator_enable_delay(remaining);
@@ -2849,7 +2868,7 @@ static int _regulator_do_disable(struct regulator_dev *rdev)
 	}
 
 	if (rdev->desc->off_on_delay)
-		rdev->last_off = ktime_get();
+		rdev->last_off = ktime_get_boottime();
 
 	trace_regulator_disable_complete(rdev_get_name(rdev));
 
drivers/scsi/hosts.c +2 -0
index 0165dad80300..28b201c44326 100644
@@ -180,6 +180,7 @@ void scsi_remove_host(struct Scsi_Host *shost)
 	scsi_forget_host(shost);
 	mutex_unlock(&shost->scan_mutex);
 	scsi_proc_host_rm(shost);
+	scsi_proc_hostdir_rm(shost->hostt);
 
 	spin_lock_irqsave(shost->host_lock, flags);
 	if (scsi_host_set_state(shost, SHOST_DEL))
@@ -321,6 +322,7 @@ static void scsi_host_dev_release(struct device *dev)
 	struct Scsi_Host *shost = dev_to_shost(dev);
 	struct device *parent = dev->parent;
 
+	/* In case scsi_remove_host() has not been called. */
 	scsi_proc_hostdir_rm(shost->hostt);
 
 	/* Wait for functions invoked through call_rcu(&scmd->rcu, ...) */
drivers/scsi/megaraid/megaraid_sas.h +2 -0
index 650210d2abb4..02d7ab119f80 100644
@@ -1517,6 +1517,8 @@ struct megasas_ctrl_info {
 #define MEGASAS_MAX_LD_IDS			(MEGASAS_MAX_LD_CHANNELS * \
 						MEGASAS_MAX_DEV_PER_CHANNEL)
 
+#define MEGASAS_MAX_SUPPORTED_LD_IDS		240
+
 #define MEGASAS_MAX_SECTORS                    (2*1024)
 #define MEGASAS_MAX_SECTORS_IEEE		(2*128)
 #define MEGASAS_DBG_LVL				1
drivers/scsi/megaraid/megaraid_sas_fp.c +1 -1
index 83f69c33b01a..ec10d35b4685 100644
@@ -358,7 +358,7 @@ u8 MR_ValidateMapInfo(struct megasas_instance *instance, u64 map_id)
 		ld = MR_TargetIdToLdGet(i, drv_map);
 
 		/* For non existing VDs, iterate to next VD*/
-		if (ld >= (MAX_LOGICAL_DRIVES_EXT - 1))
+		if (ld >= MEGASAS_MAX_SUPPORTED_LD_IDS)
 			continue;
 
 		raid = MR_LdRaidGet(ld, drv_map);
drivers/staging/rtl8723bs/core/rtw_ap.c +10 -10
index 6064dd6a76b4..674592e914e2 100644
@@ -891,7 +891,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf,  int len)
 		&ie_len,
 		(pbss_network->ie_length - _BEACON_IE_OFFSET_)
 	);
-	if (p !=  NULL) {
+	if (p) {
 		memcpy(supportRate, p + 2, ie_len);
 		supportRateNum = ie_len;
 	}
@@ -903,7 +903,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf,  int len)
 		&ie_len,
 		pbss_network->ie_length - _BEACON_IE_OFFSET_
 	);
-	if (p !=  NULL) {
+	if (p) {
 		memcpy(supportRate + supportRateNum, p + 2, ie_len);
 		supportRateNum += ie_len;
 	}
@@ -991,7 +991,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf,  int len)
 			break;
 		}
 
-		if ((p == NULL) || (ie_len == 0))
+		if (!p || ie_len == 0)
 			break;
 	}
 
@@ -1021,7 +1021,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf,  int len)
 				break;
 			}
 
-			if ((p == NULL) || (ie_len == 0))
+			if (!p || ie_len == 0)
 				break;
 		}
 	}
@@ -1145,7 +1145,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf,  int len)
 	psta = rtw_get_stainfo(&padapter->stapriv, pbss_network->mac_address);
 	if (!psta) {
 		psta = rtw_alloc_stainfo(&padapter->stapriv, pbss_network->mac_address);
-		if (psta == NULL)
+		if (!psta)
 			return _FAIL;
 	}
 
@@ -1275,7 +1275,7 @@ u8 rtw_ap_set_pairwise_key(struct adapter *padapter, struct sta_info *psta)
 	}
 
 	psetstakey_para = rtw_zmalloc(sizeof(struct set_stakey_parm));
-	if (psetstakey_para == NULL) {
+	if (!psetstakey_para) {
 		kfree(ph2c);
 		res = _FAIL;
 		goto exit;
@@ -1311,12 +1311,12 @@ static int rtw_ap_set_key(
 	int res = _SUCCESS;
 
 	pcmd = rtw_zmalloc(sizeof(struct cmd_obj));
-	if (pcmd == NULL) {
+	if (!pcmd) {
 		res = _FAIL;
 		goto exit;
 	}
 	psetkeyparm = rtw_zmalloc(sizeof(struct setkey_parm));
-	if (psetkeyparm == NULL) {
+	if (!psetkeyparm) {
 		kfree(pcmd);
 		res = _FAIL;
 		goto exit;
@@ -1474,11 +1474,11 @@ static void update_bcn_wps_ie(struct adapter *padapter)
 		&wps_ielen
 	);
 
-	if (pwps_ie == NULL || wps_ielen == 0)
+	if (!pwps_ie || wps_ielen == 0)
 		return;
 
 	pwps_ie_src = pmlmepriv->wps_beacon_ie;
-	if (pwps_ie_src == NULL)
+	if (!pwps_ie_src)
 		return;
 
 	wps_offset = (uint)(pwps_ie - ie);
drivers/staging/rtl8723bs/core/rtw_cmd.c +48 -48

363 lines not on this page · raw message

drivers/staging/rtl8723bs/core/rtw_ioctl_set.c +2 -2
index 5cfde7176617..8c11daff2d59 100644
@@ -370,7 +370,7 @@ u8 rtw_set_802_11_bssid_list_scan(struct adapter *padapter, struct ndis_802_11_s
 	struct	mlme_priv 	*pmlmepriv = &padapter->mlmepriv;
 	u8 res = true;
 
-	if (padapter == NULL) {
+	if (!padapter) {
 		res = false;
 		goto exit;
 	}
@@ -481,7 +481,7 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter)
 		return 0;
 
 	psta = rtw_get_stainfo(&adapter->stapriv, get_bssid(pmlmepriv));
-	if (psta == NULL)
+	if (!psta)
 		return 0;
 
 	short_GI = query_ra_short_GI(psta);
drivers/staging/rtl8723bs/core/rtw_mlme.c +3 -3
index 952c3e14d1b3..26c40042d2be 100644
@@ -439,7 +439,7 @@ struct	wlan_network	*rtw_get_oldest_wlan_network(struct __queue *scanned_queue)
 		pwlan = list_entry(plist, struct wlan_network, list);
 
 		if (!pwlan->fixed) {
-			if (oldest == NULL || time_after(oldest->last_scanned, pwlan->last_scanned))
+			if (!oldest || time_after(oldest->last_scanned, pwlan->last_scanned))
 				oldest = pwlan;
 		}
 	}
@@ -542,7 +542,7 @@ void rtw_update_scanned_network(struct adapter *adapter, struct wlan_bssid_ex *t
 			/* TODO: don't select network in the same ess as oldest if it's new enough*/
 		}
 
-		if (oldest == NULL || time_after(oldest->last_scanned, pnetwork->last_scanned))
+		if (!oldest || time_after(oldest->last_scanned, pnetwork->last_scanned))
 			oldest = pnetwork;
 
 	}
@@ -1816,7 +1816,7 @@ static int rtw_check_join_candidate(struct mlme_priv *mlme
 			goto exit;
 	}
 
-	if (*candidate == NULL || (*candidate)->network.rssi < competitor->network.rssi) {
+	if (!*candidate || (*candidate)->network.rssi < competitor->network.rssi) {
 		*candidate = competitor;
 		updated = true;
 	}
drivers/staging/rtl8723bs/core/rtw_mlme_ext.c +28 -28

215 lines not on this page · raw message

drivers/staging/rtl8723bs/core/rtw_security.c +3 -3
index b050bf62e3b9..ac731415f733 100644
@@ -51,7 +51,7 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
 	struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
 	struct arc4_ctx *ctx = &psecuritypriv->xmit_arc4_ctx;
 
-	if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL)
+	if (!((struct xmit_frame *)pxmitframe)->buf_addr)
 		return;
 
 	hw_hdr_offset = TXDESC_OFFSET;
@@ -476,7 +476,7 @@ u32 rtw_tkip_encrypt(struct adapter *padapter, u8 *pxmitframe)
 	struct arc4_ctx *ctx = &psecuritypriv->xmit_arc4_ctx;
 	u32 res = _SUCCESS;
 
-	if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL)
+	if (!((struct xmit_frame *)pxmitframe)->buf_addr)
 		return _FAIL;
 
 	hw_hdr_offset = TXDESC_OFFSET;
@@ -1043,7 +1043,7 @@ u32 rtw_aes_encrypt(struct adapter *padapter, u8 *pxmitframe)
 
 	u32 res = _SUCCESS;
 
-	if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL)
+	if (!((struct xmit_frame *)pxmitframe)->buf_addr)
 		return _FAIL;
 
 	hw_hdr_offset = TXDESC_OFFSET;
drivers/staging/rtl8723bs/include/rtw_security.h +4 -4
index a68b73858462..7587fa888527 100644
@@ -107,13 +107,13 @@ struct security_priv {
 
 	u32 dot118021XGrpPrivacy;	/*  This specify the privacy algthm. used for Grp key */
 	u32 dot118021XGrpKeyid;		/*  key id used for Grp Key (tx key index) */
-	union Keytype	dot118021XGrpKey[BIP_MAX_KEYID];	/*  802.1x Group Key, for inx0 and inx1 */
-	union Keytype	dot118021XGrptxmickey[BIP_MAX_KEYID];
-	union Keytype	dot118021XGrprxmickey[BIP_MAX_KEYID];
+	union Keytype	dot118021XGrpKey[BIP_MAX_KEYID + 1];	/*  802.1x Group Key, for inx0 and inx1 */
+	union Keytype	dot118021XGrptxmickey[BIP_MAX_KEYID + 1];
+	union Keytype	dot118021XGrprxmickey[BIP_MAX_KEYID + 1];
 	union pn48		dot11Grptxpn;			/*  PN48 used for Grp Key xmit. */
 	union pn48		dot11Grprxpn;			/*  PN48 used for Grp Key recv. */
 	u32 dot11wBIPKeyid;						/*  key id used for BIP Key (tx key index) */
-	union Keytype	dot11wBIPKey[6];		/*  BIP Key, for index4 and index5 */
+	union Keytype	dot11wBIPKey[BIP_MAX_KEYID + 1];	/*  BIP Key, for index4 and index5 */
 	union pn48		dot11wBIPtxpn;			/*  PN48 used for Grp Key xmit. */
 	union pn48		dot11wBIPrxpn;			/*  PN48 used for Grp Key recv. */
 
drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c +116 -239

403 lines not on this page · raw message

drivers/staging/rtl8723bs/os_dep/ioctl_linux.c +26 -25

51 lines not on this page · raw message

drivers/staging/rtl8723bs/os_dep/os_intfs.c +2 -2
index 23f4f706f935..279347be77c4 100644

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

fs/attr.c +67 -5

72 lines not on this page · raw message

fs/btrfs/block-group.c +2 -1
index 5eea56789ccc..19f71c305b98 100644

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

fs/dlm/lockspace.c +10 -11
index 10eddfa6c3d7..fa086a81a847 100644

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

fs/dlm/lowcomms.c +10 -6
index d56a8f88a385..1eb95ba7e777 100644

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

fs/dlm/lowcomms.h +1 -0
index 4ccae07cf005..26433632d171 100644

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

fs/dlm/main.c +5 -2
index afc66a1346d3..974f7ebb3fe6 100644

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

fs/dlm/midcomms.c +16 -1
index 702c14de7a4b..84a7a39fc12e 100644

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

fs/dlm/midcomms.h +3 -0
index 579abc6929be..1a36b7834dfc 100644

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

fs/ext4/block_validity.c +17 -9
index 4666b55b736e..5504f72bbbbe 100644

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

fs/ext4/ext4.h +3 -0
index bc209f303327..80f0942fa165 100644

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

fs/ext4/fsmap.c +2 -0
index 4493ef0c715e..cdf9bfe10137 100644

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

fs/ext4/inline.c +0 -1
index 38ad09e802e4..6473786c44fe 100644

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

fs/ext4/inode.c +6 -1
index 0a63863bc58c..b2600e8021b1 100644

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

fs/ext4/ioctl.c +1 -0
index 2e6d03e5790e..656c6ba66ca7 100644

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

fs/ext4/mballoc.c +119 -86

205 lines not on this page · raw message

fs/ext4/namei.c +27 -9
index 1e6cc6c21d60..c79c61002a62 100644

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

fs/ext4/page-io.c +6 -5
index 18977ff8e493..03e224401b23 100644

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

fs/ext4/xattr.c +3 -0
index d6edf38de31b..bfcbfe2788bd 100644

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

fs/f2fs/checkpoint.c +1 -1
index 02840dadde5d..c68f1f8000f1 100644

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

fs/f2fs/compress.c +1 -1
index 6adf04725954..4fa62f98cb51 100644

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

fs/f2fs/data.c +4 -4
index ee2909267a33..524d4b49a520 100644

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

fs/f2fs/f2fs.h +1 -1
index a144471c5316..80e4f9afe86f 100644

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

fs/f2fs/file.c +1 -1
index 326c1a4c2a6a..3be34ea4e299 100644

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

fs/f2fs/gc.c +3 -3
index fa1f5fb750b3..615b109570b0 100644

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

fs/f2fs/inline.c +2 -2
index bce1c2ae6d15..e4fc169a07f5 100644

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

fs/f2fs/inode.c +8 -6
index bd8960f4966b..94e21136d579 100644

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

fs/f2fs/node.c +14 -9
index f810c6bbeff0..89a7f6021c36 100644

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

fs/f2fs/recovery.c +1 -1
index ed21e34b59c7..ba7eeb3c2738 100644

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

fs/f2fs/segment.c +1 -1
index 194c0811fbdf..58dd4de41986 100644

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

fs/file.c +1 -0
index 214364e19d76..ee1c350ec58a 100644

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

fs/fuse/file.c +1 -1
index cc95a1c37644..2b19d281351e 100644

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

fs/inode.c +54 -36

90 lines not on this page · raw message

fs/internal.h +9 -1
index 9075490f21a6..46df4ce58e87 100644

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

fs/locks.c +2 -1
index 82a4487e95b3..881fd16905c6 100644

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

fs/namei.c +69 -13

82 lines not on this page · raw message

fs/namespace.c +20 -9
index d946298691ed..c9b2983ae011 100644

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

fs/ocfs2/file.c +2 -2
index fc5f780fa235..92182d4be247 100644

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

fs/ocfs2/namei.c +1 -0
index 11807034dd48..5b8237ceb8cc 100644

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

fs/open.c +4 -4
index 5e322f188e83..e93c33069055 100644

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

fs/udf/inode.c +1 -1
index a151e04856af..594d22458881 100644

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

fs/xfs/xfs_bmap_util.c +3 -6
index 73a36b7be3bd..fd2ad6a3019c 100644

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

fs/xfs/xfs_file.c +11 -13
index 240eb932c014..8cd0c3df253f 100644

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

fs/xfs/xfs_iops.c +3 -53

56 lines not on this page · raw message

fs/xfs/xfs_iops.h +0 -1
index 278949056048..6a7909fdf446 100644

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

fs/xfs/xfs_pnfs.c +6 -3
index 5e1d29d8b2e7..3a82a13d880c 100644

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

include/asm-generic/vmlinux.lds.h +5 -0
index e28792ca25a1..8471717c5085 100644

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

include/linux/fs.h +4 -2
index 1e1ac116dd13..23ecfecdc450 100644

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

include/linux/pci_ids.h +2 -0
index 4853538bf156..8a1e26473566 100644

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

include/net/netfilter/nf_tproxy.h +7 -0
index 82d0e41b76f2..faa108b1ba67 100644

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

kernel/bpf/btf.c +1 -0
index 1f9369b677fe..6c7126de5c17 100644

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

kernel/fork.c +1 -1
index 3fb7e9e6a7b9..68eab6ce3085 100644

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

kernel/irq/irqdomain.c +94 -58

152 lines not on this page · raw message

kernel/watch_queue.c +1 -0
index 1059ef6c3711..54cbaa971139 100644

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

net/caif/caif_usb.c +3 -0
index b02e1292f7f1..24488a4e2d26 100644

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

net/ipv4/netfilter/nf_tproxy_ipv4.c +1 -1
index b2bae0b0e42a..61cb2341f50f 100644

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

net/ipv4/tcp_bpf.c +6 -0
index 7f34c455651d..20ad554af369 100644

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

net/ipv4/udp_bpf.c +3 -0
index bbe6569c9ad3..56e1047632f6 100644

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

net/ipv6/ila/ila_xlat.c +1 -0
index a1ac0e3d8c60..163668531a57 100644

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

net/ipv6/netfilter/nf_tproxy_ipv6.c +1 -1
index 6bac68fb27a3..3fe4f15e01dc 100644

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

net/netfilter/nf_conntrack_core.c +2 -2
index 43ea8cfd374b..7ff0da5f998a 100644

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

net/netfilter/nf_conntrack_netlink.c +7 -7
index 18a508783c28..8776e75b200f 100644

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

net/nfc/netlink.c +1 -1
index 9ba3676ab37f..9bc0ab759ea4 100644

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

net/smc/af_smc.c +8 -5
index d5ddf283ed8e..9cdb7df0801f 100644

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

net/sunrpc/svc.c +5 -1
index 08ca797bb8a4..74a1c9116a78 100644

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

net/unix/af_unix.c +11 -5
index 0a59a00cb581..a96026dbdf94 100644

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

net/unix/unix_bpf.c +3 -0
index 452376c6f419..5919d61d9874 100644

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

scripts/checkkconfigsymbols.py +12 -1
index 217d21abc86e..36c920e71313 100755

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

scripts/clang-tools/run-clang-tools.py +14 -7
index f754415af398..f42699134f1c 100755

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

scripts/diffconfig +14 -2
index d5da5fa05d1d..43f0f3d273ae 100755

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

tools/bpf/Makefile +4 -1
index b11cfc86a3d0..664601ab1705 100644

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

tools/bpf/bpf_jit_disasm.c +4 -1
index c8ae95804728..a90a5d110f92 100644

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

tools/bpf/bpftool/Makefile +4 -1
index cce52df3be06..11266c78557d 100644

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

tools/bpf/bpftool/jit_disasm.c +34 -8

42 lines not on this page · raw message

tools/build/Makefile.feature +1 -0
index 6abde487bba1..f027281f0a7e 100644

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

tools/build/feature/Makefile +4 -0
index 69a43d9ea331..aa3b0d75e44b 100644

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

tools/build/feature/test-all.c +4 -0
index 5ffafb967b6e..957c02c7b163 100644

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

tools/build/feature/test-disassembler-init-styled.c new file +13 -0
new file mode 100644
index 000000000000..f1ce0ec3bee9

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

tools/include/tools/dis-asm-compat.h new file +55 -0

55 lines not on this page · raw message

tools/perf/Makefile.config +8 -0
index 35e1f2a52435..2c30a2b577d3 100644

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

tools/perf/builtin-inject.c +1 -0
index f15c146e0054..8e7a65a8d86e 100644

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

tools/perf/builtin-stat.c +5 -10
index aad65c95c371..0b709e3ead2a 100644

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

tools/perf/util/annotate.c +4 -3
index 0bae061b2d6d..a5e87c7f4f4e 100644

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

tools/perf/util/stat.c +1 -5
index 09ea334586f2..5a0b3db1cab1 100644

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

tools/perf/util/stat.h +0 -1
index 32c8527de347..977616cf69e4 100644

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

tools/perf/util/target.h +12 -0
index daec6cba500d..880f1af7f6ad 100644

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

tools/testing/selftests/netfilter/nft_nat.sh +2 -0
index 032f2de6e14e..462dc47420b6 100755

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

virt/kvm/kvm_main.c +96 -49

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

#2 lore raw
In reply to Greg Kroah-Hartman
Quoted 10 lines · Greg Kroah-Hartman

I'm announcing the release of the 5.15.103 kernel.

[...]

Vitaly Kuznetsov (4):
KVM: Optimize kvm_make_vcpus_request_mask() a bit
KVM: Pre-allocate cpumasks for kvm_make_all_cpus_request_except()
KVM: nVMX: Don't use Enlightened MSR Bitmap for L3
KVM: VMX: Introduce vmx_msr_bitmap_l01_changed() helper

That list is missing commit 6470accc7ba9 ("KVM: x86: hyper-v: Avoid calling kvm_make_vcpus_request_mask() with vcpu_mask==NULL") to fulfill the prerequisite of "KVM: Optimize kvm_make_vcpus_request_mask() a bit".

Right now the kvm selftests trigger a kernel NULL deref for the hyperv test, making the system hang.

Please consider applying commit 6470accc7ba9 for the next v5.15.x release.

Thanks,
Mathias

author maintainer
#3 lore raw
Quoted 12 lines · Mathias Krause
Quoted 10 lines · Greg Kroah-Hartman

I'm announcing the release of the 5.15.103 kernel.

[...]

Vitaly Kuznetsov (4):
KVM: Optimize kvm_make_vcpus_request_mask() a bit
KVM: Pre-allocate cpumasks for kvm_make_all_cpus_request_except()
KVM: nVMX: Don't use Enlightened MSR Bitmap for L3
KVM: VMX: Introduce vmx_msr_bitmap_l01_changed() helper

Quoted 8 lines

That list is missing commit 6470accc7ba9 ("KVM: x86: hyper-v: Avoid calling kvm_make_vcpus_request_mask() with vcpu_mask==NULL") to fulfill the prerequisite of "KVM: Optimize kvm_make_vcpus_request_mask() a bit".

Right now the kvm selftests trigger a kernel NULL deref for the hyperv test, making the system hang.

Please consider applying commit 6470accc7ba9 for the next v5.15.x release.

It wasn't tagged for the stable kernels, so we didn't pick it up :(

Have now done so, thanks.

greg k-h

#4 lore raw
Quoted 17 lines · Greg Kroah-Hartman
Quoted 16 lines · Mathias Krause
Quoted 10 lines · Greg Kroah-Hartman

I'm announcing the release of the 5.15.103 kernel.

[...]

Vitaly Kuznetsov (4):
KVM: Optimize kvm_make_vcpus_request_mask() a bit
KVM: Pre-allocate cpumasks for kvm_make_all_cpus_request_except()
KVM: nVMX: Don't use Enlightened MSR Bitmap for L3
KVM: VMX: Introduce vmx_msr_bitmap_l01_changed() helper

That list is missing commit 6470accc7ba9 ("KVM: x86: hyper-v: Avoid calling kvm_make_vcpus_request_mask() with vcpu_mask==NULL") to fulfill the prerequisite of "KVM: Optimize kvm_make_vcpus_request_mask() a bit".

Quoted 6 lines
Quoted 4 lines

Right now the kvm selftests trigger a kernel NULL deref for the hyperv test, making the system hang.

Please consider applying commit 6470accc7ba9 for the next v5.15.x release.

It wasn't tagged for the stable kernels, so we didn't pick it up :(

Neither were any of the above commits. o.O

Commit 3e48a6349d29 ("KVM: Optimize kvm_make_vcpus_request_mask() a bit") has this tag, though:

Stable-dep-of: 2b0128127373 ("KVM: Register /dev/kvm as the _very_ last thing during initialization")

I don't know why, though. These two commits have little in common. Maybe Sasha knows why?

Quoted 2 lines

Have now done so, thanks.

Thanks!

Mathias

maintainer
#5 lore raw
Quoted 27 lines · Mathias Krause
Quoted 17 lines · Greg Kroah-Hartman
Quoted 16 lines · Mathias Krause
Quoted 10 lines · Greg Kroah-Hartman

I'm announcing the release of the 5.15.103 kernel.

[...]

Vitaly Kuznetsov (4):
KVM: Optimize kvm_make_vcpus_request_mask() a bit
KVM: Pre-allocate cpumasks for kvm_make_all_cpus_request_except()
KVM: nVMX: Don't use Enlightened MSR Bitmap for L3
KVM: VMX: Introduce vmx_msr_bitmap_l01_changed() helper

That list is missing commit 6470accc7ba9 ("KVM: x86: hyper-v: Avoid calling kvm_make_vcpus_request_mask() with vcpu_mask==NULL") to fulfill the prerequisite of "KVM: Optimize kvm_make_vcpus_request_mask() a bit".

Quoted 6 lines
Quoted 4 lines

Right now the kvm selftests trigger a kernel NULL deref for the hyperv test, making the system hang.

Please consider applying commit 6470accc7ba9 for the next v5.15.x release.

It wasn't tagged for the stable kernels, so we didn't pick it up :(

Neither were any of the above commits. o.O

Quoted 8 lines

Commit 3e48a6349d29 ("KVM: Optimize kvm_make_vcpus_request_mask() a bit") has this tag, though:

Stable-dep-of: 2b0128127373 ("KVM: Register /dev/kvm as the _very_ last thing during initialization")

I don't know why, though. These two commits have little in common. Maybe Sasha knows why?

Because you've skipped the commit in the middle of the two you've pointed out :)

3e48a6349d29 is needed by 0a0ecaf0988b ("KVM: Pre-allocate cpumasks for kvm_make_all_cpus_request_except()"), which in turn is needed by 2b0128127373.

Signature · 2 lines
Thanks,
Sasha
#6 lore raw
Quoted 40 lines · Sasha Levin
Quoted 30 lines · Mathias Krause
Quoted 19 lines · Greg Kroah-Hartman
Quoted 18 lines · Mathias Krause
Quoted 11 lines · Greg Kroah-Hartman

I'm announcing the release of the 5.15.103 kernel.

[...]

Vitaly Kuznetsov (4):
      KVM: Optimize kvm_make_vcpus_request_mask() a bit
      KVM: Pre-allocate cpumasks for kvm_make_all_cpus_request_except()
      KVM: nVMX: Don't use Enlightened MSR Bitmap for L3
      KVM: VMX: Introduce vmx_msr_bitmap_l01_changed() helper

That list is missing commit 6470accc7ba9 ("KVM: x86: hyper-v: Avoid calling kvm_make_vcpus_request_mask() with vcpu_mask==NULL") to fulfill the prerequisite of "KVM: Optimize kvm_make_vcpus_request_mask() a bit".

Quoted 7 lines
Quoted 5 lines

Right now the kvm selftests trigger a kernel NULL deref for the hyperv test, making the system hang.

Please consider applying commit 6470accc7ba9 for the next v5.15.x release.

It wasn't tagged for the stable kernels, so we didn't pick it up :(

Neither were any of the above commits. o.O

Quoted 8 lines

Commit 3e48a6349d29 ("KVM: Optimize kvm_make_vcpus_request_mask() a bit") has this tag, though:

Stable-dep-of: 2b0128127373 ("KVM: Register /dev/kvm as the _very_ last thing during initialization")

I don't know why, though. These two commits have little in common. Maybe Sasha knows why?

Quoted 6 lines

Because you've skipped the commit in the middle of the two you've pointed out :)

3e48a6349d29 is needed by 0a0ecaf0988b ("KVM: Pre-allocate cpumasks for kvm_make_all_cpus_request_except()"), which in turn is needed by 2b0128127373.

I see, 0a0ecaf0988b is "needed" by 2b0128127373 to make it apply clean. However, there is no functional dependency for 2b0128127373, as it simply moves device registration around. By picking all the "required" commits to make it apply clean, still functional required commits were missed. :(

A simple backport would probably had been the better solution to the failed cherry-pick, but I see the original author didn't provide one, so some kind off fall-back process kicked in to pick up dependent commits. If these would have been announced more visible than by simply adding them to the queue, it might had been noticed earlier that a commit is missing still.

This is probably just another example of maintainer's time being such a scarce resource problem, but the fallback process isn't working flawless either :/

Thanks,
Mathias