From 8bbc4b9c7964d9e17d87e603bf4ab64189571f85 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 23 Nov 2009 07:21:58 +0000 Subject: [PATCH] minios: Fix xenbus_unwatch_path calls In a lot of places in MiniOS frontends, xenbus_watch_path_token is used instead of xenbus_watch_path to get more precise wake ups. To free those, xenbus_unwatch_path_token has to be used instead of xenbus_unwatch_path, else the unwatch operation will fail. This fixes spurious watch events left by pv-grub. Signed-Off-By: Samuel Thibault --- blkfront.c | 4 ++-- console/xencons_ring.c | 2 +- fbfront.c | 12 ++++++------ fs-front.c | 2 +- netfront.c | 4 ++-- pcifront.c | 6 +++--- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/blkfront.c b/blkfront.c index a451e98..2d4f03b 100644 --- a/blkfront.c +++ b/blkfront.c @@ -208,7 +208,7 @@ done: msg = xenbus_wait_for_state_change(path, &state, &dev->events); if (msg != NULL || state != XenbusStateConnected) { printk("backend not available, state=%d\n", state); - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); goto error; } @@ -286,7 +286,7 @@ void shutdown_blkfront(struct blkfront_dev *dev) err = xenbus_wait_for_state_change(path, &state, &dev->events); close: - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); snprintf(path, sizeof(path), "%s/ring-ref", nodename); xenbus_rm(XBT_NIL, path); diff --git a/console/xencons_ring.c b/console/xencons_ring.c index 3bb408f..ad385b4 100644 --- a/console/xencons_ring.c +++ b/console/xencons_ring.c @@ -312,7 +312,7 @@ done: msg = xenbus_wait_for_state_change(path, &state, &dev->events); if (msg != NULL || state != XenbusStateConnected) { printk("backend not available, state=%d\n", state); - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); goto error; } } diff --git a/fbfront.c b/fbfront.c index 8cf1721..d06b535 100644 --- a/fbfront.c +++ b/fbfront.c @@ -165,7 +165,7 @@ done: err = xenbus_wait_for_state_change(path, &state, &dev->events); if (state != XenbusStateConnected) { printk("backend not available, state=%d\n", state); - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); goto error; } @@ -175,7 +175,7 @@ done: if((err = xenbus_switch_state(XBT_NIL, frontpath, XenbusStateConnected)) != NULL) { printk("error switching state: %s\n", err); - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); goto error; } } @@ -265,7 +265,7 @@ void shutdown_kbdfront(struct kbdfront_dev *dev) //xenbus_wait_for_value(path, "2", &dev->events); close_kbdfront: - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); snprintf(path, sizeof(path), "%s/page-ref", nodename); xenbus_rm(XBT_NIL, path); @@ -513,7 +513,7 @@ done: err = xenbus_wait_for_state_change(path, &state, &dev->events); if (state != XenbusStateConnected) { printk("backend not available, state=%d\n", state); - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); goto error; } @@ -526,7 +526,7 @@ done: if ((err = xenbus_switch_state(XBT_NIL, frontpath, XenbusStateConnected)) != NULL) { printk("error switching state: %s\n", err); - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); goto error; } } @@ -644,7 +644,7 @@ void shutdown_fbfront(struct fbfront_dev *dev) //xenbus_wait_for_value(path, "2", &dev->events); close_fbfront: - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); snprintf(path, sizeof(path), "%s/page-ref", nodename); xenbus_rm(XBT_NIL, path); diff --git a/fs-front.c b/fs-front.c index dd664ca..59b2404 100644 --- a/fs-front.c +++ b/fs-front.c @@ -1190,7 +1190,7 @@ done: /* The token will not be unique if multiple imports are inited */ xenbus_watch_path_token(XBT_NIL, r_nodename, r_nodename, &events); xenbus_wait_for_value(r_nodename, STATE_READY, &events); - xenbus_unwatch_path(XBT_NIL, r_nodename); + xenbus_unwatch_path_token(XBT_NIL, r_nodename, r_nodename); printk("Backend ready.\n"); //create_thread("fs-tester", test_fs_import, import); diff --git a/netfront.c b/netfront.c index fd1a315..2e2ff9c 100644 --- a/netfront.c +++ b/netfront.c @@ -452,7 +452,7 @@ done: err = xenbus_wait_for_state_change(path, &state, &dev->events); if (state != XenbusStateConnected) { printk("backend not avalable, state=%d\n", state); - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); goto error; } @@ -542,7 +542,7 @@ void shutdown_netfront(struct netfront_dev *dev) err = xenbus_wait_for_state_change(path, &state, &dev->events); close: - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); snprintf(path, sizeof(path), "%s/tx-ring-ref", nodename); xenbus_rm(XBT_NIL, path); diff --git a/pcifront.c b/pcifront.c index 718abf1..b9be949 100644 --- a/pcifront.c +++ b/pcifront.c @@ -246,7 +246,7 @@ done: err = xenbus_wait_for_state_change(path, &state, &dev->events); if (state != XenbusStateConnected) { printk("backend not avalable, state=%d\n", state); - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); goto error; } @@ -254,7 +254,7 @@ done: if ((err = xenbus_switch_state(XBT_NIL, frontpath, XenbusStateConnected)) != NULL) { printk("error switching state %s\n", err); - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); goto error; } } @@ -362,7 +362,7 @@ void shutdown_pcifront(struct pcifront_dev *dev) err = xenbus_wait_for_state_change(path, &state, &dev->events); close_pcifront: - xenbus_unwatch_path(XBT_NIL, path); + xenbus_unwatch_path_token(XBT_NIL, path, path); snprintf(path, sizeof(path), "%s/info-ref", nodename); xenbus_rm(XBT_NIL, path); -- 2.39.5