Linux 5.15.182
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.182 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/imx6ul-imx6ull-opos6ul.dtsi | 3 arch/arm64/kernel/proton-pack.c | 2 arch/parisc/math-emu/driver.c | 16 arch/x86/include/asm/kvm-x86-ops.h | 1 arch/x86/include/asm/kvm_host.h | 1 arch/x86/kvm/svm/svm.c | 13 arch/x86/kvm/vmx/vmx.c | 11 arch/x86/kvm/x86.c | 3 drivers/edac/altera_edac.c | 9 drivers/edac/altera_edac.h | 2 drivers/firmware/arm_scmi/bus.c | 3 drivers/gpu/drm/meson/meson_vclk.c | 6 drivers/gpu/drm/nouveau/nouveau_fence.c | 2 drivers/i2c/busses/i2c-imx-lpi2c.c | 4 drivers/iommu/amd/init.c | 8 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 79 +-- drivers/iommu/intel/iommu.c | 4 drivers/irqchip/irq-gic-v2m.c | 8 drivers/md/dm-integrity.c | 2 drivers/md/dm-table.c | 5 drivers/mmc/host/renesas_sdhi_core.c | 10 drivers/net/ethernet/amd/xgbe/xgbe-desc.c | 9 drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 24 drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 11 drivers/net/ethernet/amd/xgbe/xgbe.h | 4 drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c | 20 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 38 + drivers/net/ethernet/dlink/dl2k.c | 2 drivers/net/ethernet/dlink/dl2k.h | 2 drivers/net/ethernet/freescale/fec_main.c | 7 drivers/net/ethernet/hisilicon/hns3/hnae3.h | 2 drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c | 2 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 119 +++- drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 3 drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 61 +- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 26 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c | 13 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 25 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h | 1 drivers/net/ethernet/intel/ice/ice_fltr.c | 58 ++ drivers/net/ethernet/intel/ice/ice_fltr.h | 12 drivers/net/ethernet/intel/ice/ice_main.c | 49 + drivers/net/ethernet/intel/ice/ice_virtchnl_fdir.c | 5 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 139 ++--- drivers/net/ethernet/mediatek/mtk_star_emac.c | 341 +++++++------ drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 5 drivers/net/ethernet/mellanox/mlx5/core/rdma.c | 11 drivers/net/ethernet/mellanox/mlx5/core/rdma.h | 4 drivers/net/ethernet/microchip/lan743x_main.c | 8 drivers/net/ethernet/microchip/lan743x_main.h | 1 drivers/net/phy/microchip.c | 46 - drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 6 drivers/nvme/host/tcp.c | 31 + drivers/of/device.c | 7 drivers/pci/controller/dwc/pci-imx6.c | 5 drivers/target/target_core_file.c | 3 drivers/target/target_core_iblock.c | 4 drivers/target/target_core_sbc.c | 6 kernel/trace/trace.c | 5 net/ipv4/udp_offload.c | 61 ++ net/sched/act_mirred.c | 22 net/sched/sch_drr.c | 9 net/sched/sch_ets.c | 9 net/sched/sch_hfsc.c | 2 net/sched/sch_qfq.c | 11 sound/usb/format.c | 3 67 files changed, 933 insertions(+), 493 deletions(-)
Benjamin Marzinski (1):
dm: always update the array size in realloc_argv on success
Biao Huang (1):
net: ethernet: mtk-star-emac: separate tx/rx handling with two NAPIs
Brett Creeley (1):
ice: Refactor promiscuous functions
Chris Mi (1):
net/mlx5: E-switch, Fix error handling for enabling roce
Christian Hewitt (1):
Revert "drm/meson: vclk: fix calculation of 59.94 fractional rates"
Clark Wang (1):
i2c: imx-lpi2c: Fix clock count when probe defers
Cristian Marussi (1):
firmware: arm_scmi: Balance device refcount when destroying devices
Felix Fietkau (1):
net: ipv6: fix UDPv6 GSO segmentation with NAT
Fiona Klute (1):
net: phy: microchip: force IRQ polling mode for lan88xx
Greg Kroah-Hartman (1):
Linux 5.15.182
Hao Lan (1):
net: hns3: fixed debugfs tm_qset size
Helge Deller (1):
parisc: Fix double SIGFPE crash
Jakub Kicinski (1):
net/sched: act_mirred: don't override retval if we already lost the skb
Jason Gunthorpe (1):
iommu/arm-smmu-v3: Use the new rb tree helpers
Jeongjun Park (1):
tracing: Fix oob write in trace_seq_to_buffer()
Jian Shen (2):
net: hns3: store rx VLAN tag offload state for VF
net: hns3: defer calling ptp_clock_register()
Joachim Priesner (1):
ALSA: usb-audio: Add second USB ID for Jabra Evolve 65 headset
Louis-Alexis Eyraud (2):
net: ethernet: mtk-star-emac: fix spinlock recursion issues on rx/tx poll
net: ethernet: mtk-star-emac: rearm interrupts in rx_poll only when advised
Maor Gottlieb (1):
net/mlx5: E-Switch, Initialize MAC Address for Default GID
Mattias Barthel (1):
net: fec: ERR007885 Workaround for conventional TX
Michael Chan (1):
bnxt_en: Fix ethtool -d byte order for 32-bit values
Michael Liang (1):
nvme-tcp: fix premature queue removal and I/O failover
Mike Christie (1):
scsi: target: Fix WRITE_SAME No Data Buffer crash
Mikulas Patocka (1):
dm-integrity: fix a warning on invalid table line
Mingcong Bai (1):
iommu/vt-d: Apply quirk_iommu_igfx for 8086:0044 (QM57/QS57)
Nicolin Chen (1):
iommu/arm-smmu-v3: Fix iommu_device_probe bug due to duplicated stream ids
Niravkumar L Rabara (2):
EDAC/altera: Test the correct error reg offset EDAC/altera: Set DDR and SDMMC interrupt mask before registration
Pavel Paklov (1):
iommu/amd: Fix potential buffer overflow in parse_ivrs_acpihid
Philipp Stanner (1):
drm/nouveau: Fix WARN_ON in nouveau_fence_context_kill()
Richard Zhu (1):
PCI: imx6: Skip controller_id generation logic for i.MX7D
Ruslan Piasetskyi (1):
mmc: renesas_sdhi: Fix error handling in renesas_sdhi_probe
Sean Christopherson (1):
KVM: x86: Load DR6 with guest value only before entering .vcpu_run() loop
Sergey Shtylyov (1):
of: module: add buffer overflow check in of_modalias()
Shruti Parab (2):
bnxt_en: Fix coredump logic to free allocated buffer
bnxt_en: Fix out-of-bound memcpy() during ethtool -w
Simon Horman (1):
net: dlink: Correct endianness handling of led_mode
Suzuki K Poulose (1):
irqchip/gic-v2m: Prevent use after free of gicv2m_get_fwnode()
Sébastien Szymanski (1):
ARM: dts: opos6ul: add ksz8081 phy properties
Thangaraj Samynathan (1):
net: lan743x: Fix memleak issue when GSO enabled
Thomas Gleixner (1):
irqchip/gic-v2m: Mark a few functions __init
Tudor Ambarus (1):
dm: fix copying after src array boundaries
Victor Nogueira (4):
net_sched: drr: Fix double list add in class with netem as child qdisc
net_sched: hfsc: Fix a UAF vulnerability in class with netem as child qdisc
net_sched: ets: Fix double list add in class with netem as child qdisc
net_sched: qfq: Fix double list add in class with netem as child qdisc
Vishal Badole (1):
amd-xgbe: Fix to ensure dependent features are toggled with RX checksum offload
Wentao Liang (1):
wifi: brcm80211: fmac: Add error handling for brcmf_usb_dl_writeimage()
Will Deacon (1):
arm64: errata: Add missing sentinels to Spectre-BHB MIDR arrays
Xiang wangx (1):
irqchip/gic-v2m: Add const to of_device_id
Xuanqiang Luo (1):
ice: Check VF VSI Pointer Value in ice_vc_add_fdir_fltr()
Yonglong Liu (3):
net: hns3: add support for external loopback test
net: hns3: fix an interrupt residual problem
net: hns3: fix deadlock issue when externel_lb and reset are executed together
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 181 +SUBLEVEL = 182 EXTRAVERSION = NAME = Trick or Treat
arch/arm/boot/dts/imx6ul-imx6ull-opos6ul.dtsi +3 -0
@@ -40,6 +40,9 @@ ethphy1: ethernet-phy@1 { reg = <1>; interrupt-parent = <&gpio4>; interrupts = <16 IRQ_TYPE_LEVEL_LOW>; + micrel,led-mode = <1>; + clocks = <&clks IMX6UL_CLK_ENET_REF>; + clock-names = "rmii-ref"; status = "okay"; }; };
arch/arm64/kernel/proton-pack.c +2 -0
@@ -879,10 +879,12 @@ static u8 spectre_bhb_loop_affected(void)static const struct midr_range spectre_bhb_k132_list[] = {MIDR_ALL_VERSIONS (MIDR_CORTEX_X3 ),MIDR_ALL_VERSIONS (MIDR_NEOVERSE_V2 ), + {}, };static const struct midr_range spectre_bhb_k38_list[] = {MIDR_ALL_VERSIONS (MIDR_CORTEX_A715 ),MIDR_ALL_VERSIONS (MIDR_CORTEX_A720 ), + {}, };static const struct midr_range spectre_bhb_k32_list[] = {MIDR_ALL_VERSIONS (MIDR_CORTEX_A78 ),
arch/parisc/math-emu/driver.c +13 -3
@@ -103,9 +103,19 @@ handle_fpe(struct pt_regs *regs)memcpy (regs->fr, frcopy,sizeof regs->fr);if (signalcode !=0 ) { -force_sig_fault (signalcode >>24 , signalcode &0xffffff , - (void __user *) regs->iaoq[0 ]); -return -1 ; +int sig = signalcode >>24 ; + +if (sig ==SIGFPE ) { +/* +* Clear floating point trap bit to avoid trapping +* again on the first floating-point instruction in +* the userspace signal handler. +*/ + regs->fr[0 ] &= ~(1ULL <<38 ); + } +force_sig_fault (sig, signalcode &0xffffff , + (void __user *) regs->iaoq[0 ]); +return -1 ; }return signalcode ?-1 :0 ;
arch/x86/include/asm/kvm-x86-ops.h +1 -0
@@ -44,6 +44,7 @@ KVM_X86_OP(set_idt) KVM_X86_OP(get_gdt) KVM_X86_OP(set_gdt) KVM_X86_OP(sync_dirty_debug_regs) +KVM_X86_OP(set_dr6) KVM_X86_OP(set_dr7) KVM_X86_OP(cache_reg) KVM_X86_OP(get_rflags)
arch/x86/include/asm/kvm_host.h +1 -0
@@ -1344,6 +1344,7 @@ struct kvm_x86_ops {void (*get_gdt)(struct kvm_vcpu *vcpu,struct desc_ptr *dt);void (*set_gdt)(struct kvm_vcpu *vcpu,struct desc_ptr *dt);void (*sync_dirty_debug_regs)(struct kvm_vcpu *vcpu); +void (*set_dr6)(struct kvm_vcpu *vcpu,unsigned long value);void (*set_dr7)(struct kvm_vcpu *vcpu,unsigned long value);void (*cache_reg)(struct kvm_vcpu *vcpu,enum kvm_reg reg);unsigned long (*get_rflags)(struct kvm_vcpu *vcpu);
arch/x86/kvm/svm/svm.c +6 -7
@@ -1887,11 +1887,11 @@ static void new_asid(struct vcpu_svm *svm, struct svm_cpu_data *sd) svm->asid = sd->next_asid++; } -static void svm_set_dr6 (struct vcpu_svm *svm,unsigned long value) +static void svm_set_dr6 (struct kvm_vcpu *vcpu,unsigned long value) { -struct vmcb *vmcb = svm->vmcb; +struct vmcb *vmcb =to_svm (vcpu)->vmcb; -if (svm->vcpu.arch.guest_state_protected) +if (vcpu->arch.guest_state_protected)return ;if (unlikely (value != vmcb->save.dr6)) {
@@ -3851,10 +3851,8 @@ static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu)* Run with all-zero DR6 unless needed, so that we can get the exact cause * of a #DB. */ -if (unlikely (vcpu->arch.switch_db_regs &KVM_DEBUGREG_WONT_EXIT )) -svm_set_dr6 (svm, vcpu->arch.dr6); -else -svm_set_dr6 (svm,DR6_ACTIVE_LOW ); +if (likely (!(vcpu->arch.switch_db_regs &KVM_DEBUGREG_WONT_EXIT ))) +svm_set_dr6 (vcpu,DR6_ACTIVE_LOW );clgi ();kvm_load_guest_xsave_state (vcpu);
@@ -4631,6 +4629,7 @@ static struct kvm_x86_ops svm_x86_ops __initdata = { .set_idt = svm_set_idt, .get_gdt = svm_get_gdt, .set_gdt = svm_set_gdt, + .set_dr6 = svm_set_dr6, .set_dr7 = svm_set_dr7, .sync_dirty_debug_regs = svm_sync_dirty_debug_regs, .cache_reg = svm_cache_reg,
arch/x86/kvm/vmx/vmx.c +7 -4
@@ -5249,6 +5249,12 @@ static void vmx_sync_dirty_debug_regs(struct kvm_vcpu *vcpu)set_debugreg (DR6_RESERVED ,6 ); } +static void vmx_set_dr6 (struct kvm_vcpu *vcpu,unsigned long val) +{ +lockdep_assert_irqs_disabled (); +set_debugreg (vcpu->arch.dr6,6 ); +} +static void vmx_set_dr7 (struct kvm_vcpu *vcpu,unsigned long val) {vmcs_writel (GUEST_DR7 , val);
@@ -6839,10 +6845,6 @@ static fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu) vmx->loaded_vmcs->host_state.cr4 = cr4; } -/* When KVM_DEBUGREG_WONT_EXIT, dr6 is accessible in guest. */ -if (unlikely (vcpu->arch.switch_db_regs &KVM_DEBUGREG_WONT_EXIT )) -set_debugreg (vcpu->arch.dr6,6 ); -/* When single-stepping over STI and MOV SS, we must clear the * corresponding interruptibility bits in the guest state. Otherwise * vmentry fails as it then expects bit 14 (BS) in pending debug
@@ -7777,6 +7779,7 @@ static struct kvm_x86_ops vmx_x86_ops __initdata = { .set_idt = vmx_set_idt, .get_gdt = vmx_get_gdt, .set_gdt = vmx_set_gdt, + .set_dr6 = vmx_set_dr6, .set_dr7 = vmx_set_dr7, .sync_dirty_debug_regs = vmx_sync_dirty_debug_regs, .cache_reg = vmx_cache_reg,
arch/x86/kvm/x86.c +3 -0
@@ -9963,6 +9963,9 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)set_debugreg (vcpu->arch.eff_db[1 ],1 );set_debugreg (vcpu->arch.eff_db[2 ],2 );set_debugreg (vcpu->arch.eff_db[3 ],3 ); +/* When KVM_DEBUGREG_WONT_EXIT, dr6 is accessible in guest. */ +if (unlikely (vcpu->arch.switch_db_regs &KVM_DEBUGREG_WONT_EXIT )) +static_call (kvm_x86_set_dr6)(vcpu, vcpu->arch.dr6); }else if (unlikely (hw_breakpoint_active ())) {set_debugreg (0 ,7 ); }
drivers/edac/altera_edac.c +5 -4
@@ -98,7 +98,7 @@ static irqreturn_t altr_sdram_mc_err_handler(int irq, void *dev_id)if (status & priv->ecc_stat_ce_mask) {regmap_read (drvdata->mc_vbase, priv->ecc_saddr_offset, &err_addr); -if (priv->ecc_uecnt_offset) +if (priv->ecc_cecnt_offset)regmap_read (drvdata->mc_vbase, priv->ecc_cecnt_offset, &err_count); edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, err_count,
@@ -1015,9 +1015,6 @@ altr_init_a10_ecc_block(struct device_node *np, u32 irq_mask, } } -/* Interrupt mode set to every SBERR */ -regmap_write (ecc_mgr_map,ALTR_A10_ECC_INTMODE_OFST , -ALTR_A10_ECC_INTMODE );/* Enable ECC */ ecc_set_bits (ecc_ctrl_en_mask, (ecc_block_base +ALTR_A10_ECC_CTRL_OFST ));
@@ -2100,6 +2097,10 @@ static int altr_edac_a10_probe(struct platform_device *pdev)return PTR_ERR (edac->ecc_mgr_map); } +/* Set irq mask for DDR SBE to avoid any pending irq before registration */ +regmap_write (edac->ecc_mgr_map,A10_SYSMGR_ECC_INTMASK_SET_OFST , + (A10_SYSMGR_ECC_INTMASK_SDMMCB |A10_SYSMGR_ECC_INTMASK_DDR0 )); + edac->irq_chip.name = pdev->dev.of_node->name; edac->irq_chip.irq_mask = a10_eccmgr_irq_mask; edac->irq_chip.irq_unmask = a10_eccmgr_irq_unmask;
drivers/edac/altera_edac.h +2 -0
@@ -249,6 +249,8 @@ struct altr_sdram_mc_data {#define A10_SYSMGR_ECC_INTMASK_SET_OFST 0x94#define A10_SYSMGR_ECC_INTMASK_CLR_OFST 0x98#define A10_SYSMGR_ECC_INTMASK_OCRAM BIT(1) +#define A10_SYSMGR_ECC_INTMASK_SDMMCB BIT(16) +#define A10_SYSMGR_ECC_INTMASK_DDR0 BIT(17)#define A10_SYSMGR_ECC_INTSTAT_SERR_OFST 0x9C#define A10_SYSMGR_ECC_INTSTAT_DERR_OFST 0xA0
drivers/firmware/arm_scmi/bus.c +3 -0
@@ -73,6 +73,9 @@ struct scmi_device *scmi_child_dev_find(struct device *parent,if (!dev)return NULL ; +/* Drop the refcnt bumped implicitly by device_find_child */ +put_device (dev); +return to_scmi_dev (dev); }
drivers/gpu/drm/meson/meson_vclk.c +3 -3
@@ -790,13 +790,13 @@ meson_vclk_vic_supported_freq(struct meson_drm *priv, unsigned int phy_freq, FREQ_1000_1001(params[i].pixel_freq));DRM_DEBUG_DRIVER ("i = %d phy_freq = %d alt = %d\n" , i, params[i].phy_freq, -FREQ_1000_1001 (params[i].phy_freq/1000 )*1000 ); +FREQ_1000_1001 (params[i].phy_freq/10 )*10 );/* Match strict frequency */ if (phy_freq == params[i].phy_freq && vclk_freq == params[i].vclk_freq)return MODE_OK ;/* Match 1000/1001 variant */ -if (phy_freq == (FREQ_1000_1001 (params[i].phy_freq/1000 )*1000 ) && +if (phy_freq == (FREQ_1000_1001 (params[i].phy_freq/10 )*10 ) && vclk_freq ==FREQ_1000_1001 (params[i].vclk_freq))return MODE_OK ; }
@@ -1070,7 +1070,7 @@ void meson_vclk_setup(struct meson_drm *priv, unsigned int target,for (freq =0 ; params[freq].pixel_freq ; ++freq) {if ((phy_freq == params[freq].phy_freq || - phy_freq ==FREQ_1000_1001 (params[freq].phy_freq/1000 )*1000 ) && + phy_freq ==FREQ_1000_1001 (params[freq].phy_freq/10 )*10 ) && (vclk_freq == params[freq].vclk_freq || vclk_freq ==FREQ_1000_1001 (params[freq].vclk_freq))) {if (vclk_freq != params[freq].vclk_freq)
drivers/gpu/drm/nouveau/nouveau_fence.c +1 -1
@@ -95,7 +95,7 @@ nouveau_fence_context_kill(struct nouveau_fence_chan *fctx, int error)while (!list_empty (&fctx->pending)) { fence =list_entry (fctx->pending.next,typeof (*fence), head); -if (error) +if (error && !dma_fence_is_signaled_locked (&fence->base))dma_fence_set_error (&fence->base, error);if (nouveau_fence_signal (fence))
drivers/i2c/busses/i2c-imx-lpi2c.c +2 -2
@@ -616,9 +616,9 @@ static int lpi2c_imx_probe(struct platform_device *pdev)return 0 ; rpm_disable: -pm_runtime_put (&pdev->dev); -pm_runtime_disable (&pdev->dev);pm_runtime_dont_use_autosuspend (&pdev->dev); +pm_runtime_put_sync (&pdev->dev); +pm_runtime_disable (&pdev->dev);return ret; }
drivers/iommu/amd/init.c +8 -0
@@ -3343,6 +3343,14 @@ static int __init parse_ivrs_acpihid(char *str)while (*uid =='0' && *(uid +1 )) uid++; +if (strlen (hid) >=ACPIHID_HID_LEN ) { +pr_err ("Invalid command line: hid is too long\n" ); +return 1 ; + }else if (strlen (uid) >=ACPIHID_UID_LEN ) { +pr_err ("Invalid command line: uid is too long\n" ); +return 1 ; + } + i = early_acpihid_map_size++;memcpy (early_acpihid_map[i].hid, hid,strlen (hid));memcpy (early_acpihid_map[i].uid, uid,strlen (uid));
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +42 -37
113 lines not on this page · raw message
drivers/iommu/intel/iommu.c +3 -1
@@ -5660,6 +5660,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e30, quirk_iommu_igfx);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2e40 , quirk_iommu_igfx);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2e90 , quirk_iommu_igfx); +/* QM57/QS57 integrated gfx malfunctions with dmar */ +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x0044 , quirk_iommu_igfx); +/* Broadwell igfx malfunctions with dmar */ DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x1606 , quirk_iommu_igfx);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x160B , quirk_iommu_igfx);
@@ -5737,7 +5740,6 @@ static void quirk_calpella_no_shadow_gtt(struct pci_dev *dev) } }DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x0040 , quirk_calpella_no_shadow_gtt); -DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x0044 , quirk_calpella_no_shadow_gtt);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x0062 , quirk_calpella_no_shadow_gtt);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x006a , quirk_calpella_no_shadow_gtt);
drivers/irqchip/irq-gic-v2m.c +4 -4
@@ -263,7 +263,7 @@ static struct msi_domain_info gicv2m_pmsi_domain_info = { .chip = &gicv2m_pmsi_irq_chip, }; -static void gicv2m_teardown (void ) +static void __init gicv2m_teardown (void ) {struct v2m_data *v2m, *tmp;
@@ -278,7 +278,7 @@ static void gicv2m_teardown(void) } } -static int gicv2m_allocate_domains (struct irq_domain *parent) +static __init int gicv2m_allocate_domains (struct irq_domain *parent) {struct irq_domain *inner_domain, *pci_domain, *plat_domain;struct v2m_data *v2m;
@@ -405,7 +405,7 @@ static int __init gicv2m_init_one(struct fwnode_handle *fwnode,return ret; } -static struct of_device_id gicv2m_device_id[] = { +static __initconst struct of_device_id gicv2m_device_id[] = { { .compatible ="arm,gic-v2m-frame" , }, {}, };
@@ -470,7 +470,7 @@ static struct fwnode_handle *gicv2m_get_fwnode(struct device *dev)return data->fwnode; } -static bool acpi_check_amazon_graviton_quirks (void ) +static __init bool acpi_check_amazon_graviton_quirks (void ) {static struct acpi_table_madt *madt;acpi_status status;
drivers/md/dm-integrity.c +1 -1
@@ -4543,7 +4543,7 @@ static void dm_integrity_dtr(struct dm_target *ti)BUG_ON (!RB_EMPTY_ROOT (&ic->in_progress));BUG_ON (!list_empty (&ic->wait_list)); -if (ic->mode =='B' ) +if (ic->mode =='B' && ic->bitmap_flush_work.work.func)cancel_delayed_work_sync (&ic->bitmap_flush_work);if (ic->metadata_wq)destroy_workqueue (ic->metadata_wq);
drivers/md/dm-table.c +3 -2
@@ -492,8 +492,9 @@ static char **realloc_argv(unsigned *size, char **old_argv) gfp =GFP_NOIO ; } argv =kmalloc_array (new_size,sizeof (*argv), gfp); -if (argv && old_argv) { -memcpy (argv, old_argv, *size *sizeof (*argv)); +if (argv) { +if (old_argv) +memcpy (argv, old_argv, *size *sizeof (*argv)); *size = new_size; }
drivers/mmc/host/renesas_sdhi_core.c +4 -6
@@ -1078,26 +1078,26 @@ int renesas_sdhi_probe(struct platform_device *pdev, num_irqs =platform_irq_count (pdev);if (num_irqs <0 ) { ret = num_irqs; - goto eirq; + goto edisclk; }/* There must be at least one IRQ source */ if (!num_irqs) { ret = -ENXIO ; - goto eirq; + goto edisclk; }for (i =0 ; i < num_irqs; i++) { irq =platform_get_irq (pdev, i);if (irq <0 ) { ret = irq; - goto eirq; + goto edisclk; } ret =devm_request_irq (&pdev->dev, irq, tmio_mmc_irq,0 ,dev_name (&pdev->dev), host);if (ret) - goto eirq; + goto edisclk; } ret =tmio_mmc_host_probe (host);
@@ -1109,8 +1109,6 @@ int renesas_sdhi_probe(struct platform_device *pdev,return ret; -eirq: -tmio_mmc_host_remove (host); edisclk:renesas_sdhi_clk_disable (host); efree:
drivers/net/ethernet/amd/xgbe/xgbe-desc.c +7 -2
@@ -373,8 +373,13 @@ static int xgbe_map_rx_buffer(struct xgbe_prv_data *pdata, }/* Set up the header page info */ -xgbe_set_buffer_data (&rdata->rx.hdr, &ring->rx_hdr_pa, -XGBE_SKB_ALLOC_SIZE ); +if (pdata->netdev->features &NETIF_F_RXCSUM ) { +xgbe_set_buffer_data (&rdata->rx.hdr, &ring->rx_hdr_pa, +XGBE_SKB_ALLOC_SIZE ); + }else { +xgbe_set_buffer_data (&rdata->rx.hdr, &ring->rx_hdr_pa, + pdata->rx_buf_size); + }/* Set up the buffer page info */ xgbe_set_buffer_data(&rdata->rx.buf, &ring->rx_buf_pa,
drivers/net/ethernet/amd/xgbe/xgbe-dev.c +22 -2
@@ -320,6 +320,18 @@ static void xgbe_config_sph_mode(struct xgbe_prv_data *pdata)XGMAC_IOWRITE_BITS (pdata,MAC_RCR ,HDSMS ,XGBE_SPH_HDSMS_SIZE ); } +static void xgbe_disable_sph_mode (struct xgbe_prv_data *pdata) +{ +unsigned int i; + +for (i =0 ; i < pdata->channel_count; i++) { +if (!pdata->channel[i]->rx_ring) +break ; + +XGMAC_DMA_IOWRITE_BITS (pdata->channel[i],DMA_CH_CR ,SPH ,0 ); + } +} +static int xgbe_write_rss_reg (struct xgbe_prv_data *pdata,unsigned int type,unsigned int index,unsigned int val) {
@@ -3495,8 +3507,12 @@ static int xgbe_init(struct xgbe_prv_data *pdata)xgbe_config_tx_coalesce (pdata);xgbe_config_rx_buffer_size (pdata);xgbe_config_tso_mode (pdata); -xgbe_config_sph_mode (pdata); -xgbe_config_rss (pdata); + +if (pdata->netdev->features &NETIF_F_RXCSUM ) { +xgbe_config_sph_mode (pdata); +xgbe_config_rss (pdata); + } + desc_if->wrapper_tx_desc_init (pdata); desc_if->wrapper_rx_desc_init (pdata);xgbe_enable_dma_interrupts (pdata);
@@ -3650,5 +3666,9 @@ void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *hw_if) hw_if->disable_vxlan = xgbe_disable_vxlan; hw_if->set_vxlan_id = xgbe_set_vxlan_id; +/* For Split Header*/ + hw_if->enable_sph = xgbe_config_sph_mode; + hw_if->disable_sph = xgbe_disable_sph_mode; +DBGPR ("<--xgbe_init_function_ptrs\n" ); }
drivers/net/ethernet/amd/xgbe/xgbe-drv.c +9 -2
@@ -2264,10 +2264,17 @@ static int xgbe_set_features(struct net_device *netdev,if (ret)return ret; -if ((features &NETIF_F_RXCSUM ) && !rxcsum) +if ((features &NETIF_F_RXCSUM ) && !rxcsum) { + hw_if->enable_sph (pdata); + hw_if->enable_vxlan (pdata); hw_if->enable_rx_csum (pdata); -else if (!(features &NETIF_F_RXCSUM ) && rxcsum) +schedule_work (&pdata->restart_work); + }else if (!(features &NETIF_F_RXCSUM ) && rxcsum) { + hw_if->disable_sph (pdata); + hw_if->disable_vxlan (pdata); hw_if->disable_rx_csum (pdata); +schedule_work (&pdata->restart_work); + }if ((features &NETIF_F_HW_VLAN_CTAG_RX ) && !rxvlan) hw_if->enable_rx_vlan_stripping (pdata);
drivers/net/ethernet/amd/xgbe/xgbe.h +4 -0
@@ -833,6 +833,10 @@ struct xgbe_hw_if {void (*enable_vxlan)(struct xgbe_prv_data *);void (*disable_vxlan)(struct xgbe_prv_data *);void (*set_vxlan_id)(struct xgbe_prv_data *); + +/* For Split Header */ +void (*enable_sph)(struct xgbe_prv_data *pdata); +void (*disable_sph)(struct xgbe_prv_data *pdata); };/* This structure represents implementation specific routines for an
drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c +15 -5
@@ -66,20 +66,30 @@ static int bnxt_hwrm_dbg_dma_data(struct bnxt *bp, void *msg, } } +if (cmn_req->req_type == +cpu_to_le16 (HWRM_DBG_COREDUMP_RETRIEVE )) + info->dest_buf_size += len; +if (info->dest_buf) {if ((info->seg_start + off + len) <=BNXT_COREDUMP_BUF_LEN (info->buf_len)) { -memcpy (info->dest_buf + off, dma_buf, len); +u16 copylen =min_t (u16, len, + info->dest_buf_size - off); + +memcpy (info->dest_buf + off, dma_buf, copylen); +if (copylen < len) +break ; }else { rc = -ENOBUFS ; +if (cmn_req->req_type == +cpu_to_le16 (HWRM_DBG_COREDUMP_LIST )) { +kfree (info->dest_buf); + info->dest_buf =NULL ; + }break ; } } -if (cmn_req->req_type == -cpu_to_le16 (HWRM_DBG_COREDUMP_RETRIEVE )) - info->dest_buf_size += len; -if (!(cmn_resp->flags &HWRM_DBG_CMN_FLAGS_MORE ))break ;
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +32 -6
@@ -1360,6 +1360,17 @@ static int bnxt_get_regs_len(struct net_device *dev)return reg_len; } +#define BNXT_PCIE_32B_ENTRY (start, end) \ + { offsetof(struct pcie_ctx_hw_stats, start), \ + offsetof(struct pcie_ctx_hw_stats, end) } + +static const struct { +u16 start; +u16 end; +} bnxt_pcie_32b_entries[] = { +BNXT_PCIE_32B_ENTRY (pcie_ltssm_histogram[0 ], pcie_ltssm_histogram[3 ]), +}; +static void bnxt_get_regs (struct net_device *dev,struct ethtool_regs *regs,void *_p) {
@@ -1391,12 +1402,27 @@ static void bnxt_get_regs(struct net_device *dev, struct ethtool_regs *regs, req->pcie_stat_host_addr =cpu_to_le64 (hw_pcie_stats_addr); rc =hwrm_req_send (bp, req);if (!rc) { -__le64 *src = (__le64 *)hw_pcie_stats; -u64 *dst = (u64 *)(_p +BNXT_PXP_REG_LEN ); -int i; - -for (i =0 ; i <sizeof (*hw_pcie_stats) /sizeof (__le64); i++) - dst[i] =le64_to_cpu (src[i]); +u8 *dst = (u8 *)(_p +BNXT_PXP_REG_LEN ); +u8 *src = (u8 *)hw_pcie_stats; +int i, j; + +for (i =0 , j =0 ; i <sizeof (*hw_pcie_stats); ) { +if (i >= bnxt_pcie_32b_entries[j].start && + i <= bnxt_pcie_32b_entries[j].end) { +u32 *dst32 = (u32 *)(dst + i); + + *dst32 =le32_to_cpu (*(__le32 *)(src + i)); + i +=4 ; +if (i > bnxt_pcie_32b_entries[j].end && + j <ARRAY_SIZE (bnxt_pcie_32b_entries) -1 ) + j++; + }else { +u64 *dst64 = (u64 *)(dst + i); + + *dst64 =le64_to_cpu (*(__le64 *)(src + i)); + i +=8 ; + } + } }hwrm_req_drop (bp, req); }
drivers/net/ethernet/dlink/dl2k.c +1 -1
@@ -353,7 +353,7 @@ parse_eeprom (struct net_device *dev) dev->dev_addr[i] = psrom->mac_addr[i];if (np->chip_id ==CHIP_IP1000A ) { - np->led_mode = psrom->led_mode; + np->led_mode =le16_to_cpu (psrom->led_mode);return 0 ; }
drivers/net/ethernet/dlink/dl2k.h +1 -1
@@ -335,7 +335,7 @@ typedef struct t_SROM {u16 sub_system_id;/* 0x06 */ u16 pci_base_1;/* 0x08 (IP1000A only) */ u16 pci_base_2;/* 0x0a (IP1000A only) */ -u16 led_mode;/* 0x0c (IP1000A only) */ +__le16 led_mode;/* 0x0c (IP1000A only) */ u16 reserved1[9 ];/* 0x0e-0x1f */ u8 mac_addr[6 ];/* 0x20-0x25 */ u8 reserved2[10 ];/* 0x26-0x2f */
drivers/net/ethernet/freescale/fec_main.c +6 -1
@@ -635,7 +635,12 @@ static int fec_enet_txq_submit_skb(struct fec_enet_priv_tx_q *txq, txq->bd.cur = bdp;/* Trigger transmission start */ -writel (0 , txq->bd.reg_desc_active); +if (!(fep->quirks &FEC_QUIRK_ERR007885 ) || + !readl (txq->bd.reg_desc_active) || + !readl (txq->bd.reg_desc_active) || + !readl (txq->bd.reg_desc_active) || + !readl (txq->bd.reg_desc_active)) +writel (0 , txq->bd.reg_desc_active);return 0 ; }
drivers/net/ethernet/hisilicon/hns3/hnae3.h +2 -0
@@ -178,6 +178,7 @@ struct hns3_mac_stats {/* hnae3 loop mode */ enum hnae3_loop { +HNAE3_LOOP_EXTERNAL ,HNAE3_LOOP_APP ,HNAE3_LOOP_SERIAL_SERDES ,HNAE3_LOOP_PARALLEL_SERDES ,
@@ -802,6 +803,7 @@ struct hnae3_roce_private_info {#define HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK BIT(2)#define HNAE3_SUPPORT_VF BIT(3)#define HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK BIT(4) +#define HNAE3_SUPPORT_EXTERNAL_LOOPBACK BIT(5)#define HNAE3_USER_UPE BIT(0)/* unicast promisc enabled by user */ #define HNAE3_USER_MPE BIT(1)/* mulitcast promisc enabled by user */
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c +1 -1
@@ -60,7 +60,7 @@ static struct hns3_dbg_cmd_info hns3_dbg_cmd[] = { .name = "tm_qset", .cmd = HNAE3_DBG_CMD_TM_QSET, .dentry = HNS3_DBG_DENTRY_TM, - .buf_len = HNS3_DBG_READ_LEN, + .buf_len = HNS3_DBG_READ_LEN_1MB, .init = hns3_dbg_common_file_init, }, {
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +89 -30
166 lines not on this page · raw message
drivers/net/ethernet/hisilicon/hns3/hns3_enet.h +3 -0
@@ -729,4 +729,7 @@ u16 hns3_get_max_available_channels(struct hnae3_handle *h);void hns3_cq_period_mode_init (struct hns3_nic_priv *priv,enum dim_cq_period_mode tx_mode,enum dim_cq_period_mode rx_mode); + +void hns3_external_lb_prepare (struct net_device *ndev,bool if_running); +void hns3_external_lb_restore (struct net_device *ndev,bool if_running);#endif
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c +44 -17
124 lines not on this page · raw message
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +19 -7
@@ -151,10 +151,11 @@ static const u32 tqp_intr_reg_addr_list[] = {HCLGE_TQP_INTR_CTRL_REG, HCLGE_TQP_INTR_RL_REG};static const char hns3_nic_test_strs[][ETH_GSTRING_LEN ] = { -"App Loopback test" , -"Serdes serial Loopback test" , -"Serdes parallel Loopback test" , -"Phy Loopback test" +"External Loopback test" , +"App Loopback test" , +"Serdes serial Loopback test" , +"Serdes parallel Loopback test" , +"Phy Loopback test" };static const struct hclge_comm_stats_str g_mac_stats_string[] = {
@@ -754,7 +755,8 @@ static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset)#define HCLGE_LOOPBACK_TEST_FLAGS (HNAE3_SUPPORT_APP_LOOPBACK | \ HNAE3_SUPPORT_PHY_LOOPBACK | \ HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK | \ - HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK) + HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK | \ + HNAE3_SUPPORT_EXTERNAL_LOOPBACK)struct hclge_vport *vport =hclge_get_vport (handle);struct hclge_dev *hdev = vport->back;
@@ -776,9 +778,12 @@ static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset) handle->flags |=HNAE3_SUPPORT_APP_LOOPBACK ; } - count +=2 ; + count +=1 ; handle->flags |=HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK ; + count +=1 ; handle->flags |=HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK ; + count +=1 ; + handle->flags |=HNAE3_SUPPORT_EXTERNAL_LOOPBACK ; if ((hdev->hw.mac.phydev && hdev->hw.mac.phydev->drv && hdev->hw.mac.phydev->drv->set_loopback) ||
@@ -806,6 +811,11 @@ static void hclge_get_strings(struct hnae3_handle *handle, u32 stringset, size, p); p =hclge_tqps_get_strings (handle, p); }else if (stringset ==ETH_SS_TEST ) { +if (handle->flags &HNAE3_SUPPORT_EXTERNAL_LOOPBACK ) { +memcpy (p, hns3_nic_test_strs[HNAE3_LOOP_EXTERNAL ], +ETH_GSTRING_LEN ); + p +=ETH_GSTRING_LEN ; + }if (handle->flags &HNAE3_SUPPORT_APP_LOOPBACK ) {memcpy (p, hns3_nic_test_strs[HNAE3_LOOP_APP ],ETH_GSTRING_LEN );
@@ -8060,7 +8070,7 @@ static int hclge_set_loopback(struct hnae3_handle *handle, {struct hclge_vport *vport =hclge_get_vport (handle);struct hclge_dev *hdev = vport->back; -int ret; +int ret =0 ;/* Loopback can be enabled in three places: SSU, MAC, and serdes. By * default, SSU loopback is enabled, so if the SMAC and the DMAC are
@@ -8087,6 +8097,8 @@ static int hclge_set_loopback(struct hnae3_handle *handle,case HNAE3_LOOP_PHY : ret =hclge_set_phy_loopback (hdev, en);break ; +case HNAE3_LOOP_EXTERNAL : +break ;default : ret = -ENOTSUPP ; dev_err(&hdev->pdev->dev,
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c +7 -6
@@ -452,6 +452,13 @@ static int hclge_ptp_create_clock(struct hclge_dev *hdev) ptp->info.settime64 = hclge_ptp_settime; ptp->info.n_alarm =0 ; + +spin_lock_init (&ptp->lock); + ptp->io_base = hdev->hw.hw.io_base +HCLGE_PTP_REG_OFFSET ; + ptp->ts_cfg.rx_filter =HWTSTAMP_FILTER_NONE ; + ptp->ts_cfg.tx_type =HWTSTAMP_TX_OFF ; + hdev->ptp = ptp; + ptp->clock =ptp_clock_register (&ptp->info, &hdev->pdev->dev);if (IS_ERR (ptp->clock)) { dev_err(&hdev->pdev->dev,
@@ -463,12 +470,6 @@ static int hclge_ptp_create_clock(struct hclge_dev *hdev)return -ENODEV ; } -spin_lock_init (&ptp->lock); - ptp->io_base = hdev->hw.hw.io_base +HCLGE_PTP_REG_OFFSET ; - ptp->ts_cfg.rx_filter =HWTSTAMP_FILTER_NONE ; - ptp->ts_cfg.tx_type =HWTSTAMP_TX_OFF ; - hdev->ptp = ptp; -return 0 ; }
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +19 -6
@@ -1761,9 +1761,8 @@ static void hclgevf_sync_vlan_filter(struct hclgevf_dev *hdev)rtnl_unlock (); } -static int hclgevf_en_hw_strip_rxvtag (struct hnae3_handle *handle,bool enable) +static int hclgevf_en_hw_strip_rxvtag_cmd (struct hclgevf_dev *hdev,bool enable) { -struct hclgevf_dev *hdev =hclgevf_ae_get_hdev (handle);struct hclge_vf_to_pf_msg send_msg; hclgevf_build_send_msg(&send_msg, HCLGE_MBX_SET_VLAN,
@@ -1772,6 +1771,19 @@ static int hclgevf_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable)return hclgevf_send_mbx_msg (hdev, &send_msg, false,NULL ,0 ); } +static int hclgevf_en_hw_strip_rxvtag (struct hnae3_handle *handle,bool enable) +{ +struct hclgevf_dev *hdev =hclgevf_ae_get_hdev (handle); +int ret; + + ret =hclgevf_en_hw_strip_rxvtag_cmd (hdev, enable); +if (ret) +return ret; + + hdev->rxvtag_strip_en = enable; +return 0 ; +} +static int hclgevf_reset_tqp (struct hnae3_handle *handle) {#define HCLGEVF_RESET_ALL_QUEUE_DONE 1U
@@ -2684,12 +2696,13 @@ static int hclgevf_rss_init_hw(struct hclgevf_dev *hdev)return hclgevf_set_rss_tc_mode (hdev, rss_cfg->rss_size); } -static int hclgevf_init_vlan_config (struct hclgevf_dev *hdev) +static int hclgevf_init_vlan_config (struct hclgevf_dev *hdev, +bool rxvtag_strip_en) {struct hnae3_handle *nic = &hdev->nic;int ret; - ret =hclgevf_en_hw_strip_rxvtag (nic, true); + ret =hclgevf_en_hw_strip_rxvtag (nic, rxvtag_strip_en);if (ret) {dev_err (&hdev->pdev->dev,"failed to enable rx vlan offload, ret = %d\n" , ret);
@@ -3359,7 +3372,7 @@ static int hclgevf_reset_hdev(struct hclgevf_dev *hdev)if (ret)return ret; - ret =hclgevf_init_vlan_config (hdev); + ret =hclgevf_init_vlan_config (hdev, hdev->rxvtag_strip_en);if (ret) {dev_err (&hdev->pdev->dev,"failed(%d) to initialize VLAN config\n" , ret);
@@ -3472,7 +3485,7 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev) goto err_config; } - ret =hclgevf_init_vlan_config (hdev); + ret =hclgevf_init_vlan_config (hdev, true);if (ret) {dev_err (&hdev->pdev->dev,"failed(%d) to initialize VLAN config\n" , ret);
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h +1 -0
@@ -315,6 +315,7 @@ struct hclgevf_dev {int *vector_irq;bool gro_en; +bool rxvtag_strip_en;unsigned long vlan_del_fail_bmap[BITS_TO_LONGS (VLAN_N_VID )];
drivers/net/ethernet/intel/ice/ice_fltr.c +58 -0
64 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_fltr.h +12 -0
@@ -6,6 +6,18 @@void ice_fltr_free_list (struct device *dev,struct list_head *h);enum ice_status +ice_fltr_set_vlan_vsi_promisc (struct ice_hw *hw,struct ice_vsi *vsi, +u8 promisc_mask); +enum ice_status +ice_fltr_clear_vlan_vsi_promisc (struct ice_hw *hw,struct ice_vsi *vsi, +u8 promisc_mask); +enum ice_status +ice_fltr_clear_vsi_promisc (struct ice_hw *hw,u16 vsi_handle,u8 promisc_mask, +u16 vid); +enum ice_status +ice_fltr_set_vsi_promisc (struct ice_hw *hw,u16 vsi_handle,u8 promisc_mask, +u16 vid); +enum ice_status ice_fltr_add_mac_to_list (struct ice_vsi *vsi,struct list_head *list,const u8 *mac,enum ice_sw_fwd_act_type action);enum ice_status
drivers/net/ethernet/intel/ice/ice_main.c +31 -18
77 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_virtchnl_fdir.c +5 -0
@@ -2079,6 +2079,11 @@ int ice_vc_add_fdir_fltr(struct ice_vf *vf, u8 *msg) pf = vf->pf; dev =ice_pf_to_dev (pf); vf_vsi =ice_get_vf_vsi (vf); +if (!vf_vsi) { +dev_err (dev,"Can not get FDIR vf_vsi for VF %u\n" , vf->vf_id); + v_ret =VIRTCHNL_STATUS_ERR_PARAM ; + goto err_exit; + }#define ICE_VF_MAX_FDIR_FILTERS 128 if (!ice_fdir_num_avail_fltr(&pf->hw, vf_vsi) ||
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c +55 -84
185 lines not on this page · raw message
drivers/net/ethernet/mediatek/mtk_star_emac.c +200 -141
486 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +4 -1
@@ -3138,7 +3138,9 @@ int esw_offloads_enable(struct mlx5_eswitch *esw)int err;mutex_init (&esw->offloads.termtbl_mutex); -mlx5_rdma_enable_roce (esw->dev); + err =mlx5_rdma_enable_roce (esw->dev); +if (err) + goto err_roce; err =mlx5_esw_host_number_init (esw);if (err)
@@ -3198,6 +3200,7 @@ int esw_offloads_enable(struct mlx5_eswitch *esw)esw_offloads_metadata_uninit (esw); err_metadata:mlx5_rdma_disable_roce (esw->dev); +err_roce:mutex_destroy (&esw->offloads.termtbl_mutex);return err; }
drivers/net/ethernet/mellanox/mlx5/core/rdma.c +6 -5
@@ -130,8 +130,8 @@ static void mlx5_rdma_make_default_gid(struct mlx5_core_dev *dev, union ib_gid *static int mlx5_rdma_add_roce_addr (struct mlx5_core_dev *dev) { +u8 mac[ETH_ALEN ] = {};union ib_gid gid; -u8 mac[ETH_ALEN ];mlx5_rdma_make_default_gid (dev, &gid); return mlx5_core_roce_gid_set(dev, 0,
@@ -152,17 +152,17 @@ void mlx5_rdma_disable_roce(struct mlx5_core_dev *dev)mlx5_nic_vport_disable_roce (dev); } -void mlx5_rdma_enable_roce (struct mlx5_core_dev *dev) +int mlx5_rdma_enable_roce (struct mlx5_core_dev *dev) {int err;if (!MLX5_CAP_GEN (dev, roce)) -return ; +return 0 ; err =mlx5_nic_vport_enable_roce (dev);if (err) {mlx5_core_err (dev,"Failed to enable RoCE: %d\n" , err); -return ; +return err; } err =mlx5_rdma_add_roce_addr (dev);
@@ -177,10 +177,11 @@ void mlx5_rdma_enable_roce(struct mlx5_core_dev *dev) goto del_roce_addr; } -return ; +return err; del_roce_addr:mlx5_rdma_del_roce_addr (dev); disable_roce:mlx5_nic_vport_disable_roce (dev); +return err; }
drivers/net/ethernet/mellanox/mlx5/core/rdma.h +2 -2
@@ -8,12 +8,12 @@#ifdef CONFIG_MLX5_ESWITCH -void mlx5_rdma_enable_roce (struct mlx5_core_dev *dev); +int mlx5_rdma_enable_roce (struct mlx5_core_dev *dev);void mlx5_rdma_disable_roce (struct mlx5_core_dev *dev);#else /* CONFIG_MLX5_ESWITCH */ -static inline void mlx5_rdma_enable_roce (struct mlx5_core_dev *dev) {} +static inline int mlx5_rdma_enable_roce (struct mlx5_core_dev *dev) {return 0 ; }static inline void mlx5_rdma_disable_roce (struct mlx5_core_dev *dev) {}#endif /* CONFIG_MLX5_ESWITCH */
drivers/net/ethernet/microchip/lan743x_main.c +6 -2
@@ -1448,6 +1448,7 @@ static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx,if (nr_frags <=0 ) { tx->frame_data0 |=TX_DESC_DATA0_LS_ ; tx->frame_data0 |=TX_DESC_DATA0_IOC_ ; + tx->frame_last = tx->frame_first; } tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; tx_descriptor->data0 =cpu_to_le32 (tx->frame_data0);
@@ -1517,6 +1518,7 @@ static int lan743x_tx_frame_add_fragment(struct lan743x_tx *tx, tx->frame_first =0 ; tx->frame_data0 =0 ; tx->frame_tail =0 ; + tx->frame_last =0 ;return -ENOMEM ; }
@@ -1557,16 +1559,18 @@ static void lan743x_tx_frame_end(struct lan743x_tx *tx, TX_DESC_DATA0_DTYPE_DATA_) { tx->frame_data0 |=TX_DESC_DATA0_LS_ ; tx->frame_data0 |=TX_DESC_DATA0_IOC_ ; + tx->frame_last = tx->frame_tail; } - tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; - buffer_info = &tx->buffer_info[tx->frame_tail]; + tx_descriptor = &tx->ring_cpu_ptr[tx->frame_last]; + buffer_info = &tx->buffer_info[tx->frame_last]; buffer_info->skb = skb;if (time_stamp) buffer_info->flags |=TX_BUFFER_INFO_FLAG_TIMESTAMP_REQUESTED ;if (ignore_sync) buffer_info->flags |=TX_BUFFER_INFO_FLAG_IGNORE_SYNC ; + tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; tx_descriptor->data0 =cpu_to_le32 (tx->frame_data0); tx->frame_tail =lan743x_tx_next_index (tx, tx->frame_tail); tx->last_tail = tx->frame_tail;
drivers/net/ethernet/microchip/lan743x_main.h +1 -0
@@ -658,6 +658,7 @@ struct lan743x_tx {u32 frame_first;u32 frame_data0;u32 frame_tail; +u32 frame_last;struct lan743x_tx_buffer_info *buffer_info;
drivers/net/phy/microchip.c +3 -43
58 lines not on this page · raw message
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c +4 -2
@@ -903,14 +903,16 @@ brcmf_usb_dl_writeimage(struct brcmf_usbdev_info *devinfo, u8 *fw, int fwlen) }/* 1) Prepare USB boot loader for runtime image */ -brcmf_usb_dl_cmd (devinfo,DL_START , &state,sizeof (state)); + err =brcmf_usb_dl_cmd (devinfo,DL_START , &state,sizeof (state)); +if (err) + goto fail; rdlstate =le32_to_cpu (state.state); rdlbytes =le32_to_cpu (state.bytes);/* 2) Check we are in the Waiting state */ if (rdlstate !=DL_WAITING ) { -brcmf_err ("Failed to DL_START\n" ); +brcmf_err ("Invalid DL state: %u\n" , rdlstate); err = -EINVAL ; goto fail; }
drivers/nvme/host/tcp.c +29 -2
@@ -1602,7 +1602,7 @@ static void __nvme_tcp_stop_queue(struct nvme_tcp_queue *queue)cancel_work_sync (&queue->io_work); } -static void nvme_tcp_stop_queue (struct nvme_ctrl *nctrl,int qid) +static void nvme_tcp_stop_queue_nowait (struct nvme_ctrl *nctrl,int qid) {struct nvme_tcp_ctrl *ctrl =to_tcp_ctrl (nctrl);struct nvme_tcp_queue *queue = &ctrl->queues[qid];
@@ -1613,6 +1613,31 @@ static void nvme_tcp_stop_queue(struct nvme_ctrl *nctrl, int qid)mutex_unlock (&queue->queue_lock); } +static void nvme_tcp_wait_queue (struct nvme_ctrl *nctrl,int qid) +{ +struct nvme_tcp_ctrl *ctrl =to_tcp_ctrl (nctrl); +struct nvme_tcp_queue *queue = &ctrl->queues[qid]; +int timeout =100 ; + +while (timeout >0 ) { +if (!test_bit (NVME_TCP_Q_ALLOCATED , &queue->flags) || + !sk_wmem_alloc_get (queue->sock->sk)) +return ; +msleep (2 ); + timeout -=2 ; + } +dev_warn (nctrl->device, +"qid %d: timeout draining sock wmem allocation expired\n" , + qid); +} + +static void nvme_tcp_stop_queue (struct nvme_ctrl *nctrl,int qid) +{ +nvme_tcp_stop_queue_nowait (nctrl, qid); +nvme_tcp_wait_queue (nctrl, qid); +} + +static void nvme_tcp_setup_sock_ops (struct nvme_tcp_queue *queue) {write_lock_bh (&queue->sock->sk->sk_callback_lock);
@@ -1720,7 +1745,9 @@ static void nvme_tcp_stop_io_queues(struct nvme_ctrl *ctrl)int i;for (i =1 ; i < ctrl->queue_count; i++) -nvme_tcp_stop_queue (ctrl, i); +nvme_tcp_stop_queue_nowait (ctrl, i); +for (i =1 ; i < ctrl->queue_count; i++) +nvme_tcp_wait_queue (ctrl, i); }static int nvme_tcp_start_io_queues (struct nvme_ctrl *ctrl)
drivers/of/device.c +4 -3
@@ -257,14 +257,15 @@ static ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len csize =snprintf (str, len,"of:N%pOFn%c%s" , dev->of_node,'T' ,of_node_get_device_type (dev->of_node)); tsize = csize; +if (csize >= len) + csize = len >0 ? len -1 :0 ; len -= csize; -if (str) - str += csize; + str += csize;of_property_for_each_string (dev->of_node,"compatible" , p, compat) { csize =strlen (compat) +1 ; tsize += csize; -if (csize > len) +if (csize >= len)continue ; csize =snprintf (str, len,"C%s" , compat);
drivers/pci/controller/dwc/pci-imx6.c +2 -3
@@ -1070,11 +1070,10 @@ static int imx6_pcie_probe(struct platform_device *pdev)if (IS_ERR (imx6_pcie->pcie_aux))return dev_err_probe (dev,PTR_ERR (imx6_pcie->pcie_aux),"pcie_aux clock source missing or invalid\n" ); - fallthrough; -case IMX7D :if (dbi_base->start ==IMX8MQ_PCIE2_BASE_ADDR ) imx6_pcie->controller_id =1 ; - + fallthrough; +case IMX7D : imx6_pcie->pciephy_reset =devm_reset_control_get_exclusive (dev,"pciephy" );if (IS_ERR (imx6_pcie->pciephy_reset)) {
drivers/target/target_core_file.c +3 -0
@@ -447,6 +447,9 @@ fd_execute_write_same(struct se_cmd *cmd)return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE ; } +if (!cmd->t_data_nents) +return TCM_INVALID_CDB_FIELD ; +if (cmd->t_data_nents >1 || cmd->t_data_sg[0 ].length != cmd->se_dev->dev_attrib.block_size) { pr_err("WRITE_SAME: Illegal SGL t_data_nents: %u length: %u"
drivers/target/target_core_iblock.c +4 -0
@@ -496,6 +496,10 @@ iblock_execute_write_same(struct se_cmd *cmd) " backends not supported\n");return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE ; } + +if (!cmd->t_data_nents) +return TCM_INVALID_CDB_FIELD ; + sg = &cmd->t_data_sg[0 ]; if (cmd->t_data_nents > 1 ||
drivers/target/target_core_sbc.c +6 -0
@@ -312,6 +312,12 @@ sbc_setup_write_same(struct se_cmd *cmd, unsigned char flags, struct sbc_ops *oppr_warn ("WRITE SAME with ANCHOR not supported\n" );return TCM_INVALID_CDB_FIELD ; } + +if (flags &0x01 ) { +pr_warn ("WRITE SAME with NDOB not supported\n" ); +return TCM_INVALID_CDB_FIELD ; + } +/* * Special case for WRITE_SAME w/ UNMAP=1 that ends up getting * translated into block discard requests within backend code.
kernel/trace/trace.c +3 -2
@@ -7034,13 +7034,14 @@ static ssize_t tracing_splice_read_pipe(struct file *filp,/* Copy the data into the page, so we can start over. */ ret =trace_seq_to_buffer (&iter->seq,page_address (spd.pages[i]), -trace_seq_used (&iter->seq)); +min ((size_t )trace_seq_used (&iter->seq), +PAGE_SIZE ));if (ret <0 ) {__free_page (spd.pages[i]);break ; } spd.partial[i].offset =0 ; - spd.partial[i].len =trace_seq_used (&iter->seq); + spd.partial[i].len = ret;trace_seq_init (&iter->seq); }
net/ipv4/udp_offload.c +60 -1
73 lines not on this page · raw message
net/sched/act_mirred.c +13 -9
@@ -254,31 +254,31 @@ static int tcf_mirred_act(struct sk_buff *skb, const struct tc_action *a, m_mac_header_xmit =READ_ONCE (m->tcfm_mac_header_xmit); m_eaction =READ_ONCE (m->tcfm_eaction); + is_redirect =tcf_mirred_is_act_redirect (m_eaction); retval =READ_ONCE (m->tcf_action); dev =rcu_dereference_bh (m->tcfm_dev);if (unlikely (!dev)) {pr_notice_once ("tc mirred: target device is gone\n" ); - goto out; + goto err_cant_do; }if (unlikely (!(dev->flags &IFF_UP )) || !netif_carrier_ok (dev)) {net_notice_ratelimited ("tc mirred to Houston: device %s is down\n" , dev->name); - goto out; + goto err_cant_do; }/* we could easily avoid the clone only if called by ingress and clsact; * since we can't easily detect the clsact caller, skip clone only for * ingress - that covers the TC S/W datapath. */ - is_redirect =tcf_mirred_is_act_redirect (m_eaction); at_ingress =skb_at_tc_ingress (skb); use_reinsert = at_ingress && is_redirect &&tcf_mirred_can_reinsert (retval);if (!use_reinsert) { skb2 =skb_clone (skb,GFP_ATOMIC );if (!skb2) - goto out; + goto err_cant_do; } want_ingress =tcf_mirred_act_wants_ingress (m_eaction);
@@ -321,12 +321,16 @@ static int tcf_mirred_act(struct sk_buff *skb, const struct tc_action *a, } err =tcf_mirred_forward (want_ingress, skb2); -if (err) { -out: +if (err)tcf_action_inc_overlimit_qstats (&m->common); -if (tcf_mirred_is_act_redirect (m_eaction)) - retval =TC_ACT_SHOT ; - } +__this_cpu_dec (mirred_nest_level); + +return retval; + +err_cant_do: +if (is_redirect) + retval =TC_ACT_SHOT ; +tcf_action_inc_overlimit_qstats (&m->common);__this_cpu_dec (mirred_nest_level);return retval;
net/sched/sch_drr.c +6 -3
@@ -36,6 +36,11 @@ struct drr_sched {struct Qdisc_class_hash clhash; }; +static bool cl_is_active (struct drr_class *cl) +{ +return !list_empty (&cl->alist); +} +static struct drr_class *drr_find_class (struct Qdisc *sch,u32 classid) {struct drr_sched *q =qdisc_priv (sch);
@@ -345,7 +350,6 @@ static int drr_enqueue(struct sk_buff *skb, struct Qdisc *sch,struct drr_sched *q =qdisc_priv (sch);struct drr_class *cl;int err =0 ; -bool first; cl =drr_classify (skb, sch, &err);if (cl ==NULL ) {
@@ -355,7 +359,6 @@ static int drr_enqueue(struct sk_buff *skb, struct Qdisc *sch,return err; } - first = !cl->qdisc->q.qlen; err =qdisc_enqueue (skb, cl->qdisc, to_free);if (unlikely (err !=NET_XMIT_SUCCESS )) {if (net_xmit_drop_count (err)) {
@@ -365,7 +368,7 @@ static int drr_enqueue(struct sk_buff *skb, struct Qdisc *sch,return err; } -if (first) { +if (!cl_is_active (cl)) {list_add_tail (&cl->alist, &q->active); cl->deficit = cl->quantum; }
net/sched/sch_ets.c +6 -3
@@ -74,6 +74,11 @@ static const struct nla_policy ets_class_policy[TCA_ETS_MAX + 1] = { [TCA_ETS_QUANTA_BAND] = { .type = NLA_U32 }, }; +static bool cl_is_active (struct ets_class *cl) +{ +return !list_empty (&cl->alist); +} +static int ets_quantum_parse (struct Qdisc *sch,const struct nlattr *attr,unsigned int *quantum,struct netlink_ext_ack *extack)
@@ -424,7 +429,6 @@ static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,struct ets_sched *q =qdisc_priv (sch);struct ets_class *cl;int err =0 ; -bool first; cl =ets_classify (skb, sch, &err);if (!cl) {
@@ -434,7 +438,6 @@ static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,return err; } - first = !cl->qdisc->q.qlen; err =qdisc_enqueue (skb, cl->qdisc, to_free);if (unlikely (err !=NET_XMIT_SUCCESS )) {if (net_xmit_drop_count (err)) {
@@ -444,7 +447,7 @@ static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,return err; } -if (first && !ets_class_is_strict (q, cl)) { +if (!cl_is_active (cl) && !ets_class_is_strict (q, cl)) {list_add_tail (&cl->alist, &q->active); cl->deficit = cl->quantum; }
net/sched/sch_hfsc.c +1 -1
@@ -1572,7 +1572,7 @@ hfsc_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff **to_free)return err; } -if (first) { +if (first && !cl->cl_nactive) {if (cl->cl_flags &HFSC_RSC )init_ed (cl, len);if (cl->cl_flags &HFSC_FSC )
net/sched/sch_qfq.c +7 -4
@@ -204,6 +204,11 @@ struct qfq_sched {*/ enum update_reason {enqueue, requeue}; +static bool cl_is_active (struct qfq_class *cl) +{ +return !list_empty (&cl->alist); +} +static struct qfq_class *qfq_find_class (struct Qdisc *sch,u32 classid) {struct qfq_sched *q =qdisc_priv (sch);
@@ -1223,7 +1228,6 @@ static int qfq_enqueue(struct sk_buff *skb, struct Qdisc *sch,struct qfq_class *cl;struct qfq_aggregate *agg;int err =0 ; -bool first; cl =qfq_classify (skb, sch, &err);if (cl ==NULL ) {
@@ -1245,7 +1249,6 @@ static int qfq_enqueue(struct sk_buff *skb, struct Qdisc *sch, } gso_segs =skb_is_gso (skb) ?skb_shinfo (skb)->gso_segs :1 ; - first = !cl->qdisc->q.qlen; err =qdisc_enqueue (skb, cl->qdisc, to_free);if (unlikely (err !=NET_XMIT_SUCCESS )) {pr_debug ("qfq_enqueue: enqueue failed %d\n" , err);
@@ -1262,8 +1265,8 @@ static int qfq_enqueue(struct sk_buff *skb, struct Qdisc *sch, ++sch->q.qlen; agg = cl->agg; -/* if the queue was not empty, then done here */ -if (!first) { +/* if the class is active, then done here */ +if (cl_is_active (cl)) {if (unlikely (skb == cl->qdisc->ops->peek (cl->qdisc)) && list_first_entry(&agg->active, struct qfq_class, alist) == cl && cl->deficit < len)
sound/usb/format.c +2 -1
@@ -263,7 +263,8 @@ static int parse_audio_format_rates_v1(struct snd_usb_audio *chip, struct audiof }/* Jabra Evolve 65 headset */ -if (chip->usb_id ==USB_ID (0x0b0e ,0x030b )) { +if (chip->usb_id ==USB_ID (0x0b0e ,0x030b ) || + chip->usb_id ==USB_ID (0x0b0e ,0x030c )) {/* only 48kHz for playback while keeping 16kHz for capture */ if (fp->nr_rates !=1 )return set_fixed_rate (fp,48000 ,SNDRV_PCM_RATE_48000 );