All of lore.kernel.org
 help / color / mirror / Atom feed
* xc: error: xc_machphys_mfn_list: 83 != 129 when suspending 32GB PV DomU
@ 2011-03-11 18:52 Gianni Tedesco
  2011-03-11 19:21 ` Keir Fraser
  0 siblings, 1 reply; 19+ messages in thread
From: Gianni Tedesco @ 2011-03-11 18:52 UTC (permalink / raw)
  To: Xen Devel; +Cc: Tim Deegan, Keir Fraser

Hi,

I have a 256GB host and run a 32GB 64-bit PV domain (SLES 11) on it.
When I try and suspend the domain, xc barfs with:

 xc: error: xc_machphys_mfn_list: 83 != 129: Internal error
 xc: error: xc_get_m2p_mfns (0 = Success): Internal error
 xc: error: Failed to map live M2P table (0 = Success): Internal error

At first, since dom0 is 32 bit, I suspected the compat layer. However
the hypercall in xen/arch/x86/x86_64/compat/mm.c compat_arch_memory_op()
seems to agree with the numbers:

 (XEN) compat_arch_memory_op returned 0 (nr_extents = 83, max_extents = 129)

>From this I conclude that everything is working OK at the hypercall
layer. However, looking at the code in compat_arch_memory_op() it
appears that the code is failing due to some arcane limits of the compat
subsystem. The following code to establish the variable 'limit' is
causing the loop to exit early:

    limit = (unsigned long)(compat_machine_to_phys_mapping +
        min_t(unsigned long, max_page,
              MACH2PHYS_COMPAT_NR_ENTRIES(current->domain)));
    if ( limit > RDWR_COMPAT_MPT_VIRT_END )
         limit = RDWR_COMPAT_MPT_VIRT_END;
    for ( i = 0, v = RDWR_COMPAT_MPT_VIRT_START, last_mfn = 0;
         (i != xmml.max_extents) && (v < limit);
          i++, v += 1 << L2_PAGETABLE_SHIFT )
    {
        /* do stuff */
    }
    xmml.nr_extents = i;

Further debugging reveals the variables are set as such:
 (XEN) compat_machine_to_phys_mapping = 18446606377058041856
 (XEN) max_page = 67272704
 (XEN) MACH2PHYS_COMPAT_NR_ENTRIES(current->domain) = 43515904
 (XEN) RDWR_COMPAT_MPT_VIRT_START = 18446606377058041856
 (XEN) RDWR_COMPAT_MPT_VIRT_END = 18446606378131783680
 (XEN) limit = 18446606377232105472, (1 << L2_PAGETABLE_SHIFT) = 2097152

Could it be that the compat mach-to-phys conversion table size of 1GB is
too small? Or that there exists some other arbitrary limit on the size
of domains that can be suspended [when using a 32bit dom0] ?

Gianni

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2011-03-15 15:14 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-03-11 18:52 xc: error: xc_machphys_mfn_list: 83 != 129 when suspending 32GB PV DomU Gianni Tedesco
2011-03-11 19:21 ` Keir Fraser
2011-03-14 10:20   ` Ian Campbell
2011-03-14 15:05     ` [PATCH]: Allow tools to map arbitrarily large machphys_mfn_list on 32bit dom0 Gianni Tedesco
2011-03-14 15:08       ` Keir Fraser
2011-03-14 15:11       ` Ian Campbell
2011-03-14 15:19         ` Gianni Tedesco
2011-03-14 15:55           ` Jan Beulich
2011-03-14 16:03             ` Ian Campbell
2011-03-14 16:22               ` Jan Beulich
2011-03-14 16:33                 ` Ian Campbell
2011-03-14 16:54                   ` Keir Fraser
2011-03-14 17:00                     ` Jan Beulich
2011-03-14 17:09                       ` Gianni Tedesco
2011-03-14 16:58                   ` Jan Beulich
2011-03-14 17:11                     ` Gianni Tedesco
2011-03-15 15:00                     ` Ian Campbell
2011-03-15 15:09                       ` Jan Beulich
2011-03-15 15:14                         ` Ian Campbell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.