Skip to contentSkip to conversation

(xen) stable/xenbus for 2.6.38

GIT PULL Konrad Rzeszutek Wilk 1 participant 1 message Jan 10, 2011

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

Dear Linus,

Please pull the following git tree:

git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen.git stable/xenbus

which has patches since git commit cf7d7e5a1980d1116ee152d25dac382b112b9c17 Linus Torvalds (1):

      Linux 2.6.37-rc5

The patchset makes the XenBus infrastructure more generic and enhances the XenBus API to handle Xen backends (registration, watching for events, etc). The XenBus is an "abstraction mechanism for paravirtualised drivers to communicate between domains [..] and in general is used for configuration negotiation" (http://wiki.xensource.com/xenwiki/XenBus).

This allows backend drivers, such as the networking, pci, etc to have the appropriate infrastructure calls to service guest domains.

The backends that we have in the pipeline are the pci backend and the networking. They are going through the review so they will have to wait till the next merge window.

The benefit of pulling this git tree:
- Allow Xen backends to work (these are the "other side" of the Xen frontend drivers that have in the kernel for a long time).
- Cleanup of general XenBus code.
- Modularize the XenBus frontend.

The shortlog:

Ian Campbell (3):
xen: separate out frontend xenbus
xen: add backend driver support
xen/xenbus: fixup checkpatch issues in xenbus_probe*

Jeremy Fitzhardinge (11):
xen: remove xen/evtchn.h
xenbus/frontend: register bus earlier xen/xenbus: make sure backend bus is registered earlier xen/xenbus: make frontend bus GPL
xen/xenbus: clean up error handling
xen/xenbus: cleanup debug noise in xenbus_comms.c xen/xenbus: clean up noise in xenbus_probe.c xen/xenbus: clean up noise in xenbus_probe_backend.c xen/xenbus: clean up noise in xenbus_probe_frontend.c xen/netfront: select XEN_XENBUS_FRONTEND xen/xenbus: making backend support modular is too complex

Konrad Rzeszutek Wilk (1):
xen/pci: Make xen-pcifront be dependent on XEN_XENBUS_FRONTEND

And the diffstat:

 drivers/block/Kconfig                      |    1 +
 drivers/net/Kconfig                        |    1 +
 drivers/pci/Kconfig                        |    1 +
 drivers/xen/Kconfig                        |   11 +
 drivers/xen/xenbus/Makefile                |    5 +
 drivers/xen/xenbus/xenbus_probe.c          |  351 +++++-----------------------
 drivers/xen/xenbus/xenbus_probe.h          |   31 ++--
 drivers/xen/xenbus/xenbus_probe_backend.c  |  276 ++++++++++++++++++++++
 drivers/xen/xenbus/xenbus_probe_frontend.c |  294 +++++++++++++++++++++++
 include/xen/xenbus.h                       |    2 +-
 10 files changed, 661 insertions(+), 312 deletions(-)

And the patches all squashed in one:

drivers/block/Kconfig +1 -0
index 4b9359a..83c32cb 100644
@@ -464,6 +464,7 @@ config XEN_BLKDEV_FRONTEND
 	tristate "Xen virtual block device support"
 	depends on XEN
 	default y
+	select XEN_XENBUS_FRONTEND
 	help
 	  This driver implements the front-end of the Xen virtual
 	  block device driver.  It communicates with a back-end driver
drivers/net/Kconfig +1 -0
index 4f1755b..cbf0635 100644
@@ -2960,6 +2960,7 @@ config TILE_NET
 config XEN_NETDEV_FRONTEND
 	tristate "Xen network device frontend driver"
 	depends on XEN
+	select XEN_XENBUS_FRONTEND
 	default y
 	help
 	  The network device frontend driver allows the kernel to
drivers/pci/Kconfig +1 -0
index 5b1630e..a9523fd 100644
@@ -45,6 +45,7 @@ config XEN_PCIDEV_FRONTEND
         depends on PCI && X86 && XEN
         select HOTPLUG
         select PCI_XEN
+	select XEN_XENBUS_FRONTEND
         default y
         help
           The PCI device frontend driver allows the kernel to import arbitrary
drivers/xen/Kconfig +11 -0
index 6e6180c..5a48ce9 100644
@@ -29,6 +29,14 @@ config XEN_DEV_EVTCHN
 	  firing.
 	  If in doubt, say yes.
 
+config XEN_BACKEND
+	bool "Backend driver support"
+	depends on XEN_DOM0
+	default y
+	help
+	  Support for backend device drivers that provide I/O services
+	  to other virtual machines.
+
 config XENFS
 	tristate "Xen filesystem"
 	default y
@@ -62,6 +70,9 @@ config XEN_SYS_HYPERVISOR
 	 virtual environment, /sys/hypervisor will still be present,
 	 but will have no xen contents.
 
+config XEN_XENBUS_FRONTEND
+       tristate
+
 config XEN_PLATFORM_PCI
 	tristate "xen platform pci device driver"
 	depends on XEN_PVHVM
drivers/xen/xenbus/Makefile +5 -0
index 5571f5b..8dca685 100644
@@ -5,3 +5,8 @@ xenbus-objs += xenbus_client.o
 xenbus-objs += xenbus_comms.o
 xenbus-objs += xenbus_xs.o
 xenbus-objs += xenbus_probe.o
+
+xenbus-be-objs-$(CONFIG_XEN_BACKEND) += xenbus_probe_backend.o
+xenbus-objs += $(xenbus-be-objs-y)
+
+obj-$(CONFIG_XEN_XENBUS_FRONTEND) += xenbus_probe_frontend.o
drivers/xen/xenbus/xenbus_probe.c +55 -296

509 lines not on this page · raw message

drivers/xen/xenbus/xenbus_probe.h +16 -15
index 6c5e318..2466581 100644
@@ -36,26 +36,15 @@
 
 #define XEN_BUS_ID_SIZE			20
 
-#ifdef CONFIG_XEN_BACKEND
-extern void xenbus_backend_suspend(int (*fn)(struct device *, void *));
-extern void xenbus_backend_resume(int (*fn)(struct device *, void *));
-extern void xenbus_backend_probe_and_watch(void);
-extern int xenbus_backend_bus_register(void);
-extern void xenbus_backend_bus_unregister(void);
-#else
-static inline void xenbus_backend_suspend(int (*fn)(struct device *, void *)) {}
-static inline void xenbus_backend_resume(int (*fn)(struct device *, void *)) {}
-static inline void xenbus_backend_probe_and_watch(void) {}
-static inline int xenbus_backend_bus_register(void) { return 0; }
-static inline void xenbus_backend_bus_unregister(void) {}
-#endif
-
 struct xen_bus_type
 {
 	char *root;
 	unsigned int levels;
 	int (*get_bus_id)(char bus_id[XEN_BUS_ID_SIZE], const char *nodename);
-	int (*probe)(const char *type, const char *dir);
+	int (*probe)(struct xen_bus_type *bus, const char *type,
+		     const char *dir);
+	void (*otherend_changed)(struct xenbus_watch *watch, const char **vec,
+				 unsigned int len);
 	struct bus_type bus;
 };
 
@@ -73,4 +62,16 @@ extern int xenbus_probe_devices(struct xen_bus_type *bus);
 
 extern void xenbus_dev_changed(const char *node, struct xen_bus_type *bus);
 
+extern void xenbus_dev_shutdown(struct device *_dev);
+
+extern int xenbus_dev_suspend(struct device *dev, pm_message_t state);
+extern int xenbus_dev_resume(struct device *dev);
+
+extern void xenbus_otherend_changed(struct xenbus_watch *watch,
+				    const char **vec, unsigned int len,
+				    int ignore_on_shutdown);
+
+extern int xenbus_read_otherend_details(struct xenbus_device *xendev,
+					char *id_node, char *path_node);
+
 #endif
drivers/xen/xenbus/xenbus_probe_backend.c new file +276 -0

276 lines not on this page · raw message

drivers/xen/xenbus/xenbus_probe_frontend.c new file +294 -0

294 lines not on this page · raw message

include/xen/xenbus.h +1 -1
index 43e2d7d..7a1d15f 100644
@@ -94,7 +94,7 @@ struct xenbus_driver {
 	int (*remove)(struct xenbus_device *dev);
 	int (*suspend)(struct xenbus_device *dev, pm_message_t state);
 	int (*resume)(struct xenbus_device *dev);
-	int (*uevent)(struct xenbus_device *, char **, int, char *, int);
+	int (*uevent)(struct xenbus_device *, struct kobj_uevent_env *);
 	struct device_driver driver;
 	int (*read_otherend_details)(struct xenbus_device *dev);
 	int (*is_ready)(struct xenbus_device *dev);