> > /* TODO: Use bulk call */ > - for (i = 0; i < hpte_count; i++) > - plpar_pte_remove_raw(0, i, 0, &dummy1, &dummy2); > + for (i = 0; i < hpte_count; i++) { > + /* dont remove HPTEs with VRMA mappings */ > + lpar_rc = plpar_pte_remove_raw(H_ANDCOND, i, VRMA_HPTE_B_1TB, > + &dummy1, &dummy2); If you're going to use the B (1T segment) bit instead of the bolted bit, at least define a proper constant in line with the existing naming of the hash table constants in mmu-hash64.h. I would suggest doing the same with the VRMA_MASK/VALUE thing and calling it HPTE_V_VRMA_MASK or something similar. > + if (lpar_rc == H_NOT_FOUND) { > + lpar_rc = plpar_pte_read_raw(0, i, &dword0, &dummy1); > + if (!lpar_rc && > + (((dword0 >> 24) & VRMA_MASK) != VRMA_MASK)) > + /* Can be hpte for 1TB Seg. So remove it */ > + plpar_pte_remove_raw(0, i, 0, &dummy1, &dummy2); > + } > + } > } In addition, I would recommend following Michael's advice and using using the bulk remove Hcall whenever possible. Cheers, Ben.