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 On Thu, Jun 9, 2016 at 6:34 PM, K. Y. Srinivasan <kys@xxxxxxxxxxxxx> 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 <kys@xxxxxxxxxxxxx> > Reviewed-by: Haiyang Zhang <haiyangz@xxxxxxxxxxxxx> > Tested-by: Dexuan Cui <decui@xxxxxxxxxxxxx> > Tested-by: Simon Xiao <sixiao@xxxxxxxxxxxxx> > --- > 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 > _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel