Commit Graph
19699 Commits
Author SHA1 Message Date
Keir Fraser 44d374adc0 xend: pci: improve the assignability checking
1) fix some small typos in util/pci.py;
2) find_all_the_multi_functions(): BDFs of a multi-function PCIe
device could be different in all the 3 fields (bus, device, function),
so we need self.find_parent() and list all t
he BDFs below the parent;
3) to assign a device of the must-be-co-assigned devices, we require
all the related devices should be owned by pciback;
4) detect and disallow duplicate pci string specified in guest config
file due to carelessness.

Signed-off-by: Dexuan Cui <dexuan.cui@intel.com>
2009-06-02 11:50:16 +01:00
Keir Fraser 3b35911d70 Enable pci mmcfg and ATS for x86_64
This patch enables PCI MMCONFIG in xen and turns on hooks for ATS.

Signed-off-by: Allen Kay <allen.m.kay@intel.com>
2009-06-02 11:49:34 +01:00
Keir Fraser d2c78b31b5 tmem: shared ephemeral (SE) pool (clustering) fixes
Tmem can share clean page cache pages for Linux domains
in a virtual cluster (currently only the ocfs2 filesystem
has a patch on the Linux side).  So when one domain
"puts" (evicts) a page, any domain in the cluster can
"get" it, thus saving disk reads.  This functionality
is already present; these are only bug fixes.

- fix bugs when an SE pool is destroyed
- fixes in parsing tool for xm tmem-list output for SE pools
- incorrect locking in one case for destroying an SE pool
- clearer verbosity for transfer when an SE pool is destroyed
- minor cleanup: merge routines that are mostly duplicate

Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com>
2009-06-01 18:37:27 +01:00
Keir Fraser cf57498e90 libxc: Implement stub xc_gnttab_map_table() for non-linux.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-06-01 15:52:19 +01:00
Keir Fraser bdcdbb25b4 Revert 19658:28a197617286 "Fix up the synchronisation around grant
table map track handles".

There is no race since the hypercall takes the
domain-lock. Furthermore removing locking from get_maptrack_handle()
races gnttab_setup_table().

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-06-01 14:55:32 +01:00
Keir Fraser 16ae66bb59 minios: Remove Linux attribution for mktime() as it's not true since c/s 19638.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-06-01 14:39:25 +01:00
Keir Fraser ddc7e2659f Update QEMU_TAG: 5beedb58147cbb04e206a71429198b6316217cfc 2009-06-01 14:18:44 +01:00
Keir Fraser d06a984487 libxc: Exchange a page for PV guest
This patch support exchange a page for a suspended PV guest from user
space.

The basic idea to offline a page is:
1) mark a page offline pending
2) If the page is owned by a HVM domain, user have to live migrate it.
    In future, with stub-domain support, we can also exchange the page
    without migration.
3) If the page is owned by a PV domain, we will try to exchange the
offline pending page to a new one and free the old page.

This patch achieves item 3.

The method to exchange the offline pending page for PV domain is:

1) Suspend the guest.
2) If the page is being granted out, return with offline pending.
3) Get a copy for the content
4) Scan all page table page to see if any reference to the offending
page, if yes, make the entry to be non-present to reduce the reference
count.
5) After update all page tables, user space tools will try to exchange
the old page. If the new mfn has no reference anymore (i.e.
count_info & count_mask =3D 1), the exchange will allocate a new page,
update the m2p and return success, otherwise it will return fail.
6) If step 5 is success, user space tools will update the content of
the new page  change the p2m table, and change all entries scaned in
step 4 to point to new entry.
if step failed, it will try to undo step 4 to revert page table.
7) Resume the guest.

Please refer to thread in
http://www.mailinglistarchive.com/xen-devel@lists.xensource.com/msg63084.html
for more information.

Signed-off-by: Jiang, Yunhong <yunhong.jiang@intel.com>
2009-06-01 14:15:48 +01:00
Keir Fraser 1472f8177f libxc: Export xc_core_arch_map_p2m_writable()
This patch firstly change the xc_core_arch_map_p2m() to map the p2m to
be writable, then it export this function.
One notice for this patch is, caller should make sure change the p2m
in flight will not cause trouble.

Signed-off-by: Jiang, Yunhong <yunhong.jiang@intel.com>
2009-06-01 14:13:53 +01:00
Keir Fraser 8b9c6bce94 libxc: Add a function to map a domain's grant table.
Signed-off-by: Jiang, Yunhong <yunhong.jiang@intel.com>
2009-06-01 14:13:20 +01:00
Keir Fraser 602097e84b libxc: export xc_map_m2p() so that it can be called outside.
Signed-off-by: Jiang, Yunhong <yunhong.jiang@intel.com>
2009-06-01 14:12:53 +01:00
Keir Fraser 79cda3bac9 Export page offline hypercalls to user space tools.
Signed-off-by: Jiang, Yunhong <yunhong.jiang@intel.com>
2009-06-01 14:08:58 +01:00
Keir Fraser f475395032 tmem: fix corner case crash on forcible domain destruction
When a tmem-enabled domain is destroyed, if the domain was
using a persistent pool, the domain destruction process
to scrubs page races tmem's attempts to gracefully dismantle
data structures.  Move tmem_destroy earlier in the domain
destruction process.

Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-06-01 14:07:46 +01:00
Keir Fraser 630ec346ad blktap: Revert parts of c/s 19349.
Caused blktapctrl pipes to be created with uninitialised variable in name.

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-06-01 14:02:26 +01:00
Keir Fraser 48a793e4b0 xend: Fix HVM domain restore (undefined HVM_ImageHandler.superpages).
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-30 13:25:32 +01:00
Keir Fraser c6f4657fa8 Revert 19657:9ff5c79b0ceb
Breaks automated localhost migration tests:
    for xx in x:
    TypeError: iteration over non-sequence

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-30 13:21:08 +01:00
Keir Fraser e426310aff passthrough: Fix test_and_clear_bit() caller to clear bitmap, not bitmap pointer
Latent bug triggered by '19650: eliminate hard-coded NR_IRQS'

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-30 10:24:21 +01:00
Keir Fraser 69cf305aa7 xend: Add serialise_pci_opts() and split_pci_opts()
This centralises some code.

Signed-off-by: Simon Horman <horms@verge.net.au>
2009-05-29 09:33:06 +01:00
Keir Fraser 9995f10739 xend: Fix check for request to detach non-existent device
This fixes the check for a request to detatch a non-existent device
in pci_device_configure. The previous check was bogus because the
format of AUTO_PHP_SLOT_STR is not the same as that of x['vslot'].

However, it works in a slightly non-obvious way, checking that vslot
hasn't been altered from its initial value AUTO_PHP_SLOT_STR. To
make this shceme a little clearer, use an empty string as the inital
value.

Formting issues asside, neither AUTO_PHP_SLOT_STR nor the empty
string are valid values for x['vslot']. In the event
of invalid data (indicating a bug), it should be caught by
self.hvm_destroyPCIDevice.

Signed-off-by: Simon Horman <horms@verge.net.au>
2009-05-29 09:32:40 +01:00
Keir Fraser 9c0aebdd02 xend: hot-plug PCI devices at boot-time
Currently there are two interfaces to pass-through PCI devices:
1. A method driven through per-device xenstore entries that is used at
boot-time
2. An event-based method used for hot-plug.

This seems somewhat redundant and makes extending the code cumbersome
and prone to error - often the change needs to be made twice, in
two different ways.

This patch unifies PCI pass-through by using the existing event-based
method at boot-time.

Signed-off-by: Simon Horman <horms@verge.net.au>
2009-05-29 09:32:02 +01:00
Keir Fraser 1e03bc6f02 xend: use popen2 module instead of subprocess for Python 2.3
On Python 2.3, xend cannot started:
    File
    "usr/lib/python2.3/site-packages/xen/xend/server/BlktapController.=
py", line 3, in ?
      import subprocess
  ImportError: No module named subprocess

This patch uses `popen2' instead of `subprocess' for Python 2.3.

Signed-off-by: KUWAMURA Shin'ya <kuwa@jp.fujitsu.com>
2009-05-29 09:29:58 +01:00
Keir Fraser a480caa3c5 blktap2: fix a compilation error (missing PATH_MAX)
Signed-off-by: KUWAMURA Shin'ya <kuwa@jp.fujitsu.com>
2009-05-29 09:28:15 +01:00
Keir Fraser 6b6ac58efc xm: Unify the output of pci-list
This is another attempt at having pci-list produce consistent output.
Without this change there differences in the output of both vslots
and domain occur for domains that have never been started and domains
that have been started.

In order to address this I have taken the approach of
using integers where possible and explicitly formating them,
rather than relying on string representations that are present in
data structures.

I have also re-used the common part of the format, to try
and mitigate. the possibility of future inconsistencies there.

This patch also:
* Removes trailing whitespace
* Removes unnecessary brackets and whitespace from print invocations
* Prints the header outside of the loop to avoid having
  to maintain a state variable

Signed-off-by: Simon Horman <horms@verge.net.au>
2009-05-29 09:27:31 +01:00
Keir Fraser c29ca7a0f2 Free pirq_array/pirq_to_evtchn in complete_domain_destroy().
Also rejig code slightly in domain_create().

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-29 09:26:49 +01:00
Keir Fraser 0e4debb7fa Revert 19661:326b24bfa9f9 "Free pirq_to_evtchn/pirq_mask..."
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-29 09:22:50 +01:00
Keir Fraser 903b93211f [VTD] laying the ground work for ATS
These changes lay the ground work for ATS enabling in Xen.  It will be
followed by patch which enables PCI MMCFG which is needed for actual
enabling of ATS functionality.

Signed-off-by: Allen Kay <allen.m.kay@intel.com>
2009-05-29 09:19:30 +01:00
Keir Fraser f09d7f0b59 Serialize iptables calls in hotplug scripts
iptables cannot correctly handle situations when more than one command
is trying to set netfilter rules. In such situations, iptables may fail
with EAGAIN, which results in iptables: Unknown error
18446744073709551615.

Such situation can easily happen when multiple network devices are
configured for a domain as vif hotplug scripts are called in parallel
for all of the network devices.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
2009-05-28 11:07:19 +01:00
Keir Fraser e1ae548d42 blktap2: Fix build with gcc3. Cannot handle defining a function which
is passed a struct-by-value which is not yet fully defined. Thus
defining a request struct which contains a pointer to a function which
is passed-by-value an instance of that request structure is
impossible. We work around it by defining the function poiinter as
void* and then casting in one place.

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-28 11:01:00 +01:00
Keir Fraser ac3fc35d91 x86: Fix flush_area_mask() and on_selected_cpus() to not race updates
of the supplied cpumask (which is now passed by reference).

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
2009-05-28 10:19:15 +01:00
Keir Fraser 44c1edcdb5 xend: Update info['platform']['pci']
This patch updates info['platform']['pci'] for PCI devices
assignment to domains.

When a domain is started, xend confirms by using xc.test_assign_device
whether PCI devices can be assigned to the domain.  For the
confirmation, info['platform']['pci'] must be an appropriate value.
However, info['platform']['pci'] may be not appropriate.  Because
info['platform']['pci'] isn't almost always updated even if the PCI
device configuration of the domain was changed by using xm
pci-attach/detach.  This patch updates info['platform']['pci'] to the
appropriate value when domains are started.

Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
2009-05-28 10:06:01 +01:00
Keir Fraser 60dadd604d blktap2: fix tapdisk-channel.c
This patch fixes the following error.
cc1: warnings being treated as errors
In file included from usr/include/sys/resource.h:25,
                 from tapdisk-daemon.c:559:
usr/include/bits/resource.h: In function 'main':
usr/include/bits/resource.h:33: warning: ISO C90 forbids mixed
declarations and code

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
2009-05-28 10:03:29 +01:00
Keir Fraser 3026986b0f blktap2: fix makefile of blktap2
- clean up to use SUBDIRS-y
- With parallel make, libvhd might not be created before
  link. guarantee it.
- use LDFLAGS for link which is set by upper level makefiles.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
2009-05-28 10:02:57 +01:00
Keir Fraser b3bde375d3 udev-script: udev rule for pci_iomul device.
This patch adds udev rule for pci_iomul device to
create /dev/xen/pci_iomul.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
2009-05-28 10:00:55 +01:00
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