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

[Xen-changelog] Merged.



# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 30eb074a560a614eef84584ddd5be430015970fc
# Parent  485871ff1d393fd2ef0281d97032a2af056fb885
# Parent  e13c994bdccbfea46fd702fac8ce844c6fc8496c
Merged.

diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32
--- a/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32        Fri Dec 
 2 15:48:44 2005
+++ b/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32        Fri Dec 
 2 15:48:55 2005
@@ -2724,7 +2724,7 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_SYSFS=y
-CONFIG_DEVFS_FS=y
+# CONFIG_DEVFS_FS is not set
 # CONFIG_DEVFS_MOUNT is not set
 # CONFIG_DEVFS_DEBUG is not set
 CONFIG_DEVPTS_FS_XATTR=y
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_64
--- a/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_64        Fri Dec 
 2 15:48:44 2005
+++ b/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_64        Fri Dec 
 2 15:48:55 2005
@@ -2201,7 +2201,7 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_SYSFS=y
-CONFIG_DEVFS_FS=y
+# CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
 CONFIG_TMPFS=y
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/arch/xen/i386/kernel/smp.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/smp.c   Fri Dec  2 15:48:44 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/smp.c   Fri Dec  2 15:48:55 2005
@@ -27,8 +27,6 @@
 #include <mach_apic.h>
 #endif
 #include <asm-xen/evtchn.h>
-
-#define xxprint(msg) HYPERVISOR_console_io(CONSOLEIO_write, strlen(msg), msg)
 
 /*
  *     Some notes on x86 processor bugs affecting SMP operation:
@@ -542,9 +540,7 @@
         */
        cpu_clear(smp_processor_id(), cpu_online_map);
        local_irq_disable();
-#if 1
-       xxprint("stop_this_cpu disable_local_APIC\n");
-#else
+#if 0
        disable_local_APIC();
 #endif
        if (cpu_data[smp_processor_id()].hlt_works_ok)
@@ -561,9 +557,7 @@
        smp_call_function(stop_this_cpu, NULL, 1, 0);
 
        local_irq_disable();
-#if 1
-       xxprint("smp_send_stop disable_local_APIC\n");
-#else
+#if 0
        disable_local_APIC();
 #endif
        local_irq_enable();
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c   Fri Dec  2 15:48:44 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c   Fri Dec  2 15:48:55 2005
@@ -389,7 +389,6 @@
 }
 
 #ifndef CONFIG_XEN_SHADOW_MODE
-asmlinkage int xprintk(const char *fmt, ...);
 void make_lowmem_page_readonly(void *va)
 {
        pte_t *pte = virt_to_ptep(va);
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/smp.c
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/smp.c Fri Dec  2 15:48:44 2005
+++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/smp.c Fri Dec  2 15:48:55 2005
@@ -30,8 +30,6 @@
 #include <asm/apicdef.h>
 #ifdef CONFIG_XEN
 #include <asm-xen/evtchn.h>
-
-#define xxprint(msg) HYPERVISOR_console_io(CONSOLEIO_write, strlen(msg), msg)
 
 #else
 /*
@@ -379,8 +377,6 @@
        local_irq_disable();
 #ifndef CONFIG_XEN
        disable_local_APIC();
-#else
-       xxprint("stop_this_cpu disable_local_APIC\n");
 #endif
        local_irq_enable(); 
 }
@@ -409,9 +405,7 @@
                spin_unlock(&call_lock);
 
        local_irq_disable();
-#ifdef CONFIG_XEN
-       xxprint("stop_this_cpu disable_local_APIC\n");
-#else
+#ifndef CONFIG_XEN
        disable_local_APIC();
 #endif
        local_irq_enable();
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c        Fri Dec  2 
15:48:44 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c        Fri Dec  2 
15:48:55 2005
@@ -498,10 +498,14 @@
          * notifications if requests are already in flight (lower overheads
          * and promotes batching).
          */
-       if (!__on_blkdev_list(blkif) &&
-           RING_HAS_UNCONSUMED_REQUESTS(blk_ring)) {
-               add_to_blkdev_list_tail(blkif);
-               maybe_trigger_blkio_schedule();
+       mb();
+       if (!__on_blkdev_list(blkif)) {
+               int more_to_do;
+               RING_FINAL_CHECK_FOR_REQUESTS(blk_ring, more_to_do);
+               if (more_to_do) {
+                       add_to_blkdev_list_tail(blkif);
+                       maybe_trigger_blkio_schedule();
+               }
        }
 
        if (notify)
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c      Fri Dec  2 
15:48:44 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c      Fri Dec  2 
15:48:55 2005
@@ -311,7 +311,7 @@
        int err;
 
         if( (info->connected == BLKIF_STATE_CONNECTED) || 
-           (info->connected == BLKIF_STATE_SUSPENDED) ) 
+           (info->connected == BLKIF_STATE_SUSPENDED) )
                return;
 
        DPRINTK("blkfront.c:connect:%s.\n", info->xbdev->otherend);
@@ -327,16 +327,18 @@
                                 info->xbdev->otherend);
                return;
        }
-       
+
         xlvbd_add(sectors, info->vdevice, binfo, sector_size, info);
 
        (void)xenbus_switch_state(info->xbdev, NULL, XenbusStateConnected); 
-       
+
        /* Kick pending requests. */
        spin_lock_irq(&blkif_io_lock);
        info->connected = BLKIF_STATE_CONNECTED;
        kick_pending_request_queues(info);
        spin_unlock_irq(&blkif_io_lock);
+
+       add_disk(info->gd);
 }
 
 /**
@@ -395,16 +397,11 @@
 
 static inline void flush_requests(struct blkfront_info *info)
 {
-       RING_IDX old_prod = info->ring.sring->req_prod;
-
-       RING_PUSH_REQUESTS(&info->ring);
-
-       /*
-         * Send new requests /then/ check if any old requests are still in
-         * flight. If so then there is no need to send a notification.
-         */
-       mb();
-       if (info->ring.sring->rsp_prod == old_prod)
+       int notify;
+
+       RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&info->ring, notify);
+
+       if (notify)
                notify_remote_via_irq(info->irq);
 }
 
@@ -593,7 +590,6 @@
 
        while ((req = elv_next_request(rq)) != NULL) {
                info = req->rq_disk->private_data;
-
                if (!blk_fs_request(req)) {
                        end_request(req, 0);
                        continue;
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/blkfront/block.h
--- a/linux-2.6-xen-sparse/drivers/xen/blkfront/block.h Fri Dec  2 15:48:44 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/block.h Fri Dec  2 15:48:55 2005
@@ -146,6 +146,9 @@
 extern void do_blkif_request (request_queue_t *rq); 
 
 /* Virtual block-device subsystem. */
+/* Note that xlvbd_add doesn't call add_disk for you: you're expected
+   to call add_disk on info->gd once the disk is properly connected
+   up. */
 int xlvbd_add(blkif_sector_t capacity, int device,
              u16 vdisk_info, u16 sector_size, struct blkfront_info *info);
 void xlvbd_del(struct blkfront_info *info);
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c   Fri Dec  2 15:48:44 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c   Fri Dec  2 15:48:55 2005
@@ -261,7 +261,6 @@
        if (vdisk_info & VDISK_CDROM)
                gd->flags |= GENHD_FL_CD;
 
-       add_disk(gd);
        info->gd = gd;
 
        return 0;
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/console/console.c
--- a/linux-2.6-xen-sparse/drivers/xen/console/console.c        Fri Dec  2 
15:48:44 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c        Fri Dec  2 
15:48:55 2005
@@ -55,7 +55,6 @@
 #include <asm-xen/evtchn.h>
 #include <asm-xen/xencons.h>
 
-#include "xencons_ring.h"
 /*
  * Modes:
  *  'xencons=off'  [XC_OFF]:     Console is disabled.
@@ -135,19 +134,21 @@
 static void kcons_write(
        struct console *c, const char *s, unsigned int count)
 {
-       int           i;
-       unsigned long flags;
-
-       spin_lock_irqsave(&xencons_lock, flags);
-    
-       for (i = 0; i < count; i++) {
-               if ((wp - wc) >= (wbuf_size - 1))
-                       break;
-               if ((wbuf[WBUF_MASK(wp++)] = s[i]) == '\n')
-                       wbuf[WBUF_MASK(wp++)] = '\r';
-       }
-
-       __xencons_tx_flush();
+       int           i = 0;
+       unsigned long flags;
+
+       spin_lock_irqsave(&xencons_lock, flags);
+
+       while (i < count) {
+               for (; i < count; i++) {
+                       if ((wp - wc) >= (wbuf_size - 1))
+                               break;
+                       if ((wbuf[WBUF_MASK(wp++)] = s[i]) == '\n')
+                               wbuf[WBUF_MASK(wp++)] = '\r';
+               }
+
+               __xencons_tx_flush();
+       }
 
        spin_unlock_irqrestore(&xencons_lock, flags);
 }
@@ -247,7 +248,6 @@
        if (xen_start_info->flags & SIF_INITDOMAIN)
                return;
 
-
        /* Spin until console data is flushed through to the daemon. */
        while (wc != wp) {
                int sent = 0;
@@ -271,8 +271,7 @@
 static int xencons_priv_irq;
 static char x_char;
 
-/* Non-privileged receive callback. */
-static void xencons_rx(char *buf, unsigned len, struct pt_regs *regs)
+void xencons_rx(char *buf, unsigned len, struct pt_regs *regs)
 {
        int           i;
        unsigned long flags;
@@ -311,10 +310,9 @@
        spin_unlock_irqrestore(&xencons_lock, flags);
 }
 
-/* Privileged and non-privileged transmit worker. */
 static void __xencons_tx_flush(void)
 {
-       int sz, work_done = 0;
+       int sent, sz, work_done = 0;
 
        if (xen_start_info->flags & SIF_INITDOMAIN) {
                if (x_char) {
@@ -340,20 +338,18 @@
                }
 
                while (wc != wp) {
-                       int sent;
                        sz = wp - wc;
                        if (sz > (wbuf_size - WBUF_MASK(wc)))
                                sz = wbuf_size - WBUF_MASK(wc);
                        sent = xencons_ring_send(&wbuf[WBUF_MASK(wc)], sz);
-                       if (sent > 0) {
-                               wc += sent;
-                               work_done = 1;
-                       }
+                       if (sent == 0)
+                               break;
+                       wc += sent;
+                       work_done = 1;
                }
        }
 
-       if (work_done && (xencons_tty != NULL))
-       {
+       if (work_done && (xencons_tty != NULL)) {
                wake_up_interruptible(&xencons_tty->write_wait);
                if ((xencons_tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
                    (xencons_tty->ldisc.write_wakeup != NULL))
@@ -361,31 +357,26 @@
        }
 }
 
+void xencons_tx(void)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&xencons_lock, flags);
+       __xencons_tx_flush();
+       spin_unlock_irqrestore(&xencons_lock, flags);
+}
+
 /* Privileged receive callback and transmit kicker. */
 static irqreturn_t xencons_priv_interrupt(int irq, void *dev_id,
                                           struct pt_regs *regs)
 {
-       static char   rbuf[16];
-       int           i, l;
-       unsigned long flags;
-
-       spin_lock_irqsave(&xencons_lock, flags);
-
-       if (xencons_tty != NULL)
-       {
-               /* Receive work. */
-               while ((l = HYPERVISOR_console_io(
-                       CONSOLEIO_read, 16, rbuf)) > 0)
-                       for (i = 0; i < l; i++)
-                               tty_insert_flip_char(xencons_tty, rbuf[i], 0);
-               if (xencons_tty->flip.count != 0)
-                       tty_flip_buffer_push(xencons_tty);
-       }
-
-       /* Transmit work. */
-       __xencons_tx_flush();
-
-       spin_unlock_irqrestore(&xencons_lock, flags);
+       static char rbuf[16];
+       int         l;
+
+       while ((l = HYPERVISOR_console_io(CONSOLEIO_read, 16, rbuf)) > 0)
+               xencons_rx(rbuf, l, regs);
+
+       xencons_tx();
 
        return IRQ_HANDLED;
 }
@@ -664,7 +655,8 @@
        if ((rc = tty_register_driver(DRV(xencons_driver))) != 0) {
                printk("WARNING: Failed to register Xen virtual "
                       "console driver as '%s%d'\n",
-                      DRV(xencons_driver)->name, 
DRV(xencons_driver)->name_base);
+                      DRV(xencons_driver)->name,
+                      DRV(xencons_driver)->name_base);
                put_tty_driver(xencons_driver);
                xencons_driver = NULL;
                return rc;
@@ -681,8 +673,6 @@
                        "console",
                        NULL);
                BUG_ON(xencons_priv_irq < 0);
-       } else {
-               xencons_ring_register_receiver(xencons_rx);
        }
 
        printk("Xen virtual console successfully installed as %s%d\n",
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/console/xencons_ring.c
--- a/linux-2.6-xen-sparse/drivers/xen/console/xencons_ring.c   Fri Dec  2 
15:48:44 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/console/xencons_ring.c   Fri Dec  2 
15:48:55 2005
@@ -15,15 +15,14 @@
 
 #include <asm/hypervisor.h>
 #include <asm-xen/evtchn.h>
+#include <asm-xen/xencons.h>
 #include <linux/wait.h>
 #include <linux/interrupt.h>
 #include <linux/sched.h>
 #include <linux/err.h>
-#include "xencons_ring.h"
 #include <asm-xen/xen-public/io/console.h>
 
 static int xencons_irq;
-static xencons_receiver_func *xencons_receiver;
 
 static inline struct xencons_interface *xencons_interface(void)
 {
@@ -69,10 +68,8 @@
        BUG_ON((prod - cons) > sizeof(intf->in));
 
        while (cons != prod) {
-               if (xencons_receiver != NULL)
-                       xencons_receiver(
-                               intf->in + MASK_XENCONS_IDX(cons++, intf->in),
-                               1, regs);
+               xencons_rx(intf->in+MASK_XENCONS_IDX(cons,intf->in), 1, regs);
+               cons++;
        }
 
        mb();
@@ -80,12 +77,9 @@
 
        notify_daemon();
 
+       xencons_tx();
+
        return IRQ_HANDLED;
-}
-
-void xencons_ring_register_receiver(xencons_receiver_func *f)
-{
-       xencons_receiver = f;
 }
 
 int xencons_ring_init(void)
@@ -103,7 +97,7 @@
                xen_start_info->console_evtchn,
                handle_input, 0, "xencons", NULL);
        if (err <= 0) {
-               xprintk("XEN console request irq failed %i\n", err);
+               printk(KERN_ERR "XEN console request irq failed %i\n", err);
                return err;
        }
 
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c        Fri Dec  2 
15:48:44 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c        Fri Dec  2 
15:48:55 2005
@@ -25,7 +25,7 @@
                              s8       st,
                              u16      offset,
                              u16      size,
-                             u16      csum_valid);
+                             u16      flags);
 
 static void net_tx_action(unsigned long unused);
 static DECLARE_TASKLET(net_tx_tasklet, net_tx_action, 0);
@@ -301,7 +301,8 @@
                id = RING_GET_REQUEST(&netif->rx, netif->rx.rsp_prod_pvt)->id;
                if (make_rx_response(netif, id, status,
                                     (unsigned long)skb->data & ~PAGE_MASK,
-                                    size, skb->proto_csum_valid) &&
+                                    size, skb->proto_csum_valid ?
+                                    NETRXF_csum_valid : 0) &&
                    (rx_notify[irq] == 0)) {
                        rx_notify[irq] = 1;
                        notify_list[notify_nr++] = irq;
@@ -632,7 +633,7 @@
                  */
                skb->ip_summed        = CHECKSUM_UNNECESSARY;
                skb->proto_csum_valid = 1;
-               skb->proto_csum_blank = txreq.csum_blank;
+               skb->proto_csum_blank = !!(txreq.flags & NETTXF_csum_blank);
 
                netif->stats.rx_bytes += txreq.size;
                netif->stats.rx_packets++;
@@ -706,7 +707,7 @@
                             s8       st,
                             u16      offset,
                             u16      size,
-                            u16      csum_valid)
+                            u16      flags)
 {
        RING_IDX i = netif->rx.rsp_prod_pvt;
        netif_rx_response_t *resp;
@@ -714,7 +715,7 @@
 
        resp = RING_GET_RESPONSE(&netif->rx, i);
        resp->offset     = offset;
-       resp->csum_valid = csum_valid;
+       resp->flags      = flags;
        resp->id         = id;
        resp->status     = (s16)size;
        if (st < 0)
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c      Fri Dec  2 
15:48:44 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c      Fri Dec  2 
15:48:55 2005
@@ -660,7 +660,7 @@
        tx->gref = np->grant_tx_ref[id] = ref;
        tx->offset = (unsigned long)skb->data & ~PAGE_MASK;
        tx->size = skb->len;
-       tx->csum_blank = (skb->ip_summed == CHECKSUM_HW);
+       tx->flags = (skb->ip_summed == CHECKSUM_HW) ? NETTXF_csum_blank : 0;
 
        np->tx.req_prod_pvt = i + 1;
        RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&np->tx, notify);
@@ -775,7 +775,7 @@
                skb->len  = rx->status;
                skb->tail = skb->data + skb->len;
 
-               if ( rx->csum_valid )
+               if ( rx->flags & NETRXF_csum_valid )
                        skb->ip_summed = CHECKSUM_UNNECESSARY;
 
                np->stats.rx_packets++;
@@ -957,7 +957,8 @@
                tx->gref = np->grant_tx_ref[i];
                tx->offset = (unsigned long)skb->data & ~PAGE_MASK;
                tx->size = skb->len;
-               tx->csum_blank = (skb->ip_summed == CHECKSUM_HW);
+               tx->flags = (skb->ip_summed == CHECKSUM_HW) ?
+                       NETTXF_csum_blank : 0;
 
                np->stats.tx_bytes += skb->len;
                np->stats.tx_packets++;
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/tpmback/common.h
--- a/linux-2.6-xen-sparse/drivers/xen/tpmback/common.h Fri Dec  2 15:48:44 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/tpmback/common.h Fri Dec  2 15:48:55 2005
@@ -12,6 +12,7 @@
 #include <linux/slab.h>
 #include <asm-xen/evtchn.h>
 #include <asm-xen/driver_util.h>
+#include <asm-xen/xen-public/grant_table.h>
 #include <asm-xen/xen-public/io/tpmif.h>
 #include <asm/io.h>
 #include <asm/pgalloc.h>
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/tpmfront/tpmfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/tpmfront/tpmfront.c      Fri Dec  2 
15:48:44 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/tpmfront/tpmfront.c      Fri Dec  2 
15:48:55 2005
@@ -44,6 +44,7 @@
 #include <asm/semaphore.h>
 #include <asm/io.h>
 #include <asm-xen/evtchn.h>
+#include <asm-xen/xen-public/grant_table.h>
 #include <asm-xen/xen-public/io/tpmif.h>
 #include <asm/uaccess.h>
 #include <asm-xen/xenbus.h>
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/include/asm-xen/xencons.h
--- a/linux-2.6-xen-sparse/include/asm-xen/xencons.h    Fri Dec  2 15:48:44 2005
+++ b/linux-2.6-xen-sparse/include/asm-xen/xencons.h    Fri Dec  2 15:48:55 2005
@@ -4,4 +4,11 @@
 void xencons_force_flush(void);
 void xencons_resume(void);
 
+/* Interrupt work hooks. Receive data, or kick data out. */
+void xencons_rx(char *buf, unsigned len, struct pt_regs *regs);
+void xencons_tx(void);
+
+int xencons_ring_init(void);
+int xencons_ring_send(const char *data, unsigned len);
+
 #endif /* __ASM_XENCONS_H__ */
diff -r 485871ff1d39 -r 30eb074a560a linux-2.6-xen-sparse/net/core/dev.c
--- a/linux-2.6-xen-sparse/net/core/dev.c       Fri Dec  2 15:48:44 2005
+++ b/linux-2.6-xen-sparse/net/core/dev.c       Fri Dec  2 15:48:55 2005
@@ -1283,6 +1283,11 @@
                        skb->csum = offsetof(struct udphdr, check);
                        break;
                default:
+                       if (net_ratelimit())
+                               printk(KERN_ERR "Attempting to checksum a non-"
+                                      "TCP/UDP packet, dropping a protocol"
+                                      " %d packet", skb->nh.iph->protocol);
+                       rc = -EPROTO;
                        goto out_kfree_skb;
                }
                if ((skb->h.raw + skb->csum + 2) > skb->tail)
diff -r 485871ff1d39 -r 30eb074a560a xen/arch/x86/shadow.c
--- a/xen/arch/x86/shadow.c     Fri Dec  2 15:48:44 2005
+++ b/xen/arch/x86/shadow.c     Fri Dec  2 15:48:55 2005
@@ -2750,10 +2750,10 @@
                     g2mfn, g2mfn);
                 BUG(); /* XXX Deal gracefully with failure. */
             }
-
-            if (!get_shadow_ref(s2mfn))
-                BUG();
         } 
+
+        if (!get_shadow_ref(s2mfn))
+            BUG();
             
         /* Map shadow L2 into shadow L3 */
         spl3e[L3_PAGETABLE_ENTRIES - 1] = l3e_from_pfn(s2mfn, _PAGE_PRESENT);
@@ -3526,10 +3526,11 @@
 
     shadow_lock(d);
 
+    __shadow_sync_va(v, va);
+
     if ( __shadow_get_l1e(v, va, &old_sl1e) )
         if ( l1e_get_flags(old_sl1e) & _PAGE_PRESENT )
-            put_page_from_l1e(old_sl1e, d);
-
+            shadow_put_page_from_l1e(old_sl1e, d);
 
     sl1e = l1e_empty();
     __shadow_set_l1e(v, va, &sl1e);
diff -r 485871ff1d39 -r 30eb074a560a xen/arch/x86/shadow_public.c
--- a/xen/arch/x86/shadow_public.c      Fri Dec  2 15:48:44 2005
+++ b/xen/arch/x86/shadow_public.c      Fri Dec  2 15:48:55 2005
@@ -1425,7 +1425,7 @@
 
 void shadow_l1_normal_pt_update(
     struct domain *d,
-    unsigned long pa, l1_pgentry_t gpte,
+    physaddr_t pa, l1_pgentry_t gpte,
     struct domain_mmap_cache *cache)
 {
     unsigned long sl1mfn;    
@@ -1450,7 +1450,7 @@
 
 void shadow_l2_normal_pt_update(
     struct domain *d,
-    unsigned long pa, l2_pgentry_t gpde,
+    physaddr_t pa, l2_pgentry_t gpde,
     struct domain_mmap_cache *cache)
 {
     unsigned long sl2mfn;
@@ -1475,7 +1475,7 @@
 #if CONFIG_PAGING_LEVELS >= 3
 void shadow_l3_normal_pt_update(
     struct domain *d,
-    unsigned long pa, l3_pgentry_t l3e,
+    physaddr_t pa, l3_pgentry_t l3e,
     struct domain_mmap_cache *cache)
 {
     unsigned long sl3mfn;
@@ -1502,7 +1502,7 @@
 #if CONFIG_PAGING_LEVELS >= 4
 void shadow_l4_normal_pt_update(
     struct domain *d,
-    unsigned long pa, l4_pgentry_t l4e,
+    physaddr_t pa, l4_pgentry_t l4e,
     struct domain_mmap_cache *cache)
 {
     unsigned long sl4mfn;
diff -r 485871ff1d39 -r 30eb074a560a xen/common/grant_table.c
--- a/xen/common/grant_table.c  Fri Dec  2 15:48:44 2005
+++ b/xen/common/grant_table.c  Fri Dec  2 15:48:55 2005
@@ -74,7 +74,7 @@
     grant_ref_t    ref;
     struct domain *ld, *rd;
     struct vcpu   *led;
-    u16            dev_hst_ro_flags;
+    u32            dev_hst_ro_flags;
     int            handle;
     u64            addr;
     unsigned long  frame = 0;
diff -r 485871ff1d39 -r 30eb074a560a xen/drivers/char/ns16550.c
--- a/xen/drivers/char/ns16550.c        Fri Dec  2 15:48:44 2005
+++ b/xen/drivers/char/ns16550.c        Fri Dec  2 15:48:55 2005
@@ -211,7 +211,8 @@
     {
         /* Polled mode. Calculate time to fill RX FIFO and/or empty TX FIFO. */
         bits = uart->data_bits + uart->stop_bits + !!uart->parity;
-        uart->timeout_ms = (bits * port->tx_fifo_size * 1000) / uart->baud;
+        uart->timeout_ms = max_t(
+            unsigned int, 1, (bits * port->tx_fifo_size * 1000) / uart->baud);
         init_ac_timer(&uart->timer, ns16550_poll, port, 0);
         set_ac_timer(&uart->timer, NOW() + MILLISECS(uart->timeout_ms));
     }
diff -r 485871ff1d39 -r 30eb074a560a xen/include/asm-x86/shadow.h
--- a/xen/include/asm-x86/shadow.h      Fri Dec  2 15:48:44 2005
+++ b/xen/include/asm-x86/shadow.h      Fri Dec  2 15:48:55 2005
@@ -131,10 +131,10 @@
 extern void remove_shadow(struct domain *d, unsigned long gpfn, u32 stype);
 
 extern void shadow_l1_normal_pt_update(struct domain *d,
-                                       unsigned long pa, l1_pgentry_t l1e,
+                                       physaddr_t pa, l1_pgentry_t l1e,
                                        struct domain_mmap_cache *cache);
 extern void shadow_l2_normal_pt_update(struct domain *d,
-                                       unsigned long pa, l2_pgentry_t l2e,
+                                       physaddr_t pa, l2_pgentry_t l2e,
                                        struct domain_mmap_cache *cache);
 #if CONFIG_PAGING_LEVELS >= 3
 #include <asm/page-guest32.h>
@@ -148,12 +148,12 @@
 
 extern unsigned long gva_to_gpa(unsigned long gva);
 extern void shadow_l3_normal_pt_update(struct domain *d,
-                                       unsigned long pa, l3_pgentry_t l3e,
+                                       physaddr_t pa, l3_pgentry_t l3e,
                                        struct domain_mmap_cache *cache);
 #endif
 #if CONFIG_PAGING_LEVELS >= 4
 extern void shadow_l4_normal_pt_update(struct domain *d,
-                                       unsigned long pa, l4_pgentry_t l4e,
+                                       physaddr_t pa, l4_pgentry_t l4e,
                                        struct domain_mmap_cache *cache);
 #endif
 extern int shadow_do_update_va_mapping(unsigned long va,
diff -r 485871ff1d39 -r 30eb074a560a xen/include/public/io/blkif.h
--- a/xen/include/public/io/blkif.h     Fri Dec  2 15:48:44 2005
+++ b/xen/include/public/io/blkif.h     Fri Dec  2 15:48:55 2005
@@ -12,11 +12,10 @@
 #include "ring.h"
 
 /*
- * Front->back notifications: When enqueuing a new request, there is no
- * need to send a notification if there are old requests still in flight
- * (that is, old_req_prod != sring->rsp_prod). The backend guarantees to check
- * for new requests after queuing the response for the last in-flight request.
- * (NB. The generic req_event mechanism is not used for blk requests.)
+ * Front->back notifications: When enqueuing a new request, sending a
+ * notification can be made conditional on req_event (i.e., the generic
+ * hold-off mechanism provided by the ring macros). Backends must set
+ * req_event appropriately (e.g., using RING_FINAL_CHECK_FOR_REQUESTS()).
  * 
  * Back->front notifications: When enqueuing a new response, sending a
  * notification can be made conditional on rsp_event (i.e., the generic
diff -r 485871ff1d39 -r 30eb074a560a xen/include/public/io/netif.h
--- a/xen/include/public/io/netif.h     Fri Dec  2 15:48:44 2005
+++ b/xen/include/public/io/netif.h     Fri Dec  2 15:48:55 2005
@@ -18,17 +18,21 @@
  * or rsp_event field in the shared ring.
  */
 
+/* Protocol checksum field is blank in the packet (hardware offload)? */
+#define _NETTXF_csum_blank (0)
+#define  NETTXF_csum_blank (1U<<_NETTXF_csum_blank)
+
 typedef struct netif_tx_request {
     grant_ref_t gref;      /* Reference to buffer page */
-    uint16_t offset:15;    /* Offset within buffer page */
-    uint16_t csum_blank:1; /* Proto csum field blank?   */
+    uint16_t offset;       /* Offset within buffer page */
+    uint16_t flags;        /* NETTXF_* */
     uint16_t id;           /* Echoed in response message. */
     uint16_t size;         /* Packet size in bytes.       */
 } netif_tx_request_t;
 
 typedef struct netif_tx_response {
     uint16_t id;
-    int8_t   status;
+    int16_t  status;       /* NETIF_RSP_* */
 } netif_tx_response_t;
 
 typedef struct {
@@ -36,11 +40,15 @@
     grant_ref_t gref;      /* Reference to incoming granted frame */
 } netif_rx_request_t;
 
+/* Protocol checksum already validated (e.g., performed by hardware)? */
+#define _NETRXF_csum_valid (0)
+#define  NETRXF_csum_valid (1U<<_NETRXF_csum_valid)
+
 typedef struct {
-    uint16_t offset;     /* Offset in page of start of received packet  */
-    uint16_t csum_valid; /* Protocol checksum is validated?       */
     uint16_t id;
-    int16_t  status;     /* -ve: BLKIF_RSP_* ; +ve: Rx'ed pkt size. */
+    uint16_t offset;       /* Offset in page of start of received packet  */
+    uint16_t flags;        /* NETRXF_* */
+    int16_t  status;       /* -ve: BLKIF_RSP_* ; +ve: Rx'ed pkt size. */
 } netif_rx_response_t;
 
 /*
diff -r 485871ff1d39 -r 30eb074a560a xen/include/public/io/ring.h
--- a/xen/include/public/io/ring.h      Fri Dec  2 15:48:44 2005
+++ b/xen/include/public/io/ring.h      Fri Dec  2 15:48:55 2005
@@ -71,6 +71,7 @@
 struct __name##_sring {                                                 \
     RING_IDX req_prod, req_event;                                       \
     RING_IDX rsp_prod, rsp_event;                                       \
+    uint8_t  pad[48];                                                   \
     union __name##_sring_entry ring[1]; /* variable-length */           \
 };                                                                      \
                                                                         \
@@ -114,6 +115,7 @@
 #define SHARED_RING_INIT(_s) do {                                       \
     (_s)->req_prod  = (_s)->rsp_prod  = 0;                              \
     (_s)->req_event = (_s)->rsp_event = 1;                              \
+    memset((_s)->pad, 0, sizeof((_s)->pad));                            \
 } while(0)
 
 #define FRONT_RING_INIT(_r, _s, __size) do {                            \
diff -r 485871ff1d39 -r 30eb074a560a 
linux-2.6-xen-sparse/drivers/xen/console/xencons_ring.h
--- a/linux-2.6-xen-sparse/drivers/xen/console/xencons_ring.h   Fri Dec  2 
15:48:44 2005
+++ /dev/null   Fri Dec  2 15:48:55 2005
@@ -1,23 +0,0 @@
-#ifndef _XENCONS_RING_H
-#define _XENCONS_RING_H
-
-asmlinkage int xprintk(const char *fmt, ...);
-
-int xencons_ring_init(void);
-int xencons_ring_send(const char *data, unsigned len);
-
-typedef void (xencons_receiver_func)(
-       char *buf, unsigned len, struct pt_regs *regs);
-void xencons_ring_register_receiver(xencons_receiver_func *f);
-
-#endif /* _XENCONS_RING_H */
-
-/*
- * Local variables:
- *  c-file-style: "linux"
- *  indent-tabs-mode: t
- *  c-indent-level: 8
- *  c-basic-offset: 8
- *  tab-width: 8
- * End:
- */

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