Am Sa., 2. Feb. 2019 um 16:42 Uhr schrieb Rob Herring <robh@xxxxxxxxxx>: > > Now that the base struct drm_gem_object has a reservation_object, use it > and remove the private BO one. > > Cc: Lucas Stach <l.stach@xxxxxxxxxxxxxx> > Cc: Russell King <linux+etnaviv@xxxxxxxxxxxxxxx> > Cc: Christian Gmeiner <christian.gmeiner@xxxxxxxxx> > Cc: David Airlie <airlied@xxxxxxxx> > Cc: Daniel Vetter <daniel@xxxxxxxx> > Cc: etnaviv@xxxxxxxxxxxxxxxxxxxxx > Signed-off-by: Rob Herring <robh@xxxxxxxxxx> Reviewed-by: Christian Gmeiner <christian.gmeiner@xxxxxxxxx> > --- > drivers/gpu/drm/etnaviv/etnaviv_drv.c | 1 - > drivers/gpu/drm/etnaviv/etnaviv_drv.h | 1 - > drivers/gpu/drm/etnaviv/etnaviv_gem.c | 16 +++++--------- > drivers/gpu/drm/etnaviv/etnaviv_gem.h | 4 ---- > drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c | 7 ------- > drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 22 ++++++++++---------- > 6 files changed, 16 insertions(+), 35 deletions(-) > > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c > index 18c27f795cf6..9f42f7538236 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c > +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c > @@ -473,7 +473,6 @@ static struct drm_driver etnaviv_drm_driver = { > .prime_fd_to_handle = drm_gem_prime_fd_to_handle, > .gem_prime_export = drm_gem_prime_export, > .gem_prime_import = drm_gem_prime_import, > - .gem_prime_res_obj = etnaviv_gem_prime_res_obj, > .gem_prime_pin = etnaviv_gem_prime_pin, > .gem_prime_unpin = etnaviv_gem_prime_unpin, > .gem_prime_get_sg_table = etnaviv_gem_prime_get_sg_table, > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.h b/drivers/gpu/drm/etnaviv/etnaviv_drv.h > index 4bf698de5996..351db0c5822d 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.h > +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.h > @@ -61,7 +61,6 @@ void *etnaviv_gem_prime_vmap(struct drm_gem_object *obj); > void etnaviv_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); > int etnaviv_gem_prime_mmap(struct drm_gem_object *obj, > struct vm_area_struct *vma); > -struct reservation_object *etnaviv_gem_prime_res_obj(struct drm_gem_object *obj); > struct drm_gem_object *etnaviv_gem_prime_import_sg_table(struct drm_device *dev, > struct dma_buf_attachment *attach, struct sg_table *sg); > int etnaviv_gem_prime_pin(struct drm_gem_object *obj); > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c > index 1fa74226db91..3e954adcb2cc 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c > +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c > @@ -397,13 +397,13 @@ int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op, > } > > if (op & ETNA_PREP_NOSYNC) { > - if (!reservation_object_test_signaled_rcu(etnaviv_obj->resv, > + if (!reservation_object_test_signaled_rcu(obj->resv, > write)) > return -EBUSY; > } else { > unsigned long remain = etnaviv_timeout_to_jiffies(timeout); > > - ret = reservation_object_wait_timeout_rcu(etnaviv_obj->resv, > + ret = reservation_object_wait_timeout_rcu(obj->resv, > write, true, remain); > if (ret <= 0) > return ret == 0 ? -ETIMEDOUT : ret; > @@ -459,7 +459,7 @@ static void etnaviv_gem_describe_fence(struct dma_fence *fence, > static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m) > { > struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj); > - struct reservation_object *robj = etnaviv_obj->resv; > + struct reservation_object *robj = obj->resv; > struct reservation_object_list *fobj; > struct dma_fence *fence; > unsigned long off = drm_vma_node_start(&obj->vma_node); > @@ -549,8 +549,6 @@ void etnaviv_gem_free_object(struct drm_gem_object *obj) > > drm_gem_free_mmap_offset(obj); > etnaviv_obj->ops->release(etnaviv_obj); > - if (etnaviv_obj->resv == &etnaviv_obj->_resv) > - reservation_object_fini(&etnaviv_obj->_resv); > drm_gem_object_release(obj); > > kfree(etnaviv_obj); > @@ -596,12 +594,8 @@ static int etnaviv_gem_new_impl(struct drm_device *dev, u32 size, u32 flags, > > etnaviv_obj->flags = flags; > etnaviv_obj->ops = ops; > - if (robj) { > - etnaviv_obj->resv = robj; > - } else { > - etnaviv_obj->resv = &etnaviv_obj->_resv; > - reservation_object_init(&etnaviv_obj->_resv); > - } > + if (robj) > + etnaviv_obj->base.resv = robj; > > mutex_init(&etnaviv_obj->lock); > INIT_LIST_HEAD(&etnaviv_obj->vram_list); > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.h b/drivers/gpu/drm/etnaviv/etnaviv_gem.h > index 76079c2291f8..7015837ccc1c 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.h > +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.h > @@ -47,10 +47,6 @@ struct etnaviv_gem_object { > struct sg_table *sgt; > void *vaddr; > > - /* normally (resv == &_resv) except for imported bo's */ > - struct reservation_object *resv; > - struct reservation_object _resv; > - > struct list_head vram_list; > > /* cache maintenance */ > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c > index 0566171f8df2..01e7ad96339c 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c > +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c > @@ -139,10 +139,3 @@ struct drm_gem_object *etnaviv_gem_prime_import_sg_table(struct drm_device *dev, > > return ERR_PTR(ret); > } > - > -struct reservation_object *etnaviv_gem_prime_res_obj(struct drm_gem_object *obj) > -{ > - struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj); > - > - return etnaviv_obj->resv; > -} > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c > index 30875f8f2933..a10281e915e5 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c > +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c > @@ -108,9 +108,9 @@ static int submit_lookup_objects(struct etnaviv_gem_submit *submit, > static void submit_unlock_object(struct etnaviv_gem_submit *submit, int i) > { > if (submit->bos[i].flags & BO_LOCKED) { > - struct etnaviv_gem_object *etnaviv_obj = submit->bos[i].obj; > + struct drm_gem_object *obj = &submit->bos[i].obj->base; > > - ww_mutex_unlock(&etnaviv_obj->resv->lock); > + ww_mutex_unlock(&obj->resv->lock); > submit->bos[i].flags &= ~BO_LOCKED; > } > } > @@ -122,7 +122,7 @@ static int submit_lock_objects(struct etnaviv_gem_submit *submit, > > retry: > for (i = 0; i < submit->nr_bos; i++) { > - struct etnaviv_gem_object *etnaviv_obj = submit->bos[i].obj; > + struct drm_gem_object *obj = &submit->bos[i].obj->base; > > if (slow_locked == i) > slow_locked = -1; > @@ -130,7 +130,7 @@ static int submit_lock_objects(struct etnaviv_gem_submit *submit, > contended = i; > > if (!(submit->bos[i].flags & BO_LOCKED)) { > - ret = ww_mutex_lock_interruptible(&etnaviv_obj->resv->lock, > + ret = ww_mutex_lock_interruptible(&obj->resv->lock, > ticket); > if (ret == -EALREADY) > DRM_ERROR("BO at index %u already on submit list\n", > @@ -153,12 +153,12 @@ static int submit_lock_objects(struct etnaviv_gem_submit *submit, > submit_unlock_object(submit, slow_locked); > > if (ret == -EDEADLK) { > - struct etnaviv_gem_object *etnaviv_obj; > + struct drm_gem_object *obj; > > - etnaviv_obj = submit->bos[contended].obj; > + obj = &submit->bos[contended].obj->base; > > /* we lost out in a seqno race, lock and retry.. */ > - ret = ww_mutex_lock_slow_interruptible(&etnaviv_obj->resv->lock, > + ret = ww_mutex_lock_slow_interruptible(&obj->resv->lock, > ticket); > if (!ret) { > submit->bos[contended].flags |= BO_LOCKED; > @@ -176,7 +176,7 @@ static int submit_fence_sync(struct etnaviv_gem_submit *submit) > > for (i = 0; i < submit->nr_bos; i++) { > struct etnaviv_gem_submit_bo *bo = &submit->bos[i]; > - struct reservation_object *robj = bo->obj->resv; > + struct reservation_object *robj = bo->obj->base.resv; > > if (!(bo->flags & ETNA_SUBMIT_BO_WRITE)) { > ret = reservation_object_reserve_shared(robj, 1); > @@ -207,13 +207,13 @@ static void submit_attach_object_fences(struct etnaviv_gem_submit *submit) > int i; > > for (i = 0; i < submit->nr_bos; i++) { > - struct etnaviv_gem_object *etnaviv_obj = submit->bos[i].obj; > + struct drm_gem_object *obj = &submit->bos[i].obj->base; > > if (submit->bos[i].flags & ETNA_SUBMIT_BO_WRITE) > - reservation_object_add_excl_fence(etnaviv_obj->resv, > + reservation_object_add_excl_fence(obj->resv, > submit->out_fence); > else > - reservation_object_add_shared_fence(etnaviv_obj->resv, > + reservation_object_add_shared_fence(obj->resv, > submit->out_fence); > > submit_unlock_object(submit, i); > -- > 2.19.1 > -- greets -- Christian Gmeiner, MSc https://christian-gmeiner.info