NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: port-amd64/55543: PVHVM fails to attach hypervisor bus on Amazon EC2 t2.micro



hello,

On Wed, Aug 05, 2020 at 02:00:01PM +0000, jmcneill%invisible.ca@localhost wrote:
> [   1.0000030] mainbus0 (root)
> [   1.0000030] Identified Guest XEN in HVM mode.
> Xen HVM: Unable to obtain xencons page address

can you try the attached patch ?

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--
? include/xenmem.h
? xen/privcmd.c.hvm
? xen/xenmem.c
Index: xen/hypervisor.c
===================================================================
RCS file: /cvsroot/src/sys/arch/xen/xen/hypervisor.c,v
retrieving revision 1.86
diff -u -p -u -r1.86 hypervisor.c
--- xen/hypervisor.c	26 May 2020 10:37:25 -0000	1.86
+++ xen/hypervisor.c	4 Sep 2020 15:59:23 -0000
@@ -411,29 +413,31 @@ xen_hvm_init(void)
 	xen_hvm_param.index = HVM_PARAM_CONSOLE_PFN;
 	
 	if ( HYPERVISOR_hvm_op(HVMOP_get_param, &xen_hvm_param) < 0) {
-		aprint_error(
+		aprint_debug(
 		    "Xen HVM: Unable to obtain xencons page address\n");
-		return 0;
-	}
-
-	/* Re-use PV field */
-	xen_start_info.console.domU.mfn = xen_hvm_param.value;
-
-	pmap_kenter_pa((vaddr_t) xencons_interface, ptoa(xen_start_info.console.domU.mfn),
-	    VM_PROT_READ|VM_PROT_WRITE, 0);
-
-	xen_hvm_param.domid = DOMID_SELF;
-	xen_hvm_param.index = HVM_PARAM_CONSOLE_EVTCHN;
+		xen_start_info.console.domU.mfn = 0;
+		xen_start_info.console.domU.evtchn = -1;
+		xencons_interface = 0;
+	} else {
+		/* Re-use PV field */
+		xen_start_info.console.domU.mfn = xen_hvm_param.value;
+
+		pmap_kenter_pa((vaddr_t) xencons_interface,
+		    ptoa(xen_start_info.console.domU.mfn),
+		    VM_PROT_READ|VM_PROT_WRITE, 0);
+
+		xen_hvm_param.domid = DOMID_SELF;
+		xen_hvm_param.index = HVM_PARAM_CONSOLE_EVTCHN;
+
+		if ( HYPERVISOR_hvm_op(HVMOP_get_param, &xen_hvm_param) < 0) {
+			aprint_error(
+			    "Xen HVM: Unable to obtain xencons event channel\n");
+			return 0;
+		}
 
-	if ( HYPERVISOR_hvm_op(HVMOP_get_param, &xen_hvm_param) < 0) {
-		aprint_error(
-		    "Xen HVM: Unable to obtain xencons event channel\n");
-		return 0;
+		xen_start_info.console.domU.evtchn = xen_hvm_param.value;
 	}
 
-	xen_start_info.console.domU.evtchn = xen_hvm_param.value;
-
-
 	delay_func = x86_delay = xen_delay;
 	x86_initclock_func = xen_initclocks;
 
@@ -662,9 +666,11 @@ hypervisor_attach(device_t parent, devic
 	config_found_ia(self, "xendevbus", &hac.hac_xenbus, hypervisor_print);
 #endif
 #if NXENCONS > 0
-	memset(&hac, 0, sizeof(hac));
-	hac.hac_xencons.xa_device = "xencons";
-	config_found_ia(self, "xendevbus", &hac.hac_xencons, hypervisor_print);
+	if (xencons_interface != 0) {
+		memset(&hac, 0, sizeof(hac));
+		hac.hac_xencons.xa_device = "xencons";
+		config_found_ia(self, "xendevbus", &hac.hac_xencons, hypervisor_print);
+	}
 #endif
 #if defined(XENPV) && defined(DOM0OPS)
 #if NPCI > 0


Home | Main Index | Thread Index | Old Index