search for: gk20a_instobj_acquire

Displaying 7 results from an estimated 7 matches for "gk20a_instobj_acquire".

2015 Oct 26
2
[PATCH] instmem/gk20a: exclusively acquire instobjs
...a/drm/nouveau/nvkm/subdev/instmem/gk20a.c +++ b/drm/nouveau/nvkm/subdev/instmem/gk20a.c @@ -92,6 +92,7 @@ struct gk20a_instmem { /* protects vaddr_* and gk20a_instobj::vaddr* */ spinlock_t lock; + unsigned long flags; /* CPU mappings LRU */ unsigned int vaddr_use; @@ -188,12 +189,11 @@ gk20a_instobj_acquire(struct nvkm_memory *memory) struct gk20a_instobj *node = gk20a_instobj(memory); struct gk20a_instmem *imem = node->imem; struct nvkm_ltc *ltc = imem->base.subdev.device->ltc; - const u64 size = nvkm_memory_size(memory); - unsigned long flags; + u64 size; nvkm_ltc_flush(ltc); -...
2015 Nov 11
2
[PATCH] instmem/gk20a: use DMA API CPU mapping
...) break; - gk20a_instobj_recycle_vaddr(list_first_entry(&imem->vaddr_lru, - struct gk20a_instobj, vaddr_node)); + gk20a_instobj_iommu_recycle_vaddr( + list_first_entry(&imem->vaddr_lru, + struct gk20a_instobj_iommu, vaddr_node)); } } static void __iomem * -gk20a_instobj_acquire(struct nvkm_memory *memory) +gk20a_instobj_acquire_dma(struct nvkm_memory *memory) { struct gk20a_instobj *node = gk20a_instobj(memory); struct gk20a_instmem *imem = node->imem; struct nvkm_ltc *ltc = imem->base.subdev.device->ltc; + + nvkm_ltc_flush(ltc); + + return node->vaddr;...
2015 Nov 04
0
[PATCH] instmem/gk20a: exclusively acquire instobjs
...+ b/drm/nouveau/nvkm/subdev/instmem/gk20a.c > @@ -92,6 +92,7 @@ struct gk20a_instmem { > > /* protects vaddr_* and gk20a_instobj::vaddr* */ > spinlock_t lock; > + unsigned long flags; > > /* CPU mappings LRU */ > unsigned int vaddr_use; > @@ -188,12 +189,11 @@ gk20a_instobj_acquire(struct nvkm_memory *memory) > struct gk20a_instobj *node = gk20a_instobj(memory); > struct gk20a_instmem *imem = node->imem; > struct nvkm_ltc *ltc = imem->base.subdev.device->ltc; > - const u64 size = nvkm_memory_size(memory); > - unsigned long flags; > + u64 size;...
2015 Nov 09
2
[PATCH] instmem/gk20a: fix race conditions
...amp;obj->memory); - nvkm_debug(&imem->base.subdev, "(GC) vaddr used: %x/%x\n", - imem->vaddr_use, imem->vaddr_max); - + gk20a_instobj_recycle_vaddr(list_first_entry(&imem->vaddr_lru, + struct gk20a_instobj, vaddr_node)); } } @@ -196,9 +206,10 @@ gk20a_instobj_acquire(struct nvkm_memory *memory) spin_lock_irqsave(&imem->lock, flags); if (node->vaddr) { - /* remove us from the LRU list since we cannot be unmapped */ - list_del(&node->vaddr_node); - + if (!node->use_cpt) { + /* remove from LRU list since mapping in use again */ + l...
2015 Nov 11
0
[PATCH] instmem/gk20a: use DMA API CPU mapping
...(list_first_entry(&imem->vaddr_lru, > - struct gk20a_instobj, vaddr_node)); > + gk20a_instobj_iommu_recycle_vaddr( > + list_first_entry(&imem->vaddr_lru, > + struct gk20a_instobj_iommu, vaddr_node)); > } > } > > static void __iomem * > -gk20a_instobj_acquire(struct nvkm_memory *memory) > +gk20a_instobj_acquire_dma(struct nvkm_memory *memory) > { > struct gk20a_instobj *node = gk20a_instobj(memory); > struct gk20a_instmem *imem = node->imem; > struct nvkm_ltc *ltc = imem->base.subdev.device->ltc; > + > + nvkm_ltc_flu...
2015 Nov 11
1
[PATCH] instmem/gk20a: fix race conditions
...operly counting how many clients are >> currently using a given instobj. > Out of curiosity, which instobjs are being accessed concurrently? PGTs it seems - at least this is what dumping a stack when detecting a concurrent usage on an instobj indicates: [ 270.547052] [<bf0618dc>] (gk20a_instobj_acquire [nouveau]) from [<bf066358>] (gf100_vm_map_sg+0x58/0x124 [nouveau]) [ 270.557568] [<bf066358>] (gf100_vm_map_sg [nouveau]) from [<bf0641b0>] (nvkm_vm_map+0x300/0x3bc [nouveau]) [ 270.567333] [<bf0641b0>] (nvkm_vm_map [nouveau]) from [<bf0bcbd4>] (nouveau_bo_vma_add+0...
2015 Nov 11
0
[PATCH] instmem/gk20a: fix race conditions
...imem->base.subdev, "(GC) vaddr used: %x/%x\n", > - imem->vaddr_use, imem->vaddr_max); > - > + gk20a_instobj_recycle_vaddr(list_first_entry(&imem->vaddr_lru, > + struct gk20a_instobj, vaddr_node)); > } > } > > @@ -196,9 +206,10 @@ gk20a_instobj_acquire(struct nvkm_memory *memory) > spin_lock_irqsave(&imem->lock, flags); > > if (node->vaddr) { > - /* remove us from the LRU list since we cannot be unmapped */ > - list_del(&node->vaddr_node); > - > + if (!node->use_cpt) { > + /* remove from LRU...