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

Re: [Xen-devel] [PATCHv2 10/10] xen/balloon: pre-allocate p2m entries for ballooned pages

Hi David,

On 24/07/2015 12:47, David Vrabel wrote:
Pages returned by alloc_xenballooned_pages() will be used for grant
mapping which will call set_phys_to_machine() (in PV guests).

Ballooned pages are set as INVALID_P2M_ENTRY in the p2m and thus may
be using the (shared) missing tables and a subsequent
set_phys_to_machine() will need to allocate new tables.

Since the grant mapping may be done from a context that cannot sleep,
the p2m entries must already be allocated.

Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
  drivers/xen/balloon.c | 8 +++++++-
  1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index fd6970f3..8932d10 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -541,6 +541,7 @@ int alloc_xenballooned_pages(int nr_pages, struct page 
        int pgno = 0;
        struct page *page;
+       int ret = -ENOMEM;


@@ -550,6 +551,11 @@ int alloc_xenballooned_pages(int nr_pages, struct page 
                page = balloon_retrieve(true);
                if (page) {
                        pages[pgno++] = page;
+                       ret = xen_alloc_p2m_entry(page_to_pfn(page));

Don't you want to call this function only when the guest is not using auto-translated physmap?

+                       if (ret < 0)
+                               goto out_undo;
                } else {
                        enum bp_state st;

@@ -576,7 +582,7 @@ int alloc_xenballooned_pages(int nr_pages, struct page 
        free_xenballooned_pages(pgno, pages);
-       return -ENOMEM;
+       return ret;


Julien Grall

Xen-devel mailing list



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