Skip to content

Commit 79de980

Browse files
authored
am: do not fork pci bars (tinygrad#8969)
1 parent 0cac941 commit 79de980

File tree

3 files changed

+87
-22
lines changed

3 files changed

+87
-22
lines changed

autogen_stubs.sh

+1
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ generate_libc() {
213213
$(dpkg -L libc6-dev | grep sys/syscall.h) \
214214
/usr/include/elf.h \
215215
/usr/include/unistd.h \
216+
/usr/include/asm-generic/mman-common.h \
216217
-o $BASE/libc.py
217218

218219
sed -i "s\import ctypes\import ctypes, ctypes.util, os\g" $BASE/libc.py

tinygrad/runtime/autogen/libc.py

+84-21
Original file line numberDiff line numberDiff line change
@@ -4401,6 +4401,55 @@ class struct_c__SA_Elf_MIPS_ABIFlags_v0(Structure):
44014401
getentropy.argtypes = [ctypes.POINTER(None), size_t]
44024402
except AttributeError:
44034403
pass
4404+
__ASM_GENERIC_MMAN_COMMON_H = True # macro
4405+
PROT_READ = 0x1 # macro
4406+
PROT_WRITE = 0x2 # macro
4407+
PROT_EXEC = 0x4 # macro
4408+
PROT_SEM = 0x8 # macro
4409+
PROT_NONE = 0x0 # macro
4410+
PROT_GROWSDOWN = 0x01000000 # macro
4411+
PROT_GROWSUP = 0x02000000 # macro
4412+
MAP_TYPE = 0x0f # macro
4413+
MAP_FIXED = 0x10 # macro
4414+
MAP_ANONYMOUS = 0x20 # macro
4415+
MAP_POPULATE = 0x008000 # macro
4416+
MAP_NONBLOCK = 0x010000 # macro
4417+
MAP_STACK = 0x020000 # macro
4418+
MAP_HUGETLB = 0x040000 # macro
4419+
MAP_SYNC = 0x080000 # macro
4420+
MAP_FIXED_NOREPLACE = 0x100000 # macro
4421+
MAP_UNINITIALIZED = 0x4000000 # macro
4422+
MLOCK_ONFAULT = 0x01 # macro
4423+
MS_ASYNC = 1 # macro
4424+
MS_INVALIDATE = 2 # macro
4425+
MS_SYNC = 4 # macro
4426+
MADV_NORMAL = 0 # macro
4427+
MADV_RANDOM = 1 # macro
4428+
MADV_SEQUENTIAL = 2 # macro
4429+
MADV_WILLNEED = 3 # macro
4430+
MADV_DONTNEED = 4 # macro
4431+
MADV_FREE = 8 # macro
4432+
MADV_REMOVE = 9 # macro
4433+
MADV_DONTFORK = 10 # macro
4434+
MADV_DOFORK = 11 # macro
4435+
MADV_HWPOISON = 100 # macro
4436+
MADV_SOFT_OFFLINE = 101 # macro
4437+
MADV_MERGEABLE = 12 # macro
4438+
MADV_UNMERGEABLE = 13 # macro
4439+
MADV_HUGEPAGE = 14 # macro
4440+
MADV_NOHUGEPAGE = 15 # macro
4441+
MADV_DONTDUMP = 16 # macro
4442+
MADV_DODUMP = 17 # macro
4443+
MADV_WIPEONFORK = 18 # macro
4444+
MADV_KEEPONFORK = 19 # macro
4445+
MADV_COLD = 20 # macro
4446+
MADV_PAGEOUT = 21 # macro
4447+
MADV_POPULATE_READ = 22 # macro
4448+
MADV_POPULATE_WRITE = 23 # macro
4449+
MAP_FILE = 0 # macro
4450+
PKEY_DISABLE_ACCESS = 0x1 # macro
4451+
PKEY_DISABLE_WRITE = 0x2 # macro
4452+
PKEY_ACCESS_MASK = (0x1|0x2) # macro
44044453
__all__ = \
44054454
['AT_BASE', 'AT_BASE_PLATFORM', 'AT_CLKTCK', 'AT_DCACHEBSIZE',
44064455
'AT_EGID', 'AT_ENTRY', 'AT_EUID', 'AT_EXECFD', 'AT_EXECFN',
@@ -4596,20 +4645,31 @@ class struct_c__SA_Elf_MIPS_ABIFlags_v0(Structure):
45964645
'LITUSE_ALPHA_TLS_GD', 'LITUSE_ALPHA_TLS_LDM', 'LL_DELAY_LOAD',
45974646
'LL_DELTA', 'LL_EXACT_MATCH', 'LL_EXPORTS', 'LL_IGNORE_INT_VER',
45984647
'LL_NONE', 'LL_REQUIRE_MINOR', 'L_INCR', 'L_SET', 'L_XTND',
4599-
'MIPS_AFL_ASE_DSP', 'MIPS_AFL_ASE_DSPR2', 'MIPS_AFL_ASE_EVA',
4600-
'MIPS_AFL_ASE_MASK', 'MIPS_AFL_ASE_MCU', 'MIPS_AFL_ASE_MDMX',
4601-
'MIPS_AFL_ASE_MICROMIPS', 'MIPS_AFL_ASE_MIPS16',
4602-
'MIPS_AFL_ASE_MIPS3D', 'MIPS_AFL_ASE_MSA', 'MIPS_AFL_ASE_MT',
4603-
'MIPS_AFL_ASE_SMARTMIPS', 'MIPS_AFL_ASE_VIRT', 'MIPS_AFL_ASE_XPA',
4604-
'MIPS_AFL_EXT_10000', 'MIPS_AFL_EXT_3900', 'MIPS_AFL_EXT_4010',
4605-
'MIPS_AFL_EXT_4100', 'MIPS_AFL_EXT_4111', 'MIPS_AFL_EXT_4120',
4606-
'MIPS_AFL_EXT_4650', 'MIPS_AFL_EXT_5400', 'MIPS_AFL_EXT_5500',
4607-
'MIPS_AFL_EXT_5900', 'MIPS_AFL_EXT_LOONGSON_2E',
4608-
'MIPS_AFL_EXT_LOONGSON_2F', 'MIPS_AFL_EXT_LOONGSON_3A',
4609-
'MIPS_AFL_EXT_OCTEON', 'MIPS_AFL_EXT_OCTEON2',
4610-
'MIPS_AFL_EXT_OCTEONP', 'MIPS_AFL_EXT_SB1', 'MIPS_AFL_EXT_XLR',
4648+
'MADV_COLD', 'MADV_DODUMP', 'MADV_DOFORK', 'MADV_DONTDUMP',
4649+
'MADV_DONTFORK', 'MADV_DONTNEED', 'MADV_FREE', 'MADV_HUGEPAGE',
4650+
'MADV_HWPOISON', 'MADV_KEEPONFORK', 'MADV_MERGEABLE',
4651+
'MADV_NOHUGEPAGE', 'MADV_NORMAL', 'MADV_PAGEOUT',
4652+
'MADV_POPULATE_READ', 'MADV_POPULATE_WRITE', 'MADV_RANDOM',
4653+
'MADV_REMOVE', 'MADV_SEQUENTIAL', 'MADV_SOFT_OFFLINE',
4654+
'MADV_UNMERGEABLE', 'MADV_WILLNEED', 'MADV_WIPEONFORK',
4655+
'MAP_ANONYMOUS', 'MAP_FILE', 'MAP_FIXED', 'MAP_FIXED_NOREPLACE',
4656+
'MAP_HUGETLB', 'MAP_NONBLOCK', 'MAP_POPULATE', 'MAP_STACK',
4657+
'MAP_SYNC', 'MAP_TYPE', 'MAP_UNINITIALIZED', 'MIPS_AFL_ASE_DSP',
4658+
'MIPS_AFL_ASE_DSPR2', 'MIPS_AFL_ASE_EVA', 'MIPS_AFL_ASE_MASK',
4659+
'MIPS_AFL_ASE_MCU', 'MIPS_AFL_ASE_MDMX', 'MIPS_AFL_ASE_MICROMIPS',
4660+
'MIPS_AFL_ASE_MIPS16', 'MIPS_AFL_ASE_MIPS3D', 'MIPS_AFL_ASE_MSA',
4661+
'MIPS_AFL_ASE_MT', 'MIPS_AFL_ASE_SMARTMIPS', 'MIPS_AFL_ASE_VIRT',
4662+
'MIPS_AFL_ASE_XPA', 'MIPS_AFL_EXT_10000', 'MIPS_AFL_EXT_3900',
4663+
'MIPS_AFL_EXT_4010', 'MIPS_AFL_EXT_4100', 'MIPS_AFL_EXT_4111',
4664+
'MIPS_AFL_EXT_4120', 'MIPS_AFL_EXT_4650', 'MIPS_AFL_EXT_5400',
4665+
'MIPS_AFL_EXT_5500', 'MIPS_AFL_EXT_5900',
4666+
'MIPS_AFL_EXT_LOONGSON_2E', 'MIPS_AFL_EXT_LOONGSON_2F',
4667+
'MIPS_AFL_EXT_LOONGSON_3A', 'MIPS_AFL_EXT_OCTEON',
4668+
'MIPS_AFL_EXT_OCTEON2', 'MIPS_AFL_EXT_OCTEONP',
4669+
'MIPS_AFL_EXT_SB1', 'MIPS_AFL_EXT_XLR',
46114670
'MIPS_AFL_FLAGS1_ODDSPREG', 'MIPS_AFL_REG_128', 'MIPS_AFL_REG_32',
4612-
'MIPS_AFL_REG_64', 'MIPS_AFL_REG_NONE',
4671+
'MIPS_AFL_REG_64', 'MIPS_AFL_REG_NONE', 'MLOCK_ONFAULT',
4672+
'MS_ASYNC', 'MS_INVALIDATE', 'MS_SYNC',
46134673
'NOTE_GNU_PROPERTY_SECTION_NAME', 'NT_386_IOPERM', 'NT_386_TLS',
46144674
'NT_ARM_HW_BREAK', 'NT_ARM_HW_WATCH', 'NT_ARM_PACA_KEYS',
46154675
'NT_ARM_PACG_KEYS', 'NT_ARM_PAC_ENABLED_KEYS', 'NT_ARM_PAC_MASK',
@@ -4644,9 +4704,12 @@ class struct_c__SA_Elf_MIPS_ABIFlags_v0(Structure):
46444704
'PF_HP_FAR_SHARED', 'PF_HP_LAZYSWAP', 'PF_HP_MODIFY',
46454705
'PF_HP_NEAR_SHARED', 'PF_HP_PAGE_SIZE', 'PF_HP_SBP',
46464706
'PF_IA_64_NORECOV', 'PF_MASKOS', 'PF_MASKPROC', 'PF_MIPS_LOCAL',
4647-
'PF_PARISC_SBP', 'PF_R', 'PF_W', 'PF_X', 'PN_XNUM',
4707+
'PF_PARISC_SBP', 'PF_R', 'PF_W', 'PF_X', 'PKEY_ACCESS_MASK',
4708+
'PKEY_DISABLE_ACCESS', 'PKEY_DISABLE_WRITE', 'PN_XNUM',
46484709
'PPC64_OPT_LOCALENTRY', 'PPC64_OPT_MULTI_TOC', 'PPC64_OPT_TLS',
4649-
'PPC_OPT_TLS', 'PT_ARM_EXIDX', 'PT_DYNAMIC', 'PT_GNU_EH_FRAME',
4710+
'PPC_OPT_TLS', 'PROT_EXEC', 'PROT_GROWSDOWN', 'PROT_GROWSUP',
4711+
'PROT_NONE', 'PROT_READ', 'PROT_SEM', 'PROT_WRITE',
4712+
'PT_ARM_EXIDX', 'PT_DYNAMIC', 'PT_GNU_EH_FRAME',
46504713
'PT_GNU_PROPERTY', 'PT_GNU_RELRO', 'PT_GNU_STACK', 'PT_HIOS',
46514714
'PT_HIPROC', 'PT_HISUNW', 'PT_HP_CORE_COMM', 'PT_HP_CORE_KERNEL',
46524715
'PT_HP_CORE_LOADABLE', 'PT_HP_CORE_MMF', 'PT_HP_CORE_NONE',
@@ -5407,12 +5470,12 @@ class struct_c__SA_Elf_MIPS_ABIFlags_v0(Structure):
54075470
'_POSIX2_VERSION', '_POSIX_VERSION', '_SYSCALL_H', '_SYS_MMAN_H',
54085471
'_UNISTD_H', '_XOPEN_ENH_I18N', '_XOPEN_LEGACY', '_XOPEN_UNIX',
54095472
'_XOPEN_VERSION', '_XOPEN_XCU_VERSION', '_XOPEN_XPG2',
5410-
'_XOPEN_XPG3', '_XOPEN_XPG4', '__POSIX2_THIS_VERSION',
5411-
'__environ', '__getpgid', '__gid_t', '__gid_t_defined',
5412-
'__intptr_t_defined', '__mode_t_defined', '__need_NULL',
5413-
'__need_size_t', '__off_t', '__off_t_defined', '__pid_t',
5414-
'__pid_t_defined', '__socklen_t_defined', '__ssize_t_defined',
5415-
'__uid_t', '__uid_t_defined', '__useconds_t',
5473+
'_XOPEN_XPG3', '_XOPEN_XPG4', '__ASM_GENERIC_MMAN_COMMON_H',
5474+
'__POSIX2_THIS_VERSION', '__environ', '__getpgid', '__gid_t',
5475+
'__gid_t_defined', '__intptr_t_defined', '__mode_t_defined',
5476+
'__need_NULL', '__need_size_t', '__off_t', '__off_t_defined',
5477+
'__pid_t', '__pid_t_defined', '__socklen_t_defined',
5478+
'__ssize_t_defined', '__uid_t', '__uid_t_defined', '__useconds_t',
54165479
'__useconds_t_defined', '_exit', 'access', 'acct', 'alarm', 'brk',
54175480
'c__Ea_Val_GNU_MIPS_ABI_FP_ANY', 'chdir', 'chown', 'chroot',
54185481
'close', 'closefrom', 'confstr', 'crypt', 'daemon', 'dup', 'dup2',

tinygrad/runtime/ops_amd.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,8 @@ def __init__(self, dev, dev_id):
505505

506506
def _map_pci_range(self, bar, off=0, addr=0, size=None):
507507
fd, sz = self.bar_fds[bar], size or self.pcidev.regions[bar].size
508-
return to_mv(fd.mmap(addr, sz, mmap.PROT_READ | mmap.PROT_WRITE, mmap.MAP_SHARED | (MAP_FIXED if addr else 0), off), sz)
508+
libc.madvise(loc:=fd.mmap(addr, sz, mmap.PROT_READ | mmap.PROT_WRITE, mmap.MAP_SHARED | (MAP_FIXED if addr else 0), off), sz, libc.MADV_DONTFORK)
509+
return to_mv(loc, sz)
509510

510511
def alloc(self, size:int, host=False, uncached=False, cpu_access=False):
511512
if host or (not getenv("AMD_ALLOC_QUEUE_DEV_MEM", 1) and uncached and cpu_access): # host or gtt-like memory.

0 commit comments

Comments
 (0)