WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [XEN] Replace hvm_setup_platform() with h

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [XEN] Replace hvm_setup_platform() with hvm_domain_initialise()
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 06 Nov 2006 16:50:33 +0000
Delivery-date: Mon, 06 Nov 2006 08:53:25 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxxx
# Node ID 2368e779f89fdac0330d12a2109fd29b93ad32c6
# Parent  e3abede54214b35d06e988b321432bd1f4597c79
[XEN] Replace hvm_setup_platform() with hvm_domain_initialise()
and extra code in hvm_vcpu_initialise(). Remove 'apic' config
option -- HVM CPUs will always have an APIC (which should be
set up in virtual wire mode for backward compatibility, just as
in a real system).
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 tools/examples/xmexample.hvm         |    3 -
 tools/firmware/hvmloader/hvmloader.c |    7 ---
 tools/libxc/ia64/xc_ia64_hvm_build.c |    2 
 tools/libxc/xc_hvm_build.c           |   11 +---
 tools/libxc/xenguest.h               |    2 
 tools/libxc/xg_private.c             |    1 
 tools/python/README.XendConfig       |    1 
 tools/python/README.sxpcfg           |    1 
 tools/python/xen/lowlevel/xc/xc.c    |    9 +---
 tools/python/xen/xend/image.py       |    5 --
 tools/python/xen/xm/create.py        |    6 --
 tools/xm-test/lib/XmTestLib/arch.py  |    1 
 xen/arch/x86/domain.c                |   19 --------
 xen/arch/x86/hvm/hvm.c               |   78 ++++++++++++++++++++++-------------
 xen/arch/x86/hvm/i8254.c             |    4 -
 xen/arch/x86/hvm/i8259.c             |   12 ++---
 xen/arch/x86/hvm/intercept.c         |   25 +++++------
 xen/arch/x86/hvm/pmtimer.c           |    2 
 xen/arch/x86/hvm/rtc.c               |    2 
 xen/arch/x86/hvm/svm/svm.c           |    3 -
 xen/arch/x86/hvm/svm/vmcb.c          |    6 --
 xen/arch/x86/hvm/vioapic.c           |   12 -----
 xen/arch/x86/hvm/vlapic.c            |    8 ---
 xen/arch/x86/hvm/vmx/vmcs.c          |    7 +--
 xen/arch/x86/hvm/vmx/vmx.c           |   10 ----
 xen/arch/x86/mm.c                    |    2 
 xen/include/asm-ia64/vmx_platform.h  |    2 
 xen/include/asm-x86/hvm/hvm.h        |   12 -----
 xen/include/asm-x86/hvm/io.h         |   13 +++--
 xen/include/asm-x86/hvm/support.h    |    1 
 xen/include/asm-x86/hvm/vlapic.h     |    2 
 xen/include/asm-x86/hvm/vpic.h       |    2 
 xen/include/public/hvm/params.h      |    1 
 33 files changed, 105 insertions(+), 167 deletions(-)

diff -r e3abede54214 -r 2368e779f89f tools/examples/xmexample.hvm
--- a/tools/examples/xmexample.hvm      Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/examples/xmexample.hvm      Sun Nov 05 20:17:40 2006 +0000
@@ -47,9 +47,6 @@ name = "ExampleHVMDomain"
 
 # enable/disable HVM guest ACPI, default=0 (disabled)
 #acpi=0
-
-# enable/disable HVM guest APIC, default=0 (disabled)
-#apic=0
 
 # List of which CPUS this domain is allowed to use, default Xen picks
 #cpus = ""         # leave to Xen to pick
diff -r e3abede54214 -r 2368e779f89f tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c      Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/firmware/hvmloader/hvmloader.c      Sun Nov 05 20:17:40 2006 +0000
@@ -165,8 +165,6 @@ int
 int
 main(void)
 {
-       struct xen_hvm_param hvm_param;
-
        puts("HVM Loader\n");
 
        init_hypercalls();
@@ -177,10 +175,7 @@ main(void)
        puts("Loading ROMBIOS ...\n");
        memcpy((void *)ROMBIOS_PHYSICAL_ADDRESS, rombios, sizeof(rombios));
 
-       hvm_param.domid = DOMID_SELF;
-       hvm_param.index = HVM_PARAM_APIC_ENABLED;
-       if (!hypercall_hvm_op(HVMOP_get_param, &hvm_param) && hvm_param.value)
-               create_mp_tables();
+        create_mp_tables();
        
        if (cirrus_check()) {
                puts("Loading Cirrus VGABIOS ...\n");
diff -r e3abede54214 -r 2368e779f89f tools/libxc/ia64/xc_ia64_hvm_build.c
--- a/tools/libxc/ia64/xc_ia64_hvm_build.c      Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/libxc/ia64/xc_ia64_hvm_build.c      Sun Nov 05 20:17:40 2006 +0000
@@ -618,7 +618,7 @@ int
 int
 xc_hvm_build(int xc_handle, uint32_t domid, int memsize,
              const char *image_name, unsigned int vcpus, unsigned int pae,
-             unsigned int acpi, unsigned int apic, unsigned int store_evtchn,
+             unsigned int acpi, unsigned int store_evtchn,
              unsigned long *store_mfn)
 {
     struct xen_domctl launch_domctl, domctl;
diff -r e3abede54214 -r 2368e779f89f tools/libxc/xc_hvm_build.c
--- a/tools/libxc/xc_hvm_build.c        Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/libxc/xc_hvm_build.c        Sun Nov 05 20:17:40 2006 +0000
@@ -157,7 +157,6 @@ static int setup_guest(int xc_handle,
                        unsigned int vcpus,
                        unsigned int pae,
                        unsigned int acpi,
-                       unsigned int apic,
                        unsigned int store_evtchn,
                        unsigned long *store_mfn)
 {
@@ -248,7 +247,6 @@ static int setup_guest(int xc_handle,
     }
 
     xc_set_hvm_param(xc_handle, dom, HVM_PARAM_PAE_ENABLED, pae);
-    xc_set_hvm_param(xc_handle, dom, HVM_PARAM_APIC_ENABLED, apic);
 
     if ( (e820_page = xc_map_foreign_range(
               xc_handle, dom, PAGE_SIZE, PROT_READ | PROT_WRITE,
@@ -307,7 +305,6 @@ static int xc_hvm_build_internal(int xc_
                                  unsigned int vcpus,
                                  unsigned int pae,
                                  unsigned int acpi,
-                                 unsigned int apic,
                                  unsigned int store_evtchn,
                                  unsigned long *store_mfn)
 {
@@ -340,7 +337,7 @@ static int xc_hvm_build_internal(int xc_
 
     if ( setup_guest(xc_handle, domid, memsize, image, image_size,
                      ctxt, domctl.u.getdomaininfo.shared_info_frame,
-                     vcpus, pae, acpi, apic, store_evtchn, store_mfn) < 0)
+                     vcpus, pae, acpi, store_evtchn, store_mfn) < 0)
     {
         ERROR("Error constructing guest OS");
         goto error_out;
@@ -531,7 +528,6 @@ int xc_hvm_build(int xc_handle,
                  unsigned int vcpus,
                  unsigned int pae,
                  unsigned int acpi,
-                 unsigned int apic,
                  unsigned int store_evtchn,
                  unsigned long *store_mfn)
 {
@@ -545,7 +541,7 @@ int xc_hvm_build(int xc_handle,
 
     sts = xc_hvm_build_internal(xc_handle, domid, memsize,
                                 image, image_size,
-                                vcpus, pae, acpi, apic,
+                                vcpus, pae, acpi,
                                 store_evtchn, store_mfn);
 
     free(image);
@@ -567,7 +563,6 @@ int xc_hvm_build_mem(int xc_handle,
                      unsigned int vcpus,
                      unsigned int pae,
                      unsigned int acpi,
-                     unsigned int apic,
                      unsigned int store_evtchn,
                      unsigned long *store_mfn)
 {
@@ -592,7 +587,7 @@ int xc_hvm_build_mem(int xc_handle,
 
     sts = xc_hvm_build_internal(xc_handle, domid, memsize,
                                 img, img_len,
-                                vcpus, pae, acpi, apic,
+                                vcpus, pae, acpi,
                                 store_evtchn, store_mfn);
 
     /* xc_inflate_buffer may return the original buffer pointer (for
diff -r e3abede54214 -r 2368e779f89f tools/libxc/xenguest.h
--- a/tools/libxc/xenguest.h    Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/libxc/xenguest.h    Sun Nov 05 20:17:40 2006 +0000
@@ -113,7 +113,6 @@ int xc_hvm_build(int xc_handle,
                  unsigned int vcpus,
                  unsigned int pae,
                  unsigned int acpi,
-                 unsigned int apic,
                  unsigned int store_evtchn,
                  unsigned long *store_mfn);
 
@@ -125,7 +124,6 @@ int xc_hvm_build_mem(int xc_handle,
                      unsigned int vcpus,
                      unsigned int pae,
                      unsigned int acpi,
-                     unsigned int apic,
                      unsigned int store_evtchn,
                      unsigned long *store_mfn);
 
diff -r e3abede54214 -r 2368e779f89f tools/libxc/xg_private.c
--- a/tools/libxc/xg_private.c  Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/libxc/xg_private.c  Sun Nov 05 20:17:40 2006 +0000
@@ -196,7 +196,6 @@ __attribute__((weak)) int xc_hvm_build(
     unsigned int vcpus,
     unsigned int pae,
     unsigned int acpi,
-    unsigned int apic,
     unsigned int store_evtchn,
     unsigned long *store_mfn)
 {
diff -r e3abede54214 -r 2368e779f89f tools/python/README.XendConfig
--- a/tools/python/README.XendConfig    Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/python/README.XendConfig    Sun Nov 05 20:17:40 2006 +0000
@@ -123,7 +123,6 @@ otherConfig
                                 image.hvm.vncconsole
                                 image.hvm.pae
                                 image.hvm.acpi (also in image.devices)
-                                image.hvm.apic
                                 image.hvm.devices.boot
                                 image.hvm.devices.fda
                                 image.hvm.devices.fdb
diff -r e3abede54214 -r 2368e779f89f tools/python/README.sxpcfg
--- a/tools/python/README.sxpcfg        Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/python/README.sxpcfg        Sun Nov 05 20:17:40 2006 +0000
@@ -56,7 +56,6 @@ image
   - vncconsole
   - pae
   - acpi
-  - apic
   (parseDeviceModel)
   - boot
   - fda
diff -r e3abede54214 -r 2368e779f89f tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/python/xen/lowlevel/xc/xc.c Sun Nov 05 20:17:40 2006 +0000
@@ -377,19 +377,18 @@ static PyObject *pyxc_hvm_build(XcObject
     int vcpus = 1;
     int pae  = 0;
     int acpi = 0;
-    int apic = 0;
     unsigned long store_mfn = 0;
 
     static char *kwd_list[] = { "domid", "store_evtchn",
-                               "memsize", "image", "vcpus", "pae", "acpi", 
"apic",
+                               "memsize", "image", "vcpus", "pae", "acpi",
                                NULL };
-    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiisiiii", kwd_list,
+    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiisiii", kwd_list,
                                       &dom, &store_evtchn, &memsize,
-                                      &image, &vcpus, &pae, &acpi, &apic) )
+                                      &image, &vcpus, &pae, &acpi) )
         return NULL;
 
     if ( xc_hvm_build(self->xc_handle, dom, memsize, image,
-                      vcpus, pae, acpi, apic, store_evtchn, &store_mfn) != 0 )
+                      vcpus, pae, acpi, store_evtchn, &store_mfn) != 0 )
         return PyErr_SetFromErrno(xc_error);
 
     return Py_BuildValue("{s:i}", "store_mfn", store_mfn);
diff -r e3abede54214 -r 2368e779f89f tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py    Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/python/xen/xend/image.py    Sun Nov 05 20:17:40 2006 +0000
@@ -275,7 +275,6 @@ class HVMImageHandler(ImageHandler):
         self.pae  = int(sxp.child_value(imageConfig, 'pae', 0))
 
         self.acpi = int(sxp.child_value(imageConfig, 'acpi', 0))
-        self.apic = int(sxp.child_value(imageConfig, 'apic', 0))
 
     def buildDomain(self):
         store_evtchn = self.vm.getStorePort()
@@ -289,7 +288,6 @@ class HVMImageHandler(ImageHandler):
         log.debug("vcpus          = %d", self.vm.getVCpuCount())
         log.debug("pae            = %d", self.pae)
         log.debug("acpi           = %d", self.acpi)
-        log.debug("apic           = %d", self.apic)
 
         self.register_shutdown_watch()
 
@@ -299,8 +297,7 @@ class HVMImageHandler(ImageHandler):
                             memsize        = mem_mb,
                             vcpus          = self.vm.getVCpuCount(),
                             pae            = self.pae,
-                            acpi           = self.acpi,
-                            apic           = self.apic)
+                            acpi           = self.acpi)
 
     # Return a list of cmd line args to the device models based on the
     # xm config file
diff -r e3abede54214 -r 2368e779f89f tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py     Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/python/xen/xm/create.py     Sun Nov 05 20:17:40 2006 +0000
@@ -180,10 +180,6 @@ gopts.var('acpi', val='ACPI',
 gopts.var('acpi', val='ACPI',
           fn=set_int, default=0,
           use="Disable or enable ACPI of HVM domain.")
-
-gopts.var('apic', val='APIC',
-          fn=set_int, default=0,
-          use="Disable or enable APIC of HVM domain.")
 
 gopts.var('vcpus', val='VCPUS',
           fn=set_int, default=1,
@@ -664,7 +660,7 @@ def configure_hvm(config_image, vals):
              'localtime', 'serial', 'stdvga', 'isa', 'nographic', 'soundhw',
              'vnc', 'vncdisplay', 'vncunused', 'vncconsole', 'vnclisten',
              'sdl', 'display', 'xauthority',
-             'acpi', 'apic', 'usb', 'usbdevice' ]
+             'acpi', 'usb', 'usbdevice' ]
     for a in args:
         if (vals.__dict__[a]):
             config_image.append([a, vals.__dict__[a]])
diff -r e3abede54214 -r 2368e779f89f tools/xm-test/lib/XmTestLib/arch.py
--- a/tools/xm-test/lib/XmTestLib/arch.py       Sat Nov 04 20:13:22 2006 +0000
+++ b/tools/xm-test/lib/XmTestLib/arch.py       Sun Nov 05 20:17:40 2006 +0000
@@ -71,7 +71,6 @@ ia_HVMDefaults =      {"memory"       : 
 ia_HVMDefaults =      {"memory"       : 64,
                        "vcpus"        : 1,
                        "acpi"         : 0,
-                       "apic"         : 0,
                        "disk"         : ["file:%s/disk.img,ioemu:%s,w!" %
                                          (getRdPath(), BLOCK_ROOT_DEV)],
                        "kernel"       : "/usr/lib/xen/boot/hvmloader",
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/domain.c     Sun Nov 05 20:17:40 2006 +0000
@@ -233,24 +233,7 @@ int arch_domain_create(struct domain *d)
             virt_to_page(d->shared_info), d, XENSHARE_writable);
     }
 
-    if ( is_hvm_domain(d) )
-    {
-        if ( !hvm_enabled )
-        {
-            gdprintk(XENLOG_WARNING, "Attempt to create a HVM guest "
-                     "on a non-VT/AMDV platform.\n");
-            rc = -EINVAL;
-            goto fail;
-        }
-
-        spin_lock_init(&d->arch.hvm_domain.pbuf_lock);
-
-        rc = shadow_enable(d, SHM2_refcounts|SHM2_translate|SHM2_external);
-        if ( rc != 0 )
-            goto fail;
-    }
-
-    return 0;
+    return hvm_domain_initialise(d);
 
  fail:
     free_xenheap_page(d->shared_info);
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c    Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/hvm.c    Sun Nov 05 20:17:40 2006 +0000
@@ -57,14 +57,6 @@ integer_param("hvm_debug", opt_hvm_debug
 
 struct hvm_function_table hvm_funcs;
 
-void hvm_create_event_channel(struct vcpu *v)
-{
-    v->arch.hvm_vcpu.xen_port = alloc_unbound_xen_event_channel(v, 0);
-    if ( get_sp(v->domain) && get_vio(v->domain, v->vcpu_id) )
-        get_vio(v->domain, v->vcpu_id)->vp_eport =
-            v->arch.hvm_vcpu.xen_port;
-}
-
 void hvm_stts(struct vcpu *v)
 {
     /* FPU state already dirty? Then no need to setup_fpu() lazily. */
@@ -123,26 +115,56 @@ void hvm_release_assist_channel(struct v
     free_xen_event_channel(v, v->arch.hvm_vcpu.xen_port);
 }
 
-
-void hvm_setup_platform(struct domain *d)
+int hvm_domain_initialise(struct domain *d)
+{
+    struct hvm_domain *platform = &d->arch.hvm_domain;
+    int rc;
+
+    if ( !is_hvm_domain(d) )
+        return 0;
+
+    if ( !hvm_enabled )
+    {
+        gdprintk(XENLOG_WARNING, "Attempt to create a HVM guest "
+                 "on a non-VT/AMDV platform.\n");
+        return -EINVAL;
+    }
+
+    spin_lock_init(&d->arch.hvm_domain.pbuf_lock);
+    spin_lock_init(&d->arch.hvm_domain.round_robin_lock);
+    spin_lock_init(&d->arch.hvm_domain.buffered_io_lock);
+
+    rc = shadow_enable(d, SHM2_refcounts|SHM2_translate|SHM2_external);
+    if ( rc != 0 )
+        return rc;
+
+    pic_init(&platform->vpic, pic_irq_request, &platform->interrupt_request);
+    register_pic_io_hook(d);
+
+    hvm_vioapic_init(d);
+
+    return 0;
+}
+
+int hvm_vcpu_initialise(struct vcpu *v)
 {
     struct hvm_domain *platform;
-    struct vcpu *v = current;
-
-    if ( !is_hvm_domain(d) || (v->vcpu_id != 0) )
-        return;
-
-    platform = &d->arch.hvm_domain;
-    pic_init(&platform->vpic, pic_irq_request, &platform->interrupt_request);
-    register_pic_io_hook();
-
-    if ( hvm_apic_support(d) )
-    {
-        spin_lock_init(&d->arch.hvm_domain.round_robin_lock);
-        hvm_vioapic_init(d);
-    }
-
-    spin_lock_init(&d->arch.hvm_domain.buffered_io_lock);
+    int rc;
+
+    if ( (rc = hvm_funcs.vcpu_initialise(v)) != 0 )
+        return rc;
+
+    /* Create ioreq event channel. */
+    v->arch.hvm_vcpu.xen_port = alloc_unbound_xen_event_channel(v, 0);
+    if ( get_sp(v->domain) && get_vio(v->domain, v->vcpu_id) )
+        get_vio(v->domain, v->vcpu_id)->vp_eport =
+            v->arch.hvm_vcpu.xen_port;
+
+    if ( v->vcpu_id != 0 )
+        return 0;
+
+    /* XXX Below should happen in hvm_domain_initialise(). */
+    platform = &v->domain->arch.hvm_domain;
 
     init_timer(&platform->pl_time.periodic_tm.timer,
                pt_timer_fn, v, v->processor);
@@ -150,8 +172,10 @@ void hvm_setup_platform(struct domain *d
     rtc_init(v, RTC_PORT(0), RTC_IRQ);
     pmtimer_init(v, ACPI_PM_TMR_BLK_ADDRESS); 
 
-    /* init guest tsc to start from 0 */
+    /* Init guest TSC to start from zero. */
     hvm_set_guest_time(v, 0);
+
+    return 0;
 }
 
 void pic_irq_request(void *data, int level)
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/i8254.c
--- a/xen/arch/x86/hvm/i8254.c  Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/i8254.c  Sun Nov 05 20:17:40 2006 +0000
@@ -374,9 +374,9 @@ void pit_init(struct vcpu *v, unsigned l
     s++; s->vcpu = v;
     s++; s->vcpu = v;
 
-    register_portio_handler(PIT_BASE, 4, handle_pit_io);
+    register_portio_handler(v->domain, PIT_BASE, 4, handle_pit_io);
     /* register the speaker port */
-    register_portio_handler(0x61, 1, handle_speaker_io);
+    register_portio_handler(v->domain, 0x61, 1, handle_speaker_io);
     ticks_per_sec(v) = cpu_khz * (int64_t)1000;
 #ifdef DEBUG_PIT
     printk("HVM_PIT: guest frequency =%lld\n", (long long)ticks_per_sec(v));
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/i8259.c
--- a/xen/arch/x86/hvm/i8259.c  Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/i8259.c  Sun Nov 05 20:17:40 2006 +0000
@@ -548,12 +548,12 @@ static int intercept_elcr_io(ioreq_t *p)
     return 1;
 }
 
-void register_pic_io_hook (void)
-{
-    register_portio_handler(0x20, 2, intercept_pic_io);
-    register_portio_handler(0x4d0, 1, intercept_elcr_io);
-    register_portio_handler(0xa0, 2, intercept_pic_io);
-    register_portio_handler(0x4d1, 1, intercept_elcr_io);
+void register_pic_io_hook(struct domain *d)
+{
+    register_portio_handler(d, 0x20, 2, intercept_pic_io);
+    register_portio_handler(d, 0x4d0, 1, intercept_elcr_io);
+    register_portio_handler(d, 0xa0, 2, intercept_pic_io);
+    register_portio_handler(d, 0x4d1, 1, intercept_elcr_io);
 }
 
 
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/intercept.c
--- a/xen/arch/x86/hvm/intercept.c      Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/intercept.c      Sun Nov 05 20:17:40 2006 +0000
@@ -208,18 +208,17 @@ int hvm_mmio_intercept(ioreq_t *p)
     struct vcpu *v = current;
     int i;
 
-    /* XXX currently only APIC use intercept */
-    if ( !hvm_apic_support(v->domain) )
-        return 0;
-
-    for ( i = 0; i < HVM_MMIO_HANDLER_NR; i++ ) {
-        if ( hvm_mmio_handlers[i]->check_handler(v, p->addr) ) {
+    for ( i = 0; i < HVM_MMIO_HANDLER_NR; i++ )
+    {
+        if ( hvm_mmio_handlers[i]->check_handler(v, p->addr) )
+        {
             hvm_mmio_access(v, p,
                             hvm_mmio_handlers[i]->read_handler,
                             hvm_mmio_handlers[i]->write_handler);
             return 1;
         }
     }
+
     return 0;
 }
 
@@ -247,15 +246,15 @@ int hvm_io_intercept(ioreq_t *p, int typ
     return 0;
 }
 
-int register_io_handler(unsigned long addr, unsigned long size,
-                        intercept_action_t action, int type)
-{
-    struct vcpu *v = current;
-    struct hvm_io_handler *handler =
-                             &(v->domain->arch.hvm_domain.io_handler);
+int register_io_handler(
+    struct domain *d, unsigned long addr, unsigned long size,
+    intercept_action_t action, int type)
+{
+    struct hvm_io_handler *handler = &d->arch.hvm_domain.io_handler;
     int num = handler->num_slot;
 
-    if (num >= MAX_IO_HANDLER) {
+    if ( num >= MAX_IO_HANDLER )
+    {
         printk("no extra space, register io interceptor failed!\n");
         domain_crash_synchronous();
     }
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/pmtimer.c
--- a/xen/arch/x86/hvm/pmtimer.c        Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/pmtimer.c        Sun Nov 05 20:17:40 2006 +0000
@@ -52,7 +52,7 @@ void pmtimer_init(struct vcpu *v, int ba
     /* ACPI supports a 32-bit power management timer */
     set_timer(&s->timer, NOW() + (1000000000ULL << 31) / FREQUENCE_PMTIMER);
     
-    register_portio_handler(base, 4, handle_pmt_io);
+    register_portio_handler(v->domain, base, 4, handle_pmt_io);
 }
 
 void pmtimer_deinit(struct domain *d)
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/rtc.c
--- a/xen/arch/x86/hvm/rtc.c    Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/rtc.c    Sun Nov 05 20:17:40 2006 +0000
@@ -381,7 +381,7 @@ void rtc_init(struct vcpu *v, int base, 
     s->next_second_time = NOW() + 1000000000ULL;
     set_timer(&s->second_timer2, s->next_second_time);
 
-    register_portio_handler(base, 2, handle_rtc_io);
+    register_portio_handler(v->domain, base, 2, handle_rtc_io);
 }
 
 void rtc_deinit(struct domain *d)
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c        Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/svm/svm.c        Sun Nov 05 20:17:40 2006 +0000
@@ -1046,8 +1046,7 @@ static void svm_vmexit_do_cpuid(struct v
         cpuid(input, &eax, &ebx, &ecx, &edx);       
         if (input == 0x00000001 || input == 0x80000001 )
         {
-            if ( !hvm_apic_support(v->domain) ||
-                 !vlapic_global_enabled((VLAPIC(v))) )
+            if ( !vlapic_global_enabled((VLAPIC(v))) )
             {
                 /* Since the apic is disabled, avoid any confusion 
                    about SMP cpus being available */
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/svm/vmcb.c
--- a/xen/arch/x86/hvm/svm/vmcb.c       Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/svm/vmcb.c       Sun Nov 05 20:17:40 2006 +0000
@@ -355,11 +355,7 @@ void svm_do_launch(struct vcpu *v)
     if ( !asidpool_assign_next( vmcb, 0, core, core ))
         BUG();
 
-    if (v->vcpu_id == 0)
-        hvm_setup_platform(v->domain);
-
-    if (hvm_apic_support(v->domain))
-        vlapic_init(v);
+    vlapic_init(v);
     init_timer(&v->arch.hvm_vcpu.hlt_timer, hlt_timer_fn, v, v->processor);
 
     vmcb->ldtr.sel = 0;
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/vioapic.c
--- a/xen/arch/x86/hvm/vioapic.c        Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/vioapic.c        Sun Nov 05 20:17:40 2006 +0000
@@ -530,9 +530,6 @@ void hvm_vioapic_do_irqs(struct domain *
 {
     hvm_vioapic_t *s = &(d->arch.hvm_domain.vioapic);
 
-    if (!hvm_apic_support(d))
-        return;
-
     s->irr |= irqs & ~s->imr;
     service_ioapic(s);
 }
@@ -541,9 +538,6 @@ void hvm_vioapic_do_irqs_clear(struct do
 {
     hvm_vioapic_t *s = &(d->arch.hvm_domain.vioapic);
 
-    if (!hvm_apic_support(d))
-        return;
-
     s->irr &= ~irqs;
     service_ioapic(s);
 }
@@ -552,8 +546,7 @@ void hvm_vioapic_set_xen_irq(struct doma
 {
     hvm_vioapic_t *s = &d->arch.hvm_domain.vioapic;
 
-    if (!hvm_apic_support(d) || !IOAPICEnabled(s) ||
-       s->redirtbl[irq].RedirForm.mask)
+    if (!IOAPICEnabled(s) || s->redirtbl[irq].RedirForm.mask)
         return;
 
     if (s->redirtbl[irq].RedirForm.trigmod != IOAPIC_LEVEL_TRIGGER)
@@ -568,9 +561,6 @@ void hvm_vioapic_set_irq(struct domain *
 void hvm_vioapic_set_irq(struct domain *d, int irq, int level)
 {
     hvm_vioapic_t *s = &(d->arch.hvm_domain.vioapic);
-
-    if (!hvm_apic_support(d))
-        return ;
 
     HVM_DBG_LOG(DBG_LEVEL_IOAPIC, "ioapic_set_irq "
       "irq %x level %x\n", irq, level);
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/vlapic.c
--- a/xen/arch/x86/hvm/vlapic.c Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/vlapic.c Sun Nov 05 20:17:40 2006 +0000
@@ -155,17 +155,11 @@ int vlapic_set_irq(struct vlapic *vlapic
     return ret;
 }
 
-int hvm_apic_support(struct domain *d)
-{
-    return d->arch.hvm_domain.params[HVM_PARAM_APIC_ENABLED];
-}
-
 s_time_t get_apictime_scheduled(struct vcpu *v)
 {
     struct vlapic *vlapic = VLAPIC(v);
 
-    if ( !hvm_apic_support(v->domain) ||
-         !vlapic_lvt_enabled(vlapic, APIC_LVTT) )
+    if ( !vlapic_lvt_enabled(vlapic, APIC_LVTT) )
         return -1;
 
     return vlapic->vlapic_timer.expires;
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/vmx/vmcs.c
--- a/xen/arch/x86/hvm/vmx/vmcs.c       Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/vmx/vmcs.c       Sun Nov 05 20:17:40 2006 +0000
@@ -307,9 +307,8 @@ static void vmx_do_launch(struct vcpu *v
     unsigned int  error = 0;
     unsigned long cr0, cr4;
 
-    if ( v->vcpu_id == 0 )
-        hvm_setup_platform(v->domain);
-    else {
+    if ( v->vcpu_id != 0 )
+    {
         /* Sync AP's TSC with BSP's */
         v->arch.hvm_vcpu.cache_tsc_offset = 
             v->domain->vcpu[0]->arch.hvm_vcpu.cache_tsc_offset;
@@ -333,7 +332,7 @@ static void vmx_do_launch(struct vcpu *v
 
     hvm_stts(v);
 
-    if( hvm_apic_support(v->domain) && (vlapic_init(v) == 0) )
+    if ( vlapic_init(v) == 0 )
     {
 #ifdef __x86_64__ 
         u32 *cpu_exec_control = &v->arch.hvm_vcpu.u.vmx.exec_control;
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c        Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/hvm/vmx/vmx.c        Sun Nov 05 20:17:40 2006 +0000
@@ -905,17 +905,11 @@ static void vmx_do_cpuid(struct cpu_user
 
         if ( input == CPUID_LEAF_0x1 )
         {
-            /* mask off reserved bits */
+            /* Mask off reserved bits. */
             ecx &= ~VMX_VCPU_CPUID_L1_ECX_RESERVED;
 
-            if ( !hvm_apic_support(v->domain) ||
-                 !vlapic_global_enabled((VLAPIC(v))) )
-            {
-                /* Since the apic is disabled, avoid any 
-                confusion about SMP cpus being available */
-
+            if ( !vlapic_global_enabled((VLAPIC(v))) )
                 clear_bit(X86_FEATURE_APIC, &edx);
-            }
     
 #if CONFIG_PAGING_LEVELS >= 3
             if ( !v->domain->arch.hvm_domain.params[HVM_PARAM_PAE_ENABLED] )
diff -r e3abede54214 -r 2368e779f89f xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/arch/x86/mm.c Sun Nov 05 20:17:40 2006 +0000
@@ -572,7 +572,7 @@ get_page_from_l1e(
 
         if ( !iomem_access_permitted(d, mfn, mfn) )
         {
-            if ( mfn != INVALID_MFN )
+            if ( mfn != (PADDR_MASK >> PAGE_SHIFT) ) /* INVALID_MFN? */
                 MEM_LOG("Non-privileged (%u) attempt to map I/O space %08lx", 
                         d->domain_id, mfn);
             return 0;
diff -r e3abede54214 -r 2368e779f89f xen/include/asm-ia64/vmx_platform.h
--- a/xen/include/asm-ia64/vmx_platform.h       Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/include/asm-ia64/vmx_platform.h       Sun Nov 05 20:17:40 2006 +0000
@@ -73,9 +73,7 @@ enum ioapic_irq_destination_types {
        dest_ExtINT = 7
 };
 
-/* As long as we register vlsapic to ioapic controller, it's said enabled */
 #define vlapic_enabled(l) 1
-#define hvm_apic_support(d) 1
 
 #define VLAPIC_DELIV_MODE_FIXED                0x0
 #define VLAPIC_DELIV_MODE_REDIR                0x1
diff -r e3abede54214 -r 2368e779f89f xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h     Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/include/asm-x86/hvm/hvm.h     Sun Nov 05 20:17:40 2006 +0000
@@ -91,16 +91,8 @@ hvm_disable(void)
         hvm_funcs.disable();
 }
 
-void hvm_create_event_channel(struct vcpu *v);
-
-static inline int
-hvm_vcpu_initialise(struct vcpu *v)
-{
-    int rc;
-    if ( (rc = hvm_funcs.vcpu_initialise(v)) == 0 )
-        hvm_create_event_channel(v);
-    return rc;
-}
+int hvm_domain_initialise(struct domain *d);
+int hvm_vcpu_initialise(struct vcpu *v);
 
 static inline void
 hvm_relinquish_guest_resources(struct domain *d)
diff -r e3abede54214 -r 2368e779f89f xen/include/asm-x86/hvm/io.h
--- a/xen/include/asm-x86/hvm/io.h      Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/include/asm-x86/hvm/io.h      Sun Nov 05 20:17:40 2006 +0000
@@ -116,8 +116,9 @@ struct hvm_mmio_handler {
 
 /* global io interception point in HV */
 extern int hvm_io_intercept(ioreq_t *p, int type);
-extern int register_io_handler(unsigned long addr, unsigned long size,
-                               intercept_action_t action, int type);
+extern int register_io_handler(
+    struct domain *d, unsigned long addr, unsigned long size,
+    intercept_action_t action, int type);
 
 static inline int hvm_portio_intercept(ioreq_t *p)
 {
@@ -127,11 +128,11 @@ extern int hvm_mmio_intercept(ioreq_t *p
 extern int hvm_mmio_intercept(ioreq_t *p);
 extern int hvm_buffered_io_intercept(ioreq_t *p);
 
-static inline int register_portio_handler(unsigned long addr,
-                                          unsigned long size,
-                                          intercept_action_t action)
+static inline int register_portio_handler(
+    struct domain *d, unsigned long addr,
+    unsigned long size, intercept_action_t action)
 {
-    return register_io_handler(addr, size, action, HVM_PORTIO);
+    return register_io_handler(d, addr, size, action, HVM_PORTIO);
 }
 
 #if defined(__i386__) || defined(__x86_64__)
diff -r e3abede54214 -r 2368e779f89f xen/include/asm-x86/hvm/support.h
--- a/xen/include/asm-x86/hvm/support.h Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/include/asm-x86/hvm/support.h Sun Nov 05 20:17:40 2006 +0000
@@ -139,7 +139,6 @@ int hvm_copy_to_guest_virt(unsigned long
 int hvm_copy_to_guest_virt(unsigned long vaddr, void *buf, int size);
 int hvm_copy_from_guest_virt(void *buf, unsigned long vaddr, int size);
 
-void hvm_setup_platform(struct domain* d);
 void hvm_print_line(struct vcpu *v, const char c);
 void hlt_timer_fn(void *data);
 
diff -r e3abede54214 -r 2368e779f89f xen/include/asm-x86/hvm/vlapic.h
--- a/xen/include/asm-x86/hvm/vlapic.h  Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/include/asm-x86/hvm/vlapic.h  Sun Nov 05 20:17:40 2006 +0000
@@ -90,6 +90,4 @@ struct vlapic *apic_round_robin(struct d
 
 s_time_t get_apictime_scheduled(struct vcpu *v);
 
-int hvm_apic_support(struct domain *d);
-
 #endif /* __ASM_X86_HVM_VLAPIC_H__ */
diff -r e3abede54214 -r 2368e779f89f xen/include/asm-x86/hvm/vpic.h
--- a/xen/include/asm-x86/hvm/vpic.h    Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/include/asm-x86/hvm/vpic.h    Sun Nov 05 20:17:40 2006 +0000
@@ -71,7 +71,7 @@ void pic_init(struct hvm_virpic *s,
               void (*irq_request)(void *, int),
               void *irq_request_opaque);
 void pic_update_irq(struct hvm_virpic *s); /* Caller must hold s->lock */
-void register_pic_io_hook (void);
+void register_pic_io_hook(struct domain *d);
 int cpu_get_pic_interrupt(struct vcpu *v, int *type);
 int is_periodic_irq(struct vcpu *v, int irq, int type);
 int is_irq_enabled(struct vcpu *v, int irq);
diff -r e3abede54214 -r 2368e779f89f xen/include/public/hvm/params.h
--- a/xen/include/public/hvm/params.h   Sat Nov 04 20:13:22 2006 +0000
+++ b/xen/include/public/hvm/params.h   Sun Nov 05 20:17:40 2006 +0000
@@ -5,7 +5,6 @@
 #define HVM_PARAM_CALLBACK_IRQ 0
 #define HVM_PARAM_STORE_PFN    1
 #define HVM_PARAM_STORE_EVTCHN 2
-#define HVM_PARAM_APIC_ENABLED 3
 #define HVM_PARAM_PAE_ENABLED  4
 #define HVM_PARAM_IOREQ_PFN    5
 #define HVM_PARAM_BUFIOREQ_PFN 6

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [XEN] Replace hvm_setup_platform() with hvm_domain_initialise(), Xen patchbot-unstable <=