|
@@ -755,7 +755,10 @@ int register_xenstore_notifier(struct notifier_block *nb)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
|
|
|
- blocking_notifier_chain_register(&xenstore_chain, nb);
|
|
|
+ if (xenstored_ready > 0)
|
|
|
+ ret = nb->notifier_call(nb, 0, NULL);
|
|
|
+ else
|
|
|
+ blocking_notifier_chain_register(&xenstore_chain, nb);
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
@@ -769,7 +772,7 @@ EXPORT_SYMBOL_GPL(unregister_xenstore_notifier);
|
|
|
|
|
|
void xenbus_probe(struct work_struct *unused)
|
|
|
{
|
|
|
- BUG_ON((xenstored_ready <= 0));
|
|
|
+ xenstored_ready = 1;
|
|
|
|
|
|
/* Enumerate devices in xenstore and watch for changes. */
|
|
|
xenbus_probe_devices(&xenbus_frontend);
|
|
@@ -835,8 +838,8 @@ static int __init xenbus_init(void)
|
|
|
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);
|
|
|
+ xenstored_ready = 1;
|
|
|
}
|
|
|
- xenstored_ready = 1;
|
|
|
}
|
|
|
|
|
|
/* Initialize the interface to xenstore. */
|