Message ID | 1417618404-6801-1-git-send-email-deathsimple@vodafone.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Dec 3, 2014 at 9:53 AM, Christian König <deathsimple@vodafone.de> wrote: > From: Christian König <christian.koenig@amd.com> > > Nobody is interested at which index the chunk is. What's needed is > a pointer to the chunk. Remove unused chunk_id field as well. > > Signed-off-by: Christian König <christian.koenig@amd.com> Applied to my -next tree. Thanks, Alex > --- > drivers/gpu/drm/radeon/evergreen_cs.c | 6 ++-- > drivers/gpu/drm/radeon/r100.c | 2 +- > drivers/gpu/drm/radeon/r300.c | 2 +- > drivers/gpu/drm/radeon/r600_cs.c | 14 ++++----- > drivers/gpu/drm/radeon/radeon.h | 11 +++---- > drivers/gpu/drm/radeon/radeon_cs.c | 57 +++++++++++++++++------------------ > drivers/gpu/drm/radeon/radeon_trace.h | 2 +- > drivers/gpu/drm/radeon/radeon_uvd.c | 10 +++--- > drivers/gpu/drm/radeon/radeon_vce.c | 4 +-- > 9 files changed, 53 insertions(+), 55 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c b/drivers/gpu/drm/radeon/evergreen_cs.c > index a1dece6..924b1b7 100644 > --- a/drivers/gpu/drm/radeon/evergreen_cs.c > +++ b/drivers/gpu/drm/radeon/evergreen_cs.c > @@ -2661,7 +2661,7 @@ int evergreen_cs_parse(struct radeon_cs_parser *p) > p->track = NULL; > return r; > } > - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); > + } while (p->idx < p->chunk_ib->length_dw); > #if 0 > for (r = 0; r < p->ib.length_dw; r++) { > printk(KERN_INFO "%05d 0x%08X\n", r, p->ib.ptr[r]); > @@ -2684,7 +2684,7 @@ int evergreen_cs_parse(struct radeon_cs_parser *p) > **/ > int evergreen_dma_cs_parse(struct radeon_cs_parser *p) > { > - struct radeon_cs_chunk *ib_chunk = &p->chunks[p->chunk_ib_idx]; > + struct radeon_cs_chunk *ib_chunk = p->chunk_ib; > struct radeon_bo_list *src_reloc, *dst_reloc, *dst2_reloc; > u32 header, cmd, count, sub_cmd; > volatile u32 *ib = p->ib.ptr; > @@ -3100,7 +3100,7 @@ int evergreen_dma_cs_parse(struct radeon_cs_parser *p) > DRM_ERROR("Unknown packet type %d at %d !\n", cmd, idx); > return -EINVAL; > } > - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); > + } while (p->idx < p->chunk_ib->length_dw); > #if 0 > for (r = 0; r < p->ib->length_dw; r++) { > printk(KERN_INFO "%05d 0x%08X\n", r, p->ib.ptr[r]); > diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c > index 8174731..d65d1d0 100644 > --- a/drivers/gpu/drm/radeon/r100.c > +++ b/drivers/gpu/drm/radeon/r100.c > @@ -2061,7 +2061,7 @@ int r100_cs_parse(struct radeon_cs_parser *p) > } > if (r) > return r; > - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); > + } while (p->idx < p->chunk_ib->length_dw); > return 0; > } > > diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c > index 91d2442..064ad55 100644 > --- a/drivers/gpu/drm/radeon/r300.c > +++ b/drivers/gpu/drm/radeon/r300.c > @@ -1283,7 +1283,7 @@ int r300_cs_parse(struct radeon_cs_parser *p) > if (r) { > return r; > } > - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); > + } while (p->idx < p->chunk_ib->length_dw); > return 0; > } > > diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c > index e5521946..acc1f99 100644 > --- a/drivers/gpu/drm/radeon/r600_cs.c > +++ b/drivers/gpu/drm/radeon/r600_cs.c > @@ -2316,7 +2316,7 @@ int r600_cs_parse(struct radeon_cs_parser *p) > p->track = NULL; > return r; > } > - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); > + } while (p->idx < p->chunk_ib->length_dw); > #if 0 > for (r = 0; r < p->ib.length_dw; r++) { > printk(KERN_INFO "%05d 0x%08X\n", r, p->ib.ptr[r]); > @@ -2351,7 +2351,7 @@ static void r600_cs_parser_fini(struct radeon_cs_parser *parser, int error) > > static int r600_cs_parser_relocs_legacy(struct radeon_cs_parser *p) > { > - if (p->chunk_relocs_idx == -1) { > + if (p->chunk_relocs == NULL) { > return 0; > } > p->relocs = kzalloc(sizeof(struct radeon_bo_list), GFP_KERNEL); > @@ -2398,7 +2398,7 @@ int r600_cs_legacy(struct drm_device *dev, void *data, struct drm_file *filp, > /* Copy the packet into the IB, the parser will read from the > * input memory (cached) and write to the IB (which can be > * uncached). */ > - ib_chunk = &parser.chunks[parser.chunk_ib_idx]; > + ib_chunk = parser.chunk_ib; > parser.ib.length_dw = ib_chunk->length_dw; > *l = parser.ib.length_dw; > if (copy_from_user(ib, ib_chunk->user_ptr, ib_chunk->length_dw * 4)) { > @@ -2441,11 +2441,11 @@ int r600_dma_cs_next_reloc(struct radeon_cs_parser *p, > unsigned idx; > > *cs_reloc = NULL; > - if (p->chunk_relocs_idx == -1) { > + if (p->chunk_relocs == NULL) { > DRM_ERROR("No relocation chunk !\n"); > return -EINVAL; > } > - relocs_chunk = &p->chunks[p->chunk_relocs_idx]; > + relocs_chunk = p->chunk_relocs; > idx = p->dma_reloc_idx; > if (idx >= p->nrelocs) { > DRM_ERROR("Relocs at %d after relocations chunk end %d !\n", > @@ -2472,7 +2472,7 @@ int r600_dma_cs_next_reloc(struct radeon_cs_parser *p, > **/ > int r600_dma_cs_parse(struct radeon_cs_parser *p) > { > - struct radeon_cs_chunk *ib_chunk = &p->chunks[p->chunk_ib_idx]; > + struct radeon_cs_chunk *ib_chunk = p->chunk_ib; > struct radeon_bo_list *src_reloc, *dst_reloc; > u32 header, cmd, count, tiled; > volatile u32 *ib = p->ib.ptr; > @@ -2619,7 +2619,7 @@ int r600_dma_cs_parse(struct radeon_cs_parser *p) > DRM_ERROR("Unknown packet type %d at %d !\n", cmd, idx); > return -EINVAL; > } > - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); > + } while (p->idx < p->chunk_ib->length_dw); > #if 0 > for (r = 0; r < p->ib->length_dw; r++) { > printk(KERN_INFO "%05d 0x%08X\n", r, p->ib.ptr[r]); > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h > index 1319c9c..54529b8 100644 > --- a/drivers/gpu/drm/radeon/radeon.h > +++ b/drivers/gpu/drm/radeon/radeon.h > @@ -1057,7 +1057,6 @@ void cayman_dma_fini(struct radeon_device *rdev); > * CS. > */ > struct radeon_cs_chunk { > - uint32_t chunk_id; > uint32_t length_dw; > uint32_t *kdata; > void __user *user_ptr; > @@ -1080,10 +1079,10 @@ struct radeon_cs_parser { > struct list_head validated; > unsigned dma_reloc_idx; > /* indices of various chunks */ > - int chunk_ib_idx; > - int chunk_relocs_idx; > - int chunk_flags_idx; > - int chunk_const_ib_idx; > + struct radeon_cs_chunk *chunk_ib; > + struct radeon_cs_chunk *chunk_relocs; > + struct radeon_cs_chunk *chunk_flags; > + struct radeon_cs_chunk *chunk_const_ib; > struct radeon_ib ib; > struct radeon_ib const_ib; > void *track; > @@ -1097,7 +1096,7 @@ struct radeon_cs_parser { > > static inline u32 radeon_get_ib_value(struct radeon_cs_parser *p, int idx) > { > - struct radeon_cs_chunk *ibc = &p->chunks[p->chunk_ib_idx]; > + struct radeon_cs_chunk *ibc = p->chunk_ib; > > if (ibc->kdata) > return ibc->kdata[idx]; > diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c > index 26f7855..9648e28 100644 > --- a/drivers/gpu/drm/radeon/radeon_cs.c > +++ b/drivers/gpu/drm/radeon/radeon_cs.c > @@ -81,10 +81,10 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p) > bool need_mmap_lock = false; > int r; > > - if (p->chunk_relocs_idx == -1) { > + if (p->chunk_relocs == NULL) { > return 0; > } > - chunk = &p->chunks[p->chunk_relocs_idx]; > + chunk = p->chunk_relocs; > p->dma_reloc_idx = 0; > /* FIXME: we assume that each relocs use 4 dwords */ > p->nrelocs = chunk->length_dw / 4; > @@ -265,10 +265,10 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) > p->idx = 0; > p->ib.sa_bo = NULL; > p->const_ib.sa_bo = NULL; > - p->chunk_ib_idx = -1; > - p->chunk_relocs_idx = -1; > - p->chunk_flags_idx = -1; > - p->chunk_const_ib_idx = -1; > + p->chunk_ib = NULL; > + p->chunk_relocs = NULL; > + p->chunk_flags = NULL; > + p->chunk_const_ib = NULL; > p->chunks_array = kcalloc(cs->num_chunks, sizeof(uint64_t), GFP_KERNEL); > if (p->chunks_array == NULL) { > return -ENOMEM; > @@ -295,24 +295,23 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) > return -EFAULT; > } > p->chunks[i].length_dw = user_chunk.length_dw; > - p->chunks[i].chunk_id = user_chunk.chunk_id; > - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_RELOCS) { > - p->chunk_relocs_idx = i; > + if (user_chunk.chunk_id == RADEON_CHUNK_ID_RELOCS) { > + p->chunk_relocs = &p->chunks[i]; > } > - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_IB) { > - p->chunk_ib_idx = i; > + if (user_chunk.chunk_id == RADEON_CHUNK_ID_IB) { > + p->chunk_ib = &p->chunks[i]; > /* zero length IB isn't useful */ > if (p->chunks[i].length_dw == 0) > return -EINVAL; > } > - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_CONST_IB) { > - p->chunk_const_ib_idx = i; > + if (user_chunk.chunk_id == RADEON_CHUNK_ID_CONST_IB) { > + p->chunk_const_ib = &p->chunks[i]; > /* zero length CONST IB isn't useful */ > if (p->chunks[i].length_dw == 0) > return -EINVAL; > } > - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_FLAGS) { > - p->chunk_flags_idx = i; > + if (user_chunk.chunk_id == RADEON_CHUNK_ID_FLAGS) { > + p->chunk_flags = &p->chunks[i]; > /* zero length flags aren't useful */ > if (p->chunks[i].length_dw == 0) > return -EINVAL; > @@ -321,10 +320,10 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) > size = p->chunks[i].length_dw; > cdata = (void __user *)(unsigned long)user_chunk.chunk_data; > p->chunks[i].user_ptr = cdata; > - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_CONST_IB) > + if (user_chunk.chunk_id == RADEON_CHUNK_ID_CONST_IB) > continue; > > - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_IB) { > + if (user_chunk.chunk_id == RADEON_CHUNK_ID_IB) { > if (!p->rdev || !(p->rdev->flags & RADEON_IS_AGP)) > continue; > } > @@ -337,7 +336,7 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) > if (copy_from_user(p->chunks[i].kdata, cdata, size)) { > return -EFAULT; > } > - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_FLAGS) { > + if (user_chunk.chunk_id == RADEON_CHUNK_ID_FLAGS) { > p->cs_flags = p->chunks[i].kdata[0]; > if (p->chunks[i].length_dw > 1) > ring = p->chunks[i].kdata[1]; > @@ -443,7 +442,7 @@ static int radeon_cs_ib_chunk(struct radeon_device *rdev, > { > int r; > > - if (parser->chunk_ib_idx == -1) > + if (parser->chunk_ib == NULL) > return 0; > > if (parser->cs_flags & RADEON_CS_USE_VM) > @@ -527,7 +526,7 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev, > struct radeon_vm *vm = &fpriv->vm; > int r; > > - if (parser->chunk_ib_idx == -1) > + if (parser->chunk_ib == NULL) > return 0; > if ((parser->cs_flags & RADEON_CS_USE_VM) == 0) > return 0; > @@ -561,7 +560,7 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev, > } > > if ((rdev->family >= CHIP_TAHITI) && > - (parser->chunk_const_ib_idx != -1)) { > + (parser->chunk_const_ib != NULL)) { > r = radeon_ib_schedule(rdev, &parser->ib, &parser->const_ib, true); > } else { > r = radeon_ib_schedule(rdev, &parser->ib, NULL, true); > @@ -588,7 +587,7 @@ static int radeon_cs_ib_fill(struct radeon_device *rdev, struct radeon_cs_parser > struct radeon_vm *vm = NULL; > int r; > > - if (parser->chunk_ib_idx == -1) > + if (parser->chunk_ib == NULL) > return 0; > > if (parser->cs_flags & RADEON_CS_USE_VM) { > @@ -596,8 +595,8 @@ static int radeon_cs_ib_fill(struct radeon_device *rdev, struct radeon_cs_parser > vm = &fpriv->vm; > > if ((rdev->family >= CHIP_TAHITI) && > - (parser->chunk_const_ib_idx != -1)) { > - ib_chunk = &parser->chunks[parser->chunk_const_ib_idx]; > + (parser->chunk_const_ib != NULL)) { > + ib_chunk = parser->chunk_const_ib; > if (ib_chunk->length_dw > RADEON_IB_VM_MAX_SIZE) { > DRM_ERROR("cs IB CONST too big: %d\n", ib_chunk->length_dw); > return -EINVAL; > @@ -616,13 +615,13 @@ static int radeon_cs_ib_fill(struct radeon_device *rdev, struct radeon_cs_parser > return -EFAULT; > } > > - ib_chunk = &parser->chunks[parser->chunk_ib_idx]; > + ib_chunk = parser->chunk_ib; > if (ib_chunk->length_dw > RADEON_IB_VM_MAX_SIZE) { > DRM_ERROR("cs IB too big: %d\n", ib_chunk->length_dw); > return -EINVAL; > } > } > - ib_chunk = &parser->chunks[parser->chunk_ib_idx]; > + ib_chunk = parser->chunk_ib; > > r = radeon_ib_get(rdev, parser->ring, &parser->ib, > vm, ib_chunk->length_dw * 4); > @@ -714,7 +713,7 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p, > struct radeon_cs_packet *pkt, > unsigned idx) > { > - struct radeon_cs_chunk *ib_chunk = &p->chunks[p->chunk_ib_idx]; > + struct radeon_cs_chunk *ib_chunk = p->chunk_ib; > struct radeon_device *rdev = p->rdev; > uint32_t header; > > @@ -816,12 +815,12 @@ int radeon_cs_packet_next_reloc(struct radeon_cs_parser *p, > unsigned idx; > int r; > > - if (p->chunk_relocs_idx == -1) { > + if (p->chunk_relocs == NULL) { > DRM_ERROR("No relocation chunk !\n"); > return -EINVAL; > } > *cs_reloc = NULL; > - relocs_chunk = &p->chunks[p->chunk_relocs_idx]; > + relocs_chunk = p->chunk_relocs; > r = radeon_cs_packet_parse(p, &p3reloc, p->idx); > if (r) > return r; > diff --git a/drivers/gpu/drm/radeon/radeon_trace.h b/drivers/gpu/drm/radeon/radeon_trace.h > index 9db74a9..ce075cb 100644 > --- a/drivers/gpu/drm/radeon/radeon_trace.h > +++ b/drivers/gpu/drm/radeon/radeon_trace.h > @@ -38,7 +38,7 @@ TRACE_EVENT(radeon_cs, > > TP_fast_assign( > __entry->ring = p->ring; > - __entry->dw = p->chunks[p->chunk_ib_idx].length_dw; > + __entry->dw = p->chunk_ib->length_dw; > __entry->fences = radeon_fence_count_emitted( > p->rdev, p->ring); > ), > diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c > index 72cd47d..c10b2ae 100644 > --- a/drivers/gpu/drm/radeon/radeon_uvd.c > +++ b/drivers/gpu/drm/radeon/radeon_uvd.c > @@ -493,7 +493,7 @@ static int radeon_uvd_cs_reloc(struct radeon_cs_parser *p, > uint64_t start, end; > int r; > > - relocs_chunk = &p->chunks[p->chunk_relocs_idx]; > + relocs_chunk = p->chunk_relocs; > offset = radeon_get_ib_value(p, data0); > idx = radeon_get_ib_value(p, data1); > if (idx >= relocs_chunk->length_dw) { > @@ -610,13 +610,13 @@ int radeon_uvd_cs_parse(struct radeon_cs_parser *p) > [0x00000003] = 2048, > }; > > - if (p->chunks[p->chunk_ib_idx].length_dw % 16) { > + if (p->chunk_ib->length_dw % 16) { > DRM_ERROR("UVD IB length (%d) not 16 dwords aligned!\n", > - p->chunks[p->chunk_ib_idx].length_dw); > + p->chunk_ib->length_dw); > return -EINVAL; > } > > - if (p->chunk_relocs_idx == -1) { > + if (p->chunk_relocs == NULL) { > DRM_ERROR("No relocation chunk !\n"); > return -EINVAL; > } > @@ -640,7 +640,7 @@ int radeon_uvd_cs_parse(struct radeon_cs_parser *p) > DRM_ERROR("Unknown packet type %d !\n", pkt.type); > return -EINVAL; > } > - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); > + } while (p->idx < p->chunk_ib->length_dw); > > if (!has_msg_cmd) { > DRM_ERROR("UVD-IBs need a msg command!\n"); > diff --git a/drivers/gpu/drm/radeon/radeon_vce.c b/drivers/gpu/drm/radeon/radeon_vce.c > index b3a1698..976fe43 100644 > --- a/drivers/gpu/drm/radeon/radeon_vce.c > +++ b/drivers/gpu/drm/radeon/radeon_vce.c > @@ -457,7 +457,7 @@ int radeon_vce_cs_reloc(struct radeon_cs_parser *p, int lo, int hi, > uint64_t start, end, offset; > unsigned idx; > > - relocs_chunk = &p->chunks[p->chunk_relocs_idx]; > + relocs_chunk = p->chunk_relocs; > offset = radeon_get_ib_value(p, lo); > idx = radeon_get_ib_value(p, hi); > > @@ -534,7 +534,7 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p) > uint32_t *size = &tmp; > int i, r; > > - while (p->idx < p->chunks[p->chunk_ib_idx].length_dw) { > + while (p->idx < p->chunk_ib->length_dw) { > uint32_t len = radeon_get_ib_value(p, p->idx); > uint32_t cmd = radeon_get_ib_value(p, p->idx + 1); > > -- > 1.9.1 >
diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c b/drivers/gpu/drm/radeon/evergreen_cs.c index a1dece6..924b1b7 100644 --- a/drivers/gpu/drm/radeon/evergreen_cs.c +++ b/drivers/gpu/drm/radeon/evergreen_cs.c @@ -2661,7 +2661,7 @@ int evergreen_cs_parse(struct radeon_cs_parser *p) p->track = NULL; return r; } - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); + } while (p->idx < p->chunk_ib->length_dw); #if 0 for (r = 0; r < p->ib.length_dw; r++) { printk(KERN_INFO "%05d 0x%08X\n", r, p->ib.ptr[r]); @@ -2684,7 +2684,7 @@ int evergreen_cs_parse(struct radeon_cs_parser *p) **/ int evergreen_dma_cs_parse(struct radeon_cs_parser *p) { - struct radeon_cs_chunk *ib_chunk = &p->chunks[p->chunk_ib_idx]; + struct radeon_cs_chunk *ib_chunk = p->chunk_ib; struct radeon_bo_list *src_reloc, *dst_reloc, *dst2_reloc; u32 header, cmd, count, sub_cmd; volatile u32 *ib = p->ib.ptr; @@ -3100,7 +3100,7 @@ int evergreen_dma_cs_parse(struct radeon_cs_parser *p) DRM_ERROR("Unknown packet type %d at %d !\n", cmd, idx); return -EINVAL; } - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); + } while (p->idx < p->chunk_ib->length_dw); #if 0 for (r = 0; r < p->ib->length_dw; r++) { printk(KERN_INFO "%05d 0x%08X\n", r, p->ib.ptr[r]); diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index 8174731..d65d1d0 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c @@ -2061,7 +2061,7 @@ int r100_cs_parse(struct radeon_cs_parser *p) } if (r) return r; - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); + } while (p->idx < p->chunk_ib->length_dw); return 0; } diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c index 91d2442..064ad55 100644 --- a/drivers/gpu/drm/radeon/r300.c +++ b/drivers/gpu/drm/radeon/r300.c @@ -1283,7 +1283,7 @@ int r300_cs_parse(struct radeon_cs_parser *p) if (r) { return r; } - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); + } while (p->idx < p->chunk_ib->length_dw); return 0; } diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c index e5521946..acc1f99 100644 --- a/drivers/gpu/drm/radeon/r600_cs.c +++ b/drivers/gpu/drm/radeon/r600_cs.c @@ -2316,7 +2316,7 @@ int r600_cs_parse(struct radeon_cs_parser *p) p->track = NULL; return r; } - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); + } while (p->idx < p->chunk_ib->length_dw); #if 0 for (r = 0; r < p->ib.length_dw; r++) { printk(KERN_INFO "%05d 0x%08X\n", r, p->ib.ptr[r]); @@ -2351,7 +2351,7 @@ static void r600_cs_parser_fini(struct radeon_cs_parser *parser, int error) static int r600_cs_parser_relocs_legacy(struct radeon_cs_parser *p) { - if (p->chunk_relocs_idx == -1) { + if (p->chunk_relocs == NULL) { return 0; } p->relocs = kzalloc(sizeof(struct radeon_bo_list), GFP_KERNEL); @@ -2398,7 +2398,7 @@ int r600_cs_legacy(struct drm_device *dev, void *data, struct drm_file *filp, /* Copy the packet into the IB, the parser will read from the * input memory (cached) and write to the IB (which can be * uncached). */ - ib_chunk = &parser.chunks[parser.chunk_ib_idx]; + ib_chunk = parser.chunk_ib; parser.ib.length_dw = ib_chunk->length_dw; *l = parser.ib.length_dw; if (copy_from_user(ib, ib_chunk->user_ptr, ib_chunk->length_dw * 4)) { @@ -2441,11 +2441,11 @@ int r600_dma_cs_next_reloc(struct radeon_cs_parser *p, unsigned idx; *cs_reloc = NULL; - if (p->chunk_relocs_idx == -1) { + if (p->chunk_relocs == NULL) { DRM_ERROR("No relocation chunk !\n"); return -EINVAL; } - relocs_chunk = &p->chunks[p->chunk_relocs_idx]; + relocs_chunk = p->chunk_relocs; idx = p->dma_reloc_idx; if (idx >= p->nrelocs) { DRM_ERROR("Relocs at %d after relocations chunk end %d !\n", @@ -2472,7 +2472,7 @@ int r600_dma_cs_next_reloc(struct radeon_cs_parser *p, **/ int r600_dma_cs_parse(struct radeon_cs_parser *p) { - struct radeon_cs_chunk *ib_chunk = &p->chunks[p->chunk_ib_idx]; + struct radeon_cs_chunk *ib_chunk = p->chunk_ib; struct radeon_bo_list *src_reloc, *dst_reloc; u32 header, cmd, count, tiled; volatile u32 *ib = p->ib.ptr; @@ -2619,7 +2619,7 @@ int r600_dma_cs_parse(struct radeon_cs_parser *p) DRM_ERROR("Unknown packet type %d at %d !\n", cmd, idx); return -EINVAL; } - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); + } while (p->idx < p->chunk_ib->length_dw); #if 0 for (r = 0; r < p->ib->length_dw; r++) { printk(KERN_INFO "%05d 0x%08X\n", r, p->ib.ptr[r]); diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 1319c9c..54529b8 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@ -1057,7 +1057,6 @@ void cayman_dma_fini(struct radeon_device *rdev); * CS. */ struct radeon_cs_chunk { - uint32_t chunk_id; uint32_t length_dw; uint32_t *kdata; void __user *user_ptr; @@ -1080,10 +1079,10 @@ struct radeon_cs_parser { struct list_head validated; unsigned dma_reloc_idx; /* indices of various chunks */ - int chunk_ib_idx; - int chunk_relocs_idx; - int chunk_flags_idx; - int chunk_const_ib_idx; + struct radeon_cs_chunk *chunk_ib; + struct radeon_cs_chunk *chunk_relocs; + struct radeon_cs_chunk *chunk_flags; + struct radeon_cs_chunk *chunk_const_ib; struct radeon_ib ib; struct radeon_ib const_ib; void *track; @@ -1097,7 +1096,7 @@ struct radeon_cs_parser { static inline u32 radeon_get_ib_value(struct radeon_cs_parser *p, int idx) { - struct radeon_cs_chunk *ibc = &p->chunks[p->chunk_ib_idx]; + struct radeon_cs_chunk *ibc = p->chunk_ib; if (ibc->kdata) return ibc->kdata[idx]; diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c index 26f7855..9648e28 100644 --- a/drivers/gpu/drm/radeon/radeon_cs.c +++ b/drivers/gpu/drm/radeon/radeon_cs.c @@ -81,10 +81,10 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p) bool need_mmap_lock = false; int r; - if (p->chunk_relocs_idx == -1) { + if (p->chunk_relocs == NULL) { return 0; } - chunk = &p->chunks[p->chunk_relocs_idx]; + chunk = p->chunk_relocs; p->dma_reloc_idx = 0; /* FIXME: we assume that each relocs use 4 dwords */ p->nrelocs = chunk->length_dw / 4; @@ -265,10 +265,10 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) p->idx = 0; p->ib.sa_bo = NULL; p->const_ib.sa_bo = NULL; - p->chunk_ib_idx = -1; - p->chunk_relocs_idx = -1; - p->chunk_flags_idx = -1; - p->chunk_const_ib_idx = -1; + p->chunk_ib = NULL; + p->chunk_relocs = NULL; + p->chunk_flags = NULL; + p->chunk_const_ib = NULL; p->chunks_array = kcalloc(cs->num_chunks, sizeof(uint64_t), GFP_KERNEL); if (p->chunks_array == NULL) { return -ENOMEM; @@ -295,24 +295,23 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) return -EFAULT; } p->chunks[i].length_dw = user_chunk.length_dw; - p->chunks[i].chunk_id = user_chunk.chunk_id; - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_RELOCS) { - p->chunk_relocs_idx = i; + if (user_chunk.chunk_id == RADEON_CHUNK_ID_RELOCS) { + p->chunk_relocs = &p->chunks[i]; } - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_IB) { - p->chunk_ib_idx = i; + if (user_chunk.chunk_id == RADEON_CHUNK_ID_IB) { + p->chunk_ib = &p->chunks[i]; /* zero length IB isn't useful */ if (p->chunks[i].length_dw == 0) return -EINVAL; } - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_CONST_IB) { - p->chunk_const_ib_idx = i; + if (user_chunk.chunk_id == RADEON_CHUNK_ID_CONST_IB) { + p->chunk_const_ib = &p->chunks[i]; /* zero length CONST IB isn't useful */ if (p->chunks[i].length_dw == 0) return -EINVAL; } - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_FLAGS) { - p->chunk_flags_idx = i; + if (user_chunk.chunk_id == RADEON_CHUNK_ID_FLAGS) { + p->chunk_flags = &p->chunks[i]; /* zero length flags aren't useful */ if (p->chunks[i].length_dw == 0) return -EINVAL; @@ -321,10 +320,10 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) size = p->chunks[i].length_dw; cdata = (void __user *)(unsigned long)user_chunk.chunk_data; p->chunks[i].user_ptr = cdata; - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_CONST_IB) + if (user_chunk.chunk_id == RADEON_CHUNK_ID_CONST_IB) continue; - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_IB) { + if (user_chunk.chunk_id == RADEON_CHUNK_ID_IB) { if (!p->rdev || !(p->rdev->flags & RADEON_IS_AGP)) continue; } @@ -337,7 +336,7 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) if (copy_from_user(p->chunks[i].kdata, cdata, size)) { return -EFAULT; } - if (p->chunks[i].chunk_id == RADEON_CHUNK_ID_FLAGS) { + if (user_chunk.chunk_id == RADEON_CHUNK_ID_FLAGS) { p->cs_flags = p->chunks[i].kdata[0]; if (p->chunks[i].length_dw > 1) ring = p->chunks[i].kdata[1]; @@ -443,7 +442,7 @@ static int radeon_cs_ib_chunk(struct radeon_device *rdev, { int r; - if (parser->chunk_ib_idx == -1) + if (parser->chunk_ib == NULL) return 0; if (parser->cs_flags & RADEON_CS_USE_VM) @@ -527,7 +526,7 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev, struct radeon_vm *vm = &fpriv->vm; int r; - if (parser->chunk_ib_idx == -1) + if (parser->chunk_ib == NULL) return 0; if ((parser->cs_flags & RADEON_CS_USE_VM) == 0) return 0; @@ -561,7 +560,7 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev, } if ((rdev->family >= CHIP_TAHITI) && - (parser->chunk_const_ib_idx != -1)) { + (parser->chunk_const_ib != NULL)) { r = radeon_ib_schedule(rdev, &parser->ib, &parser->const_ib, true); } else { r = radeon_ib_schedule(rdev, &parser->ib, NULL, true); @@ -588,7 +587,7 @@ static int radeon_cs_ib_fill(struct radeon_device *rdev, struct radeon_cs_parser struct radeon_vm *vm = NULL; int r; - if (parser->chunk_ib_idx == -1) + if (parser->chunk_ib == NULL) return 0; if (parser->cs_flags & RADEON_CS_USE_VM) { @@ -596,8 +595,8 @@ static int radeon_cs_ib_fill(struct radeon_device *rdev, struct radeon_cs_parser vm = &fpriv->vm; if ((rdev->family >= CHIP_TAHITI) && - (parser->chunk_const_ib_idx != -1)) { - ib_chunk = &parser->chunks[parser->chunk_const_ib_idx]; + (parser->chunk_const_ib != NULL)) { + ib_chunk = parser->chunk_const_ib; if (ib_chunk->length_dw > RADEON_IB_VM_MAX_SIZE) { DRM_ERROR("cs IB CONST too big: %d\n", ib_chunk->length_dw); return -EINVAL; @@ -616,13 +615,13 @@ static int radeon_cs_ib_fill(struct radeon_device *rdev, struct radeon_cs_parser return -EFAULT; } - ib_chunk = &parser->chunks[parser->chunk_ib_idx]; + ib_chunk = parser->chunk_ib; if (ib_chunk->length_dw > RADEON_IB_VM_MAX_SIZE) { DRM_ERROR("cs IB too big: %d\n", ib_chunk->length_dw); return -EINVAL; } } - ib_chunk = &parser->chunks[parser->chunk_ib_idx]; + ib_chunk = parser->chunk_ib; r = radeon_ib_get(rdev, parser->ring, &parser->ib, vm, ib_chunk->length_dw * 4); @@ -714,7 +713,7 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p, struct radeon_cs_packet *pkt, unsigned idx) { - struct radeon_cs_chunk *ib_chunk = &p->chunks[p->chunk_ib_idx]; + struct radeon_cs_chunk *ib_chunk = p->chunk_ib; struct radeon_device *rdev = p->rdev; uint32_t header; @@ -816,12 +815,12 @@ int radeon_cs_packet_next_reloc(struct radeon_cs_parser *p, unsigned idx; int r; - if (p->chunk_relocs_idx == -1) { + if (p->chunk_relocs == NULL) { DRM_ERROR("No relocation chunk !\n"); return -EINVAL; } *cs_reloc = NULL; - relocs_chunk = &p->chunks[p->chunk_relocs_idx]; + relocs_chunk = p->chunk_relocs; r = radeon_cs_packet_parse(p, &p3reloc, p->idx); if (r) return r; diff --git a/drivers/gpu/drm/radeon/radeon_trace.h b/drivers/gpu/drm/radeon/radeon_trace.h index 9db74a9..ce075cb 100644 --- a/drivers/gpu/drm/radeon/radeon_trace.h +++ b/drivers/gpu/drm/radeon/radeon_trace.h @@ -38,7 +38,7 @@ TRACE_EVENT(radeon_cs, TP_fast_assign( __entry->ring = p->ring; - __entry->dw = p->chunks[p->chunk_ib_idx].length_dw; + __entry->dw = p->chunk_ib->length_dw; __entry->fences = radeon_fence_count_emitted( p->rdev, p->ring); ), diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c index 72cd47d..c10b2ae 100644 --- a/drivers/gpu/drm/radeon/radeon_uvd.c +++ b/drivers/gpu/drm/radeon/radeon_uvd.c @@ -493,7 +493,7 @@ static int radeon_uvd_cs_reloc(struct radeon_cs_parser *p, uint64_t start, end; int r; - relocs_chunk = &p->chunks[p->chunk_relocs_idx]; + relocs_chunk = p->chunk_relocs; offset = radeon_get_ib_value(p, data0); idx = radeon_get_ib_value(p, data1); if (idx >= relocs_chunk->length_dw) { @@ -610,13 +610,13 @@ int radeon_uvd_cs_parse(struct radeon_cs_parser *p) [0x00000003] = 2048, }; - if (p->chunks[p->chunk_ib_idx].length_dw % 16) { + if (p->chunk_ib->length_dw % 16) { DRM_ERROR("UVD IB length (%d) not 16 dwords aligned!\n", - p->chunks[p->chunk_ib_idx].length_dw); + p->chunk_ib->length_dw); return -EINVAL; } - if (p->chunk_relocs_idx == -1) { + if (p->chunk_relocs == NULL) { DRM_ERROR("No relocation chunk !\n"); return -EINVAL; } @@ -640,7 +640,7 @@ int radeon_uvd_cs_parse(struct radeon_cs_parser *p) DRM_ERROR("Unknown packet type %d !\n", pkt.type); return -EINVAL; } - } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); + } while (p->idx < p->chunk_ib->length_dw); if (!has_msg_cmd) { DRM_ERROR("UVD-IBs need a msg command!\n"); diff --git a/drivers/gpu/drm/radeon/radeon_vce.c b/drivers/gpu/drm/radeon/radeon_vce.c index b3a1698..976fe43 100644 --- a/drivers/gpu/drm/radeon/radeon_vce.c +++ b/drivers/gpu/drm/radeon/radeon_vce.c @@ -457,7 +457,7 @@ int radeon_vce_cs_reloc(struct radeon_cs_parser *p, int lo, int hi, uint64_t start, end, offset; unsigned idx; - relocs_chunk = &p->chunks[p->chunk_relocs_idx]; + relocs_chunk = p->chunk_relocs; offset = radeon_get_ib_value(p, lo); idx = radeon_get_ib_value(p, hi); @@ -534,7 +534,7 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p) uint32_t *size = &tmp; int i, r; - while (p->idx < p->chunks[p->chunk_ib_idx].length_dw) { + while (p->idx < p->chunk_ib->length_dw) { uint32_t len = radeon_get_ib_value(p, p->idx); uint32_t cmd = radeon_get_ib_value(p, p->idx + 1);