Linux 5.15.7
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 6 +SUBLEVEL = 7 EXTRAVERSION = NAME = Trick or Treat
arch/arm64/include/asm/kvm_arm.h +2 -2
@@ -91,7 +91,7 @@#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H)/* TCR_EL2 Registers bits */ -#define TCR_EL2_RES1 ((1 << 31) | (1 << 23)) +#define TCR_EL2_RES1 ((1U << 31) | (1 << 23))#define TCR_EL2_TBI (1 << 20)#define TCR_EL2_PS_SHIFT 16#define TCR_EL2_PS_MASK (7 << TCR_EL2_PS_SHIFT)
@@ -276,7 +276,7 @@#define CPTR_EL2_TFP_SHIFT 10/* Hyp Coprocessor Trap Register */ -#define CPTR_EL2_TCPAC (1 << 31) +#define CPTR_EL2_TCPAC (1U << 31)#define CPTR_EL2_TAM (1 << 30)#define CPTR_EL2_TTA (1 << 20)#define CPTR_EL2_TFP (1 << CPTR_EL2_TFP_SHIFT)
arch/arm64/kernel/entry-ftrace.S +6 -0
@@ -77,11 +77,17 @@ .endm SYM_CODE_START(ftrace_regs_caller) +#ifdef BTI_C + BTI_C +#endif ftrace_regs_entry 1 b ftrace_common SYM_CODE_END(ftrace_regs_caller) SYM_CODE_START(ftrace_caller) +#ifdef BTI_C + BTI_C +#endif ftrace_regs_entry 0 b ftrace_common SYM_CODE_END(ftrace_caller)
arch/parisc/Makefile +5 -0
@@ -17,7 +17,12 @@ # Mike Shaver, Helge Deller and Martin K. Petersen # +ifdef CONFIG_PARISC_SELF_EXTRACT +boot := arch/parisc/boot +KBUILD_IMAGE := $(boot)/bzImage +else KBUILD_IMAGE := vmlinuz +endif NM = sh $(srctree)/arch/parisc/nm CHECKFLAGS += -D__hppa__=1
arch/parisc/install.sh +1 -0
@@ -39,6 +39,7 @@ verify "$3" if [ -n "${INSTALLKERNEL}" ]; then if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi + if [ -x /usr/sbin/${INSTALLKERNEL} ]; then exec /usr/sbin/${INSTALLKERNEL} "$@"; fi fi # Default install
arch/parisc/kernel/time.c +8 -22
@@ -249,30 +249,16 @@ void __init time_init(void)static int __init init_cr16_clocksource (void ) {/* -* The cr16 interval timers are not syncronized across CPUs on -* different sockets, so mark them unstable and lower rating on -* multi-socket SMP systems. +* The cr16 interval timers are not syncronized across CPUs, even if +* they share the same socket. */ if (num_online_cpus () >1 && !running_on_qemu) { -int cpu; -unsigned long cpu0_loc; - cpu0_loc =per_cpu (cpu_data,0 ).cpu_loc; - -for_each_online_cpu (cpu) { -if (cpu ==0 ) -continue ; -if ((cpu0_loc !=0 ) && - (cpu0_loc ==per_cpu (cpu_data, cpu).cpu_loc)) -continue ; - -/* mark sched_clock unstable */ -clear_sched_clock_stable (); - - clocksource_cr16.name ="cr16_unstable" ; - clocksource_cr16.flags =CLOCK_SOURCE_UNSTABLE ; - clocksource_cr16.rating =0 ; -break ; - } +/* mark sched_clock unstable */ +clear_sched_clock_stable (); + + clocksource_cr16.name ="cr16_unstable" ; + clocksource_cr16.flags =CLOCK_SOURCE_UNSTABLE ; + clocksource_cr16.rating =0 ; }/* register at clocksource framework */
arch/powerpc/platforms/pseries/iommu.c +4 -11
@@ -1092,15 +1092,6 @@ static phys_addr_t ddw_memory_hotplug_max(void)phys_addr_t max_addr =memory_hotplug_max ();struct device_node *memory; -/* -* The "ibm,pmemory" can appear anywhere in the address space. -* Assuming it is still backed by page structs, set the upper limit -* for the huge DMA window as MAX_PHYSMEM_BITS. -*/ -if (of_find_node_by_type (NULL ,"ibm,pmemory" )) -return (sizeof (phys_addr_t) *8 <=MAX_PHYSMEM_BITS ) ? - (phys_addr_t) -1 : (1ULL <<MAX_PHYSMEM_BITS ); -for_each_node_by_type (memory,"memory" ) {unsigned long start, size;int n_mem_addr_cells, n_mem_size_cells, len;
@@ -1365,8 +1356,10 @@ static bool enable_ddw(struct pci_dev *dev, struct device_node *pdn) len =order_base_2 (query.largest_available_block << page_shift); win_name =DMA64_PROPNAME ; }else { - direct_mapping = true; - win_name =DIRECT64_PROPNAME ; + direct_mapping = !default_win_removed || + (len ==MAX_PHYSMEM_BITS ) || + (!pmem_present && (len == max_ram_len)); + win_name = direct_mapping ?DIRECT64_PROPNAME :DMA64_PROPNAME ; } ret =create_ddw (dev, ddw_avail, &create, page_shift, len);
arch/s390/include/asm/pci_io.h +4 -3
@@ -14,12 +14,13 @@/* I/O Map */ #define ZPCI_IOMAP_SHIFT 48 -#define ZPCI_IOMAP_ADDR_BASE 0x8000000000000000UL +#define ZPCI_IOMAP_ADDR_SHIFT 62 +#define ZPCI_IOMAP_ADDR_BASE (1UL << ZPCI_IOMAP_ADDR_SHIFT)#define ZPCI_IOMAP_ADDR_OFF_MASK ((1UL << ZPCI_IOMAP_SHIFT) - 1)#define ZPCI_IOMAP_MAX_ENTRIES \ - ((ULONG_MAX - ZPCI_IOMAP_ADDR_BASE + 1) / (1UL << ZPCI_IOMAP_SHIFT)) + (1UL << (ZPCI_IOMAP_ADDR_SHIFT - ZPCI_IOMAP_SHIFT))#define ZPCI_IOMAP_ADDR_IDX_MASK \ - (~ZPCI_IOMAP_ADDR_OFF_MASK - ZPCI_IOMAP_ADDR_BASE) + ((ZPCI_IOMAP_ADDR_BASE - 1) & ~ZPCI_IOMAP_ADDR_OFF_MASK)struct zpci_iomap_entry {u32 fh;
arch/s390/kernel/setup.c +0 -3
@@ -816,9 +816,6 @@ static void __init setup_memory(void)storage_key_init_range (start, end);psw_set_key (PAGE_DEFAULT_KEY ); - -/* Only cosmetics */ -memblock_enforce_memory_limit (memblock_end_of_DRAM ()); }static void __init relocate_amode31_section (void )
arch/x86/entry/entry_64.S +17 -18
@@ -574,6 +574,10 @@ SYM_INNER_LABEL(swapgs_restore_regs_and_return_to_usermode, SYM_L_GLOBAL) ud2 1: #endif +#ifdef CONFIG_XEN_PV + ALTERNATIVE "", "jmp xenpv_restore_regs_and_return_to_usermode", X86_FEATURE_XENPV +#endif + POP_REGS pop_rdi=0 /*
@@ -890,6 +894,7 @@ SYM_CODE_START_LOCAL(paranoid_entry) .Lparanoid_entry_checkgs: /* EBX = 1 -> kernel GSBASE active, no restore required */ movl $1, %ebx + /* * The kernel-enforced convention is a negative GSBASE indicates * a kernel value. No SWAPGS needed on entry and exit.
@@ -897,21 +902,14 @@ SYM_CODE_START_LOCAL(paranoid_entry) movl $MSR_GS_BASE, %ecx rdmsr testl %edx, %edx - jns .Lparanoid_entry_swapgs - ret + js .Lparanoid_kernel_gsbase -.Lparanoid_entry_swapgs: + /* EBX = 0 -> SWAPGS required on exit */ + xorl %ebx, %ebx swapgs +.Lparanoid_kernel_gsbase: - /* - * The above SAVE_AND_SWITCH_TO_KERNEL_CR3 macro doesn't do an - * unconditional CR3 write, even in the PTI case. So do an lfence - * to prevent GS speculation, regardless of whether PTI is enabled. - */ FENCE_SWAPGS_KERNEL_ENTRY - - /* EBX = 0 -> SWAPGS required on exit */ - xorl %ebx, %ebx ret SYM_CODE_END(paranoid_entry)
@@ -993,11 +991,6 @@ SYM_CODE_START_LOCAL(error_entry) pushq %r12 ret -.Lerror_entry_done_lfence: - FENCE_SWAPGS_KERNEL_ENTRY -.Lerror_entry_done: - ret - /* * There are two places in the kernel that can potentially fault with * usergs. Handle them here. B stepping K8s sometimes report a
@@ -1020,8 +1013,14 @@ SYM_CODE_START_LOCAL(error_entry) * .Lgs_change's error handler with kernel gsbase. */ SWAPGS - FENCE_SWAPGS_USER_ENTRY - jmp .Lerror_entry_done + + /* + * Issue an LFENCE to prevent GS speculation, regardless of whether it is a + * kernel or user gsbase. + */ +.Lerror_entry_done_lfence: + FENCE_SWAPGS_KERNEL_ENTRY + ret .Lbstep_iret: /* Fix truncated RIP */
arch/x86/hyperv/hv_init.c +1 -8
@@ -348,20 +348,13 @@ static void __init hv_get_partition_id(void)*/ void __init hyperv_init (void ) { -u64 guest_id, required_msrs; +u64 guest_id;union hv_x64_msr_hypercall_contents hypercall_msr;int cpuhp;if (x86_hyper_type !=X86_HYPER_MS_HYPERV )return ; -/* Absolutely required MSRs */ - required_msrs =HV_MSR_HYPERCALL_AVAILABLE | -HV_MSR_VP_INDEX_AVAILABLE ; - -if ((ms_hyperv.features & required_msrs) != required_msrs) -return ; -if (hv_common_init ())return ;
arch/x86/kernel/cpu/mshyperv.c +15 -5
@@ -163,12 +163,22 @@ static uint32_t __init ms_hyperv_platform(void)cpuid (HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS , &eax, &hyp_signature[0 ], &hyp_signature[1 ], &hyp_signature[2 ]); -if (eax >=HYPERV_CPUID_MIN && - eax <=HYPERV_CPUID_MAX && - !memcmp ("Microsoft Hv" , hyp_signature,12 )) -return HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS ; +if (eax <HYPERV_CPUID_MIN || eax >HYPERV_CPUID_MAX || +memcmp ("Microsoft Hv" , hyp_signature,12 )) +return 0 ; -return 0 ; +/* HYPERCALL and VP_INDEX MSRs are mandatory for all features. */ + eax =cpuid_eax (HYPERV_CPUID_FEATURES ); +if (!(eax &HV_MSR_HYPERCALL_AVAILABLE )) { +pr_warn ("x86/hyperv: HYPERCALL MSR not available.\n" ); +return 0 ; + } +if (!(eax &HV_MSR_VP_INDEX_AVAILABLE )) { +pr_warn ("x86/hyperv: VP_INDEX MSR not available.\n" ); +return 0 ; + } + +return HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS ; }static unsigned char hv_get_nmi_reason (void )
arch/x86/kernel/sev.c +39 -18
113 lines not on this page · raw message
arch/x86/kernel/tsc.c +24 -4
@@ -1180,6 +1180,12 @@ void mark_tsc_unstable(char *reason)EXPORT_SYMBOL_GPL (mark_tsc_unstable); +static void __init tsc_disable_clocksource_watchdog (void ) +{ + clocksource_tsc_early.flags &= ~CLOCK_SOURCE_MUST_VERIFY ; + clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY ; +} +static void __init check_system_tsc_reliable (void ) {#if defined(CONFIG_MGEODEGX1 ) || defined(CONFIG_MGEODE_LX ) || defined(CONFIG_X86_GENERIC )
@@ -1196,6 +1202,23 @@ static void __init check_system_tsc_reliable(void)#endif if (boot_cpu_has (X86_FEATURE_TSC_RELIABLE )) tsc_clocksource_reliable =1 ; + +/* +* Disable the clocksource watchdog when the system has: +* - TSC running at constant frequency +* - TSC which does not stop in C-States +* - the TSC_ADJUST register which allows to detect even minimal +* modifications +* - not more than two sockets. As the number of sockets cannot be +* evaluated at the early boot stage where this has to be +* invoked, check the number of online memory nodes as a +* fallback solution which is an reasonable estimate. +*/ +if (boot_cpu_has (X86_FEATURE_CONSTANT_TSC ) && +boot_cpu_has (X86_FEATURE_NONSTOP_TSC ) && +boot_cpu_has (X86_FEATURE_TSC_ADJUST ) && + nr_online_nodes <=2 ) +tsc_disable_clocksource_watchdog (); }/*
@@ -1387,9 +1410,6 @@ static int __init init_tsc_clocksource(void)if (tsc_unstable) goto unreg; -if (tsc_clocksource_reliable || no_tsc_watchdog) - clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY ; -if (boot_cpu_has (X86_FEATURE_NONSTOP_TSC_S3 )) clocksource_tsc.flags |=CLOCK_SOURCE_SUSPEND_NONSTOP ;
@@ -1527,7 +1547,7 @@ void __init tsc_init(void) }if (tsc_clocksource_reliable || no_tsc_watchdog) - clocksource_tsc_early.flags &= ~CLOCK_SOURCE_MUST_VERIFY ; +tsc_disable_clocksource_watchdog ();clocksource_register_khz (&clocksource_tsc_early, tsc_khz);detect_art ();
arch/x86/kernel/tsc_sync.c +41 -0
53 lines not on this page · raw message
arch/x86/kvm/lapic.c +1 -1
@@ -707,7 +707,7 @@ static void pv_eoi_clr_pending(struct kvm_vcpu *vcpu)static int apic_has_interrupt_for_ppr (struct kvm_lapic *apic,u32 ppr) {int highest_irr; -if (apic->vcpu->arch.apicv_active) +if (kvm_x86_ops.sync_pir_to_irr) highest_irr =static_call (kvm_x86_sync_pir_to_irr)(apic->vcpu);else highest_irr =apic_find_highest_irr (apic);
arch/x86/kvm/mmu/mmu.c +20 -17
@@ -1592,7 +1592,7 @@ bool kvm_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range) flush =kvm_handle_gfn_range (kvm, range, kvm_unmap_rmapp);if (is_tdp_mmu_enabled (kvm)) - flush |=kvm_tdp_mmu_unmap_gfn_range (kvm, range, flush); + flush =kvm_tdp_mmu_unmap_gfn_range (kvm, range, flush);return flush; }
@@ -2188,10 +2188,10 @@ static void shadow_walk_init_using_root(struct kvm_shadow_walk_iterator *iterato iterator->shadow_addr = root; iterator->level = vcpu->arch.mmu->shadow_root_level; -if (iterator->level ==PT64_ROOT_4LEVEL && +if (iterator->level >=PT64_ROOT_4LEVEL && vcpu->arch.mmu->root_level <PT64_ROOT_4LEVEL && !vcpu->arch.mmu->direct_map) - --iterator->level; + iterator->level =PT32E_ROOT_LEVEL ;if (iterator->level ==PT32E_ROOT_LEVEL ) {/*
@@ -4852,7 +4852,7 @@ void kvm_init_shadow_npt_mmu(struct kvm_vcpu *vcpu, unsigned long cr0,struct kvm_mmu *context = &vcpu->arch.guest_mmu;struct kvm_mmu_role_regs regs = { .cr0 = cr0, - .cr4 = cr4, + .cr4 = cr4 & ~X86_CR4_PKE , .efer = efer, };union kvm_mmu_role new_role;
@@ -4916,7 +4916,7 @@ void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly, context->direct_map = false;update_permission_bitmask (context, true); -update_pkru_bitmask (context); + context->pkru_mask =0 ;reset_rsvds_bits_mask_ept (vcpu, context, execonly);reset_ept_shadow_zero_bits_mask (vcpu, context, execonly); }
@@ -5369,7 +5369,7 @@ void kvm_mmu_invalidate_gva(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,void kvm_mmu_invlpg (struct kvm_vcpu *vcpu,gva_t gva) { -kvm_mmu_invalidate_gva (vcpu, vcpu->arch.mmu, gva,INVALID_PAGE ); +kvm_mmu_invalidate_gva (vcpu, vcpu->arch.walk_mmu, gva,INVALID_PAGE ); ++vcpu->stat.invlpg; }EXPORT_SYMBOL_GPL (kvm_mmu_invlpg);
@@ -5474,8 +5474,8 @@ slot_handle_level(struct kvm *kvm, const struct kvm_memory_slot *memslot, } static __always_inline bool -slot_handle_leaf (struct kvm *kvm,const struct kvm_memory_slot *memslot, -slot_level_handler fn,bool flush_on_yield) +slot_handle_level_4k (struct kvm *kvm,const struct kvm_memory_slot *memslot, +slot_level_handler fn,bool flush_on_yield) {return slot_handle_level (kvm, memslot, fn,PG_LEVEL_4K ,PG_LEVEL_4K , flush_on_yield);
@@ -5855,21 +5855,21 @@ static bool kvm_mmu_zap_collapsible_spte(struct kvm *kvm,void kvm_mmu_zap_collapsible_sptes (struct kvm *kvm,const struct kvm_memory_slot *slot) { -bool flush = false; -if (kvm_memslots_have_rmaps (kvm)) {write_lock (&kvm->mmu_lock); - flush =slot_handle_leaf (kvm, slot, kvm_mmu_zap_collapsible_spte, true); -if (flush) +/* +* Zap only 4k SPTEs since the legacy MMU only supports dirty +* logging at a 4k granularity and never creates collapsible +* 2m SPTEs during dirty logging. +*/ +if (slot_handle_level_4k (kvm, slot, kvm_mmu_zap_collapsible_spte, true))kvm_arch_flush_remote_tlbs_memslot (kvm, slot);write_unlock (&kvm->mmu_lock); }if (is_tdp_mmu_enabled (kvm)) {read_lock (&kvm->mmu_lock); - flush =kvm_tdp_mmu_zap_collapsible_sptes (kvm, slot, flush); -if (flush) -kvm_arch_flush_remote_tlbs_memslot (kvm, slot); +kvm_tdp_mmu_zap_collapsible_sptes (kvm, slot);read_unlock (&kvm->mmu_lock); } }
@@ -5896,8 +5896,11 @@ void kvm_mmu_slot_leaf_clear_dirty(struct kvm *kvm,if (kvm_memslots_have_rmaps (kvm)) {write_lock (&kvm->mmu_lock); - flush =slot_handle_leaf (kvm, memslot, __rmap_clear_dirty, - false); +/* +* Clear dirty bits only on 4k SPTEs since the legacy MMU only +* support dirty logging at a 4k granularity. +*/ + flush =slot_handle_level_4k (kvm, memslot, __rmap_clear_dirty, false);write_unlock (&kvm->mmu_lock); }
arch/x86/kvm/mmu/tdp_mmu.c +13 -23
@@ -316,9 +316,6 @@ static void handle_removed_tdp_mmu_page(struct kvm *kvm, tdp_ptep_t pt,struct kvm_mmu_page *sp =sptep_to_sp (rcu_dereference (pt));int level = sp->role.level;gfn_t base_gfn = sp->gfn; -u64 old_child_spte; -u64 *sptep; -gfn_t gfn;int i;trace_kvm_mmu_prepare_zap_page (sp);
@@ -326,8 +323,9 @@ static void handle_removed_tdp_mmu_page(struct kvm *kvm, tdp_ptep_t pt,tdp_mmu_unlink_page (kvm, sp, shared);for (i =0 ; i <PT64_ENT_PER_PAGE ; i++) { - sptep =rcu_dereference (pt) + i; - gfn = base_gfn + i *KVM_PAGES_PER_HPAGE (level); +u64 *sptep =rcu_dereference (pt) + i; +gfn_t gfn = base_gfn + i *KVM_PAGES_PER_HPAGE (level); +u64 old_child_spte;if (shared) {/*
@@ -373,7 +371,7 @@ static void handle_removed_tdp_mmu_page(struct kvm *kvm, tdp_ptep_t pt, shared); } -kvm_flush_remote_tlbs_with_address (kvm, gfn, +kvm_flush_remote_tlbs_with_address (kvm, base_gfn,KVM_PAGES_PER_HPAGE (level +1 ));call_rcu (&sp->rcu_head, tdp_mmu_free_sp_rcu_callback);
@@ -1083,8 +1081,8 @@ bool kvm_tdp_mmu_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range,struct kvm_mmu_page *root;for_each_tdp_mmu_root (kvm, root, range->slot->as_id) - flush |=zap_gfn_range (kvm, root, range->start, range->end, - range->may_block, flush, false); + flush =zap_gfn_range (kvm, root, range->start, range->end, + range->may_block, flush, false);return flush; }
@@ -1415,10 +1413,9 @@ void kvm_tdp_mmu_clear_dirty_pt_masked(struct kvm *kvm,* Clear leaf entries which could be replaced by large mappings, for * GFNs within the slot. */ -static bool zap_collapsible_spte_range (struct kvm *kvm, +static void zap_collapsible_spte_range (struct kvm *kvm,struct kvm_mmu_page *root, -const struct kvm_memory_slot *slot, -bool flush) +const struct kvm_memory_slot *slot) {gfn_t start = slot->base_gfn;gfn_t end = start + slot->npages;
@@ -1429,10 +1426,8 @@ static bool zap_collapsible_spte_range(struct kvm *kvm,tdp_root_for_each_pte (iter, root, start, end) { retry: -if (tdp_mmu_iter_cond_resched (kvm, &iter, flush, true)) { - flush = false; +if (tdp_mmu_iter_cond_resched (kvm, &iter, false, true))continue ; - }if (!is_shadow_present_pte (iter.old_spte) || !is_last_spte (iter.old_spte, iter.level))
@@ -1444,6 +1439,7 @@ static bool zap_collapsible_spte_range(struct kvm *kvm, pfn, PG_LEVEL_NUM))continue ; +/* Note, a successful atomic zap also does a remote TLB flush. */ if (!tdp_mmu_zap_spte_atomic (kvm, &iter)) {/* * The iter must explicitly re-read the SPTE because
@@ -1452,30 +1448,24 @@ static bool zap_collapsible_spte_range(struct kvm *kvm, iter.old_spte =READ_ONCE (*rcu_dereference (iter.sptep)); goto retry; } - flush = true; }rcu_read_unlock (); - -return flush; }/* * Clear non-leaf entries (and free associated page tables) which could * be replaced by large mappings, for GFNs within the slot. */ -bool kvm_tdp_mmu_zap_collapsible_sptes (struct kvm *kvm, -const struct kvm_memory_slot *slot, -bool flush) +void kvm_tdp_mmu_zap_collapsible_sptes (struct kvm *kvm, +const struct kvm_memory_slot *slot) {struct kvm_mmu_page *root;lockdep_assert_held_read (&kvm->mmu_lock);for_each_tdp_mmu_root_yield_safe (kvm, root, slot->as_id, true) - flush =zap_collapsible_spte_range (kvm, root, slot, flush); - -return flush; +zap_collapsible_spte_range (kvm, root, slot); }/*
arch/x86/kvm/mmu/tdp_mmu.h +2 -3
@@ -66,9 +66,8 @@ void kvm_tdp_mmu_clear_dirty_pt_masked(struct kvm *kvm,struct kvm_memory_slot *slot, gfn_t gfn, unsigned long mask, bool wrprot); -bool kvm_tdp_mmu_zap_collapsible_sptes (struct kvm *kvm, -const struct kvm_memory_slot *slot, -bool flush); +void kvm_tdp_mmu_zap_collapsible_sptes (struct kvm *kvm, +const struct kvm_memory_slot *slot); bool kvm_tdp_mmu_write_protect_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn,
arch/x86/kvm/svm/avic.c +9 -7
@@ -988,16 +988,18 @@ void avic_vcpu_put(struct kvm_vcpu *vcpu)static void avic_set_running (struct kvm_vcpu *vcpu,bool is_run) {struct vcpu_svm *svm =to_svm (vcpu); +int cpu =get_cpu (); +WARN_ON (cpu != vcpu->cpu); svm->avic_is_running = is_run; -if (!kvm_vcpu_apicv_active (vcpu)) -return ; - -if (is_run) -avic_vcpu_load (vcpu, vcpu->cpu); -else -avic_vcpu_put (vcpu); +if (kvm_vcpu_apicv_active (vcpu)) { +if (is_run) +avic_vcpu_load (vcpu, cpu); +else +avic_vcpu_put (vcpu); + } +put_cpu (); }void svm_vcpu_blocking (struct kvm_vcpu *vcpu)
arch/x86/kvm/svm/pmu.c +1 -1
@@ -282,7 +282,7 @@ static void amd_pmu_refresh(struct kvm_vcpu *vcpu) pmu->nr_arch_gp_counters =AMD64_NUM_COUNTERS ; pmu->counter_bitmask[KVM_PMC_GP ] = ((u64 )1 <<48 ) -1 ; - pmu->reserved_bits =0xffffffff00200000ull ; + pmu->reserved_bits =0xfffffff000280000ull ; pmu->version =1 ;/* not applicable to AMD; but clean them to prevent any fall out */ pmu->counter_bitmask[KVM_PMC_FIXED ] =0 ;
arch/x86/kvm/svm/sev.c +18 -13
@@ -1805,6 +1805,7 @@ int svm_vm_copy_asid_from(struct kvm *kvm, unsigned int source_fd) mirror_sev->fd = source_sev.fd; mirror_sev->es_active = source_sev.es_active; mirror_sev->handle = source_sev.handle; +INIT_LIST_HEAD (&mirror_sev->regions_list);/* * Do not copy ap_jump_table. Since the mirror does not share the same * KVM contexts as the original, and they may have different
@@ -2316,7 +2317,7 @@ void pre_sev_run(struct vcpu_svm *svm, int cpu) }#define GHCB_SCRATCH_AREA_LIMIT (16ULL * PAGE_SIZE) -static bool setup_vmgexit_scratch (struct vcpu_svm *svm,bool sync,u64 len) +static int setup_vmgexit_scratch (struct vcpu_svm *svm,bool sync,u64 len) {struct vmcb_control_area *control = &svm->vmcb->control;struct ghcb *ghcb = svm->ghcb;
@@ -2327,14 +2328,14 @@ static bool setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len) scratch_gpa_beg =ghcb_get_sw_scratch (ghcb);if (!scratch_gpa_beg) {pr_err ("vmgexit: scratch gpa not provided\n" ); -return false; +return -EINVAL ; } scratch_gpa_end = scratch_gpa_beg + len;if (scratch_gpa_end < scratch_gpa_beg) {pr_err ("vmgexit: scratch length (%#llx) not valid for scratch address (%#llx)\n" , len, scratch_gpa_beg); -return false; +return -EINVAL ; }if ((scratch_gpa_beg &PAGE_MASK ) == control->ghcb_gpa) {
@@ -2352,7 +2353,7 @@ static bool setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len) scratch_gpa_end > ghcb_scratch_end) {pr_err ("vmgexit: scratch area is outside of GHCB shared buffer area (%#llx - %#llx)\n" , scratch_gpa_beg, scratch_gpa_end); -return false; +return -EINVAL ; } scratch_va = (void *)svm->ghcb;
@@ -2365,18 +2366,18 @@ static bool setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len)if (len >GHCB_SCRATCH_AREA_LIMIT ) {pr_err ("vmgexit: scratch area exceeds KVM limits (%#llx requested, %#llx limit)\n" , len,GHCB_SCRATCH_AREA_LIMIT ); -return false; +return -EINVAL ; } scratch_va =kzalloc (len,GFP_KERNEL_ACCOUNT );if (!scratch_va) -return false; +return -ENOMEM ;if (kvm_read_guest (svm->vcpu.kvm, scratch_gpa_beg, scratch_va, len)) {/* Unable to copy scratch area from guest */ pr_err ("vmgexit: kvm_read_guest for scratch area failed\n" );kfree (scratch_va); -return false; +return -EFAULT ; }/*
@@ -2392,7 +2393,7 @@ static bool setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len) svm->ghcb_sa = scratch_va; svm->ghcb_sa_len = len; -return true; +return 0 ; } static void set_ghcb_msr_bits(struct vcpu_svm *svm, u64 value, u64 mask,
@@ -2531,10 +2532,10 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)ghcb_set_sw_exit_info_1 (ghcb,0 );ghcb_set_sw_exit_info_2 (ghcb,0 ); - ret = -EINVAL ;switch (exit_code) {case SVM_VMGEXIT_MMIO_READ : -if (!setup_vmgexit_scratch (svm, true, control->exit_info_2)) + ret =setup_vmgexit_scratch (svm, true, control->exit_info_2); +if (ret)break ; ret = kvm_sev_es_mmio_read(vcpu,
@@ -2543,7 +2544,8 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu) svm->ghcb_sa);break ;case SVM_VMGEXIT_MMIO_WRITE : -if (!setup_vmgexit_scratch (svm, false, control->exit_info_2)) + ret =setup_vmgexit_scratch (svm, false, control->exit_info_2); +if (ret)break ; ret = kvm_sev_es_mmio_write(vcpu,
@@ -2586,6 +2588,7 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)vcpu_unimpl (vcpu,"vmgexit: unsupported event - exit_info_1=%#llx, exit_info_2=%#llx\n" , control->exit_info_1, control->exit_info_2); + ret = -EINVAL ;break ;default : ret =svm_invoke_exit_handler (vcpu, exit_code);
@@ -2598,6 +2601,7 @@ int sev_es_string_io(struct vcpu_svm *svm, int size, unsigned int port, int in) {int count;int bytes; +int r;if (svm->vmcb->control.exit_info_2 >INT_MAX )return -EINVAL ;
@@ -2606,8 +2610,9 @@ int sev_es_string_io(struct vcpu_svm *svm, int size, unsigned int port, int in)if (unlikely (check_mul_overflow (count, size, &bytes)))return -EINVAL ; -if (!setup_vmgexit_scratch (svm, in, bytes)) -return -EINVAL ; + r =setup_vmgexit_scratch (svm, in, bytes); +if (r) +return r;return kvm_sev_es_string_io (&svm->vcpu, size, port, svm->ghcb_sa, count, in); }
arch/x86/kvm/svm/svm.c +0 -1
@@ -4592,7 +4592,6 @@ static struct kvm_x86_ops svm_x86_ops __initdata = { .load_eoi_exitmap = svm_load_eoi_exitmap, .hwapic_irr_update = svm_hwapic_irr_update, .hwapic_isr_update = svm_hwapic_isr_update, - .sync_pir_to_irr = kvm_lapic_find_highest_irr, .apicv_post_state_restore = avic_post_state_restore, .set_tss_addr = svm_set_tss_addr,
arch/x86/kvm/vmx/nested.c +23 -26
77 lines not on this page · raw message
arch/x86/kvm/vmx/posted_intr.c +11 -9
@@ -5,6 +5,7 @@#include <asm/cpu.h> #include "lapic.h" +#include "irq.h" #include "posted_intr.h" #include "trace.h" #include "vmx.h"
@@ -77,13 +78,18 @@ void vmx_vcpu_pi_load(struct kvm_vcpu *vcpu, int cpu)pi_set_on (pi_desc); } +static bool vmx_can_use_vtd_pi (struct kvm *kvm) +{ +return irqchip_in_kernel (kvm) && enable_apicv && +kvm_arch_has_assigned_device (kvm) && +irq_remapping_cap (IRQ_POSTING_CAP ); +} +void vmx_vcpu_pi_put (struct kvm_vcpu *vcpu) {struct pi_desc *pi_desc =vcpu_to_pi_desc (vcpu); -if (!kvm_arch_has_assigned_device (vcpu->kvm) || - !irq_remapping_cap (IRQ_POSTING_CAP ) || - !kvm_vcpu_apicv_active (vcpu)) +if (!vmx_can_use_vtd_pi (vcpu->kvm))return ;/* Set SN when the vCPU is preempted */
@@ -141,9 +147,7 @@ int pi_pre_block(struct kvm_vcpu *vcpu)struct pi_desc old, new;struct pi_desc *pi_desc =vcpu_to_pi_desc (vcpu); -if (!kvm_arch_has_assigned_device (vcpu->kvm) || - !irq_remapping_cap (IRQ_POSTING_CAP ) || - !kvm_vcpu_apicv_active (vcpu)) +if (!vmx_can_use_vtd_pi (vcpu->kvm))return 0 ;WARN_ON (irqs_disabled ());
@@ -270,9 +274,7 @@ int pi_update_irte(struct kvm *kvm, unsigned int host_irq, uint32_t guest_irq,struct vcpu_data vcpu_info;int idx, ret =0 ; -if (!kvm_arch_has_assigned_device (kvm) || - !irq_remapping_cap (IRQ_POSTING_CAP ) || - !kvm_vcpu_apicv_active (kvm->vcpus[0 ])) +if (!vmx_can_use_vtd_pi (kvm))return 0 ; idx =srcu_read_lock (&kvm->irq_srcu);
arch/x86/kvm/vmx/vmx.c +39 -23
107 lines not on this page · raw message
arch/x86/kvm/x86.c +33 -13
83 lines not on this page · raw message
arch/x86/kvm/x86.h +1 -6
@@ -103,6 +103,7 @@ static inline unsigned int __shrink_ple_window(unsigned int val,#define MSR_IA32_CR_PAT_DEFAULT 0x0007040600070406ULL +void kvm_service_local_tlb_flush_requests (struct kvm_vcpu *vcpu);int kvm_check_nested_events (struct kvm_vcpu *vcpu);static inline void kvm_clear_exception_queue (struct kvm_vcpu *vcpu)
@@ -185,12 +186,6 @@ static inline bool mmu_is_nested(struct kvm_vcpu *vcpu)return vcpu->arch.walk_mmu == &vcpu->arch.nested_mmu; } -static inline void kvm_vcpu_flush_tlb_current (struct kvm_vcpu *vcpu) -{ - ++vcpu->stat.tlb_flush; -static_call (kvm_x86_tlb_flush_current)(vcpu); -} -static inline int is_pae (struct kvm_vcpu *vcpu) {return kvm_read_cr4_bits (vcpu,X86_CR4_PAE );
arch/x86/realmode/init.c +11 -1
@@ -72,6 +72,7 @@ static void __init setup_real_mode(void)#ifdef CONFIG_X86_64 u64 *trampoline_pgd;u64 efer; +int i;#endif base = (unsigned char *)real_mode_header;
@@ -128,8 +129,17 @@ static void __init setup_real_mode(void) trampoline_header->flags =0 ; trampoline_pgd = (u64 *)__va (real_mode_header->trampoline_pgd); + +/* Map the real mode stub as virtual == physical */ trampoline_pgd[0 ] = trampoline_pgd_entry.pgd; - trampoline_pgd[511 ] = init_top_pgt[511 ].pgd; + +/* +* Include the entirety of the kernel mapping into the trampoline +* PGD. This way, all mappings present in the normal kernel page +* tables are usable while running on trampoline_pgd. +*/ +for (i =pgd_index (__PAGE_OFFSET); i <PTRS_PER_PGD ; i++) + trampoline_pgd[i] = init_top_pgt[i].pgd;#endif sme_sev_setup_real_mode (trampoline_header);
arch/x86/xen/xen-asm.S +20 -0
@@ -20,6 +20,7 @@ #include <linux/init.h> #include <linux/linkage.h> +#include <../entry/calling.h> /* * Enable events. This clears the event mask and tests the pending
@@ -191,6 +192,25 @@ SYM_CODE_START(xen_iret) jmp hypercall_iret SYM_CODE_END(xen_iret) +/* + * XEN pv doesn't use trampoline stack, PER_CPU_VAR(cpu_tss_rw + TSS_sp0) is + * also the kernel stack. Reusing swapgs_restore_regs_and_return_to_usermode() + * in XEN pv would cause %rsp to move up to the top of the kernel stack and + * leave the IRET frame below %rsp, which is dangerous to be corrupted if #NMI + * interrupts. And swapgs_restore_regs_and_return_to_usermode() pushing the IRET + * frame at the same address is useless. + */ +SYM_CODE_START(xenpv_restore_regs_and_return_to_usermode) + UNWIND_HINT_REGS + POP_REGS + + /* stackleak_erase() can work safely on the kernel stack. */ + STACKLEAK_ERASE_NOCLOBBER + + addq $8, %rsp /* skip regs->orig_ax */ + jmp xen_iret +SYM_CODE_END(xenpv_restore_regs_and_return_to_usermode) + /* * Xen handles syscall callbacks much like ordinary exceptions, which * means we have:
drivers/ata/ahci.c +1 -0
@@ -442,6 +442,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {/* AMD */ { PCI_VDEVICE(AMD, 0x7800), board_ahci }, /* AMD Hudson-2 */ { PCI_VDEVICE(AMD, 0x7900), board_ahci }, /* AMD CZ */ + { PCI_VDEVICE(AMD, 0x7901), board_ahci_mobile }, /* AMD Green Sardine *//* AMD is using RAID class only for ahci controllers */ { PCI_VENDOR_ID_AMD, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci },
drivers/ata/libahci.c +15 -0
@@ -2305,6 +2305,18 @@ int ahci_port_resume(struct ata_port *ap)EXPORT_SYMBOL_GPL (ahci_port_resume);#ifdef CONFIG_PM +static void ahci_handle_s2idle (struct ata_port *ap) +{ +void __iomem *port_mmio =ahci_port_base (ap); +u32 devslp; + +if (pm_suspend_via_firmware ()) +return ; + devslp =readl (port_mmio +PORT_DEVSLP ); +if ((devslp &PORT_DEVSLP_ADSE )) +ata_msleep (ap, devslp_idle_timeout); +} +static int ahci_port_suspend (struct ata_port *ap,pm_message_t mesg) {const char *emsg =NULL ;
@@ -2318,6 +2330,9 @@ static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg)ata_port_freeze (ap); } +if (acpi_storage_d3 (ap->host->dev)) +ahci_handle_s2idle (ap); +ahci_rpm_put_port (ap);return rc; }
drivers/ata/sata_fsl.c +13 -7
@@ -1394,6 +1394,14 @@ static int sata_fsl_init_controller(struct ata_host *host)return 0 ; } +static void sata_fsl_host_stop (struct ata_host *host) +{ +struct sata_fsl_host_priv *host_priv = host->private_data; + +iounmap (host_priv->hcr_base); +kfree (host_priv); +} +/* * scsi mid-layer and libata interface structures */
@@ -1426,6 +1434,8 @@ static struct ata_port_operations sata_fsl_ops = { .port_start = sata_fsl_port_start, .port_stop = sata_fsl_port_stop, + .host_stop = sata_fsl_host_stop, + .pmp_attach = sata_fsl_pmp_attach, .pmp_detach = sata_fsl_pmp_detach, };
@@ -1480,9 +1490,9 @@ static int sata_fsl_probe(struct platform_device *ofdev) host_priv->ssr_base = ssr_base; host_priv->csr_base = csr_base; - irq =irq_of_parse_and_map (ofdev->dev.of_node,0 ); -if (!irq) { -dev_err (&ofdev->dev,"invalid irq from platform\n" ); + irq =platform_get_irq (ofdev,0 ); +if (irq <0 ) { + retval = irq; goto error_exit_with_cleanup; } host_priv->irq = irq;
@@ -1557,10 +1567,6 @@ static int sata_fsl_remove(struct platform_device *ofdev)ata_host_detach (host); -irq_dispose_mapping (host_priv->irq); -iounmap (host_priv->hcr_base); -kfree (host_priv); -return 0 ; }
drivers/char/ipmi/ipmi_msghandler.c +12 -1
@@ -191,6 +191,8 @@ struct ipmi_user {struct work_struct remove_work; }; +static struct workqueue_struct *remove_work_wq; +static struct ipmi_user *acquire_ipmi_user (struct ipmi_user *user,int *index) __acquires(user->release_barrier) {
@@ -1261,7 +1263,7 @@ static void free_user(struct kref *ref) struct ipmi_user *user = container_of(ref, struct ipmi_user, refcount);/* SRCU cleanup must happen in task context. */ -schedule_work (&user->remove_work); +queue_work (remove_work_wq, &user->remove_work); }static void _ipmi_destroy_user (struct ipmi_user *user)
@@ -5153,6 +5155,13 @@ static int ipmi_init_msghandler(void)atomic_notifier_chain_register (&panic_notifier_list, &panic_block); + remove_work_wq =create_singlethread_workqueue ("ipmi-msghandler-remove-wq" ); +if (!remove_work_wq) { +pr_err ("unable to create ipmi-msghandler-remove-wq workqueue" ); + rv = -ENOMEM ; + goto out; + } + initialized = true; out:
@@ -5178,6 +5187,8 @@ static void __exit cleanup_ipmi(void)int count;if (initialized) { +destroy_workqueue (remove_work_wq); +atomic_notifier_chain_unregister (&panic_notifier_list, &panic_block);
drivers/cpufreq/cpufreq.c +4 -5
@@ -1004,10 +1004,9 @@ static struct kobj_type ktype_cpufreq = { .release = cpufreq_sysfs_release, }; -static void add_cpu_dev_symlink (struct cpufreq_policy *policy,unsigned int cpu) +static void add_cpu_dev_symlink (struct cpufreq_policy *policy,unsigned int cpu, +struct device *dev) { -struct device *dev =get_cpu_device (cpu); -if (unlikely (!dev))return ;
@@ -1391,7 +1390,7 @@ static int cpufreq_online(unsigned int cpu)if (new_policy) {for_each_cpu (j, policy->related_cpus) {per_cpu (cpufreq_cpu_data, j) = policy; -add_cpu_dev_symlink (policy, j); +add_cpu_dev_symlink (policy, j,get_cpu_device (j)); } policy->min_freq_req = kzalloc(2 * sizeof(*policy->min_freq_req),
@@ -1565,7 +1564,7 @@ static int cpufreq_add_dev(struct device *dev, struct subsys_interface *sif)/* Create sysfs link on CPU registration */ policy =per_cpu (cpufreq_cpu_data, cpu);if (policy) -add_cpu_dev_symlink (policy, cpu); +add_cpu_dev_symlink (policy, cpu, dev);return 0 ; }
drivers/dma-buf/heaps/system_heap.c +1 -1
@@ -289,7 +289,7 @@ static void system_heap_dma_buf_release(struct dma_buf *dmabuf)int i; table = &buffer->sg_table; -for_each_sg (table->sgl, sg, table->nents, i) { +for_each_sgtable_sg (table, sg, i) {struct page *page =sg_page (sg);__free_pages (page,compound_order (page));
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c +1 -0
@@ -386,6 +386,7 @@ struct amdgpu_hive_info *amdgpu_get_xgmi_hive(struct amdgpu_device *adev) "%s", "xgmi_hive_info");if (ret) {dev_err (adev->dev,"XGMI: failed initializing kobject for xgmi hive\n" ); +kobject_put (&hive->kobj);kfree (hive); hive =NULL ; goto pro_end;
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +5 -0
@@ -1225,6 +1225,11 @@ static int stop_cpsch(struct device_queue_manager *dqm)bool hanging;dqm_lock (dqm); +if (!dqm->sched_running) { +dqm_unlock (dqm); +return 0 ; + } +if (!dqm->is_hws_hang)unmap_queues_cpsch (dqm,KFD_UNMAP_QUEUES_FILTER_ALL_QUEUES ,0 ); hanging = dqm->is_hws_hang || dqm->is_resetting;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +16 -4
@@ -36,6 +36,8 @@#include "dm_helpers.h" #include "dc_link_ddc.h" +#include "ddc_service_types.h" +#include "dpcd_defs.h" #include "i2caux_interface.h" #include "dmub_cmd.h"
@@ -155,6 +157,16 @@ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = { };#if defined(CONFIG_DRM_AMD_DC_DCN ) +static bool needs_dsc_aux_workaround (struct dc_link *link) +{ +if (link->dpcd_caps.branch_dev_id ==DP_BRANCH_DEVICE_ID_90CC24 && + (link->dpcd_caps.dpcd_rev.raw ==DPCD_REV_14 || link->dpcd_caps.dpcd_rev.raw ==DPCD_REV_12 ) && + link->dpcd_caps.sink_count.bits.SINK_COUNT >=2 ) +return true; + +return false; +} +static bool validate_dsc_caps_on_connector (struct amdgpu_dm_connector *aconnector) {struct dc_sink *dc_sink = aconnector->dc_sink;
@@ -164,7 +176,7 @@ static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnectou8 *dsc_branch_dec_caps =NULL ; aconnector->dsc_aux =drm_dp_mst_dsc_aux_for_port (port); -#if defined(CONFIG_HP_HOOK_WORKAROUND ) +/* * drm_dp_mst_dsc_aux_for_port() will return NULL for certain configs * because it only check the dsc/fec caps of the "port variable" and not the dock
@@ -174,10 +186,10 @@ static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnecto* Workaround: explicitly check the use case above and use the mst dock's aux as dsc_aux * */ - -if (!aconnector->dsc_aux && !port->parent->port_parent) +if (!aconnector->dsc_aux && !port->parent->port_parent && +needs_dsc_aux_workaround (aconnector->dc_link)) aconnector->dsc_aux = &aconnector->mst_port->dm_dp_aux.aux; -#endif +if (!aconnector->dsc_aux)return false;
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c +8 -5
@@ -1265,7 +1265,7 @@ static int navi10_print_clk_levels(struct smu_context *smu, enum smu_clk_type clk_type, char *buf) { uint16_t *curve_settings; -int i, size =0 , ret =0 ; +int i, levels, size =0 , ret =0 ;uint32_t cur_value =0 , value =0 , count =0 ;uint32_t freq_values[3 ] = {0 };uint32_t mark_index =0 ;
@@ -1319,14 +1319,17 @@ static int navi10_print_clk_levels(struct smu_context *smu, freq_values[1 ] = cur_value; mark_index = cur_value == freq_values[0 ] ?0 : cur_value == freq_values[2 ] ?2 :1 ; -if (mark_index !=1 ) - freq_values[1 ] = (freq_values[0 ] + freq_values[2 ]) /2 ; -for (i =0 ; i <3 ; i++) { + levels =3 ; +if (mark_index !=1 ) { + levels =2 ; + freq_values[1 ] = freq_values[2 ]; + } + +for (i =0 ; i < levels; i++) { size +=sysfs_emit_at (buf, size,"%d: %uMhz %s\n" , i, freq_values[i], i == mark_index ?"*" :"" ); } - }break ;case SMU_PCIE :
drivers/gpu/drm/i915/display/intel_display_types.h +3 -0
@@ -1639,6 +1639,9 @@ struct intel_dp {struct intel_dp_pcon_frl frl;struct intel_psr psr; + +/* When we last wrote the OUI for eDP */ +unsigned long last_oui_write; };enum lspcon_vendor {
drivers/gpu/drm/i915/display/intel_dp.c +11 -0
@@ -29,6 +29,7 @@#include <linux/i2c.h> #include <linux/notifier.h> #include <linux/slab.h> +#include <linux/timekeeping.h> #include <linux/types.h> #include <asm/byteorder.h>
@@ -1864,6 +1865,16 @@ intel_edp_init_source_oui(struct intel_dp *intel_dp, bool careful)if (drm_dp_dpcd_write (&intel_dp->aux,DP_SOURCE_OUI , oui,sizeof (oui)) <0 )drm_err (&i915->drm,"Failed to write source OUI\n" ); + + intel_dp->last_oui_write = jiffies; +} + +void intel_dp_wait_source_oui (struct intel_dp *intel_dp) +{ +struct drm_i915_private *i915 =dp_to_i915 (intel_dp); + +drm_dbg_kms (&i915->drm,"Performing OUI wait\n" ); +wait_remaining_ms_from_jiffies (intel_dp->last_oui_write,30 ); }/* If the device supports it, try to set the power state appropriately */
drivers/gpu/drm/i915/display/intel_dp.h +2 -0
@@ -129,4 +129,6 @@ void intel_dp_pcon_dsc_configure(struct intel_dp *intel_dp, const struct intel_crtc_state *crtc_state);void intel_dp_phy_test (struct intel_encoder *encoder); +void intel_dp_wait_source_oui (struct intel_dp *intel_dp); +#endif /* __INTEL_DP_H__ */
drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c +5 -0
@@ -35,6 +35,7 @@*/ #include "intel_display_types.h" +#include "intel_dp.h" #include "intel_dp_aux_backlight.h" #include "intel_panel.h"
@@ -106,6 +107,8 @@ intel_dp_aux_supports_hdr_backlight(struct intel_connector *connector)int ret;u8 tcon_cap[4 ]; +intel_dp_wait_source_oui (intel_dp); + ret =drm_dp_dpcd_read (aux,INTEL_EDP_HDR_TCON_CAP0 , tcon_cap,sizeof (tcon_cap));if (ret !=sizeof (tcon_cap))return false;
@@ -204,6 +207,8 @@ intel_dp_aux_hdr_enable_backlight(const struct intel_crtc_state *crtc_state,int ret;u8 old_ctrl, ctrl; +intel_dp_wait_source_oui (intel_dp); + ret =drm_dp_dpcd_readb (&intel_dp->aux,INTEL_EDP_HDR_GETSET_CTRL_PARAMS , &old_ctrl);if (ret !=1 ) {drm_err (&i915->drm,"Failed to read current backlight control mode: %d\n" , ret);
drivers/gpu/drm/i915/gt/intel_workarounds.c +0 -7
@@ -621,13 +621,6 @@ static void gen12_ctx_workarounds_init(struct intel_engine_cs *engine,FF_MODE2_GS_TIMER_MASK ,FF_MODE2_GS_TIMER_224 , 0, false); - -/* -* Wa_14012131227:dg1 -* Wa_1508744258:tgl,rkl,dg1,adl-s,adl-p -*/ -wa_masked_en (wal,GEN7_COMMON_SLICE_CHICKEN1 , -GEN9_RHWO_OPTIMIZATION_DISABLE ); } static void dg1_ctx_workarounds_init(struct intel_engine_cs *engine,
drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c +2 -2
@@ -777,12 +777,12 @@ static void a6xx_get_gmu_registers(struct msm_gpu *gpu,struct a6xx_gpu *a6xx_gpu =to_a6xx_gpu (adreno_gpu); a6xx_state->gmu_registers =state_kcalloc (a6xx_state, -2 ,sizeof (*a6xx_state->gmu_registers)); +3 ,sizeof (*a6xx_state->gmu_registers));if (!a6xx_state->gmu_registers)return ; - a6xx_state->nr_gmu_registers =2 ; + a6xx_state->nr_gmu_registers =3 ;/* Get the CX GMU registers from AHB */ _a6xx_get_gmu_registers(gpu, a6xx_state, &a6xx_gmu_reglist[0],
drivers/gpu/drm/msm/msm_debugfs.c +1 -0
@@ -77,6 +77,7 @@ static int msm_gpu_open(struct inode *inode, struct file *file) goto free_priv;pm_runtime_get_sync (&gpu->pdev->dev); +msm_gpu_hw_init (gpu); show_priv->state = gpu->funcs->gpu_state_get (gpu);pm_runtime_put_sync (&gpu->pdev->dev);
drivers/gpu/drm/msm/msm_drv.c +32 -17
74 lines not on this page · raw message
drivers/gpu/drm/msm/msm_gem.c +1 -2
@@ -1055,8 +1055,7 @@ static int msm_gem_object_mmap(struct drm_gem_object *obj, struct vm_area_struct {struct msm_gem_object *msm_obj =to_msm_bo (obj); - vma->vm_flags &= ~VM_PFNMAP ; - vma->vm_flags |=VM_MIXEDMAP |VM_DONTEXPAND ; + vma->vm_flags |=VM_IO |VM_MIXEDMAP |VM_DONTEXPAND |VM_DONTDUMP ; vma->vm_page_prot =msm_gem_pgprot (msm_obj,vm_get_page_prot (vma->vm_flags));return 0 ;
drivers/gpu/drm/msm/msm_gem_submit.c +1 -0
@@ -911,6 +911,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,drm_sched_entity_push_job (&submit->base, queue->entity); args->fence = submit->fence_id; + queue->last_fence = submit->fence_id;msm_reset_syncobjs (syncobjs_to_reset, args->nr_in_syncobjs); msm_process_post_deps(post_deps, args->nr_out_syncobjs,
drivers/gpu/drm/msm/msm_gpu.h +3 -0
@@ -352,6 +352,8 @@ static inline int msm_gpu_convert_priority(struct msm_gpu *gpu, int prio,* @ring_nr: the ringbuffer used by this submitqueue, which is determined * by the submitqueue's priority * @faults: the number of GPU hangs associated with this submitqueue +* @last_fence: the sequence number of the last allocated fence (for error +* checking) * @ctx: the per-drm_file context associated with the submitqueue (ie. * which set of pgtables do submits jobs associated with the * submitqueue use)
@@ -367,6 +369,7 @@ struct msm_gpu_submitqueue {u32 flags;u32 ring_nr;int faults; +uint32_t last_fence;struct msm_file_private *ctx;struct list_head node;struct idr fence_idr;
drivers/gpu/drm/msm/msm_gpu_devfreq.c +5 -0
@@ -20,6 +20,10 @@ static int msm_devfreq_target(struct device *dev, unsigned long *freq,struct msm_gpu *gpu =dev_to_gpu (dev);struct dev_pm_opp *opp; +/* +* Note that devfreq_recommended_opp() can modify the freq +* to something that actually is in the opp table: +*/ opp =devfreq_recommended_opp (dev, freq, flags);/*
@@ -28,6 +32,7 @@ static int msm_devfreq_target(struct device *dev, unsigned long *freq,*/ if (gpu->devfreq.idle_freq) { gpu->devfreq.idle_freq = *freq; +dev_pm_opp_put (opp);return 0 ; }
drivers/gpu/drm/sun4i/Kconfig +1 -0
@@ -46,6 +46,7 @@ config DRM_SUN6I_DSI default MACH_SUN8I select CRC_CCITT select DRM_MIPI_DSI + select RESET_CONTROLLER select PHY_SUN6I_MIPI_DPHY help Choose this option if you want have an Allwinner SoC with
drivers/gpu/drm/vc4/vc4_kms.c +18 -22
@@ -337,10 +337,10 @@ static void vc4_atomic_commit_tail(struct drm_atomic_state *state)struct drm_device *dev = state->dev;struct vc4_dev *vc4 =to_vc4_dev (dev);struct vc4_hvs *hvs = vc4->hvs; -struct drm_crtc_state *old_crtc_state;struct drm_crtc_state *new_crtc_state;struct drm_crtc *crtc;struct vc4_hvs_state *old_hvs_state; +unsigned int channel;int i;for_each_new_crtc_in_state (state, crtc, new_crtc_state, i) {
@@ -353,30 +353,32 @@ static void vc4_atomic_commit_tail(struct drm_atomic_state *state)vc4_hvs_mask_underrun (dev, vc4_crtc_state->assigned_channel); } -if (vc4->hvs->hvs5) -clk_set_min_rate (hvs->core_clk,500000000 ); - old_hvs_state =vc4_hvs_get_old_global_state (state); -if (!old_hvs_state) +if (IS_ERR (old_hvs_state))return ; -for_each_old_crtc_in_state (state, crtc, old_crtc_state, i) { -struct vc4_crtc_state *vc4_crtc_state = -to_vc4_crtc_state (old_crtc_state); -unsigned int channel = vc4_crtc_state->assigned_channel; +for (channel =0 ; channel <HVS_NUM_CHANNELS ; channel++) { +struct drm_crtc_commit *commit;int ret; -if (channel ==VC4_HVS_CHANNEL_DISABLED ) +if (!old_hvs_state->fifo_state[channel].in_use)continue ; -if (!old_hvs_state->fifo_state[channel].in_use) + commit = old_hvs_state->fifo_state[channel].pending_commit; +if (!commit)continue ; - ret =drm_crtc_commit_wait (old_hvs_state->fifo_state[channel].pending_commit); + ret =drm_crtc_commit_wait (commit);if (ret)drm_err (dev,"Timed out waiting for commit\n" ); + +drm_crtc_commit_put (commit); + old_hvs_state->fifo_state[channel].pending_commit =NULL ; } +if (vc4->hvs->hvs5) +clk_set_min_rate (hvs->core_clk,500000000 ); +drm_atomic_helper_commit_modeset_disables (dev, state);vc4_ctm_commit (vc4, state);
@@ -410,8 +412,8 @@ static int vc4_atomic_commit_setup(struct drm_atomic_state *state)unsigned int i; hvs_state =vc4_hvs_get_new_global_state (state); -if (!hvs_state) -return -EINVAL ; +if (WARN_ON (IS_ERR (hvs_state))) +return PTR_ERR (hvs_state);for_each_new_crtc_in_state (state, crtc, crtc_state, i) { struct vc4_crtc_state *vc4_crtc_state =
@@ -668,12 +670,6 @@ vc4_hvs_channels_duplicate_state(struct drm_private_obj *obj)for (i =0 ; i <HVS_NUM_CHANNELS ; i++) { state->fifo_state[i].in_use = old_state->fifo_state[i].in_use; - -if (!old_state->fifo_state[i].pending_commit) -continue ; - - state->fifo_state[i].pending_commit = -drm_crtc_commit_get (old_state->fifo_state[i].pending_commit); }return &state->base;
@@ -762,8 +758,8 @@ static int vc4_pv_muxing_atomic_check(struct drm_device *dev,unsigned int i; hvs_new_state =vc4_hvs_get_global_state (state); -if (!hvs_new_state) -return -EINVAL ; +if (IS_ERR (hvs_new_state)) +return PTR_ERR (hvs_new_state);for (i =0 ; i <ARRAY_SIZE (hvs_new_state->fifo_state); i++)if (!hvs_new_state->fifo_state[i].in_use)
drivers/i2c/busses/i2c-cbus-gpio.c +3 -2
@@ -195,8 +195,9 @@ static u32 cbus_i2c_func(struct i2c_adapter *adapter) }static const struct i2c_algorithm cbus_i2c_algo = { - .smbus_xfer = cbus_i2c_smbus_xfer, - .functionality = cbus_i2c_func, + .smbus_xfer = cbus_i2c_smbus_xfer, + .smbus_xfer_atomic = cbus_i2c_smbus_xfer, + .functionality = cbus_i2c_func, };static int cbus_i2c_remove (struct platform_device *pdev)
drivers/i2c/busses/i2c-stm32f7.c +28 -3
@@ -1493,6 +1493,7 @@ static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data) {struct stm32f7_i2c_dev *i2c_dev = data;struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg; +struct stm32_i2c_dma *dma = i2c_dev->dma;void __iomem *base = i2c_dev->base;u32 status, mask;int ret =IRQ_HANDLED ;
@@ -1518,6 +1519,10 @@ static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)dev_dbg (i2c_dev->dev,"<%s>: Receive NACK (addr %x)\n" , __func__, f7_msg->addr);writel_relaxed (STM32F7_I2C_ICR_NACKCF , base +STM32F7_I2C_ICR ); +if (i2c_dev->use_dma) { +stm32f7_i2c_disable_dma_req (i2c_dev); +dmaengine_terminate_all (dma->chan_using); + } f7_msg->result = -ENXIO ; }
@@ -1533,7 +1538,7 @@ static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)/* Clear STOP flag */ writel_relaxed (STM32F7_I2C_ICR_STOPCF , base +STM32F7_I2C_ICR ); -if (i2c_dev->use_dma) { +if (i2c_dev->use_dma && !f7_msg->result) { ret =IRQ_WAKE_THREAD ; }else { i2c_dev->master_mode = false;
@@ -1546,7 +1551,7 @@ static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)if (f7_msg->stop) { mask =STM32F7_I2C_CR2_STOP ;stm32f7_i2c_set_bits (base +STM32F7_I2C_CR2 , mask); - }else if (i2c_dev->use_dma) { + }else if (i2c_dev->use_dma && !f7_msg->result) { ret =IRQ_WAKE_THREAD ; }else if (f7_msg->smbus) {stm32f7_i2c_smbus_rep_start (i2c_dev);
@@ -1696,12 +1701,23 @@ static int stm32f7_i2c_xfer(struct i2c_adapter *i2c_adap, time_left =wait_for_completion_timeout (&i2c_dev->complete, i2c_dev->adap.timeout); ret = f7_msg->result; +if (ret) { +/* +* It is possible that some unsent data have already been +* written into TXDR. To avoid sending old data in a +* further transfer, flush TXDR in case of any error +*/ +writel_relaxed (STM32F7_I2C_ISR_TXE , + i2c_dev->base +STM32F7_I2C_ISR ); + goto pm_free; + }if (!time_left) {dev_dbg (i2c_dev->dev,"Access to slave 0x%x timed out\n" , i2c_dev->msg->addr);if (i2c_dev->use_dma)dmaengine_terminate_all (dma->chan_using); +stm32f7_i2c_wait_free_bus (i2c_dev); ret = -ETIMEDOUT ; }
@@ -1744,13 +1760,22 @@ static int stm32f7_i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, timeout =wait_for_completion_timeout (&i2c_dev->complete, i2c_dev->adap.timeout); ret = f7_msg->result; -if (ret) +if (ret) { +/* +* It is possible that some unsent data have already been +* written into TXDR. To avoid sending old data in a +* further transfer, flush TXDR in case of any error +*/ +writel_relaxed (STM32F7_I2C_ISR_TXE , + i2c_dev->base +STM32F7_I2C_ISR ); goto pm_free; + }if (!timeout) {dev_dbg (dev,"Access to slave 0x%x timed out\n" , f7_msg->addr);if (i2c_dev->use_dma)dmaengine_terminate_all (dma->chan_using); +stm32f7_i2c_wait_free_bus (i2c_dev); ret = -ETIMEDOUT ; goto pm_free; }
drivers/net/dsa/b53/b53_spi.c +14 -0
@@ -349,6 +349,19 @@ static const struct of_device_id b53_spi_of_match[] = { };MODULE_DEVICE_TABLE (of, b53_spi_of_match); +static const struct spi_device_id b53_spi_ids[] = { + { .name ="bcm5325" }, + { .name ="bcm5365" }, + { .name ="bcm5395" }, + { .name ="bcm5397" }, + { .name ="bcm5398" }, + { .name ="bcm53115" }, + { .name ="bcm53125" }, + { .name ="bcm53128" }, + {/* sentinel */ } +}; +MODULE_DEVICE_TABLE (spi, b53_spi_ids); +static struct spi_driver b53_spi_driver = { .driver = { .name ="b53-switch" ,
@@ -357,6 +370,7 @@ static struct spi_driver b53_spi_driver = { .probe = b53_spi_probe, .remove = b53_spi_remove, .shutdown = b53_spi_shutdown, + .id_table = b53_spi_ids, };module_spi_driver (b53_spi_driver);
drivers/net/dsa/mv88e6xxx/serdes.c +220 -32
342 lines not on this page · raw message
drivers/net/dsa/mv88e6xxx/serdes.h +4 -0
@@ -93,6 +93,10 @@#define MV88E6393X_SERDES_POC_PCS_MASK 0x0007#define MV88E6393X_SERDES_POC_RESET BIT(15)#define MV88E6393X_SERDES_POC_PDOWN BIT(5) +#define MV88E6393X_SERDES_POC_AN BIT(3) +#define MV88E6393X_SERDES_CTRL1 0xf003 +#define MV88E6393X_SERDES_CTRL1_TX_PDOWN BIT(9) +#define MV88E6393X_SERDES_CTRL1_RX_PDOWN BIT(8)#define MV88E6393X_ERRATA_4_8_REG 0xF074#define MV88E6393X_ERRATA_4_8_BIT BIT(14)
drivers/net/ethernet/aquantia/atlantic/aq_common.h +14 -13
@@ -40,10 +40,12 @@#define AQ_DEVICE_ID_AQC113DEV 0x00C0#define AQ_DEVICE_ID_AQC113CS 0x94C0 +#define AQ_DEVICE_ID_AQC113CA 0x34C0#define AQ_DEVICE_ID_AQC114CS 0x93C0#define AQ_DEVICE_ID_AQC113 0x04C0#define AQ_DEVICE_ID_AQC113C 0x14C0#define AQ_DEVICE_ID_AQC115C 0x12C0 +#define AQ_DEVICE_ID_AQC116C 0x11C0#define HW_ATL_NIC_NAME "Marvell (aQuantia) AQtion 10Gbit Network Adapter"
@@ -53,20 +55,19 @@#define AQ_NIC_RATE_10G BIT(0)#define AQ_NIC_RATE_5G BIT(1) -#define AQ_NIC_RATE_5GSR BIT(2) -#define AQ_NIC_RATE_2G5 BIT(3) -#define AQ_NIC_RATE_1G BIT(4) -#define AQ_NIC_RATE_100M BIT(5) -#define AQ_NIC_RATE_10M BIT(6) -#define AQ_NIC_RATE_1G_HALF BIT(7) -#define AQ_NIC_RATE_100M_HALF BIT(8) -#define AQ_NIC_RATE_10M_HALF BIT(9) +#define AQ_NIC_RATE_2G5 BIT(2) +#define AQ_NIC_RATE_1G BIT(3) +#define AQ_NIC_RATE_100M BIT(4) +#define AQ_NIC_RATE_10M BIT(5) +#define AQ_NIC_RATE_1G_HALF BIT(6) +#define AQ_NIC_RATE_100M_HALF BIT(7) +#define AQ_NIC_RATE_10M_HALF BIT(8) -#define AQ_NIC_RATE_EEE_10G BIT(10) -#define AQ_NIC_RATE_EEE_5G BIT(11) -#define AQ_NIC_RATE_EEE_2G5 BIT(12) -#define AQ_NIC_RATE_EEE_1G BIT(13) -#define AQ_NIC_RATE_EEE_100M BIT(14) +#define AQ_NIC_RATE_EEE_10G BIT(9) +#define AQ_NIC_RATE_EEE_5G BIT(10) +#define AQ_NIC_RATE_EEE_2G5 BIT(11) +#define AQ_NIC_RATE_EEE_1G BIT(12) +#define AQ_NIC_RATE_EEE_100M BIT(13)#define AQ_NIC_RATE_EEE_MSK (AQ_NIC_RATE_EEE_10G |\ AQ_NIC_RATE_EEE_5G |\ AQ_NIC_RATE_EEE_2G5 |\
drivers/net/ethernet/aquantia/atlantic/aq_hw.h +2 -0
@@ -80,6 +80,8 @@ struct aq_hw_link_status_s { };struct aq_stats_s { +u64 brc; +u64 btc;u64 uprc;u64 mprc;u64 bprc;
drivers/net/ethernet/aquantia/atlantic/aq_nic.c +8 -2
@@ -903,8 +903,14 @@ u64 *aq_nic_get_stats(struct aq_nic_s *self, u64 *data) data[++i] = stats->mbtc; data[++i] = stats->bbrc; data[++i] = stats->bbtc; - data[++i] = stats->ubrc + stats->mbrc + stats->bbrc; - data[++i] = stats->ubtc + stats->mbtc + stats->bbtc; +if (stats->brc) + data[++i] = stats->brc; +else + data[++i] = stats->ubrc + stats->mbrc + stats->bbrc; +if (stats->btc) + data[++i] = stats->btc; +else + data[++i] = stats->ubtc + stats->mbtc + stats->bbtc; data[++i] = stats->dma_pkt_rc; data[++i] = stats->dma_pkt_tc; data[++i] = stats->dma_oct_rc;
drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c +6 -1
@@ -49,6 +49,8 @@ static const struct pci_device_id aq_pci_tbl[] = { { PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC113), }, { PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC113C), }, { PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC115C), }, + { PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC113CA), }, + { PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC116C), }, {} };
@@ -85,7 +87,10 @@ static const struct aq_board_revision_s hw_atl_boards[] = { { AQ_DEVICE_ID_AQC113CS, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc113, }, { AQ_DEVICE_ID_AQC114CS, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc113, }, { AQ_DEVICE_ID_AQC113C, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc113, }, - { AQ_DEVICE_ID_AQC115C, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc113, }, + { AQ_DEVICE_ID_AQC115C, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc115c, }, + { AQ_DEVICE_ID_AQC113CA, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc113, }, + { AQ_DEVICE_ID_AQC116C, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc116c, }, + };MODULE_DEVICE_TABLE (pci, aq_pci_tbl);
drivers/net/ethernet/aquantia/atlantic/aq_vec.c +0 -3
@@ -362,9 +362,6 @@ unsigned int aq_vec_get_sw_stats(struct aq_vec_s *self, const unsigned int tc, u {unsigned int count; -WARN_ONCE (!aq_vec_is_valid_tc (self, tc), -"Invalid tc %u (#rx=%u, #tx=%u)\n" , - tc, self->rx_rings, self->tx_rings);if (!aq_vec_is_valid_tc (self, tc))return 0 ;
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c +23 -2
@@ -559,6 +559,11 @@ int hw_atl_utils_fw_rpc_wait(struct aq_hw_s *self, goto err_exit;if (fw.len ==0xFFFFU ) { +if (sw.len >sizeof (self->rpc)) { +printk (KERN_INFO "Invalid sw len: %x\n" , sw.len); + err = -EINVAL ; + goto err_exit; + } err =hw_atl_utils_fw_rpc_call (self, sw.len);if (err <0 ) goto err_exit;
@@ -567,6 +572,11 @@ int hw_atl_utils_fw_rpc_wait(struct aq_hw_s *self,if (rpc) {if (fw.len) { +if (fw.len >sizeof (self->rpc)) { +printk (KERN_INFO "Invalid fw len: %x\n" , fw.len); + err = -EINVAL ; + goto err_exit; + } err = hw_atl_utils_fw_downld_dwords(self, self->rpc_addr,
@@ -857,12 +867,20 @@ static int hw_atl_fw1x_deinit(struct aq_hw_s *self)int hw_atl_utils_update_stats (struct aq_hw_s *self) {struct aq_stats_s *cs = &self->curr_stats; +struct aq_stats_s curr_stats = *cs;struct hw_atl_utils_mbox mbox; +bool corrupted_stats = false;hw_atl_utils_mpi_read_stats (self, &mbox); -#define AQ_SDELTA (_N_) (self->curr_stats._N_ += \ - mbox.stats._N_ - self->last_stats._N_) +#define AQ_SDELTA (_N_) \ +do { \ + if (!corrupted_stats && \ + ((s64)(mbox.stats._N_ - self->last_stats._N_)) >= 0) \ + curr_stats._N_ += mbox.stats._N_ - self->last_stats._N_; \ + else \ + corrupted_stats = true; \ +} while (0)if (self->aq_link_status.mbps) {AQ_SDELTA (uprc);
@@ -882,6 +900,9 @@ int hw_atl_utils_update_stats(struct aq_hw_s *self)AQ_SDELTA (bbrc);AQ_SDELTA (bbtc);AQ_SDELTA (dpc); + +if (!corrupted_stats) + *cs = curr_stats; }#undef AQ_SDELTA
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils_fw2x.c +0 -3
@@ -132,9 +132,6 @@ static enum hw_atl_fw2x_rate link_speed_mask_2fw2x_ratemask(u32 speed)if (speed &AQ_NIC_RATE_5G ) rate |=FW2X_RATE_5G ; -if (speed &AQ_NIC_RATE_5GSR ) - rate |=FW2X_RATE_5G ; -if (speed &AQ_NIC_RATE_2G5 ) rate |=FW2X_RATE_2G5 ;
drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c +18 -4
@@ -65,11 +65,25 @@ const struct aq_hw_caps_s hw_atl2_caps_aqc113 = {AQ_NIC_RATE_5G |AQ_NIC_RATE_2G5 |AQ_NIC_RATE_1G | -AQ_NIC_RATE_1G_HALF |AQ_NIC_RATE_100M | -AQ_NIC_RATE_100M_HALF | -AQ_NIC_RATE_10M | - AQ_NIC_RATE_10M_HALF, + AQ_NIC_RATE_10M, +}; + +const struct aq_hw_caps_s hw_atl2_caps_aqc115c = { +DEFAULT_BOARD_BASIC_CAPABILITIES , + .media_type =AQ_HW_MEDIA_TYPE_TP , + .link_speed_msk =AQ_NIC_RATE_2G5 | +AQ_NIC_RATE_1G | +AQ_NIC_RATE_100M | +AQ_NIC_RATE_10M , +}; + +const struct aq_hw_caps_s hw_atl2_caps_aqc116c = { +DEFAULT_BOARD_BASIC_CAPABILITIES , + .media_type =AQ_HW_MEDIA_TYPE_TP , + .link_speed_msk =AQ_NIC_RATE_1G | +AQ_NIC_RATE_100M | +AQ_NIC_RATE_10M , };static u32 hw_atl2_sem_act_rslvr_get (struct aq_hw_s *self)
drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.h +2 -0
@@ -9,6 +9,8 @@#include "aq_common.h" extern const struct aq_hw_caps_s hw_atl2_caps_aqc113; +extern const struct aq_hw_caps_s hw_atl2_caps_aqc115c; +extern const struct aq_hw_caps_s hw_atl2_caps_aqc116c;extern const struct aq_hw_ops hw_atl2_ops;#endif /* HW_ATL2_H */
drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils.h +34 -4
@@ -239,7 +239,8 @@ struct version_s {u8 minor;u16 build; } phy; -u32 rsvd; + u32 drv_iface_ver:4; + u32 rsvd:28; };struct link_status_s {
@@ -424,7 +425,7 @@ struct cable_diag_status_s {u16 rsvd2; }; -struct statistics_s { +struct statistics_a0_s {struct {u32 link_up;u32 link_down;
@@ -457,6 +458,33 @@ struct statistics_s {u32 reserve_fw_gap; }; +struct __packed statistics_b0_s { +u64 rx_good_octets; +u64 rx_pause_frames; +u64 rx_good_frames; +u64 rx_errors; +u64 rx_unicast_frames; +u64 rx_multicast_frames; +u64 rx_broadcast_frames; + +u64 tx_good_octets; +u64 tx_pause_frames; +u64 tx_good_frames; +u64 tx_errors; +u64 tx_unicast_frames; +u64 tx_multicast_frames; +u64 tx_broadcast_frames; + +u32 main_loop_cycles; +}; + +struct __packed statistics_s { +union __packed { +struct statistics_a0_s a0; +struct statistics_b0_s b0; + }; +}; +struct filter_caps_s {u8 l2_filters_base_index:6 ;u8 flexible_filter_mask:2 ;
@@ -545,7 +573,7 @@ struct management_status_s {u32 rsvd5; }; -struct fw_interface_out { +struct __packed fw_interface_out {struct transaction_counter_s transaction_id;struct version_s version;struct link_status_s link_status;
@@ -569,7 +597,6 @@ struct fw_interface_out {struct core_dump_s core_dump;u32 rsvd11;struct statistics_s stats; -u32 rsvd12;struct filter_caps_s filter_caps;struct device_caps_s device_caps;u32 rsvd13;
@@ -592,6 +619,9 @@ struct fw_interface_out {#define AQ_HOST_MODE_LOW_POWER 3U#define AQ_HOST_MODE_SHUTDOWN 4U +#define AQ_A2_FW_INTERFACE_A0 0 +#define AQ_A2_FW_INTERFACE_B0 1 +int hw_atl2_utils_initfw (struct aq_hw_s *self,const struct aq_fw_ops **fw_ops);int hw_atl2_utils_soft_reset (struct aq_hw_s *self);
drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c +87 -23
150 lines not on this page · raw message
drivers/net/ethernet/dec/tulip/de4x5.c +21 -13
@@ -4708,6 +4708,10 @@ type3_infoblock(struct net_device *dev, u_char count, u_char *p) lp->ibn =3 ; lp->active = *p++;if (MOTO_SROM_BUG ) lp->active =0 ; +/* if (MOTO_SROM_BUG) statement indicates lp->active could +* be 8 (i.e. the size of array lp->phy) */ +if (WARN_ON (lp->active >=ARRAY_SIZE (lp->phy))) +return -EINVAL ; lp->phy[lp->active].gep = (*p ? p :NULL ); p += (2 * (*p) +1 ); lp->phy[lp->active].rst = (*p ? p :NULL ); p += (2 * (*p) +1 ); lp->phy[lp->active].mc =get_unaligned_le16 (p); p +=2 ;
@@ -4999,19 +5003,23 @@ mii_get_phy(struct net_device *dev) }if ((j == limit) && (i <DE4X5_MAX_MII )) {for (k=0 ; k <DE4X5_MAX_PHY && lp->phy[k].id; k++); - lp->phy[k].addr = i; - lp->phy[k].id = id; - lp->phy[k].spd.reg =GENERIC_REG ;/* ANLPA register */ - lp->phy[k].spd.mask =GENERIC_MASK ;/* 100Mb/s technologies */ - lp->phy[k].spd.value =GENERIC_VALUE ;/* TX & T4, H/F Duplex */ - lp->mii_cnt++; - lp->active++; -printk ("%s: Using generic MII device control. If the board doesn't operate,\nplease mail the following dump to the author:\n" , dev->name); - j = de4x5_debug; - de4x5_debug |=DEBUG_MII ; -de4x5_dbg_mii (dev, k); - de4x5_debug = j; -printk ("\n" ); +if (k <DE4X5_MAX_PHY ) { + lp->phy[k].addr = i; + lp->phy[k].id = id; + lp->phy[k].spd.reg =GENERIC_REG ;/* ANLPA register */ + lp->phy[k].spd.mask =GENERIC_MASK ;/* 100Mb/s technologies */ + lp->phy[k].spd.value =GENERIC_VALUE ;/* TX & T4, H/F Duplex */ + lp->mii_cnt++; + lp->active++; +printk ("%s: Using generic MII device control. If the board doesn't operate,\nplease mail the following dump to the author:\n" , dev->name); + j = de4x5_debug; + de4x5_debug |=DEBUG_MII ; +de4x5_dbg_mii (dev, k); + de4x5_debug = j; +printk ("\n" ); + }else { + goto purgatory; + } } } purgatory:
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +2 -0
@@ -4538,6 +4538,8 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev)fsl_mc_portal_free (priv->mc_io); +destroy_workqueue (priv->dpaa2_ptp_wq); +dev_dbg (net_dev->dev.parent,"Removed interface %s\n" , net_dev->name);free_netdev (net_dev);
drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c +4 -0
@@ -400,6 +400,10 @@ static void hns_dsaf_ge_srst_by_port(struct dsaf_device *dsaf_dev, u32 port,return ;if (!HNS_DSAF_IS_DEBUG (dsaf_dev)) { +/* DSAF_MAX_PORT_NUM is 6, but DSAF_GE_NUM is 8. +We need check to prevent array overflow */ +if (port >=DSAF_MAX_PORT_NUM ) +return ; reg_val_1 =0x1 << port; port_rst_off = dsaf_dev->mac_cb[port]->port_rst_off;/* there is difference between V1 and V2 in register.*/
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +1 -1
@@ -7457,7 +7457,7 @@ static int mvpp2_probe(struct platform_device *pdev) shared =num_present_cpus () - priv->nthreads;if (shared >0 ) -bitmap_fill (&priv->lock_map, +bitmap_set (&priv->lock_map,0 ,min_t (int, shared,MVPP2_MAX_THREADS ));for (i =0 ; i <MVPP2_MAX_THREADS ; i++) {
drivers/net/ethernet/marvell/octeontx2/af/rvu.c +1 -1
@@ -2281,7 +2281,7 @@ static int rvu_mbox_init(struct rvu *rvu, struct mbox_wq_info *mw, goto free_regions;break ;default : -return err; + goto free_regions; } mw->mbox_wq = alloc_workqueue(name,
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +7 -2
@@ -2286,9 +2286,14 @@ int mlx4_en_try_alloc_resources(struct mlx4_en_priv *priv, bool carry_xdp_prog) {struct bpf_prog *xdp_prog; -int i, t; +int i, t, ret; -mlx4_en_copy_priv (tmp, priv, prof); + ret =mlx4_en_copy_priv (tmp, priv, prof); +if (ret) { +en_warn (priv,"%s: mlx4_en_copy_priv() failed, return\n" , + __func__); +return ret; + }if (mlx4_en_alloc_resources (tmp)) { en_warn(priv,
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +1 -1
@@ -336,6 +336,7 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,case MLX5_CMD_OP_DEALLOC_SF :case MLX5_CMD_OP_DESTROY_UCTX :case MLX5_CMD_OP_DESTROY_UMEM : +case MLX5_CMD_OP_MODIFY_RQT :return MLX5_CMD_STAT_OK ;case MLX5_CMD_OP_QUERY_HCA_CAP :
@@ -441,7 +442,6 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,case MLX5_CMD_OP_MODIFY_TIS :case MLX5_CMD_OP_QUERY_TIS :case MLX5_CMD_OP_CREATE_RQT : -case MLX5_CMD_OP_MODIFY_RQT :case MLX5_CMD_OP_QUERY_RQT :case MLX5_CMD_OP_CREATE_FLOW_TABLE :
drivers/net/ethernet/mellanox/mlx5/core/en.h +12 -2
@@ -244,6 +244,17 @@ enum mlx5e_priv_flag {#define MLX5E_GET_PFLAG (params, pflag) (!!((params)->pflags & (BIT(pflag)))) +enum packet_merge { +MLX5E_PACKET_MERGE_NONE , +MLX5E_PACKET_MERGE_LRO , +MLX5E_PACKET_MERGE_SHAMPO , +}; + +struct mlx5e_packet_merge_param { +enum packet_merge type; +u32 timeout; +}; +struct mlx5e_params {u8 log_sq_size;u8 rq_wq_type;
@@ -258,13 +269,12 @@ struct mlx5e_params {bool tunneled_offload_en;struct dim_cq_moder rx_cq_moderation;struct dim_cq_moder tx_cq_moderation; -bool lro_en; +struct mlx5e_packet_merge_param packet_merge;u8 tx_min_inline_mode;bool vlan_strip_disable;bool scatter_fcs_en;bool rx_dim_enabled;bool tx_dim_enabled; -u32 lro_timeout;u32 pflags;struct bpf_prog *xdp_prog;struct mlx5e_xsk *xsk;
drivers/net/ethernet/mellanox/mlx5/core/en/params.c +6 -15
@@ -87,7 +87,8 @@ bool mlx5e_rx_is_linear_skb(struct mlx5e_params *params,u32 linear_frag_sz =max (mlx5e_rx_get_linear_frag_sz (params, xsk),mlx5e_rx_get_linear_frag_sz (params,NULL )); -return !params->lro_en && linear_frag_sz <=PAGE_SIZE ; +return params->packet_merge.type ==MLX5E_PACKET_MERGE_NONE && + linear_frag_sz <=PAGE_SIZE ; } bool mlx5e_verify_rx_mpwqe_strides(struct mlx5_core_dev *mdev,
@@ -164,19 +165,8 @@ u16 mlx5e_get_rq_headroom(struct mlx5_core_dev *mdev, mlx5e_rx_is_linear_skb(params, xsk) :mlx5e_rx_mpwqe_is_linear_skb (mdev, params, xsk); -return is_linear_skb ?mlx5e_get_linear_rq_headroom (params, xsk) :0 ; -} - -struct mlx5e_lro_param mlx5e_get_lro_param (struct mlx5e_params *params) -{ -struct mlx5e_lro_param lro_param; - - lro_param = (struct mlx5e_lro_param ) { - .enabled = params->lro_en, - .timeout = params->lro_timeout, - }; - -return lro_param; +return is_linear_skb || params->packet_merge.type ==MLX5E_PACKET_MERGE_SHAMPO ? +mlx5e_get_linear_rq_headroom (params, xsk) :0 ; }u16 mlx5e_calc_sq_stop_room (struct mlx5_core_dev *mdev,struct mlx5e_params *params)
@@ -485,10 +475,11 @@ static void mlx5e_build_rx_cq_param(struct mlx5_core_dev *mdev,static u8 rq_end_pad_mode (struct mlx5_core_dev *mdev,struct mlx5e_params *params) { +bool lro_en = params->packet_merge.type ==MLX5E_PACKET_MERGE_LRO ;bool ro =pcie_relaxed_ordering_enabled (mdev->pdev) &&MLX5_CAP_GEN (mdev, relaxed_ordering_write); -return ro && params->lro_en ? +return ro && lro_en ?MLX5_WQ_END_PAD_MODE_NONE :MLX5_WQ_END_PAD_MODE_ALIGN ; }
drivers/net/ethernet/mellanox/mlx5/core/en/params.h +0 -6
@@ -11,11 +11,6 @@ struct mlx5e_xsk_param {u16 chunk_size; }; -struct mlx5e_lro_param { -bool enabled; -u32 timeout; -}; -struct mlx5e_cq_param {u32 cqc[MLX5_ST_SZ_DW (cqc)];struct mlx5_wq_param wq;
@@ -125,7 +120,6 @@ u8 mlx5e_mpwqe_get_log_num_strides(struct mlx5_core_dev *mdev,u16 mlx5e_get_rq_headroom (struct mlx5_core_dev *mdev,struct mlx5e_params *params,struct mlx5e_xsk_param *xsk); -struct mlx5e_lro_param mlx5e_get_lro_param (struct mlx5e_params *params);/* Build queue parameters */
drivers/net/ethernet/mellanox/mlx5/core/en/rss.c +12 -11
@@ -127,7 +127,7 @@ mlx5e_rss_get_tt_config(struct mlx5e_rss *rss, enum mlx5_traffic_types tt)static int mlx5e_rss_create_tir (struct mlx5e_rss *rss,enum mlx5_traffic_types tt, -const struct mlx5e_lro_param *init_lro_param, +const struct mlx5e_packet_merge_param *init_pkt_merge_param,bool inner) {struct mlx5e_rss_params_traffic_type rss_tt;
@@ -161,7 +161,7 @@ static int mlx5e_rss_create_tir(struct mlx5e_rss *rss, rqtn =mlx5e_rqt_get_rqtn (&rss->rqt);mlx5e_tir_builder_build_rqt (builder, rss->mdev->mlx5e_res.hw_objs.td.tdn, rqtn, rss->inner_ft_support); -mlx5e_tir_builder_build_lro (builder, init_lro_param); +mlx5e_tir_builder_build_packet_merge (builder, init_pkt_merge_param); rss_tt =mlx5e_rss_get_tt_config (rss, tt);mlx5e_tir_builder_build_rss (builder, &rss->hash, &rss_tt, inner);
@@ -198,14 +198,14 @@ static void mlx5e_rss_destroy_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types }static int mlx5e_rss_create_tirs (struct mlx5e_rss *rss, -const struct mlx5e_lro_param *init_lro_param, +const struct mlx5e_packet_merge_param *init_pkt_merge_param,bool inner) {enum mlx5_traffic_types tt, max_tt;int err;for (tt =0 ; tt <MLX5E_NUM_INDIR_TIRS ; tt++) { - err =mlx5e_rss_create_tir (rss, tt, init_lro_param, inner); + err =mlx5e_rss_create_tir (rss, tt, init_pkt_merge_param, inner);if (err) goto err_destroy_tirs; }
@@ -297,7 +297,7 @@ int mlx5e_rss_init_no_tirs(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,int mlx5e_rss_init (struct mlx5e_rss *rss,struct mlx5_core_dev *mdev,bool inner_ft_support,u32 drop_rqn, -const struct mlx5e_lro_param *init_lro_param) +const struct mlx5e_packet_merge_param *init_pkt_merge_param) {int err;
@@ -305,12 +305,12 @@ int mlx5e_rss_init(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,if (err) goto err_out; - err =mlx5e_rss_create_tirs (rss, init_lro_param, false); + err =mlx5e_rss_create_tirs (rss, init_pkt_merge_param, false);if (err) goto err_destroy_rqt;if (inner_ft_support) { - err =mlx5e_rss_create_tirs (rss, init_lro_param, true); + err =mlx5e_rss_create_tirs (rss, init_pkt_merge_param, true);if (err) goto err_destroy_tirs; }
@@ -372,7 +372,7 @@ u32 mlx5e_rss_get_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,*/ int mlx5e_rss_obtain_tirn (struct mlx5e_rss *rss,enum mlx5_traffic_types tt, -const struct mlx5e_lro_param *init_lro_param, +const struct mlx5e_packet_merge_param *init_pkt_merge_param,bool inner,u32 *tirn) {struct mlx5e_tir *tir;
@@ -381,7 +381,7 @@ int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,if (!tir) {/* TIR doesn't exist, create one */ int err; - err =mlx5e_rss_create_tir (rss, tt, init_lro_param, inner); + err =mlx5e_rss_create_tir (rss, tt, init_pkt_merge_param, inner);if (err)return err; tir =rss_get_tir (rss, tt, inner);
@@ -418,7 +418,8 @@ void mlx5e_rss_disable(struct mlx5e_rss *rss) mlx5e_rqt_get_rqtn(&rss->rqt), rss->drop_rqn, err); } -int mlx5e_rss_lro_set_param (struct mlx5e_rss *rss,struct mlx5e_lro_param *lro_param) +int mlx5e_rss_packet_merge_set_param (struct mlx5e_rss *rss, +struct mlx5e_packet_merge_param *pkt_merge_param) {struct mlx5e_tir_builder *builder;enum mlx5_traffic_types tt;
@@ -428,7 +429,7 @@ int mlx5e_rss_lro_set_param(struct mlx5e_rss *rss, struct mlx5e_lro_param *lro_pif (!builder)return -ENOMEM ; -mlx5e_tir_builder_build_lro (builder, lro_param); +mlx5e_tir_builder_build_packet_merge (builder, pkt_merge_param); final_err =0 ;
drivers/net/ethernet/mellanox/mlx5/core/en/rss.h +4 -3
@@ -17,7 +17,7 @@ struct mlx5e_rss *mlx5e_rss_alloc(void);void mlx5e_rss_free (struct mlx5e_rss *rss);int mlx5e_rss_init (struct mlx5e_rss *rss,struct mlx5_core_dev *mdev,bool inner_ft_support,u32 drop_rqn, -const struct mlx5e_lro_param *init_lro_param); +const struct mlx5e_packet_merge_param *init_pkt_merge_param);int mlx5e_rss_init_no_tirs (struct mlx5e_rss *rss,struct mlx5_core_dev *mdev,bool inner_ft_support,u32 drop_rqn);int mlx5e_rss_cleanup (struct mlx5e_rss *rss);
@@ -30,13 +30,14 @@ u32 mlx5e_rss_get_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt, bool inner);int mlx5e_rss_obtain_tirn (struct mlx5e_rss *rss,enum mlx5_traffic_types tt, -const struct mlx5e_lro_param *init_lro_param, +const struct mlx5e_packet_merge_param *init_pkt_merge_param,bool inner,u32 *tirn);void mlx5e_rss_enable (struct mlx5e_rss *rss,u32 *rqns,unsigned int num_rqns);void mlx5e_rss_disable (struct mlx5e_rss *rss); -int mlx5e_rss_lro_set_param (struct mlx5e_rss *rss,struct mlx5e_lro_param *lro_param); +int mlx5e_rss_packet_merge_set_param (struct mlx5e_rss *rss, +struct mlx5e_packet_merge_param *pkt_merge_param);int mlx5e_rss_get_rxfh (struct mlx5e_rss *rss,u32 *indir,u8 *key,u8 *hfunc); int mlx5e_rss_set_rxfh(struct mlx5e_rss *rss, const u32 *indir, const u8 *key, const u8 *hfunc,
drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c +53 -13
3 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h +6 -5
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/tir.c +8 -8
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/tir.h +3 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_rxtx.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c +1 -23
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c +3 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +26 -20
46 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +6 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c +3 -4
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +8 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +6 -5
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/fw/uefi.c +6 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/iwl-drv.c +15 -7
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/iwl-drv.h +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +23 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/ops.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/ralink/rt2x00/rt2x00usb.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/tty/serial/8250/8250_bcm7271.c +13 -0
Lines of this file are not shown. View the raw message.
net/mpls/af_mpls.c +52 -16
68 lines not on this page · raw message
sound/soc/tegra/tegra186_dspk.c +147 -34
181 lines not on this page · raw message
sound/soc/tegra/tegra210_admaif.c +110 -30
140 lines not on this page · raw message
sound/soc/tegra/tegra210_dmic.c +149 -35
184 lines not on this page · raw message
sound/soc/tegra/tegra210_i2s.c +226 -70
296 lines not on this page · raw message
sound/usb/endpoint.c +161 -62
223 lines not on this page · raw message
sound/usb/pcm.c +130 -35
165 lines not on this page · raw message
tools/perf/util/sort.c +16 -36
52 lines not on this page · raw message
tools/testing/selftests/net/fcnal-test.sh +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/netns.sh +28 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/debug.config +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/kernel.config +1 -0
Lines of this file are not shown. View the raw message.
virt/kvm/kvm_main.c +33 -17
50 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.7 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm64/include/asm/kvm_arm.h | 4 arch/arm64/kernel/entry-ftrace.S | 6 arch/parisc/Makefile | 5 arch/parisc/install.sh | 1 arch/parisc/kernel/time.c | 30 - arch/powerpc/platforms/pseries/iommu.c | 15 arch/s390/include/asm/pci_io.h | 7 arch/s390/kernel/setup.c | 3 arch/x86/entry/entry_64.S | 35 - arch/x86/hyperv/hv_init.c | 9 arch/x86/kernel/cpu/mshyperv.c | 20 arch/x86/kernel/sev.c | 57 + arch/x86/kernel/tsc.c | 28 arch/x86/kernel/tsc_sync.c | 41 + arch/x86/kvm/lapic.c | 2 arch/x86/kvm/mmu/mmu.c | 37 - arch/x86/kvm/mmu/tdp_mmu.c | 36 - arch/x86/kvm/mmu/tdp_mmu.h | 5 arch/x86/kvm/svm/avic.c | 16 arch/x86/kvm/svm/pmu.c | 2 arch/x86/kvm/svm/sev.c | 31 - arch/x86/kvm/svm/svm.c | 1 arch/x86/kvm/vmx/nested.c | 49 - arch/x86/kvm/vmx/posted_intr.c | 20 arch/x86/kvm/vmx/vmx.c | 62 +- arch/x86/kvm/x86.c | 46 + arch/x86/kvm/x86.h | 7 arch/x86/realmode/init.c | 12 arch/x86/xen/xen-asm.S | 20 drivers/ata/ahci.c | 1 drivers/ata/libahci.c | 15 drivers/ata/sata_fsl.c | 20 drivers/char/ipmi/ipmi_msghandler.c | 13 drivers/cpufreq/cpufreq.c | 9 drivers/dma-buf/heaps/system_heap.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c | 1 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 5 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 20 drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 13 drivers/gpu/drm/i915/display/intel_display_types.h | 3 drivers/gpu/drm/i915/display/intel_dp.c | 11 drivers/gpu/drm/i915/display/intel_dp.h | 2 drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c | 5 drivers/gpu/drm/i915/gt/intel_workarounds.c | 7 drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c | 4 drivers/gpu/drm/msm/msm_debugfs.c | 1 drivers/gpu/drm/msm/msm_drv.c | 49 + drivers/gpu/drm/msm/msm_gem.c | 3 drivers/gpu/drm/msm/msm_gem_submit.c | 1 drivers/gpu/drm/msm/msm_gpu.h | 3 drivers/gpu/drm/msm/msm_gpu_devfreq.c | 5 drivers/gpu/drm/sun4i/Kconfig | 1 drivers/gpu/drm/vc4/vc4_kms.c | 40 - drivers/i2c/busses/i2c-cbus-gpio.c | 5 drivers/i2c/busses/i2c-stm32f7.c | 31 - drivers/net/dsa/b53/b53_spi.c | 14 drivers/net/dsa/mv88e6xxx/serdes.c | 252 +++++++- drivers/net/dsa/mv88e6xxx/serdes.h | 4 drivers/net/ethernet/aquantia/atlantic/aq_common.h | 27 drivers/net/ethernet/aquantia/atlantic/aq_hw.h | 2 drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 10 drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c | 7 drivers/net/ethernet/aquantia/atlantic/aq_vec.c | 3 drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c | 25 drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils_fw2x.c | 3 drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c | 22 drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.h | 2 drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils.h | 38 + drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c | 110 ++- drivers/net/ethernet/dec/tulip/de4x5.c | 34 - drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 2 drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c | 4 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 2 drivers/net/ethernet/marvell/octeontx2/af/rvu.c | 2 drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 9 drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en.h | 14 drivers/net/ethernet/mellanox/mlx5/core/en/params.c | 21 drivers/net/ethernet/mellanox/mlx5/core/en/params.h | 6 drivers/net/ethernet/mellanox/mlx5/core/en/rss.c | 23 drivers/net/ethernet/mellanox/mlx5/core/en/rss.h | 7 drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c | 66 +- drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h | 11 drivers/net/ethernet/mellanox/mlx5/core/en/tir.c | 16 drivers/net/ethernet/mellanox/mlx5/core/en/tir.h | 6 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_rxtx.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c | 24 drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c | 6 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 46 - drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 9 drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c | 4 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 1 drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c | 7 drivers/net/ethernet/natsemi/xtsonic.c | 2 drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 10 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 drivers/net/usb/lan78xx.c | 2 drivers/net/usb/r8152.c | 9 drivers/net/vrf.c | 2 drivers/net/wireguard/allowedips.c | 2 drivers/net/wireguard/device.c | 39 - drivers/net/wireguard/device.h | 9 drivers/net/wireguard/queueing.c | 6 drivers/net/wireguard/queueing.h | 2 drivers/net/wireguard/ratelimiter.c | 4 drivers/net/wireguard/receive.c | 39 - drivers/net/wireguard/socket.c | 2 drivers/net/wireless/intel/iwlwifi/fw/uefi.c | 6 drivers/net/wireless/intel/iwlwifi/iwl-drv.c | 22 drivers/net/wireless/intel/iwlwifi/iwl-drv.h | 3 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 24 drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 3 drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 5 drivers/net/wireless/mediatek/mt76/mt7915/mcu.c | 4 drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 3 drivers/pinctrl/qcom/Kconfig | 2 drivers/platform/x86/dell/Kconfig | 2 drivers/platform/x86/thinkpad_acpi.c | 13 drivers/scsi/lpfc/lpfc_els.c | 9 drivers/scsi/scsi_transport_iscsi.c | 6 drivers/scsi/ufs/ufshcd-pci.c | 18 drivers/thermal/thermal_core.c | 2 drivers/tty/serial/8250/8250_bcm7271.c | 13 drivers/tty/serial/8250/8250_pci.c | 39 - drivers/tty/serial/8250/8250_port.c | 7 drivers/tty/serial/amba-pl011.c | 1 drivers/tty/serial/liteuart.c | 20 drivers/tty/serial/msm_serial.c | 3 drivers/tty/serial/serial-tegra.c | 4 drivers/tty/serial/serial_core.c | 18 drivers/usb/cdns3/cdns3-gadget.c | 20 drivers/usb/cdns3/cdnsp-mem.c | 3 drivers/usb/core/quirks.c | 3 drivers/usb/host/xhci-ring.c | 21 drivers/usb/typec/tcpm/tcpm.c | 4 drivers/video/console/vgacon.c | 14 fs/btrfs/disk-io.c | 14 fs/btrfs/volumes.c | 18 fs/file.c | 4 fs/gfs2/bmap.c | 2 fs/gfs2/super.c | 14 fs/io-wq.c | 7 include/linux/acpi.h | 9 include/linux/kprobes.h | 2 include/linux/mlx5/mlx5_ifc.h | 8 include/linux/netdevice.h | 19 include/linux/siphash.h | 14 include/net/dst_cache.h | 11 include/net/fib_rules.h | 4 include/net/ip_fib.h | 2 include/net/netns/ipv4.h | 2 include/net/sock.h | 13 kernel/kprobes.c | 3 kernel/sched/core.c | 6 kernel/trace/trace.c | 12 kernel/trace/trace_events_hist.c | 2 lib/siphash.c | 12 net/core/dev.c | 5 net/core/dst_cache.c | 19 net/core/fib_rules.c | 2 net/ipv4/devinet.c | 2 net/ipv4/fib_frontend.c | 2 net/ipv4/fib_rules.c | 5 net/ipv4/fib_semantics.c | 4 net/ipv6/esp6.c | 6 net/ipv6/fib6_rules.c | 4 net/mac80211/led.h | 8 net/mac80211/rx.c | 10 net/mac80211/tx.c | 34 - net/mctp/route.c | 9 net/mpls/af_mpls.c | 68 +- net/rds/tcp.c | 2 net/rxrpc/conn_client.c | 14 net/rxrpc/peer_object.c | 14 net/smc/af_smc.c | 14 net/smc/smc_close.c | 8 net/smc/smc_core.c | 7 net/tls/tls_sw.c | 4 sound/hda/intel-dsp-config.c | 10 sound/pci/hda/hda_local.h | 9 sound/pci/hda/patch_cs8409.c | 5 sound/soc/codecs/rk817_codec.c | 1 sound/soc/tegra/tegra186_dspk.c | 181 ++++-- sound/soc/tegra/tegra210_admaif.c | 140 +++- sound/soc/tegra/tegra210_ahub.c | 11 sound/soc/tegra/tegra210_dmic.c | 184 +++++- sound/soc/tegra/tegra210_i2s.c | 296 +++++++--- sound/usb/card.h | 10 sound/usb/endpoint.c | 223 +++++-- sound/usb/endpoint.h | 13 sound/usb/pcm.c | 165 ++++- tools/perf/builtin-report.c | 15 tools/perf/ui/hist.c | 28 tools/perf/util/arm-spe.c | 15 tools/perf/util/hist.c | 23 tools/perf/util/hist.h | 1 tools/perf/util/sort.c | 52 - tools/perf/util/sort.h | 6 tools/perf/util/util.c | 14 tools/perf/util/util.h | 2 tools/testing/selftests/net/fcnal-test.sh | 4 tools/testing/selftests/wireguard/netns.sh | 30 - tools/testing/selftests/wireguard/qemu/debug.config | 2 tools/testing/selftests/wireguard/qemu/kernel.config | 1 virt/kvm/kvm_main.c | 50 + 207 files changed, 2853 insertions(+), 1214 deletions(-)
Aaro Koskinen (1):
i2c: cbus-gpio: set atomic transfer callback
Aaron Ma (1):
net: usb: r8152: Add MAC passthrough support for more Lenovo Docks
Adrian Hunter (1):
scsi: ufs: ufs-pci: Add support for Intel ADL
Al Cooper (1):
serial: 8250_bcm7271: UART errors after resuming from S2
Alain Volmat (3):
i2c: stm32f7: flush TX FIFO upon transfer errors
i2c: stm32f7: recover the bus on access timeout
i2c: stm32f7: stop dma transfer in case of NACK
Alexey Kardashevskiy (2):
powerpc/pseries/ddw: Revert "Extend upper limit for huge DMA window for persistent memory" powerpc/pseries/ddw: Do not try direct mapping with persistent memory and one window
Andreas Gruenbacher (1):
gfs2: Fix length of holes reported at end-of-file
Andrew Halaney (1):
preempt/dynamic: Fix setup_preempt_mode() return value
Arnd Bergmann (1):
siphash: use _unaligned version by default
Badhri Jagan Sridharan (1):
usb: typec: tcpm: Wait in SNK_DEBOUNCED until disconnect
Baokun Li (2):
sata_fsl: fix UAF in sata_fsl_port_stop when rmmod sata_fsl
sata_fsl: fix warning in remove_proc_entry when rmmod sata_fsl
Ben Ben-Ishay (1):
net/mlx5e: Rename lro_timeout to packet_merge_timeout
Ben Gardon (1):
KVM: x86/mmu: Fix TLB flush range when handling disconnected pt
Benjamin Poirier (1):
net: mpls: Fix notifications when deleting a device
Bernard Zhao (1):
drm/amd/amdgpu: fix potential memleak
Bob Peterson (1):
gfs2: release iopen glock early in evict
Catalin Marinas (1):
KVM: arm64: Avoid setting the upper 32 bits of TCR_EL2 and CPTR_EL2 to 1
Christophe JAILLET (2):
net: marvell: mvpp2: Fix the computation of shared CPUs
iwlwifi: Fix memory leaks in error handling path
Dan Carpenter (1):
KVM: VMX: Set failure code in prepare_vmcs02()
David Matlack (1):
KVM: x86/mmu: Rename slot_handle_leaf to slot_handle_level_4k
Dmitry Bogdanov (2):
atlantic: Increase delay for fw transactions
atlantic: Fix statistics logic for production hardware
Dmytro Linkin (2):
net/mlx5: E-switch, Respect BW share of the new group net/mlx5: E-Switch, Check group pointer before reading bw_share value
Dongliang Mu (1):
dpaa2-eth: destroy workqueue at the end of remove function
Douglas Anderson (2):
drm/msm/a6xx: Allocate enough space for GMU registers drm/msm: Fix mmap to include VM_IO and VM_DONTDUMP
Dust Li (1):
net/smc: fix wrong list_del in smc_lgr_cleanup_early
Eiichi Tsukata (2):
rxrpc: Fix rxrpc_peer leak in rxrpc_look_up_bundle()
rxrpc: Fix rxrpc_local leak in rxrpc_lookup_peer()
Eric Dumazet (2):
net: annotate data-races on txq->xmit_lock_owner
ipv4: convert fib_num_tclassid_users to atomic_t
Felix Fietkau (1):
mac80211: fix throughput LED trigger
Feng Tang (2):
x86/tsc: Add a timer to make sure TSC_adjust is always checked x86/tsc: Disable clocksource watchdog for TSC on qualified platorms
Filipe Manana (1):
btrfs: silence lockdep when reading chunk tree during mount
Florian Fainelli (1):
net: dsa: b53: Add SPI ID table
Frank Li (1):
usb: cdns3: gadget: fix new urb never complete if ep cancel previous requests
German Gomez (1):
perf inject: Fix ARM SPE handling
Greg Kroah-Hartman (1):
Linux 5.15.7
Guangming (1):
dma-buf: system_heap: Use 'for_each_sgtable_sg' in pages free flow
Gustavo A. R. Silva (1):
wireguard: ratelimiter: use kvcalloc() instead of kvzalloc()
Helge Deller (3):
parisc: Fix KBUILD_IMAGE for self-extracting kernel
parisc: Fix "make install" on newer debian releases
parisc: Mark cr16 CPU clocksource unstable on all SMP machines
Hou Wenlong (2):
KVM: x86/mmu: Skip tlb flush if it has been done in zap_gfn_range()
KVM: x86/mmu: Pass parameter flush as false in kvm_tdp_mmu_zap_collapsible_sptes()
Ian Rogers (2):
perf hist: Fix memory leak of a perf_hpp_fmt perf report: Fix memory leaks around perf_tip()
Ilia Sergachev (1):
serial: liteuart: Fix NULL pointer dereference in ->remove()
Ioanna Alifieraki (1):
ipmi: Move remove_work to dedicated workqueue
James Smart (1):
scsi: lpfc: Fix non-recovery of remote ports following an unsolicited LOGO
Jason A. Donenfeld (6):
wireguard: selftests: increase default dmesg log size
wireguard: allowedips: add missing __rcu annotation to satisfy sparse
wireguard: selftests: actually test for routing loops
wireguard: device: reset peer src endpoint when netns exits
wireguard: receive: use ring buffer for incoming handshakes
wireguard: receive: drop handshakes if queue lock is contended
Jay Dolan (2):
serial: 8250_pci: Fix ACCES entries in pci_serial_quirks array
serial: 8250_pci: rewrite pericom_do_set_divisor()
Jens Axboe (1):
io-wq: don't retry task_work creation failure on fatal conditions
Jimmy Wang (1):
platform/x86: thinkpad_acpi: Add support for dual fan control
Joerg Roedel (1):
x86/64/mm: Map all kernel memory into trampoline_pgd
Johan Hovold (3):
serial: core: fix transmit-buffer reset and memleak
serial: liteuart: fix use-after-free and memleak on unbind
serial: liteuart: fix minor-number leak on probe errors
Jordy Zomer (1):
ipv6: check return value of ipv6_skip_exthdr
José Roberto de Souza (1):
Revert "drm/i915: Implement Wa_1508744258"
Julian Braha (2):
drm/sun4i: fix unmet dependency on RESET_CONTROLLER for PHY_SUN6I_MIPI_DPHY
pinctrl: qcom: fix unmet dependencies on GPIOLIB for GPIOLIB_IRQCHIP
Khalid Manaa (1):
net/mlx5e: Rename TIR lro functions to TIR packet merge functions
Lai Jiangshan (5):
KVM: X86: Use vcpu->arch.walk_mmu for kvm_mmu_invlpg()
KVM: X86: Fix when shadow_root_level=5 && guest root_level<4 x86/entry: Add a fence for kernel entry SWAPGS in paranoid_entry() x86/entry: Use the correct fence macro after swapgs in kernel CR3 x86/xen: Add xenpv_restore_regs_and_return_to_usermode()
Li Zhijian (2):
wireguard: selftests: rename DEBUG_PI_LIST to DEBUG_PLIST
selftests: net: Correct case name
Lijo Lazar (1):
drm/amd/pm: Remove artificial freq level on Navi1x
Like Xu (1):
KVM: x86/pmu: Fix reserved bits for AMD PerfEvtSeln register
Linus Torvalds (1):
fget: check that the fd still exists after getting a ref to it
Lorenzo Bianconi (1):
mt76: mt7915: fix NULL pointer dereference in mt7915_get_phy_mode
Lukas Wunner (1):
serial: 8250: Fix RTS modem control while in rs485 mode
Lyude Paul (1):
drm/i915/dp: Perform 30ms delay after source OUI write
Maciej W. Rozycki (1):
vgacon: Propagate console boot parameters before calling `vc_resize'
Manaf Meethalavalappu Pallikunhi (1):
thermal: core: Reset previous low and high trip during thermal zone init
Marek Behún (6):
net: dsa: mv88e6xxx: Fix application of erratum 4.8 for 88E6393X
net: dsa: mv88e6xxx: Drop unnecessary check in mv88e6393x_serdes_erratum_4_6()
net: dsa: mv88e6xxx: Save power by disabling SerDes trasmitter and receiver
net: dsa: mv88e6xxx: Add fix for erratum 5.2 of 88E6393X family
net: dsa: mv88e6xxx: Fix inband AN for 2500base-x on 88E6393X family
net: dsa: mv88e6xxx: Link in pcs_get_state() if AN is bypassed
Mario Limonciello (3):
ata: ahci: Add Green Sardine vendor ID as board_ahci_mobile
ata: libahci: Adjust behavior when StorageD3Enable _DSD is set
ACPI: Add stubs for wakeup handler functions
Mark Bloch (1):
net/mlx5: E-Switch, fix single FDB creation on BlueField
Mark Rutland (1):
arm64: ftrace: add missing BTIs
Masami Hiramatsu (1):
kprobes: Limit max data_size of the kretprobe instances
Mathias Nyman (1):
xhci: Fix commad ring abort, write all 64 bits to CRCR register.
Matt Johnston (1):
mctp: Don't let RTM_DELROUTE delete local routes
Maxime Ripard (6):
drm/vc4: kms: Wait for the commit before increasing our clock rate drm/vc4: kms: Fix return code check
drm/vc4: kms: Add missing drm_crtc_commit_put
drm/vc4: kms: Clear the HVS FIFO commit pointer once done drm/vc4: kms: Don't duplicate pending commit
drm/vc4: kms: Fix previous HVS commit wait
Michael Sterritt (1):
x86/sev: Fix SEV-ES INS/OUTS instructions for word, dword, and qword
Mike Christie (1):
scsi: iscsi: Unblock session then wake up error handler
Mordechay Goodstein (1):
iwlwifi: mvm: retry init flow if failed
Moshe Shemesh (1):
net/mlx5: Move MODIFY_RQT command to ignore list in internal error state
Namhyung Kim (3):
perf sort: Fix the 'weight' sort key behavior perf sort: Fix the 'ins_lat' sort key behavior perf sort: Fix the 'p_stage_cyc' sort key behavior
Nicholas Kazlauskas (1):
drm/amd/display: Allow DSC on supported MST branch devices
Nicolas Frattaroli (1):
ASoC: rk817: Add module alias for rk817-codec
Nikita Danilov (2):
atlatnic: enable Nbase-t speeds with base-t
atlantic: Add missing DIDs and fix 115c.
Nikita Yushchenko (1):
tracing: Don't use out-of-sync va_list in event printing
Niklas Schnelle (1):
s390/pci: move pseudo-MMIO to prevent MIO overlap
Ole Ernst (1):
USB: NO_LPM quirk Lenovo Powered USB-C Travel Hub
Paolo Abeni (1):
tcp: fix page frag corruption on page fault
Paolo Bonzini (7):
KVM: fix avic_set_running for preemptable kernels
KVM: x86: ignore APICv if LAPIC is not enabled
KVM: VMX: prepare sync_pir_to_irr for running with APICv disabled
KVM: x86: Use a stable condition around all VT-d PI paths
KVM: MMU: shadow nested paging does not have PKU
KVM: x86: check PIR even for vCPUs with disabled APICv
KVM: SEV: initialize regions_list of a mirror VM
Patrik John (1):
serial: tegra: Change lower tolerance baud rate limit for tegra20 and tegra30
Pierre Gondois (1):
serial: pl011: Add ACPI SBSA UART match id
Pierre-Louis Bossart (1):
ALSA: intel-dsp-config: add quirk for CML devices based on ES8336 codec
Qais Yousef (1):
sched/uclamp: Fix rq->uclamp_max not set on first enqueue
Raed Salem (2):
net/mlx5e: IPsec: Fix Software parser inner l3 type setting in case of encapsulation net/mlx5e: Fix missing IPsec statistics on uplink representor
Randy Dunlap (1):
natsemi: xtensa: fix section mismatch warnings
Rob Clark (4):
drm/msm: Do hw_init() before capturing GPU state drm/msm/devfreq: Fix OPP refcnt leak drm/msm: Fix wait_fence submitqueue leak drm/msm: Restore error return on invalid fence
Sameer Pujar (9):
ASoC: tegra: Fix wrong value type in ADMAIF
ASoC: tegra: Fix wrong value type in I2S
ASoC: tegra: Fix wrong value type in DMIC
ASoC: tegra: Fix wrong value type in DSPK
ASoC: tegra: Fix kcontrol put callback in ADMAIF
ASoC: tegra: Fix kcontrol put callback in I2S
ASoC: tegra: Fix kcontrol put callback in DMIC
ASoC: tegra: Fix kcontrol put callback in DSPK
ASoC: tegra: Fix kcontrol put callback in AHUB
Sameer Saurabh (3):
atlantic: Fix to display FW bundle version instead of FW mac version. Remove Half duplex mode speed capabilities.
atlantic: Remove warn trace message.
Sean Christopherson (8):
x86/hyperv: Move required MSRs check to initial platform probing
KVM: Disallow user memslot with size that exceeds "unsigned long"
KVM: Ensure local memslot copies operate on up-to-date arch-specific data
KVM: nVMX: Emulate guest TLB flush on nested VM-Enter with new vpid12
KVM: nVMX: Flush current VPID (L1 vs. L2) for KVM_REQ_TLB_FLUSH_GUEST
KVM: nVMX: Abide to KVM_REQ_TLB_FLUSH_GUEST request on nested vmentry/vmexit
KVM: SEV: Return appropriate error codes if SEV-ES scratch setup fails
KVM: x86/mmu: Remove spurious TLB flushes in TDP MMU zap collapsible path
Slark Xiao (1):
platform/x86: thinkpad_acpi: Fix WWAN device disabled issue after S3 deep
Stanislaw Gruszka (1):
rt2x00: do not mark device gone on EPROTO errors during start
Stefan Binding (1):
ALSA: hda/cs8409: Set PMSG_ON earlier inside cs8409 driver
Stephen Suryaputra (1):
vrf: Reset IPCB/IP6CB when processing outbound pkts in vrf dev xmit
Steven Rostedt (VMware) (1):
tracing/histograms: String compares should not care about signed values
Sven Eckelmann (1):
tty: serial: msm_serial: Deactivate RX DMA for polling support
Sven Schuchmann (1):
net: usb: lan78xx: lan78xx_phy_init(): use PHY_POLL instead of "0" if no IRQ is available
Takashi Iwai (12):
ALSA: usb-audio: Restrict rates for the shared clocks
ALSA: usb-audio: Rename early_playback_start flag with lowlatency_playback
ALSA: usb-audio: Disable low-latency playback for free-wheel mode
ALSA: usb-audio: Disable low-latency mode for implicit feedback sync
ALSA: usb-audio: Check available frames for the next packet size
ALSA: usb-audio: Add spinlock to stop_urbs()
ALSA: usb-audio: Improved lowlatency playback support
ALSA: usb-audio: Avoid killing in-flight URBs during draining
ALSA: usb-audio: Fix packet size calculation regression
ALSA: usb-audio: Less restriction for low-latency playback mode
ALSA: usb-audio: Switch back to non-latency mode at a later point
ALSA: usb-audio: Don't start stream for capture at prepare
Tariq Toukan (1):
net/mlx5e: Sync TIR params updates against concurrent create/modify
Teng Qi (2):
ethernet: hisilicon: hns: hns_dsaf_misc: fix a possible array overflow in hns_dsaf_ge_srst_by_port()
net: ethernet: dec: tulip: de4x5: fix possible array overflows in type3_infoblock()
Thomas Weißschuh (1):
platform/x86: dell-wmi-descriptor: disable by default
Tianjia Zhang (1):
net/tls: Fix authentication failure in CCM mode
Tony Lu (1):
net/smc: Keep smc_close_final rc during active close
Vasily Gorbik (1):
s390/setup: avoid using memblock_enforce_memory_limit
Vincent Whitchurch (1):
net: stmmac: Avoid DMA_CHAN_CONTROL write if no Split Header support
Wang Yugui (1):
btrfs: check-integrity: fix a warning on write caching disabled disk
Wei Yongjun (1):
ipmi: msghandler: Make symbol 'remove_work_wq' static
Wen Gu (2):
net/smc: Transfer remaining wait queue entries during fallback net/smc: Avoid warning of possible recursive locking
William Kucharski (1):
net/rds: correct socket tunable error in rds_tcp_tune()
Xing Song (1):
mac80211: do not access the IV when it was stripped
Xiongfeng Wang (1):
cpufreq: Fix get_cpu_device() failure in add_cpu_dev_symlink()
Zekun Shen (1):
atlantic: Fix OOB read and write in hw_atl_utils_fw_rpc_wait
Zhou Qingyang (4):
net: qlogic: qlcnic: Fix a NULL pointer dereference in qlcnic_83xx_add_rings() net/mlx4_en: Fix an use-after-free bug in mlx4_en_try_alloc_resources()
octeontx2-af: Fix a memleak bug in rvu_mbox_init()
usb: cdnsp: Fix a NULL pointer dereference in cdnsp_endpoint_init()
liuguoqiang (1):
net: return correct error code
msizanoen1 (1):
ipv6: fix memory leak in fib6_rule_suppress
shaoyunl (1):
drm/amd/amdkfd: Fix kernel panic when reset failed and been triggered again
zhangyue (1):
net: tulip: de4x5: fix the problem that the array 'lp->phy[8]' may be out of bound
Łukasz Bartosik (1):
iwlwifi: fix warnings produced by kernel debug options