[PATCH 01/10] drm: crc: Introduce verify_crc_source callback
Kumar, Mahesh
mahesh1.kumar at intel.com
Tue Jul 10 12:12:14 UTC 2018
Hi,
On 7/10/2018 5:40 PM, Laurent Pinchart wrote:
> Hi Mahesh,
>
> On Tuesday, 10 July 2018 14:54:11 EEST Kumar, Mahesh wrote:
>> On 7/10/2018 4:56 PM, Laurent Pinchart wrote:
>>> On Monday, 2 July 2018 14:07:20 EEST Mahesh Kumar wrote:
>>>> This patch adds a new callback function "verify_crc_source" which will
>>>> be used during setting the crc source in control node and while opening
>>>> data node for crc reading. This will help in avoiding setting of wrong
>>>> string for source.
>>> Why do you need to verify the source in the open() operation ? Isn't it
>>> enough to verify it in the write() handler ? The answer to this question
>>> might lie in patch 08/10, in which case I'd add the .verify_crc_source()
>>> call in open() in that patch, not here.
>> Yes, final goal is achieved by patch 08/10. But if crc_read is called
>> before setting the source, it may have wrong source set in that case I
>> wanted to return early at least for the drivers implemented
>> verify_crc_source. If you still think otherwise I will modify
>> accordingly in next series.
> I don't disagree with you, but I don't think this issue is new. As I got a bit
> confused as to why the call is needed in open() (there's no explanation in
> this patch), I think fixing the problem in 08/10 would be better.
ok sure :)
-Mahesh
>
>>>> Signed-off-by: Mahesh Kumar <mahesh1.kumar at intel.com>
>>>> Cc: dri-devel at lists.freedesktop.org
>>>> Reviewed-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
>>>> ---
>>>>
>>>> drivers/gpu/drm/drm_debugfs_crc.c | 15 +++++++++++++++
>>>> include/drm/drm_crtc.h | 15 +++++++++++++++
>>>> 2 files changed, 30 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/drm_debugfs_crc.c
>>>> b/drivers/gpu/drm/drm_debugfs_crc.c index 9f8312137cad..c6a725b79ac6
>>>> 100644
>>>> --- a/drivers/gpu/drm/drm_debugfs_crc.c
>>>> +++ b/drivers/gpu/drm/drm_debugfs_crc.c
>>>> @@ -87,6 +87,8 @@ static ssize_t crc_control_write(struct file *file,
>>>> const
>>>> char __user *ubuf, struct drm_crtc *crtc = m->private;
>>>>
>>>> struct drm_crtc_crc *crc = &crtc->crc;
>>>> char *source;
>>>>
>>>> + size_t values_cnt;
>>>> + int ret = 0;
>>>>
>>>> if (len == 0)
>>>>
>>>> return 0;
>>>>
>>>> @@ -104,6 +106,12 @@ static ssize_t crc_control_write(struct file *file,
>>>> const char __user *ubuf, if (source[len] == '\n')
>>>>
>>>> source[len] = '\0';
>>>>
>>>> + if (crtc->funcs->verify_crc_source) {
>>>> + ret = crtc->funcs->verify_crc_source(crtc, source, &values_cnt);
>>>> + if (ret)
>>>> + return ret;
>>>> + }
>>>> +
>>>>
>>>> spin_lock_irq(&crc->lock);
>>>>
>>>> if (crc->opened) {
>>>>
>>>> @@ -167,6 +175,13 @@ static int crtc_crc_open(struct inode *inode, struct
>>>> file *filep) return ret;
>>>>
>>>> }
>>>>
>>>> + if (crtc->funcs->verify_crc_source) {
>>>> + ret = crtc->funcs->verify_crc_source(crtc, crc->source,
>>>> + &values_cnt);
>>>> + if (ret)
>>>> + return ret;
>>>> + }
>>>> +
>>>>
>>>> spin_lock_irq(&crc->lock);
>>>> if (!crc->opened)
>>>>
>>>> crc->opened = true;
>>>>
>>>> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
>>>> index 23eddbccab10..1a6dcbf91744 100644
>>>> --- a/include/drm/drm_crtc.h
>>>> +++ b/include/drm/drm_crtc.h
>>>> @@ -661,6 +661,21 @@ struct drm_crtc_funcs {
>>>>
>>>> */
>>>>
>>>> int (*set_crc_source)(struct drm_crtc *crtc, const char *source,
>>>>
>>>> size_t *values_cnt);
>>>>
>>>> + /**
>>>> + * @verify_crc_source:
>>>> + *
>>>> + * verifies the source of CRC checksums of frames before setting the
>>>> + * source for CRC and during crc open.
>>>> + *
>>>> + * This callback is optional if the driver does not support any CRC
>>>> + * generation functionality.
>>>> + *
>>>> + * RETURNS:
>>>> + *
>>>> + * 0 on success or a negative error code on failure.
>>>> + */
>>>> + int (*verify_crc_source)(struct drm_crtc *crtc, const char *source,
>>>> + size_t *values_cnt);
>>>>
>>>> /**
>>>>
>>>> * @atomic_print_state:
>
More information about the dri-devel
mailing list