Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Christian Gmeiner and committed by
Lucas Stach
4fc3e66a 8d3d56ce

+17 -4
+14 -1
drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c
··· 19 19 #include "etnaviv_cmdbuf.h" 20 20 #include "etnaviv_gpu.h" 21 21 #include "etnaviv_mmu.h" 22 + #include "etnaviv_perfmon.h" 22 23 23 24 #define SUBALLOC_SIZE SZ_256K 24 25 #define SUBALLOC_GRANULE SZ_4K ··· 88 87 89 88 struct etnaviv_cmdbuf * 90 89 etnaviv_cmdbuf_new(struct etnaviv_cmdbuf_suballoc *suballoc, u32 size, 91 - size_t nr_bos) 90 + size_t nr_bos, size_t nr_pmrs) 92 91 { 93 92 struct etnaviv_cmdbuf *cmdbuf; 93 + struct etnaviv_perfmon_request *pmrs; 94 94 size_t sz = size_vstruct(nr_bos, sizeof(cmdbuf->bo_map[0]), 95 95 sizeof(*cmdbuf)); 96 96 int granule_offs, order, ret; ··· 100 98 if (!cmdbuf) 101 99 return NULL; 102 100 101 + sz = sizeof(*pmrs) * nr_pmrs; 102 + pmrs = kzalloc(sz, GFP_KERNEL); 103 + if (!pmrs) 104 + goto out_free_cmdbuf; 105 + 106 + cmdbuf->pmrs = pmrs; 103 107 cmdbuf->suballoc = suballoc; 104 108 cmdbuf->size = size; 105 109 ··· 132 124 cmdbuf->vaddr = suballoc->vaddr + cmdbuf->suballoc_offset; 133 125 134 126 return cmdbuf; 127 + 128 + out_free_cmdbuf: 129 + kfree(cmdbuf); 130 + return NULL; 135 131 } 136 132 137 133 void etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf) ··· 151 139 suballoc->free_space = 1; 152 140 mutex_unlock(&suballoc->lock); 153 141 wake_up_all(&suballoc->free_event); 142 + kfree(cmdbuf->pmrs); 154 143 kfree(cmdbuf); 155 144 } 156 145
+1 -1
drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.h
··· 53 53 54 54 struct etnaviv_cmdbuf * 55 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 57 void etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf); 58 58 59 59 u32 etnaviv_cmdbuf_get_va(struct etnaviv_cmdbuf *buf);
+1 -1
drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
··· 350 350 stream = kvmalloc_array(1, args->stream_size, GFP_KERNEL); 351 351 cmdbuf = etnaviv_cmdbuf_new(gpu->cmdbuf_suballoc, 352 352 ALIGN(args->stream_size, 8) + 8, 353 - args->nr_bos); 353 + args->nr_bos, 0); 354 354 if (!bos || !relocs || !stream || !cmdbuf) { 355 355 ret = -ENOMEM; 356 356 goto err_submit_cmds;
+1 -1
drivers/gpu/drm/etnaviv/etnaviv_gpu.c
··· 726 726 } 727 727 728 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 730 if (!gpu->buffer) { 731 731 ret = -ENOMEM; 732 732 dev_err(gpu->dev, "could not create command buffer\n");