On 05.01.2024 18:29, Jeffrey Hugo wrote:
> On 1/5/2024 4:22 AM, Jacek Lawrynowicz wrote:
>> From: "Wachowski, Karol" <karol.wachow...@intel.com>
>>
>> DRM_IVPU_PARAM_CONTEXT_PRIORITY has been deprecated because it
>> has been replaced with DRM_IVPU_JOB_PRIORITY levels set with
>> submit IOCTL and was unused anyway.
>>
>> Signed-off-by: Wachowski, Karol <karol.wachow...@intel.com>
>> Signed-off-by: Jacek Lawrynowicz <jacek.lawrynow...@linux.intel.com>
>> ---
>>   drivers/accel/ivpu/ivpu_drv.c | 11 -----------
>>   drivers/accel/ivpu/ivpu_drv.h |  1 -
>>   drivers/accel/ivpu/ivpu_job.c |  3 +++
>>   include/uapi/drm/ivpu_accel.h | 21 ++++++++++++++++++++-
>>   4 files changed, 23 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c
>> index ec66c2c39877..546c0899bb9e 100644
>> --- a/drivers/accel/ivpu/ivpu_drv.c
>> +++ b/drivers/accel/ivpu/ivpu_drv.c
>> @@ -177,9 +177,6 @@ static int ivpu_get_param_ioctl(struct drm_device *dev, 
>> void *data, struct drm_f
>>       case DRM_IVPU_PARAM_CONTEXT_BASE_ADDRESS:
>>           args->value = vdev->hw->ranges.user.start;
>>           break;
>> -    case DRM_IVPU_PARAM_CONTEXT_PRIORITY:
>> -        args->value = file_priv->priority;
>> -        break;
>>       case DRM_IVPU_PARAM_CONTEXT_ID:
>>           args->value = file_priv->ctx.id;
>>           break;
>> @@ -219,17 +216,10 @@ static int ivpu_get_param_ioctl(struct drm_device 
>> *dev, void *data, struct drm_f
>>     static int ivpu_set_param_ioctl(struct drm_device *dev, void *data, 
>> struct drm_file *file)
>>   {
>> -    struct ivpu_file_priv *file_priv = file->driver_priv;
>>       struct drm_ivpu_param *args = data;
>>       int ret = 0;
>>         switch (args->param) {
>> -    case DRM_IVPU_PARAM_CONTEXT_PRIORITY:
>> -        if (args->value <= DRM_IVPU_CONTEXT_PRIORITY_REALTIME)
>> -            file_priv->priority = args->value;
>> -        else
>> -            ret = -EINVAL;
>> -        break;
>>       default:
>>           ret = -EINVAL;
>>       }
>> @@ -258,7 +248,6 @@ static int ivpu_open(struct drm_device *dev, struct 
>> drm_file *file)
>>       }
>>         file_priv->vdev = vdev;
>> -    file_priv->priority = DRM_IVPU_CONTEXT_PRIORITY_NORMAL;
>>       kref_init(&file_priv->ref);
>>       mutex_init(&file_priv->lock);
>>   diff --git a/drivers/accel/ivpu/ivpu_drv.h b/drivers/accel/ivpu/ivpu_drv.h
>> index 9b6e336626e3..7a6bc1918780 100644
>> --- a/drivers/accel/ivpu/ivpu_drv.h
>> +++ b/drivers/accel/ivpu/ivpu_drv.h
>> @@ -146,7 +146,6 @@ struct ivpu_file_priv {
>>       struct mutex lock; /* Protects cmdq */
>>       struct ivpu_cmdq *cmdq[IVPU_NUM_ENGINES];
>>       struct ivpu_mmu_context ctx;
>> -    u32 priority;
>>       bool has_mmu_faults;
>>   };
>>   diff --git a/drivers/accel/ivpu/ivpu_job.c b/drivers/accel/ivpu/ivpu_job.c
>> index 7206cf9cdb4a..82e40bb4803c 100644
>> --- a/drivers/accel/ivpu/ivpu_job.c
>> +++ b/drivers/accel/ivpu/ivpu_job.c
>> @@ -488,6 +488,9 @@ int ivpu_submit_ioctl(struct drm_device *dev, void 
>> *data, struct drm_file *file)
>>       if (params->engine > DRM_IVPU_ENGINE_COPY)
>>           return -EINVAL;
>>   +    if (params->priority > DRM_IVPU_JOB_PRIORITY_REALTIME)
>> +        return -EINVAL;
>> +
>>       if (params->buffer_count == 0 || params->buffer_count > 
>> JOB_MAX_BUFFER_COUNT)
>>           return -EINVAL;
>>   diff --git a/include/uapi/drm/ivpu_accel.h b/include/uapi/drm/ivpu_accel.h
>> index de1944e42c65..cc9a0504ee2f 100644
>> --- a/include/uapi/drm/ivpu_accel.h
>> +++ b/include/uapi/drm/ivpu_accel.h
>> @@ -13,7 +13,7 @@ extern "C" {
>>   #endif
>>     #define DRM_IVPU_DRIVER_MAJOR 1
>> -#define DRM_IVPU_DRIVER_MINOR 0
>> +#define DRM_IVPU_DRIVER_MINOR 1
> 
> I remember when this driver was going through initial review before 
> acceptance, Oded mentioned that the DRM driver version mechanism was 
> deprecated and to not use it.  Based on that, it seems like you should not be 
> incrementing the minor number.

I wanted to use minor version in tests to verify the UAPI but this is not very 
important. I can leave this as is.

>>     #define DRM_IVPU_GET_PARAM          0x00
>>   #define DRM_IVPU_SET_PARAM          0x01
>> @@ -64,11 +64,18 @@ extern "C" {
>>     #define DRM_IVPU_PLATFORM_TYPE_SILICON        0
>>   +/* Deprecated - to be removed */
>>   #define DRM_IVPU_CONTEXT_PRIORITY_IDLE        0
>>   #define DRM_IVPU_CONTEXT_PRIORITY_NORMAL    1
>>   #define DRM_IVPU_CONTEXT_PRIORITY_FOCUS        2
>>   #define DRM_IVPU_CONTEXT_PRIORITY_REALTIME  3
> 
> $SUBJECT suggests these are being removed, not just deprecated.  Also, 
> shouldn't DRM_IVPU_PARAM_CONTEXT_PRIORITY which is a few lines above this be 
> deprecated/removed/something?

OK, I'll correct the subject and add "deprecated" comment to 
DRM_IVPU_PARAM_CONTEXT_PRIORITY.

>>   +#define DRM_IVPU_JOB_PRIORITY_DEFAULT  0
>> +#define DRM_IVPU_JOB_PRIORITY_IDLE     1
>> +#define DRM_IVPU_JOB_PRIORITY_NORMAL   2
>> +#define DRM_IVPU_JOB_PRIORITY_FOCUS    3
>> +#define DRM_IVPU_JOB_PRIORITY_REALTIME 4
>> +
>>   /**
>>    * DRM_IVPU_CAP_METRIC_STREAMER
>>    *
>> @@ -286,6 +293,18 @@ struct drm_ivpu_submit {
>>        * to be executed. The offset has to be 8-byte aligned.
>>        */
>>       __u32 commands_offset;
>> +
>> +    /**
>> +     * @priority:
>> +     *
>> +     * Priority to be set for related job command queue, can be one of the 
>> following:
>> +     * %DRM_IVPU_JOB_PRIORITY_DEFAULT
>> +     * %DRM_IVPU_JOB_PRIORITY_IDLE
>> +     * %DRM_IVPU_JOB_PRIORITY_NORMAL
>> +     * %DRM_IVPU_JOB_PRIORITY_FOCUS
>> +     * %DRM_IVPU_JOB_PRIORITY_REALTIME
>> +     */
>> +    __u32 priority;
> 
> I think this breaks the uapi (which makes me think you are using the driver 
> minor version above to detect).  This struct is passed to DRM_IOW which uses 
> the struct size to calculate the ioctl number.  By changing the size of this 
> struct, you change the ioctl number, and make it so that old userspace (with 
> the old number) cannot work with newer kernels.
> 
> I beleive last time I brought up a uapi breakage, I was told that your 
> userspace han't been offically released yet.  Is that still the case?
> 
> Seems odd though, because you are incrementing the driver minor number above 
> which makes me think you need to communicate this change to userspace, which 
> seems to suggest you might have old userspace out in the wild...

The user-space part of the driver was already released but it have never used 
DRM_IVPU_PARAM_CONTEXT_PRIORITY.
I've tested the new kmd with old umd and ioctls work fine. drm_ioctl() handles 
the difference in user vs driver arg size.
I think it is perfectly safe to extend the ioctl arg. The ioctl number is 
passed directly to DRM_IOW(), I can't see where it would be calculated based on 
arg size.

Regards,
Jacek

Reply via email to