[PATCH] drm/radeon: add a GPU reset counter queryable by userspace

2015-05-11 Thread Alex Deucher
On Thu, May 7, 2015 at 1:44 PM, Christian König  
wrote:
> On 07.05.2015 19:13, Marek Olšák wrote:
>>
>> Ping
>>
>> On Wed, Apr 29, 2015 at 7:40 PM, Marek Olšák  wrote:
>>>
>>> From: Marek Olšák 
>>>
>>> Userspace will be able to tell whether a GPU reset occured by comparing
>>> an old referece value of the counter with a new value.
>>>
>>> Signed-off-by: Marek Olšák 
>
>
> Reviewed-by: Christian König 
>

Applied to my drm-next tree.  Thanks!

Alex

>
>>> ---
>>>   drivers/gpu/drm/radeon/radeon.h| 1 +
>>>   drivers/gpu/drm/radeon/radeon_device.c | 2 ++
>>>   drivers/gpu/drm/radeon/radeon_drv.c| 3 ++-
>>>   drivers/gpu/drm/radeon/radeon_kms.c| 3 +++
>>>   include/uapi/drm/radeon_drm.h  | 1 +
>>>   5 files changed, 9 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/radeon/radeon.h
>>> b/drivers/gpu/drm/radeon/radeon.h
>>> index d2abe48..c2b345a 100644
>>> --- a/drivers/gpu/drm/radeon/radeon.h
>>> +++ b/drivers/gpu/drm/radeon/radeon.h
>>> @@ -2436,6 +2436,7 @@ struct radeon_device {
>>>  atomic64_t  vram_usage;
>>>  atomic64_t  gtt_usage;
>>>  atomic64_t  num_bytes_moved;
>>> +   atomic_tgpu_reset_counter;
>>>  /* ACPI interface */
>>>  struct radeon_atif  atif;
>>>  struct radeon_atcs  atcs;
>>> diff --git a/drivers/gpu/drm/radeon/radeon_device.c
>>> b/drivers/gpu/drm/radeon/radeon_device.c
>>> index b7ca4c5..13e207e 100644
>>> --- a/drivers/gpu/drm/radeon/radeon_device.c
>>> +++ b/drivers/gpu/drm/radeon/radeon_device.c
>>> @@ -1725,6 +1725,8 @@ int radeon_gpu_reset(struct radeon_device *rdev)
>>>  return 0;
>>>  }
>>>
>>> +   atomic_inc(>gpu_reset_counter);
>>> +
>>>  radeon_save_bios_scratch_regs(rdev);
>>>  /* block TTM */
>>>  resched = ttm_bo_lock_delayed_workqueue(>mman.bdev);
>>> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c
>>> b/drivers/gpu/drm/radeon/radeon_drv.c
>>> index 7d620d4..5751446 100644
>>> --- a/drivers/gpu/drm/radeon/radeon_drv.c
>>> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
>>> @@ -90,9 +90,10 @@
>>>*CS to GPU on >= r600
>>>*   2.41.0 - evergreen/cayman: Add SET_BASE/DRAW_INDIRECT command
>>> parsing support
>>>*   2.42.0 - Add VCE/VUI (Video Usability Information) support
>>> + *   2.43.0 - RADEON_INFO_GPU_RESET_COUNTER
>>>*/
>>>   #define KMS_DRIVER_MAJOR   2
>>> -#define KMS_DRIVER_MINOR   42
>>> +#define KMS_DRIVER_MINOR   43
>>>   #define KMS_DRIVER_PATCHLEVEL  0
>>>   int radeon_driver_load_kms(struct drm_device *dev, unsigned long
>>> flags);
>>>   int radeon_driver_unload_kms(struct drm_device *dev);
>>> diff --git a/drivers/gpu/drm/radeon/radeon_kms.c
>>> b/drivers/gpu/drm/radeon/radeon_kms.c
>>> index 7b2a733..9632e88 100644
>>> --- a/drivers/gpu/drm/radeon/radeon_kms.c
>>> +++ b/drivers/gpu/drm/radeon/radeon_kms.c
>>> @@ -576,6 +576,9 @@ static int radeon_info_ioctl(struct drm_device *dev,
>>> void *data, struct drm_file
>>>  if (radeon_get_allowed_info_register(rdev, *value,
>>> value))
>>>  return -EINVAL;
>>>  break;
>>> +   case RADEON_INFO_GPU_RESET_COUNTER:
>>> +   *value = atomic_read(>gpu_reset_counter);
>>> +   break;
>>>  default:
>>>  DRM_DEBUG_KMS("Invalid request %d\n", info->request);
>>>  return -EINVAL;
>>> diff --git a/include/uapi/drm/radeon_drm.h
>>> b/include/uapi/drm/radeon_drm.h
>>> index 871e73f..573cb86 100644
>>> --- a/include/uapi/drm/radeon_drm.h
>>> +++ b/include/uapi/drm/radeon_drm.h
>>> @@ -1038,6 +1038,7 @@ struct drm_radeon_cs {
>>>   #define RADEON_INFO_CURRENT_GPU_SCLK   0x22
>>>   #define RADEON_INFO_CURRENT_GPU_MCLK   0x23
>>>   #define RADEON_INFO_READ_REG   0x24
>>> +#define RADEON_INFO_GPU_RESET_COUNTER  0x25
>>>
>>>   struct drm_radeon_info {
>>>  uint32_trequest;
>>> --
>>> 2.1.0
>>>
>> ___
>> dri-devel mailing list
>> dri-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>
> ___
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH] drm/radeon: add a GPU reset counter queryable by userspace

2015-05-07 Thread Christian König
On 07.05.2015 19:13, Marek Olšák wrote:
> Ping
>
> On Wed, Apr 29, 2015 at 7:40 PM, Marek Olšák  wrote:
>> From: Marek Olšák 
>>
>> Userspace will be able to tell whether a GPU reset occured by comparing
>> an old referece value of the counter with a new value.
>>
>> Signed-off-by: Marek Olšák 

Reviewed-by: Christian König 

>> ---
>>   drivers/gpu/drm/radeon/radeon.h| 1 +
>>   drivers/gpu/drm/radeon/radeon_device.c | 2 ++
>>   drivers/gpu/drm/radeon/radeon_drv.c| 3 ++-
>>   drivers/gpu/drm/radeon/radeon_kms.c| 3 +++
>>   include/uapi/drm/radeon_drm.h  | 1 +
>>   5 files changed, 9 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/radeon/radeon.h 
>> b/drivers/gpu/drm/radeon/radeon.h
>> index d2abe48..c2b345a 100644
>> --- a/drivers/gpu/drm/radeon/radeon.h
>> +++ b/drivers/gpu/drm/radeon/radeon.h
>> @@ -2436,6 +2436,7 @@ struct radeon_device {
>>  atomic64_t  vram_usage;
>>  atomic64_t  gtt_usage;
>>  atomic64_t  num_bytes_moved;
>> +   atomic_tgpu_reset_counter;
>>  /* ACPI interface */
>>  struct radeon_atif  atif;
>>  struct radeon_atcs  atcs;
>> diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
>> b/drivers/gpu/drm/radeon/radeon_device.c
>> index b7ca4c5..13e207e 100644
>> --- a/drivers/gpu/drm/radeon/radeon_device.c
>> +++ b/drivers/gpu/drm/radeon/radeon_device.c
>> @@ -1725,6 +1725,8 @@ int radeon_gpu_reset(struct radeon_device *rdev)
>>  return 0;
>>  }
>>
>> +   atomic_inc(>gpu_reset_counter);
>> +
>>  radeon_save_bios_scratch_regs(rdev);
>>  /* block TTM */
>>  resched = ttm_bo_lock_delayed_workqueue(>mman.bdev);
>> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c 
>> b/drivers/gpu/drm/radeon/radeon_drv.c
>> index 7d620d4..5751446 100644
>> --- a/drivers/gpu/drm/radeon/radeon_drv.c
>> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
>> @@ -90,9 +90,10 @@
>>*CS to GPU on >= r600
>>*   2.41.0 - evergreen/cayman: Add SET_BASE/DRAW_INDIRECT command parsing 
>> support
>>*   2.42.0 - Add VCE/VUI (Video Usability Information) support
>> + *   2.43.0 - RADEON_INFO_GPU_RESET_COUNTER
>>*/
>>   #define KMS_DRIVER_MAJOR   2
>> -#define KMS_DRIVER_MINOR   42
>> +#define KMS_DRIVER_MINOR   43
>>   #define KMS_DRIVER_PATCHLEVEL  0
>>   int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
>>   int radeon_driver_unload_kms(struct drm_device *dev);
>> diff --git a/drivers/gpu/drm/radeon/radeon_kms.c 
>> b/drivers/gpu/drm/radeon/radeon_kms.c
>> index 7b2a733..9632e88 100644
>> --- a/drivers/gpu/drm/radeon/radeon_kms.c
>> +++ b/drivers/gpu/drm/radeon/radeon_kms.c
>> @@ -576,6 +576,9 @@ static int radeon_info_ioctl(struct drm_device *dev, 
>> void *data, struct drm_file
>>  if (radeon_get_allowed_info_register(rdev, *value, value))
>>  return -EINVAL;
>>  break;
>> +   case RADEON_INFO_GPU_RESET_COUNTER:
>> +   *value = atomic_read(>gpu_reset_counter);
>> +   break;
>>  default:
>>  DRM_DEBUG_KMS("Invalid request %d\n", info->request);
>>  return -EINVAL;
>> diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
>> index 871e73f..573cb86 100644
>> --- a/include/uapi/drm/radeon_drm.h
>> +++ b/include/uapi/drm/radeon_drm.h
>> @@ -1038,6 +1038,7 @@ struct drm_radeon_cs {
>>   #define RADEON_INFO_CURRENT_GPU_SCLK   0x22
>>   #define RADEON_INFO_CURRENT_GPU_MCLK   0x23
>>   #define RADEON_INFO_READ_REG   0x24
>> +#define RADEON_INFO_GPU_RESET_COUNTER  0x25
>>
>>   struct drm_radeon_info {
>>  uint32_trequest;
>> --
>> 2.1.0
>>
> ___
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel



[PATCH] drm/radeon: add a GPU reset counter queryable by userspace

2015-05-07 Thread Marek Olšák
Ping

On Wed, Apr 29, 2015 at 7:40 PM, Marek Olšák  wrote:
> From: Marek Olšák 
>
> Userspace will be able to tell whether a GPU reset occured by comparing
> an old referece value of the counter with a new value.
>
> Signed-off-by: Marek Olšák 
> ---
>  drivers/gpu/drm/radeon/radeon.h| 1 +
>  drivers/gpu/drm/radeon/radeon_device.c | 2 ++
>  drivers/gpu/drm/radeon/radeon_drv.c| 3 ++-
>  drivers/gpu/drm/radeon/radeon_kms.c| 3 +++
>  include/uapi/drm/radeon_drm.h  | 1 +
>  5 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index d2abe48..c2b345a 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -2436,6 +2436,7 @@ struct radeon_device {
> atomic64_t  vram_usage;
> atomic64_t  gtt_usage;
> atomic64_t  num_bytes_moved;
> +   atomic_tgpu_reset_counter;
> /* ACPI interface */
> struct radeon_atif  atif;
> struct radeon_atcs  atcs;
> diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
> b/drivers/gpu/drm/radeon/radeon_device.c
> index b7ca4c5..13e207e 100644
> --- a/drivers/gpu/drm/radeon/radeon_device.c
> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> @@ -1725,6 +1725,8 @@ int radeon_gpu_reset(struct radeon_device *rdev)
> return 0;
> }
>
> +   atomic_inc(>gpu_reset_counter);
> +
> radeon_save_bios_scratch_regs(rdev);
> /* block TTM */
> resched = ttm_bo_lock_delayed_workqueue(>mman.bdev);
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c 
> b/drivers/gpu/drm/radeon/radeon_drv.c
> index 7d620d4..5751446 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -90,9 +90,10 @@
>   *CS to GPU on >= r600
>   *   2.41.0 - evergreen/cayman: Add SET_BASE/DRAW_INDIRECT command parsing 
> support
>   *   2.42.0 - Add VCE/VUI (Video Usability Information) support
> + *   2.43.0 - RADEON_INFO_GPU_RESET_COUNTER
>   */
>  #define KMS_DRIVER_MAJOR   2
> -#define KMS_DRIVER_MINOR   42
> +#define KMS_DRIVER_MINOR   43
>  #define KMS_DRIVER_PATCHLEVEL  0
>  int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
>  int radeon_driver_unload_kms(struct drm_device *dev);
> diff --git a/drivers/gpu/drm/radeon/radeon_kms.c 
> b/drivers/gpu/drm/radeon/radeon_kms.c
> index 7b2a733..9632e88 100644
> --- a/drivers/gpu/drm/radeon/radeon_kms.c
> +++ b/drivers/gpu/drm/radeon/radeon_kms.c
> @@ -576,6 +576,9 @@ static int radeon_info_ioctl(struct drm_device *dev, void 
> *data, struct drm_file
> if (radeon_get_allowed_info_register(rdev, *value, value))
> return -EINVAL;
> break;
> +   case RADEON_INFO_GPU_RESET_COUNTER:
> +   *value = atomic_read(>gpu_reset_counter);
> +   break;
> default:
> DRM_DEBUG_KMS("Invalid request %d\n", info->request);
> return -EINVAL;
> diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
> index 871e73f..573cb86 100644
> --- a/include/uapi/drm/radeon_drm.h
> +++ b/include/uapi/drm/radeon_drm.h
> @@ -1038,6 +1038,7 @@ struct drm_radeon_cs {
>  #define RADEON_INFO_CURRENT_GPU_SCLK   0x22
>  #define RADEON_INFO_CURRENT_GPU_MCLK   0x23
>  #define RADEON_INFO_READ_REG   0x24
> +#define RADEON_INFO_GPU_RESET_COUNTER  0x25
>
>  struct drm_radeon_info {
> uint32_trequest;
> --
> 2.1.0
>


[PATCH] drm/radeon: add a GPU reset counter queryable by userspace

2015-04-29 Thread Marek Olšák
From: Marek Olšák 

Userspace will be able to tell whether a GPU reset occured by comparing
an old referece value of the counter with a new value.

Signed-off-by: Marek Olšák 
---
 drivers/gpu/drm/radeon/radeon.h| 1 +
 drivers/gpu/drm/radeon/radeon_device.c | 2 ++
 drivers/gpu/drm/radeon/radeon_drv.c| 3 ++-
 drivers/gpu/drm/radeon/radeon_kms.c| 3 +++
 include/uapi/drm/radeon_drm.h  | 1 +
 5 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index d2abe48..c2b345a 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -2436,6 +2436,7 @@ struct radeon_device {
atomic64_t  vram_usage;
atomic64_t  gtt_usage;
atomic64_t  num_bytes_moved;
+   atomic_tgpu_reset_counter;
/* ACPI interface */
struct radeon_atif  atif;
struct radeon_atcs  atcs;
diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
b/drivers/gpu/drm/radeon/radeon_device.c
index b7ca4c5..13e207e 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1725,6 +1725,8 @@ int radeon_gpu_reset(struct radeon_device *rdev)
return 0;
}

+   atomic_inc(>gpu_reset_counter);
+
radeon_save_bios_scratch_regs(rdev);
/* block TTM */
resched = ttm_bo_lock_delayed_workqueue(>mman.bdev);
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c 
b/drivers/gpu/drm/radeon/radeon_drv.c
index 7d620d4..5751446 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -90,9 +90,10 @@
  *CS to GPU on >= r600
  *   2.41.0 - evergreen/cayman: Add SET_BASE/DRAW_INDIRECT command parsing 
support
  *   2.42.0 - Add VCE/VUI (Video Usability Information) support
+ *   2.43.0 - RADEON_INFO_GPU_RESET_COUNTER
  */
 #define KMS_DRIVER_MAJOR   2
-#define KMS_DRIVER_MINOR   42
+#define KMS_DRIVER_MINOR   43
 #define KMS_DRIVER_PATCHLEVEL  0
 int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
 int radeon_driver_unload_kms(struct drm_device *dev);
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c 
b/drivers/gpu/drm/radeon/radeon_kms.c
index 7b2a733..9632e88 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -576,6 +576,9 @@ static int radeon_info_ioctl(struct drm_device *dev, void 
*data, struct drm_file
if (radeon_get_allowed_info_register(rdev, *value, value))
return -EINVAL;
break;
+   case RADEON_INFO_GPU_RESET_COUNTER:
+   *value = atomic_read(>gpu_reset_counter);
+   break;
default:
DRM_DEBUG_KMS("Invalid request %d\n", info->request);
return -EINVAL;
diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
index 871e73f..573cb86 100644
--- a/include/uapi/drm/radeon_drm.h
+++ b/include/uapi/drm/radeon_drm.h
@@ -1038,6 +1038,7 @@ struct drm_radeon_cs {
 #define RADEON_INFO_CURRENT_GPU_SCLK   0x22
 #define RADEON_INFO_CURRENT_GPU_MCLK   0x23
 #define RADEON_INFO_READ_REG   0x24
+#define RADEON_INFO_GPU_RESET_COUNTER  0x25

 struct drm_radeon_info {
uint32_trequest;
-- 
2.1.0