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] [xen-4.0-testing] console: Make initial static console b

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-4.0-testing] console: Make initial static console buffer __initdata.
From: "Xen patchbot-4.0-testing" <patchbot-4.0-testing@xxxxxxxxxxxxxxxxxxx>
Date: Sun, 25 Apr 2010 00:35:11 -0700
Delivery-date: Sun, 25 Apr 2010 00:35:37 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1272008716 -3600
# Node ID 7d1d4abd8b4403d619c2365226eceeb74e1aca32
# Parent  8851845b99826f78cd7f0c73ddaca0f3879cbaef
console: Make initial static console buffer __initdata.

The previous scheme --- freeing an area of BSS --- did not interact
nicely with device passthrough as IOMMU will not have any Xen BSS area
in guest device pagetables. Hence if the freed BSS space gets
allocated to a guest, DMAs to guest's own memory can fail.

The simple solution here is to always free the static buffer at end of
boot (initmem is specially handled for IOMMUs) and require a
dynamically-allocated buffer always to be created.

Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
xen-unstable changeset:   21225:2b97855a629f
xen-unstable date:        Thu Apr 22 17:43:56 2010 +0100
---
 xen/drivers/char/console.c |   31 ++++++++++---------------------
 1 files changed, 10 insertions(+), 21 deletions(-)

diff -r 8851845b9982 -r 7d1d4abd8b44 xen/drivers/char/console.c
--- a/xen/drivers/char/console.c        Fri Apr 23 08:44:50 2010 +0100
+++ b/xen/drivers/char/console.c        Fri Apr 23 08:45:16 2010 +0100
@@ -65,11 +65,7 @@ size_param("conring_size", opt_conring_s
 
 #define _CONRING_SIZE 16384
 #define CONRING_IDX_MASK(i) ((i)&(conring_size-1))
-static char
-#if _CONRING_SIZE >= PAGE_SIZE
-    __attribute__((__section__(".bss.page_aligned"), __aligned__(PAGE_SIZE)))
-#endif
-    _conring[_CONRING_SIZE];
+static char __initdata _conring[_CONRING_SIZE];
 static char *__read_mostly conring = _conring;
 static uint32_t __read_mostly conring_size = _CONRING_SIZE;
 static uint32_t conringc, conringp;
@@ -596,25 +592,20 @@ void __init console_init_postirq(void)
 void __init console_init_postirq(void)
 {
     char *ring;
-    unsigned int i;
+    unsigned int i, order;
 
     serial_init_postirq();
 
     if ( !opt_conring_size )
         opt_conring_size = num_present_cpus() << (9 + xenlog_lower_thresh);
-    /* Round size down to a power of two. */
-    while ( opt_conring_size & (opt_conring_size - 1) )
-        opt_conring_size &= opt_conring_size - 1;
-    if ( opt_conring_size < conring_size )
-        return;
-    
-    ring = alloc_xenheap_pages(get_order_from_bytes(opt_conring_size), 0);
-    if ( ring == NULL )
-    {
-        printk("Unable to allocate console ring of %u bytes.\n",
-               opt_conring_size);
-        return;
-    }
+
+    order = get_order_from_bytes(max(opt_conring_size, conring_size));
+    while ( (ring = alloc_xenheap_pages(order, 0)) == NULL )
+    {
+        BUG_ON(order == 0);
+        order--;
+    }
+    opt_conring_size = PAGE_SIZE << order;
 
     spin_lock_irq(&console_lock);
     for ( i = conringc ; i != conringp; i++ )
@@ -625,8 +616,6 @@ void __init console_init_postirq(void)
     spin_unlock_irq(&console_lock);
 
     printk("Allocated console ring of %u KiB.\n", opt_conring_size >> 10);
-
-    init_xenheap_pages(__pa(_conring), __pa(_conring + _CONRING_SIZE));
 }
 
 void __init console_endboot(void)

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-4.0-testing] console: Make initial static console buffer __initdata., Xen patchbot-4.0-testing <=