2016-12-01 2:13 GMT+01:00 Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>: > 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@xxxxxxxxxx> >> >> --- >> >> >> >> 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 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel