Je connais l'astuce "magic ring buffer" qui implique la mise en miroir du tampon sous-jacent dans l'espace adresse du processus pour permettre à des blocs de données d'être mis en file d'attente avec un seul memcpy()
sans se soucier de l'encapsulation.Implémentation du "Magic Ring Buffer" dans l'espace noyau Linux?
Je voudrais accomplir la même chose mais dans un module de noyau Linux. Supposons que j'ai un tampon créé avec dma_alloc_coherent()
, son adresse virtuelle est V
et sa longueur est N
. Comment créer le mappage de manière à ce que ses adresses virtuelles [V+N,V+2N)
correspondent aux mêmes pages sous-jacentes que [V,V+N)
?
Remarque: il s'agit de Linux ARM 32 bits.
[kfifo.c] (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/libkfifo.c) et [kfifo.h] (https: //git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/kfifo.h) sont une version qui supporte les éléments de taille constante sans aucune aide MMU. Ils sont plus communs dans le noyau. –
Merci! Je pense que cela fonctionnera pour mon application, et je ne pense pas que le tampon en miroir sera nécessaire. –