From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sander Eikelenboom Subject: Fwd: Re: xennet: skb rides the rocket: 20 slots Date: Sat, 9 Mar 2013 13:56:30 +0100 Message-ID: <427329313.20130309135630@eikelenboom.it> References: <72958707.20130104172854@eikelenboom.it> <1357556115.7989.13.camel@zakaz.uk.xensource.com> <50EB8091.90705@oracle.com> <323202711.20130108215503@eikelenboom.it> <50ED1800.1080208@oracle.com> <20130109150850.GI18395@phenom.dumpdata.com> <50EEA46E.7000604@oracle.com> <1357820816.9456.15.camel@zakaz.uk.xensource.com> <50EFC079.1000601@oracle.com> <1357898207.9456.112.camel@zakaz.uk.xensource.com> <291EDFCB1E9E224A99088639C4762022012CCFEB82DE@LONPMAILBOX01.citrite.net> <1357899363.9456.116.camel@zakaz.uk.xensource.com> <50F3D269.6030601@oracle.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----------0930810141662EDE1" Return-path: In-Reply-To: <50F3D269.6030601@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: "xen-devel@lists.xen.org" Cc: 'Steven Haigh' , Ian Campbell , "Palagummi, Siva" , Konrad Rzeszutek Wilk , annie li , msw@amazon.com, Wei Liu , Jacek Milewicz List-Id: xen-devel@lists.xenproject.org ------------0930810141662EDE1 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit This is a forwarded message From: ANNIE LI To: Ian Campbell Date: Monday, January 14, 2013, 10:39:53 AM Subject: [Xen-devel] xennet: skb rides the rocket: 20 slots Resend because xen-devel wasn't copied on the original ... ===8<==============Original message text=============== Hi I created a patch for this, but I failed to reproduce this issue and verify it. The patch was attached, Thanks Annie On 2013-1-11 18:16, Ian Campbell wrote: > On Fri, 2013-01-11 at 10:09 +0000, Paul Durrant wrote: >>> -----Original Message----- >>> Without GSO I don't think you should be seeing packets larger than the MTU, >>> which would normally be either ~1500 or ~9000 and fit easily within any >>> sensible negotiation for the max frags. I don't think you should worry unduly >>> about this case. >>> >> A stack could still send down a packet with one byte per frag though, >> right? A copy-and-coalesce path would still be needed in this case. > True. In that case skb_linearise would probably do the job on Linux. > > Ian > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel ===8<===========End of original message text=========== ------------0930810141662EDE1 Content-Type: message/rfc822; name="Message01.eml" Content-Disposition: attachment; filename="Message01.eml" Delivery-date: Mon, 14 Jan 2013 10:45:09 +0100 Received: from Debian-exim by smtp.eikelenboom.it with spam-scanned (Exim 4.72) id 1TugbN-0000pQ-4X for linux@eikelenboom.it; Mon, 14 Jan 2013 10:45:09 +0100 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on vserver.eikelenboom.it X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD,SPF_PASS,URIBL_BLOCKED autolearn=unavailable version=3.3.1 Received: from aserp1040.oracle.com ([141.146.126.69]:32404) by smtp.eikelenboom.it with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.72) (envelope-from ) id 1TugbM-0000pL-PD for linux@eikelenboom.it; Mon, 14 Jan 2013 10:45:09 +0100 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by aserp1040.oracle.com (Sentrion-MTA-4.2.2/Sentrion-MTA-4.2.2) with ESMTP id r0E9dZeL007746 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 14 Jan 2013 09:39:35 GMT Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r0E9dXPP016309 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 14 Jan 2013 09:39:34 GMT Received: from abhmt108.oracle.com (abhmt108.oracle.com [141.146.116.60]) by acsmt357.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id r0E9dXdR003605; Mon, 14 Jan 2013 03:39:33 -0600 Received: from [10.182.39.161] (/10.182.39.161) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 14 Jan 2013 01:39:33 -0800 Message-ID: <50F3D269.6030601@oracle.com> Date: Mon, 14 Jan 2013 17:39:53 +0800 From: ANNIE LI Organization: Oracle Corporation User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20120428 Thunderbird/12.0.1 MIME-Version: 1.0 To: Ian Campbell CC: Paul Durrant , Sander Eikelenboom , Konrad Rzeszutek Wilk Subject: Re: [Xen-devel] xennet: skb rides the rocket: 20 slots References: <72958707.20130104172854@eikelenboom.it> <1357556115.7989.13.camel@zakaz.uk.xensource.com> <50EB8091.90705@oracle.com> <323202711.20130108215503@eikelenboom.it> <50ED1800.1080208@oracle.com> <20130109150850.GI18395@phenom.dumpdata.com> <50EEA46E.7000604@oracle.com> <1357820816.9456.15.camel@zakaz.uk.xensource.com> <50EFC079.1000601@oracle.com> <1357898207.9456.112.camel@zakaz.uk.xensource.com> <291EDFCB1E9E224A99088639C4762022012CCFEB82DE@LONPMAILBOX01.citrite.net> <1357899363.9456.116.camel@zakaz.uk.xensource.com> In-Reply-To: <1357899363.9456.116.camel@zakaz.uk.xensource.com> Content-Type: multipart/mixed; boundary="------------050404030309050400010406" X-Source-IP: ucsinet21.oracle.com [156.151.31.93] --------------050404030309050400010406 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi I created a patch for this, but I failed to reproduce this issue and verify it. The patch was attached, Thanks Annie On 2013-1-11 18:16, Ian Campbell wrote: > On Fri, 2013-01-11 at 10:09 +0000, Paul Durrant wrote: >>> -----Original Message----- >>> Without GSO I don't think you should be seeing packets larger than the MTU, >>> which would normally be either ~1500 or ~9000 and fit easily within any >>> sensible negotiation for the max frags. I don't think you should worry unduly >>> about this case. >>> >> A stack could still send down a packet with one byte per frag though, >> right? A copy-and-coalesce path would still be needed in this case. > True. In that case skb_linearise would probably do the job on Linux. > > Ian > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel --------------050404030309050400010406 Content-Type: text/plain; charset=gb18030; name="0001-This-patch-implements-protect-mechanism-to-avoid-dro.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-This-patch-implements-protect-mechanism-to-avoid-dro.pa"; filename*1="tch" >>From 73932eea3cd48ec03f4f9eef66aae57afad74eb7 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 15 Jan 2013 01:06:59 +0800 Subject: [PATCH 1/1] This patch implements protect mechanism to avoid dropping packets when the required slot of skb is larger than 19. --- drivers/net/xen-netfront.c | 45 +++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 44 insertions(+), 1 deletions(-) diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index 7ffa43b..574c2d3 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -642,6 +642,49 @@ static int xennet_start_xmit(struct sk_buff *skb, struct net_device *dev) return NETDEV_TX_OK; } +static int xennet_xmit_skb(struct sk_buff *skb, struct net_device *dev) +{ + char *data = skb->data; + int slots; + unsigned int offset = offset_in_page(data); + unsigned int len = skb_headlen(skb); + struct sk_buff *segs, *nskb; + + slots = DIV_ROUND_UP(offset + len, PAGE_SIZE) + + xennet_count_skb_frag_slots(skb); + if (unlikely(slots > MAX_SKB_FRAGS + 1)) { + net_alert_ratelimited( + "xennet: skb rides the rocket: %d slots\n", slots); + if (skb_is_gso(skb)) { + segs = skb_gso_segment(skb, dev->features); + if (IS_ERR(segs)) + goto err_end; + + do { + nskb = segs; + segs = segs->next; + nskb->next = NULL; + xennet_start_xmit(nskb, dev); + } while (segs); + + dev_kfree_skb(skb); + } else + if (skb_linearize(skb) == 0) + xennet_start_xmit(skb, dev); + else + goto err_end; + + } else + xennet_start_xmit(skb, dev); + + return NETDEV_TX_OK; + +err_end: + dev_kfree_skb(skb); + dev->stats.tx_dropped++; + return NETDEV_TX_OK; +} + static int xennet_close(struct net_device *dev) { struct netfront_info *np = netdev_priv(dev); @@ -1280,7 +1323,7 @@ static const struct net_device_ops xennet_netdev_ops = { .ndo_open = xennet_open, .ndo_uninit = xennet_uninit, .ndo_stop = xennet_close, - .ndo_start_xmit = xennet_start_xmit, + .ndo_start_xmit = xennet_xmit_skb, .ndo_change_mtu = xennet_change_mtu, .ndo_get_stats64 = xennet_get_stats64, .ndo_set_mac_address = eth_mac_addr, -- 1.7.3.4 --------------050404030309050400010406-- ------------0930810141662EDE1 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel ------------0930810141662EDE1--