*参照元 [#gb74720f] #backlinks *説明 [#a184dc05] -パス: [[linux-4.4.1/drivers/staging/android/ion/ion.c]] -FIXME: これは何? --説明 **引数 [#d6450449] -struct ion_buffer *buffer -- --[[linux-4.4.1/ion_buffer]] -struct device *dev -- --[[linux-4.4.1/device]] -enum dma_data_direction dir -- --[[linux-4.4.1/dma_data_direction]] **返り値 [#r3f61b50] -なし **参考 [#r58d859d] *実装 [#r35a223a] 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; - --[[linux-4.4.1/ion_vma_list]] --[[linux-4.4.1/PAGE_ALIGN()]] --[[linux-4.4.1/PAGE_SIZE]] pr_debug("%s: syncing for device %s\n", __func__, dev ? dev_name(dev) : "null"); - --[[linux-4.4.1/pr_debug()]] --[[linux-4.4.1/dev_name()]] if (!ion_buffer_fault_user_mappings(buffer)) return; - --[[linux-4.4.1/ion_buffer_fault_user_mappings()]] mutex_lock(&buffer->lock); for (i = 0; i < pages; i++) { - --[[linux-4.4.1/mutex_lock()]] 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); - --[[linux-4.4.1/page]] --[[linux-4.4.1/ion_buffer_page_is_dirty()]] --[[linux-4.4.1/ion_pages_sync_for_device()]] --[[linux-4.4.1/ion_buffer_page()]] ion_buffer_page_clean(buffer->pages + i); } - --[[linux-4.4.1/ion_buffer_page_clean()]] 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); - --[[linux-4.4.1/list_for_each_entry()]] --[[linux-4.4.1/vm_area_struct]] --[[linux-4.4.1/zap_page_range()]] --[[linux-4.4.1/mutex_unlock()]] } *コメント [#w2165950]