Linux 5.18.10
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.18.10 kernel.
All users of the 5.18 kernel series must upgrade.
The updated 5.18.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.18.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
------------
Makefile | 2 arch/arm/xen/p2m.c | 6 arch/parisc/kernel/asm-offsets.c | 5 arch/parisc/kernel/unaligned.c | 2 arch/powerpc/Kconfig | 4 arch/powerpc/include/asm/bpf_perf_event.h | 9 arch/powerpc/include/uapi/asm/bpf_perf_event.h | 9 arch/powerpc/kernel/prom_init_check.sh | 2 arch/powerpc/mm/mem.c | 33 ++ arch/powerpc/mm/nohash/book3e_pgtable.c | 6 arch/s390/Kconfig | 1 arch/s390/crypto/arch_random.c | 217 --------------- arch/s390/include/asm/archrandom.h | 14 arch/s390/kernel/setup.c | 5 drivers/acpi/acpi_video.c | 13 drivers/block/xen-blkfront.c | 56 ++- drivers/cpufreq/amd-pstate.c | 24 + drivers/cpufreq/qcom-cpufreq-hw.c | 6 drivers/cpufreq/qoriq-cpufreq.c | 1 drivers/devfreq/event/exynos-ppmu.c | 8 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 1 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 drivers/gpu/drm/i915/gem/i915_gem_context.c | 5 drivers/gpu/drm/i915/i915_driver.c | 34 +- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 3 drivers/gpu/drm/msm/msm_gem_submit.c | 2 drivers/hwmon/ibmaem.c | 12 drivers/hwmon/occ/common.c | 5 drivers/hwmon/occ/common.h | 3 drivers/hwmon/occ/p8_i2c.c | 13 drivers/hwmon/occ/p9_sbe.c | 7 drivers/infiniband/core/cm.c | 4 drivers/infiniband/hw/qedr/qedr.h | 1 drivers/infiniband/hw/qedr/verbs.c | 4 drivers/md/dm-raid.c | 34 +- drivers/md/raid5.c | 1 drivers/net/bonding/bond_3ad.c | 3 drivers/net/bonding/bond_alb.c | 2 drivers/net/caif/caif_virtio.c | 10 drivers/net/dsa/bcm_sf2.c | 5 drivers/net/dsa/hirschmann/hellcreek_ptp.c | 1 drivers/net/dsa/ocelot/felix_vsc9959.c | 4 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 14 drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c | 18 + drivers/net/ethernet/smsc/epic100.c | 4 drivers/net/phy/ax88796b.c | 6 drivers/net/phy/dp83822.c | 4 drivers/net/phy/phy.c | 23 + drivers/net/phy/phy_device.c | 23 + drivers/net/tun.c | 15 - drivers/net/usb/asix.h | 3 drivers/net/usb/asix_common.c | 1 drivers/net/usb/ax88179_178a.c | 101 +++++- drivers/net/usb/usbnet.c | 4 drivers/net/virtio_net.c | 8 drivers/net/xen-netfront.c | 56 +++ drivers/nfc/nfcmrvl/i2c.c | 6 drivers/nfc/nfcmrvl/spi.c | 6 drivers/nfc/nxp-nci/i2c.c | 3 drivers/nvdimm/bus.c | 4 drivers/nvme/host/pci.c | 5 drivers/nvme/target/configfs.c | 20 + drivers/nvme/target/core.c | 6 drivers/nvme/target/nvmet.h | 1 drivers/nvme/target/passthru.c | 55 +++ drivers/nvme/target/tcp.c | 23 - drivers/platform/x86/Kconfig | 2 drivers/platform/x86/ideapad-laptop.c | 29 +- drivers/platform/x86/panasonic-laptop.c | 84 ++++- drivers/platform/x86/thinkpad_acpi.c | 1 drivers/vdpa/mlx5/net/mlx5_vnet.c | 2 fs/ceph/caps.c | 1 fs/cifs/connect.c | 2 fs/io_uring.c | 4 fs/ksmbd/smb2pdu.c | 43 ++ fs/ksmbd/vfs.c | 12 fs/nfs/nfs4proc.c | 19 - fs/nfs/nfs4state.c | 1 fs/nfsd/vfs.c | 11 fs/notify/fanotify/fanotify_user.c | 34 +- fs/read_write.c | 77 +++-- include/linux/dim.h | 2 include/linux/fanotify.h | 4 include/linux/netdevice.h | 2 include/linux/phy.h | 6 include/uapi/drm/drm_fourcc.h | 4 include/uapi/linux/mptcp.h | 9 lib/sbitmap.c | 5 net/ipv4/ip_tunnel_core.c | 2 net/ipv4/tcp_ipv4.c | 6 net/ipv6/addrconf.c | 8 net/ipv6/route.c | 9 net/ipv6/seg6_hmac.c | 1 net/ipv6/sit.c | 8 net/mptcp/protocol.c | 5 net/mptcp/protocol.h | 2 net/mptcp/subflow.c | 52 +++ net/netfilter/nft_set_hash.c | 2 net/rose/rose_timer.c | 34 +- net/sched/act_api.c | 22 - net/sunrpc/xdr.c | 2 net/tipc/node.c | 41 +- tools/testing/selftests/net/bpf/Makefile | 2 tools/testing/selftests/net/mptcp/diag.sh | 48 ++- tools/testing/selftests/net/mptcp/mptcp_connect.c | 2 tools/testing/selftests/net/mptcp/mptcp_inq.c | 2 tools/testing/selftests/net/mptcp/mptcp_sockopt.c | 2 tools/testing/selftests/net/udpgso_bench.sh | 2 110 files changed, 1012 insertions(+), 588 deletions(-)
Alan Adamson (1):
nvmet: add a clear_ids attribute for passthru targets
Alex Deucher (2):
drm/amdgpu: fix adev variable used in amdgpu_device_gpu_recover() Revert "drm/amdgpu/display: set vblank_disable_immediate for DC"
Alexey Khoroshilov (1):
NFSD: restore EINVAL error translation in nfsd_commit()
Amir Goldstein (2):
vfs: fix copy_file_range() regression in cross-fs copies
fanotify: refine the validation checks on non-dir inode mask
Aneesh Kumar K.V (1):
powerpc/memhotplug: Add add_pages override for PPC
Anshuman Gupta (1):
drm/i915/dgfx: Disable d3cold at gfx root port
Carlos Llamas (1):
drm/fourcc: fix integer type usage in uapi header
Casper Andersson (2):
net: sparx5: Add handling of host MDB entries
net: sparx5: mdb add/del handle non-sparx5 devices
Chris Ye (1):
nvdimm: Fix badblocks clear off-by-one error
Christophe Leroy (1):
powerpc/book3e: Fix PUD allocation size in map_kernel_page()
Chuck Lever (1):
SUNRPC: Fix READ_PLUS crasher
Coleman Dietsch (1):
selftests net: fix kselftest net fatal error
Dan Carpenter (1):
net: fix IFF_TX_SKB_NO_LINEAR definition
Dimitris Michailidis (1):
selftests/net: pass ipv6_args to udpgso_bench's IPv6 TCP test
Doug Berger (1):
net: dsa: bcm_sf2: force pause link settings
Duoming Zhou (1):
net: rose: fix UAF bugs caused by timer handler
Eddie James (1):
hwmon: (occ) Prevent power cap command overwriting poll response
Eli Cohen (1):
vdpa/mlx5: Update Control VQ callback information
Enguerrand de Ribaucourt (2):
net: dp83822: disable false carrier interrupt
net: dp83822: disable rx error interrupt
Eric Dumazet (4):
net: bonding: fix possible NULL deref in rlb code
tcp: add a missing nf_reset_ct() in 3WHS handling
tunnels: do not assume mac header is set in skb_tunnel_check_pmtu()
ipv6: fix lockdep splat in in6_dump_addrs()
Greg Kroah-Hartman (1):
Linux 5.18.10
Hans de Goede (7):
platform/x86: ideapad-laptop: Add Ideapad 5 15ITL05 to ideapad_dytc_v4_allow_table[]
ACPI: video: Change how we determine if brightness key-presses are handled platform/x86: ideapad-laptop: Add allow_v4_dytc module parameter platform/x86: panasonic-laptop: sort includes alphabetically platform/x86: panasonic-laptop: revert "Resolve hotkey double trigger bug" platform/x86: panasonic-laptop: don't report duplicate brightness key-presses platform/x86: panasonic-laptop: filter out duplicate volume up/down/mute keypresses
Heinz Mauelshagen (1):
dm raid: fix accesses beyond end of raid member array
Helge Deller (2):
parisc: Fix vDSO signal breakage on 32-bit kernel parisc/unaligned: Fix emulate_ldw() breakage
Jakub Kicinski (3):
net: tun: unlink NAPI from device on destruction
net: tun: stop NAPI when detaching queues
net: tun: avoid disabling NAPI twice
Jan Beulich (1):
xen-netfront: restore __skb_queue_tail() positioning in xennet_get_responses()
Jason A. Donenfeld (2):
ksmbd: use vfs_llseek instead of dereferencing NULL s390/archrandom: simplify back to earlier design and initialize earlier
Jason Wang (2):
virtio-net: fix race between ndo_open() and virtio_device_ready()
caif_virtio: fix race between virtio_device_ready() and ndo_open()
Jean Delvare (1):
platform/x86: thinkpad_acpi: Fix a memory leak of EFCH MMIO resource
Jeff Layton (1):
ceph: wait on async create before checking caps for syncfs
Jens Axboe (1):
io_uring: ensure that send/sendmsg and recv/recvmsg check sqe->ioprio
Jinzhou Su (1):
cpufreq: amd-pstate: Add resume and suspend callbacks
Jose Alonso (1):
net: usb: ax88179_178a: Fix packet receiving
Kamal Heib (1):
RDMA/qedr: Fix reporting QP timeout attribute
Krzysztof Kozlowski (1):
nfc: nfcmrvl: Fix irq_of_parse_and_map() return value
Lamarque Vieira Souza (1):
nvme-pci: add NVME_QUIRK_BOGUS_NID for ADATA IM2P33F8ABR1
Liam Howlett (1):
powerpc/prom_init: Fix kernel config grep
Liang He (2):
net/dsa/hirschmann: Add missing of_node_get() in hellcreek_led_setup()
drivers: cpufreq: Add missing of_node_put() in qoriq-cpufreq.c
Lukas Wunner (1):
net: phy: Don't trigger state machine while in suspend
Masahiro Yamada (1):
s390: remove unneeded 'select BUILD_BIN2C'
Mat Martineau (1):
selftests: mptcp: Initialize variables to quiet gcc 12 warnings
Miaoqian Lin (2):
RDMA/cm: Fix memory leak in ib_cm_insert_listen
PM / devfreq: exynos-ppmu: Fix refcount leak in of_get_devfreq_events
Michael Walle (1):
NFC: nxp-nci: Don't issue a zero length i2c_master_read()
Mikulas Patocka (1):
dm raid: fix KASAN warning in raid5_add_disks
Namjae Jeon (2):
ksmbd: set the range of bytes to zero without extending file size in FSCTL_ZERO_DATA
ksmbd: check invalid FileOffset and BeyondFinalZero in FSCTL_ZERO_DATA
Naveen N. Rao (1):
powerpc/bpf: Fix use of user_pt_regs in uapi
NeilBrown (1):
NFS: restore module put when manager exits.
Nicolas Dichtel (1):
ipv6: take care of disable_policy when restoring routes
Oleksandr Tyshchenko (1):
xen/arm: Fix race in RB-tree based P2M accounting
Oleksij Rempel (3):
net: usb: asix: do not force pause frames support
net: asix: fix "can't send until first packet is send" issue
net: phy: ax88772a: fix lost pause advertisement configuration
Oliver Neukum (1):
usbnet: fix memory allocation in helpers
Ossama Othman (1):
mptcp: fix conflict with <netinet/in.h>
Pablo Greco (1):
nvme-pci: add NVME_QUIRK_BOGUS_NID for ADATA XPG SX6000LNP (AKA SPECTRIX S40G)
Pablo Neira Ayuso (1):
netfilter: nft_dynset: restore set element counter when failing to update
Paolo Abeni (2):
mptcp: fix race on unaccepted mptcp sockets
selftests: mptcp: more stable diag tests
Petr Machata (1):
mlxsw: spectrum_router: Fix rollback in tunnel next hop init
Rob Clark (1):
drm/msm/gem: Fix error return on fence id alloc fail
Roger Pau Monne (4):
xen/blkfront: fix leaking data in shared pages xen/netfront: fix leaking data in shared pages xen/netfront: force data bouncing when backend is untrusted xen/blkfront: force data bouncing when backend is untrusted
Ruili Ji (1):
drm/amdgpu: To flush tlb for MMHUB of RAVEN series
Sagi Grimberg (1):
nvmet-tcp: fix regression in data_digest calculation
Scott Mayhew (1):
NFSv4: Add an fattr allocation to _nfs4_discover_trunking()
Stefan Seyfried (1):
platform/x86: panasonic-laptop: de-obfuscate button codes
Stephen Boyd (2):
cpufreq: qcom-hw: Don't do lmh things without a throttle interrupt drm/msm/dpu: Increment vsync_cnt before waking up userspace
Steve French (1):
cifs: fix minor compile warning
Tao Liu (1):
linux/dim: Fix divide by 0 in RDMA DIM
Tong Zhang (1):
epic100: fix use after free on rmmod
Victor Nogueira (1):
net/sched: act_api: Notify user space if any actions were flushed before error
Vladimir Oltean (1):
net: dsa: felix: fix race between reading PSFP stats and port stats
Xin Long (1):
tipc: move bc link creation back to tipc_node_create
Yang Yingliang (1):
hwmon: (ibmaem) don't call platform_device_del() if platform_device_add() fails
Yevhen Orlov (1):
net: bonding: fix use-after-free after 802.3ad slave unbind
YueHaibing (1):
net: ipv6: unexport __init-annotated seg6_hmac_net_init()
katrinzhou (2):
ipv6/sit: fix ipip6_tunnel_get_prl return value drm/i915/gem: add missing else
wuchi (1):
lib/sbitmap: Fix invalid loop in __sbitmap_queue_get_batch()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 18 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Superb Owl
arch/arm/xen/p2m.c +4 -2
@@ -63,11 +63,12 @@ static int xen_add_phys_to_mach_entry(struct xen_p2m_entry *new)unsigned long __pfn_to_mfn (unsigned long pfn) { -struct rb_node *n = phys_to_mach.rb_node; +struct rb_node *n;struct xen_p2m_entry *entry;unsigned long irqflags;read_lock_irqsave (&p2m_lock, irqflags); + n = phys_to_mach.rb_node;while (n) { entry = rb_entry(n, struct xen_p2m_entry, rbnode_phys); if (entry->pfn <= pfn &&
@@ -152,10 +153,11 @@ bool __set_phys_to_machine_multi(unsigned long pfn,int rc;unsigned long irqflags;struct xen_p2m_entry *p2m_entry; -struct rb_node *n = phys_to_mach.rb_node; +struct rb_node *n;if (mfn ==INVALID_P2M_ENTRY ) {write_lock_irqsave (&p2m_lock, irqflags); + n = phys_to_mach.rb_node;while (n) { p2m_entry = rb_entry(n, struct xen_p2m_entry, rbnode_phys); if (p2m_entry->pfn <= pfn &&
arch/parisc/kernel/asm-offsets.c +5 -0
@@ -224,8 +224,13 @@ int main(void)BLANK ();DEFINE (ASM_SIGFRAME_SIZE ,PARISC_RT_SIGFRAME_SIZE ); DEFINE(SIGFRAME_CONTEXT_REGS, offsetof(struct rt_sigframe, uc.uc_mcontext) - PARISC_RT_SIGFRAME_SIZE); +#ifdef CONFIG_64BIT DEFINE (ASM_SIGFRAME_SIZE32 ,PARISC_RT_SIGFRAME_SIZE32 ); DEFINE(SIGFRAME_CONTEXT_REGS32, offsetof(struct compat_rt_sigframe, uc.uc_mcontext) - PARISC_RT_SIGFRAME_SIZE32); +#else +DEFINE (ASM_SIGFRAME_SIZE32 ,PARISC_RT_SIGFRAME_SIZE ); + DEFINE(SIGFRAME_CONTEXT_REGS32, offsetof(struct rt_sigframe, uc.uc_mcontext) - PARISC_RT_SIGFRAME_SIZE); +#endif BLANK ();DEFINE (ICACHE_BASE , offsetof(struct pdc_cache_info , ic_base));DEFINE (ICACHE_STRIDE , offsetof(struct pdc_cache_info , ic_stride));
arch/parisc/kernel/unaligned.c +1 -1
@@ -146,7 +146,7 @@ static int emulate_ldw(struct pt_regs *regs, int toreg, int flop)" depw %%r0,31,2,%4\n" "1: ldw 0(%%sr1,%4),%0\n" "2: ldw 4(%%sr1,%4),%3\n" -" subi 32,%4,%2\n" +" subi 32,%2,%2\n" " mtctl %2,11\n" " vshd %0,%3,%0\n" "3: \n"
arch/powerpc/Kconfig +4 -0
@@ -358,6 +358,10 @@ config ARCH_SUSPEND_NONZERO_CPU def_bool y depends on PPC_POWERNV || PPC_PSERIES +config ARCH_HAS_ADD_PAGES + def_bool y + depends on ARCH_ENABLE_MEMORY_HOTPLUG + config PPC_DCR_NATIVE bool
arch/powerpc/include/asm/bpf_perf_event.h new file +9 -0
@@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _ASM_POWERPC_BPF_PERF_EVENT_H +#define _ASM_POWERPC_BPF_PERF_EVENT_H + +#include <asm/ptrace.h> + +typedef struct user_pt_regs bpf_user_pt_regs_t ; + +#endif /* _ASM_POWERPC_BPF_PERF_EVENT_H */
arch/powerpc/include/uapi/asm/bpf_perf_event.h deleted +0 -9
@@ -1,9 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -#ifndef _UAPI__ASM_BPF_PERF_EVENT_H__ -#define _UAPI__ASM_BPF_PERF_EVENT_H__ - -#include <asm/ptrace.h> - -typedef struct user_pt_regs bpf_user_pt_regs_t ; - -#endif /* _UAPI__ASM_BPF_PERF_EVENT_H__ */
arch/powerpc/kernel/prom_init_check.sh +1 -1
@@ -13,7 +13,7 @@ # If you really need to reference something from prom_init.o add # it to the list below: -grep "^CONFIG_KASAN=y$" .config >/dev/null +grep "^CONFIG_KASAN=y$" ${KCONFIG_CONFIG} >/dev/null if [ $? -eq 0 ] then MEM_FUNCS="__memcpy __memset"
arch/powerpc/mm/mem.c +32 -1
@@ -103,6 +103,37 @@ void __ref arch_remove_linear_mapping(u64 start, u64 size)vm_unmap_aliases (); } +/* +* After memory hotplug the variables max_pfn, max_low_pfn and high_memory need +* updating. +*/ +static void update_end_of_memory_vars (u64 start,u64 size) +{ +unsigned long end_pfn =PFN_UP (start + size); + +if (end_pfn > max_pfn) { + max_pfn = end_pfn; + max_low_pfn = end_pfn; + high_memory = (void *)__va (max_pfn *PAGE_SIZE -1 ) +1 ; + } +} + +int __ref add_pages (int nid,unsigned long start_pfn,unsigned long nr_pages, +struct mhp_params *params) +{ +int ret; + + ret =__add_pages (nid, start_pfn, nr_pages, params); +if (ret) +return ret; + +/* update max_pfn, max_low_pfn and high_memory */ +update_end_of_memory_vars (start_pfn <<PAGE_SHIFT , + nr_pages <<PAGE_SHIFT ); + +return ret; +} +int __ref arch_add_memory (int nid,u64 start,u64 size,struct mhp_params *params) {
@@ -113,7 +144,7 @@ int __ref arch_add_memory(int nid, u64 start, u64 size, rc =arch_create_linear_mapping (nid, start, size, params);if (rc)return rc; - rc =__add_pages (nid, start_pfn, nr_pages, params); + rc =add_pages (nid, start_pfn, nr_pages, params);if (rc)arch_remove_linear_mapping (start, size);return rc;
arch/powerpc/mm/nohash/book3e_pgtable.c +3 -3
@@ -96,8 +96,8 @@ int __ref map_kernel_page(unsigned long ea, unsigned long pa, pgprot_t prot) pgdp =pgd_offset_k (ea); p4dp =p4d_offset (pgdp, ea);if (p4d_none (*p4dp)) { - pmdp =early_alloc_pgtable (PMD_TABLE_SIZE ); -p4d_populate (&init_mm, p4dp, pmdp); + pudp =early_alloc_pgtable (PUD_TABLE_SIZE ); +p4d_populate (&init_mm, p4dp, pudp); } pudp =pud_offset (p4dp, ea);if (pud_none (*pudp)) {
@@ -106,7 +106,7 @@ int __ref map_kernel_page(unsigned long ea, unsigned long pa, pgprot_t prot) } pmdp =pmd_offset (pudp, ea);if (!pmd_present (*pmdp)) { - ptep =early_alloc_pgtable (PAGE_SIZE ); + ptep =early_alloc_pgtable (PTE_TABLE_SIZE );pmd_populate_kernel (&init_mm, pmdp, ptep); } ptep =pte_offset_kernel (pmdp, ea);
arch/s390/Kconfig +0 -1
@@ -487,7 +487,6 @@ config KEXEC config KEXEC_FILE bool "kexec file based system call" select KEXEC_CORE - select BUILD_BIN2C depends on CRYPTO depends on CRYPTO_SHA256 depends on CRYPTO_SHA256_S390
arch/s390/crypto/arch_random.c +0 -217
232 lines not on this page · raw message
arch/s390/include/asm/archrandom.h +7 -7
@@ -15,17 +15,13 @@#include <linux/static_key.h> #include <linux/atomic.h> +#include <asm/cpacf.h> DECLARE_STATIC_KEY_FALSE (s390_arch_random_available);extern atomic64_t s390_arch_random_counter; -bool s390_arch_get_random_long (unsigned long *v); -bool s390_arch_random_generate (u8 *buf,unsigned int nbytes); -static inline bool __must_check arch_get_random_long (unsigned long *v) { -if (static_branch_likely (&s390_arch_random_available)) -return s390_arch_get_random_long (v);return false; }
@@ -37,7 +33,9 @@ static inline bool __must_check arch_get_random_int(unsigned int *v)static inline bool __must_check arch_get_random_seed_long (unsigned long *v) {if (static_branch_likely (&s390_arch_random_available)) { -return s390_arch_random_generate ((u8 *)v,sizeof (*v)); +cpacf_trng (NULL ,0 , (u8 *)v,sizeof (*v)); +atomic64_add (sizeof (*v), &s390_arch_random_counter); +return true; }return false; }
@@ -45,7 +43,9 @@ static inline bool __must_check arch_get_random_seed_long(unsigned long *v)static inline bool __must_check arch_get_random_seed_int (unsigned int *v) {if (static_branch_likely (&s390_arch_random_available)) { -return s390_arch_random_generate ((u8 *)v,sizeof (*v)); +cpacf_trng (NULL ,0 , (u8 *)v,sizeof (*v)); +atomic64_add (sizeof (*v), &s390_arch_random_counter); +return true; }return false; }
arch/s390/kernel/setup.c +5 -0
@@ -875,6 +875,11 @@ static void __init setup_randomness(void)if (stsi (vmms,3 ,2 ,2 ) ==0 && vmms->count)add_device_randomness (&vmms->vm,sizeof (vmms->vm[0 ]) * vmms->count);memblock_free (vmms,PAGE_SIZE ); + +#ifdef CONFIG_ARCH_RANDOM +if (cpacf_query_func (CPACF_PRNO ,CPACF_PRNO_TRNG )) +static_branch_enable (&s390_arch_random_available); +#endif }/*
drivers/acpi/acpi_video.c +6 -7
@@ -73,6 +73,7 @@ module_param(device_id_scheme, bool, 0444);static int only_lcd =-1 ;module_param (only_lcd, int,0444 ); +static bool has_backlight;static int register_count;static DEFINE_MUTEX (register_count_mutex);static DEFINE_MUTEX (video_list_lock);
@@ -1222,6 +1223,9 @@ acpi_video_bus_get_one_device(struct acpi_device *device,acpi_video_device_bind (video, data);acpi_video_device_find_cap (data); +if (data->cap._BCM && data->cap._BCL) + has_backlight = true; +mutex_lock (&video->device_list_lock);list_add_tail (&data->entry, &video->video_device_list);mutex_unlock (&video->device_list_lock);
@@ -2250,6 +2254,7 @@ void acpi_video_unregister(void)if (register_count) {acpi_bus_unregister_driver (&acpi_video_bus); register_count =0 ; + has_backlight = false; }mutex_unlock (®ister_count_mutex); }
@@ -2271,13 +2276,7 @@ void acpi_video_unregister_backlight(void)bool acpi_video_handles_brightness_key_presses (void ) { -bool have_video_busses; - -mutex_lock (&video_list_lock); - have_video_busses = !list_empty (&video_bus_head); -mutex_unlock (&video_list_lock); - -return have_video_busses && +return has_backlight && (report_key_events &REPORT_BRIGHTNESS_KEY_EVENTS ); }EXPORT_SYMBOL (acpi_video_handles_brightness_key_presses);
drivers/block/xen-blkfront.c +38 -18
174 lines not on this page · raw message
drivers/cpufreq/amd-pstate.c +24 -0
@@ -566,6 +566,28 @@ static int amd_pstate_cpu_exit(struct cpufreq_policy *policy)return 0 ; } +static int amd_pstate_cpu_resume (struct cpufreq_policy *policy) +{ +int ret; + + ret =amd_pstate_enable (true); +if (ret) +pr_err ("failed to enable amd-pstate during resume, return %d\n" , ret); + +return ret; +} + +static int amd_pstate_cpu_suspend (struct cpufreq_policy *policy) +{ +int ret; + + ret =amd_pstate_enable (false); +if (ret) +pr_err ("failed to disable amd-pstate during suspend, return %d\n" , ret); + +return ret; +} +/* Sysfs attributes */ /*
@@ -636,6 +658,8 @@ static struct cpufreq_driver amd_pstate_driver = { .target = amd_pstate_target, .init = amd_pstate_cpu_init, .exit = amd_pstate_cpu_exit, + .suspend = amd_pstate_cpu_suspend, + .resume = amd_pstate_cpu_resume, .set_boost = amd_pstate_set_boost, .name = "amd-pstate", .attr = amd_pstate_attr,
drivers/cpufreq/qcom-cpufreq-hw.c +6 -0
@@ -442,6 +442,9 @@ static int qcom_cpufreq_hw_cpu_online(struct cpufreq_policy *policy)struct platform_device *pdev =cpufreq_get_driver_data ();int ret; +if (data->throttle_irq <=0 ) +return 0 ; + ret =irq_set_affinity_hint (data->throttle_irq, policy->cpus);if (ret) dev_err(&pdev->dev, "Failed to set CPU affinity of %s[%d]\n",
@@ -469,6 +472,9 @@ static int qcom_cpufreq_hw_cpu_offline(struct cpufreq_policy *policy)static void qcom_cpufreq_hw_lmh_exit (struct qcom_cpufreq_data *data) { +if (data->throttle_irq <=0 ) +return ; +free_irq (data->throttle_irq, data); }
drivers/cpufreq/qoriq-cpufreq.c +1 -0
@@ -275,6 +275,7 @@ static int qoriq_cpufreq_probe(struct platform_device *pdev) np =of_find_matching_node (NULL , qoriq_cpufreq_blacklist);if (np) { +of_node_put (np);dev_info (&pdev->dev,"Disabling due to erratum A-008083" );return -ENODEV ; }
drivers/devfreq/event/exynos-ppmu.c +6 -2
@@ -519,15 +519,19 @@ static int of_get_devfreq_events(struct device_node *np, count =of_get_child_count (events_np); desc =devm_kcalloc (dev, count,sizeof (*desc),GFP_KERNEL ); -if (!desc) +if (!desc) { +of_node_put (events_np);return -ENOMEM ; + } info->num_events = count; of_id =of_match_device (exynos_ppmu_id_match, dev);if (of_id) info->ppmu_type = (enum exynos_ppmu_type )of_id->data; -else +else { +of_node_put (events_np);return -EINVAL ; + } j =0 ;for_each_child_of_node (events_np, node) {
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +2 -1
@@ -703,7 +703,8 @@ int amdgpu_amdkfd_flush_gpu_tlb_pasid(struct amdgpu_device *adev, {bool all_hub = false; -if (adev->family ==AMDGPU_FAMILY_AI ) +if (adev->family ==AMDGPU_FAMILY_AI || + adev->family ==AMDGPU_FAMILY_RV ) all_hub = true;return amdgpu_gmc_flush_gpu_tlb_pasid (adev, pasid, flush_type, all_hub);
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +1 -1
@@ -5140,7 +5140,7 @@ int amdgpu_device_gpu_recover_imp(struct amdgpu_device *adev,*/ amdgpu_unregister_gpu_instance (tmp_adev); -drm_fb_helper_set_suspend_unlocked (adev_to_drm (adev)->fb_helper, true); +drm_fb_helper_set_suspend_unlocked (adev_to_drm (tmp_adev)->fb_helper, true);/* disable ras on ALL IPs */ if (!need_emergency_restart &&
drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c +1 -0
@@ -333,6 +333,7 @@ int amdgpu_irq_init(struct amdgpu_device *adev)if (!amdgpu_device_has_dc_support (adev)) {if (!adev->enable_virtual_display)/* Disable vblank IRQs aggressively for power-saving */ +/* XXX: can this be enabled for DC? */ adev_to_drm (adev)->vblank_disable_immediate = true; r =drm_vblank_init (adev_to_drm (adev), adev->mode_info.num_crtc);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +0 -3
@@ -4286,9 +4286,6 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev) }#endif -/* Disable vblank IRQs aggressively for power-saving. */ -adev_to_drm (adev)->vblank_disable_immediate = true; -/* loops over all connectors on the board */ for (i =0 ; i < link_cnt; i++) {struct dc_link *link =NULL ;
drivers/gpu/drm/i915/gem/i915_gem_context.c +3 -2
@@ -932,8 +932,9 @@ static int set_proto_ctx_param(struct drm_i915_file_private *fpriv,case I915_CONTEXT_PARAM_PERSISTENCE :if (args->size) ret = -EINVAL ; - ret =proto_context_set_persistence (fpriv->dev_priv, pc, - args->value); +else + ret =proto_context_set_persistence (fpriv->dev_priv, pc, + args->value);break ;case I915_CONTEXT_PARAM_PROTECTED_CONTENT :
drivers/gpu/drm/i915/i915_driver.c +15 -19
@@ -538,6 +538,7 @@ static int i915_set_dma_info(struct drm_i915_private *i915)static int i915_driver_hw_probe (struct drm_i915_private *dev_priv) {struct pci_dev *pdev =to_pci_dev (dev_priv->drm.dev); +struct pci_dev *root_pdev;int ret;if (i915_inject_probe_failure (dev_priv))
@@ -651,6 +652,15 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)intel_bw_init_hw (dev_priv); +/* +* FIXME: Temporary hammer to avoid freezing the machine on our DGFX +* This should be totally removed when we handle the pci states properly +* on runtime PM and on s2idle cases. +*/ + root_pdev =pcie_find_root_port (pdev); +if (root_pdev) +pci_d3cold_disable (root_pdev); +return 0 ; err_msi:
@@ -674,11 +684,16 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)static void i915_driver_hw_remove (struct drm_i915_private *dev_priv) {struct pci_dev *pdev =to_pci_dev (dev_priv->drm.dev); +struct pci_dev *root_pdev;i915_perf_fini (dev_priv);if (pdev->msi_enabled)pci_disable_msi (pdev); + + root_pdev =pcie_find_root_port (pdev); +if (root_pdev) +pci_d3cold_enable (root_pdev); }/**
@@ -1195,14 +1210,6 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation) goto out; } -/* -* FIXME: Temporary hammer to avoid freezing the machine on our DGFX -* This should be totally removed when we handle the pci states properly -* on runtime PM and on s2idle cases. -*/ -if (suspend_to_idle (dev_priv)) -pci_d3cold_disable (pdev); -pci_disable_device (pdev);/* * During hibernation on some platforms the BIOS may try to access
@@ -1367,8 +1374,6 @@ static int i915_drm_resume_early(struct drm_device *dev)pci_set_master (pdev); -pci_d3cold_enable (pdev); -disable_rpm_wakeref_asserts (&dev_priv->runtime_pm); ret =vlv_resume_prepare (dev_priv, false);
@@ -1545,7 +1550,6 @@ static int intel_runtime_suspend(struct device *kdev) {struct drm_i915_private *dev_priv =kdev_to_i915 (kdev);struct intel_runtime_pm *rpm = &dev_priv->runtime_pm; -struct pci_dev *pdev =to_pci_dev (dev_priv->drm.dev);int ret;if (drm_WARN_ON_ONCE (&dev_priv->drm, !HAS_RUNTIME_PM (dev_priv)))
@@ -1591,12 +1595,6 @@ static int intel_runtime_suspend(struct device *kdev)drm_err (&dev_priv->drm,"Unclaimed access detected prior to suspending\n" ); -/* -* FIXME: Temporary hammer to avoid freezing the machine on our DGFX -* This should be totally removed when we handle the pci states properly -* on runtime PM and on s2idle cases. -*/ -pci_d3cold_disable (pdev); rpm->suspended = true;/*
@@ -1635,7 +1633,6 @@ static int intel_runtime_resume(struct device *kdev) {struct drm_i915_private *dev_priv =kdev_to_i915 (kdev);struct intel_runtime_pm *rpm = &dev_priv->runtime_pm; -struct pci_dev *pdev =to_pci_dev (dev_priv->drm.dev);int ret;if (drm_WARN_ON_ONCE (&dev_priv->drm, !HAS_RUNTIME_PM (dev_priv)))
@@ -1648,7 +1645,6 @@ static int intel_runtime_resume(struct device *kdev)intel_opregion_notify_adapter (dev_priv,PCI_D0 ); rpm->suspended = false; -pci_d3cold_enable (pdev);if (intel_uncore_unclaimed_mmio (&dev_priv->uncore))drm_dbg (&dev_priv->drm,"Unclaimed access during suspend, bios?\n" );
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +2 -1
@@ -1187,12 +1187,13 @@ static void dpu_encoder_vblank_callback(struct drm_encoder *drm_enc,DPU_ATRACE_BEGIN ("encoder_vblank_callback" ); dpu_enc =to_dpu_encoder_virt (drm_enc); +atomic_inc (&phy_enc->vsync_cnt); +spin_lock_irqsave (&dpu_enc->enc_spinlock, lock_flags);if (dpu_enc->crtc)dpu_crtc_vblank_callback (dpu_enc->crtc);spin_unlock_irqrestore (&dpu_enc->enc_spinlock, lock_flags); -atomic_inc (&phy_enc->vsync_cnt);DPU_ATRACE_END ("encoder_vblank_callback" ); }
drivers/gpu/drm/msm/msm_gem_submit.c +1 -1
@@ -913,7 +913,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, INT_MAX, GFP_KERNEL); }if (submit->fence_id <0 ) { - ret = submit->fence_id =0 ; + ret = submit->fence_id; submit->fence_id =0 ; }
drivers/hwmon/ibmaem.c +8 -4
@@ -550,7 +550,7 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle) res =platform_device_add (data->pdev);if (res) - goto ipmi_err; + goto dev_add_err;platform_set_drvdata (data->pdev, data);
@@ -598,7 +598,9 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)ipmi_destroy_user (data->ipmi.user); ipmi_err:platform_set_drvdata (data->pdev,NULL ); -platform_device_unregister (data->pdev); +platform_device_del (data->pdev); +dev_add_err: +platform_device_put (data->pdev); dev_err:ida_simple_remove (&aem_ida, data->id); id_err:
@@ -690,7 +692,7 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe, res =platform_device_add (data->pdev);if (res) - goto ipmi_err; + goto dev_add_err;platform_set_drvdata (data->pdev, data);
@@ -738,7 +740,9 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,ipmi_destroy_user (data->ipmi.user); ipmi_err:platform_set_drvdata (data->pdev,NULL ); -platform_device_unregister (data->pdev); +platform_device_del (data->pdev); +dev_add_err: +platform_device_put (data->pdev); dev_err:ida_simple_remove (&aem_ida, data->id); id_err:
drivers/hwmon/occ/common.c +3 -2
@@ -145,7 +145,7 @@ static int occ_poll(struct occ *occ) cmd[6 ] =0 ;/* checksum lsb */ /* mutex should already be locked if necessary */ - rc = occ->send_cmd (occ, cmd,sizeof (cmd)); + rc = occ->send_cmd (occ, cmd,sizeof (cmd), &occ->resp,sizeof (occ->resp));if (rc) { occ->last_error = rc;if (occ->error_count++ >OCC_ERROR_COUNT_THRESHOLD )
@@ -182,6 +182,7 @@ static int occ_set_user_power_cap(struct occ *occ, u16 user_power_cap) {int rc;u8 cmd[8 ]; +u8 resp[8 ];__be16 user_power_cap_be =cpu_to_be16 (user_power_cap); cmd[0 ] =0 ;/* sequence number */
@@ -198,7 +199,7 @@ static int occ_set_user_power_cap(struct occ *occ, u16 user_power_cap)if (rc)return rc; - rc = occ->send_cmd (occ, cmd,sizeof (cmd)); + rc = occ->send_cmd (occ, cmd,sizeof (cmd), resp,sizeof (resp));mutex_unlock (&occ->lock);
drivers/hwmon/occ/common.h +2 -1
@@ -96,7 +96,8 @@ struct occ {int powr_sample_time_us;/* average power sample time */ u8 poll_cmd_data;/* to perform OCC poll command */ -int (*send_cmd)(struct occ *occ,u8 *cmd,size_t len); +int (*send_cmd)(struct occ *occ,u8 *cmd,size_t len,void *resp, +size_t resp_len);unsigned long next_update;struct mutex lock;/* lock OCC access */
drivers/hwmon/occ/p8_i2c.c +7 -6
@@ -111,7 +111,8 @@ static int p8_i2c_occ_putscom_be(struct i2c_client *client, u32 address, be32_to_cpu(data1)); } -static int p8_i2c_occ_send_cmd (struct occ *occ,u8 *cmd,size_t len) +static int p8_i2c_occ_send_cmd (struct occ *occ,u8 *cmd,size_t len, +void *resp,size_t resp_len) {int i, rc;unsigned long start;
@@ -120,7 +121,7 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)const long wait_time =msecs_to_jiffies (OCC_CMD_IN_PRG_WAIT_MS );struct p8_i2c_occ *ctx =to_p8_i2c_occ (occ);struct i2c_client *client = ctx->client; -struct occ_response *resp = &occ->resp; +struct occ_response *or = (struct occ_response *)resp; start = jiffies;
@@ -151,7 +152,7 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)return rc;/* wait for OCC */ -if (resp->return_status ==OCC_RESP_CMD_IN_PRG ) { +if (or->return_status ==OCC_RESP_CMD_IN_PRG ) { rc = -EALREADY ;if (time_after (jiffies, start + timeout))
@@ -163,7 +164,7 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len) }while (rc);/* check the OCC response */ -switch (resp->return_status) { +switch (or->return_status) {case OCC_RESP_CMD_IN_PRG : rc = -ETIMEDOUT ;break ;
@@ -192,8 +193,8 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)if (rc <0 )return rc; - data_length =get_unaligned_be16 (&resp->data_length); -if (data_length >OCC_RESP_DATA_BYTES ) + data_length =get_unaligned_be16 (&or->data_length); +if ((data_length +7 ) > resp_len)return -EMSGSIZE ;/* fetch the rest of the response data */
drivers/hwmon/occ/p9_sbe.c +3 -4
@@ -78,11 +78,10 @@ static bool p9_sbe_occ_save_ffdc(struct p9_sbe_occ *ctx, const void *resp,return notify; } -static int p9_sbe_occ_send_cmd (struct occ *occ,u8 *cmd,size_t len) +static int p9_sbe_occ_send_cmd (struct occ *occ,u8 *cmd,size_t len, +void *resp,size_t resp_len) { -struct occ_response *resp = &occ->resp;struct p9_sbe_occ *ctx =to_p9_sbe_occ (occ); -size_t resp_len =sizeof (*resp);int rc; rc =fsi_occ_submit (ctx->sbe, cmd, len, resp, &resp_len);
@@ -96,7 +95,7 @@ static int p9_sbe_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)return rc; } -switch (resp->return_status) { +switch (((struct occ_response *)resp)->return_status) {case OCC_RESP_CMD_IN_PRG : rc = -ETIMEDOUT ;break ;
drivers/infiniband/core/cm.c +3 -1
@@ -1252,8 +1252,10 @@ struct ib_cm_id *ib_cm_insert_listen(struct ib_device *device,return ERR_CAST (cm_id_priv); err =cm_init_listen (cm_id_priv, service_id,0 ); -if (err) +if (err) { +ib_destroy_cm_id (&cm_id_priv->id);return ERR_PTR (err); + }spin_lock_irq (&cm_id_priv->lock); listen_id_priv =cm_insert_listen (cm_id_priv, cm_handler);
drivers/infiniband/hw/qedr/qedr.h +1 -0
@@ -418,6 +418,7 @@ struct qedr_qp {u32 sq_psn;u32 qkey;u32 dest_qp_num; +u8 timeout;/* Relevant to qps created from kernel space only (ULPs) */ u8 prev_wqe_size;
drivers/infiniband/hw/qedr/verbs.c +3 -1
@@ -2612,6 +2612,8 @@ int qedr_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,1 <<max_t (int, attr->timeout -8 ,0 ); else qp_params.ack_timeout = 0; + + qp->timeout = attr->timeout; }if (attr_mask &IB_QP_RETRY_CNT ) {
@@ -2771,7 +2773,7 @@ int qedr_query_qp(struct ib_qp *ibqp,rdma_ah_set_dgid_raw (&qp_attr->ah_attr, ¶ms.dgid.bytes[0 ]);rdma_ah_set_port_num (&qp_attr->ah_attr,1 );rdma_ah_set_sl (&qp_attr->ah_attr,0 ); - qp_attr->timeout = params.timeout; + qp_attr->timeout = qp->timeout; qp_attr->rnr_retry = params.rnr_retry; qp_attr->retry_cnt = params.retry_cnt; qp_attr->min_rnr_timer = params.min_rnr_nak_timer;
drivers/md/dm-raid.c +18 -16
@@ -1001,12 +1001,13 @@ static int validate_region_size(struct raid_set *rs, unsigned long region_size)static int validate_raid_redundancy (struct raid_set *rs) {unsigned int i, rebuild_cnt =0 ; -unsigned int rebuilds_per_group =0 , copies; +unsigned int rebuilds_per_group =0 , copies, raid_disks;unsigned int group_size, last_group_start; -for (i =0 ; i < rs->md.raid_disks; i++) -if (!test_bit (In_sync, &rs->dev[i].rdev.flags) || - !rs->dev[i].rdev.sb_page) +for (i =0 ; i < rs->raid_disks; i++) +if (!test_bit (FirstUse, &rs->dev[i].rdev.flags) && + ((!test_bit (In_sync, &rs->dev[i].rdev.flags) || + !rs->dev[i].rdev.sb_page))) rebuild_cnt++;switch (rs->md.level) {
@@ -1046,8 +1047,9 @@ static int validate_raid_redundancy(struct raid_set *rs)* A A B B C * C D D E E */ + raid_disks =min (rs->raid_disks, rs->md.raid_disks);if (__is_raid10_near (rs->md.new_layout)) { -for (i =0 ; i < rs->md.raid_disks; i++) { +for (i =0 ; i < raid_disks; i++) {if (!(i % copies)) rebuilds_per_group =0 ; if ((!rs->dev[i].rdev.sb_page ||
@@ -1070,10 +1072,10 @@ static int validate_raid_redundancy(struct raid_set *rs)* results in the need to treat the last (potentially larger) * set differently. */ - group_size = (rs->md.raid_disks / copies); - last_group_start = (rs->md.raid_disks / group_size) -1 ; + group_size = (raid_disks / copies); + last_group_start = (raid_disks / group_size) -1 ; last_group_start *= group_size; -for (i =0 ; i < rs->md.raid_disks; i++) { +for (i =0 ; i < raid_disks; i++) {if (!(i % copies) && !(i > last_group_start)) rebuilds_per_group =0 ; if ((!rs->dev[i].rdev.sb_page ||
@@ -1588,7 +1590,7 @@ static sector_t __rdev_sectors(struct raid_set *rs) {int i; -for (i =0 ; i < rs->md.raid_disks; i++) { +for (i =0 ; i < rs->raid_disks; i++) {struct md_rdev *rdev = &rs->dev[i].rdev; if (!test_bit(Journal, &rdev->flags) &&
@@ -3771,13 +3773,13 @@ static int raid_iterate_devices(struct dm_target *ti,unsigned int i;int r =0 ; -for (i =0 ; !r && i < rs->md.raid_disks; i++) -if (rs->dev[i].data_dev) - r =fn (ti, - rs->dev[i].data_dev, -0 ,/* No offset on data devs */ - rs->md.dev_sectors, - data); +for (i =0 ; !r && i < rs->raid_disks; i++) { +if (rs->dev[i].data_dev) { + r =fn (ti, rs->dev[i].data_dev, +0 ,/* No offset on data devs */ + rs->md.dev_sectors, data); + } + }return r; }
drivers/md/raid5.c +1 -0
@@ -8023,6 +8023,7 @@ static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev)*/ if (rdev->saved_raid_disk >=0 && rdev->saved_raid_disk >= first && + rdev->saved_raid_disk <= last && conf->disks[rdev->saved_raid_disk].rdev ==NULL ) first = rdev->saved_raid_disk;
drivers/net/bonding/bond_3ad.c +2 -1
@@ -2228,7 +2228,8 @@ void bond_3ad_unbind_slave(struct slave *slave) temp_aggregator->num_of_ports--;if (__agg_active_ports (temp_aggregator) ==0 ) { select_new_active_agg = temp_aggregator->is_active; -ad_clear_agg (temp_aggregator); +if (temp_aggregator->num_of_ports ==0 ) +ad_clear_agg (temp_aggregator);if (select_new_active_agg) {slave_info (bond->dev, slave->dev,"Removing an active aggregator\n" );/* select new active aggregator */
drivers/net/bonding/bond_alb.c +1 -1
@@ -1302,12 +1302,12 @@ int bond_alb_initialize(struct bonding *bond, int rlb_enabled)return res;if (rlb_enabled) { - bond->alb_info.rlb_enabled =1 ; res =rlb_initialize (bond);if (res) {tlb_deinitialize (bond);return res; } + bond->alb_info.rlb_enabled =1 ; }else { bond->alb_info.rlb_enabled =0 ; }
drivers/net/caif/caif_virtio.c +9 -1
@@ -721,13 +721,21 @@ static int cfv_probe(struct virtio_device *vdev)/* Carrier is off until netdevice is opened */ netif_carrier_off (netdev); +/* serialize netdev register + virtio_device_ready() with ndo_open() */ +rtnl_lock (); +/* register Netdev */ - err =register_netdev (netdev); + err =register_netdevice (netdev);if (err) { +rtnl_unlock ();dev_err (&vdev->dev,"Unable to register netdev (%d)\n" , err); goto err; } +virtio_device_ready (vdev); + +rtnl_unlock (); +debugfs_init (cfv);return 0 ;
drivers/net/dsa/bcm_sf2.c +5 -0
@@ -878,6 +878,11 @@ static void bcm_sf2_sw_mac_link_up(struct dsa_switch *ds, int port,if (duplex ==DUPLEX_FULL ) reg |=DUPLX_MODE ; +if (tx_pause) + reg |=TXFLOW_CNTL ; +if (rx_pause) + reg |=RXFLOW_CNTL ; +core_writel (priv, reg, offset); }
drivers/net/dsa/hirschmann/hellcreek_ptp.c +1 -0
@@ -300,6 +300,7 @@ static int hellcreek_led_setup(struct hellcreek *hellcreek)const char *label, *state;int ret = -EINVAL ; +of_node_get (hellcreek->dev->of_node); leds =of_find_node_by_name (hellcreek->dev->of_node,"leds" );if (!leds) {dev_err (hellcreek->dev,"No LEDs specified in device tree!\n" );
drivers/net/dsa/ocelot/felix_vsc9959.c +4 -0
@@ -1883,6 +1883,8 @@ static void vsc9959_psfp_sgi_table_del(struct ocelot *ocelot,static void vsc9959_psfp_counters_get (struct ocelot *ocelot,u32 index,struct felix_stream_filter_counters *counters) { +mutex_lock (&ocelot->stats_lock); +ocelot_rmw (ocelot,SYS_STAT_CFG_STAT_VIEW (index),SYS_STAT_CFG_STAT_VIEW_M ,SYS_STAT_CFG );
@@ -1897,6 +1899,8 @@ static void vsc9959_psfp_counters_get(struct ocelot *ocelot, u32 index,SYS_STAT_CFG_STAT_VIEW (index) |SYS_STAT_CFG_STAT_CLEAR_SHOT (0x10 ), SYS_STAT_CFG); + +mutex_unlock (&ocelot->stats_lock); } static int vsc9959_psfp_filter_add(struct ocelot *ocelot, int port,
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +13 -1
@@ -4418,6 +4418,8 @@ static int mlxsw_sp_nexthop4_init(struct mlxsw_sp *mlxsw_sp,return 0 ; err_nexthop_neigh_init: +list_del (&nh->router_list_node); +mlxsw_sp_nexthop_counter_free (mlxsw_sp, nh);mlxsw_sp_nexthop_remove (mlxsw_sp, nh);return err; }
@@ -6743,6 +6745,7 @@ static int mlxsw_sp_nexthop6_init(struct mlxsw_sp *mlxsw_sp, const struct fib6_info *rt) {struct net_device *dev = rt->fib6_nh->fib_nh_dev; +int err; nh->nhgi = nh_grp->nhgi; nh->nh_weight = rt->fib6_nh->fib_nh_weight;
@@ -6758,7 +6761,16 @@ static int mlxsw_sp_nexthop6_init(struct mlxsw_sp *mlxsw_sp,return 0 ; nh->ifindex = dev->ifindex; -return mlxsw_sp_nexthop_type_init (mlxsw_sp, nh, dev); + err =mlxsw_sp_nexthop_type_init (mlxsw_sp, nh, dev); +if (err) + goto err_nexthop_type_init; + +return 0 ; + +err_nexthop_type_init: +list_del (&nh->router_list_node); +mlxsw_sp_nexthop_counter_free (mlxsw_sp, nh); +return err; } static void mlxsw_sp_nexthop6_fini(struct mlxsw_sp *mlxsw_sp,
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c +18 -0
@@ -396,6 +396,14 @@ static int sparx5_handle_port_mdb_add(struct net_device *dev,u32 mact_entry;int res, err; +if (!sparx5_netdevice_check (dev)) +return -EOPNOTSUPP ; + +if (netif_is_bridge_master (v->obj.orig_dev)) { +sparx5_mact_learn (spx5,PGID_CPU , v->addr, v->vid); +return 0 ; + } +/* When VLAN unaware the vlan value is not parsed and we receive vid 0. * Fall back to bridge vid 1. */
@@ -461,6 +469,14 @@ static int sparx5_handle_port_mdb_del(struct net_device *dev,u32 mact_entry, res, pgid_entry[3 ];int err; +if (!sparx5_netdevice_check (dev)) +return -EOPNOTSUPP ; + +if (netif_is_bridge_master (v->obj.orig_dev)) { +sparx5_mact_forget (spx5, v->addr, v->vid); +return 0 ; + } +if (!br_vlan_enabled (spx5->hw_bridge_dev)) vid =1 ;else
@@ -500,6 +516,7 @@ static int sparx5_handle_port_obj_add(struct net_device *dev, SWITCHDEV_OBJ_PORT_VLAN(obj));break ;case SWITCHDEV_OBJ_ID_PORT_MDB : +case SWITCHDEV_OBJ_ID_HOST_MDB : err =sparx5_handle_port_mdb_add (dev, nb,SWITCHDEV_OBJ_PORT_MDB (obj));break ;
@@ -552,6 +569,7 @@ static int sparx5_handle_port_obj_del(struct net_device *dev, SWITCHDEV_OBJ_PORT_VLAN(obj)->vid);break ;case SWITCHDEV_OBJ_ID_PORT_MDB : +case SWITCHDEV_OBJ_ID_HOST_MDB : err =sparx5_handle_port_mdb_del (dev, nb,SWITCHDEV_OBJ_PORT_MDB (obj));break ;
drivers/net/ethernet/smsc/epic100.c +2 -2
@@ -1515,14 +1515,14 @@ static void epic_remove_one(struct pci_dev *pdev)struct net_device *dev =pci_get_drvdata (pdev);struct epic_private *ep =netdev_priv (dev); +unregister_netdev (dev);dma_free_coherent (&pdev->dev,TX_TOTAL_SIZE , ep->tx_ring, ep->tx_ring_dma);dma_free_coherent (&pdev->dev,RX_TOTAL_SIZE , ep->rx_ring, ep->rx_ring_dma); -unregister_netdev (dev);pci_iounmap (pdev, ep->ioaddr); -pci_release_regions (pdev);free_netdev (dev); +pci_release_regions (pdev);pci_disable_device (pdev);/* pci_power_off(pdev, -1); */ }
drivers/net/phy/ax88796b.c +4 -2
@@ -88,8 +88,10 @@ static void asix_ax88772a_link_change_notify(struct phy_device *phydev)/* Reset PHY, otherwise MII_LPA will provide outdated information. * This issue is reproducible only with some link partner PHYs */ -if (phydev->state ==PHY_NOLINK && phydev->drv->soft_reset) - phydev->drv->soft_reset (phydev); +if (phydev->state ==PHY_NOLINK ) { +phy_init_hw (phydev); +phy_start_aneg (phydev); + } }static struct phy_driver asix_driver[] = {
drivers/net/phy/dp83822.c +1 -3
@@ -228,9 +228,7 @@ static int dp83822_config_intr(struct phy_device *phydev)if (misr_status <0 )return misr_status; - misr_status |= (DP83822_RX_ERR_HF_INT_EN | -DP83822_FALSE_CARRIER_HF_INT_EN | -DP83822_LINK_STAT_INT_EN | + misr_status |= (DP83822_LINK_STAT_INT_EN |DP83822_ENERGY_DET_INT_EN |DP83822_LINK_QUAL_INT_EN );
drivers/net/phy/phy.c +23 -0
@@ -31,6 +31,7 @@#include <linux/io.h> #include <linux/uaccess.h> #include <linux/atomic.h> +#include <linux/suspend.h> #include <net/netlink.h> #include <net/genetlink.h> #include <net/sock.h>
@@ -972,6 +973,28 @@ static irqreturn_t phy_interrupt(int irq, void *phy_dat)struct phy_driver *drv = phydev->drv;irqreturn_t ret; +/* Wakeup interrupts may occur during a system sleep transition. +* Postpone handling until the PHY has resumed. +*/ +if (IS_ENABLED (CONFIG_PM_SLEEP ) && phydev->irq_suspended) { +struct net_device *netdev = phydev->attached_dev; + +if (netdev) { +struct device *parent = netdev->dev.parent; + +if (netdev->wol_enabled) +pm_system_wakeup (); +else if (device_may_wakeup (&netdev->dev)) +pm_wakeup_dev_event (&netdev->dev,0 , true); +else if (parent &&device_may_wakeup (parent)) +pm_wakeup_dev_event (parent,0 , true); + } + + phydev->irq_rerun =1 ; +disable_irq_nosync (irq); +return IRQ_HANDLED ; + } +mutex_lock (&phydev->lock); ret = drv->handle_interrupt (phydev);mutex_unlock (&phydev->lock);
drivers/net/phy/phy_device.c +23 -0
@@ -277,6 +277,15 @@ static __maybe_unused int mdio_bus_phy_suspend(struct device *dev)if (phydev->mac_managed_pm)return 0 ; +/* Wakeup interrupts may occur during the system sleep transition when +* the PHY is inaccessible. Set flag to postpone handling until the PHY +* has resumed. Wait for concurrent interrupt handler to complete. +*/ +if (phy_interrupt_is_valid (phydev)) { + phydev->irq_suspended =1 ; +synchronize_irq (phydev->irq); + } +/* We must stop the state machine manually, otherwise it stops out of * control, possibly with the phydev->lock held. Upon resume, netdev * may call phy routines that try to grab the same lock, and that may
@@ -314,6 +323,20 @@ static __maybe_unused int mdio_bus_phy_resume(struct device *dev)if (ret <0 )return ret; no_resume: +if (phy_interrupt_is_valid (phydev)) { + phydev->irq_suspended =0 ; +synchronize_irq (phydev->irq); + +/* Rerun interrupts which were postponed by phy_interrupt() +* because they occurred during the system sleep transition. +*/ +if (phydev->irq_rerun) { + phydev->irq_rerun =0 ; +enable_irq (phydev->irq); +irq_wake_thread (phydev->irq, phydev); + } + } +if (phydev->attached_dev && phydev->adjust_link)phy_start_machine (phydev);
drivers/net/tun.c +13 -2
@@ -274,6 +274,12 @@ static void tun_napi_init(struct tun_struct *tun, struct tun_file *tfile, } } +static void tun_napi_enable (struct tun_file *tfile) +{ +if (tfile->napi_enabled) +napi_enable (&tfile->napi); +} +static void tun_napi_disable (struct tun_file *tfile) {if (tfile->napi_enabled)
@@ -635,7 +641,8 @@ static void __tun_detach(struct tun_file *tfile, bool clean) tun =rtnl_dereference (tfile->tun);if (tun && clean) { -tun_napi_disable (tfile); +if (!tfile->detached) +tun_napi_disable (tfile);tun_napi_del (tfile); }
@@ -654,8 +661,10 @@ static void __tun_detach(struct tun_file *tfile, bool clean)if (clean) {RCU_INIT_POINTER (tfile->tun,NULL );sock_put (&tfile->sk); - }else + }else {tun_disable_queue (tun, tfile); +tun_napi_disable (tfile); + }synchronize_net ();tun_flow_delete_by_queue (tun, tun->numqueues +1 );
@@ -728,6 +737,7 @@ static void tun_detach_all(struct net_device *dev)sock_put (&tfile->sk); }list_for_each_entry_safe (tfile, tmp, &tun->disabled, next) { +tun_napi_del (tfile);tun_enable_queue (tfile);tun_queue_purge (tfile);xdp_rxq_info_unreg (&tfile->xdp_rxq);
@@ -808,6 +818,7 @@ static int tun_attach(struct tun_struct *tun, struct file *file,if (tfile->detached) {tun_enable_queue (tfile); +tun_napi_enable (tfile); }else {sock_hold (&tfile->sk);tun_napi_init (tun, tfile, napi, napi_frags);
drivers/net/usb/asix.h +1 -2
@@ -126,8 +126,7 @@ AX_MEDIUM_RE)#define AX88772_MEDIUM_DEFAULT \ - (AX_MEDIUM_FD | AX_MEDIUM_RFC | \ - AX_MEDIUM_TFC | AX_MEDIUM_PS | \ + (AX_MEDIUM_FD | AX_MEDIUM_PS | \ AX_MEDIUM_AC | AX_MEDIUM_RE)/* AX88772 & AX88178 RX_CTL values */
drivers/net/usb/asix_common.c +1 -0
@@ -431,6 +431,7 @@ void asix_adjust_link(struct net_device *netdev)asix_write_medium_mode (dev, mode,0 );phy_print_status (phydev); +usbnet_link_change (dev, phydev->link,0 ); }int asix_write_gpio (struct usbnet *dev,u16 value,int sleep,int in_pm)
drivers/net/usb/ax88179_178a.c +76 -25
133 lines not on this page · raw message
drivers/net/usb/usbnet.c +2 -2
@@ -2004,7 +2004,7 @@ static int __usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, cmd, reqtype, value, index, size);if (size) { - buf =kmalloc (size,GFP_KERNEL ); + buf =kmalloc (size,GFP_NOIO );if (!buf) goto out; }
@@ -2036,7 +2036,7 @@ static int __usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, cmd, reqtype, value, index, size);if (data) { - buf =kmemdup (data, size,GFP_KERNEL ); + buf =kmemdup (data, size,GFP_NOIO );if (!buf) goto out; }else {
drivers/net/virtio_net.c +7 -1
@@ -3641,14 +3641,20 @@ static int virtnet_probe(struct virtio_device *vdev)if (vi->has_rss || vi->has_rss_hash_report)virtnet_init_default_rss (vi); - err =register_netdev (dev); +/* serialize netdev register + virtio_device_ready() with ndo_open() */ +rtnl_lock (); + + err =register_netdevice (dev);if (err) {pr_debug ("virtio_net: registering device failed\n" ); +rtnl_unlock (); goto free_failover; }virtio_device_ready (vdev); +rtnl_unlock (); + err =virtnet_cpu_notif_add (vi);if (err) {pr_debug ("virtio_net: registering cpu notifier failed\n" );
drivers/net/xen-netfront.c +52 -4
106 lines not on this page · raw message
drivers/nfc/nfcmrvl/i2c.c +3 -3
@@ -167,9 +167,9 @@ static int nfcmrvl_i2c_parse_dt(struct device_node *node, pdata->irq_polarity =IRQF_TRIGGER_RISING ; ret =irq_of_parse_and_map (node,0 ); -if (ret <0 ) { -pr_err ("Unable to get irq, error: %d\n" , ret); -return ret; +if (!ret) { +pr_err ("Unable to get irq\n" ); +return -EINVAL ; } pdata->irq = ret;
drivers/nfc/nfcmrvl/spi.c +3 -3
@@ -115,9 +115,9 @@ static int nfcmrvl_spi_parse_dt(struct device_node *node, } ret =irq_of_parse_and_map (node,0 ); -if (ret <0 ) { -pr_err ("Unable to get irq, error: %d\n" , ret); -return ret; +if (!ret) { +pr_err ("Unable to get irq\n" ); +return -EINVAL ; } pdata->irq = ret;
drivers/nfc/nxp-nci/i2c.c +3 -0
@@ -162,6 +162,9 @@ static int nxp_nci_i2c_nci_read(struct nxp_nci_i2c_phy *phy,skb_put_data (*skb, (void *)&header,NCI_CTRL_HDR_SIZE ); +if (!header.plen) +return 0 ; + r =i2c_master_recv (client,skb_put (*skb, header.plen), header.plen);if (r != header.plen) { nfc_err(&client->dev,
drivers/nvdimm/bus.c +2 -2
@@ -182,8 +182,8 @@ static int nvdimm_clear_badblocks_region(struct device *dev, void *data) ndr_end = nd_region->ndr_start + nd_region->ndr_size -1 ;/* make sure we are in the region */ -if (ctx->phys < nd_region->ndr_start - || (ctx->phys + ctx->cleared) > ndr_end) +if (ctx->phys < nd_region->ndr_start || + (ctx->phys + ctx->cleared -1 ) > ndr_end)return 0 ; sector = (ctx->phys - nd_region->ndr_start) /512 ;
drivers/nvme/host/pci.c +4 -1
@@ -3436,8 +3436,11 @@ static const struct pci_device_id nvme_id_table[] = { { PCI_DEVICE(0x1b4b, 0x1092), /* Lexar 256 GB SSD */ .driver_data =NVME_QUIRK_NO_NS_DESC_LIST | NVME_QUIRK_IGNORE_DEV_SUBNQN, }, + { PCI_DEVICE(0x1cc1, 0x33f8), /* ADATA IM2P33F8ABR1 1 TB */ + .driver_data = NVME_QUIRK_BOGUS_NID, }, { PCI_DEVICE(0x10ec, 0x5762), /* ADATA SX6000LNP */ - .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, }, + .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN | + NVME_QUIRK_BOGUS_NID, }, { PCI_DEVICE(0x1cc1, 0x8201), /* ADATA SX8200PNP 512GB */ .driver_data = NVME_QUIRK_NO_DEEPEST_PS | NVME_QUIRK_IGNORE_DEV_SUBNQN, },
drivers/nvme/target/configfs.c +20 -0
@@ -773,11 +773,31 @@ static ssize_t nvmet_passthru_io_timeout_store(struct config_item *item, }CONFIGFS_ATTR (nvmet_passthru_, io_timeout); +static ssize_t nvmet_passthru_clear_ids_show (struct config_item *item, +char *page) +{ +return sprintf (page,"%u\n" ,to_subsys (item->ci_parent)->clear_ids); +} + +static ssize_t nvmet_passthru_clear_ids_store (struct config_item *item, +const char *page,size_t count) +{ +struct nvmet_subsys *subsys =to_subsys (item->ci_parent); +unsigned int clear_ids; + +if (kstrtouint (page,0 , &clear_ids)) +return -EINVAL ; + subsys->clear_ids = clear_ids; +return count; +} +CONFIGFS_ATTR (nvmet_passthru_, clear_ids); +static struct configfs_attribute *nvmet_passthru_attrs[] = { &nvmet_passthru_attr_device_path, &nvmet_passthru_attr_enable, &nvmet_passthru_attr_admin_timeout, &nvmet_passthru_attr_io_timeout, + &nvmet_passthru_attr_clear_ids,NULL , };
drivers/nvme/target/core.c +6 -0
@@ -1374,6 +1374,12 @@ u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn, ctrl->port = req->port; ctrl->ops = req->ops; +#ifdef CONFIG_NVME_TARGET_PASSTHRU +/* By default, set loop targets to clear IDS by default */ +if (ctrl->port->disc_addr.trtype ==NVMF_TRTYPE_LOOP ) + subsys->clear_ids =1 ; +#endif +INIT_WORK (&ctrl->async_event_work, nvmet_async_event_work);INIT_LIST_HEAD (&ctrl->async_events);INIT_RADIX_TREE (&ctrl->p2p_ns_map,GFP_KERNEL );
drivers/nvme/target/nvmet.h +1 -0
@@ -249,6 +249,7 @@ struct nvmet_subsys {struct config_group passthru_group;unsigned int admin_timeout;unsigned int io_timeout; +unsigned int clear_ids;#endif /* CONFIG_NVME_TARGET_PASSTHRU */ #ifdef CONFIG_BLK_DEV_ZONED
drivers/nvme/target/passthru.c +55 -0
73 lines not on this page · raw message
drivers/nvme/target/tcp.c +3 -20
@@ -405,7 +405,7 @@ static int nvmet_tcp_map_data(struct nvmet_tcp_cmd *cmd)return NVME_SC_INTERNAL ; } -static void nvmet_tcp_send_ddgst (struct ahash_request *hash, +static void nvmet_tcp_calc_ddgst (struct ahash_request *hash,struct nvmet_tcp_cmd *cmd) { ahash_request_set_crypt(hash, cmd->req.sg,
@@ -413,23 +413,6 @@ static void nvmet_tcp_send_ddgst(struct ahash_request *hash,crypto_ahash_digest (hash); } -static void nvmet_tcp_recv_ddgst (struct ahash_request *hash, -struct nvmet_tcp_cmd *cmd) -{ -struct scatterlist sg; -struct kvec *iov; -int i; - -crypto_ahash_init (hash); -for (i =0 , iov = cmd->iov; i < cmd->nr_mapped; i++, iov++) { -sg_init_one (&sg, iov->iov_base, iov->iov_len); -ahash_request_set_crypt (hash, &sg,NULL , iov->iov_len); -crypto_ahash_update (hash); - } -ahash_request_set_crypt (hash,NULL , (void *)&cmd->exp_ddgst,0 ); -crypto_ahash_final (hash); -} -static void nvmet_setup_c2h_data_pdu (struct nvmet_tcp_cmd *cmd) {struct nvme_tcp_data_pdu *pdu = cmd->data_pdu;
@@ -454,7 +437,7 @@ static void nvmet_setup_c2h_data_pdu(struct nvmet_tcp_cmd *cmd)if (queue->data_digest) { pdu->hdr.flags |=NVME_TCP_F_DDGST ; -nvmet_tcp_send_ddgst (queue->snd_hash, cmd); +nvmet_tcp_calc_ddgst (queue->snd_hash, cmd); }if (cmd->queue->hdr_digest) {
@@ -1137,7 +1120,7 @@ static void nvmet_tcp_prep_recv_ddgst(struct nvmet_tcp_cmd *cmd) {struct nvmet_tcp_queue *queue = cmd->queue; -nvmet_tcp_recv_ddgst (queue->rcv_hash, cmd); +nvmet_tcp_calc_ddgst (queue->rcv_hash, cmd); queue->offset =0 ; queue->left =NVME_TCP_DIGEST_LENGTH ; queue->rcv_state =NVMET_TCP_RECV_DDGST ;
drivers/platform/x86/Kconfig +2 -0
@@ -945,6 +945,8 @@ config PANASONIC_LAPTOP tristate "Panasonic Laptop Extras" depends on INPUT && ACPI depends on BACKLIGHT_CLASS_DEVICE + depends on ACPI_VIDEO=n || ACPI_VIDEO + depends on SERIO_I8042 || SERIO_I8042 = n select INPUT_SPARSEKMAP help This driver adds support for access to backlight control and hotkeys
drivers/platform/x86/ideapad-laptop.c +21 -8
@@ -152,6 +152,10 @@ static bool no_bt_rfkill;module_param (no_bt_rfkill, bool,0444 );MODULE_PARM_DESC (no_bt_rfkill,"No rfkill for bluetooth." ); +static bool allow_v4_dytc; +module_param (allow_v4_dytc, bool,0444 ); +MODULE_PARM_DESC (allow_v4_dytc,"Enable DYTC version 4 platform-profile support." ); +/* * ACPI Helpers */
@@ -871,12 +875,18 @@ static void dytc_profile_refresh(struct ideapad_private *priv)static const struct dmi_system_id ideapad_dytc_v4_allow_table[] = { {/* Ideapad 5 Pro 16ACH6 */ - .ident ="LENOVO 82L5" , .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ),DMI_MATCH (DMI_PRODUCT_NAME ,"82L5" ) } }, + { +/* Ideapad 5 15ITL05 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), +DMI_MATCH (DMI_PRODUCT_VERSION ,"IdeaPad 5 15ITL05" ) + } + }, {} };
@@ -901,13 +911,16 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv) dytc_version = (output >>DYTC_QUERY_REV_BIT ) &0xF ; -if (dytc_version <5 ) { -if (dytc_version <4 || !dmi_check_system (ideapad_dytc_v4_allow_table)) { -dev_info (&priv->platform_device->dev, -"DYTC_VERSION is less than 4 or is not allowed: %d\n" , - dytc_version); -return -ENODEV ; - } +if (dytc_version <4 ) { +dev_info (&priv->platform_device->dev,"DYTC_VERSION < 4 is not supported\n" ); +return -ENODEV ; + } + +if (dytc_version <5 && + !(allow_v4_dytc ||dmi_check_system (ideapad_dytc_v4_allow_table))) { +dev_info (&priv->platform_device->dev, +"DYTC_VERSION 4 support may not work. Pass ideapad_laptop.allow_v4_dytc=Y on the kernel commandline to enable\n" ); +return -ENODEV ; } priv->dytc =kzalloc (sizeof (*priv->dytc),GFP_KERNEL );
drivers/platform/x86/panasonic-laptop.c +67 -17
131 lines not on this page · raw message
drivers/platform/x86/thinkpad_acpi.c +1 -0
@@ -4529,6 +4529,7 @@ static void thinkpad_acpi_amd_s2idle_restore(void)iounmap (addr); cleanup_resource:release_resource (res); +kfree (res); }static struct acpi_s2idle_dev_ops thinkpad_acpi_s2idle_dev_ops = {
drivers/vdpa/mlx5/net/mlx5_vnet.c +2 -0
@@ -1757,6 +1757,8 @@ static void mlx5_vdpa_set_vq_cb(struct vdpa_device *vdev, u16 idx, struct vdpa_cstruct mlx5_vdpa_net *ndev =to_mlx5_vdpa_ndev (mvdev); ndev->event_cbs[idx] = *cb; +if (is_ctrl_vq_idx (mvdev, idx)) + mvdev->cvq.event_cb = *cb; }static void mlx5_cvq_notify (struct vringh *vring)
fs/ceph/caps.c +1 -0
@@ -4358,6 +4358,7 @@ static void flush_dirty_session_caps(struct ceph_mds_session *s)ihold (inode);dout ("flush_dirty_caps %llx.%llx\n" ,ceph_vinop (inode));spin_unlock (&mdsc->cap_dirty_lock); +ceph_wait_on_async_create (inode);ceph_check_caps (ci,CHECK_CAPS_FLUSH ,NULL );iput (inode);spin_lock (&mdsc->cap_dirty_lock);
fs/cifs/connect.c +2 -0
@@ -3423,7 +3423,9 @@ static int is_path_remote(struct mount_ctx *mnt_ctx)struct cifs_tcon *tcon = mnt_ctx->tcon;struct smb3_fs_context *ctx = mnt_ctx->fs_ctx;char *full_path; +#ifdef CONFIG_CIFS_DFS_UPCALL bool nodfs = cifs_sb->mnt_cifs_flags &CIFS_MOUNT_NO_DFS ; +#endif if (!server->ops->is_path_accessible)return -EOPNOTSUPP ;
fs/io_uring.c +2 -2
@@ -5254,7 +5254,7 @@ static int io_sendmsg_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)if (unlikely (req->ctx->flags &IORING_SETUP_IOPOLL ))return -EINVAL ; -if (unlikely (sqe->addr2 || sqe->file_index)) +if (unlikely (sqe->addr2 || sqe->file_index || sqe->ioprio))return -EINVAL ; sr->umsg =u64_to_user_ptr (READ_ONCE (sqe->addr));
@@ -5467,7 +5467,7 @@ static int io_recvmsg_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)if (unlikely (req->ctx->flags &IORING_SETUP_IOPOLL ))return -EINVAL ; -if (unlikely (sqe->addr2 || sqe->file_index)) +if (unlikely (sqe->addr2 || sqe->file_index || sqe->ioprio))return -EINVAL ; sr->umsg =u64_to_user_ptr (READ_ONCE (sqe->addr));
fs/ksmbd/smb2pdu.c +30 -13
70 lines not on this page · raw message
fs/ksmbd/vfs.c +9 -3
@@ -1015,7 +1015,9 @@ int ksmbd_vfs_zero_data(struct ksmbd_work *work, struct ksmbd_file *fp,FALLOC_FL_PUNCH_HOLE |FALLOC_FL_KEEP_SIZE , off, len); -return vfs_fallocate (fp->filp,FALLOC_FL_ZERO_RANGE , off, len); +return vfs_fallocate (fp->filp, +FALLOC_FL_ZERO_RANGE |FALLOC_FL_KEEP_SIZE , + off, len); } int ksmbd_vfs_fqar_lseek(struct ksmbd_file *fp, loff_t start, loff_t length,
@@ -1046,7 +1048,7 @@ int ksmbd_vfs_fqar_lseek(struct ksmbd_file *fp, loff_t start, loff_t length, *out_count =0 ; end = start + length;while (start < end && *out_count < in_count) { - extent_start = f->f_op->llseek (f, start,SEEK_DATA ); + extent_start =vfs_llseek (f, start,SEEK_DATA );if (extent_start <0 ) {if (extent_start != -ENXIO ) ret = (int )extent_start;
@@ -1056,7 +1058,7 @@ int ksmbd_vfs_fqar_lseek(struct ksmbd_file *fp, loff_t start, loff_t length,if (extent_start >= end)break ; - extent_end = f->f_op->llseek (f, extent_start,SEEK_HOLE ); + extent_end =vfs_llseek (f, extent_start,SEEK_HOLE );if (extent_end <0 ) {if (extent_end != -ENXIO ) ret = (int )extent_end;
@@ -1777,6 +1779,10 @@ int ksmbd_vfs_copy_file_ranges(struct ksmbd_work *work, ret =vfs_copy_file_range (src_fp->filp, src_off, dst_fp->filp, dst_off, len,0 ); +if (ret == -EOPNOTSUPP || ret == -EXDEV ) + ret =generic_copy_file_range (src_fp->filp, src_off, + dst_fp->filp, dst_off, + len,0 );if (ret <0 )return ret;
fs/nfs/nfs4proc.c +13 -6
@@ -4012,22 +4012,29 @@ static int _nfs4_discover_trunking(struct nfs_server *server, } page =alloc_page (GFP_KERNEL ); +if (!page) +return -ENOMEM ; locations =kmalloc (sizeof (struct nfs4_fs_locations ),GFP_KERNEL ); -if (page ==NULL || locations ==NULL ) - goto out; +if (!locations) + goto out_free; + locations->fattr =nfs_alloc_fattr (); +if (!locations->fattr) + goto out_free_2; status =nfs4_proc_get_locations (server, fhandle, locations, page, cred);if (status) - goto out; + goto out_free_3;for (i =0 ; i < locations->nlocations; i++)test_fs_location_for_trunking (&locations->locations[i], clp, server); -out: -if (page) -__free_page (page); +out_free_3: +kfree (locations->fattr); +out_free_2:kfree (locations); +out_free: +__free_page (page);return status; }
fs/nfs/nfs4state.c +1 -0
@@ -2743,5 +2743,6 @@ static int nfs4_run_state_manager(void *ptr) goto again;nfs_put_client (clp); +module_put_and_kthread_exit (0 );return 0 ; }
fs/nfsd/vfs.c +9 -2
@@ -577,6 +577,7 @@ __be32 nfsd4_clone_file_range(struct svc_rqst *rqstp,ssize_t nfsd_copy_file_range (struct file *src,u64 src_pos,struct file *dst,u64 dst_pos,u64 count) { +ssize_t ret;/* * Limit copy to 4MB to prevent indefinitely blocking an nfsd
@@ -587,7 +588,12 @@ ssize_t nfsd_copy_file_range(struct file *src, u64 src_pos, struct file *dst,* limit like this and pipeline multiple COPY requests. */ count =min_t (u64, count,1 <<22 ); -return vfs_copy_file_range (src, src_pos, dst, dst_pos, count,0 ); + ret =vfs_copy_file_range (src, src_pos, dst, dst_pos, count,0 ); + +if (ret == -EOPNOTSUPP || ret == -EXDEV ) + ret =generic_copy_file_range (src, src_pos, dst, dst_pos, + count,0 ); +return ret; } __be32 nfsd4_vfs_fallocate(struct svc_rqst *rqstp, struct svc_fh *fhp,
@@ -1170,6 +1176,7 @@ nfsd_commit(struct svc_rqst *rqstp, struct svc_fh *fhp, u64 offset,nfsd_copy_write_verifier (verf, nn); err2 =filemap_check_wb_err (nf->nf_file->f_mapping, since); + err =nfserrno (err2);break ;case -EINVAL : err = nfserr_notsupp;
@@ -1177,8 +1184,8 @@ nfsd_commit(struct svc_rqst *rqstp, struct svc_fh *fhp, u64 offset,default :nfsd_reset_write_verifier (nn);trace_nfsd_writeverf_reset (nn, rqstp, err2); + err =nfserrno (err2); } - err =nfserrno (err2); }else nfsd_copy_write_verifier (verf, nn);
fs/notify/fanotify/fanotify_user.c +19 -15
@@ -1483,8 +1483,15 @@ static int fanotify_test_fid(struct dentry *dentry)return 0 ; } -static int fanotify_events_supported (struct path *path,__u64 mask) +static int fanotify_events_supported (struct fsnotify_group *group, +struct path *path,__u64 mask, +unsigned int flags) { +unsigned int mark_type = flags &FANOTIFY_MARK_TYPE_BITS ; +/* Strict validation of events in non-dir inode mask with v5.17+ APIs */ +bool strict_dir_events =FAN_GROUP_FLAG (group,FAN_REPORT_TARGET_FID ) || + (mask &FAN_RENAME ); +/* * Some filesystems such as 'proc' acquire unusual locks when opening * files. For them fanotify permission events have high chances of
@@ -1496,6 +1503,16 @@ static int fanotify_events_supported(struct path *path, __u64 mask)if (mask &FANOTIFY_PERM_EVENTS && path->mnt->mnt_sb->s_type->fs_flags &FS_DISALLOW_NOTIFY_PERM )return -EINVAL ; + +/* +* We shouldn't have allowed setting dirent events and the directory +* flags FAN_ONDIR and FAN_EVENT_ON_CHILD in mask of non-dir inode, +* but because we always allowed it, error only when using new APIs. +*/ +if (strict_dir_events && mark_type ==FAN_MARK_INODE && + !d_is_dir (path->dentry) && (mask &FANOTIFY_DIRONLY_EVENT_BITS )) +return -ENOTDIR ; +return 0 ; }
@@ -1634,7 +1651,7 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask, goto fput_and_out;if (flags &FAN_MARK_ADD ) { - ret =fanotify_events_supported (&path, mask); + ret =fanotify_events_supported (group, &path, mask, flags);if (ret) goto path_put_and_out; }
@@ -1657,19 +1674,6 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask,else mnt = path.mnt; -/* -* FAN_RENAME is not allowed on non-dir (for now). -* We shouldn't have allowed setting any dirent events in mask of -* non-dir, but because we always allowed it, error only if group -* was initialized with the new flag FAN_REPORT_TARGET_FID. -*/ - ret = -ENOTDIR ; -if (inode && !S_ISDIR (inode->i_mode) && - ((mask &FAN_RENAME ) || - ((mask &FANOTIFY_DIRENT_EVENTS ) && -FAN_GROUP_FLAG (group,FAN_REPORT_TARGET_FID )))) - goto path_put_and_out; -/* Mask out FAN_EVENT_ON_CHILD flag for sb/mount/non-dir marks */ if (mnt || !S_ISDIR (inode->i_mode)) { mask &= ~FAN_EVENT_ON_CHILD ;
fs/read_write.c +44 -33
104 lines not on this page · raw message
include/linux/dim.h +1 -1
@@ -21,7 +21,7 @@* We consider 10% difference as significant. */ #define IS_SIGNIFICANT_DIFF (val, ref) \ - (((100UL * abs((val) - (ref))) / (ref)) > 10) + ((ref) && (((100UL * abs((val) - (ref))) / (ref)) > 10))/* * Calculate the gap between two values.
include/linux/fanotify.h +4 -0
@@ -110,6 +110,10 @@ FANOTIFY_PERM_EVENTS | \ FAN_Q_OVERFLOW | FAN_ONDIR) +/* Events and flags relevant only for directories */ +#define FANOTIFY_DIRONLY_EVENT_BITS (FANOTIFY_DIRENT_EVENTS | \ + FAN_EVENT_ON_CHILD | FAN_ONDIR) +#define ALL_FANOTIFY_EVENT_BITS (FANOTIFY_OUTGOING_EVENTS | \ FANOTIFY_EVENT_FLAGS)
include/linux/netdevice.h +1 -1
@@ -1653,7 +1653,7 @@ enum netdev_priv_flags {IFF_FAILOVER_SLAVE =1 <<28 ,IFF_L3MDEV_RX_HANDLER =1 <<29 ,IFF_LIVE_RENAME_OK =1 <<30 , -IFF_TX_SKB_NO_LINEAR =1 <<31 , +IFF_TX_SKB_NO_LINEAR =BIT_ULL (31 ), IFF_CHANGE_PROTO_DOWN = BIT_ULL(32), };
include/linux/phy.h +6 -0
@@ -571,6 +571,10 @@ struct macsec_ops;* @mdix: Current crossover * @mdix_ctrl: User setting of crossover * @interrupts: Flag interrupts have been enabled +* @irq_suspended: Flag indicating PHY is suspended and therefore interrupt +* handling shall be postponed until PHY has resumed +* @irq_rerun: Flag indicating interrupts occurred while PHY was suspended, +* requiring a rerun of the interrupt handler after resume * @interface: enum phy_interface_t value * @skb: Netlink message for cable diagnostics * @nest: Netlink nest used for cable diagnostics
@@ -625,6 +629,8 @@ struct phy_device {/* Interrupts are enabled */ unsigned interrupts:1; + unsigned irq_suspended:1; + unsigned irq_rerun:1;enum phy_state state;
include/uapi/drm/drm_fourcc.h +2 -2
@@ -1375,11 +1375,11 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier)#define AMD_FMT_MOD_PIPE_MASK 0x7#define AMD_FMT_MOD_SET (field, value) \ - ((uint64_t)(value) << AMD_FMT_MOD_##field##_SHIFT) + ((__u64)(value) << AMD_FMT_MOD_##field##_SHIFT)#define AMD_FMT_MOD_GET (field, value) \ (((value) >> AMD_FMT_MOD_##field##_SHIFT) & AMD_FMT_MOD_##field##_MASK)#define AMD_FMT_MOD_CLEAR (field) \ - (~((uint64_t)AMD_FMT_MOD_##field##_MASK << AMD_FMT_MOD_##field##_SHIFT)) + (~((__u64)AMD_FMT_MOD_##field##_MASK << AMD_FMT_MOD_##field##_SHIFT))#if defined(__cplusplus) }
include/uapi/linux/mptcp.h +5 -4
@@ -2,16 +2,17 @@#ifndef _UAPI_MPTCP_H#define _UAPI_MPTCP_H +#ifndef __KERNEL__ +#include <netinet/in.h> /* for sockaddr_in and sockaddr_in6 */ +#include <sys/socket.h> /* for struct sockaddr */ +#endif +#include <linux/const.h> #include <linux/types.h> #include <linux/in.h> /* for sockaddr_in */ #include <linux/in6.h> /* for sockaddr_in6 */ #include <linux/socket.h> /* for sockaddr_storage and sa_family */ -#ifndef __KERNEL__ -#include <sys/socket.h> /* for struct sockaddr */ -#endif -#define MPTCP_SUBFLOW_FLAG_MCAP_REM _BITUL(0)#define MPTCP_SUBFLOW_FLAG_MCAP_LOC _BITUL(1)#define MPTCP_SUBFLOW_FLAG_JOIN_REM _BITUL(2)
lib/sbitmap.c +4 -1
@@ -528,7 +528,7 @@ unsigned long __sbitmap_queue_get_batch(struct sbitmap_queue *sbq, int nr_tags,sbitmap_deferred_clear (map);if (map->word == (1UL << (map_depth -1 )) -1 ) -continue ; + goto next; nr =find_first_zero_bit (&map->word, map_depth);if (nr + nr_tags <= map_depth) {
@@ -539,6 +539,8 @@ unsigned long __sbitmap_queue_get_batch(struct sbitmap_queue *sbq, int nr_tags, get_mask = ((1UL << map_tags) -1 ) << nr;do { val =READ_ONCE (map->word); +if ((val & ~get_mask) != val) + goto next; ret =atomic_long_cmpxchg (ptr, val, get_mask | val); }while (ret != val); get_mask = (get_mask & ~ret) >> nr;
@@ -549,6 +551,7 @@ unsigned long __sbitmap_queue_get_batch(struct sbitmap_queue *sbq, int nr_tags,return get_mask; } } +next:/* Jump to next index. */ if (++index >= sb->map_nr) index =0 ;
net/ipv4/ip_tunnel_core.c +1 -1
@@ -410,7 +410,7 @@ int skb_tunnel_check_pmtu(struct sk_buff *skb, struct dst_entry *encap_dst,u32 mtu =dst_mtu (encap_dst) - headroom;if ((skb_is_gso (skb) &&skb_gso_validate_network_len (skb, mtu)) || - (!skb_is_gso (skb) && (skb->len -skb_mac_header_len (skb)) <= mtu)) + (!skb_is_gso (skb) && (skb->len -skb_network_offset (skb)) <= mtu))return 0 ;skb_dst_update_pmtu_no_confirm (skb, mtu);
net/ipv4/tcp_ipv4.c +5 -1
@@ -1965,7 +1965,10 @@ int tcp_v4_rcv(struct sk_buff *skb)struct sock *nsk; sk = req->rsk_listener; - drop_reason =tcp_inbound_md5_hash (sk, skb, +if (!xfrm4_policy_check (sk,XFRM_POLICY_IN , skb)) + drop_reason =SKB_DROP_REASON_XFRM_POLICY ; +else + drop_reason =tcp_inbound_md5_hash (sk, skb, &iph->saddr, &iph->daddr,AF_INET , dif, sdif);if (unlikely (drop_reason)) {
@@ -2017,6 +2020,7 @@ int tcp_v4_rcv(struct sk_buff *skb) } goto discard_and_relse; } +nf_reset_ct (skb);if (nsk == sk) {reqsk_put (req);tcp_v4_restore_cb (skb);
net/ipv6/addrconf.c +2 -6
@@ -1109,10 +1109,6 @@ ipv6_add_addr(struct inet6_dev *idev, struct ifa6_config *cfg, goto out; } -if (net->ipv6.devconf_all->disable_policy || - idev->cnf.disable_policy) - f6i->dst_nopolicy = true; -neigh_parms_data_state_setall (idev->nd_parms); ifa->addr = *cfg->pfx;
@@ -5174,9 +5170,9 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb, fillargs->event =RTM_GETMULTICAST ;/* multicast address */ -for (ifmca =rcu_dereference (idev->mc_list); +for (ifmca =rtnl_dereference (idev->mc_list); ifmca; - ifmca =rcu_dereference (ifmca->next), ip_idx++) { + ifmca =rtnl_dereference (ifmca->next), ip_idx++) {if (ip_idx < s_ip_idx)continue ; err =inet6_fill_ifmcaddr (skb, ifmca, fillargs);
net/ipv6/route.c +8 -1
@@ -4565,8 +4565,15 @@ struct fib6_info *addrconf_f6i_alloc(struct net *net, } f6i =ip6_route_info_create (&cfg, gfp_flags,NULL ); -if (!IS_ERR (f6i)) +if (!IS_ERR (f6i)) { f6i->dst_nocount = true; + +if (!anycast && + (net->ipv6.devconf_all->disable_policy || + idev->cnf.disable_policy)) + f6i->dst_nopolicy = true; + } +return f6i; }
net/ipv6/seg6_hmac.c +0 -1
@@ -406,7 +406,6 @@ int __net_init seg6_hmac_net_init(struct net *net)return rhashtable_init (&sdata->hmac_infos, &rht_params); } -EXPORT_SYMBOL (seg6_hmac_net_init);void seg6_hmac_exit (void ) {
net/ipv6/sit.c +3 -5
@@ -323,8 +323,6 @@ static int ipip6_tunnel_get_prl(struct net_device *dev, struct ip_tunnel_prl __u kcalloc(cmax, sizeof(*kp), GFP_KERNEL_ACCOUNT | __GFP_NOWARN) : NULL; -rcu_read_lock (); - ca =min (t->prl_count, cmax);if (!kp) {
@@ -341,7 +339,7 @@ static int ipip6_tunnel_get_prl(struct net_device *dev, struct ip_tunnel_prl __u } } - c =0 ; +rcu_read_lock ();for_each_prl_rcu (t->prl) {if (c >= cmax)break ;
@@ -353,7 +351,7 @@ static int ipip6_tunnel_get_prl(struct net_device *dev, struct ip_tunnel_prl __uif (kprl.addr !=htonl (INADDR_ANY ))break ; } -out: +rcu_read_unlock (); len =sizeof (*kp) * c;
@@ -362,7 +360,7 @@ static int ipip6_tunnel_get_prl(struct net_device *dev, struct ip_tunnel_prl __u ret = -EFAULT ;kfree (kp); - +out:return ret; }
net/mptcp/protocol.c +5 -0
@@ -2305,6 +2305,11 @@ static void __mptcp_close_ssk(struct sock *sk, struct sock *ssk,kfree_rcu (subflow, rcu); }else {/* otherwise tcp will dispose of the ssk and subflow ctx */ +if (ssk->sk_state ==TCP_LISTEN ) { +tcp_set_state (ssk,TCP_CLOSE ); +mptcp_subflow_queue_clean (ssk); +inet_csk_listen_stop (ssk); + }__tcp_close (ssk,0 );/* close acquired an extra ref */
net/mptcp/protocol.h +2 -0
@@ -286,6 +286,7 @@ struct mptcp_sock {u32 setsockopt_seq;char ca_name[TCP_CA_NAME_MAX ]; +struct mptcp_sock *dl_next; };#define mptcp_data_lock (sk) spin_lock_bh(&(sk)->sk_lock.slock)
@@ -585,6 +586,7 @@ void mptcp_close_ssk(struct sock *sk, struct sock *ssk, struct mptcp_subflow_context *subflow);void mptcp_subflow_send_ack (struct sock *ssk);void mptcp_subflow_reset (struct sock *ssk); +void mptcp_subflow_queue_clean (struct sock *ssk);void mptcp_sock_graft (struct sock *sk,struct socket *parent);struct socket *__mptcp_nmpc_socket (const struct mptcp_sock *msk);
net/mptcp/subflow.c +52 -0
58 lines not on this page · raw message
net/netfilter/nft_set_hash.c +2 -0
@@ -143,6 +143,7 @@ static bool nft_rhash_update(struct nft_set *set, const u32 *key,/* Another cpu may race to insert the element with the same key */ if (prev) {nft_set_elem_destroy (set, he, true); +atomic_dec (&set->nelems); he = prev; }
@@ -152,6 +153,7 @@ static bool nft_rhash_update(struct nft_set *set, const u32 *key, err2:nft_set_elem_destroy (set, he, true); +atomic_dec (&set->nelems); err1:return false; }
net/rose/rose_timer.c +19 -15
@@ -31,89 +31,89 @@ static void rose_idletimer_expiry(struct timer_list *);void rose_start_heartbeat (struct sock *sk) { -del_timer (&sk->sk_timer); +sk_stop_timer (sk, &sk->sk_timer); sk->sk_timer.function = rose_heartbeat_expiry; sk->sk_timer.expires = jiffies +5 *HZ ; -add_timer (&sk->sk_timer); +sk_reset_timer (sk, &sk->sk_timer, sk->sk_timer.expires); }void rose_start_t1timer (struct sock *sk) {struct rose_sock *rose =rose_sk (sk); -del_timer (&rose->timer); +sk_stop_timer (sk, &rose->timer); rose->timer.function = rose_timer_expiry; rose->timer.expires = jiffies + rose->t1; -add_timer (&rose->timer); +sk_reset_timer (sk, &rose->timer, rose->timer.expires); }void rose_start_t2timer (struct sock *sk) {struct rose_sock *rose =rose_sk (sk); -del_timer (&rose->timer); +sk_stop_timer (sk, &rose->timer); rose->timer.function = rose_timer_expiry; rose->timer.expires = jiffies + rose->t2; -add_timer (&rose->timer); +sk_reset_timer (sk, &rose->timer, rose->timer.expires); }void rose_start_t3timer (struct sock *sk) {struct rose_sock *rose =rose_sk (sk); -del_timer (&rose->timer); +sk_stop_timer (sk, &rose->timer); rose->timer.function = rose_timer_expiry; rose->timer.expires = jiffies + rose->t3; -add_timer (&rose->timer); +sk_reset_timer (sk, &rose->timer, rose->timer.expires); }void rose_start_hbtimer (struct sock *sk) {struct rose_sock *rose =rose_sk (sk); -del_timer (&rose->timer); +sk_stop_timer (sk, &rose->timer); rose->timer.function = rose_timer_expiry; rose->timer.expires = jiffies + rose->hb; -add_timer (&rose->timer); +sk_reset_timer (sk, &rose->timer, rose->timer.expires); }void rose_start_idletimer (struct sock *sk) {struct rose_sock *rose =rose_sk (sk); -del_timer (&rose->idletimer); +sk_stop_timer (sk, &rose->idletimer);if (rose->idle >0 ) { rose->idletimer.function = rose_idletimer_expiry; rose->idletimer.expires = jiffies + rose->idle; -add_timer (&rose->idletimer); +sk_reset_timer (sk, &rose->idletimer, rose->idletimer.expires); } }void rose_stop_heartbeat (struct sock *sk) { -del_timer (&sk->sk_timer); +sk_stop_timer (sk, &sk->sk_timer); }void rose_stop_timer (struct sock *sk) { -del_timer (&rose_sk (sk)->timer); +sk_stop_timer (sk, &rose_sk (sk)->timer); }void rose_stop_idletimer (struct sock *sk) { -del_timer (&rose_sk (sk)->idletimer); +sk_stop_timer (sk, &rose_sk (sk)->idletimer); }static void rose_heartbeat_expiry (struct timer_list *t)
@@ -130,6 +130,7 @@ static void rose_heartbeat_expiry(struct timer_list *t) (sk->sk_state == TCP_LISTEN && sock_flag(sk, SOCK_DEAD))) {bh_unlock_sock (sk);rose_destroy_socket (sk); +sock_put (sk);return ; }break ;
@@ -152,6 +153,7 @@ static void rose_heartbeat_expiry(struct timer_list *t)rose_start_heartbeat (sk);bh_unlock_sock (sk); +sock_put (sk); }static void rose_timer_expiry (struct timer_list *t)
@@ -181,6 +183,7 @@ static void rose_timer_expiry(struct timer_list *t)break ; }bh_unlock_sock (sk); +sock_put (sk); }static void rose_idletimer_expiry (struct timer_list *t)
@@ -205,4 +208,5 @@ static void rose_idletimer_expiry(struct timer_list *t)sock_set_flag (sk,SOCK_DEAD ); }bh_unlock_sock (sk); +sock_put (sk); }
net/sched/act_api.c +14 -8
@@ -588,7 +588,8 @@ static int tcf_idr_release_unsafe(struct tc_action *p) }static int tcf_del_walker (struct tcf_idrinfo *idrinfo,struct sk_buff *skb, -const struct tc_action_ops *ops) +const struct tc_action_ops *ops, +struct netlink_ext_ack *extack) {struct nlattr *nest;int n_i =0 ;
@@ -604,20 +605,25 @@ static int tcf_del_walker(struct tcf_idrinfo *idrinfo, struct sk_buff *skb,if (nla_put_string (skb,TCA_KIND , ops->kind)) goto nla_put_failure; + ret =0 ;mutex_lock (&idrinfo->lock);idr_for_each_entry_ul (idr, p, tmp, id) {if (IS_ERR (p))continue ; ret =tcf_idr_release_unsafe (p); -if (ret ==ACT_P_DELETED ) { +if (ret ==ACT_P_DELETED )module_put (ops->owner); - n_i++; - }else if (ret <0 ) { -mutex_unlock (&idrinfo->lock); - goto nla_put_failure; - } +else if (ret <0 ) +break ; + n_i++;
Lines of this file are not shown. View the raw message.
net/tipc/node.c +22 -19
41 lines not on this page · raw message
tools/testing/selftests/net/bpf/Makefile +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/diag.sh +40 -8
48 lines not on this page · raw message
tools/testing/selftests/net/mptcp/mptcp_connect.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_inq.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_sockopt.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/udpgso_bench.sh +1 -1
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.