diff options
author | Paul Mundt <lethal@linux-sh.org> | 2011-03-31 15:39:47 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2011-03-31 15:39:47 +0900 |
commit | 7ea5db8efeac8627500e012aa6829ca612c5a700 (patch) | |
tree | 90e4de22f60b989dcf0f0d7436978c0b463d5827 /arch/powerpc/mm/dma-noncoherent.c | |
parent | eee7631fdf8ae63c4f24daf66981ac1a7b55d7fd (diff) | |
parent | 6aba74f2791287ec407e0f92487a725a25908067 (diff) | |
download | kernel_samsung_smdk4412-7ea5db8efeac8627500e012aa6829ca612c5a700.zip kernel_samsung_smdk4412-7ea5db8efeac8627500e012aa6829ca612c5a700.tar.gz kernel_samsung_smdk4412-7ea5db8efeac8627500e012aa6829ca612c5a700.tar.bz2 |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into sh-latest
Diffstat (limited to 'arch/powerpc/mm/dma-noncoherent.c')
-rw-r--r-- | arch/powerpc/mm/dma-noncoherent.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/powerpc/mm/dma-noncoherent.c b/arch/powerpc/mm/dma-noncoherent.c index 757c0be..b42f76c 100644 --- a/arch/powerpc/mm/dma-noncoherent.c +++ b/arch/powerpc/mm/dma-noncoherent.c @@ -399,3 +399,23 @@ void __dma_sync_page(struct page *page, unsigned long offset, #endif } EXPORT_SYMBOL(__dma_sync_page); + +/* + * Return the PFN for a given cpu virtual address returned by + * __dma_alloc_coherent. This is used by dma_mmap_coherent() + */ +unsigned long __dma_get_coherent_pfn(unsigned long cpu_addr) +{ + /* This should always be populated, so we don't test every + * level. If that fails, we'll have a nice crash which + * will be as good as a BUG_ON() + */ + pgd_t *pgd = pgd_offset_k(cpu_addr); + pud_t *pud = pud_offset(pgd, cpu_addr); + pmd_t *pmd = pmd_offset(pud, cpu_addr); + pte_t *ptep = pte_offset_kernel(pmd, cpu_addr); + + if (pte_none(*ptep) || !pte_present(*ptep)) + return 0; + return pte_pfn(*ptep); +} |