sdk/emulator/qemu.git
14 years agoserial: Update parameters after load
Michal Novotny [Wed, 15 Sep 2010 13:35:53 +0000 (15:35 +0200)]
serial: Update parameters after load

This is the patch to update serial port parameters after guest is
already loaded.

Signed-off-by: Michal Novotny <minovotn@redhat.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
14 years agoRemove wrong semicolon in macro definition
Stefan Weil [Mon, 13 Sep 2010 19:21:57 +0000 (21:21 +0200)]
Remove wrong semicolon in macro definition

Macros normally should not end with a semicolon,
otherwise their usage results in two statements
where only one statement was expected.

Signed-off-by: Stefan Weil <weil@mail.berlios.de>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
14 years agoserial: Wrap debug prints around a DPRINTF macro
Michal Novotny [Mon, 13 Sep 2010 12:32:32 +0000 (14:32 +0200)]
serial: Wrap debug prints around a DPRINTF macro

Signed-off-by: Michal Novotny <minovotn@redhat.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
14 years agoESP: fix ESP DMA access when DMA is not enabled
Blue Swirl [Sat, 11 Sep 2010 16:38:33 +0000 (16:38 +0000)]
ESP: fix ESP DMA access when DMA is not enabled

Sending ESP a command caused it to trigger DMA immediately
even if DMA was not enabled at the DMA controller.

Add a signal from DMA controller to ESP to tell ESP about changes in
DMA enable bit. Also use the correct function for setting up GPIO outputs.

This fixes NetBSD 1.6.1 through 3.0 boot.

Thanks to Artyom Tarasenko for extensive debugging of the problem.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agopowerpc: Avoid TLB related log spamming
Edgar E. Iglesias [Sat, 11 Sep 2010 12:29:07 +0000 (14:29 +0200)]
powerpc: Avoid TLB related log spamming

Invalid TLB entries are normal and should not spam the log.

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
14 years agotrace: fix a regex portability problem
Blue Swirl [Sat, 11 Sep 2010 10:43:39 +0000 (10:43 +0000)]
trace: fix a regex portability problem

The /bin/sh in Milax has problems with the regex:
Error: invalid trace backend
Please choose a supported trace backend.

Fix it by escaping ')' like the regexes with '('.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agotrace: fix a typo
Blue Swirl [Fri, 10 Sep 2010 20:54:56 +0000 (23:54 +0300)]
trace: fix a typo

There is no qemu_valloc() but qemu_vmalloc().

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agoHACKING: add rules for printf-like functions
Blue Swirl [Fri, 10 Sep 2010 18:53:11 +0000 (18:53 +0000)]
HACKING: add rules for printf-like functions

Add rules for printf-like functions, based on libvirt HACKING.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agoHACKING: add string management rules
Blue Swirl [Fri, 10 Sep 2010 18:53:05 +0000 (18:53 +0000)]
HACKING: add string management rules

Add string management rules, somewhat like libvirt HACKING.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agoHACKING: add memory management rules
Blue Swirl [Fri, 10 Sep 2010 18:52:52 +0000 (18:52 +0000)]
HACKING: add memory management rules

Add memory management rules, somewhat like libvirt HACKING.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agoHACKING: add C type rules
Blue Swirl [Fri, 10 Sep 2010 18:47:31 +0000 (18:47 +0000)]
HACKING: add C type rules

Add C type rules, adapted from libvirt HACKING. Also include
a description of special QEMU scalar types.

Move typedef rule from CODING_STYLE rule 3 to HACKING rule 6
where it belongs.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agoHACKING: add preprocessor rules
Blue Swirl [Fri, 10 Sep 2010 18:46:00 +0000 (18:46 +0000)]
HACKING: add preprocessor rules

Add a new file, HACKING, in order to collect recurring
issues with submitted patches.

Start with preprocessor rules, adapted from libvirt HACKING.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agovmware_vga: Replace the few tab-indents with spaces (clean-up).
Andrzej Zaborowski [Fri, 10 Sep 2010 00:30:04 +0000 (02:30 +0200)]
vmware_vga: Replace the few tab-indents with spaces (clean-up).

Use 4 spaces instead of 2, too.

14 years agovmware_vga: Add checks to deal with non-atomic fifo writes.
Andrzej Zaborowski [Fri, 10 Sep 2010 00:23:31 +0000 (02:23 +0200)]
vmware_vga: Add checks to deal with non-atomic fifo writes.

Janne Huttunen noticed that the FIFO end pointer is updated by the
guest after writing each word to the FIFO, at least the X.org driver
which is open does this.  This means that there's no way for the
host to know if the guest is in the middle a write operation.  Qemu
thus needs to read the beginning of the command up to when it's able
to tell how many words are expected for the given command.  It will
abort reading and rewind the FIFO if there aren't enough words yet,
this should be relatively rare but it is suspected to have been the
cause of the occasional FIFO overrun that killed the display.

14 years agohw/omap: Fix default setup for OMAP UART devices
Stefan Weil [Sun, 8 Aug 2010 12:09:26 +0000 (14:09 +0200)]
hw/omap: Fix default setup for OMAP UART devices

Character devices created by qemu_chr_open don't
allow duplicate device names, so naming all
UART devices "null" no longer works.

Running "qemu-system-arm -M n800" (and some other machines)
results in this error message:

qemu-system-arm: Duplicate ID 'null' for chardev
Can't create serial device, empty char device

This is fixed by setting a default label "uart1",
"uart2" or "uart3".

Cc: Andrzej Zaborowski <andrew.zaborowski@intel.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
14 years agotrace: Trace entry point of balloon request handler
Prerna Saxena [Wed, 11 Aug 2010 11:46:03 +0000 (17:16 +0530)]
trace: Trace entry point of balloon request handler

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Trace port IO
Prerna Saxena [Wed, 11 Aug 2010 11:45:11 +0000 (17:15 +0530)]
trace: Trace port IO

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Trace virtqueue operations
Stefan Hajnoczi [Mon, 24 May 2010 12:19:21 +0000 (13:19 +0100)]
trace: Trace virtqueue operations

This patch adds trace events for virtqueue operations including
adding/removing buffers, notifying the guest, and receiving a notify
from the guest.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Trace virtio-blk, multiwrite, and paio_submit
Stefan Hajnoczi [Sat, 22 May 2010 17:15:08 +0000 (18:15 +0100)]
trace: Trace virtio-blk, multiwrite, and paio_submit

This patch adds trace events that make it possible to observe
virtio-blk.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Trace qemu_malloc() and qemu_vmalloc()
Stefan Hajnoczi [Sat, 22 May 2010 17:09:25 +0000 (18:09 +0100)]
trace: Trace qemu_malloc() and qemu_vmalloc()

It is often useful to instrument memory management functions in order to
find leaks or performance problems.  This patch adds trace events for
the memory allocation primitives.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Add user documentation
Stefan Hajnoczi [Tue, 22 Jun 2010 14:07:09 +0000 (15:07 +0100)]
trace: Add user documentation

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Add LTTng Userspace Tracer backend
Stefan Hajnoczi [Sat, 22 May 2010 20:11:33 +0000 (21:11 +0100)]
trace: Add LTTng Userspace Tracer backend

This patch adds LTTng Userspace Tracer (UST) backend support.  The UST
system requires no kernel support but libust and liburcu must be
installed.

$ ./configure --trace-backend ust
$ make

Start the UST daemon:
$ ustd &

List available tracepoints and enable some:
$ ustctl --list-markers $(pgrep qemu)
[...]
{PID: 5458, channel/marker: ust/paio_submit, state: 0, fmt: "acb %p
opaque %p sector_num %lu nb_sectors %lu type %lu" 0x4b32ba}
$ ustctl --enable-marker "ust/paio_submit" $(pgrep qemu)

Run the trace:
$ ustctl --create-trace $(pgrep qemu)
$ ustctl --start-trace $(pgrep qemu)
[...]
$ ustctl --stop-trace $(pgrep qemu)
$ ustctl --destroy-trace $(pgrep qemu)

Trace results can be viewed using lttv-gui.

More information about UST:
http://lttng.org/ust

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
trace: Check for LTTng Userspace Tracer headers

When using the 'ust' backend, check if the relevant headers are
available at host.

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Add trace file name command-line option
Prerna Saxena [Mon, 9 Aug 2010 10:48:32 +0000 (11:48 +0100)]
trace: Add trace file name command-line option

This patch adds an optional command line switch '-trace' to specify the
filename to write traces to, when qemu starts.
Eg, If compiled with the 'simple' trace backend,
[temp@system]$ qemu -trace FILENAME IMAGE
Allows the binary traces to be written to FILENAME instead of the option
set at config-time.

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Add trace-file command to open/close/flush trace file
Stefan Hajnoczi [Tue, 13 Jul 2010 08:26:33 +0000 (09:26 +0100)]
trace: Add trace-file command to open/close/flush trace file

This patch adds the trace-file command:

  trace-file [on|off|flush]

  Open, close, or flush the trace file.  If no argument is given,
  the status of the trace file is displayed.

The trace file is turned on by default but is only written out when the
trace buffer becomes full.  The flush operation can be used to force
write out at any time.

Turning off the trace file does not change the state of trace events;
tracing will continue to the trace buffer.  When the trace file is off,
use "info trace" to display the contents of the trace buffer in memory.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
This commit also contains the trace-file sub-command from the following
commit:

commit 5ce8d1a957afae2c52ad748944ce72848ccf57bd
Author: Prerna Saxena <prerna@linux.vnet.ibm.com>
Date:   Wed Aug 4 16:23:54 2010 +0530

    trace: Add options to specify trace file name at startup and runtime

    This patch adds an optional command line switch '-trace' to specify the
    filename to write traces to, when qemu starts.
    Eg, If compiled with the 'simple' trace backend,
    [temp@system]$ qemu -trace FILENAME IMAGE
    Allows the binary traces to be written to FILENAME instead of the option
    set at config-time.

    Also, this adds monitor sub-command 'set' to trace-file commands to
    dynamically change trace log file at runtime.
    Eg,
    (qemu)trace-file set FILENAME
    This allows one to set trace outputs to FILENAME from the default
    specified at startup.

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Specify trace file name
Prerna Saxena [Tue, 13 Jul 2010 08:26:32 +0000 (09:26 +0100)]
trace: Specify trace file name

Allow users to specify a file for trace-outputs at configuration.
Also, allow trace files to be annotated by <pid> so each qemu instance has
unique traces.

The trace file name can be passed as a config option:
--trace-file=/path/to/file
(Default: trace )
At runtime, the pid of the qemu process is appended to the filename so
that mutiple qemu instances do not have overlapping logs.

Eg : trace-1234 for qemu launched with pid 1234.

I have yet to test this on windows. getpid() is used at many places
in code(including vnc.c), so I'm hoping this would be okay too.

Edited-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Support disabled events in trace-events
Stefan Hajnoczi [Mon, 24 May 2010 10:32:09 +0000 (11:32 +0100)]
trace: Support disabled events in trace-events

Sometimes it is useful to disable a trace event.  Removing the event
from trace-events is not enough since source code will call the
trace_*() function for the event.

This patch makes it easy to build without specific trace events by
marking them disabled in trace-events:

disable multiwrite_cb(void *mcb, int ret) "mcb %p ret %d"

This builds without the multiwrite_cb trace event.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
trace: Allow bulk enabling/disabling of trace events at compile time

For 'simple' trace backend, allow bulk enabling/disabling of trace
events at compile time.  Trace events that are preceded by 'disable'
keyword are compiled in, but turned off by default. These can
individually be turned on using the monitor.  All other trace events are
enabled by default.

TODO :
This could be enhanced when the trace-event namespace is partitioned into a
group and an ID within that group. In such a case, marking a group as enabled
would automatically enable all trace-events listed under it.

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Support for dynamically enabling/disabling trace events
Prerna Saxena [Thu, 24 Jun 2010 11:34:53 +0000 (17:04 +0530)]
trace: Support for dynamically enabling/disabling trace events

This patch adds support for dynamically enabling/disabling of trace events.
This is done by internally maintaining each trace event's state, and
permitting logging of data from a trace event only if it is in an
'active' state.

Monitor commands added :
1) info trace-events  : to view all available trace events and
  their state.
2) trace-event NAME on|off  : to enable/disable data logging from a
  given trace event.
  Eg, trace-event paio_submit off
   disables logging of data when
paio_submit is hit.

By default, all trace-events are disabled. One can enable desired trace-events
via the monitor.

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
trace: Monitor command 'info trace'

Monitor command 'info trace' to display contents of trace buffer

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
trace: Remove monitor.h dependency from simpletrace

User-mode targets don't have a monitor so the simple trace backend
currently does not build on those targets.  This patch abstracts the
monitor printing interface so there is no direct coupling between
simpletrace and the monitor.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Add simple built-in tracing backend
Stefan Hajnoczi [Sat, 22 May 2010 18:24:51 +0000 (19:24 +0100)]
trace: Add simple built-in tracing backend

This patch adds a simple tracer which produces binary trace files.  To
try out the simple backend:

$ ./configure --trace-backend=simple
$ make

After running QEMU you can pretty-print the trace:

$ ./simpletrace.py trace-events trace.log

The output of simpletrace.py looks like this:

  qemu_realloc 0.699 ptr=0x24363f0 size=0x3 newptr=0x24363f0
  qemu_free 0.768 ptr=0x24363f0
  ^           ^---- timestamp delta (us)
  |____ trace event name

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
trace: Make trace record fields 64-bit

Explicitly use 64-bit fields in trace records so that timestamps and
magic numbers work for 32-bit host builds.

Includes fixes from Prerna Saxena <prerna@linux.vnet.ibm.com>.

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agotrace: Add trace-events file for declaring trace events
Stefan Hajnoczi [Sat, 22 May 2010 16:52:39 +0000 (17:52 +0100)]
trace: Add trace-events file for declaring trace events

This patch introduces the trace-events file where trace events can be
declared like so:

qemu_malloc(size_t size) "size %zu"
qemu_free(void *ptr) "ptr %p"

These trace event declarations are processed by a new tool called
tracetool to generate code for the trace events.  Trace event
declarations are independent of the backend tracing system (LTTng User
Space Tracing, ftrace markers, DTrace).

The default "nop" backend generates empty trace event functions.
Therefore trace events are disabled by default.

The trace-events file serves two purposes:

1. Adding trace events is easy.  It is not necessary to understand the
   details of a backend tracing system.  The trace-events file is a
   single location where trace events can be declared without code
   duplication.

2. QEMU is not tightly coupled to one particular backend tracing system.
   In order to support tracing across QEMU host platforms and to
   anticipate new backend tracing systems that are currently maturing,
   it is important to be flexible and not tied to one system.

This commit includes fixes from Prerna Saxena
<prerna@linux.vnet.ibm.com> and Blue Swirl <blauwirbel@gmail.com>.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
14 years agomicroblaze: Add support for fcmp.un
Edgar E. Iglesias [Thu, 9 Sep 2010 20:05:48 +0000 (22:05 +0200)]
microblaze: Add support for fcmp.un

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@petalogix.com>
14 years agoelf: Calculate symbol size if needed
Stefan Weil [Mon, 9 Aug 2010 14:43:53 +0000 (16:43 +0200)]
elf: Calculate symbol size if needed

Symbols with a size of 0 are unusable for the disassembler.

Example:

While running an arm linux kernel, no symbolic names are
used in qemu.log when the cpu is executing an assembler function.

Assume that the size of such symbols is the difference to the
next symbol value.

Signed-off-by: Stefan Weil <weil@mail.berlios.de>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agoFix OpenBSD build warning
Blue Swirl [Thu, 9 Sep 2010 19:13:04 +0000 (19:13 +0000)]
Fix OpenBSD build warning

Fix this warning:
  CC    savevm.o
/src/qemu/savevm.c: In function `do_savevm':
/src/qemu/savevm.c:1900: warning: passing arg 1 of `localtime_r' from incompatible pointer type

It looks like on OpenBSD the type of tv_sec in struct timeval is still
'long' instead of time_t as in most other OS. Fix by adding a cast.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agomicroblaze: User-mode emulation of hw-excp signals
Edgar E. Iglesias [Thu, 9 Sep 2010 08:24:01 +0000 (10:24 +0200)]
microblaze: User-mode emulation of hw-excp signals

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@petalogix.com>
14 years agomicroblaze: Add basic FPU emulation
Edgar E. Iglesias [Thu, 9 Sep 2010 08:20:17 +0000 (10:20 +0200)]
microblaze: Add basic FPU emulation

Missing:
* fcmp.un insn
* Denormalized exceptions
* Exception model is not accurate

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@petalogix.com>
14 years agomicroblaze: Add definitions for FSR reg fields
Edgar E. Iglesias [Thu, 9 Sep 2010 07:58:35 +0000 (09:58 +0200)]
microblaze: Add definitions for FSR reg fields

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@petalogix.com>
14 years agoRevert "Make default invocation of block drivers safer (v3)"
Anthony Liguori [Wed, 8 Sep 2010 22:09:15 +0000 (17:09 -0500)]
Revert "Make default invocation of block drivers safer (v3)"

This reverts commit 79368c81bf8cf93864d7afc88b81b05d8f0a2c90.

Conflicts:

block.c

I haven't been able to come up with a solution yet for the corruption caused by
unaligned requests from the IDE disk so revert until a solution can be written.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
14 years agoRevert "PPC: Qdev'ify e500 pci"
Anthony Liguori [Wed, 8 Sep 2010 19:55:19 +0000 (14:55 -0500)]
Revert "PPC: Qdev'ify e500 pci"

This reverts commit 13b7fdeffa68e3382231a70308593ae6a75d96c3.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
14 years agoRevert "PPC: Make e500 pci byte swap config data"
Anthony Liguori [Wed, 8 Sep 2010 19:54:58 +0000 (14:54 -0500)]
Revert "PPC: Make e500 pci byte swap config data"

This reverts commit cfb207e643d94e3e96d456b1df14c5e36f6aa9e5.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
14 years agoMerge remote branch 'agraf/ppc-next' into staging
Anthony Liguori [Wed, 8 Sep 2010 19:29:13 +0000 (14:29 -0500)]
Merge remote branch 'agraf/ppc-next' into staging

14 years agoMerge remote branch 'kwolf/for-anthony' into staging
Anthony Liguori [Wed, 8 Sep 2010 19:26:57 +0000 (14:26 -0500)]
Merge remote branch 'kwolf/for-anthony' into staging

14 years agoMerge remote branch 'mst/for_anthony' into staging
Anthony Liguori [Wed, 8 Sep 2010 19:26:14 +0000 (14:26 -0500)]
Merge remote branch 'mst/for_anthony' into staging

14 years agovirtio-9p: Change handling of flags in open() path for 9P2000.L
Sripathi Kodi [Fri, 20 Aug 2010 10:47:47 +0000 (16:17 +0530)]
virtio-9p: Change handling of flags in open() path for 9P2000.L

This patch applies on top of 9P2000.L patches that we have on the list.
I took a look at how 9P server is handling open() flags in 9P2000.L path.
I think we can do away with the valid_flags() function and simplify the
code. The reasoning is as follows:

O_NOCTTY: (If the file is a terminal, don't make it the controlling
terminal of the process even though the process does not have a controlling
terminal) By the time the control reaches 9P client it is clear that what
we have is not a terminal device. Hence it does not matter what we do with
this flag. In any case 9P server can filter this flag out before making the
syscall.

O_NONBLOCK: (Don't block if i) Can't read/write to the file ii) Can't get
locks) This has an impact on FIFOs, but also on file locks. Hence we can
pass it down to the system call.

O_ASYNC: From the manpage:

   O_ASYNC
          Enable signal-driven I/O: generate a signal (SIGIO by default,  but
          this  can be changed via fcntl(2)) when input or output becomes pos-
          sible on this file descriptor.  This feature is only available  for
          terminals,  pseudo-terminals,  sockets,  and (since Linux 2.6) pipes
          and FIFOs.  See fcntl(2) for further details.

Again, this does not make any impact on regular files handled by 9P. Also,
we don't want 9P server to receive SIGIO. Hence I think 9P server can
filter this flag out before making the syscall.

O_CLOEXEC: This flag makes sense only on the client. If guest user space
sets this flag the guest VFS will take care of calling close() on the fd if
an exec() happens. Hence 9P client need not be bothered with this flag.
Also I think QEMU will not do an exec, but if it does, it makes sense to
close these fds. Hence we can pass this flag down to the syscall.

O_CREAT: Since we are in open() path it means we have confirmed that the file
exists. Hence there is no need to pass O_CREAT flag down to the system. In fact
on some versions of glibc this causes problems, because we pass O_CREAT flag,
but don't have permission bits. Hence we can just mask this flag out.

So in summary:

Mask out:
O_NOCTTY
O_ASYNC
O_CREAT

Pass-through:
O_NONBLOCK
O_CLOEXEC

Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years ago[virtio-9p] This patch implements TLERROR/RLERROR on the qemu 9P server.
Arun R Bharadwaj [Wed, 28 Jul 2010 08:40:22 +0000 (14:10 +0530)]
[virtio-9p] This patch implements TLERROR/RLERROR on the qemu 9P server.

Signed-off-by: Arun R Bharadwaj <arun@linux.vnet.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years ago[virtio-9p] Remove all instances of unnecessary dotu variable.
Arun R Bharadwaj [Wed, 28 Jul 2010 08:25:05 +0000 (13:55 +0530)]
[virtio-9p] Remove all instances of unnecessary dotu variable.

Signed-off-by: Arun R Bharadwaj <arun@linux.vnet.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agovirtio-9p: Add support for removing xattr
Aneesh Kumar K.V [Thu, 26 Aug 2010 05:45:23 +0000 (11:15 +0530)]
virtio-9p: Add support for removing xattr

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
14 years agovirtio-9p: Fix the memset usage
Aneesh Kumar K.V [Thu, 2 Sep 2010 05:39:07 +0000 (11:09 +0530)]
virtio-9p: Fix the memset usage

The arguments are wrong. Use qemu_mallocz directly

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
14 years agovirtio-9p: Use lchown which won't follow symlink
Aneesh Kumar K.V [Thu, 2 Sep 2010 05:39:07 +0000 (11:09 +0530)]
virtio-9p: Use lchown which won't follow symlink

We should always use functions which don't follow
symlink on the server

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
14 years agovirtio-9p: Add SM_NONE security model
Aneesh Kumar K.V [Thu, 2 Sep 2010 05:39:07 +0000 (11:09 +0530)]
virtio-9p: Add SM_NONE security model

This is equivalent to SM_PASSTHROUGH security model.
The only exception is, failure of privilige operation like chown
are ignored. This makes a passthrough like security model usable
for people who runs kvm as non root

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
14 years agovirtio-9p: Hide user.virtfs xattr in case of mapped security.
Aneesh Kumar K.V [Thu, 2 Sep 2010 05:39:07 +0000 (11:09 +0530)]
virtio-9p: Hide user.virtfs xattr in case of mapped security.

With mapped security mode we use "user.virtfs" namespace is used
to store the virtFs related attributes. So hide it from user.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
14 years agovirtio-9p: Implement TXATTRCREATE
Aneesh Kumar K.V [Thu, 2 Sep 2010 05:39:07 +0000 (11:09 +0530)]
virtio-9p: Implement TXATTRCREATE

TXATTRCREATE:  Prepare a fid for setting xattr value on a file system object.

 size[4] TXATTRCREATE tag[2] fid[4] name[s] attr_size[8] flags[4]
 size[4] RXATTRWALK tag[2]

txattrcreate gets a fid pointing to xattr. This fid can later be
used to get set the xattr value.

flag value is derived from set Linux setxattr. The manpage says
"The flags parameter can be used to refine the semantics of the operation.
XATTR_CREATE specifies a pure create, which fails if the named attribute
exists already. XATTR_REPLACE specifies a pure replace operation, which
fails if the named attribute does not already exist. By default (no flags),
the extended attribute will be created if need be, or will simply replace
the value if the attribute exists."

The actual setxattr operation happens when the fid is clunked. At that point
the written byte count and the attr_size specified in TXATTRCREATE should be
same otherwise an error will be returned.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
14 years agovirtio-9p: Implement TXATTRWALK
Aneesh Kumar K.V [Thu, 2 Sep 2010 05:39:06 +0000 (11:09 +0530)]
virtio-9p: Implement TXATTRWALK

TXATTRWALK: Descend a ATTR namespace

 size[4] TXATTRWALK tag[2] fid[4] newfid[4] name[s]
 size[4] RXATTRWALK tag[2] size[8]

txattrwalk gets a fid pointing to xattr. This fid can later be
used to get read the xattr value. If name is NULL the fid returned
can be used to get the list of extended attribute associated to
the file system object.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
14 years agovirtio-9p: Add fidtype so that we can do type specific operation
Aneesh Kumar K.V [Thu, 2 Sep 2010 05:39:06 +0000 (11:09 +0530)]
virtio-9p: Add fidtype so that we can do type specific operation

We want to add type specific operation during read/write

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
14 years ago[virtio-9p] qemu: virtio-9p: Implement LOPEN
M. Mohan Kumar [Tue, 22 Jun 2010 14:17:04 +0000 (19:47 +0530)]
[virtio-9p] qemu: virtio-9p: Implement LOPEN

Implement 9p2000.L version of open(LOPEN) interface in qemu 9p server.

For LOPEN, no need to convert the flags to and from 9p mode to VFS mode.

Synopsis:

    size[4] Tlopen tag[2] fid[4] mode[4]

    size[4] Rlopen tag[2] qid[13] iounit[4]

Current qemu 9p server does not support following flags:
    O_NOCTTY, O_NONBLOCK, O_ASYNC & O_CLOEXEC

[Fix mode format - jvrao@linux.vnet.ibm.com]

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agorename - change name of file or directory
M. Mohan Kumar [Tue, 22 Jun 2010 06:59:41 +0000 (12:29 +0530)]
rename - change name of file or directory

size[4] Trename tag[2] fid[4] newdirfid[4] name[s]
size[4] Rrename tag[2]

Implement the 2000.L rename operation. A new function
v9fs_complete_rename is introduced that acts as a common entry point
for 2000.L rename operation and 2000.U rename opearation (via wstat).
As part of this change the field 'nname' (used only for rename) is
removed from the structure V9fsWstatState. Instead a new structure
V9fsRenameState is used for rename operations both by 2000.U and 2000.L
code paths. Both 2000.U and 2000.L rename code paths construct the
V9fsRenameState structure and passes that to v9fs_complete_rename
function.

Changes from previous version:
 Use qemu_mallocz to initialize
 Use strcpy,strcat functions instead of memcpy
 Changed the variable name to newdirfid
 Introduced post rename function
 Error checking
 Removed nname field from V9fsWstatState

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agoqemu: virtio-9p: Implement TMKDIR
M. Mohan Kumar [Tue, 22 Jun 2010 06:55:22 +0000 (12:25 +0530)]
qemu: virtio-9p: Implement TMKDIR

Synopsis

    size[4] Tmkdir tag[2] fid[4] name[s] mode[4] gid[4]

    size[4] Rmkdir tag[2] qid[13]

Description

    mkdir asks the file server to create a directory with given name,
    mode and gid. The qid for the new directory is returned with
    the mkdir reply message.

Note: 72 is selected as the opcode for TMKDIR from the reserved list.

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
[jvrao@linux.vnet.ibm.com: Fix perm handling when creating directory]

Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agoqemu: virtio-9p: Implement TMKNOD
M. Mohan Kumar [Tue, 22 Jun 2010 06:54:09 +0000 (12:24 +0530)]
qemu: virtio-9p: Implement TMKNOD

Implement TMKNOD as part of 2000.L Work

Synopsis

    size[4] Tmknod tag[2] fid[4] name[s] mode[4] major[4] minor[4] gid[4]

    size[4] Rmknod tag[2] qid[13]

Description

    mknod asks the file server to create a device node with given device
    type, mode and gid. The qid for the new device node is returned with
    the mknod reply message.

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years ago[virtio-9p] This patch implements TLCREATE for 9p2000.L protocol.
Venkateswararao Jujjuri (JV) [Fri, 18 Jun 2010 01:27:24 +0000 (18:27 -0700)]
[virtio-9p]  This patch implements TLCREATE for 9p2000.L protocol.

SYNOPSIS

    size[4] Tlcreate tag[2] fid[4] name[s] flags[4] mode[4] gid[4]

    size[4] Rlcreate tag[2] qid[13] iounit[4]

DESCRIPTION

The Tlreate request asks the file server to create a new regular file with the
name supplied, in the directory (dir) represented by fid.
The mode argument specifies the permissions to use. New file is created with
the uid if the fid and with supplied gid.

The flags argument represent Linux access mode flags with which the caller
is requesting to open the file with. Protocol allows all the Linux access
modes but it is upto the server to allow/disallow any of these acess modes.
If the server doesn't support any of the access mode, it is expected to
return error.

To start with we will not restricit/limit any Linux flags on this server.
If needed, We can start restricting as we move forward with various use cases.

Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years ago[virtio-9p] Define and implement TSYMLINK for 9P2000.L
Venkateswararao Jujjuri (JV) [Wed, 9 Jun 2010 21:02:08 +0000 (14:02 -0700)]
[virtio-9p] Define and implement TSYMLINK for 9P2000.L

This patch implements creating a symlink for TSYMLINK request
and responds with RSYMLINK. In the case of error, we return RERROR.

SYNOPSIS

    size[4] Tsymlink tag[2] fid[4] name[s] symtgt[s] gid[4]

    size[4] Rsymlink tag[2] qid[13]

    DESCRIPTION

    Create a symbolic link named 'name' pointing to 'symtgt'.
    gid represents the effective group id of the caller.
    The  permissions of a symbolic link are irrelevant hence it is omitted
    from the protocol.

Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years ago[virtio-9p] Implement TLINK for 9P2000.L
Venkateswararao Jujjuri (JV) [Wed, 9 Jun 2010 18:21:15 +0000 (11:21 -0700)]
[virtio-9p] Implement TLINK for 9P2000.L

Create a Hardlink.

SYNOPSIS

size[4] Tlink tag[2] dfid[4] oldfid[4] newpath[s]

size[4] Rlink tag[2]

DESCRIPTION

Create a link 'newpath' in directory pointed by dfid linking to oldfid path.

Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agovirtio-9p: Implement server side of setattr for 9P2000.L protocol.
Sripathi Kodi [Thu, 17 Jun 2010 12:48:47 +0000 (18:18 +0530)]
virtio-9p: Implement server side of setattr for 9P2000.L protocol.

SYNOPSIS

      size[4] Tsetattr tag[2] attr[n]

      size[4] Rsetattr tag[2]

   DESCRIPTION

      The setattr command changes some of the file status information.
      attr resembles the iattr structure used in Linux kernel. It
      specifies which status parameter is to be changed and to what
      value. It is laid out as follows:

         valid[4]
            specifies which status information is to be changed. Possible
            values are:
            ATTR_MODE       (1 << 0)
            ATTR_UID        (1 << 1)
            ATTR_GID        (1 << 2)
            ATTR_SIZE       (1 << 3)
            ATTR_ATIME      (1 << 4)
            ATTR_MTIME      (1 << 5)
            ATTR_CTIME      (1 << 5)
            ATTR_ATIME_SET  (1 << 7)
            ATTR_MTIME_SET  (1 << 8)

            The last two bits represent whether the time information
            is being sent by the client's user space. In the absense
            of these bits the server always uses server's time.

         mode[4]
            File permission bits

         uid[4]
            Owner id of file

         gid[4]
            Group id of the file

         size[8]
            File size

         atime_sec[8]
            Time of last file access, seconds

         atime_nsec[8]
            Time of last file access, nanoseconds

         mtime_sec[8]
            Time of last file modification, seconds

         mtime_nsec[8]
            Time of last file modification, nanoseconds

Explanation of the patches:
--------------------------

*) The kernel just copies relevent contents of iattr structure to p9_iattr_dotl
   structure and passes it down to the client. The only check it has is calling
   inode_change_ok()
*) The p9_iattr_dotl structure does not have ctime and ia_file parameters because
   I don't think these are needed in our case. The client user space can request
   updating just ctime by calling chown(fd, -1, -1). This is handled on server
   side without a need for putting ctime on the wire.
*) The server currently supports changing mode, time, ownership and size of the
   file.
*) 9P RFC says "Either all the changes in wstat request happen, or none of them
   does: if the request succeeds, all changes were made; if it fails, none were."
   I have not done anything to implement this specifically because I don't see
   a reason.

[jvrao@linux.vnet.ibm.com: Parts of code for handling chown(-1,-1)

Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years ago[virtio-9p] Make v9fs_do_utimensat accept timespec structures instead of v9stat.
Sripathi Kodi [Wed, 9 Jun 2010 13:44:38 +0000 (19:14 +0530)]
[virtio-9p] Make v9fs_do_utimensat accept timespec structures instead of v9stat.

Currently v9fs_do_utimensat takes a V9fsStat argument and builds
timespec structures. It sets tv_nsec values to 0 by default. Instead
of this it should take struct timespec[2] and pass it down to the
system directly. This will make it more generic and useful
elsewhere.

Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agovirtio-9p: Do not reset atime
M. Mohan Kumar [Wed, 9 Jun 2010 13:44:38 +0000 (19:14 +0530)]
virtio-9p: Do not reset atime

    Current code resets file's atime to 0 when there is a change in mtime.
    This results in resetting the atime to "1970-01-01 05:30:00". For
    example, truncate -s 0 filename results in changing the mtime to the
    truncate time, but resets the atime to "1970-01-01 05:30:00". utime
    system call does not have any provision to set only mtime or atime. So
    change v9fs_wstat_post_chmod function to use utimensat function to change
    the atime and mtime fields. If tv_nsec field is set to the special value
    "UTIME_OMIT", corresponding file time stamp is not updated.

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agovirtio-9p: getattr server implementation for 9P2000.L protocol.
Sripathi Kodi [Tue, 20 Jul 2010 06:14:41 +0000 (11:44 +0530)]
virtio-9p: getattr server implementation for 9P2000.L protocol.

           SYNOPSIS

              size[4] Tgetattr tag[2] fid[4] request_mask[8]

              size[4] Rgetattr tag[2] lstat[n]

           DESCRIPTION

              The getattr transaction inquires about the file identified by fid.
              request_mask is a bit mask that specifies which fields of the
              stat structure is the client interested in.

              The reply will contain a machine-independent directory entry,
              laid out as follows:

                 st_result_mask[8]
                    Bit mask that indicates which fields in the stat structure
                    have been populated by the server

                 qid.type[1]
                    the type of the file (directory, etc.), represented as a bit
                    vector corresponding to the high 8 bits of the file's mode
                    word.

                 qid.vers[4]
                    version number for given path

                 qid.path[8]
                    the file server's unique identification for the file

                 st_mode[4]
                    Permission and flags

                 st_uid[4]
                    User id of owner

                 st_gid[4]
                    Group ID of owner

                 st_nlink[8]
                    Number of hard links

                 st_rdev[8]
                    Device ID (if special file)

                 st_size[8]
                    Size, in bytes

                 st_blksize[8]
                    Block size for file system IO

                 st_blocks[8]
                    Number of file system blocks allocated

                 st_atime_sec[8]
                    Time of last access, seconds

                 st_atime_nsec[8]
                    Time of last access, nanoseconds

                 st_mtime_sec[8]
                    Time of last modification, seconds

                 st_mtime_nsec[8]
                    Time of last modification, nanoseconds

                 st_ctime_sec[8]
                    Time of last status change, seconds

                 st_ctime_nsec[8]
                    Time of last status change, nanoseconds

                 st_btime_sec[8]
                    Time of creation (birth) of file, seconds

                 st_btime_nsec[8]
                    Time of creation (birth) of file, nanoseconds

                 st_gen[8]
                    Inode generation

                 st_data_version[8]
                    Data version number

              request_mask and result_mask bit masks contain the following bits
                 #define P9_STATS_MODE          0x00000001ULL
                 #define P9_STATS_NLINK         0x00000002ULL
                 #define P9_STATS_UID           0x00000004ULL
                 #define P9_STATS_GID           0x00000008ULL
                 #define P9_STATS_RDEV          0x00000010ULL
                 #define P9_STATS_ATIME         0x00000020ULL
                 #define P9_STATS_MTIME         0x00000040ULL
                 #define P9_STATS_CTIME         0x00000080ULL
                 #define P9_STATS_INO           0x00000100ULL
                 #define P9_STATS_SIZE          0x00000200ULL
                 #define P9_STATS_BLOCKS        0x00000400ULL

                 #define P9_STATS_BTIME         0x00000800ULL
                 #define P9_STATS_GEN           0x00001000ULL
                 #define P9_STATS_DATA_VERSION  0x00002000ULL

                 #define P9_STATS_BASIC         0x000007ffULL
                 #define P9_STATS_ALL           0x00003fffULL

        This patch implements the client side of getattr implementation for 9P2000.L.
        It introduces a new structure p9_stat_dotl for getting Linux stat information
        along with QID. The data layout is similar to stat structure in Linux user
        space with the following major differences:

        inode (st_ino) is not part of data. Instead qid is.

        device (st_dev) is not part of data because this doesn't make sense on the
        client.

        All time variables are 64 bit wide on the wire. The kernel seems to use
        32 bit variables for these variables. However, some of the architectures
        have used 64 bit variables and glibc exposes 64 bit variables to user
        space on some architectures. Hence to be on the safer side we have made
        these 64 bit in the protocol. Refer to the comments in
        include/asm-generic/stat.h

        There are some additional fields: st_btime_sec, st_btime_nsec, st_gen,
        st_data_version apart from the bitmask, st_result_mask. The bit mask
        is filled by the server to indicate which stat fields have been
        populated by the server. Currently there is no clean way for the
        server to obtain these additional fields, so it sends back just the
        basic fields.

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
14 years agovirtio-9p: Compute iounit based on host filesystem block size
M. Mohan Kumar [Wed, 9 Jun 2010 13:44:28 +0000 (19:14 +0530)]
virtio-9p: Compute iounit based on host filesystem block size

Compute iounit based on the host filesystem block size and pass it to
client with open/create response. Also return iounit as statfs's f_bsize
for optimal block size transfers.

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
Reviewd-by: Sripathi Kodi <sripathik@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years ago[V4] virtio-9p: readdir implementation for 9p2000.L
Sripathi Kodi [Wed, 9 Jun 2010 09:27:57 +0000 (14:57 +0530)]
[V4] virtio-9p: readdir implementation for 9p2000.L

This patch implements the server part of readdir() implementation for
9p2000.L

    SYNOPSIS

    size[4] Treaddir tag[2] fid[4] offset[8] count[4]
    size[4] Rreaddir tag[2] count[4] data[count]

    DESCRIPTION

    The readdir request asks the server to read the directory specified by 'fid'
    at an offset specified by 'offset' and return as many dirent structures as
    possible that fit into count bytes. Each dirent structure is laid out as
    follows.

            qid.type[1]
              the type of the file (directory, etc.), represented as a bit
              vector corresponding to the high 8 bits of the file's mode
              word.

            qid.vers[4]
              version number for given path

            qid.path[8]
              the file server's unique identification for the file

            offset[8]
              offset into the next dirent.

            type[1]
              type of this directory entry.

            name[256]
              name of this directory entry.

Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
Reviewed-by: M. Mohan Kumar <mohan@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agovirtio-9p: Return correct error from v9fs_remove
Sripathi Kodi [Wed, 9 Jun 2010 09:03:22 +0000 (14:33 +0530)]
virtio-9p: Return correct error from v9fs_remove

Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
In v9fs_remove_post_remove() we currently ignore the error returned by
the previous call to remove() and return an error only if freeing the
fid fails. However, the client expects to see the error from remove().
Currently the client falsely thinks that the remove call has always
succeeded. For example, doing rmdir on a non-empty directory does
not return ENOTEMPTY.

With this patch we ignore the error from free_fid(). The client cannot
use this error value anyway.

Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agoqemu: virtio-9p: Implement statfs support in server
M. Mohan Kumar [Mon, 10 May 2010 06:41:03 +0000 (12:11 +0530)]
qemu: virtio-9p: Implement statfs support in server

Implement statfs support in qemu server based on Sripathi's
initial statfs patch.

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agoqemu: virtio-9p: Recognize 9P2000.L protocol
M. Mohan Kumar [Thu, 27 May 2010 08:27:29 +0000 (13:57 +0530)]
qemu: virtio-9p: Recognize 9P2000.L protocol

Make 9P server recognize 9P2000.L protocol version

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
14 years agoqcow2: Remove unnecessary flush after L2 write
Kevin Wolf [Wed, 1 Sep 2010 10:40:52 +0000 (12:40 +0200)]
qcow2: Remove unnecessary flush after L2 write

When a new cluster was allocated, we only need a flush after the write to the
L2 table if it was a COW and we need to decrease the refcounts of the old
clusters.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblock: Fix BDRV_O_CACHE_MASK
Kevin Wolf [Tue, 31 Aug 2010 13:08:03 +0000 (15:08 +0200)]
block: Fix BDRV_O_CACHE_MASK

BDRV_O_CACHE_MASK should have been extended when cache=unsafe introduced a new
flag BDRV_O_NO_FLUSH. There are currently no users that would change their
behaviour because of this, but let's clean it up before things break.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoqemu-img convert: Use cache=unsafe for output image
Kevin Wolf [Tue, 31 Aug 2010 11:44:25 +0000 (13:44 +0200)]
qemu-img convert: Use cache=unsafe for output image

If qemu-img crashes during the conversion, the user will throw away the broken
output file anyway and start over. So no need to be too cautious.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoraw-posix: improve detection of scsi-generic devices
Bernhard Kohl [Mon, 6 Sep 2010 15:06:02 +0000 (17:06 +0200)]
raw-posix: improve detection of scsi-generic devices

Allow symbolic links which point to /dev/sgX devices.

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoscsi-disk: add some optional scsi commands
Bernhard Kohl [Mon, 6 Sep 2010 09:50:55 +0000 (11:50 +0200)]
scsi-disk: add some optional scsi commands

I use a legacy OS which depends on some optional SCSI commands.
In fact this implementation does nothing special, but provides minimum
support for the following commands:

REZERO UNIT
WRITE AND VERIFY(10)
WRITE AND VERIFY(12)
WRITE AND VERIFY(16)
MODE SELECT(6)
MODE SELECT(10)
SEEK(6)
SEEK(10)

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoImprove ATA IDENTIFY word 64 contents.
Jonathan A. Kollasch [Fri, 3 Sep 2010 12:57:46 +0000 (07:57 -0500)]
Improve ATA IDENTIFY word 64 contents.

Fill in word 64 of IDENTIFY data to indicate support for PIO modes 3 and 4.
This allows NetBSD guests to use UltraDMA modes instead of just PIO mode 0.

Signed-off-by: Jonathan A. Kollasch <jakllsch@kollasch.net>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoraw-posix: Don't use file name for host_cdrom detection on Linux
Kevin Wolf [Thu, 2 Sep 2010 15:48:32 +0000 (17:48 +0200)]
raw-posix: Don't use file name for host_cdrom detection on Linux

On Linux, we have code to detect CD-ROMs using an ioctl. We shouldn't lose
anything but false positives by removing the check for a /dev/cd* path.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoqemu-io: Make alloc output useful when nb_sectors=1
Stefan Hajnoczi [Thu, 2 Sep 2010 09:38:03 +0000 (10:38 +0100)]
qemu-io: Make alloc output useful when nb_sectors=1

There is no indication whether or not the sector is allocated when
nb_sectors=1:

  sector allocated at offset 64 KiB

This message is produced whether or not the sector is allocated.

Simply use the same message as the plural case, I don't think the
English is so broken that we need special case output here:

  0/1 sectors allocated at offset 64 KiB

This change does not affect qemu-iotests since nb_sectors=1 is not used
there.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoscsi: fix and improve debug prints
Bernhard Kohl [Wed, 1 Sep 2010 14:33:21 +0000 (16:33 +0200)]
scsi: fix and improve debug prints

Some of them are not compile clean.

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoscsi-disk: fix the check of the DBD bit in the MODE SENSE command
Bernhard Kohl [Tue, 31 Aug 2010 12:08:27 +0000 (14:08 +0200)]
scsi-disk: fix the check of the DBD bit in the MODE SENSE command

The DBD bit does not work as expected.

SCSI-Spec:
http://ldkelley.com/SCSI2/SCSI2/SCSI2-08.html#8.2.10
"A disable block descriptors (DBD) bit of zero indicates that the target
may return zero or more block descriptors in the returned MODE SENSE
data (see 8.3.3), at the target's discretion. A DBD bit of one
specifies that the target shall not return any block descriptors in the
returned MODE SENSE data."

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoscsi-disk: return CHECK CONDITION for unknown page codes in the MODE SENSE command
Bernhard Kohl [Tue, 31 Aug 2010 12:08:26 +0000 (14:08 +0200)]
scsi-disk: return CHECK CONDITION for unknown page codes in the MODE SENSE command

SCSI-Spec:
http://ldkelley.com/SCSI2/SCSI2/SCSI2-08.html#8.2.10
"An initiator may request any one or all of the supported mode pages
from a target. If an initiator issues a MODE SENSE command with a
page code value not implemented by the target, the target shall return
CHECK CONDITION status and shall set the sense key to ILLEGAL REQUEST
and the additional sense code to INVALID FIELD IN CDB."

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoscsi-disk: fix the block descriptor returned by the MODE SENSE command
Bernhard Kohl [Tue, 31 Aug 2010 12:08:25 +0000 (14:08 +0200)]
scsi-disk: fix the block descriptor returned by the MODE SENSE command

The block descriptor contains the number of blocks, not the highest LBA.
Real hard disks return 0 if the number of blocks exceed the maximum 0xFFFFFF.

SCSI-Spec:
http://ldkelley.com/SCSI2/SCSI2/SCSI2-08.html#8.3.3
"The number of blocks field specifies the number of logical blocks on the
medium to which the density code and block length fields apply. A value
of zero indicates that all of the remaining logical blocks of the logical
unit shall have the medium characteristics specified."

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoscsi-disk: respect the page control (PC) field in the MODE SENSE command
Bernhard Kohl [Tue, 31 Aug 2010 12:08:24 +0000 (14:08 +0200)]
scsi-disk: respect the page control (PC) field in the MODE SENSE command

The page control (PC) field defines the type of mode parameter values
to be returned in the mode pages:

PC=0 : Current values
PC=1 : Changeable values
PC=2 : Default values
PC=3 : Saved values

The current implementation always returns the same type of parameters.
This is OK for Current and Default values as we don't support changes
to be done by the MODE SELECT command.

For Saved values the following applies (implemented by this patch):
"A PC field value of 3h requests that the target return the saved
values of the mode parameters. Implementation of saved page parameters
is optional. Mode parameters not supported by the target shall be set
to zero. If saved values are not implemented, the command shall be
terminated with CHECK CONDITION status, the sense key set to
ILLEGAL REQUEST and the additional sense code set to
SAVING PARAMETERS NOT SUPPORTED."

For Changeable values the following applies (implemented by this patch):
"A PC field value of 1h requests that the target return a mask denoting
those mode parameters that are changeable. In the mask, the fields of
the mode parameters that are changeable shall be set to all one bits and
the fields of the mode parameters that are non-changeable (i.e. defined
by the target) shall be set to all zero bits."

In newer versions of the SCSI-2 spec the following clause was added.
"If the logical unit does not implement changeable parameters mode pages
and the device server receives a MODE SENSE command with 01b in the PC
field, then the command shall be terminated with CHECK CONDITION status,
with the sense key set to ILLEGAL REQUEST, and the additional sense code
set to INVALID FIELD IN CDB."

This was not yet included in the SCSI-2 Working Drafts from 1986-1993.
I assume that the variant to return CHECK CONDITION for PC=1 is not
widely implemented by real devices. I have a legacy OS which fails,
if MODE_SENSE returns non GOOD for PC=1. So for highest compatibility I
implemented the former variant with this patch.

The last Working Draft X3T9.2 Rev. 10L 7-SEP-93 can be found here:
http://ldkelley.com/SCSI2/SCSI2/SCSI2-08.html#8.2.10

In mode_sense_page() this patch also avoids multiple hard coded
definitions of the same mode page length. Instead I use the varable
p[1]. In fact the returned length of the mode pages 4 and 5 were wrong
(2 bytes less).

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoscsi-disk: fix the mode data header returned by the MODE SENSE(10) command
Bernhard Kohl [Tue, 31 Aug 2010 12:08:23 +0000 (14:08 +0200)]
scsi-disk: fix the mode data header returned by the MODE SENSE(10) command

The header for the  MODE SENSE(10) command is 8 bytes long.

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoscsi-disk: fix the mode data length field returned by the MODE SENSE command
Bernhard Kohl [Tue, 31 Aug 2010 09:22:29 +0000 (11:22 +0200)]
scsi-disk: fix the mode data length field returned by the MODE SENSE command

The MODE DATA LENGTH field indicates the length in bytes of the following
data that is available to be transferred. The mode data length does not include
the number of bytes in the MODE DATA LENGTH field.

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agovirtio-net: Introduce a new bottom half packet TX
Alex Williamson [Thu, 2 Sep 2010 15:01:10 +0000 (09:01 -0600)]
virtio-net: Introduce a new bottom half packet TX

Based on a patch from Mark McLoughlin, this patch introduces a new
bottom half packet transmitter that avoids the latency imposed by
the tx_timer approach.  Rather than scheduling a timer when a TX
packet comes in, schedule a bottom half to be run from the iothread.
The bottom half handler first attempts to flush the queue with
notification disabled (this is where we could race with a guest
without txburst).  If we flush a full burst, reschedule immediately.
If we send short of a full burst, try to re-enable notification.
To avoid a race with TXs that may have occurred, we must then
flush again.  If we find some packets to send, the guest it probably
active, so we can reschedule again.

tx_timer and tx_bh are mutually exclusive, so we can re-use the
tx_waiting flag to indicate one or the other needs to be setup.
This allows us to seamlessly migrate between timer and bh TX
handling.

The bottom half handler becomes the new default and we add a new
tx= option to virtio-net-pci.  Usage:

-device virtio-net-pci,tx=timer # select timer mitigation vs "bh"

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
14 years agovirtio-net: Rename tx_timer_active to tx_waiting
Alex Williamson [Thu, 2 Sep 2010 15:01:04 +0000 (09:01 -0600)]
virtio-net: Rename tx_timer_active to tx_waiting

De-couple this from the timer since we might want to use
different backends to send the packet.

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
14 years agovirtio-net: Limit number of packets sent per TX flush
Alex Williamson [Thu, 2 Sep 2010 15:00:57 +0000 (09:00 -0600)]
virtio-net: Limit number of packets sent per TX flush

If virtio_net_flush_tx() is called with notification disabled, we can
race with the guest, processing packets at the same rate as they
get produced.  The trouble is that this means we have no guaranteed
exit condition from the function and can spend minutes in there.
Currently flush_tx is only called with notification on, which seems
to limit us to one pass through the queue per call.  An upcoming
patch changes this.

Also add an option to set this value on the command line as different
workloads may wish to use different values.  We can't necessarily
support any random value, so this is a developer option: x-txburst=
Usage:

-device virtio-net-pci,x-txburst=64 # 64 packets per tx flush

One pass through the queue (256) seems to be a good default value
for this, balancing latency with throughput.  We use a signed int
for x-txburst because 2^31 packets in a burst would take many, many
minutes to process and it allows us to easily return a negative
value value from virtio_net_flush_tx() to indicate a back-off
or error condition.

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
14 years agovirtio-net: Make tx_timer timeout configurable
Alex Williamson [Thu, 2 Sep 2010 15:00:50 +0000 (09:00 -0600)]
virtio-net: Make tx_timer timeout configurable

Add an option to make the TX mitigation timer adjustable as a device
option.  The 150us hard coded default used currently is reasonable,
but may not be suitable for all workloads, this gives us a way to
adjust it using a single binary.  We can't support any random option
though, so use the "x-" prefix to indicate this is a developer
option.  Usage:

-device virtio-net-pci,x-txtimer=500000,... # .5ms timeout

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
14 years agovhost_net: mergeable buffers support
Michael S. Tsirkin [Fri, 16 Jul 2010 08:43:43 +0000 (11:43 +0300)]
vhost_net: mergeable buffers support

use the new tap APIs to set header length

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
14 years agotap: add APIs for vnet header length
Michael S. Tsirkin [Fri, 16 Jul 2010 08:16:06 +0000 (11:16 +0300)]
tap: add APIs for vnet header length

Add APIs to control host header length. First user
will be vhost-net.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
14 years agotap: generalize code for different vnet header len
Michael S. Tsirkin [Tue, 13 Jul 2010 14:55:31 +0000 (17:55 +0300)]
tap: generalize code for different vnet header len

Make host vnet header length a structure field in
preparation for using this support in linux kernel.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
14 years agoPPC: Change PPC maintainer
Alexander Graf [Tue, 7 Sep 2010 11:46:15 +0000 (13:46 +0200)]
PPC: Change PPC maintainer

Since nobody else seems interested in maintaining PPC, let's change the
maintainer to myself. I keep a staging tree anyways and am probably the
person touching most of that code these days.

This changes the maintainer entry for working ppc targets to myself.

Signed-off-by: Alexander Graf <agraf@suse.de>
14 years agoqemu: e1000 fix TOR math
Michael S. Tsirkin [Thu, 2 Sep 2010 14:47:43 +0000 (17:47 +0300)]
qemu: e1000 fix TOR math

Patch b0b900070c7cb29bbefb732ec00397abe5de6d73 made
TOR valuer incorrect: the spec says it should always
include the CRC field.
No one seems to use this field, but better to stick to spec.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
14 years agoPPC: Make e500 pci byte swap config data
Alexander Graf [Mon, 30 Aug 2010 22:22:50 +0000 (00:22 +0200)]
PPC: Make e500 pci byte swap config data

The config data field on the e500 pci controller is in little endian, so we need
to enable byte swap there.

Signed-off-by: Alexander Graf <agraf@suse.de>
14 years agoPPC: Qdev'ify e500 pci
Alexander Graf [Mon, 30 Aug 2010 22:22:28 +0000 (00:22 +0200)]
PPC: Qdev'ify e500 pci

The e500 PCI controller isn't qdev'ified yet. This leads to severe issues
when running with -drive.

To be able to use a virtio disk with an e500 VM, let's convert the PCI
controller over to qdev.

Signed-off-by: Alexander Graf <agraf@suse.de>
14 years agoKVM: PPC: Add level based interrupt logic
Alexander Graf [Mon, 30 Aug 2010 11:49:15 +0000 (13:49 +0200)]
KVM: PPC: Add level based interrupt logic

KVM on PowerPC used to have completely broken interrupt logic. Usually,
interrupts work by having a PIC that pulls a line up/down, so the CPU knows
that an interrupt is active. This line stays active until some action is
done to the PIC to release the line.

On KVM for PPC, we just checked if there was an interrupt pending and pulled
a line in the kernel module. We never released it though, hoping that kernel
space would just declare an interrupt as released when injected - which is
wrong.

To fix this, we need to completely redesign the interrupt injection logic.
Whenever an interrupt line gets triggered, we need to notify kernel space
that the line is up. Whenever it gets released, we do the same. This way
we can assure that the interrupt state is always known to kernel space.

This fixes random stalls in KVM guests on PowerPC that were waiting for
an interrupt while everyone else thought they received it already.

Signed-off-by: Alexander Graf <agraf@suse.de>
14 years agovnc: use bswapNN() rather than bswap_NN()
Izumi Tsutsui [Sun, 8 Aug 2010 09:54:05 +0000 (18:54 +0900)]
vnc: use bswapNN() rather than bswap_NN()

bswap_NN() variants are not always available in CONFIG_MACHINE_BSWAP_H case
and bswapNN() are public APIs in "bswap.h".

Signed-off-by: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agovnc: tight: remove unused variable
Serge Ziryukin [Sat, 28 Aug 2010 20:24:33 +0000 (23:24 +0300)]
vnc: tight: remove unused variable

Signed-off-by: Serge Ziryukin <ftrvxmtrx@gmail.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agoFix ivshmem build on 32-bit hosts
Avi Kivity [Sun, 29 Aug 2010 09:43:15 +0000 (12:43 +0300)]
Fix ivshmem build on 32-bit hosts

stat() fields can be more or less anything depending on configuration, cast
explicitly to uint64_t to avoid printf() format mismatches.

Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agovirtio-9p: Make sure -virtfs option works correctly
Aneesh Kumar K.V [Thu, 2 Sep 2010 16:17:59 +0000 (21:47 +0530)]
virtio-9p: Make sure -virtfs option works correctly

When making copy of arguments we were doing partial copy

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agohw/ivshmem.c don't check for negative values on unsigned data types
Jes Sorensen [Mon, 30 Aug 2010 10:31:33 +0000 (12:31 +0200)]
hw/ivshmem.c don't check for negative values on unsigned data types

There is no need to check for dest < 0 or vector >= 0 as both are
uint16_t.

This should fix problems with broken build with aggressive compiler
flags. Reported by Xudong Hao <xudong.hao@intel.com>

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Acked-by: Cam Macdonell <cam@cs.ualberta.ca>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>