[PATCH] drm/fb-helper: Mark screen buffers in system memory with FB_VIRTFB

Thomas Zimmermann tzimmermann at suse.de
Thu Jan 27 15:18:56 UTC 2022


Hi

Am 27.01.22 um 16:03 schrieb Daniel Vetter:
> On Thu, Jan 27, 2022 at 12:58:30PM +0100, Thomas Zimmermann wrote:
>> Hi
>>
>> Am 27.01.22 um 12:42 schrieb Daniel Vetter:
>>> On Thu, Jan 27, 2022 at 11:26:21AM +0100, Thomas Zimmermann wrote:
>>>> Mark screen buffers in system memory with FB_VIRTFB. Otherwise, the
>>>> buffers are mmap'ed as I/O memory (i.e., VM_IO). For shadow buffers,
>>>> also set the FB_READS_FAST hint.
>>>
>>> Maybe clarify that this only holds for the defio case, and since we have
>>> our own shadow copy for that anyway it shouldn't matter. I'm also not sure
>>> how much the memcpy gains us compared to just redrawing ...
>>>
>>> What's the motivation here, or just something you spotted?
>>
>> Correctness mostly. fbdev's fbdefio tests for (the absence of) this flag and
>> sets VM_IO accordingly.
>>
>> It's actually for userspace. Maybe userspace tests these flags as well and
>> can optimize memcpy pattern for different types of caching. But I wouldn't
>> expect it TBH.
> 
> Hm I thought so too, but the #define is in the internal header, not the
> uapi header. And I don't see any ioctl code in fbmem.c that would shove
> fb_info->flags to userspace. That's why I wondered why you care about
> this? Or did I miss something somewhere?

You didn't.  I just grepped it myself and the only user of VIRTFB is the 
mmap code in fb_deferio.c, which (not) sets VM_IO. READS_FAST is unused. 
I'd then set the former, but not the latter. Ok?

Best regards
Thomas

> -Daniel
> 
>>
>> Best regards
>> Thomas
>>
>>> -Daniel
>>>
>>>>
>>>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>>>> ---
>>>>    drivers/gpu/drm/drm_fb_helper.c | 9 ++++++---
>>>>    1 file changed, 6 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
>>>> index ed43b987d306..f15127a32f7a 100644
>>>> --- a/drivers/gpu/drm/drm_fb_helper.c
>>>> +++ b/drivers/gpu/drm/drm_fb_helper.c
>>>> @@ -2346,6 +2346,7 @@ static int drm_fb_helper_generic_probe(struct drm_fb_helper *fb_helper,
>>>>    	fbi->fbops = &drm_fbdev_fb_ops;
>>>>    	fbi->screen_size = sizes->surface_height * fb->pitches[0];
>>>>    	fbi->fix.smem_len = fbi->screen_size;
>>>> +	fbi->flags = FBINFO_DEFAULT;
>>>>    	drm_fb_helper_fill_info(fbi, fb_helper, sizes);
>>>> @@ -2353,19 +2354,21 @@ static int drm_fb_helper_generic_probe(struct drm_fb_helper *fb_helper,
>>>>    		fbi->screen_buffer = vzalloc(fbi->screen_size);
>>>>    		if (!fbi->screen_buffer)
>>>>    			return -ENOMEM;
>>>> +		fbi->flags |= FBINFO_VIRTFB | FBINFO_READS_FAST;
>>>>    		fbi->fbdefio = &drm_fbdev_defio;
>>>> -
>>>>    		fb_deferred_io_init(fbi);
>>>>    	} else {
>>>>    		/* buffer is mapped for HW framebuffer */
>>>>    		ret = drm_client_buffer_vmap(fb_helper->buffer, &map);
>>>>    		if (ret)
>>>>    			return ret;
>>>> -		if (map.is_iomem)
>>>> +		if (map.is_iomem) {
>>>>    			fbi->screen_base = map.vaddr_iomem;
>>>> -		else
>>>> +		} else {
>>>>    			fbi->screen_buffer = map.vaddr;
>>>> +			fbi->flags |= FBINFO_VIRTFB;
>>>> +		}
>>>>    		/*
>>>>    		 * Shamelessly leak the physical address to user-space. As
>>>> -- 
>>>> 2.34.1
>>>>
>>>
>>
>> -- 
>> Thomas Zimmermann
>> Graphics Driver Developer
>> SUSE Software Solutions Germany GmbH
>> Maxfeldstr. 5, 90409 Nürnberg, Germany
>> (HRB 36809, AG Nürnberg)
>> Geschäftsführer: Ivo Totev
> 
> 
> 
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20220127/a5d347d0/attachment.sig>


More information about the dri-devel mailing list