static bool virDomainNumaNodesEqual(virDomainNumaPtr n1, virDomainNumaPtr n2) { size_t i = 0; if (n1->nmem_nodes != n2->nmem_nodes) return false; for (i = 0; i < n1->nmem_nodes; i++) { virDomainNumaNodePtr nd1 = &n1->mem_nodes[i]; virDomainNumaNodePtr nd2 = &n2->mem_nodes[i]; if (!nd1->nodeset && !nd2->nodeset) continue; if (nd1->mode != nd2->mode) return false; if (!virBitmapEqual(nd1->nodeset, nd2->nodeset)) return false; } return true; }
bool virDomainNumaEquals(virDomainNumaPtr n1, virDomainNumaPtr n2) { if (!n1 && !n2) return true; if (!n1 || !n2) return false; if (!n1->memory.specified && !n2->memory.specified) return virDomainNumaNodesEqual(n1, n2); if (!n1->memory.specified || !n2->memory.specified) return false; if (n1->memory.mode != n2->memory.mode) return false; if (n1->memory.placement != n2->memory.placement) return false; if (!virBitmapEqual(n1->memory.nodeset, n2->memory.nodeset)) return false; return virDomainNumaNodesEqual(n1, n2); }
bool virDomainNumaCheckABIStability(virDomainNumaPtr src, virDomainNumaPtr tgt) { size_t i; size_t j; if (virDomainNumaGetNodeCount(src) != virDomainNumaGetNodeCount(tgt)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Target NUMA node count '%zu' doesn't match " "source '%zu'"), virDomainNumaGetNodeCount(tgt), virDomainNumaGetNodeCount(src)); return false; } for (i = 0; i < virDomainNumaGetNodeCount(src); i++) { if (virDomainNumaGetNodeMemorySize(src, i) != virDomainNumaGetNodeMemorySize(tgt, i)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Size of target NUMA node %zu (%llu) doesn't " "match source (%llu)"), i, virDomainNumaGetNodeMemorySize(tgt, i), virDomainNumaGetNodeMemorySize(src, i)); return false; } if (!virBitmapEqual(virDomainNumaGetNodeCpumask(src, i), virDomainNumaGetNodeCpumask(tgt, i))) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Processor mask of target NUMA node %zu doesn't " "match source"), i); return false; } for (j = 0; j < virDomainNumaGetNodeCount(src); j++) { if (virDomainNumaGetNodeDistance(src, i, j) != virDomainNumaGetNodeDistance(tgt, i, j)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Target NUMA distance from %zu to %zu " "doesn't match source"), i, j); return false; } } } return true; }