Linux 6.1.138
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.138 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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/events/intel/core.c | 2 arch/x86/include/asm/kexec.h | 18 arch/x86/include/asm/kvm-x86-ops.h | 1 arch/x86/include/asm/kvm_host.h | 1 arch/x86/kernel/machine_kexec_64.c | 45 - arch/x86/kvm/svm/svm.c | 13 arch/x86/kvm/vmx/vmx.c | 11 arch/x86/kvm/x86.c | 3 drivers/cpufreq/cpufreq.c | 42 drivers/cpufreq/cpufreq_ondemand.c | 3 drivers/cpufreq/freq_table.c | 6 drivers/edac/altera_edac.c | 9 drivers/edac/altera_edac.h | 2 drivers/firmware/arm_ffa/driver.c | 3 drivers/firmware/arm_scmi/bus.c | 3 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c | 429 +++++----- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.h | 5 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/irqchip/irq-qcom-mpm.c | 3 drivers/md/dm-bufio.c | 3 drivers/md/dm-integrity.c | 2 drivers/md/dm-table.c | 5 drivers/md/md.c | 27 drivers/md/md.h | 2 drivers/md/raid0.c | 16 drivers/md/raid5.c | 41 drivers/mmc/host/renesas_sdhi_core.c | 10 drivers/net/dsa/ocelot/felix_vsc9959.c | 5 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/hns3_debugfs.c | 2 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 82 - 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_virtchnl_fdir.c | 5 drivers/net/ethernet/mediatek/mtk_star_emac.c | 13 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/ethernet/mscc/ocelot.c | 194 ++++ drivers/net/ethernet/mscc/ocelot_vcap.c | 1 drivers/net/ethernet/vertexcom/mse102x.c | 36 drivers/net/phy/microchip.c | 46 - drivers/net/usb/rndis_host.c | 16 drivers/net/vxlan/vxlan_vnifilter.c | 8 drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 6 drivers/net/wireless/purelifi/plfxlc/mac.c | 1 drivers/nvme/host/tcp.c | 31 drivers/pci/controller/dwc/pci-imx6.c | 5 drivers/platform/x86/intel/uncore-frequency/uncore-frequency.c | 13 fs/smb/server/auth.c | 14 fs/smb/server/smb2pdu.c | 5 fs/xfs/libxfs/xfs_attr_remote.c | 1 fs/xfs/libxfs/xfs_bmap.c | 130 ++- fs/xfs/libxfs/xfs_da_btree.c | 20 fs/xfs/libxfs/xfs_inode_buf.c | 47 - fs/xfs/libxfs/xfs_sb.c | 7 fs/xfs/scrub/attr.c | 5 fs/xfs/xfs_aops.c | 54 - fs/xfs/xfs_attr_item.c | 88 +- fs/xfs/xfs_bmap_util.c | 61 - fs/xfs/xfs_bmap_util.h | 2 fs/xfs/xfs_dquot.c | 1 fs/xfs/xfs_icache.c | 2 fs/xfs/xfs_inode.c | 14 fs/xfs/xfs_iomap.c | 81 + fs/xfs/xfs_reflink.c | 20 fs/xfs/xfs_rtalloc.c | 2 include/linux/cpufreq.h | 83 + include/soc/mscc/ocelot_vcap.h | 2 kernel/trace/trace.c | 5 net/ipv4/udp_offload.c | 61 + net/sched/sch_drr.c | 16 net/sched/sch_ets.c | 17 net/sched/sch_hfsc.c | 10 net/sched/sch_htb.c | 2 net/sched/sch_qfq.c | 18 sound/soc/codecs/ak4613.c | 4 sound/soc/soc-core.c | 36 sound/soc/soc-pcm.c | 5 sound/usb/format.c | 3 101 files changed, 1467 insertions(+), 837 deletions(-)
Benjamin Marzinski (1):
dm: always update the array size in realloc_argv on success
Bhawanpreet Lakha (1):
drm/amd/display: Change HDCP update sequence for DM
Chris Bainbridge (1):
drm/amd/display: Fix slab-use-after-free in hdcp
Chris Mi (1):
net/mlx5: E-switch, Fix error handling for enabling roce
Christian Heusel (1):
Revert "rndis_host: Flag RNDIS modems as WWAN devices"
Christian Hewitt (1):
Revert "drm/meson: vclk: fix calculation of 59.94 fractional rates"
Christoph Hellwig (4):
xfs: fix error returns from xfs_bmapi_write
xfs: fix xfs_bmap_add_extent_delay_real for partial conversions
xfs: remove a racy if_bytes check in xfs_reflink_end_cow_extent
xfs: fix freeing speculative preallocations for preallocated files
Clark Wang (1):
i2c: imx-lpi2c: Fix clock count when probe defers
Cong Wang (5):
sch_htb: make htb_qlen_notify() idempotent
sch_drr: make drr_qlen_notify() idempotent
sch_hfsc: make hfsc_qlen_notify() idempotent
sch_qfq: make qfq_qlen_notify() idempotent
sch_ets: make est_qlen_notify() idempotent
Cristian Marussi (1):
firmware: arm_scmi: Balance device refcount when destroying devices
Darrick J. Wong (7):
xfs: require XFS_SB_FEAT_INCOMPAT_LOG_XATTRS for attr log intent item recovery
xfs: check opcode and iovec count match in xlog_recover_attri_commit_pass2
xfs: validate recovered name buffers when recovering xattr items
xfs: revert commit 44af6c7e59b12
xfs: allow symlinks with short remote targets
xfs: allow unlinked symlinks and dirs with zero size
xfs: restrict when we try to align cow fork delalloc to cowextsz hints
Felix Fietkau (1):
net: ipv6: fix UDPv6 GSO segmentation with NAT
Fiona Klute (1):
net: phy: microchip: force IRQ polling mode for lan88xx
Geert Uytterhoeven (1):
ASoC: soc-core: Stop using of_property_read_bool() for non-boolean properties
Greg Kroah-Hartman (2):
Revert "x86/kexec: Allocate PGD for x86_64 transition page tables separately" Linux 6.1.138
Hao Lan (1):
net: hns3: fixed debugfs tm_qset size
Helge Deller (1):
parisc: Fix double SIGFPE crash
Ido Schimmel (1):
vxlan: vnifilter: Fix unlocked deletion of default FDB entry
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
LongPing Wei (1):
dm-bufio: don't schedule in atomic context
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
Mario Limonciello (1):
drm/amd/display: Add scoped mutexes for amdgpu_dm_dhcp
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
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)
Murad Masimov (1):
wifi: plfxlc: Remove erroneous assert in plfxlc_mac_release
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()
Rafael J. Wysocki (2):
cpufreq: Avoid using inconsistent policy->min and policy->max
cpufreq: Fix setting policy limits when frequency tables are used
Richard Zhu (1):
PCI: imx6: Skip controller_id generation logic for i.MX7D
Rob Herring (Arm) (1):
ASoC: Use of_property_read_bool()
Ruslan Piasetskyi (1):
mmc: renesas_sdhi: Fix error handling in renesas_sdhi_probe
Sean Christopherson (2):
perf/x86/intel: KVM: Mask PEBS_ENABLE loaded for guest with vCPU's value.
KVM: x86: Load DR6 with guest value only before entering .vcpu_run() loop
Sean Heelan (1):
ksmbd: fix use-after-free in kerberos authentication
Sheetal (1):
ASoC: soc-pcm: Fix hw_params() and DAPM widget sequence
Shouye Liu (1):
platform/x86/intel-uncore-freq: Fix missing uncore sysfs during CPU hotplug
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
Srinivasan Shanmugam (1):
drm/amd/display: Clean up style problems in amdgpu_dm_hdcp.c
Stefan Wahren (4):
net: vertexcom: mse102x: Fix possible stuck of SPI interrupt
net: vertexcom: mse102x: Fix LEN_MASK
net: vertexcom: mse102x: Add range check for CMD_RTS
net: vertexcom: mse102x: Fix RX error handling
Stephan Gerhold (1):
irqchip/qcom-mpm: Prevent crash when trying to handle non-wake GPIOs
Sudeep Holla (1):
firmware: arm_ffa: Skip Rx buffer ownership release if not acquired
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
Vladimir Oltean (3):
net: mscc: ocelot: treat 802.1ad tagged traffic as 802.1Q-untagged
net: mscc: ocelot: delete PVID VLAN when readding it as non-PVID
net: dsa: felix: fix broken taprio gate states after clock jump
Wengang Wang (1):
xfs: make sure sb_fdblocks is non-negative
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
Xuanqiang Luo (1):
ice: Check VF VSI Pointer Value in ice_vc_add_fdir_fltr()
Yonglong Liu (1):
net: hns3: fix an interrupt residual problem
Yu Kuai (1):
md: move initialization and destruction of 'io_acct_set' to md.c
Zhang Yi (4):
xfs: match lock mode in xfs_buffered_write_iomap_begin()
xfs: make the seq argument to xfs_bmapi_convert_delalloc() optional
xfs: make xfs_bmapi_convert_delalloc() to allocate the target offset
xfs: convert delayed extents to unwritten when zeroing post eof blocks
hersen wu (1):
drm/amd/display: phase2 enable mst hdcp multiple displays
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 137 +SUBLEVEL = 138 EXTRAVERSION = NAME = Curry Ramen
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
@@ -891,10 +891,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/events/intel/core.c +1 -1
@@ -4177,7 +4177,7 @@ static struct perf_guest_switch_msr *intel_guest_get_msrs(int *nr, void *data) arr[pebs_enable] = (struct perf_guest_switch_msr ){ .msr =MSR_IA32_PEBS_ENABLE , .host = cpuc->pebs_enabled & ~cpuc->intel_ctrl_guest_mask, - .guest = pebs_mask & ~cpuc->intel_ctrl_host_mask, + .guest = pebs_mask & ~cpuc->intel_ctrl_host_mask & kvm_pmu->pebs_enable, };if (arr[pebs_enable].host) {
arch/x86/include/asm/kexec.h +4 -14
@@ -16,7 +16,6 @@# define PAGES_NR 4#endif -# define KEXEC_CONTROL_PAGE_SIZE 4096# define KEXEC_CONTROL_CODE_MAX_SIZE 2048#ifndef __ASSEMBLY__
@@ -45,6 +44,7 @@ struct kimage;/* Maximum address we can use for the control code buffer */ # define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE +# define KEXEC_CONTROL_PAGE_SIZE 4096/* The native architecture */ # define KEXEC_ARCH KEXEC_ARCH_386
@@ -59,6 +59,9 @@ struct kimage;/* Maximum address we can use for the control pages */ # define KEXEC_CONTROL_MEMORY_LIMIT (MAXMEM-1) +/* Allocate one page for the pdp and the second for the code */ +# define KEXEC_CONTROL_PAGE_SIZE (4096UL + 4096UL) +/* The native architecture */ # define KEXEC_ARCH KEXEC_ARCH_X86_64#endif
@@ -143,19 +146,6 @@ struct kimage_arch { }; #else struct kimage_arch { - /* - * This is a kimage control page, as it must not overlap with either - * source or destination address ranges. - */ - pgd_t *pgd; - /* - * The virtual mapping of the control code page itself is used only - * during the transition, while the current kernel's pages are all - * in place. Thus the intermediate page table pages used to map it - * are not control pages, but instead just normal pages obtained - * with get_zeroed_page(). And have to be tracked (below) so that - * they can be freed. - */ p4d_t *p4d; pud_t *pud; pmd_t *pmd;
arch/x86/include/asm/kvm-x86-ops.h +1 -0
@@ -47,6 +47,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
@@ -1499,6 +1499,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/kernel/machine_kexec_64.c +21 -24
123 lines not on this page · raw message
arch/x86/kvm/svm/svm.c +6 -7
@@ -1920,11 +1920,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)) {
@@ -4035,10 +4035,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);
@@ -4807,6 +4805,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
@@ -5536,6 +5536,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);
@@ -7220,10 +7226,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
@@ -8168,6 +8170,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
@@ -10841,6 +10841,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/cpufreq/cpufreq.c +33 -9
74 lines not on this page · raw message
drivers/cpufreq/cpufreq_ondemand.c +2 -1
@@ -77,7 +77,8 @@ static unsigned int generic_powersave_bias_target(struct cpufreq_policy *policy,return freq_next; } - index =cpufreq_frequency_table_target (policy, freq_next, relation); + index =cpufreq_frequency_table_target (policy, freq_next, policy->min, + policy->max, relation); freq_req = freq_table[index].frequency; freq_reduc = freq_req * od_tuners->powersave_bias /1000 ; freq_avg = freq_req - freq_reduc;
drivers/cpufreq/freq_table.c +3 -3
@@ -116,8 +116,8 @@ int cpufreq_generic_frequency_table_verify(struct cpufreq_policy_data *policy)EXPORT_SYMBOL_GPL (cpufreq_generic_frequency_table_verify);int cpufreq_table_index_unsorted (struct cpufreq_policy *policy, -unsigned int target_freq, -unsigned int relation) +unsigned int target_freq,unsigned int min, +unsigned int max,unsigned int relation) {struct cpufreq_frequency_table optimal = { .driver_data = ~0 ,
@@ -148,7 +148,7 @@ int cpufreq_table_index_unsorted(struct cpufreq_policy *policy,cpufreq_for_each_valid_entry_idx (pos, table, i) { freq = pos->frequency; -if ((freq < policy->min) || (freq > policy->max)) +if (freq < min || freq > max)continue ;if (freq == target_freq) { optimal.driver_data = i;
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 ));
@@ -2138,6 +2135,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_ffa/driver.c +2 -1
@@ -306,7 +306,8 @@ __ffa_partition_info_get(u32 uuid0, u32 uuid1, u32 uuid2, u32 uuid3,memcpy (buffer + idx, drv_info->rx_buffer + idx * sz, buf_sz); -ffa_rx_release (); +if (!(flags &PARTITION_INFO_GET_RETURN_COUNT_ONLY )) +ffa_rx_release ();mutex_unlock (&drv_info->rx_lock);
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/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c +247 -182
714 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.h +2 -3
@@ -43,7 +43,7 @@ struct hdcp_workqueue {struct delayed_work callback_dwork;struct delayed_work watchdog_timer_dwork;struct delayed_work property_validate_dwork; -struct amdgpu_dm_connector *aconnector; +struct amdgpu_dm_connector *aconnector[AMDGPU_DM_MAX_DISPLAY_INDEX ];struct mutex mutex;struct mod_hdcp hdcp;
@@ -51,8 +51,7 @@ struct hdcp_workqueue {struct mod_hdcp_display display;struct mod_hdcp_link link; -enum mod_hdcp_encryption_status encryption_status; - +enum mod_hdcp_encryption_status encryption_status[AMDGPU_DM_MAX_DISPLAY_INDEX ];/* when display is unplugged from mst hub, connctor will be * destroyed within dm_dp_mst_connector_destroy. connector * hdcp perperties, like type, undesired, desired, enabled,
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
@@ -3610,6 +3610,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
@@ -4836,6 +4836,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);
@@ -4913,7 +4916,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
@@ -262,7 +262,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;
@@ -277,7 +277,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;
@@ -404,7 +404,7 @@ static int __init gicv2m_init_one(struct fwnode_handle *fwnode,return ret; } -static const struct of_device_id gicv2m_device_id[] = { +static __initconst struct of_device_id gicv2m_device_id[] = { { .compatible ="arm,gic-v2m-frame" , }, {}, };
@@ -469,7 +469,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/irqchip/irq-qcom-mpm.c +3 -0
@@ -226,6 +226,9 @@ static int qcom_mpm_alloc(struct irq_domain *domain, unsigned int virq,if (ret)return ret; +if (pin ==GPIO_NO_WAKE_IRQ ) +return irq_domain_disconnect_hierarchy (domain, virq); + ret =irq_domain_set_hwirq_and_chip (domain, virq, pin, &qcom_mpm_chip, priv);if (ret)
drivers/md/dm-bufio.c +2 -1
@@ -1685,7 +1685,8 @@ static void __scan(struct dm_bufio_client *c)atomic_long_dec (&c->need_shrink); freed++; } -cond_resched (); +if (!(static_branch_unlikely (&no_sleep_enabled) && c->no_sleep)) +cond_resched (); } } }
drivers/md/dm-integrity.c +1 -1
@@ -4637,7 +4637,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
@@ -502,8 +502,9 @@ static char **realloc_argv(unsigned int *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/md/md.c +10 -17
@@ -5965,6 +5965,13 @@ int md_run(struct mddev *mddev) goto exit_bio_set; } +if (!bioset_initialized (&mddev->io_acct_set)) { + err =bioset_init (&mddev->io_acct_set,BIO_POOL_SIZE , + offsetof(struct md_io_acct , bio_clone),0 ); +if (err) + goto exit_sync_set; + } +spin_lock (&pers_lock); pers =find_pers (mddev->level, mddev->clevel);if (!pers || !try_module_get (pers->owner)) {
@@ -6142,6 +6149,8 @@ int md_run(struct mddev *mddev)module_put (pers->owner);md_bitmap_destroy (mddev); abort: +bioset_exit (&mddev->io_acct_set); +exit_sync_set:bioset_exit (&mddev->sync_set); exit_bio_set:bioset_exit (&mddev->bio_set);
@@ -6374,6 +6383,7 @@ static void __md_stop(struct mddev *mddev)percpu_ref_exit (&mddev->active_io);bioset_exit (&mddev->bio_set);bioset_exit (&mddev->sync_set); +bioset_exit (&mddev->io_acct_set); }void md_stop (struct mddev *mddev)
@@ -8744,23 +8754,6 @@ void md_submit_discard_bio(struct mddev *mddev, struct md_rdev *rdev, }EXPORT_SYMBOL_GPL (md_submit_discard_bio); -int acct_bioset_init (struct mddev *mddev) -{ -int err =0 ; - -if (!bioset_initialized (&mddev->io_acct_set)) - err =bioset_init (&mddev->io_acct_set,BIO_POOL_SIZE , - offsetof(struct md_io_acct , bio_clone),0 ); -return err; -} -EXPORT_SYMBOL_GPL (acct_bioset_init); - -void acct_bioset_exit (struct mddev *mddev) -{ -bioset_exit (&mddev->io_acct_set); -} -EXPORT_SYMBOL_GPL (acct_bioset_exit); -static void md_end_io_acct (struct bio *bio) {struct md_io_acct *md_io_acct = bio->bi_private;
drivers/md/md.h +0 -2
@@ -746,8 +746,6 @@ extern void md_error(struct mddev *mddev, struct md_rdev *rdev);extern void md_finish_reshape (struct mddev *mddev);void md_submit_discard_bio (struct mddev *mddev,struct md_rdev *rdev,struct bio *bio,sector_t start,sector_t size); -int acct_bioset_init (struct mddev *mddev); -void acct_bioset_exit (struct mddev *mddev);void md_account_bio (struct mddev *mddev,struct bio **bio);extern bool __must_check md_flush_request (struct mddev *mddev,struct bio *bio);
drivers/md/raid0.c +2 -14
@@ -377,7 +377,6 @@ static void raid0_free(struct mddev *mddev, void *priv)struct r0conf *conf = priv;free_conf (mddev, conf); -acct_bioset_exit (mddev); }static int raid0_run (struct mddev *mddev)
@@ -392,16 +391,11 @@ static int raid0_run(struct mddev *mddev)if (md_check_no_bitmap (mddev))return -EINVAL ; -if (acct_bioset_init (mddev)) { -pr_err ("md/raid0:%s: alloc acct bioset failed.\n" ,mdname (mddev)); -return -ENOMEM ; - } -/* if private is not null, we are here after takeover */ if (mddev->private ==NULL ) { ret =create_strip_zones (mddev, &conf);if (ret <0 ) - goto exit_acct_set; +return ret; mddev->private = conf; } conf = mddev->private;
@@ -432,15 +426,9 @@ static int raid0_run(struct mddev *mddev) ret =md_integrity_register (mddev);if (ret) - goto free; +free_conf (mddev, conf);return ret; - -free: -free_conf (mddev, conf); -exit_acct_set: -acct_bioset_exit (mddev); -return ret; }/*
drivers/md/raid5.c +11 -30
104 lines not on this page · raw message
drivers/mmc/host/renesas_sdhi_core.c +4 -6
@@ -1109,26 +1109,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);
@@ -1140,8 +1140,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/dsa/ocelot/felix_vsc9959.c +4 -1
@@ -1517,7 +1517,7 @@ static void vsc9959_tas_clock_adjust(struct ocelot *ocelot)struct tc_taprio_qopt_offload *taprio;struct ocelot_port *ocelot_port;struct timespec64 base_ts; -int port; +int i, port;u32 val;mutex_lock (&ocelot->tas_lock);
@@ -1549,6 +1549,9 @@ static void vsc9959_tas_clock_adjust(struct ocelot *ocelot)QSYS_PARAM_CFG_REG_3_BASE_TIME_SEC_MSB_M , QSYS_PARAM_CFG_REG_3); +for (i =0 ; i < taprio->num_entries; i++) +vsc9959_tas_gcl_set (ocelot, i, &taprio->entries[i]); +ocelot_rmw (ocelot,QSYS_TAS_PARAM_CFG_CTRL_CONFIG_CHANGE ,QSYS_TAS_PARAM_CFG_CTRL_CONFIG_CHANGE ,QSYS_TAS_PARAM_CFG_CTRL );
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
@@ -2257,10 +2257,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
@@ -859,6 +859,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
@@ -1392,6 +1392,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) {
@@ -1423,12 +1434,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
@@ -352,7 +352,7 @@ parse_eeprom (struct net_device *dev)eth_hw_addr_set (dev, psrom->mac_addr);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
@@ -692,7 +692,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/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 +39 -43
147 lines not on this page · raw message
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
@@ -1309,9 +1309,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,
@@ -1320,6 +1319,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
@@ -2198,12 +2210,13 @@ static int hclgevf_rss_init_hw(struct hclgevf_dev *hdev) tc_valid, tc_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);
@@ -2872,7 +2885,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);
@@ -2985,7 +2998,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
@@ -253,6 +253,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_virtchnl_fdir.c +5 -0
@@ -1811,6 +1811,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/mediatek/mtk_star_emac.c +7 -6
@@ -1164,6 +1164,7 @@ static int mtk_star_tx_poll(struct napi_struct *napi, int budget)struct net_device *ndev = priv->ndev;unsigned int head = ring->head;unsigned int entry = ring->tail; +unsigned long flags;while (entry != head && count < (MTK_STAR_RING_NUM_DESCS -1 )) { ret =mtk_star_tx_complete_one (priv);
@@ -1183,9 +1184,9 @@ static int mtk_star_tx_poll(struct napi_struct *napi, int budget)netif_wake_queue (ndev);if (napi_complete (napi)) { -spin_lock (&priv->lock); +spin_lock_irqsave (&priv->lock, flags);mtk_star_enable_dma_irq (priv, false, true); -spin_unlock (&priv->lock); +spin_unlock_irqrestore (&priv->lock, flags); }return 0 ;
@@ -1342,16 +1343,16 @@ static int mtk_star_rx(struct mtk_star_priv *priv, int budget)static int mtk_star_rx_poll (struct napi_struct *napi,int budget) {struct mtk_star_priv *priv; +unsigned long flags;int work_done =0 ; priv = container_of(napi, struct mtk_star_priv, rx_napi); work_done =mtk_star_rx (priv, budget); -if (work_done < budget) { -napi_complete_done (napi, work_done); -spin_lock (&priv->lock); +if (work_done < budget &&napi_complete_done (napi, work_done)) { +spin_lock_irqsave (&priv->lock, flags);mtk_star_enable_dma_irq (priv, true, false); -spin_unlock (&priv->lock); +spin_unlock_irqrestore (&priv->lock, flags); }return work_done;
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +4 -1
@@ -3320,7 +3320,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)
@@ -3378,6 +3380,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
@@ -1943,6 +1943,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);
@@ -2012,6 +2013,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 ; }
@@ -2052,16 +2054,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
@@ -974,6 +974,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/ethernet/mscc/ocelot.c +183 -11
244 lines not on this page · raw message
drivers/net/ethernet/mscc/ocelot_vcap.c +1 -0
@@ -695,6 +695,7 @@ static void is1_entry_set(struct ocelot *ocelot, int ix,vcap_key_bit_set (vcap, &data,VCAP_IS1_HK_L2_MC , filter->dmac_mc);vcap_key_bit_set (vcap, &data,VCAP_IS1_HK_L2_BC , filter->dmac_bc);vcap_key_bit_set (vcap, &data,VCAP_IS1_HK_VLAN_TAGGED , tag->tagged); +vcap_key_bit_set (vcap, &data,VCAP_IS1_HK_TPID , tag->tpid);vcap_key_set (vcap, &data,VCAP_IS1_HK_VID , tag->vid.value, tag->vid.mask); vcap_key_set(vcap, &data, VCAP_IS1_HK_PCP,
drivers/net/ethernet/vertexcom/mse102x.c +29 -7
@@ -6,6 +6,7 @@#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt +#include <linux/if_vlan.h> #include <linux/interrupt.h> #include <linux/module.h> #include <linux/kernel.h>
@@ -33,7 +34,7 @@#define CMD_CTR (0x2 << CMD_SHIFT)#define CMD_MASK GENMASK(15, CMD_SHIFT) -#define LEN_MASK GENMASK(CMD_SHIFT - 1, 0) +#define LEN_MASK GENMASK(CMD_SHIFT - 2, 0)#define DET_CMD_LEN 4#define DET_SOF_LEN 2
@@ -262,7 +263,7 @@ static int mse102x_tx_frame_spi(struct mse102x_net *mse, struct sk_buff *txp, }static int mse102x_rx_frame_spi (struct mse102x_net *mse,u8 *buff, -unsigned int frame_len) +unsigned int frame_len,bool drop) {struct mse102x_net_spi *mses =to_mse102x_spi (mse);struct spi_transfer *xfer = &mses->spi_xfer;
@@ -280,6 +281,9 @@ static int mse102x_rx_frame_spi(struct mse102x_net *mse, u8 *buff,netdev_err (mse->ndev,"%s: spi_sync() failed: %d\n" , __func__, ret); mse->stats.xfer_err++; + }else if (drop) { +netdev_dbg (mse->ndev,"%s: Drop frame\n" , __func__); + ret = -EINVAL ; }else if (*sof !=cpu_to_be16 (DET_SOF )) {netdev_dbg (mse->ndev,"%s: SPI start of frame is invalid (0x%04x)\n" , __func__, *sof);
@@ -307,6 +311,7 @@ static void mse102x_rx_pkt_spi(struct mse102x_net *mse)struct sk_buff *skb;unsigned int rxalign;unsigned int rxlen; +bool drop = false;__be16 rx =0 ;u16 cmd_resp;u8 *rxpkt;
@@ -329,7 +334,8 @@ static void mse102x_rx_pkt_spi(struct mse102x_net *mse)net_dbg_ratelimited ("%s: Unexpected response (0x%04x)\n" , __func__, cmd_resp); mse->stats.invalid_rts++; -return ; + drop = true; + goto drop; } net_dbg_ratelimited("%s: Unexpected response to first CMD\n",
@@ -337,12 +343,20 @@ static void mse102x_rx_pkt_spi(struct mse102x_net *mse) } rxlen = cmd_resp &LEN_MASK ; -if (!rxlen) { -net_dbg_ratelimited ("%s: No frame length defined\n" , __func__); +if (rxlen <ETH_ZLEN || rxlen >VLAN_ETH_FRAME_LEN ) { +net_dbg_ratelimited ("%s: Invalid frame length: %d\n" , __func__, + rxlen); mse->stats.invalid_len++; -return ; + drop = true; } +/* In case of a invalid CMD_RTS, the frame must be consumed anyway. +* So assume the maximum possible frame length. +*/ +drop: +if (drop) + rxlen =VLAN_ETH_FRAME_LEN ; + rxalign =ALIGN (rxlen +DET_SOF_LEN +DET_DFT_LEN ,4 ); skb =netdev_alloc_skb_ip_align (mse->ndev, rxalign);if (!skb)
@@ -353,7 +367,7 @@ static void mse102x_rx_pkt_spi(struct mse102x_net *mse)* They are copied, but ignored. */ rxpkt =skb_put (skb, rxlen) -DET_SOF_LEN ; -if (mse102x_rx_frame_spi (mse, rxpkt, rxlen)) { +if (mse102x_rx_frame_spi (mse, rxpkt, rxlen, drop)) { mse->ndev->stats.rx_errors++;dev_kfree_skb (skb);return ;
@@ -509,6 +523,7 @@ static irqreturn_t mse102x_irq(int irq, void *_mse)static int mse102x_net_open (struct net_device *ndev) {struct mse102x_net *mse =netdev_priv (ndev); +struct mse102x_net_spi *mses =to_mse102x_spi (mse);int ret; ret = request_threaded_irq(ndev->irq, NULL, mse102x_irq, IRQF_ONESHOT,
@@ -524,6 +539,13 @@ static int mse102x_net_open(struct net_device *ndev)netif_carrier_on (ndev); +/* The SPI interrupt can stuck in case of pending packet(s). +* So poll for possible packet(s) to re-arm the interrupt. +*/ +mutex_lock (&mses->lock); +mse102x_rx_pkt_spi (mse); +mutex_unlock (&mses->lock); +netif_dbg (mse, ifup, ndev,"network device up\n" );return 0 ;
drivers/net/phy/microchip.c +3 -43
58 lines not on this page · raw message
drivers/net/usb/rndis_host.c +2 -14
@@ -630,16 +630,6 @@ static const struct driver_info zte_rndis_info = { .tx_fixup = rndis_tx_fixup, }; -static const struct driver_info wwan_rndis_info = { - .description ="Mobile Broadband RNDIS device" , - .flags =FLAG_WWAN |FLAG_POINTTOPOINT |FLAG_FRAMING_RN |FLAG_NO_SETINT , - .bind = rndis_bind, - .unbind = rndis_unbind, - .status = rndis_status, - .rx_fixup = rndis_rx_fixup, - .tx_fixup = rndis_tx_fixup, -}; -/*-------------------------------------------------------------------------*/ static const struct usb_device_id products [] = {
@@ -676,11 +666,9 @@ static const struct usb_device_id products [] = { USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3), .driver_info = (unsigned long) &rndis_info, }, { -/* Mobile Broadband Modem, seen in Novatel Verizon USB730L and -* Telit FN990A (RNDIS) -*/ +/* Novatel Verizon USB730L */ USB_INTERFACE_INFO(USB_CLASS_MISC, 4, 1), - .driver_info = (unsigned long)&wwan_rndis_info, + .driver_info = (unsigned long) &rndis_info, }, { }, // END };
drivers/net/vxlan/vxlan_vnifilter.c +7 -1
@@ -627,7 +627,11 @@ static void vxlan_vni_delete_group(struct vxlan_dev *vxlan,* default dst remote_ip previously added for this vni */ if (!vxlan_addr_any (&vninode->remote_ip) || - !vxlan_addr_any (&dst->remote_ip)) + !vxlan_addr_any (&dst->remote_ip)) { +u32 hash_index =fdb_head_index (vxlan, all_zeros_mac, + vninode->vni); + +spin_lock_bh (&vxlan->hash_lock[hash_index]); __vxlan_fdb_delete(vxlan, all_zeros_mac, (vxlan_addr_any(&vninode->remote_ip) ? dst->remote_ip : vninode->remote_ip),
@@ -635,6 +639,8 @@ static void vxlan_vni_delete_group(struct vxlan_dev *vxlan, vninode->vni, vninode->vni, dst->remote_ifindex, true); +spin_unlock_bh (&vxlan->hash_lock[hash_index]); + }if (vxlan->dev->flags &IFF_UP ) { if (vxlan_addr_multicast(&vninode->remote_ip) &&
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/net/wireless/purelifi/plfxlc/mac.c +0 -1
@@ -103,7 +103,6 @@ int plfxlc_mac_init_hw(struct ieee80211_hw *hw)void plfxlc_mac_release (struct plfxlc_mac *mac) {plfxlc_chip_release (&mac->chip); -lockdep_assert_held (&mac->lock); }int plfxlc_op_start (struct ieee80211_hw *hw)
drivers/nvme/host/tcp.c +29 -2
@@ -1686,7 +1686,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];
@@ -1700,6 +1700,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);
@@ -1766,7 +1791,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/pci/controller/dwc/pci-imx6.c +2 -3
@@ -1172,11 +1172,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/platform/x86/intel/uncore-frequency/uncore-frequency.c +9 -4
@@ -121,15 +121,13 @@ static int uncore_event_cpu_online(unsigned int cpu) {struct uncore_data *data;int target; +int ret;/* Check if there is an online cpu in the package for uncore MSR */ target =cpumask_any_and (&uncore_cpu_mask,topology_die_cpumask (cpu));if (target < nr_cpu_ids)return 0 ; -/* Use this CPU on this die as a control CPU */ -cpumask_set_cpu (cpu, &uncore_cpu_mask); - data =uncore_get_instance (cpu);if (!data)return 0 ;
@@ -137,7 +135,14 @@ static int uncore_event_cpu_online(unsigned int cpu) data->package_id =topology_physical_package_id (cpu); data->die_id =topology_die_id (cpu); -return uncore_freq_add_entry (data, cpu); + ret =uncore_freq_add_entry (data, cpu); +if (ret) +return ret; + +/* Use this CPU on this die as a control CPU */ +cpumask_set_cpu (cpu, &uncore_cpu_mask); + +return 0 ; }static int uncore_event_cpu_offline (unsigned int cpu)
fs/smb/server/auth.c +13 -1
@@ -544,7 +544,19 @@ int ksmbd_krb5_authenticate(struct ksmbd_session *sess, char *in_blob, retval = -ENOMEM ; goto out; } - sess->user = user; + +if (!sess->user) { +/* First successful authentication */ + sess->user = user; + }else { +if (!ksmbd_compare_user (sess->user, user)) { +ksmbd_debug (AUTH ,"different user tried to reuse session\n" ); + retval = -EPERM ; +ksmbd_free_user (user); + goto out; + } +ksmbd_free_user (user); + }memcpy (sess->sess_key, resp->payload, resp->session_key_len); memcpy(out_blob, resp->payload + resp->session_key_len,
fs/smb/server/smb2pdu.c +0 -5
@@ -1615,11 +1615,6 @@ static int krb5_authenticate(struct ksmbd_work *work,if (prev_sess_id && prev_sess_id != sess->id)destroy_previous_session (conn, sess->user, prev_sess_id); -if (sess->state ==SMB2_SESSION_VALID ) { -ksmbd_free_user (sess->user); - sess->user =NULL ; - } - retval =ksmbd_krb5_authenticate (sess, in_blob, in_len, out_blob, &out_len);if (retval) {
fs/xfs/libxfs/xfs_attr_remote.c +0 -1
@@ -619,7 +619,6 @@ xfs_attr_rmtval_set_blk(if (error)return error; -ASSERT (nmap ==1 );ASSERT ((map->br_startblock !=DELAYSTARTBLOCK ) && (map->br_startblock !=HOLESTARTBLOCK ));
fs/xfs/libxfs/xfs_bmap.c +109 -21
73 lines not on this page · raw message
fs/xfs/libxfs/xfs_inode_buf.c +40 -7
47 lines not on this page · raw message
fs/xfs/xfs_aops.c +14 -40
54 lines not on this page · raw message
fs/xfs/xfs_attr_item.c +76 -12
88 lines not on this page · raw message
fs/xfs/xfs_bmap_util.c +37 -24
61 lines not on this page · raw message
fs/xfs/xfs_iomap.c +46 -35
81 lines not on this page · raw message
include/linux/cpufreq.h +54 -29
83 lines not on this page · raw message
net/ipv4/udp_offload.c +60 -1
61 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.