Linux 5.19.7
Greg Kroah-Hartman
maintainerDocumentation/arm64/silicon-errata.rst +2 -0
@@ -106,6 +106,8 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A510 | #2077057 | ARM64_ERRATUM_2077057 | +----------------+-----------------+-----------------+-----------------------------+ +| ARM | Cortex-A510 | #2441009 | ARM64_ERRATUM_2441009 | ++----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A710 | #2119858 | ARM64_ERRATUM_2119858 | +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A710 | #2054223 | ARM64_ERRATUM_2054223 |
Documentation/sphinx/kerneldoc-preamble.sty +16 -6
@@ -70,8 +70,16 @@ % Translations have Asian (CJK) characters which are only displayed if % xeCJK is used +\usepackage{ifthen} +\newboolean{enablecjk} +\setboolean{enablecjk}{false} \IfFontExistsTF{Noto Sans CJK SC}{ - % Load xeCJK when CJK font is available + \IfFileExists{xeCJK.sty}{ + \setboolean{enablecjk}{true} + }{} +}{} +\ifthenelse{\boolean{enablecjk}}{ + % Load xeCJK when both the Noto Sans CJK font and xeCJK.sty are available. \usepackage{xeCJK} % Noto CJK fonts don't provide slant shape. [AutoFakeSlant] permits % its emulation.
@@ -196,7 +204,7 @@ % Inactivate CJK after tableofcontents \apptocmd{\sphinxtableofcontents}{\kerneldocCJKoff}{}{} \xeCJKsetup{CJKspace = true}% For inter-phrase space of Korean TOC -}{ % No CJK font found +}{ % Don't enable CJK % Custom macros to on/off CJK and switch CJK fonts (Dummy) \newcommand{\kerneldocCJKon}{} \newcommand{\kerneldocCJKoff}{}
@@ -204,14 +212,16 @@ %% and ignore the argument (#1) in their definitions, whole contents of %% CJK chapters can be ignored. \newcommand{\kerneldocBeginSC}[1]{% - %% Put a note on missing CJK fonts in place of zh_CN translation. - \begin{sphinxadmonition}{note}{Note on missing fonts:} + %% Put a note on missing CJK fonts or the xecjk package in place of + %% zh_CN translation. + \begin{sphinxadmonition}{note}{Note on missing fonts and a package:} Translations of Simplified Chinese (zh\_CN), Traditional Chinese (zh\_TW), Korean (ko\_KR), and Japanese (ja\_JP) were skipped - due to the lack of suitable font families. + due to the lack of suitable font families and/or the texlive-xecjk + package. If you want them, please install ``Noto Sans CJK'' font families - by following instructions from + along with the texlive-xecjk package by following instructions from \sphinxcode{./scripts/sphinx-pre-install}. Having optional ``Noto Serif CJK'' font families will improve the looks of those translations.
Documentation/tools/rtla/rtla-timerlat-hist.rst +1 -1
@@ -33,7 +33,7 @@ EXAMPLE ======= In the example below, **rtla timerlat hist** is set to run for *10* minutes, in the cpus *0-4*, *skipping zero* only lines. Moreover, **rtla timerlat -hist** will change the priority of the *timelat* threads to run under +hist** will change the priority of the *timerlat* threads to run under *SCHED_DEADLINE* priority, with a *10us* runtime every *1ms* period. The *1ms* period is also passed to the *timerlat* tracer::
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 19 -SUBLEVEL = 6 +SUBLEVEL = 7 EXTRAVERSION = NAME = Superb Owl
arch/arm64/Kconfig +17 -0
@@ -838,6 +838,23 @@ config ARM64_ERRATUM_2224489 If unsure, say Y. +config ARM64_ERRATUM_2441009 + bool "Cortex-A510: Completion of affected memory accesses might not be guaranteed by completion of a TLBI" + default y + select ARM64_WORKAROUND_REPEAT_TLBI + help + This option adds a workaround for ARM Cortex-A510 erratum #2441009. + + Under very rare circumstances, affected Cortex-A510 CPUs + may not handle a race between a break-before-make sequence on one + CPU, and another CPU accessing the same page. This could allow a + store to a page that has been unmapped. + + Work around this by adding the affected CPUs to the list that needs + TLB sequences to be done twice. + + If unsure, say Y. + config ARM64_ERRATUM_2064142 bool "Cortex-A510: 2064142: workaround TRBE register writes while disabled" depends on CORESIGHT_TRBE
arch/arm64/kernel/cacheinfo.c +5 -1
@@ -45,7 +45,8 @@ static void ci_leaf_init(struct cacheinfo *this_leaf,int init_cache_level (unsigned int cpu) { -unsigned int ctype, level, leaves, fw_level; +unsigned int ctype, level, leaves; +int fw_level;struct cpu_cacheinfo *this_cpu_ci =get_cpu_cacheinfo (cpu);for (level =1 , leaves =0 ; level <=MAX_CACHE_LEVEL ; level++) {
@@ -63,6 +64,9 @@ int init_cache_level(unsigned int cpu)else fw_level =acpi_find_last_cache_level (cpu); +if (fw_level <0 ) +return fw_level; +if (level < fw_level) {/* * some external caches not specified in CLIDR_EL1
arch/arm64/kernel/cpu_errata.c +7 -1
@@ -213,6 +213,12 @@ static const struct arm64_cpu_capabilities arm64_repeat_tlbi_list[] = {/* Kryo4xx Gold (rcpe to rfpe) => (r0p0 to r3p0) */ ERRATA_MIDR_RANGE(MIDR_QCOM_KRYO_4XX_GOLD, 0xc, 0xe, 0xf, 0xe), }, +#endif +#ifdef CONFIG_ARM64_ERRATUM_2441009 + { +/* Cortex-A510 r0p0 -> r1p1. Fixed in r1p2 */ + ERRATA_MIDR_RANGE(MIDR_CORTEX_A510, 0, 0, 1, 1), + }, #endif {}, };
@@ -490,7 +496,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = {#endif #ifdef CONFIG_ARM64_WORKAROUND_REPEAT_TLBI { - .desc = "Qualcomm erratum 1009, or ARM erratum 1286807", + .desc = "Qualcomm erratum 1009, or ARM erratum 1286807, 2441009", .capability = ARM64_WORKAROUND_REPEAT_TLBI, .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, .matches = cpucap_multi_entry_cap_matches,
arch/s390/hypfs/hypfs_diag.c +1 -1
@@ -437,7 +437,7 @@ __init int hypfs_diag_init(void)int rc;if (diag204_probe ()) { -pr_err ("The hardware system does not support hypfs\n" ); +pr_info ("The hardware system does not support hypfs\n" );return -ENODATA ; }
arch/s390/hypfs/inode.c +1 -1
@@ -496,9 +496,9 @@ static int __init hypfs_init(void)hypfs_vm_exit (); fail_hypfs_diag_exit:hypfs_diag_exit (); +pr_err ("Initialization of hypfs failed with rc=%i\n" , rc); fail_dbfs_exit:hypfs_dbfs_exit (); -pr_err ("Initialization of hypfs failed with rc=%i\n" , rc);return rc; }device_initcall (hypfs_init)
drivers/android/binder_alloc.c +8 -1
@@ -315,12 +315,19 @@ static inline void binder_alloc_set_vma(struct binder_alloc *alloc, {unsigned long vm_start =0 ; +/* +* Allow clearing the vma with holding just the read lock to allow +* munmapping downgrade of the write lock before freeing and closing the +* file using binder_alloc_vma_close(). +*/ if (vma) { vm_start = vma->vm_start; alloc->vma_vm_mm = vma->vm_mm; +mmap_assert_write_locked (alloc->vma_vm_mm); + }else { +mmap_assert_locked (alloc->vma_vm_mm); } -mmap_assert_write_locked (alloc->vma_vm_mm); alloc->vma_addr = vm_start; }
drivers/dma-buf/udmabuf.c +17 -1
@@ -368,7 +368,23 @@ static struct miscdevice udmabuf_misc = {static int __init udmabuf_dev_init (void ) { -return misc_register (&udmabuf_misc); +int ret; + + ret =misc_register (&udmabuf_misc); +if (ret <0 ) { +pr_err ("Could not initialize udmabuf device\n" ); +return ret; + } + + ret =dma_coerce_mask_and_coherent (udmabuf_misc.this_device, +DMA_BIT_MASK (64 )); +if (ret <0 ) { +pr_err ("Could not setup DMA mask for udmabuf device\n" ); +misc_deregister (&udmabuf_misc); +return ret; + } + +return 0 ; } static void __exit udmabuf_dev_exit(void)
drivers/firmware/tegra/bpmp.c +3 -3
@@ -201,7 +201,7 @@ static ssize_t __tegra_bpmp_channel_read(struct tegra_bpmp_channel *channel,int err;if (data && size >0 ) -memcpy (data, channel->ib->data, size); +memcpy_fromio (data, channel->ib->data, size); err =tegra_bpmp_ack_response (channel);if (err <0 )
@@ -245,7 +245,7 @@ static ssize_t __tegra_bpmp_channel_write(struct tegra_bpmp_channel *channel, channel->ob->flags = flags;if (data && size >0 ) -memcpy (channel->ob->data, data, size); +memcpy_toio (channel->ob->data, data, size);return tegra_bpmp_post_request (channel); }
@@ -420,7 +420,7 @@ void tegra_bpmp_mrq_return(struct tegra_bpmp_channel *channel, int code, channel->ob->code = code;if (data && size >0 ) -memcpy (channel->ob->data, data, size); +memcpy_toio (channel->ob->data, data, size); err =tegra_bpmp_post_response (channel);if (WARN_ON (err <0 ))
drivers/gpu/drm/amd/amdgpu/amdgpu.h +1 -1
@@ -313,7 +313,7 @@ enum amdgpu_kiq_irq {AMDGPU_CP_KIQ_IRQ_DRIVER0 =0 , AMDGPU_CP_KIQ_IRQ_LAST }; - +#define SRIOV_USEC_TIMEOUT 1200000/* wait 12 * 100ms for SRIOV */ #define MAX_KIQ_REG_WAIT 5000/* in usecs, 5ms */ #define MAX_KIQ_REG_BAILOUT_INTERVAL 5/* in msecs, 5ms */ #define MAX_KIQ_REG_TRY 1000
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +2 -1
@@ -416,6 +416,7 @@ static int gmc_v10_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev,uint32_t seq;uint16_t queried_pasid;bool ret; +u32 usec_timeout =amdgpu_sriov_vf (adev) ?SRIOV_USEC_TIMEOUT : adev->usec_timeout;struct amdgpu_ring *ring = &adev->gfx.kiq.ring;struct amdgpu_kiq *kiq = &adev->gfx.kiq;
@@ -434,7 +435,7 @@ static int gmc_v10_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev,amdgpu_ring_commit (ring);spin_unlock (&adev->gfx.kiq.ring_lock); - r =amdgpu_fence_wait_polling (ring, seq, adev->usec_timeout); + r =amdgpu_fence_wait_polling (ring, seq, usec_timeout);if (r <1 ) {dev_err (adev->dev,"wait for kiq fence error: %ld.\n" , r);return -ETIME ;
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +2 -1
@@ -896,6 +896,7 @@ static int gmc_v9_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev,uint32_t seq;uint16_t queried_pasid;bool ret; +u32 usec_timeout =amdgpu_sriov_vf (adev) ?SRIOV_USEC_TIMEOUT : adev->usec_timeout;struct amdgpu_ring *ring = &adev->gfx.kiq.ring;struct amdgpu_kiq *kiq = &adev->gfx.kiq;
@@ -935,7 +936,7 @@ static int gmc_v9_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev,amdgpu_ring_commit (ring);spin_unlock (&adev->gfx.kiq.ring_lock); - r =amdgpu_fence_wait_polling (ring, seq, adev->usec_timeout); + r =amdgpu_fence_wait_polling (ring, seq, usec_timeout);if (r <1 ) {dev_err (adev->dev,"wait for kiq fence error: %ld.\n" , r);up_read (&adev->reset_domain->sem);
drivers/gpu/drm/amd/amdgpu/ih_v6_0.c +1 -0
@@ -727,6 +727,7 @@ static const struct amd_ip_funcs ih_v6_0_ip_funcs = {static const struct amdgpu_ih_funcs ih_v6_0_funcs = { .get_wptr = ih_v6_0_get_wptr, .decode_iv = amdgpu_ih_decode_iv_helper, + .decode_iv_ts = amdgpu_ih_decode_iv_ts_helper, .set_rptr = ih_v6_0_set_rptr };
drivers/gpu/drm/amd/amdgpu/navi10_ih.c +6 -1
@@ -409,9 +409,11 @@ static u32 navi10_ih_get_wptr(struct amdgpu_device *adev,u32 wptr, tmp;struct amdgpu_ih_regs *ih_regs; -if (ih == &adev->irq.ih) { +if (ih == &adev->irq.ih || ih == &adev->irq.ih_soft) {/* Only ring0 supports writeback. On other rings fall back * to register-based code with overflow checking below. +* ih_soft ring doesn't have any backing hardware registers, +* update wptr and return. */ wptr =le32_to_cpu (*ih->wptr_cpu);
@@ -483,6 +485,9 @@ static void navi10_ih_set_rptr(struct amdgpu_device *adev, {struct amdgpu_ih_regs *ih_regs; +if (ih == &adev->irq.ih_soft) +return ; +if (ih->use_doorbell) {/* XXX check if swapping is necessary on BE */ *ih->rptr_cpu = ih->rptr;
drivers/gpu/drm/amd/amdgpu/psp_v12_0.c +10 -0
@@ -101,6 +101,16 @@ static int psp_v12_0_init_microcode(struct psp_context *psp) adev->psp.dtm_context.context.bin_desc.start_addr = (uint8_t *)adev->psp.hdcp_context.context.bin_desc.start_addr +le32_to_cpu (ta_hdr->dtm.offset_bytes); + +if (adev->apu_flags &AMD_APU_IS_RENOIR ) { + adev->psp.securedisplay_context.context.bin_desc.fw_version = +le32_to_cpu (ta_hdr->securedisplay.fw_version); + adev->psp.securedisplay_context.context.bin_desc.size_bytes = +le32_to_cpu (ta_hdr->securedisplay.size_bytes); + adev->psp.securedisplay_context.context.bin_desc.start_addr = + (uint8_t *)adev->psp.hdcp_context.context.bin_desc.start_addr + +le32_to_cpu (ta_hdr->securedisplay.offset_bytes); + } }return 0 ;
drivers/gpu/drm/amd/amdgpu/soc21.c +2 -0
@@ -530,8 +530,10 @@ static int soc21_common_early_init(void *handle)case IP_VERSION (11 ,0 ,0 ): adev->cg_flags = AMD_CG_SUPPORT_GFX_CGCG | AMD_CG_SUPPORT_GFX_CGLS | +#if 0 AMD_CG_SUPPORT_GFX_3D_CGCG | AMD_CG_SUPPORT_GFX_3D_CGLS | +#endif AMD_CG_SUPPORT_GFX_MGCG | AMD_CG_SUPPORT_REPEATER_FGCG | AMD_CG_SUPPORT_GFX_FGCG |
drivers/gpu/drm/amd/amdgpu/vega10_ih.c +6 -1
@@ -334,9 +334,11 @@ static u32 vega10_ih_get_wptr(struct amdgpu_device *adev,u32 wptr, tmp;struct amdgpu_ih_regs *ih_regs; -if (ih == &adev->irq.ih) { +if (ih == &adev->irq.ih || ih == &adev->irq.ih_soft) {/* Only ring0 supports writeback. On other rings fall back * to register-based code with overflow checking below. +* ih_soft ring doesn't have any backing hardware registers, +* update wptr and return. */ wptr =le32_to_cpu (*ih->wptr_cpu);
@@ -409,6 +411,9 @@ static void vega10_ih_set_rptr(struct amdgpu_device *adev, {struct amdgpu_ih_regs *ih_regs; +if (ih == &adev->irq.ih_soft) +return ; +if (ih->use_doorbell) {/* XXX check if swapping is necessary on BE */ *ih->rptr_cpu = ih->rptr;
drivers/gpu/drm/amd/amdgpu/vega20_ih.c +6 -1
@@ -385,9 +385,11 @@ static u32 vega20_ih_get_wptr(struct amdgpu_device *adev,u32 wptr, tmp;struct amdgpu_ih_regs *ih_regs; -if (ih == &adev->irq.ih) { +if (ih == &adev->irq.ih || ih == &adev->irq.ih_soft) {/* Only ring0 supports writeback. On other rings fall back * to register-based code with overflow checking below. +* ih_soft ring doesn't have any backing hardware registers, +* update wptr and return. */ wptr =le32_to_cpu (*ih->wptr_cpu);
@@ -461,6 +463,9 @@ static void vega20_ih_set_rptr(struct amdgpu_device *adev, {struct amdgpu_ih_regs *ih_regs; +if (ih == &adev->irq.ih_soft) +return ; +if (ih->use_doorbell) {/* XXX check if swapping is necessary on BE */ *ih->rptr_cpu = ih->rptr;
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +1 -1
@@ -814,7 +814,7 @@ static int kfd_ioctl_wait_events(struct file *filp, struct kfd_process *p, err =kfd_wait_on_events (p, args->num_events, (void __user *)args->events_ptr, (args->wait_for_all !=0 ), - args->timeout, &args->wait_result); + &args->timeout, &args->wait_result);return err; }
drivers/gpu/drm/amd/amdkfd/kfd_events.c +12 -12
@@ -895,7 +895,8 @@ static long user_timeout_to_jiffies(uint32_t user_timeout_ms)return msecs_to_jiffies (user_timeout_ms) +1 ; } -static void free_waiters (uint32_t num_events,struct kfd_event_waiter *waiters) +static void free_waiters (uint32_t num_events,struct kfd_event_waiter *waiters, +bool undo_auto_reset) {uint32_t i;
@@ -904,6 +905,9 @@ static void free_waiters(uint32_t num_events, struct kfd_event_waiter *waiters)spin_lock (&waiters[i].event->lock);remove_wait_queue (&waiters[i].event->wq, &waiters[i].wait); +if (undo_auto_reset && waiters[i].activated && + waiters[i].event && waiters[i].event->auto_reset) +set_event (waiters[i].event);spin_unlock (&waiters[i].event->lock); }
@@ -912,7 +916,7 @@ static void free_waiters(uint32_t num_events, struct kfd_event_waiter *waiters)int kfd_wait_on_events (struct kfd_process *p,uint32_t num_events,void __user *data, -bool all,uint32_t user_timeout_ms, +bool all,uint32_t *user_timeout_ms,uint32_t *wait_result) { struct kfd_event_data __user *events =
@@ -921,7 +925,7 @@ int kfd_wait_on_events(struct kfd_process *p,int ret =0 ;struct kfd_event_waiter *event_waiters =NULL ; -long timeout =user_timeout_to_jiffies (user_timeout_ms); +long timeout =user_timeout_to_jiffies (*user_timeout_ms); event_waiters =alloc_event_waiters (num_events);if (!event_waiters) {
@@ -971,15 +975,11 @@ int kfd_wait_on_events(struct kfd_process *p, }if (signal_pending (current)) { -/* -* This is wrong when a nonzero, non-infinite timeout -* is specified. We need to use -* ERESTARTSYS_RESTARTBLOCK, but struct restart_block -* contains a union with data for each user and it's -* in generic kernel code that I don't want to -* touch yet. -*/ ret = -ERESTARTSYS ; +if (*user_timeout_ms !=KFD_EVENT_TIMEOUT_IMMEDIATE && + *user_timeout_ms !=KFD_EVENT_TIMEOUT_INFINITE ) + *user_timeout_ms =jiffies_to_msecs ( +max (0l , timeout-1 ));break ; }
@@ -1020,7 +1020,7 @@ int kfd_wait_on_events(struct kfd_process *p, event_waiters, events); out_unlock: -free_waiters (num_events, event_waiters); +free_waiters (num_events, event_waiters, ret == -ERESTARTSYS );mutex_unlock (&p->event_mutex); out:if (ret)
drivers/gpu/drm/amd/amdkfd/kfd_priv.h +1 -1
@@ -1314,7 +1314,7 @@ void kfd_event_free_process(struct kfd_process *p);int kfd_event_mmap (struct kfd_process *process,struct vm_area_struct *vma);int kfd_wait_on_events (struct kfd_process *p,uint32_t num_events,void __user *data, -bool all,uint32_t user_timeout_ms, +bool all,uint32_t *user_timeout_ms,uint32_t *wait_result);void kfd_signal_event_interrupt (u32 pasid,uint32_t partial_id,uint32_t valid_id_bits);
drivers/gpu/drm/amd/display/dc/core/dc.c +10 -2
@@ -1067,8 +1067,15 @@ static void disable_dangling_plane(struct dc *dc, struct dc_state *context)struct dc_stream_state *old_stream = dc->current_state->res_ctx.pipe_ctx[i].stream;bool should_disable = true; -bool pipe_split_change = - context->res_ctx.pipe_ctx[i].top_pipe != dc->current_state->res_ctx.pipe_ctx[i].top_pipe; +bool pipe_split_change = false; + +if ((context->res_ctx.pipe_ctx[i].top_pipe) && + (dc->current_state->res_ctx.pipe_ctx[i].top_pipe)) + pipe_split_change = context->res_ctx.pipe_ctx[i].top_pipe->pipe_idx != + dc->current_state->res_ctx.pipe_ctx[i].top_pipe->pipe_idx; +else + pipe_split_change = context->res_ctx.pipe_ctx[i].top_pipe != + dc->current_state->res_ctx.pipe_ctx[i].top_pipe;for (j =0 ; j < context->stream_count; j++) {if (old_stream == context->streams[j]) {
@@ -3783,6 +3790,7 @@ void dc_enable_dmub_outbox(struct dc *dc)struct dc_context *dc_ctx = dc->ctx;dmub_enable_outbox_notification (dc_ctx->dmub_srv); +DC_LOG_DC ("%s: dmub outbox notifications enabled\n" , __func__); }/**
drivers/gpu/drm/amd/display/dc/dc_link.h +1 -0
@@ -337,6 +337,7 @@ enum dc_detect_reason {DETECT_REASON_HPDRX ,DETECT_REASON_FALLBACK ,DETECT_REASON_RETRAIN , + DETECT_REASON_TDR, };bool dc_link_detect (struct dc_link *dc_link,enum dc_detect_reason reason);
drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c +2 -0
@@ -545,9 +545,11 @@ static void dce112_get_pix_clk_dividers_helper (switch (pix_clk_params->color_depth) {case COLOR_DEPTH_101010 : actual_pixel_clock_100hz = (actual_pixel_clock_100hz *5 ) >>2 ; + actual_pixel_clock_100hz -= actual_pixel_clock_100hz %10 ;break ;case COLOR_DEPTH_121212 : actual_pixel_clock_100hz = (actual_pixel_clock_100hz *6 ) >>2 ; + actual_pixel_clock_100hz -= actual_pixel_clock_100hz %10 ;break ;case COLOR_DEPTH_161616 : actual_pixel_clock_100hz = actual_pixel_clock_100hz *2 ;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +1 -0
@@ -108,6 +108,7 @@ void dcn10_lock_all_pipes(struct dc *dc,*/ if (pipe_ctx->top_pipe || !pipe_ctx->stream || + !pipe_ctx->plane_state || !tg->funcs->is_tg_enabled (tg))continue ;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c +6 -0
@@ -126,6 +126,12 @@ struct mpcc *mpc1_get_mpcc_for_dpp(struct mpc_tree *tree, int dpp_id)while (tmp_mpcc !=NULL ) {if (tmp_mpcc->dpp_id == dpp_id)return tmp_mpcc; + +/* avoid circular linked list */ +ASSERT (tmp_mpcc != tmp_mpcc->mpcc_bot); +if (tmp_mpcc == tmp_mpcc->mpcc_bot) +break ; + tmp_mpcc = tmp_mpcc->mpcc_bot; }return NULL ;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c +5 -0
@@ -464,6 +464,11 @@ void optc1_enable_optc_clock(struct timing_generator *optc, bool enable)OTG_CLOCK_ON ,1 , 1, 1000); }else { + +//last chance to clear underflow, otherwise, it will always there due to clock is off. +if (optc->funcs->is_optc_underflow_occurred (optc) == true) + optc->funcs->clear_optc_underflow (optc); +REG_UPDATE_2 (OTG_CLOCK_CONTROL ,OTG_CLOCK_GATE_DIS ,0 ,OTG_CLOCK_EN ,0 );
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_mpc.c +6 -0
@@ -531,6 +531,12 @@ static struct mpcc *mpc2_get_mpcc_for_dpp(struct mpc_tree *tree, int dpp_id)while (tmp_mpcc !=NULL ) {if (tmp_mpcc->dpp_id ==0xf || tmp_mpcc->dpp_id == dpp_id)return tmp_mpcc; + +/* avoid circular linked list */ +ASSERT (tmp_mpcc != tmp_mpcc->mpcc_bot); +if (tmp_mpcc == tmp_mpcc->mpcc_bot) +break ; + tmp_mpcc = tmp_mpcc->mpcc_bot; }return NULL ;
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubbub.c +7 -1
@@ -67,9 +67,15 @@ static uint32_t convert_and_clamp(void dcn21_dchvm_init (struct hubbub *hubbub) {struct dcn20_hubbub *hubbub1 =TO_DCN20_HUBBUB (hubbub); -uint32_t riommu_active; +uint32_t riommu_active, prefetch_done;int i; +REG_GET (DCHVM_RIOMMU_STAT0 ,HOSTVM_PREFETCH_DONE , &prefetch_done); + +if (prefetch_done) { + hubbub->riommu_active = true; +return ; + }//Init DCHVM block REG_UPDATE (DCHVM_CTRL0 ,HOSTVM_INIT_REQ ,1 );
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.c +1 -1
@@ -86,7 +86,7 @@ bool hubp3_program_surface_flip_and_addr( VMID, address->vmid);if (address->type ==PLN_ADDR_TYPE_GRPH_STEREO ) { -REG_UPDATE (DCSURF_FLIP_CONTROL ,SURFACE_FLIP_MODE_FOR_STEREOSYNC ,0x1 ); +REG_UPDATE (DCSURF_FLIP_CONTROL ,SURFACE_FLIP_MODE_FOR_STEREOSYNC ,0 );REG_UPDATE (DCSURF_FLIP_CONTROL ,SURFACE_FLIP_IN_STEREOSYNC ,0x1 ); }else {
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hpo_dp_stream_encoder.h +2 -1
@@ -162,7 +162,8 @@SE_SF (DP_SYM32_ENC0_DP_SYM32_ENC_SDP_AUDIO_CONTROL0 ,AIP_ENABLE , mask_sh),\SE_SF (DP_SYM32_ENC0_DP_SYM32_ENC_SDP_AUDIO_CONTROL0 ,ACM_ENABLE , mask_sh),\SE_SF (DP_SYM32_ENC0_DP_SYM32_ENC_VID_CRC_CONTROL ,CRC_ENABLE , mask_sh),\ - SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_CRC_CONTROL, CRC_CONT_MODE_ENABLE, mask_sh) +SE_SF (DP_SYM32_ENC0_DP_SYM32_ENC_VID_CRC_CONTROL ,CRC_CONT_MODE_ENABLE , mask_sh),\ + SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_HBLANK_CONTROL, HBLANK_MINIMUM_SYMBOL_WIDTH, mask_sh)#define DCN3_1_HPO_DP_STREAM_ENC_REG_FIELD_LIST (type) \
drivers/gpu/drm/amd/display/modules/freesync/freesync.c +3 -12
@@ -615,10 +615,6 @@ static void build_vrr_infopacket_data_v1(const struct mod_vrr_params *vrr,* Note: We should never go above the field rate of the mode timing set. */ infopacket->sb[8 ] = (unsigned char )((vrr->max_refresh_in_uhz +500000 ) /1000000 ); - -/* FreeSync HDR */ - infopacket->sb[9 ] =0 ; - infopacket->sb[10 ] =0 ; } static void build_vrr_infopacket_data_v3(const struct mod_vrr_params *vrr,
@@ -686,10 +682,6 @@ static void build_vrr_infopacket_data_v3(const struct mod_vrr_params *vrr,/* PB16 : Reserved bits 7:1, FixedRate bit 0 */ infopacket->sb[16 ] = (vrr->state ==VRR_STATE_ACTIVE_FIXED ) ?1 :0 ; - -//FreeSync HDR - infopacket->sb[9 ] =0 ; - infopacket->sb[10 ] =0 ; } static void build_vrr_infopacket_fs2_data(enum color_transfer_func app_tf,
@@ -774,8 +766,7 @@ static void build_vrr_infopacket_header_v2(enum signal_type signal,/* HB2 = [Bits 7:5 = 0] [Bits 4:0 = Length = 0x09] */ infopacket->hb2 =0x09 ; - *payload_size =0x0A ; - + *payload_size =0x09 ; }else if (dc_is_dp_signal (signal)) {/* HEADER */
@@ -824,9 +815,9 @@ static void build_vrr_infopacket_header_v3(enum signal_type signal, infopacket->hb1 = version;/* HB2 = [Bits 7:5 = 0] [Bits 4:0 = Length] */ - *payload_size =0x10 ; - infopacket->hb2 = *payload_size -1 ;//-1 for checksum + infopacket->hb2 =0x10 ; + *payload_size =0x10 ; }else if (dc_is_dp_signal (signal)) {/* HEADER */
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +1 -0
@@ -4281,6 +4281,7 @@ static const struct pptable_funcs sienna_cichlid_ppt_funcs = { .dump_pptable = sienna_cichlid_dump_pptable, .init_microcode = smu_v11_0_init_microcode, .load_microcode = smu_v11_0_load_microcode, + .fini_microcode = smu_v11_0_fini_microcode, .init_smc_tables = sienna_cichlid_init_smc_tables, .fini_smc_tables = smu_v11_0_fini_smc_tables, .init_power = smu_v11_0_init_power,
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c +3 -7
@@ -203,6 +203,9 @@ int smu_v13_0_init_pptable_microcode(struct smu_context *smu)if (!adev->scpm_enabled)return 0 ; +if (adev->ip_versions[MP1_HWIP ][0 ] ==IP_VERSION (13 ,0 ,7 )) +return 0 ; +/* override pptable_id from driver parameter */ if (amdgpu_smu_pptable_id >=0 ) { pptable_id = amdgpu_smu_pptable_id;
@@ -210,13 +213,6 @@ int smu_v13_0_init_pptable_microcode(struct smu_context *smu) }else { pptable_id = smu->smu_table.boot_values.pp_table_id; -if (adev->ip_versions[MP1_HWIP ][0 ] ==IP_VERSION (13 ,0 ,7 ) && - pptable_id ==3667 ) - pptable_id =36671 ; - -if (adev->ip_versions[MP1_HWIP ][0 ] ==IP_VERSION (13 ,0 ,7 ) && - pptable_id ==3688 ) - pptable_id =36881 ;/* * Temporary solution for SMU V13.0.0 with SCPM enabled: * - use 36831 signed pptable when pp_table_id is 3683
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c +2 -0
@@ -1583,7 +1583,9 @@ static const struct pptable_funcs smu_v13_0_0_ppt_funcs = { .dump_pptable = smu_v13_0_0_dump_pptable, .init_microcode = smu_v13_0_init_microcode, .load_microcode = smu_v13_0_load_microcode, + .fini_microcode = smu_v13_0_fini_microcode, .init_smc_tables = smu_v13_0_0_init_smc_tables, + .fini_smc_tables = smu_v13_0_fini_smc_tables, .init_power = smu_v13_0_init_power, .fini_power = smu_v13_0_fini_power, .check_fw_status = smu_v13_0_check_fw_status,
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c +3 -0
@@ -190,6 +190,9 @@ static int smu_v13_0_4_fini_smc_tables(struct smu_context *smu)kfree (smu_table->watermarks_table); smu_table->watermarks_table =NULL ; +kfree (smu_table->gpu_metrics_table); + smu_table->gpu_metrics_table =NULL ; +return 0 ; }
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +2 -0
@@ -1539,7 +1539,9 @@ static const struct pptable_funcs smu_v13_0_7_ppt_funcs = { .dump_pptable = smu_v13_0_7_dump_pptable, .init_microcode = smu_v13_0_init_microcode, .load_microcode = smu_v13_0_load_microcode, + .fini_microcode = smu_v13_0_fini_microcode, .init_smc_tables = smu_v13_0_7_init_smc_tables, + .fini_smc_tables = smu_v13_0_fini_smc_tables, .init_power = smu_v13_0_init_power, .check_fw_status = smu_v13_0_7_check_fw_status, .setup_pptable = smu_v13_0_7_setup_pptable,
drivers/gpu/drm/vc4/Kconfig +1 -0
@@ -8,6 +8,7 @@ config DRM_VC4 depends on DRM depends on SND && SND_SOC depends on COMMON_CLK + depends on PM select DRM_DISPLAY_HDMI_HELPER select DRM_DISPLAY_HELPER select DRM_KMS_HELPER
drivers/gpu/drm/vc4/vc4_hdmi.c +8 -9
@@ -2875,7 +2875,7 @@ static int vc5_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi)return 0 ; } -static int __maybe_unused vc4_hdmi_runtime_suspend (struct device *dev) +static int vc4_hdmi_runtime_suspend (struct device *dev) {struct vc4_hdmi *vc4_hdmi =dev_get_drvdata (dev);
@@ -2992,17 +2992,15 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) vc4_hdmi->disable_4kp60 = true; } +pm_runtime_enable (dev); +/* -* We need to have the device powered up at this point to call -* our reset hook and for the CEC init. +* We need to have the device powered up at this point to call +* our reset hook and for the CEC init. */ - ret =vc4_hdmi_runtime_resume (dev); + ret =pm_runtime_resume_and_get (dev);if (ret) - goto err_put_ddc; - -pm_runtime_get_noresume (dev); -pm_runtime_set_active (dev); -pm_runtime_enable (dev); + goto err_disable_runtime_pm; if ((of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi0") || of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi1")) &&
@@ -3048,6 +3046,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) err_destroy_encoder:drm_encoder_cleanup (encoder);pm_runtime_put_sync (dev); +err_disable_runtime_pm:pm_runtime_disable (dev); err_put_ddc:put_device (&vc4_hdmi->ddc->dev);
drivers/hid/amd-sfh-hid/amd_sfh_pcie.c +18 -0
@@ -285,11 +285,29 @@ static int amd_sfh_irq_init(struct amd_mp2_dev *privdata)return 0 ; } +static const struct dmi_system_id dmi_nodevs[] = { + { +/* +* Google Chromebooks use Chrome OS Embedded Controller Sensor +* Hub instead of Sensor Hub Fusion and leaves MP2 +* uninitialized, which disables all functionalities, even +* including the registers necessary for feature detections. +*/ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Google" ), + }, + }, + { } +}; +static int amd_mp2_pci_probe (struct pci_dev *pdev,const struct pci_device_id *id) {struct amd_mp2_dev *privdata;int rc; +if (dmi_first_match (dmi_nodevs)) +return -ENODEV ; + privdata =devm_kzalloc (&pdev->dev,sizeof (*privdata),GFP_KERNEL );if (!privdata)return -ENOMEM ;
drivers/hid/hid-asus.c +7 -0
@@ -1212,6 +1212,13 @@ static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc, rdesc = new_rdesc; } +if (drvdata->quirks &QUIRK_ROG_NKEY_KEYBOARD && + *rsize ==331 && rdesc[190 ] ==0x85 && rdesc[191 ] ==0x5a && + rdesc[204 ] ==0x95 && rdesc[205 ] ==0x05 ) { +hid_info (hdev,"Fixing up Asus N-KEY keyb report descriptor\n" ); + rdesc[205 ] =0x01 ; + } +return rdesc; }
drivers/hid/hid-ids.h +3 -0
@@ -185,6 +185,8 @@#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021 0x029c#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021 0x029a#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021 0x029f +#define USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT 0x8102 +#define USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY 0x8302#define USB_VENDOR_ID_ASUS 0x0486#define USB_DEVICE_ID_ASUS_T91MT 0x0185
@@ -414,6 +416,7 @@#define USB_DEVICE_ID_ASUS_UX550_TOUCHSCREEN 0x2706#define I2C_DEVICE_ID_SURFACE_GO_TOUCHSCREEN 0x261A#define I2C_DEVICE_ID_SURFACE_GO2_TOUCHSCREEN 0x2A1C +#define I2C_DEVICE_ID_LENOVO_YOGA_C630_TOUCHSCREEN 0x279F#define USB_VENDOR_ID_ELECOM 0x056e#define USB_DEVICE_ID_ELECOM_BM084 0x0061
drivers/hid/hid-input.c +6 -1
@@ -383,6 +383,8 @@ static const struct hid_device_id hid_battery_quirks[] = { HID_BATTERY_QUIRK_IGNORE }, {HID_I2C_DEVICE (USB_VENDOR_ID_ELAN ,I2C_DEVICE_ID_SURFACE_GO2_TOUCHSCREEN ), HID_BATTERY_QUIRK_IGNORE }, + { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_LENOVO_YOGA_C630_TOUCHSCREEN), + HID_BATTERY_QUIRK_IGNORE }, {} };
@@ -1532,7 +1534,10 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct* assume ours */ if (!report->tool) -hid_report_set_tool (report, input, usage->code); + report->tool = usage->code; + +/* drivers may have changed the value behind our back, resend it */ +hid_report_set_tool (report, input, report->tool); }else {hid_report_release_tool (report, input, usage->code); }
drivers/hid/hid-nintendo.c +4 -2
@@ -1222,6 +1222,7 @@ static void joycon_parse_report(struct joycon_ctlr *ctlr,spin_lock_irqsave (&ctlr->lock, flags);if (IS_ENABLED (CONFIG_NINTENDO_FF ) && rep->vibrator_report && + ctlr->ctlr_state !=JOYCON_CTLR_STATE_REMOVED && (msecs - ctlr->rumble_msecs) >=JC_RUMBLE_PERIOD_MS && (ctlr->rumble_queue_head != ctlr->rumble_queue_tail || ctlr->rumble_zero_countdown >0 )) {
@@ -1546,12 +1547,13 @@ static int joycon_set_rumble(struct joycon_ctlr *ctlr, u16 amp_r, u16 amp_l, ctlr->rumble_queue_head =0 ;memcpy (ctlr->rumble_data[ctlr->rumble_queue_head], data,JC_RUMBLE_DATA_SIZE ); -spin_unlock_irqrestore (&ctlr->lock, flags);/* don't wait for the periodic send (reduces latency) */ -if (schedule_now) +if (schedule_now && ctlr->ctlr_state !=JOYCON_CTLR_STATE_REMOVED )queue_work (ctlr->rumble_queue, &ctlr->rumble_worker); +spin_unlock_irqrestore (&ctlr->lock, flags); +return 0 ; }
drivers/hid/hid-quirks.c +2 -0
@@ -314,6 +314,8 @@ static const struct hid_device_id hid_have_special_driver[] = { { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) }, #endif #if IS_ENABLED(CONFIG_HID_APPLEIR) { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
drivers/hid/hid-steam.c +10 -0
@@ -134,6 +134,11 @@ static int steam_recv_report(struct steam_device *steam,int ret; r = steam->hdev->report_enum[HID_FEATURE_REPORT ].report_id_hash[0 ]; +if (!r) { +hid_err (steam->hdev,"No HID_FEATURE_REPORT submitted - nothing to read\n" ); +return -EINVAL ; + } +if (hid_report_len (r) <64 )return -EINVAL ;
@@ -165,6 +170,11 @@ static int steam_send_report(struct steam_device *steam,int ret; r = steam->hdev->report_enum[HID_FEATURE_REPORT ].report_id_hash[0 ]; +if (!r) { +hid_err (steam->hdev,"No HID_FEATURE_REPORT submitted - nothing to read\n" ); +return -EINVAL ; + } +if (hid_report_len (r) <64 )return -EINVAL ;
drivers/hid/hid-thrustmaster.c +2 -1
@@ -67,12 +67,13 @@ static const struct tm_wheel_info tm_wheels_infos[] = { {0x0200, 0x0005, "Thrustmaster T300RS (Missing Attachment)"}, {0x0206, 0x0005, "Thrustmaster T300RS"}, {0x0209, 0x0005, "Thrustmaster T300RS (Open Wheel Attachment)"}, + {0x020a, 0x0005, "Thrustmaster T300RS (Sparco R383 Mod)"}, {0x0204, 0x0005, "Thrustmaster T300 Ferrari Alcantara Edition"}, {0x0002, 0x0002, "Thrustmaster T500RS"} //{0x0407, 0x0001, "Thrustmaster TMX"} }; -static const uint8_t tm_wheels_infos_length =4 ; +static const uint8_t tm_wheels_infos_length =7 ;/* * This structs contains (in little endian) the response data
drivers/hid/hidraw.c +2 -0
@@ -350,6 +350,8 @@ static int hidraw_release(struct inode * inode, struct file * file)down_write (&minors_rwsem);spin_lock_irqsave (&hidraw_table[minor]->list_lock, flags); +for (int i = list->tail; i < list->head; i++) +kfree (list->buffer[i].value);list_del (&list->node);spin_unlock_irqrestore (&hidraw_table[minor]->list_lock, flags);kfree (list);
drivers/hid/intel-ish-hid/ipc/hw-ish.h +1 -0
@@ -32,6 +32,7 @@#define ADL_P_DEVICE_ID 0x51FC#define ADL_N_DEVICE_ID 0x54FC#define RPL_S_DEVICE_ID 0x7A78 +#define MTL_P_DEVICE_ID 0x7E45#define REVISION_ID_CHT_A0 0x6#define REVISION_ID_CHT_Ax_SI 0x0
drivers/hid/intel-ish-hid/ipc/pci-ish.c +1 -0
@@ -43,6 +43,7 @@ static const struct pci_device_id ish_pci_tbl[] = { {PCI_DEVICE(PCI_VENDOR_ID_INTEL, ADL_P_DEVICE_ID)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, ADL_N_DEVICE_ID)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, RPL_S_DEVICE_ID)}, + {PCI_DEVICE(PCI_VENDOR_ID_INTEL, MTL_P_DEVICE_ID)}, {0, } };MODULE_DEVICE_TABLE (pci, ish_pci_tbl);
drivers/media/usb/pvrusb2/pvrusb2-hdw.c +1 -0
@@ -2610,6 +2610,7 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,del_timer_sync (&hdw->encoder_run_timer);del_timer_sync (&hdw->encoder_wait_timer);flush_work (&hdw->workpoll); +v4l2_device_unregister (&hdw->v4l2_dev);usb_free_urb (hdw->ctl_read_urb);usb_free_urb (hdw->ctl_write_urb);kfree (hdw->ctl_read_buffer);
drivers/mmc/host/mtk-sd.c +6 -0
@@ -2414,6 +2414,9 @@ static void msdc_cqe_disable(struct mmc_host *mmc, bool recovery)/* disable busy check */ sdr_clr_bits (host->base +MSDC_PATCH_BIT1 ,MSDC_PB1_BUSY_CHECK_SEL ); + val =readl (host->base +MSDC_INT ); +writel (val, host->base +MSDC_INT ); +if (recovery) {sdr_set_field (host->base +MSDC_DMA_CTRL ,MSDC_DMA_CTRL_STOP ,1 );
@@ -2871,11 +2874,14 @@ static int __maybe_unused msdc_suspend(struct device *dev) {struct mmc_host *mmc =dev_get_drvdata (dev);int ret; +u32 val;if (mmc->caps2 &MMC_CAP2_CQE ) { ret =cqhci_suspend (mmc);if (ret)return ret; + val =readl (((struct msdc_host *)mmc_priv (mmc))->base +MSDC_INT ); +writel (val, ((struct msdc_host *)mmc_priv (mmc))->base +MSDC_INT ); }return pm_runtime_force_suspend (dev);
drivers/mmc/host/sdhci-of-dwcmshc.c +62 -26
227 lines not on this page · raw message
drivers/net/ethernet/microchip/lan966x/lan966x_main.c +4 -4
@@ -710,7 +710,7 @@ static void lan966x_cleanup_ports(struct lan966x *lan966x)disable_irq (lan966x->xtr_irq); lan966x->xtr_irq = -ENXIO ; -if (lan966x->ana_irq) { +if (lan966x->ana_irq >0 ) {disable_irq (lan966x->ana_irq); lan966x->ana_irq = -ENXIO ; }
@@ -718,10 +718,10 @@ static void lan966x_cleanup_ports(struct lan966x *lan966x)if (lan966x->fdma)devm_free_irq (lan966x->dev, lan966x->fdma_irq, lan966x); -if (lan966x->ptp_irq) +if (lan966x->ptp_irq >0 )devm_free_irq (lan966x->dev, lan966x->ptp_irq, lan966x); -if (lan966x->ptp_ext_irq) +if (lan966x->ptp_ext_irq >0 )devm_free_irq (lan966x->dev, lan966x->ptp_ext_irq, lan966x); }
@@ -1049,7 +1049,7 @@ static int lan966x_probe(struct platform_device *pdev) } lan966x->ana_irq =platform_get_irq_byname (pdev,"ana" ); -if (lan966x->ana_irq) { +if (lan966x->ana_irq >0 ) { err =devm_request_threaded_irq (&pdev->dev, lan966x->ana_irq,NULL , lan966x_ana_irq_handler,IRQF_ONESHOT ,"ana irq" , lan966x);
drivers/pci/pcie/portdrv_core.c +8 -1
@@ -222,8 +222,15 @@ static int get_port_device_capability(struct pci_dev *dev)#ifdef CONFIG_PCIEAER if (dev->aer_cap &&pci_aer_available () && - (pcie_ports_native || host->native_aer)) + (pcie_ports_native || host->native_aer)) { services |=PCIE_PORT_SERVICE_AER ; + +/* +* Disable AER on this port in case it's been enabled by the +* BIOS (the AER service driver will enable it when necessary). +*/ +pci_disable_pcie_error_reporting (dev); + }#endif /* Root Ports and Root Complex Event Collectors may generate PMEs */
drivers/platform/x86/serial-multi-instantiate.c +1 -0
@@ -329,6 +329,7 @@ static const struct acpi_device_id smi_acpi_ids[] = { { "CSC3551", (unsigned long)&cs35l41_hda },/* Non-conforming _HID for Cirrus Logic already released */ { "CLSA0100", (unsigned long)&cs35l41_hda }, + { "CLSA0101", (unsigned long)&cs35l41_hda }, { } };MODULE_DEVICE_TABLE (acpi, smi_acpi_ids);
drivers/usb/gadget/udc/core.c +6 -5
@@ -1728,13 +1728,14 @@ static int usb_udc_uevent(struct device *dev, struct kobj_uevent_env *env)return ret; } -if (udc->driver) { +mutex_lock (&udc_lock); +if (udc->driver) ret =add_uevent_var (env,"USB_UDC_DRIVER=%s" , udc->driver->function); -if (ret) { -dev_err (dev,"failed to add uevent USB_UDC_DRIVER\n" ); -return ret; - } +mutex_unlock (&udc_lock); +if (ret) { +dev_err (dev,"failed to add uevent USB_UDC_DRIVER\n" ); +return ret; }return 0 ;
drivers/video/fbdev/pm2fb.c +5 -0
@@ -617,6 +617,11 @@ static int pm2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)return -EINVAL ; } +if (!var->pixclock) { +DPRINTK ("pixclock is zero\n" ); +return -EINVAL ; + } +if (PICOS2KHZ (var->pixclock) >PM2_MAX_PIXCLOCK ) {DPRINTK ("pixclock too high (%ldKHz)\n" ,PICOS2KHZ (var->pixclock));
fs/btrfs/ctree.c +3 -0
@@ -2075,6 +2075,9 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root,if (!p->skip_locking) { level =btrfs_header_level (b); + +btrfs_maybe_reset_lockdep_class (root, b); +if (level <= write_lock_level) {btrfs_tree_lock (b); p->locks[level] =BTRFS_WRITE_LOCK ;
fs/btrfs/ctree.h +2 -0
@@ -1146,6 +1146,8 @@ enum {BTRFS_ROOT_ORPHAN_CLEANUP ,/* This root has a drop operation that was started previously. */ BTRFS_ROOT_UNFINISHED_DROP , +/* This reloc root needs to have its buffers lockdep class reset. */ + BTRFS_ROOT_RESET_LOCKDEP_CLASS, };static inline void btrfs_wake_unfinished_drop (struct btrfs_fs_info *fs_info)
fs/btrfs/disk-io.c +0 -82
88 lines not on this page · raw message
fs/btrfs/disk-io.h +0 -10
@@ -148,14 +148,4 @@ int btrfs_init_root_free_objectid(struct btrfs_root *root);int __init btrfs_end_io_wq_init (void );void __cold btrfs_end_io_wq_exit (void ); -#ifdef CONFIG_DEBUG_LOCK_ALLOC -void btrfs_set_buffer_lockdep_class (u64 objectid, -struct extent_buffer *eb,int level); -#else -static inline void btrfs_set_buffer_lockdep_class (u64 objectid, -struct extent_buffer *eb,int level) -{ -} -#endif -#endif
fs/btrfs/extent-tree.c +17 -1
@@ -4871,6 +4871,7 @@ btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root, {struct btrfs_fs_info *fs_info = root->fs_info;struct extent_buffer *buf; +u64 lockdep_owner = owner; buf =btrfs_find_create_tree_block (fs_info, bytenr, owner, level);if (IS_ERR (buf))
@@ -4889,12 +4890,27 @@ btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root,return ERR_PTR (-EUCLEAN ); } +/* +* The reloc trees are just snapshots, so we need them to appear to be +* just like any other fs tree WRT lockdep. +* +* The exception however is in replace_path() in relocation, where we +* hold the lock on the original fs root and then search for the reloc +* root. At that point we need to make sure any reloc root buffers are +* set to the BTRFS_TREE_RELOC_OBJECTID lockdep class in order to make +* lockdep happy. +*/ +if (lockdep_owner ==BTRFS_TREE_RELOC_OBJECTID && + !test_bit (BTRFS_ROOT_RESET_LOCKDEP_CLASS , &root->state)) + lockdep_owner =BTRFS_FS_TREE_OBJECTID ; +/* * This needs to stay, because we could allocate a freed block from an * old tree into a new tree, so we need to make sure this new block is * set to the appropriate level and owner. */ -btrfs_set_buffer_lockdep_class (owner, buf, level); +btrfs_set_buffer_lockdep_class (lockdep_owner, buf, level); +__btrfs_tree_lock (buf, nest);btrfs_clean_tree_block (buf);clear_bit (EXTENT_BUFFER_STALE , &buf->bflags);
fs/btrfs/extent_io.c +10 -1
@@ -6228,6 +6228,7 @@ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,struct extent_buffer *exists =NULL ;struct page *p;struct address_space *mapping = fs_info->btree_inode->i_mapping; +u64 lockdep_owner = owner_root;int uptodate =1 ;int ret;
@@ -6252,7 +6253,15 @@ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info, eb =__alloc_extent_buffer (fs_info, start, len);if (!eb)return ERR_PTR (-ENOMEM ); -btrfs_set_buffer_lockdep_class (owner_root, eb, level); + +/* +* The reloc trees are just snapshots, so we need them to appear to be +* just like any other fs tree WRT lockdep. +*/ +if (lockdep_owner ==BTRFS_TREE_RELOC_OBJECTID ) + lockdep_owner =BTRFS_FS_TREE_OBJECTID ; + +btrfs_set_buffer_lockdep_class (lockdep_owner, eb, level); num_pages =num_extent_pages (eb);for (i =0 ; i < num_pages; i++, index++) {
fs/btrfs/locking.c +91 -0
109 lines not on this page · raw message
fs/btrfs/locking.h +14 -0
@@ -131,4 +131,18 @@ void btrfs_drew_write_unlock(struct btrfs_drew_lock *lock);void btrfs_drew_read_lock (struct btrfs_drew_lock *lock);void btrfs_drew_read_unlock (struct btrfs_drew_lock *lock); +#ifdef CONFIG_DEBUG_LOCK_ALLOC +void btrfs_set_buffer_lockdep_class (u64 objectid,struct extent_buffer *eb,int level); +void btrfs_maybe_reset_lockdep_class (struct btrfs_root *root,struct extent_buffer *eb); +#else +static inline void btrfs_set_buffer_lockdep_class (u64 objectid, +struct extent_buffer *eb,int level) +{ +} +static inline void btrfs_maybe_reset_lockdep_class (struct btrfs_root *root, +struct extent_buffer *eb) +{ +} +#endif +#endif
fs/btrfs/relocation.c +2 -0
@@ -1326,7 +1326,9 @@ int replace_path(struct btrfs_trans_handle *trans, struct reloc_control *rc,btrfs_release_path (path); path->lowest_level = level; +set_bit (BTRFS_ROOT_RESET_LOCKDEP_CLASS , &src->state); ret =btrfs_search_slot (trans, src, &key, path,0 ,1 ); +clear_bit (BTRFS_ROOT_RESET_LOCKDEP_CLASS , &src->state); path->lowest_level =0 ;if (ret) {if (ret >0 )
fs/btrfs/tree-checker.c +23 -2
@@ -1233,7 +1233,8 @@ static void extent_err(const struct extent_buffer *eb, int slot, }static int check_extent_item (struct extent_buffer *leaf, -struct btrfs_key *key,int slot) +struct btrfs_key *key,int slot, +struct btrfs_key *prev_key) {struct btrfs_fs_info *fs_info = leaf->fs_info;struct btrfs_extent_item *ei;
@@ -1453,6 +1454,26 @@ static int check_extent_item(struct extent_buffer *leaf, total_refs, inline_refs);return -EUCLEAN ; } + +if ((prev_key->type ==BTRFS_EXTENT_ITEM_KEY ) || + (prev_key->type ==BTRFS_METADATA_ITEM_KEY )) { +u64 prev_end = prev_key->objectid; + +if (prev_key->type ==BTRFS_METADATA_ITEM_KEY ) + prev_end += fs_info->nodesize; +else + prev_end += prev_key->offset; + +if (unlikely (prev_end > key->objectid)) { +extent_err (leaf, slot, +"previous extent [%llu %u %llu] overlaps current extent [%llu %u %llu]" , + prev_key->objectid, prev_key->type, + prev_key->offset, key->objectid, key->type, + key->offset); +return -EUCLEAN ; + } + } +return 0 ; }
@@ -1621,7 +1642,7 @@ static int check_leaf_item(struct extent_buffer *leaf,break ;case BTRFS_EXTENT_ITEM_KEY :case BTRFS_METADATA_ITEM_KEY : - ret =check_extent_item (leaf, key, slot); + ret =check_extent_item (leaf, key, slot, prev_key);break ;case BTRFS_TREE_BLOCK_REF_KEY :case BTRFS_SHARED_DATA_REF_KEY :
fs/ksmbd/mgmt/tree_connect.c +1 -1
@@ -18,7 +18,7 @@struct ksmbd_tree_conn_status ksmbd_tree_conn_connect (struct ksmbd_session *sess,char *share_name) { -struct ksmbd_tree_conn_status status = {-EINVAL ,NULL }; +struct ksmbd_tree_conn_status status = {-ENOENT ,NULL };struct ksmbd_tree_connect_response *resp =NULL ;struct ksmbd_share_config *sc;struct ksmbd_tree_connect *tree_conn =NULL ;
fs/ksmbd/smb2pdu.c +11 -10
@@ -1930,8 +1930,9 @@ int smb2_tree_connect(struct ksmbd_work *work) rsp->hdr.Status =STATUS_SUCCESS ; rc =0 ;break ; +case -ENOENT :case KSMBD_TREE_CONN_STATUS_NO_SHARE : - rsp->hdr.Status =STATUS_BAD_NETWORK_PATH ; + rsp->hdr.Status =STATUS_BAD_NETWORK_NAME ;break ;case -ENOMEM :case KSMBD_TREE_CONN_STATUS_NOMEM :
@@ -2314,15 +2315,15 @@ static int smb2_remove_smb_xattrs(struct path *path) name += strlen(name) + 1) {ksmbd_debug (SMB ,"%s, len %zd\n" , name,strlen (name)); -if (strncmp (name,XATTR_USER_PREFIX ,XATTR_USER_PREFIX_LEN ) && -strncmp (&name[XATTR_USER_PREFIX_LEN ],DOS_ATTRIBUTE_PREFIX , -DOS_ATTRIBUTE_PREFIX_LEN ) && -strncmp (&name[XATTR_USER_PREFIX_LEN ],STREAM_PREFIX ,STREAM_PREFIX_LEN )) -continue ; - - err =ksmbd_vfs_remove_xattr (user_ns, path->dentry, name); -if (err) -ksmbd_debug (SMB ,"remove xattr failed : %s\n" , name); +if (!strncmp (name,XATTR_USER_PREFIX ,XATTR_USER_PREFIX_LEN ) && + !strncmp (&name[XATTR_USER_PREFIX_LEN ],STREAM_PREFIX , +STREAM_PREFIX_LEN )) { + err =ksmbd_vfs_remove_xattr (user_ns, path->dentry, + name); +if (err) +ksmbd_debug (SMB ,"remove xattr failed : %s\n" , + name); + } } out:kvfree (xattr_list);
fs/ntfs3/xattr.c +6 -1
@@ -118,7 +118,7 @@ static int ntfs_read_ea(struct ntfs_inode *ni, struct EA_FULL **ea,run_init (&run); - err =attr_load_runs (attr_ea, ni, &run,NULL ); + err =attr_load_runs_range (ni,ATTR_EA ,NULL ,0 , &run,0 , size);if (!err) err =ntfs_read_run_nb (sbi, &run,0 , ea_p, size,NULL );run_close (&run);
@@ -444,6 +444,11 @@ static noinline int ntfs_set_ea(struct inode *inode, const char *name,/* Delete xattr, ATTR_EA */ ni_remove_attr_le (ni, attr, mi, le); }else if (attr->non_res) { + err =attr_load_runs_range (ni,ATTR_EA ,NULL ,0 , &ea_run,0 , + size); +if (err) + goto out; + err =ntfs_sb_write_run (sbi, &ea_run,0 , ea_all, size,0 );if (err) goto out;
include/linux/rmap.h +5 -2
@@ -41,12 +41,15 @@ struct anon_vma {atomic_t refcount;/* -* Count of child anon_vmas and VMAs which points to this anon_vma. +* Count of child anon_vmas. Equals to the count of all anon_vmas that +* have ->parent pointing to this one, including itself. * * This counter is used for making decision about reusing anon_vma * instead of forking new one. See comments in function anon_vma_clone. */ -unsigned degree; +unsigned long num_children; +/* Count of VMAs whose ->anon_vma pointer points to this object. */ +unsigned long num_active_vmas;struct anon_vma *parent;/* Parent of this anon_vma */
include/linux/skbuff.h +8 -0
@@ -2624,6 +2624,14 @@ static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset)#endif /* NET_SKBUFF_DATA_USES_OFFSET */ +static inline void skb_assert_len (struct sk_buff *skb) +{ +#ifdef CONFIG_DEBUG_NET +if (WARN_ONCE (!skb->len,"%s\n" , __func__)) +DO_ONCE_LITE (skb_dump,KERN_ERR , skb, false); +#endif /* CONFIG_DEBUG_NET */ +} +/* * Add data to an sk_buff */
include/linux/skmsg.h +2 -1
@@ -277,7 +277,8 @@ static inline void sk_msg_sg_copy_clear(struct sk_msg *msg, u32 start)static inline struct sk_psock *sk_psock (const struct sock *sk) { -return rcu_dereference_sk_user_data (sk); +return __rcu_dereference_sk_user_data_with_flags (sk, +SK_USER_DATA_PSOCK ); } static inline void sk_psock_set_state(struct sk_psock *psock,
include/net/sock.h +48 -20
86 lines not on this page · raw message
kernel/trace/ftrace.c +10 -0
@@ -2937,6 +2937,16 @@ int ftrace_startup(struct ftrace_ops *ops, int command)ftrace_startup_enable (command); +/* +* If ftrace is in an undefined state, we just remove ops from list +* to prevent the NULL pointer, instead of totally rolling it back and +* free trampoline, because those actions could cause further damage. +*/ +if (unlikely (ftrace_disabled)) { +__unregister_ftrace_function (ops); +return -ENODEV ; + } + ops->flags &= ~FTRACE_OPS_FL_ADDING ;return 0 ;
lib/crypto/Kconfig +0 -1
@@ -33,7 +33,6 @@ config CRYPTO_ARCH_HAVE_LIB_CHACHA config CRYPTO_LIB_CHACHA_GENERIC tristate - select XOR_BLOCKS help This symbol can be depended upon by arch implementations of the ChaCha library interface that require the generic code as a
mm/rmap.c +16 -13
@@ -93,7 +93,8 @@ static inline struct anon_vma *anon_vma_alloc(void) anon_vma =kmem_cache_alloc (anon_vma_cachep,GFP_KERNEL );if (anon_vma) {atomic_set (&anon_vma->refcount,1 ); - anon_vma->degree =1 ;/* Reference for first vma */ + anon_vma->num_children =0 ; + anon_vma->num_active_vmas =0 ; anon_vma->parent = anon_vma;/* * Initialise the anon_vma root to point to itself. If called
@@ -201,6 +202,7 @@ int __anon_vma_prepare(struct vm_area_struct *vma) anon_vma =anon_vma_alloc ();if (unlikely (!anon_vma)) goto out_enomem_free_avc; + anon_vma->num_children++;/* self-parent link for new root */ allocated = anon_vma; }
@@ -210,8 +212,7 @@ int __anon_vma_prepare(struct vm_area_struct *vma)if (likely (!vma->anon_vma)) { vma->anon_vma = anon_vma;anon_vma_chain_link (vma, avc, anon_vma); -/* vma reference or self-parent link for new root */ - anon_vma->degree++; + anon_vma->num_active_vmas++; allocated =NULL ; avc =NULL ; }
@@ -296,19 +297,19 @@ int anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src)anon_vma_chain_link (dst, avc, anon_vma);/* -* Reuse existing anon_vma if its degree lower than two, -* that means it has no vma and only one anon_vma child. +* Reuse existing anon_vma if it has no vma and only one +* anon_vma child. * -* Do not choose parent anon_vma, otherwise first child -* will always reuse it. Root anon_vma is never reused: +* Root anon_vma is never reused: * it has self-parent reference and at least one child. */ if (!dst->anon_vma && src->anon_vma && - anon_vma != src->anon_vma && anon_vma->degree <2 ) + anon_vma->num_children <2 && + anon_vma->num_active_vmas ==0 ) dst->anon_vma = anon_vma; }if (dst->anon_vma) - dst->anon_vma->degree++; + dst->anon_vma->num_active_vmas++;unlock_anon_vma_root (root);return 0 ;
@@ -358,6 +359,7 @@ int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma) anon_vma =anon_vma_alloc ();if (!anon_vma) goto out_error; + anon_vma->num_active_vmas++; avc =anon_vma_chain_alloc (GFP_KERNEL );if (!avc) goto out_error_free_anon_vma;
@@ -378,7 +380,7 @@ int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma) vma->anon_vma = anon_vma;anon_vma_lock_write (anon_vma);anon_vma_chain_link (vma, avc, anon_vma); - anon_vma->parent->degree++; + anon_vma->parent->num_children++;anon_vma_unlock_write (anon_vma);return 0 ;
@@ -410,7 +412,7 @@ void unlink_anon_vmas(struct vm_area_struct *vma)* to free them outside the lock. */ if (RB_EMPTY_ROOT (&anon_vma->rb_root.rb_root)) { - anon_vma->parent->degree--; + anon_vma->parent->num_children--;continue ; }
@@ -418,7 +420,7 @@ void unlink_anon_vmas(struct vm_area_struct *vma)anon_vma_chain_free (avc); }if (vma->anon_vma) { - vma->anon_vma->degree--; + vma->anon_vma->num_active_vmas--;/* * vma would still be needed after unlink, and anon_vma will be prepared
@@ -436,7 +438,8 @@ void unlink_anon_vmas(struct vm_area_struct *vma)list_for_each_entry_safe (avc, next, &vma->anon_vma_chain, same_vma) {struct anon_vma *anon_vma = avc->anon_vma; -VM_WARN_ON (anon_vma->degree); +VM_WARN_ON (anon_vma->num_children); +VM_WARN_ON (anon_vma->num_active_vmas);put_anon_vma (anon_vma);list_del (&avc->same_vma);
net/bluetooth/l2cap_core.c +5 -5
@@ -1991,11 +1991,11 @@ static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm, src_match = !bacmp (&c->src, src); dst_match = !bacmp (&c->dst, dst);if (src_match && dst_match) { - c =l2cap_chan_hold_unless_zero (c); -if (c) { -read_unlock (&chan_list_lock); -return c; - } +if (!l2cap_chan_hold_unless_zero (c)) +continue ; + +read_unlock (&chan_list_lock); +return c; }/* Closest match */
net/bpf/test_run.c +3 -0
@@ -955,6 +955,9 @@ static int convert___skb_to_skb(struct sk_buff *skb, struct __sk_buff *__skb) {struct qdisc_skb_cb *cb = (struct qdisc_skb_cb *)skb->cb; +if (!skb->len) +return -EINVAL ; +if (!__skb)return 0 ;
net/core/dev.c +1 -0
@@ -4168,6 +4168,7 @@ int __dev_queue_xmit(struct sk_buff *skb, struct net_device *sb_dev)bool again = false;skb_reset_mac_header (skb); +skb_assert_len (skb);if (unlikely (skb_shinfo (skb)->tx_flags &SKBTX_SCHED_TSTAMP ))__skb_tstamp_tx (skb,NULL ,NULL , skb->sk,SCM_TSTAMP_SCHED );
net/core/neighbour.c +21 -6
@@ -307,11 +307,26 @@ static int neigh_del_timer(struct neighbour *n)return 0 ; } -static void pneigh_queue_purge (struct sk_buff_head *list) +static void pneigh_queue_purge (struct sk_buff_head *list,struct net *net) { +struct sk_buff_head tmp; +unsigned long flags;struct sk_buff *skb; -while ((skb =skb_dequeue (list)) !=NULL ) { +skb_queue_head_init (&tmp); +spin_lock_irqsave (&list->lock, flags); + skb =skb_peek (list); +while (skb !=NULL ) { +struct sk_buff *skb_next =skb_peek_next (skb, list); +if (net ==NULL ||net_eq (dev_net (skb->dev), net)) { +__skb_unlink (skb, list); +__skb_queue_tail (&tmp, skb); + } + skb = skb_next; + } +spin_unlock_irqrestore (&list->lock, flags); + +while ((skb =__skb_dequeue (&tmp))) {dev_put (skb->dev);kfree_skb (skb); }
@@ -385,9 +400,9 @@ static int __neigh_ifdown(struct neigh_table *tbl, struct net_device *dev,write_lock_bh (&tbl->lock);neigh_flush_dev (tbl, dev, skip_perm);pneigh_ifdown_and_unlock (tbl, dev); - -del_timer_sync (&tbl->proxy_timer); -pneigh_queue_purge (&tbl->proxy_queue); +pneigh_queue_purge (&tbl->proxy_queue,dev_net (dev)); +if (skb_queue_empty_lockless (&tbl->proxy_queue)) +del_timer_sync (&tbl->proxy_timer);return 0 ; }
@@ -1787,7 +1802,7 @@ int neigh_table_clear(int index, struct neigh_table *tbl)cancel_delayed_work_sync (&tbl->managed_work);cancel_delayed_work_sync (&tbl->gc_work);del_timer_sync (&tbl->proxy_timer); -pneigh_queue_purge (&tbl->proxy_queue); +pneigh_queue_purge (&tbl->proxy_queue,NULL );neigh_ifdown (tbl,NULL );if (atomic_read (&tbl->entries))pr_crit ("neighbour leakage\n" );
net/core/skmsg.c +3 -1
@@ -735,7 +735,9 @@ struct sk_psock *sk_psock_init(struct sock *sk, int node)sk_psock_set_state (psock,SK_PSOCK_TX_ENABLED );refcount_set (&psock->refcnt,1 ); -rcu_assign_sk_user_data_nocopy (sk, psock); +__rcu_assign_sk_user_data_with_flags (sk, psock, +SK_USER_DATA_NOCOPY | +SK_USER_DATA_PSOCK );sock_hold (sk); out:
net/netfilter/Kconfig +0 -1
@@ -144,7 +144,6 @@ config NF_CONNTRACK_ZONES config NF_CONNTRACK_PROCFS bool "Supply CT list in procfs (OBSOLETE)" - default y depends on PROC_FS help This option enables for the list of known conntrack entries
net/packet/af_packet.c +2 -2
@@ -3037,8 +3037,8 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)if (err) goto out_free; -if (sock->type ==SOCK_RAW && - !dev_validate_header (dev, skb->data, len)) { +if ((sock->type ==SOCK_RAW && + !dev_validate_header (dev, skb->data, len)) || !skb->len) { err = -EINVAL ; goto out_free; }
sound/pci/hda/patch_cs8409-tables.c +4 -0
@@ -546,6 +546,10 @@ const struct snd_pci_quirk cs8409_fixup_tbl[] = {SND_PCI_QUIRK (0x1028 ,0x0BD6 ,"Dolphin" ,CS8409_DOLPHIN ),SND_PCI_QUIRK (0x1028 ,0x0BD7 ,"Dolphin" ,CS8409_DOLPHIN ),SND_PCI_QUIRK (0x1028 ,0x0BD8 ,"Dolphin" ,CS8409_DOLPHIN ), +SND_PCI_QUIRK (0x1028 ,0x0C43 ,"Dolphin" ,CS8409_DOLPHIN ), +SND_PCI_QUIRK (0x1028 ,0x0C50 ,"Dolphin" ,CS8409_DOLPHIN ), +SND_PCI_QUIRK (0x1028 ,0x0C51 ,"Dolphin" ,CS8409_DOLPHIN ), + SND_PCI_QUIRK(0x1028, 0x0C52, "Dolphin", CS8409_DOLPHIN), {} /* terminator */ };
sound/pci/hda/patch_realtek.c +2 -0
@@ -9248,6 +9248,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1043 ,0x1271 ,"ASUS X430UN" ,ALC256_FIXUP_ASUS_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1043 ,0x1290 ,"ASUS X441SA" ,ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1043 ,0x12a0 ,"ASUS X441UV" ,ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE ), +SND_PCI_QUIRK (0x1043 ,0x12af ,"ASUS UX582ZS" ,ALC245_FIXUP_CS35L41_SPI_2 ),SND_PCI_QUIRK (0x1043 ,0x12e0 ,"ASUS X541SA" ,ALC256_FIXUP_ASUS_MIC ),SND_PCI_QUIRK (0x1043 ,0x12f0 ,"ASUS X541UV" ,ALC256_FIXUP_ASUS_MIC ), SND_PCI_QUIRK(0x1043, 0x1313, "Asus K42JZ", ALC269VB_FIXUP_ASUS_MIC_NO_PRESENCE),
@@ -9268,6 +9269,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1043 ,0x19e1 ,"ASUS UX581LV" ,ALC295_FIXUP_ASUS_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1043 ,0x1a13 ,"Asus G73Jw" ,ALC269_FIXUP_ASUS_G73JW ),SND_PCI_QUIRK (0x1043 ,0x1a30 ,"ASUS X705UD" ,ALC256_FIXUP_ASUS_MIC ), +SND_PCI_QUIRK (0x1043 ,0x1a8f ,"ASUS UX582ZS" ,ALC245_FIXUP_CS35L41_SPI_2 ),SND_PCI_QUIRK (0x1043 ,0x1b11 ,"ASUS UX431DA" ,ALC294_FIXUP_ASUS_COEF_1B ),SND_PCI_QUIRK (0x1043 ,0x1b13 ,"Asus U41SV" ,ALC269_FIXUP_INV_DMIC ), SND_PCI_QUIRK(0x1043, 0x1bbd, "ASUS Z550MA", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
sound/soc/codecs/rt5640.c +3 -2
@@ -1986,7 +1986,7 @@ static int rt5640_set_bias_level(struct snd_soc_component *component,snd_soc_component_write (component,RT5640_PWR_MIXER ,0x0000 );if (rt5640->jd_src ==RT5640_JD_SRC_HDA_HEADER )snd_soc_component_write (component,RT5640_PWR_ANLG1 , -0x0018 ); +0x2818 );else snd_soc_component_write (component,RT5640_PWR_ANLG1 ,0x0000 );
@@ -2592,7 +2592,8 @@ static void rt5640_enable_hda_jack_detect(snd_soc_component_update_bits (component,RT5640_DUMMY1 ,0x400 ,0x0 );snd_soc_component_update_bits (component,RT5640_PWR_ANLG1 , -RT5640_PWR_VREF2 ,RT5640_PWR_VREF2 ); +RT5640_PWR_VREF2 |RT5640_PWR_MB |RT5640_PWR_BG , +RT5640_PWR_VREF2 |RT5640_PWR_MB |RT5640_PWR_BG );usleep_range (10000 ,15000 );snd_soc_component_update_bits (component,RT5640_PWR_ANLG1 ,RT5640_PWR_FV2 ,RT5640_PWR_FV2 );
sound/soc/sh/rz-ssi.c +15 -11
@@ -1016,32 +1016,36 @@ static int rz_ssi_probe(struct platform_device *pdev) ssi->rstc =devm_reset_control_get_exclusive (&pdev->dev,NULL );if (IS_ERR (ssi->rstc)) { -rz_ssi_release_dma_channels (ssi); -return PTR_ERR (ssi->rstc); + ret =PTR_ERR (ssi->rstc); + goto err_reset; }reset_control_deassert (ssi->rstc);pm_runtime_enable (&pdev->dev); ret =pm_runtime_resume_and_get (&pdev->dev);if (ret <0 ) { -rz_ssi_release_dma_channels (ssi); -pm_runtime_disable (ssi->dev); -reset_control_assert (ssi->rstc); -return dev_err_probe (ssi->dev, ret,"pm_runtime_resume_and_get failed\n" ); +dev_err (&pdev->dev,"pm_runtime_resume_and_get failed\n" ); + goto err_pm; } ret =devm_snd_soc_register_component (&pdev->dev, &rz_ssi_soc_component, rz_ssi_soc_dai,ARRAY_SIZE (rz_ssi_soc_dai));if (ret <0 ) { -rz_ssi_release_dma_channels (ssi); - -pm_runtime_put (ssi->dev); -pm_runtime_disable (ssi->dev); -reset_control_assert (ssi->rstc);dev_err (&pdev->dev,"failed to register snd component\n" ); + goto err_snd_soc; } +return 0 ; + +err_snd_soc: +pm_runtime_put (ssi->dev); +err_pm: +pm_runtime_disable (ssi->dev); +reset_control_assert (ssi->rstc); +err_reset: +rz_ssi_release_dma_channels (ssi); +return ret; }
sound/usb/quirks.c +2 -0
@@ -1903,6 +1903,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = { QUIRK_FLAG_SHARE_MEDIA_DEVICE | QUIRK_FLAG_ALIGN_TRANSFER),DEVICE_FLG (0x21b4 ,0x0081 ,/* AudioQuest DragonFly */ QUIRK_FLAG_GET_SAMPLE_RATE ), +DEVICE_FLG (0x2522 ,0x0007 ,/* LH Labs Geek Out HD Audio 1V5 */ +QUIRK_FLAG_SET_IFACE_FIRST ),DEVICE_FLG (0x2708 ,0x0002 ,/* Audient iD14 */ QUIRK_FLAG_IGNORE_CTL_ERROR ), DEVICE_FLG(0x2912, 0x30c8, /* Audioengine D1 */
tools/testing/selftests/netfilter/nft_flowtable.sh +128 -118
394 lines not on this page · raw message
tools/tracing/rtla/src/timerlat_hist.c +1 -1
@@ -892,7 +892,7 @@ int timerlat_hist_main(int argc, char *argv[]) return_value =0 ;if (trace_is_off (&tool->trace, &record->trace)) { -printf ("rtla timelat hit stop tracing\n" ); +printf ("rtla timerlat hit stop tracing\n" );if (params->trace_output) {printf (" Saving trace to %s\n" , params->trace_output);save_trace_to_file (record->trace.inst, params->trace_output);
tools/tracing/rtla/src/timerlat_top.c +1 -1
@@ -687,7 +687,7 @@ int timerlat_top_main(int argc, char *argv[]) return_value =0 ;if (trace_is_off (&top->trace, &record->trace)) { -printf ("rtla timelat hit stop tracing\n" ); +printf ("rtla timerlat hit stop tracing\n" );if (params->trace_output) {printf (" Saving trace to %s\n" , params->trace_output);save_trace_to_file (record->trace.inst, params->trace_output);
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.19.7 kernel.
All users of the 5.19 kernel series must upgrade.
The updated 5.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/arm64/silicon-errata.rst | 2 Documentation/sphinx/kerneldoc-preamble.sty | 22 Documentation/tools/rtla/rtla-timerlat-hist.rst | 2 Makefile | 2 arch/arm64/Kconfig | 17 arch/arm64/kernel/cacheinfo.c | 6 arch/arm64/kernel/cpu_errata.c | 8 arch/s390/hypfs/hypfs_diag.c | 2 arch/s390/hypfs/inode.c | 2 drivers/android/binder_alloc.c | 9 drivers/dma-buf/udmabuf.c | 18 drivers/firmware/tegra/bpmp.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 3 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 3 drivers/gpu/drm/amd/amdgpu/ih_v6_0.c | 1 drivers/gpu/drm/amd/amdgpu/navi10_ih.c | 7 drivers/gpu/drm/amd/amdgpu/psp_v12_0.c | 10 drivers/gpu/drm/amd/amdgpu/soc21.c | 2 drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 7 drivers/gpu/drm/amd/amdgpu/vega20_ih.c | 7 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_events.c | 24 drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 2 drivers/gpu/drm/amd/display/dc/core/dc.c | 12 drivers/gpu/drm/amd/display/dc/dc_link.h | 1 drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c | 2 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 1 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c | 6 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c | 5 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_mpc.c | 6 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubbub.c | 8 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.c | 2 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hpo_dp_stream_encoder.h | 3 drivers/gpu/drm/amd/display/modules/freesync/freesync.c | 15 drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 1 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 10 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 2 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c | 3 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 2 drivers/gpu/drm/vc4/Kconfig | 1 drivers/gpu/drm/vc4/vc4_hdmi.c | 17 drivers/hid/amd-sfh-hid/amd_sfh_pcie.c | 18 drivers/hid/hid-asus.c | 7 drivers/hid/hid-ids.h | 3 drivers/hid/hid-input.c | 7 drivers/hid/hid-nintendo.c | 6 drivers/hid/hid-quirks.c | 2 drivers/hid/hid-steam.c | 10 drivers/hid/hid-thrustmaster.c | 3 drivers/hid/hidraw.c | 2 drivers/hid/intel-ish-hid/ipc/hw-ish.h | 1 drivers/hid/intel-ish-hid/ipc/pci-ish.c | 1 drivers/media/usb/pvrusb2/pvrusb2-hdw.c | 1 drivers/mmc/host/mtk-sd.c | 6 drivers/mmc/host/sdhci-of-dwcmshc.c | 88 ++- drivers/net/ethernet/microchip/lan966x/lan966x_main.c | 8 drivers/pci/pcie/portdrv_core.c | 9 drivers/platform/x86/serial-multi-instantiate.c | 1 drivers/usb/gadget/udc/core.c | 11 drivers/video/fbdev/pm2fb.c | 5 fs/btrfs/ctree.c | 3 fs/btrfs/ctree.h | 2 fs/btrfs/disk-io.c | 82 --- fs/btrfs/disk-io.h | 10 fs/btrfs/extent-tree.c | 18 fs/btrfs/extent_io.c | 11 fs/btrfs/locking.c | 91 +++ fs/btrfs/locking.h | 14 fs/btrfs/relocation.c | 2 fs/btrfs/tree-checker.c | 25 - fs/ksmbd/mgmt/tree_connect.c | 2 fs/ksmbd/smb2pdu.c | 21 fs/ntfs3/xattr.c | 7 include/linux/rmap.h | 7 include/linux/skbuff.h | 8 include/linux/skmsg.h | 3 include/net/sock.h | 68 +- kernel/trace/ftrace.c | 10 lib/crypto/Kconfig | 1 mm/rmap.c | 29 - net/bluetooth/l2cap_core.c | 10 net/bpf/test_run.c | 3 net/core/dev.c | 1 net/core/neighbour.c | 27 - net/core/skmsg.c | 4 net/netfilter/Kconfig | 1 net/packet/af_packet.c | 4 sound/pci/hda/patch_cs8409-tables.c | 4 sound/pci/hda/patch_realtek.c | 2 sound/soc/codecs/rt5640.c | 5 sound/soc/sh/rz-ssi.c | 26 - sound/usb/quirks.c | 2 tools/testing/selftests/netfilter/nft_flowtable.sh | 246 +++++----- tools/tracing/rtla/src/timerlat_hist.c | 2 tools/tracing/rtla/src/timerlat_top.c | 2 96 files changed, 802 insertions(+), 403 deletions(-)
Aditya Garg (1):
HID: Add Apple Touchbar on T2 Macs in hid_have_special_driver list
Akihiko Odaki (1):
HID: AMD_SFH: Add a DMI quirk entry for Chromebooks
Akira Yokosawa (1):
docs: kerneldoc-preamble: Test xeCJK.sty before loading
Alan Stern (1):
USB: gadget: Fix use-after-free Read in usb_udc_uevent()
Alexandre Vicenzi (1):
rtla: Fix tracer name
Alvin Lee (1):
drm/amd/display: For stereo keep "FLIP_ANY_FRAME"
Aurabindo Pillai (1):
drm/amd/display: Add a missing register field for HPO DP stream encoder
Benjamin Tissoires (1):
HID: input: fix uclogic tablets
Biju Das (1):
ASoC: sh: rz-ssi: Improve error handling in rz_ssi_probe() error path
Charlene Liu (1):
drm/amd/display: avoid doing vm_init multiple time
Chiawen Huang (1):
drm/amd/display: Device flash garbage before get in OS
Daniel J. Ogorchock (1):
HID: nintendo: fix rumble worker null pointer deref
Denis V. Lunev (1):
neigh: fix possible DoS due to net iface start/stop loop
Dongliang Mu (1):
media: pvrusb2: fix memory leak in pvr_probe
Dusica Milinkovic (1):
drm/amdgpu: Increase tlb flush timeout for sriov
Eric Biggers (1):
crypto: lib - remove unneeded selection of XOR_BLOCKS
Evan Quan (3):
drm/amdgpu: disable 3DCGCG/CGLS temporarily due to stability issue
drm/amd/pm: add missing ->fini_microcode interface for Sienna Cichlid
drm/amd/pm: add missing ->fini_xxxx interfaces for some SMU13 asicsEven Xu (1):
HID: intel-ish-hid: ipc: Add Meteor Lake PCI device ID
Felix Kuehling (1):
drm/amdkfd: Handle restart of kfd_ioctl_wait_events
Florian Westphal (1):
testing: selftests: nft_flowtable.sh: use random netns names
Fudong Wang (1):
drm/amd/display: clear optc underflow before turn off odm clock
Geert Uytterhoeven (1):
netfilter: conntrack: NF_CONNTRACK_PROCFS should no longer default to y
Greg Kroah-Hartman (2):
Revert "PCI/portdrv: Don't disable AER reporting in get_port_device_capability()" Linux 5.19.7
Harish Kasiviswanathan (1):
drm/amdgpu: Add decode_iv_ts helper for ih_v6 block
Hawkins Jiawei (1):
net: fix refcount bug in sk_psock_get (2)
Ilya Bakoulin (1):
drm/amd/display: Fix pixel clock programming
James Morse (1):
arm64: errata: Add Cortex-A510 to the repeat tlbi list
Jann Horn (1):
mm/rmap: Fix anon_vma->degree ambiguity leading to double-reuse
Josef Bacik (3):
btrfs: move lockdep class helpers to locking.c
btrfs: fix lockdep splat with reloc root extent buffers
btrfs: tree-checker: check for overlapping extent items
Josh Kilmer (1):
HID: asus: ROG NKey: Ignore portion of 0x5a report
Josip Pavic (1):
drm/amd/display: Avoid MPC infinite loop
Juergen Gross (1):
s390/hypfs: avoid error message under KVM
Karthik Alapati (1):
HID: hidraw: fix memory leak in hidraw_release()
Kenneth Feng (1):
drm/amd/pm: skip pptable override for smu_v13_0_7
Konstantin Komarov (1):
fs/ntfs3: Fix work with fragmented xattr
Lee Jones (1):
HID: steam: Prevent NULL pointer dereference in steam_{recv,send}_report
Leo Ma (1):
drm/amd/display: Fix HDMI VSIF V3 incorrect issue
Letu Ren (1):
fbdev: fb_pm2fb: Avoid potential divide by zero error
Li Qiong (1):
net: lan966x: fix checking for return value of platform_get_irq_byname()
Liam Howlett (1):
android: binder: fix lockdep check on clearing vma
Liming Sun (1):
mmc: sdhci-of-dwcmshc: Re-enable support for the BlueField-3 SoC
Lucas Tanure (1):
platform/x86: serial-multi-instantiate: Add CLSA0101 Laptop
Luiz Augusto von Dentz (1):
Bluetooth: L2CAP: Fix build errors in some archs
Maxime Ripard (2):
drm/vc4: hdmi: Rework power up
drm/vc4: hdmi: Depends on CONFIG_PM
Meenakshikumar Somasundaram (1):
drm/amd/display: Fix TDR eDP and USB4 display light up issue
Michael Hübner (1):
HID: thrustmaster: Add sparco wheel and fix array length
Mukul Joshi (1):
drm/amdgpu: Fix interrupt handling on ih_soft ring
Namjae Jeon (2):
ksmbd: return STATUS_BAD_NETWORK_NAME error status if share is not configured
ksmbd: don't remove dos attribute xattr on O_TRUNC open
Oder Chiou (1):
ASoC: rt5640: Fix the JD voltage dropping issue
Sebastian Reichel (1):
mmc: sdhci-of-dwcmshc: rename rk3568 to rk35xx
Shane Xiao (1):
drm/amdgpu: Add secure display TA load for Renoir
Steev Klimaszewski (1):
HID: add Lenovo Yoga C630 battery quirk
Stefan Binding (2):
ALSA: hda/realtek: Add quirks for ASUS Zenbooks using CS35L41
ALSA: hda/cs8409: Support new Dolphin Variants
Sudeep Holla (1):
arm64: cacheinfo: Fix incorrect assignment of signed error value to unsigned fw_level
Takashi Iwai (1):
ALSA: usb-audio: Add quirk for LH Labs Geek Out HD Audio 1V5
Timo Alho (1):
firmware: tegra: bpmp: Do only aligned access to IPC memory area
Tom Chung (1):
drm/amd/display: Fix plug/unplug external monitor will hang while playback MPO video
Vivek Kasireddy (1):
udmabuf: Set the DMA mask for the udmabuf device (v2)
Wenbin Mei (1):
mmc: mtk-sd: Clear interrupts when cqe off/disable
Yang Jihong (1):
ftrace: Fix NULL pointer dereference in is_ftrace_trampoline when ftrace is dead
Yang Yingliang (1):
net: neigh: don't call kfree_skb() under spin_lock_irqsave()
Yifeng Zhao (1):
mmc: sdhci-of-dwcmshc: add reset call back for rockchip Socs
Zhen Ni (1):
drm/amd/pm: Fix a potential gpu_metrics_table memory leak
Zhengchao Shao (2):
bpf: Don't redirect packets with invalid pkt_len net/af_packet: check len when min_header_len equals to 0