All of lore.kernel.org
 help / color / mirror / Atom feed
* Question about mfd_add_devices and platform_data
@ 2019-08-05 13:43 Lucas Tanure
  2019-08-06  8:02 ` Lucas Tanure
  0 siblings, 1 reply; 2+ messages in thread
From: Lucas Tanure @ 2019-08-05 13:43 UTC (permalink / raw)
  To: linux-kernel

Hi,

I would like to understand mfd_add_devices call and platform_data section.
An mfd device can have platform_data, which is kmemdup at
platform_device_add_data from platform_device_add_data call inside
mfd_add_device. And after this kmemdup the new mfd device receives the
clone memory and the pointer given to platform_device_add_data is freed.

All the drivers I read the platform_data is static, which in my view can
not be freed and kfrees says:

"Don't free memory not originally allocated by kmalloc() or you will run
into trouble."

So, my questions is : Should my driver kmalloc platform_data first and then
call mfd_add_devices ? Or it's fine to give static memory to it ?

Example driver:

drivers/mfd/vexpress-sysreg.c:

static struct syscon_platform_data vexpress_sysreg_sys_id_pdata = {
.label = "sys_id",
};

static struct mfd_cell vexpress_sysreg_cells[] = {
{
.name = "syscon",
.num_resources = 1,
.resources = (struct resource []) {
DEFINE_RES_MEM(SYS_ID, 0x4),
},
.platform_data = &vexpress_sysreg_sys_id_pdata,
.pdata_size = sizeof(vexpress_sysreg_sys_id_pdata),
},

For this case mfd_add_devices will free vexpress_sysreg_sys_id_pdata, but
it's static.

Thanks
Lucas

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Question about mfd_add_devices and platform_data
  2019-08-05 13:43 Question about mfd_add_devices and platform_data Lucas Tanure
@ 2019-08-06  8:02 ` Lucas Tanure
  0 siblings, 0 replies; 2+ messages in thread
From: Lucas Tanure @ 2019-08-06  8:02 UTC (permalink / raw)
  To: linux-kernel, Lee Jones

Hi Lee,

Can you help me with this question?

Thanks
Lucas

On Mon, Aug 5, 2019 at 2:43 PM Lucas Tanure <tanure@linux.com> wrote:
>
> Hi,
>
> I would like to understand mfd_add_devices call and platform_data section.
> An mfd device can have platform_data, which is kmemdup at
> platform_device_add_data from platform_device_add_data call inside
> mfd_add_device. And after this kmemdup the new mfd device receives the
> clone memory and the pointer given to platform_device_add_data is freed.
>
> All the drivers I read the platform_data is static, which in my view can
> not be freed and kfrees says:
>
> "Don't free memory not originally allocated by kmalloc() or you will run
> into trouble."
>
> So, my questions is : Should my driver kmalloc platform_data first and then
> call mfd_add_devices ? Or it's fine to give static memory to it ?
>
> Example driver:
>
> drivers/mfd/vexpress-sysreg.c:
>
> static struct syscon_platform_data vexpress_sysreg_sys_id_pdata = {
> .label = "sys_id",
> };
>
> static struct mfd_cell vexpress_sysreg_cells[] = {
> {
> .name = "syscon",
> .num_resources = 1,
> .resources = (struct resource []) {
> DEFINE_RES_MEM(SYS_ID, 0x4),
> },
> .platform_data = &vexpress_sysreg_sys_id_pdata,
> .pdata_size = sizeof(vexpress_sysreg_sys_id_pdata),
> },
>
> For this case mfd_add_devices will free vexpress_sysreg_sys_id_pdata, but
> it's static.
>
> Thanks
> Lucas

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-08-06  8:02 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-05 13:43 Question about mfd_add_devices and platform_data Lucas Tanure
2019-08-06  8:02 ` Lucas Tanure

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.