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
This commit is contained in:
commit
301d95c4da
7 changed files with 23 additions and 11 deletions
|
@ -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,
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
* 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)
|
||||||
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
|
||||||
#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)
|
||||||
|
|
||||||
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 @@
|
||||||
#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 @@
|
||||||
#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;
|
||||||
#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.
|
||||||
|
|
Loading…
Add table
Reference in a new issue