From: Takashi Iwai <tiwai@suse.de> To: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com> Cc: Takashi Iwai <tiwai@suse.de>, Linux List Kernel Mailing <linux-kernel@vger.kernel.org>, linux-sound@vger.kernel.org Subject: Re: [BUG] commit a8d302a0b77057568350fe0123e639d02dba0745 cause IO_PAGE_FAULT and a lot of errors Date: Mon, 05 Sep 2022 07:28:03 +0200 [thread overview] Message-ID: <874jxml7a4.wl-tiwai@suse.de> (raw) In-Reply-To: <CABXGCsMQ5H23np6fMN=58CZ6cBiHFF4WGdKdbtYLFyAAeAu5rQ@mail.gmail.com> On Mon, 05 Sep 2022 00:40:48 +0200, Mikhail Gavrilov wrote: > > On Sun, Sep 4, 2022 at 1:51 PM Takashi Iwai <tiwai@suse.de> wrote: > > Also, please check the patch below instead of the previous one, too. > > If this one works, it'd be a better choice. > > > > I compiled the kernel only with the second patch. > I confirm that patch fixed the described problem. > No new problems were noticed during the day, thanks. > > Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com> Awesome. Could you try the below one instead? It's a simplified version and applies the workaround more consistently. Once after it's confirmed to work, I'm going to submit a proper patch and merge for the next 6.0 PR. thanks, Takashi --- diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index b665ac66ccbe..cc8459369e41 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c @@ -521,6 +521,8 @@ static const struct snd_malloc_ops snd_dma_wc_ops = { /* * Non-contiguous pages allocator */ +static dma_addr_t snd_dma_noncontig_get_addr(struct snd_dma_buffer *dmab, size_t offset); + static void *snd_dma_noncontig_alloc(struct snd_dma_buffer *dmab, size_t size) { struct sg_table *sgt; @@ -543,10 +545,13 @@ static void *snd_dma_noncontig_alloc(struct snd_dma_buffer *dmab, size_t size) dmab->dev.need_sync = dma_need_sync(dmab->dev.dev, sg_dma_address(sgt->sgl)); p = dma_vmap_noncontiguous(dmab->dev.dev, size, sgt); - if (p) + if (p) { dmab->private_data = sgt; - else + /* store the first page address for convenience */ + dmab->addr = snd_dma_noncontig_get_addr(dmab, 0); + } else { dma_free_noncontiguous(dmab->dev.dev, size, sgt, dmab->dev.dir); + } return p; } @@ -780,6 +785,8 @@ static void *snd_dma_sg_fallback_alloc(struct snd_dma_buffer *dmab, size_t size) if (!p) goto error; dmab->private_data = sgbuf; + /* store the first page address for convenience */ + dmab->addr = snd_dma_vmalloc_get_addr(dmab, 0); return p; error: diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index a77165bd92a9..b20694fd69de 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -1817,7 +1817,7 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci, /* use the non-cached pages in non-snoop mode */ if (!azx_snoop(chip)) - azx_bus(chip)->dma_type = SNDRV_DMA_TYPE_DEV_WC; + azx_bus(chip)->dma_type = SNDRV_DMA_TYPE_DEV_WC_SG; if (chip->driver_type == AZX_DRIVER_NVIDIA) { dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n");
WARNING: multiple messages have this Message-ID (diff)
From: Takashi Iwai <tiwai@suse.de> To: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com> Cc: Takashi Iwai <tiwai@suse.de>, Linux List Kernel Mailing <linux-kernel@vger.kernel.org>, linux-sound@vger.kernel.org Subject: Re: [BUG] commit a8d302a0b77057568350fe0123e639d02dba0745 cause IO_PAGE_FAULT and a lot of errors Date: Mon, 05 Sep 2022 05:28:03 +0000 [thread overview] Message-ID: <874jxml7a4.wl-tiwai@suse.de> (raw) In-Reply-To: <CABXGCsMQ5H23np6fMN=58CZ6cBiHFF4WGdKdbtYLFyAAeAu5rQ@mail.gmail.com> On Mon, 05 Sep 2022 00:40:48 +0200, Mikhail Gavrilov wrote: > > On Sun, Sep 4, 2022 at 1:51 PM Takashi Iwai <tiwai@suse.de> wrote: > > Also, please check the patch below instead of the previous one, too. > > If this one works, it'd be a better choice. > > > > I compiled the kernel only with the second patch. > I confirm that patch fixed the described problem. > No new problems were noticed during the day, thanks. > > Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com> Awesome. Could you try the below one instead? It's a simplified version and applies the workaround more consistently. Once after it's confirmed to work, I'm going to submit a proper patch and merge for the next 6.0 PR. thanks, Takashi --- diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index b665ac66ccbe..cc8459369e41 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c @@ -521,6 +521,8 @@ static const struct snd_malloc_ops snd_dma_wc_ops = { /* * Non-contiguous pages allocator */ +static dma_addr_t snd_dma_noncontig_get_addr(struct snd_dma_buffer *dmab, size_t offset); + static void *snd_dma_noncontig_alloc(struct snd_dma_buffer *dmab, size_t size) { struct sg_table *sgt; @@ -543,10 +545,13 @@ static void *snd_dma_noncontig_alloc(struct snd_dma_buffer *dmab, size_t size) dmab->dev.need_sync = dma_need_sync(dmab->dev.dev, sg_dma_address(sgt->sgl)); p = dma_vmap_noncontiguous(dmab->dev.dev, size, sgt); - if (p) + if (p) { dmab->private_data = sgt; - else + /* store the first page address for convenience */ + dmab->addr = snd_dma_noncontig_get_addr(dmab, 0); + } else { dma_free_noncontiguous(dmab->dev.dev, size, sgt, dmab->dev.dir); + } return p; } @@ -780,6 +785,8 @@ static void *snd_dma_sg_fallback_alloc(struct snd_dma_buffer *dmab, size_t size) if (!p) goto error; dmab->private_data = sgbuf; + /* store the first page address for convenience */ + dmab->addr = snd_dma_vmalloc_get_addr(dmab, 0); return p; error: diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index a77165bd92a9..b20694fd69de 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -1817,7 +1817,7 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci, /* use the non-cached pages in non-snoop mode */ if (!azx_snoop(chip)) - azx_bus(chip)->dma_type = SNDRV_DMA_TYPE_DEV_WC; + azx_bus(chip)->dma_type = SNDRV_DMA_TYPE_DEV_WC_SG; if (chip->driver_type = AZX_DRIVER_NVIDIA) { dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n");
next prev parent reply other threads:[~2022-09-05 5:28 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-09-03 17:59 [BUG] commit a8d302a0b77057568350fe0123e639d02dba0745 cause IO_PAGE_FAULT and a lot of errors Mikhail Gavrilov 2022-09-03 18:04 ` Mikhail Gavrilov 2022-09-04 7:23 ` Takashi Iwai 2022-09-04 7:23 ` Takashi Iwai 2022-09-04 8:51 ` Takashi Iwai 2022-09-04 8:51 ` Takashi Iwai 2022-09-04 22:40 ` Mikhail Gavrilov 2022-09-04 22:40 ` Mikhail Gavrilov 2022-09-05 5:28 ` Takashi Iwai [this message] 2022-09-05 5:28 ` Takashi Iwai 2022-09-05 12:49 ` Takashi Iwai 2022-09-05 12:49 ` Takashi Iwai 2022-09-06 8:13 ` Mikhail Gavrilov 2022-09-06 8:13 ` Mikhail Gavrilov 2022-09-06 8:42 ` Takashi Iwai 2022-09-06 8:42 ` Takashi Iwai 2022-09-04 9:37 ` [BUG] commit a8d302a0b77057568350fe0123e639d02dba0745 cause IO_PAGE_FAULT and a lot of errors #forregzbot Thorsten Leemhuis 2022-09-04 9:37 ` [BUG] commit a8d302a0b77057568350fe0123e639d02dba0745 cause IO_PAGE_FAULT and a lot of errors #f Thorsten Leemhuis
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=874jxml7a4.wl-tiwai@suse.de \ --to=tiwai@suse.de \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-sound@vger.kernel.org \ --cc=mikhail.v.gavrilov@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.