[AMD Official Use Only - General] >> +int psmash(u64 pfn) >> +{ >> + unsigned long paddr = pfn << PAGE_SHIFT; >> + int ret; >> + >> + if (!pfn_valid(pfn)) >> + return -EINVAL; >> + >> + if (!cpu_feature_enabled(X86_FEATURE_SEV_SNP)) >> + return -ENXIO; >> + >> + /* Binutils version 2.36 supports the PSMASH mnemonic. */ >> + asm volatile(".byte 0xF3, 0x0F, 0x01, 0xFF" >> + : "=a"(ret) >> + : "a"(paddr) >> + : "memory", "cc"); >> + >> + return ret; >> +} >> +EXPORT_SYMBOL_GPL(psmash); >If a function gets an EXPORT_SYMBOL_GPL(), the least we can do is reasonably document it. We don't need full kerneldoc nonsense, but a one-line about what this does would be quite helpful. That goes for all the functions here. >It would also be extremely helpful to have the changelog explain why these functions are exported and how the exports will be used. I will add basic descriptions for all these exported functions. Thanks, Ashish >As a general rule, please push cpu_feature_enabled() checks as early as you reasonably can. They are *VERY* cheap and can even enable the compiler to completely zap code like an #ifdef. There also seem to be a lot of pfn_valid() checks in here that aren't very well thought out. For instance, there's a pfn_valid() check here: +int rmp_make_shared(u64 pfn, enum pg_level level) { + struct rmpupdate val; + + if (!pfn_valid(pfn)) + return -EINVAL; ... + return rmpupdate(pfn, &val); +} and in rmpupdate(): +static int rmpupdate(u64 pfn, struct rmpupdate *val) { + unsigned long paddr = pfn << PAGE_SHIFT; + int ret; + + if (!pfn_valid(pfn)) + return -EINVAL; ... This is (at best) wasteful. Could it be refactored?