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.
next prev parent 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).