@@ -383,34 +383,46 @@ void dp_thread_fn(void *p1, void *p2, void *p3)
383383 * Safe to call with partial successful initialisation,
384384 * k_mem_domain_remove_partition() then just returns -ENOENT
385385 */
386- void scheduler_dp_domain_free (struct processing_module * pmod )
386+ static void scheduler_dp_domain_free (struct task_dp_pdata * pdata )
387387{
388+ struct processing_module * pmod = pdata -> mod ;
388389 struct k_mem_domain * mdom = pmod -> mdom ;
389390
390391 llext_manager_rm_domain (pmod -> dev -> ipc_config .id , mdom );
391392
392- struct task_dp_pdata * pdata = pmod -> dev -> task -> priv_data ;
393-
394393 k_mem_domain_remove_partition (mdom , pdata -> mpart + SOF_DP_PART_HEAP );
395394 k_mem_domain_remove_partition (mdom , pdata -> mpart + SOF_DP_PART_CFG );
396395
397396 pmod -> mdom = NULL ;
398397 objpool_free (& dp_mdom_head , mdom );
399398}
400399
400+ /* memory allocation helper structure */
401+ struct scheduler_dp_task_memory {
402+ struct task task ;
403+ struct task_dp_pdata pdata ;
404+ struct comp_driver drv ;
405+ struct ipc4_flat flat ;
406+ };
407+
408+ void scheduler_dp_internal_free (struct task * task )
409+ {
410+ struct task_dp_pdata * pdata = task -> priv_data ;
411+
412+ k_object_free (pdata -> sem );
413+ k_object_free (pdata -> thread );
414+ scheduler_dp_domain_free (pdata );
415+
416+ mod_free (pdata -> mod , container_of (task , struct scheduler_dp_task_memory , task ));
417+ }
418+
401419/* Called only in IPC context */
402420int scheduler_dp_task_init (struct task * * task , const struct sof_uuid_entry * uid ,
403421 const struct task_ops * ops , struct processing_module * mod ,
404422 uint16_t core , size_t stack_size , uint32_t options )
405423{
406424 k_thread_stack_t * p_stack ;
407- /* memory allocation helper structure */
408- struct {
409- struct task task ;
410- struct task_dp_pdata pdata ;
411- struct comp_driver drv ;
412- struct ipc4_flat flat ;
413- } * task_memory ;
425+ struct scheduler_dp_task_memory * task_memory ;
414426
415427 int ret ;
416428
@@ -558,7 +570,7 @@ int scheduler_dp_task_init(struct task **task, const struct sof_uuid_entry *uid,
558570 return 0 ;
559571
560572e_dom :
561- scheduler_dp_domain_free (mod );
573+ scheduler_dp_domain_free (pdata );
562574e_thread :
563575 k_thread_abort (pdata -> thread_id );
564576e_kobj :
0 commit comments