From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752192AbcGRXD2 (ORCPT ); Mon, 18 Jul 2016 19:03:28 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49415 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751767AbcGRXD0 (ORCPT ); Mon, 18 Jul 2016 19:03:26 -0400 Date: Tue, 19 Jul 2016 02:03:13 +0300 From: "Michael S. Tsirkin" To: Andy Lutomirski Cc: "David S. Miller" , x86@kernel.org, Borislav Petkov , linux-kernel@vger.kernel.org, "netdev@vger.kernel.org" Subject: Re: [PATCH resend] virtio-net: Remove more stack DMA Message-ID: <20160719015549-mutt-send-email-mst@redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Mon, 18 Jul 2016 23:03:26 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jul 18, 2016 at 03:34:49PM -0700, Andy Lutomirski wrote: > VLAN and MQ control was doing DMA from the stack. Fix it. > > Cc: Michael S. Tsirkin > Cc: "netdev@vger.kernel.org" > Signed-off-by: Andy Lutomirski Acked-by: Michael S. Tsirkin > --- > > I tested VLAN addition and removal with CONFIG_VMAP_STACK=y, > CONFIG_DEBUG_SG=y and it got rid of the warnings I saw. I haven't > tested the MQ part because I don't know how to enable it in the first > place (I'm guessing it needs me to enable some QEMU feature I don't > know about.) > > DaveM, contrary to what I thought last time I sent this, I think this > should go through net-next as long as it makes it in time for 4.8. > > drivers/net/virtio_net.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index e0638e556fe7..5044ca37d725 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -144,8 +144,10 @@ struct virtnet_info { > /* Control VQ buffers: protected by the rtnl lock */ > struct virtio_net_ctrl_hdr ctrl_hdr; > virtio_net_ctrl_ack ctrl_status; > + struct virtio_net_ctrl_mq ctrl_mq; > u8 ctrl_promisc; > u8 ctrl_allmulti; > + u16 ctrl_vid; > > /* Ethtool settings */ > u8 duplex; > @@ -1116,14 +1118,13 @@ static void virtnet_ack_link_announce(struct virtnet_info *vi) > static int virtnet_set_queues(struct virtnet_info *vi, u16 queue_pairs) > { > struct scatterlist sg; > - struct virtio_net_ctrl_mq s; > struct net_device *dev = vi->dev; > > if (!vi->has_cvq || !virtio_has_feature(vi->vdev, VIRTIO_NET_F_MQ)) > return 0; > > - s.virtqueue_pairs = cpu_to_virtio16(vi->vdev, queue_pairs); > - sg_init_one(&sg, &s, sizeof(s)); > + vi->ctrl_mq.virtqueue_pairs = cpu_to_virtio16(vi->vdev, queue_pairs); > + sg_init_one(&sg, &vi->ctrl_mq, sizeof(vi->ctrl_mq)); > > if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_MQ, > VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET, &sg)) { > @@ -1230,7 +1231,8 @@ static int virtnet_vlan_rx_add_vid(struct net_device *dev, > struct virtnet_info *vi = netdev_priv(dev); > struct scatterlist sg; > > - sg_init_one(&sg, &vid, sizeof(vid)); > + vi->ctrl_vid = vid; > + sg_init_one(&sg, &vi->ctrl_vid, sizeof(vi->ctrl_vid)); > > if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_VLAN, > VIRTIO_NET_CTRL_VLAN_ADD, &sg)) > @@ -1244,7 +1246,8 @@ static int virtnet_vlan_rx_kill_vid(struct net_device *dev, > struct virtnet_info *vi = netdev_priv(dev); > struct scatterlist sg; > > - sg_init_one(&sg, &vid, sizeof(vid)); > + vi->ctrl_vid = vid; > + sg_init_one(&sg, &vi->ctrl_vid, sizeof(vi->ctrl_vid)); > > if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_VLAN, > VIRTIO_NET_CTRL_VLAN_DEL, &sg)) > -- > 2.7.4