Skip to content

PlatformRequestHandler: missing !bInit guard on bSystemParamLimitUpdate causes NV_ERR_INVALID_DATA at boot #1360

Description

@Punch-Pain

Problem

At boot, PlatformRequestHandler fires two NV_ERR_INVALID_DATA assertions:

NVRM: GPU0 nvAssertOkFailedNoLog: Assertion failed: Invalid data passed [NV_ERR_INVALID_DATA] (0x00000025) returned from PlatformRequestHandler failed to get target temp from SBIOS @ platform_request_handler_ctrl.c:2174
NVRM: GPU0 nvAssertOkFailedNoLog: Assertion failed: Invalid data passed [NV_ERR_INVALID_DATA] (0x00000025) returned from PlatformRequestHandler failed to get platform power mode from SBIOS @ platform_request_handler_ctrl.c:2117

These are boot-only cosmetic (runtime works fine), but the root cause is a missing guard in the driver.

Root Cause

In _pfmreqhndlrCallPshareStatus (platform_request_handler_ctrl.c), the bSystemParamLimitUpdate block at line 2467 has no !bInit guard:

// line 2467 — MISSING guard
if (pPfmreqhndlrData->PFMREQHNDLRACPIData.bSystemParamLimitUpdate)
{
    _pfmreqhndlrUpdateTgpuLimit(pPlatformRequestHandler, pGpu);   // line 2473 → 2174 ASSERT
    _pfmreqhndlrUpdatePpmdLimit(pPlatformRequestHandler, pGpu, NV_FALSE);  // line 2482 → 2117 ASSERT
    pPfmreqhndlrData->PFMREQHNDLRACPIData.bSystemParamLimitUpdate = NV_FALSE;
}

Every other block in the same function has a guard:

Line Block Guard
2387 EDPpeak && !bInit
2442 UserConfigTGP && !bInit
2457 PlatformCustomization (bInit)
2467 bSystemParamLimitUpdate none

During init, PSHARESTATUS (func 0x20) returns _UPDATE_LIMIT_PENDING. The driver immediately calls _pfmreqhndlrUpdateTgpuLimit and _pfmreqhndlrUpdatePpmdLimit before PSHAREPARAMS (func 0x2A) has initialized the TGPU/PPMD sensor counters. The counters are bSupported=false && !bVolatile, so pfmreqhndlrGetPerfSensorCounterById returns NV_ERR_INVALID_DATA.

The init-time PPMD update at line 1218 (after PSHAREPARAMS) already handles boot-time PPMD initialization correctly. The bSystemParamLimitUpdate block should be deferred to runtime, matching the pattern used by every other block.

Fix

One-line change at platform_request_handler_ctrl.c:2467:

// BEFORE:
if (pPfmreqhndlrData->PFMREQHNDLRACPIData.bSystemParamLimitUpdate)

// AFTER:
if (pPfmreqhndlrData->PFMREQHNDLRACPIData.bSystemParamLimitUpdate && !bInit)

Environment

  • Driver: 610.57.04 (open)
  • GPU: RTX 5050 Laptop (GB207M, 10DE:2D98)
  • Kernel: 7.2.3-1-cachyos
  • Platform: Lenovo LOQ 15IRX11

Impact

Boot-only cosmetic. No runtime side effects. The TGPU limit is applied on first runtime PSHARESTATUS with _UPDATE_LIMIT_PENDING. The init-time PPMD update at line 1218 already handles boot-time sensor initialization.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions