All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 12/11] unpaged: fix sound Bad page states
@ 2005-11-21 18:12 Hugh Dickins
  2005-11-21 20:41   ` Andrew Morton
  2005-11-21 21:57 ` William Lee Irwin III
  0 siblings, 2 replies; 5+ messages in thread
From: Hugh Dickins @ 2005-11-21 18:12 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Takashi Iwai, Russell King, William Irwin, David S. Miller,
	Linus Torvalds, Nick Piggin, Dave Airlie, linux-kernel,
	alsa-devel

Earlier I unifdefed PageCompound, so that snd_pcm_mmap_control_nopage
and others can give out a 0-order component of a higher-order page,
which won't be mistakenly freed when zap_pte_range unmaps it.  But
many Bad page states reported a PG_reserved was freed after all: I had
missed that we need to say __GFP_COMP to get compound page behaviour.

Some of these higher-order pages are allocated by snd_malloc_pages, some
by snd_malloc_dev_pages; or if SBUS, by sbus_alloc_consistent - but that
has no gfp arg, so add __GFP_COMP into its sparc32/64 implementations.

I'm still rather puzzled that DRM seems not to need a similar change.

Signed-off-by: Hugh Dickins <hugh@veritas.com>
---

 arch/sparc/kernel/ioport.c |    2 +-
 arch/sparc64/kernel/sbus.c |    2 +-
 sound/core/memalloc.c      |    2 ++
 3 files changed, 4 insertions(+), 2 deletions(-)

--- 2.6.15-rc1-mm2/arch/sparc/kernel/ioport.c	2005-06-17 20:48:29.000000000 +0100
+++ linux/arch/sparc/kernel/ioport.c	2005-11-19 19:11:04.000000000 +0000
@@ -252,7 +252,7 @@ void *sbus_alloc_consistent(struct sbus_
 	}
 
 	order = get_order(len_total);
-	if ((va = __get_free_pages(GFP_KERNEL, order)) == 0)
+	if ((va = __get_free_pages(GFP_KERNEL|__GFP_COMP, order)) == 0)
 		goto err_nopages;
 
 	if ((res = kmalloc(sizeof(struct resource), GFP_KERNEL)) == NULL)
--- 2.6.15-rc1-mm2/arch/sparc64/kernel/sbus.c	2005-11-12 09:00:36.000000000 +0000
+++ linux/arch/sparc64/kernel/sbus.c	2005-11-19 19:12:53.000000000 +0000
@@ -327,7 +327,7 @@ void *sbus_alloc_consistent(struct sbus_
 	order = get_order(size);
 	if (order >= 10)
 		return NULL;
-	first_page = __get_free_pages(GFP_KERNEL, order);
+	first_page = __get_free_pages(GFP_KERNEL|__GFP_COMP, order);
 	if (first_page == 0UL)
 		return NULL;
 	memset((char *)first_page, 0, PAGE_SIZE << order);
--- 2.6.15-rc1-mm2/sound/core/memalloc.c	2005-11-12 09:01:28.000000000 +0000
+++ linux/sound/core/memalloc.c	2005-11-19 19:03:32.000000000 +0000
@@ -197,6 +197,7 @@ void *snd_malloc_pages(size_t size, gfp_
 
 	snd_assert(size > 0, return NULL);
 	snd_assert(gfp_flags != 0, return NULL);
+	gfp_flags |= __GFP_COMP;	/* compound page lets parts be mapped */
 	pg = get_order(size);
 	if ((res = (void *) __get_free_pages(gfp_flags, pg)) != NULL) {
 		mark_pages(virt_to_page(res), pg);
@@ -241,6 +242,7 @@ static void *snd_malloc_dev_pages(struct
 	snd_assert(dma != NULL, return NULL);
 	pg = get_order(size);
 	gfp_flags = GFP_KERNEL
+		| __GFP_COMP	/* compound page lets parts be mapped */
 		| __GFP_NORETRY /* don't trigger OOM-killer */
 		| __GFP_NOWARN; /* no stack trace print - this call is non-critical */
 	res = dma_alloc_coherent(dev, PAGE_SIZE << pg, dma, gfp_flags);

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 12/11] unpaged: fix sound Bad page states
  2005-11-21 18:12 [PATCH 12/11] unpaged: fix sound Bad page states Hugh Dickins
@ 2005-11-21 20:41   ` Andrew Morton
  2005-11-21 21:57 ` William Lee Irwin III
  1 sibling, 0 replies; 5+ messages in thread
From: Andrew Morton @ 2005-11-21 20:41 UTC (permalink / raw)
  To: Hugh Dickins
  Cc: tiwai, rmk+lkml, wli, davem, torvalds, nickpiggin, airlied,
	linux-kernel, alsa-devel

Hugh Dickins <hugh@veritas.com> wrote:
>
>   arch/sparc/kernel/ioport.c |    2 +-
>   arch/sparc64/kernel/sbus.c |    2 +-
>   sound/core/memalloc.c      |    2 ++
>   3 files changed, 4 insertions(+), 2 deletions(-)

So with this, do you think everything is in place for a mainline merge?


-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc.  Get Certified Today
Register for a JBoss Training Course.  Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 12/11] unpaged: fix sound Bad page states
@ 2005-11-21 20:41   ` Andrew Morton
  0 siblings, 0 replies; 5+ messages in thread
From: Andrew Morton @ 2005-11-21 20:41 UTC (permalink / raw)
  To: Hugh Dickins
  Cc: tiwai, rmk+lkml, wli, davem, torvalds, nickpiggin, airlied,
	linux-kernel, alsa-devel

Hugh Dickins <hugh@veritas.com> wrote:
>
>   arch/sparc/kernel/ioport.c |    2 +-
>   arch/sparc64/kernel/sbus.c |    2 +-
>   sound/core/memalloc.c      |    2 ++
>   3 files changed, 4 insertions(+), 2 deletions(-)

So with this, do you think everything is in place for a mainline merge?

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 12/11] unpaged: fix sound Bad page states
  2005-11-21 18:12 [PATCH 12/11] unpaged: fix sound Bad page states Hugh Dickins
  2005-11-21 20:41   ` Andrew Morton
@ 2005-11-21 21:57 ` William Lee Irwin III
  1 sibling, 0 replies; 5+ messages in thread
From: William Lee Irwin III @ 2005-11-21 21:57 UTC (permalink / raw)
  To: Hugh Dickins
  Cc: Andrew Morton, Takashi Iwai, Russell King, David S. Miller,
	Linus Torvalds, Nick Piggin, Dave Airlie, linux-kernel,
	alsa-devel

On Mon, Nov 21, 2005 at 06:12:38PM +0000, Hugh Dickins wrote:
> Earlier I unifdefed PageCompound, so that snd_pcm_mmap_control_nopage
> and others can give out a 0-order component of a higher-order page,
> which won't be mistakenly freed when zap_pte_range unmaps it.  But
> many Bad page states reported a PG_reserved was freed after all: I had
> missed that we need to say __GFP_COMP to get compound page behaviour.
> Some of these higher-order pages are allocated by snd_malloc_pages, some
> by snd_malloc_dev_pages; or if SBUS, by sbus_alloc_consistent - but that
> has no gfp arg, so add __GFP_COMP into its sparc32/64 implementations.
> I'm still rather puzzled that DRM seems not to need a similar change.
> Signed-off-by: Hugh Dickins <hugh@veritas.com>

Acked-by: William Irwin <wli@holomorphy.com>


-- wli

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 12/11] unpaged: fix sound Bad page states
  2005-11-21 20:41   ` Andrew Morton
  (?)
@ 2005-11-21 22:40   ` Hugh Dickins
  -1 siblings, 0 replies; 5+ messages in thread
From: Hugh Dickins @ 2005-11-21 22:40 UTC (permalink / raw)
  To: Andrew Morton
  Cc: tiwai, rmk+lkml, wli, davem, torvalds, nickpiggin, airlied,
	linux-kernel, alsa-devel

On Mon, 21 Nov 2005, Andrew Morton wrote:
> Hugh Dickins <hugh@veritas.com> wrote:
> >
> >   arch/sparc/kernel/ioport.c |    2 +-
> >   arch/sparc64/kernel/sbus.c |    2 +-
> >   sound/core/memalloc.c      |    2 ++
> >   3 files changed, 4 insertions(+), 2 deletions(-)
> 
> So with this, do you think everything is in place for a mainline merge?

Yes, I believe so: thanks.

Hugh

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2005-11-21 22:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-21 18:12 [PATCH 12/11] unpaged: fix sound Bad page states Hugh Dickins
2005-11-21 20:41 ` Andrew Morton
2005-11-21 20:41   ` Andrew Morton
2005-11-21 22:40   ` Hugh Dickins
2005-11-21 21:57 ` William Lee Irwin III

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.