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] Merge.

# HG changeset patch
# User adsharma@xxxxxxxxxxxxxxxxxxxx
# Node ID 40b887fa79d00b7836248060d51f8d1cc04f5c28
# Parent  9413e453e83b0cd6b3a7593ee4c29ec5d645dfad
# Parent  ba46bd7f5cdf766081edafda7b499129af177e88
Merge.

diff -r 9413e453e83b -r 40b887fa79d0 
linux-2.6-xen-sparse/arch/xen/i386/kernel/smpboot.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/smpboot.c       Fri Aug 12 
17:25:49 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/smpboot.c       Fri Aug 12 
17:35:15 2005
@@ -1353,83 +1353,82 @@
                printk(KERN_ALERT "Error creating hotplug_cpu process!\n");
 }
 
-static void handle_cpus_watch(struct xenbus_watch *, const char *);
-static struct notifier_block xsn_cpus;
+static void handle_vcpu_hotplug_event(struct xenbus_watch *, const char *);
+static struct notifier_block xsn_cpu;
 
 /* xenbus watch struct */
-static struct xenbus_watch cpus_watch = {
-       .node = "cpus",
-       .callback = handle_cpus_watch,
+static struct xenbus_watch cpu_watch = {
+       .node = "cpu",
+       .callback = handle_vcpu_hotplug_event
 };
 
-static int setup_cpus_watcher(struct notifier_block *notifier,
+/* NB: Assumes xenbus_lock is held! */
+static int setup_cpu_watcher(struct notifier_block *notifier,
                              unsigned long event, void *data)
 {
        int err = 0;
 
-       down(&xenbus_lock);
-       err = register_xenbus_watch(&cpus_watch);
-       up(&xenbus_lock);
+       BUG_ON(down_trylock(&xenbus_lock) == 0);
+       err = register_xenbus_watch(&cpu_watch);
 
        if (err) {
-               printk("Failed to set cpus watcher\n");
-       }
+               printk("Failed to register watch on /cpu\n");
+       }
+
        return NOTIFY_DONE;
 }
 
-static void handle_cpus_watch(struct xenbus_watch *watch, const char *node)
+static void handle_vcpu_hotplug_event(struct xenbus_watch *watch, const char 
*node)
 {
        static DECLARE_WORK(vcpu_hotplug_work, __vcpu_hotplug_handler, NULL);
        struct vcpu_hotplug_handler_t *handler = &vcpu_hotplug_handler;
        ssize_t ret;
-       int err, cpu, state;
+       int err, cpu;
+       char state[8];
        char dir[32];
        char *cpustr;
 
-       /* get a pointer to start of cpus/cpu string */
-       if ((cpustr = strstr(node, "cpus/cpu")) != NULL) {
+       /* get a pointer to start of cpu string */
+       if ((cpustr = strstr(node, "cpu/")) != NULL) {
 
                /* find which cpu state changed, note vcpu for handler */
-               sscanf(cpustr, "cpus/cpu%d", &cpu);
+               sscanf(cpustr, "cpu/%d", &cpu);
                handler->vcpu = cpu;
 
                /* calc the dir for xenbus read */
-               sprintf(dir, "cpus/cpu%d", cpu);
-
-               /* make sure watch that was triggered is changes to the online 
key */
-               if ((strcmp(node + strlen(dir), "/online")) != 0)
+               sprintf(dir, "cpu/%d", cpu);
+
+               /* make sure watch that was triggered is changes to the correct 
key */
+               if ((strcmp(node + strlen(dir), "/availability")) != 0)
                        return;
 
                /* get the state value */
-               xenbus_transaction_start("cpus");
-               err = xenbus_scanf(dir, "online", "%d", &state);
+               xenbus_transaction_start("cpu");
+               err = xenbus_scanf(dir, "availability", "%s", state);
                xenbus_transaction_end(0);
 
                if (err != 1) {
                        printk(KERN_ERR
-                              "XENBUS: Unable to read cpu online state\n");
+                              "XENBUS: Unable to read cpu state\n");
                        return;
                }
 
                /* if we detect a state change, take action */
-               switch (state) {
+               if (strcmp(state, "online") == 0) {
                        /* offline -> online */
-               case 1:
                        if (!cpu_isset(cpu, cpu_online_map)) {
                                handler->fn = (void *)&cpu_up;
                                ret = schedule_work(&vcpu_hotplug_work);
-                       }
-                       break;
+                       } 
+               } else if (strcmp(state, "offline") == 0) {
                        /* online -> offline */
-               case 0:
                        if (cpu_isset(cpu, cpu_online_map)) {
                                handler->fn = (void *)&cpu_down;
                                ret = schedule_work(&vcpu_hotplug_work);
-                       }
-                       break;
-               default:
+                       } 
+               } else {
                        printk(KERN_ERR
-                              "XENBUS: unknown state(%d) on node(%s)\n", state,
+                              "XENBUS: unknown state(%s) on node(%s)\n", state,
                               node);
                }
        }
@@ -1438,13 +1437,9 @@
 
 static int __init setup_vcpu_hotplug_event(void)
 {
-       xsn_cpus.notifier_call = setup_cpus_watcher;
-
-       if (xen_start_info.store_evtchn) {
-               setup_cpus_watcher(&xsn_cpus, 0, NULL);
-       } else {
-               register_xenstore_notifier(&xsn_cpus);
-       }
+       xsn_cpu.notifier_call = setup_cpu_watcher;
+
+       register_xenstore_notifier(&xsn_cpu);
 
        return 0;
 }
diff -r 9413e453e83b -r 40b887fa79d0 
linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c  Fri Aug 12 17:25:49 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c  Fri Aug 12 17:35:15 2005
@@ -231,18 +231,32 @@
 {
        long wtm_nsec, xtime_nsec;
        time_t wtm_sec, xtime_sec;
-       u64 tmp, wc_nsec;
+       s64 tmp, wc_nsec;
 
        /* Adjust wall-clock time base based on wall_jiffies ticks. */
        wc_nsec = processed_system_time;
-       wc_nsec += (u64)sec * 1000000000ULL;
-       wc_nsec += (u64)nsec;
+       wc_nsec += (sec * 1000000000LL) + nsec;
        wc_nsec -= (jiffies - wall_jiffies) * (u64)(NSEC_PER_SEC / HZ);
 
        /* Split wallclock base into seconds and nanoseconds. */
-       tmp = wc_nsec;
-       xtime_nsec = do_div(tmp, 1000000000);
-       xtime_sec  = (time_t)tmp;
+       if ( (tmp = wc_nsec) < 0 )
+       {
+               /* -ve UTC offset => -ve seconds, +ve nanoseconds. */
+               tmp = -tmp;
+               xtime_nsec = do_div(tmp, 1000000000);
+               tmp = -tmp;
+               if ( xtime_nsec != 0 )
+               {
+                       xtime_nsec = 1000000000 - xtime_nsec;
+                       tmp--;
+               }
+       }
+       else
+       {
+               /* +ve UTC offset => +ve seconds, +ve nanoseconds. */
+               xtime_nsec = do_div(tmp, 1000000000);
+       }
+       xtime_sec = (time_t)tmp;
 
        wtm_sec  = wall_to_monotonic.tv_sec + (xtime.tv_sec - xtime_sec);
        wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - xtime_nsec);
diff -r 9413e453e83b -r 40b887fa79d0 
linux-2.6-xen-sparse/arch/xen/kernel/reboot.c
--- a/linux-2.6-xen-sparse/arch/xen/kernel/reboot.c     Fri Aug 12 17:25:49 2005
+++ b/linux-2.6-xen-sparse/arch/xen/kernel/reboot.c     Fri Aug 12 17:35:15 2005
@@ -6,6 +6,7 @@
 #include <linux/module.h>
 #include <linux/reboot.h>
 #include <linux/sysrq.h>
+#include <linux/stringify.h>
 #include <asm/irq.h>
 #include <asm/mmu_context.h>
 #include <asm-xen/evtchn.h>
@@ -254,7 +255,8 @@
     char *str;
 
     str = (char *)xenbus_read("control", "shutdown", NULL);
-    if (IS_ERR(str))
+    /* Ignore read errors and recursive shutdown events. */
+    if (IS_ERR(str) || !strcmp(str, __stringify(SHUTDOWN_INVALID)))
         return;
 
     xenbus_printf("control", "shutdown", "%i", SHUTDOWN_INVALID);
diff -r 9413e453e83b -r 40b887fa79d0 
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/Makefile
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/Makefile      Fri Aug 12 
17:25:49 2005
+++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/Makefile      Fri Aug 12 
17:35:15 2005
@@ -36,7 +36,7 @@
 #obj-$(CONFIG_CPU_FREQ)                += cpufreq/
 #obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
 #obj-$(CONFIG_GART_IOMMU)      += pci-gart.o aperture.o
-c-obj-$(CONFIG_DUMMY_IOMMU)    += pci-nommu.o pci-dma.o
+obj-$(CONFIG_DUMMY_IOMMU)      += pci-nommu.o pci-dma.o
 #obj-$(CONFIG_SWIOTLB)         += swiotlb.o
 obj-$(CONFIG_KPROBES)          += kprobes.o
 obj-$(CONFIG_X86_PM_TIMER)     += pmtimer.o
diff -r 9413e453e83b -r 40b887fa79d0 tools/libxc/xc_core.c
--- a/tools/libxc/xc_core.c     Fri Aug 12 17:25:49 2005
+++ b/tools/libxc/xc_core.c     Fri Aug 12 17:35:15 2005
@@ -43,7 +43,7 @@
                goto error_out;
        }
        
-       if ((dump_mem_start = malloc(DUMP_INCREMENT*PAGE_SIZE)) == 0) {
+       if ((dump_mem_start = malloc(DUMP_INCREMENT*PAGE_SIZE)) == NULL) {
                PERROR("Could not allocate dump_mem");
                goto error_out;
        }
@@ -108,9 +108,8 @@
        free(dump_mem_start);
        return 0;
  error_out:
-       if (dump_fd)
+       if (dump_fd != -1)
                close(dump_fd);
-       if (dump_mem_start)
-               free(dump_mem_start);
+       free(dump_mem_start);
        return -1;
 }
diff -r 9413e453e83b -r 40b887fa79d0 tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c      Fri Aug 12 17:25:49 2005
+++ b/tools/libxc/xc_linux_build.c      Fri Aug 12 17:35:15 2005
@@ -318,8 +318,7 @@
     return 0;
 
  error_out:
-    if ( page_array != NULL )
-        free(page_array);
+    free(page_array);
     return -1;
 }
 #else /* x86 */
@@ -616,10 +615,8 @@
     return 0;
 
  error_out:
-    if ( mmu != NULL )
-        free(mmu);
-    if ( page_array != NULL )
-        free(page_array);
+    free(mmu);
+    free(page_array);
     return -1;
 }
 #endif
@@ -719,8 +716,7 @@
         close(initrd_fd);
     if ( initrd_gfd )
         gzclose(initrd_gfd);
-    if ( image != NULL )
-        free(image);
+    free(image);
 
 #ifdef __ia64__
     /* based on new_thread in xen/arch/ia64/domain.c */
@@ -806,8 +802,7 @@
         gzclose(initrd_gfd);
     else if ( initrd_fd >= 0 )
         close(initrd_fd);
-    if ( image != NULL )
-        free(image);
+    free(image);
 
     return -1;
 }
diff -r 9413e453e83b -r 40b887fa79d0 tools/libxc/xc_linux_restore.c
--- a/tools/libxc/xc_linux_restore.c    Fri Aug 12 17:25:49 2005
+++ b/tools/libxc/xc_linux_restore.c    Fri Aug 12 17:35:15 2005
@@ -32,7 +32,7 @@
 #define PPRINTF(_f, _a...)
 #endif
 
-ssize_t
+static ssize_t
 read_exact(int fd, void *buf, size_t count)
 {
     int r = 0, s;
@@ -607,12 +607,9 @@
  out:
     if ( (rc != 0) && (dom != 0) )
         xc_domain_destroy(xc_handle, dom);
-    if ( mmu != NULL )
-        free(mmu);
-    if ( pfn_to_mfn_table != NULL )
-        free(pfn_to_mfn_table);
-    if ( pfn_type != NULL )
-        free(pfn_type);
+    free(mmu);
+    free(pfn_to_mfn_table);
+    free(pfn_type);
 
     DPRINTF("Restore exit with rc=%d\n", rc);
     return rc;
diff -r 9413e453e83b -r 40b887fa79d0 tools/libxc/xc_linux_save.c
--- a/tools/libxc/xc_linux_save.c       Fri Aug 12 17:25:49 2005
+++ b/tools/libxc/xc_linux_save.c       Fri Aug 12 17:35:15 2005
@@ -136,7 +136,7 @@
     return (new->tv_sec * 1000000) + new->tv_usec;
 }
 
-static long long llgettimeofday()
+static long long llgettimeofday( void )
 {
     struct timeval now;
     gettimeofday(&now, NULL);
@@ -312,9 +312,9 @@
 }
 
 
-int suspend_and_state(int xc_handle, int io_fd,        int dom,              
-                      xc_dominfo_t *info,
-                      vcpu_guest_context_t *ctxt)
+static int suspend_and_state(int xc_handle, int io_fd, int dom,              
+                             xc_dominfo_t *info,
+                             vcpu_guest_context_t *ctxt)
 {
     int i=0;
     char ans[30];
@@ -429,7 +429,7 @@
        - that should be sent this iteration (unless later marked as skip); 
        - to skip this iteration because already dirty;
        - to fixup by sending at the end if not already resent; */
-    unsigned long *to_send, *to_skip, *to_fix;
+    unsigned long *to_send = NULL, *to_skip = NULL, *to_fix = NULL;
     
     xc_shadow_control_stats_t stats;
 
@@ -1051,8 +1051,11 @@
     if(live_mfn_to_pfn_table) 
         munmap(live_mfn_to_pfn_table, PAGE_SIZE*1024);
 
-    if (pfn_type != NULL) 
-        free(pfn_type);
+    free(pfn_type);
+    free(pfn_batch);
+    free(to_send);
+    free(to_fix);
+    free(to_skip);
 
     DPRINTF("Save exit rc=%d\n",rc);
     return !!rc;
diff -r 9413e453e83b -r 40b887fa79d0 tools/libxc/xc_load_elf.c
--- a/tools/libxc/xc_load_elf.c Fri Aug 12 17:25:49 2005
+++ b/tools/libxc/xc_load_elf.c Fri Aug 12 17:35:15 2005
@@ -309,8 +309,7 @@
     dsi->v_end = round_pgup(maxva);
 
  out:
-    if ( p != NULL )
-        free(p);
+    free(p);
 
     return 0;
 }
diff -r 9413e453e83b -r 40b887fa79d0 tools/libxc/xc_ptrace.c
--- a/tools/libxc/xc_ptrace.c   Fri Aug 12 17:25:49 2005
+++ b/tools/libxc/xc_ptrace.c   Fri Aug 12 17:35:15 2005
@@ -221,7 +221,7 @@
     return (void *)(((unsigned long)page_virt[cpu]) | (va & BSD_PAGE_MASK));
 
  error_out:
-    return 0;
+    return NULL;
 }
 
 int 
diff -r 9413e453e83b -r 40b887fa79d0 tools/libxc/xc_vmx_build.c
--- a/tools/libxc/xc_vmx_build.c        Fri Aug 12 17:25:49 2005
+++ b/tools/libxc/xc_vmx_build.c        Fri Aug 12 17:35:15 2005
@@ -616,17 +616,15 @@
     return 0;
 
  error_out:
-    if ( mmu != NULL )
-        free(mmu);
-    if ( page_array != NULL )
-        free(page_array);
+    free(mmu);
+    free(page_array);
     return -1;
 }
 
 
 #define VMX_FEATURE_FLAG 0x20
 
-int vmx_identify(void)
+static int vmx_identify(void)
 {
     int eax, ecx;
 
@@ -745,8 +743,7 @@
         close(initrd_fd);
     if ( initrd_gfd )
         gzclose(initrd_gfd);
-    if ( image != NULL )
-        free(image);
+    free(image);
 
     ctxt->flags = VGCF_VMX_GUEST;
     /* FPU is set up to default initial state. */
@@ -801,8 +798,7 @@
         gzclose(initrd_gfd);
     else if ( initrd_fd >= 0 )
         close(initrd_fd);
-    if ( image != NULL )
-        free(image);
+    free(image);
 
     return -1;
 }
diff -r 9413e453e83b -r 40b887fa79d0 tools/python/setup.py
--- a/tools/python/setup.py     Fri Aug 12 17:25:49 2005
+++ b/tools/python/setup.py     Fri Aug 12 17:35:15 2005
@@ -17,7 +17,7 @@
                  XEN_ROOT + "/tools/xenstore",
                  ]
 
-libraries = [ "xc", "xenstore-pic" ]
+libraries = [ "xc", "xenstore" ]
 
 xc = Extension("xc",
                extra_compile_args = extra_compile_args,
diff -r 9413e453e83b -r 40b887fa79d0 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Fri Aug 12 17:25:49 2005
+++ b/tools/python/xen/xend/XendDomainInfo.py   Fri Aug 12 17:35:15 2005
@@ -561,12 +561,12 @@
 
     def exportVCPUSToDB(self, vcpus):
         for v in range(0,vcpus):
-            path = "/cpus/cpu%d"%(v)
+            path = "/cpu/%d"%(v)
             if not self.vcpusdb.has_key(path):
                 self.vcpusdb[path] = self.db.addChild(path)
             db = self.vcpusdb[path]
-            log.debug("writing key online=1 to path %s in store"%(path))
-            db['online'] = "1"
+            log.debug("writing key availability=online to path %s in 
store"%(path))
+            db['availability'] = "online"
             db.saveDB(save=True)
 
     def init_image(self):
@@ -915,7 +915,8 @@
         """
         self.configure_fields()
         self.create_devices()
-        self.create_blkif()
+       if self.image.ostype != 'vmx':
+            self.create_blkif()
 
     def create_blkif(self):
         """Create the block device interface (blkif) for the vm.
@@ -957,16 +958,16 @@
         """
         db = ""
         try:
-            db = self.vcpusdb['/cpus/cpu%d'%(vcpu)]
+            db = self.vcpusdb['/cpu/%d'%(vcpu)]
         except:
             log.error("Invalid VCPU")
             return
 
         if self.store_channel:
             if int(state) == 0:
-                db['online'] = "0"
+                db['availability'] = "offline"
             else:
-                db['online'] = "1"
+                db['availability'] = "online"
 
         db.saveDB(save=True)
 
diff -r 9413e453e83b -r 40b887fa79d0 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Fri Aug 12 17:25:49 2005
+++ b/tools/python/xen/xm/main.py       Fri Aug 12 17:35:15 2005
@@ -289,13 +289,12 @@
     args.insert(0,"bogus")
     destroy.main(args)
             
-# TODO: make reboot do the right thing, right now
-# reboot and shutdown are exactly the same
 def xm_reboot(args):
     arg_check(args,1,"reboot")
     # ugly hack because the opt parser apparently wants
     # the subcommand name just to throw it away!
     args.insert(0,"bogus")
+    args.insert(2,"-R")
     from xen.xm import shutdown
     shutdown.main(args)
 
diff -r 9413e453e83b -r 40b887fa79d0 tools/security/secpol_tool.c
--- a/tools/security/secpol_tool.c      Fri Aug 12 17:25:49 2005
+++ b/tools/security/secpol_tool.c      Fri Aug 12 17:35:15 2005
@@ -612,7 +612,7 @@
 int main(int argc, char **argv)
 {
 
-    int acm_cmd_fd, ret;
+    int acm_cmd_fd, ret = 0;
 
     if (argc < 2)
         usage(argv[0]);
diff -r 9413e453e83b -r 40b887fa79d0 tools/xenstore/Makefile
--- a/tools/xenstore/Makefile   Fri Aug 12 17:25:49 2005
+++ b/tools/xenstore/Makefile   Fri Aug 12 17:35:15 2005
@@ -24,7 +24,7 @@
 TESTFLAGS= -DTESTING
 TESTENV  = XENSTORED_ROOTDIR=$(TESTDIR) XENSTORED_RUNDIR=$(TESTDIR)
 
-all: xen xenstored libxenstore.a libxenstore-pic.a
+all: xen xenstored libxenstore.so
 
 testcode: xen xs_test xenstored_test xs_random xs_dom0_test
 
@@ -53,20 +53,14 @@
 talloc_test.o: talloc.c
        $(COMPILE.c) -o $@ $<
 
-LIB_OBJS     := xs.o xs_lib.o
-
-LIB_OBJS_A   := $(patsubst %.o,libxenstore.a(%.o),$(LIB_OBJS))
-LIB_OBJS_PIC := $(patsubst %.o,libxenstore-pic.a(%.opic),$(LIB_OBJS))
-
-libxenstore.a: $(LIB_OBJS_A)
-
-libxenstore-pic.a: $(LIB_OBJS_PIC)
+libxenstore.so: xs.opic xs_lib.opic
+       $(CC) $(CFLAGS) $(LDFLAGS) -Wl,-soname -Wl,libxenstore.so -shared -o $@ 
$^
 
 clean: testsuite-clean
-       rm -f *.o *.opic *.a
+       rm -f *.o *.opic *.so
        rm -f xen xenstored xs_random xs_stress xs_crashme
        rm -f xs_test xenstored_test xs_dom0_test
-       -$(RM) $(PROG_DEP)
+       $(RM) $(PROG_DEP)
 
 print-dir:
        @echo -n tools/xenstore: 
@@ -117,15 +111,14 @@
 tarball: clean
        cd .. && tar -c -j -v -h -f xenstore.tar.bz2 xenstore/
 
-install: xenstored libxenstore.a libxenstore-pic.a
+install: xenstored libxenstore.so
        $(INSTALL_DIR) -p $(DESTDIR)/var/run/xenstored
        $(INSTALL_DIR) -p $(DESTDIR)/var/lib/xenstored
        $(INSTALL_DIR) -p $(DESTDIR)/usr/sbin
        $(INSTALL_DIR) -p $(DESTDIR)/usr/include
        $(INSTALL_PROG) xenstored $(DESTDIR)/usr/sbin
        $(INSTALL_DIR) -p $(DESTDIR)/usr/$(LIBDIR)
-       $(INSTALL_DATA) libxenstore.a $(DESTDIR)/usr/$(LIBDIR)
-       $(INSTALL_DATA) libxenstore-pic.a $(DESTDIR)/usr/$(LIBDIR)
+       $(INSTALL_DATA) libxenstore.so $(DESTDIR)/usr/$(LIBDIR)
        $(INSTALL_DATA) xs.h $(DESTDIR)/usr/include
        $(INSTALL_DATA) xs_lib.h $(DESTDIR)/usr/include
 
diff -r 9413e453e83b -r 40b887fa79d0 tools/xenstore/xenstored_core.c
--- a/tools/xenstore/xenstored_core.c   Fri Aug 12 17:25:49 2005
+++ b/tools/xenstore/xenstored_core.c   Fri Aug 12 17:35:15 2005
@@ -1587,7 +1587,7 @@
 
 int main(int argc, char *argv[])
 {
-       int opt, *sock, *ro_sock, event_fd, max, tmpout;
+       int opt, *sock, *ro_sock, event_fd, max;
        struct sockaddr_un addr;
        fd_set inset, outset;
        bool dofork = true;
@@ -1673,9 +1673,8 @@
        restore_existing_connections();
 
        if (outputpid) {
-               char buffer[20];
-               sprintf(buffer, "%i\n", getpid());
-               write(tmpout, buffer, strlen(buffer));
+               printf("%i\n", getpid());
+               fflush(stdout);
        }
 
        /* close stdin/stdout now we're ready to accept connections */
diff -r 9413e453e83b -r 40b887fa79d0 xen/arch/ia64/domain.c
--- a/xen/arch/ia64/domain.c    Fri Aug 12 17:25:49 2005
+++ b/xen/arch/ia64/domain.c    Fri Aug 12 17:35:15 2005
@@ -1398,3 +1398,12 @@
 {
        vcpu_pend_interrupt(dom0->vcpu[0],irq);
 }
+
+void vcpu_migrate_cpu(struct vcpu *v, int newcpu)
+{
+       if ( v->processor == newcpu )
+               return;
+
+       set_bit(_VCPUF_cpu_migrated, &v->vcpu_flags);
+       v->processor = newcpu;
+}
diff -r 9413e453e83b -r 40b887fa79d0 xen/arch/ia64/xentime.c
--- a/xen/arch/ia64/xentime.c   Fri Aug 12 17:25:49 2005
+++ b/xen/arch/ia64/xentime.c   Fri Aug 12 17:35:15 2005
@@ -103,7 +103,7 @@
 }
 
 /* Set clock to <secs,usecs> after 00:00:00 UTC, 1 January, 1970. */
-void do_settime(unsigned long secs, unsigned long nsecs, u64 system_time_base)
+void do_settime(s64 secs, u32 nsecs, u64 system_time_base)
 {
 #ifdef  CONFIG_VTI
     u64 _nsecs;
diff -r 9413e453e83b -r 40b887fa79d0 xen/arch/x86/dom0_ops.c
--- a/xen/arch/x86/dom0_ops.c   Fri Aug 12 17:25:49 2005
+++ b/xen/arch/x86/dom0_ops.c   Fri Aug 12 17:35:15 2005
@@ -404,15 +404,17 @@
 
     memcpy(c, &v->arch.guest_context, sizeof(*c));
 
-    /* IOPL privileges are virtualised -- merge back into returned eflags. */
-    BUG_ON(((c->user_regs.eflags & EF_IOPL) != 0) && !(VMX_DOMAIN(v)));
-    c->user_regs.eflags |= v->arch.iopl << 12;
-
     if ( VMX_DOMAIN(v) )
     {
         save_vmx_cpu_user_regs(&c->user_regs);
         __vmread(CR0_READ_SHADOW, &c->ctrlreg[0]);
         __vmread(CR4_READ_SHADOW, &c->ctrlreg[4]);
+    }
+    else
+    {
+        /* IOPL privileges are virtualised: merge back into returned eflags. */
+        BUG_ON((c->user_regs.eflags & EF_IOPL) != 0);
+        c->user_regs.eflags |= v->arch.iopl << 12;
     }
 
     c->flags = 0;
diff -r 9413e453e83b -r 40b887fa79d0 xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Fri Aug 12 17:25:49 2005
+++ b/xen/arch/x86/domain.c     Fri Aug 12 17:35:15 2005
@@ -295,48 +295,23 @@
         l1e_from_page(virt_to_page(gdt_table), PAGE_HYPERVISOR);
 }
 
-void
-arch_migrate_cpu(struct vcpu *v, int newcpu)
-{
-    if ( VMX_DOMAIN(v) && (v->processor != newcpu) ){
-        u64 vmcs_phys_ptr = (u64) virt_to_phys(v->arch.arch_vmx.vmcs);
-        __vmpclear(vmcs_phys_ptr);
+void vcpu_migrate_cpu(struct vcpu *v, int newcpu)
+{
+    if ( v->processor == newcpu )
+        return;
+
+    set_bit(_VCPUF_cpu_migrated, &v->vcpu_flags);
+    v->processor = newcpu;
+
+    if ( VMX_DOMAIN(v) )
+    {
+        __vmpclear(virt_to_phys(v->arch.arch_vmx.vmcs));
         v->arch.schedule_tail = arch_vmx_do_relaunch;
     }
 }
 
 #ifdef CONFIG_VMX
 static int vmx_switch_on;
-
-void arch_vmx_do_resume(struct vcpu *v) 
-{
-    u64 vmcs_phys_ptr = (u64) virt_to_phys(v->arch.arch_vmx.vmcs);
-
-    load_vmcs(&v->arch.arch_vmx, vmcs_phys_ptr);
-    vmx_do_resume(v);
-    reset_stack_and_jump(vmx_asm_do_resume);
-}
-
-void arch_vmx_do_launch(struct vcpu *v) 
-{
-    u64 vmcs_phys_ptr = (u64) virt_to_phys(v->arch.arch_vmx.vmcs);
-
-    load_vmcs(&v->arch.arch_vmx, vmcs_phys_ptr);
-    vmx_do_launch(v);
-    reset_stack_and_jump(vmx_asm_do_launch);
-}
-
-void arch_vmx_do_relaunch(struct vcpu *v)
-{
-    u64 vmcs_phys_ptr = (u64) virt_to_phys(v->arch.arch_vmx.vmcs);
-
-    load_vmcs(&v->arch.arch_vmx, vmcs_phys_ptr);
-    vmx_do_resume(v);
-    vmx_set_host_env(v);
-    v->arch.schedule_tail = arch_vmx_do_resume;
-
-    reset_stack_and_jump(vmx_asm_do_relaunch);
-}
 
 static int vmx_final_setup_guest(
     struct vcpu *v, struct vcpu_guest_context *ctxt)
@@ -368,7 +343,7 @@
 
     v->arch.schedule_tail = arch_vmx_do_launch;
 
-#if defined (__i386)
+#if defined (__i386__)
     v->domain->arch.vmx_platform.real_mode_data = 
         (unsigned long *) regs->esi;
 #endif
diff -r 9413e453e83b -r 40b887fa79d0 xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      Fri Aug 12 17:25:49 2005
+++ b/xen/arch/x86/setup.c      Fri Aug 12 17:35:15 2005
@@ -336,25 +336,24 @@
     /* Find a large enough RAM extent to stash the DOM0 modules. */
     for ( i = 0; ; i++ )
     {
-        if ( (e820.map[i].type == E820_RAM) &&
-             (e820.map[i].size >= modules_length) &&
-             ((e820.map[i].addr + e820.map[i].size) >=
-              (xenheap_phys_end + modules_length)) )
-        {
-            /* Stash as near as possible to the beginning of the RAM extent. */
-            initial_images_start = e820.map[i].addr;
-            if ( initial_images_start < xenheap_phys_end )
-                initial_images_start = xenheap_phys_end;
-            initial_images_end = initial_images_start + modules_length;
-            break;
-        }
-
         if ( i == e820.nr_map )
         {
             printk("Not enough memory to stash the DOM0 kernel image.\n");
             for ( ; ; ) ;
         }
-    }
+        
+        if ( (e820.map[i].type == E820_RAM) &&
+             (e820.map[i].size >= modules_length) &&
+             ((e820.map[i].addr + e820.map[i].size) >=
+              (xenheap_phys_end + modules_length)) )
+            break;
+    }
+
+    /* Stash as near as possible to the beginning of the RAM extent. */
+    initial_images_start = e820.map[i].addr;
+    if ( initial_images_start < xenheap_phys_end )
+        initial_images_start = xenheap_phys_end;
+    initial_images_end = initial_images_start + modules_length;
 
 #if defined(CONFIG_X86_32)
     memmove((void *)initial_images_start,  /* use low mapping */
diff -r 9413e453e83b -r 40b887fa79d0 xen/arch/x86/time.c
--- a/xen/arch/x86/time.c       Fri Aug 12 17:25:49 2005
+++ b/xen/arch/x86/time.c       Fri Aug 12 17:35:15 2005
@@ -43,7 +43,10 @@
 spinlock_t rtc_lock = SPIN_LOCK_UNLOCKED;
 int timer_ack = 0;
 unsigned long volatile jiffies;
-static u32 wc_sec, wc_nsec; /* UTC time at last 'time update'. */
+
+/* UTC time at system boot. */
+static s64 wc_sec;
+static u32 wc_nsec;
 static spinlock_t wc_lock = SPIN_LOCK_UNLOCKED;
 
 struct time_scale {
@@ -693,18 +696,33 @@
 }
 
 /* Set clock to <secs,usecs> after 00:00:00 UTC, 1 January, 1970. */
-void do_settime(unsigned long secs, unsigned long nsecs, u64 system_time_base)
-{
-    u64 x;
-    u32 y, _wc_sec, _wc_nsec;
+void do_settime(s64 secs, u32 nsecs, u64 system_time_base)
+{
+    s64 x;
+    u32 y;
     struct domain *d;
     shared_info_t *s;
 
-    x = (secs * 1000000000ULL) + (u64)nsecs - system_time_base;
-    y = do_div(x, 1000000000);
-
-    wc_sec  = _wc_sec  = (u32)x;
-    wc_nsec = _wc_nsec = (u32)y;
+    x = (secs * 1000000000LL) + (u64)nsecs - system_time_base;
+    if ( x < 0 )
+    {
+        /* -ve UTC offset => -ve seconds, +ve nanoseconds. */
+        x = -x;
+        y = do_div(x, 1000000000);
+        x = -x;
+        if ( y != 0 )
+        {
+            y = 1000000000 - y;
+            x--;
+        }
+    }
+    else
+    {
+        y = do_div(x, 1000000000);
+    }
+
+    wc_sec  = x;
+    wc_nsec = y;
 
     read_lock(&domlist_lock);
     spin_lock(&wc_lock);
@@ -713,8 +731,8 @@
     {
         s = d->shared_info;
         version_update_begin(&s->wc_version);
-        s->wc_sec  = _wc_sec;
-        s->wc_nsec = _wc_nsec;
+        s->wc_sec  = x;
+        s->wc_nsec = y;
         version_update_end(&s->wc_version);
     }
 
diff -r 9413e453e83b -r 40b887fa79d0 xen/arch/x86/vmx_vmcs.c
--- a/xen/arch/x86/vmx_vmcs.c   Fri Aug 12 17:25:49 2005
+++ b/xen/arch/x86/vmx_vmcs.c   Fri Aug 12 17:35:15 2005
@@ -543,6 +543,36 @@
     __vmx_bug(guest_cpu_user_regs());
 }
 
+void arch_vmx_do_resume(struct vcpu *v) 
+{
+    u64 vmcs_phys_ptr = (u64) virt_to_phys(v->arch.arch_vmx.vmcs);
+
+    load_vmcs(&v->arch.arch_vmx, vmcs_phys_ptr);
+    vmx_do_resume(v);
+    reset_stack_and_jump(vmx_asm_do_resume);
+}
+
+void arch_vmx_do_launch(struct vcpu *v) 
+{
+    u64 vmcs_phys_ptr = (u64) virt_to_phys(v->arch.arch_vmx.vmcs);
+
+    load_vmcs(&v->arch.arch_vmx, vmcs_phys_ptr);
+    vmx_do_launch(v);
+    reset_stack_and_jump(vmx_asm_do_launch);
+}
+
+void arch_vmx_do_relaunch(struct vcpu *v)
+{
+    u64 vmcs_phys_ptr = (u64) virt_to_phys(v->arch.arch_vmx.vmcs);
+
+    load_vmcs(&v->arch.arch_vmx, vmcs_phys_ptr);
+    vmx_do_resume(v);
+    vmx_set_host_env(v);
+    v->arch.schedule_tail = arch_vmx_do_resume;
+
+    reset_stack_and_jump(vmx_asm_do_relaunch);
+}
+
 #endif /* CONFIG_VMX */
 
 /*
diff -r 9413e453e83b -r 40b887fa79d0 xen/arch/x86/x86_32/entry.S
--- a/xen/arch/x86/x86_32/entry.S       Fri Aug 12 17:25:49 2005
+++ b/xen/arch/x86/x86_32/entry.S       Fri Aug 12 17:35:15 2005
@@ -183,6 +183,7 @@
 
 #endif
 
+        ALIGN
 restore_all_guest:
         testl $X86_EFLAGS_VM,UREGS_eflags(%esp)
         jnz  restore_all_vm86
diff -r 9413e453e83b -r 40b887fa79d0 xen/arch/x86/x86_32/mm.c
--- a/xen/arch/x86/x86_32/mm.c  Fri Aug 12 17:25:49 2005
+++ b/xen/arch/x86/x86_32/mm.c  Fri Aug 12 17:35:15 2005
@@ -150,7 +150,7 @@
 void subarch_init_memory(struct domain *dom_xen)
 {
     unsigned long m2p_start_mfn;
-    int i;
+    unsigned int i, j;
 
     /*
      * We are rather picky about the layout of 'struct pfn_info'. The
@@ -174,12 +174,12 @@
     {
         m2p_start_mfn = l2e_get_pfn(
             idle_pg_table_l2[l2_linear_offset(RDWR_MPT_VIRT_START) + i]);
-        for ( i = 0; i < L2_PAGETABLE_ENTRIES; i++ )
+        for ( j = 0; j < L2_PAGETABLE_ENTRIES; j++ )
         {
-            frame_table[m2p_start_mfn+i].count_info = PGC_allocated | 1;
+            frame_table[m2p_start_mfn+j].count_info = PGC_allocated | 1;
             /* Ensure it's only mapped read-only by domains. */
-            frame_table[m2p_start_mfn+i].u.inuse.type_info = PGT_gdt_page | 1;
-            page_set_owner(&frame_table[m2p_start_mfn+i], dom_xen);
+            frame_table[m2p_start_mfn+j].u.inuse.type_info = PGT_gdt_page | 1;
+            page_set_owner(&frame_table[m2p_start_mfn+j], dom_xen);
         }
     }
 }
diff -r 9413e453e83b -r 40b887fa79d0 xen/common/dom0_ops.c
--- a/xen/common/dom0_ops.c     Fri Aug 12 17:25:49 2005
+++ b/xen/common/dom0_ops.c     Fri Aug 12 17:35:15 2005
@@ -293,19 +293,17 @@
         v->cpumap = cpumap;
 
         if ( cpumap == CPUMAP_RUNANYWHERE )
+        {
             clear_bit(_VCPUF_cpu_pinned, &v->vcpu_flags);
+        }
         else
         {
             /* pick a new cpu from the usable map */
             int new_cpu = (int)find_first_set_bit(cpumap) % num_online_cpus();
 
             vcpu_pause(v);
-            if ( v->processor != new_cpu ){
-                set_bit(_VCPUF_cpu_migrated, &v->vcpu_flags);
-                arch_migrate_cpu(v, new_cpu);
-            }
+            vcpu_migrate_cpu(v, new_cpu);
             set_bit(_VCPUF_cpu_pinned, &v->vcpu_flags);
-            v->processor = new_cpu;
             vcpu_unpause(v);
         }
 
diff -r 9413e453e83b -r 40b887fa79d0 xen/include/public/dom0_ops.h
--- a/xen/include/public/dom0_ops.h     Fri Aug 12 17:25:49 2005
+++ b/xen/include/public/dom0_ops.h     Fri Aug 12 17:35:15 2005
@@ -133,11 +133,12 @@
 /*
  * Set clock such that it would read <secs,nsecs> after 00:00:00 UTC,
  * 1 January, 1970 if the current system time was <system_time>.
+ * NB. <secs> can be negative, but <nsecs> must always be non-negative.
  */
 #define DOM0_SETTIME          17
 typedef struct {
     /* IN variables. */
-    u32 secs;
+    s64 secs;
     u32 nsecs;
     u64 system_time;
 } dom0_settime_t;
diff -r 9413e453e83b -r 40b887fa79d0 xen/include/public/xen.h
--- a/xen/include/public/xen.h  Fri Aug 12 17:25:49 2005
+++ b/xen/include/public/xen.h  Fri Aug 12 17:35:15 2005
@@ -399,11 +399,12 @@
 
     /*
      * Wallclock time: updated only by control software. Guests should base
-     * their gettimeofday() syscall on this wallclock-base value.
+     * their gettimeofday() syscall on this wallclock-base value, which
+     * indicates UTC when system_time == 0 (i.e., at boot).
      */
     u32 wc_version;      /* Version counter: see vcpu_time_info_t. */
-    u32 wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970.  */
-    u32 wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970.  */
+    u32 wc_nsec;         /* Nsecs since 00:00:00 UTC, Jan 1, 1970.  */
+    s64 wc_sec;          /* Secs  since 00:00:00 UTC, Jan 1, 1970.  */
 
     arch_shared_info_t arch;
 
diff -r 9413e453e83b -r 40b887fa79d0 xen/include/xen/domain.h
--- a/xen/include/xen/domain.h  Fri Aug 12 17:25:49 2005
+++ b/xen/include/xen/domain.h  Fri Aug 12 17:35:15 2005
@@ -14,10 +14,10 @@
 
 extern void arch_do_boot_vcpu(struct vcpu *v);
 
-void arch_migrate_cpu(struct vcpu *v, int newcpu);
+extern int  arch_set_info_guest(
+    struct vcpu *v, struct vcpu_guest_context *c);
 
-extern int  arch_set_info_guest(
-    struct vcpu *d, struct vcpu_guest_context *c);
+extern void vcpu_migrate_cpu(struct vcpu *v, int newcpu);
 
 extern void free_perdomain_pt(struct domain *d);
 
diff -r 9413e453e83b -r 40b887fa79d0 xen/include/xen/time.h
--- a/xen/include/xen/time.h    Fri Aug 12 17:25:49 2005
+++ b/xen/include/xen/time.h    Fri Aug 12 17:35:15 2005
@@ -56,8 +56,7 @@
 #define MICROSECS(_us)  ((s_time_t)((_us) * 1000ULL))
 
 extern void update_dom_time(struct vcpu *v);
-extern void do_settime(
-    unsigned long secs, unsigned long nsecs, u64 system_time_base);
+extern void do_settime(s64 secs, u32 nsecs, u64 system_time_base);
 
 #endif /* __XEN_TIME_H__ */
 
diff -r 9413e453e83b -r 40b887fa79d0 
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/init_task.c
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/init_task.c   Fri Aug 12 
17:25:49 2005
+++ /dev/null   Fri Aug 12 17:35:15 2005
@@ -1,49 +0,0 @@
-#include <linux/mm.h>
-#include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/init.h>
-#include <linux/init_task.h>
-#include <linux/fs.h>
-#include <linux/mqueue.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-#include <asm/desc.h>
-
-static struct fs_struct init_fs = INIT_FS;
-static struct files_struct init_files = INIT_FILES;
-static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
-static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
-struct mm_struct init_mm = INIT_MM(init_mm);
-
-EXPORT_SYMBOL(init_mm);
-
-/*
- * Initial task structure.
- *
- * We need to make sure that this is 8192-byte aligned due to the
- * way process stacks are handled. This is done by having a special
- * "init_task" linker map entry..
- */
-union thread_union init_thread_union 
-       __attribute__((__section__(".data.init_task"))) =
-               { INIT_THREAD_INFO(init_task) };
-
-/*
- * Initial task structure.
- *
- * All other task structs will be allocated on slabs in fork.c
- */
-struct task_struct init_task = INIT_TASK(init_task);
-
-EXPORT_SYMBOL(init_task);
-/*
- * per-CPU TSS segments. Threads are completely 'soft' on Linux,
- * no more per-task TSS's. The TSS size is kept cacheline-aligned
- * so they are allowed to end up in the .data.cacheline_aligned
- * section. Since TSS's are completely CPU-local, we want them
- * on exact cacheline boundaries, to eliminate cacheline ping-pong.
- */ 
-DEFINE_PER_CPU(struct tss_struct, init_tss) ____cacheline_maxaligned_in_smp;
-
-#define ALIGN_TO_4K __attribute__((section(".data.init_task")))

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

<Prev in Thread] Current Thread [Next in Thread>