Linux 5.4.90
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.90 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/mach-omap2/omap_device.c | 8 - arch/arm64/kvm/sys_regs.c | 4 arch/x86/entry/entry_32.S | 3 arch/x86/kernel/acpi/wakeup_32.S | 7 arch/x86/kernel/cpu/resctrl/rdtgroup.c | 113 ++++++---------- arch/x86/kernel/ftrace_32.S | 3 arch/x86/kernel/head_32.S | 3 arch/x86/power/hibernate_asm_32.S | 6 arch/x86/realmode/rm/trampoline_32.S | 6 arch/x86/xen/xen-asm_32.S | 7 block/genhd.c | 9 - drivers/base/regmap/regmap-debugfs.c | 9 - drivers/block/Kconfig | 1 drivers/cpufreq/powernow-k8.c | 9 - drivers/crypto/chelsio/chtls/chtls_cm.c | 68 +++------ drivers/dma/dw-edma/dw-edma-core.c | 4 drivers/dma/mediatek/mtk-hsdma.c | 1 drivers/dma/xilinx/xilinx_dma.c | 11 + drivers/hid/wacom_sys.c | 35 ++++ drivers/i2c/busses/i2c-i801.c | 2 drivers/i2c/busses/i2c-sprd.c | 8 - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 26 ++- drivers/iommu/intel_irq_remapping.c | 2 drivers/lightnvm/Kconfig | 1 drivers/net/can/Kconfig | 1 drivers/net/can/m_can/m_can.c | 2 drivers/net/can/m_can/tcan4x5x.c | 26 --- drivers/net/dsa/lantiq_gswip.c | 7 drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h | 4 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 3 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 14 + drivers/net/ethernet/marvell/octeontx2/af/cgx.c | 14 + drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 24 ++- drivers/net/ethernet/mellanox/mlx5/core/en_fs.c | 3 drivers/net/ethernet/mellanox/mlx5/core/rdma.c | 2 drivers/net/ethernet/natsemi/macsonic.c | 12 + drivers/net/ethernet/natsemi/xtsonic.c | 7 drivers/net/ethernet/qlogic/Kconfig | 1 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 58 ++++++-- drivers/net/usb/cdc_ncm.c | 8 - drivers/net/wan/Kconfig | 1 drivers/net/wireless/ath/wil6210/Kconfig | 1 drivers/regulator/qcom-rpmh-regulator.c | 2 drivers/s390/net/qeth_l3_main.c | 2 drivers/spi/spi-stm32.c | 4 drivers/staging/exfat/exfat_super.c | 2 drivers/vfio/vfio_iommu_type1.c | 22 +++ include/asm-generic/vmlinux.lds.h | 5 include/uapi/linux/vfio.h | 15 ++ net/8021q/vlan.c | 3 net/core/skbuff.c | 6 net/ipv4/ip_output.c | 2 net/ipv4/ip_tunnel.c | 11 - net/ipv4/nexthop.c | 4 net/ipv6/ip6_fib.c | 5 tools/bpf/bpftool/net.c | 1 tools/testing/selftests/net/pmtu.sh | 71 +++++++++- 58 files changed, 453 insertions(+), 238 deletions(-)
Alan Maguire (1):
bpftool: Fix compilation failure for net.o with older glibc
Aleksander Jan Bajkowski (1):
net: dsa: lantiq_gswip: Exclude RMII from modes that report 1 GbE
Andreas Kemnade (1):
ARM: OMAP2+: omap_device: fix idling of devices during probe
Arnd Bergmann (6):
can: kvaser_pciefd: select CONFIG_CRC32
qed: select CONFIG_CRC32
wil6210: select CONFIG_CRC32
block: rsxx: select CONFIG_CRC32
lightnvm: select CONFIG_CRC32
wan: ds26522: select CONFIG_BITREVERSE
Aya Levin (1):
net/mlx5e: ethtool, Fix restriction of autoneg with 56G
Ayush Sawal (6):
chtls: Fix hardware tid leak
chtls: Remove invalid set_tcb call
chtls: Fix panic when route to peer not configured
chtls: Replace skb_dequeue with skb_peek
chtls: Added a check to avoid NULL pointer dereference
chtls: Fix chtls resources release sequence
Christophe JAILLET (2):
net/sonic: Fix some resource leaks in error handling paths
dmaengine: mediatek: mtk-hsdma: Fix a resource leak in the error handling path of the probe function
Chunyan Zhang (1):
i2c: sprd: use a specific timeout to avoid system hang up issue
Colin Ian King (2):
octeontx2-af: fix memory leak of lmac and lmac->name
cpufreq: powernow-k8: pass policy rather than use cpufreq_cpu_get()
Dan Carpenter (2):
dmaengine: dw-edma: Fix use after free in dw_edma_alloc_chunk()
regmap: debugfs: Fix a reversed if statement in regmap_debugfs_init()
Dinghao Liu (3):
iommu/intel: Fix memleak in intel_irq_remapping_alloc net/mlx5e: Fix memleak in mlx5e_create_l2_table_groups net/mlx5e: Fix two double free cases
Dmitry Baryshkov (1):
regulator: qcom-rpmh-regulator: correct hfsmps515 definition
Fenghua Yu (2):
x86/resctrl: Use an IPI instead of task_work_add() to update PQR_ASSOC MSR x86/resctrl: Don't move a task to the same resource group
Florian Westphal (2):
net: fix pmtu check in nopmtudisc mode
net: ip: always refragment ip defragmented packets
Greg Kroah-Hartman (1):
Linux 5.4.90
Hans de Goede (1):
i2c: i801: Fix the i2c-mux gpiod_lookup_table not being properly terminated
Ido Schimmel (2):
nexthop: Fix off-by-one error in error path
nexthop: Unlink nexthop group entry in error path
Jakub Kicinski (1):
net: vlan: avoid leaks on register_vlan_dev() failures
Jiri Slaby (1):
x86/asm/32: Add ENDs to some functions and relabel with SYM_CODE_*
Jouni K. Seppänen (1):
net: cdc_ncm: correct overhead in delayed_ndp_size
Julian Wiedmann (1):
s390/qeth: fix L2 header access in qeth_l3_osa_features_check()
Lorenzo Bianconi (1):
iio: imu: st_lsm6dsx: fix edge-trigger interrupts
Marc Kleine-Budde (2):
can: tcan4x5x: fix bittiming const, use common bittiming from m_can driver
can: m_can: m_can_class_unregister(): remove erroneous m_can_clk_stop()
Marc Zyngier (1):
KVM: arm64: Don't access PMCR_EL0 when no PMU is available
Mark Zhang (1):
net/mlx5: Use port_num 1 instead of 0 when delete a RoCE address
Matthew Rosato (1):
vfio iommu: Add dma available capability
Ming Lei (1):
block: fix use-after-free in disk_part_iter_next
Nick Desaulniers (1):
vmlinux.lds.h: Add PGO and AutoFDO input sections
Ping Cheng (1):
HID: wacom: Fix memory leakage caused by kfifo_alloc
Roman Guskov (1):
spi: stm32: FIFO threshold level - fix align packet size
Samuel Holland (2):
net: stmmac: dwmac-sun8i: Balance internal PHY resource references
net: stmmac: dwmac-sun8i: Balance internal PHY power
Sean Tranchetti (2):
net: ipv6: fib: flush exceptions when purging route
tools: selftests: add test for changing routes with PTMU exceptions
Shravya Kumbham (3):
dmaengine: xilinx_dma: check dma_async_device_register return value
dmaengine: xilinx_dma: fix incompatible param warning in _child_probe()
dmaengine: xilinx_dma: fix mixed_enum_type coverity warning
Stefan Chulski (1):
net: mvpp2: disable force link UP during port init procedure
Valdis Kletnieks (1):
exfat: Month timestamp metadata accidentally incremented
Vasily Averin (1):
net: drop bogus skb with CHECKSUM_PARTIAL and offset beyond end of trimmed packet
Xiaolei Wang (1):
regmap: debugfs: Fix a memory leak when calling regmap_attach_dev
Yonglong Liu (1):
net: hns3: fix a phy loopback fail issue
Yufeng Mo (1):
net: hns3: fix the number of queues actually used by ARQ
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 89 +SUBLEVEL = 90 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/mach-omap2/omap_device.c +5 -3
@@ -234,10 +234,12 @@ static int _omap_device_notifier_call(struct notifier_block *nb,break ;case BUS_NOTIFY_BIND_DRIVER : od =to_omap_device (pdev); -if (od && (od->_state ==OMAP_DEVICE_STATE_ENABLED ) && -pm_runtime_status_suspended (dev)) { +if (od) { od->_driver_status =BUS_NOTIFY_BIND_DRIVER ; -pm_runtime_set_active (dev); +if (od->_state ==OMAP_DEVICE_STATE_ENABLED && +pm_runtime_status_suspended (dev)) { +pm_runtime_set_active (dev); + } }break ;case BUS_NOTIFY_ADD_DEVICE :
arch/arm64/kvm/sys_regs.c +4 -0
@@ -625,6 +625,10 @@ static void reset_pmcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r) {u64 pmcr, val; +/* No PMU available, PMCR_EL0 may UNDEF... */ +if (!kvm_arm_support_pmu_v3 ()) +return ; + pmcr =read_sysreg (pmcr_el0);/* * Writable bits of PMCR_EL0 (ARMV8_PMU_PMCR_MASK) are reset to UNKNOWN
arch/x86/entry/entry_32.S +2 -1
@@ -869,9 +869,10 @@ GLOBAL(__begin_SYSENTER_singlestep_region) * Xen doesn't set %esp to be precisely what the normal SYSENTER * entry point expects, so fix it up before using the normal path. */ -ENTRY(xen_sysenter_target) +SYM_CODE_START(xen_sysenter_target) addl $5*4, %esp /* remove xen-provided frame */ jmp .Lsysenter_past_esp +SYM_CODE_END(xen_sysenter_target) #endif /*
arch/x86/kernel/acpi/wakeup_32.S +4 -3
@@ -9,8 +9,7 @@ .code32 ALIGN -ENTRY(wakeup_pmode_return) -wakeup_pmode_return: +SYM_CODE_START(wakeup_pmode_return) movw $__KERNEL_DS, %ax movw %ax, %ss movw %ax, %fs
@@ -39,6 +38,7 @@ wakeup_pmode_return: # jump to place where we left off movl saved_eip, %eax jmp *%eax +SYM_CODE_END(wakeup_pmode_return) bogus_magic: jmp bogus_magic
@@ -72,7 +72,7 @@ restore_registers: popfl ret -ENTRY(do_suspend_lowlevel) +SYM_CODE_START(do_suspend_lowlevel) call save_processor_state call save_registers pushl $3
@@ -87,6 +87,7 @@ ret_point: call restore_registers call restore_processor_state ret +SYM_CODE_END(do_suspend_lowlevel) .data ALIGN
arch/x86/kernel/cpu/resctrl/rdtgroup.c +49 -64
134 lines not on this page · raw message
arch/x86/kernel/ftrace_32.S +2 -1
@@ -89,7 +89,7 @@ WEAK(ftrace_stub) ret END(ftrace_caller) -ENTRY(ftrace_regs_caller) +SYM_CODE_START(ftrace_regs_caller) /* * We're here from an mcount/fentry CALL, and the stack frame looks like: *
@@ -163,6 +163,7 @@ GLOBAL(ftrace_regs_call) popl %eax jmp .Lftrace_ret +SYM_CODE_END(ftrace_regs_caller) #ifdef CONFIG_FUNCTION_GRAPH_TRACER ENTRY(ftrace_graph_caller)
arch/x86/kernel/head_32.S +2 -1
@@ -64,7 +64,7 @@ RESERVE_BRK(pagetables, INIT_MAP_SIZE) * can. */ __HEAD -ENTRY(startup_32) +SYM_CODE_START(startup_32) movl pa(initial_stack),%ecx /* test KEEP_SEGMENTS flag to see if the bootloader is asking
@@ -172,6 +172,7 @@ num_subarch_entries = (. - subarch_entries) / 4 #else jmp .Ldefault_entry #endif /* CONFIG_PARAVIRT */ +SYM_CODE_END(startup_32) #ifdef CONFIG_HOTPLUG_CPU /*
arch/x86/power/hibernate_asm_32.S +4 -2
@@ -35,7 +35,7 @@ ENTRY(swsusp_arch_suspend) ret ENDPROC(swsusp_arch_suspend) -ENTRY(restore_image) +SYM_CODE_START(restore_image) /* prepare to jump to the image kernel */ movl restore_jump_address, %ebx movl restore_cr3, %ebp
@@ -45,9 +45,10 @@ ENTRY(restore_image) /* jump to relocated restore code */ movl relocated_restore_code, %eax jmpl *%eax +SYM_CODE_END(restore_image) /* code below has been relocated to a safe page */ -ENTRY(core_restore_code) +SYM_CODE_START(core_restore_code) movl temp_pgt, %eax movl %eax, %cr3
@@ -77,6 +78,7 @@ copy_loop: done: jmpl *%ebx +SYM_CODE_END(core_restore_code) /* code below belongs to the image kernel */ .align PAGE_SIZE
arch/x86/realmode/rm/trampoline_32.S +4 -2
@@ -29,7 +29,7 @@ .code16 .balign PAGE_SIZE -ENTRY(trampoline_start) +SYM_CODE_START(trampoline_start) wbinvd # Needed for NUMA-Q should be harmless for others LJMPW_RM(1f)
@@ -54,11 +54,13 @@ ENTRY(trampoline_start) lmsw %dx # into protected mode ljmpl $__BOOT_CS, $pa_startup_32 +SYM_CODE_END(trampoline_start) .section ".text32","ax" .code32 -ENTRY(startup_32) # note: also used from wakeup_asm.S +SYM_CODE_START(startup_32) # note: also used from wakeup_asm.S jmp *%eax +SYM_CODE_END(startup_32) .bss .balign 8
arch/x86/xen/xen-asm_32.S +4 -3
@@ -56,7 +56,7 @@ _ASM_EXTABLE(1b,2b) .endm -ENTRY(xen_iret) +SYM_CODE_START(xen_iret) /* test eflags for special cases */ testl $(X86_EFLAGS_VM | XEN_EFLAGS_NMI), 8(%esp) jnz hyper_iret
@@ -122,6 +122,7 @@ xen_iret_end_crit: hyper_iret: /* put this out of line since its very rarely used */ jmp hypercall_page + __HYPERVISOR_iret * 32 +SYM_CODE_END(xen_iret) .globl xen_iret_start_crit, xen_iret_end_crit
@@ -152,7 +153,7 @@ hyper_iret: * The only caveat is that if the outer eax hasn't been restored yet (i.e. * it's still on stack), we need to restore its value here. */ -ENTRY(xen_iret_crit_fixup) +SYM_CODE_START(xen_iret_crit_fixup) /* * Paranoia: Make sure we're really coming from kernel space. * One could imagine a case where userspace jumps into the
@@ -179,4 +180,4 @@ ENTRY(xen_iret_crit_fixup) 2: ret -END(xen_iret_crit_fixup) +SYM_CODE_END(xen_iret_crit_fixup)
block/genhd.c +6 -3
@@ -222,14 +222,17 @@ struct hd_struct *disk_part_iter_next(struct disk_part_iter *piter) part =rcu_dereference (ptbl->part[piter->idx]);if (!part)continue ; +get_device (part_to_dev (part)); + piter->part = part;if (!part_nr_sects_read (part) && !(piter->flags &DISK_PITER_INCL_EMPTY ) && !(piter->flags &DISK_PITER_INCL_EMPTY_PART0 && - piter->idx ==0 )) + piter->idx ==0 )) { +put_device (part_to_dev (part)); + piter->part =NULL ;continue ; + } -get_device (part_to_dev (part)); - piter->part = part; piter->idx += inc;break ; }
drivers/base/regmap/regmap-debugfs.c +7 -2
@@ -583,8 +583,12 @@ void regmap_debugfs_init(struct regmap *map, const char *name) devname =dev_name (map->dev);if (name) { - map->debugfs_name =kasprintf (GFP_KERNEL ,"%s-%s" , +if (!map->debugfs_name) { + map->debugfs_name =kasprintf (GFP_KERNEL ,"%s-%s" , devname, name); +if (!map->debugfs_name) +return ; + } name = map->debugfs_name; }else { name = devname;
@@ -592,9 +596,10 @@ void regmap_debugfs_init(struct regmap *map, const char *name)if (!strcmp (name,"dummy" )) {kfree (map->debugfs_name); - map->debugfs_name =kasprintf (GFP_KERNEL ,"dummy%d" , dummy_index); +if (!map->debugfs_name) +return ; name = map->debugfs_name; dummy_index++; }
drivers/block/Kconfig +1 -0
@@ -461,6 +461,7 @@ config BLK_DEV_RBD config BLK_DEV_RSXX tristate "IBM Flash Adapter 900GB Full Height PCIe Device Driver" depends on PCI + select CRC32 help Device driver for IBM's high speed PCIe SSD storage device: Flash Adapter 900GB Full Height.
drivers/cpufreq/powernow-k8.c +3 -6
@@ -878,9 +878,9 @@ static int get_transition_latency(struct powernow_k8_data *data)/* Take a frequency, and issue the fid/vid transition command */ static int transition_frequency_fidvid (struct powernow_k8_data *data, -unsigned int index) +unsigned int index, +struct cpufreq_policy *policy) { -struct cpufreq_policy *policy;u32 fid =0 ;u32 vid =0 ;int res;
@@ -912,9 +912,6 @@ static int transition_frequency_fidvid(struct powernow_k8_data *data, freqs.old =find_khz_freq_from_fid (data->currfid); freqs.new =find_khz_freq_from_fid (fid); - policy =cpufreq_cpu_get (smp_processor_id ()); -cpufreq_cpu_put (policy); -cpufreq_freq_transition_begin (policy, &freqs); res =transition_fid_vid (data, fid, vid);cpufreq_freq_transition_end (policy, &freqs, res);
@@ -969,7 +966,7 @@ static long powernowk8_target_fn(void *arg)powernow_k8_acpi_pst_values (data, newstate); - ret =transition_frequency_fidvid (data, newstate); + ret =transition_frequency_fidvid (data, newstate, pol);if (ret) {pr_err ("transition frequency failed\n" );
drivers/crypto/chelsio/chtls/chtls_cm.c +23 -45
147 lines not on this page · raw message
drivers/dma/dw-edma/dw-edma-core.c +2 -2
@@ -85,12 +85,12 @@ static struct dw_edma_chunk *dw_edma_alloc_chunk(struct dw_edma_desc *desc)if (desc->chunk) {/* Create and add new element into the linked list */ - desc->chunks_alloc++; -list_add_tail (&chunk->list, &desc->chunk->list);if (!dw_edma_alloc_burst (chunk)) {kfree (chunk);return NULL ; } + desc->chunks_alloc++; +list_add_tail (&chunk->list, &desc->chunk->list); }else {/* List head */ chunk->burst =NULL ;
drivers/dma/mediatek/mtk-hsdma.c +1 -0
@@ -1007,6 +1007,7 @@ static int mtk_hsdma_probe(struct platform_device *pdev)return 0 ; err_free: +mtk_hsdma_hw_deinit (hsdma);of_dma_controller_free (pdev->dev.of_node); err_unregister:dma_async_device_unregister (dd);
drivers/dma/xilinx/xilinx_dma.c +8 -3
@@ -2431,7 +2431,7 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev, has_dre = false;if (!has_dre) - xdev->common.copy_align =fls (width -1 ); + xdev->common.copy_align = (enum dmaengine_alignment )fls (width -1 ); if (of_device_is_compatible(node, "xlnx,axi-vdma-mm2s-channel") || of_device_is_compatible(node, "xlnx,axi-dma-mm2s-channel") ||
@@ -2543,7 +2543,8 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev,static int xilinx_dma_child_probe (struct xilinx_dma_device *xdev,struct device_node *node) { -int ret, i, nr_channels =1 ; +int ret, i; +u32 nr_channels =1 ; ret =of_property_read_u32 (node,"dma-channels" , &nr_channels);if ((ret <0 ) && xdev->mcdma)
@@ -2742,7 +2743,11 @@ static int xilinx_dma_probe(struct platform_device *pdev) }/* Register the DMA engine with the core */ -dma_async_device_register (&xdev->common); + err =dma_async_device_register (&xdev->common); +if (err) { +dev_err (xdev->dev,"failed to register the dma device\n" ); + goto error; + } err =of_dma_controller_register (node, of_dma_xilinx_xlate, xdev);
drivers/hid/wacom_sys.c +32 -3
@@ -1270,6 +1270,37 @@ static int wacom_devm_sysfs_create_group(struct wacom *wacom, group); } +static void wacom_devm_kfifo_release (struct device *dev,void *res) +{ +struct kfifo_rec_ptr_2 *devres = res; + +kfifo_free (devres); +} + +static int wacom_devm_kfifo_alloc (struct wacom *wacom) +{ +struct wacom_wac *wacom_wac = &wacom->wacom_wac; +struct kfifo_rec_ptr_2 *pen_fifo = &wacom_wac->pen_fifo; +int error; + + pen_fifo =devres_alloc (wacom_devm_kfifo_release, +sizeof (struct kfifo_rec_ptr_2 ), +GFP_KERNEL ); + +if (!pen_fifo) +return -ENOMEM ; + + error =kfifo_alloc (pen_fifo,WACOM_PKGLEN_MAX ,GFP_KERNEL ); +if (error) { +devres_free (pen_fifo); +return error; + } + +devres_add (&wacom->hdev->dev, pen_fifo); + +return 0 ; +} +enum led_brightness wacom_leds_brightness_get (struct wacom_led *led) {struct wacom *wacom = led->wacom;
@@ -2724,7 +2755,7 @@ static int wacom_probe(struct hid_device *hdev,if (features->check_for_hid_type && features->hid_type != hdev->type)return -ENODEV ; - error =kfifo_alloc (&wacom_wac->pen_fifo,WACOM_PKGLEN_MAX ,GFP_KERNEL ); + error =wacom_devm_kfifo_alloc (wacom);if (error)return error;
@@ -2786,8 +2817,6 @@ static void wacom_remove(struct hid_device *hdev)if (wacom->wacom_wac.features.type !=REMOTE )wacom_release_resources (wacom); - -kfifo_free (&wacom_wac->pen_fifo); }#ifdef CONFIG_PM
drivers/i2c/busses/i2c-i801.c +1 -1
@@ -1424,7 +1424,7 @@ static int i801_add_mux(struct i801_priv *priv)/* Register GPIO descriptor lookup table */ lookup =devm_kzalloc (dev, -struct_size (lookup, table, mux_config->n_gpios), +struct_size (lookup, table, mux_config->n_gpios +1 ),GFP_KERNEL );if (!lookup)return -ENOMEM ;
drivers/i2c/busses/i2c-sprd.c +7 -1
@@ -72,6 +72,8 @@/* timeout (ms) for pm runtime autosuspend */ #define SPRD_I2C_PM_TIMEOUT 1000 +/* timeout (ms) for transfer message */ +#define I2C_XFER_TIMEOUT 1000/* SPRD i2c data structure */ struct sprd_i2c {
@@ -244,6 +246,7 @@ static int sprd_i2c_handle_msg(struct i2c_adapter *i2c_adap, struct i2c_msg *msg, bool is_last_msg) {struct sprd_i2c *i2c_dev = i2c_adap->algo_data; +unsigned long time_left; i2c_dev->msg = msg; i2c_dev->buf = msg->buf;
@@ -273,7 +276,10 @@ static int sprd_i2c_handle_msg(struct i2c_adapter *i2c_adap,sprd_i2c_opt_start (i2c_dev); -wait_for_completion (&i2c_dev->complete); + time_left =wait_for_completion_timeout (&i2c_dev->complete, +msecs_to_jiffies (I2C_XFER_TIMEOUT )); +if (!time_left) +return -ETIMEDOUT ;return i2c_dev->err; }
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +21 -5
@@ -664,13 +664,29 @@ static irqreturn_t st_lsm6dsx_handler_irq(int irq, void *private)static irqreturn_t st_lsm6dsx_handler_thread (int irq,void *private) {struct st_lsm6dsx_hw *hw = private; -int count; +int fifo_len =0 , len; -mutex_lock (&hw->fifo_lock); - count = hw->settings->fifo_ops.read_fifo (hw); -mutex_unlock (&hw->fifo_lock); +/* +* If we are using edge IRQs, new samples can arrive while +* processing current interrupt since there are no hw +* guarantees the irq line stays "low" long enough to properly +* detect the new interrupt. In this case the new sample will +* be missed. +* Polling FIFO status register allow us to read new +* samples even if the interrupt arrives while processing +* previous data and the timeslot where the line is "low" is +* too short to be properly detected. +*/ +do { +mutex_lock (&hw->fifo_lock); + len = hw->settings->fifo_ops.read_fifo (hw); +mutex_unlock (&hw->fifo_lock); + +if (len >0 ) + fifo_len += len; + }while (len >0 ); -return count ?IRQ_HANDLED :IRQ_NONE ; +return fifo_len ?IRQ_HANDLED :IRQ_NONE ; }static int st_lsm6dsx_buffer_preenable (struct iio_dev *iio_dev)
drivers/iommu/intel_irq_remapping.c +2 -0
@@ -1400,6 +1400,8 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain, irq_data =irq_domain_get_irq_data (domain, virq + i); irq_cfg =irqd_cfg (irq_data);if (!irq_data || !irq_cfg) { +if (!i) +kfree (data); ret = -EINVAL ; goto out_free_data; }
drivers/lightnvm/Kconfig +1 -0
@@ -19,6 +19,7 @@ if NVM config NVM_PBLK tristate "Physical Block Device Open-Channel SSD target" + select CRC32 help Allows an open-channel SSD to be exposed as a block device to the host. The target assumes the device exposes raw flash and must be
drivers/net/can/Kconfig +1 -0
@@ -123,6 +123,7 @@ config CAN_JANZ_ICAN3 config CAN_KVASER_PCIEFD depends on PCI tristate "Kvaser PCIe FD cards" + select CRC32 help This is a driver for the Kvaser PCI Express CAN FD family.
drivers/net/can/m_can/m_can.c +0 -2
@@ -1868,8 +1868,6 @@ void m_can_class_unregister(struct m_can_classdev *m_can_dev) {unregister_candev (m_can_dev->net); -m_can_clk_stop (m_can_dev); -free_candev (m_can_dev->net); }EXPORT_SYMBOL_GPL (m_can_class_unregister);
drivers/net/can/m_can/tcan4x5x.c +0 -26
@@ -126,30 +126,6 @@ struct tcan4x5x_priv {int reg_offset; }; -static struct can_bittiming_const tcan4x5x_bittiming_const = { - .name =DEVICE_NAME , - .tseg1_min =2 , - .tseg1_max =31 , - .tseg2_min =2 , - .tseg2_max =16 , - .sjw_max =16 , - .brp_min =1 , - .brp_max =32 , - .brp_inc =1 , -}; - -static struct can_bittiming_const tcan4x5x_data_bittiming_const = { - .name =DEVICE_NAME , - .tseg1_min =1 , - .tseg1_max =32 , - .tseg2_min =1 , - .tseg2_max =16 , - .sjw_max =16 , - .brp_min =1 , - .brp_max =32 , - .brp_inc =1 , -}; -static void tcan4x5x_check_wake (struct tcan4x5x_priv *priv) {int wake_state =0 ;
@@ -449,8 +425,6 @@ static int tcan4x5x_can_probe(struct spi_device *spi) mcan_class->dev = &spi->dev; mcan_class->ops = &tcan4x5x_ops; mcan_class->is_peripheral = true; - mcan_class->bit_timing = &tcan4x5x_bittiming_const; - mcan_class->data_timing = &tcan4x5x_data_bittiming_const; mcan_class->net->irq = spi->irq;spi_set_drvdata (spi, priv);
drivers/net/dsa/lantiq_gswip.c +4 -3
@@ -1419,11 +1419,12 @@ static void gswip_phylink_validate(struct dsa_switch *ds, int port,phylink_set (mask, Pause);phylink_set (mask, Asym_Pause); -/* With the exclusion of MII and Reverse MII, we support Gigabit, -* including Half duplex +/* With the exclusion of MII, Reverse MII and Reduced MII, we +* support Gigabit, including Half duplex */ if (state->interface !=PHY_INTERFACE_MODE_MII && - state->interface !=PHY_INTERFACE_MODE_REVMII ) { + state->interface !=PHY_INTERFACE_MODE_REVMII && + state->interface !=PHY_INTERFACE_MODE_RMII ) { phylink_set(mask, 1000baseT_Full); phylink_set(mask, 1000baseT_Half); }
drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h +2 -2
@@ -123,7 +123,7 @@ struct hclgevf_mbx_arq_ring {#define hclge_mbx_ring_ptr_move_crq (crq) \ (crq->next_to_use = (crq->next_to_use + 1) % crq->desc_num)#define hclge_mbx_tail_ptr_move_arq (arq) \ - (arq.tail = (arq.tail + 1) % HCLGE_MBX_MAX_ARQ_MSG_SIZE) + (arq.tail = (arq.tail + 1) % HCLGE_MBX_MAX_ARQ_MSG_NUM)#define hclge_mbx_head_ptr_move_arq (arq) \ - (arq.head = (arq.head + 1) % HCLGE_MBX_MAX_ARQ_MSG_SIZE) + (arq.head = (arq.head + 1) % HCLGE_MBX_MAX_ARQ_MSG_NUM)#endif
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +2 -1
@@ -746,7 +746,8 @@ static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset) handle->flags |=HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK ; handle->flags |=HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK ; -if (hdev->hw.mac.phydev) { +if (hdev->hw.mac.phydev && hdev->hw.mac.phydev->drv && + hdev->hw.mac.phydev->drv->set_loopback) { count +=1 ; handle->flags |=HNAE3_SUPPORT_PHY_LOOPBACK ; }
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +13 -1
@@ -4545,7 +4545,7 @@ static int mvpp2_port_init(struct mvpp2_port *port)struct mvpp2 *priv = port->priv;struct mvpp2_txq_pcpu *txq_pcpu;unsigned int thread; -int queue, err; +int queue, err, val;/* Checks for hardware constraints */ if (port->first_rxq + port->nrxqs >
@@ -4559,6 +4559,18 @@ static int mvpp2_port_init(struct mvpp2_port *port)mvpp2_egress_disable (port);mvpp2_port_disable (port); +if (mvpp2_is_xlg (port->phy_interface)) { + val =readl (port->base +MVPP22_XLG_CTRL0_REG ); + val &= ~MVPP22_XLG_CTRL0_FORCE_LINK_PASS ; + val |=MVPP22_XLG_CTRL0_FORCE_LINK_DOWN ; +writel (val, port->base +MVPP22_XLG_CTRL0_REG ); + }else { + val =readl (port->base +MVPP2_GMAC_AUTONEG_CONFIG ); + val &= ~MVPP2_GMAC_FORCE_LINK_PASS ; + val |=MVPP2_GMAC_FORCE_LINK_DOWN ; +writel (val, port->base +MVPP2_GMAC_AUTONEG_CONFIG ); + } + port->tx_time_coal =MVPP2_TXDONE_COAL_USEC ; port->txqs = devm_kcalloc(dev, port->ntxqs, sizeof(*port->txqs),
drivers/net/ethernet/marvell/octeontx2/af/cgx.c +11 -3
@@ -725,8 +725,10 @@ static int cgx_lmac_init(struct cgx *cgx)if (!lmac)return -ENOMEM ; lmac->name =kcalloc (1 ,sizeof ("cgx_fwi_xxx_yyy" ),GFP_KERNEL ); -if (!lmac->name) -return -ENOMEM ; +if (!lmac->name) { + err = -ENOMEM ; + goto err_lmac_free; + }sprintf (lmac->name,"cgx_fwi_%d_%d" , cgx->cgx_id, i); lmac->lmac_id = i; lmac->cgx = cgx;
@@ -737,7 +739,7 @@ static int cgx_lmac_init(struct cgx *cgx) CGX_LMAC_FWI + i * 9), cgx_fwi_event_handler, 0, lmac->name, lmac);if (err) -return err; + goto err_irq;/* Enable interrupt */ cgx_write(cgx, lmac->lmac_id, CGXX_CMRX_INT_ENA_W1S,
@@ -748,6 +750,12 @@ static int cgx_lmac_init(struct cgx *cgx) }return cgx_lmac_verify_fwi_version (cgx); + +err_irq: +kfree (lmac->name); +err_lmac_free: +kfree (lmac); +return err; }static int cgx_lmac_exit (struct cgx *cgx)
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +18 -6
@@ -976,6 +976,22 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev,return mlx5e_ethtool_get_link_ksettings (priv, link_ksettings); } +static int mlx5e_speed_validate (struct net_device *netdev,bool ext, +const unsigned long link_modes,u8 autoneg) +{ +/* Extended link-mode has no speed limitations. */ +if (ext) +return 0 ; + +if ((link_modes &MLX5E_PROT_MASK (MLX5E_56GBASE_R4 )) && + autoneg !=AUTONEG_ENABLE ) { +netdev_err (netdev,"%s: 56G link speed requires autoneg enabled\n" , + __func__); +return -EINVAL ; + } +return 0 ; +} +static u32 mlx5e_ethtool2ptys_adver_link (const unsigned long *link_modes) {u32 i, ptys_modes =0 ;
@@ -1068,13 +1084,9 @@ int mlx5e_ethtool_set_link_ksettings(struct mlx5e_priv *priv, link_modes = autoneg ==AUTONEG_ENABLE ?ethtool2ptys_adver_func (adver) :mlx5e_port_speed2linkmodes (mdev, speed, !ext); -if ((link_modes &MLX5E_PROT_MASK (MLX5E_56GBASE_R4 )) && - autoneg !=AUTONEG_ENABLE ) { -netdev_err (priv->netdev,"%s: 56G link speed requires autoneg enabled\n" , - __func__); - err = -EINVAL ; + err =mlx5e_speed_validate (priv->netdev, ext, link_modes, autoneg); +if (err) goto out; - } link_modes = link_modes & eproto.cap;if (!link_modes) {
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c +3 -0
@@ -927,6 +927,7 @@ static int mlx5e_create_ttc_table_groups(struct mlx5e_ttc_table *ttc, in =kvzalloc (inlen,GFP_KERNEL );if (!in) {kfree (ft->g); + ft->g =NULL ;return -ENOMEM ; }
@@ -1067,6 +1068,7 @@ static int mlx5e_create_inner_ttc_table_groups(struct mlx5e_ttc_table *ttc) in =kvzalloc (inlen,GFP_KERNEL );if (!in) {kfree (ft->g); + ft->g =NULL ;return -ENOMEM ; }
@@ -1346,6 +1348,7 @@ static int mlx5e_create_l2_table_groups(struct mlx5e_l2_table *l2_table) ft->g[ft->num_groups] =NULL ;mlx5e_destroy_groups (ft);kvfree (in); +kfree (ft->g);return err; }
drivers/net/ethernet/mellanox/mlx5/core/rdma.c +1 -1
@@ -116,7 +116,7 @@ static int mlx5_rdma_enable_roce_steering(struct mlx5_core_dev *dev)static void mlx5_rdma_del_roce_addr (struct mlx5_core_dev *dev) {mlx5_core_roce_gid_set (dev,0 ,0 ,0 , -NULL ,NULL , false,0 ,0 ); +NULL ,NULL , false,0 ,1 ); }static void mlx5_rdma_make_default_gid (struct mlx5_core_dev *dev,union ib_gid *gid)
drivers/net/ethernet/natsemi/macsonic.c +10 -2
@@ -540,10 +540,14 @@ static int mac_sonic_platform_probe(struct platform_device *pdev) err =register_netdev (dev);if (err) - goto out; + goto undo_probe;return 0 ; +undo_probe: +dma_free_coherent (lp->device, +SIZEOF_SONIC_DESC *SONIC_BUS_SCALE (lp->dma_bitmode), + lp->descriptors, lp->descriptors_laddr); out:free_netdev (dev);
@@ -618,12 +622,16 @@ static int mac_sonic_nubus_probe(struct nubus_board *board) err =register_netdev (ndev);if (err) - goto out; + goto undo_probe;nubus_set_drvdata (board, ndev);return 0 ; +undo_probe: +dma_free_coherent (lp->device, +SIZEOF_SONIC_DESC *SONIC_BUS_SCALE (lp->dma_bitmode), + lp->descriptors, lp->descriptors_laddr); out:free_netdev (ndev);return err;
drivers/net/ethernet/natsemi/xtsonic.c +5 -2
@@ -265,11 +265,14 @@ int xtsonic_probe(struct platform_device *pdev)sonic_msg_init (dev);if ((err =register_netdev (dev))) - goto out1; + goto undo_probe1;return 0 ; -out1: +undo_probe1: +dma_free_coherent (lp->device, +SIZEOF_SONIC_DESC *SONIC_BUS_SCALE (lp->dma_bitmode), + lp->descriptors, lp->descriptors_laddr);release_region (dev->base_addr,SONIC_MEM_SIZE ); out:free_netdev (dev);
drivers/net/ethernet/qlogic/Kconfig +1 -0
@@ -78,6 +78,7 @@ config QED depends on PCI select ZLIB_INFLATE select CRC8 + select CRC32 select NET_DEVLINK ---help--- This enables the support for ...
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +44 -14
140 lines not on this page · raw message
drivers/net/usb/cdc_ncm.c +6 -2
@@ -1126,7 +1126,10 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)* accordingly. Otherwise, we should check here. */ if (ctx->drvflags &CDC_NCM_FLAG_NDP_TO_END ) - delayed_ndp_size =ALIGN (ctx->max_ndp_size, ctx->tx_ndp_modulus); + delayed_ndp_size = ctx->max_ndp_size + +max_t (u32, + ctx->tx_ndp_modulus, + ctx->tx_modulus + ctx->tx_remainder) -1 ;else delayed_ndp_size =0 ;
@@ -1307,7 +1310,8 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)if (!(dev->driver_info->flags &FLAG_SEND_ZLP ) && skb_out->len > ctx->min_tx_pkt) { padding_count = ctx->tx_curr_size - skb_out->len; -skb_put_zero (skb_out, padding_count); +if (!WARN_ON (padding_count > ctx->tx_curr_size)) +skb_put_zero (skb_out, padding_count); }else if (skb_out->len < ctx->tx_curr_size && (skb_out->len % dev->maxpacket) ==0 ) {skb_put_u8 (skb_out,0 );/* force short packet */
drivers/net/wan/Kconfig +1 -0
@@ -282,6 +282,7 @@ config SLIC_DS26522 tristate "Slic Maxim ds26522 card support" depends on SPI depends on FSL_SOC || ARCH_MXC || ARCH_LAYERSCAPE || COMPILE_TEST + select BITREVERSE help This module initializes and configures the slic maxim card in T1 or E1 mode.
drivers/net/wireless/ath/wil6210/Kconfig +1 -0
@@ -2,6 +2,7 @@ config WIL6210 tristate "Wilocity 60g WiFi card wil6210 support" select WANT_DEV_COREDUMP + select CRC32 depends on CFG80211 depends on PCI default n
drivers/regulator/qcom-rpmh-regulator.c +1 -1
@@ -726,7 +726,7 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = {static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = { .regulator_type =VRM , .ops = &rpmh_regulator_vrm_ops, - .voltage_range =REGULATOR_LINEAR_RANGE (2800000 ,0 ,4 ,1600 ), + .voltage_range =REGULATOR_LINEAR_RANGE (2800000 ,0 ,4 ,16000 ), .n_voltages =5 , .pmic_mode_map = pmic_mode_map_pmic5_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
drivers/s390/net/qeth_l3_main.c +1 -1
@@ -2114,7 +2114,7 @@ static netdev_features_t qeth_l3_osa_features_check(struct sk_buff *skb, struct net_device *dev, netdev_features_t features) { - if (qeth_get_ip_version(skb) != 4) + if (vlan_get_protocol(skb) != htons(ETH_P_IP)) features &= ~NETIF_F_HW_VLAN_CTAG_TX;return qeth_features_check (skb, dev, features); }
drivers/spi/spi-stm32.c +2 -2
@@ -494,9 +494,9 @@ static u32 stm32h7_spi_prepare_fthlv(struct stm32_spi *spi, u32 xfer_len)/* align packet size with data registers access */ if (spi->cur_bpw >8 ) - fthlv -= (fthlv %2 );/* multiple of 2 */ + fthlv += (fthlv %2 ) ?1 :0 ;else - fthlv -= (fthlv %4 );/* multiple of 4 */ + fthlv += (fthlv %4 ) ? (4 - (fthlv %4 )) :0 ;if (!fthlv) fthlv =1 ;
drivers/staging/exfat/exfat_super.c +1 -1
@@ -59,7 +59,7 @@ static void exfat_write_super(struct super_block *sb);/* Convert a FAT time/date pair to a UNIX date (seconds since 1 1 70). */ static void exfat_time_fat2unix (struct timespec64 *ts,struct date_time_t *tp) { - ts->tv_sec =mktime64 (tp->Year +1980 , tp->Month +1 , tp->Day, + ts->tv_sec =mktime64 (tp->Year +1980 , tp->Month, tp->Day, tp->Hour, tp->Minute, tp->Second); ts->tv_nsec = tp->MilliSecond *NSEC_PER_MSEC ;
drivers/vfio/vfio_iommu_type1.c +22 -0
@@ -2303,6 +2303,24 @@ static int vfio_iommu_iova_build_caps(struct vfio_iommu *iommu,return ret; } +static int vfio_iommu_dma_avail_build_caps (struct vfio_iommu *iommu, +struct vfio_info_cap *caps) +{ +struct vfio_iommu_type1_info_dma_avail cap_dma_avail; +int ret; + +mutex_lock (&iommu->lock); + cap_dma_avail.header.id =VFIO_IOMMU_TYPE1_INFO_DMA_AVAIL ; + cap_dma_avail.header.version =1 ; + + cap_dma_avail.avail = iommu->dma_avail; + + ret =vfio_info_add_capability (caps, &cap_dma_avail.header, +sizeof (cap_dma_avail)); +mutex_unlock (&iommu->lock); +return ret; +} +static long vfio_iommu_type1_ioctl (void *iommu_data,unsigned int cmd,unsigned long arg) {
@@ -2349,6 +2367,10 @@ static long vfio_iommu_type1_ioctl(void *iommu_data, info.iova_pgsizes =vfio_pgsize_bitmap (iommu); ret =vfio_iommu_iova_build_caps (iommu, &caps); + +if (!ret) + ret =vfio_iommu_dma_avail_build_caps (iommu, &caps); +if (ret)return ret;
include/asm-generic/vmlinux.lds.h +4 -1
@@ -520,7 +520,10 @@*/ #define TEXT_TEXT \ ALIGN_FUNCTION(); \ - *(.text.hot TEXT_MAIN .text.fixup .text.unlikely) \ + *(.text.hot .text.hot.*) \ + *(TEXT_MAIN .text.fixup) \ + *(.text.unlikely .text.unlikely.*) \ + *(.text.unknown .text.unknown.*) \ *(.text..refcount) \ *(.ref.text) \ MEM_KEEP(init.text*) \
include/uapi/linux/vfio.h +15 -0
@@ -748,6 +748,21 @@ struct vfio_iommu_type1_info_cap_iova_range {struct vfio_iova_range iova_ranges[]; }; +/* +* The DMA available capability allows to report the current number of +* simultaneously outstanding DMA mappings that are allowed. +* +* The structure below defines version 1 of this capability. +* +* avail: specifies the current number of outstanding DMA mappings allowed. +*/ +#define VFIO_IOMMU_TYPE1_INFO_DMA_AVAIL 3 + +struct vfio_iommu_type1_info_dma_avail { +struct vfio_info_cap_header header; +__u32 avail; +}; +#define VFIO_IOMMU_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)/**
net/8021q/vlan.c +2 -1
@@ -280,7 +280,8 @@ static int register_vlan_device(struct net_device *real_dev, u16 vlan_id)return 0 ; out_free_newdev: -if (new_dev->reg_state ==NETREG_UNINITIALIZED ) +if (new_dev->reg_state ==NETREG_UNINITIALIZED || + new_dev->reg_state ==NETREG_UNREGISTERED )free_netdev (new_dev);return err; }
net/core/skbuff.c +6 -0
@@ -2017,6 +2017,12 @@ int pskb_trim_rcsum_slow(struct sk_buff *skb, unsigned int len) skb->csum =csum_block_sub (skb->csum,skb_checksum (skb, len, delta,0 ), len); + }else if (skb->ip_summed ==CHECKSUM_PARTIAL ) { +int hdlen = (len >skb_headlen (skb)) ?skb_headlen (skb) : len; +int offset =skb_checksum_start_offset (skb) + skb->csum_offset; + +if (offset +sizeof (__sum16) > hdlen) +return -EINVAL ; }return __pskb_trim (skb, len); }
net/ipv4/ip_output.c +1 -1
@@ -303,7 +303,7 @@ static int __ip_finish_output(struct net *net, struct sock *sk, struct sk_buff *if (skb_is_gso (skb))return ip_finish_output_gso (net, sk, skb, mtu); -if (skb->len > mtu || (IPCB (skb)->flags &IPSKB_FRAG_PMTU )) +if (skb->len > mtu ||IPCB (skb)->frag_max_size)return ip_fragment (net, sk, skb, mtu, ip_finish_output2);return ip_finish_output2 (net, sk, skb);
net/ipv4/ip_tunnel.c +5 -6
@@ -765,8 +765,11 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, goto tx_error; } -if (tnl_update_pmtu (dev, skb, rt, tnl_params->frag_off, inner_iph, -0 ,0 , false)) { + df = tnl_params->frag_off; +if (skb->protocol ==htons (ETH_P_IP ) && !tunnel->ignore_df) + df |= (inner_iph->frag_off &htons (IP_DF )); + +if (tnl_update_pmtu (dev, skb, rt, df, inner_iph,0 ,0 , false)) {ip_rt_put (rt); goto tx_error; }
@@ -794,10 +797,6 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, ttl =ip4_dst_hoplimit (&rt->dst); } - df = tnl_params->frag_off; -if (skb->protocol ==htons (ETH_P_IP ) && !tunnel->ignore_df) - df |= (inner_iph->frag_off&htons (IP_DF )); - max_headroom =LL_RESERVED_SPACE (rt->dst.dev) +sizeof (struct iphdr ) + rt->dst.header_len +ip_encap_hlen (&tunnel->encap);if (max_headroom > dev->needed_headroom)
net/ipv4/nexthop.c +3 -1
@@ -1157,8 +1157,10 @@ static struct nexthop *nexthop_create_group(struct net *net,return nh; out_no_nh: -for (; i >=0 ; --i) +for (i--; i >=0 ; --i) { +list_del (&nhg->nh_entries[i].nh_list);nexthop_put (nhg->nh_entries[i].nh); + }kfree (nhg->spare);kfree (nhg);
net/ipv6/ip6_fib.c +2 -3
@@ -973,6 +973,8 @@ static void fib6_purge_rt(struct fib6_info *rt, struct fib6_node *fn, {struct fib6_table *table = rt->fib6_table; +/* Flush all cached dst in exception table */ +rt6_flush_exceptions (rt);fib6_drop_pcpu_from (rt, table);if (rt->nh && !list_empty (&rt->nh_list))
@@ -1839,9 +1841,6 @@ static void fib6_del_route(struct fib6_table *table, struct fib6_node *fn, net->ipv6.rt6_stats->fib_rt_entries--; net->ipv6.rt6_stats->fib_discarded_routes++; -/* Flush all cached dst in exception table */ -rt6_flush_exceptions (rt); -/* Reset round-robin state, if necessary */ if (rcu_access_pointer (fn->rr_ptr) == rt) fn->rr_ptr =NULL ;
tools/bpf/bpftool/net.c +0 -1
@@ -9,7 +9,6 @@#include <unistd.h> #include <libbpf.h> #include <net/if.h> -#include <linux/if.h> #include <linux/rtnetlink.h> #include <linux/tc_act/tc_bpf.h> #include <sys/socket.h>
tools/testing/selftests/net/pmtu.sh +69 -2
89 lines not on this page · raw message