ia64/linux-2.6.18-xen.hg

view arch/sparc/lib/udivdi3.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 .text
21 .align 4
22 .globl __udivdi3
23 __udivdi3:
24 save %sp,-104,%sp
25 mov %i3,%o3
26 cmp %i2,0
27 bne .LL40
28 mov %i1,%i3
29 cmp %o3,%i0
30 bleu .LL41
31 mov %i3,%o1
32 ! Inlined udiv_qrnnd
33 mov 32,%g1
34 subcc %i0,%o3,%g0
35 1: bcs 5f
36 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb
37 sub %i0,%o3,%i0 ! this kills msb of n
38 addx %i0,%i0,%i0 ! so this cannot give carry
39 subcc %g1,1,%g1
40 2: bne 1b
41 subcc %i0,%o3,%g0
42 bcs 3f
43 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb
44 b 3f
45 sub %i0,%o3,%i0 ! this kills msb of n
46 4: sub %i0,%o3,%i0
47 5: addxcc %i0,%i0,%i0
48 bcc 2b
49 subcc %g1,1,%g1
50 ! Got carry from n. Subtract next step to cancel this carry.
51 bne 4b
52 addcc %o1,%o1,%o1 ! shift n1n0 and a 0-bit in lsb
53 sub %i0,%o3,%i0
54 3: xnor %o1,0,%o1
55 ! End of inline udiv_qrnnd
56 b .LL45
57 mov 0,%o2
58 .LL41:
59 cmp %o3,0
60 bne .LL77
61 mov %i0,%o2
62 mov 1,%o0
63 call .udiv,0
64 mov 0,%o1
65 mov %o0,%o3
66 mov %i0,%o2
67 .LL77:
68 mov 0,%o4
69 ! Inlined udiv_qrnnd
70 mov 32,%g1
71 subcc %o4,%o3,%g0
72 1: bcs 5f
73 addxcc %o2,%o2,%o2 ! shift n1n0 and a q-bit in lsb
74 sub %o4,%o3,%o4 ! this kills msb of n
75 addx %o4,%o4,%o4 ! so this cannot give carry
76 subcc %g1,1,%g1
77 2: bne 1b
78 subcc %o4,%o3,%g0
79 bcs 3f
80 addxcc %o2,%o2,%o2 ! shift n1n0 and a q-bit in lsb
81 b 3f
82 sub %o4,%o3,%o4 ! this kills msb of n
83 4: sub %o4,%o3,%o4
84 5: addxcc %o4,%o4,%o4
85 bcc 2b
86 subcc %g1,1,%g1
87 ! Got carry from n. Subtract next step to cancel this carry.
88 bne 4b
89 addcc %o2,%o2,%o2 ! shift n1n0 and a 0-bit in lsb
90 sub %o4,%o3,%o4
91 3: xnor %o2,0,%o2
92 ! End of inline udiv_qrnnd
93 mov %o4,%i0
94 mov %i3,%o1
95 ! Inlined udiv_qrnnd
96 mov 32,%g1
97 subcc %i0,%o3,%g0
98 1: bcs 5f
99 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb
100 sub %i0,%o3,%i0 ! this kills msb of n
101 addx %i0,%i0,%i0 ! so this cannot give carry
102 subcc %g1,1,%g1
103 2: bne 1b
104 subcc %i0,%o3,%g0
105 bcs 3f
106 addxcc %o1,%o1,%o1 ! shift n1n0 and a q-bit in lsb
107 b 3f
108 sub %i0,%o3,%i0 ! this kills msb of n
109 4: sub %i0,%o3,%i0
110 5: addxcc %i0,%i0,%i0
111 bcc 2b
112 subcc %g1,1,%g1
113 ! Got carry from n. Subtract next step to cancel this carry.
114 bne 4b
115 addcc %o1,%o1,%o1 ! shift n1n0 and a 0-bit in lsb
116 sub %i0,%o3,%i0
117 3: xnor %o1,0,%o1
118 ! End of inline udiv_qrnnd
119 b .LL78
120 mov %o1,%l1
121 .LL40:
122 cmp %i2,%i0
123 bleu .LL46
124 sethi %hi(65535),%o0
125 b .LL73
126 mov 0,%o1
127 .LL46:
128 or %o0,%lo(65535),%o0
129 cmp %i2,%o0
130 bgu .LL53
131 mov %i2,%o1
132 cmp %i2,256
133 addx %g0,-1,%o0
134 b .LL59
135 and %o0,8,%o2
136 .LL53:
137 sethi %hi(16777215),%o0
138 or %o0,%lo(16777215),%o0
139 cmp %o1,%o0
140 bgu .LL59
141 mov 24,%o2
142 mov 16,%o2
143 .LL59:
144 srl %o1,%o2,%o1
145 sethi %hi(__clz_tab),%o0
146 or %o0,%lo(__clz_tab),%o0
147 ldub [%o1+%o0],%o0
148 add %o0,%o2,%o0
149 mov 32,%o1
150 subcc %o1,%o0,%o2
151 bne,a .LL67
152 mov 32,%o0
153 cmp %i0,%i2
154 bgu .LL69
155 cmp %i3,%o3
156 blu .LL73
157 mov 0,%o1
158 .LL69:
159 b .LL73
160 mov 1,%o1
161 .LL67:
162 sub %o0,%o2,%o0
163 sll %i2,%o2,%i2
164 srl %o3,%o0,%o1
165 or %i2,%o1,%i2
166 sll %o3,%o2,%o3
167 srl %i0,%o0,%o1
168 sll %i0,%o2,%i0
169 srl %i3,%o0,%o0
170 or %i0,%o0,%i0
171 sll %i3,%o2,%i3
172 mov %i0,%o5
173 mov %o1,%o4
174 ! Inlined udiv_qrnnd
175 mov 32,%g1
176 subcc %o4,%i2,%g0
177 1: bcs 5f
178 addxcc %o5,%o5,%o5 ! shift n1n0 and a q-bit in lsb
179 sub %o4,%i2,%o4 ! this kills msb of n
180 addx %o4,%o4,%o4 ! so this cannot give carry
181 subcc %g1,1,%g1
182 2: bne 1b
183 subcc %o4,%i2,%g0
184 bcs 3f
185 addxcc %o5,%o5,%o5 ! shift n1n0 and a q-bit in lsb
186 b 3f
187 sub %o4,%i2,%o4 ! this kills msb of n
188 4: sub %o4,%i2,%o4
189 5: addxcc %o4,%o4,%o4
190 bcc 2b
191 subcc %g1,1,%g1
192 ! Got carry from n. Subtract next step to cancel this carry.
193 bne 4b
194 addcc %o5,%o5,%o5 ! shift n1n0 and a 0-bit in lsb
195 sub %o4,%i2,%o4
196 3: xnor %o5,0,%o5
197 ! End of inline udiv_qrnnd
198 mov %o4,%i0
199 mov %o5,%o1
200 ! Inlined umul_ppmm
201 wr %g0,%o1,%y ! SPARC has 0-3 delay insn after a wr
202 sra %o3,31,%g2 ! Do not move this insn
203 and %o1,%g2,%g2 ! Do not move this insn
204 andcc %g0,0,%g1 ! Do not move this insn
205 mulscc %g1,%o3,%g1
206 mulscc %g1,%o3,%g1
207 mulscc %g1,%o3,%g1
208 mulscc %g1,%o3,%g1
209 mulscc %g1,%o3,%g1
210 mulscc %g1,%o3,%g1
211 mulscc %g1,%o3,%g1
212 mulscc %g1,%o3,%g1
213 mulscc %g1,%o3,%g1
214 mulscc %g1,%o3,%g1
215 mulscc %g1,%o3,%g1
216 mulscc %g1,%o3,%g1
217 mulscc %g1,%o3,%g1
218 mulscc %g1,%o3,%g1
219 mulscc %g1,%o3,%g1
220 mulscc %g1,%o3,%g1
221 mulscc %g1,%o3,%g1
222 mulscc %g1,%o3,%g1
223 mulscc %g1,%o3,%g1
224 mulscc %g1,%o3,%g1
225 mulscc %g1,%o3,%g1
226 mulscc %g1,%o3,%g1
227 mulscc %g1,%o3,%g1
228 mulscc %g1,%o3,%g1
229 mulscc %g1,%o3,%g1
230 mulscc %g1,%o3,%g1
231 mulscc %g1,%o3,%g1
232 mulscc %g1,%o3,%g1
233 mulscc %g1,%o3,%g1
234 mulscc %g1,%o3,%g1
235 mulscc %g1,%o3,%g1
236 mulscc %g1,%o3,%g1
237 mulscc %g1,0,%g1
238 add %g1,%g2,%o0
239 rd %y,%o2
240 cmp %o0,%i0
241 bgu,a .LL73
242 add %o1,-1,%o1
243 bne,a .LL45
244 mov 0,%o2
245 cmp %o2,%i3
246 bleu .LL45
247 mov 0,%o2
248 add %o1,-1,%o1
249 .LL73:
250 mov 0,%o2
251 .LL45:
252 mov %o1,%l1
253 .LL78:
254 mov %o2,%l0
255 mov %l0,%i0
256 mov %l1,%i1
257 ret
258 restore