Hi Jason, I love your patch! Yet something to improve: [auto build test ERROR on net-next/master] url: https://github.com/0day-ci/linux/commits/Jason-Wang/Packed-virtqueue-for-vhost/20180703-154751 config: x86_64-randconfig-s0-07032254 (attached as .config) compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 Note: the linux-review/Jason-Wang/Packed-virtqueue-for-vhost/20180703-154751 HEAD 01b902f1126212ea2597e6d09802bd9c4431bf82 builds fine. It only hurts bisectibility. All errors (new ones prefixed by >>): drivers//vhost/net.c: In function 'handle_rx': >> drivers//vhost/net.c:738:15: error: implicit declaration of function 'get_rx_bufs' [-Werror=implicit-function-declaration] headcount = get_rx_bufs(vq, vq->heads + nvq->done_idx, ^~~~~~~~~~~ cc1: some warnings being treated as errors vim +/get_rx_bufs +738 drivers//vhost/net.c 030881372 Jason Wang 2016-03-04 687 3a4d5c94e Michael S. Tsirkin 2010-01-14 688 /* Expects to be always run from workqueue - which acts as 3a4d5c94e Michael S. Tsirkin 2010-01-14 689 * read-size critical section for our kind of RCU. */ 94249369e Jason Wang 2011-01-17 690 static void handle_rx(struct vhost_net *net) 3a4d5c94e Michael S. Tsirkin 2010-01-14 691 { 81f95a558 Michael S. Tsirkin 2013-04-28 692 struct vhost_net_virtqueue *nvq = &net->vqs[VHOST_NET_VQ_RX]; 81f95a558 Michael S. Tsirkin 2013-04-28 693 struct vhost_virtqueue *vq = &nvq->vq; 8dd014adf David Stevens 2010-07-27 694 unsigned uninitialized_var(in), log; 8dd014adf David Stevens 2010-07-27 695 struct vhost_log *vq_log; 8dd014adf David Stevens 2010-07-27 696 struct msghdr msg = { 8dd014adf David Stevens 2010-07-27 697 .msg_name = NULL, 8dd014adf David Stevens 2010-07-27 698 .msg_namelen = 0, 8dd014adf David Stevens 2010-07-27 699 .msg_control = NULL, /* FIXME: get and handle RX aux data. */ 8dd014adf David Stevens 2010-07-27 700 .msg_controllen = 0, 8dd014adf David Stevens 2010-07-27 701 .msg_flags = MSG_DONTWAIT, 8dd014adf David Stevens 2010-07-27 702 }; 0960b6417 Jason Wang 2015-02-15 703 struct virtio_net_hdr hdr = { 0960b6417 Jason Wang 2015-02-15 704 .flags = 0, 0960b6417 Jason Wang 2015-02-15 705 .gso_type = VIRTIO_NET_HDR_GSO_NONE 8dd014adf David Stevens 2010-07-27 706 }; 8dd014adf David Stevens 2010-07-27 707 size_t total_len = 0; 910a578f7 Michael S. Tsirkin 2012-10-24 708 int err, mergeable; f5a4941aa Jason Wang 2018-05-29 709 s16 headcount; 8dd014adf David Stevens 2010-07-27 710 size_t vhost_hlen, sock_hlen; 8dd014adf David Stevens 2010-07-27 711 size_t vhost_len, sock_len; 2e26af79b Asias He 2013-05-07 712 struct socket *sock; ba7438aed Al Viro 2014-12-10 713 struct iov_iter fixup; 0960b6417 Jason Wang 2015-02-15 714 __virtio16 num_buffers; db688c24e Paolo Abeni 2018-04-24 715 int recv_pkts = 0; 8dd014adf David Stevens 2010-07-27 716 aaa3149bb Jason Wang 2018-03-26 717 mutex_lock_nested(&vq->mutex, 0); 2e26af79b Asias He 2013-05-07 718 sock = vq->private_data; 2e26af79b Asias He 2013-05-07 719 if (!sock) 2e26af79b Asias He 2013-05-07 720 goto out; 6b1e6cc78 Jason Wang 2016-06-23 721 6b1e6cc78 Jason Wang 2016-06-23 722 if (!vq_iotlb_prefetch(vq)) 6b1e6cc78 Jason Wang 2016-06-23 723 goto out; 6b1e6cc78 Jason Wang 2016-06-23 724 8ea8cf89e Michael S. Tsirkin 2011-05-20 725 vhost_disable_notify(&net->dev, vq); 8241a1e46 Jason Wang 2016-06-01 726 vhost_net_disable_vq(net, vq); 2e26af79b Asias He 2013-05-07 727 81f95a558 Michael S. Tsirkin 2013-04-28 728 vhost_hlen = nvq->vhost_hlen; 81f95a558 Michael S. Tsirkin 2013-04-28 729 sock_hlen = nvq->sock_hlen; 8dd014adf David Stevens 2010-07-27 730 ea16c5143 Michael S. Tsirkin 2014-06-05 731 vq_log = unlikely(vhost_has_feature(vq, VHOST_F_LOG_ALL)) ? 8dd014adf David Stevens 2010-07-27 732 vq->log : NULL; ea16c5143 Michael S. Tsirkin 2014-06-05 733 mergeable = vhost_has_feature(vq, VIRTIO_NET_F_MRG_RXBUF); 8dd014adf David Stevens 2010-07-27 734 030881372 Jason Wang 2016-03-04 735 while ((sock_len = vhost_net_rx_peek_head_len(net, sock->sk))) { 8dd014adf David Stevens 2010-07-27 736 sock_len += sock_hlen; 8dd014adf David Stevens 2010-07-27 737 vhost_len = sock_len + vhost_hlen; f5a4941aa Jason Wang 2018-05-29 @738 headcount = get_rx_bufs(vq, vq->heads + nvq->done_idx, f5a4941aa Jason Wang 2018-05-29 739 vhost_len, &in, vq_log, &log, 94249369e Jason Wang 2011-01-17 740 likely(mergeable) ? UIO_MAXIOV : 1); 8dd014adf David Stevens 2010-07-27 741 /* On error, stop handling until the next kick. */ 8dd014adf David Stevens 2010-07-27 742 if (unlikely(headcount < 0)) 8241a1e46 Jason Wang 2016-06-01 743 goto out; 8dd014adf David Stevens 2010-07-27 744 /* OK, now we need to know about added descriptors. */ 8dd014adf David Stevens 2010-07-27 745 if (!headcount) { 8ea8cf89e Michael S. Tsirkin 2011-05-20 746 if (unlikely(vhost_enable_notify(&net->dev, vq))) { 8dd014adf David Stevens 2010-07-27 747 /* They have slipped one in as we were 8dd014adf David Stevens 2010-07-27 748 * doing that: check again. */ 8ea8cf89e Michael S. Tsirkin 2011-05-20 749 vhost_disable_notify(&net->dev, vq); 8dd014adf David Stevens 2010-07-27 750 continue; 8dd014adf David Stevens 2010-07-27 751 } 8dd014adf David Stevens 2010-07-27 752 /* Nothing new? Wait for eventfd to tell us 8dd014adf David Stevens 2010-07-27 753 * they refilled. */ 8241a1e46 Jason Wang 2016-06-01 754 goto out; 8dd014adf David Stevens 2010-07-27 755 } 5990a3051 Jason Wang 2018-01-04 756 if (nvq->rx_ring) 6e474083f Wei Xu 2017-12-01 757 msg.msg_control = vhost_net_buf_consume(&nvq->rxq); 6e474083f Wei Xu 2017-12-01 758 /* On overrun, truncate and discard */ 6e474083f Wei Xu 2017-12-01 759 if (unlikely(headcount > UIO_MAXIOV)) { 6e474083f Wei Xu 2017-12-01 760 iov_iter_init(&msg.msg_iter, READ, vq->iov, 1, 1); 6e474083f Wei Xu 2017-12-01 761 err = sock->ops->recvmsg(sock, &msg, 6e474083f Wei Xu 2017-12-01 762 1, MSG_DONTWAIT | MSG_TRUNC); 6e474083f Wei Xu 2017-12-01 763 pr_debug("Discarded rx packet: len %zd\n", sock_len); 6e474083f Wei Xu 2017-12-01 764 continue; 6e474083f Wei Xu 2017-12-01 765 } 8dd014adf David Stevens 2010-07-27 766 /* We don't need to be notified again. */ ba7438aed Al Viro 2014-12-10 767 iov_iter_init(&msg.msg_iter, READ, vq->iov, in, vhost_len); ba7438aed Al Viro 2014-12-10 768 fixup = msg.msg_iter; ba7438aed Al Viro 2014-12-10 769 if (unlikely((vhost_hlen))) { ba7438aed Al Viro 2014-12-10 770 /* We will supply the header ourselves ba7438aed Al Viro 2014-12-10 771 * TODO: support TSO. ba7438aed Al Viro 2014-12-10 772 */ ba7438aed Al Viro 2014-12-10 773 iov_iter_advance(&msg.msg_iter, vhost_hlen); ba7438aed Al Viro 2014-12-10 774 } 1b7841404 Ying Xue 2015-03-02 775 err = sock->ops->recvmsg(sock, &msg, 8dd014adf David Stevens 2010-07-27 776 sock_len, MSG_DONTWAIT | MSG_TRUNC); 8dd014adf David Stevens 2010-07-27 777 /* Userspace might have consumed the packet meanwhile: 8dd014adf David Stevens 2010-07-27 778 * it's not supposed to do this usually, but might be hard 8dd014adf David Stevens 2010-07-27 779 * to prevent. Discard data we got (if any) and keep going. */ 8dd014adf David Stevens 2010-07-27 780 if (unlikely(err != sock_len)) { 8dd014adf David Stevens 2010-07-27 781 pr_debug("Discarded rx packet: " 8dd014adf David Stevens 2010-07-27 782 " len %d, expected %zd\n", err, sock_len); 8dd014adf David Stevens 2010-07-27 783 vhost_discard_vq_desc(vq, headcount); 8dd014adf David Stevens 2010-07-27 784 continue; 8dd014adf David Stevens 2010-07-27 785 } ba7438aed Al Viro 2014-12-10 786 /* Supply virtio_net_hdr if VHOST_NET_F_VIRTIO_NET_HDR */ 4c5a84421 Michael S. Tsirkin 2015-02-25 787 if (unlikely(vhost_hlen)) { 4c5a84421 Michael S. Tsirkin 2015-02-25 788 if (copy_to_iter(&hdr, sizeof(hdr), 4c5a84421 Michael S. Tsirkin 2015-02-25 789 &fixup) != sizeof(hdr)) { 4c5a84421 Michael S. Tsirkin 2015-02-25 790 vq_err(vq, "Unable to write vnet_hdr " 4c5a84421 Michael S. Tsirkin 2015-02-25 791 "at addr %p\n", vq->iov->iov_base); 8241a1e46 Jason Wang 2016-06-01 792 goto out; 8dd014adf David Stevens 2010-07-27 793 } 4c5a84421 Michael S. Tsirkin 2015-02-25 794 } else { 4c5a84421 Michael S. Tsirkin 2015-02-25 795 /* Header came from socket; we'll need to patch 4c5a84421 Michael S. Tsirkin 2015-02-25 796 * ->num_buffers over if VIRTIO_NET_F_MRG_RXBUF 4c5a84421 Michael S. Tsirkin 2015-02-25 797 */ 4c5a84421 Michael S. Tsirkin 2015-02-25 798 iov_iter_advance(&fixup, sizeof(hdr)); 4c5a84421 Michael S. Tsirkin 2015-02-25 799 } 8dd014adf David Stevens 2010-07-27 800 /* TODO: Should check and handle checksum. */ 5201aa49b Michael S. Tsirkin 2015-02-03 801 0960b6417 Jason Wang 2015-02-15 802 num_buffers = cpu_to_vhost16(vq, headcount); cfbdab951 Jason Wang 2011-01-17 803 if (likely(mergeable) && 0d79a493e Michael S. Tsirkin 2015-02-25 804 copy_to_iter(&num_buffers, sizeof num_buffers, 0d79a493e Michael S. Tsirkin 2015-02-25 805 &fixup) != sizeof num_buffers) { 8dd014adf David Stevens 2010-07-27 806 vq_err(vq, "Failed num_buffers write"); 8dd014adf David Stevens 2010-07-27 807 vhost_discard_vq_desc(vq, headcount); 8241a1e46 Jason Wang 2016-06-01 808 goto out; 8dd014adf David Stevens 2010-07-27 809 } f5a4941aa Jason Wang 2018-05-29 810 nvq->done_idx += headcount; f5a4941aa Jason Wang 2018-05-29 811 if (nvq->done_idx > VHOST_RX_BATCH) f5a4941aa Jason Wang 2018-05-29 812 vhost_rx_signal_used(nvq); 8dd014adf David Stevens 2010-07-27 813 if (unlikely(vq_log)) 8dd014adf David Stevens 2010-07-27 814 vhost_log_write(vq, vq_log, log, vhost_len); 8dd014adf David Stevens 2010-07-27 815 total_len += vhost_len; db688c24e Paolo Abeni 2018-04-24 816 if (unlikely(total_len >= VHOST_NET_WEIGHT) || db688c24e Paolo Abeni 2018-04-24 817 unlikely(++recv_pkts >= VHOST_NET_PKT_WEIGHT)) { 8dd014adf David Stevens 2010-07-27 818 vhost_poll_queue(&vq->poll); 8241a1e46 Jason Wang 2016-06-01 819 goto out; 8dd014adf David Stevens 2010-07-27 820 } 8dd014adf David Stevens 2010-07-27 821 } 8241a1e46 Jason Wang 2016-06-01 822 vhost_net_enable_vq(net, vq); 2e26af79b Asias He 2013-05-07 823 out: f5a4941aa Jason Wang 2018-05-29 824 vhost_rx_signal_used(nvq); 8dd014adf David Stevens 2010-07-27 825 mutex_unlock(&vq->mutex); 8dd014adf David Stevens 2010-07-27 826 } 8dd014adf David Stevens 2010-07-27 827 :::::: The code at line 738 was first introduced by commit :::::: f5a4941aa6d190e676065e8f4ed35999f52a01c3 vhost_net: flush batched heads before trying to busy polling :::::: TO: Jason Wang <jasowang@xxxxxxxxxx> :::::: CC: David S. Miller <davem@xxxxxxxxxxxxx> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip