Nouveau deallocates a few buffers post GPU init which are required for GPU suspend/resume to function correctly. This is likely not as big an issue on systems where the NVGPU is the only GPU, but on multi-GPU set ups it leads to a regression where the kernel module errors and results in a system-wide rendering freeze. This commit addresses that regression by moving the two buffers required for suspend and resume to be deallocated at driver unload instead of post init.
Unified · Split
| @@ -1054,8 +1054,6 @@ r535_gsp_postinit(struct nvkm_gsp *gsp) · 1053 unmodified lines | ||
| 1054 | 1054 | /* Release the DMA buffers that were needed only for boot and init */ |
| 1055 | 1055 | nvkm_gsp_mem_dtor(gsp, &gsp->boot.fw); |
| 1056 | 1056 | nvkm_gsp_mem_dtor(gsp, &gsp->libos); |
| 1057 | − nvkm_gsp_mem_dtor(gsp, &gsp->rmargs); | |
| 1058 | − nvkm_gsp_mem_dtor(gsp, &gsp->wpr_meta); | |
| 1059 | 1057 | |
| 1060 | 1058 | return ret; |
| 1061 | 1059 | } |
| @@ -2163,6 +2161,8 @@ r535_gsp_dtor(struct nvkm_gsp *gsp) · 1101 unmodified lines | ||
| 2163 | 2161 | |
| 2164 | 2162 | r535_gsp_dtor_fws(gsp); |
| 2165 | 2163 | |
| 2164 | + nvkm_gsp_mem_dtor(gsp, &gsp->rmargs); | |
| 2165 | + nvkm_gsp_mem_dtor(gsp, &gsp->wpr_meta); | |
| 2166 | 2166 | nvkm_gsp_mem_dtor(gsp, &gsp->shm.mem); |
| 2167 | 2167 | nvkm_gsp_mem_dtor(gsp, &gsp->loginit); |
| 2168 | 2168 | nvkm_gsp_mem_dtor(gsp, &gsp->logintr); |