diff --git a/src/arch/x86/time.rs b/src/arch/x86/time.rs
index 665f8ce505658d5bcb47b5095bcd3fa996b8fe77..d610050a09a6820f783c9b2aefb29f8ef89fcf93 100644
--- a/src/arch/x86/time.rs
+++ b/src/arch/x86/time.rs
@@ -14,7 +14,15 @@ pub fn counter() -> u128 {
         let comparator = unsafe { hpet.base_address.read_u64(hpet::T0_COMPARATOR_OFFSET) };
         // Get period in femtoseconds
         let capability = unsafe { hpet.base_address.read_u64(hpet::CAPABILITY_OFFSET) };
-        let period_fs = capability >> 32;
+
+        // There seems to be a bug in qemu on macos that causes the calculation to produce 0 for
+        // period_fs and hence a divide by zero calculating the divisor - workaround it while we
+        // try and get a fix from qemu: https://gitlab.com/qemu-project/qemu/-/issues/1570
+        let mut period_fs = capability >> 32;
+        if period_fs == 0 {
+            period_fs = 10_000_000;
+        }
+
         // Calculate divisor
         let divisor = (pit::RATE as u64 * 1_000_000) / period_fs;
         // Calculate last interrupt