Announcement

Collapse
No announcement yet.

dma_alloc_coherent, parameter size

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • dma_alloc_coherent, parameter size

    hallo,

    ich sitze gerade an einem Treiber, der einen flyby dma benutzt um Daten
    zu transferieren. Im Treiber wird dazu ein DMA Puffer mit dma_alloc_coherent angelegt. Nachdem was ich über diese Funktion gelesen habe, wird der Funktion unter anderem die Größe des Puffers übergeben.

    In dma-mapping.h ist die Funktion so deklariert
    extern void* dma_alloc_coherent(struct device*, size_t, dma_addr_t*, gfp_t);

    Dort ist auch zu lesen, dass die Funktion Pages alloziert. Nun ist meien Frage, ob ich als size die angeforderte Speichergröße in Bytes angeben soll oder die Anzahl der Pages die ich benötige. In einem anderen Beispiel dazu wurde die Größe in Bytes angegeben, wobei die angegebene Puffergröße im Beispiel aber kleiner als 4096Bytes beträgt, also kleiner als eine Page.

    Wenn ich z.B. 5MByte als DMA-Puffer im Kernel benötige, soll ich dann als size
    5242880 eintragen oder 1280 ? Denn die 5MB würden 1280 Pages a 4096 Bytes entsprechen.

    In dem Treiber der mir hier vorliegt, wird für den DMA Transfer für einen Kamerasensor zuerst die benötigte Page-größe ausgerechnet.

    pages = (maxwidht * maxheight * 3) / PAGE_SIZE

    dma_alloc_coherent wird dann wie folgt aufgerufen
    dma_alloc_coherent(NULL, (pages +1 ) * sizeof(struct dma_desc), &dma_handle, GFP_KERNEL);

    Warum wird für dne Parameter size nicht die benötigte Größe in Bytes angegeben, nämlich maxwidth * maxheight * 3, sondern (pages +1 ) * sizeof(struct dma_desc) ?

    Ich freue mich, wenn mich dahingehend jemand aufklären kann. Beim googlen bin ich bisher auch immer nur auf den kurzen kommentar gestoßen "size of requested dma buffer"

    Grüße,
    PonchoBob
Working...
X