]> git.proxmox.com Git - pve-qemu-kvm.git/blob - debian/patches/fairsched.diff
update to qemu 1.3 rc1
[pve-qemu-kvm.git] / debian / patches / fairsched.diff
1 Index: new/qemu-options.hx
2 ===================================================================
3 --- new.orig/qemu-options.hx 2012-11-21 11:11:22.000000000 +0100
4 +++ new/qemu-options.hx 2012-11-21 11:25:23.000000000 +0100
5 @@ -103,6 +103,12 @@
6 are split equally.
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 2012-11-21 11:11:22.000000000 +0100
21 +++ new/vl.c 2012-11-21 11:25:23.000000000 +0100
22 @@ -154,6 +154,8 @@
23 #endif
24 #include "qtest.h"
25
26 +#include "vzsyscalls.h"
27 +
28 #include "disas.h"
29
30 #include "qemu_socket.h"
31 @@ -205,6 +207,7 @@
32 CharDriverState *virtcon_hds[MAX_VIRTIO_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 @@ -2275,7 +2278,7 @@
40 }
41
42 static int debugcon_parse(const char *devname)
43 -{
44 +{
45 QemuOpts *opts;
46
47 if (!qemu_chr_new("debugcon", devname, NULL)) {
48 @@ -2527,6 +2530,9 @@
49 int main(int argc, char **argv, char **envp)
50 {
51 int i;
52 + int cpuunits = 0;
53 + long int fairsched_id_long = 0;
54 + char *ep;
55 int snapshot, linux_boot;
56 const char *icount_option = NULL;
57 const char *initrd_filename;
58 @@ -3306,6 +3312,21 @@
59 exit(1);
60 }
61 break;
62 + case QEMU_OPTION_id:
63 + fairsched_id_long = strtol(optarg, &ep, 10);
64 + fairsched_id = fairsched_id_long;
65 + if (*ep != 0 || fairsched_id_long < 100 || fairsched_id_long > INT_MAX) {
66 + fprintf(stderr, "Invalid ID\n");
67 + exit(1);
68 + }
69 + break;
70 + case QEMU_OPTION_cpuunits:
71 + cpuunits = atoi(optarg);
72 + if (cpuunits < 8 || cpuunits > 500000) {
73 + fprintf(stderr, "Invalid value for cpuunits\n");
74 + exit(1);
75 + }
76 + break;
77 case QEMU_OPTION_vnc:
78 #ifdef CONFIG_VNC
79 display_remote++;
80 @@ -3377,8 +3398,8 @@
81 }
82 p += 8;
83 os_set_proc_name(p);
84 - }
85 - }
86 + }
87 + }
88 break;
89 case QEMU_OPTION_prom_env:
90 if (nb_prom_envs >= MAX_PROM_ENVS) {
91 @@ -3765,6 +3786,39 @@
92 }
93 }
94
95 + if (cpuunits && !fairsched_id) {
96 + fprintf(stderr, "cpuunits specified without -id");
97 + exit (1);
98 + }
99 +
100 + if (fairsched_id && cpuunits) {
101 + int ret;
102 + int weight = cpuunits ? 500000/cpuunits : 500;
103 + pid_t cpid = getpid();
104 +
105 + ret = syscall(__NR_fairsched_rmnod, fairsched_id);
106 + if (ret == -EBUSY) {
107 + fprintf (stderr, "unable to create fairsched node - still in use\n");
108 + exit(1);
109 + }
110 +
111 + ret = syscall(__NR_fairsched_mknod, 0, weight, fairsched_id);
112 + if (ret != fairsched_id) {
113 + fprintf (stderr, "unable to create fairsched node\n");
114 + exit(1);
115 + }
116 +
117 + ret = syscall(__NR_fairsched_mvpr, cpid, fairsched_id);
118 + if (ret != 0) {
119 + fprintf (stderr, "unable to move procces to fairsched group");
120 + exit (1);
121 + }
122 +
123 + /* note: we can never remove ourself from the group, so the empty group
124 + will exist after we finish
125 + */
126 + }
127 +
128 cpu_exec_init_all();
129
130 bdrv_init_with_whitelist();
131 Index: new/vzsyscalls.h
132 ===================================================================
133 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
134 +++ new/vzsyscalls.h 2012-11-21 11:25:23.000000000 +0100
135 @@ -0,0 +1,47 @@
136 +/*
137 + * Copyright (C) 2000-2008, Parallels, Inc. All rights reserved.
138 + *
139 + * This program is free software; you can redistribute it and/or modify
140 + * it under the terms of the GNU General Public License as published by
141 + * the Free Software Foundation; either version 2 of the License, or
142 + * (at your option) any later version.
143 + *
144 + * This program is distributed in the hope that it will be useful,
145 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
146 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
147 + * GNU General Public License for more details.
148 + *
149 + * You should have received a copy of the GNU General Public License
150 + * along with this program; if not, write to the Free Software
151 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
152 + */
153 +#ifndef _VZSYSCALLS_H_
154 +#define _VZSYSCALLS_H_
155 +
156 +#include <sys/syscall.h>
157 +
158 +#ifdef __x86_64__
159 +#define __NR_fairsched_vcpus 499
160 +#define __NR_setluid 501
161 +#define __NR_setublimit 502
162 +#define __NR_fairsched_mknod 504
163 +#define __NR_fairsched_rmnod 505
164 +#define __NR_fairsched_chwt 506
165 +#define __NR_fairsched_mvpr 507
166 +#define __NR_fairsched_rate 508
167 +#define __NR_ioprio_set 251
168 +#elif defined(__i386__)
169 +#define __NR_fairsched_mknod 500
170 +#define __NR_fairsched_rmnod 501
171 +#define __NR_fairsched_chwt 502
172 +#define __NR_fairsched_mvpr 503
173 +#define __NR_fairsched_rate 504
174 +#define __NR_fairsched_vcpus 505
175 +#define __NR_setluid 511
176 +#define __NR_setublimit 512
177 +#define __NR_ioprio_set 289
178 +#else
179 +#error "no syscall for this arch"
180 +#endif
181 +
182 +#endif