···423423424424static int __change_page_attr(unsigned long address, struct cpa_data *cpa)425425{426426+ int level, do_split, err;426427 struct page *kpte_page;427427- int level, do_split;428428 pte_t *kpte;429429430430repeat:···476476 * and just change the pte:477477 */478478 do_split = try_preserve_large_page(kpte, address, cpa);479479- if (do_split < 0)480480- return do_split;481481-482479 /*483480 * When the range fits into the existing large page,484481 * return. cp->numpages and cpa->tlbflush have been updated in485482 * try_large_page:486483 */487487- if (do_split == 0)488488- return 0;484484+ if (do_split <= 0)485485+ return do_split;489486490487 /*491488 * We have to split the large page:492489 */493493- do_split = split_large_page(kpte, address);494494- if (do_split)495495- return do_split;496496- cpa->flushtlb = 1;490490+ err = split_large_page(kpte, address);491491+ if (!err) {492492+ cpa->flushtlb = 1;493493+ goto repeat;494494+ }497495498498- goto repeat;496496+ return err;499497}500498501499/**