Linux 6.1.122
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.122 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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/hexagon/Makefile | 6 arch/mips/boot/dts/loongson/loongson64g_4core_ls7a.dts | 1 arch/x86/kvm/cpuid.c | 31 + arch/x86/kvm/cpuid.h | 1 arch/x86/kvm/x86.c | 4 drivers/block/zram/zram_drv.c | 15 drivers/cxl/core/region.c | 25 - drivers/dma-buf/udmabuf.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 7 drivers/gpu/drm/drm_modes.c | 11 drivers/gpu/drm/i915/gt/intel_engine_types.h | 5 drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c | 41 +- drivers/gpu/drm/panel/panel-novatek-nt35950.c | 4 drivers/hv/hv_kvp.c | 6 drivers/hv/hv_snapshot.c | 6 drivers/hv/hv_util.c | 9 drivers/hv/hyperv_vmbus.h | 2 drivers/hwmon/tmp513.c | 74 +-- drivers/i2c/busses/i2c-pnx.c | 4 drivers/i2c/busses/i2c-riic.c | 2 drivers/mmc/host/sdhci-tegra.c | 1 drivers/net/ethernet/broadcom/bgmac-platform.c | 5 drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_main.c | 5 drivers/net/ethernet/huawei/hinic/hinic_main.c | 2 drivers/net/ethernet/mscc/ocelot.c | 2 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c | 4 drivers/net/ethernet/pensando/ionic/ionic_lif.c | 4 drivers/net/mdio/fwnode_mdio.c | 13 drivers/net/netdevsim/health.c | 2 drivers/of/address.c | 2 drivers/of/base.c | 15 drivers/of/irq.c | 2 drivers/pci/controller/pci-host-common.c | 4 drivers/pci/controller/vmd.c | 8 drivers/pci/pcie/aer.c | 18 drivers/pci/probe.c | 20 - drivers/pci/quirks.c | 4 drivers/platform/x86/p2sb.c | 92 ++-- drivers/sh/clk/core.c | 2 drivers/thunderbolt/tb.c | 41 ++ drivers/usb/cdns3/core.h | 1 drivers/usb/cdns3/drd.c | 10 drivers/usb/cdns3/drd.h | 3 drivers/usb/dwc2/gadget.c | 4 drivers/usb/serial/option.c | 27 + fs/btrfs/tree-checker.c | 27 + fs/ceph/super.c | 2 fs/efivarfs/inode.c | 2 fs/efivarfs/internal.h | 1 fs/efivarfs/super.c | 3 fs/eventpoll.c | 5 fs/nfs/pnfs.c | 2 fs/nilfs2/btnode.c | 1 fs/nilfs2/gcinode.c | 2 fs/nilfs2/inode.c | 13 fs/nilfs2/namei.c | 5 fs/nilfs2/nilfs.h | 1 fs/udf/directory.c | 2 include/linux/hyperv.h | 1 include/linux/io_uring.h | 4 include/linux/pci.h | 15 include/linux/wait.h | 1 io_uring/io_uring.c | 13 io_uring/io_uring.h | 1 io_uring/rw.c | 31 + kernel/trace/trace_events.c | 197 +++++++--- net/netfilter/ipset/ip_set_list_set.c | 3 net/sched/sch_cake.c | 2 net/sched/sch_choke.c | 2 net/smc/af_smc.c | 15 net/smc/smc_clc.c | 9 net/smc/smc_clc.h | 14 net/smc/smc_core.c | 9 sound/soc/intel/boards/sof_sdw.c | 18 tools/testing/selftests/bpf/sdt.h | 2 77 files changed, 723 insertions(+), 232 deletions(-)
Ajit Khaparde (1):
PCI: Add ACS quirk for Broadcom BCM5760X NIC
Andy Shevchenko (4):
PCI: Introduce pci_resource_n()
hwmon: (tmp513) Don't use "proxy" headers
hwmon: (tmp513) Simplify with dev_err_probe()
hwmon: (tmp513) Use SI constants from units.h
Brett Creeley (1):
ionic: Fix netdev notifier unregister on failure
Dan Carpenter (2):
net: hinic: Fix cleanup in create_rxqs/txqs() chelsio/chtls: prevent potential integer overflow on 32bit
Daniel Swanemar (1):
USB: serial: option: add TCL IK512 MBIM & ECM
Daniele Palmas (1):
USB: serial: option: add Telit FE910C04 rmnet compositions
Edward Adam Davis (1):
nilfs2: prevent use of deleted inode
Eric Dumazet (1):
netdevsim: prevent bad user input in nsim_dev_health_break_write()
Geert Uytterhoeven (2):
i2c: riic: Always round-up when calculating bus period
sh: clk: Fix clk_enable() to return 0 on NULL clk
Greg Kroah-Hartman (1):
Linux 6.1.122
Guangguan Wang (5):
net/smc: protect link down work from execute after lgr freed net/smc: check sndbuf_space again after NOSPACE flag is set in smc_poll net/smc: check iparea_offset and ipv6_prefixes_cnt when receiving proposal msg net/smc: check smcd_v2_ext_offset when receiving proposal msg net/smc: check return value of sock_recvmsg when draining clc data
Hans de Goede (1):
platform/x86: p2sb: Make p2sb_get_devfn() return void
Herve Codina (1):
of: Fix error path in of_parse_phandle_with_args_map()
Huaisheng Ye (1):
cxl/region: Fix region creation for greater than x2 switches
Ilya Dryomov (1):
ceph: validate snapdirname option length when mounting
Jack Wu (1):
USB: serial: option: add MediaTek T7XX compositions
James Bottomley (1):
efivarfs: Fix error on non-existent file
Jan Kara (1):
udf: Fix directory iteration for longer tail extents
Jann Horn (2):
io_uring: Fix registered ring file refcount leak
udmabuf: also check for F_SEAL_FUTURE_WRITE
Jens Axboe (2):
io_uring/rw: split io_read() into a helper io_uring/rw: treat -EOPNOTSUPP for IOCB_NOWAIT like -EAGAIN
Jiaxun Yang (1):
MIPS: Loongson64: DTS: Fix msi node for ls7a
Jiwei Sun (1):
PCI: vmd: Create domain symlink before pci_bus_add_devices()
Joe Hattori (2):
net: ethernet: bgmac-platform: fix an OF node reference leak
net: mdiobus: fix an OF node reference leak
Kai-Heng Feng (1):
PCI/AER: Disable AER service on suspend
Kairui Song (2):
zram: refuse to use zero sized block device as backing device
zram: fix uninitialized ZRAM not releasing backing device
Lion Ackermann (1):
net: sched: fix ordering of qlen adjustment
Mank Wang (1):
USB: serial: option: add Netprisma LCUK54 modules for WWAN Ready
Michael Kelley (1):
Drivers: hv: util: Avoid accessing a ringbuffer not initialized yet
Michal Hrusecky (1):
USB: serial: option: add MeiG Smart SLM770A
Michel Dänzer (1):
drm/amdgpu: Handle NULL bo->tbo.resource (again) in amdgpu_vm_bo_update
Mika Westerberg (1):
thunderbolt: Improve redrive mode handling
Murad Masimov (3):
hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers
hwmon: (tmp513) Fix Current Register value interpretation
hwmon: (tmp513) Fix interpretation of values of Temperature Result and Limit Registers
Nathan Chancellor (1):
hexagon: Disable constant extender optimization for LLVM prior to 19.1.0
Pavel Begunkov (2):
io_uring: check if iowq is killed before queuing io_uring/rw: avoid punting to io-wq directly
Peng Hongchi (1):
usb: dwc2: gadget: Don't write invalid mapped sg entries into dma_desc with iommu enabled
Phil Sutter (1):
netfilter: ipset: Fix for recursive locking warning
Pierre-Eric Pelloux-Prayer (1):
drm/amdgpu: don't access invalid sched
Pierre-Louis Bossart (2):
ASoC: Intel: sof_sdw: fix jack detection on ADL-N variant RVP
ASoC: Intel: sof_sdw: add quirk for Dell SKU 0B8C
Prathamesh Shete (1):
mmc: sdhci-tegra: Remove SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC quirk
Qu Wenruo (1):
btrfs: tree-checker: reject inline extent items with 0 ref count
Roger Quadros (1):
usb: cdns3: Add quirk flag to enable suspend residency
Ryusuke Konishi (1):
nilfs2: fix buffer head leaks in calls to truncate_inode_pages()
Sean Christopherson (2):
KVM: x86: Cache CPUID.0xD XSTATE offsets+sizes during module init
KVM: x86: Play nice with protected guests in complete_hypercall_exit()
Shannon Nelson (1):
ionic: use ee->offset when returning sprom data
Shin'ichiro Kawasaki (4):
p2sb: Factor out p2sb_read_from_cache()
p2sb: Introduce the global flag p2sb_hidden_by_bios
p2sb: Move P2SB hide and unhide code to p2sb_scan_and_cache()
p2sb: Do not scan and remove the P2SB device when it is unhidden
Steven Rostedt (3):
tracing: Fix test_event_printk() to process entire print argument
tracing: Add missing helper functions in event pointer dereference check
tracing: Add "%s" check in test_event_printk()
Tiezhu Yang (1):
selftests/bpf: Use asm constraint "m" for LoongArch
Trond Myklebust (1):
NFS/pnfs: Fix a live lock between recalled layouts and layoutget
Umesh Nerlige Ramappa (3):
i915/guc: Reset engine utilization buffer before registration i915/guc: Ensure busyness counter increases motonically i915/guc: Accumulate active runtime on gt reset
Vidya Sagar (1):
PCI: Use preserve_config in place of pci_flags
Ville Syrjälä (1):
drm/modes: Avoid divide by zero harder in drm_mode_vrefresh()
Vladimir Oltean (1):
net: mscc: ocelot: fix incorrect IFH SRC_PORT field in ocelot_ifh_set_basic()
Vladimir Riabchun (1):
i2c: pnx: Fix timeout in wait functions
Xuewen Yan (1):
epoll: Add synchronous wakeup support for ep_poll_callback
Yang Yingliang (1):
drm/panel: novatek-nt35950: fix return value check in nt35950_probe()
Zijun Hu (3):
of/irq: Fix interrupt-map cell length check in of_irq_parse_imap_parent() of/irq: Fix using uninitialized variable @addr_len in API of_irq_parse_one()
of: Fix refcount leakage for OF node returned by __of_get_dma_parent()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 121 +SUBLEVEL = 122 EXTRAVERSION = NAME = Curry Ramen
arch/hexagon/Makefile +6 -0
@@ -32,3 +32,9 @@ KBUILD_LDFLAGS += $(ldflags-y) TIR_NAME := r19 KBUILD_CFLAGS += -ffixed-$(TIR_NAME) -DTHREADINFO_REG=$(TIR_NAME) -D__linux__ KBUILD_AFLAGS += -DTHREADINFO_REG=$(TIR_NAME) + +# Disable HexagonConstExtenders pass for LLVM versions prior to 19.1.0 +# https://github.com/llvm/llvm-project/issues/99714 +ifneq ($(call clang-min-version, 190100),y) +KBUILD_CFLAGS += -mllvm -hexagon-cext=false +endif
arch/mips/boot/dts/loongson/loongson64g_4core_ls7a.dts +1 -0
@@ -33,6 +33,7 @@ msi: msi-controller@2ff00000 { compatible = "loongson,pch-msi-1.0"; reg = <0 0x2ff00000 0 0x8>; interrupt-controller; + #interrupt-cells = <1>; msi-controller; loongson,msi-base-vec = <64>; loongson,msi-num-vecs = <192>;
arch/x86/kvm/cpuid.c +26 -5
@@ -33,6 +33,26 @@u32 kvm_cpu_caps[NR_KVM_CPU_CAPS ]__read_mostly ;EXPORT_SYMBOL_GPL (kvm_cpu_caps); +struct cpuid_xstate_sizes { +u32 eax; +u32 ebx; +u32 ecx; +}; + +static struct cpuid_xstate_sizes xstate_sizes[XFEATURE_MAX ]__ro_after_init ; + +void __init kvm_init_xstate_sizes (void ) +{ +u32 ign; +int i; + +for (i =XFEATURE_YMM ; i <ARRAY_SIZE (xstate_sizes); i++) { +struct cpuid_xstate_sizes *xs = &xstate_sizes[i]; + +cpuid_count (0xD , i, &xs->eax, &xs->ebx, &xs->ecx, &ign); + } +} +u32 xstate_required_size (u64 xstate_bv,bool compacted) {int feature_bit =0 ;
@@ -41,14 +61,15 @@ u32 xstate_required_size(u64 xstate_bv, bool compacted) xstate_bv &=XFEATURE_MASK_EXTEND ;while (xstate_bv) {if (xstate_bv &0x1 ) { -u32 eax, ebx, ecx, edx, offset; -cpuid_count (0xD , feature_bit, &eax, &ebx, &ecx, &edx); +struct cpuid_xstate_sizes *xs = &xstate_sizes[feature_bit]; +u32 offset; +/* ECX[1]: 64B alignment in compacted form */ if (compacted) - offset = (ecx &0x2 ) ?ALIGN (ret,64 ) : ret; + offset = (xs->ecx &0x2 ) ?ALIGN (ret,64 ) : ret;else - offset = ebx; - ret =max (ret, offset + eax); + offset = xs->ebx; + ret =max (ret, offset + xs->eax); } xstate_bv >>=1 ;
arch/x86/kvm/cpuid.h +1 -0
@@ -32,6 +32,7 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu,bool kvm_cpuid (struct kvm_vcpu *vcpu,u32 *eax,u32 *ebx,u32 *ecx,u32 *edx,bool exact_only); +void __init kvm_init_xstate_sizes (void );u32 xstate_required_size (u64 xstate_bv,bool compacted);int cpuid_query_maxphyaddr (struct kvm_vcpu *vcpu);
arch/x86/kvm/x86.c +3 -1
@@ -9712,7 +9712,7 @@ static int complete_hypercall_exit(struct kvm_vcpu *vcpu) {u64 ret = vcpu->run->hypercall.ret; -if (!is_64_bit_mode (vcpu)) +if (!is_64_bit_hypercall (vcpu)) ret = (u32 )ret;kvm_rax_write (vcpu, ret); ++vcpu->stat.hypercalls;
@@ -13820,6 +13820,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_vmgexit_msr_protocol_exit);static int __init kvm_x86_init (void ) { +kvm_init_xstate_sizes (); +kvm_mmu_x86_module_init (); mitigate_smt_rsb &=boot_cpu_has_bug (X86_BUG_SMT_RSB ) &&cpu_smt_possible ();return 0 ;
drivers/block/zram/zram_drv.c +10 -5
@@ -530,6 +530,12 @@ static ssize_t backing_dev_store(struct device *dev, } nr_pages =i_size_read (inode) >>PAGE_SHIFT ; +/* Refuse to use zero sized device (also prevents self reference) */ +if (!nr_pages) { + err = -EINVAL ; + goto out; + } + bitmap_sz =BITS_TO_LONGS (nr_pages) *sizeof (long ); bitmap =kvzalloc (bitmap_sz,GFP_KERNEL );if (!bitmap) {
@@ -1162,12 +1168,16 @@ static void zram_meta_free(struct zram *zram, u64 disksize)size_t num_pages = disksize >>PAGE_SHIFT ;size_t index; +if (!zram->table) +return ; +/* Free all pages that are still in this zram device */ for (index =0 ; index < num_pages; index++)zram_free_page (zram, index);zs_destroy_pool (zram->mem_pool);vfree (zram->table); + zram->table =NULL ; }static bool zram_meta_alloc (struct zram *zram,u64 disksize)
@@ -1716,11 +1726,6 @@ static void zram_reset_device(struct zram *zram) zram->limit_pages =0 ; -if (!init_done (zram)) { -up_write (&zram->init_lock); -return ; - } -set_capacity_and_notify (zram->disk,0 );part_stat_set_all (zram->disk->part0,0 );
drivers/cxl/core/region.c +18 -7
@@ -974,6 +974,7 @@ static int cxl_port_setup_targets(struct cxl_port *port,struct cxl_region_params *p = &cxlr->params;struct cxl_decoder *cxld = cxl_rr->decoder;struct cxl_switch_decoder *cxlsd; +struct cxl_port *iter = port;u16 eig, peig;u8 eiw, peiw;
@@ -990,16 +991,26 @@ static int cxl_port_setup_targets(struct cxl_port *port, cxlsd =to_cxl_switch_decoder (&cxld->dev);if (cxl_rr->nr_targets_set) { -int i, distance; +int i, distance =1 ; +struct cxl_region_ref *cxl_rr_iter;/* -* Passthrough decoders impose no distance requirements between -* peers +* The "distance" between peer downstream ports represents which +* endpoint positions in the region interleave a given port can +* host. +* +* For example, at the root of a hierarchy the distance is +* always 1 as every index targets a different host-bridge. At +* each subsequent switch level those ports map every Nth region +* position where N is the width of the switch == distance. */ -if (cxl_rr->nr_targets ==1 ) - distance =0 ; -else - distance = p->nr_targets / cxl_rr->nr_targets; +do { + cxl_rr_iter =cxl_rr_load (iter, cxlr); + distance *= cxl_rr_iter->nr_targets; + iter =to_cxl_port (iter->dev.parent); + }while (!is_cxl_root (iter)); + distance *= cxlrd->cxlsd.cxld.interleave_ways; +for (i =0 ; i < cxl_rr->nr_targets_set; i++)if (ep->dport == cxlsd->target[i]) { rc = check_last_peer(cxled, ep, cxl_rr,
drivers/dma-buf/udmabuf.c +1 -1
@@ -164,7 +164,7 @@ static const struct dma_buf_ops udmabuf_ops = { };#define SEALS_WANTED (F_SEAL_SHRINK) -#define SEALS_DENIED (F_SEAL_WRITE) +#define SEALS_DENIED (F_SEAL_WRITE|F_SEAL_FUTURE_WRITE) static long udmabuf_create(struct miscdevice *device, struct udmabuf_create_list *head,
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +1 -2
@@ -150,7 +150,6 @@ void amdgpu_job_set_resources(struct amdgpu_job *job, struct amdgpu_bo *gds,void amdgpu_job_free_resources (struct amdgpu_job *job) { -struct amdgpu_ring *ring =to_amdgpu_ring (job->base.sched);struct dma_fence *f;unsigned i;
@@ -163,7 +162,7 @@ void amdgpu_job_free_resources(struct amdgpu_job *job) f =NULL ;for (i =0 ; i < job->num_ibs; ++i) -amdgpu_ib_free (ring->adev, &job->ibs[i], f); +amdgpu_ib_free (NULL , &job->ibs[i], f); }static void amdgpu_job_free_cb (struct drm_sched_job *s_job)
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +3 -4
@@ -1060,10 +1060,9 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev, struct amdgpu_bo_va *bo_va,* next command submission. */ if (bo && bo->tbo.base.resv == vm->root.bo->tbo.base.resv) { -uint32_t mem_type = bo->tbo.resource->mem_type; - -if (!(bo->preferred_domains & -amdgpu_mem_type_to_domain (mem_type))) +if (bo->tbo.resource && + !(bo->preferred_domains & +amdgpu_mem_type_to_domain (bo->tbo.resource->mem_type)))amdgpu_vm_bo_evicted (&bo_va->base);else amdgpu_vm_bo_idle (&bo_va->base);
drivers/gpu/drm/drm_modes.c +7 -4
@@ -808,14 +808,11 @@ EXPORT_SYMBOL(drm_mode_set_name);*/ int drm_mode_vrefresh (const struct drm_display_mode *mode) { -unsigned int num, den; +unsigned int num =1 , den =1 ;if (mode->htotal ==0 || mode->vtotal ==0 )return 0 ; - num = mode->clock; - den = mode->htotal * mode->vtotal; -if (mode->flags &DRM_MODE_FLAG_INTERLACE ) num *=2 ;if (mode->flags &DRM_MODE_FLAG_DBLSCAN )
@@ -823,6 +820,12 @@ int drm_mode_vrefresh(const struct drm_display_mode *mode)if (mode->vscan >1 ) den *= mode->vscan; +if (check_mul_overflow (mode->clock, num, &num)) +return 0 ; + +if (check_mul_overflow (mode->htotal * mode->vtotal, den, &den)) +return 0 ; +return DIV_ROUND_CLOSEST_ULL (mul_u32_u32 (num,1000 ), den); }EXPORT_SYMBOL (drm_mode_vrefresh);
drivers/gpu/drm/i915/gt/intel_engine_types.h +5 -0
@@ -339,6 +339,11 @@ struct intel_engine_guc_stats {* @start_gt_clk: GT clock time of last idle to active transition. */ u64 start_gt_clk; + +/** +* @total: The last value of total returned +*/ +u64 total; };struct intel_engine_cs {
drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c +39 -2
74 lines not on this page · raw message
drivers/gpu/drm/panel/panel-novatek-nt35950.c +2 -2
@@ -577,9 +577,9 @@ static int nt35950_probe(struct mipi_dsi_device *dsi)return dev_err_probe (dev, -EPROBE_DEFER ,"Cannot get secondary DSI host\n" ); nt->dsi[1 ] =mipi_dsi_device_register_full (dsi_r_host, info); -if (!nt->dsi[1 ]) { +if (IS_ERR (nt->dsi[1 ])) {dev_err (dev,"Cannot get secondary DSI node\n" ); -return -ENODEV ; +return PTR_ERR (nt->dsi[1 ]); } num_dsis++; }
drivers/hv/hv_kvp.c +6 -0
@@ -767,6 +767,12 @@ hv_kvp_init(struct hv_util_service *srv)*/ kvp_transaction.state =HVUTIL_DEVICE_INIT ; +return 0 ; +} + +int +hv_kvp_init_transport (void ) +{ hvt =hvutil_transport_init (kvp_devname,CN_KVP_IDX ,CN_KVP_VAL , kvp_on_msg, kvp_on_reset);if (!hvt)
drivers/hv/hv_snapshot.c +6 -0
@@ -388,6 +388,12 @@ hv_vss_init(struct hv_util_service *srv)*/ vss_transaction.state =HVUTIL_DEVICE_INIT ; +return 0 ; +} + +int +hv_vss_init_transport (void ) +{ hvt =hvutil_transport_init (vss_devname,CN_VSS_IDX ,CN_VSS_VAL , vss_on_msg, vss_on_reset);if (!hvt) {
drivers/hv/hv_util.c +9 -0
@@ -141,6 +141,7 @@ static struct hv_util_service util_heartbeat = {static struct hv_util_service util_kvp = { .util_cb = hv_kvp_onchannelcallback, .util_init = hv_kvp_init, + .util_init_transport = hv_kvp_init_transport, .util_pre_suspend = hv_kvp_pre_suspend, .util_pre_resume = hv_kvp_pre_resume, .util_deinit = hv_kvp_deinit,
@@ -149,6 +150,7 @@ static struct hv_util_service util_kvp = {static struct hv_util_service util_vss = { .util_cb = hv_vss_onchannelcallback, .util_init = hv_vss_init, + .util_init_transport = hv_vss_init_transport, .util_pre_suspend = hv_vss_pre_suspend, .util_pre_resume = hv_vss_pre_resume, .util_deinit = hv_vss_deinit,
@@ -592,6 +594,13 @@ static int util_probe(struct hv_device *dev,if (ret) goto error; +if (srv->util_init_transport) { + ret = srv->util_init_transport (); +if (ret) { +vmbus_close (dev->channel); + goto error; + } + }return 0 ; error:
drivers/hv/hyperv_vmbus.h +2 -0
@@ -365,12 +365,14 @@ void vmbus_on_event(unsigned long data);void vmbus_on_msg_dpc (unsigned long data);int hv_kvp_init (struct hv_util_service *srv); +int hv_kvp_init_transport (void );void hv_kvp_deinit (void );int hv_kvp_pre_suspend (void );int hv_kvp_pre_resume (void );void hv_kvp_onchannelcallback (void *context);int hv_vss_init (struct hv_util_service *srv); +int hv_vss_init_transport (void );void hv_vss_deinit (void );int hv_vss_pre_suspend (void );int hv_vss_pre_resume (void );
drivers/hwmon/tmp513.c +37 -37
164 lines not on this page · raw message
drivers/i2c/busses/i2c-pnx.c +2 -2
@@ -95,7 +95,7 @@ enum {static inline int wait_timeout (struct i2c_pnx_algo_data *data) { -long timeout = data->timeout; +long timeout =jiffies_to_msecs (data->timeout);while (timeout >0 && (ioread32 (I2C_REG_STS (data)) & mstatus_active)) {mdelay (1 );
@@ -106,7 +106,7 @@ static inline int wait_timeout(struct i2c_pnx_algo_data *data)static inline int wait_reset (struct i2c_pnx_algo_data *data) { -long timeout = data->timeout; +long timeout =jiffies_to_msecs (data->timeout);while (timeout >0 && (ioread32 (I2C_REG_CTL (data)) & mcntrl_reset)) {mdelay (1 );
drivers/i2c/busses/i2c-riic.c +1 -1
@@ -325,7 +325,7 @@ static int riic_init_hw(struct riic_dev *riic, struct i2c_timings *t)if (brl <= (0x1F +3 ))break ; - total_ticks /=2 ; + total_ticks =DIV_ROUND_UP (total_ticks,2 ); rate /=2 ; }
drivers/mmc/host/sdhci-tegra.c +0 -1
@@ -1520,7 +1520,6 @@ static const struct sdhci_pltfm_data sdhci_tegra186_pdata = { .quirks = SDHCI_QUIRK_BROKEN_TIMEOUT_VAL |SDHCI_QUIRK_SINGLE_POWER_WRITE |SDHCI_QUIRK_NO_HISPD_BIT | -SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC | SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN, .quirks2 =SDHCI_QUIRK2_PRESET_VALUE_BROKEN | SDHCI_QUIRK2_ISSUE_CMD_DAT_RESET_TOGETHER,
drivers/net/ethernet/broadcom/bgmac-platform.c +4 -1
@@ -171,6 +171,7 @@ static int platform_phy_connect(struct bgmac *bgmac)static int bgmac_probe (struct platform_device *pdev) {struct device_node *np = pdev->dev.of_node; +struct device_node *phy_node;struct bgmac *bgmac;struct resource *regs;int ret;
@@ -236,7 +237,9 @@ static int bgmac_probe(struct platform_device *pdev) bgmac->cco_ctl_maskset = platform_bgmac_cco_ctl_maskset; bgmac->get_bus_clock = platform_bgmac_get_bus_clock; bgmac->cmn_maskset32 = platform_bgmac_cmn_maskset32; -if (of_parse_phandle (np,"phy-handle" ,0 )) { + phy_node =of_parse_phandle (np,"phy-handle" ,0 ); +if (phy_node) { +of_node_put (phy_node); bgmac->phy_connect = platform_phy_connect; }else { bgmac->phy_connect = bgmac_phy_connect_direct;
drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_main.c +3 -2
@@ -346,8 +346,9 @@ static struct sk_buff *copy_gl_to_skb_pkt(const struct pkt_gl *gl,* driver. Once driver synthesizes cpl_pass_accpet_req the skb will go * through the regular cpl_pass_accept_req processing in TOM. */ - skb =alloc_skb (gl->tot_len +sizeof (struct cpl_pass_accept_req ) - - pktshift,GFP_ATOMIC ); + skb =alloc_skb (size_add (gl->tot_len, +sizeof (struct cpl_pass_accept_req )) - + pktshift,GFP_ATOMIC );if (unlikely (!skb))return NULL ; __skb_put(skb, gl->tot_len + sizeof(struct cpl_pass_accept_req)
drivers/net/ethernet/huawei/hinic/hinic_main.c +2 -0
@@ -172,6 +172,7 @@ static int create_txqs(struct hinic_dev *nic_dev)hinic_sq_dbgfs_uninit (nic_dev);devm_kfree (&netdev->dev, nic_dev->txqs); + nic_dev->txqs =NULL ;return err; }
@@ -268,6 +269,7 @@ static int create_rxqs(struct hinic_dev *nic_dev)hinic_rq_dbgfs_uninit (nic_dev);devm_kfree (&netdev->dev, nic_dev->rxqs); + nic_dev->rxqs =NULL ;return err; }
drivers/net/ethernet/mscc/ocelot.c +1 -1
@@ -1161,7 +1161,7 @@ void ocelot_ifh_set_basic(void *ifh, struct ocelot *ocelot, int port,memset (ifh,0 ,OCELOT_TAG_LEN );ocelot_ifh_set_bypass (ifh,1 ); -ocelot_ifh_set_src (ifh,BIT_ULL (ocelot->num_phys_ports)); +ocelot_ifh_set_src (ifh, ocelot->num_phys_ports);ocelot_ifh_set_dest (ifh,BIT_ULL (port));ocelot_ifh_set_qos_class (ifh, qos_class);ocelot_ifh_set_tag_type (ifh, tag_type);
drivers/net/ethernet/pensando/ionic/ionic_ethtool.c +2 -2
@@ -828,8 +828,8 @@ static int ionic_get_module_eeprom(struct net_device *netdev, len =min_t (u32,sizeof (xcvr->sprom), ee->len); do { - memcpy(data, xcvr->sprom, len); - memcpy(tbuf, xcvr->sprom, len); + memcpy(data, &xcvr->sprom[ee->offset], len); + memcpy(tbuf, &xcvr->sprom[ee->offset], len); /* Let's make sure we got a consistent copy */ if (!memcmp(data, tbuf, len))
drivers/net/ethernet/pensando/ionic/ionic_lif.c +2 -2
@@ -3484,8 +3484,8 @@ int ionic_lif_register(struct ionic_lif *lif)/* only register LIF0 for now */ err =register_netdev (lif->netdev);if (err) { -dev_err (lif->ionic->dev,"Cannot register net device, aborting\n" ); -ionic_lif_unregister_phc (lif); +dev_err (lif->ionic->dev,"Cannot register net device: %d, aborting\n" , err); +ionic_lif_unregister (lif);return err; }
drivers/net/mdio/fwnode_mdio.c +10 -3
@@ -38,6 +38,7 @@ fwnode_find_pse_control(struct fwnode_handle *fwnode)static struct mii_timestamper *fwnode_find_mii_timestamper (struct fwnode_handle *fwnode) { +struct mii_timestamper *mii_ts;struct of_phandle_args arg;int err;
@@ -51,10 +52,16 @@ fwnode_find_mii_timestamper(struct fwnode_handle *fwnode)else if (err)return ERR_PTR (err); -if (arg.args_count !=1 ) -return ERR_PTR (-EINVAL ); +if (arg.args_count !=1 ) { + mii_ts =ERR_PTR (-EINVAL ); + goto put_node; + } + + mii_ts =register_mii_timestamper (arg.np, arg.args[0 ]); -return register_mii_timestamper (arg.np, arg.args[0 ]); +put_node: +of_node_put (arg.np); +return mii_ts; } int fwnode_mdiobus_phy_device_register(struct mii_bus *mdio,
drivers/net/netdevsim/health.c +2 -0
@@ -203,6 +203,8 @@ static ssize_t nsim_dev_health_break_write(struct file *file,char *break_msg;int err; +if (count ==0 || count >PAGE_SIZE ) +return -EINVAL ; break_msg =memdup_user_nul (data, count);if (IS_ERR (break_msg))return PTR_ERR (break_msg);
drivers/of/address.c +1 -1
@@ -595,7 +595,7 @@ struct device_node *__of_get_dma_parent(const struct device_node *np)if (ret <0 )return of_get_parent (np); - return of_node_get(args.np); + return args.np; }#endif
drivers/of/base.c +10 -5
@@ -1597,8 +1597,10 @@ int of_parse_phandle_with_args_map(const struct device_node *np, map_len--;/* Check if not found */ -if (!new) +if (!new) { + ret = -EINVAL ; goto put; + }if (!of_device_is_available (new)) match =0 ;
@@ -1608,17 +1610,20 @@ int of_parse_phandle_with_args_map(const struct device_node *np, goto put;/* Check for malformed properties */ -if (WARN_ON (new_size >MAX_PHANDLE_ARGS )) - goto put; -if (map_len < new_size) +if (WARN_ON (new_size >MAX_PHANDLE_ARGS ) || + map_len < new_size) { + ret = -EINVAL ; goto put; + }/* Move forward by new node's #<list>-cells amount */ map += new_size; map_len -= new_size; } -if (!match) +if (!match) { + ret = -ENOENT ; goto put; + }/* Get the <list>-map-pass-thru property (optional) */ pass =of_get_property (cur, pass_name,NULL );
drivers/of/irq.c +2 -0
@@ -111,6 +111,7 @@ const __be32 *of_irq_parse_imap_parent(const __be32 *imap, int len, struct of_phelse np =of_find_node_by_phandle (be32_to_cpup (imap)); imap++; + len--;/* Check if not found */ if (!np) {
@@ -354,6 +355,7 @@ int of_irq_parse_one(struct device_node *device, int index, struct of_phandle_arreturn of_irq_parse_oldworld (device, index, out_irq);/* Get the reg property (if any) */ + addr_len =0 ; addr =of_get_property (device,"reg" , &addr_len);/* Prevent out-of-bounds read in case of longer interrupt parent address size */
drivers/pci/controller/pci-host-common.c +0 -4
@@ -73,10 +73,6 @@ int pci_host_common_probe(struct platform_device *pdev)if (IS_ERR (cfg))return PTR_ERR (cfg); -/* Do not reassign resources if probe only */ -if (!pci_has_flag (PCI_PROBE_ONLY )) -pci_add_flags (PCI_REASSIGN_ALL_BUS ); - bridge->sysdata = cfg; bridge->ops = (struct pci_ops *)&ops->pci_ops; bridge->msi_domain = true;
drivers/pci/controller/vmd.c +4 -4
@@ -870,6 +870,9 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features)dev_set_msi_domain (&vmd->bus->dev,dev_get_msi_domain (&vmd->dev->dev)); +WARN (sysfs_create_link (&vmd->dev->dev.kobj, &vmd->bus->dev.kobj, +"domain" ),"Can't create symlink to domain\n" ); +vmd_acpi_begin ();pci_scan_child_bus (vmd->bus);
@@ -907,9 +910,6 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features)pci_bus_add_devices (vmd->bus);vmd_acpi_end (); - -WARN (sysfs_create_link (&vmd->dev->dev.kobj, &vmd->bus->dev.kobj, -"domain" ),"Can't create symlink to domain\n" );return 0 ; }
@@ -985,8 +985,8 @@ static void vmd_remove(struct pci_dev *dev) {struct vmd_dev *vmd =pci_get_drvdata (dev); -sysfs_remove_link (&vmd->dev->dev.kobj,"domain" );pci_stop_root_bus (vmd->bus); +sysfs_remove_link (&vmd->dev->dev.kobj,"domain" );pci_remove_root_bus (vmd->bus);vmd_cleanup_srcu (vmd);vmd_detach_resources (vmd);
drivers/pci/pcie/aer.c +18 -0
@@ -1384,6 +1384,22 @@ static int aer_probe(struct pcie_device *dev)return 0 ; } +static int aer_suspend (struct pcie_device *dev) +{ +struct aer_rpc *rpc =get_service_data (dev); + +aer_disable_rootport (rpc); +return 0 ; +} + +static int aer_resume (struct pcie_device *dev) +{ +struct aer_rpc *rpc =get_service_data (dev); + +aer_enable_rootport (rpc); +return 0 ; +} +/** * aer_root_reset - reset Root Port hierarchy, RCEC, or RCiEP * @dev: pointer to Root Port, RCEC, or RCiEP
@@ -1455,6 +1471,8 @@ static struct pcie_port_service_driver aerdriver = { .service = PCIE_PORT_SERVICE_AER, .probe = aer_probe, + .suspend = aer_suspend, + .resume = aer_resume, .remove = aer_remove, };
drivers/pci/probe.c +9 -11
@@ -3082,20 +3082,18 @@ int pci_host_probe(struct pci_host_bridge *bridge) bus = bridge->bus; +/* If we must preserve the resource configuration, claim now */ +if (bridge->preserve_config) +pci_bus_claim_resources (bus); +/* -* We insert PCI resources into the iomem_resource and -* ioport_resource trees in either pci_bus_claim_resources() -* or pci_bus_assign_resources(). +* Assign whatever was left unassigned. If we didn't claim above, +* this will reassign everything. */ -if (pci_has_flag (PCI_PROBE_ONLY )) { -pci_bus_claim_resources (bus); - }else { -pci_bus_size_bridges (bus); -pci_bus_assign_resources (bus); +pci_assign_unassigned_root_bus_resources (bus); -list_for_each_entry (child, &bus->children, node) -pcie_bus_configure_settings (child); - } +list_for_each_entry (child, &bus->children, node) +pcie_bus_configure_settings (child);pci_bus_add_devices (bus);return 0 ;
drivers/pci/quirks.c +4 -0
@@ -5008,6 +5008,10 @@ static const struct pci_dev_acs_enabled { { PCI_VENDOR_ID_BROADCOM, 0x1750, pci_quirk_mf_endpoint_acs }, { PCI_VENDOR_ID_BROADCOM, 0x1751, pci_quirk_mf_endpoint_acs }, { PCI_VENDOR_ID_BROADCOM, 0x1752, pci_quirk_mf_endpoint_acs }, + { PCI_VENDOR_ID_BROADCOM, 0x1760, pci_quirk_mf_endpoint_acs }, + { PCI_VENDOR_ID_BROADCOM, 0x1761, pci_quirk_mf_endpoint_acs }, + { PCI_VENDOR_ID_BROADCOM, 0x1762, pci_quirk_mf_endpoint_acs }, + { PCI_VENDOR_ID_BROADCOM, 0x1763, pci_quirk_mf_endpoint_acs }, { PCI_VENDOR_ID_BROADCOM, 0xD714, pci_quirk_brcm_acs },/* Amazon Annapurna Labs */ { PCI_VENDOR_ID_AMAZON_ANNAPURNA_LABS, 0x0031, pci_quirk_al_acs },
drivers/platform/x86/p2sb.c +59 -33
148 lines not on this page · raw message
drivers/sh/clk/core.c +1 -1
@@ -295,7 +295,7 @@ int clk_enable(struct clk *clk)int ret;if (!clk) -return -EINVAL ; +return 0 ;spin_lock_irqsave (&clock_lock, flags); ret =__clk_enable (clk);
drivers/thunderbolt/tb.c +41 -0
77 lines not on this page · raw message
drivers/usb/cdns3/core.h +1 -0
@@ -44,6 +44,7 @@ struct cdns3_platform_data { bool suspend, bool wakeup);unsigned long quirks;#define CDNS3_DEFAULT_PM_RUNTIME_ALLOW BIT(0) +#define CDNS3_DRD_SUSPEND_RESIDENCY_ENABLE BIT(1) };/**
drivers/usb/cdns3/drd.c +9 -1
@@ -385,7 +385,7 @@ static irqreturn_t cdns_drd_irq(int irq, void *data)int cdns_drd_init (struct cdns *cdns) {void __iomem *regs; -u32 state; +u32 state, reg;int ret; regs =devm_ioremap_resource (cdns->dev, &cdns->otg_res);
@@ -429,6 +429,14 @@ int cdns_drd_init(struct cdns *cdns) cdns->otg_irq_regs = (struct cdns_otg_irq_regs __iomem *) &cdns->otg_v1_regs->ien;writel (1 , &cdns->otg_v1_regs->simulate); + +if (cdns->pdata && + (cdns->pdata->quirks &CDNS3_DRD_SUSPEND_RESIDENCY_ENABLE )) { + reg =readl (&cdns->otg_v1_regs->susp_ctrl); + reg |=SUSP_CTRL_SUSPEND_RESIDENCY_ENABLE ; +writel (reg, &cdns->otg_v1_regs->susp_ctrl); + } + cdns->version =CDNS3_CONTROLLER_V1 ; }else {dev_err (cdns->dev,"not supporte DID=0x%08x\n" , state);
drivers/usb/cdns3/drd.h +3 -0
@@ -193,6 +193,9 @@ struct cdns_otg_irq_regs {/* OTGREFCLK - bitmasks */ #define OTGREFCLK_STB_CLK_SWITCH_EN BIT(31) +/* SUPS_CTRL - bitmasks */ +#define SUSP_CTRL_SUSPEND_RESIDENCY_ENABLE BIT(17) +/* OVERRIDE - bitmasks */ #define OVERRIDE_IDPULLUP BIT(0)/* Only for CDNS3_CONTROLLER_V0 version */
drivers/usb/dwc2/gadget.c +2 -2
@@ -886,10 +886,10 @@ static void dwc2_gadget_config_nonisoc_xfer_ddma(struct dwc2_hsotg_ep *hs_ep, }/* DMA sg buffer */ -for_each_sg (ureq->sg, sg, ureq->num_sgs, i) { +for_each_sg (ureq->sg, sg, ureq->num_mapped_sgs, i) {dwc2_gadget_fill_nonisoc_xfer_ddma_one (hs_ep, &desc,sg_dma_address (sg) + sg->offset,sg_dma_len (sg), -sg_is_last (sg)); + (i == (ureq->num_mapped_sgs -1 ))); desc_count += hs_ep->desc_count; }
drivers/usb/serial/option.c +27 -0
@@ -625,6 +625,8 @@ static void option_instat_callback(struct urb *urb);#define MEIGSMART_PRODUCT_SRM825L 0x4d22/* MeiG Smart SLM320 based on UNISOC UIS8910 */ #define MEIGSMART_PRODUCT_SLM320 0x4d41 +/* MeiG Smart SLM770A based on ASR1803 */ +#define MEIGSMART_PRODUCT_SLM770A 0x4d57/* Device flags */
@@ -1395,6 +1397,12 @@ static const struct usb_device_id option_ids[] = { .driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10aa, 0xff), /* Telit FN920C04 (MBIM) */ .driver_info = NCTRL(3) | RSVD(4) | RSVD(5) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c0, 0xff), /* Telit FE910C04 (rmnet) */ + .driver_info = RSVD(0) | NCTRL(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c4, 0xff), /* Telit FE910C04 (rmnet) */ + .driver_info = RSVD(0) | NCTRL(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c8, 0xff), /* Telit FE910C04 (rmnet) */ + .driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910), .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
@@ -2247,6 +2255,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(2) }, { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x7127, 0xff, 0x00, 0x00), .driver_info = NCTRL(2) | NCTRL(3) | NCTRL(4) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x7129, 0xff, 0x00, 0x00), /* MediaTek T7XX */ + .driver_info = NCTRL(2) | NCTRL(3) | NCTRL(4) }, { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MPL200), .driver_info = RSVD(1) | RSVD(4) },
@@ -2375,6 +2385,18 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x0116, 0xff, 0xff, 0x30) }, /* NetPrisma LCUK54-WWD for Golbal EDU */ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x0116, 0xff, 0x00, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x0116, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010a, 0xff, 0xff, 0x30) }, /* NetPrisma LCUK54-WRD for WWAN Ready */ + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010a, 0xff, 0x00, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010a, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010b, 0xff, 0xff, 0x30) }, /* NetPrisma LCUK54-WWD for WWAN Ready */ + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010b, 0xff, 0x00, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010b, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010c, 0xff, 0xff, 0x30) }, /* NetPrisma LCUK54-WRD for WWAN Ready */ + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010c, 0xff, 0x00, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010c, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010d, 0xff, 0xff, 0x30) }, /* NetPrisma LCUK54-WWD for WWAN Ready */ + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010d, 0xff, 0x00, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010d, 0xff, 0xff, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(OPPO_VENDOR_ID, OPPO_PRODUCT_R11, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x40) },
@@ -2382,9 +2404,14 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SLM320, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SLM770A, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x60) }, + { USB_DEVICE_INTERFACE_CLASS(0x1bbb, 0x0530, 0xff), /* TCL IK512 MBIM */ + .driver_info = NCTRL(1) }, + { USB_DEVICE_INTERFACE_CLASS(0x1bbb, 0x0640, 0xff), /* TCL IK512 ECM */ + .driver_info = NCTRL(3) }, { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
fs/btrfs/tree-checker.c +26 -1
@@ -1433,6 +1433,11 @@ static int check_extent_item(struct extent_buffer *leaf, dref_offset, fs_info->sectorsize);return -EUCLEAN ; } +if (unlikely (btrfs_extent_data_ref_count (leaf, dref) ==0 )) { +extent_err (leaf, slot, +"invalid data ref count, should have non-zero value" ); +return -EUCLEAN ; + } inline_refs +=btrfs_extent_data_ref_count (leaf, dref);break ;/* Contains parent bytenr and ref count */
@@ -1445,6 +1450,11 @@ static int check_extent_item(struct extent_buffer *leaf, inline_offset, fs_info->sectorsize);return -EUCLEAN ; } +if (unlikely (btrfs_shared_data_ref_count (leaf, sref) ==0 )) { +extent_err (leaf, slot, +"invalid shared data ref count, should have non-zero value" ); +return -EUCLEAN ; + } inline_refs +=btrfs_shared_data_ref_count (leaf, sref);break ;default :
@@ -1496,8 +1506,18 @@ static int check_simple_keyed_refs(struct extent_buffer *leaf, {u32 expect_item_size =0 ; -if (key->type ==BTRFS_SHARED_DATA_REF_KEY ) +if (key->type ==BTRFS_SHARED_DATA_REF_KEY ) { +struct btrfs_shared_data_ref *sref; + + sref = btrfs_item_ptr(leaf, slot, struct btrfs_shared_data_ref); +if (unlikely (btrfs_shared_data_ref_count (leaf, sref) ==0 )) { +extent_err (leaf, slot, +"invalid shared data backref count, should have non-zero value" ); +return -EUCLEAN ; + } + expect_item_size =sizeof (struct btrfs_shared_data_ref ); + }if (unlikely (btrfs_item_size (leaf, slot) != expect_item_size)) { generic_err(leaf, slot,
@@ -1557,6 +1577,11 @@ static int check_extent_data_ref(struct extent_buffer *leaf, offset, leaf->fs_info->sectorsize);return -EUCLEAN ; } +if (unlikely (btrfs_extent_data_ref_count (leaf, dref) ==0 )) { +extent_err (leaf, slot, +"invalid extent data backref count, should have non-zero value" ); +return -EUCLEAN ; + } }return 0 ; }
fs/ceph/super.c +2 -0
@@ -420,6 +420,8 @@ static int ceph_parse_mount_param(struct fs_context *fc,switch (token) {case Opt_snapdirname: +if (strlen (param->string) >NAME_MAX ) +return invalfc (fc,"snapdirname too long" );kfree (fsopt->snapdir_name); fsopt->snapdir_name = param->string; param->string =NULL ;
fs/efivarfs/inode.c +1 -1
@@ -47,7 +47,7 @@ struct inode *efivarfs_get_inode(struct super_block *sb,* * VariableName-12345678-1234-1234-1234-1234567891bc */ -bool efivarfs_valid_name (const char *str,int len) +static bool efivarfs_valid_name (const char *str,int len) {const char *s = str + len -EFI_VARIABLE_GUID_LEN ;
fs/efivarfs/internal.h +0 -1
@@ -50,7 +50,6 @@ bool efivar_variable_is_removable(efi_guid_t vendor, const char *name,extern const struct file_operations efivarfs_file_operations;extern const struct inode_operations efivarfs_dir_inode_operations; -extern bool efivarfs_valid_name (const char *str,int len);extern struct inode *efivarfs_get_inode (struct super_block *sb,const struct inode *dir,int mode,dev_t dev,bool is_removable);
fs/efivarfs/super.c +0 -3
@@ -64,9 +64,6 @@ static int efivarfs_d_hash(const struct dentry *dentry, struct qstr *qstr)const unsigned char *s = qstr->name;unsigned int len = qstr->len; -if (!efivarfs_valid_name (s, len)) -return -EINVAL ; -while (len-- >EFI_VARIABLE_GUID_LEN ) hash =partial_name_hash (*s++, hash);
fs/eventpoll.c +4 -1
@@ -1237,7 +1237,10 @@ static int ep_poll_callback(wait_queue_entry_t *wait, unsigned mode, int sync, vbreak ; } } -wake_up (&ep->wq); +if (sync) +wake_up_sync (&ep->wq); +else +wake_up (&ep->wq); }if (waitqueue_active (&ep->poll_wait)) pwake++;
fs/nfs/pnfs.c +1 -1
@@ -1196,7 +1196,7 @@ pnfs_prepare_layoutreturn(struct pnfs_layout_hdr *lo, enum pnfs_iomode *iomode) {/* Serialise LAYOUTGET/LAYOUTRETURN */ -if (atomic_read (&lo->plh_outstanding) !=0 ) +if (atomic_read (&lo->plh_outstanding) !=0 && lo->plh_return_seq ==0 )return false;if (test_and_set_bit (NFS_LAYOUT_RETURN_LOCK , &lo->plh_flags))return false;
fs/nilfs2/btnode.c +1 -0
@@ -35,6 +35,7 @@ void nilfs_init_btnc_inode(struct inode *btnc_inode) ii->i_flags =0 ;memset (&ii->i_bmap_data,0 ,sizeof (struct nilfs_bmap ));mapping_set_gfp_mask (btnc_inode->i_mapping,GFP_NOFS ); + btnc_inode->i_mapping->a_ops = &nilfs_buffer_cache_aops; }void nilfs_btnode_cache_clear (struct address_space *btnc)
fs/nilfs2/gcinode.c +1 -1
@@ -163,7 +163,7 @@ int nilfs_init_gcinode(struct inode *inode) inode->i_mode =S_IFREG ;mapping_set_gfp_mask (inode->i_mapping,GFP_NOFS ); - inode->i_mapping->a_ops = &empty_aops; + inode->i_mapping->a_ops = &nilfs_buffer_cache_aops; ii->i_flags =0 ;nilfs_bmap_init_gc (ii->i_bmap);
fs/nilfs2/inode.c +12 -1
@@ -309,6 +309,10 @@ const struct address_space_operations nilfs_aops = { .is_partially_uptodate = block_is_partially_uptodate, }; +const struct address_space_operations nilfs_buffer_cache_aops = { + .invalidate_folio = block_invalidate_folio, +}; +static int nilfs_insert_inode_locked (struct inode *inode,struct nilfs_root *root,unsigned long ino)
@@ -614,8 +618,14 @@ struct inode *nilfs_iget(struct super_block *sb, struct nilfs_root *root, inode =nilfs_iget_locked (sb, root, ino);if (unlikely (!inode))return ERR_PTR (-ENOMEM ); -if (!(inode->i_state &I_NEW )) + +if (!(inode->i_state &I_NEW )) { +if (!inode->i_nlink) { +iput (inode); +return ERR_PTR (-ESTALE ); + }return inode; + } err =__nilfs_read_inode (sb, root, ino, inode);if (unlikely (err)) {
@@ -748,6 +758,7 @@ struct inode *nilfs_iget_for_shadow(struct inode *inode)NILFS_I (s_inode)->i_flags =0 ;memset (NILFS_I (s_inode)->i_bmap,0 ,sizeof (struct nilfs_bmap ));mapping_set_gfp_mask (s_inode->i_mapping,GFP_NOFS ); + s_inode->i_mapping->a_ops = &nilfs_buffer_cache_aops; err =nilfs_attach_btree_node_cache (s_inode);if (unlikely (err)) {
fs/nilfs2/namei.c +5 -0
@@ -67,6 +67,11 @@ nilfs_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) inode =NULL ; }else { inode =nilfs_iget (dir->i_sb,NILFS_I (dir)->i_root, ino); +if (inode ==ERR_PTR (-ESTALE )) { +nilfs_error (dir->i_sb, +"deleted inode referenced: %lu" , ino); +return ERR_PTR (-EIO ); + } }return d_splice_alias (inode, dentry);
fs/nilfs2/nilfs.h +1 -0
@@ -379,6 +379,7 @@ extern const struct file_operations nilfs_dir_operations;extern const struct inode_operations nilfs_file_inode_operations;extern const struct file_operations nilfs_file_operations;extern const struct address_space_operations nilfs_aops; +extern const struct address_space_operations nilfs_buffer_cache_aops;extern const struct inode_operations nilfs_dir_inode_operations;extern const struct inode_operations nilfs_special_inode_operations;extern const struct inode_operations nilfs_symlink_inode_operations;
fs/udf/directory.c +1 -1
@@ -170,7 +170,7 @@ static struct buffer_head *udf_fiiter_bread_blk(struct udf_fileident_iter *iter)static int udf_fiiter_advance_blk (struct udf_fileident_iter *iter) { iter->loffset++; -if (iter->loffset < iter->elen >> iter->dir->i_blkbits) +if (iter->loffset <DIV_ROUND_UP (iter->elen,1 <<iter->dir->i_blkbits))return 0 ; iter->loffset =0 ;
include/linux/hyperv.h +1 -0
@@ -1567,6 +1567,7 @@ struct hv_util_service {void *channel;void (*util_cb)(void *);int (*util_init)(struct hv_util_service *); +int (*util_init_transport)(void );void (*util_deinit)(void );int (*util_pre_suspend)(void );int (*util_pre_resume)(void );
include/linux/io_uring.h +1 -3
@@ -50,10 +50,8 @@ bool io_is_uring_fops(struct file *file);static inline void io_uring_files_cancel (void ) { -if (current->io_uring) { -io_uring_unreg_ringfd (); +if (current->io_uring)__io_uring_cancel (false); - } }static inline void io_uring_task_cancel (void ) {
include/linux/pci.h +7 -8
@@ -1996,14 +1996,13 @@ int pci_iobar_pfn(struct pci_dev *pdev, int bar, struct vm_area_struct *vma);* These helpers provide future and backwards compatibility * for accessing popular PCI BAR info */ -#define pci_resource_start (dev, bar) ((dev)->resource[(bar)].start) -#define pci_resource_end (dev, bar) ((dev)->resource[(bar)].end) -#define pci_resource_flags (dev, bar) ((dev)->resource[(bar)].flags) -#define pci_resource_len (dev,bar) \ - ((pci_resource_end((dev), (bar)) == 0) ? 0 : \ - \ - (pci_resource_end((dev), (bar)) - \ - pci_resource_start((dev), (bar)) + 1)) +#define pci_resource_n (dev, bar) (&(dev)->resource[(bar)]) +#define pci_resource_start (dev, bar) (pci_resource_n(dev, bar)->start) +#define pci_resource_end (dev, bar) (pci_resource_n(dev, bar)->end) +#define pci_resource_flags (dev, bar) (pci_resource_n(dev, bar)->flags) +#define pci_resource_len (dev,bar) \ + (pci_resource_end((dev), (bar)) ? \ + resource_size(pci_resource_n((dev), (bar))) : 0)/* * Similar to the helpers above, these manipulate per-pci_dev
include/linux/wait.h +1 -0
@@ -224,6 +224,7 @@ void __wake_up_pollfree(struct wait_queue_head *wq_head);#define wake_up_all (x) __wake_up(x, TASK_NORMAL, 0, NULL)#define wake_up_locked (x) __wake_up_locked((x), TASK_NORMAL, 1)#define wake_up_all_locked (x) __wake_up_locked((x), TASK_NORMAL, 0) +#define wake_up_sync (x) __wake_up_sync(x, TASK_NORMAL)#define wake_up_interruptible (x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)#define wake_up_interruptible_nr (x, nr) __wake_up(x, TASK_INTERRUPTIBLE, nr, NULL)
io_uring/io_uring.c +9 -4
@@ -434,13 +434,17 @@ static void io_prep_async_link(struct io_kiocb *req) } } -void io_queue_iowq (struct io_kiocb *req,bool *dont_use) +static void io_queue_iowq (struct io_kiocb *req) {struct io_kiocb *link =io_prep_linked_timeout (req);struct io_uring_task *tctx = req->task->io_uring;BUG_ON (!tctx); -BUG_ON (!tctx->io_wq); + +if ((current->flags &PF_KTHREAD ) || !tctx->io_wq) { +io_req_task_queue_fail (req, -ECANCELED ); +return ; + }/* init ->work of the whole link before punting */ io_prep_async_link (req);
@@ -1909,7 +1913,7 @@ static void io_queue_async(struct io_kiocb *req, int ret)break ;case IO_APOLL_ABORTED :io_kbuf_recycle (req,0 ); -io_queue_iowq (req,NULL ); +io_queue_iowq (req);break ;case IO_APOLL_OK :break ;
@@ -1958,7 +1962,7 @@ static void io_queue_sqe_fallback(struct io_kiocb *req)if (unlikely (req->ctx->drain_active))io_drain_req (req);else -io_queue_iowq (req,NULL ); +io_queue_iowq (req); } }
@@ -3085,6 +3089,7 @@ __cold void io_uring_cancel_generic(bool cancel_all, struct io_sq_data *sqd)void __io_uring_cancel (bool cancel_all) { +io_uring_unreg_ringfd ();io_uring_cancel_generic (cancel_all,NULL ); }
io_uring/io_uring.h +0 -1
@@ -54,7 +54,6 @@ static inline bool io_req_ffs_set(struct io_kiocb *req)void __io_req_task_work_add (struct io_kiocb *req,bool allow_local);bool io_alloc_async_data (struct io_kiocb *req);void io_req_task_queue (struct io_kiocb *req); -void io_queue_iowq (struct io_kiocb *req,bool *dont_use);void io_req_task_complete (struct io_kiocb *req,bool *locked);void io_req_task_queue_fail (struct io_kiocb *req,int ret);void io_req_task_submit (struct io_kiocb *req,bool *locked);
io_uring/rw.c +22 -9
@@ -167,12 +167,6 @@ static inline loff_t *io_kiocb_update_pos(struct io_kiocb *req)return NULL ; } -static void io_req_task_queue_reissue (struct io_kiocb *req) -{ - req->io_task_work.func = io_queue_iowq; -io_req_task_work_add (req); -} -#ifdef CONFIG_BLOCK static bool io_resubmit_prep (struct io_kiocb *req) {
@@ -341,7 +335,7 @@ static int kiocb_done(struct io_kiocb *req, ssize_t ret,if (req->flags &REQ_F_REISSUE ) { req->flags &= ~REQ_F_REISSUE ;if (io_resubmit_prep (req)) -io_req_task_queue_reissue (req); +return -EAGAIN ;else io_req_task_queue_fail (req, final_ret); }
@@ -691,7 +685,7 @@ static int io_rw_init_file(struct io_kiocb *req, fmode_t mode)return 0 ; } -int io_read (struct io_kiocb *req,unsigned int issue_flags) +static int __io_read (struct io_kiocb *req,unsigned int issue_flags) { struct io_rw *rw = io_kiocb_to_cmd(req, struct io_rw);struct io_rw_state __s, *s = &__s;
@@ -757,6 +751,14 @@ int io_read(struct io_kiocb *req, unsigned int issue_flags) ret =io_iter_do_read (rw, &s->iter); +/* +* Some file systems like to return -EOPNOTSUPP for an IOCB_NOWAIT +* issue, even though they should be returning -EAGAIN. To be safe, +* retry from blocking context for either. +*/ +if (ret == -EOPNOTSUPP && force_nonblock) + ret = -EAGAIN ; +if (ret == -EAGAIN || (req->flags &REQ_F_REISSUE )) { req->flags &= ~REQ_F_REISSUE ;/* if we can poll, just do that */
@@ -836,7 +838,18 @@ int io_read(struct io_kiocb *req, unsigned int issue_flags)/* it's faster to check here then delegate to kfree */ if (iovec)kfree (iovec); -return kiocb_done (req, ret, issue_flags); +return ret; +} + +int io_read (struct io_kiocb *req,unsigned int issue_flags) +{ +int ret; + + ret =__io_read (req, issue_flags); +if (ret >=0 ) +return kiocb_done (req, ret, issue_flags); + +return ret; }static bool io_kiocb_start_write (struct io_kiocb *req,struct kiocb *kiocb)
kernel/trace/trace_events.c +156 -41
254 lines not on this page · raw message
net/netfilter/ipset/ip_set_list_set.c +3 -0
@@ -611,6 +611,8 @@ init_list_set(struct net *net, struct ip_set *set, u32 size)return true; } +static struct lock_class_key list_set_lockdep_key; +static int list_set_create (struct net *net,struct ip_set *set,struct nlattr *tb[],u32 flags)
@@ -627,6 +629,7 @@ list_set_create(struct net *net, struct ip_set *set, struct nlattr *tb[],if (size <IP_SET_LIST_MIN_SIZE ) size =IP_SET_LIST_MIN_SIZE ; +lockdep_set_class (&set->lock, &list_set_lockdep_key); set->variant = &set_variant; set->dsize =ip_set_elem_len (set, tb,sizeof (struct set_elem ), __alignof__(struct set_elem ));
net/sched/sch_cake.c +1 -1
@@ -1541,7 +1541,6 @@ static unsigned int cake_drop(struct Qdisc *sch, struct sk_buff **to_free) b->backlogs[idx] -= len; b->tin_backlog -= len; sch->qstats.backlog -= len; -qdisc_tree_reduce_backlog (sch,1 , len); flow->dropped++; b->tin_dropped++;
@@ -1552,6 +1551,7 @@ static unsigned int cake_drop(struct Qdisc *sch, struct sk_buff **to_free)__qdisc_drop (skb, to_free); sch->q.qlen--; +qdisc_tree_reduce_backlog (sch,1 , len);cake_heapify (q,0 );
net/sched/sch_choke.c +1 -1
@@ -123,10 +123,10 @@ static void choke_drop_by_idx(struct Qdisc *sch, unsigned int idx,if (idx == q->tail)choke_zap_tail_holes (q); + --sch->q.qlen;qdisc_qstats_backlog_dec (sch, skb);qdisc_tree_reduce_backlog (sch,1 ,qdisc_pkt_len (skb));qdisc_drop (skb, sch, to_free); - --sch->q.qlen; }struct choke_skb_cb {
net/smc/af_smc.c +14 -1
@@ -1988,6 +1988,8 @@ static int smc_listen_prfx_check(struct smc_sock *new_smc,if (pclc->hdr.typev1 ==SMC_TYPE_N )return 0 ; pclc_prfx =smc_clc_proposal_get_prefix (pclc); +if (!pclc_prfx) +return -EPROTO ;if (smc_clc_prfx_match (newclcsock, pclc_prfx))return SMC_CLC_DECL_DIFFPREFIX ;
@@ -2094,6 +2096,8 @@ static void smc_find_ism_v2_device_serv(struct smc_sock *new_smc, pclc_smcd =smc_get_clc_msg_smcd (pclc); smc_v2_ext =smc_get_clc_v2_ext (pclc); smcd_v2_ext =smc_get_clc_smcd_v2_ext (smc_v2_ext); +if (!pclc_smcd || !smc_v2_ext || !smcd_v2_ext) + goto not_found;mutex_lock (&smcd_dev_list.mutex);if (pclc_smcd->ism.chid)
@@ -2153,7 +2157,9 @@ static void smc_find_ism_v1_device_serv(struct smc_sock *new_smc,int rc =0 ;/* check if ISM V1 is available */ -if (!(ini->smcd_version &SMC_V1 ) || !smcd_indicated (ini->smc_type_v1)) +if (!(ini->smcd_version &SMC_V1 ) || + !smcd_indicated (ini->smc_type_v1) || + !pclc_smcd) goto not_found; ini->is_smcd = true;/* prepare ISM check */ ini->ism_peer_gid[0 ] =ntohll (pclc_smcd->ism.gid);
@@ -2789,6 +2795,13 @@ static __poll_t smc_poll(struct file *file, struct socket *sock, }else {sk_set_bit (SOCKWQ_ASYNC_NOSPACE , sk);set_bit (SOCK_NOSPACE , &sk->sk_socket->flags); + +if (sk->sk_state !=SMC_INIT ) { +/* Race breaker the same way as tcp_poll(). */ +smp_mb__after_atomic (); +if (atomic_read (&smc->conn.sndbuf_space)) + mask |=EPOLLOUT |EPOLLWRNORM ; + } }if (atomic_read (&smc->conn.bytes_to_rcv)) mask |=EPOLLIN |EPOLLRDNORM ;
net/smc/smc_clc.c +9 -0
@@ -354,6 +354,10 @@ static bool smc_clc_msg_prop_valid(struct smc_clc_msg_proposal *pclc) v2_ext =smc_get_clc_v2_ext (pclc); pclc_prfx =smc_clc_proposal_get_prefix (pclc); +if (!pclc_prfx || + pclc_prfx->ipv6_prefixes_cnt >SMC_CLC_MAX_V6_PREFIX ) +return false; +if (hdr->version ==SMC_V1 ) {if (hdr->typev1 ==SMC_TYPE_N )return false;
@@ -749,6 +753,11 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen, SMC_CLC_RECV_BUF_LEN : datlen;iov_iter_kvec (&msg.msg_iter,ITER_DEST , &vec,1 , recvlen); len =sock_recvmsg (smc->clcsock, &msg, krflags); +if (len < recvlen) { + smc->sk.sk_err =EPROTO ; + reason_code = -EPROTO ; + goto out; + } datlen -= len; }if (clcm->type ==SMC_CLC_DECLINE ) {
net/smc/smc_clc.h +12 -2
@@ -303,8 +303,12 @@ struct smc_clc_msg_decline_v2 { /* clc decline message */static inline struct smc_clc_msg_proposal_prefix *smc_clc_proposal_get_prefix (struct smc_clc_msg_proposal *pclc) { +u16 offset =ntohs (pclc->iparea_offset); + +if (offset >sizeof (struct smc_clc_msg_smcd )) +return NULL ;return (struct smc_clc_msg_proposal_prefix *) - ((u8 *)pclc +sizeof (*pclc) +ntohs (pclc->iparea_offset)); + ((u8 *)pclc +sizeof (*pclc) + offset); }static inline bool smcr_indicated (int smc_type)
@@ -357,9 +361,15 @@ smc_get_clc_v2_ext(struct smc_clc_msg_proposal *prop)static inline struct smc_clc_smcd_v2_extension *smc_get_clc_smcd_v2_ext (struct smc_clc_v2_extension *prop_v2ext) { +u16 max_offset = offsetof(struct smc_clc_msg_proposal_area , pclc_smcd_v2_ext) - + offsetof(struct smc_clc_msg_proposal_area , pclc_v2_ext) - + offsetof(struct smc_clc_v2_extension , hdr) - + offsetofend(struct smc_clnt_opts_area_hdr, smcd_v2_ext_offset); +if (!prop_v2ext)return NULL ; -if (!ntohs (prop_v2ext->hdr.smcd_v2_ext_offset)) +if (!ntohs (prop_v2ext->hdr.smcd_v2_ext_offset) || +ntohs (prop_v2ext->hdr.smcd_v2_ext_offset) > max_offset)return NULL ; return (struct smc_clc_smcd_v2_extension *)
net/smc/smc_core.c +7 -2
@@ -1726,7 +1726,9 @@ void smcr_link_down_cond_sched(struct smc_link *lnk) {if (smc_link_downing (&lnk->state)) {trace_smcr_link_down (lnk,__builtin_return_address (0 )); -schedule_work (&lnk->link_down_wrk); +smcr_link_hold (lnk);/* smcr_link_put in link_down_wrk */ +if (!schedule_work (&lnk->link_down_wrk)) +smcr_link_put (lnk); } }
@@ -1758,11 +1760,14 @@ static void smc_link_down_work(struct work_struct *work)struct smc_link_group *lgr = link->lgr;if (list_empty (&lgr->list)) -return ; + goto out;wake_up_all (&lgr->llc_msg_waiter);mutex_lock (&lgr->llc_conf_mutex);smcr_link_down (link);mutex_unlock (&lgr->llc_conf_mutex); + +out: +smcr_link_put (link);/* smcr_link_hold by schedulers of link_down_work */ } static int smc_vlan_by_tcpsk_walk(struct net_device *lower_dev,
sound/soc/intel/boards/sof_sdw.c +18 -0
@@ -267,6 +267,15 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {SOF_BT_OFFLOAD_SSP (2 ) | SOF_SSP_BT_OFFLOAD_PRESENT), }, + { + .callback = sof_sdw_quirk_cb, + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"Intel Corporation" ), + DMI_MATCH(DMI_PRODUCT_SKU, "0000000000070000"), + }, + .driver_data = (void *)(SOF_SDW_TGL_HDMI | + RT711_JD2_100K), + }, { .callback = sof_sdw_quirk_cb, .matches = {
@@ -378,6 +387,15 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {RT711_JD2 | SOF_SDW_FOUR_SPK), }, + { + .callback = sof_sdw_quirk_cb, + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Inc" ), + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0B8C"), + }, + .driver_data = (void *)(SOF_SDW_TGL_HDMI | + RT711_JD2), + }, { .callback = sof_sdw_quirk_cb, .matches = {
tools/testing/selftests/bpf/sdt.h +2 -0
@@ -102,6 +102,8 @@# define STAP_SDT_ARG_CONSTRAINT nZr# elif defined __arm__# define STAP_SDT_ARG_CONSTRAINT g +# elif defined __loongarch__ +# define STAP_SDT_ARG_CONSTRAINT nmr# else # define STAP_SDT_ARG_CONSTRAINT nor# endif