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 sos22@xxxxxxxxxxxxxxxxxxxx
# Node ID 707fcf42a5ae8698c9ed1584f3be61bb3138dd14
# Parent  f3f8452978219763b9e5dde244d932cf6a49d9c0

# Parent  1a7383f849896e60f8be631c96fa2b461f502615
Merge.

diff -r f3f845297821 -r 707fcf42a5ae xen/common/event_channel.c
--- a/xen/common/event_channel.c        Thu Jul  7 09:27:25 2005
+++ b/xen/common/event_channel.c        Fri Jul  8 12:22:18 2005
@@ -583,6 +583,29 @@
     return rc;
 }
 
+static long evtchn_rebind(evtchn_rebind_t *bind) 
+{
+    struct domain *d    = current->domain;
+    int            port = bind->port;
+    int            vcpu = bind->vcpu;
+    struct evtchn *chn;
+    long             rc = 0;
+
+    spin_lock(&d->evtchn_lock);
+
+    if ( !port_is_valid(d, port) )
+    {
+        rc = -EINVAL;
+        goto out;
+    }
+
+    chn = evtchn_from_port(d, port);
+    chn->notify_vcpu_id = vcpu;
+
+ out:
+    spin_unlock(&d->evtchn_lock);
+    return rc;
+}
 
 long do_event_channel_op(evtchn_op_t *uop)
 {
@@ -637,6 +660,12 @@
 
     case EVTCHNOP_status:
         rc = evtchn_status(&op.u.status);
+        if ( (rc == 0) && (copy_to_user(uop, &op, sizeof(op)) != 0) )
+            rc = -EFAULT;
+        break;
+
+    case EVTCHNOP_rebind:
+        rc = evtchn_rebind(&op.u.rebind);
         if ( (rc == 0) && (copy_to_user(uop, &op, sizeof(op)) != 0) )
             rc = -EFAULT;
         break;
diff -r f3f845297821 -r 707fcf42a5ae 
linux-2.6.11-xen-sparse/arch/xen/i386/kernel/irq.c
--- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/irq.c        Thu Jul  7 
09:27:25 2005
+++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/irq.c        Fri Jul  8 
12:22:18 2005
@@ -274,7 +274,7 @@
                }
                if (irq_desc[irq].handler->set_affinity)
                        irq_desc[irq].handler->set_affinity(irq, mask);
-               else if (irq_desc[irq].action && !(warned++))
+               else if (irq_desc[irq].action)
                        printk("Cannot set affinity for irq %i\n", irq);
        }
 
diff -r f3f845297821 -r 707fcf42a5ae 
linux-2.6.11-xen-sparse/arch/xen/kernel/evtchn.c
--- a/linux-2.6.11-xen-sparse/arch/xen/kernel/evtchn.c  Thu Jul  7 09:27:25 2005
+++ b/linux-2.6.11-xen-sparse/arch/xen/kernel/evtchn.c  Fri Jul  8 12:22:18 2005
@@ -271,6 +271,38 @@
     return irq;
 }
 
+void rebind_evtchn_from_ipi(int cpu, int newcpu, int ipi)
+{
+    evtchn_op_t op;
+    int evtchn = per_cpu(ipi_to_evtchn, cpu)[ipi];
+
+    spin_lock(&irq_mapping_update_lock);
+
+    op.cmd          = EVTCHNOP_rebind;
+    op.u.rebind.port = evtchn;
+    op.u.rebind.vcpu = newcpu;
+    if ( HYPERVISOR_event_channel_op(&op) != 0 )
+       printk(KERN_INFO "Failed to rebind IPI%d to CPU%d\n",ipi,newcpu);
+
+    spin_unlock(&irq_mapping_update_lock);
+}
+
+void rebind_evtchn_from_irq(int cpu, int newcpu, int irq)
+{
+    evtchn_op_t op;
+    int evtchn = irq_to_evtchn[irq];
+
+    spin_lock(&irq_mapping_update_lock);
+
+    op.cmd          = EVTCHNOP_rebind;
+    op.u.rebind.port = evtchn;
+    op.u.rebind.vcpu = newcpu;
+    if ( HYPERVISOR_event_channel_op(&op) != 0 )
+       printk(KERN_INFO "Failed to rebind IRQ%d to CPU%d\n",irq,newcpu);
+
+    spin_unlock(&irq_mapping_update_lock);
+}
+
 void unbind_ipi_on_cpu_from_irq(int cpu, int ipi)
 {
     evtchn_op_t op;
diff -r f3f845297821 -r 707fcf42a5ae xen/common/schedule.c
--- a/xen/common/schedule.c     Thu Jul  7 09:27:25 2005
+++ b/xen/common/schedule.c     Fri Jul  8 12:22:18 2005
@@ -38,8 +38,8 @@
 #include <xen/mm.h>
 #include <public/sched_ctl.h>
 
-/* opt_sched: scheduler - default to Borrowed Virtual Time */
-static char opt_sched[10] = "bvt";
+/* opt_sched: scheduler - default to SEDF */
+static char opt_sched[10] = "sedf";
 string_param("sched", opt_sched);
 
 #if defined(WAKE_HISTO)
diff -r f3f845297821 -r 707fcf42a5ae tools/misc/cpuperf/Makefile
--- a/tools/misc/cpuperf/Makefile       Thu Jul  7 09:27:25 2005
+++ b/tools/misc/cpuperf/Makefile       Fri Jul  8 12:22:18 2005
@@ -17,8 +17,7 @@
 XEN_ROOT=../../..
 include $(XEN_ROOT)/tools/Rules.mk
 
-CC           = gcc
-CFLAGS       = -Wall -O3 
+CFLAGS      += -Wall -O3 
 
 HDRS         = $(wildcard *.h)
 SRCS         = $(wildcard *.c)
diff -r f3f845297821 -r 707fcf42a5ae tools/firmware/vmxassist/Makefile
--- a/tools/firmware/vmxassist/Makefile Thu Jul  7 09:27:25 2005
+++ b/tools/firmware/vmxassist/Makefile Fri Jul  8 12:22:18 2005
@@ -29,16 +29,13 @@
 #DEFINES=-DDEBUG -DTEST -DTEXTADDR=${TEXTADDR}
 #XENINC=-I/home/leendert/xen/xeno-unstable.bk/xen/include
 
-LD=ld
-CC=gcc
-CPP=cpp -P
-OBJCOPY=objcopy -p -O binary -R .note -R .comment -R .bss -S --gap-fill=0
-CFLAGS=${DEFINES} -I. $(XENINC) -Wall -fno-builtin -O2 -msoft-float
-
-ifeq ($(XEN_COMPILE_ARCH),x86_64)
+LD       = ld
+CC       = gcc
+CPP      = cpp -P
+OBJCOPY  = objcopy -p -O binary -R .note -R .comment -R .bss -S --gap-fill=0
+CFLAGS   = ${DEFINES} -I. $(XENINC) -Wall -fno-builtin -O2 -msoft-float
 CFLAGS  += -m32 -march=i686
-LDFLAGS += -m elf_i386
-endif
+LDFLAGS  = -m elf_i386
 
 OBJECTS = head.o trap.o vm86.o setup.o util.o
 
diff -r f3f845297821 -r 707fcf42a5ae tools/xenstore/Makefile
--- a/tools/xenstore/Makefile   Thu Jul  7 09:27:25 2005
+++ b/tools/xenstore/Makefile   Fri Jul  8 12:22:18 2005
@@ -19,11 +19,11 @@
 BASECFLAGS+= -I$(XEN_ROOT)/xen/include/public
 BASECFLAGS+= -I.
 
-CFLAGS += $(BASECFLAGS)
-LDFLAGS=$(PROFILE) -L$(XEN_LIBXC)
-TESTDIR=`pwd`/testsuite/tmp
-TESTFLAGS=-DTESTING
-TESTENV=XENSTORED_ROOTDIR=$(TESTDIR) XENSTORED_RUNDIR=$(TESTDIR)
+CFLAGS  += $(BASECFLAGS)
+LDFLAGS += $(PROFILE) -L$(XEN_LIBXC)
+TESTDIR  = `pwd`/testsuite/tmp
+TESTFLAGS= -DTESTING
+TESTENV  = XENSTORED_ROOTDIR=$(TESTDIR) XENSTORED_RUNDIR=$(TESTDIR)
 
 all: xen xenstored libxenstore.a libxenstore-pic.a
 
diff -r f3f845297821 -r 707fcf42a5ae tools/Rules.mk
--- a/tools/Rules.mk    Thu Jul  7 09:27:25 2005
+++ b/tools/Rules.mk    Fri Jul  8 12:22:18 2005
@@ -7,12 +7,12 @@
 
 ifeq ($(XEN_TARGET_ARCH),x86_32)
 CFLAGS  += -m32 -march=i686
-LDFLAGS += -m elf_i386
+LDFLAGS += -m32
 endif
 
 ifeq ($(XEN_TARGET_ARCH),x86_64)
 CFLAGS  += -m64
-LDFLAGS += -m elf_x86_64
+LDFLAGS += -m64
 endif
 
 X11_LDPATH = -L/usr/X11R6/$(LIBDIR)
diff -r f3f845297821 -r 707fcf42a5ae tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Thu Jul  7 09:27:25 2005
+++ b/tools/python/xen/xend/XendDomainInfo.py   Fri Jul  8 12:22:18 2005
@@ -423,8 +423,10 @@
             sxpr.append(['cpu_time', self.info['cpu_time']/1e9])    
             sxpr.append(['vcpus', self.info['vcpus']])
             sxpr.append(['cpumap', self.info['cpumap']])
-            sxpr.append(['vcpu_to_cpu', ''.join(map(lambda x: str(x),
-                        self.info['vcpu_to_cpu'][0:self.info['vcpus']]))])
+            # build a string, using '|' to seperate items, show only up
+            # to number of vcpus in domain, and trim the trailing '|'
+            sxpr.append(['vcpu_to_cpu', ''.join(map(lambda x: str(x)+'|',
+                        self.info['vcpu_to_cpu'][0:self.info['vcpus']]))[:-1]])
             
         if self.start_time:
             up_time =  time.time() - self.start_time  
diff -r f3f845297821 -r 707fcf42a5ae xen/include/public/event_channel.h
--- a/xen/include/public/event_channel.h        Thu Jul  7 09:27:25 2005
+++ b/xen/include/public/event_channel.h        Fri Jul  8 12:22:18 2005
@@ -158,6 +158,13 @@
     } u;
 } evtchn_status_t;
 
+#define EVTCHNOP_rebind        8
+typedef struct {
+    /* IN parameters. */
+    u32 port;                         /*  0 */
+    u32 vcpu;                         /*  4 */
+} evtchn_rebind_t; /* 8 bytes */
+
 typedef struct evtchn_op {
     u32 cmd; /* EVTCHNOP_* */
     union {
@@ -169,6 +176,7 @@
         evtchn_close_t            close;
         evtchn_send_t             send;
         evtchn_status_t           status;
+        evtchn_rebind_t           rebind;
     } u;
 } evtchn_op_t;
 
diff -r f3f845297821 -r 707fcf42a5ae docs/misc/hg-cheatsheet.txt
--- a/docs/misc/hg-cheatsheet.txt       Thu Jul  7 09:27:25 2005
+++ b/docs/misc/hg-cheatsheet.txt       Fri Jul  8 12:22:18 2005
@@ -95,6 +95,8 @@
 repository from:
  
   
http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/xen-unstable.hg.tar.gz
+
+  (or copy from /usr/groups/netos/html/xen/downloads/xen-unstable.hg.tar.gz)
 
 Untar the repository on your disk, cd into it, and then pull the most
 recent changes:
@@ -430,4 +432,7 @@
  you have two parents.  Otherwise, the single parent is the changeset
  which you most recently checked out.
 
-
+Show the revision history for a single file
+
+   hg [-v] log <filename>
+
diff -r f3f845297821 -r 707fcf42a5ae 
linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smpboot.c
--- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smpboot.c    Thu Jul  7 
09:27:25 2005
+++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smpboot.c    Fri Jul  8 
12:22:18 2005
@@ -103,6 +103,11 @@
 DEFINE_PER_CPU(int, cpu_state) = { 0 };
 #endif
 
+static DEFINE_PER_CPU(int, resched_irq);
+static DEFINE_PER_CPU(int, callfunc_irq);
+static char resched_name[NR_CPUS][15];
+static char callfunc_name[NR_CPUS][15];
+
 #if 0
 /*
  * Currently trivial. Write the real->protected mode
@@ -1328,6 +1333,10 @@
        while (!cpu_online(cpu))
                cpu_relax();
 
+   /* re-route bound IRQs 0 to cpu */
+   rebind_evtchn_from_irq(0, cpu,  per_cpu(resched_irq, cpu));
+   rebind_evtchn_from_irq(0, cpu, per_cpu(callfunc_irq, cpu));
+
        fixup_irqs(cpu_online_map);
        /* counter the disable in fixup_irqs() */
        local_irq_enable();
@@ -1357,6 +1366,11 @@
 
        cpu_clear(cpu, map);
        fixup_irqs(map);
+
+   /* re-route IRQs from dead vcpu to another */
+   rebind_evtchn_from_irq(cpu, 0,  per_cpu(resched_irq, cpu));
+   rebind_evtchn_from_irq(cpu, 0, per_cpu(callfunc_irq, cpu));
+
        /* It's now safe to remove this processor from the online map */
        cpu_clear(cpu, cpu_online_map);
 
@@ -1514,11 +1528,6 @@
 extern irqreturn_t smp_reschedule_interrupt(int, void *, struct pt_regs *);
 extern irqreturn_t smp_call_function_interrupt(int, void *, struct pt_regs *);
 
-static DEFINE_PER_CPU(int, resched_irq);
-static DEFINE_PER_CPU(int, callfunc_irq);
-static char resched_name[NR_CPUS][15];
-static char callfunc_name[NR_CPUS][15];
-
 void __init smp_intr_init(void)
 {
        int cpu = smp_processor_id();
diff -r f3f845297821 -r 707fcf42a5ae 
linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32
--- a/linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32    Thu Jul 
 7 09:27:25 2005
+++ b/linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32    Fri Jul 
 8 12:22:18 2005
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.11.12-xenU
-# Wed Jul  6 17:44:54 2005
+# Wed Jul  6 22:40:19 2005
 #
 CONFIG_XEN=y
 CONFIG_ARCH_XEN=y
@@ -28,7 +28,6 @@
 #
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
-CONFIG_BROKEN_ON_SMP=y
 CONFIG_LOCK_KERNEL=y
 
 #
@@ -69,6 +68,7 @@
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
 CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
 
 #
 # X86 Processor Configuration
@@ -114,7 +114,10 @@
 CONFIG_X86_USE_PPRO_CHECKSUM=y
 # CONFIG_HPET_TIMER is not set
 # CONFIG_HPET_EMULATE_RTC is not set
-# CONFIG_SMP is not set
+CONFIG_SMP=y
+CONFIG_SMP_ALTERNATIVES=y
+CONFIG_NR_CPUS=8
+# CONFIG_SCHED_SMT is not set
 CONFIG_PREEMPT=y
 CONFIG_PREEMPT_BKL=y
 CONFIG_X86_CPUID=y
@@ -128,6 +131,7 @@
 CONFIG_HIGHMEM=y
 CONFIG_HAVE_DEC_LOCK=y
 # CONFIG_REGPARM is not set
+CONFIG_HOTPLUG_CPU=y
 
 #
 # Kernel hacking
@@ -153,7 +157,9 @@
 # CONFIG_4KSTACKS is not set
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_X86_SMP=y
 CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
 CONFIG_PC=y
 
 #
diff -r f3f845297821 -r 707fcf42a5ae tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Thu Jul  7 09:27:25 2005
+++ b/tools/python/xen/xm/main.py       Fri Jul  8 12:22:18 2005
@@ -410,8 +410,7 @@
         print 'Name              Id  VCPU  CPU  CPUMAP'
         for dom in doms:
             info = server.xend_domain(dom)
-            # XXX this is quite broken for cpu's > 9
-            vcpu_to_cpu = sxp.child_value(info, 'vcpu_to_cpu', 
'?').replace('-1','#')
+            vcpu_to_cpu = sxp.child_value(info, 'vcpu_to_cpu', '-1').split('|')
             cpumap = sxp.child_value(info, 'cpumap', [])
             mask = ((int(sxp.child_value(info, 'vcpus', '0')))**2) - 1
             count = 0
@@ -420,10 +419,7 @@
                 d['name']   = sxp.child_value(info, 'name', '??')
                 d['dom']    = int(sxp.child_value(info, 'id', '-1'))
                 d['vcpu']   = int(count)
-                if cpu == "#":
-                    d['cpu']    = int("-1")
-                else:
-                    d['cpu']    = int(cpu)
+                d['cpu']    = int(cpu)
                 d['cpumap'] = int(cpumap[count])&mask
                 count = count + 1
                 print ("%(name)-16s %(dom)3d  %(vcpu)4d  %(cpu)3d  
0x%(cpumap)x" % d)
@@ -593,15 +589,7 @@
         state = int(args[3])
         dom = server.xend_domain(name)
         id = sxp.child_value(dom, 'id')
-        vcpu_to_cpu = sxp.child_value(dom, 'vcpu_to_cpu', '-1')
-        # only send state change if states differ 
-        try:
-            # (down going up) or (up going down)
-            if (vcpu_to_cpu[vcpu] == "-1" and state == 1) or \
-               (vcpu_to_cpu[vcpu] != "-1" and state == 0):
-                server.xend_domain_vcpu_hotplug(id, vcpu, state)
-        except IndexError:
-            print "Invalid VCPU(%d)"%(vcpu)
+        server.xend_domain_vcpu_hotplug(id, vcpu, state)
 
 xm.prog(ProgVcpuhotplug)
 

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

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