参照元

説明

引数

返り値

参考

実装

static void ion_buffer_sync_for_device(struct ion_buffer *buffer,
                                       struct device *dev,
                                       enum dma_data_direction dir)
{
        struct ion_vma_list *vma_list;
        int pages = PAGE_ALIGN(buffer->size) / PAGE_SIZE;
        int i;
        pr_debug("%s: syncing for device %s\n", __func__,
                 dev ? dev_name(dev) : "null");
        if (!ion_buffer_fault_user_mappings(buffer))
                return;
        mutex_lock(&buffer->lock);
        for (i = 0; i < pages; i++) {
                struct page *page = buffer->pages[i];

                if (ion_buffer_page_is_dirty(page))
                        ion_pages_sync_for_device(dev, ion_buffer_page(page),
                                                        PAGE_SIZE, dir);
                ion_buffer_page_clean(buffer->pages + i);
        }
        list_for_each_entry(vma_list, &buffer->vmas, list) {
                struct vm_area_struct *vma = vma_list->vma;

                zap_page_range(vma, vma->vm_start, vma->vm_end - vma->vm_start,
                               NULL);
        }
        mutex_unlock(&buffer->lock);
}

コメント


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-17 (木) 19:52:05