docs: def _parse_caps_cpu(node):
      '''
      Parse the <cpu> element of the domain capabilities
      '''
      result = {}
      for mode in node.findall('mode'):
          if not mode.get('supported') == 'yes':
              continue
  
          name = mode.get('name')
          if name == 'host-passthrough':
              result[name] = True
  
          elif name == 'host-model':
              host_model = {}
              model_node = mode.find('model')
              if model_node is not None:
                  model = {
                      'name': model_node.text
                  }
  
                  vendor_id = model_node.get('vendor_id')
                  if vendor_id:
                      model['vendor_id'] = vendor_id
  
                  fallback = model_node.get('fallback')
                  if fallback:
                      model['fallback'] = fallback
                  host_model['model'] = model
  
              vendor = mode.find('vendor').text if mode.find('vendor') is not None else None
              if vendor:
                  host_model['vendor'] = vendor
  
              features = {feature.get('name'): feature.get('policy') for feature in mode.findall('feature')}
              if features:
                  host_model['features'] = features
  
              result[name] = host_model
  
          elif name == 'custom':
              custom_model = {}
              models = {model.text: model.get('usable') for model in mode.findall('model')}
              if models:
                  custom_model['models'] = models
              result[name] = custom_model
  
      return result