• David Gibson's avatar
    powerpc/mm: Handle removing maybe-present bolted HPTEs · 27828f98
    David Gibson authored
    At the moment the hpte_removebolted callback in ppc_md returns void and
    will BUG_ON() if the hpte it's asked to remove doesn't exist in the first
    place.  This is awkward for the case of cleaning up a mapping which was
    partially made before failing.
    
    So, we add a return value to hpte_removebolted, and have it return ENOENT
    in the case that the HPTE to remove didn't exist in the first place.
    
    In the (sole) caller, we propagate errors in hpte_removebolted to its
    caller to handle.  However, we handle ENOENT specially, continuing to
    complete the unmapping over the specified range before returning the error
    to the caller.
    
    This means that htab_remove_mapping() will work sanely on a partially
    present mapping, removing any HPTEs which are present, while also returning
    ENOENT to its caller in case it's important there.
    
    There are two callers of htab_remove_mapping():
       - In remove_section_mapping() we already WARN_ON() any error return,
         which is reasonable - in this case the mapping should be fully
         present
       - In vmemmap_remove_mapping() we BUG_ON() any error.  We change that to
         just a WARN_ON() in the case of ENOENT, since failing to remove a
         mapping that wasn't there in the first place probably shouldn't be
         fatal.
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Reviewed-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    27828f98
init_64.c 12.5 KB