mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-09-09 09:14:57 +00:00
Misc NUMA related fixes
This commit is contained in:
parent
e4073623a6
commit
92ff72b52c
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
Fri Apr 3 13:41:00 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
|
Misc NUMA memory fixes
|
||||||
|
* qemud/remote.c: Fix check of error status in the helper
|
||||||
|
remoteDispatchNodeGetCellsFreeMemory
|
||||||
|
* src/qemu_driver.c: Report error if requested start cell
|
||||||
|
is out of range. Fix return value if NUMA is not available
|
||||||
|
* src/virsh.c: Convert memory to KB for freecell command.
|
||||||
|
Check return value of virNodeGetFreeMemory
|
||||||
|
|
||||||
Fri Apr 3 11:55:00 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
Fri Apr 3 11:55:00 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
Support PCI passthrough in Xen driver
|
Support PCI passthrough in Xen driver
|
||||||
|
@ -662,6 +662,7 @@ remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server ATTRIBUTE_UNUS
|
|||||||
remote_node_get_cells_free_memory_args *args,
|
remote_node_get_cells_free_memory_args *args,
|
||||||
remote_node_get_cells_free_memory_ret *ret)
|
remote_node_get_cells_free_memory_ret *ret)
|
||||||
{
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
if (args->maxCells > REMOTE_NODE_MAX_CELLS) {
|
if (args->maxCells > REMOTE_NODE_MAX_CELLS) {
|
||||||
remoteDispatchFormatError (rerr,
|
remoteDispatchFormatError (rerr,
|
||||||
@ -675,15 +676,16 @@ remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server ATTRIBUTE_UNUS
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret->freeMems.freeMems_len = virNodeGetCellsFreeMemory(conn,
|
err = virNodeGetCellsFreeMemory(conn,
|
||||||
(unsigned long long *)ret->freeMems.freeMems_val,
|
(unsigned long long *)ret->freeMems.freeMems_val,
|
||||||
args->startCell,
|
args->startCell,
|
||||||
args->maxCells);
|
args->maxCells);
|
||||||
if (ret->freeMems.freeMems_len == 0) {
|
if (err <= 0) {
|
||||||
VIR_FREE(ret->freeMems.freeMems_val);
|
VIR_FREE(ret->freeMems.freeMems_val);
|
||||||
remoteDispatchConnError(rerr, conn);
|
remoteDispatchConnError(rerr, conn);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
ret->freeMems.freeMems_len = err;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1878,15 +1878,23 @@ qemudNodeGetCellsFreeMemory(virConnectPtr conn,
|
|||||||
{
|
{
|
||||||
int n, lastCell, numCells;
|
int n, lastCell, numCells;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
int maxCell;
|
||||||
|
|
||||||
if (numa_available() < 0) {
|
if (numa_available() < 0) {
|
||||||
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_SUPPORT,
|
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_SUPPORT,
|
||||||
"%s", _("NUMA not supported on this host"));
|
"%s", _("NUMA not supported on this host"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
maxCell = numa_max_node();
|
||||||
|
if (startCell > maxCell) {
|
||||||
|
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("start cell %d out of range (0-%d)"),
|
||||||
|
startCell, maxCell);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
lastCell = startCell + maxCells - 1;
|
lastCell = startCell + maxCells - 1;
|
||||||
if (lastCell > numa_max_node())
|
if (lastCell > maxCell)
|
||||||
lastCell = numa_max_node();
|
lastCell = maxCell;
|
||||||
|
|
||||||
for (numCells = 0, n = startCell ; n <= lastCell ; n++) {
|
for (numCells = 0, n = startCell ; n <= lastCell ; n++) {
|
||||||
long long mem;
|
long long mem;
|
||||||
@ -1906,7 +1914,7 @@ cleanup:
|
|||||||
static unsigned long long
|
static unsigned long long
|
||||||
qemudNodeGetFreeMemory (virConnectPtr conn)
|
qemudNodeGetFreeMemory (virConnectPtr conn)
|
||||||
{
|
{
|
||||||
unsigned long long freeMem = -1;
|
unsigned long long freeMem = 0;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (numa_available() < 0) {
|
if (numa_available() < 0) {
|
||||||
|
@ -1654,6 +1654,8 @@ cmdFreecell(vshControl *ctl, const vshCmd *cmd)
|
|||||||
cell = vshCommandOptInt(cmd, "cellno", &cell_given);
|
cell = vshCommandOptInt(cmd, "cellno", &cell_given);
|
||||||
if (!cell_given) {
|
if (!cell_given) {
|
||||||
memory = virNodeGetFreeMemory(ctl->conn);
|
memory = virNodeGetFreeMemory(ctl->conn);
|
||||||
|
if (memory == 0)
|
||||||
|
return FALSE;
|
||||||
} else {
|
} else {
|
||||||
ret = virNodeGetCellsFreeMemory(ctl->conn, &memory, cell, 1);
|
ret = virNodeGetCellsFreeMemory(ctl->conn, &memory, cell, 1);
|
||||||
if (ret != 1)
|
if (ret != 1)
|
||||||
@ -1661,9 +1663,9 @@ cmdFreecell(vshControl *ctl, const vshCmd *cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cell == -1)
|
if (cell == -1)
|
||||||
vshPrint(ctl, "%s: %llu kB\n", _("Total"), memory);
|
vshPrint(ctl, "%s: %llu kB\n", _("Total"), (memory/1024));
|
||||||
else
|
else
|
||||||
vshPrint(ctl, "%d: %llu kB\n", cell, memory);
|
vshPrint(ctl, "%d: %llu kB\n", cell, (memory/1024));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user