Conversation
Checking number of memory domain partitions in thread's domain to determine whether it's a userspace thread isn't reliable and is a layering violation. Instead check the K_USER flag which indicates exactly that. Also add a missing check when adding a partition for the newly allocated entry. Suggested-by: Adrian Warecki <adrian.warecki@intel.com> Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Use the same heap to free the buffer as the one, used to allocate it. Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
The mdom member of struct sof_fast_get_entry is redundant, remove it. Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
| k_spinlock_key_t key; | ||
| void *ret; | ||
|
|
||
| key = k_spin_lock(&data->lock); |
There was a problem hiding this comment.
Would it make sense to switch this from a spinlock to a mutex? Right now the spinlock covers a relatively large scope, including array iteration and memory allocation.
softwarecki
left a comment
There was a problem hiding this comment.
Memory domain retrieval for the proxy variant needs fixing. The proxy already stores a pointer to the memory domain in its context structure. The struct k_mem_domain *mdom; in the struct processing_module structure is only needed for APPLICATION variant.
| } while (!entry); | ||
|
|
||
| #if CONFIG_USERSPACE | ||
| LOG_DBG("userspace %u part %#zx bytes alloc %p entry %p DRAM %p", |
There was a problem hiding this comment.
Please also modify DBG log num_partitions -> current_is_userspace
|
Looks like these aren't just "minor fixes". This condition is crucial: Without it I observe partition leaked because the corresponding fast_put is called with mdom=NULL. @lyakh could you please resume work on this? I already spoke to @softwarecki. He agreed to resolve potential conflicts in his LLEXT changes. |
fix a wrong heap pointer and follow-up on recent changes to remove superfluous code