]> git.proxmox.com Git - pve-qemu-kvm.git/blob - debian/patches/fairsched.diff
update to qemu 2.2.0-rc2
[pve-qemu-kvm.git] / debian / patches / fairsched.diff
1 Index: new/qemu-options.hx
2 ===================================================================
3 --- new.orig/qemu-options.hx 2014-11-20 06:45:06.000000000 +0100
4 +++ new/qemu-options.hx 2014-11-20 06:50:44.000000000 +0100
5 @@ -386,6 +386,12 @@
6 @table @option
7 ETEXI
8
9 +DEF("id", HAS_ARG, QEMU_OPTION_id,
10 + "-id n set the faisched ID\n", QEMU_ARCH_ALL)
11 +
12 +DEF("cpuunits", HAS_ARG, QEMU_OPTION_cpuunits,
13 + "-cpuuinits n set fairsched cpu units\n", QEMU_ARCH_ALL)
14 +
15 DEF("fda", HAS_ARG, QEMU_OPTION_fda,
16 "-fda/-fdb file use 'file' as floppy disk 0/1 image\n", QEMU_ARCH_ALL)
17 DEF("fdb", HAS_ARG, QEMU_OPTION_fdb, "", QEMU_ARCH_ALL)
18 Index: new/vl.c
19 ===================================================================
20 --- new.orig/vl.c 2014-11-20 06:45:06.000000000 +0100
21 +++ new/vl.c 2014-11-20 06:50:44.000000000 +0100
22 @@ -101,6 +101,8 @@
23 #endif
24 #include "sysemu/qtest.h"
25
26 +#include "vzsyscalls.h"
27 +
28 #include "disas/disas.h"
29
30
31 @@ -154,6 +156,7 @@
32 CharDriverState *sclp_hds[MAX_SCLP_CONSOLES];
33 int win2k_install_hack = 0;
34 int singlestep = 0;
35 +int fairsched_id = 0;
36 int smp_cpus = 1;
37 int max_cpus = 0;
38 int smp_cores = 1;
39 @@ -2738,6 +2741,9 @@
40 int main(int argc, char **argv, char **envp)
41 {
42 int i;
43 + int cpuunits = 0;
44 + long int fairsched_id_long = 0;
45 + char *ep;
46 int snapshot, linux_boot;
47 const char *initrd_filename;
48 const char *kernel_filename, *kernel_cmdline;
49 @@ -3560,6 +3566,21 @@
50 exit(1);
51 }
52 break;
53 + case QEMU_OPTION_id:
54 + fairsched_id_long = strtol(optarg, &ep, 10);
55 + fairsched_id = fairsched_id_long;
56 + if (*ep != 0 || fairsched_id_long < 100 || fairsched_id_long > INT_MAX) {
57 + fprintf(stderr, "Invalid ID\n");
58 + exit(1);
59 + }
60 + break;
61 + case QEMU_OPTION_cpuunits:
62 + cpuunits = atoi(optarg);
63 + if (cpuunits < 8 || cpuunits > 500000) {
64 + fprintf(stderr, "Invalid value for cpuunits\n");
65 + exit(1);
66 + }
67 + break;
68 case QEMU_OPTION_vnc:
69 #ifdef CONFIG_VNC
70 display_remote++;
71 @@ -3844,6 +3865,40 @@
72 OBJECT_CLASS(machine_class))));
73 object_property_add_child(object_get_root(), "machine",
74 OBJECT(current_machine), &error_abort);
75 +
76 + if (cpuunits && !fairsched_id) {
77 + fprintf(stderr, "cpuunits specified without -id");
78 + exit(1);
79 + }
80 +
81 + if (fairsched_id && cpuunits) {
82 + int ret;
83 + int weight = cpuunits ? 500000/cpuunits : 500;
84 + pid_t cpid = getpid();
85 +
86 + ret = syscall(__NR_fairsched_rmnod, fairsched_id);
87 + if (ret == -EBUSY) {
88 + fprintf (stderr, "unable to create fairsched node - still in use\n");
89 + exit(1);
90 + }
91 +
92 + ret = syscall(__NR_fairsched_mknod, 0, weight, fairsched_id);
93 + if (ret != fairsched_id) {
94 + fprintf (stderr, "unable to create fairsched node\n");
95 + exit(1);
96 + }
97 +
98 + ret = syscall(__NR_fairsched_mvpr, cpid, fairsched_id);
99 + if (ret != 0) {
100 + fprintf (stderr, "unable to move procces to fairsched group");
101 + exit (1);
102 + }
103 +
104 + /* note: we can never remove ourself from the group, so the empty group
105 + will exist after we finish
106 + */
107 + }
108 +
109 cpu_exec_init_all();
110
111 if (machine_class->hw_version) {
112 Index: new/vzsyscalls.h
113 ===================================================================
114 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
115 +++ new/vzsyscalls.h 2014-11-20 06:50:44.000000000 +0100
116 @@ -0,0 +1,47 @@
117 +/*
118 + * Copyright (C) 2000-2008, Parallels, Inc. All rights reserved.
119 + *
120 + * This program is free software; you can redistribute it and/or modify
121 + * it under the terms of the GNU General Public License as published by
122 + * the Free Software Foundation; either version 2 of the License, or
123 + * (at your option) any later version.
124 + *
125 + * This program is distributed in the hope that it will be useful,
126 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
127 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
128 + * GNU General Public License for more details.
129 + *
130 + * You should have received a copy of the GNU General Public License
131 + * along with this program; if not, write to the Free Software
132 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
133 + */
134 +#ifndef _VZSYSCALLS_H_
135 +#define _VZSYSCALLS_H_
136 +
137 +#include <sys/syscall.h>
138 +
139 +#ifdef __x86_64__
140 +#define __NR_fairsched_vcpus 499
141 +#define __NR_setluid 501
142 +#define __NR_setublimit 502
143 +#define __NR_fairsched_mknod 504
144 +#define __NR_fairsched_rmnod 505
145 +#define __NR_fairsched_chwt 506
146 +#define __NR_fairsched_mvpr 507
147 +#define __NR_fairsched_rate 508
148 +#define __NR_ioprio_set 251
149 +#elif defined(__i386__)
150 +#define __NR_fairsched_mknod 500
151 +#define __NR_fairsched_rmnod 501
152 +#define __NR_fairsched_chwt 502
153 +#define __NR_fairsched_mvpr 503
154 +#define __NR_fairsched_rate 504
155 +#define __NR_fairsched_vcpus 505
156 +#define __NR_setluid 511
157 +#define __NR_setublimit 512
158 +#define __NR_ioprio_set 289
159 +#else
160 +#error "no syscall for this arch"
161 +#endif
162 +
163 +#endif