Commit a947f0f8f7012a5e8689a9cff7209ec6964ec154

Authored by Stefano Stabellini
1 parent 899611ee7d

xen: do not set xenstored_ready before xenbus_probe on hvm

Register_xenstore_notifier should guarantee that the caller gets
notified even if xenstore is already up.
Therefore we revert "do not notify callers from
register_xenstore_notifier" and set xenstored_read at the right time for
PV on HVM guests too.
In fact in case of PV on HVM guests xenstored is ready only after the
platform pci driver has completed the initialization, so do not set
xenstored_ready before the call to xenbus_probe().

This patch fixes a shutdown_event watcher registration bug that causes
"xm shutdown" not to work properly.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Jeremy Fitzhardinge <jeremy@goop.org>

Showing 1 changed file with 6 additions and 3 deletions Side-by-side Diff

drivers/xen/xenbus/xenbus_probe.c
... ... @@ -755,7 +755,10 @@
755 755 {
756 756 int ret = 0;
757 757  
758   - blocking_notifier_chain_register(&xenstore_chain, nb);
  758 + if (xenstored_ready > 0)
  759 + ret = nb->notifier_call(nb, 0, NULL);
  760 + else
  761 + blocking_notifier_chain_register(&xenstore_chain, nb);
759 762  
760 763 return ret;
761 764 }
... ... @@ -769,7 +772,7 @@
769 772  
770 773 void xenbus_probe(struct work_struct *unused)
771 774 {
772   - BUG_ON((xenstored_ready <= 0));
  775 + xenstored_ready = 1;
773 776  
774 777 /* Enumerate devices in xenstore and watch for changes. */
775 778 xenbus_probe_devices(&xenbus_frontend);
776 779  
... ... @@ -835,8 +838,8 @@
835 838 xen_store_evtchn = xen_start_info->store_evtchn;
836 839 xen_store_mfn = xen_start_info->store_mfn;
837 840 xen_store_interface = mfn_to_virt(xen_store_mfn);
  841 + xenstored_ready = 1;
838 842 }
839   - xenstored_ready = 1;
840 843 }
841 844  
842 845 /* Initialize the interface to xenstore. */