void arch_livepatch_revert(const struct livepatch_func *func) { uint32_t *new_ptr; unsigned int len; new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; len = livepatch_insn_len(func); memcpy(new_ptr, func->opaque, len); clean_and_invalidate_dcache_va_range(new_ptr, len); }
void flush_page_to_ram(unsigned long mfn) { void *v = map_domain_page(_mfn(mfn)); clean_and_invalidate_dcache_va_range(v, PAGE_SIZE); unmap_domain_page(v); /* * For some of the instruction cache (such as VIPT), the entire I-Cache * needs to be flushed to guarantee that all the aliases of a given * physical address will be removed from the cache. * Invalidating the I-Cache by VA highly depends on the behavior of the * I-Cache (See D4.9.2 in ARM DDI 0487A.k_iss10775). Instead of using flush * by VA on select platforms, we just flush the entire cache here. */ invalidate_icache(); }