From: Pavel Boldin <pboldin@mirantis.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v6 3/3] vhost: using EVENTFD_COPY2
Date: Wed, 28 Oct 2015 20:33:49 +0200 [thread overview]
Message-ID: <f5fa31c5e2778b96baf01fdc95dfa2fdc979cd19.1446056748.git.pboldin@mirantis.com> (raw)
In-Reply-To: <cover.1446055521.git.pboldin@mirantis.com>
In-Reply-To: <1440787880-7079-1-git-send-email-pboldin@mirantis.com>
Signed-off-by: Pavel Boldin <pboldin@mirantis.com>
---
lib/librte_vhost/vhost_cuse/eventfd_copy.c | 54 ++++++++++++++++++----------
lib/librte_vhost/vhost_cuse/eventfd_copy.h | 6 ++++
lib/librte_vhost/vhost_cuse/vhost-net-cdev.c | 3 ++
3 files changed, 44 insertions(+), 19 deletions(-)
diff --git a/lib/librte_vhost/vhost_cuse/eventfd_copy.c b/lib/librte_vhost/vhost_cuse/eventfd_copy.c
index 4d697a2..154b32a 100644
--- a/lib/librte_vhost/vhost_cuse/eventfd_copy.c
+++ b/lib/librte_vhost/vhost_cuse/eventfd_copy.c
@@ -46,6 +46,32 @@
static const char eventfd_cdev[] = "/dev/eventfd-link";
+static int eventfd_link = -1;
+
+int
+eventfd_init(void)
+{
+ if (eventfd_link >= 0)
+ return 0;
+
+ eventfd_link = open(eventfd_cdev, O_RDWR);
+ if (eventfd_link < 0) {
+ RTE_LOG(ERR, VHOST_CONFIG,
+ "eventfd_link module is not loaded\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+int
+eventfd_free(void)
+{
+ if (eventfd_link >= 0)
+ close(eventfd_link);
+ return 0;
+}
+
/*
* This function uses the eventfd_link kernel module to copy an eventfd file
* descriptor provided by QEMU in to our process space.
@@ -53,36 +79,26 @@ static const char eventfd_cdev[] = "/dev/eventfd-link";
int
eventfd_copy(int target_fd, int target_pid)
{
- int eventfd_link, ret;
- struct eventfd_copy eventfd_copy;
- int fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
+ int ret;
+ struct eventfd_copy2 eventfd_copy2;
- if (fd == -1)
- return -1;
/* Open the character device to the kernel module. */
/* TODO: check this earlier rather than fail until VM boots! */
- eventfd_link = open(eventfd_cdev, O_RDWR);
- if (eventfd_link < 0) {
- RTE_LOG(ERR, VHOST_CONFIG,
- "eventfd_link module is not loaded\n");
- close(fd);
+ if (eventfd_init() < 0)
return -1;
- }
- eventfd_copy.source_fd = fd;
- eventfd_copy.target_fd = target_fd;
- eventfd_copy.target_pid = target_pid;
+ eventfd_copy2.fd = target_fd;
+ eventfd_copy2.pid = target_pid;
+ eventfd_copy2.flags = O_NONBLOCK | O_CLOEXEC;
/* Call the IOCTL to copy the eventfd. */
- ret = ioctl(eventfd_link, EVENTFD_COPY, &eventfd_copy);
- close(eventfd_link);
+ ret = ioctl(eventfd_link, EVENTFD_COPY2, &eventfd_copy2);
if (ret < 0) {
RTE_LOG(ERR, VHOST_CONFIG,
- "EVENTFD_COPY ioctl failed\n");
- close(fd);
+ "EVENTFD_COPY2 ioctl failed\n");
return -1;
}
- return fd;
+ return ret;
}
diff --git a/lib/librte_vhost/vhost_cuse/eventfd_copy.h b/lib/librte_vhost/vhost_cuse/eventfd_copy.h
index 19ae30d..5f446ca 100644
--- a/lib/librte_vhost/vhost_cuse/eventfd_copy.h
+++ b/lib/librte_vhost/vhost_cuse/eventfd_copy.h
@@ -34,6 +34,12 @@
#define _EVENTFD_H
int
+eventfd_init(void);
+
+int
+eventfd_free(void);
+
+int
eventfd_copy(int target_fd, int target_pid);
#endif
diff --git a/lib/librte_vhost/vhost_cuse/vhost-net-cdev.c b/lib/librte_vhost/vhost_cuse/vhost-net-cdev.c
index 1ae7c49..ae7ad8d 100644
--- a/lib/librte_vhost/vhost_cuse/vhost-net-cdev.c
+++ b/lib/librte_vhost/vhost_cuse/vhost-net-cdev.c
@@ -373,6 +373,9 @@ rte_vhost_driver_register(const char *dev_name)
return -1;
}
+ if (eventfd_init() < 0)
+ return -1;
+
/*
* The device name is created. This is passed to QEMU so that it can
* register the device with our application.
--
1.9.1
next prev parent reply other threads:[~2015-10-28 18:34 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-16 16:40 [dpdk-dev] [PATCH] Fix `eventfd_link' module leakages and races Pavel Boldin
2015-03-16 17:55 ` Neil Horman
2015-03-17 1:29 ` Ouyang, Changchun
2015-03-20 15:57 ` Pavel Boldin
2015-03-18 13:16 ` [dpdk-dev] [PATCH v2] " Pavel Boldin
2015-03-23 11:15 ` Thomas Monjalon
2015-03-23 11:36 ` Pavel Boldin
2015-03-23 11:44 ` Thomas Monjalon
2015-03-23 15:15 ` [dpdk-dev] [PATCH v3] vhost: Refactor module `eventfd_link' Pavel Boldin
2015-04-02 17:01 ` [dpdk-dev] [PATCH v4 0/5] " Pavel Boldin
2015-04-02 17:01 ` [dpdk-dev] [PATCH v4 1/5] vhost: eventfd_link: moving ioctl to a function Pavel Boldin
2015-05-07 7:57 ` Xie, Huawei
[not found] ` <CACf4_B8MDfkaEk5jMjMbEw9F8LsBVLA9TUWwOBU=SCAxzFmSFw@mail.gmail.com>
2015-05-18 6:06 ` Xie, Huawei
2015-05-18 9:16 ` Pavel Boldin
2015-06-18 3:08 ` Xie, Huawei
2015-04-02 17:01 ` [dpdk-dev] [PATCH v4 2/5] vhost: eventfd_link: add function fget_from_files Pavel Boldin
2015-04-02 17:01 ` [dpdk-dev] [PATCH v4 3/5] vhost: eventfd_link: fix ioctl return values Pavel Boldin
2015-04-02 17:01 ` [dpdk-dev] [PATCH v4 4/5] vhost: eventfd_link: replace copy-pasted sys_close Pavel Boldin
2015-04-02 17:01 ` [dpdk-dev] [PATCH v4 5/5] vhost: eventfd_link: removing extra #includes Pavel Boldin
2015-04-16 11:48 ` [dpdk-dev] [PATCH v5 0/5] Refactor module `eventfd_link' Pavel Boldin
2015-04-16 11:48 ` [dpdk-dev] [PATCH v5 1/5] vhost: eventfd_link: moving ioctl to a function Pavel Boldin
2015-08-28 18:51 ` [dpdk-dev] [PATCH v5 1/4] vhost: eventfd_link: refactoring EVENTFD_COPY handler Pavel Boldin
2015-09-23 20:25 ` Pavel Boldin
2015-09-29 19:42 ` Thomas Monjalon
2015-09-29 23:29 ` Pavel Boldin
2015-10-20 9:06 ` Xie, Huawei
2015-10-28 18:33 ` [dpdk-dev] [PATCH v6 0/3] vhost: eventfd_link refactoring Pavel Boldin
2015-10-29 18:33 ` Xie, Huawei
2015-10-30 19:10 ` Thomas Monjalon
2015-10-28 18:33 ` [dpdk-dev] [PATCH v6 1/3] vhost: eventfd_link: refactoring EVENTFD_COPY handler Pavel Boldin
2015-10-28 18:33 ` [dpdk-dev] [PATCH v6 2/3] vhost: add EVENTFD_COPY2 ioctl Pavel Boldin
2015-10-28 18:33 ` Pavel Boldin [this message]
2015-08-28 18:51 ` [dpdk-dev] [PATCH v5 2/4] " Pavel Boldin
2015-10-20 9:43 ` Xie, Huawei
2015-08-28 18:51 ` [dpdk-dev] [PATCH v5 3/4] vhost: using EVENTFD_COPY2 Pavel Boldin
2015-10-20 9:52 ` Xie, Huawei
2015-10-21 12:16 ` Pavel Boldin
2015-10-26 1:45 ` Xie, Huawei
2015-10-28 18:35 ` Pavel Boldin
2015-08-28 18:51 ` [dpdk-dev] [PATCH v5 4/4] DO NOT MERGE: Tests for new eventfd_link module Pavel Boldin
2015-04-16 11:48 ` [dpdk-dev] [PATCH v5 2/5] vhost: eventfd_link: add function fget_from_files Pavel Boldin
2015-04-16 11:48 ` [dpdk-dev] [PATCH v5 3/5] vhost: eventfd_link: fix ioctl return values Pavel Boldin
2015-04-16 11:48 ` [dpdk-dev] [PATCH v5 4/5] vhost: eventfd_link: replace copy-pasted sys_close Pavel Boldin
2015-05-07 6:54 ` Xie, Huawei
2015-06-17 15:24 ` Thomas Monjalon
2015-07-09 0:59 ` Thomas Monjalon
2015-07-10 14:27 ` Xie, Huawei
2015-07-10 14:50 ` Pavel Boldin
2015-07-10 15:32 ` Xie, Huawei
2015-07-10 15:42 ` Xie, Huawei
2015-07-10 15:49 ` Thomas Monjalon
2015-07-10 16:06 ` Xie, Huawei
2015-07-11 15:08 ` Pavel Boldin
2015-07-13 1:59 ` Xie, Huawei
2015-07-19 12:39 ` Pavel Boldin
2015-04-16 11:48 ` [dpdk-dev] [PATCH v5 5/5] vhost: eventfd_link: removing extra #includes Pavel Boldin
2015-04-28 14:35 ` [dpdk-dev] [PATCH v5 0/5] Refactor module `eventfd_link' Thomas Monjalon
2015-05-04 5:29 ` Xie, Huawei
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f5fa31c5e2778b96baf01fdc95dfa2fdc979cd19.1446056748.git.pboldin@mirantis.com \
--to=pboldin@mirantis.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).