RE: [PATCH V6 5/5] net: netvsc: Add Isolation VM support for netvsc driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Haiyang Zhang <haiyangz@xxxxxxxxxxxxx> Sent: Wednesday, December 8, 2021 12:14 PM
> > From: Tianyu Lan <ltykernel@xxxxxxxxx>
> > Sent: Tuesday, December 7, 2021 2:56 AM

[snip]

> >  static inline int netvsc_send_pkt(
> >  	struct hv_device *device,
> >  	struct hv_netvsc_packet *packet,
> > @@ -986,14 +1105,24 @@ static inline int netvsc_send_pkt(
> >
> >  	trace_nvsp_send_pkt(ndev, out_channel, rpkt);
> >
> > +	packet->dma_range = NULL;
> >  	if (packet->page_buf_cnt) {
> >  		if (packet->cp_partial)
> >  			pb += packet->rmsg_pgcnt;
> >
> > +		ret = netvsc_dma_map(ndev_ctx->device_ctx, packet, pb);
> > +		if (ret) {
> > +			ret = -EAGAIN;
> > +			goto exit;
> > +		}
> 
> Returning EAGAIN will let the upper network layer busy retry,
> which may make things worse.
> I suggest to return ENOSPC here like another place in this
> function, which will just drop the packet, and let the network
> protocol/app layer decide how to recover.
> 
> Thanks,
> - Haiyang

I made the original suggestion to return -EAGAIN here.   A
DMA mapping failure should occur only if swiotlb bounce
buffer space is unavailable, which is a transient condition.
The existing code already stops the queue and returns
-EAGAIN when the ring buffer is full, which is also a transient
condition.  My sense is that the two conditions should be
handled the same way.  Or is there a reason why a ring
buffer full condition should stop the queue and retry, while
a mapping failure should drop the packet?

Michael




[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux