[dpdk-dev,v3] lib/librte_vhost: update used->idx when allocation of mbuf fails

Message ID 1426902420-21492-1-git-send-email-haifeng.lin@huawei.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Linhaifeng March 21, 2015, 1:47 a.m. UTC
  From: Linhaifeng <haifeng.lin@huawei.com>

When failed to malloc buffer from mempool we just update last_used_idx but
not used->idx so after many times vhost thought have handle all packets
but virtio_net thought vhost have not handle all packets and will not
update avail->idx.

Signed-off-by: Linhaifeng <haifeng.lin@huawei.com>
---
 lib/librte_vhost/vhost_rxtx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Linhaifeng March 21, 2015, 8:41 a.m. UTC | #1
cc changchun.ouyang@intel.com
cc huawei.xie@intel.com

On 2015/3/21 9:47, linhaifeng wrote:
> From: Linhaifeng <haifeng.lin@huawei.com>
> 
> When failed to malloc buffer from mempool we just update last_used_idx but
> not used->idx so after many times vhost thought have handle all packets
> but virtio_net thought vhost have not handle all packets and will not
> update avail->idx.
> 
> Signed-off-by: Linhaifeng <haifeng.lin@huawei.com>
> ---
>  lib/librte_vhost/vhost_rxtx.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/librte_vhost/vhost_rxtx.c b/lib/librte_vhost/vhost_rxtx.c
> index 535c7a1..510ffe8 100644
> --- a/lib/librte_vhost/vhost_rxtx.c
> +++ b/lib/librte_vhost/vhost_rxtx.c
> @@ -609,7 +609,7 @@ rte_vhost_dequeue_burst(struct virtio_net *dev, uint16_t queue_id,
>  		if (unlikely(m == NULL)) {
>  			RTE_LOG(ERR, VHOST_DATA,
>  				"Failed to allocate memory for mbuf.\n");
> -			return entry_success;
> +			break;	
>  		}
>  		seg_offset = 0;
>  		seg_avail = m->buf_len - RTE_PKTMBUF_HEADROOM;
>
  
Ouyang Changchun March 22, 2015, 12:08 p.m. UTC | #2
> -----Original Message-----
> From: linhaifeng [mailto:haifeng.lin@huawei.com]
> Sent: Saturday, March 21, 2015 9:47 AM
> To: dev@dpdk.org
> Cc: Ouyang, Changchun; Xie, Huawei
> Subject: [PATCH v3] lib/librte_vhost: update used->idx when allocation of
> mbuf fails
> 
> From: Linhaifeng <haifeng.lin@huawei.com>
> 
> When failed to malloc buffer from mempool we just update last_used_idx
> but not used->idx so after many times vhost thought have handle all packets
> but virtio_net thought vhost have not handle all packets and will not update
> avail->idx.
> 
> Signed-off-by: Linhaifeng <haifeng.lin@huawei.com>

Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
  
Huawei Xie March 24, 2015, 7:14 a.m. UTC | #3
On 3/22/2015 8:08 PM, Ouyang, Changchun wrote:
>
>> -----Original Message-----
>> From: linhaifeng [mailto:haifeng.lin@huawei.com]
>> Sent: Saturday, March 21, 2015 9:47 AM
>> To: dev@dpdk.org
>> Cc: Ouyang, Changchun; Xie, Huawei
>> Subject: [PATCH v3] lib/librte_vhost: update used->idx when allocation of
>> mbuf fails
>>
>> From: Linhaifeng <haifeng.lin@huawei.com>
>>
>> When failed to malloc buffer from mempool we just update last_used_idx
>> but not used->idx so after many times vhost thought have handle all packets
>> but virtio_net thought vhost have not handle all packets and will not update
>> avail->idx.
>>
>> Signed-off-by: Linhaifeng <haifeng.lin@huawei.com>
> Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
>
>
>
Acked-by: Huawei Xie <huawei.xie@intel.com>

This patch fix the issue.
Simple solution like other PMDs is before processing one descriptor,
ensure allocation of new mbuf is successfull, and then immediately
refill after receiving the packet from the descriptor.
In future, we should consider optimized bulk allocation strategy with
threshold.
  
Linhaifeng March 24, 2015, 7:46 a.m. UTC | #4
On 2015/3/24 15:14, Xie, Huawei wrote:
> On 3/22/2015 8:08 PM, Ouyang, Changchun wrote:
>>
>>> -----Original Message-----
>>> From: linhaifeng [mailto:haifeng.lin@huawei.com]
>>> Sent: Saturday, March 21, 2015 9:47 AM
>>> To: dev@dpdk.org
>>> Cc: Ouyang, Changchun; Xie, Huawei
>>> Subject: [PATCH v3] lib/librte_vhost: update used->idx when allocation of
>>> mbuf fails
>>>
>>> From: Linhaifeng <haifeng.lin@huawei.com>
>>>
>>> When failed to malloc buffer from mempool we just update last_used_idx
>>> but not used->idx so after many times vhost thought have handle all packets
>>> but virtio_net thought vhost have not handle all packets and will not update
>>> avail->idx.
>>>
>>> Signed-off-by: Linhaifeng <haifeng.lin@huawei.com>
>> Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
>>
>>
>>
> Acked-by: Huawei Xie <huawei.xie@intel.com>
> 
> This patch fix the issue.
> Simple solution like other PMDs is before processing one descriptor,
> ensure allocation of new mbuf is successfull, and then immediately
> refill after receiving the packet from the descriptor.
> In future, we should consider optimized bulk allocation strategy with
> threshold.
> 

Hi, huawei

THis is patch is for librte_vhost.
Do you want to ack for the other patch for virtio-net-pmd?
> 
> 
> 
> 
>
  
Thomas Monjalon March 27, 2015, 11:05 a.m. UTC | #5
> >> When failed to malloc buffer from mempool we just update last_used_idx
> >> but not used->idx so after many times vhost thought have handle all packets
> >> but virtio_net thought vhost have not handle all packets and will not update
> >> avail->idx.
> >>
> >> Signed-off-by: Linhaifeng <haifeng.lin@huawei.com>
> > Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
> Acked-by: Huawei Xie <huawei.xie@intel.com>

Applied, thanks
  

Patch

diff --git a/lib/librte_vhost/vhost_rxtx.c b/lib/librte_vhost/vhost_rxtx.c
index 535c7a1..510ffe8 100644
--- a/lib/librte_vhost/vhost_rxtx.c
+++ b/lib/librte_vhost/vhost_rxtx.c
@@ -609,7 +609,7 @@  rte_vhost_dequeue_burst(struct virtio_net *dev, uint16_t queue_id,
 		if (unlikely(m == NULL)) {
 			RTE_LOG(ERR, VHOST_DATA,
 				"Failed to allocate memory for mbuf.\n");
-			return entry_success;
+			break;	
 		}
 		seg_offset = 0;
 		seg_avail = m->buf_len - RTE_PKTMBUF_HEADROOM;