]> xenbits.xensource.com Git - people/gdunlap/xen.git/log
people/gdunlap/xen.git
10 years agolibxl: make some _dispose functions idempotent and tolerate NULL
Wei Liu [Wed, 25 Feb 2015 14:56:02 +0000 (14:56 +0000)]
libxl: make some _dispose functions idempotent and tolerate NULL

These functions are not generated, so we need to do it by hand.

Functions list:
 libxl_bitmap_dispose
 libxl_string_list_dispose
 libxl_key_value_list_dipose
 libxl_cpuid_dispose

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agogentest: make testidl valgrind clean
Wei Liu [Wed, 25 Feb 2015 14:56:01 +0000 (14:56 +0000)]
gentest: make testidl valgrind clean

Free the JSON string after use to avoid memory leak. With this change
testidl is valgrind clean.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agolibxl: fix off-by-one error in JSON parser
Wei Liu [Wed, 25 Feb 2015 14:56:00 +0000 (14:56 +0000)]
libxl: fix off-by-one error in JSON parser

We need a sentinel slot in the generated libxl_key_value_list.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: timer: Don't warn if the timer interrupts are high-level
Julien Grall [Mon, 2 Mar 2015 15:54:57 +0000 (15:54 +0000)]
xen/arm: timer: Don't warn if the timer interrupts are high-level

The commit 61d6a84 "xen: arm: Warn if timer interrupts are not level
triggered" added a check to ensure the timer interrupts are level.

Although, the check is only done on low-level interrupts. This will
result to a strange warning on platform using high-level ("WARNING [..]
IRQ is not level triggered").

As high-level interrupt is valid, don't warn on both high-level and
low-level interrupt.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/iommu: smmu: Advertise when the SMMU support coherent table walk
Julien Grall [Mon, 2 Mar 2015 15:42:43 +0000 (15:42 +0000)]
xen/iommu: smmu: Advertise when the SMMU support coherent table walk

When SMMU doesn't support coherent table walk, Xen may need to clean
updated PT (see commit 4c5f4cb "xen/arm: p2m: Clean cache PT when the
IOMMU doesn't support coherent walk").

If one SMMU of the platform doesn't support coherent table walk, the
feature is disabled for the whole platform. This is because device is
assigned to a domain after the page table are populated.

This could impact performance on domain which doesn't use device
passthrough. But, as the spec strongly recommends the support of this
feature for mainstream platform, I expect server will always have SMMUs
supporting coherent table walk. If not, we may need to enable this feature
per-domain.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen: arm: Assume level triggered means high, not low.
Ian Campbell [Mon, 2 Mar 2015 11:09:35 +0000 (11:09 +0000)]
xen: arm: Assume level triggered means high, not low.

When reading back the ICFG register we cannot know the polarity of the
configuration, just that it is level or edge.

Since falling edge and low level are invalid for SPIs we should assume
rising edge and high level (we have no better information for PPIs, so
it'll have to do).

We already assumed rising edge, switch to high level as well.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Reviewed-by: Julien Grall <julien.grall@linaro.org>
10 years agolibxl_set_memory_target: retain the same maxmem offset on top of the current target
Stefano Stabellini [Mon, 2 Mar 2015 15:35:15 +0000 (15:35 +0000)]
libxl_set_memory_target: retain the same maxmem offset on top of the current target

In libxl_set_memory_target when setting the new maxmem, retain the same
offset on top of the current target. In the future the offset will
include memory allocated by QEMU for rom files.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agostubdom: fix make clean and distclean on a freshly cloned tree
Wei Liu [Mon, 2 Mar 2015 15:05:43 +0000 (15:05 +0000)]
stubdom: fix make clean and distclean on a freshly cloned tree

Clean and distclean targets need not depend on existence of the mini-os
tree. Don't check for mini-os and don't try to blindly include
mini-os's Config.mk when doing clean and distclean.

Note that one subtle issue is that $(XEN_ROOT)/Config.mk tries to
include $(XEN_ROOT)/config/$(XEN_OS).mk. In stubdom's case XEN_OS is
"MiniOS". Then $(XEN_ROOT)/config/MiniOS.mk tries to include mini-os's
Config.mk.

Since clean and distclean don't enforce existence of mini-os tree, don't
include $(XEN_ROOT)/Config.mk to avoid getting error due to the
aforementioned issue.

Reported-by: Sander Eikelenboom <linux@eikelenboom.it>
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Samuel Thibault <samuel.thibault@ens-lyon.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agotools/xenconsoled: Increase file descriptor limit
Andrew Cooper [Mon, 2 Mar 2015 15:04:37 +0000 (15:04 +0000)]
tools/xenconsoled: Increase file descriptor limit

XenServer's VM density testing uncovered a regression when moving from
sysvinit to systemd where the file descriptor limit dropped from 4096 to
1024. (XenServer had previously inserted a ulimit statement into its
initscripts.)

One solution is to use LimitNOFILE=4096 in xenconsoled.service to match the
lost ulimit, but that is only a stopgap solution.

As Xenconsoled genuinely needs a large number of file descriptors if a large
number of domains are running, attempt to increase the limit.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
10 years agoMAINTAINERS: Add OVMF maintainers.
Anthony PERARD [Fri, 27 Feb 2015 16:49:18 +0000 (16:49 +0000)]
MAINTAINERS: Add OVMF maintainers.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agotools/pygrub: Add example from Ubuntu 14.04 LTS
Ian Jackson [Fri, 27 Feb 2015 15:22:30 +0000 (15:22 +0000)]
tools/pygrub: Add example from Ubuntu 14.04 LTS

(This grub.cfg does not work with Xen 4.4.1's pygrub, but does work
with the extra 4 patches which are in Xen 4.5.0.)

Contributed-by: Owen Dunn <osd1000@cam.ac.uk>
Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
CC: Owen Dunn <osd1000@cam.ac.uk>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: Handle translated addresses for hardware domains in GICv2
Frediano Ziglio [Fri, 27 Feb 2015 14:08:06 +0000 (14:08 +0000)]
xen/arm: Handle translated addresses for hardware domains in GICv2

Translated addresses (in d->arch.vgic.{c,d}base) are bus addresses
which are not always correct in the context of a subnode in the DTB
exposed to domain 0 since they would then be subject to retranslation.

Copy the original addresses from DT directly to get the original
untranslated reg property which will give same d->arch.vgic.{c,d}base
values once translated again by the guest.

Signed-off-by: Frediano Ziglio <frediano.ziglio@huawei.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
[ ijc -- attempt to clarify the commit message ]

10 years agolibxl: remove freemem_slack
Stefano Stabellini [Wed, 25 Feb 2015 15:07:25 +0000 (15:07 +0000)]
libxl: remove freemem_slack

freemem_slack accounts for the amount of memory to be left free in the
system because empirical experiments seem to demonstrate that is needed
for "stability reasons".

As we don't have any actual data on these stability issues, remove it.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
CC: mlatimer@suse.com
CC: ian.campbell@citrix.com
Acked-by: Mike Latimer <mlatimer@suse.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agotools/libxl: code refactoring for MBM
Chao Peng [Thu, 26 Feb 2015 08:45:38 +0000 (16:45 +0800)]
tools/libxl: code refactoring for MBM

Make some internal routines common so that total/local memory bandwidth
monitoring in the next patch can make use of them.

Signed-off-by: Chao Peng <chao.p.peng@linux.intel.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
10 years agotools/libxc: code refactoring in xc_psr_cmt_get_data
Chao Peng [Thu, 26 Feb 2015 08:45:37 +0000 (16:45 +0800)]
tools/libxc: code refactoring in xc_psr_cmt_get_data

Use calculated array index instead of hardcoded array index.
No functional change involved.

Signed-off-by: Chao Peng <chao.p.peng@linux.intel.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agotools: correct coding style for psr
Chao Peng [Thu, 26 Feb 2015 08:45:36 +0000 (16:45 +0800)]
tools: correct coding style for psr

- space: remove space after '(' or before ')' in 'if' condition;
- indention: align function definition/call arguments;

Signed-off-by: Chao Peng <chao.p.peng@linux.intel.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
10 years agoxen/iommu: smmu: Add Xen specific code to be able to use the driver
Julien Grall [Wed, 25 Feb 2015 18:52:59 +0000 (18:52 +0000)]
xen/iommu: smmu: Add Xen specific code to be able to use the driver

The main goal is to modify as little the Linux code to be able to port
easily new feature added in Linux repo for the driver.

To achieve that we:
    - Add helpers to Linux function not implemented on Xen
    - Add callbacks used by Xen to do our own stuff and call Linux ones
    - Only modify when required the code which comes from Linux. If so a
    comment has been added with /* Xen: ... */ explaining why it's
    necessary.

The support for PCI has been commented because it's not yet supported by
Xen ARM and therefore won't compile.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
[ ijc -- fix a couple of typos in comments ]

10 years agoxen/iommu: arm: Import the SMMU driver from Linux
Julien Grall [Wed, 25 Feb 2015 18:52:58 +0000 (18:52 +0000)]
xen/iommu: arm: Import the SMMU driver from Linux

Based on commit e6b5be2be4e30037eb551e0ed09dd97bd00d85d3.

It's a verbatim of the Linux SMMU drivers code. No Xen code has yet been added
and the file is not built.

Compare to the previous drivers it gains support of PCI. Though it will
need a bit of plumbing for Xen.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: Describe devices supported by a driver with dt_device_match
Julien Grall [Wed, 25 Feb 2015 18:52:57 +0000 (18:52 +0000)]
xen/arm: Describe devices supported by a driver with dt_device_match

Xen is currently using a list of compatible strings to match drivers again
device nodes. This leads to having double definitions in the GIC
code.

Furthermore Linux drivers are using dt_device_match (actually called
of_device_id in Linux) to list device supported by the drivers.

Remove the exisiting compatible field and replace with a dt_match field

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/iommu: Consolidate device assignment ops into a single set
Julien Grall [Wed, 25 Feb 2015 18:52:56 +0000 (18:52 +0000)]
xen/iommu: Consolidate device assignment ops into a single set

On ARM, the way to assign device tree node is exactly the same as PCI.
Futhermore, all devices can be represented by a 'device_t'.
Therefore there is no need to add separate ops.

The x86 iommu drivers has not been modified to replace 'struct pci_dev'
by "device_t" because the latter is an alias of the former.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>\
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: Introduce a generic way to describe device
Julien Grall [Wed, 25 Feb 2015 18:52:55 +0000 (18:52 +0000)]
xen/arm: Introduce a generic way to describe device

Currently, Xen is supporting PCI and Platform device (based on Device Tree).

While Xen only supports Platform device on ARM, Xen will gain support of
PCI soon.

Some drivers, such as IOMMU drivers, may handle PCI and platform device in
the same way. Only few lines of code differs.

Rather than requesting to provide 2 set of functions (one for PCI and
one for platform device), introduce a generic structure "device" which
is embedded in each specialized device.

As x86 only supports PCI, introduce a new type device_t which will be an
alias to pci_dev for this architecture. It will avoid to add a new field
for this place.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
CC: Keir Fraser <keir@xen.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>
10 years agoxen/iommu: arm: Remove temporary the SMMU driver
Julien Grall [Wed, 25 Feb 2015 18:52:54 +0000 (18:52 +0000)]
xen/iommu: arm: Remove temporary the SMMU driver

The current SMMU driver has completly diverged. That makes me hard to
maintain.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agofactor out construct_memop_from_reservation
Wei Liu [Fri, 27 Feb 2015 16:56:20 +0000 (17:56 +0100)]
factor out construct_memop_from_reservation

No functional change.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
10 years agoMerge branch 'wip.build-system-v5' of git://xenbits.xen.org/people/liuw/xen into...
Ian Campbell [Fri, 27 Feb 2015 16:20:27 +0000 (16:20 +0000)]
Merge branch 'wip.build-system-v5' of git://xenbits.xen.org/people/liuw/xen into staging

Conflicts:
Config.mk

ijc -- resolved trivial conflict with 6dacedd707c2 "tools: update
       seabios rel-1.8.0"

10 years agoRemove in-tree mini-os directory
Wei Liu [Fri, 30 Jan 2015 16:03:18 +0000 (16:03 +0000)]
Remove in-tree mini-os directory

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agobuild system: stubdom targets now depends on mini-os target
Wei Liu [Fri, 30 Jan 2015 15:58:38 +0000 (15:58 +0000)]
build system: stubdom targets now depends on mini-os target

Provide mini-os url and revision in Config.mk

Make stubdom targets depend on mini-os-dir target. Make
subtree-force-update{,-all} depend on mini-os-dir-force-update.

Also make mktarball script generate mini-os archive.

Original mini-os directory is renamed to mini-os-intree to help reduce
patch length. That directory will be deleted in a separate patch.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
---
Changes in v3:
1. Put mini-os targets in main Makefile.
2. Stubdom clean and distclean don't depend on mini-os-dir.

Changes in v2:
1. Use hash in Config.mk.

10 years agoMini-OS: standalone build
Wei Liu [Thu, 29 Jan 2015 19:10:04 +0000 (19:10 +0000)]
Mini-OS: standalone build

In order to keep the tree bisectable all the changes are done in one
single commit.

Things done in this commit:

1. Import necessary .mk files from Xen.
2. Move all XEN_ related variables to MINIOS_ namespace.
3. Import Xen public header files.
4. Import BSD's list.h and helper script.

Mini-OS's vanilla Config.mk is modified to contain some macros copied
from Xen's Config.mk. It also contains compatibility handling logic for
Xen's stubdom build environment.

Files modified:
   Config.mk
   Makefile
   arch/x86/Makefile
   arch/x86/arch.mk
   minios.mk

All other files are just imported from Xen.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
10 years agogit-checkout.sh: use "mkdir -p"
Wei Liu [Sun, 25 Jan 2015 16:30:21 +0000 (16:30 +0000)]
git-checkout.sh: use "mkdir -p"

Otherwise mkdir extras/mini-os fails because extras doesn't exist.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agostubdom: no need to clean mini-os
Wei Liu [Tue, 24 Feb 2015 17:37:04 +0000 (17:37 +0000)]
stubdom: no need to clean mini-os

All objects are placed inside stubdom's directories, so there is no need
to enter mini-os and clean.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Samuel Thibault <samuel.thibault@ens-lyon.org>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agostubdom: don't look for mini-os source file during configure
Wei Liu [Sun, 25 Jan 2015 14:43:43 +0000 (14:43 +0000)]
stubdom: don't look for mini-os source file during configure

Don't look for mini-os source file during configure. Mini-os source code
will be fetched during build.

Instead look for xenstore-minios.cfg.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoMerge branch 'staging' of ssh://xenbits.xen.org/home/xen/git/xen into staging
Ian Campbell [Fri, 27 Feb 2015 15:35:03 +0000 (15:35 +0000)]
Merge branch 'staging' of ssh://xenbits.xen.org/home/xen/git/xen into staging

10 years agox86/traps: consolidate PV RDMSR emulation paths
Jan Beulich [Fri, 27 Feb 2015 15:12:39 +0000 (16:12 +0100)]
x86/traps: consolidate PV RDMSR emulation paths

Settle on just using one variable (val), and move the other into
WRMSR's local scope. Chain up further success paths to the
rdmsr_writeback label rather than open coding them.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
10 years agox86/Dom0: account for shadow/HAP allocation
Jan Beulich [Fri, 27 Feb 2015 15:11:07 +0000 (16:11 +0100)]
x86/Dom0: account for shadow/HAP allocation

... when calculating how many pages to allocate for Dom0. This is
basically equivalent to the already present IOMMU related adjustment.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
10 years agocomplete conversion set_bit() -> __cpumask_set_cpu() by 4aaca0e9cd
Jan Beulich [Fri, 27 Feb 2015 15:09:27 +0000 (16:09 +0100)]
complete conversion set_bit() -> __cpumask_set_cpu() by 4aaca0e9cd

While converting to __cpumask_set_cpu() was correct, the first argument
passed should have been corrected to be "cpu" instead of "nr" at once.
The wrong construct results in problems on systems with relatively few
CPUs.

Reported-by: Sander Eikelenboom <linux@eikelenboom.it>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citirx.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoConfig.mk: update OVMF revision
Wei Liu [Thu, 26 Feb 2015 15:38:16 +0000 (15:38 +0000)]
Config.mk: update OVMF revision

Update OVMF revision to the latest tested commit.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Anthony Perard <anthony.perard@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoAutomatically check xen's public headers for C++ pitfalls.
Tim Deegan [Fri, 27 Feb 2015 09:46:34 +0000 (09:46 +0000)]
Automatically check xen's public headers for C++ pitfalls.

Add a check, like the existing check for non-ANSI C in the public
headers, that runs the public headers through a C++ compiler to
flag non-C++-friendly constructs.

Unlike the ANSI C check, we accept GCC-isms (gnu++98), and we also
check various tools-only headers.

Also tidy up the runes for these checks to be a bit more readable.

io/ring.h uses 'private' as a field name, which is a keyword in C++;
this patch doesn't change that.  Instead the check works around it.

Reported-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
Signed-off-by: Tim Deegan <tim@xen.org>
Acked-by: Jan Beulich <JBeulich@suse.com>
Tested-by: Don Slutz <dslutz@verizon.com>
10 years agomm: MEMF_node should handle changes in nodeid_t size
Boris Ostrovsky [Thu, 26 Feb 2015 13:08:34 +0000 (14:08 +0100)]
mm: MEMF_node should handle changes in nodeid_t size

Instead of using a hardcoded constant to extract nodeID from
memflags use a macro whose value is based on nodeid_t size.

Also provide a macro for extracting nodeID from memflags so that
users don't need to remember to decrement the value.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
MASK_EXTR() can't be used in MEMF2NODE() (also renamed to
MEMF_get_node()).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
10 years agox86/numa: adjust datatypes for node and pxm
Boris Ostrovsky [Thu, 26 Feb 2015 13:06:26 +0000 (14:06 +0100)]
x86/numa: adjust datatypes for node and pxm

Use u8-sized node IDs and unsigned PXMs consistently throughout
code (and introduce nodeid_t type).

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
10 years agox86/numa: allow arbitrary value of PXM in PXM<->node mapping
Boris Ostrovsky [Thu, 26 Feb 2015 13:05:13 +0000 (14:05 +0100)]
x86/numa: allow arbitrary value of PXM in PXM<->node mapping

ACPI defines proximity domain identifier as a 32-bit integer. While
in most cases the values will be zero-based this is not guaranteed,
making current pxm2node[256] mapping structure not appropriate.

We will instead use MAX_NUMNODES-sized array of struct pxm2node to
store PXM-to-node mapping. To accommodate common case of zero-based
and contiguios PXMs we will, whenever possible, try to use PXM as
index into this array for fast lookups.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Use ARRAY_SIZE(pxm2node) instead of MAX_NUMNODES in bounds checks.
Rename struct pxm_to_node to struct pxm2node (the structure tag
aliasing with the array defined using it is better than it aliasing
with a function name).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
10 years agorework the comments for struct xen_domctl_vnuma
Dario Faggioli [Thu, 26 Feb 2015 13:00:58 +0000 (14:00 +0100)]
rework the comments for struct xen_domctl_vnuma

In fact: vnode_to_pnode is an array, not a mask; there was a
typo in the one about vmemrange; there was no indication
of the data directions.

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
10 years agox86/Dom0: minor command line parsing adjustments
Jan Beulich [Thu, 26 Feb 2015 13:00:21 +0000 (14:00 +0100)]
x86/Dom0: minor command line parsing adjustments

Remove a redundant statement from parse_dom0_mem() and refuse bogus
ranges (with a separator other than a dash) passed to
parse_dom0_max_vcpus(). Fix coding style issues in the latter function
at the same time.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
10 years agohonor MEMF_no_refcount in alloc_heap_pages()
Jan Beulich [Thu, 26 Feb 2015 12:58:54 +0000 (13:58 +0100)]
honor MEMF_no_refcount in alloc_heap_pages()

Non-anonymous allocations with this flag set should - for the purpose
of the availability check - be treated just like anonymous ones, as
they wouldn't lead to a reduction of ->outstanding_pages.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agominor modifications to platform.h to make it C++-friendly
Razvan Cojocaru [Thu, 26 Feb 2015 12:57:34 +0000 (13:57 +0100)]
minor modifications to platform.h to make it C++-friendly

Moved the definition of struct xenpf_efi_guid and struct
xenpf_efi_time to file scope to avoid compilation errors with C++
(structs defined inside unnamed structs become unavailable
outside their scope with C++). The change allows C++ applications
to use platform.h with no consequences for current C clients.

Signed-off-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
10 years agoxen/arm: Automatically find a PPI for the DOM0 event channel interrupt
Julien Grall [Thu, 19 Feb 2015 18:12:04 +0000 (18:12 +0000)]
xen/arm: Automatically find a PPI for the DOM0 event channel interrupt

Use the new vgic interface to know which virtual PPI is free and use it
for the event channel code.

At the DOM0 creation time, Xen doesn't know which vIRQ will be free.
All the vIRQ will be reserved when we parse the device tree. So we can
allocate the vIRQ just after the device tree has been parsed.

It's safe to defer the allocation because no vIRQ can be injected as
long as the vCPU is not online.

As the device tree node "hypervisor" containing the description of the
event channel interrupt is created earlier, add a placeholder which will
be fix up once Xen has allocated the PPI.

Also correct the check in arch_domain_create to use is_hardware_domain.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic: Keep track of vIRQ used by a domain
Julien Grall [Thu, 19 Feb 2015 18:12:03 +0000 (18:12 +0000)]
xen/arm: vgic: Keep track of vIRQ used by a domain

While it's easy to know which hardware IRQ is assigned to a domain, there
is no way to know which vIRQ is allocated by Xen for a specific domain.

Introduce a bitmap to keep track of every vIRQ used by a domain. This
will be used later to find free vIRQ for interrupt device assignment and
emulated interrupt.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen: arm: Warn if timer interrupts are not level triggered
Ian Campbell [Thu, 19 Feb 2015 15:24:03 +0000 (15:24 +0000)]
xen: arm: Warn if timer interrupts are not level triggered

Edge trigger arch timer interrupts really don't make much sense, so if
we discover we are booting on such a system issue a warning.

So far this has only been seen on the fast model emulators which have
both an incorrect DT description of the interrupt and a writeable
ICFGR allowing us to program the incorrect configuration. Other
platforms have incorrect DT descriptions (warned about by previous
patch) but the corresponding ICFGR isn't actually writeable so the
eventual configuration is level as desired.

I did consider overriding the incorrect DT on such systems but since
so far it has only been observed on emulators and we have code in
place to deal with edge triggering here I think warning is sufficient
for now.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Reviewed-by: Julien Grall <julien.grall@linaro.org>
[ ijc -- s/contoller/controller twice ]

10 years agoxen: arm: log warning for interrupt configuration mismatch
Ian Campbell [Thu, 19 Feb 2015 15:24:02 +0000 (15:24 +0000)]
xen: arm: log warning for interrupt configuration mismatch

The ICFGR register is not necessarily writeable, in particular it is
IMPLEMENTATION DEFINED for a PPI if the configuration register is
writeable. Log a warning if the hardware has ignored our write and
update the actual type in the irq descriptor so subsequent code can do
the right thing.

This most likely implies a buggy firmware description (e.g.
device-tree).

The issue is observed for example on the APM Mustang board where the
device tree (as shipped by Linux) describes all 3 timer interrupts as
rising edge but the PPI is hard-coded to level triggered (as makes
sense for an arch timer interrupt).

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Reviewed-by: Julien Grall <julien.grall@linaro.org>
Cc: Pranavkumar Sawargaonkar <psawargaonkar@apm.com>
10 years agoxen: arm32: reduce default size of the xenheap
Ian Campbell [Thu, 19 Feb 2015 17:39:54 +0000 (17:39 +0000)]
xen: arm32: reduce default size of the xenheap

... and make it tunable via the command line.

1/8 of RAM is 128M on a 1GB system and 256M on a 2GB system etc,
which is a lot. 1/32 of RAM seems more reasonable. Also drop the
minimum to 32M.

Leave the maximum at 1GB.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Reviewed-by: Julien Grall <julien.grall@linaro.org>
Cc: Jintack Lim <jintack@cs.columbia.edu>
Cc: Jan Beulich <JBeulich@suse.com>
10 years agoMerge branch 'staging' of ssh://xenbits.xen.org/home/xen/git/xen into staging
Ian Campbell [Tue, 24 Feb 2015 16:42:24 +0000 (16:42 +0000)]
Merge branch 'staging' of ssh://xenbits.xen.org/home/xen/git/xen into staging

10 years agoetherboot: [build] sort objects in blib.a
Olaf Hering [Tue, 3 Feb 2015 11:45:36 +0000 (12:45 +0100)]
etherboot: [build] sort objects in blib.a

When building hvmloader for Xen tools the ipxe objects are also linked
into the binary. Unfortunately the linker will place them in the order
found in the archive. Since this order is random the resulting hvmloader
binary differs when it was built from identical sources but on different
build hosts. To help with creating a reproducible binary the elements in
blib.a must simply be sorted before passing them to $(AR).

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agodocs: create reproducible html
Olaf Hering [Tue, 3 Feb 2015 11:45:35 +0000 (12:45 +0100)]
docs: create reproducible html

The Makefile uses wildcard to collect a list of files. The resulting
list of files is in directory order, which is random. As a result the
generated html files will differ when build on different hosts.

Use the built-in sort function to get a stable list of files.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agotools/hotplug: systemd: Don't ever kill xenstored
Ross Lagerwall [Tue, 24 Feb 2015 08:05:50 +0000 (08:05 +0000)]
tools/hotplug: systemd: Don't ever kill xenstored

Don't kill xenstored as part of the usual service shutdown process to
prevent hangs on shutdown where the kernel tries to unplug a VIF
after xenstored has exited.

In an ideal case with all guests cooperating, xendomains will have shut
down all guests before xenstored is killed.

However in the uncooperative case, malicious or crashed guests may still
be running after xendomains has exited and this should not block the
shutdown/reboot of dom0.

Xenstored has no state to sync to disk, and never used to be killed in
the sysvinit case; observe the warning in xencommons.  Our testing has
shown regressions caused by the change in behaviour between sysvinit and
systemd when it comes to killing xenstored.

Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
[ ijc -- added systemd to title ]

10 years agoxen/xsm: Generate the permission in a spec-compliant way
Julien Grall [Fri, 20 Feb 2015 15:58:28 +0000 (15:58 +0000)]
xen/xsm: Generate the permission in a spec-compliant way

Each class can contains 32 permisions which are encoded on a word (one
bit per permission).

Currently the awk script will generate an hexadecimal value for each
permission. This may result to generate an invalid value on some version
of awk.

For instance debian jessie is using a version of mawk where (1 << 31)
will result to 0x7fffffff.

This is because the awk specification requires to do the arithmetic with
float. So the resulting integer may vary following the implementation.

As the generated headers are only used by C code, generate the
permission define via "1UL << n".

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
10 years agotools/Coverity: Audit of MISSING_BREAK defects
Andrew Cooper [Thu, 12 Feb 2015 20:08:33 +0000 (20:08 +0000)]
tools/Coverity: Audit of MISSING_BREAK defects

Coverity uses several heuristics to identify when one case statement
legitimately falls through into the next, and a comment as the final item in a
case statement is one heuristic (the assumption being that it is a
justification for the fallthrough).

Use this to perform an audit of defects and hide the legitimate fallthroughs.

There are two bugfixes identified in the audit, both minor:
 * 'n' command line handling for gtracestat
 * BKSPC handling in xentop

All other identified defaults are legitimate fallthoughs

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Coverity-IDs: 105546410554651055467105546810554811055482
CC: Ian Campbell <Ian.Campbell@citrix.com>
CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
CC: Wei Liu <wei.liu2@citrix.com>
CC: Xen Coverity Team <coverity@xen.org>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Don Koch <dkoch@verizon.com>
10 years agotest_x86_emulator.c: add emacs block
Don Slutz [Mon, 23 Feb 2015 16:54:59 +0000 (17:54 +0100)]
test_x86_emulator.c: add emacs block

Signed-off-by: Don Slutz <dslutz@verizon.com>
Acked-by: Andrew Cooper <andew.cooper@citrix.com>
10 years agox86: remove commented out stale references to efi_enabled
Daniel Kiper [Mon, 23 Feb 2015 16:53:46 +0000 (17:53 +0100)]
x86: remove commented out stale references to efi_enabled

Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
10 years agofix build failure if using perfc=y
Dario Faggioli [Fri, 20 Feb 2015 15:21:10 +0000 (16:21 +0100)]
fix build failure if using perfc=y

by providing the definition of the {w,r}rmsr_tsc_msr counters,
used within Viridian implementation.

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
10 years agoMAINTAINERS: add x86 emulator test directory to "X86 ARCHITECTURE"
Jan Beulich [Fri, 20 Feb 2015 15:20:52 +0000 (16:20 +0100)]
MAINTAINERS: add x86 emulator test directory to "X86 ARCHITECTURE"

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agox86/shadow: Cleanup of vcpu handling
Andrew Cooper [Sat, 7 Feb 2015 16:01:13 +0000 (16:01 +0000)]
x86/shadow: Cleanup of vcpu handling

There existed some codepaths which had a domain in their hand, but needed a
vcpu to drive the shadow interface.

Now that these interfaces have changed to be domain based, the hoop-jumping
can be removed.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter sh_remove_write_access to take a domain
Andrew Cooper [Sat, 7 Feb 2015 16:50:10 +0000 (16:50 +0000)]
x86/shadow: Alter sh_remove_write_access to take a domain

This allows the removal an improper use of d->vcpu[0] from toolstack context

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter sh_{remove_all_mappings,rm_mappings_from_l1}() to take a domain
Andrew Cooper [Mon, 11 Aug 2014 01:42:57 +0000 (02:42 +0100)]
x86/shadow: Alter sh_{remove_all_mappings,rm_mappings_from_l1}() to take a domain

This allows the removal an improper use of d->vcpu[0] from toolstack context

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter sh_remove_{all_}shadows{,_and_parents}() to take a domain
Andrew Cooper [Mon, 11 Aug 2014 01:38:53 +0000 (02:38 +0100)]
x86/shadow: Alter sh_remove_{all_}shadows{,_and_parents}() to take a domain

This allows the removal of 3 improper uses of d->vcpu[0] from toolstack context

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter sh_rm_write_access_from_???() to take a domain
Andrew Cooper [Thu, 21 Aug 2014 23:09:11 +0000 (00:09 +0100)]
x86/shadow: Alter sh_rm_write_access_from_???() to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter shadow_unhook{_???}_mappings() to take a domain
Andrew Cooper [Sat, 7 Feb 2015 15:58:40 +0000 (15:58 +0000)]
x86/shadow: Alter shadow_unhook{_???}_mappings() to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter sh_remove_l?_shadow() to take a domain
Andrew Cooper [Mon, 11 Aug 2014 01:32:44 +0000 (02:32 +0100)]
x86/shadow: Alter sh_remove_l?_shadow() to take a domain

This involves introducing the domain variant of hash_foreach()

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter sh_{clear_shadow_entry,remove_shadow_via_pointer}() to take a domain
Andrew Cooper [Mon, 11 Aug 2014 01:16:23 +0000 (02:16 +0100)]
x86/shadow: Alter sh_{clear_shadow_entry,remove_shadow_via_pointer}() to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter shadow_set_l?e() to take a domain
Andrew Cooper [Mon, 2 Feb 2015 02:10:55 +0000 (02:10 +0000)]
x86/shadow: Alter shadow_set_l?e() to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter sh_get_ref() and sh_{,un}pin() to take a domain
Andrew Cooper [Mon, 11 Aug 2014 00:56:52 +0000 (01:56 +0100)]
x86/shadow: Alter sh_get_ref() and sh_{,un}pin() to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter sh_put_ref() and shadow destroy functions to take a domain
Andrew Cooper [Mon, 2 Feb 2015 01:46:12 +0000 (01:46 +0000)]
x86/shadow: Alter sh_put_ref() and shadow destroy functions to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter shadow_{pro,de}mote() to take a domain
Andrew Cooper [Thu, 21 Aug 2014 18:55:48 +0000 (19:55 +0100)]
x86/shadow: Alter shadow_{pro,de}mote() to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter OOS functions to take a domain
Andrew Cooper [Mon, 2 Feb 2015 01:25:34 +0000 (01:25 +0000)]
x86/shadow: Alter OOS functions to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter sh_type_{is_pinnable,has_up_pointer}() to take a domain
Andrew Cooper [Mon, 2 Feb 2015 01:18:32 +0000 (01:18 +0000)]
x86/shadow: Alter sh_type_{is_pinnable,has_up_pointer}() to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter *_shadow_status() and make_fl1_shadow() to take a domain
Andrew Cooper [Mon, 2 Feb 2015 00:34:00 +0000 (00:34 +0000)]
x86/shadow: Alter *_shadow_status() and make_fl1_shadow() to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Alter shadow_hash_{lookup,insert,delete}() to take a domain
Andrew Cooper [Mon, 2 Feb 2015 00:15:04 +0000 (00:15 +0000)]
x86/shadow: Alter shadow_hash_{lookup,insert,delete}() to take a domain

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agox86/shadow: Change the gating of shadow heuristics
Andrew Cooper [Sat, 7 Feb 2015 13:54:47 +0000 (13:54 +0000)]
x86/shadow: Change the gating of shadow heuristics

Each of these functions will have their vcpu paramters replaced with domain
parameters because they are part of domain-generic rather than vcpu specific
codepaths, which means that the use of 'v' will have to change.  'current' can
be used to obtain a vcpu when in an appropriate context.

The 'curr->domain == d' test is less restrictive than 'v == current'.  The end
result is still safe as the code still only runs in the context of the correct
domain, but is now valid to run in cases where previously 'v' was some other
vcpu in the same domin.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
10 years agoxen/arm: device: Rename device_type into device_class
Julien Grall [Fri, 30 Jan 2015 18:49:19 +0000 (18:49 +0000)]
xen/arm: device: Rename device_type into device_class

This enum was used for matching a specific class of device and not to get the
type of device.

Hence the name device_type will be used for another purpose later.

Also rename device_get_type into device_get_class to reflect the change.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/dt: Extend dt_device_match to possibly store data
Julien Grall [Fri, 30 Jan 2015 18:49:18 +0000 (18:49 +0000)]
xen/dt: Extend dt_device_match to possibly store data

Some drivers may want to configure differently the device depending on
the compatible string. For this purpose, add a new field in the
dt_device_match to store the data.

Also modify the return type of dt_match_node to return the matching
structure.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic: Drop unecessary include asm/device.h
Julien Grall [Fri, 30 Jan 2015 18:49:17 +0000 (18:49 +0000)]
xen/arm: vgic: Drop unecessary include asm/device.h

The header asm/device.h has been included in the vgic code during
splitting to support multiple version. But no code within those files
requires it.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: gic-v2: Change the device name in DT_DEVICE_START
Julien Grall [Fri, 30 Jan 2015 18:49:16 +0000 (18:49 +0000)]
xen/arm: gic-v2: Change the device name in DT_DEVICE_START

I'm not sure why a ':' has been added in the name... But none of the
other usages doesn't have it.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoMakefile: refactor build/clean/distclean targets
Wei Liu [Sun, 25 Jan 2015 14:12:51 +0000 (14:12 +0000)]
Makefile: refactor build/clean/distclean targets

Factor out per-subsystem build/clean/distclean-% targets, so that we can
build subsystems independently in top level directory.

The motive behind this is after splitting out mini-os from Xen tree,
stubdom is in effect a downstream of mini-os.  I would like to have the
ability to build it independently and instrument OSSTest to test it.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agostubdom: fix "make build"
Wei Liu [Fri, 30 Jan 2015 14:15:02 +0000 (14:15 +0000)]
stubdom: fix "make build"

Cross compiling libxc requires some symlinks to exist.

Note that make -C tools/include requires running tools/configure. But at
least now the error message is much better than just a "file not found"
error.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Ian Jakcson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
10 years agoxen/arm: gic-v3: Update some comments in the code
Julien Grall [Mon, 16 Feb 2015 14:50:55 +0000 (14:50 +0000)]
xen/arm: gic-v3: Update some comments in the code

    - Drop wrong comment about the default stride. It's not always 2 * SZ_64K.
    When the re-distributor support VLPIs (from GICv4), the default
    stride is 4 * SZ_64K

    - Explain why SZ_64K * 2

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic: Drop iactive, ipend, pendsgi field
Julien Grall [Mon, 16 Feb 2015 14:50:54 +0000 (14:50 +0000)]
xen/arm: vgic: Drop iactive, ipend, pendsgi field

The current VGIC code doesn't support to change the pending and active status
of an IRQ via the (re-)distributor.

Futhermore, all the access size wasn't support correctly and some
registers was implemented as write-ignore. The latter make very
difficult for a kernel developer to find that we don't support R/W to
those registers.

Make the support consistent:
    - read will return 0 (RAZ)
    - write will print an error and inject a data abort to the guest

Also, those fields was never set and field such as ipend and pendsgi was
doing the same jobs.

Rather than wasting memory, we should better drop it. We could re-introduce
them if we need it when the support will be made.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
[ ijc -- s/XENLOG_ERR/XENLOG_G_ERR/g ]

10 years agoxen/arm: vgic-v2: GICD_I{S, C}PENDR* are only word-accessible
Julien Grall [Mon, 16 Feb 2015 14:50:53 +0000 (14:50 +0000)]
xen/arm: vgic-v2: GICD_I{S, C}PENDR* are only word-accessible

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v2: Take the lock when writing into GICD_CTLR
Julien Grall [Mon, 16 Feb 2015 14:50:52 +0000 (14:50 +0000)]
xen/arm: vgic-v2: Take the lock when writing into GICD_CTLR

This register is shared between every vCPUs and the lock was already
taken for read.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v2: Correctly handle RAZ/WI registers
Julien Grall [Mon, 16 Feb 2015 14:50:51 +0000 (14:50 +0000)]
xen/arm: vgic-v2: Correctly handle RAZ/WI registers

All the GICv2 registers are word-accessible. Some them are also
byte-accessible (see GICD_IPRIORITYR*).

Those registers are incorrectly implemented when they should be RAZ. Only
word-access size are currently allowed for them.

To avoid further issues, introduce different label following the access-size
of the registers:
    - read_as_zero_32 and write_ignore_32: Used for registers accessible
    via a word.
    - read_as_zero: Used when we don't have to check the access size.

The latter is used when the access size has already been checked in the
register emulation and/or when the register offset is reserved/implementation
defined.

Note that, only used labels has been introduced.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v2: Correctly set GICD_TYPER.CPUNumber
Julien Grall [Mon, 16 Feb 2015 14:50:50 +0000 (14:50 +0000)]
xen/arm: vgic-v2: Correctly set GICD_TYPER.CPUNumber

The number of implemented CPU interfaces is one more than the value of
this field.

Also avoid hardcoding the shift and remove useless mask.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v3: Clarify which distributor is used in the common emulation
Julien Grall [Mon, 16 Feb 2015 14:50:49 +0000 (14:50 +0000)]
xen/arm: vgic-v3: Clarify which distributor is used in the common emulation

The messages in the common emulation doesn't specify which distributor
(redistributor or distributor) is used. This make difficult to find the
correct registers.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v3: Emulate correctly the re-distributor
Julien Grall [Mon, 16 Feb 2015 14:50:48 +0000 (14:50 +0000)]
xen/arm: vgic-v3: Emulate correctly the re-distributor

There is a one-to-one mapping between each re-distributors and processors.
Each re-distributors can be accessed by any processor at any time. For
instance during the initialization of the GIC, the drivers will browse
the re-distributor to find the one associated to the current processor
(via GICR_TYPER). So each re-distributor has its own MMIO region.

The current implementation of the vGICv3 emulation assumes that the
re-distributor region is banked. Therefore, the processor won't be able
to access other re-distributor. While this is working fine for Linux, a
processor will only access GICR_TYPER to find the associated re-distributor,
we have to implement correctly the re-distributor emulation in order to boot
other operating systems.

All emulated registers of the re-distributors take a vCPU in parameter
and necessary lock. Therefore concurrent access is already properly handled.

The missing bit is retrieving the right vCPU following the region accessed.
Retrieving the right vCPU could be slow, so it has been divided in 2 paths:
    - fast path: The current vCPU is accessing its own re-distributor
    - slow path: The current vCPU is accessing another re-distributor

As the processor needs to initialize itself, the former case is very
common. To handle the access quickly, the base address of the
re-distributor is computed and stored per-vCPU during the vCPU initialization.

The latter is less common and more complicate to handle. The re-distributors
can be spread across multiple regions in the memory.

During the domain creation, Xen will browse those regions to find the first
vCPU handled by this region.

When an access hits the slow path, Xen will:
    1) Retrieve the region using the base address of the re-distributor
    accessed
    2) Find the vCPU ID attached to the redistributor
    3) Check the validity of the vCPU. If it's not valid, a data abort
    will be injected to the guest

Finally, this patch also correctly support the bit GICR_TYPER.LAST which
indicates if the redistributor is the last one of the contiguous region.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v3: Use a struct to describe contiguous rdist regions
Julien Grall [Mon, 16 Feb 2015 14:50:47 +0000 (14:50 +0000)]
xen/arm: vgic-v3: Use a struct to describe contiguous rdist regions

Also update the different comment to make clear that we register one MMIO
region per contiguous regions and not per re-distributor.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v3: Set stride during domain initialization
Julien Grall [Mon, 16 Feb 2015 14:50:46 +0000 (14:50 +0000)]
xen/arm: vgic-v3: Set stride during domain initialization

The stride may not be set if the hardware GIC is using the default
layout. It happens on the Foundation model.

On GICv3, the default stride is 2 * 64K. Therefore it's possible to avoid
checking at every redistributor MMIO access if the stride is not set.

Because domU uses a static stride configuration this only happens for
dom0, so we can move this code in gicv_v3_init. Take the opportunity to move
the stride setting a bit earlier because the loop to set regions will require
the stride.

Also, use 2 * 64K rather than 128K and explain the reason.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v3: Correctly implement read into GICR_NSACR
Julien Grall [Mon, 16 Feb 2015 14:50:45 +0000 (14:50 +0000)]
xen/arm: vgic-v3: Correctly implement read into GICR_NSACR

The 32-bit register GICR_NSACR is RAZ/WI on non-secure state. Therefore
we should not inject a data abort to the guest.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v3: Correctly handle RAZ/WI registers
Julien Grall [Mon, 16 Feb 2015 14:50:44 +0000 (14:50 +0000)]
xen/arm: vgic-v3: Correctly handle RAZ/WI registers

Some of the registers are accessible via multiple size (see GICD_IPRIORITYR*).

Those registers are incorrectly implemented when they should be RAZ. Only
word-access size are currently allowed for them.

The paragraph 5.3.1 in the GICv3 spec (PRD03-GENC-010745 24.0) indicates
the different access-sizes supported for each register.

The current vGICv3 driver is not ready for 32 bits guest and will
require some rework. So, for now, only supporting access-size of a system not
supporting aarch32.

To avoid further issues, introduce different label following the access-size
of the registers:
    - read_as_zero_64 and write_ignore_64: Used for registers accessible
    via a double-word.
    - read_as_zero_32 and write_ignore_32: Used for registers accessible
    via a word.
    - read_as_zero: Used when we don't have to check the access size.

The latter is used when the access size has already been checked in the
register emulation and/or when the register offset is
reserved/implementation defined.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v3: Correctly handle GICD_CTLR
Julien Grall [Mon, 16 Feb 2015 14:50:43 +0000 (14:50 +0000)]
xen/arm: vgic-v3: Correctly handle GICD_CTLR

As backward GICv2 compatibility is not supported in the vGICv3 driver,
the bit ARE_NS is RAO/WI.

Furthermore, when ARE_NS is set, the guest can only modify EnableGrp1A.

At same time take the vgic_lock to write into domain.arch.vgic.ctrl. It
was already taken during read.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v3: Correctly set GICD_TYPER.CPUNumber
Julien Grall [Mon, 16 Feb 2015 14:50:42 +0000 (14:50 +0000)]
xen/arm: vgic-v3: Correctly set GICD_TYPER.CPUNumber

On GICv3, the value (CPUNumber + 1) indicates the number of processor that may
be used as interrupts targets when ARE bit is zero. The maximum is 8
processors.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agoxen/arm: vgic-v3: Correctly set GICD_TYPER.IDbits
Julien Grall [Mon, 16 Feb 2015 14:50:41 +0000 (14:50 +0000)]
xen/arm: vgic-v3: Correctly set GICD_TYPER.IDbits

From Linux 3.19, the GICv3 drivers is using GICD_TYPER.IDbits to check
the validity of the hardware interrupt number.

The field IDBits in the register GICD_TYPER is used to know the number of
interrupt identifiers (SPI, PPIs, SGIs, LPIs) supported by GIC Stream Protocol
Interface.

This field contains the number of interrupt identifier bits minus one.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agotools/libxl: Do not use remus teardown paths for non-remus guests
Andrew Cooper [Thu, 19 Feb 2015 12:43:57 +0000 (12:43 +0000)]
tools/libxl: Do not use remus teardown paths for non-remus guests

It causes a suspend failure to emit

  libxl: error: libxl_dom.c:2035:remus_teardown_done: Remus: failed to
  teardown device for guest with domid 17, rc -3

for all domains, including those not using remus at all.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
CC: Ian Campbell <Ian.Campbell@citrix.com>
CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
CC: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
10 years agotools: update to seabios rel-1.8.0
Ian Campbell [Thu, 19 Feb 2015 08:37:44 +0000 (08:37 +0000)]
tools: update to seabios rel-1.8.0

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
10 years agoxen: arm64: more useful logging on bad trap.
Ian Campbell [Wed, 18 Feb 2015 17:01:55 +0000 (17:01 +0000)]
xen: arm64: more useful logging on bad trap.

Dump the register state before panicing so we have some clue where the
issue occurred. Also decode the ESR register a bit to save having to
grab a pen and paper.

ESR_EL2 is a 32-bit register, so use SYSREG_READ32 not ..._READ64, as
we already do correctly in the main trap handler.

While here notice that do_trap_serror is never called and remove it.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Reviewed-by: Julien Grall <julien.grall@linaro.org>
Tested-by: Jintack Lim <jintack@cs.columbia.edu>
Cc: jintack@cs.columbia.edu
[ ijc -- add missing \n to first printk ]

10 years agotools: require at least pixman 0.21.8 for qemu-xen
Olaf Hering [Wed, 11 Feb 2015 15:00:44 +0000 (16:00 +0100)]
tools: require at least pixman 0.21.8 for qemu-xen

Avoid late build failure in openSUSE 11.4, it has just pixman-0.20:

....
[  211s] ERROR: pixman >= 0.21.8 not present. Your options:
[  211s]          (1) Preferred: Install the pixman devel package (any recent
[  211s]              distro should have packages as Xorg needs pixman too).
[  211s]          (2) Fetch the pixman submodule, using:
[  211s]              git submodule update --init pixman
....

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>