Revert "xen PVonHVM: use E820_Reserved area for shared_info"
This reverts commit 9d02b43dee.
We are doing this b/c on 32-bit PVonHVM with older hypervisors
(Xen 4.1) it ends up bothing up the start_info. This is bad b/c
we use it for the time keeping, and the timekeeping code loops
forever - as the version field never changes. Olaf says to
revert it, so lets do that.
Acked-by: Olaf Hering <olaf@aepfle.de>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
			
			
This commit is contained in:
		
							parent
							
								
									5eb65be2d9
								
							
						
					
					
						commit
						e9daff24a2
					
				| @ -1517,72 +1517,51 @@ asmlinkage void __init xen_start_kernel(void) | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_XEN_PVHVM | ||||
| #define HVM_SHARED_INFO_ADDR 0xFE700000UL | ||||
| static struct shared_info *xen_hvm_shared_info; | ||||
| static unsigned long xen_hvm_sip_phys; | ||||
| static int xen_major, xen_minor; | ||||
| 
 | ||||
| static void xen_hvm_connect_shared_info(unsigned long pfn) | ||||
| void __ref xen_hvm_init_shared_info(void) | ||||
| { | ||||
| 	int cpu; | ||||
| 	struct xen_add_to_physmap xatp; | ||||
| 	static struct shared_info *shared_info_page = 0; | ||||
| 
 | ||||
| 	if (!shared_info_page) | ||||
| 		shared_info_page = (struct shared_info *) | ||||
| 			extend_brk(PAGE_SIZE, PAGE_SIZE); | ||||
| 	xatp.domid = DOMID_SELF; | ||||
| 	xatp.idx = 0; | ||||
| 	xatp.space = XENMAPSPACE_shared_info; | ||||
| 	xatp.gpfn = pfn; | ||||
| 	xatp.gpfn = __pa(shared_info_page) >> PAGE_SHIFT; | ||||
| 	if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp)) | ||||
| 		BUG(); | ||||
| 
 | ||||
| } | ||||
| static void __init xen_hvm_set_shared_info(struct shared_info *sip) | ||||
| { | ||||
| 	int cpu; | ||||
| 
 | ||||
| 	HYPERVISOR_shared_info = sip; | ||||
| 	HYPERVISOR_shared_info = (struct shared_info *)shared_info_page; | ||||
| 
 | ||||
| 	/* xen_vcpu is a pointer to the vcpu_info struct in the shared_info
 | ||||
| 	 * page, we use it in the event channel upcall and in some pvclock | ||||
| 	 * related functions. We don't need the vcpu_info placement | ||||
| 	 * optimizations because we don't use any pv_mmu or pv_irq op on | ||||
| 	 * HVM. */ | ||||
| 	for_each_online_cpu(cpu) | ||||
| 	 * HVM. | ||||
| 	 * When xen_hvm_init_shared_info is run at boot time only vcpu 0 is | ||||
| 	 * online but xen_hvm_init_shared_info is run at resume time too and | ||||
| 	 * in that case multiple vcpus might be online. */ | ||||
| 	for_each_online_cpu(cpu) { | ||||
| 		per_cpu(xen_vcpu, cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu]; | ||||
| } | ||||
| 
 | ||||
| /* Reconnect the shared_info pfn to a (new) mfn */ | ||||
| void xen_hvm_resume_shared_info(void) | ||||
| { | ||||
| 	xen_hvm_connect_shared_info(xen_hvm_sip_phys >> PAGE_SHIFT); | ||||
| } | ||||
| 
 | ||||
| /* Xen tools prior to Xen 4 do not provide a E820_Reserved area for guest usage.
 | ||||
|  * On these old tools the shared info page will be placed in E820_Ram. | ||||
|  * Xen 4 provides a E820_Reserved area at 0xFC000000, and this code expects | ||||
|  * that nothing is mapped up to HVM_SHARED_INFO_ADDR. | ||||
|  * Xen 4.3+ provides an explicit 1MB area at HVM_SHARED_INFO_ADDR which is used | ||||
|  * here for the shared info page. */ | ||||
| static void __init xen_hvm_init_shared_info(void) | ||||
| { | ||||
| 	if (xen_major < 4) { | ||||
| 		xen_hvm_shared_info = extend_brk(PAGE_SIZE, PAGE_SIZE); | ||||
| 		xen_hvm_sip_phys = __pa(xen_hvm_shared_info); | ||||
| 	} else { | ||||
| 		xen_hvm_sip_phys = HVM_SHARED_INFO_ADDR; | ||||
| 		set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_hvm_sip_phys); | ||||
| 		xen_hvm_shared_info = | ||||
| 		(struct shared_info *)fix_to_virt(FIX_PARAVIRT_BOOTMAP); | ||||
| 	} | ||||
| 	xen_hvm_connect_shared_info(xen_hvm_sip_phys >> PAGE_SHIFT); | ||||
| 	xen_hvm_set_shared_info(xen_hvm_shared_info); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_XEN_PVHVM | ||||
| static void __init init_hvm_pv_info(void) | ||||
| { | ||||
| 	int major, minor; | ||||
| 	uint32_t eax, ebx, ecx, edx, pages, msr, base; | ||||
| 	u64 pfn; | ||||
| 
 | ||||
| 	base = xen_cpuid_base(); | ||||
| 	cpuid(base + 1, &eax, &ebx, &ecx, &edx); | ||||
| 
 | ||||
| 	major = eax >> 16; | ||||
| 	minor = eax & 0xffff; | ||||
| 	printk(KERN_INFO "Xen version %d.%d.\n", major, minor); | ||||
| 
 | ||||
| 	cpuid(base + 2, &pages, &msr, &ecx, &edx); | ||||
| 
 | ||||
| 	pfn = __pa(hypercall_page); | ||||
| @ -1633,22 +1612,12 @@ static void __init xen_hvm_guest_init(void) | ||||
| 
 | ||||
| static bool __init xen_hvm_platform(void) | ||||
| { | ||||
| 	uint32_t eax, ebx, ecx, edx, base; | ||||
| 
 | ||||
| 	if (xen_pv_domain()) | ||||
| 		return false; | ||||
| 
 | ||||
| 	base = xen_cpuid_base(); | ||||
| 	if (!base) | ||||
| 	if (!xen_cpuid_base()) | ||||
| 		return false; | ||||
| 
 | ||||
| 	cpuid(base + 1, &eax, &ebx, &ecx, &edx); | ||||
| 
 | ||||
| 	xen_major = eax >> 16; | ||||
| 	xen_minor = eax & 0xffff; | ||||
| 
 | ||||
| 	printk(KERN_INFO "Xen version %d.%d.\n", xen_major, xen_minor); | ||||
| 
 | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -30,7 +30,7 @@ void xen_arch_hvm_post_suspend(int suspend_cancelled) | ||||
| { | ||||
| #ifdef CONFIG_XEN_PVHVM | ||||
| 	int cpu; | ||||
| 	xen_hvm_resume_shared_info(); | ||||
| 	xen_hvm_init_shared_info(); | ||||
| 	xen_callback_vector(); | ||||
| 	xen_unplug_emulated_devices(); | ||||
| 	if (xen_feature(XENFEAT_hvm_safe_pvclock)) { | ||||
|  | ||||
| @ -40,7 +40,7 @@ void xen_enable_syscall(void); | ||||
| void xen_vcpu_restore(void); | ||||
| 
 | ||||
| void xen_callback_vector(void); | ||||
| void xen_hvm_resume_shared_info(void); | ||||
| void xen_hvm_init_shared_info(void); | ||||
| void xen_unplug_emulated_devices(void); | ||||
| 
 | ||||
| void __init xen_build_dynamic_phys_to_machine(void); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user