Magellan Linux

Contents of /trunk/kernel26-magellan-server/patches-2.6.31-r3/0101-2.6.31.2-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 946 - (show annotations) (download)
Thu Dec 10 13:02:09 2009 UTC (14 years, 4 months ago) by niro
File size: 250217 byte(s)
-2.6.31-magellan-r3: updated to linux-2.6.31.7

1 diff --git a/MAINTAINERS b/MAINTAINERS
2 index 8dca9d8..2ccc21c 100644
3 --- a/MAINTAINERS
4 +++ b/MAINTAINERS
5 @@ -897,6 +897,12 @@ W: http://wireless.kernel.org/en/users/Drivers/ar9170
6 S: Maintained
7 F: drivers/net/wireless/ath/ar9170/
8
9 +ATK0110 HWMON DRIVER
10 +M: Luca Tettamanti <kronos.it@gmail.com>
11 +L: lm-sensors@lm-sensors.org
12 +S: Maintained
13 +F: drivers/hwmon/asus_atk0110.c
14 +
15 ATI_REMOTE2 DRIVER
16 M: Ville Syrjala <syrjala@sci.fi>
17 S: Maintained
18 diff --git a/arch/alpha/kernel/core_marvel.c b/arch/alpha/kernel/core_marvel.c
19 index e302dae..8e059e5 100644
20 --- a/arch/alpha/kernel/core_marvel.c
21 +++ b/arch/alpha/kernel/core_marvel.c
22 @@ -1016,7 +1016,7 @@ marvel_agp_bind_memory(alpha_agp_info *agp, off_t pg_start, struct agp_memory *m
23 {
24 struct marvel_agp_aperture *aper = agp->aperture.sysdata;
25 return iommu_bind(aper->arena, aper->pg_start + pg_start,
26 - mem->page_count, mem->memory);
27 + mem->page_count, mem->pages);
28 }
29
30 static int
31 diff --git a/arch/alpha/kernel/core_titan.c b/arch/alpha/kernel/core_titan.c
32 index 319fcb7..7668649 100644
33 --- a/arch/alpha/kernel/core_titan.c
34 +++ b/arch/alpha/kernel/core_titan.c
35 @@ -680,7 +680,7 @@ titan_agp_bind_memory(alpha_agp_info *agp, off_t pg_start, struct agp_memory *me
36 {
37 struct titan_agp_aperture *aper = agp->aperture.sysdata;
38 return iommu_bind(aper->arena, aper->pg_start + pg_start,
39 - mem->page_count, mem->memory);
40 + mem->page_count, mem->pages);
41 }
42
43 static int
44 diff --git a/arch/alpha/kernel/pci_impl.h b/arch/alpha/kernel/pci_impl.h
45 index 00edd04..85457b2 100644
46 --- a/arch/alpha/kernel/pci_impl.h
47 +++ b/arch/alpha/kernel/pci_impl.h
48 @@ -198,7 +198,7 @@ extern unsigned long size_for_memory(unsigned long max);
49
50 extern int iommu_reserve(struct pci_iommu_arena *, long, long);
51 extern int iommu_release(struct pci_iommu_arena *, long, long);
52 -extern int iommu_bind(struct pci_iommu_arena *, long, long, unsigned long *);
53 +extern int iommu_bind(struct pci_iommu_arena *, long, long, struct page **);
54 extern int iommu_unbind(struct pci_iommu_arena *, long, long);
55
56
57 diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c
58 index bfb880a..eadd63b 100644
59 --- a/arch/alpha/kernel/pci_iommu.c
60 +++ b/arch/alpha/kernel/pci_iommu.c
61 @@ -880,7 +880,7 @@ iommu_release(struct pci_iommu_arena *arena, long pg_start, long pg_count)
62
63 int
64 iommu_bind(struct pci_iommu_arena *arena, long pg_start, long pg_count,
65 - unsigned long *physaddrs)
66 + struct page **pages)
67 {
68 unsigned long flags;
69 unsigned long *ptes;
70 @@ -900,7 +900,7 @@ iommu_bind(struct pci_iommu_arena *arena, long pg_start, long pg_count,
71 }
72
73 for(i = 0, j = pg_start; i < pg_count; i++, j++)
74 - ptes[j] = mk_iommu_pte(physaddrs[i]);
75 + ptes[j] = mk_iommu_pte(page_to_phys(pages[i]));
76
77 spin_unlock_irqrestore(&arena->lock, flags);
78
79 diff --git a/arch/arm/mach-pxa/sharpsl_pm.c b/arch/arm/mach-pxa/sharpsl_pm.c
80 index 2546c06..629e05d 100644
81 --- a/arch/arm/mach-pxa/sharpsl_pm.c
82 +++ b/arch/arm/mach-pxa/sharpsl_pm.c
83 @@ -678,8 +678,8 @@ static int corgi_enter_suspend(unsigned long alarm_time, unsigned int alarm_enab
84 dev_dbg(sharpsl_pm.dev, "User triggered wakeup in offline charger.\n");
85 }
86
87 - if ((!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_LOCK)) || (sharpsl_fatal_check() < 0) )
88 - {
89 + if ((!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_LOCK)) ||
90 + (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_FATAL))) {
91 dev_err(sharpsl_pm.dev, "Fatal condition. Suspend.\n");
92 corgi_goto_sleep(alarm_time, alarm_enable, state);
93 return 1;
94 diff --git a/arch/powerpc/include/asm/pte-common.h b/arch/powerpc/include/asm/pte-common.h
95 index a7e210b..0cd2e34 100644
96 --- a/arch/powerpc/include/asm/pte-common.h
97 +++ b/arch/powerpc/include/asm/pte-common.h
98 @@ -176,7 +176,7 @@ extern unsigned long bad_call_to_PMD_PAGE_SIZE(void);
99 #define HAVE_PAGE_AGP
100
101 /* Advertise support for _PAGE_SPECIAL */
102 -#ifdef _PAGE_SPECIAL
103 +#if _PAGE_SPECIAL != 0
104 #define __HAVE_ARCH_PTE_SPECIAL
105 #endif
106
107 diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c
108 index 627767d..d8e6725 100644
109 --- a/arch/powerpc/mm/pgtable.c
110 +++ b/arch/powerpc/mm/pgtable.c
111 @@ -30,6 +30,8 @@
112 #include <asm/tlbflush.h>
113 #include <asm/tlb.h>
114
115 +#include "mmu_decl.h"
116 +
117 static DEFINE_PER_CPU(struct pte_freelist_batch *, pte_freelist_cur);
118 static unsigned long pte_freelist_forced_free;
119
120 @@ -119,7 +121,7 @@ void pte_free_finish(void)
121 /*
122 * Handle i/d cache flushing, called from set_pte_at() or ptep_set_access_flags()
123 */
124 -static pte_t do_dcache_icache_coherency(pte_t pte)
125 +static pte_t do_dcache_icache_coherency(pte_t pte, unsigned long addr)
126 {
127 unsigned long pfn = pte_pfn(pte);
128 struct page *page;
129 @@ -128,6 +130,17 @@ static pte_t do_dcache_icache_coherency(pte_t pte)
130 return pte;
131 page = pfn_to_page(pfn);
132
133 +#ifdef CONFIG_8xx
134 + /* On 8xx, cache control instructions (particularly
135 + * "dcbst" from flush_dcache_icache) fault as write
136 + * operation if there is an unpopulated TLB entry
137 + * for the address in question. To workaround that,
138 + * we invalidate the TLB here, thus avoiding dcbst
139 + * misbehaviour.
140 + */
141 + _tlbil_va(addr, 0 /* 8xx doesn't care about PID */);
142 +#endif
143 +
144 if (!PageReserved(page) && !test_bit(PG_arch_1, &page->flags)) {
145 pr_devel("do_dcache_icache_coherency... flushing\n");
146 flush_dcache_icache_page(page);
147 @@ -198,7 +211,7 @@ void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep, pte_t pte
148 */
149 pte = __pte(pte_val(pte) & ~_PAGE_HPTEFLAGS);
150 if (pte_need_exec_flush(pte, 1))
151 - pte = do_dcache_icache_coherency(pte);
152 + pte = do_dcache_icache_coherency(pte, addr);
153
154 /* Perform the setting of the PTE */
155 __set_pte_at(mm, addr, ptep, pte, 0);
156 @@ -216,7 +229,7 @@ int ptep_set_access_flags(struct vm_area_struct *vma, unsigned long address,
157 {
158 int changed;
159 if (!dirty && pte_need_exec_flush(entry, 0))
160 - entry = do_dcache_icache_coherency(entry);
161 + entry = do_dcache_icache_coherency(entry, address);
162 changed = !pte_same(*(ptep), entry);
163 if (changed) {
164 if (!(vma->vm_flags & VM_HUGETLB))
165 diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h
166 index 83c1bc8..456a304 100644
167 --- a/arch/x86/include/asm/elf.h
168 +++ b/arch/x86/include/asm/elf.h
169 @@ -299,6 +299,8 @@ do { \
170
171 #ifdef CONFIG_X86_32
172
173 +#define STACK_RND_MASK (0x7ff)
174 +
175 #define VDSO_HIGH_BASE (__fix_to_virt(FIX_VDSO))
176
177 #define ARCH_DLINFO ARCH_DLINFO_IA32(vdso_enabled)
178 diff --git a/arch/x86/include/asm/uv/uv_hub.h b/arch/x86/include/asm/uv/uv_hub.h
179 index 77a6850..03a0cbd 100644
180 --- a/arch/x86/include/asm/uv/uv_hub.h
181 +++ b/arch/x86/include/asm/uv/uv_hub.h
182 @@ -422,7 +422,7 @@ static inline void uv_hub_send_ipi(int pnode, int apicid, int vector)
183 unsigned long val;
184
185 val = (1UL << UVH_IPI_INT_SEND_SHFT) |
186 - ((apicid & 0x3f) << UVH_IPI_INT_APIC_ID_SHFT) |
187 + ((apicid) << UVH_IPI_INT_APIC_ID_SHFT) |
188 (vector << UVH_IPI_INT_VECTOR_SHFT);
189 uv_write_global_mmr64(pnode, UVH_IPI_INT, val);
190 }
191 diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c
192 index 2a50ef8..fde0cd3 100644
193 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c
194 +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c
195 @@ -605,9 +605,10 @@ static int check_pst_table(struct powernow_k8_data *data, struct pst_s *pst,
196 return 0;
197 }
198
199 -static void invalidate_entry(struct powernow_k8_data *data, unsigned int entry)
200 +static void invalidate_entry(struct cpufreq_frequency_table *powernow_table,
201 + unsigned int entry)
202 {
203 - data->powernow_table[entry].frequency = CPUFREQ_ENTRY_INVALID;
204 + powernow_table[entry].frequency = CPUFREQ_ENTRY_INVALID;
205 }
206
207 static void print_basics(struct powernow_k8_data *data)
208 @@ -914,13 +915,13 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data,
209 "bad value %d.\n", i, index);
210 printk(KERN_ERR PFX "Please report to BIOS "
211 "manufacturer\n");
212 - invalidate_entry(data, i);
213 + invalidate_entry(powernow_table, i);
214 continue;
215 }
216 rdmsr(MSR_PSTATE_DEF_BASE + index, lo, hi);
217 if (!(hi & HW_PSTATE_VALID_MASK)) {
218 dprintk("invalid pstate %d, ignoring\n", index);
219 - invalidate_entry(data, i);
220 + invalidate_entry(powernow_table, i);
221 continue;
222 }
223
224 @@ -970,7 +971,7 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data,
225 /* verify frequency is OK */
226 if ((freq > (MAX_FREQ * 1000)) || (freq < (MIN_FREQ * 1000))) {
227 dprintk("invalid freq %u kHz, ignoring\n", freq);
228 - invalidate_entry(data, i);
229 + invalidate_entry(powernow_table, i);
230 continue;
231 }
232
233 @@ -978,7 +979,7 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data,
234 * BIOSs are using "off" to indicate invalid */
235 if (vid == VID_OFF) {
236 dprintk("invalid vid %u, ignoring\n", vid);
237 - invalidate_entry(data, i);
238 + invalidate_entry(powernow_table, i);
239 continue;
240 }
241
242 @@ -997,7 +998,7 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data,
243
244 dprintk("double low frequency table entry, "
245 "ignoring it.\n");
246 - invalidate_entry(data, i);
247 + invalidate_entry(powernow_table, i);
248 continue;
249 } else
250 cntlofreq = i;
251 @@ -1009,7 +1010,7 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data,
252 (unsigned int)
253 (data->acpi_data.states[i].core_frequency
254 * 1000));
255 - invalidate_entry(data, i);
256 + invalidate_entry(powernow_table, i);
257 continue;
258 }
259 }
260 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
261 index a5cdb35..4712293 100644
262 --- a/arch/x86/kvm/mmu.c
263 +++ b/arch/x86/kvm/mmu.c
264 @@ -2713,12 +2713,6 @@ static int alloc_mmu_pages(struct kvm_vcpu *vcpu)
265
266 ASSERT(vcpu);
267
268 - if (vcpu->kvm->arch.n_requested_mmu_pages)
269 - vcpu->kvm->arch.n_free_mmu_pages =
270 - vcpu->kvm->arch.n_requested_mmu_pages;
271 - else
272 - vcpu->kvm->arch.n_free_mmu_pages =
273 - vcpu->kvm->arch.n_alloc_mmu_pages;
274 /*
275 * When emulating 32-bit mode, cr3 is only 32 bits even on x86_64.
276 * Therefore we need to allocate shadow page tables in the first
277 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
278 index b5fa966..6a768ff 100644
279 --- a/arch/x86/kvm/vmx.c
280 +++ b/arch/x86/kvm/vmx.c
281 @@ -1569,7 +1569,6 @@ static void ept_update_paging_mode_cr0(unsigned long *hw_cr0,
282 vcpu->arch.cr0 = cr0;
283 vmx_set_cr4(vcpu, vcpu->arch.cr4);
284 *hw_cr0 |= X86_CR0_PE | X86_CR0_PG;
285 - *hw_cr0 &= ~X86_CR0_WP;
286 } else if (!is_paging(vcpu)) {
287 /* From nonpaging to paging */
288 vmcs_write32(CPU_BASED_VM_EXEC_CONTROL,
289 @@ -1578,9 +1577,10 @@ static void ept_update_paging_mode_cr0(unsigned long *hw_cr0,
290 CPU_BASED_CR3_STORE_EXITING));
291 vcpu->arch.cr0 = cr0;
292 vmx_set_cr4(vcpu, vcpu->arch.cr4);
293 - if (!(vcpu->arch.cr0 & X86_CR0_WP))
294 - *hw_cr0 &= ~X86_CR0_WP;
295 }
296 +
297 + if (!(cr0 & X86_CR0_WP))
298 + *hw_cr0 &= ~X86_CR0_WP;
299 }
300
301 static void ept_update_paging_mode_cr4(unsigned long *hw_cr4,
302 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
303 index 3d36045..91a077f 100644
304 --- a/arch/x86/kvm/x86.c
305 +++ b/arch/x86/kvm/x86.c
306 @@ -1448,6 +1448,10 @@ static int kvm_dev_ioctl_get_supported_cpuid(struct kvm_cpuid2 *cpuid,
307 for (func = 0x80000001; func <= limit && nent < cpuid->nent; ++func)
308 do_cpuid_ent(&cpuid_entries[nent], func, 0,
309 &nent, cpuid->nent);
310 + r = -E2BIG;
311 + if (nent >= cpuid->nent)
312 + goto out_free;
313 +
314 r = -EFAULT;
315 if (copy_to_user(entries, cpuid_entries,
316 nent * sizeof(struct kvm_cpuid_entry2)))
317 @@ -3198,6 +3202,9 @@ static void update_cr8_intercept(struct kvm_vcpu *vcpu)
318 if (!kvm_x86_ops->update_cr8_intercept)
319 return;
320
321 + if (!vcpu->arch.apic)
322 + return;
323 +
324 if (!vcpu->arch.apic->vapic_addr)
325 max_irr = kvm_lapic_find_highest_irr(vcpu);
326 else
327 @@ -4118,13 +4125,7 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
328
329 vcpu->arch.cr2 = sregs->cr2;
330 mmu_reset_needed |= vcpu->arch.cr3 != sregs->cr3;
331 -
332 - down_read(&vcpu->kvm->slots_lock);
333 - if (gfn_to_memslot(vcpu->kvm, sregs->cr3 >> PAGE_SHIFT))
334 - vcpu->arch.cr3 = sregs->cr3;
335 - else
336 - set_bit(KVM_REQ_TRIPLE_FAULT, &vcpu->requests);
337 - up_read(&vcpu->kvm->slots_lock);
338 + vcpu->arch.cr3 = sregs->cr3;
339
340 kvm_set_cr8(vcpu, sregs->cr8);
341
342 diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
343 index eefdeee..0088329 100644
344 --- a/arch/x86/mm/Makefile
345 +++ b/arch/x86/mm/Makefile
346 @@ -1,6 +1,11 @@
347 obj-y := init.o init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \
348 pat.o pgtable.o gup.o
349
350 +# Make sure __phys_addr has no stackprotector
351 +nostackp := $(call cc-option, -fno-stack-protector)
352 +CFLAGS_ioremap.o := $(nostackp)
353 +CFLAGS_init.o := $(nostackp)
354 +
355 obj-$(CONFIG_SMP) += tlb.o
356
357 obj-$(CONFIG_X86_32) += pgtable_32.o iomap_32.o
358 diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
359 index 1658296..c8191de 100644
360 --- a/arch/x86/mm/mmap.c
361 +++ b/arch/x86/mm/mmap.c
362 @@ -29,13 +29,26 @@
363 #include <linux/random.h>
364 #include <linux/limits.h>
365 #include <linux/sched.h>
366 +#include <asm/elf.h>
367 +
368 +static unsigned int stack_maxrandom_size(void)
369 +{
370 + unsigned int max = 0;
371 + if ((current->flags & PF_RANDOMIZE) &&
372 + !(current->personality & ADDR_NO_RANDOMIZE)) {
373 + max = ((-1U) & STACK_RND_MASK) << PAGE_SHIFT;
374 + }
375 +
376 + return max;
377 +}
378 +
379
380 /*
381 * Top of mmap area (just below the process stack).
382 *
383 - * Leave an at least ~128 MB hole.
384 + * Leave an at least ~128 MB hole with possible stack randomization.
385 */
386 -#define MIN_GAP (128*1024*1024)
387 +#define MIN_GAP (128*1024*1024UL + stack_maxrandom_size())
388 #define MAX_GAP (TASK_SIZE/6*5)
389
390 /*
391 diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
392 index e245775..fbb46d6 100644
393 --- a/arch/x86/mm/pageattr.c
394 +++ b/arch/x86/mm/pageattr.c
395 @@ -143,6 +143,7 @@ void clflush_cache_range(void *vaddr, unsigned int size)
396
397 mb();
398 }
399 +EXPORT_SYMBOL_GPL(clflush_cache_range);
400
401 static void __cpa_flush_all(void *arg)
402 {
403 diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile
404 index 7410640..3bb4fc2 100644
405 --- a/arch/x86/xen/Makefile
406 +++ b/arch/x86/xen/Makefile
407 @@ -8,6 +8,7 @@ endif
408 # Make sure early boot has no stackprotector
409 nostackp := $(call cc-option, -fno-stack-protector)
410 CFLAGS_enlighten.o := $(nostackp)
411 +CFLAGS_mmu.o := $(nostackp)
412
413 obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \
414 time.o xen-asm.o xen-asm_$(BITS).o \
415 @@ -16,3 +17,4 @@ obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \
416 obj-$(CONFIG_SMP) += smp.o
417 obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o
418 obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o
419 +
420 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
421 index eb33aaa..3839a0f 100644
422 --- a/arch/x86/xen/enlighten.c
423 +++ b/arch/x86/xen/enlighten.c
424 @@ -51,6 +51,7 @@
425 #include <asm/pgtable.h>
426 #include <asm/tlbflush.h>
427 #include <asm/reboot.h>
428 +#include <asm/stackprotector.h>
429
430 #include "xen-ops.h"
431 #include "mmu.h"
432 @@ -330,18 +331,28 @@ static void xen_load_gdt(const struct desc_ptr *dtr)
433 unsigned long frames[pages];
434 int f;
435
436 - /* A GDT can be up to 64k in size, which corresponds to 8192
437 - 8-byte entries, or 16 4k pages.. */
438 + /*
439 + * A GDT can be up to 64k in size, which corresponds to 8192
440 + * 8-byte entries, or 16 4k pages..
441 + */
442
443 BUG_ON(size > 65536);
444 BUG_ON(va & ~PAGE_MASK);
445
446 for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
447 int level;
448 - pte_t *ptep = lookup_address(va, &level);
449 + pte_t *ptep;
450 unsigned long pfn, mfn;
451 void *virt;
452
453 + /*
454 + * The GDT is per-cpu and is in the percpu data area.
455 + * That can be virtually mapped, so we need to do a
456 + * page-walk to get the underlying MFN for the
457 + * hypercall. The page can also be in the kernel's
458 + * linear range, so we need to RO that mapping too.
459 + */
460 + ptep = lookup_address(va, &level);
461 BUG_ON(ptep == NULL);
462
463 pfn = pte_pfn(*ptep);
464 @@ -358,6 +369,44 @@ static void xen_load_gdt(const struct desc_ptr *dtr)
465 BUG();
466 }
467
468 +/*
469 + * load_gdt for early boot, when the gdt is only mapped once
470 + */
471 +static __init void xen_load_gdt_boot(const struct desc_ptr *dtr)
472 +{
473 + unsigned long va = dtr->address;
474 + unsigned int size = dtr->size + 1;
475 + unsigned pages = (size + PAGE_SIZE - 1) / PAGE_SIZE;
476 + unsigned long frames[pages];
477 + int f;
478 +
479 + /*
480 + * A GDT can be up to 64k in size, which corresponds to 8192
481 + * 8-byte entries, or 16 4k pages..
482 + */
483 +
484 + BUG_ON(size > 65536);
485 + BUG_ON(va & ~PAGE_MASK);
486 +
487 + for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
488 + pte_t pte;
489 + unsigned long pfn, mfn;
490 +
491 + pfn = virt_to_pfn(va);
492 + mfn = pfn_to_mfn(pfn);
493 +
494 + pte = pfn_pte(pfn, PAGE_KERNEL_RO);
495 +
496 + if (HYPERVISOR_update_va_mapping((unsigned long)va, pte, 0))
497 + BUG();
498 +
499 + frames[f] = mfn;
500 + }
501 +
502 + if (HYPERVISOR_set_gdt(frames, size / sizeof(struct desc_struct)))
503 + BUG();
504 +}
505 +
506 static void load_TLS_descriptor(struct thread_struct *t,
507 unsigned int cpu, unsigned int i)
508 {
509 @@ -581,6 +630,29 @@ static void xen_write_gdt_entry(struct desc_struct *dt, int entry,
510 preempt_enable();
511 }
512
513 +/*
514 + * Version of write_gdt_entry for use at early boot-time needed to
515 + * update an entry as simply as possible.
516 + */
517 +static __init void xen_write_gdt_entry_boot(struct desc_struct *dt, int entry,
518 + const void *desc, int type)
519 +{
520 + switch (type) {
521 + case DESC_LDT:
522 + case DESC_TSS:
523 + /* ignore */
524 + break;
525 +
526 + default: {
527 + xmaddr_t maddr = virt_to_machine(&dt[entry]);
528 +
529 + if (HYPERVISOR_update_descriptor(maddr.maddr, *(u64 *)desc))
530 + dt[entry] = *(struct desc_struct *)desc;
531 + }
532 +
533 + }
534 +}
535 +
536 static void xen_load_sp0(struct tss_struct *tss,
537 struct thread_struct *thread)
538 {
539 @@ -965,6 +1037,23 @@ static const struct machine_ops __initdata xen_machine_ops = {
540 .emergency_restart = xen_emergency_restart,
541 };
542
543 +/*
544 + * Set up the GDT and segment registers for -fstack-protector. Until
545 + * we do this, we have to be careful not to call any stack-protected
546 + * function, which is most of the kernel.
547 + */
548 +static void __init xen_setup_stackprotector(void)
549 +{
550 + pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry_boot;
551 + pv_cpu_ops.load_gdt = xen_load_gdt_boot;
552 +
553 + setup_stack_canary_segment(0);
554 + switch_to_new_gdt(0);
555 +
556 + pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry;
557 + pv_cpu_ops.load_gdt = xen_load_gdt;
558 +}
559 +
560 /* First C function to be called on Xen boot */
561 asmlinkage void __init xen_start_kernel(void)
562 {
563 @@ -983,14 +1072,34 @@ asmlinkage void __init xen_start_kernel(void)
564 pv_apic_ops = xen_apic_ops;
565 pv_mmu_ops = xen_mmu_ops;
566
567 -#ifdef CONFIG_X86_64
568 /*
569 - * Setup percpu state. We only need to do this for 64-bit
570 - * because 32-bit already has %fs set properly.
571 + * Set up some pagetable state before starting to set any ptes.
572 */
573 - load_percpu_segment(0);
574 +
575 + /* Prevent unwanted bits from being set in PTEs. */
576 + __supported_pte_mask &= ~_PAGE_GLOBAL;
577 + if (!xen_initial_domain())
578 + __supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
579 +
580 + __supported_pte_mask |= _PAGE_IOMAP;
581 +
582 +#ifdef CONFIG_X86_64
583 + /* Work out if we support NX */
584 + check_efer();
585 #endif
586
587 + xen_setup_features();
588 +
589 + /* Get mfn list */
590 + if (!xen_feature(XENFEAT_auto_translated_physmap))
591 + xen_build_dynamic_phys_to_machine();
592 +
593 + /*
594 + * Set up kernel GDT and segment registers, mainly so that
595 + * -fstack-protector code can be executed.
596 + */
597 + xen_setup_stackprotector();
598 +
599 xen_init_irq_ops();
600 xen_init_cpuid_mask();
601
602 @@ -1001,8 +1110,6 @@ asmlinkage void __init xen_start_kernel(void)
603 set_xen_basic_apic_ops();
604 #endif
605
606 - xen_setup_features();
607 -
608 if (xen_feature(XENFEAT_mmu_pt_update_preserve_ad)) {
609 pv_mmu_ops.ptep_modify_prot_start = xen_ptep_modify_prot_start;
610 pv_mmu_ops.ptep_modify_prot_commit = xen_ptep_modify_prot_commit;
611 @@ -1019,22 +1126,8 @@ asmlinkage void __init xen_start_kernel(void)
612
613 xen_smp_init();
614
615 - /* Get mfn list */
616 - if (!xen_feature(XENFEAT_auto_translated_physmap))
617 - xen_build_dynamic_phys_to_machine();
618 -
619 pgd = (pgd_t *)xen_start_info->pt_base;
620
621 - /* Prevent unwanted bits from being set in PTEs. */
622 - __supported_pte_mask &= ~_PAGE_GLOBAL;
623 - if (!xen_initial_domain())
624 - __supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
625 -
626 -#ifdef CONFIG_X86_64
627 - /* Work out if we support NX */
628 - check_efer();
629 -#endif
630 -
631 /* Don't do the full vcpu_info placement stuff until we have a
632 possible map and a non-dummy shared_info. */
633 per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0];
634 diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
635 index 429834e..fe03eee 100644
636 --- a/arch/x86/xen/smp.c
637 +++ b/arch/x86/xen/smp.c
638 @@ -236,6 +236,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
639 ctxt->user_regs.ss = __KERNEL_DS;
640 #ifdef CONFIG_X86_32
641 ctxt->user_regs.fs = __KERNEL_PERCPU;
642 + ctxt->user_regs.gs = __KERNEL_STACK_CANARY;
643 #else
644 ctxt->gs_base_kernel = per_cpu_offset(cpu);
645 #endif
646 diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
647 index 5601506..36a5141 100644
648 --- a/arch/x86/xen/spinlock.c
649 +++ b/arch/x86/xen/spinlock.c
650 @@ -187,7 +187,6 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
651 struct xen_spinlock *prev;
652 int irq = __get_cpu_var(lock_kicker_irq);
653 int ret;
654 - unsigned long flags;
655 u64 start;
656
657 /* If kicker interrupts not initialized yet, just spin */
658 @@ -199,16 +198,12 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
659 /* announce we're spinning */
660 prev = spinning_lock(xl);
661
662 - flags = __raw_local_save_flags();
663 - if (irq_enable) {
664 - ADD_STATS(taken_slow_irqenable, 1);
665 - raw_local_irq_enable();
666 - }
667 -
668 ADD_STATS(taken_slow, 1);
669 ADD_STATS(taken_slow_nested, prev != NULL);
670
671 do {
672 + unsigned long flags;
673 +
674 /* clear pending */
675 xen_clear_irq_pending(irq);
676
677 @@ -228,6 +223,12 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
678 goto out;
679 }
680
681 + flags = __raw_local_save_flags();
682 + if (irq_enable) {
683 + ADD_STATS(taken_slow_irqenable, 1);
684 + raw_local_irq_enable();
685 + }
686 +
687 /*
688 * Block until irq becomes pending. If we're
689 * interrupted at this point (after the trylock but
690 @@ -238,13 +239,15 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
691 * pending.
692 */
693 xen_poll_irq(irq);
694 +
695 + raw_local_irq_restore(flags);
696 +
697 ADD_STATS(taken_slow_spurious, !xen_test_irq_pending(irq));
698 } while (!xen_test_irq_pending(irq)); /* check for spurious wakeups */
699
700 kstat_incr_irqs_this_cpu(irq, irq_to_desc(irq));
701
702 out:
703 - raw_local_irq_restore(flags);
704 unspinning_lock(xl, prev);
705 spin_time_accum_blocked(start);
706
707 @@ -323,8 +326,13 @@ static void xen_spin_unlock(struct raw_spinlock *lock)
708 smp_wmb(); /* make sure no writes get moved after unlock */
709 xl->lock = 0; /* release lock */
710
711 - /* make sure unlock happens before kick */
712 - barrier();
713 + /*
714 + * Make sure unlock happens before checking for waiting
715 + * spinners. We need a strong barrier to enforce the
716 + * write-read ordering to different memory locations, as the
717 + * CPU makes no implied guarantees about their ordering.
718 + */
719 + mb();
720
721 if (unlikely(xl->spinners))
722 xen_spin_unlock_slow(xl);
723 diff --git a/drivers/acpi/pci_slot.c b/drivers/acpi/pci_slot.c
724 index 12158e0..da9d6d2 100644
725 --- a/drivers/acpi/pci_slot.c
726 +++ b/drivers/acpi/pci_slot.c
727 @@ -57,7 +57,7 @@ ACPI_MODULE_NAME("pci_slot");
728 MY_NAME , ## arg); \
729 } while (0)
730
731 -#define SLOT_NAME_SIZE 20 /* Inspired by #define in acpiphp.h */
732 +#define SLOT_NAME_SIZE 21 /* Inspired by #define in acpiphp.h */
733
734 struct acpi_pci_slot {
735 acpi_handle root_handle; /* handle of the root bridge */
736 @@ -149,7 +149,7 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
737 return AE_OK;
738 }
739
740 - snprintf(name, sizeof(name), "%u", (u32)sun);
741 + snprintf(name, sizeof(name), "%llu", sun);
742 pci_slot = pci_create_slot(pci_bus, device, name, NULL);
743 if (IS_ERR(pci_slot)) {
744 err("pci_create_slot returned %ld\n", PTR_ERR(pci_slot));
745 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
746 index fe3eba5..289c4f8 100644
747 --- a/drivers/ata/ahci.c
748 +++ b/drivers/ata/ahci.c
749 @@ -2861,8 +2861,8 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
750 if (ahci_asus_m2a_vm_32bit_only(pdev))
751 hpriv->flags |= AHCI_HFLAG_32BIT_ONLY;
752
753 - if (!(hpriv->flags & AHCI_HFLAG_NO_MSI))
754 - pci_enable_msi(pdev);
755 + if ((hpriv->flags & AHCI_HFLAG_NO_MSI) || pci_enable_msi(pdev))
756 + pci_intx(pdev, 1);
757
758 /* save initial config */
759 ahci_save_initial_config(pdev, hpriv);
760 diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c
761 index 33a74f1..567f3f7 100644
762 --- a/drivers/ata/pata_amd.c
763 +++ b/drivers/ata/pata_amd.c
764 @@ -307,6 +307,9 @@ static unsigned long nv_mode_filter(struct ata_device *dev,
765 limit |= ATA_MASK_PIO;
766 if (!(limit & (ATA_MASK_MWDMA | ATA_MASK_UDMA)))
767 limit |= ATA_MASK_MWDMA | ATA_MASK_UDMA;
768 + /* PIO4, MWDMA2, UDMA2 should always be supported regardless of
769 + cable detection result */
770 + limit |= ata_pack_xfermask(ATA_PIO4, ATA_MWDMA2, ATA_UDMA2);
771
772 ata_port_printk(ap, KERN_DEBUG, "nv_mode_filter: 0x%lx&0x%lx->0x%lx, "
773 "BIOS=0x%lx (0x%x) ACPI=0x%lx%s\n",
774 diff --git a/drivers/base/base.h b/drivers/base/base.h
775 index b528145..1e52c12 100644
776 --- a/drivers/base/base.h
777 +++ b/drivers/base/base.h
778 @@ -104,7 +104,7 @@ extern int system_bus_init(void);
779 extern int cpu_dev_init(void);
780
781 extern int bus_add_device(struct device *dev);
782 -extern void bus_attach_device(struct device *dev);
783 +extern void bus_probe_device(struct device *dev);
784 extern void bus_remove_device(struct device *dev);
785
786 extern int bus_add_driver(struct device_driver *drv);
787 diff --git a/drivers/base/bus.c b/drivers/base/bus.c
788 index 4b04a15..973bf2a 100644
789 --- a/drivers/base/bus.c
790 +++ b/drivers/base/bus.c
791 @@ -459,8 +459,9 @@ static inline void remove_deprecated_bus_links(struct device *dev) { }
792 * bus_add_device - add device to bus
793 * @dev: device being added
794 *
795 + * - Add device's bus attributes.
796 + * - Create links to device's bus.
797 * - Add the device to its bus's list of devices.
798 - * - Create link to device's bus.
799 */
800 int bus_add_device(struct device *dev)
801 {
802 @@ -483,6 +484,7 @@ int bus_add_device(struct device *dev)
803 error = make_deprecated_bus_links(dev);
804 if (error)
805 goto out_deprecated;
806 + klist_add_tail(&dev->p->knode_bus, &bus->p->klist_devices);
807 }
808 return 0;
809
810 @@ -498,24 +500,19 @@ out_put:
811 }
812
813 /**
814 - * bus_attach_device - add device to bus
815 - * @dev: device tried to attach to a driver
816 + * bus_probe_device - probe drivers for a new device
817 + * @dev: device to probe
818 *
819 - * - Add device to bus's list of devices.
820 - * - Try to attach to driver.
821 + * - Automatically probe for a driver if the bus allows it.
822 */
823 -void bus_attach_device(struct device *dev)
824 +void bus_probe_device(struct device *dev)
825 {
826 struct bus_type *bus = dev->bus;
827 - int ret = 0;
828 + int ret;
829
830 - if (bus) {
831 - if (bus->p->drivers_autoprobe)
832 - ret = device_attach(dev);
833 + if (bus && bus->p->drivers_autoprobe) {
834 + ret = device_attach(dev);
835 WARN_ON(ret < 0);
836 - if (ret >= 0)
837 - klist_add_tail(&dev->p->knode_bus,
838 - &bus->p->klist_devices);
839 }
840 }
841
842 diff --git a/drivers/base/core.c b/drivers/base/core.c
843 index 7ecb193..c34774d 100644
844 --- a/drivers/base/core.c
845 +++ b/drivers/base/core.c
846 @@ -945,7 +945,7 @@ int device_add(struct device *dev)
847 BUS_NOTIFY_ADD_DEVICE, dev);
848
849 kobject_uevent(&dev->kobj, KOBJ_ADD);
850 - bus_attach_device(dev);
851 + bus_probe_device(dev);
852 if (parent)
853 klist_add_tail(&dev->p->knode_parent,
854 &parent->p->klist_children);
855 diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
856 index dee0f1f..6cf88b6 100644
857 --- a/drivers/char/agp/intel-agp.c
858 +++ b/drivers/char/agp/intel-agp.c
859 @@ -679,23 +679,39 @@ static void intel_i830_setup_flush(void)
860 if (!intel_private.i8xx_page)
861 return;
862
863 - /* make page uncached */
864 - map_page_into_agp(intel_private.i8xx_page);
865 -
866 intel_private.i8xx_flush_page = kmap(intel_private.i8xx_page);
867 if (!intel_private.i8xx_flush_page)
868 intel_i830_fini_flush();
869 }
870
871 +static void
872 +do_wbinvd(void *null)
873 +{
874 + wbinvd();
875 +}
876 +
877 +/* The chipset_flush interface needs to get data that has already been
878 + * flushed out of the CPU all the way out to main memory, because the GPU
879 + * doesn't snoop those buffers.
880 + *
881 + * The 8xx series doesn't have the same lovely interface for flushing the
882 + * chipset write buffers that the later chips do. According to the 865
883 + * specs, it's 64 octwords, or 1KB. So, to get those previous things in
884 + * that buffer out, we just fill 1KB and clflush it out, on the assumption
885 + * that it'll push whatever was in there out. It appears to work.
886 + */
887 static void intel_i830_chipset_flush(struct agp_bridge_data *bridge)
888 {
889 unsigned int *pg = intel_private.i8xx_flush_page;
890 - int i;
891
892 - for (i = 0; i < 256; i += 2)
893 - *(pg + i) = i;
894 + memset(pg, 0, 1024);
895
896 - wmb();
897 + if (cpu_has_clflush) {
898 + clflush_cache_range(pg, 1024);
899 + } else {
900 + if (on_each_cpu(do_wbinvd, NULL, 1) != 0)
901 + printk(KERN_ERR "Timed out waiting for cache flush.\n");
902 + }
903 }
904
905 /* The intel i830 automatically initializes the agp aperture during POST.
906 diff --git a/drivers/char/pty.c b/drivers/char/pty.c
907 index b33d668..53761ce 100644
908 --- a/drivers/char/pty.c
909 +++ b/drivers/char/pty.c
910 @@ -120,8 +120,10 @@ static int pty_write(struct tty_struct *tty, const unsigned char *buf, int c)
911 /* Stuff the data into the input queue of the other end */
912 c = tty_insert_flip_string(to, buf, c);
913 /* And shovel */
914 - tty_flip_buffer_push(to);
915 - tty_wakeup(tty);
916 + if (c) {
917 + tty_flip_buffer_push(to);
918 + tty_wakeup(tty);
919 + }
920 }
921 return c;
922 }
923 diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
924 index a3afa0c..9fc9517 100644
925 --- a/drivers/char/tty_io.c
926 +++ b/drivers/char/tty_io.c
927 @@ -1184,6 +1184,7 @@ int tty_init_termios(struct tty_struct *tty)
928 tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
929 return 0;
930 }
931 +EXPORT_SYMBOL_GPL(tty_init_termios);
932
933 /**
934 * tty_driver_install_tty() - install a tty entry in the driver
935 diff --git a/drivers/char/tty_port.c b/drivers/char/tty_port.c
936 index 9769b11..549bd0f 100644
937 --- a/drivers/char/tty_port.c
938 +++ b/drivers/char/tty_port.c
939 @@ -96,6 +96,14 @@ void tty_port_tty_set(struct tty_port *port, struct tty_struct *tty)
940 }
941 EXPORT_SYMBOL(tty_port_tty_set);
942
943 +static void tty_port_shutdown(struct tty_port *port)
944 +{
945 + if (port->ops->shutdown &&
946 + test_and_clear_bit(ASYNC_INITIALIZED, &port->flags))
947 + port->ops->shutdown(port);
948 +
949 +}
950 +
951 /**
952 * tty_port_hangup - hangup helper
953 * @port: tty port
954 @@ -116,6 +124,7 @@ void tty_port_hangup(struct tty_port *port)
955 port->tty = NULL;
956 spin_unlock_irqrestore(&port->lock, flags);
957 wake_up_interruptible(&port->open_wait);
958 + tty_port_shutdown(port);
959 }
960 EXPORT_SYMBOL(tty_port_hangup);
961
962 @@ -296,15 +305,17 @@ int tty_port_close_start(struct tty_port *port, struct tty_struct *tty, struct f
963
964 if (port->count) {
965 spin_unlock_irqrestore(&port->lock, flags);
966 + if (port->ops->drop)
967 + port->ops->drop(port);
968 return 0;
969 }
970 - port->flags |= ASYNC_CLOSING;
971 + set_bit(ASYNC_CLOSING, &port->flags);
972 tty->closing = 1;
973 spin_unlock_irqrestore(&port->lock, flags);
974 /* Don't block on a stalled port, just pull the chain */
975 if (tty->flow_stopped)
976 tty_driver_flush_buffer(tty);
977 - if (port->flags & ASYNC_INITIALIZED &&
978 + if (test_bit(ASYNCB_INITIALIZED, &port->flags) &&
979 port->closing_wait != ASYNC_CLOSING_WAIT_NONE)
980 tty_wait_until_sent(tty, port->closing_wait);
981 if (port->drain_delay) {
982 @@ -318,6 +329,9 @@ int tty_port_close_start(struct tty_port *port, struct tty_struct *tty, struct f
983 timeout = 2 * HZ;
984 schedule_timeout_interruptible(timeout);
985 }
986 + /* Don't call port->drop for the last reference. Callers will want
987 + to drop the last active reference in ->shutdown() or the tty
988 + shutdown path */
989 return 1;
990 }
991 EXPORT_SYMBOL(tty_port_close_start);
992 @@ -348,3 +362,14 @@ void tty_port_close_end(struct tty_port *port, struct tty_struct *tty)
993 spin_unlock_irqrestore(&port->lock, flags);
994 }
995 EXPORT_SYMBOL(tty_port_close_end);
996 +
997 +void tty_port_close(struct tty_port *port, struct tty_struct *tty,
998 + struct file *filp)
999 +{
1000 + if (tty_port_close_start(port, tty, filp) == 0)
1001 + return;
1002 + tty_port_shutdown(port);
1003 + tty_port_close_end(port, tty);
1004 + tty_port_tty_set(port, NULL);
1005 +}
1006 +EXPORT_SYMBOL(tty_port_close);
1007 diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
1008 index fc4b68a..c078d99 100644
1009 --- a/drivers/gpu/drm/i915/i915_drv.c
1010 +++ b/drivers/gpu/drm/i915/i915_drv.c
1011 @@ -94,8 +94,6 @@ static int i915_resume(struct drm_device *dev)
1012 struct drm_i915_private *dev_priv = dev->dev_private;
1013 int ret = 0;
1014
1015 - pci_set_power_state(dev->pdev, PCI_D0);
1016 - pci_restore_state(dev->pdev);
1017 if (pci_enable_device(dev->pdev))
1018 return -1;
1019 pci_set_master(dev->pdev);
1020 diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
1021 index 80e5ba4..2b7aeee 100644
1022 --- a/drivers/gpu/drm/i915/i915_gem.c
1023 +++ b/drivers/gpu/drm/i915/i915_gem.c
1024 @@ -1151,27 +1151,21 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
1025 mutex_lock(&dev->struct_mutex);
1026 if (!obj_priv->gtt_space) {
1027 ret = i915_gem_object_bind_to_gtt(obj, obj_priv->gtt_alignment);
1028 - if (ret) {
1029 - mutex_unlock(&dev->struct_mutex);
1030 - return VM_FAULT_SIGBUS;
1031 - }
1032 -
1033 - ret = i915_gem_object_set_to_gtt_domain(obj, write);
1034 - if (ret) {
1035 - mutex_unlock(&dev->struct_mutex);
1036 - return VM_FAULT_SIGBUS;
1037 - }
1038 + if (ret)
1039 + goto unlock;
1040
1041 list_add_tail(&obj_priv->list, &dev_priv->mm.inactive_list);
1042 +
1043 + ret = i915_gem_object_set_to_gtt_domain(obj, write);
1044 + if (ret)
1045 + goto unlock;
1046 }
1047
1048 /* Need a new fence register? */
1049 if (obj_priv->tiling_mode != I915_TILING_NONE) {
1050 ret = i915_gem_object_get_fence_reg(obj);
1051 - if (ret) {
1052 - mutex_unlock(&dev->struct_mutex);
1053 - return VM_FAULT_SIGBUS;
1054 - }
1055 + if (ret)
1056 + goto unlock;
1057 }
1058
1059 pfn = ((dev->agp->base + obj_priv->gtt_offset) >> PAGE_SHIFT) +
1060 @@ -1179,18 +1173,18 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
1061
1062 /* Finally, remap it using the new GTT offset */
1063 ret = vm_insert_pfn(vma, (unsigned long)vmf->virtual_address, pfn);
1064 -
1065 +unlock:
1066 mutex_unlock(&dev->struct_mutex);
1067
1068 switch (ret) {
1069 + case 0:
1070 + case -ERESTARTSYS:
1071 + return VM_FAULT_NOPAGE;
1072 case -ENOMEM:
1073 case -EAGAIN:
1074 return VM_FAULT_OOM;
1075 - case -EFAULT:
1076 - case -EINVAL:
1077 - return VM_FAULT_SIGBUS;
1078 default:
1079 - return VM_FAULT_NOPAGE;
1080 + return VM_FAULT_SIGBUS;
1081 }
1082 }
1083
1084 @@ -2506,16 +2500,6 @@ i915_gem_clflush_object(struct drm_gem_object *obj)
1085 if (obj_priv->pages == NULL)
1086 return;
1087
1088 - /* XXX: The 865 in particular appears to be weird in how it handles
1089 - * cache flushing. We haven't figured it out, but the
1090 - * clflush+agp_chipset_flush doesn't appear to successfully get the
1091 - * data visible to the PGU, while wbinvd + agp_chipset_flush does.
1092 - */
1093 - if (IS_I865G(obj->dev)) {
1094 - wbinvd();
1095 - return;
1096 - }
1097 -
1098 drm_clflush_pages(obj_priv->pages, obj->size / PAGE_SIZE);
1099 }
1100
1101 @@ -3007,6 +2991,16 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj,
1102 return -EINVAL;
1103 }
1104
1105 + if (reloc->delta >= target_obj->size) {
1106 + DRM_ERROR("Relocation beyond target object bounds: "
1107 + "obj %p target %d delta %d size %d.\n",
1108 + obj, reloc->target_handle,
1109 + (int) reloc->delta, (int) target_obj->size);
1110 + drm_gem_object_unreference(target_obj);
1111 + i915_gem_object_unpin(obj);
1112 + return -EINVAL;
1113 + }
1114 +
1115 if (reloc->write_domain & I915_GEM_DOMAIN_CPU ||
1116 reloc->read_domains & I915_GEM_DOMAIN_CPU) {
1117 DRM_ERROR("reloc with read/write CPU domains: "
1118 @@ -3837,7 +3831,8 @@ void i915_gem_free_object(struct drm_gem_object *obj)
1119
1120 i915_gem_object_unbind(obj);
1121
1122 - i915_gem_free_mmap_offset(obj);
1123 + if (obj_priv->mmap_offset)
1124 + i915_gem_free_mmap_offset(obj);
1125
1126 kfree(obj_priv->page_cpu_valid);
1127 kfree(obj_priv->bit_17);
1128 diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
1129 index a2d527b..e774a4a 100644
1130 --- a/drivers/gpu/drm/i915/i915_gem_tiling.c
1131 +++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
1132 @@ -234,7 +234,13 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
1133 uint32_t swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
1134 bool need_disable;
1135
1136 - if (!IS_I9XX(dev)) {
1137 + if (IS_IGDNG(dev)) {
1138 + /* On IGDNG whatever DRAM config, GPU always do
1139 + * same swizzling setup.
1140 + */
1141 + swizzle_x = I915_BIT_6_SWIZZLE_9_10;
1142 + swizzle_y = I915_BIT_6_SWIZZLE_9;
1143 + } else if (!IS_I9XX(dev)) {
1144 /* As far as we know, the 865 doesn't have these bit 6
1145 * swizzling issues.
1146 */
1147 @@ -317,13 +323,6 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
1148 }
1149 }
1150
1151 - /* FIXME: check with memory config on IGDNG */
1152 - if (IS_IGDNG(dev)) {
1153 - DRM_ERROR("disable tiling on IGDNG...\n");
1154 - swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
1155 - swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
1156 - }
1157 -
1158 dev_priv->mm.bit_6_swizzle_x = swizzle_x;
1159 dev_priv->mm.bit_6_swizzle_y = swizzle_y;
1160 }
1161 diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
1162 index 2955083..106a1ae 100644
1163 --- a/drivers/gpu/drm/i915/i915_reg.h
1164 +++ b/drivers/gpu/drm/i915/i915_reg.h
1165 @@ -1733,6 +1733,7 @@
1166 #define DISPPLANE_NO_LINE_DOUBLE 0
1167 #define DISPPLANE_STEREO_POLARITY_FIRST 0
1168 #define DISPPLANE_STEREO_POLARITY_SECOND (1<<18)
1169 +#define DISPPLANE_TRICKLE_FEED_DISABLE (1<<14) /* IGDNG */
1170 #define DISPPLANE_TILED (1<<10)
1171 #define DSPAADDR 0x70184
1172 #define DSPASTRIDE 0x70188
1173 @@ -1867,6 +1868,8 @@
1174 #define PF_ENABLE (1<<31)
1175 #define PFA_WIN_SZ 0x68074
1176 #define PFB_WIN_SZ 0x68874
1177 +#define PFA_WIN_POS 0x68070
1178 +#define PFB_WIN_POS 0x68870
1179
1180 /* legacy palette */
1181 #define LGC_PALETTE_A 0x4a000
1182 @@ -1913,6 +1916,9 @@
1183 #define GTIIR 0x44018
1184 #define GTIER 0x4401c
1185
1186 +#define DISP_ARB_CTL 0x45000
1187 +#define DISP_TILE_SURFACE_SWIZZLING (1<<13)
1188 +
1189 /* PCH */
1190
1191 /* south display engine interrupt */
1192 diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
1193 index f806fcc..698a0ed 100644
1194 --- a/drivers/gpu/drm/i915/intel_bios.c
1195 +++ b/drivers/gpu/drm/i915/intel_bios.c
1196 @@ -217,6 +217,9 @@ parse_general_features(struct drm_i915_private *dev_priv,
1197 if (IS_I85X(dev_priv->dev))
1198 dev_priv->lvds_ssc_freq =
1199 general->ssc_freq ? 66 : 48;
1200 + else if (IS_IGDNG(dev_priv->dev))
1201 + dev_priv->lvds_ssc_freq =
1202 + general->ssc_freq ? 100 : 120;
1203 else
1204 dev_priv->lvds_ssc_freq =
1205 general->ssc_freq ? 100 : 96;
1206 diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
1207 index 590f81c..5ae4c1a 100644
1208 --- a/drivers/gpu/drm/i915/intel_crt.c
1209 +++ b/drivers/gpu/drm/i915/intel_crt.c
1210 @@ -151,13 +151,10 @@ static bool intel_igdng_crt_detect_hotplug(struct drm_connector *connector)
1211 {
1212 struct drm_device *dev = connector->dev;
1213 struct drm_i915_private *dev_priv = dev->dev_private;
1214 - u32 adpa, temp;
1215 + u32 adpa;
1216 bool ret;
1217
1218 - temp = adpa = I915_READ(PCH_ADPA);
1219 -
1220 - adpa &= ~ADPA_DAC_ENABLE;
1221 - I915_WRITE(PCH_ADPA, adpa);
1222 + adpa = I915_READ(PCH_ADPA);
1223
1224 adpa &= ~ADPA_CRT_HOTPLUG_MASK;
1225
1226 @@ -184,8 +181,6 @@ static bool intel_igdng_crt_detect_hotplug(struct drm_connector *connector)
1227 else
1228 ret = false;
1229
1230 - /* restore origin register */
1231 - I915_WRITE(PCH_ADPA, temp);
1232 return ret;
1233 }
1234
1235 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
1236 index 748ed50..8b5af29 100644
1237 --- a/drivers/gpu/drm/i915/intel_display.c
1238 +++ b/drivers/gpu/drm/i915/intel_display.c
1239 @@ -818,7 +818,7 @@ intel_igdng_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
1240 refclk, best_clock);
1241
1242 if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
1243 - if ((I915_READ(LVDS) & LVDS_CLKB_POWER_MASK) ==
1244 + if ((I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) ==
1245 LVDS_CLKB_POWER_UP)
1246 clock.p2 = limit->p2.p2_fast;
1247 else
1248 @@ -1008,6 +1008,10 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
1249 dspcntr &= ~DISPPLANE_TILED;
1250 }
1251
1252 + if (IS_IGDNG(dev))
1253 + /* must disable */
1254 + dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE;
1255 +
1256 I915_WRITE(dspcntr_reg, dspcntr);
1257
1258 Start = obj_priv->gtt_offset;
1259 @@ -1154,6 +1158,7 @@ static void igdng_crtc_dpms(struct drm_crtc *crtc, int mode)
1260 int transconf_reg = (pipe == 0) ? TRANSACONF : TRANSBCONF;
1261 int pf_ctl_reg = (pipe == 0) ? PFA_CTL_1 : PFB_CTL_1;
1262 int pf_win_size = (pipe == 0) ? PFA_WIN_SZ : PFB_WIN_SZ;
1263 + int pf_win_pos = (pipe == 0) ? PFA_WIN_POS : PFB_WIN_POS;
1264 int cpu_htot_reg = (pipe == 0) ? HTOTAL_A : HTOTAL_B;
1265 int cpu_hblank_reg = (pipe == 0) ? HBLANK_A : HBLANK_B;
1266 int cpu_hsync_reg = (pipe == 0) ? HSYNC_A : HSYNC_B;
1267 @@ -1205,6 +1210,19 @@ static void igdng_crtc_dpms(struct drm_crtc *crtc, int mode)
1268 }
1269 }
1270
1271 + /* Enable panel fitting for LVDS */
1272 + if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
1273 + temp = I915_READ(pf_ctl_reg);
1274 + I915_WRITE(pf_ctl_reg, temp | PF_ENABLE);
1275 +
1276 + /* currently full aspect */
1277 + I915_WRITE(pf_win_pos, 0);
1278 +
1279 + I915_WRITE(pf_win_size,
1280 + (dev_priv->panel_fixed_mode->hdisplay << 16) |
1281 + (dev_priv->panel_fixed_mode->vdisplay));
1282 + }
1283 +
1284 /* Enable CPU pipe */
1285 temp = I915_READ(pipeconf_reg);
1286 if ((temp & PIPEACONF_ENABLE) == 0) {
1287 @@ -1858,7 +1876,14 @@ static unsigned long intel_calculate_wm(unsigned long clock_in_khz,
1288 {
1289 long entries_required, wm_size;
1290
1291 - entries_required = (clock_in_khz * pixel_size * latency_ns) / 1000000;
1292 + /*
1293 + * Note: we need to make sure we don't overflow for various clock &
1294 + * latency values.
1295 + * clocks go from a few thousand to several hundred thousand.
1296 + * latency is usually a few thousand
1297 + */
1298 + entries_required = ((clock_in_khz / 1000) * pixel_size * latency_ns) /
1299 + 1000;
1300 entries_required /= wm->cacheline_size;
1301
1302 DRM_DEBUG("FIFO entries required for mode: %d\n", entries_required);
1303 @@ -2616,6 +2641,12 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
1304
1305 intel_wait_for_vblank(dev);
1306
1307 + if (IS_IGDNG(dev)) {
1308 + /* enable address swizzle for tiling buffer */
1309 + temp = I915_READ(DISP_ARB_CTL);
1310 + I915_WRITE(DISP_ARB_CTL, temp | DISP_TILE_SURFACE_SWIZZLING);
1311 + }
1312 +
1313 I915_WRITE(dspcntr_reg, dspcntr);
1314
1315 /* Flush the plane changes */
1316 diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
1317 index 8df02ef..b7d091b 100644
1318 --- a/drivers/gpu/drm/i915/intel_lvds.c
1319 +++ b/drivers/gpu/drm/i915/intel_lvds.c
1320 @@ -305,6 +305,10 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
1321 goto out;
1322 }
1323
1324 + /* full screen scale for now */
1325 + if (IS_IGDNG(dev))
1326 + goto out;
1327 +
1328 /* 965+ wants fuzzy fitting */
1329 if (IS_I965G(dev))
1330 pfit_control |= (intel_crtc->pipe << PFIT_PIPE_SHIFT) |
1331 @@ -332,8 +336,10 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
1332 * to register description and PRM.
1333 * Change the value here to see the borders for debugging
1334 */
1335 - I915_WRITE(BCLRPAT_A, 0);
1336 - I915_WRITE(BCLRPAT_B, 0);
1337 + if (!IS_IGDNG(dev)) {
1338 + I915_WRITE(BCLRPAT_A, 0);
1339 + I915_WRITE(BCLRPAT_B, 0);
1340 + }
1341
1342 switch (lvds_priv->fitting_mode) {
1343 case DRM_MODE_SCALE_NO_SCALE:
1344 @@ -582,7 +588,6 @@ static void intel_lvds_mode_set(struct drm_encoder *encoder,
1345 * settings.
1346 */
1347
1348 - /* No panel fitting yet, fixme */
1349 if (IS_IGDNG(dev))
1350 return;
1351
1352 diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
1353 index d3b74ba..66dc1a5 100644
1354 --- a/drivers/gpu/drm/i915/intel_sdvo.c
1355 +++ b/drivers/gpu/drm/i915/intel_sdvo.c
1356 @@ -114,6 +114,9 @@ struct intel_sdvo_priv {
1357 /* DDC bus used by this SDVO output */
1358 uint8_t ddc_bus;
1359
1360 + /* Mac mini hack -- use the same DDC as the analog connector */
1361 + struct i2c_adapter *analog_ddc_bus;
1362 +
1363 int save_sdvo_mult;
1364 u16 save_active_outputs;
1365 struct intel_sdvo_dtd save_input_dtd_1, save_input_dtd_2;
1366 @@ -1478,6 +1481,36 @@ intel_sdvo_multifunc_encoder(struct intel_output *intel_output)
1367 return (caps > 1);
1368 }
1369
1370 +static struct drm_connector *
1371 +intel_find_analog_connector(struct drm_device *dev)
1372 +{
1373 + struct drm_connector *connector;
1374 + struct intel_output *intel_output;
1375 +
1376 + list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1377 + intel_output = to_intel_output(connector);
1378 + if (intel_output->type == INTEL_OUTPUT_ANALOG)
1379 + return connector;
1380 + }
1381 + return NULL;
1382 +}
1383 +
1384 +static int
1385 +intel_analog_is_connected(struct drm_device *dev)
1386 +{
1387 + struct drm_connector *analog_connector;
1388 + analog_connector = intel_find_analog_connector(dev);
1389 +
1390 + if (!analog_connector)
1391 + return false;
1392 +
1393 + if (analog_connector->funcs->detect(analog_connector) ==
1394 + connector_status_disconnected)
1395 + return false;
1396 +
1397 + return true;
1398 +}
1399 +
1400 enum drm_connector_status
1401 intel_sdvo_hdmi_sink_detect(struct drm_connector *connector, u16 response)
1402 {
1403 @@ -1488,6 +1521,15 @@ intel_sdvo_hdmi_sink_detect(struct drm_connector *connector, u16 response)
1404
1405 edid = drm_get_edid(&intel_output->base,
1406 intel_output->ddc_bus);
1407 +
1408 + /* when there is no edid and no monitor is connected with VGA
1409 + * port, try to use the CRT ddc to read the EDID for DVI-connector
1410 + */
1411 + if (edid == NULL &&
1412 + sdvo_priv->analog_ddc_bus &&
1413 + !intel_analog_is_connected(intel_output->base.dev))
1414 + edid = drm_get_edid(&intel_output->base,
1415 + sdvo_priv->analog_ddc_bus);
1416 if (edid != NULL) {
1417 /* Don't report the output as connected if it's a DVI-I
1418 * connector with a non-digital EDID coming out.
1419 @@ -1540,31 +1582,32 @@ static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connect
1420 static void intel_sdvo_get_ddc_modes(struct drm_connector *connector)
1421 {
1422 struct intel_output *intel_output = to_intel_output(connector);
1423 + struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;
1424 + int num_modes;
1425
1426 /* set the bus switch and get the modes */
1427 - intel_ddc_get_modes(intel_output);
1428 + num_modes = intel_ddc_get_modes(intel_output);
1429
1430 -#if 0
1431 - struct drm_device *dev = encoder->dev;
1432 - struct drm_i915_private *dev_priv = dev->dev_private;
1433 - /* Mac mini hack. On this device, I get DDC through the analog, which
1434 - * load-detects as disconnected. I fail to DDC through the SDVO DDC,
1435 - * but it does load-detect as connected. So, just steal the DDC bits
1436 - * from analog when we fail at finding it the right way.
1437 + /*
1438 + * Mac mini hack. On this device, the DVI-I connector shares one DDC
1439 + * link between analog and digital outputs. So, if the regular SDVO
1440 + * DDC fails, check to see if the analog output is disconnected, in
1441 + * which case we'll look there for the digital DDC data.
1442 */
1443 - crt = xf86_config->output[0];
1444 - intel_output = crt->driver_private;
1445 - if (intel_output->type == I830_OUTPUT_ANALOG &&
1446 - crt->funcs->detect(crt) == XF86OutputStatusDisconnected) {
1447 - I830I2CInit(pScrn, &intel_output->pDDCBus, GPIOA, "CRTDDC_A");
1448 - edid_mon = xf86OutputGetEDID(crt, intel_output->pDDCBus);
1449 - xf86DestroyI2CBusRec(intel_output->pDDCBus, true, true);
1450 - }
1451 - if (edid_mon) {
1452 - xf86OutputSetEDID(output, edid_mon);
1453 - modes = xf86OutputGetEDIDModes(output);
1454 + if (num_modes == 0 &&
1455 + sdvo_priv->analog_ddc_bus &&
1456 + !intel_analog_is_connected(intel_output->base.dev)) {
1457 + struct i2c_adapter *digital_ddc_bus;
1458 +
1459 + /* Switch to the analog ddc bus and try that
1460 + */
1461 + digital_ddc_bus = intel_output->ddc_bus;
1462 + intel_output->ddc_bus = sdvo_priv->analog_ddc_bus;
1463 +
1464 + (void) intel_ddc_get_modes(intel_output);
1465 +
1466 + intel_output->ddc_bus = digital_ddc_bus;
1467 }
1468 -#endif
1469 }
1470
1471 /**
1472 @@ -1748,6 +1791,8 @@ static void intel_sdvo_destroy(struct drm_connector *connector)
1473 intel_i2c_destroy(intel_output->i2c_bus);
1474 if (intel_output->ddc_bus)
1475 intel_i2c_destroy(intel_output->ddc_bus);
1476 + if (sdvo_priv->analog_ddc_bus)
1477 + intel_i2c_destroy(sdvo_priv->analog_ddc_bus);
1478
1479 if (sdvo_priv->sdvo_lvds_fixed_mode != NULL)
1480 drm_mode_destroy(connector->dev,
1481 @@ -2074,10 +2119,15 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device)
1482 }
1483
1484 /* setup the DDC bus. */
1485 - if (output_device == SDVOB)
1486 + if (output_device == SDVOB) {
1487 intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "SDVOB DDC BUS");
1488 - else
1489 + sdvo_priv->analog_ddc_bus = intel_i2c_create(dev, GPIOA,
1490 + "SDVOB/VGA DDC BUS");
1491 + } else {
1492 intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "SDVOC DDC BUS");
1493 + sdvo_priv->analog_ddc_bus = intel_i2c_create(dev, GPIOA,
1494 + "SDVOC/VGA DDC BUS");
1495 + }
1496
1497 if (intel_output->ddc_bus == NULL)
1498 goto err_i2c;
1499 @@ -2143,6 +2193,8 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device)
1500 return true;
1501
1502 err_i2c:
1503 + if (sdvo_priv->analog_ddc_bus != NULL)
1504 + intel_i2c_destroy(sdvo_priv->analog_ddc_bus);
1505 if (intel_output->ddc_bus != NULL)
1506 intel_i2c_destroy(intel_output->ddc_bus);
1507 if (intel_output->i2c_bus != NULL)
1508 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
1509 index 5eb10c2..047844d 100644
1510 --- a/drivers/hid/hid-core.c
1511 +++ b/drivers/hid/hid-core.c
1512 @@ -1319,7 +1319,6 @@ static const struct hid_device_id hid_blacklist[] = {
1513 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
1514 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
1515
1516 - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, 0x030c) },
1517 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
1518 { }
1519 };
1520 diff --git a/drivers/isdn/gigaset/interface.c b/drivers/isdn/gigaset/interface.c
1521 index 8ff7e35..f33ac27 100644
1522 --- a/drivers/isdn/gigaset/interface.c
1523 +++ b/drivers/isdn/gigaset/interface.c
1524 @@ -408,33 +408,28 @@ static int if_write_room(struct tty_struct *tty)
1525 return retval;
1526 }
1527
1528 -/* FIXME: This function does not have error returns */
1529 -
1530 static int if_chars_in_buffer(struct tty_struct *tty)
1531 {
1532 struct cardstate *cs;
1533 - int retval = -ENODEV;
1534 + int retval = 0;
1535
1536 cs = (struct cardstate *) tty->driver_data;
1537 if (!cs) {
1538 pr_err("%s: no cardstate\n", __func__);
1539 - return -ENODEV;
1540 + return 0;
1541 }
1542
1543 gig_dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __func__);
1544
1545 - if (mutex_lock_interruptible(&cs->mutex))
1546 - return -ERESTARTSYS; // FIXME -EINTR?
1547 + mutex_lock(&cs->mutex);
1548
1549 - if (!cs->connected) {
1550 + if (!cs->connected)
1551 gig_dbg(DEBUG_IF, "not connected");
1552 - retval = -ENODEV;
1553 - } else if (!cs->open_count)
1554 + else if (!cs->open_count)
1555 dev_warn(cs->dev, "%s: device not opened\n", __func__);
1556 - else if (cs->mstate != MS_LOCKED) {
1557 + else if (cs->mstate != MS_LOCKED)
1558 dev_warn(cs->dev, "can't write to unlocked device\n");
1559 - retval = -EBUSY;
1560 - } else
1561 + else
1562 retval = cs->ops->chars_in_buffer(cs);
1563
1564 mutex_unlock(&cs->mutex);
1565 diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
1566 index 1c2e544..ffe9306 100644
1567 --- a/drivers/media/video/em28xx/em28xx-cards.c
1568 +++ b/drivers/media/video/em28xx/em28xx-cards.c
1569 @@ -2170,8 +2170,6 @@ static int em28xx_hint_board(struct em28xx *dev)
1570 /* ----------------------------------------------------------------------- */
1571 void em28xx_register_i2c_ir(struct em28xx *dev)
1572 {
1573 - struct i2c_board_info info;
1574 - struct IR_i2c_init_data init_data;
1575 const unsigned short addr_list[] = {
1576 0x30, 0x47, I2C_CLIENT_END
1577 };
1578 @@ -2179,9 +2177,9 @@ void em28xx_register_i2c_ir(struct em28xx *dev)
1579 if (disable_ir)
1580 return;
1581
1582 - memset(&info, 0, sizeof(struct i2c_board_info));
1583 - memset(&init_data, 0, sizeof(struct IR_i2c_init_data));
1584 - strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
1585 + memset(&dev->info, 0, sizeof(&dev->info));
1586 + memset(&dev->init_data, 0, sizeof(dev->init_data));
1587 + strlcpy(dev->info.type, "ir_video", I2C_NAME_SIZE);
1588
1589 /* detect & configure */
1590 switch (dev->model) {
1591 @@ -2191,19 +2189,19 @@ void em28xx_register_i2c_ir(struct em28xx *dev)
1592 break;
1593 case (EM2800_BOARD_TERRATEC_CINERGY_200):
1594 case (EM2820_BOARD_TERRATEC_CINERGY_250):
1595 - init_data.ir_codes = ir_codes_em_terratec;
1596 - init_data.get_key = em28xx_get_key_terratec;
1597 - init_data.name = "i2c IR (EM28XX Terratec)";
1598 + dev->init_data.ir_codes = ir_codes_em_terratec;
1599 + dev->init_data.get_key = em28xx_get_key_terratec;
1600 + dev->init_data.name = "i2c IR (EM28XX Terratec)";
1601 break;
1602 case (EM2820_BOARD_PINNACLE_USB_2):
1603 - init_data.ir_codes = ir_codes_pinnacle_grey;
1604 - init_data.get_key = em28xx_get_key_pinnacle_usb_grey;
1605 - init_data.name = "i2c IR (EM28XX Pinnacle PCTV)";
1606 + dev->init_data.ir_codes = ir_codes_pinnacle_grey;
1607 + dev->init_data.get_key = em28xx_get_key_pinnacle_usb_grey;
1608 + dev->init_data.name = "i2c IR (EM28XX Pinnacle PCTV)";
1609 break;
1610 case (EM2820_BOARD_HAUPPAUGE_WINTV_USB_2):
1611 - init_data.ir_codes = ir_codes_hauppauge_new;
1612 - init_data.get_key = em28xx_get_key_em_haup;
1613 - init_data.name = "i2c IR (EM2840 Hauppauge)";
1614 + dev->init_data.ir_codes = ir_codes_hauppauge_new;
1615 + dev->init_data.get_key = em28xx_get_key_em_haup;
1616 + dev->init_data.name = "i2c IR (EM2840 Hauppauge)";
1617 break;
1618 case (EM2820_BOARD_MSI_VOX_USB_2):
1619 break;
1620 @@ -2215,9 +2213,9 @@ void em28xx_register_i2c_ir(struct em28xx *dev)
1621 break;
1622 }
1623
1624 - if (init_data.name)
1625 - info.platform_data = &init_data;
1626 - i2c_new_probed_device(&dev->i2c_adap, &info, addr_list);
1627 + if (dev->init_data.name)
1628 + dev->info.platform_data = &dev->init_data;
1629 + i2c_new_probed_device(&dev->i2c_adap, &dev->info, addr_list);
1630 }
1631
1632 void em28xx_card_setup(struct em28xx *dev)
1633 diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
1634 index a2add61..cb2a70a 100644
1635 --- a/drivers/media/video/em28xx/em28xx.h
1636 +++ b/drivers/media/video/em28xx/em28xx.h
1637 @@ -595,6 +595,10 @@ struct em28xx {
1638 struct delayed_work sbutton_query_work;
1639
1640 struct em28xx_dvb *dvb;
1641 +
1642 + /* I2C keyboard data */
1643 + struct i2c_board_info info;
1644 + struct IR_i2c_init_data init_data;
1645 };
1646
1647 struct em28xx_ops {
1648 diff --git a/drivers/media/video/saa7134/saa7134-input.c b/drivers/media/video/saa7134/saa7134-input.c
1649 index 6e219c2..69e48ce 100644
1650 --- a/drivers/media/video/saa7134/saa7134-input.c
1651 +++ b/drivers/media/video/saa7134/saa7134-input.c
1652 @@ -684,8 +684,6 @@ void saa7134_input_fini(struct saa7134_dev *dev)
1653
1654 void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
1655 {
1656 - struct i2c_board_info info;
1657 - struct IR_i2c_init_data init_data;
1658 const unsigned short addr_list[] = {
1659 0x7a, 0x47, 0x71, 0x2d,
1660 I2C_CLIENT_END
1661 @@ -705,32 +703,32 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
1662 return;
1663 }
1664
1665 - memset(&info, 0, sizeof(struct i2c_board_info));
1666 - memset(&init_data, 0, sizeof(struct IR_i2c_init_data));
1667 - strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
1668 + memset(&dev->info, 0, sizeof(dev->info));
1669 + memset(&dev->init_data, 0, sizeof(dev->init_data));
1670 + strlcpy(dev->info.type, "ir_video", I2C_NAME_SIZE);
1671
1672 switch (dev->board) {
1673 case SAA7134_BOARD_PINNACLE_PCTV_110i:
1674 case SAA7134_BOARD_PINNACLE_PCTV_310i:
1675 - init_data.name = "Pinnacle PCTV";
1676 + dev->init_data.name = "Pinnacle PCTV";
1677 if (pinnacle_remote == 0) {
1678 - init_data.get_key = get_key_pinnacle_color;
1679 - init_data.ir_codes = ir_codes_pinnacle_color;
1680 + dev->init_data.get_key = get_key_pinnacle_color;
1681 + dev->init_data.ir_codes = ir_codes_pinnacle_color;
1682 } else {
1683 - init_data.get_key = get_key_pinnacle_grey;
1684 - init_data.ir_codes = ir_codes_pinnacle_grey;
1685 + dev->init_data.get_key = get_key_pinnacle_grey;
1686 + dev->init_data.ir_codes = ir_codes_pinnacle_grey;
1687 }
1688 break;
1689 case SAA7134_BOARD_UPMOST_PURPLE_TV:
1690 - init_data.name = "Purple TV";
1691 - init_data.get_key = get_key_purpletv;
1692 - init_data.ir_codes = ir_codes_purpletv;
1693 + dev->init_data.name = "Purple TV";
1694 + dev->init_data.get_key = get_key_purpletv;
1695 + dev->init_data.ir_codes = ir_codes_purpletv;
1696 break;
1697 case SAA7134_BOARD_MSI_TVATANYWHERE_PLUS:
1698 - init_data.name = "MSI TV@nywhere Plus";
1699 - init_data.get_key = get_key_msi_tvanywhere_plus;
1700 - init_data.ir_codes = ir_codes_msi_tvanywhere_plus;
1701 - info.addr = 0x30;
1702 + dev->init_data.name = "MSI TV@nywhere Plus";
1703 + dev->init_data.get_key = get_key_msi_tvanywhere_plus;
1704 + dev->init_data.ir_codes = ir_codes_msi_tvanywhere_plus;
1705 + dev->info.addr = 0x30;
1706 /* MSI TV@nywhere Plus controller doesn't seem to
1707 respond to probes unless we read something from
1708 an existing device. Weird...
1709 @@ -741,9 +739,9 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
1710 (1 == rc) ? "yes" : "no");
1711 break;
1712 case SAA7134_BOARD_HAUPPAUGE_HVR1110:
1713 - init_data.name = "HVR 1110";
1714 - init_data.get_key = get_key_hvr1110;
1715 - init_data.ir_codes = ir_codes_hauppauge_new;
1716 + dev->init_data.name = "HVR 1110";
1717 + dev->init_data.get_key = get_key_hvr1110;
1718 + dev->init_data.ir_codes = ir_codes_hauppauge_new;
1719 break;
1720 case SAA7134_BOARD_BEHOLD_607FM_MK3:
1721 case SAA7134_BOARD_BEHOLD_607FM_MK5:
1722 @@ -757,26 +755,26 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
1723 case SAA7134_BOARD_BEHOLD_M63:
1724 case SAA7134_BOARD_BEHOLD_M6_EXTRA:
1725 case SAA7134_BOARD_BEHOLD_H6:
1726 - init_data.name = "BeholdTV";
1727 - init_data.get_key = get_key_beholdm6xx;
1728 - init_data.ir_codes = ir_codes_behold;
1729 + dev->init_data.name = "BeholdTV";
1730 + dev->init_data.get_key = get_key_beholdm6xx;
1731 + dev->init_data.ir_codes = ir_codes_behold;
1732 break;
1733 case SAA7134_BOARD_AVERMEDIA_CARDBUS_501:
1734 case SAA7134_BOARD_AVERMEDIA_CARDBUS_506:
1735 - info.addr = 0x40;
1736 + dev->info.addr = 0x40;
1737 break;
1738 }
1739
1740 - if (init_data.name)
1741 - info.platform_data = &init_data;
1742 + if (dev->init_data.name)
1743 + dev->info.platform_data = &dev->init_data;
1744 /* No need to probe if address is known */
1745 - if (info.addr) {
1746 - i2c_new_device(&dev->i2c_adap, &info);
1747 + if (dev->info.addr) {
1748 + i2c_new_device(&dev->i2c_adap, &dev->info);
1749 return;
1750 }
1751
1752 /* Address not known, fallback to probing */
1753 - i2c_new_probed_device(&dev->i2c_adap, &info, addr_list);
1754 + i2c_new_probed_device(&dev->i2c_adap, &dev->info, addr_list);
1755 }
1756
1757 static int saa7134_rc5_irq(struct saa7134_dev *dev)
1758 diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h
1759 index fb564f1..4d85f5c 100644
1760 --- a/drivers/media/video/saa7134/saa7134.h
1761 +++ b/drivers/media/video/saa7134/saa7134.h
1762 @@ -584,6 +584,10 @@ struct saa7134_dev {
1763 int nosignal;
1764 unsigned int insuspend;
1765
1766 + /* I2C keyboard data */
1767 + struct i2c_board_info info;
1768 + struct IR_i2c_init_data init_data;
1769 +
1770 /* SAA7134_MPEG_* */
1771 struct saa7134_ts ts;
1772 struct saa7134_dmaqueue ts_q;
1773 diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
1774 index 5d0ba4f..9ad7bb4 100644
1775 --- a/drivers/message/fusion/mptbase.c
1776 +++ b/drivers/message/fusion/mptbase.c
1777 @@ -1015,9 +1015,9 @@ mpt_add_sge_64bit(void *pAddr, u32 flagslength, dma_addr_t dma_addr)
1778 {
1779 SGESimple64_t *pSge = (SGESimple64_t *) pAddr;
1780 pSge->Address.Low = cpu_to_le32
1781 - (lower_32_bits((unsigned long)(dma_addr)));
1782 + (lower_32_bits(dma_addr));
1783 pSge->Address.High = cpu_to_le32
1784 - (upper_32_bits((unsigned long)dma_addr));
1785 + (upper_32_bits(dma_addr));
1786 pSge->FlagsLength = cpu_to_le32
1787 ((flagslength | MPT_SGE_FLAGS_64_BIT_ADDRESSING));
1788 }
1789 @@ -1038,8 +1038,8 @@ mpt_add_sge_64bit_1078(void *pAddr, u32 flagslength, dma_addr_t dma_addr)
1790 u32 tmp;
1791
1792 pSge->Address.Low = cpu_to_le32
1793 - (lower_32_bits((unsigned long)(dma_addr)));
1794 - tmp = (u32)(upper_32_bits((unsigned long)dma_addr));
1795 + (lower_32_bits(dma_addr));
1796 + tmp = (u32)(upper_32_bits(dma_addr));
1797
1798 /*
1799 * 1078 errata workaround for the 36GB limitation
1800 @@ -1101,7 +1101,7 @@ mpt_add_chain_64bit(void *pAddr, u8 next, u16 length, dma_addr_t dma_addr)
1801 pChain->NextChainOffset = next;
1802
1803 pChain->Address.Low = cpu_to_le32(tmp);
1804 - tmp = (u32)(upper_32_bits((unsigned long)dma_addr));
1805 + tmp = (u32)(upper_32_bits(dma_addr));
1806 pChain->Address.High = cpu_to_le32(tmp);
1807 }
1808
1809 diff --git a/drivers/mfd/ab3100-core.c b/drivers/mfd/ab3100-core.c
1810 index 13e7d7b..dd8b6b3 100644
1811 --- a/drivers/mfd/ab3100-core.c
1812 +++ b/drivers/mfd/ab3100-core.c
1813 @@ -643,7 +643,7 @@ struct ab3100_init_setting {
1814 u8 setting;
1815 };
1816
1817 -static const struct ab3100_init_setting __initdata
1818 +static const struct ab3100_init_setting __initconst
1819 ab3100_init_settings[] = {
1820 {
1821 .abreg = AB3100_MCA,
1822 diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
1823 index 06084db..72f2df1 100644
1824 --- a/drivers/mmc/core/mmc.c
1825 +++ b/drivers/mmc/core/mmc.c
1826 @@ -180,11 +180,11 @@ static int mmc_read_ext_csd(struct mmc_card *card)
1827
1828 err = mmc_send_ext_csd(card, ext_csd);
1829 if (err) {
1830 - /*
1831 - * We all hosts that cannot perform the command
1832 - * to fail more gracefully
1833 - */
1834 - if (err != -EINVAL)
1835 + /* If the host or the card can't do the switch,
1836 + * fail more gracefully. */
1837 + if ((err != -EINVAL)
1838 + && (err != -ENOSYS)
1839 + && (err != -EFAULT))
1840 goto out;
1841
1842 /*
1843 diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
1844 index cd81c39..65c32bf 100644
1845 --- a/drivers/mmc/core/sd.c
1846 +++ b/drivers/mmc/core/sd.c
1847 @@ -210,11 +210,11 @@ static int mmc_read_switch(struct mmc_card *card)
1848
1849 err = mmc_sd_switch(card, 0, 0, 1, status);
1850 if (err) {
1851 - /*
1852 - * We all hosts that cannot perform the command
1853 - * to fail more gracefully
1854 - */
1855 - if (err != -EINVAL)
1856 + /* If the host or the card can't do the switch,
1857 + * fail more gracefully. */
1858 + if ((err != -EINVAL)
1859 + && (err != -ENOSYS)
1860 + && (err != -EFAULT))
1861 goto out;
1862
1863 printk(KERN_WARNING "%s: problem reading switch "
1864 diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
1865 index 61ea833..94bb61e 100644
1866 --- a/drivers/mtd/chips/cfi_cmdset_0002.c
1867 +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
1868 @@ -282,16 +282,6 @@ static void fixup_s29gl032n_sectors(struct mtd_info *mtd, void *param)
1869 }
1870 }
1871
1872 -static void fixup_M29W128G_write_buffer(struct mtd_info *mtd, void *param)
1873 -{
1874 - struct map_info *map = mtd->priv;
1875 - struct cfi_private *cfi = map->fldrv_priv;
1876 - if (cfi->cfiq->BufWriteTimeoutTyp) {
1877 - pr_warning("Don't use write buffer on ST flash M29W128G\n");
1878 - cfi->cfiq->BufWriteTimeoutTyp = 0;
1879 - }
1880 -}
1881 -
1882 static struct cfi_fixup cfi_fixup_table[] = {
1883 { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL },
1884 #ifdef AMD_BOOTLOC_BUG
1885 @@ -308,7 +298,6 @@ static struct cfi_fixup cfi_fixup_table[] = {
1886 { CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors, NULL, },
1887 { CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors, NULL, },
1888 { CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors, NULL, },
1889 - { CFI_MFR_ST, 0x227E, fixup_M29W128G_write_buffer, NULL, },
1890 #if !FORCE_WORD_WRITE
1891 { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, },
1892 #endif
1893 diff --git a/drivers/mtd/chips/cfi_util.c b/drivers/mtd/chips/cfi_util.c
1894 index 34d40e2..c5a84fd 100644
1895 --- a/drivers/mtd/chips/cfi_util.c
1896 +++ b/drivers/mtd/chips/cfi_util.c
1897 @@ -81,6 +81,10 @@ void __xipram cfi_qry_mode_off(uint32_t base, struct map_info *map,
1898 {
1899 cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
1900 cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL);
1901 + /* M29W128G flashes require an additional reset command
1902 + when exit qry mode */
1903 + if ((cfi->mfr == CFI_MFR_ST) && (cfi->id == 0x227E || cfi->id == 0x7E))
1904 + cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
1905 }
1906 EXPORT_SYMBOL_GPL(cfi_qry_mode_off);
1907
1908 diff --git a/drivers/mtd/nand/ndfc.c b/drivers/mtd/nand/ndfc.c
1909 index 89bf85a..40b5658 100644
1910 --- a/drivers/mtd/nand/ndfc.c
1911 +++ b/drivers/mtd/nand/ndfc.c
1912 @@ -102,8 +102,8 @@ static int ndfc_calculate_ecc(struct mtd_info *mtd,
1913 wmb();
1914 ecc = in_be32(ndfc->ndfcbase + NDFC_ECC);
1915 /* The NDFC uses Smart Media (SMC) bytes order */
1916 - ecc_code[0] = p[2];
1917 - ecc_code[1] = p[1];
1918 + ecc_code[0] = p[1];
1919 + ecc_code[1] = p[2];
1920 ecc_code[2] = p[3];
1921
1922 return 0;
1923 diff --git a/drivers/mtd/ofpart.c b/drivers/mtd/ofpart.c
1924 index 3e164f0..62d6a78 100644
1925 --- a/drivers/mtd/ofpart.c
1926 +++ b/drivers/mtd/ofpart.c
1927 @@ -46,21 +46,12 @@ int __devinit of_mtd_parse_partitions(struct device *dev,
1928 const u32 *reg;
1929 int len;
1930
1931 - /* check if this is a partition node */
1932 - partname = of_get_property(pp, "name", &len);
1933 - if (strcmp(partname, "partition") != 0) {
1934 + reg = of_get_property(pp, "reg", &len);
1935 + if (!reg) {
1936 nr_parts--;
1937 continue;
1938 }
1939
1940 - reg = of_get_property(pp, "reg", &len);
1941 - if (!reg || (len != 2 * sizeof(u32))) {
1942 - of_node_put(pp);
1943 - dev_err(dev, "Invalid 'reg' on %s\n", node->full_name);
1944 - kfree(*pparts);
1945 - *pparts = NULL;
1946 - return -EINVAL;
1947 - }
1948 (*pparts)[i].offset = reg[0];
1949 (*pparts)[i].size = reg[1];
1950
1951 @@ -75,6 +66,14 @@ int __devinit of_mtd_parse_partitions(struct device *dev,
1952 i++;
1953 }
1954
1955 + if (!i) {
1956 + of_node_put(pp);
1957 + dev_err(dev, "No valid partition found on %s\n", node->full_name);
1958 + kfree(*pparts);
1959 + *pparts = NULL;
1960 + return -EINVAL;
1961 + }
1962 +
1963 return nr_parts;
1964 }
1965 EXPORT_SYMBOL(of_mtd_parse_partitions);
1966 diff --git a/drivers/net/can/vcan.c b/drivers/net/can/vcan.c
1967 index a10c1d7..460bb88 100644
1968 --- a/drivers/net/can/vcan.c
1969 +++ b/drivers/net/can/vcan.c
1970 @@ -80,7 +80,7 @@ static void vcan_rx(struct sk_buff *skb, struct net_device *dev)
1971 skb->dev = dev;
1972 skb->ip_summed = CHECKSUM_UNNECESSARY;
1973
1974 - netif_rx(skb);
1975 + netif_rx_ni(skb);
1976 }
1977
1978 static int vcan_tx(struct sk_buff *skb, struct net_device *dev)
1979 diff --git a/drivers/net/usb/kaweth.c b/drivers/net/usb/kaweth.c
1980 index 1f9ec29..65a43c8 100644
1981 --- a/drivers/net/usb/kaweth.c
1982 +++ b/drivers/net/usb/kaweth.c
1983 @@ -263,6 +263,7 @@ static int kaweth_control(struct kaweth_device *kaweth,
1984 int timeout)
1985 {
1986 struct usb_ctrlrequest *dr;
1987 + int retval;
1988
1989 dbg("kaweth_control()");
1990
1991 @@ -278,18 +279,21 @@ static int kaweth_control(struct kaweth_device *kaweth,
1992 return -ENOMEM;
1993 }
1994
1995 - dr->bRequestType= requesttype;
1996 + dr->bRequestType = requesttype;
1997 dr->bRequest = request;
1998 dr->wValue = cpu_to_le16(value);
1999 dr->wIndex = cpu_to_le16(index);
2000 dr->wLength = cpu_to_le16(size);
2001
2002 - return kaweth_internal_control_msg(kaweth->dev,
2003 - pipe,
2004 - dr,
2005 - data,
2006 - size,
2007 - timeout);
2008 + retval = kaweth_internal_control_msg(kaweth->dev,
2009 + pipe,
2010 + dr,
2011 + data,
2012 + size,
2013 + timeout);
2014 +
2015 + kfree(dr);
2016 + return retval;
2017 }
2018
2019 /****************************************************************
2020 diff --git a/drivers/net/wireless/ath/ar9170/usb.c b/drivers/net/wireless/ath/ar9170/usb.c
2021 index 007eb85..1084ca6 100644
2022 --- a/drivers/net/wireless/ath/ar9170/usb.c
2023 +++ b/drivers/net/wireless/ath/ar9170/usb.c
2024 @@ -64,6 +64,8 @@ static struct usb_device_id ar9170_usb_ids[] = {
2025 { USB_DEVICE(0x0cf3, 0x9170) },
2026 /* Atheros TG121N */
2027 { USB_DEVICE(0x0cf3, 0x1001) },
2028 + /* TP-Link TL-WN821N v2 */
2029 + { USB_DEVICE(0x0cf3, 0x1002) },
2030 /* Cace Airpcap NX */
2031 { USB_DEVICE(0xcace, 0x0300) },
2032 /* D-Link DWA 160A */
2033 diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h
2034 index 6358233..778baf7 100644
2035 --- a/drivers/net/wireless/ath/ath5k/ath5k.h
2036 +++ b/drivers/net/wireless/ath/ath5k/ath5k.h
2037 @@ -1164,6 +1164,7 @@ extern void ath5k_unregister_leds(struct ath5k_softc *sc);
2038
2039 /* Reset Functions */
2040 extern int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int flags, bool initial);
2041 +extern int ath5k_hw_on_hold(struct ath5k_hw *ah);
2042 extern int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode, struct ieee80211_channel *channel, bool change_channel);
2043 /* Power management functions */
2044 extern int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode, bool set_chip, u16 sleep_duration);
2045 diff --git a/drivers/net/wireless/ath/ath5k/attach.c b/drivers/net/wireless/ath/ath5k/attach.c
2046 index c41ef58..605b8f6 100644
2047 --- a/drivers/net/wireless/ath/ath5k/attach.c
2048 +++ b/drivers/net/wireless/ath/ath5k/attach.c
2049 @@ -145,7 +145,7 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version)
2050 goto err_free;
2051
2052 /* Bring device out of sleep and reset it's units */
2053 - ret = ath5k_hw_nic_wakeup(ah, CHANNEL_B, true);
2054 + ret = ath5k_hw_nic_wakeup(ah, 0, true);
2055 if (ret)
2056 goto err_free;
2057
2058 diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
2059 index ba6d225..753f50e 100644
2060 --- a/drivers/net/wireless/ath/ath5k/base.c
2061 +++ b/drivers/net/wireless/ath/ath5k/base.c
2062 @@ -666,7 +666,6 @@ ath5k_pci_suspend(struct pci_dev *pdev, pm_message_t state)
2063
2064 ath5k_led_off(sc);
2065
2066 - free_irq(pdev->irq, sc);
2067 pci_save_state(pdev);
2068 pci_disable_device(pdev);
2069 pci_set_power_state(pdev, PCI_D3hot);
2070 @@ -694,18 +693,8 @@ ath5k_pci_resume(struct pci_dev *pdev)
2071 */
2072 pci_write_config_byte(pdev, 0x41, 0);
2073
2074 - err = request_irq(pdev->irq, ath5k_intr, IRQF_SHARED, "ath", sc);
2075 - if (err) {
2076 - ATH5K_ERR(sc, "request_irq failed\n");
2077 - goto err_no_irq;
2078 - }
2079 -
2080 ath5k_led_enable(sc);
2081 return 0;
2082 -
2083 -err_no_irq:
2084 - pci_disable_device(pdev);
2085 - return err;
2086 }
2087 #endif /* CONFIG_PM */
2088
2089 @@ -2445,27 +2434,29 @@ ath5k_stop_hw(struct ath5k_softc *sc)
2090 ret = ath5k_stop_locked(sc);
2091 if (ret == 0 && !test_bit(ATH_STAT_INVALID, sc->status)) {
2092 /*
2093 - * Set the chip in full sleep mode. Note that we are
2094 - * careful to do this only when bringing the interface
2095 - * completely to a stop. When the chip is in this state
2096 - * it must be carefully woken up or references to
2097 - * registers in the PCI clock domain may freeze the bus
2098 - * (and system). This varies by chip and is mostly an
2099 - * issue with newer parts that go to sleep more quickly.
2100 - */
2101 - if (sc->ah->ah_mac_srev >= 0x78) {
2102 - /*
2103 - * XXX
2104 - * don't put newer MAC revisions > 7.8 to sleep because
2105 - * of the above mentioned problems
2106 - */
2107 - ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "mac version > 7.8, "
2108 - "not putting device to sleep\n");
2109 - } else {
2110 - ATH5K_DBG(sc, ATH5K_DEBUG_RESET,
2111 - "putting device to full sleep\n");
2112 - ath5k_hw_set_power(sc->ah, AR5K_PM_FULL_SLEEP, true, 0);
2113 - }
2114 + * Don't set the card in full sleep mode!
2115 + *
2116 + * a) When the device is in this state it must be carefully
2117 + * woken up or references to registers in the PCI clock
2118 + * domain may freeze the bus (and system). This varies
2119 + * by chip and is mostly an issue with newer parts
2120 + * (madwifi sources mentioned srev >= 0x78) that go to
2121 + * sleep more quickly.
2122 + *
2123 + * b) On older chips full sleep results a weird behaviour
2124 + * during wakeup. I tested various cards with srev < 0x78
2125 + * and they don't wake up after module reload, a second
2126 + * module reload is needed to bring the card up again.
2127 + *
2128 + * Until we figure out what's going on don't enable
2129 + * full chip reset on any chip (this is what Legacy HAL
2130 + * and Sam's HAL do anyway). Instead Perform a full reset
2131 + * on the device (same as initial state after attach) and
2132 + * leave it idle (keep MAC/BB on warm reset) */
2133 + ret = ath5k_hw_on_hold(sc->ah);
2134 +
2135 + ATH5K_DBG(sc, ATH5K_DEBUG_RESET,
2136 + "putting device to sleep\n");
2137 }
2138 ath5k_txbuf_free(sc, sc->bbuf);
2139
2140 diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c
2141 index bd0a97a..4980621 100644
2142 --- a/drivers/net/wireless/ath/ath5k/reset.c
2143 +++ b/drivers/net/wireless/ath/ath5k/reset.c
2144 @@ -258,29 +258,35 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode,
2145 if (!set_chip)
2146 goto commit;
2147
2148 - /* Preserve sleep duration */
2149 data = ath5k_hw_reg_read(ah, AR5K_SLEEP_CTL);
2150 +
2151 + /* If card is down we 'll get 0xffff... so we
2152 + * need to clean this up before we write the register
2153 + */
2154 if (data & 0xffc00000)
2155 data = 0;
2156 else
2157 - data = data & 0xfffcffff;
2158 + /* Preserve sleep duration etc */
2159 + data = data & ~AR5K_SLEEP_CTL_SLE;
2160
2161 - ath5k_hw_reg_write(ah, data, AR5K_SLEEP_CTL);
2162 + ath5k_hw_reg_write(ah, data | AR5K_SLEEP_CTL_SLE_WAKE,
2163 + AR5K_SLEEP_CTL);
2164 udelay(15);
2165
2166 - for (i = 50; i > 0; i--) {
2167 + for (i = 200; i > 0; i--) {
2168 /* Check if the chip did wake up */
2169 if ((ath5k_hw_reg_read(ah, AR5K_PCICFG) &
2170 AR5K_PCICFG_SPWR_DN) == 0)
2171 break;
2172
2173 /* Wait a bit and retry */
2174 - udelay(200);
2175 - ath5k_hw_reg_write(ah, data, AR5K_SLEEP_CTL);
2176 + udelay(50);
2177 + ath5k_hw_reg_write(ah, data | AR5K_SLEEP_CTL_SLE_WAKE,
2178 + AR5K_SLEEP_CTL);
2179 }
2180
2181 /* Fail if the chip didn't wake up */
2182 - if (i <= 0)
2183 + if (i == 0)
2184 return -EIO;
2185
2186 break;
2187 @@ -297,6 +303,64 @@ commit:
2188 }
2189
2190 /*
2191 + * Put device on hold
2192 + *
2193 + * Put MAC and Baseband on warm reset and
2194 + * keep that state (don't clean sleep control
2195 + * register). After this MAC and Baseband are
2196 + * disabled and a full reset is needed to come
2197 + * back. This way we save as much power as possible
2198 + * without puting the card on full sleep.
2199 + */
2200 +int ath5k_hw_on_hold(struct ath5k_hw *ah)
2201 +{
2202 + struct pci_dev *pdev = ah->ah_sc->pdev;
2203 + u32 bus_flags;
2204 + int ret;
2205 +
2206 + /* Make sure device is awake */
2207 + ret = ath5k_hw_set_power(ah, AR5K_PM_AWAKE, true, 0);
2208 + if (ret) {
2209 + ATH5K_ERR(ah->ah_sc, "failed to wakeup the MAC Chip\n");
2210 + return ret;
2211 + }
2212 +
2213 + /*
2214 + * Put chipset on warm reset...
2215 + *
2216 + * Note: puting PCI core on warm reset on PCI-E cards
2217 + * results card to hang and always return 0xffff... so
2218 + * we ingore that flag for PCI-E cards. On PCI cards
2219 + * this flag gets cleared after 64 PCI clocks.
2220 + */
2221 + bus_flags = (pdev->is_pcie) ? 0 : AR5K_RESET_CTL_PCI;
2222 +
2223 + if (ah->ah_version == AR5K_AR5210) {
2224 + ret = ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_PCU |
2225 + AR5K_RESET_CTL_MAC | AR5K_RESET_CTL_DMA |
2226 + AR5K_RESET_CTL_PHY | AR5K_RESET_CTL_PCI);
2227 + mdelay(2);
2228 + } else {
2229 + ret = ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_PCU |
2230 + AR5K_RESET_CTL_BASEBAND | bus_flags);
2231 + }
2232 +
2233 + if (ret) {
2234 + ATH5K_ERR(ah->ah_sc, "failed to put device on warm reset\n");
2235 + return -EIO;
2236 + }
2237 +
2238 + /* ...wakeup again!*/
2239 + ret = ath5k_hw_set_power(ah, AR5K_PM_AWAKE, true, 0);
2240 + if (ret) {
2241 + ATH5K_ERR(ah->ah_sc, "failed to put device on hold\n");
2242 + return ret;
2243 + }
2244 +
2245 + return ret;
2246 +}
2247 +
2248 +/*
2249 * Bring up MAC + PHY Chips and program PLL
2250 * TODO: Half/Quarter rate support
2251 */
2252 @@ -319,6 +383,50 @@ int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int flags, bool initial)
2253 return ret;
2254 }
2255
2256 + /*
2257 + * Put chipset on warm reset...
2258 + *
2259 + * Note: puting PCI core on warm reset on PCI-E cards
2260 + * results card to hang and always return 0xffff... so
2261 + * we ingore that flag for PCI-E cards. On PCI cards
2262 + * this flag gets cleared after 64 PCI clocks.
2263 + */
2264 + bus_flags = (pdev->is_pcie) ? 0 : AR5K_RESET_CTL_PCI;
2265 +
2266 + if (ah->ah_version == AR5K_AR5210) {
2267 + ret = ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_PCU |
2268 + AR5K_RESET_CTL_MAC | AR5K_RESET_CTL_DMA |
2269 + AR5K_RESET_CTL_PHY | AR5K_RESET_CTL_PCI);
2270 + mdelay(2);
2271 + } else {
2272 + ret = ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_PCU |
2273 + AR5K_RESET_CTL_BASEBAND | bus_flags);
2274 + }
2275 +
2276 + if (ret) {
2277 + ATH5K_ERR(ah->ah_sc, "failed to reset the MAC Chip\n");
2278 + return -EIO;
2279 + }
2280 +
2281 + /* ...wakeup again!...*/
2282 + ret = ath5k_hw_set_power(ah, AR5K_PM_AWAKE, true, 0);
2283 + if (ret) {
2284 + ATH5K_ERR(ah->ah_sc, "failed to resume the MAC Chip\n");
2285 + return ret;
2286 + }
2287 +
2288 + /* ...clear reset control register and pull device out of
2289 + * warm reset */
2290 + if (ath5k_hw_nic_reset(ah, 0)) {
2291 + ATH5K_ERR(ah->ah_sc, "failed to warm reset the MAC Chip\n");
2292 + return -EIO;
2293 + }
2294 +
2295 + /* On initialization skip PLL programming since we don't have
2296 + * a channel / mode set yet */
2297 + if (initial)
2298 + return 0;
2299 +
2300 if (ah->ah_version != AR5K_AR5210) {
2301 /*
2302 * Get channel mode flags
2303 @@ -384,39 +492,6 @@ int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int flags, bool initial)
2304 AR5K_PHY_TURBO);
2305 }
2306
2307 - /* reseting PCI on PCI-E cards results card to hang
2308 - * and always return 0xffff... so we ingore that flag
2309 - * for PCI-E cards */
2310 - bus_flags = (pdev->is_pcie) ? 0 : AR5K_RESET_CTL_PCI;
2311 -
2312 - /* Reset chipset */
2313 - if (ah->ah_version == AR5K_AR5210) {
2314 - ret = ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_PCU |
2315 - AR5K_RESET_CTL_MAC | AR5K_RESET_CTL_DMA |
2316 - AR5K_RESET_CTL_PHY | AR5K_RESET_CTL_PCI);
2317 - mdelay(2);
2318 - } else {
2319 - ret = ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_PCU |
2320 - AR5K_RESET_CTL_BASEBAND | bus_flags);
2321 - }
2322 - if (ret) {
2323 - ATH5K_ERR(ah->ah_sc, "failed to reset the MAC Chip\n");
2324 - return -EIO;
2325 - }
2326 -
2327 - /* ...wakeup again!*/
2328 - ret = ath5k_hw_set_power(ah, AR5K_PM_AWAKE, true, 0);
2329 - if (ret) {
2330 - ATH5K_ERR(ah->ah_sc, "failed to resume the MAC Chip\n");
2331 - return ret;
2332 - }
2333 -
2334 - /* ...final warm reset */
2335 - if (ath5k_hw_nic_reset(ah, 0)) {
2336 - ATH5K_ERR(ah->ah_sc, "failed to warm reset the MAC Chip\n");
2337 - return -EIO;
2338 - }
2339 -
2340 if (ah->ah_version != AR5K_AR5210) {
2341
2342 /* ...update PLL if needed */
2343 diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c
2344 index 7da52f1..d83d430 100644
2345 --- a/drivers/net/wireless/iwlwifi/iwl-1000.c
2346 +++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
2347 @@ -46,7 +46,7 @@
2348 #include "iwl-5000-hw.h"
2349
2350 /* Highest firmware API version supported */
2351 -#define IWL1000_UCODE_API_MAX 2
2352 +#define IWL1000_UCODE_API_MAX 3
2353
2354 /* Lowest firmware API version supported */
2355 #define IWL1000_UCODE_API_MIN 1
2356 @@ -62,12 +62,14 @@ struct iwl_cfg iwl1000_bgn_cfg = {
2357 .ucode_api_min = IWL1000_UCODE_API_MIN,
2358 .sku = IWL_SKU_G|IWL_SKU_N,
2359 .ops = &iwl5000_ops,
2360 - .eeprom_size = IWL_5000_EEPROM_IMG_SIZE,
2361 + .eeprom_size = OTP_LOW_IMAGE_SIZE,
2362 .eeprom_ver = EEPROM_5000_EEPROM_VERSION,
2363 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
2364 .mod_params = &iwl50_mod_params,
2365 .valid_tx_ant = ANT_A,
2366 .valid_rx_ant = ANT_AB,
2367 .need_pll_cfg = true,
2368 + .max_ll_items = OTP_MAX_LL_ITEMS_1000,
2369 + .shadow_ram_support = false,
2370 };
2371
2372 diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
2373 index 46288e7..b73ab6c 100644
2374 --- a/drivers/net/wireless/iwlwifi/iwl-3945.c
2375 +++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
2376 @@ -2784,11 +2784,50 @@ static int iwl3945_load_bsm(struct iwl_priv *priv)
2377 return 0;
2378 }
2379
2380 +#define IWL3945_UCODE_GET(item) \
2381 +static u32 iwl3945_ucode_get_##item(const struct iwl_ucode_header *ucode,\
2382 + u32 api_ver) \
2383 +{ \
2384 + return le32_to_cpu(ucode->u.v1.item); \
2385 +}
2386 +
2387 +static u32 iwl3945_ucode_get_header_size(u32 api_ver)
2388 +{
2389 + return UCODE_HEADER_SIZE(1);
2390 +}
2391 +static u32 iwl3945_ucode_get_build(const struct iwl_ucode_header *ucode,
2392 + u32 api_ver)
2393 +{
2394 + return 0;
2395 +}
2396 +static u8 *iwl3945_ucode_get_data(const struct iwl_ucode_header *ucode,
2397 + u32 api_ver)
2398 +{
2399 + return (u8 *) ucode->u.v1.data;
2400 +}
2401 +
2402 +IWL3945_UCODE_GET(inst_size);
2403 +IWL3945_UCODE_GET(data_size);
2404 +IWL3945_UCODE_GET(init_size);
2405 +IWL3945_UCODE_GET(init_data_size);
2406 +IWL3945_UCODE_GET(boot_size);
2407 +
2408 static struct iwl_hcmd_ops iwl3945_hcmd = {
2409 .rxon_assoc = iwl3945_send_rxon_assoc,
2410 .commit_rxon = iwl3945_commit_rxon,
2411 };
2412
2413 +static struct iwl_ucode_ops iwl3945_ucode = {
2414 + .get_header_size = iwl3945_ucode_get_header_size,
2415 + .get_build = iwl3945_ucode_get_build,
2416 + .get_inst_size = iwl3945_ucode_get_inst_size,
2417 + .get_data_size = iwl3945_ucode_get_data_size,
2418 + .get_init_size = iwl3945_ucode_get_init_size,
2419 + .get_init_data_size = iwl3945_ucode_get_init_data_size,
2420 + .get_boot_size = iwl3945_ucode_get_boot_size,
2421 + .get_data = iwl3945_ucode_get_data,
2422 +};
2423 +
2424 static struct iwl_lib_ops iwl3945_lib = {
2425 .txq_attach_buf_to_tfd = iwl3945_hw_txq_attach_buf_to_tfd,
2426 .txq_free_tfd = iwl3945_hw_txq_free_tfd,
2427 @@ -2829,6 +2868,7 @@ static struct iwl_hcmd_utils_ops iwl3945_hcmd_utils = {
2428 };
2429
2430 static struct iwl_ops iwl3945_ops = {
2431 + .ucode = &iwl3945_ucode,
2432 .lib = &iwl3945_lib,
2433 .hcmd = &iwl3945_hcmd,
2434 .utils = &iwl3945_hcmd_utils,
2435 diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
2436 index 8f3d4bc..157ee15 100644
2437 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c
2438 +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
2439 @@ -2221,12 +2221,50 @@ static void iwl4965_cancel_deferred_work(struct iwl_priv *priv)
2440 cancel_work_sync(&priv->txpower_work);
2441 }
2442
2443 +#define IWL4965_UCODE_GET(item) \
2444 +static u32 iwl4965_ucode_get_##item(const struct iwl_ucode_header *ucode,\
2445 + u32 api_ver) \
2446 +{ \
2447 + return le32_to_cpu(ucode->u.v1.item); \
2448 +}
2449 +
2450 +static u32 iwl4965_ucode_get_header_size(u32 api_ver)
2451 +{
2452 + return UCODE_HEADER_SIZE(1);
2453 +}
2454 +static u32 iwl4965_ucode_get_build(const struct iwl_ucode_header *ucode,
2455 + u32 api_ver)
2456 +{
2457 + return 0;
2458 +}
2459 +static u8 *iwl4965_ucode_get_data(const struct iwl_ucode_header *ucode,
2460 + u32 api_ver)
2461 +{
2462 + return (u8 *) ucode->u.v1.data;
2463 +}
2464 +
2465 +IWL4965_UCODE_GET(inst_size);
2466 +IWL4965_UCODE_GET(data_size);
2467 +IWL4965_UCODE_GET(init_size);
2468 +IWL4965_UCODE_GET(init_data_size);
2469 +IWL4965_UCODE_GET(boot_size);
2470 +
2471 static struct iwl_hcmd_ops iwl4965_hcmd = {
2472 .rxon_assoc = iwl4965_send_rxon_assoc,
2473 .commit_rxon = iwl_commit_rxon,
2474 .set_rxon_chain = iwl_set_rxon_chain,
2475 };
2476
2477 +static struct iwl_ucode_ops iwl4965_ucode = {
2478 + .get_header_size = iwl4965_ucode_get_header_size,
2479 + .get_build = iwl4965_ucode_get_build,
2480 + .get_inst_size = iwl4965_ucode_get_inst_size,
2481 + .get_data_size = iwl4965_ucode_get_data_size,
2482 + .get_init_size = iwl4965_ucode_get_init_size,
2483 + .get_init_data_size = iwl4965_ucode_get_init_data_size,
2484 + .get_boot_size = iwl4965_ucode_get_boot_size,
2485 + .get_data = iwl4965_ucode_get_data,
2486 +};
2487 static struct iwl_hcmd_utils_ops iwl4965_hcmd_utils = {
2488 .get_hcmd_size = iwl4965_get_hcmd_size,
2489 .build_addsta_hcmd = iwl4965_build_addsta_hcmd,
2490 @@ -2287,6 +2325,7 @@ static struct iwl_lib_ops iwl4965_lib = {
2491 };
2492
2493 static struct iwl_ops iwl4965_ops = {
2494 + .ucode = &iwl4965_ucode,
2495 .lib = &iwl4965_lib,
2496 .hcmd = &iwl4965_hcmd,
2497 .utils = &iwl4965_hcmd_utils,
2498 diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
2499 index b3c648c..a9ea3b5 100644
2500 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c
2501 +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
2502 @@ -239,6 +239,13 @@ static void iwl5000_nic_config(struct iwl_priv *priv)
2503 APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS,
2504 ~APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS);
2505
2506 + if ((priv->hw_rev & CSR_HW_REV_TYPE_MSK) == CSR_HW_REV_TYPE_1000) {
2507 + /* Setting digital SVR for 1000 card to 1.32V */
2508 + iwl_set_bits_mask_prph(priv, APMG_DIGITAL_SVR_REG,
2509 + APMG_SVR_DIGITAL_VOLTAGE_1_32,
2510 + ~APMG_SVR_VOLTAGE_CONFIG_BIT_MSK);
2511 + }
2512 +
2513 spin_unlock_irqrestore(&priv->lock, flags);
2514 }
2515
2516 @@ -1426,6 +1433,44 @@ int iwl5000_calc_rssi(struct iwl_priv *priv,
2517 return max_rssi - agc - IWL49_RSSI_OFFSET;
2518 }
2519
2520 +#define IWL5000_UCODE_GET(item) \
2521 +static u32 iwl5000_ucode_get_##item(const struct iwl_ucode_header *ucode,\
2522 + u32 api_ver) \
2523 +{ \
2524 + if (api_ver <= 2) \
2525 + return le32_to_cpu(ucode->u.v1.item); \
2526 + return le32_to_cpu(ucode->u.v2.item); \
2527 +}
2528 +
2529 +static u32 iwl5000_ucode_get_header_size(u32 api_ver)
2530 +{
2531 + if (api_ver <= 2)
2532 + return UCODE_HEADER_SIZE(1);
2533 + return UCODE_HEADER_SIZE(2);
2534 +}
2535 +
2536 +static u32 iwl5000_ucode_get_build(const struct iwl_ucode_header *ucode,
2537 + u32 api_ver)
2538 +{
2539 + if (api_ver <= 2)
2540 + return 0;
2541 + return le32_to_cpu(ucode->u.v2.build);
2542 +}
2543 +
2544 +static u8 *iwl5000_ucode_get_data(const struct iwl_ucode_header *ucode,
2545 + u32 api_ver)
2546 +{
2547 + if (api_ver <= 2)
2548 + return (u8 *) ucode->u.v1.data;
2549 + return (u8 *) ucode->u.v2.data;
2550 +}
2551 +
2552 +IWL5000_UCODE_GET(inst_size);
2553 +IWL5000_UCODE_GET(data_size);
2554 +IWL5000_UCODE_GET(init_size);
2555 +IWL5000_UCODE_GET(init_data_size);
2556 +IWL5000_UCODE_GET(boot_size);
2557 +
2558 struct iwl_hcmd_ops iwl5000_hcmd = {
2559 .rxon_assoc = iwl5000_send_rxon_assoc,
2560 .commit_rxon = iwl_commit_rxon,
2561 @@ -1441,6 +1486,17 @@ struct iwl_hcmd_utils_ops iwl5000_hcmd_utils = {
2562 .calc_rssi = iwl5000_calc_rssi,
2563 };
2564
2565 +struct iwl_ucode_ops iwl5000_ucode = {
2566 + .get_header_size = iwl5000_ucode_get_header_size,
2567 + .get_build = iwl5000_ucode_get_build,
2568 + .get_inst_size = iwl5000_ucode_get_inst_size,
2569 + .get_data_size = iwl5000_ucode_get_data_size,
2570 + .get_init_size = iwl5000_ucode_get_init_size,
2571 + .get_init_data_size = iwl5000_ucode_get_init_data_size,
2572 + .get_boot_size = iwl5000_ucode_get_boot_size,
2573 + .get_data = iwl5000_ucode_get_data,
2574 +};
2575 +
2576 struct iwl_lib_ops iwl5000_lib = {
2577 .set_hw_params = iwl5000_hw_set_hw_params,
2578 .txq_update_byte_cnt_tbl = iwl5000_txq_update_byte_cnt_tbl,
2579 @@ -1542,12 +1598,14 @@ static struct iwl_lib_ops iwl5150_lib = {
2580 };
2581
2582 struct iwl_ops iwl5000_ops = {
2583 + .ucode = &iwl5000_ucode,
2584 .lib = &iwl5000_lib,
2585 .hcmd = &iwl5000_hcmd,
2586 .utils = &iwl5000_hcmd_utils,
2587 };
2588
2589 static struct iwl_ops iwl5150_ops = {
2590 + .ucode = &iwl5000_ucode,
2591 .lib = &iwl5150_lib,
2592 .hcmd = &iwl5000_hcmd,
2593 .utils = &iwl5000_hcmd_utils,
2594 diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
2595 index bd438d8..e4a405f 100644
2596 --- a/drivers/net/wireless/iwlwifi/iwl-6000.c
2597 +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
2598 @@ -46,8 +46,8 @@
2599 #include "iwl-5000-hw.h"
2600
2601 /* Highest firmware API version supported */
2602 -#define IWL6000_UCODE_API_MAX 2
2603 -#define IWL6050_UCODE_API_MAX 2
2604 +#define IWL6000_UCODE_API_MAX 3
2605 +#define IWL6050_UCODE_API_MAX 3
2606
2607 /* Lowest firmware API version supported */
2608 #define IWL6000_UCODE_API_MIN 1
2609 @@ -69,6 +69,7 @@ static struct iwl_hcmd_utils_ops iwl6000_hcmd_utils = {
2610 };
2611
2612 static struct iwl_ops iwl6000_ops = {
2613 + .ucode = &iwl5000_ucode,
2614 .lib = &iwl5000_lib,
2615 .hcmd = &iwl5000_hcmd,
2616 .utils = &iwl6000_hcmd_utils,
2617 @@ -81,13 +82,15 @@ struct iwl_cfg iwl6000_2ag_cfg = {
2618 .ucode_api_min = IWL6000_UCODE_API_MIN,
2619 .sku = IWL_SKU_A|IWL_SKU_G,
2620 .ops = &iwl6000_ops,
2621 - .eeprom_size = IWL_5000_EEPROM_IMG_SIZE,
2622 + .eeprom_size = OTP_LOW_IMAGE_SIZE,
2623 .eeprom_ver = EEPROM_5000_EEPROM_VERSION,
2624 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
2625 .mod_params = &iwl50_mod_params,
2626 .valid_tx_ant = ANT_BC,
2627 .valid_rx_ant = ANT_BC,
2628 .need_pll_cfg = false,
2629 + .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
2630 + .shadow_ram_support = true,
2631 };
2632
2633 struct iwl_cfg iwl6000_2agn_cfg = {
2634 @@ -97,13 +100,15 @@ struct iwl_cfg iwl6000_2agn_cfg = {
2635 .ucode_api_min = IWL6000_UCODE_API_MIN,
2636 .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
2637 .ops = &iwl6000_ops,
2638 - .eeprom_size = IWL_5000_EEPROM_IMG_SIZE,
2639 + .eeprom_size = OTP_LOW_IMAGE_SIZE,
2640 .eeprom_ver = EEPROM_5000_EEPROM_VERSION,
2641 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
2642 .mod_params = &iwl50_mod_params,
2643 .valid_tx_ant = ANT_AB,
2644 .valid_rx_ant = ANT_AB,
2645 .need_pll_cfg = false,
2646 + .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
2647 + .shadow_ram_support = true,
2648 };
2649
2650 struct iwl_cfg iwl6050_2agn_cfg = {
2651 @@ -113,13 +118,15 @@ struct iwl_cfg iwl6050_2agn_cfg = {
2652 .ucode_api_min = IWL6050_UCODE_API_MIN,
2653 .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
2654 .ops = &iwl6000_ops,
2655 - .eeprom_size = IWL_5000_EEPROM_IMG_SIZE,
2656 + .eeprom_size = OTP_LOW_IMAGE_SIZE,
2657 .eeprom_ver = EEPROM_5000_EEPROM_VERSION,
2658 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
2659 .mod_params = &iwl50_mod_params,
2660 .valid_tx_ant = ANT_AB,
2661 .valid_rx_ant = ANT_AB,
2662 .need_pll_cfg = false,
2663 + .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
2664 + .shadow_ram_support = true,
2665 };
2666
2667 struct iwl_cfg iwl6000_3agn_cfg = {
2668 @@ -129,13 +136,15 @@ struct iwl_cfg iwl6000_3agn_cfg = {
2669 .ucode_api_min = IWL6000_UCODE_API_MIN,
2670 .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
2671 .ops = &iwl6000_ops,
2672 - .eeprom_size = IWL_5000_EEPROM_IMG_SIZE,
2673 + .eeprom_size = OTP_LOW_IMAGE_SIZE,
2674 .eeprom_ver = EEPROM_5000_EEPROM_VERSION,
2675 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
2676 .mod_params = &iwl50_mod_params,
2677 .valid_tx_ant = ANT_ABC,
2678 .valid_rx_ant = ANT_ABC,
2679 .need_pll_cfg = false,
2680 + .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
2681 + .shadow_ram_support = true,
2682 };
2683
2684 struct iwl_cfg iwl6050_3agn_cfg = {
2685 @@ -145,13 +154,15 @@ struct iwl_cfg iwl6050_3agn_cfg = {
2686 .ucode_api_min = IWL6050_UCODE_API_MIN,
2687 .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
2688 .ops = &iwl6000_ops,
2689 - .eeprom_size = IWL_5000_EEPROM_IMG_SIZE,
2690 + .eeprom_size = OTP_LOW_IMAGE_SIZE,
2691 .eeprom_ver = EEPROM_5000_EEPROM_VERSION,
2692 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
2693 .mod_params = &iwl50_mod_params,
2694 .valid_tx_ant = ANT_ABC,
2695 .valid_rx_ant = ANT_ABC,
2696 .need_pll_cfg = false,
2697 + .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
2698 + .shadow_ram_support = true,
2699 };
2700
2701 MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
2702 diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
2703 index 355f50e..2a577ae 100644
2704 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c
2705 +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
2706 @@ -1348,7 +1348,7 @@ static void iwl_nic_start(struct iwl_priv *priv)
2707 */
2708 static int iwl_read_ucode(struct iwl_priv *priv)
2709 {
2710 - struct iwl_ucode *ucode;
2711 + struct iwl_ucode_header *ucode;
2712 int ret = -EINVAL, index;
2713 const struct firmware *ucode_raw;
2714 const char *name_pre = priv->cfg->fw_name_pre;
2715 @@ -1357,7 +1357,8 @@ static int iwl_read_ucode(struct iwl_priv *priv)
2716 char buf[25];
2717 u8 *src;
2718 size_t len;
2719 - u32 api_ver, inst_size, data_size, init_size, init_data_size, boot_size;
2720 + u32 api_ver, build;
2721 + u32 inst_size, data_size, init_size, init_data_size, boot_size;
2722
2723 /* Ask kernel firmware_class module to get the boot firmware off disk.
2724 * request_firmware() is synchronous, file is in memory on return. */
2725 @@ -1387,23 +1388,26 @@ static int iwl_read_ucode(struct iwl_priv *priv)
2726 if (ret < 0)
2727 goto error;
2728
2729 - /* Make sure that we got at least our header! */
2730 - if (ucode_raw->size < sizeof(*ucode)) {
2731 + /* Make sure that we got at least the v1 header! */
2732 + if (ucode_raw->size < priv->cfg->ops->ucode->get_header_size(1)) {
2733 IWL_ERR(priv, "File size way too small!\n");
2734 ret = -EINVAL;
2735 goto err_release;
2736 }
2737
2738 /* Data from ucode file: header followed by uCode images */
2739 - ucode = (void *)ucode_raw->data;
2740 + ucode = (struct iwl_ucode_header *)ucode_raw->data;
2741
2742 priv->ucode_ver = le32_to_cpu(ucode->ver);
2743 api_ver = IWL_UCODE_API(priv->ucode_ver);
2744 - inst_size = le32_to_cpu(ucode->inst_size);
2745 - data_size = le32_to_cpu(ucode->data_size);
2746 - init_size = le32_to_cpu(ucode->init_size);
2747 - init_data_size = le32_to_cpu(ucode->init_data_size);
2748 - boot_size = le32_to_cpu(ucode->boot_size);
2749 + build = priv->cfg->ops->ucode->get_build(ucode, api_ver);
2750 + inst_size = priv->cfg->ops->ucode->get_inst_size(ucode, api_ver);
2751 + data_size = priv->cfg->ops->ucode->get_data_size(ucode, api_ver);
2752 + init_size = priv->cfg->ops->ucode->get_init_size(ucode, api_ver);
2753 + init_data_size =
2754 + priv->cfg->ops->ucode->get_init_data_size(ucode, api_ver);
2755 + boot_size = priv->cfg->ops->ucode->get_boot_size(ucode, api_ver);
2756 + src = priv->cfg->ops->ucode->get_data(ucode, api_ver);
2757
2758 /* api_ver should match the api version forming part of the
2759 * firmware filename ... but we don't check for that and only rely
2760 @@ -1429,6 +1433,9 @@ static int iwl_read_ucode(struct iwl_priv *priv)
2761 IWL_UCODE_API(priv->ucode_ver),
2762 IWL_UCODE_SERIAL(priv->ucode_ver));
2763
2764 + if (build)
2765 + IWL_DEBUG_INFO(priv, "Build %u\n", build);
2766 +
2767 IWL_DEBUG_INFO(priv, "f/w package hdr ucode version raw = 0x%x\n",
2768 priv->ucode_ver);
2769 IWL_DEBUG_INFO(priv, "f/w package hdr runtime inst size = %u\n",
2770 @@ -1443,12 +1450,14 @@ static int iwl_read_ucode(struct iwl_priv *priv)
2771 boot_size);
2772
2773 /* Verify size of file vs. image size info in file's header */
2774 - if (ucode_raw->size < sizeof(*ucode) +
2775 + if (ucode_raw->size !=
2776 + priv->cfg->ops->ucode->get_header_size(api_ver) +
2777 inst_size + data_size + init_size +
2778 init_data_size + boot_size) {
2779
2780 - IWL_DEBUG_INFO(priv, "uCode file size %d too small\n",
2781 - (int)ucode_raw->size);
2782 + IWL_DEBUG_INFO(priv,
2783 + "uCode file size %d does not match expected size\n",
2784 + (int)ucode_raw->size);
2785 ret = -EINVAL;
2786 goto err_release;
2787 }
2788 @@ -1528,42 +1537,42 @@ static int iwl_read_ucode(struct iwl_priv *priv)
2789 /* Copy images into buffers for card's bus-master reads ... */
2790
2791 /* Runtime instructions (first block of data in file) */
2792 - src = &ucode->data[0];
2793 - len = priv->ucode_code.len;
2794 + len = inst_size;
2795 IWL_DEBUG_INFO(priv, "Copying (but not loading) uCode instr len %Zd\n", len);
2796 memcpy(priv->ucode_code.v_addr, src, len);
2797 + src += len;
2798 +
2799 IWL_DEBUG_INFO(priv, "uCode instr buf vaddr = 0x%p, paddr = 0x%08x\n",
2800 priv->ucode_code.v_addr, (u32)priv->ucode_code.p_addr);
2801
2802 /* Runtime data (2nd block)
2803 * NOTE: Copy into backup buffer will be done in iwl_up() */
2804 - src = &ucode->data[inst_size];
2805 - len = priv->ucode_data.len;
2806 + len = data_size;
2807 IWL_DEBUG_INFO(priv, "Copying (but not loading) uCode data len %Zd\n", len);
2808 memcpy(priv->ucode_data.v_addr, src, len);
2809 memcpy(priv->ucode_data_backup.v_addr, src, len);
2810 + src += len;
2811
2812 /* Initialization instructions (3rd block) */
2813 if (init_size) {
2814 - src = &ucode->data[inst_size + data_size];
2815 - len = priv->ucode_init.len;
2816 + len = init_size;
2817 IWL_DEBUG_INFO(priv, "Copying (but not loading) init instr len %Zd\n",
2818 len);
2819 memcpy(priv->ucode_init.v_addr, src, len);
2820 + src += len;
2821 }
2822
2823 /* Initialization data (4th block) */
2824 if (init_data_size) {
2825 - src = &ucode->data[inst_size + data_size + init_size];
2826 - len = priv->ucode_init_data.len;
2827 + len = init_data_size;
2828 IWL_DEBUG_INFO(priv, "Copying (but not loading) init data len %Zd\n",
2829 len);
2830 memcpy(priv->ucode_init_data.v_addr, src, len);
2831 + src += len;
2832 }
2833
2834 /* Bootstrap instructions (5th block) */
2835 - src = &ucode->data[inst_size + data_size + init_size + init_data_size];
2836 - len = priv->ucode_boot.len;
2837 + len = boot_size;
2838 IWL_DEBUG_INFO(priv, "Copying (but not loading) boot instr len %Zd\n", len);
2839 memcpy(priv->ucode_boot.v_addr, src, len);
2840
2841 @@ -2206,7 +2215,7 @@ static void iwl_mac_stop(struct ieee80211_hw *hw)
2842
2843 priv->is_open = 0;
2844
2845 - if (iwl_is_ready_rf(priv)) {
2846 + if (iwl_is_ready_rf(priv) || test_bit(STATUS_SCAN_HW, &priv->status)) {
2847 /* stop mac, cancel any scan request and clear
2848 * RXON_FILTER_ASSOC_MSK BIT
2849 */
2850 diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
2851 index dabf663..1e51891 100644
2852 --- a/drivers/net/wireless/iwlwifi/iwl-core.h
2853 +++ b/drivers/net/wireless/iwlwifi/iwl-core.h
2854 @@ -116,6 +116,17 @@ struct iwl_temp_ops {
2855 void (*set_ct_kill)(struct iwl_priv *priv);
2856 };
2857
2858 +struct iwl_ucode_ops {
2859 + u32 (*get_header_size)(u32);
2860 + u32 (*get_build)(const struct iwl_ucode_header *, u32);
2861 + u32 (*get_inst_size)(const struct iwl_ucode_header *, u32);
2862 + u32 (*get_data_size)(const struct iwl_ucode_header *, u32);
2863 + u32 (*get_init_size)(const struct iwl_ucode_header *, u32);
2864 + u32 (*get_init_data_size)(const struct iwl_ucode_header *, u32);
2865 + u32 (*get_boot_size)(const struct iwl_ucode_header *, u32);
2866 + u8 * (*get_data)(const struct iwl_ucode_header *, u32);
2867 +};
2868 +
2869 struct iwl_lib_ops {
2870 /* set hw dependent parameters */
2871 int (*set_hw_params)(struct iwl_priv *priv);
2872 @@ -171,6 +182,7 @@ struct iwl_lib_ops {
2873 };
2874
2875 struct iwl_ops {
2876 + const struct iwl_ucode_ops *ucode;
2877 const struct iwl_lib_ops *lib;
2878 const struct iwl_hcmd_ops *hcmd;
2879 const struct iwl_hcmd_utils_ops *utils;
2880 @@ -195,6 +207,8 @@ struct iwl_mod_params {
2881 * filename is constructed as fw_name_pre<api>.ucode.
2882 * @ucode_api_max: Highest version of uCode API supported by driver.
2883 * @ucode_api_min: Lowest version of uCode API supported by driver.
2884 + * @max_ll_items: max number of OTP blocks
2885 + * @shadow_ram_support: shadow support for OTP memory
2886 *
2887 * We enable the driver to be backward compatible wrt API version. The
2888 * driver specifies which APIs it supports (with @ucode_api_max being the
2889 @@ -231,6 +245,8 @@ struct iwl_cfg {
2890 u8 valid_rx_ant;
2891 bool need_pll_cfg;
2892 bool use_isr_legacy;
2893 + const u16 max_ll_items;
2894 + const bool shadow_ram_support;
2895 };
2896
2897 /***************************
2898 diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
2899 index 650e20a..e8c8607 100644
2900 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h
2901 +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
2902 @@ -66,6 +66,7 @@ extern struct iwl_cfg iwl1000_bgn_cfg;
2903 /* shared structures from iwl-5000.c */
2904 extern struct iwl_mod_params iwl50_mod_params;
2905 extern struct iwl_ops iwl5000_ops;
2906 +extern struct iwl_ucode_ops iwl5000_ucode;
2907 extern struct iwl_lib_ops iwl5000_lib;
2908 extern struct iwl_hcmd_ops iwl5000_hcmd;
2909 extern struct iwl_hcmd_utils_ops iwl5000_hcmd_utils;
2910 @@ -525,15 +526,29 @@ struct fw_desc {
2911 };
2912
2913 /* uCode file layout */
2914 -struct iwl_ucode {
2915 - __le32 ver; /* major/minor/API/serial */
2916 - __le32 inst_size; /* bytes of runtime instructions */
2917 - __le32 data_size; /* bytes of runtime data */
2918 - __le32 init_size; /* bytes of initialization instructions */
2919 - __le32 init_data_size; /* bytes of initialization data */
2920 - __le32 boot_size; /* bytes of bootstrap instructions */
2921 - u8 data[0]; /* data in same order as "size" elements */
2922 +struct iwl_ucode_header {
2923 + __le32 ver; /* major/minor/API/serial */
2924 + union {
2925 + struct {
2926 + __le32 inst_size; /* bytes of runtime code */
2927 + __le32 data_size; /* bytes of runtime data */
2928 + __le32 init_size; /* bytes of init code */
2929 + __le32 init_data_size; /* bytes of init data */
2930 + __le32 boot_size; /* bytes of bootstrap code */
2931 + u8 data[0]; /* in same order as sizes */
2932 + } v1;
2933 + struct {
2934 + __le32 build; /* build number */
2935 + __le32 inst_size; /* bytes of runtime code */
2936 + __le32 data_size; /* bytes of runtime data */
2937 + __le32 init_size; /* bytes of init code */
2938 + __le32 init_data_size; /* bytes of init data */
2939 + __le32 boot_size; /* bytes of bootstrap code */
2940 + u8 data[0]; /* in same order as sizes */
2941 + } v2;
2942 + } u;
2943 };
2944 +#define UCODE_HEADER_SIZE(ver) ((ver) == 1 ? 24 : 28)
2945
2946 struct iwl4965_ibss_seq {
2947 u8 mac[ETH_ALEN];
2948 @@ -820,6 +835,18 @@ enum iwl_nvm_type {
2949 NVM_DEVICE_TYPE_OTP,
2950 };
2951
2952 +/*
2953 + * Two types of OTP memory access modes
2954 + * IWL_OTP_ACCESS_ABSOLUTE - absolute address mode,
2955 + * based on physical memory addressing
2956 + * IWL_OTP_ACCESS_RELATIVE - relative address mode,
2957 + * based on logical memory addressing
2958 + */
2959 +enum iwl_access_mode {
2960 + IWL_OTP_ACCESS_ABSOLUTE,
2961 + IWL_OTP_ACCESS_RELATIVE,
2962 +};
2963 +
2964 /* interrupt statistics */
2965 struct isr_statistics {
2966 u32 hw;
2967 diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-eeprom.c
2968 index 7d7554a..e8c0e82 100644
2969 --- a/drivers/net/wireless/iwlwifi/iwl-eeprom.c
2970 +++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.c
2971 @@ -152,6 +152,19 @@ int iwlcore_eeprom_verify_signature(struct iwl_priv *priv)
2972 }
2973 EXPORT_SYMBOL(iwlcore_eeprom_verify_signature);
2974
2975 +static void iwl_set_otp_access(struct iwl_priv *priv, enum iwl_access_mode mode)
2976 +{
2977 + u32 otpgp;
2978 +
2979 + otpgp = iwl_read32(priv, CSR_OTP_GP_REG);
2980 + if (mode == IWL_OTP_ACCESS_ABSOLUTE)
2981 + iwl_clear_bit(priv, CSR_OTP_GP_REG,
2982 + CSR_OTP_GP_REG_OTP_ACCESS_MODE);
2983 + else
2984 + iwl_set_bit(priv, CSR_OTP_GP_REG,
2985 + CSR_OTP_GP_REG_OTP_ACCESS_MODE);
2986 +}
2987 +
2988 static int iwlcore_get_nvm_type(struct iwl_priv *priv)
2989 {
2990 u32 otpgp;
2991 @@ -249,6 +262,124 @@ static int iwl_init_otp_access(struct iwl_priv *priv)
2992 return ret;
2993 }
2994
2995 +static int iwl_read_otp_word(struct iwl_priv *priv, u16 addr, u16 *eeprom_data)
2996 +{
2997 + int ret = 0;
2998 + u32 r;
2999 + u32 otpgp;
3000 +
3001 + _iwl_write32(priv, CSR_EEPROM_REG,
3002 + CSR_EEPROM_REG_MSK_ADDR & (addr << 1));
3003 + ret = iwl_poll_direct_bit(priv, CSR_EEPROM_REG,
3004 + CSR_EEPROM_REG_READ_VALID_MSK,
3005 + IWL_EEPROM_ACCESS_TIMEOUT);
3006 + if (ret < 0) {
3007 + IWL_ERR(priv, "Time out reading OTP[%d]\n", addr);
3008 + return ret;
3009 + }
3010 + r = _iwl_read_direct32(priv, CSR_EEPROM_REG);
3011 + /* check for ECC errors: */
3012 + otpgp = iwl_read32(priv, CSR_OTP_GP_REG);
3013 + if (otpgp & CSR_OTP_GP_REG_ECC_UNCORR_STATUS_MSK) {
3014 + /* stop in this case */
3015 + /* set the uncorrectable OTP ECC bit for acknowledgement */
3016 + iwl_set_bit(priv, CSR_OTP_GP_REG,
3017 + CSR_OTP_GP_REG_ECC_UNCORR_STATUS_MSK);
3018 + IWL_ERR(priv, "Uncorrectable OTP ECC error, abort OTP read\n");
3019 + return -EINVAL;
3020 + }
3021 + if (otpgp & CSR_OTP_GP_REG_ECC_CORR_STATUS_MSK) {
3022 + /* continue in this case */
3023 + /* set the correctable OTP ECC bit for acknowledgement */
3024 + iwl_set_bit(priv, CSR_OTP_GP_REG,
3025 + CSR_OTP_GP_REG_ECC_CORR_STATUS_MSK);
3026 + IWL_ERR(priv, "Correctable OTP ECC error, continue read\n");
3027 + }
3028 + *eeprom_data = le16_to_cpu((__force __le16)(r >> 16));
3029 + return 0;
3030 +}
3031 +
3032 +/*
3033 + * iwl_is_otp_empty: check for empty OTP
3034 + */
3035 +static bool iwl_is_otp_empty(struct iwl_priv *priv)
3036 +{
3037 + u16 next_link_addr = 0, link_value;
3038 + bool is_empty = false;
3039 +
3040 + /* locate the beginning of OTP link list */
3041 + if (!iwl_read_otp_word(priv, next_link_addr, &link_value)) {
3042 + if (!link_value) {
3043 + IWL_ERR(priv, "OTP is empty\n");
3044 + is_empty = true;
3045 + }
3046 + } else {
3047 + IWL_ERR(priv, "Unable to read first block of OTP list.\n");
3048 + is_empty = true;
3049 + }
3050 +
3051 + return is_empty;
3052 +}
3053 +
3054 +
3055 +/*
3056 + * iwl_find_otp_image: find EEPROM image in OTP
3057 + * finding the OTP block that contains the EEPROM image.
3058 + * the last valid block on the link list (the block _before_ the last block)
3059 + * is the block we should read and used to configure the device.
3060 + * If all the available OTP blocks are full, the last block will be the block
3061 + * we should read and used to configure the device.
3062 + * only perform this operation if shadow RAM is disabled
3063 + */
3064 +static int iwl_find_otp_image(struct iwl_priv *priv,
3065 + u16 *validblockaddr)
3066 +{
3067 + u16 next_link_addr = 0, link_value = 0, valid_addr;
3068 + int ret = 0;
3069 + int usedblocks = 0;
3070 +
3071 + /* set addressing mode to absolute to traverse the link list */
3072 + iwl_set_otp_access(priv, IWL_OTP_ACCESS_ABSOLUTE);
3073 +
3074 + /* checking for empty OTP or error */
3075 + if (iwl_is_otp_empty(priv))
3076 + return -EINVAL;
3077 +
3078 + /*
3079 + * start traverse link list
3080 + * until reach the max number of OTP blocks
3081 + * different devices have different number of OTP blocks
3082 + */
3083 + do {
3084 + /* save current valid block address
3085 + * check for more block on the link list
3086 + */
3087 + valid_addr = next_link_addr;
3088 + next_link_addr = link_value;
3089 + IWL_DEBUG_INFO(priv, "OTP blocks %d addr 0x%x\n",
3090 + usedblocks, next_link_addr);
3091 + if (iwl_read_otp_word(priv, next_link_addr, &link_value))
3092 + return -EINVAL;
3093 + if (!link_value) {
3094 + /*
3095 + * reach the end of link list,
3096 + * set address point to the starting address
3097 + * of the image
3098 + */
3099 + goto done;
3100 + }
3101 + /* more in the link list, continue */
3102 + usedblocks++;
3103 + } while (usedblocks < priv->cfg->max_ll_items);
3104 + /* OTP full, use last block */
3105 + IWL_DEBUG_INFO(priv, "OTP is full, use last block\n");
3106 +done:
3107 + *validblockaddr = valid_addr;
3108 + /* skip first 2 bytes (link list pointer) */
3109 + *validblockaddr += 2;
3110 + return ret;
3111 +}
3112 +
3113 /**
3114 * iwl_eeprom_init - read EEPROM contents
3115 *
3116 @@ -263,14 +394,13 @@ int iwl_eeprom_init(struct iwl_priv *priv)
3117 int sz;
3118 int ret;
3119 u16 addr;
3120 - u32 otpgp;
3121 + u16 validblockaddr = 0;
3122 + u16 cache_addr = 0;
3123
3124 priv->nvm_device_type = iwlcore_get_nvm_type(priv);
3125
3126 /* allocate eeprom */
3127 - if (priv->nvm_device_type == NVM_DEVICE_TYPE_OTP)
3128 - priv->cfg->eeprom_size =
3129 - OTP_BLOCK_SIZE * OTP_LOWER_BLOCKS_TOTAL;
3130 + IWL_DEBUG_INFO(priv, "NVM size = %d\n", priv->cfg->eeprom_size);
3131 sz = priv->cfg->eeprom_size;
3132 priv->eeprom = kzalloc(sz, GFP_KERNEL);
3133 if (!priv->eeprom) {
3134 @@ -298,46 +428,31 @@ int iwl_eeprom_init(struct iwl_priv *priv)
3135 if (ret) {
3136 IWL_ERR(priv, "Failed to initialize OTP access.\n");
3137 ret = -ENOENT;
3138 - goto err;
3139 + goto done;
3140 }
3141 _iwl_write32(priv, CSR_EEPROM_GP,
3142 iwl_read32(priv, CSR_EEPROM_GP) &
3143 ~CSR_EEPROM_GP_IF_OWNER_MSK);
3144 - /* clear */
3145 - _iwl_write32(priv, CSR_OTP_GP_REG,
3146 - iwl_read32(priv, CSR_OTP_GP_REG) |
3147 +
3148 + iwl_set_bit(priv, CSR_OTP_GP_REG,
3149 CSR_OTP_GP_REG_ECC_CORR_STATUS_MSK |
3150 CSR_OTP_GP_REG_ECC_UNCORR_STATUS_MSK);
3151 -
3152 - for (addr = 0; addr < sz; addr += sizeof(u16)) {
3153 - u32 r;
3154 -
3155 - _iwl_write32(priv, CSR_EEPROM_REG,
3156 - CSR_EEPROM_REG_MSK_ADDR & (addr << 1));
3157 -
3158 - ret = iwl_poll_direct_bit(priv, CSR_EEPROM_REG,
3159 - CSR_EEPROM_REG_READ_VALID_MSK,
3160 - IWL_EEPROM_ACCESS_TIMEOUT);
3161 - if (ret < 0) {
3162 - IWL_ERR(priv, "Time out reading OTP[%d]\n", addr);
3163 + /* traversing the linked list if no shadow ram supported */
3164 + if (!priv->cfg->shadow_ram_support) {
3165 + if (iwl_find_otp_image(priv, &validblockaddr)) {
3166 + ret = -ENOENT;
3167 goto done;
3168 }
3169 - r = _iwl_read_direct32(priv, CSR_EEPROM_REG);
3170 - /* check for ECC errors: */
3171 - otpgp = iwl_read32(priv, CSR_OTP_GP_REG);
3172 - if (otpgp & CSR_OTP_GP_REG_ECC_UNCORR_STATUS_MSK) {
3173 - /* stop in this case */
3174 - IWL_ERR(priv, "Uncorrectable OTP ECC error, Abort OTP read\n");
3175 + }
3176 + for (addr = validblockaddr; addr < validblockaddr + sz;
3177 + addr += sizeof(u16)) {
3178 + u16 eeprom_data;
3179 +
3180 + ret = iwl_read_otp_word(priv, addr, &eeprom_data);
3181 + if (ret)
3182 goto done;
3183 - }
3184 - if (otpgp & CSR_OTP_GP_REG_ECC_CORR_STATUS_MSK) {
3185 - /* continue in this case */
3186 - _iwl_write32(priv, CSR_OTP_GP_REG,
3187 - iwl_read32(priv, CSR_OTP_GP_REG) |
3188 - CSR_OTP_GP_REG_ECC_CORR_STATUS_MSK);
3189 - IWL_ERR(priv, "Correctable OTP ECC error, continue read\n");
3190 - }
3191 - e[addr / 2] = le16_to_cpu((__force __le16)(r >> 16));
3192 + e[cache_addr / 2] = eeprom_data;
3193 + cache_addr += sizeof(u16);
3194 }
3195 } else {
3196 /* eeprom is an array of 16bit values */
3197 diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.h b/drivers/net/wireless/iwlwifi/iwl-eeprom.h
3198 index 195b4ef..7899885 100644
3199 --- a/drivers/net/wireless/iwlwifi/iwl-eeprom.h
3200 +++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.h
3201 @@ -180,8 +180,14 @@ struct iwl_eeprom_channel {
3202 #define EEPROM_5050_EEPROM_VERSION (0x21E)
3203
3204 /* OTP */
3205 -#define OTP_LOWER_BLOCKS_TOTAL (3)
3206 -#define OTP_BLOCK_SIZE (0x400)
3207 +/* lower blocks contain EEPROM image and calibration data */
3208 +#define OTP_LOW_IMAGE_SIZE (2 * 512 * sizeof(u16)) /* 2 KB */
3209 +/* high blocks contain PAPD data */
3210 +#define OTP_HIGH_IMAGE_SIZE_6x00 (6 * 512 * sizeof(u16)) /* 6 KB */
3211 +#define OTP_HIGH_IMAGE_SIZE_1000 (0x200 * sizeof(u16)) /* 1024 bytes */
3212 +#define OTP_MAX_LL_ITEMS_1000 (3) /* OTP blocks for 1000 */
3213 +#define OTP_MAX_LL_ITEMS_6x00 (4) /* OTP blocks for 6x00 */
3214 +#define OTP_MAX_LL_ITEMS_6x50 (7) /* OTP blocks for 6x50 */
3215
3216 /* 2.4 GHz */
3217 extern const u8 iwl_eeprom_band_1[14];
3218 diff --git a/drivers/net/wireless/iwlwifi/iwl-prph.h b/drivers/net/wireless/iwlwifi/iwl-prph.h
3219 index 3b9cac3..d393e8f 100644
3220 --- a/drivers/net/wireless/iwlwifi/iwl-prph.h
3221 +++ b/drivers/net/wireless/iwlwifi/iwl-prph.h
3222 @@ -80,6 +80,8 @@
3223 #define APMG_RFKILL_REG (APMG_BASE + 0x0014)
3224 #define APMG_RTC_INT_STT_REG (APMG_BASE + 0x001c)
3225 #define APMG_RTC_INT_MSK_REG (APMG_BASE + 0x0020)
3226 +#define APMG_DIGITAL_SVR_REG (APMG_BASE + 0x0058)
3227 +#define APMG_ANALOG_SVR_REG (APMG_BASE + 0x006C)
3228
3229 #define APMG_CLK_VAL_DMA_CLK_RQT (0x00000200)
3230 #define APMG_CLK_VAL_BSM_CLK_RQT (0x00000800)
3231 @@ -91,7 +93,8 @@
3232 #define APMG_PS_CTRL_VAL_PWR_SRC_VMAIN (0x00000000)
3233 #define APMG_PS_CTRL_VAL_PWR_SRC_MAX (0x01000000) /* 3945 only */
3234 #define APMG_PS_CTRL_VAL_PWR_SRC_VAUX (0x02000000)
3235 -
3236 +#define APMG_SVR_VOLTAGE_CONFIG_BIT_MSK (0x000001E0) /* bit 8:5 */
3237 +#define APMG_SVR_DIGITAL_VOLTAGE_1_32 (0x00000060)
3238
3239 #define APMG_PCIDEV_STT_VAL_L1_ACT_DIS (0x00000800)
3240
3241 diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c
3242 index e26875d..474fd49 100644
3243 --- a/drivers/net/wireless/iwlwifi/iwl-scan.c
3244 +++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
3245 @@ -799,7 +799,8 @@ void iwl_bg_abort_scan(struct work_struct *work)
3246 {
3247 struct iwl_priv *priv = container_of(work, struct iwl_priv, abort_scan);
3248
3249 - if (!iwl_is_ready(priv))
3250 + if (!test_bit(STATUS_READY, &priv->status) ||
3251 + !test_bit(STATUS_GEO_CONFIGURED, &priv->status))
3252 return;
3253
3254 mutex_lock(&priv->mutex);
3255 diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
3256 index 5238433..054d6c7 100644
3257 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
3258 +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
3259 @@ -2111,7 +2111,7 @@ static void iwl3945_nic_start(struct iwl_priv *priv)
3260 */
3261 static int iwl3945_read_ucode(struct iwl_priv *priv)
3262 {
3263 - struct iwl_ucode *ucode;
3264 + const struct iwl_ucode_header *ucode;
3265 int ret = -EINVAL, index;
3266 const struct firmware *ucode_raw;
3267 /* firmware file name contains uCode/driver compatibility version */
3268 @@ -2152,22 +2152,24 @@ static int iwl3945_read_ucode(struct iwl_priv *priv)
3269 goto error;
3270
3271 /* Make sure that we got at least our header! */
3272 - if (ucode_raw->size < sizeof(*ucode)) {
3273 + if (ucode_raw->size < priv->cfg->ops->ucode->get_header_size(1)) {
3274 IWL_ERR(priv, "File size way too small!\n");
3275 ret = -EINVAL;
3276 goto err_release;
3277 }
3278
3279 /* Data from ucode file: header followed by uCode images */
3280 - ucode = (void *)ucode_raw->data;
3281 + ucode = (struct iwl_ucode_header *)ucode_raw->data;
3282
3283 priv->ucode_ver = le32_to_cpu(ucode->ver);
3284 api_ver = IWL_UCODE_API(priv->ucode_ver);
3285 - inst_size = le32_to_cpu(ucode->inst_size);
3286 - data_size = le32_to_cpu(ucode->data_size);
3287 - init_size = le32_to_cpu(ucode->init_size);
3288 - init_data_size = le32_to_cpu(ucode->init_data_size);
3289 - boot_size = le32_to_cpu(ucode->boot_size);
3290 + inst_size = priv->cfg->ops->ucode->get_inst_size(ucode, api_ver);
3291 + data_size = priv->cfg->ops->ucode->get_data_size(ucode, api_ver);
3292 + init_size = priv->cfg->ops->ucode->get_init_size(ucode, api_ver);
3293 + init_data_size =
3294 + priv->cfg->ops->ucode->get_init_data_size(ucode, api_ver);
3295 + boot_size = priv->cfg->ops->ucode->get_boot_size(ucode, api_ver);
3296 + src = priv->cfg->ops->ucode->get_data(ucode, api_ver);
3297
3298 /* api_ver should match the api version forming part of the
3299 * firmware filename ... but we don't check for that and only rely
3300 @@ -2208,12 +2210,13 @@ static int iwl3945_read_ucode(struct iwl_priv *priv)
3301
3302
3303 /* Verify size of file vs. image size info in file's header */
3304 - if (ucode_raw->size < sizeof(*ucode) +
3305 + if (ucode_raw->size != priv->cfg->ops->ucode->get_header_size(api_ver) +
3306 inst_size + data_size + init_size +
3307 init_data_size + boot_size) {
3308
3309 - IWL_DEBUG_INFO(priv, "uCode file size %zd too small\n",
3310 - ucode_raw->size);
3311 + IWL_DEBUG_INFO(priv,
3312 + "uCode file size %zd does not match expected size\n",
3313 + ucode_raw->size);
3314 ret = -EINVAL;
3315 goto err_release;
3316 }
3317 @@ -2296,44 +2299,44 @@ static int iwl3945_read_ucode(struct iwl_priv *priv)
3318 /* Copy images into buffers for card's bus-master reads ... */
3319
3320 /* Runtime instructions (first block of data in file) */
3321 - src = &ucode->data[0];
3322 - len = priv->ucode_code.len;
3323 + len = inst_size;
3324 IWL_DEBUG_INFO(priv,
3325 "Copying (but not loading) uCode instr len %zd\n", len);
3326 memcpy(priv->ucode_code.v_addr, src, len);
3327 + src += len;
3328 +
3329 IWL_DEBUG_INFO(priv, "uCode instr buf vaddr = 0x%p, paddr = 0x%08x\n",
3330 priv->ucode_code.v_addr, (u32)priv->ucode_code.p_addr);
3331
3332 /* Runtime data (2nd block)
3333 * NOTE: Copy into backup buffer will be done in iwl3945_up() */
3334 - src = &ucode->data[inst_size];
3335 - len = priv->ucode_data.len;
3336 + len = data_size;
3337 IWL_DEBUG_INFO(priv,
3338 "Copying (but not loading) uCode data len %zd\n", len);
3339 memcpy(priv->ucode_data.v_addr, src, len);
3340 memcpy(priv->ucode_data_backup.v_addr, src, len);
3341 + src += len;
3342
3343 /* Initialization instructions (3rd block) */
3344 if (init_size) {
3345 - src = &ucode->data[inst_size + data_size];
3346 - len = priv->ucode_init.len;
3347 + len = init_size;
3348 IWL_DEBUG_INFO(priv,
3349 "Copying (but not loading) init instr len %zd\n", len);
3350 memcpy(priv->ucode_init.v_addr, src, len);
3351 + src += len;
3352 }
3353
3354 /* Initialization data (4th block) */
3355 if (init_data_size) {
3356 - src = &ucode->data[inst_size + data_size + init_size];
3357 - len = priv->ucode_init_data.len;
3358 + len = init_data_size;
3359 IWL_DEBUG_INFO(priv,
3360 "Copying (but not loading) init data len %zd\n", len);
3361 memcpy(priv->ucode_init_data.v_addr, src, len);
3362 + src += len;
3363 }
3364
3365 /* Bootstrap instructions (5th block) */
3366 - src = &ucode->data[inst_size + data_size + init_size + init_data_size];
3367 - len = priv->ucode_boot.len;
3368 + len = boot_size;
3369 IWL_DEBUG_INFO(priv,
3370 "Copying (but not loading) boot instr len %zd\n", len);
3371 memcpy(priv->ucode_boot.v_addr, src, len);
3372 diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
3373 index 0e877a1..6e1b889 100644
3374 --- a/drivers/net/wireless/p54/p54usb.c
3375 +++ b/drivers/net/wireless/p54/p54usb.c
3376 @@ -66,6 +66,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
3377 {USB_DEVICE(0x0bf8, 0x1009)}, /* FUJITSU E-5400 USB D1700*/
3378 {USB_DEVICE(0x0cde, 0x0006)}, /* Medion MD40900 */
3379 {USB_DEVICE(0x0cde, 0x0008)}, /* Sagem XG703A */
3380 + {USB_DEVICE(0x0cde, 0x0015)}, /* Zcomax XG-705A */
3381 {USB_DEVICE(0x0d8e, 0x3762)}, /* DLink DWL-G120 Cohiba */
3382 {USB_DEVICE(0x124a, 0x4025)}, /* IOGear GWU513 (GW3887IK chip) */
3383 {USB_DEVICE(0x1260, 0xee22)}, /* SMC 2862W-G version 2 */
3384 diff --git a/drivers/pcmcia/at91_cf.c b/drivers/pcmcia/at91_cf.c
3385 index 9e1140f..e1dcced 100644
3386 --- a/drivers/pcmcia/at91_cf.c
3387 +++ b/drivers/pcmcia/at91_cf.c
3388 @@ -363,7 +363,7 @@ static int at91_cf_suspend(struct platform_device *pdev, pm_message_t mesg)
3389 struct at91_cf_socket *cf = platform_get_drvdata(pdev);
3390 struct at91_cf_data *board = cf->board;
3391
3392 - pcmcia_socket_dev_suspend(&pdev->dev, mesg);
3393 + pcmcia_socket_dev_suspend(&pdev->dev);
3394 if (device_may_wakeup(&pdev->dev)) {
3395 enable_irq_wake(board->det_pin);
3396 if (board->irq_pin)
3397 diff --git a/drivers/pcmcia/au1000_generic.c b/drivers/pcmcia/au1000_generic.c
3398 index 9001334..0208870 100644
3399 --- a/drivers/pcmcia/au1000_generic.c
3400 +++ b/drivers/pcmcia/au1000_generic.c
3401 @@ -515,7 +515,7 @@ static int au1x00_drv_pcmcia_probe(struct platform_device *dev)
3402 static int au1x00_drv_pcmcia_suspend(struct platform_device *dev,
3403 pm_message_t state)
3404 {
3405 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3406 + return pcmcia_socket_dev_suspend(&dev->dev);
3407 }
3408
3409 static int au1x00_drv_pcmcia_resume(struct platform_device *dev)
3410 diff --git a/drivers/pcmcia/bfin_cf_pcmcia.c b/drivers/pcmcia/bfin_cf_pcmcia.c
3411 index b59d411..300b368 100644
3412 --- a/drivers/pcmcia/bfin_cf_pcmcia.c
3413 +++ b/drivers/pcmcia/bfin_cf_pcmcia.c
3414 @@ -302,7 +302,7 @@ static int __devexit bfin_cf_remove(struct platform_device *pdev)
3415
3416 static int bfin_cf_suspend(struct platform_device *pdev, pm_message_t mesg)
3417 {
3418 - return pcmcia_socket_dev_suspend(&pdev->dev, mesg);
3419 + return pcmcia_socket_dev_suspend(&pdev->dev);
3420 }
3421
3422 static int bfin_cf_resume(struct platform_device *pdev)
3423 diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c
3424 index 0660ad1..934d4be 100644
3425 --- a/drivers/pcmcia/cs.c
3426 +++ b/drivers/pcmcia/cs.c
3427 @@ -101,7 +101,7 @@ EXPORT_SYMBOL(pcmcia_socket_list_rwsem);
3428 static int socket_resume(struct pcmcia_socket *skt);
3429 static int socket_suspend(struct pcmcia_socket *skt);
3430
3431 -int pcmcia_socket_dev_suspend(struct device *dev, pm_message_t state)
3432 +int pcmcia_socket_dev_suspend(struct device *dev)
3433 {
3434 struct pcmcia_socket *socket;
3435
3436 diff --git a/drivers/pcmcia/i82092.c b/drivers/pcmcia/i82092.c
3437 index 46561fa..a04f21c 100644
3438 --- a/drivers/pcmcia/i82092.c
3439 +++ b/drivers/pcmcia/i82092.c
3440 @@ -42,7 +42,7 @@ MODULE_DEVICE_TABLE(pci, i82092aa_pci_ids);
3441 #ifdef CONFIG_PM
3442 static int i82092aa_socket_suspend (struct pci_dev *dev, pm_message_t state)
3443 {
3444 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3445 + return pcmcia_socket_dev_suspend(&dev->dev);
3446 }
3447
3448 static int i82092aa_socket_resume (struct pci_dev *dev)
3449 diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c
3450 index 40d4953..b906abe 100644
3451 --- a/drivers/pcmcia/i82365.c
3452 +++ b/drivers/pcmcia/i82365.c
3453 @@ -1241,7 +1241,7 @@ static int pcic_init(struct pcmcia_socket *s)
3454 static int i82365_drv_pcmcia_suspend(struct platform_device *dev,
3455 pm_message_t state)
3456 {
3457 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3458 + return pcmcia_socket_dev_suspend(&dev->dev);
3459 }
3460
3461 static int i82365_drv_pcmcia_resume(struct platform_device *dev)
3462 diff --git a/drivers/pcmcia/m32r_cfc.c b/drivers/pcmcia/m32r_cfc.c
3463 index 62b4ecc..d1d89c4 100644
3464 --- a/drivers/pcmcia/m32r_cfc.c
3465 +++ b/drivers/pcmcia/m32r_cfc.c
3466 @@ -699,7 +699,7 @@ static struct pccard_operations pcc_operations = {
3467 static int cfc_drv_pcmcia_suspend(struct platform_device *dev,
3468 pm_message_t state)
3469 {
3470 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3471 + return pcmcia_socket_dev_suspend(&dev->dev);
3472 }
3473
3474 static int cfc_drv_pcmcia_resume(struct platform_device *dev)
3475 diff --git a/drivers/pcmcia/m32r_pcc.c b/drivers/pcmcia/m32r_pcc.c
3476 index 12034b4..a065583 100644
3477 --- a/drivers/pcmcia/m32r_pcc.c
3478 +++ b/drivers/pcmcia/m32r_pcc.c
3479 @@ -675,7 +675,7 @@ static struct pccard_operations pcc_operations = {
3480 static int pcc_drv_pcmcia_suspend(struct platform_device *dev,
3481 pm_message_t state)
3482 {
3483 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3484 + return pcmcia_socket_dev_suspend(&dev->dev);
3485 }
3486
3487 static int pcc_drv_pcmcia_resume(struct platform_device *dev)
3488 diff --git a/drivers/pcmcia/m8xx_pcmcia.c b/drivers/pcmcia/m8xx_pcmcia.c
3489 index d1ad096..c69f2c4 100644
3490 --- a/drivers/pcmcia/m8xx_pcmcia.c
3491 +++ b/drivers/pcmcia/m8xx_pcmcia.c
3492 @@ -1296,7 +1296,7 @@ static int m8xx_remove(struct of_device *ofdev)
3493 #ifdef CONFIG_PM
3494 static int m8xx_suspend(struct platform_device *pdev, pm_message_t state)
3495 {
3496 - return pcmcia_socket_dev_suspend(&pdev->dev, state);
3497 + return pcmcia_socket_dev_suspend(&pdev->dev);
3498 }
3499
3500 static int m8xx_resume(struct platform_device *pdev)
3501 diff --git a/drivers/pcmcia/omap_cf.c b/drivers/pcmcia/omap_cf.c
3502 index f373639..68570bc 100644
3503 --- a/drivers/pcmcia/omap_cf.c
3504 +++ b/drivers/pcmcia/omap_cf.c
3505 @@ -334,7 +334,7 @@ static int __exit omap_cf_remove(struct platform_device *pdev)
3506
3507 static int omap_cf_suspend(struct platform_device *pdev, pm_message_t mesg)
3508 {
3509 - return pcmcia_socket_dev_suspend(&pdev->dev, mesg);
3510 + return pcmcia_socket_dev_suspend(&pdev->dev);
3511 }
3512
3513 static int omap_cf_resume(struct platform_device *pdev)
3514 diff --git a/drivers/pcmcia/pd6729.c b/drivers/pcmcia/pd6729.c
3515 index 8bed1da..1c39d34 100644
3516 --- a/drivers/pcmcia/pd6729.c
3517 +++ b/drivers/pcmcia/pd6729.c
3518 @@ -758,7 +758,7 @@ static void __devexit pd6729_pci_remove(struct pci_dev *dev)
3519 #ifdef CONFIG_PM
3520 static int pd6729_socket_suspend(struct pci_dev *dev, pm_message_t state)
3521 {
3522 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3523 + return pcmcia_socket_dev_suspend(&dev->dev);
3524 }
3525
3526 static int pd6729_socket_resume(struct pci_dev *dev)
3527 diff --git a/drivers/pcmcia/pxa2xx_base.c b/drivers/pcmcia/pxa2xx_base.c
3528 index c49a726..86ad876 100644
3529 --- a/drivers/pcmcia/pxa2xx_base.c
3530 +++ b/drivers/pcmcia/pxa2xx_base.c
3531 @@ -302,7 +302,7 @@ static int pxa2xx_drv_pcmcia_remove(struct platform_device *dev)
3532
3533 static int pxa2xx_drv_pcmcia_suspend(struct platform_device *dev, pm_message_t state)
3534 {
3535 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3536 + return pcmcia_socket_dev_suspend(&dev->dev);
3537 }
3538
3539 static int pxa2xx_drv_pcmcia_resume(struct platform_device *dev)
3540 diff --git a/drivers/pcmcia/sa1100_generic.c b/drivers/pcmcia/sa1100_generic.c
3541 index d8da5ac..2d0e997 100644
3542 --- a/drivers/pcmcia/sa1100_generic.c
3543 +++ b/drivers/pcmcia/sa1100_generic.c
3544 @@ -89,7 +89,7 @@ static int sa11x0_drv_pcmcia_remove(struct platform_device *dev)
3545 static int sa11x0_drv_pcmcia_suspend(struct platform_device *dev,
3546 pm_message_t state)
3547 {
3548 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3549 + return pcmcia_socket_dev_suspend(&dev->dev);
3550 }
3551
3552 static int sa11x0_drv_pcmcia_resume(struct platform_device *dev)
3553 diff --git a/drivers/pcmcia/sa1111_generic.c b/drivers/pcmcia/sa1111_generic.c
3554 index 401052a..4be4e17 100644
3555 --- a/drivers/pcmcia/sa1111_generic.c
3556 +++ b/drivers/pcmcia/sa1111_generic.c
3557 @@ -159,7 +159,7 @@ static int __devexit pcmcia_remove(struct sa1111_dev *dev)
3558
3559 static int pcmcia_suspend(struct sa1111_dev *dev, pm_message_t state)
3560 {
3561 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3562 + return pcmcia_socket_dev_suspend(&dev->dev);
3563 }
3564
3565 static int pcmcia_resume(struct sa1111_dev *dev)
3566 diff --git a/drivers/pcmcia/tcic.c b/drivers/pcmcia/tcic.c
3567 index 8eb0423..582413f 100644
3568 --- a/drivers/pcmcia/tcic.c
3569 +++ b/drivers/pcmcia/tcic.c
3570 @@ -366,7 +366,7 @@ static int __init get_tcic_id(void)
3571 static int tcic_drv_pcmcia_suspend(struct platform_device *dev,
3572 pm_message_t state)
3573 {
3574 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3575 + return pcmcia_socket_dev_suspend(&dev->dev);
3576 }
3577
3578 static int tcic_drv_pcmcia_resume(struct platform_device *dev)
3579 diff --git a/drivers/pcmcia/vrc4171_card.c b/drivers/pcmcia/vrc4171_card.c
3580 index d4ad50d..c9fcbdc 100644
3581 --- a/drivers/pcmcia/vrc4171_card.c
3582 +++ b/drivers/pcmcia/vrc4171_card.c
3583 @@ -707,7 +707,7 @@ __setup("vrc4171_card=", vrc4171_card_setup);
3584 static int vrc4171_card_suspend(struct platform_device *dev,
3585 pm_message_t state)
3586 {
3587 - return pcmcia_socket_dev_suspend(&dev->dev, state);
3588 + return pcmcia_socket_dev_suspend(&dev->dev);
3589 }
3590
3591 static int vrc4171_card_resume(struct platform_device *dev)
3592 diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c
3593 index 3ecd7c9..f728a45 100644
3594 --- a/drivers/pcmcia/yenta_socket.c
3595 +++ b/drivers/pcmcia/yenta_socket.c
3596 @@ -1225,60 +1225,71 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i
3597 }
3598
3599 #ifdef CONFIG_PM
3600 -static int yenta_dev_suspend (struct pci_dev *dev, pm_message_t state)
3601 +static int yenta_dev_suspend_noirq(struct device *dev)
3602 {
3603 - struct yenta_socket *socket = pci_get_drvdata(dev);
3604 + struct pci_dev *pdev = to_pci_dev(dev);
3605 + struct yenta_socket *socket = pci_get_drvdata(pdev);
3606 int ret;
3607
3608 - ret = pcmcia_socket_dev_suspend(&dev->dev, state);
3609 + ret = pcmcia_socket_dev_suspend(dev);
3610
3611 - if (socket) {
3612 - if (socket->type && socket->type->save_state)
3613 - socket->type->save_state(socket);
3614 + if (!socket)
3615 + return ret;
3616
3617 - /* FIXME: pci_save_state needs to have a better interface */
3618 - pci_save_state(dev);
3619 - pci_read_config_dword(dev, 16*4, &socket->saved_state[0]);
3620 - pci_read_config_dword(dev, 17*4, &socket->saved_state[1]);
3621 - pci_disable_device(dev);
3622 + if (socket->type && socket->type->save_state)
3623 + socket->type->save_state(socket);
3624
3625 - /*
3626 - * Some laptops (IBM T22) do not like us putting the Cardbus
3627 - * bridge into D3. At a guess, some other laptop will
3628 - * probably require this, so leave it commented out for now.
3629 - */
3630 - /* pci_set_power_state(dev, 3); */
3631 - }
3632 + pci_save_state(pdev);
3633 + pci_read_config_dword(pdev, 16*4, &socket->saved_state[0]);
3634 + pci_read_config_dword(pdev, 17*4, &socket->saved_state[1]);
3635 + pci_disable_device(pdev);
3636 +
3637 + /*
3638 + * Some laptops (IBM T22) do not like us putting the Cardbus
3639 + * bridge into D3. At a guess, some other laptop will
3640 + * probably require this, so leave it commented out for now.
3641 + */
3642 + /* pci_set_power_state(dev, 3); */
3643
3644 return ret;
3645 }
3646
3647 -
3648 -static int yenta_dev_resume (struct pci_dev *dev)
3649 +static int yenta_dev_resume_noirq(struct device *dev)
3650 {
3651 - struct yenta_socket *socket = pci_get_drvdata(dev);
3652 + struct pci_dev *pdev = to_pci_dev(dev);
3653 + struct yenta_socket *socket = pci_get_drvdata(pdev);
3654 + int ret;
3655
3656 - if (socket) {
3657 - int rc;
3658 + if (!socket)
3659 + return 0;
3660
3661 - pci_set_power_state(dev, 0);
3662 - /* FIXME: pci_restore_state needs to have a better interface */
3663 - pci_restore_state(dev);
3664 - pci_write_config_dword(dev, 16*4, socket->saved_state[0]);
3665 - pci_write_config_dword(dev, 17*4, socket->saved_state[1]);
3666 + pci_write_config_dword(pdev, 16*4, socket->saved_state[0]);
3667 + pci_write_config_dword(pdev, 17*4, socket->saved_state[1]);
3668
3669 - rc = pci_enable_device(dev);
3670 - if (rc)
3671 - return rc;
3672 + ret = pci_enable_device(pdev);
3673 + if (ret)
3674 + return ret;
3675
3676 - pci_set_master(dev);
3677 + pci_set_master(pdev);
3678
3679 - if (socket->type && socket->type->restore_state)
3680 - socket->type->restore_state(socket);
3681 - }
3682 + if (socket->type && socket->type->restore_state)
3683 + socket->type->restore_state(socket);
3684
3685 - return pcmcia_socket_dev_resume(&dev->dev);
3686 + return pcmcia_socket_dev_resume(dev);
3687 }
3688 +
3689 +static struct dev_pm_ops yenta_pm_ops = {
3690 + .suspend_noirq = yenta_dev_suspend_noirq,
3691 + .resume_noirq = yenta_dev_resume_noirq,
3692 + .freeze_noirq = yenta_dev_suspend_noirq,
3693 + .thaw_noirq = yenta_dev_resume_noirq,
3694 + .poweroff_noirq = yenta_dev_suspend_noirq,
3695 + .restore_noirq = yenta_dev_resume_noirq,
3696 +};
3697 +
3698 +#define YENTA_PM_OPS (&yenta_pm_ops)
3699 +#else
3700 +#define YENTA_PM_OPS NULL
3701 #endif
3702
3703 #define CB_ID(vend,dev,type) \
3704 @@ -1376,10 +1387,7 @@ static struct pci_driver yenta_cardbus_driver = {
3705 .id_table = yenta_table,
3706 .probe = yenta_probe,
3707 .remove = __devexit_p(yenta_close),
3708 -#ifdef CONFIG_PM
3709 - .suspend = yenta_dev_suspend,
3710 - .resume = yenta_dev_resume,
3711 -#endif
3712 + .driver.pm = YENTA_PM_OPS,
3713 };
3714
3715
3716 diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
3717 index dafaa4a..a234a9d 100644
3718 --- a/drivers/platform/x86/sony-laptop.c
3719 +++ b/drivers/platform/x86/sony-laptop.c
3720 @@ -1081,6 +1081,8 @@ static int sony_nc_setup_rfkill(struct acpi_device *device,
3721 struct rfkill *rfk;
3722 enum rfkill_type type;
3723 const char *name;
3724 + int result;
3725 + bool hwblock;
3726
3727 switch (nc_type) {
3728 case SONY_WIFI:
3729 @@ -1108,6 +1110,10 @@ static int sony_nc_setup_rfkill(struct acpi_device *device,
3730 if (!rfk)
3731 return -ENOMEM;
3732
3733 + sony_call_snc_handle(0x124, 0x200, &result);
3734 + hwblock = !(result & 0x1);
3735 + rfkill_set_hw_state(rfk, hwblock);
3736 +
3737 err = rfkill_register(rfk);
3738 if (err) {
3739 rfkill_destroy(rfk);
3740 diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
3741 index e856008..d287283 100644
3742 --- a/drivers/platform/x86/thinkpad_acpi.c
3743 +++ b/drivers/platform/x86/thinkpad_acpi.c
3744 @@ -5655,16 +5655,16 @@ static const struct tpacpi_quirk brightness_quirk_table[] __initconst = {
3745 /* Models with ATI GPUs known to require ECNVRAM mode */
3746 TPACPI_Q_IBM('1', 'Y', TPACPI_BRGHT_Q_EC), /* T43/p ATI */
3747
3748 - /* Models with ATI GPUs (waiting confirmation) */
3749 - TPACPI_Q_IBM('1', 'R', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
3750 + /* Models with ATI GPUs that can use ECNVRAM */
3751 + TPACPI_Q_IBM('1', 'R', TPACPI_BRGHT_Q_EC),
3752 TPACPI_Q_IBM('1', 'Q', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
3753 TPACPI_Q_IBM('7', '6', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
3754 TPACPI_Q_IBM('7', '8', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
3755
3756 - /* Models with Intel Extreme Graphics 2 (waiting confirmation) */
3757 + /* Models with Intel Extreme Graphics 2 */
3758 + TPACPI_Q_IBM('1', 'U', TPACPI_BRGHT_Q_NOEC),
3759 TPACPI_Q_IBM('1', 'V', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_NOEC),
3760 TPACPI_Q_IBM('1', 'W', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_NOEC),
3761 - TPACPI_Q_IBM('1', 'U', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_NOEC),
3762
3763 /* Models with Intel GMA900 */
3764 TPACPI_Q_IBM('7', '0', TPACPI_BRGHT_Q_NOEC), /* T43, R52 */
3765 diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
3766 index b4a7650..4fff4e5 100644
3767 --- a/drivers/serial/bfin_5xx.c
3768 +++ b/drivers/serial/bfin_5xx.c
3769 @@ -42,6 +42,10 @@
3770 # undef CONFIG_EARLY_PRINTK
3771 #endif
3772
3773 +#ifdef CONFIG_SERIAL_BFIN_MODULE
3774 +# undef CONFIG_EARLY_PRINTK
3775 +#endif
3776 +
3777 /* UART name and device definitions */
3778 #define BFIN_SERIAL_NAME "ttyBF"
3779 #define BFIN_SERIAL_MAJOR 204
3780 diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c
3781 index 79c9c5f..6ecb51b 100644
3782 --- a/drivers/serial/serial_cs.c
3783 +++ b/drivers/serial/serial_cs.c
3784 @@ -884,6 +884,7 @@ static struct pcmcia_device_id serial_ids[] = {
3785 PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */
3786 PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */
3787 PCMCIA_DEVICE_CIS_PROD_ID12("MultiTech", "PCMCIA 56K DataFax", 0x842047ee, 0xc2efcf03, "MT5634ZLX.cis"),
3788 + PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-2", 0x96913a85, 0x27ab5437, "COMpad2.cis"),
3789 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "COMpad4.cis"),
3790 PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b627, "COMpad2.cis"),
3791 PCMCIA_DEVICE_CIS_PROD_ID2("RS-COM 2P", 0xad20b156, "RS-COM-2P.cis"),
3792 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
3793 index 2bfc41e..e3861b2 100644
3794 --- a/drivers/usb/class/cdc-acm.c
3795 +++ b/drivers/usb/class/cdc-acm.c
3796 @@ -59,6 +59,7 @@
3797 #include <linux/init.h>
3798 #include <linux/slab.h>
3799 #include <linux/tty.h>
3800 +#include <linux/serial.h>
3801 #include <linux/tty_driver.h>
3802 #include <linux/tty_flip.h>
3803 #include <linux/module.h>
3804 @@ -609,6 +610,7 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
3805 acm->throttle = 0;
3806
3807 tasklet_schedule(&acm->urb_task);
3808 + set_bit(ASYNCB_INITIALIZED, &acm->port.flags);
3809 rv = tty_port_block_til_ready(&acm->port, tty, filp);
3810 done:
3811 mutex_unlock(&acm->mutex);
3812 @@ -858,10 +860,7 @@ static void acm_tty_set_termios(struct tty_struct *tty,
3813 if (!ACM_READY(acm))
3814 return;
3815
3816 - /* FIXME: Needs to support the tty_baud interface */
3817 - /* FIXME: Broken on sparc */
3818 - newline.dwDTERate = cpu_to_le32p(acm_tty_speed +
3819 - (termios->c_cflag & CBAUD & ~CBAUDEX) + (termios->c_cflag & CBAUDEX ? 15 : 0));
3820 + newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
3821 newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
3822 newline.bParityType = termios->c_cflag & PARENB ?
3823 (termios->c_cflag & PARODD ? 1 : 2) +
3824 diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
3825 index ba589d4..a9c3399 100644
3826 --- a/drivers/usb/class/cdc-wdm.c
3827 +++ b/drivers/usb/class/cdc-wdm.c
3828 @@ -313,8 +313,13 @@ static ssize_t wdm_write
3829 r = usb_autopm_get_interface(desc->intf);
3830 if (r < 0)
3831 goto outnp;
3832 - r = wait_event_interruptible(desc->wait, !test_bit(WDM_IN_USE,
3833 - &desc->flags));
3834 +
3835 + if (!file->f_flags && O_NONBLOCK)
3836 + r = wait_event_interruptible(desc->wait, !test_bit(WDM_IN_USE,
3837 + &desc->flags));
3838 + else
3839 + if (test_bit(WDM_IN_USE, &desc->flags))
3840 + r = -EAGAIN;
3841 if (r < 0)
3842 goto out;
3843
3844 @@ -377,7 +382,7 @@ outnl:
3845 static ssize_t wdm_read
3846 (struct file *file, char __user *buffer, size_t count, loff_t *ppos)
3847 {
3848 - int rv, cntr;
3849 + int rv, cntr = 0;
3850 int i = 0;
3851 struct wdm_device *desc = file->private_data;
3852
3853 @@ -389,10 +394,23 @@ static ssize_t wdm_read
3854 if (desc->length == 0) {
3855 desc->read = 0;
3856 retry:
3857 + if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
3858 + rv = -ENODEV;
3859 + goto err;
3860 + }
3861 i++;
3862 - rv = wait_event_interruptible(desc->wait,
3863 - test_bit(WDM_READ, &desc->flags));
3864 + if (file->f_flags & O_NONBLOCK) {
3865 + if (!test_bit(WDM_READ, &desc->flags)) {
3866 + rv = cntr ? cntr : -EAGAIN;
3867 + goto err;
3868 + }
3869 + rv = 0;
3870 + } else {
3871 + rv = wait_event_interruptible(desc->wait,
3872 + test_bit(WDM_READ, &desc->flags));
3873 + }
3874
3875 + /* may have happened while we slept */
3876 if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
3877 rv = -ENODEV;
3878 goto err;
3879 @@ -448,7 +466,7 @@ retry:
3880
3881 err:
3882 mutex_unlock(&desc->rlock);
3883 - if (rv < 0)
3884 + if (rv < 0 && rv != -EAGAIN)
3885 dev_err(&desc->intf->dev, "wdm_read: exit error\n");
3886 return rv;
3887 }
3888 diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c
3889 index b09a527..21b3719 100644
3890 --- a/drivers/usb/class/usbtmc.c
3891 +++ b/drivers/usb/class/usbtmc.c
3892 @@ -367,13 +367,13 @@ static ssize_t usbtmc_read(struct file *filp, char __user *buf,
3893 {
3894 struct usbtmc_device_data *data;
3895 struct device *dev;
3896 - unsigned long int n_characters;
3897 + u32 n_characters;
3898 u8 *buffer;
3899 int actual;
3900 - int done;
3901 - int remaining;
3902 + size_t done;
3903 + size_t remaining;
3904 int retval;
3905 - int this_part;
3906 + size_t this_part;
3907
3908 /* Get pointer to private data structure */
3909 data = filp->private_data;
3910 @@ -455,6 +455,18 @@ static ssize_t usbtmc_read(struct file *filp, char __user *buf,
3911 (buffer[6] << 16) +
3912 (buffer[7] << 24);
3913
3914 + /* Ensure the instrument doesn't lie about it */
3915 + if(n_characters > actual - 12) {
3916 + dev_err(dev, "Device lies about message size: %zu > %zu\n", n_characters, actual - 12);
3917 + n_characters = actual - 12;
3918 + }
3919 +
3920 + /* Ensure the instrument doesn't send more back than requested */
3921 + if(n_characters > this_part) {
3922 + dev_err(dev, "Device returns more than requested: %zu > %zu\n", done + n_characters, done + this_part);
3923 + n_characters = this_part;
3924 + }
3925 +
3926 /* Copy buffer to user space */
3927 if (copy_to_user(buf + done, &buffer[12], n_characters)) {
3928 /* There must have been an addressing problem */
3929 @@ -465,6 +477,8 @@ static ssize_t usbtmc_read(struct file *filp, char __user *buf,
3930 done += n_characters;
3931 if (n_characters < USBTMC_SIZE_IOBUFFER)
3932 remaining = 0;
3933 + else
3934 + remaining -= n_characters;
3935 }
3936
3937 /* Update file position value */
3938 diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
3939 index a16c538..0d3af6a 100644
3940 --- a/drivers/usb/core/config.c
3941 +++ b/drivers/usb/core/config.c
3942 @@ -105,7 +105,7 @@ static int usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno,
3943 ep->ss_ep_comp->extralen = i;
3944 buffer += i;
3945 size -= i;
3946 - retval = buffer - buffer_start + i;
3947 + retval = buffer - buffer_start;
3948 if (num_skipped > 0)
3949 dev_dbg(ddev, "skipped %d descriptor%s after %s\n",
3950 num_skipped, plural(num_skipped),
3951 diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
3952 index a949259..5b22a4d 100644
3953 --- a/drivers/usb/host/sl811-hcd.c
3954 +++ b/drivers/usb/host/sl811-hcd.c
3955 @@ -719,8 +719,12 @@ retry:
3956 /* port status seems weird until after reset, so
3957 * force the reset and make khubd clean up later.
3958 */
3959 - sl811->port1 |= (1 << USB_PORT_FEAT_C_CONNECTION)
3960 - | (1 << USB_PORT_FEAT_CONNECTION);
3961 + if (sl811->stat_insrmv & 1)
3962 + sl811->port1 |= 1 << USB_PORT_FEAT_CONNECTION;
3963 + else
3964 + sl811->port1 &= ~(1 << USB_PORT_FEAT_CONNECTION);
3965 +
3966 + sl811->port1 |= 1 << USB_PORT_FEAT_C_CONNECTION;
3967
3968 } else if (irqstat & SL11H_INTMASK_RD) {
3969 if (sl811->port1 & (1 << USB_PORT_FEAT_SUSPEND)) {
3970 diff --git a/drivers/usb/host/xhci-dbg.c b/drivers/usb/host/xhci-dbg.c
3971 index 705e343..33128d5 100644
3972 --- a/drivers/usb/host/xhci-dbg.c
3973 +++ b/drivers/usb/host/xhci-dbg.c
3974 @@ -413,7 +413,8 @@ void xhci_dbg_slot_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx)
3975 int i;
3976
3977 struct xhci_slot_ctx *slot_ctx = xhci_get_slot_ctx(xhci, ctx);
3978 - dma_addr_t dma = ctx->dma + ((unsigned long)slot_ctx - (unsigned long)ctx);
3979 + dma_addr_t dma = ctx->dma +
3980 + ((unsigned long)slot_ctx - (unsigned long)ctx->bytes);
3981 int csz = HCC_64BYTE_CONTEXT(xhci->hcc_params);
3982
3983 xhci_dbg(xhci, "Slot Context:\n");
3984 @@ -459,7 +460,7 @@ void xhci_dbg_ep_ctx(struct xhci_hcd *xhci,
3985 for (i = 0; i < last_ep_ctx; ++i) {
3986 struct xhci_ep_ctx *ep_ctx = xhci_get_ep_ctx(xhci, ctx, i);
3987 dma_addr_t dma = ctx->dma +
3988 - ((unsigned long)ep_ctx - (unsigned long)ctx);
3989 + ((unsigned long)ep_ctx - (unsigned long)ctx->bytes);
3990
3991 xhci_dbg(xhci, "Endpoint %02d Context:\n", i);
3992 xhci_dbg(xhci, "@%p (virt) @%08llx (dma) %#08x - ep_info\n",
3993 diff --git a/drivers/usb/host/xhci-hcd.c b/drivers/usb/host/xhci-hcd.c
3994 index 816c39c..e478a63 100644
3995 --- a/drivers/usb/host/xhci-hcd.c
3996 +++ b/drivers/usb/host/xhci-hcd.c
3997 @@ -22,12 +22,18 @@
3998
3999 #include <linux/irq.h>
4000 #include <linux/module.h>
4001 +#include <linux/moduleparam.h>
4002
4003 #include "xhci.h"
4004
4005 #define DRIVER_AUTHOR "Sarah Sharp"
4006 #define DRIVER_DESC "'eXtensible' Host Controller (xHC) Driver"
4007
4008 +/* Some 0.95 hardware can't handle the chain bit on a Link TRB being cleared */
4009 +static int link_quirk;
4010 +module_param(link_quirk, int, S_IRUGO | S_IWUSR);
4011 +MODULE_PARM_DESC(link_quirk, "Don't clear the chain bit on a link TRB");
4012 +
4013 /* TODO: copied from ehci-hcd.c - can this be refactored? */
4014 /*
4015 * handshake - spin reading hc until handshake completes or fails
4016 @@ -214,6 +220,12 @@ int xhci_init(struct usb_hcd *hcd)
4017
4018 xhci_dbg(xhci, "xhci_init\n");
4019 spin_lock_init(&xhci->lock);
4020 + if (link_quirk) {
4021 + xhci_dbg(xhci, "QUIRK: Not clearing Link TRB chain bits.\n");
4022 + xhci->quirks |= XHCI_LINK_TRB_QUIRK;
4023 + } else {
4024 + xhci_dbg(xhci, "xHCI doesn't need link TRB QUIRK\n");
4025 + }
4026 retval = xhci_mem_init(xhci, GFP_KERNEL);
4027 xhci_dbg(xhci, "Finished xhci_init\n");
4028
4029 @@ -555,13 +567,22 @@ unsigned int xhci_get_endpoint_flag(struct usb_endpoint_descriptor *desc)
4030 return 1 << (xhci_get_endpoint_index(desc) + 1);
4031 }
4032
4033 +/* Find the flag for this endpoint (for use in the control context). Use the
4034 + * endpoint index to create a bitmask. The slot context is bit 0, endpoint 0 is
4035 + * bit 1, etc.
4036 + */
4037 +unsigned int xhci_get_endpoint_flag_from_index(unsigned int ep_index)
4038 +{
4039 + return 1 << (ep_index + 1);
4040 +}
4041 +
4042 /* Compute the last valid endpoint context index. Basically, this is the
4043 * endpoint index plus one. For slot contexts with more than valid endpoint,
4044 * we find the most significant bit set in the added contexts flags.
4045 * e.g. ep 1 IN (with epnum 0x81) => added_ctxs = 0b1000
4046 * fls(0b1000) = 4, but the endpoint context index is 3, so subtract one.
4047 */
4048 -static inline unsigned int xhci_last_valid_endpoint(u32 added_ctxs)
4049 +unsigned int xhci_last_valid_endpoint(u32 added_ctxs)
4050 {
4051 return fls(added_ctxs) - 1;
4052 }
4053 @@ -589,6 +610,70 @@ int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev,
4054 return 1;
4055 }
4056
4057 +static int xhci_configure_endpoint(struct xhci_hcd *xhci,
4058 + struct usb_device *udev, struct xhci_virt_device *virt_dev,
4059 + bool ctx_change);
4060 +
4061 +/*
4062 + * Full speed devices may have a max packet size greater than 8 bytes, but the
4063 + * USB core doesn't know that until it reads the first 8 bytes of the
4064 + * descriptor. If the usb_device's max packet size changes after that point,
4065 + * we need to issue an evaluate context command and wait on it.
4066 + */
4067 +static int xhci_check_maxpacket(struct xhci_hcd *xhci, unsigned int slot_id,
4068 + unsigned int ep_index, struct urb *urb)
4069 +{
4070 + struct xhci_container_ctx *in_ctx;
4071 + struct xhci_container_ctx *out_ctx;
4072 + struct xhci_input_control_ctx *ctrl_ctx;
4073 + struct xhci_ep_ctx *ep_ctx;
4074 + int max_packet_size;
4075 + int hw_max_packet_size;
4076 + int ret = 0;
4077 +
4078 + out_ctx = xhci->devs[slot_id]->out_ctx;
4079 + ep_ctx = xhci_get_ep_ctx(xhci, out_ctx, ep_index);
4080 + hw_max_packet_size = MAX_PACKET_DECODED(ep_ctx->ep_info2);
4081 + max_packet_size = urb->dev->ep0.desc.wMaxPacketSize;
4082 + if (hw_max_packet_size != max_packet_size) {
4083 + xhci_dbg(xhci, "Max Packet Size for ep 0 changed.\n");
4084 + xhci_dbg(xhci, "Max packet size in usb_device = %d\n",
4085 + max_packet_size);
4086 + xhci_dbg(xhci, "Max packet size in xHCI HW = %d\n",
4087 + hw_max_packet_size);
4088 + xhci_dbg(xhci, "Issuing evaluate context command.\n");
4089 +
4090 + /* Set up the modified control endpoint 0 */
4091 + xhci_endpoint_copy(xhci, xhci->devs[slot_id], ep_index);
4092 + in_ctx = xhci->devs[slot_id]->in_ctx;
4093 + ep_ctx = xhci_get_ep_ctx(xhci, in_ctx, ep_index);
4094 + ep_ctx->ep_info2 &= ~MAX_PACKET_MASK;
4095 + ep_ctx->ep_info2 |= MAX_PACKET(max_packet_size);
4096 +
4097 + /* Set up the input context flags for the command */
4098 + /* FIXME: This won't work if a non-default control endpoint
4099 + * changes max packet sizes.
4100 + */
4101 + ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx);
4102 + ctrl_ctx->add_flags = EP0_FLAG;
4103 + ctrl_ctx->drop_flags = 0;
4104 +
4105 + xhci_dbg(xhci, "Slot %d input context\n", slot_id);
4106 + xhci_dbg_ctx(xhci, in_ctx, ep_index);
4107 + xhci_dbg(xhci, "Slot %d output context\n", slot_id);
4108 + xhci_dbg_ctx(xhci, out_ctx, ep_index);
4109 +
4110 + ret = xhci_configure_endpoint(xhci, urb->dev,
4111 + xhci->devs[slot_id], true);
4112 +
4113 + /* Clean up the input context for later use by bandwidth
4114 + * functions.
4115 + */
4116 + ctrl_ctx->add_flags = SLOT_FLAG;
4117 + }
4118 + return ret;
4119 +}
4120 +
4121 /*
4122 * non-error returns are a promise to giveback() the urb later
4123 * we drop ownership so next owner (or urb unlink) can get it
4124 @@ -600,13 +685,13 @@ int xhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags)
4125 int ret = 0;
4126 unsigned int slot_id, ep_index;
4127
4128 +
4129 if (!urb || xhci_check_args(hcd, urb->dev, urb->ep, true, __func__) <= 0)
4130 return -EINVAL;
4131
4132 slot_id = urb->dev->slot_id;
4133 ep_index = xhci_get_endpoint_index(&urb->ep->desc);
4134
4135 - spin_lock_irqsave(&xhci->lock, flags);
4136 if (!xhci->devs || !xhci->devs[slot_id]) {
4137 if (!in_interrupt())
4138 dev_warn(&urb->dev->dev, "WARN: urb submitted for dev with no Slot ID\n");
4139 @@ -619,19 +704,38 @@ int xhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags)
4140 ret = -ESHUTDOWN;
4141 goto exit;
4142 }
4143 - if (usb_endpoint_xfer_control(&urb->ep->desc))
4144 + if (usb_endpoint_xfer_control(&urb->ep->desc)) {
4145 + /* Check to see if the max packet size for the default control
4146 + * endpoint changed during FS device enumeration
4147 + */
4148 + if (urb->dev->speed == USB_SPEED_FULL) {
4149 + ret = xhci_check_maxpacket(xhci, slot_id,
4150 + ep_index, urb);
4151 + if (ret < 0)
4152 + return ret;
4153 + }
4154 +
4155 /* We have a spinlock and interrupts disabled, so we must pass
4156 * atomic context to this function, which may allocate memory.
4157 */
4158 + spin_lock_irqsave(&xhci->lock, flags);
4159 ret = xhci_queue_ctrl_tx(xhci, GFP_ATOMIC, urb,
4160 slot_id, ep_index);
4161 - else if (usb_endpoint_xfer_bulk(&urb->ep->desc))
4162 + spin_unlock_irqrestore(&xhci->lock, flags);
4163 + } else if (usb_endpoint_xfer_bulk(&urb->ep->desc)) {
4164 + spin_lock_irqsave(&xhci->lock, flags);
4165 ret = xhci_queue_bulk_tx(xhci, GFP_ATOMIC, urb,
4166 slot_id, ep_index);
4167 - else
4168 + spin_unlock_irqrestore(&xhci->lock, flags);
4169 + } else if (usb_endpoint_xfer_int(&urb->ep->desc)) {
4170 + spin_lock_irqsave(&xhci->lock, flags);
4171 + ret = xhci_queue_intr_tx(xhci, GFP_ATOMIC, urb,
4172 + slot_id, ep_index);
4173 + spin_unlock_irqrestore(&xhci->lock, flags);
4174 + } else {
4175 ret = -EINVAL;
4176 + }
4177 exit:
4178 - spin_unlock_irqrestore(&xhci->lock, flags);
4179 return ret;
4180 }
4181
4182 @@ -930,6 +1034,122 @@ static void xhci_zero_in_ctx(struct xhci_hcd *xhci, struct xhci_virt_device *vir
4183 }
4184 }
4185
4186 +static int xhci_configure_endpoint_result(struct xhci_hcd *xhci,
4187 + struct usb_device *udev, struct xhci_virt_device *virt_dev)
4188 +{
4189 + int ret;
4190 +
4191 + switch (virt_dev->cmd_status) {
4192 + case COMP_ENOMEM:
4193 + dev_warn(&udev->dev, "Not enough host controller resources "
4194 + "for new device state.\n");
4195 + ret = -ENOMEM;
4196 + /* FIXME: can we allocate more resources for the HC? */
4197 + break;
4198 + case COMP_BW_ERR:
4199 + dev_warn(&udev->dev, "Not enough bandwidth "
4200 + "for new device state.\n");
4201 + ret = -ENOSPC;
4202 + /* FIXME: can we go back to the old state? */
4203 + break;
4204 + case COMP_TRB_ERR:
4205 + /* the HCD set up something wrong */
4206 + dev_warn(&udev->dev, "ERROR: Endpoint drop flag = 0, "
4207 + "add flag = 1, "
4208 + "and endpoint is not disabled.\n");
4209 + ret = -EINVAL;
4210 + break;
4211 + case COMP_SUCCESS:
4212 + dev_dbg(&udev->dev, "Successful Endpoint Configure command\n");
4213 + ret = 0;
4214 + break;
4215 + default:
4216 + xhci_err(xhci, "ERROR: unexpected command completion "
4217 + "code 0x%x.\n", virt_dev->cmd_status);
4218 + ret = -EINVAL;
4219 + break;
4220 + }
4221 + return ret;
4222 +}
4223 +
4224 +static int xhci_evaluate_context_result(struct xhci_hcd *xhci,
4225 + struct usb_device *udev, struct xhci_virt_device *virt_dev)
4226 +{
4227 + int ret;
4228 +
4229 + switch (virt_dev->cmd_status) {
4230 + case COMP_EINVAL:
4231 + dev_warn(&udev->dev, "WARN: xHCI driver setup invalid evaluate "
4232 + "context command.\n");
4233 + ret = -EINVAL;
4234 + break;
4235 + case COMP_EBADSLT:
4236 + dev_warn(&udev->dev, "WARN: slot not enabled for"
4237 + "evaluate context command.\n");
4238 + case COMP_CTX_STATE:
4239 + dev_warn(&udev->dev, "WARN: invalid context state for "
4240 + "evaluate context command.\n");
4241 + xhci_dbg_ctx(xhci, virt_dev->out_ctx, 1);
4242 + ret = -EINVAL;
4243 + break;
4244 + case COMP_SUCCESS:
4245 + dev_dbg(&udev->dev, "Successful evaluate context command\n");
4246 + ret = 0;
4247 + break;
4248 + default:
4249 + xhci_err(xhci, "ERROR: unexpected command completion "
4250 + "code 0x%x.\n", virt_dev->cmd_status);
4251 + ret = -EINVAL;
4252 + break;
4253 + }
4254 + return ret;
4255 +}
4256 +
4257 +/* Issue a configure endpoint command or evaluate context command
4258 + * and wait for it to finish.
4259 + */
4260 +static int xhci_configure_endpoint(struct xhci_hcd *xhci,
4261 + struct usb_device *udev, struct xhci_virt_device *virt_dev,
4262 + bool ctx_change)
4263 +{
4264 + int ret;
4265 + int timeleft;
4266 + unsigned long flags;
4267 +
4268 + spin_lock_irqsave(&xhci->lock, flags);
4269 + if (!ctx_change)
4270 + ret = xhci_queue_configure_endpoint(xhci, virt_dev->in_ctx->dma,
4271 + udev->slot_id);
4272 + else
4273 + ret = xhci_queue_evaluate_context(xhci, virt_dev->in_ctx->dma,
4274 + udev->slot_id);
4275 + if (ret < 0) {
4276 + spin_unlock_irqrestore(&xhci->lock, flags);
4277 + xhci_dbg(xhci, "FIXME allocate a new ring segment\n");
4278 + return -ENOMEM;
4279 + }
4280 + xhci_ring_cmd_db(xhci);
4281 + spin_unlock_irqrestore(&xhci->lock, flags);
4282 +
4283 + /* Wait for the configure endpoint command to complete */
4284 + timeleft = wait_for_completion_interruptible_timeout(
4285 + &virt_dev->cmd_completion,
4286 + USB_CTRL_SET_TIMEOUT);
4287 + if (timeleft <= 0) {
4288 + xhci_warn(xhci, "%s while waiting for %s command\n",
4289 + timeleft == 0 ? "Timeout" : "Signal",
4290 + ctx_change == 0 ?
4291 + "configure endpoint" :
4292 + "evaluate context");
4293 + /* FIXME cancel the configure endpoint command */
4294 + return -ETIME;
4295 + }
4296 +
4297 + if (!ctx_change)
4298 + return xhci_configure_endpoint_result(xhci, udev, virt_dev);
4299 + return xhci_evaluate_context_result(xhci, udev, virt_dev);
4300 +}
4301 +
4302 /* Called after one or more calls to xhci_add_endpoint() or
4303 * xhci_drop_endpoint(). If this call fails, the USB core is expected
4304 * to call xhci_reset_bandwidth().
4305 @@ -944,8 +1164,6 @@ int xhci_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)
4306 {
4307 int i;
4308 int ret = 0;
4309 - int timeleft;
4310 - unsigned long flags;
4311 struct xhci_hcd *xhci;
4312 struct xhci_virt_device *virt_dev;
4313 struct xhci_input_control_ctx *ctrl_ctx;
4314 @@ -975,56 +1193,7 @@ int xhci_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)
4315 xhci_dbg_ctx(xhci, virt_dev->in_ctx,
4316 LAST_CTX_TO_EP_NUM(slot_ctx->dev_info));
4317
4318 - spin_lock_irqsave(&xhci->lock, flags);
4319 - ret = xhci_queue_configure_endpoint(xhci, virt_dev->in_ctx->dma,
4320 - udev->slot_id);
4321 - if (ret < 0) {
4322 - spin_unlock_irqrestore(&xhci->lock, flags);
4323 - xhci_dbg(xhci, "FIXME allocate a new ring segment\n");
4324 - return -ENOMEM;
4325 - }
4326 - xhci_ring_cmd_db(xhci);
4327 - spin_unlock_irqrestore(&xhci->lock, flags);
4328 -
4329 - /* Wait for the configure endpoint command to complete */
4330 - timeleft = wait_for_completion_interruptible_timeout(
4331 - &virt_dev->cmd_completion,
4332 - USB_CTRL_SET_TIMEOUT);
4333 - if (timeleft <= 0) {
4334 - xhci_warn(xhci, "%s while waiting for configure endpoint command\n",
4335 - timeleft == 0 ? "Timeout" : "Signal");
4336 - /* FIXME cancel the configure endpoint command */
4337 - return -ETIME;
4338 - }
4339 -
4340 - switch (virt_dev->cmd_status) {
4341 - case COMP_ENOMEM:
4342 - dev_warn(&udev->dev, "Not enough host controller resources "
4343 - "for new device state.\n");
4344 - ret = -ENOMEM;
4345 - /* FIXME: can we allocate more resources for the HC? */
4346 - break;
4347 - case COMP_BW_ERR:
4348 - dev_warn(&udev->dev, "Not enough bandwidth "
4349 - "for new device state.\n");
4350 - ret = -ENOSPC;
4351 - /* FIXME: can we go back to the old state? */
4352 - break;
4353 - case COMP_TRB_ERR:
4354 - /* the HCD set up something wrong */
4355 - dev_warn(&udev->dev, "ERROR: Endpoint drop flag = 0, add flag = 1, "
4356 - "and endpoint is not disabled.\n");
4357 - ret = -EINVAL;
4358 - break;
4359 - case COMP_SUCCESS:
4360 - dev_dbg(&udev->dev, "Successful Endpoint Configure command\n");
4361 - break;
4362 - default:
4363 - xhci_err(xhci, "ERROR: unexpected command completion "
4364 - "code 0x%x.\n", virt_dev->cmd_status);
4365 - ret = -EINVAL;
4366 - break;
4367 - }
4368 + ret = xhci_configure_endpoint(xhci, udev, virt_dev, false);
4369 if (ret) {
4370 /* Callee should call reset_bandwidth() */
4371 return ret;
4372 @@ -1075,6 +1244,75 @@ void xhci_reset_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)
4373 xhci_zero_in_ctx(xhci, virt_dev);
4374 }
4375
4376 +void xhci_setup_input_ctx_for_quirk(struct xhci_hcd *xhci,
4377 + unsigned int slot_id, unsigned int ep_index,
4378 + struct xhci_dequeue_state *deq_state)
4379 +{
4380 + struct xhci_container_ctx *in_ctx;
4381 + struct xhci_input_control_ctx *ctrl_ctx;
4382 + struct xhci_ep_ctx *ep_ctx;
4383 + u32 added_ctxs;
4384 + dma_addr_t addr;
4385 +
4386 + xhci_endpoint_copy(xhci, xhci->devs[slot_id], ep_index);
4387 + in_ctx = xhci->devs[slot_id]->in_ctx;
4388 + ep_ctx = xhci_get_ep_ctx(xhci, in_ctx, ep_index);
4389 + addr = xhci_trb_virt_to_dma(deq_state->new_deq_seg,
4390 + deq_state->new_deq_ptr);
4391 + if (addr == 0) {
4392 + xhci_warn(xhci, "WARN Cannot submit config ep after "
4393 + "reset ep command\n");
4394 + xhci_warn(xhci, "WARN deq seg = %p, deq ptr = %p\n",
4395 + deq_state->new_deq_seg,
4396 + deq_state->new_deq_ptr);
4397 + return;
4398 + }
4399 + ep_ctx->deq = addr | deq_state->new_cycle_state;
4400 +
4401 + xhci_slot_copy(xhci, xhci->devs[slot_id]);
4402 +
4403 + ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx);
4404 + added_ctxs = xhci_get_endpoint_flag_from_index(ep_index);
4405 + ctrl_ctx->add_flags = added_ctxs | SLOT_FLAG;
4406 + ctrl_ctx->drop_flags = added_ctxs;
4407 +
4408 + xhci_dbg(xhci, "Slot ID %d Input Context:\n", slot_id);
4409 + xhci_dbg_ctx(xhci, in_ctx, ep_index);
4410 +}
4411 +
4412 +void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci,
4413 + struct usb_device *udev,
4414 + unsigned int ep_index, struct xhci_ring *ep_ring)
4415 +{
4416 + struct xhci_dequeue_state deq_state;
4417 +
4418 + xhci_dbg(xhci, "Cleaning up stalled endpoint ring\n");
4419 + /* We need to move the HW's dequeue pointer past this TD,
4420 + * or it will attempt to resend it on the next doorbell ring.
4421 + */
4422 + xhci_find_new_dequeue_state(xhci, udev->slot_id,
4423 + ep_index, ep_ring->stopped_td,
4424 + &deq_state);
4425 +
4426 + /* HW with the reset endpoint quirk will use the saved dequeue state to
4427 + * issue a configure endpoint command later.
4428 + */
4429 + if (!(xhci->quirks & XHCI_RESET_EP_QUIRK)) {
4430 + xhci_dbg(xhci, "Queueing new dequeue state\n");
4431 + xhci_queue_new_dequeue_state(xhci, ep_ring,
4432 + udev->slot_id,
4433 + ep_index, &deq_state);
4434 + } else {
4435 + /* Better hope no one uses the input context between now and the
4436 + * reset endpoint completion!
4437 + */
4438 + xhci_dbg(xhci, "Setting up input context for "
4439 + "configure endpoint command\n");
4440 + xhci_setup_input_ctx_for_quirk(xhci, udev->slot_id,
4441 + ep_index, &deq_state);
4442 + }
4443 +}
4444 +
4445 /* Deal with stalled endpoints. The core should have sent the control message
4446 * to clear the halt condition. However, we need to make the xHCI hardware
4447 * reset its sequence number, since a device will expect a sequence number of
4448 @@ -1089,7 +1327,6 @@ void xhci_endpoint_reset(struct usb_hcd *hcd,
4449 unsigned int ep_index;
4450 unsigned long flags;
4451 int ret;
4452 - struct xhci_dequeue_state deq_state;
4453 struct xhci_ring *ep_ring;
4454
4455 xhci = hcd_to_xhci(hcd);
4456 @@ -1106,6 +1343,10 @@ void xhci_endpoint_reset(struct usb_hcd *hcd,
4457 ep->desc.bEndpointAddress);
4458 return;
4459 }
4460 + if (usb_endpoint_xfer_control(&ep->desc)) {
4461 + xhci_dbg(xhci, "Control endpoint stall already handled.\n");
4462 + return;
4463 + }
4464
4465 xhci_dbg(xhci, "Queueing reset endpoint command\n");
4466 spin_lock_irqsave(&xhci->lock, flags);
4467 @@ -1116,16 +1357,7 @@ void xhci_endpoint_reset(struct usb_hcd *hcd,
4468 * command. Better hope that last command worked!
4469 */
4470 if (!ret) {
4471 - xhci_dbg(xhci, "Cleaning up stalled endpoint ring\n");
4472 - /* We need to move the HW's dequeue pointer past this TD,
4473 - * or it will attempt to resend it on the next doorbell ring.
4474 - */
4475 - xhci_find_new_dequeue_state(xhci, udev->slot_id,
4476 - ep_index, ep_ring->stopped_td, &deq_state);
4477 - xhci_dbg(xhci, "Queueing new dequeue state\n");
4478 - xhci_queue_new_dequeue_state(xhci, ep_ring,
4479 - udev->slot_id,
4480 - ep_index, &deq_state);
4481 + xhci_cleanup_stalled_ring(xhci, udev, ep_index, ep_ring);
4482 kfree(ep_ring->stopped_td);
4483 xhci_ring_cmd_db(xhci);
4484 }
4485 diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
4486 index e6b9a1c..55920b3 100644
4487 --- a/drivers/usb/host/xhci-mem.c
4488 +++ b/drivers/usb/host/xhci-mem.c
4489 @@ -94,6 +94,9 @@ static void xhci_link_segments(struct xhci_hcd *xhci, struct xhci_segment *prev,
4490 val = prev->trbs[TRBS_PER_SEGMENT-1].link.control;
4491 val &= ~TRB_TYPE_BITMASK;
4492 val |= TRB_TYPE(TRB_LINK);
4493 + /* Always set the chain bit with 0.95 hardware */
4494 + if (xhci_link_trb_quirk(xhci))
4495 + val |= TRB_CHAIN;
4496 prev->trbs[TRBS_PER_SEGMENT-1].link.control = val;
4497 }
4498 xhci_dbg(xhci, "Linking segment 0x%llx to segment 0x%llx (DMA)\n",
4499 @@ -398,15 +401,28 @@ int xhci_setup_addressable_virt_dev(struct xhci_hcd *xhci, struct usb_device *ud
4500 /* Step 5 */
4501 ep0_ctx->ep_info2 = EP_TYPE(CTRL_EP);
4502 /*
4503 - * See section 4.3 bullet 6:
4504 - * The default Max Packet size for ep0 is "8 bytes for a USB2
4505 - * LS/FS/HS device or 512 bytes for a USB3 SS device"
4506 * XXX: Not sure about wireless USB devices.
4507 */
4508 - if (udev->speed == USB_SPEED_SUPER)
4509 + switch (udev->speed) {
4510 + case USB_SPEED_SUPER:
4511 ep0_ctx->ep_info2 |= MAX_PACKET(512);
4512 - else
4513 + break;
4514 + case USB_SPEED_HIGH:
4515 + /* USB core guesses at a 64-byte max packet first for FS devices */
4516 + case USB_SPEED_FULL:
4517 + ep0_ctx->ep_info2 |= MAX_PACKET(64);
4518 + break;
4519 + case USB_SPEED_LOW:
4520 ep0_ctx->ep_info2 |= MAX_PACKET(8);
4521 + break;
4522 + case USB_SPEED_VARIABLE:
4523 + xhci_dbg(xhci, "FIXME xHCI doesn't support wireless speeds\n");
4524 + return -EINVAL;
4525 + break;
4526 + default:
4527 + /* New speed? */
4528 + BUG();
4529 + }
4530 /* EP 0 can handle "burst" sizes of 1, so Max Burst Size field is 0 */
4531 ep0_ctx->ep_info2 |= MAX_BURST(0);
4532 ep0_ctx->ep_info2 |= ERROR_COUNT(3);
4533 @@ -598,6 +614,44 @@ void xhci_endpoint_zero(struct xhci_hcd *xhci,
4534 */
4535 }
4536
4537 +/* Copy output xhci_ep_ctx to the input xhci_ep_ctx copy.
4538 + * Useful when you want to change one particular aspect of the endpoint and then
4539 + * issue a configure endpoint command.
4540 + */
4541 +void xhci_endpoint_copy(struct xhci_hcd *xhci,
4542 + struct xhci_virt_device *vdev, unsigned int ep_index)
4543 +{
4544 + struct xhci_ep_ctx *out_ep_ctx;
4545 + struct xhci_ep_ctx *in_ep_ctx;
4546 +
4547 + out_ep_ctx = xhci_get_ep_ctx(xhci, vdev->out_ctx, ep_index);
4548 + in_ep_ctx = xhci_get_ep_ctx(xhci, vdev->in_ctx, ep_index);
4549 +
4550 + in_ep_ctx->ep_info = out_ep_ctx->ep_info;
4551 + in_ep_ctx->ep_info2 = out_ep_ctx->ep_info2;
4552 + in_ep_ctx->deq = out_ep_ctx->deq;
4553 + in_ep_ctx->tx_info = out_ep_ctx->tx_info;
4554 +}
4555 +
4556 +/* Copy output xhci_slot_ctx to the input xhci_slot_ctx.
4557 + * Useful when you want to change one particular aspect of the endpoint and then
4558 + * issue a configure endpoint command. Only the context entries field matters,
4559 + * but we'll copy the whole thing anyway.
4560 + */
4561 +void xhci_slot_copy(struct xhci_hcd *xhci, struct xhci_virt_device *vdev)
4562 +{
4563 + struct xhci_slot_ctx *in_slot_ctx;
4564 + struct xhci_slot_ctx *out_slot_ctx;
4565 +
4566 + in_slot_ctx = xhci_get_slot_ctx(xhci, vdev->in_ctx);
4567 + out_slot_ctx = xhci_get_slot_ctx(xhci, vdev->out_ctx);
4568 +
4569 + in_slot_ctx->dev_info = out_slot_ctx->dev_info;
4570 + in_slot_ctx->dev_info2 = out_slot_ctx->dev_info2;
4571 + in_slot_ctx->tt_info = out_slot_ctx->tt_info;
4572 + in_slot_ctx->dev_state = out_slot_ctx->dev_state;
4573 +}
4574 +
4575 /* Set up the scratchpad buffer array and scratchpad buffers, if needed. */
4576 static int scratchpad_alloc(struct xhci_hcd *xhci, gfp_t flags)
4577 {
4578 diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
4579 index 592fe7e..8fb308d 100644
4580 --- a/drivers/usb/host/xhci-pci.c
4581 +++ b/drivers/usb/host/xhci-pci.c
4582 @@ -24,6 +24,10 @@
4583
4584 #include "xhci.h"
4585
4586 +/* Device for a quirk */
4587 +#define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73
4588 +#define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000
4589 +
4590 static const char hcd_name[] = "xhci_hcd";
4591
4592 /* called after powerup, by probe or system-pm "wakeup" */
4593 @@ -62,6 +66,15 @@ static int xhci_pci_setup(struct usb_hcd *hcd)
4594 xhci->hcc_params = xhci_readl(xhci, &xhci->cap_regs->hcc_params);
4595 xhci_print_registers(xhci);
4596
4597 + /* Look for vendor-specific quirks */
4598 + if (pdev->vendor == PCI_VENDOR_ID_FRESCO_LOGIC &&
4599 + pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK &&
4600 + pdev->revision == 0x0) {
4601 + xhci->quirks |= XHCI_RESET_EP_QUIRK;
4602 + xhci_dbg(xhci, "QUIRK: Fresco Logic xHC needs configure"
4603 + " endpoint cmd after reset endpoint\n");
4604 + }
4605 +
4606 /* Make sure the HC is halted. */
4607 retval = xhci_halt(xhci);
4608 if (retval)
4609 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
4610 index aa88a06..ff5e6bc 100644
4611 --- a/drivers/usb/host/xhci-ring.c
4612 +++ b/drivers/usb/host/xhci-ring.c
4613 @@ -172,8 +172,9 @@ static void inc_deq(struct xhci_hcd *xhci, struct xhci_ring *ring, bool consumer
4614 * have their chain bit cleared (so that each Link TRB is a separate TD).
4615 *
4616 * Section 6.4.4.1 of the 0.95 spec says link TRBs cannot have the chain bit
4617 - * set, but other sections talk about dealing with the chain bit set.
4618 - * Assume section 6.4.4.1 is wrong, and the chain bit can be set in a Link TRB.
4619 + * set, but other sections talk about dealing with the chain bit set. This was
4620 + * fixed in the 0.96 specification errata, but we have to assume that all 0.95
4621 + * xHCI hardware can't handle the chain bit being cleared on a link TRB.
4622 */
4623 static void inc_enq(struct xhci_hcd *xhci, struct xhci_ring *ring, bool consumer)
4624 {
4625 @@ -191,8 +192,14 @@ static void inc_enq(struct xhci_hcd *xhci, struct xhci_ring *ring, bool consumer
4626 while (last_trb(xhci, ring, ring->enq_seg, next)) {
4627 if (!consumer) {
4628 if (ring != xhci->event_ring) {
4629 - next->link.control &= ~TRB_CHAIN;
4630 - next->link.control |= chain;
4631 + /* If we're not dealing with 0.95 hardware,
4632 + * carry over the chain bit of the previous TRB
4633 + * (which may mean the chain bit is cleared).
4634 + */
4635 + if (!xhci_link_trb_quirk(xhci)) {
4636 + next->link.control &= ~TRB_CHAIN;
4637 + next->link.control |= chain;
4638 + }
4639 /* Give this link TRB to the hardware */
4640 wmb();
4641 if (next->link.control & TRB_CYCLE)
4642 @@ -462,7 +469,6 @@ void xhci_queue_new_dequeue_state(struct xhci_hcd *xhci,
4643 * ring running.
4644 */
4645 ep_ring->state |= SET_DEQ_PENDING;
4646 - xhci_ring_cmd_db(xhci);
4647 }
4648
4649 /*
4650 @@ -531,6 +537,7 @@ static void handle_stopped_endpoint(struct xhci_hcd *xhci,
4651 if (deq_state.new_deq_ptr && deq_state.new_deq_seg) {
4652 xhci_queue_new_dequeue_state(xhci, ep_ring,
4653 slot_id, ep_index, &deq_state);
4654 + xhci_ring_cmd_db(xhci);
4655 } else {
4656 /* Otherwise just ring the doorbell to restart the ring */
4657 ring_ep_doorbell(xhci, slot_id, ep_index);
4658 @@ -644,18 +651,31 @@ static void handle_reset_ep_completion(struct xhci_hcd *xhci,
4659 {
4660 int slot_id;
4661 unsigned int ep_index;
4662 + struct xhci_ring *ep_ring;
4663
4664 slot_id = TRB_TO_SLOT_ID(trb->generic.field[3]);
4665 ep_index = TRB_TO_EP_INDEX(trb->generic.field[3]);
4666 + ep_ring = xhci->devs[slot_id]->ep_rings[ep_index];
4667 /* This command will only fail if the endpoint wasn't halted,
4668 * but we don't care.
4669 */
4670 xhci_dbg(xhci, "Ignoring reset ep completion code of %u\n",
4671 (unsigned int) GET_COMP_CODE(event->status));
4672
4673 - /* Clear our internal halted state and restart the ring */
4674 - xhci->devs[slot_id]->ep_rings[ep_index]->state &= ~EP_HALTED;
4675 - ring_ep_doorbell(xhci, slot_id, ep_index);
4676 + /* HW with the reset endpoint quirk needs to have a configure endpoint
4677 + * command complete before the endpoint can be used. Queue that here
4678 + * because the HW can't handle two commands being queued in a row.
4679 + */
4680 + if (xhci->quirks & XHCI_RESET_EP_QUIRK) {
4681 + xhci_dbg(xhci, "Queueing configure endpoint command\n");
4682 + xhci_queue_configure_endpoint(xhci,
4683 + xhci->devs[slot_id]->in_ctx->dma, slot_id);
4684 + xhci_ring_cmd_db(xhci);
4685 + } else {
4686 + /* Clear our internal halted state and restart the ring */
4687 + ep_ring->state &= ~EP_HALTED;
4688 + ring_ep_doorbell(xhci, slot_id, ep_index);
4689 + }
4690 }
4691
4692 static void handle_cmd_completion(struct xhci_hcd *xhci,
4693 @@ -664,6 +684,10 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
4694 int slot_id = TRB_TO_SLOT_ID(event->flags);
4695 u64 cmd_dma;
4696 dma_addr_t cmd_dequeue_dma;
4697 + struct xhci_input_control_ctx *ctrl_ctx;
4698 + unsigned int ep_index;
4699 + struct xhci_ring *ep_ring;
4700 + unsigned int ep_state;
4701
4702 cmd_dma = event->cmd_trb;
4703 cmd_dequeue_dma = xhci_trb_virt_to_dma(xhci->cmd_ring->deq_seg,
4704 @@ -691,6 +715,41 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
4705 xhci_free_virt_device(xhci, slot_id);
4706 break;
4707 case TRB_TYPE(TRB_CONFIG_EP):
4708 + /*
4709 + * Configure endpoint commands can come from the USB core
4710 + * configuration or alt setting changes, or because the HW
4711 + * needed an extra configure endpoint command after a reset
4712 + * endpoint command. In the latter case, the xHCI driver is
4713 + * not waiting on the configure endpoint command.
4714 + */
4715 + ctrl_ctx = xhci_get_input_control_ctx(xhci,
4716 + xhci->devs[slot_id]->in_ctx);
4717 + /* Input ctx add_flags are the endpoint index plus one */
4718 + ep_index = xhci_last_valid_endpoint(ctrl_ctx->add_flags) - 1;
4719 + ep_ring = xhci->devs[slot_id]->ep_rings[ep_index];
4720 + if (!ep_ring) {
4721 + /* This must have been an initial configure endpoint */
4722 + xhci->devs[slot_id]->cmd_status =
4723 + GET_COMP_CODE(event->status);
4724 + complete(&xhci->devs[slot_id]->cmd_completion);
4725 + break;
4726 + }
4727 + ep_state = ep_ring->state;
4728 + xhci_dbg(xhci, "Completed config ep cmd - last ep index = %d, "
4729 + "state = %d\n", ep_index, ep_state);
4730 + if (xhci->quirks & XHCI_RESET_EP_QUIRK &&
4731 + ep_state & EP_HALTED) {
4732 + /* Clear our internal halted state and restart ring */
4733 + xhci->devs[slot_id]->ep_rings[ep_index]->state &=
4734 + ~EP_HALTED;
4735 + ring_ep_doorbell(xhci, slot_id, ep_index);
4736 + } else {
4737 + xhci->devs[slot_id]->cmd_status =
4738 + GET_COMP_CODE(event->status);
4739 + complete(&xhci->devs[slot_id]->cmd_completion);
4740 + }
4741 + break;
4742 + case TRB_TYPE(TRB_EVAL_CONTEXT):
4743 xhci->devs[slot_id]->cmd_status = GET_COMP_CODE(event->status);
4744 complete(&xhci->devs[slot_id]->cmd_completion);
4745 break;
4746 @@ -806,6 +865,7 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4747 {
4748 struct xhci_virt_device *xdev;
4749 struct xhci_ring *ep_ring;
4750 + unsigned int slot_id;
4751 int ep_index;
4752 struct xhci_td *td = 0;
4753 dma_addr_t event_dma;
4754 @@ -814,9 +874,11 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4755 struct urb *urb = 0;
4756 int status = -EINPROGRESS;
4757 struct xhci_ep_ctx *ep_ctx;
4758 + u32 trb_comp_code;
4759
4760 xhci_dbg(xhci, "In %s\n", __func__);
4761 - xdev = xhci->devs[TRB_TO_SLOT_ID(event->flags)];
4762 + slot_id = TRB_TO_SLOT_ID(event->flags);
4763 + xdev = xhci->devs[slot_id];
4764 if (!xdev) {
4765 xhci_err(xhci, "ERROR Transfer event pointed to bad slot\n");
4766 return -ENODEV;
4767 @@ -870,7 +932,8 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4768 (unsigned int) event->flags);
4769
4770 /* Look for common error cases */
4771 - switch (GET_COMP_CODE(event->transfer_len)) {
4772 + trb_comp_code = GET_COMP_CODE(event->transfer_len);
4773 + switch (trb_comp_code) {
4774 /* Skip codes that require special handling depending on
4775 * transfer type
4776 */
4777 @@ -913,7 +976,7 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4778 /* Was this a control transfer? */
4779 if (usb_endpoint_xfer_control(&td->urb->ep->desc)) {
4780 xhci_debug_trb(xhci, xhci->event_ring->dequeue);
4781 - switch (GET_COMP_CODE(event->transfer_len)) {
4782 + switch (trb_comp_code) {
4783 case COMP_SUCCESS:
4784 if (event_trb == ep_ring->dequeue) {
4785 xhci_warn(xhci, "WARN: Success on ctrl setup TRB without IOC set??\n");
4786 @@ -928,8 +991,39 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4787 break;
4788 case COMP_SHORT_TX:
4789 xhci_warn(xhci, "WARN: short transfer on control ep\n");
4790 - status = -EREMOTEIO;
4791 + if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
4792 + status = -EREMOTEIO;
4793 + else
4794 + status = 0;
4795 break;
4796 + case COMP_BABBLE:
4797 + /* The 0.96 spec says a babbling control endpoint
4798 + * is not halted. The 0.96 spec says it is. Some HW
4799 + * claims to be 0.95 compliant, but it halts the control
4800 + * endpoint anyway. Check if a babble halted the
4801 + * endpoint.
4802 + */
4803 + if (ep_ctx->ep_info != EP_STATE_HALTED)
4804 + break;
4805 + /* else fall through */
4806 + case COMP_STALL:
4807 + /* Did we transfer part of the data (middle) phase? */
4808 + if (event_trb != ep_ring->dequeue &&
4809 + event_trb != td->last_trb)
4810 + td->urb->actual_length =
4811 + td->urb->transfer_buffer_length
4812 + - TRB_LEN(event->transfer_len);
4813 + else
4814 + td->urb->actual_length = 0;
4815 +
4816 + ep_ring->stopped_td = td;
4817 + ep_ring->stopped_trb = event_trb;
4818 + xhci_queue_reset_ep(xhci, slot_id, ep_index);
4819 + xhci_cleanup_stalled_ring(xhci,
4820 + td->urb->dev,
4821 + ep_index, ep_ring);
4822 + xhci_ring_cmd_db(xhci);
4823 + goto td_cleanup;
4824 default:
4825 /* Others already handled above */
4826 break;
4827 @@ -943,7 +1037,10 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4828 if (event_trb == td->last_trb) {
4829 if (td->urb->actual_length != 0) {
4830 /* Don't overwrite a previously set error code */
4831 - if (status == -EINPROGRESS || status == 0)
4832 + if ((status == -EINPROGRESS ||
4833 + status == 0) &&
4834 + (td->urb->transfer_flags
4835 + & URB_SHORT_NOT_OK))
4836 /* Did we already see a short data stage? */
4837 status = -EREMOTEIO;
4838 } else {
4839 @@ -952,7 +1049,7 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4840 }
4841 } else {
4842 /* Maybe the event was for the data stage? */
4843 - if (GET_COMP_CODE(event->transfer_len) != COMP_STOP_INVAL) {
4844 + if (trb_comp_code != COMP_STOP_INVAL) {
4845 /* We didn't stop on a link TRB in the middle */
4846 td->urb->actual_length =
4847 td->urb->transfer_buffer_length -
4848 @@ -964,7 +1061,7 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4849 }
4850 }
4851 } else {
4852 - switch (GET_COMP_CODE(event->transfer_len)) {
4853 + switch (trb_comp_code) {
4854 case COMP_SUCCESS:
4855 /* Double check that the HW transferred everything. */
4856 if (event_trb != td->last_trb) {
4857 @@ -975,7 +1072,12 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4858 else
4859 status = 0;
4860 } else {
4861 - xhci_dbg(xhci, "Successful bulk transfer!\n");
4862 + if (usb_endpoint_xfer_bulk(&td->urb->ep->desc))
4863 + xhci_dbg(xhci, "Successful bulk "
4864 + "transfer!\n");
4865 + else
4866 + xhci_dbg(xhci, "Successful interrupt "
4867 + "transfer!\n");
4868 status = 0;
4869 }
4870 break;
4871 @@ -1001,11 +1103,17 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4872 td->urb->actual_length =
4873 td->urb->transfer_buffer_length -
4874 TRB_LEN(event->transfer_len);
4875 - if (td->urb->actual_length < 0) {
4876 + if (td->urb->transfer_buffer_length <
4877 + td->urb->actual_length) {
4878 xhci_warn(xhci, "HC gave bad length "
4879 "of %d bytes left\n",
4880 TRB_LEN(event->transfer_len));
4881 td->urb->actual_length = 0;
4882 + if (td->urb->transfer_flags &
4883 + URB_SHORT_NOT_OK)
4884 + status = -EREMOTEIO;
4885 + else
4886 + status = 0;
4887 }
4888 /* Don't overwrite a previously set error code */
4889 if (status == -EINPROGRESS) {
4890 @@ -1041,14 +1149,14 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4891 /* If the ring didn't stop on a Link or No-op TRB, add
4892 * in the actual bytes transferred from the Normal TRB
4893 */
4894 - if (GET_COMP_CODE(event->transfer_len) != COMP_STOP_INVAL)
4895 + if (trb_comp_code != COMP_STOP_INVAL)
4896 td->urb->actual_length +=
4897 TRB_LEN(cur_trb->generic.field[2]) -
4898 TRB_LEN(event->transfer_len);
4899 }
4900 }
4901 - if (GET_COMP_CODE(event->transfer_len) == COMP_STOP_INVAL ||
4902 - GET_COMP_CODE(event->transfer_len) == COMP_STOP) {
4903 + if (trb_comp_code == COMP_STOP_INVAL ||
4904 + trb_comp_code == COMP_STOP) {
4905 /* The Endpoint Stop Command completion will take care of any
4906 * stopped TDs. A stopped TD may be restarted, so don't update
4907 * the ring dequeue pointer or take this TD off any lists yet.
4908 @@ -1056,7 +1164,8 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4909 ep_ring->stopped_td = td;
4910 ep_ring->stopped_trb = event_trb;
4911 } else {
4912 - if (GET_COMP_CODE(event->transfer_len) == COMP_STALL) {
4913 + if (trb_comp_code == COMP_STALL ||
4914 + trb_comp_code == COMP_BABBLE) {
4915 /* The transfer is completed from the driver's
4916 * perspective, but we need to issue a set dequeue
4917 * command for this stalled endpoint to move the dequeue
4918 @@ -1072,16 +1181,41 @@ static int handle_tx_event(struct xhci_hcd *xhci,
4919 inc_deq(xhci, ep_ring, false);
4920 }
4921
4922 +td_cleanup:
4923 /* Clean up the endpoint's TD list */
4924 urb = td->urb;
4925 + /* Do one last check of the actual transfer length.
4926 + * If the host controller said we transferred more data than
4927 + * the buffer length, urb->actual_length will be a very big
4928 + * number (since it's unsigned). Play it safe and say we didn't
4929 + * transfer anything.
4930 + */
4931 + if (urb->actual_length > urb->transfer_buffer_length) {
4932 + xhci_warn(xhci, "URB transfer length is wrong, "
4933 + "xHC issue? req. len = %u, "
4934 + "act. len = %u\n",
4935 + urb->transfer_buffer_length,
4936 + urb->actual_length);
4937 + urb->actual_length = 0;
4938 + if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
4939 + status = -EREMOTEIO;
4940 + else
4941 + status = 0;
4942 + }
4943 list_del(&td->td_list);
4944 /* Was this TD slated to be cancelled but completed anyway? */
4945 if (!list_empty(&td->cancelled_td_list)) {
4946 list_del(&td->cancelled_td_list);
4947 ep_ring->cancels_pending--;
4948 }
4949 - /* Leave the TD around for the reset endpoint function to use */
4950 - if (GET_COMP_CODE(event->transfer_len) != COMP_STALL) {
4951 + /* Leave the TD around for the reset endpoint function to use
4952 + * (but only if it's not a control endpoint, since we already
4953 + * queued the Set TR dequeue pointer command for stalled
4954 + * control endpoints).
4955 + */
4956 + if (usb_endpoint_xfer_control(&urb->ep->desc) ||
4957 + (trb_comp_code != COMP_STALL &&
4958 + trb_comp_code != COMP_BABBLE)) {
4959 kfree(td);
4960 }
4961 urb->hcpriv = NULL;
4962 @@ -1094,7 +1228,7 @@ cleanup:
4963 if (urb) {
4964 usb_hcd_unlink_urb_from_ep(xhci_to_hcd(xhci), urb);
4965 xhci_dbg(xhci, "Giveback URB %p, len = %d, status = %d\n",
4966 - urb, td->urb->actual_length, status);
4967 + urb, urb->actual_length, status);
4968 spin_unlock(&xhci->lock);
4969 usb_hcd_giveback_urb(xhci_to_hcd(xhci), urb, status);
4970 spin_lock(&xhci->lock);
4971 @@ -1335,6 +1469,47 @@ static void giveback_first_trb(struct xhci_hcd *xhci, int slot_id,
4972 ring_ep_doorbell(xhci, slot_id, ep_index);
4973 }
4974
4975 +/*
4976 + * xHCI uses normal TRBs for both bulk and interrupt. When the interrupt
4977 + * endpoint is to be serviced, the xHC will consume (at most) one TD. A TD
4978 + * (comprised of sg list entries) can take several service intervals to
4979 + * transmit.
4980 + */
4981 +int xhci_queue_intr_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
4982 + struct urb *urb, int slot_id, unsigned int ep_index)
4983 +{
4984 + struct xhci_ep_ctx *ep_ctx = xhci_get_ep_ctx(xhci,
4985 + xhci->devs[slot_id]->out_ctx, ep_index);
4986 + int xhci_interval;
4987 + int ep_interval;
4988 +
4989 + xhci_interval = EP_INTERVAL_TO_UFRAMES(ep_ctx->ep_info);
4990 + ep_interval = urb->interval;
4991 + /* Convert to microframes */
4992 + if (urb->dev->speed == USB_SPEED_LOW ||
4993 + urb->dev->speed == USB_SPEED_FULL)
4994 + ep_interval *= 8;
4995 + /* FIXME change this to a warning and a suggestion to use the new API
4996 + * to set the polling interval (once the API is added).
4997 + */
4998 + if (xhci_interval != ep_interval) {
4999 + if (!printk_ratelimit())
5000 + dev_dbg(&urb->dev->dev, "Driver uses different interval"
5001 + " (%d microframe%s) than xHCI "
5002 + "(%d microframe%s)\n",
5003 + ep_interval,
5004 + ep_interval == 1 ? "" : "s",
5005 + xhci_interval,
5006 + xhci_interval == 1 ? "" : "s");
5007 + urb->interval = xhci_interval;
5008 + /* Convert back to frames for LS/FS devices */
5009 + if (urb->dev->speed == USB_SPEED_LOW ||
5010 + urb->dev->speed == USB_SPEED_FULL)
5011 + urb->interval /= 8;
5012 + }
5013 + return xhci_queue_bulk_tx(xhci, GFP_ATOMIC, urb, slot_id, ep_index);
5014 +}
5015 +
5016 static int queue_bulk_sg_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
5017 struct urb *urb, int slot_id, unsigned int ep_index)
5018 {
5019 @@ -1733,6 +1908,15 @@ int xhci_queue_configure_endpoint(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr,
5020 TRB_TYPE(TRB_CONFIG_EP) | SLOT_ID_FOR_TRB(slot_id));
5021 }
5022
5023 +/* Queue an evaluate context command TRB */
5024 +int xhci_queue_evaluate_context(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr,
5025 + u32 slot_id)
5026 +{
5027 + return queue_command(xhci, lower_32_bits(in_ctx_ptr),
5028 + upper_32_bits(in_ctx_ptr), 0,
5029 + TRB_TYPE(TRB_EVAL_CONTEXT) | SLOT_ID_FOR_TRB(slot_id));
5030 +}
5031 +
5032 int xhci_queue_stop_endpoint(struct xhci_hcd *xhci, int slot_id,
5033 unsigned int ep_index)
5034 {
5035 diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
5036 index d31d322..8085841 100644
5037 --- a/drivers/usb/host/xhci.h
5038 +++ b/drivers/usb/host/xhci.h
5039 @@ -581,6 +581,7 @@ struct xhci_ep_ctx {
5040 /* bit 15 is Linear Stream Array */
5041 /* Interval - period between requests to an endpoint - 125u increments. */
5042 #define EP_INTERVAL(p) ((p & 0xff) << 16)
5043 +#define EP_INTERVAL_TO_UFRAMES(p) (1 << (((p) >> 16) & 0xff))
5044
5045 /* ep_info2 bitmasks */
5046 /*
5047 @@ -589,6 +590,7 @@ struct xhci_ep_ctx {
5048 */
5049 #define FORCE_EVENT (0x1)
5050 #define ERROR_COUNT(p) (((p) & 0x3) << 1)
5051 +#define CTX_TO_EP_TYPE(p) (((p) >> 3) & 0x7)
5052 #define EP_TYPE(p) ((p) << 3)
5053 #define ISOC_OUT_EP 1
5054 #define BULK_OUT_EP 2
5055 @@ -601,6 +603,8 @@ struct xhci_ep_ctx {
5056 /* bit 7 is Host Initiate Disable - for disabling stream selection */
5057 #define MAX_BURST(p) (((p)&0xff) << 8)
5058 #define MAX_PACKET(p) (((p)&0xffff) << 16)
5059 +#define MAX_PACKET_MASK (0xffff << 16)
5060 +#define MAX_PACKET_DECODED(p) (((p) >> 16) & 0xffff)
5061
5062
5063 /**
5064 @@ -926,6 +930,12 @@ struct xhci_td {
5065 union xhci_trb *last_trb;
5066 };
5067
5068 +struct xhci_dequeue_state {
5069 + struct xhci_segment *new_deq_seg;
5070 + union xhci_trb *new_deq_ptr;
5071 + int new_cycle_state;
5072 +};
5073 +
5074 struct xhci_ring {
5075 struct xhci_segment *first_seg;
5076 union xhci_trb *enqueue;
5077 @@ -952,12 +962,6 @@ struct xhci_ring {
5078 u32 cycle_state;
5079 };
5080
5081 -struct xhci_dequeue_state {
5082 - struct xhci_segment *new_deq_seg;
5083 - union xhci_trb *new_deq_ptr;
5084 - int new_cycle_state;
5085 -};
5086 -
5087 struct xhci_erst_entry {
5088 /* 64-bit event ring segment address */
5089 u64 seg_addr;
5090 @@ -1058,6 +1062,9 @@ struct xhci_hcd {
5091 int noops_submitted;
5092 int noops_handled;
5093 int error_bitmask;
5094 + unsigned int quirks;
5095 +#define XHCI_LINK_TRB_QUIRK (1 << 0)
5096 +#define XHCI_RESET_EP_QUIRK (1 << 1)
5097 };
5098
5099 /* For testing purposes */
5100 @@ -1136,6 +1143,13 @@ static inline void xhci_write_64(struct xhci_hcd *xhci,
5101 writel(val_hi, ptr + 1);
5102 }
5103
5104 +static inline int xhci_link_trb_quirk(struct xhci_hcd *xhci)
5105 +{
5106 + u32 temp = xhci_readl(xhci, &xhci->cap_regs->hc_capbase);
5107 + return ((HC_VERSION(temp) == 0x95) &&
5108 + (xhci->quirks & XHCI_LINK_TRB_QUIRK));
5109 +}
5110 +
5111 /* xHCI debugging */
5112 void xhci_print_ir_set(struct xhci_hcd *xhci, struct xhci_intr_reg *ir_set, int set_num);
5113 void xhci_print_registers(struct xhci_hcd *xhci);
5114 @@ -1158,7 +1172,12 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id, struct usb_device
5115 int xhci_setup_addressable_virt_dev(struct xhci_hcd *xhci, struct usb_device *udev);
5116 unsigned int xhci_get_endpoint_index(struct usb_endpoint_descriptor *desc);
5117 unsigned int xhci_get_endpoint_flag(struct usb_endpoint_descriptor *desc);
5118 +unsigned int xhci_get_endpoint_flag_from_index(unsigned int ep_index);
5119 +unsigned int xhci_last_valid_endpoint(u32 added_ctxs);
5120 void xhci_endpoint_zero(struct xhci_hcd *xhci, struct xhci_virt_device *virt_dev, struct usb_host_endpoint *ep);
5121 +void xhci_endpoint_copy(struct xhci_hcd *xhci,
5122 + struct xhci_virt_device *vdev, unsigned int ep_index);
5123 +void xhci_slot_copy(struct xhci_hcd *xhci, struct xhci_virt_device *vdev);
5124 int xhci_endpoint_init(struct xhci_hcd *xhci, struct xhci_virt_device *virt_dev,
5125 struct usb_device *udev, struct usb_host_endpoint *ep,
5126 gfp_t mem_flags);
5127 @@ -1205,8 +1224,12 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags, struct urb *urb,
5128 int slot_id, unsigned int ep_index);
5129 int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags, struct urb *urb,
5130 int slot_id, unsigned int ep_index);
5131 +int xhci_queue_intr_tx(struct xhci_hcd *xhci, gfp_t mem_flags, struct urb *urb,
5132 + int slot_id, unsigned int ep_index);
5133 int xhci_queue_configure_endpoint(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr,
5134 u32 slot_id);
5135 +int xhci_queue_evaluate_context(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr,
5136 + u32 slot_id);
5137 int xhci_queue_reset_ep(struct xhci_hcd *xhci, int slot_id,
5138 unsigned int ep_index);
5139 void xhci_find_new_dequeue_state(struct xhci_hcd *xhci,
5140 @@ -1215,6 +1238,12 @@ void xhci_find_new_dequeue_state(struct xhci_hcd *xhci,
5141 void xhci_queue_new_dequeue_state(struct xhci_hcd *xhci,
5142 struct xhci_ring *ep_ring, unsigned int slot_id,
5143 unsigned int ep_index, struct xhci_dequeue_state *deq_state);
5144 +void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci,
5145 + struct usb_device *udev,
5146 + unsigned int ep_index, struct xhci_ring *ep_ring);
5147 +void xhci_queue_config_ep_quirk(struct xhci_hcd *xhci,
5148 + unsigned int slot_id, unsigned int ep_index,
5149 + struct xhci_dequeue_state *deq_state);
5150
5151 /* xHCI roothub code */
5152 int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex,
5153 diff --git a/drivers/usb/serial/ark3116.c b/drivers/usb/serial/ark3116.c
5154 index aec6188..1a50beb 100644
5155 --- a/drivers/usb/serial/ark3116.c
5156 +++ b/drivers/usb/serial/ark3116.c
5157 @@ -35,11 +35,6 @@ static struct usb_device_id id_table [] = {
5158 };
5159 MODULE_DEVICE_TABLE(usb, id_table);
5160
5161 -struct ark3116_private {
5162 - spinlock_t lock;
5163 - u8 termios_initialized;
5164 -};
5165 -
5166 static inline void ARK3116_SND(struct usb_serial *serial, int seq,
5167 __u8 request, __u8 requesttype,
5168 __u16 value, __u16 index)
5169 @@ -82,22 +77,11 @@ static inline void ARK3116_RCV_QUIET(struct usb_serial *serial,
5170 static int ark3116_attach(struct usb_serial *serial)
5171 {
5172 char *buf;
5173 - struct ark3116_private *priv;
5174 - int i;
5175 -
5176 - for (i = 0; i < serial->num_ports; ++i) {
5177 - priv = kzalloc(sizeof(struct ark3116_private), GFP_KERNEL);
5178 - if (!priv)
5179 - goto cleanup;
5180 - spin_lock_init(&priv->lock);
5181 -
5182 - usb_set_serial_port_data(serial->port[i], priv);
5183 - }
5184
5185 buf = kmalloc(1, GFP_KERNEL);
5186 if (!buf) {
5187 dbg("error kmalloc -> out of mem?");
5188 - goto cleanup;
5189 + return -ENOMEM;
5190 }
5191
5192 /* 3 */
5193 @@ -149,13 +133,16 @@ static int ark3116_attach(struct usb_serial *serial)
5194
5195 kfree(buf);
5196 return 0;
5197 +}
5198
5199 -cleanup:
5200 - for (--i; i >= 0; --i) {
5201 - kfree(usb_get_serial_port_data(serial->port[i]));
5202 - usb_set_serial_port_data(serial->port[i], NULL);
5203 - }
5204 - return -ENOMEM;
5205 +static void ark3116_init_termios(struct tty_struct *tty)
5206 +{
5207 + struct ktermios *termios = tty->termios;
5208 + *termios = tty_std_termios;
5209 + termios->c_cflag = B9600 | CS8
5210 + | CREAD | HUPCL | CLOCAL;
5211 + termios->c_ispeed = 9600;
5212 + termios->c_ospeed = 9600;
5213 }
5214
5215 static void ark3116_set_termios(struct tty_struct *tty,
5216 @@ -163,10 +150,8 @@ static void ark3116_set_termios(struct tty_struct *tty,
5217 struct ktermios *old_termios)
5218 {
5219 struct usb_serial *serial = port->serial;
5220 - struct ark3116_private *priv = usb_get_serial_port_data(port);
5221 struct ktermios *termios = tty->termios;
5222 unsigned int cflag = termios->c_cflag;
5223 - unsigned long flags;
5224 int baud;
5225 int ark3116_baud;
5226 char *buf;
5227 @@ -176,16 +161,6 @@ static void ark3116_set_termios(struct tty_struct *tty,
5228
5229 dbg("%s - port %d", __func__, port->number);
5230
5231 - spin_lock_irqsave(&priv->lock, flags);
5232 - if (!priv->termios_initialized) {
5233 - *termios = tty_std_termios;
5234 - termios->c_cflag = B9600 | CS8
5235 - | CREAD | HUPCL | CLOCAL;
5236 - termios->c_ispeed = 9600;
5237 - termios->c_ospeed = 9600;
5238 - priv->termios_initialized = 1;
5239 - }
5240 - spin_unlock_irqrestore(&priv->lock, flags);
5241
5242 cflag = termios->c_cflag;
5243 termios->c_cflag &= ~(CMSPAR|CRTSCTS);
5244 @@ -455,6 +430,7 @@ static struct usb_serial_driver ark3116_device = {
5245 .num_ports = 1,
5246 .attach = ark3116_attach,
5247 .set_termios = ark3116_set_termios,
5248 + .init_termios = ark3116_init_termios,
5249 .ioctl = ark3116_ioctl,
5250 .tiocmget = ark3116_tiocmget,
5251 .open = ark3116_open,
5252 diff --git a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c
5253 index 0e4f2e4..3e49b2e 100644
5254 --- a/drivers/usb/serial/console.c
5255 +++ b/drivers/usb/serial/console.c
5256 @@ -16,6 +16,7 @@
5257 #include <linux/slab.h>
5258 #include <linux/tty.h>
5259 #include <linux/console.h>
5260 +#include <linux/serial.h>
5261 #include <linux/usb.h>
5262 #include <linux/usb/serial.h>
5263
5264 @@ -63,7 +64,7 @@ static int usb_console_setup(struct console *co, char *options)
5265 char *s;
5266 struct usb_serial *serial;
5267 struct usb_serial_port *port;
5268 - int retval = 0;
5269 + int retval;
5270 struct tty_struct *tty = NULL;
5271 struct ktermios *termios = NULL, dummy;
5272
5273 @@ -116,13 +117,17 @@ static int usb_console_setup(struct console *co, char *options)
5274 return -ENODEV;
5275 }
5276
5277 - port = serial->port[0];
5278 + retval = usb_autopm_get_interface(serial->interface);
5279 + if (retval)
5280 + goto error_get_interface;
5281 +
5282 + port = serial->port[co->index - serial->minor];
5283 tty_port_tty_set(&port->port, NULL);
5284
5285 info->port = port;
5286
5287 ++port->port.count;
5288 - if (port->port.count == 1) {
5289 + if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags)) {
5290 if (serial->type->set_termios) {
5291 /*
5292 * allocate a fake tty so the driver can initialize
5293 @@ -168,6 +173,7 @@ static int usb_console_setup(struct console *co, char *options)
5294 kfree(termios);
5295 kfree(tty);
5296 }
5297 + set_bit(ASYNCB_INITIALIZED, &port->port.flags);
5298 }
5299 /* Now that any required fake tty operations are completed restore
5300 * the tty port count */
5301 @@ -175,18 +181,22 @@ static int usb_console_setup(struct console *co, char *options)
5302 /* The console is special in terms of closing the device so
5303 * indicate this port is now acting as a system console. */
5304 port->console = 1;
5305 - retval = 0;
5306
5307 -out:
5308 + mutex_unlock(&serial->disc_mutex);
5309 return retval;
5310 -free_termios:
5311 +
5312 + free_termios:
5313 kfree(termios);
5314 tty_port_tty_set(&port->port, NULL);
5315 -free_tty:
5316 + free_tty:
5317 kfree(tty);
5318 -reset_open_count:
5319 + reset_open_count:
5320 port->port.count = 0;
5321 - goto out;
5322 + usb_autopm_put_interface(serial->interface);
5323 + error_get_interface:
5324 + usb_serial_put(serial);
5325 + mutex_unlock(&serial->disc_mutex);
5326 + return retval;
5327 }
5328
5329 static void usb_console_write(struct console *co,
5330 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
5331 index 985cbcf..b5275c4 100644
5332 --- a/drivers/usb/serial/cp210x.c
5333 +++ b/drivers/usb/serial/cp210x.c
5334 @@ -399,12 +399,6 @@ static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port,
5335
5336 /* Configure the termios structure */
5337 cp210x_get_termios(tty, port);
5338 -
5339 - /* Set the DTR and RTS pins low */
5340 - cp210x_tiocmset_port(tty ? (struct usb_serial_port *) tty->driver_data
5341 - : port,
5342 - NULL, TIOCM_DTR | TIOCM_RTS, 0);
5343 -
5344 return 0;
5345 }
5346
5347 diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
5348 index 59adfe1..27b5a27 100644
5349 --- a/drivers/usb/serial/cypress_m8.c
5350 +++ b/drivers/usb/serial/cypress_m8.c
5351 @@ -659,15 +659,7 @@ static int cypress_open(struct tty_struct *tty,
5352 spin_unlock_irqrestore(&priv->lock, flags);
5353
5354 /* Set termios */
5355 - result = cypress_write(tty, port, NULL, 0);
5356 -
5357 - if (result) {
5358 - dev_err(&port->dev,
5359 - "%s - failed setting the control lines - error %d\n",
5360 - __func__, result);
5361 - return result;
5362 - } else
5363 - dbg("%s - success setting the control lines", __func__);
5364 + cypress_send(port);
5365
5366 if (tty)
5367 cypress_set_termios(tty, port, &priv->tmp_termios);
5368 @@ -1005,6 +997,8 @@ static void cypress_set_termios(struct tty_struct *tty,
5369 dbg("%s - port %d", __func__, port->number);
5370
5371 spin_lock_irqsave(&priv->lock, flags);
5372 + /* We can't clean this one up as we don't know the device type
5373 + early enough */
5374 if (!priv->termios_initialized) {
5375 if (priv->chiptype == CT_EARTHMATE) {
5376 *(tty->termios) = tty_std_termios;
5377 diff --git a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c
5378 index 80cb347..3433f9d 100644
5379 --- a/drivers/usb/serial/empeg.c
5380 +++ b/drivers/usb/serial/empeg.c
5381 @@ -90,8 +90,7 @@ static int empeg_chars_in_buffer(struct tty_struct *tty);
5382 static void empeg_throttle(struct tty_struct *tty);
5383 static void empeg_unthrottle(struct tty_struct *tty);
5384 static int empeg_startup(struct usb_serial *serial);
5385 -static void empeg_set_termios(struct tty_struct *tty,
5386 - struct usb_serial_port *port, struct ktermios *old_termios);
5387 +static void empeg_init_termios(struct tty_struct *tty);
5388 static void empeg_write_bulk_callback(struct urb *urb);
5389 static void empeg_read_bulk_callback(struct urb *urb);
5390
5391 @@ -123,7 +122,7 @@ static struct usb_serial_driver empeg_device = {
5392 .throttle = empeg_throttle,
5393 .unthrottle = empeg_unthrottle,
5394 .attach = empeg_startup,
5395 - .set_termios = empeg_set_termios,
5396 + .init_termios = empeg_init_termios,
5397 .write = empeg_write,
5398 .write_room = empeg_write_room,
5399 .chars_in_buffer = empeg_chars_in_buffer,
5400 @@ -150,9 +149,6 @@ static int empeg_open(struct tty_struct *tty, struct usb_serial_port *port,
5401
5402 dbg("%s - port %d", __func__, port->number);
5403
5404 - /* Force default termio settings */
5405 - empeg_set_termios(tty, port, NULL) ;
5406 -
5407 bytes_in = 0;
5408 bytes_out = 0;
5409
5410 @@ -425,11 +421,9 @@ static int empeg_startup(struct usb_serial *serial)
5411 }
5412
5413
5414 -static void empeg_set_termios(struct tty_struct *tty,
5415 - struct usb_serial_port *port, struct ktermios *old_termios)
5416 +static void empeg_init_termios(struct tty_struct *tty)
5417 {
5418 struct ktermios *termios = tty->termios;
5419 - dbg("%s - port %d", __func__, port->number);
5420
5421 /*
5422 * The empeg-car player wants these particular tty settings.
5423 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
5424 index 8fec5d4..0cc78f9 100644
5425 --- a/drivers/usb/serial/ftdi_sio.c
5426 +++ b/drivers/usb/serial/ftdi_sio.c
5427 @@ -176,6 +176,9 @@ static struct usb_device_id id_table_combined [] = {
5428 { USB_DEVICE(FTDI_VID, FTDI_MICRO_CHAMELEON_PID) },
5429 { USB_DEVICE(FTDI_VID, FTDI_RELAIS_PID) },
5430 { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) },
5431 + { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_SNIFFER_PID) },
5432 + { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_THROTTLE_PID) },
5433 + { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GATEWAY_PID) },
5434 { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
5435 { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
5436 { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) },
5437 @@ -694,6 +697,8 @@ static struct usb_device_id id_table_combined [] = {
5438 { USB_DEVICE(DE_VID, WHT_PID) },
5439 { USB_DEVICE(ADI_VID, ADI_GNICE_PID),
5440 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
5441 + { USB_DEVICE(ADI_VID, ADI_GNICEPLUS_PID),
5442 + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
5443 { USB_DEVICE(JETI_VID, JETI_SPC1201_PID) },
5444 { USB_DEVICE(MARVELL_VID, MARVELL_SHEEVAPLUG_PID),
5445 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
5446 @@ -702,6 +707,8 @@ static struct usb_device_id id_table_combined [] = {
5447 { USB_DEVICE(BAYER_VID, BAYER_CONTOUR_CABLE_PID) },
5448 { USB_DEVICE(FTDI_VID, MARVELL_OPENRD_PID),
5449 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
5450 + { USB_DEVICE(FTDI_VID, HAMEG_HO820_PID) },
5451 + { USB_DEVICE(FTDI_VID, HAMEG_HO870_PID) },
5452 { }, /* Optional parameter entry */
5453 { } /* Terminating entry */
5454 };
5455 diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h
5456 index 8c92b88..6f31e0d 100644
5457 --- a/drivers/usb/serial/ftdi_sio.h
5458 +++ b/drivers/usb/serial/ftdi_sio.h
5459 @@ -81,6 +81,9 @@
5460
5461 /* OpenDCC (www.opendcc.de) product id */
5462 #define FTDI_OPENDCC_PID 0xBFD8
5463 +#define FTDI_OPENDCC_SNIFFER_PID 0xBFD9
5464 +#define FTDI_OPENDCC_THROTTLE_PID 0xBFDA
5465 +#define FTDI_OPENDCC_GATEWAY_PID 0xBFDB
5466
5467 /* Sprog II (Andrew Crosland's SprogII DCC interface) */
5468 #define FTDI_SPROG_II 0xF0C8
5469 @@ -930,6 +933,7 @@
5470 */
5471 #define ADI_VID 0x0456
5472 #define ADI_GNICE_PID 0xF000
5473 +#define ADI_GNICEPLUS_PID 0xF001
5474
5475 /*
5476 * JETI SPECTROMETER SPECBOS 1201
5477 @@ -968,6 +972,12 @@
5478 #define MARVELL_OPENRD_PID 0x9e90
5479
5480 /*
5481 + * Hameg HO820 and HO870 interface (using VID 0x0403)
5482 + */
5483 +#define HAMEG_HO820_PID 0xed74
5484 +#define HAMEG_HO870_PID 0xed71
5485 +
5486 +/*
5487 * BmRequestType: 1100 0000b
5488 * bRequest: FTDI_E2_READ
5489 * wValue: 0
5490 diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
5491 index 96873a7..af6df6c 100644
5492 --- a/drivers/usb/serial/iuu_phoenix.c
5493 +++ b/drivers/usb/serial/iuu_phoenix.c
5494 @@ -71,7 +71,6 @@ struct iuu_private {
5495 spinlock_t lock; /* store irq state */
5496 wait_queue_head_t delta_msr_wait;
5497 u8 line_status;
5498 - u8 termios_initialized;
5499 int tiostatus; /* store IUART SIGNAL for tiocmget call */
5500 u8 reset; /* if 1 reset is needed */
5501 int poll; /* number of poll */
5502 @@ -1018,6 +1017,18 @@ static void iuu_close(struct usb_serial_port *port)
5503 }
5504 }
5505
5506 +static void iuu_init_termios(struct tty_struct *tty)
5507 +{
5508 + *(tty->termios) = tty_std_termios;
5509 + tty->termios->c_cflag = CLOCAL | CREAD | CS8 | B9600
5510 + | TIOCM_CTS | CSTOPB | PARENB;
5511 + tty->termios->c_ispeed = 9600;
5512 + tty->termios->c_ospeed = 9600;
5513 + tty->termios->c_lflag = 0;
5514 + tty->termios->c_oflag = 0;
5515 + tty->termios->c_iflag = 0;
5516 +}
5517 +
5518 static int iuu_open(struct tty_struct *tty,
5519 struct usb_serial_port *port, struct file *filp)
5520 {
5521 @@ -1025,7 +1036,6 @@ static int iuu_open(struct tty_struct *tty,
5522 u8 *buf;
5523 int result;
5524 u32 actual;
5525 - unsigned long flags;
5526 struct iuu_private *priv = usb_get_serial_port_data(port);
5527
5528 dbg("%s - port %d", __func__, port->number);
5529 @@ -1064,21 +1074,7 @@ static int iuu_open(struct tty_struct *tty,
5530 port->bulk_in_buffer, 512,
5531 NULL, NULL);
5532
5533 - /* set the termios structure */
5534 - spin_lock_irqsave(&priv->lock, flags);
5535 - if (tty && !priv->termios_initialized) {
5536 - *(tty->termios) = tty_std_termios;
5537 - tty->termios->c_cflag = CLOCAL | CREAD | CS8 | B9600
5538 - | TIOCM_CTS | CSTOPB | PARENB;
5539 - tty->termios->c_ispeed = 9600;
5540 - tty->termios->c_ospeed = 9600;
5541 - tty->termios->c_lflag = 0;
5542 - tty->termios->c_oflag = 0;
5543 - tty->termios->c_iflag = 0;
5544 - priv->termios_initialized = 1;
5545 - priv->poll = 0;
5546 - }
5547 - spin_unlock_irqrestore(&priv->lock, flags);
5548 + priv->poll = 0;
5549
5550 /* initialize writebuf */
5551 #define FISH(a, b, c, d) do { \
5552 @@ -1201,6 +1197,7 @@ static struct usb_serial_driver iuu_device = {
5553 .tiocmget = iuu_tiocmget,
5554 .tiocmset = iuu_tiocmset,
5555 .set_termios = iuu_set_termios,
5556 + .init_termios = iuu_init_termios,
5557 .attach = iuu_startup,
5558 .release = iuu_release,
5559 };
5560 diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
5561 index 6db0e56..46d47d1 100644
5562 --- a/drivers/usb/serial/kobil_sct.c
5563 +++ b/drivers/usb/serial/kobil_sct.c
5564 @@ -85,7 +85,7 @@ static void kobil_read_int_callback(struct urb *urb);
5565 static void kobil_write_callback(struct urb *purb);
5566 static void kobil_set_termios(struct tty_struct *tty,
5567 struct usb_serial_port *port, struct ktermios *old);
5568 -
5569 +static void kobil_init_termios(struct tty_struct *tty);
5570
5571 static struct usb_device_id id_table [] = {
5572 { USB_DEVICE(KOBIL_VENDOR_ID, KOBIL_ADAPTER_B_PRODUCT_ID) },
5573 @@ -120,6 +120,7 @@ static struct usb_serial_driver kobil_device = {
5574 .release = kobil_release,
5575 .ioctl = kobil_ioctl,
5576 .set_termios = kobil_set_termios,
5577 + .init_termios = kobil_init_termios,
5578 .tiocmget = kobil_tiocmget,
5579 .tiocmset = kobil_tiocmset,
5580 .open = kobil_open,
5581 @@ -210,6 +211,15 @@ static void kobil_release(struct usb_serial *serial)
5582 kfree(usb_get_serial_port_data(serial->port[i]));
5583 }
5584
5585 +static void kobil_init_termios(struct tty_struct *tty)
5586 +{
5587 + /* Default to echo off and other sane device settings */
5588 + tty->termios->c_lflag = 0;
5589 + tty->termios->c_lflag &= ~(ISIG | ICANON | ECHO | IEXTEN | XCASE);
5590 + tty->termios->c_iflag = IGNBRK | IGNPAR | IXOFF;
5591 + /* do NOT translate CR to CR-NL (0x0A -> 0x0A 0x0D) */
5592 + tty->termios->c_oflag &= ~ONLCR;
5593 +}
5594
5595 static int kobil_open(struct tty_struct *tty,
5596 struct usb_serial_port *port, struct file *filp)
5597 @@ -226,16 +236,6 @@ static int kobil_open(struct tty_struct *tty,
5598 /* someone sets the dev to 0 if the close method has been called */
5599 port->interrupt_in_urb->dev = port->serial->dev;
5600
5601 - if (tty) {
5602 -
5603 - /* Default to echo off and other sane device settings */
5604 - tty->termios->c_lflag = 0;
5605 - tty->termios->c_lflag &= ~(ISIG | ICANON | ECHO | IEXTEN |
5606 - XCASE);
5607 - tty->termios->c_iflag = IGNBRK | IGNPAR | IXOFF;
5608 - /* do NOT translate CR to CR-NL (0x0A -> 0x0A 0x0D) */
5609 - tty->termios->c_oflag &= ~ONLCR;
5610 - }
5611 /* allocate memory for transfer buffer */
5612 transfer_buffer = kzalloc(transfer_buffer_length, GFP_KERNEL);
5613 if (!transfer_buffer)
5614 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
5615 index c784ddb..0101548 100644
5616 --- a/drivers/usb/serial/option.c
5617 +++ b/drivers/usb/serial/option.c
5618 @@ -292,6 +292,7 @@ static int option_resume(struct usb_serial *serial);
5619
5620 #define TELIT_VENDOR_ID 0x1bc7
5621 #define TELIT_PRODUCT_UC864E 0x1003
5622 +#define TELIT_PRODUCT_UC864G 0x1004
5623
5624 /* ZTE PRODUCTS */
5625 #define ZTE_VENDOR_ID 0x19d2
5626 @@ -300,6 +301,7 @@ static int option_resume(struct usb_serial *serial);
5627 #define ZTE_PRODUCT_MF626 0x0031
5628 #define ZTE_PRODUCT_CDMA_TECH 0xfffe
5629 #define ZTE_PRODUCT_AC8710 0xfff1
5630 +#define ZTE_PRODUCT_AC2726 0xfff5
5631
5632 #define BENQ_VENDOR_ID 0x04a5
5633 #define BENQ_PRODUCT_H10 0x4068
5634 @@ -503,6 +505,7 @@ static struct usb_device_id option_ids[] = {
5635 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
5636 { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
5637 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) },
5638 + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) },
5639 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
5640 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff) },
5641 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0003, 0xff, 0xff, 0xff) },
5642 @@ -572,6 +575,7 @@ static struct usb_device_id option_ids[] = {
5643 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0073, 0xff, 0xff, 0xff) },
5644 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) },
5645 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) },
5646 + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
5647 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
5648 { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
5649 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4512) },
5650 diff --git a/drivers/usb/serial/oti6858.c b/drivers/usb/serial/oti6858.c
5651 index 3cece27..ef34cff 100644
5652 --- a/drivers/usb/serial/oti6858.c
5653 +++ b/drivers/usb/serial/oti6858.c
5654 @@ -146,6 +146,7 @@ static int oti6858_open(struct tty_struct *tty,
5655 static void oti6858_close(struct usb_serial_port *port);
5656 static void oti6858_set_termios(struct tty_struct *tty,
5657 struct usb_serial_port *port, struct ktermios *old);
5658 +static void oti6858_init_termios(struct tty_struct *tty);
5659 static int oti6858_ioctl(struct tty_struct *tty, struct file *file,
5660 unsigned int cmd, unsigned long arg);
5661 static void oti6858_read_int_callback(struct urb *urb);
5662 @@ -186,6 +187,7 @@ static struct usb_serial_driver oti6858_device = {
5663 .write = oti6858_write,
5664 .ioctl = oti6858_ioctl,
5665 .set_termios = oti6858_set_termios,
5666 + .init_termios = oti6858_init_termios,
5667 .tiocmget = oti6858_tiocmget,
5668 .tiocmset = oti6858_tiocmset,
5669 .read_bulk_callback = oti6858_read_bulk_callback,
5670 @@ -206,7 +208,6 @@ struct oti6858_private {
5671 struct {
5672 u8 read_urb_in_use;
5673 u8 write_urb_in_use;
5674 - u8 termios_initialized;
5675 } flags;
5676 struct delayed_work delayed_write_work;
5677
5678 @@ -447,6 +448,14 @@ static int oti6858_chars_in_buffer(struct tty_struct *tty)
5679 return chars;
5680 }
5681
5682 +static void oti6858_init_termios(struct tty_struct *tty)
5683 +{
5684 + *(tty->termios) = tty_std_termios;
5685 + tty->termios->c_cflag = B38400 | CS8 | CREAD | HUPCL | CLOCAL;
5686 + tty->termios->c_ispeed = 38400;
5687 + tty->termios->c_ospeed = 38400;
5688 +}
5689 +
5690 static void oti6858_set_termios(struct tty_struct *tty,
5691 struct usb_serial_port *port, struct ktermios *old_termios)
5692 {
5693 @@ -464,16 +473,6 @@ static void oti6858_set_termios(struct tty_struct *tty,
5694 return;
5695 }
5696
5697 - spin_lock_irqsave(&priv->lock, flags);
5698 - if (!priv->flags.termios_initialized) {
5699 - *(tty->termios) = tty_std_termios;
5700 - tty->termios->c_cflag = B38400 | CS8 | CREAD | HUPCL | CLOCAL;
5701 - tty->termios->c_ispeed = 38400;
5702 - tty->termios->c_ospeed = 38400;
5703 - priv->flags.termios_initialized = 1;
5704 - }
5705 - spin_unlock_irqrestore(&priv->lock, flags);
5706 -
5707 cflag = tty->termios->c_cflag;
5708
5709 spin_lock_irqsave(&priv->lock, flags);
5710 diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
5711 index 3e86815..124d5ae 100644
5712 --- a/drivers/usb/serial/pl2303.c
5713 +++ b/drivers/usb/serial/pl2303.c
5714 @@ -96,6 +96,7 @@ static struct usb_device_id id_table [] = {
5715 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
5716 { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
5717 { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
5718 + { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
5719 { } /* Terminating entry */
5720 };
5721
5722 diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
5723 index ee9505e..d640dc9 100644
5724 --- a/drivers/usb/serial/pl2303.h
5725 +++ b/drivers/usb/serial/pl2303.h
5726 @@ -130,3 +130,7 @@
5727 /* Sony, USB data cable for CMD-Jxx mobile phones */
5728 #define SONY_VENDOR_ID 0x054c
5729 #define SONY_QN3USB_PRODUCT_ID 0x0437
5730 +
5731 +/* Sanwa KB-USB2 multimeter cable (ID: 11ad:0001) */
5732 +#define SANWA_VENDOR_ID 0x11ad
5733 +#define SANWA_PRODUCT_ID 0x0001
5734 diff --git a/drivers/usb/serial/spcp8x5.c b/drivers/usb/serial/spcp8x5.c
5735 index 3c249d8..993a6d5 100644
5736 --- a/drivers/usb/serial/spcp8x5.c
5737 +++ b/drivers/usb/serial/spcp8x5.c
5738 @@ -299,7 +299,6 @@ struct spcp8x5_private {
5739 wait_queue_head_t delta_msr_wait;
5740 u8 line_control;
5741 u8 line_status;
5742 - u8 termios_initialized;
5743 };
5744
5745 /* desc : when device plug in,this function would be called.
5746 @@ -498,6 +497,15 @@ static void spcp8x5_close(struct usb_serial_port *port)
5747 dev_dbg(&port->dev, "usb_unlink_urb(read_urb) = %d\n", result);
5748 }
5749
5750 +static void spcp8x5_init_termios(struct tty_struct *tty)
5751 +{
5752 + /* for the 1st time call this function */
5753 + *(tty->termios) = tty_std_termios;
5754 + tty->termios->c_cflag = B115200 | CS8 | CREAD | HUPCL | CLOCAL;
5755 + tty->termios->c_ispeed = 115200;
5756 + tty->termios->c_ospeed = 115200;
5757 +}
5758 +
5759 /* set the serial param for transfer. we should check if we really need to
5760 * transfer. if we set flow control we should do this too. */
5761 static void spcp8x5_set_termios(struct tty_struct *tty,
5762 @@ -514,16 +522,6 @@ static void spcp8x5_set_termios(struct tty_struct *tty,
5763 int i;
5764 u8 control;
5765
5766 - /* for the 1st time call this function */
5767 - spin_lock_irqsave(&priv->lock, flags);
5768 - if (!priv->termios_initialized) {
5769 - *(tty->termios) = tty_std_termios;
5770 - tty->termios->c_cflag = B115200 | CS8 | CREAD | HUPCL | CLOCAL;
5771 - tty->termios->c_ispeed = 115200;
5772 - tty->termios->c_ospeed = 115200;
5773 - priv->termios_initialized = 1;
5774 - }
5775 - spin_unlock_irqrestore(&priv->lock, flags);
5776
5777 /* check that they really want us to change something */
5778 if (!tty_termios_hw_change(tty->termios, old_termios))
5779 @@ -1011,6 +1009,7 @@ static struct usb_serial_driver spcp8x5_device = {
5780 .carrier_raised = spcp8x5_carrier_raised,
5781 .write = spcp8x5_write,
5782 .set_termios = spcp8x5_set_termios,
5783 + .init_termios = spcp8x5_init_termios,
5784 .ioctl = spcp8x5_ioctl,
5785 .tiocmget = spcp8x5_tiocmget,
5786 .tiocmset = spcp8x5_tiocmset,
5787 diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
5788 index 99188c9..a0702db 100644
5789 --- a/drivers/usb/serial/usb-serial.c
5790 +++ b/drivers/usb/serial/usb-serial.c
5791 @@ -43,8 +43,6 @@
5792 #define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/"
5793 #define DRIVER_DESC "USB Serial Driver core"
5794
5795 -static void port_free(struct usb_serial_port *port);
5796 -
5797 /* Driver structure we register with the USB core */
5798 static struct usb_driver usb_serial_driver = {
5799 .name = "usbserial",
5800 @@ -68,6 +66,11 @@ static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
5801 static DEFINE_MUTEX(table_lock);
5802 static LIST_HEAD(usb_serial_driver_list);
5803
5804 +/*
5805 + * Look up the serial structure. If it is found and it hasn't been
5806 + * disconnected, return with its disc_mutex held and its refcount
5807 + * incremented. Otherwise return NULL.
5808 + */
5809 struct usb_serial *usb_serial_get_by_index(unsigned index)
5810 {
5811 struct usb_serial *serial;
5812 @@ -75,8 +78,15 @@ struct usb_serial *usb_serial_get_by_index(unsigned index)
5813 mutex_lock(&table_lock);
5814 serial = serial_table[index];
5815
5816 - if (serial)
5817 - kref_get(&serial->kref);
5818 + if (serial) {
5819 + mutex_lock(&serial->disc_mutex);
5820 + if (serial->disconnected) {
5821 + mutex_unlock(&serial->disc_mutex);
5822 + serial = NULL;
5823 + } else {
5824 + kref_get(&serial->kref);
5825 + }
5826 + }
5827 mutex_unlock(&table_lock);
5828 return serial;
5829 }
5830 @@ -125,8 +135,10 @@ static void return_serial(struct usb_serial *serial)
5831
5832 dbg("%s", __func__);
5833
5834 + mutex_lock(&table_lock);
5835 for (i = 0; i < serial->num_ports; ++i)
5836 serial_table[serial->minor + i] = NULL;
5837 + mutex_unlock(&table_lock);
5838 }
5839
5840 static void destroy_serial(struct kref *kref)
5841 @@ -145,161 +157,157 @@ static void destroy_serial(struct kref *kref)
5842
5843 serial->type->release(serial);
5844
5845 - for (i = 0; i < serial->num_ports; ++i) {
5846 + /* Now that nothing is using the ports, they can be freed */
5847 + for (i = 0; i < serial->num_port_pointers; ++i) {
5848 port = serial->port[i];
5849 - if (port)
5850 + if (port) {
5851 + port->serial = NULL;
5852 put_device(&port->dev);
5853 - }
5854 -
5855 - /* If this is a "fake" port, we have to clean it up here, as it will
5856 - * not get cleaned up in port_release() as it was never registered with
5857 - * the driver core */
5858 - if (serial->num_ports < serial->num_port_pointers) {
5859 - for (i = serial->num_ports;
5860 - i < serial->num_port_pointers; ++i) {
5861 - port = serial->port[i];
5862 - if (port)
5863 - port_free(port);
5864 }
5865 }
5866
5867 usb_put_dev(serial->dev);
5868 -
5869 - /* free up any memory that we allocated */
5870 kfree(serial);
5871 }
5872
5873 void usb_serial_put(struct usb_serial *serial)
5874 {
5875 - mutex_lock(&table_lock);
5876 kref_put(&serial->kref, destroy_serial);
5877 - mutex_unlock(&table_lock);
5878 }
5879
5880 /*****************************************************************************
5881 * Driver tty interface functions
5882 *****************************************************************************/
5883 -static int serial_open (struct tty_struct *tty, struct file *filp)
5884 +
5885 +/**
5886 + * serial_install - install tty
5887 + * @driver: the driver (USB in our case)
5888 + * @tty: the tty being created
5889 + *
5890 + * Create the termios objects for this tty. We use the default
5891 + * USB serial settings but permit them to be overridden by
5892 + * serial->type->init_termios.
5893 + *
5894 + * This is the first place a new tty gets used. Hence this is where we
5895 + * acquire references to the usb_serial structure and the driver module,
5896 + * where we store a pointer to the port, and where we do an autoresume.
5897 + * All these actions are reversed in serial_release().
5898 + */
5899 +static int serial_install(struct tty_driver *driver, struct tty_struct *tty)
5900 {
5901 + int idx = tty->index;
5902 struct usb_serial *serial;
5903 struct usb_serial_port *port;
5904 - unsigned int portNumber;
5905 - int retval = 0;
5906 - int first = 0;
5907 + int retval = -ENODEV;
5908
5909 dbg("%s", __func__);
5910
5911 - /* get the serial object associated with this tty pointer */
5912 - serial = usb_serial_get_by_index(tty->index);
5913 - if (!serial) {
5914 - tty->driver_data = NULL;
5915 - return -ENODEV;
5916 - }
5917 + serial = usb_serial_get_by_index(idx);
5918 + if (!serial)
5919 + return retval;
5920
5921 - mutex_lock(&serial->disc_mutex);
5922 - portNumber = tty->index - serial->minor;
5923 - port = serial->port[portNumber];
5924 - if (!port || serial->disconnected)
5925 - retval = -ENODEV;
5926 - else
5927 - get_device(&port->dev);
5928 - /*
5929 - * Note: Our locking order requirement does not allow port->mutex
5930 - * to be acquired while serial->disc_mutex is held.
5931 - */
5932 - mutex_unlock(&serial->disc_mutex);
5933 + port = serial->port[idx - serial->minor];
5934 + if (!port)
5935 + goto error_no_port;
5936 + if (!try_module_get(serial->type->driver.owner))
5937 + goto error_module_get;
5938 +
5939 + /* perform the standard setup */
5940 + retval = tty_init_termios(tty);
5941 if (retval)
5942 - goto bailout_serial_put;
5943 + goto error_init_termios;
5944
5945 - if (mutex_lock_interruptible(&port->mutex)) {
5946 - retval = -ERESTARTSYS;
5947 - goto bailout_port_put;
5948 - }
5949 + retval = usb_autopm_get_interface(serial->interface);
5950 + if (retval)
5951 + goto error_get_interface;
5952 +
5953 + mutex_unlock(&serial->disc_mutex);
5954
5955 - ++port->port.count;
5956 + /* allow the driver to update the settings */
5957 + if (serial->type->init_termios)
5958 + serial->type->init_termios(tty);
5959
5960 - /* set up our port structure making the tty driver
5961 - * remember our port object, and us it */
5962 tty->driver_data = port;
5963 - tty_port_tty_set(&port->port, tty);
5964
5965 - /* If the console is attached, the device is already open */
5966 - if (port->port.count == 1 && !port->console) {
5967 - first = 1;
5968 - /* lock this module before we call it
5969 - * this may fail, which means we must bail out,
5970 - * safe because we are called with BKL held */
5971 - if (!try_module_get(serial->type->driver.owner)) {
5972 - retval = -ENODEV;
5973 - goto bailout_mutex_unlock;
5974 - }
5975 + /* Final install (we use the default method) */
5976 + tty_driver_kref_get(driver);
5977 + tty->count++;
5978 + driver->ttys[idx] = tty;
5979 + return retval;
5980
5981 + error_get_interface:
5982 + error_init_termios:
5983 + module_put(serial->type->driver.owner);
5984 + error_module_get:
5985 + error_no_port:
5986 + usb_serial_put(serial);
5987 + mutex_unlock(&serial->disc_mutex);
5988 + return retval;
5989 +}
5990 +
5991 +static int serial_open(struct tty_struct *tty, struct file *filp)
5992 +{
5993 + struct usb_serial_port *port = tty->driver_data;
5994 + struct usb_serial *serial = port->serial;
5995 + int retval;
5996 +
5997 + dbg("%s - port %d", __func__, port->number);
5998 +
5999 + spin_lock_irq(&port->port.lock);
6000 + if (!tty_hung_up_p(filp))
6001 + ++port->port.count;
6002 + spin_unlock_irq(&port->port.lock);
6003 + tty_port_tty_set(&port->port, tty);
6004 +
6005 + /* Do the device-specific open only if the hardware isn't
6006 + * already initialized.
6007 + */
6008 + if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags)) {
6009 + if (mutex_lock_interruptible(&port->mutex))
6010 + return -ERESTARTSYS;
6011 mutex_lock(&serial->disc_mutex);
6012 if (serial->disconnected)
6013 retval = -ENODEV;
6014 else
6015 - retval = usb_autopm_get_interface(serial->interface);
6016 - if (retval)
6017 - goto bailout_module_put;
6018 -
6019 - /* only call the device specific open if this
6020 - * is the first time the port is opened */
6021 - retval = serial->type->open(tty, port, filp);
6022 - if (retval)
6023 - goto bailout_interface_put;
6024 + retval = port->serial->type->open(tty, port, filp);
6025 mutex_unlock(&serial->disc_mutex);
6026 + mutex_unlock(&port->mutex);
6027 + if (retval)
6028 + return retval;
6029 set_bit(ASYNCB_INITIALIZED, &port->port.flags);
6030 }
6031 - mutex_unlock(&port->mutex);
6032 +
6033 /* Now do the correct tty layer semantics */
6034 retval = tty_port_block_til_ready(&port->port, tty, filp);
6035 - if (retval == 0) {
6036 - if (!first)
6037 - usb_serial_put(serial);
6038 - return 0;
6039 - }
6040 - mutex_lock(&port->mutex);
6041 - if (first == 0)
6042 - goto bailout_mutex_unlock;
6043 - /* Undo the initial port actions */
6044 - mutex_lock(&serial->disc_mutex);
6045 -bailout_interface_put:
6046 - usb_autopm_put_interface(serial->interface);
6047 -bailout_module_put:
6048 - mutex_unlock(&serial->disc_mutex);
6049 - module_put(serial->type->driver.owner);
6050 -bailout_mutex_unlock:
6051 - port->port.count = 0;
6052 - tty->driver_data = NULL;
6053 - tty_port_tty_set(&port->port, NULL);
6054 - mutex_unlock(&port->mutex);
6055 -bailout_port_put:
6056 - put_device(&port->dev);
6057 -bailout_serial_put:
6058 - usb_serial_put(serial);
6059 return retval;
6060 }
6061
6062 /**
6063 - * serial_do_down - shut down hardware
6064 - * @port: port to shut down
6065 - *
6066 - * Shut down a USB port unless it is the console. We never shut down the
6067 - * console hardware as it will always be in use.
6068 + * serial_down - shut down hardware
6069 + * @port: port to shut down
6070 *
6071 - * Don't free any resources at this point
6072 + * Shut down a USB serial port unless it is the console. We never
6073 + * shut down the console hardware as it will always be in use.
6074 */
6075 -static void serial_do_down(struct usb_serial_port *port)
6076 +static void serial_down(struct usb_serial_port *port)
6077 {
6078 struct usb_serial_driver *drv = port->serial->type;
6079 struct usb_serial *serial;
6080 struct module *owner;
6081
6082 - /* The console is magical, do not hang up the console hardware
6083 - or there will be tears */
6084 + /*
6085 + * The console is magical. Do not hang up the console hardware
6086 + * or there will be tears.
6087 + */
6088 if (port->console)
6089 return;
6090
6091 + /* Don't call the close method if the hardware hasn't been
6092 + * initialized.
6093 + */
6094 + if (!test_and_clear_bit(ASYNCB_INITIALIZED, &port->port.flags))
6095 + return;
6096 +
6097 mutex_lock(&port->mutex);
6098 serial = port->serial;
6099 owner = serial->type->driver.owner;
6100 @@ -310,79 +318,69 @@ static void serial_do_down(struct usb_serial_port *port)
6101 mutex_unlock(&port->mutex);
6102 }
6103
6104 -/**
6105 - * serial_do_free - free resources post close/hangup
6106 - * @port: port to free up
6107 - *
6108 - * Do the resource freeing and refcount dropping for the port. We must
6109 - * be careful about ordering and we must avoid freeing up the console.
6110 - */
6111 -
6112 -static void serial_do_free(struct usb_serial_port *port)
6113 +static void serial_hangup(struct tty_struct *tty)
6114 {
6115 - struct usb_serial *serial;
6116 - struct module *owner;
6117 + struct usb_serial_port *port = tty->driver_data;
6118
6119 - /* The console is magical, do not hang up the console hardware
6120 - or there will be tears */
6121 - if (port->console)
6122 - return;
6123 + dbg("%s - port %d", __func__, port->number);
6124
6125 - serial = port->serial;
6126 - owner = serial->type->driver.owner;
6127 - put_device(&port->dev);
6128 - /* Mustn't dereference port any more */
6129 - mutex_lock(&serial->disc_mutex);
6130 - if (!serial->disconnected)
6131 - usb_autopm_put_interface(serial->interface);
6132 - mutex_unlock(&serial->disc_mutex);
6133 - usb_serial_put(serial);
6134 - /* Mustn't dereference serial any more */
6135 - module_put(owner);
6136 + serial_down(port);
6137 + tty_port_hangup(&port->port);
6138 }
6139
6140 static void serial_close(struct tty_struct *tty, struct file *filp)
6141 {
6142 struct usb_serial_port *port = tty->driver_data;
6143
6144 - if (!port)
6145 - return;
6146 -
6147 dbg("%s - port %d", __func__, port->number);
6148
6149 - /* FIXME:
6150 - This leaves a very narrow race. Really we should do the
6151 - serial_do_free() on tty->shutdown(), but tty->shutdown can
6152 - be called from IRQ context and serial_do_free can sleep.
6153 -
6154 - The right fix is probably to make the tty free (which is rare)
6155 - and thus tty->shutdown() occur via a work queue and simplify all
6156 - the drivers that use it.
6157 - */
6158 - if (tty_hung_up_p(filp)) {
6159 - /* serial_hangup already called serial_down at this point.
6160 - Another user may have already reopened the port but
6161 - serial_do_free is refcounted */
6162 - serial_do_free(port);
6163 + if (tty_hung_up_p(filp))
6164 return;
6165 - }
6166 -
6167 if (tty_port_close_start(&port->port, tty, filp) == 0)
6168 return;
6169 -
6170 - serial_do_down(port);
6171 + serial_down(port);
6172 tty_port_close_end(&port->port, tty);
6173 tty_port_tty_set(&port->port, NULL);
6174 - serial_do_free(port);
6175 }
6176
6177 -static void serial_hangup(struct tty_struct *tty)
6178 +/**
6179 + * serial_release - free resources post close/hangup
6180 + * @port: port to free up
6181 + *
6182 + * Do the resource freeing and refcount dropping for the port.
6183 + * Avoid freeing the console.
6184 + *
6185 + * Called when the last tty kref is dropped.
6186 + */
6187 +static void serial_release(struct tty_struct *tty)
6188 {
6189 struct usb_serial_port *port = tty->driver_data;
6190 - serial_do_down(port);
6191 - tty_port_hangup(&port->port);
6192 - /* We must not free port yet - the USB serial layer depends on it's
6193 - continued existence */
6194 + struct usb_serial *serial;
6195 + struct module *owner;
6196 +
6197 + /* The console is magical. Do not hang up the console hardware
6198 + * or there will be tears.
6199 + */
6200 + if (port->console)
6201 + return;
6202 +
6203 + dbg("%s - port %d", __func__, port->number);
6204 +
6205 + /* Standard shutdown processing */
6206 + tty_shutdown(tty);
6207 +
6208 + tty->driver_data = NULL;
6209 +
6210 + serial = port->serial;
6211 + owner = serial->type->driver.owner;
6212 +
6213 + mutex_lock(&serial->disc_mutex);
6214 + if (!serial->disconnected)
6215 + usb_autopm_put_interface(serial->interface);
6216 + mutex_unlock(&serial->disc_mutex);
6217 +
6218 + usb_serial_put(serial);
6219 + module_put(owner);
6220 }
6221
6222 static int serial_write(struct tty_struct *tty, const unsigned char *buf,
6223 @@ -527,6 +525,7 @@ static int serial_proc_show(struct seq_file *m, void *v)
6224
6225 seq_putc(m, '\n');
6226 usb_serial_put(serial);
6227 + mutex_unlock(&serial->disc_mutex);
6228 }
6229 return 0;
6230 }
6231 @@ -596,14 +595,6 @@ static void usb_serial_port_work(struct work_struct *work)
6232 tty_kref_put(tty);
6233 }
6234
6235 -static void port_release(struct device *dev)
6236 -{
6237 - struct usb_serial_port *port = to_usb_serial_port(dev);
6238 -
6239 - dbg ("%s - %s", __func__, dev_name(dev));
6240 - port_free(port);
6241 -}
6242 -
6243 static void kill_traffic(struct usb_serial_port *port)
6244 {
6245 usb_kill_urb(port->read_urb);
6246 @@ -623,8 +614,12 @@ static void kill_traffic(struct usb_serial_port *port)
6247 usb_kill_urb(port->interrupt_out_urb);
6248 }
6249
6250 -static void port_free(struct usb_serial_port *port)
6251 +static void port_release(struct device *dev)
6252 {
6253 + struct usb_serial_port *port = to_usb_serial_port(dev);
6254 +
6255 + dbg ("%s - %s", __func__, dev_name(dev));
6256 +
6257 /*
6258 * Stop all the traffic before cancelling the work, so that
6259 * nobody will restart it by calling usb_serial_port_softint.
6260 @@ -935,6 +930,11 @@ int usb_serial_probe(struct usb_interface *interface,
6261 mutex_init(&port->mutex);
6262 INIT_WORK(&port->work, usb_serial_port_work);
6263 serial->port[i] = port;
6264 + port->dev.parent = &interface->dev;
6265 + port->dev.driver = NULL;
6266 + port->dev.bus = &usb_serial_bus_type;
6267 + port->dev.release = &port_release;
6268 + device_initialize(&port->dev);
6269 }
6270
6271 /* set up the endpoint information */
6272 @@ -1077,15 +1077,10 @@ int usb_serial_probe(struct usb_interface *interface,
6273 /* register all of the individual ports with the driver core */
6274 for (i = 0; i < num_ports; ++i) {
6275 port = serial->port[i];
6276 - port->dev.parent = &interface->dev;
6277 - port->dev.driver = NULL;
6278 - port->dev.bus = &usb_serial_bus_type;
6279 - port->dev.release = &port_release;
6280 -
6281 dev_set_name(&port->dev, "ttyUSB%d", port->number);
6282 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
6283 port->dev_state = PORT_REGISTERING;
6284 - retval = device_register(&port->dev);
6285 + retval = device_add(&port->dev);
6286 if (retval) {
6287 dev_err(&port->dev, "Error registering port device, "
6288 "continuing\n");
6289 @@ -1103,39 +1098,7 @@ exit:
6290 return 0;
6291
6292 probe_error:
6293 - for (i = 0; i < num_bulk_in; ++i) {
6294 - port = serial->port[i];
6295 - if (!port)
6296 - continue;
6297 - usb_free_urb(port->read_urb);
6298 - kfree(port->bulk_in_buffer);
6299 - }
6300 - for (i = 0; i < num_bulk_out; ++i) {
6301 - port = serial->port[i];
6302 - if (!port)
6303 - continue;
6304 - usb_free_urb(port->write_urb);
6305 - kfree(port->bulk_out_buffer);
6306 - }
6307 - for (i = 0; i < num_interrupt_in; ++i) {
6308 - port = serial->port[i];
6309 - if (!port)
6310 - continue;
6311 - usb_free_urb(port->interrupt_in_urb);
6312 - kfree(port->interrupt_in_buffer);
6313 - }
6314 - for (i = 0; i < num_interrupt_out; ++i) {
6315 - port = serial->port[i];
6316 - if (!port)
6317 - continue;
6318 - usb_free_urb(port->interrupt_out_urb);
6319 - kfree(port->interrupt_out_buffer);
6320 - }
6321 -
6322 - /* free up any memory that we allocated */
6323 - for (i = 0; i < serial->num_port_pointers; ++i)
6324 - kfree(serial->port[i]);
6325 - kfree(serial);
6326 + usb_serial_put(serial);
6327 return -EIO;
6328 }
6329 EXPORT_SYMBOL_GPL(usb_serial_probe);
6330 @@ -1161,10 +1124,7 @@ void usb_serial_disconnect(struct usb_interface *interface)
6331 if (port) {
6332 struct tty_struct *tty = tty_port_tty_get(&port->port);
6333 if (tty) {
6334 - /* The hangup will occur asynchronously but
6335 - the object refcounts will sort out all the
6336 - cleanup */
6337 - tty_hangup(tty);
6338 + tty_vhangup(tty);
6339 tty_kref_put(tty);
6340 }
6341 kill_traffic(port);
6342 @@ -1189,8 +1149,7 @@ void usb_serial_disconnect(struct usb_interface *interface)
6343 }
6344 serial->type->disconnect(serial);
6345
6346 - /* let the last holder of this object
6347 - * cause it to be cleaned up */
6348 + /* let the last holder of this object cause it to be cleaned up */
6349 usb_serial_put(serial);
6350 dev_info(dev, "device disconnected\n");
6351 }
6352 @@ -1246,6 +1205,8 @@ static const struct tty_operations serial_ops = {
6353 .chars_in_buffer = serial_chars_in_buffer,
6354 .tiocmget = serial_tiocmget,
6355 .tiocmset = serial_tiocmset,
6356 + .shutdown = serial_release,
6357 + .install = serial_install,
6358 .proc_fops = &serial_proc_fops,
6359 };
6360
6361 diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
6362 index 8d126dd..f7232b1 100644
6363 --- a/drivers/usb/serial/whiteheat.c
6364 +++ b/drivers/usb/serial/whiteheat.c
6365 @@ -259,7 +259,7 @@ static int firm_send_command(struct usb_serial_port *port, __u8 command,
6366 __u8 *data, __u8 datasize);
6367 static int firm_open(struct usb_serial_port *port);
6368 static int firm_close(struct usb_serial_port *port);
6369 -static int firm_setup_port(struct tty_struct *tty);
6370 +static void firm_setup_port(struct tty_struct *tty);
6371 static int firm_set_rts(struct usb_serial_port *port, __u8 onoff);
6372 static int firm_set_dtr(struct usb_serial_port *port, __u8 onoff);
6373 static int firm_set_break(struct usb_serial_port *port, __u8 onoff);
6374 @@ -1211,7 +1211,7 @@ static int firm_close(struct usb_serial_port *port)
6375 }
6376
6377
6378 -static int firm_setup_port(struct tty_struct *tty)
6379 +static void firm_setup_port(struct tty_struct *tty)
6380 {
6381 struct usb_serial_port *port = tty->driver_data;
6382 struct whiteheat_port_settings port_settings;
6383 @@ -1286,7 +1286,7 @@ static int firm_setup_port(struct tty_struct *tty)
6384 port_settings.lloop = 0;
6385
6386 /* now send the message to the device */
6387 - return firm_send_command(port, WHITEHEAT_SETUP_PORT,
6388 + firm_send_command(port, WHITEHEAT_SETUP_PORT,
6389 (__u8 *)&port_settings, sizeof(port_settings));
6390 }
6391
6392 diff --git a/drivers/usb/storage/initializers.c b/drivers/usb/storage/initializers.c
6393 index ec17c96..105d900 100644
6394 --- a/drivers/usb/storage/initializers.c
6395 +++ b/drivers/usb/storage/initializers.c
6396 @@ -102,5 +102,5 @@ int usb_stor_huawei_e220_init(struct us_data *us)
6397 USB_TYPE_STANDARD | USB_RECIP_DEVICE,
6398 0x01, 0x0, NULL, 0x0, 1000);
6399 US_DEBUGP("Huawei mode set result is %d\n", result);
6400 - return (result ? 0 : -ENODEV);
6401 + return 0;
6402 }
6403 diff --git a/drivers/usb/storage/onetouch.c b/drivers/usb/storage/onetouch.c
6404 index 380233b..80e65f2 100644
6405 --- a/drivers/usb/storage/onetouch.c
6406 +++ b/drivers/usb/storage/onetouch.c
6407 @@ -163,7 +163,7 @@ static void usb_onetouch_pm_hook(struct us_data *us, int action)
6408 usb_kill_urb(onetouch->irq);
6409 break;
6410 case US_RESUME:
6411 - if (usb_submit_urb(onetouch->irq, GFP_KERNEL) != 0)
6412 + if (usb_submit_urb(onetouch->irq, GFP_NOIO) != 0)
6413 dev_err(&onetouch->irq->dev->dev,
6414 "usb_submit_urb failed\n");
6415 break;
6416 diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
6417 index 3a44695..29ff5ea 100644
6418 --- a/drivers/video/console/fbcon.c
6419 +++ b/drivers/video/console/fbcon.c
6420 @@ -114,6 +114,7 @@ static int last_fb_vc = MAX_NR_CONSOLES - 1;
6421 static int fbcon_is_default = 1;
6422 static int fbcon_has_exited;
6423 static int primary_device = -1;
6424 +static int fbcon_has_console_bind;
6425
6426 #ifdef CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY
6427 static int map_override;
6428 @@ -544,6 +545,8 @@ static int fbcon_takeover(int show_logo)
6429 con2fb_map[i] = -1;
6430 }
6431 info_idx = -1;
6432 + } else {
6433 + fbcon_has_console_bind = 1;
6434 }
6435
6436 return err;
6437 @@ -2923,6 +2926,10 @@ static int fbcon_unbind(void)
6438
6439 ret = unbind_con_driver(&fb_con, first_fb_vc, last_fb_vc,
6440 fbcon_is_default);
6441 +
6442 + if (!ret)
6443 + fbcon_has_console_bind = 0;
6444 +
6445 return ret;
6446 }
6447 #else
6448 @@ -2936,6 +2943,9 @@ static int fbcon_fb_unbind(int idx)
6449 {
6450 int i, new_idx = -1, ret = 0;
6451
6452 + if (!fbcon_has_console_bind)
6453 + return 0;
6454 +
6455 for (i = first_fb_vc; i <= last_fb_vc; i++) {
6456 if (con2fb_map[i] != idx &&
6457 con2fb_map[i] != -1) {
6458 diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
6459 index 5a72083..adf9632 100644
6460 --- a/drivers/video/s3c-fb.c
6461 +++ b/drivers/video/s3c-fb.c
6462 @@ -1036,7 +1036,7 @@ static int s3c_fb_resume(struct platform_device *pdev)
6463
6464 static struct platform_driver s3c_fb_driver = {
6465 .probe = s3c_fb_probe,
6466 - .remove = s3c_fb_remove,
6467 + .remove = __devexit_p(s3c_fb_remove),
6468 .suspend = s3c_fb_suspend,
6469 .resume = s3c_fb_resume,
6470 .driver = {
6471 diff --git a/drivers/video/sis/vstruct.h b/drivers/video/sis/vstruct.h
6472 index 705c853..bef4aae 100644
6473 --- a/drivers/video/sis/vstruct.h
6474 +++ b/drivers/video/sis/vstruct.h
6475 @@ -342,7 +342,7 @@ struct SiS_Private
6476 unsigned short SiS_RY4COE;
6477 unsigned short SiS_LCDHDES;
6478 unsigned short SiS_LCDVDES;
6479 - unsigned short SiS_DDC_Port;
6480 + SISIOADDRESS SiS_DDC_Port;
6481 unsigned short SiS_DDC_Index;
6482 unsigned short SiS_DDC_Data;
6483 unsigned short SiS_DDC_NData;
6484 diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
6485 index ec2a39b..7c28434 100644
6486 --- a/drivers/xen/Makefile
6487 +++ b/drivers/xen/Makefile
6488 @@ -1,6 +1,9 @@
6489 obj-y += grant-table.o features.o events.o manage.o
6490 obj-y += xenbus/
6491
6492 +nostackp := $(call cc-option, -fno-stack-protector)
6493 +CFLAGS_features.o := $(nostackp)
6494 +
6495 obj-$(CONFIG_HOTPLUG_CPU) += cpu_hotplug.o
6496 obj-$(CONFIG_XEN_XENCOMM) += xencomm.o
6497 obj-$(CONFIG_XEN_BALLOON) += balloon.o
6498 diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
6499 index 6084d63..3cfec69 100644
6500 --- a/fs/cifs/cifsglob.h
6501 +++ b/fs/cifs/cifsglob.h
6502 @@ -572,9 +572,9 @@ require use of the stronger protocol */
6503 #define CIFSSEC_MUST_LANMAN 0x10010
6504 #define CIFSSEC_MUST_PLNTXT 0x20020
6505 #ifdef CONFIG_CIFS_UPCALL
6506 -#define CIFSSEC_MASK 0xAF0AF /* allows weak security but also krb5 */
6507 +#define CIFSSEC_MASK 0xBF0BF /* allows weak security but also krb5 */
6508 #else
6509 -#define CIFSSEC_MASK 0xA70A7 /* current flags supported if weak */
6510 +#define CIFSSEC_MASK 0xB70B7 /* current flags supported if weak */
6511 #endif /* UPCALL */
6512 #else /* do not allow weak pw hash */
6513 #ifdef CONFIG_CIFS_UPCALL
6514 diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
6515 index b91851f..f0b53df 100644
6516 --- a/fs/ecryptfs/crypto.c
6517 +++ b/fs/ecryptfs/crypto.c
6518 @@ -797,6 +797,7 @@ int ecryptfs_init_crypt_ctx(struct ecryptfs_crypt_stat *crypt_stat)
6519 kfree(full_alg_name);
6520 if (IS_ERR(crypt_stat->tfm)) {
6521 rc = PTR_ERR(crypt_stat->tfm);
6522 + crypt_stat->tfm = NULL;
6523 ecryptfs_printk(KERN_ERR, "cryptfs: init_crypt_ctx(): "
6524 "Error initializing cipher [%s]\n",
6525 crypt_stat->cipher);
6526 @@ -1702,7 +1703,7 @@ ecryptfs_encrypt_filename(struct ecryptfs_filename *filename,
6527 } else {
6528 printk(KERN_ERR "%s: No support for requested filename "
6529 "encryption method in this release\n", __func__);
6530 - rc = -ENOTSUPP;
6531 + rc = -EOPNOTSUPP;
6532 goto out;
6533 }
6534 out:
6535 @@ -2166,7 +2167,7 @@ int ecryptfs_encrypt_and_encode_filename(
6536 (*encoded_name)[(*encoded_name_size)] = '\0';
6537 (*encoded_name_size)++;
6538 } else {
6539 - rc = -ENOTSUPP;
6540 + rc = -EOPNOTSUPP;
6541 }
6542 if (rc) {
6543 printk(KERN_ERR "%s: Error attempting to encode "
6544 diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
6545 index 2f0945d..056fed6 100644
6546 --- a/fs/ecryptfs/inode.c
6547 +++ b/fs/ecryptfs/inode.c
6548 @@ -476,6 +476,7 @@ static int ecryptfs_unlink(struct inode *dir, struct dentry *dentry)
6549 struct inode *lower_dir_inode = ecryptfs_inode_to_lower(dir);
6550 struct dentry *lower_dir_dentry;
6551
6552 + dget(lower_dentry);
6553 lower_dir_dentry = lock_parent(lower_dentry);
6554 rc = vfs_unlink(lower_dir_inode, lower_dentry);
6555 if (rc) {
6556 @@ -489,6 +490,7 @@ static int ecryptfs_unlink(struct inode *dir, struct dentry *dentry)
6557 d_drop(dentry);
6558 out_unlock:
6559 unlock_dir(lower_dir_dentry);
6560 + dput(lower_dentry);
6561 return rc;
6562 }
6563
6564 diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c
6565 index 259525c..c77438f 100644
6566 --- a/fs/ecryptfs/keystore.c
6567 +++ b/fs/ecryptfs/keystore.c
6568 @@ -416,7 +416,9 @@ ecryptfs_find_global_auth_tok_for_sig(
6569 &mount_crypt_stat->global_auth_tok_list,
6570 mount_crypt_stat_list) {
6571 if (memcmp(walker->sig, sig, ECRYPTFS_SIG_SIZE_HEX) == 0) {
6572 - (*global_auth_tok) = walker;
6573 + rc = key_validate(walker->global_auth_tok_key);
6574 + if (!rc)
6575 + (*global_auth_tok) = walker;
6576 goto out;
6577 }
6578 }
6579 @@ -612,7 +614,12 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes,
6580 }
6581 /* TODO: Support other key modules than passphrase for
6582 * filename encryption */
6583 - BUG_ON(s->auth_tok->token_type != ECRYPTFS_PASSWORD);
6584 + if (s->auth_tok->token_type != ECRYPTFS_PASSWORD) {
6585 + rc = -EOPNOTSUPP;
6586 + printk(KERN_INFO "%s: Filename encryption only supports "
6587 + "password tokens\n", __func__);
6588 + goto out_free_unlock;
6589 + }
6590 sg_init_one(
6591 &s->hash_sg,
6592 (u8 *)s->auth_tok->token.password.session_key_encryption_key,
6593 @@ -910,7 +917,12 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size,
6594 }
6595 /* TODO: Support other key modules than passphrase for
6596 * filename encryption */
6597 - BUG_ON(s->auth_tok->token_type != ECRYPTFS_PASSWORD);
6598 + if (s->auth_tok->token_type != ECRYPTFS_PASSWORD) {
6599 + rc = -EOPNOTSUPP;
6600 + printk(KERN_INFO "%s: Filename encryption only supports "
6601 + "password tokens\n", __func__);
6602 + goto out_free_unlock;
6603 + }
6604 rc = crypto_blkcipher_setkey(
6605 s->desc.tfm,
6606 s->auth_tok->token.password.session_key_encryption_key,
6607 @@ -1316,8 +1328,10 @@ parse_tag_3_packet(struct ecryptfs_crypt_stat *crypt_stat,
6608 rc = -EINVAL;
6609 goto out_free;
6610 }
6611 - ecryptfs_cipher_code_to_string(crypt_stat->cipher,
6612 - (u16)data[(*packet_size)]);
6613 + rc = ecryptfs_cipher_code_to_string(crypt_stat->cipher,
6614 + (u16)data[(*packet_size)]);
6615 + if (rc)
6616 + goto out_free;
6617 /* A little extra work to differentiate among the AES key
6618 * sizes; see RFC2440 */
6619 switch(data[(*packet_size)++]) {
6620 @@ -1328,7 +1342,9 @@ parse_tag_3_packet(struct ecryptfs_crypt_stat *crypt_stat,
6621 crypt_stat->key_size =
6622 (*new_auth_tok)->session_key.encrypted_key_size;
6623 }
6624 - ecryptfs_init_crypt_ctx(crypt_stat);
6625 + rc = ecryptfs_init_crypt_ctx(crypt_stat);
6626 + if (rc)
6627 + goto out_free;
6628 if (unlikely(data[(*packet_size)++] != 0x03)) {
6629 printk(KERN_WARNING "Only S2K ID 3 is currently supported\n");
6630 rc = -ENOSYS;
6631 diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c
6632 index c6d7a4d..e14cf7e 100644
6633 --- a/fs/ecryptfs/kthread.c
6634 +++ b/fs/ecryptfs/kthread.c
6635 @@ -136,6 +136,7 @@ int ecryptfs_privileged_open(struct file **lower_file,
6636 const struct cred *cred)
6637 {
6638 struct ecryptfs_open_req *req;
6639 + int flags = O_LARGEFILE;
6640 int rc = 0;
6641
6642 /* Corresponding dput() and mntput() are done when the
6643 @@ -143,10 +144,14 @@ int ecryptfs_privileged_open(struct file **lower_file,
6644 * destroyed. */
6645 dget(lower_dentry);
6646 mntget(lower_mnt);
6647 - (*lower_file) = dentry_open(lower_dentry, lower_mnt,
6648 - (O_RDWR | O_LARGEFILE), cred);
6649 + flags |= IS_RDONLY(lower_dentry->d_inode) ? O_RDONLY : O_RDWR;
6650 + (*lower_file) = dentry_open(lower_dentry, lower_mnt, flags, cred);
6651 if (!IS_ERR(*lower_file))
6652 goto out;
6653 + if (flags & O_RDONLY) {
6654 + rc = PTR_ERR((*lower_file));
6655 + goto out;
6656 + }
6657 req = kmem_cache_alloc(ecryptfs_open_req_cache, GFP_KERNEL);
6658 if (!req) {
6659 rc = -ENOMEM;
6660 @@ -180,21 +185,8 @@ int ecryptfs_privileged_open(struct file **lower_file,
6661 __func__);
6662 goto out_unlock;
6663 }
6664 - if (IS_ERR(*req->lower_file)) {
6665 + if (IS_ERR(*req->lower_file))
6666 rc = PTR_ERR(*req->lower_file);
6667 - dget(lower_dentry);
6668 - mntget(lower_mnt);
6669 - (*lower_file) = dentry_open(lower_dentry, lower_mnt,
6670 - (O_RDONLY | O_LARGEFILE), cred);
6671 - if (IS_ERR(*lower_file)) {
6672 - rc = PTR_ERR(*req->lower_file);
6673 - (*lower_file) = NULL;
6674 - printk(KERN_WARNING "%s: Error attempting privileged "
6675 - "open of lower file with either RW or RO "
6676 - "perms; rc = [%d]. Giving up.\n",
6677 - __func__, rc);
6678 - }
6679 - }
6680 out_unlock:
6681 mutex_unlock(&req->mux);
6682 out_free:
6683 diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c
6684 index 9f0aa98..101fe4c 100644
6685 --- a/fs/ecryptfs/main.c
6686 +++ b/fs/ecryptfs/main.c
6687 @@ -129,11 +129,10 @@ int ecryptfs_init_persistent_file(struct dentry *ecryptfs_dentry)
6688 lower_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry);
6689 rc = ecryptfs_privileged_open(&inode_info->lower_file,
6690 lower_dentry, lower_mnt, cred);
6691 - if (rc || IS_ERR(inode_info->lower_file)) {
6692 + if (rc) {
6693 printk(KERN_ERR "Error opening lower persistent file "
6694 "for lower_dentry [0x%p] and lower_mnt [0x%p]; "
6695 "rc = [%d]\n", lower_dentry, lower_mnt, rc);
6696 - rc = PTR_ERR(inode_info->lower_file);
6697 inode_info->lower_file = NULL;
6698 }
6699 }
6700 diff --git a/fs/inode.c b/fs/inode.c
6701 index ae7b67e..1a959c0 100644
6702 --- a/fs/inode.c
6703 +++ b/fs/inode.c
6704 @@ -697,13 +697,15 @@ void unlock_new_inode(struct inode *inode)
6705 }
6706 #endif
6707 /*
6708 - * This is special! We do not need the spinlock
6709 - * when clearing I_LOCK, because we're guaranteed
6710 - * that nobody else tries to do anything about the
6711 - * state of the inode when it is locked, as we
6712 - * just created it (so there can be no old holders
6713 - * that haven't tested I_LOCK).
6714 + * This is special! We do not need the spinlock when clearing I_LOCK,
6715 + * because we're guaranteed that nobody else tries to do anything about
6716 + * the state of the inode when it is locked, as we just created it (so
6717 + * there can be no old holders that haven't tested I_LOCK).
6718 + * However we must emit the memory barrier so that other CPUs reliably
6719 + * see the clearing of I_LOCK after the other inode initialisation has
6720 + * completed.
6721 */
6722 + smp_mb();
6723 WARN_ON((inode->i_state & (I_LOCK|I_NEW)) != (I_LOCK|I_NEW));
6724 inode->i_state &= ~(I_LOCK|I_NEW);
6725 wake_up_inode(inode);
6726 diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
6727 index 3fd23f7..bf9b470 100644
6728 --- a/fs/nfsd/nfs4callback.c
6729 +++ b/fs/nfsd/nfs4callback.c
6730 @@ -444,6 +444,7 @@ static struct rpc_cred *lookup_cb_cred(struct nfs4_cb_conn *cb)
6731 struct auth_cred acred = {
6732 .machine_cred = 1
6733 };
6734 + struct rpc_auth *auth = cb->cb_client->cl_auth;
6735
6736 /*
6737 * Note in the gss case this doesn't actually have to wait for a
6738 @@ -451,8 +452,7 @@ static struct rpc_cred *lookup_cb_cred(struct nfs4_cb_conn *cb)
6739 * non-uptodate cred which the rpc state machine will fill in with
6740 * a refresh_upcall later.
6741 */
6742 - return rpcauth_lookup_credcache(cb->cb_client->cl_auth, &acred,
6743 - RPCAUTH_LOOKUP_NEW);
6744 + return auth->au_ops->lookup_cred(auth, &acred, RPCAUTH_LOOKUP_NEW);
6745 }
6746
6747 void do_probe_callback(struct nfs4_client *clp)
6748 diff --git a/fs/nilfs2/btnode.c b/fs/nilfs2/btnode.c
6749 index c668bca..5be2c8b 100644
6750 --- a/fs/nilfs2/btnode.c
6751 +++ b/fs/nilfs2/btnode.c
6752 @@ -36,6 +36,7 @@
6753
6754 void nilfs_btnode_cache_init_once(struct address_space *btnc)
6755 {
6756 + memset(btnc, 0, sizeof(*btnc));
6757 INIT_RADIX_TREE(&btnc->page_tree, GFP_ATOMIC);
6758 spin_lock_init(&btnc->tree_lock);
6759 INIT_LIST_HEAD(&btnc->private_list);
6760 diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
6761 index 59b43a0..5fd7d2b 100644
6762 --- a/fs/proc/kcore.c
6763 +++ b/fs/proc/kcore.c
6764 @@ -361,7 +361,13 @@ read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos)
6765 /* don't dump ioremap'd stuff! (TA) */
6766 if (m->flags & VM_IOREMAP)
6767 continue;
6768 - memcpy(elf_buf + (vmstart - start),
6769 + /*
6770 + * we may access memory holes, then use
6771 + * ex_table. checking return value just for
6772 + * avoid warnings.
6773 + */
6774 + vmsize = __copy_from_user_inatomic(
6775 + elf_buf + (vmstart - start),
6776 (char *)vmstart, vmsize);
6777 }
6778 read_unlock(&vmlist_lock);
6779 diff --git a/fs/proc/uptime.c b/fs/proc/uptime.c
6780 index 0c10a0b..766b1d4 100644
6781 --- a/fs/proc/uptime.c
6782 +++ b/fs/proc/uptime.c
6783 @@ -4,13 +4,18 @@
6784 #include <linux/sched.h>
6785 #include <linux/seq_file.h>
6786 #include <linux/time.h>
6787 +#include <linux/kernel_stat.h>
6788 #include <asm/cputime.h>
6789
6790 static int uptime_proc_show(struct seq_file *m, void *v)
6791 {
6792 struct timespec uptime;
6793 struct timespec idle;
6794 - cputime_t idletime = cputime_add(init_task.utime, init_task.stime);
6795 + int i;
6796 + cputime_t idletime = cputime_zero;
6797 +
6798 + for_each_possible_cpu(i)
6799 + idletime = cputime64_add(idletime, kstat_cpu(i).cpustat.idle);
6800
6801 do_posix_clock_monotonic_gettime(&uptime);
6802 monotonic_to_bootbased(&uptime);
6803 diff --git a/include/linux/tty.h b/include/linux/tty.h
6804 index e8c6c91..b982a17 100644
6805 --- a/include/linux/tty.h
6806 +++ b/include/linux/tty.h
6807 @@ -185,7 +185,12 @@ struct tty_port;
6808 struct tty_port_operations {
6809 /* Return 1 if the carrier is raised */
6810 int (*carrier_raised)(struct tty_port *port);
6811 + /* Control the DTR line */
6812 void (*dtr_rts)(struct tty_port *port, int raise);
6813 + /* Called when the last close completes or a hangup finishes
6814 + IFF the port was initialized. Do not use to free resources */
6815 + void (*shutdown)(struct tty_port *port);
6816 + void (*drop)(struct tty_port *port);
6817 };
6818
6819 struct tty_port {
6820 @@ -457,7 +462,8 @@ extern int tty_port_block_til_ready(struct tty_port *port,
6821 extern int tty_port_close_start(struct tty_port *port,
6822 struct tty_struct *tty, struct file *filp);
6823 extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty);
6824 -
6825 +extern void tty_port_close(struct tty_port *port,
6826 + struct tty_struct *tty, struct file *filp);
6827 extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc);
6828 extern int tty_unregister_ldisc(int disc);
6829 extern int tty_set_ldisc(struct tty_struct *tty, int ldisc);
6830 diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h
6831 index 0ec50ba..73f121e 100644
6832 --- a/include/linux/usb/serial.h
6833 +++ b/include/linux/usb/serial.h
6834 @@ -261,6 +261,9 @@ struct usb_serial_driver {
6835 be an attached tty at this point */
6836 void (*dtr_rts)(struct usb_serial_port *port, int on);
6837 int (*carrier_raised)(struct usb_serial_port *port);
6838 + /* Called by the usb serial hooks to allow the user to rework the
6839 + termios state */
6840 + void (*init_termios)(struct tty_struct *tty);
6841 /* USB events */
6842 void (*read_int_callback)(struct urb *urb);
6843 void (*write_int_callback)(struct urb *urb);
6844 diff --git a/include/pcmcia/ss.h b/include/pcmcia/ss.h
6845 index 9b4ac93..56677eb 100644
6846 --- a/include/pcmcia/ss.h
6847 +++ b/include/pcmcia/ss.h
6848 @@ -279,7 +279,7 @@ extern struct pccard_resource_ops pccard_iodyn_ops;
6849 extern struct pccard_resource_ops pccard_nonstatic_ops;
6850
6851 /* socket drivers are expected to use these callbacks in their .drv struct */
6852 -extern int pcmcia_socket_dev_suspend(struct device *dev, pm_message_t state);
6853 +extern int pcmcia_socket_dev_suspend(struct device *dev);
6854 extern int pcmcia_socket_dev_resume(struct device *dev);
6855
6856 /* socket drivers use this callback in their IRQ handler */
6857 diff --git a/kernel/perf_counter.c b/kernel/perf_counter.c
6858 index 3f49f53..b1dc468 100644
6859 --- a/kernel/perf_counter.c
6860 +++ b/kernel/perf_counter.c
6861 @@ -4143,8 +4143,8 @@ done:
6862 static int perf_copy_attr(struct perf_counter_attr __user *uattr,
6863 struct perf_counter_attr *attr)
6864 {
6865 - int ret;
6866 u32 size;
6867 + int ret;
6868
6869 if (!access_ok(VERIFY_WRITE, uattr, PERF_ATTR_SIZE_VER0))
6870 return -EFAULT;
6871 @@ -4169,19 +4169,19 @@ static int perf_copy_attr(struct perf_counter_attr __user *uattr,
6872
6873 /*
6874 * If we're handed a bigger struct than we know of,
6875 - * ensure all the unknown bits are 0.
6876 + * ensure all the unknown bits are 0 - i.e. new
6877 + * user-space does not rely on any kernel feature
6878 + * extensions we dont know about yet.
6879 */
6880 if (size > sizeof(*attr)) {
6881 - unsigned long val;
6882 - unsigned long __user *addr;
6883 - unsigned long __user *end;
6884 + unsigned char __user *addr;
6885 + unsigned char __user *end;
6886 + unsigned char val;
6887
6888 - addr = PTR_ALIGN((void __user *)uattr + sizeof(*attr),
6889 - sizeof(unsigned long));
6890 - end = PTR_ALIGN((void __user *)uattr + size,
6891 - sizeof(unsigned long));
6892 + addr = (void __user *)uattr + sizeof(*attr);
6893 + end = (void __user *)uattr + size;
6894
6895 - for (; addr < end; addr += sizeof(unsigned long)) {
6896 + for (; addr < end; addr++) {
6897 ret = get_user(val, addr);
6898 if (ret)
6899 return ret;
6900 diff --git a/mm/hugetlb.c b/mm/hugetlb.c
6901 index cafdcee..cae0337 100644
6902 --- a/mm/hugetlb.c
6903 +++ b/mm/hugetlb.c
6904 @@ -1010,6 +1010,7 @@ int __weak alloc_bootmem_huge_page(struct hstate *h)
6905 NODE_DATA(h->hugetlb_next_nid),
6906 huge_page_size(h), huge_page_size(h), 0);
6907
6908 + hstate_next_node(h);
6909 if (addr) {
6910 /*
6911 * Use the beginning of the huge page to store the
6912 @@ -1019,7 +1020,6 @@ int __weak alloc_bootmem_huge_page(struct hstate *h)
6913 m = addr;
6914 goto found;
6915 }
6916 - hstate_next_node(h);
6917 nr_nodes--;
6918 }
6919 return 0;
6920 diff --git a/mm/memory.c b/mm/memory.c
6921 index aede2ce..753b2e6 100644
6922 --- a/mm/memory.c
6923 +++ b/mm/memory.c
6924 @@ -2638,7 +2638,8 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
6925 goto oom_free_page;
6926
6927 entry = mk_pte(page, vma->vm_page_prot);
6928 - entry = maybe_mkwrite(pte_mkdirty(entry), vma);
6929 + if (vma->vm_flags & VM_WRITE)
6930 + entry = pte_mkwrite(pte_mkdirty(entry));
6931
6932 page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
6933 if (!pte_none(*page_table))
6934 diff --git a/mm/mlock.c b/mm/mlock.c
6935 index 45eb650..e13918d 100644
6936 --- a/mm/mlock.c
6937 +++ b/mm/mlock.c
6938 @@ -139,49 +139,36 @@ static void munlock_vma_page(struct page *page)
6939 }
6940
6941 /**
6942 - * __mlock_vma_pages_range() - mlock/munlock a range of pages in the vma.
6943 + * __mlock_vma_pages_range() - mlock a range of pages in the vma.
6944 * @vma: target vma
6945 * @start: start address
6946 * @end: end address
6947 - * @mlock: 0 indicate munlock, otherwise mlock.
6948 *
6949 - * If @mlock == 0, unlock an mlocked range;
6950 - * else mlock the range of pages. This takes care of making the pages present ,
6951 - * too.
6952 + * This takes care of making the pages present too.
6953 *
6954 * return 0 on success, negative error code on error.
6955 *
6956 * vma->vm_mm->mmap_sem must be held for at least read.
6957 */
6958 static long __mlock_vma_pages_range(struct vm_area_struct *vma,
6959 - unsigned long start, unsigned long end,
6960 - int mlock)
6961 + unsigned long start, unsigned long end)
6962 {
6963 struct mm_struct *mm = vma->vm_mm;
6964 unsigned long addr = start;
6965 struct page *pages[16]; /* 16 gives a reasonable batch */
6966 int nr_pages = (end - start) / PAGE_SIZE;
6967 int ret = 0;
6968 - int gup_flags = 0;
6969 + int gup_flags;
6970
6971 VM_BUG_ON(start & ~PAGE_MASK);
6972 VM_BUG_ON(end & ~PAGE_MASK);
6973 VM_BUG_ON(start < vma->vm_start);
6974 VM_BUG_ON(end > vma->vm_end);
6975 - VM_BUG_ON((!rwsem_is_locked(&mm->mmap_sem)) &&
6976 - (atomic_read(&mm->mm_users) != 0));
6977 -
6978 - /*
6979 - * mlock: don't page populate if vma has PROT_NONE permission.
6980 - * munlock: always do munlock although the vma has PROT_NONE
6981 - * permission, or SIGKILL is pending.
6982 - */
6983 - if (!mlock)
6984 - gup_flags |= GUP_FLAGS_IGNORE_VMA_PERMISSIONS |
6985 - GUP_FLAGS_IGNORE_SIGKILL;
6986 + VM_BUG_ON(!rwsem_is_locked(&mm->mmap_sem));
6987
6988 + gup_flags = 0;
6989 if (vma->vm_flags & VM_WRITE)
6990 - gup_flags |= GUP_FLAGS_WRITE;
6991 + gup_flags = GUP_FLAGS_WRITE;
6992
6993 while (nr_pages > 0) {
6994 int i;
6995 @@ -201,19 +188,10 @@ static long __mlock_vma_pages_range(struct vm_area_struct *vma,
6996 * This can happen for, e.g., VM_NONLINEAR regions before
6997 * a page has been allocated and mapped at a given offset,
6998 * or for addresses that map beyond end of a file.
6999 - * We'll mlock the the pages if/when they get faulted in.
7000 + * We'll mlock the pages if/when they get faulted in.
7001 */
7002 if (ret < 0)
7003 break;
7004 - if (ret == 0) {
7005 - /*
7006 - * We know the vma is there, so the only time
7007 - * we cannot get a single page should be an
7008 - * error (ret < 0) case.
7009 - */
7010 - WARN_ON(1);
7011 - break;
7012 - }
7013
7014 lru_add_drain(); /* push cached pages to LRU */
7015
7016 @@ -224,28 +202,22 @@ static long __mlock_vma_pages_range(struct vm_area_struct *vma,
7017 /*
7018 * Because we lock page here and migration is blocked
7019 * by the elevated reference, we need only check for
7020 - * page truncation (file-cache only).
7021 + * file-cache page truncation. This page->mapping
7022 + * check also neatly skips over the ZERO_PAGE(),
7023 + * though if that's common we'd prefer not to lock it.
7024 */
7025 - if (page->mapping) {
7026 - if (mlock)
7027 - mlock_vma_page(page);
7028 - else
7029 - munlock_vma_page(page);
7030 - }
7031 + if (page->mapping)
7032 + mlock_vma_page(page);
7033 unlock_page(page);
7034 - put_page(page); /* ref from get_user_pages() */
7035 -
7036 - /*
7037 - * here we assume that get_user_pages() has given us
7038 - * a list of virtually contiguous pages.
7039 - */
7040 - addr += PAGE_SIZE; /* for next get_user_pages() */
7041 - nr_pages--;
7042 + put_page(page); /* ref from get_user_pages() */
7043 }
7044 +
7045 + addr += ret * PAGE_SIZE;
7046 + nr_pages -= ret;
7047 ret = 0;
7048 }
7049
7050 - return ret; /* count entire vma as locked_vm */
7051 + return ret; /* 0 or negative error code */
7052 }
7053
7054 /*
7055 @@ -289,7 +261,7 @@ long mlock_vma_pages_range(struct vm_area_struct *vma,
7056 is_vm_hugetlb_page(vma) ||
7057 vma == get_gate_vma(current))) {
7058
7059 - __mlock_vma_pages_range(vma, start, end, 1);
7060 + __mlock_vma_pages_range(vma, start, end);
7061
7062 /* Hide errors from mmap() and other callers */
7063 return 0;
7064 @@ -310,7 +282,6 @@ no_mlock:
7065 return nr_pages; /* error or pages NOT mlocked */
7066 }
7067
7068 -
7069 /*
7070 * munlock_vma_pages_range() - munlock all pages in the vma range.'
7071 * @vma - vma containing range to be munlock()ed.
7072 @@ -330,10 +301,24 @@ no_mlock:
7073 * free them. This will result in freeing mlocked pages.
7074 */
7075 void munlock_vma_pages_range(struct vm_area_struct *vma,
7076 - unsigned long start, unsigned long end)
7077 + unsigned long start, unsigned long end)
7078 {
7079 + unsigned long addr;
7080 +
7081 + lru_add_drain();
7082 vma->vm_flags &= ~VM_LOCKED;
7083 - __mlock_vma_pages_range(vma, start, end, 0);
7084 +
7085 + for (addr = start; addr < end; addr += PAGE_SIZE) {
7086 + struct page *page = follow_page(vma, addr, FOLL_GET);
7087 + if (page) {
7088 + lock_page(page);
7089 + if (page->mapping)
7090 + munlock_vma_page(page);
7091 + unlock_page(page);
7092 + put_page(page);
7093 + }
7094 + cond_resched();
7095 + }
7096 }
7097
7098 /*
7099 @@ -400,18 +385,14 @@ success:
7100 * It's okay if try_to_unmap_one unmaps a page just after we
7101 * set VM_LOCKED, __mlock_vma_pages_range will bring it back.
7102 */
7103 - vma->vm_flags = newflags;
7104
7105 if (lock) {
7106 - ret = __mlock_vma_pages_range(vma, start, end, 1);
7107 -
7108 - if (ret > 0) {
7109 - mm->locked_vm -= ret;
7110 - ret = 0;
7111 - } else
7112 - ret = __mlock_posix_error_return(ret); /* translate if needed */
7113 + vma->vm_flags = newflags;
7114 + ret = __mlock_vma_pages_range(vma, start, end);
7115 + if (ret < 0)
7116 + ret = __mlock_posix_error_return(ret);
7117 } else {
7118 - __mlock_vma_pages_range(vma, start, end, 0);
7119 + munlock_vma_pages_range(vma, start, end);
7120 }
7121
7122 out:
7123 diff --git a/mm/mmap.c b/mm/mmap.c
7124 index 8101de4..cbb7cb3 100644
7125 --- a/mm/mmap.c
7126 +++ b/mm/mmap.c
7127 @@ -570,9 +570,9 @@ again: remove_next = 1 + (end > next->vm_end);
7128
7129 /*
7130 * When changing only vma->vm_end, we don't really need
7131 - * anon_vma lock: but is that case worth optimizing out?
7132 + * anon_vma lock.
7133 */
7134 - if (vma->anon_vma)
7135 + if (vma->anon_vma && (insert || importer || start != vma->vm_start))
7136 anon_vma = vma->anon_vma;
7137 if (anon_vma) {
7138 spin_lock(&anon_vma->lock);
7139 diff --git a/mm/nommu.c b/mm/nommu.c
7140 index 66e81e7..82fedca 100644
7141 --- a/mm/nommu.c
7142 +++ b/mm/nommu.c
7143 @@ -1056,7 +1056,7 @@ static int do_mmap_shared_file(struct vm_area_struct *vma)
7144 ret = vma->vm_file->f_op->mmap(vma->vm_file, vma);
7145 if (ret == 0) {
7146 vma->vm_region->vm_top = vma->vm_region->vm_end;
7147 - return ret;
7148 + return 0;
7149 }
7150 if (ret != -ENOSYS)
7151 return ret;
7152 @@ -1073,7 +1073,8 @@ static int do_mmap_shared_file(struct vm_area_struct *vma)
7153 */
7154 static int do_mmap_private(struct vm_area_struct *vma,
7155 struct vm_region *region,
7156 - unsigned long len)
7157 + unsigned long len,
7158 + unsigned long capabilities)
7159 {
7160 struct page *pages;
7161 unsigned long total, point, n, rlen;
7162 @@ -1084,13 +1085,13 @@ static int do_mmap_private(struct vm_area_struct *vma,
7163 * shared mappings on devices or memory
7164 * - VM_MAYSHARE will be set if it may attempt to share
7165 */
7166 - if (vma->vm_file) {
7167 + if (capabilities & BDI_CAP_MAP_DIRECT) {
7168 ret = vma->vm_file->f_op->mmap(vma->vm_file, vma);
7169 if (ret == 0) {
7170 /* shouldn't return success if we're not sharing */
7171 BUG_ON(!(vma->vm_flags & VM_MAYSHARE));
7172 vma->vm_region->vm_top = vma->vm_region->vm_end;
7173 - return ret;
7174 + return 0;
7175 }
7176 if (ret != -ENOSYS)
7177 return ret;
7178 @@ -1328,7 +1329,7 @@ unsigned long do_mmap_pgoff(struct file *file,
7179 * - this is the hook for quasi-memory character devices to
7180 * tell us the location of a shared mapping
7181 */
7182 - if (file && file->f_op->get_unmapped_area) {
7183 + if (capabilities & BDI_CAP_MAP_DIRECT) {
7184 addr = file->f_op->get_unmapped_area(file, addr, len,
7185 pgoff, flags);
7186 if (IS_ERR((void *) addr)) {
7187 @@ -1352,15 +1353,17 @@ unsigned long do_mmap_pgoff(struct file *file,
7188 }
7189
7190 vma->vm_region = region;
7191 - add_nommu_region(region);
7192
7193 - /* set up the mapping */
7194 + /* set up the mapping
7195 + * - the region is filled in if BDI_CAP_MAP_DIRECT is still set
7196 + */
7197 if (file && vma->vm_flags & VM_SHARED)
7198 ret = do_mmap_shared_file(vma);
7199 else
7200 - ret = do_mmap_private(vma, region, len);
7201 + ret = do_mmap_private(vma, region, len, capabilities);
7202 if (ret < 0)
7203 - goto error_put_region;
7204 + goto error_just_free;
7205 + add_nommu_region(region);
7206
7207 /* okay... we have a mapping; now we have to register it */
7208 result = vma->vm_start;
7209 @@ -1378,19 +1381,6 @@ share:
7210 kleave(" = %lx", result);
7211 return result;
7212
7213 -error_put_region:
7214 - __put_nommu_region(region);
7215 - if (vma) {
7216 - if (vma->vm_file) {
7217 - fput(vma->vm_file);
7218 - if (vma->vm_flags & VM_EXECUTABLE)
7219 - removed_exe_file_vma(vma->vm_mm);
7220 - }
7221 - kmem_cache_free(vm_area_cachep, vma);
7222 - }
7223 - kleave(" = %d [pr]", ret);
7224 - return ret;
7225 -
7226 error_just_free:
7227 up_write(&nommu_region_sem);
7228 error:
7229 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
7230 index a0de15f..0b3c6cb 100644
7231 --- a/mm/page_alloc.c
7232 +++ b/mm/page_alloc.c
7233 @@ -2783,7 +2783,8 @@ static void setup_zone_migrate_reserve(struct zone *zone)
7234 {
7235 unsigned long start_pfn, pfn, end_pfn;
7236 struct page *page;
7237 - unsigned long reserve, block_migratetype;
7238 + unsigned long block_migratetype;
7239 + int reserve;
7240
7241 /* Get the start pfn, end pfn and the number of blocks to reserve */
7242 start_pfn = zone->zone_start_pfn;
7243 @@ -2791,6 +2792,15 @@ static void setup_zone_migrate_reserve(struct zone *zone)
7244 reserve = roundup(min_wmark_pages(zone), pageblock_nr_pages) >>
7245 pageblock_order;
7246
7247 + /*
7248 + * Reserve blocks are generally in place to help high-order atomic
7249 + * allocations that are short-lived. A min_free_kbytes value that
7250 + * would result in more than 2 reserve blocks for atomic allocations
7251 + * is assumed to be in place to help anti-fragmentation for the
7252 + * future allocation of hugepages at runtime.
7253 + */
7254 + reserve = min(2, reserve);
7255 +
7256 for (pfn = start_pfn; pfn < end_pfn; pfn += pageblock_nr_pages) {
7257 if (!pfn_valid(pfn))
7258 continue;
7259 diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
7260 index da0f64f..f03529c 100644
7261 --- a/net/ax25/af_ax25.c
7262 +++ b/net/ax25/af_ax25.c
7263 @@ -538,7 +538,7 @@ static int ax25_setsockopt(struct socket *sock, int level, int optname,
7264 if (level != SOL_AX25)
7265 return -ENOPROTOOPT;
7266
7267 - if (optlen < sizeof(int))
7268 + if (optlen < (int)sizeof(int))
7269 return -EINVAL;
7270
7271 if (get_user(opt, (int __user *)optval))
7272 diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
7273 index d22f611..991fe40 100644
7274 --- a/net/bridge/br_netfilter.c
7275 +++ b/net/bridge/br_netfilter.c
7276 @@ -359,7 +359,7 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
7277 },
7278 .proto = 0,
7279 };
7280 - struct in_device *in_dev = in_dev_get(dev);
7281 + struct in_device *in_dev = __in_dev_get_rcu(dev);
7282
7283 /* If err equals -EHOSTUNREACH the error is due to a
7284 * martian destination or due to the fact that
7285 diff --git a/net/bridge/netfilter/ebt_ulog.c b/net/bridge/netfilter/ebt_ulog.c
7286 index 133eeae..ce50688 100644
7287 --- a/net/bridge/netfilter/ebt_ulog.c
7288 +++ b/net/bridge/netfilter/ebt_ulog.c
7289 @@ -266,7 +266,7 @@ static bool ebt_ulog_tg_check(const struct xt_tgchk_param *par)
7290 if (uloginfo->qthreshold > EBT_ULOG_MAX_QLEN)
7291 uloginfo->qthreshold = EBT_ULOG_MAX_QLEN;
7292
7293 - return 0;
7294 + return true;
7295 }
7296
7297 static struct xt_target ebt_ulog_tg_reg __read_mostly = {
7298 diff --git a/net/can/af_can.c b/net/can/af_can.c
7299 index e733725..264c968 100644
7300 --- a/net/can/af_can.c
7301 +++ b/net/can/af_can.c
7302 @@ -199,6 +199,8 @@ static int can_create(struct net *net, struct socket *sock, int protocol)
7303 * @skb: pointer to socket buffer with CAN frame in data section
7304 * @loop: loopback for listeners on local CAN sockets (recommended default!)
7305 *
7306 + * Due to the loopback this routine must not be called from hardirq context.
7307 + *
7308 * Return:
7309 * 0 on success
7310 * -ENETDOWN when the selected interface is down
7311 @@ -278,7 +280,7 @@ int can_send(struct sk_buff *skb, int loop)
7312 }
7313
7314 if (newskb)
7315 - netif_rx(newskb);
7316 + netif_rx_ni(newskb);
7317
7318 /* update statistics */
7319 can_stats.tx_frames++;
7320 diff --git a/net/ipv4/netfilter/nf_nat_core.c b/net/ipv4/netfilter/nf_nat_core.c
7321 index 3229e0a..b6ddd56 100644
7322 --- a/net/ipv4/netfilter/nf_nat_core.c
7323 +++ b/net/ipv4/netfilter/nf_nat_core.c
7324 @@ -212,7 +212,7 @@ find_best_ips_proto(struct nf_conntrack_tuple *tuple,
7325 maxip = ntohl(range->max_ip);
7326 j = jhash_2words((__force u32)tuple->src.u3.ip,
7327 range->flags & IP_NAT_RANGE_PERSISTENT ?
7328 - (__force u32)tuple->dst.u3.ip : 0, 0);
7329 + 0 : (__force u32)tuple->dst.u3.ip, 0);
7330 j = ((u64)j * (maxip - minip + 1)) >> 32;
7331 *var_ipp = htonl(minip + j);
7332 }
7333 diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
7334 index b5869b9..b8614c6 100644
7335 --- a/net/netfilter/nf_conntrack_core.c
7336 +++ b/net/netfilter/nf_conntrack_core.c
7337 @@ -1089,14 +1089,14 @@ void nf_conntrack_flush_report(struct net *net, u32 pid, int report)
7338 }
7339 EXPORT_SYMBOL_GPL(nf_conntrack_flush_report);
7340
7341 -static void nf_ct_release_dying_list(void)
7342 +static void nf_ct_release_dying_list(struct net *net)
7343 {
7344 struct nf_conntrack_tuple_hash *h;
7345 struct nf_conn *ct;
7346 struct hlist_nulls_node *n;
7347
7348 spin_lock_bh(&nf_conntrack_lock);
7349 - hlist_nulls_for_each_entry(h, n, &init_net.ct.dying, hnnode) {
7350 + hlist_nulls_for_each_entry(h, n, &net->ct.dying, hnnode) {
7351 ct = nf_ct_tuplehash_to_ctrack(h);
7352 /* never fails to remove them, no listeners at this point */
7353 nf_ct_kill(ct);
7354 @@ -1115,7 +1115,7 @@ static void nf_conntrack_cleanup_net(struct net *net)
7355 {
7356 i_see_dead_people:
7357 nf_ct_iterate_cleanup(net, kill_all, NULL);
7358 - nf_ct_release_dying_list();
7359 + nf_ct_release_dying_list(net);
7360 if (atomic_read(&net->ct.count) != 0) {
7361 schedule();
7362 goto i_see_dead_people;
7363 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
7364 index ebe5718..f9f7177 100644
7365 --- a/net/packet/af_packet.c
7366 +++ b/net/packet/af_packet.c
7367 @@ -1836,7 +1836,7 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
7368 static int packet_getsockopt(struct socket *sock, int level, int optname,
7369 char __user *optval, int __user *optlen)
7370 {
7371 - int len;
7372 + unsigned int len;
7373 int val;
7374 struct sock *sk = sock->sk;
7375 struct packet_sock *po = pkt_sk(sk);
7376 @@ -1849,7 +1849,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
7377 if (get_user(len, optlen))
7378 return -EFAULT;
7379
7380 - if (len < 0)
7381 + if ((int)len < 0)
7382 return -EINVAL;
7383
7384 switch (optname) {
7385 diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
7386 index c29be8f..43300b3 100644
7387 --- a/scripts/Kbuild.include
7388 +++ b/scripts/Kbuild.include
7389 @@ -105,12 +105,12 @@ as-instr = $(call try-run,\
7390 # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
7391
7392 cc-option = $(call try-run,\
7393 - $(CC) $(KBUILD_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",$(1),$(2))
7394 + $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",$(1),$(2))
7395
7396 # cc-option-yn
7397 # Usage: flag := $(call cc-option-yn,-march=winchip-c6)
7398 cc-option-yn = $(call try-run,\
7399 - $(CC) $(KBUILD_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",y,n)
7400 + $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",y,n)
7401
7402 # cc-option-align
7403 # Prefix align with either -falign or -malign
7404 diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
7405 index 64343cc..86c3896 100644
7406 --- a/scripts/kallsyms.c
7407 +++ b/scripts/kallsyms.c
7408 @@ -585,7 +585,7 @@ static int prefix_underscores_count(const char *str)
7409 {
7410 const char *tail = str;
7411
7412 - while (*tail != '_')
7413 + while (*tail == '_')
7414 tail++;
7415
7416 return tail - str;
7417 diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
7418 index 5e17de9..5010952 100644
7419 --- a/tools/perf/builtin-annotate.c
7420 +++ b/tools/perf/builtin-annotate.c
7421 @@ -1335,8 +1335,8 @@ static int __cmd_annotate(void)
7422 exit(-1);
7423 }
7424
7425 - if (!force && (stat.st_uid != geteuid())) {
7426 - fprintf(stderr, "file: %s not owned by current user\n", input_name);
7427 + if (!force && stat.st_uid && (stat.st_uid != geteuid())) {
7428 + fprintf(stderr, "file: %s not owned by current user or root\n", input_name);
7429 exit(-1);
7430 }
7431
7432 diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
7433 index 8b2ec88..b8a75f6 100644
7434 --- a/tools/perf/builtin-report.c
7435 +++ b/tools/perf/builtin-report.c
7436 @@ -1857,8 +1857,8 @@ static int __cmd_report(void)
7437 exit(-1);
7438 }
7439
7440 - if (!force && (stat.st_uid != geteuid())) {
7441 - fprintf(stderr, "file: %s not owned by current user\n", input_name);
7442 + if (!force && stat.st_uid && (stat.st_uid != geteuid())) {
7443 + fprintf(stderr, "file: %s not owned by current user or root\n", input_name);
7444 exit(-1);
7445 }
7446
7447 diff --git a/tools/perf/util/module.c b/tools/perf/util/module.c
7448 index ddabe92..702083d 100644
7449 --- a/tools/perf/util/module.c
7450 +++ b/tools/perf/util/module.c
7451 @@ -422,7 +422,7 @@ static int mod_dso__load_module_paths(struct mod_dso *self)
7452 len += strlen(uts.release);
7453 len += strlen("/modules.dep");
7454
7455 - path = calloc(1, len);
7456 + path = calloc(1, len + 1);
7457 if (path == NULL)
7458 goto out_failure;
7459