Does someone knows how it will work?

  1. Some wine/proton wizardry
  2. Gaming VM with GPU passthrough
  • Mttw_@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    2
    ·
    9 hours ago

    No, 5800x3d is zen3 sadly.

    But you can actually test it with a small python script:

    # docs: https://man.archlinux.org/man/arch_prctl.2
    import ctypes
    import errno
    import mmap
    import os
    import signal
    import subprocess
    import sys
    
    SYS_arch_prctl = 158
    ARCH_SET_CPUID = 0x1012
    
    libc = ctypes.CDLL(None, use_errno=True)
    libc.syscall.restype = ctypes.c_long
    
    def arch_set_cpuid(enabled: bool) -> None:
        rc = libc.syscall(SYS_arch_prctl, ARCH_SET_CPUID, 1 if enabled else 0)
        if rc != 0:
            e = ctypes.get_errno()
            raise OSError(e, os.strerror(e))
    
    def make_cpuid_stub():
        # push rbx
        # xor eax, eax
        # cpuid
        # pop rbx
        # ret
        code = b"\x53\x31\xc0\x0f\xa2\x5b\xc3"
        mm = mmap.mmap(
            -1,
            len(code),
            flags=mmap.MAP_PRIVATE | mmap.MAP_ANONYMOUS,
            prot=mmap.PROT_READ | mmap.PROT_WRITE | mmap.PROT_EXEC,
        )
        mm.write(code)
        addr = ctypes.addressof(ctypes.c_char.from_buffer(mm))
        func = ctypes.CFUNCTYPE(None)(addr)
        func._mm = mm
        return func
    
    def child():
        cpuid = make_cpuid_stub()
    
        print("Trying normal CPUID...")
        cpuid()
        print("Normal CPUID worked.")
    
        try:
            arch_set_cpuid(False)
        except OSError as e:
            if e.errno == errno.ENODEV:
                print("CPU does not support CPUID faulting.")
                return 2
            raise
    
        print("CPUID disabled for this thread. Calling CPUID again...")
        cpuid()  # should SIGSEGV -11 if faulting is supported
        print("Unexpected: CPUID did not fault.")
        return 0
    
    if __name__ == "__main__":
        if len(sys.argv) > 1 and sys.argv[1] == "child":
            raise SystemExit(child())
    
        p = subprocess.run([sys.executable, __file__, "child"], text=True)
        print(f"child exit code: {p.returncode}")
    
        if p.returncode == -signal.SIGSEGV:
            print("Result: CPUID faulting is supported and worked.")
        elif p.returncode == 2:
            print("Result: CPUID faulting is not supported by the hardware.")
        else:
            print("Result: test did not complete cleanly.")
    
    • kkj@lemmy.dbzer0.com
      link
      fedilink
      English
      arrow-up
      1
      ·
      7 hours ago

      I was referring to AMD bringing the 5800X3D out of retirement. They said that they redesigned it. It’s probably just moving the cache under the CPU like on Zen5 3D, but I feel like there’s a very slight chance.