WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] pvops dom0: no sound after boot; possibly caused by swio

To: <konrad.wilk@xxxxxxxxxx>
Subject: Re: [Xen-devel] pvops dom0: no sound after boot; possibly caused by swiotlb
From: Ronny.Hegewald@xxxxxxxxx
Date: Wed, 03 Feb 2010 01:24:25 +0100
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Tue, 02 Feb 2010 16:24:50 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
>> BTW, what is the name of the driver in the source code? 

Its the driver under sound/pci/hda. In hda_intel.c are all the important calls 
for DMA and where the coherent_dma_mask is set.

>What is your sound-driver detecting the card as? As 64-bit or 32-bit or
>none of those?

As 64-bit.

>On pvops we can get away from calling dma_alloc_coherent b/c we have
>this piece of logic to determine where the driver can DMA from:
>
>604         if (hwdev != NULL && hwdev->coherent_dma_mask)
>605                 mask = hwdev->coherent_dma_mask;
>606         else
>607                 mask = DMA_BIT_MASK(32);

...

>So the 'xen_swiotlb_alloc_coherent' checks if you have the coherent DMA
>mask and if not, assumes you have a driver that can only access up to
>4GB. While the bare-metal assumes that if the driver doesn't have that
>mask , it checks the gfp_t flag and if it has __GFP_DMA make the mask
>24-bit, otherwise 32-bit.

But thats not quite all whats dma_alloc_coherent does. As it only returns a 
32-bit variable all coherent_dma_mask over 32-bit get casted down. This way 
bare-metal makes sure that the dma-mask is never over 32-bit.

Or are you are saying that when the hardware supports 64 bit and has set the 
coherent_dma_mask accordingly and dom0 is 32-bit that the allocation of DMA 
after the 4 GB should work fine? Because thats the assumption i see in the 
pvops-code.

And from what i understood so far the DMA memory should be allocated preferably 
in the 24-bit address space or max. 32 bit address space, at least in a 32-bit 
kernel. 

>The only difference here is that under pvops we behave badly with
>devices that have GFP_DMA set and don't have the coherent_dma_mask
>(which it does not seem to be the case?).

As i understand it the opposite is the case. If coherent_dma_mask is not set 
xen_swiotlb_alloc_coherent sets it to 32-bit. That should work usually (except 
the device needs the dma-memory in the 24-bit space). 

The problem-case is that the coherent_dma_mask is set. So pvops-dom0 just uses 
this value, when bare-metal makes sure that it cant be over 32bit by calling 
dma_alloc_coherent_mask. 

>So is your sound-driver not detecting the card properly and not setting
>the coherent_dma_mask and/or dma_mask?

>From what i have seen the driver works correct. It checks a register of the 
>soundcard if it supports 64 bit and sets the coherent_dma_mask to 64bit, else 
>to 32bit. 

As my soundcard says that it supports the 64bit the mask is set accordingly.

I added debug-messages in the code to be sure about that, when i researched the 
issue.

>Can you print out both of those entries when the sound driver
>calls the 'xen_swiotlb_alloc_coherent' (without setting the flags to 32 
>forcefully?)

The value of the coherent_dma_mask in xen_swiotlb_alloc_coherent was 
0xFFFFFFFFFFFFFFFF when i didnt set 32bit forcefully. 

Until now i only checked the coherent_dma_mask flag because as i understand it, 
thats the value that is used when coherent dma memory is requested. And i never 
saw dma_mask used. 

But i can send the values of dma_mask tomorrow if they are useful in that case.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>