]> git.karo-electronics.de Git - karo-tx-linux.git/log
karo-tx-linux.git
13 years agokvm tools: Respect VRING_AVAIL_F_NO_INTERRUPT
Asias He [Sat, 7 May 2011 02:34:20 +0000 (10:34 +0800)]
kvm tools: Respect VRING_AVAIL_F_NO_INTERRUPT

Do not inject IRQ when guest suppress it.

This can reduce IRQ injection further and bumps
host to guest bandwitdh to 6178.78 Mbps(cpu 63.96%).

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Respect ISR status in virtio header
Asias He [Sat, 7 May 2011 02:34:19 +0000 (10:34 +0800)]
kvm tools: Respect ISR status in virtio header

Inject IRQ to guest only when ISR status is low which means
guest has read ISR status and device has cleared this bit as
the side effect of this reading.

This reduces a lot of unnecessary IRQ inject from device to
guest.

Netpef test shows this patch changes:

the host to guest bandwidth
from 2866.27 Mbps (cpu 33.96%) to 5548.87 Mbps (cpu 53.87%),

the guest to host bandwitdth
form 1408.86 Mbps (cpu 99.9%) to 1301.29 Mbps (cpu 99.9%).

The bottleneck of the guest to host bandwidth is guest cpu power.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Gather Virtio-PCI constants into one place
Cyrill Gorcunov [Thu, 5 May 2011 19:06:40 +0000 (23:06 +0400)]
kvm tools: Gather Virtio-PCI constants into one place

It's better than have them sprinkled in.c files. Note
that pin for ring device is changed so it no longer shared
with block device (it is done in a sake of simplicity).

Also comment style if a bit tuned up in virtio-pci.h
just to be consistent.

Reported-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix loading root device as image
Sasha Levin [Thu, 5 May 2011 19:53:32 +0000 (22:53 +0300)]
kvm tools: Fix loading root device as image

Fix the loading of root device when no image name was
specified.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Cleanup virtio code some more
Pekka Enberg [Thu, 5 May 2011 19:45:49 +0000 (22:45 +0300)]
kvm tools: Cleanup virtio code some more

This patch cleans up some more style problems in virtio code.

Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Prasad Joshi <prasadjoshi124@gmail.com>
Cc: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: virtio-rng code cleanup
Sasha Levin [Thu, 5 May 2011 19:16:54 +0000 (22:16 +0300)]
kvm tools: virtio-rng code cleanup

Clean coding style and naming within virtio-rng.

Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: virtio-net code cleanup
Sasha Levin [Thu, 5 May 2011 18:34:34 +0000 (21:34 +0300)]
kvm tools: virtio-net code cleanup

Clean coding style and naming within virtio-net.

Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: virtio-console code cleanup
Sasha Levin [Thu, 5 May 2011 18:34:33 +0000 (21:34 +0300)]
kvm tools: virtio-console code cleanup

Clean coding style and naming within virtio-console.

Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: virtio-blk code cleanup
Sasha Levin [Thu, 5 May 2011 18:34:32 +0000 (21:34 +0300)]
kvm tools: virtio-blk code cleanup

Clean coding style and naming within virtio-blk.

Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Abolishment of uint*_t types
Sasha Levin [Thu, 5 May 2011 18:34:31 +0000 (21:34 +0300)]
kvm tools: Abolishment of uint*_t types

Clean uint*_t type from the code.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Move virtio drivers under virtio directory
Pekka Enberg [Thu, 5 May 2011 14:39:19 +0000 (17:39 +0300)]
kvm tools: Move virtio drivers under virtio directory

This patch moves the virtio drivers under virtio directory.

Suggested-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add cmdline options for loading multiple images
Sasha Levin [Thu, 5 May 2011 10:24:31 +0000 (13:24 +0300)]
kvm tools: Add cmdline options for loading multiple images

Introduced new syntax for loading disk images.
Example:

./kvm run --image image1.img,ro --image image2.img

Will load image1.img with read only, and image2.img as
read/write.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add support for multiple virtio-blk
Sasha Levin [Thu, 5 May 2011 10:24:30 +0000 (13:24 +0300)]
kvm tools: Add support for multiple virtio-blk

Add support for multiple blk_devices by un-globalizing
the current blk_device and allow multiple blk_devices.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Move disk_image into virtio-blk
Sasha Levin [Thu, 5 May 2011 10:24:29 +0000 (13:24 +0300)]
kvm tools: Move disk_image into virtio-blk

There may be multiple disk images on a running guest,
each associated with a virtio-blk.

Move disk_image into virtio-blk in preperation for
multiple disk images.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix 32-bit build of the asm/system.h include
Ingo Molnar [Thu, 5 May 2011 08:00:45 +0000 (10:00 +0200)]
kvm tools: Fix 32-bit build of the asm/system.h include

Provide wrappers and other environmental dependencies that the
asm/system.h header file from hell needs to build fine in user-space.

Sidenote: right now alternative() defaults to the compatible, slightly
slower barrier instructions that work on all x86 systems.

If this ever shows up in profiles then kvm could provide an alternatives
patching machinery as well. Right now those instructions are emitted
into special sections and then discarded by the linker harmlessly.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix virt_queue__set_used_elem
Sasha Levin [Tue, 3 May 2011 20:28:07 +0000 (23:28 +0300)]
kvm tools: Fix virt_queue__set_used_elem

Increase idx only after updating the used element.
Not doing so may mark a buffer as used without having
it's head and length updated.

Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Drop ALIGN from bios.h
Sasha Levin [Tue, 3 May 2011 20:28:06 +0000 (23:28 +0300)]
kvm tools: Drop ALIGN from bios.h

Drops align from bios.h, fixes related code to use
<linux/kernel.h> instead.

Acked-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix virtio rng build breakage
Pekka Enberg [Tue, 3 May 2011 14:04:35 +0000 (17:04 +0300)]
kvm tools: Fix virtio rng build breakage

Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add cmdline switch to enable virtio-rng
Sasha Levin [Sat, 30 Apr 2011 13:30:25 +0000 (16:30 +0300)]
kvm tools: Add cmdline switch to enable virtio-rng

Add --virtio-rnd switch to enable virtio RNG in the guest.
Once enabled, The RNG device will be located at /dev/hwrng.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Introduce virtio-rng
Sasha Levin [Sat, 30 Apr 2011 13:30:24 +0000 (16:30 +0300)]
kvm tools: Introduce virtio-rng

Enable virtio-rng, a virtio random number generator.
Guest kernel should be compiled with CONFIG_HW_RANDOM_VIRTIO.
Once enabled, A RNG device will be located at /dev/hwrng.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Lock job_mutex before signalling
Sasha Levin [Sat, 30 Apr 2011 13:30:23 +0000 (16:30 +0300)]
kvm tools: Lock job_mutex before signalling

Locking mutex before signalling to prevent unexpected
scheduling.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Modify thread pool API
Sasha Levin [Fri, 29 Apr 2011 15:15:02 +0000 (18:15 +0300)]
kvm tools: Modify thread pool API

Modify API function names and type names.

[ penberg@kernel.org: drop virtio net parts ]
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agoRevert "kvm tools: Use threadpool for virtio-net"
Pekka Enberg [Sat, 30 Apr 2011 09:15:57 +0000 (12:15 +0300)]
Revert "kvm tools: Use threadpool for virtio-net"

This reverts commit a37089da817ce7aad9789aeb9fc09b68e088ad9a.

13 years agokvm tools: Emulate RTC to fix system time in guests
Pekka Enberg [Thu, 28 Apr 2011 18:50:17 +0000 (21:50 +0300)]
kvm tools: Emulate RTC to fix system time in guests

This patch fixes system time in guests by implementing proper CMOS RTC clock
support.

  # Before:

  sh-2.05b# date
  Fri Aug  7 04:02:01 UTC 2009

  # After:

  sh-2.05b# date
  Thu Apr 28 19:12:21 UTC 2011

Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Prasad Joshi <prasadjoshi124@gmail.com>
Cc: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix disk image double-free on KVM panic
Pekka Enberg [Thu, 28 Apr 2011 18:36:35 +0000 (21:36 +0300)]
kvm tools: Fix disk image double-free on KVM panic

The kvm_cmd_run() calls disk_image__close() before exiting so we must not it in
kvm_cpu_thread() in the "panic_kvm" case.

Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use threadpool for virtio-net
Sasha Levin [Thu, 28 Apr 2011 13:40:45 +0000 (16:40 +0300)]
kvm tools: Use threadpool for virtio-net

virtio-net has been converted to use the threadpool.  This is very similar to
the change done in virtio-blk, only here we had 2 queues to handle.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use threadpool for virtio-console
Sasha Levin [Thu, 28 Apr 2011 13:40:44 +0000 (16:40 +0300)]
kvm tools: Use threadpool for virtio-console

This is very similar to the change done in virtio-net.

Notice that one signal here comes from outside the module (actual terminal)
while the other one is generated by the virtio module.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use threadpool for virtio-blk
Sasha Levin [Thu, 28 Apr 2011 13:40:43 +0000 (16:40 +0300)]
kvm tools: Use threadpool for virtio-blk

virtio-blk has been converted to use the threadpool. All the threading code has
been removed, which left only simple callback handling code.

New threadpool job types are created within VIRTIO_PCI_QUEUE_PFN for every
queue (just one in the case of virtio-blk).  The module signals for work after
receiving VIRTIO_PCI_QUEUE_NOTIFY and expects the threadpool to call
virtio_blk_do_io to handle the I/O.  It is possible that the module will signal
work several times while virtio_blk_do_io is already working, but there is no
need to handle multithreading there since the threadpool will call each job in
linear and not in parallel.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Introduce generic I/O thread pool
Sasha Levin [Thu, 28 Apr 2011 13:40:42 +0000 (16:40 +0300)]
kvm tools: Introduce generic I/O thread pool

This patch adds a generic pool to create a common interface for working with
threads within the kvm tool. Main idea here is using this threadpool for all
I/O threads instead of having every I/O module write it's own thread code. The
process of working with the thread pool is supposed to be very simple.

During initialization, each module which is interested in working with the
threadpool will call threadpool__add_jobtype with the callback function and a
void* parameter. For example, virtio modules will register every virt_queue as
a new job type.  During operation, When theres work to do for a specific job,
the module will signal it to the queue and would expect the callback to be
called with proper parameters. It is assured that the callback will be called
once for every signal action and each callback will be called only once at a
time (i.e. callback functions themselves don't need to handle threading).

[ penberg@kernel.org: Use Lindent ]
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add kernel headers required for using list
Sasha Levin [Thu, 28 Apr 2011 13:40:41 +0000 (16:40 +0300)]
kvm tools: Add kernel headers required for using list

Adds kernel headers so that <linux/list.h> (and others) could be included
directly.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Prevent duplicate definitions of ALIGN
Sasha Levin [Thu, 28 Apr 2011 13:40:40 +0000 (16:40 +0300)]
kvm tools: Prevent duplicate definitions of ALIGN

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Show KVM state on SIGQUIT
Pekka Enberg [Tue, 26 Apr 2011 20:07:11 +0000 (23:07 +0300)]
kvm tools: Show KVM state on SIGQUIT

SysRq-t isn't useful during early boot problems because serial console is not
set up. Therefore, also dump KVM state on SIGQUIT.

Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: display appropriate error message when default kernel image could not...
Prasad Joshi [Tue, 26 Apr 2011 11:28:27 +0000 (12:28 +0100)]
kvm tools: display appropriate error message when default kernel image could not be found

This change was recommended by Ingo Molnar in his reply to mail 'Use the root
partition of the host to boot the guest machine'. The patch informs user to
explicitly run the 'kvm run --help' command, in case the kvm tool could not find
a default kernel image to boot.

prasad@prasad-kvm:~/KVM/linux-kvm/tools/kvm$ ./kvm run
Fatal: could not find default kernel image in:
./bzImage
../../arch/x86/boot/bzImage
/boot/vmlinuz-2.6.35-25-generic
/boot/bzImage-2.6.35-25-generic

Please see 'kvm run --help' for more options.

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: check read permission before using the root partition of the host to boot VM
Prasad Joshi [Tue, 26 Apr 2011 10:59:18 +0000 (11:59 +0100)]
kvm tools: check read permission before using the root partition of the host to boot VM

The commit fbe8d0f (kvm tools: Use the root partition of the host to boot the
guest machine) changed the default image for virtual machine to root partition
of the host machine. The patch adds a check to ensure appropriate permission
(a read permission) is available for kvm tool to use this partition.

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add NR_CPUS definition in case of non-configured kernel sources
Cyrill Gorcunov [Mon, 25 Apr 2011 18:07:19 +0000 (22:07 +0400)]
kvm tools: Add NR_CPUS definition in case of non-configured kernel sources

Pekka reported
|
| I see this if I ignore the reject:
|
| penberg@tiger:~/linux/tools/kvm$ make
| In file included from mptable.c:10:
| ../../arch/x86/include/asm/mpspec_def.h:20:6: error: "NR_CPUS" is not defined

This is because the source linux kernel might not be configured (bare sources)
so we add own definition in case if there is no NR_CPUS defined.

[ penberg@kernel.org: fix up compilation error ]
Reported-by: Pekka Enberg <penberg@kernel.org>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use system wide msr-index.h instead of own definitions
Cyrill Gorcunov [Mon, 25 Apr 2011 17:26:06 +0000 (21:26 +0400)]
kvm tools: Use system wide msr-index.h instead of own definitions

To eliminate code duplication.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add MP tables support
Cyrill Gorcunov [Mon, 25 Apr 2011 17:26:05 +0000 (21:26 +0400)]
kvm tools: Add MP tables support

This is a raw prototipe for MP table support, most resources
such as IRQ pins and sources are hardcoded among other limitations.

Note we still limit the number of cpus to run up to a single cpu
until the full SMP support appear. In particular don't forget to
remove "nolapic" from command line then.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use non shared pin/irqs for virtio devices
Cyrill Gorcunov [Mon, 25 Apr 2011 17:26:04 +0000 (21:26 +0400)]
kvm tools: Use non shared pin/irqs for virtio devices

There is no need for shared IRQs for virtio devices.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Implement virtio net TSO/UFO support
Asias He [Sun, 24 Apr 2011 12:46:37 +0000 (20:46 +0800)]
kvm tools: Implement virtio net TSO/UFO support

This patch bumps host to guest tcp bandwidth from

1060 Mib/s to 1760 Mib/s,

and guest to host tcp bandwidth from

 342 Mib/s to  619 Mib/s.

*************************
Without TSO and UFO
*************************
(guest <- host)
root@sid1:~# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.33.15 port 5001 connected with 192.168.33.2 port 38733
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  1.23 GBytes  1.06 Gbits/sec
^Croot@sid1:~# iperf -s -u
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:   110 KByte (default)
------------------------------------------------------------
[  3] local 192.168.33.15 port 5001 connected with 192.168.33.2 port 54933
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec  0.030 ms    0/  893 (0%)

(guest to host)
root@sid1:~# iperf -c host
------------------------------------------------------------
Client connecting to host, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.33.15 port 42197 connected with 192.168.33.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec    408 MBytes    342 Mbits/sec
root@sid1:~# iperf -c host -u
------------------------------------------------------------
Client connecting to host, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:   110 KByte (default)
------------------------------------------------------------
[  3] local 192.168.33.15 port 56176 connected with 192.168.33.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec
[  3] Sent 893 datagrams
[  3] Server Report:
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec  0.012 ms    0/  893 (0%)

*************************
With TSO and UFO
*************************

(guest <- host)
root@sid1:~# iperf  -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.33.15 port 5001 connected with 192.168.33.2 port 42767
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  2.05 GBytes  1.76 Gbits/sec
root@sid1:~# iperf  -s -u
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:   110 KByte (default)
------------------------------------------------------------
[  3] local 192.168.33.15 port 5001 connected with 192.168.33.2 port 35049
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec  0.031 ms    0/  893 (0%)

(guest -> host)
asias@hj:~$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.33.2 port 5001 connected with 192.168.33.15 port 60868
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec   738 MBytes   619 Mbits/sec
asias@hj:~$ iperf -s -u
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:  112 KByte (default)
------------------------------------------------------------
[  3] local 192.168.33.2 port 5001 connected with 192.168.33.15 port 40602
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec   0.030 ms    0/  893 (0%)

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix possible leak in qcow
Sasha Levin [Sat, 23 Apr 2011 14:05:08 +0000 (17:05 +0300)]
kvm tools: Fix possible leak in qcow

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add missing space before root= option
Cyrill Gorcunov [Wed, 20 Apr 2011 15:49:12 +0000 (19:49 +0400)]
kvm tools: Add missing space before root= option

If user passes own options we need an extra space; otherwise options get
joined.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add read-only support for QCOW2 images
Pekka Enberg [Tue, 19 Apr 2011 19:56:00 +0000 (22:56 +0300)]
kvm tools: Add read-only support for QCOW2 images

This patch extends the QCOW1 format to also support QCOW2 images as specified
by the following document:

  http://people.gnome.org/~markmc/qcow-image-format.html

Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Prasad Joshi <prasadjoshi124@gmail.com>
Cc: Sasha Levin <levinsasha928@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use mmap to allocate guest RAM
Sasha Levin [Tue, 19 Apr 2011 17:28:39 +0000 (20:28 +0300)]
kvm tools: Use mmap to allocate guest RAM

Using mmap to allocate the RAM enables us to allocate large blocks of memory
for the guest, allowing to boot guests with a large RAM.  Since if we try
KVM_SET_USER_MEMORY_REGION with a large memory block KVM used to oops (now it
just fails), we had to move the actual ioctl to after we KVM_CREATE_VCPU.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix qcow1_read_cluster() return value on error
Pekka Enberg [Tue, 19 Apr 2011 16:57:36 +0000 (19:57 +0300)]
kvm tools: Fix qcow1_read_cluster() return value on error

The qcow1_read_cluster() returns negative number on error but the return value
type is unsigned. Fix that up and also fix the call-site in qcow1_read_sector()
to deal with negative return value properly.

Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Kill redundant assignment in qcow1_read_cluster()
Pekka Enberg [Tue, 19 Apr 2011 16:55:49 +0000 (19:55 +0300)]
kvm tools: Kill redundant assignment in qcow1_read_cluster()

Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use threading for virtio block devices
Sasha Levin [Mon, 18 Apr 2011 13:02:31 +0000 (16:02 +0300)]
kvm tools: Use threading for virtio block devices

Add I/O thread to handle I/O operations in virtio-blk.

There is currently support for multiple virtio queues but the kernel side
supports only one virtio queue. It's not too much of a performance impact and
the ABI does support multiple queues there - So I've prefered to do it like
that to keep it flexible.

I/O performance itself doesn't increase much due to the patch, what changes is
system responsiveness during I/O operations.  On an unthreaded system, The VCPU
is frozen up until the I/O request is complete. On the other hand, On a
threaded system the VCPU is free to do other work or queue more I/O while
waiting for the original I/O request to complete.

[ penberg@kernel.org: cleanups ]
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix possible leak in disk_image
Sasha Levin [Tue, 19 Apr 2011 07:32:16 +0000 (10:32 +0300)]
kvm tools: Fix possible leak in disk_image

Close leaking fd if ioctl fails.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use the root partition of the host to boot the guest machine
Prasad Joshi [Tue, 19 Apr 2011 14:29:04 +0000 (15:29 +0100)]
kvm tools: Use the root partition of the host to boot the guest machine

The kvm run command should automatically pickup the image file to boot if one is
not explicitly specified.

Quoting Ingo Molnar:

  Looks good here, with your patch applied 'kvm run' will now boot host userspace
  with zero configuration needed (!), when there's a bzImage built in that kernel
  tree:

    aldebaran:~/linux/linux/tools/kvm> ./kvm run

    [...]

    Welcome to Fedora release 16 (Rawhide)!

Tested-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Untangle qcow1_read_sector() function
Pekka Enberg [Sun, 17 Apr 2011 10:42:28 +0000 (13:42 +0300)]
kvm tools: Untangle qcow1_read_sector() function

This patch rearranges qcow1_read_sector() code so that all normal, zero
cluster, and I/O error paths share the same exit point which also deals with L2
table freeing.

Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Cleanup qcow1_read_sector() function
Pekka Enberg [Sun, 17 Apr 2011 10:40:37 +0000 (13:40 +0300)]
kvm tools: Cleanup qcow1_read_sector() function

Fix formatting issues and rename 'length' variable to 'nr_read'.

Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Correct a variable naming spelling mistake
Prasad Joshi [Sat, 16 Apr 2011 20:02:33 +0000 (21:02 +0100)]
kvm tools: Correct a variable naming spelling mistake

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: check the cluster boundary in the qcow read code
Prasad Joshi [Sat, 16 Apr 2011 19:40:25 +0000 (20:40 +0100)]
kvm tools: check the cluster boundary in the qcow read code

The QCOW1 code should always read the data in cluster size. A new function
qcow1_read_cluster() is added to read a cluster wort of data. The current
function to read the data i.e. qcow1_read_sector is modified to use this newly
added function and preserve the cluster boundary.

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix iov shifting
Sasha Levin [Sat, 16 Apr 2011 21:03:55 +0000 (00:03 +0300)]
kvm tools: Fix iov shifting

Use helper function to remove full iov when 'reading in full'.

Thanks Konstantin Khlebnikov.

[ penberg@kernel.org: fix formatting ]
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Rename _sg to _iov and remove dead code
Sasha Levin [Sat, 16 Apr 2011 16:53:21 +0000 (19:53 +0300)]
kvm tools: Rename _sg to _iov and remove dead code

Use _iov to indicate scatter-gather.
Remove simple IO ops from raw image - Dead code.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add scatter-gather support for disk images
Sasha Levin [Sat, 16 Apr 2011 15:05:56 +0000 (18:05 +0300)]
kvm tools: Add scatter-gather support for disk images

Add optional support for scatter-gather to disk_image.
Formats that can't take advantage of scatter-gather fallback to simple IO.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add scatter-gather variants of IO functions
Sasha Levin [Sat, 16 Apr 2011 15:05:55 +0000 (18:05 +0300)]
kvm tools: Add scatter-gather variants of IO functions

Added scatter-gather variants of [x,xp][read,write]() and [p]read_in_full().

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tool: Change the type of QCOW table index and offset variables to u64
Prasad Joshi [Sat, 16 Apr 2011 13:50:57 +0000 (14:50 +0100)]
kvm tool: Change the type of QCOW table index and offset variables to u64

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix leak in QCOW
Sasha Levin [Sat, 16 Apr 2011 11:45:43 +0000 (14:45 +0300)]
kvm tools: Fix leak in QCOW

Fixed leak when reading a zero sector, also simplified flow a bit.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tool: Remove the __stringify*() definition from util.h
Prasad Joshi [Sat, 16 Apr 2011 11:15:06 +0000 (12:15 +0100)]
kvm tool: Remove the __stringify*() definition from util.h

Include the Linux kernel header file linux/stringify.h file instead of
redefining the __stringify* macros

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Setup bridged network by a script
Amos Kong [Fri, 15 Apr 2011 10:19:34 +0000 (18:19 +0800)]
kvm tools: Setup bridged network by a script

Use original hardcode network by default.

#./kvm run ... -n virtio --tapscript=./util/kvm-ifup-vbr0
# brctl show
bridge name     bridge id               STP enabled     interfaces
vbr0            8000.e272c7c391f4       no              tap0
guest)# ifconfig eth6
eth6      Link encap:Ethernet  HWaddr 00:11:22:33:44:55
          inet addr:192.168.33.192  Bcast:192.168.33.255  Mask:255.255.255.0
          inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3725 (3.6 KiB)  TX bytes:852 (852.0 b)
guest)# ping amosk.info
PING amosk.info (69.175.108.82) 56(84) bytes of data.
64 bytes from nurpulat.uz (69.175.108.82): icmp_seq=1 ttl=43 time=306 ms

Changes from v1:
- rebased to latest tree
- replace system() by execv()

Signed-off-by: Amos Kong <kongjianjun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add a script to setup tap device
Amos Kong [Thu, 14 Apr 2011 04:37:55 +0000 (12:37 +0800)]
kvm tools: Add a script to setup tap device

# ./kvm-ifup-vbr0 $tap_name

Signed-off-by: Amos Kong <kongjianjun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add a script to setup private bridge
Amos Kong [Thu, 14 Apr 2011 04:37:45 +0000 (12:37 +0800)]
kvm tools: Add a script to setup private bridge

We can use this script to create/delete a private bridge,
and launch a dhcp server on the bridge by dnsmasq,
setup forware rule of iptable, then guest can access public network.

# ./set_private_br.sh vbr0 192.168.33
add new private bridge: vbr0
# brctl show
bridge name     bridge id               STP enabled     interfaces
vbr0            8000.000000000000       yes
# ifconfig vbr0
vbr0      Link encap:Ethernet  HWaddr 82:0f:f5:8f:92:47
          inet addr:192.168.33.1  Bcast:192.168.33.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:1979 (1.9 KB)
# ps aux |grep dnsmasq
nobody .. dnsmasq --strict-order --bind-interfaces --listen-address 192.168.33.1 \
--dhcp-range 192.168.33.1,192.168.33.254

Signed-off-by: Amos Kong <kongjianjun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Rename raw_image__close_sector_ro_mmap
Sasha Levin [Fri, 15 Apr 2011 08:12:31 +0000 (11:12 +0300)]
kvm tools: Rename raw_image__close_sector_ro_mmap

Renamed to raw_image__close_ro_mmap since it has nothing to do with sectors.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix virtio console input problem
Asias He [Fri, 15 Apr 2011 14:55:04 +0000 (22:55 +0800)]
kvm tools: Fix virtio console input problem

term_getc only get one char at a time, so term_getc_iov should
send one char back to guest.

Otherwise, you will get four input chars when you only type one like bewlow:

sid login: r^@^@^@o^@^@^@o^@^@^@t^@^@^@

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Free l1_table in qcow1_disk_close() and in error path of qcow1_probe()
Prasad Joshi [Fri, 15 Apr 2011 14:18:57 +0000 (15:18 +0100)]
kvm tools: Free l1_table in qcow1_disk_close() and in error path of qcow1_probe()

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Avoid byte-order conversion during each read operation
Prasad Joshi [Fri, 15 Apr 2011 14:18:56 +0000 (15:18 +0100)]
kvm tools: Avoid byte-order conversion during each read operation

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix function names in qcow.c
Prasad Joshi [Fri, 15 Apr 2011 14:18:55 +0000 (15:18 +0100)]
kvm tools: Fix function names in qcow.c

The function name sect_to_l1_offset() is changed to get_l1_index() as it
returns the l1 table index rather than offset.

Also change

    - sect_to_l2_offset to get_l2_index
    - sect_to_cluster_offset to get_cluster_offset

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add read-only support for block devices
Pekka Enberg [Wed, 13 Apr 2011 19:56:02 +0000 (22:56 +0300)]
kvm tools: Add read-only support for block devices

Add support for booting guests to host block devices in read-only mode.

Quoting Ingo Molnar:

  Booting into the host's userspace works out of box now. The
  following disk-image-less command:

     ./kvm run ../../arch/x86/boot/bzImage --readonly --image=/dev/sda --params="root=/dev/vda1"

  has booted all the way into the host's Fedora Rawhide userspace:

     ===================================
     Welcome to Fedora release 16 (Rawhide)!

     [...]

     Fedora release 16 (Rawhide)
     Kernel 2.6.39-rc3-tip+ on an x86_64 (ttyS0)

     aldebaran login:
     ===================================

  I ran this as unprivileged user (who had read access to the partitions in
  question).

  This is a very useful feature for testing kernels - i can test any random Linux
  box's userspace via KVM, without having to copy an image there! :-)

Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Prasad Joshi <prasadjoshi124@gmail.com>
Cc: Sasha Levin <levinsasha928@gmail.com>
Tested-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add option to specify guest MAC
Sasha Levin [Thu, 14 Apr 2011 19:17:43 +0000 (22:17 +0300)]
kvm tools: Add option to specify guest MAC

Add --guest-mac to specify the MAC of the guest.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Enable network by default
Sasha Levin [Thu, 14 Apr 2011 19:17:42 +0000 (22:17 +0300)]
kvm tools: Enable network by default

Enable virtio networking by default, warn if user doesn't have tun/tap interface or not enough permissions to start it.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Organize net parameters into struct
Sasha Levin [Thu, 14 Apr 2011 19:17:41 +0000 (22:17 +0300)]
kvm tools: Organize net parameters into struct

Move network configuration parameters into a struct.
The amount of network parameters will be rather large, so better do it early.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use the readily built kernel with 'kvm run' if not specified explicitly
Prasad Joshi [Thu, 14 Apr 2011 15:36:21 +0000 (16:36 +0100)]
kvm tools: Use the readily built kernel with 'kvm run' if not specified explicitly

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Remove unused handle_sigint() function
Giuseppe Calderaro [Thu, 14 Apr 2011 08:15:17 +0000 (09:15 +0100)]
kvm tools: Remove unused handle_sigint() function

Removed handle_sigint. SIGINT is now passed to the guest.

Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Make host side IP configurable
Sasha Levin [Thu, 14 Apr 2011 05:24:41 +0000 (08:24 +0300)]
kvm tools: Make host side IP configurable

Add --host-ip-addr parameter to allow changing the host-side IP address.
Add a networking group to the cmdline menu.

Reviewed-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Set up tun interface using ioctls
Sasha Levin [Thu, 14 Apr 2011 05:24:40 +0000 (08:24 +0300)]
kvm tools: Set up tun interface using ioctls

Use ioctls to assign IP address and bring interface up instead of using ifconfig.
Not breaking aliasing rules this time.

Reviewed-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add QCOW version 1 read-only support
Prasad Joshi [Wed, 13 Apr 2011 19:26:02 +0000 (20:26 +0100)]
kvm tools: Add QCOW version 1 read-only support

The patch only implements the basic read-only support for QCOW version 1
images.  Many of the QCOW features are not implemented:

 - write
 - image creation
 - snapshot
 - copy-on-write
 - encryption

The code is based on the following QCOW 1 image format specification:

  http://people.gnome.org/~markmc/qcow-image-format-version-1.html

Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Kevin Wolf <kwolf@redhat.com>
Cc: Sasha Levin <levinsasha928@gmail.com>
Cc: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: add a close method for raw_image_ro_mmap_ops
Prasad Joshi [Wed, 13 Apr 2011 17:36:21 +0000 (18:36 +0100)]
kvm tools: add a close method for raw_image_ro_mmap_ops

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Avoid using disk_image->priv member in disk_image__new()
Prasad Joshi [Wed, 13 Apr 2011 17:13:21 +0000 (18:13 +0100)]
kvm tools: Avoid using disk_image->priv member in disk_image__new()

The disk_image->priv is supposed to be a private member for users of
disk_image__new(). The other block device drivers, for example qcow, might need
this pointer to hold their header.

Added a new function disk_image__new_readonly() which calls disk_image__new()
to allocate a new disk and then sets the priv member to mmamped address.

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Implement virtio network device
Asias He [Tue, 12 Apr 2011 16:01:28 +0000 (00:01 +0800)]
kvm tools: Implement virtio network device

This patch implement virtio network device.
Use '-n virtio or --network=virtio' to enable it.

The current implementation uses tap which needs root privileges to create a
virtual network device (tap0) on host side. Actually, what we need is
CAP_NET_ADMIN.

The host side tap0 is set to 192.168.33.2/24.
You need to configure the guest side eth0 to any ip address in
192.168.33.0/24.

Here are some scp performance test for differenct implementations:
None of rx and tx as thread:
guest to host 3.2MB/s
host  to guest 3.1MB/s

Only rx as thread:
guest to host  14.7MB/s
host  to guest 33.4MB/s

Both rx and tx as thread(This patch works this way):
guest to host  19.8MB/s
host  to guest 32.5MB/s

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Arrange cmdline help menu
Sasha Levin [Tue, 12 Apr 2011 17:54:11 +0000 (20:54 +0300)]
kvm tools: Arrange cmdline help menu

Group the cmdline menu into simple groups instead of one messy list.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add OPT_GROUP to cmdline parser
Sasha Levin [Tue, 12 Apr 2011 17:54:10 +0000 (20:54 +0300)]
kvm tools: Add OPT_GROUP to cmdline parser

Add the OPT_GROUP parser option to allow the creation of an organized help menu.
Used code taken from the git project.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Don't override kernel image passed by user
Pekka Enberg [Tue, 12 Apr 2011 18:12:23 +0000 (21:12 +0300)]
kvm tools: Don't override kernel image passed by user

Commit d3f84f3 ("kvm tools: Use host kernel image by default") broke user
specified kernel image parsing. Fix that up.

Reported-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use host kernel image by default
Pekka Enberg [Tue, 12 Apr 2011 17:49:10 +0000 (20:49 +0300)]
kvm tools: Use host kernel image by default

If user doesn't specify a kernel image for 'kvm run' command, try to look up
host kernel kernel image from /boot directory and use it as guest kernel.

Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use IRQ pin 2 for virtio console
Asias He [Tue, 12 Apr 2011 16:23:30 +0000 (00:23 +0800)]
kvm tools: Use IRQ pin 2 for virtio console

Leaves IRQ pin 3 for virtio networking.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix lock imbalance in virtio_console_pci_io_out()
Asias He [Tue, 12 Apr 2011 16:23:29 +0000 (00:23 +0800)]
kvm tools: Fix lock imbalance in virtio_console_pci_io_out()

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix virtio console PCI class number and device ID number
Asias He [Tue, 12 Apr 2011 16:23:28 +0000 (00:23 +0800)]
kvm tools: Fix virtio console PCI class number and device ID number

Makes lscpi report the correct device name.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add option to load disk image read only
Sasha Levin [Tue, 12 Apr 2011 12:15:06 +0000 (15:15 +0300)]
kvm tools: Add option to load disk image read only

As suggested by Christoph Hellwig and Pekka Enberg, Add a '--readonly' flag to
prevent runtime changes to the disk to be saved in the image file.  Please note
that since the changes are saved in the VM instead of being written out, a
large amount of modified blocks may kill the tool.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agoRevert "kvm tools: Use mmap by default for disk images"
Pekka Enberg [Mon, 11 Apr 2011 18:46:14 +0000 (21:46 +0300)]
Revert "kvm tools: Use mmap by default for disk images"

This reverts commit ca8dc9130dd89ca790a7c0830d1129dfa6c5c69e.

As pointed out by Christoph Helwig, shared writeable mappings are error prone
and don't handle I/O errors nor ENOSPC properly.

13 years agokvm tools: Replace option --enable-virtio-console with --console
Asias He [Mon, 11 Apr 2011 05:10:14 +0000 (13:10 +0800)]
kvm tools: Replace option --enable-virtio-console with --console

The default console is serial console.

You can use:
--console=virtio or -c virtio to enable virtio console
--console=serial or -c serial to enable serial console.

You can use only one console at a time.

Suggested-by: Pekka Enberg <penberg@kernel.org>
Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use ioport__register() for legacy devices
Pekka Enberg [Sun, 10 Apr 2011 10:08:14 +0000 (13:08 +0300)]
kvm tools: Use ioport__register() for legacy devices

This patch cleans up the table-based setup for legacy devices to use
ioport__register().

Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Make virt_queue__available return false if queue is not initialized
Amos Kong [Sun, 10 Apr 2011 08:33:39 +0000 (16:33 +0800)]
kvm tools: Make virt_queue__available return false if queue is not initialized

virtio_console__inject_interrupt tries to use virt queues before guest
tell us to initialize them.

(gdb) r run -i linux-0.2.img -k ./vmlinuz-2.6.38-rc6+ -r ./initrd.img-2.6.38-rc6+ -p=init=1 -m 500 -c
Starting program: /project/rh/kvm-tools/tools/kvm/kvm run -i linux-0.2.img -k ./vmlinuz-2.6.38-rc6+ -r ./initrd.img-2.6.38-rc6+ -p=init=1 -m 500 -c
[Thread debugging using libthread_db enabled]
[New Thread 0x7fffd6e2d700 (LWP 19280)]
  Warning: request type 8

Program received signal SIGSEGV, Segmentation fault.
0x00000000004026ca in virt_queue__available (vq=0x60d3c8) at include/kvm/virtio.h:31
31              return vq->vring.avail->idx !=  vq->last_avail_idx;
(gdb)
(gdb) bt
(gdb) p *vq
$2 = {vring = {num = 0, desc = 0x0, avail = 0x0, used = 0x0}, pfn = 0, last_avail_idx = 0}

include/kvm/virtio-console.h:
 59 void virtio_console__inject_interrupt(struct kvm *self)
....
 71         if (term_readable(CONSOLE_VIRTIO) && virt_queue__available(vq)) {
 72                 head = virt_queue__get_iov(vq, iov, &out, &in, self);
                           ^^^^ then this block will not be executed if
                                virtio_queue is unavaiable.

Changes from v1:
- move the check of virt_queue out of virt_queue__get_iov()

Reported-by: Amos Kong <akong@redhat.com>
Acked-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Amos Kong <akong@redhat.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Exit KVM session on Ctrl+a and 'x'
Asias He [Sun, 10 Apr 2011 06:50:31 +0000 (14:50 +0800)]
kvm tools: Exit KVM session on Ctrl+a and 'x'

This patch makes Ctrl+a escape key and makes Ctrl+a and 'x' terminate the KVM
session. It works for both serial and virtio console. If you want to input
Ctrl+a to guest, type Ctrl+a twice.

[ penberg@kernel.org: Make terminated message more readable. ]
Tested-by: Amos Kong <akong@redhat.com>
Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Remove the BUGS file
Pekka Enberg [Sun, 10 Apr 2011 08:17:35 +0000 (11:17 +0300)]
kvm tools: Remove the BUGS file

Commit b95f0c7 ("kvm tools: Emit a more informative error message when /dev/kvm
does not open") fixed the only issue listed in BUGS so remove the file.

Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Update documentation
Cyrill Gorcunov [Sun, 10 Apr 2011 08:06:48 +0000 (12:06 +0400)]
kvm tools: Update documentation

Add --cpus description and make format consistent.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Add --cpus parameter
Cyrill Gorcunov [Sun, 10 Apr 2011 07:53:51 +0000 (11:53 +0400)]
kvm tools: Add --cpus parameter

To specify the number of processors to run.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use mmap by default for disk images
Sasha Levin [Sat, 9 Apr 2011 17:07:59 +0000 (20:07 +0300)]
kvm tools: Use mmap by default for disk images

Use mmap() for disk images and fallback to read()/write() if it fails (for
example, with large images on 32 bit systems).

Performance (kB/s) test using bonnie++ shows 19% improvement in block writes,
7% improvement in block rewrites, and 6% improvement in block reads.

Guest was started with the following command:

  ./kvm run --mem=256 --image=./work/vms/gentoo.img --kernel=/boot/bzImage-git

and bonnie++ with:

  bonnie++ -u 0

Before:
------

  Version  1.96       ------Sequential Output----- --Sequential Input- -Random-
  Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
  Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
  tux            480M   673 100 308017  61 288156  49  3286  99 892186  76 +++++ +++
  Latency             12998us   50992us   35993us    3000us    1999us     201ms
  Version  1.96       ------Sequential Create------ --------Random Create--------
  tux                 -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
                files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                   16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
  Latency              3000us    1000us    1000us    1000us    1998us    1000us

After:
------

  Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
  Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
  Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
  tux            480M   674  99 366588  42 309514  44  3539  99 954554  76 +++++ +++
  Latency             17997us   15997us   37993us    4999us    1998us     145ms
  Version  1.96       ------Sequential Create------ --------Random Create--------
  tux                 -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
                files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                   16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
  Latency              1000us    1000us    2000us    1999us    1000us    1000us

[ penberg@kernel.org: drop MAP_NORESERVE, it's no-op for MAP_SHARED ]
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Fix compilation issue in virtio-blk.c
Giuseppe Calderaro [Sat, 9 Apr 2011 16:26:29 +0000 (17:26 +0100)]
kvm tools: Fix compilation issue in virtio-blk.c

This patch fixes the following error in virtio-blk.c:

  virtio-blk.c: In function ‘virtio_blk_do_io_request’:
  virtio-blk.c:125:6: error: variable ‘err’ set but not used [-Werror=unused-but-set-variable]
  cc1: all warnings being treated as errors

Signed-off-by: Giuseppe Calderaro <giuseppecalderaro@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Remove unnecessary goto label out_unlock
Asias He [Sat, 9 Apr 2011 14:35:25 +0000 (22:35 +0800)]
kvm tools: Remove unnecessary goto label out_unlock

There is only one switch in virtio_blk_pci_io_out and
virtio_blk_pci_io_in. No need to use goto, just use break is fine.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Make virtio console device code thread-safe
Asias He [Sat, 9 Apr 2011 14:35:24 +0000 (22:35 +0800)]
kvm tools: Make virtio console device code thread-safe

Now that we do threaded execution, make the virtio console device code safe by
introducing a per-device mutex.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
13 years agokvm tools: Use mutex_lock() and mutex_unlock() wrappers
Pekka Enberg [Sat, 9 Apr 2011 13:23:35 +0000 (16:23 +0300)]
kvm tools: Use mutex_lock() and mutex_unlock() wrappers

This patch implements less hostile mutex_lock() and mutex_lock() wrappers on
top of the pthread API equivalents as suggested by Ingo Molnar:

  glibc/pthreads mutex API semantics are pretty silly IMO.

  I *think* it would be better to try to match the kernel API here, and provide
  trivial wrappers around mutex_lock()/mutex_unlock(). We wont ever bring down
  threads in a hostile way, so we wont actually need the error returns. CPU
  threads should probably only exit once the kvm process exits, after all
  cleanup has been done.

  That way usage would be more obvious and more familar to kernel developers :-)

  [ It would also open up the possibility, in the far future, to bring lockdep to
    user-space ;-) ]

Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>