|
@@ -1105,3 +1105,19 @@ void __init memblock_x86_fill(void)
|
|
|
memblock_analyze();
|
|
|
memblock_dump_all();
|
|
|
}
|
|
|
+
|
|
|
+void __init memblock_find_dma_reserve(void)
|
|
|
+{
|
|
|
+#ifdef CONFIG_X86_64
|
|
|
+ u64 free_size_pfn;
|
|
|
+ u64 mem_size_pfn;
|
|
|
+ /*
|
|
|
+ * need to find out used area below MAX_DMA_PFN
|
|
|
+ * need to use memblock to get free size in [0, MAX_DMA_PFN]
|
|
|
+ * at first, and assume boot_mem will not take below MAX_DMA_PFN
|
|
|
+ */
|
|
|
+ mem_size_pfn = memblock_x86_memory_in_range(0, MAX_DMA_PFN << PAGE_SHIFT) >> PAGE_SHIFT;
|
|
|
+ free_size_pfn = memblock_x86_free_memory_in_range(0, MAX_DMA_PFN << PAGE_SHIFT) >> PAGE_SHIFT;
|
|
|
+ set_dma_reserve(mem_size_pfn - free_size_pfn);
|
|
|
+#endif
|
|
|
+}
|