Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net

Cross-merge networking fixes after downstream PR.

Conflicts:

tools/testing/selftests/net/fcnal-test.sh
d7a2fc1437f7 ("selftests: net: fcnal-test: check if FIPS mode is enabled")
dd017c72dde6 ("selftests: fcnal: Test SO_DONTROUTE on TCP sockets.")
https://lore.kernel.org/all/5007b52c-dd16-dbf6-8d64-b9701bfa498b@tessares.net/
https://lore.kernel.org/all/20230619105427.4a0df9b3@canb.auug.org.au/

No adjacent changes.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+3201 -1156
+2
.mailmap
··· 70 70 Baolin Wang <baolin.wang@linux.alibaba.com> <baolin.wang7@gmail.com> 71 71 Bart Van Assche <bvanassche@acm.org> <bart.vanassche@sandisk.com> 72 72 Bart Van Assche <bvanassche@acm.org> <bart.vanassche@wdc.com> 73 + Ben Dooks <ben-linux@fluff.org> <ben.dooks@simtec.co.uk> 74 + Ben Dooks <ben-linux@fluff.org> <ben.dooks@sifive.com> 73 75 Ben Gardner <bgardner@wabtec.com> 74 76 Ben M Cahill <ben.m.cahill@intel.com> 75 77 Ben Widawsky <bwidawsk@kernel.org> <ben@bwidawsk.net>
+18
Documentation/riscv/patch-acceptance.rst
··· 16 16 principles to the RISC-V-related code that will be accepted for 17 17 inclusion in the kernel. 18 18 19 + Patchwork 20 + --------- 21 + 22 + RISC-V has a patchwork instance, where the status of patches can be checked: 23 + 24 + https://patchwork.kernel.org/project/linux-riscv/list/ 25 + 26 + If your patch does not appear in the default view, the RISC-V maintainers have 27 + likely either requested changes, or expect it to be applied to another tree. 28 + 29 + Automation runs against this patchwork instance, building/testing patches as 30 + they arrive. The automation applies patches against the current HEAD of the 31 + RISC-V `for-next` and `fixes` branches, depending on whether the patch has been 32 + detected as a fix. Failing those, it will use the RISC-V `master` branch. 33 + The exact commit to which a series has been applied will be noted on patchwork. 34 + Patches for which any of the checks fail are unlikely to be applied and in most 35 + cases will need to be resubmitted. 36 + 19 37 Submit Checklist Addendum 20 38 ------------------------- 21 39 We'll only accept patches for new modules or extensions if the
+3 -4
Documentation/trace/user_events.rst
··· 14 14 /sys/kernel/tracing/user_events_status and can both register and write 15 15 data out via /sys/kernel/tracing/user_events_data. 16 16 17 - Programs can also use /sys/kernel/tracing/dynamic_events to register and 18 - delete user based events via the u: prefix. The format of the command to 19 - dynamic_events is the same as the ioctl with the u: prefix applied. 20 - 21 17 Typically programs will register a set of events that they wish to expose to 22 18 tools that can read trace_events (such as ftrace and perf). The registration 23 19 process tells the kernel which address and bit to reflect if any tool has ··· 139 143 its name. Delete will only succeed if there are no references left to the 140 144 event (in both user and kernel space). User programs should use a separate file 141 145 to request deletes than the one used for registration due to this. 146 + 147 + **NOTE:** By default events will auto-delete when there are no references left 148 + to the event. Flags in the future may change this logic. 142 149 143 150 Unregistering 144 151 -------------
+9 -7
MAINTAINERS
··· 9971 9971 L: linux-wpan@vger.kernel.org 9972 9972 S: Maintained 9973 9973 W: https://linux-wpan.org/ 9974 - T: git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan.git 9975 - T: git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan-next.git 9974 + Q: https://patchwork.kernel.org/project/linux-wpan/list/ 9975 + T: git git://git.kernel.org/pub/scm/linux/kernel/git/wpan/wpan.git 9976 + T: git git://git.kernel.org/pub/scm/linux/kernel/git/wpan/wpan-next.git 9976 9977 F: Documentation/networking/ieee802154.rst 9977 9978 F: drivers/net/ieee802154/ 9978 9979 F: include/linux/ieee802154.h ··· 13284 13283 F: include/soc/mediatek/smi.h 13285 13284 13286 13285 MEDIATEK SWITCH DRIVER 13287 - M: Sean Wang <sean.wang@mediatek.com> 13286 + M: Arınç ÜNAL <arinc.unal@arinc9.com> 13287 + M: Daniel Golle <daniel@makrotopia.org> 13288 13288 M: Landen Chao <Landen.Chao@mediatek.com> 13289 13289 M: DENG Qingfang <dqfext@gmail.com> 13290 - M: Daniel Golle <daniel@makrotopia.org> 13290 + M: Sean Wang <sean.wang@mediatek.com> 13291 13291 L: netdev@vger.kernel.org 13292 13292 S: Maintained 13293 13293 F: drivers/net/dsa/mt7530-mdio.c ··· 16401 16399 F: drivers/pci/controller/dwc/pcie-keembay.c 16402 16400 16403 16401 PCIE DRIVER FOR INTEL LGM GW SOC 16404 - M: Rahul Tanwar <rtanwar@maxlinear.com> 16402 + M: Chuanhua Lei <lchuanhua@maxlinear.com> 16405 16403 L: linux-pci@vger.kernel.org 16406 16404 S: Maintained 16407 16405 F: Documentation/devicetree/bindings/pci/intel-gw-pcie.yaml ··· 17844 17842 Real-time Linux Analysis (RTLA) tools 17845 17843 M: Daniel Bristot de Oliveira <bristot@kernel.org> 17846 17844 M: Steven Rostedt <rostedt@goodmis.org> 17847 - L: linux-trace-devel@vger.kernel.org 17845 + L: linux-trace-kernel@vger.kernel.org 17848 17846 S: Maintained 17849 17847 F: Documentation/tools/rtla/ 17850 17848 F: tools/tracing/rtla/ ··· 18414 18412 RUNTIME VERIFICATION (RV) 18415 18413 M: Daniel Bristot de Oliveira <bristot@kernel.org> 18416 18414 M: Steven Rostedt <rostedt@goodmis.org> 18417 - L: linux-trace-devel@vger.kernel.org 18415 + L: linux-trace-kernel@vger.kernel.org 18418 18416 S: Maintained 18419 18417 F: Documentation/trace/rv/ 18420 18418 F: include/linux/rv.h
+1 -1
Makefile
··· 2 2 VERSION = 6 3 3 PATCHLEVEL = 4 4 4 SUBLEVEL = 0 5 - EXTRAVERSION = -rc6 5 + EXTRAVERSION = -rc7 6 6 NAME = Hurr durr I'ma ninja sloth 7 7 8 8 # *DOCUMENTATION*
+5
arch/arm/include/asm/arm_pmuv3.h
··· 222 222 return false; 223 223 } 224 224 225 + static inline bool kvm_set_pmuserenr(u64 val) 226 + { 227 + return false; 228 + } 229 + 225 230 /* PMU Version in DFR Register */ 226 231 #define ARMV8_PMU_DFR_VER_NI 0 227 232 #define ARMV8_PMU_DFR_VER_V3P4 0x5
+1 -1
arch/arm64/hyperv/mshyperv.c
··· 67 67 if (ret) 68 68 return ret; 69 69 70 - ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "arm64/hyperv_init:online", 70 + ret = cpuhp_setup_state(CPUHP_AP_HYPERV_ONLINE, "arm64/hyperv_init:online", 71 71 hv_common_cpu_init, hv_common_cpu_die); 72 72 if (ret < 0) { 73 73 hv_common_free();
+7
arch/arm64/include/asm/kvm_host.h
··· 699 699 #define SYSREGS_ON_CPU __vcpu_single_flag(sflags, BIT(4)) 700 700 /* Software step state is Active-pending */ 701 701 #define DBG_SS_ACTIVE_PENDING __vcpu_single_flag(sflags, BIT(5)) 702 + /* PMUSERENR for the guest EL0 is on physical CPU */ 703 + #define PMUSERENR_ON_CPU __vcpu_single_flag(sflags, BIT(6)) 702 704 703 705 704 706 /* Pointer to the vcpu's SVE FFR for sve_{save,load}_state() */ ··· 1067 1065 #ifdef CONFIG_KVM 1068 1066 void kvm_set_pmu_events(u32 set, struct perf_event_attr *attr); 1069 1067 void kvm_clr_pmu_events(u32 clr); 1068 + bool kvm_set_pmuserenr(u64 val); 1070 1069 #else 1071 1070 static inline void kvm_set_pmu_events(u32 set, struct perf_event_attr *attr) {} 1072 1071 static inline void kvm_clr_pmu_events(u32 clr) {} 1072 + static inline bool kvm_set_pmuserenr(u64 val) 1073 + { 1074 + return false; 1075 + } 1073 1076 #endif 1074 1077 1075 1078 void kvm_vcpu_load_sysregs_vhe(struct kvm_vcpu *vcpu);
+13 -2
arch/arm64/kvm/hyp/include/hyp/switch.h
··· 82 82 * EL1 instead of being trapped to EL2. 83 83 */ 84 84 if (kvm_arm_support_pmu_v3()) { 85 + struct kvm_cpu_context *hctxt; 86 + 85 87 write_sysreg(0, pmselr_el0); 88 + 89 + hctxt = &this_cpu_ptr(&kvm_host_data)->host_ctxt; 90 + ctxt_sys_reg(hctxt, PMUSERENR_EL0) = read_sysreg(pmuserenr_el0); 86 91 write_sysreg(ARMV8_PMU_USERENR_MASK, pmuserenr_el0); 92 + vcpu_set_flag(vcpu, PMUSERENR_ON_CPU); 87 93 } 88 94 89 95 vcpu->arch.mdcr_el2_host = read_sysreg(mdcr_el2); ··· 112 106 write_sysreg(vcpu->arch.mdcr_el2_host, mdcr_el2); 113 107 114 108 write_sysreg(0, hstr_el2); 115 - if (kvm_arm_support_pmu_v3()) 116 - write_sysreg(0, pmuserenr_el0); 109 + if (kvm_arm_support_pmu_v3()) { 110 + struct kvm_cpu_context *hctxt; 111 + 112 + hctxt = &this_cpu_ptr(&kvm_host_data)->host_ctxt; 113 + write_sysreg(ctxt_sys_reg(hctxt, PMUSERENR_EL0), pmuserenr_el0); 114 + vcpu_clear_flag(vcpu, PMUSERENR_ON_CPU); 115 + } 117 116 118 117 if (cpus_have_final_cap(ARM64_SME)) { 119 118 sysreg_clear_set_s(SYS_HFGRTR_EL2, 0,
+14
arch/arm64/kvm/hyp/vhe/switch.c
··· 92 92 } 93 93 NOKPROBE_SYMBOL(__deactivate_traps); 94 94 95 + /* 96 + * Disable IRQs in {activate,deactivate}_traps_vhe_{load,put}() to 97 + * prevent a race condition between context switching of PMUSERENR_EL0 98 + * in __{activate,deactivate}_traps_common() and IPIs that attempts to 99 + * update PMUSERENR_EL0. See also kvm_set_pmuserenr(). 100 + */ 95 101 void activate_traps_vhe_load(struct kvm_vcpu *vcpu) 96 102 { 103 + unsigned long flags; 104 + 105 + local_irq_save(flags); 97 106 __activate_traps_common(vcpu); 107 + local_irq_restore(flags); 98 108 } 99 109 100 110 void deactivate_traps_vhe_put(struct kvm_vcpu *vcpu) 101 111 { 112 + unsigned long flags; 113 + 114 + local_irq_save(flags); 102 115 __deactivate_traps_common(vcpu); 116 + local_irq_restore(flags); 103 117 } 104 118 105 119 static const exit_handler_fn hyp_exit_handlers[] = {
+19 -1
arch/arm64/kvm/pmu-emul.c
··· 700 700 701 701 mutex_lock(&arm_pmus_lock); 702 702 703 - cpu = smp_processor_id(); 703 + /* 704 + * It is safe to use a stale cpu to iterate the list of PMUs so long as 705 + * the same value is used for the entirety of the loop. Given this, and 706 + * the fact that no percpu data is used for the lookup there is no need 707 + * to disable preemption. 708 + * 709 + * It is still necessary to get a valid cpu, though, to probe for the 710 + * default PMU instance as userspace is not required to specify a PMU 711 + * type. In order to uphold the preexisting behavior KVM selects the 712 + * PMU instance for the core where the first call to the 713 + * KVM_ARM_VCPU_PMU_V3_CTRL attribute group occurs. A dependent use case 714 + * would be a user with disdain of all things big.LITTLE that affines 715 + * the VMM to a particular cluster of cores. 716 + * 717 + * In any case, userspace should just do the sane thing and use the UAPI 718 + * to select a PMU type directly. But, be wary of the baggage being 719 + * carried here. 720 + */ 721 + cpu = raw_smp_processor_id(); 704 722 list_for_each_entry(entry, &arm_pmus, entry) { 705 723 tmp = entry->arm_pmu; 706 724
+27
arch/arm64/kvm/pmu.c
··· 209 209 kvm_vcpu_pmu_enable_el0(events_host); 210 210 kvm_vcpu_pmu_disable_el0(events_guest); 211 211 } 212 + 213 + /* 214 + * With VHE, keep track of the PMUSERENR_EL0 value for the host EL0 on the pCPU 215 + * where PMUSERENR_EL0 for the guest is loaded, since PMUSERENR_EL0 is switched 216 + * to the value for the guest on vcpu_load(). The value for the host EL0 217 + * will be restored on vcpu_put(), before returning to userspace. 218 + * This isn't necessary for nVHE, as the register is context switched for 219 + * every guest enter/exit. 220 + * 221 + * Return true if KVM takes care of the register. Otherwise return false. 222 + */ 223 + bool kvm_set_pmuserenr(u64 val) 224 + { 225 + struct kvm_cpu_context *hctxt; 226 + struct kvm_vcpu *vcpu; 227 + 228 + if (!kvm_arm_support_pmu_v3() || !has_vhe()) 229 + return false; 230 + 231 + vcpu = kvm_get_running_vcpu(); 232 + if (!vcpu || !vcpu_get_flag(vcpu, PMUSERENR_ON_CPU)) 233 + return false; 234 + 235 + hctxt = &this_cpu_ptr(&kvm_host_data)->host_ctxt; 236 + ctxt_sys_reg(hctxt, PMUSERENR_EL0) = val; 237 + return true; 238 + }
+7 -4
arch/arm64/kvm/vgic/vgic-init.c
··· 446 446 int kvm_vgic_map_resources(struct kvm *kvm) 447 447 { 448 448 struct vgic_dist *dist = &kvm->arch.vgic; 449 + enum vgic_type type; 449 450 gpa_t dist_base; 450 451 int ret = 0; 451 452 ··· 461 460 if (!irqchip_in_kernel(kvm)) 462 461 goto out; 463 462 464 - if (dist->vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2) 463 + if (dist->vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2) { 465 464 ret = vgic_v2_map_resources(kvm); 466 - else 465 + type = VGIC_V2; 466 + } else { 467 467 ret = vgic_v3_map_resources(kvm); 468 + type = VGIC_V3; 469 + } 468 470 469 471 if (ret) { 470 472 __kvm_vgic_destroy(kvm); ··· 477 473 dist_base = dist->vgic_dist_base; 478 474 mutex_unlock(&kvm->arch.config_lock); 479 475 480 - ret = vgic_register_dist_iodev(kvm, dist_base, 481 - kvm_vgic_global_state.type); 476 + ret = vgic_register_dist_iodev(kvm, dist_base, type); 482 477 if (ret) { 483 478 kvm_err("Unable to register VGIC dist MMIO regions\n"); 484 479 kvm_vgic_destroy(kvm);
-4
arch/parisc/include/asm/assembly.h
··· 90 90 #include <asm/asmregs.h> 91 91 #include <asm/psw.h> 92 92 93 - sp = 30 94 - gp = 27 95 - ipsw = 22 96 - 97 93 /* 98 94 * We provide two versions of each macro to convert from physical 99 95 * to virtual and vice versa. The "_r1" versions take one argument
+9 -1
arch/powerpc/mm/book3s64/radix_tlb.c
··· 795 795 goto out; 796 796 797 797 if (current->active_mm == mm) { 798 + unsigned long flags; 799 + 798 800 WARN_ON_ONCE(current->mm != NULL); 799 - /* Is a kernel thread and is using mm as the lazy tlb */ 801 + /* 802 + * It is a kernel thread and is using mm as the lazy tlb, so 803 + * switch it to init_mm. This is not always called from IPI 804 + * (e.g., flush_type_needed), so must disable irqs. 805 + */ 806 + local_irq_save(flags); 800 807 mmgrab_lazy_tlb(&init_mm); 801 808 current->active_mm = &init_mm; 802 809 switch_mm_irqs_off(mm, &init_mm, current); 803 810 mmdrop_lazy_tlb(mm); 811 + local_irq_restore(flags); 804 812 } 805 813 806 814 /*
+1 -1
arch/x86/hyperv/hv_init.c
··· 416 416 goto free_vp_assist_page; 417 417 } 418 418 419 - cpuhp = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "x86/hyperv_init:online", 419 + cpuhp = cpuhp_setup_state(CPUHP_AP_HYPERV_ONLINE, "x86/hyperv_init:online", 420 420 hv_cpu_init, hv_cpu_die); 421 421 if (cpuhp < 0) 422 422 goto free_ghcb_page;
+2
arch/x86/hyperv/hv_vtl.c
··· 20 20 { 21 21 pr_info("Linux runs in Hyper-V Virtual Trust Level\n"); 22 22 23 + x86_platform.realmode_reserve = x86_init_noop; 24 + x86_platform.realmode_init = x86_init_noop; 23 25 x86_init.irqs.pre_vector_init = x86_init_noop; 24 26 x86_init.timers.timer_init = x86_init_noop; 25 27
+1 -1
arch/x86/net/bpf_jit_comp.c
··· 2570 2570 } 2571 2571 2572 2572 if (bpf_jit_enable > 1) 2573 - bpf_jit_dump(prog->len, proglen, pass + 1, image); 2573 + bpf_jit_dump(prog->len, proglen, pass + 1, rw_image); 2574 2574 2575 2575 if (image) { 2576 2576 if (!prog->is_func || extra_pass) {
+31 -9
block/blk-cgroup.c
··· 34 34 #include "blk-ioprio.h" 35 35 #include "blk-throttle.h" 36 36 37 + static void __blkcg_rstat_flush(struct blkcg *blkcg, int cpu); 38 + 37 39 /* 38 40 * blkcg_pol_mutex protects blkcg_policy[] and policy [de]activation. 39 41 * blkcg_pol_register_mutex nests outside of it and synchronizes entire ··· 57 55 static LIST_HEAD(all_blkcgs); /* protected by blkcg_pol_mutex */ 58 56 59 57 bool blkcg_debug_stats = false; 58 + 59 + static DEFINE_RAW_SPINLOCK(blkg_stat_lock); 60 60 61 61 #define BLKG_DESTROY_BATCH_SIZE 64 62 62 ··· 167 163 static void __blkg_release(struct rcu_head *rcu) 168 164 { 169 165 struct blkcg_gq *blkg = container_of(rcu, struct blkcg_gq, rcu_head); 166 + struct blkcg *blkcg = blkg->blkcg; 167 + int cpu; 170 168 171 169 #ifdef CONFIG_BLK_CGROUP_PUNT_BIO 172 170 WARN_ON(!bio_list_empty(&blkg->async_bios)); 173 171 #endif 172 + /* 173 + * Flush all the non-empty percpu lockless lists before releasing 174 + * us, given these stat belongs to us. 175 + * 176 + * blkg_stat_lock is for serializing blkg stat update 177 + */ 178 + for_each_possible_cpu(cpu) 179 + __blkcg_rstat_flush(blkcg, cpu); 174 180 175 181 /* release the blkcg and parent blkg refs this blkg has been holding */ 176 182 css_put(&blkg->blkcg->css); ··· 965 951 u64_stats_update_end_irqrestore(&blkg->iostat.sync, flags); 966 952 } 967 953 968 - static void blkcg_rstat_flush(struct cgroup_subsys_state *css, int cpu) 954 + static void __blkcg_rstat_flush(struct blkcg *blkcg, int cpu) 969 955 { 970 - struct blkcg *blkcg = css_to_blkcg(css); 971 956 struct llist_head *lhead = per_cpu_ptr(blkcg->lhead, cpu); 972 957 struct llist_node *lnode; 973 958 struct blkg_iostat_set *bisc, *next_bisc; 974 - 975 - /* Root-level stats are sourced from system-wide IO stats */ 976 - if (!cgroup_parent(css->cgroup)) 977 - return; 978 959 979 960 rcu_read_lock(); 980 961 981 962 lnode = llist_del_all(lhead); 982 963 if (!lnode) 983 964 goto out; 965 + 966 + /* 967 + * For covering concurrent parent blkg update from blkg_release(). 968 + * 969 + * When flushing from cgroup, cgroup_rstat_lock is always held, so 970 + * this lock won't cause contention most of time. 971 + */ 972 + raw_spin_lock(&blkg_stat_lock); 984 973 985 974 /* 986 975 * Iterate only the iostat_cpu's queued in the lockless list. ··· 1008 991 if (parent && parent->parent) 1009 992 blkcg_iostat_update(parent, &blkg->iostat.cur, 1010 993 &blkg->iostat.last); 1011 - percpu_ref_put(&blkg->refcnt); 1012 994 } 1013 - 995 + raw_spin_unlock(&blkg_stat_lock); 1014 996 out: 1015 997 rcu_read_unlock(); 998 + } 999 + 1000 + static void blkcg_rstat_flush(struct cgroup_subsys_state *css, int cpu) 1001 + { 1002 + /* Root-level stats are sourced from system-wide IO stats */ 1003 + if (cgroup_parent(css->cgroup)) 1004 + __blkcg_rstat_flush(css_to_blkcg(css), cpu); 1016 1005 } 1017 1006 1018 1007 /* ··· 2098 2075 2099 2076 llist_add(&bis->lnode, lhead); 2100 2077 WRITE_ONCE(bis->lqueued, true); 2101 - percpu_ref_get(&bis->blkg->refcnt); 2102 2078 } 2103 2079 2104 2080 u64_stats_update_end_irqrestore(&bis->sync, flags);
+4
drivers/accel/qaic/qaic_drv.c
··· 97 97 98 98 cleanup_usr: 99 99 cleanup_srcu_struct(&usr->qddev_lock); 100 + ida_free(&qaic_usrs, usr->handle); 100 101 free_usr: 101 102 kfree(usr); 102 103 dev_unlock: ··· 225 224 struct qaic_user *usr; 226 225 227 226 qddev = qdev->qddev; 227 + qdev->qddev = NULL; 228 + if (!qddev) 229 + return; 228 230 229 231 /* 230 232 * Existing users get unresolvable errors till they close FDs.
-2
drivers/acpi/acpica/achware.h
··· 101 101 acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info, 102 102 acpi_event_status *event_status); 103 103 104 - acpi_status acpi_hw_disable_all_gpes(void); 105 - 106 104 acpi_status acpi_hw_enable_all_runtime_gpes(void); 107 105 108 106 acpi_status acpi_hw_enable_all_wakeup_gpes(void);
+12 -4
drivers/acpi/sleep.c
··· 636 636 } 637 637 638 638 /* 639 - * Disable and clear GPE status before interrupt is enabled. Some GPEs 640 - * (like wakeup GPE) haven't handler, this can avoid such GPE misfire. 641 - * acpi_leave_sleep_state will reenable specific GPEs later 639 + * Disable all GPE and clear their status bits before interrupts are 640 + * enabled. Some GPEs (like wakeup GPEs) have no handlers and this can 641 + * prevent them from producing spurious interrups. 642 + * 643 + * acpi_leave_sleep_state() will reenable specific GPEs later. 644 + * 645 + * Because this code runs on one CPU with disabled interrupts (all of 646 + * the other CPUs are offline at this time), it need not acquire any 647 + * sleeping locks which may trigger an implicit preemption point even 648 + * if there is no contention, so avoid doing that by using a low-level 649 + * library routine here. 642 650 */ 643 - acpi_disable_all_gpes(); 651 + acpi_hw_disable_all_gpes(); 644 652 /* Allow EC transactions to happen. */ 645 653 acpi_ec_unblock_transactions(); 646 654
+2 -1
drivers/ata/libata-core.c
··· 5348 5348 5349 5349 mutex_init(&ap->scsi_scan_mutex); 5350 5350 INIT_DELAYED_WORK(&ap->hotplug_task, ata_scsi_hotplug); 5351 - INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan); 5351 + INIT_DELAYED_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan); 5352 5352 INIT_LIST_HEAD(&ap->eh_done_q); 5353 5353 init_waitqueue_head(&ap->eh_wait_q); 5354 5354 init_completion(&ap->park_req_pending); ··· 5954 5954 WARN_ON(!(ap->pflags & ATA_PFLAG_UNLOADED)); 5955 5955 5956 5956 cancel_delayed_work_sync(&ap->hotplug_task); 5957 + cancel_delayed_work_sync(&ap->scsi_rescan_task); 5957 5958 5958 5959 skip_eh: 5959 5960 /* clean up zpodd on port removal */
+1 -1
drivers/ata/libata-eh.c
··· 2984 2984 ehc->i.flags |= ATA_EHI_SETMODE; 2985 2985 2986 2986 /* schedule the scsi_rescan_device() here */ 2987 - schedule_work(&(ap->scsi_rescan_task)); 2987 + schedule_delayed_work(&ap->scsi_rescan_task, 0); 2988 2988 } else if (dev->class == ATA_DEV_UNKNOWN && 2989 2989 ehc->tries[dev->devno] && 2990 2990 ata_class_enabled(ehc->classes[dev->devno])) {
+21 -1
drivers/ata/libata-scsi.c
··· 4597 4597 void ata_scsi_dev_rescan(struct work_struct *work) 4598 4598 { 4599 4599 struct ata_port *ap = 4600 - container_of(work, struct ata_port, scsi_rescan_task); 4600 + container_of(work, struct ata_port, scsi_rescan_task.work); 4601 4601 struct ata_link *link; 4602 4602 struct ata_device *dev; 4603 4603 unsigned long flags; 4604 + bool delay_rescan = false; 4604 4605 4605 4606 mutex_lock(&ap->scsi_scan_mutex); 4606 4607 spin_lock_irqsave(ap->lock, flags); ··· 4615 4614 if (scsi_device_get(sdev)) 4616 4615 continue; 4617 4616 4617 + /* 4618 + * If the rescan work was scheduled because of a resume 4619 + * event, the port is already fully resumed, but the 4620 + * SCSI device may not yet be fully resumed. In such 4621 + * case, executing scsi_rescan_device() may cause a 4622 + * deadlock with the PM code on device_lock(). Prevent 4623 + * this by giving up and retrying rescan after a short 4624 + * delay. 4625 + */ 4626 + delay_rescan = sdev->sdev_gendev.power.is_suspended; 4627 + if (delay_rescan) { 4628 + scsi_device_put(sdev); 4629 + break; 4630 + } 4631 + 4618 4632 spin_unlock_irqrestore(ap->lock, flags); 4619 4633 scsi_rescan_device(&(sdev->sdev_gendev)); 4620 4634 scsi_device_put(sdev); ··· 4639 4623 4640 4624 spin_unlock_irqrestore(ap->lock, flags); 4641 4625 mutex_unlock(&ap->scsi_scan_mutex); 4626 + 4627 + if (delay_rescan) 4628 + schedule_delayed_work(&ap->scsi_rescan_task, 4629 + msecs_to_jiffies(5)); 4642 4630 }
+1 -1
drivers/base/regmap/regmap-spi-avmm.c
··· 660 660 .reg_format_endian_default = REGMAP_ENDIAN_NATIVE, 661 661 .val_format_endian_default = REGMAP_ENDIAN_NATIVE, 662 662 .max_raw_read = SPI_AVMM_VAL_SIZE * MAX_READ_CNT, 663 - .max_raw_write = SPI_AVMM_VAL_SIZE * MAX_WRITE_CNT, 663 + .max_raw_write = SPI_AVMM_REG_SIZE + SPI_AVMM_VAL_SIZE * MAX_WRITE_CNT, 664 664 .free_context = spi_avmm_bridge_ctx_free, 665 665 }; 666 666
+37 -45
drivers/block/virtio_blk.c
··· 348 348 blk_mq_end_request(req, status); 349 349 } 350 350 351 - static void virtblk_complete_batch(struct io_comp_batch *iob) 352 - { 353 - struct request *req; 354 - 355 - rq_list_for_each(&iob->req_list, req) { 356 - virtblk_unmap_data(req, blk_mq_rq_to_pdu(req)); 357 - virtblk_cleanup_cmd(req); 358 - } 359 - blk_mq_end_request_batch(iob); 360 - } 361 - 362 - static int virtblk_handle_req(struct virtio_blk_vq *vq, 363 - struct io_comp_batch *iob) 364 - { 365 - struct virtblk_req *vbr; 366 - int req_done = 0; 367 - unsigned int len; 368 - 369 - while ((vbr = virtqueue_get_buf(vq->vq, &len)) != NULL) { 370 - struct request *req = blk_mq_rq_from_pdu(vbr); 371 - 372 - if (likely(!blk_should_fake_timeout(req->q)) && 373 - !blk_mq_complete_request_remote(req) && 374 - !blk_mq_add_to_batch(req, iob, virtblk_vbr_status(vbr), 375 - virtblk_complete_batch)) 376 - virtblk_request_done(req); 377 - req_done++; 378 - } 379 - 380 - return req_done; 381 - } 382 - 383 351 static void virtblk_done(struct virtqueue *vq) 384 352 { 385 353 struct virtio_blk *vblk = vq->vdev->priv; 386 - struct virtio_blk_vq *vblk_vq = &vblk->vqs[vq->index]; 387 - int req_done = 0; 354 + bool req_done = false; 355 + int qid = vq->index; 356 + struct virtblk_req *vbr; 388 357 unsigned long flags; 389 - DEFINE_IO_COMP_BATCH(iob); 358 + unsigned int len; 390 359 391 - spin_lock_irqsave(&vblk_vq->lock, flags); 360 + spin_lock_irqsave(&vblk->vqs[qid].lock, flags); 392 361 do { 393 362 virtqueue_disable_cb(vq); 394 - req_done += virtblk_handle_req(vblk_vq, &iob); 363 + while ((vbr = virtqueue_get_buf(vblk->vqs[qid].vq, &len)) != NULL) { 364 + struct request *req = blk_mq_rq_from_pdu(vbr); 395 365 366 + if (likely(!blk_should_fake_timeout(req->q))) 367 + blk_mq_complete_request(req); 368 + req_done = true; 369 + } 396 370 if (unlikely(virtqueue_is_broken(vq))) 397 371 break; 398 372 } while (!virtqueue_enable_cb(vq)); 399 373 400 - if (req_done) { 401 - if (!rq_list_empty(iob.req_list)) 402 - iob.complete(&iob); 403 - 404 - /* In case queue is stopped waiting for more buffers. */ 374 + /* In case queue is stopped waiting for more buffers. */ 375 + if (req_done) 405 376 blk_mq_start_stopped_hw_queues(vblk->disk->queue, true); 406 - } 407 - spin_unlock_irqrestore(&vblk_vq->lock, flags); 377 + spin_unlock_irqrestore(&vblk->vqs[qid].lock, flags); 408 378 } 409 379 410 380 static void virtio_commit_rqs(struct blk_mq_hw_ctx *hctx) ··· 1253 1283 } 1254 1284 } 1255 1285 1286 + static void virtblk_complete_batch(struct io_comp_batch *iob) 1287 + { 1288 + struct request *req; 1289 + 1290 + rq_list_for_each(&iob->req_list, req) { 1291 + virtblk_unmap_data(req, blk_mq_rq_to_pdu(req)); 1292 + virtblk_cleanup_cmd(req); 1293 + } 1294 + blk_mq_end_request_batch(iob); 1295 + } 1296 + 1256 1297 static int virtblk_poll(struct blk_mq_hw_ctx *hctx, struct io_comp_batch *iob) 1257 1298 { 1258 1299 struct virtio_blk *vblk = hctx->queue->queuedata; 1259 1300 struct virtio_blk_vq *vq = get_virtio_blk_vq(hctx); 1301 + struct virtblk_req *vbr; 1260 1302 unsigned long flags; 1303 + unsigned int len; 1261 1304 int found = 0; 1262 1305 1263 1306 spin_lock_irqsave(&vq->lock, flags); 1264 - found = virtblk_handle_req(vq, iob); 1307 + 1308 + while ((vbr = virtqueue_get_buf(vq->vq, &len)) != NULL) { 1309 + struct request *req = blk_mq_rq_from_pdu(vbr); 1310 + 1311 + found++; 1312 + if (!blk_mq_complete_request_remote(req) && 1313 + !blk_mq_add_to_batch(req, iob, virtblk_vbr_status(vbr), 1314 + virtblk_complete_batch)) 1315 + virtblk_request_done(req); 1316 + } 1265 1317 1266 1318 if (found) 1267 1319 blk_mq_start_stopped_hw_queues(vblk->disk->queue, true);
+4 -1
drivers/clk/clk-composite.c
··· 119 119 if (ret) 120 120 continue; 121 121 122 - rate_diff = abs(req->rate - tmp_req.rate); 122 + if (req->rate >= tmp_req.rate) 123 + rate_diff = req->rate - tmp_req.rate; 124 + else 125 + rate_diff = tmp_req.rate - req->rate; 123 126 124 127 if (!rate_diff || !req->best_parent_hw 125 128 || best_rate_diff > rate_diff) {
+1 -1
drivers/clk/clk-loongson2.c
··· 40 40 { 41 41 int ret; 42 42 struct clk_hw *hw; 43 - struct clk_init_data init; 43 + struct clk_init_data init = { }; 44 44 45 45 hw = devm_kzalloc(dev, sizeof(*hw), GFP_KERNEL); 46 46 if (!hw)
+15 -3
drivers/clk/mediatek/clk-mt8365.c
··· 23 23 static DEFINE_SPINLOCK(mt8365_clk_lock); 24 24 25 25 static const struct mtk_fixed_clk top_fixed_clks[] = { 26 + FIXED_CLK(CLK_TOP_CLK_NULL, "clk_null", NULL, 0), 26 27 FIXED_CLK(CLK_TOP_I2S0_BCK, "i2s0_bck", NULL, 26000000), 27 28 FIXED_CLK(CLK_TOP_DSI0_LNTC_DSICK, "dsi0_lntc_dsick", "clk26m", 28 29 75000000), ··· 560 559 0x324, 16, 8, CLK_DIVIDER_ROUND_CLOSEST), 561 560 DIV_ADJ_F(CLK_TOP_APLL12_CK_DIV3, "apll12_ck_div3", "apll_i2s3_sel", 562 561 0x324, 24, 8, CLK_DIVIDER_ROUND_CLOSEST), 562 + DIV_ADJ_F(CLK_TOP_APLL12_CK_DIV4, "apll12_ck_div4", "apll_tdmout_sel", 563 + 0x328, 0, 8, CLK_DIVIDER_ROUND_CLOSEST), 564 + DIV_ADJ_F(CLK_TOP_APLL12_CK_DIV4B, "apll12_ck_div4b", "apll_tdmout_sel", 565 + 0x328, 8, 8, CLK_DIVIDER_ROUND_CLOSEST), 566 + DIV_ADJ_F(CLK_TOP_APLL12_CK_DIV5, "apll12_ck_div5", "apll_tdmin_sel", 567 + 0x328, 16, 8, CLK_DIVIDER_ROUND_CLOSEST), 568 + DIV_ADJ_F(CLK_TOP_APLL12_CK_DIV5B, "apll12_ck_div5b", "apll_tdmin_sel", 569 + 0x328, 24, 8, CLK_DIVIDER_ROUND_CLOSEST), 563 570 DIV_ADJ_F(CLK_TOP_APLL12_CK_DIV6, "apll12_ck_div6", "apll_spdif_sel", 564 571 0x32c, 0, 8, CLK_DIVIDER_ROUND_CLOSEST), 565 572 }; ··· 592 583 593 584 #define GATE_TOP0(_id, _name, _parent, _shift) \ 594 585 GATE_MTK(_id, _name, _parent, &top0_cg_regs, \ 595 - _shift, &mtk_clk_gate_ops_no_setclr_inv) 586 + _shift, &mtk_clk_gate_ops_no_setclr) 596 587 597 588 #define GATE_TOP1(_id, _name, _parent, _shift) \ 598 589 GATE_MTK(_id, _name, _parent, &top1_cg_regs, \ 599 - _shift, &mtk_clk_gate_ops_no_setclr) 590 + _shift, &mtk_clk_gate_ops_no_setclr_inv) 600 591 601 592 #define GATE_TOP2(_id, _name, _parent, _shift) \ 602 593 GATE_MTK(_id, _name, _parent, &top2_cg_regs, \ 603 - _shift, &mtk_clk_gate_ops_no_setclr) 594 + _shift, &mtk_clk_gate_ops_no_setclr_inv) 604 595 605 596 static const struct mtk_gate top_clk_gates[] = { 606 597 GATE_TOP0(CLK_TOP_CONN_32K, "conn_32k", "clk32k", 10), ··· 705 696 GATE_IFR3(CLK_IFR_GCPU, "ifr_gcpu", "axi_sel", 8), 706 697 GATE_IFR3(CLK_IFR_TRNG, "ifr_trng", "axi_sel", 9), 707 698 GATE_IFR3(CLK_IFR_AUXADC, "ifr_auxadc", "clk26m", 10), 699 + GATE_IFR3(CLK_IFR_CPUM, "ifr_cpum", "clk26m", 11), 708 700 GATE_IFR3(CLK_IFR_AUXADC_MD, "ifr_auxadc_md", "clk26m", 14), 709 701 GATE_IFR3(CLK_IFR_AP_DMA, "ifr_ap_dma", "axi_sel", 18), 710 702 GATE_IFR3(CLK_IFR_DEBUGSYS, "ifr_debugsys", "axi_sel", 24), ··· 727 717 GATE_IFR5(CLK_IFR_PWRAP_TMR, "ifr_pwrap_tmr", "clk26m", 12), 728 718 GATE_IFR5(CLK_IFR_PWRAP_SPI, "ifr_pwrap_spi", "clk26m", 13), 729 719 GATE_IFR5(CLK_IFR_PWRAP_SYS, "ifr_pwrap_sys", "clk26m", 14), 720 + GATE_MTK_FLAGS(CLK_IFR_MCU_PM_BK, "ifr_mcu_pm_bk", NULL, &ifr5_cg_regs, 721 + 17, &mtk_clk_gate_ops_setclr, CLK_IGNORE_UNUSED), 730 722 GATE_IFR5(CLK_IFR_IRRX_26M, "ifr_irrx_26m", "clk26m", 22), 731 723 GATE_IFR5(CLK_IFR_IRRX_32K, "ifr_irrx_32k", "clk32k", 23), 732 724 GATE_IFR5(CLK_IFR_I2C0_AXI, "ifr_i2c0_axi", "i2c_sel", 24),
+1 -1
drivers/clk/pxa/clk-pxa3xx.c
··· 164 164 accr &= ~disable; 165 165 accr |= enable; 166 166 167 - writel(accr, ACCR); 167 + writel(accr, clk_regs + ACCR); 168 168 if (xclkcfg) 169 169 __asm__("mcr p14, 0, %0, c6, c0, 0\n" : : "r"(xclkcfg)); 170 170
+6 -41
drivers/dma-buf/udmabuf.c
··· 12 12 #include <linux/shmem_fs.h> 13 13 #include <linux/slab.h> 14 14 #include <linux/udmabuf.h> 15 - #include <linux/hugetlb.h> 16 15 #include <linux/vmalloc.h> 17 16 #include <linux/iosys-map.h> 18 17 ··· 206 207 struct udmabuf *ubuf; 207 208 struct dma_buf *buf; 208 209 pgoff_t pgoff, pgcnt, pgidx, pgbuf = 0, pglimit; 209 - struct page *page, *hpage = NULL; 210 - pgoff_t subpgoff, maxsubpgs; 211 - struct hstate *hpstate; 210 + struct page *page; 212 211 int seals, ret = -EINVAL; 213 212 u32 i, flags; 214 213 ··· 242 245 if (!memfd) 243 246 goto err; 244 247 mapping = memfd->f_mapping; 245 - if (!shmem_mapping(mapping) && !is_file_hugepages(memfd)) 248 + if (!shmem_mapping(mapping)) 246 249 goto err; 247 250 seals = memfd_fcntl(memfd, F_GET_SEALS, 0); 248 251 if (seals == -EINVAL) ··· 253 256 goto err; 254 257 pgoff = list[i].offset >> PAGE_SHIFT; 255 258 pgcnt = list[i].size >> PAGE_SHIFT; 256 - if (is_file_hugepages(memfd)) { 257 - hpstate = hstate_file(memfd); 258 - pgoff = list[i].offset >> huge_page_shift(hpstate); 259 - subpgoff = (list[i].offset & 260 - ~huge_page_mask(hpstate)) >> PAGE_SHIFT; 261 - maxsubpgs = huge_page_size(hpstate) >> PAGE_SHIFT; 262 - } 263 259 for (pgidx = 0; pgidx < pgcnt; pgidx++) { 264 - if (is_file_hugepages(memfd)) { 265 - if (!hpage) { 266 - hpage = find_get_page_flags(mapping, pgoff, 267 - FGP_ACCESSED); 268 - if (!hpage) { 269 - ret = -EINVAL; 270 - goto err; 271 - } 272 - } 273 - page = hpage + subpgoff; 274 - get_page(page); 275 - subpgoff++; 276 - if (subpgoff == maxsubpgs) { 277 - put_page(hpage); 278 - hpage = NULL; 279 - subpgoff = 0; 280 - pgoff++; 281 - } 282 - } else { 283 - page = shmem_read_mapping_page(mapping, 284 - pgoff + pgidx); 285 - if (IS_ERR(page)) { 286 - ret = PTR_ERR(page); 287 - goto err; 288 - } 260 + page = shmem_read_mapping_page(mapping, pgoff + pgidx); 261 + if (IS_ERR(page)) { 262 + ret = PTR_ERR(page); 263 + goto err; 289 264 } 290 265 ubuf->pages[pgbuf++] = page; 291 266 } 292 267 fput(memfd); 293 268 memfd = NULL; 294 - if (hpage) { 295 - put_page(hpage); 296 - hpage = NULL; 297 - } 298 269 } 299 270 300 271 exp_info.ops = &udmabuf_ops;
+3 -2
drivers/firmware/cirrus/cs_dsp.c
··· 2124 2124 file, blocks, le32_to_cpu(blk->len), 2125 2125 type, le32_to_cpu(blk->id)); 2126 2126 2127 + region_name = cs_dsp_mem_region_name(type); 2127 2128 mem = cs_dsp_find_region(dsp, type); 2128 2129 if (!mem) { 2129 2130 cs_dsp_err(dsp, "No base for region %x\n", type); ··· 2148 2147 reg = dsp->ops->region_to_reg(mem, reg); 2149 2148 reg += offset; 2150 2149 } else { 2151 - cs_dsp_err(dsp, "No %x for algorithm %x\n", 2152 - type, le32_to_cpu(blk->id)); 2150 + cs_dsp_err(dsp, "No %s for algorithm %x\n", 2151 + region_name, le32_to_cpu(blk->id)); 2153 2152 } 2154 2153 break; 2155 2154
-21
drivers/firmware/efi/efi.c
··· 361 361 static inline void efi_debugfs_init(void) {} 362 362 #endif 363 363 364 - static void refresh_nv_rng_seed(struct work_struct *work) 365 - { 366 - u8 seed[EFI_RANDOM_SEED_SIZE]; 367 - 368 - get_random_bytes(seed, sizeof(seed)); 369 - efi.set_variable(L"RandomSeed", &LINUX_EFI_RANDOM_SEED_TABLE_GUID, 370 - EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | 371 - EFI_VARIABLE_RUNTIME_ACCESS, sizeof(seed), seed); 372 - memzero_explicit(seed, sizeof(seed)); 373 - } 374 - static int refresh_nv_rng_seed_notification(struct notifier_block *nb, unsigned long action, void *data) 375 - { 376 - static DECLARE_WORK(work, refresh_nv_rng_seed); 377 - schedule_work(&work); 378 - return NOTIFY_DONE; 379 - } 380 - static struct notifier_block refresh_nv_rng_seed_nb = { .notifier_call = refresh_nv_rng_seed_notification }; 381 - 382 364 /* 383 365 * We register the efi subsystem with the firmware subsystem and the 384 366 * efivars subsystem with the efi subsystem, if the system was booted with ··· 432 450 if (efi.coco_secret != EFI_INVALID_TABLE_ADDR) 433 451 platform_device_register_simple("efi_secret", 0, NULL, 0); 434 452 #endif 435 - 436 - if (efi_rt_services_supported(EFI_RT_SUPPORTED_SET_VARIABLE)) 437 - execute_with_initialized_rng(&refresh_nv_rng_seed_nb); 438 453 439 454 return 0; 440 455
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
··· 1615 1615 0x5874, 1616 1616 0x5940, 1617 1617 0x5941, 1618 + 0x5b70, 1618 1619 0x5b72, 1619 1620 0x5b73, 1620 1621 0x5b74,
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
··· 140 140 141 141 if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) 142 142 places[c].lpfn = visible_pfn; 143 - else if (adev->gmc.real_vram_size != adev->gmc.visible_vram_size) 143 + else 144 144 places[c].flags |= TTM_PL_FLAG_TOPDOWN; 145 145 146 146 if (flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS)
+5 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
··· 3548 3548 void *fw_pri_cpu_addr; 3549 3549 int ret; 3550 3550 3551 + if (adev->psp.vbflash_image_size == 0) 3552 + return -EINVAL; 3553 + 3551 3554 dev_info(adev->dev, "VBIOS flash to PSP started"); 3552 3555 3553 3556 ret = amdgpu_bo_create_kernel(adev, adev->psp.vbflash_image_size, ··· 3602 3599 } 3603 3600 3604 3601 static const struct bin_attribute psp_vbflash_bin_attr = { 3605 - .attr = {.name = "psp_vbflash", .mode = 0664}, 3602 + .attr = {.name = "psp_vbflash", .mode = 0660}, 3606 3603 .size = 0, 3607 3604 .write = amdgpu_psp_vbflash_write, 3608 3605 .read = amdgpu_psp_vbflash_read, 3609 3606 }; 3610 3607 3611 - static DEVICE_ATTR(psp_vbflash_status, 0444, amdgpu_psp_vbflash_status, NULL); 3608 + static DEVICE_ATTR(psp_vbflash_status, 0440, amdgpu_psp_vbflash_status, NULL); 3612 3609 3613 3610 int amdgpu_psp_sysfs_init(struct amdgpu_device *adev) 3614 3611 {
+18
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
··· 581 581 if (ring->is_sw_ring) 582 582 amdgpu_sw_ring_ib_end(ring); 583 583 } 584 + 585 + void amdgpu_ring_ib_on_emit_cntl(struct amdgpu_ring *ring) 586 + { 587 + if (ring->is_sw_ring) 588 + amdgpu_sw_ring_ib_mark_offset(ring, AMDGPU_MUX_OFFSET_TYPE_CONTROL); 589 + } 590 + 591 + void amdgpu_ring_ib_on_emit_ce(struct amdgpu_ring *ring) 592 + { 593 + if (ring->is_sw_ring) 594 + amdgpu_sw_ring_ib_mark_offset(ring, AMDGPU_MUX_OFFSET_TYPE_CE); 595 + } 596 + 597 + void amdgpu_ring_ib_on_emit_de(struct amdgpu_ring *ring) 598 + { 599 + if (ring->is_sw_ring) 600 + amdgpu_sw_ring_ib_mark_offset(ring, AMDGPU_MUX_OFFSET_TYPE_DE); 601 + }
+9
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
··· 227 227 int (*preempt_ib)(struct amdgpu_ring *ring); 228 228 void (*emit_mem_sync)(struct amdgpu_ring *ring); 229 229 void (*emit_wave_limit)(struct amdgpu_ring *ring, bool enable); 230 + void (*patch_cntl)(struct amdgpu_ring *ring, unsigned offset); 231 + void (*patch_ce)(struct amdgpu_ring *ring, unsigned offset); 232 + void (*patch_de)(struct amdgpu_ring *ring, unsigned offset); 230 233 }; 231 234 232 235 struct amdgpu_ring { ··· 321 318 #define amdgpu_ring_init_cond_exec(r) (r)->funcs->init_cond_exec((r)) 322 319 #define amdgpu_ring_patch_cond_exec(r,o) (r)->funcs->patch_cond_exec((r),(o)) 323 320 #define amdgpu_ring_preempt_ib(r) (r)->funcs->preempt_ib(r) 321 + #define amdgpu_ring_patch_cntl(r, o) ((r)->funcs->patch_cntl((r), (o))) 322 + #define amdgpu_ring_patch_ce(r, o) ((r)->funcs->patch_ce((r), (o))) 323 + #define amdgpu_ring_patch_de(r, o) ((r)->funcs->patch_de((r), (o))) 324 324 325 325 int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned ndw); 326 326 void amdgpu_ring_ib_begin(struct amdgpu_ring *ring); 327 327 void amdgpu_ring_ib_end(struct amdgpu_ring *ring); 328 + void amdgpu_ring_ib_on_emit_cntl(struct amdgpu_ring *ring); 329 + void amdgpu_ring_ib_on_emit_ce(struct amdgpu_ring *ring); 330 + void amdgpu_ring_ib_on_emit_de(struct amdgpu_ring *ring); 328 331 329 332 void amdgpu_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count); 330 333 void amdgpu_ring_generic_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib);
+60
drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.c
··· 105 105 amdgpu_fence_update_start_timestamp(e->ring, 106 106 chunk->sync_seq, 107 107 ktime_get()); 108 + if (chunk->sync_seq == 109 + le32_to_cpu(*(e->ring->fence_drv.cpu_addr + 2))) { 110 + if (chunk->cntl_offset <= e->ring->buf_mask) 111 + amdgpu_ring_patch_cntl(e->ring, 112 + chunk->cntl_offset); 113 + if (chunk->ce_offset <= e->ring->buf_mask) 114 + amdgpu_ring_patch_ce(e->ring, chunk->ce_offset); 115 + if (chunk->de_offset <= e->ring->buf_mask) 116 + amdgpu_ring_patch_de(e->ring, chunk->de_offset); 117 + } 108 118 amdgpu_ring_mux_copy_pkt_from_sw_ring(mux, e->ring, 109 119 chunk->start, 110 120 chunk->end); ··· 417 407 amdgpu_ring_mux_end_ib(mux, ring); 418 408 } 419 409 410 + void amdgpu_sw_ring_ib_mark_offset(struct amdgpu_ring *ring, enum amdgpu_ring_mux_offset_type type) 411 + { 412 + struct amdgpu_device *adev = ring->adev; 413 + struct amdgpu_ring_mux *mux = &adev->gfx.muxer; 414 + unsigned offset; 415 + 416 + offset = ring->wptr & ring->buf_mask; 417 + 418 + amdgpu_ring_mux_ib_mark_offset(mux, ring, offset, type); 419 + } 420 + 420 421 void amdgpu_ring_mux_start_ib(struct amdgpu_ring_mux *mux, struct amdgpu_ring *ring) 421 422 { 422 423 struct amdgpu_mux_entry *e; ··· 450 429 } 451 430 452 431 chunk->start = ring->wptr; 432 + /* the initialized value used to check if they are set by the ib submission*/ 433 + chunk->cntl_offset = ring->buf_mask + 1; 434 + chunk->de_offset = ring->buf_mask + 1; 435 + chunk->ce_offset = ring->buf_mask + 1; 453 436 list_add_tail(&chunk->entry, &e->list); 454 437 } 455 438 ··· 476 451 list_del(&chunk->entry); 477 452 kmem_cache_free(amdgpu_mux_chunk_slab, chunk); 478 453 } 454 + } 455 + } 456 + 457 + void amdgpu_ring_mux_ib_mark_offset(struct amdgpu_ring_mux *mux, 458 + struct amdgpu_ring *ring, u64 offset, 459 + enum amdgpu_ring_mux_offset_type type) 460 + { 461 + struct amdgpu_mux_entry *e; 462 + struct amdgpu_mux_chunk *chunk; 463 + 464 + e = amdgpu_ring_mux_sw_entry(mux, ring); 465 + if (!e) { 466 + DRM_ERROR("cannot find entry!\n"); 467 + return; 468 + } 469 + 470 + chunk = list_last_entry(&e->list, struct amdgpu_mux_chunk, entry); 471 + if (!chunk) { 472 + DRM_ERROR("cannot find chunk!\n"); 473 + return; 474 + } 475 + 476 + switch (type) { 477 + case AMDGPU_MUX_OFFSET_TYPE_CONTROL: 478 + chunk->cntl_offset = offset; 479 + break; 480 + case AMDGPU_MUX_OFFSET_TYPE_DE: 481 + chunk->de_offset = offset; 482 + break; 483 + case AMDGPU_MUX_OFFSET_TYPE_CE: 484 + chunk->ce_offset = offset; 485 + break; 486 + default: 487 + DRM_ERROR("invalid type (%d)\n", type); 488 + break; 479 489 } 480 490 } 481 491
+15
drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.h
··· 50 50 struct list_head list; 51 51 }; 52 52 53 + enum amdgpu_ring_mux_offset_type { 54 + AMDGPU_MUX_OFFSET_TYPE_CONTROL, 55 + AMDGPU_MUX_OFFSET_TYPE_DE, 56 + AMDGPU_MUX_OFFSET_TYPE_CE, 57 + }; 58 + 53 59 struct amdgpu_ring_mux { 54 60 struct amdgpu_ring *real_ring; 55 61 ··· 78 72 * @sync_seq: the fence seqno related with the saved IB. 79 73 * @start:- start location on the software ring. 80 74 * @end:- end location on the software ring. 75 + * @control_offset:- the PRE_RESUME bit position used for resubmission. 76 + * @de_offset:- the anchor in write_data for de meta of resubmission. 77 + * @ce_offset:- the anchor in write_data for ce meta of resubmission. 81 78 */ 82 79 struct amdgpu_mux_chunk { 83 80 struct list_head entry; 84 81 uint32_t sync_seq; 85 82 u64 start; 86 83 u64 end; 84 + u64 cntl_offset; 85 + u64 de_offset; 86 + u64 ce_offset; 87 87 }; 88 88 89 89 int amdgpu_ring_mux_init(struct amdgpu_ring_mux *mux, struct amdgpu_ring *ring, ··· 101 89 u64 amdgpu_ring_mux_get_rptr(struct amdgpu_ring_mux *mux, struct amdgpu_ring *ring); 102 90 void amdgpu_ring_mux_start_ib(struct amdgpu_ring_mux *mux, struct amdgpu_ring *ring); 103 91 void amdgpu_ring_mux_end_ib(struct amdgpu_ring_mux *mux, struct amdgpu_ring *ring); 92 + void amdgpu_ring_mux_ib_mark_offset(struct amdgpu_ring_mux *mux, struct amdgpu_ring *ring, 93 + u64 offset, enum amdgpu_ring_mux_offset_type type); 104 94 bool amdgpu_mcbp_handle_trailing_fence_irq(struct amdgpu_ring_mux *mux); 105 95 106 96 u64 amdgpu_sw_ring_get_rptr_gfx(struct amdgpu_ring *ring); ··· 111 97 void amdgpu_sw_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count); 112 98 void amdgpu_sw_ring_ib_begin(struct amdgpu_ring *ring); 113 99 void amdgpu_sw_ring_ib_end(struct amdgpu_ring *ring); 100 + void amdgpu_sw_ring_ib_mark_offset(struct amdgpu_ring *ring, enum amdgpu_ring_mux_offset_type type); 114 101 const char *amdgpu_sw_ring_name(int idx); 115 102 unsigned int amdgpu_sw_ring_priority(int idx); 116 103
+92 -9
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
··· 755 755 static int gfx_v9_0_get_cu_info(struct amdgpu_device *adev, 756 756 struct amdgpu_cu_info *cu_info); 757 757 static uint64_t gfx_v9_0_get_gpu_clock_counter(struct amdgpu_device *adev); 758 - static void gfx_v9_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume); 758 + static void gfx_v9_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume, bool usegds); 759 759 static u64 gfx_v9_0_ring_get_rptr_compute(struct amdgpu_ring *ring); 760 760 static void gfx_v9_0_query_ras_error_count(struct amdgpu_device *adev, 761 761 void *ras_error_status); ··· 5127 5127 gfx_v9_0_ring_emit_de_meta(ring, 5128 5128 (!amdgpu_sriov_vf(ring->adev) && 5129 5129 flags & AMDGPU_IB_PREEMPTED) ? 5130 - true : false); 5130 + true : false, 5131 + job->gds_size > 0 && job->gds_base != 0); 5131 5132 } 5132 5133 5133 5134 amdgpu_ring_write(ring, header); ··· 5139 5138 #endif 5140 5139 lower_32_bits(ib->gpu_addr)); 5141 5140 amdgpu_ring_write(ring, upper_32_bits(ib->gpu_addr)); 5141 + amdgpu_ring_ib_on_emit_cntl(ring); 5142 5142 amdgpu_ring_write(ring, control); 5143 + } 5144 + 5145 + static void gfx_v9_0_ring_patch_cntl(struct amdgpu_ring *ring, 5146 + unsigned offset) 5147 + { 5148 + u32 control = ring->ring[offset]; 5149 + 5150 + control |= INDIRECT_BUFFER_PRE_RESUME(1); 5151 + ring->ring[offset] = control; 5152 + } 5153 + 5154 + static void gfx_v9_0_ring_patch_ce_meta(struct amdgpu_ring *ring, 5155 + unsigned offset) 5156 + { 5157 + struct amdgpu_device *adev = ring->adev; 5158 + void *ce_payload_cpu_addr; 5159 + uint64_t payload_offset, payload_size; 5160 + 5161 + payload_size = sizeof(struct v9_ce_ib_state); 5162 + 5163 + if (ring->is_mes_queue) { 5164 + payload_offset = offsetof(struct amdgpu_mes_ctx_meta_data, 5165 + gfx[0].gfx_meta_data) + 5166 + offsetof(struct v9_gfx_meta_data, ce_payload); 5167 + ce_payload_cpu_addr = 5168 + amdgpu_mes_ctx_get_offs_cpu_addr(ring, payload_offset); 5169 + } else { 5170 + payload_offset = offsetof(struct v9_gfx_meta_data, ce_payload); 5171 + ce_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset; 5172 + } 5173 + 5174 + if (offset + (payload_size >> 2) <= ring->buf_mask + 1) { 5175 + memcpy((void *)&ring->ring[offset], ce_payload_cpu_addr, payload_size); 5176 + } else { 5177 + memcpy((void *)&ring->ring[offset], ce_payload_cpu_addr, 5178 + (ring->buf_mask + 1 - offset) << 2); 5179 + payload_size -= (ring->buf_mask + 1 - offset) << 2; 5180 + memcpy((void *)&ring->ring[0], 5181 + ce_payload_cpu_addr + ((ring->buf_mask + 1 - offset) << 2), 5182 + payload_size); 5183 + } 5184 + } 5185 + 5186 + static void gfx_v9_0_ring_patch_de_meta(struct amdgpu_ring *ring, 5187 + unsigned offset) 5188 + { 5189 + struct amdgpu_device *adev = ring->adev; 5190 + void *de_payload_cpu_addr; 5191 + uint64_t payload_offset, payload_size; 5192 + 5193 + payload_size = sizeof(struct v9_de_ib_state); 5194 + 5195 + if (ring->is_mes_queue) { 5196 + payload_offset = offsetof(struct amdgpu_mes_ctx_meta_data, 5197 + gfx[0].gfx_meta_data) + 5198 + offsetof(struct v9_gfx_meta_data, de_payload); 5199 + de_payload_cpu_addr = 5200 + amdgpu_mes_ctx_get_offs_cpu_addr(ring, payload_offset); 5201 + } else { 5202 + payload_offset = offsetof(struct v9_gfx_meta_data, de_payload); 5203 + de_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset; 5204 + } 5205 + 5206 + if (offset + (payload_size >> 2) <= ring->buf_mask + 1) { 5207 + memcpy((void *)&ring->ring[offset], de_payload_cpu_addr, payload_size); 5208 + } else { 5209 + memcpy((void *)&ring->ring[offset], de_payload_cpu_addr, 5210 + (ring->buf_mask + 1 - offset) << 2); 5211 + payload_size -= (ring->buf_mask + 1 - offset) << 2; 5212 + memcpy((void *)&ring->ring[0], 5213 + de_payload_cpu_addr + ((ring->buf_mask + 1 - offset) << 2), 5214 + payload_size); 5215 + } 5143 5216 } 5144 5217 5145 5218 static void gfx_v9_0_ring_emit_ib_compute(struct amdgpu_ring *ring, ··· 5411 5336 amdgpu_ring_write(ring, lower_32_bits(ce_payload_gpu_addr)); 5412 5337 amdgpu_ring_write(ring, upper_32_bits(ce_payload_gpu_addr)); 5413 5338 5339 + amdgpu_ring_ib_on_emit_ce(ring); 5340 + 5414 5341 if (resume) 5415 5342 amdgpu_ring_write_multiple(ring, ce_payload_cpu_addr, 5416 5343 sizeof(ce_payload) >> 2); ··· 5446 5369 amdgpu_ring_alloc(ring, 13); 5447 5370 gfx_v9_0_ring_emit_fence(ring, ring->trail_fence_gpu_addr, 5448 5371 ring->trail_seq, AMDGPU_FENCE_FLAG_EXEC | AMDGPU_FENCE_FLAG_INT); 5449 - /*reset the CP_VMID_PREEMPT after trailing fence*/ 5450 - amdgpu_ring_emit_wreg(ring, 5451 - SOC15_REG_OFFSET(GC, 0, mmCP_VMID_PREEMPT), 5452 - 0x0); 5453 5372 5454 5373 /* assert IB preemption, emit the trailing fence */ 5455 5374 kiq->pmf->kiq_unmap_queues(kiq_ring, ring, PREEMPT_QUEUES_NO_UNMAP, ··· 5468 5395 DRM_WARN("ring %d timeout to preempt ib\n", ring->idx); 5469 5396 } 5470 5397 5398 + /*reset the CP_VMID_PREEMPT after trailing fence*/ 5399 + amdgpu_ring_emit_wreg(ring, 5400 + SOC15_REG_OFFSET(GC, 0, mmCP_VMID_PREEMPT), 5401 + 0x0); 5471 5402 amdgpu_ring_commit(ring); 5472 5403 5473 5404 /* deassert preemption condition */ ··· 5479 5402 return r; 5480 5403 } 5481 5404 5482 - static void gfx_v9_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume) 5405 + static void gfx_v9_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume, bool usegds) 5483 5406 { 5484 5407 struct amdgpu_device *adev = ring->adev; 5485 5408 struct v9_de_ib_state de_payload = {0}; ··· 5510 5433 PAGE_SIZE); 5511 5434 } 5512 5435 5513 - de_payload.gds_backup_addrlo = lower_32_bits(gds_addr); 5514 - de_payload.gds_backup_addrhi = upper_32_bits(gds_addr); 5436 + if (usegds) { 5437 + de_payload.gds_backup_addrlo = lower_32_bits(gds_addr); 5438 + de_payload.gds_backup_addrhi = upper_32_bits(gds_addr); 5439 + } 5515 5440 5516 5441 cnt = (sizeof(de_payload) >> 2) + 4 - 2; 5517 5442 amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, cnt)); ··· 5524 5445 amdgpu_ring_write(ring, lower_32_bits(de_payload_gpu_addr)); 5525 5446 amdgpu_ring_write(ring, upper_32_bits(de_payload_gpu_addr)); 5526 5447 5448 + amdgpu_ring_ib_on_emit_de(ring); 5527 5449 if (resume) 5528 5450 amdgpu_ring_write_multiple(ring, de_payload_cpu_addr, 5529 5451 sizeof(de_payload) >> 2); ··· 6935 6855 .emit_reg_write_reg_wait = gfx_v9_0_ring_emit_reg_write_reg_wait, 6936 6856 .soft_recovery = gfx_v9_0_ring_soft_recovery, 6937 6857 .emit_mem_sync = gfx_v9_0_emit_mem_sync, 6858 + .patch_cntl = gfx_v9_0_ring_patch_cntl, 6859 + .patch_de = gfx_v9_0_ring_patch_de_meta, 6860 + .patch_ce = gfx_v9_0_ring_patch_ce_meta, 6938 6861 }; 6939 6862 6940 6863 static const struct amdgpu_ring_funcs gfx_v9_0_ring_funcs_compute = {
+5 -1
drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
··· 129 129 if (adev->vcn.harvest_config & (1 << i)) 130 130 continue; 131 131 132 - atomic_set(&adev->vcn.inst[i].sched_score, 0); 132 + /* Init instance 0 sched_score to 1, so it's scheduled after other instances */ 133 + if (i == 0) 134 + atomic_set(&adev->vcn.inst[i].sched_score, 1); 135 + else 136 + atomic_set(&adev->vcn.inst[i].sched_score, 0); 133 137 134 138 /* VCN UNIFIED TRAP */ 135 139 r = amdgpu_irq_add_id(adev, amdgpu_ih_clientid_vcns[i],
+13 -5
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
··· 7196 7196 drm_add_modes_noedid(connector, 1920, 1080); 7197 7197 } else { 7198 7198 amdgpu_dm_connector_ddc_get_modes(connector, edid); 7199 - amdgpu_dm_connector_add_common_modes(encoder, connector); 7199 + /* most eDP supports only timings from its edid, 7200 + * usually only detailed timings are available 7201 + * from eDP edid. timings which are not from edid 7202 + * may damage eDP 7203 + */ 7204 + if (connector->connector_type != DRM_MODE_CONNECTOR_eDP) 7205 + amdgpu_dm_connector_add_common_modes(encoder, connector); 7200 7206 amdgpu_dm_connector_add_freesync_modes(connector, edid); 7201 7207 } 7202 7208 amdgpu_dm_fbc_init(connector); ··· 8204 8198 if (acrtc_state->abm_level != dm_old_crtc_state->abm_level) 8205 8199 bundle->stream_update.abm_level = &acrtc_state->abm_level; 8206 8200 8201 + mutex_lock(&dm->dc_lock); 8202 + if ((acrtc_state->update_type > UPDATE_TYPE_FAST) && 8203 + acrtc_state->stream->link->psr_settings.psr_allow_active) 8204 + amdgpu_dm_psr_disable(acrtc_state->stream); 8205 + mutex_unlock(&dm->dc_lock); 8206 + 8207 8207 /* 8208 8208 * If FreeSync state on the stream has changed then we need to 8209 8209 * re-adjust the min/max bounds now that DC doesn't handle this ··· 8223 8211 spin_unlock_irqrestore(&pcrtc->dev->event_lock, flags); 8224 8212 } 8225 8213 mutex_lock(&dm->dc_lock); 8226 - if ((acrtc_state->update_type > UPDATE_TYPE_FAST) && 8227 - acrtc_state->stream->link->psr_settings.psr_allow_active) 8228 - amdgpu_dm_psr_disable(acrtc_state->stream); 8229 - 8230 8214 update_planes_and_stream_adapter(dm->dc, 8231 8215 acrtc_state->update_type, 8232 8216 planes_count,
+31 -2
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
··· 1696 1696 } 1697 1697 } 1698 1698 1699 - /* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */ 1700 - workload_type = smu_cmn_to_asic_specific_index(smu, 1699 + if (smu->power_profile_mode == PP_SMC_POWER_PROFILE_COMPUTE && 1700 + (((smu->adev->pdev->device == 0x744C) && (smu->adev->pdev->revision == 0xC8)) || 1701 + ((smu->adev->pdev->device == 0x744C) && (smu->adev->pdev->revision == 0xCC)))) { 1702 + ret = smu_cmn_update_table(smu, 1703 + SMU_TABLE_ACTIVITY_MONITOR_COEFF, 1704 + WORKLOAD_PPLIB_COMPUTE_BIT, 1705 + (void *)(&activity_monitor_external), 1706 + false); 1707 + if (ret) { 1708 + dev_err(smu->adev->dev, "[%s] Failed to get activity monitor!", __func__); 1709 + return ret; 1710 + } 1711 + 1712 + ret = smu_cmn_update_table(smu, 1713 + SMU_TABLE_ACTIVITY_MONITOR_COEFF, 1714 + WORKLOAD_PPLIB_CUSTOM_BIT, 1715 + (void *)(&activity_monitor_external), 1716 + true); 1717 + if (ret) { 1718 + dev_err(smu->adev->dev, "[%s] Failed to set activity monitor!", __func__); 1719 + return ret; 1720 + } 1721 + 1722 + workload_type = smu_cmn_to_asic_specific_index(smu, 1723 + CMN2ASIC_MAPPING_WORKLOAD, 1724 + PP_SMC_POWER_PROFILE_CUSTOM); 1725 + } else { 1726 + /* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */ 1727 + workload_type = smu_cmn_to_asic_specific_index(smu, 1701 1728 CMN2ASIC_MAPPING_WORKLOAD, 1702 1729 smu->power_profile_mode); 1730 + } 1731 + 1703 1732 if (workload_type < 0) 1704 1733 return -EINVAL; 1705 1734
+4
drivers/gpu/drm/bridge/ti-sn65dsi86.c
··· 298 298 if (refclk_lut[i] == refclk_rate) 299 299 break; 300 300 301 + /* avoid buffer overflow and "1" is the default rate in the datasheet. */ 302 + if (i >= refclk_lut_size) 303 + i = 1; 304 + 301 305 regmap_update_bits(pdata->regmap, SN_DPPLL_SRC_REG, REFCLK_FREQ_MASK, 302 306 REFCLK_FREQ(i)); 303 307
+3
drivers/gpu/drm/nouveau/nouveau_acpi.c
··· 220 220 int optimus_funcs; 221 221 struct pci_dev *parent_pdev; 222 222 223 + if (pdev->vendor != PCI_VENDOR_ID_NVIDIA) 224 + return; 225 + 223 226 *has_pr3 = false; 224 227 parent_pdev = pci_upstream_bridge(pdev); 225 228 if (parent_pdev) {
+4 -3
drivers/gpu/drm/nouveau/nouveau_connector.c
··· 730 730 #endif 731 731 732 732 nouveau_connector_set_edid(nv_connector, edid); 733 - nouveau_connector_set_encoder(connector, nv_encoder); 733 + if (nv_encoder) 734 + nouveau_connector_set_encoder(connector, nv_encoder); 734 735 return status; 735 736 } 736 737 ··· 967 966 /* Determine display colour depth for everything except LVDS now, 968 967 * DP requires this before mode_valid() is called. 969 968 */ 970 - if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS) 969 + if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS && nv_connector->native_mode) 971 970 nouveau_connector_detect_depth(connector); 972 971 973 972 /* Find the native mode if this is a digital panel, if we didn't ··· 988 987 * "native" mode as some VBIOS tables require us to use the 989 988 * pixel clock as part of the lookup... 990 989 */ 991 - if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) 990 + if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS && nv_connector->native_mode) 992 991 nouveau_connector_detect_depth(connector); 993 992 994 993 if (nv_encoder->dcb->type == DCB_OUTPUT_TV)
+10 -4
drivers/gpu/drm/nouveau/nouveau_drm.c
··· 137 137 static inline bool 138 138 nouveau_cli_work_ready(struct dma_fence *fence) 139 139 { 140 - if (!dma_fence_is_signaled(fence)) 141 - return false; 142 - dma_fence_put(fence); 143 - return true; 140 + bool ret = true; 141 + 142 + spin_lock_irq(fence->lock); 143 + if (!dma_fence_is_signaled_locked(fence)) 144 + ret = false; 145 + spin_unlock_irq(fence->lock); 146 + 147 + if (ret == true) 148 + dma_fence_put(fence); 149 + return ret; 144 150 } 145 151 146 152 static void
+1
drivers/gpu/drm/radeon/radeon_fbdev.c
··· 307 307 308 308 if (fb_helper->info) { 309 309 vga_switcheroo_client_fb_set(rdev->pdev, NULL); 310 + drm_helper_force_disable_all(dev); 310 311 drm_fb_helper_unregister_info(fb_helper); 311 312 } else { 312 313 drm_client_release(&fb_helper->client);
+16 -2
drivers/hv/channel_mgmt.c
··· 829 829 if (completion_done(&vmbus_connection.unload_event)) 830 830 goto completed; 831 831 832 - for_each_online_cpu(cpu) { 832 + for_each_present_cpu(cpu) { 833 833 struct hv_per_cpu_context *hv_cpu 834 834 = per_cpu_ptr(hv_context.cpu_context, cpu); 835 835 836 + /* 837 + * In a CoCo VM the synic_message_page is not allocated 838 + * in hv_synic_alloc(). Instead it is set/cleared in 839 + * hv_synic_enable_regs() and hv_synic_disable_regs() 840 + * such that it is set only when the CPU is online. If 841 + * not all present CPUs are online, the message page 842 + * might be NULL, so skip such CPUs. 843 + */ 836 844 page_addr = hv_cpu->synic_message_page; 845 + if (!page_addr) 846 + continue; 847 + 837 848 msg = (struct hv_message *)page_addr 838 849 + VMBUS_MESSAGE_SINT; 839 850 ··· 878 867 * maybe-pending messages on all CPUs to be able to receive new 879 868 * messages after we reconnect. 880 869 */ 881 - for_each_online_cpu(cpu) { 870 + for_each_present_cpu(cpu) { 882 871 struct hv_per_cpu_context *hv_cpu 883 872 = per_cpu_ptr(hv_context.cpu_context, cpu); 884 873 885 874 page_addr = hv_cpu->synic_message_page; 875 + if (!page_addr) 876 + continue; 877 + 886 878 msg = (struct hv_message *)page_addr + VMBUS_MESSAGE_SINT; 887 879 msg->header.message_type = HVMSG_NONE; 888 880 }
+24 -24
drivers/hv/hv_common.c
··· 364 364 flags = irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL; 365 365 366 366 inputarg = (void **)this_cpu_ptr(hyperv_pcpu_input_arg); 367 - *inputarg = kmalloc(pgcount * HV_HYP_PAGE_SIZE, flags); 368 - if (!(*inputarg)) 369 - return -ENOMEM; 370 367 371 - if (hv_root_partition) { 372 - outputarg = (void **)this_cpu_ptr(hyperv_pcpu_output_arg); 373 - *outputarg = (char *)(*inputarg) + HV_HYP_PAGE_SIZE; 368 + /* 369 + * hyperv_pcpu_input_arg and hyperv_pcpu_output_arg memory is already 370 + * allocated if this CPU was previously online and then taken offline 371 + */ 372 + if (!*inputarg) { 373 + *inputarg = kmalloc(pgcount * HV_HYP_PAGE_SIZE, flags); 374 + if (!(*inputarg)) 375 + return -ENOMEM; 376 + 377 + if (hv_root_partition) { 378 + outputarg = (void **)this_cpu_ptr(hyperv_pcpu_output_arg); 379 + *outputarg = (char *)(*inputarg) + HV_HYP_PAGE_SIZE; 380 + } 374 381 } 375 382 376 383 msr_vp_index = hv_get_register(HV_REGISTER_VP_INDEX); ··· 392 385 393 386 int hv_common_cpu_die(unsigned int cpu) 394 387 { 395 - unsigned long flags; 396 - void **inputarg, **outputarg; 397 - void *mem; 398 - 399 - local_irq_save(flags); 400 - 401 - inputarg = (void **)this_cpu_ptr(hyperv_pcpu_input_arg); 402 - mem = *inputarg; 403 - *inputarg = NULL; 404 - 405 - if (hv_root_partition) { 406 - outputarg = (void **)this_cpu_ptr(hyperv_pcpu_output_arg); 407 - *outputarg = NULL; 408 - } 409 - 410 - local_irq_restore(flags); 411 - 412 - kfree(mem); 388 + /* 389 + * The hyperv_pcpu_input_arg and hyperv_pcpu_output_arg memory 390 + * is not freed when the CPU goes offline as the hyperv_pcpu_input_arg 391 + * may be used by the Hyper-V vPCI driver in reassigning interrupts 392 + * as part of the offlining process. The interrupt reassignment 393 + * happens *after* the CPUHP_AP_HYPERV_ONLINE state has run and 394 + * called this function. 395 + * 396 + * If a previously offlined CPU is brought back online again, the 397 + * originally allocated memory is reused in hv_common_cpu_init(). 398 + */ 413 399 414 400 return 0; 415 401 }
+2 -3
drivers/hv/vmbus_drv.c
··· 1372 1372 ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "hyperv/vmbus:online", 1373 1373 hv_synic_init, hv_synic_cleanup); 1374 1374 if (ret < 0) 1375 - goto err_cpuhp; 1375 + goto err_alloc; 1376 1376 hyperv_cpuhp_online = ret; 1377 1377 1378 1378 ret = vmbus_connect(); ··· 1392 1392 1393 1393 err_connect: 1394 1394 cpuhp_remove_state(hyperv_cpuhp_online); 1395 - err_cpuhp: 1396 - hv_synic_free(); 1397 1395 err_alloc: 1396 + hv_synic_free(); 1398 1397 if (vmbus_irq == -1) { 1399 1398 hv_remove_vmbus_handler(); 1400 1399 } else {
+1 -1
drivers/md/dm-cache-metadata.c
··· 1828 1828 * Replacement block manager (new_bm) is created and old_bm destroyed outside of 1829 1829 * cmd root_lock to avoid ABBA deadlock that would result (due to life-cycle of 1830 1830 * shrinker associated with the block manager's bufio client vs cmd root_lock). 1831 - * - must take shrinker_mutex without holding cmd->root_lock 1831 + * - must take shrinker_rwsem without holding cmd->root_lock 1832 1832 */ 1833 1833 new_bm = dm_block_manager_create(cmd->bdev, DM_CACHE_METADATA_BLOCK_SIZE << SECTOR_SHIFT, 1834 1834 CACHE_MAX_CONCURRENT_LOCKS);
+1 -1
drivers/md/dm-thin-metadata.c
··· 1891 1891 * Replacement block manager (new_bm) is created and old_bm destroyed outside of 1892 1892 * pmd root_lock to avoid ABBA deadlock that would result (due to life-cycle of 1893 1893 * shrinker associated with the block manager's bufio client vs pmd root_lock). 1894 - * - must take shrinker_mutex without holding pmd->root_lock 1894 + * - must take shrinker_rwsem without holding pmd->root_lock 1895 1895 */ 1896 1896 new_bm = dm_block_manager_create(pmd->bdev, THIN_METADATA_BLOCK_SIZE << SECTOR_SHIFT, 1897 1897 THIN_MAX_CONCURRENT_LOCKS);
+2 -2
drivers/mmc/host/bcm2835.c
··· 1403 1403 host->max_clk = clk_get_rate(clk); 1404 1404 1405 1405 host->irq = platform_get_irq(pdev, 0); 1406 - if (host->irq <= 0) { 1407 - ret = -EINVAL; 1406 + if (host->irq < 0) { 1407 + ret = host->irq; 1408 1408 goto err; 1409 1409 } 1410 1410
+1
drivers/mmc/host/litex_mmc.c
··· 649 649 .driver = { 650 650 .name = "litex-mmc", 651 651 .of_match_table = litex_match, 652 + .probe_type = PROBE_PREFER_ASYNCHRONOUS, 652 653 }, 653 654 }; 654 655 module_platform_driver(litex_mmc_driver);
+4 -10
drivers/mmc/host/meson-gx-mmc.c
··· 991 991 992 992 if (data && !cmd->error) 993 993 data->bytes_xfered = data->blksz * data->blocks; 994 - if (meson_mmc_bounce_buf_read(data) || 995 - meson_mmc_get_next_command(cmd)) 996 - ret = IRQ_WAKE_THREAD; 997 - else 998 - ret = IRQ_HANDLED; 994 + 995 + return IRQ_WAKE_THREAD; 999 996 } 1000 997 1001 998 out: ··· 1003 1006 start &= ~START_DESC_BUSY; 1004 1007 writel(start, host->regs + SD_EMMC_START); 1005 1008 } 1006 - 1007 - if (ret == IRQ_HANDLED) 1008 - meson_mmc_request_done(host->mmc, cmd->mrq); 1009 1009 1010 1010 return ret; 1011 1011 } ··· 1186 1192 return PTR_ERR(host->regs); 1187 1193 1188 1194 host->irq = platform_get_irq(pdev, 0); 1189 - if (host->irq <= 0) 1190 - return -EINVAL; 1195 + if (host->irq < 0) 1196 + return host->irq; 1191 1197 1192 1198 cd_irq = platform_get_irq_optional(pdev, 1); 1193 1199 mmc_gpio_set_cd_irq(mmc, cd_irq);
+2 -1
drivers/mmc/host/mmci.c
··· 1735 1735 return; 1736 1736 1737 1737 if (host->variant->busy_timeout && mmc->actual_clock) 1738 - max_busy_timeout = ~0UL / (mmc->actual_clock / MSEC_PER_SEC); 1738 + max_busy_timeout = U32_MAX / DIV_ROUND_UP(mmc->actual_clock, 1739 + MSEC_PER_SEC); 1739 1740 1740 1741 mmc->max_busy_timeout = max_busy_timeout; 1741 1742 }
+1 -1
drivers/mmc/host/mtk-sd.c
··· 2680 2680 2681 2681 host->irq = platform_get_irq(pdev, 0); 2682 2682 if (host->irq < 0) { 2683 - ret = -EINVAL; 2683 + ret = host->irq; 2684 2684 goto host_free; 2685 2685 } 2686 2686
+1 -1
drivers/mmc/host/mvsdio.c
··· 704 704 } 705 705 irq = platform_get_irq(pdev, 0); 706 706 if (irq < 0) 707 - return -ENXIO; 707 + return irq; 708 708 709 709 mmc = mmc_alloc_host(sizeof(struct mvsd_host), &pdev->dev); 710 710 if (!mmc) {
+1 -1
drivers/mmc/host/omap.c
··· 1343 1343 1344 1344 irq = platform_get_irq(pdev, 0); 1345 1345 if (irq < 0) 1346 - return -ENXIO; 1346 + return irq; 1347 1347 1348 1348 host->virt_base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); 1349 1349 if (IS_ERR(host->virt_base))
+4 -2
drivers/mmc/host/omap_hsmmc.c
··· 1791 1791 } 1792 1792 1793 1793 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1794 - irq = platform_get_irq(pdev, 0); 1795 - if (res == NULL || irq < 0) 1794 + if (!res) 1796 1795 return -ENXIO; 1796 + irq = platform_get_irq(pdev, 0); 1797 + if (irq < 0) 1798 + return irq; 1797 1799 1798 1800 base = devm_ioremap_resource(&pdev->dev, res); 1799 1801 if (IS_ERR(base))
+1 -1
drivers/mmc/host/owl-mmc.c
··· 637 637 638 638 owl_host->irq = platform_get_irq(pdev, 0); 639 639 if (owl_host->irq < 0) { 640 - ret = -EINVAL; 640 + ret = owl_host->irq; 641 641 goto err_release_channel; 642 642 } 643 643
+1 -1
drivers/mmc/host/sdhci-acpi.c
··· 829 829 host->ops = &sdhci_acpi_ops_dflt; 830 830 host->irq = platform_get_irq(pdev, 0); 831 831 if (host->irq < 0) { 832 - err = -EINVAL; 832 + err = host->irq; 833 833 goto err_free; 834 834 } 835 835
+3
drivers/mmc/host/sdhci-msm.c
··· 2479 2479 msm_host->ddr_config = DDR_CONFIG_POR_VAL; 2480 2480 2481 2481 of_property_read_u32(node, "qcom,dll-config", &msm_host->dll_config); 2482 + 2483 + if (of_device_is_compatible(node, "qcom,msm8916-sdhci")) 2484 + host->quirks2 |= SDHCI_QUIRK2_BROKEN_64_BIT_DMA; 2482 2485 } 2483 2486 2484 2487 static int sdhci_msm_gcc_reset(struct device *dev, struct sdhci_host *host)
+2 -2
drivers/mmc/host/sdhci-spear.c
··· 65 65 host->hw_name = "sdhci"; 66 66 host->ops = &sdhci_pltfm_ops; 67 67 host->irq = platform_get_irq(pdev, 0); 68 - if (host->irq <= 0) { 69 - ret = -EINVAL; 68 + if (host->irq < 0) { 69 + ret = host->irq; 70 70 goto err_host; 71 71 } 72 72 host->quirks = SDHCI_QUIRK_BROKEN_ADMA;
+1 -1
drivers/mmc/host/sh_mmcif.c
··· 1400 1400 irq[0] = platform_get_irq(pdev, 0); 1401 1401 irq[1] = platform_get_irq_optional(pdev, 1); 1402 1402 if (irq[0] < 0) 1403 - return -ENXIO; 1403 + return irq[0]; 1404 1404 1405 1405 reg = devm_platform_ioremap_resource(pdev, 0); 1406 1406 if (IS_ERR(reg))
+2 -2
drivers/mmc/host/sunxi-mmc.c
··· 1350 1350 return ret; 1351 1351 1352 1352 host->irq = platform_get_irq(pdev, 0); 1353 - if (host->irq <= 0) { 1354 - ret = -EINVAL; 1353 + if (host->irq < 0) { 1354 + ret = host->irq; 1355 1355 goto error_disable_mmc; 1356 1356 } 1357 1357
+4 -2
drivers/mmc/host/usdhi6rol0.c
··· 1757 1757 irq_cd = platform_get_irq_byname(pdev, "card detect"); 1758 1758 irq_sd = platform_get_irq_byname(pdev, "data"); 1759 1759 irq_sdio = platform_get_irq_byname(pdev, "SDIO"); 1760 - if (irq_sd < 0 || irq_sdio < 0) 1761 - return -ENODEV; 1760 + if (irq_sd < 0) 1761 + return irq_sd; 1762 + if (irq_sdio < 0) 1763 + return irq_sdio; 1762 1764 1763 1765 mmc = mmc_alloc_host(sizeof(struct usdhi6_host), dev); 1764 1766 if (!mmc)
+38 -10
drivers/net/dsa/mt7530.c
··· 399 399 core_set(priv, CORE_TRGMII_GSW_CLK_CG, REG_GSWCK_EN); 400 400 } 401 401 402 + /* If port 6 is available as a CPU port, always prefer that as the default, 403 + * otherwise don't care. 404 + */ 405 + static struct dsa_port * 406 + mt753x_preferred_default_local_cpu_port(struct dsa_switch *ds) 407 + { 408 + struct dsa_port *cpu_dp = dsa_to_port(ds, 6); 409 + 410 + if (dsa_port_is_cpu(cpu_dp)) 411 + return cpu_dp; 412 + 413 + return NULL; 414 + } 415 + 402 416 /* Setup port 6 interface mode and TRGMII TX circuit */ 403 417 static int 404 418 mt7530_pad_clk_setup(struct dsa_switch *ds, phy_interface_t interface) ··· 999 985 mutex_unlock(&priv->reg_mutex); 1000 986 } 1001 987 988 + static void 989 + mt753x_trap_frames(struct mt7530_priv *priv) 990 + { 991 + /* Trap BPDUs to the CPU port(s) */ 992 + mt7530_rmw(priv, MT753X_BPC, MT753X_BPDU_PORT_FW_MASK, 993 + MT753X_BPDU_CPU_ONLY); 994 + 995 + /* Trap LLDP frames with :0E MAC DA to the CPU port(s) */ 996 + mt7530_rmw(priv, MT753X_RGAC2, MT753X_R0E_PORT_FW_MASK, 997 + MT753X_R0E_PORT_FW(MT753X_BPDU_CPU_ONLY)); 998 + } 999 + 1002 1000 static int 1003 1001 mt753x_cpu_port_enable(struct dsa_switch *ds, int port) 1004 1002 { ··· 1033 1007 UNU_FFP(BIT(port))); 1034 1008 1035 1009 /* Set CPU port number */ 1036 - if (priv->id == ID_MT7621) 1010 + if (priv->id == ID_MT7530 || priv->id == ID_MT7621) 1037 1011 mt7530_rmw(priv, MT7530_MFC, CPU_MASK, CPU_EN | CPU_PORT(port)); 1012 + 1013 + /* Add the CPU port to the CPU port bitmap for MT7531 and the switch on 1014 + * the MT7988 SoC. Trapped frames will be forwarded to the CPU port that 1015 + * is affine to the inbound user port. 1016 + */ 1017 + if (priv->id == ID_MT7531 || priv->id == ID_MT7988) 1018 + mt7530_set(priv, MT7531_CFC, MT7531_CPU_PMAP(BIT(port))); 1038 1019 1039 1020 /* CPU port gets connected to all user ports of 1040 1021 * the switch. ··· 2288 2255 2289 2256 priv->p6_interface = PHY_INTERFACE_MODE_NA; 2290 2257 2258 + mt753x_trap_frames(priv); 2259 + 2291 2260 /* Enable and reset MIB counters */ 2292 2261 mt7530_mib_reset(ds); 2293 2262 ··· 2387 2352 mt7531_setup_common(struct dsa_switch *ds) 2388 2353 { 2389 2354 struct mt7530_priv *priv = ds->priv; 2390 - struct dsa_port *cpu_dp; 2391 2355 int ret, i; 2392 2356 2393 - /* BPDU to CPU port */ 2394 - dsa_switch_for_each_cpu_port(cpu_dp, ds) { 2395 - mt7530_rmw(priv, MT7531_CFC, MT7531_CPU_PMAP_MASK, 2396 - BIT(cpu_dp->index)); 2397 - break; 2398 - } 2399 - mt7530_rmw(priv, MT753X_BPC, MT753X_BPDU_PORT_FW_MASK, 2400 - MT753X_BPDU_CPU_ONLY); 2357 + mt753x_trap_frames(priv); 2401 2358 2402 2359 /* Enable and reset MIB counters */ 2403 2360 mt7530_mib_reset(ds); ··· 3112 3085 const struct dsa_switch_ops mt7530_switch_ops = { 3113 3086 .get_tag_protocol = mtk_get_tag_protocol, 3114 3087 .setup = mt753x_setup, 3088 + .preferred_default_local_cpu_port = mt753x_preferred_default_local_cpu_port, 3115 3089 .get_strings = mt7530_get_strings, 3116 3090 .get_ethtool_stats = mt7530_get_ethtool_stats, 3117 3091 .get_sset_count = mt7530_get_sset_count,
+6
drivers/net/dsa/mt7530.h
··· 54 54 #define MT7531_MIRROR_PORT_GET(x) (((x) >> 16) & MIRROR_MASK) 55 55 #define MT7531_MIRROR_PORT_SET(x) (((x) & MIRROR_MASK) << 16) 56 56 #define MT7531_CPU_PMAP_MASK GENMASK(7, 0) 57 + #define MT7531_CPU_PMAP(x) FIELD_PREP(MT7531_CPU_PMAP_MASK, x) 57 58 58 59 #define MT753X_MIRROR_REG(id) ((((id) == ID_MT7531) || ((id) == ID_MT7988)) ? \ 59 60 MT7531_CFC : MT7530_MFC) ··· 66 65 /* Registers for BPDU and PAE frame control*/ 67 66 #define MT753X_BPC 0x24 68 67 #define MT753X_BPDU_PORT_FW_MASK GENMASK(2, 0) 68 + 69 + /* Register for :03 and :0E MAC DA frame control */ 70 + #define MT753X_RGAC2 0x2c 71 + #define MT753X_R0E_PORT_FW_MASK GENMASK(18, 16) 72 + #define MT753X_R0E_PORT_FW(x) FIELD_PREP(MT753X_R0E_PORT_FW_MASK, x) 69 73 70 74 enum mt753x_bpdu_port_fw { 71 75 MT753X_BPDU_FOLLOW_MFC,
+2 -2
drivers/net/ethernet/emulex/benet/be_main.c
··· 1135 1135 eth_hdr_len = ntohs(skb->protocol) == ETH_P_8021Q ? 1136 1136 VLAN_ETH_HLEN : ETH_HLEN; 1137 1137 if (skb->len <= 60 && 1138 - (lancer_chip(adapter) || skb_vlan_tag_present(skb)) && 1139 - is_ipv4_pkt(skb)) { 1138 + (lancer_chip(adapter) || BE3_chip(adapter) || 1139 + skb_vlan_tag_present(skb)) && is_ipv4_pkt(skb)) { 1140 1140 ip = (struct iphdr *)ip_hdr(skb); 1141 1141 pskb_trim(skb, eth_hdr_len + ntohs(ip->tot_len)); 1142 1142 }
+6 -1
drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
··· 54 54 case DPMAC_ETH_IF_XFI: 55 55 *if_mode = PHY_INTERFACE_MODE_10GBASER; 56 56 break; 57 + case DPMAC_ETH_IF_CAUI: 58 + *if_mode = PHY_INTERFACE_MODE_25GBASER; 59 + break; 57 60 default: 58 61 return -EINVAL; 59 62 } ··· 82 79 return DPMAC_ETH_IF_XFI; 83 80 case PHY_INTERFACE_MODE_1000BASEX: 84 81 return DPMAC_ETH_IF_1000BASEX; 82 + case PHY_INTERFACE_MODE_25GBASER: 83 + return DPMAC_ETH_IF_CAUI; 85 84 default: 86 85 return DPMAC_ETH_IF_MII; 87 86 } ··· 420 415 421 416 mac->phylink_config.mac_capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE | 422 417 MAC_10FD | MAC_100FD | MAC_1000FD | MAC_2500FD | MAC_5000FD | 423 - MAC_10000FD; 418 + MAC_10000FD | MAC_25000FD; 424 419 425 420 dpaa2_mac_set_supported_interfaces(mac); 426 421
+6 -2
drivers/net/ethernet/mellanox/mlx5/core/en/params.c
··· 732 732 static int mlx5e_build_rq_frags_info(struct mlx5_core_dev *mdev, 733 733 struct mlx5e_params *params, 734 734 struct mlx5e_xsk_param *xsk, 735 - struct mlx5e_rq_frags_info *info) 735 + struct mlx5e_rq_frags_info *info, 736 + u32 *xdp_frag_size) 736 737 { 737 738 u32 byte_count = MLX5E_SW2HW_MTU(params, params->sw_mtu); 738 739 int frag_size_max = DEFAULT_FRAG_SIZE; ··· 845 844 __func__, info->wqe_bulk, info->refill_unit); 846 845 847 846 info->log_num_frags = order_base_2(info->num_frags); 847 + 848 + *xdp_frag_size = info->num_frags > 1 && params->xdp_prog ? PAGE_SIZE : 0; 848 849 849 850 return 0; 850 851 } ··· 992 989 } 993 990 default: /* MLX5_WQ_TYPE_CYCLIC */ 994 991 MLX5_SET(wq, wq, log_wq_sz, params->log_rq_mtu_frames); 995 - err = mlx5e_build_rq_frags_info(mdev, params, xsk, &param->frags_info); 992 + err = mlx5e_build_rq_frags_info(mdev, params, xsk, &param->frags_info, 993 + &param->xdp_frag_size); 996 994 if (err) 997 995 return err; 998 996 ndsegs = param->frags_info.num_frags;
+1
drivers/net/ethernet/mellanox/mlx5/core/en/params.h
··· 24 24 u32 rqc[MLX5_ST_SZ_DW(rqc)]; 25 25 struct mlx5_wq_param wq; 26 26 struct mlx5e_rq_frags_info frags_info; 27 + u32 xdp_frag_size; 27 28 }; 28 29 29 30 struct mlx5e_sq_param {
+2
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c
··· 2021 2021 mlx5_tc_ct_delete_flow(struct mlx5_tc_ct_priv *priv, 2022 2022 struct mlx5_flow_attr *attr) 2023 2023 { 2024 + if (!attr->ct_attr.ft) /* no ct action, return */ 2025 + return; 2024 2026 if (!attr->ct_attr.nf_ft) /* means only ct clear action, and not ct_clear,ct() */ 2025 2027 return; 2026 2028
+1 -1
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
··· 86 86 if (err) 87 87 return err; 88 88 89 - return xdp_rxq_info_reg(&rq->xdp_rxq, rq->netdev, rq_xdp_ix, 0); 89 + return xdp_rxq_info_reg(&rq->xdp_rxq, rq->netdev, rq_xdp_ix, c->napi.napi_id); 90 90 } 91 91 92 92 static int mlx5e_open_xsk_rq(struct mlx5e_channel *c, struct mlx5e_params *params,
+16 -6
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
··· 61 61 struct mlx5e_ipsec_sa_entry *sa_entry = dwork->sa_entry; 62 62 struct xfrm_state *x = sa_entry->x; 63 63 64 - spin_lock(&x->lock); 64 + if (sa_entry->attrs.drop) 65 + return; 66 + 67 + spin_lock_bh(&x->lock); 65 68 xfrm_state_check_expire(x); 66 69 if (x->km.state == XFRM_STATE_EXPIRED) { 67 70 sa_entry->attrs.drop = true; 68 - mlx5e_accel_ipsec_fs_modify(sa_entry); 69 - } 70 - spin_unlock(&x->lock); 71 + spin_unlock_bh(&x->lock); 71 72 72 - if (sa_entry->attrs.drop) 73 + mlx5e_accel_ipsec_fs_modify(sa_entry); 73 74 return; 75 + } 76 + spin_unlock_bh(&x->lock); 74 77 75 78 queue_delayed_work(sa_entry->ipsec->wq, &dwork->dwork, 76 79 MLX5_IPSEC_RESCHED); ··· 1043 1040 return err; 1044 1041 } 1045 1042 1046 - static void mlx5e_xfrm_free_policy(struct xfrm_policy *x) 1043 + static void mlx5e_xfrm_del_policy(struct xfrm_policy *x) 1047 1044 { 1048 1045 struct mlx5e_ipsec_pol_entry *pol_entry = to_ipsec_pol_entry(x); 1049 1046 1050 1047 mlx5e_accel_ipsec_fs_del_pol(pol_entry); 1048 + } 1049 + 1050 + static void mlx5e_xfrm_free_policy(struct xfrm_policy *x) 1051 + { 1052 + struct mlx5e_ipsec_pol_entry *pol_entry = to_ipsec_pol_entry(x); 1053 + 1051 1054 kfree(pol_entry); 1052 1055 } 1053 1056 ··· 1074 1065 1075 1066 .xdo_dev_state_update_curlft = mlx5e_xfrm_update_curlft, 1076 1067 .xdo_dev_policy_add = mlx5e_xfrm_add_policy, 1068 + .xdo_dev_policy_delete = mlx5e_xfrm_del_policy, 1077 1069 .xdo_dev_policy_free = mlx5e_xfrm_free_policy, 1078 1070 }; 1079 1071
+14 -3
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_offload.c
··· 305 305 } 306 306 307 307 mlx5e_ipsec_build_accel_xfrm_attrs(sa_entry, &attrs); 308 + 309 + /* It is safe to execute the modify below unlocked since the only flows 310 + * that could affect this HW object, are create, destroy and this work. 311 + * 312 + * Creation flow can't co-exist with this modify work, the destruction 313 + * flow would cancel this work, and this work is a single entity that 314 + * can't conflict with it self. 315 + */ 316 + spin_unlock_bh(&sa_entry->x->lock); 308 317 mlx5_accel_esp_modify_xfrm(sa_entry, &attrs); 318 + spin_lock_bh(&sa_entry->x->lock); 309 319 310 320 data.data_offset_condition_operand = 311 321 MLX5_IPSEC_ASO_REMOVE_FLOW_PKT_CNT_OFFSET; ··· 441 431 aso = sa_entry->ipsec->aso; 442 432 attrs = &sa_entry->attrs; 443 433 444 - spin_lock(&sa_entry->x->lock); 434 + spin_lock_bh(&sa_entry->x->lock); 445 435 ret = mlx5e_ipsec_aso_query(sa_entry, NULL); 446 436 if (ret) 447 437 goto unlock; ··· 457 447 mlx5e_ipsec_handle_limits(sa_entry); 458 448 459 449 unlock: 460 - spin_unlock(&sa_entry->x->lock); 450 + spin_unlock_bh(&sa_entry->x->lock); 461 451 kfree(work); 462 452 } 463 453 ··· 606 596 do { 607 597 ret = mlx5_aso_poll_cq(aso->aso, false); 608 598 if (ret) 609 - usleep_range(2, 10); 599 + /* We are in atomic context */ 600 + udelay(10); 610 601 } while (ret && time_is_after_jiffies(expires)); 611 602 spin_unlock_bh(&aso->lock); 612 603 return ret;
+4 -3
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
··· 641 641 } 642 642 643 643 static int mlx5e_init_rxq_rq(struct mlx5e_channel *c, struct mlx5e_params *params, 644 - struct mlx5e_rq *rq) 644 + u32 xdp_frag_size, struct mlx5e_rq *rq) 645 645 { 646 646 struct mlx5_core_dev *mdev = c->mdev; 647 647 int err; ··· 665 665 if (err) 666 666 return err; 667 667 668 - return xdp_rxq_info_reg(&rq->xdp_rxq, rq->netdev, rq->ix, c->napi.napi_id); 668 + return __xdp_rxq_info_reg(&rq->xdp_rxq, rq->netdev, rq->ix, c->napi.napi_id, 669 + xdp_frag_size); 669 670 } 670 671 671 672 static int mlx5_rq_shampo_alloc(struct mlx5_core_dev *mdev, ··· 2241 2240 { 2242 2241 int err; 2243 2242 2244 - err = mlx5e_init_rxq_rq(c, params, &c->rq); 2243 + err = mlx5e_init_rxq_rq(c, params, rq_params->xdp_frag_size, &c->rq); 2245 2244 if (err) 2246 2245 return err; 2247 2246
+1
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
··· 1439 1439 mlx5e_hairpin_flow_del(priv, flow); 1440 1440 1441 1441 free_flow_post_acts(flow); 1442 + mlx5_tc_ct_delete_flow(get_ct_priv(flow->priv), attr); 1442 1443 1443 1444 kvfree(attr->parse_attr); 1444 1445 kfree(flow->attr);
+37 -13
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c
··· 518 518 struct mlx5_flow_rule *dst; 519 519 void *in_flow_context, *vlan; 520 520 void *in_match_value; 521 + int reformat_id = 0; 521 522 unsigned int inlen; 522 523 int dst_cnt_size; 524 + u32 *in, action; 523 525 void *in_dests; 524 - u32 *in; 525 526 int err; 526 527 527 528 if (mlx5_set_extended_dest(dev, fte, &extended_dest)) ··· 561 560 562 561 MLX5_SET(flow_context, in_flow_context, extended_destination, 563 562 extended_dest); 564 - if (extended_dest) { 565 - u32 action; 566 563 567 - action = fte->action.action & 568 - ~MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT; 569 - MLX5_SET(flow_context, in_flow_context, action, action); 570 - } else { 571 - MLX5_SET(flow_context, in_flow_context, action, 572 - fte->action.action); 573 - if (fte->action.pkt_reformat) 574 - MLX5_SET(flow_context, in_flow_context, packet_reformat_id, 575 - fte->action.pkt_reformat->id); 564 + action = fte->action.action; 565 + if (extended_dest) 566 + action &= ~MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT; 567 + 568 + MLX5_SET(flow_context, in_flow_context, action, action); 569 + 570 + if (!extended_dest && fte->action.pkt_reformat) { 571 + struct mlx5_pkt_reformat *pkt_reformat = fte->action.pkt_reformat; 572 + 573 + if (pkt_reformat->owner == MLX5_FLOW_RESOURCE_OWNER_SW) { 574 + reformat_id = mlx5_fs_dr_action_get_pkt_reformat_id(pkt_reformat); 575 + if (reformat_id < 0) { 576 + mlx5_core_err(dev, 577 + "Unsupported SW-owned pkt_reformat type (%d) in FW-owned table\n", 578 + pkt_reformat->reformat_type); 579 + err = reformat_id; 580 + goto err_out; 581 + } 582 + } else { 583 + reformat_id = fte->action.pkt_reformat->id; 584 + } 576 585 } 577 - if (fte->action.modify_hdr) 586 + 587 + MLX5_SET(flow_context, in_flow_context, packet_reformat_id, (u32)reformat_id); 588 + 589 + if (fte->action.modify_hdr) { 590 + if (fte->action.modify_hdr->owner == MLX5_FLOW_RESOURCE_OWNER_SW) { 591 + mlx5_core_err(dev, "Can't use SW-owned modify_hdr in FW-owned table\n"); 592 + err = -EOPNOTSUPP; 593 + goto err_out; 594 + } 595 + 578 596 MLX5_SET(flow_context, in_flow_context, modify_header_id, 579 597 fte->action.modify_hdr->id); 598 + } 580 599 581 600 MLX5_SET(flow_context, in_flow_context, encrypt_decrypt_type, 582 601 fte->action.crypto.type); ··· 913 892 914 893 pkt_reformat->id = MLX5_GET(alloc_packet_reformat_context_out, 915 894 out, packet_reformat_id); 895 + pkt_reformat->owner = MLX5_FLOW_RESOURCE_OWNER_FW; 896 + 916 897 kfree(in); 917 898 return err; 918 899 } ··· 999 976 err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out)); 1000 977 1001 978 modify_hdr->id = MLX5_GET(alloc_modify_header_context_out, out, modify_header_id); 979 + modify_hdr->owner = MLX5_FLOW_RESOURCE_OWNER_FW; 1002 980 kfree(in); 1003 981 return err; 1004 982 }
+7
drivers/net/ethernet/mellanox/mlx5/core/fs_core.h
··· 54 54 u32 id; 55 55 }; 56 56 57 + enum mlx5_flow_resource_owner { 58 + MLX5_FLOW_RESOURCE_OWNER_FW, 59 + MLX5_FLOW_RESOURCE_OWNER_SW, 60 + }; 61 + 57 62 struct mlx5_modify_hdr { 58 63 enum mlx5_flow_namespace_type ns_type; 64 + enum mlx5_flow_resource_owner owner; 59 65 union { 60 66 struct mlx5_fs_dr_action action; 61 67 u32 id; ··· 71 65 struct mlx5_pkt_reformat { 72 66 enum mlx5_flow_namespace_type ns_type; 73 67 int reformat_type; /* from mlx5_ifc */ 68 + enum mlx5_flow_resource_owner owner; 74 69 union { 75 70 struct mlx5_fs_dr_action action; 76 71 u32 id;
+28 -5
drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c
··· 140 140 return ret; 141 141 } 142 142 143 - static void irq_release(struct mlx5_irq *irq) 143 + /* mlx5_system_free_irq - Free an IRQ 144 + * @irq: IRQ to free 145 + * 146 + * Free the IRQ and other resources such as rmap from the system. 147 + * BUT doesn't free or remove reference from mlx5. 148 + * This function is very important for the shutdown flow, where we need to 149 + * cleanup system resoruces but keep mlx5 objects alive, 150 + * see mlx5_irq_table_free_irqs(). 151 + */ 152 + static void mlx5_system_free_irq(struct mlx5_irq *irq) 144 153 { 145 154 struct mlx5_irq_pool *pool = irq->pool; 146 155 #ifdef CONFIG_RFS_ACCEL 147 156 struct cpu_rmap *rmap; 148 157 #endif 149 158 150 - xa_erase(&pool->irqs, irq->pool_index); 151 159 /* free_irq requires that affinity_hint and rmap will be cleared before 152 160 * calling it. To satisfy this requirement, we call 153 161 * irq_cpu_rmap_remove() to remove the notifier ··· 167 159 irq_cpu_rmap_remove(rmap, irq->map.virq); 168 160 #endif 169 161 170 - free_cpumask_var(irq->mask); 171 162 free_irq(irq->map.virq, &irq->nh); 172 163 if (irq->map.index && pci_msix_can_alloc_dyn(pool->dev->pdev)) 173 164 pci_msix_free_irq(pool->dev->pdev, irq->map); 165 + } 166 + 167 + static void irq_release(struct mlx5_irq *irq) 168 + { 169 + struct mlx5_irq_pool *pool = irq->pool; 170 + 171 + xa_erase(&pool->irqs, irq->pool_index); 172 + mlx5_system_free_irq(irq); 173 + free_cpumask_var(irq->mask); 174 174 kfree(irq); 175 175 } 176 176 ··· 595 579 int mlx5_irqs_request_vectors(struct mlx5_core_dev *dev, u16 *cpus, int nirqs, 596 580 struct mlx5_irq **irqs, struct cpu_rmap **rmap) 597 581 { 582 + struct mlx5_irq_table *table = mlx5_irq_table_get(dev); 583 + struct mlx5_irq_pool *pool = table->pcif_pool; 598 584 struct irq_affinity_desc af_desc; 599 585 struct mlx5_irq *irq; 586 + int offset = 1; 600 587 int i; 588 + 589 + if (!pool->xa_num_irqs.max) 590 + offset = 0; 601 591 602 592 af_desc.is_managed = false; 603 593 for (i = 0; i < nirqs; i++) { 604 594 cpumask_clear(&af_desc.mask); 605 595 cpumask_set_cpu(cpus[i], &af_desc.mask); 606 - irq = mlx5_irq_request(dev, i + 1, &af_desc, rmap); 596 + irq = mlx5_irq_request(dev, i + offset, &af_desc, rmap); 607 597 if (IS_ERR(irq)) 608 598 break; 609 599 irqs[i] = irq; ··· 735 713 unsigned long index; 736 714 737 715 xa_for_each(&pool->irqs, index, irq) 738 - free_irq(irq->map.virq, &irq->nh); 716 + mlx5_system_free_irq(irq); 717 + 739 718 } 740 719 741 720 static void mlx5_irq_pools_free_irqs(struct mlx5_irq_table *table)
+12 -1
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_action.c
··· 1421 1421 } 1422 1422 case DR_ACTION_TYP_TNL_L3_TO_L2: 1423 1423 { 1424 - u8 hw_actions[DR_ACTION_CACHE_LINE_SIZE] = {}; 1424 + u8 *hw_actions; 1425 1425 int ret; 1426 + 1427 + hw_actions = kzalloc(DR_ACTION_CACHE_LINE_SIZE, GFP_KERNEL); 1428 + if (!hw_actions) 1429 + return -ENOMEM; 1426 1430 1427 1431 ret = mlx5dr_ste_set_action_decap_l3_list(dmn->ste_ctx, 1428 1432 data, data_sz, ··· 1435 1431 &action->rewrite->num_of_actions); 1436 1432 if (ret) { 1437 1433 mlx5dr_dbg(dmn, "Failed creating decap l3 action list\n"); 1434 + kfree(hw_actions); 1438 1435 return ret; 1439 1436 } 1440 1437 ··· 1445 1440 ret = mlx5dr_ste_alloc_modify_hdr(action); 1446 1441 if (ret) { 1447 1442 mlx5dr_dbg(dmn, "Failed preparing reformat data\n"); 1443 + kfree(hw_actions); 1448 1444 return ret; 1449 1445 } 1450 1446 return 0; ··· 2134 2128 refcount_inc(&dmn->refcount); 2135 2129 2136 2130 return action; 2131 + } 2132 + 2133 + u32 mlx5dr_action_get_pkt_reformat_id(struct mlx5dr_action *action) 2134 + { 2135 + return action->reformat->id; 2137 2136 } 2138 2137 2139 2138 int mlx5dr_action_destroy(struct mlx5dr_action *action)
+25 -2
drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c
··· 331 331 } 332 332 333 333 if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT) { 334 - bool is_decap = fte->action.pkt_reformat->reformat_type == 335 - MLX5_REFORMAT_TYPE_L3_TUNNEL_TO_L2; 334 + bool is_decap; 335 + 336 + if (fte->action.pkt_reformat->owner == MLX5_FLOW_RESOURCE_OWNER_FW) { 337 + err = -EINVAL; 338 + mlx5dr_err(domain, "FW-owned reformat can't be used in SW rule\n"); 339 + goto free_actions; 340 + } 341 + 342 + is_decap = fte->action.pkt_reformat->reformat_type == 343 + MLX5_REFORMAT_TYPE_L3_TUNNEL_TO_L2; 336 344 337 345 if (is_decap) 338 346 actions[num_actions++] = ··· 669 661 return -EINVAL; 670 662 } 671 663 664 + pkt_reformat->owner = MLX5_FLOW_RESOURCE_OWNER_SW; 672 665 pkt_reformat->action.dr_action = action; 673 666 674 667 return 0; ··· 700 691 return -EINVAL; 701 692 } 702 693 694 + modify_hdr->owner = MLX5_FLOW_RESOURCE_OWNER_SW; 703 695 modify_hdr->action.dr_action = action; 704 696 705 697 return 0; ··· 825 815 steering_caps |= MLX5_FLOW_STEERING_CAP_MATCH_RANGES; 826 816 827 817 return steering_caps; 818 + } 819 + 820 + int mlx5_fs_dr_action_get_pkt_reformat_id(struct mlx5_pkt_reformat *pkt_reformat) 821 + { 822 + switch (pkt_reformat->reformat_type) { 823 + case MLX5_REFORMAT_TYPE_L2_TO_VXLAN: 824 + case MLX5_REFORMAT_TYPE_L2_TO_NVGRE: 825 + case MLX5_REFORMAT_TYPE_L2_TO_L2_TUNNEL: 826 + case MLX5_REFORMAT_TYPE_L2_TO_L3_TUNNEL: 827 + case MLX5_REFORMAT_TYPE_INSERT_HDR: 828 + return mlx5dr_action_get_pkt_reformat_id(pkt_reformat->action.dr_action); 829 + } 830 + return -EOPNOTSUPP; 828 831 } 829 832 830 833 bool mlx5_fs_dr_is_supported(struct mlx5_core_dev *dev)
+7
drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.h
··· 38 38 39 39 bool mlx5_fs_dr_is_supported(struct mlx5_core_dev *dev); 40 40 41 + int mlx5_fs_dr_action_get_pkt_reformat_id(struct mlx5_pkt_reformat *pkt_reformat); 42 + 41 43 const struct mlx5_flow_cmds *mlx5_fs_cmd_get_dr_cmds(void); 42 44 43 45 #else ··· 47 45 static inline const struct mlx5_flow_cmds *mlx5_fs_cmd_get_dr_cmds(void) 48 46 { 49 47 return NULL; 48 + } 49 + 50 + static inline u32 mlx5_fs_dr_action_get_pkt_reformat_id(struct mlx5_pkt_reformat *pkt_reformat) 51 + { 52 + return 0; 50 53 } 51 54 52 55 static inline bool mlx5_fs_dr_is_supported(struct mlx5_core_dev *dev)
+2
drivers/net/ethernet/mellanox/mlx5/core/steering/mlx5dr.h
··· 151 151 152 152 int mlx5dr_action_destroy(struct mlx5dr_action *action); 153 153 154 + u32 mlx5dr_action_get_pkt_reformat_id(struct mlx5dr_action *action); 155 + 154 156 int mlx5dr_definer_get(struct mlx5dr_domain *dmn, u16 format_id, 155 157 u8 *dw_selectors, u8 *byte_selectors, 156 158 u8 *match_mask, u32 *definer_id);
+1 -2
drivers/net/ethernet/qualcomm/qca_spi.c
··· 582 582 while (!kthread_should_stop()) { 583 583 set_current_state(TASK_INTERRUPTIBLE); 584 584 if ((qca->intr_req == qca->intr_svc) && 585 - (qca->txr.skb[qca->txr.head] == NULL) && 586 - (qca->sync == QCASPI_SYNC_READY)) 585 + !qca->txr.skb[qca->txr.head]) 587 586 schedule(); 588 587 589 588 set_current_state(TASK_RUNNING);
+18 -7
drivers/net/ethernet/sfc/ef10.c
··· 2950 2950 return tstamp; 2951 2951 } 2952 2952 2953 - static void 2953 + static int 2954 2954 efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) 2955 2955 { 2956 2956 struct efx_nic *efx = channel->efx; ··· 2958 2958 unsigned int tx_ev_desc_ptr; 2959 2959 unsigned int tx_ev_q_label; 2960 2960 unsigned int tx_ev_type; 2961 + int work_done; 2961 2962 u64 ts_part; 2962 2963 2963 2964 if (unlikely(READ_ONCE(efx->reset_pending))) 2964 - return; 2965 + return 0; 2965 2966 2966 2967 if (unlikely(EFX_QWORD_FIELD(*event, ESF_DZ_TX_DROP_EVENT))) 2967 - return; 2968 + return 0; 2968 2969 2969 2970 /* Get the transmit queue */ 2970 2971 tx_ev_q_label = EFX_QWORD_FIELD(*event, ESF_DZ_TX_QLABEL); ··· 2974 2973 if (!tx_queue->timestamping) { 2975 2974 /* Transmit completion */ 2976 2975 tx_ev_desc_ptr = EFX_QWORD_FIELD(*event, ESF_DZ_TX_DESCR_INDX); 2977 - efx_xmit_done(tx_queue, tx_ev_desc_ptr & tx_queue->ptr_mask); 2978 - return; 2976 + return efx_xmit_done(tx_queue, tx_ev_desc_ptr & tx_queue->ptr_mask); 2979 2977 } 2980 2978 2981 2979 /* Transmit timestamps are only available for 8XXX series. They result ··· 3000 3000 * fields in the event. 3001 3001 */ 3002 3002 tx_ev_type = EFX_QWORD_FIELD(*event, ESF_EZ_TX_SOFT1); 3003 + work_done = 0; 3003 3004 3004 3005 switch (tx_ev_type) { 3005 3006 case TX_TIMESTAMP_EVENT_TX_EV_COMPLETION: ··· 3017 3016 tx_queue->completed_timestamp_major = ts_part; 3018 3017 3019 3018 efx_xmit_done_single(tx_queue); 3019 + work_done = 1; 3020 3020 break; 3021 3021 3022 3022 default: ··· 3028 3026 EFX_QWORD_VAL(*event)); 3029 3027 break; 3030 3028 } 3029 + 3030 + return work_done; 3031 3031 } 3032 3032 3033 3033 static void ··· 3085 3081 } 3086 3082 } 3087 3083 3084 + #define EFX_NAPI_MAX_TX 512 3085 + 3088 3086 static int efx_ef10_ev_process(struct efx_channel *channel, int quota) 3089 3087 { 3090 3088 struct efx_nic *efx = channel->efx; 3091 3089 efx_qword_t event, *p_event; 3092 3090 unsigned int read_ptr; 3093 - int ev_code; 3091 + int spent_tx = 0; 3094 3092 int spent = 0; 3093 + int ev_code; 3095 3094 3096 3095 if (quota <= 0) 3097 3096 return spent; ··· 3133 3126 } 3134 3127 break; 3135 3128 case ESE_DZ_EV_CODE_TX_EV: 3136 - efx_ef10_handle_tx_event(channel, &event); 3129 + spent_tx += efx_ef10_handle_tx_event(channel, &event); 3130 + if (spent_tx >= EFX_NAPI_MAX_TX) { 3131 + spent = quota; 3132 + goto out; 3133 + } 3137 3134 break; 3138 3135 case ESE_DZ_EV_CODE_DRIVER_EV: 3139 3136 efx_ef10_handle_driver_event(channel, &event);
+6 -1
drivers/net/ethernet/sfc/ef100_nic.c
··· 253 253 efx_reg(channel->efx, ER_GZ_EVQ_INT_PRIME)); 254 254 } 255 255 256 + #define EFX_NAPI_MAX_TX 512 257 + 256 258 static int ef100_ev_process(struct efx_channel *channel, int quota) 257 259 { 258 260 struct efx_nic *efx = channel->efx; ··· 262 260 bool evq_phase, old_evq_phase; 263 261 unsigned int read_ptr; 264 262 efx_qword_t *p_event; 263 + int spent_tx = 0; 265 264 int spent = 0; 266 265 bool ev_phase; 267 266 int ev_type; ··· 298 295 efx_mcdi_process_event(channel, p_event); 299 296 break; 300 297 case ESE_GZ_EF100_EV_TX_COMPLETION: 301 - ef100_ev_tx(channel, p_event); 298 + spent_tx += ef100_ev_tx(channel, p_event); 299 + if (spent_tx >= EFX_NAPI_MAX_TX) 300 + spent = quota; 302 301 break; 303 302 case ESE_GZ_EF100_EV_DRIVER: 304 303 netif_info(efx, drv, efx->net_dev,
+2 -2
drivers/net/ethernet/sfc/ef100_tx.c
··· 346 346 ef100_tx_push_buffers(tx_queue); 347 347 } 348 348 349 - void ef100_ev_tx(struct efx_channel *channel, const efx_qword_t *p_event) 349 + int ef100_ev_tx(struct efx_channel *channel, const efx_qword_t *p_event) 350 350 { 351 351 unsigned int tx_done = 352 352 EFX_QWORD_FIELD(*p_event, ESF_GZ_EV_TXCMPL_NUM_DESC); ··· 357 357 unsigned int tx_index = (tx_queue->read_count + tx_done - 1) & 358 358 tx_queue->ptr_mask; 359 359 360 - efx_xmit_done(tx_queue, tx_index); 360 + return efx_xmit_done(tx_queue, tx_index); 361 361 } 362 362 363 363 /* Add a socket buffer to a TX queue
+1 -1
drivers/net/ethernet/sfc/ef100_tx.h
··· 20 20 void ef100_tx_write(struct efx_tx_queue *tx_queue); 21 21 unsigned int ef100_tx_max_skb_descs(struct efx_nic *efx); 22 22 23 - void ef100_ev_tx(struct efx_channel *channel, const efx_qword_t *p_event); 23 + int ef100_ev_tx(struct efx_channel *channel, const efx_qword_t *p_event); 24 24 25 25 netdev_tx_t ef100_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb); 26 26 int __ef100_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb,
+3 -1
drivers/net/ethernet/sfc/tx_common.c
··· 250 250 } 251 251 } 252 252 253 - void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index) 253 + int efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index) 254 254 { 255 255 unsigned int fill_level, pkts_compl = 0, bytes_compl = 0; 256 256 unsigned int efv_pkts_compl = 0; ··· 280 280 } 281 281 282 282 efx_xmit_done_check_empty(tx_queue); 283 + 284 + return pkts_compl + efv_pkts_compl; 283 285 } 284 286 285 287 /* Remove buffers put into a tx_queue for the current packet.
+1 -1
drivers/net/ethernet/sfc/tx_common.h
··· 28 28 } 29 29 30 30 void efx_xmit_done_check_empty(struct efx_tx_queue *tx_queue); 31 - void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index); 31 + int efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index); 32 32 33 33 void efx_enqueue_unwind(struct efx_tx_queue *tx_queue, 34 34 unsigned int insert_count);
+2
drivers/net/ieee802154/adf7242.c
··· 1348 1348 MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>"); 1349 1349 MODULE_DESCRIPTION("ADF7242 IEEE802.15.4 Transceiver Driver"); 1350 1350 MODULE_LICENSE("GPL"); 1351 + 1352 + MODULE_FIRMWARE(FIRMWARE);
+4 -2
drivers/net/ieee802154/mac802154_hwsim.c
··· 685 685 static int hwsim_set_edge_lqi(struct sk_buff *msg, struct genl_info *info) 686 686 { 687 687 struct nlattr *edge_attrs[MAC802154_HWSIM_EDGE_ATTR_MAX + 1]; 688 - struct hwsim_edge_info *einfo; 688 + struct hwsim_edge_info *einfo, *einfo_old; 689 689 struct hwsim_phy *phy_v0; 690 690 struct hwsim_edge *e; 691 691 u32 v0, v1; ··· 723 723 list_for_each_entry_rcu(e, &phy_v0->edges, list) { 724 724 if (e->endpoint->idx == v1) { 725 725 einfo->lqi = lqi; 726 - rcu_assign_pointer(e->info, einfo); 726 + einfo_old = rcu_replace_pointer(e->info, einfo, 727 + lockdep_is_held(&hwsim_phys_lock)); 727 728 rcu_read_unlock(); 729 + kfree_rcu(einfo_old, rcu); 728 730 mutex_unlock(&hwsim_phys_lock); 729 731 return 0; 730 732 }
+1 -1
drivers/net/phy/dp83867.c
··· 936 936 { 937 937 int err; 938 938 939 - err = phy_write(phydev, DP83867_CTRL, DP83867_SW_RESTART); 939 + err = phy_write(phydev, DP83867_CTRL, DP83867_SW_RESET); 940 940 if (err < 0) 941 941 return err; 942 942
+1 -1
drivers/net/phy/mdio_bus.c
··· 1287 1287 * @mask: bit mask of bits to clear 1288 1288 * @set: bit mask of bits to set 1289 1289 */ 1290 - int mdiobus_c45_modify_changed(struct mii_bus *bus, int devad, int addr, 1290 + int mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, int devad, 1291 1291 u32 regnum, u16 mask, u16 set) 1292 1292 { 1293 1293 int err;
+14 -1
drivers/net/phy/phy_device.c
··· 3020 3020 return err; 3021 3021 } 3022 3022 3023 + static void phy_leds_unregister(struct phy_device *phydev) 3024 + { 3025 + struct phy_led *phyled; 3026 + 3027 + list_for_each_entry(phyled, &phydev->leds, list) { 3028 + led_classdev_unregister(&phyled->led_cdev); 3029 + } 3030 + } 3031 + 3023 3032 static int of_phy_led(struct phy_device *phydev, 3024 3033 struct device_node *led) 3025 3034 { ··· 3062 3053 init_data.fwnode = of_fwnode_handle(led); 3063 3054 init_data.devname_mandatory = true; 3064 3055 3065 - err = devm_led_classdev_register_ext(dev, cdev, &init_data); 3056 + err = led_classdev_register_ext(dev, cdev, &init_data); 3066 3057 if (err) 3067 3058 return err; 3068 3059 ··· 3091 3082 err = of_phy_led(phydev, led); 3092 3083 if (err) { 3093 3084 of_node_put(led); 3085 + phy_leds_unregister(phydev); 3094 3086 return err; 3095 3087 } 3096 3088 } ··· 3313 3303 struct phy_device *phydev = to_phy_device(dev); 3314 3304 3315 3305 cancel_delayed_work_sync(&phydev->state_queue); 3306 + 3307 + if (IS_ENABLED(CONFIG_PHYLIB_LEDS)) 3308 + phy_leds_unregister(phydev); 3316 3309 3317 3310 phydev->state = PHY_DOWN; 3318 3311
+2
drivers/net/wireless/intel/iwlwifi/pcie/drv.c
··· 548 548 IWL_DEV_INFO(0x54F0, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name), 549 549 IWL_DEV_INFO(0x7A70, 0x1691, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name), 550 550 IWL_DEV_INFO(0x7A70, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name), 551 + IWL_DEV_INFO(0x7AF0, 0x1691, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name), 552 + IWL_DEV_INFO(0x7AF0, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name), 551 553 552 554 IWL_DEV_INFO(0x271C, 0x0214, iwl9260_2ac_cfg, iwl9260_1_name), 553 555 IWL_DEV_INFO(0x7E40, 0x1691, iwl_cfg_ma_a0_gf4_a0, iwl_ax411_killer_1690s_name),
+6 -9
drivers/net/wwan/iosm/iosm_ipc_mux_codec.c
··· 626 626 if (adth->signature != cpu_to_le32(IOSM_AGGR_MUX_SIG_ADTH)) 627 627 goto adb_decode_err; 628 628 629 - if (le16_to_cpu(adth->table_length) < (sizeof(struct mux_adth) - 630 - sizeof(struct mux_adth_dg))) 629 + if (le16_to_cpu(adth->table_length) < sizeof(struct mux_adth)) 631 630 goto adb_decode_err; 632 631 633 632 /* Calculate the number of datagrams. */ 634 633 nr_of_dg = (le16_to_cpu(adth->table_length) - 635 - sizeof(struct mux_adth) + 636 - sizeof(struct mux_adth_dg)) / 634 + sizeof(struct mux_adth)) / 637 635 sizeof(struct mux_adth_dg); 638 636 639 637 /* Is the datagram table empty ? */ ··· 647 649 } 648 650 649 651 /* New aggregated datagram table. */ 650 - dg = &adth->dg; 652 + dg = adth->dg; 651 653 if (mux_dl_process_dg(ipc_mux, adbh, dg, skb, if_id, 652 654 nr_of_dg) < 0) 653 655 goto adb_decode_err; ··· 847 849 adth->if_id = i; 848 850 adth->table_length = cpu_to_le16(adth_dg_size); 849 851 adth_dg_size -= offsetof(struct mux_adth, dg); 850 - memcpy(&adth->dg, ul_adb->dg[i], adth_dg_size); 852 + memcpy(adth->dg, ul_adb->dg[i], adth_dg_size); 851 853 ul_adb->if_cnt++; 852 854 } 853 855 ··· 1424 1426 1425 1427 if (adth->signature == cpu_to_le32(IOSM_AGGR_MUX_SIG_ADTH)) { 1426 1428 nr_of_dg = (le16_to_cpu(adth->table_length) - 1427 - sizeof(struct mux_adth) + 1428 - sizeof(struct mux_adth_dg)) / 1429 + sizeof(struct mux_adth)) / 1429 1430 sizeof(struct mux_adth_dg); 1430 1431 1431 1432 if (nr_of_dg <= 0) 1432 1433 return payload_size; 1433 1434 1434 - dg = &adth->dg; 1435 + dg = adth->dg; 1435 1436 1436 1437 for (i = 0; i < nr_of_dg; i++, dg++) { 1437 1438 if (le32_to_cpu(dg->datagram_index) <
+1 -1
drivers/net/wwan/iosm/iosm_ipc_mux_codec.h
··· 161 161 u8 opt_ipv4v6; 162 162 __le32 next_table_index; 163 163 __le32 reserved2; 164 - struct mux_adth_dg dg; 164 + struct mux_adth_dg dg[]; 165 165 }; 166 166 167 167 /**
+3
drivers/nfc/fdp/fdp.c
··· 762 762 MODULE_LICENSE("GPL"); 763 763 MODULE_DESCRIPTION("NFC NCI driver for Intel Fields Peak NFC controller"); 764 764 MODULE_AUTHOR("Robert Dolca <robert.dolca@intel.com>"); 765 + 766 + MODULE_FIRMWARE(FDP_OTP_PATCH_NAME); 767 + MODULE_FIRMWARE(FDP_RAM_PATCH_NAME);
+82 -57
drivers/pci/controller/pci-hyperv.c
··· 489 489 struct fwnode_handle *fwnode; 490 490 /* Protocol version negotiated with the host */ 491 491 enum pci_protocol_version_t protocol_version; 492 + 493 + struct mutex state_lock; 492 494 enum hv_pcibus_state state; 495 + 493 496 struct hv_device *hdev; 494 497 resource_size_t low_mmio_space; 495 498 resource_size_t high_mmio_space; ··· 548 545 struct hv_pcidev_description func[]; 549 546 }; 550 547 551 - enum hv_pcichild_state { 552 - hv_pcichild_init = 0, 553 - hv_pcichild_requirements, 554 - hv_pcichild_resourced, 555 - hv_pcichild_ejecting, 556 - hv_pcichild_maximum 557 - }; 558 - 559 548 struct hv_pci_dev { 560 549 /* List protected by pci_rescan_remove_lock */ 561 550 struct list_head list_entry; 562 551 refcount_t refs; 563 - enum hv_pcichild_state state; 564 552 struct pci_slot *pci_slot; 565 553 struct hv_pcidev_description desc; 566 554 bool reported_missing; ··· 629 635 pbus = pdev->bus; 630 636 hbus = container_of(pbus->sysdata, struct hv_pcibus_device, sysdata); 631 637 int_desc = data->chip_data; 638 + if (!int_desc) { 639 + dev_warn(&hbus->hdev->device, "%s() can not unmask irq %u\n", 640 + __func__, data->irq); 641 + return; 642 + } 632 643 633 644 local_irq_save(flags); 634 645 ··· 2003 2004 hv_pci_onchannelcallback(hbus); 2004 2005 spin_unlock_irqrestore(&channel->sched_lock, flags); 2005 2006 2006 - if (hpdev->state == hv_pcichild_ejecting) { 2007 - dev_err_once(&hbus->hdev->device, 2008 - "the device is being ejected\n"); 2009 - goto enable_tasklet; 2010 - } 2011 - 2012 2007 udelay(100); 2013 2008 } 2014 2009 ··· 2608 2615 if (!dr) 2609 2616 return; 2610 2617 2618 + mutex_lock(&hbus->state_lock); 2619 + 2611 2620 /* First, mark all existing children as reported missing. */ 2612 2621 spin_lock_irqsave(&hbus->device_list_lock, flags); 2613 2622 list_for_each_entry(hpdev, &hbus->children, list_entry) { ··· 2690 2695 default: 2691 2696 break; 2692 2697 } 2698 + 2699 + mutex_unlock(&hbus->state_lock); 2693 2700 2694 2701 kfree(dr); 2695 2702 } ··· 2841 2844 hpdev = container_of(work, struct hv_pci_dev, wrk); 2842 2845 hbus = hpdev->hbus; 2843 2846 2844 - WARN_ON(hpdev->state != hv_pcichild_ejecting); 2847 + mutex_lock(&hbus->state_lock); 2845 2848 2846 2849 /* 2847 2850 * Ejection can come before or after the PCI bus has been set up, so ··· 2879 2882 put_pcichild(hpdev); 2880 2883 put_pcichild(hpdev); 2881 2884 /* hpdev has been freed. Do not use it any more. */ 2885 + 2886 + mutex_unlock(&hbus->state_lock); 2882 2887 } 2883 2888 2884 2889 /** ··· 2901 2902 return; 2902 2903 } 2903 2904 2904 - hpdev->state = hv_pcichild_ejecting; 2905 2905 get_pcichild(hpdev); 2906 2906 INIT_WORK(&hpdev->wrk, hv_eject_device_work); 2907 2907 queue_work(hbus->wq, &hpdev->wrk); ··· 3329 3331 struct pci_bus_d0_entry *d0_entry; 3330 3332 struct hv_pci_compl comp_pkt; 3331 3333 struct pci_packet *pkt; 3334 + bool retry = true; 3332 3335 int ret; 3333 3336 3337 + enter_d0_retry: 3334 3338 /* 3335 3339 * Tell the host that the bus is ready to use, and moved into the 3336 3340 * powered-on state. This includes telling the host which region ··· 3358 3358 3359 3359 if (ret) 3360 3360 goto exit; 3361 + 3362 + /* 3363 + * In certain case (Kdump) the pci device of interest was 3364 + * not cleanly shut down and resource is still held on host 3365 + * side, the host could return invalid device status. 3366 + * We need to explicitly request host to release the resource 3367 + * and try to enter D0 again. 3368 + */ 3369 + if (comp_pkt.completion_status < 0 && retry) { 3370 + retry = false; 3371 + 3372 + dev_err(&hdev->device, "Retrying D0 Entry\n"); 3373 + 3374 + /* 3375 + * Hv_pci_bus_exit() calls hv_send_resource_released() 3376 + * to free up resources of its child devices. 3377 + * In the kdump kernel we need to set the 3378 + * wslot_res_allocated to 255 so it scans all child 3379 + * devices to release resources allocated in the 3380 + * normal kernel before panic happened. 3381 + */ 3382 + hbus->wslot_res_allocated = 255; 3383 + 3384 + ret = hv_pci_bus_exit(hdev, true); 3385 + 3386 + if (ret == 0) { 3387 + kfree(pkt); 3388 + goto enter_d0_retry; 3389 + } 3390 + dev_err(&hdev->device, 3391 + "Retrying D0 failed with ret %d\n", ret); 3392 + } 3361 3393 3362 3394 if (comp_pkt.completion_status < 0) { 3363 3395 dev_err(&hdev->device, ··· 3432 3400 0, VM_PKT_DATA_INBAND, 0); 3433 3401 if (!ret) 3434 3402 ret = wait_for_response(hdev, &comp); 3403 + 3404 + /* 3405 + * In the case of fast device addition/removal, it's possible that 3406 + * vmbus_sendpacket() or wait_for_response() returns -ENODEV but we 3407 + * already got a PCI_BUS_RELATIONS* message from the host and the 3408 + * channel callback already scheduled a work to hbus->wq, which can be 3409 + * running pci_devices_present_work() -> survey_child_resources() -> 3410 + * complete(&hbus->survey_event), even after hv_pci_query_relations() 3411 + * exits and the stack variable 'comp' is no longer valid; as a result, 3412 + * a hang or a page fault may happen when the complete() calls 3413 + * raw_spin_lock_irqsave(). Flush hbus->wq before we exit from 3414 + * hv_pci_query_relations() to avoid the issues. Note: if 'ret' is 3415 + * -ENODEV, there can't be any more work item scheduled to hbus->wq 3416 + * after the flush_workqueue(): see vmbus_onoffer_rescind() -> 3417 + * vmbus_reset_channel_cb(), vmbus_rescind_cleanup() -> 3418 + * channel->rescind = true. 3419 + */ 3420 + flush_workqueue(hbus->wq); 3435 3421 3436 3422 return ret; 3437 3423 } ··· 3636 3586 struct hv_pcibus_device *hbus; 3637 3587 u16 dom_req, dom; 3638 3588 char *name; 3639 - bool enter_d0_retry = true; 3640 3589 int ret; 3641 3590 3642 3591 bridge = devm_pci_alloc_host_bridge(&hdev->device, 0); ··· 3647 3598 return -ENOMEM; 3648 3599 3649 3600 hbus->bridge = bridge; 3601 + mutex_init(&hbus->state_lock); 3650 3602 hbus->state = hv_pcibus_init; 3651 3603 hbus->wslot_res_allocated = -1; 3652 3604 ··· 3753 3703 if (ret) 3754 3704 goto free_fwnode; 3755 3705 3756 - retry: 3757 3706 ret = hv_pci_query_relations(hdev); 3758 3707 if (ret) 3759 3708 goto free_irq_domain; 3760 3709 3710 + mutex_lock(&hbus->state_lock); 3711 + 3761 3712 ret = hv_pci_enter_d0(hdev); 3762 - /* 3763 - * In certain case (Kdump) the pci device of interest was 3764 - * not cleanly shut down and resource is still held on host 3765 - * side, the host could return invalid device status. 3766 - * We need to explicitly request host to release the resource 3767 - * and try to enter D0 again. 3768 - * Since the hv_pci_bus_exit() call releases structures 3769 - * of all its child devices, we need to start the retry from 3770 - * hv_pci_query_relations() call, requesting host to send 3771 - * the synchronous child device relations message before this 3772 - * information is needed in hv_send_resources_allocated() 3773 - * call later. 3774 - */ 3775 - if (ret == -EPROTO && enter_d0_retry) { 3776 - enter_d0_retry = false; 3777 - 3778 - dev_err(&hdev->device, "Retrying D0 Entry\n"); 3779 - 3780 - /* 3781 - * Hv_pci_bus_exit() calls hv_send_resources_released() 3782 - * to free up resources of its child devices. 3783 - * In the kdump kernel we need to set the 3784 - * wslot_res_allocated to 255 so it scans all child 3785 - * devices to release resources allocated in the 3786 - * normal kernel before panic happened. 3787 - */ 3788 - hbus->wslot_res_allocated = 255; 3789 - ret = hv_pci_bus_exit(hdev, true); 3790 - 3791 - if (ret == 0) 3792 - goto retry; 3793 - 3794 - dev_err(&hdev->device, 3795 - "Retrying D0 failed with ret %d\n", ret); 3796 - } 3797 3713 if (ret) 3798 - goto free_irq_domain; 3714 + goto release_state_lock; 3799 3715 3800 3716 ret = hv_pci_allocate_bridge_windows(hbus); 3801 3717 if (ret) ··· 3779 3763 if (ret) 3780 3764 goto free_windows; 3781 3765 3766 + mutex_unlock(&hbus->state_lock); 3782 3767 return 0; 3783 3768 3784 3769 free_windows: 3785 3770 hv_pci_free_bridge_windows(hbus); 3786 3771 exit_d0: 3787 3772 (void) hv_pci_bus_exit(hdev, true); 3773 + release_state_lock: 3774 + mutex_unlock(&hbus->state_lock); 3788 3775 free_irq_domain: 3789 3776 irq_domain_remove(hbus->irq_domain); 3790 3777 free_fwnode: ··· 4037 4018 if (ret) 4038 4019 goto out; 4039 4020 4021 + mutex_lock(&hbus->state_lock); 4022 + 4040 4023 ret = hv_pci_enter_d0(hdev); 4041 4024 if (ret) 4042 - goto out; 4025 + goto release_state_lock; 4043 4026 4044 4027 ret = hv_send_resources_allocated(hdev); 4045 4028 if (ret) 4046 - goto out; 4029 + goto release_state_lock; 4047 4030 4048 4031 prepopulate_bars(hbus); 4049 4032 4050 4033 hv_pci_restore_msi_state(hbus); 4051 4034 4052 4035 hbus->state = hv_pcibus_installed; 4036 + mutex_unlock(&hbus->state_lock); 4053 4037 return 0; 4038 + 4039 + release_state_lock: 4040 + mutex_unlock(&hbus->state_lock); 4054 4041 out: 4055 4042 vmbus_close(hdev->channel); 4056 4043 return ret;
+18 -3
drivers/perf/arm_pmuv3.c
··· 677 677 return value; 678 678 } 679 679 680 + static void update_pmuserenr(u64 val) 681 + { 682 + lockdep_assert_irqs_disabled(); 683 + 684 + /* 685 + * The current PMUSERENR_EL0 value might be the value for the guest. 686 + * If that's the case, have KVM keep tracking of the register value 687 + * for the host EL0 so that KVM can restore it before returning to 688 + * the host EL0. Otherwise, update the register now. 689 + */ 690 + if (kvm_set_pmuserenr(val)) 691 + return; 692 + 693 + write_pmuserenr(val); 694 + } 695 + 680 696 static void armv8pmu_disable_user_access(void) 681 697 { 682 - write_pmuserenr(0); 698 + update_pmuserenr(0); 683 699 } 684 700 685 701 static void armv8pmu_enable_user_access(struct arm_pmu *cpu_pmu) ··· 711 695 armv8pmu_write_evcntr(i, 0); 712 696 } 713 697 714 - write_pmuserenr(0); 715 - write_pmuserenr(ARMV8_PMU_USERENR_ER | ARMV8_PMU_USERENR_CR); 698 + update_pmuserenr(ARMV8_PMU_USERENR_ER | ARMV8_PMU_USERENR_CR); 716 699 } 717 700 718 701 static void armv8pmu_enable_event(struct perf_event *event)
+5 -5
drivers/platform/x86/amd/pmf/core.c
··· 297 297 /* Enable Static Slider */ 298 298 if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) { 299 299 amd_pmf_init_sps(dev); 300 + dev->pwr_src_notifier.notifier_call = amd_pmf_pwr_src_notify_call; 301 + power_supply_reg_notifier(&dev->pwr_src_notifier); 300 302 dev_dbg(dev->dev, "SPS enabled and Platform Profiles registered\n"); 301 303 } 302 304 ··· 317 315 318 316 static void amd_pmf_deinit_features(struct amd_pmf_dev *dev) 319 317 { 320 - if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) 318 + if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) { 319 + power_supply_unreg_notifier(&dev->pwr_src_notifier); 321 320 amd_pmf_deinit_sps(dev); 321 + } 322 322 323 323 if (is_apmf_func_supported(dev, APMF_FUNC_AUTO_MODE)) { 324 324 amd_pmf_deinit_auto_mode(dev); ··· 403 399 apmf_install_handler(dev); 404 400 amd_pmf_dbgfs_register(dev); 405 401 406 - dev->pwr_src_notifier.notifier_call = amd_pmf_pwr_src_notify_call; 407 - power_supply_reg_notifier(&dev->pwr_src_notifier); 408 - 409 402 dev_info(dev->dev, "registered PMF device successfully\n"); 410 403 411 404 return 0; ··· 412 411 { 413 412 struct amd_pmf_dev *dev = platform_get_drvdata(pdev); 414 413 415 - power_supply_unreg_notifier(&dev->pwr_src_notifier); 416 414 amd_pmf_deinit_features(dev); 417 415 apmf_acpi_deinit(dev); 418 416 amd_pmf_dbgfs_unregister(dev);
+1
drivers/scsi/aacraid/aacraid.h
··· 1678 1678 u32 handle_pci_error; 1679 1679 bool init_reset; 1680 1680 u8 soft_reset_support; 1681 + u8 use_map_queue; 1681 1682 }; 1682 1683 1683 1684 #define aac_adapter_interrupt(dev) \
+5 -1
drivers/scsi/aacraid/commsup.c
··· 223 223 struct fib *aac_fib_alloc_tag(struct aac_dev *dev, struct scsi_cmnd *scmd) 224 224 { 225 225 struct fib *fibptr; 226 + u32 blk_tag; 227 + int i; 226 228 227 - fibptr = &dev->fibs[scsi_cmd_to_rq(scmd)->tag]; 229 + blk_tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd)); 230 + i = blk_mq_unique_tag_to_tag(blk_tag); 231 + fibptr = &dev->fibs[i]; 228 232 /* 229 233 * Null out fields that depend on being zero at the start of 230 234 * each I/O
+14
drivers/scsi/aacraid/linit.c
··· 19 19 20 20 #include <linux/compat.h> 21 21 #include <linux/blkdev.h> 22 + #include <linux/blk-mq-pci.h> 22 23 #include <linux/completion.h> 23 24 #include <linux/init.h> 24 25 #include <linux/interrupt.h> ··· 503 502 sdev->tagged_supported = 1; 504 503 505 504 return 0; 505 + } 506 + 507 + static void aac_map_queues(struct Scsi_Host *shost) 508 + { 509 + struct aac_dev *aac = (struct aac_dev *)shost->hostdata; 510 + 511 + blk_mq_pci_map_queues(&shost->tag_set.map[HCTX_TYPE_DEFAULT], 512 + aac->pdev, 0); 513 + aac->use_map_queue = true; 506 514 } 507 515 508 516 /** ··· 1498 1488 .bios_param = aac_biosparm, 1499 1489 .shost_groups = aac_host_groups, 1500 1490 .slave_configure = aac_slave_configure, 1491 + .map_queues = aac_map_queues, 1501 1492 .change_queue_depth = aac_change_queue_depth, 1502 1493 .sdev_groups = aac_dev_groups, 1503 1494 .eh_abort_handler = aac_eh_abort, ··· 1786 1775 shost->max_lun = AAC_MAX_LUN; 1787 1776 1788 1777 pci_set_drvdata(pdev, shost); 1778 + shost->nr_hw_queues = aac->max_msix; 1779 + shost->host_tagset = 1; 1789 1780 1790 1781 error = scsi_add_host(shost, &pdev->dev); 1791 1782 if (error) ··· 1919 1906 struct aac_dev *aac = (struct aac_dev *)shost->hostdata; 1920 1907 1921 1908 aac_cancel_rescan_worker(aac); 1909 + aac->use_map_queue = false; 1922 1910 scsi_remove_host(shost); 1923 1911 1924 1912 __aac_shutdown(aac);
+23 -2
drivers/scsi/aacraid/src.c
··· 493 493 #endif 494 494 495 495 u16 vector_no; 496 + struct scsi_cmnd *scmd; 497 + u32 blk_tag; 498 + struct Scsi_Host *shost = dev->scsi_host_ptr; 499 + struct blk_mq_queue_map *qmap; 496 500 497 501 atomic_inc(&q->numpending); 498 502 ··· 509 505 if ((dev->comm_interface == AAC_COMM_MESSAGE_TYPE3) 510 506 && dev->sa_firmware) 511 507 vector_no = aac_get_vector(dev); 512 - else 513 - vector_no = fib->vector_no; 508 + else { 509 + if (!fib->vector_no || !fib->callback_data) { 510 + if (shost && dev->use_map_queue) { 511 + qmap = &shost->tag_set.map[HCTX_TYPE_DEFAULT]; 512 + vector_no = qmap->mq_map[raw_smp_processor_id()]; 513 + } 514 + /* 515 + * We hardcode the vector_no for 516 + * reserved commands as a valid shost is 517 + * absent during the init 518 + */ 519 + else 520 + vector_no = 0; 521 + } else { 522 + scmd = (struct scsi_cmnd *)fib->callback_data; 523 + blk_tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd)); 524 + vector_no = blk_mq_unique_tag_to_hwq(blk_tag); 525 + } 526 + } 514 527 515 528 if (native_hba) { 516 529 if (fib->flags & FIB_CONTEXT_FLAG_NATIVE_HBA_TMF) {
+4 -4
drivers/scsi/lpfc/lpfc_bsg.c
··· 889 889 struct lpfc_iocbq *piocbq) 890 890 { 891 891 uint32_t evt_req_id = 0; 892 - uint32_t cmd; 892 + u16 cmd; 893 893 struct lpfc_dmabuf *dmabuf = NULL; 894 894 struct lpfc_bsg_event *evt; 895 895 struct event_data *evt_dat = NULL; ··· 915 915 916 916 ct_req = (struct lpfc_sli_ct_request *)bdeBuf1->virt; 917 917 evt_req_id = ct_req->FsType; 918 - cmd = ct_req->CommandResponse.bits.CmdRsp; 918 + cmd = be16_to_cpu(ct_req->CommandResponse.bits.CmdRsp); 919 919 920 920 spin_lock_irqsave(&phba->ct_ev_lock, flags); 921 921 list_for_each_entry(evt, &phba->ct_ev_waiters, node) { ··· 3186 3186 ctreq->RevisionId.bits.InId = 0; 3187 3187 ctreq->FsType = SLI_CT_ELX_LOOPBACK; 3188 3188 ctreq->FsSubType = 0; 3189 - ctreq->CommandResponse.bits.CmdRsp = ELX_LOOPBACK_DATA; 3190 - ctreq->CommandResponse.bits.Size = size; 3189 + ctreq->CommandResponse.bits.CmdRsp = cpu_to_be16(ELX_LOOPBACK_DATA); 3190 + ctreq->CommandResponse.bits.Size = cpu_to_be16(size); 3191 3191 segment_offset = ELX_LOOPBACK_HEADER_SZ; 3192 3192 } else 3193 3193 segment_offset = 0;
+2
drivers/scsi/storvsc_drv.c
··· 1567 1567 { 1568 1568 blk_queue_rq_timeout(sdevice->request_queue, (storvsc_timeout * HZ)); 1569 1569 1570 + /* storvsc devices don't support MAINTENANCE_IN SCSI cmd */ 1571 + sdevice->no_report_opcodes = 1; 1570 1572 sdevice->no_write_same = 1; 1571 1573 1572 1574 /*
+2
drivers/spi/spi-geni-qcom.c
··· 646 646 geni_se_select_mode(se, GENI_GPI_DMA); 647 647 dev_dbg(mas->dev, "Using GPI DMA mode for SPI\n"); 648 648 break; 649 + } else if (ret == -EPROBE_DEFER) { 650 + goto out_pm; 649 651 } 650 652 /* 651 653 * in case of failure to get gpi dma channel, we can still do the
-1
drivers/staging/octeon/TODO
··· 6 6 - make driver self-contained instead of being split between staging and 7 7 arch/mips/cavium-octeon. 8 8 9 - Contact: Aaro Koskinen <aaro.koskinen@iki.fi>
+2
drivers/target/target_core_transport.c
··· 504 504 505 505 free_sess: 506 506 transport_free_session(sess); 507 + return ERR_PTR(rc); 508 + 507 509 free_cnt: 508 510 target_free_cmd_counter(cmd_cnt); 509 511 return ERR_PTR(rc);
+1 -1
drivers/thermal/intel/intel_soc_dts_iosf.c
··· 398 398 spin_lock_init(&sensors->intr_notify_lock); 399 399 mutex_init(&sensors->dts_update_lock); 400 400 sensors->intr_type = intr_type; 401 - sensors->tj_max = tj_max; 401 + sensors->tj_max = tj_max * 1000; 402 402 if (intr_type == INTEL_SOC_DTS_INTERRUPT_NONE) 403 403 notification = false; 404 404 else
+4 -4
drivers/thunderbolt/dma_test.c
··· 192 192 } 193 193 194 194 ret = tb_xdomain_enable_paths(dt->xd, dt->tx_hopid, 195 - dt->tx_ring ? dt->tx_ring->hop : 0, 195 + dt->tx_ring ? dt->tx_ring->hop : -1, 196 196 dt->rx_hopid, 197 - dt->rx_ring ? dt->rx_ring->hop : 0); 197 + dt->rx_ring ? dt->rx_ring->hop : -1); 198 198 if (ret) { 199 199 dma_test_free_rings(dt); 200 200 return ret; ··· 218 218 tb_ring_stop(dt->tx_ring); 219 219 220 220 ret = tb_xdomain_disable_paths(dt->xd, dt->tx_hopid, 221 - dt->tx_ring ? dt->tx_ring->hop : 0, 221 + dt->tx_ring ? dt->tx_ring->hop : -1, 222 222 dt->rx_hopid, 223 - dt->rx_ring ? dt->rx_ring->hop : 0); 223 + dt->rx_ring ? dt->rx_ring->hop : -1); 224 224 if (ret) 225 225 dev_warn(&dt->svc->dev, "failed to disable DMA paths\n"); 226 226
+8 -3
drivers/thunderbolt/nhi.c
··· 56 56 57 57 static void nhi_mask_interrupt(struct tb_nhi *nhi, int mask, int ring) 58 58 { 59 - if (nhi->quirks & QUIRK_AUTO_CLEAR_INT) 60 - return; 61 - iowrite32(mask, nhi->iobase + REG_RING_INTERRUPT_MASK_CLEAR_BASE + ring); 59 + if (nhi->quirks & QUIRK_AUTO_CLEAR_INT) { 60 + u32 val; 61 + 62 + val = ioread32(nhi->iobase + REG_RING_INTERRUPT_BASE + ring); 63 + iowrite32(val & ~mask, nhi->iobase + REG_RING_INTERRUPT_BASE + ring); 64 + } else { 65 + iowrite32(mask, nhi->iobase + REG_RING_INTERRUPT_MASK_CLEAR_BASE + ring); 66 + } 62 67 } 63 68 64 69 static void nhi_clear_interrupt(struct tb_nhi *nhi, int ring)
+12 -5
drivers/thunderbolt/tb.c
··· 737 737 { 738 738 struct tb_cm *tcm = tb_priv(port->sw->tb); 739 739 struct tb_port *upstream_port; 740 + bool discovery = false; 740 741 struct tb_switch *sw; 741 742 int ret; 742 743 ··· 805 804 * tunnels and know which switches were authorized already by 806 805 * the boot firmware. 807 806 */ 808 - if (!tcm->hotplug_active) 807 + if (!tcm->hotplug_active) { 809 808 dev_set_uevent_suppress(&sw->dev, true); 809 + discovery = true; 810 + } 810 811 811 812 /* 812 813 * At the moment Thunderbolt 2 and beyond (devices with LC) we ··· 838 835 * CL0s and CL1 are enabled and supported together. 839 836 * Silently ignore CLx enabling in case CLx is not supported. 840 837 */ 841 - ret = tb_switch_enable_clx(sw, TB_CL1); 842 - if (ret && ret != -EOPNOTSUPP) 843 - tb_sw_warn(sw, "failed to enable %s on upstream port\n", 844 - tb_switch_clx_name(TB_CL1)); 838 + if (discovery) { 839 + tb_sw_dbg(sw, "discovery, not touching CL states\n"); 840 + } else { 841 + ret = tb_switch_enable_clx(sw, TB_CL1); 842 + if (ret && ret != -EOPNOTSUPP) 843 + tb_sw_warn(sw, "failed to enable %s on upstream port\n", 844 + tb_switch_clx_name(TB_CL1)); 845 + } 845 846 846 847 if (tb_switch_is_clx_enabled(sw, TB_CL1)) 847 848 /*
+1 -1
drivers/thunderbolt/tunnel.c
··· 526 526 * Perform connection manager handshake between IN and OUT ports 527 527 * before capabilities exchange can take place. 528 528 */ 529 - ret = tb_dp_cm_handshake(in, out, 1500); 529 + ret = tb_dp_cm_handshake(in, out, 3000); 530 530 if (ret) 531 531 return ret; 532 532
+1 -1
drivers/tty/serial/fsl_lpuart.c
··· 310 310 static const struct lpuart_soc_data ls1028a_data = { 311 311 .devtype = LS1028A_LPUART, 312 312 .iotype = UPIO_MEM32, 313 - .rx_watermark = 1, 313 + .rx_watermark = 0, 314 314 }; 315 315 316 316 static struct lpuart_soc_data imx7ulp_data = {
+1
drivers/tty/serial/lantiq.c
··· 250 250 struct ltq_uart_port *ltq_port = to_ltq_uart_port(port); 251 251 252 252 spin_lock_irqsave(&ltq_port->lock, flags); 253 + __raw_writel(ASC_IRNCR_EIR, port->membase + LTQ_ASC_IRNCR); 253 254 /* clear any pending interrupts */ 254 255 asc_update_bits(0, ASCWHBSTATE_CLRPE | ASCWHBSTATE_CLRFE | 255 256 ASCWHBSTATE_CLRROE, port->membase + LTQ_ASC_WHBSTATE);
+5
drivers/usb/dwc3/core.c
··· 1929 1929 pm_runtime_disable(&pdev->dev); 1930 1930 pm_runtime_dont_use_autosuspend(&pdev->dev); 1931 1931 pm_runtime_put_noidle(&pdev->dev); 1932 + /* 1933 + * HACK: Clear the driver data, which is currently accessed by parent 1934 + * glue drivers, before allowing the parent to suspend. 1935 + */ 1936 + platform_set_drvdata(pdev, NULL); 1932 1937 pm_runtime_set_suspended(&pdev->dev); 1933 1938 1934 1939 dwc3_free_event_buffers(dwc);
+10 -1
drivers/usb/dwc3/dwc3-qcom.c
··· 308 308 /* Only usable in contexts where the role can not change. */ 309 309 static bool dwc3_qcom_is_host(struct dwc3_qcom *qcom) 310 310 { 311 - struct dwc3 *dwc = platform_get_drvdata(qcom->dwc3); 311 + struct dwc3 *dwc; 312 + 313 + /* 314 + * FIXME: Fix this layering violation. 315 + */ 316 + dwc = platform_get_drvdata(qcom->dwc3); 317 + 318 + /* Core driver may not have probed yet. */ 319 + if (!dwc) 320 + return false; 312 321 313 322 return dwc->xhci; 314 323 }
+1
drivers/usb/dwc3/gadget.c
··· 198 198 list_del(&req->list); 199 199 req->remaining = 0; 200 200 req->needs_extra_trb = false; 201 + req->num_trbs = 0; 201 202 202 203 if (req->request.status == -EINPROGRESS) 203 204 req->request.status = status;
+131 -49
drivers/usb/gadget/udc/core.c
··· 37 37 * @vbus: for udcs who care about vbus status, this value is real vbus status; 38 38 * for udcs who do not care about vbus status, this value is always true 39 39 * @started: the UDC's started state. True if the UDC had started. 40 + * @allow_connect: Indicates whether UDC is allowed to be pulled up. 41 + * Set/cleared by gadget_(un)bind_driver() after gadget driver is bound or 42 + * unbound. 43 + * @connect_lock: protects udc->started, gadget->connect, 44 + * gadget->allow_connect and gadget->deactivate. The routines 45 + * usb_gadget_connect_locked(), usb_gadget_disconnect_locked(), 46 + * usb_udc_connect_control_locked(), usb_gadget_udc_start_locked() and 47 + * usb_gadget_udc_stop_locked() are called with this lock held. 40 48 * 41 49 * This represents the internal data structure which is used by the UDC-class 42 50 * to hold information about udc driver and gadget together. ··· 56 48 struct list_head list; 57 49 bool vbus; 58 50 bool started; 51 + bool allow_connect; 52 + struct work_struct vbus_work; 53 + struct mutex connect_lock; 59 54 }; 60 55 61 56 static struct class *udc_class; ··· 698 687 } 699 688 EXPORT_SYMBOL_GPL(usb_gadget_vbus_disconnect); 700 689 701 - /** 702 - * usb_gadget_connect - software-controlled connect to USB host 703 - * @gadget:the peripheral being connected 704 - * 705 - * Enables the D+ (or potentially D-) pullup. The host will start 706 - * enumerating this gadget when the pullup is active and a VBUS session 707 - * is active (the link is powered). 708 - * 709 - * Returns zero on success, else negative errno. 710 - */ 711 - int usb_gadget_connect(struct usb_gadget *gadget) 690 + static int usb_gadget_connect_locked(struct usb_gadget *gadget) 691 + __must_hold(&gadget->udc->connect_lock) 712 692 { 713 693 int ret = 0; 714 694 ··· 708 706 goto out; 709 707 } 710 708 711 - if (gadget->deactivated) { 709 + if (gadget->deactivated || !gadget->udc->allow_connect || !gadget->udc->started) { 712 710 /* 713 - * If gadget is deactivated we only save new state. 714 - * Gadget will be connected automatically after activation. 711 + * If the gadget isn't usable (because it is deactivated, 712 + * unbound, or not yet started), we only save the new state. 713 + * The gadget will be connected automatically when it is 714 + * activated/bound/started. 715 715 */ 716 716 gadget->connected = true; 717 717 goto out; ··· 728 724 729 725 return ret; 730 726 } 731 - EXPORT_SYMBOL_GPL(usb_gadget_connect); 732 727 733 728 /** 734 - * usb_gadget_disconnect - software-controlled disconnect from USB host 735 - * @gadget:the peripheral being disconnected 729 + * usb_gadget_connect - software-controlled connect to USB host 730 + * @gadget:the peripheral being connected 736 731 * 737 - * Disables the D+ (or potentially D-) pullup, which the host may see 738 - * as a disconnect (when a VBUS session is active). Not all systems 739 - * support software pullup controls. 740 - * 741 - * Following a successful disconnect, invoke the ->disconnect() callback 742 - * for the current gadget driver so that UDC drivers don't need to. 732 + * Enables the D+ (or potentially D-) pullup. The host will start 733 + * enumerating this gadget when the pullup is active and a VBUS session 734 + * is active (the link is powered). 743 735 * 744 736 * Returns zero on success, else negative errno. 745 737 */ 746 - int usb_gadget_disconnect(struct usb_gadget *gadget) 738 + int usb_gadget_connect(struct usb_gadget *gadget) 739 + { 740 + int ret; 741 + 742 + mutex_lock(&gadget->udc->connect_lock); 743 + ret = usb_gadget_connect_locked(gadget); 744 + mutex_unlock(&gadget->udc->connect_lock); 745 + 746 + return ret; 747 + } 748 + EXPORT_SYMBOL_GPL(usb_gadget_connect); 749 + 750 + static int usb_gadget_disconnect_locked(struct usb_gadget *gadget) 751 + __must_hold(&gadget->udc->connect_lock) 747 752 { 748 753 int ret = 0; 749 754 ··· 764 751 if (!gadget->connected) 765 752 goto out; 766 753 767 - if (gadget->deactivated) { 754 + if (gadget->deactivated || !gadget->udc->started) { 768 755 /* 769 756 * If gadget is deactivated we only save new state. 770 757 * Gadget will stay disconnected after activation. ··· 787 774 788 775 return ret; 789 776 } 777 + 778 + /** 779 + * usb_gadget_disconnect - software-controlled disconnect from USB host 780 + * @gadget:the peripheral being disconnected 781 + * 782 + * Disables the D+ (or potentially D-) pullup, which the host may see 783 + * as a disconnect (when a VBUS session is active). Not all systems 784 + * support software pullup controls. 785 + * 786 + * Following a successful disconnect, invoke the ->disconnect() callback 787 + * for the current gadget driver so that UDC drivers don't need to. 788 + * 789 + * Returns zero on success, else negative errno. 790 + */ 791 + int usb_gadget_disconnect(struct usb_gadget *gadget) 792 + { 793 + int ret; 794 + 795 + mutex_lock(&gadget->udc->connect_lock); 796 + ret = usb_gadget_disconnect_locked(gadget); 797 + mutex_unlock(&gadget->udc->connect_lock); 798 + 799 + return ret; 800 + } 790 801 EXPORT_SYMBOL_GPL(usb_gadget_disconnect); 791 802 792 803 /** ··· 828 791 { 829 792 int ret = 0; 830 793 794 + mutex_lock(&gadget->udc->connect_lock); 831 795 if (gadget->deactivated) 832 - goto out; 796 + goto unlock; 833 797 834 798 if (gadget->connected) { 835 - ret = usb_gadget_disconnect(gadget); 799 + ret = usb_gadget_disconnect_locked(gadget); 836 800 if (ret) 837 - goto out; 801 + goto unlock; 838 802 839 803 /* 840 804 * If gadget was being connected before deactivation, we want ··· 845 807 } 846 808 gadget->deactivated = true; 847 809 848 - out: 810 + unlock: 811 + mutex_unlock(&gadget->udc->connect_lock); 849 812 trace_usb_gadget_deactivate(gadget, ret); 850 813 851 814 return ret; ··· 866 827 { 867 828 int ret = 0; 868 829 830 + mutex_lock(&gadget->udc->connect_lock); 869 831 if (!gadget->deactivated) 870 - goto out; 832 + goto unlock; 871 833 872 834 gadget->deactivated = false; 873 835 ··· 877 837 * while it was being deactivated, we call usb_gadget_connect(). 878 838 */ 879 839 if (gadget->connected) 880 - ret = usb_gadget_connect(gadget); 840 + ret = usb_gadget_connect_locked(gadget); 841 + mutex_unlock(&gadget->udc->connect_lock); 881 842 882 - out: 843 + unlock: 844 + mutex_unlock(&gadget->udc->connect_lock); 883 845 trace_usb_gadget_activate(gadget, ret); 884 846 885 847 return ret; ··· 1120 1078 1121 1079 /* ------------------------------------------------------------------------- */ 1122 1080 1123 - static void usb_udc_connect_control(struct usb_udc *udc) 1081 + /* Acquire connect_lock before calling this function. */ 1082 + static void usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock) 1124 1083 { 1125 1084 if (udc->vbus) 1126 - usb_gadget_connect(udc->gadget); 1085 + usb_gadget_connect_locked(udc->gadget); 1127 1086 else 1128 - usb_gadget_disconnect(udc->gadget); 1087 + usb_gadget_disconnect_locked(udc->gadget); 1088 + } 1089 + 1090 + static void vbus_event_work(struct work_struct *work) 1091 + { 1092 + struct usb_udc *udc = container_of(work, struct usb_udc, vbus_work); 1093 + 1094 + mutex_lock(&udc->connect_lock); 1095 + usb_udc_connect_control_locked(udc); 1096 + mutex_unlock(&udc->connect_lock); 1129 1097 } 1130 1098 1131 1099 /** ··· 1146 1094 * 1147 1095 * The udc driver calls it when it wants to connect or disconnect gadget 1148 1096 * according to vbus status. 1097 + * 1098 + * This function can be invoked from interrupt context by irq handlers of 1099 + * the gadget drivers, however, usb_udc_connect_control() has to run in 1100 + * non-atomic context due to the following: 1101 + * a. Some of the gadget driver implementations expect the ->pullup 1102 + * callback to be invoked in non-atomic context. 1103 + * b. usb_gadget_disconnect() acquires udc_lock which is a mutex. 1104 + * Hence offload invocation of usb_udc_connect_control() to workqueue. 1149 1105 */ 1150 1106 void usb_udc_vbus_handler(struct usb_gadget *gadget, bool status) 1151 1107 { ··· 1161 1101 1162 1102 if (udc) { 1163 1103 udc->vbus = status; 1164 - usb_udc_connect_control(udc); 1104 + schedule_work(&udc->vbus_work); 1165 1105 } 1166 1106 } 1167 1107 EXPORT_SYMBOL_GPL(usb_udc_vbus_handler); ··· 1184 1124 EXPORT_SYMBOL_GPL(usb_gadget_udc_reset); 1185 1125 1186 1126 /** 1187 - * usb_gadget_udc_start - tells usb device controller to start up 1127 + * usb_gadget_udc_start_locked - tells usb device controller to start up 1188 1128 * @udc: The UDC to be started 1189 1129 * 1190 1130 * This call is issued by the UDC Class driver when it's about ··· 1195 1135 * necessary to have it powered on. 1196 1136 * 1197 1137 * Returns zero on success, else negative errno. 1138 + * 1139 + * Caller should acquire connect_lock before invoking this function. 1198 1140 */ 1199 - static inline int usb_gadget_udc_start(struct usb_udc *udc) 1141 + static inline int usb_gadget_udc_start_locked(struct usb_udc *udc) 1142 + __must_hold(&udc->connect_lock) 1200 1143 { 1201 1144 int ret; 1202 1145 ··· 1216 1153 } 1217 1154 1218 1155 /** 1219 - * usb_gadget_udc_stop - tells usb device controller we don't need it anymore 1156 + * usb_gadget_udc_stop_locked - tells usb device controller we don't need it anymore 1220 1157 * @udc: The UDC to be stopped 1221 1158 * 1222 1159 * This call is issued by the UDC Class driver after calling ··· 1225 1162 * The details are implementation specific, but it can go as 1226 1163 * far as powering off UDC completely and disable its data 1227 1164 * line pullups. 1165 + * 1166 + * Caller should acquire connect lock before invoking this function. 1228 1167 */ 1229 - static inline void usb_gadget_udc_stop(struct usb_udc *udc) 1168 + static inline void usb_gadget_udc_stop_locked(struct usb_udc *udc) 1169 + __must_hold(&udc->connect_lock) 1230 1170 { 1231 1171 if (!udc->started) { 1232 1172 dev_err(&udc->dev, "UDC had already stopped\n"); ··· 1388 1322 1389 1323 udc->gadget = gadget; 1390 1324 gadget->udc = udc; 1325 + mutex_init(&udc->connect_lock); 1391 1326 1392 1327 udc->started = false; 1393 1328 1394 1329 mutex_lock(&udc_lock); 1395 1330 list_add_tail(&udc->list, &udc_list); 1396 1331 mutex_unlock(&udc_lock); 1332 + INIT_WORK(&udc->vbus_work, vbus_event_work); 1397 1333 1398 1334 ret = device_add(&udc->dev); 1399 1335 if (ret) ··· 1527 1459 flush_work(&gadget->work); 1528 1460 device_del(&gadget->dev); 1529 1461 ida_free(&gadget_id_numbers, gadget->id_number); 1462 + cancel_work_sync(&udc->vbus_work); 1530 1463 device_unregister(&udc->dev); 1531 1464 } 1532 1465 EXPORT_SYMBOL_GPL(usb_del_gadget); ··· 1592 1523 if (ret) 1593 1524 goto err_bind; 1594 1525 1595 - ret = usb_gadget_udc_start(udc); 1596 - if (ret) 1526 + mutex_lock(&udc->connect_lock); 1527 + ret = usb_gadget_udc_start_locked(udc); 1528 + if (ret) { 1529 + mutex_unlock(&udc->connect_lock); 1597 1530 goto err_start; 1531 + } 1598 1532 usb_gadget_enable_async_callbacks(udc); 1599 - usb_udc_connect_control(udc); 1533 + udc->allow_connect = true; 1534 + usb_udc_connect_control_locked(udc); 1535 + mutex_unlock(&udc->connect_lock); 1600 1536 1601 1537 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); 1602 1538 return 0; ··· 1632 1558 1633 1559 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); 1634 1560 1635 - usb_gadget_disconnect(gadget); 1561 + udc->allow_connect = false; 1562 + cancel_work_sync(&udc->vbus_work); 1563 + mutex_lock(&udc->connect_lock); 1564 + usb_gadget_disconnect_locked(gadget); 1636 1565 usb_gadget_disable_async_callbacks(udc); 1637 1566 if (gadget->irq) 1638 1567 synchronize_irq(gadget->irq); 1639 1568 udc->driver->unbind(gadget); 1640 - usb_gadget_udc_stop(udc); 1569 + usb_gadget_udc_stop_locked(udc); 1570 + mutex_unlock(&udc->connect_lock); 1641 1571 1642 1572 mutex_lock(&udc_lock); 1643 1573 driver->is_bound = false; ··· 1727 1649 } 1728 1650 1729 1651 if (sysfs_streq(buf, "connect")) { 1730 - usb_gadget_udc_start(udc); 1731 - usb_gadget_connect(udc->gadget); 1652 + mutex_lock(&udc->connect_lock); 1653 + usb_gadget_udc_start_locked(udc); 1654 + usb_gadget_connect_locked(udc->gadget); 1655 + mutex_unlock(&udc->connect_lock); 1732 1656 } else if (sysfs_streq(buf, "disconnect")) { 1733 - usb_gadget_disconnect(udc->gadget); 1734 - usb_gadget_udc_stop(udc); 1657 + mutex_lock(&udc->connect_lock); 1658 + usb_gadget_disconnect_locked(udc->gadget); 1659 + usb_gadget_udc_stop_locked(udc); 1660 + mutex_unlock(&udc->connect_lock); 1735 1661 } else { 1736 1662 dev_err(dev, "unsupported command '%s'\n", buf); 1737 1663 ret = -EINVAL;
+2 -2
drivers/usb/gadget/udc/renesas_usb3.c
··· 2877 2877 struct rzv2m_usb3drd *ddata = dev_get_drvdata(pdev->dev.parent); 2878 2878 2879 2879 usb3->drd_reg = ddata->reg; 2880 - ret = devm_request_irq(ddata->dev, ddata->drd_irq, 2880 + ret = devm_request_irq(&pdev->dev, ddata->drd_irq, 2881 2881 renesas_usb3_otg_irq, 0, 2882 - dev_name(ddata->dev), usb3); 2882 + dev_name(&pdev->dev), usb3); 2883 2883 if (ret < 0) 2884 2884 return ret; 2885 2885 }
+16
drivers/usb/serial/option.c
··· 248 248 #define QUECTEL_VENDOR_ID 0x2c7c 249 249 /* These Quectel products use Quectel's vendor ID */ 250 250 #define QUECTEL_PRODUCT_EC21 0x0121 251 + #define QUECTEL_PRODUCT_EM061K_LTA 0x0123 252 + #define QUECTEL_PRODUCT_EM061K_LMS 0x0124 251 253 #define QUECTEL_PRODUCT_EC25 0x0125 252 254 #define QUECTEL_PRODUCT_EG91 0x0191 253 255 #define QUECTEL_PRODUCT_EG95 0x0195 ··· 268 266 #define QUECTEL_PRODUCT_RM520N 0x0801 269 267 #define QUECTEL_PRODUCT_EC200U 0x0901 270 268 #define QUECTEL_PRODUCT_EC200S_CN 0x6002 269 + #define QUECTEL_PRODUCT_EM061K_LWW 0x6008 270 + #define QUECTEL_PRODUCT_EM061K_LCN 0x6009 271 271 #define QUECTEL_PRODUCT_EC200T 0x6026 272 272 #define QUECTEL_PRODUCT_RM500K 0x7001 273 273 ··· 1193 1189 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0x00, 0x40) }, 1194 1190 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x30) }, 1195 1191 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x40) }, 1192 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0xff, 0x30) }, 1193 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0x00, 0x40) }, 1194 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0xff, 0x40) }, 1195 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0xff, 0x30) }, 1196 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0x00, 0x40) }, 1197 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0xff, 0x40) }, 1198 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0xff, 0x30) }, 1199 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0x00, 0x40) }, 1200 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0xff, 0x40) }, 1201 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0x30) }, 1202 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0x00, 0x40) }, 1203 + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0x40) }, 1196 1204 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff), 1197 1205 .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 }, 1198 1206 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) },
+1 -1
drivers/usb/typec/pd.c
··· 95 95 static ssize_t 96 96 fast_role_swap_current_show(struct device *dev, struct device_attribute *attr, char *buf) 97 97 { 98 - return sysfs_emit(buf, "%u\n", to_pdo(dev)->pdo >> PDO_FIXED_FRS_CURR_SHIFT) & 3; 98 + return sysfs_emit(buf, "%u\n", (to_pdo(dev)->pdo >> PDO_FIXED_FRS_CURR_SHIFT) & 3); 99 99 } 100 100 static DEVICE_ATTR_RO(fast_role_swap_current); 101 101
+7 -4
drivers/usb/typec/ucsi/ucsi.c
··· 132 132 if (ret) 133 133 return ret; 134 134 135 - if (cci & UCSI_CCI_BUSY) { 136 - ucsi->ops->async_write(ucsi, UCSI_CANCEL, NULL, 0); 137 - return -EBUSY; 138 - } 135 + if (cmd != UCSI_CANCEL && cci & UCSI_CCI_BUSY) 136 + return ucsi_exec_command(ucsi, UCSI_CANCEL); 139 137 140 138 if (!(cci & UCSI_CCI_COMMAND_COMPLETE)) 141 139 return -EIO; ··· 145 147 if (cmd == UCSI_GET_ERROR_STATUS) 146 148 return -EIO; 147 149 return ucsi_read_error(ucsi); 150 + } 151 + 152 + if (cmd == UCSI_CANCEL && cci & UCSI_CCI_CANCEL_COMPLETE) { 153 + ret = ucsi_acknowledge_command(ucsi); 154 + return ret ? ret : -EBUSY; 148 155 } 149 156 150 157 return UCSI_CCI_LENGTH(cci);
+2 -2
fs/afs/vl_probe.c
··· 115 115 } 116 116 } 117 117 118 - if (rxrpc_kernel_get_srtt(call->net->socket, call->rxcall, &rtt_us) && 119 - rtt_us < server->probe.rtt) { 118 + rxrpc_kernel_get_srtt(call->net->socket, call->rxcall, &rtt_us); 119 + if (rtt_us < server->probe.rtt) { 120 120 server->probe.rtt = rtt_us; 121 121 server->rtt = rtt_us; 122 122 alist->preferred = index;
+5 -2
fs/afs/write.c
··· 731 731 * (changing page->mapping to NULL), or even swizzled 732 732 * back from swapper_space to tmpfs file mapping 733 733 */ 734 + try_again: 734 735 if (wbc->sync_mode != WB_SYNC_NONE) { 735 736 ret = folio_lock_killable(folio); 736 737 if (ret < 0) { ··· 758 757 #ifdef CONFIG_AFS_FSCACHE 759 758 folio_wait_fscache(folio); 760 759 #endif 761 - } else { 762 - start += folio_size(folio); 760 + goto try_again; 763 761 } 762 + 763 + start += folio_size(folio); 764 764 if (wbc->sync_mode == WB_SYNC_NONE) { 765 765 if (skips >= 5 || need_resched()) { 766 766 *_next = start; 767 + folio_batch_release(&fbatch); 767 768 _leave(" = 0 [%llx]", *_next); 768 769 return 0; 769 770 }
+8 -2
fs/btrfs/disk-io.c
··· 996 996 { 997 997 struct btrfs_fs_info *fs_info = root->fs_info; 998 998 struct rb_node *tmp; 999 + int ret = 0; 999 1000 1000 1001 write_lock(&fs_info->global_root_lock); 1001 1002 tmp = rb_find_add(&root->rb_node, &fs_info->global_root_tree, global_root_cmp); 1002 1003 write_unlock(&fs_info->global_root_lock); 1003 - ASSERT(!tmp); 1004 1004 1005 - return tmp ? -EEXIST : 0; 1005 + if (tmp) { 1006 + ret = -EEXIST; 1007 + btrfs_warn(fs_info, "global root %llu %llu already exists", 1008 + root->root_key.objectid, root->root_key.offset); 1009 + } 1010 + return ret; 1006 1011 } 1007 1012 1008 1013 void btrfs_global_root_delete(struct btrfs_root *root) ··· 2847 2842 /* We can't trust the free space cache either */ 2848 2843 btrfs_set_opt(fs_info->mount_opt, CLEAR_CACHE); 2849 2844 2845 + btrfs_warn(fs_info, "try to load backup roots slot %d", i); 2850 2846 ret = read_backup_root(fs_info, i); 2851 2847 backup_index = ret; 2852 2848 if (ret < 0)
+13 -7
fs/btrfs/inode.c
··· 1864 1864 1865 1865 ret = btrfs_cross_ref_exist(root, btrfs_ino(inode), 1866 1866 key->offset - args->extent_offset, 1867 - args->disk_bytenr, false, path); 1867 + args->disk_bytenr, args->strict, path); 1868 1868 WARN_ON_ONCE(ret > 0 && is_freespace_inode); 1869 1869 if (ret != 0) 1870 1870 goto out; ··· 7264 7264 static int btrfs_get_blocks_direct_write(struct extent_map **map, 7265 7265 struct inode *inode, 7266 7266 struct btrfs_dio_data *dio_data, 7267 - u64 start, u64 len, 7267 + u64 start, u64 *lenp, 7268 7268 unsigned int iomap_flags) 7269 7269 { 7270 7270 const bool nowait = (iomap_flags & IOMAP_NOWAIT); ··· 7275 7275 struct btrfs_block_group *bg; 7276 7276 bool can_nocow = false; 7277 7277 bool space_reserved = false; 7278 + u64 len = *lenp; 7278 7279 u64 prev_len; 7279 7280 int ret = 0; 7280 7281 ··· 7346 7345 free_extent_map(em); 7347 7346 *map = NULL; 7348 7347 7349 - if (nowait) 7350 - return -EAGAIN; 7348 + if (nowait) { 7349 + ret = -EAGAIN; 7350 + goto out; 7351 + } 7351 7352 7352 7353 /* 7353 7354 * If we could not allocate data space before locking the file 7354 7355 * range and we can't do a NOCOW write, then we have to fail. 7355 7356 */ 7356 - if (!dio_data->data_space_reserved) 7357 - return -ENOSPC; 7357 + if (!dio_data->data_space_reserved) { 7358 + ret = -ENOSPC; 7359 + goto out; 7360 + } 7358 7361 7359 7362 /* 7360 7363 * We have to COW and we have already reserved data space before, ··· 7399 7394 btrfs_delalloc_release_extents(BTRFS_I(inode), len); 7400 7395 btrfs_delalloc_release_metadata(BTRFS_I(inode), len, true); 7401 7396 } 7397 + *lenp = len; 7402 7398 return ret; 7403 7399 } 7404 7400 ··· 7576 7570 7577 7571 if (write) { 7578 7572 ret = btrfs_get_blocks_direct_write(&em, inode, dio_data, 7579 - start, len, flags); 7573 + start, &len, flags); 7580 7574 if (ret < 0) 7581 7575 goto unlock_err; 7582 7576 unlock_extents = true;
+1 -1
fs/btrfs/scrub.c
··· 2266 2266 } 2267 2267 out: 2268 2268 ret2 = flush_scrub_stripes(sctx); 2269 - if (!ret2) 2269 + if (!ret) 2270 2270 ret = ret2; 2271 2271 if (sctx->raid56_data_stripes) { 2272 2272 for (int i = 0; i < nr_data_stripes(map); i++)
+7 -5
fs/btrfs/volumes.c
··· 5975 5975 stripe_nr = offset >> BTRFS_STRIPE_LEN_SHIFT; 5976 5976 5977 5977 /* stripe_offset is the offset of this block in its stripe */ 5978 - stripe_offset = offset - (stripe_nr << BTRFS_STRIPE_LEN_SHIFT); 5978 + stripe_offset = offset - ((u64)stripe_nr << BTRFS_STRIPE_LEN_SHIFT); 5979 5979 5980 5980 stripe_nr_end = round_up(offset + length, BTRFS_STRIPE_LEN) >> 5981 5981 BTRFS_STRIPE_LEN_SHIFT; 5982 5982 stripe_cnt = stripe_nr_end - stripe_nr; 5983 - stripe_end_offset = (stripe_nr_end << BTRFS_STRIPE_LEN_SHIFT) - 5983 + stripe_end_offset = ((u64)stripe_nr_end << BTRFS_STRIPE_LEN_SHIFT) - 5984 5984 (offset + length); 5985 5985 /* 5986 5986 * after this, stripe_nr is the number of stripes on this ··· 6023 6023 for (i = 0; i < *num_stripes; i++) { 6024 6024 stripes[i].physical = 6025 6025 map->stripes[stripe_index].physical + 6026 - stripe_offset + (stripe_nr << BTRFS_STRIPE_LEN_SHIFT); 6026 + stripe_offset + ((u64)stripe_nr << BTRFS_STRIPE_LEN_SHIFT); 6027 6027 stripes[i].dev = map->stripes[stripe_index].dev; 6028 6028 6029 6029 if (map->type & (BTRFS_BLOCK_GROUP_RAID0 | ··· 6196 6196 * not ensured to be power of 2. 6197 6197 */ 6198 6198 *full_stripe_start = 6199 - rounddown(*stripe_nr, nr_data_stripes(map)) << 6199 + (u64)rounddown(*stripe_nr, nr_data_stripes(map)) << 6200 6200 BTRFS_STRIPE_LEN_SHIFT; 6201 6201 6202 + ASSERT(*full_stripe_start + full_stripe_len > offset); 6203 + ASSERT(*full_stripe_start <= offset); 6202 6204 /* 6203 6205 * For writes to RAID56, allow to write a full stripe set, but 6204 6206 * no straddling of stripe sets. ··· 6223 6221 { 6224 6222 dst->dev = map->stripes[stripe_index].dev; 6225 6223 dst->physical = map->stripes[stripe_index].physical + 6226 - stripe_offset + (stripe_nr << BTRFS_STRIPE_LEN_SHIFT); 6224 + stripe_offset + ((u64)stripe_nr << BTRFS_STRIPE_LEN_SHIFT); 6227 6225 } 6228 6226 6229 6227 int __btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
+9 -1
fs/nilfs2/page.c
··· 370 370 struct folio *folio = fbatch.folios[i]; 371 371 372 372 folio_lock(folio); 373 - nilfs_clear_dirty_page(&folio->page, silent); 373 + 374 + /* 375 + * This folio may have been removed from the address 376 + * space by truncation or invalidation when the lock 377 + * was acquired. Skip processing in that case. 378 + */ 379 + if (likely(folio->mapping == mapping)) 380 + nilfs_clear_dirty_page(&folio->page, silent); 381 + 374 382 folio_unlock(folio); 375 383 } 376 384 folio_batch_release(&fbatch);
+6
fs/nilfs2/segbuf.c
··· 101 101 if (unlikely(!bh)) 102 102 return -ENOMEM; 103 103 104 + lock_buffer(bh); 105 + if (!buffer_uptodate(bh)) { 106 + memset(bh->b_data, 0, bh->b_size); 107 + set_buffer_uptodate(bh); 108 + } 109 + unlock_buffer(bh); 104 110 nilfs_segbuf_add_segsum_buffer(segbuf, bh); 105 111 return 0; 106 112 }
+7
fs/nilfs2/segment.c
··· 981 981 unsigned int isz, srsz; 982 982 983 983 bh_sr = NILFS_LAST_SEGBUF(&sci->sc_segbufs)->sb_super_root; 984 + 985 + lock_buffer(bh_sr); 984 986 raw_sr = (struct nilfs_super_root *)bh_sr->b_data; 985 987 isz = nilfs->ns_inode_size; 986 988 srsz = NILFS_SR_BYTES(isz); 987 989 990 + raw_sr->sr_sum = 0; /* Ensure initialization within this update */ 988 991 raw_sr->sr_bytes = cpu_to_le16(srsz); 989 992 raw_sr->sr_nongc_ctime 990 993 = cpu_to_le64(nilfs_doing_gc() ? ··· 1001 998 nilfs_write_inode_common(nilfs->ns_sufile, (void *)raw_sr + 1002 999 NILFS_SR_SUFILE_OFFSET(isz), 1); 1003 1000 memset((void *)raw_sr + srsz, 0, nilfs->ns_blocksize - srsz); 1001 + set_buffer_uptodate(bh_sr); 1002 + unlock_buffer(bh_sr); 1004 1003 } 1005 1004 1006 1005 static void nilfs_redirty_inodes(struct list_head *head) ··· 1785 1780 list_for_each_entry(segbuf, logs, sb_list) { 1786 1781 list_for_each_entry(bh, &segbuf->sb_segsum_buffers, 1787 1782 b_assoc_buffers) { 1783 + clear_buffer_uptodate(bh); 1788 1784 if (bh->b_page != bd_page) { 1789 1785 if (bd_page) 1790 1786 end_page_writeback(bd_page); ··· 1797 1791 b_assoc_buffers) { 1798 1792 clear_buffer_async_write(bh); 1799 1793 if (bh == segbuf->sb_super_root) { 1794 + clear_buffer_uptodate(bh); 1800 1795 if (bh->b_page != bd_page) { 1801 1796 end_page_writeback(bd_page); 1802 1797 bd_page = bh->b_page;
+23 -2
fs/nilfs2/super.c
··· 372 372 goto out; 373 373 } 374 374 nsbp = (void *)nsbh->b_data + offset; 375 - memset(nsbp, 0, nilfs->ns_blocksize); 375 + 376 + lock_buffer(nsbh); 377 + if (sb2i >= 0) { 378 + /* 379 + * The position of the second superblock only changes by 4KiB, 380 + * which is larger than the maximum superblock data size 381 + * (= 1KiB), so there is no need to use memmove() to allow 382 + * overlap between source and destination. 383 + */ 384 + memcpy(nsbp, nilfs->ns_sbp[sb2i], nilfs->ns_sbsize); 385 + 386 + /* 387 + * Zero fill after copy to avoid overwriting in case of move 388 + * within the same block. 389 + */ 390 + memset(nsbh->b_data, 0, offset); 391 + memset((void *)nsbp + nilfs->ns_sbsize, 0, 392 + nsbh->b_size - offset - nilfs->ns_sbsize); 393 + } else { 394 + memset(nsbh->b_data, 0, nsbh->b_size); 395 + } 396 + set_buffer_uptodate(nsbh); 397 + unlock_buffer(nsbh); 376 398 377 399 if (sb2i >= 0) { 378 - memcpy(nsbp, nilfs->ns_sbp[sb2i], nilfs->ns_sbsize); 379 400 brelse(nilfs->ns_sbh[sb2i]); 380 401 nilfs->ns_sbh[sb2i] = nsbh; 381 402 nilfs->ns_sbp[sb2i] = nsbp;
+20 -13
fs/smb/server/server.c
··· 185 185 goto send; 186 186 } 187 187 188 - if (conn->ops->check_user_session) { 189 - rc = conn->ops->check_user_session(work); 190 - if (rc < 0) { 191 - command = conn->ops->get_cmd_val(work); 192 - conn->ops->set_rsp_status(work, 193 - STATUS_USER_SESSION_DELETED); 194 - goto send; 195 - } else if (rc > 0) { 196 - rc = conn->ops->get_ksmbd_tcon(work); 188 + do { 189 + if (conn->ops->check_user_session) { 190 + rc = conn->ops->check_user_session(work); 197 191 if (rc < 0) { 198 - conn->ops->set_rsp_status(work, 199 - STATUS_NETWORK_NAME_DELETED); 192 + if (rc == -EINVAL) 193 + conn->ops->set_rsp_status(work, 194 + STATUS_INVALID_PARAMETER); 195 + else 196 + conn->ops->set_rsp_status(work, 197 + STATUS_USER_SESSION_DELETED); 200 198 goto send; 199 + } else if (rc > 0) { 200 + rc = conn->ops->get_ksmbd_tcon(work); 201 + if (rc < 0) { 202 + if (rc == -EINVAL) 203 + conn->ops->set_rsp_status(work, 204 + STATUS_INVALID_PARAMETER); 205 + else 206 + conn->ops->set_rsp_status(work, 207 + STATUS_NETWORK_NAME_DELETED); 208 + goto send; 209 + } 201 210 } 202 211 } 203 - } 204 212 205 - do { 206 213 rc = __process_request(work, conn, &command); 207 214 if (rc == SERVER_HANDLER_ABORT) 208 215 break;
+20 -13
fs/smb/server/smb2misc.c
··· 351 351 int command; 352 352 __u32 clc_len; /* calculated length */ 353 353 __u32 len = get_rfc1002_len(work->request_buf); 354 + __u32 req_struct_size, next_cmd = le32_to_cpu(hdr->NextCommand); 354 355 355 - if (le32_to_cpu(hdr->NextCommand) > 0) 356 - len = le32_to_cpu(hdr->NextCommand); 356 + if ((u64)work->next_smb2_rcv_hdr_off + next_cmd > len) { 357 + pr_err("next command(%u) offset exceeds smb msg size\n", 358 + next_cmd); 359 + return 1; 360 + } 361 + 362 + if (next_cmd > 0) 363 + len = next_cmd; 357 364 else if (work->next_smb2_rcv_hdr_off) 358 365 len -= work->next_smb2_rcv_hdr_off; 359 366 ··· 380 373 } 381 374 382 375 if (smb2_req_struct_sizes[command] != pdu->StructureSize2) { 383 - if (command != SMB2_OPLOCK_BREAK_HE && 384 - (hdr->Status == 0 || pdu->StructureSize2 != SMB2_ERROR_STRUCTURE_SIZE2_LE)) { 385 - /* error packets have 9 byte structure size */ 386 - ksmbd_debug(SMB, 387 - "Illegal request size %u for command %d\n", 388 - le16_to_cpu(pdu->StructureSize2), command); 389 - return 1; 390 - } else if (command == SMB2_OPLOCK_BREAK_HE && 391 - hdr->Status == 0 && 392 - le16_to_cpu(pdu->StructureSize2) != OP_BREAK_STRUCT_SIZE_20 && 393 - le16_to_cpu(pdu->StructureSize2) != OP_BREAK_STRUCT_SIZE_21) { 376 + if (command == SMB2_OPLOCK_BREAK_HE && 377 + le16_to_cpu(pdu->StructureSize2) != OP_BREAK_STRUCT_SIZE_20 && 378 + le16_to_cpu(pdu->StructureSize2) != OP_BREAK_STRUCT_SIZE_21) { 394 379 /* special case for SMB2.1 lease break message */ 395 380 ksmbd_debug(SMB, 396 381 "Illegal request size %d for oplock break\n", ··· 390 391 return 1; 391 392 } 392 393 } 394 + 395 + req_struct_size = le16_to_cpu(pdu->StructureSize2) + 396 + __SMB2_HEADER_STRUCTURE_SIZE; 397 + if (command == SMB2_LOCK_HE) 398 + req_struct_size -= sizeof(struct smb2_lock_element); 399 + 400 + if (req_struct_size > len + 1) 401 + return 1; 393 402 394 403 if (smb2_calc_size(hdr, &clc_len)) 395 404 return 1;
+50 -20
fs/smb/server/smb2pdu.c
··· 91 91 unsigned int cmd = le16_to_cpu(req_hdr->Command); 92 92 int tree_id; 93 93 94 - work->tcon = NULL; 95 94 if (cmd == SMB2_TREE_CONNECT_HE || 96 95 cmd == SMB2_CANCEL_HE || 97 96 cmd == SMB2_LOGOFF_HE) { ··· 104 105 } 105 106 106 107 tree_id = le32_to_cpu(req_hdr->Id.SyncId.TreeId); 108 + 109 + /* 110 + * If request is not the first in Compound request, 111 + * Just validate tree id in header with work->tcon->id. 112 + */ 113 + if (work->next_smb2_rcv_hdr_off) { 114 + if (!work->tcon) { 115 + pr_err("The first operation in the compound does not have tcon\n"); 116 + return -EINVAL; 117 + } 118 + if (work->tcon->id != tree_id) { 119 + pr_err("tree id(%u) is different with id(%u) in first operation\n", 120 + tree_id, work->tcon->id); 121 + return -EINVAL; 122 + } 123 + return 1; 124 + } 125 + 107 126 work->tcon = ksmbd_tree_conn_lookup(work->sess, tree_id); 108 127 if (!work->tcon) { 109 128 pr_err("Invalid tid %d\n", tree_id); 110 - return -EINVAL; 129 + return -ENOENT; 111 130 } 112 131 113 132 return 1; ··· 564 547 unsigned int cmd = conn->ops->get_cmd_val(work); 565 548 unsigned long long sess_id; 566 549 567 - work->sess = NULL; 568 550 /* 569 551 * SMB2_ECHO, SMB2_NEGOTIATE, SMB2_SESSION_SETUP command do not 570 552 * require a session id, so no need to validate user session's for ··· 574 558 return 0; 575 559 576 560 if (!ksmbd_conn_good(conn)) 577 - return -EINVAL; 561 + return -EIO; 578 562 579 563 sess_id = le64_to_cpu(req_hdr->SessionId); 564 + 565 + /* 566 + * If request is not the first in Compound request, 567 + * Just validate session id in header with work->sess->id. 568 + */ 569 + if (work->next_smb2_rcv_hdr_off) { 570 + if (!work->sess) { 571 + pr_err("The first operation in the compound does not have sess\n"); 572 + return -EINVAL; 573 + } 574 + if (work->sess->id != sess_id) { 575 + pr_err("session id(%llu) is different with the first operation(%lld)\n", 576 + sess_id, work->sess->id); 577 + return -EINVAL; 578 + } 579 + return 1; 580 + } 581 + 580 582 /* Check for validity of user session */ 581 583 work->sess = ksmbd_session_lookup_all(conn, sess_id); 582 584 if (work->sess) 583 585 return 1; 584 586 ksmbd_debug(SMB, "Invalid user session, Uid %llu\n", sess_id); 585 - return -EINVAL; 587 + return -ENOENT; 586 588 } 587 589 588 590 static void destroy_previous_session(struct ksmbd_conn *conn, ··· 2283 2249 /* delete the EA only when it exits */ 2284 2250 if (rc > 0) { 2285 2251 rc = ksmbd_vfs_remove_xattr(idmap, 2286 - path->dentry, 2252 + path, 2287 2253 attr_name); 2288 2254 2289 2255 if (rc < 0) { ··· 2297 2263 /* if the EA doesn't exist, just do nothing. */ 2298 2264 rc = 0; 2299 2265 } else { 2300 - rc = ksmbd_vfs_setxattr(idmap, 2301 - path->dentry, attr_name, value, 2266 + rc = ksmbd_vfs_setxattr(idmap, path, attr_name, value, 2302 2267 le16_to_cpu(eabuf->EaValueLength), 0); 2303 2268 if (rc < 0) { 2304 2269 ksmbd_debug(SMB, ··· 2354 2321 return -EBADF; 2355 2322 } 2356 2323 2357 - rc = ksmbd_vfs_setxattr(idmap, path->dentry, 2358 - xattr_stream_name, NULL, 0, 0); 2324 + rc = ksmbd_vfs_setxattr(idmap, path, xattr_stream_name, NULL, 0, 0); 2359 2325 if (rc < 0) 2360 2326 pr_err("Failed to store XATTR stream name :%d\n", rc); 2361 2327 return 0; ··· 2382 2350 if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) && 2383 2351 !strncmp(&name[XATTR_USER_PREFIX_LEN], STREAM_PREFIX, 2384 2352 STREAM_PREFIX_LEN)) { 2385 - err = ksmbd_vfs_remove_xattr(idmap, path->dentry, 2353 + err = ksmbd_vfs_remove_xattr(idmap, path, 2386 2354 name); 2387 2355 if (err) 2388 2356 ksmbd_debug(SMB, "remove xattr failed : %s\n", ··· 2429 2397 da.flags = XATTR_DOSINFO_ATTRIB | XATTR_DOSINFO_CREATE_TIME | 2430 2398 XATTR_DOSINFO_ITIME; 2431 2399 2432 - rc = ksmbd_vfs_set_dos_attrib_xattr(mnt_idmap(path->mnt), 2433 - path->dentry, &da); 2400 + rc = ksmbd_vfs_set_dos_attrib_xattr(mnt_idmap(path->mnt), path, &da); 2434 2401 if (rc) 2435 2402 ksmbd_debug(SMB, "failed to store file attribute into xattr\n"); 2436 2403 } ··· 3003 2972 struct inode *inode = d_inode(path.dentry); 3004 2973 3005 2974 posix_acl_rc = ksmbd_vfs_inherit_posix_acl(idmap, 3006 - path.dentry, 2975 + &path, 3007 2976 d_inode(path.dentry->d_parent)); 3008 2977 if (posix_acl_rc) 3009 2978 ksmbd_debug(SMB, "inherit posix acl failed : %d\n", posix_acl_rc); ··· 3019 2988 if (rc) { 3020 2989 if (posix_acl_rc) 3021 2990 ksmbd_vfs_set_init_posix_acl(idmap, 3022 - path.dentry); 2991 + &path); 3023 2992 3024 2993 if (test_share_config_flag(work->tcon->share_conf, 3025 2994 KSMBD_SHARE_FLAG_ACL_XATTR)) { ··· 3059 3028 3060 3029 rc = ksmbd_vfs_set_sd_xattr(conn, 3061 3030 idmap, 3062 - path.dentry, 3031 + &path, 3063 3032 pntsd, 3064 3033 pntsd_size); 3065 3034 kfree(pntsd); ··· 5495 5464 goto out; 5496 5465 5497 5466 rc = ksmbd_vfs_setxattr(file_mnt_idmap(fp->filp), 5498 - fp->filp->f_path.dentry, 5467 + &fp->filp->f_path, 5499 5468 xattr_stream_name, 5500 5469 NULL, 0, 0); 5501 5470 if (rc < 0) { ··· 5660 5629 da.flags = XATTR_DOSINFO_ATTRIB | XATTR_DOSINFO_CREATE_TIME | 5661 5630 XATTR_DOSINFO_ITIME; 5662 5631 5663 - rc = ksmbd_vfs_set_dos_attrib_xattr(idmap, 5664 - filp->f_path.dentry, &da); 5632 + rc = ksmbd_vfs_set_dos_attrib_xattr(idmap, &filp->f_path, &da); 5665 5633 if (rc) 5666 5634 ksmbd_debug(SMB, 5667 5635 "failed to restore file attribute in EA\n"); ··· 7515 7485 7516 7486 da.attr = le32_to_cpu(fp->f_ci->m_fattr); 7517 7487 ret = ksmbd_vfs_set_dos_attrib_xattr(idmap, 7518 - fp->filp->f_path.dentry, &da); 7488 + &fp->filp->f_path, &da); 7519 7489 if (ret) 7520 7490 fp->f_ci->m_fattr = old_fattr; 7521 7491 }
+4 -6
fs/smb/server/smbacl.c
··· 1162 1162 pntsd_size += sizeof(struct smb_acl) + nt_size; 1163 1163 } 1164 1164 1165 - ksmbd_vfs_set_sd_xattr(conn, idmap, 1166 - path->dentry, pntsd, pntsd_size); 1165 + ksmbd_vfs_set_sd_xattr(conn, idmap, path, pntsd, pntsd_size); 1167 1166 kfree(pntsd); 1168 1167 } 1169 1168 ··· 1382 1383 newattrs.ia_valid |= ATTR_MODE; 1383 1384 newattrs.ia_mode = (inode->i_mode & ~0777) | (fattr.cf_mode & 0777); 1384 1385 1385 - ksmbd_vfs_remove_acl_xattrs(idmap, path->dentry); 1386 + ksmbd_vfs_remove_acl_xattrs(idmap, path); 1386 1387 /* Update posix acls */ 1387 1388 if (IS_ENABLED(CONFIG_FS_POSIX_ACL) && fattr.cf_dacls) { 1388 1389 rc = set_posix_acl(idmap, path->dentry, ··· 1413 1414 1414 1415 if (test_share_config_flag(tcon->share_conf, KSMBD_SHARE_FLAG_ACL_XATTR)) { 1415 1416 /* Update WinACL in xattr */ 1416 - ksmbd_vfs_remove_sd_xattrs(idmap, path->dentry); 1417 - ksmbd_vfs_set_sd_xattr(conn, idmap, 1418 - path->dentry, pntsd, ntsd_len); 1417 + ksmbd_vfs_remove_sd_xattrs(idmap, path); 1418 + ksmbd_vfs_set_sd_xattr(conn, idmap, path, pntsd, ntsd_len); 1419 1419 } 1420 1420 1421 1421 out:
+93 -24
fs/smb/server/vfs.c
··· 170 170 return err; 171 171 } 172 172 173 + err = mnt_want_write(path.mnt); 174 + if (err) 175 + goto out_err; 176 + 173 177 mode |= S_IFREG; 174 178 err = vfs_create(mnt_idmap(path.mnt), d_inode(path.dentry), 175 179 dentry, mode, true); ··· 183 179 } else { 184 180 pr_err("File(%s): creation failed (err:%d)\n", name, err); 185 181 } 182 + mnt_drop_write(path.mnt); 183 + 184 + out_err: 186 185 done_path_create(&path, dentry); 187 186 return err; 188 187 } ··· 216 209 return err; 217 210 } 218 211 212 + err = mnt_want_write(path.mnt); 213 + if (err) 214 + goto out_err2; 215 + 219 216 idmap = mnt_idmap(path.mnt); 220 217 mode |= S_IFDIR; 221 218 err = vfs_mkdir(idmap, d_inode(path.dentry), dentry, mode); 222 - if (err) { 223 - goto out; 224 - } else if (d_unhashed(dentry)) { 219 + if (!err && d_unhashed(dentry)) { 225 220 struct dentry *d; 226 221 227 222 d = lookup_one(idmap, dentry->d_name.name, dentry->d_parent, 228 223 dentry->d_name.len); 229 224 if (IS_ERR(d)) { 230 225 err = PTR_ERR(d); 231 - goto out; 226 + goto out_err1; 232 227 } 233 228 if (unlikely(d_is_negative(d))) { 234 229 dput(d); 235 230 err = -ENOENT; 236 - goto out; 231 + goto out_err1; 237 232 } 238 233 239 234 ksmbd_vfs_inherit_owner(work, d_inode(path.dentry), d_inode(d)); 240 235 dput(d); 241 236 } 242 - out: 237 + 238 + out_err1: 239 + mnt_drop_write(path.mnt); 240 + out_err2: 243 241 done_path_create(&path, dentry); 244 242 if (err) 245 243 pr_err("mkdir(%s): creation failed (err:%d)\n", name, err); ··· 455 443 memcpy(&stream_buf[*pos], buf, count); 456 444 457 445 err = ksmbd_vfs_setxattr(idmap, 458 - fp->filp->f_path.dentry, 446 + &fp->filp->f_path, 459 447 fp->stream.name, 460 448 (void *)stream_buf, 461 449 size, ··· 601 589 goto out_err; 602 590 } 603 591 592 + err = mnt_want_write(path->mnt); 593 + if (err) 594 + goto out_err; 595 + 604 596 idmap = mnt_idmap(path->mnt); 605 597 if (S_ISDIR(d_inode(path->dentry)->i_mode)) { 606 598 err = vfs_rmdir(idmap, d_inode(parent), path->dentry); ··· 615 599 if (err) 616 600 ksmbd_debug(VFS, "unlink failed, err %d\n", err); 617 601 } 602 + mnt_drop_write(path->mnt); 618 603 619 604 out_err: 620 605 ksmbd_revert_fsids(work); ··· 661 644 goto out3; 662 645 } 663 646 647 + err = mnt_want_write(newpath.mnt); 648 + if (err) 649 + goto out3; 650 + 664 651 err = vfs_link(oldpath.dentry, mnt_idmap(newpath.mnt), 665 652 d_inode(newpath.dentry), 666 653 dentry, NULL); 667 654 if (err) 668 655 ksmbd_debug(VFS, "vfs_link failed err %d\n", err); 656 + mnt_drop_write(newpath.mnt); 669 657 670 658 out3: 671 659 done_path_create(&newpath, dentry); ··· 715 693 err = -EXDEV; 716 694 goto out2; 717 695 } 696 + 697 + err = mnt_want_write(old_path->mnt); 698 + if (err) 699 + goto out2; 718 700 719 701 trap = lock_rename_child(old_child, new_path.dentry); 720 702 ··· 783 757 out3: 784 758 dput(old_parent); 785 759 unlock_rename(old_parent, new_path.dentry); 760 + mnt_drop_write(old_path->mnt); 786 761 out2: 787 762 path_put(&new_path); 788 763 ··· 924 897 * Return: 0 on success, otherwise error 925 898 */ 926 899 int ksmbd_vfs_setxattr(struct mnt_idmap *idmap, 927 - struct dentry *dentry, const char *attr_name, 900 + const struct path *path, const char *attr_name, 928 901 void *attr_value, size_t attr_size, int flags) 929 902 { 930 903 int err; 931 904 905 + err = mnt_want_write(path->mnt); 906 + if (err) 907 + return err; 908 + 932 909 err = vfs_setxattr(idmap, 933 - dentry, 910 + path->dentry, 934 911 attr_name, 935 912 attr_value, 936 913 attr_size, 937 914 flags); 938 915 if (err) 939 916 ksmbd_debug(VFS, "setxattr failed, err %d\n", err); 917 + mnt_drop_write(path->mnt); 940 918 return err; 941 919 } 942 920 ··· 1045 1013 } 1046 1014 1047 1015 int ksmbd_vfs_remove_xattr(struct mnt_idmap *idmap, 1048 - struct dentry *dentry, char *attr_name) 1016 + const struct path *path, char *attr_name) 1049 1017 { 1050 - return vfs_removexattr(idmap, dentry, attr_name); 1018 + int err; 1019 + 1020 + err = mnt_want_write(path->mnt); 1021 + if (err) 1022 + return err; 1023 + 1024 + err = vfs_removexattr(idmap, path->dentry, attr_name); 1025 + mnt_drop_write(path->mnt); 1026 + 1027 + return err; 1051 1028 } 1052 1029 1053 1030 int ksmbd_vfs_unlink(struct file *filp) ··· 1064 1023 int err = 0; 1065 1024 struct dentry *dir, *dentry = filp->f_path.dentry; 1066 1025 struct mnt_idmap *idmap = file_mnt_idmap(filp); 1026 + 1027 + err = mnt_want_write(filp->f_path.mnt); 1028 + if (err) 1029 + return err; 1067 1030 1068 1031 dir = dget_parent(dentry); 1069 1032 err = ksmbd_vfs_lock_parent(dir, dentry); ··· 1086 1041 ksmbd_debug(VFS, "failed to delete, err %d\n", err); 1087 1042 out: 1088 1043 dput(dir); 1044 + mnt_drop_write(filp->f_path.mnt); 1089 1045 1090 1046 return err; 1091 1047 } ··· 1290 1244 } 1291 1245 1292 1246 int ksmbd_vfs_remove_acl_xattrs(struct mnt_idmap *idmap, 1293 - struct dentry *dentry) 1247 + const struct path *path) 1294 1248 { 1295 1249 char *name, *xattr_list = NULL; 1296 1250 ssize_t xattr_list_len; 1297 1251 int err = 0; 1298 1252 1299 - xattr_list_len = ksmbd_vfs_listxattr(dentry, &xattr_list); 1253 + xattr_list_len = ksmbd_vfs_listxattr(path->dentry, &xattr_list); 1300 1254 if (xattr_list_len < 0) { 1301 1255 goto out; 1302 1256 } else if (!xattr_list_len) { 1303 1257 ksmbd_debug(SMB, "empty xattr in the file\n"); 1304 1258 goto out; 1305 1259 } 1260 + 1261 + err = mnt_want_write(path->mnt); 1262 + if (err) 1263 + goto out; 1306 1264 1307 1265 for (name = xattr_list; name - xattr_list < xattr_list_len; 1308 1266 name += strlen(name) + 1) { ··· 1316 1266 sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1) || 1317 1267 !strncmp(name, XATTR_NAME_POSIX_ACL_DEFAULT, 1318 1268 sizeof(XATTR_NAME_POSIX_ACL_DEFAULT) - 1)) { 1319 - err = vfs_remove_acl(idmap, dentry, name); 1269 + err = vfs_remove_acl(idmap, path->dentry, name); 1320 1270 if (err) 1321 1271 ksmbd_debug(SMB, 1322 1272 "remove acl xattr failed : %s\n", name); 1323 1273 } 1324 1274 } 1275 + mnt_drop_write(path->mnt); 1276 + 1325 1277 out: 1326 1278 kvfree(xattr_list); 1327 1279 return err; 1328 1280 } 1329 1281 1330 - int ksmbd_vfs_remove_sd_xattrs(struct mnt_idmap *idmap, 1331 - struct dentry *dentry) 1282 + int ksmbd_vfs_remove_sd_xattrs(struct mnt_idmap *idmap, const struct path *path) 1332 1283 { 1333 1284 char *name, *xattr_list = NULL; 1334 1285 ssize_t xattr_list_len; 1335 1286 int err = 0; 1336 1287 1337 - xattr_list_len = ksmbd_vfs_listxattr(dentry, &xattr_list); 1288 + xattr_list_len = ksmbd_vfs_listxattr(path->dentry, &xattr_list); 1338 1289 if (xattr_list_len < 0) { 1339 1290 goto out; 1340 1291 } else if (!xattr_list_len) { ··· 1348 1297 ksmbd_debug(SMB, "%s, len %zd\n", name, strlen(name)); 1349 1298 1350 1299 if (!strncmp(name, XATTR_NAME_SD, XATTR_NAME_SD_LEN)) { 1351 - err = ksmbd_vfs_remove_xattr(idmap, dentry, name); 1300 + err = ksmbd_vfs_remove_xattr(idmap, path, name); 1352 1301 if (err) 1353 1302 ksmbd_debug(SMB, "remove xattr failed : %s\n", name); 1354 1303 } ··· 1425 1374 1426 1375 int ksmbd_vfs_set_sd_xattr(struct ksmbd_conn *conn, 1427 1376 struct mnt_idmap *idmap, 1428 - struct dentry *dentry, 1377 + const struct path *path, 1429 1378 struct smb_ntsd *pntsd, int len) 1430 1379 { 1431 1380 int rc; 1432 1381 struct ndr sd_ndr = {0}, acl_ndr = {0}; 1433 1382 struct xattr_ntacl acl = {0}; 1434 1383 struct xattr_smb_acl *smb_acl, *def_smb_acl = NULL; 1384 + struct dentry *dentry = path->dentry; 1435 1385 struct inode *inode = d_inode(dentry); 1436 1386 1437 1387 acl.version = 4; ··· 1484 1432 goto out; 1485 1433 } 1486 1434 1487 - rc = ksmbd_vfs_setxattr(idmap, dentry, 1435 + rc = ksmbd_vfs_setxattr(idmap, path, 1488 1436 XATTR_NAME_SD, sd_ndr.data, 1489 1437 sd_ndr.offset, 0); 1490 1438 if (rc < 0) ··· 1574 1522 } 1575 1523 1576 1524 int ksmbd_vfs_set_dos_attrib_xattr(struct mnt_idmap *idmap, 1577 - struct dentry *dentry, 1525 + const struct path *path, 1578 1526 struct xattr_dos_attrib *da) 1579 1527 { 1580 1528 struct ndr n; ··· 1584 1532 if (err) 1585 1533 return err; 1586 1534 1587 - err = ksmbd_vfs_setxattr(idmap, dentry, XATTR_NAME_DOS_ATTRIBUTE, 1535 + err = ksmbd_vfs_setxattr(idmap, path, XATTR_NAME_DOS_ATTRIBUTE, 1588 1536 (void *)n.data, n.offset, 0); 1589 1537 if (err) 1590 1538 ksmbd_debug(SMB, "failed to store dos attribute in xattr\n"); ··· 1821 1769 } 1822 1770 1823 1771 int ksmbd_vfs_set_init_posix_acl(struct mnt_idmap *idmap, 1824 - struct dentry *dentry) 1772 + struct path *path) 1825 1773 { 1826 1774 struct posix_acl_state acl_state; 1827 1775 struct posix_acl *acls; 1776 + struct dentry *dentry = path->dentry; 1828 1777 struct inode *inode = d_inode(dentry); 1829 1778 int rc; 1830 1779 ··· 1855 1802 return -ENOMEM; 1856 1803 } 1857 1804 posix_state_to_acl(&acl_state, acls->a_entries); 1805 + 1806 + rc = mnt_want_write(path->mnt); 1807 + if (rc) 1808 + goto out_err; 1809 + 1858 1810 rc = set_posix_acl(idmap, dentry, ACL_TYPE_ACCESS, acls); 1859 1811 if (rc < 0) 1860 1812 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_ACCESS) failed, rc : %d\n", ··· 1871 1813 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_DEFAULT) failed, rc : %d\n", 1872 1814 rc); 1873 1815 } 1816 + mnt_drop_write(path->mnt); 1817 + 1818 + out_err: 1874 1819 free_acl_state(&acl_state); 1875 1820 posix_acl_release(acls); 1876 1821 return rc; 1877 1822 } 1878 1823 1879 1824 int ksmbd_vfs_inherit_posix_acl(struct mnt_idmap *idmap, 1880 - struct dentry *dentry, struct inode *parent_inode) 1825 + struct path *path, struct inode *parent_inode) 1881 1826 { 1882 1827 struct posix_acl *acls; 1883 1828 struct posix_acl_entry *pace; 1829 + struct dentry *dentry = path->dentry; 1884 1830 struct inode *inode = d_inode(dentry); 1885 1831 int rc, i; 1886 1832 ··· 1903 1841 } 1904 1842 } 1905 1843 1844 + rc = mnt_want_write(path->mnt); 1845 + if (rc) 1846 + goto out_err; 1847 + 1906 1848 rc = set_posix_acl(idmap, dentry, ACL_TYPE_ACCESS, acls); 1907 1849 if (rc < 0) 1908 1850 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_ACCESS) failed, rc : %d\n", ··· 1918 1852 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_DEFAULT) failed, rc : %d\n", 1919 1853 rc); 1920 1854 } 1855 + mnt_drop_write(path->mnt); 1856 + 1857 + out_err: 1921 1858 posix_acl_release(acls); 1922 1859 return rc; 1923 1860 }
+8 -9
fs/smb/server/vfs.h
··· 108 108 struct dentry *dentry, char *attr_name, 109 109 int attr_name_len); 110 110 int ksmbd_vfs_setxattr(struct mnt_idmap *idmap, 111 - struct dentry *dentry, const char *attr_name, 111 + const struct path *path, const char *attr_name, 112 112 void *attr_value, size_t attr_size, int flags); 113 113 int ksmbd_vfs_xattr_stream_name(char *stream_name, char **xattr_stream_name, 114 114 size_t *xattr_stream_name_size, int s_type); 115 115 int ksmbd_vfs_remove_xattr(struct mnt_idmap *idmap, 116 - struct dentry *dentry, char *attr_name); 116 + const struct path *path, char *attr_name); 117 117 int ksmbd_vfs_kern_path_locked(struct ksmbd_work *work, char *name, 118 118 unsigned int flags, struct path *path, 119 119 bool caseless); ··· 139 139 int ksmbd_vfs_posix_lock_wait_timeout(struct file_lock *flock, long timeout); 140 140 void ksmbd_vfs_posix_lock_unblock(struct file_lock *flock); 141 141 int ksmbd_vfs_remove_acl_xattrs(struct mnt_idmap *idmap, 142 - struct dentry *dentry); 143 - int ksmbd_vfs_remove_sd_xattrs(struct mnt_idmap *idmap, 144 - struct dentry *dentry); 142 + const struct path *path); 143 + int ksmbd_vfs_remove_sd_xattrs(struct mnt_idmap *idmap, const struct path *path); 145 144 int ksmbd_vfs_set_sd_xattr(struct ksmbd_conn *conn, 146 145 struct mnt_idmap *idmap, 147 - struct dentry *dentry, 146 + const struct path *path, 148 147 struct smb_ntsd *pntsd, int len); 149 148 int ksmbd_vfs_get_sd_xattr(struct ksmbd_conn *conn, 150 149 struct mnt_idmap *idmap, 151 150 struct dentry *dentry, 152 151 struct smb_ntsd **pntsd); 153 152 int ksmbd_vfs_set_dos_attrib_xattr(struct mnt_idmap *idmap, 154 - struct dentry *dentry, 153 + const struct path *path, 155 154 struct xattr_dos_attrib *da); 156 155 int ksmbd_vfs_get_dos_attrib_xattr(struct mnt_idmap *idmap, 157 156 struct dentry *dentry, 158 157 struct xattr_dos_attrib *da); 159 158 int ksmbd_vfs_set_init_posix_acl(struct mnt_idmap *idmap, 160 - struct dentry *dentry); 159 + struct path *path); 161 160 int ksmbd_vfs_inherit_posix_acl(struct mnt_idmap *idmap, 162 - struct dentry *dentry, 161 + struct path *path, 163 162 struct inode *parent_inode); 164 163 #endif /* __KSMBD_VFS_H__ */
+1 -1
fs/smb/server/vfs_cache.c
··· 252 252 if (ksmbd_stream_fd(fp) && (ci->m_flags & S_DEL_ON_CLS_STREAM)) { 253 253 ci->m_flags &= ~S_DEL_ON_CLS_STREAM; 254 254 err = ksmbd_vfs_remove_xattr(file_mnt_idmap(filp), 255 - filp->f_path.dentry, 255 + &filp->f_path, 256 256 fp->stream.name); 257 257 if (err) 258 258 pr_err("remove xattr failed : %s\n",
+1 -1
fs/super.c
··· 54 54 * One thing we have to be careful of with a per-sb shrinker is that we don't 55 55 * drop the last active reference to the superblock from within the shrinker. 56 56 * If that happens we could trigger unregistering the shrinker from within the 57 - * shrinker path and that leads to deadlock on the shrinker_mutex. Hence we 57 + * shrinker path and that leads to deadlock on the shrinker_rwsem. Hence we 58 58 * take a passive reference to the superblock to avoid this from occurring. 59 59 */ 60 60 static unsigned long super_cache_scan(struct shrinker *shrink,
+1
include/acpi/acpixf.h
··· 761 761 acpi_event_status 762 762 *event_status)) 763 763 ACPI_HW_DEPENDENT_RETURN_UINT32(u32 acpi_dispatch_gpe(acpi_handle gpe_device, u32 gpe_number)) 764 + ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_hw_disable_all_gpes(void)) 764 765 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable_all_gpes(void)) 765 766 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_runtime_gpes(void)) 766 767 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_wakeup_gpes(void))
+1
include/linux/cpuhotplug.h
··· 200 200 201 201 /* Online section invoked on the hotplugged CPU from the hotplug thread */ 202 202 CPUHP_AP_ONLINE_IDLE, 203 + CPUHP_AP_HYPERV_ONLINE, 203 204 CPUHP_AP_KVM_ONLINE, 204 205 CPUHP_AP_SCHED_WAIT_EMPTY, 205 206 CPUHP_AP_SMPBOOT_THREADS,
+1 -1
include/linux/libata.h
··· 836 836 837 837 struct mutex scsi_scan_mutex; 838 838 struct delayed_work hotplug_task; 839 - struct work_struct scsi_rescan_task; 839 + struct delayed_work scsi_rescan_task; 840 840 841 841 unsigned int hsm_task_state; 842 842
+10
include/linux/notifier.h
··· 106 106 #define RAW_NOTIFIER_INIT(name) { \ 107 107 .head = NULL } 108 108 109 + #ifdef CONFIG_TREE_SRCU 110 + #define SRCU_NOTIFIER_INIT(name, pcpu) \ 111 + { \ 112 + .mutex = __MUTEX_INITIALIZER(name.mutex), \ 113 + .head = NULL, \ 114 + .srcuu = __SRCU_USAGE_INIT(name.srcuu), \ 115 + .srcu = __SRCU_STRUCT_INIT(name.srcu, name.srcuu, pcpu), \ 116 + } 117 + #else 109 118 #define SRCU_NOTIFIER_INIT(name, pcpu) \ 110 119 { \ 111 120 .mutex = __MUTEX_INITIALIZER(name.mutex), \ 112 121 .head = NULL, \ 113 122 .srcu = __SRCU_STRUCT_INIT(name.srcu, name.srcuu, pcpu), \ 114 123 } 124 + #endif 115 125 116 126 #define ATOMIC_NOTIFIER_HEAD(name) \ 117 127 struct atomic_notifier_head name = \
+2 -2
include/linux/regulator/pca9450.h
··· 196 196 197 197 /* PCA9450_REG_LDO3_VOLT bits */ 198 198 #define LDO3_EN_MASK 0xC0 199 - #define LDO3OUT_MASK 0x0F 199 + #define LDO3OUT_MASK 0x1F 200 200 201 201 /* PCA9450_REG_LDO4_VOLT bits */ 202 202 #define LDO4_EN_MASK 0xC0 203 - #define LDO4OUT_MASK 0x0F 203 + #define LDO4OUT_MASK 0x1F 204 204 205 205 /* PCA9450_REG_LDO5_VOLT bits */ 206 206 #define LDO5L_EN_MASK 0xC0
+8
include/net/dsa.h
··· 965 965 void (*port_disable)(struct dsa_switch *ds, int port); 966 966 967 967 /* 968 + * Compatibility between device trees defining multiple CPU ports and 969 + * drivers which are not OK to use by default the numerically smallest 970 + * CPU port of a switch for its local ports. This can return NULL, 971 + * meaning "don't know/don't care". 972 + */ 973 + struct dsa_port *(*preferred_default_local_cpu_port)(struct dsa_switch *ds); 974 + 975 + /* 968 976 * Port's MAC EEE settings 969 977 */ 970 978 int (*set_mac_eee)(struct dsa_switch *ds, int port,
+29 -2
include/net/netfilter/nf_tables.h
··· 472 472 int (*init)(const struct nft_set *set, 473 473 const struct nft_set_desc *desc, 474 474 const struct nlattr * const nla[]); 475 - void (*destroy)(const struct nft_set *set); 475 + void (*destroy)(const struct nft_ctx *ctx, 476 + const struct nft_set *set); 476 477 void (*gc_init)(const struct nft_set *set); 477 478 478 479 unsigned int elemsize; ··· 810 809 struct nft_expr *expr_array[]); 811 810 void nft_set_elem_destroy(const struct nft_set *set, void *elem, 812 811 bool destroy_expr); 812 + void nf_tables_set_elem_destroy(const struct nft_ctx *ctx, 813 + const struct nft_set *set, void *elem); 813 814 814 815 /** 815 816 * struct nft_set_gc_batch_head - nf_tables set garbage collection batch ··· 904 901 905 902 enum nft_trans_phase { 906 903 NFT_TRANS_PREPARE, 904 + NFT_TRANS_PREPARE_ERROR, 907 905 NFT_TRANS_ABORT, 908 906 NFT_TRANS_COMMIT, 909 907 NFT_TRANS_RELEASE ··· 1013 1009 return (void *)&rule->data[rule->dlen]; 1014 1010 } 1015 1011 1016 - void nf_tables_rule_release(const struct nft_ctx *ctx, struct nft_rule *rule); 1012 + void nft_rule_expr_activate(const struct nft_ctx *ctx, struct nft_rule *rule); 1013 + void nft_rule_expr_deactivate(const struct nft_ctx *ctx, struct nft_rule *rule, 1014 + enum nft_trans_phase phase); 1015 + void nf_tables_rule_destroy(const struct nft_ctx *ctx, struct nft_rule *rule); 1017 1016 1018 1017 static inline void nft_set_elem_update_expr(const struct nft_set_ext *ext, 1019 1018 struct nft_regs *regs, ··· 1111 1104 const struct nft_set_iter *iter, 1112 1105 struct nft_set_elem *elem); 1113 1106 int nft_set_catchall_validate(const struct nft_ctx *ctx, struct nft_set *set); 1107 + int nf_tables_bind_chain(const struct nft_ctx *ctx, struct nft_chain *chain); 1108 + void nf_tables_unbind_chain(const struct nft_ctx *ctx, struct nft_chain *chain); 1114 1109 1115 1110 enum nft_chain_types { 1116 1111 NFT_CHAIN_T_DEFAULT = 0, ··· 1149 1140 int nft_chain_validate_hooks(const struct nft_chain *chain, 1150 1141 unsigned int hook_flags); 1151 1142 1143 + static inline bool nft_chain_binding(const struct nft_chain *chain) 1144 + { 1145 + return chain->flags & NFT_CHAIN_BINDING; 1146 + } 1147 + 1152 1148 static inline bool nft_chain_is_bound(struct nft_chain *chain) 1153 1149 { 1154 1150 return (chain->flags & NFT_CHAIN_BINDING) && chain->bound; 1155 1151 } 1156 1152 1153 + int nft_chain_add(struct nft_table *table, struct nft_chain *chain); 1157 1154 void nft_chain_del(struct nft_chain *chain); 1158 1155 void nf_tables_chain_destroy(struct nft_ctx *ctx); 1159 1156 ··· 1573 1558 * struct nft_trans - nf_tables object update in transaction 1574 1559 * 1575 1560 * @list: used internally 1561 + * @binding_list: list of objects with possible bindings 1576 1562 * @msg_type: message type 1577 1563 * @put_net: ctx->net needs to be put 1578 1564 * @ctx: transaction context ··· 1581 1565 */ 1582 1566 struct nft_trans { 1583 1567 struct list_head list; 1568 + struct list_head binding_list; 1584 1569 int msg_type; 1585 1570 bool put_net; 1586 1571 struct nft_ctx ctx; ··· 1592 1575 struct nft_rule *rule; 1593 1576 struct nft_flow_rule *flow; 1594 1577 u32 rule_id; 1578 + bool bound; 1595 1579 }; 1596 1580 1597 1581 #define nft_trans_rule(trans) \ ··· 1601 1583 (((struct nft_trans_rule *)trans->data)->flow) 1602 1584 #define nft_trans_rule_id(trans) \ 1603 1585 (((struct nft_trans_rule *)trans->data)->rule_id) 1586 + #define nft_trans_rule_bound(trans) \ 1587 + (((struct nft_trans_rule *)trans->data)->bound) 1604 1588 1605 1589 struct nft_trans_set { 1606 1590 struct nft_set *set; ··· 1627 1607 (((struct nft_trans_set *)trans->data)->gc_int) 1628 1608 1629 1609 struct nft_trans_chain { 1610 + struct nft_chain *chain; 1630 1611 bool update; 1631 1612 char *name; 1632 1613 struct nft_stats __percpu *stats; 1633 1614 u8 policy; 1615 + bool bound; 1634 1616 u32 chain_id; 1635 1617 struct nft_base_chain *basechain; 1636 1618 struct list_head hook_list; 1637 1619 }; 1638 1620 1621 + #define nft_trans_chain(trans) \ 1622 + (((struct nft_trans_chain *)trans->data)->chain) 1639 1623 #define nft_trans_chain_update(trans) \ 1640 1624 (((struct nft_trans_chain *)trans->data)->update) 1641 1625 #define nft_trans_chain_name(trans) \ ··· 1648 1624 (((struct nft_trans_chain *)trans->data)->stats) 1649 1625 #define nft_trans_chain_policy(trans) \ 1650 1626 (((struct nft_trans_chain *)trans->data)->policy) 1627 + #define nft_trans_chain_bound(trans) \ 1628 + (((struct nft_trans_chain *)trans->data)->bound) 1651 1629 #define nft_trans_chain_id(trans) \ 1652 1630 (((struct nft_trans_chain *)trans->data)->chain_id) 1653 1631 #define nft_trans_basechain(trans) \ ··· 1726 1700 struct nftables_pernet { 1727 1701 struct list_head tables; 1728 1702 struct list_head commit_list; 1703 + struct list_head binding_list; 1729 1704 struct list_head module_list; 1730 1705 struct list_head notify_list; 1731 1706 struct mutex commit_mutex;
+1
include/net/xfrm.h
··· 1054 1054 struct sec_path { 1055 1055 int len; 1056 1056 int olen; 1057 + int verified_cnt; 1057 1058 1058 1059 struct xfrm_state *xvec[XFRM_MAX_DEPTH]; 1059 1060 struct xfrm_offload ovec[XFRM_MAX_OFFLOAD_DEPTH];
+1 -1
include/trace/events/writeback.h
··· 68 68 strscpy_pad(__entry->name, 69 69 bdi_dev_name(mapping ? inode_to_bdi(mapping->host) : 70 70 NULL), 32); 71 - __entry->ino = mapping ? mapping->host->i_ino : 0; 71 + __entry->ino = (mapping && mapping->host) ? mapping->host->i_ino : 0; 72 72 __entry->index = folio->index; 73 73 ), 74 74
+6 -1
io_uring/io-wq.c
··· 220 220 list_del_rcu(&worker->all_list); 221 221 raw_spin_unlock(&wq->lock); 222 222 io_wq_dec_running(worker); 223 - worker->flags = 0; 223 + /* 224 + * this worker is a goner, clear ->worker_private to avoid any 225 + * inc/dec running calls that could happen as part of exit from 226 + * touching 'worker'. 227 + */ 228 + current->worker_private = NULL; 224 229 225 230 kfree_rcu(worker, rcu); 226 231 io_worker_ref_put(wq);
+16 -5
io_uring/net.c
··· 65 65 u16 addr_len; 66 66 u16 buf_group; 67 67 void __user *addr; 68 + void __user *msg_control; 68 69 /* used only for send zerocopy */ 69 70 struct io_kiocb *notif; 70 71 }; ··· 196 195 struct io_async_msghdr *iomsg) 197 196 { 198 197 struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg); 198 + int ret; 199 199 200 200 iomsg->msg.msg_name = &iomsg->addr; 201 201 iomsg->free_iov = iomsg->fast_iov; 202 - return sendmsg_copy_msghdr(&iomsg->msg, sr->umsg, sr->msg_flags, 202 + ret = sendmsg_copy_msghdr(&iomsg->msg, sr->umsg, sr->msg_flags, 203 203 &iomsg->free_iov); 204 + /* save msg_control as sys_sendmsg() overwrites it */ 205 + sr->msg_control = iomsg->msg.msg_control_user; 206 + return ret; 204 207 } 205 208 206 209 int io_send_prep_async(struct io_kiocb *req) ··· 302 297 303 298 if (req_has_async_data(req)) { 304 299 kmsg = req->async_data; 300 + kmsg->msg.msg_control_user = sr->msg_control; 305 301 } else { 306 302 ret = io_sendmsg_copy_hdr(req, &iomsg); 307 303 if (ret) ··· 326 320 if (ret == -EAGAIN && (issue_flags & IO_URING_F_NONBLOCK)) 327 321 return io_setup_async_msg(req, kmsg, issue_flags); 328 322 if (ret > 0 && io_net_retry(sock, flags)) { 323 + kmsg->msg.msg_controllen = 0; 324 + kmsg->msg.msg_control = NULL; 329 325 sr->done_io += ret; 330 326 req->flags |= REQ_F_PARTIAL_IO; 331 327 return io_setup_async_msg(req, kmsg, issue_flags); ··· 790 782 flags = sr->msg_flags; 791 783 if (force_nonblock) 792 784 flags |= MSG_DONTWAIT; 793 - if (flags & MSG_WAITALL) 794 - min_ret = iov_iter_count(&kmsg->msg.msg_iter); 795 785 796 786 kmsg->msg.msg_get_inq = 1; 797 - if (req->flags & REQ_F_APOLL_MULTISHOT) 787 + if (req->flags & REQ_F_APOLL_MULTISHOT) { 798 788 ret = io_recvmsg_multishot(sock, sr, kmsg, flags, 799 789 &mshot_finished); 800 - else 790 + } else { 791 + /* disable partial retry for recvmsg with cmsg attached */ 792 + if (flags & MSG_WAITALL && !kmsg->msg.msg_controllen) 793 + min_ret = iov_iter_count(&kmsg->msg.msg_iter); 794 + 801 795 ret = __sys_recvmsg_sock(sock, &kmsg->msg, sr->umsg, 802 796 kmsg->uaddr, flags); 797 + } 803 798 804 799 if (ret < min_ret) { 805 800 if (ret == -EAGAIN && force_nonblock) {
+4 -5
io_uring/poll.c
··· 977 977 struct io_hash_bucket *bucket; 978 978 struct io_kiocb *preq; 979 979 int ret2, ret = 0; 980 - struct io_tw_state ts = {}; 980 + struct io_tw_state ts = { .locked = true }; 981 981 982 + io_ring_submit_lock(ctx, issue_flags); 982 983 preq = io_poll_find(ctx, true, &cd, &ctx->cancel_table, &bucket); 983 984 ret2 = io_poll_disarm(preq); 984 985 if (bucket) ··· 991 990 goto out; 992 991 } 993 992 994 - io_ring_submit_lock(ctx, issue_flags); 995 993 preq = io_poll_find(ctx, true, &cd, &ctx->cancel_table_locked, &bucket); 996 994 ret2 = io_poll_disarm(preq); 997 995 if (bucket) 998 996 spin_unlock(&bucket->lock); 999 - io_ring_submit_unlock(ctx, issue_flags); 1000 997 if (ret2) { 1001 998 ret = ret2; 1002 999 goto out; ··· 1018 1019 if (poll_update->update_user_data) 1019 1020 preq->cqe.user_data = poll_update->new_user_data; 1020 1021 1021 - ret2 = io_poll_add(preq, issue_flags); 1022 + ret2 = io_poll_add(preq, issue_flags & ~IO_URING_F_UNLOCKED); 1022 1023 /* successfully updated, don't complete poll request */ 1023 1024 if (!ret2 || ret2 == -EIOCBQUEUED) 1024 1025 goto out; ··· 1026 1027 1027 1028 req_set_fail(preq); 1028 1029 io_req_set_res(preq, -ECANCELED, 0); 1029 - ts.locked = !(issue_flags & IO_URING_F_UNLOCKED); 1030 1030 io_req_task_complete(preq, &ts); 1031 1031 out: 1032 + io_ring_submit_unlock(ctx, issue_flags); 1032 1033 if (ret < 0) { 1033 1034 req_set_fail(req); 1034 1035 return ret;
+8 -12
kernel/bpf/btf.c
··· 751 751 return offset < btf->hdr.str_len; 752 752 } 753 753 754 - static bool __btf_name_char_ok(char c, bool first, bool dot_ok) 754 + static bool __btf_name_char_ok(char c, bool first) 755 755 { 756 756 if ((first ? !isalpha(c) : 757 757 !isalnum(c)) && 758 758 c != '_' && 759 - ((c == '.' && !dot_ok) || 760 - c != '.')) 759 + c != '.') 761 760 return false; 762 761 return true; 763 762 } ··· 773 774 return NULL; 774 775 } 775 776 776 - static bool __btf_name_valid(const struct btf *btf, u32 offset, bool dot_ok) 777 + static bool __btf_name_valid(const struct btf *btf, u32 offset) 777 778 { 778 779 /* offset must be valid */ 779 780 const char *src = btf_str_by_offset(btf, offset); 780 781 const char *src_limit; 781 782 782 - if (!__btf_name_char_ok(*src, true, dot_ok)) 783 + if (!__btf_name_char_ok(*src, true)) 783 784 return false; 784 785 785 786 /* set a limit on identifier length */ 786 787 src_limit = src + KSYM_NAME_LEN; 787 788 src++; 788 789 while (*src && src < src_limit) { 789 - if (!__btf_name_char_ok(*src, false, dot_ok)) 790 + if (!__btf_name_char_ok(*src, false)) 790 791 return false; 791 792 src++; 792 793 } ··· 794 795 return !*src; 795 796 } 796 797 797 - /* Only C-style identifier is permitted. This can be relaxed if 798 - * necessary. 799 - */ 800 798 static bool btf_name_valid_identifier(const struct btf *btf, u32 offset) 801 799 { 802 - return __btf_name_valid(btf, offset, false); 800 + return __btf_name_valid(btf, offset); 803 801 } 804 802 805 803 static bool btf_name_valid_section(const struct btf *btf, u32 offset) 806 804 { 807 - return __btf_name_valid(btf, offset, true); 805 + return __btf_name_valid(btf, offset); 808 806 } 809 807 810 808 static const char *__btf_name_by_offset(const struct btf *btf, u32 offset) ··· 4425 4429 } 4426 4430 4427 4431 if (!t->name_off || 4428 - !__btf_name_valid(env->btf, t->name_off, true)) { 4432 + !__btf_name_valid(env->btf, t->name_off)) { 4429 4433 btf_verifier_log_type(env, t, "Invalid name"); 4430 4434 return -EINVAL; 4431 4435 }
+5
kernel/bpf/syscall.c
··· 3463 3463 return prog->enforce_expected_attach_type && 3464 3464 prog->expected_attach_type != attach_type ? 3465 3465 -EINVAL : 0; 3466 + case BPF_PROG_TYPE_KPROBE: 3467 + if (prog->expected_attach_type == BPF_TRACE_KPROBE_MULTI && 3468 + attach_type != BPF_TRACE_KPROBE_MULTI) 3469 + return -EINVAL; 3470 + return 0; 3466 3471 default: 3467 3472 return 0; 3468 3473 }
+8 -2
kernel/bpf/verifier.c
··· 4222 4222 return err; 4223 4223 } 4224 4224 save_register_state(state, spi, reg, size); 4225 + /* Break the relation on a narrowing spill. */ 4226 + if (fls64(reg->umax_value) > BITS_PER_BYTE * size) 4227 + state->stack[spi].spilled_ptr.id = 0; 4225 4228 } else if (!reg && !(off % BPF_REG_SIZE) && is_bpf_st_mem(insn) && 4226 4229 insn->imm != 0 && env->bpf_capable) { 4227 4230 struct bpf_reg_state fake_reg = {}; ··· 17616 17613 } 17617 17614 17618 17615 /* finally lock prog and jit images for all functions and 17619 - * populate kallsysm 17616 + * populate kallsysm. Begin at the first subprogram, since 17617 + * bpf_prog_load will add the kallsyms for the main program. 17620 17618 */ 17621 - for (i = 0; i < env->subprog_cnt; i++) { 17619 + for (i = 1; i < env->subprog_cnt; i++) { 17622 17620 bpf_prog_lock_ro(func[i]); 17623 17621 bpf_prog_kallsyms_add(func[i]); 17624 17622 } ··· 17645 17641 prog->jited = 1; 17646 17642 prog->bpf_func = func[0]->bpf_func; 17647 17643 prog->jited_len = func[0]->jited_len; 17644 + prog->aux->extable = func[0]->aux->extable; 17645 + prog->aux->num_exentries = func[0]->aux->num_exentries; 17648 17646 prog->aux->func = func; 17649 17647 prog->aux->func_cnt = env->subprog_cnt; 17650 17648 bpf_prog_jit_attempt_done(prog);
+17 -3
kernel/cgroup/cgroup.c
··· 1798 1798 { 1799 1799 struct cgroup *dcgrp = &dst_root->cgrp; 1800 1800 struct cgroup_subsys *ss; 1801 - int ssid, i, ret; 1801 + int ssid, ret; 1802 1802 u16 dfl_disable_ss_mask = 0; 1803 1803 1804 1804 lockdep_assert_held(&cgroup_mutex); ··· 1842 1842 struct cgroup_root *src_root = ss->root; 1843 1843 struct cgroup *scgrp = &src_root->cgrp; 1844 1844 struct cgroup_subsys_state *css = cgroup_css(scgrp, ss); 1845 - struct css_set *cset; 1845 + struct css_set *cset, *cset_pos; 1846 + struct css_task_iter *it; 1846 1847 1847 1848 WARN_ON(!css || cgroup_css(dcgrp, ss)); 1848 1849 ··· 1861 1860 css->cgroup = dcgrp; 1862 1861 1863 1862 spin_lock_irq(&css_set_lock); 1864 - hash_for_each(css_set_table, i, cset, hlist) 1863 + WARN_ON(!list_empty(&dcgrp->e_csets[ss->id])); 1864 + list_for_each_entry_safe(cset, cset_pos, &scgrp->e_csets[ss->id], 1865 + e_cset_node[ss->id]) { 1865 1866 list_move_tail(&cset->e_cset_node[ss->id], 1866 1867 &dcgrp->e_csets[ss->id]); 1868 + /* 1869 + * all css_sets of scgrp together in same order to dcgrp, 1870 + * patch in-flight iterators to preserve correct iteration. 1871 + * since the iterator is always advanced right away and 1872 + * finished when it->cset_pos meets it->cset_head, so only 1873 + * update it->cset_head is enough here. 1874 + */ 1875 + list_for_each_entry(it, &cset->task_iters, iters_node) 1876 + if (it->cset_head == &scgrp->e_csets[ss->id]) 1877 + it->cset_head = &dcgrp->e_csets[ss->id]; 1878 + } 1867 1879 spin_unlock_irq(&css_set_lock); 1868 1880 1869 1881 if (ss->css_rstat_flush) {
+6 -2
kernel/cgroup/legacy_freezer.c
··· 108 108 struct freezer *freezer = css_freezer(css); 109 109 struct freezer *parent = parent_freezer(freezer); 110 110 111 + cpus_read_lock(); 111 112 mutex_lock(&freezer_mutex); 112 113 113 114 freezer->state |= CGROUP_FREEZER_ONLINE; 114 115 115 116 if (parent && (parent->state & CGROUP_FREEZING)) { 116 117 freezer->state |= CGROUP_FREEZING_PARENT | CGROUP_FROZEN; 117 - static_branch_inc(&freezer_active); 118 + static_branch_inc_cpuslocked(&freezer_active); 118 119 } 119 120 120 121 mutex_unlock(&freezer_mutex); 122 + cpus_read_unlock(); 121 123 return 0; 122 124 } 123 125 ··· 134 132 { 135 133 struct freezer *freezer = css_freezer(css); 136 134 135 + cpus_read_lock(); 137 136 mutex_lock(&freezer_mutex); 138 137 139 138 if (freezer->state & CGROUP_FREEZING) 140 - static_branch_dec(&freezer_active); 139 + static_branch_dec_cpuslocked(&freezer_active); 141 140 142 141 freezer->state = 0; 143 142 144 143 mutex_unlock(&freezer_mutex); 144 + cpus_read_unlock(); 145 145 } 146 146 147 147 static void freezer_css_free(struct cgroup_subsys_state *css)
+1 -12
kernel/time/tick-common.c
··· 218 218 * this cpu: 219 219 */ 220 220 if (tick_do_timer_cpu == TICK_DO_TIMER_BOOT) { 221 - ktime_t next_p; 222 - u32 rem; 223 - 224 221 tick_do_timer_cpu = cpu; 225 - 226 - next_p = ktime_get(); 227 - div_u64_rem(next_p, TICK_NSEC, &rem); 228 - if (rem) { 229 - next_p -= rem; 230 - next_p += TICK_NSEC; 231 - } 232 - 233 - tick_next_period = next_p; 222 + tick_next_period = ktime_get(); 234 223 #ifdef CONFIG_NO_HZ_FULL 235 224 /* 236 225 * The boot CPU may be nohz_full, in which case set
+12 -1
kernel/time/tick-sched.c
··· 161 161 raw_spin_lock(&jiffies_lock); 162 162 write_seqcount_begin(&jiffies_seq); 163 163 /* Did we start the jiffies update yet ? */ 164 - if (last_jiffies_update == 0) 164 + if (last_jiffies_update == 0) { 165 + u32 rem; 166 + 167 + /* 168 + * Ensure that the tick is aligned to a multiple of 169 + * TICK_NSEC. 170 + */ 171 + div_u64_rem(tick_next_period, TICK_NSEC, &rem); 172 + if (rem) 173 + tick_next_period += TICK_NSEC - rem; 174 + 165 175 last_jiffies_update = tick_next_period; 176 + } 166 177 period = last_jiffies_update; 167 178 write_seqcount_end(&jiffies_seq); 168 179 raw_spin_unlock(&jiffies_lock);
+207 -83
kernel/trace/trace_events_user.c
··· 50 50 #define EVENT_STATUS_OTHER BIT(7) 51 51 52 52 /* 53 + * User register flags are not allowed yet, keep them here until we are 54 + * ready to expose them out to the user ABI. 55 + */ 56 + enum user_reg_flag { 57 + /* Event will not delete upon last reference closing */ 58 + USER_EVENT_REG_PERSIST = 1U << 0, 59 + 60 + /* This value or above is currently non-ABI */ 61 + USER_EVENT_REG_MAX = 1U << 1, 62 + }; 63 + 64 + /* 53 65 * Stores the system name, tables, and locks for a group of events. This 54 66 * allows isolation for events by various means. 55 67 */ ··· 97 85 struct hlist_node node; 98 86 struct list_head fields; 99 87 struct list_head validators; 88 + struct work_struct put_work; 100 89 refcount_t refcnt; 101 90 int min_size; 91 + int reg_flags; 102 92 char status; 103 93 }; 104 94 ··· 179 165 180 166 static int user_event_parse(struct user_event_group *group, char *name, 181 167 char *args, char *flags, 182 - struct user_event **newuser); 168 + struct user_event **newuser, int reg_flags); 183 169 184 170 static struct user_event_mm *user_event_mm_get(struct user_event_mm *mm); 185 171 static struct user_event_mm *user_event_mm_get_all(struct user_event *user); 186 172 static void user_event_mm_put(struct user_event_mm *mm); 173 + static int destroy_user_event(struct user_event *user); 187 174 188 175 static u32 user_event_key(char *name) 189 176 { 190 177 return jhash(name, strlen(name), 0); 178 + } 179 + 180 + static struct user_event *user_event_get(struct user_event *user) 181 + { 182 + refcount_inc(&user->refcnt); 183 + 184 + return user; 185 + } 186 + 187 + static void delayed_destroy_user_event(struct work_struct *work) 188 + { 189 + struct user_event *user = container_of( 190 + work, struct user_event, put_work); 191 + 192 + mutex_lock(&event_mutex); 193 + 194 + if (!refcount_dec_and_test(&user->refcnt)) 195 + goto out; 196 + 197 + if (destroy_user_event(user)) { 198 + /* 199 + * The only reason this would fail here is if we cannot 200 + * update the visibility of the event. In this case the 201 + * event stays in the hashtable, waiting for someone to 202 + * attempt to delete it later. 203 + */ 204 + pr_warn("user_events: Unable to delete event\n"); 205 + refcount_set(&user->refcnt, 1); 206 + } 207 + out: 208 + mutex_unlock(&event_mutex); 209 + } 210 + 211 + static void user_event_put(struct user_event *user, bool locked) 212 + { 213 + bool delete; 214 + 215 + if (unlikely(!user)) 216 + return; 217 + 218 + /* 219 + * When the event is not enabled for auto-delete there will always 220 + * be at least 1 reference to the event. During the event creation 221 + * we initially set the refcnt to 2 to achieve this. In those cases 222 + * the caller must acquire event_mutex and after decrement check if 223 + * the refcnt is 1, meaning this is the last reference. When auto 224 + * delete is enabled, there will only be 1 ref, IE: refcnt will be 225 + * only set to 1 during creation to allow the below checks to go 226 + * through upon the last put. The last put must always be done with 227 + * the event mutex held. 228 + */ 229 + if (!locked) { 230 + lockdep_assert_not_held(&event_mutex); 231 + delete = refcount_dec_and_mutex_lock(&user->refcnt, &event_mutex); 232 + } else { 233 + lockdep_assert_held(&event_mutex); 234 + delete = refcount_dec_and_test(&user->refcnt); 235 + } 236 + 237 + if (!delete) 238 + return; 239 + 240 + /* 241 + * We now have the event_mutex in all cases, which ensures that 242 + * no new references will be taken until event_mutex is released. 243 + * New references come through find_user_event(), which requires 244 + * the event_mutex to be held. 245 + */ 246 + 247 + if (user->reg_flags & USER_EVENT_REG_PERSIST) { 248 + /* We should not get here when persist flag is set */ 249 + pr_alert("BUG: Auto-delete engaged on persistent event\n"); 250 + goto out; 251 + } 252 + 253 + /* 254 + * Unfortunately we have to attempt the actual destroy in a work 255 + * queue. This is because not all cases handle a trace_event_call 256 + * being removed within the class->reg() operation for unregister. 257 + */ 258 + INIT_WORK(&user->put_work, delayed_destroy_user_event); 259 + 260 + /* 261 + * Since the event is still in the hashtable, we have to re-inc 262 + * the ref count to 1. This count will be decremented and checked 263 + * in the work queue to ensure it's still the last ref. This is 264 + * needed because a user-process could register the same event in 265 + * between the time of event_mutex release and the work queue 266 + * running the delayed destroy. If we removed the item now from 267 + * the hashtable, this would result in a timing window where a 268 + * user process would fail a register because the trace_event_call 269 + * register would fail in the tracing layers. 270 + */ 271 + refcount_set(&user->refcnt, 1); 272 + 273 + if (WARN_ON_ONCE(!schedule_work(&user->put_work))) { 274 + /* 275 + * If we fail we must wait for an admin to attempt delete or 276 + * another register/close of the event, whichever is first. 277 + */ 278 + pr_warn("user_events: Unable to queue delayed destroy\n"); 279 + } 280 + out: 281 + /* Ensure if we didn't have event_mutex before we unlock it */ 282 + if (!locked) 283 + mutex_unlock(&event_mutex); 191 284 } 192 285 193 286 static void user_event_group_destroy(struct user_event_group *group) ··· 303 182 kfree(group); 304 183 } 305 184 306 - static char *user_event_group_system_name(struct user_namespace *user_ns) 185 + static char *user_event_group_system_name(void) 307 186 { 308 187 char *system_name; 309 188 int len = sizeof(USER_EVENTS_SYSTEM) + 1; 310 - 311 - if (user_ns != &init_user_ns) { 312 - /* 313 - * Unexpected at this point: 314 - * We only currently support init_user_ns. 315 - * When we enable more, this will trigger a failure so log. 316 - */ 317 - pr_warn("user_events: Namespace other than init_user_ns!\n"); 318 - return NULL; 319 - } 320 189 321 190 system_name = kmalloc(len, GFP_KERNEL); 322 191 ··· 318 207 return system_name; 319 208 } 320 209 321 - static inline struct user_event_group 322 - *user_event_group_from_user_ns(struct user_namespace *user_ns) 323 - { 324 - if (user_ns == &init_user_ns) 325 - return init_group; 326 - 327 - return NULL; 328 - } 329 - 330 210 static struct user_event_group *current_user_event_group(void) 331 211 { 332 - struct user_namespace *user_ns = current_user_ns(); 333 - struct user_event_group *group = NULL; 334 - 335 - while (user_ns) { 336 - group = user_event_group_from_user_ns(user_ns); 337 - 338 - if (group) 339 - break; 340 - 341 - user_ns = user_ns->parent; 342 - } 343 - 344 - return group; 212 + return init_group; 345 213 } 346 214 347 - static struct user_event_group 348 - *user_event_group_create(struct user_namespace *user_ns) 215 + static struct user_event_group *user_event_group_create(void) 349 216 { 350 217 struct user_event_group *group; 351 218 ··· 332 243 if (!group) 333 244 return NULL; 334 245 335 - group->system_name = user_event_group_system_name(user_ns); 246 + group->system_name = user_event_group_system_name(); 336 247 337 248 if (!group->system_name) 338 249 goto error; ··· 348 259 return NULL; 349 260 }; 350 261 351 - static void user_event_enabler_destroy(struct user_event_enabler *enabler) 262 + static void user_event_enabler_destroy(struct user_event_enabler *enabler, 263 + bool locked) 352 264 { 353 265 list_del_rcu(&enabler->mm_enablers_link); 354 266 355 267 /* No longer tracking the event via the enabler */ 356 - refcount_dec(&enabler->event->refcnt); 268 + user_event_put(enabler->event, locked); 357 269 358 270 kfree(enabler); 359 271 } ··· 416 326 417 327 /* User asked for enabler to be removed during fault */ 418 328 if (test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler))) { 419 - user_event_enabler_destroy(enabler); 329 + user_event_enabler_destroy(enabler, true); 420 330 goto out; 421 331 } 422 332 ··· 591 501 if (!enabler) 592 502 return false; 593 503 594 - enabler->event = orig->event; 504 + enabler->event = user_event_get(orig->event); 595 505 enabler->addr = orig->addr; 596 506 597 507 /* Only dup part of value (ignore future flags, etc) */ 598 508 enabler->values = orig->values & ENABLE_VAL_DUP_MASK; 599 - 600 - refcount_inc(&enabler->event->refcnt); 601 509 602 510 /* Enablers not exposed yet, RCU not required */ 603 511 list_add(&enabler->mm_enablers_link, &mm->enablers); ··· 713 625 struct user_event_enabler *enabler, *next; 714 626 715 627 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) 716 - user_event_enabler_destroy(enabler); 628 + user_event_enabler_destroy(enabler, false); 717 629 718 630 mmdrop(mm->mm); 719 631 kfree(mm); ··· 868 780 * exit or run exec(), which includes forks and clones. 869 781 */ 870 782 if (!*write_result) { 871 - refcount_inc(&enabler->event->refcnt); 783 + user_event_get(user); 872 784 list_add_rcu(&enabler->mm_enablers_link, &user_mm->enablers); 873 785 } 874 786 ··· 891 803 static __always_inline __must_check 892 804 bool user_event_last_ref(struct user_event *user) 893 805 { 894 - return refcount_read(&user->refcnt) == 1; 806 + int last = 0; 807 + 808 + if (user->reg_flags & USER_EVENT_REG_PERSIST) 809 + last = 1; 810 + 811 + return refcount_read(&user->refcnt) == last; 895 812 } 896 813 897 814 static __always_inline __must_check ··· 935 842 * Upon success user_event has its ref count increased by 1. 936 843 */ 937 844 static int user_event_parse_cmd(struct user_event_group *group, 938 - char *raw_command, struct user_event **newuser) 845 + char *raw_command, struct user_event **newuser, 846 + int reg_flags) 939 847 { 940 848 char *name = raw_command; 941 849 char *args = strpbrk(name, " "); ··· 950 856 if (flags) 951 857 *flags++ = '\0'; 952 858 953 - return user_event_parse(group, name, args, flags, newuser); 859 + return user_event_parse(group, name, args, flags, newuser, reg_flags); 954 860 } 955 861 956 862 static int user_field_array_size(const char *type) ··· 1461 1367 *outkey = key; 1462 1368 1463 1369 hash_for_each_possible(group->register_table, user, node, key) 1464 - if (!strcmp(EVENT_NAME(user), name)) { 1465 - refcount_inc(&user->refcnt); 1466 - return user; 1467 - } 1370 + if (!strcmp(EVENT_NAME(user), name)) 1371 + return user_event_get(user); 1468 1372 1469 1373 return NULL; 1470 1374 } ··· 1524 1432 if (unlikely(!entry)) 1525 1433 return; 1526 1434 1527 - if (unlikely(!copy_nofault(entry + 1, i->count, i))) 1435 + if (unlikely(i->count != 0 && !copy_nofault(entry + 1, i->count, i))) 1528 1436 goto discard; 1529 1437 1530 1438 if (!list_empty(&user->validators) && ··· 1565 1473 1566 1474 perf_fetch_caller_regs(regs); 1567 1475 1568 - if (unlikely(!copy_nofault(perf_entry + 1, i->count, i))) 1476 + if (unlikely(i->count != 0 && !copy_nofault(perf_entry + 1, i->count, i))) 1569 1477 goto discard; 1570 1478 1571 1479 if (!list_empty(&user->validators) && ··· 1676 1584 1677 1585 return ret; 1678 1586 inc: 1679 - refcount_inc(&user->refcnt); 1587 + user_event_get(user); 1680 1588 update_enable_bit_for(user); 1681 1589 return 0; 1682 1590 dec: 1683 1591 update_enable_bit_for(user); 1684 - refcount_dec(&user->refcnt); 1592 + user_event_put(user, true); 1685 1593 return 0; 1686 1594 } 1687 1595 ··· 1712 1620 1713 1621 mutex_lock(&group->reg_mutex); 1714 1622 1715 - ret = user_event_parse_cmd(group, name, &user); 1623 + /* Dyn events persist, otherwise they would cleanup immediately */ 1624 + ret = user_event_parse_cmd(group, name, &user, USER_EVENT_REG_PERSIST); 1716 1625 1717 1626 if (!ret) 1718 - refcount_dec(&user->refcnt); 1627 + user_event_put(user, false); 1719 1628 1720 1629 mutex_unlock(&group->reg_mutex); 1721 1630 ··· 1838 1745 1839 1746 if (match && argc > 0) 1840 1747 match = user_fields_match(user, argc, argv); 1748 + else if (match && argc == 0) 1749 + match = list_empty(&user->fields); 1841 1750 1842 1751 return match; 1843 1752 } ··· 1876 1781 */ 1877 1782 static int user_event_parse(struct user_event_group *group, char *name, 1878 1783 char *args, char *flags, 1879 - struct user_event **newuser) 1784 + struct user_event **newuser, int reg_flags) 1880 1785 { 1881 1786 int ret; 1882 1787 u32 key; 1883 1788 struct user_event *user; 1789 + int argc = 0; 1790 + char **argv; 1791 + 1792 + /* User register flags are not ready yet */ 1793 + if (reg_flags != 0 || flags != NULL) 1794 + return -EINVAL; 1884 1795 1885 1796 /* Prevent dyn_event from racing */ 1886 1797 mutex_lock(&event_mutex); ··· 1894 1793 mutex_unlock(&event_mutex); 1895 1794 1896 1795 if (user) { 1897 - *newuser = user; 1898 - /* 1899 - * Name is allocated by caller, free it since it already exists. 1900 - * Caller only worries about failure cases for freeing. 1901 - */ 1902 - kfree(name); 1796 + if (args) { 1797 + argv = argv_split(GFP_KERNEL, args, &argc); 1798 + if (!argv) { 1799 + ret = -ENOMEM; 1800 + goto error; 1801 + } 1802 + 1803 + ret = user_fields_match(user, argc, (const char **)argv); 1804 + argv_free(argv); 1805 + 1806 + } else 1807 + ret = list_empty(&user->fields); 1808 + 1809 + if (ret) { 1810 + *newuser = user; 1811 + /* 1812 + * Name is allocated by caller, free it since it already exists. 1813 + * Caller only worries about failure cases for freeing. 1814 + */ 1815 + kfree(name); 1816 + } else { 1817 + ret = -EADDRINUSE; 1818 + goto error; 1819 + } 1820 + 1903 1821 return 0; 1822 + error: 1823 + user_event_put(user, false); 1824 + return ret; 1904 1825 } 1905 1826 1906 1827 user = kzalloc(sizeof(*user), GFP_KERNEL_ACCOUNT); ··· 1975 1852 if (ret) 1976 1853 goto put_user_lock; 1977 1854 1978 - /* Ensure we track self ref and caller ref (2) */ 1979 - refcount_set(&user->refcnt, 2); 1855 + user->reg_flags = reg_flags; 1856 + 1857 + if (user->reg_flags & USER_EVENT_REG_PERSIST) { 1858 + /* Ensure we track self ref and caller ref (2) */ 1859 + refcount_set(&user->refcnt, 2); 1860 + } else { 1861 + /* Ensure we track only caller ref (1) */ 1862 + refcount_set(&user->refcnt, 1); 1863 + } 1980 1864 1981 1865 dyn_event_init(&user->devent, &user_event_dops); 1982 1866 dyn_event_add(&user->devent, &user->call); ··· 2015 1885 if (!user) 2016 1886 return -ENOENT; 2017 1887 2018 - refcount_dec(&user->refcnt); 1888 + user_event_put(user, true); 2019 1889 2020 1890 if (!user_event_last_ref(user)) 2021 1891 return -EBUSY; ··· 2174 2044 for (i = 0; i < count; ++i) 2175 2045 new_refs->events[i] = refs->events[i]; 2176 2046 2177 - new_refs->events[i] = user; 2178 - 2179 - refcount_inc(&user->refcnt); 2047 + new_refs->events[i] = user_event_get(user); 2180 2048 2181 2049 rcu_assign_pointer(info->refs, new_refs); 2182 2050 ··· 2205 2077 if (ret) 2206 2078 return ret; 2207 2079 2208 - /* Ensure no flags, since we don't support any yet */ 2209 - if (kreg->flags != 0) 2080 + /* Ensure only valid flags */ 2081 + if (kreg->flags & ~(USER_EVENT_REG_MAX-1)) 2210 2082 return -EINVAL; 2211 2083 2212 2084 /* Ensure supported size */ ··· 2278 2150 return ret; 2279 2151 } 2280 2152 2281 - ret = user_event_parse_cmd(info->group, name, &user); 2153 + ret = user_event_parse_cmd(info->group, name, &user, reg.flags); 2282 2154 2283 2155 if (ret) { 2284 2156 kfree(name); ··· 2288 2160 ret = user_events_ref_add(info, user); 2289 2161 2290 2162 /* No longer need parse ref, ref_add either worked or not */ 2291 - refcount_dec(&user->refcnt); 2163 + user_event_put(user, false); 2292 2164 2293 2165 /* Positive number is index and valid */ 2294 2166 if (ret < 0) ··· 2437 2309 set_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler)); 2438 2310 2439 2311 if (!test_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler))) 2440 - user_event_enabler_destroy(enabler); 2312 + user_event_enabler_destroy(enabler, true); 2441 2313 2442 2314 /* Removed at least one */ 2443 2315 ret = 0; ··· 2495 2367 struct user_event_file_info *info = file->private_data; 2496 2368 struct user_event_group *group; 2497 2369 struct user_event_refs *refs; 2498 - struct user_event *user; 2499 2370 int i; 2500 2371 2501 2372 if (!info) ··· 2518 2391 * The underlying user_events are ref counted, and cannot be freed. 2519 2392 * After this decrement, the user_events may be freed elsewhere. 2520 2393 */ 2521 - for (i = 0; i < refs->count; ++i) { 2522 - user = refs->events[i]; 2394 + for (i = 0; i < refs->count; ++i) 2395 + user_event_put(refs->events[i], false); 2523 2396 2524 - if (user) 2525 - refcount_dec(&user->refcnt); 2526 - } 2527 2397 out: 2528 2398 file->private_data = NULL; 2529 2399 ··· 2701 2577 if (!fault_cache) 2702 2578 return -ENOMEM; 2703 2579 2704 - init_group = user_event_group_create(&init_user_ns); 2580 + init_group = user_event_group_create(); 2705 2581 2706 2582 if (!init_group) { 2707 2583 kmem_cache_destroy(fault_cache);
+1 -1
kernel/trace/trace_output.c
··· 847 847 int ret; 848 848 void *pos; 849 849 850 - list_for_each_entry(field, head, link) { 850 + list_for_each_entry_reverse(field, head, link) { 851 851 trace_seq_printf(&iter->seq, " %s=", field->name); 852 852 if (field->offset + field->size > iter->ent_size) { 853 853 trace_seq_puts(&iter->seq, "<OVERFLOW>");
-1
mm/khugepaged.c
··· 2070 2070 TTU_IGNORE_MLOCK | TTU_BATCH_FLUSH); 2071 2071 2072 2072 xas_lock_irq(&xas); 2073 - xas_set(&xas, index); 2074 2073 2075 2074 VM_BUG_ON_PAGE(page != xas_load(&xas), page); 2076 2075
+6 -3
mm/memfd.c
··· 371 371 372 372 inode->i_mode &= ~0111; 373 373 file_seals = memfd_file_seals_ptr(file); 374 - *file_seals &= ~F_SEAL_SEAL; 375 - *file_seals |= F_SEAL_EXEC; 374 + if (file_seals) { 375 + *file_seals &= ~F_SEAL_SEAL; 376 + *file_seals |= F_SEAL_EXEC; 377 + } 376 378 } else if (flags & MFD_ALLOW_SEALING) { 377 379 /* MFD_EXEC and MFD_ALLOW_SEALING are set */ 378 380 file_seals = memfd_file_seals_ptr(file); 379 - *file_seals &= ~F_SEAL_SEAL; 381 + if (file_seals) 382 + *file_seals &= ~F_SEAL_SEAL; 380 383 } 381 384 382 385 fd_install(fd, file);
+17 -20
mm/mmap.c
··· 2318 2318 return __split_vma(vmi, vma, addr, new_below); 2319 2319 } 2320 2320 2321 - static inline int munmap_sidetree(struct vm_area_struct *vma, 2322 - struct ma_state *mas_detach) 2323 - { 2324 - vma_start_write(vma); 2325 - mas_set_range(mas_detach, vma->vm_start, vma->vm_end - 1); 2326 - if (mas_store_gfp(mas_detach, vma, GFP_KERNEL)) 2327 - return -ENOMEM; 2328 - 2329 - vma_mark_detached(vma, true); 2330 - if (vma->vm_flags & VM_LOCKED) 2331 - vma->vm_mm->locked_vm -= vma_pages(vma); 2332 - 2333 - return 0; 2334 - } 2335 - 2336 2321 /* 2337 2322 * do_vmi_align_munmap() - munmap the aligned region from @start to @end. 2338 2323 * @vmi: The vma iterator ··· 2339 2354 struct maple_tree mt_detach; 2340 2355 int count = 0; 2341 2356 int error = -ENOMEM; 2357 + unsigned long locked_vm = 0; 2342 2358 MA_STATE(mas_detach, &mt_detach, 0, 0); 2343 2359 mt_init_flags(&mt_detach, vmi->mas.tree->ma_flags & MT_FLAGS_LOCK_MASK); 2344 2360 mt_set_external_lock(&mt_detach, &mm->mmap_lock); ··· 2385 2399 if (error) 2386 2400 goto end_split_failed; 2387 2401 } 2388 - error = munmap_sidetree(next, &mas_detach); 2389 - if (error) 2390 - goto munmap_sidetree_failed; 2402 + vma_start_write(next); 2403 + mas_set_range(&mas_detach, next->vm_start, next->vm_end - 1); 2404 + if (mas_store_gfp(&mas_detach, next, GFP_KERNEL)) 2405 + goto munmap_gather_failed; 2406 + vma_mark_detached(next, true); 2407 + if (next->vm_flags & VM_LOCKED) 2408 + locked_vm += vma_pages(next); 2391 2409 2392 2410 count++; 2393 2411 #ifdef CONFIG_DEBUG_VM_MAPLE_TREE ··· 2437 2447 } 2438 2448 #endif 2439 2449 /* Point of no return */ 2450 + error = -ENOMEM; 2440 2451 vma_iter_set(vmi, start); 2441 2452 if (vma_iter_clear_gfp(vmi, start, end, GFP_KERNEL)) 2442 - return -ENOMEM; 2453 + goto clear_tree_failed; 2443 2454 2455 + mm->locked_vm -= locked_vm; 2444 2456 mm->map_count -= count; 2445 2457 /* 2446 2458 * Do not downgrade mmap_lock if we are next to VM_GROWSDOWN or ··· 2472 2480 validate_mm(mm); 2473 2481 return downgrade ? 1 : 0; 2474 2482 2483 + clear_tree_failed: 2475 2484 userfaultfd_error: 2476 - munmap_sidetree_failed: 2485 + munmap_gather_failed: 2477 2486 end_split_failed: 2487 + mas_set(&mas_detach, 0); 2488 + mas_for_each(&mas_detach, next, end) 2489 + vma_mark_detached(next, false); 2490 + 2478 2491 __mt_destroy(&mt_detach); 2479 2492 start_split_failed: 2480 2493 map_count_exceeded:
+1 -1
mm/mprotect.c
··· 867 867 } 868 868 tlb_finish_mmu(&tlb); 869 869 870 - if (!error && vma_iter_end(&vmi) < end) 870 + if (!error && tmp < end) 871 871 error = -ENOMEM; 872 872 873 873 out:
+24 -15
mm/shrinker_debug.c
··· 5 5 #include <linux/seq_file.h> 6 6 #include <linux/shrinker.h> 7 7 #include <linux/memcontrol.h> 8 - #include <linux/srcu.h> 9 8 10 9 /* defined in vmscan.c */ 11 - extern struct mutex shrinker_mutex; 10 + extern struct rw_semaphore shrinker_rwsem; 12 11 extern struct list_head shrinker_list; 13 - extern struct srcu_struct shrinker_srcu; 14 12 15 13 static DEFINE_IDA(shrinker_debugfs_ida); 16 14 static struct dentry *shrinker_debugfs_root; ··· 49 51 struct mem_cgroup *memcg; 50 52 unsigned long total; 51 53 bool memcg_aware; 52 - int ret = 0, nid, srcu_idx; 54 + int ret, nid; 53 55 54 56 count_per_node = kcalloc(nr_node_ids, sizeof(unsigned long), GFP_KERNEL); 55 57 if (!count_per_node) 56 58 return -ENOMEM; 57 59 58 - srcu_idx = srcu_read_lock(&shrinker_srcu); 60 + ret = down_read_killable(&shrinker_rwsem); 61 + if (ret) { 62 + kfree(count_per_node); 63 + return ret; 64 + } 65 + rcu_read_lock(); 59 66 60 67 memcg_aware = shrinker->flags & SHRINKER_MEMCG_AWARE; 61 68 ··· 91 88 } 92 89 } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); 93 90 94 - srcu_read_unlock(&shrinker_srcu, srcu_idx); 91 + rcu_read_unlock(); 92 + up_read(&shrinker_rwsem); 95 93 96 94 kfree(count_per_node); 97 95 return ret; ··· 115 111 .gfp_mask = GFP_KERNEL, 116 112 }; 117 113 struct mem_cgroup *memcg = NULL; 118 - int nid, srcu_idx; 114 + int nid; 119 115 char kbuf[72]; 116 + ssize_t ret; 120 117 121 118 read_len = size < (sizeof(kbuf) - 1) ? size : (sizeof(kbuf) - 1); 122 119 if (copy_from_user(kbuf, buf, read_len)) ··· 146 141 return -EINVAL; 147 142 } 148 143 149 - srcu_idx = srcu_read_lock(&shrinker_srcu); 144 + ret = down_read_killable(&shrinker_rwsem); 145 + if (ret) { 146 + mem_cgroup_put(memcg); 147 + return ret; 148 + } 150 149 151 150 sc.nid = nid; 152 151 sc.memcg = memcg; ··· 159 150 160 151 shrinker->scan_objects(shrinker, &sc); 161 152 162 - srcu_read_unlock(&shrinker_srcu, srcu_idx); 153 + up_read(&shrinker_rwsem); 163 154 mem_cgroup_put(memcg); 164 155 165 156 return size; ··· 177 168 char buf[128]; 178 169 int id; 179 170 180 - lockdep_assert_held(&shrinker_mutex); 171 + lockdep_assert_held(&shrinker_rwsem); 181 172 182 173 /* debugfs isn't initialized yet, add debugfs entries later. */ 183 174 if (!shrinker_debugfs_root) ··· 220 211 if (!new) 221 212 return -ENOMEM; 222 213 223 - mutex_lock(&shrinker_mutex); 214 + down_write(&shrinker_rwsem); 224 215 225 216 old = shrinker->name; 226 217 shrinker->name = new; ··· 238 229 shrinker->debugfs_entry = entry; 239 230 } 240 231 241 - mutex_unlock(&shrinker_mutex); 232 + up_write(&shrinker_rwsem); 242 233 243 234 kfree_const(old); 244 235 ··· 251 242 { 252 243 struct dentry *entry = shrinker->debugfs_entry; 253 244 254 - lockdep_assert_held(&shrinker_mutex); 245 + lockdep_assert_held(&shrinker_rwsem); 255 246 256 247 kfree_const(shrinker->name); 257 248 shrinker->name = NULL; ··· 280 271 shrinker_debugfs_root = dentry; 281 272 282 273 /* Create debugfs entries for shrinkers registered at boot */ 283 - mutex_lock(&shrinker_mutex); 274 + down_write(&shrinker_rwsem); 284 275 list_for_each_entry(shrinker, &shrinker_list, list) 285 276 if (!shrinker->debugfs_entry) { 286 277 ret = shrinker_debugfs_add(shrinker); 287 278 if (ret) 288 279 break; 289 280 } 290 - mutex_unlock(&shrinker_mutex); 281 + up_write(&shrinker_rwsem); 291 282 292 283 return ret; 293 284 }
+13 -4
mm/vmalloc.c
··· 3098 3098 * allocation request, free them via vfree() if any. 3099 3099 */ 3100 3100 if (area->nr_pages != nr_small_pages) { 3101 - /* vm_area_alloc_pages() can also fail due to a fatal signal */ 3102 - if (!fatal_signal_pending(current)) 3101 + /* 3102 + * vm_area_alloc_pages() can fail due to insufficient memory but 3103 + * also:- 3104 + * 3105 + * - a pending fatal signal 3106 + * - insufficient huge page-order pages 3107 + * 3108 + * Since we always retry allocations at order-0 in the huge page 3109 + * case a warning for either is spurious. 3110 + */ 3111 + if (!fatal_signal_pending(current) && page_order == 0) 3103 3112 warn_alloc(gfp_mask, NULL, 3104 - "vmalloc error: size %lu, page order %u, failed to allocate pages", 3105 - area->nr_pages * PAGE_SIZE, page_order); 3113 + "vmalloc error: size %lu, failed to allocate pages", 3114 + area->nr_pages * PAGE_SIZE); 3106 3115 goto fail; 3107 3116 } 3108 3117
+55 -70
mm/vmscan.c
··· 35 35 #include <linux/cpuset.h> 36 36 #include <linux/compaction.h> 37 37 #include <linux/notifier.h> 38 - #include <linux/mutex.h> 38 + #include <linux/rwsem.h> 39 39 #include <linux/delay.h> 40 40 #include <linux/kthread.h> 41 41 #include <linux/freezer.h> ··· 57 57 #include <linux/khugepaged.h> 58 58 #include <linux/rculist_nulls.h> 59 59 #include <linux/random.h> 60 - #include <linux/srcu.h> 61 60 62 61 #include <asm/tlbflush.h> 63 62 #include <asm/div64.h> ··· 189 190 int vm_swappiness = 60; 190 191 191 192 LIST_HEAD(shrinker_list); 192 - DEFINE_MUTEX(shrinker_mutex); 193 - DEFINE_SRCU(shrinker_srcu); 194 - static atomic_t shrinker_srcu_generation = ATOMIC_INIT(0); 193 + DECLARE_RWSEM(shrinker_rwsem); 195 194 196 195 #ifdef CONFIG_MEMCG 197 196 static int shrinker_nr_max; ··· 208 211 static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, 209 212 int nid) 210 213 { 211 - return srcu_dereference_check(memcg->nodeinfo[nid]->shrinker_info, 212 - &shrinker_srcu, 213 - lockdep_is_held(&shrinker_mutex)); 214 - } 215 - 216 - static struct shrinker_info *shrinker_info_srcu(struct mem_cgroup *memcg, 217 - int nid) 218 - { 219 - return srcu_dereference(memcg->nodeinfo[nid]->shrinker_info, 220 - &shrinker_srcu); 221 - } 222 - 223 - static void free_shrinker_info_rcu(struct rcu_head *head) 224 - { 225 - kvfree(container_of(head, struct shrinker_info, rcu)); 214 + return rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_info, 215 + lockdep_is_held(&shrinker_rwsem)); 226 216 } 227 217 228 218 static int expand_one_shrinker_info(struct mem_cgroup *memcg, ··· 250 266 defer_size - old_defer_size); 251 267 252 268 rcu_assign_pointer(pn->shrinker_info, new); 253 - call_srcu(&shrinker_srcu, &old->rcu, free_shrinker_info_rcu); 269 + kvfree_rcu(old, rcu); 254 270 } 255 271 256 272 return 0; ··· 276 292 int nid, size, ret = 0; 277 293 int map_size, defer_size = 0; 278 294 279 - mutex_lock(&shrinker_mutex); 295 + down_write(&shrinker_rwsem); 280 296 map_size = shrinker_map_size(shrinker_nr_max); 281 297 defer_size = shrinker_defer_size(shrinker_nr_max); 282 298 size = map_size + defer_size; ··· 292 308 info->map_nr_max = shrinker_nr_max; 293 309 rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_info, info); 294 310 } 295 - mutex_unlock(&shrinker_mutex); 311 + up_write(&shrinker_rwsem); 296 312 297 313 return ret; 298 314 } ··· 308 324 if (!root_mem_cgroup) 309 325 goto out; 310 326 311 - lockdep_assert_held(&shrinker_mutex); 327 + lockdep_assert_held(&shrinker_rwsem); 312 328 313 329 map_size = shrinker_map_size(new_nr_max); 314 330 defer_size = shrinker_defer_size(new_nr_max); ··· 336 352 { 337 353 if (shrinker_id >= 0 && memcg && !mem_cgroup_is_root(memcg)) { 338 354 struct shrinker_info *info; 339 - int srcu_idx; 340 355 341 - srcu_idx = srcu_read_lock(&shrinker_srcu); 342 - info = shrinker_info_srcu(memcg, nid); 356 + rcu_read_lock(); 357 + info = rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); 343 358 if (!WARN_ON_ONCE(shrinker_id >= info->map_nr_max)) { 344 359 /* Pairs with smp mb in shrink_slab() */ 345 360 smp_mb__before_atomic(); 346 361 set_bit(shrinker_id, info->map); 347 362 } 348 - srcu_read_unlock(&shrinker_srcu, srcu_idx); 363 + rcu_read_unlock(); 349 364 } 350 365 } 351 366 ··· 357 374 if (mem_cgroup_disabled()) 358 375 return -ENOSYS; 359 376 360 - mutex_lock(&shrinker_mutex); 377 + down_write(&shrinker_rwsem); 378 + /* This may call shrinker, so it must use down_read_trylock() */ 361 379 id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL); 362 380 if (id < 0) 363 381 goto unlock; ··· 372 388 shrinker->id = id; 373 389 ret = 0; 374 390 unlock: 375 - mutex_unlock(&shrinker_mutex); 391 + up_write(&shrinker_rwsem); 376 392 return ret; 377 393 } 378 394 ··· 382 398 383 399 BUG_ON(id < 0); 384 400 385 - lockdep_assert_held(&shrinker_mutex); 401 + lockdep_assert_held(&shrinker_rwsem); 386 402 387 403 idr_remove(&shrinker_idr, id); 388 404 } ··· 392 408 { 393 409 struct shrinker_info *info; 394 410 395 - info = shrinker_info_srcu(memcg, nid); 411 + info = shrinker_info_protected(memcg, nid); 396 412 return atomic_long_xchg(&info->nr_deferred[shrinker->id], 0); 397 413 } 398 414 ··· 401 417 { 402 418 struct shrinker_info *info; 403 419 404 - info = shrinker_info_srcu(memcg, nid); 420 + info = shrinker_info_protected(memcg, nid); 405 421 return atomic_long_add_return(nr, &info->nr_deferred[shrinker->id]); 406 422 } 407 423 ··· 417 433 parent = root_mem_cgroup; 418 434 419 435 /* Prevent from concurrent shrinker_info expand */ 420 - mutex_lock(&shrinker_mutex); 436 + down_read(&shrinker_rwsem); 421 437 for_each_node(nid) { 422 438 child_info = shrinker_info_protected(memcg, nid); 423 439 parent_info = shrinker_info_protected(parent, nid); ··· 426 442 atomic_long_add(nr, &parent_info->nr_deferred[i]); 427 443 } 428 444 } 429 - mutex_unlock(&shrinker_mutex); 445 + up_read(&shrinker_rwsem); 430 446 } 431 447 432 448 static bool cgroup_reclaim(struct scan_control *sc) ··· 727 743 shrinker->name = NULL; 728 744 #endif 729 745 if (shrinker->flags & SHRINKER_MEMCG_AWARE) { 730 - mutex_lock(&shrinker_mutex); 746 + down_write(&shrinker_rwsem); 731 747 unregister_memcg_shrinker(shrinker); 732 - mutex_unlock(&shrinker_mutex); 748 + up_write(&shrinker_rwsem); 733 749 return; 734 750 } 735 751 ··· 739 755 740 756 void register_shrinker_prepared(struct shrinker *shrinker) 741 757 { 742 - mutex_lock(&shrinker_mutex); 743 - list_add_tail_rcu(&shrinker->list, &shrinker_list); 758 + down_write(&shrinker_rwsem); 759 + list_add_tail(&shrinker->list, &shrinker_list); 744 760 shrinker->flags |= SHRINKER_REGISTERED; 745 761 shrinker_debugfs_add(shrinker); 746 - mutex_unlock(&shrinker_mutex); 762 + up_write(&shrinker_rwsem); 747 763 } 748 764 749 765 static int __register_shrinker(struct shrinker *shrinker) ··· 794 810 if (!(shrinker->flags & SHRINKER_REGISTERED)) 795 811 return; 796 812 797 - mutex_lock(&shrinker_mutex); 798 - list_del_rcu(&shrinker->list); 813 + down_write(&shrinker_rwsem); 814 + list_del(&shrinker->list); 799 815 shrinker->flags &= ~SHRINKER_REGISTERED; 800 816 if (shrinker->flags & SHRINKER_MEMCG_AWARE) 801 817 unregister_memcg_shrinker(shrinker); 802 818 debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); 803 - mutex_unlock(&shrinker_mutex); 804 - 805 - atomic_inc(&shrinker_srcu_generation); 806 - synchronize_srcu(&shrinker_srcu); 819 + up_write(&shrinker_rwsem); 807 820 808 821 shrinker_debugfs_remove(debugfs_entry, debugfs_id); 809 822 ··· 812 831 /** 813 832 * synchronize_shrinkers - Wait for all running shrinkers to complete. 814 833 * 815 - * This is useful to guarantee that all shrinker invocations have seen an 816 - * update, before freeing memory. 834 + * This is equivalent to calling unregister_shrink() and register_shrinker(), 835 + * but atomically and with less overhead. This is useful to guarantee that all 836 + * shrinker invocations have seen an update, before freeing memory, similar to 837 + * rcu. 817 838 */ 818 839 void synchronize_shrinkers(void) 819 840 { 820 - atomic_inc(&shrinker_srcu_generation); 821 - synchronize_srcu(&shrinker_srcu); 841 + down_write(&shrinker_rwsem); 842 + up_write(&shrinker_rwsem); 822 843 } 823 844 EXPORT_SYMBOL(synchronize_shrinkers); 824 845 ··· 929 946 { 930 947 struct shrinker_info *info; 931 948 unsigned long ret, freed = 0; 932 - int srcu_idx, generation; 933 - int i = 0; 949 + int i; 934 950 935 951 if (!mem_cgroup_online(memcg)) 936 952 return 0; 937 953 938 - again: 939 - srcu_idx = srcu_read_lock(&shrinker_srcu); 940 - info = shrinker_info_srcu(memcg, nid); 954 + if (!down_read_trylock(&shrinker_rwsem)) 955 + return 0; 956 + 957 + info = shrinker_info_protected(memcg, nid); 941 958 if (unlikely(!info)) 942 959 goto unlock; 943 960 944 - generation = atomic_read(&shrinker_srcu_generation); 945 - for_each_set_bit_from(i, info->map, info->map_nr_max) { 961 + for_each_set_bit(i, info->map, info->map_nr_max) { 946 962 struct shrink_control sc = { 947 963 .gfp_mask = gfp_mask, 948 964 .nid = nid, ··· 987 1005 set_shrinker_bit(memcg, nid, i); 988 1006 } 989 1007 freed += ret; 990 - if (atomic_read(&shrinker_srcu_generation) != generation) { 991 - srcu_read_unlock(&shrinker_srcu, srcu_idx); 992 - i++; 993 - goto again; 1008 + 1009 + if (rwsem_is_contended(&shrinker_rwsem)) { 1010 + freed = freed ? : 1; 1011 + break; 994 1012 } 995 1013 } 996 1014 unlock: 997 - srcu_read_unlock(&shrinker_srcu, srcu_idx); 1015 + up_read(&shrinker_rwsem); 998 1016 return freed; 999 1017 } 1000 1018 #else /* CONFIG_MEMCG */ ··· 1031 1049 { 1032 1050 unsigned long ret, freed = 0; 1033 1051 struct shrinker *shrinker; 1034 - int srcu_idx, generation; 1035 1052 1036 1053 /* 1037 1054 * The root memcg might be allocated even though memcg is disabled ··· 1042 1061 if (!mem_cgroup_disabled() && !mem_cgroup_is_root(memcg)) 1043 1062 return shrink_slab_memcg(gfp_mask, nid, memcg, priority); 1044 1063 1045 - srcu_idx = srcu_read_lock(&shrinker_srcu); 1064 + if (!down_read_trylock(&shrinker_rwsem)) 1065 + goto out; 1046 1066 1047 - generation = atomic_read(&shrinker_srcu_generation); 1048 - list_for_each_entry_srcu(shrinker, &shrinker_list, list, 1049 - srcu_read_lock_held(&shrinker_srcu)) { 1067 + list_for_each_entry(shrinker, &shrinker_list, list) { 1050 1068 struct shrink_control sc = { 1051 1069 .gfp_mask = gfp_mask, 1052 1070 .nid = nid, ··· 1056 1076 if (ret == SHRINK_EMPTY) 1057 1077 ret = 0; 1058 1078 freed += ret; 1059 - 1060 - if (atomic_read(&shrinker_srcu_generation) != generation) { 1079 + /* 1080 + * Bail out if someone want to register a new shrinker to 1081 + * prevent the registration from being stalled for long periods 1082 + * by parallel ongoing shrinking. 1083 + */ 1084 + if (rwsem_is_contended(&shrinker_rwsem)) { 1061 1085 freed = freed ? : 1; 1062 1086 break; 1063 1087 } 1064 1088 } 1065 1089 1066 - srcu_read_unlock(&shrinker_srcu, srcu_idx); 1090 + up_read(&shrinker_rwsem); 1091 + out: 1067 1092 cond_resched(); 1068 1093 return freed; 1069 1094 }
-6
net/core/sock.c
··· 1373 1373 __sock_set_mark(sk, val); 1374 1374 break; 1375 1375 case SO_RCVMARK: 1376 - if (!sockopt_ns_capable(sock_net(sk)->user_ns, CAP_NET_RAW) && 1377 - !sockopt_ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) { 1378 - ret = -EPERM; 1379 - break; 1380 - } 1381 - 1382 1376 sock_valbool_flag(sk, SOCK_RCVMARK, valbool); 1383 1377 break; 1384 1378
+23 -1
net/dsa/dsa.c
··· 403 403 return 0; 404 404 } 405 405 406 + static struct dsa_port * 407 + dsa_switch_preferred_default_local_cpu_port(struct dsa_switch *ds) 408 + { 409 + struct dsa_port *cpu_dp; 410 + 411 + if (!ds->ops->preferred_default_local_cpu_port) 412 + return NULL; 413 + 414 + cpu_dp = ds->ops->preferred_default_local_cpu_port(ds); 415 + if (!cpu_dp) 416 + return NULL; 417 + 418 + if (WARN_ON(!dsa_port_is_cpu(cpu_dp) || cpu_dp->ds != ds)) 419 + return NULL; 420 + 421 + return cpu_dp; 422 + } 423 + 406 424 /* Perform initial assignment of CPU ports to user ports and DSA links in the 407 425 * fabric, giving preference to CPU ports local to each switch. Default to 408 426 * using the first CPU port in the switch tree if the port does not have a CPU ··· 428 410 */ 429 411 static int dsa_tree_setup_cpu_ports(struct dsa_switch_tree *dst) 430 412 { 431 - struct dsa_port *cpu_dp, *dp; 413 + struct dsa_port *preferred_cpu_dp, *cpu_dp, *dp; 432 414 433 415 list_for_each_entry(cpu_dp, &dst->ports, list) { 434 416 if (!dsa_port_is_cpu(cpu_dp)) 417 + continue; 418 + 419 + preferred_cpu_dp = dsa_switch_preferred_default_local_cpu_port(cpu_dp->ds); 420 + if (preferred_cpu_dp && preferred_cpu_dp != cpu_dp) 435 421 continue; 436 422 437 423 /* Prefer a local CPU port */
+1 -1
net/ieee802154/trace.h
··· 13 13 14 14 #define MAXNAME 32 15 15 #define WPAN_PHY_ENTRY __array(char, wpan_phy_name, MAXNAME) 16 - #define WPAN_PHY_ASSIGN strlcpy(__entry->wpan_phy_name, \ 16 + #define WPAN_PHY_ASSIGN strscpy(__entry->wpan_phy_name, \ 17 17 wpan_phy_name(wpan_phy), \ 18 18 MAXNAME) 19 19 #define WPAN_PHY_PR_FMT "%s"
+3
net/ipv4/esp4_offload.c
··· 341 341 342 342 secpath_reset(skb); 343 343 344 + if (skb_needs_linearize(skb, skb->dev->features) && 345 + __skb_linearize(skb)) 346 + return -ENOMEM; 344 347 return 0; 345 348 } 346 349
+1
net/ipv4/xfrm4_input.c
··· 164 164 kfree_skb(skb); 165 165 return 0; 166 166 } 167 + EXPORT_SYMBOL(xfrm4_udp_encap_rcv); 167 168 168 169 int xfrm4_rcv(struct sk_buff *skb) 169 170 {
+3
net/ipv6/esp6_offload.c
··· 375 375 376 376 secpath_reset(skb); 377 377 378 + if (skb_needs_linearize(skb, skb->dev->features) && 379 + __skb_linearize(skb)) 380 + return -ENOMEM; 378 381 return 0; 379 382 } 380 383
+3
net/ipv6/xfrm6_input.c
··· 86 86 __be32 *udpdata32; 87 87 __u16 encap_type = up->encap_type; 88 88 89 + if (skb->protocol == htons(ETH_P_IP)) 90 + return xfrm4_udp_encap_rcv(sk, skb); 91 + 89 92 /* if this is not encapsulated socket, then just return now */ 90 93 if (!encap_type) 91 94 return 1;
+1 -1
net/mac80211/rx.c
··· 2110 2110 /* either the frame has been decrypted or will be dropped */ 2111 2111 status->flag |= RX_FLAG_DECRYPTED; 2112 2112 2113 - if (unlikely(ieee80211_is_beacon(fc) && result == RX_DROP_UNUSABLE && 2113 + if (unlikely(ieee80211_is_beacon(fc) && (result & RX_DROP_UNUSABLE) && 2114 2114 rx->sdata->dev)) 2115 2115 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, 2116 2116 skb->data, skb->len);
+1 -1
net/mac802154/trace.h
··· 14 14 15 15 #define MAXNAME 32 16 16 #define LOCAL_ENTRY __array(char, wpan_phy_name, MAXNAME) 17 - #define LOCAL_ASSIGN strlcpy(__entry->wpan_phy_name, \ 17 + #define LOCAL_ASSIGN strscpy(__entry->wpan_phy_name, \ 18 18 wpan_phy_name(local->hw.phy), MAXNAME) 19 19 #define LOCAL_PR_FMT "%s" 20 20 #define LOCAL_PR_ARG __entry->wpan_phy_name
+1
net/mptcp/pm_netlink.c
··· 1046 1046 if (err) 1047 1047 return err; 1048 1048 1049 + inet_sk_state_store(newsk, TCP_LISTEN); 1049 1050 err = kernel_listen(ssock, backlog); 1050 1051 if (err) 1051 1052 return err;
+64 -96
net/mptcp/protocol.c
··· 44 44 static struct percpu_counter mptcp_sockets_allocated ____cacheline_aligned_in_smp; 45 45 46 46 static void __mptcp_destroy_sock(struct sock *sk); 47 - static void __mptcp_check_send_data_fin(struct sock *sk); 47 + static void mptcp_check_send_data_fin(struct sock *sk); 48 48 49 49 DEFINE_PER_CPU(struct mptcp_delegated_action, mptcp_delegated_actions); 50 50 static struct net_device mptcp_napi_dev; ··· 426 426 { 427 427 struct mptcp_sock *msk = mptcp_sk(sk); 428 428 429 - return !__mptcp_check_fallback(msk) && 430 - ((1 << sk->sk_state) & 429 + return ((1 << sk->sk_state) & 431 430 (TCPF_FIN_WAIT1 | TCPF_CLOSING | TCPF_LAST_ACK)) && 432 431 msk->write_seq == READ_ONCE(msk->snd_una); 433 432 } ··· 584 585 u64 rcv_data_fin_seq; 585 586 bool ret = false; 586 587 587 - if (__mptcp_check_fallback(msk)) 588 - return ret; 589 - 590 588 /* Need to ack a DATA_FIN received from a peer while this side 591 589 * of the connection is in ESTABLISHED, FIN_WAIT1, or FIN_WAIT2. 592 590 * msk->rcv_data_fin was set when parsing the incoming options ··· 621 625 } 622 626 623 627 ret = true; 624 - mptcp_send_ack(msk); 628 + if (!__mptcp_check_fallback(msk)) 629 + mptcp_send_ack(msk); 625 630 mptcp_close_wake_up(sk); 626 631 } 627 632 return ret; ··· 851 854 return true; 852 855 } 853 856 854 - static void __mptcp_flush_join_list(struct sock *sk) 857 + static void __mptcp_flush_join_list(struct sock *sk, struct list_head *join_list) 855 858 { 856 859 struct mptcp_subflow_context *tmp, *subflow; 857 860 struct mptcp_sock *msk = mptcp_sk(sk); 858 861 859 - list_for_each_entry_safe(subflow, tmp, &msk->join_list, node) { 862 + list_for_each_entry_safe(subflow, tmp, join_list, node) { 860 863 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); 861 864 bool slow = lock_sock_fast(ssk); 862 865 ··· 896 899 return true; 897 900 } 898 901 return false; 899 - } 900 - 901 - void mptcp_subflow_eof(struct sock *sk) 902 - { 903 - if (!test_and_set_bit(MPTCP_WORK_EOF, &mptcp_sk(sk)->flags)) 904 - mptcp_schedule_work(sk); 905 - } 906 - 907 - static void mptcp_check_for_eof(struct mptcp_sock *msk) 908 - { 909 - struct mptcp_subflow_context *subflow; 910 - struct sock *sk = (struct sock *)msk; 911 - int receivers = 0; 912 - 913 - mptcp_for_each_subflow(msk, subflow) 914 - receivers += !subflow->rx_eof; 915 - if (receivers) 916 - return; 917 - 918 - if (!(sk->sk_shutdown & RCV_SHUTDOWN)) { 919 - /* hopefully temporary hack: propagate shutdown status 920 - * to msk, when all subflows agree on it 921 - */ 922 - WRITE_ONCE(sk->sk_shutdown, sk->sk_shutdown | RCV_SHUTDOWN); 923 - 924 - smp_mb__before_atomic(); /* SHUTDOWN must be visible first */ 925 - sk->sk_data_ready(sk); 926 - } 927 - 928 - switch (sk->sk_state) { 929 - case TCP_ESTABLISHED: 930 - inet_sk_state_store(sk, TCP_CLOSE_WAIT); 931 - break; 932 - case TCP_FIN_WAIT1: 933 - inet_sk_state_store(sk, TCP_CLOSING); 934 - break; 935 - case TCP_FIN_WAIT2: 936 - inet_sk_state_store(sk, TCP_CLOSE); 937 - break; 938 - default: 939 - return; 940 - } 941 - mptcp_close_wake_up(sk); 942 902 } 943 903 944 904 static struct sock *mptcp_subflow_recv_lookup(const struct mptcp_sock *msk) ··· 1563 1609 if (!mptcp_timer_pending(sk)) 1564 1610 mptcp_reset_timer(sk); 1565 1611 if (do_check_data_fin) 1566 - __mptcp_check_send_data_fin(sk); 1612 + mptcp_check_send_data_fin(sk); 1567 1613 } 1568 1614 1569 1615 static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk, bool first) ··· 1681 1727 if (ret && ret != -EINPROGRESS && ret != -ERESTARTSYS && ret != -EINTR) 1682 1728 *copied_syn = 0; 1683 1729 } else if (ret && ret != -EINPROGRESS) { 1684 - mptcp_disconnect(sk, 0); 1730 + /* The disconnect() op called by tcp_sendmsg_fastopen()/ 1731 + * __inet_stream_connect() can fail, due to looking check, 1732 + * see mptcp_disconnect(). 1733 + * Attempt it again outside the problematic scope. 1734 + */ 1735 + if (!mptcp_disconnect(sk, 0)) 1736 + sk->sk_socket->state = SS_UNCONNECTED; 1685 1737 } 1686 1738 inet_sk(sk)->defer_connect = 0; 1687 1739 ··· 2118 2158 break; 2119 2159 } 2120 2160 2121 - if (test_and_clear_bit(MPTCP_WORK_EOF, &msk->flags)) 2122 - mptcp_check_for_eof(msk); 2123 - 2124 2161 if (sk->sk_shutdown & RCV_SHUTDOWN) { 2125 2162 /* race breaker: the shutdown could be after the 2126 2163 * previous receive queue check ··· 2346 2389 2347 2390 need_push = (flags & MPTCP_CF_PUSH) && __mptcp_retransmit_pending_data(sk); 2348 2391 if (!dispose_it) { 2349 - tcp_disconnect(ssk, 0); 2392 + /* The MPTCP code never wait on the subflow sockets, TCP-level 2393 + * disconnect should never fail 2394 + */ 2395 + WARN_ON_ONCE(tcp_disconnect(ssk, 0)); 2350 2396 msk->subflow->state = SS_UNCONNECTED; 2351 2397 mptcp_subflow_ctx_reset(subflow); 2352 2398 release_sock(ssk); ··· 2368 2408 kfree_rcu(subflow, rcu); 2369 2409 } else { 2370 2410 /* otherwise tcp will dispose of the ssk and subflow ctx */ 2371 - if (ssk->sk_state == TCP_LISTEN) { 2372 - tcp_set_state(ssk, TCP_CLOSE); 2373 - mptcp_subflow_queue_clean(sk, ssk); 2374 - inet_csk_listen_stop(ssk); 2375 - mptcp_event_pm_listener(ssk, MPTCP_EVENT_LISTENER_CLOSED); 2376 - } 2377 - 2378 2411 __tcp_close(ssk, 0); 2379 2412 2380 2413 /* close acquired an extra ref */ ··· 2626 2673 if (unlikely((1 << state) & (TCPF_CLOSE | TCPF_LISTEN))) 2627 2674 goto unlock; 2628 2675 2629 - mptcp_check_data_fin_ack(sk); 2630 - 2631 2676 mptcp_check_fastclose(msk); 2632 2677 2633 2678 mptcp_pm_nl_work(msk); 2634 2679 2635 - if (test_and_clear_bit(MPTCP_WORK_EOF, &msk->flags)) 2636 - mptcp_check_for_eof(msk); 2637 - 2638 - __mptcp_check_send_data_fin(sk); 2680 + mptcp_check_send_data_fin(sk); 2681 + mptcp_check_data_fin_ack(sk); 2639 2682 mptcp_check_data_fin(sk); 2640 2683 2641 2684 if (test_and_clear_bit(MPTCP_WORK_CLOSE_SUBFLOW, &msk->flags)) ··· 2763 2814 break; 2764 2815 fallthrough; 2765 2816 case TCP_SYN_SENT: 2766 - tcp_disconnect(ssk, O_NONBLOCK); 2817 + WARN_ON_ONCE(tcp_disconnect(ssk, O_NONBLOCK)); 2767 2818 break; 2768 2819 default: 2769 2820 if (__mptcp_check_fallback(mptcp_sk(sk))) { 2770 2821 pr_debug("Fallback"); 2771 2822 ssk->sk_shutdown |= how; 2772 2823 tcp_shutdown(ssk, how); 2824 + 2825 + /* simulate the data_fin ack reception to let the state 2826 + * machine move forward 2827 + */ 2828 + WRITE_ONCE(mptcp_sk(sk)->snd_una, mptcp_sk(sk)->snd_nxt); 2829 + mptcp_schedule_work(sk); 2773 2830 } else { 2774 2831 pr_debug("Sending DATA_FIN on subflow %p", ssk); 2775 2832 tcp_send_ack(ssk); ··· 2815 2860 return next & TCP_ACTION_FIN; 2816 2861 } 2817 2862 2818 - static void __mptcp_check_send_data_fin(struct sock *sk) 2863 + static void mptcp_check_send_data_fin(struct sock *sk) 2819 2864 { 2820 2865 struct mptcp_subflow_context *subflow; 2821 2866 struct mptcp_sock *msk = mptcp_sk(sk); ··· 2832 2877 return; 2833 2878 2834 2879 WRITE_ONCE(msk->snd_nxt, msk->write_seq); 2835 - 2836 - /* fallback socket will not get data_fin/ack, can move to the next 2837 - * state now 2838 - */ 2839 - if (__mptcp_check_fallback(msk)) { 2840 - WRITE_ONCE(msk->snd_una, msk->write_seq); 2841 - if ((1 << sk->sk_state) & (TCPF_CLOSING | TCPF_LAST_ACK)) { 2842 - inet_sk_state_store(sk, TCP_CLOSE); 2843 - mptcp_close_wake_up(sk); 2844 - } else if (sk->sk_state == TCP_FIN_WAIT1) { 2845 - inet_sk_state_store(sk, TCP_FIN_WAIT2); 2846 - } 2847 - } 2848 2880 2849 2881 mptcp_for_each_subflow(msk, subflow) { 2850 2882 struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow); ··· 2852 2910 WRITE_ONCE(msk->write_seq, msk->write_seq + 1); 2853 2911 WRITE_ONCE(msk->snd_data_fin_enable, 1); 2854 2912 2855 - __mptcp_check_send_data_fin(sk); 2913 + mptcp_check_send_data_fin(sk); 2856 2914 } 2857 2915 2858 2916 static void __mptcp_destroy_sock(struct sock *sk) ··· 2896 2954 return EPOLLIN | EPOLLRDNORM; 2897 2955 } 2898 2956 2899 - static void mptcp_listen_inuse_dec(struct sock *sk) 2957 + static void mptcp_check_listen_stop(struct sock *sk) 2900 2958 { 2901 - if (inet_sk_state_load(sk) == TCP_LISTEN) 2902 - sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); 2959 + struct sock *ssk; 2960 + 2961 + if (inet_sk_state_load(sk) != TCP_LISTEN) 2962 + return; 2963 + 2964 + sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); 2965 + ssk = mptcp_sk(sk)->first; 2966 + if (WARN_ON_ONCE(!ssk || inet_sk_state_load(ssk) != TCP_LISTEN)) 2967 + return; 2968 + 2969 + lock_sock_nested(ssk, SINGLE_DEPTH_NESTING); 2970 + mptcp_subflow_queue_clean(sk, ssk); 2971 + inet_csk_listen_stop(ssk); 2972 + mptcp_event_pm_listener(ssk, MPTCP_EVENT_LISTENER_CLOSED); 2973 + tcp_set_state(ssk, TCP_CLOSE); 2974 + release_sock(ssk); 2903 2975 } 2904 2976 2905 2977 bool __mptcp_close(struct sock *sk, long timeout) ··· 2926 2970 WRITE_ONCE(sk->sk_shutdown, SHUTDOWN_MASK); 2927 2971 2928 2972 if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE)) { 2929 - mptcp_listen_inuse_dec(sk); 2973 + mptcp_check_listen_stop(sk); 2930 2974 inet_sk_state_store(sk, TCP_CLOSE); 2931 2975 goto cleanup; 2932 2976 } ··· 3029 3073 { 3030 3074 struct mptcp_sock *msk = mptcp_sk(sk); 3031 3075 3076 + /* Deny disconnect if other threads are blocked in sk_wait_event() 3077 + * or inet_wait_for_connect(). 3078 + */ 3079 + if (sk->sk_wait_pending) 3080 + return -EBUSY; 3081 + 3032 3082 /* We are on the fastopen error path. We can't call straight into the 3033 3083 * subflows cleanup code due to lock nesting (we are already under 3034 - * msk->firstsocket lock). Do nothing and leave the cleanup to the 3035 - * caller. 3084 + * msk->firstsocket lock). 3036 3085 */ 3037 3086 if (msk->fastopening) 3038 - return 0; 3087 + return -EBUSY; 3039 3088 3040 - mptcp_listen_inuse_dec(sk); 3089 + mptcp_check_listen_stop(sk); 3041 3090 inet_sk_state_store(sk, TCP_CLOSE); 3042 3091 3043 3092 mptcp_stop_timer(sk); ··· 3105 3144 inet_sk(nsk)->pinet6 = mptcp_inet6_sk(nsk); 3106 3145 #endif 3107 3146 3147 + nsk->sk_wait_pending = 0; 3108 3148 __mptcp_init_sock(nsk); 3109 3149 3110 3150 msk = mptcp_sk(nsk); ··· 3296 3334 for (;;) { 3297 3335 unsigned long flags = (msk->cb_flags & MPTCP_FLAGS_PROCESS_CTX_NEED) | 3298 3336 msk->push_pending; 3337 + struct list_head join_list; 3338 + 3299 3339 if (!flags) 3300 3340 break; 3341 + 3342 + INIT_LIST_HEAD(&join_list); 3343 + list_splice_init(&msk->join_list, &join_list); 3301 3344 3302 3345 /* the following actions acquire the subflow socket lock 3303 3346 * ··· 3314 3347 msk->push_pending = 0; 3315 3348 msk->cb_flags &= ~flags; 3316 3349 spin_unlock_bh(&sk->sk_lock.slock); 3350 + 3317 3351 if (flags & BIT(MPTCP_FLUSH_JOIN_LIST)) 3318 - __mptcp_flush_join_list(sk); 3352 + __mptcp_flush_join_list(sk, &join_list); 3319 3353 if (flags & BIT(MPTCP_PUSH_PENDING)) 3320 3354 __mptcp_push_pending(sk, 0); 3321 3355 if (flags & BIT(MPTCP_RETRANSMIT))
+1 -4
net/mptcp/protocol.h
··· 113 113 /* MPTCP socket atomic flags */ 114 114 #define MPTCP_NOSPACE 1 115 115 #define MPTCP_WORK_RTX 2 116 - #define MPTCP_WORK_EOF 3 117 116 #define MPTCP_FALLBACK_DONE 4 118 117 #define MPTCP_WORK_CLOSE_SUBFLOW 5 119 118 ··· 480 481 send_mp_fail : 1, 481 482 send_fastclose : 1, 482 483 send_infinite_map : 1, 483 - rx_eof : 1, 484 484 remote_key_valid : 1, /* received the peer key from */ 485 485 disposable : 1, /* ctx can be free at ulp release time */ 486 486 stale : 1, /* unable to snd/rcv data, do not use for xmit */ 487 487 local_id_valid : 1, /* local_id is correctly initialized */ 488 488 valid_csum_seen : 1, /* at least one csum validated */ 489 489 is_mptfo : 1, /* subflow is doing TFO */ 490 - __unused : 8; 490 + __unused : 9; 491 491 enum mptcp_data_avail data_avail; 492 492 u32 remote_nonce; 493 493 u64 thmac; ··· 726 728 void __mptcp_check_push(struct sock *sk, struct sock *ssk); 727 729 void __mptcp_data_acked(struct sock *sk); 728 730 void __mptcp_error_report(struct sock *sk); 729 - void mptcp_subflow_eof(struct sock *sk); 730 731 bool mptcp_update_rcv_data_fin(struct mptcp_sock *msk, u64 data_fin_seq, bool use_64bit); 731 732 static inline bool mptcp_data_fin_enabled(const struct mptcp_sock *msk) 732 733 {
+10 -7
net/mptcp/subflow.c
··· 1751 1751 { 1752 1752 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); 1753 1753 struct sock *parent = subflow->conn; 1754 + struct mptcp_sock *msk; 1754 1755 1755 1756 __subflow_state_change(sk); 1756 1757 1758 + msk = mptcp_sk(parent); 1757 1759 if (subflow_simultaneous_connect(sk)) { 1758 1760 mptcp_propagate_sndbuf(parent, sk); 1759 1761 mptcp_do_fallback(sk); 1760 - mptcp_rcv_space_init(mptcp_sk(parent), sk); 1761 - pr_fallback(mptcp_sk(parent)); 1762 + mptcp_rcv_space_init(msk, sk); 1763 + pr_fallback(msk); 1762 1764 subflow->conn_finished = 1; 1763 1765 mptcp_set_connected(parent); 1764 1766 } ··· 1776 1774 1777 1775 subflow_sched_work_if_closed(mptcp_sk(parent), sk); 1778 1776 1779 - if (__mptcp_check_fallback(mptcp_sk(parent)) && 1780 - !subflow->rx_eof && subflow_is_done(sk)) { 1781 - subflow->rx_eof = 1; 1782 - mptcp_subflow_eof(parent); 1783 - } 1777 + /* when the fallback subflow closes the rx side, trigger a 'dummy' 1778 + * ingress data fin, so that the msk state will follow along 1779 + */ 1780 + if (__mptcp_check_fallback(msk) && subflow_is_done(sk) && msk->first == sk && 1781 + mptcp_update_rcv_data_fin(msk, READ_ONCE(msk->ack_seq), true)) 1782 + mptcp_schedule_work(parent); 1784 1783 } 1785 1784 1786 1785 void mptcp_subflow_queue_clean(struct sock *listener_sk, struct sock *listener_ssk)
+2
net/netfilter/ipvs/ip_vs_xmit.c
··· 1207 1207 skb->transport_header = skb->network_header; 1208 1208 1209 1209 skb_set_inner_ipproto(skb, next_protocol); 1210 + skb_set_inner_mac_header(skb, skb_inner_network_offset(skb)); 1210 1211 1211 1212 if (tun_type == IP_VS_CONN_F_TUNNEL_TYPE_GUE) { 1212 1213 bool check = false; ··· 1350 1349 skb->transport_header = skb->network_header; 1351 1350 1352 1351 skb_set_inner_ipproto(skb, next_protocol); 1352 + skb_set_inner_mac_header(skb, skb_inner_network_offset(skb)); 1353 1353 1354 1354 if (tun_type == IP_VS_CONN_F_TUNNEL_TYPE_GUE) { 1355 1355 bool check = false;
+295 -71
net/netfilter/nf_tables_api.c
··· 151 151 return NULL; 152 152 153 153 INIT_LIST_HEAD(&trans->list); 154 + INIT_LIST_HEAD(&trans->binding_list); 154 155 trans->msg_type = msg_type; 155 156 trans->ctx = *ctx; 156 157 ··· 164 163 return nft_trans_alloc_gfp(ctx, msg_type, size, GFP_KERNEL); 165 164 } 166 165 167 - static void nft_trans_destroy(struct nft_trans *trans) 166 + static void nft_trans_list_del(struct nft_trans *trans) 168 167 { 169 168 list_del(&trans->list); 169 + list_del(&trans->binding_list); 170 + } 171 + 172 + static void nft_trans_destroy(struct nft_trans *trans) 173 + { 174 + nft_trans_list_del(trans); 170 175 kfree(trans); 171 176 } 172 177 173 - static void nft_set_trans_bind(const struct nft_ctx *ctx, struct nft_set *set) 178 + static void __nft_set_trans_bind(const struct nft_ctx *ctx, struct nft_set *set, 179 + bool bind) 174 180 { 175 181 struct nftables_pernet *nft_net; 176 182 struct net *net = ctx->net; ··· 191 183 switch (trans->msg_type) { 192 184 case NFT_MSG_NEWSET: 193 185 if (nft_trans_set(trans) == set) 194 - nft_trans_set_bound(trans) = true; 186 + nft_trans_set_bound(trans) = bind; 195 187 break; 196 188 case NFT_MSG_NEWSETELEM: 197 189 if (nft_trans_elem_set(trans) == set) 198 - nft_trans_elem_set_bound(trans) = true; 190 + nft_trans_elem_set_bound(trans) = bind; 199 191 break; 200 192 } 201 193 } 194 + } 195 + 196 + static void nft_set_trans_bind(const struct nft_ctx *ctx, struct nft_set *set) 197 + { 198 + return __nft_set_trans_bind(ctx, set, true); 199 + } 200 + 201 + static void nft_set_trans_unbind(const struct nft_ctx *ctx, struct nft_set *set) 202 + { 203 + return __nft_set_trans_bind(ctx, set, false); 204 + } 205 + 206 + static void __nft_chain_trans_bind(const struct nft_ctx *ctx, 207 + struct nft_chain *chain, bool bind) 208 + { 209 + struct nftables_pernet *nft_net; 210 + struct net *net = ctx->net; 211 + struct nft_trans *trans; 212 + 213 + if (!nft_chain_binding(chain)) 214 + return; 215 + 216 + nft_net = nft_pernet(net); 217 + list_for_each_entry_reverse(trans, &nft_net->commit_list, list) { 218 + switch (trans->msg_type) { 219 + case NFT_MSG_NEWCHAIN: 220 + if (nft_trans_chain(trans) == chain) 221 + nft_trans_chain_bound(trans) = bind; 222 + break; 223 + case NFT_MSG_NEWRULE: 224 + if (trans->ctx.chain == chain) 225 + nft_trans_rule_bound(trans) = bind; 226 + break; 227 + } 228 + } 229 + } 230 + 231 + static void nft_chain_trans_bind(const struct nft_ctx *ctx, 232 + struct nft_chain *chain) 233 + { 234 + __nft_chain_trans_bind(ctx, chain, true); 235 + } 236 + 237 + int nf_tables_bind_chain(const struct nft_ctx *ctx, struct nft_chain *chain) 238 + { 239 + if (!nft_chain_binding(chain)) 240 + return 0; 241 + 242 + if (nft_chain_binding(ctx->chain)) 243 + return -EOPNOTSUPP; 244 + 245 + if (chain->bound) 246 + return -EBUSY; 247 + 248 + chain->bound = true; 249 + chain->use++; 250 + nft_chain_trans_bind(ctx, chain); 251 + 252 + return 0; 253 + } 254 + 255 + void nf_tables_unbind_chain(const struct nft_ctx *ctx, struct nft_chain *chain) 256 + { 257 + __nft_chain_trans_bind(ctx, chain, false); 202 258 } 203 259 204 260 static int nft_netdev_register_hooks(struct net *net, ··· 364 292 { 365 293 struct nftables_pernet *nft_net = nft_pernet(net); 366 294 295 + switch (trans->msg_type) { 296 + case NFT_MSG_NEWSET: 297 + if (!nft_trans_set_update(trans) && 298 + nft_set_is_anonymous(nft_trans_set(trans))) 299 + list_add_tail(&trans->binding_list, &nft_net->binding_list); 300 + break; 301 + case NFT_MSG_NEWCHAIN: 302 + if (!nft_trans_chain_update(trans) && 303 + nft_chain_binding(nft_trans_chain(trans))) 304 + list_add_tail(&trans->binding_list, &nft_net->binding_list); 305 + break; 306 + } 307 + 367 308 list_add_tail(&trans->list, &nft_net->commit_list); 368 309 } 369 310 ··· 423 338 ntohl(nla_get_be32(ctx->nla[NFTA_CHAIN_ID])); 424 339 } 425 340 } 426 - 341 + nft_trans_chain(trans) = ctx->chain; 427 342 nft_trans_commit_list_add_tail(ctx->net, trans); 343 + 428 344 return trans; 429 345 } 430 346 ··· 443 357 return 0; 444 358 } 445 359 446 - static void nft_rule_expr_activate(const struct nft_ctx *ctx, 447 - struct nft_rule *rule) 360 + void nft_rule_expr_activate(const struct nft_ctx *ctx, struct nft_rule *rule) 448 361 { 449 362 struct nft_expr *expr; 450 363 ··· 456 371 } 457 372 } 458 373 459 - static void nft_rule_expr_deactivate(const struct nft_ctx *ctx, 460 - struct nft_rule *rule, 461 - enum nft_trans_phase phase) 374 + void nft_rule_expr_deactivate(const struct nft_ctx *ctx, struct nft_rule *rule, 375 + enum nft_trans_phase phase) 462 376 { 463 377 struct nft_expr *expr; 464 378 ··· 579 495 return __nft_trans_set_add(ctx, msg_type, set, NULL); 580 496 } 581 497 498 + static void nft_setelem_data_deactivate(const struct net *net, 499 + const struct nft_set *set, 500 + struct nft_set_elem *elem); 501 + 502 + static int nft_mapelem_deactivate(const struct nft_ctx *ctx, 503 + struct nft_set *set, 504 + const struct nft_set_iter *iter, 505 + struct nft_set_elem *elem) 506 + { 507 + nft_setelem_data_deactivate(ctx->net, set, elem); 508 + 509 + return 0; 510 + } 511 + 512 + struct nft_set_elem_catchall { 513 + struct list_head list; 514 + struct rcu_head rcu; 515 + void *elem; 516 + }; 517 + 518 + static void nft_map_catchall_deactivate(const struct nft_ctx *ctx, 519 + struct nft_set *set) 520 + { 521 + u8 genmask = nft_genmask_next(ctx->net); 522 + struct nft_set_elem_catchall *catchall; 523 + struct nft_set_elem elem; 524 + struct nft_set_ext *ext; 525 + 526 + list_for_each_entry(catchall, &set->catchall_list, list) { 527 + ext = nft_set_elem_ext(set, catchall->elem); 528 + if (!nft_set_elem_active(ext, genmask)) 529 + continue; 530 + 531 + elem.priv = catchall->elem; 532 + nft_setelem_data_deactivate(ctx->net, set, &elem); 533 + break; 534 + } 535 + } 536 + 537 + static void nft_map_deactivate(const struct nft_ctx *ctx, struct nft_set *set) 538 + { 539 + struct nft_set_iter iter = { 540 + .genmask = nft_genmask_next(ctx->net), 541 + .fn = nft_mapelem_deactivate, 542 + }; 543 + 544 + set->ops->walk(ctx, set, &iter); 545 + WARN_ON_ONCE(iter.err); 546 + 547 + nft_map_catchall_deactivate(ctx, set); 548 + } 549 + 582 550 static int nft_delset(const struct nft_ctx *ctx, struct nft_set *set) 583 551 { 584 552 int err; ··· 638 502 err = nft_trans_set_add(ctx, NFT_MSG_DELSET, set); 639 503 if (err < 0) 640 504 return err; 505 + 506 + if (set->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) 507 + nft_map_deactivate(ctx, set); 641 508 642 509 nft_deactivate_next(ctx->net, set); 643 510 ctx->table->use--; ··· 2365 2226 return 0; 2366 2227 } 2367 2228 2368 - static int nft_chain_add(struct nft_table *table, struct nft_chain *chain) 2229 + int nft_chain_add(struct nft_table *table, struct nft_chain *chain) 2369 2230 { 2370 2231 int err; 2371 2232 ··· 2667 2528 nft_trans_basechain(trans) = basechain; 2668 2529 INIT_LIST_HEAD(&nft_trans_chain_hooks(trans)); 2669 2530 list_splice(&hook.list, &nft_trans_chain_hooks(trans)); 2531 + if (nla[NFTA_CHAIN_HOOK]) 2532 + module_put(hook.type->owner); 2670 2533 2671 2534 nft_trans_commit_list_add_tail(ctx->net, trans); 2672 2535 ··· 2811 2670 return nf_tables_addchain(&ctx, family, genmask, policy, flags, extack); 2812 2671 } 2813 2672 2814 - static int nft_delchain_hook(struct nft_ctx *ctx, struct nft_chain *chain, 2673 + static int nft_delchain_hook(struct nft_ctx *ctx, 2674 + struct nft_base_chain *basechain, 2815 2675 struct netlink_ext_ack *extack) 2816 2676 { 2677 + const struct nft_chain *chain = &basechain->chain; 2817 2678 const struct nlattr * const *nla = ctx->nla; 2818 2679 struct nft_chain_hook chain_hook = {}; 2819 - struct nft_base_chain *basechain; 2820 2680 struct nft_hook *this, *hook; 2821 2681 LIST_HEAD(chain_del_list); 2822 2682 struct nft_trans *trans; 2823 2683 int err; 2824 2684 2825 - if (!nft_is_base_chain(chain)) 2826 - return -EOPNOTSUPP; 2827 - 2828 - basechain = nft_base_chain(chain); 2829 2685 err = nft_chain_parse_hook(ctx->net, basechain, nla, &chain_hook, 2830 2686 ctx->family, chain->flags, extack); 2831 2687 if (err < 0) ··· 2907 2769 if (chain->flags & NFT_CHAIN_HW_OFFLOAD) 2908 2770 return -EOPNOTSUPP; 2909 2771 2910 - return nft_delchain_hook(&ctx, chain, extack); 2772 + if (nft_is_base_chain(chain)) { 2773 + struct nft_base_chain *basechain = nft_base_chain(chain); 2774 + 2775 + if (nft_base_chain_netdev(table->family, basechain->ops.hooknum)) 2776 + return nft_delchain_hook(&ctx, basechain, extack); 2777 + } 2911 2778 } 2912 2779 2913 2780 if (info->nlh->nlmsg_flags & NLM_F_NONREC && ··· 3633 3490 return err; 3634 3491 } 3635 3492 3636 - static void nf_tables_rule_destroy(const struct nft_ctx *ctx, 3637 - struct nft_rule *rule) 3493 + void nf_tables_rule_destroy(const struct nft_ctx *ctx, struct nft_rule *rule) 3638 3494 { 3639 3495 struct nft_expr *expr, *next; 3640 3496 ··· 3650 3508 kfree(rule); 3651 3509 } 3652 3510 3653 - void nf_tables_rule_release(const struct nft_ctx *ctx, struct nft_rule *rule) 3511 + static void nf_tables_rule_release(const struct nft_ctx *ctx, struct nft_rule *rule) 3654 3512 { 3655 3513 nft_rule_expr_deactivate(ctx, rule, NFT_TRANS_RELEASE); 3656 3514 nf_tables_rule_destroy(ctx, rule); ··· 3737 3595 3738 3596 return 0; 3739 3597 } 3740 - 3741 - struct nft_set_elem_catchall { 3742 - struct list_head list; 3743 - struct rcu_head rcu; 3744 - void *elem; 3745 - }; 3746 3598 3747 3599 int nft_set_catchall_validate(const struct nft_ctx *ctx, struct nft_set *set) 3748 3600 { ··· 3980 3844 if (flow) 3981 3845 nft_flow_rule_destroy(flow); 3982 3846 err_release_rule: 3983 - nft_rule_expr_deactivate(&ctx, rule, NFT_TRANS_PREPARE); 3847 + nft_rule_expr_deactivate(&ctx, rule, NFT_TRANS_PREPARE_ERROR); 3984 3848 nf_tables_rule_destroy(&ctx, rule); 3985 3849 err_release_expr: 3986 3850 for (i = 0; i < n; i++) { ··· 4913 4777 if (!(flags & NFT_SET_TIMEOUT)) 4914 4778 return -EINVAL; 4915 4779 4780 + if (flags & NFT_SET_ANONYMOUS) 4781 + return -EOPNOTSUPP; 4782 + 4916 4783 err = nf_msecs_to_jiffies64(nla[NFTA_SET_TIMEOUT], &desc.timeout); 4917 4784 if (err) 4918 4785 return err; ··· 4924 4785 if (nla[NFTA_SET_GC_INTERVAL] != NULL) { 4925 4786 if (!(flags & NFT_SET_TIMEOUT)) 4926 4787 return -EINVAL; 4788 + 4789 + if (flags & NFT_SET_ANONYMOUS) 4790 + return -EOPNOTSUPP; 4791 + 4927 4792 desc.gc_int = ntohl(nla_get_be32(nla[NFTA_SET_GC_INTERVAL])); 4928 4793 } 4929 4794 ··· 4972 4829 return -EEXIST; 4973 4830 } 4974 4831 if (info->nlh->nlmsg_flags & NLM_F_REPLACE) 4832 + return -EOPNOTSUPP; 4833 + 4834 + if (nft_set_is_anonymous(set)) 4975 4835 return -EOPNOTSUPP; 4976 4836 4977 4837 err = nft_set_expr_alloc(&ctx, set, nla, exprs, &num_exprs, flags); ··· 5080 4934 for (i = 0; i < set->num_exprs; i++) 5081 4935 nft_expr_destroy(&ctx, set->exprs[i]); 5082 4936 err_set_destroy: 5083 - ops->destroy(set); 4937 + ops->destroy(&ctx, set); 5084 4938 err_set_init: 5085 4939 kfree(set->name); 5086 4940 err_set_name: ··· 5095 4949 5096 4950 list_for_each_entry_safe(catchall, next, &set->catchall_list, list) { 5097 4951 list_del_rcu(&catchall->list); 5098 - nft_set_elem_destroy(set, catchall->elem, true); 4952 + nf_tables_set_elem_destroy(ctx, set, catchall->elem); 5099 4953 kfree_rcu(catchall, rcu); 5100 4954 } 5101 4955 } ··· 5110 4964 for (i = 0; i < set->num_exprs; i++) 5111 4965 nft_expr_destroy(ctx, set->exprs[i]); 5112 4966 5113 - set->ops->destroy(set); 4967 + set->ops->destroy(ctx, set); 5114 4968 nft_set_catchall_destroy(ctx, set); 5115 4969 kfree(set->name); 5116 4970 kvfree(set); ··· 5275 5129 } 5276 5130 } 5277 5131 5132 + static void nft_setelem_data_activate(const struct net *net, 5133 + const struct nft_set *set, 5134 + struct nft_set_elem *elem); 5135 + 5136 + static int nft_mapelem_activate(const struct nft_ctx *ctx, 5137 + struct nft_set *set, 5138 + const struct nft_set_iter *iter, 5139 + struct nft_set_elem *elem) 5140 + { 5141 + nft_setelem_data_activate(ctx->net, set, elem); 5142 + 5143 + return 0; 5144 + } 5145 + 5146 + static void nft_map_catchall_activate(const struct nft_ctx *ctx, 5147 + struct nft_set *set) 5148 + { 5149 + u8 genmask = nft_genmask_next(ctx->net); 5150 + struct nft_set_elem_catchall *catchall; 5151 + struct nft_set_elem elem; 5152 + struct nft_set_ext *ext; 5153 + 5154 + list_for_each_entry(catchall, &set->catchall_list, list) { 5155 + ext = nft_set_elem_ext(set, catchall->elem); 5156 + if (!nft_set_elem_active(ext, genmask)) 5157 + continue; 5158 + 5159 + elem.priv = catchall->elem; 5160 + nft_setelem_data_activate(ctx->net, set, &elem); 5161 + break; 5162 + } 5163 + } 5164 + 5165 + static void nft_map_activate(const struct nft_ctx *ctx, struct nft_set *set) 5166 + { 5167 + struct nft_set_iter iter = { 5168 + .genmask = nft_genmask_next(ctx->net), 5169 + .fn = nft_mapelem_activate, 5170 + }; 5171 + 5172 + set->ops->walk(ctx, set, &iter); 5173 + WARN_ON_ONCE(iter.err); 5174 + 5175 + nft_map_catchall_activate(ctx, set); 5176 + } 5177 + 5278 5178 void nf_tables_activate_set(const struct nft_ctx *ctx, struct nft_set *set) 5279 5179 { 5280 - if (nft_set_is_anonymous(set)) 5180 + if (nft_set_is_anonymous(set)) { 5181 + if (set->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) 5182 + nft_map_activate(ctx, set); 5183 + 5281 5184 nft_clear(ctx->net, set); 5185 + } 5282 5186 5283 5187 set->use++; 5284 5188 } ··· 5339 5143 enum nft_trans_phase phase) 5340 5144 { 5341 5145 switch (phase) { 5342 - case NFT_TRANS_PREPARE: 5146 + case NFT_TRANS_PREPARE_ERROR: 5147 + nft_set_trans_unbind(ctx, set); 5343 5148 if (nft_set_is_anonymous(set)) 5344 5149 nft_deactivate_next(ctx->net, set); 5345 5150 5346 5151 set->use--; 5152 + break; 5153 + case NFT_TRANS_PREPARE: 5154 + if (nft_set_is_anonymous(set)) { 5155 + if (set->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) 5156 + nft_map_deactivate(ctx, set); 5157 + 5158 + nft_deactivate_next(ctx->net, set); 5159 + } 5160 + set->use--; 5347 5161 return; 5348 5162 case NFT_TRANS_ABORT: 5349 5163 case NFT_TRANS_RELEASE: 5164 + if (nft_set_is_anonymous(set) && 5165 + set->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) 5166 + nft_map_deactivate(ctx, set); 5167 + 5350 5168 set->use--; 5351 5169 fallthrough; 5352 5170 default: ··· 6113 5903 __nft_set_elem_expr_destroy(ctx, expr); 6114 5904 } 6115 5905 5906 + /* Drop references and destroy. Called from gc, dynset and abort path. */ 6116 5907 void nft_set_elem_destroy(const struct nft_set *set, void *elem, 6117 5908 bool destroy_expr) 6118 5909 { ··· 6135 5924 } 6136 5925 EXPORT_SYMBOL_GPL(nft_set_elem_destroy); 6137 5926 6138 - /* Only called from commit path, nft_setelem_data_deactivate() already deals 6139 - * with the refcounting from the preparation phase. 5927 + /* Destroy element. References have been already dropped in the preparation 5928 + * path via nft_setelem_data_deactivate(). 6140 5929 */ 6141 - static void nf_tables_set_elem_destroy(const struct nft_ctx *ctx, 6142 - const struct nft_set *set, void *elem) 5930 + void nf_tables_set_elem_destroy(const struct nft_ctx *ctx, 5931 + const struct nft_set *set, void *elem) 6143 5932 { 6144 5933 struct nft_set_ext *ext = nft_set_elem_ext(set, elem); 6145 5934 ··· 6702 6491 if (flags) 6703 6492 *nft_set_ext_flags(ext) = flags; 6704 6493 6494 + if (obj) { 6495 + *nft_set_ext_obj(ext) = obj; 6496 + obj->use++; 6497 + } 6705 6498 if (ulen > 0) { 6706 6499 if (nft_set_ext_check(&tmpl, NFT_SET_EXT_USERDATA, ulen) < 0) { 6707 6500 err = -EINVAL; 6708 - goto err_elem_userdata; 6501 + goto err_elem_free; 6709 6502 } 6710 6503 udata = nft_set_ext_userdata(ext); 6711 6504 udata->len = ulen - 1; 6712 6505 nla_memcpy(&udata->data, nla[NFTA_SET_ELEM_USERDATA], ulen); 6713 - } 6714 - if (obj) { 6715 - *nft_set_ext_obj(ext) = obj; 6716 - obj->use++; 6717 6506 } 6718 6507 err = nft_set_elem_expr_setup(ctx, &tmpl, ext, expr_array, num_exprs); 6719 6508 if (err < 0) ··· 6772 6561 err_element_clash: 6773 6562 kfree(trans); 6774 6563 err_elem_free: 6775 - if (obj) 6776 - obj->use--; 6777 - err_elem_userdata: 6778 - nf_tables_set_elem_destroy(ctx, set, elem.priv); 6564 + nft_set_elem_destroy(set, elem.priv, true); 6779 6565 err_parse_data: 6780 6566 if (nla[NFTA_SET_ELEM_DATA] != NULL) 6781 6567 nft_data_release(&elem.data.val, desc.type); ··· 6816 6608 if (IS_ERR(set)) 6817 6609 return PTR_ERR(set); 6818 6610 6819 - if (!list_empty(&set->bindings) && set->flags & NFT_SET_CONSTANT) 6611 + if (!list_empty(&set->bindings) && 6612 + (set->flags & (NFT_SET_CONSTANT | NFT_SET_ANONYMOUS))) 6820 6613 return -EBUSY; 6821 6614 6822 6615 nft_ctx_init(&ctx, net, skb, info->nlh, family, table, NULL, nla); ··· 6850 6641 void nft_data_hold(const struct nft_data *data, enum nft_data_types type) 6851 6642 { 6852 6643 struct nft_chain *chain; 6853 - struct nft_rule *rule; 6854 6644 6855 6645 if (type == NFT_DATA_VERDICT) { 6856 6646 switch (data->verdict.code) { ··· 6857 6649 case NFT_GOTO: 6858 6650 chain = data->verdict.chain; 6859 6651 chain->use++; 6860 - 6861 - if (!nft_chain_is_bound(chain)) 6862 - break; 6863 - 6864 - chain->table->use++; 6865 - list_for_each_entry(rule, &chain->rules, list) 6866 - chain->use++; 6867 - 6868 - nft_chain_add(chain->table, chain); 6869 6652 break; 6870 6653 } 6871 6654 } ··· 7091 6892 set = nft_set_lookup(table, nla[NFTA_SET_ELEM_LIST_SET], genmask); 7092 6893 if (IS_ERR(set)) 7093 6894 return PTR_ERR(set); 7094 - if (!list_empty(&set->bindings) && set->flags & NFT_SET_CONSTANT) 6895 + 6896 + if (!list_empty(&set->bindings) && 6897 + (set->flags & (NFT_SET_CONSTANT | NFT_SET_ANONYMOUS))) 7095 6898 return -EBUSY; 7096 6899 7097 6900 nft_ctx_init(&ctx, net, skb, info->nlh, family, table, NULL, nla); ··· 7875 7674 enum nft_trans_phase phase) 7876 7675 { 7877 7676 switch (phase) { 7677 + case NFT_TRANS_PREPARE_ERROR: 7878 7678 case NFT_TRANS_PREPARE: 7879 7679 case NFT_TRANS_ABORT: 7880 7680 case NFT_TRANS_RELEASE: ··· 9148 8946 synchronize_rcu(); 9149 8947 9150 8948 list_for_each_entry_safe(trans, next, &head, list) { 9151 - list_del(&trans->list); 8949 + nft_trans_list_del(trans); 9152 8950 nft_commit_release(trans); 9153 8951 } 9154 8952 } ··· 9511 9309 if (list_empty(&nft_net->commit_list)) { 9512 9310 mutex_unlock(&nft_net->commit_mutex); 9513 9311 return 0; 9312 + } 9313 + 9314 + list_for_each_entry(trans, &nft_net->binding_list, binding_list) { 9315 + switch (trans->msg_type) { 9316 + case NFT_MSG_NEWSET: 9317 + if (!nft_trans_set_update(trans) && 9318 + nft_set_is_anonymous(nft_trans_set(trans)) && 9319 + !nft_trans_set_bound(trans)) { 9320 + pr_warn_once("nftables ruleset with unbound set\n"); 9321 + return -EINVAL; 9322 + } 9323 + break; 9324 + case NFT_MSG_NEWCHAIN: 9325 + if (!nft_trans_chain_update(trans) && 9326 + nft_chain_binding(nft_trans_chain(trans)) && 9327 + !nft_trans_chain_bound(trans)) { 9328 + pr_warn_once("nftables ruleset with unbound chain\n"); 9329 + return -EINVAL; 9330 + } 9331 + break; 9332 + } 9514 9333 } 9515 9334 9516 9335 /* 0. Validate ruleset, otherwise roll back for error reporting. */ ··· 9903 9680 kfree(nft_trans_chain_name(trans)); 9904 9681 nft_trans_destroy(trans); 9905 9682 } else { 9906 - if (nft_chain_is_bound(trans->ctx.chain)) { 9683 + if (nft_trans_chain_bound(trans)) { 9907 9684 nft_trans_destroy(trans); 9908 9685 break; 9909 9686 } ··· 9926 9703 nft_trans_destroy(trans); 9927 9704 break; 9928 9705 case NFT_MSG_NEWRULE: 9706 + if (nft_trans_rule_bound(trans)) { 9707 + nft_trans_destroy(trans); 9708 + break; 9709 + } 9929 9710 trans->ctx.chain->use--; 9930 9711 list_del_rcu(&nft_trans_rule(trans)->list); 9931 9712 nft_rule_expr_deactivate(&trans->ctx, ··· 9964 9737 case NFT_MSG_DESTROYSET: 9965 9738 trans->ctx.table->use++; 9966 9739 nft_clear(trans->ctx.net, nft_trans_set(trans)); 9740 + if (nft_trans_set(trans)->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) 9741 + nft_map_activate(&trans->ctx, nft_trans_set(trans)); 9742 + 9967 9743 nft_trans_destroy(trans); 9968 9744 break; 9969 9745 case NFT_MSG_NEWSETELEM: ··· 10047 9817 10048 9818 list_for_each_entry_safe_reverse(trans, next, 10049 9819 &nft_net->commit_list, list) { 10050 - list_del(&trans->list); 9820 + nft_trans_list_del(trans); 10051 9821 nf_tables_abort_release(trans); 10052 9822 } 10053 9823 ··· 10496 10266 static void nft_verdict_uninit(const struct nft_data *data) 10497 10267 { 10498 10268 struct nft_chain *chain; 10499 - struct nft_rule *rule; 10500 10269 10501 10270 switch (data->verdict.code) { 10502 10271 case NFT_JUMP: 10503 10272 case NFT_GOTO: 10504 10273 chain = data->verdict.chain; 10505 10274 chain->use--; 10506 - 10507 - if (!nft_chain_is_bound(chain)) 10508 - break; 10509 - 10510 - chain->table->use--; 10511 - list_for_each_entry(rule, &chain->rules, list) 10512 - chain->use--; 10513 - 10514 - nft_chain_del(chain); 10515 10275 break; 10516 10276 } 10517 10277 } ··· 10736 10516 list_for_each_entry_safe(set, ns, &table->sets, list) { 10737 10517 list_del(&set->list); 10738 10518 table->use--; 10519 + if (set->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) 10520 + nft_map_deactivate(&ctx, set); 10521 + 10739 10522 nft_set_destroy(&ctx, set); 10740 10523 } 10741 10524 list_for_each_entry_safe(obj, ne, &table->objects, list) { ··· 10823 10600 10824 10601 INIT_LIST_HEAD(&nft_net->tables); 10825 10602 INIT_LIST_HEAD(&nft_net->commit_list); 10603 + INIT_LIST_HEAD(&nft_net->binding_list); 10826 10604 INIT_LIST_HEAD(&nft_net->module_list); 10827 10605 INIT_LIST_HEAD(&nft_net->notify_list); 10828 10606 mutex_init(&nft_net->commit_mutex);
+81 -9
net/netfilter/nft_immediate.c
··· 76 76 switch (priv->data.verdict.code) { 77 77 case NFT_JUMP: 78 78 case NFT_GOTO: 79 - if (nft_chain_is_bound(chain)) { 80 - err = -EBUSY; 81 - goto err1; 82 - } 83 - chain->bound = true; 79 + err = nf_tables_bind_chain(ctx, chain); 80 + if (err < 0) 81 + return err; 84 82 break; 85 83 default: 86 84 break; ··· 96 98 const struct nft_expr *expr) 97 99 { 98 100 const struct nft_immediate_expr *priv = nft_expr_priv(expr); 101 + const struct nft_data *data = &priv->data; 102 + struct nft_ctx chain_ctx; 103 + struct nft_chain *chain; 104 + struct nft_rule *rule; 105 + 106 + if (priv->dreg == NFT_REG_VERDICT) { 107 + switch (data->verdict.code) { 108 + case NFT_JUMP: 109 + case NFT_GOTO: 110 + chain = data->verdict.chain; 111 + if (!nft_chain_binding(chain)) 112 + break; 113 + 114 + chain_ctx = *ctx; 115 + chain_ctx.chain = chain; 116 + 117 + list_for_each_entry(rule, &chain->rules, list) 118 + nft_rule_expr_activate(&chain_ctx, rule); 119 + 120 + nft_clear(ctx->net, chain); 121 + break; 122 + default: 123 + break; 124 + } 125 + } 99 126 100 127 return nft_data_hold(&priv->data, nft_dreg_to_type(priv->dreg)); 101 128 } ··· 130 107 enum nft_trans_phase phase) 131 108 { 132 109 const struct nft_immediate_expr *priv = nft_expr_priv(expr); 110 + const struct nft_data *data = &priv->data; 111 + struct nft_ctx chain_ctx; 112 + struct nft_chain *chain; 113 + struct nft_rule *rule; 114 + 115 + if (priv->dreg == NFT_REG_VERDICT) { 116 + switch (data->verdict.code) { 117 + case NFT_JUMP: 118 + case NFT_GOTO: 119 + chain = data->verdict.chain; 120 + if (!nft_chain_binding(chain)) 121 + break; 122 + 123 + chain_ctx = *ctx; 124 + chain_ctx.chain = chain; 125 + 126 + list_for_each_entry(rule, &chain->rules, list) 127 + nft_rule_expr_deactivate(&chain_ctx, rule, phase); 128 + 129 + switch (phase) { 130 + case NFT_TRANS_PREPARE_ERROR: 131 + nf_tables_unbind_chain(ctx, chain); 132 + fallthrough; 133 + case NFT_TRANS_PREPARE: 134 + nft_deactivate_next(ctx->net, chain); 135 + break; 136 + default: 137 + nft_chain_del(chain); 138 + chain->bound = false; 139 + chain->table->use--; 140 + break; 141 + } 142 + break; 143 + default: 144 + break; 145 + } 146 + } 133 147 134 148 if (phase == NFT_TRANS_COMMIT) 135 149 return; ··· 191 131 case NFT_GOTO: 192 132 chain = data->verdict.chain; 193 133 194 - if (!nft_chain_is_bound(chain)) 134 + if (!nft_chain_binding(chain)) 195 135 break; 196 136 137 + /* Rule construction failed, but chain is already bound: 138 + * let the transaction records release this chain and its rules. 139 + */ 140 + if (chain->bound) { 141 + chain->use--; 142 + break; 143 + } 144 + 145 + /* Rule has been deleted, release chain and its rules. */ 197 146 chain_ctx = *ctx; 198 147 chain_ctx.chain = chain; 199 148 200 - list_for_each_entry_safe(rule, n, &chain->rules, list) 201 - nf_tables_rule_release(&chain_ctx, rule); 202 - 149 + chain->use--; 150 + list_for_each_entry_safe(rule, n, &chain->rules, list) { 151 + chain->use--; 152 + list_del(&rule->list); 153 + nf_tables_rule_destroy(&chain_ctx, rule); 154 + } 203 155 nf_tables_chain_destroy(&chain_ctx); 204 156 break; 205 157 default:
+3 -2
net/netfilter/nft_set_bitmap.c
··· 271 271 return 0; 272 272 } 273 273 274 - static void nft_bitmap_destroy(const struct nft_set *set) 274 + static void nft_bitmap_destroy(const struct nft_ctx *ctx, 275 + const struct nft_set *set) 275 276 { 276 277 struct nft_bitmap *priv = nft_set_priv(set); 277 278 struct nft_bitmap_elem *be, *n; 278 279 279 280 list_for_each_entry_safe(be, n, &priv->list, head) 280 - nft_set_elem_destroy(set, be, true); 281 + nf_tables_set_elem_destroy(ctx, set, be); 281 282 } 282 283 283 284 static bool nft_bitmap_estimate(const struct nft_set_desc *desc, u32 features,
+18 -5
net/netfilter/nft_set_hash.c
··· 400 400 return 0; 401 401 } 402 402 403 + struct nft_rhash_ctx { 404 + const struct nft_ctx ctx; 405 + const struct nft_set *set; 406 + }; 407 + 403 408 static void nft_rhash_elem_destroy(void *ptr, void *arg) 404 409 { 405 - nft_set_elem_destroy(arg, ptr, true); 410 + struct nft_rhash_ctx *rhash_ctx = arg; 411 + 412 + nf_tables_set_elem_destroy(&rhash_ctx->ctx, rhash_ctx->set, ptr); 406 413 } 407 414 408 - static void nft_rhash_destroy(const struct nft_set *set) 415 + static void nft_rhash_destroy(const struct nft_ctx *ctx, 416 + const struct nft_set *set) 409 417 { 410 418 struct nft_rhash *priv = nft_set_priv(set); 419 + struct nft_rhash_ctx rhash_ctx = { 420 + .ctx = *ctx, 421 + .set = set, 422 + }; 411 423 412 424 cancel_delayed_work_sync(&priv->gc_work); 413 425 rcu_barrier(); 414 426 rhashtable_free_and_destroy(&priv->ht, nft_rhash_elem_destroy, 415 - (void *)set); 427 + (void *)&rhash_ctx); 416 428 } 417 429 418 430 /* Number of buckets is stored in u32, so cap our result to 1U<<31 */ ··· 655 643 return 0; 656 644 } 657 645 658 - static void nft_hash_destroy(const struct nft_set *set) 646 + static void nft_hash_destroy(const struct nft_ctx *ctx, 647 + const struct nft_set *set) 659 648 { 660 649 struct nft_hash *priv = nft_set_priv(set); 661 650 struct nft_hash_elem *he; ··· 666 653 for (i = 0; i < priv->buckets; i++) { 667 654 hlist_for_each_entry_safe(he, next, &priv->table[i], node) { 668 655 hlist_del_rcu(&he->node); 669 - nft_set_elem_destroy(set, he, true); 656 + nf_tables_set_elem_destroy(ctx, set, he); 670 657 } 671 658 } 672 659 }
+14 -6
net/netfilter/nft_set_pipapo.c
··· 1973 1973 struct nft_set_iter *iter) 1974 1974 { 1975 1975 struct nft_pipapo *priv = nft_set_priv(set); 1976 + struct net *net = read_pnet(&set->net); 1976 1977 struct nft_pipapo_match *m; 1977 1978 struct nft_pipapo_field *f; 1978 1979 int i, r; 1979 1980 1980 1981 rcu_read_lock(); 1981 - m = rcu_dereference(priv->match); 1982 + if (iter->genmask == nft_genmask_cur(net)) 1983 + m = rcu_dereference(priv->match); 1984 + else 1985 + m = priv->clone; 1982 1986 1983 1987 if (unlikely(!m)) 1984 1988 goto out; ··· 2150 2146 2151 2147 /** 2152 2148 * nft_set_pipapo_match_destroy() - Destroy elements from key mapping array 2149 + * @ctx: context 2153 2150 * @set: nftables API set representation 2154 2151 * @m: matching data pointing to key mapping array 2155 2152 */ 2156 - static void nft_set_pipapo_match_destroy(const struct nft_set *set, 2153 + static void nft_set_pipapo_match_destroy(const struct nft_ctx *ctx, 2154 + const struct nft_set *set, 2157 2155 struct nft_pipapo_match *m) 2158 2156 { 2159 2157 struct nft_pipapo_field *f; ··· 2172 2166 2173 2167 e = f->mt[r].e; 2174 2168 2175 - nft_set_elem_destroy(set, e, true); 2169 + nf_tables_set_elem_destroy(ctx, set, e); 2176 2170 } 2177 2171 } 2178 2172 2179 2173 /** 2180 2174 * nft_pipapo_destroy() - Free private data for set and all committed elements 2175 + * @ctx: context 2181 2176 * @set: nftables API set representation 2182 2177 */ 2183 - static void nft_pipapo_destroy(const struct nft_set *set) 2178 + static void nft_pipapo_destroy(const struct nft_ctx *ctx, 2179 + const struct nft_set *set) 2184 2180 { 2185 2181 struct nft_pipapo *priv = nft_set_priv(set); 2186 2182 struct nft_pipapo_match *m; ··· 2192 2184 if (m) { 2193 2185 rcu_barrier(); 2194 2186 2195 - nft_set_pipapo_match_destroy(set, m); 2187 + nft_set_pipapo_match_destroy(ctx, set, m); 2196 2188 2197 2189 #ifdef NFT_PIPAPO_ALIGN 2198 2190 free_percpu(m->scratch_aligned); ··· 2209 2201 m = priv->clone; 2210 2202 2211 2203 if (priv->dirty) 2212 - nft_set_pipapo_match_destroy(set, m); 2204 + nft_set_pipapo_match_destroy(ctx, set, m); 2213 2205 2214 2206 #ifdef NFT_PIPAPO_ALIGN 2215 2207 free_percpu(priv->clone->scratch_aligned);
+3 -2
net/netfilter/nft_set_rbtree.c
··· 664 664 return 0; 665 665 } 666 666 667 - static void nft_rbtree_destroy(const struct nft_set *set) 667 + static void nft_rbtree_destroy(const struct nft_ctx *ctx, 668 + const struct nft_set *set) 668 669 { 669 670 struct nft_rbtree *priv = nft_set_priv(set); 670 671 struct nft_rbtree_elem *rbe; ··· 676 675 while ((node = priv->root.rb_node) != NULL) { 677 676 rb_erase(node, &priv->root); 678 677 rbe = rb_entry(node, struct nft_rbtree_elem, node); 679 - nft_set_elem_destroy(set, rbe, true); 678 + nf_tables_set_elem_destroy(ctx, set, rbe); 680 679 } 681 680 } 682 681
-1
net/netfilter/xt_osf.c
··· 71 71 MODULE_DESCRIPTION("Passive OS fingerprint matching."); 72 72 MODULE_ALIAS("ipt_osf"); 73 73 MODULE_ALIAS("ip6t_osf"); 74 - MODULE_ALIAS_NFNL_SUBSYS(NFNL_SUBSYS_OSF);
+6 -2
net/sched/sch_netem.c
··· 967 967 if (ret < 0) 968 968 return ret; 969 969 970 + sch_tree_lock(sch); 970 971 /* backup q->clg and q->loss_model */ 971 972 old_clg = q->clg; 972 973 old_loss_model = q->loss_model; ··· 976 975 ret = get_loss_clg(q, tb[TCA_NETEM_LOSS]); 977 976 if (ret) { 978 977 q->loss_model = old_loss_model; 979 - return ret; 978 + goto unlock; 980 979 } 981 980 } else { 982 981 q->loss_model = CLG_RANDOM; ··· 1043 1042 /* capping jitter to the range acceptable by tabledist() */ 1044 1043 q->jitter = min_t(s64, abs(q->jitter), INT_MAX); 1045 1044 1045 + unlock: 1046 + sch_tree_unlock(sch); 1046 1047 return ret; 1047 1048 1048 1049 get_table_failure: ··· 1054 1051 */ 1055 1052 q->clg = old_clg; 1056 1053 q->loss_model = old_loss_model; 1057 - return ret; 1054 + 1055 + goto unlock; 1058 1056 } 1059 1057 1060 1058 static int netem_init(struct Qdisc *sch, struct nlattr *opt,
+4 -4
net/xfrm/xfrm_input.c
··· 131 131 memset(sp->ovec, 0, sizeof(sp->ovec)); 132 132 sp->olen = 0; 133 133 sp->len = 0; 134 + sp->verified_cnt = 0; 134 135 135 136 return sp; 136 137 } ··· 331 330 { 332 331 switch (x->props.mode) { 333 332 case XFRM_MODE_BEET: 334 - switch (XFRM_MODE_SKB_CB(skb)->protocol) { 335 - case IPPROTO_IPIP: 336 - case IPPROTO_BEETPH: 333 + switch (x->sel.family) { 334 + case AF_INET: 337 335 return xfrm4_remove_beet_encap(x, skb); 338 - case IPPROTO_IPV6: 336 + case AF_INET6: 339 337 return xfrm6_remove_beet_encap(x, skb); 340 338 } 341 339 break;
+50 -4
net/xfrm/xfrm_interface_core.c
··· 311 311 skb->mark = 0; 312 312 } 313 313 314 + static int xfrmi_input(struct sk_buff *skb, int nexthdr, __be32 spi, 315 + int encap_type, unsigned short family) 316 + { 317 + struct sec_path *sp; 318 + 319 + sp = skb_sec_path(skb); 320 + if (sp && (sp->len || sp->olen) && 321 + !xfrm_policy_check(NULL, XFRM_POLICY_IN, skb, family)) 322 + goto discard; 323 + 324 + XFRM_SPI_SKB_CB(skb)->family = family; 325 + if (family == AF_INET) { 326 + XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct iphdr, daddr); 327 + XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4 = NULL; 328 + } else { 329 + XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct ipv6hdr, daddr); 330 + XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6 = NULL; 331 + } 332 + 333 + return xfrm_input(skb, nexthdr, spi, encap_type); 334 + discard: 335 + kfree_skb(skb); 336 + return 0; 337 + } 338 + 339 + static int xfrmi4_rcv(struct sk_buff *skb) 340 + { 341 + return xfrmi_input(skb, ip_hdr(skb)->protocol, 0, 0, AF_INET); 342 + } 343 + 344 + static int xfrmi6_rcv(struct sk_buff *skb) 345 + { 346 + return xfrmi_input(skb, skb_network_header(skb)[IP6CB(skb)->nhoff], 347 + 0, 0, AF_INET6); 348 + } 349 + 350 + static int xfrmi4_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type) 351 + { 352 + return xfrmi_input(skb, nexthdr, spi, encap_type, AF_INET); 353 + } 354 + 355 + static int xfrmi6_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type) 356 + { 357 + return xfrmi_input(skb, nexthdr, spi, encap_type, AF_INET6); 358 + } 359 + 314 360 static int xfrmi_rcv_cb(struct sk_buff *skb, int err) 315 361 { 316 362 const struct xfrm_mode *inner_mode; ··· 992 946 }; 993 947 994 948 static struct xfrm6_protocol xfrmi_esp6_protocol __read_mostly = { 995 - .handler = xfrm6_rcv, 996 - .input_handler = xfrm_input, 949 + .handler = xfrmi6_rcv, 950 + .input_handler = xfrmi6_input, 997 951 .cb_handler = xfrmi_rcv_cb, 998 952 .err_handler = xfrmi6_err, 999 953 .priority = 10, ··· 1043 997 #endif 1044 998 1045 999 static struct xfrm4_protocol xfrmi_esp4_protocol __read_mostly = { 1046 - .handler = xfrm4_rcv, 1047 - .input_handler = xfrm_input, 1000 + .handler = xfrmi4_rcv, 1001 + .input_handler = xfrmi4_input, 1048 1002 .cb_handler = xfrmi_rcv_cb, 1049 1003 .err_handler = xfrmi4_err, 1050 1004 .priority = 10,
+14
net/xfrm/xfrm_policy.c
··· 1831 1831 1832 1832 __xfrm_policy_unlink(pol, dir); 1833 1833 spin_unlock_bh(&net->xfrm.xfrm_policy_lock); 1834 + xfrm_dev_policy_delete(pol); 1834 1835 cnt++; 1835 1836 xfrm_audit_policy_delete(pol, 1, task_valid); 1836 1837 xfrm_policy_kill(pol); ··· 1870 1869 1871 1870 __xfrm_policy_unlink(pol, dir); 1872 1871 spin_unlock_bh(&net->xfrm.xfrm_policy_lock); 1872 + xfrm_dev_policy_delete(pol); 1873 1873 cnt++; 1874 1874 xfrm_audit_policy_delete(pol, 1, task_valid); 1875 1875 xfrm_policy_kill(pol); ··· 3351 3349 if (xfrm_state_ok(tmpl, sp->xvec[idx], family, if_id)) 3352 3350 return ++idx; 3353 3351 if (sp->xvec[idx]->props.mode != XFRM_MODE_TRANSPORT) { 3352 + if (idx < sp->verified_cnt) { 3353 + /* Secpath entry previously verified, consider optional and 3354 + * continue searching 3355 + */ 3356 + continue; 3357 + } 3358 + 3354 3359 if (start == -1) 3355 3360 start = -2-idx; 3356 3361 break; ··· 3732 3723 * Order is _important_. Later we will implement 3733 3724 * some barriers, but at the moment barriers 3734 3725 * are implied between each two transformations. 3726 + * Upon success, marks secpath entries as having been 3727 + * verified to allow them to be skipped in future policy 3728 + * checks (e.g. nested tunnels). 3735 3729 */ 3736 3730 for (i = xfrm_nr-1, k = 0; i >= 0; i--) { 3737 3731 k = xfrm_policy_ok(tpp[i], sp, k, family, if_id); ··· 3753 3741 } 3754 3742 3755 3743 xfrm_pols_put(pols, npols); 3744 + sp->verified_cnt = k; 3745 + 3756 3746 return 1; 3757 3747 } 3758 3748 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLBLOCK);
+6 -6
scripts/gdb/linux/constants.py.in
··· 48 48 LX_GDBPARSED(CLK_GET_RATE_NOCACHE) 49 49 50 50 /* linux/fs.h */ 51 - LX_VALUE(SB_RDONLY) 52 - LX_VALUE(SB_SYNCHRONOUS) 53 - LX_VALUE(SB_MANDLOCK) 54 - LX_VALUE(SB_DIRSYNC) 55 - LX_VALUE(SB_NOATIME) 56 - LX_VALUE(SB_NODIRATIME) 51 + LX_GDBPARSED(SB_RDONLY) 52 + LX_GDBPARSED(SB_SYNCHRONOUS) 53 + LX_GDBPARSED(SB_MANDLOCK) 54 + LX_GDBPARSED(SB_DIRSYNC) 55 + LX_GDBPARSED(SB_NOATIME) 56 + LX_GDBPARSED(SB_NODIRATIME) 57 57 58 58 /* linux/htimer.h */ 59 59 LX_GDBPARSED(hrtimer_resolution)
+3 -3
scripts/gfp-translate
··· 63 63 64 64 # Extract GFP flags from the kernel source 65 65 TMPFILE=`mktemp -t gfptranslate-XXXXXX` || exit 1 66 - grep -q ___GFP $SOURCE/include/linux/gfp.h 66 + grep -q ___GFP $SOURCE/include/linux/gfp_types.h 67 67 if [ $? -eq 0 ]; then 68 - grep "^#define ___GFP" $SOURCE/include/linux/gfp.h | sed -e 's/u$//' | grep -v GFP_BITS > $TMPFILE 68 + grep "^#define ___GFP" $SOURCE/include/linux/gfp_types.h | sed -e 's/u$//' | grep -v GFP_BITS > $TMPFILE 69 69 else 70 - grep "^#define __GFP" $SOURCE/include/linux/gfp.h | sed -e 's/(__force gfp_t)//' | sed -e 's/u)/)/' | grep -v GFP_BITS | sed -e 's/)\//) \//' > $TMPFILE 70 + grep "^#define __GFP" $SOURCE/include/linux/gfp_types.h | sed -e 's/(__force gfp_t)//' | sed -e 's/u)/)/' | grep -v GFP_BITS | sed -e 's/)\//) \//' > $TMPFILE 71 71 fi 72 72 73 73 # Parse the flags
+22 -13
sound/core/seq/oss/seq_oss_midi.c
··· 37 37 struct snd_midi_event *coder; /* MIDI event coder */ 38 38 struct seq_oss_devinfo *devinfo; /* assigned OSSseq device */ 39 39 snd_use_lock_t use_lock; 40 + struct mutex open_mutex; 40 41 }; 41 42 42 43 ··· 173 172 mdev->flags = pinfo->capability; 174 173 mdev->opened = 0; 175 174 snd_use_lock_init(&mdev->use_lock); 175 + mutex_init(&mdev->open_mutex); 176 176 177 177 /* copy and truncate the name of synth device */ 178 178 strscpy(mdev->name, pinfo->name, sizeof(mdev->name)); ··· 324 322 int perm; 325 323 struct seq_oss_midi *mdev; 326 324 struct snd_seq_port_subscribe subs; 325 + int err; 327 326 328 327 mdev = get_mididev(dp, dev); 329 328 if (!mdev) 330 329 return -ENODEV; 331 330 331 + mutex_lock(&mdev->open_mutex); 332 332 /* already used? */ 333 333 if (mdev->opened && mdev->devinfo != dp) { 334 - snd_use_lock_free(&mdev->use_lock); 335 - return -EBUSY; 334 + err = -EBUSY; 335 + goto unlock; 336 336 } 337 337 338 338 perm = 0; ··· 344 340 perm |= PERM_READ; 345 341 perm &= mdev->flags; 346 342 if (perm == 0) { 347 - snd_use_lock_free(&mdev->use_lock); 348 - return -ENXIO; 343 + err = -ENXIO; 344 + goto unlock; 349 345 } 350 346 351 347 /* already opened? */ 352 348 if ((mdev->opened & perm) == perm) { 353 - snd_use_lock_free(&mdev->use_lock); 354 - return 0; 349 + err = 0; 350 + goto unlock; 355 351 } 356 352 357 353 perm &= ~mdev->opened; ··· 376 372 } 377 373 378 374 if (! mdev->opened) { 379 - snd_use_lock_free(&mdev->use_lock); 380 - return -ENXIO; 375 + err = -ENXIO; 376 + goto unlock; 381 377 } 382 378 383 379 mdev->devinfo = dp; 380 + err = 0; 381 + 382 + unlock: 383 + mutex_unlock(&mdev->open_mutex); 384 384 snd_use_lock_free(&mdev->use_lock); 385 - return 0; 385 + return err; 386 386 } 387 387 388 388 /* ··· 401 393 mdev = get_mididev(dp, dev); 402 394 if (!mdev) 403 395 return -ENODEV; 404 - if (! mdev->opened || mdev->devinfo != dp) { 405 - snd_use_lock_free(&mdev->use_lock); 406 - return 0; 407 - } 396 + mutex_lock(&mdev->open_mutex); 397 + if (!mdev->opened || mdev->devinfo != dp) 398 + goto unlock; 408 399 409 400 memset(&subs, 0, sizeof(subs)); 410 401 if (mdev->opened & PERM_WRITE) { ··· 422 415 mdev->opened = 0; 423 416 mdev->devinfo = NULL; 424 417 418 + unlock: 419 + mutex_unlock(&mdev->open_mutex); 425 420 snd_use_lock_free(&mdev->use_lock); 426 421 return 0; 427 422 }
+1
sound/pci/hda/patch_realtek.c
··· 11740 11740 SND_PCI_QUIRK(0x1b0a, 0x01b8, "ACER Veriton", ALC662_FIXUP_ACER_VERITON), 11741 11741 SND_PCI_QUIRK(0x1b35, 0x1234, "CZC ET26", ALC662_FIXUP_CZC_ET26), 11742 11742 SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T), 11743 + SND_PCI_QUIRK(0x1c6c, 0x1239, "Compaq N14JP6-V2", ALC897_FIXUP_HP_HSMIC_VERB), 11743 11744 11744 11745 #if 0 11745 11746 /* Below is a quirk table taken from the old code.
+3
sound/soc/tegra/tegra_pcm.c
··· 117 117 return ret; 118 118 } 119 119 120 + /* Set wait time to 500ms by default */ 121 + substream->wait_time = 500; 122 + 120 123 return 0; 121 124 } 122 125 EXPORT_SYMBOL_GPL(tegra_pcm_open);
+4
sound/usb/pcm.c
··· 650 650 goto unlock; 651 651 } 652 652 653 + ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D0); 654 + if (ret < 0) 655 + goto unlock; 656 + 653 657 again: 654 658 if (subs->sync_endpoint) { 655 659 ret = snd_usb_endpoint_prepare(chip, subs->sync_endpoint);
+2
sound/usb/quirks.c
··· 2191 2191 QUIRK_FLAG_DSD_RAW), 2192 2192 VENDOR_FLG(0x2ab6, /* T+A devices */ 2193 2193 QUIRK_FLAG_DSD_RAW), 2194 + VENDOR_FLG(0x3336, /* HEM devices */ 2195 + QUIRK_FLAG_DSD_RAW), 2194 2196 VENDOR_FLG(0x3353, /* Khadas devices */ 2195 2197 QUIRK_FLAG_DSD_RAW), 2196 2198 VENDOR_FLG(0x3842, /* EVGA */
+29
tools/testing/selftests/bpf/prog_tests/subprogs_extable.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + 3 + #include <test_progs.h> 4 + #include "test_subprogs_extable.skel.h" 5 + 6 + void test_subprogs_extable(void) 7 + { 8 + const int read_sz = 456; 9 + struct test_subprogs_extable *skel; 10 + int err; 11 + 12 + skel = test_subprogs_extable__open_and_load(); 13 + if (!ASSERT_OK_PTR(skel, "skel_open_and_load")) 14 + return; 15 + 16 + err = test_subprogs_extable__attach(skel); 17 + if (!ASSERT_OK(err, "skel_attach")) 18 + goto cleanup; 19 + 20 + /* trigger tracepoint */ 21 + ASSERT_OK(trigger_module_test_read(read_sz), "trigger_read"); 22 + 23 + ASSERT_NEQ(skel->bss->triggered, 0, "verify at least one program ran"); 24 + 25 + test_subprogs_extable__detach(skel); 26 + 27 + cleanup: 28 + test_subprogs_extable__destroy(skel); 29 + }
+51
tools/testing/selftests/bpf/progs/test_subprogs_extable.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + 3 + #include "vmlinux.h" 4 + #include <bpf/bpf_helpers.h> 5 + #include <bpf/bpf_tracing.h> 6 + 7 + struct { 8 + __uint(type, BPF_MAP_TYPE_ARRAY); 9 + __uint(max_entries, 8); 10 + __type(key, __u32); 11 + __type(value, __u64); 12 + } test_array SEC(".maps"); 13 + 14 + unsigned int triggered; 15 + 16 + static __u64 test_cb(struct bpf_map *map, __u32 *key, __u64 *val, void *data) 17 + { 18 + return 1; 19 + } 20 + 21 + SEC("fexit/bpf_testmod_return_ptr") 22 + int BPF_PROG(handle_fexit_ret_subprogs, int arg, struct file *ret) 23 + { 24 + *(volatile long *)ret; 25 + *(volatile int *)&ret->f_mode; 26 + bpf_for_each_map_elem(&test_array, test_cb, NULL, 0); 27 + triggered++; 28 + return 0; 29 + } 30 + 31 + SEC("fexit/bpf_testmod_return_ptr") 32 + int BPF_PROG(handle_fexit_ret_subprogs2, int arg, struct file *ret) 33 + { 34 + *(volatile long *)ret; 35 + *(volatile int *)&ret->f_mode; 36 + bpf_for_each_map_elem(&test_array, test_cb, NULL, 0); 37 + triggered++; 38 + return 0; 39 + } 40 + 41 + SEC("fexit/bpf_testmod_return_ptr") 42 + int BPF_PROG(handle_fexit_ret_subprogs3, int arg, struct file *ret) 43 + { 44 + *(volatile long *)ret; 45 + *(volatile int *)&ret->f_mode; 46 + bpf_for_each_map_elem(&test_array, test_cb, NULL, 0); 47 + triggered++; 48 + return 0; 49 + } 50 + 51 + char _license[] SEC("license") = "GPL";
+79
tools/testing/selftests/bpf/progs/verifier_spill_fill.c
··· 371 371 " ::: __clobber_all); 372 372 } 373 373 374 + SEC("xdp") 375 + __description("32-bit spill of 64-bit reg should clear ID") 376 + __failure __msg("math between ctx pointer and 4294967295 is not allowed") 377 + __naked void spill_32bit_of_64bit_fail(void) 378 + { 379 + asm volatile (" \ 380 + r6 = r1; \ 381 + /* Roll one bit to force the verifier to track both branches. */\ 382 + call %[bpf_get_prandom_u32]; \ 383 + r0 &= 0x8; \ 384 + /* Put a large number into r1. */ \ 385 + r1 = 0xffffffff; \ 386 + r1 <<= 32; \ 387 + r1 += r0; \ 388 + /* Assign an ID to r1. */ \ 389 + r2 = r1; \ 390 + /* 32-bit spill r1 to stack - should clear the ID! */\ 391 + *(u32*)(r10 - 8) = r1; \ 392 + /* 32-bit fill r2 from stack. */ \ 393 + r2 = *(u32*)(r10 - 8); \ 394 + /* Compare r2 with another register to trigger find_equal_scalars.\ 395 + * Having one random bit is important here, otherwise the verifier cuts\ 396 + * the corners. If the ID was mistakenly preserved on spill, this would\ 397 + * cause the verifier to think that r1 is also equal to zero in one of\ 398 + * the branches, and equal to eight on the other branch.\ 399 + */ \ 400 + r3 = 0; \ 401 + if r2 != r3 goto l0_%=; \ 402 + l0_%=: r1 >>= 32; \ 403 + /* At this point, if the verifier thinks that r1 is 0, an out-of-bounds\ 404 + * read will happen, because it actually contains 0xffffffff.\ 405 + */ \ 406 + r6 += r1; \ 407 + r0 = *(u32*)(r6 + 0); \ 408 + exit; \ 409 + " : 410 + : __imm(bpf_get_prandom_u32) 411 + : __clobber_all); 412 + } 413 + 414 + SEC("xdp") 415 + __description("16-bit spill of 32-bit reg should clear ID") 416 + __failure __msg("dereference of modified ctx ptr R6 off=65535 disallowed") 417 + __naked void spill_16bit_of_32bit_fail(void) 418 + { 419 + asm volatile (" \ 420 + r6 = r1; \ 421 + /* Roll one bit to force the verifier to track both branches. */\ 422 + call %[bpf_get_prandom_u32]; \ 423 + r0 &= 0x8; \ 424 + /* Put a large number into r1. */ \ 425 + w1 = 0xffff0000; \ 426 + r1 += r0; \ 427 + /* Assign an ID to r1. */ \ 428 + r2 = r1; \ 429 + /* 16-bit spill r1 to stack - should clear the ID! */\ 430 + *(u16*)(r10 - 8) = r1; \ 431 + /* 16-bit fill r2 from stack. */ \ 432 + r2 = *(u16*)(r10 - 8); \ 433 + /* Compare r2 with another register to trigger find_equal_scalars.\ 434 + * Having one random bit is important here, otherwise the verifier cuts\ 435 + * the corners. If the ID was mistakenly preserved on spill, this would\ 436 + * cause the verifier to think that r1 is also equal to zero in one of\ 437 + * the branches, and equal to eight on the other branch.\ 438 + */ \ 439 + r3 = 0; \ 440 + if r2 != r3 goto l0_%=; \ 441 + l0_%=: r1 >>= 16; \ 442 + /* At this point, if the verifier thinks that r1 is 0, an out-of-bounds\ 443 + * read will happen, because it actually contains 0xffff.\ 444 + */ \ 445 + r6 += r1; \ 446 + r0 = *(u32*)(r6 + 0); \ 447 + exit; \ 448 + " : 449 + : __imm(bpf_get_prandom_u32) 450 + : __clobber_all); 451 + } 452 + 374 453 char _license[] SEC("license") = "GPL";
+3 -3
tools/testing/selftests/kselftest_harness.h
··· 249 249 250 250 /** 251 251 * FIXTURE_SETUP() - Prepares the setup function for the fixture. 252 - * *_metadata* is included so that EXPECT_* and ASSERT_* work correctly. 252 + * *_metadata* is included so that EXPECT_*, ASSERT_* etc. work correctly. 253 253 * 254 254 * @fixture_name: fixture name 255 255 * ··· 275 275 276 276 /** 277 277 * FIXTURE_TEARDOWN() 278 - * *_metadata* is included so that EXPECT_* and ASSERT_* work correctly. 278 + * *_metadata* is included so that EXPECT_*, ASSERT_* etc. work correctly. 279 279 * 280 280 * @fixture_name: fixture name 281 281 * ··· 388 388 if (setjmp(_metadata->env) == 0) { \ 389 389 fixture_name##_setup(_metadata, &self, variant->data); \ 390 390 /* Let setup failure terminate early. */ \ 391 - if (!_metadata->passed) \ 391 + if (!_metadata->passed || _metadata->skip) \ 392 392 return; \ 393 393 _metadata->setup_completed = true; \ 394 394 fixture_name##_##test_name(_metadata, &self, variant->data); \
+8 -5
tools/testing/selftests/mm/Makefile
··· 5 5 6 6 include local_config.mk 7 7 8 + ifeq ($(ARCH),) 9 + 8 10 ifeq ($(CROSS_COMPILE),) 9 11 uname_M := $(shell uname -m 2>/dev/null || echo not) 10 12 else 11 13 uname_M := $(shell echo $(CROSS_COMPILE) | grep -o '^[a-z0-9]\+') 12 14 endif 13 - MACHINE ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/' -e 's/ppc64.*/ppc64/') 15 + ARCH ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/' -e 's/ppc64.*/ppc64/') 16 + endif 14 17 15 18 # Without this, failed build products remain, with up-to-date timestamps, 16 19 # thus tricking Make (and you!) into believing that All Is Well, in subsequent ··· 68 65 TEST_GEN_PROGS += ksm_functional_tests 69 66 TEST_GEN_PROGS += mdwe_test 70 67 71 - ifeq ($(MACHINE),x86_64) 68 + ifeq ($(ARCH),x86_64) 72 69 CAN_BUILD_I386 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_32bit_program.c -m32) 73 70 CAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_64bit_program.c) 74 71 CAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_program.c -no-pie) ··· 90 87 endif 91 88 else 92 89 93 - ifneq (,$(findstring $(MACHINE),ppc64)) 90 + ifneq (,$(findstring $(ARCH),ppc64)) 94 91 TEST_GEN_PROGS += protection_keys 95 92 endif 96 93 97 94 endif 98 95 99 - ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sparc64 x86_64)) 96 + ifneq (,$(filter $(ARCH),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sparc64 x86_64)) 100 97 TEST_GEN_PROGS += va_high_addr_switch 101 98 TEST_GEN_PROGS += virtual_address_range 102 99 TEST_GEN_PROGS += write_to_hugetlbfs ··· 115 112 $(OUTPUT)/uffd-stress: uffd-common.c 116 113 $(OUTPUT)/uffd-unit-tests: uffd-common.c 117 114 118 - ifeq ($(MACHINE),x86_64) 115 + ifeq ($(ARCH),x86_64) 119 116 BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32)) 120 117 BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64)) 121 118
+19 -8
tools/testing/selftests/net/fcnal-test.sh
··· 92 92 93 93 which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping) 94 94 95 + # Check if FIPS mode is enabled 96 + if [ -f /proc/sys/crypto/fips_enabled ]; then 97 + fips_enabled=`cat /proc/sys/crypto/fips_enabled` 98 + else 99 + fips_enabled=0 100 + fi 101 + 95 102 ################################################################################ 96 103 # utilities 97 104 ··· 1290 1283 run_cmd nettest -d ${NSA_DEV} -r ${a} 1291 1284 log_test_addr ${a} $? 1 "No server, device client, local conn" 1292 1285 1293 - ipv4_tcp_md5_novrf 1286 + [ "$fips_enabled" = "1" ] || ipv4_tcp_md5_novrf 1294 1287 1295 1288 ipv4_tcp_dontroute 0 1296 1289 ipv4_tcp_dontroute 2 ··· 1347 1340 log_test_addr ${a} $? 1 "Global server, local connection" 1348 1341 1349 1342 # run MD5 tests 1350 - setup_vrf_dup 1351 - ipv4_tcp_md5 1352 - cleanup_vrf_dup 1343 + if [ "$fips_enabled" = "0" ]; then 1344 + setup_vrf_dup 1345 + ipv4_tcp_md5 1346 + cleanup_vrf_dup 1347 + fi 1353 1348 1354 1349 # 1355 1350 # enable VRF global server ··· 2868 2859 log_test_addr ${a} $? 1 "No server, device client, local conn" 2869 2860 done 2870 2861 2871 - ipv6_tcp_md5_novrf 2862 + [ "$fips_enabled" = "1" ] || ipv6_tcp_md5_novrf 2872 2863 } 2873 2864 2874 2865 ipv6_tcp_vrf() ··· 2938 2929 log_test_addr ${a} $? 1 "Global server, local connection" 2939 2930 2940 2931 # run MD5 tests 2941 - setup_vrf_dup 2942 - ipv6_tcp_md5 2943 - cleanup_vrf_dup 2932 + if [ "$fips_enabled" = "0" ]; then 2933 + setup_vrf_dup 2934 + ipv6_tcp_md5 2935 + cleanup_vrf_dup 2936 + fi 2944 2937 2945 2938 # 2946 2939 # enable VRF global server
+4
tools/testing/selftests/net/forwarding/mirror_gre_bridge_1d.sh
··· 94 94 95 95 test_gretap() 96 96 { 97 + ip neigh replace 192.0.2.130 lladdr $(mac_get $h3) \ 98 + nud permanent dev br2 97 99 full_test_span_gre_dir gt4 ingress 8 0 "mirror to gretap" 98 100 full_test_span_gre_dir gt4 egress 0 8 "mirror to gretap" 99 101 } 100 102 101 103 test_ip6gretap() 102 104 { 105 + ip neigh replace 2001:db8:2::2 lladdr $(mac_get $h3) \ 106 + nud permanent dev br2 103 107 full_test_span_gre_dir gt6 ingress 8 0 "mirror to ip6gretap" 104 108 full_test_span_gre_dir gt6 egress 0 8 "mirror to ip6gretap" 105 109 }
+4
tools/testing/selftests/net/forwarding/mirror_gre_bridge_1q.sh
··· 90 90 91 91 test_gretap() 92 92 { 93 + ip neigh replace 192.0.2.130 lladdr $(mac_get $h3) \ 94 + nud permanent dev br1 93 95 full_test_span_gre_dir gt4 ingress 8 0 "mirror to gretap" 94 96 full_test_span_gre_dir gt4 egress 0 8 "mirror to gretap" 95 97 } 96 98 97 99 test_ip6gretap() 98 100 { 101 + ip neigh replace 2001:db8:2::2 lladdr $(mac_get $h3) \ 102 + nud permanent dev br1 99 103 full_test_span_gre_dir gt6 ingress 8 0 "mirror to ip6gretap" 100 104 full_test_span_gre_dir gt6 egress 0 8 "mirror to ip6gretap" 101 105 }
+23 -1
tools/testing/selftests/net/tls.c
··· 26 26 #define TLS_PAYLOAD_MAX_LEN 16384 27 27 #define SOL_TLS 282 28 28 29 + static int fips_enabled; 30 + 29 31 struct tls_crypto_info_keys { 30 32 union { 31 33 struct tls12_crypto_info_aes_gcm_128 aes128; ··· 238 236 { 239 237 uint16_t tls_version; 240 238 uint16_t cipher_type; 241 - bool nopad; 239 + bool nopad, fips_non_compliant; 242 240 }; 243 241 244 242 FIXTURE_VARIANT_ADD(tls, 12_aes_gcm) ··· 257 255 { 258 256 .tls_version = TLS_1_2_VERSION, 259 257 .cipher_type = TLS_CIPHER_CHACHA20_POLY1305, 258 + .fips_non_compliant = true, 260 259 }; 261 260 262 261 FIXTURE_VARIANT_ADD(tls, 13_chacha) 263 262 { 264 263 .tls_version = TLS_1_3_VERSION, 265 264 .cipher_type = TLS_CIPHER_CHACHA20_POLY1305, 265 + .fips_non_compliant = true, 266 266 }; 267 267 268 268 FIXTURE_VARIANT_ADD(tls, 13_sm4_gcm) 269 269 { 270 270 .tls_version = TLS_1_3_VERSION, 271 271 .cipher_type = TLS_CIPHER_SM4_GCM, 272 + .fips_non_compliant = true, 272 273 }; 273 274 274 275 FIXTURE_VARIANT_ADD(tls, 13_sm4_ccm) 275 276 { 276 277 .tls_version = TLS_1_3_VERSION, 277 278 .cipher_type = TLS_CIPHER_SM4_CCM, 279 + .fips_non_compliant = true, 278 280 }; 279 281 280 282 FIXTURE_VARIANT_ADD(tls, 12_aes_ccm) ··· 317 311 struct tls_crypto_info_keys tls12; 318 312 int one = 1; 319 313 int ret; 314 + 315 + if (fips_enabled && variant->fips_non_compliant) 316 + SKIP(return, "Unsupported cipher in FIPS mode"); 320 317 321 318 tls_crypto_info_init(variant->tls_version, variant->cipher_type, 322 319 &tls12); ··· 2003 1994 2004 1995 close(fd); 2005 1996 close(cfd); 1997 + } 1998 + 1999 + static void __attribute__((constructor)) fips_check(void) { 2000 + int res; 2001 + FILE *f; 2002 + 2003 + f = fopen("/proc/sys/crypto/fips_enabled", "r"); 2004 + if (f) { 2005 + res = fscanf(f, "%d", &fips_enabled); 2006 + if (res != 1) 2007 + ksft_print_msg("ERROR: Couldn't read /proc/sys/crypto/fips_enabled\n"); 2008 + fclose(f); 2009 + } 2006 2010 } 2007 2011 2008 2012 TEST_HARNESS_MAIN
+16 -16
tools/testing/selftests/net/vrf-xfrm-tests.sh
··· 264 264 ip -netns host1 xfrm state add src ${HOST1_4} dst ${HOST2_4} \ 265 265 proto esp spi ${SPI_1} reqid 0 mode tunnel \ 266 266 replay-window 4 replay-oseq 0x4 \ 267 - auth-trunc 'hmac(md5)' ${AUTH_1} 96 \ 268 - enc 'cbc(des3_ede)' ${ENC_1} \ 267 + auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ 268 + enc 'cbc(aes)' ${ENC_1} \ 269 269 sel src ${h1_4} dst ${h2_4} ${devarg} 270 270 271 271 ip -netns host2 xfrm state add src ${HOST1_4} dst ${HOST2_4} \ 272 272 proto esp spi ${SPI_1} reqid 0 mode tunnel \ 273 273 replay-window 4 replay-oseq 0x4 \ 274 - auth-trunc 'hmac(md5)' ${AUTH_1} 96 \ 275 - enc 'cbc(des3_ede)' ${ENC_1} \ 274 + auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ 275 + enc 'cbc(aes)' ${ENC_1} \ 276 276 sel src ${h1_4} dst ${h2_4} 277 277 278 278 279 279 ip -netns host1 xfrm state add src ${HOST2_4} dst ${HOST1_4} \ 280 280 proto esp spi ${SPI_2} reqid 0 mode tunnel \ 281 281 replay-window 4 replay-oseq 0x4 \ 282 - auth-trunc 'hmac(md5)' ${AUTH_2} 96 \ 283 - enc 'cbc(des3_ede)' ${ENC_2} \ 282 + auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ 283 + enc 'cbc(aes)' ${ENC_2} \ 284 284 sel src ${h2_4} dst ${h1_4} ${devarg} 285 285 286 286 ip -netns host2 xfrm state add src ${HOST2_4} dst ${HOST1_4} \ 287 287 proto esp spi ${SPI_2} reqid 0 mode tunnel \ 288 288 replay-window 4 replay-oseq 0x4 \ 289 - auth-trunc 'hmac(md5)' ${AUTH_2} 96 \ 290 - enc 'cbc(des3_ede)' ${ENC_2} \ 289 + auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ 290 + enc 'cbc(aes)' ${ENC_2} \ 291 291 sel src ${h2_4} dst ${h1_4} 292 292 293 293 294 294 ip -6 -netns host1 xfrm state add src ${HOST1_6} dst ${HOST2_6} \ 295 295 proto esp spi ${SPI_1} reqid 0 mode tunnel \ 296 296 replay-window 4 replay-oseq 0x4 \ 297 - auth-trunc 'hmac(md5)' ${AUTH_1} 96 \ 298 - enc 'cbc(des3_ede)' ${ENC_1} \ 297 + auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ 298 + enc 'cbc(aes)' ${ENC_1} \ 299 299 sel src ${h1_6} dst ${h2_6} ${devarg} 300 300 301 301 ip -6 -netns host2 xfrm state add src ${HOST1_6} dst ${HOST2_6} \ 302 302 proto esp spi ${SPI_1} reqid 0 mode tunnel \ 303 303 replay-window 4 replay-oseq 0x4 \ 304 - auth-trunc 'hmac(md5)' ${AUTH_1} 96 \ 305 - enc 'cbc(des3_ede)' ${ENC_1} \ 304 + auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ 305 + enc 'cbc(aes)' ${ENC_1} \ 306 306 sel src ${h1_6} dst ${h2_6} 307 307 308 308 309 309 ip -6 -netns host1 xfrm state add src ${HOST2_6} dst ${HOST1_6} \ 310 310 proto esp spi ${SPI_2} reqid 0 mode tunnel \ 311 311 replay-window 4 replay-oseq 0x4 \ 312 - auth-trunc 'hmac(md5)' ${AUTH_2} 96 \ 313 - enc 'cbc(des3_ede)' ${ENC_2} \ 312 + auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ 313 + enc 'cbc(aes)' ${ENC_2} \ 314 314 sel src ${h2_6} dst ${h1_6} ${devarg} 315 315 316 316 ip -6 -netns host2 xfrm state add src ${HOST2_6} dst ${HOST1_6} \ 317 317 proto esp spi ${SPI_2} reqid 0 mode tunnel \ 318 318 replay-window 4 replay-oseq 0x4 \ 319 - auth-trunc 'hmac(md5)' ${AUTH_2} 96 \ 320 - enc 'cbc(des3_ede)' ${ENC_2} \ 319 + auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ 320 + enc 'cbc(aes)' ${ENC_2} \ 321 321 sel src ${h2_6} dst ${h1_6} 322 322 } 323 323
+136 -41
tools/testing/selftests/user_events/dyn_test.c
··· 16 16 17 17 #include "../kselftest_harness.h" 18 18 19 - const char *dyn_file = "/sys/kernel/tracing/dynamic_events"; 20 - const char *clear = "!u:__test_event"; 19 + const char *abi_file = "/sys/kernel/tracing/user_events_data"; 20 + const char *enable_file = "/sys/kernel/tracing/events/user_events/__test_event/enable"; 21 21 22 - static int Append(const char *value) 22 + static bool wait_for_delete(void) 23 23 { 24 - int fd = open(dyn_file, O_RDWR | O_APPEND); 25 - int ret = write(fd, value, strlen(value)); 24 + int i; 25 + 26 + for (i = 0; i < 1000; ++i) { 27 + int fd = open(enable_file, O_RDONLY); 28 + 29 + if (fd == -1) 30 + return true; 31 + 32 + close(fd); 33 + usleep(1000); 34 + } 35 + 36 + return false; 37 + } 38 + 39 + static int reg_event(int fd, int *check, int bit, const char *value) 40 + { 41 + struct user_reg reg = {0}; 42 + 43 + reg.size = sizeof(reg); 44 + reg.name_args = (__u64)value; 45 + reg.enable_bit = bit; 46 + reg.enable_addr = (__u64)check; 47 + reg.enable_size = sizeof(*check); 48 + 49 + if (ioctl(fd, DIAG_IOCSREG, &reg) == -1) 50 + return -1; 51 + 52 + return 0; 53 + } 54 + 55 + static int unreg_event(int fd, int *check, int bit) 56 + { 57 + struct user_unreg unreg = {0}; 58 + 59 + unreg.size = sizeof(unreg); 60 + unreg.disable_bit = bit; 61 + unreg.disable_addr = (__u64)check; 62 + 63 + return ioctl(fd, DIAG_IOCSUNREG, &unreg); 64 + } 65 + 66 + static int parse(int *check, const char *value) 67 + { 68 + int fd = open(abi_file, O_RDWR); 69 + int ret; 70 + 71 + if (fd == -1) 72 + return -1; 73 + 74 + /* Until we have persist flags via dynamic events, use the base name */ 75 + if (value[0] != 'u' || value[1] != ':') { 76 + close(fd); 77 + return -1; 78 + } 79 + 80 + ret = reg_event(fd, check, 31, value + 2); 81 + 82 + if (ret != -1) { 83 + if (unreg_event(fd, check, 31) == -1) 84 + printf("WARN: Couldn't unreg event\n"); 85 + } 26 86 27 87 close(fd); 88 + 28 89 return ret; 29 90 } 30 91 31 - #define CLEAR() \ 92 + static int check_match(int *check, const char *first, const char *second, bool *match) 93 + { 94 + int fd = open(abi_file, O_RDWR); 95 + int ret = -1; 96 + 97 + if (fd == -1) 98 + return -1; 99 + 100 + if (reg_event(fd, check, 31, first) == -1) 101 + goto cleanup; 102 + 103 + if (reg_event(fd, check, 30, second) == -1) { 104 + if (errno == EADDRINUSE) { 105 + /* Name is in use, with different fields */ 106 + *match = false; 107 + ret = 0; 108 + } 109 + 110 + goto cleanup; 111 + } 112 + 113 + *match = true; 114 + ret = 0; 115 + cleanup: 116 + unreg_event(fd, check, 31); 117 + unreg_event(fd, check, 30); 118 + 119 + close(fd); 120 + 121 + wait_for_delete(); 122 + 123 + return ret; 124 + } 125 + 126 + #define TEST_MATCH(x, y) \ 32 127 do { \ 33 - int ret = Append(clear); \ 34 - if (ret == -1) \ 35 - ASSERT_EQ(ENOENT, errno); \ 128 + bool match; \ 129 + ASSERT_NE(-1, check_match(&self->check, x, y, &match)); \ 130 + ASSERT_EQ(true, match); \ 36 131 } while (0) 37 132 38 - #define TEST_PARSE(x) \ 133 + #define TEST_NMATCH(x, y) \ 39 134 do { \ 40 - ASSERT_NE(-1, Append(x)); \ 41 - CLEAR(); \ 135 + bool match; \ 136 + ASSERT_NE(-1, check_match(&self->check, x, y, &match)); \ 137 + ASSERT_EQ(false, match); \ 42 138 } while (0) 43 139 44 - #define TEST_NPARSE(x) ASSERT_EQ(-1, Append(x)) 140 + #define TEST_PARSE(x) ASSERT_NE(-1, parse(&self->check, x)) 141 + 142 + #define TEST_NPARSE(x) ASSERT_EQ(-1, parse(&self->check, x)) 45 143 46 144 FIXTURE(user) { 145 + int check; 47 146 }; 48 147 49 148 FIXTURE_SETUP(user) { 50 - CLEAR(); 51 149 } 52 150 53 151 FIXTURE_TEARDOWN(user) { 54 - CLEAR(); 152 + wait_for_delete(); 55 153 } 56 154 57 155 TEST_F(user, basic_types) { ··· 193 95 TEST_NPARSE("u:__test_event char a 20"); 194 96 } 195 97 196 - TEST_F(user, flags) { 197 - /* Should work */ 198 - TEST_PARSE("u:__test_event:BPF_ITER u32 a"); 199 - /* Forward compat */ 200 - TEST_PARSE("u:__test_event:BPF_ITER,FLAG_FUTURE u32 a"); 201 - } 202 - 203 98 TEST_F(user, matching) { 204 - /* Register */ 205 - ASSERT_NE(-1, Append("u:__test_event struct custom a 20")); 206 - /* Should not match */ 207 - TEST_NPARSE("!u:__test_event struct custom b"); 208 - /* Should match */ 209 - TEST_PARSE("!u:__test_event struct custom a"); 210 - /* Multi field reg */ 211 - ASSERT_NE(-1, Append("u:__test_event u32 a; u32 b")); 212 - /* Non matching cases */ 213 - TEST_NPARSE("!u:__test_event u32 a"); 214 - TEST_NPARSE("!u:__test_event u32 b"); 215 - TEST_NPARSE("!u:__test_event u32 a; u32 "); 216 - TEST_NPARSE("!u:__test_event u32 a; u32 a"); 217 - /* Matching case */ 218 - TEST_PARSE("!u:__test_event u32 a; u32 b"); 219 - /* Register */ 220 - ASSERT_NE(-1, Append("u:__test_event u32 a; u32 b")); 221 - /* Ensure trailing semi-colon case */ 222 - TEST_PARSE("!u:__test_event u32 a; u32 b;"); 99 + /* Single name matches */ 100 + TEST_MATCH("__test_event u32 a", 101 + "__test_event u32 a"); 102 + 103 + /* Multiple names match */ 104 + TEST_MATCH("__test_event u32 a; u32 b", 105 + "__test_event u32 a; u32 b"); 106 + 107 + /* Multiple names match with dangling ; */ 108 + TEST_MATCH("__test_event u32 a; u32 b", 109 + "__test_event u32 a; u32 b;"); 110 + 111 + /* Single name doesn't match */ 112 + TEST_NMATCH("__test_event u32 a", 113 + "__test_event u32 b"); 114 + 115 + /* Multiple names don't match */ 116 + TEST_NMATCH("__test_event u32 a; u32 b", 117 + "__test_event u32 b; u32 a"); 118 + 119 + /* Types don't match */ 120 + TEST_NMATCH("__test_event u64 a; u64 b", 121 + "__test_event u32 a; u32 b"); 223 122 } 224 123 225 124 int main(int argc, char **argv)
+76 -10
tools/testing/selftests/user_events/ftrace_test.c
··· 102 102 return -1; 103 103 } 104 104 105 + static bool wait_for_delete(void) 106 + { 107 + int i; 108 + 109 + for (i = 0; i < 1000; ++i) { 110 + int fd = open(enable_file, O_RDONLY); 111 + 112 + if (fd == -1) 113 + return true; 114 + 115 + close(fd); 116 + usleep(1000); 117 + } 118 + 119 + return false; 120 + } 121 + 105 122 static int clear(int *check) 106 123 { 107 124 struct user_unreg unreg = {0}; 125 + int fd; 108 126 109 127 unreg.size = sizeof(unreg); 110 128 unreg.disable_bit = 31; 111 129 unreg.disable_addr = (__u64)check; 112 130 113 - int fd = open(data_file, O_RDWR); 131 + fd = open(data_file, O_RDWR); 114 132 115 133 if (fd == -1) 116 134 return -1; 117 135 118 136 if (ioctl(fd, DIAG_IOCSUNREG, &unreg) == -1) 119 137 if (errno != ENOENT) 120 - return -1; 138 + goto fail; 121 139 122 - if (ioctl(fd, DIAG_IOCSDEL, "__test_event") == -1) 123 - if (errno != ENOENT) 124 - return -1; 140 + if (ioctl(fd, DIAG_IOCSDEL, "__test_event") == -1) { 141 + if (errno == EBUSY) { 142 + if (!wait_for_delete()) 143 + goto fail; 144 + } else if (errno != ENOENT) 145 + goto fail; 146 + } 125 147 126 148 close(fd); 127 149 128 150 return 0; 151 + fail: 152 + close(fd); 153 + 154 + return -1; 129 155 } 130 156 131 157 static int check_print_fmt(const char *event, const char *expected, int *check) ··· 181 155 /* Register should work */ 182 156 ret = ioctl(fd, DIAG_IOCSREG, &reg); 183 157 184 - close(fd); 185 - 186 158 if (ret != 0) { 159 + close(fd); 187 160 printf("Reg failed in fmt\n"); 188 161 return ret; 189 162 } 190 163 191 164 /* Ensure correct print_fmt */ 192 165 ret = get_print_fmt(print_fmt, sizeof(print_fmt)); 166 + 167 + close(fd); 193 168 194 169 if (ret != 0) 195 170 return ret; ··· 255 228 ASSERT_EQ(0, ioctl(self->data_fd, DIAG_IOCSREG, &reg)); 256 229 ASSERT_EQ(0, reg.write_index); 257 230 231 + /* Multiple registers to same name but different args should fail */ 232 + reg.enable_bit = 29; 233 + reg.name_args = (__u64)"__test_event u32 field1;"; 234 + ASSERT_EQ(-1, ioctl(self->data_fd, DIAG_IOCSREG, &reg)); 235 + ASSERT_EQ(EADDRINUSE, errno); 236 + 258 237 /* Ensure disabled */ 259 238 self->enable_fd = open(enable_file, O_RDWR); 260 239 ASSERT_NE(-1, self->enable_fd); ··· 283 250 unreg.disable_bit = 30; 284 251 ASSERT_EQ(0, ioctl(self->data_fd, DIAG_IOCSUNREG, &unreg)); 285 252 286 - /* Delete should work only after close and unregister */ 253 + /* Delete should have been auto-done after close and unregister */ 287 254 close(self->data_fd); 288 - self->data_fd = open(data_file, O_RDWR); 289 - ASSERT_EQ(0, ioctl(self->data_fd, DIAG_IOCSDEL, "__test_event")); 255 + 256 + ASSERT_EQ(true, wait_for_delete()); 290 257 } 291 258 292 259 TEST_F(user, write_events) { ··· 341 308 reg.write_index = -1; 342 309 ASSERT_EQ(-1, writev(self->data_fd, (const struct iovec *)io, 3)); 343 310 ASSERT_EQ(EINVAL, errno); 311 + } 312 + 313 + TEST_F(user, write_empty_events) { 314 + struct user_reg reg = {0}; 315 + struct iovec io[1]; 316 + int before = 0, after = 0; 317 + 318 + reg.size = sizeof(reg); 319 + reg.name_args = (__u64)"__test_event"; 320 + reg.enable_bit = 31; 321 + reg.enable_addr = (__u64)&self->check; 322 + reg.enable_size = sizeof(self->check); 323 + 324 + io[0].iov_base = &reg.write_index; 325 + io[0].iov_len = sizeof(reg.write_index); 326 + 327 + /* Register should work */ 328 + ASSERT_EQ(0, ioctl(self->data_fd, DIAG_IOCSREG, &reg)); 329 + ASSERT_EQ(0, reg.write_index); 330 + ASSERT_EQ(0, self->check); 331 + 332 + /* Enable event */ 333 + self->enable_fd = open(enable_file, O_RDWR); 334 + ASSERT_NE(-1, write(self->enable_fd, "1", sizeof("1"))) 335 + 336 + /* Event should now be enabled */ 337 + ASSERT_EQ(1 << reg.enable_bit, self->check); 338 + 339 + /* Write should make it out to ftrace buffers */ 340 + before = trace_bytes(); 341 + ASSERT_NE(-1, writev(self->data_fd, (const struct iovec *)io, 1)); 342 + after = trace_bytes(); 343 + ASSERT_GT(after, before); 344 344 } 345 345 346 346 TEST_F(user, write_fault) {
+82
tools/testing/selftests/user_events/perf_test.c
··· 81 81 return offset; 82 82 } 83 83 84 + static int clear(int *check) 85 + { 86 + struct user_unreg unreg = {0}; 87 + 88 + unreg.size = sizeof(unreg); 89 + unreg.disable_bit = 31; 90 + unreg.disable_addr = (__u64)check; 91 + 92 + int fd = open(data_file, O_RDWR); 93 + 94 + if (fd == -1) 95 + return -1; 96 + 97 + if (ioctl(fd, DIAG_IOCSUNREG, &unreg) == -1) 98 + if (errno != ENOENT) 99 + return -1; 100 + 101 + if (ioctl(fd, DIAG_IOCSDEL, "__test_event") == -1) 102 + if (errno != ENOENT) 103 + return -1; 104 + 105 + close(fd); 106 + 107 + return 0; 108 + } 109 + 84 110 FIXTURE(user) { 85 111 int data_fd; 86 112 int check; ··· 119 93 120 94 FIXTURE_TEARDOWN(user) { 121 95 close(self->data_fd); 96 + 97 + if (clear(&self->check) != 0) 98 + printf("WARNING: Clear didn't work!\n"); 122 99 } 123 100 124 101 TEST_F(user, perf_write) { ··· 181 152 /* Ensure correct */ 182 153 ASSERT_EQ(event.field1, *val++); 183 154 ASSERT_EQ(event.field2, *val++); 155 + 156 + munmap(perf_page, page_size * 2); 157 + close(fd); 158 + 159 + /* Status should be updated */ 160 + ASSERT_EQ(0, self->check); 161 + } 162 + 163 + TEST_F(user, perf_empty_events) { 164 + struct perf_event_attr pe = {0}; 165 + struct user_reg reg = {0}; 166 + struct perf_event_mmap_page *perf_page; 167 + int page_size = sysconf(_SC_PAGESIZE); 168 + int id, fd; 169 + __u32 *val; 170 + 171 + reg.size = sizeof(reg); 172 + reg.name_args = (__u64)"__test_event"; 173 + reg.enable_bit = 31; 174 + reg.enable_addr = (__u64)&self->check; 175 + reg.enable_size = sizeof(self->check); 176 + 177 + /* Register should work */ 178 + ASSERT_EQ(0, ioctl(self->data_fd, DIAG_IOCSREG, &reg)); 179 + ASSERT_EQ(0, reg.write_index); 180 + ASSERT_EQ(0, self->check); 181 + 182 + /* Id should be there */ 183 + id = get_id(); 184 + ASSERT_NE(-1, id); 185 + 186 + pe.type = PERF_TYPE_TRACEPOINT; 187 + pe.size = sizeof(pe); 188 + pe.config = id; 189 + pe.sample_type = PERF_SAMPLE_RAW; 190 + pe.sample_period = 1; 191 + pe.wakeup_events = 1; 192 + 193 + /* Tracepoint attach should work */ 194 + fd = perf_event_open(&pe, 0, -1, -1, 0); 195 + ASSERT_NE(-1, fd); 196 + 197 + perf_page = mmap(NULL, page_size * 2, PROT_READ, MAP_SHARED, fd, 0); 198 + ASSERT_NE(MAP_FAILED, perf_page); 199 + 200 + /* Status should be updated */ 201 + ASSERT_EQ(1 << reg.enable_bit, self->check); 202 + 203 + /* Ensure write shows up at correct offset */ 204 + ASSERT_NE(-1, write(self->data_fd, &reg.write_index, 205 + sizeof(reg.write_index))); 206 + val = (void *)(((char *)perf_page) + perf_page->data_offset); 207 + ASSERT_EQ(PERF_RECORD_SAMPLE, *val); 184 208 185 209 munmap(perf_page, page_size * 2); 186 210 close(fd);
+19 -1
virt/kvm/kvm_main.c
··· 686 686 687 687 return __kvm_handle_hva_range(kvm, &range); 688 688 } 689 + 690 + static bool kvm_change_spte_gfn(struct kvm *kvm, struct kvm_gfn_range *range) 691 + { 692 + /* 693 + * Skipping invalid memslots is correct if and only change_pte() is 694 + * surrounded by invalidate_range_{start,end}(), which is currently 695 + * guaranteed by the primary MMU. If that ever changes, KVM needs to 696 + * unmap the memslot instead of skipping the memslot to ensure that KVM 697 + * doesn't hold references to the old PFN. 698 + */ 699 + WARN_ON_ONCE(!READ_ONCE(kvm->mn_active_invalidate_count)); 700 + 701 + if (range->slot->flags & KVM_MEMSLOT_INVALID) 702 + return false; 703 + 704 + return kvm_set_spte_gfn(kvm, range); 705 + } 706 + 689 707 static void kvm_mmu_notifier_change_pte(struct mmu_notifier *mn, 690 708 struct mm_struct *mm, 691 709 unsigned long address, ··· 725 707 if (!READ_ONCE(kvm->mmu_invalidate_in_progress)) 726 708 return; 727 709 728 - kvm_handle_hva_range(mn, address, address + 1, pte, kvm_set_spte_gfn); 710 + kvm_handle_hva_range(mn, address, address + 1, pte, kvm_change_spte_gfn); 729 711 } 730 712 731 713 void kvm_mmu_invalidate_begin(struct kvm *kvm, unsigned long start,