Linux 5.16.12
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 16 -SUBLEVEL = 11 +SUBLEVEL = 12 EXTRAVERSION = NAME = Gobble Gobble
arch/parisc/kernel/unaligned.c +7 -7
@@ -340,7 +340,7 @@ static int emulate_stw(struct pt_regs *regs, int frreg, int flop) : "r" (val), "r" (regs->ior), "r" (regs->isr) : "r19", "r20", "r21", "r22", "r1", FIXUP_BRANCH_CLOBBER ); -return 0 ; +return ret; }static int emulate_std (struct pt_regs *regs,int frreg,int flop) {
@@ -397,7 +397,7 @@ static int emulate_std(struct pt_regs *regs, int frreg, int flop) __asm__ __volatile__ (" mtsp %4, %%sr1\n" " zdep %2, 29, 2, %%r19\n" -" dep %%r0, 31, 2, %2\n" +" dep %%r0, 31, 2, %3\n" " mtsar %%r19\n" " zvdepi -2, 32, %%r19\n" "1: ldw 0(%%sr1,%3),%%r20\n"
@@ -409,7 +409,7 @@ static int emulate_std(struct pt_regs *regs, int frreg, int flop)" andcm %%r21, %%r19, %%r21\n" " or %1, %%r20, %1\n" " or %2, %%r21, %2\n" -"3: stw %1,0(%%sr1,%1)\n" +"3: stw %1,0(%%sr1,%3)\n" "4: stw %%r1,4(%%sr1,%3)\n" "5: stw %2,8(%%sr1,%3)\n" " copy %%r0, %0\n"
@@ -596,7 +596,6 @@ void handle_unaligned(struct pt_regs *regs) ret =ERR_NOTHANDLED ;/* "undefined", but lets kill them. */ break ; } -#ifdef CONFIG_PA20 switch (regs->iir &OPCODE2_MASK ) {case OPCODE_FLDD_L :
@@ -607,22 +606,23 @@ void handle_unaligned(struct pt_regs *regs) flop=1 ; ret =emulate_std (regs,R2 (regs->iir),1 );break ; +#ifdef CONFIG_PA20 case OPCODE_LDD_L : ret =emulate_ldd (regs,R2 (regs->iir),0 );break ;case OPCODE_STD_L : ret =emulate_std (regs,R2 (regs->iir),0 );break ; - }#endif + }switch (regs->iir &OPCODE3_MASK ) {case OPCODE_FLDW_L : flop=1 ; - ret =emulate_ldw (regs,R2 (regs->iir),0 ); + ret =emulate_ldw (regs,R2 (regs->iir),1 );break ;case OPCODE_LDW_M : - ret =emulate_ldw (regs,R2 (regs->iir),1 ); + ret =emulate_ldw (regs,R2 (regs->iir),0 );break ;case OPCODE_FSTW_L :
arch/riscv/configs/nommu_k210_sdcard_defconfig +1 -1
@@ -23,7 +23,7 @@ CONFIG_SLOB=y CONFIG_SOC_CANAAN=y CONFIG_SMP=y CONFIG_NR_CPUS=2 -CONFIG_CMDLINE="earlycon console=ttySIF0 rootdelay=2 root=/dev/mmcblk0p1 ro" +CONFIG_CMDLINE="earlycon console=ttySIF0 root=/dev/mmcblk0p1 rootwait ro" CONFIG_CMDLINE_FORCE=y # CONFIG_SECCOMP is not set # CONFIG_STACKPROTECTOR is not set
arch/riscv/kernel/Makefile +2 -0
@@ -50,6 +50,8 @@ obj-$(CONFIG_MODULE_SECTIONS) += module-sections.o obj-$(CONFIG_FUNCTION_TRACER) += mcount.o ftrace.o obj-$(CONFIG_DYNAMIC_FTRACE) += mcount-dyn.o +obj-$(CONFIG_TRACE_IRQFLAGS) += trace_irq.o + obj-$(CONFIG_RISCV_BASE_PMU) += perf_event.o obj-$(CONFIG_PERF_EVENTS) += perf_callchain.o obj-$(CONFIG_HAVE_PERF_REGS) += perf_regs.o
arch/riscv/kernel/entry.S +5 -5
@@ -108,7 +108,7 @@ _save_context: .option pop #ifdef CONFIG_TRACE_IRQFLAGS - call trace_hardirqs_off + call __trace_hardirqs_off #endif #ifdef CONFIG_CONTEXT_TRACKING
@@ -143,7 +143,7 @@ skip_context_tracking: li t0, EXC_BREAKPOINT beq s4, t0, 1f #ifdef CONFIG_TRACE_IRQFLAGS - call trace_hardirqs_on + call __trace_hardirqs_on #endif csrs CSR_STATUS, SR_IE
@@ -234,7 +234,7 @@ ret_from_exception: REG_L s0, PT_STATUS(sp) csrc CSR_STATUS, SR_IE #ifdef CONFIG_TRACE_IRQFLAGS - call trace_hardirqs_off + call __trace_hardirqs_off #endif #ifdef CONFIG_RISCV_M_MODE /* the MPP value is too large to be used as an immediate arg for addi */
@@ -270,10 +270,10 @@ restore_all: REG_L s1, PT_STATUS(sp) andi t0, s1, SR_PIE beqz t0, 1f - call trace_hardirqs_on + call __trace_hardirqs_on j 2f 1: - call trace_hardirqs_off + call __trace_hardirqs_off 2: #endif REG_L a0, PT_STATUS(sp)
arch/riscv/kernel/trace_irq.c new file +27 -0
@@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* Copyright (C) 2022 Changbin Du <[email protected]> +*/ + +#include <linux/irqflags.h> +#include <linux/kprobes.h> +#include "trace_irq.h" + +/* +* trace_hardirqs_on/off require the caller to setup frame pointer properly. +* Otherwise, CALLER_ADDR1 might trigger an pagging exception in kernel. +* Here we add one extra level so they can be safely called by low +* level entry code which $fp is used for other purpose. +*/ + +void __trace_hardirqs_on (void ) +{ +trace_hardirqs_on (); +} +NOKPROBE_SYMBOL (__trace_hardirqs_on); + +void __trace_hardirqs_off (void ) +{ +trace_hardirqs_off (); +} +NOKPROBE_SYMBOL (__trace_hardirqs_off);
arch/riscv/kernel/trace_irq.h new file +11 -0
@@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* +* Copyright (C) 2022 Changbin Du <[email protected]> +*/ +#ifndef __TRACE_IRQ_H +#define __TRACE_IRQ_H + +void __trace_hardirqs_on (void ); +void __trace_hardirqs_off (void ); + +#endif /* __TRACE_IRQ_H */
arch/x86/kvm/mmu/mmu.c +12 -1
@@ -3905,12 +3905,23 @@ static void shadow_page_table_clear_flood(struct kvm_vcpu *vcpu, gva_t addr)walk_shadow_page_lockless_end (vcpu); } +static u32 alloc_apf_token (struct kvm_vcpu *vcpu) +{ +/* make sure the token value is not 0 */ +u32 id = vcpu->arch.apf.id; + +if (id <<12 ==0 ) + vcpu->arch.apf.id =1 ; + +return (vcpu->arch.apf.id++ <<12 ) | vcpu->vcpu_id; +} +static bool kvm_arch_setup_async_pf (struct kvm_vcpu *vcpu,gpa_t cr2_or_gpa,gfn_t gfn) {struct kvm_arch_async_pf arch; - arch.token = (vcpu->arch.apf.id++ <<12 ) | vcpu->vcpu_id; + arch.token =alloc_apf_token (vcpu); arch.gfn = gfn; arch.direct_map = vcpu->arch.mmu->direct_map; arch.cr3 = vcpu->arch.mmu->get_guest_pgd (vcpu);
arch/x86/kvm/svm/svm.c +17 -2
@@ -2903,8 +2903,23 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)u64 data = msr->data;switch (ecx) {case MSR_AMD64_TSC_RATIO : -if (!msr->host_initiated && !svm->tsc_scaling_enabled) -return 1 ; + +if (!svm->tsc_scaling_enabled) { + +if (!msr->host_initiated) +return 1 ; +/* +* In case TSC scaling is not enabled, always +* leave this MSR at the default value. +* +* Due to bug in qemu 6.2.0, it would try to set +* this msr to 0 if tsc scaling is not enabled. +* Ignore this value as well. +*/ +if (data !=0 && data != svm->tsc_ratio_msr) +return 1 ; +break ; + }if (data &TSC_RATIO_RSVD )return 1 ;
block/fops.c +2 -0
@@ -289,6 +289,8 @@ static void blkdev_bio_end_io_async(struct bio *bio)struct kiocb *iocb = dio->iocb;ssize_t ret; +WRITE_ONCE (iocb->private,NULL ); +if (likely (!bio->bi_status)) { ret = dio->size; iocb->ki_pos += ret;
drivers/ata/pata_hpt37x.c +14 -0
@@ -919,6 +919,20 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id) irqmask &= ~0x10 ;pci_write_config_byte (dev,0x5a , irqmask); +/* +* HPT371 chips physically have only one channel, the secondary one, +* but the primary channel registers do exist! Go figure... +* So, we manually disable the non-existing channel here +* (if the BIOS hasn't done this already). +*/ +if (dev->device ==PCI_DEVICE_ID_TTI_HPT371 ) { +u8 mcr1; + +pci_read_config_byte (dev,0x50 , &mcr1); + mcr1 &= ~0x04 ; +pci_write_config_byte (dev,0x50 , mcr1); + } +/* * default to pci clock. make sure MA15/16 are set to output * to prevent drives having problems with 40-pin cables. Needed
drivers/base/dd.c +5 -0
@@ -629,6 +629,9 @@ static int really_probe(struct device *dev, struct device_driver *drv) drv->remove (dev);devres_release_all (dev); +arch_teardown_dma_ops (dev); +kfree (dev->dma_range_map); + dev->dma_range_map =NULL ;driver_sysfs_remove (dev); dev->driver =NULL ;dev_set_drvdata (dev,NULL );
@@ -1208,6 +1211,8 @@ static void __device_release_driver(struct device *dev, struct device *parent)devres_release_all (dev);arch_teardown_dma_ops (dev); +kfree (dev->dma_range_map); + dev->dma_range_map =NULL ; dev->driver =NULL ;dev_set_drvdata (dev,NULL );if (dev->pm_domain && dev->pm_domain->dismiss)
drivers/base/regmap/regmap-irq.c +6 -14
@@ -189,11 +189,9 @@ static void regmap_irq_sync_unlock(struct irq_data *data) ret =regmap_write (map, reg, d->mask_buf[i]);if (d->chip->clear_ack) {if (d->chip->ack_invert && !ret) - ret =regmap_write (map, reg, - d->mask_buf[i]); + ret =regmap_write (map, reg,UINT_MAX );else if (!ret) - ret =regmap_write (map, reg, - ~d->mask_buf[i]); + ret =regmap_write (map, reg,0 ); }if (ret !=0 ) dev_err(d->map->dev, "Failed to ack 0x%x: %d\n",
@@ -556,11 +554,9 @@ static irqreturn_t regmap_irq_thread(int irq, void *d) data->status_buf[i]);if (chip->clear_ack) {if (chip->ack_invert && !ret) - ret =regmap_write (map, reg, - data->status_buf[i]); + ret =regmap_write (map, reg,UINT_MAX );else if (!ret) - ret =regmap_write (map, reg, - ~data->status_buf[i]); + ret =regmap_write (map, reg,0 ); }if (ret !=0 ) dev_err(map->dev, "Failed to ack 0x%x: %d\n",
@@ -817,13 +813,9 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode, d->status_buf[i] & d->mask_buf[i]);if (chip->clear_ack) {if (chip->ack_invert && !ret) - ret =regmap_write (map, reg, - (d->status_buf[i] & - d->mask_buf[i])); + ret =regmap_write (map, reg,UINT_MAX );else if (!ret) - ret =regmap_write (map, reg, - ~(d->status_buf[i] & - d->mask_buf[i])); + ret =regmap_write (map, reg,0 ); }if (ret !=0 ) { dev_err(map->dev, "Failed to ack 0x%x: %d\n",
drivers/clk/ingenic/jz4725b-cgu.c +1 -2
@@ -139,11 +139,10 @@ static const struct ingenic_cgu_clk_info jz4725b_cgu_clocks[] = { }, [JZ4725B_CLK_I2S] = { -"i2s" ,CGU_CLK_MUX |CGU_CLK_DIV |CGU_CLK_GATE , +"i2s" ,CGU_CLK_MUX |CGU_CLK_DIV , .parents = { JZ4725B_CLK_EXT, JZ4725B_CLK_PLL_HALF, -1, -1 }, .mux = { CGU_REG_CPCCR, 31, 1 }, .div = { CGU_REG_I2SCDR, 0, 1, 9, -1, -1, -1 }, - .gate = { CGU_REG_CLKGR, 6 }, }, [JZ4725B_CLK_SPI] = {
drivers/clk/qcom/gcc-msm8994.c +9 -97
268 lines not on this page · raw message
drivers/gpio/gpio-rockchip.c +29 -27
69 lines not on this page · raw message
drivers/gpio/gpio-tegra186.c +10 -4
@@ -341,9 +341,12 @@ static int tegra186_gpio_of_xlate(struct gpio_chip *chip,return offset + pin; } +#define to_tegra_gpio (x) container_of((x), struct tegra_gpio, gpio) +static void tegra186_irq_ack (struct irq_data *data) { -struct tegra_gpio *gpio =irq_data_get_irq_chip_data (data); +struct gpio_chip *gc =irq_data_get_irq_chip_data (data); +struct tegra_gpio *gpio =to_tegra_gpio (gc);void __iomem *base; base =tegra186_gpio_get_base (gpio, data->hwirq);
@@ -355,7 +358,8 @@ static void tegra186_irq_ack(struct irq_data *data)static void tegra186_irq_mask (struct irq_data *data) { -struct tegra_gpio *gpio =irq_data_get_irq_chip_data (data); +struct gpio_chip *gc =irq_data_get_irq_chip_data (data); +struct tegra_gpio *gpio =to_tegra_gpio (gc);void __iomem *base;u32 value;
@@ -370,7 +374,8 @@ static void tegra186_irq_mask(struct irq_data *data)static void tegra186_irq_unmask (struct irq_data *data) { -struct tegra_gpio *gpio =irq_data_get_irq_chip_data (data); +struct gpio_chip *gc =irq_data_get_irq_chip_data (data); +struct tegra_gpio *gpio =to_tegra_gpio (gc);void __iomem *base;u32 value;
@@ -385,7 +390,8 @@ static void tegra186_irq_unmask(struct irq_data *data)static int tegra186_irq_set_type (struct irq_data *data,unsigned int type) { -struct tegra_gpio *gpio =irq_data_get_irq_chip_data (data); +struct gpio_chip *gc =irq_data_get_irq_chip_data (data); +struct tegra_gpio *gpio =to_tegra_gpio (gc);void __iomem *base;u32 value;
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +3 -0
@@ -2014,6 +2014,9 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,return -ENODEV ; } +if (amdgpu_aspm ==-1 && !pcie_aspm_enabled (pdev)) + amdgpu_aspm =0 ; +if (amdgpu_virtual_display ||amdgpu_device_asic_has_dc_support (flags &AMD_ASIC_MASK )) supports_atomic = true;
drivers/gpu/drm/amd/amdgpu/soc15.c +6 -3
@@ -619,8 +619,8 @@ soc15_asic_reset_method(struct amdgpu_device *adev)static int soc15_asic_reset (struct amdgpu_device *adev) {/* original raven doesn't have full asic reset */ -if ((adev->apu_flags &AMD_APU_IS_RAVEN ) && - !(adev->apu_flags &AMD_APU_IS_RAVEN2 )) +if ((adev->apu_flags &AMD_APU_IS_RAVEN ) || + (adev->apu_flags &AMD_APU_IS_RAVEN2 ))return 0 ;switch (soc15_asic_reset_method (adev)) {
@@ -1114,8 +1114,11 @@ static int soc15_common_early_init(void *handle)AMD_CG_SUPPORT_SDMA_LS |AMD_CG_SUPPORT_VCN_MGCG ; +/* +* MMHUB PG needs to be disabled for Picasso for +* stability reasons. +*/ adev->pg_flags =AMD_PG_SUPPORT_SDMA | -AMD_PG_SUPPORT_MMHUB |AMD_PG_SUPPORT_VCN ; }else { adev->cg_flags = AMD_CG_SUPPORT_GFX_MGCG |
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +9 -8
@@ -4232,6 +4232,9 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev) }#endif +/* Disable vblank IRQs aggressively for power-saving. */ +adev_to_drm (adev)->vblank_disable_immediate = true; +/* loops over all connectors on the board */ for (i =0 ; i < link_cnt; i++) {struct dc_link *link =NULL ;
@@ -4277,19 +4280,17 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)update_connector_ext_caps (aconnector);if (psr_feature_enabled)amdgpu_dm_set_psr_caps (link); + +/* TODO: Fix vblank control helpers to delay PSR entry to allow this when +* PSR is also supported. +*/ +if (link->psr_settings.psr_feature_enabled) +adev_to_drm (adev)->vblank_disable_immediate = false; } } -/* -* Disable vblank IRQs aggressively for power-saving. -* -* TODO: Fix vblank control helpers to delay PSR entry to allow this when PSR -* is also supported. -*/ -adev_to_drm (adev)->vblank_disable_immediate = !psr_feature_enabled; -/* Software is initialized. Now we can register interrupt handlers. */ switch (adev->asic_type) {#if defined(CONFIG_DRM_AMD_DC_SI )
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c +2 -0
@@ -437,8 +437,10 @@ static void dcn3_get_memclk_states_from_smu(struct clk_mgr *clk_mgr_base) clk_mgr_base->bw_params->clk_table.num_entries = num_levels ? num_levels :1 ;/* Refresh bounding box */ +DC_FP_START (); clk_mgr_base->ctx->dc->res_pool->funcs->update_bw_bounding_box ( clk_mgr->base.ctx->dc, clk_mgr_base->bw_params); +DC_FP_END (); }static bool dcn3_is_smu_present (struct clk_mgr *clk_mgr_base)
drivers/gpu/drm/amd/display/dc/core/dc.c +5 -2
@@ -999,10 +999,13 @@ static bool dc_construct(struct dc *dc, goto fail;#ifdef CONFIG_DRM_AMD_DC_DCN dc->clk_mgr->force_smu_not_present = init_params->force_smu_not_present; -#endif -if (dc->res_pool->funcs->update_bw_bounding_box) +if (dc->res_pool->funcs->update_bw_bounding_box) { +DC_FP_START (); dc->res_pool->funcs->update_bw_bounding_box (dc, dc->clk_mgr->bw_params); +DC_FP_END (); + } +#endif /* Creation of current_state must occur after dc->dml * is initialized in dc_create_resource_pool because
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +0 -4
@@ -1876,10 +1876,6 @@ enum dc_status dc_remove_stream_from_ctx( dc->res_pool, del_pipe->stream_res.stream_enc, false); -/* Release link encoder from stream in new dc_state. */ -if (dc->res_pool->funcs->link_enc_unassign) - dc->res_pool->funcs->link_enc_unassign (new_ctx, del_pipe->stream); -#if defined(CONFIG_DRM_AMD_DC_DCN )if (is_dp_128b_132b_signal (del_pipe)) { update_hpo_dp_stream_engine_usage(
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +31 -1
@@ -418,6 +418,36 @@ static int sienna_cichlid_store_powerplay_table(struct smu_context *smu)return 0 ; } +static int sienna_cichlid_patch_pptable_quirk (struct smu_context *smu) +{ +struct amdgpu_device *adev = smu->adev; +uint32_t *board_reserved; +uint16_t *freq_table_gfx; +uint32_t i; + +/* Fix some OEM SKU specific stability issues */ +GET_PPTABLE_MEMBER (BoardReserved, &board_reserved); +if ((adev->pdev->device ==0x73DF ) && + (adev->pdev->revision ==0XC3 ) && + (adev->pdev->subsystem_device ==0x16C2 ) && + (adev->pdev->subsystem_vendor ==0x1043 )) + board_reserved[0 ] =1387 ; + +GET_PPTABLE_MEMBER (FreqTableGfx, &freq_table_gfx); +if ((adev->pdev->device ==0x73DF ) && + (adev->pdev->revision ==0XC3 ) && + ((adev->pdev->subsystem_device ==0x16C2 ) || + (adev->pdev->subsystem_device ==0x133C )) && + (adev->pdev->subsystem_vendor ==0x1043 )) { +for (i =0 ; i <NUM_GFXCLK_DPM_LEVELS ; i++) { +if (freq_table_gfx[i] >2500 ) + freq_table_gfx[i] =2500 ; + } + } + +return 0 ; +} +static int sienna_cichlid_setup_pptable (struct smu_context *smu) {int ret =0 ;
@@ -438,7 +468,7 @@ static int sienna_cichlid_setup_pptable(struct smu_context *smu)if (ret)return ret; -return ret; +return sienna_cichlid_patch_pptable_quirk (smu); }static int sienna_cichlid_tables_init (struct smu_context *smu)
drivers/gpu/drm/drm_edid.c +1 -1
@@ -5345,6 +5345,7 @@ u32 drm_add_display_info(struct drm_connector *connector, const struct edid *ediif (!(edid->input &DRM_EDID_INPUT_DIGITAL ))return quirks; + info->color_formats |=DRM_COLOR_FORMAT_RGB444 ;drm_parse_cea_ext (connector, edid);/*
@@ -5393,7 +5394,6 @@ u32 drm_add_display_info(struct drm_connector *connector, const struct edid *ediDRM_DEBUG ("%s: Assigning EDID-1.4 digital sink color depth as %d bpc.\n" , connector->name, info->bpc); - info->color_formats |=DRM_COLOR_FORMAT_RGB444 ;if (edid->features &DRM_EDID_FEATURE_RGB_YCRCB444 ) info->color_formats |=DRM_COLOR_FORMAT_YCRCB444 ;if (edid->features &DRM_EDID_FEATURE_RGB_YCRCB422 )
drivers/gpu/drm/i915/display/intel_bw.c +16 -2
@@ -681,6 +681,7 @@ int intel_bw_atomic_check(struct intel_atomic_state *state)unsigned int max_bw_point =0 , max_bw =0 ;unsigned int num_qgv_points = dev_priv->max_bw[0 ].num_qgv_points;unsigned int num_psf_gv_points = dev_priv->max_bw[0 ].num_psf_gv_points; +bool changed = false;u32 mask =0 ;/* FIXME earlier gens need some checks too */
@@ -724,6 +725,8 @@ int intel_bw_atomic_check(struct intel_atomic_state *state) new_bw_state->data_rate[crtc->pipe] = new_data_rate; new_bw_state->num_active_planes[crtc->pipe] = new_active_planes; + changed = true; + drm_dbg_kms(&dev_priv->drm, "pipe %c data rate %u num active planes %u\n", pipe_name(crtc->pipe),
@@ -731,7 +734,19 @@ int intel_bw_atomic_check(struct intel_atomic_state *state) new_bw_state->num_active_planes[crtc->pipe]); } -if (!new_bw_state) + old_bw_state =intel_atomic_get_old_bw_state (state); + new_bw_state =intel_atomic_get_new_bw_state (state); + +if (new_bw_state && +intel_can_enable_sagv (dev_priv, old_bw_state) != +intel_can_enable_sagv (dev_priv, new_bw_state)) + changed = true; + +/* +* If none of our inputs (data rates, number of active +* planes, SAGV yes/no) changed then nothing to do here. +*/ +if (!changed)return 0 ; ret =intel_atomic_lock_global_state (&new_bw_state->base);
@@ -814,7 +829,6 @@ int intel_bw_atomic_check(struct intel_atomic_state *state)*/ new_bw_state->qgv_points_mask = ~allowed_points & mask; - old_bw_state =intel_atomic_get_old_bw_state (state);/* * If the actual mask had changed we need to make sure that * the commits are serialized(in case this is a nomodeset, nonblocking)
drivers/gpu/drm/i915/display/intel_bw.h +4 -4
@@ -30,19 +30,19 @@ struct intel_bw_state {*/ u8 pipe_sagv_reject; +/* bitmask of active pipes */ +u8 active_pipes; +/* * Current QGV points mask, which restricts * some particular SAGV states, not to confuse * with pipe_sagv_mask. */ -u8 qgv_points_mask; +u16 qgv_points_mask;unsigned int data_rate[I915_MAX_PIPES ];u8 num_active_planes[I915_MAX_PIPES ]; -/* bitmask of active pipes */ -u8 active_pipes; -int min_cdclk; };
drivers/gpu/drm/i915/display/intel_snps_phy.c +1 -1
@@ -34,7 +34,7 @@ void intel_snps_phy_wait_for_calibration(struct drm_i915_private *dev_priv)if (intel_de_wait_for_clear (dev_priv,ICL_PHY_MISC (phy),DG2_PHY_DP_TX_ACK_MASK ,25 ))DRM_ERROR ("SNPS PHY %c failed to calibrate after 25ms.\n" , - phy); +phy_name (phy)); } }
drivers/gpu/drm/i915/display/intel_tc.c +20 -6
@@ -691,6 +691,8 @@ void intel_tc_port_sanitize(struct intel_digital_port *dig_port) {struct drm_i915_private *i915 =to_i915 (dig_port->base.base.dev);struct intel_encoder *encoder = &dig_port->base; +intel_wakeref_t tc_cold_wref; +enum intel_display_power_domain domain;int active_links =0 ;mutex_lock (&dig_port->tc_lock);
@@ -702,12 +704,11 @@ void intel_tc_port_sanitize(struct intel_digital_port *dig_port)drm_WARN_ON (&i915->drm, dig_port->tc_mode !=TC_PORT_DISCONNECTED );drm_WARN_ON (&i915->drm, dig_port->tc_lock_wakeref); -if (active_links) { -enum intel_display_power_domain domain; -intel_wakeref_t tc_cold_wref =tc_cold_block (dig_port, &domain); - dig_port->tc_mode =intel_tc_port_get_current_mode (dig_port); + tc_cold_wref =tc_cold_block (dig_port, &domain); + dig_port->tc_mode =intel_tc_port_get_current_mode (dig_port); +if (active_links) {if (!icl_tc_phy_is_connected (dig_port)) drm_dbg_kms(&i915->drm, "Port %s: PHY disconnected with %d active link(s)\n",
@@ -716,10 +717,23 @@ void intel_tc_port_sanitize(struct intel_digital_port *dig_port) dig_port->tc_lock_wakeref =tc_cold_block (dig_port, &dig_port->tc_lock_power_domain); - -tc_cold_unblock (dig_port, domain, tc_cold_wref); + }else { +/* +* TBT-alt is the default mode in any case the PHY ownership is not +* held (regardless of the sink's connected live state), so +* we'll just switch to disconnected mode from it here without +* a note. +*/ +if (dig_port->tc_mode !=TC_PORT_TBT_ALT ) +drm_dbg_kms (&i915->drm, +"Port %s: PHY left in %s mode on disabled port, disconnecting it\n" , + dig_port->tc_port_name, +tc_port_mode_name (dig_port->tc_mode)); +icl_tc_phy_disconnect (dig_port); } +tc_cold_unblock (dig_port, domain, tc_cold_wref); +drm_dbg_kms (&i915->drm,"Port %s: sanitize mode (%s)\n" , dig_port->tc_port_name,tc_port_mode_name (dig_port->tc_mode));
drivers/gpu/drm/i915/intel_pm.c +11 -11
@@ -4019,6 +4019,17 @@ static int intel_compute_sagv_mask(struct intel_atomic_state *state)return ret; } +if (intel_can_enable_sagv (dev_priv, new_bw_state) != +intel_can_enable_sagv (dev_priv, old_bw_state)) { + ret =intel_atomic_serialize_global_state (&new_bw_state->base); +if (ret) +return ret; + }else if (new_bw_state->pipe_sagv_reject != old_bw_state->pipe_sagv_reject) { + ret =intel_atomic_lock_global_state (&new_bw_state->base); +if (ret) +return ret; + } +for_each_new_intel_crtc_in_state (state, crtc, new_crtc_state, i) {struct skl_pipe_wm *pipe_wm = &new_crtc_state->wm.skl.optimal;
@@ -4034,17 +4045,6 @@ static int intel_compute_sagv_mask(struct intel_atomic_state *state)intel_can_enable_sagv (dev_priv, new_bw_state); } -if (intel_can_enable_sagv (dev_priv, new_bw_state) != -intel_can_enable_sagv (dev_priv, old_bw_state)) { - ret =intel_atomic_serialize_global_state (&new_bw_state->base); -if (ret) -return ret; - }else if (new_bw_state->pipe_sagv_reject != old_bw_state->pipe_sagv_reject) { - ret =intel_atomic_lock_global_state (&new_bw_state->base); -if (ret) -return ret; - } -return 0 ; }
drivers/gpu/drm/vc4/vc4_crtc.c +5 -3
@@ -538,9 +538,11 @@ int vc4_crtc_disable_at_boot(struct drm_crtc *crtc)if (ret)return ret; - ret =pm_runtime_put (&vc4_hdmi->pdev->dev); -if (ret) -return ret; +/* +* post_crtc_powerdown will have called pm_runtime_put, so we +* don't need it here otherwise we'll get the reference counting +* wrong. +*/ return 0 ; }
drivers/gpu/host1x/syncpt.c +2 -17
@@ -225,27 +225,12 @@ int host1x_syncpt_wait(struct host1x_syncpt *sp, u32 thresh, long timeout,void *ref;struct host1x_waitlist *waiter;int err =0 , check_count =0 ; -u32 val;if (value) - *value =0 ; - -/* first check cache */ -if (host1x_syncpt_is_expired (sp, thresh)) { -if (value) - *value =host1x_syncpt_load (sp); + *value =host1x_syncpt_load (sp); +if (host1x_syncpt_is_expired (sp, thresh))return 0 ; - } - -/* try to read from register */ - val =host1x_hw_syncpt_load (sp->host, sp); -if (host1x_syncpt_is_expired (sp, thresh)) { -if (value) - *value = val; - - goto done; - }if (!timeout) { err = -EAGAIN ;
drivers/hwmon/hwmon.c +8 -6
@@ -214,12 +214,14 @@ static int hwmon_thermal_add_sensor(struct device *dev, int index) tzd =devm_thermal_zone_of_sensor_register (dev, index, tdata, &hwmon_thermal_ops); -/* -* If CONFIG_THERMAL_OF is disabled, this returns -ENODEV, -* so ignore that error but forward any other error. -*/ -if (IS_ERR (tzd) && (PTR_ERR (tzd) != -ENODEV )) -return PTR_ERR (tzd); +if (IS_ERR (tzd)) { +if (PTR_ERR (tzd) != -ENODEV ) +return PTR_ERR (tzd); +dev_info (dev,"temp%d_input not attached to any thermal zone\n" , + index +1 ); +devm_kfree (dev, tdata); +return 0 ; + } err =devm_add_action (dev, hwmon_thermal_remove_sensor, &tdata->node);if (err)
drivers/iio/accel/bmc150-accel-core.c +4 -1
@@ -1783,11 +1783,14 @@ int bmc150_accel_core_probe(struct device *dev, struct regmap *regmap, int irq, ret =iio_device_register (indio_dev);if (ret <0 ) {dev_err (dev,"Unable to register iio device\n" ); - goto err_trigger_unregister; + goto err_pm_cleanup; }return 0 ; +err_pm_cleanup: +pm_runtime_dont_use_autosuspend (dev); +pm_runtime_disable (dev); err_trigger_unregister:bmc150_accel_unregister_triggers (data,BMC150_ACCEL_TRIGGERS -1 ); err_buffer_cleanup:
drivers/iio/accel/fxls8962af-core.c +10 -2
@@ -173,12 +173,20 @@ struct fxls8962af_data {u16 upper_thres; }; -const struct regmap_config fxls8962af_regmap_conf = { +const struct regmap_config fxls8962af_i2c_regmap_conf = { .reg_bits =8 , .val_bits =8 , .max_register =FXLS8962AF_MAX_REG , }; -EXPORT_SYMBOL_GPL (fxls8962af_regmap_conf); +EXPORT_SYMBOL_GPL (fxls8962af_i2c_regmap_conf); + +const struct regmap_config fxls8962af_spi_regmap_conf = { + .reg_bits =8 , + .pad_bits =8 , + .val_bits =8 , + .max_register =FXLS8962AF_MAX_REG , +}; +EXPORT_SYMBOL_GPL (fxls8962af_spi_regmap_conf);enum { fxls8962af_idx_x,
drivers/iio/accel/fxls8962af-i2c.c +1 -1
@@ -18,7 +18,7 @@ static int fxls8962af_probe(struct i2c_client *client) {struct regmap *regmap; - regmap =devm_regmap_init_i2c (client, &fxls8962af_regmap_conf); + regmap =devm_regmap_init_i2c (client, &fxls8962af_i2c_regmap_conf);if (IS_ERR (regmap)) {dev_err (&client->dev,"Failed to initialize i2c regmap\n" );return PTR_ERR (regmap);
drivers/iio/accel/fxls8962af-spi.c +1 -1
@@ -18,7 +18,7 @@ static int fxls8962af_probe(struct spi_device *spi) {struct regmap *regmap; - regmap =devm_regmap_init_spi (spi, &fxls8962af_regmap_conf); + regmap =devm_regmap_init_spi (spi, &fxls8962af_spi_regmap_conf);if (IS_ERR (regmap)) {dev_err (&spi->dev,"Failed to initialize spi regmap\n" );return PTR_ERR (regmap);
drivers/iio/accel/fxls8962af.h +2 -1
@@ -17,6 +17,7 @@ int fxls8962af_core_probe(struct device *dev, struct regmap *regmap, int irq);int fxls8962af_core_remove (struct device *dev);extern const struct dev_pm_ops fxls8962af_pm_ops; -extern const struct regmap_config fxls8962af_regmap_conf; +extern const struct regmap_config fxls8962af_i2c_regmap_conf; +extern const struct regmap_config fxls8962af_spi_regmap_conf;#endif /* _FXLS8962AF_H_ */
drivers/iio/accel/kxcjk-1013.c +4 -1
@@ -1589,11 +1589,14 @@ static int kxcjk1013_probe(struct i2c_client *client, ret =iio_device_register (indio_dev);if (ret <0 ) {dev_err (&client->dev,"unable to register iio device\n" ); - goto err_buffer_cleanup; + goto err_pm_cleanup; }return 0 ; +err_pm_cleanup: +pm_runtime_dont_use_autosuspend (&client->dev); +pm_runtime_disable (&client->dev); err_buffer_cleanup:iio_triggered_buffer_cleanup (indio_dev); err_trigger_unregister:
drivers/iio/accel/mma9551.c +4 -1
@@ -495,11 +495,14 @@ static int mma9551_probe(struct i2c_client *client, ret =iio_device_register (indio_dev);if (ret <0 ) {dev_err (&client->dev,"unable to register iio device\n" ); - goto out_poweroff; + goto err_pm_cleanup; }return 0 ; +err_pm_cleanup: +pm_runtime_dont_use_autosuspend (&client->dev); +pm_runtime_disable (&client->dev); out_poweroff:mma9551_set_device_state (client, false);
drivers/iio/accel/mma9553.c +4 -1
@@ -1134,12 +1134,15 @@ static int mma9553_probe(struct i2c_client *client, ret =iio_device_register (indio_dev);if (ret <0 ) {dev_err (&client->dev,"unable to register iio device\n" ); - goto out_poweroff; + goto err_pm_cleanup; }dev_dbg (&indio_dev->dev,"Registered device %s\n" , name);return 0 ; +err_pm_cleanup: +pm_runtime_dont_use_autosuspend (&client->dev); +pm_runtime_disable (&client->dev); out_poweroff:mma9551_set_device_state (client, false);return ret;
drivers/iio/adc/ad7124.c +1 -1
@@ -76,7 +76,7 @@#define AD7124_CONFIG_REF_SEL (x) FIELD_PREP(AD7124_CONFIG_REF_SEL_MSK, x)#define AD7124_CONFIG_PGA_MSK GENMASK(2, 0)#define AD7124_CONFIG_PGA (x) FIELD_PREP(AD7124_CONFIG_PGA_MSK, x) -#define AD7124_CONFIG_IN_BUFF_MSK GENMASK(7, 6) +#define AD7124_CONFIG_IN_BUFF_MSK GENMASK(6, 5)#define AD7124_CONFIG_IN_BUFF (x) FIELD_PREP(AD7124_CONFIG_IN_BUFF_MSK, x)/* AD7124_FILTER_X */
drivers/iio/adc/men_z188_adc.c +8 -1
@@ -103,6 +103,7 @@ static int men_z188_probe(struct mcb_device *dev,struct z188_adc *adc;struct iio_dev *indio_dev;struct resource *mem; +int ret; indio_dev =devm_iio_device_alloc (&dev->dev,sizeof (struct z188_adc ));if (!indio_dev)
@@ -128,8 +129,14 @@ static int men_z188_probe(struct mcb_device *dev, adc->mem = mem;mcb_set_drvdata (dev, indio_dev); -return iio_device_register (indio_dev); + ret =iio_device_register (indio_dev); +if (ret) + goto err_unmap; + +return 0 ; +err_unmap: +iounmap (adc->base); err:mcb_release_mem (mem);return -ENXIO ;
drivers/iio/adc/ti-tsc2046.c +2 -2
@@ -388,7 +388,7 @@ static int tsc2046_adc_update_scan_mode(struct iio_dev *indio_dev,mutex_lock (&priv->slock); size =0 ; -for_each_set_bit (ch_idx, active_scan_mask, indio_dev->num_channels) { +for_each_set_bit (ch_idx, active_scan_mask,ARRAY_SIZE (priv->l)) { size +=tsc2046_adc_group_set_layout (priv, group, ch_idx);tsc2046_adc_group_set_cmd (priv, group, ch_idx); group++;
@@ -548,7 +548,7 @@ static int tsc2046_adc_setup_spi_msg(struct tsc2046_adc_priv *priv)* enabled. */ size =0 ; -for (ch_idx =0 ; ch_idx < priv->dcfg->num_channels; ch_idx++) +for (ch_idx =0 ; ch_idx <ARRAY_SIZE (priv->l); ch_idx++) size +=tsc2046_adc_group_set_layout (priv, ch_idx, ch_idx); priv->tx =devm_kzalloc (&priv->spi->dev, size,GFP_KERNEL );
drivers/iio/gyro/bmg160_core.c +4 -1
@@ -1188,11 +1188,14 @@ int bmg160_core_probe(struct device *dev, struct regmap *regmap, int irq, ret =iio_device_register (indio_dev);if (ret <0 ) {dev_err (dev,"unable to register iio device\n" ); - goto err_buffer_cleanup; + goto err_pm_cleanup; }return 0 ; +err_pm_cleanup: +pm_runtime_dont_use_autosuspend (dev); +pm_runtime_disable (dev); err_buffer_cleanup:iio_triggered_buffer_cleanup (indio_dev); err_trigger_unregister:
drivers/iio/imu/adis16480.c +6 -1
@@ -1403,6 +1403,7 @@ static int adis16480_probe(struct spi_device *spi) {const struct spi_device_id *id =spi_get_device_id (spi);const struct adis_data *adis16480_data; +irq_handler_t trigger_handler =NULL ;struct iio_dev *indio_dev;struct adis16480 *st;int ret;
@@ -1474,8 +1475,12 @@ static int adis16480_probe(struct spi_device *spi) st->clk_freq = st->chip_info->int_clk; } +/* Only use our trigger handler if burst mode is supported */ +if (adis16480_data->burst_len) + trigger_handler = adis16480_trigger_handler; + ret =devm_adis_setup_buffer_and_trigger (&st->adis, indio_dev, - adis16480_trigger_handler); + trigger_handler);if (ret)return ret;
drivers/iio/imu/kmx61.c +4 -1
@@ -1385,7 +1385,7 @@ static int kmx61_probe(struct i2c_client *client, ret =iio_device_register (data->acc_indio_dev);if (ret <0 ) {dev_err (&client->dev,"Failed to register acc iio device\n" ); - goto err_buffer_cleanup_mag; + goto err_pm_cleanup; } ret =iio_device_register (data->mag_indio_dev);
@@ -1398,6 +1398,9 @@ static int kmx61_probe(struct i2c_client *client, err_iio_unregister_acc:iio_device_unregister (data->acc_indio_dev); +err_pm_cleanup: +pm_runtime_dont_use_autosuspend (&client->dev); +pm_runtime_disable (&client->dev); err_buffer_cleanup_mag:if (client->irq >0 )iio_triggered_buffer_cleanup (data->mag_indio_dev);
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c +5 -1
@@ -1374,8 +1374,12 @@ static int st_lsm6dsx_read_oneshot(struct st_lsm6dsx_sensor *sensor,if (err <0 )return err; +/* +* we need to wait for sensor settling time before +* reading data in order to avoid corrupted samples +*/ delay =1000000000 / sensor->odr; -usleep_range (delay,2 * delay); +usleep_range (3 * delay,4 * delay); err =st_lsm6dsx_read_locked (hw, addr, &data,sizeof (data));if (err <0 )
drivers/iio/magnetometer/bmc150_magn.c +3 -2
@@ -962,13 +962,14 @@ int bmc150_magn_probe(struct device *dev, struct regmap *regmap, ret =iio_device_register (indio_dev);if (ret <0 ) {dev_err (dev,"unable to register iio device\n" ); - goto err_disable_runtime_pm; + goto err_pm_cleanup; }dev_dbg (dev,"Registered device %s\n" , name);return 0 ; -err_disable_runtime_pm: +err_pm_cleanup: +pm_runtime_dont_use_autosuspend (dev);pm_runtime_disable (dev); err_buffer_cleanup:iio_triggered_buffer_cleanup (indio_dev);
drivers/infiniband/core/cma.c +24 -16
@@ -3370,22 +3370,30 @@ static int cma_resolve_ib_addr(struct rdma_id_private *id_priv)static int cma_bind_addr (struct rdma_cm_id *id,struct sockaddr *src_addr,const struct sockaddr *dst_addr) { -if (!src_addr || !src_addr->sa_family) { - src_addr = (struct sockaddr *) &id->route.addr.src_addr; - src_addr->sa_family = dst_addr->sa_family; -if (IS_ENABLED (CONFIG_IPV6 ) && - dst_addr->sa_family ==AF_INET6 ) { -struct sockaddr_in6 *src_addr6 = (struct sockaddr_in6 *) src_addr; -struct sockaddr_in6 *dst_addr6 = (struct sockaddr_in6 *) dst_addr; - src_addr6->sin6_scope_id = dst_addr6->sin6_scope_id; -if (ipv6_addr_type (&dst_addr6->sin6_addr) &IPV6_ADDR_LINKLOCAL ) - id->route.addr.dev_addr.bound_dev_if = dst_addr6->sin6_scope_id; - }else if (dst_addr->sa_family ==AF_IB ) { - ((struct sockaddr_ib *) src_addr)->sib_pkey = - ((struct sockaddr_ib *) dst_addr)->sib_pkey; - } - } -return rdma_bind_addr (id, src_addr); +struct sockaddr_storage zero_sock = {}; + +if (src_addr && src_addr->sa_family) +return rdma_bind_addr (id, src_addr); + +/* +* When the src_addr is not specified, automatically supply an any addr +*/ + zero_sock.ss_family = dst_addr->sa_family; +if (IS_ENABLED (CONFIG_IPV6 ) && dst_addr->sa_family ==AF_INET6 ) { +struct sockaddr_in6 *src_addr6 = + (struct sockaddr_in6 *)&zero_sock; +struct sockaddr_in6 *dst_addr6 = + (struct sockaddr_in6 *)dst_addr; + + src_addr6->sin6_scope_id = dst_addr6->sin6_scope_id; +if (ipv6_addr_type (&dst_addr6->sin6_addr) &IPV6_ADDR_LINKLOCAL ) + id->route.addr.dev_addr.bound_dev_if = + dst_addr6->sin6_scope_id; + }else if (dst_addr->sa_family ==AF_IB ) { + ((struct sockaddr_ib *)&zero_sock)->sib_pkey = + ((struct sockaddr_ib *)dst_addr)->sib_pkey; + } +return rdma_bind_addr (id, (struct sockaddr *)&zero_sock); }/*
drivers/infiniband/hw/qib/qib_sysfs.c +1 -1
@@ -541,7 +541,7 @@ static struct attribute *port_diagc_attributes[] = { };static const struct attribute_group port_diagc_group = { - .name ="linkcontrol" , + .name ="diag_counters" , .attrs = port_diagc_attributes, };
drivers/infiniband/ulp/rtrs/rtrs-clt.c +21 -18
@@ -2664,6 +2664,8 @@ static void rtrs_clt_dev_release(struct device *dev) { struct rtrs_clt *clt = container_of(dev, struct rtrs_clt, dev); +mutex_destroy (&clt->paths_ev_mutex); +mutex_destroy (&clt->paths_mutex);kfree (clt); }
@@ -2693,6 +2695,8 @@ static struct rtrs_clt *alloc_clt(const char *sessname, size_t paths_num,return ERR_PTR (-ENOMEM ); } + clt->dev.class = rtrs_clt_dev_class; + clt->dev.release = rtrs_clt_dev_release;uuid_gen (&clt->paths_uuid);INIT_LIST_HEAD_RCU (&clt->paths_list); clt->paths_num = paths_num;
@@ -2709,53 +2713,51 @@ static struct rtrs_clt *alloc_clt(const char *sessname, size_t paths_num,init_waitqueue_head (&clt->permits_wait);mutex_init (&clt->paths_ev_mutex);mutex_init (&clt->paths_mutex); +device_initialize (&clt->dev); - clt->dev.class = rtrs_clt_dev_class; - clt->dev.release = rtrs_clt_dev_release; err =dev_set_name (&clt->dev,"%s" , sessname);if (err) - goto err; + goto err_put; +/* * Suppress user space notification until * sysfs files are created */ dev_set_uevent_suppress (&clt->dev, true); - err =device_register (&clt->dev); -if (err) { -put_device (&clt->dev); - goto err; - } + err =device_add (&clt->dev); +if (err) + goto err_put; clt->kobj_paths =kobject_create_and_add ("paths" , &clt->dev.kobj);if (!clt->kobj_paths) { err = -ENOMEM ; - goto err_dev; + goto err_del; } err =rtrs_clt_create_sysfs_root_files (clt);if (err) {kobject_del (clt->kobj_paths);kobject_put (clt->kobj_paths); - goto err_dev; + goto err_del; }dev_set_uevent_suppress (&clt->dev, false);kobject_uevent (&clt->dev.kobj,KOBJ_ADD );return clt; -err_dev: -device_unregister (&clt->dev); -err: +err_del: +device_del (&clt->dev); +err_put:free_percpu (clt->pcpu_path); -kfree (clt); +put_device (&clt->dev);return ERR_PTR (err); }static void free_clt (struct rtrs_clt *clt) { -free_permits (clt);free_percpu (clt->pcpu_path); -mutex_destroy (&clt->paths_ev_mutex); -mutex_destroy (&clt->paths_mutex); -/* release callback will free clt in last put */ + +/* +* release callback will free clt and destroy mutexes in last put +*/ device_unregister (&clt->dev); }
@@ -2872,6 +2874,7 @@ void rtrs_clt_close(struct rtrs_clt *clt)rtrs_clt_destroy_sess_files (sess,NULL );kobject_put (&sess->kobj); } +free_permits (clt);free_clt (clt); }EXPORT_SYMBOL (rtrs_clt_close);
drivers/infiniband/ulp/srp/ib_srp.c +4 -2
@@ -4047,9 +4047,11 @@ static void srp_remove_one(struct ib_device *device, void *client_data)spin_unlock (&host->target_lock);/* -* Wait for tl_err and target port removal tasks. +* srp_queue_remove_work() queues a call to +* srp_remove_target(). The latter function cancels +* target->tl_err_work so waiting for the remove works to +* finish is sufficient. */ -flush_workqueue (system_long_wq);flush_workqueue (srp_remove_wq);kfree (host);
drivers/mtd/mtdcore.c +2 -0
@@ -546,6 +546,7 @@ static int mtd_nvmem_add(struct mtd_info *mtd) config.stride =1 ; config.read_only = true; config.root_only = true; + config.ignore_wp = true; config.no_of_node = !of_device_is_compatible (node,"nvmem-cells" ); config.priv = mtd;
@@ -830,6 +831,7 @@ static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd, config.owner =THIS_MODULE ; config.type =NVMEM_TYPE_OTP ; config.root_only = true; + config.ignore_wp = true; config.reg_read = reg_read; config.size = size; config.of_node = np;
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +3 -0
@@ -100,6 +100,9 @@ MODULE_LICENSE("GPL");MODULE_FIRMWARE (FW_FILE_NAME_E1 );MODULE_FIRMWARE (FW_FILE_NAME_E1H );MODULE_FIRMWARE (FW_FILE_NAME_E2 ); +MODULE_FIRMWARE (FW_FILE_NAME_E1_V15 ); +MODULE_FIRMWARE (FW_FILE_NAME_E1H_V15 ); +MODULE_FIRMWARE (FW_FILE_NAME_E2_V15 );int bnx2x_num_queues;module_param_named (num_queues, bnx2x_num_queues, int,0444 );
drivers/net/ethernet/broadcom/bnxt/bnxt.c +35 -12
121 lines not on this page · raw message
drivers/net/ethernet/broadcom/bnxt/bnxt.h +1 -0
@@ -1919,6 +1919,7 @@ struct bnxt {#define BNXT_STATE_RECOVER 12#define BNXT_STATE_FW_NON_FATAL_COND 13#define BNXT_STATE_FW_ACTIVATE_RESET 14 +#define BNXT_STATE_HALF_OPEN 15/* For offline ethtool tests */ #define BNXT_NO_FW_ACCESS (bp) \ (test_bit(BNXT_STATE_FW_FATAL_COND, &(bp)->state) || \
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c +31 -8
@@ -366,6 +366,16 @@ bnxt_dl_livepatch_report_err(struct bnxt *bp, struct netlink_ext_ack *extack, } } +/* Live patch status in NVM */ +#define BNXT_LIVEPATCH_NOT_INSTALLED 0 +#define BNXT_LIVEPATCH_INSTALLED FW_LIVEPATCH_QUERY_RESP_STATUS_FLAGS_INSTALL +#define BNXT_LIVEPATCH_REMOVED FW_LIVEPATCH_QUERY_RESP_STATUS_FLAGS_ACTIVE +#define BNXT_LIVEPATCH_MASK (FW_LIVEPATCH_QUERY_RESP_STATUS_FLAGS_INSTALL | \ + FW_LIVEPATCH_QUERY_RESP_STATUS_FLAGS_ACTIVE) +#define BNXT_LIVEPATCH_ACTIVATED BNXT_LIVEPATCH_MASK + +#define BNXT_LIVEPATCH_STATE (flags) ((flags) & BNXT_LIVEPATCH_MASK) +static int bnxt_dl_livepatch_activate (struct bnxt *bp,struct netlink_ext_ack *extack) {
@@ -373,8 +383,9 @@ bnxt_dl_livepatch_activate(struct bnxt *bp, struct netlink_ext_ack *extack)struct hwrm_fw_livepatch_query_input *query_req;struct hwrm_fw_livepatch_output *patch_resp;struct hwrm_fw_livepatch_input *patch_req; +u16 flags, live_patch_state; +bool activated = false;u32 installed =0 ; -u16 flags;u8 target;int rc;
@@ -393,7 +404,6 @@ bnxt_dl_livepatch_activate(struct bnxt *bp, struct netlink_ext_ack *extack)hwrm_req_drop (bp, query_req);return rc; } - patch_req->opcode =FW_LIVEPATCH_REQ_OPCODE_ACTIVATE ; patch_req->loadtype =FW_LIVEPATCH_REQ_LOADTYPE_NVM_INSTALL ; patch_resp =hwrm_req_hold (bp, patch_req);
@@ -406,12 +416,20 @@ bnxt_dl_livepatch_activate(struct bnxt *bp, struct netlink_ext_ack *extack) } flags =le16_to_cpu (query_resp->status_flags); -if (~flags &FW_LIVEPATCH_QUERY_RESP_STATUS_FLAGS_INSTALL ) + live_patch_state =BNXT_LIVEPATCH_STATE (flags); + +if (live_patch_state ==BNXT_LIVEPATCH_NOT_INSTALLED )continue ; -if ((flags &FW_LIVEPATCH_QUERY_RESP_STATUS_FLAGS_ACTIVE ) && - !strncmp (query_resp->active_ver, query_resp->install_ver, -sizeof (query_resp->active_ver))) + +if (live_patch_state ==BNXT_LIVEPATCH_ACTIVATED ) { + activated = true;continue ; + } + +if (live_patch_state ==BNXT_LIVEPATCH_INSTALLED ) + patch_req->opcode =FW_LIVEPATCH_REQ_OPCODE_ACTIVATE ; +else if (live_patch_state ==BNXT_LIVEPATCH_REMOVED ) + patch_req->opcode =FW_LIVEPATCH_REQ_OPCODE_DEACTIVATE ; patch_req->fw_target = target; rc =hwrm_req_send (bp, patch_req);
@@ -423,8 +441,13 @@ bnxt_dl_livepatch_activate(struct bnxt *bp, struct netlink_ext_ack *extack) }if (!rc && !installed) { -NL_SET_ERR_MSG_MOD (extack,"No live patches found" ); - rc = -ENOENT ; +if (activated) { +NL_SET_ERR_MSG_MOD (extack,"Live patch already activated" ); + rc = -EEXIST ; + }else { +NL_SET_ERR_MSG_MOD (extack,"No live patches found" ); + rc = -ENOENT ; + } }hwrm_req_drop (bp, query_req);hwrm_req_drop (bp, patch_req);
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +13 -4
@@ -25,6 +25,7 @@#include "bnxt_hsi.h" #include "bnxt.h" #include "bnxt_hwrm.h" +#include "bnxt_ulp.h" #include "bnxt_xdp.h" #include "bnxt_ptp.h" #include "bnxt_ethtool.h"
@@ -1944,6 +1945,9 @@ static int bnxt_get_fecparam(struct net_device *dev,case PORT_PHY_QCFG_RESP_ACTIVE_FEC_FEC_RS272_IEEE_ACTIVE : fec->active_fec |=ETHTOOL_FEC_LLRS ;break ; +case PORT_PHY_QCFG_RESP_ACTIVE_FEC_FEC_NONE_ACTIVE : + fec->active_fec |=ETHTOOL_FEC_OFF ; +break ; }return 0 ; }
@@ -3429,7 +3433,7 @@ static int bnxt_run_loopback(struct bnxt *bp)if (!skb)return -ENOMEM ; data =skb_put (skb, pkt_size); -eth_broadcast_addr (data); +ether_addr_copy (&data[i], bp->dev->dev_addr); i +=ETH_ALEN ;ether_addr_copy (&data[i], bp->dev->dev_addr); i +=ETH_ALEN ;
@@ -3523,9 +3527,12 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest,if (!offline) {bnxt_run_fw_tests (bp, test_mask, &test_results); }else { - rc =bnxt_close_nic (bp, false, false); -if (rc) +bnxt_ulp_stop (bp); + rc =bnxt_close_nic (bp, true, false); +if (rc) { +bnxt_ulp_start (bp, rc);return ; + }bnxt_run_fw_tests (bp, test_mask, &test_results); buf[BNXT_MACLPBK_TEST_IDX ] =1 ;
@@ -3535,6 +3542,7 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest,if (rc) {bnxt_hwrm_mac_loopback (bp, false); etest->flags |=ETH_TEST_FL_FAILED ; +bnxt_ulp_start (bp, rc);return ; }if (bnxt_run_loopback (bp))
@@ -3560,7 +3568,8 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest, }bnxt_hwrm_phy_loopback (bp, false, false);bnxt_half_close_nic (bp); - rc =bnxt_open_nic (bp, false, true); + rc =bnxt_open_nic (bp, true, true); +bnxt_ulp_start (bp, rc); }if (rc ||bnxt_test_irq (bp)) { buf[BNXT_IRQ_TEST_IDX ] =1 ;
drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c +9 -3
@@ -595,18 +595,24 @@ static int __hwrm_send(struct bnxt *bp, struct bnxt_hwrm_ctx *ctx)/* Last byte of resp contains valid bit */ valid = ((u8 *)ctx->resp) + len -1 ; -for (j =0 ; j <HWRM_VALID_BIT_DELAY_USEC ; j++) { +for (j =0 ; j <HWRM_VALID_BIT_DELAY_USEC ; ) {/* make sure we read from updated DMA memory */ dma_rmb ();if (*valid)break ; -usleep_range (1 ,5 ); +if (j <10 ) { +udelay (1 ); + j++; + }else { +usleep_range (20 ,30 ); + j +=20 ; + } }if (j >=HWRM_VALID_BIT_DELAY_USEC ) {if (!(ctx->flags &BNXT_HWRM_CTX_SILENT ))netdev_err (bp->dev,"Error (timeout: %u) msg {0x%x 0x%x} len:%d v:%d\n" , -hwrm_total_timeout (i), +hwrm_total_timeout (i) + j,le16_to_cpu (ctx->req->req_type),le16_to_cpu (ctx->req->seq_id), len, *valid);
drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.h +1 -1
@@ -94,7 +94,7 @@ static inline unsigned int hwrm_total_timeout(unsigned int n) } -#define HWRM_VALID_BIT_DELAY_USEC 150 +#define HWRM_VALID_BIT_DELAY_USEC 50000static inline bool bnxt_cfa_hwrm_message (u16 req_type) {
drivers/net/ethernet/ibm/ibmvnic.c +5 -1
@@ -5919,10 +5919,14 @@ static ssize_t failover_store(struct device *dev, struct device_attribute *attr, be64_to_cpu(session_token)); rc =plpar_hcall_norets (H_VIOCTL , adapter->vdev->unit_address,H_SESSION_ERR_DETECTED , session_token,0 ,0 ); -if (rc) +if (rc) {netdev_err (netdev,"H_VIOCTL initiated failover failed, rc %ld\n" , rc); + goto last_resort; + } + +return count; last_resort:netdev_dbg (netdev,"Trying to send CRQ_CMD, the last resort\n" );
drivers/net/ethernet/intel/i40e/i40e_main.c +1 -11
@@ -5372,15 +5372,7 @@ static int i40e_vsi_configure_bw_alloc(struct i40e_vsi *vsi, u8 enabled_tc,/* There is no need to reset BW when mqprio mode is on. */ if (pf->flags &I40E_FLAG_TC_MQPRIO )return 0 ; - -if (!vsi->mqprio_qopt.qopt.hw) { -if (pf->flags &I40E_FLAG_DCB_ENABLED ) - goto skip_reset; - -if (IS_ENABLED (CONFIG_I40E_DCB ) && -i40e_dcb_hw_get_num_tc (&pf->hw) ==1 ) - goto skip_reset; - +if (!vsi->mqprio_qopt.qopt.hw && !(pf->flags &I40E_FLAG_DCB_ENABLED )) { ret =i40e_set_bw_limit (vsi, vsi->seid,0 );if (ret) dev_info(&pf->pdev->dev,
@@ -5388,8 +5380,6 @@ static int i40e_vsi_configure_bw_alloc(struct i40e_vsi *vsi, u8 enabled_tc, vsi->seid);return ret; } - -skip_reset:memset (&bw_data,0 ,sizeof (bw_data)); bw_data.tc_valid_bits = enabled_tc;for (i =0 ; i <I40E_MAX_TRAFFIC_CLASS ; i++)
drivers/net/ethernet/intel/ice/ice.h +0 -1
@@ -280,7 +280,6 @@ enum ice_pf_state {ICE_VFLR_EVENT_PENDING ,ICE_FLTR_OVERFLOW_PROMISC ,ICE_VF_DIS , -ICE_VF_DEINIT_IN_PROGRESS ,ICE_CFG_BUSY ,ICE_SERVICE_SCHED , ICE_SERVICE_DIS,
drivers/net/ethernet/intel/ice/ice_common.c +1 -1
@@ -3319,7 +3319,7 @@ ice_cfg_phy_fec(struct ice_port_info *pi, struct ice_aqc_set_phy_cfg_data *cfg,if (fec ==ICE_FEC_AUTO &&ice_fw_supports_link_override (hw) && !ice_fw_supports_report_dflt_cfg (hw)) { -struct ice_link_default_override_tlv tlv; +struct ice_link_default_override_tlv tlv = {0 }; status =ice_get_link_default_override (&tlv, pi);if (status)
drivers/net/ethernet/intel/ice/ice_main.c +2 -0
@@ -1772,7 +1772,9 @@ static void ice_handle_mdd_event(struct ice_pf *pf)* reset, so print the event prior to reset. */ ice_print_vf_rx_mdd_event (vf); +mutex_lock (&pf->vf[i].cfg_lock);ice_reset_vf (&pf->vf[i], false); +mutex_unlock (&pf->vf[i].cfg_lock); } } }
drivers/net/ethernet/intel/ice/ice_ptp.c +4 -1
@@ -1121,9 +1121,12 @@ ice_ptp_settime64(struct ptp_clock_info *info, const struct timespec64 *ts)static int ice_ptp_adjtime_nonatomic (struct ptp_clock_info *info,s64 delta) {struct timespec64 now, then; +int ret; then =ns_to_timespec64 (delta); -ice_ptp_gettimex64 (info, &now,NULL ); + ret =ice_ptp_gettimex64 (info, &now,NULL ); +if (ret) +return ret; now =timespec64_add (now, then);return ice_ptp_settime64 (info, (const struct timespec64 *)&now);
drivers/net/ethernet/intel/ice/ice_tc_lib.c +2 -2
@@ -711,7 +711,7 @@ ice_tc_set_port(struct flow_match_ports match, fltr->flags |=ICE_TC_FLWR_FIELD_ENC_DEST_L4_PORT ; else fltr->flags |= ICE_TC_FLWR_FIELD_DEST_L4_PORT; - fltr->flags |=ICE_TC_FLWR_FIELD_DEST_L4_PORT ; + headers->l4_key.dst_port = match.key->dst; headers->l4_mask.dst_port = match.mask->dst; }
@@ -720,7 +720,7 @@ ice_tc_set_port(struct flow_match_ports match, fltr->flags |=ICE_TC_FLWR_FIELD_ENC_SRC_L4_PORT ; else fltr->flags |= ICE_TC_FLWR_FIELD_SRC_L4_PORT; - fltr->flags |=ICE_TC_FLWR_FIELD_SRC_L4_PORT ; + headers->l4_key.src_port = match.key->src; headers->l4_mask.src_port = match.mask->src; }
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c +25 -17
106 lines not on this page · raw message
drivers/net/ethernet/marvell/mv643xx_eth.c +14 -10
@@ -2700,6 +2700,16 @@ MODULE_DEVICE_TABLE(of, mv643xx_eth_shared_ids);static struct platform_device *port_platdev[3 ]; +static void mv643xx_eth_shared_of_remove (void ) +{ +int n; + +for (n =0 ; n <3 ; n++) { +platform_device_del (port_platdev[n]); + port_platdev[n] =NULL ; + } +} +static int mv643xx_eth_shared_of_add_port (struct platform_device *pdev,struct device_node *pnp) {
@@ -2736,7 +2746,9 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev,return -EINVAL ; } -of_get_mac_address (pnp, ppd.mac_addr); + ret =of_get_mac_address (pnp, ppd.mac_addr); +if (ret) +return ret;mv643xx_eth_property (pnp,"tx-queue-size" , ppd.tx_queue_size);mv643xx_eth_property (pnp,"tx-sram-addr" , ppd.tx_sram_addr);
@@ -2800,21 +2812,13 @@ static int mv643xx_eth_shared_of_probe(struct platform_device *pdev) ret =mv643xx_eth_shared_of_add_port (pdev, pnp);if (ret) {of_node_put (pnp); +mv643xx_eth_shared_of_remove ();return ret; } }return 0 ; } -static void mv643xx_eth_shared_of_remove (void ) -{ -int n; - -for (n =0 ; n <3 ; n++) { -platform_device_del (port_platdev[n]); - port_platdev[n] =NULL ; - } -}#else static inline int mv643xx_eth_shared_of_probe (struct platform_device *pdev) {
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_mplsoudp.c +11 -17
@@ -60,37 +60,31 @@ static int parse_tunnel(struct mlx5e_priv *priv, void *headers_v) {struct flow_rule *rule =flow_cls_offload_flow_rule (f); -struct flow_match_enc_keyid enc_keyid;struct flow_match_mpls match;void *misc2_c;void *misc2_v; - misc2_c =MLX5_ADDR_OF (fte_match_param, spec->match_criteria, - misc_parameters_2); - misc2_v =MLX5_ADDR_OF (fte_match_param, spec->match_value, - misc_parameters_2); - -if (!flow_rule_match_key (rule,FLOW_DISSECTOR_KEY_MPLS )) -return 0 ; - -if (!flow_rule_match_key (rule,FLOW_DISSECTOR_KEY_ENC_KEYID )) -return 0 ; - -flow_rule_match_enc_keyid (rule, &enc_keyid); - -if (!enc_keyid.mask->keyid) -return 0 ; -if (!MLX5_CAP_ETH (priv->mdev, tunnel_stateless_mpls_over_udp) && !(MLX5_CAP_GEN (priv->mdev, flex_parser_protocols) &MLX5_FLEX_PROTO_CW_MPLS_UDP ))return -EOPNOTSUPP ; +if (flow_rule_match_key (rule,FLOW_DISSECTOR_KEY_ENC_KEYID )) +return -EOPNOTSUPP ; + +if (!flow_rule_match_key (rule,FLOW_DISSECTOR_KEY_MPLS )) +return 0 ; +flow_rule_match_mpls (rule, &match);/* Only support matching the first LSE */ if (match.mask->used_lses !=1 )return -EOPNOTSUPP ; + misc2_c =MLX5_ADDR_OF (fte_match_param, spec->match_criteria, + misc_parameters_2); + misc2_v =MLX5_ADDR_OF (fte_match_param, spec->match_value, + misc_parameters_2); +MLX5_SET (fte_match_set_misc2, misc2_c, outer_first_mpls_over_udp.mpls_label, match.mask->ls[0 ].mpls_label);
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +1 -1
@@ -1752,7 +1752,7 @@ static int mlx5e_get_module_eeprom(struct net_device *netdev,if (size_read <0 ) {netdev_err (priv->netdev,"%s: mlx5_query_eeprom failed:0x%x\n" , __func__, size_read); -return 0 ; +return size_read; } i += size_read;
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +2 -1
@@ -1348,7 +1348,8 @@ static inline void mlx5e_handle_csum(struct net_device *netdev, }/* True when explicitly set via priv flag, or XDP prog is loaded */ -if (test_bit (MLX5E_RQ_STATE_NO_CSUM_COMPLETE , &rq->state)) +if (test_bit (MLX5E_RQ_STATE_NO_CSUM_COMPLETE , &rq->state) || +get_cqe_tls_offload (cqe)) goto csum_unnecessary;/* CQE csum doesn't cover padding octets in short ethernet
drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c +1 -0
@@ -334,6 +334,7 @@ void mlx5e_self_test(struct net_device *ndev, struct ethtool_test *etest,netdev_info (ndev,"\t[%d] %s start..\n" , i, st.name); buf[count] = st.st_func (priv);netdev_info (ndev,"\t[%d] %s end: result(%lld)\n" , i, st.name, buf[count]); + count++; }mutex_unlock (&priv->state_lock);
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +12 -0
@@ -3427,6 +3427,18 @@ actions_match_supported(struct mlx5e_priv *priv,return false; } +if (!(~actions & + (MLX5_FLOW_CONTEXT_ACTION_FWD_DEST |MLX5_FLOW_CONTEXT_ACTION_DROP ))) { +NL_SET_ERR_MSG_MOD (extack,"Rule cannot support forward+drop action" ); +return false; + } + +if (actions &MLX5_FLOW_CONTEXT_ACTION_MOD_HDR && + actions &MLX5_FLOW_CONTEXT_ACTION_DROP ) { +NL_SET_ERR_MSG_MOD (extack,"Drop with modify header action is not supported" ); +return false; + } +if (actions &MLX5_FLOW_CONTEXT_ACTION_MOD_HDR && actions &MLX5_FLOW_CONTEXT_ACTION_DROP ) {NL_SET_ERR_MSG_MOD (extack,"Drop with modify header action is not supported" );
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +0 -4
@@ -2838,10 +2838,6 @@ bool mlx5_esw_vport_match_metadata_supported(const struct mlx5_eswitch *esw)if (!MLX5_CAP_ESW_FLOWTABLE (esw->dev, flow_source))return false; -if (mlx5_core_is_ecpf_esw_manager (esw->dev) || -mlx5_ecpf_vport_exists (esw->dev)) -return false; -return true; }
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +2 -0
@@ -2073,6 +2073,8 @@ void mlx5_del_flow_rules(struct mlx5_flow_handle *handle) fte->node.del_hw_func =NULL ;up_write_ref_node (&fte->node, false);tree_put_node (&fte->node, false); + }else { +up_write_ref_node (&fte->node, false); }kfree (handle); }
drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c +3 -0
@@ -121,6 +121,9 @@ u32 mlx5_chains_get_nf_ft_chain(struct mlx5_fs_chains *chains)u32 mlx5_chains_get_prio_range (struct mlx5_fs_chains *chains) { +if (!mlx5_chains_prios_supported (chains)) +return 1 ; +if (mlx5_chains_ignore_flow_level_supported (chains))return UINT_MAX ;
drivers/net/ethernet/mellanox/mlx5/core/main.c +3 -1
@@ -510,7 +510,7 @@ static int handle_hca_cap(struct mlx5_core_dev *dev, void *set_ctx)/* Check log_max_qp from HCA caps to set in current profile */ if (prof->log_max_qp ==LOG_MAX_SUPPORTED_QPS ) { - prof->log_max_qp =MLX5_CAP_GEN_MAX (dev, log_max_qp); + prof->log_max_qp =min_t (u8,17 ,MLX5_CAP_GEN_MAX (dev, log_max_qp)); }else if (MLX5_CAP_GEN_MAX (dev, log_max_qp) < prof->log_max_qp) { mlx5_core_warn(dev, "log_max_qp value in current profile is %d, changing it to HCA capability limit (%d)\n", prof->log_max_qp,
@@ -1796,10 +1796,12 @@ static const struct pci_device_id mlx5_core_pci_table[] = { { PCI_VDEVICE(MELLANOX, 0x101e), MLX5_PCI_DEV_IS_VF}, /* ConnectX Family mlx5Gen Virtual Function */ { PCI_VDEVICE(MELLANOX, 0x101f) }, /* ConnectX-6 LX */ { PCI_VDEVICE(MELLANOX, 0x1021) }, /* ConnectX-7 */ + { PCI_VDEVICE(MELLANOX, 0x1023) }, /* ConnectX-8 */ { PCI_VDEVICE(MELLANOX, 0xa2d2) }, /* BlueField integrated ConnectX-5 network controller */ { PCI_VDEVICE(MELLANOX, 0xa2d3), MLX5_PCI_DEV_IS_VF}, /* BlueField integrated ConnectX-5 network controller VF */ { PCI_VDEVICE(MELLANOX, 0xa2d6) }, /* BlueField-2 integrated ConnectX-6 Dx network controller */ { PCI_VDEVICE(MELLANOX, 0xa2dc) }, /* BlueField-3 integrated ConnectX-7 network controller */ + { PCI_VDEVICE(MELLANOX, 0xa2df) }, /* BlueField-4 integrated ConnectX-8 network controller */ { 0, } };
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c +81 -39
182 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_matcher.c +4 -16
@@ -13,18 +13,6 @@ static bool dr_mask_is_dmac_set(struct mlx5dr_match_spec *spec)return (spec->dmac_47_16 || spec->dmac_15_0); } -static bool dr_mask_is_src_addr_set (struct mlx5dr_match_spec *spec) -{ -return (spec->src_ip_127_96 || spec->src_ip_95_64 || - spec->src_ip_63_32 || spec->src_ip_31_0); -} - -static bool dr_mask_is_dst_addr_set (struct mlx5dr_match_spec *spec) -{ -return (spec->dst_ip_127_96 || spec->dst_ip_95_64 || - spec->dst_ip_63_32 || spec->dst_ip_31_0); -} -static bool dr_mask_is_l3_base_set (struct mlx5dr_match_spec *spec) { return (spec->ip_protocol || spec->frag || spec->tcp_flags ||
@@ -480,11 +468,11 @@ static int dr_matcher_set_ste_builders(struct mlx5dr_matcher *matcher, &mask, inner, rx);if (outer_ipv ==DR_RULE_IPV6 ) { -if (dr_mask_is_dst_addr_set (&mask.outer)) +if (DR_MASK_IS_DST_IP_SET (&mask.outer))mlx5dr_ste_build_eth_l3_ipv6_dst (ste_ctx, &sb[idx++], &mask, inner, rx); -if (dr_mask_is_src_addr_set (&mask.outer)) +if (DR_MASK_IS_SRC_IP_SET (&mask.outer))mlx5dr_ste_build_eth_l3_ipv6_src (ste_ctx, &sb[idx++], &mask, inner, rx);
@@ -580,11 +568,11 @@ static int dr_matcher_set_ste_builders(struct mlx5dr_matcher *matcher, &mask, inner, rx);if (inner_ipv ==DR_RULE_IPV6 ) { -if (dr_mask_is_dst_addr_set (&mask.inner)) +if (DR_MASK_IS_DST_IP_SET (&mask.inner))mlx5dr_ste_build_eth_l3_ipv6_dst (ste_ctx, &sb[idx++], &mask, inner, rx); -if (dr_mask_is_src_addr_set (&mask.inner)) +if (DR_MASK_IS_SRC_IP_SET (&mask.inner))mlx5dr_ste_build_eth_l3_ipv6_src (ste_ctx, &sb[idx++], &mask, inner, rx);
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste.c +31 -1
@@ -602,12 +602,34 @@ int mlx5dr_ste_set_action_decap_l3_list(struct mlx5dr_ste_ctx *ste_ctx, used_hw_action_num); } +static int dr_ste_build_pre_check_spec (struct mlx5dr_domain *dmn, +struct mlx5dr_match_spec *spec) +{ +if (spec->ip_version) { +if (spec->ip_version !=0xf ) { +mlx5dr_err (dmn, +"Partial ip_version mask with src/dst IP is not supported\n" ); +return -EINVAL ; + } + }else if (spec->ethertype !=0xffff && + (DR_MASK_IS_SRC_IP_SET (spec) ||DR_MASK_IS_DST_IP_SET (spec))) { +mlx5dr_err (dmn, +"Partial/no ethertype mask with src/dst IP is not supported\n" ); +return -EINVAL ; + } + +return 0 ; +} +int mlx5dr_ste_build_pre_check (struct mlx5dr_domain *dmn,u8 match_criteria,struct mlx5dr_match_param *mask,struct mlx5dr_match_param *value) { -if (!value && (match_criteria &DR_MATCHER_CRITERIA_MISC )) { +if (value) +return 0 ; + +if (match_criteria &DR_MATCHER_CRITERIA_MISC ) {if (mask->misc.source_port && mask->misc.source_port !=0xffff ) {mlx5dr_err (dmn,"Partial mask source_port is not supported\n" );
@@ -621,6 +643,14 @@ int mlx5dr_ste_build_pre_check(struct mlx5dr_domain *dmn, } } +if ((match_criteria &DR_MATCHER_CRITERIA_OUTER ) && +dr_ste_build_pre_check_spec (dmn, &mask->outer)) +return -EINVAL ; + +if ((match_criteria &DR_MATCHER_CRITERIA_INNER ) && +dr_ste_build_pre_check_spec (dmn, &mask->inner)) +return -EINVAL ; +return 0 ; }
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_types.h +10 -0
@@ -739,6 +739,16 @@ struct mlx5dr_match_param { (_misc3)->icmpv4_code || \ (_misc3)->icmpv4_header_data) +#define DR_MASK_IS_SRC_IP_SET (_spec) ((_spec)->src_ip_127_96 || \ + (_spec)->src_ip_95_64 || \ + (_spec)->src_ip_63_32 || \ + (_spec)->src_ip_31_0) + +#define DR_MASK_IS_DST_IP_SET (_spec) ((_spec)->dst_ip_127_96 || \ + (_spec)->dst_ip_95_64 || \ + (_spec)->dst_ip_63_32 || \ + (_spec)->dst_ip_31_0) +struct mlx5dr_esw_caps {u64 drop_icm_address_rx;u64 drop_icm_address_tx;
drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c +26 -7
@@ -222,7 +222,11 @@ static bool contain_vport_reformat_action(struct mlx5_flow_rule *dst) dst->dest_attr.vport.flags &MLX5_FLOW_DEST_VPORT_REFORMAT_ID ; } -#define MLX5_FLOW_CONTEXT_ACTION_MAX 32 +/* We want to support a rule with 32 destinations, which means we need to +* account for 32 destinations plus usually a counter plus one more action +* for a multi-destination flow table. +*/ +#define MLX5_FLOW_CONTEXT_ACTION_MAX 34 static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns, struct mlx5_flow_table *ft, struct mlx5_flow_group *group,
@@ -392,9 +396,9 @@ static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns,enum mlx5_flow_destination_type type = dst->dest_attr.type;u32 id; -if (num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX || - num_term_actions >=MLX5_FLOW_CONTEXT_ACTION_MAX ) { - err = -ENOSPC ; +if (fs_dr_num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX || + num_term_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX ) { + err = -EOPNOTSUPP ; goto free_actions; }
@@ -464,8 +468,9 @@ static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns, MLX5_FLOW_DESTINATION_TYPE_COUNTER)continue ; -if (num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX ) { - err = -ENOSPC ; +if (num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX || + fs_dr_num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX ) { + err = -EOPNOTSUPP ; goto free_actions; }
@@ -485,14 +490,28 @@ static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns, params.match_sz = match_sz; params.match_buf = (u64 *)fte->val;if (num_term_actions ==1 ) { -if (term_actions->reformat) +if (term_actions->reformat) { +if (num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX ) { + err = -EOPNOTSUPP ; + goto free_actions; + } actions[num_actions++] = term_actions->reformat; + } +if (num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX ) { + err = -EOPNOTSUPP ; + goto free_actions; + } actions[num_actions++] = term_actions->dest; }else if (num_term_actions >1 ) {bool ignore_flow_level = !!(fte->action.flags &FLOW_ACT_IGNORE_FLOW_LEVEL ); +if (num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX || + fs_dr_num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX ) { + err = -EOPNOTSUPP ; + goto free_actions; + } tmp_action = mlx5dr_action_create_mult_dest_tbl(domain, term_actions, num_term_actions,
drivers/net/ethernet/mellanox/mlx5/core/steering/mlx5dr.h +5 -0
@@ -160,6 +160,11 @@ struct mlx5dr_icm_buddy_mem {* sync_ste command sets them free. */ struct list_head hot_list; + +/* Memory optimisation */ +struct mlx5dr_ste *ste_arr; +struct list_head *miss_list; +u8 *hw_ste_arr; }; int mlx5dr_buddy_init(struct mlx5dr_icm_buddy_mem *buddy,
drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c +2 -2
@@ -922,8 +922,8 @@ nfp_tunnel_add_shared_mac(struct nfp_app *app, struct net_device *netdev, int port, bool mod) {struct nfp_flower_priv *priv = app->priv; -int ida_idx =NFP_MAX_MAC_INDEX , err;struct nfp_tun_offloaded_mac *entry; +int ida_idx =-1 , err;u16 nfp_mac_idx =0 ; entry =nfp_tunnel_lookup_offloaded_macs (app, netdev->dev_addr);
@@ -997,7 +997,7 @@ nfp_tunnel_add_shared_mac(struct nfp_app *app, struct net_device *netdev, err_free_entry:kfree (entry); err_free_ida: -if (ida_idx !=NFP_MAX_MAC_INDEX ) +if (ida_idx !=-1 )ida_simple_remove (&priv->tun.mac_off_ids, ida_idx);return err;
drivers/net/ethernet/xilinx/ll_temac_main.c +2 -0
@@ -1427,6 +1427,8 @@ static int temac_probe(struct platform_device *pdev) lp->indirect_lock =devm_kmalloc (&pdev->dev,sizeof (*lp->indirect_lock),GFP_KERNEL ); +if (!lp->indirect_lock) +return -ENOMEM ;spin_lock_init (lp->indirect_lock); }
drivers/net/mdio/mdio-ipq4019.c +5 -1
@@ -200,7 +200,11 @@ static int ipq_mdio_reset(struct mii_bus *bus)if (ret)return ret; -return clk_prepare_enable (priv->mdio_clk); + ret =clk_prepare_enable (priv->mdio_clk); +if (ret ==0 ) +mdelay (10 ); + +return ret; }static int ipq4019_mdio_probe (struct platform_device *pdev)
drivers/net/usb/cdc_ether.c +12 -0
@@ -583,6 +583,11 @@ static const struct usb_device_id products[] = { .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, \ .bInterfaceProtocol = USB_CDC_PROTO_NONE +#define ZAURUS_FAKE_INTERFACE \ + .bInterfaceClass = USB_CLASS_COMM, \ + .bInterfaceSubClass = USB_CDC_SUBCLASS_MDLM, \ + .bInterfaceProtocol = USB_CDC_PROTO_NONE +/* SA-1100 based Sharp Zaurus ("collie"), or compatible; * wire-incompatible with true CDC Ethernet implementations. * (And, it seems, needlessly so...)
@@ -636,6 +641,13 @@ static const struct usb_device_id products[] = { .idProduct = 0x9032, /* SL-6000 */ZAURUS_MASTER_INTERFACE , .driver_info = 0, +}, { + .match_flags =USB_DEVICE_ID_MATCH_INT_INFO + |USB_DEVICE_ID_MATCH_DEVICE , + .idVendor = 0x04DD, + .idProduct = 0x9032, /* SL-6000 */ +ZAURUS_FAKE_INTERFACE , + .driver_info = 0, }, { .match_flags =USB_DEVICE_ID_MATCH_INT_INFO | USB_DEVICE_ID_MATCH_DEVICE,
drivers/net/usb/cdc_ncm.c +4 -4
@@ -1715,10 +1715,10 @@ int cdc_ncm_rx_fixup(struct usbnet *dev, struct sk_buff *skb_in) {struct sk_buff *skb;struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0 ]; -int len; +unsigned int len;int nframes;int x; -int offset; +unsigned int offset;union {struct usb_cdc_ncm_ndp16 *ndp16;struct usb_cdc_ncm_ndp32 *ndp32;
@@ -1790,8 +1790,8 @@ int cdc_ncm_rx_fixup(struct usbnet *dev, struct sk_buff *skb_in)break ; } -/* sanity checking */ -if (((offset + len) > skb_in->len) || +/* sanity checking - watch out for integer wrap*/ +if ((offset > skb_in->len) || (len > skb_in->len - offset) || (len > ctx->rx_max) || (len <ETH_HLEN )) { netif_dbg(dev, rx_err, dev->net, "invalid frame detected (ignored) offset[%u]=%u, length=%u, skb=%p\n",
drivers/net/usb/sr9700.c +1 -1
@@ -413,7 +413,7 @@ static int sr9700_rx_fixup(struct usbnet *dev, struct sk_buff *skb)/* ignore the CRC length */ len = (skb->data[1 ] | (skb->data[2 ] <<8 )) -4 ; -if (len >ETH_FRAME_LEN ) +if (len >ETH_FRAME_LEN || len > skb->len)return 0 ;/* the last packet of current skb */
drivers/net/usb/zaurus.c +12 -0
@@ -256,6 +256,11 @@ static const struct usb_device_id products [] = { .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, \ .bInterfaceProtocol = USB_CDC_PROTO_NONE +#define ZAURUS_FAKE_INTERFACE \ + .bInterfaceClass = USB_CLASS_COMM, \ + .bInterfaceSubClass = USB_CDC_SUBCLASS_MDLM, \ + .bInterfaceProtocol = USB_CDC_PROTO_NONE +/* SA-1100 based Sharp Zaurus ("collie"), or compatible. */ { .match_flags = USB_DEVICE_ID_MATCH_INT_INFO
@@ -313,6 +318,13 @@ static const struct usb_device_id products [] = { .idProduct = 0x9032, /* SL-6000 */ZAURUS_MASTER_INTERFACE , .driver_info = ZAURUS_PXA_INFO, +}, { + .match_flags =USB_DEVICE_ID_MATCH_INT_INFO + |USB_DEVICE_ID_MATCH_DEVICE , + .idVendor = 0x04DD, + .idProduct = 0x9032, /* SL-6000 */ +ZAURUS_FAKE_INTERFACE , + .driver_info = (unsigned long)&bogus_mdlm_info, }, { .match_flags =USB_DEVICE_ID_MATCH_INT_INFO | USB_DEVICE_ID_MATCH_DEVICE,
drivers/nvme/host/core.c +3 -3
@@ -1936,7 +1936,7 @@ static int nvme_update_ns_info(struct nvme_ns *ns, struct nvme_id_ns *id)if (blk_queue_is_zoned (ns->queue)) { ret =nvme_revalidate_zones (ns);if (ret && !nvme_first_scan (ns->disk)) - goto out; +return ret; }if (nvme_ns_head_multipath (ns->head)) {
@@ -1951,16 +1951,16 @@ static int nvme_update_ns_info(struct nvme_ns *ns, struct nvme_id_ns *id)return 0 ; out_unfreeze: -blk_mq_unfreeze_queue (ns->disk->queue); -out:/* * If probing fails due an unsupported feature, hide the block device, * but still allow other access. */ if (ret == -ENODEV ) { ns->disk->flags |=GENHD_FL_HIDDEN ; +set_bit (NVME_NS_READY , &ns->flags); ret =0 ; } +blk_mq_unfreeze_queue (ns->disk->queue);return ret; }
drivers/nvmem/core.c +1 -1
@@ -771,7 +771,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)if (config->wp_gpio) nvmem->wp_gpio = config->wp_gpio; -else +else if (!config->ignore_wp) nvmem->wp_gpio =gpiod_get_optional (config->dev,"wp" ,GPIOD_OUT_HIGH );if (IS_ERR (nvmem->wp_gpio)) {
drivers/pci/controller/pci-mvebu.c +2 -1
@@ -1288,7 +1288,8 @@ static int mvebu_pcie_probe(struct platform_device *pdev)* indirectly via kernel emulated PCI bridge driver. */ mvebu_pcie_setup_hw (port); -mvebu_pcie_set_local_dev_nr (port,0 ); +mvebu_pcie_set_local_dev_nr (port,1 ); +mvebu_pcie_set_local_bus_nr (port,0 ); } pcie->nports = i;
drivers/pinctrl/pinctrl-k210.c +2 -2
@@ -482,7 +482,7 @@ static int k210_pinconf_get_drive(unsigned int max_strength_ua) {int i; -for (i =K210_PC_DRIVE_MAX ; i; i--) { +for (i =K210_PC_DRIVE_MAX ; i >=0 ; i--) {if (k210_pinconf_drive_strength[i] <= max_strength_ua)return i; }
@@ -527,7 +527,7 @@ static int k210_pinconf_set_param(struct pinctrl_dev *pctldev,case PIN_CONFIG_BIAS_PULL_UP :if (!arg)return -EINVAL ; - val |=K210_PC_PD ; + val |=K210_PC_PU ;break ;case PIN_CONFIG_DRIVE_STRENGTH : arg *=1000 ;
drivers/platform/surface/surface3_power.c +10 -3
@@ -232,14 +232,21 @@ static int mshw0011_bix(struct mshw0011_data *cdata, struct bix *bix) } bix->last_full_charg_capacity = ret; -/* get serial number */ +/* +* Get serial number, on some devices (with unofficial replacement +* battery?) reading any of the serial number range addresses gets +* nacked in this case just leave the serial number empty. +*/ ret =i2c_smbus_read_i2c_block_data (client,MSHW0011_BAT0_REG_SERIAL_NO ,sizeof (buf), buf); -if (ret !=sizeof (buf)) { +if (ret == -EREMOTEIO ) { +/* no serial number available */ + }else if (ret !=sizeof (buf)) {dev_err (&client->dev,"Error reading serial no: %d\n" , ret);return ret; + }else { +snprintf (bix->serial,ARRAY_SIZE (bix->serial),"%3pE%6pE" , buf +7 , buf); } -snprintf (bix->serial,ARRAY_SIZE (bix->serial),"%3pE%6pE" , buf +7 , buf);/* get cycle count */ ret =i2c_smbus_read_word_data (client,MSHW0011_BAT0_REG_CYCLE_CNT );
drivers/spi/spi-zynq-qspi.c +3 -0
@@ -570,6 +570,9 @@ static int zynq_qspi_exec_mem_op(struct spi_mem *mem,if (op->dummy.nbytes) { tmpbuf =kzalloc (op->dummy.nbytes,GFP_KERNEL ); +if (!tmpbuf) +return -ENOMEM ; +memset (tmpbuf,0xff , op->dummy.nbytes);reinit_completion (&xqspi->data_completion); xqspi->txbuf = tmpbuf;
drivers/staging/fbtft/fb_st7789v.c +2 -0
@@ -144,6 +144,8 @@ static int init_display(struct fbtft_par *par) {int rc; + par->fbtftops.reset (par); + rc =init_tearing_effect_line (par);if (rc)return rc;
drivers/thermal/intel/int340x_thermal/int3400_thermal.c +4 -0
@@ -404,6 +404,10 @@ static void int3400_notify(acpi_handle handle, thermal_prop[3 ] =kasprintf (GFP_KERNEL ,"EVENT=%d" , therm_event); thermal_prop[4 ] =NULL ;kobject_uevent_env (&priv->thermal->device.kobj,KOBJ_CHANGE , thermal_prop); +kfree (thermal_prop[0 ]); +kfree (thermal_prop[1 ]); +kfree (thermal_prop[2 ]); +kfree (thermal_prop[3 ]); } static int int3400_thermal_get_temp(struct thermal_zone_device *thermal,
drivers/tty/n_gsm.c +39 -22
195 lines not on this page · raw message
drivers/tty/serial/sc16is7xx.c +3 -0
@@ -734,12 +734,15 @@ static irqreturn_t sc16is7xx_irq(int irq, void *dev_id)static void sc16is7xx_tx_proc (struct kthread_work *ws) {struct uart_port *port = &(to_sc16is7xx_one (ws, tx_work)->port); +struct sc16is7xx_port *s =dev_get_drvdata (port->dev);if ((port->rs485.flags &SER_RS485_ENABLED ) && (port->rs485.delay_rts_before_send >0 ))msleep (port->rs485.delay_rts_before_send); +mutex_lock (&s->efr_lock);sc16is7xx_handle_tx (port); +mutex_unlock (&s->efr_lock); }static void sc16is7xx_reconf_rs485 (struct uart_port *port)
drivers/usb/dwc2/core.h +2 -0
@@ -1416,6 +1416,7 @@ void dwc2_hsotg_core_connect(struct dwc2_hsotg *hsotg);void dwc2_hsotg_disconnect (struct dwc2_hsotg *dwc2);int dwc2_hsotg_set_test_mode (struct dwc2_hsotg *hsotg,int testmode);#define dwc2_is_device_connected (hsotg) (hsotg->connected) +#define dwc2_is_device_enabled (hsotg) (hsotg->enabled)int dwc2_backup_device_registers (struct dwc2_hsotg *hsotg);int dwc2_restore_device_registers (struct dwc2_hsotg *hsotg,int remote_wakeup);int dwc2_gadget_enter_hibernation (struct dwc2_hsotg *hsotg);
@@ -1452,6 +1453,7 @@ static inline int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg, int testmode) {return 0 ; }#define dwc2_is_device_connected (hsotg) (0) +#define dwc2_is_device_enabled (hsotg) (0)static inline int dwc2_backup_device_registers (struct dwc2_hsotg *hsotg) {return 0 ; } static inline int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg,
drivers/usb/dwc2/drd.c +4 -2
@@ -109,8 +109,10 @@ static int dwc2_drd_role_sw_set(struct usb_role_switch *sw, enum usb_role role) already =dwc2_ovr_avalid (hsotg, true); }else if (role ==USB_ROLE_DEVICE ) { already =dwc2_ovr_bvalid (hsotg, true); -/* This clear DCTL.SFTDISCON bit */ -dwc2_hsotg_core_connect (hsotg); +if (dwc2_is_device_enabled (hsotg)) { +/* This clear DCTL.SFTDISCON bit */ +dwc2_hsotg_core_connect (hsotg); + } }else {if (dwc2_is_device_mode (hsotg)) {if (!dwc2_ovr_bvalid (hsotg, false))
drivers/usb/dwc3/dwc3-pci.c +14 -3
@@ -85,8 +85,8 @@ static const struct acpi_gpio_mapping acpi_dwc3_byt_gpios[] = {static struct gpiod_lookup_table platform_bytcr_gpios = { .dev_id ="0000:00:16.0" , .table = { -GPIO_LOOKUP ("INT33FC:00" ,54 ,"reset" ,GPIO_ACTIVE_HIGH ), -GPIO_LOOKUP ("INT33FC:02" ,14 ,"cs" ,GPIO_ACTIVE_HIGH ), +GPIO_LOOKUP ("INT33FC:00" ,54 ,"cs" ,GPIO_ACTIVE_HIGH ), +GPIO_LOOKUP ("INT33FC:02" ,14 ,"reset" ,GPIO_ACTIVE_HIGH ), {} }, };
@@ -119,6 +119,13 @@ static const struct property_entry dwc3_pci_intel_properties[] = { {} }; +static const struct property_entry dwc3_pci_intel_byt_properties[] = { +PROPERTY_ENTRY_STRING ("dr_mode" ,"peripheral" ), +PROPERTY_ENTRY_BOOL ("snps,dis_u2_susphy_quirk" ), +PROPERTY_ENTRY_BOOL ("linux,sysdev_is_parent" ), + {} +}; +static const struct property_entry dwc3_pci_mrfld_properties[] = {PROPERTY_ENTRY_STRING ("dr_mode" ,"otg" ),PROPERTY_ENTRY_STRING ("linux,extcon-name" ,"mrfld_bcove_pwrsrc" ),
@@ -161,6 +168,10 @@ static const struct software_node dwc3_pci_intel_swnode = { .properties = dwc3_pci_intel_properties, }; +static const struct software_node dwc3_pci_intel_byt_swnode = { + .properties = dwc3_pci_intel_byt_properties, +}; +
Lines of this file are not shown. View the raw message.
fs/btrfs/file.c +35 -62
97 lines not on this page · raw message
fs/btrfs/ioctl.c +66 -15
81 lines not on this page · raw message
include/net/checksum.h +28 -22
50 lines not on this page · raw message
include/net/netfilter/nf_tables_offload.h +0 -2
Lines of this file are not shown. View the raw message.
kernel/bpf/btf.c +75 -22
97 lines not on this page · raw message
kernel/trace/trace_events_trigger.c +52 -7
59 lines not on this page · raw message
net/openvswitch/actions.c +38 -8
46 lines not on this page · raw message
net/smc/smc_pnet.c +21 -21
42 lines not on this page · raw message
tools/testing/selftests/bpf/progs/test_sockmap_kern.h +18 -8
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/diag.sh +37 -7
44 lines not on this page · raw message
tools/testing/selftests/net/mptcp/mptcp_join.sh +12 -3
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.16.12 kernel.
All users of the 5.16 kernel series must upgrade.
The updated 5.16.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.16.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/parisc/kernel/unaligned.c | 14 - arch/riscv/configs/nommu_k210_sdcard_defconfig | 2 arch/riscv/kernel/Makefile | 2 arch/riscv/kernel/entry.S | 10 arch/riscv/kernel/trace_irq.c | 27 ++ arch/riscv/kernel/trace_irq.h | 11 arch/x86/kvm/mmu/mmu.c | 13 + arch/x86/kvm/svm/svm.c | 19 + block/fops.c | 2 drivers/ata/pata_hpt37x.c | 14 + drivers/base/dd.c | 5 drivers/base/regmap/regmap-irq.c | 20 - drivers/clk/ingenic/jz4725b-cgu.c | 3 drivers/clk/qcom/gcc-msm8994.c | 106 -------- drivers/gpio/gpio-rockchip.c | 56 ++-- drivers/gpio/gpio-tegra186.c | 14 - drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 drivers/gpu/drm/amd/amdgpu/soc15.c | 9 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 17 - drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c | 2 drivers/gpu/drm/amd/display/dc/core/dc.c | 7 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 4 drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 32 ++ drivers/gpu/drm/drm_edid.c | 2 drivers/gpu/drm/i915/display/intel_bw.c | 18 + drivers/gpu/drm/i915/display/intel_bw.h | 8 drivers/gpu/drm/i915/display/intel_snps_phy.c | 2 drivers/gpu/drm/i915/display/intel_tc.c | 26 +- drivers/gpu/drm/i915/intel_pm.c | 22 - drivers/gpu/drm/vc4/vc4_crtc.c | 8 drivers/gpu/host1x/syncpt.c | 19 - drivers/hwmon/hwmon.c | 14 - drivers/iio/accel/bmc150-accel-core.c | 5 drivers/iio/accel/fxls8962af-core.c | 12 - drivers/iio/accel/fxls8962af-i2c.c | 2 drivers/iio/accel/fxls8962af-spi.c | 2 drivers/iio/accel/fxls8962af.h | 3 drivers/iio/accel/kxcjk-1013.c | 5 drivers/iio/accel/mma9551.c | 5 drivers/iio/accel/mma9553.c | 5 drivers/iio/adc/ad7124.c | 2 drivers/iio/adc/men_z188_adc.c | 9 drivers/iio/adc/ti-tsc2046.c | 4 drivers/iio/gyro/bmg160_core.c | 5 drivers/iio/imu/adis16480.c | 7 drivers/iio/imu/kmx61.c | 5 drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 6 drivers/iio/magnetometer/bmc150_magn.c | 5 drivers/infiniband/core/cma.c | 40 ++- drivers/infiniband/hw/qib/qib_sysfs.c | 2 drivers/infiniband/ulp/rtrs/rtrs-clt.c | 39 +-- drivers/infiniband/ulp/srp/ib_srp.c | 6 drivers/mtd/mtdcore.c | 2 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 3 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 47 ++- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 39 ++- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 17 + drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c | 12 - drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.h | 2 drivers/net/ethernet/ibm/ibmvnic.c | 6 drivers/net/ethernet/intel/i40e/i40e_main.c | 12 - drivers/net/ethernet/intel/ice/ice.h | 1 drivers/net/ethernet/intel/ice/ice_common.c | 2 drivers/net/ethernet/intel/ice/ice_main.c | 2 drivers/net/ethernet/intel/ice/ice_ptp.c | 5 drivers/net/ethernet/intel/ice/ice_tc_lib.c | 4 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 42 ++- drivers/net/ethernet/marvell/mv643xx_eth.c | 24 +- drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_mplsoudp.c | 28 -- drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c | 1 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 12 + drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 4 drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 2 drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c | 3 drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c | 120 ++++++---- drivers/net/ethernet/mellanox/mlx5/core/steering/dr_matcher.c | 20 - drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste.c | 32 ++ drivers/net/ethernet/mellanox/mlx5/core/steering/dr_types.h | 10 drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c | 33 ++ drivers/net/ethernet/mellanox/mlx5/core/steering/mlx5dr.h | 5 drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c | 4 drivers/net/ethernet/xilinx/ll_temac_main.c | 2 drivers/net/mdio/mdio-ipq4019.c | 6 drivers/net/usb/cdc_ether.c | 12 + drivers/net/usb/cdc_ncm.c | 8 drivers/net/usb/sr9700.c | 2 drivers/net/usb/zaurus.c | 12 + drivers/nvme/host/core.c | 6 drivers/nvmem/core.c | 2 drivers/pci/controller/pci-mvebu.c | 3 drivers/pinctrl/pinctrl-k210.c | 4 drivers/platform/surface/surface3_power.c | 13 - drivers/spi/spi-zynq-qspi.c | 3 drivers/staging/fbtft/fb_st7789v.c | 2 drivers/thermal/intel/int340x_thermal/int3400_thermal.c | 4 drivers/tty/n_gsm.c | 61 +++-- drivers/tty/serial/sc16is7xx.c | 3 drivers/usb/dwc2/core.h | 2 drivers/usb/dwc2/drd.c | 6 drivers/usb/dwc3/dwc3-pci.c | 17 + drivers/usb/dwc3/gadget.c | 2 drivers/usb/gadget/function/rndis.c | 8 drivers/usb/gadget/function/rndis.h | 1 drivers/usb/gadget/udc/udc-xilinx.c | 6 drivers/usb/host/xhci.c | 28 +- drivers/usb/serial/ch341.c | 1 drivers/usb/serial/option.c | 12 + drivers/usb/typec/tipd/core.c | 7 drivers/vhost/vsock.c | 21 + fs/btrfs/ctree.h | 2 fs/btrfs/file.c | 97 ++------ fs/btrfs/inode.c | 4 fs/btrfs/ioctl.c | 81 +++++- fs/btrfs/lzo.c | 11 fs/btrfs/tree-checker.c | 15 + fs/configfs/dir.c | 14 + fs/io_uring.c | 24 +- fs/tracefs/inode.c | 5 include/linux/bpf.h | 9 include/linux/nvmem-provider.h | 4 include/linux/skmsg.h | 6 include/linux/slab.h | 3 include/net/checksum.h | 50 ++-- include/net/netfilter/nf_tables.h | 2 include/net/netfilter/nf_tables_offload.h | 2 include/net/sock.h | 9 kernel/bpf/btf.c | 97 ++++++-- kernel/bpf/syscall.c | 3 kernel/cgroup/cgroup-v1.c | 6 kernel/cgroup/cpuset.c | 2 kernel/trace/trace_events_trigger.c | 59 ++++ mm/filemap.c | 8 mm/hugetlb.c | 11 mm/memblock.c | 10 net/can/j1939/transport.c | 2 net/core/filter.c | 3 net/core/skbuff.c | 12 - net/core/sock.c | 10 net/dsa/master.c | 7 net/dsa/port.c | 20 + net/ipv4/af_inet.c | 5 net/ipv4/ip_output.c | 2 net/ipv4/ping.c | 1 net/ipv4/udp_tunnel_nic.c | 2 net/ipv6/ip6_offload.c | 2 net/ipv6/ip6_output.c | 2 net/mptcp/mib.c | 2 net/mptcp/mib.h | 2 net/mptcp/pm.c | 8 net/mptcp/pm_netlink.c | 19 + net/netfilter/nf_tables_api.c | 16 + net/netfilter/nf_tables_offload.c | 3 net/netfilter/nft_dup_netdev.c | 6 net/netfilter/nft_fwd_netdev.c | 6 net/netfilter/nft_immediate.c | 12 - net/netfilter/xt_socket.c | 4 net/openvswitch/actions.c | 46 +++ net/sched/act_ct.c | 5 net/smc/smc_pnet.c | 42 +-- net/smc/smc_pnet.h | 2 net/tipc/name_table.c | 2 net/tipc/socket.c | 2 security/selinux/ima.c | 4 tools/perf/util/data.c | 7 tools/perf/util/evlist-hybrid.c | 4 tools/testing/selftests/bpf/progs/test_sockmap_kern.h | 26 +- tools/testing/selftests/net/mptcp/diag.sh | 44 +++ tools/testing/selftests/net/mptcp/mptcp_join.sh | 15 + 173 files changed, 1535 insertions(+), 784 deletions(-)
Alexey Bayduraev (1):
perf data: Fix double free in perf_session__delete()
Aneesh Kumar K.V (1):
mm/hugetlb: fix kernel crash with hugetlb mremap
Ariel Levkovich (1):
net/mlx5: Fix wrong limitation of metadata match on ecpf
Bart Van Assche (1):
RDMA/ib_srp: Fix a deadlock
Baruch Siach (1):
net: mdio-ipq4019: add delay after clock enable
Bas Nieuwenhuizen (1):
drm/amd/display: Protect update_bw_bounding_box FPU code.
Changbin Du (1):
riscv: fix oops caused by irqsoff latency tracer
Chen Gong (1):
drm/amdgpu: do not enable asic reset for raven2
ChenXiaoSong (1):
configfs: fix a race in configfs_{,un}register_subsystem()
Chris Mi (1):
net/mlx5: Fix tc max supported prio for nic mode
Christoph Hellwig (1):
nvme: also mark passthrough-only namespaces ready in nvme_update_ns_info
Christophe JAILLET (2):
nfp: flower: Fix a potential leak in nfp_tunnel_add_shared_mac()
iio: adc: men_z188_adc: Fix a resource leak in an error handling path
Christophe Kerello (2):
nvmem: core: Fix a conflict between MTD and NVMEM on wp-gpios property
mtd: core: Fix a conflict between MTD and NVMEM on wp-gpios property
Christophe Leroy (1):
net: Force inlining of checksum functions in net/checksum.h
Chuansheng Liu (1):
thermal: int340x: fix memory leak in int3400_notify()
Cosmin Tanislav (1):
iio: adc: ad7124: fix mask used for setting AIN_BUFP & AIN_BUFM bits
Daehwan Jung (1):
usb: gadget: rndis: add spinlock for rndis response list
Damien Le Moal (1):
riscv: fix nommu_k210_sdcard_defconfig
Dan Carpenter (3):
tipc: Fix end of loop tests for list_for_each_entry()
udp_tunnel: Fix end of loop test in udp_tunnel_nic_unregister()
pinctrl: fix loop in k210_pinconf_get_drive()
Daniel Bristot de Oliveira (1):
tracing: Dump stacktrace trigger to the corresponding instance
Daniele Palmas (1):
USB: serial: option: add Telit LE910R1 compositions
Dmytro Bagrii (1):
Revert "USB: serial: ch341: add new Product ID for CH341A"
Dylan Yudaken (1):
io_uring: disallow modification of rsrc_data during quiesce
Dāvis Mosāns (1):
btrfs: prevent copying too big compressed lzo segment
Eric Dumazet (6):
netfilter: xt_socket: fix a typo in socket_mt_destroy()
bpf: Add schedule points in batch ops
io_uring: add a schedule point in io_add_buffers()
net: __pskb_pull_tail() & pskb_carve_frag_list() drop_monitor friends
net: use sk_is_tcp() in more places
net-timestamp: convert sk->sk_tskey to atomic_t
Evan Quan (2):
drm/amd/pm: fix some OEM SKU specific stability issues drm/amdgpu: disable MMHUB PG for Picasso
Fabio M. De Francesco (1):
net/smc: Use a mutex for locking "struct smc_pnettable"
Fabrice Gasnier (1):
usb: dwc2: drd: fix soft connect when gadget is unconfigured
Felix Maurer (2):
bpf: Do not try bpf_msg_push_data with len 0
selftests: bpf: Check bpf_msg_push_data return value
Florian Westphal (1):
netfilter: nf_tables: fix memory leak during stateful obj update
Gal Pressman (1):
net/mlx5e: Fix wrong return value on ioctl EEPROM query failure
Greg Kroah-Hartman (2):
slab: remove __alloc_size attribute from __kmalloc_track_caller Linux 5.16.12
Guenter Roeck (1):
hwmon: Handle failure to register sensor with thermal zone correctly
Hans de Goede (3):
surface: surface3_power: Fix battery readings on batteries without a serial number
usb: dwc3: pci: Add "snps,dis_u2_susphy_quirk" for Intel Bay Trail
usb: dwc3: pci: Fix Bay Trail phy GPIO mappings
Helge Deller (2):
parisc/unaligned: Fix fldd and fstd unaligned handlers on 32-bit kernel parisc/unaligned: Fix ldw() and stw() unalignment handlers
Hongyu Xie (1):
xhci: Prevent futile URB re-submissions due to incorrect return value.
Imre Deak (1):
drm/i915: Disconnect PHYs left connected by BIOS on disabled ports
Jacob Keller (1):
ice: fix concurrent reset and removal of VFs
Jason Gunthorpe (1):
RDMA/cma: Do not change route.addr.src_addr outside state checks
Jens Axboe (2):
io_uring: don't convert to jiffies for waiting on timeouts
tps6598x: clear int mask on probe failure
Kalesh AP (2):
bnxt_en: Fix devlink fw_activate
bnxt_en: Restore the resets_reliable flag in bnxt_open()
Konrad Dybcio (1):
clk: qcom: gcc-msm8994: Remove NoC clocks
Kumar Kartikeya Dwivedi (3):
bpf: Fix crash due to incorrect copy_map_value
bpf: Extend kfunc with PTR_TO_CTX, PTR_TO_MEM argument support
bpf: Fix crash due to out of bounds access into reg2btf_ids.
Lama Kayal (1):
net/mlx5e: Add missing increment of count
Liang Zhang (1):
KVM: x86/mmu: make apf token non-zero to fix bug
Liu Yuntao (1):
hugetlbfs: fix a truncation issue in hugepages parameter
Lorenzo Bianconi (1):
iio: imu: st_lsm6dsx: wait for settling time in st_lsm6dsx_read_oneshot
Maher Sanalla (1):
net/mlx5: Update log_max_qp value to be 17 at most
Manish Chopra (1):
bnx2x: fix driver load from initrd
Maor Dickman (1):
net/mlx5e: MPLSoUDP decap, fix check for unsupported matches
Maor Gottlieb (1):
net/mlx5: Fix possible deadlock on rule deletion
Marc Zyngier (1):
gpio: tegra186: Fix chip_data type confusion
Mario Limonciello (1):
drm/amd: Check if ASPM is enabled from PCIe subsystem
Mateusz Palczewski (1):
Revert "i40e: Fix reset bw limit when DCB enabled with 1 TC"
Matt Roper (1):
drm/i915/dg2: Print PHY name properly on calibration error
Matthew Wilcox (Oracle) (1):
mm/filemap: Fix handling of THPs in generic_file_buffered_read()
Mauri Sandberg (1):
net: mv643xx_eth: process retval from of_get_mac_address
Maxim Levitsky (1):
KVM: x86: nSVM: disallow userspace setting of MSR_AMD64_TSC_RATIO to non default value when tsc scaling disabled
Maxime Ripard (2):
drm/edid: Always set RGB444
drm/vc4: crtc: Fix runtime_pm reference counting
Md Haris Iqbal (2):
RDMA/rtrs-clt: Fix possible double free in error case RDMA/rtrs-clt: Move free_permit from free_clt to rtrs_clt_close
Meir Lichtinger (1):
net/mlx5: Update the list of the PCI supported devices
Miaohe Lin (1):
memblock: use kfree() to release kmalloced memblock regions
Miaoqian Lin (1):
iio: Fix error handling for PM
Michael Chan (3):
bnxt_en: Fix offline ethtool selftest with RDMA enabled
bnxt_en: Fix occasional ethtool -t loopback test failures
bnxt_en: Increase firmware message response DMA wait time
Michal Koutný (1):
cgroup-v1: Correct privileges check in release_agent writes
Michal Swiatkowski (1):
ice: fix setting l4 port flag when adding filter
Michel Dänzer (1):
drm/amd/display: For vblank_disable_immediate, check PSR is really used
Mike Marciniszyn (1):
IB/qib: Fix duplicate sysfs directory name
Mikko Perttunen (1):
gpu: host1x: Always return syncpoint value when waiting
Mårten Lindahl (1):
driver core: Free DMA range map when device is released
Nicholas Kazlauskas (1):
drm/amd/display: Fix stream->link_enc unassigned during stream removal
Nuno Sá (1):
iio:imu:adis16480: fix buffering for devices with no burst mode
Oleksij Rempel (1):
iio: adc: tsc2046: fix memory corruption by preventing array overflow
Oliver Graute (1):
staging: fbtft: fb_st7789v: reset display before initialization
Oliver Neukum (3):
sr9700: sanity check for packet length
USB: zaurus: support another broken Zaurus
CDC-NCM: avoid overflow in sanity checking
Ondrej Mosnacek (1):
selinux: fix misuse of mutex_is_locked()
Pablo Neira Ayuso (3):
netfilter: xt_socket: missing ifdef CONFIG_IP6_NF_IPTABLES dependency
netfilter: nf_tables_offload: incorrect flow offload action array size
netfilter: nf_tables: unregister flowtable hooks on netns exit
Pali Rohár (1):
PCI: mvebu: Fix device enumeration regression
Paolo Abeni (4):
mptcp: fix race in incoming ADD_ADDR option processing
mptcp: add mibs counter for ignored incoming options
selftests: mptcp: fix diag instability
selftests: mptcp: be more conservative with cookie MPJ limits
Paul Blakey (2):
openvswitch: Fix setting ipv6 fields causing hw csum failure net/sched: act_ct: Fix flow table lookup after ct clear or switching zones
Pavan Chebbi (1):
bnxt_en: Fix incorrect multicast rx mask setting when not requested
Phil Elwell (1):
sc16is7xx: Fix for incorrect data being transmitted
Prasad Kumpatla (1):
regmap-irq: Update interrupt clear register for proper reset
Puma Hsu (1):
xhci: re-initialize the HC during resume if HCE was set
Qu Wenruo (6):
btrfs: defrag: don't try to merge regular extents with preallocated extents
btrfs: defrag: don't defrag extents which are already at max capacity
btrfs: defrag: remove an ambiguous condition for rejection
btrfs: defrag: allow defrag_one_cluster() to skip large extent which is not a target
btrfs: autodefrag: only scan one inode once
btrfs: reduce extent threshold for autodefrag
Roi Dayan (2):
net/mlx5e: TC, Reject rules with forward and drop actions net/mlx5e: TC, Reject rules with drop and modify hdr action
Samuel Holland (1):
gpio: rockchip: Reset int_bothedge when changing trigger
Sean Anderson (1):
pinctrl: k210: Fix bias-pull-up
Sean Nyekjaer (1):
iio: accel: fxls8962af: add padding to regmap for SPI
Sebastian Andrzej Siewior (1):
usb: dwc3: gadget: Let the interrupt handler disable bottom halves.
Sergey Shtylyov (1):
ata: pata_hpt37x: disable primary channel on HPT371
Siarhei Volkau (1):
clk: jz4725b: fix mmc0 clock gating
Slark Xiao (1):
USB: serial: option: add support for DW5829e
Somnath Kotur (1):
bnxt_en: Fix active FEC reporting to ethtool
Stefano Garzarella (2):
vhost/vsock: don't check owner in vhost_vsock_stop() while releasing
block: clear iocb->private in blkdev_bio_end_io_async()
Steven Rostedt (Google) (2):
tracing: Have traceon and traceoff trigger honor the instance
tracefs: Set the group ownership in apply_options() not parse_options()
Su Yue (2):
btrfs: tree-checker: check item_size for inode_item
btrfs: tree-checker: check item_size for dev_item
Sukadev Bhattiprolu (1):
ibmvnic: schedule failover only if vioctl fails
Szymon Heidrich (1):
USB: gadget: validate endpoint index for xilinx udc
Tao Liu (1):
gso: do not skip outer ip header in case of ipip and net_failover
Tariq Toukan (1):
net/mlx5e: kTLS, Use CHECKSUM_UNNECESSARY for device-offloaded packets
Tom Rix (2):
ice: check the return of ice_ptp_gettimex64
ice: initialize local variable 'tlv'
Ville Syrjälä (3):
drm/i915: Widen the QGV point mask
drm/i915: Correctly populate use_sagv_wm for all pipes drm/i915: Fix bw atomic check when switching between SAGV vs. no SAGV
Vladimir Oltean (1):
net: dsa: avoid call to __dev_set_promiscuity() while rtnl_mutex isn't held
Xiaoke Wang (1):
net: ll_temac: check the return value of devm_kmalloc()
Xin Long (1):
ping: remove pr_err from ping_lookup
Yevgeny Kliteynik (4):
net/mlx5: DR, Cache STE shadow memory
net/mlx5: DR, Don't allow match on IP w/o matching on full ethertype/ip_version net/mlx5: DR, Fix the threshold that defines when pool sync is initiated net/mlx5: DR, Fix slab-out-of-bounds in mlx5_cmd_dr_create_fte
Yonghong Song (1):
bpf: Fix a bpf_timer initialization issue
Zhang Qiao (1):
cgroup/cpuset: Fix a race between cpuset_attach() and cpu hotplug
Zhengjun Xing (1):
perf evlist: Fix failed to use cpu list for uncore events
Zhou Qingyang (1):
spi: spi-zynq-qspi: Fix a NULL pointer dereference in zynq_qspi_exec_mem_op()
[email protected] (7):
tty: n_gsm: fix encoding of control signal octet bit DV
tty: n_gsm: fix encoding of command/response bit
tty: n_gsm: fix proper link termination after failed open
tty: n_gsm: fix NULL pointer access due to DLCI release
tty: n_gsm: fix wrong tty control line for flow control
tty: n_gsm: fix wrong modem processing in convergence layer type 2
tty: n_gsm: fix deadlock in gsmtty_open()