From: Zoltan Kiss <zoltan.kiss@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
Ian Campbell <Ian.Campbell@citrix.com>,
Wei Liu <wei.liu2@citrix.com>,
"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Jonathan Davies <Jonathan.Davies@citrix.com>
Subject: Re: [Xen-devel] [PATCH net-next RFC 2/5] xen-netback: Change TX path from grant copy to mapping
Date: Wed, 30 Oct 2013 21:10:51 +0000 [thread overview]
Message-ID: <527175DB.8070400@citrix.com> (raw)
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD015717A@AMSPEX01CL01.citrite.net>
On 30/10/13 09:11, Paul Durrant wrote:
>> diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-
>> netback/interface.c
>> index f5c3c57..fb16ede 100644
>> --- a/drivers/net/xen-netback/interface.c
>> +++ b/drivers/net/xen-netback/interface.c
>> @@ -336,8 +336,20 @@ struct xenvif *xenvif_alloc(struct device *parent,
>> domid_t domid,
>> vif->pending_prod = MAX_PENDING_REQS;
>> for (i = 0; i < MAX_PENDING_REQS; i++)
>> vif->pending_ring[i] = i;
>> - for (i = 0; i < MAX_PENDING_REQS; i++)
>> - vif->mmap_pages[i] = NULL;
>> + err = alloc_xenballooned_pages(MAX_PENDING_REQS,
>> + vif->mmap_pages,
>> + false);
>
> Since this is a per-vif allocation, is this going to scale?
Good question, I'll look after this.
>> @@ -1620,14 +1562,25 @@ static int xenvif_tx_submit(struct xenvif *vif, int
>> budget)
>> memcpy(skb->data,
>> (void *)(idx_to_kaddr(vif, pending_idx)|txp->offset),
>> data_len);
>> + vif->pending_tx_info[pending_idx].callback_struct.ctx =
>> NULL;
>> if (data_len < txp->size) {
>> /* Append the packet payload as a fragment. */
>> txp->offset += data_len;
>> txp->size -= data_len;
>> - } else {
>> + skb_shinfo(skb)->destructor_arg =
>> + &vif-
>>> pending_tx_info[pending_idx].callback_struct;
>> + } else if (!skb_shinfo(skb)->nr_frags) {
>> /* Schedule a response immediately. */
>> + skb_shinfo(skb)->destructor_arg = NULL;
>> + xenvif_idx_unmap(vif, pending_idx);
>> xenvif_idx_release(vif, pending_idx,
>> XEN_NETIF_RSP_OKAY);
>> + } else {
>> + /* FIXME: first request fits linear space, I don't know
>> + * if any guest would do that, but I think it's possible
>> + */
>
> The Windows frontend, because it has to parse the packet headers, will coalesce everything up to the payload in a single frag and it would be a good idea to copy this directly into the linear area.
I forgot to clarify this comment: the problem I wanted to handle here if
the first request's size is PKT_PROT_LEN and there is more fragments.
Then skb->len will be PKT_PROT_LEN as well, and the if statement falls
through to the else branch. That might be problematic if we release the
slot of the first request separately from the others. Or am I
overlooking something? Does that matter to netfront anyway?
And this problem, if it's true, applies to the previous, grant copy
method as well.
However, as I think, it might be better to change the condition to
(data_len <= txp->size), rather than putting an if-else statement into
the else branch.
>> @@ -1635,13 +1588,19 @@ static int xenvif_tx_submit(struct xenvif *vif, int
>> budget)
>> else if (txp->flags & XEN_NETTXF_data_validated)
>> skb->ip_summed = CHECKSUM_UNNECESSARY;
>>
>> - xenvif_fill_frags(vif, skb);
>> + xenvif_fill_frags(vif, skb, pending_idx);
>>
>> if (skb_is_nonlinear(skb) && skb_headlen(skb) <
>> PKT_PROT_LEN) {
>> int target = min_t(int, skb->len, PKT_PROT_LEN);
>> __pskb_pull_tail(skb, target - skb_headlen(skb));
>> }
>>
>> + /* Set this flag after __pskb_pull_tail, as it can trigger
>> + * skb_copy_ubufs, while we are still in control of the skb
>> + */
>
> You can't be sure that there will be no subsequent pullups. The v6 parsing code I added may need to do that on a (hopefully) rare occasion.
The only thing matters that it shouldn't happen between this and before
calling netif_receive_skb. I think I will move this right before it, and
expand the comment.
Zoli
next prev parent reply other threads:[~2013-10-30 21:10 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-30 0:50 [PATCH net-next RFC 0/5] xen-netback: TX grant mapping instead of copy Zoltan Kiss
2013-10-30 0:50 ` [PATCH net-next RFC 1/5] xen-netback: Introduce TX grant map definitions Zoltan Kiss
2013-10-30 9:28 ` [Xen-devel] " Jan Beulich
2013-10-31 19:22 ` Zoltan Kiss
2013-10-31 19:33 ` Zoltan Kiss
2013-10-30 0:50 ` [PATCH net-next RFC 2/5] xen-netback: Change TX path from grant copy to mapping Zoltan Kiss
2013-10-30 9:11 ` [Xen-devel] " Paul Durrant
2013-10-30 21:10 ` Zoltan Kiss [this message]
2013-11-01 16:09 ` Zoltan Kiss
2013-10-30 0:50 ` [PATCH net-next RFC 3/5] xen-netback: Remove old TX grant copy definitons Zoltan Kiss
2013-10-30 9:39 ` [Xen-devel] " Jan Beulich
2013-10-31 19:46 ` Zoltan Kiss
2013-10-30 11:13 ` Wei Liu
2013-10-30 0:50 ` [PATCH net-next RFC 4/5] xen-netback: Fix indentations Zoltan Kiss
2013-10-30 11:13 ` Wei Liu
2013-10-31 19:48 ` Zoltan Kiss
2013-10-30 0:50 ` [PATCH net-next RFC 4/5] xen-netback: Change RX path for mapped SKB fragments Zoltan Kiss
2013-10-30 19:16 ` [Xen-devel] [PATCH net-next RFC 0/5] xen-netback: TX grant mapping instead of copy Konrad Rzeszutek Wilk
2013-10-30 19:17 ` Konrad Rzeszutek Wilk
2013-10-30 21:14 ` Zoltan Kiss
2013-11-01 10:50 ` Ian Campbell
2013-11-01 19:00 ` Zoltan Kiss
2013-11-05 17:01 ` Zoltan Kiss
2013-11-07 10:52 ` Ian Campbell
2013-11-28 17:37 ` Zoltan Kiss
2013-11-28 17:43 ` Ian Campbell
2013-12-12 22:08 ` Zoltan Kiss
2013-12-16 10:14 ` Ian Campbell
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=527175DB.8070400@citrix.com \
--to=zoltan.kiss@citrix.com \
--cc=Ian.Campbell@citrix.com \
--cc=Jonathan.Davies@citrix.com \
--cc=Paul.Durrant@citrix.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.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).