> -----Original Message----- > From: KY Srinivasan > Sent: Thursday, June 9, 2016 5:16 PM > To: 'Linus Torvalds' <torva...@linux-foundation.org> > Cc: da...@davemloft.net; netdev@vger.kernel.org; lkml <linux- > ker...@vger.kernel.org>; de...@linuxdriverproject.org; o...@aepfle.de; > a...@canonical.com; jasow...@redhat.com; > leann.ogasaw...@canonical.com > Subject: RE: [PATCH net-next] netvsc: Use the new in-place consumption APIs in > the rx path > > > > > -----Original Message----- > > From: Linus Torvalds [mailto:torva...@linux-foundation.org] > > Sent: Thursday, June 9, 2016 5:12 PM > > To: KY Srinivasan <k...@microsoft.com> > > Cc: da...@davemloft.net; netdev@vger.kernel.org; lkml <linux- > > ker...@vger.kernel.org>; de...@linuxdriverproject.org; o...@aepfle.de; > > a...@canonical.com; jasow...@redhat.com; > > leann.ogasaw...@canonical.com > > Subject: Re: [PATCH net-next] netvsc: Use the new in-place consumption APIs > in > > the rx path > > > > Srinivasan, > > > > these are all sent through linuxonhyperv.com, and fail DMARC because > > they have a microsoft.com address but no valid DKIM. > > > > Please fix your email setup. You need to go through the real > > microsoft smtp servers if you use a microsoft.com address. Or you need > > to get linuxonhyperv.com fixed as a smtp server with the proper MS > > email signing. > > > > Linus > > Thanks Linus, we will fix our email setup. We have now addressed this issue (kind of). We will continue to send our patches from linuxonhyperv.com; however the "from" address will be exam...@exchange.microsoft.com. We are working on the longer term solution that won't need this weird "from" address.
David, based on this comment from Linus, you have deferred this patch - as far as I know there were no other comments for me to address. Should I resend the patch. Regards, K. Y > > Regards, > > K. Y > > > > On Thu, Jun 9, 2016 at 6:34 PM, K. Y. Srinivasan <k...@microsoft.com> wrote: > > > Use the new APIs for eliminating a copy on the receive path. These new > APIs > > also > > > help in minimizing the number of memory barriers we end up issuing (in > the > > > ringbuffer code) since we can better control when we want to expose the > ring > > > state to the host. > > > > > > Signed-off-by: K. Y. Srinivasan <k...@microsoft.com> > > > Reviewed-by: Haiyang Zhang <haiya...@microsoft.com> > > > Tested-by: Dexuan Cui <de...@microsoft.com> > > > Tested-by: Simon Xiao <six...@microsoft.com> > > > --- > > > drivers/net/hyperv/netvsc.c | 88 +++++++++++++++++++++++++++++------- > -- > > ----- > > > 1 files changed, 59 insertions(+), 29 deletions(-) > > > > > > diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c > > > index 719cb35..8cd4c19 100644 > > > --- a/drivers/net/hyperv/netvsc.c > > > +++ b/drivers/net/hyperv/netvsc.c > > > @@ -1141,6 +1141,39 @@ static inline void netvsc_receive_inband(struct > > hv_device *hdev, > > > } > > > } > > > > > > +static void netvsc_process_raw_pkt(struct hv_device *device, > > > + struct vmbus_channel *channel, > > > + struct netvsc_device *net_device, > > > + struct net_device *ndev, > > > + u64 request_id, > > > + struct vmpacket_descriptor *desc) > > > +{ > > > + struct nvsp_message *nvmsg; > > > + > > > + nvmsg = (struct nvsp_message *)((unsigned long) > > > + desc + (desc->offset8 << 3)); > > > + > > > + switch (desc->type) { > > > + case VM_PKT_COMP: > > > + netvsc_send_completion(net_device, channel, device, desc); > > > + break; > > > + > > > + case VM_PKT_DATA_USING_XFER_PAGES: > > > + netvsc_receive(net_device, channel, device, desc); > > > + break; > > > + > > > + case VM_PKT_DATA_INBAND: > > > + netvsc_receive_inband(device, net_device, nvmsg); > > > + break; > > > + > > > + default: > > > + netdev_err(ndev, "unhandled packet type %d, tid %llx\n", > > > + desc->type, request_id); > > > + break; > > > + } > > > +} > > > + > > > + > > > void netvsc_channel_cb(void *context) > > > { > > > int ret; > > > @@ -1153,7 +1186,7 @@ void netvsc_channel_cb(void *context) > > > unsigned char *buffer; > > > int bufferlen = NETVSC_PACKET_SIZE; > > > struct net_device *ndev; > > > - struct nvsp_message *nvmsg; > > > + bool need_to_commit = false; > > > > > > if (channel->primary_channel != NULL) > > > device = channel->primary_channel->device_obj; > > > @@ -1167,39 +1200,36 @@ void netvsc_channel_cb(void *context) > > > buffer = get_per_channel_state(channel); > > > > > > do { > > > + desc = get_next_pkt_raw(channel); > > > + if (desc != NULL) { > > > + netvsc_process_raw_pkt(device, > > > + channel, > > > + net_device, > > > + ndev, > > > + desc->trans_id, > > > + desc); > > > + > > > + put_pkt_raw(channel, desc); > > > + need_to_commit = true; > > > + continue; > > > + } > > > + if (need_to_commit) { > > > + need_to_commit = false; > > > + commit_rd_index(channel); > > > + } > > > + > > > ret = vmbus_recvpacket_raw(channel, buffer, bufferlen, > > > &bytes_recvd, &request_id); > > > if (ret == 0) { > > > if (bytes_recvd > 0) { > > > desc = (struct vmpacket_descriptor > > > *)buffer; > > > - nvmsg = (struct nvsp_message *)((unsigned > > > long) > > > - desc + (desc->offset8 << 3)); > > > - switch (desc->type) { > > > - case VM_PKT_COMP: > > > - netvsc_send_completion(net_device, > > > - channel, > > > - device, > > > desc); > > > - break; > > > - > > > - case VM_PKT_DATA_USING_XFER_PAGES: > > > - netvsc_receive(net_device, > > > channel, > > > - device, desc); > > > - break; > > > - > > > - case VM_PKT_DATA_INBAND: > > > - netvsc_receive_inband(device, > > > - net_device, > > > - nvmsg); > > > - break; > > > - > > > - default: > > > - netdev_err(ndev, > > > - "unhandled packet type > > > %d, " > > > - "tid %llx len %d\n", > > > - desc->type, request_id, > > > - bytes_recvd); > > > - break; > > > - } > > > + netvsc_process_raw_pkt(device, > > > + channel, > > > + net_device, > > > + ndev, > > > + request_id, > > > + desc); > > > + > > > > > > } else { > > > /* > > > -- > > > 1.7.4.1 > > >