kvm tools: Fix typo in converting bytes to MBs

Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Lookup symbol based on RIP for 'kill -3'

To make debugging easier, look up symbol from guest kernel image based on RIP
when user does 'kill -3' to the hypervisor.

Example output looks as follows:

  Code:
  -----
  rip: [<ffffffff812cb3a0>] delay_loop+30 (/home/penberg/linux/arch/x86/lib/delay.c:32)

Cc: Asias He <asias.hejun@gmail.com>
Cc: Avi Kivity <avi@redhat.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>
kvm tools: Use standardized style for the virtio/net.c driver

I had a quick look at virtio/net.c and it still had quite many style
inefficiencies - all of which are patterns which i pointed out before:

 - use short names for devices within the driver, so not 'net_device' but
   'ndev' - everyone hacking net.c knows that this is the network driver so
   'ndev' is a self-explanatory (and very short) term of art ...

 - use 'pci_header' instead of the ambiguous and misleading
   'virtio_net_pci_device' naming.

 - do not repeat 'net' in struct net_device fields! So rename ndev->net_config
   to ndev->config.

 - In the kernel we generally use _lock names for mutexes. This is conceptually
   more generic. So rename the net device mutexes accordingly.

 - group #include lines in a topical way instead of a random mess

 - fix vertical alignment mismatches

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Fix type mismatches on GCC 4.4 on 32-bit systems

The tools/kvm build still fails on 32-bit:

 cc1: warnings being treated as errors
 qcow.c: In function ‘qcow1_write_sector’:
 qcow.c:307: error: comparison between signed and unsigned integer expressions
 make: *** [qcow.o] Error 1
 make: *** Waiting for unfinished jobs....

using:

 gcc version 4.4.4 20100630 (Red Hat 4.4.4-10) (GCC)

The patch below addresses them.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Bring VIRTIO_BLK_F_SEG_MAX feature back to virtio blk

commit b764422bb0b46b00b896f6d4538ac3d3dde9e56b
(kvm tools: Add support for multiple virtio-blk)
removed the VIRTIO_BLK_F_SEG_MAX publishment to guest.

There is no reason we should not support it. Just bring it back.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Tune the command-line option

With this patch we can have
	-c --cpus
	-m --mem
	-d --disk
	-k --kernel
	-i --initrd
which is more consistent and easy to remember.

The patch also frees up -s, -g option.

Ingo suggestied
'''
 The debug options should probably be concentrated under a --debug option
 anyway, to allow things like:

  --debug single-step,ioport

 Even if the debug options are kept they should be streamlined along
 the same
 pattern:

 >>         --debug-single-step     Enable single stepping
 >>         --debug-ioport          Enable ioport debugging

 But having a --debug option that recognizes all the debug flags would
 be nicer.

 It would also allow future enhancements to group debug features, like:

   --debug all                # turn on everything and the kitchen sink
   for early hangs
   --debug all,-single-step   # turn on everything except single-step
   debugging
   --debug nonverbose         # turn on all non-noisy debug options we
   have

 Maybe even:

   --debug memcheck

 ... could run kvm under valgrind automatically - that way we can hide
 any secondary tool complexities from the user and turn those tools into
 simple debug options :-)
'''

Let's do this --debug option consolidation later.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Add VIRTIO_BLK_T_FLUSH feature to handle flush operation from VM

The virtual machine calls 'sync' when the machine
is halted. Adding the virtio flush feature will
ensure that the data is synced on to disk before
the virtual machine is halted. This is needed to
ensure the intigrity of the data.

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Add boot test to checks

'make check' will now try booting a kernel and will exit
gracefully once the kernel has finished loading.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Return correct values from disk IOV functions

Currently read/write IOV functions return an incorrect
value instead of the amount of bytes read/written.

This incorrect value may cause errors within the virtio layer.

Return correct amount of bytes read/written from _iov functions.

[ penberg@kernel.org: don't use 'inline' for out-of-line functions ]
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Add interval red-black tree helper

Interval rb-tree allows to directly store interval ranges
and quickly lookup an overlap with a single point or a range.

The helper is based on the kernel rb-tree implementation
(located in <linux/rbtree.h>) which alows for the augmention
of the classical rb-tree to be used as an interval tree.

Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Add MMIO address mapper

When we have a MMIO exit, we need to find which device
has registered to use the accessed MMIO space.

The mapper maps ranges of guest physical addresses to
callback functions.

Implementation is based on an interval red-black tree.

Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Use virtio IDs from <linux/virtio_ids.h>

Instead of redefining virtio IDs in our headers, use IDs defined
in <linux/virtio_ids.h>.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Fix includes for preadv/pwritev

"bornto befrag <born2befrag@gmail.com>" writes:

  > When i compile i kvm native tool tools/kvm && make i get this
  >
  >  CC       read-write.o
  > cc1: warnings being treated as errors
  > read-write.c: In function ‘xpreadv’:
  > read-write.c:255: error: implicit declaration of function ‘preadv’
  > read-write.c:255: error: nested extern declaration of ‘preadv’
  > read-write.c: In function ‘xpwritev’:
  > read-write.c:268: error: implicit declaration of function ‘pwritev’
  > read-write.c:268: error: nested extern declaration of ‘pwritev’
  > make: *** [read-write.o] Error 1

Fix that up by including <sys/uio.h> for preadv()/pwritev().
Reported-by: <born2befrag@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Move disk image related code under disk directory

This patch removes disk-image.c and qcow.c under disk directory.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Rename disk-image.c to core.c

This patch prepares the splitting of disk-image.c to core.c,
blk.c and raw.c.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Split raw image and blk device code from disk/core.c

This patch moves raw image and blk device code into disk/raw.c

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Rename disk_image__{read, write}_sector_iov

This patch renames disk_image__{read, write}_sector_io to
disk_image__{read, write}.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Remove dead coe disk_image__{read, write}_sector

These code are not used anymore. Let's remove it.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Consolidate disk_image__{new, new_readonly}

This patch simplifies the disk image API.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
kvm tools: Split blk device code from raw.c to blk.c

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>