Magellan Linux

Annotation of /trunk/kernel26-alx/patches-2.6.33-r4/0102-2.6.33.3-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1286 - (hide annotations) (download)
Thu Feb 17 15:05:15 2011 UTC (13 years, 2 months ago) by niro
File size: 169949 byte(s)
2.6.33-alx-r4: enabled usbserial generic module for accu-chek II devices
1 niro 1286 diff --git a/Documentation/i2c/busses/i2c-i801 b/Documentation/i2c/busses/i2c-i801
2     index 81c0c59..e1bb5b2 100644
3     --- a/Documentation/i2c/busses/i2c-i801
4     +++ b/Documentation/i2c/busses/i2c-i801
5     @@ -15,7 +15,8 @@ Supported adapters:
6     * Intel 82801I (ICH9)
7     * Intel EP80579 (Tolapai)
8     * Intel 82801JI (ICH10)
9     - * Intel PCH
10     + * Intel 3400/5 Series (PCH)
11     + * Intel Cougar Point (PCH)
12     Datasheets: Publicly available at the Intel website
13    
14     Authors:
15     diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
16     index 6b84a04..cbeb6e0 100644
17     --- a/arch/arm/boot/compressed/head.S
18     +++ b/arch/arm/boot/compressed/head.S
19     @@ -172,7 +172,7 @@ not_angel:
20     adr r0, LC0
21     ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip, sp})
22     THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip} )
23     - THUMB( ldr sp, [r0, #28] )
24     + THUMB( ldr sp, [r0, #32] )
25     subs r0, r0, r1 @ calculate the delta offset
26    
27     @ if delta is zero, we are
28     diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
29     index 5fdeec5..d76279a 100644
30     --- a/arch/ia64/kvm/kvm-ia64.c
31     +++ b/arch/ia64/kvm/kvm-ia64.c
32     @@ -1794,7 +1794,8 @@ static int kvm_ia64_sync_dirty_log(struct kvm *kvm,
33     {
34     struct kvm_memory_slot *memslot;
35     int r, i;
36     - long n, base;
37     + long base;
38     + unsigned long n;
39     unsigned long *dirty_bitmap = (unsigned long *)(kvm->arch.vm_base +
40     offsetof(struct kvm_vm_data, kvm_mem_dirty_log));
41    
42     @@ -1807,7 +1808,7 @@ static int kvm_ia64_sync_dirty_log(struct kvm *kvm,
43     if (!memslot->dirty_bitmap)
44     goto out;
45    
46     - n = ALIGN(memslot->npages, BITS_PER_LONG) / 8;
47     + n = kvm_dirty_bitmap_bytes(memslot);
48     base = memslot->base_gfn / BITS_PER_LONG;
49    
50     for (i = 0; i < n/sizeof(long); ++i) {
51     @@ -1823,7 +1824,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
52     struct kvm_dirty_log *log)
53     {
54     int r;
55     - int n;
56     + unsigned long n;
57     struct kvm_memory_slot *memslot;
58     int is_dirty = 0;
59    
60     @@ -1841,7 +1842,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
61     if (is_dirty) {
62     kvm_flush_remote_tlbs(kvm);
63     memslot = &kvm->memslots[log->slot];
64     - n = ALIGN(memslot->npages, BITS_PER_LONG) / 8;
65     + n = kvm_dirty_bitmap_bytes(memslot);
66     memset(memslot->dirty_bitmap, 0, n);
67     }
68     r = 0;
69     diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
70     index 3e294bd..e6dc595 100644
71     --- a/arch/powerpc/kvm/book3s.c
72     +++ b/arch/powerpc/kvm/book3s.c
73     @@ -848,7 +848,8 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
74     struct kvm_vcpu *vcpu;
75     ulong ga, ga_end;
76     int is_dirty = 0;
77     - int r, n;
78     + int r;
79     + unsigned long n;
80    
81     down_write(&kvm->slots_lock);
82    
83     @@ -866,7 +867,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
84     kvm_for_each_vcpu(n, vcpu, kvm)
85     kvmppc_mmu_pte_pflush(vcpu, ga, ga_end);
86    
87     - n = ALIGN(memslot->npages, BITS_PER_LONG) / 8;
88     + n = kvm_dirty_bitmap_bytes(memslot);
89     memset(memslot->dirty_bitmap, 0, n);
90     }
91    
92     diff --git a/arch/powerpc/platforms/pseries/offline_states.h b/arch/powerpc/platforms/pseries/offline_states.h
93     index 22574e0..202d869 100644
94     --- a/arch/powerpc/platforms/pseries/offline_states.h
95     +++ b/arch/powerpc/platforms/pseries/offline_states.h
96     @@ -9,10 +9,30 @@ enum cpu_state_vals {
97     CPU_MAX_OFFLINE_STATES
98     };
99    
100     +#ifdef CONFIG_HOTPLUG_CPU
101     extern enum cpu_state_vals get_cpu_current_state(int cpu);
102     extern void set_cpu_current_state(int cpu, enum cpu_state_vals state);
103     -extern enum cpu_state_vals get_preferred_offline_state(int cpu);
104     extern void set_preferred_offline_state(int cpu, enum cpu_state_vals state);
105     extern void set_default_offline_state(int cpu);
106     +#else
107     +static inline enum cpu_state_vals get_cpu_current_state(int cpu)
108     +{
109     + return CPU_STATE_ONLINE;
110     +}
111     +
112     +static inline void set_cpu_current_state(int cpu, enum cpu_state_vals state)
113     +{
114     +}
115     +
116     +static inline void set_preferred_offline_state(int cpu, enum cpu_state_vals state)
117     +{
118     +}
119     +
120     +static inline void set_default_offline_state(int cpu)
121     +{
122     +}
123     +#endif
124     +
125     +extern enum cpu_state_vals get_preferred_offline_state(int cpu);
126     extern int start_secondary(void);
127     #endif
128     diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c
129     index 300ab01..5f91a38 100644
130     --- a/arch/s390/mm/vmem.c
131     +++ b/arch/s390/mm/vmem.c
132     @@ -70,12 +70,8 @@ static pte_t __ref *vmem_pte_alloc(void)
133     pte = alloc_bootmem(PTRS_PER_PTE * sizeof(pte_t));
134     if (!pte)
135     return NULL;
136     - if (MACHINE_HAS_HPAGE)
137     - clear_table((unsigned long *) pte, _PAGE_TYPE_EMPTY | _PAGE_CO,
138     - PTRS_PER_PTE * sizeof(pte_t));
139     - else
140     - clear_table((unsigned long *) pte, _PAGE_TYPE_EMPTY,
141     - PTRS_PER_PTE * sizeof(pte_t));
142     + clear_table((unsigned long *) pte, _PAGE_TYPE_EMPTY,
143     + PTRS_PER_PTE * sizeof(pte_t));
144     return pte;
145     }
146    
147     @@ -116,8 +112,7 @@ static int vmem_add_mem(unsigned long start, unsigned long size, int ro)
148     if (MACHINE_HAS_HPAGE && !(address & ~HPAGE_MASK) &&
149     (address + HPAGE_SIZE <= start + size) &&
150     (address >= HPAGE_SIZE)) {
151     - pte_val(pte) |= _SEGMENT_ENTRY_LARGE |
152     - _SEGMENT_ENTRY_CO;
153     + pte_val(pte) |= _SEGMENT_ENTRY_LARGE;
154     pmd_val(*pm_dir) = pte_val(pte);
155     address += HPAGE_SIZE - PAGE_SIZE;
156     continue;
157     diff --git a/arch/sh/include/asm/elf.h b/arch/sh/include/asm/elf.h
158     index ac04255..ce830fa 100644
159     --- a/arch/sh/include/asm/elf.h
160     +++ b/arch/sh/include/asm/elf.h
161     @@ -211,7 +211,9 @@ extern void __kernel_vsyscall;
162    
163     #define VSYSCALL_AUX_ENT \
164     if (vdso_enabled) \
165     - NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE);
166     + NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE); \
167     + else \
168     + NEW_AUX_ENT(AT_IGNORE, 0);
169     #else
170     #define VSYSCALL_AUX_ENT
171     #endif /* CONFIG_VSYSCALL */
172     @@ -219,7 +221,7 @@ extern void __kernel_vsyscall;
173     #ifdef CONFIG_SH_FPU
174     #define FPU_AUX_ENT NEW_AUX_ENT(AT_FPUCW, FPSCR_INIT)
175     #else
176     -#define FPU_AUX_ENT
177     +#define FPU_AUX_ENT NEW_AUX_ENT(AT_IGNORE, 0)
178     #endif
179    
180     extern int l1i_cache_shape, l1d_cache_shape, l2_cache_shape;
181     diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c
182     index 983e079..1d19c19 100644
183     --- a/arch/sh/kernel/smp.c
184     +++ b/arch/sh/kernel/smp.c
185     @@ -69,6 +69,7 @@ asmlinkage void __cpuinit start_secondary(void)
186     unsigned int cpu;
187     struct mm_struct *mm = &init_mm;
188    
189     + enable_mmu();
190     atomic_inc(&mm->mm_count);
191     atomic_inc(&mm->mm_users);
192     current->active_mm = mm;
193     diff --git a/arch/sparc/kernel/ptrace_32.c b/arch/sparc/kernel/ptrace_32.c
194     index 7e3dfd9..e608f39 100644
195     --- a/arch/sparc/kernel/ptrace_32.c
196     +++ b/arch/sparc/kernel/ptrace_32.c
197     @@ -65,6 +65,7 @@ static int genregs32_get(struct task_struct *target,
198     *k++ = regs->u_regs[pos++];
199    
200     reg_window = (unsigned long __user *) regs->u_regs[UREG_I6];
201     + reg_window -= 16;
202     for (; count > 0 && pos < 32; count--) {
203     if (get_user(*k++, &reg_window[pos++]))
204     return -EFAULT;
205     @@ -76,6 +77,7 @@ static int genregs32_get(struct task_struct *target,
206     }
207    
208     reg_window = (unsigned long __user *) regs->u_regs[UREG_I6];
209     + reg_window -= 16;
210     for (; count > 0 && pos < 32; count--) {
211     if (get_user(reg, &reg_window[pos++]) ||
212     put_user(reg, u++))
213     @@ -141,6 +143,7 @@ static int genregs32_set(struct task_struct *target,
214     regs->u_regs[pos++] = *k++;
215    
216     reg_window = (unsigned long __user *) regs->u_regs[UREG_I6];
217     + reg_window -= 16;
218     for (; count > 0 && pos < 32; count--) {
219     if (put_user(*k++, &reg_window[pos++]))
220     return -EFAULT;
221     @@ -153,6 +156,7 @@ static int genregs32_set(struct task_struct *target,
222     }
223    
224     reg_window = (unsigned long __user *) regs->u_regs[UREG_I6];
225     + reg_window -= 16;
226     for (; count > 0 && pos < 32; count--) {
227     if (get_user(reg, u++) ||
228     put_user(reg, &reg_window[pos++]))
229     diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c
230     index 2f6524d..aa90da0 100644
231     --- a/arch/sparc/kernel/ptrace_64.c
232     +++ b/arch/sparc/kernel/ptrace_64.c
233     @@ -492,6 +492,7 @@ static int genregs32_get(struct task_struct *target,
234     *k++ = regs->u_regs[pos++];
235    
236     reg_window = (compat_ulong_t __user *) regs->u_regs[UREG_I6];
237     + reg_window -= 16;
238     if (target == current) {
239     for (; count > 0 && pos < 32; count--) {
240     if (get_user(*k++, &reg_window[pos++]))
241     @@ -516,6 +517,7 @@ static int genregs32_get(struct task_struct *target,
242     }
243    
244     reg_window = (compat_ulong_t __user *) regs->u_regs[UREG_I6];
245     + reg_window -= 16;
246     if (target == current) {
247     for (; count > 0 && pos < 32; count--) {
248     if (get_user(reg, &reg_window[pos++]) ||
249     @@ -599,6 +601,7 @@ static int genregs32_set(struct task_struct *target,
250     regs->u_regs[pos++] = *k++;
251    
252     reg_window = (compat_ulong_t __user *) regs->u_regs[UREG_I6];
253     + reg_window -= 16;
254     if (target == current) {
255     for (; count > 0 && pos < 32; count--) {
256     if (put_user(*k++, &reg_window[pos++]))
257     @@ -625,6 +628,7 @@ static int genregs32_set(struct task_struct *target,
258     }
259    
260     reg_window = (compat_ulong_t __user *) regs->u_regs[UREG_I6];
261     + reg_window -= 16;
262     if (target == current) {
263     for (; count > 0 && pos < 32; count--) {
264     if (get_user(reg, u++) ||
265     diff --git a/arch/um/sys-x86_64/Makefile b/arch/um/sys-x86_64/Makefile
266     index 2201e9c..c1ea9eb 100644
267     --- a/arch/um/sys-x86_64/Makefile
268     +++ b/arch/um/sys-x86_64/Makefile
269     @@ -8,7 +8,8 @@ obj-y = bug.o bugs.o delay.o fault.o ldt.o mem.o ptrace.o ptrace_user.o \
270     setjmp.o signal.o stub.o stub_segv.o syscalls.o syscall_table.o \
271     sysrq.o ksyms.o tls.o
272    
273     -subarch-obj-y = lib/csum-partial_64.o lib/memcpy_64.o lib/thunk_64.o
274     +subarch-obj-y = lib/csum-partial_64.o lib/memcpy_64.o lib/thunk_64.o \
275     + lib/rwsem_64.o
276     subarch-obj-$(CONFIG_MODULES) += kernel/module.o
277    
278     ldt-y = ../sys-i386/ldt.o
279     diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu
280     index f20ddf8..a198293 100644
281     --- a/arch/x86/Kconfig.cpu
282     +++ b/arch/x86/Kconfig.cpu
283     @@ -319,7 +319,7 @@ config X86_L1_CACHE_SHIFT
284    
285     config X86_XADD
286     def_bool y
287     - depends on X86_32 && !M386
288     + depends on X86_64 || !M386
289    
290     config X86_PPRO_FENCE
291     bool "PentiumPro memory ordering errata workaround"
292     diff --git a/arch/x86/include/asm/rwsem.h b/arch/x86/include/asm/rwsem.h
293     index ca7517d..606ede1 100644
294     --- a/arch/x86/include/asm/rwsem.h
295     +++ b/arch/x86/include/asm/rwsem.h
296     @@ -41,6 +41,7 @@
297     #include <linux/list.h>
298     #include <linux/spinlock.h>
299     #include <linux/lockdep.h>
300     +#include <asm/asm.h>
301    
302     struct rwsem_waiter;
303    
304     @@ -55,17 +56,28 @@ extern asmregparm struct rw_semaphore *
305    
306     /*
307     * the semaphore definition
308     + *
309     + * The bias values and the counter type limits the number of
310     + * potential readers/writers to 32767 for 32 bits and 2147483647
311     + * for 64 bits.
312     */
313    
314     -#define RWSEM_UNLOCKED_VALUE 0x00000000
315     -#define RWSEM_ACTIVE_BIAS 0x00000001
316     -#define RWSEM_ACTIVE_MASK 0x0000ffff
317     -#define RWSEM_WAITING_BIAS (-0x00010000)
318     +#ifdef CONFIG_X86_64
319     +# define RWSEM_ACTIVE_MASK 0xffffffffL
320     +#else
321     +# define RWSEM_ACTIVE_MASK 0x0000ffffL
322     +#endif
323     +
324     +#define RWSEM_UNLOCKED_VALUE 0x00000000L
325     +#define RWSEM_ACTIVE_BIAS 0x00000001L
326     +#define RWSEM_WAITING_BIAS (-RWSEM_ACTIVE_MASK-1)
327     #define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS
328     #define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
329    
330     +typedef signed long rwsem_count_t;
331     +
332     struct rw_semaphore {
333     - signed long count;
334     + rwsem_count_t count;
335     spinlock_t wait_lock;
336     struct list_head wait_list;
337     #ifdef CONFIG_DEBUG_LOCK_ALLOC
338     @@ -105,7 +117,7 @@ do { \
339     static inline void __down_read(struct rw_semaphore *sem)
340     {
341     asm volatile("# beginning down_read\n\t"
342     - LOCK_PREFIX " incl (%%eax)\n\t"
343     + LOCK_PREFIX _ASM_INC "(%1)\n\t"
344     /* adds 0x00000001, returns the old value */
345     " jns 1f\n"
346     " call call_rwsem_down_read_failed\n"
347     @@ -121,14 +133,14 @@ static inline void __down_read(struct rw_semaphore *sem)
348     */
349     static inline int __down_read_trylock(struct rw_semaphore *sem)
350     {
351     - __s32 result, tmp;
352     + rwsem_count_t result, tmp;
353     asm volatile("# beginning __down_read_trylock\n\t"
354     - " movl %0,%1\n\t"
355     + " mov %0,%1\n\t"
356     "1:\n\t"
357     - " movl %1,%2\n\t"
358     - " addl %3,%2\n\t"
359     + " mov %1,%2\n\t"
360     + " add %3,%2\n\t"
361     " jle 2f\n\t"
362     - LOCK_PREFIX " cmpxchgl %2,%0\n\t"
363     + LOCK_PREFIX " cmpxchg %2,%0\n\t"
364     " jnz 1b\n\t"
365     "2:\n\t"
366     "# ending __down_read_trylock\n\t"
367     @@ -143,13 +155,13 @@ static inline int __down_read_trylock(struct rw_semaphore *sem)
368     */
369     static inline void __down_write_nested(struct rw_semaphore *sem, int subclass)
370     {
371     - int tmp;
372     + rwsem_count_t tmp;
373    
374     tmp = RWSEM_ACTIVE_WRITE_BIAS;
375     asm volatile("# beginning down_write\n\t"
376     - LOCK_PREFIX " xadd %%edx,(%%eax)\n\t"
377     + LOCK_PREFIX " xadd %1,(%2)\n\t"
378     /* subtract 0x0000ffff, returns the old value */
379     - " testl %%edx,%%edx\n\t"
380     + " test %1,%1\n\t"
381     /* was the count 0 before? */
382     " jz 1f\n"
383     " call call_rwsem_down_write_failed\n"
384     @@ -170,9 +182,9 @@ static inline void __down_write(struct rw_semaphore *sem)
385     */
386     static inline int __down_write_trylock(struct rw_semaphore *sem)
387     {
388     - signed long ret = cmpxchg(&sem->count,
389     - RWSEM_UNLOCKED_VALUE,
390     - RWSEM_ACTIVE_WRITE_BIAS);
391     + rwsem_count_t ret = cmpxchg(&sem->count,
392     + RWSEM_UNLOCKED_VALUE,
393     + RWSEM_ACTIVE_WRITE_BIAS);
394     if (ret == RWSEM_UNLOCKED_VALUE)
395     return 1;
396     return 0;
397     @@ -183,9 +195,9 @@ static inline int __down_write_trylock(struct rw_semaphore *sem)
398     */
399     static inline void __up_read(struct rw_semaphore *sem)
400     {
401     - __s32 tmp = -RWSEM_ACTIVE_READ_BIAS;
402     + rwsem_count_t tmp = -RWSEM_ACTIVE_READ_BIAS;
403     asm volatile("# beginning __up_read\n\t"
404     - LOCK_PREFIX " xadd %%edx,(%%eax)\n\t"
405     + LOCK_PREFIX " xadd %1,(%2)\n\t"
406     /* subtracts 1, returns the old value */
407     " jns 1f\n\t"
408     " call call_rwsem_wake\n"
409     @@ -201,18 +213,18 @@ static inline void __up_read(struct rw_semaphore *sem)
410     */
411     static inline void __up_write(struct rw_semaphore *sem)
412     {
413     + rwsem_count_t tmp;
414     asm volatile("# beginning __up_write\n\t"
415     - " movl %2,%%edx\n\t"
416     - LOCK_PREFIX " xaddl %%edx,(%%eax)\n\t"
417     + LOCK_PREFIX " xadd %1,(%2)\n\t"
418     /* tries to transition
419     0xffff0001 -> 0x00000000 */
420     " jz 1f\n"
421     " call call_rwsem_wake\n"
422     "1:\n\t"
423     "# ending __up_write\n"
424     - : "+m" (sem->count)
425     - : "a" (sem), "i" (-RWSEM_ACTIVE_WRITE_BIAS)
426     - : "memory", "cc", "edx");
427     + : "+m" (sem->count), "=d" (tmp)
428     + : "a" (sem), "1" (-RWSEM_ACTIVE_WRITE_BIAS)
429     + : "memory", "cc");
430     }
431    
432     /*
433     @@ -221,33 +233,38 @@ static inline void __up_write(struct rw_semaphore *sem)
434     static inline void __downgrade_write(struct rw_semaphore *sem)
435     {
436     asm volatile("# beginning __downgrade_write\n\t"
437     - LOCK_PREFIX " addl %2,(%%eax)\n\t"
438     - /* transitions 0xZZZZ0001 -> 0xYYYY0001 */
439     + LOCK_PREFIX _ASM_ADD "%2,(%1)\n\t"
440     + /*
441     + * transitions 0xZZZZ0001 -> 0xYYYY0001 (i386)
442     + * 0xZZZZZZZZ00000001 -> 0xYYYYYYYY00000001 (x86_64)
443     + */
444     " jns 1f\n\t"
445     " call call_rwsem_downgrade_wake\n"
446     "1:\n\t"
447     "# ending __downgrade_write\n"
448     : "+m" (sem->count)
449     - : "a" (sem), "i" (-RWSEM_WAITING_BIAS)
450     + : "a" (sem), "er" (-RWSEM_WAITING_BIAS)
451     : "memory", "cc");
452     }
453    
454     /*
455     * implement atomic add functionality
456     */
457     -static inline void rwsem_atomic_add(int delta, struct rw_semaphore *sem)
458     +static inline void rwsem_atomic_add(rwsem_count_t delta,
459     + struct rw_semaphore *sem)
460     {
461     - asm volatile(LOCK_PREFIX "addl %1,%0"
462     + asm volatile(LOCK_PREFIX _ASM_ADD "%1,%0"
463     : "+m" (sem->count)
464     - : "ir" (delta));
465     + : "er" (delta));
466     }
467    
468     /*
469     * implement exchange and add functionality
470     */
471     -static inline int rwsem_atomic_update(int delta, struct rw_semaphore *sem)
472     +static inline rwsem_count_t rwsem_atomic_update(rwsem_count_t delta,
473     + struct rw_semaphore *sem)
474     {
475     - int tmp = delta;
476     + rwsem_count_t tmp = delta;
477    
478     asm volatile(LOCK_PREFIX "xadd %0,%1"
479     : "+r" (tmp), "+m" (sem->count)
480     diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h
481     index 1e79678..4cfc908 100644
482     --- a/arch/x86/include/asm/smp.h
483     +++ b/arch/x86/include/asm/smp.h
484     @@ -135,6 +135,8 @@ int native_cpu_disable(void);
485     void native_cpu_die(unsigned int cpu);
486     void native_play_dead(void);
487     void play_dead_common(void);
488     +void wbinvd_on_cpu(int cpu);
489     +int wbinvd_on_all_cpus(void);
490    
491     void native_send_call_func_ipi(const struct cpumask *mask);
492     void native_send_call_func_single_ipi(int cpu);
493     @@ -147,6 +149,13 @@ static inline int num_booting_cpus(void)
494     {
495     return cpumask_weight(cpu_callout_mask);
496     }
497     +#else /* !CONFIG_SMP */
498     +#define wbinvd_on_cpu(cpu) wbinvd()
499     +static inline int wbinvd_on_all_cpus(void)
500     +{
501     + wbinvd();
502     + return 0;
503     +}
504     #endif /* CONFIG_SMP */
505    
506     extern unsigned disabled_cpus __cpuinitdata;
507     diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c
508     index adb0ba0..2e77516 100644
509     --- a/arch/x86/kernel/amd_iommu.c
510     +++ b/arch/x86/kernel/amd_iommu.c
511     @@ -2298,7 +2298,7 @@ static void cleanup_domain(struct protection_domain *domain)
512     list_for_each_entry_safe(dev_data, next, &domain->dev_list, list) {
513     struct device *dev = dev_data->dev;
514    
515     - do_detach(dev);
516     + __detach_device(dev);
517     atomic_set(&dev_data->bind, 0);
518     }
519    
520     @@ -2379,9 +2379,7 @@ static void amd_iommu_domain_destroy(struct iommu_domain *dom)
521    
522     free_pagetable(domain);
523    
524     - domain_id_free(domain->id);
525     -
526     - kfree(domain);
527     + protection_domain_free(domain);
528    
529     dom->priv = NULL;
530     }
531     diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c
532     index 9dc91b4..883d619 100644
533     --- a/arch/x86/kernel/amd_iommu_init.c
534     +++ b/arch/x86/kernel/amd_iommu_init.c
535     @@ -1288,6 +1288,8 @@ static int __init amd_iommu_init(void)
536     if (ret)
537     goto free;
538    
539     + enable_iommus();
540     +
541     if (iommu_pass_through)
542     ret = amd_iommu_init_passthrough();
543     else
544     @@ -1300,8 +1302,6 @@ static int __init amd_iommu_init(void)
545    
546     amd_iommu_init_notifier();
547    
548     - enable_iommus();
549     -
550     if (iommu_pass_through)
551     goto out;
552    
553     @@ -1315,6 +1315,7 @@ out:
554     return ret;
555    
556     free:
557     + disable_iommus();
558    
559     amd_iommu_uninit_devices();
560    
561     diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/aperture_64.c
562     index f147a95..19f2c70 100644
563     --- a/arch/x86/kernel/aperture_64.c
564     +++ b/arch/x86/kernel/aperture_64.c
565     @@ -394,6 +394,7 @@ void __init gart_iommu_hole_init(void)
566     for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) {
567     int bus;
568     int dev_base, dev_limit;
569     + u32 ctl;
570    
571     bus = bus_dev_ranges[i].bus;
572     dev_base = bus_dev_ranges[i].dev_base;
573     @@ -407,7 +408,19 @@ void __init gart_iommu_hole_init(void)
574     gart_iommu_aperture = 1;
575     x86_init.iommu.iommu_init = gart_iommu_init;
576    
577     - aper_order = (read_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL) >> 1) & 7;
578     + ctl = read_pci_config(bus, slot, 3,
579     + AMD64_GARTAPERTURECTL);
580     +
581     + /*
582     + * Before we do anything else disable the GART. It may
583     + * still be enabled if we boot into a crash-kernel here.
584     + * Reconfiguring the GART while it is enabled could have
585     + * unknown side-effects.
586     + */
587     + ctl &= ~GARTEN;
588     + write_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL, ctl);
589     +
590     + aper_order = (ctl >> 1) & 7;
591     aper_size = (32 * 1024 * 1024) << aper_order;
592     aper_base = read_pci_config(bus, slot, 3, AMD64_GARTAPERTUREBASE) & 0x7fff;
593     aper_base <<= 25;
594     diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
595     index dfca210..d4df517 100644
596     --- a/arch/x86/kernel/apic/apic.c
597     +++ b/arch/x86/kernel/apic/apic.c
598     @@ -1640,8 +1640,10 @@ int __init APIC_init_uniprocessor(void)
599     }
600     #endif
601    
602     +#ifndef CONFIG_SMP
603     enable_IR_x2apic();
604     default_setup_apic_routing();
605     +#endif
606    
607     verify_local_APIC();
608     connect_bsp_APIC();
609     diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c
610     index fc6c8ef..d440123 100644
611     --- a/arch/x86/kernel/cpu/intel_cacheinfo.c
612     +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c
613     @@ -18,6 +18,7 @@
614     #include <asm/processor.h>
615     #include <linux/smp.h>
616     #include <asm/k8.h>
617     +#include <asm/smp.h>
618    
619     #define LVL_1_INST 1
620     #define LVL_1_DATA 2
621     @@ -150,7 +151,8 @@ struct _cpuid4_info {
622     union _cpuid4_leaf_ebx ebx;
623     union _cpuid4_leaf_ecx ecx;
624     unsigned long size;
625     - unsigned long can_disable;
626     + bool can_disable;
627     + unsigned int l3_indices;
628     DECLARE_BITMAP(shared_cpu_map, NR_CPUS);
629     };
630    
631     @@ -160,7 +162,8 @@ struct _cpuid4_info_regs {
632     union _cpuid4_leaf_ebx ebx;
633     union _cpuid4_leaf_ecx ecx;
634     unsigned long size;
635     - unsigned long can_disable;
636     + bool can_disable;
637     + unsigned int l3_indices;
638     };
639    
640     unsigned short num_cache_leaves;
641     @@ -290,6 +293,36 @@ amd_cpuid4(int leaf, union _cpuid4_leaf_eax *eax,
642     (ebx->split.ways_of_associativity + 1) - 1;
643     }
644    
645     +struct _cache_attr {
646     + struct attribute attr;
647     + ssize_t (*show)(struct _cpuid4_info *, char *);
648     + ssize_t (*store)(struct _cpuid4_info *, const char *, size_t count);
649     +};
650     +
651     +#ifdef CONFIG_CPU_SUP_AMD
652     +static unsigned int __cpuinit amd_calc_l3_indices(void)
653     +{
654     + /*
655     + * We're called over smp_call_function_single() and therefore
656     + * are on the correct cpu.
657     + */
658     + int cpu = smp_processor_id();
659     + int node = cpu_to_node(cpu);
660     + struct pci_dev *dev = node_to_k8_nb_misc(node);
661     + unsigned int sc0, sc1, sc2, sc3;
662     + u32 val = 0;
663     +
664     + pci_read_config_dword(dev, 0x1C4, &val);
665     +
666     + /* calculate subcache sizes */
667     + sc0 = !(val & BIT(0));
668     + sc1 = !(val & BIT(4));
669     + sc2 = !(val & BIT(8)) + !(val & BIT(9));
670     + sc3 = !(val & BIT(12)) + !(val & BIT(13));
671     +
672     + return (max(max(max(sc0, sc1), sc2), sc3) << 10) - 1;
673     +}
674     +
675     static void __cpuinit
676     amd_check_l3_disable(int index, struct _cpuid4_info_regs *this_leaf)
677     {
678     @@ -299,12 +332,103 @@ amd_check_l3_disable(int index, struct _cpuid4_info_regs *this_leaf)
679     if (boot_cpu_data.x86 == 0x11)
680     return;
681    
682     - /* see erratum #382 */
683     - if ((boot_cpu_data.x86 == 0x10) && (boot_cpu_data.x86_model < 0x8))
684     + /* see errata #382 and #388 */
685     + if ((boot_cpu_data.x86 == 0x10) &&
686     + ((boot_cpu_data.x86_model < 0x8) ||
687     + (boot_cpu_data.x86_mask < 0x1)))
688     return;
689    
690     - this_leaf->can_disable = 1;
691     + this_leaf->can_disable = true;
692     + this_leaf->l3_indices = amd_calc_l3_indices();
693     +}
694     +
695     +static ssize_t show_cache_disable(struct _cpuid4_info *this_leaf, char *buf,
696     + unsigned int index)
697     +{
698     + int cpu = cpumask_first(to_cpumask(this_leaf->shared_cpu_map));
699     + int node = amd_get_nb_id(cpu);
700     + struct pci_dev *dev = node_to_k8_nb_misc(node);
701     + unsigned int reg = 0;
702     +
703     + if (!this_leaf->can_disable)
704     + return -EINVAL;
705     +
706     + if (!dev)
707     + return -EINVAL;
708     +
709     + pci_read_config_dword(dev, 0x1BC + index * 4, &reg);
710     + return sprintf(buf, "0x%08x\n", reg);
711     +}
712     +
713     +#define SHOW_CACHE_DISABLE(index) \
714     +static ssize_t \
715     +show_cache_disable_##index(struct _cpuid4_info *this_leaf, char *buf) \
716     +{ \
717     + return show_cache_disable(this_leaf, buf, index); \
718     +}
719     +SHOW_CACHE_DISABLE(0)
720     +SHOW_CACHE_DISABLE(1)
721     +
722     +static ssize_t store_cache_disable(struct _cpuid4_info *this_leaf,
723     + const char *buf, size_t count, unsigned int index)
724     +{
725     + int cpu = cpumask_first(to_cpumask(this_leaf->shared_cpu_map));
726     + int node = amd_get_nb_id(cpu);
727     + struct pci_dev *dev = node_to_k8_nb_misc(node);
728     + unsigned long val = 0;
729     +
730     +#define SUBCACHE_MASK (3UL << 20)
731     +#define SUBCACHE_INDEX 0xfff
732     +
733     + if (!this_leaf->can_disable)
734     + return -EINVAL;
735     +
736     + if (!capable(CAP_SYS_ADMIN))
737     + return -EPERM;
738     +
739     + if (!dev)
740     + return -EINVAL;
741     +
742     + if (strict_strtoul(buf, 10, &val) < 0)
743     + return -EINVAL;
744     +
745     + /* do not allow writes outside of allowed bits */
746     + if ((val & ~(SUBCACHE_MASK | SUBCACHE_INDEX)) ||
747     + ((val & SUBCACHE_INDEX) > this_leaf->l3_indices))
748     + return -EINVAL;
749     +
750     + val |= BIT(30);
751     + pci_write_config_dword(dev, 0x1BC + index * 4, val);
752     + /*
753     + * We need to WBINVD on a core on the node containing the L3 cache which
754     + * indices we disable therefore a simple wbinvd() is not sufficient.
755     + */
756     + wbinvd_on_cpu(cpu);
757     + pci_write_config_dword(dev, 0x1BC + index * 4, val | BIT(31));
758     + return count;
759     +}
760     +
761     +#define STORE_CACHE_DISABLE(index) \
762     +static ssize_t \
763     +store_cache_disable_##index(struct _cpuid4_info *this_leaf, \
764     + const char *buf, size_t count) \
765     +{ \
766     + return store_cache_disable(this_leaf, buf, count, index); \
767     }
768     +STORE_CACHE_DISABLE(0)
769     +STORE_CACHE_DISABLE(1)
770     +
771     +static struct _cache_attr cache_disable_0 = __ATTR(cache_disable_0, 0644,
772     + show_cache_disable_0, store_cache_disable_0);
773     +static struct _cache_attr cache_disable_1 = __ATTR(cache_disable_1, 0644,
774     + show_cache_disable_1, store_cache_disable_1);
775     +
776     +#else /* CONFIG_CPU_SUP_AMD */
777     +static void __cpuinit
778     +amd_check_l3_disable(int index, struct _cpuid4_info_regs *this_leaf)
779     +{
780     +};
781     +#endif /* CONFIG_CPU_SUP_AMD */
782    
783     static int
784     __cpuinit cpuid4_cache_lookup_regs(int index,
785     @@ -711,82 +835,6 @@ static ssize_t show_type(struct _cpuid4_info *this_leaf, char *buf)
786     #define to_object(k) container_of(k, struct _index_kobject, kobj)
787     #define to_attr(a) container_of(a, struct _cache_attr, attr)
788    
789     -static ssize_t show_cache_disable(struct _cpuid4_info *this_leaf, char *buf,
790     - unsigned int index)
791     -{
792     - int cpu = cpumask_first(to_cpumask(this_leaf->shared_cpu_map));
793     - int node = cpu_to_node(cpu);
794     - struct pci_dev *dev = node_to_k8_nb_misc(node);
795     - unsigned int reg = 0;
796     -
797     - if (!this_leaf->can_disable)
798     - return -EINVAL;
799     -
800     - if (!dev)
801     - return -EINVAL;
802     -
803     - pci_read_config_dword(dev, 0x1BC + index * 4, &reg);
804     - return sprintf(buf, "%x\n", reg);
805     -}
806     -
807     -#define SHOW_CACHE_DISABLE(index) \
808     -static ssize_t \
809     -show_cache_disable_##index(struct _cpuid4_info *this_leaf, char *buf) \
810     -{ \
811     - return show_cache_disable(this_leaf, buf, index); \
812     -}
813     -SHOW_CACHE_DISABLE(0)
814     -SHOW_CACHE_DISABLE(1)
815     -
816     -static ssize_t store_cache_disable(struct _cpuid4_info *this_leaf,
817     - const char *buf, size_t count, unsigned int index)
818     -{
819     - int cpu = cpumask_first(to_cpumask(this_leaf->shared_cpu_map));
820     - int node = cpu_to_node(cpu);
821     - struct pci_dev *dev = node_to_k8_nb_misc(node);
822     - unsigned long val = 0;
823     - unsigned int scrubber = 0;
824     -
825     - if (!this_leaf->can_disable)
826     - return -EINVAL;
827     -
828     - if (!capable(CAP_SYS_ADMIN))
829     - return -EPERM;
830     -
831     - if (!dev)
832     - return -EINVAL;
833     -
834     - if (strict_strtoul(buf, 10, &val) < 0)
835     - return -EINVAL;
836     -
837     - val |= 0xc0000000;
838     -
839     - pci_read_config_dword(dev, 0x58, &scrubber);
840     - scrubber &= ~0x1f000000;
841     - pci_write_config_dword(dev, 0x58, scrubber);
842     -
843     - pci_write_config_dword(dev, 0x1BC + index * 4, val & ~0x40000000);
844     - wbinvd();
845     - pci_write_config_dword(dev, 0x1BC + index * 4, val);
846     - return count;
847     -}
848     -
849     -#define STORE_CACHE_DISABLE(index) \
850     -static ssize_t \
851     -store_cache_disable_##index(struct _cpuid4_info *this_leaf, \
852     - const char *buf, size_t count) \
853     -{ \
854     - return store_cache_disable(this_leaf, buf, count, index); \
855     -}
856     -STORE_CACHE_DISABLE(0)
857     -STORE_CACHE_DISABLE(1)
858     -
859     -struct _cache_attr {
860     - struct attribute attr;
861     - ssize_t (*show)(struct _cpuid4_info *, char *);
862     - ssize_t (*store)(struct _cpuid4_info *, const char *, size_t count);
863     -};
864     -
865     #define define_one_ro(_name) \
866     static struct _cache_attr _name = \
867     __ATTR(_name, 0444, show_##_name, NULL)
868     @@ -801,23 +849,28 @@ define_one_ro(size);
869     define_one_ro(shared_cpu_map);
870     define_one_ro(shared_cpu_list);
871    
872     -static struct _cache_attr cache_disable_0 = __ATTR(cache_disable_0, 0644,
873     - show_cache_disable_0, store_cache_disable_0);
874     -static struct _cache_attr cache_disable_1 = __ATTR(cache_disable_1, 0644,
875     - show_cache_disable_1, store_cache_disable_1);
876     +#define DEFAULT_SYSFS_CACHE_ATTRS \
877     + &type.attr, \
878     + &level.attr, \
879     + &coherency_line_size.attr, \
880     + &physical_line_partition.attr, \
881     + &ways_of_associativity.attr, \
882     + &number_of_sets.attr, \
883     + &size.attr, \
884     + &shared_cpu_map.attr, \
885     + &shared_cpu_list.attr
886    
887     static struct attribute *default_attrs[] = {
888     - &type.attr,
889     - &level.attr,
890     - &coherency_line_size.attr,
891     - &physical_line_partition.attr,
892     - &ways_of_associativity.attr,
893     - &number_of_sets.attr,
894     - &size.attr,
895     - &shared_cpu_map.attr,
896     - &shared_cpu_list.attr,
897     + DEFAULT_SYSFS_CACHE_ATTRS,
898     + NULL
899     +};
900     +
901     +static struct attribute *default_l3_attrs[] = {
902     + DEFAULT_SYSFS_CACHE_ATTRS,
903     +#ifdef CONFIG_CPU_SUP_AMD
904     &cache_disable_0.attr,
905     &cache_disable_1.attr,
906     +#endif
907     NULL
908     };
909    
910     @@ -908,6 +961,7 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev)
911     unsigned int cpu = sys_dev->id;
912     unsigned long i, j;
913     struct _index_kobject *this_object;
914     + struct _cpuid4_info *this_leaf;
915     int retval;
916    
917     retval = cpuid4_cache_sysfs_init(cpu);
918     @@ -926,6 +980,14 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev)
919     this_object = INDEX_KOBJECT_PTR(cpu, i);
920     this_object->cpu = cpu;
921     this_object->index = i;
922     +
923     + this_leaf = CPUID4_INFO_IDX(cpu, i);
924     +
925     + if (this_leaf->can_disable)
926     + ktype_cache.default_attrs = default_l3_attrs;
927     + else
928     + ktype_cache.default_attrs = default_attrs;
929     +
930     retval = kobject_init_and_add(&(this_object->kobj),
931     &ktype_cache,
932     per_cpu(ici_cache_kobject, cpu),
933     diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
934     index 98819b3..c7ca8e2 100644
935     --- a/arch/x86/kernel/cpu/perf_event.c
936     +++ b/arch/x86/kernel/cpu/perf_event.c
937     @@ -245,6 +245,97 @@ static u64 __read_mostly hw_cache_event_ids
938     [PERF_COUNT_HW_CACHE_OP_MAX]
939     [PERF_COUNT_HW_CACHE_RESULT_MAX];
940    
941     +static const u64 westmere_hw_cache_event_ids
942     + [PERF_COUNT_HW_CACHE_MAX]
943     + [PERF_COUNT_HW_CACHE_OP_MAX]
944     + [PERF_COUNT_HW_CACHE_RESULT_MAX] =
945     +{
946     + [ C(L1D) ] = {
947     + [ C(OP_READ) ] = {
948     + [ C(RESULT_ACCESS) ] = 0x010b, /* MEM_INST_RETIRED.LOADS */
949     + [ C(RESULT_MISS) ] = 0x0151, /* L1D.REPL */
950     + },
951     + [ C(OP_WRITE) ] = {
952     + [ C(RESULT_ACCESS) ] = 0x020b, /* MEM_INST_RETURED.STORES */
953     + [ C(RESULT_MISS) ] = 0x0251, /* L1D.M_REPL */
954     + },
955     + [ C(OP_PREFETCH) ] = {
956     + [ C(RESULT_ACCESS) ] = 0x014e, /* L1D_PREFETCH.REQUESTS */
957     + [ C(RESULT_MISS) ] = 0x024e, /* L1D_PREFETCH.MISS */
958     + },
959     + },
960     + [ C(L1I ) ] = {
961     + [ C(OP_READ) ] = {
962     + [ C(RESULT_ACCESS) ] = 0x0380, /* L1I.READS */
963     + [ C(RESULT_MISS) ] = 0x0280, /* L1I.MISSES */
964     + },
965     + [ C(OP_WRITE) ] = {
966     + [ C(RESULT_ACCESS) ] = -1,
967     + [ C(RESULT_MISS) ] = -1,
968     + },
969     + [ C(OP_PREFETCH) ] = {
970     + [ C(RESULT_ACCESS) ] = 0x0,
971     + [ C(RESULT_MISS) ] = 0x0,
972     + },
973     + },
974     + [ C(LL ) ] = {
975     + [ C(OP_READ) ] = {
976     + [ C(RESULT_ACCESS) ] = 0x0324, /* L2_RQSTS.LOADS */
977     + [ C(RESULT_MISS) ] = 0x0224, /* L2_RQSTS.LD_MISS */
978     + },
979     + [ C(OP_WRITE) ] = {
980     + [ C(RESULT_ACCESS) ] = 0x0c24, /* L2_RQSTS.RFOS */
981     + [ C(RESULT_MISS) ] = 0x0824, /* L2_RQSTS.RFO_MISS */
982     + },
983     + [ C(OP_PREFETCH) ] = {
984     + [ C(RESULT_ACCESS) ] = 0x4f2e, /* LLC Reference */
985     + [ C(RESULT_MISS) ] = 0x412e, /* LLC Misses */
986     + },
987     + },
988     + [ C(DTLB) ] = {
989     + [ C(OP_READ) ] = {
990     + [ C(RESULT_ACCESS) ] = 0x010b, /* MEM_INST_RETIRED.LOADS */
991     + [ C(RESULT_MISS) ] = 0x0108, /* DTLB_LOAD_MISSES.ANY */
992     + },
993     + [ C(OP_WRITE) ] = {
994     + [ C(RESULT_ACCESS) ] = 0x020b, /* MEM_INST_RETURED.STORES */
995     + [ C(RESULT_MISS) ] = 0x010c, /* MEM_STORE_RETIRED.DTLB_MISS */
996     + },
997     + [ C(OP_PREFETCH) ] = {
998     + [ C(RESULT_ACCESS) ] = 0x0,
999     + [ C(RESULT_MISS) ] = 0x0,
1000     + },
1001     + },
1002     + [ C(ITLB) ] = {
1003     + [ C(OP_READ) ] = {
1004     + [ C(RESULT_ACCESS) ] = 0x01c0, /* INST_RETIRED.ANY_P */
1005     + [ C(RESULT_MISS) ] = 0x0185, /* ITLB_MISSES.ANY */
1006     + },
1007     + [ C(OP_WRITE) ] = {
1008     + [ C(RESULT_ACCESS) ] = -1,
1009     + [ C(RESULT_MISS) ] = -1,
1010     + },
1011     + [ C(OP_PREFETCH) ] = {
1012     + [ C(RESULT_ACCESS) ] = -1,
1013     + [ C(RESULT_MISS) ] = -1,
1014     + },
1015     + },
1016     + [ C(BPU ) ] = {
1017     + [ C(OP_READ) ] = {
1018     + [ C(RESULT_ACCESS) ] = 0x00c4, /* BR_INST_RETIRED.ALL_BRANCHES */
1019     + [ C(RESULT_MISS) ] = 0x03e8, /* BPU_CLEARS.ANY */
1020     + },
1021     + [ C(OP_WRITE) ] = {
1022     + [ C(RESULT_ACCESS) ] = -1,
1023     + [ C(RESULT_MISS) ] = -1,
1024     + },
1025     + [ C(OP_PREFETCH) ] = {
1026     + [ C(RESULT_ACCESS) ] = -1,
1027     + [ C(RESULT_MISS) ] = -1,
1028     + },
1029     + },
1030     +};
1031     +
1032     static __initconst u64 nehalem_hw_cache_event_ids
1033     [PERF_COUNT_HW_CACHE_MAX]
1034     [PERF_COUNT_HW_CACHE_OP_MAX]
1035     @@ -2118,6 +2209,7 @@ static __init int intel_pmu_init(void)
1036     * Install the hw-cache-events table:
1037     */
1038     switch (boot_cpu_data.x86_model) {
1039     +
1040     case 15: /* original 65 nm celeron/pentium/core2/xeon, "Merom"/"Conroe" */
1041     case 22: /* single-core 65 nm celeron/core2solo "Merom-L"/"Conroe-L" */
1042     case 23: /* current 45 nm celeron/core2/xeon "Penryn"/"Wolfdale" */
1043     @@ -2129,7 +2221,9 @@ static __init int intel_pmu_init(void)
1044     event_constraints = intel_core_event_constraints;
1045     break;
1046     default:
1047     - case 26:
1048     + case 26: /* 45 nm nehalem, "Bloomfield" */
1049     + case 30: /* 45 nm nehalem, "Lynnfield" */
1050     + case 46: /* 45 nm nehalem-ex, "Beckton" */
1051     memcpy(hw_cache_event_ids, nehalem_hw_cache_event_ids,
1052     sizeof(hw_cache_event_ids));
1053    
1054     @@ -2142,6 +2236,14 @@ static __init int intel_pmu_init(void)
1055    
1056     pr_cont("Atom events, ");
1057     break;
1058     +
1059     + case 37: /* 32 nm nehalem, "Clarkdale" */
1060     + case 44: /* 32 nm nehalem, "Gulftown" */
1061     + memcpy(hw_cache_event_ids, westmere_hw_cache_event_ids,
1062     + sizeof(hw_cache_event_ids));
1063     +
1064     + pr_cont("Westmere events, ");
1065     + break;
1066     }
1067     return 0;
1068     }
1069     diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
1070     index a4849c1..ebd4c51 100644
1071     --- a/arch/x86/kernel/crash.c
1072     +++ b/arch/x86/kernel/crash.c
1073     @@ -27,7 +27,6 @@
1074     #include <asm/cpu.h>
1075     #include <asm/reboot.h>
1076     #include <asm/virtext.h>
1077     -#include <asm/x86_init.h>
1078    
1079     #if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC)
1080    
1081     @@ -103,10 +102,5 @@ void native_machine_crash_shutdown(struct pt_regs *regs)
1082     #ifdef CONFIG_HPET_TIMER
1083     hpet_disable();
1084     #endif
1085     -
1086     -#ifdef CONFIG_X86_64
1087     - x86_platform.iommu_shutdown();
1088     -#endif
1089     -
1090     crash_save_cpu(regs, safe_smp_processor_id());
1091     }
1092     diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
1093     index ad80a1c..773afc9 100644
1094     --- a/arch/x86/kernel/hpet.c
1095     +++ b/arch/x86/kernel/hpet.c
1096     @@ -399,9 +399,15 @@ static int hpet_next_event(unsigned long delta,
1097     * then we might have a real hardware problem. We can not do
1098     * much about it here, but at least alert the user/admin with
1099     * a prominent warning.
1100     + * An erratum on some chipsets (ICH9,..), results in comparator read
1101     + * immediately following a write returning old value. Workaround
1102     + * for this is to read this value second time, when first
1103     + * read returns old value.
1104     */
1105     - WARN_ONCE(hpet_readl(HPET_Tn_CMP(timer)) != cnt,
1106     + if (unlikely((u32)hpet_readl(HPET_Tn_CMP(timer)) != cnt)) {
1107     + WARN_ONCE(hpet_readl(HPET_Tn_CMP(timer)) != cnt,
1108     KERN_WARNING "hpet: compare register read back failed.\n");
1109     + }
1110    
1111     return (s32)(hpet_readl(HPET_COUNTER) - cnt) >= 0 ? -ETIME : 0;
1112     }
1113     diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c
1114     index bfba601..b2258ca 100644
1115     --- a/arch/x86/kernel/kgdb.c
1116     +++ b/arch/x86/kernel/kgdb.c
1117     @@ -618,8 +618,8 @@ int kgdb_arch_init(void)
1118     * portion of kgdb because this operation requires mutexs to
1119     * complete.
1120     */
1121     + hw_breakpoint_init(&attr);
1122     attr.bp_addr = (unsigned long)kgdb_arch_init;
1123     - attr.type = PERF_TYPE_BREAKPOINT;
1124     attr.bp_len = HW_BREAKPOINT_LEN_1;
1125     attr.bp_type = HW_BREAKPOINT_W;
1126     attr.disabled = 1;
1127     diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c
1128     index a2c1edd..e81030f 100644
1129     --- a/arch/x86/kernel/mpparse.c
1130     +++ b/arch/x86/kernel/mpparse.c
1131     @@ -664,7 +664,7 @@ static void __init smp_reserve_memory(struct mpf_intel *mpf)
1132     {
1133     unsigned long size = get_mpc_size(mpf->physptr);
1134    
1135     - reserve_early(mpf->physptr, mpf->physptr+size, "MP-table mpc");
1136     + reserve_early_overlap_ok(mpf->physptr, mpf->physptr+size, "MP-table mpc");
1137     }
1138    
1139     static int __init smp_scan_config(unsigned long base, unsigned long length)
1140     @@ -693,7 +693,7 @@ static int __init smp_scan_config(unsigned long base, unsigned long length)
1141     mpf, (u64)virt_to_phys(mpf));
1142    
1143     mem = virt_to_phys(mpf);
1144     - reserve_early(mem, mem + sizeof(*mpf), "MP-table mpf");
1145     + reserve_early_overlap_ok(mem, mem + sizeof(*mpf), "MP-table mpf");
1146     if (mpf->physptr)
1147     smp_reserve_memory(mpf);
1148    
1149     diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c
1150     index 34de53b..4f41b29 100644
1151     --- a/arch/x86/kernel/pci-gart_64.c
1152     +++ b/arch/x86/kernel/pci-gart_64.c
1153     @@ -564,6 +564,9 @@ static void enable_gart_translations(void)
1154    
1155     enable_gart_translation(dev, __pa(agp_gatt_table));
1156     }
1157     +
1158     + /* Flush the GART-TLB to remove stale entries */
1159     + k8_flush_garts();
1160     }
1161    
1162     /*
1163     diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
1164     index 89a49fb..28c3d81 100644
1165     --- a/arch/x86/kvm/mmu.c
1166     +++ b/arch/x86/kvm/mmu.c
1167     @@ -1502,8 +1502,8 @@ static int mmu_zap_unsync_children(struct kvm *kvm,
1168     for_each_sp(pages, sp, parents, i) {
1169     kvm_mmu_zap_page(kvm, sp);
1170     mmu_pages_clear_parents(&parents);
1171     + zapped++;
1172     }
1173     - zapped += pages.nr;
1174     kvm_mmu_pages_init(parent, &parents, &pages);
1175     }
1176    
1177     @@ -1554,14 +1554,16 @@ void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned int kvm_nr_mmu_pages)
1178     */
1179    
1180     if (used_pages > kvm_nr_mmu_pages) {
1181     - while (used_pages > kvm_nr_mmu_pages) {
1182     + while (used_pages > kvm_nr_mmu_pages &&
1183     + !list_empty(&kvm->arch.active_mmu_pages)) {
1184     struct kvm_mmu_page *page;
1185    
1186     page = container_of(kvm->arch.active_mmu_pages.prev,
1187     struct kvm_mmu_page, link);
1188     - kvm_mmu_zap_page(kvm, page);
1189     + used_pages -= kvm_mmu_zap_page(kvm, page);
1190     used_pages--;
1191     }
1192     + kvm_nr_mmu_pages = used_pages;
1193     kvm->arch.n_free_mmu_pages = 0;
1194     }
1195     else
1196     @@ -1608,7 +1610,8 @@ static void mmu_unshadow(struct kvm *kvm, gfn_t gfn)
1197     && !sp->role.invalid) {
1198     pgprintk("%s: zap %lx %x\n",
1199     __func__, gfn, sp->role.word);
1200     - kvm_mmu_zap_page(kvm, sp);
1201     + if (kvm_mmu_zap_page(kvm, sp))
1202     + nn = bucket->first;
1203     }
1204     }
1205     }
1206     diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
1207     index 1d9b338..d42e191 100644
1208     --- a/arch/x86/kvm/svm.c
1209     +++ b/arch/x86/kvm/svm.c
1210     @@ -698,29 +698,28 @@ static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
1211     if (err)
1212     goto free_svm;
1213    
1214     + err = -ENOMEM;
1215     page = alloc_page(GFP_KERNEL);
1216     - if (!page) {
1217     - err = -ENOMEM;
1218     + if (!page)
1219     goto uninit;
1220     - }
1221    
1222     - err = -ENOMEM;
1223     msrpm_pages = alloc_pages(GFP_KERNEL, MSRPM_ALLOC_ORDER);
1224     if (!msrpm_pages)
1225     - goto uninit;
1226     + goto free_page1;
1227    
1228     nested_msrpm_pages = alloc_pages(GFP_KERNEL, MSRPM_ALLOC_ORDER);
1229     if (!nested_msrpm_pages)
1230     - goto uninit;
1231     -
1232     - svm->msrpm = page_address(msrpm_pages);
1233     - svm_vcpu_init_msrpm(svm->msrpm);
1234     + goto free_page2;
1235    
1236     hsave_page = alloc_page(GFP_KERNEL);
1237     if (!hsave_page)
1238     - goto uninit;
1239     + goto free_page3;
1240     +
1241     svm->nested.hsave = page_address(hsave_page);
1242    
1243     + svm->msrpm = page_address(msrpm_pages);
1244     + svm_vcpu_init_msrpm(svm->msrpm);
1245     +
1246     svm->nested.msrpm = page_address(nested_msrpm_pages);
1247    
1248     svm->vmcb = page_address(page);
1249     @@ -737,6 +736,12 @@ static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
1250    
1251     return &svm->vcpu;
1252    
1253     +free_page3:
1254     + __free_pages(nested_msrpm_pages, MSRPM_ALLOC_ORDER);
1255     +free_page2:
1256     + __free_pages(msrpm_pages, MSRPM_ALLOC_ORDER);
1257     +free_page1:
1258     + __free_page(page);
1259     uninit:
1260     kvm_vcpu_uninit(&svm->vcpu);
1261     free_svm:
1262     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
1263     index 8a8e139..3acbe19 100644
1264     --- a/arch/x86/kvm/vmx.c
1265     +++ b/arch/x86/kvm/vmx.c
1266     @@ -61,6 +61,8 @@ module_param_named(unrestricted_guest,
1267     static int __read_mostly emulate_invalid_guest_state = 0;
1268     module_param(emulate_invalid_guest_state, bool, S_IRUGO);
1269    
1270     +#define RMODE_GUEST_OWNED_EFLAGS_BITS (~(X86_EFLAGS_IOPL | X86_EFLAGS_VM))
1271     +
1272     /*
1273     * These 2 parameters are used to config the controls for Pause-Loop Exiting:
1274     * ple_gap: upper bound on the amount of time between two successive
1275     @@ -115,7 +117,7 @@ struct vcpu_vmx {
1276     } host_state;
1277     struct {
1278     int vm86_active;
1279     - u8 save_iopl;
1280     + ulong save_rflags;
1281     struct kvm_save_segment {
1282     u16 selector;
1283     unsigned long base;
1284     @@ -787,18 +789,23 @@ static void vmx_fpu_deactivate(struct kvm_vcpu *vcpu)
1285    
1286     static unsigned long vmx_get_rflags(struct kvm_vcpu *vcpu)
1287     {
1288     - unsigned long rflags;
1289     + unsigned long rflags, save_rflags;
1290    
1291     rflags = vmcs_readl(GUEST_RFLAGS);
1292     - if (to_vmx(vcpu)->rmode.vm86_active)
1293     - rflags &= ~(unsigned long)(X86_EFLAGS_IOPL | X86_EFLAGS_VM);
1294     + if (to_vmx(vcpu)->rmode.vm86_active) {
1295     + rflags &= RMODE_GUEST_OWNED_EFLAGS_BITS;
1296     + save_rflags = to_vmx(vcpu)->rmode.save_rflags;
1297     + rflags |= save_rflags & ~RMODE_GUEST_OWNED_EFLAGS_BITS;
1298     + }
1299     return rflags;
1300     }
1301    
1302     static void vmx_set_rflags(struct kvm_vcpu *vcpu, unsigned long rflags)
1303     {
1304     - if (to_vmx(vcpu)->rmode.vm86_active)
1305     + if (to_vmx(vcpu)->rmode.vm86_active) {
1306     + to_vmx(vcpu)->rmode.save_rflags = rflags;
1307     rflags |= X86_EFLAGS_IOPL | X86_EFLAGS_VM;
1308     + }
1309     vmcs_writel(GUEST_RFLAGS, rflags);
1310     }
1311    
1312     @@ -1431,8 +1438,8 @@ static void enter_pmode(struct kvm_vcpu *vcpu)
1313     vmcs_write32(GUEST_TR_AR_BYTES, vmx->rmode.tr.ar);
1314    
1315     flags = vmcs_readl(GUEST_RFLAGS);
1316     - flags &= ~(X86_EFLAGS_IOPL | X86_EFLAGS_VM);
1317     - flags |= (vmx->rmode.save_iopl << IOPL_SHIFT);
1318     + flags &= RMODE_GUEST_OWNED_EFLAGS_BITS;
1319     + flags |= vmx->rmode.save_rflags & ~RMODE_GUEST_OWNED_EFLAGS_BITS;
1320     vmcs_writel(GUEST_RFLAGS, flags);
1321    
1322     vmcs_writel(GUEST_CR4, (vmcs_readl(GUEST_CR4) & ~X86_CR4_VME) |
1323     @@ -1501,8 +1508,7 @@ static void enter_rmode(struct kvm_vcpu *vcpu)
1324     vmcs_write32(GUEST_TR_AR_BYTES, 0x008b);
1325    
1326     flags = vmcs_readl(GUEST_RFLAGS);
1327     - vmx->rmode.save_iopl
1328     - = (flags & X86_EFLAGS_IOPL) >> IOPL_SHIFT;
1329     + vmx->rmode.save_rflags = flags;
1330    
1331     flags |= X86_EFLAGS_IOPL | X86_EFLAGS_VM;
1332    
1333     @@ -2719,6 +2725,12 @@ static int handle_rmode_exception(struct kvm_vcpu *vcpu,
1334     kvm_queue_exception(vcpu, vec);
1335     return 1;
1336     case BP_VECTOR:
1337     + /*
1338     + * Update instruction length as we may reinject the exception
1339     + * from user space while in guest debugging mode.
1340     + */
1341     + to_vmx(vcpu)->vcpu.arch.event_exit_inst_len =
1342     + vmcs_read32(VM_EXIT_INSTRUCTION_LEN);
1343     if (vcpu->guest_debug & KVM_GUESTDBG_USE_SW_BP)
1344     return 0;
1345     /* fall through */
1346     @@ -2841,6 +2853,13 @@ static int handle_exception(struct kvm_vcpu *vcpu)
1347     kvm_run->debug.arch.dr7 = vmcs_readl(GUEST_DR7);
1348     /* fall through */
1349     case BP_VECTOR:
1350     + /*
1351     + * Update instruction length as we may reinject #BP from
1352     + * user space while in guest debugging mode. Reading it for
1353     + * #DB as well causes no harm, it is not used in that case.
1354     + */
1355     + vmx->vcpu.arch.event_exit_inst_len =
1356     + vmcs_read32(VM_EXIT_INSTRUCTION_LEN);
1357     kvm_run->exit_reason = KVM_EXIT_DEBUG;
1358     kvm_run->debug.arch.pc = vmcs_readl(GUEST_CS_BASE) + rip;
1359     kvm_run->debug.arch.exception = ex_no;
1360     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
1361     index e900908..dd78927 100644
1362     --- a/arch/x86/kvm/x86.c
1363     +++ b/arch/x86/kvm/x86.c
1364     @@ -384,21 +384,16 @@ out:
1365     void kvm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
1366     {
1367     if (cr0 & CR0_RESERVED_BITS) {
1368     - printk(KERN_DEBUG "set_cr0: 0x%lx #GP, reserved bits 0x%lx\n",
1369     - cr0, vcpu->arch.cr0);
1370     kvm_inject_gp(vcpu, 0);
1371     return;
1372     }
1373    
1374     if ((cr0 & X86_CR0_NW) && !(cr0 & X86_CR0_CD)) {
1375     - printk(KERN_DEBUG "set_cr0: #GP, CD == 0 && NW == 1\n");
1376     kvm_inject_gp(vcpu, 0);
1377     return;
1378     }
1379    
1380     if ((cr0 & X86_CR0_PG) && !(cr0 & X86_CR0_PE)) {
1381     - printk(KERN_DEBUG "set_cr0: #GP, set PG flag "
1382     - "and a clear PE flag\n");
1383     kvm_inject_gp(vcpu, 0);
1384     return;
1385     }
1386     @@ -409,15 +404,11 @@ void kvm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
1387     int cs_db, cs_l;
1388    
1389     if (!is_pae(vcpu)) {
1390     - printk(KERN_DEBUG "set_cr0: #GP, start paging "
1391     - "in long mode while PAE is disabled\n");
1392     kvm_inject_gp(vcpu, 0);
1393     return;
1394     }
1395     kvm_x86_ops->get_cs_db_l_bits(vcpu, &cs_db, &cs_l);
1396     if (cs_l) {
1397     - printk(KERN_DEBUG "set_cr0: #GP, start paging "
1398     - "in long mode while CS.L == 1\n");
1399     kvm_inject_gp(vcpu, 0);
1400     return;
1401    
1402     @@ -425,8 +416,6 @@ void kvm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
1403     } else
1404     #endif
1405     if (is_pae(vcpu) && !load_pdptrs(vcpu, vcpu->arch.cr3)) {
1406     - printk(KERN_DEBUG "set_cr0: #GP, pdptrs "
1407     - "reserved bits\n");
1408     kvm_inject_gp(vcpu, 0);
1409     return;
1410     }
1411     @@ -453,28 +442,23 @@ void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
1412     unsigned long pdptr_bits = X86_CR4_PGE | X86_CR4_PSE | X86_CR4_PAE;
1413    
1414     if (cr4 & CR4_RESERVED_BITS) {
1415     - printk(KERN_DEBUG "set_cr4: #GP, reserved bits\n");
1416     kvm_inject_gp(vcpu, 0);
1417     return;
1418     }
1419    
1420     if (is_long_mode(vcpu)) {
1421     if (!(cr4 & X86_CR4_PAE)) {
1422     - printk(KERN_DEBUG "set_cr4: #GP, clearing PAE while "
1423     - "in long mode\n");
1424     kvm_inject_gp(vcpu, 0);
1425     return;
1426     }
1427     } else if (is_paging(vcpu) && (cr4 & X86_CR4_PAE)
1428     && ((cr4 ^ old_cr4) & pdptr_bits)
1429     && !load_pdptrs(vcpu, vcpu->arch.cr3)) {
1430     - printk(KERN_DEBUG "set_cr4: #GP, pdptrs reserved bits\n");
1431     kvm_inject_gp(vcpu, 0);
1432     return;
1433     }
1434    
1435     if (cr4 & X86_CR4_VMXE) {
1436     - printk(KERN_DEBUG "set_cr4: #GP, setting VMXE\n");
1437     kvm_inject_gp(vcpu, 0);
1438     return;
1439     }
1440     @@ -495,21 +479,16 @@ void kvm_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3)
1441    
1442     if (is_long_mode(vcpu)) {
1443     if (cr3 & CR3_L_MODE_RESERVED_BITS) {
1444     - printk(KERN_DEBUG "set_cr3: #GP, reserved bits\n");
1445     kvm_inject_gp(vcpu, 0);
1446     return;
1447     }
1448     } else {
1449     if (is_pae(vcpu)) {
1450     if (cr3 & CR3_PAE_RESERVED_BITS) {
1451     - printk(KERN_DEBUG
1452     - "set_cr3: #GP, reserved bits\n");
1453     kvm_inject_gp(vcpu, 0);
1454     return;
1455     }
1456     if (is_paging(vcpu) && !load_pdptrs(vcpu, cr3)) {
1457     - printk(KERN_DEBUG "set_cr3: #GP, pdptrs "
1458     - "reserved bits\n");
1459     kvm_inject_gp(vcpu, 0);
1460     return;
1461     }
1462     @@ -541,7 +520,6 @@ EXPORT_SYMBOL_GPL(kvm_set_cr3);
1463     void kvm_set_cr8(struct kvm_vcpu *vcpu, unsigned long cr8)
1464     {
1465     if (cr8 & CR8_RESERVED_BITS) {
1466     - printk(KERN_DEBUG "set_cr8: #GP, reserved bits 0x%lx\n", cr8);
1467     kvm_inject_gp(vcpu, 0);
1468     return;
1469     }
1470     @@ -595,15 +573,12 @@ static u32 emulated_msrs[] = {
1471     static void set_efer(struct kvm_vcpu *vcpu, u64 efer)
1472     {
1473     if (efer & efer_reserved_bits) {
1474     - printk(KERN_DEBUG "set_efer: 0x%llx #GP, reserved bits\n",
1475     - efer);
1476     kvm_inject_gp(vcpu, 0);
1477     return;
1478     }
1479    
1480     if (is_paging(vcpu)
1481     && (vcpu->arch.shadow_efer & EFER_LME) != (efer & EFER_LME)) {
1482     - printk(KERN_DEBUG "set_efer: #GP, change LME while paging\n");
1483     kvm_inject_gp(vcpu, 0);
1484     return;
1485     }
1486     @@ -613,7 +588,6 @@ static void set_efer(struct kvm_vcpu *vcpu, u64 efer)
1487    
1488     feat = kvm_find_cpuid_entry(vcpu, 0x80000001, 0);
1489     if (!feat || !(feat->edx & bit(X86_FEATURE_FXSR_OPT))) {
1490     - printk(KERN_DEBUG "set_efer: #GP, enable FFXSR w/o CPUID capability\n");
1491     kvm_inject_gp(vcpu, 0);
1492     return;
1493     }
1494     @@ -624,7 +598,6 @@ static void set_efer(struct kvm_vcpu *vcpu, u64 efer)
1495    
1496     feat = kvm_find_cpuid_entry(vcpu, 0x80000001, 0);
1497     if (!feat || !(feat->ecx & bit(X86_FEATURE_SVM))) {
1498     - printk(KERN_DEBUG "set_efer: #GP, enable SVM w/o SVM\n");
1499     kvm_inject_gp(vcpu, 0);
1500     return;
1501     }
1502     @@ -913,9 +886,13 @@ static int set_msr_mce(struct kvm_vcpu *vcpu, u32 msr, u64 data)
1503     if (msr >= MSR_IA32_MC0_CTL &&
1504     msr < MSR_IA32_MC0_CTL + 4 * bank_num) {
1505     u32 offset = msr - MSR_IA32_MC0_CTL;
1506     - /* only 0 or all 1s can be written to IA32_MCi_CTL */
1507     + /* only 0 or all 1s can be written to IA32_MCi_CTL
1508     + * some Linux kernels though clear bit 10 in bank 4 to
1509     + * workaround a BIOS/GART TBL issue on AMD K8s, ignore
1510     + * this to avoid an uncatched #GP in the guest
1511     + */
1512     if ((offset & 0x3) == 0 &&
1513     - data != 0 && data != ~(u64)0)
1514     + data != 0 && (data | (1 << 10)) != ~(u64)0)
1515     return -1;
1516     vcpu->arch.mce_banks[offset] = data;
1517     break;
1518     @@ -2366,7 +2343,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
1519     struct kvm_dirty_log *log)
1520     {
1521     int r;
1522     - int n;
1523     + unsigned long n;
1524     struct kvm_memory_slot *memslot;
1525     int is_dirty = 0;
1526    
1527     @@ -2382,7 +2359,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
1528     kvm_mmu_slot_remove_write_access(kvm, log->slot);
1529     spin_unlock(&kvm->mmu_lock);
1530     memslot = &kvm->memslots[log->slot];
1531     - n = ALIGN(memslot->npages, BITS_PER_LONG) / 8;
1532     + n = kvm_dirty_bitmap_bytes(memslot);
1533     memset(memslot->dirty_bitmap, 0, n);
1534     }
1535     r = 0;
1536     @@ -4599,6 +4576,7 @@ int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int reason)
1537     int ret = 0;
1538     u32 old_tss_base = get_segment_base(vcpu, VCPU_SREG_TR);
1539     u16 old_tss_sel = get_segment_selector(vcpu, VCPU_SREG_TR);
1540     + u32 desc_limit;
1541    
1542     old_tss_base = vcpu->arch.mmu.gva_to_gpa(vcpu, old_tss_base);
1543    
1544     @@ -4621,7 +4599,10 @@ int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int reason)
1545     }
1546     }
1547    
1548     - if (!nseg_desc.p || get_desc_limit(&nseg_desc) < 0x67) {
1549     + desc_limit = get_desc_limit(&nseg_desc);
1550     + if (!nseg_desc.p ||
1551     + ((desc_limit < 0x67 && (nseg_desc.type & 8)) ||
1552     + desc_limit < 0x2b)) {
1553     kvm_queue_exception_e(vcpu, TS_VECTOR, tss_selector & 0xfffc);
1554     return 1;
1555     }
1556     diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile
1557     index cffd754..ddef409 100644
1558     --- a/arch/x86/lib/Makefile
1559     +++ b/arch/x86/lib/Makefile
1560     @@ -14,7 +14,7 @@ $(obj)/inat.o: $(obj)/inat-tables.c
1561    
1562     clean-files := inat-tables.c
1563    
1564     -obj-$(CONFIG_SMP) += msr-smp.o
1565     +obj-$(CONFIG_SMP) += msr-smp.o cache-smp.o
1566    
1567     lib-y := delay.o
1568     lib-y += thunk_$(BITS).o
1569     @@ -39,4 +39,5 @@ else
1570     lib-y += thunk_64.o clear_page_64.o copy_page_64.o
1571     lib-y += memmove_64.o memset_64.o
1572     lib-y += copy_user_64.o rwlock_64.o copy_user_nocache_64.o
1573     + lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem_64.o
1574     endif
1575     diff --git a/arch/x86/lib/cache-smp.c b/arch/x86/lib/cache-smp.c
1576     new file mode 100644
1577     index 0000000..a3c6688
1578     --- /dev/null
1579     +++ b/arch/x86/lib/cache-smp.c
1580     @@ -0,0 +1,19 @@
1581     +#include <linux/smp.h>
1582     +#include <linux/module.h>
1583     +
1584     +static void __wbinvd(void *dummy)
1585     +{
1586     + wbinvd();
1587     +}
1588     +
1589     +void wbinvd_on_cpu(int cpu)
1590     +{
1591     + smp_call_function_single(cpu, __wbinvd, NULL, 1);
1592     +}
1593     +EXPORT_SYMBOL(wbinvd_on_cpu);
1594     +
1595     +int wbinvd_on_all_cpus(void)
1596     +{
1597     + return on_each_cpu(__wbinvd, NULL, 1);
1598     +}
1599     +EXPORT_SYMBOL(wbinvd_on_all_cpus);
1600     diff --git a/arch/x86/lib/rwsem_64.S b/arch/x86/lib/rwsem_64.S
1601     new file mode 100644
1602     index 0000000..15acecf
1603     --- /dev/null
1604     +++ b/arch/x86/lib/rwsem_64.S
1605     @@ -0,0 +1,81 @@
1606     +/*
1607     + * x86-64 rwsem wrappers
1608     + *
1609     + * This interfaces the inline asm code to the slow-path
1610     + * C routines. We need to save the call-clobbered regs
1611     + * that the asm does not mark as clobbered, and move the
1612     + * argument from %rax to %rdi.
1613     + *
1614     + * NOTE! We don't need to save %rax, because the functions
1615     + * will always return the semaphore pointer in %rax (which
1616     + * is also the input argument to these helpers)
1617     + *
1618     + * The following can clobber %rdx because the asm clobbers it:
1619     + * call_rwsem_down_write_failed
1620     + * call_rwsem_wake
1621     + * but %rdi, %rsi, %rcx, %r8-r11 always need saving.
1622     + */
1623     +
1624     +#include <linux/linkage.h>
1625     +#include <asm/rwlock.h>
1626     +#include <asm/alternative-asm.h>
1627     +#include <asm/frame.h>
1628     +#include <asm/dwarf2.h>
1629     +
1630     +#define save_common_regs \
1631     + pushq %rdi; \
1632     + pushq %rsi; \
1633     + pushq %rcx; \
1634     + pushq %r8; \
1635     + pushq %r9; \
1636     + pushq %r10; \
1637     + pushq %r11
1638     +
1639     +#define restore_common_regs \
1640     + popq %r11; \
1641     + popq %r10; \
1642     + popq %r9; \
1643     + popq %r8; \
1644     + popq %rcx; \
1645     + popq %rsi; \
1646     + popq %rdi
1647     +
1648     +/* Fix up special calling conventions */
1649     +ENTRY(call_rwsem_down_read_failed)
1650     + save_common_regs
1651     + pushq %rdx
1652     + movq %rax,%rdi
1653     + call rwsem_down_read_failed
1654     + popq %rdx
1655     + restore_common_regs
1656     + ret
1657     + ENDPROC(call_rwsem_down_read_failed)
1658     +
1659     +ENTRY(call_rwsem_down_write_failed)
1660     + save_common_regs
1661     + movq %rax,%rdi
1662     + call rwsem_down_write_failed
1663     + restore_common_regs
1664     + ret
1665     + ENDPROC(call_rwsem_down_write_failed)
1666     +
1667     +ENTRY(call_rwsem_wake)
1668     + decw %dx /* do nothing if still outstanding active readers */
1669     + jnz 1f
1670     + save_common_regs
1671     + movq %rax,%rdi
1672     + call rwsem_wake
1673     + restore_common_regs
1674     +1: ret
1675     + ENDPROC(call_rwsem_wake)
1676     +
1677     +/* Fix up special calling conventions */
1678     +ENTRY(call_rwsem_downgrade_wake)
1679     + save_common_regs
1680     + pushq %rdx
1681     + movq %rax,%rdi
1682     + call rwsem_downgrade_wake
1683     + popq %rdx
1684     + restore_common_regs
1685     + ret
1686     + ENDPROC(call_rwsem_downgrade_wake)
1687     diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c
1688     index 0696d50..b02f6d8 100644
1689     --- a/arch/x86/pci/irq.c
1690     +++ b/arch/x86/pci/irq.c
1691     @@ -590,6 +590,8 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route
1692     case PCI_DEVICE_ID_INTEL_ICH10_1:
1693     case PCI_DEVICE_ID_INTEL_ICH10_2:
1694     case PCI_DEVICE_ID_INTEL_ICH10_3:
1695     + case PCI_DEVICE_ID_INTEL_CPT_LPC1:
1696     + case PCI_DEVICE_ID_INTEL_CPT_LPC2:
1697     r->name = "PIIX/ICH";
1698     r->get = pirq_piix_get;
1699     r->set = pirq_piix_set;
1700     diff --git a/arch/x86/power/hibernate_asm_32.S b/arch/x86/power/hibernate_asm_32.S
1701     index b641388..ad47dae 100644
1702     --- a/arch/x86/power/hibernate_asm_32.S
1703     +++ b/arch/x86/power/hibernate_asm_32.S
1704     @@ -27,10 +27,17 @@ ENTRY(swsusp_arch_suspend)
1705     ret
1706    
1707     ENTRY(restore_image)
1708     + movl mmu_cr4_features, %ecx
1709     movl resume_pg_dir, %eax
1710     subl $__PAGE_OFFSET, %eax
1711     movl %eax, %cr3
1712    
1713     + jecxz 1f # cr4 Pentium and higher, skip if zero
1714     + andl $~(X86_CR4_PGE), %ecx
1715     + movl %ecx, %cr4; # turn off PGE
1716     + movl %cr3, %eax; # flush TLB
1717     + movl %eax, %cr3
1718     +1:
1719     movl restore_pblist, %edx
1720     .p2align 4,,7
1721    
1722     @@ -54,16 +61,8 @@ done:
1723     movl $swapper_pg_dir, %eax
1724     subl $__PAGE_OFFSET, %eax
1725     movl %eax, %cr3
1726     - /* Flush TLB, including "global" things (vmalloc) */
1727     movl mmu_cr4_features, %ecx
1728     jecxz 1f # cr4 Pentium and higher, skip if zero
1729     - movl %ecx, %edx
1730     - andl $~(X86_CR4_PGE), %edx
1731     - movl %edx, %cr4; # turn off PGE
1732     -1:
1733     - movl %cr3, %eax; # flush TLB
1734     - movl %eax, %cr3
1735     - jecxz 1f # cr4 Pentium and higher, skip if zero
1736     movl %ecx, %cr4; # turn PGE back on
1737     1:
1738    
1739     diff --git a/drivers/acpi/acpica/exprep.c b/drivers/acpi/acpica/exprep.c
1740     index 52fec07..83b6252 100644
1741     --- a/drivers/acpi/acpica/exprep.c
1742     +++ b/drivers/acpi/acpica/exprep.c
1743     @@ -468,6 +468,23 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
1744    
1745     acpi_ut_add_reference(obj_desc->field.region_obj);
1746    
1747     + /* allow full data read from EC address space */
1748     + if (obj_desc->field.region_obj->region.space_id ==
1749     + ACPI_ADR_SPACE_EC) {
1750     + if (obj_desc->common_field.bit_length > 8) {
1751     + unsigned width =
1752     + ACPI_ROUND_BITS_UP_TO_BYTES(
1753     + obj_desc->common_field.bit_length);
1754     + // access_bit_width is u8, don't overflow it
1755     + if (width > 8)
1756     + width = 8;
1757     + obj_desc->common_field.access_byte_width =
1758     + width;
1759     + obj_desc->common_field.access_bit_width =
1760     + 8 * width;
1761     + }
1762     + }
1763     +
1764     ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
1765     "RegionField: BitOff %X, Off %X, Gran %X, Region %p\n",
1766     obj_desc->field.start_field_bit_offset,
1767     diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
1768     index d6471bb..fc67d11 100644
1769     --- a/drivers/acpi/ec.c
1770     +++ b/drivers/acpi/ec.c
1771     @@ -589,12 +589,12 @@ static u32 acpi_ec_gpe_handler(void *data)
1772    
1773     static acpi_status
1774     acpi_ec_space_handler(u32 function, acpi_physical_address address,
1775     - u32 bits, acpi_integer *value,
1776     + u32 bits, acpi_integer *value64,
1777     void *handler_context, void *region_context)
1778     {
1779     struct acpi_ec *ec = handler_context;
1780     - int result = 0, i;
1781     - u8 temp = 0;
1782     + int result = 0, i, bytes = bits / 8;
1783     + u8 *value = (u8 *)value64;
1784    
1785     if ((address > 0xFF) || !value || !handler_context)
1786     return AE_BAD_PARAMETER;
1787     @@ -602,32 +602,15 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
1788     if (function != ACPI_READ && function != ACPI_WRITE)
1789     return AE_BAD_PARAMETER;
1790    
1791     - if (bits != 8 && acpi_strict)
1792     - return AE_BAD_PARAMETER;
1793     -
1794     - if (EC_FLAGS_MSI)
1795     + if (EC_FLAGS_MSI || bits > 8)
1796     acpi_ec_burst_enable(ec);
1797    
1798     - if (function == ACPI_READ) {
1799     - result = acpi_ec_read(ec, address, &temp);
1800     - *value = temp;
1801     - } else {
1802     - temp = 0xff & (*value);
1803     - result = acpi_ec_write(ec, address, temp);
1804     - }
1805     -
1806     - for (i = 8; unlikely(bits - i > 0); i += 8) {
1807     - ++address;
1808     - if (function == ACPI_READ) {
1809     - result = acpi_ec_read(ec, address, &temp);
1810     - (*value) |= ((acpi_integer)temp) << i;
1811     - } else {
1812     - temp = 0xff & ((*value) >> i);
1813     - result = acpi_ec_write(ec, address, temp);
1814     - }
1815     - }
1816     + for (i = 0; i < bytes; ++i, ++address, ++value)
1817     + result = (function == ACPI_READ) ?
1818     + acpi_ec_read(ec, address, value) :
1819     + acpi_ec_write(ec, address, *value);
1820    
1821     - if (EC_FLAGS_MSI)
1822     + if (EC_FLAGS_MSI || bits > 8)
1823     acpi_ec_burst_disable(ec);
1824    
1825     switch (result) {
1826     diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
1827     index 9e2feb6..462200d 100644
1828     --- a/drivers/ata/ahci.c
1829     +++ b/drivers/ata/ahci.c
1830     @@ -570,6 +570,12 @@ static const struct pci_device_id ahci_pci_tbl[] = {
1831     { PCI_VDEVICE(INTEL, 0x3b2b), board_ahci }, /* PCH RAID */
1832     { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci }, /* PCH RAID */
1833     { PCI_VDEVICE(INTEL, 0x3b2f), board_ahci }, /* PCH AHCI */
1834     + { PCI_VDEVICE(INTEL, 0x1c02), board_ahci }, /* CPT AHCI */
1835     + { PCI_VDEVICE(INTEL, 0x1c03), board_ahci }, /* CPT AHCI */
1836     + { PCI_VDEVICE(INTEL, 0x1c04), board_ahci }, /* CPT RAID */
1837     + { PCI_VDEVICE(INTEL, 0x1c05), board_ahci }, /* CPT RAID */
1838     + { PCI_VDEVICE(INTEL, 0x1c06), board_ahci }, /* CPT RAID */
1839     + { PCI_VDEVICE(INTEL, 0x1c07), board_ahci }, /* CPT RAID */
1840    
1841     /* JMicron 360/1/3/5/6, match class to avoid IDE function */
1842     { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
1843     diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
1844     index 6f3f225..b5f614b 100644
1845     --- a/drivers/ata/ata_piix.c
1846     +++ b/drivers/ata/ata_piix.c
1847     @@ -291,6 +291,14 @@ static const struct pci_device_id piix_pci_tbl[] = {
1848     { 0x8086, 0x3b2d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
1849     /* SATA Controller IDE (PCH) */
1850     { 0x8086, 0x3b2e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
1851     + /* SATA Controller IDE (CPT) */
1852     + { 0x8086, 0x1c00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
1853     + /* SATA Controller IDE (CPT) */
1854     + { 0x8086, 0x1c01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
1855     + /* SATA Controller IDE (CPT) */
1856     + { 0x8086, 0x1c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
1857     + /* SATA Controller IDE (CPT) */
1858     + { 0x8086, 0x1c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
1859     { } /* terminate list */
1860     };
1861    
1862     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
1863     index 6728328..2401c9c 100644
1864     --- a/drivers/ata/libata-core.c
1865     +++ b/drivers/ata/libata-core.c
1866     @@ -4348,6 +4348,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
1867     { "HTS541080G9SA00", "MB4OC60D", ATA_HORKAGE_NONCQ, },
1868     { "HTS541010G9SA00", "MBZOC60D", ATA_HORKAGE_NONCQ, },
1869    
1870     + /* https://bugzilla.kernel.org/show_bug.cgi?id=15573 */
1871     + { "C300-CTFDDAC128MAG", "0001", ATA_HORKAGE_NONCQ, },
1872     +
1873     /* devices which puke on READ_NATIVE_MAX */
1874     { "HDS724040KLSA80", "KFAOA20N", ATA_HORKAGE_BROKEN_HPA, },
1875     { "WDC WD3200JD-00KLB0", "WD-WCAMR1130137", ATA_HORKAGE_BROKEN_HPA },
1876     diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c
1877     index be7c395..ad64750 100644
1878     --- a/drivers/ata/pata_via.c
1879     +++ b/drivers/ata/pata_via.c
1880     @@ -697,6 +697,7 @@ static const struct pci_device_id via[] = {
1881     { PCI_VDEVICE(VIA, 0x3164), },
1882     { PCI_VDEVICE(VIA, 0x5324), },
1883     { PCI_VDEVICE(VIA, 0xC409), VIA_IDFLAG_SINGLE },
1884     + { PCI_VDEVICE(VIA, 0x9001), VIA_IDFLAG_SINGLE },
1885    
1886     { },
1887     };
1888     diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
1889     index 3999a5f..8a713f1 100644
1890     --- a/drivers/char/agp/intel-agp.c
1891     +++ b/drivers/char/agp/intel-agp.c
1892     @@ -8,6 +8,7 @@
1893     #include <linux/kernel.h>
1894     #include <linux/pagemap.h>
1895     #include <linux/agp_backend.h>
1896     +#include <asm/smp.h>
1897     #include "agp.h"
1898    
1899     /*
1900     @@ -815,12 +816,6 @@ static void intel_i830_setup_flush(void)
1901     intel_i830_fini_flush();
1902     }
1903    
1904     -static void
1905     -do_wbinvd(void *null)
1906     -{
1907     - wbinvd();
1908     -}
1909     -
1910     /* The chipset_flush interface needs to get data that has already been
1911     * flushed out of the CPU all the way out to main memory, because the GPU
1912     * doesn't snoop those buffers.
1913     @@ -837,12 +832,10 @@ static void intel_i830_chipset_flush(struct agp_bridge_data *bridge)
1914    
1915     memset(pg, 0, 1024);
1916    
1917     - if (cpu_has_clflush) {
1918     + if (cpu_has_clflush)
1919     clflush_cache_range(pg, 1024);
1920     - } else {
1921     - if (on_each_cpu(do_wbinvd, NULL, 1) != 0)
1922     - printk(KERN_ERR "Timed out waiting for cache flush.\n");
1923     - }
1924     + else if (wbinvd_on_all_cpus() != 0)
1925     + printk(KERN_ERR "Timed out waiting for cache flush.\n");
1926     }
1927    
1928     /* The intel i830 automatically initializes the agp aperture during POST.
1929     diff --git a/drivers/char/raw.c b/drivers/char/raw.c
1930     index 64acd05..9abc3a1 100644
1931     --- a/drivers/char/raw.c
1932     +++ b/drivers/char/raw.c
1933     @@ -247,6 +247,7 @@ static const struct file_operations raw_fops = {
1934     .aio_read = generic_file_aio_read,
1935     .write = do_sync_write,
1936     .aio_write = blkdev_aio_write,
1937     + .fsync = block_fsync,
1938     .open = raw_open,
1939     .release= raw_release,
1940     .ioctl = raw_ioctl,
1941     diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
1942     index dcb9083..76253cf 100644
1943     --- a/drivers/char/tty_io.c
1944     +++ b/drivers/char/tty_io.c
1945     @@ -1423,6 +1423,8 @@ static void release_one_tty(struct work_struct *work)
1946     list_del_init(&tty->tty_files);
1947     file_list_unlock();
1948    
1949     + put_pid(tty->pgrp);
1950     + put_pid(tty->session);
1951     free_tty_struct(tty);
1952     }
1953    
1954     diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
1955     index 7d0f00a..99907c3 100644
1956     --- a/drivers/gpu/drm/drm_crtc_helper.c
1957     +++ b/drivers/gpu/drm/drm_crtc_helper.c
1958     @@ -104,6 +104,7 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
1959     if (connector->status == connector_status_disconnected) {
1960     DRM_DEBUG_KMS("%s is disconnected\n",
1961     drm_get_connector_name(connector));
1962     + drm_mode_connector_update_edid_property(connector, NULL);
1963     goto prune;
1964     }
1965    
1966     diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
1967     index ab6c973..bfd0e4a 100644
1968     --- a/drivers/gpu/drm/drm_edid.c
1969     +++ b/drivers/gpu/drm/drm_edid.c
1970     @@ -85,6 +85,8 @@ static struct edid_quirk {
1971    
1972     /* Envision Peripherals, Inc. EN-7100e */
1973     { "EPI", 59264, EDID_QUIRK_135_CLOCK_TOO_HIGH },
1974     + /* Envision EN2028 */
1975     + { "EPI", 8232, EDID_QUIRK_PREFER_LARGE_60 },
1976    
1977     /* Funai Electronics PM36B */
1978     { "FCM", 13600, EDID_QUIRK_PREFER_LARGE_75 |
1979     @@ -707,15 +709,6 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
1980     mode->vsync_end = mode->vsync_start + vsync_pulse_width;
1981     mode->vtotal = mode->vdisplay + vblank;
1982    
1983     - /* perform the basic check for the detailed timing */
1984     - if (mode->hsync_end > mode->htotal ||
1985     - mode->vsync_end > mode->vtotal) {
1986     - drm_mode_destroy(dev, mode);
1987     - DRM_DEBUG_KMS("Incorrect detailed timing. "
1988     - "Sync is beyond the blank.\n");
1989     - return NULL;
1990     - }
1991     -
1992     /* Some EDIDs have bogus h/vtotal values */
1993     if (mode->hsync_end > mode->htotal)
1994     mode->htotal = mode->hsync_end + 1;
1995     diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
1996     index 08d14df..4804872 100644
1997     --- a/drivers/gpu/drm/drm_fops.c
1998     +++ b/drivers/gpu/drm/drm_fops.c
1999     @@ -140,14 +140,16 @@ int drm_open(struct inode *inode, struct file *filp)
2000     spin_unlock(&dev->count_lock);
2001     }
2002     out:
2003     - mutex_lock(&dev->struct_mutex);
2004     - if (minor->type == DRM_MINOR_LEGACY) {
2005     - BUG_ON((dev->dev_mapping != NULL) &&
2006     - (dev->dev_mapping != inode->i_mapping));
2007     - if (dev->dev_mapping == NULL)
2008     - dev->dev_mapping = inode->i_mapping;
2009     + if (!retcode) {
2010     + mutex_lock(&dev->struct_mutex);
2011     + if (minor->type == DRM_MINOR_LEGACY) {
2012     + if (dev->dev_mapping == NULL)
2013     + dev->dev_mapping = inode->i_mapping;
2014     + else if (dev->dev_mapping != inode->i_mapping)
2015     + retcode = -ENODEV;
2016     + }
2017     + mutex_unlock(&dev->struct_mutex);
2018     }
2019     - mutex_unlock(&dev->struct_mutex);
2020    
2021     return retcode;
2022     }
2023     diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
2024     index 93031a7..1238bc9 100644
2025     --- a/drivers/gpu/drm/i915/intel_lvds.c
2026     +++ b/drivers/gpu/drm/i915/intel_lvds.c
2027     @@ -899,6 +899,14 @@ static const struct dmi_system_id intel_no_lvds[] = {
2028     DMI_MATCH(DMI_PRODUCT_VERSION, "AO00001JW"),
2029     },
2030     },
2031     + {
2032     + .callback = intel_no_lvds_dmi_callback,
2033     + .ident = "Clientron U800",
2034     + .matches = {
2035     + DMI_MATCH(DMI_SYS_VENDOR, "Clientron"),
2036     + DMI_MATCH(DMI_PRODUCT_NAME, "U800"),
2037     + },
2038     + },
2039    
2040     { } /* terminating entry */
2041     };
2042     diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
2043     index d75788f..b1f929d 100644
2044     --- a/drivers/gpu/drm/radeon/atom.c
2045     +++ b/drivers/gpu/drm/radeon/atom.c
2046     @@ -881,11 +881,16 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
2047     uint8_t attr = U8((*ptr)++), shift;
2048     uint32_t saved, dst;
2049     int dptr = *ptr;
2050     + uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
2051     SDEBUG(" dst: ");
2052     dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
2053     + /* op needs to full dst value */
2054     + dst = saved;
2055     shift = atom_get_src(ctx, attr, ptr);
2056     SDEBUG(" shift: %d\n", shift);
2057     dst <<= shift;
2058     + dst &= atom_arg_mask[dst_align];
2059     + dst >>= atom_arg_shift[dst_align];
2060     SDEBUG(" dst: ");
2061     atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
2062     }
2063     @@ -895,11 +900,16 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
2064     uint8_t attr = U8((*ptr)++), shift;
2065     uint32_t saved, dst;
2066     int dptr = *ptr;
2067     + uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
2068     SDEBUG(" dst: ");
2069     dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
2070     + /* op needs to full dst value */
2071     + dst = saved;
2072     shift = atom_get_src(ctx, attr, ptr);
2073     SDEBUG(" shift: %d\n", shift);
2074     dst >>= shift;
2075     + dst &= atom_arg_mask[dst_align];
2076     + dst >>= atom_arg_shift[dst_align];
2077     SDEBUG(" dst: ");
2078     atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
2079     }
2080     diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
2081     index 43b55a0..5bdfaf2 100644
2082     --- a/drivers/gpu/drm/radeon/r300.c
2083     +++ b/drivers/gpu/drm/radeon/r300.c
2084     @@ -364,11 +364,12 @@ void r300_gpu_init(struct radeon_device *rdev)
2085    
2086     r100_hdp_reset(rdev);
2087     /* FIXME: rv380 one pipes ? */
2088     - if ((rdev->family == CHIP_R300) || (rdev->family == CHIP_R350)) {
2089     + if ((rdev->family == CHIP_R300 && rdev->pdev->device != 0x4144) ||
2090     + (rdev->family == CHIP_R350)) {
2091     /* r300,r350 */
2092     rdev->num_gb_pipes = 2;
2093     } else {
2094     - /* rv350,rv370,rv380 */
2095     + /* rv350,rv370,rv380,r300 AD */
2096     rdev->num_gb_pipes = 1;
2097     }
2098     rdev->num_z_pipes = 1;
2099     diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
2100     index e7b1944..81b832e 100644
2101     --- a/drivers/gpu/drm/radeon/radeon_combios.c
2102     +++ b/drivers/gpu/drm/radeon/radeon_combios.c
2103     @@ -670,7 +670,9 @@ struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct
2104     dac = RBIOS8(dac_info + 0x3) & 0xf;
2105     p_dac->ps2_pdac_adj = (bg << 8) | (dac);
2106     }
2107     - found = 1;
2108     + /* if the values are all zeros, use the table */
2109     + if (p_dac->ps2_pdac_adj)
2110     + found = 1;
2111     }
2112    
2113     out:
2114     @@ -812,7 +814,9 @@ struct radeon_encoder_tv_dac *radeon_combios_get_tv_dac_info(struct
2115     bg = RBIOS8(dac_info + 0x10) & 0xf;
2116     dac = RBIOS8(dac_info + 0x11) & 0xf;
2117     tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20);
2118     - found = 1;
2119     + /* if the values are all zeros, use the table */
2120     + if (tv_dac->ps2_tvdac_adj)
2121     + found = 1;
2122     } else if (rev > 1) {
2123     bg = RBIOS8(dac_info + 0xc) & 0xf;
2124     dac = (RBIOS8(dac_info + 0xc) >> 4) & 0xf;
2125     @@ -825,7 +829,9 @@ struct radeon_encoder_tv_dac *radeon_combios_get_tv_dac_info(struct
2126     bg = RBIOS8(dac_info + 0xe) & 0xf;
2127     dac = (RBIOS8(dac_info + 0xe) >> 4) & 0xf;
2128     tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20);
2129     - found = 1;
2130     + /* if the values are all zeros, use the table */
2131     + if (tv_dac->ps2_tvdac_adj)
2132     + found = 1;
2133     }
2134     tv_dac->tv_std = radeon_combios_get_tv_info(rdev);
2135     }
2136     @@ -842,7 +848,9 @@ struct radeon_encoder_tv_dac *radeon_combios_get_tv_dac_info(struct
2137     (bg << 16) | (dac << 20);
2138     tv_dac->pal_tvdac_adj = tv_dac->ps2_tvdac_adj;
2139     tv_dac->ntsc_tvdac_adj = tv_dac->ps2_tvdac_adj;
2140     - found = 1;
2141     + /* if the values are all zeros, use the table */
2142     + if (tv_dac->ps2_tvdac_adj)
2143     + found = 1;
2144     } else {
2145     bg = RBIOS8(dac_info + 0x4) & 0xf;
2146     dac = RBIOS8(dac_info + 0x5) & 0xf;
2147     @@ -850,7 +858,9 @@ struct radeon_encoder_tv_dac *radeon_combios_get_tv_dac_info(struct
2148     (bg << 16) | (dac << 20);
2149     tv_dac->pal_tvdac_adj = tv_dac->ps2_tvdac_adj;
2150     tv_dac->ntsc_tvdac_adj = tv_dac->ps2_tvdac_adj;
2151     - found = 1;
2152     + /* if the values are all zeros, use the table */
2153     + if (tv_dac->ps2_tvdac_adj)
2154     + found = 1;
2155     }
2156     } else {
2157     DRM_INFO("No TV DAC info found in BIOS\n");
2158     diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
2159     index 65f8194..2bdfbcd 100644
2160     --- a/drivers/gpu/drm/radeon/radeon_connectors.c
2161     +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
2162     @@ -162,12 +162,14 @@ radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
2163     {
2164     struct drm_device *dev = connector->dev;
2165     struct drm_connector *conflict;
2166     + struct radeon_connector *radeon_conflict;
2167     int i;
2168    
2169     list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {
2170     if (conflict == connector)
2171     continue;
2172    
2173     + radeon_conflict = to_radeon_connector(conflict);
2174     for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
2175     if (conflict->encoder_ids[i] == 0)
2176     break;
2177     @@ -177,6 +179,9 @@ radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
2178     if (conflict->status != connector_status_connected)
2179     continue;
2180    
2181     + if (radeon_conflict->use_digital)
2182     + continue;
2183     +
2184     if (priority == true) {
2185     DRM_INFO("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict));
2186     DRM_INFO("in favor of %s\n", drm_get_connector_name(connector));
2187     @@ -315,7 +320,7 @@ int radeon_connector_set_property(struct drm_connector *connector, struct drm_pr
2188     radeon_encoder = to_radeon_encoder(encoder);
2189     if (!radeon_encoder->enc_priv)
2190     return 0;
2191     - if (rdev->is_atom_bios) {
2192     + if (ASIC_IS_AVIVO(rdev) || radeon_r4xx_atom) {
2193     struct radeon_encoder_atom_dac *dac_int;
2194     dac_int = radeon_encoder->enc_priv;
2195     dac_int->tv_std = val;
2196     diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c
2197     index 06123ba..f129bbb 100644
2198     --- a/drivers/gpu/drm/radeon/radeon_cp.c
2199     +++ b/drivers/gpu/drm/radeon/radeon_cp.c
2200     @@ -417,8 +417,9 @@ static int radeon_do_wait_for_idle(drm_radeon_private_t * dev_priv)
2201     return -EBUSY;
2202     }
2203    
2204     -static void radeon_init_pipes(drm_radeon_private_t *dev_priv)
2205     +static void radeon_init_pipes(struct drm_device *dev)
2206     {
2207     + drm_radeon_private_t *dev_priv = dev->dev_private;
2208     uint32_t gb_tile_config, gb_pipe_sel = 0;
2209    
2210     if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV530) {
2211     @@ -436,11 +437,12 @@ static void radeon_init_pipes(drm_radeon_private_t *dev_priv)
2212     dev_priv->num_gb_pipes = ((gb_pipe_sel >> 12) & 0x3) + 1;
2213     } else {
2214     /* R3xx */
2215     - if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R300) ||
2216     + if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R300 &&
2217     + dev->pdev->device != 0x4144) ||
2218     ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R350)) {
2219     dev_priv->num_gb_pipes = 2;
2220     } else {
2221     - /* R3Vxx */
2222     + /* RV3xx/R300 AD */
2223     dev_priv->num_gb_pipes = 1;
2224     }
2225     }
2226     @@ -736,7 +738,7 @@ static int radeon_do_engine_reset(struct drm_device * dev)
2227    
2228     /* setup the raster pipes */
2229     if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R300)
2230     - radeon_init_pipes(dev_priv);
2231     + radeon_init_pipes(dev);
2232    
2233     /* Reset the CP ring */
2234     radeon_do_cp_reset(dev_priv);
2235     diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
2236     index e9d0850..9933c2c 100644
2237     --- a/drivers/gpu/drm/radeon/radeon_cs.c
2238     +++ b/drivers/gpu/drm/radeon/radeon_cs.c
2239     @@ -193,11 +193,13 @@ static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error)
2240     radeon_bo_list_fence(&parser->validated, parser->ib->fence);
2241     }
2242     radeon_bo_list_unreserve(&parser->validated);
2243     - for (i = 0; i < parser->nrelocs; i++) {
2244     - if (parser->relocs[i].gobj) {
2245     - mutex_lock(&parser->rdev->ddev->struct_mutex);
2246     - drm_gem_object_unreference(parser->relocs[i].gobj);
2247     - mutex_unlock(&parser->rdev->ddev->struct_mutex);
2248     + if (parser->relocs != NULL) {
2249     + for (i = 0; i < parser->nrelocs; i++) {
2250     + if (parser->relocs[i].gobj) {
2251     + mutex_lock(&parser->rdev->ddev->struct_mutex);
2252     + drm_gem_object_unreference(parser->relocs[i].gobj);
2253     + mutex_unlock(&parser->rdev->ddev->struct_mutex);
2254     + }
2255     }
2256     }
2257     kfree(parser->track);
2258     @@ -246,7 +248,8 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
2259     }
2260     r = radeon_cs_parser_relocs(&parser);
2261     if (r) {
2262     - DRM_ERROR("Failed to parse relocation !\n");
2263     + if (r != -ERESTARTSYS)
2264     + DRM_ERROR("Failed to parse relocation %d!\n", r);
2265     radeon_cs_parser_fini(&parser, r);
2266     mutex_unlock(&rdev->cs_mutex);
2267     return r;
2268     diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
2269     index 768b150..509ba3f 100644
2270     --- a/drivers/gpu/drm/radeon/radeon_device.c
2271     +++ b/drivers/gpu/drm/radeon/radeon_device.c
2272     @@ -655,6 +655,14 @@ int radeon_device_init(struct radeon_device *rdev,
2273     return r;
2274     radeon_check_arguments(rdev);
2275    
2276     + /* all of the newer IGP chips have an internal gart
2277     + * However some rs4xx report as AGP, so remove that here.
2278     + */
2279     + if ((rdev->family >= CHIP_RS400) &&
2280     + (rdev->flags & RADEON_IS_IGP)) {
2281     + rdev->flags &= ~RADEON_IS_AGP;
2282     + }
2283     +
2284     if (rdev->flags & RADEON_IS_AGP && radeon_agpmode == -1) {
2285     radeon_agp_disable(rdev);
2286     }
2287     diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
2288     index 3c91724..7626bd5 100644
2289     --- a/drivers/gpu/drm/radeon/radeon_encoders.c
2290     +++ b/drivers/gpu/drm/radeon/radeon_encoders.c
2291     @@ -1276,8 +1276,12 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,
2292     case ENCODER_OBJECT_ID_INTERNAL_DAC2:
2293     case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
2294     atombios_dac_setup(encoder, ATOM_ENABLE);
2295     - if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT))
2296     - atombios_tv_setup(encoder, ATOM_ENABLE);
2297     + if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) {
2298     + if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT))
2299     + atombios_tv_setup(encoder, ATOM_ENABLE);
2300     + else
2301     + atombios_tv_setup(encoder, ATOM_DISABLE);
2302     + }
2303     break;
2304     }
2305     atombios_apply_encoder_quirks(encoder, adjusted_mode);
2306     diff --git a/drivers/gpu/drm/radeon/radeon_legacy_tv.c b/drivers/gpu/drm/radeon/radeon_legacy_tv.c
2307     index 417684d..f2ed27c 100644
2308     --- a/drivers/gpu/drm/radeon/radeon_legacy_tv.c
2309     +++ b/drivers/gpu/drm/radeon/radeon_legacy_tv.c
2310     @@ -57,6 +57,10 @@
2311     #define NTSC_TV_PLL_N_14 693
2312     #define NTSC_TV_PLL_P_14 7
2313    
2314     +#define PAL_TV_PLL_M_14 19
2315     +#define PAL_TV_PLL_N_14 353
2316     +#define PAL_TV_PLL_P_14 5
2317     +
2318     #define VERT_LEAD_IN_LINES 2
2319     #define FRAC_BITS 0xe
2320     #define FRAC_MASK 0x3fff
2321     @@ -205,9 +209,24 @@ static const struct radeon_tv_mode_constants available_tv_modes[] = {
2322     630627, /* defRestart */
2323     347, /* crtcPLL_N */
2324     14, /* crtcPLL_M */
2325     - 8, /* crtcPLL_postDiv */
2326     + 8, /* crtcPLL_postDiv */
2327     1022, /* pixToTV */
2328     },
2329     + { /* PAL timing for 14 Mhz ref clk */
2330     + 800, /* horResolution */
2331     + 600, /* verResolution */
2332     + TV_STD_PAL, /* standard */
2333     + 1131, /* horTotal */
2334     + 742, /* verTotal */
2335     + 813, /* horStart */
2336     + 840, /* horSyncStart */
2337     + 633, /* verSyncStart */
2338     + 708369, /* defRestart */
2339     + 211, /* crtcPLL_N */
2340     + 9, /* crtcPLL_M */
2341     + 8, /* crtcPLL_postDiv */
2342     + 759, /* pixToTV */
2343     + },
2344     };
2345    
2346     #define N_AVAILABLE_MODES ARRAY_SIZE(available_tv_modes)
2347     @@ -242,7 +261,7 @@ static const struct radeon_tv_mode_constants *radeon_legacy_tv_get_std_mode(stru
2348     if (pll->reference_freq == 2700)
2349     const_ptr = &available_tv_modes[1];
2350     else
2351     - const_ptr = &available_tv_modes[1]; /* FIX ME */
2352     + const_ptr = &available_tv_modes[3];
2353     }
2354     return const_ptr;
2355     }
2356     @@ -685,9 +704,9 @@ void radeon_legacy_tv_mode_set(struct drm_encoder *encoder,
2357     n = PAL_TV_PLL_N_27;
2358     p = PAL_TV_PLL_P_27;
2359     } else {
2360     - m = PAL_TV_PLL_M_27;
2361     - n = PAL_TV_PLL_N_27;
2362     - p = PAL_TV_PLL_P_27;
2363     + m = PAL_TV_PLL_M_14;
2364     + n = PAL_TV_PLL_N_14;
2365     + p = PAL_TV_PLL_P_14;
2366     }
2367     }
2368    
2369     diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
2370     index c381856..a27c09f 100644
2371     --- a/drivers/gpu/drm/radeon/rs600.c
2372     +++ b/drivers/gpu/drm/radeon/rs600.c
2373     @@ -175,7 +175,7 @@ void rs600_gart_tlb_flush(struct radeon_device *rdev)
2374     WREG32_MC(R_000100_MC_PT0_CNTL, tmp);
2375    
2376     tmp = RREG32_MC(R_000100_MC_PT0_CNTL);
2377     - tmp |= S_000100_INVALIDATE_ALL_L1_TLBS(1) & S_000100_INVALIDATE_L2_CACHE(1);
2378     + tmp |= S_000100_INVALIDATE_ALL_L1_TLBS(1) | S_000100_INVALIDATE_L2_CACHE(1);
2379     WREG32_MC(R_000100_MC_PT0_CNTL, tmp);
2380    
2381     tmp = RREG32_MC(R_000100_MC_PT0_CNTL);
2382     diff --git a/drivers/hid/hid-gyration.c b/drivers/hid/hid-gyration.c
2383     index cab13e8..62416e6 100644
2384     --- a/drivers/hid/hid-gyration.c
2385     +++ b/drivers/hid/hid-gyration.c
2386     @@ -53,10 +53,13 @@ static int gyration_input_mapping(struct hid_device *hdev, struct hid_input *hi,
2387     static int gyration_event(struct hid_device *hdev, struct hid_field *field,
2388     struct hid_usage *usage, __s32 value)
2389     {
2390     - struct input_dev *input = field->hidinput->input;
2391     +
2392     + if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput)
2393     + return 0;
2394    
2395     if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK &&
2396     (usage->hid & 0xff) == 0x82) {
2397     + struct input_dev *input = field->hidinput->input;
2398     input_event(input, usage->type, usage->code, 1);
2399     input_sync(input);
2400     input_event(input, usage->type, usage->code, 0);
2401     diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c
2402     index 864a371..fbc997e 100644
2403     --- a/drivers/hwmon/sht15.c
2404     +++ b/drivers/hwmon/sht15.c
2405     @@ -302,13 +302,13 @@ error_ret:
2406     **/
2407     static inline int sht15_calc_temp(struct sht15_data *data)
2408     {
2409     - int d1 = 0;
2410     + int d1 = temppoints[0].d1;
2411     int i;
2412    
2413     - for (i = 1; i < ARRAY_SIZE(temppoints); i++)
2414     + for (i = ARRAY_SIZE(temppoints) - 1; i > 0; i--)
2415     /* Find pointer to interpolate */
2416     if (data->supply_uV > temppoints[i - 1].vdd) {
2417     - d1 = (data->supply_uV/1000 - temppoints[i - 1].vdd)
2418     + d1 = (data->supply_uV - temppoints[i - 1].vdd)
2419     * (temppoints[i].d1 - temppoints[i - 1].d1)
2420     / (temppoints[i].vdd - temppoints[i - 1].vdd)
2421     + temppoints[i - 1].d1;
2422     @@ -541,7 +541,12 @@ static int __devinit sht15_probe(struct platform_device *pdev)
2423     /* If a regulator is available, query what the supply voltage actually is!*/
2424     data->reg = regulator_get(data->dev, "vcc");
2425     if (!IS_ERR(data->reg)) {
2426     - data->supply_uV = regulator_get_voltage(data->reg);
2427     + int voltage;
2428     +
2429     + voltage = regulator_get_voltage(data->reg);
2430     + if (voltage)
2431     + data->supply_uV = voltage;
2432     +
2433     regulator_enable(data->reg);
2434     /* setup a notifier block to update this if another device
2435     * causes the voltage to change */
2436     diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
2437     index 5f318ce..cb9f95c 100644
2438     --- a/drivers/i2c/busses/Kconfig
2439     +++ b/drivers/i2c/busses/Kconfig
2440     @@ -77,7 +77,7 @@ config I2C_AMD8111
2441     will be called i2c-amd8111.
2442    
2443     config I2C_I801
2444     - tristate "Intel 82801 (ICH)"
2445     + tristate "Intel 82801 (ICH/PCH)"
2446     depends on PCI
2447     help
2448     If you say yes to this option, support will be included for the Intel
2449     @@ -97,7 +97,8 @@ config I2C_I801
2450     ICH9
2451     Tolapai
2452     ICH10
2453     - PCH
2454     + 3400/5 Series (PCH)
2455     + Cougar Point (PCH)
2456    
2457     This driver can also be built as a module. If so, the module
2458     will be called i2c-i801.
2459     diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
2460     index 5574be2..e361da7 100644
2461     --- a/drivers/i2c/busses/i2c-i801.c
2462     +++ b/drivers/i2c/busses/i2c-i801.c
2463     @@ -41,7 +41,8 @@
2464     Tolapai 0x5032 32 hard yes yes yes
2465     ICH10 0x3a30 32 hard yes yes yes
2466     ICH10 0x3a60 32 hard yes yes yes
2467     - PCH 0x3b30 32 hard yes yes yes
2468     + 3400/5 Series (PCH) 0x3b30 32 hard yes yes yes
2469     + Cougar Point (PCH) 0x1c22 32 hard yes yes yes
2470    
2471     Features supported by this driver:
2472     Software PEC no
2473     @@ -580,6 +581,7 @@ static struct pci_device_id i801_ids[] = {
2474     { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) },
2475     { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) },
2476     { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PCH_SMBUS) },
2477     + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CPT_SMBUS) },
2478     { 0, }
2479     };
2480    
2481     @@ -709,6 +711,7 @@ static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id
2482     case PCI_DEVICE_ID_INTEL_ICH10_4:
2483     case PCI_DEVICE_ID_INTEL_ICH10_5:
2484     case PCI_DEVICE_ID_INTEL_PCH_SMBUS:
2485     + case PCI_DEVICE_ID_INTEL_CPT_SMBUS:
2486     i801_features |= FEATURE_I2C_BLOCK_READ;
2487     /* fall through */
2488     case PCI_DEVICE_ID_INTEL_82801DB_3:
2489     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
2490     index 30bdf42..f8302c2 100644
2491     --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
2492     +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
2493     @@ -752,6 +752,8 @@ void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_
2494     if (++priv->tx_outstanding == ipoib_sendq_size) {
2495     ipoib_dbg(priv, "TX ring 0x%x full, stopping kernel net queue\n",
2496     tx->qp->qp_num);
2497     + if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP))
2498     + ipoib_warn(priv, "request notify on send CQ failed\n");
2499     netif_stop_queue(dev);
2500     }
2501     }
2502     diff --git a/drivers/input/sparse-keymap.c b/drivers/input/sparse-keymap.c
2503     index fbd3987..e8d65b3 100644
2504     --- a/drivers/input/sparse-keymap.c
2505     +++ b/drivers/input/sparse-keymap.c
2506     @@ -161,7 +161,7 @@ int sparse_keymap_setup(struct input_dev *dev,
2507     return 0;
2508    
2509     err_out:
2510     - kfree(keymap);
2511     + kfree(map);
2512     return error;
2513    
2514     }
2515     diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
2516     index 072f33b..e53ddc5 100644
2517     --- a/drivers/input/tablet/wacom_sys.c
2518     +++ b/drivers/input/tablet/wacom_sys.c
2519     @@ -644,13 +644,15 @@ static int wacom_resume(struct usb_interface *intf)
2520     int rv;
2521    
2522     mutex_lock(&wacom->lock);
2523     - if (wacom->open) {
2524     +
2525     + /* switch to wacom mode first */
2526     + wacom_query_tablet_data(intf, features);
2527     +
2528     + if (wacom->open)
2529     rv = usb_submit_urb(wacom->irq, GFP_NOIO);
2530     - /* switch to wacom mode if needed */
2531     - if (!wacom_retrieve_hid_descriptor(intf, features))
2532     - wacom_query_tablet_data(intf, features);
2533     - } else
2534     + else
2535     rv = 0;
2536     +
2537     mutex_unlock(&wacom->lock);
2538    
2539     return rv;
2540     diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
2541     index e3cf568..d7500e1 100644
2542     --- a/drivers/md/dm-ioctl.c
2543     +++ b/drivers/md/dm-ioctl.c
2544     @@ -285,7 +285,8 @@ retry:
2545     up_write(&_hash_lock);
2546     }
2547    
2548     -static int dm_hash_rename(uint32_t cookie, const char *old, const char *new)
2549     +static int dm_hash_rename(uint32_t cookie, uint32_t *flags, const char *old,
2550     + const char *new)
2551     {
2552     char *new_name, *old_name;
2553     struct hash_cell *hc;
2554     @@ -344,7 +345,8 @@ static int dm_hash_rename(uint32_t cookie, const char *old, const char *new)
2555     dm_table_put(table);
2556     }
2557    
2558     - dm_kobject_uevent(hc->md, KOBJ_CHANGE, cookie);
2559     + if (!dm_kobject_uevent(hc->md, KOBJ_CHANGE, cookie))
2560     + *flags |= DM_UEVENT_GENERATED_FLAG;
2561    
2562     dm_put(hc->md);
2563     up_write(&_hash_lock);
2564     @@ -736,10 +738,10 @@ static int dev_remove(struct dm_ioctl *param, size_t param_size)
2565     __hash_remove(hc);
2566     up_write(&_hash_lock);
2567    
2568     - dm_kobject_uevent(md, KOBJ_REMOVE, param->event_nr);
2569     + if (!dm_kobject_uevent(md, KOBJ_REMOVE, param->event_nr))
2570     + param->flags |= DM_UEVENT_GENERATED_FLAG;
2571    
2572     dm_put(md);
2573     - param->data_size = 0;
2574     return 0;
2575     }
2576    
2577     @@ -773,7 +775,9 @@ static int dev_rename(struct dm_ioctl *param, size_t param_size)
2578     return r;
2579    
2580     param->data_size = 0;
2581     - return dm_hash_rename(param->event_nr, param->name, new_name);
2582     +
2583     + return dm_hash_rename(param->event_nr, &param->flags, param->name,
2584     + new_name);
2585     }
2586    
2587     static int dev_set_geometry(struct dm_ioctl *param, size_t param_size)
2588     @@ -899,8 +903,8 @@ static int do_resume(struct dm_ioctl *param)
2589    
2590     if (dm_suspended_md(md)) {
2591     r = dm_resume(md);
2592     - if (!r)
2593     - dm_kobject_uevent(md, KOBJ_CHANGE, param->event_nr);
2594     + if (!r && !dm_kobject_uevent(md, KOBJ_CHANGE, param->event_nr))
2595     + param->flags |= DM_UEVENT_GENERATED_FLAG;
2596     }
2597    
2598     if (old_map)
2599     @@ -1477,6 +1481,7 @@ static int validate_params(uint cmd, struct dm_ioctl *param)
2600     {
2601     /* Always clear this flag */
2602     param->flags &= ~DM_BUFFER_FULL_FLAG;
2603     + param->flags &= ~DM_UEVENT_GENERATED_FLAG;
2604    
2605     /* Ignores parameters */
2606     if (cmd == DM_REMOVE_ALL_CMD ||
2607     diff --git a/drivers/md/dm.c b/drivers/md/dm.c
2608     index fa786b9..fe8889e 100644
2609     --- a/drivers/md/dm.c
2610     +++ b/drivers/md/dm.c
2611     @@ -2618,18 +2618,19 @@ out:
2612     /*-----------------------------------------------------------------
2613     * Event notification.
2614     *---------------------------------------------------------------*/
2615     -void dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
2616     +int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
2617     unsigned cookie)
2618     {
2619     char udev_cookie[DM_COOKIE_LENGTH];
2620     char *envp[] = { udev_cookie, NULL };
2621    
2622     if (!cookie)
2623     - kobject_uevent(&disk_to_dev(md->disk)->kobj, action);
2624     + return kobject_uevent(&disk_to_dev(md->disk)->kobj, action);
2625     else {
2626     snprintf(udev_cookie, DM_COOKIE_LENGTH, "%s=%u",
2627     DM_COOKIE_ENV_VAR_NAME, cookie);
2628     - kobject_uevent_env(&disk_to_dev(md->disk)->kobj, action, envp);
2629     + return kobject_uevent_env(&disk_to_dev(md->disk)->kobj,
2630     + action, envp);
2631     }
2632     }
2633    
2634     diff --git a/drivers/md/dm.h b/drivers/md/dm.h
2635     index 8dadaa5..bad1724 100644
2636     --- a/drivers/md/dm.h
2637     +++ b/drivers/md/dm.h
2638     @@ -125,8 +125,8 @@ void dm_stripe_exit(void);
2639     int dm_open_count(struct mapped_device *md);
2640     int dm_lock_for_deletion(struct mapped_device *md);
2641    
2642     -void dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
2643     - unsigned cookie);
2644     +int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
2645     + unsigned cookie);
2646    
2647     int dm_io_init(void);
2648     void dm_io_exit(void);
2649     diff --git a/drivers/md/linear.c b/drivers/md/linear.c
2650     index 00435bd..001317b 100644
2651     --- a/drivers/md/linear.c
2652     +++ b/drivers/md/linear.c
2653     @@ -172,12 +172,14 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
2654     disk_stack_limits(mddev->gendisk, rdev->bdev,
2655     rdev->data_offset << 9);
2656     /* as we don't honour merge_bvec_fn, we must never risk
2657     - * violating it, so limit ->max_sector to one PAGE, as
2658     - * a one page request is never in violation.
2659     + * violating it, so limit max_phys_segments to 1 lying within
2660     + * a single page.
2661     */
2662     - if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&
2663     - queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))
2664     - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
2665     + if (rdev->bdev->bd_disk->queue->merge_bvec_fn) {
2666     + blk_queue_max_phys_segments(mddev->queue, 1);
2667     + blk_queue_segment_boundary(mddev->queue,
2668     + PAGE_CACHE_SIZE - 1);
2669     + }
2670    
2671     conf->array_sectors += rdev->sectors;
2672     cnt++;
2673     diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c
2674     index 32a662f..f9ee99f 100644
2675     --- a/drivers/md/multipath.c
2676     +++ b/drivers/md/multipath.c
2677     @@ -301,14 +301,16 @@ static int multipath_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
2678     rdev->data_offset << 9);
2679    
2680     /* as we don't honour merge_bvec_fn, we must never risk
2681     - * violating it, so limit ->max_sector to one PAGE, as
2682     - * a one page request is never in violation.
2683     + * violating it, so limit ->max_phys_segments to one, lying
2684     + * within a single page.
2685     * (Note: it is very unlikely that a device with
2686     * merge_bvec_fn will be involved in multipath.)
2687     */
2688     - if (q->merge_bvec_fn &&
2689     - queue_max_sectors(q) > (PAGE_SIZE>>9))
2690     - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
2691     + if (q->merge_bvec_fn) {
2692     + blk_queue_max_phys_segments(mddev->queue, 1);
2693     + blk_queue_segment_boundary(mddev->queue,
2694     + PAGE_CACHE_SIZE - 1);
2695     + }
2696    
2697     conf->working_disks++;
2698     mddev->degraded--;
2699     @@ -476,9 +478,11 @@ static int multipath_run (mddev_t *mddev)
2700     /* as we don't honour merge_bvec_fn, we must never risk
2701     * violating it, not that we ever expect a device with
2702     * a merge_bvec_fn to be involved in multipath */
2703     - if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&
2704     - queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))
2705     - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
2706     + if (rdev->bdev->bd_disk->queue->merge_bvec_fn) {
2707     + blk_queue_max_phys_segments(mddev->queue, 1);
2708     + blk_queue_segment_boundary(mddev->queue,
2709     + PAGE_CACHE_SIZE - 1);
2710     + }
2711    
2712     if (!test_bit(Faulty, &rdev->flags))
2713     conf->working_disks++;
2714     diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
2715     index 77605cd..41ee9de 100644
2716     --- a/drivers/md/raid0.c
2717     +++ b/drivers/md/raid0.c
2718     @@ -176,14 +176,15 @@ static int create_strip_zones(mddev_t *mddev)
2719     disk_stack_limits(mddev->gendisk, rdev1->bdev,
2720     rdev1->data_offset << 9);
2721     /* as we don't honour merge_bvec_fn, we must never risk
2722     - * violating it, so limit ->max_sector to one PAGE, as
2723     - * a one page request is never in violation.
2724     + * violating it, so limit ->max_phys_segments to 1, lying within
2725     + * a single page.
2726     */
2727    
2728     - if (rdev1->bdev->bd_disk->queue->merge_bvec_fn &&
2729     - queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))
2730     - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
2731     -
2732     + if (rdev1->bdev->bd_disk->queue->merge_bvec_fn) {
2733     + blk_queue_max_phys_segments(mddev->queue, 1);
2734     + blk_queue_segment_boundary(mddev->queue,
2735     + PAGE_CACHE_SIZE - 1);
2736     + }
2737     if (!smallest || (rdev1->sectors < smallest->sectors))
2738     smallest = rdev1;
2739     cnt++;
2740     diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
2741     index d119b7b..047c468 100644
2742     --- a/drivers/md/raid10.c
2743     +++ b/drivers/md/raid10.c
2744     @@ -1155,13 +1155,17 @@ static int raid10_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
2745    
2746     disk_stack_limits(mddev->gendisk, rdev->bdev,
2747     rdev->data_offset << 9);
2748     - /* as we don't honour merge_bvec_fn, we must never risk
2749     - * violating it, so limit ->max_sector to one PAGE, as
2750     - * a one page request is never in violation.
2751     + /* as we don't honour merge_bvec_fn, we must
2752     + * never risk violating it, so limit
2753     + * ->max_phys_segments to one lying with a single
2754     + * page, as a one page request is never in
2755     + * violation.
2756     */
2757     - if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&
2758     - queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))
2759     - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
2760     + if (rdev->bdev->bd_disk->queue->merge_bvec_fn) {
2761     + blk_queue_max_phys_segments(mddev->queue, 1);
2762     + blk_queue_segment_boundary(mddev->queue,
2763     + PAGE_CACHE_SIZE - 1);
2764     + }
2765    
2766     p->head_position = 0;
2767     rdev->raid_disk = mirror;
2768     @@ -2255,12 +2259,14 @@ static int run(mddev_t *mddev)
2769     disk_stack_limits(mddev->gendisk, rdev->bdev,
2770     rdev->data_offset << 9);
2771     /* as we don't honour merge_bvec_fn, we must never risk
2772     - * violating it, so limit ->max_sector to one PAGE, as
2773     - * a one page request is never in violation.
2774     + * violating it, so limit max_phys_segments to 1 lying
2775     + * within a single page.
2776     */
2777     - if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&
2778     - queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9))
2779     - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
2780     + if (rdev->bdev->bd_disk->queue->merge_bvec_fn) {
2781     + blk_queue_max_phys_segments(mddev->queue, 1);
2782     + blk_queue_segment_boundary(mddev->queue,
2783     + PAGE_CACHE_SIZE - 1);
2784     + }
2785    
2786     disk->head_position = 0;
2787     }
2788     diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
2789     index 57f149b..4d353d2 100644
2790     --- a/drivers/net/e1000e/netdev.c
2791     +++ b/drivers/net/e1000e/netdev.c
2792     @@ -660,6 +660,8 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter)
2793     i = 0;
2794     }
2795    
2796     + if (i == tx_ring->next_to_use)
2797     + break;
2798     eop = tx_ring->buffer_info[i].next_to_watch;
2799     eop_desc = E1000_TX_DESC(*tx_ring, eop);
2800     }
2801     diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
2802     index 67d414b..3db85da 100644
2803     --- a/drivers/net/r8169.c
2804     +++ b/drivers/net/r8169.c
2805     @@ -3255,8 +3255,8 @@ static void rtl8169_set_rxbufsize(struct rtl8169_private *tp,
2806     unsigned int max_frame = mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
2807    
2808     if (max_frame != 16383)
2809     - printk(KERN_WARNING "WARNING! Changing of MTU on this NIC"
2810     - "May lead to frame reception errors!\n");
2811     + printk(KERN_WARNING PFX "WARNING! Changing of MTU on this "
2812     + "NIC may lead to frame reception errors!\n");
2813    
2814     tp->rx_buf_sz = (max_frame > RX_BUF_SIZE) ? max_frame : RX_BUF_SIZE;
2815     }
2816     diff --git a/drivers/net/wireless/ath/ar9170/usb.c b/drivers/net/wireless/ath/ar9170/usb.c
2817     index e0799d9..0387658 100644
2818     --- a/drivers/net/wireless/ath/ar9170/usb.c
2819     +++ b/drivers/net/wireless/ath/ar9170/usb.c
2820     @@ -414,7 +414,7 @@ static int ar9170_usb_exec_cmd(struct ar9170 *ar, enum ar9170_cmd cmd,
2821     spin_unlock_irqrestore(&aru->common.cmdlock, flags);
2822    
2823     usb_fill_int_urb(urb, aru->udev,
2824     - usb_sndbulkpipe(aru->udev, AR9170_EP_CMD),
2825     + usb_sndintpipe(aru->udev, AR9170_EP_CMD),
2826     aru->common.cmdbuf, plen + 4,
2827     ar9170_usb_tx_urb_complete, NULL, 1);
2828    
2829     diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
2830     index 33a1071..7b1eab4 100644
2831     --- a/drivers/net/wireless/ath/ath9k/main.c
2832     +++ b/drivers/net/wireless/ath/ath9k/main.c
2833     @@ -2721,8 +2721,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
2834     all_wiphys_idle = ath9k_all_wiphys_idle(sc);
2835     ath9k_set_wiphy_idle(aphy, idle);
2836    
2837     - if (!idle && all_wiphys_idle)
2838     - enable_radio = true;
2839     + enable_radio = (!idle && all_wiphys_idle);
2840    
2841     /*
2842     * After we unlock here its possible another wiphy
2843     diff --git a/drivers/net/wireless/b43/Kconfig b/drivers/net/wireless/b43/Kconfig
2844     index 64c12e1..0a00d42 100644
2845     --- a/drivers/net/wireless/b43/Kconfig
2846     +++ b/drivers/net/wireless/b43/Kconfig
2847     @@ -78,11 +78,11 @@ config B43_SDIO
2848    
2849     If unsure, say N.
2850    
2851     -# Data transfers to the device via PIO
2852     -# This is only needed on PCMCIA and SDIO devices. All others can do DMA properly.
2853     +#Data transfers to the device via PIO. We want it as a fallback even
2854     +# if we can do DMA.
2855     config B43_PIO
2856     bool
2857     - depends on B43 && (B43_SDIO || B43_PCMCIA || B43_FORCE_PIO)
2858     + depends on B43
2859     select SSB_BLOCKIO
2860     default y
2861    
2862     diff --git a/drivers/net/wireless/b43/Makefile b/drivers/net/wireless/b43/Makefile
2863     index 84772a2..5e83b6f 100644
2864     --- a/drivers/net/wireless/b43/Makefile
2865     +++ b/drivers/net/wireless/b43/Makefile
2866     @@ -12,7 +12,7 @@ b43-y += xmit.o
2867     b43-y += lo.o
2868     b43-y += wa.o
2869     b43-y += dma.o
2870     -b43-$(CONFIG_B43_PIO) += pio.o
2871     +b43-y += pio.o
2872     b43-y += rfkill.o
2873     b43-$(CONFIG_B43_LEDS) += leds.o
2874     b43-$(CONFIG_B43_PCMCIA) += pcmcia.o
2875     diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h
2876     index c484cc2..7df822e 100644
2877     --- a/drivers/net/wireless/b43/b43.h
2878     +++ b/drivers/net/wireless/b43/b43.h
2879     @@ -694,6 +694,7 @@ struct b43_wldev {
2880     bool radio_hw_enable; /* saved state of radio hardware enabled state */
2881     bool qos_enabled; /* TRUE, if QoS is used. */
2882     bool hwcrypto_enabled; /* TRUE, if HW crypto acceleration is enabled. */
2883     + bool use_pio; /* TRUE if next init should use PIO */
2884    
2885     /* PHY/Radio device. */
2886     struct b43_phy phy;
2887     @@ -822,11 +823,9 @@ struct b43_wl {
2888     /* The device LEDs. */
2889     struct b43_leds leds;
2890    
2891     -#ifdef CONFIG_B43_PIO
2892     /* Kmalloc'ed scratch space for PIO TX/RX. Protected by wl->mutex. */
2893     u8 pio_scratchspace[110] __attribute__((__aligned__(8)));
2894     u8 pio_tailspace[4] __attribute__((__aligned__(8)));
2895     -#endif /* CONFIG_B43_PIO */
2896     };
2897    
2898     static inline struct b43_wl *hw_to_b43_wl(struct ieee80211_hw *hw)
2899     @@ -877,20 +876,15 @@ static inline void b43_write32(struct b43_wldev *dev, u16 offset, u32 value)
2900    
2901     static inline bool b43_using_pio_transfers(struct b43_wldev *dev)
2902     {
2903     -#ifdef CONFIG_B43_PIO
2904     return dev->__using_pio_transfers;
2905     -#else
2906     - return 0;
2907     -#endif
2908     }
2909    
2910     #ifdef CONFIG_B43_FORCE_PIO
2911     -# define B43_FORCE_PIO 1
2912     +# define B43_PIO_DEFAULT 1
2913     #else
2914     -# define B43_FORCE_PIO 0
2915     +# define B43_PIO_DEFAULT 0
2916     #endif
2917    
2918     -
2919     /* Message printing */
2920     void b43info(struct b43_wl *wl, const char *fmt, ...)
2921     __attribute__ ((format(printf, 2, 3)));
2922     diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
2923     index 88d1fd0..615af22 100644
2924     --- a/drivers/net/wireless/b43/dma.c
2925     +++ b/drivers/net/wireless/b43/dma.c
2926     @@ -1653,7 +1653,6 @@ void b43_dma_tx_resume(struct b43_wldev *dev)
2927     b43_power_saving_ctl_bits(dev, 0);
2928     }
2929    
2930     -#ifdef CONFIG_B43_PIO
2931     static void direct_fifo_rx(struct b43_wldev *dev, enum b43_dmatype type,
2932     u16 mmio_base, bool enable)
2933     {
2934     @@ -1687,4 +1686,3 @@ void b43_dma_direct_fifo_rx(struct b43_wldev *dev,
2935     mmio_base = b43_dmacontroller_base(type, engine_index);
2936     direct_fifo_rx(dev, type, mmio_base, enable);
2937     }
2938     -#endif /* CONFIG_B43_PIO */
2939     diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
2940     index 629c166..9eb4f5e 100644
2941     --- a/drivers/net/wireless/b43/main.c
2942     +++ b/drivers/net/wireless/b43/main.c
2943     @@ -102,6 +102,9 @@ int b43_modparam_verbose = B43_VERBOSITY_DEFAULT;
2944     module_param_named(verbose, b43_modparam_verbose, int, 0644);
2945     MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug");
2946    
2947     +int b43_modparam_pio = B43_PIO_DEFAULT;
2948     +module_param_named(pio, b43_modparam_pio, int, 0644);
2949     +MODULE_PARM_DESC(pio, "Use PIO accesses by default: 0=DMA, 1=PIO");
2950    
2951     static const struct ssb_device_id b43_ssb_tbl[] = {
2952     SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5),
2953     @@ -1790,8 +1793,9 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev)
2954     dma_reason[4], dma_reason[5]);
2955     b43err(dev->wl, "This device does not support DMA "
2956     "on your system. Please use PIO instead.\n");
2957     - b43err(dev->wl, "CONFIG_B43_FORCE_PIO must be set in "
2958     - "your kernel configuration.\n");
2959     + /* Fall back to PIO transfers if we get fatal DMA errors! */
2960     + dev->use_pio = 1;
2961     + b43_controller_restart(dev, "DMA error");
2962     return;
2963     }
2964     if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) {
2965     @@ -4358,7 +4362,7 @@ static int b43_wireless_core_init(struct b43_wldev *dev)
2966    
2967     if ((dev->dev->bus->bustype == SSB_BUSTYPE_PCMCIA) ||
2968     (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) ||
2969     - B43_FORCE_PIO) {
2970     + dev->use_pio) {
2971     dev->__using_pio_transfers = 1;
2972     err = b43_pio_init(dev);
2973     } else {
2974     @@ -4826,6 +4830,7 @@ static int b43_one_core_attach(struct ssb_device *dev, struct b43_wl *wl)
2975     if (!wldev)
2976     goto out;
2977    
2978     + wldev->use_pio = b43_modparam_pio;
2979     wldev->dev = dev;
2980     wldev->wl = wl;
2981     b43_set_status(wldev, B43_STAT_UNINIT);
2982     diff --git a/drivers/net/wireless/b43/pio.h b/drivers/net/wireless/b43/pio.h
2983     index 7dd649c..7b3c42f 100644
2984     --- a/drivers/net/wireless/b43/pio.h
2985     +++ b/drivers/net/wireless/b43/pio.h
2986     @@ -55,8 +55,6 @@
2987     #define B43_PIO_MAX_NR_TXPACKETS 32
2988    
2989    
2990     -#ifdef CONFIG_B43_PIO
2991     -
2992     struct b43_pio_txpacket {
2993     /* Pointer to the TX queue we belong to. */
2994     struct b43_pio_txqueue *queue;
2995     @@ -169,42 +167,4 @@ void b43_pio_rx(struct b43_pio_rxqueue *q);
2996     void b43_pio_tx_suspend(struct b43_wldev *dev);
2997     void b43_pio_tx_resume(struct b43_wldev *dev);
2998    
2999     -
3000     -#else /* CONFIG_B43_PIO */
3001     -
3002     -
3003     -static inline int b43_pio_init(struct b43_wldev *dev)
3004     -{
3005     - return 0;
3006     -}
3007     -static inline void b43_pio_free(struct b43_wldev *dev)
3008     -{
3009     -}
3010     -static inline void b43_pio_stop(struct b43_wldev *dev)
3011     -{
3012     -}
3013     -static inline int b43_pio_tx(struct b43_wldev *dev,
3014     - struct sk_buff *skb)
3015     -{
3016     - return 0;
3017     -}
3018     -static inline void b43_pio_handle_txstatus(struct b43_wldev *dev,
3019     - const struct b43_txstatus *status)
3020     -{
3021     -}
3022     -static inline void b43_pio_get_tx_stats(struct b43_wldev *dev,
3023     - struct ieee80211_tx_queue_stats *stats)
3024     -{
3025     -}
3026     -static inline void b43_pio_rx(struct b43_pio_rxqueue *q)
3027     -{
3028     -}
3029     -static inline void b43_pio_tx_suspend(struct b43_wldev *dev)
3030     -{
3031     -}
3032     -static inline void b43_pio_tx_resume(struct b43_wldev *dev)
3033     -{
3034     -}
3035     -
3036     -#endif /* CONFIG_B43_PIO */
3037     #endif /* B43_PIO_H_ */
3038     diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
3039     index 3146281..3b4c5a4 100644
3040     --- a/drivers/net/wireless/iwlwifi/iwl-4965.c
3041     +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
3042     @@ -581,6 +581,8 @@ static int iwl4965_alive_notify(struct iwl_priv *priv)
3043    
3044     iwl4965_set_wr_ptrs(priv, IWL_CMD_QUEUE_NUM, 0);
3045    
3046     + /* reset to 0 to enable all the queue first */
3047     + priv->txq_ctx_active_msk = 0;
3048     /* Map each Tx/cmd queue to its corresponding fifo */
3049     for (i = 0; i < ARRAY_SIZE(default_queue_to_tx_fifo); i++) {
3050     int ac = default_queue_to_tx_fifo[i];
3051     @@ -2008,7 +2010,9 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
3052     IWL_DEBUG_TX_REPLY(priv, "Retry scheduler reclaim scd_ssn "
3053     "%d index %d\n", scd_ssn , index);
3054     freed = iwl_tx_queue_reclaim(priv, txq_id, index);
3055     - iwl_free_tfds_in_queue(priv, sta_id, tid, freed);
3056     + if (qc)
3057     + iwl_free_tfds_in_queue(priv, sta_id,
3058     + tid, freed);
3059    
3060     if (priv->mac80211_registered &&
3061     (iwl_queue_space(&txq->q) > txq->q.low_mark) &&
3062     @@ -2035,13 +2039,14 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
3063    
3064     freed = iwl_tx_queue_reclaim(priv, txq_id, index);
3065     if (qc && likely(sta_id != IWL_INVALID_STATION))
3066     - priv->stations[sta_id].tid[tid].tfds_in_queue -= freed;
3067     + iwl_free_tfds_in_queue(priv, sta_id, tid, freed);
3068     + else if (sta_id == IWL_INVALID_STATION)
3069     + IWL_DEBUG_TX_REPLY(priv, "Station not known\n");
3070    
3071     if (priv->mac80211_registered &&
3072     (iwl_queue_space(&txq->q) > txq->q.low_mark))
3073     iwl_wake_queue(priv, txq_id);
3074     }
3075     -
3076     if (qc && likely(sta_id != IWL_INVALID_STATION))
3077     iwl_txq_check_empty(priv, sta_id, tid, txq_id);
3078    
3079     diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
3080     index cffaae7..c610e5f 100644
3081     --- a/drivers/net/wireless/iwlwifi/iwl-5000.c
3082     +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
3083     @@ -657,6 +657,8 @@ int iwl5000_alive_notify(struct iwl_priv *priv)
3084    
3085     iwl5000_set_wr_ptrs(priv, IWL_CMD_QUEUE_NUM, 0);
3086    
3087     + /* reset to 0 to enable all the queue first */
3088     + priv->txq_ctx_active_msk = 0;
3089     /* map qos queues to fifos one-to-one */
3090     for (i = 0; i < ARRAY_SIZE(iwl5000_default_queue_to_tx_fifo); i++) {
3091     int ac = iwl5000_default_queue_to_tx_fifo[i];
3092     diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
3093     index 1c9866d..5622a55 100644
3094     --- a/drivers/net/wireless/iwlwifi/iwl-agn.c
3095     +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
3096     @@ -2461,7 +2461,7 @@ static int iwl_setup_mac(struct iwl_priv *priv)
3097     BIT(NL80211_IFTYPE_STATION) |
3098     BIT(NL80211_IFTYPE_ADHOC);
3099    
3100     - hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY |
3101     + hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
3102     WIPHY_FLAG_DISABLE_BEACON_HINTS;
3103    
3104     /*
3105     diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c
3106     index fa1c89b..8f1b850 100644
3107     --- a/drivers/net/wireless/iwlwifi/iwl-scan.c
3108     +++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
3109     @@ -404,21 +404,6 @@ EXPORT_SYMBOL(iwl_init_scan_params);
3110    
3111     static int iwl_scan_initiate(struct iwl_priv *priv)
3112     {
3113     - if (!iwl_is_ready_rf(priv)) {
3114     - IWL_DEBUG_SCAN(priv, "Aborting scan due to not ready.\n");
3115     - return -EIO;
3116     - }
3117     -
3118     - if (test_bit(STATUS_SCANNING, &priv->status)) {
3119     - IWL_DEBUG_SCAN(priv, "Scan already in progress.\n");
3120     - return -EAGAIN;
3121     - }
3122     -
3123     - if (test_bit(STATUS_SCAN_ABORTING, &priv->status)) {
3124     - IWL_DEBUG_SCAN(priv, "Scan request while abort pending\n");
3125     - return -EAGAIN;
3126     - }
3127     -
3128     IWL_DEBUG_INFO(priv, "Starting scan...\n");
3129     set_bit(STATUS_SCANNING, &priv->status);
3130     priv->scan_start = jiffies;
3131     @@ -449,6 +434,18 @@ int iwl_mac_hw_scan(struct ieee80211_hw *hw,
3132     goto out_unlock;
3133     }
3134    
3135     + if (test_bit(STATUS_SCANNING, &priv->status)) {
3136     + IWL_DEBUG_SCAN(priv, "Scan already in progress.\n");
3137     + ret = -EAGAIN;
3138     + goto out_unlock;
3139     + }
3140     +
3141     + if (test_bit(STATUS_SCAN_ABORTING, &priv->status)) {
3142     + IWL_DEBUG_SCAN(priv, "Scan request while abort pending\n");
3143     + ret = -EAGAIN;
3144     + goto out_unlock;
3145     + }
3146     +
3147     /* We don't schedule scan within next_scan_jiffies period.
3148     * Avoid scanning during possible EAPOL exchange, return
3149     * success immediately.
3150     diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
3151     index f297865..adbb3ea 100644
3152     --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
3153     +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
3154     @@ -1926,7 +1926,7 @@ static void iwl3945_init_hw_rates(struct iwl_priv *priv,
3155     {
3156     int i;
3157    
3158     - for (i = 0; i < IWL_RATE_COUNT; i++) {
3159     + for (i = 0; i < IWL_RATE_COUNT_LEGACY; i++) {
3160     rates[i].bitrate = iwl3945_rates[i].ieee * 5;
3161     rates[i].hw_value = i; /* Rate scaling will work on indexes */
3162     rates[i].hw_value_short = i;
3163     @@ -3903,7 +3903,7 @@ static int iwl3945_setup_mac(struct iwl_priv *priv)
3164     BIT(NL80211_IFTYPE_STATION) |
3165     BIT(NL80211_IFTYPE_ADHOC);
3166    
3167     - hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY |
3168     + hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
3169     WIPHY_FLAG_DISABLE_BEACON_HINTS;
3170    
3171     hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX_3945;
3172     diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
3173     index 3245d33..c4fead1 100644
3174     --- a/drivers/pci/pci.c
3175     +++ b/drivers/pci/pci.c
3176     @@ -2612,6 +2612,23 @@ int pci_resource_bar(struct pci_dev *dev, int resno, enum pci_bar_type *type)
3177     return 0;
3178     }
3179    
3180     +/* Some architectures require additional programming to enable VGA */
3181     +static arch_set_vga_state_t arch_set_vga_state;
3182     +
3183     +void __init pci_register_set_vga_state(arch_set_vga_state_t func)
3184     +{
3185     + arch_set_vga_state = func; /* NULL disables */
3186     +}
3187     +
3188     +static int pci_set_vga_state_arch(struct pci_dev *dev, bool decode,
3189     + unsigned int command_bits, bool change_bridge)
3190     +{
3191     + if (arch_set_vga_state)
3192     + return arch_set_vga_state(dev, decode, command_bits,
3193     + change_bridge);
3194     + return 0;
3195     +}
3196     +
3197     /**
3198     * pci_set_vga_state - set VGA decode state on device and parents if requested
3199     * @dev: the PCI device
3200     @@ -2625,9 +2642,15 @@ int pci_set_vga_state(struct pci_dev *dev, bool decode,
3201     struct pci_bus *bus;
3202     struct pci_dev *bridge;
3203     u16 cmd;
3204     + int rc;
3205    
3206     WARN_ON(command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY));
3207    
3208     + /* ARCH specific VGA enables */
3209     + rc = pci_set_vga_state_arch(dev, decode, command_bits, change_bridge);
3210     + if (rc)
3211     + return rc;
3212     +
3213     pci_read_config_word(dev, PCI_COMMAND, &cmd);
3214     if (decode == true)
3215     cmd |= command_bits;
3216     @@ -2874,4 +2897,3 @@ EXPORT_SYMBOL(pci_target_state);
3217     EXPORT_SYMBOL(pci_prepare_to_sleep);
3218     EXPORT_SYMBOL(pci_back_from_sleep);
3219     EXPORT_SYMBOL_GPL(pci_set_pcie_reset_state);
3220     -
3221     diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
3222     index c28a712..e6b67f2 100644
3223     --- a/drivers/scsi/libiscsi.c
3224     +++ b/drivers/scsi/libiscsi.c
3225     @@ -3027,14 +3027,15 @@ static void iscsi_start_session_recovery(struct iscsi_session *session,
3226     session->state = ISCSI_STATE_TERMINATE;
3227     else if (conn->stop_stage != STOP_CONN_RECOVER)
3228     session->state = ISCSI_STATE_IN_RECOVERY;
3229     +
3230     + old_stop_stage = conn->stop_stage;
3231     + conn->stop_stage = flag;
3232     spin_unlock_bh(&session->lock);
3233    
3234     del_timer_sync(&conn->transport_timer);
3235     iscsi_suspend_tx(conn);
3236    
3237     spin_lock_bh(&session->lock);
3238     - old_stop_stage = conn->stop_stage;
3239     - conn->stop_stage = flag;
3240     conn->c_stage = ISCSI_CONN_STOPPED;
3241     spin_unlock_bh(&session->lock);
3242    
3243     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
3244     index 34d4eb9..db6b071 100644
3245     --- a/drivers/usb/class/cdc-acm.c
3246     +++ b/drivers/usb/class/cdc-acm.c
3247     @@ -170,6 +170,7 @@ static void acm_write_done(struct acm *acm, struct acm_wb *wb)
3248     {
3249     wb->use = 0;
3250     acm->transmitting--;
3251     + usb_autopm_put_interface_async(acm->control);
3252     }
3253    
3254     /*
3255     @@ -211,9 +212,12 @@ static int acm_write_start(struct acm *acm, int wbn)
3256     }
3257    
3258     dbg("%s susp_count: %d", __func__, acm->susp_count);
3259     + usb_autopm_get_interface_async(acm->control);
3260     if (acm->susp_count) {
3261     - acm->delayed_wb = wb;
3262     - schedule_work(&acm->waker);
3263     + if (!acm->delayed_wb)
3264     + acm->delayed_wb = wb;
3265     + else
3266     + usb_autopm_put_interface_async(acm->control);
3267     spin_unlock_irqrestore(&acm->write_lock, flags);
3268     return 0; /* A white lie */
3269     }
3270     @@ -534,23 +538,6 @@ static void acm_softint(struct work_struct *work)
3271     tty_kref_put(tty);
3272     }
3273    
3274     -static void acm_waker(struct work_struct *waker)
3275     -{
3276     - struct acm *acm = container_of(waker, struct acm, waker);
3277     - int rv;
3278     -
3279     - rv = usb_autopm_get_interface(acm->control);
3280     - if (rv < 0) {
3281     - dev_err(&acm->dev->dev, "Autopm failure in %s\n", __func__);
3282     - return;
3283     - }
3284     - if (acm->delayed_wb) {
3285     - acm_start_wb(acm, acm->delayed_wb);
3286     - acm->delayed_wb = NULL;
3287     - }
3288     - usb_autopm_put_interface(acm->control);
3289     -}
3290     -
3291     /*
3292     * TTY handlers
3293     */
3294     @@ -1178,7 +1165,6 @@ made_compressed_probe:
3295     acm->urb_task.func = acm_rx_tasklet;
3296     acm->urb_task.data = (unsigned long) acm;
3297     INIT_WORK(&acm->work, acm_softint);
3298     - INIT_WORK(&acm->waker, acm_waker);
3299     init_waitqueue_head(&acm->drain_wait);
3300     spin_lock_init(&acm->throttle_lock);
3301     spin_lock_init(&acm->write_lock);
3302     @@ -1343,7 +1329,6 @@ static void stop_data_traffic(struct acm *acm)
3303     tasklet_enable(&acm->urb_task);
3304    
3305     cancel_work_sync(&acm->work);
3306     - cancel_work_sync(&acm->waker);
3307     }
3308    
3309     static void acm_disconnect(struct usb_interface *intf)
3310     @@ -1435,6 +1420,7 @@ static int acm_suspend(struct usb_interface *intf, pm_message_t message)
3311     static int acm_resume(struct usb_interface *intf)
3312     {
3313     struct acm *acm = usb_get_intfdata(intf);
3314     + struct acm_wb *wb;
3315     int rv = 0;
3316     int cnt;
3317    
3318     @@ -1449,6 +1435,21 @@ static int acm_resume(struct usb_interface *intf)
3319     mutex_lock(&acm->mutex);
3320     if (acm->port.count) {
3321     rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
3322     +
3323     + spin_lock_irq(&acm->write_lock);
3324     + if (acm->delayed_wb) {
3325     + wb = acm->delayed_wb;
3326     + acm->delayed_wb = NULL;
3327     + spin_unlock_irq(&acm->write_lock);
3328     + acm_start_wb(acm, wb);
3329     + } else {
3330     + spin_unlock_irq(&acm->write_lock);
3331     + }
3332     +
3333     + /*
3334     + * delayed error checking because we must
3335     + * do the write path at all cost
3336     + */
3337     if (rv < 0)
3338     goto err_out;
3339    
3340     diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h
3341     index c4a0ee8..519eb63 100644
3342     --- a/drivers/usb/class/cdc-acm.h
3343     +++ b/drivers/usb/class/cdc-acm.h
3344     @@ -112,7 +112,6 @@ struct acm {
3345     struct mutex mutex;
3346     struct usb_cdc_line_coding line; /* bits, stop, parity */
3347     struct work_struct work; /* work queue entry for line discipline waking up */
3348     - struct work_struct waker;
3349     wait_queue_head_t drain_wait; /* close processing */
3350     struct tasklet_struct urb_task; /* rx processing */
3351     spinlock_t throttle_lock; /* synchronize throtteling and read callback */
3352     diff --git a/drivers/video/backlight/mbp_nvidia_bl.c b/drivers/video/backlight/mbp_nvidia_bl.c
3353     index 2e78b07..9804ee9 100644
3354     --- a/drivers/video/backlight/mbp_nvidia_bl.c
3355     +++ b/drivers/video/backlight/mbp_nvidia_bl.c
3356     @@ -139,6 +139,51 @@ static int mbp_dmi_match(const struct dmi_system_id *id)
3357     static const struct dmi_system_id __initdata mbp_device_table[] = {
3358     {
3359     .callback = mbp_dmi_match,
3360     + .ident = "MacBook 1,1",
3361     + .matches = {
3362     + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
3363     + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook1,1"),
3364     + },
3365     + .driver_data = (void *)&intel_chipset_data,
3366     + },
3367     + {
3368     + .callback = mbp_dmi_match,
3369     + .ident = "MacBook 2,1",
3370     + .matches = {
3371     + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
3372     + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook2,1"),
3373     + },
3374     + .driver_data = (void *)&intel_chipset_data,
3375     + },
3376     + {
3377     + .callback = mbp_dmi_match,
3378     + .ident = "MacBook 3,1",
3379     + .matches = {
3380     + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
3381     + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook3,1"),
3382     + },
3383     + .driver_data = (void *)&intel_chipset_data,
3384     + },
3385     + {
3386     + .callback = mbp_dmi_match,
3387     + .ident = "MacBook 4,1",
3388     + .matches = {
3389     + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
3390     + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook4,1"),
3391     + },
3392     + .driver_data = (void *)&intel_chipset_data,
3393     + },
3394     + {
3395     + .callback = mbp_dmi_match,
3396     + .ident = "MacBook 4,2",
3397     + .matches = {
3398     + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
3399     + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook4,2"),
3400     + },
3401     + .driver_data = (void *)&intel_chipset_data,
3402     + },
3403     + {
3404     + .callback = mbp_dmi_match,
3405     .ident = "MacBookPro 3,1",
3406     .matches = {
3407     DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
3408     diff --git a/drivers/video/sunxvr500.c b/drivers/video/sunxvr500.c
3409     index 4cd5049..3803745 100644
3410     --- a/drivers/video/sunxvr500.c
3411     +++ b/drivers/video/sunxvr500.c
3412     @@ -242,11 +242,27 @@ static int __devinit e3d_set_fbinfo(struct e3d_info *ep)
3413     static int __devinit e3d_pci_register(struct pci_dev *pdev,
3414     const struct pci_device_id *ent)
3415     {
3416     + struct device_node *of_node;
3417     + const char *device_type;
3418     struct fb_info *info;
3419     struct e3d_info *ep;
3420     unsigned int line_length;
3421     int err;
3422    
3423     + of_node = pci_device_to_OF_node(pdev);
3424     + if (!of_node) {
3425     + printk(KERN_ERR "e3d: Cannot find OF node of %s\n",
3426     + pci_name(pdev));
3427     + return -ENODEV;
3428     + }
3429     +
3430     + device_type = of_get_property(of_node, "device_type", NULL);
3431     + if (!device_type) {
3432     + printk(KERN_INFO "e3d: Ignoring secondary output device "
3433     + "at %s\n", pci_name(pdev));
3434     + return -ENODEV;
3435     + }
3436     +
3437     err = pci_enable_device(pdev);
3438     if (err < 0) {
3439     printk(KERN_ERR "e3d: Cannot enable PCI device %s\n",
3440     @@ -265,13 +281,7 @@ static int __devinit e3d_pci_register(struct pci_dev *pdev,
3441     ep->info = info;
3442     ep->pdev = pdev;
3443     spin_lock_init(&ep->lock);
3444     - ep->of_node = pci_device_to_OF_node(pdev);
3445     - if (!ep->of_node) {
3446     - printk(KERN_ERR "e3d: Cannot find OF node of %s\n",
3447     - pci_name(pdev));
3448     - err = -ENODEV;
3449     - goto err_release_fb;
3450     - }
3451     + ep->of_node = of_node;
3452    
3453     /* Read the PCI base register of the frame buffer, which we
3454     * need in order to interpret the RAMDAC_VID_*FB* values in
3455     diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
3456     index a6c5674..0b91907 100644
3457     --- a/drivers/watchdog/hpwdt.c
3458     +++ b/drivers/watchdog/hpwdt.c
3459     @@ -443,7 +443,7 @@ static void hpwdt_ping(void)
3460     static int hpwdt_change_timer(int new_margin)
3461     {
3462     /* Arbitrary, can't find the card's limits */
3463     - if (new_margin < 30 || new_margin > 600) {
3464     + if (new_margin < 5 || new_margin > 600) {
3465     printk(KERN_WARNING
3466     "hpwdt: New value passed in is invalid: %d seconds.\n",
3467     new_margin);
3468     diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c
3469     index 4bdb7f1..e2ebe08 100644
3470     --- a/drivers/watchdog/iTCO_wdt.c
3471     +++ b/drivers/watchdog/iTCO_wdt.c
3472     @@ -115,8 +115,37 @@ enum iTCO_chipsets {
3473     TCO_3420, /* 3420 */
3474     TCO_3450, /* 3450 */
3475     TCO_EP80579, /* EP80579 */
3476     - TCO_CPTD, /* CPT Desktop */
3477     - TCO_CPTM, /* CPT Mobile */
3478     + TCO_CPT1, /* Cougar Point */
3479     + TCO_CPT2, /* Cougar Point Desktop */
3480     + TCO_CPT3, /* Cougar Point Mobile */
3481     + TCO_CPT4, /* Cougar Point */
3482     + TCO_CPT5, /* Cougar Point */
3483     + TCO_CPT6, /* Cougar Point */
3484     + TCO_CPT7, /* Cougar Point */
3485     + TCO_CPT8, /* Cougar Point */
3486     + TCO_CPT9, /* Cougar Point */
3487     + TCO_CPT10, /* Cougar Point */
3488     + TCO_CPT11, /* Cougar Point */
3489     + TCO_CPT12, /* Cougar Point */
3490     + TCO_CPT13, /* Cougar Point */
3491     + TCO_CPT14, /* Cougar Point */
3492     + TCO_CPT15, /* Cougar Point */
3493     + TCO_CPT16, /* Cougar Point */
3494     + TCO_CPT17, /* Cougar Point */
3495     + TCO_CPT18, /* Cougar Point */
3496     + TCO_CPT19, /* Cougar Point */
3497     + TCO_CPT20, /* Cougar Point */
3498     + TCO_CPT21, /* Cougar Point */
3499     + TCO_CPT22, /* Cougar Point */
3500     + TCO_CPT23, /* Cougar Point */
3501     + TCO_CPT24, /* Cougar Point */
3502     + TCO_CPT25, /* Cougar Point */
3503     + TCO_CPT26, /* Cougar Point */
3504     + TCO_CPT27, /* Cougar Point */
3505     + TCO_CPT28, /* Cougar Point */
3506     + TCO_CPT29, /* Cougar Point */
3507     + TCO_CPT30, /* Cougar Point */
3508     + TCO_CPT31, /* Cougar Point */
3509     };
3510    
3511     static struct {
3512     @@ -173,8 +202,37 @@ static struct {
3513     {"3420", 2},
3514     {"3450", 2},
3515     {"EP80579", 2},
3516     - {"CPT Desktop", 2},
3517     - {"CPT Mobile", 2},
3518     + {"Cougar Point", 2},
3519     + {"Cougar Point", 2},
3520     + {"Cougar Point", 2},
3521     + {"Cougar Point", 2},
3522     + {"Cougar Point", 2},
3523     + {"Cougar Point", 2},
3524     + {"Cougar Point", 2},
3525     + {"Cougar Point", 2},
3526     + {"Cougar Point", 2},
3527     + {"Cougar Point", 2},
3528     + {"Cougar Point", 2},
3529     + {"Cougar Point", 2},
3530     + {"Cougar Point", 2},
3531     + {"Cougar Point", 2},
3532     + {"Cougar Point", 2},
3533     + {"Cougar Point", 2},
3534     + {"Cougar Point", 2},
3535     + {"Cougar Point", 2},
3536     + {"Cougar Point", 2},
3537     + {"Cougar Point", 2},
3538     + {"Cougar Point", 2},
3539     + {"Cougar Point", 2},
3540     + {"Cougar Point", 2},
3541     + {"Cougar Point", 2},
3542     + {"Cougar Point", 2},
3543     + {"Cougar Point", 2},
3544     + {"Cougar Point", 2},
3545     + {"Cougar Point", 2},
3546     + {"Cougar Point", 2},
3547     + {"Cougar Point", 2},
3548     + {"Cougar Point", 2},
3549     {NULL, 0}
3550     };
3551    
3552     @@ -259,8 +317,37 @@ static struct pci_device_id iTCO_wdt_pci_tbl[] = {
3553     { ITCO_PCI_DEVICE(0x3b14, TCO_3420)},
3554     { ITCO_PCI_DEVICE(0x3b16, TCO_3450)},
3555     { ITCO_PCI_DEVICE(0x5031, TCO_EP80579)},
3556     - { ITCO_PCI_DEVICE(0x1c42, TCO_CPTD)},
3557     - { ITCO_PCI_DEVICE(0x1c43, TCO_CPTM)},
3558     + { ITCO_PCI_DEVICE(0x1c41, TCO_CPT1)},
3559     + { ITCO_PCI_DEVICE(0x1c42, TCO_CPT2)},
3560     + { ITCO_PCI_DEVICE(0x1c43, TCO_CPT3)},
3561     + { ITCO_PCI_DEVICE(0x1c44, TCO_CPT4)},
3562     + { ITCO_PCI_DEVICE(0x1c45, TCO_CPT5)},
3563     + { ITCO_PCI_DEVICE(0x1c46, TCO_CPT6)},
3564     + { ITCO_PCI_DEVICE(0x1c47, TCO_CPT7)},
3565     + { ITCO_PCI_DEVICE(0x1c48, TCO_CPT8)},
3566     + { ITCO_PCI_DEVICE(0x1c49, TCO_CPT9)},
3567     + { ITCO_PCI_DEVICE(0x1c4a, TCO_CPT10)},
3568     + { ITCO_PCI_DEVICE(0x1c4b, TCO_CPT11)},
3569     + { ITCO_PCI_DEVICE(0x1c4c, TCO_CPT12)},
3570     + { ITCO_PCI_DEVICE(0x1c4d, TCO_CPT13)},
3571     + { ITCO_PCI_DEVICE(0x1c4e, TCO_CPT14)},
3572     + { ITCO_PCI_DEVICE(0x1c4f, TCO_CPT15)},
3573     + { ITCO_PCI_DEVICE(0x1c50, TCO_CPT16)},
3574     + { ITCO_PCI_DEVICE(0x1c51, TCO_CPT17)},
3575     + { ITCO_PCI_DEVICE(0x1c52, TCO_CPT18)},
3576     + { ITCO_PCI_DEVICE(0x1c53, TCO_CPT19)},
3577     + { ITCO_PCI_DEVICE(0x1c54, TCO_CPT20)},
3578     + { ITCO_PCI_DEVICE(0x1c55, TCO_CPT21)},
3579     + { ITCO_PCI_DEVICE(0x1c56, TCO_CPT22)},
3580     + { ITCO_PCI_DEVICE(0x1c57, TCO_CPT23)},
3581     + { ITCO_PCI_DEVICE(0x1c58, TCO_CPT24)},
3582     + { ITCO_PCI_DEVICE(0x1c59, TCO_CPT25)},
3583     + { ITCO_PCI_DEVICE(0x1c5a, TCO_CPT26)},
3584     + { ITCO_PCI_DEVICE(0x1c5b, TCO_CPT27)},
3585     + { ITCO_PCI_DEVICE(0x1c5c, TCO_CPT28)},
3586     + { ITCO_PCI_DEVICE(0x1c5d, TCO_CPT29)},
3587     + { ITCO_PCI_DEVICE(0x1c5e, TCO_CPT30)},
3588     + { ITCO_PCI_DEVICE(0x1c5f, TCO_CPT31)},
3589     { 0, }, /* End of list */
3590     };
3591     MODULE_DEVICE_TABLE(pci, iTCO_wdt_pci_tbl);
3592     diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c
3593     index 74a0461..92f9590 100644
3594     --- a/fs/9p/vfs_file.c
3595     +++ b/fs/9p/vfs_file.c
3596     @@ -114,7 +114,7 @@ static int v9fs_file_lock(struct file *filp, int cmd, struct file_lock *fl)
3597     P9_DPRINTK(P9_DEBUG_VFS, "filp: %p lock: %p\n", filp, fl);
3598    
3599     /* No mandatory locks */
3600     - if (__mandatory_lock(inode))
3601     + if (__mandatory_lock(inode) && fl->fl_type != F_UNLCK)
3602     return -ENOLCK;
3603    
3604     if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->fl_type != F_UNLCK) {
3605     diff --git a/fs/block_dev.c b/fs/block_dev.c
3606     index d11d028..8db62b2 100644
3607     --- a/fs/block_dev.c
3608     +++ b/fs/block_dev.c
3609     @@ -404,7 +404,7 @@ static loff_t block_llseek(struct file *file, loff_t offset, int origin)
3610     * NULL first argument is nfsd_sync_dir() and that's not a directory.
3611     */
3612    
3613     -static int block_fsync(struct file *filp, struct dentry *dentry, int datasync)
3614     +int block_fsync(struct file *filp, struct dentry *dentry, int datasync)
3615     {
3616     struct block_device *bdev = I_BDEV(filp->f_mapping->host);
3617     int error;
3618     @@ -418,6 +418,7 @@ static int block_fsync(struct file *filp, struct dentry *dentry, int datasync)
3619     error = 0;
3620     return error;
3621     }
3622     +EXPORT_SYMBOL(block_fsync);
3623    
3624     /*
3625     * pseudo-fs
3626     diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
3627     index 941441d..4e6dbab 100644
3628     --- a/fs/cifs/cifssmb.c
3629     +++ b/fs/cifs/cifssmb.c
3630     @@ -1430,6 +1430,8 @@ CIFSSMBWrite(const int xid, struct cifsTconInfo *tcon,
3631     __u32 bytes_sent;
3632     __u16 byte_count;
3633    
3634     + *nbytes = 0;
3635     +
3636     /* cFYI(1, ("write at %lld %d bytes", offset, count));*/
3637     if (tcon->ses == NULL)
3638     return -ECONNABORTED;
3639     @@ -1512,11 +1514,18 @@ CIFSSMBWrite(const int xid, struct cifsTconInfo *tcon,
3640     cifs_stats_inc(&tcon->num_writes);
3641     if (rc) {
3642     cFYI(1, ("Send error in write = %d", rc));
3643     - *nbytes = 0;
3644     } else {
3645     *nbytes = le16_to_cpu(pSMBr->CountHigh);
3646     *nbytes = (*nbytes) << 16;
3647     *nbytes += le16_to_cpu(pSMBr->Count);
3648     +
3649     + /*
3650     + * Mask off high 16 bits when bytes written as returned by the
3651     + * server is greater than bytes requested by the client. Some
3652     + * OS/2 servers are known to set incorrect CountHigh values.
3653     + */
3654     + if (*nbytes > count)
3655     + *nbytes &= 0xFFFF;
3656     }
3657    
3658     cifs_buf_release(pSMB);
3659     @@ -1605,6 +1614,14 @@ CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon,
3660     *nbytes = le16_to_cpu(pSMBr->CountHigh);
3661     *nbytes = (*nbytes) << 16;
3662     *nbytes += le16_to_cpu(pSMBr->Count);
3663     +
3664     + /*
3665     + * Mask off high 16 bits when bytes written as returned by the
3666     + * server is greater than bytes requested by the client. OS/2
3667     + * servers are known to set incorrect CountHigh values.
3668     + */
3669     + if (*nbytes > count)
3670     + *nbytes &= 0xFFFF;
3671     }
3672    
3673     /* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */
3674     diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
3675     index 4a430ab..23dc2af 100644
3676     --- a/fs/ecryptfs/inode.c
3677     +++ b/fs/ecryptfs/inode.c
3678     @@ -647,38 +647,17 @@ out_lock:
3679     return rc;
3680     }
3681    
3682     -static int
3683     -ecryptfs_readlink(struct dentry *dentry, char __user *buf, int bufsiz)
3684     +static int ecryptfs_readlink_lower(struct dentry *dentry, char **buf,
3685     + size_t *bufsiz)
3686     {
3687     + struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
3688     char *lower_buf;
3689     - size_t lower_bufsiz;
3690     - struct dentry *lower_dentry;
3691     - struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
3692     - char *plaintext_name;
3693     - size_t plaintext_name_size;
3694     + size_t lower_bufsiz = PATH_MAX;
3695     mm_segment_t old_fs;
3696     int rc;
3697    
3698     - lower_dentry = ecryptfs_dentry_to_lower(dentry);
3699     - if (!lower_dentry->d_inode->i_op->readlink) {
3700     - rc = -EINVAL;
3701     - goto out;
3702     - }
3703     - mount_crypt_stat = &ecryptfs_superblock_to_private(
3704     - dentry->d_sb)->mount_crypt_stat;
3705     - /*
3706     - * If the lower filename is encrypted, it will result in a significantly
3707     - * longer name. If needed, truncate the name after decode and decrypt.
3708     - */
3709     - if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES)
3710     - lower_bufsiz = PATH_MAX;
3711     - else
3712     - lower_bufsiz = bufsiz;
3713     - /* Released in this function */
3714     lower_buf = kmalloc(lower_bufsiz, GFP_KERNEL);
3715     - if (lower_buf == NULL) {
3716     - printk(KERN_ERR "%s: Out of memory whilst attempting to "
3717     - "kmalloc [%zd] bytes\n", __func__, lower_bufsiz);
3718     + if (!lower_buf) {
3719     rc = -ENOMEM;
3720     goto out;
3721     }
3722     @@ -688,29 +667,31 @@ ecryptfs_readlink(struct dentry *dentry, char __user *buf, int bufsiz)
3723     (char __user *)lower_buf,
3724     lower_bufsiz);
3725     set_fs(old_fs);
3726     - if (rc >= 0) {
3727     - rc = ecryptfs_decode_and_decrypt_filename(&plaintext_name,
3728     - &plaintext_name_size,
3729     - dentry, lower_buf,
3730     - rc);
3731     - if (rc) {
3732     - printk(KERN_ERR "%s: Error attempting to decode and "
3733     - "decrypt filename; rc = [%d]\n", __func__,
3734     - rc);
3735     - goto out_free_lower_buf;
3736     - }
3737     - /* Check for bufsiz <= 0 done in sys_readlinkat() */
3738     - rc = copy_to_user(buf, plaintext_name,
3739     - min((size_t) bufsiz, plaintext_name_size));
3740     - if (rc)
3741     - rc = -EFAULT;
3742     - else
3743     - rc = plaintext_name_size;
3744     - kfree(plaintext_name);
3745     - fsstack_copy_attr_atime(dentry->d_inode, lower_dentry->d_inode);
3746     - }
3747     -out_free_lower_buf:
3748     + if (rc < 0)
3749     + goto out;
3750     + lower_bufsiz = rc;
3751     + rc = ecryptfs_decode_and_decrypt_filename(buf, bufsiz, dentry,
3752     + lower_buf, lower_bufsiz);
3753     +out:
3754     kfree(lower_buf);
3755     + return rc;
3756     +}
3757     +
3758     +static int
3759     +ecryptfs_readlink(struct dentry *dentry, char __user *buf, int bufsiz)
3760     +{
3761     + char *kbuf;
3762     + size_t kbufsiz, copied;
3763     + int rc;
3764     +
3765     + rc = ecryptfs_readlink_lower(dentry, &kbuf, &kbufsiz);
3766     + if (rc)
3767     + goto out;
3768     + copied = min_t(size_t, bufsiz, kbufsiz);
3769     + rc = copy_to_user(buf, kbuf, copied) ? -EFAULT : copied;
3770     + kfree(kbuf);
3771     + fsstack_copy_attr_atime(dentry->d_inode,
3772     + ecryptfs_dentry_to_lower(dentry)->d_inode);
3773     out:
3774     return rc;
3775     }
3776     @@ -1015,6 +996,28 @@ out:
3777     return rc;
3778     }
3779    
3780     +int ecryptfs_getattr_link(struct vfsmount *mnt, struct dentry *dentry,
3781     + struct kstat *stat)
3782     +{
3783     + struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
3784     + int rc = 0;
3785     +
3786     + mount_crypt_stat = &ecryptfs_superblock_to_private(
3787     + dentry->d_sb)->mount_crypt_stat;
3788     + generic_fillattr(dentry->d_inode, stat);
3789     + if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) {
3790     + char *target;
3791     + size_t targetsiz;
3792     +
3793     + rc = ecryptfs_readlink_lower(dentry, &target, &targetsiz);
3794     + if (!rc) {
3795     + kfree(target);
3796     + stat->size = targetsiz;
3797     + }
3798     + }
3799     + return rc;
3800     +}
3801     +
3802     int ecryptfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
3803     struct kstat *stat)
3804     {
3805     @@ -1039,7 +1042,7 @@ ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value,
3806    
3807     lower_dentry = ecryptfs_dentry_to_lower(dentry);
3808     if (!lower_dentry->d_inode->i_op->setxattr) {
3809     - rc = -ENOSYS;
3810     + rc = -EOPNOTSUPP;
3811     goto out;
3812     }
3813     mutex_lock(&lower_dentry->d_inode->i_mutex);
3814     @@ -1057,7 +1060,7 @@ ecryptfs_getxattr_lower(struct dentry *lower_dentry, const char *name,
3815     int rc = 0;
3816    
3817     if (!lower_dentry->d_inode->i_op->getxattr) {
3818     - rc = -ENOSYS;
3819     + rc = -EOPNOTSUPP;
3820     goto out;
3821     }
3822     mutex_lock(&lower_dentry->d_inode->i_mutex);
3823     @@ -1084,7 +1087,7 @@ ecryptfs_listxattr(struct dentry *dentry, char *list, size_t size)
3824    
3825     lower_dentry = ecryptfs_dentry_to_lower(dentry);
3826     if (!lower_dentry->d_inode->i_op->listxattr) {
3827     - rc = -ENOSYS;
3828     + rc = -EOPNOTSUPP;
3829     goto out;
3830     }
3831     mutex_lock(&lower_dentry->d_inode->i_mutex);
3832     @@ -1101,7 +1104,7 @@ static int ecryptfs_removexattr(struct dentry *dentry, const char *name)
3833    
3834     lower_dentry = ecryptfs_dentry_to_lower(dentry);
3835     if (!lower_dentry->d_inode->i_op->removexattr) {
3836     - rc = -ENOSYS;
3837     + rc = -EOPNOTSUPP;
3838     goto out;
3839     }
3840     mutex_lock(&lower_dentry->d_inode->i_mutex);
3841     @@ -1132,6 +1135,7 @@ const struct inode_operations ecryptfs_symlink_iops = {
3842     .put_link = ecryptfs_put_link,
3843     .permission = ecryptfs_permission,
3844     .setattr = ecryptfs_setattr,
3845     + .getattr = ecryptfs_getattr_link,
3846     .setxattr = ecryptfs_setxattr,
3847     .getxattr = ecryptfs_getxattr,
3848     .listxattr = ecryptfs_listxattr,
3849     diff --git a/fs/ecryptfs/super.c b/fs/ecryptfs/super.c
3850     index b15a43a..1a037f7 100644
3851     --- a/fs/ecryptfs/super.c
3852     +++ b/fs/ecryptfs/super.c
3853     @@ -85,7 +85,6 @@ static void ecryptfs_destroy_inode(struct inode *inode)
3854     if (lower_dentry->d_inode) {
3855     fput(inode_info->lower_file);
3856     inode_info->lower_file = NULL;
3857     - d_drop(lower_dentry);
3858     }
3859     }
3860     ecryptfs_destroy_crypt_stat(&inode_info->crypt_stat);
3861     diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
3862     index 874d169..602d5ad 100644
3863     --- a/fs/ext4/ext4.h
3864     +++ b/fs/ext4/ext4.h
3865     @@ -139,8 +139,8 @@ typedef struct ext4_io_end {
3866     struct inode *inode; /* file being written to */
3867     unsigned int flag; /* unwritten or not */
3868     int error; /* I/O error code */
3869     - ext4_lblk_t offset; /* offset in the file */
3870     - size_t size; /* size of the extent */
3871     + loff_t offset; /* offset in the file */
3872     + ssize_t size; /* size of the extent */
3873     struct work_struct work; /* data work queue */
3874     } ext4_io_end_t;
3875    
3876     @@ -1744,7 +1744,7 @@ extern void ext4_ext_release(struct super_block *);
3877     extern long ext4_fallocate(struct inode *inode, int mode, loff_t offset,
3878     loff_t len);
3879     extern int ext4_convert_unwritten_extents(struct inode *inode, loff_t offset,
3880     - loff_t len);
3881     + ssize_t len);
3882     extern int ext4_get_blocks(handle_t *handle, struct inode *inode,
3883     sector_t block, unsigned int max_blocks,
3884     struct buffer_head *bh, int flags);
3885     diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
3886     index 765a482..c568779 100644
3887     --- a/fs/ext4/extents.c
3888     +++ b/fs/ext4/extents.c
3889     @@ -3603,7 +3603,7 @@ retry:
3890     * Returns 0 on success.
3891     */
3892     int ext4_convert_unwritten_extents(struct inode *inode, loff_t offset,
3893     - loff_t len)
3894     + ssize_t len)
3895     {
3896     handle_t *handle;
3897     ext4_lblk_t block;
3898     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
3899     index e119524..2059c34 100644
3900     --- a/fs/ext4/inode.c
3901     +++ b/fs/ext4/inode.c
3902     @@ -3551,7 +3551,7 @@ static int ext4_end_aio_dio_nolock(ext4_io_end_t *io)
3903     {
3904     struct inode *inode = io->inode;
3905     loff_t offset = io->offset;
3906     - size_t size = io->size;
3907     + ssize_t size = io->size;
3908     int ret = 0;
3909    
3910     ext4_debug("end_aio_dio_onlock: io 0x%p from inode %lu,list->next 0x%p,"
3911     diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c
3912     index f565f24..72646e2 100644
3913     --- a/fs/fat/namei_vfat.c
3914     +++ b/fs/fat/namei_vfat.c
3915     @@ -309,7 +309,7 @@ static int vfat_create_shortname(struct inode *dir, struct nls_table *nls,
3916     {
3917     struct fat_mount_options *opts = &MSDOS_SB(dir->i_sb)->options;
3918     wchar_t *ip, *ext_start, *end, *name_start;
3919     - unsigned char base[9], ext[4], buf[8], *p;
3920     + unsigned char base[9], ext[4], buf[5], *p;
3921     unsigned char charbuf[NLS_MAX_CHARSET_SIZE];
3922     int chl, chi;
3923     int sz = 0, extlen, baselen, i, numtail_baselen, numtail2_baselen;
3924     @@ -467,7 +467,7 @@ static int vfat_create_shortname(struct inode *dir, struct nls_table *nls,
3925     return 0;
3926     }
3927    
3928     - i = jiffies & 0xffff;
3929     + i = jiffies;
3930     sz = (jiffies >> 16) & 0x7;
3931     if (baselen > 2) {
3932     baselen = numtail2_baselen;
3933     @@ -476,7 +476,7 @@ static int vfat_create_shortname(struct inode *dir, struct nls_table *nls,
3934     name_res[baselen + 4] = '~';
3935     name_res[baselen + 5] = '1' + sz;
3936     while (1) {
3937     - sprintf(buf, "%04X", i);
3938     + snprintf(buf, sizeof(buf), "%04X", i & 0xffff);
3939     memcpy(&name_res[baselen], buf, 4);
3940     if (vfat_find_form(dir, name_res) < 0)
3941     break;
3942     diff --git a/fs/nfs/client.c b/fs/nfs/client.c
3943     index ee77713..bd39abc 100644
3944     --- a/fs/nfs/client.c
3945     +++ b/fs/nfs/client.c
3946     @@ -1293,7 +1293,8 @@ static int nfs4_init_server(struct nfs_server *server,
3947    
3948     /* Initialise the client representation from the mount data */
3949     server->flags = data->flags;
3950     - server->caps |= NFS_CAP_ATOMIC_OPEN|NFS_CAP_CHANGE_ATTR;
3951     + server->caps |= NFS_CAP_ATOMIC_OPEN|NFS_CAP_CHANGE_ATTR|
3952     + NFS_CAP_POSIX_LOCK;
3953     server->options = data->options;
3954    
3955     /* Get a client record */
3956     diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
3957     index 8b5382e..af6948d 100644
3958     --- a/fs/nfs/dir.c
3959     +++ b/fs/nfs/dir.c
3960     @@ -1025,12 +1025,12 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry
3961     res = NULL;
3962     goto out;
3963     /* This turned out not to be a regular file */
3964     + case -EISDIR:
3965     case -ENOTDIR:
3966     goto no_open;
3967     case -ELOOP:
3968     if (!(nd->intent.open.flags & O_NOFOLLOW))
3969     goto no_open;
3970     - /* case -EISDIR: */
3971     /* case -EINVAL: */
3972     default:
3973     goto out;
3974     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
3975     index 375f0fa..ecf6602 100644
3976     --- a/fs/nfs/nfs4proc.c
3977     +++ b/fs/nfs/nfs4proc.c
3978     @@ -1520,6 +1520,8 @@ static int _nfs4_proc_open(struct nfs4_opendata *data)
3979     nfs_post_op_update_inode(dir, o_res->dir_attr);
3980     } else
3981     nfs_refresh_inode(dir, o_res->dir_attr);
3982     + if ((o_res->rflags & NFS4_OPEN_RESULT_LOCKTYPE_POSIX) == 0)
3983     + server->caps &= ~NFS_CAP_POSIX_LOCK;
3984     if(o_res->rflags & NFS4_OPEN_RESULT_CONFIRM) {
3985     status = _nfs4_proc_open_confirm(data);
3986     if (status != 0)
3987     @@ -1660,7 +1662,7 @@ static int _nfs4_do_open(struct inode *dir, struct path *path, fmode_t fmode, in
3988     status = PTR_ERR(state);
3989     if (IS_ERR(state))
3990     goto err_opendata_put;
3991     - if ((opendata->o_res.rflags & NFS4_OPEN_RESULT_LOCKTYPE_POSIX) != 0)
3992     + if (server->caps & NFS_CAP_POSIX_LOCK)
3993     set_bit(NFS_STATE_POSIX_LOCKS, &state->flags);
3994     nfs4_opendata_put(opendata);
3995     nfs4_put_state_owner(sp);
3996     diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
3997     index a8587e9..bbf72d8 100644
3998     --- a/fs/nfsd/nfs4xdr.c
3999     +++ b/fs/nfsd/nfs4xdr.c
4000     @@ -2121,9 +2121,15 @@ out_acl:
4001     * and this is the root of a cross-mounted filesystem.
4002     */
4003     if (ignore_crossmnt == 0 &&
4004     - exp->ex_path.mnt->mnt_root->d_inode == dentry->d_inode) {
4005     - err = vfs_getattr(exp->ex_path.mnt->mnt_parent,
4006     - exp->ex_path.mnt->mnt_mountpoint, &stat);
4007     + dentry == exp->ex_path.mnt->mnt_root) {
4008     + struct path path = exp->ex_path;
4009     + path_get(&path);
4010     + while (follow_up(&path)) {
4011     + if (path.dentry != path.mnt->mnt_root)
4012     + break;
4013     + }
4014     + err = vfs_getattr(path.mnt, path.dentry, &stat);
4015     + path_put(&path);
4016     if (err)
4017     goto out_nfserr;
4018     }
4019     diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
4020     index 0501974..8ccf0f8 100644
4021     --- a/fs/ocfs2/acl.c
4022     +++ b/fs/ocfs2/acl.c
4023     @@ -30,6 +30,8 @@
4024     #include "alloc.h"
4025     #include "dlmglue.h"
4026     #include "file.h"
4027     +#include "inode.h"
4028     +#include "journal.h"
4029     #include "ocfs2_fs.h"
4030    
4031     #include "xattr.h"
4032     @@ -166,6 +168,60 @@ static struct posix_acl *ocfs2_get_acl(struct inode *inode, int type)
4033     }
4034    
4035     /*
4036     + * Helper function to set i_mode in memory and disk. Some call paths
4037     + * will not have di_bh or a journal handle to pass, in which case it
4038     + * will create it's own.
4039     + */
4040     +static int ocfs2_acl_set_mode(struct inode *inode, struct buffer_head *di_bh,
4041     + handle_t *handle, umode_t new_mode)
4042     +{
4043     + int ret, commit_handle = 0;
4044     + struct ocfs2_dinode *di;
4045     +
4046     + if (di_bh == NULL) {
4047     + ret = ocfs2_read_inode_block(inode, &di_bh);
4048     + if (ret) {
4049     + mlog_errno(ret);
4050     + goto out;
4051     + }
4052     + } else
4053     + get_bh(di_bh);
4054     +
4055     + if (handle == NULL) {
4056     + handle = ocfs2_start_trans(OCFS2_SB(inode->i_sb),
4057     + OCFS2_INODE_UPDATE_CREDITS);
4058     + if (IS_ERR(handle)) {
4059     + ret = PTR_ERR(handle);
4060     + mlog_errno(ret);
4061     + goto out_brelse;
4062     + }
4063     +
4064     + commit_handle = 1;
4065     + }
4066     +
4067     + di = (struct ocfs2_dinode *)di_bh->b_data;
4068     + ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
4069     + OCFS2_JOURNAL_ACCESS_WRITE);
4070     + if (ret) {
4071     + mlog_errno(ret);
4072     + goto out_commit;
4073     + }
4074     +
4075     + inode->i_mode = new_mode;
4076     + di->i_mode = cpu_to_le16(inode->i_mode);
4077     +
4078     + ocfs2_journal_dirty(handle, di_bh);
4079     +
4080     +out_commit:
4081     + if (commit_handle)
4082     + ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle);
4083     +out_brelse:
4084     + brelse(di_bh);
4085     +out:
4086     + return ret;
4087     +}
4088     +
4089     +/*
4090     * Set the access or default ACL of an inode.
4091     */
4092     static int ocfs2_set_acl(handle_t *handle,
4093     @@ -193,9 +249,14 @@ static int ocfs2_set_acl(handle_t *handle,
4094     if (ret < 0)
4095     return ret;
4096     else {
4097     - inode->i_mode = mode;
4098     if (ret == 0)
4099     acl = NULL;
4100     +
4101     + ret = ocfs2_acl_set_mode(inode, di_bh,
4102     + handle, mode);
4103     + if (ret)
4104     + return ret;
4105     +
4106     }
4107     }
4108     break;
4109     @@ -283,6 +344,7 @@ int ocfs2_init_acl(handle_t *handle,
4110     struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
4111     struct posix_acl *acl = NULL;
4112     int ret = 0;
4113     + mode_t mode;
4114    
4115     if (!S_ISLNK(inode->i_mode)) {
4116     if (osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) {
4117     @@ -291,12 +353,17 @@ int ocfs2_init_acl(handle_t *handle,
4118     if (IS_ERR(acl))
4119     return PTR_ERR(acl);
4120     }
4121     - if (!acl)
4122     - inode->i_mode &= ~current_umask();
4123     + if (!acl) {
4124     + mode = inode->i_mode & ~current_umask();
4125     + ret = ocfs2_acl_set_mode(inode, di_bh, handle, mode);
4126     + if (ret) {
4127     + mlog_errno(ret);
4128     + goto cleanup;
4129     + }
4130     + }
4131     }
4132     if ((osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) && acl) {
4133     struct posix_acl *clone;
4134     - mode_t mode;
4135    
4136     if (S_ISDIR(inode->i_mode)) {
4137     ret = ocfs2_set_acl(handle, inode, di_bh,
4138     @@ -313,7 +380,7 @@ int ocfs2_init_acl(handle_t *handle,
4139     mode = inode->i_mode;
4140     ret = posix_acl_create_masq(clone, &mode);
4141     if (ret >= 0) {
4142     - inode->i_mode = mode;
4143     + ret = ocfs2_acl_set_mode(inode, di_bh, handle, mode);
4144     if (ret > 0) {
4145     ret = ocfs2_set_acl(handle, inode,
4146     di_bh, ACL_TYPE_ACCESS,
4147     diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c
4148     index c30b644..79b5dac 100644
4149     --- a/fs/ocfs2/suballoc.c
4150     +++ b/fs/ocfs2/suballoc.c
4151     @@ -152,7 +152,7 @@ static u32 ocfs2_bits_per_group(struct ocfs2_chain_list *cl)
4152    
4153     #define do_error(fmt, ...) \
4154     do{ \
4155     - if (clean_error) \
4156     + if (resize) \
4157     mlog(ML_ERROR, fmt "\n", ##__VA_ARGS__); \
4158     else \
4159     ocfs2_error(sb, fmt, ##__VA_ARGS__); \
4160     @@ -160,7 +160,7 @@ static u32 ocfs2_bits_per_group(struct ocfs2_chain_list *cl)
4161    
4162     static int ocfs2_validate_gd_self(struct super_block *sb,
4163     struct buffer_head *bh,
4164     - int clean_error)
4165     + int resize)
4166     {
4167     struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *)bh->b_data;
4168    
4169     @@ -211,7 +211,7 @@ static int ocfs2_validate_gd_self(struct super_block *sb,
4170     static int ocfs2_validate_gd_parent(struct super_block *sb,
4171     struct ocfs2_dinode *di,
4172     struct buffer_head *bh,
4173     - int clean_error)
4174     + int resize)
4175     {
4176     unsigned int max_bits;
4177     struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *)bh->b_data;
4178     @@ -233,8 +233,11 @@ static int ocfs2_validate_gd_parent(struct super_block *sb,
4179     return -EINVAL;
4180     }
4181    
4182     - if (le16_to_cpu(gd->bg_chain) >=
4183     - le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) {
4184     + /* In resize, we may meet the case bg_chain == cl_next_free_rec. */
4185     + if ((le16_to_cpu(gd->bg_chain) >
4186     + le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) ||
4187     + ((le16_to_cpu(gd->bg_chain) ==
4188     + le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) && !resize)) {
4189     do_error("Group descriptor #%llu has bad chain %u",
4190     (unsigned long long)bh->b_blocknr,
4191     le16_to_cpu(gd->bg_chain));
4192     diff --git a/fs/proc/base.c b/fs/proc/base.c
4193     index 58324c2..3cd449d 100644
4194     --- a/fs/proc/base.c
4195     +++ b/fs/proc/base.c
4196     @@ -442,12 +442,13 @@ static const struct file_operations proc_lstats_operations = {
4197     unsigned long badness(struct task_struct *p, unsigned long uptime);
4198     static int proc_oom_score(struct task_struct *task, char *buffer)
4199     {
4200     - unsigned long points;
4201     + unsigned long points = 0;
4202     struct timespec uptime;
4203    
4204     do_posix_clock_monotonic_gettime(&uptime);
4205     read_lock(&tasklist_lock);
4206     - points = badness(task->group_leader, uptime.tv_sec);
4207     + if (pid_alive(task))
4208     + points = badness(task, uptime.tv_sec);
4209     read_unlock(&tasklist_lock);
4210     return sprintf(buffer, "%lu\n", points);
4211     }
4212     diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
4213     index 6e722c1..6c9da00 100644
4214     --- a/fs/quota/dquot.c
4215     +++ b/fs/quota/dquot.c
4216     @@ -2321,34 +2321,34 @@ static int do_set_dqblk(struct dquot *dquot, struct if_dqblk *di)
4217     if (di->dqb_valid & QIF_SPACE) {
4218     dm->dqb_curspace = di->dqb_curspace - dm->dqb_rsvspace;
4219     check_blim = 1;
4220     - __set_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags);
4221     + set_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags);
4222     }
4223     if (di->dqb_valid & QIF_BLIMITS) {
4224     dm->dqb_bsoftlimit = qbtos(di->dqb_bsoftlimit);
4225     dm->dqb_bhardlimit = qbtos(di->dqb_bhardlimit);
4226     check_blim = 1;
4227     - __set_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags);
4228     + set_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags);
4229     }
4230     if (di->dqb_valid & QIF_INODES) {
4231     dm->dqb_curinodes = di->dqb_curinodes;
4232     check_ilim = 1;
4233     - __set_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags);
4234     + set_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags);
4235     }
4236     if (di->dqb_valid & QIF_ILIMITS) {
4237     dm->dqb_isoftlimit = di->dqb_isoftlimit;
4238     dm->dqb_ihardlimit = di->dqb_ihardlimit;
4239     check_ilim = 1;
4240     - __set_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags);
4241     + set_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags);
4242     }
4243     if (di->dqb_valid & QIF_BTIME) {
4244     dm->dqb_btime = di->dqb_btime;
4245     check_blim = 1;
4246     - __set_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags);
4247     + set_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags);
4248     }
4249     if (di->dqb_valid & QIF_ITIME) {
4250     dm->dqb_itime = di->dqb_itime;
4251     check_ilim = 1;
4252     - __set_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags);
4253     + set_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags);
4254     }
4255    
4256     if (check_blim) {
4257     diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
4258     index b4a7dd0..33bc410 100644
4259     --- a/fs/reiserfs/super.c
4260     +++ b/fs/reiserfs/super.c
4261     @@ -1619,10 +1619,8 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
4262     save_mount_options(s, data);
4263    
4264     sbi = kzalloc(sizeof(struct reiserfs_sb_info), GFP_KERNEL);
4265     - if (!sbi) {
4266     - errval = -ENOMEM;
4267     - goto error_alloc;
4268     - }
4269     + if (!sbi)
4270     + return -ENOMEM;
4271     s->s_fs_info = sbi;
4272     /* Set default values for options: non-aggressive tails, RO on errors */
4273     REISERFS_SB(s)->s_mount_opt |= (1 << REISERFS_SMALLTAIL);
4274     @@ -1879,12 +1877,12 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
4275     return (0);
4276    
4277     error:
4278     - reiserfs_write_unlock(s);
4279     -error_alloc:
4280     if (jinit_done) { /* kill the commit thread, free journal ram */
4281     journal_release_error(NULL, s);
4282     }
4283    
4284     + reiserfs_write_unlock(s);
4285     +
4286     reiserfs_free_bitmap_cache(s);
4287     if (SB_BUFFER_WITH_SB(s))
4288     brelse(SB_BUFFER_WITH_SB(s));
4289     diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c
4290     index 66abe36..1c65a2b 100644
4291     --- a/fs/xfs/linux-2.6/xfs_aops.c
4292     +++ b/fs/xfs/linux-2.6/xfs_aops.c
4293     @@ -163,14 +163,17 @@ xfs_ioend_new_eof(
4294     }
4295    
4296     /*
4297     - * Update on-disk file size now that data has been written to disk.
4298     - * The current in-memory file size is i_size. If a write is beyond
4299     - * eof i_new_size will be the intended file size until i_size is
4300     - * updated. If this write does not extend all the way to the valid
4301     - * file size then restrict this update to the end of the write.
4302     + * Update on-disk file size now that data has been written to disk. The
4303     + * current in-memory file size is i_size. If a write is beyond eof i_new_size
4304     + * will be the intended file size until i_size is updated. If this write does
4305     + * not extend all the way to the valid file size then restrict this update to
4306     + * the end of the write.
4307     + *
4308     + * This function does not block as blocking on the inode lock in IO completion
4309     + * can lead to IO completion order dependency deadlocks.. If it can't get the
4310     + * inode ilock it will return EAGAIN. Callers must handle this.
4311     */
4312     -
4313     -STATIC void
4314     +STATIC int
4315     xfs_setfilesize(
4316     xfs_ioend_t *ioend)
4317     {
4318     @@ -181,9 +184,11 @@ xfs_setfilesize(
4319     ASSERT(ioend->io_type != IOMAP_READ);
4320    
4321     if (unlikely(ioend->io_error))
4322     - return;
4323     + return 0;
4324     +
4325     + if (!xfs_ilock_nowait(ip, XFS_ILOCK_EXCL))
4326     + return EAGAIN;
4327    
4328     - xfs_ilock(ip, XFS_ILOCK_EXCL);
4329     isize = xfs_ioend_new_eof(ioend);
4330     if (isize) {
4331     ip->i_d.di_size = isize;
4332     @@ -191,6 +196,28 @@ xfs_setfilesize(
4333     }
4334    
4335     xfs_iunlock(ip, XFS_ILOCK_EXCL);
4336     + return 0;
4337     +}
4338     +
4339     +/*
4340     + * Schedule IO completion handling on a xfsdatad if this was
4341     + * the final hold on this ioend. If we are asked to wait,
4342     + * flush the workqueue.
4343     + */
4344     +STATIC void
4345     +xfs_finish_ioend(
4346     + xfs_ioend_t *ioend,
4347     + int wait)
4348     +{
4349     + if (atomic_dec_and_test(&ioend->io_remaining)) {
4350     + struct workqueue_struct *wq;
4351     +
4352     + wq = (ioend->io_type == IOMAP_UNWRITTEN) ?
4353     + xfsconvertd_workqueue : xfsdatad_workqueue;
4354     + queue_work(wq, &ioend->io_work);
4355     + if (wait)
4356     + flush_workqueue(wq);
4357     + }
4358     }
4359    
4360     /*
4361     @@ -198,11 +225,11 @@ xfs_setfilesize(
4362     */
4363     STATIC void
4364     xfs_end_io(
4365     - struct work_struct *work)
4366     + struct work_struct *work)
4367     {
4368     - xfs_ioend_t *ioend =
4369     - container_of(work, xfs_ioend_t, io_work);
4370     - struct xfs_inode *ip = XFS_I(ioend->io_inode);
4371     + xfs_ioend_t *ioend = container_of(work, xfs_ioend_t, io_work);
4372     + struct xfs_inode *ip = XFS_I(ioend->io_inode);
4373     + int error;
4374    
4375     /*
4376     * For unwritten extents we need to issue transactions to convert a
4377     @@ -210,7 +237,6 @@ xfs_end_io(
4378     */
4379     if (ioend->io_type == IOMAP_UNWRITTEN &&
4380     likely(!ioend->io_error && !XFS_FORCED_SHUTDOWN(ip->i_mount))) {
4381     - int error;
4382    
4383     error = xfs_iomap_write_unwritten(ip, ioend->io_offset,
4384     ioend->io_size);
4385     @@ -222,30 +248,23 @@ xfs_end_io(
4386     * We might have to update the on-disk file size after extending
4387     * writes.
4388     */
4389     - if (ioend->io_type != IOMAP_READ)
4390     - xfs_setfilesize(ioend);
4391     - xfs_destroy_ioend(ioend);
4392     -}
4393     -
4394     -/*
4395     - * Schedule IO completion handling on a xfsdatad if this was
4396     - * the final hold on this ioend. If we are asked to wait,
4397     - * flush the workqueue.
4398     - */
4399     -STATIC void
4400     -xfs_finish_ioend(
4401     - xfs_ioend_t *ioend,
4402     - int wait)
4403     -{
4404     - if (atomic_dec_and_test(&ioend->io_remaining)) {
4405     - struct workqueue_struct *wq;
4406     -
4407     - wq = (ioend->io_type == IOMAP_UNWRITTEN) ?
4408     - xfsconvertd_workqueue : xfsdatad_workqueue;
4409     - queue_work(wq, &ioend->io_work);
4410     - if (wait)
4411     - flush_workqueue(wq);
4412     + if (ioend->io_type != IOMAP_READ) {
4413     + error = xfs_setfilesize(ioend);
4414     + ASSERT(!error || error == EAGAIN);
4415     }
4416     +
4417     + /*
4418     + * If we didn't complete processing of the ioend, requeue it to the
4419     + * tail of the workqueue for another attempt later. Otherwise destroy
4420     + * it.
4421     + */
4422     + if (error == EAGAIN) {
4423     + atomic_inc(&ioend->io_remaining);
4424     + xfs_finish_ioend(ioend, 0);
4425     + /* ensure we don't spin on blocked ioends */
4426     + delay(1);
4427     + } else
4428     + xfs_destroy_ioend(ioend);
4429     }
4430    
4431     /*
4432     diff --git a/fs/xfs/linux-2.6/xfs_sync.c b/fs/xfs/linux-2.6/xfs_sync.c
4433     index 1f5e4bb..6b6b394 100644
4434     --- a/fs/xfs/linux-2.6/xfs_sync.c
4435     +++ b/fs/xfs/linux-2.6/xfs_sync.c
4436     @@ -613,7 +613,8 @@ xfssyncd(
4437     set_freezable();
4438     timeleft = xfs_syncd_centisecs * msecs_to_jiffies(10);
4439     for (;;) {
4440     - timeleft = schedule_timeout_interruptible(timeleft);
4441     + if (list_empty(&mp->m_sync_list))
4442     + timeleft = schedule_timeout_interruptible(timeleft);
4443     /* swsusp */
4444     try_to_freeze();
4445     if (kthread_should_stop() && list_empty(&mp->m_sync_list))
4446     @@ -633,8 +634,7 @@ xfssyncd(
4447     list_add_tail(&mp->m_sync_work.w_list,
4448     &mp->m_sync_list);
4449     }
4450     - list_for_each_entry_safe(work, n, &mp->m_sync_list, w_list)
4451     - list_move(&work->w_list, &tmp);
4452     + list_splice_init(&mp->m_sync_list, &tmp);
4453     spin_unlock(&mp->m_sync_lock);
4454    
4455     list_for_each_entry_safe(work, n, &tmp, w_list) {
4456     @@ -693,12 +693,12 @@ xfs_inode_set_reclaim_tag(
4457     xfs_mount_t *mp = ip->i_mount;
4458     xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino);
4459    
4460     - read_lock(&pag->pag_ici_lock);
4461     + write_lock(&pag->pag_ici_lock);
4462     spin_lock(&ip->i_flags_lock);
4463     __xfs_inode_set_reclaim_tag(pag, ip);
4464     __xfs_iflags_set(ip, XFS_IRECLAIMABLE);
4465     spin_unlock(&ip->i_flags_lock);
4466     - read_unlock(&pag->pag_ici_lock);
4467     + write_unlock(&pag->pag_ici_lock);
4468     xfs_put_perag(mp, pag);
4469     }
4470    
4471     diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c
4472     index 155e798..fd21160 100644
4473     --- a/fs/xfs/xfs_iget.c
4474     +++ b/fs/xfs/xfs_iget.c
4475     @@ -190,13 +190,12 @@ xfs_iget_cache_hit(
4476     trace_xfs_iget_reclaim(ip);
4477    
4478     /*
4479     - * We need to set XFS_INEW atomically with clearing the
4480     - * reclaimable tag so that we do have an indicator of the
4481     - * inode still being initialized.
4482     + * We need to set XFS_IRECLAIM to prevent xfs_reclaim_inode
4483     + * from stomping over us while we recycle the inode. We can't
4484     + * clear the radix tree reclaimable tag yet as it requires
4485     + * pag_ici_lock to be held exclusive.
4486     */
4487     - ip->i_flags |= XFS_INEW;
4488     - ip->i_flags &= ~XFS_IRECLAIMABLE;
4489     - __xfs_inode_clear_reclaim_tag(mp, pag, ip);
4490     + ip->i_flags |= XFS_IRECLAIM;
4491    
4492     spin_unlock(&ip->i_flags_lock);
4493     read_unlock(&pag->pag_ici_lock);
4494     @@ -216,7 +215,15 @@ xfs_iget_cache_hit(
4495     trace_xfs_iget_reclaim(ip);
4496     goto out_error;
4497     }
4498     +
4499     + write_lock(&pag->pag_ici_lock);
4500     + spin_lock(&ip->i_flags_lock);
4501     + ip->i_flags &= ~(XFS_IRECLAIMABLE | XFS_IRECLAIM);
4502     + ip->i_flags |= XFS_INEW;
4503     + __xfs_inode_clear_reclaim_tag(mp, pag, ip);
4504     inode->i_state = I_NEW;
4505     + spin_unlock(&ip->i_flags_lock);
4506     + write_unlock(&pag->pag_ici_lock);
4507     } else {
4508     /* If the VFS inode is being torn down, pause and try again. */
4509     if (!igrab(inode)) {
4510     diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
4511     index e6f3b12..0cbdccc 100644
4512     --- a/include/drm/drm_pciids.h
4513     +++ b/include/drm/drm_pciids.h
4514     @@ -6,6 +6,7 @@
4515     {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
4516     {0x1002, 0x3152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
4517     {0x1002, 0x3154, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
4518     + {0x1002, 0x3155, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
4519     {0x1002, 0x3E50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
4520     {0x1002, 0x3E54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
4521     {0x1002, 0x4136, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS100|RADEON_IS_IGP}, \
4522     @@ -375,6 +376,7 @@
4523     {0x1002, 0x9712, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
4524     {0x1002, 0x9713, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
4525     {0x1002, 0x9714, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
4526     + {0x1002, 0x9715, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
4527     {0, 0, 0}
4528    
4529     #define r128_PCI_IDS \
4530     diff --git a/include/linux/dm-ioctl.h b/include/linux/dm-ioctl.h
4531     index aa95508..2c445e1 100644
4532     --- a/include/linux/dm-ioctl.h
4533     +++ b/include/linux/dm-ioctl.h
4534     @@ -266,9 +266,9 @@ enum {
4535     #define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
4536    
4537     #define DM_VERSION_MAJOR 4
4538     -#define DM_VERSION_MINOR 16
4539     +#define DM_VERSION_MINOR 17
4540     #define DM_VERSION_PATCHLEVEL 0
4541     -#define DM_VERSION_EXTRA "-ioctl (2009-11-05)"
4542     +#define DM_VERSION_EXTRA "-ioctl (2010-03-05)"
4543    
4544     /* Status bits */
4545     #define DM_READONLY_FLAG (1 << 0) /* In/Out */
4546     @@ -316,4 +316,9 @@ enum {
4547     */
4548     #define DM_QUERY_INACTIVE_TABLE_FLAG (1 << 12) /* In */
4549    
4550     +/*
4551     + * If set, a uevent was generated for which the caller may need to wait.
4552     + */
4553     +#define DM_UEVENT_GENERATED_FLAG (1 << 13) /* Out */
4554     +
4555     #endif /* _LINUX_DM_IOCTL_H */
4556     diff --git a/include/linux/freezer.h b/include/linux/freezer.h
4557     index 5a361f8..da7e52b 100644
4558     --- a/include/linux/freezer.h
4559     +++ b/include/linux/freezer.h
4560     @@ -64,9 +64,12 @@ extern bool freeze_task(struct task_struct *p, bool sig_only);
4561     extern void cancel_freezing(struct task_struct *p);
4562    
4563     #ifdef CONFIG_CGROUP_FREEZER
4564     -extern int cgroup_frozen(struct task_struct *task);
4565     +extern int cgroup_freezing_or_frozen(struct task_struct *task);
4566     #else /* !CONFIG_CGROUP_FREEZER */
4567     -static inline int cgroup_frozen(struct task_struct *task) { return 0; }
4568     +static inline int cgroup_freezing_or_frozen(struct task_struct *task)
4569     +{
4570     + return 0;
4571     +}
4572     #endif /* !CONFIG_CGROUP_FREEZER */
4573    
4574     /*
4575     diff --git a/include/linux/fs.h b/include/linux/fs.h
4576     index f2f68ce..66b0705 100644
4577     --- a/include/linux/fs.h
4578     +++ b/include/linux/fs.h
4579     @@ -2214,6 +2214,7 @@ extern int generic_segment_checks(const struct iovec *iov,
4580     /* fs/block_dev.c */
4581     extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov,
4582     unsigned long nr_segs, loff_t pos);
4583     +extern int block_fsync(struct file *filp, struct dentry *dentry, int datasync);
4584    
4585     /* fs/splice.c */
4586     extern ssize_t generic_file_splice_read(struct file *, loff_t *,
4587     diff --git a/include/linux/kfifo.h b/include/linux/kfifo.h
4588     index ece0b1c..e117b1a 100644
4589     --- a/include/linux/kfifo.h
4590     +++ b/include/linux/kfifo.h
4591     @@ -86,7 +86,8 @@ union { \
4592     */
4593     #define INIT_KFIFO(name) \
4594     name = __kfifo_initializer(sizeof(name##kfifo_buffer) - \
4595     - sizeof(struct kfifo), name##kfifo_buffer)
4596     + sizeof(struct kfifo), \
4597     + name##kfifo_buffer + sizeof(struct kfifo))
4598    
4599     /**
4600     * DEFINE_KFIFO - macro to define and initialize a kfifo
4601     diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
4602     index bd5a616..1fe293e 100644
4603     --- a/include/linux/kvm_host.h
4604     +++ b/include/linux/kvm_host.h
4605     @@ -53,7 +53,7 @@ extern struct kmem_cache *kvm_vcpu_cache;
4606     */
4607     struct kvm_io_bus {
4608     int dev_count;
4609     -#define NR_IOBUS_DEVS 6
4610     +#define NR_IOBUS_DEVS 200
4611     struct kvm_io_device *devs[NR_IOBUS_DEVS];
4612     };
4613    
4614     @@ -116,6 +116,11 @@ struct kvm_memory_slot {
4615     int user_alloc;
4616     };
4617    
4618     +static inline unsigned long kvm_dirty_bitmap_bytes(struct kvm_memory_slot *memslot)
4619     +{
4620     + return ALIGN(memslot->npages, BITS_PER_LONG) / 8;
4621     +}
4622     +
4623     struct kvm_kernel_irq_routing_entry {
4624     u32 gsi;
4625     u32 type;
4626     diff --git a/include/linux/module.h b/include/linux/module.h
4627     index 6cb1a3c..bd465d4 100644
4628     --- a/include/linux/module.h
4629     +++ b/include/linux/module.h
4630     @@ -457,7 +457,7 @@ void symbol_put_addr(void *addr);
4631     static inline local_t *__module_ref_addr(struct module *mod, int cpu)
4632     {
4633     #ifdef CONFIG_SMP
4634     - return (local_t *) (mod->refptr + per_cpu_offset(cpu));
4635     + return (local_t *) per_cpu_ptr(mod->refptr, cpu);
4636     #else
4637     return &mod->ref;
4638     #endif
4639     diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
4640     index 34fc6be..ebc4809 100644
4641     --- a/include/linux/nfs_fs_sb.h
4642     +++ b/include/linux/nfs_fs_sb.h
4643     @@ -176,6 +176,7 @@ struct nfs_server {
4644     #define NFS_CAP_ATIME (1U << 11)
4645     #define NFS_CAP_CTIME (1U << 12)
4646     #define NFS_CAP_MTIME (1U << 13)
4647     +#define NFS_CAP_POSIX_LOCK (1U << 14)
4648    
4649    
4650     /* maximum number of slots to use */
4651     diff --git a/include/linux/pci.h b/include/linux/pci.h
4652     index c1968f4..0afb527 100644
4653     --- a/include/linux/pci.h
4654     +++ b/include/linux/pci.h
4655     @@ -959,6 +959,11 @@ static inline int pci_proc_domain(struct pci_bus *bus)
4656     }
4657     #endif /* CONFIG_PCI_DOMAINS */
4658    
4659     +/* some architectures require additional setup to direct VGA traffic */
4660     +typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode,
4661     + unsigned int command_bits, bool change_bridge);
4662     +extern void pci_register_set_vga_state(arch_set_vga_state_t func);
4663     +
4664     #else /* CONFIG_PCI is not enabled */
4665    
4666     /*
4667     diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
4668     index cca8a04..0be8243 100644
4669     --- a/include/linux/pci_ids.h
4670     +++ b/include/linux/pci_ids.h
4671     @@ -2417,6 +2417,9 @@
4672     #define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21
4673     #define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30
4674     #define PCI_DEVICE_ID_INTEL_IOAT 0x1a38
4675     +#define PCI_DEVICE_ID_INTEL_CPT_SMBUS 0x1c22
4676     +#define PCI_DEVICE_ID_INTEL_CPT_LPC1 0x1c42
4677     +#define PCI_DEVICE_ID_INTEL_CPT_LPC2 0x1c43
4678     #define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410
4679     #define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411
4680     #define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413
4681     diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
4682     index 59e9ef6..eb3f34d 100644
4683     --- a/kernel/cgroup_freezer.c
4684     +++ b/kernel/cgroup_freezer.c
4685     @@ -47,17 +47,20 @@ static inline struct freezer *task_freezer(struct task_struct *task)
4686     struct freezer, css);
4687     }
4688    
4689     -int cgroup_frozen(struct task_struct *task)
4690     +int cgroup_freezing_or_frozen(struct task_struct *task)
4691     {
4692     struct freezer *freezer;
4693     enum freezer_state state;
4694    
4695     task_lock(task);
4696     freezer = task_freezer(task);
4697     - state = freezer->state;
4698     + if (!freezer->css.cgroup->parent)
4699     + state = CGROUP_THAWED; /* root cgroup can't be frozen */
4700     + else
4701     + state = freezer->state;
4702     task_unlock(task);
4703    
4704     - return state == CGROUP_FROZEN;
4705     + return (state == CGROUP_FREEZING) || (state == CGROUP_FROZEN);
4706     }
4707    
4708     /*
4709     diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
4710     index 69a3d7b..0b23ff7 100644
4711     --- a/kernel/irq/manage.c
4712     +++ b/kernel/irq/manage.c
4713     @@ -753,6 +753,16 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
4714     if (new->flags & IRQF_ONESHOT)
4715     desc->status |= IRQ_ONESHOT;
4716    
4717     + /*
4718     + * Force MSI interrupts to run with interrupts
4719     + * disabled. The multi vector cards can cause stack
4720     + * overflows due to nested interrupts when enough of
4721     + * them are directed to a core and fire at the same
4722     + * time.
4723     + */
4724     + if (desc->msi_desc)
4725     + new->flags |= IRQF_DISABLED;
4726     +
4727     if (!(desc->status & IRQ_NOAUTOEN)) {
4728     desc->depth = 0;
4729     desc->status &= ~IRQ_DISABLED;
4730     diff --git a/kernel/lockdep.c b/kernel/lockdep.c
4731     index c62ec14..493a0ef 100644
4732     --- a/kernel/lockdep.c
4733     +++ b/kernel/lockdep.c
4734     @@ -600,9 +600,9 @@ static int static_obj(void *obj)
4735     * percpu var?
4736     */
4737     for_each_possible_cpu(i) {
4738     - start = (unsigned long) &__per_cpu_start + per_cpu_offset(i);
4739     - end = (unsigned long) &__per_cpu_start + PERCPU_ENOUGH_ROOM
4740     - + per_cpu_offset(i);
4741     + start = (unsigned long) per_cpu_ptr(&__per_cpu_start, i);
4742     + end = (unsigned long) per_cpu_ptr(&__per_cpu_start, i)
4743     + + PERCPU_ENOUGH_ROOM;
4744    
4745     if ((addr >= start) && (addr < end))
4746     return 1;
4747     diff --git a/kernel/module.c b/kernel/module.c
4748     index f82386b..5b6ce39 100644
4749     --- a/kernel/module.c
4750     +++ b/kernel/module.c
4751     @@ -405,7 +405,7 @@ static void percpu_modcopy(void *pcpudest, const void *from, unsigned long size)
4752     int cpu;
4753    
4754     for_each_possible_cpu(cpu)
4755     - memcpy(pcpudest + per_cpu_offset(cpu), from, size);
4756     + memcpy(per_cpu_ptr(pcpudest, cpu), from, size);
4757     }
4758    
4759     #else /* ... !CONFIG_SMP */
4760     diff --git a/kernel/power/process.c b/kernel/power/process.c
4761     index 5ade1bd..de53015 100644
4762     --- a/kernel/power/process.c
4763     +++ b/kernel/power/process.c
4764     @@ -145,7 +145,7 @@ static void thaw_tasks(bool nosig_only)
4765     if (nosig_only && should_send_signal(p))
4766     continue;
4767    
4768     - if (cgroup_frozen(p))
4769     + if (cgroup_freezing_or_frozen(p))
4770     continue;
4771    
4772     thaw_process(p);
4773     diff --git a/kernel/sched.c b/kernel/sched.c
4774     index 7ca9345..da19c1e 100644
4775     --- a/kernel/sched.c
4776     +++ b/kernel/sched.c
4777     @@ -6717,7 +6717,9 @@ SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,
4778     int ret;
4779     cpumask_var_t mask;
4780    
4781     - if (len < cpumask_size())
4782     + if ((len * BITS_PER_BYTE) < nr_cpu_ids)
4783     + return -EINVAL;
4784     + if (len & (sizeof(unsigned long)-1))
4785     return -EINVAL;
4786    
4787     if (!alloc_cpumask_var(&mask, GFP_KERNEL))
4788     @@ -6725,10 +6727,12 @@ SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,
4789    
4790     ret = sched_getaffinity(pid, mask);
4791     if (ret == 0) {
4792     - if (copy_to_user(user_mask_ptr, mask, cpumask_size()))
4793     + size_t retlen = min_t(size_t, len, cpumask_size());
4794     +
4795     + if (copy_to_user(user_mask_ptr, mask, retlen))
4796     ret = -EFAULT;
4797     else
4798     - ret = cpumask_size();
4799     + ret = retlen;
4800     }
4801     free_cpumask_var(mask);
4802    
4803     diff --git a/mm/readahead.c b/mm/readahead.c
4804     index 337b20e..fe1a069 100644
4805     --- a/mm/readahead.c
4806     +++ b/mm/readahead.c
4807     @@ -502,7 +502,7 @@ void page_cache_sync_readahead(struct address_space *mapping,
4808     return;
4809    
4810     /* be dumb */
4811     - if (filp->f_mode & FMODE_RANDOM) {
4812     + if (filp && (filp->f_mode & FMODE_RANDOM)) {
4813     force_page_cache_readahead(mapping, filp, offset, req_size);
4814     return;
4815     }
4816     diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
4817     index 6a43314..ba1fadb 100644
4818     --- a/net/mac80211/mesh.c
4819     +++ b/net/mac80211/mesh.c
4820     @@ -749,9 +749,6 @@ ieee80211_mesh_rx_mgmt(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
4821    
4822     switch (fc & IEEE80211_FCTL_STYPE) {
4823     case IEEE80211_STYPE_ACTION:
4824     - if (skb->len < IEEE80211_MIN_ACTION_SIZE)
4825     - return RX_DROP_MONITOR;
4826     - /* fall through */
4827     case IEEE80211_STYPE_PROBE_RESP:
4828     case IEEE80211_STYPE_BEACON:
4829     skb_queue_tail(&ifmsh->skb_queue, skb);
4830     diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
4831     index d28acb6..4eed81b 100644
4832     --- a/net/mac80211/mesh_hwmp.c
4833     +++ b/net/mac80211/mesh_hwmp.c
4834     @@ -391,7 +391,7 @@ static u32 hwmp_route_info_get(struct ieee80211_sub_if_data *sdata,
4835     if (SN_GT(mpath->sn, orig_sn) ||
4836     (mpath->sn == orig_sn &&
4837     action == MPATH_PREQ &&
4838     - new_metric > mpath->metric)) {
4839     + new_metric >= mpath->metric)) {
4840     process = false;
4841     fresh_info = false;
4842     }
4843     @@ -611,7 +611,7 @@ static void hwmp_prep_frame_process(struct ieee80211_sub_if_data *sdata,
4844    
4845     mesh_path_sel_frame_tx(MPATH_PREP, flags, orig_addr,
4846     cpu_to_le32(orig_sn), 0, target_addr,
4847     - cpu_to_le32(target_sn), mpath->next_hop->sta.addr, hopcount,
4848     + cpu_to_le32(target_sn), next_hop, hopcount,
4849     ttl, cpu_to_le32(lifetime), cpu_to_le32(metric),
4850     0, sdata);
4851     rcu_read_unlock();
4852     diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
4853     index da92cde..edfa036 100644
4854     --- a/net/mac80211/rx.c
4855     +++ b/net/mac80211/rx.c
4856     @@ -2355,6 +2355,11 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata,
4857     /* should never get here */
4858     WARN_ON(1);
4859     break;
4860     + case MESH_PLINK_CATEGORY:
4861     + case MESH_PATH_SEL_CATEGORY:
4862     + if (ieee80211_vif_is_mesh(&sdata->vif))
4863     + return ieee80211_mesh_rx_mgmt(sdata, rx->skb);
4864     + break;
4865     }
4866    
4867     return 1;
4868     diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
4869     index 70c79c3..1fdc0a5 100644
4870     --- a/net/mac80211/tx.c
4871     +++ b/net/mac80211/tx.c
4872     @@ -1945,6 +1945,7 @@ static bool ieee80211_tx_pending_skb(struct ieee80211_local *local,
4873     void ieee80211_tx_pending(unsigned long data)
4874     {
4875     struct ieee80211_local *local = (struct ieee80211_local *)data;
4876     + struct ieee80211_sub_if_data *sdata;
4877     unsigned long flags;
4878     int i;
4879     bool txok;
4880     @@ -1983,6 +1984,11 @@ void ieee80211_tx_pending(unsigned long data)
4881     if (!txok)
4882     break;
4883     }
4884     +
4885     + if (skb_queue_empty(&local->pending[i]))
4886     + list_for_each_entry_rcu(sdata, &local->interfaces, list)
4887     + netif_tx_wake_queue(
4888     + netdev_get_tx_queue(sdata->dev, i));
4889     }
4890     spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
4891    
4892     diff --git a/net/mac80211/util.c b/net/mac80211/util.c
4893     index 3848140..27212e8 100644
4894     --- a/net/mac80211/util.c
4895     +++ b/net/mac80211/util.c
4896     @@ -280,13 +280,13 @@ static void __ieee80211_wake_queue(struct ieee80211_hw *hw, int queue,
4897     /* someone still has this queue stopped */
4898     return;
4899    
4900     - if (!skb_queue_empty(&local->pending[queue]))
4901     + if (skb_queue_empty(&local->pending[queue])) {
4902     + rcu_read_lock();
4903     + list_for_each_entry_rcu(sdata, &local->interfaces, list)
4904     + netif_tx_wake_queue(netdev_get_tx_queue(sdata->dev, queue));
4905     + rcu_read_unlock();
4906     + } else
4907     tasklet_schedule(&local->tx_pending_tasklet);
4908     -
4909     - rcu_read_lock();
4910     - list_for_each_entry_rcu(sdata, &local->interfaces, list)
4911     - netif_tx_wake_queue(netdev_get_tx_queue(sdata->dev, queue));
4912     - rcu_read_unlock();
4913     }
4914    
4915     void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue,
4916     @@ -1145,6 +1145,14 @@ int ieee80211_reconfig(struct ieee80211_local *local)
4917     }
4918     }
4919    
4920     + rcu_read_lock();
4921     + if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) {
4922     + list_for_each_entry_rcu(sta, &local->sta_list, list) {
4923     + ieee80211_sta_tear_down_BA_sessions(sta);
4924     + }
4925     + }
4926     + rcu_read_unlock();
4927     +
4928     /* add back keys */
4929     list_for_each_entry(sdata, &local->interfaces, list)
4930     if (netif_running(sdata->dev))
4931     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
4932     index 9ace8eb..062a8b0 100644
4933     --- a/sound/pci/hda/hda_intel.c
4934     +++ b/sound/pci/hda/hda_intel.c
4935     @@ -125,6 +125,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
4936     "{Intel, ICH9},"
4937     "{Intel, ICH10},"
4938     "{Intel, PCH},"
4939     + "{Intel, CPT},"
4940     "{Intel, SCH},"
4941     "{ATI, SB450},"
4942     "{ATI, SB600},"
4943     @@ -449,6 +450,7 @@ struct azx {
4944     /* driver types */
4945     enum {
4946     AZX_DRIVER_ICH,
4947     + AZX_DRIVER_PCH,
4948     AZX_DRIVER_SCH,
4949     AZX_DRIVER_ATI,
4950     AZX_DRIVER_ATIHDMI,
4951     @@ -463,6 +465,7 @@ enum {
4952    
4953     static char *driver_short_names[] __devinitdata = {
4954     [AZX_DRIVER_ICH] = "HDA Intel",
4955     + [AZX_DRIVER_PCH] = "HDA Intel PCH",
4956     [AZX_DRIVER_SCH] = "HDA Intel MID",
4957     [AZX_DRIVER_ATI] = "HDA ATI SB",
4958     [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI",
4959     @@ -1065,6 +1068,7 @@ static void azx_init_pci(struct azx *chip)
4960     0x01, NVIDIA_HDA_ENABLE_COHBIT);
4961     break;
4962     case AZX_DRIVER_SCH:
4963     + case AZX_DRIVER_PCH:
4964     pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);
4965     if (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP) {
4966     pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC,
4967     @@ -2268,6 +2272,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = {
4968     SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB),
4969     SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
4970     SND_PCI_QUIRK(0x1565, 0x820f, "Biostar Microtech", POS_FIX_LPIB),
4971     + SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB),
4972     SND_PCI_QUIRK(0x8086, 0xd601, "eMachines T5212", POS_FIX_LPIB),
4973     {}
4974     };
4975     @@ -2357,6 +2362,8 @@ static struct snd_pci_quirk msi_black_list[] __devinitdata = {
4976     SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
4977     SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
4978     SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
4979     + SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
4980     + SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
4981     {}
4982     };
4983    
4984     @@ -2431,6 +2438,7 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
4985     if (bdl_pos_adj[dev] < 0) {
4986     switch (chip->driver_type) {
4987     case AZX_DRIVER_ICH:
4988     + case AZX_DRIVER_PCH:
4989     bdl_pos_adj[dev] = 1;
4990     break;
4991     default:
4992     @@ -2709,6 +2717,8 @@ static struct pci_device_id azx_ids[] = {
4993     { PCI_DEVICE(0x8086, 0x3a6e), .driver_data = AZX_DRIVER_ICH },
4994     /* PCH */
4995     { PCI_DEVICE(0x8086, 0x3b56), .driver_data = AZX_DRIVER_ICH },
4996     + /* CPT */
4997     + { PCI_DEVICE(0x8086, 0x1c20), .driver_data = AZX_DRIVER_PCH },
4998     /* SCH */
4999     { PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH },
5000     /* ATI SB 450/600 */
5001     diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
5002     index 7069441..263bf3b 100644
5003     --- a/sound/pci/hda/patch_analog.c
5004     +++ b/sound/pci/hda/patch_analog.c
5005     @@ -1805,6 +1805,14 @@ static int patch_ad1981(struct hda_codec *codec)
5006     case AD1981_THINKPAD:
5007     spec->mixers[0] = ad1981_thinkpad_mixers;
5008     spec->input_mux = &ad1981_thinkpad_capture_source;
5009     + /* set the upper-limit for mixer amp to 0dB for avoiding the
5010     + * possible damage by overloading
5011     + */
5012     + snd_hda_override_amp_caps(codec, 0x11, HDA_INPUT,
5013     + (0x17 << AC_AMPCAP_OFFSET_SHIFT) |
5014     + (0x17 << AC_AMPCAP_NUM_STEPS_SHIFT) |
5015     + (0x05 << AC_AMPCAP_STEP_SIZE_SHIFT) |
5016     + (1 << AC_AMPCAP_MUTE_SHIFT));
5017     break;
5018     case AD1981_TOSHIBA:
5019     spec->mixers[0] = ad1981_hp_mixers;
5020     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
5021     index a79f841..bd8a567 100644
5022     --- a/sound/pci/hda/patch_realtek.c
5023     +++ b/sound/pci/hda/patch_realtek.c
5024     @@ -9074,6 +9074,7 @@ static struct snd_pci_quirk alc882_cfg_tbl[] = {
5025     SND_PCI_QUIRK(0x1462, 0xaa08, "MSI", ALC883_TARGA_2ch_DIG),
5026    
5027     SND_PCI_QUIRK(0x147b, 0x1083, "Abit IP35-PRO", ALC883_6ST_DIG),
5028     + SND_PCI_QUIRK(0x1558, 0x0571, "Clevo laptop M570U", ALC883_3ST_6ch_DIG),
5029     SND_PCI_QUIRK(0x1558, 0x0721, "Clevo laptop M720R", ALC883_CLEVO_M720),
5030     SND_PCI_QUIRK(0x1558, 0x0722, "Clevo laptop M720SR", ALC883_CLEVO_M720),
5031     SND_PCI_QUIRK(0x1558, 0x5409, "Clevo laptop M540R", ALC883_CLEVO_M540R),
5032     diff --git a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c
5033     index a83d196..32f9853 100644
5034     --- a/sound/pci/mixart/mixart.c
5035     +++ b/sound/pci/mixart/mixart.c
5036     @@ -1161,13 +1161,15 @@ static long snd_mixart_BA0_read(struct snd_info_entry *entry, void *file_private
5037     unsigned long count, unsigned long pos)
5038     {
5039     struct mixart_mgr *mgr = entry->private_data;
5040     + unsigned long maxsize;
5041    
5042     - count = count & ~3; /* make sure the read size is a multiple of 4 bytes */
5043     - if(count <= 0)
5044     + if (pos >= MIXART_BA0_SIZE)
5045     return 0;
5046     - if(pos + count > MIXART_BA0_SIZE)
5047     - count = (long)(MIXART_BA0_SIZE - pos);
5048     - if(copy_to_user_fromio(buf, MIXART_MEM( mgr, pos ), count))
5049     + maxsize = MIXART_BA0_SIZE - pos;
5050     + if (count > maxsize)
5051     + count = maxsize;
5052     + count = count & ~3; /* make sure the read size is a multiple of 4 bytes */
5053     + if (copy_to_user_fromio(buf, MIXART_MEM(mgr, pos), count))
5054     return -EFAULT;
5055     return count;
5056     }
5057     @@ -1180,13 +1182,15 @@ static long snd_mixart_BA1_read(struct snd_info_entry *entry, void *file_private
5058     unsigned long count, unsigned long pos)
5059     {
5060     struct mixart_mgr *mgr = entry->private_data;
5061     + unsigned long maxsize;
5062    
5063     - count = count & ~3; /* make sure the read size is a multiple of 4 bytes */
5064     - if(count <= 0)
5065     + if (pos > MIXART_BA1_SIZE)
5066     return 0;
5067     - if(pos + count > MIXART_BA1_SIZE)
5068     - count = (long)(MIXART_BA1_SIZE - pos);
5069     - if(copy_to_user_fromio(buf, MIXART_REG( mgr, pos ), count))
5070     + maxsize = MIXART_BA1_SIZE - pos;
5071     + if (count > maxsize)
5072     + count = maxsize;
5073     + count = count & ~3; /* make sure the read size is a multiple of 4 bytes */
5074     + if (copy_to_user_fromio(buf, MIXART_REG(mgr, pos), count))
5075     return -EFAULT;
5076     return count;
5077     }
5078     diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
5079     index b2da478..c7cb207 100644
5080     --- a/sound/usb/usbmidi.c
5081     +++ b/sound/usb/usbmidi.c
5082     @@ -984,6 +984,8 @@ static void snd_usbmidi_output_drain(struct snd_rawmidi_substream *substream)
5083     DEFINE_WAIT(wait);
5084     long timeout = msecs_to_jiffies(50);
5085    
5086     + if (ep->umidi->disconnected)
5087     + return;
5088     /*
5089     * The substream buffer is empty, but some data might still be in the
5090     * currently active URBs, so we have to wait for those to complete.
5091     @@ -1121,14 +1123,21 @@ static int snd_usbmidi_in_endpoint_create(struct snd_usb_midi* umidi,
5092     * Frees an output endpoint.
5093     * May be called when ep hasn't been initialized completely.
5094     */
5095     -static void snd_usbmidi_out_endpoint_delete(struct snd_usb_midi_out_endpoint* ep)
5096     +static void snd_usbmidi_out_endpoint_clear(struct snd_usb_midi_out_endpoint *ep)
5097     {
5098     unsigned int i;
5099    
5100     for (i = 0; i < OUTPUT_URBS; ++i)
5101     - if (ep->urbs[i].urb)
5102     + if (ep->urbs[i].urb) {
5103     free_urb_and_buffer(ep->umidi, ep->urbs[i].urb,
5104     ep->max_transfer);
5105     + ep->urbs[i].urb = NULL;
5106     + }
5107     +}
5108     +
5109     +static void snd_usbmidi_out_endpoint_delete(struct snd_usb_midi_out_endpoint *ep)
5110     +{
5111     + snd_usbmidi_out_endpoint_clear(ep);
5112     kfree(ep);
5113     }
5114    
5115     @@ -1260,15 +1269,18 @@ void snd_usbmidi_disconnect(struct list_head* p)
5116     usb_kill_urb(ep->out->urbs[j].urb);
5117     if (umidi->usb_protocol_ops->finish_out_endpoint)
5118     umidi->usb_protocol_ops->finish_out_endpoint(ep->out);
5119     + ep->out->active_urbs = 0;
5120     + if (ep->out->drain_urbs) {
5121     + ep->out->drain_urbs = 0;
5122     + wake_up(&ep->out->drain_wait);
5123     + }
5124     }
5125     if (ep->in)
5126     for (j = 0; j < INPUT_URBS; ++j)
5127     usb_kill_urb(ep->in->urbs[j]);
5128     /* free endpoints here; later call can result in Oops */
5129     - if (ep->out) {
5130     - snd_usbmidi_out_endpoint_delete(ep->out);
5131     - ep->out = NULL;
5132     - }
5133     + if (ep->out)
5134     + snd_usbmidi_out_endpoint_clear(ep->out);
5135     if (ep->in) {
5136     snd_usbmidi_in_endpoint_delete(ep->in);
5137     ep->in = NULL;
5138     diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
5139     index a944be3..9dd98cb 100644
5140     --- a/virt/kvm/kvm_main.c
5141     +++ b/virt/kvm/kvm_main.c
5142     @@ -636,7 +636,7 @@ skip_lpage:
5143    
5144     /* Allocate page dirty bitmap if needed */
5145     if ((new.flags & KVM_MEM_LOG_DIRTY_PAGES) && !new.dirty_bitmap) {
5146     - unsigned dirty_bytes = ALIGN(npages, BITS_PER_LONG) / 8;
5147     + unsigned long dirty_bytes = kvm_dirty_bitmap_bytes(&new);
5148    
5149     new.dirty_bitmap = vmalloc(dirty_bytes);
5150     if (!new.dirty_bitmap)
5151     @@ -719,7 +719,7 @@ int kvm_get_dirty_log(struct kvm *kvm,
5152     {
5153     struct kvm_memory_slot *memslot;
5154     int r, i;
5155     - int n;
5156     + unsigned long n;
5157     unsigned long any = 0;
5158    
5159     r = -EINVAL;
5160     @@ -731,7 +731,7 @@ int kvm_get_dirty_log(struct kvm *kvm,
5161     if (!memslot->dirty_bitmap)
5162     goto out;
5163    
5164     - n = ALIGN(memslot->npages, BITS_PER_LONG) / 8;
5165     + n = kvm_dirty_bitmap_bytes(memslot);
5166    
5167     for (i = 0; !any && i < n/sizeof(long); ++i)
5168     any = memslot->dirty_bitmap[i];
5169     @@ -1073,10 +1073,13 @@ void mark_page_dirty(struct kvm *kvm, gfn_t gfn)
5170     memslot = gfn_to_memslot_unaliased(kvm, gfn);
5171     if (memslot && memslot->dirty_bitmap) {
5172     unsigned long rel_gfn = gfn - memslot->base_gfn;
5173     + unsigned long *p = memslot->dirty_bitmap +
5174     + rel_gfn / BITS_PER_LONG;
5175     + int offset = rel_gfn % BITS_PER_LONG;
5176    
5177     /* avoid RMW */
5178     - if (!generic_test_le_bit(rel_gfn, memslot->dirty_bitmap))
5179     - generic___set_le_bit(rel_gfn, memslot->dirty_bitmap);
5180     + if (!generic_test_le_bit(offset, p))
5181     + generic___set_le_bit(offset, p);
5182     }
5183     }
5184