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:
Коммит
301d95c4da
|
@ -30,7 +30,7 @@
|
|||
#include <asm/hw_irq.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",
|
||||
* 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);
|
||||
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. */
|
||||
/* We only allow kernel to see SSE3, CMPXCHG16B and SSSE3 */
|
||||
*cx &= 0x00002201;
|
||||
|
@ -1079,7 +1084,7 @@ static unsigned lguest_patch(u8 type, u16 clobber, void *ibuf,
|
|||
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
|
||||
* have to override to avoid privileged instructions. */
|
||||
__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.
|
||||
*/
|
||||
if (!virtio_has_feature(vblk->vdev, VIRTIO_BLK_F_SCSI))
|
||||
return -ENOIOCTLCMD;
|
||||
return -ENOTTY;
|
||||
|
||||
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_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. */
|
||||
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_ALL 3
|
||||
|
||||
struct lguest;
|
||||
|
||||
struct lg_cpu {
|
||||
unsigned int id;
|
||||
struct lguest *lg;
|
||||
|
|
|
@ -669,7 +669,7 @@ static int __init virtio_pci_init(void)
|
|||
|
||||
err = pci_register_driver(&virtio_pci_driver);
|
||||
if (err)
|
||||
device_unregister(virtio_pci_root);
|
||||
root_device_unregister(virtio_pci_root);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#define LG_CLOCK_MIN_DELTA 100UL
|
||||
#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
|
||||
* this is, the Guest and Host both publish information in it. :*/
|
||||
struct lguest_data
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#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_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 */
|
||||
|
||||
|
@ -81,14 +82,19 @@ typedef __u8 virtio_net_ctrl_ack;
|
|||
#define VIRTIO_NET_ERR 1
|
||||
|
||||
/*
|
||||
* Control the RX mode, ie. promisucous and allmulti. PROMISC and
|
||||
* ALLMULTI commands require an "out" sg entry containing a 1 byte
|
||||
* state value, zero = disable, non-zero = enable. These commands
|
||||
* are supported with the VIRTIO_NET_F_CTRL_RX feature.
|
||||
* Control the RX mode, ie. promisucous, allmulti, etc...
|
||||
* All commands require an "out" sg entry containing a 1 byte
|
||||
* state value, zero = disable, non-zero = enable. Commands
|
||||
* 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_PROMISC 0
|
||||
#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.
|
||||
|
|
Загрузка…
Ссылка в новой задаче