|
@@ -62,7 +62,6 @@
|
|
|
|
|
|
static grant_ref_t **gnttab_list;
|
|
|
static unsigned int nr_grant_frames;
|
|
|
-static unsigned int boot_max_nr_grant_frames;
|
|
|
static int gnttab_free_count;
|
|
|
static grant_ref_t gnttab_free_head;
|
|
|
static DEFINE_SPINLOCK(gnttab_list_lock);
|
|
@@ -827,6 +826,11 @@ static unsigned int __max_nr_grant_frames(void)
|
|
|
unsigned int gnttab_max_grant_frames(void)
|
|
|
{
|
|
|
unsigned int xen_max = __max_nr_grant_frames();
|
|
|
+ static unsigned int boot_max_nr_grant_frames;
|
|
|
+
|
|
|
+ /* First time, initialize it properly. */
|
|
|
+ if (!boot_max_nr_grant_frames)
|
|
|
+ boot_max_nr_grant_frames = __max_nr_grant_frames();
|
|
|
|
|
|
if (xen_max > boot_max_nr_grant_frames)
|
|
|
return boot_max_nr_grant_frames;
|
|
@@ -1227,13 +1231,12 @@ int gnttab_init(void)
|
|
|
|
|
|
gnttab_request_version();
|
|
|
nr_grant_frames = 1;
|
|
|
- boot_max_nr_grant_frames = __max_nr_grant_frames();
|
|
|
|
|
|
/* Determine the maximum number of frames required for the
|
|
|
* grant reference free list on the current hypervisor.
|
|
|
*/
|
|
|
BUG_ON(grefs_per_grant_frame == 0);
|
|
|
- max_nr_glist_frames = (boot_max_nr_grant_frames *
|
|
|
+ max_nr_glist_frames = (gnttab_max_grant_frames() *
|
|
|
grefs_per_grant_frame / RPP);
|
|
|
|
|
|
gnttab_list = kmalloc(max_nr_glist_frames * sizeof(grant_ref_t *),
|