This fork tracks upstream master
(base 6c442ee). It adds working PCIe peer-to-peer copies on CMP 170HX using
the maintainer's P2P branch and opens TRAP31_PLM through the Booter when
ForceP2P enables peer reads or writes, allowing the mailbox trap to arm.
The patch set applies to 610.43.02, 610.43.03, 610.57.04 and 615.71.09; the four-card hardware result below was measured with 610.57.04.
With the requirements below installed, run:
sudo ./install.sh --p2p --profile=8gb --no-iommu --no-passthroughUse --profile=10gb for 10GB cards; omit --no-iommu or --no-passthrough
if you want the corresponding setup. The installer writes this combined line
and retains P2P on subsequent installs:
options nvidia NVreg_RegistryDwords="RmForceEnableGen2=1;RMPcieLinkSpeed=0x1;ForceP2P=0x11"
Stop GPU workloads before a module reload. The installer attempts a live reload; if the modules remain busy, stop their users and reload the NVIDIA modules, or cold boot. If memory stays at its stock size, power off completely before booting.
Verify actual data movement after loading the patched modules:
python3 tools/p2p-content-check.pyThe standalone checker needs Python 3 and the NVIDIA CUDA driver, without PyTorch
or a CUDA toolkit. It enables peer access on every ordered pair, copies fresh
random bytes at 128 KiB−1/128 KiB/128 KiB+1, 512 KiB−1/512 KiB/512 KiB+1,
and 1, 8, 32 MiB, then reads the destination in its owning context and compares
every byte. Any unsupported pair, CUDA error, or mismatch exits nonzero.
nvidia-smi topo and reported peer support alone do not verify contents.
The check covers peer copies; applications using IPC or collectives should also
validate their own transfers.
On a four-card CMP 170HX system, the full peer-content checks passed on all 12 ordered pairs. Measured 16 MiB copies on pairs 0↔1 and 0↔2 reached approximately 6.65 GB/s each way, with contents verified (610.57.04, PCIe Gen2 x16). See credits for the P2P code and original trap approach.
This fork retains upstream's GPL version 2 licence. The installer downloads NVIDIA's open kernel-module source, applies the published patches and builds the modules locally. Original NVIDIA copyright, MIT and dual MIT/GPL notices remain in their respective source files.
If you redistribute built modules, provide the complete corresponding source for that exact build, including the applied patches, profile/build inputs and installation scripts, and retain the applicable licence notices. An unmodified upstream link alone does not describe the modified binary. See GPLv2 section 3.
cmpunlocker restores numerous features that are restricted in firmware/OTP configuration of the NVIDIA CMP 170HX. cmpunlocker has been featured by multiple outlets like wccftech, Tom's Hardware and LinusTechTips.
![]() |
![]() |
![]() |
Join our Discord community for support and discussions.
Below are memory and performance results after applying the unlock:
| Memory Unlock Results |
![]() |
| Performance Benchmarks (OpenCL-Benchmark) |
![]() |
- Linux (x86-64)
- Root access
- NVIDIA CMP 170HX
- nvidia-open 610.xx.xx+ already installed (libs + firmware)
- Kernel headers matching the running kernel (
linux-headers-$(uname -r)/kernel-devel) - Secure Boot disabled (patched modules are unsigned)
- Network access on first install (downloads matching stock
open-gpu-kernel-modulessources) - Python 3 (used at build time to select 8GB/10GB geometry)
To install cmpunlocker, run the following command:
sudo ./install.shTo force a certain memory profile, use the --profile option:
sudo ./install.sh --profile=8gb # 8GB card → 64GB unlock
sudo ./install.sh --profile=10gb # 10GB card → 40GB unlockThen perform a reboot.
| Feature | Status |
|---|---|
| Full SM compute throughput (SS0/SS1) | Working ✓ |
| Memory geometry (64GB on 8GB cards, 40GB on 10GB cards) | Working ✓ |
| PCIe Gen 2 speeds | Working ✓ |
| Full BAR1 Size (64GB) | Working ✓ |
| JTAG (Host2Jtag register access) | Working ✓ |
| VFIO-based passthrough | Working ✓ |
| GPU profiling | Working ✓ |
| Persistence across reboot (patched modules) | Working ✓ |
To uninstall cmpunlocker, run the following command:
sudo ./remove.sh --yesThen perform a reboot.
Please read docs/CONTRIBUTING.md before opening a PR.
Having issues? Need help? Join our Discord community to discuss with other users and get support.





