J'ai écrit un pilote de périphérique Linux pour un périphérique PCI. Cet appareil effectue des opérations DMA. Un problème survient lorsque le programme se bloque lorsqu'une opération DMA est en cours d'exécution.Un pilote de périphérique Linux peut-il attendre la fin d'un DMA dans la fonction device_remove()?
En effet, lors du plantage, la fonction device_remove()
est appelée par le système (comme si close()
avait été appelée). Cette fonction effectue le nettoyage sur les régions de mémoire utilisées par le périphérique PCI, libère correctement la mémoire allouée. Je veux dire que cela fonctionne correctement dans des circonstances normales. Mais si un DMA est en cours d'exécution, il ne pourra pas effectuer le nettoyage DMA parce qu'il n'a plus accès aux données de l'appareil qui ont été libérées. Une solution simple serait d'attendre dans la fonction close(). (Ceci est ma compréhension, mais peut-être la dernière partie de la fonction DMA est jamais exécutée?)
Est-ce une bonne idée de se lamenter pour le DMA de mettre fin à fait dans la fonction d'un dispositif device_remove()
(aka close()
) chauffeur? Existe-t-il d'autres moyens de régler ce problème?
Je sais que c'est très effronté, mais vous pouvez toujours dire non! Puis-je avoir une partie de votre code source pour ce pilote? D'intérêt partiel est la mise en place pour les transferts DMA ...?! PM moi, Cheers. –
Non. Malheureusement pour nous deux, c'est un pilote propriétaire. –