Commit Graph
8463 Commits
Author SHA1 Message Date
kaf24@firebug.cl.cam.ac.uk cfa0fac2c2 Provide an option to disable ACPI from the VMX config file.
By default ACPI is disabled.

Signed-off-by: Yu Ke <ke.yu@intel.com>
Signed-off-by: Jun Nakajima <jun.nakajima@intel.com>
Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
2006-01-01 11:29:17 +01:00
kaf24@firebug.cl.cam.ac.uk 24b0fec3cf Clean up 'q' debug key output.
Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-31 14:33:00 +01:00
kaf24@firebug.cl.cam.ac.uk 7e127cd35f Allow non-privileged domains restricted access to
I/O memory and physical interrupts, under control
of domain0. Capabilities are maintained as rangesets
in Xen.

Signed-off-by: Ryan Wilson <hap9@epoch.ncsc.mil>
Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-31 14:15:22 +01:00
kaf24@firebug.cl.cam.ac.uk a8f5fb8508 Store admin-specified ioport capabilities in a rangeset
rather than a bitmap. arch_do_createdomain() can now
fail and the caller will clean up.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-31 13:11:47 +01:00
kaf24@firebug.cl.cam.ac.uk 9be588cacb Fix a missing break in ioemu command-line parsing switch
statement.

Signed-off-by: Xin Li <xin.b.li@intel.com>
2005-12-30 17:12:40 +01:00
kaf24@firebug.cl.cam.ac.uk 96905f367b Fix rdmsrl() for x86_32 -- high 32 bits must be cast to
u64 before shifting left.

Signed-off-by: Avi Kivity <avi@qumranet.com>
2005-12-30 17:11:05 +01:00
kaf24@firebug.cl.cam.ac.uk 0129e126c4 Avoid xen crash if there is no VMX support. If a platform
doesn't support VMX, creating VMX domain will crash xen
HV.

Signed-off-by: Xin Li <xin.b.li@intel.com>
2005-12-30 17:07:34 +01:00
kaf24@firebug.cl.cam.ac.uk e9ac3bbcca Move initial stack-pointer adjustment into assembly
bootstrap code. Avoids need for indirection thru
reset_stack_and_jump() in C code (which was incorrect for
secondary CPUs since nothing was pushed on the stack on
that initial call, hence the masking operation had no
effect and we ended up running on a bogus stack pointer).

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-30 17:02:30 +01:00
kaf24@firebug.cl.cam.ac.uk aafd5e14e1 Virtual TPM persistent states contain VTPM secrets, which are encrypted
using symmetric keys and stored on disk along with those symmetric keys.
The attached patch uses the TPM to encrypt the symmetric keys and other
global secrets before saving them to disk.

Signed-off-by: Vinnie Scarlata <vincent.r.scarlata@intel.com>
2005-12-30 11:31:12 +01:00
kaf24@firebug.cl.cam.ac.uk fc41b5c1fd Extend the range abstraction by adding an internal
insert_range() helper function. Pretty printer uses
the internal abstractions rather than accessing the
linked list directly.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-29 18:39:50 +01:00
kaf24@firebug.cl.cam.ac.uk 9e1d90563d Add a little more internal abstraction to the rangeset
library, avoiding direct interaction with the linked-list
structure.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-29 18:16:01 +01:00
kaf24@firebug.cl.cam.ac.uk ff6d5dac81 Reset the stack pointer on every cpu early during bootstrap.
Ensures we do not overlap with the cpu_info structure.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-29 17:53:22 +01:00
kaf24@firebug.cl.cam.ac.uk 9647c68ca2 Initialise grant tables via core_initcall so that it happens
suitably early during the boot process.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-29 17:37:08 +01:00
kaf24@firebug.cl.cam.ac.uk b33ac9e433 Various fixes to Xen stack management. Ensure the cpu0_stack
is always sufficiently aligned (requires some linker script
tricks). Small fixes to show_trace() and ensure that Xen
stack pointers are always below the 'struct cpu_info' region.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-29 16:59:12 +01:00
kaf24@firebug.cl.cam.ac.uk 484a058c48 Add auto-destructing per-domain rangeset data structure,
for representing sets of contiguous numeric ranges. This
will be used for representing permissions lists (e.g.,
io memory, io ports, irqs).

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-29 15:47:23 +01:00
kaf24@firebug.cl.cam.ac.uk d17f04f5f8 Fix iobmp_mask setup when permitting a domU access to
I/O port ranges.

Signed-off-by: Ryan Wilson <hap9@epoch.ncsc.mil>
2005-12-28 16:23:42 +01:00
kaf24@firebug.cl.cam.ac.uk 8be86755a9 Fix a leak occurring at netif_map(). The problem raised after allocating
both {rx,tx}_comms_area, and one (and just one) of them failed. As we
were
doing a single test for both, returning would leave one of them
allocated.

Signed-off-by: Glauber de Oliveira Costa <glommer@br.ibm.com>
2005-12-28 15:17:04 +01:00
kaf24@firebug.cl.cam.ac.uk 5fb7e24473 Set up X11 authorization when a VMX domain uses SDL.
Signed-off-by: Hiromichi Itou <ito@begi.net>
2005-12-28 15:14:23 +01:00
kaf24@firebug.cl.cam.ac.uk ada4e79b32 Reorganizes network frontend device unregister and removal, so that
occur in the right order and succeed.

Now on Closing state we:
- stop queue
- unbind irq
- unregister the device

On removal:
- end foreign access to TX and RX pages (we cannot do this before)
- free_netdev, doing the last stage of destroying an allocated device

Makes xm-test network "03_attach_detach_multiple_pos" pass:
http://xmtest.dague.org/cgi-bin/display?view=single&testid=1068

Signed-off-by: Murillo F. Bernardes <mfb@br.ibm.com>
2005-12-28 15:07:43 +01:00
kaf24@firebug.cl.cam.ac.uk 914dc0db80 Missing file from previous changeset. 2005-12-28 15:07:16 +01:00
kaf24@firebug.cl.cam.ac.uk aabfe47319 Fix uncleaned vif backend devices when frontend does not finish
initialization properly.

Signed-off-by: Murillo F. Bernardes <mfb@br.ibm.com>
2005-12-28 14:55:55 +01:00
kaf24@firebug.cl.cam.ac.uk 2d6e715911 If netfront fails to allocate a receive skbuff, push all pending
skbuffs out onto the shared ring. If there are no skbuffs to push,
schedule a timer to try again later. This will avoid interface
lockups in low-memory conditions.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-28 12:29:15 +01:00
vhanquez@kneesa.uk.xensource.com 9ab2587f30 Prevent vbd frontend from oopsing if the underlying device doesn't exist.
Signed-off-by: Horms <horms@verge.net.au>
Signed-off-by: Vincent Hanquez <vincent@xensource.com>
2005-12-27 10:40:33 +00:00
kaf24@firebug.cl.cam.ac.uk 62cc71c8a8 Generic x86 emulator now properly supports 16-bit addressing
by narrowing accesses to SI/DI/SP registers. Also supports
real-mode addressing by shifting and adding the appropriate
segment register for certain stack and string operations
where the effective address is not already known.

todo: Stack operations should have address size specified
by B bit in stack segment descriptor, not by default address
size or address-size override. Probably nothing depends on
the proper behaviour though.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-23 18:28:33 +01:00
kaf24@firebug.cl.cam.ac.uk f0010ba27f Modify CR0 access emulation -- return physical CR0 (except
for TS) and allow only the same physical flags to be written
back to CR0 by a guest.

Add write-to-CR4 emulation, but check that the write does not
modify any CR4 flags.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-23 16:42:46 +01:00
Ian.Campbell@xensource.com efec87263e Only build xenctx on x86_32 and x86_64.
Signed-off-by: Ian Campbell <Ian.Campbell@XenSource.com>
2005-12-23 09:12:41 +00:00
Ian.Campbell@xensource.com e201be5d57 Merge. 2005-12-22 16:15:33 +00:00
emellor@leeni.uk.xensource.com 27efc4fd12 This patch fixes a bug/typo of main.py.
1. show option "-c" of help of xm dmesg
2. fix value of parameter of arg_check of xm log
3. fix aliases of vbd-create and vbd-destroy

Signed-off-by Yoshinori Katase <y_katase@soft.fujitsu.com>
2005-12-22 15:38:10 +00:00
cl349@firebug.cl.cam.ac.uk 7fae73c67e Remove xen specific bug() implementation -- the regular one works just fine.
From: "Jan Beulich" <JBeulich@novell.com>
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
2005-12-22 15:50:06 +01:00
Ian.Campbell@xensource.com 40924689a9 Add support to xenctx for printing stack traces on x86_32 and x86_64.
To support this add xc_translate_foreign_address to libxc. This function
walks page tables and translates virtual addresses using a given domain
and vcpu page table.

Signed-off-by: Ian Campbell <Ian.Campbell@XenSource.com>
2005-12-22 14:33:19 +00:00
kaf24@firebug.cl.cam.ac.uk 4f27f31a47 Remove acpi_count_madt functions. Only appear to be used
for diagnostic tracing in xen/ia64.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-21 20:18:19 +01:00
kaf24@firebug.cl.cam.ac.uk b20f22d5c4 Remove unused local variables (from removed REASIGN_PAGE
function).

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-21 20:17:22 +01:00
kaf24@firebug.cl.cam.ac.uk e82f519465 Merge with xen-ia64-unstable.hg. 2005-12-21 19:52:00 +01:00
kaf24@firebug.cl.cam.ac.uk 93a7173714 Remove obsolete MMUEXT_REASSIGN_PAGE. It's not used by
anyone and is superceded by grant transfers.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-21 19:10:53 +01:00
djm@kirby.fc.hp.com a220ae9a8d Merge 2005-12-21 11:56:19 -06:00
kaf24@firebug.cl.cam.ac.uk db74dfce16 Fix gnttab_release_mappings -- it doesn't need to drop
page refcnts for host mappings as they are already
destroyed by put_page_from_l1e(). Also call
gnttab_release_mappings later (after destroying
page-table references) and from common code rather than
arch/x86.

Also a few other misc gnttab cleanups.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-21 18:45:43 +01:00
kaf24@firebug.cl.cam.ac.uk d9af6ba2e0 Increment page reference count for every host/device
mapping created via a grant reference, rather than one
increment for all uses of a single grant reference.
This avoids a nasty situation in put_page_from_l1e()
where we cannot reliably determine whether a mapping was
created via a grant reference and so we must always
decrement the mapped page's reference count.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-21 18:25:34 +01:00
kaf24@firebug.cl.cam.ac.uk f1e0d84148 Declare kasprintf before use.
Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-21 18:16:31 +01:00
djm@kirby.fc.hp.com 82a32ebf85 Disable chatty translate_domain_pte messages for normal grant table traffic 2005-12-21 10:30:10 -06:00
djm@kirby.fc.hp.com 6c9ee8bb99 Facilitate to debug VTI-domain issue.
Signed-off-by Anthony Xu <anthony.xu@intel.com>
2005-12-21 09:33:45 -06:00
djm@kirby.fc.hp.com 94f556c210 Support domU initrd and cmdline (previous cset also)
Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com>
2005-12-21 09:31:05 -06:00
djm@kirby.fc.hp.com 08b3de8dee diff -r 545ba1b126ca tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c      Tue Dec 20 20:11:17 2005
+++ b/tools/libxc/xc_linux_build.c      Wed Dec 21 11:50:08 2005
@@ -296,9 +296,13 @@
     unsigned long *page_array = NULL;
     struct load_funcs load_funcs;
     struct domain_setup_info dsi;
+    unsigned long vinitrd_start;
+    unsigned long vinitrd_end;
+    unsigned long v_end;
     unsigned long start_page, pgnr;
     start_info_t *start_info;
     int rc;
+    unsigned long i;
 
     rc = probeimageformat(image, image_size, &load_funcs);
     if ( rc != 0 )
@@ -310,11 +314,13 @@
     if ( rc != 0 )
         goto error_out;
 
-    dsi.v_start = round_pgdown(dsi.v_start);
-    dsi.v_end   = round_pgup(dsi.v_end);
+    dsi.v_start      = round_pgdown(dsi.v_start);
+    vinitrd_start    = round_pgup(dsi.v_end);
+    vinitrd_end      = vinitrd_start + initrd_len;
+    v_end            = round_pgup(vinitrd_end);
 
     start_page = dsi.v_start >> PAGE_SHIFT;
-    pgnr = (dsi.v_end - dsi.v_start) >> PAGE_SHIFT;
+    pgnr = (v_end - dsi.v_start) >> PAGE_SHIFT;
     if ( (page_array = malloc(pgnr * sizeof(unsigned long))) == NULL )
     {
         PERROR("Could not allocate memory");
@@ -326,9 +332,38 @@
         PERROR("Could not get the page frame list");
         goto error_out;
     }
+
+#define _p(a) ((void *) (a))
+
+    printf("VIRTUAL MEMORY ARRANGEMENT:\n"
+           " Loaded kernel: %p->%p\n"
+           " Init. ramdisk: %p->%p\n"
+           " TOTAL:         %p->%p\n",
+           _p(dsi.v_kernstart), _p(dsi.v_kernend), 
+           _p(vinitrd_start),   _p(vinitrd_end),
+           _p(dsi.v_start),     _p(v_end));
+    printf(" ENTRY ADDRESS: %p\n", _p(dsi.v_kernentry));
 
     (load_funcs.loadimage)(image, image_size, xc_handle, dom, page_array,
                            &dsi);
+
+    /* Load the initial ramdisk image. */
+    if ( initrd_len != 0 )
+    {
+        for ( i = (vinitrd_start - dsi.v_start);
+              i < (vinitrd_end - dsi.v_start); i += PAGE_SIZE )
+        {
+            char page[PAGE_SIZE];
+            if ( gzread(initrd_gfd, page, PAGE_SIZE) == -1 )
+            {
+                PERROR("Error reading initrd image, could not");
+                goto error_out;
+            }
+            xc_copy_to_domain_page(xc_handle, dom,
+                                   page_array[i>>PAGE_SHIFT], page);
+        }
+    }
+
 
     *pvke = dsi.v_kernentry;
 
@@ -358,6 +393,13 @@
     start_info->store_evtchn = store_evtchn;
     start_info->console_mfn   = nr_pages - 1;
     start_info->console_evtchn = console_evtchn;
+    if ( initrd_len != 0 )
+    {
+        ctxt->initrd.start    = vinitrd_start;
+        ctxt->initrd.size     = initrd_len;
+    }
+    strncpy((char *)ctxt->cmdline, cmdline, IA64_COMMAND_LINE_SIZE);
+    ctxt->cmdline[IA64_COMMAND_LINE_SIZE-1] = '\0';
     munmap(start_info, PAGE_SIZE);
 
     free(page_array);
diff -r 545ba1b126ca xen/arch/ia64/xen/dom_fw.c
--- a/xen/arch/ia64/xen/dom_fw.c        Tue Dec 20 20:11:17 2005
+++ b/xen/arch/ia64/xen/dom_fw.c        Wed Dec 21 11:50:08 2005
@@ -861,9 +861,14 @@
        bp->console_info.orig_x = 0;
        bp->console_info.orig_y = 24;
        bp->fpswa = 0;
-        bp->initrd_start = (dom0_start+dom0_size) -
-                (PAGE_ALIGN(ia64_boot_param->initrd_size) + 4*1024*1024);
-        bp->initrd_size = ia64_boot_param->initrd_size;
+        if (d == dom0){
+                bp->initrd_start = (dom0_start+dom0_size) -
+                        (PAGE_ALIGN(ia64_boot_param->initrd_size) + 4*1024*1024);
+                bp->initrd_size = ia64_boot_param->initrd_size;
+        }else{
+                bp->initrd_start = d->arch.initrd_start;
+                bp->initrd_size  = d->arch.initrd_len;
+       }
                 printf(" initrd start %0xlx", bp->initrd_start);
                 printf(" initrd size %0xlx", bp->initrd_size);
 
diff -r 545ba1b126ca xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Tue Dec 20 20:11:17 2005
+++ b/xen/arch/ia64/xen/domain.c        Wed Dec 21 11:50:08 2005
@@ -297,6 +297,9 @@
 
        *regs = c->regs;
        d->arch.sys_pgnr = c->sys_pgnr;
+        d->arch.initrd_start = c->initrd.start;
+        d->arch.initrd_len   = c->initrd.size;
+        d->arch.cmdline      = c->cmdline;
        new_thread(v, regs->cr_iip, 0, 0);
 
        v->vcpu_info->arch.evtchn_vector = c->vcpu.evtchn_vector;
@@ -365,7 +368,7 @@
                    regs->r28 = dom_fw_setup(d,saved_command_line,256L);
                else {
                    regs->ar_rsc |= (2 << 2); /* force PL2/3 */
-                   regs->r28 = dom_fw_setup(d,"nomca nosmp xencons=tty0 console=tty0 root=/dev/hda1",256L);  //FIXME
+                   regs->r28 = dom_fw_setup(d,d->arch.cmdline,256L);
                }
                VCPU(v, banknum) = 1;
                VCPU(v, metaphysical_mode) = 1;
diff -r 545ba1b126ca xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     Tue Dec 20 20:11:17 2005
+++ b/xen/include/asm-ia64/domain.h     Wed Dec 21 11:50:08 2005
@@ -38,6 +38,9 @@
     u64 image_len;
     u64 entry;
 #endif
+    unsigned long initrd_start;
+    unsigned long initrd_len;
+    char *cmdline;
 };
 #define xen_vastart arch.xen_vastart
 #define xen_vaend arch.xen_vaend
diff -r 545ba1b126ca xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h    Tue Dec 20 20:11:17 2005
+++ b/xen/include/public/arch-ia64.h    Wed Dec 21 11:50:08 2005
@@ -276,6 +276,12 @@
     unsigned long start_info_pfn;
 } arch_shared_info_t;
 
+typedef struct {
+    unsigned long start;
+    unsigned long size; 
+} arch_initrd_info_t;
+
+#define IA64_COMMAND_LINE_SIZE 512
 typedef struct vcpu_guest_context {
 #define VGCF_FPU_VALID (1<<0)
 #define VGCF_VMX_GUEST (1<<1)
@@ -289,6 +295,8 @@
     cpu_user_regs_t regs;
     arch_vcpu_info_t vcpu;
     arch_shared_info_t shared;
+    arch_initrd_info_t initrd;
+    char cmdline[IA64_COMMAND_LINE_SIZE];
 } vcpu_guest_context_t;
 
 #endif /* !__ASSEMBLY__ */
2005-12-21 09:07:09 -06:00
djm@kirby.fc.hp.com 511d7dce64 This patch is intended to correct the number of CPUs.
Our IPF machines are the following configurations.
 - Total logical cpus = 16
  -- 4 sockets
  -- 2 cores
  -- 2 threads

I changed the setting of BIOS, and invalidated the hyperthread, and I built Xen with NR_CPUS=8.
As a result, it became like attached file xendmesg1.txt.
 - Available cpus 3
 - Total cpus 8

Next, I built Xen with NR_CPUS=16.
As a result, it became like attached file xendmesg2.txt.
 - Available cpus 8
 - Total cpus 16

I thought not to match the analysis of the lsapic entry to the value of NR_CPUS. 

It is an outline of patch as follows.
 1. Count up the lsapic entry by using acpi_table_count_madt()/acpi_table_count_madt_family().
 2. Call acpi_parse_lsapic() by using the number of lsapic entries.
 3. Count up the available_cpus by using acpi_parse_lsapic(), however NR_CPUS is not exceeded.

Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>

Best Regards,
 Kan
2005-12-21 08:53:40 -06:00
djm@kirby.fc.hp.com bfb1a9b2ac New default config file that works on both tiger4 and HP boxes 2005-12-21 08:49:31 -06:00
djm@kirby.fc.hp.com 2d2a310ebe Fix smp_processor_id to be linked to correct processor id under vcpu, which is
the exact one updated by scheduler. Or else easy to think how things get
messed under SMP environment. One phenomenon observed is about softirq.
Exit path on CPU1 checks pending indicator by local_cpu_data, and then
goto do_softirq if pending true. However do_softirq uses cpu_data(cpu)
to query pending bit again. Cpu index is aquired from smp_processor_id,
with thread_info->cpu not cared by scheduler. Finally do_softirq on CPU1
tries to operate percpu data on CPU0 then.

Also disable several prints within critical path, like sending IPI. Due to
slow serial speed, this will slow down overall performance heavily since
event channels among CPUs are in traffic.

This patch is necessary for host SMP.

Signed-off-by Kevin Tian <kevin.tian@intel.com>
2005-12-21 08:40:16 -06:00
djm@kirby.fc.hp.com 4649e71f3f Certain faults should not be reflected if caused with priv=0
Signed-off-by Kevin Tian <kevin.tian@intel.com>
2005-12-21 08:36:03 -06:00
djm@kirby.fc.hp.com 7c191eedcd More pal_flush_cache calls for split cache machines (by Anthony Xu) 2005-12-21 08:27:09 -06:00
kaf24@firebug.cl.cam.ac.uk c19d7d7430 Add support for MOVSX/MOVSXD/MOVZX (move-with-extend)
instructions to the generic x86 emulator. Also add
preliminary support for 16-bit addressing: decode the
ModR/M byte properly but still need to access and update
implicit memory operands (esp,esi,edi) with correct width.
Work is also needed to support real-mode addressing.

Signed-off-by: Keir Fraser <keir@xensource.com>
2005-12-21 14:29:23 +01:00
vhanquez@kneesa.uk.xensource.com 8e0091cac0 remove duplicate code to allocate a string ala printf (using kasprintf)
Signed-off-by: Vincent Hanquez <vincent@xensource.com>
2005-12-21 11:14:37 +00:00
djm@kirby.fc.hp.com 541bcd7e26 Important domU/vbd fix. Reserve top granule of machine memory for dom0. 2005-12-20 14:11:17 -06:00