mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
um: drivers: Add virtio vhost-user driver
This module allows virtio devices to be used over a vhost-user socket. Signed-off-by: Erel Geron <erelx.geron@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
parent
851b6cb17c
commit
5d38f32499
11 changed files with 1169 additions and 2 deletions
|
@ -15,6 +15,7 @@
|
|||
#include <sys/sysmacros.h>
|
||||
#include <sys/un.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/eventfd.h>
|
||||
#include <os.h>
|
||||
|
||||
static void copy_stat(struct uml_stat *dst, const struct stat64 *src)
|
||||
|
@ -620,3 +621,46 @@ int os_falloc_punch(int fd, unsigned long long offset, int len)
|
|||
return n;
|
||||
}
|
||||
|
||||
int os_eventfd(unsigned int initval, int flags)
|
||||
{
|
||||
int fd = eventfd(initval, flags);
|
||||
|
||||
if (fd < 0)
|
||||
return -errno;
|
||||
return fd;
|
||||
}
|
||||
|
||||
int os_sendmsg_fds(int fd, const void *buf, unsigned int len, const int *fds,
|
||||
unsigned int fds_num)
|
||||
{
|
||||
struct iovec iov = {
|
||||
.iov_base = (void *) buf,
|
||||
.iov_len = len,
|
||||
};
|
||||
union {
|
||||
char control[CMSG_SPACE(sizeof(*fds) * OS_SENDMSG_MAX_FDS)];
|
||||
struct cmsghdr align;
|
||||
} u;
|
||||
unsigned int fds_size = sizeof(*fds) * fds_num;
|
||||
struct msghdr msg = {
|
||||
.msg_iov = &iov,
|
||||
.msg_iovlen = 1,
|
||||
.msg_control = u.control,
|
||||
.msg_controllen = CMSG_SPACE(fds_size),
|
||||
};
|
||||
struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msg);
|
||||
int err;
|
||||
|
||||
if (fds_num > OS_SENDMSG_MAX_FDS)
|
||||
return -EINVAL;
|
||||
memset(u.control, 0, sizeof(u.control));
|
||||
cmsg->cmsg_level = SOL_SOCKET;
|
||||
cmsg->cmsg_type = SCM_RIGHTS;
|
||||
cmsg->cmsg_len = CMSG_LEN(fds_size);
|
||||
memcpy(CMSG_DATA(cmsg), fds, fds_size);
|
||||
err = sendmsg(fd, &msg, 0);
|
||||
|
||||
if (err < 0)
|
||||
return -errno;
|
||||
return err;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue