Magellan Linux

Contents of /trunk/kernel26-xen/patches-2.6.25-r1/1019-2.6.25-xen-patch-2.6.18.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 609 - (show annotations) (download)
Fri May 23 17:35:37 2008 UTC (15 years, 11 months ago) by niro
File size: 6834 byte(s)
-using opensuse xen patchset, updated kernel configs

1 From: www.kernel.org
2 Subject: Linux 2.6.18
3 Patch-mainline: 2.6.18
4
5 Automatically created from "patches.kernel.org/patch-2.6.18" by xen-port-patches.py
6
7 Acked-by: jbeulich@novell.com
8
9 ---
10 arch/x86/Kconfig | 1
11 arch/x86/kernel/Makefile | 2
12 arch/x86/kernel/entry_32-xen.S | 2
13 arch/x86/kernel/time_32-xen.c | 104 ++++++++++++++++++++++++++--
14 include/asm-x86/mach-xen/asm/processor_32.h | 2
15 include/asm-x86/thread_info_32.h | 4 +
16 6 files changed, 106 insertions(+), 9 deletions(-)
17
18 --- a/arch/x86/Kconfig
19 +++ b/arch/x86/Kconfig
20 @@ -42,7 +42,6 @@
21
22 config GENERIC_TIME
23 def_bool y
24 - depends on !X86_XEN
25
26 config GENERIC_CMOS_UPDATE
27 def_bool y
28 --- a/arch/x86/kernel/Makefile
29 +++ b/arch/x86/kernel/Makefile
30 @@ -104,5 +104,5 @@
31 pci-dma_64-$(CONFIG_XEN) += pci-dma_32.o
32 endif
33
34 -disabled-obj-$(CONFIG_XEN) := i8259_$(BITS).o reboot.o smpboot_$(BITS).o
35 +disabled-obj-$(CONFIG_XEN) := i8253.o i8259_$(BITS).o reboot.o smpboot_$(BITS).o tsc_$(BITS).o
36 %/head_$(BITS).o %/head_$(BITS).s: $(if $(CONFIG_XEN),EXTRA_AFLAGS,dummy) :=
37 --- a/arch/x86/kernel/entry_32-xen.S
38 +++ b/arch/x86/kernel/entry_32-xen.S
39 @@ -388,8 +388,10 @@
40 movl %ebp,12(%esp)
41 movl $__USER_CS,4(%esp)
42 addl $4,%esp
43 + CFI_ADJUST_CFA_OFFSET -4
44 /* +5*4 is SS:ESP,EFLAGS,CS:EIP. +8 is esp0 setting. */
45 pushl (TI_sysenter_return-THREAD_SIZE+8+4*4)(%esp)
46 + CFI_ADJUST_CFA_OFFSET 4
47 /*
48 * Load the potential sixth argument from user stack.
49 * Careful about security.
50 --- a/arch/x86/kernel/time_32-xen.c
51 +++ b/arch/x86/kernel/time_32-xen.c
52 @@ -76,8 +76,13 @@
53
54 #if defined (__i386__)
55 #include <asm/i8259.h>
56 +#include <asm/i8253.h>
57 +DEFINE_SPINLOCK(i8253_lock);
58 +EXPORT_SYMBOL(i8253_lock);
59 #endif
60
61 +#define XEN_SHIFT 22
62 +
63 int pit_latch_buggy; /* extern */
64
65 #if defined(__x86_64__)
66 @@ -97,10 +102,6 @@
67 DEFINE_SPINLOCK(rtc_lock);
68 EXPORT_SYMBOL(rtc_lock);
69
70 -extern struct init_timer_opts timer_tsc_init;
71 -extern struct timer_opts timer_tsc;
72 -#define timer_none timer_tsc
73 -
74 /* These are peridically updated in shared_info, and then copied here. */
75 struct shadow_time_info {
76 u64 tsc_timestamp; /* TSC at last update of time vals. */
77 @@ -248,6 +249,7 @@
78 return scale_delta(delta, shadow->tsc_to_nsec_mul, shadow->tsc_shift);
79 }
80
81 +#ifdef CONFIG_X86_64
82 static unsigned long get_usec_offset(struct shadow_time_info *shadow)
83 {
84 u64 now, delta;
85 @@ -255,6 +257,7 @@
86 delta = now - shadow->tsc_timestamp;
87 return scale_delta(delta, shadow->tsc_to_usec_mul, shadow->tsc_shift);
88 }
89 +#endif
90
91 static void __update_wallclock(time_t sec, long nsec)
92 {
93 @@ -364,6 +367,8 @@
94 }
95 EXPORT_SYMBOL(rtc_cmos_write);
96
97 +#ifdef CONFIG_X86_64
98 +
99 /*
100 * This version of gettimeofday has microsecond resolution
101 * and better than microsecond precision on fast x86 machines with TSC.
102 @@ -498,6 +503,8 @@
103
104 EXPORT_SYMBOL(do_settimeofday);
105
106 +#endif
107 +
108 static void sync_xen_wallclock(unsigned long dummy);
109 static DEFINE_TIMER(sync_xen_wallclock_timer, sync_xen_wallclock, 0, 0);
110 static void sync_xen_wallclock(unsigned long dummy)
111 @@ -549,11 +556,15 @@
112 return retval;
113 }
114
115 +#ifdef CONFIG_X86_64
116 /* monotonic_clock(): returns # of nanoseconds passed since time_init()
117 * Note: This function is required to return accurate
118 * time even in the absence of multiple timer ticks.
119 */
120 unsigned long long monotonic_clock(void)
121 +#else
122 +unsigned long long sched_clock(void)
123 +#endif
124 {
125 unsigned int cpu = get_cpu();
126 struct shadow_time_info *shadow = &per_cpu(shadow_time, cpu);
127 @@ -573,9 +584,9 @@
128
129 return time;
130 }
131 +#ifdef CONFIG_X86_64
132 EXPORT_SYMBOL(monotonic_clock);
133
134 -#ifdef __x86_64__
135 unsigned long long sched_clock(void)
136 {
137 return monotonic_clock();
138 @@ -745,6 +756,87 @@
139 return IRQ_HANDLED;
140 }
141
142 +#ifndef CONFIG_X86_64
143 +
144 +void tsc_init(void)
145 +{
146 + init_cpu_khz();
147 + printk(KERN_INFO "Xen reported: %u.%03u MHz processor.\n",
148 + cpu_khz / 1000, cpu_khz % 1000);
149 +
150 + use_tsc_delay();
151 +}
152 +
153 +#include <linux/clocksource.h>
154 +
155 +void mark_tsc_unstable(void)
156 +{
157 +#ifndef CONFIG_XEN /* XXX Should tell the hypervisor about this fact. */
158 + tsc_unstable = 1;
159 +#endif
160 +}
161 +EXPORT_SYMBOL_GPL(mark_tsc_unstable);
162 +
163 +static cycle_t xen_clocksource_read(void)
164 +{
165 + cycle_t ret = sched_clock();
166 +
167 +#ifdef CONFIG_SMP
168 + for (;;) {
169 + static cycle_t last_ret;
170 +#ifndef CONFIG_64BIT
171 + cycle_t last = cmpxchg64(&last_ret, 0, 0);
172 +#else
173 + cycle_t last = last_ret;
174 +#define cmpxchg64 cmpxchg
175 +#endif
176 +
177 + if ((s64)(ret - last) < 0) {
178 + if (last - ret > permitted_clock_jitter
179 + && printk_ratelimit()) {
180 + unsigned int cpu = get_cpu();
181 + struct shadow_time_info *shadow = &per_cpu(shadow_time, cpu);
182 +
183 + printk(KERN_WARNING "clocksource/%u: "
184 + "Time went backwards: "
185 + "ret=%Lx delta=%Ld shadow=%Lx offset=%Lx\n",
186 + cpu, ret, ret - last,
187 + shadow->system_timestamp,
188 + get_nsec_offset(shadow));
189 + put_cpu();
190 + }
191 + ret = last;
192 + }
193 + if (cmpxchg64(&last_ret, last, ret) == last)
194 + break;
195 + }
196 +#endif
197 +
198 + return ret;
199 +}
200 +
201 +static struct clocksource clocksource_xen = {
202 + .name = "xen",
203 + .rating = 400,
204 + .read = xen_clocksource_read,
205 + .mask = CLOCKSOURCE_MASK(64),
206 + .mult = 1 << XEN_SHIFT, /* time directly in nanoseconds */
207 + .shift = XEN_SHIFT,
208 + .is_continuous = 1,
209 +};
210 +
211 +static int __init init_xen_clocksource(void)
212 +{
213 + clocksource_xen.mult = clocksource_khz2mult(cpu_khz,
214 + clocksource_xen.shift);
215 +
216 + return clocksource_register(&clocksource_xen);
217 +}
218 +
219 +module_init(init_xen_clocksource);
220 +
221 +#endif
222 +
223 static void init_missing_ticks_accounting(unsigned int cpu)
224 {
225 struct vcpu_register_runstate_memory_area area;
226 @@ -933,11 +1025,11 @@
227
228 update_wallclock();
229
230 +#ifdef CONFIG_X86_64
231 init_cpu_khz();
232 printk(KERN_INFO "Xen reported: %u.%03u MHz processor.\n",
233 cpu_khz / 1000, cpu_khz % 1000);
234
235 -#if defined(__x86_64__)
236 vxtime.mode = VXTIME_TSC;
237 vxtime.quot = (1000000L << 32) / vxtime_hz;
238 vxtime.tsc_quot = (1000L << 32) / cpu_khz;
239 --- a/include/asm-x86/mach-xen/asm/processor_32.h
240 +++ b/include/asm-x86/mach-xen/asm/processor_32.h
241 @@ -23,7 +23,7 @@
242 #include <xen/interface/physdev.h>
243
244 /* flag for disabling the tsc */
245 -extern int tsc_disable;
246 +#define tsc_disable 0
247
248 struct desc_struct {
249 unsigned long a,b;
250 --- a/include/asm-x86/thread_info_32.h
251 +++ b/include/asm-x86/thread_info_32.h
252 @@ -170,11 +170,15 @@
253 #define _TIF_ALLWORK_MASK (0x0000FFFF & ~_TIF_SECCOMP)
254
255 /* flags to check in __switch_to() */
256 +#ifndef CONFIG_XEN
257 #define _TIF_WORK_CTXSW \
258 (_TIF_IO_BITMAP | _TIF_NOTSC | _TIF_DEBUGCTLMSR | \
259 _TIF_DS_AREA_MSR | _TIF_BTS_TRACE_TS)
260 #define _TIF_WORK_CTXSW_PREV _TIF_WORK_CTXSW
261 #define _TIF_WORK_CTXSW_NEXT (_TIF_WORK_CTXSW | _TIF_DEBUG)
262 +#else
263 +#define _TIF_WORK_CTXSW _TIF_DEBUG
264 +#endif
265
266
267 /*