All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Noralf Trønnes" <noralf@tronnes.org>
To: Thomas Zimmermann <tzimmermann@suse.de>,
	daniel@ffwll.ch, airlied@linux.ie, mripard@kernel.org,
	maarten.lankhorst@linux.intel.com, drawat.floss@gmail.com,
	airlied@redhat.com, kraxel@redhat.com, david@lechnology.com,
	sam@ravnborg.org, javierm@redhat.com, kernel@amanoeldawod.com,
	dirty.ice.hu@gmail.com, michael+lkml@stapelberg.ch, aros@gmx.com,
	joshua@stroblindustries.com, arnd@arndb.de
Cc: linux-hyperv@vger.kernel.org, dri-devel@lists.freedesktop.org,
	virtualization@lists.linux-foundation.org
Subject: Re: [PATCH v2 7/9] drm/simpledrm: Enable FB_DAMAGE_CLIPS property
Date: Tue, 9 Nov 2021 16:52:29 +0100	[thread overview]
Message-ID: <6caaace4-27e5-2ac9-9c84-40d7b8ffcb1e@tronnes.org> (raw)
In-Reply-To: <bb71f9a7-9fd0-ac91-749d-b9241290c45d@suse.de>



Den 09.11.2021 15.56, skrev Thomas Zimmermann:
> Hi,
> 
> thanks for looking through all this code.
> 
> Am 09.11.21 um 14:04 schrieb Noralf Trønnes:
>>
>>
>> Den 09.11.2021 13.38, skrev Thomas Zimmermann:
>>>
>>>
>>> Am 08.11.21 um 21:55 schrieb Noralf Trønnes:
>>>>
>>>>
>>>> Den 01.11.2021 15.15, skrev Thomas Zimmermann:
>>>>> Enable the FB_DAMAGE_CLIPS property to reduce display-update
>>>>> overhead. Also fixes a warning in the kernel log.
>>>>>
>>>>>     simple-framebuffer simple-framebuffer.0: [drm]
>>>>> drm_plane_enable_fb_damage_clips() not called
>>>>>
>>>>> Fix the computation of the blit rectangle. This wasn't an issue so
>>>>> far, as simpledrm always blitted the full framebuffer. The code now
>>>>> supports damage clipping and virtual screen sizes.
>>>>>
>>>>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>>>>> ---
>>>>>    drivers/gpu/drm/tiny/simpledrm.c | 30
>>>>> ++++++++++++++++++++++--------
>>>>>    1 file changed, 22 insertions(+), 8 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/tiny/simpledrm.c
>>>>> b/drivers/gpu/drm/tiny/simpledrm.c
>>>>> index 571f716ff427..e872121e9fb0 100644
>>>>> --- a/drivers/gpu/drm/tiny/simpledrm.c
>>>>> +++ b/drivers/gpu/drm/tiny/simpledrm.c
>>>>> @@ -642,7 +642,7 @@ simpledrm_simple_display_pipe_enable(struct
>>>>> drm_simple_display_pipe *pipe,
>>>>>        void *vmap = shadow_plane_state->data[0].vaddr; /* TODO: Use
>>>>> mapping abstraction */
>>>>>        struct drm_device *dev = &sdev->dev;
>>>>>        void __iomem *dst = sdev->screen_base;
>>>>> -    struct drm_rect clip;
>>>>> +    struct drm_rect src_clip, dst_clip;
>>>>>        int idx;
>>>>>          if (!fb)
>>>>> @@ -651,10 +651,14 @@ simpledrm_simple_display_pipe_enable(struct
>>>>> drm_simple_display_pipe *pipe,
>>>>>        if (!drm_dev_enter(dev, &idx))
>>>>>            return;
>>>>>    -    drm_rect_init(&clip, 0, 0, fb->width, fb->height);
>>>>> +    drm_rect_fp_to_int(&src_clip, &plane_state->src);
>>>>>    -    dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &clip);
>>>>> -    drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap,
>>>>> fb, &clip);
>>>>> +    dst_clip = plane_state->dst;
>>>>
>>>> I assume that src_clip and dst_clip are of the same size, since scaling
>>>> is not supported. What prevents dst_clip from being bigger than the
>>>> buffer that's being blitted into? Where is that bounds checking done?
>>>
>>> The value of dst_clip comes from plane_state->dst, which gets
>>> initialized in drm_atomic_helper_check_plane_state(). [1] The fields are
>>> taken from the crtc_{x,y,w,h} values by drm_plane_get_dest(). [2] For
>>> primary planes, the crtc_{x,y,w,h} values are initialized in
>>> __drm_atomic_helper_set_config() to the size of the display. [3] That
>>> size comes directly from the current video mode. [4] From all I can see
>>> this cannot overflow.
>>>
>>
>> Ok, that takes care of the upper bound.
>>
>> There's this in drm_atomic_helper_check_plane_state():
>>
>>     plane_state->visible = drm_rect_clip_scaled(src, dst, &clip);
>>
>>     if (!plane_state->visible)
>>         /*
>>          * Plane isn't visible; some drivers can handle this
>>          * so we just return success here.  Drivers that can't
>>          * (including those that use the primary plane helper's
>>          * update function) will return an error from their
>>          * update_plane handler.
>>          */
>>         return 0;
>>
>> drm_atomic_helper_damage_merged() checks ->visible and returns false if
>> it is not set so update() is good on the lower bound.
>>
>> Maybe it's necessary to check ->visible here in enable() before doing
>> the blit?
> 
> Is it even possible to create an invisible primary plane here? We cannot
> scale [1] and if the primary plane is smaller than the framebuffer, we
> hit the case at [2]. The only way I can see this is that the visibility
> test at [3] succeeds. That would require a framebuffer of size 0. That's
> impossible from the code in frambuffer_check(). [4] Unless there's some
> corner case, we're good here.

Ok, thanks.

Noralf.

> 
> However, I think that drm_atomic_check_plane_state() could later be
> improved to handle the 'visible' field in a more sophisticated way.
> 
> Best regards
> Thomas
> 
> [1]
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_simple_kms_helper.c#L227
> 
> [2]
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_atomic_helper.c#L854
> 
> [3]
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_atomic_helper.c#L844
> 
> [4]
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_framebuffer.c#L185
> 
> 
>>
>> Noralf.
>>
>>> Best regards
>>> Thomas
>>>
>>> [1]
>>> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_atomic_helper.c#L807
>>>
>>>
>>> [2]
>>> https://elixir.bootlin.com/linux/latest/source/include/drm/drm_plane.h#L257
>>>
>>> [3]
>>> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_atomic.c#L1590
>>>
>>>
>>> [4]
>>> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_modes.c#L788
>>>
>>>
>>>
>>>>
>>>> Noralf.
>>>>
>>>>> +    if (!drm_rect_intersect(&dst_clip, &src_clip))
>>>>> +        return;
>>>>> +
>>>>> +    dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &dst_clip);
>>>>> +    drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap,
>>>>> fb, &src_clip);
>>>>>          drm_dev_exit(idx);
>>>>>    }
>>>>> @@ -686,20 +690,28 @@ simpledrm_simple_display_pipe_update(struct
>>>>> drm_simple_display_pipe *pipe,
>>>>>        struct drm_framebuffer *fb = plane_state->fb;
>>>>>        struct drm_device *dev = &sdev->dev;
>>>>>        void __iomem *dst = sdev->screen_base;
>>>>> -    struct drm_rect clip;
>>>>> +    struct drm_rect damage_clip, src_clip, dst_clip;
>>>>>        int idx;
>>>>>          if (!fb)
>>>>>            return;
>>>>>    -    if (!drm_atomic_helper_damage_merged(old_plane_state,
>>>>> plane_state, &clip))
>>>>> +    if (!drm_atomic_helper_damage_merged(old_plane_state,
>>>>> plane_state, &damage_clip))
>>>>> +        return;
>>>>> +
>>>>> +    drm_rect_fp_to_int(&src_clip, &plane_state->src);
>>>>> +    if (!drm_rect_intersect(&src_clip, &damage_clip))
>>>>> +        return;
>>>>> +
>>>>> +    dst_clip = plane_state->dst;
>>>>> +    if (!drm_rect_intersect(&dst_clip, &src_clip))
>>>>>            return;
>>>>>          if (!drm_dev_enter(dev, &idx))
>>>>>            return;
>>>>>    -    dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &clip);
>>>>> -    drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap,
>>>>> fb, &clip);
>>>>> +    dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &dst_clip);
>>>>> +    drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap,
>>>>> fb, &src_clip);
>>>>>          drm_dev_exit(idx);
>>>>>    }
>>>>> @@ -794,6 +806,8 @@ static int simpledrm_device_init_modeset(struct
>>>>> simpledrm_device *sdev)
>>>>>        if (ret)
>>>>>            return ret;
>>>>>    +    drm_plane_enable_fb_damage_clips(&pipe->plane);
>>>>> +
>>>>>        drm_mode_config_reset(dev);
>>>>>          return 0;
>>>>>
>>>
> 

WARNING: multiple messages have this Message-ID (diff)
From: "Noralf Trønnes" <noralf@tronnes.org>
To: Thomas Zimmermann <tzimmermann@suse.de>,
	daniel@ffwll.ch, airlied@linux.ie, mripard@kernel.org,
	maarten.lankhorst@linux.intel.com, drawat.floss@gmail.com,
	airlied@redhat.com, kraxel@redhat.com, david@lechnology.com,
	sam@ravnborg.org, javierm@redhat.com, kernel@amanoeldawod.com,
	dirty.ice.hu@gmail.com, michael+lkml@stapelberg.ch, aros@gmx.com,
	joshua@stroblindustries.com, arnd@arndb.de
Cc: linux-hyperv@vger.kernel.org, dri-devel@lists.freedesktop.org,
	virtualization@lists.linux-foundation.org
Subject: Re: [PATCH v2 7/9] drm/simpledrm: Enable FB_DAMAGE_CLIPS property
Date: Tue, 9 Nov 2021 16:52:29 +0100	[thread overview]
Message-ID: <6caaace4-27e5-2ac9-9c84-40d7b8ffcb1e@tronnes.org> (raw)
In-Reply-To: <bb71f9a7-9fd0-ac91-749d-b9241290c45d@suse.de>



Den 09.11.2021 15.56, skrev Thomas Zimmermann:
> Hi,
> 
> thanks for looking through all this code.
> 
> Am 09.11.21 um 14:04 schrieb Noralf Trønnes:
>>
>>
>> Den 09.11.2021 13.38, skrev Thomas Zimmermann:
>>>
>>>
>>> Am 08.11.21 um 21:55 schrieb Noralf Trønnes:
>>>>
>>>>
>>>> Den 01.11.2021 15.15, skrev Thomas Zimmermann:
>>>>> Enable the FB_DAMAGE_CLIPS property to reduce display-update
>>>>> overhead. Also fixes a warning in the kernel log.
>>>>>
>>>>>     simple-framebuffer simple-framebuffer.0: [drm]
>>>>> drm_plane_enable_fb_damage_clips() not called
>>>>>
>>>>> Fix the computation of the blit rectangle. This wasn't an issue so
>>>>> far, as simpledrm always blitted the full framebuffer. The code now
>>>>> supports damage clipping and virtual screen sizes.
>>>>>
>>>>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>>>>> ---
>>>>>    drivers/gpu/drm/tiny/simpledrm.c | 30
>>>>> ++++++++++++++++++++++--------
>>>>>    1 file changed, 22 insertions(+), 8 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/tiny/simpledrm.c
>>>>> b/drivers/gpu/drm/tiny/simpledrm.c
>>>>> index 571f716ff427..e872121e9fb0 100644
>>>>> --- a/drivers/gpu/drm/tiny/simpledrm.c
>>>>> +++ b/drivers/gpu/drm/tiny/simpledrm.c
>>>>> @@ -642,7 +642,7 @@ simpledrm_simple_display_pipe_enable(struct
>>>>> drm_simple_display_pipe *pipe,
>>>>>        void *vmap = shadow_plane_state->data[0].vaddr; /* TODO: Use
>>>>> mapping abstraction */
>>>>>        struct drm_device *dev = &sdev->dev;
>>>>>        void __iomem *dst = sdev->screen_base;
>>>>> -    struct drm_rect clip;
>>>>> +    struct drm_rect src_clip, dst_clip;
>>>>>        int idx;
>>>>>          if (!fb)
>>>>> @@ -651,10 +651,14 @@ simpledrm_simple_display_pipe_enable(struct
>>>>> drm_simple_display_pipe *pipe,
>>>>>        if (!drm_dev_enter(dev, &idx))
>>>>>            return;
>>>>>    -    drm_rect_init(&clip, 0, 0, fb->width, fb->height);
>>>>> +    drm_rect_fp_to_int(&src_clip, &plane_state->src);
>>>>>    -    dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &clip);
>>>>> -    drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap,
>>>>> fb, &clip);
>>>>> +    dst_clip = plane_state->dst;
>>>>
>>>> I assume that src_clip and dst_clip are of the same size, since scaling
>>>> is not supported. What prevents dst_clip from being bigger than the
>>>> buffer that's being blitted into? Where is that bounds checking done?
>>>
>>> The value of dst_clip comes from plane_state->dst, which gets
>>> initialized in drm_atomic_helper_check_plane_state(). [1] The fields are
>>> taken from the crtc_{x,y,w,h} values by drm_plane_get_dest(). [2] For
>>> primary planes, the crtc_{x,y,w,h} values are initialized in
>>> __drm_atomic_helper_set_config() to the size of the display. [3] That
>>> size comes directly from the current video mode. [4] From all I can see
>>> this cannot overflow.
>>>
>>
>> Ok, that takes care of the upper bound.
>>
>> There's this in drm_atomic_helper_check_plane_state():
>>
>>     plane_state->visible = drm_rect_clip_scaled(src, dst, &clip);
>>
>>     if (!plane_state->visible)
>>         /*
>>          * Plane isn't visible; some drivers can handle this
>>          * so we just return success here.  Drivers that can't
>>          * (including those that use the primary plane helper's
>>          * update function) will return an error from their
>>          * update_plane handler.
>>          */
>>         return 0;
>>
>> drm_atomic_helper_damage_merged() checks ->visible and returns false if
>> it is not set so update() is good on the lower bound.
>>
>> Maybe it's necessary to check ->visible here in enable() before doing
>> the blit?
> 
> Is it even possible to create an invisible primary plane here? We cannot
> scale [1] and if the primary plane is smaller than the framebuffer, we
> hit the case at [2]. The only way I can see this is that the visibility
> test at [3] succeeds. That would require a framebuffer of size 0. That's
> impossible from the code in frambuffer_check(). [4] Unless there's some
> corner case, we're good here.

Ok, thanks.

Noralf.

> 
> However, I think that drm_atomic_check_plane_state() could later be
> improved to handle the 'visible' field in a more sophisticated way.
> 
> Best regards
> Thomas
> 
> [1]
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_simple_kms_helper.c#L227
> 
> [2]
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_atomic_helper.c#L854
> 
> [3]
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_atomic_helper.c#L844
> 
> [4]
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_framebuffer.c#L185
> 
> 
>>
>> Noralf.
>>
>>> Best regards
>>> Thomas
>>>
>>> [1]
>>> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_atomic_helper.c#L807
>>>
>>>
>>> [2]
>>> https://elixir.bootlin.com/linux/latest/source/include/drm/drm_plane.h#L257
>>>
>>> [3]
>>> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_atomic.c#L1590
>>>
>>>
>>> [4]
>>> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_modes.c#L788
>>>
>>>
>>>
>>>>
>>>> Noralf.
>>>>
>>>>> +    if (!drm_rect_intersect(&dst_clip, &src_clip))
>>>>> +        return;
>>>>> +
>>>>> +    dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &dst_clip);
>>>>> +    drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap,
>>>>> fb, &src_clip);
>>>>>          drm_dev_exit(idx);
>>>>>    }
>>>>> @@ -686,20 +690,28 @@ simpledrm_simple_display_pipe_update(struct
>>>>> drm_simple_display_pipe *pipe,
>>>>>        struct drm_framebuffer *fb = plane_state->fb;
>>>>>        struct drm_device *dev = &sdev->dev;
>>>>>        void __iomem *dst = sdev->screen_base;
>>>>> -    struct drm_rect clip;
>>>>> +    struct drm_rect damage_clip, src_clip, dst_clip;
>>>>>        int idx;
>>>>>          if (!fb)
>>>>>            return;
>>>>>    -    if (!drm_atomic_helper_damage_merged(old_plane_state,
>>>>> plane_state, &clip))
>>>>> +    if (!drm_atomic_helper_damage_merged(old_plane_state,
>>>>> plane_state, &damage_clip))
>>>>> +        return;
>>>>> +
>>>>> +    drm_rect_fp_to_int(&src_clip, &plane_state->src);
>>>>> +    if (!drm_rect_intersect(&src_clip, &damage_clip))
>>>>> +        return;
>>>>> +
>>>>> +    dst_clip = plane_state->dst;
>>>>> +    if (!drm_rect_intersect(&dst_clip, &src_clip))
>>>>>            return;
>>>>>          if (!drm_dev_enter(dev, &idx))
>>>>>            return;
>>>>>    -    dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &clip);
>>>>> -    drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap,
>>>>> fb, &clip);
>>>>> +    dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &dst_clip);
>>>>> +    drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap,
>>>>> fb, &src_clip);
>>>>>          drm_dev_exit(idx);
>>>>>    }
>>>>> @@ -794,6 +806,8 @@ static int simpledrm_device_init_modeset(struct
>>>>> simpledrm_device *sdev)
>>>>>        if (ret)
>>>>>            return ret;
>>>>>    +    drm_plane_enable_fb_damage_clips(&pipe->plane);
>>>>> +
>>>>>        drm_mode_config_reset(dev);
>>>>>          return 0;
>>>>>
>>>
> 
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

  reply	other threads:[~2021-11-09 15:52 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-01 14:15 [PATCH v2 0/9] drm/simpledrm: Enable damage clips and virtual screens Thomas Zimmermann
2021-11-01 14:15 ` Thomas Zimmermann
2021-11-01 14:15 ` Thomas Zimmermann
2021-11-01 14:15 ` [PATCH v2 1/9] drm/format-helper: Export drm_fb_clip_offset() Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-05 20:48   ` Noralf Trønnes
2021-11-05 20:48     ` Noralf Trønnes
2021-11-05 20:48     ` Noralf Trønnes
2021-11-08  8:50     ` Thomas Zimmermann
2021-11-08  8:50       ` Thomas Zimmermann
2021-11-01 14:15 ` [PATCH v2 2/9] drm/format-helper: Rework format-helper memcpy functions Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15 ` [PATCH v2 3/9] drm/format-helper: Add destination-buffer pitch to drm_fb_swab() Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-08 18:57   ` Amanoel Dawod
2021-11-08 18:57     ` Amanoel Dawod
2021-11-10  9:17     ` Thomas Zimmermann
2021-11-10  9:17       ` Thomas Zimmermann
2021-11-10  9:17       ` Thomas Zimmermann
2021-11-01 14:15 ` [PATCH v2 4/9] drm/format-helper: Rework format-helper conversion functions Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15 ` [PATCH v2 5/9] drm/format-helper: Streamline blit-helper interface Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15 ` [PATCH v2 6/9] drm/fb-helper: Allocate shadow buffer of surface height Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15 ` [PATCH v2 7/9] drm/simpledrm: Enable FB_DAMAGE_CLIPS property Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-08 18:57   ` Noralf Trønnes
2021-11-08 18:57     ` Noralf Trønnes
2021-11-08 18:57     ` Noralf Trønnes
2021-11-09  9:43     ` Thomas Zimmermann
2021-11-09  9:43       ` Thomas Zimmermann
2021-11-09  9:43       ` Thomas Zimmermann
2021-11-08 20:55   ` Noralf Trønnes
2021-11-08 20:55     ` Noralf Trønnes
2021-11-08 20:55     ` Noralf Trønnes
2021-11-09 12:38     ` Thomas Zimmermann
2021-11-09 12:38       ` Thomas Zimmermann
2021-11-09 12:38       ` Thomas Zimmermann
2021-11-09 13:04       ` Noralf Trønnes
2021-11-09 13:04         ` Noralf Trønnes
2021-11-09 13:04         ` Noralf Trønnes
2021-11-09 14:56         ` Thomas Zimmermann
2021-11-09 14:56           ` Thomas Zimmermann
2021-11-09 15:52           ` Noralf Trønnes [this message]
2021-11-09 15:52             ` Noralf Trønnes
2021-11-01 14:15 ` [PATCH v2 8/9] drm/simpledrm: Support virtual screen sizes Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-08 21:01   ` Noralf Trønnes
2021-11-08 21:01     ` Noralf Trønnes
2021-11-08 21:01     ` Noralf Trønnes
2021-11-09  9:06     ` Thomas Zimmermann
2021-11-09  9:06       ` Thomas Zimmermann
2021-11-09 13:05       ` Noralf Trønnes
2021-11-09 13:05         ` Noralf Trønnes
2021-11-01 14:15 ` [PATCH v2 9/9] drm: Clarify semantics of struct drm_mode_config.{min,max}_{width,height} Thomas Zimmermann
2021-11-01 14:15   ` [PATCH v2 9/9] drm: Clarify semantics of struct drm_mode_config.{min, max}_{width, height} Thomas Zimmermann
2021-11-01 14:15   ` Thomas Zimmermann
2021-11-08 21:02   ` [PATCH v2 9/9] drm: Clarify semantics of struct drm_mode_config.{min,max}_{width,height} Noralf Trønnes
2021-11-08 21:02     ` Noralf Trønnes
2021-11-08 21:02     ` Noralf Trønnes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6caaace4-27e5-2ac9-9c84-40d7b8ffcb1e@tronnes.org \
    --to=noralf@tronnes.org \
    --cc=airlied@linux.ie \
    --cc=airlied@redhat.com \
    --cc=arnd@arndb.de \
    --cc=aros@gmx.com \
    --cc=daniel@ffwll.ch \
    --cc=david@lechnology.com \
    --cc=dirty.ice.hu@gmail.com \
    --cc=drawat.floss@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=javierm@redhat.com \
    --cc=joshua@stroblindustries.com \
    --cc=kernel@amanoeldawod.com \
    --cc=kraxel@redhat.com \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=michael+lkml@stapelberg.ch \
    --cc=mripard@kernel.org \
    --cc=sam@ravnborg.org \
    --cc=tzimmermann@suse.de \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.