tag mp3tag mac kid3 files linux-kernel linux-device-driver dma

linux-kernel - mp3tag - tag editor wav files



Algunas preguntas sobre dma_alloc_coherent (1)

  1. No, la dirección devuelta es una dirección virtual, de lo contrario no podría acceder a ella desde el espacio del kernel. Es dma_handle que representa la dirección física, pero es opaco. Debe usar virt_to_phys en la dirección que devuelve y luego pasar esto a remap_pfn_range.

  2. No creo que lo haga (aunque es probable que dependa de la plataforma), pero sí asigna páginas. Si desea cantidades más pequeñas de memoria para DMA, debe usar dma_pool_create y luego asignar regiones desde allí.

  3. Puede usar dma_map_single en lugar de dma_map_page.

Recomendaría consultar DMA-API.txt para obtener más detalles sobre algunas de estas cosas.

  1. ¿La dirección DMA devuelta de esta llamada es la misma que la dirección física? LDD3 dice que la dirección DMA debe ser tratada como opaca por el controlador. Quiero mmap este búfer DMA para que el espacio de usuario pueda leer / escribir directamente en él. La pregunta es qué PFN debería especificar para remap_pfn_range (que para mi sorpresa ahora (kernel 3.4+) funciona para la memoria convencional igual que para la memoria de E / S). ¿Puedo simplemente convertir la dirección DMA a un largo sin firmar y convertirla a PFN? ¿No es esto una violación de lo que LDD3 dijo sobre la opacidad?

  2. ¿ dma_alloc_coherent siempre usa __get_free_pages internamente? ¿Significa esto que la región está potencialmente sobre asignada (ya que la primera función toma bytes pero la segunda función se asigna en unidades de páginas)?

  3. ¿Hay alguna manera de configurar un solo mapeo de transmisión para varias páginas consecutivas obtenidas de la llamada a __get_free_pages ? dma_map_page solo se aplica a páginas individuales.