|
@@ -223,6 +223,8 @@ __dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp)
|
|
pte_t *pte = consistent_pte + CONSISTENT_OFFSET(vaddr);
|
|
pte_t *pte = consistent_pte + CONSISTENT_OFFSET(vaddr);
|
|
struct page *end = page + (1 << order);
|
|
struct page *end = page + (1 << order);
|
|
|
|
|
|
|
|
+ split_page(page, order);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Set the "dma handle"
|
|
* Set the "dma handle"
|
|
*/
|
|
*/
|
|
@@ -231,7 +233,6 @@ __dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp)
|
|
do {
|
|
do {
|
|
BUG_ON(!pte_none(*pte));
|
|
BUG_ON(!pte_none(*pte));
|
|
|
|
|
|
- set_page_count(page, 1);
|
|
|
|
SetPageReserved(page);
|
|
SetPageReserved(page);
|
|
set_pte_at(&init_mm, vaddr,
|
|
set_pte_at(&init_mm, vaddr,
|
|
pte, mk_pte(page, pgprot_noncached(PAGE_KERNEL)));
|
|
pte, mk_pte(page, pgprot_noncached(PAGE_KERNEL)));
|
|
@@ -244,7 +245,6 @@ __dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp)
|
|
* Free the otherwise unused pages.
|
|
* Free the otherwise unused pages.
|
|
*/
|
|
*/
|
|
while (page < end) {
|
|
while (page < end) {
|
|
- set_page_count(page, 1);
|
|
|
|
__free_page(page);
|
|
__free_page(page);
|
|
page++;
|
|
page++;
|
|
}
|
|
}
|