diff options
author | Christian Gmeiner <christian.gmeiner@gmail.com> | 2017-09-24 09:15:24 -0400 |
---|---|---|
committer | Lucas Stach <l.stach@pengutronix.de> | 2017-10-10 05:45:43 -0400 |
commit | 4fc3e66adb291cc3ec4a360c75221e9fbf416938 (patch) | |
tree | a2cf78e6748d027b40ea1dff5877a7b4b7683596 | |
parent | 8d3d56cef4412a37cea3ce32e730976620aaeb58 (diff) |
drm/etnaviv: extend etnaviv_gpu_cmdbuf_new(..) with nr_pmrs
This commits extends etnaviv_gpu_cmdbuf_new(..) to define the number
of struct etnaviv_perfmon elements gets used.
Changes from v1 -> v2:
- make use of goto as requested by Lucas
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 2 |
4 files changed, 17 insertions, 4 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c b/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c index 633e0f07cbac..66ac79558bbd 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include "etnaviv_cmdbuf.h" | 19 | #include "etnaviv_cmdbuf.h" |
20 | #include "etnaviv_gpu.h" | 20 | #include "etnaviv_gpu.h" |
21 | #include "etnaviv_mmu.h" | 21 | #include "etnaviv_mmu.h" |
22 | #include "etnaviv_perfmon.h" | ||
22 | 23 | ||
23 | #define SUBALLOC_SIZE SZ_256K | 24 | #define SUBALLOC_SIZE SZ_256K |
24 | #define SUBALLOC_GRANULE SZ_4K | 25 | #define SUBALLOC_GRANULE SZ_4K |
@@ -87,9 +88,10 @@ void etnaviv_cmdbuf_suballoc_destroy(struct etnaviv_cmdbuf_suballoc *suballoc) | |||
87 | 88 | ||
88 | struct etnaviv_cmdbuf * | 89 | struct etnaviv_cmdbuf * |
89 | etnaviv_cmdbuf_new(struct etnaviv_cmdbuf_suballoc *suballoc, u32 size, | 90 | etnaviv_cmdbuf_new(struct etnaviv_cmdbuf_suballoc *suballoc, u32 size, |
90 | size_t nr_bos) | 91 | size_t nr_bos, size_t nr_pmrs) |
91 | { | 92 | { |
92 | struct etnaviv_cmdbuf *cmdbuf; | 93 | struct etnaviv_cmdbuf *cmdbuf; |
94 | struct etnaviv_perfmon_request *pmrs; | ||
93 | size_t sz = size_vstruct(nr_bos, sizeof(cmdbuf->bo_map[0]), | 95 | size_t sz = size_vstruct(nr_bos, sizeof(cmdbuf->bo_map[0]), |
94 | sizeof(*cmdbuf)); | 96 | sizeof(*cmdbuf)); |
95 | int granule_offs, order, ret; | 97 | int granule_offs, order, ret; |
@@ -98,6 +100,12 @@ etnaviv_cmdbuf_new(struct etnaviv_cmdbuf_suballoc *suballoc, u32 size, | |||
98 | if (!cmdbuf) | 100 | if (!cmdbuf) |
99 | return NULL; | 101 | return NULL; |
100 | 102 | ||
103 | sz = sizeof(*pmrs) * nr_pmrs; | ||
104 | pmrs = kzalloc(sz, GFP_KERNEL); | ||
105 | if (!pmrs) | ||
106 | goto out_free_cmdbuf; | ||
107 | |||
108 | cmdbuf->pmrs = pmrs; | ||
101 | cmdbuf->suballoc = suballoc; | 109 | cmdbuf->suballoc = suballoc; |
102 | cmdbuf->size = size; | 110 | cmdbuf->size = size; |
103 | 111 | ||
@@ -124,6 +132,10 @@ retry: | |||
124 | cmdbuf->vaddr = suballoc->vaddr + cmdbuf->suballoc_offset; | 132 | cmdbuf->vaddr = suballoc->vaddr + cmdbuf->suballoc_offset; |
125 | 133 | ||
126 | return cmdbuf; | 134 | return cmdbuf; |
135 | |||
136 | out_free_cmdbuf: | ||
137 | kfree(cmdbuf); | ||
138 | return NULL; | ||
127 | } | 139 | } |
128 | 140 | ||
129 | void etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf) | 141 | void etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf) |
@@ -139,6 +151,7 @@ void etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf) | |||
139 | suballoc->free_space = 1; | 151 | suballoc->free_space = 1; |
140 | mutex_unlock(&suballoc->lock); | 152 | mutex_unlock(&suballoc->lock); |
141 | wake_up_all(&suballoc->free_event); | 153 | wake_up_all(&suballoc->free_event); |
154 | kfree(cmdbuf->pmrs); | ||
142 | kfree(cmdbuf); | 155 | kfree(cmdbuf); |
143 | } | 156 | } |
144 | 157 | ||
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.h b/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.h index 1b549f0d59a0..b6348b9f2a9d 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.h +++ b/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.h | |||
@@ -53,7 +53,7 @@ void etnaviv_cmdbuf_suballoc_destroy(struct etnaviv_cmdbuf_suballoc *suballoc); | |||
53 | 53 | ||
54 | struct etnaviv_cmdbuf * | 54 | struct etnaviv_cmdbuf * |
55 | etnaviv_cmdbuf_new(struct etnaviv_cmdbuf_suballoc *suballoc, u32 size, | 55 | etnaviv_cmdbuf_new(struct etnaviv_cmdbuf_suballoc *suballoc, u32 size, |
56 | size_t nr_bos); | 56 | size_t nr_bos, size_t nr_pmrs); |
57 | void etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf); | 57 | void etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf); |
58 | 58 | ||
59 | u32 etnaviv_cmdbuf_get_va(struct etnaviv_cmdbuf *buf); | 59 | u32 etnaviv_cmdbuf_get_va(struct etnaviv_cmdbuf *buf); |
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c index 026ef4e02f85..41abdfc7cb00 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | |||
@@ -350,7 +350,7 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data, | |||
350 | stream = kvmalloc_array(1, args->stream_size, GFP_KERNEL); | 350 | stream = kvmalloc_array(1, args->stream_size, GFP_KERNEL); |
351 | cmdbuf = etnaviv_cmdbuf_new(gpu->cmdbuf_suballoc, | 351 | cmdbuf = etnaviv_cmdbuf_new(gpu->cmdbuf_suballoc, |
352 | ALIGN(args->stream_size, 8) + 8, | 352 | ALIGN(args->stream_size, 8) + 8, |
353 | args->nr_bos); | 353 | args->nr_bos, 0); |
354 | if (!bos || !relocs || !stream || !cmdbuf) { | 354 | if (!bos || !relocs || !stream || !cmdbuf) { |
355 | ret = -ENOMEM; | 355 | ret = -ENOMEM; |
356 | goto err_submit_cmds; | 356 | goto err_submit_cmds; |
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c index 8d961bc238d4..7b61071af0de 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c | |||
@@ -726,7 +726,7 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu) | |||
726 | } | 726 | } |
727 | 727 | ||
728 | /* Create buffer: */ | 728 | /* Create buffer: */ |
729 | gpu->buffer = etnaviv_cmdbuf_new(gpu->cmdbuf_suballoc, PAGE_SIZE, 0); | 729 | gpu->buffer = etnaviv_cmdbuf_new(gpu->cmdbuf_suballoc, PAGE_SIZE, 0, 0); |
730 | if (!gpu->buffer) { | 730 | if (!gpu->buffer) { |
731 | ret = -ENOMEM; | 731 | ret = -ENOMEM; |
732 | dev_err(gpu->dev, "could not create command buffer\n"); | 732 | dev_err(gpu->dev, "could not create command buffer\n"); |