Problème WaitQueue: wait_event et poll_wait qui n'attendent jamais.
Bonjour,
J'essaye de développer un driver, dont un des services offerts est un .poll.
Mon problème est que dans ma fonction driver_poll(.), mon poll_wait n'attend jamais bien qu'aucun wake_up(.).
Mon code est du genre*:
static DECLARE_WAIT_QUEUE_HEAD(MaWq)*;
static unsigned int driver_poll(struct file *filp, poll_table *attente)
{
int retour = 0;
poll_wait(filp, & MaWq , attente);
retour |= POLLIN | POLLRDNORM;
return retour;
}
J'ai donc essayé de remplacer l'appel à poll_wait(.) par wait_event_interruptible(MaWq , 1) et par wait_event(MaWq , 1) et toujours aucune attente bien qu'aucun wake_up(.).
J'ai même essayé de mètre wait_event_interruptible(MaWq , 1) et wait_event(MaWq , 1) sur la fonction appelée lors de l'insmod de mon driver et encore le même problème......
Je suis preneur de toute idée
Merci
Résolu sur http://forum.ubuntu-fr.org
Autant que je me souvienne, poll_wait a un nom trompeur et n'est pas censé attendre quoi que ce soit. La fonction se contente d'enregistrer l'appel à poll, avec la liste des descripteurs de fichiers sur lesquels on appelle poll.
Dans ton exemple, tu retournes toujours un masque "POLLIN | POLLRDNORM", soit "des données sont disponibles à la lecture", donc l'appel de poll n'est pas bloquant. Retourne donc un masque égal à 0, et ça devrait bloquer.
Cela fait longtemps que je n'ai plus écrit de driver supportant poll, mais j'avais gardé ceci sous le coude, au cas où ça puisse te servir :
http://tali.admingilde.org/dhwk/vorl...html#id2525652