Savoir où les structures sont remplies

J’essaie actuellement d’écrire un pilote Linux et pour cela, il est nécessaire que je comprenne quelques apis pour en tirer le meilleur parti. Souvent, je rencontre un motif dans lequel je commence à creuser une fonction et je me retrouve à un point où la fonction se lit comme suit:

returnType OperationX(args...) { ... struct operations_t operations = get_operations(); if(operations->X) return operations->X(args...) } 

En gros, get_operations () renvoie un pointeur sur une structure globale, qui contient un pointeur sur la fonction exécutant l’opération.

Je trouve très fastidieux d’utiliser la référence croisée Linux pour creuser dans les différents lieux et ensuite réellement comprendre quelle affectation a effectivement lieu. Y a-t-il un meilleur moyen plus rapide?

Un exemple serait DMA mapping .

git grep et cscope sont vos meilleurs amis.

En passant, les opérations DMA sont remplies soit par le code de la plate-forme, soit dans les implémentations IOMMU. Je parie que vous avez probablement lib / swiotlb.c utilisé pour cela.