Welcome to Soft32 Linux Forums!
FAQFAQ    SearchSearch      ProfileProfile    Private MessagesPrivate Messages   Log inLog in

[PATCH] x86: adjust GFP mask handling for coherent allocat..

 
   Soft32 Home -> Linux -> Kernel RSS
Next:  [Patch] net: fix incorrect counting in __scm_dest..  
Author Message
Jan Beulich

External


Since: May 11, 2009
Posts: 39



(Msg. 1) Posted: Wed Nov 04, 2009 7:20 am
Post subject: [PATCH] x86: adjust GFP mask handling for coherent allocations (take 2)
Archived from groups: linux>kernel (more info?)

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.DeleteThis@novell.com>
Cc: Takashi Iwai <tiwai.DeleteThis@suse.de>
Cc: Jesse Barnes <jbarnes.DeleteThis@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);



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo.DeleteThis@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to top
Login to vote
Takashi Iwai

External


Since: Jun 28, 2007
Posts: 198



(Msg. 2) Posted: Fri Nov 06, 2009 11:20 am
Post subject: Re: [PATCH] x86: adjust GFP mask handling for coherent allocations (take 2) [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

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.TakeThisOut@novell.com>
> Cc: Takashi Iwai <tiwai.TakeThisOut@suse.de>

Acked-by: Takashi Iwai <tiwai.TakeThisOut@suse.de>


thanks,

Takashi


> Cc: Jesse Barnes <jbarnes.TakeThisOut@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);
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo.TakeThisOut@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to top
Login to vote
Ingo Molnar

External


Since: Nov 05, 2003
Posts: 2920



(Msg. 3) Posted: Sun Nov 08, 2009 5:20 am
Post subject: [PATCH, v3] x86: Adjust GFP mask handling for coherent allocations [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

* Takashi Iwai <tiwai.RemoveThis@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.RemoveThis@novell.com>
> > Cc: Takashi Iwai <tiwai.RemoveThis@suse.de>
>
> Acked-by: Takashi Iwai <tiwai.RemoveThis@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.RemoveThis@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.RemoveThis@novell.com>
Acked-by: Takashi Iwai <tiwai.RemoveThis@suse.de>
Cc: Jesse Barnes <jbarnes.RemoveThis@virtuousgeek.org>
LKML-Reference: <4AF18187020000780001D8AA.RemoveThis@vpn.id2.novell.com>
Signed-off-by: Ingo Molnar <mingo.RemoveThis@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);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo.RemoveThis@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to top
Login to vote
Jesse Barnes

External


Since: Jan 02, 2007
Posts: 155



(Msg. 4) Posted: Sun Nov 08, 2009 4:50 pm
Post subject: Re: [PATCH, v3] x86: Adjust GFP mask handling for coherent allocations [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

On Sun, 8 Nov 2009 12:12:14 +0100
Ingo Molnar <mingo.TakeThisOut@elte.hu> wrote:

>
> * Takashi Iwai <tiwai.TakeThisOut@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.TakeThisOut@novell.com>
> > > Cc: Takashi Iwai <tiwai.TakeThisOut@suse.de>
> >
> > Acked-by: Takashi Iwai <tiwai.TakeThisOut@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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo.TakeThisOut@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to top
Login to vote
Display posts from previous:   
Related Topics:
[PATCH] adjust nosmp handling - Especially when !CONFIG_HOTPLUG_CPU, avoid needlessy allocating resources for CPUs that can never become available. ..

[RFC/PATCH] allow memory to be tagged "coherent" via dma_m.. - Altix supports "posted DMA", and DMA can complete out of order due to reordering within the NUMA-interconnect...

[PATCH] x86-64: adjust pmd_bad() - Make pmd_bad() symmetrical to pgd_bad() and pud_bad(). At once, simplify them all. Signed-off-by: Jan Beulich..

[PATCH] adjust use of unplug in elevator code - Hi Chris, Jens, Can you look at this, and push upstream if this looks reasonable to you? It fixes a bug I've been..

[PATCH] x86: adjust inclusion of asm/fixmap.h - Move inclusion of asm/fixmap.h to where it is really used rather than where it may have been used long ago (requires a....

[PATCH] [ipv6]: adjust inet6_exit() cleanup sequence again.. - Hi, This patch for adjust inet6_exit() to inverse sequence to inet6_init(). At ipv6_init, it first create..
       Soft32 Home -> Linux -> Kernel All times are: Pacific Time (US & Canada) (change)
Page 1 of 1

 
You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

Categories:
 Windows
  Linux
 Mac
 PDA


[ Contact us | Terms of Service/Privacy Policy ]