Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Jun 2014 08:44:33 +0000 (UTC)
From:      Roger Pau Monné <royger@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r267528 - in head/sys: conf dev/xen/console dev/xen/timer dev/xen/xenpci xen/xenstore
Message-ID:  <201406160844.s5G8iXiu074281@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: royger
Date: Mon Jun 16 08:44:33 2014
New Revision: 267528
URL: http://svnweb.freebsd.org/changeset/base/267528

Log:
  xen: introduce xenpv bus
  
  Create a dummy bus so top level Xen devices can attach to it (instead
  of attaching directly to the nexus). This allows to have all the Xen
  related devices grouped under a single bus.
  
  Sponsored by: Citrix Systems R&D
  Approved by: gibbs
  
  x86/xen/xenpv.c:
   - Attach the xenpv bus when running as a Xen guest.
   - Attach the ISA bus if needed, in order to attach syscons.
  
  conf/files.amd6:
  conf/files.i386:
   - Include the xenpv.c file in the build of i386/amd64 kernels using
     XENHVM.
  
  dev/xen/console/console.c:
  dev/xen/timer/timer.c:
  xen/xenstore/xenstore.c:
   - Attach to the xenpv bus instead of the Nexus.
  
  dev/xen/xenpci/xenpci.c:
   - Xen specific devices on PVHVM guests are no longer attached to the
     xenpci device, they are instead attached to the xenpv bus, remove
     the now unused methods.

Modified:
  head/sys/conf/files.amd64
  head/sys/conf/files.i386
  head/sys/dev/xen/console/console.c
  head/sys/dev/xen/timer/timer.c
  head/sys/dev/xen/xenpci/xenpci.c
  head/sys/xen/xenstore/xenstore.c

Modified: head/sys/conf/files.amd64
==============================================================================
--- head/sys/conf/files.amd64	Mon Jun 16 08:43:45 2014	(r267527)
+++ head/sys/conf/files.amd64	Mon Jun 16 08:44:33 2014	(r267528)
@@ -558,3 +558,4 @@ x86/xen/xen_intr.c		optional	xen | xenhv
 x86/xen/pv.c			optional	xenhvm
 x86/xen/pvcpu_enum.c		optional	xenhvm
 x86/xen/xen_apic.c		optional	xenhvm
+x86/xen/xenpv.c			optional	xenhvm

Modified: head/sys/conf/files.i386
==============================================================================
--- head/sys/conf/files.i386	Mon Jun 16 08:43:45 2014	(r267527)
+++ head/sys/conf/files.i386	Mon Jun 16 08:44:33 2014	(r267528)
@@ -595,3 +595,4 @@ x86/x86/delay.c			standard
 x86/xen/hvm.c			optional xenhvm
 x86/xen/xen_intr.c		optional xen | xenhvm
 x86/xen/xen_apic.c		optional xenhvm
+x86/xen/xenpv.c			optional xen | xenhvm

Modified: head/sys/dev/xen/console/console.c
==============================================================================
--- head/sys/dev/xen/console/console.c	Mon Jun 16 08:43:45 2014	(r267527)
+++ head/sys/dev/xen/console/console.c	Mon Jun 16 08:44:33 2014	(r267528)
@@ -509,4 +509,4 @@ xcons_force_flush(void)
 	}
 }
 
-DRIVER_MODULE(xc, nexus, xc_driver, xc_devclass, 0, 0);
+DRIVER_MODULE(xc, xenpv, xc_driver, xc_devclass, 0, 0);

Modified: head/sys/dev/xen/timer/timer.c
==============================================================================
--- head/sys/dev/xen/timer/timer.c	Mon Jun 16 08:43:45 2014	(r267527)
+++ head/sys/dev/xen/timer/timer.c	Mon Jun 16 08:44:33 2014	(r267528)
@@ -645,5 +645,5 @@ static driver_t xentimer_driver = {
 	sizeof(struct xentimer_softc),
 };
 
-DRIVER_MODULE(xentimer, nexus, xentimer_driver, xentimer_devclass, 0, 0);
-MODULE_DEPEND(xentimer, nexus, 1, 1, 1);
+DRIVER_MODULE(xentimer, xenpv, xentimer_driver, xentimer_devclass, 0, 0);
+MODULE_DEPEND(xentimer, xenpv, 1, 1, 1);

Modified: head/sys/dev/xen/xenpci/xenpci.c
==============================================================================
--- head/sys/dev/xen/xenpci/xenpci.c	Mon Jun 16 08:43:45 2014	(r267527)
+++ head/sys/dev/xen/xenpci/xenpci.c	Mon Jun 16 08:44:33 2014	(r267528)
@@ -51,8 +51,6 @@ __FBSDID("$FreeBSD$");
 
 extern void xen_intr_handle_upcall(struct trapframe *trap_frame);
 
-static device_t nexus;
-
 /*
  * This is used to find our platform device instance.
  */
@@ -188,36 +186,6 @@ xenpci_alloc_space(size_t sz, vm_paddr_t
 	}
 }
 
-static struct resource *
-xenpci_alloc_resource(device_t dev, device_t child, int type, int *rid,
-    u_long start, u_long end, u_long count, u_int flags)
-{
-	return (BUS_ALLOC_RESOURCE(nexus, child, type, rid, start,
-	    end, count, flags));
-}
-
-
-static int
-xenpci_release_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *r)
-{
-	return (BUS_RELEASE_RESOURCE(nexus, child, type, rid, r));
-}
-
-static int
-xenpci_activate_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *r)
-{
-	return (BUS_ACTIVATE_RESOURCE(nexus, child, type, rid, r));
-}
-
-static int
-xenpci_deactivate_resource(device_t dev, device_t child, int type,
-    int rid, struct resource *r)
-{
-	return (BUS_DEACTIVATE_RESOURCE(nexus, child, type, rid, r));
-}
-
 /*
  * Probe - just check device ID.
  */
@@ -229,7 +197,7 @@ xenpci_probe(device_t dev)
 		return (ENXIO);
 
 	device_set_desc(dev, "Xen Platform Device");
-	return (bus_generic_probe(dev));
+	return (BUS_PROBE_DEFAULT);
 }
 
 /*
@@ -239,20 +207,8 @@ static int
 xenpci_attach(device_t dev)
 {
 	struct xenpci_softc *scp = device_get_softc(dev);
-	devclass_t dc;
 	int error;
 
-	/*
-	 * Find and record nexus0.  Since we are not really on the
-	 * PCI bus, all resource operations are directed to nexus
-	 * instead of through our parent.
-	 */
-	if ((dc = devclass_find("nexus"))  == 0
-	 || (nexus = devclass_get_device(dc, 0)) == 0) {
-		device_printf(dev, "unable to find nexus.");
-		return (ENOENT);
-	}
-
 	error = xenpci_allocate_resources(dev);
 	if (error) {
 		device_printf(dev, "xenpci_allocate_resources failed(%d).\n",
@@ -270,7 +226,7 @@ xenpci_attach(device_t dev)
 		goto errexit;
 	}
 
-	return (bus_generic_attach(dev));
+	return (0);
 
 errexit:
 	/*
@@ -309,16 +265,10 @@ xenpci_detach(device_t dev)
 }
 
 static int
-xenpci_suspend(device_t dev)
-{
-	return (bus_generic_suspend(dev));
-}
-
-static int
 xenpci_resume(device_t dev)
 {
 	xen_hvm_set_callback(dev);
-	return (bus_generic_resume(dev));
+	return (0);
 }
 
 static device_method_t xenpci_methods[] = {
@@ -326,16 +276,8 @@ static device_method_t xenpci_methods[] 
 	DEVMETHOD(device_probe,		xenpci_probe),
 	DEVMETHOD(device_attach,	xenpci_attach),
 	DEVMETHOD(device_detach,	xenpci_detach),
-	DEVMETHOD(device_suspend,	xenpci_suspend),
 	DEVMETHOD(device_resume,	xenpci_resume),
 
-	/* Bus interface */
-	DEVMETHOD(bus_add_child,	bus_generic_add_child),
-	DEVMETHOD(bus_alloc_resource,   xenpci_alloc_resource),
-	DEVMETHOD(bus_release_resource, xenpci_release_resource),
-	DEVMETHOD(bus_activate_resource, xenpci_activate_resource),
-	DEVMETHOD(bus_deactivate_resource, xenpci_deactivate_resource),
-
 	{ 0, 0 }
 };
 

Modified: head/sys/xen/xenstore/xenstore.c
==============================================================================
--- head/sys/xen/xenstore/xenstore.c	Mon Jun 16 08:43:45 2014	(r267527)
+++ head/sys/xen/xenstore/xenstore.c	Mon Jun 16 08:44:33 2014	(r267528)
@@ -1261,11 +1261,7 @@ static device_method_t xenstore_methods[
 DEFINE_CLASS_0(xenstore, xenstore_driver, xenstore_methods, 0);
 static devclass_t xenstore_devclass; 
  
-#ifdef XENHVM
-DRIVER_MODULE(xenstore, xenpci, xenstore_driver, xenstore_devclass, 0, 0);
-#else
-DRIVER_MODULE(xenstore, nexus, xenstore_driver, xenstore_devclass, 0, 0);
-#endif
+DRIVER_MODULE(xenstore, xenpv, xenstore_driver, xenstore_devclass, 0, 0);
 
 /*------------------------------- Sysctl Data --------------------------------*/
 /* XXX Shouldn't the node be somewhere else? */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201406160844.s5G8iXiu074281>