2015-12-18 8 views
5

Ich habe eine Situation, in der ich dma_unmap_single nach dma_sync_single_for_cpu anrufen muss. Unten ist mein Szenario.Kann ich dma_unmap_single nach dma_sync_single_for_cpu aufrufen?

  1. Weisen Speicher für einen Puffer kmalloc()
  2. den Puffer Vorrichtungskarte dma_map_single mit DMA_FROM_DEVICE Richtung verwendet wird.
  3. Nach Erhalt des Pakets, erhalten Puffer-Besitz unter Verwendung dma_sync_single_for_cpu.
  4. Nach einiger Zeit, wenn eine andere Funktion im Kernel mit dem gleichen Puffer verwendet, Unmap-Puffer von Gerät mit dma_unmap_single mit Richtung.

Sind alle oben genannten Schritte akzeptabel?

+0

DMA Map-API ist über Adressraum, es kann auch eine Nebenwirkung als Bounce-Puffer haben, wenn IOMMU verwendet wird. Die von Ihnen beschriebenen Schritte sind in Ordnung, solange Sie hinsichtlich des Zugriffs auf diesen Puffer alles serialisiert haben. – 0andriy

Antwort

1

Der Puffer "Eigentum" (CPU oder Gerät) ist nur wichtig für die Entscheidung, wer auf den Inhalt des Puffers zugreifen darf.

dma_unmap_single() kümmert sich nicht um den Inhalt; es kann in jedem Zustand aufgerufen werden.

Bitte beachten Sie, dass der Speicher nach dem DMA-Unmapping wieder zur CPU "gehört". Wenn Sie nur eine einzelne DMA-Übertragung durchführen, müssen Sie nicht anrufen dma_sync_single_for_cpu(); Sie können nur den Puffer nach dem dma_unmap_single() Anruf lesen.

Verwandte Themen