linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
@ 2012-08-31  9:57 Stefano Panella
  2012-08-31 12:47 ` [Xen-devel] " David Vrabel
  0 siblings, 1 reply; 11+ messages in thread
From: Stefano Panella @ 2012-08-31  9:57 UTC (permalink / raw)
  To: linux-kernel, konrad.wilk, xen-devel; +Cc: Stefano Panella

When running 32-bit pvops-dom0 and a driver tries to allocate a coherent
DMA-memory the xen swiotlb-implementation returned memory beyond 4GB.

This caused for example not working sound on a system with 4 GB and a 64-bit
compatible sound-card with sets the DMA-mask to 64bit.

On bare-metal and the forward-ported xen-dom0 patches from OpenSuse a coherent
DMA-memory is always allocated inside the 32-bit address-range by calling
dma_alloc_coherent_mask.

This patch adds the same functionality to xen swiotlb and is a rebase of the
original patch from Ronny Hegewald which never got upstream for some reason.

The original email with the original patch is in:

http://old-list-archives.xen.org/archives/html/xen-devel/2010-02/msg00038.html

the original thread from where the deiscussion started is in:

http://old-list-archives.xen.org/archives/html/xen-devel/2010-01/msg00928.html

Signed-off-by: Ronny Hegewald
Signed-off-by: Stefano Panella <stefano.panella@citrix.com>
---
 drivers/xen/swiotlb-xen.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index 1afb4fb..4d51948 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -232,7 +232,7 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
 		return ret;
 
 	if (hwdev && hwdev->coherent_dma_mask)
-		dma_mask = hwdev->coherent_dma_mask;
+		dma_mask = dma_alloc_coherent_mask(hwdev, flags);
 
 	phys = virt_to_phys(ret);
 	dev_addr = xen_phys_to_bus(phys);
-- 
1.7.4.1


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

* Re: [Xen-devel] [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
  2012-08-31  9:57 [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent Stefano Panella
@ 2012-08-31 12:47 ` David Vrabel
  2012-08-31 16:40   ` Konrad Rzeszutek Wilk
  0 siblings, 1 reply; 11+ messages in thread
From: David Vrabel @ 2012-08-31 12:47 UTC (permalink / raw)
  To: Stefano Panella; +Cc: linux-kernel, konrad.wilk, xen-devel

On 31/08/12 10:57, Stefano Panella wrote:
> When running 32-bit pvops-dom0 and a driver tries to allocate a coherent
> DMA-memory the xen swiotlb-implementation returned memory beyond 4GB.
> 
> This caused for example not working sound on a system with 4 GB and a 64-bit
> compatible sound-card with sets the DMA-mask to 64bit.
> 
> On bare-metal and the forward-ported xen-dom0 patches from OpenSuse a coherent
> DMA-memory is always allocated inside the 32-bit address-range by calling
> dma_alloc_coherent_mask.

We should have the same behaviour under Xen as bare metal so:

Acked-By: David Vrabel <david.vrabel@citrix.com>

This does limit the DMA mask to 32-bits by passing it through an
unsigned long, which seems a bit sneaky...

Presumably the sound card is capable of handling 64 bit physical
addresses (or it would break under 64-bit kernels) so it's not clear why
this sound driver requires this restriction.

Is there a bug in the sound driver or sound subsystem where it's
truncating a dma_addr_t by assigning it to an unsigned long or similar?

> --- a/drivers/xen/swiotlb-xen.c
> +++ b/drivers/xen/swiotlb-xen.c
> @@ -232,7 +232,7 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
>  		return ret;
>  
>  	if (hwdev && hwdev->coherent_dma_mask)
> -		dma_mask = hwdev->coherent_dma_mask;
> +		dma_mask = dma_alloc_coherent_mask(hwdev, flags);

Suggest

    if (hwdev)
        dma_mask = dma_alloc_coherent_mask(hwdev, flags)

>  	phys = virt_to_phys(ret);
>  	dev_addr = xen_phys_to_bus(phys);

David

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

* Re: [Xen-devel] [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
  2012-08-31 12:47 ` [Xen-devel] " David Vrabel
@ 2012-08-31 16:40   ` Konrad Rzeszutek Wilk
  2012-09-04 14:07     ` Stefano Panella
  0 siblings, 1 reply; 11+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-08-31 16:40 UTC (permalink / raw)
  To: David Vrabel; +Cc: Stefano Panella, linux-kernel, xen-devel

On Fri, Aug 31, 2012 at 01:47:05PM +0100, David Vrabel wrote:
> On 31/08/12 10:57, Stefano Panella wrote:
> > When running 32-bit pvops-dom0 and a driver tries to allocate a coherent
> > DMA-memory the xen swiotlb-implementation returned memory beyond 4GB.
> > 
> > This caused for example not working sound on a system with 4 GB and a 64-bit
> > compatible sound-card with sets the DMA-mask to 64bit.
> > 
> > On bare-metal and the forward-ported xen-dom0 patches from OpenSuse a coherent
> > DMA-memory is always allocated inside the 32-bit address-range by calling
> > dma_alloc_coherent_mask.
> 
> We should have the same behaviour under Xen as bare metal so:
> 
> Acked-By: David Vrabel <david.vrabel@citrix.com>
> 
> This does limit the DMA mask to 32-bits by passing it through an
> unsigned long, which seems a bit sneaky...

so is the issue that we are not casting it from 'u64' to 'u32'
(unsigned long) on 32-bit?

> 
> Presumably the sound card is capable of handling 64 bit physical
> addresses (or it would break under 64-bit kernels) so it's not clear why
> this sound driver requires this restriction.
> 
> Is there a bug in the sound driver or sound subsystem where it's
> truncating a dma_addr_t by assigning it to an unsigned long or similar?
> 
> > --- a/drivers/xen/swiotlb-xen.c
> > +++ b/drivers/xen/swiotlb-xen.c
> > @@ -232,7 +232,7 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
> >  		return ret;
> >  
> >  	if (hwdev && hwdev->coherent_dma_mask)
> > -		dma_mask = hwdev->coherent_dma_mask;
> > +		dma_mask = dma_alloc_coherent_mask(hwdev, flags);
> 
> Suggest
> 
>     if (hwdev)
>         dma_mask = dma_alloc_coherent_mask(hwdev, flags)

Isn't that code just doing this:
atic inline unsigned long dma_alloc_coherent_mask(struct device *dev,
                                                    gfp_t gfp)
{
        unsigned long dma_mask = 0;

        dma_mask = dev->coherent_dma_mask;
        if (!dma_mask)
                dma_mask = (gfp & GFP_DMA) ? DMA_BIT_MASK(24) :
DMA_BIT_MASK(32);

        return dma_mask;
}

and in our code, the dma_mask by default is DMA_BIT_MASK(32):

u64 dma_mask = DMA_BIT_MASK(32);

So what I am missing?

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

* Re: [Xen-devel] [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
  2012-08-31 16:40   ` Konrad Rzeszutek Wilk
@ 2012-09-04 14:07     ` Stefano Panella
  2012-09-04 14:37       ` Konrad Rzeszutek Wilk
  2012-09-05 14:33       ` Konrad Rzeszutek Wilk
  0 siblings, 2 replies; 11+ messages in thread
From: Stefano Panella @ 2012-09-04 14:07 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk; +Cc: David Vrabel, linux-kernel, xen-devel

On 08/31/2012 05:40 PM, Konrad Rzeszutek Wilk wrote:
> On Fri, Aug 31, 2012 at 01:47:05PM +0100, David Vrabel wrote:
>> On 31/08/12 10:57, Stefano Panella wrote:
>>> When running 32-bit pvops-dom0 and a driver tries to allocate a coherent
>>> DMA-memory the xen swiotlb-implementation returned memory beyond 4GB.
>>>
>>> This caused for example not working sound on a system with 4 GB and a 64-bit
>>> compatible sound-card with sets the DMA-mask to 64bit.
>>>
>>> On bare-metal and the forward-ported xen-dom0 patches from OpenSuse a coherent
>>> DMA-memory is always allocated inside the 32-bit address-range by calling
>>> dma_alloc_coherent_mask.
>> We should have the same behaviour under Xen as bare metal so:
>>
>> Acked-By: David Vrabel <david.vrabel@citrix.com>
>>
>> This does limit the DMA mask to 32-bits by passing it through an
>> unsigned long, which seems a bit sneaky...
> so is the issue that we are not casting it from 'u64' to 'u32'
> (unsigned long) on 32-bit?

Yes. I do not completely understand why but I think on 32-bit kernel we need to cast dma_mask to u32. This is done automatically using dma_alloc_coherent_mask()

>
>> Presumably the sound card is capable of handling 64 bit physical
>> addresses (or it would break under 64-bit kernels) so it's not clear why
>> this sound driver requires this restriction.
>>
>> Is there a bug in the sound driver or sound subsystem where it's
>> truncating a dma_addr_t by assigning it to an unsigned long or similar?
>>
>>> --- a/drivers/xen/swiotlb-xen.c
>>> +++ b/drivers/xen/swiotlb-xen.c
>>> @@ -232,7 +232,7 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
>>>   		return ret;
>>>   
>>>   	if (hwdev && hwdev->coherent_dma_mask)
>>> -		dma_mask = hwdev->coherent_dma_mask;
>>> +		dma_mask = dma_alloc_coherent_mask(hwdev, flags);
>> Suggest
>>
>>      if (hwdev)
>>          dma_mask = dma_alloc_coherent_mask(hwdev, flags)

I can change the patch like that if you like.

> Isn't that code just doing this:
> atic inline unsigned long dma_alloc_coherent_mask(struct device *dev,
>                                                      gfp_t gfp)
> {
>          unsigned long dma_mask = 0;
>
>          dma_mask = dev->coherent_dma_mask;
>          if (!dma_mask)
>                  dma_mask = (gfp & GFP_DMA) ? DMA_BIT_MASK(24) :
> DMA_BIT_MASK(32);
>
>          return dma_mask;
> }
>
> and in our code, the dma_mask by default is DMA_BIT_MASK(32):
>
> u64 dma_mask = DMA_BIT_MASK(32);
>
> So what I am missing?

I am not sure what you mean with "what am I missing?"

Current code looks like:

void *
xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
                            dma_addr_t *dma_handle, gfp_t flags,
                            struct dma_attrs *attrs)
{
         void *ret;
         int order = get_order(size);
         u64 dma_mask = DMA_BIT_MASK(32);
         unsigned long vstart;
         phys_addr_t phys;
         dma_addr_t dev_addr;

         /*
         * Ignore region specifiers - the kernel's ideas of
         * pseudo-phys memory layout has nothing to do with the
         * machine physical layout.  We can't allocate highmem
         * because we can't return a pointer to it.
         */
         flags &= ~(__GFP_DMA | __GFP_HIGHMEM);

         if (dma_alloc_from_coherent(hwdev, size, dma_handle, &ret))
                 return ret;

         vstart = __get_free_pages(flags, order);
         ret = (void *)vstart;

         if (!ret)
                 return ret;

         if (hwdev && hwdev->coherent_dma_mask)
                 dma_mask = hwdev->coherent_dma_mask;


So if hwdev->coherent_dma_mask is set to 0xffffffffffffffff our dma_mask will
be u64 set to 0xffffffffffffffff even if we set it to DMA_BIT_MASK(32) previously.

I hope I am not getting this wrong and let me know if I should send an updated version
of the patch including David V. change.

Regards,

Stefano


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

* Re: [Xen-devel] [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
  2012-09-04 14:07     ` Stefano Panella
@ 2012-09-04 14:37       ` Konrad Rzeszutek Wilk
  2012-09-04 14:55         ` David Vrabel
  2012-09-05 14:33       ` Konrad Rzeszutek Wilk
  1 sibling, 1 reply; 11+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-09-04 14:37 UTC (permalink / raw)
  To: Stefano Panella; +Cc: David Vrabel, linux-kernel, xen-devel

On Tue, Sep 04, 2012 at 03:07:42PM +0100, Stefano Panella wrote:
> On 08/31/2012 05:40 PM, Konrad Rzeszutek Wilk wrote:
> >On Fri, Aug 31, 2012 at 01:47:05PM +0100, David Vrabel wrote:
> >>On 31/08/12 10:57, Stefano Panella wrote:
> >>>When running 32-bit pvops-dom0 and a driver tries to allocate a coherent
> >>>DMA-memory the xen swiotlb-implementation returned memory beyond 4GB.
> >>>
> >>>This caused for example not working sound on a system with 4 GB and a 64-bit
> >>>compatible sound-card with sets the DMA-mask to 64bit.
> >>>
> >>>On bare-metal and the forward-ported xen-dom0 patches from OpenSuse a coherent
> >>>DMA-memory is always allocated inside the 32-bit address-range by calling
> >>>dma_alloc_coherent_mask.
> >>We should have the same behaviour under Xen as bare metal so:
> >>
> >>Acked-By: David Vrabel <david.vrabel@citrix.com>
> >>
> >>This does limit the DMA mask to 32-bits by passing it through an
> >>unsigned long, which seems a bit sneaky...
> >so is the issue that we are not casting it from 'u64' to 'u32'
> >(unsigned long) on 32-bit?
> 
> Yes. I do not completely understand why but I think on 32-bit kernel we need to cast dma_mask to u32. This is done automatically using dma_alloc_coherent_mask()
> 
> >
> >>Presumably the sound card is capable of handling 64 bit physical
> >>addresses (or it would break under 64-bit kernels) so it's not clear why
> >>this sound driver requires this restriction.
> >>
> >>Is there a bug in the sound driver or sound subsystem where it's
> >>truncating a dma_addr_t by assigning it to an unsigned long or similar?
> >>
> >>>--- a/drivers/xen/swiotlb-xen.c
> >>>+++ b/drivers/xen/swiotlb-xen.c
> >>>@@ -232,7 +232,7 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
> >>>  		return ret;
> >>>  	if (hwdev && hwdev->coherent_dma_mask)
> >>>-		dma_mask = hwdev->coherent_dma_mask;
> >>>+		dma_mask = dma_alloc_coherent_mask(hwdev, flags);
> >>Suggest
> >>
> >>     if (hwdev)
> >>         dma_mask = dma_alloc_coherent_mask(hwdev, flags)
> 
> I can change the patch like that if you like.
> 
> >Isn't that code just doing this:
> >atic inline unsigned long dma_alloc_coherent_mask(struct device *dev,
> >                                                     gfp_t gfp)
> >{
> >         unsigned long dma_mask = 0;
> >
> >         dma_mask = dev->coherent_dma_mask;
> >         if (!dma_mask)
> >                 dma_mask = (gfp & GFP_DMA) ? DMA_BIT_MASK(24) :
> >DMA_BIT_MASK(32);
> >
> >         return dma_mask;
> >}
> >
> >and in our code, the dma_mask by default is DMA_BIT_MASK(32):
> >
> >u64 dma_mask = DMA_BIT_MASK(32);
> >
> >So what I am missing?
> 
> I am not sure what you mean with "what am I missing?"
> 
> Current code looks like:
> 
> void *
> xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
>                            dma_addr_t *dma_handle, gfp_t flags,
>                            struct dma_attrs *attrs)
> {
>         void *ret;
>         int order = get_order(size);
>         u64 dma_mask = DMA_BIT_MASK(32);
>         unsigned long vstart;
>         phys_addr_t phys;
>         dma_addr_t dev_addr;
> 
>         /*
>         * Ignore region specifiers - the kernel's ideas of
>         * pseudo-phys memory layout has nothing to do with the
>         * machine physical layout.  We can't allocate highmem
>         * because we can't return a pointer to it.
>         */
>         flags &= ~(__GFP_DMA | __GFP_HIGHMEM);
> 
>         if (dma_alloc_from_coherent(hwdev, size, dma_handle, &ret))
>                 return ret;
> 
>         vstart = __get_free_pages(flags, order);
>         ret = (void *)vstart;
> 
>         if (!ret)
>                 return ret;
> 
>         if (hwdev && hwdev->coherent_dma_mask)
>                 dma_mask = hwdev->coherent_dma_mask;
> 
> 
> So if hwdev->coherent_dma_mask is set to 0xffffffffffffffff our dma_mask will
> be u64 set to 0xffffffffffffffff even if we set it to DMA_BIT_MASK(32) previously.

That is what I was missing. Let me include that in the git commit and also
put this patch on the stable tree.

> 
> I hope I am not getting this wrong and let me know if I should send an updated version
> of the patch including David V. change.
> 
> Regards,
> 
> Stefano

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

* Re: [Xen-devel] [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
  2012-09-04 14:37       ` Konrad Rzeszutek Wilk
@ 2012-09-04 14:55         ` David Vrabel
  2012-09-04 15:12           ` Stefano Panella
  0 siblings, 1 reply; 11+ messages in thread
From: David Vrabel @ 2012-09-04 14:55 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk; +Cc: Stefano Panella, linux-kernel, xen-devel

On 04/09/12 15:37, Konrad Rzeszutek Wilk wrote:
> On Tue, Sep 04, 2012 at 03:07:42PM +0100, Stefano Panella wrote:
>> 
>> So if hwdev->coherent_dma_mask is set to 0xffffffffffffffff our dma_mask will
>> be u64 set to 0xffffffffffffffff even if we set it to DMA_BIT_MASK(32) previously.
> 
> That is what I was missing. Let me include that in the git commit and also
> put this patch on the stable tree.

Note that this appears to be a work around for a bug in the sound system
or Intel HDA device driver which is incorrectly truncating a dma_addr_t
to a u32.  So by ensuring a DMA_BIT_MASK(32) when the dma_addr_t is
truncated it still works.

David

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

* Re: [Xen-devel] [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
  2012-09-04 14:55         ` David Vrabel
@ 2012-09-04 15:12           ` Stefano Panella
  2012-09-04 16:44             ` David Vrabel
  0 siblings, 1 reply; 11+ messages in thread
From: Stefano Panella @ 2012-09-04 15:12 UTC (permalink / raw)
  To: David Vrabel; +Cc: Konrad Rzeszutek Wilk, linux-kernel, xen-devel

On 09/04/2012 03:55 PM, David Vrabel wrote:
> On 04/09/12 15:37, Konrad Rzeszutek Wilk wrote:
>> On Tue, Sep 04, 2012 at 03:07:42PM +0100, Stefano Panella wrote:
>>> So if hwdev->coherent_dma_mask is set to 0xffffffffffffffff our dma_mask will
>>> be u64 set to 0xffffffffffffffff even if we set it to DMA_BIT_MASK(32) previously.
>> That is what I was missing. Let me include that in the git commit and also
>> put this patch on the stable tree.
> Note that this appears to be a work around for a bug in the sound system
> or Intel HDA device driver which is incorrectly truncating a dma_addr_t
> to a u32.  So by ensuring a DMA_BIT_MASK(32) when the dma_addr_t is
> truncated it still works.
>
> David
Sorry David, I am not completely sure I understand your argument in 
favour of a bug in the
sound system or Intel HDA device driver. Could you please elaborate more 
in detail about this?

Thanks,

Stefano

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

* Re: [Xen-devel] [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
  2012-09-04 16:44             ` David Vrabel
@ 2012-09-04 16:40               ` Konrad Rzeszutek Wilk
  2012-09-05 13:13                 ` Stefano Panella
  0 siblings, 1 reply; 11+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-09-04 16:40 UTC (permalink / raw)
  To: David Vrabel; +Cc: Stefano Panella, xen-devel, linux-kernel

On Tue, Sep 04, 2012 at 05:44:46PM +0100, David Vrabel wrote:
> On 04/09/12 16:12, Stefano Panella wrote:
> > On 09/04/2012 03:55 PM, David Vrabel wrote:
> >> On 04/09/12 15:37, Konrad Rzeszutek Wilk wrote:
> >>> On Tue, Sep 04, 2012 at 03:07:42PM +0100, Stefano Panella wrote:
> >>>> So if hwdev->coherent_dma_mask is set to 0xffffffffffffffff our
> >>>> dma_mask will
> >>>> be u64 set to 0xffffffffffffffff even if we set it to
> >>>> DMA_BIT_MASK(32) previously.
> >>> That is what I was missing. Let me include that in the git commit and
> >>> also
> >>> put this patch on the stable tree.
> >> Note that this appears to be a work around for a bug in the sound system
> >> or Intel HDA device driver which is incorrectly truncating a dma_addr_t
> >> to a u32.  So by ensuring a DMA_BIT_MASK(32) when the dma_addr_t is
> >> truncated it still works.
> >>
> >> David
> > Sorry David, I am not completely sure I understand your argument in
> > favour of a bug in the
> > sound system or Intel HDA device driver. Could you please elaborate more
> > in detail about this?
> 
> The HDA driver claims to support 64-bit DMA addresses, so it should be
> perfectly fine for the Xen DMA mapping/allocation functions to return
> DMA addresses > 4 GiB.  For most devices this seems to work just fine.
> 
> I think that somewhere between the buffer being mapped or allocated and
> the address being programmed into the hardware, the 64-bit dma_addr_t
> value is being truncated to 32 bits giving an invalid DMA address.
> 
> The patch would avoid this by setting the DMA mask to 32-bit and only
> returning DMA address < 4 GiB which can quite happily be stuffed into a
> u32 without losing bits.
> 
> I think it would be useful (without the patch applied) to print the DMA
> addresses returned by the allocate/mapping functions and the address
> programmed into the hardware.  It will be easily to spot if it got
> truncated or not.

Just enable DMA debug API (CONFIG_DEBUG_DMA_API) and use this fancy module:


/*
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License v2.0 as published by
 * the Free Software Foundation
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <linux/module.h>
#include <linux/string.h>
#include <linux/types.h>
#include <linux/init.h>
#include <linux/stat.h>
#include <linux/err.h>
#include <linux/ctype.h>
#include <linux/slab.h>
#include <linux/limits.h>
#include <linux/device.h>
#include <linux/pci.h>
#include <linux/blkdev.h>
#include <linux/device.h>

#include <linux/init.h>
#include <linux/mm.h>
#include <linux/fcntl.h>
#include <linux/slab.h>
#include <linux/kmod.h>
#include <linux/major.h>
#include <linux/highmem.h>
#include <linux/blkdev.h>
#include <linux/module.h>
#include <linux/blkpg.h>
#include <linux/buffer_head.h>
#include <linux/mpage.h>
#include <linux/mount.h>
#include <linux/uio.h>
#include <linux/namei.h>
#include <asm/uaccess.h>

#include <linux/pagemap.h>
#include <linux/pagevec.h>

#include <linux/dma-debug.h>

#define DUMP_DMA_FUN  "0.1"

MODULE_AUTHOR("Konrad Rzeszutek Wilk <konrad@virtualiron>");
MODULE_DESCRIPTION("dump dma");
MODULE_LICENSE("GPL");
MODULE_VERSION(DUMP_DMA_FUN);

static int __init dump_dma_init(void)
{
	debug_dma_dump_mappings(NULL);
	return 0;
}

static void __exit dump_dma_exit(void)
{
}

module_init(dump_dma_init);
module_exit(dump_dma_exit);
> 
> David

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

* Re: [Xen-devel] [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
  2012-09-04 15:12           ` Stefano Panella
@ 2012-09-04 16:44             ` David Vrabel
  2012-09-04 16:40               ` Konrad Rzeszutek Wilk
  0 siblings, 1 reply; 11+ messages in thread
From: David Vrabel @ 2012-09-04 16:44 UTC (permalink / raw)
  To: Stefano Panella
  Cc: David Vrabel, xen-devel, linux-kernel, Konrad Rzeszutek Wilk

On 04/09/12 16:12, Stefano Panella wrote:
> On 09/04/2012 03:55 PM, David Vrabel wrote:
>> On 04/09/12 15:37, Konrad Rzeszutek Wilk wrote:
>>> On Tue, Sep 04, 2012 at 03:07:42PM +0100, Stefano Panella wrote:
>>>> So if hwdev->coherent_dma_mask is set to 0xffffffffffffffff our
>>>> dma_mask will
>>>> be u64 set to 0xffffffffffffffff even if we set it to
>>>> DMA_BIT_MASK(32) previously.
>>> That is what I was missing. Let me include that in the git commit and
>>> also
>>> put this patch on the stable tree.
>> Note that this appears to be a work around for a bug in the sound system
>> or Intel HDA device driver which is incorrectly truncating a dma_addr_t
>> to a u32.  So by ensuring a DMA_BIT_MASK(32) when the dma_addr_t is
>> truncated it still works.
>>
>> David
> Sorry David, I am not completely sure I understand your argument in
> favour of a bug in the
> sound system or Intel HDA device driver. Could you please elaborate more
> in detail about this?

The HDA driver claims to support 64-bit DMA addresses, so it should be
perfectly fine for the Xen DMA mapping/allocation functions to return
DMA addresses > 4 GiB.  For most devices this seems to work just fine.

I think that somewhere between the buffer being mapped or allocated and
the address being programmed into the hardware, the 64-bit dma_addr_t
value is being truncated to 32 bits giving an invalid DMA address.

The patch would avoid this by setting the DMA mask to 32-bit and only
returning DMA address < 4 GiB which can quite happily be stuffed into a
u32 without losing bits.

I think it would be useful (without the patch applied) to print the DMA
addresses returned by the allocate/mapping functions and the address
programmed into the hardware.  It will be easily to spot if it got
truncated or not.

David

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

* Re: [Xen-devel] [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
  2012-09-04 16:40               ` Konrad Rzeszutek Wilk
@ 2012-09-05 13:13                 ` Stefano Panella
  0 siblings, 0 replies; 11+ messages in thread
From: Stefano Panella @ 2012-09-05 13:13 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk; +Cc: David Vrabel, xen-devel, linux-kernel

On 09/04/2012 05:40 PM, Konrad Rzeszutek Wilk wrote:
> On Tue, Sep 04, 2012 at 05:44:46PM +0100, David Vrabel wrote:
>> On 04/09/12 16:12, Stefano Panella wrote:
>>> On 09/04/2012 03:55 PM, David Vrabel wrote:
>>>> On 04/09/12 15:37, Konrad Rzeszutek Wilk wrote:
>>>>> On Tue, Sep 04, 2012 at 03:07:42PM +0100, Stefano Panella wrote:
>>>>>> So if hwdev->coherent_dma_mask is set to 0xffffffffffffffff our
>>>>>> dma_mask will
>>>>>> be u64 set to 0xffffffffffffffff even if we set it to
>>>>>> DMA_BIT_MASK(32) previously.
>>>>> That is what I was missing. Let me include that in the git commit and
>>>>> also
>>>>> put this patch on the stable tree.
>>>> Note that this appears to be a work around for a bug in the sound system
>>>> or Intel HDA device driver which is incorrectly truncating a dma_addr_t
>>>> to a u32.  So by ensuring a DMA_BIT_MASK(32) when the dma_addr_t is
>>>> truncated it still works.
>>>>
>>>> David
>>> Sorry David, I am not completely sure I understand your argument in
>>> favour of a bug in the
>>> sound system or Intel HDA device driver. Could you please elaborate more
>>> in detail about this?
>> The HDA driver claims to support 64-bit DMA addresses, so it should be
>> perfectly fine for the Xen DMA mapping/allocation functions to return
>> DMA addresses > 4 GiB.  For most devices this seems to work just fine.
>>
>> I think that somewhere between the buffer being mapped or allocated and
>> the address being programmed into the hardware, the 64-bit dma_addr_t
>> value is being truncated to 32 bits giving an invalid DMA address.
>>
>> The patch would avoid this by setting the DMA mask to 32-bit and only
>> returning DMA address < 4 GiB which can quite happily be stuffed into a
>> u32 without losing bits.
>>
>> I think it would be useful (without the patch applied) to print the DMA
>> addresses returned by the allocate/mapping functions and the address
>> programmed into the hardware.  It will be easily to spot if it got
>> truncated or not.
> Just enable DMA debug API (CONFIG_DEBUG_DMA_API) and use this fancy module:
>
>
> /*
>   *
>   * This program is free software; you can redistribute it and/or modify
>   * it under the terms of the GNU General Public License v2.0 as published by
>   * the Free Software Foundation
>   *
>   * This program is distributed in the hope that it will be useful,
>   * but WITHOUT ANY WARRANTY; without even the implied warranty of
>   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>   * GNU General Public License for more details.
>   */
>
> #include <linux/module.h>
> #include <linux/string.h>
> #include <linux/types.h>
> #include <linux/init.h>
> #include <linux/stat.h>
> #include <linux/err.h>
> #include <linux/ctype.h>
> #include <linux/slab.h>
> #include <linux/limits.h>
> #include <linux/device.h>
> #include <linux/pci.h>
> #include <linux/blkdev.h>
> #include <linux/device.h>
>
> #include <linux/init.h>
> #include <linux/mm.h>
> #include <linux/fcntl.h>
> #include <linux/slab.h>
> #include <linux/kmod.h>
> #include <linux/major.h>
> #include <linux/highmem.h>
> #include <linux/blkdev.h>
> #include <linux/module.h>
> #include <linux/blkpg.h>
> #include <linux/buffer_head.h>
> #include <linux/mpage.h>
> #include <linux/mount.h>
> #include <linux/uio.h>
> #include <linux/namei.h>
> #include <asm/uaccess.h>
>
> #include <linux/pagemap.h>
> #include <linux/pagevec.h>
>
> #include <linux/dma-debug.h>
>
> #define DUMP_DMA_FUN  "0.1"
>
> MODULE_AUTHOR("Konrad Rzeszutek Wilk <konrad@virtualiron>");
> MODULE_DESCRIPTION("dump dma");
> MODULE_LICENSE("GPL");
> MODULE_VERSION(DUMP_DMA_FUN);
>
> static int __init dump_dma_init(void)
> {
> 	debug_dma_dump_mappings(NULL);
> 	return 0;
> }
>
> static void __exit dump_dma_exit(void)
> {
> }
>
> module_init(dump_dma_init);
> module_exit(dump_dma_exit);
>> David
Hi,
I have just tried to load the dump_dma module, can you observe anything 
from it?

[ 2471.933377] e1000e 0000:00:19.0: single idx 0 P=11d54040 D=21d800040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933380] e1000e 0000:00:19.0: single idx 0 P=11d54740 D=21d800740 
L=5f2 DMA_FROM_DEVICE
[ 2471.933382] e1000e 0000:00:19.0: single idx 4 P=11d5d040 D=21d809040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933384] e1000e 0000:00:19.0: single idx 4 P=11d5d880 D=21d809880 
L=5f2 DMA_FROM_DEVICE
[ 2471.933385] e1000e 0000:00:19.0: single idx 5 P=11d5f040 D=21d80b040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933387] e1000e 0000:00:19.0: single idx 5 P=11d5f740 D=21d80b740 
L=5f2 DMA_FROM_DEVICE
[ 2471.933388] e1000e 0000:00:19.0: single idx 8 P=11d64040 D=21d810040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933390] e1000e 0000:00:19.0: single idx 8 P=11d64740 D=21d810740 
L=5f2 DMA_FROM_DEVICE
[ 2471.933392] e1000e 0000:00:19.0: single idx 21 P=11d7e7c0 D=21d82a7c0 
L=5f2 DMA_FROM_DEVICE
[ 2471.933393] e1000e 0000:00:19.0: single idx 22 P=11d81900 D=21d82d900 
L=5f2 DMA_FROM_DEVICE
[ 2471.933395] e1000e 0000:00:19.0: single idx 23 P=11d82940 D=21d82e940 
L=5f2 DMA_FROM_DEVICE
[ 2471.933396] e1000e 0000:00:19.0: single idx 28 P=1258d040 D=21e039040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933398] e1000e 0000:00:19.0: single idx 33 P=11d96040 D=21d842040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933400] e1000e 0000:00:19.0: single idx 33 P=12596040 D=21e042040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933401] e1000e 0000:00:19.0: single idx 34 P=12599900 D=21e045900 
L=5f2 DMA_FROM_DEVICE
[ 2471.933403] e1000e 0000:00:19.0: single idx 36 P=11d9d040 D=21d849040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933404] e1000e 0000:00:19.0: single idx 36 P=11d9d880 D=21d849880 
L=5f2 DMA_FROM_DEVICE
[ 2471.933406] e1000e 0000:00:19.0: single idx 39 P=125a2040 D=21e04e040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933407] e1000e 0000:00:19.0: single idx 47 P=11db2040 D=21d85e040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933409] e1000e 0000:00:19.0: single idx 49 P=125b6040 D=21e062040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933410] e1000e 0000:00:19.0: single idx 49 P=125b6740 D=21e062740 
L=5f2 DMA_FROM_DEVICE
[ 2471.933412] e1000e 0000:00:19.0: single idx 50 P=125b8040 D=21e064040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933413] e1000e 0000:00:19.0: single idx 51 P=11dba2c0 D=21d8662c0 
L=5f2 DMA_FROM_DEVICE
[ 2471.933415] e1000e 0000:00:19.0: single idx 57 P=11dc7900 D=21d873900 
L=5f2 DMA_FROM_DEVICE
[ 2471.933417] snd_hda_intel 0000:00:1b.0: coherent idx 58 P=11dc8000 
D=21d874000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933419] e1000e 0000:00:19.0: single idx 59 P=11dca040 D=21d876040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933420] e1000e 0000:00:19.0: single idx 59 P=11dca740 D=21d876740 
L=5f2 DMA_FROM_DEVICE
[ 2471.933422] e1000e 0000:00:19.0: single idx 60 P=11dcc040 D=21d878040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933423] e1000e 0000:00:19.0: single idx 60 P=11dcc740 D=21d878740 
L=5f2 DMA_FROM_DEVICE
[ 2471.933425] e1000e 0000:00:19.0: single idx 60 P=11dcd040 D=21d879040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933426] e1000e 0000:00:19.0: single idx 61 P=11dce040 D=21d87a040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933428] e1000e 0000:00:19.0: single idx 61 P=11dce880 D=21d87a880 
L=5f2 DMA_FROM_DEVICE
[ 2471.933429] e1000e 0000:00:19.0: single idx 61 P=11dcf040 D=21d87b040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933431] e1000e 0000:00:19.0: single idx 61 P=11dcf740 D=21d87b740 
L=5f2 DMA_FROM_DEVICE
[ 2471.933432] e1000e 0000:00:19.0: single idx 63 P=125d3040 D=21e07f040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933434] e1000e 0000:00:19.0: single idx 63 P=125d3880 D=21e07f880 
L=5f2 DMA_FROM_DEVICE
[ 2471.933435] e1000e 0000:00:19.0: single idx 70 P=11de0040 D=21d88c040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933437] e1000e 0000:00:19.0: single idx 71 P=2e43d040 D=3208e040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933438] e1000e 0000:00:19.0: single idx 76 P=11dec900 D=21d898900 
L=5f2 DMA_FROM_DEVICE
[ 2471.933440] e1000e 0000:00:19.0: single idx 79 P=125f2240 D=21e09e240 
L=5f2 DMA_FROM_DEVICE
[ 2471.933442] e1000e 0000:00:19.0: single idx 85 P=125fe040 D=21e0aa040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933443] e1000e 0000:00:19.0: single idx 85 P=125fe740 D=21e0aa740 
L=5f2 DMA_FROM_DEVICE
[ 2471.933445] e1000e 0000:00:19.0: single idx 91 P=11e0a840 D=21d8b6840 
L=5f2 DMA_FROM_DEVICE
[ 2471.933446] e1000e 0000:00:19.0: single idx 91 P=11e0a040 D=21d8b6040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933448] e1000e 0000:00:19.0: single idx 94 P=12610040 D=21e0bc040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933449] e1000e 0000:00:19.0: single idx 94 P=12610740 D=21e0bc740 
L=5f2 DMA_FROM_DEVICE
[ 2471.933451] snd_hda_intel 0000:00:1b.0: coherent idx 102 P=11e21000 
D=21d8cd000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933453] e1000e 0000:00:19.0: single idx 104 P=12624040 
D=21e0d0040 L=5f2 DMA_FROM_DEVICE
[ 2471.933454] e1000e 0000:00:19.0: single idx 105 P=11e27040 
D=21d8d3040 L=5f2 DMA_FROM_DEVICE
[ 2471.933456] e1000e 0000:00:19.0: single idx 106 P=11e29040 
D=21d8d5040 L=5f2 DMA_FROM_DEVICE
[ 2471.933459] e1000e 0000:00:19.0: single idx 108 P=1262d900 
D=21e0d9900 L=5f2 DMA_FROM_DEVICE
[ 2471.933460] e1000e 0000:00:19.0: single idx 113 P=11e37880 
D=21d8e3880 L=5f2 DMA_FROM_DEVICE
[ 2471.933462] e1000e 0000:00:19.0: single idx 114 P=11e39040 
D=21d8e5040 L=5f2 DMA_FROM_DEVICE
[ 2471.933463] e1000e 0000:00:19.0: single idx 121 P=12647040 
D=21e0f3040 L=5f2 DMA_FROM_DEVICE
[ 2471.933465] e1000e 0000:00:19.0: single idx 121 P=12647740 
D=21e0f3740 L=5f2 DMA_FROM_DEVICE
[ 2471.933467] snd_hda_intel 0000:00:1b.0: coherent idx 126 P=11e51000 
D=21d8fd000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933468] e1000e 0000:00:19.0: single idx 126 P=11e50040 
D=21d8fc040 L=5f2 DMA_FROM_DEVICE
[ 2471.933470] e1000e 0000:00:19.0: single idx 127 P=12653040 
D=21e0ff040 L=5f2 DMA_FROM_DEVICE
[ 2471.933471] e1000e 0000:00:19.0: single idx 127 P=11e53840 
D=21d8ff840 L=5f2 DMA_FROM_DEVICE
[ 2471.933473] e1000e 0000:00:19.0: single idx 133 P=11e5f040 
D=21d90b040 L=5f2 DMA_FROM_DEVICE
[ 2471.933474] e1000e 0000:00:19.0: single idx 139 P=11e6b040 
D=21d917040 L=5f2 DMA_FROM_DEVICE
[ 2471.933476] e1000e 0000:00:19.0: single idx 139 P=11e6b880 
D=21d917880 L=5f2 DMA_FROM_DEVICE
[ 2471.933478] e1000e 0000:00:19.0: single idx 143 P=11e73040 
D=21d91f040 L=5f2 DMA_FROM_DEVICE
[ 2471.933479] e1000e 0000:00:19.0: single idx 145 P=11e76040 
D=21d922040 L=5f2 DMA_FROM_DEVICE
[ 2471.933480] e1000e 0000:00:19.0: single idx 146 P=11e78040 
D=21d924040 L=5f2 DMA_FROM_DEVICE
[ 2471.933482] e1000e 0000:00:19.0: single idx 147 P=11e7b900 
D=21d927900 L=5f2 DMA_FROM_DEVICE
[ 2471.933483] e1000e 0000:00:19.0: single idx 148 P=11e7c040 
D=21d928040 L=5f2 DMA_FROM_DEVICE
[ 2471.933485] e1000e 0000:00:19.0: single idx 148 P=2e5a2040 D=32129040 
L=5f2 DMA_FROM_DEVICE
[ 2471.933487] e1000e 0000:00:19.0: single idx 148 P=2e5a2740 D=32129740 
L=5f2 DMA_FROM_DEVICE
[ 2471.933488] e1000e 0000:00:19.0: single idx 154 P=12689040 
D=21e135040 L=5f2 DMA_FROM_DEVICE
[ 2471.933490] e1000e 0000:00:19.0: single idx 154 P=11e89040 
D=21d935040 L=5f2 DMA_FROM_DEVICE
[ 2471.933491] e1000e 0000:00:19.0: single idx 156 P=2e593180 D=32138180 
L=5f2 DMA_FROM_DEVICE
[ 2471.933493] e1000e 0000:00:19.0: single idx 161 P=11e97740 
D=21d943740 L=5f2 DMA_FROM_DEVICE
[ 2471.933494] e1000e 0000:00:19.0: single idx 170 P=126a8040 
D=21e154040 L=5f2 DMA_FROM_DEVICE
[ 2471.933496] snd_hda_intel 0000:00:1b.0: coherent idx 185 P=11ec7000 
D=21d973000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933498] e1000e 0000:00:19.0: single idx 190 P=126d1040 
D=21e17d040 L=5f2 DMA_FROM_DEVICE
[ 2471.933499] e1000e 0000:00:19.0: single idx 193 P=126d6040 
D=21e182040 L=5f2 DMA_FROM_DEVICE
[ 2471.933501] e1000e 0000:00:19.0: single idx 193 P=126d6740 
D=21e182740 L=5f2 DMA_FROM_DEVICE
[ 2471.933502] e1000e 0000:00:19.0: single idx 193 P=11ed7040 
D=21d983040 L=5f2 DMA_FROM_DEVICE
[ 2471.933504] e1000e 0000:00:19.0: single idx 193 P=11ed7880 
D=21d983880 L=5f2 DMA_FROM_DEVICE
[ 2471.933505] snd_hda_intel 0000:00:1b.0: coherent idx 195 P=11eda000 
D=21d986000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933507] e1000e 0000:00:19.0: single idx 196 P=126dd7c0 
D=21e1897c0 L=5f2 DMA_FROM_DEVICE
[ 2471.933508] e1000e 0000:00:19.0: single idx 197 P=11edf880 
D=21d98b880 L=5f2 DMA_FROM_DEVICE
[ 2471.933510] e1000e 0000:00:19.0: single idx 197 P=126de740 
D=21e18a740 L=5f2 DMA_FROM_DEVICE
[ 2471.933512] e1000e 0000:00:19.0: coherent idx 203 P=126ea000 
D=21e196000 L=2000 DMA_BIDIRECTIONAL
[ 2471.933513] e1000e 0000:00:19.0: single idx 206 P=126f0040 
D=21e19c040 L=5f2 DMA_FROM_DEVICE
[ 2471.933515] e1000e 0000:00:19.0: single idx 210 P=11ef8040 
D=21d9a4040 L=5f2 DMA_FROM_DEVICE
[ 2471.933516] e1000e 0000:00:19.0: single idx 211 P=11efb840 
D=21d9a7840 L=5f2 DMA_FROM_DEVICE
[ 2471.933518] e1000e 0000:00:19.0: single idx 211 P=11efb040 
D=21d9a7040 L=5f2 DMA_FROM_DEVICE
[ 2471.933519] e1000e 0000:00:19.0: single idx 213 P=11eff180 
D=21d9ab180 L=5f2 DMA_FROM_DEVICE
[ 2471.933521] e1000e 0000:00:19.0: single idx 215 P=11f03180 
D=21d9af180 L=5f2 DMA_FROM_DEVICE
[ 2471.933522] e1000e 0000:00:19.0: single idx 215 P=11f03880 
D=21d9af880 L=5f2 DMA_FROM_DEVICE
[ 2471.933524] e1000e 0000:00:19.0: single idx 215 P=12703040 
D=21e1af040 L=5f2 DMA_FROM_DEVICE
[ 2471.933525] e1000e 0000:00:19.0: single idx 215 P=12703740 
D=21e1af740 L=5f2 DMA_FROM_DEVICE
[ 2471.933527] e1000e 0000:00:19.0: single idx 222 P=12711040 
D=21e1bd040 L=5f2 DMA_FROM_DEVICE
[ 2471.933528] e1000e 0000:00:19.0: single idx 226 P=11f19040 
D=21d9c5040 L=5f2 DMA_FROM_DEVICE
[ 2471.933530] e1000e 0000:00:19.0: single idx 226 P=11f19880 
D=21d9c5880 L=5f2 DMA_FROM_DEVICE
[ 2471.933531] e1000e 0000:00:19.0: single idx 233 P=11f27040 
D=21d9d3040 L=5f2 DMA_FROM_DEVICE
[ 2471.933533] e1000e 0000:00:19.0: single idx 238 P=12731400 
D=21e1dd400 L=5f2 DMA_FROM_DEVICE
[ 2471.933535] ehci_hcd 0000:00:1a.0: single idx 240 P=12631f20 D=1e1800 
L=1 DMA_FROM_DEVICE
[ 2471.933536] e1000e 0000:00:19.0: single idx 245 P=1273e180 
D=21e1ea180 L=5f2 DMA_FROM_DEVICE
[ 2471.933538] e1000e 0000:00:19.0: single idx 246 P=11f41040 
D=21d9ed040 L=5f2 DMA_FROM_DEVICE
[ 2471.933539] e1000e 0000:00:19.0: single idx 247 P=12742040 
D=21e1ee040 L=5f2 DMA_FROM_DEVICE
[ 2471.933541] e1000e 0000:00:19.0: single idx 249 P=12746840 
D=21e1f2840 L=5f2 DMA_FROM_DEVICE
[ 2471.933542] e1000e 0000:00:19.0: single idx 258 P=12759040 
D=21e205040 L=5f2 DMA_FROM_DEVICE
[ 2471.933544] e1000e 0000:00:19.0: single idx 270 P=127712c0 
D=21e21d2c0 L=5f2 DMA_FROM_DEVICE
[ 2471.933546] e1000e 0000:00:19.0: single idx 271 P=12772040 
D=21e21e040 L=5f2 DMA_FROM_DEVICE
[ 2471.933547] e1000e 0000:00:19.0: single idx 271 P=12773180 
D=21e21f180 L=5f2 DMA_FROM_DEVICE
[ 2471.933549] e1000e 0000:00:19.0: single idx 273 P=12776040 
D=21e222040 L=5f2 DMA_FROM_DEVICE
[ 2471.933550] e1000e 0000:00:19.0: single idx 280 P=12784040 
D=21e230040 L=5f2 DMA_FROM_DEVICE
[ 2471.933552] e1000e 0000:00:19.0: single idx 280 P=12784880 
D=21e230880 L=5f2 DMA_FROM_DEVICE
[ 2471.933554] e1000e 0000:00:19.0: single idx 284 P=1278c900 
D=21e238900 L=5f2 DMA_FROM_DEVICE
[ 2471.933555] e1000e 0000:00:19.0: single idx 286 P=12790040 
D=21e23c040 L=5f2 DMA_FROM_DEVICE
[ 2471.933557] e1000e 0000:00:19.0: single idx 286 P=12790880 
D=21e23c880 L=5f2 DMA_FROM_DEVICE
[ 2471.933558] e1000e 0000:00:19.0: single idx 299 P=127aa040 
D=21e256040 L=5f2 DMA_FROM_DEVICE
[ 2471.933560] e1000e 0000:00:19.0: single idx 299 P=127ab040 
D=21e257040 L=5f2 DMA_FROM_DEVICE
[ 2471.933561] e1000e 0000:00:19.0: single idx 299 P=127ab740 
D=21e257740 L=5f2 DMA_FROM_DEVICE
[ 2471.933563] e1000e 0000:00:19.0: single idx 307 P=127ba040 
D=21e266040 L=5f2 DMA_FROM_DEVICE
[ 2471.933565] e1000e 0000:00:19.0: single idx 313 P=127c7840 
D=21e273840 L=5f2 DMA_FROM_DEVICE
[ 2471.933566] e1000e 0000:00:19.0: single idx 313 P=127c7040 
D=21e273040 L=5f2 DMA_FROM_DEVICE
[ 2471.933568] e1000e 0000:00:19.0: single idx 324 P=127dd040 
D=21e289040 L=5f2 DMA_FROM_DEVICE
[ 2471.933569] e1000e 0000:00:19.0: single idx 334 P=127f0180 
D=21e29c180 L=5f2 DMA_FROM_DEVICE
[ 2471.933571] e1000e 0000:00:19.0: single idx 334 P=127f0880 
D=21e29c880 L=5f2 DMA_FROM_DEVICE
[ 2471.933572] e1000e 0000:00:19.0: single idx 336 P=127f4840 
D=21e2a0840 L=5f2 DMA_FROM_DEVICE
[ 2471.933574] e1000e 0000:00:19.0: single idx 342 P=12000040 
D=21daac040 L=5f2 DMA_FROM_DEVICE
[ 2471.933576] e1000e 0000:00:19.0: single idx 342 P=12000740 
D=21daac740 L=5f2 DMA_FROM_DEVICE
[ 2471.933578] e1000e 0000:00:19.0: single idx 370 P=12039040 
D=21dae5040 L=5f2 DMA_FROM_DEVICE
[ 2471.933579] e1000e 0000:00:19.0: single idx 371 P=1203a040 
D=21dae6040 L=5f2 DMA_FROM_DEVICE
[ 2471.933581] e1000e 0000:00:19.0: single idx 371 P=1203a880 
D=21dae6880 L=5f2 DMA_FROM_DEVICE
[ 2471.933582] e1000e 0000:00:19.0: single idx 375 P=12043880 
D=21daef880 L=5f2 DMA_FROM_DEVICE
[ 2471.933584] e1000e 0000:00:19.0: single idx 386 P=12058180 
D=21db04180 L=5f2 DMA_FROM_DEVICE
[ 2471.933586] e1000e 0000:00:19.0: single idx 393 P=12067540 
D=21db13540 L=5f2 DMA_FROM_DEVICE
[ 2471.933587] e1000e 0000:00:19.0: single idx 395 P=1206a7c0 
D=21db167c0 L=5f2 DMA_FROM_DEVICE
[ 2471.933589] e1000e 0000:00:19.0: single idx 396 P=1206c880 
D=21db18880 L=5f2 DMA_FROM_DEVICE
[ 2471.933590] e1000e 0000:00:19.0: single idx 408 P=12084180 
D=21db30180 L=5f2 DMA_FROM_DEVICE
[ 2471.933592] e1000e 0000:00:19.0: single idx 431 P=118b3740 
D=21d35f740 L=5f2 DMA_FROM_DEVICE
[ 2471.933594] e1000e 0000:00:19.0: single idx 434 P=118b9900 
D=21d365900 L=5f2 DMA_FROM_DEVICE
[ 2471.933596] snd_hda_intel 0000:00:1b.0: coherent idx 436 P=120bc000 
D=21db68000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933597] e1000e 0000:00:19.0: single idx 436 P=118bd040 
D=21d369040 L=5f2 DMA_FROM_DEVICE
[ 2471.933599] e1000e 0000:00:19.0: single idx 458 P=120e8040 
D=21db94040 L=5f2 DMA_FROM_DEVICE
[ 2471.933600] e1000e 0000:00:19.0: single idx 458 P=120e8740 
D=21db94740 L=5f2 DMA_FROM_DEVICE
[ 2471.933602] e1000e 0000:00:19.0: single idx 459 P=120eb040 
D=21db97040 L=5f2 DMA_FROM_DEVICE
[ 2471.933603] e1000e 0000:00:19.0: single idx 459 P=120eb880 
D=21db97880 L=5f2 DMA_FROM_DEVICE
[ 2471.933605] snd_hda_intel 0000:00:1b.0: coherent idx 462 P=118f0000 
D=21d39c000 L=10000 DMA_BIDIRECTIONAL
[ 2471.933607] snd_hda_intel 0000:00:1b.0: coherent idx 470 P=11900000 
D=21d3ac000 L=10000 DMA_BIDIRECTIONAL
[ 2471.933608] e1000e 0000:00:19.0: single idx 470 P=12101040 
D=21dbad040 L=5f2 DMA_FROM_DEVICE
[ 2471.933610] e1000e 0000:00:19.0: single idx 470 P=12101880 
D=21dbad880 L=5f2 DMA_FROM_DEVICE
[ 2471.933612] snd_hda_intel 0000:00:1b.0: coherent idx 478 P=11910000 
D=21d3bc000 L=10000 DMA_BIDIRECTIONAL
[ 2471.933613] snd_hda_intel 0000:00:1b.0: coherent idx 486 P=11920000 
D=21d3cc000 L=10000 DMA_BIDIRECTIONAL
[ 2471.933615] snd_hda_intel 0000:00:1b.0: coherent idx 494 P=11930000 
D=21d3dc000 L=10000 DMA_BIDIRECTIONAL
[ 2471.933617] e1000e 0000:00:19.0: single idx 498 P=12139040 
D=21dbe5040 L=5f2 DMA_FROM_DEVICE
[ 2471.933618] e1000e 0000:00:19.0: single idx 502 P=11940040 
D=21d3ec040 L=5f2 DMA_FROM_DEVICE
[ 2471.933620] e1000e 0000:00:19.0: single idx 503 P=11942040 
D=21d3ee040 L=5f2 DMA_FROM_DEVICE
[ 2471.933621] e1000e 0000:00:19.0: single idx 503 P=11943740 
D=21d3ef740 L=5f2 DMA_FROM_DEVICE
[ 2471.933623] e1000e 0000:00:19.0: single idx 508 P=1214c040 
D=21dbf8040 L=5f2 DMA_FROM_DEVICE
[ 2471.933624] e1000e 0000:00:19.0: single idx 508 P=1214c940 
D=21dbf8940 L=5f2 DMA_FROM_DEVICE
[ 2471.933626] e1000e 0000:00:19.0: single idx 524 P=1196c840 
D=21d418840 L=5f2 DMA_FROM_DEVICE
[ 2471.933628] e1000e 0000:00:19.0: single idx 530 P=11978040 
D=21d424040 L=5f2 DMA_FROM_DEVICE
[ 2471.933629] e1000e 0000:00:19.0: single idx 536 P=11984040 
D=21d430040 L=5f2 DMA_FROM_DEVICE
[ 2471.933631] e1000e 0000:00:19.0: single idx 537 P=11986040 
D=21d432040 L=5f2 DMA_FROM_DEVICE
[ 2471.933632] e1000e 0000:00:19.0: single idx 540 P=1218c680 
D=21dc38680 L=5f2 DMA_FROM_DEVICE
[ 2471.933634] e1000e 0000:00:19.0: single idx 545 P=12196180 
D=21dc42180 L=5f2 DMA_FROM_DEVICE
[ 2471.933635] e1000e 0000:00:19.0: single idx 546 P=11998040 
D=21d444040 L=5f2 DMA_FROM_DEVICE
[ 2471.933637] e1000e 0000:00:19.0: single idx 548 P=1199d040 
D=21d449040 L=5f2 DMA_FROM_DEVICE
[ 2471.933639] e1000e 0000:00:19.0: single idx 554 P=119a8400 
D=21d454400 L=5f2 DMA_FROM_DEVICE
[ 2471.933640] e1000e 0000:00:19.0: single idx 557 P=119af040 
D=21d45b040 L=5f2 DMA_FROM_DEVICE
[ 2471.933642] e1000e 0000:00:19.0: single idx 565 P=121bf180 
D=21dc6b180 L=5f2 DMA_FROM_DEVICE
[ 2471.933643] e1000e 0000:00:19.0: single idx 579 P=119db240 
D=21d487240 L=5f2 DMA_FROM_DEVICE
[ 2471.933646] ahci 0000:00:1f.2: coherent idx 582 P=121e0000 
D=21dc8c000 L=16500 DMA_BIDIRECTIONAL
[ 2471.933648] ahci 0000:00:1f.2: coherent idx 598 P=12200000 
D=21dcac000 L=16500 DMA_BIDIRECTIONAL
[ 2471.933649] e1000e 0000:00:19.0: single idx 600 P=11a04040 
D=21d4b0040 L=5f2 DMA_FROM_DEVICE
[ 2471.933651] e1000e 0000:00:19.0: single idx 600 P=11a04880 
D=21d4b0880 L=5f2 DMA_FROM_DEVICE
[ 2471.933652] e1000e 0000:00:19.0: single idx 605 P=11a0e040 
D=21d4ba040 L=5f2 DMA_FROM_DEVICE
[ 2471.933654] e1000e 0000:00:19.0: single idx 609 P=11a17040 
D=21d4c3040 L=5f2 DMA_FROM_DEVICE
[ 2471.933655] e1000e 0000:00:19.0: single idx 609 P=11a17740 
D=21d4c3740 L=5f2 DMA_FROM_DEVICE
[ 2471.933657] ahci 0000:00:1f.2: coherent idx 614 P=12220000 
D=21dccc000 L=16500 DMA_BIDIRECTIONAL
[ 2471.933658] e1000e 0000:00:19.0: single idx 616 P=11a25040 
D=21d4d1040 L=5f2 DMA_FROM_DEVICE
[ 2471.933660] e1000e 0000:00:19.0: single idx 617 P=11a26040 
D=21d4d2040 L=5f2 DMA_FROM_DEVICE
[ 2471.933661] e1000e 0000:00:19.0: single idx 622 P=11a31740 
D=21d4dd740 L=5f2 DMA_FROM_DEVICE
[ 2471.933663] e1000e 0000:00:19.0: single idx 632 P=11a44180 
D=21d4f0180 L=5f2 DMA_FROM_DEVICE
[ 2471.933665] e1000e 0000:00:19.0: single idx 634 P=122492c0 
D=21dcf52c0 L=5f2 DMA_FROM_DEVICE
[ 2471.933666] e1000e 0000:00:19.0: single idx 636 P=11a4d040 
D=21d4f9040 L=5f2 DMA_FROM_DEVICE
[ 2471.933668] e1000e 0000:00:19.0: single idx 636 P=11a4d740 
D=21d4f9740 L=5f2 DMA_FROM_DEVICE
[ 2471.933669] e1000e 0000:00:19.0: single idx 645 P=11a5f400 
D=21d50b400 L=5f2 DMA_FROM_DEVICE
[ 2471.933671] e1000e 0000:00:19.0: single idx 647 P=12263040 
D=21dd0f040 L=5f2 DMA_FROM_DEVICE
[ 2471.933672] e1000e 0000:00:19.0: single idx 647 P=12263740 
D=21dd0f740 L=5f2 DMA_FROM_DEVICE
[ 2471.933674] e1000e 0000:00:19.0: single idx 648 P=12264900 
D=21dd10900 L=5f2 DMA_FROM_DEVICE
[ 2471.933675] e1000e 0000:00:19.0: single idx 651 P=11a6a040 
D=21d516040 L=5f2 DMA_FROM_DEVICE
[ 2471.933677] e1000e 0000:00:19.0: single idx 654 P=12270440 
D=21dd1c440 L=5f2 DMA_FROM_DEVICE
[ 2471.933679] e1000e 0000:00:19.0: single idx 663 P=11a83040 
D=21d52f040 L=5f2 DMA_FROM_DEVICE
[ 2471.933680] e1000e 0000:00:19.0: single idx 663 P=11a83740 
D=21d52f740 L=5f2 DMA_FROM_DEVICE
[ 2471.933682] snd_hda_intel 0000:00:1b.0: coherent idx 675 P=1229b000 
D=21dd47000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933683] e1000e 0000:00:19.0: single idx 677 P=11a9f040 
D=21d54b040 L=5f2 DMA_FROM_DEVICE
[ 2471.933685] e1000e 0000:00:19.0: single idx 677 P=11a9f740 
D=21d54b740 L=5f2 DMA_FROM_DEVICE
[ 2471.933686] e1000e 0000:00:19.0: single idx 678 P=11aa0040 
D=21d54c040 L=5f2 DMA_FROM_DEVICE
[ 2471.933688] e1000e 0000:00:19.0: single idx 678 P=11aa0740 
D=21d54c740 L=5f2 DMA_FROM_DEVICE
[ 2471.933690] e1000e 0000:00:19.0: single idx 683 P=122ab040 
D=21dd57040 L=5f2 DMA_FROM_DEVICE
[ 2471.933691] e1000e 0000:00:19.0: single idx 685 P=11aaf040 
D=21d55b040 L=5f2 DMA_FROM_DEVICE
[ 2471.933693] e1000e 0000:00:19.0: single idx 687 P=122b22c0 
D=21dd5e2c0 L=5f2 DMA_FROM_DEVICE
[ 2471.933694] e1000e 0000:00:19.0: single idx 688 P=11ab5840 
D=21d561840 L=5f2 DMA_FROM_DEVICE
[ 2471.933696] e1000e 0000:00:19.0: single idx 688 P=11ab5040 
D=21d561040 L=5f2 DMA_FROM_DEVICE
[ 2471.933697] e1000e 0000:00:19.0: single idx 688 P=11ab4040 
D=21d560040 L=5f2 DMA_FROM_DEVICE
[ 2471.933698] e1000e 0000:00:19.0: single idx 688 P=11ab4880 
D=21d560880 L=5f2 DMA_FROM_DEVICE
[ 2471.933700] e1000e 0000:00:19.0: single idx 690 P=11ab9040 
D=21d565040 L=5f2 DMA_FROM_DEVICE
[ 2471.933702] e1000e 0000:00:19.0: single idx 702 P=122d1840 
D=21dd7d840 L=5f2 DMA_FROM_DEVICE
[ 2471.933703] e1000e 0000:00:19.0: single idx 703 P=122d3040 
D=21dd7f040 L=5f2 DMA_FROM_DEVICE
[ 2471.933705] e1000e 0000:00:19.0: single idx 703 P=11ad3740 
D=21d57f740 L=5f2 DMA_FROM_DEVICE
[ 2471.933706] e1000e 0000:00:19.0: single idx 711 P=11ae3400 
D=21d58f400 L=5f2 DMA_FROM_DEVICE
[ 2471.933708] e1000e 0000:00:19.0: single idx 715 P=122ea040 
D=21dd96040 L=5f2 DMA_FROM_DEVICE
[ 2471.933709] e1000e 0000:00:19.0: single idx 716 P=11aed040 
D=21d599040 L=5f2 DMA_FROM_DEVICE
[ 2471.933711] e1000e 0000:00:19.0: single idx 719 P=122f2740 
D=21dd9e740 L=5f2 DMA_FROM_DEVICE
[ 2471.933712] e1000e 0000:00:19.0: single idx 722 P=122f9040 
D=21dda5040 L=5f2 DMA_FROM_DEVICE
[ 2471.933714] e1000e 0000:00:19.0: single idx 722 P=122f8040 
D=21dda4040 L=5f2 DMA_FROM_DEVICE
[ 2471.933715] e1000e 0000:00:19.0: single idx 722 P=122f8880 
D=21dda4880 L=5f2 DMA_FROM_DEVICE
[ 2471.933717] e1000e 0000:00:19.0: single idx 744 P=12324540 
D=21ddd0540 L=5f2 DMA_FROM_DEVICE
[ 2471.933719] e1000e 0000:00:19.0: single idx 747 P=1232a040 
D=21ddd6040 L=5f2 DMA_FROM_DEVICE
[ 2471.933720] e1000e 0000:00:19.0: single idx 747 P=1232a740 
D=21ddd6740 L=5f2 DMA_FROM_DEVICE
[ 2471.933722] ehci_hcd 0000:00:1d.0: coherent idx 752 P=1267e000 
D=325e1000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933724] ehci_hcd 0000:00:1d.0: coherent idx 752 P=125af000 
D=325e0000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933725] ehci_hcd 0000:00:1a.0: coherent idx 753 P=1266f000 
D=325e3000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933727] ehci_hcd 0000:00:1d.0: coherent idx 753 P=120a3000 
D=325e2000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933728] e1000e 0000:00:19.0: single idx 753 P=12336740 
D=21dde2740 L=5f2 DMA_FROM_DEVICE
[ 2471.933730] ehci_hcd 0000:00:1a.0: coherent idx 754 P=125ad000 
D=325e5000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933731] ehci_hcd 0000:00:1a.0: coherent idx 754 P=12097000 
D=325e4000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933733] e1000e 0000:00:19.0: single idx 755 P=1233b900 
D=21dde7900 L=5f2 DMA_FROM_DEVICE
[ 2471.933735] xhci_hcd 0000:00:14.0: coherent idx 756 P=126cd000 
D=365e9000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933736] xhci_hcd 0000:00:14.0: coherent idx 756 P=120c1000 
D=365e8000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933738] xhci_hcd 0000:00:14.0: coherent idx 757 P=12164000 
D=365eb000 L=80 DMA_BIDIRECTIONAL
[ 2471.933739] xhci_hcd 0000:00:14.0: coherent idx 757 P=1262e000 
D=365ea000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933741] xhci_hcd 0000:00:14.0: coherent idx 758 P=1266b000 
D=365ed000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933742] xhci_hcd 0000:00:14.0: coherent idx 758 P=12163000 
D=365ec000 L=10 DMA_BIDIRECTIONAL
[ 2471.933744] xhci_hcd 0000:00:14.0: coherent idx 759 P=12633000 
D=365ef000 L=808 DMA_BIDIRECTIONAL
[ 2471.933745] xhci_hcd 0000:00:14.0: coherent idx 759 P=12720000 
D=365ee000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933747] xhci_hcd 0000:00:14.0: coherent idx 761 P=1263e000 
D=365f3000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933749] xhci_hcd 0000:00:14.0: coherent idx 762 P=1268e000 
D=365f5000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933750] xhci_hcd 0000:00:14.0: coherent idx 762 P=120c2000 
D=365f4000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933752] xhci_hcd 0000:00:14.0: coherent idx 763 P=127d6000 
D=365f7000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933753] xhci_hcd 0000:00:14.0: coherent idx 763 P=127d7000 
D=365f6000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933755] xhci_hcd 0000:00:14.0: coherent idx 764 P=127d0000 
D=365f9000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933756] xhci_hcd 0000:00:14.0: coherent idx 764 P=12148000 
D=365f8000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933758] e1000e 0000:00:19.0: single idx 764 P=1234c400 
D=21ddf8400 L=5f2 DMA_FROM_DEVICE
[ 2471.933759] xhci_hcd 0000:00:14.0: coherent idx 765 P=12160000 
D=365fb000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933761] xhci_hcd 0000:00:14.0: coherent idx 765 P=120fe000 
D=365fa000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933762] xhci_hcd 0000:00:14.0: coherent idx 766 P=12162000 
D=365fd000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933764] xhci_hcd 0000:00:14.0: coherent idx 766 P=1217b000 
D=365fc000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933765] xhci_hcd 0000:00:14.0: coherent idx 767 P=125cb000 
D=365ff000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933767] xhci_hcd 0000:00:14.0: coherent idx 767 P=12748000 
D=365fe000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933769] e1000e 0000:00:19.0: single idx 783 P=12373400 
D=21de1f400 L=5f2 DMA_FROM_DEVICE
[ 2471.933770] e1000e 0000:00:19.0: single idx 793 P=12386840 
D=21de32840 L=5f2 DMA_FROM_DEVICE
[ 2471.933772] e1000e 0000:00:19.0: single idx 794 P=12388840 
D=21de34840 L=5f2 DMA_FROM_DEVICE
[ 2471.933773] e1000e 0000:00:19.0: single idx 794 P=12389740 
D=21de35740 L=5f2 DMA_FROM_DEVICE
[ 2471.933775] e1000e 0000:00:19.0: single idx 797 P=1238f040 
D=21de3b040 L=5f2 DMA_FROM_DEVICE
[ 2471.933776] e1000e 0000:00:19.0: single idx 797 P=1238f880 
D=21de3b880 L=5f2 DMA_FROM_DEVICE
[ 2471.933778] e1000e 0000:00:19.0: single idx 801 P=12397040 
D=21de43040 L=5f2 DMA_FROM_DEVICE
[ 2471.933779] e1000e 0000:00:19.0: single idx 801 P=12397880 
D=21de43880 L=5f2 DMA_FROM_DEVICE
[ 2471.933781] e1000e 0000:00:19.0: single idx 812 P=123ac040 
D=21de58040 L=5f2 DMA_FROM_DEVICE
[ 2471.933783] e1000e 0000:00:19.0: single idx 814 P=123b0040 
D=21de5c040 L=5f2 DMA_FROM_DEVICE
[ 2471.933784] snd_hda_intel 0000:00:1b.0: coherent idx 817 P=123b6000 
D=21de62000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933786] snd_hda_intel 0000:00:1b.0: coherent idx 821 P=123be000 
D=21de6a000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933787] e1000e 0000:00:19.0: single idx 823 P=123c2740 
D=21de6e740 L=5f2 DMA_FROM_DEVICE
[ 2471.933789] e1000e 0000:00:19.0: single idx 843 P=123ea500 
D=21de96500 L=5f2 DMA_FROM_DEVICE
[ 2471.933791] e1000e 0000:00:19.0: single idx 844 P=123ed900 
D=21de99900 L=5f2 DMA_FROM_DEVICE
[ 2471.933792] e1000e 0000:00:19.0: single idx 845 P=123ef740 
D=21de9b740 L=5f2 DMA_FROM_DEVICE
[ 2471.933794] e1000e 0000:00:19.0: single idx 847 P=123f3740 
D=21de9f740 L=5f2 DMA_FROM_DEVICE
[ 2471.933795] e1000e 0000:00:19.0: single idx 848 P=123f5040 
D=21dea1040 L=5f2 DMA_FROM_DEVICE
[ 2471.933797] e1000e 0000:00:19.0: single idx 848 P=123f5880 
D=21dea1880 L=5f2 DMA_FROM_DEVICE
[ 2471.933798] e1000e 0000:00:19.0: single idx 851 P=123fa7c0 
D=21dea67c0 L=5f2 DMA_FROM_DEVICE
[ 2471.933800] e1000e 0000:00:19.0: coherent idx 855 P=11c02000 
D=21d6ae000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933802] e1000e 0000:00:19.0: single idx 865 P=11c16040 
D=21d6c2040 L=5f2 DMA_FROM_DEVICE
[ 2471.933803] e1000e 0000:00:19.0: single idx 870 P=11c21540 
D=21d6cd540 L=5f2 DMA_FROM_DEVICE
[ 2471.933805] e1000e 0000:00:19.0: single idx 871 P=11c23840 
D=21d6cf840 L=5f2 DMA_FROM_DEVICE
[ 2471.933806] e1000e 0000:00:19.0: single idx 871 P=11c23040 
D=21d6cf040 L=5f2 DMA_FROM_DEVICE
[ 2471.933808] e1000e 0000:00:19.0: single idx 885 P=11c3e840 
D=21d6ea840 L=5f2 DMA_FROM_DEVICE
[ 2471.933809] e1000e 0000:00:19.0: single idx 885 P=11c3e040 
D=21d6ea040 L=5f2 DMA_FROM_DEVICE
[ 2471.933811] e1000e 0000:00:19.0: single idx 889 P=11c46180 
D=21d6f2180 L=5f2 DMA_FROM_DEVICE
[ 2471.933813] e1000e 0000:00:19.0: single idx 893 P=11c4e040 
D=21d6fa040 L=5f2 DMA_FROM_DEVICE
[ 2471.933814] e1000e 0000:00:19.0: single idx 897 P=11c56040 
D=21d702040 L=5f2 DMA_FROM_DEVICE
[ 2471.933816] e1000e 0000:00:19.0: single idx 902 P=12460040 
D=21df0c040 L=5f2 DMA_FROM_DEVICE
[ 2471.933817] e1000e 0000:00:19.0: single idx 902 P=12460740 
D=21df0c740 L=5f2 DMA_FROM_DEVICE
[ 2471.933819] e1000e 0000:00:19.0: single idx 910 P=11c71900 
D=21d71d900 L=5f2 DMA_FROM_DEVICE
[ 2471.933820] e1000e 0000:00:19.0: single idx 911 P=11c73180 
D=21d71f180 L=5f2 DMA_FROM_DEVICE
[ 2471.933822] e1000e 0000:00:19.0: single idx 916 P=11c7d7c0 
D=21d7297c0 L=5f2 DMA_FROM_DEVICE
[ 2471.933824] e1000e 0000:00:19.0: single idx 926 P=11c90040 
D=21d73c040 L=5f2 DMA_FROM_DEVICE
[ 2471.933825] e1000e 0000:00:19.0: single idx 931 P=11c9b040 
D=21d747040 L=5f2 DMA_FROM_DEVICE
[ 2471.933827] e1000e 0000:00:19.0: single idx 939 P=11caa040 
D=21d756040 L=5f2 DMA_FROM_DEVICE
[ 2471.933828] e1000e 0000:00:19.0: single idx 939 P=11caa740 
D=21d756740 L=5f2 DMA_FROM_DEVICE
[ 2471.933830] e1000e 0000:00:19.0: single idx 940 P=11cac400 
D=21d758400 L=5f2 DMA_FROM_DEVICE
[ 2471.933831] snd_hda_intel 0000:00:1b.0: coherent idx 941 P=11caf000 
D=21d75b000 L=1000 DMA_BIDIRECTIONAL
[ 2471.933833] e1000e 0000:00:19.0: single idx 953 P=11cc7040 
D=21d773040 L=5f2 DMA_FROM_DEVICE
[ 2471.933835] e1000e 0000:00:19.0: single idx 960 P=11cd5040 
D=21d781040 L=5f2 DMA_FROM_DEVICE
[ 2471.933836] e1000e 0000:00:19.0: single idx 960 P=11cd5880 
D=21d781880 L=5f2 DMA_FROM_DEVICE
[ 2471.933838] e1000e 0000:00:19.0: single idx 968 P=11ce5900 
D=21d791900 L=5f2 DMA_FROM_DEVICE
[ 2471.933839] e1000e 0000:00:19.0: single idx 972 P=11cec840 
D=21d798840 L=5f2 DMA_FROM_DEVICE
[ 2471.933841] e1000e 0000:00:19.0: single idx 972 P=11ced040 
D=21d799040 L=5f2 DMA_FROM_DEVICE
[ 2471.933843] e1000e 0000:00:19.0: single idx 978 P=11cf8040 
D=21d7a4040 L=5f2 DMA_FROM_DEVICE
[ 2471.933844] e1000e 0000:00:19.0: single idx 992 P=12514040 
D=21dfc0040 L=5f2 DMA_FROM_DEVICE
[ 2471.933846] e1000e 0000:00:19.0: single idx 992 P=12514880 
D=21dfc0880 L=5f2 DMA_FROM_DEVICE
[ 2471.933847] e1000e 0000:00:19.0: single idx 992 P=11d14880 
D=21d7c0880 L=5f2 DMA_FROM_DEVICE
[ 2471.933849] e1000e 0000:00:19.0: single idx 998 P=11d20040 
D=21d7cc040 L=5f2 DMA_FROM_DEVICE
[ 2471.933850] e1000e 0000:00:19.0: single idx 1003 P=11d2a040 
D=21d7d6040 L=5f2 DMA_FROM_DEVICE
[ 2471.933852] e1000e 0000:00:19.0: single idx 1008 P=12535040 
D=21dfe1040 L=5f2 DMA_FROM_DEVICE
[ 2471.933854] e1000e 0000:00:19.0: single idx 1009 P=12536040 
D=21dfe2040 L=5f2 DMA_FROM_DEVICE
[ 2471.933855] e1000e 0000:00:19.0: single idx 1009 P=12536880 
D=21dfe2880 L=5f2 DMA_FROM_DEVICE

Regards,

Stefano


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

* Re: [Xen-devel] [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent.
  2012-09-04 14:07     ` Stefano Panella
  2012-09-04 14:37       ` Konrad Rzeszutek Wilk
@ 2012-09-05 14:33       ` Konrad Rzeszutek Wilk
  1 sibling, 0 replies; 11+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-09-05 14:33 UTC (permalink / raw)
  To: Stefano Panella; +Cc: David Vrabel, linux-kernel, xen-devel

On Tue, Sep 04, 2012 at 03:07:42PM +0100, Stefano Panella wrote:
> On 08/31/2012 05:40 PM, Konrad Rzeszutek Wilk wrote:
> >On Fri, Aug 31, 2012 at 01:47:05PM +0100, David Vrabel wrote:
> >>On 31/08/12 10:57, Stefano Panella wrote:
> >>>When running 32-bit pvops-dom0 and a driver tries to allocate a coherent
> >>>DMA-memory the xen swiotlb-implementation returned memory beyond 4GB.
> >>>
> >>>This caused for example not working sound on a system with 4 GB and a 64-bit
> >>>compatible sound-card with sets the DMA-mask to 64bit.
> >>>
> >>>On bare-metal and the forward-ported xen-dom0 patches from OpenSuse a coherent
> >>>DMA-memory is always allocated inside the 32-bit address-range by calling
> >>>dma_alloc_coherent_mask.
> >>We should have the same behaviour under Xen as bare metal so:
> >>
> >>Acked-By: David Vrabel <david.vrabel@citrix.com>
> >>
> >>This does limit the DMA mask to 32-bits by passing it through an
> >>unsigned long, which seems a bit sneaky...
> >so is the issue that we are not casting it from 'u64' to 'u32'
> >(unsigned long) on 32-bit?
> 
> Yes. I do not completely understand why but I think on 32-bit kernel we need to cast dma_mask to u32. This is done automatically using dma_alloc_coherent_mask()

OK, patch applied. I altered the git commit description a bit and
changed the author to  Ronny Hegewald <ronny.hegewald@online.de>.

Also added it on stable@vger.kernel.org

Thanks for tracking this down.

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

end of thread, other threads:[~2012-09-05 14:43 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-31  9:57 [PATCH 1/1] XEN: Use correct masking in xen_swiotlb_alloc_coherent Stefano Panella
2012-08-31 12:47 ` [Xen-devel] " David Vrabel
2012-08-31 16:40   ` Konrad Rzeszutek Wilk
2012-09-04 14:07     ` Stefano Panella
2012-09-04 14:37       ` Konrad Rzeszutek Wilk
2012-09-04 14:55         ` David Vrabel
2012-09-04 15:12           ` Stefano Panella
2012-09-04 16:44             ` David Vrabel
2012-09-04 16:40               ` Konrad Rzeszutek Wilk
2012-09-05 13:13                 ` Stefano Panella
2012-09-05 14:33       ` Konrad Rzeszutek Wilk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).