We have a fleet of new lunar lake about 700 LP7 and 80 Pro 11, older LP4 600 and 10 Pro 8
all these device run the same image Win 11 24h2.

the BSOD event between the two fleets is shocking !

https://preview.redd.it/2mi7k1edfs6g1.png?width=815&format=png&auto=webp&s=12586fc30bc0c5741582d8c0ae773ec58bf9504a

We see allot more BSOD on the Lunar Lake devices. The main one bugcheck  SYSTEM_SERVICE_EXCEPTION (3b) is caused by Lunar Lake CPU flaw that was fixed this summer, the issue is tracked by Intel as LNL045,  ref :  https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases/tag/microcode-20251111

The laptop 7 intel is now on Microcode 121, but the Pro 11 Intel still has not received that microcode update. It is still on 11c. Waiting for MS to give an ETA on a newer release.

This breakdown for BSOD types on the Laptop 7 , next on our list is the Hypervisor_error, the Memory management one might have been fixed by the microcode update

https://preview.redd.it/kgjql3j6uu6g1.png?width=748&format=png&auto=webp&s=848d5b6749bfd1f028b5cb54cd1d1ca7475f08ec

All this data just comes from parsing the mini dump files on all our device with Windows debugger tools, dumpcheck -v and kd.exe used extract device info such as cpu and microcode details.

Our Pro 11 intel major BSOD types :

https://preview.redd.it/c245l9qbuu6g1.png?width=721&format=png&auto=webp&s=b3f4d8813b954f0856b32bd8168d760b918f719d

BSOD MANUALLY_INITIATED_POWER_BUTTON_HOLD does have sub-type that I call the impatience BSOD occurs when end user feels that causing a hard restart is the best course of action, when really they should be restarting.

bonus your can use this function : Get-IntelMicrocodeCompliance I vibe coded with chat GPT to compare your microcode on a lunar lake with the release version intel makes available for Linux. OEM's such a Microsoft run seem to get custom microcode version that are not listed on the Intel public document but its the same CPU affected by the same flaws.

On the Surface device the Microcode updates are contained in the SurfaceUEFI .bin files this is also the main Bios update file.

function Get-IntelMicrocodeCompliance {

    [CmdletBinding()]
    param()

    #
    # STEP 1 — Parse LNL row from latest Intel public release
    #
    $apiUrl  = "https://api.github.com/repos/intel/Intel-Linux-Processor-Microcode-Data-Files/releases/latest"
    $release = Invoke-RestMethod -Uri $apiUrl -UseBasicParsing

    $tag  = $release.tag_name
    $bodyLines = ($release.body -split "`n")

    $lnlRow = $bodyLines |
        Where-Object { $_ -match '^\s*\|\s*LNL\s*\|' } |
        Select-Object -First 1

    if (-not $lnlRow) {
        throw "Could not locate LNL row inside Intel release '$tag'."
    }

    $cols = $lnlRow.Trim().Trim("|").Split("|") | ForEach-Object { $_.Trim() }
    $intelNewVerRaw = $cols[4]
    $intelNewVerDec = [Convert]::ToUInt32($intelNewVerRaw, 16)
    $intelNewVerHex = ('0x{0:X8}' -f $intelNewVerDec)


    #
    # STEP 2 — Read local CPU details from registry (correct source)
    #
    $regPath = "HKLM:\HARDWARE\DESCRIPTION\System\CentralProcessor\0"
    $cpuReg  = Get-ItemProperty -Path $regPath

    $identifier = $cpuReg.Identifier

    if ($identifier -match "Family\s+(\d+)\s+Model\s+(\d+)\s+Stepping\s+(\d+)") {
        $famDec = [int]$matches[1]
        $modDec = [int]$matches[2]
        $steDec = [int]$matches[3]
    }

    # OS-format CPUID = 06BD01
    $localCPUID_OS = "{0:X2}{1:X2}{2:X2}" -f $famDec, $modDec, $steDec

    # Intel-format CPUID = B06D1
    $extModel  = ($modDec -shr 4) -band 0xF
    $baseModel = $modDec -band 0xF
    $intelCPUID = ($extModel -shl 16) -bor ($famDec -shl 8) -bor ($baseModel -shl 4) -bor $steDec
    $localCPUID_Intel = ('{0:X5}' -f $intelCPUID)


    #
    # STEP 3 — Read actual microcode from registry
    #
    $revBytes = $cpuReg.'Update Revision'
    $localMCUDec = [BitConverter]::ToUInt32($revBytes[0..3],0)
    $localMCHex = ('0x{0:X8}' -f $localMCUDec)


    #
    # STEP 4 — Determine microcode source (BIOS vs OS)
    #
    # OS microcode loads via:
    #   C:\Windows\System32\mcupdate_genuineintel.dll
    #
    # If Windows loaded microcode, registry field:
    #   "Update Signature" or Status bits will indicate OS override
    #
    $mcStatus = $cpuReg.'Update Status'

    $biosSource = $true
    $osSource   = $false

    # Update Status bit 0 means: "Microcode loaded by OS"
    if ($mcStatus -band 1) {
        $biosSource = $false
        $osSource   = $true
    }

    $microcodeSource = if ($osSource) { "OS (Windows microcode update)" } else { "BIOS/UEFI Firmware" }


    #
    # STEP 5 — Determine if local version appears in public Intel releases
    #
    $publicVersions = @()

    # Collect all "Old Ver" and "New Ver" entries from latest release
    foreach ($line in $bodyLines) {
        if ($line -match "^\s*\|") {
            $cols2 = $line.Trim().Trim("|").Split("|") | ForEach-Object { $_.Trim() }
            if ($cols2.Count -ge 5) {
                $old = $cols2[3].PadLeft(8,'0').ToUpper()
                $new = $cols2[4].PadLeft(8,'0').ToUpper()
                $publicVersions += $old
                $publicVersions += $new
            }
        }
    }

    # Check if local version is in Intel public microcode stream
    $isIntelPublic = $publicVersions -contains $localMCHex.Substring(2).PadLeft(8,'0')

    # OEM-only if NOT in Intel public table
    $isOEMOnly = -not $isIntelPublic


    #
    # STEP 6 — CPU Name for clarity
    #
    $cpuName = (Get-CimInstance Win32_Processor | Select-Object -First 1).Name


    #
    # STEP 7 — Compare local vs Intel latest
    #
    $upToDate = ($localMCUDec -ge $intelNewVerDec)


    #
    # STEP 8 — Output object
    #
    [PSCustomObject]@{
        CPU_Name                 = $cpuName
        CPU_Identifier_Raw       = $identifier

        Local_CPUID_OS_Format    = $localCPUID_OS
        Local_CPUID_Intel_Format = $localCPUID_Intel

        Local_MC_Decimal         = $localMCUDec
        Local_MC_Hex             = $localMCHex

        Microcode_Source         = $microcodeSource
        OEM_Only                 = $isOEMOnly
        Intel_Public             = $isIntelPublic

        Intel_Release_Tag        = $tag
        Intel_LNL_NewVer_Hex     = $intelNewVerHex
        Intel_LNL_NewVer_Dec     = $intelNewVerDec

        UpToDate                 = $upToDate
    }
}
  • We are seeing the same thing in our enterprise. Working with microsoft on a few of them at the moment. The main two are the hypervisor and memory management Bugcheck which we finally heard back so the a root cause, I’ll have to dig the emails up when I’m back at work next week.

    Workarounds we are exploring is disabling the camera studio effects device in device manager but not confirmed yet.

    Forced shutdowns might be related to web view2 consuming too much memory and performance issues / locking up when coming out to sleep and hibernation. Still working with MS on that.

    Thank for this info. the BSOD are killing US ! Very interested in any of root cause you can share.

  • Have you guys seen these "X86 processor specific" issues in the past? I know Lunar Lake has issues with Linux as well in some cases. It's interesting that this specific cpu/architecture seems to be having issues.