Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/um/kernel/sigio.c
10817 views
1
/*
2
* Copyright (C) 2002 - 2007 Jeff Dike (jdike@{linux.intel,addtoit}.com)
3
* Licensed under the GPL
4
*/
5
6
#include <linux/interrupt.h>
7
#include "irq_kern.h"
8
#include "os.h"
9
#include "sigio.h"
10
11
/* Protected by sigio_lock() called from write_sigio_workaround */
12
static int sigio_irq_fd = -1;
13
14
static irqreturn_t sigio_interrupt(int irq, void *data)
15
{
16
char c;
17
18
os_read_file(sigio_irq_fd, &c, sizeof(c));
19
reactivate_fd(sigio_irq_fd, SIGIO_WRITE_IRQ);
20
return IRQ_HANDLED;
21
}
22
23
int write_sigio_irq(int fd)
24
{
25
int err;
26
27
err = um_request_irq(SIGIO_WRITE_IRQ, fd, IRQ_READ, sigio_interrupt,
28
IRQF_DISABLED|IRQF_SAMPLE_RANDOM, "write sigio",
29
NULL);
30
if (err) {
31
printk(KERN_ERR "write_sigio_irq : um_request_irq failed, "
32
"err = %d\n", err);
33
return -1;
34
}
35
sigio_irq_fd = fd;
36
return 0;
37
}
38
39
/* These are called from os-Linux/sigio.c to protect its pollfds arrays. */
40
static DEFINE_SPINLOCK(sigio_spinlock);
41
42
void sigio_lock(void)
43
{
44
spin_lock(&sigio_spinlock);
45
}
46
47
void sigio_unlock(void)
48
{
49
spin_unlock(&sigio_spinlock);
50
}
51
52