1. Mar 07, 2022
  2. Feb 25, 2022
    • Ammar Faizi's avatar
      ASoC: SOF: Intel: Fix NULL ptr dereference when ENOMEM · b7fb0ae0
      Ammar Faizi authored
      Do not call snd_dma_free_pages() when snd_dma_alloc_pages() returns
      -ENOMEM because it leads to a NULL pointer dereference bug.
      
      The dmesg says:
      
        [ T1387] sof-audio-pci-intel-tgl 0000:00:1f.3: error: memory alloc failed: -12
        [ T1387] BUG: kernel NULL pointer dereference, address: 0000000000000000
        [ T1387] #PF: supervisor read access in kernel mode
        [ T1387] #PF: error_code(0x0000) - not-present page
        [ T1387] PGD 0 P4D 0
        [ T1387] Oops: 0000 [#1] PREEMPT SMP NOPTI
        [ T1387] CPU: 6 PID: 1387 Comm: alsa-sink-HDA A Tainted: G        W         5.17.0-rc4-superb-owl-00055-g80d47f5d
        [ T1387] Hardware name: HP HP Laptop 14s-dq2xxx/87FD, BIOS F.15 09/15/2021
        [ T1387] RIP: 0010:dma_free_noncontiguous+0x37/0x80
        [ T1387] Code: [... snip ...]
        [ T1387] RSP: 0000:ffffc90002b87770 EFLAGS: 00010246
        [ T1387] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
        [ T1387] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff888101db30d0
        [ T1387] RBP: 00000000fffffff4 R08: 0000000000000000 R09: 0000000000000000
        [ T1387] R10: 0000000000000000 R11: ffffc90002b874d0 R12: 0000000000000001
        [ T1387] R13: 0000000000058000 R14: ffff888105260c68 R15: ffff888105260828
        [ T1387] FS:  00007f42e2ffd640(0000) GS:ffff888466b80000(0000) knlGS:0000000000000000
        [ T1387] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        [ T1387] CR2: 0000000000000000 CR3: 000000014acf0003 CR4: 0000000000770ee0
        [ T1387] PKRU: 55555554
        [ T1387] Call Trace:
        [ T1387]  <TASK>
        [ T1387]  cl_stream_prepare+0x10a/0x120 [snd_sof_intel_hda_common 146addf995b9279ae7f509621078cccbe4f875e1]
        [... snip ...]
        [ T1387]  </TASK>
      
      Cc: Daniel Baluta <daniel.baluta@nxp.com>
      Cc: Jaroslav Kysela <perex@perex.cz>
      Cc: Kai Vehmanen <kai.vehmanen@linux.intel.com>
      Cc: Keyon Jie <yang.jie@linux.intel.com>
      Cc: Liam Girdwood <lgirdwood@gmail.com>
      Cc: Mark Brown <broonie@kernel.org>
      Cc: Rander Wang <rander.wang@intel.com>
      Cc: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
      Cc: Takashi Iwai <tiwai@suse.com>
      Cc: sound-open-firmware@alsa-project.org
      Cc: alsa-devel@alsa-project.org
      Cc: linux-kernel@vger.kernel.org
      Cc: stable@vger.kernel.org # v5.2+
      Fixes: d16046ff ("ASoC: SOF: Intel: Add Intel specific HDA firmware loader")
      Link: https://lore.kernel.org/lkml/20220224145124.15985-1-ammarfaizi2@gnuweeb.org/ # v1
      Link: https://lore.kernel.org/lkml/20220224180850.34592-1-ammarfaizi2@gnuweeb.org/ # v2
      Link: https://lore.kernel.org/lkml/20220224182818.40301-1-ammarfaizi2@gnuweeb.org/
      
       # v3
      Reviewed-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
      Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
      Signed-off-by: default avatarAmmar Faizi <ammarfaizi2@gnuweeb.org>
      Link: https://lore.kernel.org/r/20220224185836.44907-1-ammarfaizi2@gnuweeb.org
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      b7fb0ae0
  3. Feb 24, 2022
  4. Feb 23, 2022
  5. Feb 17, 2022
  6. Feb 11, 2022
  7. Feb 10, 2022
    • Stephen Boyd's avatar
      ASoC: qcom: Actually clear DMA interrupt register for HDMI · c8d251f5
      Stephen Boyd authored
      In commit da0363f7 ("ASoC: qcom: Fix for DMA interrupt clear reg
      overwriting") we changed regmap_write() to regmap_update_bits() so that
      we can avoid overwriting bits that we didn't intend to modify.
      Unfortunately this change breaks the case where a register is writable
      but not readable, which is exactly how the HDMI irq clear register is
      designed (grep around LPASS_HDMITX_APP_IRQCLEAR_REG to see how it's
      write only). That's because regmap_update_bits() tries to read the
      register from the hardware and if it isn't readable it looks in the
      regmap cache to see what was written there last time to compare against
      what we want to write there. Eventually, we're unable to modify this
      register at all because the bits that we're trying to set are already
      set in the cache.
      
      This is doubly bad for the irq clear register because you have to write
      the bit to clear an interrupt. Given the irq is level triggered, we see
      an interrupt storm upon plugging in an HDMI cable and starting audio
      playback. The irq storm is so great that performance degrades
      significantly, leading to CPU soft lockups.
      
      Fix it by using regmap_write_bits() so that we really do write the bits
      in the clear register that we want to. This brings the number of irqs
      handled by lpass_dma_interrupt_handler() down from ~150k/sec to ~10/sec.
      
      Fixes: da0363f7
      
       ("ASoC: qcom: Fix for DMA interrupt clear reg overwriting")
      Cc: Srinivasa Rao Mandadapu <srivasam@codeaurora.org>
      Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
      Signed-off-by: default avatarStephen Boyd <swboyd@chromium.org>
      Link: https://lore.kernel.org/r/20220209232520.4017634-1-swboyd@chromium.org
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      c8d251f5
  8. Feb 09, 2022
  9. Feb 08, 2022
  10. Feb 03, 2022
  11. Jan 31, 2022
  12. Jan 29, 2022
  13. Jan 28, 2022