Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46a269da authored by Lucas Stach's avatar Lucas Stach
Browse files

drm/etnaviv: restore ETNA_PREP_NOSYNC behaviour



This reverts commit cd34db4a (drm/etnaviv: Remove manual call to
reservation_object_test_signaled_rcu before wait), as the patch to turn
reservation_object_wait_timeout_rcu() into
reservation_object_test_signaled_rcu() with a 0 timeout has been reverted.
This causes the driver to call into the fence wait, even with a timeout of 0

The etnaviv BO cache depends on ETNA_PREP_NOSYNC to be wait-free, even if
the BO has attached fences, so restore the behaviour for this flag.

Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
parent d79fd1cc
Loading
Loading
Loading
Loading
+14 −10
Original line number Original line Diff line number Diff line
@@ -411,16 +411,20 @@ int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op,
	struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
	struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
	struct drm_device *dev = obj->dev;
	struct drm_device *dev = obj->dev;
	bool write = !!(op & ETNA_PREP_WRITE);
	bool write = !!(op & ETNA_PREP_WRITE);
	unsigned long remain =
	int ret;
		op & ETNA_PREP_NOSYNC ? 0 : etnaviv_timeout_to_jiffies(timeout);

	long lret;
	if (op & ETNA_PREP_NOSYNC) {
		if (!reservation_object_test_signaled_rcu(etnaviv_obj->resv,
							  write))
			return -EBUSY;
	} else {
		unsigned long remain = etnaviv_timeout_to_jiffies(timeout);


	lret = reservation_object_wait_timeout_rcu(etnaviv_obj->resv,
		ret = reservation_object_wait_timeout_rcu(etnaviv_obj->resv,
							  write, true, remain);
							  write, true, remain);
	if (lret < 0)
		if (ret <= 0)
		return lret;
			return ret == 0 ? -ETIMEDOUT : ret;
	else if (lret == 0)
	}
		return remain == 0 ? -EBUSY : -ETIMEDOUT;


	if (etnaviv_obj->flags & ETNA_BO_CACHED) {
	if (etnaviv_obj->flags & ETNA_BO_CACHED) {
		if (!etnaviv_obj->sgt) {
		if (!etnaviv_obj->sgt) {