mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
drm/radeon: add a way to revoke hyper-z access
Signed-off-by: Marek Olšák <maraeo@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
c17c2f892e
commit
43861f713c
1 changed files with 20 additions and 6 deletions
|
@ -162,13 +162,27 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
|
|||
return -EINVAL;
|
||||
}
|
||||
case RADEON_INFO_WANT_HYPERZ:
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
if (rdev->hyperz_filp)
|
||||
value = 0;
|
||||
else {
|
||||
rdev->hyperz_filp = filp;
|
||||
value = 1;
|
||||
/* The "value" here is both an input and output parameter.
|
||||
* If the input value is 1, filp requests hyper-z access.
|
||||
* If the input value is 0, filp revokes its hyper-z access.
|
||||
*
|
||||
* When returning, the value is 1 if filp owns hyper-z access,
|
||||
* 0 otherwise. */
|
||||
if (value >= 2) {
|
||||
DRM_DEBUG_KMS("WANT_HYPERZ: invalid value %d\n", value);
|
||||
return -EINVAL;
|
||||
}
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
if (value == 1) {
|
||||
/* wants hyper-z */
|
||||
if (!rdev->hyperz_filp)
|
||||
rdev->hyperz_filp = filp;
|
||||
} else if (value == 0) {
|
||||
/* revokes hyper-z */
|
||||
if (rdev->hyperz_filp == filp)
|
||||
rdev->hyperz_filp = NULL;
|
||||
}
|
||||
value = rdev->hyperz_filp == filp ? 1 : 0;
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue