J'écris un pilote/module PCIe pour un périphérique personnalisé. Comme l'appareil est enfichable à chaud, il peut disparaître à tout moment.Écrire un pilote PCIe hotplug personnalisé Linux 2.6.x
Voici comment je configurer la pci_driver Structure:
struct pci_driver my_pci_driver = {
.name = "my_pci_driver",
.id_table = ids,
.probe = "my_pci_driver_probe",
.remove = "my_pci_driver_remove"
};
Mais je ne sais pas comment gérer correctement l'événement supprimer. Lorsque la fonction .remove est appelée, j'ai plusieurs processus qui ont un handle ouvert avec le pilote et exécutant plusieurs ioctl.
Alors, quelle est la bonne façon de gérer la suppression d'un périphérique? Comment puis-je attendre en toute sécurité que l'exécution d'ioctl soit terminée et puis retirer correctement l'appareil de mon pilote?
C'est ce que j'ai fait mais je pense qu'il est géré par la couche USB du noyau, pas par le pilote. Ma première pensée était d'utiliser un compteur de référence sur mon objet géré dans ioctl(). Lorsque le compteur est égal à 0, il n'est pas utilisé par une poignée ouverte et je peux retirer le périphérique en toute sécurité. Mais je n'ai pas trouvé un moyen d'attendre correctement que le compteur de référence devienne 0 (une sorte de sémaphore inversé, quelque chose qui verrouille jusqu'à ce que sa valeur ne soit pas égale à 0). –