aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/include/shared/irq_user.h
diff options
context:
space:
mode:
authorAnton Ivanov <anton.ivanov@cambridgegreys.com>2017-11-20 16:17:58 -0500
committerRichard Weinberger <richard@nod.at>2018-02-19 13:38:51 -0500
commitff6a17989c08b0bb0fd490cc500b084581b3a9b9 (patch)
tree1f87a8f21ad3659e61e4958faece57994a842cde /arch/um/include/shared/irq_user.h
parent4d1a535b8ec5e74b42dfd9dc809142653b2597f6 (diff)
Epoll based IRQ controller
1. Removes the need to walk the IRQ/Device list to determine who triggered the IRQ. 2. Improves scalability (up to several times performance improvement for cases with 10s of devices). 3. Improves UML baseline IO performance for one disk + one NIC use case by up to 10%. 4. Introduces write poll triggered IRQs. 5. Prerequisite for introducing high performance mmesg family of functions in network IO. 6. Fixes RNG shutdown which was leaking a file descriptor Signed-off-by: Anton Ivanov <anton.ivanov@cambridgegreys.com> Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/um/include/shared/irq_user.h')
-rw-r--r--arch/um/include/shared/irq_user.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/um/include/shared/irq_user.h b/arch/um/include/shared/irq_user.h
index df5633053957..a7a6120f19d5 100644
--- a/arch/um/include/shared/irq_user.h
+++ b/arch/um/include/shared/irq_user.h
@@ -7,6 +7,7 @@
7#define __IRQ_USER_H__ 7#define __IRQ_USER_H__
8 8
9#include <sysdep/ptrace.h> 9#include <sysdep/ptrace.h>
10#include <stdbool.h>
10 11
11struct irq_fd { 12struct irq_fd {
12 struct irq_fd *next; 13 struct irq_fd *next;
@@ -15,10 +16,17 @@ struct irq_fd {
15 int type; 16 int type;
16 int irq; 17 int irq;
17 int events; 18 int events;
18 int current_events; 19 bool active;
20 bool pending;
21 bool purge;
19}; 22};
20 23
21enum { IRQ_READ, IRQ_WRITE }; 24#define IRQ_READ 0
25#define IRQ_WRITE 1
26#define IRQ_NONE 2
27#define MAX_IRQ_TYPE (IRQ_NONE + 1)
28
29
22 30
23struct siginfo; 31struct siginfo;
24extern void sigio_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs); 32extern void sigio_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs);