Commit 5f129721 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux

Pull virtio updates from Rusty Russell:
 "No real surprises"

* tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux:
  MAINTAINERS: add tools/virtio/ under virtio
  tools/virtio: move module license stub to module.h
  virtio: include asm/barrier explicitly
  virtio: VIRTIO_F_ANY_LAYOUT feature
  lguest: fix example launcher compilation for broken glibc headers.
  virtio-net: fix the race between channels setting and refill
  tools/lguest: real barriers.
  tools/lguest: fix missing rmb().
  virtio_balloon: leak_balloon(): only tell host if we got pages deflated
  virtio-pci: fix leaks of msix_affinity_masks
  Fix comment typo "CONFIG_PAE"
parents 15a49b9a c893c8d7
...@@ -8890,6 +8890,7 @@ M: "Michael S. Tsirkin" <mst@redhat.com> ...@@ -8890,6 +8890,7 @@ M: "Michael S. Tsirkin" <mst@redhat.com>
L: virtualization@lists.linux-foundation.org L: virtualization@lists.linux-foundation.org
S: Maintained S: Maintained
F: drivers/virtio/ F: drivers/virtio/
F: tools/virtio/
F: drivers/net/virtio_net.c F: drivers/net/virtio_net.c
F: drivers/block/virtio_blk.c F: drivers/block/virtio_blk.c
F: include/linux/virtio_*.h F: include/linux/virtio_*.h
......
...@@ -902,7 +902,6 @@ static int virtnet_set_queues(struct virtnet_info *vi, u16 queue_pairs) ...@@ -902,7 +902,6 @@ static int virtnet_set_queues(struct virtnet_info *vi, u16 queue_pairs)
struct scatterlist sg; struct scatterlist sg;
struct virtio_net_ctrl_mq s; struct virtio_net_ctrl_mq s;
struct net_device *dev = vi->dev; struct net_device *dev = vi->dev;
int i;
if (!vi->has_cvq || !virtio_has_feature(vi->vdev, VIRTIO_NET_F_MQ)) if (!vi->has_cvq || !virtio_has_feature(vi->vdev, VIRTIO_NET_F_MQ))
return 0; return 0;
...@@ -916,10 +915,8 @@ static int virtnet_set_queues(struct virtnet_info *vi, u16 queue_pairs) ...@@ -916,10 +915,8 @@ static int virtnet_set_queues(struct virtnet_info *vi, u16 queue_pairs)
queue_pairs); queue_pairs);
return -EINVAL; return -EINVAL;
} else { } else {
for (i = vi->curr_queue_pairs; i < queue_pairs; i++)
if (!try_fill_recv(&vi->rq[i], GFP_KERNEL))
schedule_delayed_work(&vi->refill, 0);
vi->curr_queue_pairs = queue_pairs; vi->curr_queue_pairs = queue_pairs;
schedule_delayed_work(&vi->refill, 0);
} }
return 0; return 0;
......
...@@ -192,6 +192,7 @@ static void leak_balloon(struct virtio_balloon *vb, size_t num) ...@@ -192,6 +192,7 @@ static void leak_balloon(struct virtio_balloon *vb, size_t num)
* virtio_has_feature(vdev, VIRTIO_BALLOON_F_MUST_TELL_HOST); * virtio_has_feature(vdev, VIRTIO_BALLOON_F_MUST_TELL_HOST);
* is true, we *have* to do it in this order * is true, we *have* to do it in this order
*/ */
if (vb->num_pfns != 0)
tell_host(vb, vb->deflate_vq); tell_host(vb, vb->deflate_vq);
mutex_unlock(&vb->balloon_lock); mutex_unlock(&vb->balloon_lock);
release_pages_by_pfn(vb->pfns, vb->num_pfns); release_pages_by_pfn(vb->pfns, vb->num_pfns);
......
...@@ -289,9 +289,9 @@ static void vp_free_vectors(struct virtio_device *vdev) ...@@ -289,9 +289,9 @@ static void vp_free_vectors(struct virtio_device *vdev)
pci_disable_msix(vp_dev->pci_dev); pci_disable_msix(vp_dev->pci_dev);
vp_dev->msix_enabled = 0; vp_dev->msix_enabled = 0;
vp_dev->msix_vectors = 0;
} }
vp_dev->msix_vectors = 0;
vp_dev->msix_used_vectors = 0; vp_dev->msix_used_vectors = 0;
kfree(vp_dev->msix_names); kfree(vp_dev->msix_names);
vp_dev->msix_names = NULL; vp_dev->msix_names = NULL;
...@@ -309,6 +309,8 @@ static int vp_request_msix_vectors(struct virtio_device *vdev, int nvectors, ...@@ -309,6 +309,8 @@ static int vp_request_msix_vectors(struct virtio_device *vdev, int nvectors,
unsigned i, v; unsigned i, v;
int err = -ENOMEM; int err = -ENOMEM;
vp_dev->msix_vectors = nvectors;
vp_dev->msix_entries = kmalloc(nvectors * sizeof *vp_dev->msix_entries, vp_dev->msix_entries = kmalloc(nvectors * sizeof *vp_dev->msix_entries,
GFP_KERNEL); GFP_KERNEL);
if (!vp_dev->msix_entries) if (!vp_dev->msix_entries)
...@@ -336,7 +338,6 @@ static int vp_request_msix_vectors(struct virtio_device *vdev, int nvectors, ...@@ -336,7 +338,6 @@ static int vp_request_msix_vectors(struct virtio_device *vdev, int nvectors,
err = -ENOSPC; err = -ENOSPC;
if (err) if (err)
goto error; goto error;
vp_dev->msix_vectors = nvectors;
vp_dev->msix_enabled = 1; vp_dev->msix_enabled = 1;
/* Set the vector used for configuration */ /* Set the vector used for configuration */
......
#ifndef _LINUX_VIRTIO_RING_H #ifndef _LINUX_VIRTIO_RING_H
#define _LINUX_VIRTIO_RING_H #define _LINUX_VIRTIO_RING_H
#include <asm/barrier.h>
#include <linux/irqreturn.h> #include <linux/irqreturn.h>
#include <uapi/linux/virtio_ring.h> #include <uapi/linux/virtio_ring.h>
......
...@@ -51,4 +51,7 @@ ...@@ -51,4 +51,7 @@
* suppressed them? */ * suppressed them? */
#define VIRTIO_F_NOTIFY_ON_EMPTY 24 #define VIRTIO_F_NOTIFY_ON_EMPTY 24
/* Can the device handle any descriptor layout? */
#define VIRTIO_F_ANY_LAYOUT 27
#endif /* _UAPI_LINUX_VIRTIO_CONFIG_H */ #endif /* _UAPI_LINUX_VIRTIO_CONFIG_H */
# This creates the demonstration utility "lguest" which runs a Linux guest. # This creates the demonstration utility "lguest" which runs a Linux guest.
# Missing headers? Add "-I../../../include -I../../../arch/x86/include"
CFLAGS:=-m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -U_FORTIFY_SOURCE CFLAGS:=-m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -U_FORTIFY_SOURCE
all: lguest all: lguest
......
...@@ -42,14 +42,6 @@ ...@@ -42,14 +42,6 @@
#include <pwd.h> #include <pwd.h>
#include <grp.h> #include <grp.h>
#include <linux/virtio_config.h>
#include <linux/virtio_net.h>
#include <linux/virtio_blk.h>
#include <linux/virtio_console.h>
#include <linux/virtio_rng.h>
#include <linux/virtio_ring.h>
#include <asm/bootparam.h>
#include "../../include/linux/lguest_launcher.h"
/*L:110 /*L:110
* We can ignore the 43 include files we need for this program, but I do want * We can ignore the 43 include files we need for this program, but I do want
* to draw attention to the use of kernel-style types. * to draw attention to the use of kernel-style types.
...@@ -65,6 +57,15 @@ typedef uint16_t u16; ...@@ -65,6 +57,15 @@ typedef uint16_t u16;
typedef uint8_t u8; typedef uint8_t u8;
/*:*/ /*:*/
#include <linux/virtio_config.h>
#include <linux/virtio_net.h>
#include <linux/virtio_blk.h>
#include <linux/virtio_console.h>
#include <linux/virtio_rng.h>
#include <linux/virtio_ring.h>
#include <asm/bootparam.h>
#include "../../include/linux/lguest_launcher.h"
#define BRIDGE_PFX "bridge:" #define BRIDGE_PFX "bridge:"
#ifndef SIOCBRADDIF #ifndef SIOCBRADDIF
#define SIOCBRADDIF 0x89a2 /* add interface to bridge */ #define SIOCBRADDIF 0x89a2 /* add interface to bridge */
...@@ -177,7 +178,8 @@ static struct termios orig_term; ...@@ -177,7 +178,8 @@ static struct termios orig_term;
* in precise order. * in precise order.
*/ */
#define wmb() __asm__ __volatile__("" : : : "memory") #define wmb() __asm__ __volatile__("" : : : "memory")
#define mb() __asm__ __volatile__("" : : : "memory") #define rmb() __asm__ __volatile__("lock; addl $0,0(%%esp)" : : : "memory")
#define mb() __asm__ __volatile__("lock; addl $0,0(%%esp)" : : : "memory")
/* Wrapper for the last available index. Makes it easier to change. */ /* Wrapper for the last available index. Makes it easier to change. */
#define lg_last_avail(vq) ((vq)->last_avail_idx) #define lg_last_avail(vq) ((vq)->last_avail_idx)
...@@ -676,6 +678,12 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq, ...@@ -676,6 +678,12 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq,
errx(1, "Guest moved used index from %u to %u", errx(1, "Guest moved used index from %u to %u",
last_avail, vq->vring.avail->idx); last_avail, vq->vring.avail->idx);
/*
* Make sure we read the descriptor number *after* we read the ring
* update; don't let the cpu or compiler change the order.
*/
rmb();
/* /*
* Grab the next descriptor number they're advertising, and increment * Grab the next descriptor number they're advertising, and increment
* the index we've seen. * the index we've seen.
...@@ -694,6 +702,12 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq, ...@@ -694,6 +702,12 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq,
desc = vq->vring.desc; desc = vq->vring.desc;
i = head; i = head;
/*
* We have to read the descriptor after we read the descriptor number,
* but there's a data dependency there so the CPU shouldn't reorder
* that: no rmb() required.
*/
/* /*
* If this is an indirect entry, then this buffer contains a descriptor * If this is an indirect entry, then this buffer contains a descriptor
* table which we handle as if it's any normal descriptor chain. * table which we handle as if it's any normal descriptor chain.
......
#include <linux/export.h> #include <linux/export.h>
#define MODULE_LICENSE(__MODULE_LICENSE_value) \
static __attribute__((unused)) const char *__MODULE_LICENSE_name = \
__MODULE_LICENSE_value
...@@ -45,9 +45,6 @@ struct virtqueue { ...@@ -45,9 +45,6 @@ struct virtqueue {
void *priv; void *priv;
}; };
#define MODULE_LICENSE(__MODULE_LICENSE_value) \
const char *__MODULE_LICENSE_name = __MODULE_LICENSE_value
/* Interfaces exported by virtio_ring. */ /* Interfaces exported by virtio_ring. */
int virtqueue_add_sgs(struct virtqueue *vq, int virtqueue_add_sgs(struct virtqueue *vq,
struct scatterlist *sgs[], struct scatterlist *sgs[],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment