Merge tag 'drm-misc-next-fixes-2020-02-07' of git://anongit.freedesktop.org/drm/drm...
[linux-2.6-microblaze.git] / drivers / hv / hv_balloon.c
index b155d00..a02ce43 100644 (file)
@@ -1217,10 +1217,7 @@ static unsigned int alloc_balloon_pages(struct hv_dynmem_device *dm,
        unsigned int i, j;
        struct page *pg;
 
-       if (num_pages < alloc_unit)
-               return 0;
-
-       for (i = 0; (i * alloc_unit) < num_pages; i++) {
+       for (i = 0; i < num_pages / alloc_unit; i++) {
                if (bl_resp->hdr.size + sizeof(union dm_mem_page_range) >
                        HV_HYP_PAGE_SIZE)
                        return i * alloc_unit;
@@ -1258,7 +1255,7 @@ static unsigned int alloc_balloon_pages(struct hv_dynmem_device *dm,
 
        }
 
-       return num_pages;
+       return i * alloc_unit;
 }
 
 static void balloon_up(struct work_struct *dummy)
@@ -1273,9 +1270,6 @@ static void balloon_up(struct work_struct *dummy)
        long avail_pages;
        unsigned long floor;
 
-       /* The host balloons pages in 2M granularity. */
-       WARN_ON_ONCE(num_pages % PAGES_IN_2M != 0);
-
        /*
         * We will attempt 2M allocations. However, if we fail to
         * allocate 2M chunks, we will go back to PAGE_SIZE allocations.
@@ -1285,14 +1279,13 @@ static void balloon_up(struct work_struct *dummy)
        avail_pages = si_mem_available();
        floor = compute_balloon_floor();
 
-       /* Refuse to balloon below the floor, keep the 2M granularity. */
+       /* Refuse to balloon below the floor. */
        if (avail_pages < num_pages || avail_pages - num_pages < floor) {
                pr_warn("Balloon request will be partially fulfilled. %s\n",
                        avail_pages < num_pages ? "Not enough memory." :
                        "Balloon floor reached.");
 
                num_pages = avail_pages > floor ? (avail_pages - floor) : 0;
-               num_pages -= num_pages % PAGES_IN_2M;
        }
 
        while (!done) {