kexec kernel will need exactly same mapping for EFI runtime memory ranges. Thus here export the runtime ranges mapping to sysfs, kexec-tools will assemble them and pass to 2nd kernel via setup_data. Introducing a new directory /sys/firmware/efi/runtime-map just like /sys/firmware/memmap. Containing below attribute in each file of that directory: attribute num_pages phys_addr type virt_addr Signed-off-by: Dave Young <dyoung@redhat.com> Tested-by: Toshi Kani <toshi.kani@hp.com> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
		
			
				
	
	
		
			35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
What:		/sys/firmware/efi/runtime-map/
 | 
						|
Date:		December 2013
 | 
						|
Contact:	Dave Young <dyoung@redhat.com>
 | 
						|
Description:	Switching efi runtime services to virtual mode requires
 | 
						|
		that all efi memory ranges which have the runtime attribute
 | 
						|
		bit set to be mapped to virtual addresses.
 | 
						|
 | 
						|
		The efi runtime services can only be switched to virtual
 | 
						|
		mode once without rebooting. The kexec kernel must maintain
 | 
						|
		the same physical to virtual address mappings as the first
 | 
						|
		kernel. The mappings are exported to sysfs so userspace tools
 | 
						|
		can reassemble them and pass them into the kexec kernel.
 | 
						|
 | 
						|
		/sys/firmware/efi/runtime-map/ is the directory the kernel
 | 
						|
		exports that information in.
 | 
						|
 | 
						|
		subdirectories are named with the number of the memory range:
 | 
						|
 | 
						|
			/sys/firmware/efi/runtime-map/0
 | 
						|
			/sys/firmware/efi/runtime-map/1
 | 
						|
			/sys/firmware/efi/runtime-map/2
 | 
						|
			/sys/firmware/efi/runtime-map/3
 | 
						|
			...
 | 
						|
 | 
						|
		Each subdirectory contains five files:
 | 
						|
 | 
						|
		attribute : The attributes of the memory range.
 | 
						|
		num_pages : The size of the memory range in pages.
 | 
						|
		phys_addr : The physical address of the memory range.
 | 
						|
		type      : The type of the memory range.
 | 
						|
		virt_addr : The virtual address of the memory range.
 | 
						|
 | 
						|
		Above values are all hexadecimal numbers with the '0x' prefix.
 | 
						|
Users:		Kexec
 |