이광우
1.3. kmemleak ¶
1.4. mmap ¶
static struct cachepolicy cache_policies[] __initdata = {
{ .policy = "uncached", .cr_mask = CR_W|CR_C, .pmd = PMD_SECT_UNCACHED, .pte = 0, }, { .policy = "buffered", .cr_mask = CR_C, .pmd = PMD_SECT_BUFFERED, .pte = PTE_BUFFERABLE, }, { .policy = "writethrough", .cr_mask = 0, .pmd = PMD_SECT_WT, .pte = PTE_CACHEABLE, }, { .policy = "writeback", .cr_mask = 0, .pmd = PMD_SECT_WB, .pte = PTE_BUFFERABLE|PTE_CACHEABLE, }, { .policy = "writealloc", .cr_mask = 0, .pmd = PMD_SECT_WBWA, .pte = PTE_BUFFERABLE|PTE_CACHEABLE, } }; dma_alloc_coherent()와 dma_alloc_writecombine() 차이는 내부적으로 __dma_alloc()을 호출할 때 마지막 인자인 pgprot_t 타입의 prot에 넘기는 값이 다르다. dma_alloc_coherent()는 pgprot_noncached() 매크로를 사용하고, dma_alloc_writecombine()은 pgprot_writecombine() 매크로를 사용한다.
#define pgprot_noncached(prot) __pgprot(pgprot_val(prot) & ~(L_PTE_CACHEABLE | L_PTE_BUFFERABLE)) #define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~L_PTE_CACHEABLE) 즉, cache를 사용하지 않도록 설정하는 것은 같지만, 내부적으로 cache와 main memory 사이의 write buffer의 사용 여부를 결정하는 것으로 생각된다.
dma_mmap_coherent()와 dma_mmap_writecombine()도 같은 맥락으로 보인다.
dma_free_writecombine()은 다른 함수들과는 다르게 dma_free_coherent()로 매크로를 사용해 정의되어 있다.
7.1. Perl의 암호 같은 기본 변수 ¶
7.2. Pattern ¶
|
You will be awarded a medal for disregarding safety in saving someone. |