[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.