Skip to contentSkip to conversation

Linux 6.6.84

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Mar 22, 2025 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 6.6.84 kernel.

All users of the 6.6 kernel series must upgrade.

The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.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/timers/no_hz.rst                           |    7 
 Makefile                                                 |    2 
 arch/alpha/include/asm/elf.h                             |    6 
 arch/alpha/include/asm/pgtable.h                         |    2 
 arch/alpha/include/asm/processor.h                       |    8 
 arch/alpha/kernel/osf_sys.c                              |   11 
 arch/arm64/mm/mmu.c                                      |    5 
 arch/x86/events/intel/core.c                             |   85 +++++
 arch/x86/kernel/cpu/microcode/amd.c                      |    2 
 arch/x86/kernel/cpu/mshyperv.c                           |   11 
 arch/x86/kernel/irq.c                                    |    2 
 block/bio.c                                              |    2 
 drivers/acpi/resource.c                                  |    6 
 drivers/block/zram/zram_drv.c                            |    4 
 drivers/clk/samsung/clk-pll.c                            |    7 
 drivers/clocksource/i8253.c                              |   36 +-
 drivers/firmware/iscsi_ibft.c                            |    5 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c        |   10 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c   |    1 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c    |   64 ++-
 drivers/gpu/drm/amd/display/dc/core/dc_resource.c        |    7 
 drivers/gpu/drm/display/drm_dp_mst_topology.c            |   40 +-
 drivers/gpu/drm/drm_atomic_uapi.c                        |    4 
 drivers/gpu/drm/drm_connector.c                          |    4 
 drivers/gpu/drm/gma500/mid_bios.c                        |    5 
 drivers/gpu/drm/hyperv/hyperv_drm_drv.c                  |    2 
 drivers/gpu/drm/i915/display/intel_display.c             |    5 
 drivers/gpu/drm/nouveau/nouveau_connector.c              |    1 
 drivers/gpu/drm/vkms/vkms_composer.c                     |    2 
 drivers/hid/Kconfig                                      |    3 
 drivers/hid/hid-apple.c                                  |   13 
 drivers/hid/hid-ids.h                                    |    3 
 drivers/hid/hid-quirks.c                                 |    1 
 drivers/hid/hid-topre.c                                  |    7 
 drivers/hid/intel-ish-hid/ipc/ipc.c                      |   15 
 drivers/hid/intel-ish-hid/ishtp/ishtp-dev.h              |    2 
 drivers/hv/vmbus_drv.c                                   |   13 
 drivers/i2c/busses/i2c-ali1535.c                         |   12 
 drivers/i2c/busses/i2c-ali15x3.c                         |   12 
 drivers/i2c/busses/i2c-sis630.c                          |   12 
 drivers/input/joystick/xpad.c                            |   39 +-
 drivers/input/misc/iqs7222.c                             |   50 +--
 drivers/input/serio/i8042-acpipnpio.h                    |  111 +++---
 drivers/input/touchscreen/ads7846.c                      |    2 
 drivers/md/dm-flakey.c                                   |    2 
 drivers/net/bonding/bond_options.c                       |   55 ++-
 drivers/net/dsa/mv88e6xxx/chip.c                         |   59 ++-
 drivers/net/ethernet/broadcom/bnxt/bnxt.c                |    3 
 drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c            |   11 
 drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h            |    3 
 drivers/net/ethernet/intel/ice/ice_arfs.c                |    2 
 drivers/net/ethernet/mellanox/mlx5/core/devlink.c        |    3 
 drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c  |   12 
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c        |    6 
 drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c        |    4 
 drivers/net/ethernet/mellanox/mlx5/core/lag/lag.h        |    1 
 drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c      |    3 
 drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c  |    5 
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c |    8 
 drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c     |    7 
 drivers/net/mctp/mctp-i2c.c                              |    5 
 drivers/net/wwan/mhi_wwan_mbim.c                         |    2 
 drivers/nvme/host/apple.c                                |    2 
 drivers/nvme/host/core.c                                 |    2 
 drivers/nvme/host/fc.c                                   |   59 ---
 drivers/nvme/host/pci.c                                  |    2 
 drivers/nvme/host/tcp.c                                  |   43 ++
 drivers/nvme/target/rdma.c                               |   33 +
 drivers/pinctrl/bcm/pinctrl-bcm281xx.c                   |    2 
 drivers/platform/x86/intel/pmc/core.c                    |    4 
 drivers/platform/x86/thinkpad_acpi.c                     |   50 ++-
 drivers/powercap/powercap_sys.c                          |    3 
 drivers/s390/cio/chp.c                                   |    3 
 drivers/scsi/qla1280.c                                   |    2 
 drivers/scsi/scsi_scan.c                                 |    2 
 drivers/thermal/cpufreq_cooling.c                        |    2 
 drivers/ufs/core/ufshcd.c                                |    7 
 drivers/usb/phy/phy-generic.c                            |    2 
 drivers/usb/serial/ftdi_sio.c                            |   14 
 drivers/usb/serial/ftdi_sio_ids.h                        |   13 
 drivers/usb/serial/option.c                              |   48 +-
 drivers/video/fbdev/hyperv_fb.c                          |    2 
 drivers/xen/swiotlb-xen.c                                |    2 
 fs/fuse/dir.c                                            |    2 
 fs/namei.c                                               |   24 +
 fs/proc/base.c                                           |    9 
 fs/select.c                                              |   11 
 fs/smb/client/asn1.c                                     |    2 
 fs/smb/client/cifs_spnego.c                              |    4 
 fs/smb/client/cifsglob.h                                 |    4 
 fs/smb/client/connect.c                                  |   16 
 fs/smb/client/fs_context.c                               |   18 -
 fs/smb/client/inode.c                                    |   13 
 fs/smb/client/reparse.c                                  |   10 
 fs/smb/client/sess.c                                     |    3 
 fs/smb/client/smb2pdu.c                                  |    4 
 fs/smb/common/smbfsctl.h                                 |    3 
 fs/smb/server/connection.c                               |   20 +
 fs/smb/server/connection.h                               |    2 
 fs/smb/server/ksmbd_work.c                               |    3 
 fs/smb/server/ksmbd_work.h                               |    1 
 fs/smb/server/oplock.c                                   |   43 +-
 fs/smb/server/oplock.h                                   |    1 
 fs/smb/server/server.c                                   |   14 
 fs/vboxsf/super.c                                        |    3 
 include/linux/fs.h                                       |    2 
 include/linux/i8253.h                                    |    1 
 include/linux/io_uring_types.h                           |    3 
 include/linux/nvme-tcp.h                                 |    2 
 include/net/bluetooth/hci_core.h                         |  108 ++----
 include/net/bluetooth/l2cap.h                            |    3 
 include/net/netfilter/nf_tables.h                        |   20 -
 include/sound/soc.h                                      |    5 
 init/Kconfig                                             |    2 
 io_uring/io-wq.c                                         |   23 +
 io_uring/io_uring.c                                      |  250 ++++++++++-----
 io_uring/io_uring.h                                      |    8 
 io_uring/kbuf.c                                          |  173 ++--------
 io_uring/kbuf.h                                          |    3 
 io_uring/rsrc.c                                          |   39 --
 kernel/bpf/ringbuf.c                                     |   12 
 kernel/sched/core.c                                      |   13 
 kernel/sched/debug.c                                     |    2 
 kernel/sys.c                                             |    2 
 kernel/time/hrtimer.c                                    |   40 --
 lib/buildid.c                                            |    5 
 mm/mmap.c                                                |   69 +++-
 mm/nommu.c                                               |    7 
 net/bluetooth/hci_core.c                                 |   10 
 net/bluetooth/hci_event.c                                |   37 +-
 net/bluetooth/iso.c                                      |    6 
 net/bluetooth/l2cap_core.c                               |  181 +++++-----
 net/bluetooth/l2cap_sock.c                               |   15 
 net/bluetooth/rfcomm/core.c                              |    6 
 net/bluetooth/sco.c                                      |   12 
 net/core/dev.c                                           |    2 
 net/core/netpoll.c                                       |    9 
 net/ipv4/tcp.c                                           |   20 -
 net/ipv6/addrconf.c                                      |   15 
 net/mptcp/protocol.h                                     |    2 
 net/netfilter/ipvs/ip_vs_ctl.c                           |    8 
 net/netfilter/nf_conncount.c                             |    6 
 net/netfilter/nf_tables_api.c                            |   25 -
 net/netfilter/nft_connlimit.c                            |    4 
 net/netfilter/nft_counter.c                              |    4 
 net/netfilter/nft_ct.c                                   |    6 
 net/netfilter/nft_dynset.c                               |    2 
 net/netfilter/nft_exthdr.c                               |   10 
 net/netfilter/nft_last.c                                 |    4 
 net/netfilter/nft_limit.c                                |   14 
 net/netfilter/nft_quota.c                                |    4 
 net/netfilter/nft_set_hash.c                             |    8 
 net/netfilter/nft_set_pipapo.c                           |   18 -
 net/netfilter/nft_set_rbtree.c                           |   11 
 net/openvswitch/flow_netlink.c                           |   15 
 net/sched/sch_api.c                                      |    6 
 net/sched/sch_gred.c                                     |    3 
 net/sctp/stream.c                                        |    2 
 net/switchdev/switchdev.c                                |   25 +
 net/wireless/core.c                                      |    7 
 rust/kernel/error.rs                                     |    2 
 rust/kernel/init.rs                                      |   23 -
 rust/kernel/init/macros.rs                               |    6 
 rust/kernel/sync.rs                                      |   10 
 scripts/generate_rust_analyzer.py                        |   30 +
 sound/pci/hda/patch_realtek.c                            |    1 
 sound/soc/amd/yc/acp6x-mach.c                            |    7 
 sound/soc/codecs/arizona.c                               |   14 
 sound/soc/codecs/cs42l43.c                               |    2 
 sound/soc/codecs/madera.c                                |   10 
 sound/soc/codecs/rt722-sdca-sdw.c                        |    4 
 sound/soc/codecs/tas2764.c                               |   10 
 sound/soc/codecs/tas2764.h                               |    8 
 sound/soc/codecs/tas2770.c                               |    2 
 sound/soc/codecs/wm0010.c                                |   13 
 sound/soc/codecs/wm5110.c                                |    8 
 sound/soc/generic/simple-card-utils.c                    |    1 
 sound/soc/sh/rcar/core.c                                 |   14 
 sound/soc/sh/rcar/rsnd.h                                 |    1 
 sound/soc/sh/rcar/src.c                                  |  116 +++++-
 sound/soc/sh/rcar/ssi.c                                  |    3 
 sound/soc/soc-ops.c                                      |   15 
 sound/soc/sof/amd/acp-ipc.c                              |   23 -
 sound/soc/sof/intel/hda-codec.c                          |    1 
 tools/objtool/check.c                                    |    9 
 tools/testing/selftests/bpf/prog_tests/sockmap_basic.c   |    6 
 186 files changed, 1802 insertions(+), 1165 deletions(-)

Alban Kurti (2):
rust: error: add missing newline to pr_warn! calls
rust: init: add missing newline to pr_info! calls

Alex Henrie (2):
HID: apple: fix up the F6 key on the Omoton KB066 keyboard
HID: apple: disable Fn key handling on the Omoton KB066

Alex Hung (1):
drm/amd/display: Assign normalized_pix_clk when color depth = 14

Alexander Stein (1):
usb: phy: generic: Use proper helper for property detection

Alexey Kashavkin (1):
netfilter: nft_exthdr: fix offset with ipv4_find_option()

Amit Cohen (1):
net: switchdev: Convert blocking notification chain to a raw one

Andrii Nakryiko (1):
lib/buildid: Handle memfd_secret() files in build_id_parse()

Andy Shevchenko (1):
hrtimers: Mark is_migration_base() with __always_inline

Antheas Kapenekakis (3):
Input: xpad - add support for ZOTAC Gaming Zone
Input: xpad - add support for TECNO Pocket Go
Input: xpad - rename QH controller to Legion Go S

Arnd Bergmann (1):
x86/irq: Define trace events conditionally

Artur Weber (1):
pinctrl: bcm281xx: Fix incorrect regmap max_registers value

Bard Liao (1):
ASoC: rt722-sdca: add missing readable registers

Benno Lossin (1):
rust: init: fix Zeroable implementation for Option<NonNull<T>> and Option<KBox<T>>

Boon Khai Ng (1):
USB: serial: ftdi_sio: add support for Altera USB Blaster 3

Brahmajit Das (1):
vboxsf: fix building with GCC 15

Breno Leitao (1):
netpoll: hold rcu read lock in __netpoll_send_skb()

Carolina Jubran (1):
net/mlx5e: Prevent bridge link show failure for non-eswitch-allowed devices

Charles Keepax (2):
ASoC: ops: Consistently treat platform_max as control value
ASoC: cs42l43: Fix maximum ADC Volume

Chengen Du (1):
iscsi_ibft: Fix UBSAN shift-out-of-bounds warning in ibft_attr_show_nic()

Chia-Lin Kao (AceLan) (1):
HID: ignore non-functional sensor in HP 5MP Camera

Christian Loehle (1):
sched/debug: Provide slice length for fair tasks

Christophe JAILLET (4):
ASoC: codecs: wm0010: Fix error handling path in wm0010_spi_probe()
i2c: ali1535: Fix an error handling path in ali1535_probe()
i2c: ali15x3: Fix an error handling path in ali15x3_probe()
i2c: sis630: Fix an error handling path in sis630_probe()

Christopher Lentocha (1):
nvme-pci: quirk Acer FA100 for non-uniqueue identifiers

Cong Wang (1):
net_sched: Prevent creation of classes with TC_H_ROOT

Cristian Ciocaltea (1):
ASoC: SOF: amd: Handle IPC replies before FW_BOOT_COMPLETE

Dan Carpenter (1):
ipvs: prevent integer overflow in do_ip_vs_get_ctl()

Daniel Brackenbury (1):
HID: topre: Fix n-key rollover on Realforce R3S TKL boards

Daniel Lezcano (1):
thermal/cpufreq_cooling: Remove structure member documentation

Daniel Wagner (4):
nvme-fc: go straight to connecting state when initializing
nvme-fc: do not ignore connectivity loss during connecting
nvme: only allow entering LIVE from CONNECTING state
nvme-fc: rely on state transitions to handle connectivity loss

David Woodhouse (1):
clockevents/drivers/i8253: Fix stop sequence for timer 0

Dmitry Kandybka (1):
platform/x86/intel: pmc: fix ltr decode in pmc_core_ltr_show()

Edson Juliano Drosdeck (1):
ALSA: hda/realtek: Limit mic boost on Positivo ARN50

Eric Dumazet (1):
tcp: fix races in tcp_abort()

Eric W. Biederman (1):
alpha/elf: Fix misc/setarch test of util-linux by removing 32bit support

Fabio Porcedda (2):
USB: serial: option: add Telit Cinterion FE990B compositions
USB: serial: option: fix Telit Cinterion FE990A name

Felix Moessbauer (1):
hrtimer: Use and report correct timerslack values for realtime tasks

Florent Revest (1):
x86/microcode/AMD: Fix out-of-bounds on systems with CPU-less NUMA nodes

Florian Westphal (1):
netfilter: nf_tables: allow clone callbacks to sleep

Frederic Weisbecker (1):
net: Handle napi_schedule() calls from non-interrupt

Gannon Kolding (1):
ACPI: resource: IRQ override for Eluktronics MECH-17

Greg Kroah-Hartman (1):

      Linux 6.6.84

Grzegorz Nitka (1):
ice: fix memory leak in aRFS after reset

Guillaume Nault (1):
gre: Fix IPv6 link-local address generation.

H. Nikolaus Schaller (1):
Input: ads7846 - fix gpiod allocation

Hangbin Liu (1):
bonding: fix incorrect MAC address setting to receive NS messages

Haoxiang Li (1):
qlcnic: fix memory leak issues in qlcnic_sriov_common.c

Harry Wentland (1):
drm/vkms: Round fixp2int conversion in lerp_u16

Hector Martin (4):
apple-nvme: Release power domains when probe fails
ASoC: tas2770: Fix volume scale
ASoC: tas2764: Fix power control mask
ASoC: tas2764: Set the SDOUT polarity correctly

Henrique Carvalho (1):
smb: client: Fix match_session bug preventing session reuse

Ievgen Vovk (1):
HID: hid-apple: Apple Magic Keyboard a3203 USB-C support

Ilya Maximets (1):
net: openvswitch: remove misbehaving actions length check

Imre Deak (1):
drm/dp_mst: Fix locking when skipping CSN before topology probing

Ivan Abramov (1):
drm/gma500: Add NULL check for pci_gfx_root in mid_get_vbt_data()

Jan Beulich (1):
Xen/swiotlb: mark xen_swiotlb_fixup() __init

Jann Horn (1):

      sched: Clarify wake_up_q()'s write to task->wake_q.next

Jeff LaBundy (1):
Input: iqs7222 - preserve system status register

Jens Axboe (8):
mm: add nommu variant of vm_insert_pages()
io_uring: get rid of remap_pfn_range() for mapping rings/sqes
io_uring: don't attempt to mmap larger than what the user asks for
io_uring: use vmap() for ring mapping
io_uring: unify io_pin_pages()
io_uring/kbuf: vmap pinned buffer ring
io_uring/kbuf: use vm_insert_pages() for mmap'ed pbuf ring
io_uring: use unpin_user_pages() where appropriate

Jianbo Liu (1):
net/mlx5: Bridge, fix the crash caused by LAG state check

Jiayuan Chen (1):
selftests/bpf: Fix invalid flag of recv()

Jiri Pirko (1):
net/mlx5: Fill out devlink dev info only for PFs

Joe Hattori (1):
powercap: call put_device() on an error path in powercap_register_control_type()

Johan Hovold (1):
USB: serial: option: match on interface class for Telit FN990B

Joseph Huang (1):
net: dsa: mv88e6xxx: Verify after ATU Load ops

Josh Poimboeuf (1):
objtool: Ignore dangling jump table entries

Jun Yang (1):
sched: address a potential NULL pointer dereference in the GRED scheduler.

Kan Liang (1):
perf/x86/intel: Use better start period for frequency mode

Kent Overstreet (1):
dm-flakey: Fix memory corruption in optional corrupt_bio_byte feature

Kirill A. Shutemov (1):
mm: split critical region in remap_file_pages() and invoke LSMs in between

Kohei Enju (1):
netfilter: nf_conncount: Fully initialize struct nf_conncount_tuple in insert_tree()

Kuninori Morimoto (4):
ASoC: simple-card-utils.c: add missing dlc->of_node
ASoC: rsnd: indicate unsupported clock rate
ASoC: rsnd: don't indicate warning on rsnd_kctrl_accept_runtime()
ASoC: rsnd: adjust convert rate limitation

Leo Li (1):
drm/amd/display: Disable unneeded hpd interrupts during dm_init

Liu Shixin (1):
zram: fix NULL pointer in comp_algorithm_show()

Luiz Augusto von Dentz (4):
Bluetooth: hci_event: Fix enabling passive scanning
Revert "Bluetooth: hci_core: Fix sleeping function called from invalid context"
Bluetooth: L2CAP: Fix slab-use-after-free Read in l2cap_send_cmd
Bluetooth: L2CAP: Fix corrupted list in hci_chan_del

Magnus Lindholm (1):
scsi: qla1280: Fix kernel oops when debug level > 2

Mario Limonciello (2):
drm/amd/display: Restore correct backlight brightness after a GPU reset drm/amd/display: Fix slab-use-after-free on hdcp_work

Mark Pearson (1):
platform/x86: thinkpad_acpi: Support for V9 DYTC platform profiles

Matt Johnston (1):
net: mctp i2c: Copy headers if cloned

Matthew Maurer (1):
rust: Disallow BTF generation with Rust + LTO

Matthieu Baerts (NGI0) (1):
mptcp: safety check before fallback

Maurizio Lombardi (2):
nvme-tcp: add basic support for the C2HTermReq PDU
nvme-tcp: Fix a C2HTermReq error message

Michael Kelley (3):
fbdev: hyperv_fb: iounmap() the correct memory when removing a device drm/hyperv: Fix address space leak when Hyper-V DRM device is removed
Drivers: hv: vmbus: Don't release fb_mmio resource in vmbus_free_mmio()

Miklos Szeredi (1):
fuse: don't truncate cached, mutated symlink

Ming Lei (1):
block: fix 'kmem_cache of name 'bio-108' already exists'

Miri Korenblit (1):
wifi: cfg80211: cancel wiphy_work before freeing wiphy

Mitchell Levy (1):
rust: lockdep: Remove support for dynamically allocated LockClassKeys

Murad Masimov (4):
cifs: Fix integer overflow while processing acregmax mount option
cifs: Fix integer overflow while processing acdirmax mount option
cifs: Fix integer overflow while processing actimeo mount option
cifs: Fix integer overflow while processing closetimeo mount option

Namjae Jeon (2):
ksmbd: fix use-after-free in ksmbd_free_work_struct
ksmbd: prevent connection release during oplock break notification

Nicklas Bo Jensen (1):
netfilter: nf_conncount: garbage collection is not skipped when jiffies wrap around

Nilton Perim Neto (1):
Input: xpad - add 8BitDo SN30 Pro, Hyperkin X91 and Gamesir G7 SE controllers

Oleg Nesterov (1):
sched/isolation: Prevent boot crash when the boot CPU is nohz_full

Pablo Neira Ayuso (2):
netfilter: nf_tables: use timestamp to check for set element timeout
netfilter: nf_tables: bail out if stateful expression provides no .clone

Pali Rohár (3):
cifs: Treat unhandled directory name surrogate reparse points as mount directory nodes
cifs: Validate content of WSL reparse point buffers
cifs: Throw -EOPNOTSUPP error on unsupported reparse point type from parse_reparse_point()

Paulo Alcantara (2):
smb: client: fix noisy when tree connecting to DFS interlink targets
smb: client: fix regression with guest option

Pavel Begunkov (2):
io_uring: fix corner case forgetting to vunmap
io_uring: fix error pbuf checking

Pavel Rojtberg (1):
Input: xpad - add multiple supported devices

Peter Oberparleiter (1):
s390/cio: Fix CHPID "configure" attribute caching

Philipp Stanner (1):
stmmac: loongson: Pass correct arg to PCI function

Rik van Riel (1):
scsi: core: Use GFP_NOIO to avoid circular locking dependency

Ruozhu Li (1):
nvmet-rdma: recheck queue state is LIVE in state lock in recv done

Sebastian Andrzej Siewior (1):
netfilter: nft_ct: Use __refcount_inc() for per-CPU nft_ct_pcpu_template.

Seunghui Lee (1):
scsi: ufs: core: Fix error return with query response

Shay Drory (1):
net/mlx5: Lag, Check shared fdb before creating MultiPort E-Switch

Stephan Gerhold (1):
net: wwan: mhi_wwan_mbim: Silence sequence number glitch errors

Steve French (1):
smb3: add support for IAKerb

Sybil Isabel Dorsett (1):
platform/x86: thinkpad_acpi: Fix invalid fan speed on ThinkPad X120e

Taehee Yoo (1):
eth: bnxt: do not update checksum in bnxt_xdp_build_skb()

Tamir Duberstein (1):
scripts: generate_rust_analyzer: add missing macros deps

Terry Cheong (1):
ASoC: SOF: Intel: hda: add softdep pre to snd-hda-codec-hdmi module

Thomas Mizrahi (1):
ASoC: amd: yc: Support mic on another Lenovo ThinkPad E16 Gen 2 model

Thomas Zimmermann (1):
drm/nouveau: Do not override forced connector status

Uday Shankar (1):
io-wq: backoff when retrying worker creation

Varada Pavani (1):
clk: samsung: update PLL locktime for PLL142XX used on FSD platform

Ville Syrjälä (2):
drm/i915/cdclk: Do cdclk post plane programming later drm/atomic: Filter out redundant DPMS calls

Vitaly Rodionov (1):
ASoC: arizona/madera: use fsleep() in up/down DAPM event delays.

Wander Lairson Costa (1):
bpf: Use raw_spinlock_t in ringbuf

Wentao Liang (1):
net/mlx5: handle errors in mlx5_chains_create_table()

Werner Sembach (4):
Input: i8042 - swap old quirk combination with new quirk for NHxxRZQ
Input: i8042 - add required quirks for missing old boardnames
Input: i8042 - swap old quirk combination with new quirk for several devices
Input: i8042 - swap old quirk combination with new quirk for more devices

Xueming Feng (1):
tcp: fix forever orphan socket caused by tcp_abort

Yu-Chun Lin (1):
sctp: Fix undefined behavior in left shift operation

Zhang Lixu (2):
HID: intel-ish-hid: fix the length of MNG_SYNC_FW_CLOCK in doorbell
HID: intel-ish-hid: Send clock sync message immediately after reset

Zhenhua Huang (1):
arm64: mm: Populate vmemmap at the page level if not section aligned

author maintainer
#1 lore raw
Documentation/timers/no_hz.rst +2 -5
index f8786be15183..7fe8ef9718d8 100644
@@ -129,11 +129,8 @@ adaptive-tick CPUs:  At least one non-adaptive-tick CPU must remain
 online to handle timekeeping tasks in order to ensure that system
 calls like gettimeofday() returns accurate values on adaptive-tick CPUs.
 (This is not an issue for CONFIG_NO_HZ_IDLE=y because there are no running
-user processes to observe slight drifts in clock rate.)  Therefore, the
-boot CPU is prohibited from entering adaptive-ticks mode.  Specifying a
-"nohz_full=" mask that includes the boot CPU will result in a boot-time
-error message, and the boot CPU will be removed from the mask.  Note that
-this means that your system must have at least two CPUs in order for
+user processes to observe slight drifts in clock rate.) Note that this
+means that your system must have at least two CPUs in order for
 CONFIG_NO_HZ_FULL=y to do anything for you.
 
 Finally, adaptive-ticks CPUs must have their RCU callbacks offloaded.
Makefile +1 -1
index 59060f58cfef..dfef2497467b 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 6
 PATCHLEVEL = 6
-SUBLEVEL = 83
+SUBLEVEL = 84
 EXTRAVERSION =
 NAME = Pinguïn Aangedreven
 
arch/alpha/include/asm/elf.h +1 -5
index e6da23f1da83..adc87404ef87 100644
@@ -74,7 +74,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
 /*
  * This is used to ensure we don't load something for the wrong architecture.
  */
-#define elf_check_arch(x) ((x)->e_machine == EM_ALPHA)
+#define elf_check_arch(x) (((x)->e_machine == EM_ALPHA) && !((x)->e_flags & EF_ALPHA_32BIT))
 
 /*
  * These are used to set parameters in the core dumps.
@@ -139,10 +139,6 @@ extern int dump_elf_task(elf_greg_t *dest, struct task_struct *task);
 	: amask (AMASK_CIX) ? "ev6" : "ev67");	\
 })
 
-#define SET_PERSONALITY(EX)					\
-	set_personality(((EX).e_flags & EF_ALPHA_32BIT)		\
-	   ? PER_LINUX_32BIT : PER_LINUX)
-
 extern int alpha_l1i_cacheshape;
 extern int alpha_l1d_cacheshape;
 extern int alpha_l2_cacheshape;
arch/alpha/include/asm/pgtable.h +1 -1
index 635f0a5f5bbd..02e8817a8921 100644
@@ -360,7 +360,7 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pte)
 
 extern void paging_init(void);
 
-/* We have our own get_unmapped_area to cope with ADDR_LIMIT_32BIT.  */
+/* We have our own get_unmapped_area */
 #define HAVE_ARCH_UNMAPPED_AREA
 
 #endif /* _ALPHA_PGTABLE_H */
arch/alpha/include/asm/processor.h +2 -6
index 55bb1c09fd39..5dce5518a211 100644
@@ -8,23 +8,19 @@
 #ifndef __ASM_ALPHA_PROCESSOR_H
 #define __ASM_ALPHA_PROCESSOR_H
 
-#include <linux/personality.h>	/* for ADDR_LIMIT_32BIT */
-
 /*
  * We have a 42-bit user address space: 4TB user VM...
  */
 #define TASK_SIZE (0x40000000000UL)
 
-#define STACK_TOP \
-  (current->personality & ADDR_LIMIT_32BIT ? 0x80000000 : 0x00120000000UL)
+#define STACK_TOP (0x00120000000UL)
 
 #define STACK_TOP_MAX	0x00120000000UL
 
 /* This decides where the kernel will search for a free chunk of vm
  * space during mmap's.
  */
-#define TASK_UNMAPPED_BASE \
-  ((current->personality & ADDR_LIMIT_32BIT) ? 0x40000000 : TASK_SIZE / 2)
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 2)
 
 /* This is dead.  Everything has been moved to thread_info.  */
 struct thread_struct { };
arch/alpha/kernel/osf_sys.c +2 -9
index 5db88b627439..ebd076fad804 100644
@@ -1211,8 +1211,7 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p)
 	return ret;
 }
 
-/* Get an address range which is currently unmapped.  Similar to the
-   generic version except that we know how to honor ADDR_LIMIT_32BIT.  */
+/* Get an address range which is currently unmapped. */
 
 static unsigned long
 arch_get_unmapped_area_1(unsigned long addr, unsigned long len,
@@ -1234,13 +1233,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
 		       unsigned long len, unsigned long pgoff,
 		       unsigned long flags)
 {
-	unsigned long limit;
-
-	/* "32 bit" actually means 31 bit, since pointers sign extend.  */
-	if (current->personality & ADDR_LIMIT_32BIT)
-		limit = 0x80000000;
-	else
-		limit = TASK_SIZE;
+	unsigned long limit = TASK_SIZE;
 
 	if (len > limit)
 		return -ENOMEM;
arch/arm64/mm/mmu.c +4 -1
index 47781bec6171..38f3fe2e6bf6 100644
@@ -1150,8 +1150,11 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
 		struct vmem_altmap *altmap)
 {
 	WARN_ON((start < VMEMMAP_START) || (end > VMEMMAP_END));
+	/* [start, end] should be within one section */
+	WARN_ON_ONCE(end - start > PAGES_PER_SECTION * sizeof(struct page));
 
-	if (!IS_ENABLED(CONFIG_ARM64_4K_PAGES))
+	if (!IS_ENABLED(CONFIG_ARM64_4K_PAGES) ||
+	    (end - start < PAGES_PER_SECTION * sizeof(struct page)))
 		return vmemmap_populate_basepages(start, end, node, altmap);
 	else
 		return vmemmap_populate_hugepages(start, end, node, altmap);
arch/x86/events/intel/core.c +85 -0

97 lines not on this page · raw message

arch/x86/kernel/cpu/microcode/amd.c +1 -1
index af766298b253..c683e8dedfee 100644
@@ -1078,7 +1078,7 @@ static enum ucode_state load_microcode_amd(u8 family, const u8 *data, size_t siz
 	if (ret != UCODE_OK)
 		return ret;
 
-	for_each_node(nid) {
+	for_each_node_with_cpus(nid) {
 		cpu = cpumask_first(cpumask_of_node(nid));
 		c = &cpu_data(cpu);
 
arch/x86/kernel/cpu/mshyperv.c +0 -11
index 5ae77d966caf..e709070eed70 100644
@@ -16,7 +16,6 @@
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/kexec.h>
-#include <linux/i8253.h>
 #include <linux/random.h>
 #include <asm/processor.h>
 #include <asm/hypervisor.h>
@@ -575,16 +574,6 @@ static void __init ms_hyperv_init_platform(void)
 	if (efi_enabled(EFI_BOOT))
 		x86_platform.get_nmi_reason = hv_get_nmi_reason;
 
-	/*
-	 * Hyper-V VMs have a PIT emulation quirk such that zeroing the
-	 * counter register during PIT shutdown restarts the PIT. So it
-	 * continues to interrupt @18.2 HZ. Setting i8253_clear_counter
-	 * to false tells pit_shutdown() not to zero the counter so that
-	 * the PIT really is shutdown. Generation 2 VMs don't have a PIT,
-	 * and setting this value has no effect.
-	 */
-	i8253_clear_counter_on_shutdown = false;
-
 #if IS_ENABLED(CONFIG_HYPERV)
 	if ((hv_get_isolation_type() == HV_ISOLATION_TYPE_VBS) ||
 	    ms_hyperv.paravisor_present)
arch/x86/kernel/irq.c +2 -0
index 11761c124545..6573678c4bf4 100644
@@ -23,8 +23,10 @@
 #include <asm/traps.h>
 #include <asm/thermal.h>
 
+#if defined(CONFIG_X86_LOCAL_APIC) || defined(CONFIG_X86_THERMAL_VECTOR)
 #define CREATE_TRACE_POINTS
 #include <asm/trace/irq_vectors.h>
+#endif
 
 DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat);
 EXPORT_PER_CPU_SYMBOL(irq_stat);
block/bio.c +1 -1
index 62419aa09d73..4a8e76169957 100644
@@ -78,7 +78,7 @@ struct bio_slab {
 	struct kmem_cache *slab;
 	unsigned int slab_ref;
 	unsigned int slab_size;
-	char name[8];
+	char name[12];
 };
 static DEFINE_MUTEX(bio_slab_lock);
 static DEFINE_XARRAY(bio_slabs);
drivers/acpi/resource.c +6 -0
index 64d83ff3c0d9..96a987506e71 100644
@@ -549,6 +549,12 @@ static const struct dmi_system_id maingear_laptop[] = {
 			DMI_MATCH(DMI_BOARD_NAME, "RP-15"),
 		},
 	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Eluktronics Inc."),
+			DMI_MATCH(DMI_BOARD_NAME, "MECH-17"),
+		},
+	},
 	{
 		/* TongFang GM6XGxX/TUXEDO Stellaris 16 Gen5 AMD */
 		.matches = {
drivers/block/zram/zram_drv.c +2 -2
index b73038ad86f7..44cf0e51d7db 100644
@@ -2247,6 +2247,8 @@ static int zram_add(void)
 	zram->disk->private_data = zram;
 	snprintf(zram->disk->disk_name, 16, "zram%d", device_id);
 
+	comp_algorithm_set(zram, ZRAM_PRIMARY_COMP, default_compressor);
+
 	/* Actual capacity set using sysfs (/sys/block/zram<id>/disksize */
 	set_capacity(zram->disk, 0);
 	/* zram devices sort of resembles non-rotational disks */
@@ -2281,8 +2283,6 @@ static int zram_add(void)
 	if (ret)
 		goto out_cleanup_disk;
 
-	comp_algorithm_set(zram, ZRAM_PRIMARY_COMP, default_compressor);
-
 	zram_debugfs_register(zram);
 	pr_info("Added device: %s\n", zram->disk->disk_name);
 	return device_id;
drivers/clk/samsung/clk-pll.c +6 -1
index 74934c6182ce..31650f322089 100644
@@ -206,6 +206,7 @@ static const struct clk_ops samsung_pll3000_clk_ops = {
  */
 /* Maximum lock time can be 270 * PDIV cycles */
 #define PLL35XX_LOCK_FACTOR	(270)
+#define PLL142XX_LOCK_FACTOR	(150)
 
 #define PLL35XX_MDIV_MASK       (0x3FF)
 #define PLL35XX_PDIV_MASK       (0x3F)
@@ -272,7 +273,11 @@ static int samsung_pll35xx_set_rate(struct clk_hw *hw, unsigned long drate,
 	}
 
 	/* Set PLL lock time. */
-	writel_relaxed(rate->pdiv * PLL35XX_LOCK_FACTOR,
+	if (pll->type == pll_142xx)
+		writel_relaxed(rate->pdiv * PLL142XX_LOCK_FACTOR,
+			pll->lock_reg);
+	else
+		writel_relaxed(rate->pdiv * PLL35XX_LOCK_FACTOR,
 			pll->lock_reg);
 
 	/* Change PLL PMS values */
drivers/clocksource/i8253.c +25 -11
index cb215e6f2e83..39f7c2d736d1 100644
@@ -20,13 +20,6 @@
 DEFINE_RAW_SPINLOCK(i8253_lock);
 EXPORT_SYMBOL(i8253_lock);
 
-/*
- * Handle PIT quirk in pit_shutdown() where zeroing the counter register
- * restarts the PIT, negating the shutdown. On platforms with the quirk,
- * platform specific code can set this to false.
- */
-bool i8253_clear_counter_on_shutdown __ro_after_init = true;
-
 #ifdef CONFIG_CLKSRC_I8253
 /*
  * Since the PIT overflows every tick, its not very useful
@@ -112,12 +105,33 @@ void clockevent_i8253_disable(void)
 {
 	raw_spin_lock(&i8253_lock);
 
+	/*
+	 * Writing the MODE register should stop the counter, according to
+	 * the datasheet. This appears to work on real hardware (well, on
+	 * modern Intel and AMD boxes; I didn't dig the Pegasos out of the
+	 * shed).
+	 *
+	 * However, some virtual implementations differ, and the MODE change
+	 * doesn't have any effect until either the counter is written (KVM
+	 * in-kernel PIT) or the next interrupt (QEMU). And in those cases,
+	 * it may not stop the *count*, only the interrupts. Although in
+	 * the virt case, that probably doesn't matter, as the value of the
+	 * counter will only be calculated on demand if the guest reads it;
+	 * it's the interrupts which cause steal time.
+	 *
+	 * Hyper-V apparently has a bug where even in mode 0, the IRQ keeps
+	 * firing repeatedly if the counter is running. But it *does* do the
+	 * right thing when the MODE register is written.
+	 *
+	 * So: write the MODE and then load the counter, which ensures that
+	 * the IRQ is stopped on those buggy virt implementations. And then
+	 * write the MODE again, which is the right way to stop it.
+	 */
 	outb_p(0x30, PIT_MODE);
+	outb_p(0, PIT_CH0);
+	outb_p(0, PIT_CH0);
 
-	if (i8253_clear_counter_on_shutdown) {
-		outb_p(0, PIT_CH0);
-		outb_p(0, PIT_CH0);
-	}
+	outb_p(0x30, PIT_MODE);
 
 	raw_spin_unlock(&i8253_lock);
 }
drivers/firmware/iscsi_ibft.c +4 -1
index 6e9788324fea..371f24569b3b 100644
@@ -310,7 +310,10 @@ static ssize_t ibft_attr_show_nic(void *data, int type, char *buf)
 		str += sprintf_ipaddr(str, nic->ip_addr);
 		break;
 	case ISCSI_BOOT_ETH_SUBNET_MASK:
-		val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1));
+		if (nic->subnet_mask_prefix > 32)
+			val = cpu_to_be32(~0);
+		else
+			val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1));
 		str += sprintf(str, "%pI4", &val);
 		break;
 	case ISCSI_BOOT_ETH_PREFIX_LEN:
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +10 -0
index aab99df3ba1a..986ee37688c1 100644
@@ -227,6 +227,10 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
 static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector);
 static void handle_hpd_rx_irq(void *param);
 
+static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
+					 int bl_idx,
+					 u32 user_brightness);
+
 static bool
 is_timing_unchanged_for_freesync(struct drm_crtc_state *old_crtc_state,
 				 struct drm_crtc_state *new_crtc_state);
@@ -2879,6 +2883,12 @@ static int dm_resume(void *handle)
 
 		mutex_unlock(&dm->dc_lock);
 
+		/* set the backlight after a reset */
+		for (i = 0; i < dm->num_of_edps; i++) {
+			if (dm->backlight_dev[i])
+				amdgpu_dm_backlight_set_level(dm, i, dm->brightness[i]);
+		}
+
 		return 0;
 	}
 	/* Recreate dc_state - DC invalidates it when setting power state to S3. */
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c +1 -0
index 20cfc5be21a4..2ad9f900a857 100644
@@ -455,6 +455,7 @@ void hdcp_destroy(struct kobject *kobj, struct hdcp_workqueue *hdcp_work)
 	for (i = 0; i < hdcp_work->max_link; i++) {
 		cancel_delayed_work_sync(&hdcp_work[i].callback_dwork);
 		cancel_delayed_work_sync(&hdcp_work[i].watchdog_timer_dwork);
+		cancel_delayed_work_sync(&hdcp_work[i].property_validate_dwork);
 	}
 
 	sysfs_remove_bin_file(kobj, &hdcp_work[0].attr);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c +45 -19

101 lines not on this page · raw message

drivers/gpu/drm/amd/display/dc/core/dc_resource.c +5 -2
index 69c0d0b341af..2f25f7096c4d 100644
@@ -2567,10 +2567,13 @@ static int get_norm_pix_clk(const struct dc_crtc_timing *timing)
 			break;
 		case COLOR_DEPTH_121212:
 			normalized_pix_clk = (pix_clk * 36) / 24;
-		break;
+			break;
+		case COLOR_DEPTH_141414:
+			normalized_pix_clk = (pix_clk * 42) / 24;
+			break;
 		case COLOR_DEPTH_161616:
 			normalized_pix_clk = (pix_clk * 48) / 24;
-		break;
+			break;
 		default:
 			ASSERT(0);
 		break;
drivers/gpu/drm/display/drm_dp_mst_topology.c +24 -16
index d6c5de190c27..08f8a22431fe 100644
@@ -3959,6 +3959,22 @@ static int drm_dp_mst_handle_down_rep(struct drm_dp_mst_topology_mgr *mgr)
 	return 0;
 }
 
+static bool primary_mstb_probing_is_done(struct drm_dp_mst_topology_mgr *mgr)
+{
+	bool probing_done = false;
+
+	mutex_lock(&mgr->lock);
+
+	if (mgr->mst_primary && drm_dp_mst_topology_try_get_mstb(mgr->mst_primary)) {
+		probing_done = mgr->mst_primary->link_address_sent;
+		drm_dp_mst_topology_put_mstb(mgr->mst_primary);
+	}
+
+	mutex_unlock(&mgr->lock);
+
+	return probing_done;
+}
+
 static inline bool
 drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr,
 			  struct drm_dp_pending_up_req *up_req)
@@ -3989,8 +4005,12 @@ drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr,
 
 	/* TODO: Add missing handler for DP_RESOURCE_STATUS_NOTIFY events */
 	if (msg->req_type == DP_CONNECTION_STATUS_NOTIFY) {
-		dowork = drm_dp_mst_handle_conn_stat(mstb, &msg->u.conn_stat);
-		hotplug = true;
+		if (!primary_mstb_probing_is_done(mgr)) {
+			drm_dbg_kms(mgr->dev, "Got CSN before finish topology probing. Skip it.\n");
+		} else {
+			dowork = drm_dp_mst_handle_conn_stat(mstb, &msg->u.conn_stat);
+			hotplug = true;
+		}
 	}
 
 	drm_dp_mst_topology_put_mstb(mstb);
@@ -4069,10 +4089,11 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
 	drm_dp_send_up_ack_reply(mgr, mst_primary, up_req->msg.req_type,
 				 false);
 
+	drm_dp_mst_topology_put_mstb(mst_primary);
+
 	if (up_req->msg.req_type == DP_CONNECTION_STATUS_NOTIFY) {
 		const struct drm_dp_connection_status_notify *conn_stat =
 			&up_req->msg.u.conn_stat;
-		bool handle_csn;
 
 		drm_dbg_kms(mgr->dev, "Got CSN: pn: %d ldps:%d ddps: %d mcs: %d ip: %d pdt: %d\n",
 			    conn_stat->port_number,
@@ -4081,16 +4102,6 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
 			    conn_stat->message_capability_status,
 			    conn_stat->input_port,
 			    conn_stat->peer_device_type);
-
-		mutex_lock(&mgr->probe_lock);
-		handle_csn = mst_primary->link_address_sent;
-		mutex_unlock(&mgr->probe_lock);
-
-		if (!handle_csn) {
-			drm_dbg_kms(mgr->dev, "Got CSN before finish topology probing. Skip it.");
-			kfree(up_req);
-			goto out_put_primary;
-		}
 	} else if (up_req->msg.req_type == DP_RESOURCE_STATUS_NOTIFY) {
 		const struct drm_dp_resource_status_notify *res_stat =
 			&up_req->msg.u.resource_stat;
@@ -4105,9 +4116,6 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
 	list_add_tail(&up_req->next, &mgr->up_req_list);
 	mutex_unlock(&mgr->up_req_lock);
 	queue_work(system_long_wq, &mgr->up_req_work);
-
-out_put_primary:
-	drm_dp_mst_topology_put_mstb(mst_primary);
 out_clear_reply:
 	memset(&mgr->up_req_recv, 0, sizeof(struct drm_dp_sideband_msg_rx));
 	return 0;
drivers/gpu/drm/drm_atomic_uapi.c +4 -0
index ab03b08433f8..814b1da36ee9 100644
@@ -974,6 +974,10 @@ int drm_atomic_connector_commit_dpms(struct drm_atomic_state *state,
 
 	if (mode != DRM_MODE_DPMS_ON)
 		mode = DRM_MODE_DPMS_OFF;
+
+	if (connector->dpms == mode)
+		goto out;
+
 	connector->dpms = mode;
 
 	crtc = connector->state->crtc;
drivers/gpu/drm/drm_connector.c +4 -0
index 35bed6621447..573086d88fd2 100644
@@ -1162,6 +1162,10 @@ static const u32 dp_colorspaces =
  * 	callback. For atomic drivers the remapping to the "ACTIVE" property is
  * 	implemented in the DRM core.
  *
+ * 	On atomic drivers any DPMS setproperty ioctl where the value does not
+ * 	change is completely skipped, otherwise a full atomic commit will occur.
+ * 	On legacy drivers the exact behavior is driver specific.
+ *
  * 	Note that this property cannot be set through the MODE_ATOMIC ioctl,
  * 	userspace must use "ACTIVE" on the CRTC instead.
  *
drivers/gpu/drm/gma500/mid_bios.c +5 -0
index 7e76790c6a81..cba97d7db131 100644
@@ -279,6 +279,11 @@ static void mid_get_vbt_data(struct drm_psb_private *dev_priv)
 					    0, PCI_DEVFN(2, 0));
 	int ret = -1;
 
+	if (pci_gfx_root == NULL) {
+		WARN_ON(1);
+		return;
+	}
+
 	/* Get the address of the platform config vbt */
 	pci_read_config_dword(pci_gfx_root, 0xFC, &addr);
 	pci_dev_put(pci_gfx_root);
drivers/gpu/drm/hyperv/hyperv_drm_drv.c +2 -0
index 8026118c6e03..8a7933f5c6eb 100644
@@ -157,6 +157,7 @@ static int hyperv_vmbus_probe(struct hv_device *hdev,
 	return 0;
 
 err_free_mmio:
+	iounmap(hv->vram);
 	vmbus_free_mmio(hv->mem->start, hv->fb_size);
 err_vmbus_close:
 	vmbus_close(hdev->channel);
@@ -175,6 +176,7 @@ static void hyperv_vmbus_remove(struct hv_device *hdev)
 	vmbus_close(hdev->channel);
 	hv_set_drvdata(hdev, NULL);
 
+	iounmap(hv->vram);
 	vmbus_free_mmio(hv->mem->start, hv->fb_size);
 }
 
drivers/gpu/drm/i915/display/intel_display.c +2 -3
index 347527885ffd..28d132c238d1 100644
@@ -7097,9 +7097,6 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state)
 	/* Now enable the clocks, plane, pipe, and connectors that we set up. */
 	dev_priv->display.funcs.display->commit_modeset_enables(state);
 
-	if (state->modeset)
-		intel_set_cdclk_post_plane_update(state);
-
 	intel_wait_for_vblank_workers(state);
 
 	/* FIXME: We should call drm_atomic_helper_commit_hw_done() here
@@ -7178,6 +7175,8 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state)
 		intel_verify_planes(state);
 
 	intel_sagv_post_plane_update(state);
+	if (state->modeset)
+		intel_set_cdclk_post_plane_update(state);
 	intel_pmdemand_post_plane_update(state);
 
 	drm_atomic_helper_commit_hw_done(&state->base);
drivers/gpu/drm/nouveau/nouveau_connector.c +0 -1
index 22a125243d81..c1985448d9b3 100644
@@ -758,7 +758,6 @@ nouveau_connector_force(struct drm_connector *connector)
 	if (!nv_encoder) {
 		NV_ERROR(drm, "can't find encoder to force %s on!\n",
 			 connector->name);
-		connector->status = connector_status_disconnected;
 		return;
 	}
 
drivers/gpu/drm/vkms/vkms_composer.c +1 -1
index e7441b227b3c..3d6785d081f2 100644
@@ -98,7 +98,7 @@ static u16 lerp_u16(u16 a, u16 b, s64 t)
 
 	s64 delta = drm_fixp_mul(b_fp - a_fp,  t);
 
-	return drm_fixp2int(a_fp + delta);
+	return drm_fixp2int_round(a_fp + delta);
 }
 
 static s64 get_lut_index(const struct vkms_color_lut *lut, u16 channel_value)
drivers/hid/Kconfig +2 -1
index 9e2cde55b465..979ebe69c8e3 100644
@@ -1151,7 +1151,8 @@ config HID_TOPRE
 	tristate "Topre REALFORCE keyboards"
 	depends on HID
 	help
-	  Say Y for N-key rollover support on Topre REALFORCE R2 108/87 key keyboards.
+	  Say Y for N-key rollover support on Topre REALFORCE R2 108/87 key and
+          Topre REALFORCE R3S 87 key keyboards.
 
 config HID_THINGM
 	tristate "ThingM blink(1) USB RGB LED"
drivers/hid/hid-apple.c +12 -1
index d9e9829b2200..0b561c1eb59e 100644
@@ -363,6 +363,12 @@ static bool apple_is_non_apple_keyboard(struct hid_device *hdev)
 	return false;
 }
 
+static bool apple_is_omoton_kb066(struct hid_device *hdev)
+{
+	return hdev->product == USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI &&
+		strcmp(hdev->name, "Bluetooth Keyboard") == 0;
+}
+
 static inline void apple_setup_key_translation(struct input_dev *input,
 		const struct apple_key_translation *table)
 {
@@ -459,6 +465,7 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
 			 hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2015)
 			table = magic_keyboard_2015_fn_keys;
 		else if (hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021 ||
+			 hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024 ||
 			 hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021 ||
 			 hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021)
 			table = apple2021_fn_keys;
@@ -709,7 +716,7 @@ static int apple_input_configured(struct hid_device *hdev,
 {
 	struct apple_sc *asc = hid_get_drvdata(hdev);
 
-	if ((asc->quirks & APPLE_HAS_FN) && !asc->fn_found) {
+	if (((asc->quirks & APPLE_HAS_FN) && !asc->fn_found) || apple_is_omoton_kb066(hdev)) {
 		hid_info(hdev, "Fn key not found (Apple Wireless Keyboard clone?), disabling Fn key handling\n");
 		asc->quirks &= ~APPLE_HAS_FN;
 	}
@@ -1064,6 +1071,10 @@ static const struct hid_device_id apple_devices[] = {
 		.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY },
 	{ HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021),
 		.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024),
+		.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY },
+	{ HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024),
+		.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021),
 		.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY },
 	{ HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021),
drivers/hid/hid-ids.h +3 -0
index 1174626904cb..09090803f1dd 100644
@@ -184,6 +184,7 @@
 #define USB_DEVICE_ID_APPLE_IRCONTROL4	0x8242
 #define USB_DEVICE_ID_APPLE_IRCONTROL5	0x8243
 #define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021   0x029c
+#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024   0x0320
 #define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021   0x029a
 #define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021   0x029f
 #define USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT 0x8102
@@ -1085,6 +1086,7 @@
 #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001		0x3001
 #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3003		0x3003
 #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008		0x3008
+#define USB_DEVICE_ID_QUANTA_HP_5MP_CAMERA_5473		0x5473
 
 #define I2C_VENDOR_ID_RAYDIUM		0x2386
 #define I2C_PRODUCT_ID_RAYDIUM_4B33	0x4b33
@@ -1284,6 +1286,7 @@
 #define USB_VENDOR_ID_TOPRE			0x0853
 #define USB_DEVICE_ID_TOPRE_REALFORCE_R2_108			0x0148
 #define USB_DEVICE_ID_TOPRE_REALFORCE_R2_87			0x0146
+#define USB_DEVICE_ID_TOPRE_REALFORCE_R3S_87			0x0313
 
 #define USB_VENDOR_ID_TOPSEED		0x0766
 #define USB_DEVICE_ID_TOPSEED_CYBERLINK	0x0204
drivers/hid/hid-quirks.c +1 -0
index e0bbf0c6345d..5d7a418ccdbe 100644
@@ -891,6 +891,7 @@ static const struct hid_device_id hid_ignore_list[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DPAD) },
 #endif
 	{ HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_HP_5MP_CAMERA_5473) },
 	{ }
 };
 
drivers/hid/hid-topre.c +7 -0
index d1d5ca310ead..e69367267d84 100644
@@ -29,6 +29,11 @@ static __u8 *topre_report_fixup(struct hid_device *hdev, __u8 *rdesc,
 		hid_info(hdev,
 			"fixing up Topre REALFORCE keyboard report descriptor\n");
 		rdesc[72] = 0x02;
+	} else if (*rsize >= 106 && rdesc[28] == 0x29 && rdesc[29] == 0xe7 &&
+				    rdesc[30] == 0x81 && rdesc[31] == 0x00) {
+		hid_info(hdev,
+			"fixing up Topre REALFORCE keyboard report descriptor\n");
+		rdesc[31] = 0x02;
 	}
 	return rdesc;
 }
@@ -38,6 +43,8 @@ static const struct hid_device_id topre_id_table[] = {
 			 USB_DEVICE_ID_TOPRE_REALFORCE_R2_108) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_TOPRE,
 			 USB_DEVICE_ID_TOPRE_REALFORCE_R2_87) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_TOPRE,
+			 USB_DEVICE_ID_TOPRE_REALFORCE_R3S_87) },
 	{ }
 };
 MODULE_DEVICE_TABLE(hid, topre_id_table);
drivers/hid/intel-ish-hid/ipc/ipc.c +9 -6
index dd5fc60874ba..42141a78bdb4 100644
@@ -517,6 +517,10 @@ static int ish_fw_reset_handler(struct ishtp_device *dev)
 	/* ISH FW is dead */
 	if (!ish_is_input_ready(dev))
 		return	-EPIPE;
+
+	/* Send clock sync at once after reset */
+	ishtp_dev->prev_sync = 0;
+
 	/*
 	 * Set HOST2ISH.ILUP. Apparently we need this BEFORE sending
 	 * RESET_NOTIFY_ACK - FW will be checking for it
@@ -576,15 +580,14 @@ static void fw_reset_work_fn(struct work_struct *unused)
  */
 static void _ish_sync_fw_clock(struct ishtp_device *dev)
 {
-	static unsigned long	prev_sync;
-	uint64_t	usec;
+	struct ipc_time_update_msg time = {};
 
-	if (prev_sync && time_before(jiffies, prev_sync + 20 * HZ))
+	if (dev->prev_sync && time_before(jiffies, dev->prev_sync + 20 * HZ))
 		return;
 
-	prev_sync = jiffies;
-	usec = ktime_to_us(ktime_get_boottime());
-	ipc_send_mng_msg(dev, MNG_SYNC_FW_CLOCK, &usec, sizeof(uint64_t));
+	dev->prev_sync = jiffies;
+	/* The fields of time would be updated while sending message */
+	ipc_send_mng_msg(dev, MNG_SYNC_FW_CLOCK, &time, sizeof(time));
 }
 
 /**
drivers/hid/intel-ish-hid/ishtp/ishtp-dev.h +2 -0
index 32142c7d9a04..9b2ee3fe04b8 100644
@@ -212,6 +212,8 @@ struct ishtp_device {
 	unsigned int	ipc_tx_cnt;
 	unsigned long long	ipc_tx_bytes_cnt;
 
+	/* Time of the last clock sync */
+	unsigned long prev_sync;
 	const struct ishtp_hw_ops *ops;
 	size_t	mtu;
 	uint32_t	ishtp_msg_hdr;
drivers/hv/vmbus_drv.c +13 -0
index 756aebf32473..c54d759b0738 100644
@@ -2242,12 +2242,25 @@ void vmbus_free_mmio(resource_size_t start, resource_size_t size)
 	struct resource *iter;
 
 	mutex_lock(&hyperv_mmio_lock);
+
+	/*
+	 * If all bytes of the MMIO range to be released are within the
+	 * special case fb_mmio shadow region, skip releasing the shadow
+	 * region since no corresponding __request_region() was done
+	 * in vmbus_allocate_mmio().
+	 */
+	if (fb_mmio && start >= fb_mmio->start &&
+	    (start + size - 1 <= fb_mmio->end))
+		goto skip_shadow_release;
+
 	for (iter = hyperv_mmio; iter; iter = iter->sibling) {
 		if ((iter->start >= start + size) || (iter->end <= start))
 			continue;
 
 		__release_region(iter, start, size);
 	}
+
+skip_shadow_release:
 	release_mem_region(start, size);
 	mutex_unlock(&hyperv_mmio_lock);
 
drivers/i2c/busses/i2c-ali1535.c +11 -1
index ee83c4581bce..cd2c8afebe79 100644
@@ -490,6 +490,8 @@ MODULE_DEVICE_TABLE(pci, ali1535_ids);
 
 static int ali1535_probe(struct pci_dev *dev, const struct pci_device_id *id)
 {
+	int ret;
+
 	if (ali1535_setup(dev)) {
 		dev_warn(&dev->dev,
 			"ALI1535 not detected, module not inserted.\n");
@@ -501,7 +503,15 @@ static int ali1535_probe(struct pci_dev *dev, const struct pci_device_id *id)
 
 	snprintf(ali1535_adapter.name, sizeof(ali1535_adapter.name),
 		"SMBus ALI1535 adapter at %04x", ali1535_offset);
-	return i2c_add_adapter(&ali1535_adapter);
+	ret = i2c_add_adapter(&ali1535_adapter);
+	if (ret)
+		goto release_region;
+
+	return 0;
+
+release_region:
+	release_region(ali1535_smba, ALI1535_SMB_IOSIZE);
+	return ret;
 }
 
 static void ali1535_remove(struct pci_dev *dev)
drivers/i2c/busses/i2c-ali15x3.c +11 -1
index 0231c5be6354..c3f76b13a76f 100644
@@ -474,6 +474,8 @@ MODULE_DEVICE_TABLE (pci, ali15x3_ids);
 
 static int ali15x3_probe(struct pci_dev *dev, const struct pci_device_id *id)
 {
+	int ret;
+
 	if (ali15x3_setup(dev)) {
 		dev_err(&dev->dev,
 			"ALI15X3 not detected, module not inserted.\n");
@@ -485,7 +487,15 @@ static int ali15x3_probe(struct pci_dev *dev, const struct pci_device_id *id)
 
 	snprintf(ali15x3_adapter.name, sizeof(ali15x3_adapter.name),
 		"SMBus ALI15X3 adapter at %04x", ali15x3_smba);
-	return i2c_add_adapter(&ali15x3_adapter);
+	ret = i2c_add_adapter(&ali15x3_adapter);
+	if (ret)
+		goto release_region;
+
+	return 0;
+
+release_region:
+	release_region(ali15x3_smba, ALI15X3_SMB_IOSIZE);
+	return ret;
 }
 
 static void ali15x3_remove(struct pci_dev *dev)
drivers/i2c/busses/i2c-sis630.c +11 -1
index 87d56250d78a..c42ecadac4f2 100644
@@ -509,6 +509,8 @@ MODULE_DEVICE_TABLE(pci, sis630_ids);
 
 static int sis630_probe(struct pci_dev *dev, const struct pci_device_id *id)
 {
+	int ret;
+
 	if (sis630_setup(dev)) {
 		dev_err(&dev->dev,
 			"SIS630 compatible bus not detected, "
@@ -522,7 +524,15 @@ static int sis630_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	snprintf(sis630_adapter.name, sizeof(sis630_adapter.name),
 		 "SMBus SIS630 adapter at %04x", smbus_base + SMB_STS);
 
-	return i2c_add_adapter(&sis630_adapter);
+	ret = i2c_add_adapter(&sis630_adapter);
+	if (ret)
+		goto release_region;
+
+	return 0;
+
+release_region:
+	release_region(smbus_base + SMB_STS, SIS630_SMB_IOREGION);
+	return ret;
 }
 
 static void sis630_remove(struct pci_dev *dev)
drivers/input/joystick/xpad.c +32 -7
index 198a44c87e84..b91467c8e6c4 100644
@@ -140,6 +140,7 @@ static const struct xpad_device {
 	{ 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX },
 	{ 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX },
 	{ 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
+	{ 0x044f, 0xd01e, "ThrustMaster, Inc. ESWAP X 2 ELDEN RING EDITION", 0, XTYPE_XBOXONE },
 	{ 0x044f, 0x0f10, "Thrustmaster Modena GT Wheel", 0, XTYPE_XBOX },
 	{ 0x044f, 0xb326, "Thrustmaster Gamepad GP XID", 0, XTYPE_XBOX360 },
 	{ 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", 0, XTYPE_XBOX },
@@ -177,6 +178,7 @@ static const struct xpad_device {
 	{ 0x06a3, 0x0200, "Saitek Racing Wheel", 0, XTYPE_XBOX },
 	{ 0x06a3, 0x0201, "Saitek Adrenalin", 0, XTYPE_XBOX },
 	{ 0x06a3, 0xf51a, "Saitek P3600", 0, XTYPE_XBOX360 },
+	{ 0x0738, 0x4503, "Mad Catz Racing Wheel", 0, XTYPE_XBOXONE },
 	{ 0x0738, 0x4506, "Mad Catz 4506 Wireless Controller", 0, XTYPE_XBOX },
 	{ 0x0738, 0x4516, "Mad Catz Control Pad", 0, XTYPE_XBOX },
 	{ 0x0738, 0x4520, "Mad Catz Control Pad Pro", 0, XTYPE_XBOX },
@@ -238,6 +240,7 @@ static const struct xpad_device {
 	{ 0x0e6f, 0x0146, "Rock Candy Wired Controller for Xbox One", 0, XTYPE_XBOXONE },
 	{ 0x0e6f, 0x0147, "PDP Marvel Xbox One Controller", 0, XTYPE_XBOXONE },
 	{ 0x0e6f, 0x015c, "PDP Xbox One Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
+	{ 0x0e6f, 0x015d, "PDP Mirror's Edge Official Wired Controller for Xbox One", XTYPE_XBOXONE },
 	{ 0x0e6f, 0x0161, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
 	{ 0x0e6f, 0x0162, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
 	{ 0x0e6f, 0x0163, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
@@ -276,12 +279,15 @@ static const struct xpad_device {
 	{ 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
 	{ 0x0f0d, 0x00c5, "Hori Fighting Commander ONE", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
 	{ 0x0f0d, 0x00dc, "HORIPAD FPS for Nintendo Switch", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
+	{ 0x0f0d, 0x0151, "Hori Racing Wheel Overdrive for Xbox Series X", 0, XTYPE_XBOXONE },
+	{ 0x0f0d, 0x0152, "Hori Racing Wheel Overdrive for Xbox Series X", 0, XTYPE_XBOXONE },
 	{ 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX },
 	{ 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX },
 	{ 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX },
 	{ 0x102c, 0xff0c, "Joytech Wireless Advanced Controller", 0, XTYPE_XBOX },
 	{ 0x1038, 0x1430, "SteelSeries Stratus Duo", 0, XTYPE_XBOX360 },
 	{ 0x1038, 0x1431, "SteelSeries Stratus Duo", 0, XTYPE_XBOX360 },
+	{ 0x10f5, 0x7005, "Turtle Beach Recon Controller", 0, XTYPE_XBOXONE },
 	{ 0x11c9, 0x55f0, "Nacon GC-100XF", 0, XTYPE_XBOX360 },
 	{ 0x11ff, 0x0511, "PXN V900", 0, XTYPE_XBOX360 },
 	{ 0x1209, 0x2882, "Ardwiino Controller", 0, XTYPE_XBOX360 },
@@ -306,7 +312,7 @@ static const struct xpad_device {
 	{ 0x1689, 0xfe00, "Razer Sabertooth", 0, XTYPE_XBOX360 },
 	{ 0x17ef, 0x6182, "Lenovo Legion Controller for Windows", 0, XTYPE_XBOX360 },
 	{ 0x1949, 0x041a, "Amazon Game Controller", 0, XTYPE_XBOX360 },
-	{ 0x1a86, 0xe310, "QH Electronics Controller", 0, XTYPE_XBOX360 },
+	{ 0x1a86, 0xe310, "Legion Go S", 0, XTYPE_XBOX360 },
 	{ 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 },
 	{ 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
 	{ 0x1bad, 0x0130, "Ion Drum Rocker", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
@@ -343,6 +349,7 @@ static const struct xpad_device {
 	{ 0x1bad, 0xfa01, "MadCatz GamePad", 0, XTYPE_XBOX360 },
 	{ 0x1bad, 0xfd00, "Razer Onza TE", 0, XTYPE_XBOX360 },
 	{ 0x1bad, 0xfd01, "Razer Onza", 0, XTYPE_XBOX360 },
+	{ 0x1ee9, 0x1590, "ZOTAC Gaming Zone", 0, XTYPE_XBOX360 },
 	{ 0x20d6, 0x2001, "BDA Xbox Series X Wired Controller", 0, XTYPE_XBOXONE },
 	{ 0x20d6, 0x2009, "PowerA Enhanced Wired Controller for Xbox Series X|S", 0, XTYPE_XBOXONE },
 	{ 0x20d6, 0x281f, "PowerA Wired Controller For Xbox 360", 0, XTYPE_XBOX360 },
@@ -365,6 +372,7 @@ static const struct xpad_device {
 	{ 0x24c6, 0x5510, "Hori Fighting Commander ONE (Xbox 360/PC Mode)", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
 	{ 0x24c6, 0x551a, "PowerA FUSION Pro Controller", 0, XTYPE_XBOXONE },
 	{ 0x24c6, 0x561a, "PowerA FUSION Controller", 0, XTYPE_XBOXONE },
+	{ 0x24c6, 0x581a, "ThrustMaster XB1 Classic Controller", 0, XTYPE_XBOXONE },
 	{ 0x24c6, 0x5b00, "ThrustMaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 },
 	{ 0x24c6, 0x5b02, "Thrustmaster, Inc. GPX Controller", 0, XTYPE_XBOX360 },
 	{ 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 },
@@ -373,10 +381,15 @@ static const struct xpad_device {
 	{ 0x2563, 0x058d, "OneXPlayer Gamepad", 0, XTYPE_XBOX360 },
 	{ 0x294b, 0x3303, "Snakebyte GAMEPAD BASE X", 0, XTYPE_XBOXONE },
 	{ 0x294b, 0x3404, "Snakebyte GAMEPAD RGB X", 0, XTYPE_XBOXONE },
+	{ 0x2993, 0x2001, "TECNO Pocket Go", 0, XTYPE_XBOX360 },
 	{ 0x2dc8, 0x2000, "8BitDo Pro 2 Wired Controller fox Xbox", 0, XTYPE_XBOXONE },
 	{ 0x2dc8, 0x3106, "8BitDo Ultimate Wireless / Pro 2 Wired Controller", 0, XTYPE_XBOX360 },
+	{ 0x2dc8, 0x3109, "8BitDo Ultimate Wireless Bluetooth", 0, XTYPE_XBOX360 },
 	{ 0x2dc8, 0x310a, "8BitDo Ultimate 2C Wireless Controller", 0, XTYPE_XBOX360 },
+	{ 0x2dc8, 0x6001, "8BitDo SN30 Pro", 0, XTYPE_XBOX360 },
 	{ 0x2e24, 0x0652, "Hyperkin Duke X-Box One pad", 0, XTYPE_XBOXONE },
+	{ 0x2e24, 0x1688, "Hyperkin X91 X-Box One pad", 0, XTYPE_XBOXONE },
+	{ 0x2e95, 0x0504, "SCUF Gaming Controller", MAP_SELECT_BUTTON, XTYPE_XBOXONE },
 	{ 0x31e3, 0x1100, "Wooting One", 0, XTYPE_XBOX360 },
 	{ 0x31e3, 0x1200, "Wooting Two", 0, XTYPE_XBOX360 },
 	{ 0x31e3, 0x1210, "Wooting Lekker", 0, XTYPE_XBOX360 },
@@ -384,11 +397,16 @@ static const struct xpad_device {
 	{ 0x31e3, 0x1230, "Wooting Two HE (ARM)", 0, XTYPE_XBOX360 },
 	{ 0x31e3, 0x1300, "Wooting 60HE (AVR)", 0, XTYPE_XBOX360 },
 	{ 0x31e3, 0x1310, "Wooting 60HE (ARM)", 0, XTYPE_XBOX360 },
+	{ 0x3285, 0x0603, "Nacon Pro Compact controller for Xbox", 0, XTYPE_XBOXONE },
 	{ 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 },
+	{ 0x3285, 0x0614, "Nacon Pro Compact", 0, XTYPE_XBOXONE },
 	{ 0x3285, 0x0646, "Nacon Pro Compact", 0, XTYPE_XBOXONE },
+	{ 0x3285, 0x0662, "Nacon Revolution5 Pro", 0, XTYPE_XBOX360 },
 	{ 0x3285, 0x0663, "Nacon Evol-X", 0, XTYPE_XBOXONE },
 	{ 0x3537, 0x1004, "GameSir T4 Kaleid", 0, XTYPE_XBOX360 },
+	{ 0x3537, 0x1010, "GameSir G7 SE", 0, XTYPE_XBOXONE },
 	{ 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX },
+	{ 0x413d, 0x2104, "Black Shark Green Ghost Gamepad", 0, XTYPE_XBOX360 },
 	{ 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
 	{ 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN }
 };
@@ -487,6 +505,7 @@ static const struct usb_device_id xpad_table[] = {
 	XPAD_XBOX360_VENDOR(0x03f0),		/* HP HyperX Xbox 360 controllers */
 	XPAD_XBOXONE_VENDOR(0x03f0),		/* HP HyperX Xbox One controllers */
 	XPAD_XBOX360_VENDOR(0x044f),		/* Thrustmaster Xbox 360 controllers */
+	XPAD_XBOXONE_VENDOR(0x044f),		/* Thrustmaster Xbox One controllers */
 	XPAD_XBOX360_VENDOR(0x045e),		/* Microsoft Xbox 360 controllers */
 	XPAD_XBOXONE_VENDOR(0x045e),		/* Microsoft Xbox One controllers */
 	XPAD_XBOX360_VENDOR(0x046d),		/* Logitech Xbox 360-style controllers */
@@ -518,25 +537,29 @@ static const struct usb_device_id xpad_table[] = {
 	XPAD_XBOX360_VENDOR(0x1689),		/* Razer Onza */
 	XPAD_XBOX360_VENDOR(0x17ef),		/* Lenovo */
 	XPAD_XBOX360_VENDOR(0x1949),		/* Amazon controllers */
-	XPAD_XBOX360_VENDOR(0x1a86),		/* QH Electronics */
+	XPAD_XBOX360_VENDOR(0x1a86),		/* Nanjing Qinheng Microelectronics (WCH) */
 	XPAD_XBOX360_VENDOR(0x1bad),		/* Harmonix Rock Band guitar and drums */
+	XPAD_XBOX360_VENDOR(0x1ee9),		/* ZOTAC Technology Limited */
 	XPAD_XBOX360_VENDOR(0x20d6),		/* PowerA controllers */
 	XPAD_XBOXONE_VENDOR(0x20d6),		/* PowerA controllers */
 	XPAD_XBOX360_VENDOR(0x24c6),		/* PowerA controllers */
 	XPAD_XBOXONE_VENDOR(0x24c6),		/* PowerA controllers */
 	XPAD_XBOX360_VENDOR(0x2563),		/* OneXPlayer Gamepad */
 	XPAD_XBOX360_VENDOR(0x260d),		/* Dareu H101 */
-       XPAD_XBOXONE_VENDOR(0x294b),            /* Snakebyte */
+	XPAD_XBOXONE_VENDOR(0x294b),		/* Snakebyte */
+	XPAD_XBOX360_VENDOR(0x2993),		/* TECNO Mobile */
 	XPAD_XBOX360_VENDOR(0x2c22),		/* Qanba Controllers */
-	XPAD_XBOX360_VENDOR(0x2dc8),            /* 8BitDo Pro 2 Wired Controller */
-	XPAD_XBOXONE_VENDOR(0x2dc8),		/* 8BitDo Pro 2 Wired Controller for Xbox */
-	XPAD_XBOXONE_VENDOR(0x2e24),		/* Hyperkin Duke Xbox One pad */
-	XPAD_XBOX360_VENDOR(0x2f24),		/* GameSir controllers */
+	XPAD_XBOX360_VENDOR(0x2dc8),		/* 8BitDo Controllers */
+	XPAD_XBOXONE_VENDOR(0x2dc8),		/* 8BitDo Controllers */
+	XPAD_XBOXONE_VENDOR(0x2e24),		/* Hyperkin Controllers */
+	XPAD_XBOX360_VENDOR(0x2f24),		/* GameSir Controllers */
+	XPAD_XBOXONE_VENDOR(0x2e95),		/* SCUF Gaming Controller */
 	XPAD_XBOX360_VENDOR(0x31e3),		/* Wooting Keyboards */
 	XPAD_XBOX360_VENDOR(0x3285),		/* Nacon GC-100 */
 	XPAD_XBOXONE_VENDOR(0x3285),		/* Nacon Evol-X */
 	XPAD_XBOX360_VENDOR(0x3537),		/* GameSir Controllers */
 	XPAD_XBOXONE_VENDOR(0x3537),		/* GameSir Controllers */
+	XPAD_XBOX360_VENDOR(0x413d),		/* Black Shark Green Ghost Controller */
 	{ }
 };
 
@@ -689,7 +712,9 @@ static const struct xboxone_init_packet xboxone_init_packets[] = {
 	XBOXONE_INIT_PKT(0x045e, 0x0b00, xboxone_s_init),
 	XBOXONE_INIT_PKT(0x045e, 0x0b00, extra_input_packet_init),
 	XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_led_on),
+	XBOXONE_INIT_PKT(0x20d6, 0xa01a, xboxone_pdp_led_on),
 	XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_auth),
+	XBOXONE_INIT_PKT(0x20d6, 0xa01a, xboxone_pdp_auth),
 	XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init),
 	XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init),
 	XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init),
drivers/input/misc/iqs7222.c +22 -28

195 lines not on this page · raw message

drivers/input/serio/i8042-acpipnpio.h +55 -56

240 lines not on this page · raw message

drivers/input/touchscreen/ads7846.c +1 -1
index 8b8c43b3c27f..32a2691185df 100644
@@ -995,7 +995,7 @@ static int ads7846_setup_pendown(struct spi_device *spi,
 	if (pdata->get_pendown_state) {
 		ts->get_pendown_state = pdata->get_pendown_state;
 	} else {
-		ts->gpio_pendown = gpiod_get(&spi->dev, "pendown", GPIOD_IN);
+		ts->gpio_pendown = devm_gpiod_get(&spi->dev, "pendown", GPIOD_IN);
 		if (IS_ERR(ts->gpio_pendown)) {
 			dev_err(&spi->dev, "failed to request pendown GPIO\n");
 			return PTR_ERR(ts->gpio_pendown);
drivers/md/dm-flakey.c +1 -1
index 120153e44ae0..dc491dc771d7 100644
@@ -426,7 +426,7 @@ static struct bio *clone_bio(struct dm_target *ti, struct flakey_c *fc, struct b
 	if (!clone)
 		return NULL;
 
-	bio_init(clone, fc->dev->bdev, bio->bi_inline_vecs, nr_iovecs, bio->bi_opf);
+	bio_init(clone, fc->dev->bdev, clone->bi_inline_vecs, nr_iovecs, bio->bi_opf);
 
 	clone->bi_iter.bi_sector = flakey_map_sector(ti, bio->bi_iter.bi_sector);
 	clone->bi_private = bio;
drivers/net/bonding/bond_options.c +47 -8

87 lines not on this page · raw message

drivers/net/dsa/mv88e6xxx/chip.c +48 -11

94 lines not on this page · raw message

drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 -1
index c440f4d8d43a..915ef1062d71 100644
@@ -1958,7 +1958,8 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
 			if (!skb)
 				goto oom_next_rx;
 		} else {
-			skb = bnxt_xdp_build_skb(bp, skb, agg_bufs, rxr->page_pool, &xdp, rxcmp1);
+			skb = bnxt_xdp_build_skb(bp, skb, agg_bufs,
+						 rxr->page_pool, &xdp);
 			if (!skb) {
 				/* we should be able to free the old skb here */
 				bnxt_xdp_buff_frags_free(rxr, &xdp);
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c +2 -9
index 2845796f782c..758f51366ef0 100644
@@ -462,20 +462,13 @@ int bnxt_xdp(struct net_device *dev, struct netdev_bpf *xdp)
 
 struct sk_buff *
 bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb, u8 num_frags,
-		   struct page_pool *pool, struct xdp_buff *xdp,
-		   struct rx_cmp_ext *rxcmp1)
+		   struct page_pool *pool, struct xdp_buff *xdp)
 {
 	struct skb_shared_info *sinfo = xdp_get_shared_info_from_buff(xdp);
 
 	if (!skb)
 		return NULL;
-	skb_checksum_none_assert(skb);
-	if (RX_CMP_L4_CS_OK(rxcmp1)) {
-		if (bp->dev->features & NETIF_F_RXCSUM) {
-			skb->ip_summed = CHECKSUM_UNNECESSARY;
-			skb->csum_level = RX_CMP_ENCAP(rxcmp1);
-		}
-	}
+
 	xdp_update_skb_shared_info(skb, num_frags,
 				   sinfo->xdp_frags_size,
 				   BNXT_RX_PAGE_SIZE * sinfo->nr_frags,
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h +1 -2
index 5e412c5655ba..9f5829a0adeb 100644
@@ -33,6 +33,5 @@ void bnxt_xdp_buff_frags_free(struct bnxt_rx_ring_info *rxr,
 			      struct xdp_buff *xdp);
 struct sk_buff *bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb,
 				   u8 num_frags, struct page_pool *pool,
-				   struct xdp_buff *xdp,
-				   struct rx_cmp_ext *rxcmp1);
+				   struct xdp_buff *xdp);
 #endif
drivers/net/ethernet/intel/ice/ice_arfs.c +1 -1
index cca0e753f38f..d7e0116f6773 100644
@@ -510,7 +510,7 @@ void ice_init_arfs(struct ice_vsi *vsi)
 	struct hlist_head *arfs_fltr_list;
 	unsigned int i;
 
-	if (!vsi || vsi->type != ICE_VSI_PF)
+	if (!vsi || vsi->type != ICE_VSI_PF || ice_is_arfs_active(vsi))
 		return;
 
 	arfs_fltr_list = kcalloc(ICE_MAX_ARFS_LIST, sizeof(*arfs_fltr_list),
drivers/net/ethernet/mellanox/mlx5/core/devlink.c +3 -0
index 1bccb5633ab4..f66788a2ed77 100644
@@ -46,6 +46,9 @@ mlx5_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
 	u32 running_fw, stored_fw;
 	int err;
 
+	if (!mlx5_core_is_pf(dev))
+		return 0;
+
 	err = devlink_info_version_fixed_put(req, "fw.psid", dev->board_id);
 	if (err)
 		return err;
drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c +5 -7
index 5d128c5b4529..0f5d7ea8956f 100644
@@ -48,15 +48,10 @@ mlx5_esw_bridge_lag_rep_get(struct net_device *dev, struct mlx5_eswitch *esw)
 	struct list_head *iter;
 
 	netdev_for_each_lower_dev(dev, lower, iter) {
-		struct mlx5_core_dev *mdev;
-		struct mlx5e_priv *priv;
-
 		if (!mlx5e_eswitch_rep(lower))
 			continue;
 
-		priv = netdev_priv(lower);
-		mdev = priv->mdev;
-		if (mlx5_lag_is_shared_fdb(mdev) && mlx5_esw_bridge_dev_same_esw(lower, esw))
+		if (mlx5_esw_bridge_dev_same_esw(lower, esw))
 			return lower;
 	}
 
@@ -125,7 +120,7 @@ static bool mlx5_esw_bridge_is_local(struct net_device *dev, struct net_device *
 	priv = netdev_priv(rep);
 	mdev = priv->mdev;
 	if (netif_is_lag_master(dev))
-		return mlx5_lag_is_shared_fdb(mdev) && mlx5_lag_is_master(mdev);
+		return mlx5_lag_is_master(mdev);
 	return true;
 }
 
@@ -455,6 +450,9 @@ static int mlx5_esw_bridge_switchdev_event(struct notifier_block *nb,
 	if (!rep)
 		return NOTIFY_DONE;
 
+	if (netif_is_lag_master(dev) && !mlx5_lag_is_shared_fdb(esw->dev))
+		return NOTIFY_DONE;
+
 	switch (event) {
 	case SWITCHDEV_FDB_ADD_TO_BRIDGE:
 		fdb_info = container_of(info,
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +2 -4
index b34f57ab9755..8a892614015c 100644
@@ -4891,11 +4891,9 @@ static int mlx5e_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
 	struct mlx5e_priv *priv = netdev_priv(dev);
 	struct mlx5_core_dev *mdev = priv->mdev;
 	u8 mode, setting;
-	int err;
 
-	err = mlx5_eswitch_get_vepa(mdev->priv.eswitch, &setting);
-	if (err)
-		return err;
+	if (mlx5_eswitch_get_vepa(mdev->priv.eswitch, &setting))
+		return -EOPNOTSUPP;
 	mode = setting ? BRIDGE_MODE_VEPA : BRIDGE_MODE_VEB;
 	return ndo_dflt_bridge_getlink(skb, pid, seq, dev,
 				       mode,
drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c +2 -2
index 18cf756bad8c..f6b1ac80c0af 100644
@@ -823,7 +823,7 @@ void mlx5_disable_lag(struct mlx5_lag *ldev)
 				mlx5_eswitch_reload_ib_reps(ldev->pf[i].dev->priv.eswitch);
 }
 
-static bool mlx5_shared_fdb_supported(struct mlx5_lag *ldev)
+bool mlx5_lag_shared_fdb_supported(struct mlx5_lag *ldev)
 {
 	struct mlx5_core_dev *dev;
 	int i;
@@ -900,7 +900,7 @@ static void mlx5_do_bond(struct mlx5_lag *ldev)
 	}
 
 	if (do_bond && !__mlx5_lag_is_active(ldev)) {
-		bool shared_fdb = mlx5_shared_fdb_supported(ldev);
+		bool shared_fdb = mlx5_lag_shared_fdb_supported(ldev);
 
 		roce_lag = mlx5_lag_is_roce_lag(ldev);
 
drivers/net/ethernet/mellanox/mlx5/core/lag/lag.h +1 -0
index 481e92f39fe6..b7ccf0e955f5 100644
@@ -92,6 +92,7 @@ mlx5_lag_is_ready(struct mlx5_lag *ldev)
 	return test_bit(MLX5_LAG_FLAG_NDEVS_READY, &ldev->state_flags);
 }
 
+bool mlx5_lag_shared_fdb_supported(struct mlx5_lag *ldev);
 bool mlx5_lag_check_prereq(struct mlx5_lag *ldev);
 void mlx5_modify_lag(struct mlx5_lag *ldev,
 		     struct lag_tracker *tracker);
drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c +2 -1
index 6b0413a3987c..8a07fdf29505 100644
@@ -81,7 +81,8 @@ static int enable_mpesw(struct mlx5_lag *ldev)
 	if (mlx5_eswitch_mode(dev0) != MLX5_ESWITCH_OFFLOADS ||
 	    !MLX5_CAP_PORT_SELECTION(dev0, port_select_flow_table) ||
 	    !MLX5_CAP_GEN(dev0, create_lag_when_not_master_up) ||
-	    !mlx5_lag_check_prereq(ldev))
+	    !mlx5_lag_check_prereq(ldev) ||
+	    !mlx5_lag_shared_fdb_supported(ldev))
 		return -EOPNOTSUPP;
 
 	err = mlx5_mpesw_metadata_set(ldev);
drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c +5 -0
index a80ecb672f33..711d14dea248 100644
@@ -196,6 +196,11 @@ mlx5_chains_create_table(struct mlx5_fs_chains *chains,
 		ns = mlx5_get_flow_namespace(chains->dev, chains->ns);
 	}
 
+	if (!ns) {
+		mlx5_core_warn(chains->dev, "Failed to get flow namespace\n");
+		return ERR_PTR(-EOPNOTSUPP);
+	}
+
 	ft_attr.autogroup.num_reserved_entries = 2;
 	ft_attr.autogroup.max_num_groups = chains->group_num;
 	ft = mlx5_create_auto_grouped_flow_table(ns, &ft_attr);
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +6 -2
index f9dd50152b1e..28d24d59efb8 100644
@@ -454,8 +454,10 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct qlcnic_adapter *adapter,
 
 	num_vlans = sriov->num_allowed_vlans;
 	sriov->allowed_vlans = kcalloc(num_vlans, sizeof(u16), GFP_KERNEL);
-	if (!sriov->allowed_vlans)
+	if (!sriov->allowed_vlans) {
+		qlcnic_sriov_free_vlans(adapter);
 		return -ENOMEM;
+	}
 
 	vlans = (u16 *)&cmd->rsp.arg[3];
 	for (i = 0; i < num_vlans; i++)
@@ -2167,8 +2169,10 @@ int qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter)
 		vf = &sriov->vf_info[i];
 		vf->sriov_vlans = kcalloc(sriov->num_allowed_vlans,
 					  sizeof(*vf->sriov_vlans), GFP_KERNEL);
-		if (!vf->sriov_vlans)
+		if (!vf->sriov_vlans) {
+			qlcnic_sriov_free_vlans(adapter);
 			return -ENOMEM;
+		}
 	}
 
 	return 0;
drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c +5 -2
index ee3604f58def..bdeec098309a 100644
@@ -9,7 +9,10 @@
 #include <linux/of_irq.h>
 #include "stmmac.h"
 
+#define DRIVER_NAME "dwmac-loongson-pci"
+
 static int loongson_default_data(struct plat_stmmacenet_data *plat)
+
 {
 	plat->clk_csr = 2;	/* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */
 	plat->has_gmac = 1;
@@ -95,7 +98,7 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id
 	for (i = 0; i < PCI_STD_NUM_BARS; i++) {
 		if (pci_resource_len(pdev, i) == 0)
 			continue;
-		ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
+		ret = pcim_iomap_regions(pdev, BIT(0), DRIVER_NAME);
 		if (ret)
 			goto err_disable_device;
 		break;
@@ -222,7 +225,7 @@ static const struct pci_device_id loongson_dwmac_id_table[] = {
 MODULE_DEVICE_TABLE(pci, loongson_dwmac_id_table);
 
 static struct pci_driver loongson_dwmac_driver = {
-	.name = "dwmac-loongson-pci",
+	.name = DRIVER_NAME,
 	.id_table = loongson_dwmac_id_table,
 	.probe = loongson_dwmac_probe,
 	.remove = loongson_dwmac_remove,
drivers/net/mctp/mctp-i2c.c +5 -0
index 20b8d7d528ba..fbe8483a07b5 100644
@@ -543,6 +543,7 @@ static int mctp_i2c_header_create(struct sk_buff *skb, struct net_device *dev,
 	struct mctp_i2c_hdr *hdr;
 	struct mctp_hdr *mhdr;
 	u8 lldst, llsrc;
+	int rc;
 
 	if (len > MCTP_I2C_MAXMTU)
 		return -EMSGSIZE;
@@ -553,6 +554,10 @@ static int mctp_i2c_header_create(struct sk_buff *skb, struct net_device *dev,
 	lldst = *((u8 *)daddr);
 	llsrc = *((u8 *)saddr);
 
+	rc = skb_cow_head(skb, sizeof(struct mctp_i2c_hdr));
+	if (rc)
+		return rc;
+
 	skb_push(skb, sizeof(struct mctp_i2c_hdr));
 	skb_reset_mac_header(skb);
 	hdr = (void *)skb_mac_header(skb);
drivers/net/wwan/mhi_wwan_mbim.c +1 -1
index 3f72ae943b29..b1b2870a054b 100644
@@ -209,7 +209,7 @@ static int mbim_rx_verify_nth16(struct mhi_mbim_context *mbim, struct sk_buff *s
 	if (mbim->rx_seq + 1 != le16_to_cpu(nth16->wSequence) &&
 	    (mbim->rx_seq || le16_to_cpu(nth16->wSequence)) &&
 	    !(mbim->rx_seq == 0xffff && !le16_to_cpu(nth16->wSequence))) {
-		net_err_ratelimited("sequence number glitch prev=%d curr=%d\n",
+		net_dbg_ratelimited("sequence number glitch prev=%d curr=%d\n",
 				    mbim->rx_seq, le16_to_cpu(nth16->wSequence));
 	}
 	mbim->rx_seq = le16_to_cpu(nth16->wSequence);
drivers/nvme/host/apple.c +2 -0
index 396eb9437659..9b1019ee7478 100644
@@ -1517,6 +1517,7 @@ static struct apple_nvme *apple_nvme_alloc(struct platform_device *pdev)
 
 	return anv;
 put_dev:
+	apple_nvme_detach_genpd(anv);
 	put_device(anv->dev);
 	return ERR_PTR(ret);
 }
@@ -1545,6 +1546,7 @@ static int apple_nvme_probe(struct platform_device *pdev)
 out_uninit_ctrl:
 	nvme_uninit_ctrl(&anv->ctrl);
 	nvme_put_ctrl(&anv->ctrl);
+	apple_nvme_detach_genpd(anv);
 	return ret;
 }
 
drivers/nvme/host/core.c +0 -2
index 8a200931bc29..f00665ad0c11 100644
@@ -503,8 +503,6 @@ bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl,
 	switch (new_state) {
 	case NVME_CTRL_LIVE:
 		switch (old_state) {
-		case NVME_CTRL_NEW:
-		case NVME_CTRL_RESETTING:
 		case NVME_CTRL_CONNECTING:
 			changed = true;
 			fallthrough;
drivers/nvme/host/fc.c +8 -51

91 lines not on this page · raw message

drivers/nvme/host/pci.c +2 -0
index b1310e69d07d..a36ec6df6624 100644
@@ -3509,6 +3509,8 @@ static const struct pci_device_id nvme_id_table[] = {
 		.driver_data = NVME_QUIRK_BOGUS_NID, },
 	{ PCI_DEVICE(0x1cc1, 0x5350),   /* ADATA XPG GAMMIX S50 */
 		.driver_data = NVME_QUIRK_BOGUS_NID, },
+	{ PCI_DEVICE(0x1dbe, 0x5216),   /* Acer/INNOGRIT FA100/5216 NVMe SSD */
+		.driver_data = NVME_QUIRK_BOGUS_NID, },
 	{ PCI_DEVICE(0x1dbe, 0x5236),   /* ADATA XPG GAMMIX S70 */
 		.driver_data = NVME_QUIRK_BOGUS_NID, },
 	{ PCI_DEVICE(0x1e49, 0x0021),   /* ZHITAI TiPro5000 NVMe SSD */
drivers/nvme/host/tcp.c +43 -0

55 lines not on this page · raw message

drivers/nvme/target/rdma.c +23 -10
index a6d55ebb8238..298c46834a53 100644
@@ -997,6 +997,27 @@ static void nvmet_rdma_handle_command(struct nvmet_rdma_queue *queue,
 	nvmet_req_complete(&cmd->req, status);
 }
 
+static bool nvmet_rdma_recv_not_live(struct nvmet_rdma_queue *queue,
+		struct nvmet_rdma_rsp *rsp)
+{
+	unsigned long flags;
+	bool ret = true;
+
+	spin_lock_irqsave(&queue->state_lock, flags);
+	/*
+	 * recheck queue state is not live to prevent a race condition
+	 * with RDMA_CM_EVENT_ESTABLISHED handler.
+	 */
+	if (queue->state == NVMET_RDMA_Q_LIVE)
+		ret = false;
+	else if (queue->state == NVMET_RDMA_Q_CONNECTING)
+		list_add_tail(&rsp->wait_list, &queue->rsp_wait_list);
+	else
+		nvmet_rdma_put_rsp(rsp);
+	spin_unlock_irqrestore(&queue->state_lock, flags);
+	return ret;
+}
+
 static void nvmet_rdma_recv_done(struct ib_cq *cq, struct ib_wc *wc)
 {
 	struct nvmet_rdma_cmd *cmd =
@@ -1038,17 +1059,9 @@ static void nvmet_rdma_recv_done(struct ib_cq *cq, struct ib_wc *wc)
 	rsp->req.port = queue->port;
 	rsp->n_rdma = 0;
 
-	if (unlikely(queue->state != NVMET_RDMA_Q_LIVE)) {
-		unsigned long flags;
-
-		spin_lock_irqsave(&queue->state_lock, flags);
-		if (queue->state == NVMET_RDMA_Q_CONNECTING)
-			list_add_tail(&rsp->wait_list, &queue->rsp_wait_list);
-		else
-			nvmet_rdma_put_rsp(rsp);
-		spin_unlock_irqrestore(&queue->state_lock, flags);
+	if (unlikely(queue->state != NVMET_RDMA_Q_LIVE) &&
+	    nvmet_rdma_recv_not_live(queue, rsp))
 		return;
-	}
 
 	nvmet_rdma_handle_command(queue, rsp);
 }
drivers/pinctrl/bcm/pinctrl-bcm281xx.c +1 -1
index 73dbf29c002f..cf6efa9c0364 100644
@@ -974,7 +974,7 @@ static const struct regmap_config bcm281xx_pinctrl_regmap_config = {
 	.reg_bits = 32,
 	.reg_stride = 4,
 	.val_bits = 32,
-	.max_register = BCM281XX_PIN_VC_CAM3_SDA,
+	.max_register = BCM281XX_PIN_VC_CAM3_SDA * 4,
 };
 
 static int bcm281xx_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
drivers/platform/x86/intel/pmc/core.c +2 -2
index 022afb97d531..2fb73e924bd6 100644
@@ -620,8 +620,8 @@ static u32 convert_ltr_scale(u32 val)
 static int pmc_core_ltr_show(struct seq_file *s, void *unused)
 {
 	struct pmc_dev *pmcdev = s->private;
-	u64 decoded_snoop_ltr, decoded_non_snoop_ltr;
-	u32 ltr_raw_data, scale, val;
+	u64 decoded_snoop_ltr, decoded_non_snoop_ltr, val;
+	u32 ltr_raw_data, scale;
 	u16 snoop_ltr, nonsnoop_ltr;
 	int i, index, ltr_index = 0;
 
drivers/platform/x86/thinkpad_acpi.c +36 -14

144 lines not on this page · raw message

drivers/powercap/powercap_sys.c +1 -2
index 52c32dcbf7d8..4112a0097338 100644
@@ -627,8 +627,7 @@ struct powercap_control_type *powercap_register_control_type(
 	dev_set_name(&control_type->dev, "%s", name);
 	result = device_register(&control_type->dev);
 	if (result) {
-		if (control_type->allocated)
-			kfree(control_type);
+		put_device(&control_type->dev);
 		return ERR_PTR(result);
 	}
 	idr_init(&control_type->idr);
drivers/s390/cio/chp.c +2 -1
index 5440f285f349..7e00c061538d 100644
@@ -661,7 +661,8 @@ static int info_update(void)
 	if (time_after(jiffies, chp_info_expires)) {
 		/* Data is too old, update. */
 		rc = sclp_chp_read_info(&chp_info);
-		chp_info_expires = jiffies + CHP_INFO_UPDATE_INTERVAL ;
+		if (!rc)
+			chp_info_expires = jiffies + CHP_INFO_UPDATE_INTERVAL;
 	}
 	mutex_unlock(&info_lock);
 
drivers/scsi/qla1280.c +1 -1
index 6e5e89aaa283..74b23c43af3e 100644
@@ -2866,7 +2866,7 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
 			dprintk(3, "S/G Segment phys_addr=%x %x, len=0x%x\n",
 				cpu_to_le32(upper_32_bits(dma_handle)),
 				cpu_to_le32(lower_32_bits(dma_handle)),
-				cpu_to_le32(sg_dma_len(sg_next(s))));
+				cpu_to_le32(sg_dma_len(s)));
 			remseg--;
 		}
 		dprintk(5, "qla1280_64bit_start_scsi: Scatter/gather "
drivers/scsi/scsi_scan.c +1 -1
index ca99be7341d9..cead0fbbe5db 100644
@@ -245,7 +245,7 @@ static int scsi_realloc_sdev_budget_map(struct scsi_device *sdev,
 	}
 	ret = sbitmap_init_node(&sdev->budget_map,
 				scsi_device_max_queue_depth(sdev),
-				new_shift, GFP_KERNEL,
+				new_shift, GFP_NOIO,
 				sdev->request_queue->node, false, true);
 	if (!ret)
 		sbitmap_resize(&sdev->budget_map, depth);
drivers/thermal/cpufreq_cooling.c +0 -2
index e2cc7bd30862..874b4838d2c9 100644
@@ -57,8 +57,6 @@ struct time_in_idle {
  * @max_level: maximum cooling level. One less than total number of valid
  *	cpufreq frequencies.
  * @em: Reference on the Energy Model of the device
- * @cdev: thermal_cooling_device pointer to keep track of the
- *	registered cooling device.
  * @policy: cpufreq policy.
  * @cooling_ops: cpufreq callbacks to thermal cooling device ops
  * @idle_time: idle time stats
drivers/ufs/core/ufshcd.c +6 -1
index 6d53dd7d411a..cb5611cbf454 100644
@@ -3027,8 +3027,13 @@ ufshcd_dev_cmd_completion(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
 	case UPIU_TRANSACTION_QUERY_RSP: {
 		u8 response = lrbp->ucd_rsp_ptr->header.response;
 
-		if (response == 0)
+		if (response == 0) {
 			err = ufshcd_copy_query_response(hba, lrbp);
+		} else {
+			err = -EINVAL;
+			dev_err(hba->dev, "%s: unexpected response in Query RSP: %x\n",
+					__func__, response);
+		}
 		break;
 	}
 	case UPIU_TRANSACTION_REJECT_UPIU:
drivers/usb/phy/phy-generic.c +1 -1
index 770081b828a4..2b4d2cbafe74 100644
@@ -217,7 +217,7 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop)
 		if (of_property_read_u32(node, "clock-frequency", &clk_rate))
 			clk_rate = 0;
 
-		needs_clk = of_property_read_bool(node, "clocks");
+		needs_clk = of_property_present(node, "clocks");
 	}
 	nop->gpiod_reset = devm_gpiod_get_optional(dev, "reset",
 						   GPIOD_ASIS);
drivers/usb/serial/ftdi_sio.c +14 -0
index 22d01a0f10fb..b8e2bfd42828 100644
@@ -1079,6 +1079,20 @@ static const struct usb_device_id id_table_combined[] = {
 		.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
 	/* GMC devices */
 	{ USB_DEVICE(GMC_VID, GMC_Z216C_PID) },
+	/* Altera USB Blaster 3 */
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6022_PID, 1) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6025_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6026_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6026_PID, 3) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6029_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602A_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602A_PID, 3) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602C_PID, 1) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602D_PID, 1) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602D_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 1) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 2) },
+	{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 3) },
 	{ }					/* Terminating entry */
 };
 
drivers/usb/serial/ftdi_sio_ids.h +13 -0
index 5ee60ba2a73c..52be47d684ea 100644
@@ -1612,3 +1612,16 @@
  */
 #define GMC_VID				0x1cd7
 #define GMC_Z216C_PID			0x0217 /* GMC Z216C Adapter IR-USB */
+
+/*
+ *  Altera USB Blaster 3 (http://www.altera.com).
+ */
+#define ALTERA_VID			0x09fb
+#define ALTERA_UB3_6022_PID		0x6022
+#define ALTERA_UB3_6025_PID		0x6025
+#define ALTERA_UB3_6026_PID		0x6026
+#define ALTERA_UB3_6029_PID		0x6029
+#define ALTERA_UB3_602A_PID		0x602a
+#define ALTERA_UB3_602C_PID		0x602c
+#define ALTERA_UB3_602D_PID		0x602d
+#define ALTERA_UB3_602E_PID		0x602e
drivers/usb/serial/option.c +32 -16

73 lines not on this page · raw message

drivers/video/fbdev/hyperv_fb.c +1 -1
index b9965cbdd764..80e8ec36b7db 100644
@@ -1106,7 +1106,7 @@ static void hvfb_putmem(struct hv_device *hdev, struct fb_info *info)
 
 	if (par->need_docopy) {
 		vfree(par->dio_vp);
-		iounmap(info->screen_base);
+		iounmap(par->mmio_vp);
 		vmbus_free_mmio(par->mem->start, screen_fb_size);
 	} else {
 		hvfb_release_phymem(hdev, info->fix.smem_start,
drivers/xen/swiotlb-xen.c +1 -1
index b6e54ab3b6f3..0b3bd9a7575e 100644
@@ -112,7 +112,7 @@ static int is_xen_swiotlb_buffer(struct device *dev, dma_addr_t dma_addr)
 }
 
 #ifdef CONFIG_X86
-int xen_swiotlb_fixup(void *buf, unsigned long nslabs)
+int __init xen_swiotlb_fixup(void *buf, unsigned long nslabs)
 {
 	int rc;
 	unsigned int order = get_order(IO_TLB_SEGSIZE << IO_TLB_SHIFT);
fs/fuse/dir.c +1 -1
index 95f9913a3537..89bffaed421f 100644
@@ -1608,7 +1608,7 @@ static const char *fuse_get_link(struct dentry *dentry, struct inode *inode,
 		goto out_err;
 
 	if (fc->cache_symlinks)
-		return page_get_link(dentry, inode, callback);
+		return page_get_link_raw(dentry, inode, callback);
 
 	err = -ECHILD;
 	if (!dentry)
fs/namei.c +19 -5
index beffbb02a24e..155e4d09a5fb 100644
@@ -5154,10 +5154,9 @@ const char *vfs_get_link(struct dentry *dentry, struct delayed_call *done)
 EXPORT_SYMBOL(vfs_get_link);
 
 /* get the link contents into pagecache */
-const char *page_get_link(struct dentry *dentry, struct inode *inode,
-			  struct delayed_call *callback)
+static char *__page_get_link(struct dentry *dentry, struct inode *inode,
+			     struct delayed_call *callback)
 {
-	char *kaddr;
 	struct page *page;
 	struct address_space *mapping = inode->i_mapping;
 
@@ -5176,8 +5175,23 @@ const char *page_get_link(struct dentry *dentry, struct inode *inode,
 	}
 	set_delayed_call(callback, page_put_link, page);
 	BUG_ON(mapping_gfp_mask(mapping) & __GFP_HIGHMEM);
-	kaddr = page_address(page);
-	nd_terminate_link(kaddr, inode->i_size, PAGE_SIZE - 1);
+	return page_address(page);
+}
+
+const char *page_get_link_raw(struct dentry *dentry, struct inode *inode,
+			      struct delayed_call *callback)
+{
+	return __page_get_link(dentry, inode, callback);
+}
+EXPORT_SYMBOL_GPL(page_get_link_raw);
+
+const char *page_get_link(struct dentry *dentry, struct inode *inode,
+					struct delayed_call *callback)
+{
+	char *kaddr = __page_get_link(dentry, inode, callback);
+
+	if (!IS_ERR(kaddr))
+		nd_terminate_link(kaddr, inode->i_size, PAGE_SIZE - 1);
 	return kaddr;
 }
 
fs/proc/base.c +5 -4
index 699f085d4de7..91fe20b7657c 100644
@@ -2633,10 +2633,11 @@ static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
 	}
 
 	task_lock(p);
-	if (slack_ns == 0)
-		p->timer_slack_ns = p->default_timer_slack_ns;
-	else
-		p->timer_slack_ns = slack_ns;
+	if (task_is_realtime(p))
+		slack_ns = 0;
+	else if (slack_ns == 0)
+		slack_ns = p->default_timer_slack_ns;
+	p->timer_slack_ns = slack_ns;
 	task_unlock(p);
 
 out:
fs/select.c +4 -7
index 3f730b8581f6..e66b6189845e 100644
@@ -77,19 +77,16 @@ u64 select_estimate_accuracy(struct timespec64 *tv)
 {
 	u64 ret;
 	struct timespec64 now;
+	u64 slack = current->timer_slack_ns;
 
-	/*
-	 * Realtime tasks get a slack of 0 for obvious reasons.
-	 */
-
-	if (rt_task(current))
+	if (slack == 0)
 		return 0;
 
 	ktime_get_ts64(&now);
 	now = timespec64_sub(*tv, now);
 	ret = __estimate_accuracy(&now);
-	if (ret < current->timer_slack_ns)
-		return current->timer_slack_ns;
+	if (ret < slack)
+		return slack;
 	return ret;
 }
 
fs/smb/client/asn1.c +2 -0
index b5724ef9f182..214a44509e7b 100644
@@ -52,6 +52,8 @@ int cifs_neg_token_init_mech_type(void *context, size_t hdrlen,
 		server->sec_kerberos = true;
 	else if (oid == OID_ntlmssp)
 		server->sec_ntlmssp = true;
+	else if (oid == OID_IAKerb)
+		server->sec_iakerb = true;
 	else {
 		char buf[50];
 
fs/smb/client/cifs_spnego.c +3 -1
index af7849e5974f..2ad067886ec3 100644
@@ -130,11 +130,13 @@ cifs_get_spnego_key(struct cifs_ses *sesInfo,
 
 	dp = description + strlen(description);
 
-	/* for now, only sec=krb5 and sec=mskrb5 are valid */
+	/* for now, only sec=krb5 and sec=mskrb5 and iakerb are valid */
 	if (server->sec_kerberos)
 		sprintf(dp, ";sec=krb5");
 	else if (server->sec_mskerberos)
 		sprintf(dp, ";sec=mskrb5");
+	else if (server->sec_iakerb)
+		sprintf(dp, ";sec=iakerb");
 	else {
 		cifs_dbg(VFS, "unknown or missing server auth type, use krb5\n");
 		sprintf(dp, ";sec=krb5");
fs/smb/client/cifsglob.h +4 -0
index 6992e1ec02e4..39117343b703 100644
@@ -151,6 +151,7 @@ enum securityEnum {
 	NTLMv2,			/* Legacy NTLM auth with NTLMv2 hash */
 	RawNTLMSSP,		/* NTLMSSP without SPNEGO, NTLMv2 hash */
 	Kerberos,		/* Kerberos via SPNEGO */
+	IAKerb,			/* Kerberos proxy */
 };
 
 enum cifs_reparse_type {
@@ -749,6 +750,7 @@ struct TCP_Server_Info {
 	bool	sec_kerberosu2u;	/* supports U2U Kerberos */
 	bool	sec_kerberos;		/* supports plain Kerberos */
 	bool	sec_mskerberos;		/* supports legacy MS Kerberos */
+	bool	sec_iakerb;		/* supports pass-through auth for Kerberos (krb5 proxy) */
 	bool	large_buf;		/* is current buffer large? */
 	/* use SMBD connection instead of socket */
 	bool	rdma;
@@ -2156,6 +2158,8 @@ static inline char *get_security_type_str(enum securityEnum sectype)
 		return "Kerberos";
 	case NTLMv2:
 		return "NTLMv2";
+	case IAKerb:
+		return "IAKerb";
 	default:
 		return "Unknown";
 	}
fs/smb/client/connect.c +12 -4
index dbcaaa274abd..198681d14153 100644
@@ -1884,9 +1884,8 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
 /* this function must be called with ses_lock and chan_lock held */
 static int match_session(struct cifs_ses *ses, struct smb3_fs_context *ctx)
 {
-	if (ctx->sectype != Unspecified &&
-	    ctx->sectype != ses->sectype)
-		return 0;
+	struct TCP_Server_Info *server = ses->server;
+	enum securityEnum ctx_sec, ses_sec;
 
 	if (ctx->dfs_root_ses != ses->dfs_root_ses)
 		return 0;
@@ -1898,11 +1897,20 @@ static int match_session(struct cifs_ses *ses, struct smb3_fs_context *ctx)
 	if (ses->chan_max < ctx->max_channels)
 		return 0;
 
-	switch (ses->sectype) {
+	ctx_sec = server->ops->select_sectype(server, ctx->sectype);
+	ses_sec = server->ops->select_sectype(server, ses->sectype);
+
+	if (ctx_sec != ses_sec)
+		return 0;
+
+	switch (ctx_sec) {
+	case IAKerb:
 	case Kerberos:
 		if (!uid_eq(ctx->cred_uid, ses->cred_uid))
 			return 0;
 		break;
+	case NTLMv2:
+	case RawNTLMSSP:
 	default:
 		/* NULL username means anonymous session */
 		if (ses->user_name == NULL) {
fs/smb/client/fs_context.c +11 -7
index 4e77ba191ef8..b90cc918de7a 100644
@@ -162,6 +162,7 @@ const struct fs_parameter_spec smb3_fs_parameters[] = {
 	fsparam_string("username", Opt_user),
 	fsparam_string("pass", Opt_pass),
 	fsparam_string("password", Opt_pass),
+	fsparam_string("pass2", Opt_pass2),
 	fsparam_string("password2", Opt_pass2),
 	fsparam_string("ip", Opt_ip),
 	fsparam_string("addr", Opt_ip),
@@ -1041,6 +1042,9 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
 		} else if (!strcmp("user", param->key) || !strcmp("username", param->key)) {
 			skip_parsing = true;
 			opt = Opt_user;
+		} else if (!strcmp("pass2", param->key) || !strcmp("password2", param->key)) {
+			skip_parsing = true;
+			opt = Opt_pass2;
 		}
 	}
 
@@ -1262,21 +1266,21 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
 		}
 		break;
 	case Opt_acregmax:
-		ctx->acregmax = HZ * result.uint_32;
-		if (ctx->acregmax > CIFS_MAX_ACTIMEO) {
+		if (result.uint_32 > CIFS_MAX_ACTIMEO / HZ) {
 			cifs_errorf(fc, "acregmax too large\n");
 			goto cifs_parse_mount_err;
 		}
+		ctx->acregmax = HZ * result.uint_32;
 		break;
 	case Opt_acdirmax:
-		ctx->acdirmax = HZ * result.uint_32;
-		if (ctx->acdirmax > CIFS_MAX_ACTIMEO) {
+		if (result.uint_32 > CIFS_MAX_ACTIMEO / HZ) {
 			cifs_errorf(fc, "acdirmax too large\n");
 			goto cifs_parse_mount_err;
 		}
+		ctx->acdirmax = HZ * result.uint_32;
 		break;
 	case Opt_actimeo:
-		if (HZ * result.uint_32 > CIFS_MAX_ACTIMEO) {
+		if (result.uint_32 > CIFS_MAX_ACTIMEO / HZ) {
 			cifs_errorf(fc, "timeout too large\n");
 			goto cifs_parse_mount_err;
 		}
@@ -1288,11 +1292,11 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
 		ctx->acdirmax = ctx->acregmax = HZ * result.uint_32;
 		break;
 	case Opt_closetimeo:
-		ctx->closetimeo = HZ * result.uint_32;
-		if (ctx->closetimeo > SMB3_MAX_DCLOSETIMEO) {
+		if (result.uint_32 > SMB3_MAX_DCLOSETIMEO / HZ) {
 			cifs_errorf(fc, "closetimeo too large\n");
 			goto cifs_parse_mount_err;
 		}
+		ctx->closetimeo = HZ * result.uint_32;
 		break;
 	case Opt_echo_interval:
 		ctx->echo_interval = result.uint_32;
fs/smb/client/inode.c +13 -0
index dbb407d5e6da..b9cf05e0940d 100644
@@ -1132,6 +1132,19 @@ static int reparse_info_to_fattr(struct cifs_open_info_data *data,
 			rc = server->ops->parse_reparse_point(cifs_sb,
 							      full_path,
 							      iov, data);
+			/*
+			 * If the reparse point was not handled but it is the
+			 * name surrogate which points to directory, then treat
+			 * is as a new mount point. Name surrogate reparse point
+			 * represents another named entity in the system.
+			 */
+			if (rc == -EOPNOTSUPP &&
+			    IS_REPARSE_TAG_NAME_SURROGATE(data->reparse.tag) &&
+			    (le32_to_cpu(data->fi.Attributes) & ATTR_DIRECTORY)) {
+				rc = 0;
+				cifs_create_junction_fattr(fattr, sb);
+				goto out;
+			}
 		}
 		break;
 	}
fs/smb/client/reparse.c +7 -3
index e56a8df23fec..bb246ef0458f 100644
@@ -651,13 +651,17 @@ int parse_reparse_point(struct reparse_data_buffer *buf,
 	case IO_REPARSE_TAG_LX_FIFO:
 	case IO_REPARSE_TAG_LX_CHR:
 	case IO_REPARSE_TAG_LX_BLK:
-		break;
+		if (le16_to_cpu(buf->ReparseDataLength) != 0) {
+			cifs_dbg(VFS, "srv returned malformed buffer for reparse point: 0x%08x\n",
+				 le32_to_cpu(buf->ReparseTag));
+			return -EIO;
+		}
+		return 0;
 	default:
 		cifs_tcon_dbg(VFS | ONCE, "unhandled reparse tag: 0x%08x\n",
 			      le32_to_cpu(buf->ReparseTag));
-		break;
+		return -EOPNOTSUPP;
 	}
-	return 0;
 }
 
 int smb2_parse_reparse_point(struct cifs_sb_info *cifs_sb,
fs/smb/client/sess.c +2 -1
index 3216f786908f..c2a98b273664 100644
@@ -1295,12 +1295,13 @@ cifs_select_sectype(struct TCP_Server_Info *server, enum securityEnum requested)
 		switch (requested) {
 		case Kerberos:
 		case RawNTLMSSP:
+		case IAKerb:
 			return requested;
 		case Unspecified:
 			if (server->sec_ntlmssp &&
 			    (global_secflags & CIFSSEC_MAY_NTLMSSP))
 				return RawNTLMSSP;
-			if ((server->sec_kerberos || server->sec_mskerberos) &&
+			if ((server->sec_kerberos || server->sec_mskerberos || server->sec_iakerb) &&
 			    (global_secflags & CIFSSEC_MAY_KRB5))
 				return Kerberos;
 			fallthrough;
fs/smb/client/smb2pdu.c +2 -2
index 24b1738a35a1..0af3535e08f3 100644
@@ -1428,7 +1428,7 @@ smb2_select_sectype(struct TCP_Server_Info *server, enum securityEnum requested)
 		if (server->sec_ntlmssp &&
 			(global_secflags & CIFSSEC_MAY_NTLMSSP))
 			return RawNTLMSSP;
-		if ((server->sec_kerberos || server->sec_mskerberos) &&
+		if ((server->sec_kerberos || server->sec_mskerberos || server->sec_iakerb) &&
 			(global_secflags & CIFSSEC_MAY_KRB5))
 			return Kerberos;
 		fallthrough;
@@ -2162,7 +2162,7 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
 
 tcon_error_exit:
 	if (rsp && rsp->hdr.Status == STATUS_BAD_NETWORK_NAME)
-		cifs_tcon_dbg(VFS, "BAD_NETWORK_NAME: %s\n", tree);
+		cifs_dbg(VFS | ONCE, "BAD_NETWORK_NAME: %s\n", tree);
 	goto tcon_exit;
 }
 
fs/smb/common/smbfsctl.h +3 -0
index a94d658b88e8..6eff3a8bde09 100644
@@ -158,6 +158,9 @@
 #define IO_REPARSE_TAG_LX_CHR	     0x80000025
 #define IO_REPARSE_TAG_LX_BLK	     0x80000026
 
+/* If Name Surrogate Bit is set, the file or directory represents another named entity in the system. */
+#define IS_REPARSE_TAG_NAME_SURROGATE(tag) (!!((tag) & 0x20000000))
+
 /* fsctl flags */
 /* If Flags is set to this value, the request is an FSCTL not ioctl request */
 #define SMB2_0_IOCTL_IS_FSCTL		0x00000001
fs/smb/server/connection.c +20 -0
index f3178570329a..e7bcc3830031 100644
@@ -432,6 +432,26 @@ void ksmbd_conn_init_server_callbacks(struct ksmbd_conn_ops *ops)
 	default_conn_ops.terminate_fn = ops->terminate_fn;
 }
 
+void ksmbd_conn_r_count_inc(struct ksmbd_conn *conn)
+{
+	atomic_inc(&conn->r_count);
+}
+
+void ksmbd_conn_r_count_dec(struct ksmbd_conn *conn)
+{
+	/*
+	 * Checking waitqueue to dropping pending requests on
+	 * disconnection. waitqueue_active is safe because it
+	 * uses atomic operation for condition.
+	 */
+	atomic_inc(&conn->refcnt);
+	if (!atomic_dec_return(&conn->r_count) && waitqueue_active(&conn->r_count_q))
+		wake_up(&conn->r_count_q);
+
+	if (atomic_dec_and_test(&conn->refcnt))
+		kfree(conn);
+}
+
 int ksmbd_conn_transport_init(void)
 {
 	int ret;
fs/smb/server/connection.h +2 -0
index 82343afc8d04..4fdd76ce53b9 100644
@@ -168,6 +168,8 @@ int ksmbd_conn_transport_init(void);
 void ksmbd_conn_transport_destroy(void);
 void ksmbd_conn_lock(struct ksmbd_conn *conn);
 void ksmbd_conn_unlock(struct ksmbd_conn *conn);
+void ksmbd_conn_r_count_inc(struct ksmbd_conn *conn);
+void ksmbd_conn_r_count_dec(struct ksmbd_conn *conn);
 
 /*
  * WARNING
fs/smb/server/ksmbd_work.c +0 -3
index d7c676c151e2..544d8ccd29b0 100644
@@ -26,7 +26,6 @@ struct ksmbd_work *ksmbd_alloc_work_struct(void)
 		INIT_LIST_HEAD(&work->request_entry);
 		INIT_LIST_HEAD(&work->async_request_entry);
 		INIT_LIST_HEAD(&work->fp_entry);
-		INIT_LIST_HEAD(&work->interim_entry);
 		INIT_LIST_HEAD(&work->aux_read_list);
 		work->iov_alloc_cnt = 4;
 		work->iov = kcalloc(work->iov_alloc_cnt, sizeof(struct kvec),
@@ -56,8 +55,6 @@ void ksmbd_free_work_struct(struct ksmbd_work *work)
 	kfree(work->tr_buf);
 	kvfree(work->request_buf);
 	kfree(work->iov);
-	if (!list_empty(&work->interim_entry))
-		list_del(&work->interim_entry);
 
 	if (work->async_id)
 		ksmbd_release_id(&work->conn->async_ida, work->async_id);
fs/smb/server/ksmbd_work.h +0 -1
index 8ca2c813246e..d36393ff8310 100644
@@ -89,7 +89,6 @@ struct ksmbd_work {
 	/* List head at conn->async_requests */
 	struct list_head                async_request_entry;
 	struct list_head                fp_entry;
-	struct list_head                interim_entry;
 };
 
 /**
fs/smb/server/oplock.c +21 -22

134 lines not on this page · raw message

fs/smb/server/oplock.h +0 -1
index e9da63f25b20..59554b73f60c 100644
@@ -74,7 +74,6 @@ struct oplock_info {
 	bool			is_lease;
 	bool			open_trunc;	/* truncate on open */
 	struct lease		*o_lease;
-	struct list_head        interim_list;
 	struct list_head        op_entry;
 	struct list_head        lease_entry;
 	wait_queue_head_t oplock_q; /* Other server threads */
fs/smb/server/server.c +2 -12
index 71e1c1db9dea..80050b217898 100644
@@ -270,17 +270,7 @@ static void handle_ksmbd_work(struct work_struct *wk)
 
 	ksmbd_conn_try_dequeue_request(work);
 	ksmbd_free_work_struct(work);
-	/*
-	 * Checking waitqueue to dropping pending requests on
-	 * disconnection. waitqueue_active is safe because it
-	 * uses atomic operation for condition.
-	 */
-	atomic_inc(&conn->refcnt);
-	if (!atomic_dec_return(&conn->r_count) && waitqueue_active(&conn->r_count_q))
-		wake_up(&conn->r_count_q);
-
-	if (atomic_dec_and_test(&conn->refcnt))
-		kfree(conn);
+	ksmbd_conn_r_count_dec(conn);
 }
 
 /**
@@ -310,7 +300,7 @@ static int queue_ksmbd_work(struct ksmbd_conn *conn)
 	conn->request_buf = NULL;
 
 	ksmbd_conn_enqueue_request(work);
-	atomic_inc(&conn->r_count);
+	ksmbd_conn_r_count_inc(conn);
 	/* update activity on connection */
 	conn->last_active = jiffies;
 	INIT_WORK(&work->work, handle_ksmbd_work);
fs/vboxsf/super.c +2 -1
index 9848af78215b..6e9ebf232123 100644
@@ -21,7 +21,8 @@
 
 #define VBOXSF_SUPER_MAGIC 0x786f4256 /* 'VBox' little endian */
 
-static const unsigned char VBSF_MOUNT_SIGNATURE[4] = "\000\377\376\375";
+static const unsigned char VBSF_MOUNT_SIGNATURE[4] = { '\000', '\377', '\376',
+						       '\375' };
 
 static int follow_symlinks;
 module_param(follow_symlinks, int, 0444);
include/linux/fs.h +2 -0
index e47596d354ff..81edfa1e66b6 100644
@@ -3085,6 +3085,8 @@ extern const struct file_operations generic_ro_fops;
 
 extern int readlink_copy(char __user *, int, const char *);
 extern int page_readlink(struct dentry *, char __user *, int);
+extern const char *page_get_link_raw(struct dentry *, struct inode *,
+				     struct delayed_call *);
 extern const char *page_get_link(struct dentry *, struct inode *,
 				 struct delayed_call *);
 extern void page_put_link(void *);
include/linux/i8253.h +0 -1
index bf169cfef7f1..56c280eb2d4f 100644
@@ -21,7 +21,6 @@
 #define PIT_LATCH	((PIT_TICK_RATE + HZ/2) / HZ)
 
 extern raw_spinlock_t i8253_lock;
-extern bool i8253_clear_counter_on_shutdown;
 extern struct clock_event_device i8253_clockevent;
 extern void clockevent_i8253_init(bool oneshot);
 extern void clockevent_i8253_disable(void);
include/linux/io_uring_types.h +0 -3
index 8215e193178a..0fadef2983e0 100644
@@ -326,9 +326,6 @@ struct io_ring_ctx {
 
 	struct list_head	io_buffers_cache;
 
-	/* deferred free list, protected by ->uring_lock */
-	struct hlist_head	io_buf_list;
-
 	/* Keep this last, we don't need it for the fast path */
 	struct wait_queue_head		poll_wq;
 	struct io_restriction		restrictions;
include/linux/nvme-tcp.h +2 -0
index e07e8978d691..e435250fcb4d 100644
@@ -13,6 +13,8 @@
 #define NVME_TCP_ADMIN_CCSZ	SZ_8K
 #define NVME_TCP_DIGEST_LENGTH	4
 #define NVME_TCP_MIN_MAXH2CDATA 4096
+#define NVME_TCP_MIN_C2HTERM_PLEN	24
+#define NVME_TCP_MAX_C2HTERM_PLEN	152
 
[… more lines in the raw message]

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

include/net/bluetooth/hci_core.h +38 -70

108 lines not on this page · raw message

include/net/bluetooth/l2cap.h +2 -1
index d2a1154121d0..08574278645d 100644

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

include/net/netfilter/nf_tables.h +16 -4
index dcbf3f299548..c0f4b91e4f5e 100644

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

include/sound/soc.h +4 -1
index c1acc46529b9..1f99c29aebdf 100644

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

init/Kconfig +1 -1
index 60ed7713b5ee..1105cb53f391 100644

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

io_uring/io-wq.c +18 -5
index a1e31723c9ed..93f3e4d1df85 100644

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

io_uring/io_uring.c +177 -73

250 lines not on this page · raw message

io_uring/io_uring.h +6 -2
index 57658d24a73e..0ffec66deee7 100644

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

io_uring/kbuf.c +41 -132

173 lines not on this page · raw message

io_uring/kbuf.h +1 -2
index 8d7929369501..292af16f35c1 100644

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

io_uring/rsrc.c +0 -39
index 0f9dcde72ebf..f0353e8707d5 100644

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

kernel/bpf/ringbuf.c +6 -6
index 528f4d634226..6aff5ee483b6 100644

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

kernel/sched/core.c +11 -2
index 784a4f840945..942734bf7347 100644

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

kernel/sched/debug.c +2 -0
index 4c3d0d9f3db6..115e266db76b 100644

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

kernel/sys.c +2 -0
index 44b575990333..355de0b65c23 100644

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

kernel/time/hrtimer.c +15 -25
index e99b1305e1a5..877535b06e73 100644

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

lib/buildid.c +5 -0
index 9fc46366597e..8d839ff5548e 100644

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

mm/mmap.c +52 -17

69 lines not on this page · raw message

mm/nommu.c +7 -0
index f848d98e8997..3228b2d3e4ab 100644

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

net/bluetooth/hci_core.c +7 -3
index f29fd3264401..30519d47e8a6 100644

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

net/bluetooth/hci_event.c +22 -15
index 01e51e1dc9b3..1e689d8c00a5 100644

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

net/bluetooth/iso.c +0 -6
index f165cafa3aa9..b94d202bf374 100644

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

net/bluetooth/l2cap_core.c +85 -96

181 lines not on this page · raw message

net/bluetooth/l2cap_sock.c +7 -8
index 3451c64fc42d..aaaaf9733b58 100644

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

net/bluetooth/rfcomm/core.c +0 -6
index 9d46afb24caf..1d34d8497033 100644

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

net/bluetooth/sco.c +6 -6
index c4c36ff25fb2..64d4d57c7033 100644

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

net/core/dev.c +1 -1
index 8c30cdcf05d4..c31a7f7bedf3 100644

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

net/core/netpoll.c +7 -2
index 1791462f1600..1a4d2a61b060 100644

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

net/ipv4/tcp.c +10 -10
index 7ad82be40f34..ff22060f9145 100644

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

net/ipv6/addrconf.c +9 -6
index 8360939acf85..db07d3bbaf37 100644

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

net/mptcp/protocol.h +2 -0
index 0bb0386aa089..d67add91c9b9 100644

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

net/netfilter/ipvs/ip_vs_ctl.c +4 -4
index dec5309d9f1f..ae76542de3e9 100644

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

net/netfilter/nf_conncount.c +4 -2
index 5885810da412..6156c0751056 100644

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

net/netfilter/nf_tables_api.c +13 -12
index bf24c63aff7b..9e9544f81942 100644

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

net/netfilter/nft_connlimit.c +2 -2
index de9d1980df69..92b984fa8175 100644

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

net/netfilter/nft_counter.c +2 -2
index b7aa4d2c8c22..eab0dc66bee6 100644

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

net/netfilter/nft_ct.c +4 -2
index 255640013ab8..ab1214da99ff 100644

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

net/netfilter/nft_dynset.c +1 -1
index 629a91a8c614..a81bd69b059b 100644

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

net/netfilter/nft_exthdr.c +4 -6
index 6eb571d0c3fd..cfa90ab660cf 100644

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

net/netfilter/nft_last.c +2 -2
index 8e6d7eaf9dc8..de1b6066bfa8 100644

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

net/netfilter/nft_limit.c +8 -6
index cefa25e0dbb0..21d26b79b460 100644

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

net/netfilter/nft_quota.c +2 -2
index 3ba12a7471b0..9b2d7463d3d3 100644

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

net/netfilter/nft_set_hash.c +7 -1
index cc1ae18485fa..0370f69dce86 100644

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

net/netfilter/nft_set_pipapo.c +11 -7
index 5dab9905ebbe..4274831b6e67 100644

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

net/netfilter/nft_set_rbtree.c +7 -4
index 8ad1e008d12b..04672238e17d 100644

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

net/openvswitch/flow_netlink.c +1 -14
index ebc5728aab4e..9c13e14034d3 100644

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

net/sched/sch_api.c +6 -0
index 7cddaa6321c7..df89790c459a 100644

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

net/sched/sch_gred.c +2 -1
index 872d127c9db4..fa7a1b69c0f3 100644

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

net/sctp/stream.c +1 -1
index c241cc552e8d..bfcff6d6a438 100644

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

net/switchdev/switchdev.c +18 -7
index c9189a970eec..fb0e65c89525 100644

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

net/wireless/core.c +7 -0
index 3c1247933ae9..a2b15349324b 100644

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

rust/kernel/error.rs +1 -1
index 032b64543953..e82d31aa1f30 100644

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

rust/kernel/init.rs +10 -13
index 2d4b19b86857..af1c77cc12b2 100644

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

rust/kernel/init/macros.rs +3 -3
index cb6e61b6c50b..cb769a09e742 100644

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

rust/kernel/sync.rs +4 -6
index d219ee518eff..8b40589b1028 100644

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

scripts/generate_rust_analyzer.py +21 -9
index fc52bc41d3e7..c99173e4b8f3 100755

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

sound/pci/hda/patch_realtek.c +1 -0
index ec57148453c8..1fd6e84b0e37 100644

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

sound/soc/amd/yc/acp6x-mach.c +7 -0
index eac023283ff7..2981bd1c3530 100644

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

sound/soc/codecs/arizona.c +7 -7
index 402b9a2ff024..68cdb1027d0c 100644

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

sound/soc/codecs/cs42l43.c +1 -1
index 1443eb1dc0b1..4f78b7668b60 100644

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

sound/soc/codecs/madera.c +5 -5
index b9f19fbd2911..30e680ee1069 100644

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

sound/soc/codecs/rt722-sdca-sdw.c +4 -0
index 91314327d9ee..c382cb6be602 100644

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

sound/soc/codecs/tas2764.c +9 -1
index a9838e0738cc..e87a07eee973 100644

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

sound/soc/codecs/tas2764.h +7 -1
index 168af772a898..9490f2686e38 100644

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

sound/soc/codecs/tas2770.c +1 -1
index 99bf402eb566..5c6b825c757b 100644

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

sound/soc/codecs/wm0010.c +11 -2
index 1d4259433f47..6b67edd528bc 100644

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

sound/soc/codecs/wm5110.c +4 -4
index ac1f2c850346..da5933fbdbf8 100644

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

sound/soc/generic/simple-card-utils.c +1 -0
index 2588ec735dbd..598b0000df24 100644

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

sound/soc/sh/rcar/core.c +0 -14
index 98c7be340a53..3cd14fbca28e 100644

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

sound/soc/sh/rcar/rsnd.h +0 -1
index 43c0d675cc34..1214dbba6898 100644

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

sound/soc/sh/rcar/src.c +93 -23

116 lines not on this page · raw message

sound/soc/sh/rcar/ssi.c +2 -1
index 690ac0d6ef41..2a9e8d20c23c 100644

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

sound/soc/soc-ops.c +7 -8
index b27e89ff6a16..b4cfc34d00ee 100644

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

sound/soc/sof/amd/acp-ipc.c +16 -7
index fcb54f545fea..a4e9bc20adaf 100644

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

sound/soc/sof/intel/hda-codec.c +1 -0
index 328d7c227b21..82a6707fb4b8 100644

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

tools/objtool/check.c +9 -0
index 1b242c3c2d45..6e59e7f578ff 100644

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

tools/testing/selftests/bpf/prog_tests/sockmap_basic.c +3 -3
index dda7060e86a0..b16d765a153a 100644

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

The rest of this diff is not shown. View the raw message.

Part of the diff is not shown here. View the raw message.