Commit 301d95c4 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus

* git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus:
  virtio_net: Sync header with qemu
  virtio-pci: correctly unregister root device on error
  virtio_blk: ioctl return value fix
  virtio_blk: don't bounce highmem requests
  lguest: restrict CPUID to avoid perf counter wrmsr
  lguest: remove unnecessary forward struct declaration
  lguest: fix journey
parents b983d0de e79f07e2
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include <asm/hw_irq.h> #include <asm/hw_irq.h>
#include <asm/kvm_para.h> #include <asm/kvm_para.h>
/*G:031 But first, how does our Guest contact the Host to ask for privileged /*G:030 But first, how does our Guest contact the Host to ask for privileged
* operations? There are two ways: the direct way is to make a "hypercall", * operations? There are two ways: the direct way is to make a "hypercall",
* to make requests of the Host Itself. * to make requests of the Host Itself.
* *
......
...@@ -379,6 +379,11 @@ static void lguest_cpuid(unsigned int *ax, unsigned int *bx, ...@@ -379,6 +379,11 @@ static void lguest_cpuid(unsigned int *ax, unsigned int *bx,
native_cpuid(ax, bx, cx, dx); native_cpuid(ax, bx, cx, dx);
switch (function) { switch (function) {
case 0: /* ID and highest CPUID. Futureproof a little by sticking to
* older ones. */
if (*ax > 5)
*ax = 5;
break;
case 1: /* Basic feature request. */ case 1: /* Basic feature request. */
/* We only allow kernel to see SSE3, CMPXCHG16B and SSSE3 */ /* We only allow kernel to see SSE3, CMPXCHG16B and SSSE3 */
*cx &= 0x00002201; *cx &= 0x00002201;
...@@ -1079,7 +1084,7 @@ static unsigned lguest_patch(u8 type, u16 clobber, void *ibuf, ...@@ -1079,7 +1084,7 @@ static unsigned lguest_patch(u8 type, u16 clobber, void *ibuf,
return insn_len; return insn_len;
} }
/*G:030 Once we get to lguest_init(), we know we're a Guest. The various /*G:029 Once we get to lguest_init(), we know we're a Guest. The various
* pv_ops structures in the kernel provide points for (almost) every routine we * pv_ops structures in the kernel provide points for (almost) every routine we
* have to override to avoid privileged instructions. */ * have to override to avoid privileged instructions. */
__init void lguest_init(void) __init void lguest_init(void)
......
...@@ -213,7 +213,7 @@ static int virtblk_ioctl(struct block_device *bdev, fmode_t mode, ...@@ -213,7 +213,7 @@ static int virtblk_ioctl(struct block_device *bdev, fmode_t mode,
* Only allow the generic SCSI ioctls if the host can support it. * Only allow the generic SCSI ioctls if the host can support it.
*/ */
if (!virtio_has_feature(vblk->vdev, VIRTIO_BLK_F_SCSI)) if (!virtio_has_feature(vblk->vdev, VIRTIO_BLK_F_SCSI))
return -ENOIOCTLCMD; return -ENOTTY;
return scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp); return scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp);
} }
...@@ -360,6 +360,9 @@ static int __devinit virtblk_probe(struct virtio_device *vdev) ...@@ -360,6 +360,9 @@ static int __devinit virtblk_probe(struct virtio_device *vdev)
blk_queue_max_phys_segments(vblk->disk->queue, vblk->sg_elems-2); blk_queue_max_phys_segments(vblk->disk->queue, vblk->sg_elems-2);
blk_queue_max_hw_segments(vblk->disk->queue, vblk->sg_elems-2); blk_queue_max_hw_segments(vblk->disk->queue, vblk->sg_elems-2);
/* No need to bounce any requests */
blk_queue_bounce_limit(vblk->disk->queue, BLK_BOUNCE_ANY);
/* No real sector limit. */ /* No real sector limit. */
blk_queue_max_sectors(vblk->disk->queue, -1U); blk_queue_max_sectors(vblk->disk->queue, -1U);
......
...@@ -38,8 +38,6 @@ struct lguest_pages ...@@ -38,8 +38,6 @@ struct lguest_pages
#define CHANGED_GDT_TLS 4 /* Actually a subset of CHANGED_GDT */ #define CHANGED_GDT_TLS 4 /* Actually a subset of CHANGED_GDT */
#define CHANGED_ALL 3 #define CHANGED_ALL 3
struct lguest;
struct lg_cpu { struct lg_cpu {
unsigned int id; unsigned int id;
struct lguest *lg; struct lguest *lg;
......
...@@ -669,7 +669,7 @@ static int __init virtio_pci_init(void) ...@@ -669,7 +669,7 @@ static int __init virtio_pci_init(void)
err = pci_register_driver(&virtio_pci_driver); err = pci_register_driver(&virtio_pci_driver);
if (err) if (err)
device_unregister(virtio_pci_root); root_device_unregister(virtio_pci_root);
return err; return err;
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#define LG_CLOCK_MIN_DELTA 100UL #define LG_CLOCK_MIN_DELTA 100UL
#define LG_CLOCK_MAX_DELTA ULONG_MAX #define LG_CLOCK_MAX_DELTA ULONG_MAX
/*G:032 The second method of communicating with the Host is to via "struct /*G:031 The second method of communicating with the Host is to via "struct
* lguest_data". Once the Guest's initialization hypercall tells the Host where * lguest_data". Once the Guest's initialization hypercall tells the Host where
* this is, the Guest and Host both publish information in it. :*/ * this is, the Guest and Host both publish information in it. :*/
struct lguest_data struct lguest_data
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#define VIRTIO_NET_F_CTRL_VQ 17 /* Control channel available */ #define VIRTIO_NET_F_CTRL_VQ 17 /* Control channel available */
#define VIRTIO_NET_F_CTRL_RX 18 /* Control channel RX mode support */ #define VIRTIO_NET_F_CTRL_RX 18 /* Control channel RX mode support */
#define VIRTIO_NET_F_CTRL_VLAN 19 /* Control channel VLAN filtering */ #define VIRTIO_NET_F_CTRL_VLAN 19 /* Control channel VLAN filtering */
#define VIRTIO_NET_F_CTRL_RX_EXTRA 20 /* Extra RX mode control support */
#define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */
...@@ -81,14 +82,19 @@ typedef __u8 virtio_net_ctrl_ack; ...@@ -81,14 +82,19 @@ typedef __u8 virtio_net_ctrl_ack;
#define VIRTIO_NET_ERR 1 #define VIRTIO_NET_ERR 1
/* /*
* Control the RX mode, ie. promisucous and allmulti. PROMISC and * Control the RX mode, ie. promisucous, allmulti, etc...
* ALLMULTI commands require an "out" sg entry containing a 1 byte * All commands require an "out" sg entry containing a 1 byte
* state value, zero = disable, non-zero = enable. These commands * state value, zero = disable, non-zero = enable. Commands
* are supported with the VIRTIO_NET_F_CTRL_RX feature. * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature.
* Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA.
*/ */
#define VIRTIO_NET_CTRL_RX 0 #define VIRTIO_NET_CTRL_RX 0
#define VIRTIO_NET_CTRL_RX_PROMISC 0 #define VIRTIO_NET_CTRL_RX_PROMISC 0
#define VIRTIO_NET_CTRL_RX_ALLMULTI 1 #define VIRTIO_NET_CTRL_RX_ALLMULTI 1
#define VIRTIO_NET_CTRL_RX_ALLUNI 2
#define VIRTIO_NET_CTRL_RX_NOMULTI 3
#define VIRTIO_NET_CTRL_RX_NOUNI 4
#define VIRTIO_NET_CTRL_RX_NOBCAST 5
/* /*
* Control the MAC filter table. * Control the MAC filter table.
......
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