nouveau_bo_unmap called the CPU_FINI IOCTL even if it was a NOSYNC
mapping. It caused no harmful effects (actually CPU_FINI is a no-op on
recent enough kernels) besides the precious CPU cycles being wasted.
Signed-off-by: Francisco Jerez <currojerez@riseup.net>
(flags & NOUVEAU_BO_NOWAIT), 0);
if (ret)
return ret;
+
+ nvbo->map_refcnt++;
}
bo->map = (char *)nvbo->map + delta;
{
struct nouveau_bo_priv *nvbo = nouveau_bo(bo);
- if (bo->map && !nvbo->sysmem) {
+ if (bo->map && !nvbo->sysmem && nvbo->map_refcnt) {
struct nouveau_device_priv *nvdev = nouveau_device(bo->device);
struct drm_nouveau_gem_cpu_fini req;
req.handle = nvbo->handle;
drmCommandWrite(nvdev->fd, DRM_NOUVEAU_GEM_CPU_FINI,
&req, sizeof(req));
+ nvbo->map_refcnt--;
}
bo->map = NULL;
uint32_t global_handle;
drm_handle_t handle;
uint64_t map_handle;
+ int map_refcnt;
void *map;
/* Last known information from kernel on buffer status */