[RFC v3 1/3] fbmem: add default get_fb_unmapped_area function
Benjamin Gaignard
benjamin.gaignard at linaro.org
Thu Dec 1 07:24:50 UTC 2016
2016-12-01 2:13 GMT+01:00 Laurent Pinchart <laurent.pinchart at ideasonboard.com>:
> Hi Benjamin,
>
> On Wednesday 30 Nov 2016 20:46:23 Benjamin Gaignard wrote:
>> 2016-11-30 20:39 GMT+01:00 Laurent Pinchart:
>> > On Wednesday 30 Nov 2016 20:34:17 Benjamin Gaignard wrote:
>> >> If HAVE_ARCH_FB_UNMAPPED_AREA is set and get_fb_unmapped_area
>> >> function not defined in platform architecture let use a default function.
>> >>
>> >> Signed-off-by: Benjamin Gaignard <benjamin.gaignard at linaro.org>
>> >> ---
>> >>
>> >> drivers/video/fbdev/core/fbmem.c | 15 +++++++++++++++
>> >> 1 file changed, 15 insertions(+)
>> >>
>> >> diff --git a/drivers/video/fbdev/core/fbmem.c
>> >> b/drivers/video/fbdev/core/fbmem.c index 76c1ad9..54488ee 100644
>> >> --- a/drivers/video/fbdev/core/fbmem.c
>> >> +++ b/drivers/video/fbdev/core/fbmem.c
>> >> @@ -1492,6 +1492,21 @@ static long fb_compat_ioctl(struct file *file,
>> >> unsigned int cmd,
>> >> return 0;
>> >> }
>> >>
>> >> +#if defined(HAVE_ARCH_FB_UNMAPPED_AREA) &&
>> >> !defined(get_fb_unmapped_area)
>> >
>> > I think I've asked this twice already, how is that possible ?
>>
>> As you said before only sparc and blackfin architectures have define
>> HAVE_ARCH_FB_UNMAPPED_AREA and get_fb_unmapped_area().
>> For stm32f4 (ARMv7m) I plan to only add HAVE_ARCH_FB_UNMAPPED_AREA and
>> use this default function
>
> Ah, so it's for support of a future patch. You should explain that in the
> commit message.
OK
> The other question I asked was whether it would be possible to come up with a
> generic implementation of this function that would work on all architectures.
> At first sight the blackfin implementation is similar, but the sparc one is
> quite different. Why does it have to be arch-specific ?
I don't know but I guess it is link to how memory is mmapped by the
architecture
>> By testing those two flags I avoid to define twince
>> get_fb_unmapped_area() if the architecture already
>> provide it.
>>
>> >> +unsigned long get_fb_unmapped_area(struct file *filp,
>> >> + unsigned long addr, unsigned long len,
>> >> + unsigned long pgoff, unsigned long
>> >> flags)
>> >> +{
>> >> + struct fb_info * const info = filp->private_data;
>> >> + unsigned long fb_size = PAGE_ALIGN(info->fix.smem_len);
>> >> +
>> >> + if (pgoff > fb_size || len > fb_size - pgoff)
>> >> + return -EINVAL;
>> >> +
>> >> + return (unsigned long)info->screen_base + pgoff;
>> >> +}
>> >> +#endif
>> >> +
>> >> static const struct file_operations fb_fops = {
>> >> .owner = THIS_MODULE,
>> >> .read = fb_read,
>
> --
> Regards,
>
> Laurent Pinchart
>
--
Benjamin Gaignard
Graphic Study Group
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
More information about the dri-devel
mailing list