Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/um/drivers/ubd_user.c
10817 views
1
/*
2
* Copyright (C) 2000, 2001, 2002 Jeff Dike ([email protected])
3
* Copyright (C) 2001 Ridgerun,Inc ([email protected])
4
* Licensed under the GPL
5
*/
6
7
#include <stddef.h>
8
#include <unistd.h>
9
#include <errno.h>
10
#include <sched.h>
11
#include <signal.h>
12
#include <string.h>
13
#include <netinet/in.h>
14
#include <sys/time.h>
15
#include <sys/socket.h>
16
#include <sys/mman.h>
17
#include <sys/param.h>
18
#include "asm/types.h"
19
#include "user.h"
20
#include "ubd_user.h"
21
#include "os.h"
22
#include "cow.h"
23
24
#include <endian.h>
25
#include <byteswap.h>
26
27
void ignore_sigwinch_sig(void)
28
{
29
signal(SIGWINCH, SIG_IGN);
30
}
31
32
int start_io_thread(unsigned long sp, int *fd_out)
33
{
34
int pid, fds[2], err;
35
36
err = os_pipe(fds, 1, 1);
37
if(err < 0){
38
printk("start_io_thread - os_pipe failed, err = %d\n", -err);
39
goto out;
40
}
41
42
kernel_fd = fds[0];
43
*fd_out = fds[1];
44
45
err = os_set_fd_block(*fd_out, 0);
46
if (err) {
47
printk("start_io_thread - failed to set nonblocking I/O.\n");
48
goto out_close;
49
}
50
51
pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM, NULL);
52
if(pid < 0){
53
err = -errno;
54
printk("start_io_thread - clone failed : errno = %d\n", errno);
55
goto out_close;
56
}
57
58
return(pid);
59
60
out_close:
61
os_close_file(fds[0]);
62
os_close_file(fds[1]);
63
kernel_fd = -1;
64
*fd_out = -1;
65
out:
66
return err;
67
}
68
69