Diff for /qemu/target-i386/cpuid.c between versions 1.1.1.3 and 1.1.1.4

version 1.1.1.3, 2018/04/24 19:02:55 version 1.1.1.4, 2018/04/24 19:31:13
Line 224  typedef struct x86_def_t { Line 224  typedef struct x86_def_t {
     int family;      int family;
     int model;      int model;
     int stepping;      int stepping;
       int tsc_khz;
     uint32_t features, ext_features, ext2_features, ext3_features;      uint32_t features, ext_features, ext2_features, ext3_features;
     uint32_t kvm_features, svm_features;      uint32_t kvm_features, svm_features;
     uint32_t xlevel;      uint32_t xlevel;
Line 599  static int cpu_x86_find_by_name(x86_def_ Line 600  static int cpu_x86_find_by_name(x86_def_
     unsigned int i;      unsigned int i;
     x86_def_t *def;      x86_def_t *def;
   
     char *s = strdup(cpu_model);      char *s = g_strdup(cpu_model);
     char *featurestr, *name = strtok(s, ",");      char *featurestr, *name = strtok(s, ",");
     /* Features to be added*/      /* Features to be added*/
     uint32_t plus_features = 0, plus_ext_features = 0;      uint32_t plus_features = 0, plus_ext_features = 0;
Line 612  static int cpu_x86_find_by_name(x86_def_ Line 613  static int cpu_x86_find_by_name(x86_def_
     uint32_t numvalue;      uint32_t numvalue;
   
     for (def = x86_defs; def; def = def->next)      for (def = x86_defs; def; def = def->next)
         if (!strcmp(name, def->name))          if (name && !strcmp(name, def->name))
             break;              break;
     if (kvm_enabled() && strcmp(name, "host") == 0) {      if (kvm_enabled() && name && strcmp(name, "host") == 0) {
         cpu_x86_fill_host(x86_cpu_def);          cpu_x86_fill_host(x86_cpu_def);
     } else if (!def) {      } else if (!def) {
         goto error;          goto error;
Line 704  static int cpu_x86_find_by_name(x86_def_ Line 705  static int cpu_x86_find_by_name(x86_def_
             } else if (!strcmp(featurestr, "model_id")) {              } else if (!strcmp(featurestr, "model_id")) {
                 pstrcpy(x86_cpu_def->model_id, sizeof(x86_cpu_def->model_id),                  pstrcpy(x86_cpu_def->model_id, sizeof(x86_cpu_def->model_id),
                         val);                          val);
               } else if (!strcmp(featurestr, "tsc_freq")) {
                   int64_t tsc_freq;
                   char *err;
   
                   tsc_freq = strtosz_suffix_unit(val, &err,
                                                  STRTOSZ_DEFSUFFIX_B, 1000);
                   if (tsc_freq < 0 || *err) {
                       fprintf(stderr, "bad numerical value %s\n", val);
                       goto error;
                   }
                   x86_cpu_def->tsc_khz = tsc_freq / 1000;
             } else {              } else {
                 fprintf(stderr, "unrecognized feature %s\n", featurestr);                  fprintf(stderr, "unrecognized feature %s\n", featurestr);
                 goto error;                  goto error;
Line 734  static int cpu_x86_find_by_name(x86_def_ Line 746  static int cpu_x86_find_by_name(x86_def_
         if (check_features_against_host(x86_cpu_def) && enforce_cpuid)          if (check_features_against_host(x86_cpu_def) && enforce_cpuid)
             goto error;              goto error;
     }      }
     free(s);      g_free(s);
     return 0;      return 0;
   
 error:  error:
     free(s);      g_free(s);
     return -1;      return -1;
 }  }
   
Line 872  int cpu_x86_register (CPUX86State *env,  Line 884  int cpu_x86_register (CPUX86State *env, 
     env->cpuid_svm_features = def->svm_features;      env->cpuid_svm_features = def->svm_features;
     env->cpuid_ext4_features = def->ext4_features;      env->cpuid_ext4_features = def->ext4_features;
     env->cpuid_xlevel2 = def->xlevel2;      env->cpuid_xlevel2 = def->xlevel2;
       env->tsc_khz = def->tsc_khz;
     if (!kvm_enabled()) {      if (!kvm_enabled()) {
         env->cpuid_features &= TCG_FEATURES;          env->cpuid_features &= TCG_FEATURES;
         env->cpuid_ext_features &= TCG_EXT_FEATURES;          env->cpuid_ext_features &= TCG_EXT_FEATURES;
Line 956  static int cpudef_setfield(const char *n Line 969  static int cpudef_setfield(const char *n
     int err = 0;      int err = 0;
   
     if (!strcmp(name, "name")) {      if (!strcmp(name, "name")) {
         def->name = strdup(str);          g_free((void *)def->name);
           def->name = g_strdup(str);
     } else if (!strcmp(name, "model_id")) {      } else if (!strcmp(name, "model_id")) {
         strncpy(def->model_id, str, sizeof (def->model_id));          strncpy(def->model_id, str, sizeof (def->model_id));
     } else if (!strcmp(name, "level")) {      } else if (!strcmp(name, "level")) {
Line 996  static int cpudef_setfield(const char *n Line 1010  static int cpudef_setfield(const char *n
  */   */
 static int cpudef_register(QemuOpts *opts, void *opaque)  static int cpudef_register(QemuOpts *opts, void *opaque)
 {  {
     x86_def_t *def = qemu_mallocz(sizeof (x86_def_t));      x86_def_t *def = g_malloc0(sizeof (x86_def_t));
   
     qemu_opt_foreach(opts, cpudef_setfield, def, 1);      qemu_opt_foreach(opts, cpudef_setfield, def, 1);
     def->next = x86_defs;      def->next = x86_defs;

Removed from v.1.1.1.3  
changed lines
  Added in v.1.1.1.4


unix.superglobalmegacorp.com