From: "Marc-André Lureau" <mlureau@redhat.com>
To: Claudio Fontana <claudio.fontana@huawei.com>
Cc: marcandre lureau <marcandre.lureau@redhat.com>,
drjones@redhat.com, cam@cs.ualberta.ca, qemu-devel@nongnu.org,
stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH v3 06/46] ivshmem: remove unnecessary dup()
Date: Tue, 22 Sep 2015 11:29:01 -0400 (EDT) [thread overview]
Message-ID: <2013259271.15250046.1442935741847.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <5601606B.1040709@huawei.com>
Hi
----- Original Message -----
> On 15.09.2015 18:07, marcandre.lureau@redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > qemu_chr_fe_get_msgfd() transfers ownership, there is no need to dup the
> > fd.
> >
>
> Are you sure? (tested?)
> There is a specific comment that the dup is done because of the get_msgfds
> implementation,
> I checked tcp_get_msgfds and it closes unused fds, is this ok?
>
> static int tcp_get_msgfds(...)
> {
> ...
> /* Close unused fds */
> for (i = to_copy, i < s->read_msgfds_num; i++) {
> close(s->read_msgfds[i]);
> }
> ...
Yes, it closes the remaining fds. But for the others, the one it got, there is no need for an extra dup() since the ownership is transfered.
>
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > hw/misc/ivshmem.c | 21 ++++++---------------
> > 1 file changed, 6 insertions(+), 15 deletions(-)
> >
> > diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> > index dd15f0e..fbeb731 100644
> > --- a/hw/misc/ivshmem.c
> > +++ b/hw/misc/ivshmem.c
> > @@ -480,7 +480,7 @@ static bool fifo_update_and_get(IVShmemState *s, const
> > uint8_t *buf, int size,
> > static void ivshmem_read(void *opaque, const uint8_t *buf, int size)
> > {
> > IVShmemState *s = opaque;
> > - int incoming_fd, tmp_fd;
> > + int incoming_fd;
> > int guest_max_eventfd;
> > long incoming_posn;
> >
> > @@ -495,21 +495,21 @@ static void ivshmem_read(void *opaque, const uint8_t
> > *buf, int size)
> > }
> >
> > /* pick off s->server_chr->msgfd and store it, posn should accompany
> > msg */
> > - tmp_fd = qemu_chr_fe_get_msgfd(s->server_chr);
> > - IVSHMEM_DPRINTF("posn is %ld, fd is %d\n", incoming_posn, tmp_fd);
> > + incoming_fd = qemu_chr_fe_get_msgfd(s->server_chr);
> > + IVSHMEM_DPRINTF("posn is %ld, fd is %d\n", incoming_posn,
> > incoming_fd);
> >
> > /* make sure we have enough space for this guest */
> > if (incoming_posn >= s->nb_peers) {
> > if (increase_dynamic_storage(s, incoming_posn) < 0) {
> > error_report("increase_dynamic_storage() failed");
> > - if (tmp_fd != -1) {
> > - close(tmp_fd);
> > + if (incoming_fd != -1) {
> > + close(incoming_fd);
> > }
> > return;
> > }
> > }
> >
> > - if (tmp_fd == -1) {
> > + if (incoming_fd == -1) {
> > /* if posn is positive and unseen before then this is our posn*/
> > if ((incoming_posn >= 0) &&
> > (s->peers[incoming_posn].eventfds == NULL)) {
> > @@ -524,15 +524,6 @@ static void ivshmem_read(void *opaque, const uint8_t
> > *buf, int size)
> > }
> > }
> >
> > - /* because of the implementation of get_msgfd, we need a dup */
> > - incoming_fd = dup(tmp_fd);
> > -
> > - if (incoming_fd == -1) {
> > - error_report("could not allocate file descriptor %s",
> > strerror(errno));
> > - close(tmp_fd);
> > - return;
> > - }
> > -
> > /* if the position is -1, then it's shared memory region fd */
> > if (incoming_posn == -1) {
> >
> >
>
>
next prev parent reply other threads:[~2015-09-22 15:29 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-15 16:07 [Qemu-devel] [PATCH v3 00/46] ivshmem improvements (please review) marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 01/46] char: add qemu_chr_free() marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 02/46] msix: add VMSTATE_MSIX_TEST marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 03/46] ivhsmem: read do not accept more than sizeof(long) marcandre.lureau
2015-09-16 9:27 ` Claudio Fontana
2015-09-16 9:33 ` Marc-André Lureau
2015-09-16 11:27 ` Claudio Fontana
2015-09-16 12:03 ` Marc-André Lureau
2015-09-16 12:51 ` Paolo Bonzini
2015-09-16 13:05 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 04/46] ivshmem: fix number of bytes to push to fifo marcandre.lureau
2015-09-16 9:28 ` Claudio Fontana
2015-09-23 10:17 ` Marc-André Lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 05/46] ivshmem: factor out the incoming fifo handling marcandre.lureau
2015-09-22 14:01 ` Claudio Fontana
2015-09-23 10:18 ` Marc-André Lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 06/46] ivshmem: remove unnecessary dup() marcandre.lureau
2015-09-22 14:06 ` Claudio Fontana
2015-09-22 15:29 ` Marc-André Lureau [this message]
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 07/46] ivshmem: remove superflous ivshmem_attr field marcandre.lureau
2015-09-16 9:25 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 08/46] ivshmem: remove useless doorbell field marcandre.lureau
2015-09-22 13:50 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 09/46] ivshmem: more qdev conversion marcandre.lureau
2015-09-22 14:00 ` Claudio Fontana
2015-09-23 10:22 ` Marc-André Lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 10/46] ivshmem: remove last exit(1) marcandre.lureau
2015-09-22 13:55 ` Claudio Fontana
2015-09-22 13:58 ` Claudio Fontana
2015-09-22 14:00 ` Marc-André Lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 11/46] ivshmem: limit maximum number of peers to G_MAXUINT16 marcandre.lureau
2015-09-22 14:09 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 12/46] ivshmem: simplify around increase_dynamic_storage() marcandre.lureau
2015-09-22 14:10 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 13/46] ivshmem: allocate eventfds in resize_peers() marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 14/46] ivshmem: remove useless ivshmem_update_irq() val argument marcandre.lureau
2015-09-22 14:13 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 15/46] ivshmem: initialize max_peer to -1 marcandre.lureau
2015-09-22 14:13 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 16/46] ivshmem: remove max_peer field marcandre.lureau
2015-09-16 9:39 ` Claudio Fontana
2015-09-16 9:40 ` Marc-André Lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 17/46] ivshmem: improve debug messages marcandre.lureau
2015-09-22 14:23 ` Claudio Fontana
2015-09-23 10:29 ` Marc-André Lureau
2015-09-23 12:10 ` Claudio Fontana
2015-09-23 15:45 ` Marc-André Lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 18/46] ivshmem: improve error marcandre.lureau
2015-09-22 14:26 ` Claudio Fontana
2015-09-23 10:30 ` Marc-André Lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 19/46] ivshmem: print error on invalid peer id marcandre.lureau
2015-09-22 14:27 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 20/46] ivshmem: simplify a bit the code marcandre.lureau
2015-09-22 14:32 ` Claudio Fontana
2015-09-22 14:56 ` Marc-André Lureau
2015-09-23 12:18 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 21/46] ivshmem: use common return marcandre.lureau
2015-09-16 11:30 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 22/46] ivshmem: use common is_power_of_2() marcandre.lureau
2015-09-16 11:31 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 23/46] ivshmem: migrate with VMStateDescription marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 24/46] ivshmem: shmfd can be 0 marcandre.lureau
2015-09-16 11:33 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 25/46] ivshmem: check shm isn't already initialized marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 26/46] ivshmem: add device description marcandre.lureau
2015-09-16 11:38 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 27/46] ivshmem: fix pci_ivshmem_exit() marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 28/46] ivshmem: replace 'guest' for 'peer' appropriately marcandre.lureau
2015-09-16 11:44 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 29/46] ivshmem: error on too many eventfd received marcandre.lureau
2015-09-16 12:14 ` Claudio Fontana
2015-09-23 10:47 ` Marc-André Lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 30/46] ivshmem: reset mask on device reset marcandre.lureau
2015-09-16 12:15 ` Claudio Fontana
2015-09-23 10:48 ` Marc-André Lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 31/46] contrib: add ivshmem client and server marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 32/46] ivshmem-client: check the number of vectors marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 33/46] ivshmem-server: use a uint16 for client ID marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 34/46] ivshmem-server: fix hugetlbfs support marcandre.lureau
2015-09-16 16:07 ` Vladimir Sementsov-Ogievskiy
2015-09-16 16:14 ` Marc-André Lureau
2015-09-17 8:52 ` Vladimir Sementsov-Ogievskiy
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 35/46] docs: update ivshmem device spec marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 36/46] ivshmem: add check on protocol version in QEMU marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 37/46] contrib: remove unnecessary strdup() marcandre.lureau
2015-09-17 9:01 ` Vladimir Sementsov-Ogievskiy
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 38/46] msix: implement pba write (but read-only) marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 39/46] qtest: add qtest_add_abrt_handler() marcandre.lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 40/46] tests: add ivshmem qtest marcandre.lureau
2015-09-22 14:44 ` Claudio Fontana
2015-09-23 11:24 ` Marc-André Lureau
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 41/46] ivshmem: do not keep shm_fd open marcandre.lureau
2015-09-22 14:36 ` Claudio Fontana
2015-09-22 14:59 ` Marc-André Lureau
2015-09-23 12:20 ` Claudio Fontana
2015-09-15 16:07 ` [Qemu-devel] [PATCH v3 42/46] ivshmem: make ivshmem_get_size() more generic marcandre.lureau
2015-09-16 15:23 ` Vladimir Sementsov-Ogievskiy
2015-09-16 15:24 ` Vladimir Sementsov-Ogievskiy
2015-09-16 15:26 ` Marc-André Lureau
2015-09-15 16:08 ` [Qemu-devel] [PATCH v3 43/46] ivshmem: add hostmem backend marcandre.lureau
2015-09-22 14:49 ` Claudio Fontana
2015-09-15 16:08 ` [Qemu-devel] [PATCH v3 44/46] ivshmem: remove EventfdEntry.vector marcandre.lureau
2015-09-22 14:59 ` Claudio Fontana
2015-09-22 15:18 ` Marc-André Lureau
2015-09-15 16:08 ` [Qemu-devel] [PATCH v3 45/46] ivshmem: rename MSI eventfd_table marcandre.lureau
2015-09-15 16:08 ` [Qemu-devel] [PATCH v3 46/46] ivshmem: use kvm irqfd for msi notifications marcandre.lureau
2015-09-16 12:47 ` [Qemu-devel] [PATCH v3 00/46] ivshmem improvements (please review) Claudio Fontana
2015-09-16 16:52 ` Vladimir Sementsov-Ogievskiy
2015-09-16 20:34 ` Marc-André Lureau
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=2013259271.15250046.1442935741847.JavaMail.zimbra@redhat.com \
--to=mlureau@redhat.com \
--cc=cam@cs.ualberta.ca \
--cc=claudio.fontana@huawei.com \
--cc=drjones@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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).