On Sun, May 30, 2021 at 11:06:18AM -0400, Tianyu Lan wrote: > + if (ms_hyperv.ghcb_base) { > + rdmsrl(MSR_AMD64_SEV_ES_GHCB, ghcb_gpa); > + > + ghcb_va = ioremap_cache(ghcb_gpa, HV_HYP_PAGE_SIZE); > + if (!ghcb_va) > + return -ENOMEM; Can you explain this a bit more? We've very much deprecated ioremap_cache in favor of memremap. Why yo you need a __iomem address here? Why do we need the remap here at all? Does the data structure at this address not have any types that we could use a struct for? > + > + rdmsrl(MSR_AMD64_SEV_ES_GHCB, ghcb_gpa); > + ghcb_va = ioremap_cache(ghcb_gpa, HV_HYP_PAGE_SIZE); > + if (!ghcb_va) { This seems to duplicate the above code. > +bool hv_isolation_type_snp(void) > +{ > + return static_branch_unlikely(&isolation_type_snp); > +} > +EXPORT_SYMBOL_GPL(hv_isolation_type_snp); This probably wants a kerneldoc explaining when it should be used.