@@ -52,6 +52,13 @@ uint64_t odp_sys_page_size(void);
const char *odp_sys_cpu_model_str(void);
/**
+ * CPU model name for AMP system
+ *
+ * @return Pointer to CPU model name string
+ */
+const char *odp_sys_cpu_model_str_amp(int cpu);
+
+/**
* Cache line size in bytes
*
* @return CPU cache line size in bytes
@@ -22,13 +22,15 @@ extern "C" {
extern __thread int __odp_errno;
+#define MAX_CPU_NUMBER 128
+
typedef struct {
uint64_t cpu_hz;
uint64_t huge_page_size;
uint64_t page_size;
int cache_line_size;
int cpu_count;
- char model_str[128];
+ char model_str[MAX_CPU_NUMBER][128];
} odp_system_info_t;
struct odp_global_data_s {
@@ -36,7 +36,6 @@ typedef struct {
#define HUGE_PAGE_DIR "/sys/kernel/mm/hugepages"
-
/*
* Report the number of CPUs in the affinity mask of the main thread
*/
@@ -139,10 +138,10 @@ static int cpuinfo_x86(FILE *file, odp_system_info_t *sysinfo)
if (pos) {
int len;
pos = strchr(str, ':');
- strncpy(sysinfo->model_str, pos+2,
- sizeof(sysinfo->model_str));
- len = strlen(sysinfo->model_str);
- sysinfo->model_str[len - 1] = 0;
+ strncpy(sysinfo->model_str[0], pos + 2,
+ sizeof(sysinfo->model_str[0]));
+ len = strlen(sysinfo->model_str[0]);
+ sysinfo->model_str[0][len - 1] = 0;
model = 1;
count--;
}
@@ -188,10 +187,10 @@ static int cpuinfo_octeon(FILE *file, odp_system_info_t *sysinfo)
if (pos) {
int len;
pos = strchr(str, ':');
- strncpy(sysinfo->model_str, pos+2,
- sizeof(sysinfo->model_str));
- len = strlen(sysinfo->model_str);
- sysinfo->model_str[len - 1] = 0;
+ strncpy(sysinfo->model_str[0], pos + 2,
+ sizeof(sysinfo->model_str[0]));
+ len = strlen(sysinfo->model_str[0]);
+ sysinfo->model_str[0][len - 1] = 0;
model = 1;
count--;
}
@@ -228,10 +227,10 @@ static int cpuinfo_powerpc(FILE *file, odp_system_info_t *sysinfo)
if (pos) {
int len;
pos = strchr(str, ':');
- strncpy(sysinfo->model_str, pos+2,
- sizeof(sysinfo->model_str));
- len = strlen(sysinfo->model_str);
- sysinfo->model_str[len - 1] = 0;
+ strncpy(sysinfo->model_str[0], pos + 2,
+ sizeof(sysinfo->model_str[0]));
+ len = strlen(sysinfo->model_str[0]);
+ sysinfo->model_str[0][len - 1] = 0;
model = 1;
count--;
}
@@ -333,7 +332,7 @@ static int systemcpu(odp_system_info_t *sysinfo)
sysinfo->cpu_hz = 1400000000;
sysinfo->cache_line_size = 64;
- strncpy(sysinfo->model_str, "UNKNOWN", sizeof(sysinfo->model_str));
+ strncpy(sysinfo->model_str[0], "UNKNOWN", sizeof(sysinfo->model_str));
return 0;
}
@@ -391,7 +390,15 @@ uint64_t odp_sys_page_size(void)
const char *odp_sys_cpu_model_str(void)
{
- return odp_global_data.system_info.model_str;
+ return odp_sys_cpu_model_str_amp(0);
+}
+
+const char *odp_sys_cpu_model_str_amp(int cpu)
+{
+ if (cpu >= 0 && cpu < MAX_CPU_NUMBER)
+ return odp_global_data.system_info.model_str[cpu];
+ else
+ return NULL;
}
int odp_sys_cache_line_size(void)