"Roy, Patrick" <[email protected]> writes:
....
> +static int kvm_gmem_folio_zap_direct_map(struct folio *folio)
> +{
> + if (kvm_gmem_folio_no_direct_map(folio))
> + return 0;
> +
> + int r = set_direct_map_valid_noflush(folio_page(folio, 0),
> folio_nr_pages(folio),
> + false);
> +
> + if (!r) {
> + unsigned long addr = (unsigned long) folio_address(folio);
> + folio->private = (void *) ((u64) folio->private &
> KVM_GMEM_FOLIO_NO_DIRECT_MAP);
> + flush_tlb_kernel_range(addr, addr + folio_size(folio));
> + }
> +
> + return r;
> +}
These 'noflush' functions are actually doing flush_tlb_kernel
[-] ∘ flush_tlb_kernel_range
|-[-] ← __change_memory_common
| `-[-] ← set_memory_valid
| `- ← set_direct_map_valid_noflush
-aneesh