From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: [PATCH 1/3] KVM-userspace: introduce -nodes command line option Date: Thu, 27 Nov 2008 23:25:12 +0100 Message-ID: <492F1E48.4000500@amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090401060500010302060805" Cc: kvm@vger.kernel.org To: Avi Kivity Return-path: Received: from outbound-va3.frontbridge.com ([216.32.180.16]:64301 "EHLO VA3EHSOBE004.bigfish.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751330AbYK0WZZ (ORCPT ); Thu, 27 Nov 2008 17:25:25 -0500 Sender: kvm-owner@vger.kernel.org List-ID: --------------090401060500010302060805 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit The attached patch parses a list of host nodes given on the command line and passes it on to lower levels (namely qemu-kvm.c) Signed-off-by: Andre Przywara -- Andre Przywara AMD-Operating System Research Center (OSRC), Dresden, Germany Tel: +49 351 277-84917 ----to satisfy European Law for business letters: AMD Saxony Limited Liability Company & Co. KG, Wilschdorfer Landstr. 101, 01109 Dresden, Germany Register Court Dresden: HRA 4896, General Partner authorized to represent: AMD Saxony LLC (Wilmington, Delaware, US) General Manager of AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy --------------090401060500010302060805 Content-Type: text/plain; name="kvmnuma_cmdline.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="kvmnuma_cmdline.patch" commit d34354eb622f667169edebd830364f646cd8f93e Author: Andre Przywara Date: Tue Nov 25 23:01:24 2008 +0100 introduce -nodes comand line option diff --git a/qemu/sysemu.h b/qemu/sysemu.h index 5abda5c..07acaf4 100644 --- a/qemu/sysemu.h +++ b/qemu/sysemu.h @@ -99,6 +99,11 @@ extern int win2k_install_hack; extern int alt_grab; extern int usb_enabled; extern int smp_cpus; + +#define MAX_NODES 64 +extern int numnumanodes; +extern int hostnodes[MAX_NODES]; + extern int cursor_hide; extern int graphic_rotate; extern int no_quit; diff --git a/qemu/vl.c b/qemu/vl.c index 92325e6..681b3de 100644 --- a/qemu/vl.c +++ b/qemu/vl.c @@ -228,6 +228,8 @@ int usb_enabled = 0; const char *assigned_devices[MAX_DEV_ASSIGN_CMDLINE]; int assigned_devices_index; int smp_cpus = 1; +int numnumanodes = 0; +int hostnodes[MAX_NODES]; const char *vnc_display; int acpi_enabled = 1; int fd_bootchk = 1; @@ -4193,6 +4195,7 @@ enum { QEMU_OPTION_usb, QEMU_OPTION_usbdevice, QEMU_OPTION_smp, + QEMU_OPTION_nodes, QEMU_OPTION_vnc, QEMU_OPTION_no_acpi, QEMU_OPTION_curses, @@ -4320,6 +4323,7 @@ static const QEMUOption qemu_options[] = { { "win2k-hack", 0, QEMU_OPTION_win2k_hack }, { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice }, { "smp", HAS_ARG, QEMU_OPTION_smp }, + { "nodes", HAS_ARG, QEMU_OPTION_nodes }, { "vnc", HAS_ARG, QEMU_OPTION_vnc }, #ifdef CONFIG_CURSES { "curses", 0, QEMU_OPTION_curses }, @@ -4711,6 +4715,25 @@ static void termsig_setup(void) #endif +static int parse_to_array (const char *arg, int *array, int maxentries) +{ +const char *s; +char *end; +int num; +int value; + + num=0; + for (s=arg; s!=NULL; s = strchr (end, ',')) + { + while (*s == ',') s++; + value = strtol (s, &end, 10); + if (end == s) break; + if (num >= maxentries) break; + array[num++] = value; + } + return num; +} + int main(int argc, char **argv) { #ifdef CONFIG_GDBSTUB @@ -5290,6 +5313,13 @@ int main(int argc, char **argv) exit(1); } break; + case QEMU_OPTION_nodes: + numnumanodes = parse_to_array (optarg, hostnodes,MAX_NODES); + if (numnumanodes < 0) { + fprintf(stderr, "Invalid number of NUMA nodes\n"); + exit(1); + } + break; case QEMU_OPTION_vnc: vnc_display = optarg; break; @@ -5442,6 +5472,9 @@ int main(int argc, char **argv) monitor_device = "stdio"; } + if (numnumanodes > smp_cpus) + numnumanodes = smp_cpus; + #ifndef _WIN32 if (daemonize) { pid_t pid; --------------090401060500010302060805--