1.. SPDX-License-Identifier: GPL-2.0 2 3========== 4Device DAX 5========== 6 7The device-dax interface uses the tail deduplication technique explained in 8Documentation/mm/vmemmap_dedup.rst 9 10On powerpc, vmemmap deduplication is only used with radix MMU translation. Also 11with a 64K page size, only the devdax namespace with 1G alignment uses vmemmap 12deduplication. 13 14With 2M PMD level mapping, we require 32 struct pages and a single 64K vmemmap 15page can contain 1024 struct pages (64K/sizeof(struct page)). Hence there is no 16vmemmap deduplication possible. 17 18With 1G PUD level mapping, we require 16384 struct pages and a single 64K 19vmemmap page can contain 1024 struct pages (64K/sizeof(struct page)). Hence we 20require 16 64K pages in vmemmap to map the struct page for 1G PUD level mapping. 21 22Here's how things look like on device-dax after the sections are populated:: 23 +-----------+ ---virt_to_page---> +-----------+ mapping to +-----------+ 24 | | | 0 | -------------> | 0 | 25 | | +-----------+ +-----------+ 26 | | | 1 | -------------> | 1 | 27 | | +-----------+ +-----------+ 28 | | | 2 | ----------------^ ^ ^ ^ ^ ^ 29 | | +-----------+ | | | | | 30 | | | 3 | ------------------+ | | | | 31 | | +-----------+ | | | | 32 | | | 4 | --------------------+ | | | 33 | PUD | +-----------+ | | | 34 | level | | . | ----------------------+ | | 35 | mapping | +-----------+ | | 36 | | | . | ------------------------+ | 37 | | +-----------+ | 38 | | | 15 | --------------------------+ 39 | | +-----------+ 40 | | 41 | | 42 | | 43 +-----------+ 44 45 46With 4K page size, 2M PMD level mapping requires 512 struct pages and a single 474K vmemmap page contains 64 struct pages(4K/sizeof(struct page)). Hence we 48require 8 4K pages in vmemmap to map the struct page for 2M pmd level mapping. 49 50Here's how things look like on device-dax after the sections are populated:: 51 52 +-----------+ ---virt_to_page---> +-----------+ mapping to +-----------+ 53 | | | 0 | -------------> | 0 | 54 | | +-----------+ +-----------+ 55 | | | 1 | -------------> | 1 | 56 | | +-----------+ +-----------+ 57 | | | 2 | ----------------^ ^ ^ ^ ^ ^ 58 | | +-----------+ | | | | | 59 | | | 3 | ------------------+ | | | | 60 | | +-----------+ | | | | 61 | | | 4 | --------------------+ | | | 62 | PMD | +-----------+ | | | 63 | level | | 5 | ----------------------+ | | 64 | mapping | +-----------+ | | 65 | | | 6 | ------------------------+ | 66 | | +-----------+ | 67 | | | 7 | --------------------------+ 68 | | +-----------+ 69 | | 70 | | 71 | | 72 +-----------+ 73 74With 1G PUD level mapping, we require 262144 struct pages and a single 4K 75vmemmap page can contain 64 struct pages (4K/sizeof(struct page)). Hence we 76require 4096 4K pages in vmemmap to map the struct pages for 1G PUD level 77mapping. 78 79Here's how things look like on device-dax after the sections are populated:: 80 81 +-----------+ ---virt_to_page---> +-----------+ mapping to +-----------+ 82 | | | 0 | -------------> | 0 | 83 | | +-----------+ +-----------+ 84 | | | 1 | -------------> | 1 | 85 | | +-----------+ +-----------+ 86 | | | 2 | ----------------^ ^ ^ ^ ^ ^ 87 | | +-----------+ | | | | | 88 | | | 3 | ------------------+ | | | | 89 | | +-----------+ | | | | 90 | | | 4 | --------------------+ | | | 91 | PUD | +-----------+ | | | 92 | level | | . | ----------------------+ | | 93 | mapping | +-----------+ | | 94 | | | . | ------------------------+ | 95 | | +-----------+ | 96 | | | 4095 | --------------------------+ 97 | | +-----------+ 98 | | 99 | | 100 | | 101 +-----------+ 102