diff --git a/pkg/limayaml/defaults.go b/pkg/limayaml/defaults.go index cd3f8158aa25..e0042eb9e1ef 100644 --- a/pkg/limayaml/defaults.go +++ b/pkg/limayaml/defaults.go @@ -1194,14 +1194,16 @@ func HasHostCPU() bool { switch runtime.GOOS { case "darwin": if hasSMEDarwin() { - // SME is available since Apple M4 running macOS 15.2. - // - // However, QEMU is not ready to handle SME yet. - // - // https://github.com/lima-vm/lima/issues/3032 - // https://gitlab.com/qemu-project/qemu/-/issues/2665 - // https://gitlab.com/qemu-project/qemu/-/issues/2721 - return false + macOSProductVersion, err := osutil.ProductVersion() + if err != nil || macOSProductVersion.Equal(*semver.New("15.2")) { + // SME is available since Apple M4 running macOS 15.2, but it was broken on macOS 15.2. + // It has been fixed in 15.3. + // + // https://github.com/lima-vm/lima/issues/3032 + // https://gitlab.com/qemu-project/qemu/-/issues/2665 + // https://gitlab.com/qemu-project/qemu/-/issues/2721 + return false + } } return true case "linux": diff --git a/pkg/osutil/osversion_darwin.go b/pkg/osutil/osversion_darwin.go index 9a9338dcb5c5..6c72c9830908 100644 --- a/pkg/osutil/osversion_darwin.go +++ b/pkg/osutil/osversion_darwin.go @@ -4,12 +4,13 @@ import ( "fmt" "os/exec" "strings" + "sync" "github.com/coreos/go-semver/semver" ) // ProductVersion returns the macOS product version like "12.3.1". -func ProductVersion() (*semver.Version, error) { +var ProductVersion = sync.OnceValues(func() (*semver.Version, error) { cmd := exec.Command("sw_vers", "-productVersion") // output is like "12.3.1\n" b, err := cmd.Output() @@ -26,4 +27,4 @@ func ProductVersion() (*semver.Version, error) { return nil, fmt.Errorf("failed to parse macOS version %q: %w", verTrimmed, err) } return verSem, nil -} +})