@ -190,7 +190,6 @@ static void submit_unpin_objects(struct etnaviv_gem_submit *submit)
if ( submit - > bos [ i ] . flags & BO_PINNED )
etnaviv_gem_mapping_unreference ( submit - > bos [ i ] . mapping ) ;
submit - > bos [ i ] . iova = 0 ;
submit - > bos [ i ] . mapping = NULL ;
submit - > bos [ i ] . flags & = ~ BO_PINNED ;
}
@ -213,14 +212,13 @@ static int submit_pin_objects(struct etnaviv_gem_submit *submit)
submit - > bos [ i ] . flags | = BO_PINNED ;
submit - > bos [ i ] . mapping = mapping ;
submit - > bos [ i ] . iova = mapping - > iova ;
}
return ret ;
}
static int submit_bo ( struct etnaviv_gem_submit * submit , u32 idx ,
struct etnaviv_gem_object * * o bj , u32 * iova )
struct etnaviv_gem_submit_bo * * bo )
{
if ( idx > = submit - > nr_bos ) {
DRM_ERROR ( " invalid buffer index: %u (out of %u) \n " ,
@ -228,10 +226,7 @@ static int submit_bo(struct etnaviv_gem_submit *submit, u32 idx,
return - EINVAL ;
}
if ( obj )
* obj = submit - > bos [ idx ] . obj ;
if ( iova )
* iova = submit - > bos [ idx ] . iova ;
* bo = & submit - > bos [ idx ] ;
return 0 ;
}
@ -247,8 +242,8 @@ static int submit_reloc(struct etnaviv_gem_submit *submit, void *stream,
for ( i = 0 ; i < nr_relocs ; i + + ) {
const struct drm_etnaviv_gem_submit_reloc * r = relocs + i ;
struct etnaviv_gem_object * bobj ;
u32 iova , off ;
struct etnaviv_gem_submit_bo * bo ;
u32 off ;
if ( unlikely ( r - > flags ) ) {
DRM_ERROR ( " invalid reloc flags \n " ) ;
@ -270,17 +265,16 @@ static int submit_reloc(struct etnaviv_gem_submit *submit, void *stream,
return - EINVAL ;
}
ret = submit_bo ( submit , r - > reloc_idx , & bobj , & iova ) ;
ret = submit_bo ( submit , r - > reloc_idx , & bo ) ;
if ( ret )
return ret ;
if ( r - > reloc_offset > =
bobj - > base . size - sizeof ( * ptr ) ) {
if ( r - > reloc_offset > = bo - > obj - > base . size - sizeof ( * ptr ) ) {
DRM_ERROR ( " relocation %u outside object " , i ) ;
return - EINVAL ;
}
ptr [ off ] = iova + r - > reloc_offset ;
ptr [ off ] = bo - > mapping - > iova + r - > reloc_offset ;
last_offset = off ;
}