@@ -301,20 +301,13 @@ static void etnaviv_debugfs_cleanup(struct drm_minor *minor)
/*
* Fences:
*/
-int etnaviv_wait_fence_interruptable(struct drm_device *dev, uint32_t pipe,
- uint32_t fence, struct timespec *timeout)
+int etnaviv_wait_fence_interruptable(struct drm_device *dev,
+ struct etnaviv_gpu *gpu, uint32_t fence,
+ struct timespec *timeout)
{
struct etnaviv_drm_private *priv = dev->dev_private;
- struct etnaviv_gpu *gpu;
int ret;
- if (pipe >= ETNA_MAX_PIPES)
- return -EINVAL;
-
- gpu = priv->gpu[pipe];
- if (!gpu)
- return -ENXIO;
-
if (fence_after(fence, gpu->submitted_fence)) {
DRM_ERROR("waiting on invalid fence: %u (of %u)\n",
fence, gpu->submitted_fence);
@@ -458,9 +451,18 @@ static int etnaviv_ioctl_gem_info(struct drm_device *dev, void *data,
static int etnaviv_ioctl_wait_fence(struct drm_device *dev, void *data,
struct drm_file *file)
{
+ struct etnaviv_drm_private *priv = dev->dev_private;
+ struct etnaviv_gpu *gpu;
struct drm_etnaviv_wait_fence *args = data;
- return etnaviv_wait_fence_interruptable(dev, args->pipe, args->fence,
+ if (args->pipe >= ETNA_MAX_PIPES)
+ return -EINVAL;
+
+ gpu = priv->gpu[args->pipe];
+ if (!gpu)
+ return -ENODEV;
+
+ return etnaviv_wait_fence_interruptable(dev, gpu, args->fence,
&TS(args->timeout));
}
@@ -68,8 +68,9 @@ struct etnaviv_drm_private {
void etnaviv_register_mmu(struct drm_device *dev, struct etnaviv_iommu *mmu);
-int etnaviv_wait_fence_interruptable(struct drm_device *dev, uint32_t pipe,
- uint32_t fence, struct timespec *timeout);
+int etnaviv_wait_fence_interruptable(struct drm_device *dev,
+ struct etnaviv_gpu *gpu, uint32_t fence,
+ struct timespec *timeout);
void etnaviv_update_fence(struct drm_device *dev, uint32_t fence);
int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
Other users may only have the gpu pointer available and it's easy to convert from pipe to gpu in the ioctl path. Signed-off-by: Lucas Stach <l.stach@pengutronix.de> --- drivers/staging/etnaviv/etnaviv_drv.c | 24 +++++++++++++----------- drivers/staging/etnaviv/etnaviv_drv.h | 5 +++-- 2 files changed, 16 insertions(+), 13 deletions(-)