qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Yang Hongyang <yanghy@cn.fujitsu.com>
To: Jason Wang <jasowang@redhat.com>, qemu-devel@nongnu.org
Cc: lizhijian@cn.fujitsu.com, thuth@redhat.com, armbru@redhat.com,
	stefanha@redhat.com, zhang.zhanghailiang@huawei.com
Subject: Re: [Qemu-devel] [PATCH v11 04/12] net: merge qemu_deliver_packet and qemu_deliver_packet_iov
Date: Tue, 22 Sep 2015 16:21:35 +0800	[thread overview]
Message-ID: <56010F8F.6030006@cn.fujitsu.com> (raw)
In-Reply-To: <56010DEF.1050501@redhat.com>



On 09/22/2015 04:14 PM, Jason Wang wrote:
>
>
> On 09/22/2015 03:44 PM, Yang Hongyang wrote:
>> Hi Jason,
>>
>>    Thanks for the review,
>>
>> On 09/22/2015 03:30 PM, Jason Wang wrote:
>>>
>>>
>>> On 09/16/2015 08:16 PM, Yang Hongyang wrote:
>>>> qemu_deliver_packet_iov already have the compat delivery, we
>>>> can drop qemu_deliver_packet.
>>>>
>>>> Signed-off-by: Yang Hongyang <yanghy@cn.fujitsu.com>
>>>> ---
>>>>    include/net/net.h |  5 -----
>>>>    net/net.c         | 40 +++++++---------------------------------
>>>>    net/queue.c       |  6 +++++-
>>>>    3 files changed, 12 insertions(+), 39 deletions(-)
>>>>
>>>> diff --git a/include/net/net.h b/include/net/net.h
>>>> index 36e5fab..7af3e15 100644
>>>> --- a/include/net/net.h
>>>> +++ b/include/net/net.h
>>>> @@ -152,11 +152,6 @@ void qemu_check_nic_model(NICInfo *nd, const
>>>> char *model);
>>>>    int qemu_find_nic_model(NICInfo *nd, const char * const *models,
>>>>                            const char *default_model);
>>>>
>>>> -ssize_t qemu_deliver_packet(NetClientState *sender,
>>>> -                            unsigned flags,
>>>> -                            const uint8_t *data,
>>>> -                            size_t size,
>>>> -                            void *opaque);
>>>>    ssize_t qemu_deliver_packet_iov(NetClientState *sender,
>>>>                                unsigned flags,
>>>>                                const struct iovec *iov,
>>>> diff --git a/net/net.c b/net/net.c
>>>> index ad37419..ca35b27 100644
>>>> --- a/net/net.c
>>>> +++ b/net/net.c
>>>> @@ -597,36 +597,6 @@ static ssize_t filter_receive(NetClientState
>>>> *nc, NetFilterChain chain,
>>>>        return filter_receive_iov(nc, chain, sender, flags, &iov, 1,
>>>> sent_cb);
>>>>    }
>>>>
>>>> -ssize_t qemu_deliver_packet(NetClientState *sender,
>>>> -                            unsigned flags,
>>>> -                            const uint8_t *data,
>>>> -                            size_t size,
>>>> -                            void *opaque)
>>>> -{
>>>> -    NetClientState *nc = opaque;
>>>> -    ssize_t ret;
>>>> -
>>>> -    if (nc->link_down) {
>>>> -        return size;
>>>> -    }
>>>> -
>>>> -    if (nc->receive_disabled) {
>>>> -        return 0;
>>>> -    }
>>>> -
>>>> -    if (flags & QEMU_NET_PACKET_FLAG_RAW && nc->info->receive_raw) {
>>>> -        ret = nc->info->receive_raw(nc, data, size);
>>>> -    } else {
>>>> -        ret = nc->info->receive(nc, data, size);
>>>> -    }
>>>> -
>>>> -    if (ret == 0) {
>>>> -        nc->receive_disabled = 1;
>>>> -    }
>>>> -
>>>> -    return ret;
>>>> -}
>>>> -
>>>>    void qemu_purge_queued_packets(NetClientState *nc)
>>>>    {
>>>>        if (!nc->peer) {
>>>> @@ -717,14 +687,18 @@ ssize_t qemu_send_packet_raw(NetClientState
>>>> *nc, const uint8_t *buf, int size)
>>>>    }
>>>>
>>>>    static ssize_t nc_sendv_compat(NetClientState *nc, const struct
>>>> iovec *iov,
>>>> -                               int iovcnt)
>>>> +                               int iovcnt, unsigned flags)
>>>>    {
>>>>        uint8_t buffer[NET_BUFSIZE];
>>>>        size_t offset;
>>>>
>>>>        offset = iov_to_buf(iov, iovcnt, 0, buffer, sizeof(buffer));
>>>>
>>>> -    return nc->info->receive(nc, buffer, offset);
>>>> +    if (flags & QEMU_NET_PACKET_FLAG_RAW && nc->info->receive_raw) {
>>>> +        return nc->info->receive_raw(nc, buffer, offset);
>>>> +    } else {
>>>> +        return nc->info->receive(nc, buffer, offset);
>>>> +    }
>>>
>>> Then for net clients that doesn't support receive_iov, an extra memcpy
>>> is introduced. This seems unnecessary. And this patch looks independent,
>>> so please drop this patch from the series (This can also help to reduce
>>> the iteration). I think we may need this after all net clients support
>>> receive_iov().
>>
>> This patch is required by the next patch which introduce a
>> +/* Returns:
>> + *   >0 - success
>> + *    0 - queue packet for future redelivery
>> + *   <0 - failure (discard packet)
>> + */
>> +typedef ssize_t (NetQueueDeliverFunc)(NetClientState *sender,
>> +                                      unsigned flags,
>> +                                      const struct iovec *iov,
>> +                                      int iovcnt,
>> +                                      void *opaque);
>>
>> If we drop this patch, we will need to introduce 2 deliver func, which
>> seems not clean and simple.
>
> Then you can probably skip the iov_to_buf() if iov_cnt is one in the
> above code?

Seems like a good idea to avoid the extra memcpy, thank you! BTW,
can I do this on top of the series if there's no other comments?
so that the first 10 patch can be merged as is. if not, I will send another
version v12 to fix this.

>
>>
>>>
>>>
>>>>    }
>>>>
>>>>    ssize_t qemu_deliver_packet_iov(NetClientState *sender,
>>>> @@ -747,7 +721,7 @@ ssize_t qemu_deliver_packet_iov(NetClientState
>>>> *sender,
>>>>        if (nc->info->receive_iov) {
>>>>            ret = nc->info->receive_iov(nc, iov, iovcnt);
>>>>        } else {
>>>> -        ret = nc_sendv_compat(nc, iov, iovcnt);
>>>> +        ret = nc_sendv_compat(nc, iov, iovcnt, flags);
>>>>        }
>>>>
>>>>        if (ret == 0) {
>>>> diff --git a/net/queue.c b/net/queue.c
>>>> index ebbe2bb..cf8db3a 100644
>>>> --- a/net/queue.c
>>>> +++ b/net/queue.c
>>>> @@ -152,9 +152,13 @@ static ssize_t qemu_net_queue_deliver(NetQueue
>>>> *queue,
>>>>                                          size_t size)
>>>>    {
>>>>        ssize_t ret = -1;
>>>> +    struct iovec iov = {
>>>> +        .iov_base = (void *)data,
>>>> +        .iov_len = size
>>>> +    };
>>>>
>>>>        queue->delivering = 1;
>>>> -    ret = qemu_deliver_packet(sender, flags, data, size,
>>>> queue->opaque);
>>>> +    ret = qemu_deliver_packet_iov(sender, flags, &iov, 1,
>>>> queue->opaque);
>>>>        queue->delivering = 0;
>>>>
>>>>        return ret;
>>>
>>>
>>> .
>>>
>>
>
> .
>

-- 
Thanks,
Yang.

  reply	other threads:[~2015-09-22  8:21 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-16 12:15 [Qemu-devel] [PATCH v11 00/12] Add a netfilter object and netbuffer filter Yang Hongyang
2015-09-16 12:15 ` [Qemu-devel] [PATCH v11 01/12] qmp: delete qemu opts when delete an object Yang Hongyang
2015-09-24  7:43   ` Markus Armbruster
2015-09-24  8:35     ` Yang Hongyang
2015-09-24  9:42       ` Markus Armbruster
2015-09-24  9:59         ` Yang Hongyang
2015-09-24 11:35           ` Markus Armbruster
2015-09-25  1:11             ` Yang Hongyang
2015-09-24 10:06         ` Yang Hongyang
2015-09-24 11:36           ` Markus Armbruster
2015-09-25  1:12             ` Yang Hongyang
2015-09-25  6:40       ` Jason Wang
2015-09-16 12:15 ` [Qemu-devel] [PATCH v11 02/12] init/cleanup of netfilter object Yang Hongyang
2015-09-16 21:09   ` Eric Blake
2015-09-17  1:23     ` Yang Hongyang
2015-09-17 16:09       ` Eric Blake
2015-09-18  1:14         ` Yang Hongyang
2015-09-24  8:41   ` Markus Armbruster
2015-09-24  8:47     ` Yang Hongyang
2015-09-24 11:40       ` Markus Armbruster
2015-09-25  1:13         ` Yang Hongyang
2015-09-24  8:57     ` Yang Hongyang
2015-09-24 11:52       ` Markus Armbruster
2015-09-25  6:45         ` Jason Wang
2015-09-25 14:10           ` Markus Armbruster
2015-09-28  5:47             ` Jason Wang
2015-09-28  5:53               ` Yang Hongyang
2015-09-16 12:15 ` [Qemu-devel] [PATCH v11 03/12] netfilter: hook packets before net queue send Yang Hongyang
2015-09-16 12:16 ` [Qemu-devel] [PATCH v11 04/12] net: merge qemu_deliver_packet and qemu_deliver_packet_iov Yang Hongyang
2015-09-22  7:30   ` Jason Wang
2015-09-22  7:44     ` Yang Hongyang
2015-09-22  8:14       ` Jason Wang
2015-09-22  8:21         ` Yang Hongyang [this message]
2015-09-22  9:19           ` Jason Wang
2015-09-22  9:26             ` Yang Hongyang
2015-09-22  9:42               ` Jason Wang
2015-09-16 12:16 ` [Qemu-devel] [PATCH v11 05/12] net/queue: introduce NetQueueDeliverFunc Yang Hongyang
2015-09-16 12:16 ` [Qemu-devel] [PATCH v11 06/12] netfilter: add an API to pass the packet to next filter Yang Hongyang
2015-09-16 12:16 ` [Qemu-devel] [PATCH v11 07/12] netfilter: print filter info associate with the netdev Yang Hongyang
2015-09-16 12:16 ` [Qemu-devel] [PATCH v11 08/12] net/queue: export qemu_net_queue_append_iov Yang Hongyang
2015-09-16 12:16 ` [Qemu-devel] [PATCH v11 09/12] netfilter: add a netbuffer filter Yang Hongyang
2015-09-24  9:12   ` Markus Armbruster
2015-09-25  7:18     ` Yang Hongyang
2015-09-25  8:18       ` Jason Wang
2015-09-25 15:13         ` Markus Armbruster
2015-09-25 15:07       ` Markus Armbruster
2015-09-28  6:12         ` Jason Wang
2015-09-28  7:38           ` Markus Armbruster
2015-09-28  6:42         ` Yang Hongyang
2015-09-25  8:03     ` Yang Hongyang
2015-09-25  8:18       ` Thomas Huth
2015-09-25  8:22         ` Yang Hongyang
2015-09-25 15:26         ` Markus Armbruster
2015-09-28  6:40           ` Yang Hongyang
2015-09-16 12:16 ` [Qemu-devel] [PATCH v11 10/12] tests: add test cases for netfilter object Yang Hongyang
2015-09-16 12:16 ` [Qemu-devel] [PATCH v11 11/12] netfilter/multiqueue: introduce netfilter name Yang Hongyang
2015-09-16 12:16 ` [Qemu-devel] [PATCH v11 12/12] netfilter: add multiqueue support Yang Hongyang
2015-09-22  7:36   ` Jason Wang
2015-09-22  7:49     ` Yang Hongyang
2015-09-22  8:31       ` Jason Wang
2015-09-22  8:35         ` Yang Hongyang
2015-09-22  9:19           ` Jason Wang
2015-09-22  8:07     ` Yang Hongyang
2015-09-22  8:32       ` Jason Wang
2015-09-22  8:43         ` Yang Hongyang
2015-09-22  9:30           ` Jason Wang
2015-09-22  9:47             ` Yang Hongyang
2015-09-22  7:39 ` [Qemu-devel] [PATCH v11 00/12] Add a netfilter object and netbuffer filter Jason Wang
2015-09-22  7:59   ` Yang Hongyang
2015-09-24  4:22 ` Jason Wang

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=56010F8F.6030006@cn.fujitsu.com \
    --to=yanghy@cn.fujitsu.com \
    --cc=armbru@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=lizhijian@cn.fujitsu.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=thuth@redhat.com \
    --cc=zhang.zhanghailiang@huawei.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).