[PATCH] powerpc: Fix swiotlb ops for ppc64
Becky Bruce
beckyb at kernel.crashing.org
Tue Dec 13 14:55:54 EST 2011
On Dec 7, 2011, at 11:46 PM, Kumar Gala wrote:
>
> On Dec 7, 2011, at 9:23 PM, Benjamin Herrenschmidt wrote:
>
>> On Wed, 2011-12-07 at 11:19 -0600, Kumar Gala wrote:
>>
>>> struct dma_map_ops swiotlb_dma_ops = {
>>> +#ifdef CONFIG_PPC64
>>> + .alloc_coherent = swiotlb_alloc_coherent,
>>> + .free_coherent = swiotlb_free_coherent,
>>> +#else
>>> .alloc_coherent = dma_direct_alloc_coherent,
>>> .free_coherent = dma_direct_free_coherent,
>>> +#endif
>>> .map_sg = swiotlb_map_sg_attrs,
>>> .unmap_sg = swiotlb_unmap_sg_attrs,
>>> .dma_supported = swiotlb_dma_supported,
>>
>> Do we really need the ifdef ? What happens if we use
>> swiotlb_alloc_coherent() on ppc32 ? Won't it allocate lowmem, realize
>> that it doesn't need bouncing and be happy ?
>>
>> Cheers,
>> Ben.
>
> Becky any comment?
>
> I know its been a while, but wondering if you had any reason to not do what Ben's suggesting ?
Well, as you say, it's been a while, and but I think:
1) dma_direct_alloc_coherent strips GFP_HIGHMEM out of the flags field when calling the actual allocator and the iotlb version does not. I don't know how much this matters - I did a quick grep and I don't see any users that specify that, but somebody went through the trouble of putting it in there in the first place and without knowing why I wasn't willing to get rid of it. Now, since my patch it looks like someone added a VM_BUG_ON into __get_free_pages() if GFP_HIGHMEM so this would get caught. However, I don't know if we really want to throw a bug there.
2) The iotlb code doesn't deal with the !coherent parts like 8xx. We can work around that by setting up the dma_ops differently for that case instead.
-Becky
More information about the Linuxppc-dev
mailing list