From b2af92c821f139413db2e16c4a2c0340c89a03ff Mon Sep 17 00:00:00 2001 From: Christopher Milan Date: Tue, 25 Nov 2025 23:33:48 -0500 Subject: [PATCH] fix HCQGraph.__del__ bug when finalizing (#13298) * fix _do_ioctl import * fix circular import * suppress_finalizing instead --- tinygrad/runtime/graph/hcq.py | 3 ++- tinygrad/runtime/ops_qcom.py | 1 + tinygrad/runtime/support/c.py | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/tinygrad/runtime/graph/hcq.py b/tinygrad/runtime/graph/hcq.py index a025cf4655..7ee71e5452 100644 --- a/tinygrad/runtime/graph/hcq.py +++ b/tinygrad/runtime/graph/hcq.py @@ -1,6 +1,6 @@ import collections, time from typing import Any, cast -from tinygrad.helpers import round_up, PROFILE, merge_dicts, getenv, dedup +from tinygrad.helpers import round_up, PROFILE, merge_dicts, getenv, dedup, suppress_finalizing from tinygrad.runtime.support.hcq import HCQCompiled, HCQAllocator, HCQSignal, HCQBuffer, HWQueue, HCQArgsState, BumpAllocator, MMIOInterface from tinygrad.device import Buffer, BufferSpec, Compiled, Device, ProfileGraphEntry, ProfileGraphEvent from tinygrad.dtype import dtypes @@ -221,6 +221,7 @@ class HCQGraph(MultiGraphRunner): def dev_name(self, dev) -> str: return dev.device.replace(":", "_") + @suppress_finalizing def __del__(self): for dev in self.devices: self.last_timeline[dev][0].wait(self.last_timeline[dev][1]) diff --git a/tinygrad/runtime/ops_qcom.py b/tinygrad/runtime/ops_qcom.py index 09652359f4..7ec0ba89fa 100644 --- a/tinygrad/runtime/ops_qcom.py +++ b/tinygrad/runtime/ops_qcom.py @@ -51,6 +51,7 @@ class QCOMComputeQueue(HWQueue): self.dev = dev super().__init__() + @suppress_finalizing def __del__(self): if self.binded_device is not None: self.binded_device.allocator.free(self.hw_page, self.hw_page.size, BufferSpec(cpu_access=True, nolru=True)) diff --git a/tinygrad/runtime/support/c.py b/tinygrad/runtime/support/c.py index c441942b58..fb6da8a2f0 100644 --- a/tinygrad/runtime/support/c.py +++ b/tinygrad/runtime/support/c.py @@ -1,9 +1,10 @@ import ctypes, functools, sys from typing import TYPE_CHECKING -from tinygrad.helpers import flatten +from tinygrad.helpers import flatten, WIN from _ctypes import _SimpleCData def _do_ioctl(__idir, __base, __nr, __struct, __fd, *args, __payload=None, **kwargs): + assert not WIN, "ioctl not supported" import tinygrad.runtime.support.hcq as hcq, fcntl ioctl = __fd.ioctl if isinstance(__fd, hcq.FileIOInterface) else functools.partial(fcntl.ioctl, __fd) if (rc:=ioctl((__idir<<30)|(ctypes.sizeof(out:=(__payload or __struct(*args, **kwargs)))<<16)|(__base<<8)|__nr, out)):