Commit Graph
21942 Commits
Author SHA1 Message Date
Keir Fraser 4f10c28afc x86: Reorder CPUs at boot time to reflect system topology.
This is an attempt to impose some sensible coherent ordering on the
cpu namespace, where previously there was none (we were at the mercy
of BIOS ordering, which varies wildly across systems).

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2010-08-09 18:28:04 +01:00
Keir Fraser 74aeab42a3 Nested Virtualization: p2m infrastructure
Change p2m infrastructure to operate on per-p2m instead of per-domain.
This allows us to use multiple p2m tables per-domain.

Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
Acked-by: Tim Deegan <Tim.Deegan@citrix.com>
2010-08-09 16:46:42 +01:00
Keir Fraser c92aec02ad Intel EPT: Fix out of range right shift on 32-bit host
Currently, there has a logic to check whether the EPT GFN is exceeding
guest physical address width. It uses right shift(>>) to implement the
check. But the right shift count is greater than the width of the
type(unsigned long = 32) under the PAE. And this will cause guest boot
fail under PAE with EPT supported.

Signed-off-by: Li Xin <xin.li@intel.com>
Signed-off-by: Zhang Yang <yang.z.zhang@intel.com>
2010-08-09 16:40:18 +01:00
Keir Fraser cecdcf59c4 cpupool: correct removing cpu from cpupool
Corrects an error introduced with cs 21422.
Without the patch my machine crashed when removing a cpu from a
cpupool other than Pool-0.

Signed-off-by: Juergen Gross <juergen.gross@ts.fujitsu.com>
2010-08-09 16:39:09 +01:00
Keir Fraser c92d5f4e0f Credit1: Tweak reset condition
VMs that don't use their full timeslice are guaranteed to flip back
and forth between "active" and "inactive".  If we set credit to 0
when setting "inactive", then when the VM comes back to "active"
again, it will effectively be behind most other vcpus in credit.
This causes the credit1 to effectively discriminate *against*
VMs which use less than their full timeslice.

Instead of setting credit to 0, divide it in half.  This gets rid of
some of the system credit while allowing non-cpu-bound VMs to keep
some priority advantage.

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
2010-08-09 16:37:33 +01:00
Keir Fraser 5fc9f5ef6c scheduler: Implement yield for credit1
This patch implements 'yield' for credit1.  It does this by attempting
to put yielding vcpu behind a single lower-priority vcpu on the
runqueue.  If no lower-priority vcpus are in the queue, it will go at
the back (which if the queue is empty, will also be the front).

Runqueues are sorted every 30ms, so that's the longest this priority
inversion can happen.

For workloads with heavy concurrency hazard, and guest which implement
yield-on-spinlock, this patch significantly increases performance and
total system throughput.

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
2010-08-09 16:36:07 +01:00
Keir Fraser 49094cac1b scheduler: Add a per-scheduler yield callback
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
2010-08-09 16:35:27 +01:00
Keir Fraser 22bcc5f006 vt-d: Fix ioapic_rte_to_remap_entry error path.
When ioapic_rte_to_remap_entry fails, currently it just writes value
to ioapic. But the 'mask' bit may be changed if it writes to the upper
half of RTE. This patch ensures to recover the original value of 'mask'
bit in this case.

Signed-off-by: Weidong Han <weidong.han@intel.com>
2010-08-09 16:33:45 +01:00
Keir Fraser 1cb3c0f228 vt-d: Fix ioapic write order in io_apic_write_remap_rte
At the end of io_apic_write_remap_rte, it writes new entry (remapped
interrupt) to ioapic. But it writes low 32 bits before high 32 bits,
it unmasks interrupt before writing high 32 bits if 'mask' bit in low
32 bits is cleared. Thus it may result in issues. This patch fixes
this issue by writing high 32 bits before low 32 bits.

Signed-off-by: Jiang, Yunhong <yunhong.jiang@intel.com>
Signed-off-by: Weidong Han <weidong.han@intel.com>
2010-08-09 16:32:45 +01:00
Keir Fraser ac4579a705 Merge 2010-08-06 18:35:02 +01:00
Keir Fraser 474f853ae9 Always call domain_update_node_affinity() with IRQs enabled.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2010-08-06 16:49:16 +01:00
Keir Fraser cb63a9960f xenoprofile: Disable IBS on x86_32
Extended PCI configuration space is not accessible on 32 bit
systems. This patch disables IBS feature on 32 bit to avoid
IBSCTL(0x1cc) accesses.

Signed-off-by: Wei Wang <wei.wang2@amd.com>
2010-08-06 15:42:49 +01:00
Keir Fraser e5013d1020 [IA64] xenoprof: fix ia64 build
21902:2c6ae364ed7b ("xenoprofile: Add IBS support") breaks ia64.
This patch fixes it.

Signed-off-by: KUWAMURA Shin'ya <kuwa@jp.fujitsu.com>
2010-08-06 15:41:59 +01:00
Keir Fraser e0a4694418 x86: Fix NMI injection to PV guests
Signed-off-by: Juergen Gross <juergen.gross@ts.fujitsu.com>
2010-08-05 14:41:14 +01:00
Stefano Stabellini c4ebe46529 PV console for HVM domains
Creates a shared memory ring buffer and event channel in HVM domains
for passing debug messages from PV drivers on HVM guests
The console is used by windows pv drivers to send debug data to xenconsoled

Signed-off-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-05 11:36:24 +01:00
Juergen Gross 058f27228c libxl: fix memory leak in libxl_name_to_poolid
Signed-off-by: Juergen Gross <juergen.gross@ts.fujitsu.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-05 11:33:13 +01:00
Keir Fraser 4cc1d7b7fa Merge 2010-08-04 19:24:17 +01:00
Ian Campbell 5c3092a8ca libxl: add a specific MAC address type.
Slightly less error prone and also more amenable to autogeneration.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-04 18:08:39 +01:00
Ian Campbell f9e5694b9c libxl: add a specific UUID type.
Slightly less error prone and also more amenable to autogeneration.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-04 18:08:08 +01:00
Keir Fraser 63ec149d40 numa: Small tweaks to domain_update_node_affinity() and its callers.
From: Andrew Jones <drjones@redhat.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2010-08-04 17:10:46 +01:00
Ian Campbell 9107a9f825 libxl: free values in XLU_ConfigSetting.
Fixes these valgrind reported leaks, found with "valgrind xl create -n ..."

==21170== 8 bytes in 3 blocks are definitely lost in loss record 1 of 3
==21170==    at 0x4022F0A: malloc (vg_replace_malloc.c:236)
==21170==    by 0x411B22F: strdup (in /lib/i686/cmov/libc-2.7.so)
==21170==    by 0x4030085: xlu__cfgl_strdup (libxlu_cfg.c:290)
==21170==    by 0x402F3C4: xlu__cfg_yylex (libxlu_cfg_l.l:37)
==21170==    by 0x402DD86: xlu__cfg_yyparse (libxlu_cfg_y.c:1338)
==21170==    by 0x40308AE: xlu_cfg_readdata (libxlu_cfg.c:85)
==21170==    by 0x804DBE4: parse_config_data (xl_cmdimpl.c:591)
==21170==    by 0x8056EE4: create_domain (xl_cmdimpl.c:1381)
==21170==    by 0x80582AE: main_create (xl_cmdimpl.c:3178)
==21170==    by 0x804B54B: main (xl.c:76)
==21170==
==21170== 57 bytes in 2 blocks are definitely lost in loss record 2 of 3
==21170==    at 0x4022F0A: malloc (vg_replace_malloc.c:236)
==21170==    by 0x402FE22: xlu__cfgl_dequote (libxlu_cfg.c:307)
==21170==    by 0x402F4B4: xlu__cfg_yylex (libxlu_cfg_l.l:52)
==21170==    by 0x402DD86: xlu__cfg_yyparse (libxlu_cfg_y.c:1338)
==21170==    by 0x40308AE: xlu_cfg_readdata (libxlu_cfg.c:85)
==21170==    by 0x804DBE4: parse_config_data (xl_cmdimpl.c:591)
==21170==    by 0x8056EE4: create_domain (xl_cmdimpl.c:1381)
==21170==    by 0x80582AE: main_create (xl_cmdimpl.c:3178)
==21170==    by 0x804B54B: main (xl.c:76)
==21170==
==21170== 111 bytes in 6 blocks are definitely lost in loss record 3 of 3
==21170==    at 0x4022F0A: malloc (vg_replace_malloc.c:236)
==21170==    by 0x402FE22: xlu__cfgl_dequote (libxlu_cfg.c:307)
==21170==    by 0x402F4ED: xlu__cfg_yylex (libxlu_cfg_l.l:56)
==21170==    by 0x402DD86: xlu__cfg_yyparse (libxlu_cfg_y.c:1338)
==21170==    by 0x40308AE: xlu_cfg_readdata (libxlu_cfg.c:85)
==21170==    by 0x804DBE4: parse_config_data (xl_cmdimpl.c:591)
==21170==    by 0x8056EE4: create_domain (xl_cmdimpl.c:1381)
==21170==    by 0x80582AE: main_create (xl_cmdimpl.c:3178)
==21170==    by 0x804B54B: main (xl.c:76)

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-04 16:00:13 +01:00
Stefano Stabellini cf2be3f6e2 merge 2010-08-04 15:58:10 +01:00
Stefano Stabellini 98398f1212 Backed out changeset 6a0dd2c29999 2010-08-04 15:57:41 +01:00
Keir Fraser 91c6005e01 numa: Attempt more efficient NUMA allocation in hypervisor by default.
1. Try to allocate from nodes containing CPUs which a guest can be
 scheduled on.
 2. Remember which node we allocated from last, and round-robin
 allocations among above-mentioned nodes.

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2010-08-04 15:35:28 +01:00
Gianni Tedesco 072186cf67 xl: detect pci-insert-failed dm status on pci-passthrough
NOTE: This functionality depends on a corresponding qemu-dm patch to work as
expected. Should be safe to use with an un-patched qemu-dm as before.

libxl_wait_for_device_model can only wait for one status value, re-work the
API so that a callback function can chose between several different possible
status values for qemu-dm and fix up all callers appropriately.

In the case of PCI device insert we succeed if qemu-dm reports
"pci-device-inserted" and error out instead of hanging forever if it fails
since qemu-dm now reports a status of "pci-insert-failed".

Signed-off-by: Gianni Tedesco <gianni.tedesco@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-04 14:43:46 +01:00
Gianni Tedesco d6353658b2 xl: implement pci attach to explicitly defined virtual PCI slot
Move to state-machine parser for PCI BDF's now that the number of possible
sscanf expressions is sufficiently large to make it worth it. Also implement
parsing of virtual PCI slot numbers.

Signed-off-by: Gianni Tedesco <gianni.tedesco@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-04 14:43:00 +01:00
Gianni Tedesco 5814abdc79 xl: prevent attempts to remove non-attached pci pass-through devices
Signed-off-by: Gianni Tedesco <gianni.tedesco@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-04 14:24:43 +01:00
Gianni Tedesco b854bf1435 xl: centralize BDF parsing in to libxl
Introduce a new libxl call libxl_device_pci_parse_bdf() and use it
consistently.

This patch also fixes an infinite loop bug in xl create. If there is a
parse-error on any pci config file entry then xl will attempt to skip it, but
since num_pcidevs is used to index the config list and is not incremented when
skipping, this caused an infinite loop. Solve that problem by introducing a new
loop counter variable.

Note that virtual PCI slots are not parsed by the new code. However this is
a step towards support for virtual slots and multi-function device assignment
since only one location in the code will need to be changed now.

Signed-off-by: Gianni Tedesco <gianni.tedesco@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-04 14:24:19 +01:00
Gianni Tedesco f74035d3b1 xl: PCI code cleanups
Get rid of scan_sys_pcidir() and open-code it inside
libxl_device_pci_list_assignable() since it's not a generically re-useable
function and we're not supporting pcistub driver now. Also use macros for sysfs
dirs in libxl_device_pci_reset

Signed-off-by: Gianni Tedesco <gianni.tedesco@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-04 14:23:29 +01:00
Keir Fraser 6044f6fa8d VMSI: This patch simulate the MSIx table read operation
Signed-off-by: Liu Yuan <yuan.b.liu@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>
2010-08-04 11:21:40 +01:00
Keir Fraser 8c19cb43cd x86 hvm: Fix MSR xentrace output.
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2010-08-04 11:21:08 +01:00
Keir Fraser c8acaf6985 Merge. 2010-08-03 21:03:09 +01:00
Ian Campbell 4fb44903e8 xl: fix memory leaks in xl create
Found using "valgrind xl create -n ..." and "valgrind xl create -e ..."

freeing config_data solves:
==18276== 944 bytes in 1 blocks are definitely lost in loss record 12 of 12
==18276==    at 0x4022F0A: malloc (vg_replace_malloc.c:236)
==18276==    by 0x404AEC1: libxl_read_file_contents (libxl_utils.c:258)
==18276==    by 0x8056865: create_domain (xl_cmdimpl.c:1314)
==18276==    by 0x8057E2D: main_create (xl_cmdimpl.c:3135)
==18276==    by 0x804B2FB: main (xl.c:76)
==18276==

Adding free_domain_config() solves the following (plus presumably others
which didn't trigger because I have no devices of that type).

d_config->disks:
==18276== 61 (32 direct, 29 indirect) bytes in 1 blocks are definitely lost in loss record 9 of 12
==18276==    at 0x4022F0A: malloc (vg_replace_malloc.c:236)
==18276==    by 0x4022F94: realloc (vg_replace_malloc.c:525)
==18276==    by 0x804E2D3: parse_config_data (xl_cmdimpl.c:715)
==18276==    by 0x8056A7C: create_domain (xl_cmdimpl.c:1347)
==18276==    by 0x8057E2D: main_create (xl_cmdimpl.c:3135)
==18276==    by 0x804B2FB: main (xl.c:76)

d_config->vifs:
==18276== 76 (48 direct, 28 indirect) bytes in 1 blocks are definitely lost in loss record 10 of 12
==18276==    at 0x4022F0A: malloc (vg_replace_malloc.c:236)
==18276==    by 0x4022F94: realloc (vg_replace_malloc.c:525)
==18276==    by 0x804E665: parse_config_data (xl_cmdimpl.c:779)
==18276==    by 0x8056A7C: create_domain (xl_cmdimpl.c:1347)
==18276==    by 0x8057E2D: main_create (xl_cmdimpl.c:3135)
==18276==    by 0x804B2FB: main (xl.c:76)

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-03 18:10:28 +01:00
Ian Campbell 8801ec1899 libxl: fix memory leak in libxl_name_to_domid
Found with "valgrind xl destroy ...":
==16272== 53,248 bytes in 1 blocks are definitely lost in loss record 6 of 6
==16272==    at 0x4022249: calloc (vg_replace_malloc.c:467)
==16272==    by 0x403FD4A: libxl_list_domain (libxl.c:490)
==16272==    by 0x404B901: libxl_name_to_domid (libxl_utils.c:65)
==16272==    by 0x804B4D2: domain_qualifier_to_domid (xl_cmdimpl.c:181)
==16272==    by 0x804B50F: find_domain (xl_cmdimpl.c:198)
==16272==    by 0x804D70C: destroy_domain (xl_cmdimpl.c:2104)
==16272==    by 0x8054E4C: main_destroy (xl_cmdimpl.c:2912)
==16272==    by 0x804B2FB: main (xl.c:76)

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-03 18:09:21 +01:00
Christoph Egger a881c151f2 libxl: typo in error message
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-03 17:41:03 +01:00
Gianni Tedesco 27d3eb3d99 libblktapctl: fix use-after-free bug
This has not caused crashes because generally use after free is OK
provided nothing else is going on. However the patch makes things
correct. It also allows us to use heap poisoning feature of valgrind on
tools linking to libblktapctl.

Signed-off-by: Gianni Tedesco <gianni.tedesco@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-03 17:34:08 +01:00
Mihir Nanavati 0e05a47ca4 Allow PCI passthrough to PV guest without IOMMU
Added a check which allows adding and removal of PCI devices for PV
guests in the absence of an IOMMU.

Signed-off-by: Mihir Nanavati <mihirn@cs.ubc.ca>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2010-08-03 17:14:06 +01:00
Keir Fraser 3ce7199378 gdbsx: Install into correct directory $(SBINDIR)
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
2010-08-02 16:58:50 +01:00
Keir Fraser 89de5a8f16 xenoprofile: Add IBS support
Add IBS support for AMD family 10h processors. The major
implementation is derived from latest Linux. Two hypercalls are added,
which is necessary for IBS feature detection and user mode parameter
read.

Signed-off-by: Wei Wang <wei.wang2@amd.com>
2010-08-02 11:00:56 +01:00
Ian Campbell a543f084db libxc: free thread specific hypercall buffer on xc_interface_close
The per-thread hypercall buffer is usually cleaned up on pthread_exit
by the destructor passed to pthread_key_create. However if the calling
application is not threaded then the destructor is never called.

This frees the data for the current thread only but that is OK since
any other threads will be cleaned up by the destructor.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
2010-07-30 16:20:48 +01:00
Zhigang Wang afc6c57b6d xl: remove duplicate -d option from create help message
Signed-off-by: Zhigang Wang <zhigang.x.wang@oracle.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
2010-07-30 15:22:39 +01:00
Ian Campbell 20e0490fc1 xl: destroy the logger before exit
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
2010-07-30 15:16:18 +01:00
Ian Campbell 634026bb57 xl: free the libxl context before exit
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
2010-07-30 15:15:54 +01:00
Ian Campbell d69dea6e51 xl: return(N) from individual commands to top level instead of exit(N)
This allows the top level command dispatcher to cleanup some of its
own allocations.

This is a fairly mechanical conversion of exit(FOO) into return FOO
for the top-level command functions (i.e. main_*). There are still
code paths which will exit() further down the call chains which will
require actual thought.

At first glance not all the return codes are which one would normally
expect for process exit codes (e.g. some are negative) but I didn't
attempt to address that here.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
2010-07-30 15:15:24 +01:00
Ian Jackson df860e4dc2 xl: support "xl list <domain>"
xm list takes an optional domain argument; make xl list do likewise.
This also gets rid of a small amount of code which was duplicated
between list_domains and list_domains_details.

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>
2010-07-30 15:12:56 +01:00
Ian Jackson 25ff216351 libxl: const-correctness for libxl_uuid2string
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>
2010-07-30 15:12:10 +01:00
Zhigang Wang d640f514cb libxl: fix fstat implicit declaration build error
Signed-off-by: Zhigang Wang <zhigang.x.wang@oracle.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
2010-07-30 14:28:39 +01:00
Keir Fraser d4a2c8df0a x86: unmask CPUID levels on Intel CPUs
If the CPUID limit bit in MSR_IA32_MISC_ENABLE is set, clear it to
make all CPUID information available. This is required for some
features to work, such as MWAIT in cpuidle, get cpu topology, XSAVE,
etc.

Signed-off-by: Wei Gang <gang.wei@intel.com>
2010-07-30 11:36:34 +01:00
Paul Durrant 116fe7eac5 tools/misc: xen-hvmcrash: New tool to attempt to crash HVM guests
This tool reads the CPU save records, overwrites RIP with a bogus
value, and then restores them. This is, of course, not guaranteed
to crash the guest (since the CPUs may not be executing in kernel
at the time) but it's good for breaking into some tight loops that
would be hard to debug otherwise.

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>
2010-07-29 18:58:19 +01:00
Gianni Tedesco 9becdd8ee9 libxl: Check whether a PCI device is assignable before assigning it do a domU
Implement a new libxl function libxl_device_pci_list_assignable. This is
used to implement the xl list-assignable-pci-devices command and part of
the implementation is used to make sure that PCI devices are not multiply
assigned to one or more domU's before doing the passthrough assignment.

The function libxl_device_pci_list changes to libxl_device_pci_list_assigned
due to a parameter change for consistency with pci_list_assignable.

Signed-off-by: Gianni Tedesco <gianni.tedesco@citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
2010-07-29 18:52:33 +01:00