poll_schedule_timeout
poll() is a system call1 used to handle I/O.
It's similar to select().2
Applications that use non-blocking I/O use these calls to see if they
can read from or write to a file, withouth having to block it. They are
often used for input/output streams, which may not be blocked (otherwise,
perhaps your mouse would stop to move).
The waiting channel poll_schedule_timeout indicates that a task is
waiting for I/O, either hardware like keyboards and mice, sound devices
or even network sockets.
A function in the Kernel
They are defined in <linux/poll.h>. poll was an implementation first
seen in System V, select is the BSD UNIX equivalent.
futex_wait_queue_me:
To explain this, we have to look at Locks. A lock is a saved state in the
system that indicates that a task works with a resource. There can be, for
example, only one task that reads a file. This task would lock the file, any
other task1 that tries to read the file would know it's locked, and wait for
the lock to go away, before it can access it. The same thing happens for
processor time.
Modern version of Linux (on most architectures) use a Futex (fast userspace
mutex) lock in the kernel. Mutex, mutual exclusion, refers to the idea that
a common resource can only be accessed by one task at any time. For this, flags
in the system are set.
If a process is waiting for a locked resource, this is called Busy Waiting
or "Spinning", refering to the fact that it tries to access it over and over,
until it can. A task is said to be blocked when it spins.
Futex locks can be thought of as a number in userspace, that can be incremented
or decremented by a task (in cases where the resource can be accessed by
multiple tasks, this number can become greater than one). This is the number
shown in the diagram4.
These tasks enqueue themselves in the wait queue, a simple queue of tasks that need to do some work,
once processing time is available, the tasks do their work and are removed
from the queue.
futex_wait_queue_me enqueues a tasks. It then waits for a signal, a time
out or a wakeup. Task that are in this waiting channel are waiting not
on the wait queue, they are waiting to be enqueued.
A task can be either a Process3 or a Thread2
A Thread is a sub-section of a Process. Many threads can run parallel
A process is a full-blown program, it consists of one or more threads, though a program can consist of multiple processes as well.
Remember, this is still a very high level view of things, it's not considering the implementation details
__skb_recv_datagram
Wait for some data on a locked network socket.