Linux 5.10.27
Greg Kroah-Hartman
maintainerDocumentation/virt/kvm/api.rst +4 -2
@@ -4810,8 +4810,10 @@ If an MSR access is not permitted through the filtering, it generates a allows user space to deflect and potentially handle various MSR accesses into user space. -If a vCPU is in running state while this ioctl is invoked, the vCPU may -experience inconsistent filtering behavior on MSR accesses. +Note, invoking this ioctl with a vCPU is running is inherently racy. However, +KVM does guarantee that vCPUs will see either the previous filter or the new +filter, e.g. MSRs with identical settings in both the old and new filter will +have deterministic behavior. 5. The kvm_run structure
Makefile +3 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 26 +SUBLEVEL = 27 EXTRAVERSION = NAME = Dare mighty things
@@ -265,7 +265,8 @@ no-dot-config-targets := $(clean-targets) \ $(version_h) headers headers_% archheaders archscripts \ %asm-generic kernelversion %src-pkg dt_binding_check \ outputmakefile -no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease +no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \ + image_name single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ config-build :=
arch/arm/boot/dts/at91-sam9x60ek.dts +0 -8
@@ -334,14 +334,6 @@ ethernet-phy@0 { }; &pinctrl { - atmel,mux-mask = < - /* A B C */ - 0xFFFFFE7F 0xC0E0397F 0xEF00019D /* pioA */ - 0x03FFFFFF 0x02FC7E68 0x00780000 /* pioB */ - 0xffffffff 0xF83FFFFF 0xB800F3FC /* pioC */ - 0x003FFFFF 0x003F8000 0x00000000 /* pioD */ - >; - adc { pinctrl_adc_default: adc_default { atmel,pins = <AT91_PIOB 15 AT91_PERIPH_A AT91_PINCTRL_NONE>;
arch/arm/boot/dts/at91-sama5d27_som1.dtsi +2 -2
@@ -84,8 +84,8 @@ macb0: ethernet@f8008000 { pinctrl-0 = <&pinctrl_macb0_default>; phy-mode = "rmii"; - ethernet-phy@0 { - reg = <0x0>; + ethernet-phy@7 { + reg = <0x7>; interrupt-parent = <&pioA>; interrupts = <PIN_PD31 IRQ_TYPE_LEVEL_LOW>; pinctrl-names = "default";
arch/arm/boot/dts/imx6ull-myir-mys-6ulx-eval.dts +1 -0
@@ -14,5 +14,6 @@ / { }; &gpmi { + fsl,use-minimum-ecc; status = "okay"; };
arch/arm/boot/dts/sam9x60.dtsi +9 -0
@@ -606,6 +606,15 @@ pinctrl: pinctrl@fffff400 { compatible = "microchip,sam9x60-pinctrl", "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus"; ranges = <0xfffff400 0xfffff400 0x800>; + /* mux-mask corresponding to sam9x60 SoC in TFBGA228L package */ + atmel,mux-mask = < + /* A B C */ + 0xffffffff 0xffe03fff 0xef00019d /* pioA */ + 0x03ffffff 0x02fc7e7f 0x00780000 /* pioB */ + 0xffffffff 0xffffffff 0xf83fffff /* pioC */ + 0x003fffff 0x003f8000 0x00000000 /* pioD */ + >; + pioA: gpio@fffff400 { compatible = "microchip,sam9x60-gpio", "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; reg = <0xfffff400 0x200>;
arch/arm/mach-omap2/sr_device.c +58 -17
115 lines not on this page · raw message
arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi +1 -0
@@ -192,6 +192,7 @@ crypto: crypto@1700000 { ranges = <0x0 0x00 0x1700000 0x100000>; reg = <0x00 0x1700000 0x0 0x100000>; interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; + dma-coherent; sec_jr0: jr@10000 { compatible = "fsl,sec-v5.4-job-ring",
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +1 -0
@@ -322,6 +322,7 @@ crypto: crypto@1700000 { ranges = <0x0 0x00 0x1700000 0x100000>; reg = <0x00 0x1700000 0x0 0x100000>; interrupts = <0 75 0x4>; + dma-coherent; sec_jr0: jr@10000 { compatible = "fsl,sec-v5.4-job-ring",
arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi +1 -0
@@ -325,6 +325,7 @@ crypto: crypto@1700000 { ranges = <0x0 0x00 0x1700000 0x100000>; reg = <0x00 0x1700000 0x0 0x100000>; interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; + dma-coherent; sec_jr0: jr@10000 { compatible = "fsl,sec-v5.4-job-ring",
arch/arm64/kernel/crash_dump.c +2 -0
@@ -64,5 +64,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,ssize_t elfcorehdr_read (char *buf,size_t count,u64 *ppos) {memcpy (buf,phys_to_virt ((phys_addr_t)*ppos), count); + *ppos += count; +return count; }
arch/arm64/kernel/stacktrace.c +5 -4
@@ -199,8 +199,9 @@ void show_stack(struct task_struct *tsk, unsigned long *sp, const char *loglvl)#ifdef CONFIG_STACKTRACE -void arch_stack_walk (stack_trace_consume_fn consume_entry,void *cookie, -struct task_struct *task,struct pt_regs *regs) +noinline void arch_stack_walk(stack_trace_consume_fn consume_entry, +void *cookie,struct task_struct *task, +struct pt_regs *regs) {struct stackframe frame;
@@ -208,8 +209,8 @@ void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,start_backtrace (&frame, regs->regs[29 ], regs->pc); else if (task == current) start_backtrace(&frame, - (unsigned long)__builtin_frame_address(0), - (unsigned long)arch_stack_walk); + (unsigned long)__builtin_frame_address(1), + (unsigned long)__builtin_return_address(0)); else start_backtrace(&frame, thread_saved_fp(task),thread_saved_pc (task ));
arch/ia64/include/asm/syscall.h +1 -1
@@ -32,7 +32,7 @@ static inline void syscall_rollback(struct task_struct *task,static inline long syscall_get_error (struct task_struct *task,struct pt_regs *regs) { -return regs->r10 ==-1 ? regs->r8:0 ; +return regs->r10 ==-1 ? -regs->r8:0 ; } static inline long syscall_get_return_value(struct task_struct *task,
arch/ia64/kernel/ptrace.c +18 -6
@@ -2010,27 +2010,39 @@ static void syscall_get_set_args_cb(struct unw_frame_info *info, void *data) {struct syscall_get_set_args *args = data;struct pt_regs *pt = args->regs; -unsigned long *krbs, cfm, ndirty; +unsigned long *krbs, cfm, ndirty, nlocals, nouts;int i, count;if (unw_unwind_to_user (info) <0 )return ; +/* +* We get here via a few paths: +* - break instruction: cfm is shared with caller. +* syscall args are in out= regs, locals are non-empty. +* - epsinstruction: cfm is set by br.call +* locals don't exist. +* +* For both cases argguments are reachable in cfm.sof - cfm.sol. +* CFM: [ ... | sor: 17..14 | sol : 13..7 | sof : 6..0 ] +*/ cfm = pt->cr_ifs; + nlocals = (cfm >>7 ) &0x7f ;/* aka sol */ + nouts = (cfm &0x7f ) - nlocals;/* aka sof - sol */ krbs = (unsigned long *)info->task +IA64_RBS_OFFSET /8 ; ndirty =ia64_rse_num_regs (krbs, krbs + (pt->loadrs >>19 )); count =0 ;if (in_syscall (pt)) - count =min_t (int, args->n, cfm &0x7f ); + count =min_t (int, args->n, nouts); +/* Iterate over outs. */ for (i =0 ; i < count; i++) { +int j = ndirty + nlocals + i + args->i;if (args->rw) - *ia64_rse_skip_regs (krbs, ndirty + i + args->i) = - args->args[i]; + *ia64_rse_skip_regs (krbs, j) = args->args[i];else - args->args[i] = *ia64_rse_skip_regs (krbs, - ndirty + i + args->i); + args->args[i] = *ia64_rse_skip_regs (krbs, j); }if (!args->rw) {
arch/powerpc/include/asm/dcr-native.h +4 -4
@@ -53,8 +53,8 @@ static inline void mtdcrx(unsigned int reg, unsigned int val)#define mfdcr (rn) \ ({unsigned int rval; \ if (__builtin_constant_p(rn) && rn < 1024) \ - asm volatile("mfdcr %0," __stringify(rn) \ - : "=r" (rval)); \ + asm volatile("mfdcr %0, %1" : "=r" (rval) \ + : "n" (rn)); \ else if (likely(cpu_has_feature(CPU_FTR_INDEXED_DCR))) \ rval = mfdcrx(rn); \ else \
@@ -64,8 +64,8 @@ static inline void mtdcrx(unsigned int reg, unsigned int val)#define mtdcr (rn, v) \ do { \ if (__builtin_constant_p(rn) && rn < 1024) \ - asm volatile("mtdcr " __stringify(rn) ",%0" \ - : : "r" (v)); \ + asm volatile("mtdcr %0, %1" \ + : : "n" (rn), "r" (v)); \ else if (likely(cpu_has_feature(CPU_FTR_INDEXED_DCR))) \ mtdcrx(rn, v); \ else \
arch/sparc/kernel/traps_64.c +6 -7
@@ -275,14 +275,13 @@ bool is_no_fault_exception(struct pt_regs *regs) asi = (regs->tstate >>24 );/* saved %asi */ else asi = (insn >>5 );/* immediate asi */ -if ((asi &0xf2 ) ==ASI_PNF ) { -if (insn &0x1000000 ) {/* op3[5:4]=3 */ -handle_ldf_stq (insn, regs); -return true; - }else if (insn &0x200000 ) {/* op3[2], stores */ +if ((asi &0xf6 ) ==ASI_PNF ) { +if (insn &0x200000 )/* op3[2], stores */ return false; - } -handle_ld_nf (insn, regs); +if (insn &0x1000000 )/* op3[5:4]=3 (fp) */ +handle_ldf_stq (insn, regs); +else +handle_ld_nf (insn, regs);return true; } }
arch/x86/include/asm/kvm_host.h +9 -5
@@ -890,6 +890,12 @@ enum kvm_irqchip_mode { KVM_IRQCHIP_SPLIT, /* created with KVM_CAP_SPLIT_IRQCHIP */ }; +struct kvm_x86_msr_filter { +u8 count; +bool default_allow:1 ; +struct msr_bitmap_range ranges[16 ]; +}; +#define APICV_INHIBIT_REASON_DISABLE 0#define APICV_INHIBIT_REASON_HYPERV 1#define APICV_INHIBIT_REASON_NESTED 2
@@ -985,14 +991,12 @@ struct kvm_arch {bool guest_can_read_msr_platform_info;bool exception_payload_enabled; +bool bus_lock_detection_enabled; +/* Deflect RDMSR and WRMSR to user space when they trigger a #GP */ u32 user_space_msr_mask; -struct { -u8 count; -bool default_allow:1 ; -struct msr_bitmap_range ranges[16 ]; - } msr_filter; +struct kvm_x86_msr_filter __rcu *msr_filter;struct kvm_pmu_event_filter *pmu_event_filter;struct task_struct *nx_lpage_recovery_thread;
arch/x86/include/asm/static_call.h +7 -0
@@ -37,4 +37,11 @@#define ARCH_DEFINE_STATIC_CALL_NULL_TRAMP (name) \ __ARCH_DEFINE_STATIC_CALL_TRAMP(name, "ret; nop; nop; nop; nop") + +#define ARCH_ADD_TRAMP_KEY (name) \ + asm(".pushsection .static_call_tramp_key, \"a\" \n" \ + ".long " STATIC_CALL_TRAMP_STR(name) " - . \n" \ + ".long " STATIC_CALL_KEY_STR(name) " - . \n" \ + ".popsection \n") +#endif /* _ASM_STATIC_CALL_H */
arch/x86/include/asm/xen/page.h +0 -12
@@ -86,18 +86,6 @@ clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops, }#endif -/* -* The maximum amount of extra memory compared to the base size. The -* main scaling factor is the size of struct page. At extreme ratios -* of base:extra, all the base memory can be filled with page -* structures for the extra memory, leaving no space for anything -* else. -* -* 10x seems like a reasonable balance between scaling flexibility and -* leaving a practically usable system. -*/ -#define XEN_EXTRA_MEM_RATIO (10) -/* * Helper functions to write or read unsigned long values to/from * memory, when the access may fault.
arch/x86/kvm/x86.c +65 -44
187 lines not on this page · raw message
arch/x86/mm/mem_encrypt.c +1 -1
@@ -231,7 +231,7 @@ static void __init __set_clr_pte_enc(pte_t *kpte, int level, bool enc)if (pgprot_val (old_prot) ==pgprot_val (new_prot))return ; - pa = pfn <<page_level_shift (level); + pa = pfn <<PAGE_SHIFT ; size =page_level_size (level);/*
arch/x86/xen/p2m.c +2 -5
@@ -98,8 +98,8 @@ EXPORT_SYMBOL_GPL(xen_p2m_size);unsigned long xen_max_p2m_pfn__read_mostly ;EXPORT_SYMBOL_GPL (xen_max_p2m_pfn); -#ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT -#define P2M_LIMIT CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT +#ifdef CONFIG_XEN_MEMORY_HOTPLUG_LIMIT +#define P2M_LIMIT CONFIG_XEN_MEMORY_HOTPLUG_LIMIT#else #define P2M_LIMIT 0#endif
@@ -416,9 +416,6 @@ void __init xen_vmalloc_p2m_tree(void) xen_p2m_last_pfn = xen_max_p2m_pfn; p2m_limit = (phys_addr_t )P2M_LIMIT *1024 *1024 *1024 /PAGE_SIZE ; -if (!p2m_limit &&IS_ENABLED (CONFIG_XEN_UNPOPULATED_ALLOC )) - p2m_limit = xen_start_info->nr_pages *XEN_EXTRA_MEM_RATIO ; - vm.flags =VM_ALLOC ; vm.size =ALIGN (sizeof (unsigned long ) *max (xen_max_p2m_pfn, p2m_limit),PMD_SIZE *PMDS_PER_MID_PAGE );
arch/x86/xen/setup.c +14 -2
@@ -59,6 +59,18 @@ static struct { } xen_remap_buf__initdata __aligned(PAGE_SIZE) ;static unsigned long xen_remap_mfn__initdata =INVALID_P2M_ENTRY ; +/* +* The maximum amount of extra memory compared to the base size. The +* main scaling factor is the size of struct page. At extreme ratios +* of base:extra, all the base memory can be filled with page +* structures for the extra memory, leaving no space for anything +* else. +* +* 10x seems like a reasonable balance between scaling flexibility and +* leaving a practically usable system. +*/ +#define EXTRA_MEM_RATIO (10) +static bool xen_512gb_limit__initdata =IS_ENABLED (CONFIG_XEN_512GB );static void __init xen_parse_512gb (void )
@@ -778,13 +790,13 @@ char * __init xen_memory_setup(void) extra_pages += max_pages - max_pfn;/* -* Clamp the amount of extra memory to a XEN_EXTRA_MEM_RATIO +* Clamp the amount of extra memory to a EXTRA_MEM_RATIO * factor the base size. * * Make sure we have no memory above max_pages, as this area * isn't handled by the p2m management. */ - extra_pages =min3 (XEN_EXTRA_MEM_RATIO *min (max_pfn,PFN_DOWN (MAXMEM )), + extra_pages =min3 (EXTRA_MEM_RATIO *min (max_pfn,PFN_DOWN (MAXMEM )), extra_pages, max_pages - max_pfn); i =0 ; addr = xen_e820_table.entries[0 ].addr;
block/blk-cgroup-rwstat.c +2 -1
@@ -109,6 +109,7 @@ void blkg_rwstat_recursive_sum(struct blkcg_gq *blkg, struct blkcg_policy *pol,lockdep_assert_held (&blkg->q->queue_lock); +memset (sum,0 ,sizeof (*sum));rcu_read_lock ();blkg_for_each_descendant_pre (pos_blkg, pos_css, blkg) {struct blkg_rwstat *rwstat;
@@ -122,7 +123,7 @@ void blkg_rwstat_recursive_sum(struct blkcg_gq *blkg, struct blkcg_policy *pol, rwstat = (void *)pos_blkg + off;for (i =0 ; i <BLKG_RWSTAT_NR ; i++) - sum->cnt[i] =blkg_rwstat_read_counter (rwstat, i); + sum->cnt[i] +=blkg_rwstat_read_counter (rwstat, i); }rcu_read_unlock (); }
block/blk-merge.c +8 -0
@@ -375,6 +375,14 @@ unsigned int blk_recalc_rq_segments(struct request *rq)switch (bio_op (rq->bio)) {case REQ_OP_DISCARD :case REQ_OP_SECURE_ERASE : +if (queue_max_discard_segments (rq->q) >1 ) { +struct bio *bio = rq->bio; + +for_each_bio (bio) + nr_phys_segs++; +return nr_phys_segs; + } +return 1 ;case REQ_OP_WRITE_ZEROES :return 0 ;case REQ_OP_WRITE_SAME :
block/blk-zoned.c +1 -1
@@ -240,7 +240,7 @@ int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op,*/ if (op ==REQ_OP_ZONE_RESET &&blkdev_allow_reset_all_zones (bdev, sector, nr_sectors)) { - bio->bi_opf =REQ_OP_ZONE_RESET_ALL ; + bio->bi_opf =REQ_OP_ZONE_RESET_ALL |REQ_SYNC ;break ; }
block/genhd.c +1 -3
@@ -732,10 +732,8 @@ static void register_disk(struct device *parent, struct gendisk *disk, disk->part0.holder_dir =kobject_create_and_add ("holders" , &ddev->kobj); disk->slave_dir =kobject_create_and_add ("slaves" , &ddev->kobj); -if (disk->flags &GENHD_FL_HIDDEN ) { -dev_set_uevent_suppress (ddev,0 ); +if (disk->flags &GENHD_FL_HIDDEN )return ; - }disk_scan_partitions (disk);
drivers/acpi/acpica/nsaccess.c +1 -2
@@ -99,13 +99,12 @@ acpi_status acpi_ns_root_initialize(void)* just create and link the new node(s) here. */ new_node = -ACPI_ALLOCATE_ZEROED (sizeof (struct acpi_namespace_node )); +acpi_ns_create_node (*ACPI_CAST_PTR (u32, init_val->name));if (!new_node) { status =AE_NO_MEMORY ; goto unlock_and_exit; } -ACPI_COPY_NAMESEG (new_node->name.ascii, init_val->name); new_node->descriptor_type =ACPI_DESC_TYPE_NAMED ; new_node->type = init_val->type;
drivers/acpi/internal.h +5 -1
@@ -9,6 +9,8 @@#ifndef _ACPI_INTERNAL_H_#define _ACPI_INTERNAL_H_ +#include <linux/idr.h> +#define PREFIX "ACPI: "int early_acpi_osi_init (void );
@@ -96,9 +98,11 @@ void acpi_scan_table_handler(u32 event, void *table, void *context);extern struct list_head acpi_bus_id_list; +#define ACPI_MAX_DEVICE_INSTANCES 4096 +struct acpi_device_bus_id {const char *bus_id; -unsigned int instance_no; +struct ida instance_ida;struct list_head node; };
drivers/acpi/scan.c +53 -35
128 lines not on this page · raw message
drivers/acpi/video_detect.c +1 -0
@@ -147,6 +147,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = { }, }, { + .callback = video_detect_force_vendor, .ident = "Sony VPCEH3U1E", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
drivers/atm/eni.c +2 -1
@@ -2260,7 +2260,8 @@ static int eni_init_one(struct pci_dev *pci_dev,return rc; err_eni_release: -eni_do_release (dev); + dev->phy =NULL ; +iounmap (ENI_DEV (dev)->ioaddr); err_unregister:atm_dev_deregister (dev); err_free_consistent:
drivers/atm/idt77105.c +2 -2
@@ -262,7 +262,7 @@ static int idt77105_start(struct atm_dev *dev) {unsigned long flags; -if (!(dev->dev_data =kmalloc (sizeof (struct idt77105_priv ),GFP_KERNEL ))) +if (!(dev->phy_data =kmalloc (sizeof (struct idt77105_priv ),GFP_KERNEL )))return -ENOMEM ;PRIV (dev)->dev = dev;spin_lock_irqsave (&idt77105_priv_lock, flags);
@@ -337,7 +337,7 @@ static int idt77105_stop(struct atm_dev *dev)else idt77105_all = walk->next; dev->phy =NULL ; - dev->dev_data =NULL ; + dev->phy_data =NULL ;kfree (walk);break ; }
drivers/atm/lanai.c +4 -1
@@ -2234,6 +2234,7 @@ static int lanai_dev_open(struct atm_dev *atmdev)conf1_write (lanai);#endif iounmap (lanai->base); + lanai->base =NULL ; error_pci:pci_disable_device (lanai->pci); error:
@@ -2246,6 +2247,8 @@ static int lanai_dev_open(struct atm_dev *atmdev)static void lanai_dev_close (struct atm_dev *atmdev) {struct lanai_dev *lanai = (struct lanai_dev *) atmdev->dev_data; +if (lanai->base==NULL ) +return ; printk(KERN_INFO DEV_LABEL "(itf %d): shutting down interface\n", lanai->number);lanai_timed_poll_stop (lanai);
@@ -2553,7 +2556,7 @@ static int lanai_init_one(struct pci_dev *pci,struct atm_dev *atmdev;int result; - lanai =kmalloc (sizeof (*lanai),GFP_KERNEL ); + lanai =kzalloc (sizeof (*lanai),GFP_KERNEL );if (lanai ==NULL ) { printk(KERN_ERR DEV_LABEL ": couldn't allocate dev_data structure!\n");
drivers/atm/uPD98402.c +1 -1
@@ -211,7 +211,7 @@ static void uPD98402_int(struct atm_dev *dev)static int uPD98402_start (struct atm_dev *dev) {DPRINTK ("phy_start\n" ); -if (!(dev->dev_data =kmalloc (sizeof (struct uPD98402_priv ),GFP_KERNEL ))) +if (!(dev->phy_data =kmalloc (sizeof (struct uPD98402_priv ),GFP_KERNEL )))return -ENOMEM ;spin_lock_init (&PRIV (dev)->lock);memset (&PRIV (dev)->sonet_stats,0 ,sizeof (struct k_sonet_stats ));
drivers/base/power/runtime.c +39 -6
87 lines not on this page · raw message
drivers/block/umem.c +4 -1
@@ -877,6 +877,7 @@ static int mm_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)if (card->mm_pages[0 ].desc ==NULL || card->mm_pages[1 ].desc ==NULL ) {dev_printk (KERN_ERR , &card->dev->dev,"alloc failed\n" ); + ret = -ENOMEM ; goto failed_alloc; }reset_page (&card->mm_pages[0 ]);
@@ -888,8 +889,10 @@ static int mm_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)spin_lock_init (&card->lock); card->queue =blk_alloc_queue (NUMA_NO_NODE ); -if (!card->queue) +if (!card->queue) { + ret = -ENOMEM ; goto failed_alloc; + }tasklet_init (&card->tasklet, process_page, (unsigned long )card);
drivers/block/xen-blkback/blkback.c +1 -1
@@ -891,7 +891,7 @@ static int xen_blkbk_map(struct xen_blkif_ring *ring, out:for (i = last_map; i < num; i++) {/* Don't zap current batch's valid persistent grants. */ -if (i >= last_map + segs_to_map) +if (i >= map_until) pages[i]->persistent_gnt =NULL ; pages[i]->handle =BLKBACK_INVALID_HANDLE ; }
drivers/bus/omap_l3_noc.c +2 -2
@@ -285,7 +285,7 @@ static int omap_l3_probe(struct platform_device *pdev)*/ l3->debug_irq =platform_get_irq (pdev,0 ); ret =devm_request_irq (l3->dev, l3->debug_irq, l3_interrupt_handler, -0x0 ,"l3-dbg-irq" , l3); +IRQF_NO_THREAD ,"l3-dbg-irq" , l3);if (ret) {dev_err (l3->dev,"request_irq failed for %d\n" , l3->debug_irq);
@@ -294,7 +294,7 @@ static int omap_l3_probe(struct platform_device *pdev) l3->app_irq =platform_get_irq (pdev,1 ); ret =devm_request_irq (l3->dev, l3->app_irq, l3_interrupt_handler, -0x0 ,"l3-app-irq" , l3); +IRQF_NO_THREAD ,"l3-app-irq" , l3);if (ret)dev_err (l3->dev,"request_irq failed for %d\n" , l3->app_irq);
drivers/clk/qcom/gcc-sc7180.c +2 -2
@@ -620,7 +620,7 @@ static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { .name = "gcc_sdcc1_apps_clk_src", .parent_data = gcc_parent_data_1, .num_parents = 5, - .ops = &clk_rcg2_ops, + .ops = &clk_rcg2_floor_ops, }, };
@@ -642,7 +642,7 @@ static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { .name = "gcc_sdcc1_ice_core_clk_src", .parent_data = gcc_parent_data_0, .num_parents = 4, - .ops = &clk_rcg2_floor_ops, + .ops = &clk_rcg2_ops, }, };
drivers/cpufreq/cpufreq-dt-platdev.c +2 -0
@@ -103,6 +103,8 @@ static const struct of_device_id whitelist[] __initconst = {static const struct of_device_id blacklist[]__initconst = { { .compatible ="allwinner,sun50i-h6" , }, + { .compatible ="arm,vexpress" , }, + { .compatible ="calxeda,highbank" , }, { .compatible ="calxeda,ecx-2000" , },
drivers/gpio/gpiolib-acpi.c +1 -1
@@ -174,7 +174,7 @@ static void acpi_gpiochip_request_irq(struct acpi_gpio_chip *acpi_gpio,int ret, value; ret =request_threaded_irq (event->irq,NULL , event->handler, - event->irqflags,"ACPI:Event" , event); + event->irqflags |IRQF_ONESHOT ,"ACPI:Event" , event);if (ret) { dev_err(acpi_gpio->chip->parent, "Failed to setup interrupt handler for %d\n",
drivers/gpu/drm/Kconfig +1 -0
@@ -239,6 +239,7 @@ source "drivers/gpu/drm/arm/Kconfig" config DRM_RADEON tristate "ATI Radeon" depends on DRM && PCI && MMU + depends on AGP || !AGP select FW_LOADER select DRM_KMS_HELPER select DRM_TTM
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +1 -0
@@ -1093,6 +1093,7 @@ static const struct pci_device_id pciidlist[] = { {0x1002, 0x73A3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID}, {0x1002, 0x73AB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID}, {0x1002, 0x73AE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID}, + {0x1002, 0x73AF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID}, {0x1002, 0x73BF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID}, {0, 0, 0}
drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +1 -1
@@ -146,7 +146,7 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev, size = mode_cmd->pitches[0 ] * height; aligned_size =ALIGN (size,PAGE_SIZE ); ret =amdgpu_gem_object_create (adev, aligned_size,0 , domain, flags, - ttm_bo_type_kernel,NULL , &gobj); + ttm_bo_type_device,NULL , &gobj);if (ret) {pr_err ("failed to allocate framebuffer (%d)\n" , aligned_size);return -ENOMEM ;
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_link_encoder.c +1 -2
@@ -341,8 +341,7 @@ void enc2_hw_init(struct link_encoder *enc) }else {AUX_REG_WRITE (AUX_DPHY_RX_CONTROL0 ,0x103d1110 ); -AUX_REG_WRITE (AUX_DPHY_TX_CONTROL ,0x21c4d ); - +AUX_REG_WRITE (AUX_DPHY_TX_CONTROL ,0x21c7a ); }//AUX_DPHY_TX_REF_CONTROL'AUX_TX_REF_DIV HW default is 0x32;
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +1 -1
@@ -295,7 +295,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn2_1_soc = { .num_banks = 8, .num_chans = 4, .vmm_page_size_bytes = 4096, - .dram_clock_change_latency_us = 11.72, + .dram_clock_change_latency_us = 23.84, .return_bus_width_bytes = 64, .dispclk_dppclk_vco_speed_mhz = 3600, .xfc_bus_transport_time_us = 4,
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c +54 -0
72 lines not on this page · raw message
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c +63 -11
118 lines not on this page · raw message
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c +24 -0
@@ -133,6 +133,7 @@ static void vega12_set_default_registry_data(struct pp_hwmgr *hwmgr) data->registry_data.auto_wattman_debug =0 ; data->registry_data.auto_wattman_sample_period =100 ; data->registry_data.auto_wattman_threshold =50 ; + data->registry_data.pcie_dpm_key_disabled = !(hwmgr->feature_mask &PP_PCIE_DPM_MASK ); }static int vega12_set_features_platform_caps (struct pp_hwmgr *hwmgr)
@@ -539,6 +540,29 @@ static int vega12_override_pcie_parameters(struct pp_hwmgr *hwmgr) pp_table->PcieLaneCount[i] = pcie_width_arg; } +/* override to the highest if it's disabled from ppfeaturmask */ +if (data->registry_data.pcie_dpm_key_disabled) { +for (i =0 ; i <NUM_LINK_LEVELS ; i++) { + smu_pcie_arg = (i <<16 ) | (pcie_gen <<8 ) | pcie_width; + ret =smum_send_msg_to_smc_with_parameter (hwmgr, + PPSMC_MSG_OverridePcieParameters, smu_pcie_arg, +NULL ); +PP_ASSERT_WITH_CODE (!ret, +"[OverridePcieParameters] Attempt to override pcie params failed!" , + return ret); + + pp_table->PcieGenSpeed[i] = pcie_gen; + pp_table->PcieLaneCount[i] = pcie_width; + } + ret =vega12_enable_smc_features (hwmgr, + false, + data->smu_features[GNLD_DPM_LINK ].smu_feature_bitmap); +PP_ASSERT_WITH_CODE (!ret, +"Attempt to Disable DPM LINK Failed!" , + return ret); + data->smu_features[GNLD_DPM_LINK ].enabled = false; + data->smu_features[GNLD_DPM_LINK ].supported = false; + }return 0 ; }
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c +25 -0
@@ -171,6 +171,7 @@ static void vega20_set_default_registry_data(struct pp_hwmgr *hwmgr) data->registry_data.gfxoff_controlled_by_driver =1 ; data->gfxoff_allowed = false; data->counter_gfxoff =0 ; + data->registry_data.pcie_dpm_key_disabled = !(hwmgr->feature_mask &PP_PCIE_DPM_MASK ); }static int vega20_set_features_platform_caps (struct pp_hwmgr *hwmgr)
@@ -885,6 +886,30 @@ static int vega20_override_pcie_parameters(struct pp_hwmgr *hwmgr) pp_table->PcieLaneCount[i] = pcie_width_arg; } +/* override to the highest if it's disabled from ppfeaturmask */ +if (data->registry_data.pcie_dpm_key_disabled) { +for (i =0 ; i <NUM_LINK_LEVELS ; i++) { + smu_pcie_arg = (i <<16 ) | (pcie_gen <<8 ) | pcie_width; + ret =smum_send_msg_to_smc_with_parameter (hwmgr, + PPSMC_MSG_OverridePcieParameters, smu_pcie_arg, +NULL ); +PP_ASSERT_WITH_CODE (!ret, +"[OverridePcieParameters] Attempt to override pcie params failed!" , + return ret); + + pp_table->PcieGenSpeed[i] = pcie_gen; + pp_table->PcieLaneCount[i] = pcie_width; + } + ret =vega20_enable_smc_features (hwmgr, + false, + data->smu_features[GNLD_DPM_LINK ].smu_feature_bitmap); +PP_ASSERT_WITH_CODE (!ret, +"Attempt to Disable DPM LINK Failed!" , + return ret); + data->smu_features[GNLD_DPM_LINK ].enabled = false; + data->smu_features[GNLD_DPM_LINK ].supported = false; + } +return 0 ; }
drivers/gpu/drm/etnaviv/etnaviv_gem.c +1 -1
@@ -675,7 +675,7 @@ static int etnaviv_gem_userptr_get_pages(struct etnaviv_gem_object *etnaviv_obj)struct page **pages = pvec + pinned; ret =pin_user_pages_fast (ptr, num_pages, - !userptr->ro ?FOLL_WRITE :0 , pages); +FOLL_WRITE |FOLL_FORCE , pages);if (ret <0 ) {unpin_user_pages (pvec, pinned);kvfree (pvec);
drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c +12 -1
@@ -316,7 +316,18 @@ void i915_vma_revoke_fence(struct i915_vma *vma)WRITE_ONCE (fence->vma,NULL ); vma->fence =NULL ; - with_intel_runtime_pm_if_in_use(fence_to_uncore(fence)->rpm, wakeref) +/* +* Skip the write to HW if and only if the device is currently +* suspended. +* +* If the driver does not currently hold a wakeref (if_in_use == 0), +* the device may currently be runtime suspended, or it may be woken +* up before the suspend takes place. If the device is not suspended +* (powered down) and we skip clearing the fence register, the HW is +* left in an undefined state where we may end up with multiple +* registers overlapping. +*/ + with_intel_runtime_pm_if_active(fence_to_uncore(fence)->rpm, wakeref)fence_write (fence); }
drivers/gpu/drm/i915/intel_runtime_pm.c +24 -5
@@ -412,12 +412,20 @@ intel_wakeref_t intel_runtime_pm_get(struct intel_runtime_pm *rpm) }/** -* intel_runtime_pm_get_if_in_use - grab a runtime pm reference if device in use +* __intel_runtime_pm_get_if_active - grab a runtime pm reference if device is active * @rpm: the intel_runtime_pm structure +* @ignore_usecount: get a ref even if dev->power.usage_count is 0 * * This function grabs a device-level runtime pm reference if the device is -* already in use and ensures that it is powered up. It is illegal to try -* and access the HW should intel_runtime_pm_get_if_in_use() report failure. +* already active and ensures that it is powered up. It is illegal to try +* and access the HW should intel_runtime_pm_get_if_active() report failure. +* +* If @ignore_usecount=true, a reference will be acquired even if there is no +* user requiring the device to be powered up (dev->power.usage_count == 0). +* If the function returns false in this case then it's guaranteed that the +* device's runtime suspend hook has been called already or that it will be +* called (and hence it's also guaranteed that the device's runtime resume +* hook will be called eventually). * * Any runtime pm reference obtained by this function must have a symmetric * call to intel_runtime_pm_put() to release the reference again.
@@ -425,7 +433,8 @@ intel_wakeref_t intel_runtime_pm_get(struct intel_runtime_pm *rpm)* Returns: the wakeref cookie to pass to intel_runtime_pm_put(), evaluates * as True if the wakeref was acquired, or False otherwise. */ -intel_wakeref_t intel_runtime_pm_get_if_in_use (struct intel_runtime_pm *rpm) +static intel_wakeref_t __intel_runtime_pm_get_if_active (struct intel_runtime_pm *rpm, +bool ignore_usecount) {if (IS_ENABLED (CONFIG_PM )) {/*
@@ -434,7 +443,7 @@ intel_wakeref_t intel_runtime_pm_get_if_in_use(struct intel_runtime_pm *rpm)* function, since the power state is undefined. This applies * atm to the late/early system suspend/resume handlers. */ -if (pm_runtime_get_if_in_use (rpm->kdev) <=0 ) +if (pm_runtime_get_if_active (rpm->kdev, ignore_usecount) <=0 )return 0 ; }
@@ -443,6 +452,16 @@ intel_wakeref_t intel_runtime_pm_get_if_in_use(struct intel_runtime_pm *rpm)return track_intel_runtime_pm_wakeref (rpm); } +intel_wakeref_t intel_runtime_pm_get_if_in_use (struct intel_runtime_pm *rpm) +{ +return __intel_runtime_pm_get_if_active (rpm, false); +} + +intel_wakeref_t intel_runtime_pm_get_if_active (struct intel_runtime_pm *rpm) +{ +return __intel_runtime_pm_get_if_active (rpm, true); +} +/** * intel_runtime_pm_get_noresume - grab a runtime pm reference * @rpm: the intel_runtime_pm structure
drivers/gpu/drm/i915/intel_runtime_pm.h +5 -0
@@ -177,6 +177,7 @@ void intel_runtime_pm_driver_release(struct intel_runtime_pm *rpm);intel_wakeref_t intel_runtime_pm_get (struct intel_runtime_pm *rpm);intel_wakeref_t intel_runtime_pm_get_if_in_use (struct intel_runtime_pm *rpm); +intel_wakeref_t intel_runtime_pm_get_if_active (struct intel_runtime_pm *rpm);intel_wakeref_t intel_runtime_pm_get_noresume (struct intel_runtime_pm *rpm);intel_wakeref_t intel_runtime_pm_get_raw (struct intel_runtime_pm *rpm);
@@ -188,6 +189,10 @@ intel_wakeref_t intel_runtime_pm_get_raw(struct intel_runtime_pm *rpm);for ((wf) =intel_runtime_pm_get_if_in_use (rpm); (wf); \ intel_runtime_pm_put((rpm), (wf)), (wf) = 0) +#define with_intel_runtime_pm_if_active (rpm, wf) \ + for ((wf) = intel_runtime_pm_get_if_active(rpm); (wf); \ + intel_runtime_pm_put((rpm), (wf)), (wf) = 0) +void intel_runtime_pm_put_unchecked (struct intel_runtime_pm *rpm);#if IS_ENABLED (CONFIG_DRM_I915_DEBUG_RUNTIME_PM )void intel_runtime_pm_put (struct intel_runtime_pm *rpm,intel_wakeref_t wref);
drivers/gpu/drm/msm/dsi/pll/dsi_pll.c +1 -1
@@ -163,7 +163,7 @@ struct msm_dsi_pll *msm_dsi_pll_init(struct platform_device *pdev,break ;case MSM_DSI_PHY_7NM :case MSM_DSI_PHY_7NM_V4_1 : - pll =msm_dsi_pll_7nm_init (pdev, id); + pll =msm_dsi_pll_7nm_init (pdev, type, id);break ;default : pll =ERR_PTR (-ENXIO );
drivers/gpu/drm/msm/dsi/pll/dsi_pll.h +4 -2
@@ -117,10 +117,12 @@ msm_dsi_pll_10nm_init(struct platform_device *pdev, int id) }#endif #ifdef CONFIG_DRM_MSM_DSI_7NM_PHY -struct msm_dsi_pll *msm_dsi_pll_7nm_init (struct platform_device *pdev,int id); +struct msm_dsi_pll *msm_dsi_pll_7nm_init (struct platform_device *pdev, +enum msm_dsi_phy_type type,int id);#else static inline struct msm_dsi_pll * -msm_dsi_pll_7nm_init (struct platform_device *pdev,int id) +msm_dsi_pll_7nm_init (struct platform_device *pdev, +enum msm_dsi_phy_type type,int id) {return ERR_PTR (-ENODEV ); }
drivers/gpu/drm/msm/dsi/pll/dsi_pll_7nm.c +3 -2
@@ -852,7 +852,8 @@ static int pll_7nm_register(struct dsi_pll_7nm *pll_7nm)return ret; } -struct msm_dsi_pll *msm_dsi_pll_7nm_init (struct platform_device *pdev,int id) +struct msm_dsi_pll *msm_dsi_pll_7nm_init (struct platform_device *pdev, +enum msm_dsi_phy_type type,int id) {struct dsi_pll_7nm *pll_7nm;struct msm_dsi_pll *pll;
@@ -885,7 +886,7 @@ struct msm_dsi_pll *msm_dsi_pll_7nm_init(struct platform_device *pdev, int id) pll = &pll_7nm->base; pll->min_rate =1000000000UL ; pll->max_rate =3500000000UL ; -if (pll->type ==MSM_DSI_PHY_7NM_V4_1 ) { +if (type ==MSM_DSI_PHY_7NM_V4_1 ) { pll->min_rate =600000000UL ; pll->max_rate = (unsigned long )5000000000ULL ;/* workaround for max rate overflowing on 32-bit builds: */
drivers/gpu/drm/msm/msm_drv.c +12 -0
@@ -1079,6 +1079,10 @@ static int __maybe_unused msm_pm_resume(struct device *dev)static int __maybe_unused msm_pm_prepare (struct device *dev) {struct drm_device *ddev =dev_get_drvdata (dev); +struct msm_drm_private *priv = ddev ? ddev->dev_private :NULL ; + +if (!priv || !priv->kms) +return 0 ;return drm_mode_config_helper_suspend (ddev); }
@@ -1086,6 +1090,10 @@ static int __maybe_unused msm_pm_prepare(struct device *dev)static void __maybe_unused msm_pm_complete (struct device *dev) {struct drm_device *ddev =dev_get_drvdata (dev); +struct msm_drm_private *priv = ddev ? ddev->dev_private :NULL ; + +if (!priv || !priv->kms) +return ;drm_mode_config_helper_resume (ddev); }
@@ -1318,6 +1326,10 @@ static int msm_pdev_remove(struct platform_device *pdev)static void msm_pdev_shutdown (struct platform_device *pdev) {struct drm_device *drm =platform_get_drvdata (pdev); +struct msm_drm_private *priv = drm ? drm->dev_private :NULL ; + +if (!priv || !priv->kms) +return ;drm_atomic_helper_shutdown (drm); }
drivers/infiniband/hw/cxgb4/cm.c +2 -2
@@ -3610,13 +3610,13 @@ int c4iw_destroy_listen(struct iw_cm_id *cm_id) ep->com.local_addr.ss_family == AF_INET) { err = cxgb4_remove_server_filter( ep->com.dev->rdev.lldi.ports[0], ep->stid, - ep->com.dev->rdev.lldi.rxq_ids[0], 0); + ep->com.dev->rdev.lldi.rxq_ids[0], false); } else {struct sockaddr_in6 *sin6;c4iw_init_wr_wait (ep->com.wr_waitp); err =cxgb4_remove_server ( ep->com.dev->rdev.lldi.ports[0 ], ep->stid, - ep->com.dev->rdev.lldi.rxq_ids[0 ],0 ); + ep->com.dev->rdev.lldi.rxq_ids[0 ], true);if (err) goto done; err = c4iw_wait_for_reply(&ep->com.dev->rdev, ep->com.wr_waitp,
drivers/irqchip/irq-ingenic-tcu.c +1 -0
@@ -179,5 +179,6 @@ static int __init ingenic_tcu_irq_init(struct device_node *np, }IRQCHIP_DECLARE (jz4740_tcu_irq,"ingenic,jz4740-tcu" , ingenic_tcu_irq_init);IRQCHIP_DECLARE (jz4725b_tcu_irq,"ingenic,jz4725b-tcu" , ingenic_tcu_irq_init); +IRQCHIP_DECLARE (jz4760_tcu_irq,"ingenic,jz4760-tcu" , ingenic_tcu_irq_init);IRQCHIP_DECLARE (jz4770_tcu_irq,"ingenic,jz4770-tcu" , ingenic_tcu_irq_init);IRQCHIP_DECLARE (x1000_tcu_irq,"ingenic,x1000-tcu" , ingenic_tcu_irq_init);
drivers/irqchip/irq-ingenic.c +1 -0
@@ -155,6 +155,7 @@ static int __init intc_2chip_of_init(struct device_node *node, {return ingenic_intc_of_init (node,2 ); } +IRQCHIP_DECLARE (jz4760_intc,"ingenic,jz4760-intc" , intc_2chip_of_init);IRQCHIP_DECLARE (jz4770_intc,"ingenic,jz4770-intc" , intc_2chip_of_init);IRQCHIP_DECLARE (jz4775_intc,"ingenic,jz4775-intc" , intc_2chip_of_init);IRQCHIP_DECLARE (jz4780_intc,"ingenic,jz4780-intc" , intc_2chip_of_init);
drivers/md/dm-ioctl.c +1 -1
@@ -529,7 +529,7 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_* Grab our output buffer. */ nl = orig_nl =get_result_buffer (param, param_size, &len); -if (len < needed) { +if (len < needed || len <sizeof (nl->dev)) { param->flags |=DM_BUFFER_FULL_FLAG ; goto out; }
drivers/md/dm-table.c +25 -8
@@ -1387,6 +1387,13 @@ static int device_not_zoned_model(struct dm_target *ti, struct dm_dev *dev,return !q ||blk_queue_zoned_model (q) != *zoned_model; } +/* +* Check the device zoned model based on the target feature flag. If the target +* has the DM_TARGET_ZONED_HM feature flag set, host-managed zoned devices are +* also accepted but all devices must have the same zoned model. If the target +* has the DM_TARGET_MIXED_ZONED_MODEL feature set, the devices can have any +* zoned model with all zoned devices having the same zone size. +*/ static bool dm_table_supports_zoned_model (struct dm_table *t,enum blk_zoned_model zoned_model) {
@@ -1396,13 +1403,15 @@ static bool dm_table_supports_zoned_model(struct dm_table *t,for (i =0 ; i <dm_table_get_num_targets (t); i++) { ti =dm_table_get_target (t, i); -if (zoned_model ==BLK_ZONED_HM && - !dm_target_supports_zoned_hm (ti->type)) -return false; - -if (!ti->type->iterate_devices || - ti->type->iterate_devices (ti, device_not_zoned_model, &zoned_model)) -return false; +if (dm_target_supports_zoned_hm (ti->type)) { +if (!ti->type->iterate_devices || + ti->type->iterate_devices (ti, device_not_zoned_model, + &zoned_model)) +return false; + }else if (!dm_target_supports_mixed_zoned_model (ti->type)) { +if (zoned_model ==BLK_ZONED_HM ) +return false; + } }return true;
@@ -1414,9 +1423,17 @@ static int device_not_matches_zone_sectors(struct dm_target *ti, struct dm_dev *struct request_queue *q =bdev_get_queue (dev->bdev);unsigned int *zone_sectors = data; +if (!blk_queue_is_zoned (q)) +return 0 ; +return !q ||blk_queue_zone_sectors (q) != *zone_sectors; } +/* +* Check consistency of zoned model and zone sectors across all targets. For +* zone sectors, if the destination device is a zoned block device, it shall +* have the specified zone_sectors. +*/ static int validate_hardware_zoned_model (struct dm_table *table,enum blk_zoned_model zoned_model,unsigned int zone_sectors)
@@ -1435,7 +1452,7 @@ static int validate_hardware_zoned_model(struct dm_table *table,return -EINVAL ;if (dm_table_any_dev_attr (table, device_not_matches_zone_sectors, &zone_sectors)) { -DMERR ("%s: zone sectors is not consistent across all devices" , +DMERR ("%s: zone sectors is not consistent across all zoned devices" ,dm_device_name (table->md));return -EINVAL ; }
drivers/md/dm-verity-target.c +1 -1
@@ -34,7 +34,7 @@#define DM_VERITY_OPT_IGN_ZEROES "ignore_zero_blocks"#define DM_VERITY_OPT_AT_MOST_ONCE "check_at_most_once" -#define DM_VERITY_OPTS_MAX (2 + DM_VERITY_OPTS_FEC + \ +#define DM_VERITY_OPTS_MAX (3 + DM_VERITY_OPTS_FEC + \ DM_VERITY_ROOT_HASH_VERIFICATION_OPTS)static unsigned dm_verity_prefetch_cluster =DM_VERITY_DEFAULT_PREFETCH_SIZE ;
drivers/md/dm-zoned-target.c +1 -1
@@ -1143,7 +1143,7 @@ static int dmz_message(struct dm_target *ti, unsigned int argc, char **argv,static struct target_type dmz_type = { .name ="zoned" , .version = {2 ,0 ,0 }, - .features =DM_TARGET_SINGLETON |DM_TARGET_ZONED_HM , + .features =DM_TARGET_SINGLETON |DM_TARGET_MIXED_ZONED_MODEL , .module =THIS_MODULE , .ctr = dmz_ctr, .dtr = dmz_dtr,
drivers/misc/habanalabs/common/device.c +2 -0
@@ -106,6 +106,8 @@ static int hl_device_release_ctrl(struct inode *inode, struct file *filp)list_del (&hpriv->dev_node);mutex_unlock (&hdev->fpriv_list_lock); +put_pid (hpriv->taskpid); +kfree (hpriv);return 0 ;
drivers/net/bonding/bond_main.c +2 -6
@@ -3918,15 +3918,11 @@ static int bond_neigh_init(struct neighbour *n)rcu_read_lock (); slave =bond_first_slave_rcu (bond); -if (!slave) { - ret = -EINVAL ; +if (!slave) goto out; - } slave_ops = slave->dev->netdev_ops; -if (!slave_ops->ndo_neigh_setup) { - ret = -EINVAL ; +if (!slave_ops->ndo_neigh_setup) goto out; - }/* TODO: find another way [1] to implement this. * Passing a zeroed structure is fragile,
drivers/net/can/c_can/c_can.c +1 -23
@@ -212,18 +212,6 @@ static const struct can_bittiming_const c_can_bittiming_const = { .brp_inc = 1, }; -static inline void c_can_pm_runtime_enable (const struct c_can_priv *priv) -{ -if (priv->device) -pm_runtime_enable (priv->device); -} - -static inline void c_can_pm_runtime_disable (const struct c_can_priv *priv) -{ -if (priv->device) -pm_runtime_disable (priv->device); -} -static inline void c_can_pm_runtime_get_sync (const struct c_can_priv *priv) {if (priv->device)
@@ -1335,7 +1323,6 @@ static const struct net_device_ops c_can_netdev_ops = {int register_c_can_dev (struct net_device *dev) { -struct c_can_priv *priv =netdev_priv (dev);int err;/* Deactivate pins to prevent DRA7 DCAN IP from being
@@ -1345,28 +1332,19 @@ int register_c_can_dev(struct net_device *dev)*/ pinctrl_pm_select_sleep_state (dev->dev.parent); -c_can_pm_runtime_enable (priv); - dev->flags |=IFF_ECHO ;/* we support local echo */ dev->netdev_ops = &c_can_netdev_ops; err =register_candev (dev); -if (err) -c_can_pm_runtime_disable (priv); -else +if (!err)devm_can_led_init (dev); -return err; }EXPORT_SYMBOL_GPL (register_c_can_dev);void unregister_c_can_dev (struct net_device *dev) { -struct c_can_priv *priv =netdev_priv (dev); -unregister_candev (dev); - -c_can_pm_runtime_disable (priv); }EXPORT_SYMBOL_GPL (unregister_c_can_dev);
drivers/net/can/c_can/c_can_pci.c +2 -1
@@ -239,12 +239,13 @@ static void c_can_pci_remove(struct pci_dev *pdev) {struct net_device *dev =pci_get_drvdata (pdev);struct c_can_priv *priv =netdev_priv (dev); +void __iomem *addr = priv->base;unregister_c_can_dev (dev);free_c_can_dev (dev); -pci_iounmap (pdev, priv->base); +pci_iounmap (pdev, addr);pci_disable_msi (pdev);pci_clear_master (pdev);pci_release_regions (pdev);
drivers/net/can/c_can/c_can_platform.c +5 -1
@@ -29,6 +29,7 @@#include <linux/list.h> #include <linux/io.h> #include <linux/platform_device.h> +#include <linux/pm_runtime.h> #include <linux/clk.h> #include <linux/of.h> #include <linux/of_device.h>
@@ -386,6 +387,7 @@ static int c_can_plat_probe(struct platform_device *pdev)platform_set_drvdata (pdev, dev);SET_NETDEV_DEV (dev, &pdev->dev); +pm_runtime_enable (priv->device); ret =register_c_can_dev (dev);if (ret) { dev_err(&pdev->dev, "registering %s failed (err=%d)\n",
@@ -398,6 +400,7 @@ static int c_can_plat_probe(struct platform_device *pdev)return 0 ; exit_free_device: +pm_runtime_disable (priv->device);free_c_can_dev (dev); exit:dev_err (&pdev->dev,"probe failed\n" );
@@ -408,9 +411,10 @@ static int c_can_plat_probe(struct platform_device *pdev)static int c_can_plat_remove (struct platform_device *pdev) {struct net_device *dev =platform_get_drvdata (pdev); +struct c_can_priv *priv =netdev_priv (dev);unregister_c_can_dev (dev); - +pm_runtime_disable (priv->device);free_c_can_dev (dev);return 0 ;
drivers/net/can/dev.c +1 -0
@@ -1255,6 +1255,7 @@ static void can_dellink(struct net_device *dev, struct list_head *head)static struct rtnl_link_ops can_link_ops__read_mostly = { .kind ="can" , + .netns_refund = true, .maxtype =IFLA_CAN_MAX , .policy = can_policy, .setup = can_setup,
drivers/net/can/flexcan.c +7 -1
@@ -658,9 +658,15 @@ static int flexcan_chip_disable(struct flexcan_priv *priv)static int flexcan_chip_freeze (struct flexcan_priv *priv) {struct flexcan_regs __iomem *regs = priv->regs; -unsigned int timeout =1000 *1000 *10 / priv->can.bittiming.bitrate; +unsigned int timeout; +u32 bitrate = priv->can.bittiming.bitrate;u32 reg; +if (bitrate) + timeout =1000 *1000 *10 / bitrate; +else + timeout =FLEXCAN_TIMEOUT_US /10 ; + reg = priv->read (®s->mcr); reg |=FLEXCAN_MCR_FRZ |FLEXCAN_MCR_HALT ; priv->write (reg, ®s->mcr);
drivers/net/can/kvaser_pciefd.c +4 -0
@@ -57,6 +57,7 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices");#define KVASER_PCIEFD_KCAN_STAT_REG 0x418#define KVASER_PCIEFD_KCAN_MODE_REG 0x41c#define KVASER_PCIEFD_KCAN_BTRN_REG 0x420 +#define KVASER_PCIEFD_KCAN_BUS_LOAD_REG 0x424#define KVASER_PCIEFD_KCAN_BTRD_REG 0x428#define KVASER_PCIEFD_KCAN_PWM_REG 0x430/* Loopback control register */
@@ -949,6 +950,9 @@ static int kvaser_pciefd_setup_can_ctrls(struct kvaser_pciefd *pcie)timer_setup (&can->bec_poll_timer, kvaser_pciefd_bec_poll_timer,0 ); +/* Disable Bus load reporting */ +iowrite32 (0 , can->reg_base +KVASER_PCIEFD_KCAN_BUS_LOAD_REG ); + tx_npackets =ioread32 (can->reg_base +KVASER_PCIEFD_KCAN_TX_NPACKETS_REG ); if (((tx_npackets >> KVASER_PCIEFD_KCAN_TX_NPACKETS_MAX_SHIFT) &
drivers/net/can/m_can/m_can.c +1 -4
@@ -502,9 +502,6 @@ static int m_can_do_rx_poll(struct net_device *dev, int quota) }while ((rxfs &RXFS_FFL_MASK ) && (quota >0 )) { -if (rxfs &RXFS_RFL ) -netdev_warn (dev,"Rx FIFO 0 Message Lost\n" ); -m_can_read_fifo (dev, rxfs); quota--;
@@ -885,7 +882,7 @@ static int m_can_rx_peripheral(struct net_device *dev) {struct m_can_classdev *cdev =netdev_priv (dev); -m_can_rx_handler (dev,1 ); +m_can_rx_handler (dev,M_CAN_NAPI_WEIGHT );m_can_enable_all_interrupts (cdev);
drivers/net/dsa/b53/b53_common.c +7 -7
@@ -1070,13 +1070,6 @@ static int b53_setup(struct dsa_switch *ds)b53_disable_port (ds, port); } -/* Let DSA handle the case were multiple bridges span the same switch -* device and different VLAN awareness settings are requested, which -* would be breaking filtering semantics for any of the other bridge -* devices. (not hardware supported) -*/ - ds->vlan_filtering_is_global = true; -return b53_setup_devlink_resources (ds); }
@@ -2627,6 +2620,13 @@ struct b53_device *b53_switch_alloc(struct device *base, ds->configure_vlan_while_not_filtering = true; ds->untag_bridge_pvid = true; dev->vlan_enabled = ds->configure_vlan_while_not_filtering; +/* Let DSA handle the case were multiple bridges span the same switch +* device and different VLAN awareness settings are requested, which +* would be breaking filtering semantics for any of the other bridge +* devices. (not hardware supported) +*/ + ds->vlan_filtering_is_global = true; +mutex_init (&dev->reg_mutex);mutex_init (&dev->stats_mutex);
drivers/net/dsa/bcm_sf2.c +4 -2
@@ -584,8 +584,10 @@ static u32 bcm_sf2_sw_get_phy_flags(struct dsa_switch *ds, int port)* in bits 15:8 and the patch level in bits 7:0 which is exactly what * the REG_PHY_REVISION register layout is. */ - -return priv->hw_params.gphy_rev; +if (priv->int_phy_mask &BIT (port)) +return priv->hw_params.gphy_rev; +else +return 0 ; } static void bcm_sf2_sw_validate(struct dsa_switch *ds, int port,
drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c +1 -1
@@ -727,7 +727,7 @@ static int chcr_ktls_cpl_set_tcb_rpl(struct adapter *adap, unsigned char *input)kvfree (tx_info);return 0 ; } - tx_info->open_state = false; + tx_info->open_state =CH_KTLS_OPEN_SUCCESS ;spin_unlock (&tx_info->lock);complete (&tx_info->completion);
drivers/net/ethernet/davicom/dm9000.c +1 -1
@@ -1510,7 +1510,7 @@ dm9000_probe(struct platform_device *pdev) goto out; } - db->irq_wake =platform_get_irq (pdev,1 ); + db->irq_wake =platform_get_irq_optional (pdev,1 );if (db->irq_wake >=0 ) {dev_dbg (db->dev,"wakeup irq %d\n" , db->irq_wake);
drivers/net/ethernet/faraday/ftgmac100.c +1 -0
@@ -1308,6 +1308,7 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget)*/ if (unlikely (priv->need_mac_restart)) {ftgmac100_start_hw (priv); + priv->need_mac_restart = false;/* Re-enable "bad" interrupts */ iowrite32(FTGMAC100_INT_BAD,
drivers/net/ethernet/freescale/enetc/enetc_hw.h +2 -0
@@ -234,6 +234,8 @@ enum enetc_bdr_type {TX, RX};#define ENETC_PM0_MAXFRM 0x8014#define ENETC_SET_TX_MTU (val) ((val) << 16)#define ENETC_SET_MAXFRM (val) ((val) & 0xffff) +#define ENETC_PM0_RX_FIFO 0x801c +#define ENETC_PM0_RX_FIFO_VAL 1#define ENETC_PM_IMDIO_BASE 0x8030
drivers/net/ethernet/freescale/enetc/enetc_pf.c +6 -0
@@ -490,6 +490,12 @@ static void enetc_configure_port_mac(struct enetc_hw *hw)enetc_port_wr (hw,ENETC_PM1_CMD_CFG ,ENETC_PM0_CMD_PHY_TX_EN |ENETC_PM0_CMD_TXP |ENETC_PM0_PROMISC ); + +/* On LS1028A, the MAC RX FIFO defaults to 2, which is too high +* and may lead to RX lock-up under traffic. Set it to 1 instead, +* as recommended by the hardware team. +*/ +enetc_port_wr (hw,ENETC_PM0_RX_FIFO ,ENETC_PM0_RX_FIFO_VAL ); }static void enetc_mac_config (struct enetc_hw *hw,phy_interface_t phy_mode)
drivers/net/ethernet/freescale/fec_ptp.c +7 -0
@@ -377,9 +377,16 @@ static int fec_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)u64 ns;unsigned long flags; +mutex_lock (&adapter->ptp_clk_mutex); +/* Check the ptp clock */ +if (!adapter->ptp_clk_on) { +mutex_unlock (&adapter->ptp_clk_mutex); +return -EINVAL ; + }spin_lock_irqsave (&adapter->tmreg_lock, flags); ns =timecounter_read (&adapter->tc);spin_unlock_irqrestore (&adapter->tmreg_lock, flags); +mutex_unlock (&adapter->ptp_clk_mutex); *ts =ns_to_timespec64 (ns);
drivers/net/ethernet/freescale/gianfar.c +15 -0
@@ -2391,6 +2391,10 @@ static bool gfar_add_rx_frag(struct gfar_rx_buff *rxb, u32 lstatus,if (lstatus &BD_LFLAG (RXBD_LAST )) size -= skb->len; +WARN (size <0 ,"gianfar: rx fragment size underflow" ); +if (size <0 ) +return false; +skb_add_rx_frag (skb,skb_shinfo (skb)->nr_frags, page, rxb->page_offset +RXBUF_ALIGNMENT , size,GFAR_RXB_TRUESIZE );
@@ -2553,6 +2557,17 @@ static int gfar_clean_rx_ring(struct gfar_priv_rx_q *rx_queue,if (lstatus &BD_LFLAG (RXBD_EMPTY ))break ; +/* lost RXBD_LAST descriptor due to overrun */ +if (skb && + (lstatus &BD_LFLAG (RXBD_FIRST ))) { +/* discard faulty buffer */ +dev_kfree_skb (skb); + skb =NULL ; + rx_queue->stats.rx_dropped++; + +/* can continue normally */ + } +/* order rx buffer descriptor reads */ rmb ();
drivers/net/ethernet/hisilicon/hns/hns_enet.c +3 -1
@@ -1663,8 +1663,10 @@ static int hns_nic_clear_all_rx_fetch(struct net_device *ndev)for (j =0 ; j < fetch_num; j++) {/* alloc one skb and init */ skb =hns_assemble_skb (ndev); -if (!skb) +if (!skb) { + ret = -ENOMEM ; goto out; + } rd = &tx_ring_data (priv, skb->queue_mapping);hns_nic_net_xmit_hw (ndev, skb, rd);
drivers/net/ethernet/intel/e1000e/82571.c +2 -0
@@ -899,6 +899,8 @@ static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active) }else { data &= ~IGP02E1000_PM_D0_LPLU ; ret_val =e1e_wphy (hw,IGP02E1000_PHY_POWER_MGMT , data); +if (ret_val) +return ret_val;/* LPLU and SmartSpeed are mutually exclusive. LPLU is used * during Dx states where the power conservation is most * important. During driver activity we should enable
drivers/net/ethernet/intel/e1000e/netdev.c +5 -1
@@ -5974,15 +5974,19 @@ static void e1000_reset_task(struct work_struct *work)struct e1000_adapter *adapter; adapter = container_of(work, struct e1000_adapter, reset_task); +rtnl_lock ();/* don't run the task if already down */ -if (test_bit (__E1000_DOWN, &adapter->state)) +if (test_bit (__E1000_DOWN, &adapter->state)) { +rtnl_unlock ();return ; + }if (!(adapter->flags &FLAG_RESTART_NOW )) {e1000e_dump (adapter);e_err ("Reset adapter unexpectedly\n" ); }e1000e_reinit_locked (adapter); +rtnl_unlock (); }/**
drivers/net/ethernet/intel/iavf/iavf_main.c +2 -1
@@ -1776,7 +1776,8 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter) goto err_alloc; } -if (iavf_process_config (adapter)) + err =iavf_process_config (adapter); +if (err) goto err_alloc; adapter->current_op =VIRTCHNL_OP_UNKNOWN ;
drivers/net/ethernet/intel/igb/igb.h +2 -2
@@ -748,8 +748,8 @@ void igb_ptp_suspend(struct igb_adapter *adapter);void igb_ptp_rx_hang (struct igb_adapter *adapter);void igb_ptp_tx_hang (struct igb_adapter *adapter);void igb_ptp_rx_rgtstamp (struct igb_q_vector *q_vector,struct sk_buff *skb); -void igb_ptp_rx_pktstamp (struct igb_q_vector *q_vector,void *va, -struct sk_buff *skb); +int igb_ptp_rx_pktstamp (struct igb_q_vector *q_vector,void *va, +struct sk_buff *skb);int igb_ptp_set_ts_config (struct net_device *netdev,struct ifreq *ifr);int igb_ptp_get_ts_config (struct net_device *netdev,struct ifreq *ifr);void igb_set_flag_queue_pairs (struct igb_adapter *,const u32 );
drivers/net/ethernet/intel/igb/igb_main.c +21 -12
@@ -8232,7 +8232,8 @@ static inline bool igb_page_is_reserved(struct page *page)return (page_to_nid (page) !=numa_mem_id ()) ||page_is_pfmemalloc (page); } -static bool igb_can_reuse_rx_page (struct igb_rx_buffer *rx_buffer) +static bool igb_can_reuse_rx_page (struct igb_rx_buffer *rx_buffer, +int rx_buf_pgcnt) {unsigned int pagecnt_bias = rx_buffer->pagecnt_bias;struct page *page = rx_buffer->page;
@@ -8243,7 +8244,7 @@ static bool igb_can_reuse_rx_page(struct igb_rx_buffer *rx_buffer)#if (PAGE_SIZE <8192 )/* if we are only owner of page we can reuse it */ -if (unlikely ((page_ref_count (page) - pagecnt_bias) >1 )) +if (unlikely ((rx_buf_pgcnt - pagecnt_bias) >1 ))return false;#else #define IGB_LAST_OFFSET \
@@ -8319,9 +8320,10 @@ static struct sk_buff *igb_construct_skb(struct igb_ring *rx_ring,return NULL ;if (unlikely (igb_test_staterr (rx_desc,E1000_RXDADV_STAT_TSIP ))) { -igb_ptp_rx_pktstamp (rx_ring->q_vector, xdp->data, skb); - xdp->data +=IGB_TS_HDR_LEN ; - size -=IGB_TS_HDR_LEN ; +if (!igb_ptp_rx_pktstamp (rx_ring->q_vector, xdp->data, skb)) { + xdp->data +=IGB_TS_HDR_LEN ; + size -=IGB_TS_HDR_LEN ; + } }/* Determine available headroom for copy */
@@ -8382,8 +8384,8 @@ static struct sk_buff *igb_build_skb(struct igb_ring *rx_ring,/* pull timestamp out of packet data */ if (igb_test_staterr (rx_desc,E1000_RXDADV_STAT_TSIP )) { -igb_ptp_rx_pktstamp (rx_ring->q_vector, skb->data, skb); -__skb_pull (skb,IGB_TS_HDR_LEN ); +if (!igb_ptp_rx_pktstamp (rx_ring->q_vector, skb->data, skb)) +__skb_pull (skb,IGB_TS_HDR_LEN ); }/* update buffer offset */
@@ -8632,11 +8634,17 @@ static unsigned int igb_rx_offset(struct igb_ring *rx_ring) }static struct igb_rx_buffer *igb_get_rx_buffer (struct igb_ring *rx_ring, -const unsigned int size) +const unsigned int size,int *rx_buf_pgcnt) {struct igb_rx_buffer *rx_buffer; rx_buffer = &rx_ring->rx_buffer_info[rx_ring->next_to_clean]; + *rx_buf_pgcnt = +#if (PAGE_SIZE <8192 ) +page_count (rx_buffer->page); +#else +0 ; +#endif prefetchw (rx_buffer->page);/* we are reusing so sync this buffer for CPU use */
@@ -8652,9 +8660,9 @@ static struct igb_rx_buffer *igb_get_rx_buffer(struct igb_ring *rx_ring, }static void igb_put_rx_buffer (struct igb_ring *rx_ring, -struct igb_rx_buffer *rx_buffer) +struct igb_rx_buffer *rx_buffer,int rx_buf_pgcnt) { -if (igb_can_reuse_rx_page (rx_buffer)) { +if (igb_can_reuse_rx_page (rx_buffer, rx_buf_pgcnt)) {/* hand second half of page back to the ring */ igb_reuse_rx_page (rx_ring, rx_buffer); }else {
@@ -8681,6 +8689,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)u16 cleaned_count =igb_desc_unused (rx_ring);unsigned int xdp_xmit =0 ;struct xdp_buff xdp; +int rx_buf_pgcnt; xdp.rxq = &rx_ring->xdp_rxq;
@@ -8711,7 +8720,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)*/ dma_rmb (); - rx_buffer =igb_get_rx_buffer (rx_ring, size); + rx_buffer =igb_get_rx_buffer (rx_ring, size, &rx_buf_pgcnt);/* retrieve a buffer from the ring */ if (!skb) {
@@ -8754,7 +8763,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)break ; } -igb_put_rx_buffer (rx_ring, rx_buffer); +igb_put_rx_buffer (rx_ring, rx_buffer, rx_buf_pgcnt); cleaned_count++;/* fetch next buffer in frame if non-eop */
drivers/net/ethernet/intel/igb/igb_ptp.c +24 -7
@@ -856,6 +856,9 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter)dev_kfree_skb_any (skb); } +#define IGB_RET_PTP_DISABLED 1 +#define IGB_RET_PTP_INVALID 2 +/** * igb_ptp_rx_pktstamp - retrieve Rx per packet timestamp * @q_vector: Pointer to interrupt specific structure
@@ -864,19 +867,29 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter)* * This function is meant to retrieve a timestamp from the first buffer of an * incoming frame. The value is stored in little endian format starting on -* byte 8. +* byte 8 +* +* Returns: 0 if success, nonzero if failure **/ -void igb_ptp_rx_pktstamp (struct igb_q_vector *q_vector,void *va, -struct sk_buff *skb) +int igb_ptp_rx_pktstamp (struct igb_q_vector *q_vector,void *va, +struct sk_buff *skb) { -__le64 *regval = (__le64 *)va;struct igb_adapter *adapter = q_vector->adapter; +__le64 *regval = (__le64 *)va;int adjust =0 ; +if (!(adapter->ptp_flags &IGB_PTP_ENABLED )) +return IGB_RET_PTP_DISABLED ; +/* The timestamp is recorded in little endian format. * DWORD: 0 1 2 3 * Field: Reserved Reserved SYSTIML SYSTIMH */ + +/* check reserved dwords are zero, be/le doesn't matter for zero */ +if (regval[0 ]) +return IGB_RET_PTP_INVALID ; +igb_ptp_systim_to_hwtstamp (adapter,skb_hwtstamps (skb),le64_to_cpu (regval[1 ]));
@@ -896,6 +909,8 @@ void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va, }skb_hwtstamps (skb)->hwtstamp =ktime_sub_ns (skb_hwtstamps (skb)->hwtstamp, adjust); + +return 0 ; }/**
@@ -906,13 +921,15 @@ void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,* This function is meant to retrieve a timestamp from the internal registers * of the adapter and store it in the skb. **/ -void igb_ptp_rx_rgtstamp (struct igb_q_vector *q_vector, -struct sk_buff *skb) +void igb_ptp_rx_rgtstamp (struct igb_q_vector *q_vector,struct sk_buff *skb) {struct igb_adapter *adapter = q_vector->adapter;struct e1000_hw *hw = &adapter->hw; -u64 regval;int adjust =0 ; +u64 regval; + +if (!(adapter->ptp_flags &IGB_PTP_ENABLED )) +return ;/* If this bit is set, then the RX registers contain the time stamp. No * other packet will be time stamped until we read these registers, so
drivers/net/ethernet/intel/igc/igc.h +1 -1
@@ -545,7 +545,7 @@ void igc_ptp_init(struct igc_adapter *adapter);void igc_ptp_reset (struct igc_adapter *adapter);void igc_ptp_suspend (struct igc_adapter *adapter);void igc_ptp_stop (struct igc_adapter *adapter); -void igc_ptp_rx_pktstamp (struct igc_q_vector *q_vector,void *va, +void igc_ptp_rx_pktstamp (struct igc_q_vector *q_vector,__le32 *va,struct sk_buff *skb);int igc_ptp_set_ts_config (struct net_device *netdev,struct ifreq *ifr);int igc_ptp_get_ts_config (struct net_device *netdev,struct ifreq *ifr);
drivers/net/ethernet/intel/igc/igc_ethtool.c +4 -3
@@ -1695,6 +1695,9 @@ static int igc_ethtool_get_link_ksettings(struct net_device *netdev, Autoneg); } +/* Set pause flow control settings */ +ethtool_link_ksettings_add_link_mode (cmd, supported, Pause); +switch (hw->fc.requested_mode) {case igc_fc_full:ethtool_link_ksettings_add_link_mode (cmd, advertising, Pause);
@@ -1709,9 +1712,7 @@ static int igc_ethtool_get_link_ksettings(struct net_device *netdev, Asym_Pause);break ;default : -ethtool_link_ksettings_add_link_mode (cmd, advertising, Pause); -ethtool_link_ksettings_add_link_mode (cmd, advertising, - Asym_Pause); +break ; } status = pm_runtime_suspended(&adapter->pdev->dev) ?
drivers/net/ethernet/intel/igc/igc_main.c +9 -0
@@ -3846,10 +3846,19 @@ static void igc_reset_task(struct work_struct *work) adapter = container_of(work, struct igc_adapter, reset_task); +rtnl_lock (); +/* If we're already down or resetting, just bail */ +if (test_bit (__IGC_DOWN, &adapter->state) || +test_bit (__IGC_RESETTING, &adapter->state)) { +rtnl_unlock (); +return ; + } +igc_rings_dump (adapter);igc_regs_dump (adapter);netdev_err (adapter->netdev,"Reset adapter\n" );igc_reinit_locked (adapter); +rtnl_unlock (); }/**
drivers/net/ethernet/intel/igc/igc_ptp.c +40 -32
86 lines not on this page · raw message
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +4 -2
@@ -9582,8 +9582,10 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,ixgbe_atr_compute_perfect_hash_82599 (&input->filter, mask); err =ixgbe_fdir_write_perfect_filter_82599 (hw, &input->filter, input->sw_idx, queue); -if (!err) -ixgbe_update_ethtool_fdir_entry (adapter, input, input->sw_idx); +if (err) + goto err_out_w_lock; + +ixgbe_update_ethtool_fdir_entry (adapter, input, input->sw_idx);spin_unlock (&adapter->fdir_perfect_lock);if ((uhtid !=0x800 ) && (adapter->jump_tables[uhtid]))
drivers/net/ethernet/marvell/octeontx2/af/npc.h +31 -0
@@ -140,6 +140,15 @@ enum npc_kpu_lh_ltype { NPC_LT_LH_CUSTOM1 = 0xF, }; +/* NPC port kind defines how the incoming or outgoing packets +* are processed. NPC accepts packets from up to 64 pkinds. +* Software assigns pkind for each incoming port such as CGX +* Ethernet interfaces, LBK interfaces, etc. +*/ +enum npc_pkind_type { +NPC_TX_DEF_PKIND =63ULL ,/* NIX-TX PKIND */ +}; +struct npc_kpu_profile_cam {u8 state;u8 state_mask;
@@ -300,6 +309,28 @@ struct nix_rx_action {/* NPC_AF_INTFX_KEX_CFG field masks */ #define NPC_PARSE_NIBBLE GENMASK_ULL(30, 0) +/* NPC_PARSE_KEX_S nibble definitions for each field */ +#define NPC_PARSE_NIBBLE_CHAN GENMASK_ULL(2, 0) +#define NPC_PARSE_NIBBLE_ERRLEV BIT_ULL(3) +#define NPC_PARSE_NIBBLE_ERRCODE GENMASK_ULL(5, 4) +#define NPC_PARSE_NIBBLE_L2L3_BCAST BIT_ULL(6) +#define NPC_PARSE_NIBBLE_LA_FLAGS GENMASK_ULL(8, 7) +#define NPC_PARSE_NIBBLE_LA_LTYPE BIT_ULL(9) +#define NPC_PARSE_NIBBLE_LB_FLAGS GENMASK_ULL(11, 10) +#define NPC_PARSE_NIBBLE_LB_LTYPE BIT_ULL(12) +#define NPC_PARSE_NIBBLE_LC_FLAGS GENMASK_ULL(14, 13) +#define NPC_PARSE_NIBBLE_LC_LTYPE BIT_ULL(15) +#define NPC_PARSE_NIBBLE_LD_FLAGS GENMASK_ULL(17, 16) +#define NPC_PARSE_NIBBLE_LD_LTYPE BIT_ULL(18) +#define NPC_PARSE_NIBBLE_LE_FLAGS GENMASK_ULL(20, 19) +#define NPC_PARSE_NIBBLE_LE_LTYPE BIT_ULL(21) +#define NPC_PARSE_NIBBLE_LF_FLAGS GENMASK_ULL(23, 22) +#define NPC_PARSE_NIBBLE_LF_LTYPE BIT_ULL(24) +#define NPC_PARSE_NIBBLE_LG_FLAGS GENMASK_ULL(26, 25) +#define NPC_PARSE_NIBBLE_LG_LTYPE BIT_ULL(27) +#define NPC_PARSE_NIBBLE_LH_FLAGS GENMASK_ULL(29, 28) +#define NPC_PARSE_NIBBLE_LH_LTYPE BIT_ULL(30) +/* NIX Receive Vtag Action Structure */ #define VTAG0_VALID_BIT BIT_ULL(15)#define VTAG0_TYPE_MASK GENMASK_ULL(14, 12)
drivers/net/ethernet/marvell/octeontx2/af/npc_profile.h +83 -14
127 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/af/rvu.c +3 -1
@@ -2151,8 +2151,10 @@ static void rvu_unregister_interrupts(struct rvu *rvu) INTR_MASK(rvu->hw->total_pfs) & ~1ULL);for (irq =0 ; irq < rvu->num_vec; irq++) { -if (rvu->irq_allocated[irq]) +if (rvu->irq_allocated[irq]) {free_irq (pci_irq_vector (rvu->pdev, irq), rvu); + rvu->irq_allocated[irq] = false; + } }pci_free_irq_vectors (rvu->pdev);
drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c +31 -17
95 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +4 -0
@@ -1129,6 +1129,10 @@ int rvu_mbox_handler_nix_lf_alloc(struct rvu *rvu,/* Config Rx pkt length, csum checks and apad enable / disable */ rvu_write64 (rvu, blkaddr,NIX_AF_LFX_RX_CFG (nixlf), req->rx_cfg); +/* Configure pkind for TX parse config */ + cfg =NPC_TX_DEF_PKIND ; +rvu_write64 (rvu, blkaddr,NIX_AF_LFX_TX_PARSE_CFG (nixlf), cfg); + intf =is_afvf (pcifunc) ?NIX_INTF_TYPE_LBK :NIX_INTF_TYPE_CGX ; err =nix_interface_init (rvu, pcifunc, intf, nixlf);if (err)
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c +1 -1
@@ -2035,10 +2035,10 @@ int rvu_mbox_handler_npc_mcam_free_counter(struct rvu *rvu, index =find_next_bit (mcam->bmap, mcam->bmap_entries, entry);if (index >= mcam->bmap_entries)break ; + entry = index +1 ;if (mcam->entry2cntr_map[index] != req->cntr)continue ; - entry = index +1 ;npc_unmap_mcam_entry_and_cntr (rvu, mcam, blkaddr, index, req->cntr); }
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +5 -0
@@ -1616,6 +1616,7 @@ int otx2_stop(struct net_device *netdev)struct otx2_nic *pf =netdev_priv (netdev);struct otx2_cq_poll *cq_poll =NULL ;struct otx2_qset *qset = &pf->qset; +struct otx2_rss_info *rss;int qidx, vec, wrk;netif_carrier_off (netdev);
@@ -1628,6 +1629,10 @@ int otx2_stop(struct net_device *netdev)/* First stop packet Rx/Tx */ otx2_rxtx_enable (pf, false); +/* Clear RSS enable flag */ + rss = &pf->hw.rss_info; + rss->enable = false; +/* Cleanup Queue IRQ */ vec =pci_irq_vector (pf->pdev, pf->hw.nix_msixoff +NIX_LF_QINT_VEC_START );
drivers/net/ethernet/mellanox/mlx5/core/en.h +4 -3
@@ -90,14 +90,15 @@ struct page_pool; MLX5_MPWRQ_LOG_WQE_SZ - PAGE_SHIFT : 0)#define MLX5_MPWRQ_PAGES_PER_WQE BIT(MLX5_MPWRQ_WQE_PAGE_ORDER) -#define MLX5_MTT_OCTW (npages) (ALIGN(npages, 8) / 2) +#define MLX5_ALIGN_MTTS (mtts) (ALIGN(mtts, 8)) +#define MLX5_ALIGNED_MTTS_OCTW (mtts) ((mtts) / 2) +#define MLX5_MTT_OCTW (mtts) (MLX5_ALIGNED_MTTS_OCTW(MLX5_ALIGN_MTTS(mtts)))/* Add another page to MLX5E_REQUIRED_WQE_MTTS as a buffer between * WQEs, This page will absorb write overflow by the hardware, when * receiving packets larger than MTU. These oversize packets are * dropped by the driver at a later stage. */ -#define MLX5E_REQUIRED_WQE_MTTS (ALIGN(MLX5_MPWRQ_PAGES_PER_WQE + 1, 8)) -#define MLX5E_LOG_ALIGNED_MPWQE_PPW (ilog2(MLX5E_REQUIRED_WQE_MTTS)) +#define MLX5E_REQUIRED_WQE_MTTS (MLX5_ALIGN_MTTS(MLX5_MPWRQ_PAGES_PER_WQE + 1))#define MLX5E_REQUIRED_MTTS (wqes) (wqes * MLX5E_REQUIRED_WQE_MTTS)#define MLX5E_MAX_RQ_NUM_MTTS \ ((1 << 16) * 2)/* So that MLX5_MTT_OCTW(num_mtts) fits into u16 */
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c +2 -1
@@ -1182,7 +1182,8 @@ int mlx5_tc_ct_add_no_trk_match(struct mlx5_flow_spec *spec)mlx5e_tc_match_to_reg_get_match (spec,CTSTATE_TO_REG , &ctstate, &ctstate_mask); -if (ctstate_mask) + +if ((ctstate & ctstate_mask) ==MLX5_CT_STATE_TRK_BIT )return -EOPNOTSUPP ; ctstate_mask |=MLX5_CT_STATE_TRK_BIT ;
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c +4 -0
@@ -227,6 +227,10 @@ static int mlx5e_tc_tun_parse_geneve_options(struct mlx5e_priv *priv, option_key = (struct geneve_opt *)&enc_opts.key->data[0 ]; option_mask = (struct geneve_opt *)&enc_opts.mask->data[0 ]; +if (option_mask->opt_class ==0 && option_mask->type ==0 && + !memchr_inv (option_mask->opt_data,0 , option_mask->length *4 )) +return 0 ; +if (option_key->length > max_tlv_option_data_len) {NL_SET_ERR_MSG_MOD (extack,"Matching on GENEVE options: unsupported option len" );
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +5 -1
@@ -1873,6 +1873,7 @@ static int set_pflag_rx_cqe_compress(struct net_device *netdev, {struct mlx5e_priv *priv =netdev_priv (netdev);struct mlx5_core_dev *mdev = priv->mdev; +int err;if (!MLX5_CAP_GEN (mdev, cqe_compression))return -EOPNOTSUPP ;
@@ -1882,7 +1883,10 @@ static int set_pflag_rx_cqe_compress(struct net_device *netdev,return -EINVAL ; } -mlx5e_modify_rx_cqe_compression_locked (priv, enable); + err =mlx5e_modify_rx_cqe_compression_locked (priv, enable); +if (err) +return err; + priv->channels.params.rx_cqe_compress_def = enable;return 0 ;
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +13 -4
@@ -303,9 +303,9 @@ static int mlx5e_create_rq_umr_mkey(struct mlx5_core_dev *mdev, struct mlx5e_rq rq->wqe_overflow.addr); } -static inline u64 mlx5e_get_mpwqe_offset (struct mlx5e_rq *rq,u16 wqe_ix) +static u64 mlx5e_get_mpwqe_offset (u16 wqe_ix) { -return (wqe_ix <<MLX5E_LOG_ALIGNED_MPWQE_PPW ) <<PAGE_SHIFT ; +return MLX5E_REQUIRED_MTTS (wqe_ix) <<PAGE_SHIFT ; }static void mlx5e_init_frags_partition (struct mlx5e_rq *rq)
@@ -544,7 +544,7 @@ static int mlx5e_alloc_rq(struct mlx5e_channel *c,mlx5_wq_ll_get_wqe (&rq->mpwqe.wq, i);u32 byte_count = rq->mpwqe.num_strides << rq->mpwqe.log_stride_sz; -u64 dma_offset =mlx5e_get_mpwqe_offset (rq, i); +u64 dma_offset =mlx5e_get_mpwqe_offset (i); wqe->data[0 ].addr =cpu_to_be64 (dma_offset + rq->buff.headroom); wqe->data[0 ].byte_count =cpu_to_be32 (byte_count);
@@ -3666,10 +3666,17 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats) }if (mlx5e_is_uplink_rep (priv)) { +struct mlx5e_vport_stats *vstats = &priv->stats.vport; + stats->rx_packets =PPORT_802_3_GET (pstats, a_frames_received_ok); stats->rx_bytes =PPORT_802_3_GET (pstats, a_octets_received_ok); stats->tx_packets =PPORT_802_3_GET (pstats, a_frames_transmitted_ok); stats->tx_bytes =PPORT_802_3_GET (pstats, a_octets_transmitted_ok); + +/* vport multicast also counts packets that are dropped due to steering +* or rx out of buffer +*/ + stats->multicast =VPORT_COUNTER_GET (vstats, received_eth_multicast.packets); }else {mlx5e_fold_sw_stats64 (priv, stats); }
@@ -4494,8 +4501,10 @@ static int mlx5e_xdp_set(struct net_device *netdev, struct bpf_prog *prog)struct mlx5e_channel *c = priv->channels.c[i];mlx5e_rq_replace_xdp_prog (&c->rq, prog); -if (test_bit (MLX5E_CHANNEL_STATE_XSK , c->state)) +if (test_bit (MLX5E_CHANNEL_STATE_XSK , c->state)) { +bpf_prog_inc (prog);mlx5e_rq_replace_xdp_prog (&c->xskrq, prog); + } } unlock:
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +2 -2
@@ -506,7 +506,6 @@ static int mlx5e_alloc_rx_mpwqe(struct mlx5e_rq *rq, u16 ix)struct mlx5e_icosq *sq = &rq->channel->icosq;struct mlx5_wq_cyc *wq = &sq->wq;struct mlx5e_umr_wqe *umr_wqe; -u16 xlt_offset = ix << (MLX5E_LOG_ALIGNED_MPWQE_PPW -1 );u16 pi;int err;int i;
@@ -537,7 +536,8 @@ static int mlx5e_alloc_rx_mpwqe(struct mlx5e_rq *rq, u16 ix) umr_wqe->ctrl.opmod_idx_opcode =cpu_to_be32 ((sq->pc <<MLX5_WQE_CTRL_WQE_INDEX_SHIFT ) |MLX5_OPCODE_UMR ); - umr_wqe->uctrl.xlt_offset =cpu_to_be16 (xlt_offset); + umr_wqe->uctrl.xlt_offset = +cpu_to_be16 (MLX5_ALIGNED_MTTS_OCTW (MLX5E_REQUIRED_MTTS (ix))); sq->db.wqe_info[pi] = (struct mlx5e_icosq_wqe_info ) { .wqe_type =MLX5E_ICOSQ_WQE_UMR_RX ,
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +43 -11
73 lines not on this page · raw message
drivers/net/ethernet/netronome/nfp/flower/metadata.c +17 -7
@@ -327,8 +327,14 @@ int nfp_compile_flow_metadata(struct nfp_app *app, goto err_free_ctx_entry; } +/* Do net allocate a mask-id for pre_tun_rules. These flows are used to +* configure the pre_tun table and are never actually send to the +* firmware as an add-flow message. This causes the mask-id allocation +* on the firmware to get out of sync if allocated here. +*/ new_mask_id =0 ; -if (!nfp_check_mask_add (app, nfp_flow->mask_data, +if (!nfp_flow->pre_tun_rule.dev && + !nfp_check_mask_add (app, nfp_flow->mask_data, nfp_flow->meta.mask_len, &nfp_flow->meta.flags, &new_mask_id)) {NL_SET_ERR_MSG_MOD (extack,"invalid entry: cannot allocate a new mask id" );
@@ -359,7 +365,8 @@ int nfp_compile_flow_metadata(struct nfp_app *app, goto err_remove_mask; } -if (!nfp_check_mask_remove (app, nfp_flow->mask_data, +if (!nfp_flow->pre_tun_rule.dev && + !nfp_check_mask_remove (app, nfp_flow->mask_data, nfp_flow->meta.mask_len,NULL , &new_mask_id)) {NL_SET_ERR_MSG_MOD (extack,"invalid entry: cannot release mask id" );
@@ -374,8 +381,10 @@ int nfp_compile_flow_metadata(struct nfp_app *app,return 0 ; err_remove_mask: -nfp_check_mask_remove (app, nfp_flow->mask_data, nfp_flow->meta.mask_len, -NULL , &new_mask_id); +if (!nfp_flow->pre_tun_rule.dev) +nfp_check_mask_remove (app, nfp_flow->mask_data, + nfp_flow->meta.mask_len, +NULL , &new_mask_id); err_remove_rhash: WARN_ON_ONCE(rhashtable_remove_fast(&priv->stats_ctx_table, &ctx_entry->ht_node,
@@ -406,9 +415,10 @@ int nfp_modify_flow_metadata(struct nfp_app *app,__nfp_modify_flow_metadata (priv, nfp_flow); -nfp_check_mask_remove (app, nfp_flow->mask_data, - nfp_flow->meta.mask_len, &nfp_flow->meta.flags, - &new_mask_id); +if (!nfp_flow->pre_tun_rule.dev) +nfp_check_mask_remove (app, nfp_flow->mask_data, + nfp_flow->meta.mask_len, &nfp_flow->meta.flags, + &new_mask_id);/* Update flow payload with mask ids. */ nfp_flow->unmasked_data[NFP_FL_MASK_ID_LOCATION ] = new_mask_id;
drivers/net/ethernet/netronome/nfp/flower/offload.c +18 -0
@@ -1142,6 +1142,12 @@ nfp_flower_validate_pre_tun_rule(struct nfp_app *app,return -EOPNOTSUPP ; } +if (!(key_layer &NFP_FLOWER_LAYER_IPV4 ) && + !(key_layer &NFP_FLOWER_LAYER_IPV6 )) { +NL_SET_ERR_MSG_MOD (extack,"unsupported pre-tunnel rule: match on ipv4/ipv6 eth_type must be present" ); +return -EOPNOTSUPP ; + } +/* Skip fields known to exist. */ mask +=sizeof (struct nfp_flower_meta_tci ); ext +=sizeof (struct nfp_flower_meta_tci );
@@ -1152,6 +1158,13 @@ nfp_flower_validate_pre_tun_rule(struct nfp_app *app, mask +=sizeof (struct nfp_flower_in_port ); ext +=sizeof (struct nfp_flower_in_port ); +/* Ensure destination MAC address matches pre_tun_dev. */ + mac = (struct nfp_flower_mac_mpls *)ext; +if (memcmp (&mac->mac_dst[0 ], flow->pre_tun_rule.dev->dev_addr,6 )) { +NL_SET_ERR_MSG_MOD (extack,"unsupported pre-tunnel rule: dest MAC must match output dev MAC" ); +return -EOPNOTSUPP ; + } +/* Ensure destination MAC address is fully matched. */ mac = (struct nfp_flower_mac_mpls *)mask;if (!is_broadcast_ether_addr (&mac->mac_dst[0 ])) {
@@ -1159,6 +1172,11 @@ nfp_flower_validate_pre_tun_rule(struct nfp_app *app,return -EOPNOTSUPP ; } +if (mac->mpls_lse) { +NL_SET_ERR_MSG_MOD (extack,"unsupported pre-tunnel rule: MPLS not supported" ); +return -EOPNOTSUPP ; + } + mask +=sizeof (struct nfp_flower_mac_mpls ); ext +=sizeof (struct nfp_flower_mac_mpls ); if (key_layer & NFP_FLOWER_LAYER_IPV4 ||
drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c +13 -2
@@ -16,8 +16,9 @@#define NFP_FL_MAX_ROUTES 32#define NFP_TUN_PRE_TUN_RULE_LIMIT 32 -#define NFP_TUN_PRE_TUN_RULE_DEL 0x1 -#define NFP_TUN_PRE_TUN_IDX_BIT 0x8 +#define NFP_TUN_PRE_TUN_RULE_DEL BIT(0) +#define NFP_TUN_PRE_TUN_IDX_BIT BIT(3) +#define NFP_TUN_PRE_TUN_IPV6_BIT BIT(7)/** * struct nfp_tun_pre_run_rule - rule matched before decap
@@ -1268,6 +1269,7 @@ int nfp_flower_xmit_pre_tun_flow(struct nfp_app *app, {struct nfp_flower_priv *app_priv = app->priv;struct nfp_tun_offloaded_mac *mac_entry; +struct nfp_flower_meta_tci *key_meta;struct nfp_tun_pre_tun_rule payload;struct net_device *internal_dev;int err;
@@ -1290,6 +1292,15 @@ int nfp_flower_xmit_pre_tun_flow(struct nfp_app *app,if (!mac_entry)return -ENOENT ; +/* Set/clear IPV6 bit. cpu_to_be16() swap will lead to MSB being +* set/clear for port_idx. +*/ + key_meta = (struct nfp_flower_meta_tci *)flow->unmasked_data; +if (key_meta->nfp_flow_key_layer &NFP_FLOWER_LAYER_IPV6 ) + mac_entry->index |=NFP_TUN_PRE_TUN_IPV6_BIT ; +else + mac_entry->index &= ~NFP_TUN_PRE_TUN_IPV6_BIT ; + payload.port_idx =cpu_to_be16 (mac_entry->index);/* Copy mac id and vlan to flow - dev may not exist at delete time. */
drivers/net/ethernet/pensando/ionic/ionic_txrx.c +7 -6
@@ -1077,15 +1077,17 @@ static int ionic_tx_descs_needed(struct ionic_queue *q, struct sk_buff *skb) {int sg_elems = q->lif->qtype_info[IONIC_QTYPE_TXQ ].max_sg_elems;struct ionic_tx_stats *stats =q_to_tx_stats (q); +int ndescs;int err; -/* If TSO, need roundup(skb->len/mss) descs */ +/* Each desc is mss long max, so a descriptor for each gso_seg */ if (skb_is_gso (skb)) -return (skb->len /skb_shinfo (skb)->gso_size) +1 ; + ndescs =skb_shinfo (skb)->gso_segs; +else + ndescs =1 ; -/* If non-TSO, just need 1 desc and nr_frags sg elems */ if (skb_shinfo (skb)->nr_frags <= sg_elems) -return 1 ; +return ndescs;/* Too many frags, so linearize */ err =skb_linearize (skb);
@@ -1094,8 +1096,7 @@ static int ionic_tx_descs_needed(struct ionic_queue *q, struct sk_buff *skb) stats->linearize++; -/* Need 1 desc and zero sg elems */ -return 1 ; +return ndescs; }static int ionic_maybe_stop_tx (struct ionic_queue *q,int ndescs)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c +3 -0
@@ -1425,6 +1425,7 @@ void qlcnic_83xx_get_minidump_template(struct qlcnic_adapter *adapter)if (fw_dump->tmpl_hdr ==NULL || current_version > prev_version) {vfree (fw_dump->tmpl_hdr); + fw_dump->tmpl_hdr =NULL ;if (qlcnic_83xx_md_check_extended_dump_capability (adapter)) extended = !qlcnic_83xx_extend_md_capab (adapter);
@@ -1443,6 +1444,8 @@ void qlcnic_83xx_get_minidump_template(struct qlcnic_adapter *adapter)struct qlcnic_83xx_dump_template_hdr *hdr; hdr = fw_dump->tmpl_hdr; +if (!hdr) +return ; hdr->drv_cap_mask =0x1f ; fw_dump->cap_mask =0x1f ; dev_info(&pdev->dev,
drivers/net/ethernet/realtek/r8169_main.c +4 -2
@@ -4726,6 +4726,9 @@ static void rtl8169_down(struct rtl8169_private *tp)rtl8169_update_counters (tp); +pci_clear_master (tp->pci_dev); +rtl_pci_commit (tp); +rtl8169_cleanup (tp, true);rtl_pll_power_down (tp);
@@ -4733,6 +4736,7 @@ static void rtl8169_down(struct rtl8169_private *tp)static void rtl8169_up (struct rtl8169_private *tp) {
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/socionext/netsec.c +6 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c +42 -8
50 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/enh_desc.c +6 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/hwif.h +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/norm_desc.c +6 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +38 -19
57 lines not on this page · raw message
drivers/net/ethernet/xilinx/xilinx_axienet.h +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/xilinx/xilinx_axienet_main.c +90 -35
125 lines not on this page · raw message
drivers/net/phy/broadcom.c +108 -39
147 lines not on this page · raw message
drivers/net/wan/hdlc_x25.c +41 -1
42 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/dma.c +6 -9
Lines of this file are not shown. View the raw message.
drivers/regulator/qcom-rpmh-regulator.c +2 -2
Lines of this file are not shown. View the raw message.
include/linux/static_call.h +20 -23
43 lines not on this page · raw message
include/linux/static_call_types.h +50 -0
50 lines not on this page · raw message
kernel/gcov/clang.c +69 -0
69 lines not on this page · raw message
kernel/static_call.c +63 -8
71 lines not on this page · raw message
kernel/trace/ftrace.c +38 -5
43 lines not on this page · raw message
mm/hugetlb.c +37 -4
41 lines not on this page · raw message
net/core/dst.c +42 -17
59 lines not on this page · raw message
net/ipv4/route.c +8 -37
45 lines not on this page · raw message
net/netfilter/x_tables.c +34 -15
49 lines not on this page · raw message
security/selinux/ss/services.c +39 -24
63 lines not on this page · raw message
tools/include/linux/static_call_types.h +50 -0
50 lines not on this page · raw message
tools/testing/selftests/arm64/fp/sve-ptrace.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/test_tunnel_kern.c +2 -4
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/reuseaddr_ports_exhausted.c +16 -16
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.27 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/virt/kvm/api.rst | 6 Makefile | 5 arch/arm/boot/dts/at91-sam9x60ek.dts | 8 arch/arm/boot/dts/at91-sama5d27_som1.dtsi | 4 arch/arm/boot/dts/imx6ull-myir-mys-6ulx-eval.dts | 1 arch/arm/boot/dts/sam9x60.dtsi | 9 arch/arm/mach-omap2/sr_device.c | 75 +++-- arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi | 1 arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 1 arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi | 1 arch/arm64/kernel/crash_dump.c | 2 arch/arm64/kernel/stacktrace.c | 9 arch/ia64/include/asm/syscall.h | 2 arch/ia64/kernel/ptrace.c | 24 + arch/powerpc/include/asm/dcr-native.h | 8 arch/sparc/kernel/traps_64.c | 13 arch/x86/include/asm/kvm_host.h | 14 arch/x86/include/asm/static_call.h | 7 arch/x86/include/asm/xen/page.h | 12 arch/x86/kvm/x86.c | 109 ++++--- arch/x86/mm/mem_encrypt.c | 2 arch/x86/xen/p2m.c | 7 arch/x86/xen/setup.c | 16 - block/blk-cgroup-rwstat.c | 3 block/blk-merge.c | 8 block/blk-zoned.c | 2 block/genhd.c | 4 drivers/acpi/acpica/nsaccess.c | 3 drivers/acpi/internal.h | 6 drivers/acpi/scan.c | 88 +++-- drivers/acpi/video_detect.c | 1 drivers/atm/eni.c | 3 drivers/atm/idt77105.c | 4 drivers/atm/lanai.c | 5 drivers/atm/uPD98402.c | 2 drivers/base/power/runtime.c | 45 ++- drivers/block/umem.c | 5 drivers/block/xen-blkback/blkback.c | 2 drivers/bus/omap_l3_noc.c | 4 drivers/clk/qcom/gcc-sc7180.c | 4 drivers/cpufreq/cpufreq-dt-platdev.c | 2 drivers/gpio/gpiolib-acpi.c | 2 drivers/gpu/drm/Kconfig | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 2 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_link_encoder.c | 3 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 2 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 54 +++ drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 74 ++++- drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 24 + drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 25 + drivers/gpu/drm/etnaviv/etnaviv_gem.c | 2 drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c | 13 drivers/gpu/drm/i915/intel_runtime_pm.c | 29 + drivers/gpu/drm/i915/intel_runtime_pm.h | 5 drivers/gpu/drm/msm/dsi/pll/dsi_pll.c | 2 drivers/gpu/drm/msm/dsi/pll/dsi_pll.h | 6 drivers/gpu/drm/msm/dsi/pll/dsi_pll_7nm.c | 5 drivers/gpu/drm/msm/msm_drv.c | 12 drivers/infiniband/hw/cxgb4/cm.c | 4 drivers/irqchip/irq-ingenic-tcu.c | 1 drivers/irqchip/irq-ingenic.c | 1 drivers/md/dm-ioctl.c | 2 drivers/md/dm-table.c | 33 +- drivers/md/dm-verity-target.c | 2 drivers/md/dm-zoned-target.c | 2 drivers/misc/habanalabs/common/device.c | 2 drivers/net/bonding/bond_main.c | 8 drivers/net/can/c_can/c_can.c | 24 - drivers/net/can/c_can/c_can_pci.c | 3 drivers/net/can/c_can/c_can_platform.c | 6 drivers/net/can/dev.c | 1 drivers/net/can/flexcan.c | 8 drivers/net/can/kvaser_pciefd.c | 4 drivers/net/can/m_can/m_can.c | 5 drivers/net/dsa/b53/b53_common.c | 14 drivers/net/dsa/bcm_sf2.c | 6 drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c | 2 drivers/net/ethernet/davicom/dm9000.c | 2 drivers/net/ethernet/faraday/ftgmac100.c | 1 drivers/net/ethernet/freescale/enetc/enetc_hw.h | 2 drivers/net/ethernet/freescale/enetc/enetc_pf.c | 6 drivers/net/ethernet/freescale/fec_ptp.c | 7 drivers/net/ethernet/freescale/gianfar.c | 15 + drivers/net/ethernet/hisilicon/hns/hns_enet.c | 4 drivers/net/ethernet/intel/e1000e/82571.c | 2 drivers/net/ethernet/intel/e1000e/netdev.c | 6 drivers/net/ethernet/intel/iavf/iavf_main.c | 3 drivers/net/ethernet/intel/igb/igb.h | 4 drivers/net/ethernet/intel/igb/igb_main.c | 33 +- drivers/net/ethernet/intel/igb/igb_ptp.c | 31 +- drivers/net/ethernet/intel/igc/igc.h | 2 drivers/net/ethernet/intel/igc/igc_ethtool.c | 7 drivers/net/ethernet/intel/igc/igc_main.c | 9 drivers/net/ethernet/intel/igc/igc_ptp.c | 72 ++-- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 6 drivers/net/ethernet/marvell/octeontx2/af/npc.h | 31 ++ drivers/net/ethernet/marvell/octeontx2/af/npc_profile.h | 97 +++++- drivers/net/ethernet/marvell/octeontx2/af/rvu.c | 4 drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c | 48 ++- drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 4 drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c | 2 drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 5 drivers/net/ethernet/mellanox/mlx5/core/en.h | 7 drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 6 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 17 - drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 54 ++- drivers/net/ethernet/netronome/nfp/flower/metadata.c | 24 + drivers/net/ethernet/netronome/nfp/flower/offload.c | 18 + drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c | 15 - drivers/net/ethernet/pensando/ionic/ionic_txrx.c | 13 drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c | 3 drivers/net/ethernet/realtek/r8169_main.c | 6 drivers/net/ethernet/socionext/netsec.c | 9 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c | 50 ++- drivers/net/ethernet/stmicro/stmmac/enh_desc.c | 9 drivers/net/ethernet/stmicro/stmmac/hwif.h | 3 drivers/net/ethernet/stmicro/stmmac/norm_desc.c | 9 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 57 ++- drivers/net/ethernet/sun/niu.c | 2 drivers/net/ethernet/tehuti/tehuti.c | 1 drivers/net/ethernet/xilinx/xilinx_axienet.h | 3 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 125 ++++++-- drivers/net/ipa/ipa_qmi.c | 2 drivers/net/phy/broadcom.c | 147 +++++++--- drivers/net/phy/dp83822.c | 3 drivers/net/phy/dp83869.c | 4 drivers/net/phy/lxt.c | 1 drivers/net/phy/marvell.c | 1 drivers/net/phy/marvell10g.c | 2 drivers/net/phy/micrel.c | 14 drivers/net/phy/phy.c | 2 drivers/net/phy/phy_device.c | 9 drivers/net/phy/phylink.c | 2 drivers/net/usb/cdc-phonet.c | 2 drivers/net/usb/r8152.c | 40 -- drivers/net/veth.c | 3 drivers/net/wan/fsl_ucc_hdlc.c | 8 drivers/net/wan/hdlc_x25.c | 42 ++ drivers/net/wireless/mediatek/mt76/dma.c | 15 - drivers/nvme/host/core.c | 15 - drivers/nvme/host/fc.c | 3 drivers/nvme/host/pci.c | 1 drivers/nvme/target/rdma.c | 5 drivers/platform/x86/intel-vbtn.c | 12 drivers/regulator/qcom-rpmh-regulator.c | 4 drivers/scsi/mpt3sas/mpt3sas_base.c | 8 drivers/scsi/qedi/qedi_main.c | 1 drivers/scsi/qla2xxx/qla_target.c | 13 drivers/scsi/qla2xxx/tcm_qla2xxx.c | 4 drivers/scsi/ufs/ufs-qcom.c | 10 drivers/soc/ti/omap_prm.c | 6 drivers/staging/rtl8192e/Kconfig | 1 drivers/xen/Kconfig | 4 fs/btrfs/qgroup.c | 12 fs/cachefiles/rdwr.c | 7 fs/cifs/cifsglob.h | 4 fs/cifs/cifspdu.h | 5 fs/cifs/smb2glob.h | 1 fs/cifs/smb2ops.c | 27 + fs/cifs/smb2pdu.c | 6 fs/cifs/smb2transport.c | 37 +- fs/cifs/transport.c | 2 fs/ext4/mballoc.c | 11 fs/ext4/xattr.c | 4 fs/gfs2/log.c | 4 fs/gfs2/trans.c | 2 fs/io_uring.c | 4 fs/nfs/Kconfig | 2 fs/nfs/nfs3xdr.c | 3 fs/nfs/nfs4proc.c | 3 fs/squashfs/export.c | 8 fs/squashfs/id.c | 6 fs/squashfs/squashfs_fs.h | 1 fs/squashfs/xattr_id.c | 6 include/acpi/acpi_bus.h | 1 include/asm-generic/vmlinux.lds.h | 5 include/linux/bpf.h | 9 include/linux/brcmphy.h | 4 include/linux/device-mapper.h | 15 - include/linux/hugetlb_cgroup.h | 15 - include/linux/if_macvlan.h | 3 include/linux/memcontrol.h | 6 include/linux/mm.h | 15 - include/linux/mm_types.h | 1 include/linux/mmu_notifier.h | 10 include/linux/mutex.h | 2 include/linux/netfilter/x_tables.h | 7 include/linux/pagemap.h | 1 include/linux/phy.h | 2 include/linux/static_call.h | 43 +- include/linux/static_call_types.h | 50 +++ include/linux/u64_stats_sync.h | 7 include/linux/usermode_driver.h | 1 include/net/dst.h | 11 include/net/inet_connection_sock.h | 2 include/net/netfilter/nf_tables.h | 3 include/net/nexthop.h | 24 + include/net/red.h | 10 include/net/rtnetlink.h | 2 include/uapi/linux/psample.h | 5 kernel/bpf/bpf_inode_storage.c | 2 kernel/bpf/preload/bpf_preload_kern.c | 19 + kernel/fork.c | 8 kernel/gcov/clang.c | 69 ++++ kernel/power/energy_model.c | 2 kernel/static_call.c | 71 ++++ kernel/trace/ftrace.c | 43 ++ kernel/usermode_driver.c | 21 + mm/huge_memory.c | 2 mm/hugetlb.c | 41 ++ mm/hugetlb_cgroup.c | 10 mm/memcontrol.c | 17 - mm/mmu_notifier.c | 23 + mm/page_alloc.c | 1 mm/z3fold.c | 16 + net/bridge/br_switchdev.c | 2 net/can/isotp.c | 18 - net/core/dev.c | 14 net/core/drop_monitor.c | 23 + net/core/dst.c | 59 ++-- net/core/flow_dissector.c | 2 net/dccp/ipv6.c | 5 net/ipv4/inet_connection_sock.c | 7 net/ipv4/netfilter/arp_tables.c | 16 - net/ipv4/netfilter/ip_tables.c | 16 - net/ipv4/route.c | 45 --- net/ipv4/tcp_minisocks.c | 7 net/ipv6/ip6_fib.c | 2 net/ipv6/ip6_input.c | 10 net/ipv6/netfilter/ip6_tables.c | 16 - net/ipv6/route.c | 36 -- net/ipv6/tcp_ipv6.c | 5 net/mac80211/cfg.c | 4 net/mac80211/ibss.c | 2 net/mac80211/mlme.c | 2 net/mac80211/util.c | 2 net/mptcp/subflow.c | 5 net/netfilter/nf_conntrack_netlink.c | 1 net/netfilter/nf_flow_table_core.c | 2 net/netfilter/nf_tables_api.c | 19 + net/netfilter/x_tables.c | 49 ++- net/qrtr/qrtr.c | 5 net/sched/cls_flower.c | 2 net/sched/sch_choke.c | 7 net/sched/sch_gred.c | 2 net/sched/sch_red.c | 7 net/sched/sch_sfq.c | 2 net/tipc/node.c | 11 net/vmw_vsock/af_vsock.c | 1 scripts/dummy-tools/gcc | 5 security/integrity/iint.c | 8 security/selinux/include/security.h | 15 - security/selinux/selinuxfs.c | 13 security/selinux/ss/services.c | 63 ++-- sound/hda/intel-nhlt.c | 5 tools/include/linux/static_call_types.h | 50 +++ tools/lib/bpf/Makefile | 2 tools/lib/bpf/btf_dump.c | 2 tools/lib/bpf/libbpf.c | 3 tools/lib/bpf/netlink.c | 2 tools/objtool/check.c | 17 + tools/perf/util/auxtrace.c | 4 tools/perf/util/synthetic-events.c | 9 tools/testing/selftests/arm64/fp/sve-ptrace.c | 2 tools/testing/selftests/bpf/progs/test_tunnel_kern.c | 6 tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh | 2 tools/testing/selftests/net/reuseaddr_ports_exhausted.c | 32 +- 272 files changed, 2578 insertions(+), 970 deletions(-)
Adrian Hunter (1):
perf auxtrace: Fix auxtrace queue conflict
Alaa Hleihel (1):
net/mlx5e: Allow to match on MPLS parameters only for MPLS over UDP
Alex Deucher (2):
drm/amdgpu/display: restore AUX_DPHY_TX_CONTROL for DCN2.x drm/amdgpu: Add additional Sienna Cichlid PCI ID
Alex Elder (1):
net: ipa: terminate message handler arrays
Alex Marginean (1):
net: enetc: set MAC RX FIFO to recommended value
Alexander Lobakin (1):
flow_dissector: fix byteorder of dissected ICMP ID
Alexander Ovechkin (1):
tcp: relookup sock for RST+ACK packets handled by obsolete req sock
Alexei Starovoitov (1):
ftrace: Fix modify_ftrace_direct.
Andre Guedes (1):
igc: Fix igc_ptp_rx_pktstamp()
Andrey Konovalov (1):
kasan: fix per-page tags for non-page_alloc pages
Andy Shevchenko (1):
ACPI: scan: Use unique number for instance_no
Angelo Dureghello (1):
can: flexcan: flexcan_chip_freeze(): fix chip freeze for missing bitrate
Arnd Bergmann (1):
ch_ktls: fix enum-conversion warning
Aurelien Aptel (1):
cifs: ask for more credit on async read/write code paths
Aya Levin (1):
net/mlx5e: Fix error path for ethtool set-priv-flag
Bart Van Assche (1):
scsi: Revert "qla2xxx: Make sure that aborted commands are freed"
Bob Peterson (1):
gfs2: fix use-after-free in trans_drain
Brian Norris (1):
mac80211: Allow HE operation to be longer than expected.
Carlos Llamas (1):
selftests/net: fix warnings on reuseaddr_ports_exhausted
Chaitanya Kulkarni (1):
nvme-core: check ctrl css before setting up zns
Chris Chiu (1):
ACPI: video: Add missing callback back for Sony VPCEH3U1E
Christian König (1):
drm/radeon: fix AGP dependency
Christoph Hellwig (1):
nvme: fix the nsid value to print in nvme_validate_or_alloc_ns
Claudiu Beznea (1):
ARM: dts: at91-sama5d27_som1: fix phy address to 7
Colin Ian King (1):
octeontx2-af: Fix memory leak of object buf
Corentin Labbe (1):
net: stmmac: dwmac-sun8i: Provide TX and RX fifo sizes
Damien Le Moal (1):
block: Fix REQ_OP_ZONE_RESET_ALL handling
Daniel Borkmann (2):
net: Consolidate common blackhole dst ops
net, bpf: Fix ip6ip6 crash with collect_md populated skbs
Daniel Vetter (1):
drm/etnaviv: Use FOLL_FORCE for userptr
Daniel Wagner (1):
block: Suppress uevent for hidden device when removed
David Brazdil (1):
selinux: vsock: Set SID for socket returned by accept()
David Jeffery (1):
block: recalculate segment count for multi-segment discards correctly
David S. Miller (1):
Revert "net: bonding: fix error return code of bond_neigh_init()"
Denis Efremov (1):
sun/niu: fix wrong RXMAC_BC_FRM_CNT_COUNT count
Dima Chumak (1):
net/mlx5e: Offload tuple rewrite for non-CT flows
Dinghao Liu (2):
ixgbe: Fix memleak in ixgbe_configure_clsu32
e1000e: Fix error handling in e1000_set_d0_lplu_state_82571
Dmitry Baryshkov (2):
drm/msm/dsi: fix check-before-set in the 7nm dsi_pll code drm/msm: fix shutdown hook in case GPU components failed to bind
Dmitry Monakhov (1):
nvme-pci: add the DISABLE_WRITE_ZEROES quirk for a Samsung PM1725a
Douglas Anderson (1):
clk: qcom: gcc-sc7180: Use floor ops for the correct sdcc1 clk
Dylan Hung (1):
ftgmac100: Restart MAC HW once
Eric Dumazet (4):
macvlan: macvlan_count_rx() needs to be aware of preemption
net: sched: validate stab values
net: qrtr: fix a kernel-infoleak in qrtr_recvmsg()
tipc: better validate user input in tipc_nl_retrieve_key()
Fabio Estevam (1):
drm/msm: Fix suspend/resume on i.MX5
Federico Pellegrin (1):
ARM: dts: at91: sam9x60: fix mux-mask for PA7 so it can be set to A, B and C
Felix Fietkau (1):
mt76: fix tx skb error handling in mt76_dma_tx_queue_skb
Fenghua Yu (1):
mm/fork: clear PASID for new mm
Filipe Manana (1):
btrfs: fix sleep while in non-sleep context during qgroup removal
Florian Fainelli (5):
net: dsa: bcm_sf2: Qualify phydev->dev_flags based on port
net: phy: broadcom: Add power down exit reset state delay
net: phy: broadcom: Avoid forward for bcm54xx_config_clock_delay()
net: phy: broadcom: Fix RGMII delays for BCM50160 and BCM50610M
net: dsa: b53: VLAN filtering is global to all users
Florian Westphal (1):
netfilter: ctnetlink: fix dump of the expect mask attribute
Frank Sorenson (1):
NFS: Correct size calculation for create reply length
Geetha sowjanya (2):
octeontx2-af: Fix irq free in rvu teardown
octeontx2-pf: Clear RSS enable flag on interace down
Georgi Valkov (1):
libbpf: Fix INSTALL flag order
Greg Kroah-Hartman (1):
Linux 5.10.27
Grygorii Strashko (1):
bus: omap_l3_noc: mark l3 irqs as IRQF_NO_THREAD
Hangbin Liu (2):
selftests/bpf: Set gopt opt_class to 0 if get tunnel opt failed
selftests: forwarding: vxlan_bridge_1d: Fix vxlan ecn decapsulate value
Hannes Reinecke (4):
nvme: simplify error logic in nvme_validate_ns()
nvme: add NVME_REQ_CANCELLED flag in nvme_cancel_request()
nvme-fc: set NVME_REQ_CANCELLED in nvme_fc_terminate_exchange()
nvme-fc: return NVME_SC_HOST_ABORTED_CMD when a command has been aborted
Hans de Goede (1):
platform/x86: intel-vbtn: Stop reporting SW_DOCK events
Hariprasad Kelam (1):
octeontx2-af: fix infinite loop in unmapping NPC counter
Hayes Wang (2):
Revert "r8152: adjust the settings about MAC clock speed down for RTL8153"
r8152: limit the RX buffer size of RTL8153A for USB 2.0
Heiko Thiery (1):
net: fec: ptp: avoid register access when ipg clock is disabled
Heiner Kallweit (1):
r8169: fix DMA being used after buffer free if WoL is enabled
Horia Geantă (3):
arm64: dts: ls1046a: mark crypto engine dma coherent
arm64: dts: ls1012a: mark crypto engine dma coherent
arm64: dts: ls1043a: mark crypto engine dma coherent
Hugh Dickins (1):
mm/memcg: fix 5.10 backport of splitting page memcg
Huy Nguyen (1):
net/mlx5: Add back multicast stats for uplink representor
Ian Rogers (1):
perf synthetic events: Avoid write of uninitialized memory when generating PERF_RECORD_MMAP* records
Ido Schimmel (2):
psample: Fix user API breakage
drop_monitor: Perform cleanup upon probe registration failure
Imre Deak (1):
drm/i915: Fix the GT fence revocation runtime PM logic
Isaku Yamahata (1):
x86/mem_encrypt: Correct physical address calculation in __set_clr_pte_enc()
J. Bruce Fields (1):
nfs: we don't support removing system.nfs4_acl
Jakub Kicinski (1):
ipv6: weaken the v4mapped source check
Jan Beulich (1):
xen-blkback: don't leak persistent grants from xen_blkbk_map()
Jan Kara (1):
ext4: add reclaim checks to xattr code
Jean-Philippe Brucker (1):
libbpf: Fix BTF dump of pointer-to-array-of-struct
JeongHyeon Lee (1):
dm verity: fix DM_VERITY_OPTS_MAX value
Jesse Brandeburg (1):
igb: check timestamp validity
Jia-Ju Bai (6):
net: tehuti: fix error return code in bdx_probe()
net: intel: iavf: fix error return code of iavf_init_get_resources()
net: hisilicon: hns: fix error return code of hns_nic_clear_all_rx_fetch()
net: wan: fix error return code of uhdlc_init()
scsi: qedi: Fix error return code of qedi_alloc_global_queues()
scsi: mpt3sas: Fix error return code of mpt3sas_base_attach()
Jimmy Assarsson (1):
can: kvaser_pciefd: Always disable bus load reporting
Jiri Bohac (1):
net: check all name nodes in __dev_alloc_name
Jiri Slaby (1):
kbuild: dummy-tools: fix inverted tests for gcc
Joakim Zhang (1):
net: stmmac: fix dma physical address of descriptor when display ring
Johan Hovold (1):
net: cdc-phonet: fix data-interface release on probe failure
Johannes Berg (1):
mac80211: fix rate mask reset
Josh Poimboeuf (1):
static_call: Allow module use without exposing static_call_key
Julian Braha (1):
staging: rtl8192e: fix kconfig dependency on CRYPTO
Kenneth Feng (1):
drm/amd/pm: workaround for audio noise issue
Kumar Kartikeya Dwivedi (1):
libbpf: Use SOCK_CLOEXEC when opening the netlink socket
Li RongQing (1):
igb: avoid premature Rx buffer reuse
Louis Peens (3):
nfp: flower: fix unsupported pre_tunnel flows
nfp: flower: add ipv6 bit to pre_tunnel control message
nfp: flower: fix pre_tun mask id allocation
Lukasz Luba (1):
PM: EM: postpone creating the debugfs dir till fs_initcall
Lv Yunlong (2):
nvme-rdma: Fix a use after free in nvmet_rdma_write_data_done net/qlcnic: Fix a use after free in qlcnic_83xx_get_minidump_template
Maciej Fijalkowski (1):
veth: Store queue_mapping independently of XDP prog presence
Maor Dickman (1):
net/mlx5e: Don't match on Geneve options in case option masks are all zero
Marc Kleine-Budde (3):
can: isotp: isotp_setsockopt(): only allow to set low level TX flags for CAN-FD
can: isotp: TX-path: ensure that CAN frame flags are initialized
can: peak_usb: Revert "can: peak_usb: add forgotten supported devices"
Mark Brown (1):
kselftest: arm64: Fix exit code of sve-ptrace
Mark Pearson (1):
ALSA: hda: ignore invalid NHLT table
Mark Rutland (1):
arm64: stacktrace: don't trace arch_stack_walk()
Mark Tomlinson (3):
Revert "netfilter: x_tables: Switch synchronization to RCU"
netfilter: x_tables: Use correct memory barriers. Revert "netfilter: x_tables: Update remaining dereference to RCU"
Markus Theil (1):
mac80211: fix double free in ibss_leave
Martin Willi (1):
can: dev: Move device back to init netns on owning netns delete
Masahiro Yamada (1):
kbuild: add image_name to no-sync-config-targets
Matthew Wilcox (Oracle) (1):
fs/cachefiles: Remove wait_bit_key layout dependency
Maxim Mikityanskiy (1):
net/mlx5e: When changing XDP program without reset, take refs for XSK RQs
Mian Yousaf Kaukab (1):
netsec: restore phy power state after controller reset
Miaohe Lin (1):
hugetlb_cgroup: fix imbalanced css_get and css_put pair for shared mappings
Michael Braun (1):
gianfar: fix jumbo packets+napi+rx overrun crash
Michael Ellerman (1):
powerpc/4xx: Fix build errors from mfdcr()
Michael Walle (1):
net: phy: introduce phydev->port
Mikulas Patocka (1):
dm ioctl: fix out of bounds array access when no devices
Mimi Zohar (1):
integrity: double check iint_cache was initialized
Muhammad Husaini Zulkifli (2):
igc: Fix Pause Frame Advertising
igc: Fix Supported Pause Frame Link Setting
Namhyung Kim (1):
libbpf: Fix error path in bpf_object__elf_init()
Nick Desaulniers (1):
gcov: fix clang-11+ support
Nicolas Ferre (1):
ARM: dts: at91: sam9x60: fix mux-mask to match product's datasheet
Nirmoy Das (1):
drm/amdgpu: fb BO should be ttm_bo_type_device
Nitin Rawat (1):
scsi: ufs: ufs-qcom: Disable interrupt in reset path
Oliver Hartkopp (1):
can: isotp: tx-path: zero initialize outgoing CAN frames
Ondrej Mosnacek (2):
selinux: don't log MAC_POLICY_LOAD record on failed policy load
selinux: fix variable scope issue in live sidtab conversion
Ong Boon Leong (1):
net: phylink: Fix phylink_err() function name error in phylink_major_config
Pablo Neira Ayuso (2):
netfilter: nftables: report EOPNOTSUPP on unsupported flowtable flags
netfilter: nftables: allow to update flowtable flags
Paul Cercueil (2):
net: davicom: Use platform_get_irq_optional() irqchip/ingenic: Add support for the JZ4760
Paulo Alcantara (1):
cifs: change noisy error message to FYI
Pavel Begunkov (1):
io_uring: fix provide_buffers sign extension
Pavel Tatashin (1):
arm64: kdump: update ppos when reading elfcorehdr
Peter Zijlstra (4):
u64_stats,lockdep: Fix u64_stats_init() vs lockdep
static_call: Pull some static_call declarations to the type headers
static_call: Fix the module key fixup
static_call: Fix static_call_set_init()
Phillip Lougher (1):
squashfs: fix xattr id and id lookup sanity checks
Potnuri Bharat Teja (1):
RDMA/cxgb4: Fix adapter LE hash errors while destroying ipv6 listening server
Rafael J. Wysocki (2):
PM: runtime: Defer suspending suppliers
ACPI: scan: Rearrange memory allocation in acpi_device_add()
Rakesh Babu (1):
octeontx2-af: Formatting debugfs entry rsrc_alloc.
Rob Gardner (1):
sparc64: Fix opcode filtering in handling of no fault loads
Robert Hancock (3):
net: axienet: Properly handle PCS/PMA PHY for 1000BaseX mode
net: axienet: Fix probe error cleanup
net: phy: broadcom: Set proper 1000BaseX/SGMII interface mode for BCM54616S
Roger Pau Monne (2):
xen/x86: make XEN_BALLOON_MEMORY_HOTPLUG_LIMIT depend on MEMORY_HOTPLUG Revert "xen: fix p2m size in dom0 for disabled memory hotplug case"
Sabyrzhan Tasbolatov (1):
fs/ext4: fix integer overflow in s_log_groups_per_flex
Sasha Levin (1):
bpf: Don't do bpf_cgroup_storage_set() for kuprobe/tp programs
Sasha Neftin (1):
igc: reinit_locked() should be called with rtnl_lock
Sean Christopherson (2):
KVM: x86: Protect userspace MSR filter with SRCU, and set atomically-ish mm/mmu_notifiers: ensure range_end() is paired with range_start()
Sean Nyekjaer (1):
squashfs: fix inode lookup sanity checks
Sergei Trofimovich (2):
ia64: fix ia64_syscall_get_set_arguments() for break-based syscalls
ia64: fix ptrace(PTRACE_SYSCALL_INFO_EXIT) sign
Shannon Nelson (1):
ionic: linearize tso skb with too many frags
Shin'ichiro Kawasaki (1):
dm table: Fix zoned model check and zone sectors check
Shyam Prasad N (1):
cifs: Adjust key sizes and key generation routines for AES256 encryption
Stanislaw Kardach (1):
octeontx2-af: Modify default KEX profile to extract TX packet fields
Stephane Grosjean (1):
can: peak_usb: add forgotten supported devices
Steve French (1):
smb3: fix cached file size problems in duplicate extents (reflink)
Subbaraya Sundeep (1):
octeontx2-af: Remove TOS field from MKEX TX
Sudeep Holla (1):
cpufreq: blacklist Arm Vexpress platforms in cpufreq-dt-platdev
Sung Lee (1):
drm/amd/display: Revert dram_clock_change_latency for DCN2.1
Tal Lossos (1):
bpf: Change inode_storage's lookup_elem return value from NULL to -EBADF
Tariq Toukan (1):
net/mlx5e: RX, Mind the MPWQE gaps when calculating offsets
Thomas Gleixner (1):
locking/mutex: Fix non debug version of mutex_lock_io_nested()
Thomas Hebb (1):
z3fold: prevent reclaim/free race for headless pages
Timo Rothenpieler (1):
nfs: fix PNFS_FLEXFILE_LAYOUT Kconfig default
Tomer Tayar (1):
habanalabs: Call put_pid() when releasing control device
Tong Zhang (6):
atm: eni: dont release is never initialized
atm: lanai: dont run lanai_dev_close if not open
atm: uPD98402: fix incorrect allocation
atm: idt77252: fix null-ptr-dereference
can: c_can_pci: c_can_pci_remove(): fix use-after-free
can: c_can: move runtime PM enable/disable to c_can_platform
Tony Lindgren (2):
ARM: OMAP2+: Fix smartreflex init regression after dropping legacy data
soc: ti: omap-prm: Fix occasional abort on reset deassert for dra7 iva
Torin Cooper-Bennun (2):
can: m_can: m_can_do_rx_poll(): fix extraneous msg loss warning
can: m_can: m_can_rx_peripheral(): fix RX being blocked by errors
Vegard Nossum (1):
ACPICA: Always create namespace nodes using acpi_ns_create_node()
Vitaly Lifshits (1):
e1000e: add rtnl_lock() to e1000_reset_task
Vladimir Oltean (1):
net: bridge: don't notify switchdev for local FDB addresses
Wei Wang (1):
ipv6: fix suspecious RCU usage warning
Wei Yongjun (1):
umem: fix error return code in mm_pci_probe()
Xie He (1):
net: hdlc_x25: Prevent racing between "x25_close" and "x25_xmit"/"x25_rx"
Xunlei Pang (1):
blk-cgroup: Fix the recursive blkg rwstat
Yang Li (1):
gpiolib: acpi: Add missing IRQF_ONESHOT
Yinjun Zhang (1):
netfilter: flowtable: Make sure GC works periodically in idle system
Zhou Guanghui (2):
mm/memcg: rename mem_cgroup_split_huge_fixup to split_page_memcg and add nr_pages argument mm/memcg: set memcg when splitting page
Zqiang (1):
bpf: Fix umd memory leak in copy_process()
dillon min (1):
ARM: dts: imx6ull: fix ubi filesystem mount failed
satya priya (1):
regulator: qcom-rpmh: Correct the pmic5_hfsmps515 buck
wenxu (1):
net/sched: cls_flower: fix only mask bit check in the validate_ct_state