Linux 6.6.84
Greg Kroah-Hartman
maintainerI'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
Greg Kroah-Hartman
maintainerDocumentation/timers/no_hz.rst +2 -5
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1078,7 +1078,7 @@ static enum ucode_state load_microcode_amd(u8 family, const u8 *data, size_t sizif (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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -426,7 +426,7 @@ static struct bio *clone_bio(struct dm_target *ti, struct flakey_c *fc, struct bif (!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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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_idfor (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
@@ -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
@@ -209,7 +209,7 @@ static int mbim_rx_verify_nth16(struct mhi_mbim_context *mbim, struct sk_buff *sif (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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
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
io_uring/io_uring.c +177 -73
250 lines not on this page · raw message
io_uring/kbuf.c +41 -132
173 lines not on this page · raw message
mm/mmap.c +52 -17
69 lines not on this page · raw message
net/bluetooth/l2cap_core.c +85 -96
181 lines not on this page · raw message
sound/soc/sh/rcar/src.c +93 -23
116 lines not on this page · raw message
tools/testing/selftests/bpf/prog_tests/sockmap_basic.c +3 -3
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.