Annotation of /trunk/kernel-lts/patches-3.4/0126-3.4.27-all-fixes.patch
Parent Directory | Revision Log
Revision 2046 -
(hide annotations)
(download)
Mon Jan 28 08:16:37 2013 UTC (11 years, 8 months ago) by niro
File size: 28869 byte(s)
Mon Jan 28 08:16:37 2013 UTC (11 years, 8 months ago) by niro
File size: 28869 byte(s)
-linux-3.4.27
1 | niro | 2046 | diff --git a/arch/s390/include/asm/timex.h b/arch/s390/include/asm/timex.h |
2 | index c447a27..945b7cd 100644 | ||
3 | --- a/arch/s390/include/asm/timex.h | ||
4 | +++ b/arch/s390/include/asm/timex.h | ||
5 | @@ -137,4 +137,32 @@ static inline unsigned long long get_clock_monotonic(void) | ||
6 | return get_clock_xt() - sched_clock_base_cc; | ||
7 | } | ||
8 | |||
9 | +/** | ||
10 | + * tod_to_ns - convert a TOD format value to nanoseconds | ||
11 | + * @todval: to be converted TOD format value | ||
12 | + * Returns: number of nanoseconds that correspond to the TOD format value | ||
13 | + * | ||
14 | + * Converting a 64 Bit TOD format value to nanoseconds means that the value | ||
15 | + * must be divided by 4.096. In order to achieve that we multiply with 125 | ||
16 | + * and divide by 512: | ||
17 | + * | ||
18 | + * ns = (todval * 125) >> 9; | ||
19 | + * | ||
20 | + * In order to avoid an overflow with the multiplication we can rewrite this. | ||
21 | + * With a split todval == 2^32 * th + tl (th upper 32 bits, tl lower 32 bits) | ||
22 | + * we end up with | ||
23 | + * | ||
24 | + * ns = ((2^32 * th + tl) * 125 ) >> 9; | ||
25 | + * -> ns = (2^23 * th * 125) + ((tl * 125) >> 9); | ||
26 | + * | ||
27 | + */ | ||
28 | +static inline unsigned long long tod_to_ns(unsigned long long todval) | ||
29 | +{ | ||
30 | + unsigned long long ns; | ||
31 | + | ||
32 | + ns = ((todval >> 32) << 23) * 125; | ||
33 | + ns += ((todval & 0xffffffff) * 125) >> 9; | ||
34 | + return ns; | ||
35 | +} | ||
36 | + | ||
37 | #endif | ||
38 | diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c | ||
39 | index d4e1cb1..c5531db 100644 | ||
40 | --- a/arch/s390/kernel/time.c | ||
41 | +++ b/arch/s390/kernel/time.c | ||
42 | @@ -64,7 +64,7 @@ static DEFINE_PER_CPU(struct clock_event_device, comparators); | ||
43 | */ | ||
44 | unsigned long long notrace __kprobes sched_clock(void) | ||
45 | { | ||
46 | - return (get_clock_monotonic() * 125) >> 9; | ||
47 | + return tod_to_ns(get_clock_monotonic()); | ||
48 | } | ||
49 | |||
50 | /* | ||
51 | diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c | ||
52 | index 2d9f9a7..10e13b3 100644 | ||
53 | --- a/arch/s390/kvm/interrupt.c | ||
54 | +++ b/arch/s390/kvm/interrupt.c | ||
55 | @@ -390,7 +390,7 @@ int kvm_s390_handle_wait(struct kvm_vcpu *vcpu) | ||
56 | return 0; | ||
57 | } | ||
58 | |||
59 | - sltime = ((vcpu->arch.sie_block->ckc - now)*125)>>9; | ||
60 | + sltime = tod_to_ns(vcpu->arch.sie_block->ckc - now); | ||
61 | |||
62 | hrtimer_start(&vcpu->arch.ckc_timer, ktime_set (0, sltime) , HRTIMER_MODE_REL); | ||
63 | VCPU_EVENT(vcpu, 5, "enabled wait via clock comparator: %llx ns", sltime); | ||
64 | diff --git a/arch/sh/include/asm/elf.h b/arch/sh/include/asm/elf.h | ||
65 | index f38112b..978b7fd 100644 | ||
66 | --- a/arch/sh/include/asm/elf.h | ||
67 | +++ b/arch/sh/include/asm/elf.h | ||
68 | @@ -202,9 +202,9 @@ extern void __kernel_vsyscall; | ||
69 | if (vdso_enabled) \ | ||
70 | NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE); \ | ||
71 | else \ | ||
72 | - NEW_AUX_ENT(AT_IGNORE, 0); | ||
73 | + NEW_AUX_ENT(AT_IGNORE, 0) | ||
74 | #else | ||
75 | -#define VSYSCALL_AUX_ENT | ||
76 | +#define VSYSCALL_AUX_ENT NEW_AUX_ENT(AT_IGNORE, 0) | ||
77 | #endif /* CONFIG_VSYSCALL */ | ||
78 | |||
79 | #ifdef CONFIG_SH_FPU | ||
80 | diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S | ||
81 | index 6d4f7ba..2af4ccd 100644 | ||
82 | --- a/arch/x86/kernel/entry_32.S | ||
83 | +++ b/arch/x86/kernel/entry_32.S | ||
84 | @@ -1074,7 +1074,6 @@ ENTRY(xen_failsafe_callback) | ||
85 | lea 16(%esp),%esp | ||
86 | CFI_ADJUST_CFA_OFFSET -16 | ||
87 | jz 5f | ||
88 | - addl $16,%esp | ||
89 | jmp iret_exc | ||
90 | 5: pushl_cfi $-1 /* orig_ax = -1 => not a system call */ | ||
91 | SAVE_ALL | ||
92 | diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c | ||
93 | index ae98dbb..d289ee7 100644 | ||
94 | --- a/arch/x86/kernel/setup.c | ||
95 | +++ b/arch/x86/kernel/setup.c | ||
96 | @@ -620,6 +620,81 @@ static __init void reserve_ibft_region(void) | ||
97 | |||
98 | static unsigned reserve_low = CONFIG_X86_RESERVE_LOW << 10; | ||
99 | |||
100 | +static bool __init snb_gfx_workaround_needed(void) | ||
101 | +{ | ||
102 | + int i; | ||
103 | + u16 vendor, devid; | ||
104 | + static const u16 snb_ids[] = { | ||
105 | + 0x0102, | ||
106 | + 0x0112, | ||
107 | + 0x0122, | ||
108 | + 0x0106, | ||
109 | + 0x0116, | ||
110 | + 0x0126, | ||
111 | + 0x010a, | ||
112 | + }; | ||
113 | + | ||
114 | + /* Assume no if something weird is going on with PCI */ | ||
115 | + if (!early_pci_allowed()) | ||
116 | + return false; | ||
117 | + | ||
118 | + vendor = read_pci_config_16(0, 2, 0, PCI_VENDOR_ID); | ||
119 | + if (vendor != 0x8086) | ||
120 | + return false; | ||
121 | + | ||
122 | + devid = read_pci_config_16(0, 2, 0, PCI_DEVICE_ID); | ||
123 | + for (i = 0; i < ARRAY_SIZE(snb_ids); i++) | ||
124 | + if (devid == snb_ids[i]) | ||
125 | + return true; | ||
126 | + | ||
127 | + return false; | ||
128 | +} | ||
129 | + | ||
130 | +/* | ||
131 | + * Sandy Bridge graphics has trouble with certain ranges, exclude | ||
132 | + * them from allocation. | ||
133 | + */ | ||
134 | +static void __init trim_snb_memory(void) | ||
135 | +{ | ||
136 | + static const unsigned long bad_pages[] = { | ||
137 | + 0x20050000, | ||
138 | + 0x20110000, | ||
139 | + 0x20130000, | ||
140 | + 0x20138000, | ||
141 | + 0x40004000, | ||
142 | + }; | ||
143 | + int i; | ||
144 | + | ||
145 | + if (!snb_gfx_workaround_needed()) | ||
146 | + return; | ||
147 | + | ||
148 | + printk(KERN_DEBUG "reserving inaccessible SNB gfx pages\n"); | ||
149 | + | ||
150 | + /* | ||
151 | + * Reserve all memory below the 1 MB mark that has not | ||
152 | + * already been reserved. | ||
153 | + */ | ||
154 | + memblock_reserve(0, 1<<20); | ||
155 | + | ||
156 | + for (i = 0; i < ARRAY_SIZE(bad_pages); i++) { | ||
157 | + if (memblock_reserve(bad_pages[i], PAGE_SIZE)) | ||
158 | + printk(KERN_WARNING "failed to reserve 0x%08lx\n", | ||
159 | + bad_pages[i]); | ||
160 | + } | ||
161 | +} | ||
162 | + | ||
163 | +/* | ||
164 | + * Here we put platform-specific memory range workarounds, i.e. | ||
165 | + * memory known to be corrupt or otherwise in need to be reserved on | ||
166 | + * specific platforms. | ||
167 | + * | ||
168 | + * If this gets used more widely it could use a real dispatch mechanism. | ||
169 | + */ | ||
170 | +static void __init trim_platform_memory_ranges(void) | ||
171 | +{ | ||
172 | + trim_snb_memory(); | ||
173 | +} | ||
174 | + | ||
175 | static void __init trim_bios_range(void) | ||
176 | { | ||
177 | /* | ||
178 | @@ -640,6 +715,7 @@ static void __init trim_bios_range(void) | ||
179 | * take them out. | ||
180 | */ | ||
181 | e820_remove_range(BIOS_BEGIN, BIOS_END - BIOS_BEGIN, E820_RAM, 1); | ||
182 | + | ||
183 | sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); | ||
184 | } | ||
185 | |||
186 | @@ -919,6 +995,8 @@ void __init setup_arch(char **cmdline_p) | ||
187 | |||
188 | setup_trampolines(); | ||
189 | |||
190 | + trim_platform_memory_ranges(); | ||
191 | + | ||
192 | init_gbpages(); | ||
193 | |||
194 | /* max_pfn_mapped is updated here */ | ||
195 | diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c | ||
196 | index 4a0f314..be984e0 100644 | ||
197 | --- a/drivers/block/drbd/drbd_req.c | ||
198 | +++ b/drivers/block/drbd/drbd_req.c | ||
199 | @@ -37,6 +37,7 @@ static void _drbd_start_io_acct(struct drbd_conf *mdev, struct drbd_request *req | ||
200 | const int rw = bio_data_dir(bio); | ||
201 | int cpu; | ||
202 | cpu = part_stat_lock(); | ||
203 | + part_round_stats(cpu, &mdev->vdisk->part0); | ||
204 | part_stat_inc(cpu, &mdev->vdisk->part0, ios[rw]); | ||
205 | part_stat_add(cpu, &mdev->vdisk->part0, sectors[rw], bio_sectors(bio)); | ||
206 | part_inc_in_flight(&mdev->vdisk->part0, rw); | ||
207 | diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c | ||
208 | index 9c34db8..be66606 100644 | ||
209 | --- a/drivers/iommu/intel-iommu.c | ||
210 | +++ b/drivers/iommu/intel-iommu.c | ||
211 | @@ -2321,8 +2321,39 @@ static int domain_add_dev_info(struct dmar_domain *domain, | ||
212 | return 0; | ||
213 | } | ||
214 | |||
215 | +static bool device_has_rmrr(struct pci_dev *dev) | ||
216 | +{ | ||
217 | + struct dmar_rmrr_unit *rmrr; | ||
218 | + int i; | ||
219 | + | ||
220 | + for_each_rmrr_units(rmrr) { | ||
221 | + for (i = 0; i < rmrr->devices_cnt; i++) { | ||
222 | + /* | ||
223 | + * Return TRUE if this RMRR contains the device that | ||
224 | + * is passed in. | ||
225 | + */ | ||
226 | + if (rmrr->devices[i] == dev) | ||
227 | + return true; | ||
228 | + } | ||
229 | + } | ||
230 | + return false; | ||
231 | +} | ||
232 | + | ||
233 | static int iommu_should_identity_map(struct pci_dev *pdev, int startup) | ||
234 | { | ||
235 | + | ||
236 | + /* | ||
237 | + * We want to prevent any device associated with an RMRR from | ||
238 | + * getting placed into the SI Domain. This is done because | ||
239 | + * problems exist when devices are moved in and out of domains | ||
240 | + * and their respective RMRR info is lost. We exempt USB devices | ||
241 | + * from this process due to their usage of RMRRs that are known | ||
242 | + * to not be needed after BIOS hand-off to OS. | ||
243 | + */ | ||
244 | + if (device_has_rmrr(pdev) && | ||
245 | + (pdev->class >> 8) != PCI_CLASS_SERIAL_USB) | ||
246 | + return 0; | ||
247 | + | ||
248 | if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev)) | ||
249 | return 1; | ||
250 | |||
251 | diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c | ||
252 | index 8683ca4..6b4f014 100644 | ||
253 | --- a/drivers/net/ethernet/intel/igb/igb_main.c | ||
254 | +++ b/drivers/net/ethernet/intel/igb/igb_main.c | ||
255 | @@ -951,17 +951,18 @@ static int igb_request_msix(struct igb_adapter *adapter) | ||
256 | { | ||
257 | struct net_device *netdev = adapter->netdev; | ||
258 | struct e1000_hw *hw = &adapter->hw; | ||
259 | - int i, err = 0, vector = 0; | ||
260 | + int i, err = 0, vector = 0, free_vector = 0; | ||
261 | |||
262 | err = request_irq(adapter->msix_entries[vector].vector, | ||
263 | igb_msix_other, 0, netdev->name, adapter); | ||
264 | if (err) | ||
265 | - goto out; | ||
266 | - vector++; | ||
267 | + goto err_out; | ||
268 | |||
269 | for (i = 0; i < adapter->num_q_vectors; i++) { | ||
270 | struct igb_q_vector *q_vector = adapter->q_vector[i]; | ||
271 | |||
272 | + vector++; | ||
273 | + | ||
274 | q_vector->itr_register = hw->hw_addr + E1000_EITR(vector); | ||
275 | |||
276 | if (q_vector->rx.ring && q_vector->tx.ring) | ||
277 | @@ -980,13 +981,22 @@ static int igb_request_msix(struct igb_adapter *adapter) | ||
278 | igb_msix_ring, 0, q_vector->name, | ||
279 | q_vector); | ||
280 | if (err) | ||
281 | - goto out; | ||
282 | - vector++; | ||
283 | + goto err_free; | ||
284 | } | ||
285 | |||
286 | igb_configure_msix(adapter); | ||
287 | return 0; | ||
288 | -out: | ||
289 | + | ||
290 | +err_free: | ||
291 | + /* free already assigned IRQs */ | ||
292 | + free_irq(adapter->msix_entries[free_vector++].vector, adapter); | ||
293 | + | ||
294 | + vector--; | ||
295 | + for (i = 0; i < vector; i++) { | ||
296 | + free_irq(adapter->msix_entries[free_vector++].vector, | ||
297 | + adapter->q_vector[i]); | ||
298 | + } | ||
299 | +err_out: | ||
300 | return err; | ||
301 | } | ||
302 | |||
303 | diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c | ||
304 | index 0dc70c2..06ee243 100644 | ||
305 | --- a/drivers/net/ethernet/realtek/r8169.c | ||
306 | +++ b/drivers/net/ethernet/realtek/r8169.c | ||
307 | @@ -5516,11 +5516,7 @@ static void rtl_slow_event_work(struct rtl8169_private *tp) | ||
308 | if (status & LinkChg) | ||
309 | __rtl8169_check_link_status(dev, tp, tp->mmio_addr, true); | ||
310 | |||
311 | - napi_disable(&tp->napi); | ||
312 | - rtl_irq_disable(tp); | ||
313 | - | ||
314 | - napi_enable(&tp->napi); | ||
315 | - napi_schedule(&tp->napi); | ||
316 | + rtl_irq_enable_all(tp); | ||
317 | } | ||
318 | |||
319 | static void rtl_task(struct work_struct *work) | ||
320 | diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h | ||
321 | index a8f97eb..991ce3e 100644 | ||
322 | --- a/drivers/staging/vt6656/bssdb.h | ||
323 | +++ b/drivers/staging/vt6656/bssdb.h | ||
324 | @@ -92,7 +92,6 @@ typedef struct tagSRSNCapObject { | ||
325 | } SRSNCapObject, *PSRSNCapObject; | ||
326 | |||
327 | // BSS info(AP) | ||
328 | -#pragma pack(1) | ||
329 | typedef struct tagKnownBSS { | ||
330 | // BSS info | ||
331 | BOOL bActive; | ||
332 | diff --git a/drivers/staging/vt6656/int.h b/drivers/staging/vt6656/int.h | ||
333 | index a5d96b9..27bc7f5 100644 | ||
334 | --- a/drivers/staging/vt6656/int.h | ||
335 | +++ b/drivers/staging/vt6656/int.h | ||
336 | @@ -34,7 +34,6 @@ | ||
337 | #include "device.h" | ||
338 | |||
339 | /*--------------------- Export Definitions -------------------------*/ | ||
340 | -#pragma pack(1) | ||
341 | typedef struct tagSINTData { | ||
342 | BYTE byTSR0; | ||
343 | BYTE byPkt0; | ||
344 | diff --git a/drivers/staging/vt6656/iocmd.h b/drivers/staging/vt6656/iocmd.h | ||
345 | index 22710ce..ae6e2d2 100644 | ||
346 | --- a/drivers/staging/vt6656/iocmd.h | ||
347 | +++ b/drivers/staging/vt6656/iocmd.h | ||
348 | @@ -95,13 +95,12 @@ typedef enum tagWZONETYPE { | ||
349 | // Ioctl interface structure | ||
350 | // Command structure | ||
351 | // | ||
352 | -#pragma pack(1) | ||
353 | typedef struct tagSCmdRequest { | ||
354 | u8 name[16]; | ||
355 | void *data; | ||
356 | u16 wResult; | ||
357 | u16 wCmdCode; | ||
358 | -} SCmdRequest, *PSCmdRequest; | ||
359 | +} __packed SCmdRequest, *PSCmdRequest; | ||
360 | |||
361 | // | ||
362 | // Scan | ||
363 | @@ -111,7 +110,7 @@ typedef struct tagSCmdScan { | ||
364 | |||
365 | u8 ssid[SSID_MAXLEN + 2]; | ||
366 | |||
367 | -} SCmdScan, *PSCmdScan; | ||
368 | +} __packed SCmdScan, *PSCmdScan; | ||
369 | |||
370 | // | ||
371 | // BSS Join | ||
372 | @@ -126,7 +125,7 @@ typedef struct tagSCmdBSSJoin { | ||
373 | BOOL bPSEnable; | ||
374 | BOOL bShareKeyAuth; | ||
375 | |||
376 | -} SCmdBSSJoin, *PSCmdBSSJoin; | ||
377 | +} __packed SCmdBSSJoin, *PSCmdBSSJoin; | ||
378 | |||
379 | // | ||
380 | // Zonetype Setting | ||
381 | @@ -137,7 +136,7 @@ typedef struct tagSCmdZoneTypeSet { | ||
382 | BOOL bWrite; | ||
383 | WZONETYPE ZoneType; | ||
384 | |||
385 | -} SCmdZoneTypeSet, *PSCmdZoneTypeSet; | ||
386 | +} __packed SCmdZoneTypeSet, *PSCmdZoneTypeSet; | ||
387 | |||
388 | typedef struct tagSWPAResult { | ||
389 | char ifname[100]; | ||
390 | @@ -145,7 +144,7 @@ typedef struct tagSWPAResult { | ||
391 | u8 key_mgmt; | ||
392 | u8 eap_type; | ||
393 | BOOL authenticated; | ||
394 | -} SWPAResult, *PSWPAResult; | ||
395 | +} __packed SWPAResult, *PSWPAResult; | ||
396 | |||
397 | typedef struct tagSCmdStartAP { | ||
398 | |||
399 | @@ -157,7 +156,7 @@ typedef struct tagSCmdStartAP { | ||
400 | BOOL bShareKeyAuth; | ||
401 | u8 byBasicRate; | ||
402 | |||
403 | -} SCmdStartAP, *PSCmdStartAP; | ||
404 | +} __packed SCmdStartAP, *PSCmdStartAP; | ||
405 | |||
406 | typedef struct tagSCmdSetWEP { | ||
407 | |||
408 | @@ -167,7 +166,7 @@ typedef struct tagSCmdSetWEP { | ||
409 | BOOL bWepKeyAvailable[WEP_NKEYS]; | ||
410 | u32 auWepKeyLength[WEP_NKEYS]; | ||
411 | |||
412 | -} SCmdSetWEP, *PSCmdSetWEP; | ||
413 | +} __packed SCmdSetWEP, *PSCmdSetWEP; | ||
414 | |||
415 | typedef struct tagSBSSIDItem { | ||
416 | |||
417 | @@ -180,14 +179,14 @@ typedef struct tagSBSSIDItem { | ||
418 | BOOL bWEPOn; | ||
419 | u32 uRSSI; | ||
420 | |||
421 | -} SBSSIDItem; | ||
422 | +} __packed SBSSIDItem; | ||
423 | |||
424 | |||
425 | typedef struct tagSBSSIDList { | ||
426 | |||
427 | u32 uItem; | ||
428 | SBSSIDItem sBSSIDList[0]; | ||
429 | -} SBSSIDList, *PSBSSIDList; | ||
430 | +} __packed SBSSIDList, *PSBSSIDList; | ||
431 | |||
432 | |||
433 | typedef struct tagSNodeItem { | ||
434 | @@ -208,7 +207,7 @@ typedef struct tagSNodeItem { | ||
435 | u32 uTxAttempts; | ||
436 | u16 wFailureRatio; | ||
437 | |||
438 | -} SNodeItem; | ||
439 | +} __packed SNodeItem; | ||
440 | |||
441 | |||
442 | typedef struct tagSNodeList { | ||
443 | @@ -216,7 +215,7 @@ typedef struct tagSNodeList { | ||
444 | u32 uItem; | ||
445 | SNodeItem sNodeList[0]; | ||
446 | |||
447 | -} SNodeList, *PSNodeList; | ||
448 | +} __packed SNodeList, *PSNodeList; | ||
449 | |||
450 | |||
451 | typedef struct tagSCmdLinkStatus { | ||
452 | @@ -229,7 +228,7 @@ typedef struct tagSCmdLinkStatus { | ||
453 | u32 uChannel; | ||
454 | u32 uLinkRate; | ||
455 | |||
456 | -} SCmdLinkStatus, *PSCmdLinkStatus; | ||
457 | +} __packed SCmdLinkStatus, *PSCmdLinkStatus; | ||
458 | |||
459 | // | ||
460 | // 802.11 counter | ||
461 | @@ -247,7 +246,7 @@ typedef struct tagSDot11MIBCount { | ||
462 | u32 ReceivedFragmentCount; | ||
463 | u32 MulticastReceivedFrameCount; | ||
464 | u32 FCSErrorCount; | ||
465 | -} SDot11MIBCount, *PSDot11MIBCount; | ||
466 | +} __packed SDot11MIBCount, *PSDot11MIBCount; | ||
467 | |||
468 | |||
469 | |||
470 | @@ -355,13 +354,13 @@ typedef struct tagSStatMIBCount { | ||
471 | u32 ullTxBroadcastBytes[2]; | ||
472 | u32 ullTxMulticastBytes[2]; | ||
473 | u32 ullTxDirectedBytes[2]; | ||
474 | -} SStatMIBCount, *PSStatMIBCount; | ||
475 | +} __packed SStatMIBCount, *PSStatMIBCount; | ||
476 | |||
477 | typedef struct tagSCmdValue { | ||
478 | |||
479 | u32 dwValue; | ||
480 | |||
481 | -} SCmdValue, *PSCmdValue; | ||
482 | +} __packed SCmdValue, *PSCmdValue; | ||
483 | |||
484 | // | ||
485 | // hostapd & viawget ioctl related | ||
486 | @@ -431,7 +430,7 @@ struct viawget_hostapd_param { | ||
487 | u8 ssid[32]; | ||
488 | } scan_req; | ||
489 | } u; | ||
490 | -}; | ||
491 | +} __packed; | ||
492 | |||
493 | /*--------------------- Export Classes ----------------------------*/ | ||
494 | |||
495 | diff --git a/drivers/staging/vt6656/iowpa.h b/drivers/staging/vt6656/iowpa.h | ||
496 | index 959c886..2522dde 100644 | ||
497 | --- a/drivers/staging/vt6656/iowpa.h | ||
498 | +++ b/drivers/staging/vt6656/iowpa.h | ||
499 | @@ -67,12 +67,11 @@ enum { | ||
500 | |||
501 | |||
502 | |||
503 | -#pragma pack(1) | ||
504 | typedef struct viawget_wpa_header { | ||
505 | u8 type; | ||
506 | u16 req_ie_len; | ||
507 | u16 resp_ie_len; | ||
508 | -} viawget_wpa_header; | ||
509 | +} __packed viawget_wpa_header; | ||
510 | |||
511 | struct viawget_wpa_param { | ||
512 | u32 cmd; | ||
513 | @@ -113,9 +112,8 @@ struct viawget_wpa_param { | ||
514 | u8 *buf; | ||
515 | } scan_results; | ||
516 | } u; | ||
517 | -}; | ||
518 | +} __packed; | ||
519 | |||
520 | -#pragma pack(1) | ||
521 | struct viawget_scan_result { | ||
522 | u8 bssid[6]; | ||
523 | u8 ssid[32]; | ||
524 | @@ -130,7 +128,7 @@ struct viawget_scan_result { | ||
525 | int noise; | ||
526 | int level; | ||
527 | int maxrate; | ||
528 | -}; | ||
529 | +} __packed; | ||
530 | |||
531 | /*--------------------- Export Classes ----------------------------*/ | ||
532 | |||
533 | diff --git a/drivers/staging/wlan-ng/prism2mgmt.c b/drivers/staging/wlan-ng/prism2mgmt.c | ||
534 | index c3bb05d..4110a2f 100644 | ||
535 | --- a/drivers/staging/wlan-ng/prism2mgmt.c | ||
536 | +++ b/drivers/staging/wlan-ng/prism2mgmt.c | ||
537 | @@ -406,7 +406,7 @@ int prism2mgmt_scan_results(wlandevice_t *wlandev, void *msgp) | ||
538 | /* SSID */ | ||
539 | req->ssid.status = P80211ENUM_msgitem_status_data_ok; | ||
540 | req->ssid.data.len = le16_to_cpu(item->ssid.len); | ||
541 | - req->ssid.data.len = min_t(u16, req->ssid.data.len, WLAN_BSSID_LEN); | ||
542 | + req->ssid.data.len = min_t(u16, req->ssid.data.len, WLAN_SSID_MAXLEN); | ||
543 | memcpy(req->ssid.data.data, item->ssid.data, req->ssid.data.len); | ||
544 | |||
545 | /* supported rates */ | ||
546 | diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c | ||
547 | index 4df8022..26c62f0 100644 | ||
548 | --- a/drivers/target/target_core_device.c | ||
549 | +++ b/drivers/target/target_core_device.c | ||
550 | @@ -1665,6 +1665,7 @@ int core_dev_setup_virtual_lun0(void) | ||
551 | ret = PTR_ERR(dev); | ||
552 | goto out; | ||
553 | } | ||
554 | + dev->dev_link_magic = SE_DEV_LINK_MAGIC; | ||
555 | se_dev->se_dev_ptr = dev; | ||
556 | g_lun0_dev = dev; | ||
557 | |||
558 | diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c | ||
559 | index 405cc98..b009b89 100644 | ||
560 | --- a/drivers/target/target_core_fabric_configfs.c | ||
561 | +++ b/drivers/target/target_core_fabric_configfs.c | ||
562 | @@ -72,6 +72,12 @@ static int target_fabric_mappedlun_link( | ||
563 | struct se_portal_group *se_tpg; | ||
564 | struct config_item *nacl_ci, *tpg_ci, *tpg_ci_s, *wwn_ci, *wwn_ci_s; | ||
565 | int ret = 0, lun_access; | ||
566 | + | ||
567 | + if (lun->lun_link_magic != SE_LUN_LINK_MAGIC) { | ||
568 | + pr_err("Bad lun->lun_link_magic, not a valid lun_ci pointer:" | ||
569 | + " %p to struct lun: %p\n", lun_ci, lun); | ||
570 | + return -EFAULT; | ||
571 | + } | ||
572 | /* | ||
573 | * Ensure that the source port exists | ||
574 | */ | ||
575 | @@ -746,6 +752,12 @@ static int target_fabric_port_link( | ||
576 | struct target_fabric_configfs *tf; | ||
577 | int ret; | ||
578 | |||
579 | + if (dev->dev_link_magic != SE_DEV_LINK_MAGIC) { | ||
580 | + pr_err("Bad dev->dev_link_magic, not a valid se_dev_ci pointer:" | ||
581 | + " %p to struct se_device: %p\n", se_dev_ci, dev); | ||
582 | + return -EFAULT; | ||
583 | + } | ||
584 | + | ||
585 | tpg_ci = &lun_ci->ci_parent->ci_group->cg_item; | ||
586 | se_tpg = container_of(to_config_group(tpg_ci), | ||
587 | struct se_portal_group, tpg_group); | ||
588 | diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c | ||
589 | index e320ec2..ba537b6 100644 | ||
590 | --- a/drivers/target/target_core_tpg.c | ||
591 | +++ b/drivers/target/target_core_tpg.c | ||
592 | @@ -677,6 +677,7 @@ int core_tpg_register( | ||
593 | for (i = 0; i < TRANSPORT_MAX_LUNS_PER_TPG; i++) { | ||
594 | lun = se_tpg->tpg_lun_list[i]; | ||
595 | lun->unpacked_lun = i; | ||
596 | + lun->lun_link_magic = SE_LUN_LINK_MAGIC; | ||
597 | lun->lun_status = TRANSPORT_LUN_STATUS_FREE; | ||
598 | atomic_set(&lun->lun_acl_count, 0); | ||
599 | init_completion(&lun->lun_shutdown_comp); | ||
600 | diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c | ||
601 | index 69f3f7d..f687892 100644 | ||
602 | --- a/drivers/target/target_core_transport.c | ||
603 | +++ b/drivers/target/target_core_transport.c | ||
604 | @@ -1341,6 +1341,7 @@ struct se_device *transport_add_device_to_core_hba( | ||
605 | dev->se_hba = hba; | ||
606 | dev->se_sub_dev = se_dev; | ||
607 | dev->transport = transport; | ||
608 | + dev->dev_link_magic = SE_DEV_LINK_MAGIC; | ||
609 | INIT_LIST_HEAD(&dev->dev_list); | ||
610 | INIT_LIST_HEAD(&dev->dev_sep_list); | ||
611 | INIT_LIST_HEAD(&dev->dev_tmr_list); | ||
612 | @@ -1748,6 +1749,8 @@ static void target_complete_tmr_failure(struct work_struct *work) | ||
613 | |||
614 | se_cmd->se_tmr_req->response = TMR_LUN_DOES_NOT_EXIST; | ||
615 | se_cmd->se_tfo->queue_tm_rsp(se_cmd); | ||
616 | + | ||
617 | + transport_cmd_check_stop_to_fabric(se_cmd); | ||
618 | } | ||
619 | |||
620 | /** | ||
621 | diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c | ||
622 | index a426c40..9249998 100644 | ||
623 | --- a/drivers/target/tcm_fc/tfc_sess.c | ||
624 | +++ b/drivers/target/tcm_fc/tfc_sess.c | ||
625 | @@ -356,11 +356,11 @@ static int ft_prli_locked(struct fc_rport_priv *rdata, u32 spp_len, | ||
626 | |||
627 | tport = ft_tport_create(rdata->local_port); | ||
628 | if (!tport) | ||
629 | - return 0; /* not a target for this local port */ | ||
630 | + goto not_target; /* not a target for this local port */ | ||
631 | |||
632 | acl = ft_acl_get(tport->tpg, rdata); | ||
633 | if (!acl) | ||
634 | - return 0; | ||
635 | + goto not_target; /* no target for this remote */ | ||
636 | |||
637 | if (!rspp) | ||
638 | goto fill; | ||
639 | @@ -397,12 +397,18 @@ static int ft_prli_locked(struct fc_rport_priv *rdata, u32 spp_len, | ||
640 | |||
641 | /* | ||
642 | * OR in our service parameters with other provider (initiator), if any. | ||
643 | - * TBD XXX - indicate RETRY capability? | ||
644 | */ | ||
645 | fill: | ||
646 | fcp_parm = ntohl(spp->spp_params); | ||
647 | + fcp_parm &= ~FCP_SPPF_RETRY; | ||
648 | spp->spp_params = htonl(fcp_parm | FCP_SPPF_TARG_FCN); | ||
649 | return FC_SPP_RESP_ACK; | ||
650 | + | ||
651 | +not_target: | ||
652 | + fcp_parm = ntohl(spp->spp_params); | ||
653 | + fcp_parm &= ~FCP_SPPF_TARG_FCN; | ||
654 | + spp->spp_params = htonl(fcp_parm); | ||
655 | + return 0; | ||
656 | } | ||
657 | |||
658 | /** | ||
659 | diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c | ||
660 | index f574eef..b6dc908 100644 | ||
661 | --- a/drivers/tty/serial/8250/8250_dw.c | ||
662 | +++ b/drivers/tty/serial/8250/8250_dw.c | ||
663 | @@ -79,7 +79,7 @@ static int dw8250_handle_irq(struct uart_port *p) | ||
664 | } else if ((iir & UART_IIR_BUSY) == UART_IIR_BUSY) { | ||
665 | /* Clear the USR and write the LCR again. */ | ||
666 | (void)p->serial_in(p, UART_USR); | ||
667 | - p->serial_out(p, d->last_lcr, UART_LCR); | ||
668 | + p->serial_out(p, UART_LCR, d->last_lcr); | ||
669 | |||
670 | return 1; | ||
671 | } | ||
672 | diff --git a/drivers/tty/serial/ifx6x60.c b/drivers/tty/serial/ifx6x60.c | ||
673 | index 144cd39..17f587c 100644 | ||
674 | --- a/drivers/tty/serial/ifx6x60.c | ||
675 | +++ b/drivers/tty/serial/ifx6x60.c | ||
676 | @@ -552,6 +552,7 @@ static void ifx_port_shutdown(struct tty_port *port) | ||
677 | container_of(port, struct ifx_spi_device, tty_port); | ||
678 | |||
679 | mrdy_set_low(ifx_dev); | ||
680 | + del_timer(&ifx_dev->spi_timer); | ||
681 | clear_bit(IFX_SPI_STATE_TIMER_PENDING, &ifx_dev->flags); | ||
682 | tasklet_kill(&ifx_dev->io_work_tasklet); | ||
683 | } | ||
684 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c | ||
685 | index ba23ad5..0778cd0 100644 | ||
686 | --- a/drivers/usb/serial/option.c | ||
687 | +++ b/drivers/usb/serial/option.c | ||
688 | @@ -449,6 +449,10 @@ static void option_instat_callback(struct urb *urb); | ||
689 | #define PETATEL_VENDOR_ID 0x1ff4 | ||
690 | #define PETATEL_PRODUCT_NP10T 0x600e | ||
691 | |||
692 | +/* TP-LINK Incorporated products */ | ||
693 | +#define TPLINK_VENDOR_ID 0x2357 | ||
694 | +#define TPLINK_PRODUCT_MA180 0x0201 | ||
695 | + | ||
696 | /* some devices interfaces need special handling due to a number of reasons */ | ||
697 | enum option_blacklist_reason { | ||
698 | OPTION_BLACKLIST_NONE = 0, | ||
699 | @@ -930,7 +934,8 @@ static const struct usb_device_id option_ids[] = { | ||
700 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0254, 0xff, 0xff, 0xff) }, | ||
701 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0257, 0xff, 0xff, 0xff), /* ZTE MF821 */ | ||
702 | .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, | ||
703 | - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0265, 0xff, 0xff, 0xff) }, | ||
704 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0265, 0xff, 0xff, 0xff), /* ONDA MT8205 */ | ||
705 | + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
706 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0284, 0xff, 0xff, 0xff), /* ZTE MF880 */ | ||
707 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
708 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0317, 0xff, 0xff, 0xff) }, | ||
709 | @@ -1311,6 +1316,8 @@ static const struct usb_device_id option_ids[] = { | ||
710 | { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) }, | ||
711 | { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, | ||
712 | { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) }, | ||
713 | + { USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180), | ||
714 | + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
715 | { } /* Terminating entry */ | ||
716 | }; | ||
717 | MODULE_DEVICE_TABLE(usb, option_ids); | ||
718 | diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c | ||
719 | index fda491c..7e34bee 100644 | ||
720 | --- a/drivers/xen/grant-table.c | ||
721 | +++ b/drivers/xen/grant-table.c | ||
722 | @@ -53,10 +53,6 @@ | ||
723 | /* External tools reserve first few grant table entries. */ | ||
724 | #define NR_RESERVED_ENTRIES 8 | ||
725 | #define GNTTAB_LIST_END 0xffffffff | ||
726 | -#define GREFS_PER_GRANT_FRAME \ | ||
727 | -(grant_table_version == 1 ? \ | ||
728 | -(PAGE_SIZE / sizeof(struct grant_entry_v1)) : \ | ||
729 | -(PAGE_SIZE / sizeof(union grant_entry_v2))) | ||
730 | |||
731 | static grant_ref_t **gnttab_list; | ||
732 | static unsigned int nr_grant_frames; | ||
733 | @@ -151,6 +147,7 @@ static struct gnttab_ops *gnttab_interface; | ||
734 | static grant_status_t *grstatus; | ||
735 | |||
736 | static int grant_table_version; | ||
737 | +static int grefs_per_grant_frame; | ||
738 | |||
739 | static struct gnttab_free_callback *gnttab_free_callback_list; | ||
740 | |||
741 | @@ -679,12 +676,14 @@ static int grow_gnttab_list(unsigned int more_frames) | ||
742 | unsigned int new_nr_grant_frames, extra_entries, i; | ||
743 | unsigned int nr_glist_frames, new_nr_glist_frames; | ||
744 | |||
745 | + BUG_ON(grefs_per_grant_frame == 0); | ||
746 | + | ||
747 | new_nr_grant_frames = nr_grant_frames + more_frames; | ||
748 | - extra_entries = more_frames * GREFS_PER_GRANT_FRAME; | ||
749 | + extra_entries = more_frames * grefs_per_grant_frame; | ||
750 | |||
751 | - nr_glist_frames = (nr_grant_frames * GREFS_PER_GRANT_FRAME + RPP - 1) / RPP; | ||
752 | + nr_glist_frames = (nr_grant_frames * grefs_per_grant_frame + RPP - 1) / RPP; | ||
753 | new_nr_glist_frames = | ||
754 | - (new_nr_grant_frames * GREFS_PER_GRANT_FRAME + RPP - 1) / RPP; | ||
755 | + (new_nr_grant_frames * grefs_per_grant_frame + RPP - 1) / RPP; | ||
756 | for (i = nr_glist_frames; i < new_nr_glist_frames; i++) { | ||
757 | gnttab_list[i] = (grant_ref_t *)__get_free_page(GFP_ATOMIC); | ||
758 | if (!gnttab_list[i]) | ||
759 | @@ -692,12 +691,12 @@ static int grow_gnttab_list(unsigned int more_frames) | ||
760 | } | ||
761 | |||
762 | |||
763 | - for (i = GREFS_PER_GRANT_FRAME * nr_grant_frames; | ||
764 | - i < GREFS_PER_GRANT_FRAME * new_nr_grant_frames - 1; i++) | ||
765 | + for (i = grefs_per_grant_frame * nr_grant_frames; | ||
766 | + i < grefs_per_grant_frame * new_nr_grant_frames - 1; i++) | ||
767 | gnttab_entry(i) = i + 1; | ||
768 | |||
769 | gnttab_entry(i) = gnttab_free_head; | ||
770 | - gnttab_free_head = GREFS_PER_GRANT_FRAME * nr_grant_frames; | ||
771 | + gnttab_free_head = grefs_per_grant_frame * nr_grant_frames; | ||
772 | gnttab_free_count += extra_entries; | ||
773 | |||
774 | nr_grant_frames = new_nr_grant_frames; | ||
775 | @@ -799,7 +798,8 @@ EXPORT_SYMBOL_GPL(gnttab_unmap_refs); | ||
776 | |||
777 | static unsigned nr_status_frames(unsigned nr_grant_frames) | ||
778 | { | ||
779 | - return (nr_grant_frames * GREFS_PER_GRANT_FRAME + SPP - 1) / SPP; | ||
780 | + BUG_ON(grefs_per_grant_frame == 0); | ||
781 | + return (nr_grant_frames * grefs_per_grant_frame + SPP - 1) / SPP; | ||
782 | } | ||
783 | |||
784 | static int gnttab_map_frames_v1(unsigned long *frames, unsigned int nr_gframes) | ||
785 | @@ -957,6 +957,7 @@ static void gnttab_request_version(void) | ||
786 | rc = HYPERVISOR_grant_table_op(GNTTABOP_set_version, &gsv, 1); | ||
787 | if (rc == 0 && gsv.version == 2) { | ||
788 | grant_table_version = 2; | ||
789 | + grefs_per_grant_frame = PAGE_SIZE / sizeof(union grant_entry_v2); | ||
790 | gnttab_interface = &gnttab_v2_ops; | ||
791 | } else if (grant_table_version == 2) { | ||
792 | /* | ||
793 | @@ -969,17 +970,17 @@ static void gnttab_request_version(void) | ||
794 | panic("we need grant tables version 2, but only version 1 is available"); | ||
795 | } else { | ||
796 | grant_table_version = 1; | ||
797 | + grefs_per_grant_frame = PAGE_SIZE / sizeof(struct grant_entry_v1); | ||
798 | gnttab_interface = &gnttab_v1_ops; | ||
799 | } | ||
800 | printk(KERN_INFO "Grant tables using version %d layout.\n", | ||
801 | grant_table_version); | ||
802 | } | ||
803 | |||
804 | -int gnttab_resume(void) | ||
805 | +static int gnttab_setup(void) | ||
806 | { | ||
807 | unsigned int max_nr_gframes; | ||
808 | |||
809 | - gnttab_request_version(); | ||
810 | max_nr_gframes = gnttab_max_grant_frames(); | ||
811 | if (max_nr_gframes < nr_grant_frames) | ||
812 | return -ENOSYS; | ||
813 | @@ -1002,6 +1003,12 @@ int gnttab_resume(void) | ||
814 | return 0; | ||
815 | } | ||
816 | |||
817 | +int gnttab_resume(void) | ||
818 | +{ | ||
819 | + gnttab_request_version(); | ||
820 | + return gnttab_setup(); | ||
821 | +} | ||
822 | + | ||
823 | int gnttab_suspend(void) | ||
824 | { | ||
825 | gnttab_interface->unmap_frames(); | ||
826 | @@ -1013,9 +1020,10 @@ static int gnttab_expand(unsigned int req_entries) | ||
827 | int rc; | ||
828 | unsigned int cur, extra; | ||
829 | |||
830 | + BUG_ON(grefs_per_grant_frame == 0); | ||
831 | cur = nr_grant_frames; | ||
832 | - extra = ((req_entries + (GREFS_PER_GRANT_FRAME-1)) / | ||
833 | - GREFS_PER_GRANT_FRAME); | ||
834 | + extra = ((req_entries + (grefs_per_grant_frame-1)) / | ||
835 | + grefs_per_grant_frame); | ||
836 | if (cur + extra > gnttab_max_grant_frames()) | ||
837 | return -ENOSPC; | ||
838 | |||
839 | @@ -1033,21 +1041,23 @@ int gnttab_init(void) | ||
840 | unsigned int nr_init_grefs; | ||
841 | int ret; | ||
842 | |||
843 | + gnttab_request_version(); | ||
844 | nr_grant_frames = 1; | ||
845 | boot_max_nr_grant_frames = __max_nr_grant_frames(); | ||
846 | |||
847 | /* Determine the maximum number of frames required for the | ||
848 | * grant reference free list on the current hypervisor. | ||
849 | */ | ||
850 | + BUG_ON(grefs_per_grant_frame == 0); | ||
851 | max_nr_glist_frames = (boot_max_nr_grant_frames * | ||
852 | - GREFS_PER_GRANT_FRAME / RPP); | ||
853 | + grefs_per_grant_frame / RPP); | ||
854 | |||
855 | gnttab_list = kmalloc(max_nr_glist_frames * sizeof(grant_ref_t *), | ||
856 | GFP_KERNEL); | ||
857 | if (gnttab_list == NULL) | ||
858 | return -ENOMEM; | ||
859 | |||
860 | - nr_glist_frames = (nr_grant_frames * GREFS_PER_GRANT_FRAME + RPP - 1) / RPP; | ||
861 | + nr_glist_frames = (nr_grant_frames * grefs_per_grant_frame + RPP - 1) / RPP; | ||
862 | for (i = 0; i < nr_glist_frames; i++) { | ||
863 | gnttab_list[i] = (grant_ref_t *)__get_free_page(GFP_KERNEL); | ||
864 | if (gnttab_list[i] == NULL) { | ||
865 | @@ -1056,12 +1066,12 @@ int gnttab_init(void) | ||
866 | } | ||
867 | } | ||
868 | |||
869 | - if (gnttab_resume() < 0) { | ||
870 | + if (gnttab_setup() < 0) { | ||
871 | ret = -ENODEV; | ||
872 | goto ini_nomem; | ||
873 | } | ||
874 | |||
875 | - nr_init_grefs = nr_grant_frames * GREFS_PER_GRANT_FRAME; | ||
876 | + nr_init_grefs = nr_grant_frames * grefs_per_grant_frame; | ||
877 | |||
878 | for (i = NR_RESERVED_ENTRIES; i < nr_init_grefs - 1; i++) | ||
879 | gnttab_entry(i) = i + 1; | ||
880 | diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c | ||
881 | index dcd08e4..a0d7e26 100644 | ||
882 | --- a/fs/ext4/inode.c | ||
883 | +++ b/fs/ext4/inode.c | ||
884 | @@ -1424,6 +1424,8 @@ static void ext4_da_block_invalidatepages(struct mpage_da_data *mpd) | ||
885 | |||
886 | index = mpd->first_page; | ||
887 | end = mpd->next_page - 1; | ||
888 | + | ||
889 | + pagevec_init(&pvec, 0); | ||
890 | while (index <= end) { | ||
891 | nr_pages = pagevec_lookup(&pvec, mapping, index, PAGEVEC_SIZE); | ||
892 | if (nr_pages == 0) | ||
893 | diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h | ||
894 | index 3ad5b33..569c282 100644 | ||
895 | --- a/include/target/target_core_base.h | ||
896 | +++ b/include/target/target_core_base.h | ||
897 | @@ -779,6 +779,8 @@ struct se_subsystem_dev { | ||
898 | }; | ||
899 | |||
900 | struct se_device { | ||
901 | +#define SE_DEV_LINK_MAGIC 0xfeeddeef | ||
902 | + u32 dev_link_magic; | ||
903 | /* RELATIVE TARGET PORT IDENTIFER Counter */ | ||
904 | u16 dev_rpti_counter; | ||
905 | /* Used for SAM Task Attribute ordering */ | ||
906 | @@ -869,6 +871,8 @@ struct se_port_stat_grps { | ||
907 | }; | ||
908 | |||
909 | struct se_lun { | ||
910 | +#define SE_LUN_LINK_MAGIC 0xffff7771 | ||
911 | + u32 lun_link_magic; | ||
912 | /* See transport_lun_status_table */ | ||
913 | enum transport_lun_status_table lun_status; | ||
914 | u32 lun_access; | ||
915 | diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c | ||
916 | index 2781726..c46171a 100644 | ||
917 | --- a/sound/usb/quirks.c | ||
918 | +++ b/sound/usb/quirks.c | ||
919 | @@ -387,11 +387,13 @@ static int snd_usb_fasttrackpro_boot_quirk(struct usb_device *dev) | ||
920 | * rules | ||
921 | */ | ||
922 | err = usb_driver_set_configuration(dev, 2); | ||
923 | - if (err < 0) { | ||
924 | + if (err < 0) | ||
925 | snd_printdd("error usb_driver_set_configuration: %d\n", | ||
926 | err); | ||
927 | - return -ENODEV; | ||
928 | - } | ||
929 | + /* Always return an error, so that we stop creating a device | ||
930 | + that will just be destroyed and recreated with a new | ||
931 | + configuration */ | ||
932 | + return -ENODEV; | ||
933 | } else | ||
934 | snd_printk(KERN_INFO "usb-audio: Fast Track Pro config OK\n"); | ||
935 |