Hi,
This patch (against 3.1-final) implements module autoloading for the xen
frontend drivers by adding a uevent function for the frontend xenbus and
some module aliases to the individual drivers.
please apply,
Gerd
---
linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c | 2 -
linux-2.6-xen-sparse/drivers/xen/fbfront/xenfb.c | 1
linux-2.6-xen-sparse/drivers/xen/fbfront/xenkbd.c | 1
linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c | 1
linux-2.6-xen-sparse/drivers/xen/pcifront/xenbus.c | 1
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c | 25 +++++++++++++++++
6 files changed, 30 insertions(+), 1 deletion(-)
Index: xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c
===================================================================
--- xenpv-3.1_15042.orig/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c
+++ xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c
@@ -874,7 +874,7 @@ static struct xenbus_device_id blkfront_
{ "vbd" },
{ "" }
};
-
+MODULE_ALIAS("xen:vbd");
static struct xenbus_driver blkfront = {
.name = "vbd",
Index: xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
===================================================================
--- xenpv-3.1_15042.orig/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
+++ xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
@@ -2075,6 +2075,7 @@ static struct xenbus_device_id netfront_
{ "vif" },
{ "" }
};
+MODULE_ALIAS("xen:vif");
static struct xenbus_driver netfront = {
Index: xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c
===================================================================
--- xenpv-3.1_15042.orig/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c
+++ xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c
@@ -165,6 +165,30 @@ static int read_backend_details(struct x
return read_otherend_details(xendev, "backend-id", "backend");
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
+static int xenbus_uevent_frontend(struct device *dev, char **envp,
+ int num_envp, char *buffer, int buffer_size)
+{
+ struct xenbus_device *xdev;
+ int length = 0, i = 0;
+
+ if (dev == NULL)
+ return -ENODEV;
+ xdev = to_xenbus_device(dev);
+ if (xdev == NULL)
+ return -ENODEV;
+
+ /* stuff we want to pass to /sbin/hotplug */
+ add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
+ "XENBUS_TYPE=%s", xdev->devicetype);
+ add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
+ "XENBUS_PATH=%s", xdev->nodename);
+ add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
+ "MODALIAS=xen:%s", xdev->devicetype);
+
+ return 0;
+}
+#endif
/* Bus type for frontend drivers. */
static struct xen_bus_type xenbus_frontend = {
@@ -180,6 +204,7 @@ static struct xen_bus_type xenbus_fronte
.probe = xenbus_dev_probe,
.remove = xenbus_dev_remove,
.shutdown = xenbus_dev_shutdown,
+ .uevent = xenbus_uevent_frontend,
#endif
},
.dev = {
Index: xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/fbfront/xenfb.c
===================================================================
--- xenpv-3.1_15042.orig/linux-2.6-xen-sparse/drivers/xen/fbfront/xenfb.c
+++ xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/fbfront/xenfb.c
@@ -718,6 +718,7 @@ static struct xenbus_device_id xenfb_ids
{ "vfb" },
{ "" }
};
+MODULE_ALIAS("xen:vfb");
static struct xenbus_driver xenfb = {
.name = "vfb",
Index: xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/fbfront/xenkbd.c
===================================================================
--- xenpv-3.1_15042.orig/linux-2.6-xen-sparse/drivers/xen/fbfront/xenkbd.c
+++ xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/fbfront/xenkbd.c
@@ -299,6 +299,7 @@ static struct xenbus_device_id xenkbd_id
{ "vkbd" },
{ "" }
};
+MODULE_ALIAS("xen:vkbd");
static struct xenbus_driver xenkbd = {
.name = "vkbd",
Index: xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/pcifront/xenbus.c
===================================================================
--- xenpv-3.1_15042.orig/linux-2.6-xen-sparse/drivers/xen/pcifront/xenbus.c
+++ xenpv-3.1_15042/linux-2.6-xen-sparse/drivers/xen/pcifront/xenbus.c
@@ -273,6 +273,7 @@ static struct xenbus_device_id xenpci_id
{"pci"},
{{0}},
};
+MODULE_ALIAS("xen:pci");
static struct xenbus_driver xenbus_pcifront_driver = {
.name = "pcifront",
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|