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

[Xen-devel] [PATCH v6 12/12] xen: make grant table limits boot parameters dom0 only



The boot parameters gnttab_max_frames and gnttab_max_maptrack_frames
are used for dom0 only now, as all other domains require a
XEN_DOMCTL_set_gnttab_limits call now. So make that explicit by
setting the boot values for dom0 only.

Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
 xen/arch/arm/domain_build.c   |  2 +-
 xen/common/grant_table.c      | 35 ++++++++++++++---------------------
 xen/include/xen/grant_table.h |  4 +---
 3 files changed, 16 insertions(+), 25 deletions(-)

diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index d6f9585503..ecfeab0969 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -2097,7 +2097,7 @@ static void __init find_gnttab_region(struct domain *d,
     kinfo->gnttab_size = (_etext - _stext) & PAGE_MASK;
 
     /* Make sure the grant table will fit in the region */
-    if ( (kinfo->gnttab_size >> PAGE_SHIFT) < max_grant_frames )
+    if ( grant_table_verify_size(d, kinfo->gnttab_size >> PAGE_SHIFT) )
         panic("Cannot find a space for the grant table region\n");
 
 #ifdef CONFIG_ARM_32
diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
index dc878a84f9..99eac11a16 100644
--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -85,21 +85,8 @@ struct grant_table {
 #define DEFAULT_MAX_NR_GRANT_FRAMES   32
 #endif
 
-unsigned int __read_mostly max_grant_frames;
-integer_param("gnttab_max_frames", max_grant_frames);
-
-/* The maximum number of grant mappings is defined as a multiplier of the
- * maximum number of grant table entries. This defines the multiplier used.
- * Pretty arbitrary. [POLICY]
- * As gnttab_max_nr_frames has been deprecated, this multiplier is deprecated 
too.
- * New options allow to set max_maptrack_frames and
- * map_grant_table_frames independently.
- */
 #define DEFAULT_MAX_MAPTRACK_FRAMES 1024
 
-static unsigned int __read_mostly max_maptrack_frames;
-integer_param("gnttab_max_maptrack_frames", max_maptrack_frames);
-
 /*
  * Note that the three values below are effectively part of the ABI, even if
  * we don't need to make them a formal part of it: A guest suspended for
@@ -3463,6 +3450,10 @@ grant_table_create(
     struct domain *d)
 {
     struct grant_table *t;
+    static unsigned int max_grant_frames;
+    static unsigned int max_maptrack_frames;
+    integer_param("gnttab_max_frames", max_grant_frames);
+    integer_param("gnttab_max_maptrack_frames", max_maptrack_frames);
 
     if ( (t = xzalloc(struct grant_table)) == NULL )
         return -ENOMEM;
@@ -3470,14 +3461,17 @@ grant_table_create(
     /* Simple stuff. */
     percpu_rwlock_resource_init(&t->lock, grant_rwlock);
     spin_lock_init(&t->maptrack_lock);
-    t->max_grant_frames = max_grant_frames;
-    t->max_maptrack_frames = max_maptrack_frames;
 
     /* Okay, install the structure. */
     d->grant_table = t;
 
     if ( d->domain_id == 0 )
+    {
+        t->max_grant_frames = max_grant_frames ? : DEFAULT_MAX_NR_GRANT_FRAMES;
+        t->max_maptrack_frames =
+                           max_maptrack_frames ? : DEFAULT_MAX_MAPTRACK_FRAMES;
         return grant_table_init(t);
+    }
 
     return 0;
 }
@@ -3855,18 +3849,17 @@ static int __init gnttab_usage_init(void)
 {
     BUILD_BUG_ON(DEFAULT_MAX_MAPTRACK_FRAMES < DEFAULT_MAX_NR_GRANT_FRAMES);
 
-    if ( !max_grant_frames )
-        max_grant_frames = DEFAULT_MAX_NR_GRANT_FRAMES;
-
-    if ( !max_maptrack_frames )
-        max_maptrack_frames = DEFAULT_MAX_MAPTRACK_FRAMES;
-
     register_keyhandler('g', gnttab_usage_print_all,
                         "print grant table usage", 1);
     return 0;
 }
 __initcall(gnttab_usage_init);
 
+bool __init grant_table_verify_size(struct domain *d, unsigned int frames)
+{
+    return d->grant_table->max_grant_frames > frames;
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/xen/include/xen/grant_table.h b/xen/include/xen/grant_table.h
index f3f2fb9ebc..1633364ff3 100644
--- a/xen/include/xen/grant_table.h
+++ b/xen/include/xen/grant_table.h
@@ -30,9 +30,6 @@
 
 struct grant_table;
 
-/* The maximum size of a grant table. */
-extern unsigned int max_grant_frames;
-
 /* Create/destroy per-domain grant table context. */
 int grant_table_create(
     struct domain *d);
@@ -41,6 +38,7 @@ void grant_table_destroy(
 void grant_table_init_vcpu(struct vcpu *v);
 int grant_table_set_limits(struct domain *d, unsigned int grant_frames,
                            unsigned int maptrack_frames);
+bool grant_table_verify_size(struct domain *d, unsigned int frames);
 
 /*
  * Check if domain has active grants and log first 10 of them.
-- 
2.12.3


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.