[Cbe-oss-dev] [PATCH 07/11 v3]MARS: Remove api argument params structs
Yuji Mano
yuji.mano at am.sony.com
Thu Sep 18 05:36:00 EST 2008
Yuji Mano wrote:
> Kazunori Asayama wrote:
>> Yuji Mano wrote:
>>> This removes the mars_params and mars_task_params structure previously passed
>>> into the mars context and mars task APIs.
>>>
>>> Parameter arguments are now passed in directly.
>>>
>>> Signed-off-by: Yuji Mano <yuji.mano at am.sony.com>
>>>
>>> ---
>>> v3:
>>> - revert v2 change and keep num_mpus_max() function but cache the result of
>>> spe_cpu_info_get (so we can use the cached spe count later if needed)
>>> v2:
>>> - replace num_mpus_max() with mpu_check() that avoids calling spe_cpu_info_get
>>> multiple times
>>>
>>> include/host/mars/mars_context.h | 23 +++---------------
>>> include/host/mars/mars_task.h | 32 +++++++------------------
>>> src/host/lib/mars_context.c | 49 +++++++++++++++++----------------------
>>> src/host/lib/mars_task.c | 34 +++++++++++----------------
>>> 4 files changed, 50 insertions(+), 88 deletions(-)
>> (snip)
>>> --- a/src/host/lib/mars_context.c
>>> +++ b/src/host/lib/mars_context.c
>>> @@ -48,9 +48,17 @@
>>>
>>> extern struct spe_program_handle mars_kernel_entry;
>>>
>>> -static int num_mpus_max(void)
>>> +static uint32_t num_mpus_max(void)
>>> {
>>> - return spe_cpu_info_get(SPE_COUNT_PHYSICAL_SPES, -1);
>>> + static int count = -1;
>>> +
>>> + if (count < 0) {
>>> + count = spe_cpu_info_get(SPE_COUNT_PHYSICAL_SPES, -1);
>>> + if (count < 0)
>>> + count = 0;
>>> + }
>>> +
>>> + return count;
>>> }
>>
>> This doesn't seem to be thread-safe?
>>
>
> Yes it is not thread-safe. This fix allows spe_cpu_info_get() to be called only once,
> even after we allow for shared contexts and mars_initialize() may be called multiple
> times.
>
> I can fix this so that spe_cpu_info_get() gets called once per each mars_initialize()
> call, but I think once we have the global shared context we still have the same
> problem?
Sorry. What I meant was I think we can deal with making mars_initialize() thread-safe
once we implement the shared contexts. Or we can protect mars_initialize with a pthread
mutex now.
Regards,
Yuji
More information about the cbe-oss-dev
mailing list