svn commit: r268832 - stable/9/sys/dev/xen/blkfront

Roger Pau Monné royger at FreeBSD.org
Fri Jul 18 07:18:38 UTC 2014


Author: royger
Date: Fri Jul 18 07:18:37 2014
New Revision: 268832
URL: http://svnweb.freebsd.org/changeset/base/268832

Log:
  MFC r256423:
  
  Allow FreeBSD to be booted from CDROM media on XenServer 6.2 and prior
  releases.
  
  PR:		164630

Modified:
  stable/9/sys/dev/xen/blkfront/blkfront.c

Modified: stable/9/sys/dev/xen/blkfront/blkfront.c
==============================================================================
--- stable/9/sys/dev/xen/blkfront/blkfront.c	Fri Jul 18 06:58:01 2014	(r268831)
+++ stable/9/sys/dev/xen/blkfront/blkfront.c	Fri Jul 18 07:18:37 2014	(r268832)
@@ -399,14 +399,44 @@ xb_dump(void *arg, void *virtual, vm_off
 static int
 blkfront_probe(device_t dev)
 {
+#ifdef XENHVM
+	int error;
+	char *type;
+#endif
 
-	if (!strcmp(xenbus_get_type(dev), "vbd")) {
-		device_set_desc(dev, "Virtual Block Device");
-		device_quiet(dev);
-		return (0);
+	if (strcmp(xenbus_get_type(dev), "vbd") != 0)
+		return (ENXIO);
+
+#ifdef XENHVM
+	/*
+	 * When running in an HVM domain, IDE disk emulation is
+	 * disabled early in boot so that native drivers will
+	 * not see emulated hardware.  However, CDROM device
+	 * emulation cannot be disabled.
+	 *
+	 * Through use of FreeBSD's vm_guest and xen_hvm_domain()
+	 * APIs, we could modify the native CDROM driver to fail its
+	 * probe when running under Xen.  Unfortunatlely, the PV
+	 * CDROM support in XenServer (up through at least version
+	 * 6.2) isn't functional, so we instead rely on the emulated
+	 * CDROM instance, and fail to attach the PV one here in
+	 * the blkfront driver.
+	 */
+	error = xs_read(XST_NIL, xenbus_get_node(dev),
+	    "device-type", NULL, (void **) &type);
+	if (error)
+		return (ENXIO);
+
+	if (strncmp(type, "cdrom", 5) == 0) {
+		free(type, M_XENSTORE);
+		return (ENXIO);
 	}
+	free(type, M_XENSTORE);
+#endif
 
-	return (ENXIO);
+	device_set_desc(dev, "Virtual Block Device");
+	device_quiet(dev);
+	return (0);
 }
 
 static void


More information about the svn-src-stable-9 mailing list