In LDD3, sah ich solche CodesWarum müssen wir poll_wait in der Umfrage aufrufen?
static unsigned int scull_p_poll(struct file *filp, poll_table *wait)
{
struct scull_pipe *dev = filp->private_data;
unsigned int mask = 0;
/*
* The buffer is circular; it is considered full
* if "wp" is right behind "rp" and empty if the
* two are equal.
*/
down(&dev->sem);
poll_wait(filp, &dev->inq, wait);
poll_wait(filp, &dev->outq, wait);
if (dev->rp != dev->wp)
mask |= POLLIN | POLLRDNORM; /* readable */
if (spacefree(dev))
mask |= POLLOUT | POLLWRNORM; /* writable */
up(&dev->sem);
return mask;
}
Aber es sagt poll_wait nicht warten und wird sofort zurück. Warum müssen wir es dann nennen? Warum können wir nicht einfach die Maske zurückgeben?
Wenn dann funktioniert der Prozess Schlaf? – demonguy
@demonguy Siehe meine aktualisierte Antwort –
Sie meinen, Poll-Aufruf von User Space wird den Prozess blockieren, richtig? – demonguy