[PATCH 02/22] fb: atmel_lcdfb: Stop using platform_driver_probe()
Helge Deller
deller at gmx.de
Thu Nov 9 01:55:41 PST 2023
On 11/9/23 07:24, Uwe Kleine-König wrote:
> Hello,
>
> On Wed, Nov 08, 2023 at 10:57:00PM +0100, Helge Deller wrote:
>> On 11/8/23 22:52, Uwe Kleine-König wrote:
>>> But info and so info->fix live longer than the probe function, don't
>>> they?
>>
>> Yes, they do.
>> But AFAICS info->fix contains a *copy* of the initial atmel_lcdfb_fix struct
>> (and not a pointer to it). So that should be ok.
>
> If you say so that's good. I grepped a bit around and didn't find a
> place where a copy is made. But that's probably me and I'll consider the
> case closed.
It's not directly obvious, but the copy happens in the line you pointed
out previously.
In include/linux/fb.h:
struct fb_info {
...
struct fb_var_screeninfo var; /* Current var */
struct fb_fix_screeninfo fix; /* Current fix */
so, "fb_info.fix" is a struct, and not a pointer.
In drivers/video/fbdev/atmel_lcdfb.c:
static int atmel_lcdfb_probe(struct platform_device *pdev)
{
...
info->fix = atmel_lcdfb_fix; // (line 1065)
this becomes effectively a:
memcpy(&info->fix, &atmel_lcdfb_fix, sizeof(struct fb_fix_screeninfo));
so, the compiler copies the "__initconst" data over to the info->fix struct.
Helge
More information about the linux-arm-kernel
mailing list