LINUX.ORG.RU

PCI - выделение DMA памяти


0

2

Возникла следующая проблема. PCI устройство функционирует в нескольких режимах. В одном из режимов, драйверу для работы с устройством необходим DMA буфер размером 8Мб. Для выделения буфера использую pci_alloc_consistent (целевое ядро 2.6.32, x86_64). Максимальный объём непрерывной физической памяти, который получается выделить подобным путём - 4Мб (ни страницей больше!!!). Копаясь в исходиках ядра, удалось найти константу, которая задаёт макс. размер памяти, который возможно выделить подобным путём - MAX_ORDER: http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.6.32#L24

#define MAX_ORDER 11

Это означает что можно выделить до 8Мб (PAGE_SIZE == 4096 == 2^12 -> 2^12 * 2^11 == 2^23 == 8Mb).

Собственно вопрос - почему 4Мб это максимальный объём DMA памяти, который я могу выделить для PCI устройства?

Есть 3 варианта:

1. Изменить MAX_ORDER на 12 (побывал, работает). Но известно как повлияет на стабильность ядра.

2. Ждать какой-то патч (CMA не в mainline kernel tree, не известно когда там будет)

3. Переходить на Scatter - Gather (правильный путь)

sovereign
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.