xen.git
13 years agoxen: reinstate previously unused XENMEM_remove_from_physmap hypercall
Daniel De Graaf [Sat, 28 Jan 2012 13:47:24 +0000 (13:47 +0000)]
xen: reinstate previously unused XENMEM_remove_from_physmap hypercall

This patch reinstates the XENMEM_remove_from_physmap hypercall
which was removed in 19041:ee62aaafff46 because it was not used.

However, is now needed in order to support xenstored stub domains.
The xenstored stub domain is not priviliged like dom0 and so cannot
unilaterally map the xenbus page of other guests into it's address
space.  Therefore, before creating a domU the domain builder needs to
seed its grant table with a grant ref allowing the xenstored stub
domain to access the new domU's xenbus page.

At present domU's do not start with their grant table mapped.
Instead it gets mapped when the guest requests a grant table from
the hypervisor.

In order to seed the grant table, the domain builder first needs to
map it into dom0 address space.  But the hypercall to do this
requires a gpfn (guest pfn), which is an mfn for PV guest, but a pfn
for HVM guests.  Therfore, in order to seed the grant table of an
HVM guest, dom0 needs to *temporarily* map it into the guest's
"physical" address space.

Hence the need to reinstate the XENMEM_remove_from_physmap hypercall.

Signed-off-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoxen: introduce PHYSDEVOP_pirq_eoi_gmfn_v2
Stefano Stabellini [Sat, 28 Jan 2012 13:45:13 +0000 (13:45 +0000)]
xen: introduce PHYSDEVOP_pirq_eoi_gmfn_v2

PHYSDEVOP_pirq_eoi_gmfn changes the semantics of PHYSDEVOP_eoi.
In order to improve the interface this patch:

- renames PHYSDEVOP_pirq_eoi_gmfn to PHYSDEVOP_pirq_eoi_gmfn_v1;

- introduces PHYSDEVOP_pirq_eoi_gmfn_v2, that is like
  PHYSDEVOP_pirq_eoi_gmfn_v1 but it doesn't modify the behaviour of
  another hypercall;

- bump __XEN_LATEST_INTERFACE_VERSION__;

- #define PHYSDEVOP_pirq_eoi_gmfn to PHYSDEVOP_pirq_eoi_gmfn_v1 or
  PHYSDEVOP_pirq_eoi_gmfn_v2 depending on the __XEN_INTERFACE_VERSION.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agovesa: flush lfb after zeroing
Andrew Cooper [Sat, 28 Jan 2012 13:42:25 +0000 (13:42 +0000)]
vesa: flush lfb after zeroing

If Xen is going to relinquish the VGA console, flush the linear frame
buffer after zeroing it in vesa_endboot().

Failing to do so in some circumstances leads to the actual linear
framebuffer on the graphics card still containing the output of the
Xen boot console can lead to ugly graphics output when dom0 is setting
up the graphics card for its own use.

While the patch is quite large, it is mostly just code motion to
prevent having to forward declare lfb_flush().  The only functional
change to vesa_endboot() is to insert a call to lbf_flush().

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoConsole: introduce console=none command line parameter
Andrew Cooper [Sat, 28 Jan 2012 13:41:42 +0000 (13:41 +0000)]
Console: introduce console=none command line parameter

Currenty, not specifying 'console=<foo>' on the command line causes
Xen to default to 'vga'.  Alternativly, the user can explicitly
specifiy 'console=vga|com1|com2'.

However, there is no way to specify that neither vga nor serial should
be used.  Specifying 'console=' does have the effect that neither vga
nor serial is set up, but at the cost of an "Bad console= option ''"
warning.

Therefore, expliticly support a 'console=none' option which does not
set up vga and does not set up serial, but does not trigger the bad
console warning.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoamd iommu: disable iommu emulation on non-iommu systems
Wei Wang [Sat, 28 Jan 2012 13:40:36 +0000 (13:40 +0000)]
amd iommu: disable iommu emulation on non-iommu systems

Introduce a new flag to disable iommu emulation on old iommu systems.
This patch is taken from my v4 patch queue, which is till pending, to
make old or non-iommu system to run cleanly without interfered by
iommuv2 codes. This might be helpful to isolate iommuv2 code in
debugging unstable regressions. The reset part of v4 will be re-based.

Signed-off-by: Wei Wang <wei.wang2@amd.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agolibxl: allow for specifying the CPU affinity in the config file.
Dario Faggioli [Fri, 27 Jan 2012 19:17:03 +0000 (19:17 +0000)]
libxl: allow for specifying the CPU affinity in the config file.

Enable CPU affinity specification in a VM's config file with the
exact syntax `xl vcpu-pin' provides.

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agolibxl: extend pCPUs specification for vcpu-pin.
Dario Faggioli [Fri, 27 Jan 2012 19:14:00 +0000 (19:14 +0000)]
libxl: extend pCPUs specification for vcpu-pin.

Allow for "^<cpuid>" syntax while specifying the pCPUs list
during a vcpu-pin. This enables doing the following:

 xl vcpu-pin 1 1 0-4,^2

and achieving:

 xl vcpu-list
 Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
 ...
 Squeeze_pv                           1     1    3   -b-       2.4  0-1,3-4
 ...

Negative ranges are also supported, such as "0-4,^1-2" to
mean "0,3-4"

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agoxenpaging: make file_op largefile aware
Olaf Hering [Fri, 27 Jan 2012 19:03:37 +0000 (19:03 +0000)]
xenpaging: make file_op largefile aware

lseek() takes an off_t, the used "int << shiftsize" does not automatically
convert the int into a larger type. This leads to write errors with pagefiles
larger than 2G. Fix this by shifting an off_t instead of an int.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agotools/libxc: handle fallback in linux_privcmd_map_foreign_bulk properly
Olaf Hering [Fri, 27 Jan 2012 18:32:55 +0000 (18:32 +0000)]
tools/libxc: handle fallback in linux_privcmd_map_foreign_bulk properly

If the first ioctl fails with ENOENT it means the command is known. If a
second attempt to map each gfn happens to fail then there is no need to
run the fallback code. Some gfns are paged and the fallback code would
not fix the failure. Instead return the EINVAL to the caller.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agotools: memshrtool: tool to test and exercise the sharing subsystem
Andres Lagar-Cavilla [Fri, 27 Jan 2012 18:23:42 +0000 (18:23 +0000)]
tools: memshrtool: tool to test and exercise the sharing subsystem

This is demo code meant to showcase how to perform sharing
operations. It is useful for testing.

[ Added appropriate lines to .hgignore and .gitignore -iwj ]

Signed-off-by: Adin Scannell <adin@scannell.ca>
Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agolibxl_qmp: fix qmp_next to cope with multiple lines read in a single buffer
Stefano Stabellini [Fri, 27 Jan 2012 17:58:20 +0000 (17:58 +0000)]
libxl_qmp: fix qmp_next to cope with multiple lines read in a single buffer

qmp_next doesn't handle multiple lines read together in a single
buffer correctly at the moment.  This patch fixes it.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agolibxl: fix mutex initialization
Roger Pau Monne [Fri, 27 Jan 2012 17:48:14 +0000 (17:48 +0000)]
libxl: fix mutex initialization

The macro PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP is not defined on
NetBSD, so define mutex attributes manually.

Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agolibxl: fix upstream qemu binary name to what we actually install
Ian Campbell [Fri, 27 Jan 2012 17:09:04 +0000 (17:09 +0000)]
libxl: fix upstream qemu binary name to what we actually install

Binary is always qemu-system-i386 even for a 64 bit build.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agolibxl: Convert to asynchronous: device removal
Ian Jackson [Fri, 27 Jan 2012 17:01:26 +0000 (17:01 +0000)]
libxl: Convert to asynchronous: device removal

Convert libxl_FOO_device_remove, and the function which does the bulk
of the work, libxl__device_remove, to the new async ops scheme.

Adjust all callers.

Also remove libxl__wait_for_device_state which is now obsolete.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years agolibxl: Introduce libxl__ev_devstate
Ian Jackson [Fri, 27 Jan 2012 17:01:25 +0000 (17:01 +0000)]
libxl: Introduce libxl__ev_devstate

Provide a new-style asynchronous facility for waiting for device
states on xenbus.  This will replace libxl__wait_for_device_state,
after the callers have been updated in later patches.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years agolibxl: New convenience macro CONTAINER_OF
Ian Jackson [Fri, 27 Jan 2012 17:01:24 +0000 (17:01 +0000)]
libxl: New convenience macro CONTAINER_OF

Provide a convenient and type-safe wrapper which does the correct
dance to subtract offsetof.  This is very similar to the
"container_of" macro in the Linux kernel, but it has an additional
feature that instead of the type argument you may also pass an
expression of that type; this makes initialising a variable with
CONTAINER_OF easier.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years agolibxl: Asynchronous/long-running operation infrastructure
Ian Jackson [Fri, 27 Jan 2012 17:01:24 +0000 (17:01 +0000)]
libxl: Asynchronous/long-running operation infrastructure

Provide a new set of machinery for writing public libxl functions
which may take a long time.  The application gets to decide whether
they want the function to be synchronous, or whether they'd prefer to
get a callback, or an event, when the operation is complete.

User(s) of this machinery will be introduced in later patch(es).

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years agolibxl: Permit multithreaded event waiting
Ian Jackson [Fri, 27 Jan 2012 17:01:23 +0000 (17:01 +0000)]
libxl: Permit multithreaded event waiting

Previously, the context would be locked whenever we were waiting in
libxl's own call to poll (waiting for operating system events).

This would mean that multiple simultaneous calls to libxl_event_wait
in different threads with different parameters would not work
properly.

If we simply unlock the context, it would be possible for another
thread to discover the occurrence of the event we were waiting for,
without us even waking up, and we would remain in poll.  So we need a
way to wake up other threads: a pipe, one for each thread in poll.

We also need to move some variables from globals in the ctx to be
per-polling-thread.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years agolibxl: introduce libxl_fd_set_nonblock, rationalise _cloexec
Ian Jackson [Fri, 27 Jan 2012 17:01:23 +0000 (17:01 +0000)]
libxl: introduce libxl_fd_set_nonblock, rationalise _cloexec

We want a function for setting fds to nonblocking, so introduce one.

This is a very similar requirement to that for libxl_fd_set_cloexec,
so make it common with that.

While we're at it, fix a few deficiences that make this latter
function less desirable than it could be:
 * Change the return from 0/-1 (like a syscall) to a libxl error code
 * Take a boolean parameter for turning the flag on and off
 * Log on error (and so, take a ctx for this purpose)

Change callers of libxl_fd_set_cloexec to notice errors.  (Although,
such errors are highly unlikely.)

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years agolibxl: New event generation API
Ian Jackson [Fri, 27 Jan 2012 17:01:22 +0000 (17:01 +0000)]
libxl: New event generation API

Replace the existing API for retrieving high-level events (events
about domains, etc.) from libxl with a new one.

This changes the definition and semantics of the `libxl_event'
structure, and replaces the calls for obtaining information about
domain death and disk eject events.

This is an incompatible change, sorry.  The alternative was to try to
provide both the previous horrid API and the new one, and would also
involve never using the name `libxl_event' for the new interface.

The new "libxl_event" structure is blacklisted in the ocaml bindings
for two reasons:
  - It has a field name "type" (which is a keyword in ocaml);
    the ocaml idl generator should massage this field name on
    output, to "type_" perhaps.
  - The ocaml idl generator does not support KeyedUnion.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years agoocaml, libxl: support "private" fields
Ian Jackson [Fri, 27 Jan 2012 17:01:21 +0000 (17:01 +0000)]
ocaml, libxl: support "private" fields

The changeset
  24378:b4365e2c2595  libxl: idl: support new "private" type attribute
is not complete.  Actually using this feature does not work because
the ocaml idl generator does not know about it.

So add that support.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years agolibxl: New API for providing OS events to libxl
Ian Jackson [Fri, 27 Jan 2012 17:01:20 +0000 (17:01 +0000)]
libxl: New API for providing OS events to libxl

We provide a new set of functions and related structures
  libxl_osevent_*
which are to be used by event-driven applications to receive
information from libxl about which fds libxl is interested in, and
what timeouts libxl is waiting for, and to pass back to libxl
information about which fds are readable/writeable etc., and which
timeouts have occurred.  Ie, low-level events.

In this patch, this new machinery is still all unused.  Callers will
appear in the next patch in the series, which introduces a new API for
applications to receive high-level events about actual domains etc.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years agoxl: fix a couple of memory leaks
Ian Jackson [Fri, 27 Jan 2012 17:01:19 +0000 (17:01 +0000)]
xl: fix a couple of memory leaks

* dolog leaked the log message (!)

* main() leaked the config_data (perhaps a false positive from valgrind,
  but it's nicer to tidy it up).

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years ago.gitignore/.hgignore: New names for ioemu dirs, seabios
Ian Jackson [Fri, 27 Jan 2012 17:01:18 +0000 (17:01 +0000)]
.gitignore/.hgignore: New names for ioemu dirs, seabios

* Add new seabios clone directories to .gitignore.
* Add new qemu clone directories to .gitignore.
* Remove old tools/ioemu (long-obsolete) from .gitignore and .hgignore.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
13 years agotools: xencommons init script: Fix setting XENSTORED_ROOTDIR
Jim Fehlig [Thu, 26 Jan 2012 17:43:31 +0000 (17:43 +0000)]
tools: xencommons init script: Fix setting XENSTORED_ROOTDIR

Due to a logic bug, XENSTORED_ROOTDIR was not being set to
default value when zero length.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agolibxl: fix parse_backend_path and device_backend_path to be mutual
Roger Pau Monne [Thu, 26 Jan 2012 17:38:05 +0000 (17:38 +0000)]
libxl: fix parse_backend_path and device_backend_path to be mutual

Currently if libxl__parse_backend_path is used and then you try to get
the original path again with libxl__device_backend_path the
result is wrong. This patch fixes the issue, so transformation from
path to libxl__device and back is reciprocal.

Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agoGet rid of non-static 'inline' modifiers (gcc 4.2.1 complains)
Tim Deegan [Thu, 26 Jan 2012 15:42:40 +0000 (15:42 +0000)]
Get rid of non-static 'inline' modifiers (gcc 4.2.1 complains)

They seem to have been introduced by accident in 23311:f4585056b9ae
when some 'static inline' functions were moved out of a header

Signed-off-by: Tim Deegan <tim@xen.org>
13 years agoBring OpenBSD stdarg handling in line with FreeBSD case
Tim Deegan [Thu, 26 Jan 2012 15:35:36 +0000 (15:35 +0000)]
Bring OpenBSD stdarg handling in line with FreeBSD case

Having an absolute path in a #include confuses distcc's pump mode
so get rid ofit by using the same runes for both BSDs.

Signed-off-by: Tim Deegan <tim@xen.org>
13 years agoFix build.
Tim Deegan [Thu, 26 Jan 2012 15:05:15 +0000 (15:05 +0000)]
Fix build.

Bring xc_mem_paging.c in line with other users of munlock in libxc.
Otherwise it trips over -Werror=unused-value

Signed-off-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Avoid spurious deadlock panic trigger
Andres Lagar-Cavilla [Thu, 26 Jan 2012 13:21:27 +0000 (13:21 +0000)]
x86/mm: Avoid spurious deadlock panic trigger

In the mm layer, if we take lock A, then lock B, and the recursively lock A,
the deadlock detector panics. This is not a deadlock risk because we
already 'own' the outer lock (A), so we will not contend for that resource.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: clean use of p2m unlocked queries
Andres Lagar-Cavilla [Thu, 26 Jan 2012 13:21:27 +0000 (13:21 +0000)]
x86/mm: clean use of p2m unlocked queries

Limit such queries only to p2m_query types. This is more compatible
with the name and intended semantics: perform only a lookup, and explicitly
in an unlocked way.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Properly account for paged out pages
Andres Lagar-Cavilla [Thu, 26 Jan 2012 13:21:27 +0000 (13:21 +0000)]
x86/mm: Properly account for paged out pages

If we hit the page after nominate but before paging it out, don't decrement the
domain count of paged out pages.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Remove stale variable from debugtrace printk in p2m audit
Andres Lagar-Cavilla [Thu, 26 Jan 2012 13:21:27 +0000 (13:21 +0000)]
x86/mm: Remove stale variable from debugtrace printk in p2m audit

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Output domain count of paged pages in console
Andres Lagar-Cavilla [Thu, 26 Jan 2012 13:21:27 +0000 (13:21 +0000)]
x86/mm: Output domain count of paged pages in console

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Allow foreign read-only mappings of shared pages
Andres Lagar-Cavilla [Thu, 26 Jan 2012 13:21:27 +0000 (13:21 +0000)]
x86/mm: Allow foreign read-only mappings of shared pages

Because shared pages are owned by dom_cow, the ownership test
while foreign mapping fails.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Fix p2m teardown locking
Andres Lagar-Cavilla [Thu, 26 Jan 2012 13:21:27 +0000 (13:21 +0000)]
x86/mm: Fix p2m teardown locking

Holding the p2m lock during a p2m teardown, while unsharing entries pointing to
shared frames, causes a locking inversion and deadlock panic.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Fix paging_load
Andres Lagar-Cavilla [Thu, 26 Jan 2012 13:21:27 +0000 (13:21 +0000)]
x86/mm: Fix paging_load

When restoring a p2m entry in the paging_load path, we were not updating the
m2p entry correctly.

Also take advantage of this to act on an old suggestion: once done with the
load, promote the p2m entry to the final guest accessible type. This simplifies
logic.

Tested to work with xenpaging.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Sharing overhaul style improvements
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
x86/mm: Sharing overhaul style improvements

The name 'shared_info' for the list of shared pages backed by a share frame
collided with the identifier also used for a domain's shared info page. To
avoid grep/cscope/etc aliasing, rename the shared memory token to 'sharing.

This patch only addresses style, and performs no functional changes. To ease
reviwing, the patch was left as a stand-alone last-slot addition to the queue
to avoid propagating changes throughout the whole series.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agoTools: Add a sharing command to xl for information about shared pages
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
Tools: Add a sharing command to xl for information about shared pages

Also add the global sharing statistics to the libxl physinfo.  This is a slight
departure from libxc, but there's no reason libxl physinfo can't include extra
bits of useful and relevant information.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Adin Scannell <adin@scannell.ca>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Tim Deegan <tim@xen.org>
13 years agoTools: Expose to libxc the total number of shared frames and space saved
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
Tools: Expose to libxc the total number of shared frames and space saved

Signed-off-by: Adin Scannell <adin@scannell.ca>
Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agoUpdate memshr API and tools
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
Update memshr API and tools

This patch is the folded version of API updates, along with the associated tool
changes to ensure that the build is always consistent.

API updates:
- The source domain in the sharing calls is no longer assumed to be dom0.
- Previously, the mem sharing code would return an opaque handle to index
  shared pages (and nominees) in its global hash table.  By removing the hash
  table, the handle becomes a version, to avoid sharing a stale version of a
  page. Thus, libxc wrappers and tools need to be updated to recall the share
  functions with the information needed to fetch the page (which they readily
  have).

Tool updates:
The only (in-tree, that we know of) consumer of the mem sharing API is the
memshr tool. This is updated to use the new API.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Adin Scannell <adin@scannell.ca>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: use RCU in mem sharing audit list, eliminate global lock completely
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
x86/mm: use RCU in mem sharing audit list, eliminate global lock completely

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agoAdd the ability to poll stats about shared memory via the console
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
Add the ability to poll stats about shared memory via the console

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Adin Scannell <adin@scannell.ca>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: New domctl: add a shared page to the physmap
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
x86/mm: New domctl: add a shared page to the physmap

This domctl is useful to, for example, populate parts of a domain's physmap
with shared frames, directly.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Adin Scannell <adin@scannell.ca>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Check how many mfns are shared, in addition to how many are saved
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
x86/mm: Check how many mfns are shared, in addition to how many are saved

This patch also moves the existing sharing-related memory op to the
correct location, and adds logic to the audit() method that uses the
new information.

This patch only provides the Xen implementation of the domctls.

Signed-off-by: Andres Lagar-Cavilla <andres@scannell.ca>
Signed-off-by: Adin Scannell <adin@scannell.ca>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Enforce lock ordering for sharing page locks
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
x86/mm: Enforce lock ordering for sharing page locks

Use the ordering constructs in mm-locks.h to enforce an order
for the p2m and page locks in the sharing code. Applies to either
the global sharing lock (in audit mode) or the per page locks.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Adin Scanneell <adin@scannell.ca>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Add per-page locking for memory sharing, when audits are disabled
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
x86/mm: Add per-page locking for memory sharing, when audits are disabled

With the removal of the hash table, all that is needed now is locking
of individual shared pages, as new (gfn,domain) pairs are removed or
added from the list of mappings.

We recycle PGT_locked and use it to lock individual pages. We ensure deadlock
is averted by locking pages in increasing order.

The global lock remains for the benefit of the auditing code, and is
thus enabled only as a compile-time option.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Adin Scannell <adin@scannell.ca>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Update mem sharing interface to (re)allow sharing of grants
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
x86/mm: Update mem sharing interface to (re)allow sharing of grants

Previously, the mem sharing code would return an opaque handle to index shared
pages (and nominees) in its global hash table.  By removing the hash table, the
new interfaces requires a gfn and a version. However, when sharing grants, the
caller provides a grant ref and a version. Update interface to handle this
case.

The use case for grant sharing is when sharing from within a backend (e.g.
memshr + blktap2), in which case the backend is only exposed to grant
references.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Adin Scannell <adin@scannell.ca>
Committed-by: Tim Deegan <tim@xen.org>
Acked-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Eliminate hash table in sharing code as index of shared mfns
Andres Lagar-Cavilla [Thu, 26 Jan 2012 12:46:26 +0000 (12:46 +0000)]
x86/mm: Eliminate hash table in sharing code as index of shared mfns

Eliminate the sharing hastable mechanism by storing a list head directly in the
page info for the case when the page is shared.  This does not add any extra
space to the page_info and serves to remove significant complexity from
sharing.

Signed-off-by: Adin Scannell <adin@scannell.ca>
Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agoseabios: update to 1.6.3.1 release
Ian Campbell [Thu, 26 Jan 2012 11:06:40 +0000 (11:06 +0000)]
seabios: update to 1.6.3.1 release

This is the latest seabios stable release.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoREADME: add upstream qemu dependecies
Stefano Stabellini [Thu, 26 Jan 2012 11:06:06 +0000 (11:06 +0000)]
README: add upstream qemu dependecies

Upstream Qemu, just added to the Xen build system, needs GLib 2.0 and
pkg-config to compile.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agotools/libxc: fix error handling in xc_mem_paging_load
Olaf Hering [Thu, 26 Jan 2012 11:04:59 +0000 (11:04 +0000)]
tools/libxc: fix error handling in xc_mem_paging_load

xc_mem_paging_load() does not pass errors in errno and the actual
errno from xc_mem_event_control() is overwritten by munlock().
xenpaging_populate_page() needs to check errno, but with the switch to
xc_mem_paging_load() it could not receive ENOMEM anymore.

Update xc_mem_paging_load() to return -1 and preserve errno during
munlock().

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoxenoprof: Make the escape code consistent across 32 and 64-bit xen
George Dunlap [Thu, 26 Jan 2012 11:03:50 +0000 (11:03 +0000)]
xenoprof: Make the escape code consistent across 32 and  64-bit xen

At the moment, the xenoprof escape code is defined as "~0UL".
Unfortunately, this expands to 0xffffffff on 32-bit systems
and 0xffffffffffffffff on 64-bit systems; with the result that
while 32-on-32 and 64-in-64 work fine, 32-on-64 (also known as
"compat mode") is broken.

This patch makes the definition consistent across architectures.
In so doing, it will break old-32-bit-on-new-Xen, and vice versa;
but this was seen as an acceptable thing to do.

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoxenoprof: Use uint64_t explicitly for internal calls
George Dunlap [Thu, 26 Jan 2012 11:03:23 +0000 (11:03 +0000)]
xenoprof: Use uint64_t explicitly for internal calls

A recent changeset to make XENOPROF_ESCAPE_CODE consistent across
32- and 64-bit builds caused a build failure, because values were
passed through functions as "unsigned long".  Replace these with
uint64_t explicitly.

Also remove redundant function prototype from perfmon.c, now that
it's in a header file.

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agodocs: Remove outdated LaTex documentation.
Keir Fraser [Wed, 25 Jan 2012 15:52:47 +0000 (15:52 +0000)]
docs: Remove outdated LaTex documentation.

Signed-off-by: Keir Fraser <keir@xen.org>
13 years agoSVM: Plumb NPT error-code bits into nested-fault access_X arguments.
Tim Deegan [Tue, 24 Jan 2012 16:46:17 +0000 (16:46 +0000)]
SVM: Plumb NPT error-code bits into nested-fault access_X arguments.

Signed-off-by: Tim Deegan <tim@xen.org>
13 years agolibxl: rename is_assigned to is_pcidev_in_array
Doug Magee [Tue, 24 Jan 2012 15:36:19 +0000 (15:36 +0000)]
libxl: rename is_assigned to is_pcidev_in_array

All this function does is check to see if a device is in an array of
pcidevs passed by the caller.  The function name can be misleading if
ever used to check against a list of devices other than those assigned
to a domain.

Signed-off-by: Doug Magee <djmagee@mageenet.net>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agoxl: Add missing trigger for the xl trigger cmd.
Jean Guyader [Tue, 24 Jan 2012 15:33:36 +0000 (15:33 +0000)]
xl: Add missing trigger for the xl trigger cmd.

Add s3resume trigger in the usage of the xl trigger cmd.

Signed-off-by: Jean Guyader <jean.guyader@eu.citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agolibxl: remove _libxl_json_internal.h from libxl_json.h
Ian Campbell [Tue, 24 Jan 2012 15:30:46 +0000 (15:30 +0000)]
libxl: remove _libxl_json_internal.h from libxl_json.h

libxl_json.h is intended as a user-includable header for applications which
would like to use libyajl directly with libxl types. It should not expose libxl
internals.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agoupdate MAINTAINERS file
<stefano.stabellini@eu.citrix.com> [Tue, 24 Jan 2012 15:09:32 +0000 (15:09 +0000)]
update MAINTAINERS file

From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Add Ian as Seabios maintainer and myself as upstream Qemu maintainer.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
13 years agolibxl: use new qemu at the location where xen-unstable installs it
<stefano.stabellini@eu.citrix.com> [Tue, 24 Jan 2012 15:09:31 +0000 (15:09 +0000)]
libxl: use new qemu at the location where xen-unstable installs it

From: Ian Campbell <ian.campbell@citrix.com>

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
13 years agoClone and build Seabios by default
<stefano.stabellini@eu.citrix.com> [Tue, 24 Jan 2012 15:09:31 +0000 (15:09 +0000)]
Clone and build Seabios by default

From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
13 years agoClone and build upstream Qemu by default
<stefano.stabellini@eu.citrix.com> [Tue, 24 Jan 2012 15:09:30 +0000 (15:09 +0000)]
Clone and build upstream Qemu by default

From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
13 years agomove the call to xen-setup after libxc and xenstore are built
<stefano.stabellini@eu.citrix.com> [Tue, 24 Jan 2012 15:09:30 +0000 (15:09 +0000)]
move the call to xen-setup after libxc and xenstore are built

From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Move the call to xen-setup, the wrapper script to configure
qemu-xen-traditional, right before building qemu-xen-traditional and
after libxc and xenstore are already built.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
13 years agoRename ioemu-dir as qemu-xen-traditional-dir
<stefano.stabellini@eu.citrix.com> [Tue, 24 Jan 2012 15:09:29 +0000 (15:09 +0000)]
Rename ioemu-dir as qemu-xen-traditional-dir

From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
13 years agoIntroduce git-checkout.sh
<stefano.stabellini@eu.citrix.com> [Tue, 24 Jan 2012 15:09:29 +0000 (15:09 +0000)]
Introduce git-checkout.sh

From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Introduce a script to perform git checkout on an external git tree; use
git-checkout.sh in ioemu-dir-find.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
13 years agoreflect cpupool in numa node affinity
Juergen Gross [Tue, 24 Jan 2012 14:21:12 +0000 (14:21 +0000)]
reflect cpupool in numa node affinity

In order to prefer node local memory for a domain the numa node
locality info must be built according to the cpus belonging to the
cpupool of the domain.

Signed-off-by: juergen.gross@ts.fujitsu.com
Committed-by: Keir Fraser <keir@xen.org>
13 years agoswitch to dynamically allocated cpumask in domain_update_node_affinity()
Juergen Gross [Tue, 24 Jan 2012 14:20:40 +0000 (14:20 +0000)]
switch to dynamically allocated cpumask in domain_update_node_affinity()

cpumasks should rather be allocated dynamically.

Signed-off-by: juergen.gross@ts.fujitsu.com
Committed-by: Keir Fraser <keir@xen.org>
13 years agointroduce and use common macros for selecting cpupool based cpumasks
Juergen Gross [Tue, 24 Jan 2012 14:19:58 +0000 (14:19 +0000)]
introduce and use common macros for selecting cpupool based cpumasks

There are several instances of the same construct finding the cpumask
for a cpupool. Use macros instead.

Signed-off-by: juergen.gross@ts.fujitsu.com
Committed-by: Keir Fraser <keir@xen.org>
13 years agoAdd a GNTTABOP to swap the content of two grant references under lock
Wei Liu [Tue, 24 Jan 2012 14:16:04 +0000 (14:16 +0000)]
Add a GNTTABOP to swap the content of two grant references under lock
provided that they are not currently active.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoRevert 24538:5bb22a6871f6 "xenoprof: Make the escape code consistent across 32 and...
Keir Fraser [Mon, 23 Jan 2012 15:10:43 +0000 (15:10 +0000)]
Revert 24538:5bb22a6871f6 "xenoprof: Make the escape code consistent across 32 and 64-bit xen"

Breaks 32-bit build.

Signed-off-by: Keir Fraser <keir@xen.org>
13 years agodecompressors: fix string typo 'bufer'
Paul Bolle [Mon, 23 Jan 2012 13:51:25 +0000 (14:51 +0100)]
decompressors: fix string typo 'bufer'

Signed-off-by: Paul Bolle <pebolle@tiscali.nl>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Committed-by: Jan Beulich <jbeulich@suse.com>
13 years agounlzo: fix input buffer free
Sascha Hauer [Mon, 23 Jan 2012 13:51:02 +0000 (14:51 +0100)]
unlzo: fix input buffer free

unlzo modifies the pointer to in_buf, so we have to free the original
buffer, not the modified pointer.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Committed-by: Jan Beulich <jbeulich@suse.com>
13 years agolibelf-loader: introduce elf_load_image
Stefano Stabellini [Mon, 23 Jan 2012 09:42:12 +0000 (09:42 +0000)]
libelf-loader: introduce elf_load_image

Implement a new function, called elf_load_image, to perform the
actually copy of the elf image and clearing the padding.  The function
is implemented as memcpy and memset when the library is built as part
of the tools, but it is implemented as raw_copy_to_guest and
raw_clear_guest when built as part of Xen, so that it can be safely
called with an HVM style dom0.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoIntroduce clear_user and clear_guest
Stefano Stabellini [Mon, 23 Jan 2012 09:41:27 +0000 (09:41 +0000)]
Introduce clear_user and clear_guest

Introduce clear_user for x86 and ia64, shamelessly taken from Linux.
The x86 version is the 32 bit clear_user implementation.  Introduce
clear_guest for x86 and ia64. The x86 implementation is based on
clear_user and a new clear_user_hvm function.  The ia64 implementation
is actually in xencomm and it is based on xencomm_copy_to_guest.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Jan Beulich <JBeulich@suse.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoxen: implement an signed 64 bit division helper function
Stefano Stabellini [Mon, 23 Jan 2012 09:40:35 +0000 (09:40 +0000)]
xen: implement an signed 64 bit division helper function

Implement a C function to perform 64 bit signed division and return
both quotient and remainder.
Useful as an helper function to implement __aeabi_ldivmod.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoA collection of fixes to Xen common files
Stefano Stabellini [Mon, 23 Jan 2012 09:39:58 +0000 (09:39 +0000)]
A collection of fixes to Xen common files

- call free_xenoprof_pages only ifdef CONFIG_XENOPROF;
- define PRI_stime as PRId64 in an header file;
- respect boundaries in is_kernel_*;
- implement is_kernel_rodata;
- guest_physmap_add_page should be ((void)0).
- fix guest_physmap_add_page;
- introduce CONFIG_XENOPROF;
- define _srodata and _erodata as const char*.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoInclude some header files that are not automatically included on all archs
Stefano Stabellini [Mon, 23 Jan 2012 09:39:11 +0000 (09:39 +0000)]
Include some header files that are not automatically included on all archs

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoMove cpufreq option parsing to cpufreq.c
Stefano Stabellini [Mon, 23 Jan 2012 09:38:34 +0000 (09:38 +0000)]
Move cpufreq option parsing to cpufreq.c

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoxenoprof: Make the escape code consistent across 32 and 64-bit xen
George Dunlap [Mon, 23 Jan 2012 09:36:54 +0000 (09:36 +0000)]
xenoprof: Make the escape code consistent across 32 and 64-bit xen

At the moment, the xenoprof escape code is defined as "~0UL".
Unfortunately, this expands to 0xffffffff on 32-bit systems
and 0xffffffffffffffff on 64-bit systems; with the result that
while 32-on-32 and 64-in-64 work fine, 32-on-64 (also known as
"compat mode") is broken.

This patch makes the definition consistent across architectures.
In so doing, it will break old-32-bit-on-new-Xen, and vice versa;
but this was seen as an acceptable thing to do.

Signed-off-by: Marcus Granado <marcus.granado@eu.citrix.com>
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoxenoprof: Handle 32-bit guest stacks properly in a 64-bit hypervisor
George Dunlap [Mon, 23 Jan 2012 09:36:29 +0000 (09:36 +0000)]
xenoprof: Handle 32-bit guest stacks properly in a 64-bit hypervisor

The dump_guest_backtrace() function attempted to walk the stack
based on the assumption that the guest and hypervisor pointer sizes
were the same; thus any 32-bit guest running under 64-bit hypervisor
would have unreliable results.

In 64-bit mode, read the 32-bit stack frame properly.

Signed-off-by: Marcus Granado <marcus.granado@eu.citrix.com>
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoxenoprof: Adjust indentation
George Dunlap [Mon, 23 Jan 2012 09:36:01 +0000 (09:36 +0000)]
xenoprof: Adjust indentation

Bring indentation into Xen hypervisor standard coding style.

No functional changes.

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agox86/vMSI: miscellaneous fixes
Jan Beulich [Mon, 23 Jan 2012 09:35:17 +0000 (09:35 +0000)]
x86/vMSI: miscellaneous fixes

This addresses a number of problems in msixtbl_{read,write}():
- address alignment was not checked, allowing for memory corruption in
  the hypervisor (write case) or returning of hypervisor private data
  to the guest (read case)
- the interrupt mask bit was permitted to be written by the guest
  (while Xen's interrupt flow control routines need to control it)
- MAX_MSIX_TABLE_{ENTRIES,PAGES} were pointlessly defined to plain
  numbers (making it unobvious why they have these values, and making
  the latter non-portable)
- MAX_MSIX_TABLE_PAGES was also off by one (failing to account for a
  non-zero table offset); this was also affecting host MSI-X code
- struct msixtbl_entry's table_flags[] was one element larger than
  necessary due to improper open-coding of BITS_TO_LONGS()
- msixtbl_read() unconditionally accessed the physical table, even
  though the data was only needed in a quarter of all cases
- various calculations were done unnecessarily for both of the rather
  distinct code paths in msixtbl_read()

Additionally it is unclear on what basis MAX_MSIX_ACC_ENTRIES was
chosen to be 3.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agox86/hvm: No need to arch_set_info_guest() before restoring per-vcpu HVM state.
Keir Fraser [Sun, 22 Jan 2012 10:20:03 +0000 (10:20 +0000)]
x86/hvm: No need to arch_set_info_guest() before restoring per-vcpu HVM state.

Signed-off-by: Keir Fraser <keir@xen.org>
13 years agotools/libvchan: Beef up the CPU barriers in libvchan.
Keir Fraser [Sat, 21 Jan 2012 17:15:40 +0000 (17:15 +0000)]
tools/libvchan: Beef up the CPU barriers in libvchan.

Although they were sufficient for x86, they weren't safe more generally.

Signed-off-by: Keir Fraser <keir@xen.org>
13 years agolibxc: Update rmb/wmb for x86.
Keir Fraser [Sat, 21 Jan 2012 17:14:37 +0000 (17:14 +0000)]
libxc: Update rmb/wmb for x86.

Only the compiler needs to see the barriers; not the CPU.

Signed-off-by: Keir Fraser <keir@xen.org>
13 years agolibxl: libxl_qmp.c should use libxl's own list macros, since they
Keir Fraser [Sat, 21 Jan 2012 16:47:00 +0000 (16:47 +0000)]
libxl: libxl_qmp.c should use libxl's own list macros, since they
exist. Also, older Linux versions do not have SIMPLEQ macros in
sys/queue.h.

Signed-off-by: Keir Fraser <keir@xen.org>
13 years agox86/hvm: Fix earlier hvm_load_cpu_ctxt() breakage.
Keir Fraser [Fri, 20 Jan 2012 18:17:59 +0000 (18:17 +0000)]
x86/hvm: Fix earlier hvm_load_cpu_ctxt() breakage.

Signed-off-by: Keir Fraser <keir@xen.org>
13 years agovpmu: separate architecture specific PMU initialisation
Dietmar Hahn [Fri, 20 Jan 2012 10:40:16 +0000 (10:40 +0000)]
vpmu: separate architecture specific PMU initialisation

This patch moves the architecture specific initialisation of the PMU
into the archicture specific directory.

Signed-off-by: Dietmar Hahn <dietmar.hahn@ts.fujitsu.com>
Signed-off-by: Keir Fraser <keir@xen.org>
Committed-by: Keir Fraser <keir@xen.org>
13 years agox86/hvm: Remove unnecessary packed attribute from hvm_hw_cpu_xsave struct.
Keir Fraser [Fri, 20 Jan 2012 10:26:57 +0000 (10:26 +0000)]
x86/hvm: Remove unnecessary packed attribute from hvm_hw_cpu_xsave struct.

Signed-off-by: Keir Fraser <keir@xen.org>
13 years agoiommu: Move IOMMU faults handling into softirq for AMD-Vi.
Dario Faggioli [Fri, 20 Jan 2012 10:20:32 +0000 (10:20 +0000)]
iommu: Move IOMMU faults handling into softirq for AMD-Vi.

Dealing with interrupts from AMD-Vi IOMMU(s) is deferred to a
softirq-tasklet, raised by the actual IRQ handler. To avoid more
interrupts being generated (because of further faults), they must be
masked in the IOMMU within the low level IRQ handler and enabled back
in the tasklet body. Notice that this may cause the log to overflow,
but none of the existing entry will be overwritten.

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
13 years agox86/hvm: Allow wake up of offline vcpu via nmi-ipi
Juergen Gross [Fri, 20 Jan 2012 10:17:12 +0000 (10:17 +0000)]
x86/hvm: Allow wake up of offline vcpu via nmi-ipi

On a real machine a cpu disabled via hlt with interrupts disabled can
be reactivated via a nmi ipi. Enable the hypervisor to do this for
hvm, too.

Signed-off-by: Juergen Gross <juergen.gross@ts.fujitsu.com>
Signed-off-by: Keir Fraser <keir@xen.org>
Committed-by: Keir Fraser <keir@xen.org>
13 years agoxen: Simplify callers of boot_vcpu(). In VCPUOP_up, check
Keir Fraser [Fri, 20 Jan 2012 10:13:55 +0000 (10:13 +0000)]
xen: Simplify callers of boot_vcpu(). In VCPUOP_up, check
is_initialised under the per-domain lock.

Signed-off-by: Keir Fraser <keir@xen.org>
13 years agox86/mm: refine epte_present test
Tim Deegan [Thu, 19 Jan 2012 13:09:23 +0000 (13:09 +0000)]
x86/mm: refine epte_present test

The current test for a present ept entry checks for a permission bit
to be set.

While this is valid in contexts in which we want to know whether an entry
will fault, it is not correct when it comes to testing whether an entry is
valid. Specifically, in the ept_change_entry_type_page function which is
used to set entries to the log dirty type.

In combination with a p2m access type like n or n2rwx, log dirty will not be
set for ept entries for which it should.

Reported-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Tim Deegan <tim@xen.org>
Acked-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agoCorrect p2m unlocking during grant table map
Andres Lagar-Cavilla [Thu, 19 Jan 2012 10:42:42 +0000 (10:42 +0000)]
Correct p2m unlocking during grant table map

We were not putting gfn's consistently.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Don't ASSERT() for a valid mfn on paged p2m entries in guest_physmap_ad
Andres Lagar-Cavilla [Thu, 19 Jan 2012 10:42:42 +0000 (10:42 +0000)]
x86/mm: Don't ASSERT() for a valid mfn on paged p2m entries in guest_physmap_ad

Signed-off-by: Adin Scannell <adin@scannell.ca>
Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agox86/mm: Improve ring management for memory events. Do not lose guest events
Andres Lagar-Cavilla [Thu, 19 Jan 2012 10:38:47 +0000 (10:38 +0000)]
x86/mm: Improve ring management for memory events. Do not lose guest events

This patch is an amalgamation of the work done by Olaf Hering <olaf@aepfle.de>
and our work.

It combines logic changes to simplify the memory event API, as well as
leveraging wait queues to deal with extreme conditions in which too many
events are generated by a guest vcpu.

In order to generate a new event, a slot in the ring is claimed. If a
guest vcpu is generating the event and there is no space, it is put on a
wait queue. If a foreign vcpu is generating the event and there is no
space, the vcpu is expected to retry its operation. If an error happens
later, the function returns the claimed slot via a cancel operation.

Thus, the API has only four calls: claim slot, cancel claimed slot, put
request in the ring, consume the response.

With all these mechanisms, no guest events are lost.
Our testing includes 1. ballooning down 512 MiBs; 2. using mem access n2rwx, in
which every page access in a four-vCPU guest results in an event, with no vCPU
pausing, and the four vCPUs touching all RAM. No guest events were lost in
either case, and qemu-dm had no mapping problems.

Signed-off-by: Adin Scannell <adin@scannell.ca>
Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Olaf Hering <olaf@aepfle.de>
Signed-off-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
13 years agoadd NULL checks in code added by 24492:6c104b46ef89
Jan Beulich [Thu, 19 Jan 2012 09:08:12 +0000 (10:08 +0100)]
add NULL checks in code added by 24492:6c104b46ef89

Also a couple of missing is_hvm_domain() checks.

Further properly pass the PCI segment in a call to pci_get_pdev().

Signed-off-by: Jan Beulich <jbeulich@suse.com>
13 years agolibxl: VM generation ID: Add missing gate for HVM domain.
Paul Durrant [Tue, 17 Jan 2012 12:40:52 +0000 (12:40 +0000)]
libxl: VM generation ID: Add missing gate for HVM domain.

This will fix localhost migrate failures found by the automatic tests.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
13 years agosched_credit: Use delay to control scheduling frequency
Hui Lv [Tue, 17 Jan 2012 11:18:48 +0000 (11:18 +0000)]
sched_credit: Use delay to control scheduling frequency

This patch can improve Xen performance:
1. Basically, the "delay method" can achieve 11% overall performance
boost for SPECvirt than original credit scheduler.
2. We have tried 1ms delay and 10ms delay, there is no big difference
between these two configurations. (1ms is enough to achieve a good
performance)
3. We have compared different load level response time/latency (low,
high, peak), "delay method" didn't bring very much response time
increase.
4. 1ms delay can reduce 30% context switch at peak performance, where
produces the benefits. (int sched_ratelimit_us = 1000 is the
recommended setting)

Signed-off-by: Hui Lv <hui.lv@intel.com>
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>