summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMatthew Auld <matthew.auld@intel.com>2023-02-15 10:28:43 +0000
committerRodrigo Vivi <rodrigo.vivi@intel.com>2023-12-19 18:28:53 -0500
commit0d83be772c1f8e0d3db4a26a5f1308e058a98354 (patch)
tree2ecdd5c0f8a7de63fb32e9f03f7c33b2862f3247 /drivers
parentba00da78ce4d2a7fe7ef245e1168b7946827995d (diff)
downloadlwn-0d83be772c1f8e0d3db4a26a5f1308e058a98354.tar.gz
lwn-0d83be772c1f8e0d3db4a26a5f1308e058a98354.zip
drm/xe/mmio: fix forcewake ref leak in xe_mmio_ioctl
Make sure we properly release the forcewake ref on all error paths. v2(Lucas): - Make it less verbose and just fold the unimplemented options into the default. The exact return value doesn't seem to matter for the corresponding IGT. - Replace the user triggerable WARN() with drm_dbg(). Signed-off-by: Matthew Auld <matthew.auld@intel.com> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/xe/xe_mmio.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index 8a953df2b468..ba327b1e8dea 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -425,31 +425,28 @@ int xe_mmio_ioctl(struct drm_device *dev, void *data,
if (args->flags & DRM_XE_MMIO_WRITE) {
switch (bits_flag) {
- case DRM_XE_MMIO_8BIT:
- return -EINVAL; /* TODO */
- case DRM_XE_MMIO_16BIT:
- return -EINVAL; /* TODO */
case DRM_XE_MMIO_32BIT:
- if (XE_IOCTL_ERR(xe, args->value > U32_MAX))
- return -EINVAL;
+ if (XE_IOCTL_ERR(xe, args->value > U32_MAX)) {
+ ret = -EINVAL;
+ goto exit;
+ }
xe_mmio_write32(to_gt(xe), args->addr, args->value);
break;
case DRM_XE_MMIO_64BIT:
xe_mmio_write64(to_gt(xe), args->addr, args->value);
break;
default:
- drm_WARN(&xe->drm, 1, "Invalid MMIO bit size");
- ret = -EINVAL;
+ drm_dbg(&xe->drm, "Invalid MMIO bit size");
+ fallthrough;
+ case DRM_XE_MMIO_8BIT: /* TODO */
+ case DRM_XE_MMIO_16BIT: /* TODO */
+ ret = -ENOTSUPP;
goto exit;
}
}
if (args->flags & DRM_XE_MMIO_READ) {
switch (bits_flag) {
- case DRM_XE_MMIO_8BIT:
- return -EINVAL; /* TODO */
- case DRM_XE_MMIO_16BIT:
- return -EINVAL; /* TODO */
case DRM_XE_MMIO_32BIT:
args->value = xe_mmio_read32(to_gt(xe), args->addr);
break;
@@ -457,8 +454,11 @@ int xe_mmio_ioctl(struct drm_device *dev, void *data,
args->value = xe_mmio_read64(to_gt(xe), args->addr);
break;
default:
- drm_WARN(&xe->drm, 1, "Invalid MMIO bit size");
- ret = -EINVAL;
+ drm_dbg(&xe->drm, "Invalid MMIO bit size");
+ fallthrough;
+ case DRM_XE_MMIO_8BIT: /* TODO */
+ case DRM_XE_MMIO_16BIT: /* TODO */
+ ret = -ENOTSUPP;
}
}