diff --git a/tinygrad/runtime/support/system.py b/tinygrad/runtime/support/system.py index 4971b7f5b0..562a6b842c 100644 --- a/tinygrad/runtime/support/system.py +++ b/tinygrad/runtime/support/system.py @@ -1,4 +1,4 @@ -import os, mmap, array, functools, ctypes, select, contextlib, dataclasses, sys, errno, itertools +import os, mmap, array, functools, ctypes, select, contextlib, dataclasses, sys, itertools from typing import cast, ClassVar from tinygrad.helpers import round_up, getenv, OSX, temp, ceildiv from tinygrad.runtime.autogen import libc, vfio, pci @@ -173,17 +173,16 @@ class PCIDevice: self.lock_fd = System.flock_acquire(f"{devpref.lower()}_{pcibus.lower()}.lock") self.pcibus, self.irq_poller = pcibus, None + try: FileIOInterface(f"/sys/bus/pci/devices/{self.pcibus}/enable", os.O_RDWR) + except PermissionError: raise PermissionError(f"Cannot access PCI device {pcibus}: run `extra/amdpci/setup_python_cap.sh` or use sudo") + if FileIOInterface.exists(f"/sys/bus/pci/devices/{self.pcibus}/driver"): FileIOInterface(f"/sys/bus/pci/devices/{self.pcibus}/driver/unbind", os.O_WRONLY).write(self.pcibus) for i in resize_bars or []: if FileIOInterface.exists(rpath:=f"/sys/bus/pci/devices/{self.pcibus}/resource{i}_resize"): try: FileIOInterface(rpath, os.O_RDWR).write(str(int(FileIOInterface(rpath, os.O_RDONLY).read(), 16).bit_length() - 1)) - except OSError as e: - if e.errno in {errno.EPERM, errno.EACCES}: - raise RuntimeError(f"Cannot resize BAR {i}: {e}. Permission error: run `extra/amdpci/setup_python_cap.sh`" - " to allow python accessing device or run with sudo") from e - raise RuntimeError(f"Cannot resize BAR {i}: {e}. Ensure the resizable BAR option is enabled on your system.") from e + except OSError as e: raise RuntimeError(f"Cannot resize BAR {i}: {e}. Ensure the resizable BAR option is enabled.") from e if getenv("VFIO", 0) and (vfio_fd:=System.vfio) is not None: FileIOInterface(f"/sys/bus/pci/devices/{self.pcibus}/driver_override", os.O_WRONLY).write("vfio-pci")