Contents of /trunk/kernel-magellan/patches-3.7/0103-3.7.4-all-fixes.patch
Parent Directory | Revision Log
Revision 2040 -
(show annotations)
(download)
Mon Jan 28 08:11:29 2013 UTC (11 years, 8 months ago) by niro
File size: 39774 byte(s)
Mon Jan 28 08:11:29 2013 UTC (11 years, 8 months ago) by niro
File size: 39774 byte(s)
linux-3.7.4
1 | diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h |
2 | index 64b1339..7adf414 100644 |
3 | --- a/arch/arm64/include/asm/pgtable.h |
4 | +++ b/arch/arm64/include/asm/pgtable.h |
5 | @@ -132,9 +132,8 @@ extern struct page *empty_zero_page; |
6 | #define pte_write(pte) (!(pte_val(pte) & PTE_RDONLY)) |
7 | #define pte_exec(pte) (!(pte_val(pte) & PTE_UXN)) |
8 | |
9 | -#define pte_present_exec_user(pte) \ |
10 | - ((pte_val(pte) & (PTE_VALID | PTE_USER | PTE_UXN)) == \ |
11 | - (PTE_VALID | PTE_USER)) |
12 | +#define pte_present_user(pte) \ |
13 | + ((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER)) |
14 | |
15 | #define PTE_BIT_FUNC(fn,op) \ |
16 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; } |
17 | @@ -157,10 +156,13 @@ extern void __sync_icache_dcache(pte_t pteval, unsigned long addr); |
18 | static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, |
19 | pte_t *ptep, pte_t pte) |
20 | { |
21 | - if (pte_present_exec_user(pte)) |
22 | - __sync_icache_dcache(pte, addr); |
23 | - if (!pte_dirty(pte)) |
24 | - pte = pte_wrprotect(pte); |
25 | + if (pte_present_user(pte)) { |
26 | + if (pte_exec(pte)) |
27 | + __sync_icache_dcache(pte, addr); |
28 | + if (!pte_dirty(pte)) |
29 | + pte = pte_wrprotect(pte); |
30 | + } |
31 | + |
32 | set_pte(ptep, pte); |
33 | } |
34 | |
35 | diff --git a/arch/s390/include/asm/timex.h b/arch/s390/include/asm/timex.h |
36 | index fba4d66..4c060bb 100644 |
37 | --- a/arch/s390/include/asm/timex.h |
38 | +++ b/arch/s390/include/asm/timex.h |
39 | @@ -128,4 +128,32 @@ static inline unsigned long long get_clock_monotonic(void) |
40 | return get_clock_xt() - sched_clock_base_cc; |
41 | } |
42 | |
43 | +/** |
44 | + * tod_to_ns - convert a TOD format value to nanoseconds |
45 | + * @todval: to be converted TOD format value |
46 | + * Returns: number of nanoseconds that correspond to the TOD format value |
47 | + * |
48 | + * Converting a 64 Bit TOD format value to nanoseconds means that the value |
49 | + * must be divided by 4.096. In order to achieve that we multiply with 125 |
50 | + * and divide by 512: |
51 | + * |
52 | + * ns = (todval * 125) >> 9; |
53 | + * |
54 | + * In order to avoid an overflow with the multiplication we can rewrite this. |
55 | + * With a split todval == 2^32 * th + tl (th upper 32 bits, tl lower 32 bits) |
56 | + * we end up with |
57 | + * |
58 | + * ns = ((2^32 * th + tl) * 125 ) >> 9; |
59 | + * -> ns = (2^23 * th * 125) + ((tl * 125) >> 9); |
60 | + * |
61 | + */ |
62 | +static inline unsigned long long tod_to_ns(unsigned long long todval) |
63 | +{ |
64 | + unsigned long long ns; |
65 | + |
66 | + ns = ((todval >> 32) << 23) * 125; |
67 | + ns += ((todval & 0xffffffff) * 125) >> 9; |
68 | + return ns; |
69 | +} |
70 | + |
71 | #endif |
72 | diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c |
73 | index 7fcd690..b5d8a18 100644 |
74 | --- a/arch/s390/kernel/time.c |
75 | +++ b/arch/s390/kernel/time.c |
76 | @@ -63,7 +63,7 @@ static DEFINE_PER_CPU(struct clock_event_device, comparators); |
77 | */ |
78 | unsigned long long notrace __kprobes sched_clock(void) |
79 | { |
80 | - return (get_clock_monotonic() * 125) >> 9; |
81 | + return tod_to_ns(get_clock_monotonic()); |
82 | } |
83 | |
84 | /* |
85 | diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c |
86 | index ff1e2f8..d533389 100644 |
87 | --- a/arch/s390/kvm/interrupt.c |
88 | +++ b/arch/s390/kvm/interrupt.c |
89 | @@ -408,7 +408,7 @@ int kvm_s390_handle_wait(struct kvm_vcpu *vcpu) |
90 | return 0; |
91 | } |
92 | |
93 | - sltime = ((vcpu->arch.sie_block->ckc - now)*125)>>9; |
94 | + sltime = tod_to_ns(vcpu->arch.sie_block->ckc - now); |
95 | |
96 | hrtimer_start(&vcpu->arch.ckc_timer, ktime_set (0, sltime) , HRTIMER_MODE_REL); |
97 | VCPU_EVENT(vcpu, 5, "enabled wait via clock comparator: %llx ns", sltime); |
98 | diff --git a/arch/sh/include/asm/elf.h b/arch/sh/include/asm/elf.h |
99 | index 37924af..bf9f44f 100644 |
100 | --- a/arch/sh/include/asm/elf.h |
101 | +++ b/arch/sh/include/asm/elf.h |
102 | @@ -203,9 +203,9 @@ extern void __kernel_vsyscall; |
103 | if (vdso_enabled) \ |
104 | NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE); \ |
105 | else \ |
106 | - NEW_AUX_ENT(AT_IGNORE, 0); |
107 | + NEW_AUX_ENT(AT_IGNORE, 0) |
108 | #else |
109 | -#define VSYSCALL_AUX_ENT |
110 | +#define VSYSCALL_AUX_ENT NEW_AUX_ENT(AT_IGNORE, 0) |
111 | #endif /* CONFIG_VSYSCALL */ |
112 | |
113 | #ifdef CONFIG_SH_FPU |
114 | diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S |
115 | index 88b725a..cf8639b 100644 |
116 | --- a/arch/x86/kernel/entry_32.S |
117 | +++ b/arch/x86/kernel/entry_32.S |
118 | @@ -1084,7 +1084,6 @@ ENTRY(xen_failsafe_callback) |
119 | lea 16(%esp),%esp |
120 | CFI_ADJUST_CFA_OFFSET -16 |
121 | jz 5f |
122 | - addl $16,%esp |
123 | jmp iret_exc |
124 | 5: pushl_cfi $-1 /* orig_ax = -1 => not a system call */ |
125 | SAVE_ALL |
126 | diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c |
127 | index ca45696..86c524c 100644 |
128 | --- a/arch/x86/kernel/setup.c |
129 | +++ b/arch/x86/kernel/setup.c |
130 | @@ -614,6 +614,81 @@ static __init void reserve_ibft_region(void) |
131 | |
132 | static unsigned reserve_low = CONFIG_X86_RESERVE_LOW << 10; |
133 | |
134 | +static bool __init snb_gfx_workaround_needed(void) |
135 | +{ |
136 | + int i; |
137 | + u16 vendor, devid; |
138 | + static const u16 snb_ids[] = { |
139 | + 0x0102, |
140 | + 0x0112, |
141 | + 0x0122, |
142 | + 0x0106, |
143 | + 0x0116, |
144 | + 0x0126, |
145 | + 0x010a, |
146 | + }; |
147 | + |
148 | + /* Assume no if something weird is going on with PCI */ |
149 | + if (!early_pci_allowed()) |
150 | + return false; |
151 | + |
152 | + vendor = read_pci_config_16(0, 2, 0, PCI_VENDOR_ID); |
153 | + if (vendor != 0x8086) |
154 | + return false; |
155 | + |
156 | + devid = read_pci_config_16(0, 2, 0, PCI_DEVICE_ID); |
157 | + for (i = 0; i < ARRAY_SIZE(snb_ids); i++) |
158 | + if (devid == snb_ids[i]) |
159 | + return true; |
160 | + |
161 | + return false; |
162 | +} |
163 | + |
164 | +/* |
165 | + * Sandy Bridge graphics has trouble with certain ranges, exclude |
166 | + * them from allocation. |
167 | + */ |
168 | +static void __init trim_snb_memory(void) |
169 | +{ |
170 | + static const unsigned long bad_pages[] = { |
171 | + 0x20050000, |
172 | + 0x20110000, |
173 | + 0x20130000, |
174 | + 0x20138000, |
175 | + 0x40004000, |
176 | + }; |
177 | + int i; |
178 | + |
179 | + if (!snb_gfx_workaround_needed()) |
180 | + return; |
181 | + |
182 | + printk(KERN_DEBUG "reserving inaccessible SNB gfx pages\n"); |
183 | + |
184 | + /* |
185 | + * Reserve all memory below the 1 MB mark that has not |
186 | + * already been reserved. |
187 | + */ |
188 | + memblock_reserve(0, 1<<20); |
189 | + |
190 | + for (i = 0; i < ARRAY_SIZE(bad_pages); i++) { |
191 | + if (memblock_reserve(bad_pages[i], PAGE_SIZE)) |
192 | + printk(KERN_WARNING "failed to reserve 0x%08lx\n", |
193 | + bad_pages[i]); |
194 | + } |
195 | +} |
196 | + |
197 | +/* |
198 | + * Here we put platform-specific memory range workarounds, i.e. |
199 | + * memory known to be corrupt or otherwise in need to be reserved on |
200 | + * specific platforms. |
201 | + * |
202 | + * If this gets used more widely it could use a real dispatch mechanism. |
203 | + */ |
204 | +static void __init trim_platform_memory_ranges(void) |
205 | +{ |
206 | + trim_snb_memory(); |
207 | +} |
208 | + |
209 | static void __init trim_bios_range(void) |
210 | { |
211 | /* |
212 | @@ -634,6 +709,7 @@ static void __init trim_bios_range(void) |
213 | * take them out. |
214 | */ |
215 | e820_remove_range(BIOS_BEGIN, BIOS_END - BIOS_BEGIN, E820_RAM, 1); |
216 | + |
217 | sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); |
218 | } |
219 | |
220 | @@ -912,6 +988,8 @@ void __init setup_arch(char **cmdline_p) |
221 | |
222 | setup_real_mode(); |
223 | |
224 | + trim_platform_memory_ranges(); |
225 | + |
226 | init_gbpages(); |
227 | |
228 | /* max_pfn_mapped is updated here */ |
229 | diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c |
230 | index be5f7aa..3724891 100644 |
231 | --- a/drivers/base/firmware_class.c |
232 | +++ b/drivers/base/firmware_class.c |
233 | @@ -295,7 +295,7 @@ static bool fw_read_file_contents(struct file *file, struct firmware_buf *fw_buf |
234 | char *buf; |
235 | |
236 | size = fw_file_size(file); |
237 | - if (size < 0) |
238 | + if (size <= 0) |
239 | return false; |
240 | buf = vmalloc(size); |
241 | if (!buf) |
242 | diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c |
243 | index 211c402..1a8594b 100644 |
244 | --- a/drivers/gpu/drm/radeon/r600_cs.c |
245 | +++ b/drivers/gpu/drm/radeon/r600_cs.c |
246 | @@ -2429,8 +2429,10 @@ static void r600_cs_parser_fini(struct radeon_cs_parser *parser, int error) |
247 | kfree(parser->relocs); |
248 | for (i = 0; i < parser->nchunks; i++) { |
249 | kfree(parser->chunks[i].kdata); |
250 | - kfree(parser->chunks[i].kpage[0]); |
251 | - kfree(parser->chunks[i].kpage[1]); |
252 | + if (parser->rdev && (parser->rdev->flags & RADEON_IS_AGP)) { |
253 | + kfree(parser->chunks[i].kpage[0]); |
254 | + kfree(parser->chunks[i].kpage[1]); |
255 | + } |
256 | } |
257 | kfree(parser->chunks); |
258 | kfree(parser->chunks_array); |
259 | diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c |
260 | index 41672cc..dc8d15a 100644 |
261 | --- a/drivers/gpu/drm/radeon/radeon_cs.c |
262 | +++ b/drivers/gpu/drm/radeon/radeon_cs.c |
263 | @@ -266,7 +266,7 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) |
264 | p->chunks[p->chunk_ib_idx].length_dw); |
265 | return -EINVAL; |
266 | } |
267 | - if ((p->rdev->flags & RADEON_IS_AGP)) { |
268 | + if (p->rdev && (p->rdev->flags & RADEON_IS_AGP)) { |
269 | p->chunks[p->chunk_ib_idx].kpage[0] = kmalloc(PAGE_SIZE, GFP_KERNEL); |
270 | p->chunks[p->chunk_ib_idx].kpage[1] = kmalloc(PAGE_SIZE, GFP_KERNEL); |
271 | if (p->chunks[p->chunk_ib_idx].kpage[0] == NULL || |
272 | @@ -570,7 +570,8 @@ static int radeon_cs_update_pages(struct radeon_cs_parser *p, int pg_idx) |
273 | struct radeon_cs_chunk *ibc = &p->chunks[p->chunk_ib_idx]; |
274 | int i; |
275 | int size = PAGE_SIZE; |
276 | - bool copy1 = (p->rdev->flags & RADEON_IS_AGP) ? false : true; |
277 | + bool copy1 = (p->rdev && (p->rdev->flags & RADEON_IS_AGP)) ? |
278 | + false : true; |
279 | |
280 | for (i = ibc->last_copied_page + 1; i < pg_idx; i++) { |
281 | if (DRM_COPY_FROM_USER(p->ib.ptr + (i * (PAGE_SIZE/4)), |
282 | diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c |
283 | index 9476c1b..c2c07a4 100644 |
284 | --- a/drivers/iommu/intel-iommu.c |
285 | +++ b/drivers/iommu/intel-iommu.c |
286 | @@ -2327,8 +2327,39 @@ static int domain_add_dev_info(struct dmar_domain *domain, |
287 | return 0; |
288 | } |
289 | |
290 | +static bool device_has_rmrr(struct pci_dev *dev) |
291 | +{ |
292 | + struct dmar_rmrr_unit *rmrr; |
293 | + int i; |
294 | + |
295 | + for_each_rmrr_units(rmrr) { |
296 | + for (i = 0; i < rmrr->devices_cnt; i++) { |
297 | + /* |
298 | + * Return TRUE if this RMRR contains the device that |
299 | + * is passed in. |
300 | + */ |
301 | + if (rmrr->devices[i] == dev) |
302 | + return true; |
303 | + } |
304 | + } |
305 | + return false; |
306 | +} |
307 | + |
308 | static int iommu_should_identity_map(struct pci_dev *pdev, int startup) |
309 | { |
310 | + |
311 | + /* |
312 | + * We want to prevent any device associated with an RMRR from |
313 | + * getting placed into the SI Domain. This is done because |
314 | + * problems exist when devices are moved in and out of domains |
315 | + * and their respective RMRR info is lost. We exempt USB devices |
316 | + * from this process due to their usage of RMRRs that are known |
317 | + * to not be needed after BIOS hand-off to OS. |
318 | + */ |
319 | + if (device_has_rmrr(pdev) && |
320 | + (pdev->class >> 8) != PCI_CLASS_SERIAL_USB) |
321 | + return 0; |
322 | + |
323 | if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev)) |
324 | return 1; |
325 | |
326 | diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c |
327 | index e1ceb37..9b178a3 100644 |
328 | --- a/drivers/net/ethernet/intel/igb/igb_main.c |
329 | +++ b/drivers/net/ethernet/intel/igb/igb_main.c |
330 | @@ -909,17 +909,18 @@ static int igb_request_msix(struct igb_adapter *adapter) |
331 | { |
332 | struct net_device *netdev = adapter->netdev; |
333 | struct e1000_hw *hw = &adapter->hw; |
334 | - int i, err = 0, vector = 0; |
335 | + int i, err = 0, vector = 0, free_vector = 0; |
336 | |
337 | err = request_irq(adapter->msix_entries[vector].vector, |
338 | igb_msix_other, 0, netdev->name, adapter); |
339 | if (err) |
340 | - goto out; |
341 | - vector++; |
342 | + goto err_out; |
343 | |
344 | for (i = 0; i < adapter->num_q_vectors; i++) { |
345 | struct igb_q_vector *q_vector = adapter->q_vector[i]; |
346 | |
347 | + vector++; |
348 | + |
349 | q_vector->itr_register = hw->hw_addr + E1000_EITR(vector); |
350 | |
351 | if (q_vector->rx.ring && q_vector->tx.ring) |
352 | @@ -938,13 +939,22 @@ static int igb_request_msix(struct igb_adapter *adapter) |
353 | igb_msix_ring, 0, q_vector->name, |
354 | q_vector); |
355 | if (err) |
356 | - goto out; |
357 | - vector++; |
358 | + goto err_free; |
359 | } |
360 | |
361 | igb_configure_msix(adapter); |
362 | return 0; |
363 | -out: |
364 | + |
365 | +err_free: |
366 | + /* free already assigned IRQs */ |
367 | + free_irq(adapter->msix_entries[free_vector++].vector, adapter); |
368 | + |
369 | + vector--; |
370 | + for (i = 0; i < vector; i++) { |
371 | + free_irq(adapter->msix_entries[free_vector++].vector, |
372 | + adapter->q_vector[i]); |
373 | + } |
374 | +err_out: |
375 | return err; |
376 | } |
377 | |
378 | diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h |
379 | index 6b2ec39..806cbf7 100644 |
380 | --- a/drivers/staging/vt6656/bssdb.h |
381 | +++ b/drivers/staging/vt6656/bssdb.h |
382 | @@ -90,7 +90,6 @@ typedef struct tagSRSNCapObject { |
383 | } SRSNCapObject, *PSRSNCapObject; |
384 | |
385 | // BSS info(AP) |
386 | -#pragma pack(1) |
387 | typedef struct tagKnownBSS { |
388 | // BSS info |
389 | BOOL bActive; |
390 | diff --git a/drivers/staging/vt6656/int.h b/drivers/staging/vt6656/int.h |
391 | index 3734e2c..91ceb77 100644 |
392 | --- a/drivers/staging/vt6656/int.h |
393 | +++ b/drivers/staging/vt6656/int.h |
394 | @@ -34,7 +34,6 @@ |
395 | #include "device.h" |
396 | |
397 | /*--------------------- Export Definitions -------------------------*/ |
398 | -#pragma pack(1) |
399 | typedef struct tagSINTData { |
400 | BYTE byTSR0; |
401 | BYTE byPkt0; |
402 | diff --git a/drivers/staging/vt6656/iocmd.h b/drivers/staging/vt6656/iocmd.h |
403 | index 22710ce..ae6e2d2 100644 |
404 | --- a/drivers/staging/vt6656/iocmd.h |
405 | +++ b/drivers/staging/vt6656/iocmd.h |
406 | @@ -95,13 +95,12 @@ typedef enum tagWZONETYPE { |
407 | // Ioctl interface structure |
408 | // Command structure |
409 | // |
410 | -#pragma pack(1) |
411 | typedef struct tagSCmdRequest { |
412 | u8 name[16]; |
413 | void *data; |
414 | u16 wResult; |
415 | u16 wCmdCode; |
416 | -} SCmdRequest, *PSCmdRequest; |
417 | +} __packed SCmdRequest, *PSCmdRequest; |
418 | |
419 | // |
420 | // Scan |
421 | @@ -111,7 +110,7 @@ typedef struct tagSCmdScan { |
422 | |
423 | u8 ssid[SSID_MAXLEN + 2]; |
424 | |
425 | -} SCmdScan, *PSCmdScan; |
426 | +} __packed SCmdScan, *PSCmdScan; |
427 | |
428 | // |
429 | // BSS Join |
430 | @@ -126,7 +125,7 @@ typedef struct tagSCmdBSSJoin { |
431 | BOOL bPSEnable; |
432 | BOOL bShareKeyAuth; |
433 | |
434 | -} SCmdBSSJoin, *PSCmdBSSJoin; |
435 | +} __packed SCmdBSSJoin, *PSCmdBSSJoin; |
436 | |
437 | // |
438 | // Zonetype Setting |
439 | @@ -137,7 +136,7 @@ typedef struct tagSCmdZoneTypeSet { |
440 | BOOL bWrite; |
441 | WZONETYPE ZoneType; |
442 | |
443 | -} SCmdZoneTypeSet, *PSCmdZoneTypeSet; |
444 | +} __packed SCmdZoneTypeSet, *PSCmdZoneTypeSet; |
445 | |
446 | typedef struct tagSWPAResult { |
447 | char ifname[100]; |
448 | @@ -145,7 +144,7 @@ typedef struct tagSWPAResult { |
449 | u8 key_mgmt; |
450 | u8 eap_type; |
451 | BOOL authenticated; |
452 | -} SWPAResult, *PSWPAResult; |
453 | +} __packed SWPAResult, *PSWPAResult; |
454 | |
455 | typedef struct tagSCmdStartAP { |
456 | |
457 | @@ -157,7 +156,7 @@ typedef struct tagSCmdStartAP { |
458 | BOOL bShareKeyAuth; |
459 | u8 byBasicRate; |
460 | |
461 | -} SCmdStartAP, *PSCmdStartAP; |
462 | +} __packed SCmdStartAP, *PSCmdStartAP; |
463 | |
464 | typedef struct tagSCmdSetWEP { |
465 | |
466 | @@ -167,7 +166,7 @@ typedef struct tagSCmdSetWEP { |
467 | BOOL bWepKeyAvailable[WEP_NKEYS]; |
468 | u32 auWepKeyLength[WEP_NKEYS]; |
469 | |
470 | -} SCmdSetWEP, *PSCmdSetWEP; |
471 | +} __packed SCmdSetWEP, *PSCmdSetWEP; |
472 | |
473 | typedef struct tagSBSSIDItem { |
474 | |
475 | @@ -180,14 +179,14 @@ typedef struct tagSBSSIDItem { |
476 | BOOL bWEPOn; |
477 | u32 uRSSI; |
478 | |
479 | -} SBSSIDItem; |
480 | +} __packed SBSSIDItem; |
481 | |
482 | |
483 | typedef struct tagSBSSIDList { |
484 | |
485 | u32 uItem; |
486 | SBSSIDItem sBSSIDList[0]; |
487 | -} SBSSIDList, *PSBSSIDList; |
488 | +} __packed SBSSIDList, *PSBSSIDList; |
489 | |
490 | |
491 | typedef struct tagSNodeItem { |
492 | @@ -208,7 +207,7 @@ typedef struct tagSNodeItem { |
493 | u32 uTxAttempts; |
494 | u16 wFailureRatio; |
495 | |
496 | -} SNodeItem; |
497 | +} __packed SNodeItem; |
498 | |
499 | |
500 | typedef struct tagSNodeList { |
501 | @@ -216,7 +215,7 @@ typedef struct tagSNodeList { |
502 | u32 uItem; |
503 | SNodeItem sNodeList[0]; |
504 | |
505 | -} SNodeList, *PSNodeList; |
506 | +} __packed SNodeList, *PSNodeList; |
507 | |
508 | |
509 | typedef struct tagSCmdLinkStatus { |
510 | @@ -229,7 +228,7 @@ typedef struct tagSCmdLinkStatus { |
511 | u32 uChannel; |
512 | u32 uLinkRate; |
513 | |
514 | -} SCmdLinkStatus, *PSCmdLinkStatus; |
515 | +} __packed SCmdLinkStatus, *PSCmdLinkStatus; |
516 | |
517 | // |
518 | // 802.11 counter |
519 | @@ -247,7 +246,7 @@ typedef struct tagSDot11MIBCount { |
520 | u32 ReceivedFragmentCount; |
521 | u32 MulticastReceivedFrameCount; |
522 | u32 FCSErrorCount; |
523 | -} SDot11MIBCount, *PSDot11MIBCount; |
524 | +} __packed SDot11MIBCount, *PSDot11MIBCount; |
525 | |
526 | |
527 | |
528 | @@ -355,13 +354,13 @@ typedef struct tagSStatMIBCount { |
529 | u32 ullTxBroadcastBytes[2]; |
530 | u32 ullTxMulticastBytes[2]; |
531 | u32 ullTxDirectedBytes[2]; |
532 | -} SStatMIBCount, *PSStatMIBCount; |
533 | +} __packed SStatMIBCount, *PSStatMIBCount; |
534 | |
535 | typedef struct tagSCmdValue { |
536 | |
537 | u32 dwValue; |
538 | |
539 | -} SCmdValue, *PSCmdValue; |
540 | +} __packed SCmdValue, *PSCmdValue; |
541 | |
542 | // |
543 | // hostapd & viawget ioctl related |
544 | @@ -431,7 +430,7 @@ struct viawget_hostapd_param { |
545 | u8 ssid[32]; |
546 | } scan_req; |
547 | } u; |
548 | -}; |
549 | +} __packed; |
550 | |
551 | /*--------------------- Export Classes ----------------------------*/ |
552 | |
553 | diff --git a/drivers/staging/vt6656/iowpa.h b/drivers/staging/vt6656/iowpa.h |
554 | index 959c886..2522dde 100644 |
555 | --- a/drivers/staging/vt6656/iowpa.h |
556 | +++ b/drivers/staging/vt6656/iowpa.h |
557 | @@ -67,12 +67,11 @@ enum { |
558 | |
559 | |
560 | |
561 | -#pragma pack(1) |
562 | typedef struct viawget_wpa_header { |
563 | u8 type; |
564 | u16 req_ie_len; |
565 | u16 resp_ie_len; |
566 | -} viawget_wpa_header; |
567 | +} __packed viawget_wpa_header; |
568 | |
569 | struct viawget_wpa_param { |
570 | u32 cmd; |
571 | @@ -113,9 +112,8 @@ struct viawget_wpa_param { |
572 | u8 *buf; |
573 | } scan_results; |
574 | } u; |
575 | -}; |
576 | +} __packed; |
577 | |
578 | -#pragma pack(1) |
579 | struct viawget_scan_result { |
580 | u8 bssid[6]; |
581 | u8 ssid[32]; |
582 | @@ -130,7 +128,7 @@ struct viawget_scan_result { |
583 | int noise; |
584 | int level; |
585 | int maxrate; |
586 | -}; |
587 | +} __packed; |
588 | |
589 | /*--------------------- Export Classes ----------------------------*/ |
590 | |
591 | diff --git a/drivers/staging/wlan-ng/prism2mgmt.c b/drivers/staging/wlan-ng/prism2mgmt.c |
592 | index 4efa9bc..89bfd85 100644 |
593 | --- a/drivers/staging/wlan-ng/prism2mgmt.c |
594 | +++ b/drivers/staging/wlan-ng/prism2mgmt.c |
595 | @@ -406,7 +406,7 @@ int prism2mgmt_scan_results(wlandevice_t *wlandev, void *msgp) |
596 | /* SSID */ |
597 | req->ssid.status = P80211ENUM_msgitem_status_data_ok; |
598 | req->ssid.data.len = le16_to_cpu(item->ssid.len); |
599 | - req->ssid.data.len = min_t(u16, req->ssid.data.len, WLAN_BSSID_LEN); |
600 | + req->ssid.data.len = min_t(u16, req->ssid.data.len, WLAN_SSID_MAXLEN); |
601 | memcpy(req->ssid.data.data, item->ssid.data, req->ssid.data.len); |
602 | |
603 | /* supported rates */ |
604 | diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c |
605 | index 9abef9f..0943ff0 100644 |
606 | --- a/drivers/target/target_core_device.c |
607 | +++ b/drivers/target/target_core_device.c |
608 | @@ -1624,6 +1624,7 @@ int core_dev_setup_virtual_lun0(void) |
609 | ret = PTR_ERR(dev); |
610 | goto out; |
611 | } |
612 | + dev->dev_link_magic = SE_DEV_LINK_MAGIC; |
613 | se_dev->se_dev_ptr = dev; |
614 | g_lun0_dev = dev; |
615 | |
616 | diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c |
617 | index bca737b..a55f91a 100644 |
618 | --- a/drivers/target/target_core_fabric_configfs.c |
619 | +++ b/drivers/target/target_core_fabric_configfs.c |
620 | @@ -71,6 +71,12 @@ static int target_fabric_mappedlun_link( |
621 | struct se_portal_group *se_tpg; |
622 | struct config_item *nacl_ci, *tpg_ci, *tpg_ci_s, *wwn_ci, *wwn_ci_s; |
623 | int ret = 0, lun_access; |
624 | + |
625 | + if (lun->lun_link_magic != SE_LUN_LINK_MAGIC) { |
626 | + pr_err("Bad lun->lun_link_magic, not a valid lun_ci pointer:" |
627 | + " %p to struct lun: %p\n", lun_ci, lun); |
628 | + return -EFAULT; |
629 | + } |
630 | /* |
631 | * Ensure that the source port exists |
632 | */ |
633 | @@ -745,6 +751,12 @@ static int target_fabric_port_link( |
634 | struct target_fabric_configfs *tf; |
635 | int ret; |
636 | |
637 | + if (dev->dev_link_magic != SE_DEV_LINK_MAGIC) { |
638 | + pr_err("Bad dev->dev_link_magic, not a valid se_dev_ci pointer:" |
639 | + " %p to struct se_device: %p\n", se_dev_ci, dev); |
640 | + return -EFAULT; |
641 | + } |
642 | + |
643 | tpg_ci = &lun_ci->ci_parent->ci_group->cg_item; |
644 | se_tpg = container_of(to_config_group(tpg_ci), |
645 | struct se_portal_group, tpg_group); |
646 | diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c |
647 | index a531fe2..4c34665 100644 |
648 | --- a/drivers/target/target_core_tpg.c |
649 | +++ b/drivers/target/target_core_tpg.c |
650 | @@ -672,6 +672,7 @@ int core_tpg_register( |
651 | for (i = 0; i < TRANSPORT_MAX_LUNS_PER_TPG; i++) { |
652 | lun = se_tpg->tpg_lun_list[i]; |
653 | lun->unpacked_lun = i; |
654 | + lun->lun_link_magic = SE_LUN_LINK_MAGIC; |
655 | lun->lun_status = TRANSPORT_LUN_STATUS_FREE; |
656 | atomic_set(&lun->lun_acl_count, 0); |
657 | init_completion(&lun->lun_shutdown_comp); |
658 | diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c |
659 | index dcecbfb..13fe16c 100644 |
660 | --- a/drivers/target/target_core_transport.c |
661 | +++ b/drivers/target/target_core_transport.c |
662 | @@ -545,9 +545,6 @@ static void transport_lun_remove_cmd(struct se_cmd *cmd) |
663 | |
664 | void transport_cmd_finish_abort(struct se_cmd *cmd, int remove) |
665 | { |
666 | - if (!(cmd->se_cmd_flags & SCF_SCSI_TMR_CDB)) |
667 | - transport_lun_remove_cmd(cmd); |
668 | - |
669 | if (transport_cmd_check_stop_to_fabric(cmd)) |
670 | return; |
671 | if (remove) |
672 | @@ -1074,6 +1071,7 @@ struct se_device *transport_add_device_to_core_hba( |
673 | dev->se_hba = hba; |
674 | dev->se_sub_dev = se_dev; |
675 | dev->transport = transport; |
676 | + dev->dev_link_magic = SE_DEV_LINK_MAGIC; |
677 | INIT_LIST_HEAD(&dev->dev_list); |
678 | INIT_LIST_HEAD(&dev->dev_sep_list); |
679 | INIT_LIST_HEAD(&dev->dev_tmr_list); |
680 | @@ -1616,6 +1614,8 @@ static void target_complete_tmr_failure(struct work_struct *work) |
681 | |
682 | se_cmd->se_tmr_req->response = TMR_LUN_DOES_NOT_EXIST; |
683 | se_cmd->se_tfo->queue_tm_rsp(se_cmd); |
684 | + |
685 | + transport_cmd_check_stop_to_fabric(se_cmd); |
686 | } |
687 | |
688 | /** |
689 | @@ -1853,6 +1853,7 @@ void target_execute_cmd(struct se_cmd *cmd) |
690 | } |
691 | |
692 | cmd->t_state = TRANSPORT_PROCESSING; |
693 | + cmd->transport_state |= CMD_T_ACTIVE; |
694 | spin_unlock_irq(&cmd->t_state_lock); |
695 | |
696 | if (dev->dev_task_attr_type != SAM_TASK_ATTR_EMULATED) |
697 | @@ -3024,7 +3025,7 @@ int transport_send_check_condition_and_sense( |
698 | /* ILLEGAL REQUEST */ |
699 | buffer[SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST; |
700 | /* LOGICAL UNIT COMMUNICATION FAILURE */ |
701 | - buffer[SPC_ASC_KEY_OFFSET] = 0x80; |
702 | + buffer[SPC_ASC_KEY_OFFSET] = 0x08; |
703 | break; |
704 | } |
705 | /* |
706 | @@ -3089,6 +3090,8 @@ void transport_send_task_abort(struct se_cmd *cmd) |
707 | } |
708 | cmd->scsi_status = SAM_STAT_TASK_ABORTED; |
709 | |
710 | + transport_lun_remove_cmd(cmd); |
711 | + |
712 | pr_debug("Setting SAM_STAT_TASK_ABORTED status for CDB: 0x%02x," |
713 | " ITT: 0x%08x\n", cmd->t_task_cdb[0], |
714 | cmd->se_tfo->get_task_tag(cmd)); |
715 | diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c |
716 | index 12d6fa2..6659dd3 100644 |
717 | --- a/drivers/target/tcm_fc/tfc_sess.c |
718 | +++ b/drivers/target/tcm_fc/tfc_sess.c |
719 | @@ -355,11 +355,11 @@ static int ft_prli_locked(struct fc_rport_priv *rdata, u32 spp_len, |
720 | |
721 | tport = ft_tport_create(rdata->local_port); |
722 | if (!tport) |
723 | - return 0; /* not a target for this local port */ |
724 | + goto not_target; /* not a target for this local port */ |
725 | |
726 | acl = ft_acl_get(tport->tpg, rdata); |
727 | if (!acl) |
728 | - return 0; |
729 | + goto not_target; /* no target for this remote */ |
730 | |
731 | if (!rspp) |
732 | goto fill; |
733 | @@ -396,12 +396,18 @@ static int ft_prli_locked(struct fc_rport_priv *rdata, u32 spp_len, |
734 | |
735 | /* |
736 | * OR in our service parameters with other provider (initiator), if any. |
737 | - * TBD XXX - indicate RETRY capability? |
738 | */ |
739 | fill: |
740 | fcp_parm = ntohl(spp->spp_params); |
741 | + fcp_parm &= ~FCP_SPPF_RETRY; |
742 | spp->spp_params = htonl(fcp_parm | FCP_SPPF_TARG_FCN); |
743 | return FC_SPP_RESP_ACK; |
744 | + |
745 | +not_target: |
746 | + fcp_parm = ntohl(spp->spp_params); |
747 | + fcp_parm &= ~FCP_SPPF_TARG_FCN; |
748 | + spp->spp_params = htonl(fcp_parm); |
749 | + return 0; |
750 | } |
751 | |
752 | /** |
753 | diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c |
754 | index a82b399..8cf8d0a 100644 |
755 | --- a/drivers/tty/pty.c |
756 | +++ b/drivers/tty/pty.c |
757 | @@ -395,6 +395,8 @@ static int pty_bsd_ioctl(struct tty_struct *tty, |
758 | return pty_set_lock(tty, (int __user *) arg); |
759 | case TIOCSIG: /* Send signal to other side of pty */ |
760 | return pty_signal(tty, (int) arg); |
761 | + case TIOCGPTN: /* TTY returns ENOTTY, but glibc expects EINVAL here */ |
762 | + return -EINVAL; |
763 | } |
764 | return -ENOIOCTLCMD; |
765 | } |
766 | diff --git a/drivers/tty/serial/8250/8250.c b/drivers/tty/serial/8250/8250.c |
767 | index 3ba4234..2c09e64 100644 |
768 | --- a/drivers/tty/serial/8250/8250.c |
769 | +++ b/drivers/tty/serial/8250/8250.c |
770 | @@ -290,6 +290,12 @@ static const struct serial8250_config uart_config[] = { |
771 | UART_FCR_R_TRIG_00 | UART_FCR_T_TRIG_00, |
772 | .flags = UART_CAP_FIFO, |
773 | }, |
774 | + [PORT_BRCM_TRUMANAGE] = { |
775 | + .name = "TruManage", |
776 | + .fifo_size = 1, |
777 | + .tx_loadsz = 1024, |
778 | + .flags = UART_CAP_HFIFO, |
779 | + }, |
780 | [PORT_8250_CIR] = { |
781 | .name = "CIR port" |
782 | } |
783 | @@ -1441,6 +1447,11 @@ void serial8250_tx_chars(struct uart_8250_port *up) |
784 | port->icount.tx++; |
785 | if (uart_circ_empty(xmit)) |
786 | break; |
787 | + if (up->capabilities & UART_CAP_HFIFO) { |
788 | + if ((serial_port_in(port, UART_LSR) & BOTH_EMPTY) != |
789 | + BOTH_EMPTY) |
790 | + break; |
791 | + } |
792 | } while (--count > 0); |
793 | |
794 | if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) |
795 | diff --git a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h |
796 | index 5a76f9c..c0be2fa 100644 |
797 | --- a/drivers/tty/serial/8250/8250.h |
798 | +++ b/drivers/tty/serial/8250/8250.h |
799 | @@ -40,6 +40,7 @@ struct serial8250_config { |
800 | #define UART_CAP_AFE (1 << 11) /* MCR-based hw flow control */ |
801 | #define UART_CAP_UUE (1 << 12) /* UART needs IER bit 6 set (Xscale) */ |
802 | #define UART_CAP_RTOIE (1 << 13) /* UART needs IER bit 4 set (Xscale, Tegra) */ |
803 | +#define UART_CAP_HFIFO (1 << 14) /* UART has a "hidden" FIFO */ |
804 | |
805 | #define UART_BUG_QUOT (1 << 0) /* UART has buggy quot LSB */ |
806 | #define UART_BUG_TXEN (1 << 1) /* UART has buggy TX IIR status */ |
807 | diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c |
808 | index c3b2ec0..71ce540 100644 |
809 | --- a/drivers/tty/serial/8250/8250_dw.c |
810 | +++ b/drivers/tty/serial/8250/8250_dw.c |
811 | @@ -79,7 +79,7 @@ static int dw8250_handle_irq(struct uart_port *p) |
812 | } else if ((iir & UART_IIR_BUSY) == UART_IIR_BUSY) { |
813 | /* Clear the USR and write the LCR again. */ |
814 | (void)p->serial_in(p, UART_USR); |
815 | - p->serial_out(p, d->last_lcr, UART_LCR); |
816 | + p->serial_out(p, UART_LCR, d->last_lcr); |
817 | |
818 | return 1; |
819 | } |
820 | diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c |
821 | index 17b7d26..a29df69 100644 |
822 | --- a/drivers/tty/serial/8250/8250_pci.c |
823 | +++ b/drivers/tty/serial/8250/8250_pci.c |
824 | @@ -1085,6 +1085,18 @@ pci_omegapci_setup(struct serial_private *priv, |
825 | return setup_port(priv, port, 2, idx * 8, 0); |
826 | } |
827 | |
828 | +static int |
829 | +pci_brcm_trumanage_setup(struct serial_private *priv, |
830 | + const struct pciserial_board *board, |
831 | + struct uart_8250_port *port, int idx) |
832 | +{ |
833 | + int ret = pci_default_setup(priv, board, port, idx); |
834 | + |
835 | + port->port.type = PORT_BRCM_TRUMANAGE; |
836 | + port->port.flags = (port->port.flags | UPF_FIXED_PORT | UPF_FIXED_TYPE); |
837 | + return ret; |
838 | +} |
839 | + |
840 | static int skip_tx_en_setup(struct serial_private *priv, |
841 | const struct pciserial_board *board, |
842 | struct uart_8250_port *port, int idx) |
843 | @@ -1213,6 +1225,7 @@ pci_wch_ch353_setup(struct serial_private *priv, |
844 | #define PCI_VENDOR_ID_AGESTAR 0x5372 |
845 | #define PCI_DEVICE_ID_AGESTAR_9375 0x6872 |
846 | #define PCI_VENDOR_ID_ASIX 0x9710 |
847 | +#define PCI_DEVICE_ID_BROADCOM_TRUMANAGE 0x160a |
848 | |
849 | /* Unknown vendors/cards - this should not be in linux/pci_ids.h */ |
850 | #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 |
851 | @@ -1788,6 +1801,17 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { |
852 | .setup = pci_asix_setup, |
853 | }, |
854 | /* |
855 | + * Broadcom TruManage (NetXtreme) |
856 | + */ |
857 | + { |
858 | + .vendor = PCI_VENDOR_ID_BROADCOM, |
859 | + .device = PCI_DEVICE_ID_BROADCOM_TRUMANAGE, |
860 | + .subvendor = PCI_ANY_ID, |
861 | + .subdevice = PCI_ANY_ID, |
862 | + .setup = pci_brcm_trumanage_setup, |
863 | + }, |
864 | + |
865 | + /* |
866 | * Default "match everything" terminator entry |
867 | */ |
868 | { |
869 | @@ -1975,6 +1999,7 @@ enum pci_board_num_t { |
870 | pbn_ce4100_1_115200, |
871 | pbn_omegapci, |
872 | pbn_NETMOS9900_2s_115200, |
873 | + pbn_brcm_trumanage, |
874 | }; |
875 | |
876 | /* |
877 | @@ -2674,6 +2699,12 @@ static struct pciserial_board pci_boards[] __devinitdata = { |
878 | .num_ports = 2, |
879 | .base_baud = 115200, |
880 | }, |
881 | + [pbn_brcm_trumanage] = { |
882 | + .flags = FL_BASE0, |
883 | + .num_ports = 1, |
884 | + .reg_shift = 2, |
885 | + .base_baud = 115200, |
886 | + }, |
887 | }; |
888 | |
889 | static const struct pci_device_id blacklist[] = { |
890 | @@ -4238,6 +4269,13 @@ static struct pci_device_id serial_pci_tbl[] = { |
891 | pbn_omegapci }, |
892 | |
893 | /* |
894 | + * Broadcom TruManage |
895 | + */ |
896 | + { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BROADCOM_TRUMANAGE, |
897 | + PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
898 | + pbn_brcm_trumanage }, |
899 | + |
900 | + /* |
901 | * AgeStar as-prs2-009 |
902 | */ |
903 | { PCI_VENDOR_ID_AGESTAR, PCI_DEVICE_ID_AGESTAR_9375, |
904 | diff --git a/drivers/tty/serial/ifx6x60.c b/drivers/tty/serial/ifx6x60.c |
905 | index 5b9bc19..f5e9666 100644 |
906 | --- a/drivers/tty/serial/ifx6x60.c |
907 | +++ b/drivers/tty/serial/ifx6x60.c |
908 | @@ -552,6 +552,7 @@ static void ifx_port_shutdown(struct tty_port *port) |
909 | container_of(port, struct ifx_spi_device, tty_port); |
910 | |
911 | mrdy_set_low(ifx_dev); |
912 | + del_timer(&ifx_dev->spi_timer); |
913 | clear_bit(IFX_SPI_STATE_TIMER_PENDING, &ifx_dev->flags); |
914 | tasklet_kill(&ifx_dev->io_work_tasklet); |
915 | } |
916 | diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c |
917 | index 6db3baa..ea513c9 100644 |
918 | --- a/drivers/tty/serial/mxs-auart.c |
919 | +++ b/drivers/tty/serial/mxs-auart.c |
920 | @@ -260,10 +260,12 @@ static void mxs_auart_set_mctrl(struct uart_port *u, unsigned mctrl) |
921 | |
922 | u32 ctrl = readl(u->membase + AUART_CTRL2); |
923 | |
924 | - ctrl &= ~AUART_CTRL2_RTSEN; |
925 | + ctrl &= ~(AUART_CTRL2_RTSEN | AUART_CTRL2_RTS); |
926 | if (mctrl & TIOCM_RTS) { |
927 | if (tty_port_cts_enabled(&u->state->port)) |
928 | ctrl |= AUART_CTRL2_RTSEN; |
929 | + else |
930 | + ctrl |= AUART_CTRL2_RTS; |
931 | } |
932 | |
933 | s->ctrl = mctrl; |
934 | diff --git a/drivers/tty/serial/vt8500_serial.c b/drivers/tty/serial/vt8500_serial.c |
935 | index 205d4cf..f528cc2 100644 |
936 | --- a/drivers/tty/serial/vt8500_serial.c |
937 | +++ b/drivers/tty/serial/vt8500_serial.c |
938 | @@ -604,7 +604,7 @@ static int __devinit vt8500_serial_probe(struct platform_device *pdev) |
939 | vt8500_port->uart.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF; |
940 | |
941 | vt8500_port->clk = of_clk_get(pdev->dev.of_node, 0); |
942 | - if (vt8500_port->clk) { |
943 | + if (!IS_ERR(vt8500_port->clk)) { |
944 | vt8500_port->uart.uartclk = clk_get_rate(vt8500_port->clk); |
945 | } else { |
946 | /* use the default of 24Mhz if not specified and warn */ |
947 | diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c |
948 | index ebff9f4..7c212f5 100644 |
949 | --- a/drivers/usb/chipidea/host.c |
950 | +++ b/drivers/usb/chipidea/host.c |
951 | @@ -129,6 +129,9 @@ static int host_start(struct ci13xxx *ci) |
952 | else |
953 | ci->hcd = hcd; |
954 | |
955 | + if (ci->platdata->flags & CI13XXX_DISABLE_STREAMING) |
956 | + hw_write(ci, OP_USBMODE, USBMODE_CI_SDIS, USBMODE_CI_SDIS); |
957 | + |
958 | return ret; |
959 | } |
960 | |
961 | diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c |
962 | index 60023c2..ed83e7a 100644 |
963 | --- a/drivers/usb/serial/io_ti.c |
964 | +++ b/drivers/usb/serial/io_ti.c |
965 | @@ -534,6 +534,9 @@ static void chase_port(struct edgeport_port *port, unsigned long timeout, |
966 | wait_queue_t wait; |
967 | unsigned long flags; |
968 | |
969 | + if (!tty) |
970 | + return; |
971 | + |
972 | if (!timeout) |
973 | timeout = (HZ * EDGE_CLOSING_WAIT)/100; |
974 | |
975 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c |
976 | index fd47369..f2727e4 100644 |
977 | --- a/drivers/usb/serial/option.c |
978 | +++ b/drivers/usb/serial/option.c |
979 | @@ -450,6 +450,10 @@ static void option_instat_callback(struct urb *urb); |
980 | #define PETATEL_VENDOR_ID 0x1ff4 |
981 | #define PETATEL_PRODUCT_NP10T 0x600e |
982 | |
983 | +/* TP-LINK Incorporated products */ |
984 | +#define TPLINK_VENDOR_ID 0x2357 |
985 | +#define TPLINK_PRODUCT_MA180 0x0201 |
986 | + |
987 | /* some devices interfaces need special handling due to a number of reasons */ |
988 | enum option_blacklist_reason { |
989 | OPTION_BLACKLIST_NONE = 0, |
990 | @@ -931,7 +935,8 @@ static const struct usb_device_id option_ids[] = { |
991 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0254, 0xff, 0xff, 0xff) }, |
992 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0257, 0xff, 0xff, 0xff), /* ZTE MF821 */ |
993 | .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, |
994 | - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0265, 0xff, 0xff, 0xff) }, |
995 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0265, 0xff, 0xff, 0xff), /* ONDA MT8205 */ |
996 | + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, |
997 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0284, 0xff, 0xff, 0xff), /* ZTE MF880 */ |
998 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, |
999 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0317, 0xff, 0xff, 0xff) }, |
1000 | @@ -1312,6 +1317,8 @@ static const struct usb_device_id option_ids[] = { |
1001 | { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) }, |
1002 | { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, |
1003 | { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) }, |
1004 | + { USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180), |
1005 | + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, |
1006 | { } /* Terminating entry */ |
1007 | }; |
1008 | MODULE_DEVICE_TABLE(usb, option_ids); |
1009 | diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c |
1010 | index b91f14e..95ce9d0 100644 |
1011 | --- a/drivers/xen/grant-table.c |
1012 | +++ b/drivers/xen/grant-table.c |
1013 | @@ -56,10 +56,6 @@ |
1014 | /* External tools reserve first few grant table entries. */ |
1015 | #define NR_RESERVED_ENTRIES 8 |
1016 | #define GNTTAB_LIST_END 0xffffffff |
1017 | -#define GREFS_PER_GRANT_FRAME \ |
1018 | -(grant_table_version == 1 ? \ |
1019 | -(PAGE_SIZE / sizeof(struct grant_entry_v1)) : \ |
1020 | -(PAGE_SIZE / sizeof(union grant_entry_v2))) |
1021 | |
1022 | static grant_ref_t **gnttab_list; |
1023 | static unsigned int nr_grant_frames; |
1024 | @@ -154,6 +150,7 @@ static struct gnttab_ops *gnttab_interface; |
1025 | static grant_status_t *grstatus; |
1026 | |
1027 | static int grant_table_version; |
1028 | +static int grefs_per_grant_frame; |
1029 | |
1030 | static struct gnttab_free_callback *gnttab_free_callback_list; |
1031 | |
1032 | @@ -767,12 +764,14 @@ static int grow_gnttab_list(unsigned int more_frames) |
1033 | unsigned int new_nr_grant_frames, extra_entries, i; |
1034 | unsigned int nr_glist_frames, new_nr_glist_frames; |
1035 | |
1036 | + BUG_ON(grefs_per_grant_frame == 0); |
1037 | + |
1038 | new_nr_grant_frames = nr_grant_frames + more_frames; |
1039 | - extra_entries = more_frames * GREFS_PER_GRANT_FRAME; |
1040 | + extra_entries = more_frames * grefs_per_grant_frame; |
1041 | |
1042 | - nr_glist_frames = (nr_grant_frames * GREFS_PER_GRANT_FRAME + RPP - 1) / RPP; |
1043 | + nr_glist_frames = (nr_grant_frames * grefs_per_grant_frame + RPP - 1) / RPP; |
1044 | new_nr_glist_frames = |
1045 | - (new_nr_grant_frames * GREFS_PER_GRANT_FRAME + RPP - 1) / RPP; |
1046 | + (new_nr_grant_frames * grefs_per_grant_frame + RPP - 1) / RPP; |
1047 | for (i = nr_glist_frames; i < new_nr_glist_frames; i++) { |
1048 | gnttab_list[i] = (grant_ref_t *)__get_free_page(GFP_ATOMIC); |
1049 | if (!gnttab_list[i]) |
1050 | @@ -780,12 +779,12 @@ static int grow_gnttab_list(unsigned int more_frames) |
1051 | } |
1052 | |
1053 | |
1054 | - for (i = GREFS_PER_GRANT_FRAME * nr_grant_frames; |
1055 | - i < GREFS_PER_GRANT_FRAME * new_nr_grant_frames - 1; i++) |
1056 | + for (i = grefs_per_grant_frame * nr_grant_frames; |
1057 | + i < grefs_per_grant_frame * new_nr_grant_frames - 1; i++) |
1058 | gnttab_entry(i) = i + 1; |
1059 | |
1060 | gnttab_entry(i) = gnttab_free_head; |
1061 | - gnttab_free_head = GREFS_PER_GRANT_FRAME * nr_grant_frames; |
1062 | + gnttab_free_head = grefs_per_grant_frame * nr_grant_frames; |
1063 | gnttab_free_count += extra_entries; |
1064 | |
1065 | nr_grant_frames = new_nr_grant_frames; |
1066 | @@ -957,7 +956,8 @@ EXPORT_SYMBOL_GPL(gnttab_unmap_refs); |
1067 | |
1068 | static unsigned nr_status_frames(unsigned nr_grant_frames) |
1069 | { |
1070 | - return (nr_grant_frames * GREFS_PER_GRANT_FRAME + SPP - 1) / SPP; |
1071 | + BUG_ON(grefs_per_grant_frame == 0); |
1072 | + return (nr_grant_frames * grefs_per_grant_frame + SPP - 1) / SPP; |
1073 | } |
1074 | |
1075 | static int gnttab_map_frames_v1(xen_pfn_t *frames, unsigned int nr_gframes) |
1076 | @@ -1115,6 +1115,7 @@ static void gnttab_request_version(void) |
1077 | rc = HYPERVISOR_grant_table_op(GNTTABOP_set_version, &gsv, 1); |
1078 | if (rc == 0 && gsv.version == 2) { |
1079 | grant_table_version = 2; |
1080 | + grefs_per_grant_frame = PAGE_SIZE / sizeof(union grant_entry_v2); |
1081 | gnttab_interface = &gnttab_v2_ops; |
1082 | } else if (grant_table_version == 2) { |
1083 | /* |
1084 | @@ -1127,17 +1128,17 @@ static void gnttab_request_version(void) |
1085 | panic("we need grant tables version 2, but only version 1 is available"); |
1086 | } else { |
1087 | grant_table_version = 1; |
1088 | + grefs_per_grant_frame = PAGE_SIZE / sizeof(struct grant_entry_v1); |
1089 | gnttab_interface = &gnttab_v1_ops; |
1090 | } |
1091 | printk(KERN_INFO "Grant tables using version %d layout.\n", |
1092 | grant_table_version); |
1093 | } |
1094 | |
1095 | -int gnttab_resume(void) |
1096 | +static int gnttab_setup(void) |
1097 | { |
1098 | unsigned int max_nr_gframes; |
1099 | |
1100 | - gnttab_request_version(); |
1101 | max_nr_gframes = gnttab_max_grant_frames(); |
1102 | if (max_nr_gframes < nr_grant_frames) |
1103 | return -ENOSYS; |
1104 | @@ -1160,6 +1161,12 @@ int gnttab_resume(void) |
1105 | return 0; |
1106 | } |
1107 | |
1108 | +int gnttab_resume(void) |
1109 | +{ |
1110 | + gnttab_request_version(); |
1111 | + return gnttab_setup(); |
1112 | +} |
1113 | + |
1114 | int gnttab_suspend(void) |
1115 | { |
1116 | gnttab_interface->unmap_frames(); |
1117 | @@ -1171,9 +1178,10 @@ static int gnttab_expand(unsigned int req_entries) |
1118 | int rc; |
1119 | unsigned int cur, extra; |
1120 | |
1121 | + BUG_ON(grefs_per_grant_frame == 0); |
1122 | cur = nr_grant_frames; |
1123 | - extra = ((req_entries + (GREFS_PER_GRANT_FRAME-1)) / |
1124 | - GREFS_PER_GRANT_FRAME); |
1125 | + extra = ((req_entries + (grefs_per_grant_frame-1)) / |
1126 | + grefs_per_grant_frame); |
1127 | if (cur + extra > gnttab_max_grant_frames()) |
1128 | return -ENOSPC; |
1129 | |
1130 | @@ -1191,21 +1199,23 @@ int gnttab_init(void) |
1131 | unsigned int nr_init_grefs; |
1132 | int ret; |
1133 | |
1134 | + gnttab_request_version(); |
1135 | nr_grant_frames = 1; |
1136 | boot_max_nr_grant_frames = __max_nr_grant_frames(); |
1137 | |
1138 | /* Determine the maximum number of frames required for the |
1139 | * grant reference free list on the current hypervisor. |
1140 | */ |
1141 | + BUG_ON(grefs_per_grant_frame == 0); |
1142 | max_nr_glist_frames = (boot_max_nr_grant_frames * |
1143 | - GREFS_PER_GRANT_FRAME / RPP); |
1144 | + grefs_per_grant_frame / RPP); |
1145 | |
1146 | gnttab_list = kmalloc(max_nr_glist_frames * sizeof(grant_ref_t *), |
1147 | GFP_KERNEL); |
1148 | if (gnttab_list == NULL) |
1149 | return -ENOMEM; |
1150 | |
1151 | - nr_glist_frames = (nr_grant_frames * GREFS_PER_GRANT_FRAME + RPP - 1) / RPP; |
1152 | + nr_glist_frames = (nr_grant_frames * grefs_per_grant_frame + RPP - 1) / RPP; |
1153 | for (i = 0; i < nr_glist_frames; i++) { |
1154 | gnttab_list[i] = (grant_ref_t *)__get_free_page(GFP_KERNEL); |
1155 | if (gnttab_list[i] == NULL) { |
1156 | @@ -1214,12 +1224,12 @@ int gnttab_init(void) |
1157 | } |
1158 | } |
1159 | |
1160 | - if (gnttab_resume() < 0) { |
1161 | + if (gnttab_setup() < 0) { |
1162 | ret = -ENODEV; |
1163 | goto ini_nomem; |
1164 | } |
1165 | |
1166 | - nr_init_grefs = nr_grant_frames * GREFS_PER_GRANT_FRAME; |
1167 | + nr_init_grefs = nr_grant_frames * grefs_per_grant_frame; |
1168 | |
1169 | for (i = NR_RESERVED_ENTRIES; i < nr_init_grefs - 1; i++) |
1170 | gnttab_entry(i) = i + 1; |
1171 | diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c |
1172 | index b3c243b..f89c0e5 100644 |
1173 | --- a/fs/ext4/inode.c |
1174 | +++ b/fs/ext4/inode.c |
1175 | @@ -1503,6 +1503,8 @@ static void ext4_da_block_invalidatepages(struct mpage_da_data *mpd) |
1176 | |
1177 | index = mpd->first_page; |
1178 | end = mpd->next_page - 1; |
1179 | + |
1180 | + pagevec_init(&pvec, 0); |
1181 | while (index <= end) { |
1182 | nr_pages = pagevec_lookup(&pvec, mapping, index, PAGEVEC_SIZE); |
1183 | if (nr_pages == 0) |
1184 | diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h |
1185 | index 5be8937..fca8bbe 100644 |
1186 | --- a/include/target/target_core_base.h |
1187 | +++ b/include/target/target_core_base.h |
1188 | @@ -734,6 +734,8 @@ struct se_subsystem_dev { |
1189 | }; |
1190 | |
1191 | struct se_device { |
1192 | +#define SE_DEV_LINK_MAGIC 0xfeeddeef |
1193 | + u32 dev_link_magic; |
1194 | /* RELATIVE TARGET PORT IDENTIFER Counter */ |
1195 | u16 dev_rpti_counter; |
1196 | /* Used for SAM Task Attribute ordering */ |
1197 | @@ -820,6 +822,8 @@ struct se_port_stat_grps { |
1198 | }; |
1199 | |
1200 | struct se_lun { |
1201 | +#define SE_LUN_LINK_MAGIC 0xffff7771 |
1202 | + u32 lun_link_magic; |
1203 | /* See transport_lun_status_table */ |
1204 | enum transport_lun_status_table lun_status; |
1205 | u32 lun_access; |
1206 | diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h |
1207 | index 7e1ab20..dbb95db 100644 |
1208 | --- a/include/uapi/linux/serial_core.h |
1209 | +++ b/include/uapi/linux/serial_core.h |
1210 | @@ -49,7 +49,9 @@ |
1211 | #define PORT_XR17D15X 21 /* Exar XR17D15x UART */ |
1212 | #define PORT_LPC3220 22 /* NXP LPC32xx SoC "Standard" UART */ |
1213 | #define PORT_8250_CIR 23 /* CIR infrared port, has its own driver */ |
1214 | -#define PORT_MAX_8250 23 /* max port ID */ |
1215 | +#define PORT_XR17V35X 24 /* Exar XR17V35x UARTs */ |
1216 | +#define PORT_BRCM_TRUMANAGE 24 |
1217 | +#define PORT_MAX_8250 25 /* max port ID */ |
1218 | |
1219 | /* |
1220 | * ARM specific type numbers. These are not currently guaranteed |
1221 | diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c |
1222 | index 4642c68..a95e198 100644 |
1223 | --- a/sound/pci/hda/patch_hdmi.c |
1224 | +++ b/sound/pci/hda/patch_hdmi.c |
1225 | @@ -1499,7 +1499,7 @@ static int hdmi_chmap_ctl_put(struct snd_kcontrol *kcontrol, |
1226 | ctl_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); |
1227 | substream = snd_pcm_chmap_substream(info, ctl_idx); |
1228 | if (!substream || !substream->runtime) |
1229 | - return -EBADFD; |
1230 | + return 0; /* just for avoiding error from alsactl restore */ |
1231 | switch (substream->runtime->status->state) { |
1232 | case SNDRV_PCM_STATE_OPEN: |
1233 | case SNDRV_PCM_STATE_SETUP: |
1234 | diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c |
1235 | index 0f58b4b..b8d1ad1 100644 |
1236 | --- a/sound/usb/quirks.c |
1237 | +++ b/sound/usb/quirks.c |
1238 | @@ -387,11 +387,13 @@ static int snd_usb_fasttrackpro_boot_quirk(struct usb_device *dev) |
1239 | * rules |
1240 | */ |
1241 | err = usb_driver_set_configuration(dev, 2); |
1242 | - if (err < 0) { |
1243 | + if (err < 0) |
1244 | snd_printdd("error usb_driver_set_configuration: %d\n", |
1245 | err); |
1246 | - return -ENODEV; |
1247 | - } |
1248 | + /* Always return an error, so that we stop creating a device |
1249 | + that will just be destroyed and recreated with a new |
1250 | + configuration */ |
1251 | + return -ENODEV; |
1252 | } else |
1253 | snd_printk(KERN_INFO "usb-audio: Fast Track Pro config OK\n"); |
1254 |