Messages in this thread | | | From | Lucas Tanure <> | Date | Mon, 5 Aug 2019 14:43:53 +0100 | Subject | Question about mfd_add_devices and platform_data |
| |
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
| |