Skip to content

Commit

Permalink
xenbus: save xenstore local status for later use
Browse files Browse the repository at this point in the history
Save the xenstore local status computed in xenbus_init. It can then be used
later to check if xenstored is running in this domain.

Signed-off-by: Aurelien Chartier <aurelien.chartier@citrix.com>
[Changes in v4:
- Change variable name to xen_store_domain_type]
Reviewed-by: David Vrabel <david.vrabel@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  • Loading branch information
Aurelien Chartier authored and Konrad Rzeszutek Wilk committed May 29, 2013
1 parent 2abb274 commit 33c1174
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 15 deletions.
1 change: 1 addition & 0 deletions drivers/xen/xenbus/xenbus_comms.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ int xb_wait_for_data_to_read(void);
int xs_input_avail(void);
extern struct xenstore_domain_interface *xen_store_interface;
extern int xen_store_evtchn;
extern enum xenstore_init xen_store_domain_type;

extern const struct file_operations xen_xenbus_fops;

Expand Down
27 changes: 12 additions & 15 deletions drivers/xen/xenbus/xenbus_probe.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ EXPORT_SYMBOL_GPL(xen_store_evtchn);
struct xenstore_domain_interface *xen_store_interface;
EXPORT_SYMBOL_GPL(xen_store_interface);

enum xenstore_init xen_store_domain_type;
EXPORT_SYMBOL_GPL(xen_store_domain_type);

static unsigned long xen_store_mfn;

static BLOCKING_NOTIFIER_HEAD(xenstore_chain);
Expand Down Expand Up @@ -719,47 +722,41 @@ static int __init xenstored_local_init(void)
return err;
}

enum xenstore_init {
UNKNOWN,
PV,
HVM,
LOCAL,
};
static int __init xenbus_init(void)
{
int err = 0;
enum xenstore_init usage = UNKNOWN;
uint64_t v = 0;
xen_store_domain_type = XS_UNKNOWN;

if (!xen_domain())
return -ENODEV;

xenbus_ring_ops_init();

if (xen_pv_domain())
usage = PV;
xen_store_domain_type = XS_PV;
if (xen_hvm_domain())
usage = HVM;
xen_store_domain_type = XS_HVM;
if (xen_hvm_domain() && xen_initial_domain())
usage = LOCAL;
xen_store_domain_type = XS_LOCAL;
if (xen_pv_domain() && !xen_start_info->store_evtchn)
usage = LOCAL;
xen_store_domain_type = XS_LOCAL;
if (xen_pv_domain() && xen_start_info->store_evtchn)
xenstored_ready = 1;

switch (usage) {
case LOCAL:
switch (xen_store_domain_type) {
case XS_LOCAL:
err = xenstored_local_init();
if (err)
goto out_error;
xen_store_interface = mfn_to_virt(xen_store_mfn);
break;
case PV:
case XS_PV:
xen_store_evtchn = xen_start_info->store_evtchn;
xen_store_mfn = xen_start_info->store_mfn;
xen_store_interface = mfn_to_virt(xen_store_mfn);
break;
case HVM:
case XS_HVM:
err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v);
if (err)
goto out_error;
Expand Down
7 changes: 7 additions & 0 deletions drivers/xen/xenbus/xenbus_probe.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@ struct xen_bus_type {
struct bus_type bus;
};

enum xenstore_init {
XS_UNKNOWN,
XS_PV,
XS_HVM,
XS_LOCAL,
};

extern struct device_attribute xenbus_dev_attrs[];

extern int xenbus_match(struct device *_dev, struct device_driver *_drv);
Expand Down

0 comments on commit 33c1174

Please sign in to comment.