From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [RFC PATCH 1/2] move virtnet_send_command() above virtnet_set_mac_address() Date: Thu, 10 Jan 2013 22:51:52 +0800 Message-ID: <50EED588.9080706@redhat.com> References: <1357829141-25455-1-git-send-email-akong@redhat.com> <1357829141-25455-2-git-send-email-akong@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1357829141-25455-2-git-send-email-akong@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: akong@redhat.com Cc: virtualization@lists.linux-foundation.org, qemu-devel@nongnu.org, kvm@vger.kernel.org, mst@redhat.com List-Id: virtualization@lists.linuxfoundation.org On 01/10/2013 10:45 PM, akong@redhat.com wrote: > From: Amos Kong > > We will send vq command to set mac address in virtnet_set_mac_address() > a little fix of coding style Maybe what you need is just a forward declaration. > > Signed-off-by: Amos Kong > --- > drivers/net/virtio_net.c | 89 ++++++++++++++++++++++++------------------------ > 1 file changed, 44 insertions(+), 45 deletions(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index a6fcf15..395ab4f 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -753,6 +753,50 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) > return NETDEV_TX_OK; > } > > +/* > + * Send command via the control virtqueue and check status. Commands > + * supported by the hypervisor, as indicated by feature bits, should > + * never fail unless improperly formated. > + */ > +static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd, > + struct scatterlist *data, int out, int in) > +{ > + struct scatterlist *s, sg[VIRTNET_SEND_COMMAND_SG_MAX + 2]; > + struct virtio_net_ctrl_hdr ctrl; > + virtio_net_ctrl_ack status = ~0; > + unsigned int tmp; > + int i; > + > + /* Caller should know better */ > + BUG_ON(!virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ) || > + (out + in > VIRTNET_SEND_COMMAND_SG_MAX)); > + > + out++; /* Add header */ > + in++; /* Add return status */ > + > + ctrl.class = class; > + ctrl.cmd = cmd; > + > + sg_init_table(sg, out + in); > + > + sg_set_buf(&sg[0], &ctrl, sizeof(ctrl)); > + for_each_sg(data, s, out + in - 2, i) > + sg_set_buf(&sg[i + 1], sg_virt(s), s->length); > + sg_set_buf(&sg[out + in - 1], &status, sizeof(status)); > + > + BUG_ON(virtqueue_add_buf(vi->cvq, sg, out, in, vi, GFP_ATOMIC) < 0); > + > + virtqueue_kick(vi->cvq); > + > + /* Spin for a response, the kick causes an ioport write, trapping > + * into the hypervisor, so the request should be handled immediately. > + */ > + while (!virtqueue_get_buf(vi->cvq, &tmp)) > + cpu_relax(); > + > + return status == VIRTIO_NET_OK; > +} > + > static int virtnet_set_mac_address(struct net_device *dev, void *p) > { > struct virtnet_info *vi = netdev_priv(dev); > @@ -819,51 +863,6 @@ static void virtnet_netpoll(struct net_device *dev) > } > #endif > > -/* > - * Send command via the control virtqueue and check status. Commands > - * supported by the hypervisor, as indicated by feature bits, should > - * never fail unless improperly formated. > - */ > -static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd, > - struct scatterlist *data, int out, int in) > -{ > - struct scatterlist *s, sg[VIRTNET_SEND_COMMAND_SG_MAX + 2]; > - struct virtio_net_ctrl_hdr ctrl; > - virtio_net_ctrl_ack status = ~0; > - unsigned int tmp; > - int i; > - > - /* Caller should know better */ > - BUG_ON(!virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ) || > - (out + in > VIRTNET_SEND_COMMAND_SG_MAX)); > - > - out++; /* Add header */ > - in++; /* Add return status */ > - > - ctrl.class = class; > - ctrl.cmd = cmd; > - > - sg_init_table(sg, out + in); > - > - sg_set_buf(&sg[0], &ctrl, sizeof(ctrl)); > - for_each_sg(data, s, out + in - 2, i) > - sg_set_buf(&sg[i + 1], sg_virt(s), s->length); > - sg_set_buf(&sg[out + in - 1], &status, sizeof(status)); > - > - BUG_ON(virtqueue_add_buf(vi->cvq, sg, out, in, vi, GFP_ATOMIC) < 0); > - > - virtqueue_kick(vi->cvq); > - > - /* > - * Spin for a response, the kick causes an ioport write, trapping > - * into the hypervisor, so the request should be handled immediately. > - */ > - while (!virtqueue_get_buf(vi->cvq, &tmp)) > - cpu_relax(); > - > - return status == VIRTIO_NET_OK; > -} > - > static void virtnet_ack_link_announce(struct virtnet_info *vi) > { > rtnl_lock();