* [PATCH] x86: adjust GFP mask handling for coherent allocations (take 2)
@ 2009-11-04 12:28 Jan Beulich
2009-11-06 15:41 ` Takashi Iwai
0 siblings, 1 reply; 4+ messages in thread
From: Jan Beulich @ 2009-11-04 12:28 UTC (permalink / raw)
To: mingo, tglx, hpa; +Cc: Takashi Iwai, linux-kernel, jbarnes
Rather than forcing GFP flags and DMA mask to be inconsistent, GFP
flags should be determined even for the fallback device through
dma_alloc_coherent_mask()/dma_alloc_coherent_gfp_flags(). This
restores 64-bit behavior as it was prior to commits
8965eb19386fdf5ccd0ef8b02593eb8560aa3416 and
4a367f3a9dbf2e7ffcee4702203479809236ee6e (not sure why there are two of
them), where GFP_DMA was forced on for 32-bit, but not for 64-bit, with
the slight adjustment that afaict even 32-bit doesn't need this without
CONFIG_ISA.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Cc: Takashi Iwai <tiwai@suse.de>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
---
arch/x86/include/asm/dma-mapping.h | 10 +++++++---
arch/x86/kernel/pci-dma.c | 6 ++----
2 files changed, 9 insertions(+), 7 deletions(-)
--- linux-2.6.32-rc6/arch/x86/include/asm/dma-mapping.h 2009-11-04 13:23:36.000000000 +0100
+++ 2.6.32-rc6-x86-dma-mask-gfp/arch/x86/include/asm/dma-mapping.h 2009-10-27 11:10:28.000000000 +0100
@@ -14,6 +14,12 @@
#include <asm/swiotlb.h>
#include <asm-generic/dma-coherent.h>
+#ifdef CONFIG_ISA
+#define ISA_DMA_BIT_MASK DMA_BIT_MASK(24)
+#else
+#define ISA_DMA_BIT_MASK DMA_BIT_MASK(32)
+#endif
+
extern dma_addr_t bad_dma_address;
extern int iommu_merge;
extern struct device x86_dma_fallback_dev;
@@ -124,10 +130,8 @@ dma_alloc_coherent(struct device *dev, s
if (dma_alloc_from_coherent(dev, size, dma_handle, &memory))
return memory;
- if (!dev) {
+ if (!dev)
dev = &x86_dma_fallback_dev;
- gfp |= GFP_DMA;
- }
if (!is_device_dma_capable(dev))
return NULL;
--- linux-2.6.32-rc6/arch/x86/kernel/pci-dma.c 2009-11-04 13:23:36.000000000 +0100
+++ 2.6.32-rc6-x86-dma-mask-gfp/arch/x86/kernel/pci-dma.c 2009-10-27 11:14:11.000000000 +0100
@@ -45,12 +45,10 @@ int iommu_pass_through __read_mostly;
dma_addr_t bad_dma_address __read_mostly = 0;
EXPORT_SYMBOL(bad_dma_address);
-/* Dummy device used for NULL arguments (normally ISA). Better would
- be probably a smaller DMA mask, but this is bug-to-bug compatible
- to older i386. */
+/* Dummy device used for NULL arguments (normally ISA). */
struct device x86_dma_fallback_dev = {
.init_name = "fallback device",
- .coherent_dma_mask = DMA_BIT_MASK(32),
+ .coherent_dma_mask = ISA_DMA_BIT_MASK,
.dma_mask = &x86_dma_fallback_dev.coherent_dma_mask,
};
EXPORT_SYMBOL(x86_dma_fallback_dev);
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] x86: adjust GFP mask handling for coherent allocations (take 2)
2009-11-04 12:28 [PATCH] x86: adjust GFP mask handling for coherent allocations (take 2) Jan Beulich
@ 2009-11-06 15:41 ` Takashi Iwai
2009-11-08 11:12 ` [PATCH, v3] x86: Adjust GFP mask handling for coherent allocations Ingo Molnar
0 siblings, 1 reply; 4+ messages in thread
From: Takashi Iwai @ 2009-11-06 15:41 UTC (permalink / raw)
To: Jan Beulich; +Cc: mingo, tglx, hpa, linux-kernel, jbarnes
At Wed, 04 Nov 2009 12:28:39 +0000,
Jan Beulich wrote:
>
> Rather than forcing GFP flags and DMA mask to be inconsistent, GFP
> flags should be determined even for the fallback device through
> dma_alloc_coherent_mask()/dma_alloc_coherent_gfp_flags(). This
> restores 64-bit behavior as it was prior to commits
> 8965eb19386fdf5ccd0ef8b02593eb8560aa3416 and
> 4a367f3a9dbf2e7ffcee4702203479809236ee6e (not sure why there are two of
> them), where GFP_DMA was forced on for 32-bit, but not for 64-bit, with
> the slight adjustment that afaict even 32-bit doesn't need this without
> CONFIG_ISA.
>
> Signed-off-by: Jan Beulich <jbeulich@novell.com>
> Cc: Takashi Iwai <tiwai@suse.de>
Acked-by: Takashi Iwai <tiwai@suse.de>
thanks,
Takashi
> Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
>
> ---
> arch/x86/include/asm/dma-mapping.h | 10 +++++++---
> arch/x86/kernel/pci-dma.c | 6 ++----
> 2 files changed, 9 insertions(+), 7 deletions(-)
>
> --- linux-2.6.32-rc6/arch/x86/include/asm/dma-mapping.h 2009-11-04 13:23:36.000000000 +0100
> +++ 2.6.32-rc6-x86-dma-mask-gfp/arch/x86/include/asm/dma-mapping.h 2009-10-27 11:10:28.000000000 +0100
> @@ -14,6 +14,12 @@
> #include <asm/swiotlb.h>
> #include <asm-generic/dma-coherent.h>
>
> +#ifdef CONFIG_ISA
> +#define ISA_DMA_BIT_MASK DMA_BIT_MASK(24)
> +#else
> +#define ISA_DMA_BIT_MASK DMA_BIT_MASK(32)
> +#endif
> +
> extern dma_addr_t bad_dma_address;
> extern int iommu_merge;
> extern struct device x86_dma_fallback_dev;
> @@ -124,10 +130,8 @@ dma_alloc_coherent(struct device *dev, s
> if (dma_alloc_from_coherent(dev, size, dma_handle, &memory))
> return memory;
>
> - if (!dev) {
> + if (!dev)
> dev = &x86_dma_fallback_dev;
> - gfp |= GFP_DMA;
> - }
>
> if (!is_device_dma_capable(dev))
> return NULL;
> --- linux-2.6.32-rc6/arch/x86/kernel/pci-dma.c 2009-11-04 13:23:36.000000000 +0100
> +++ 2.6.32-rc6-x86-dma-mask-gfp/arch/x86/kernel/pci-dma.c 2009-10-27 11:14:11.000000000 +0100
> @@ -45,12 +45,10 @@ int iommu_pass_through __read_mostly;
> dma_addr_t bad_dma_address __read_mostly = 0;
> EXPORT_SYMBOL(bad_dma_address);
>
> -/* Dummy device used for NULL arguments (normally ISA). Better would
> - be probably a smaller DMA mask, but this is bug-to-bug compatible
> - to older i386. */
> +/* Dummy device used for NULL arguments (normally ISA). */
> struct device x86_dma_fallback_dev = {
> .init_name = "fallback device",
> - .coherent_dma_mask = DMA_BIT_MASK(32),
> + .coherent_dma_mask = ISA_DMA_BIT_MASK,
> .dma_mask = &x86_dma_fallback_dev.coherent_dma_mask,
> };
> EXPORT_SYMBOL(x86_dma_fallback_dev);
>
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH, v3] x86: Adjust GFP mask handling for coherent allocations
2009-11-06 15:41 ` Takashi Iwai
@ 2009-11-08 11:12 ` Ingo Molnar
2009-11-08 15:45 ` Jesse Barnes
0 siblings, 1 reply; 4+ messages in thread
From: Ingo Molnar @ 2009-11-08 11:12 UTC (permalink / raw)
To: Takashi Iwai, Jesse Barnes; +Cc: Jan Beulich, tglx, hpa, linux-kernel, jbarnes
* Takashi Iwai <tiwai@suse.de> wrote:
> At Wed, 04 Nov 2009 12:28:39 +0000,
> Jan Beulich wrote:
> >
> > Rather than forcing GFP flags and DMA mask to be inconsistent, GFP
> > flags should be determined even for the fallback device through
> > dma_alloc_coherent_mask()/dma_alloc_coherent_gfp_flags(). This
> > restores 64-bit behavior as it was prior to commits
> > 8965eb19386fdf5ccd0ef8b02593eb8560aa3416 and
> > 4a367f3a9dbf2e7ffcee4702203479809236ee6e (not sure why there are two of
> > them), where GFP_DMA was forced on for 32-bit, but not for 64-bit, with
> > the slight adjustment that afaict even 32-bit doesn't need this without
> > CONFIG_ISA.
> >
> > Signed-off-by: Jan Beulich <jbeulich@novell.com>
> > Cc: Takashi Iwai <tiwai@suse.de>
>
> Acked-by: Takashi Iwai <tiwai@suse.de>
Jesse, mind picking this up for .32?
I've attached below a slightly cleaned up version of the patch, with
Takashi's ack added.
Thanks,
Ingo
------------------>
Subject: x86: Adjust GFP mask handling for coherent allocations
From: "Jan Beulich" <JBeulich@novell.com>
Date: Wed, 04 Nov 2009 12:28:39 +0000
Rather than forcing GFP flags and DMA mask to be inconsistent,
GFP flags should be determined even for the fallback device
through dma_alloc_coherent_mask()/dma_alloc_coherent_gfp_flags().
This restores 64-bit behavior as it was prior to commits
8965eb19386fdf5ccd0ef8b02593eb8560aa3416 and
4a367f3a9dbf2e7ffcee4702203479809236ee6e (not sure why there are
two of them), where GFP_DMA was forced on for 32-bit, but not
for 64-bit, with the slight adjustment that afaict even 32-bit
doesn't need this without CONFIG_ISA.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Acked-by: Takashi Iwai <tiwai@suse.de>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
LKML-Reference: <4AF18187020000780001D8AA@vpn.id2.novell.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
arch/x86/include/asm/dma-mapping.h | 10 +++++++---
arch/x86/kernel/pci-dma.c | 6 ++----
2 files changed, 9 insertions(+), 7 deletions(-)
Index: tip/arch/x86/include/asm/dma-mapping.h
===================================================================
--- tip.orig/arch/x86/include/asm/dma-mapping.h
+++ tip/arch/x86/include/asm/dma-mapping.h
@@ -14,6 +14,12 @@
#include <asm/swiotlb.h>
#include <asm-generic/dma-coherent.h>
+#ifdef CONFIG_ISA
+# define ISA_DMA_BIT_MASK DMA_BIT_MASK(24)
+#else
+# define ISA_DMA_BIT_MASK DMA_BIT_MASK(32)
+#endif
+
extern dma_addr_t bad_dma_address;
extern int iommu_merge;
extern struct device x86_dma_fallback_dev;
@@ -124,10 +130,8 @@ dma_alloc_coherent(struct device *dev, s
if (dma_alloc_from_coherent(dev, size, dma_handle, &memory))
return memory;
- if (!dev) {
+ if (!dev)
dev = &x86_dma_fallback_dev;
- gfp |= GFP_DMA;
- }
if (!is_device_dma_capable(dev))
return NULL;
Index: tip/arch/x86/kernel/pci-dma.c
===================================================================
--- tip.orig/arch/x86/kernel/pci-dma.c
+++ tip/arch/x86/kernel/pci-dma.c
@@ -45,12 +45,10 @@ int iommu_pass_through __read_mostly;
dma_addr_t bad_dma_address __read_mostly = 0;
EXPORT_SYMBOL(bad_dma_address);
-/* Dummy device used for NULL arguments (normally ISA). Better would
- be probably a smaller DMA mask, but this is bug-to-bug compatible
- to older i386. */
+/* Dummy device used for NULL arguments (normally ISA). */
struct device x86_dma_fallback_dev = {
.init_name = "fallback device",
- .coherent_dma_mask = DMA_BIT_MASK(32),
+ .coherent_dma_mask = ISA_DMA_BIT_MASK,
.dma_mask = &x86_dma_fallback_dev.coherent_dma_mask,
};
EXPORT_SYMBOL(x86_dma_fallback_dev);
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH, v3] x86: Adjust GFP mask handling for coherent allocations
2009-11-08 11:12 ` [PATCH, v3] x86: Adjust GFP mask handling for coherent allocations Ingo Molnar
@ 2009-11-08 15:45 ` Jesse Barnes
0 siblings, 0 replies; 4+ messages in thread
From: Jesse Barnes @ 2009-11-08 15:45 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Takashi Iwai, Jan Beulich, tglx, hpa, linux-kernel
On Sun, 8 Nov 2009 12:12:14 +0100
Ingo Molnar <mingo@elte.hu> wrote:
>
> * Takashi Iwai <tiwai@suse.de> wrote:
>
> > At Wed, 04 Nov 2009 12:28:39 +0000,
> > Jan Beulich wrote:
> > >
> > > Rather than forcing GFP flags and DMA mask to be inconsistent, GFP
> > > flags should be determined even for the fallback device through
> > > dma_alloc_coherent_mask()/dma_alloc_coherent_gfp_flags(). This
> > > restores 64-bit behavior as it was prior to commits
> > > 8965eb19386fdf5ccd0ef8b02593eb8560aa3416 and
> > > 4a367f3a9dbf2e7ffcee4702203479809236ee6e (not sure why there are
> > > two of them), where GFP_DMA was forced on for 32-bit, but not for
> > > 64-bit, with the slight adjustment that afaict even 32-bit
> > > doesn't need this without CONFIG_ISA.
> > >
> > > Signed-off-by: Jan Beulich <jbeulich@novell.com>
> > > Cc: Takashi Iwai <tiwai@suse.de>
> >
> > Acked-by: Takashi Iwai <tiwai@suse.de>
>
> Jesse, mind picking this up for .32?
>
> I've attached below a slightly cleaned up version of the patch, with
> Takashi's ack added.
Sure, I just stuffed it into my for-linus tree, I'll send a pull req on
Monday or Tuesday.
Thanks,
--
Jesse Barnes, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-11-08 15:45 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-11-04 12:28 [PATCH] x86: adjust GFP mask handling for coherent allocations (take 2) Jan Beulich
2009-11-06 15:41 ` Takashi Iwai
2009-11-08 11:12 ` [PATCH, v3] x86: Adjust GFP mask handling for coherent allocations Ingo Molnar
2009-11-08 15:45 ` Jesse Barnes
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®