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

[Xen-changelog] Merged.



# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 06b80b837c92b5d6f6a50a2a569313293659d8f5
# Parent  95584b819b72a87775584323b27731ddab7111f2
# Parent  198828cc103b78c75da6a3a083d2d633c85df39b
Merged.

diff -r 95584b819b72 -r 06b80b837c92 extras/mini-os/events.c
--- a/extras/mini-os/events.c   Tue Dec  6 16:40:43 2005
+++ b/extras/mini-os/events.c   Tue Dec  6 16:40:50 2005
@@ -77,6 +77,7 @@
        /* Try to bind the virq to a port */
        op.cmd = EVTCHNOP_bind_virq;
        op.u.bind_virq.virq = virq;
+       op.u.bind_virq.vcpu = smp_processor_id();
 
        if ( HYPERVISOR_event_channel_op(&op) != 0 )
        {
diff -r 95584b819b72 -r 06b80b837c92 extras/mini-os/hypervisor.c
--- a/extras/mini-os/hypervisor.c       Tue Dec  6 16:40:43 2005
+++ b/extras/mini-os/hypervisor.c       Tue Dec  6 16:40:50 2005
@@ -39,7 +39,7 @@
     unsigned int   l1i, l2i, port;
     int            cpu = 0;
     shared_info_t *s = HYPERVISOR_shared_info;
-    vcpu_info_t   *vcpu_info = &s->vcpu_data[cpu];
+    vcpu_info_t   *vcpu_info = &s->vcpu_info[cpu];
 
     vcpu_info->evtchn_upcall_pending = 0;
     
@@ -71,7 +71,7 @@
 inline void unmask_evtchn(u32 port)
 {
     shared_info_t *s = HYPERVISOR_shared_info;
-    vcpu_info_t *vcpu_info = &s->vcpu_data[smp_processor_id()];
+    vcpu_info_t *vcpu_info = &s->vcpu_info[smp_processor_id()];
 
     synch_clear_bit(port, &s->evtchn_mask[0]);
 
diff -r 95584b819b72 -r 06b80b837c92 extras/mini-os/include/os.h
--- a/extras/mini-os/include/os.h       Tue Dec  6 16:40:43 2005
+++ b/extras/mini-os/include/os.h       Tue Dec  6 16:40:50 2005
@@ -70,7 +70,7 @@
 #define __cli()                                                                
\
 do {                                                                   \
        vcpu_info_t *_vcpu;                                             \
-       _vcpu = &HYPERVISOR_shared_info->vcpu_data[smp_processor_id()]; \
+       _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
        _vcpu->evtchn_upcall_mask = 1;                                  \
        barrier();                                                      \
 } while (0)
@@ -79,7 +79,7 @@
 do {                                                                   \
        vcpu_info_t *_vcpu;                                             \
        barrier();                                                      \
-       _vcpu = &HYPERVISOR_shared_info->vcpu_data[smp_processor_id()]; \
+       _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
        _vcpu->evtchn_upcall_mask = 0;                                  \
        barrier(); /* unmask then check (avoid races) */                \
        if ( unlikely(_vcpu->evtchn_upcall_pending) )                   \
@@ -89,7 +89,7 @@
 #define __save_flags(x)                                                        
\
 do {                                                                   \
        vcpu_info_t *_vcpu;                                             \
-       _vcpu = &HYPERVISOR_shared_info->vcpu_data[smp_processor_id()]; \
+       _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
        (x) = _vcpu->evtchn_upcall_mask;                                \
 } while (0)
 
@@ -97,7 +97,7 @@
 do {                                                                   \
        vcpu_info_t *_vcpu;                                             \
        barrier();                                                      \
-       _vcpu = &HYPERVISOR_shared_info->vcpu_data[smp_processor_id()]; \
+       _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
        if ((_vcpu->evtchn_upcall_mask = (x)) == 0) {                   \
                barrier(); /* unmask then check (avoid races) */        \
                if ( unlikely(_vcpu->evtchn_upcall_pending) )           \
@@ -110,7 +110,7 @@
 #define __save_and_cli(x)                                              \
 do {                                                                   \
        vcpu_info_t *_vcpu;                                             \
-       _vcpu = &HYPERVISOR_shared_info->vcpu_data[smp_processor_id()]; \
+       _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
        (x) = _vcpu->evtchn_upcall_mask;                                \
        _vcpu->evtchn_upcall_mask = 1;                                  \
        barrier();                                                      \
@@ -123,7 +123,7 @@
 #define local_irq_enable()     __sti()
 
 #define irqs_disabled()                        \
-    HYPERVISOR_shared_info->vcpu_data[smp_processor_id()].evtchn_upcall_mask
+    HYPERVISOR_shared_info->vcpu_info[smp_processor_id()].evtchn_upcall_mask
 
 /* This is a barrier for the compiler only, NOT the processor! */
 #define barrier() __asm__ __volatile__("": : :"memory")
diff -r 95584b819b72 -r 06b80b837c92 extras/mini-os/time.c
--- a/extras/mini-os/time.c     Tue Dec  6 16:40:43 2005
+++ b/extras/mini-os/time.c     Tue Dec  6 16:40:50 2005
@@ -73,7 +73,7 @@
 
 static inline int time_values_up_to_date(void)
 {
-       struct vcpu_time_info *src = &HYPERVISOR_shared_info->vcpu_time[0]; 
+       struct vcpu_time_info *src = 
&HYPERVISOR_shared_info->vcpu_info[0].time; 
 
        return (shadow.version == src->version);
 }
@@ -127,7 +127,7 @@
 
 static void get_time_values_from_xen(void)
 {
-       struct vcpu_time_info    *src = &HYPERVISOR_shared_info->vcpu_time[0];
+       struct vcpu_time_info    *src = 
&HYPERVISOR_shared_info->vcpu_info[0].time;
 
        do {
                shadow.version = src->version;
diff -r 95584b819b72 -r 06b80b837c92 extras/mini-os/x86_32.S
--- a/extras/mini-os/x86_32.S   Tue Dec  6 16:40:43 2005
+++ b/extras/mini-os/x86_32.S   Tue Dec  6 16:40:50 2005
@@ -3,7 +3,11 @@
 
 
 .section __xen_guest
-        .asciz  "XEN_VER=3.0,LOADER=generic,PT_MODE_WRITABLE"
+       .ascii  "GUEST_OS=Mini-OS"
+       .ascii  ",XEN_VER=xen-3.0"
+       .ascii  ",LOADER=generic"
+       .ascii  ",PT_MODE_WRITABLE"
+       .byte   0
 .text
 
 .globl _start, shared_info
diff -r 95584b819b72 -r 06b80b837c92 
linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c      Tue Dec  6 
16:40:43 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c      Tue Dec  6 
16:40:50 2005
@@ -76,9 +76,6 @@
         skb_shinfo(_skb)->frag_list = NULL;           \
     } while (0)
 
-/* Allow headroom on each rx pkt for Ethernet header, alignment padding, ... */
-#define RX_HEADROOM 200
-
 static unsigned long rx_pfn_array[NET_RX_RING_SIZE];
 static multicall_entry_t rx_mcl[NET_RX_RING_SIZE+1];
 static mmu_update_t rx_mmu[NET_RX_RING_SIZE];
@@ -153,14 +150,15 @@
 #endif
 
 #ifdef DEBUG
-#define DPRINTK(fmt, args...) \
-       printk(KERN_ALERT "netfront (%s:%d) " fmt, __FUNCTION__, __LINE__, 
##args)
+#define DPRINTK(fmt, args...)                                          \
+       printk(KERN_ALERT "netfront (%s:%d) " fmt, __FUNCTION__,        \
+              __LINE__, ##args)
 #else
 #define DPRINTK(fmt, args...) ((void)0)
 #endif
-#define IPRINTK(fmt, args...) \
+#define IPRINTK(fmt, args...)                          \
        printk(KERN_INFO "netfront: " fmt, ##args)
-#define WPRINTK(fmt, args...) \
+#define WPRINTK(fmt, args...)                          \
        printk(KERN_WARNING "netfront: " fmt, ##args)
 
 
@@ -537,7 +535,13 @@
         */
        batch_target = np->rx_target - (req_prod - np->rx.rsp_cons);
        for (i = skb_queue_len(&np->rx_batch); i < batch_target; i++) {
-               skb = alloc_xen_skb(dev->mtu + RX_HEADROOM);
+               /*
+                * Subtract dev_alloc_skb headroom (16 bytes) and shared info
+                * tailroom then round down to SKB_DATA_ALIGN boundary.
+                */
+               skb = alloc_xen_skb(
+                       (PAGE_SIZE - 16 - sizeof(struct skb_shared_info)) &
+                       (-SKB_DATA_ALIGN(1)));
                if (skb == NULL)
                        break;
                __skb_queue_tail(&np->rx_batch, skb);
@@ -567,7 +571,8 @@
                rx_pfn_array[i] = virt_to_mfn(skb->head);
 
                /* Remove this page from map before passing back to Xen. */
-               set_phys_to_machine(__pa(skb->head) >> PAGE_SHIFT, 
INVALID_P2M_ENTRY);
+               set_phys_to_machine(__pa(skb->head) >> PAGE_SHIFT,
+                                   INVALID_P2M_ENTRY);
 
                MULTI_update_va_mapping(rx_mcl+i, (unsigned long)skb->head,
                                        __pte(0), 0);
@@ -809,36 +814,43 @@
        }
 
        while ((skb = __skb_dequeue(&rxq)) != NULL) {
+               if (skb->len > (dev->mtu + ETH_HLEN)) {
+                       if (net_ratelimit())
+                               printk(KERN_INFO "Received packet too big for "
+                                      "MTU (%d > %d)\n",
+                                      skb->len - ETH_HLEN, dev->mtu);
+                       skb->len  = 0;
+                       skb->tail = skb->data;
+                       init_skb_shinfo(skb);
+                       dev_kfree_skb(skb);
+                       continue;
+               }
+
                /*
                 * Enough room in skbuff for the data we were passed? Also,
                 * Linux expects at least 16 bytes headroom in each rx buffer.
                 */
                if (unlikely(skb->tail > skb->end) || 
                    unlikely((skb->data - skb->head) < 16)) {
-                       nskb = NULL;
-
-                       /* Only copy the packet if it fits in the MTU. */
-                       if (skb->len <= (dev->mtu + ETH_HLEN)) {
-                               if ((skb->tail > skb->end) && net_ratelimit())
+                       if (net_ratelimit()) {
+                               if (skb->tail > skb->end)
                                        printk(KERN_INFO "Received packet "
-                                              "needs %zd bytes more "
-                                              "headroom.\n",
+                                              "is %zd bytes beyond tail.\n",
                                               skb->tail - skb->end);
-
-                               nskb = alloc_xen_skb(skb->len + 2);
-                               if (nskb != NULL) {
-                                       skb_reserve(nskb, 2);
-                                       skb_put(nskb, skb->len);
-                                       memcpy(nskb->data,
-                                              skb->data,
-                                              skb->len);
-                                       nskb->dev = skb->dev;
-                               }
+                               else
+                                       printk(KERN_INFO "Received packet "
+                                              "is %zd bytes before head.\n",
+                                              16 - (skb->data - skb->head));
                        }
-                       else if (net_ratelimit())
-                               printk(KERN_INFO "Received packet too big for "
-                                      "MTU (%d > %d)\n",
-                                      skb->len - ETH_HLEN, dev->mtu);
+
+                       nskb = alloc_xen_skb(skb->len + 2);
+                       if (nskb != NULL) {
+                               skb_reserve(nskb, 2);
+                               skb_put(nskb, skb->len);
+                               memcpy(nskb->data, skb->data, skb->len);
+                               nskb->dev = skb->dev;
+                               nskb->ip_summed = skb->ip_summed;
+                       }
 
                        /* Reinitialise and then destroy the old skbuff. */
                        skb->len  = 0;
diff -r 95584b819b72 -r 06b80b837c92 tools/python/xen/xend/server/tpmif.py
--- a/tools/python/xen/xend/server/tpmif.py     Tue Dec  6 16:40:43 2005
+++ b/tools/python/xen/xend/server/tpmif.py     Tue Dec  6 16:40:50 2005
@@ -50,10 +50,9 @@
 
         result = DevController.configuration(self, devid)
 
-        (instance,) = self.readBackend(devid, 'instance')
+        instance = self.readBackend(devid, 'instance')
 
         if instance:
             result.append(['instance', instance])
-            log.info("configuration: instance=%d." % instance)
 
         return result
diff -r 95584b819b72 -r 06b80b837c92 xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      Tue Dec  6 16:40:43 2005
+++ b/xen/arch/x86/setup.c      Tue Dec  6 16:40:50 2005
@@ -571,7 +571,7 @@
     p += sprintf(p, "xen-%d.%d-x86_64 ", XEN_VERSION, XEN_SUBVERSION);
     if ( hvm_enabled )
     {
-        //p += sprintf(p, "hvm-%d.%d-x86_32 ", XEN_VERSION, XEN_SUBVERSION);
+        p += sprintf(p, "hvm-%d.%d-x86_32 ", XEN_VERSION, XEN_SUBVERSION);
         //p += sprintf(p, "hvm-%d.%d-x86_32p ", XEN_VERSION, XEN_SUBVERSION);
         p += sprintf(p, "hvm-%d.%d-x86_64 ", XEN_VERSION, XEN_SUBVERSION);
     }
@@ -581,7 +581,7 @@
     p++;
 
 #endif
-    
+
     *(p-1) = 0;
 
     BUG_ON((p - info) > sizeof(xen_capabilities_info_t));
diff -r 95584b819b72 -r 06b80b837c92 xen/arch/x86/shadow32.c
--- a/xen/arch/x86/shadow32.c   Tue Dec  6 16:40:43 2005
+++ b/xen/arch/x86/shadow32.c   Tue Dec  6 16:40:50 2005
@@ -2203,7 +2203,7 @@
     }
     
     if ( shadow_mode_external(d) ) {
-        if (write_refs-- == 0) 
+        if (--write_refs == 0) 
             return 0;
 
          // Use the back pointer to locate the shadow page that can contain
diff -r 95584b819b72 -r 06b80b837c92 xen/arch/x86/x86_32/domain_page.c
--- a/xen/arch/x86/x86_32/domain_page.c Tue Dec  6 16:40:43 2005
+++ b/xen/arch/x86/x86_32/domain_page.c Tue Dec  6 16:40:50 2005
@@ -40,10 +40,10 @@
             cache[i] = l1e_empty();
 }
 
-void *map_domain_page(unsigned long pfn)
+void *map_domain_pages(unsigned long pfn, unsigned int order)
 {
     unsigned long va;
-    unsigned int idx, cpu = smp_processor_id();
+    unsigned int idx, i, flags, cpu = smp_processor_id();
     l1_pgentry_t *cache = mapcache;
 #ifndef NDEBUG
     unsigned int flush_count = 0;
@@ -72,10 +72,15 @@
             local_flush_tlb();
             shadow_epoch[cpu] = ++epoch;
         }
+
+        flags = 0;
+        for ( i = 0; i < (1U << order); i++ )
+            flags |= l1e_get_flags(cache[idx+i]);
     }
-    while ( l1e_get_flags(cache[idx]) & _PAGE_PRESENT );
+    while ( flags & _PAGE_PRESENT );
 
-    cache[idx] = l1e_from_pfn(pfn, __PAGE_HYPERVISOR);
+    for ( i = 0; i < (1U << order); i++ )
+        cache[idx+i] = l1e_from_pfn(pfn+i, __PAGE_HYPERVISOR);
 
     spin_unlock(&map_lock);
 
@@ -83,11 +88,12 @@
     return (void *)va;
 }
 
-void unmap_domain_page(void *va)
+void unmap_domain_pages(void *va, unsigned int order)
 {
-    unsigned int idx;
+    unsigned int idx, i;
     ASSERT((void *)MAPCACHE_VIRT_START <= va);
     ASSERT(va < (void *)MAPCACHE_VIRT_END);
     idx = ((unsigned long)va - MAPCACHE_VIRT_START) >> PAGE_SHIFT;
-    l1e_add_flags(mapcache[idx], READY_FOR_TLB_FLUSH);
+    for ( i = 0; i < (1U << order); i++ )
+        l1e_add_flags(mapcache[idx+i], READY_FOR_TLB_FLUSH);
 }
diff -r 95584b819b72 -r 06b80b837c92 xen/include/xen/domain_page.h
--- a/xen/include/xen/domain_page.h     Tue Dec  6 16:40:43 2005
+++ b/xen/include/xen/domain_page.h     Tue Dec  6 16:40:50 2005
@@ -10,19 +10,22 @@
 #include <xen/config.h>
 #include <xen/mm.h>
 
+#define map_domain_page(pfn)   map_domain_pages(pfn,0)
+#define unmap_domain_page(va)  unmap_domain_pages(va,0)
+
 #ifdef CONFIG_DOMAIN_PAGE
 
 /*
- * Maps a given page frame, returning the mmap'ed virtual address. The page is 
- * now accessible until a corresponding call to unmap_domain_page().
+ * Maps a given range of page frames, returning the mapped virtual address. The
+ * pages are now accessible until a corresponding call to unmap_domain_page().
  */
-extern void *map_domain_page(unsigned long pfn);
+extern void *map_domain_pages(unsigned long pfn, unsigned int order);
 
 /*
- * Pass a VA within a page previously mapped with map_domain_page().
- * That page will then be removed from the mapping lists.
+ * Pass a VA within the first page of a range previously mapped with
+ * map_omain_pages(). Those pages will then be removed from the mapping lists.
  */
-extern void unmap_domain_page(void *va);
+extern void unmap_domain_pages(void *va, unsigned int order);
 
 #define DMCACHE_ENTRY_VALID 1U
 #define DMCACHE_ENTRY_HELD  2U
@@ -84,8 +87,8 @@
 
 #else /* !CONFIG_DOMAIN_PAGE */
 
-#define map_domain_page(pfn)                phys_to_virt((pfn)<<PAGE_SHIFT)
-#define unmap_domain_page(va)               ((void)(va))
+#define map_domain_pages(pfn,order)         phys_to_virt((pfn)<<PAGE_SHIFT)
+#define unmap_domain_pages(va,order)        ((void)((void)(va),(void)(order)))
 
 struct domain_mmap_cache { 
 };

_______________________________________________
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®.