]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
cpu: Fix vendor for recent CPU models
authorJiri Denemark <jdenemar@redhat.com>
Wed, 13 Oct 2010 09:42:19 +0000 (11:42 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Thu, 14 Oct 2010 07:36:54 +0000 (09:36 +0200)
Recent CPU models were specified using invalid vendor element
<vendor>NAME</vendor>, which was silently ignored due to a bug in the
code which was parsing it.

src/cpu/cpu_map.xml
src/cpu/cpu_x86.c

index edbb21c1932d51902a437d5031e389ec96ed6404..75c65225cb557e78603882810655d166f9724843 100644 (file)
     </model>
 
     <model name='Conroe'>
-      <vendor>Intel</vendor>
+      <vendor name='Intel'/>
       <feature name='sse2'/>
       <feature name='sse'/>
       <feature name='fxsr'/>
     </model>
 
     <model name='Penryn'>
-      <vendor>Intel</vendor>
+      <vendor name='Intel'/>
       <feature name='sse2'/>
       <feature name='sse'/>
       <feature name='fxsr'/>
     </model>
 
     <model name='Nehalem'>
-      <vendor>Intel</vendor>
+      <vendor name='Intel'/>
       <feature name='sse2'/>
       <feature name='sse'/>
       <feature name='fxsr'/>
     </model>
 
     <model name='Opteron_G1'>
-      <vendor>AMD</vendor>
+      <vendor name='AMD'/>
       <feature name='sse2'/>
       <feature name='sse'/>
       <feature name='fxsr'/>
     </model>
 
     <model name='Opteron_G2'>
-      <vendor>AMD</vendor>
+      <vendor name='AMD'/>
       <feature name='sse2'/>
       <feature name='sse'/>
       <feature name='fxsr'/>
     </model>
 
     <model name='Opteron_G3'>
-      <vendor>AMD</vendor>
+      <vendor name='AMD'/>
       <feature name='sse2'/>
       <feature name='sse'/>
       <feature name='fxsr'/>
index 813b49901a24c0623feb91e8ee0d859af36a37ef..a329b1cf3b949096bdf723b6c3939ebbf311e4ae 100644 (file)
@@ -1015,8 +1015,15 @@ x86ModelLoad(xmlXPathContextPtr ctxt,
                sizeof(*model->cpuid) * model->ncpuid);
     }
 
-    vendor = virXPathString("string(./vendor/@name)", ctxt);
-    if (vendor) {
+    if (virXPathBoolean("boolean(./vendor)", ctxt)) {
+        vendor = virXPathString("string(./vendor/@name)", ctxt);
+        if (!vendor) {
+            virCPUReportError(VIR_ERR_INTERNAL_ERROR,
+                    _("Invalid vendor element in CPU model %s"),
+                    model->name);
+            goto ignore;
+        }
+
         if (!(model->vendor = x86VendorFind(map, vendor))) {
             virCPUReportError(VIR_ERR_INTERNAL_ERROR,
                     _("Unknown vendor %s referenced by CPU model %s"),