• Vitaly Kuznetsov's avatar
    Drivers: hv: balloon: account for gaps in hot add regions · cb7a5724
    Vitaly Kuznetsov authored
    I'm observing the following hot add requests from the WS2012 host:
    
    hot_add_req: start_pfn = 0x108200 count = 330752
    hot_add_req: start_pfn = 0x158e00 count = 193536
    hot_add_req: start_pfn = 0x188400 count = 239616
    
    As the host doesn't specify hot add regions we're trying to create
    128Mb-aligned region covering the first request, we create the 0x108000 -
    0x160000 region and we add 0x108000 - 0x158e00 memory. The second request
    passes the pfn_covered() check, we enlarge the region to 0x108000 -
    0x190000 and add 0x158e00 - 0x188200 memory. The problem emerges with the
    third request as it starts at 0x188400 so there is a 0x200 gap which is
    not covered. As the end of our region is 0x190000 now it again passes the
    pfn_covered() check were we just adjust the covered_end_pfn and make it
    0x188400 instead of 0x188200 which means that we'll try to online
    0x188200-0x188400 pages but these pages were never assigned to us and we
    crash.
    
    We can't react to such requests by creating new hot add regions as it may
    happen that the whole suggested range falls into the previously identified
    128Mb-aligned area so we'll end up adding nothing or create intersecting
    regions and our current logic doesn't allow that. Instead, create a list of
    such 'gaps' and check for them in the page online callback.
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    cb7a5724
hv_balloon.c 40.9 KB