Commit Graph
19666 Commits
Author SHA1 Message Date
Keir Fraser 115e860529 x86 vmx: Unrestricted guest (realmode) support
It allows fully virtualized guests to run real mode and unpaged mode
code natively in the VMX mode when EPT is turned on. With the
unrestricted guest there is no need to emulate the guest real mode
code in the vm86 container or in the emulator. Also the guest big real
mode code works like native.

This patch enhances Xen to use the unrestricted guest feature if
available on the processor. It also adds a new xen parameter to
disable the unrestricted guest feature at the boot time.

Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
2009-05-28 09:51:43 +01:00
Keir Fraser 7f1f6b865b minios: implement ffs, ffsl and ffsll.
The first function is compiled only in case minios is compiled without
newlib, since newlib already provides an implementation for ffs.
On the other hand ffsl and ffsll are always compiled because newlib
misses those functions.
This patch also provides an implementation for __ffsti2 and __ffsdi2
because they are needed by gcc in order to successfully link ffsll.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2009-05-28 09:41:59 +01:00
Keir Fraser 1806259174 Update Xen version for 3.5-unstable 2009-05-27 21:51:04 +01:00
Keir Fraser a36045afa8 x86: Fix 32-bit build.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-27 15:55:29 +01:00
Keir Fraser 5cb81a39e5 evtchn: Free pirq_to_evtchn/pirq_mask arrays on domain destruction.
At the same time, move this into evtchn_init/destroy().

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-27 14:03:09 +01:00
Keir Fraser b0a6b12293 [IA64] adjust ia64 xc_domain_restore() signature
This patch fixes the following error.
ia64/xc_ia64_linux_restore.c:546: error: conflicting types for
xc_domain_restore
./xenguest.h:49: error: previous declaration of xc_domain_restore was
here
make[4]: *** [ia64/xc_ia64_linux_restore.o] Error 1

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
2009-05-27 12:00:51 +01:00
Keir Fraser 3e4183a6b6 [IA64] add ia64 _raw_rw_is_write_locked
This patch fixes the following link error.

xen/common/built_in.o: In function `_rw_is_write_locked':
xen/common/spinlock.c:249: undefined reference to
`_raw_rw_is_write_locked'
make[3]: *** [xen/xen-syms] Error 1

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
2009-05-27 12:00:32 +01:00
Keir Fraser a665dad568 Fix up the synchronisation around grant table map track handles.
At present, we're not doing any at all, so if a domain e.g. tries to
do two map operations at the same time from different vcpus then you
could end up with both operations getting back the same maptrack
handle.

Fix this problem by just shoving an enormous lock around grant table
operations.  This is unlikely to be heavily contended, because netback
and blkback both restrict themselves to mapping on a single vcpu at a
time (globally for netback, and per-device for blkback), and most of
the interesting bits are already protected by the remote domain's
grant table lock anyway.

The unconteded acquisition cost might be significant for some
workloads.  If that were the case, it might be worth only acquiring
the lock only for multi-vcpu domains, since we only manipulate the
maptrack table in the context of one of the domain's vcpus.  I've not
done that optimisation here, because I didn't want to think about what
would happen if e.g. a cpu got hot-unplugged from a domain while it
was performing a map operation.

Signed-off-by: Steven Smith <steven.smith@citrix.com>
2009-05-27 11:29:38 +01:00
Keir Fraser 07943d8e2d xend: Device duplicate check fix
I've checked the duplicate-check code here and I found that's checked
only in the context of one domain but not cross-domain. The thing is
that we should check tap/vbd device cross-domain not to allow another
guest to use the same disk image in some circumstances to prevent VM's
disk corruption.

The patch included denies disk image addition under those
circumstances:

1. We're adding read-only disk that's already used as write-exclusive

2. We're adding write-shared disk that's already used as
write-exclusive

3. We're adding write-exclusive disk that's already used

4. We're adding read-only disk that's already used as write-shared*
(because of I/O caching issues etc.)

The vif device duplicate check remains the same it was and it's
checked in the context of current domain only so that behaviour has
been preserved.

Signed-off-by: Michal Novotny <minovotn@redhat.com>
2009-05-27 11:28:45 +01:00
Keir Fraser c1134c228c x86 svm: Add support for Pause Filtering to AMD SVM
New AMD processors will support the Pause Filter Feature.
This feature creates a new field in the VMCB called Pause
Filter Count.  If Pause Filter Count is greater than 0 and
ntercepting PAUSEs is enabled, the processor will increment
an internal counter when a PAUSE instruction occurs instead
of intercepting.  When the internal counter reaches the
Pause Filter Count value, a PAUSE intercept will occur.

This feature can be used to detect contended spinlocks,
especially when the lock holding VCPU is not scheduled.
Rescheduling another VCPU prevents the VCPU seeking the
lock from wasting its quantum by spinning idly.

Experimental results show that most spinlocks are held
for less than 1000 PAUSE cycles or more than a few
thousand.  Default the Pause Filter Counter to 3000 to
detect the contended spinlocks.

Processor support for this feature is indicated by a CPUID
bit.

On a 24 core system running 4 guests each with 16 VCPUs,
this patch improved overall performance of each guest's
32 job kernbench by approximately 1%.  Further performance
improvement may be possible with a more sophisticated
yield algorithm.

Signed-off-by: Mark Langsdorf <mark.langsdorf@amd.com>
2009-05-27 11:27:13 +01:00
Keir Fraser 86475c9213 xm: Specify sensible default for superpages domain config option.
Signed-off-by: Dave McCracken <dcm@mccr.org>
2009-05-27 11:21:59 +01:00
Keir Fraser e420ef1e73 rombios: fix trying to boot from next device
If boot="ndc", rombios cannot try to boot next device.
Because rombios jump to the boot vector without pushing return
address, gPXE code and so on cannot return if it fail to boot.

Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com>
2009-05-27 11:19:38 +01:00
Keir Fraser 7f75b4d5a3 x86/hvm: fix off-by-one errors in vcpuid range checks
Signed-off-by: Jan Beulich <jbeulich@novell.com>
2009-05-27 11:17:40 +01:00
Keir Fraser d655e37925 Remove unused 'retry' parameter from on_selected_cpus() etc.
Remove the unused "retry" parameter of on_selected_cpus(),
on_each_cpu(), smp_call_function(), and smp_call_function_single().

Signed-off-by: Jan Beulich <jbeulich@novell.com>
2009-05-27 11:16:27 +01:00
Keir Fraser c3da952a02 Pass cpumasks by reference always.
Rather than passing cpumasks by value in all cases (which is
problematic for large NR_CPUS configurations), pass them 'by
reference' (i.e. through a pointer to a const cpumask).

On x86 this changes send_IPI_mask() to always only send IPIs to remote
CPUs (meaning any caller needing to handle the current CPU as well has
to do so on its own).

Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-27 11:15:08 +01:00
Keir Fraser cf5e6f2d34 x86: eliminate hard-coded NR_IRQS
... splitting it into global nr_irqs (determined at boot time) and
per- domain nr_pirqs (derived from nr_irqs and a possibly command line
specified value, which probably should later become a per-domain
config setting).

This has the (desirable imo) side effect of reducing the size of
struct hvm_irq_dpci from requiring an order-3 page to order-2 (on
x86-64), which nevertheless still is too large.

However, there is now a variable size bit array on the stack in
pt_irq_time_out() - while for the moment this probably is okay, it
certainly doesn't look nice. However, replacing this with a static
(pre-)allocation also seems less than ideal, because that would
require at least min(d->nr_pirqs, NR_VECTORS) bit arrays of
d->nr_pirqs bits, since this bit array is used outside of the
serialized code region in that function, and keeping the domain's
event lock acquired across pirq_guest_eoi() doesn't look like a good
idea either.

The IRQ- and vector-indexed arrays hanging off struct hvm_irq_dpci
could in fact be changed further to dynamically use the smaller of the
two ranges for indexing, since there are other assumptions about a
one-to-one relationship between IRQs and vectors here and elsewhere.

Additionally, it seems to me that struct hvm_mirq_dpci_mapping's
digl_list and gmsi fields could really be overlayed, which would yield
significant savings since this structure gets always instanciated in
form of d->nr_pirqs (as per the above could also be the smaller of
this and NR_VECTORS) dimensioned arrays.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
2009-05-27 10:38:51 +01:00
Keir Fraser e3e8ff02c5 tmem: build fix
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-27 08:19:30 +01:00
Keir Fraser 0f1cb96e97 x86 hvm: Allow cross-vendor migration
Intercept #UD and emulate SYSCALL/SYSENTER/SYSEXIT as necessary.

Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-26 15:01:36 +01:00
Keir Fraser bd5573a630 blktap2: a completely rewritten blktap implementation
Benefits to blktap2 over the old version of blktap:

* Isolation from xenstore - Blktap devices are now created directly on
   the linux dom0 command line, rather than being spawned in response
   to XenStore events.  This is handy for debugging, makes blktap
   generally easier to work with, and is a step toward a generic
   user-level block device implementation that is not Xen-specific.

* Improved tapdisk infrastructure: simpler request forwarding, new
   request scheduler, request merging, more efficient use of AIO.

* Improved tapdisk error handling and memory management.  No
   allocations on the block data path, IO retry logic to protect
   guests
   transient block device failures.  This has been tested and is known
   to work on weird environments such as NFS soft mounts.

* Pause and snapshot of live virtual disks (see xmsnap script).

* VHD support.  The VHD code in this release has been rigorously
   tested, and represents a very mature implementation of the VHD
   image
   format.

* No more duplication of mechanism with blkback.  The blktap kernel
   module has changed dramatically from the original blktap.  Blkback
   is now always used to talk to Xen guests, blktap just presents a
   Linux gendisk that blkback can export.  This is done while
   preserving the zero-copy data path from domU to physical device.

These patches deprecate the old blktap code, which can hopefully be
removed from the tree completely at some point in the future.

Signed-off-by: Jake Wires <jake.wires@citrix.com>
Signed-off-by: Dutch Meyer <dmeyer@cs.ubc.ca>
2009-05-26 11:52:31 +01:00
Keir Fraser 6009f4ddb2 Transcendent memory ("tmem") for Xen.
Tmem, when called from a tmem-capable (paravirtualized) guest, makes
use of otherwise unutilized ("fallow") memory to create and manage
pools of pages that can be accessed from the guest either as
"ephemeral" pages or as "persistent" pages.  In either case, the pages
are not directly addressible by the guest, only copied to and fro via
the tmem interface.  Ephemeral pages are a nice place for a guest to
put recently evicted clean pages that it might need again; these pages
can be reclaimed synchronously by Xen for other guests or other uses.
Persistent pages are a nice place for a guest to put "swap" pages to
avoid sending them to disk.  These pages retain data as long as the
guest lives, but count against the guest memory allocation.

Tmem pages may optionally be compressed and, in certain cases, can be
shared between guests.  Tmem also handles concurrency nicely and
provides limited QoS settings to combat malicious DoS attempts.
Save/restore and live migration support is not yet provided.

Tmem is primarily targeted for an x86 64-bit hypervisor.  On a 32-bit
x86 hypervisor, it has limited functionality and testing due to
limitations of the xen heap.  Nearly all of tmem is
architecture-independent; three routines remain to be ported to ia64
and it should work on that architecture too.  It is also structured to
be portable to non-Xen environments.

Tmem defaults off (for now) and must be enabled with a "tmem" xen boot
option (and does nothing unless a tmem-capable guest is running).  The
"tmem_compress" boot option enables compression which takes about 10x
more CPU but approximately doubles the number of pages that can be
stored.

Tmem can be controlled via several "xm" commands and many interesting
tmem statistics can be obtained.  A README and internal specification
will follow, but lots of useful prose about tmem, as well as Linux
patches, can be found at http://oss.oracle.com/projects/tmem .

Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com>
2009-05-26 11:05:04 +01:00
Keir Fraser ff811c2bc4 uninstall: get rid of hardcoded pathes
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
2009-05-26 10:14:34 +01:00
Keir Fraser 93dc12efb4 x86 hvm viridian: Provide dummy support for APIC assist page to satisfy Win7.
From: Tim Deegan <tim.deegan@citrix.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-26 10:13:43 +01:00
Keir Fraser faeb2db71c pvgrub: few lines in shutdown_blkfront were removed by mistake.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2009-05-26 10:05:27 +01:00
Keir Fraser e25dc9429b xm, xend: passthrough: Add assigned_or_requested_vslot()
Add an accessor to simplify accessing vslot if available,
otherwise requested_vslot.

Signed-off-by: Simon Horman <horms@verge.net.au>
2009-05-26 10:04:10 +01:00
Keir Fraser b562a316db xend: Fix xm pci-detach for inactive devices
In the case where a device is attached to an inactive domain
and then removed before the domain is activated it won't have
a vslot assigned, but it should still be valid to remove it.

I don't think that there are any other cases where vslot can
be invalid.
Signed-off-by: Simon Horman <horms@verge.net.au>
2009-05-26 10:03:09 +01:00
Keir Fraser d05ae13188 blkif: Clarify units for 'sector'-sized blkif request params.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2009-05-26 10:01:54 +01:00
Keir Fraser 6a9b5290e9 Add support for superpages (hugepages) in PV domain
This patch adds the option "superpages" to the domain configuration
file. If it is set, the domain is populated using 2M pages.

This code does not support fallback to small pages.  If the domain can
not be created with 2M pages, the  create will fail.

The patch also includes support for saving and restoring domains with
the superpage flag set.  However, if a domain has freed small pages
within its physical page array and then extended the array, the
restore will fill in those freed pages.  It will then attempt to
allocate more than its memory limit and will fail.  This is
significant because apparently Linux does this during boot, thus a
freshly booted Linux image can not be saved and restored successfully.

Signed-off-by: Dave McCracken <dcm@mccr.org>
2009-05-26 09:58:38 +01:00
Keir Fraser 2cda4bd1e1 minios: replace mktime implementation
In the efforts to clarify MiniOS license it came to my attention that
few portions of MiniOS were taken from other GPL projects, one of them
is the mktime implementation. This patch replaces the current GPL
licensed mktime implementation with a different and BSD licensed
version.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2009-05-26 09:54:53 +01:00
Keir Fraser c7c69094e5 PV-on-HVM: Define atomic_cmpxchg() for old Linux kernels.
Signed-off-by: KUWAMURA Shin'ya <kuwa@jp.fujitsu.com>
2009-05-26 09:52:59 +01:00
Keir Fraser 1d89b44561 stubdom: 'file' based disk sharing
Allow 'file' based disks, that are blkback based disks, to be shared
between the guest domain and the stubdom. It does so exploiting the
same exception introduced in the previous patch "stubdoms phy disks
sharing". Now we can remove the hack in stubdom-dm that forces "file"
disks to be opened using blktap instead of blkback.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2009-05-26 09:50:35 +01:00
Keir Fraser 0f688ae304 minios: Fix blkfront driver when sector_size != 512
The first and last sector as well as the sector number of the request
is expressed in 512 bytes units, independently from the real sector
size.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2009-05-26 09:49:19 +01:00
Keir Fraser c04c51bbf9 xend: Fix typo in usage of new auxbin.xen_configdir() function
Signed-off-by: Keir Fraser <keir.fraser@eu.citrix.com>
2009-05-21 04:31:47 +01:00
Keir Fraser 45963f3c8c ACPI/NUMA: Improve SRAT parsing
This is to properly handle SRAT rev 2 extended proximity domain
values.

Also a first step to eliminate the redundant definitions of
ACPI provided table structures (Linux eliminated all of the duplicates
from include/linux/acpi.h in 2.6.21).

Portions based on a Linux patch from Kurt Garloff <garloff@suse.de>
and Alexey Starikovskiy <astarikovskiy@suse.de>.

IA64 build tested only.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
2009-05-20 16:02:50 +01:00
Keir Fraser 4ad717e086 x86-64: also handle virtual aliases of Xen image pages
With the unification of the heaps, the pages freed from the Xen boot
image now can also end up being allocated to a domain, and hence the
respective aliases need handling when such pages get their
cacheability attributes changed.

Rather than establishing multiple mappings with non-WB attributes
(which temporarily still can cause aliasing issues), simply unmap
those pages from the Xen virtual space, and re-map them (to allow re-
establishing of eventual large page mappings) when the cachability
attribute for them gets restored to normal (WB).

Signed-off-by: Jan Beulich <jbeulich@novell.com>
2009-05-20 15:38:34 +01:00
Keir Fraser 72d202e34c x86: don't map more than the allocated space for frame_table
This is to avoid undue virtual address aliases in case the over-mapped
pages happen to get allocated to a domain, and then get their
cacheability attributes changed.

At the same time, use 1Gb mappings if possible and reasonable.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
2009-05-20 15:35:32 +01:00
Keir Fraser 66a8421ec6 x86: some assorted irq related cleanups
Signed-off-by: Jan Beulich <jbeulich@novell.com>
2009-05-20 15:30:36 +01:00
Keir Fraser eaa024d296 Introduce __must_be_array
Cloning the similar construct from Linux, allowing to detect improper
uses of ARRAY_SIZE() at build time.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
2009-05-20 15:29:25 +01:00
Keir Fraser 9f6d07bac9 tools: get rid of hardcoded config dirs
Remove *all* hardcoded "/etc/xen" strings in python code.

Additionally, it removes pygrub_path from osdep.py. Its use has been
replaced with auxbin.pathTo("pygrub").

Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
2009-05-20 15:27:30 +01:00
Keir Fraser e7da8a7b69 xend: remove spurious pci_len from getDeviceSxprs
Cc: Zhai Edwin <edwin.zhai@intel.com>
Cc: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
Cc: Dexuan Cui <dexuan.cui@intel.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
2009-05-20 15:13:36 +01:00
Keir Fraser 812256dc98 gnttab: for sanity's sake, don't access the active grant table
structure when we don't hold the lock.

Signed-off-by: Steven Smith <steven.smith@citrix.com>
2009-05-19 23:44:28 +01:00
Keir Fraser 03cd09e044 gnttab: Remove unused per-domain map_count field
Signed-off-by: Steven Smith <steven.smith@eu.citrix.com>
2009-05-19 23:30:32 +01:00
Keir Fraser 9731212f50 x86: Fix the P2M audit code.
It currently doesn't even compile; with this patch applied, it
compiles and didn't immediately explode as soon as I started a VM.
I've not given it much testing beyond that, though.

Signed-off-by: Steven Smith <steven.smith@citrix.com>
2009-05-19 23:28:25 +01:00
Keir Fraser ff7d47a80a stubdom: Rebuild the ocaml runtime libraries with the options needed
if they are to be linked with object files created by ocamlc and the minios
kernel.

This is needed to build stubdoms written in ocaml.

Signed-off-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
2009-05-19 14:17:56 +01:00
Keir Fraser 0e57a92cc3 minios: Implement some extra lib functions for ocaml xenstored stubdom
We could stub them out as unsupported, but we may as well implement
them as they are very simple.

Signed-off-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
2009-05-19 14:15:43 +01:00
Keir Fraser c1861bc6f8 minios: Define extra stub functions to allow build of ocaml xenstored stubdom
These are referenced by the libs that ocamlopt links xenstored to, but
ought not actually get called.

Signed-off-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
2009-05-19 14:14:41 +01:00
Keir Fraser c7367160e4 ocaml-xenstored: Allow to build ocaml xenstored instead of C version
To use, set CONFIG_OCAML_XENSTORED=y at build time.
Then the build system will automatically download the remote repo
to tools/ocaml-xenstored.

Signed-off-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
2009-05-19 14:13:20 +01:00
Keir Fraser 1f876c2e6e tools: Fix an obvious xgettext build typo.
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
2009-05-19 13:38:05 +01:00
Keir Fraser c3122a4018 xend: Fix xm pci commands for inactive managed domains.
Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
2009-05-19 02:23:32 +01:00
Keir Fraser 41af6f38d9 xend: Make hotplug script timeouts configurable
In some configurations, when dom0 is busy with I/O, it may take
several minutes to complete all hotplug scripts required when a new
domain is being created. As device create timeout is set to 100
seconds, users get "hotplug scripts not working" error instead of a
new domain.

This patch makes both DEVICE_CREATE_TIMEOUT and DEVICE_DESTROY_TIMEOUT
configurable in xend-config.sxp to allow users to easily adapt hotplug
timeouts to their environment.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
2009-05-19 02:18:48 +01:00
Keir Fraser 9125594e4e python: get rid of hardcoded search pathes in python code.
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
2009-05-19 02:16:37 +01:00