diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2017-11-01 03:56:19 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2017-11-02 13:32:22 +1000 |
commit | b1e839f3b3d82a0774c296f9950214057b045b72 (patch) | |
tree | 1d4c60fc8986655047f8aad10e24bcb11ffc1c23 /drivers/gpu/drm/nouveau/nvkm/subdev/fb | |
parent | af793b8cd9f62880852379897519bbe69fb59c05 (diff) |
drm/nouveau/fb/gf100: clear comptags at allocation time rather than mmu map
We probably don't want to destroy compression data when doing multiple
mappings of a memory object.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/subdev/fb')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c index a44298989d3c..7109e21f4564 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c @@ -443,6 +443,7 @@ int gf100_ram_get(struct nvkm_ram *ram, u64 size, u32 align, u32 ncmin, u32 memtype, struct nvkm_mem **pmem) { + struct nvkm_device *device = ram->fb->subdev.device; struct nvkm_ltc *ltc = ram->fb->subdev.device->ltc; struct nvkm_mm *mm = &ram->vram; struct nvkm_mm_node **node, *r; @@ -469,7 +470,10 @@ gf100_ram_get(struct nvkm_ram *ram, u64 size, u32 align, u32 ncmin, /* compression only works with lpages */ if (align == (1 << (17 - NVKM_RAM_MM_SHIFT))) { int n = size >> 5; - nvkm_ltc_tags_alloc(ltc, n, &mem->tag); + if (!nvkm_ltc_tags_alloc(ltc, n, &mem->tag)) { + nvkm_ltc_tags_clear(device, mem->tag->offset, + mem->tag->length); + } } if (unlikely(!mem->tag)) |