linux/arch/um/drivers
Jeff Dike 5d33e4d7fd uml: random driver fixes
The random driver would essentially hang if the host's /dev/random returned
-EAGAIN.  There was a test of need_resched followed by a schedule inside the
loop, but that didn't help and it's the wrong way to work anyway.

The right way is to ask for an interrupt when there is input available from
the host and handle it then rather than polling.

Now, when the host's /dev/random returns -EAGAIN, the driver asks for a wakeup
when there's randomness available again and sleeps.  The interrupt routine
just wakes up whatever processes are sleeping on host_read_wait.

There is an atomic_t, host_sleep_count, which counts the number of processes
waiting for randomness.  When this reaches zero, the interrupt is disabled.

An added complication is that async I/O notification was only recently added
to /dev/random (by me), so essentially all hosts will lack it.  So, we use the
sigio workaround here, which is to have a separate thread poll on the
descriptor and send an interrupt when there is input on it.  This mechanism is
activated when a process gets -EAGAIN (activating this multiple times is
harmless, if a bit wasteful) and deactivated by the last process still
waiting.

The module name was changed from "random" to "hw_random" in order for udev to
recognize it.

The sigio workaround needed some changes.  sigio_broken was added for cases
when we know that async notification doesn't work.  This is now called from
maybe_sigio_broken, which deals with pts devices.

Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-05-13 08:02:22 -07:00
..
chan_kern.c uml: remove a useless function 2008-04-28 08:58:28 -07:00
chan_user.c uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
cow_sys.h uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
cow_user.c uml: arch/um/drivers formatting 2007-10-16 09:43:09 -07:00
cow.h [PATCH] uml: avoid warnings for diffent names for an unsigned quadword 2006-04-11 06:18:37 -07:00
daemon_kern.c uml: network driver MTU cleanups 2007-10-16 09:43:08 -07:00
daemon_user.c uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
daemon.h uml: network formatting 2007-10-16 09:43:08 -07:00
fd.c uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
harddog_kern.c uml: fix nonremovability of watchdog 2007-10-16 09:43:04 -07:00
harddog_user.c uml: fix helper_wait calls in watchdog 2008-02-23 17:12:15 -08:00
hostaudio_kern.c uml: fix errno return 2008-05-13 08:02:21 -07:00
line.c uml: fix inconsistence due to tty_operation change 2008-05-08 10:46:55 -07:00
Makefile Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild 2007-10-16 11:23:06 -07:00
mcast_kern.c uml: make three functions static 2008-04-28 08:58:28 -07:00
mcast_user.c uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
mcast.h uml: network formatting 2007-10-16 09:43:08 -07:00
mconsole_kern.c Embed a struct path into struct nameidata instead of nd->{dentry,mnt} 2008-02-14 21:13:33 -08:00
mconsole_user.c uml: make three functions static 2008-04-28 08:58:28 -07:00
mmapper_kern.c uml: arch/um/drivers formatting 2007-10-16 09:43:09 -07:00
net_kern.c uml: make several things static 2008-04-28 08:58:28 -07:00
net_user.c uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
null.c spelling fixes: arch/um/ 2007-10-20 01:23:03 +02:00
pcap_kern.c uml: network driver MTU cleanups 2007-10-16 09:43:08 -07:00
pcap_user.c uml: network driver MTU cleanups 2007-10-16 09:43:08 -07:00
pcap_user.h [PATCH] missed const in prototype 2006-10-10 15:37:24 -07:00
port_kern.c uml: port mutex conversion 2008-02-05 09:44:32 -08:00
port_user.c uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
port.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pty.c uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
random.c uml: random driver fixes 2008-05-13 08:02:22 -07:00
slip_common.c [PATCH] uml: slirp and slip driver cleanups and fixes 2005-06-13 20:58:43 -07:00
slip_common.h [PATCH] uml: fix hugest stack users 2006-02-01 08:53:22 -08:00
slip_kern.c uml: make several things static 2008-04-28 08:58:28 -07:00
slip_user.c uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
slip.h [PATCH] uml: const more data 2006-09-27 08:26:15 -07:00
slirp_kern.c [UMP]: header_ops conversion needed for non-ethernet drivers 2007-10-17 19:35:04 -07:00
slirp_user.c uml: tidy helper code 2008-02-05 09:44:30 -08:00
slirp.h [PATCH] uml: const more data 2006-09-27 08:26:15 -07:00
ssl.c uml: tidy kern_util.h 2008-02-05 09:44:26 -08:00
ssl.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
stderr_console.c spelling fixes: arch/um/ 2007-10-20 01:23:03 +02:00
stdio_console.c uml: make several things static 2008-04-28 08:58:28 -07:00
stdio_console.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
tty.c uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
ubd_kern.c uml: use DIV_ROUND_UP 2008-05-13 08:02:22 -07:00
ubd_user.c uml: tidy kern_util.h 2008-02-05 09:44:26 -08:00
vde_kern.c uml: network driver MTU cleanups 2007-10-16 09:43:08 -07:00
vde_user.c uml: add missing space 2008-02-05 09:44:28 -08:00
vde.h uml: add VDE networking support 2007-10-16 09:43:05 -07:00
xterm_kern.c uml: xterm driver tidying 2007-07-16 09:05:38 -07:00
xterm.c uml: fix build when SLOB is enabled 2008-05-13 08:02:22 -07:00
xterm.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00