ia64/linux-2.6.18-xen.hg

view arch/sparc/lib/divdi3.S @ 897:329ea0ccb344

balloon: try harder to balloon up under memory pressure.

Currently if the balloon driver is unable to increase the guest's
reservation it assumes the failure was due to reaching its full
allocation, gives up on the ballooning operation and records the limit
it reached as the "hard limit". The driver will not try again until
the target is set again (even to the same value).

However it is possible that ballooning has in fact failed due to
memory pressure in the host and therefore it is desirable to keep
attempting to reach the target in case memory becomes available. The
most likely scenario is that some guests are ballooning down while
others are ballooning up and therefore there is temporary memory
pressure while things stabilise. You would not expect a well behaved
toolstack to ask a domain to balloon to more than its allocation nor
would you expect it to deliberately over-commit memory by setting
balloon targets which exceed the total host memory.

This patch drops the concept of a hard limit and causes the balloon
driver to retry increasing the reservation on a timer in the same
manner as when decreasing the reservation.

Also if we partially succeed in increasing the reservation
(i.e. receive less pages than we asked for) then we may as well keep
those pages rather than returning them to Xen.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
author Keir Fraser <keir.fraser@citrix.com>
date Fri Jun 05 14:01:20 2009 +0100 (2009-06-05)
parents 831230e53067
children
line source
1 /* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3 This file is part of GNU CC.
5 GNU CC is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2, or (at your option)
8 any later version.
10 GNU CC is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNU CC; see the file COPYING. If not, write to
17 the Free Software Foundation, 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. */
20 .data
21 .align 8
22 .globl __clz_tab
23 __clz_tab:
24 .byte 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
25 .byte 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
26 .byte 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
27 .byte 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
28 .byte 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
29 .byte 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
30 .byte 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
31 .byte 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
32 .size __clz_tab,256
33 .global .udiv
35 .text
36 .align 4
37 .globl __divdi3
38 __divdi3:
39 save %sp,-104,%sp
40 cmp %i0,0
41 bge .LL40
42 mov 0,%l4
43 mov -1,%l4
44 sub %g0,%i1,%o0
45 mov %o0,%o5
46 subcc %g0,%o0,%g0
47 sub %g0,%i0,%o0
48 subx %o0,0,%o4
49 mov %o4,%i0
50 mov %o5,%i1
51 .LL40:
52 cmp %i2,0
53 bge .LL84
54 mov %i3,%o4
55 xnor %g0,%l4,%l4
56 sub %g0,%i3,%o0
57 mov %o0,%o3
58 subcc %g0,%o0,%g0
59 sub %g0,%i2,%o0
60 subx %o0,0,%o2
61 mov %o2,%i2
62 mov %o3,%i3
63 mov %i3,%o4
64 .LL84:
65 cmp %i2,0
66 bne .LL45
67 mov %i1,%i3
68 cmp %o4,%i0
69 bleu .LL46
70 mov %i3,%o1
71 mov 32,%g1
72 subcc %i0,%o4,%g0
73 1: bcs 5f
74 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb
75 sub %i0,%o4,%i0 ! this kills msb of n
76 addx %i0,%i0,%i0 ! so this cannot give carry
77 subcc %g1,1,%g1
78 2: bne 1b
79 subcc %i0,%o4,%g0
80 bcs 3f
81 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb
82 b 3f
83 sub %i0,%o4,%i0 ! this kills msb of n
84 4: sub %i0,%o4,%i0
85 5: addxcc %i0,%i0,%i0
86 bcc 2b
87 subcc %g1,1,%g1
88 ! Got carry from n. Subtract next step to cancel this carry.
89 bne 4b
90 addcc %o1,%o1,%o1 ! shift n1n0 and a 0-bit in lsb
91 sub %i0,%o4,%i0
92 3: xnor %o1,0,%o1
93 b .LL50
94 mov 0,%o2
95 .LL46:
96 cmp %o4,0
97 bne .LL85
98 mov %i0,%o2
99 mov 1,%o0
100 call .udiv,0
101 mov 0,%o1
102 mov %o0,%o4
103 mov %i0,%o2
104 .LL85:
105 mov 0,%g3
106 mov 32,%g1
107 subcc %g3,%o4,%g0
108 1: bcs 5f
109 addxcc %o2,%o2,%o2 ! shift n1n0 and a q-bit in lsb
110 sub %g3,%o4,%g3 ! this kills msb of n
111 addx %g3,%g3,%g3 ! so this cannot give carry
112 subcc %g1,1,%g1
113 2: bne 1b
114 subcc %g3,%o4,%g0
115 bcs 3f
116 addxcc %o2,%o2,%o2 ! shift n1n0 and a q-bit in lsb
117 b 3f
118 sub %g3,%o4,%g3 ! this kills msb of n
119 4: sub %g3,%o4,%g3
120 5: addxcc %g3,%g3,%g3
121 bcc 2b
122 subcc %g1,1,%g1
123 ! Got carry from n. Subtract next step to cancel this carry.
124 bne 4b
125 addcc %o2,%o2,%o2 ! shift n1n0 and a 0-bit in lsb
126 sub %g3,%o4,%g3
127 3: xnor %o2,0,%o2
128 mov %g3,%i0
129 mov %i3,%o1
130 mov 32,%g1
131 subcc %i0,%o4,%g0
132 1: bcs 5f
133 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb
134 sub %i0,%o4,%i0 ! this kills msb of n
135 addx %i0,%i0,%i0 ! so this cannot give carry
136 subcc %g1,1,%g1
137 2: bne 1b
138 subcc %i0,%o4,%g0
139 bcs 3f
140 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb
141 b 3f
142 sub %i0,%o4,%i0 ! this kills msb of n
143 4: sub %i0,%o4,%i0
144 5: addxcc %i0,%i0,%i0
145 bcc 2b
146 subcc %g1,1,%g1
147 ! Got carry from n. Subtract next step to cancel this carry.
148 bne 4b
149 addcc %o1,%o1,%o1 ! shift n1n0 and a 0-bit in lsb
150 sub %i0,%o4,%i0
151 3: xnor %o1,0,%o1
152 b .LL86
153 mov %o1,%l1
154 .LL45:
155 cmp %i2,%i0
156 bleu .LL51
157 sethi %hi(65535),%o0
158 b .LL78
159 mov 0,%o1
160 .LL51:
161 or %o0,%lo(65535),%o0
162 cmp %i2,%o0
163 bgu .LL58
164 mov %i2,%o1
165 cmp %i2,256
166 addx %g0,-1,%o0
167 b .LL64
168 and %o0,8,%o2
169 .LL58:
170 sethi %hi(16777215),%o0
171 or %o0,%lo(16777215),%o0
172 cmp %i2,%o0
173 bgu .LL64
174 mov 24,%o2
175 mov 16,%o2
176 .LL64:
177 srl %o1,%o2,%o0
178 sethi %hi(__clz_tab),%o1
179 or %o1,%lo(__clz_tab),%o1
180 ldub [%o0+%o1],%o0
181 add %o0,%o2,%o0
182 mov 32,%o1
183 subcc %o1,%o0,%o3
184 bne,a .LL72
185 sub %o1,%o3,%o1
186 cmp %i0,%i2
187 bgu .LL74
188 cmp %i3,%o4
189 blu .LL78
190 mov 0,%o1
191 .LL74:
192 b .LL78
193 mov 1,%o1
194 .LL72:
195 sll %i2,%o3,%o2
196 srl %o4,%o1,%o0
197 or %o2,%o0,%i2
198 sll %o4,%o3,%o4
199 srl %i0,%o1,%o2
200 sll %i0,%o3,%o0
201 srl %i3,%o1,%o1
202 or %o0,%o1,%i0
203 sll %i3,%o3,%i3
204 mov %i0,%o1
205 mov 32,%g1
206 subcc %o2,%i2,%g0
207 1: bcs 5f
208 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb
209 sub %o2,%i2,%o2 ! this kills msb of n
210 addx %o2,%o2,%o2 ! so this cannot give carry
211 subcc %g1,1,%g1
212 2: bne 1b
213 subcc %o2,%i2,%g0
214 bcs 3f
215 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb
216 b 3f
217 sub %o2,%i2,%o2 ! this kills msb of n
218 4: sub %o2,%i2,%o2
219 5: addxcc %o2,%o2,%o2
220 bcc 2b
221 subcc %g1,1,%g1
222 ! Got carry from n. Subtract next step to cancel this carry.
223 bne 4b
224 addcc %o1,%o1,%o1 ! shift n1n0 and a 0-bit in lsb
225 sub %o2,%i2,%o2
226 3: xnor %o1,0,%o1
227 mov %o2,%i0
228 wr %g0,%o1,%y ! SPARC has 0-3 delay insn after a wr
229 sra %o4,31,%g2 ! Do not move this insn
230 and %o1,%g2,%g2 ! Do not move this insn
231 andcc %g0,0,%g1 ! Do not move this insn
232 mulscc %g1,%o4,%g1
233 mulscc %g1,%o4,%g1
234 mulscc %g1,%o4,%g1
235 mulscc %g1,%o4,%g1
236 mulscc %g1,%o4,%g1
237 mulscc %g1,%o4,%g1
238 mulscc %g1,%o4,%g1
239 mulscc %g1,%o4,%g1
240 mulscc %g1,%o4,%g1
241 mulscc %g1,%o4,%g1
242 mulscc %g1,%o4,%g1
243 mulscc %g1,%o4,%g1
244 mulscc %g1,%o4,%g1
245 mulscc %g1,%o4,%g1
246 mulscc %g1,%o4,%g1
247 mulscc %g1,%o4,%g1
248 mulscc %g1,%o4,%g1
249 mulscc %g1,%o4,%g1
250 mulscc %g1,%o4,%g1
251 mulscc %g1,%o4,%g1
252 mulscc %g1,%o4,%g1
253 mulscc %g1,%o4,%g1
254 mulscc %g1,%o4,%g1
255 mulscc %g1,%o4,%g1
256 mulscc %g1,%o4,%g1
257 mulscc %g1,%o4,%g1
258 mulscc %g1,%o4,%g1
259 mulscc %g1,%o4,%g1
260 mulscc %g1,%o4,%g1
261 mulscc %g1,%o4,%g1
262 mulscc %g1,%o4,%g1
263 mulscc %g1,%o4,%g1
264 mulscc %g1,0,%g1
265 add %g1,%g2,%o0
266 rd %y,%o2
267 cmp %o0,%i0
268 bgu,a .LL78
269 add %o1,-1,%o1
270 bne,a .LL50
271 mov 0,%o2
272 cmp %o2,%i3
273 bleu .LL50
274 mov 0,%o2
275 add %o1,-1,%o1
276 .LL78:
277 mov 0,%o2
278 .LL50:
279 mov %o1,%l1
280 .LL86:
281 mov %o2,%l0
282 mov %l0,%i0
283 mov %l1,%i1
284 cmp %l4,0
285 be .LL81
286 sub %g0,%i1,%o0
287 mov %o0,%l3
288 subcc %g0,%o0,%g0
289 sub %g0,%i0,%o0
290 subx %o0,0,%l2
291 mov %l2,%i0
292 mov %l3,%i1
293 .LL81:
294 ret
295 restore