WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Handle failure to register the xen store event channel i

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Handle failure to register the xen store event channel instead of
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 03 Apr 2006 17:20:07 +0000
Delivery-date: Mon, 03 Apr 2006 10:22:56 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ian.Campbell@xxxxxxxxxxxxx
# Node ID d0d3fef37685be264a7f52201f8ef44c030daad3
# Parent  4ad317429111d43cc99810af25b3faf6ffed4209
Handle failure to register the xen store event channel instead of
just not initialising xenbus/store when the supervisor_mode_kernel
feature flag is enabled.

When initialising grant tables only -ENOSYS is a valid reason
to fail so BUG_ON anything else like we did prior to changeset
9498.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxxxxx>

diff -r 4ad317429111 -r d0d3fef37685 
linux-2.6-xen-sparse/drivers/xen/core/gnttab.c
--- a/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c    Sun Apr  2 15:16:53 2006
+++ b/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c    Mon Apr  3 13:34:20 2006
@@ -395,10 +395,10 @@
        setup.frame_list = frames;
 
        rc = HYPERVISOR_grant_table_op(GNTTABOP_setup_table, &setup, 1);
-       if (rc < 0)
-               return rc;
-
-       BUG_ON(setup.status);
+       if (rc == -ENOSYS)
+               return -ENOSYS;
+
+       BUG_ON(rc || setup.status);
 
 #ifndef __ia64__
        if (shared == NULL) {
diff -r 4ad317429111 -r d0d3fef37685 
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c    Sun Apr  2 
15:16:53 2006
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c    Mon Apr  3 
13:34:20 2006
@@ -984,6 +984,7 @@
 static int __init xenbus_probe_init(void)
 {
        int err = 0, dom0;
+       unsigned long page = 0;
 
        DPRINTK("");
 
@@ -992,19 +993,9 @@
                return -ENODEV;
        }
 
-       /* Register ourselves with the kernel bus & device subsystems */
+       /* Register ourselves with the kernel bus subsystem */
        bus_register(&xenbus_frontend.bus);
        bus_register(&xenbus_backend.bus);
-       device_register(&xenbus_frontend.dev);
-       device_register(&xenbus_backend.dev);
-
-       /*
-         * The supervisor_mode_kernel feature only allows a single
-         * domain so there is no need to initialise event channels
-         * etc.
-         */
-       if (xen_feature(XENFEAT_supervisor_mode_kernel))
-               return -ENODEV;
 
        /*
         * Domain0 doesn't have a store_evtchn or store_mfn yet.
@@ -1012,11 +1003,7 @@
        dom0 = (xen_start_info->store_evtchn == 0);
 
        if (dom0) {
-
-               unsigned long page;
                evtchn_op_t op = { 0 };
-               int ret;
-
 
                /* Allocate page. */
                page = get_zeroed_page(GFP_KERNEL);
@@ -1032,8 +1019,10 @@
                op.u.alloc_unbound.dom        = DOMID_SELF;
                op.u.alloc_unbound.remote_dom = 0;
 
-               ret = HYPERVISOR_event_channel_op(&op);
-               BUG_ON(ret);
+               err = HYPERVISOR_event_channel_op(&op);
+               if (err == -ENOSYS)
+                       goto err;
+               BUG_ON(err);
                xen_start_info->store_evtchn = op.u.alloc_unbound.port;
 
                /* And finally publish the above info in /proc/xen */
@@ -1056,13 +1045,29 @@
        if (err) {
                printk(KERN_WARNING
                       "XENBUS: Error initializing xenstore comms: %i\n", err);
-               return err;
-       }
+               goto err;
+       }
+
+       /* Register ourselves with the kernel device subsystem */
+       device_register(&xenbus_frontend.dev);
+       device_register(&xenbus_backend.dev);
 
        if (!dom0)
                xenbus_probe(NULL);
 
        return 0;
+
+ err:
+       if (page)
+               free_page(page);
+
+       /*
+         * Do not unregister the xenbus front/backend buses here. The
+         * buses must exist because front/backend drivers will use
+         * them when they are registered.
+         */
+
+       return err;
 }
 
 postcore_initcall(xenbus_probe_init);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Handle failure to register the xen store event channel instead of, Xen patchbot -unstable <=