Displaying 7 results from an estimated 7 matches for "gk20a_instobj_acquir".
Did you mean:
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 */
+...
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_fl...
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+...
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...