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: 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>
This commit is contained in:
parent
2abb274629
commit
33c1174bae
3 changed files with 20 additions and 15 deletions
|
@ -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);
|
||||||
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)
|
||||||
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)
|
||||||
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 {
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue