Commit 33c1174b authored by Aurelien Chartier's avatar Aurelien Chartier Committed by Konrad Rzeszutek Wilk

xenbus: save xenstore local status for later use

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: default avatarAurelien Chartier <aurelien.chartier@citrix.com>
[Changes in v4:
- Change variable name to xen_store_domain_type]
Reviewed-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent 2abb2746
...@@ -45,6 +45,7 @@ int xb_wait_for_data_to_read(void); ...@@ -45,6 +45,7 @@ int xb_wait_for_data_to_read(void);
int xs_input_avail(void); int xs_input_avail(void);
extern struct xenstore_domain_interface *xen_store_interface; extern struct xenstore_domain_interface *xen_store_interface;
extern int xen_store_evtchn; extern int xen_store_evtchn;
extern enum xenstore_init xen_store_domain_type;
extern const struct file_operations xen_xenbus_fops; extern const struct file_operations xen_xenbus_fops;
......
...@@ -69,6 +69,9 @@ EXPORT_SYMBOL_GPL(xen_store_evtchn); ...@@ -69,6 +69,9 @@ EXPORT_SYMBOL_GPL(xen_store_evtchn);
struct xenstore_domain_interface *xen_store_interface; struct xenstore_domain_interface *xen_store_interface;
EXPORT_SYMBOL_GPL(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 unsigned long xen_store_mfn;
static BLOCKING_NOTIFIER_HEAD(xenstore_chain); static BLOCKING_NOTIFIER_HEAD(xenstore_chain);
...@@ -719,17 +722,11 @@ static int __init xenstored_local_init(void) ...@@ -719,17 +722,11 @@ static int __init xenstored_local_init(void)
return err; return err;
} }
enum xenstore_init {
UNKNOWN,
PV,
HVM,
LOCAL,
};
static int __init xenbus_init(void) static int __init xenbus_init(void)
{ {
int err = 0; int err = 0;
enum xenstore_init usage = UNKNOWN;
uint64_t v = 0; uint64_t v = 0;
xen_store_domain_type = XS_UNKNOWN;
if (!xen_domain()) if (!xen_domain())
return -ENODEV; return -ENODEV;
...@@ -737,29 +734,29 @@ static int __init xenbus_init(void) ...@@ -737,29 +734,29 @@ static int __init xenbus_init(void)
xenbus_ring_ops_init(); xenbus_ring_ops_init();
if (xen_pv_domain()) if (xen_pv_domain())
usage = PV; xen_store_domain_type = XS_PV;
if (xen_hvm_domain()) if (xen_hvm_domain())
usage = HVM; xen_store_domain_type = XS_HVM;
if (xen_hvm_domain() && xen_initial_domain()) if (xen_hvm_domain() && xen_initial_domain())
usage = LOCAL; xen_store_domain_type = XS_LOCAL;
if (xen_pv_domain() && !xen_start_info->store_evtchn) 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) if (xen_pv_domain() && xen_start_info->store_evtchn)
xenstored_ready = 1; xenstored_ready = 1;
switch (usage) { switch (xen_store_domain_type) {
case LOCAL: case XS_LOCAL:
err = xenstored_local_init(); err = xenstored_local_init();
if (err) if (err)
goto out_error; goto out_error;
xen_store_interface = mfn_to_virt(xen_store_mfn); xen_store_interface = mfn_to_virt(xen_store_mfn);
break; break;
case PV: case XS_PV:
xen_store_evtchn = xen_start_info->store_evtchn; xen_store_evtchn = xen_start_info->store_evtchn;
xen_store_mfn = xen_start_info->store_mfn; xen_store_mfn = xen_start_info->store_mfn;
xen_store_interface = mfn_to_virt(xen_store_mfn); xen_store_interface = mfn_to_virt(xen_store_mfn);
break; break;
case HVM: case XS_HVM:
err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v); err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v);
if (err) if (err)
goto out_error; goto out_error;
......
...@@ -47,6 +47,13 @@ struct xen_bus_type { ...@@ -47,6 +47,13 @@ struct xen_bus_type {
struct bus_type bus; struct bus_type bus;
}; };
enum xenstore_init {
XS_UNKNOWN,
XS_PV,
XS_HVM,
XS_LOCAL,
};
extern struct device_attribute xenbus_dev_attrs[]; extern struct device_attribute xenbus_dev_attrs[];
extern int xenbus_match(struct device *_dev, struct device_driver *_drv); extern int xenbus_match(struct device *_dev, struct device_driver *_drv);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment