linux/include/asm-um
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
..
a.out-core.h aout: suppress A.OUT library support if !CONFIG_ARCH_SUPPORTS_AOUT 2008-02-08 09:22:30 -08:00
a.out.h aout: move STACK_TOP[_MAX] to asm/processor.h 2008-02-08 09:22:29 -08:00
alternative-asm.h x86: rename .i assembler includes to .h 2007-10-17 20:16:29 +02:00
alternative.h
apic.h
archparam-i386.h
archparam-ppc.h [PATCH] uml: remove some leftover PPC code 2006-10-20 10:26:36 -07:00
archparam-x86_64.h
asm.h uml: add asm-um/asm.h 2008-01-30 13:31:17 +01:00
atomic.h
auxvec.h
bitops.h forbid asm/bitops.h direct inclusion 2007-10-19 11:53:41 -07:00
boot.h
bug.h uml: use generic BUG 2007-06-24 08:59:11 -07:00
bugs.h
byteorder.h
cache.h Don't include linux/config.h from anywhere else in include/ 2006-04-26 12:56:16 +01:00
cacheflush.h
calling.h
checksum.h
cmpxchg.h x86: create asm/cmpxchg.h 2007-05-08 11:15:20 -07:00
cobalt.h
common.lds.S uml: fix linker script alignment bugs 2007-08-31 01:42:22 -07:00
cpufeature.h
cputime.h
current.h uml: current.h cleanup 2008-02-05 09:44:28 -08:00
delay.h [PATCH] uml: fix unreasonably long udelay 2007-04-02 10:06:08 -07:00
desc.h [PATCH] uml: implement {get,set}_thread_area for i386 2006-03-31 12:18:52 -08:00
device.h Driver core: add dev_archdata to struct device 2006-12-01 14:52:01 -08:00
div64.h rename div64_64 to div64_u64 2008-05-01 08:03:58 -07:00
dma-mapping.h [PATCH] Pass struct dev pointer to dma_cache_sync() 2006-12-07 08:39:41 -08:00
dma.h
dwarf2.h
elf-i386.h uml: style cleanup 2008-02-05 09:44:28 -08:00
elf-ppc.h [PATCH] uml: fix apparent "CONFIG_64_BIT" typo. 2007-02-11 10:51:23 -08:00
elf-x86_64.h uml: header untangling 2008-02-05 09:44:28 -08:00
emergency-restart.h
errno.h
fcntl.h
fixmap.h uml: runtime host VMSPLIT detection 2008-02-08 09:22:42 -08:00
floppy.h
frame.h x86: rename .i assembler includes to .h 2007-10-17 20:16:29 +02:00
futex.h
hardirq.h Don't include linux/config.h from anywhere else in include/ 2006-04-26 12:56:16 +01:00
highmem.h
host_ldt-i386.h [PATCH] uml: split ldt.h in arch-independent and arch-dependant code 2006-03-31 12:18:51 -08:00
host_ldt-x86_64.h [PATCH] uml: split ldt.h in arch-independent and arch-dependant code 2006-03-31 12:18:51 -08:00
hw_irq.h [PATCH] genirq: add ->retrigger() irq op to consolidate hw_irq_resend() 2006-06-29 10:26:23 -07:00
ide.h
io.h [PATCH] uml: add __raw_writeq definition 2006-06-30 11:25:38 -07:00
ioctl.h
ioctls.h
ipcbuf.h
irq.h uml: random driver fixes 2008-05-13 08:02:22 -07:00
irq_regs.h [PATCH] um: irq changes break build 2006-10-06 08:53:42 -07:00
irq_vectors.h
irqflags.h [PATCH] uml: add asm/irqflags.h 2006-06-05 12:29:17 -07:00
kdebug.h move die notifier handling to common code 2007-05-08 11:15:04 -07:00
kmap_types.h [PATCH] uml: make copy_*_user atomic 2006-07-01 09:56:03 -07:00
kvm.h kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
ldt.h uml: LDT mutex conversion 2008-02-05 09:44:31 -08:00
linkage.h uml: get rid of asmlinkage 2008-02-05 09:44:25 -08:00
local.h
locks.h
mca_dma.h
mman.h
mmu.h
mmu_context.h uml: cover stubs with a VMA 2008-02-05 09:44:29 -08:00
module-generic.h
module-i386.h
module-x86_64.h
msgbuf.h
mtrr.h
mutex.h
namei.h
nops.h git-x86: unbreak UML 2008-01-30 13:32:38 +01:00
page.h uml: use PAGE_SIZE in linker scripts 2008-05-13 08:02:22 -07:00
page_offset.h
param.h uml: add back CONFIG_HZ 2008-02-05 09:44:31 -08:00
paravirt.h uml: add asm/paravirt.h 2007-06-24 08:59:11 -07:00
pci.h
pda.h
percpu.h
pgalloc.h CONFIG_HIGHPTE vs. sub-page page tables. 2008-02-08 09:22:42 -08:00
pgtable-2level.h uml: 64-bit tlb fixes 2008-02-05 09:44:29 -08:00
pgtable-3level.h uml: 64-bit tlb fixes 2008-02-05 09:44:29 -08:00
pgtable.h mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
poll.h
posix_types.h
prctl.h
processor-generic.h uml: runtime host VMSPLIT detection 2008-02-08 09:22:42 -08:00
processor-i386.h uml: remove xmm checking on x86 2008-02-05 09:44:24 -08:00
processor-ppc.h
processor-x86_64.h uml: x86_64 should copy %fs during fork 2008-02-08 09:22:43 -08:00
ptrace-generic.h uml: ptrace floating point fixes 2007-10-16 09:43:07 -07:00
ptrace-i386.h uml: ptrace floating point fixes 2007-10-16 09:43:07 -07:00
ptrace-x86_64.h uml: remove code made redundant by CHOOSE_MODE removal 2007-10-16 09:43:05 -07:00
required-features.h uml: fix build breakage 2007-05-09 12:30:48 -07:00
resource.h
rwlock.h
rwsem.h
scatterlist.h
sections.h
segment.h [PATCH] uml: check for differences in host support 2006-03-31 12:18:52 -08:00
semaphore.h Generic semaphore implementation 2008-04-17 10:42:34 -04:00
sembuf.h
serial.h
setup.h
shmbuf.h
shmparam.h
sigcontext-generic.h
sigcontext-i386.h
sigcontext-ppc.h
sigcontext-x86_64.h
siginfo.h
signal.h
smp.h uml: fix inlines 2007-10-16 09:43:06 -07:00
socket.h
sockios.h
spinlock.h
spinlock_types.h
stat.h
statfs.h
string.h
suspend.h
system-generic.h
system-i386.h
system-ppc.h
system-x86_64.h
termbits.h
termios.h
thread_info.h uml: current.h cleanup 2008-02-05 09:44:28 -08:00
timex.h
tlb.h uml: compile error fix 2008-04-15 19:35:40 -07:00
tlbflush.h remove unused flush_tlb_pgtables 2007-10-19 11:53:34 -07:00
topology.h
types.h
uaccess.h uml: header untangling 2008-02-05 09:44:28 -08:00
ucontext.h
unaligned.h kernel: Move arches to use common unaligned access 2008-04-29 08:06:27 -07:00
unistd.h x86 merge fallout: uml 2007-10-29 07:41:32 -07:00
user.h
vga.h
vm-flags-i386.h
vm-flags-x86_64.h
vm86.h
xor.h