[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