[PATCH v4 4/4] x86/snp: Convert shared memory back to private on kexec
kernel test robot
lkp at intel.com
Wed Apr 10 07:17:12 PDT 2024
Hi Ashish,
kernel test robot noticed the following build errors:
[auto build test ERROR on tip/master]
[also build test ERROR on linus/master next-20240410]
[cannot apply to tip/x86/core tip/x86/mm tip/auto-latest]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Ashish-Kalra/efi-x86-skip-efi_arch_mem_reserve-in-case-of-kexec/20240410-044512
base: tip/master
patch link: https://lore.kernel.org/r/b24885f5495f6b8ba2f9e825fda9188fcbf28231.1712694667.git.ashish.kalra%40amd.com
patch subject: [PATCH v4 4/4] x86/snp: Convert shared memory back to private on kexec
config: x86_64-rhel-8.3-rust (https://download.01.org/0day-ci/archive/20240410/202404102232.UKwWHSTE-lkp@intel.com/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240410/202404102232.UKwWHSTE-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202404102232.UKwWHSTE-lkp@intel.com/
All errors (new ones prefixed by >>):
>> arch/x86/kernel/sev.c:993:14: error: call to undeclared function 'pte_decrypted'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
993 | if (pte && pte_decrypted(*pte) && !pte_none(*pte)) {
| ^
arch/x86/kernel/sev.c:1021:16: error: call to undeclared function 'pte_decrypted'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
1021 | if (!pte || !pte_decrypted(*pte) || pte_none(*pte))
| ^
>> arch/x86/kernel/sev.c:1041:7: error: call to undeclared function 'stop_memory_enc_conversion'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
1041 | if (!stop_memory_enc_conversion(wait_for_lock))
| ^
3 errors generated.
--
>> arch/x86/mm/mem_encrypt_amd.c:471:21: error: no member named 'enc_kexec_stop_conversion' in 'struct x86_guest'
471 | x86_platform.guest.enc_kexec_stop_conversion = snp_kexec_stop_conversion;
| ~~~~~~~~~~~~~~~~~~ ^
>> arch/x86/mm/mem_encrypt_amd.c:472:21: error: no member named 'enc_kexec_unshare_mem' in 'struct x86_guest'
472 | x86_platform.guest.enc_kexec_unshare_mem = snp_kexec_unshare_mem;
| ~~~~~~~~~~~~~~~~~~ ^
2 errors generated.
vim +/pte_decrypted +993 arch/x86/kernel/sev.c
970
971 static void unshare_all_memory(void)
972 {
973 unsigned long addr, end;
974
975 /*
976 * Walk direct mapping and convert all shared memory back to private,
977 */
978
979 addr = PAGE_OFFSET;
980 end = PAGE_OFFSET + get_max_mapped();
981
982 while (addr < end) {
983 unsigned long size;
984 unsigned int level;
985 pte_t *pte;
986
987 pte = lookup_address(addr, &level);
988 size = page_level_size(level);
989
990 /*
991 * pte_none() check is required to skip physical memory holes in direct mapped.
992 */
> 993 if (pte && pte_decrypted(*pte) && !pte_none(*pte)) {
994 int pages = size / PAGE_SIZE;
995
996 if (!make_pte_private(pte, addr, pages, level)) {
997 pr_err("Failed to unshare range %#lx-%#lx\n",
998 addr, addr + size);
999 }
1000
1001 }
1002
1003 addr += size;
1004 }
1005 __flush_tlb_all();
1006
1007 }
1008
1009 static void unshare_all_bss_decrypted_memory(void)
1010 {
1011 unsigned long vaddr, vaddr_end;
1012 unsigned int level;
1013 unsigned int npages;
1014 pte_t *pte;
1015
1016 vaddr = (unsigned long)__start_bss_decrypted;
1017 vaddr_end = (unsigned long)__start_bss_decrypted_unused;
1018 npages = (vaddr_end - vaddr) >> PAGE_SHIFT;
1019 for (; vaddr < vaddr_end; vaddr += PAGE_SIZE) {
1020 pte = lookup_address(vaddr, &level);
1021 if (!pte || !pte_decrypted(*pte) || pte_none(*pte))
1022 continue;
1023
1024 set_pte_enc(pte, level, (void *)vaddr);
1025 }
1026 vaddr = (unsigned long)__start_bss_decrypted;
1027 snp_set_memory_private(vaddr, npages);
1028 }
1029
1030 /* Stop new private<->shared conversions */
1031 void snp_kexec_stop_conversion(bool crash)
1032 {
1033 /*
1034 * Crash kernel reaches here with interrupts disabled: can't wait for
1035 * conversions to finish.
1036 *
1037 * If race happened, just report and proceed.
1038 */
1039 bool wait_for_lock = !crash;
1040
> 1041 if (!stop_memory_enc_conversion(wait_for_lock))
1042 pr_warn("Failed to finish shared<->private conversions\n");
1043 }
1044
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
More information about the kexec
mailing list