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-unstable] console: Make initial static console buff

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] console: Make initial static console buffer __initdata.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 22 Apr 2010 17:30:23 -0700
Delivery-date: Thu, 22 Apr 2010 17:31:45 -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 1271954636 -3600
# Node ID 2b97855a629f1d79e1d075a6d2a8b569018b2094
# Parent  a7947fd90328287dd097294b241753063c858597
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/drivers/char/console.c |   31 ++++++++++---------------------
 1 files changed, 10 insertions(+), 21 deletions(-)

diff -r a7947fd90328 -r 2b97855a629f xen/drivers/char/console.c
--- a/xen/drivers/char/console.c        Thu Apr 22 09:44:29 2010 +0100
+++ b/xen/drivers/char/console.c        Thu Apr 22 17:43:56 2010 +0100
@@ -66,11 +66,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;
@@ -597,25 +593,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++ )
@@ -626,8 +617,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-unstable] console: Make initial static console buffer __initdata., Xen patchbot-unstable <=