return bm_status;
 }
 
+static void wait_for_freeze(void)
+{
+#ifdef CONFIG_X86
+       /* No delay is needed if we are in guest */
+       if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
+               return;
+#endif
+       /* Dummy wait op - must do something useless after P_LVL2 read
+          because chipsets cannot guarantee that STPCLK# signal
+          gets asserted in time to freeze execution properly. */
+       inl(acpi_gbl_FADT.xpm_timer_block.address);
+}
+
 /**
  * acpi_idle_do_entry - enter idle state using the appropriate method
  * @cx: cstate data
        } else {
                /* IO port based C-state */
                inb(cx->address);
-               /* Dummy wait op - must do something useless after P_LVL2 read
-                  because chipsets cannot guarantee that STPCLK# signal
-                  gets asserted in time to freeze execution properly. */
-               inl(acpi_gbl_FADT.xpm_timer_block.address);
+               wait_for_freeze();
        }
 }
 
                        safe_halt();
                else if (cx->entry_method == ACPI_CSTATE_SYSTEMIO) {
                        inb(cx->address);
-                       /* See comment in acpi_idle_do_entry() */
-                       inl(acpi_gbl_FADT.xpm_timer_block.address);
+                       wait_for_freeze();
                } else
                        return -ENODEV;
        }