Commit a947f0f8f7012a5e8689a9cff7209ec6964ec154
1 parent
899611ee7d
Exists in
master
and in
4 other branches
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. */ |