*参照元 [#e0c9a76a] #backlinks *説明 [#n08af9e9] -パス: [[linux-4.4.1/arch/arm/mm/dma-mapping.c]] -FIXME: これは何? --説明 **引数 [#vd860836] -struct page *page -- --[[linux-4.4.1/page]] -size_t size -- **返り値 [#z45568ba] -なし **参考 [#xdc33dd8] *実装 [#ub46ed69] static void __dma_clear_buffer(struct page *page, size_t size) { /* * Ensure that the allocated pages are zeroed, and that any data * lurking in the kernel direct-mapped region is invalidated. */ if (PageHighMem(page)) { - --[[linux-4.4.1/PageHighMem()]] phys_addr_t base = __pfn_to_phys(page_to_pfn(page)); phys_addr_t end = base + size; - --[[linux-4.4.1/__pfn_to_phys()]] --[[linux-4.4.1/page_to_pfn()]] while (size > 0) { void *ptr = kmap_atomic(page); memset(ptr, 0, PAGE_SIZE); dmac_flush_range(ptr, ptr + PAGE_SIZE); kunmap_atomic(ptr); - --[[linux-4.4.1/kmap_atomic()]] --[[linux-4.4.1/memset()]] --[[linux-4.4.1/PAGE_SIZE]] --[[linux-4.4.1/dmac_flush_range()]] --[[linux-4.4.1/kunmap_atomic()]] page++; size -= PAGE_SIZE; } outer_flush_range(base, end); - --[[linux-4.4.1/outer_flush_range()]] } else { void *ptr = page_address(page); memset(ptr, 0, size); dmac_flush_range(ptr, ptr + size); outer_flush_range(__pa(ptr), __pa(ptr) + size); - --[[linux-4.4.1/page_address()]] } } *コメント [#p7c9dd4b]