Annotation of /trunk/kernel-magellan/patches-3.7/0103-3.7.4-all-fixes.patch
Parent Directory | Revision Log
Revision 2040 -
(hide annotations)
(download)
Mon Jan 28 08:11:29 2013 UTC (11 years, 7 months ago) by niro
File size: 39774 byte(s)
Mon Jan 28 08:11:29 2013 UTC (11 years, 7 months ago) by niro
File size: 39774 byte(s)
linux-3.7.4
1 | niro | 2040 | 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 |