Commit Graph
707 Commits
Author SHA1 Message Date
kaf24@firebug.cl.cam.ac.uk 4f08f939e2 Fix 64-bit build. xc_ptrace() is still broken for x86/64 however.
Signed-off-by: Keir Fraser <keir@xensource.com>
2006-05-14 20:13:14 +01:00
kaf24@firebug.cl.cam.ac.uk 6ca3eb3308 Fix an out-of-bounds memory access in xc_ptrace.c.
Currently, Xen always copies the entire 512 byte extended
FPU state (fxsave) even if only the "regular" FPU state was
requested.

This breaks since the memory buffer allocated in
linux-xen-low.c:regsets_fetch_inferior_registers() is only large
enough to hold the "plain" FPU registers.

Signed-Off-By: Simon Kagstrom <simon.kagstrom@bth.se>
2006-05-12 15:47:25 +01:00
kaf24@firebug.cl.cam.ac.uk 3e3fe8486d Re-enables ptrace for paravirtualized guests.
Changes:

- Added to_ma function which translates a physical address to a
  machine address for HVM guests and just returns the address for PV
  guests.

- Use to_ma() in map_domain_va_32, map_domain_va_pae and
  map_domain_va_64 to abstract away differences between HVM and PV
  guests.

- (From Keir, Ryan) Export CR0 to PV guests as well.

I've removed the address checks against 0 since the last version since
physical/machine address 0 should be valid. Invalid translations
should be catched in xc_map_foreign_domain.

Signed-Off-By: Simon Kagstrom <simon.kagstrom@bth.se>
2006-05-12 15:26:39 +01:00
cl349@firebug.cl.cam.ac.uk 15efc30a11 Add support to domain builders for loading kernels with physical addresses in the elf paddr and entry fields.
Add a new __xen_guest header field to distinguish between kernels with
the previous use of the paddr field and the new use.
Add a new __xen_guest header field to control the kernel entry point,
since the elf header entry field now points to a physical address.
This header field is also useful for supporting alternative entry
points in kernel images which run both on xen and native.
Also add a kernel config option to control whether the resulting kernel
should include compatibility code to run on Xen 3.0.2 or whether such
code such be left out, resulting in a kernel which will only run on
newer Xen versions.  Default to having compatibility enabled.
Kernels built with the new use of the elf header fields would otherwise
not work on Xen versions prior to this changeset.

Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
2006-05-11 17:30:50 +01:00
kaf24@firebug.cl.cam.ac.uk 118614a90c Fix a typo in xc_ptrace() and fix single-stepping when attached
to a live guest.
Signed-off-by: Keir Fraser <keir@xensource.com>
2006-05-11 11:33:07 +01:00
kaf24@firebug.cl.cam.ac.uk 2d0922d515 Move Linux-specific privcmd code into private libxc implementations.
Make header path for kernel's privcmd/evtchn headers generic.
Remove pointless xi_*() interface that was using private libxc
interfaces.

Signed-off-by: John Levon <john.levon@sun.com>
2006-05-02 15:12:06 +01:00
kaf24@firebug.cl.cam.ac.uk 013351bd7a Define new event-channel and physdev hypercalls with a more extensible
interface (the legacy hypercalls would break if subcommands with large
argument structures were added, as it would grow the size of the 
union of all argument structures).

Also, based on a patch from Kevin Tian, add a new physdev op to
signal EOI for a particular irq.

Signed-off-by: Keir Fraser <keir@xensource.com>
2006-04-30 09:16:15 +01:00
kaf24@firebug.cl.cam.ac.uk b46bbfc10c Recent GUEST_HANDLE related cset broke ia64 compilation.
Signed-off-by Kevin Tian <kevin.tian@intel.com>
2006-04-28 14:35:34 +01:00
kaf24@firebug.cl.cam.ac.uk 54b4ddf0d1 Rename {SG}ET_XEN_GUEST_HANDLE to {sg}et_Xen_guest_handle, as they
are function macros rather than define/declare macros.

Signed-off-by: Keir Fraser <keir@xensource.com>
2006-04-28 09:40:07 +01:00
kaf24@firebug.cl.cam.ac.uk d6f69f0e01 Fix memory_op hypercall mlock/munlock wrapping after the
GET/SET_XEN_GUEST_HANDLE patch.

Signed-off-by: Keir Fraser <keir@xensource.com>
2006-04-27 19:19:59 +01:00
kaf24@firebug.cl.cam.ac.uk 704e9ade0f Wrap all GUEST_HANDLEs in structures, and define SET/GET macros to access them
in Linux and libxc.

Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
2006-04-27 13:58:50 +01:00
awilliam@xenbuild.aw aaf9402dab merge with xen-unstable.hg 2006-04-25 23:35:55 -06:00
kaf24@firebug.cl.cam.ac.uk 44d4831475 Fix swapped calloc() arguments.
Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
2006-04-19 18:39:36 +01:00
awilliam@xenbuild.aw dc1c0a8170 merge with xen-unstable.hg 2006-04-18 09:35:40 -06:00
kaf24@firebug.cl.cam.ac.uk c702fb4c9d Fix whitespace in libxc. Tabs are manually fixed.
Trailing whitespace removed with:
 perl -p -i -e 's/\s+$/\n/g' tools/libxc/*.[ch]

Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
2006-04-15 10:07:31 +01:00
awilliam@xenbuild.aw b4fa7c40e9 merge with xen-unstable.hg 2006-04-11 18:54:18 -06:00
awilliam@xenbuild.aw 80dbec3f0e [IA64] get_pfn_list workaround
As we know, the mechanism for hypervisor to pass parameter through pointer
is not complete. Hypervisor use copy_from/to_user functions to copy parameter
to hypervisor and copy result to user, if there is a tlb miss happening and 
hypervisor can't handled this. This hypercall fails, there is no mechanism to 
handle this failure, that may cause domain crash. Get_pfn_list hypercall copy
large data from hypervisor to user, it is easy to trigger this issue when 
creating VTI-domain.

If fails, Get_pfn_list returns the number of pfn entries, and this patch will 
Dummy access parameter memory block to cause this tlb mapping tracked by 
Hypervisor, then continue to do get_pfn_list.

It's a workaround before we design a new mechanism of passing parameter thr
pointer.

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
2006-04-10 15:13:42 -06:00
kaf24@firebug.cl.cam.ac.uk b5fa90ac8e build: Clean up use of .PHONY
* Move .PHONY directives next to targets,
  this makes them a lot harder to miss
* Add missing .PHONY directives
* Remove nonexistent .PHONY directives
* Hopefully I didn'T miss anything...

Signed-Off-By: Horms <horms@verge.net.au>
2006-04-10 17:02:49 +01:00
smh22@firebug.cl.cam.ac.uk 6ca8eebc9b Additional sanity / compatability checks during guest build.
Signed-off-by: Steven Hand <steven@xensource.com>
2006-04-07 15:58:00 +01:00
smh22@firebug.cl.cam.ac.uk 5e1e26bd96 Make root page table sanity check on restore more generic.
Signed-off-by: Steven Hand <steven@xensource.com>
2006-04-06 17:34:54 +01:00
kaf24@firebug.cl.cam.ac.uk 66edd49a38 Add code to make handling domain poweroff/reboot symmetrical between
paravirtualized and fully virtualized.  This approach uses the new
sched_op to handle other domains than the current domain.  The new
code, SCHEDOP_remote_shutdown, is very much like SCHEDOP_shutdown, but
is called with the id of the domain which is to be shut down. This
allows fully virtualized shutdown and para-virtualized shutdown to be
identical from that point forward.

A paravirtualized domain uses sched_op to shut down and set the reason
code. This will send a VIRQ_DOM_EXC, which can be handled in dom0 by
control software.  In some ways, this resembles SIGCHILD/waitpid, and
is a reasonable model.

The fully virtualized case has qemu invoke xm directly. This is a
different path than paravirtualized. It also removes decision and
policy making choices from the rest of the control software and places
it within qemu. When any dom0 logic eventually gets a VIRQ_DOM_EXC,
the information about the domain is gone having been destroyed by xm.

A libxenctrl wrapper, xc_shutdown_domain has been added and qemu now
calls it.

As a freebie, #if 0 some very verbose logging code in qemu.  Totally
unrelated, but as long as I was there...

Signed-off-by: Ben Thomas <ben@virtualiron.com>
2006-04-06 15:24:00 +01:00
awilliam@xenbuild.aw f7e98914da [IA64] Add memory operations for xen/ia64
This patch removes ugly hack upon memory operation and thus
allow inc/decrease_reservation op available for xen/ia64 now.

As a result:
  * Now we conform to common sequence where all domain pages
    are allocated together by increase_reservation before
    image builder
  * physmap table is now built at point of arch_set_info_guest
  * DOM0_GETMEMLIST can only query without allocation now
  
After this patch, some long-existing hacks due to mismatched
memory interface are cleaned this time. Also this is a base
step toward introducing balloon feature into xen/ia64.
    
Signed-off-by Kevin Tian <kevin.tian@intel.com>
2006-04-04 09:43:41 -06:00
kaf24@firebug.cl.cam.ac.uk 3d95d58003 Enable the setting and trapping of breakpoints for hvm guest.
Catch Ctrl-C for gdbserver and let gdb break from continue command.

Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com>
2006-03-31 10:07:55 +01:00
kaf24@firebug.cl.cam.ac.uk ce0dc718f2 More fixes to gdbserver for HVM guest debugging. Also fix
writing back of register state for HVM guests.

From: Nitin A Kamble <nitin.a.kamble@intel.com>

Signed-off-by: Keir Fraser <keir@xensource.com>
2006-03-30 14:37:22 +01:00
kaf24@firebug.cl.cam.ac.uk 3ad72f8da8 Fix 64-bit HVM guest debug via gdbserver:
1. gdb_regs for 64bit, and macros to transfer regisers between ptrace
    registers to gdb registers
 2. xc_ptrace code building for 64bit
 3. Implementation of new map_domain_va for 64bit
 4. gdbserver-xen build configuration fixes for 64bit

From: Nitin Kamble
Signed-off-by: Keir Fraser <keir@xensource.com>
2006-03-26 11:50:39 +01:00
kaf24@firebug.cl.cam.ac.uk 2acf021310 Remove unnecessary zlib includes.
Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
2006-03-23 18:57:21 +01:00
kaf24@firebug.cl.cam.ac.uk 0b35103d54 The current ptrace code is traversing the page table structures to
guest guest physical address, even when the guest paging is disabled.
The gdbserver-xen tries to access guest pdes & ptes to map memory of
hvm guest being debugged; and it gets a seg-fault because guest has not
setup it's paging yet. The attached patch adds guest paging state check,
so that the map_domain_va() can get the correct guest physical address
from guest va.

Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
2006-03-21 11:29:17 +01:00
kaf24@firebug.cl.cam.ac.uk 4d32eea226 Fix VMX guest can not be created on PAE xen with more than 4G RAM.
Also change v_end type from unsigned long to unsigned long long, for we
will have PAE VMX guest with more than 4G memory on PAE xen.

Signed-off-by: Xin Li <xin.b.li@intel.com>
2006-03-19 18:55:46 +01:00
awilliam@xenbuild.aw b6144da6bb merge 2006-03-17 15:37:28 -07:00
kaf24@firebug.cl.cam.ac.uk 13134a9fdd Fix the gzip size extraction in xc_inflate_buffer(). Extract
bytes as unsigned quantities.

Signed-off-by: David Lively <dlively@virtualiron.com>
2006-03-17 11:44:55 +01:00
awilliam@xenbuild.aw 44784246fc merge 2006-03-14 13:50:35 -07:00
kaf24@firebug.cl.cam.ac.uk 8c491b9a9c Trivial ia64 tools build fix.
Signed-off-by: Alex Williamson <alex.williamson@hp.com>
2006-03-14 15:44:04 +01:00
kaf24@firebug.cl.cam.ac.uk 0c5dfaeeb4 Fix memory leak in xc_domain_dumpcore and simplify copy_from_domain_page.
Signed-off-by: Keir Fraser <keir@xensource.com>
2006-03-14 15:33:57 +01:00
kaf24@firebug.cl.cam.ac.uk 596876059c Fix a typo in a comment -- vmxloader is now hvmloader.
Signed-off-by: Andrew D. Ball <aball@us.ibm.com>
2006-03-14 15:26:54 +01:00
kaf24@firebug.cl.cam.ac.uk 8a68ed87f8 The existing xc_domain_dumpcore is very specific to disk/file based
output.  Refactor the code slightly to allow more user-specified
control.  This is done by adding a parallel
xc_domain_dumpcore_via_callback, which allows the specification of a
callback routine and an opaque argument block.  The existing dumpcore
routine is modified to use the callback for all write operations and
to turn the single seek into a small write (it's for page alignment).

Signed-off-by: Ben Thomas <bthomas@virtualiron.com>
2006-03-13 11:47:56 +01:00
awilliam@xenbuild.aw 577d5c71e4 [IA64] fix print out in ia64 setup_guest()
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
2006-03-10 09:19:54 -07:00
kaf24@firebug.cl.cam.ac.uk 27d7304ed7 Replace memory_op subcommands reserved_phys_area and map_shared_info
with new subcommand add_to_physmap.

This changes the domain0 tools interface, but only when building
shadow-translate-mode guests.

Signed-off-by: Keir Fraser <keir@xensource.com>
2006-03-10 16:00:36 +01:00
kaf24@firebug.cl.cam.ac.uk e7ccd01faf Fix a few small issues in xc_domain_dumpcore:
xc_domain_getinfo returns information about a domain, but not
necessarily the one you asked about.  Add check for this.

max_vcpu_id in xc_domain_getinfo is really an ID, not a count, so
make the loop include the last VCPU

Signed-off-by: Ben Thomas <ben@virtualiron.com>
2006-03-09 23:07:27 +01:00
kaf24@firebug.cl.cam.ac.uk d27fbb0061 Move 'debug' build option into the outermost Config.mk file.
Signed-off-by: Keir Fraser <keir@xensource.com>
2006-03-09 22:31:45 +01:00
kaf24@firebug.cl.cam.ac.uk 326450f67e Clean up the usage of CFLAGS. This is nice for packagers, who would
like to control the base compilation flags from a central place.

Signed-off-by: Charles Coffing <ccoffing@novell.com>
2006-03-09 21:17:45 +01:00
cl349@firebug.cl.cam.ac.uk e2b8c75165 Change the location of the shared_info page for auto_translated_physmap guests.
Instead of putting the page outside of the guests pseudo-physical address
space, we put it next to the other pages filled by the domain builder,
such that the page is already mapped in the initial pagetables and/or a
lowmem-type memory mapping.

Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
2006-03-09 16:24:57 +00:00
kaf24@firebug.cl.cam.ac.uk f736587680 Make xc_linux_build() load the initrd page-by-page rather
than all in one go, to conserve memory. This always has been
the behaviour, but it was changed by a changeset earlier today.

Signed-off-by: Keir Fraser <keir@xensource.com>
2006-03-09 15:16:35 +01:00
kaf24@firebug.cl.cam.ac.uk d2017c7b16 Clean up internal libxc functions to take 'const char *'
parameters where possible, to avoid unnecessary casts.

Signed-off-by: Keir Fraser <keir@xensource.com>
2006-03-09 14:35:36 +01:00
kaf24@firebug.cl.cam.ac.uk 2be317cd91 Add a parallel set of APIs to the domain builders to allow images and
ramdisks to be passed via buffer, rather than via file.  This allows
usage of the underlying domain building routines in "file-challenged"
enviroments.

Specifically, xc_linux_build_mem is the buffer oriented version of the
file-oriented xc_linux_build.  Likewise, xc_hvm_build_mem is the
buffer oriented analog of the file based xc_hvm_build.

Signed-off-by: Ben Thomas (bthomas@virtualiron.com)
2006-03-09 13:00:38 +01:00
kaf24@firebug.cl.cam.ac.uk 6a883b0d6a Fix order-of-evaluation issue in xc_domain_dumpcore. The intent is
to move blocks of memory 4096 pages at a time, and a buffer is
allocated for this.  Unfortunately, the #define is without
parentheses and %/* are the same order and evaluated left to right.
Result: very big buffer being used 4 pages at a time.

Signed-off-by: Ben Thomas (bthomas@virtualiron.com)
2006-03-09 11:16:46 +01:00
kaf24@firebug.cl.cam.ac.uk 1d9f9d55bd Simplify ptrace_names array declaration.
Signed-off-by: Keir Fraser <keir@xensource.com>
2006-03-06 19:26:30 +01:00
kaf24@firebug.cl.cam.ac.uk d3174e2e2e Fix build with some gcc versions.
Signed-off-by: Keir Fraser <keir@xensource.com>
2006-03-06 18:05:09 +01:00
kaf24@firebug.cl.cam.ac.uk 9603c69e65 libxc: Verify Magic number when reading dump
The xen core files record a magic number, 
but when they are loaded it isn't checked.
This patch resolves this.

Signed-Off-By: Horms <horms@verge.net.au>
2006-03-06 15:04:18 +01:00
kaf24@firebug.cl.cam.ac.uk e265d47bd6 Consolidate xc_ptrace and xc_ptrace_core
* xc_ptrace
  - Merge xc_ptrace_core into xc_ptrace
  - ATTACH now reads the data argument. If non-zero then
    a corefile is being debuged. Otherwise a thread has
    been attached to. This allows xc_waitdomain_core() or
    xc_waitdomain() to be called as appropriate in
    subsequent xc_ptrace() calls.
* xc_waitdomain
  - Rename xc_waitdomain (xc_ptrace.c version) __xc_waitdomain
  - Rename xc_waitdomain (xc_ptrace_core.c version) xc_waitdomain_core
  - Create xc_waitdomain (in xc_ptrace.c), a wrapper for __xc_waitdomain
    and xc_waitdomain_core.
  Consolidation seemed difficult but ctxt needs to be
  passed into xc_waitdomain_core or made global.
  Alternatively, xc_waitdomain_core could be moved into xc_ptrace.c,
  but this seems messy.
* map_domain_va
  - Rename map_domain_va (xc_ptrace_core.c version) map_domain_va_core
  - Have it accept ctxt, like xc_waitdomain_core
* myptrace and myxcwait (linux-xen-low.c)
  Removed, call the now generic xc_ptrace() and xc_waitdomain() instead

When calling xc_ptrace ATTACH, if a corefile is in use, a fd will
be passed, otherwise a pid. The fd part is important, as this
is saved internally in xc_ptrace_core.c, and passed to xc_waitdomain_core()
as neccessary. Pereviously xc_waitdomain_core() received a pid and
thus could not open the corefile.

Signed-Off-By: Horms <horms@verge.net.au>
2006-03-06 12:06:55 +01:00
kaf24@firebug.cl.cam.ac.uk d531f7eb39 libxc: xc_ptrace cleanups
General Cleanups
* Use { after if consistently in xc_ptrace.c and xc_ptrace_core.c
  (But not in xc_ptrace_core() which should be removed shortly)
* Remove duplicate code and centralise around xc_ptrace.h
* Avoid ifing values covered by case in xc_ptrace()
  - PTRACE_GETREGS, PTRACE_GETFPREGS and PTRACE_GETFPXREGS are grouped into
    a single case, and then with the exception of a call to FETCH_REGS(),
    different code is executed based on ifing the values covered by the
    case.  The PTRACE_GETFPREGS and PTRACE_GETFPXREGS code is actually a
    duplicate.  This patch breaks the code out to two different cases.

Error Handling
* Eliminate FETCH_REGS macro as it forces several functions
  to have an otherwise uneeded error_out label, mittigating
  any code savins.
* Rework error handling in xc_ptrace().
  - Remove FETCH_REGS as above
  - Make sure that all dom0 errors are caught
  - Make sure errno is always set on error
* Eliminate gotos in xc_ptrace_core.c that do nothing but return

Signed-Off-By: Horms <horms@verge.net.au>
2006-03-06 12:05:44 +01:00