From: Takashi Iwai <tiwai@suse.de>
To: Lars-Peter Clausen <lars@metafoo.de>
Cc: alsa-devel@alsa-project.org, gustavoars@kernel.org,
linux-kernel@vger.kernel.org, shengjiu.wang@nxp.com,
pierre-louis.bossart@linux.intel.com, tiwai@suse.com,
xiang@kernel.org, Robin Gong <yibin.gong@nxp.com>,
akpm@linux-foundation.org
Subject: Re: [PATCH v1 ] ALSA: core: memalloc: add page alignment for iram
Date: Thu, 17 Dec 2020 11:14:43 +0100 [thread overview]
Message-ID: <s5h1rfon3ho.wl-tiwai@suse.de> (raw)
In-Reply-To: <s5h5z50n4dd.wl-tiwai@suse.de>
On Thu, 17 Dec 2020 10:55:42 +0100,
Takashi Iwai wrote:
>
> On Thu, 17 Dec 2020 10:43:45 +0100,
> Lars-Peter Clausen wrote:
> >
> > On 12/17/20 5:15 PM, Robin Gong wrote:
> > > Since mmap for userspace is based on page alignment, add page alignment
> > > for iram alloc from pool, otherwise, some good data located in the same
> > > page of dmab->area maybe touched wrongly by userspace like pulseaudio.
> > >
> > I wonder, do we also have to align size to be a multiple of PAGE_SIZE
> > to avoid leaking unrelated data?
>
> Hm, a good question. Basically the PCM buffer size itself shouldn't
> be influenced by that (i.e. no hw-constraint or such is needed), but
> the padding should be cleared indeed. I somehow left those to the
> allocator side, but maybe it's safer to clear the whole buffer in
> sound/core/memalloc.c commonly.
That said, something like below (totally untested).
We might pass the pass-aligned size to dmab->bytes field instead of
keeping the original value, too.
Takashi
---
--- a/sound/core/memalloc.c
+++ b/sound/core/memalloc.c
@@ -126,6 +126,7 @@ static inline gfp_t snd_mem_get_gfp_flags(const struct device *dev,
int snd_dma_alloc_pages(int type, struct device *device, size_t size,
struct snd_dma_buffer *dmab)
{
+ size_t orig_size = size;
gfp_t gfp;
if (WARN_ON(!size))
@@ -133,6 +134,7 @@ int snd_dma_alloc_pages(int type, struct device *device, size_t size,
if (WARN_ON(!dmab))
return -ENXIO;
+ size = PAGE_ALIGN(size);
dmab->dev.type = type;
dmab->dev.dev = device;
dmab->bytes = 0;
@@ -177,7 +179,8 @@ int snd_dma_alloc_pages(int type, struct device *device, size_t size,
}
if (! dmab->area)
return -ENOMEM;
- dmab->bytes = size;
+ memset(dmab->area, 0, size);
+ dmab->bytes = orig_size;
return 0;
}
EXPORT_SYMBOL(snd_dma_alloc_pages);
WARNING: multiple messages have this Message-ID (diff)
From: Takashi Iwai <tiwai@suse.de>
To: Lars-Peter Clausen <lars@metafoo.de>
Cc: Robin Gong <yibin.gong@nxp.com>,
perex@perex.cz, tiwai@suse.com, akpm@linux-foundation.org,
xiang@kernel.org, pierre-louis.bossart@linux.intel.com,
gustavoars@kernel.org, shengjiu.wang@nxp.com,
alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 ] ALSA: core: memalloc: add page alignment for iram
Date: Thu, 17 Dec 2020 11:14:43 +0100 [thread overview]
Message-ID: <s5h1rfon3ho.wl-tiwai@suse.de> (raw)
In-Reply-To: <s5h5z50n4dd.wl-tiwai@suse.de>
On Thu, 17 Dec 2020 10:55:42 +0100,
Takashi Iwai wrote:
>
> On Thu, 17 Dec 2020 10:43:45 +0100,
> Lars-Peter Clausen wrote:
> >
> > On 12/17/20 5:15 PM, Robin Gong wrote:
> > > Since mmap for userspace is based on page alignment, add page alignment
> > > for iram alloc from pool, otherwise, some good data located in the same
> > > page of dmab->area maybe touched wrongly by userspace like pulseaudio.
> > >
> > I wonder, do we also have to align size to be a multiple of PAGE_SIZE
> > to avoid leaking unrelated data?
>
> Hm, a good question. Basically the PCM buffer size itself shouldn't
> be influenced by that (i.e. no hw-constraint or such is needed), but
> the padding should be cleared indeed. I somehow left those to the
> allocator side, but maybe it's safer to clear the whole buffer in
> sound/core/memalloc.c commonly.
That said, something like below (totally untested).
We might pass the pass-aligned size to dmab->bytes field instead of
keeping the original value, too.
Takashi
---
--- a/sound/core/memalloc.c
+++ b/sound/core/memalloc.c
@@ -126,6 +126,7 @@ static inline gfp_t snd_mem_get_gfp_flags(const struct device *dev,
int snd_dma_alloc_pages(int type, struct device *device, size_t size,
struct snd_dma_buffer *dmab)
{
+ size_t orig_size = size;
gfp_t gfp;
if (WARN_ON(!size))
@@ -133,6 +134,7 @@ int snd_dma_alloc_pages(int type, struct device *device, size_t size,
if (WARN_ON(!dmab))
return -ENXIO;
+ size = PAGE_ALIGN(size);
dmab->dev.type = type;
dmab->dev.dev = device;
dmab->bytes = 0;
@@ -177,7 +179,8 @@ int snd_dma_alloc_pages(int type, struct device *device, size_t size,
}
if (! dmab->area)
return -ENOMEM;
- dmab->bytes = size;
+ memset(dmab->area, 0, size);
+ dmab->bytes = orig_size;
return 0;
}
EXPORT_SYMBOL(snd_dma_alloc_pages);
next prev parent reply other threads:[~2020-12-17 10:15 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-17 16:15 [PATCH v1 ] ALSA: core: memalloc: add page alignment for iram Robin Gong
2020-12-17 9:38 ` Takashi Iwai
2020-12-17 9:38 ` Takashi Iwai
2020-12-17 9:43 ` Lars-Peter Clausen
2020-12-17 9:55 ` Takashi Iwai
2020-12-17 9:55 ` Takashi Iwai
2020-12-17 10:14 ` Takashi Iwai [this message]
2020-12-17 10:14 ` Takashi Iwai
2020-12-17 10:44 ` Lars-Peter Clausen
2020-12-17 10:44 ` Lars-Peter Clausen
2020-12-17 10:59 ` Lars-Peter Clausen
2020-12-17 10:59 ` Lars-Peter Clausen
2020-12-17 11:06 ` Takashi Iwai
2020-12-17 11:06 ` Takashi Iwai
2020-12-17 13:16 ` Lars-Peter Clausen
2020-12-17 14:24 ` Takashi Iwai
2020-12-17 14:57 ` Lars-Peter Clausen
2020-12-17 15:18 ` Takashi Iwai
2020-12-17 15:38 ` Lars-Peter Clausen
2020-12-17 16:28 ` Takashi Iwai
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=s5h1rfon3ho.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alsa-devel@alsa-project.org \
--cc=gustavoars@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-kernel@vger.kernel.org \
--cc=pierre-louis.bossart@linux.intel.com \
--cc=shengjiu.wang@nxp.com \
--cc=tiwai@suse.com \
--cc=xiang@kernel.org \
--cc=yibin.gong@nxp.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: link
Be 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.