Запустил DMA PCI-устройства. Принимаю данные в адресное пространство ядра (в драйвер). DMA буфер получаю так:
dma_buff = __get_dma_pages(GFP_KERNEL, PAGE_ORDER);
dma_buff_phys = __pa(dma_buff);
Контроллеру скармливаю dma_buff_phys, а данные потом читаю из dma_buff. Все нормально. Но хотелось бы, чтоб по DMA данные писались прямо в пространство пользовательского процесса. Как это можно сделать??? Вот родилась идея: в пользовательском процессе выделить буфер, его адрес (виртуальный) в драйвер, там получить физический и его в контроллер. Вот только вопрос как из виртуального физ. получить (вернее логический, физ. то я из логического получу __pa()) и со страницами, чтоб все нормально было???