реклама на сайте
подробности

 
 
> Выделение памяти
doom13
сообщение Dec 29 2016, 10:38
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую.
Необходимо выделить под буферы DMA 32 МБ памяти (128 буферов, память выделяется функцией dma_zalloc_coherent с флагом GFP_KERNEL), система отдаёт около 16 МБ, далее dma_zalloc_coherent возвращает нулевой указатель.
Содержимое /proc/meminfo:
Код
MemTotal:        1032496 kB
MemFree:         1018988 kB
MemAvailable:    1016792 kB
Buffers:             932 kB
Cached:             3648 kB
SwapCached:            0 kB
Active:             4380 kB
Inactive:            888 kB
Active(anon):        700 kB
Inactive(anon):       24 kB
Active(file):       3680 kB
Inactive(file):      864 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:        270336 kB
HighFree:         268172 kB
LowTotal:         762160 kB
LowFree:          750816 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:           776 kB
Mapped:             2468 kB
Shmem:                36 kB
Slab:               3740 kB
SReclaimable:       1184 kB
SUnreclaim:         2556 kB
KernelStack:         400 kB
PageTables:           92 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      516248 kB
Committed_AS:       2088 kB
VmallocTotal:     245760 kB
VmallocUsed:        3544 kB
VmallocChunk:     143740 kB
CmaTotal:          16384 kB
CmaFree:           16112 kB

после старта драйвера:
Код
CmaTotal:          16384 kB
CmaFree:             104 kB

Возможно ли увеличить размер CmaTotal?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
krux
сообщение Jan 3 2017, 14:36
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



тема выделения непрерывного участка памяти уже много лет в разных разделах этого форума обсуждалась с примерно одинаковым результатом.
Общая концепция которого примерно следующая:
Не спешите делать драйвер под одну ОС, просто ради "ура, заработало!".

Вам придется выяснить, какие требования налагают разные ОС на выделение памяти для передачи данных из "железа" в пространство памяти ОС и обратно.
И только после этого проектировать обмен.

Итого, может оказаться, что scatter-gather dma with lots of 16k linear alloc()-ed pages is better solution for your application with underlying HW acquisition system responding positively to this method as well.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 4 2017, 07:04
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(krux @ Jan 3 2017, 17:36) *
тема выделения непрерывного участка памяти уже много лет в разных разделах этого форума обсуждалась с примерно одинаковым результатом.
Общая концепция которого примерно следующая:
Не спешите делать драйвер под одну ОС, просто ради "ура, заработало!".

Вам придется выяснить, какие требования налагают разные ОС на выделение памяти для передачи данных из "железа" в пространство памяти ОС и обратно.
И только после этого проектировать обмен.

Итого, может оказаться, что scatter-gather dma with lots of 16k linear alloc()-ed pages is better solution for your application with underlying HW acquisition system responding positively to this method as well.

Вы не правильно поняли вопрос, необходимо выделить для SgDMA два буфера. Каждый буфер из 128 дескрипторов по 128 кБ.
Память уже выделяется, при конфигурации ядра с опциями предложенными выше, но... (см. предыдущий пост)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01345 секунд с 7
ELECTRONIX ©2004-2016