aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/pcifront.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-07-31 13:30:24 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-07-31 13:30:24 +0100
commitadacb92a2b5e3ef66b924dc59ab1c2b2c98195c6 (patch)
tree9feb512dfb6331edfd2405389a9767ec7c89ba39 /extras/mini-os/pcifront.c
parentdfad53d5feed1111c2f660fb4d8e44ac004cf206 (diff)
downloadxen-adacb92a2b5e3ef66b924dc59ab1c2b2c98195c6.tar.gz
xen-adacb92a2b5e3ef66b924dc59ab1c2b2c98195c6.tar.bz2
xen-adacb92a2b5e3ef66b924dc59ab1c2b2c98195c6.zip
mini-os: make init_pcifront fail early if there is no backend
Else, we would leave entries in xenstore, which disturbs xend. Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/pcifront.c')
-rw-r--r--extras/mini-os/pcifront.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/extras/mini-os/pcifront.c b/extras/mini-os/pcifront.c
index a924a6e8d9..5b68d86b56 100644
--- a/extras/mini-os/pcifront.c
+++ b/extras/mini-os/pcifront.c
@@ -57,6 +57,7 @@ struct pcifront_dev *init_pcifront(char *_nodename)
int retry=0;
char* msg;
char* nodename = _nodename ? _nodename : "device/pci/0";
+ int dom;
struct pcifront_dev *dev;
@@ -64,12 +65,18 @@ struct pcifront_dev *init_pcifront(char *_nodename)
printk("******************* PCIFRONT for %s **********\n\n\n", nodename);
+ snprintf(path, sizeof(path), "%s/backend-id", nodename);
+ dom = xenbus_read_integer(path);
+ if (dom == -1) {
+ printk("no backend\n");
+ return NULL;
+ }
+
dev = malloc(sizeof(*dev));
memset(dev, 0, sizeof(*dev));
dev->nodename = strdup(nodename);
+ dev->dom = dom;
- snprintf(path, sizeof(path), "%s/backend-id", nodename);
- dev->dom = xenbus_read_integer(path);
evtchn_alloc_unbound(dev->dom, pcifront_handler, dev, &dev->evtchn);
dev->info = (struct xen_pci_sharedinfo*) alloc_page();