Magellan Linux

Contents of /trunk/kernel-alx/patches-3.10/0106-3.10.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2288 - (show annotations) (download)
Wed Sep 25 06:47:47 2013 UTC (10 years, 7 months ago) by niro
File size: 88691 byte(s)
-linux-3.10 patches
1 diff --git a/Makefile b/Makefile
2 index fd92ffb..33e36ab 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 10
8 -SUBLEVEL = 6
9 +SUBLEVEL = 7
10 EXTRAVERSION =
11 NAME = TOSSUG Baby Fish
12
13 diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
14 index 7a58ab9..e53e2b4 100644
15 --- a/arch/mips/Kconfig
16 +++ b/arch/mips/Kconfig
17 @@ -27,6 +27,7 @@ config MIPS
18 select HAVE_GENERIC_HARDIRQS
19 select GENERIC_IRQ_PROBE
20 select GENERIC_IRQ_SHOW
21 + select GENERIC_PCI_IOMAP
22 select HAVE_ARCH_JUMP_LABEL
23 select ARCH_WANT_IPC_PARSE_VERSION
24 select IRQ_FORCED_THREADING
25 @@ -2412,7 +2413,6 @@ config PCI
26 bool "Support for PCI controller"
27 depends on HW_HAS_PCI
28 select PCI_DOMAINS
29 - select GENERIC_PCI_IOMAP
30 select NO_GENERIC_PCI_IOPORT_MAP
31 help
32 Find out whether you have a PCI motherboard. PCI is the name of a
33 diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
34 index b7e5985..b84e1fb 100644
35 --- a/arch/mips/include/asm/io.h
36 +++ b/arch/mips/include/asm/io.h
37 @@ -170,6 +170,11 @@ static inline void * isa_bus_to_virt(unsigned long address)
38 extern void __iomem * __ioremap(phys_t offset, phys_t size, unsigned long flags);
39 extern void __iounmap(const volatile void __iomem *addr);
40
41 +#ifndef CONFIG_PCI
42 +struct pci_dev;
43 +static inline void pci_iounmap(struct pci_dev *dev, void __iomem *addr) {}
44 +#endif
45 +
46 static inline void __iomem * __ioremap_mode(phys_t offset, unsigned long size,
47 unsigned long flags)
48 {
49 diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
50 index c33e3ad..74991fe 100644
51 --- a/arch/powerpc/Kconfig
52 +++ b/arch/powerpc/Kconfig
53 @@ -572,7 +572,7 @@ config SCHED_SMT
54 config PPC_DENORMALISATION
55 bool "PowerPC denormalisation exception handling"
56 depends on PPC_BOOK3S_64
57 - default "n"
58 + default "y" if PPC_POWERNV
59 ---help---
60 Add support for handling denormalisation of single precision
61 values. Useful for bare metal only. If unsure say Y here.
62 diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h
63 index 14a6583..419e712 100644
64 --- a/arch/powerpc/include/asm/processor.h
65 +++ b/arch/powerpc/include/asm/processor.h
66 @@ -247,6 +247,10 @@ struct thread_struct {
67 unsigned long tm_orig_msr; /* Thread's MSR on ctx switch */
68 struct pt_regs ckpt_regs; /* Checkpointed registers */
69
70 + unsigned long tm_tar;
71 + unsigned long tm_ppr;
72 + unsigned long tm_dscr;
73 +
74 /*
75 * Transactional FP and VSX 0-31 register set.
76 * NOTE: the sense of these is the opposite of the integer ckpt_regs!
77 diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
78 index 362142b..e1fb161 100644
79 --- a/arch/powerpc/include/asm/reg.h
80 +++ b/arch/powerpc/include/asm/reg.h
81 @@ -254,19 +254,28 @@
82 #define SPRN_HRMOR 0x139 /* Real mode offset register */
83 #define SPRN_HSRR0 0x13A /* Hypervisor Save/Restore 0 */
84 #define SPRN_HSRR1 0x13B /* Hypervisor Save/Restore 1 */
85 +/* HFSCR and FSCR bit numbers are the same */
86 +#define FSCR_TAR_LG 8 /* Enable Target Address Register */
87 +#define FSCR_EBB_LG 7 /* Enable Event Based Branching */
88 +#define FSCR_TM_LG 5 /* Enable Transactional Memory */
89 +#define FSCR_PM_LG 4 /* Enable prob/priv access to PMU SPRs */
90 +#define FSCR_BHRB_LG 3 /* Enable Branch History Rolling Buffer*/
91 +#define FSCR_DSCR_LG 2 /* Enable Data Stream Control Register */
92 +#define FSCR_VECVSX_LG 1 /* Enable VMX/VSX */
93 +#define FSCR_FP_LG 0 /* Enable Floating Point */
94 #define SPRN_FSCR 0x099 /* Facility Status & Control Register */
95 -#define FSCR_TAR (1 << (63-55)) /* Enable Target Address Register */
96 -#define FSCR_EBB (1 << (63-56)) /* Enable Event Based Branching */
97 -#define FSCR_DSCR (1 << (63-61)) /* Enable Data Stream Control Register */
98 +#define FSCR_TAR __MASK(FSCR_TAR_LG)
99 +#define FSCR_EBB __MASK(FSCR_EBB_LG)
100 +#define FSCR_DSCR __MASK(FSCR_DSCR_LG)
101 #define SPRN_HFSCR 0xbe /* HV=1 Facility Status & Control Register */
102 -#define HFSCR_TAR (1 << (63-55)) /* Enable Target Address Register */
103 -#define HFSCR_EBB (1 << (63-56)) /* Enable Event Based Branching */
104 -#define HFSCR_TM (1 << (63-58)) /* Enable Transactional Memory */
105 -#define HFSCR_PM (1 << (63-60)) /* Enable prob/priv access to PMU SPRs */
106 -#define HFSCR_BHRB (1 << (63-59)) /* Enable Branch History Rolling Buffer*/
107 -#define HFSCR_DSCR (1 << (63-61)) /* Enable Data Stream Control Register */
108 -#define HFSCR_VECVSX (1 << (63-62)) /* Enable VMX/VSX */
109 -#define HFSCR_FP (1 << (63-63)) /* Enable Floating Point */
110 +#define HFSCR_TAR __MASK(FSCR_TAR_LG)
111 +#define HFSCR_EBB __MASK(FSCR_EBB_LG)
112 +#define HFSCR_TM __MASK(FSCR_TM_LG)
113 +#define HFSCR_PM __MASK(FSCR_PM_LG)
114 +#define HFSCR_BHRB __MASK(FSCR_BHRB_LG)
115 +#define HFSCR_DSCR __MASK(FSCR_DSCR_LG)
116 +#define HFSCR_VECVSX __MASK(FSCR_VECVSX_LG)
117 +#define HFSCR_FP __MASK(FSCR_FP_LG)
118 #define SPRN_TAR 0x32f /* Target Address Register */
119 #define SPRN_LPCR 0x13E /* LPAR Control Register */
120 #define LPCR_VPM0 (1ul << (63-0))
121 diff --git a/arch/powerpc/include/asm/switch_to.h b/arch/powerpc/include/asm/switch_to.h
122 index 200d763..685ecc8 100644
123 --- a/arch/powerpc/include/asm/switch_to.h
124 +++ b/arch/powerpc/include/asm/switch_to.h
125 @@ -15,6 +15,15 @@ extern struct task_struct *__switch_to(struct task_struct *,
126 struct thread_struct;
127 extern struct task_struct *_switch(struct thread_struct *prev,
128 struct thread_struct *next);
129 +#ifdef CONFIG_PPC_BOOK3S_64
130 +static inline void save_tar(struct thread_struct *prev)
131 +{
132 + if (cpu_has_feature(CPU_FTR_ARCH_207S))
133 + prev->tar = mfspr(SPRN_TAR);
134 +}
135 +#else
136 +static inline void save_tar(struct thread_struct *prev) {}
137 +#endif
138
139 extern void giveup_fpu(struct task_struct *);
140 extern void load_up_fpu(void);
141 diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
142 index 6f16ffa..302886b 100644
143 --- a/arch/powerpc/kernel/asm-offsets.c
144 +++ b/arch/powerpc/kernel/asm-offsets.c
145 @@ -139,6 +139,9 @@ int main(void)
146 DEFINE(THREAD_TM_TFHAR, offsetof(struct thread_struct, tm_tfhar));
147 DEFINE(THREAD_TM_TEXASR, offsetof(struct thread_struct, tm_texasr));
148 DEFINE(THREAD_TM_TFIAR, offsetof(struct thread_struct, tm_tfiar));
149 + DEFINE(THREAD_TM_TAR, offsetof(struct thread_struct, tm_tar));
150 + DEFINE(THREAD_TM_PPR, offsetof(struct thread_struct, tm_ppr));
151 + DEFINE(THREAD_TM_DSCR, offsetof(struct thread_struct, tm_dscr));
152 DEFINE(PT_CKPT_REGS, offsetof(struct thread_struct, ckpt_regs));
153 DEFINE(THREAD_TRANSACT_VR0, offsetof(struct thread_struct,
154 transact_vr[0]));
155 diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
156 index 8741c85..38847767 100644
157 --- a/arch/powerpc/kernel/entry_64.S
158 +++ b/arch/powerpc/kernel/entry_64.S
159 @@ -449,15 +449,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_DSCR)
160
161 #ifdef CONFIG_PPC_BOOK3S_64
162 BEGIN_FTR_SECTION
163 - /*
164 - * Back up the TAR across context switches. Note that the TAR is not
165 - * available for use in the kernel. (To provide this, the TAR should
166 - * be backed up/restored on exception entry/exit instead, and be in
167 - * pt_regs. FIXME, this should be in pt_regs anyway (for debug).)
168 - */
169 - mfspr r0,SPRN_TAR
170 - std r0,THREAD_TAR(r3)
171 -
172 /* Event based branch registers */
173 mfspr r0, SPRN_BESCR
174 std r0, THREAD_BESCR(r3)
175 @@ -584,9 +575,34 @@ BEGIN_FTR_SECTION
176 ld r7,DSCR_DEFAULT@toc(2)
177 ld r0,THREAD_DSCR(r4)
178 cmpwi r6,0
179 + li r8, FSCR_DSCR
180 bne 1f
181 ld r0,0(r7)
182 -1: cmpd r0,r25
183 + b 3f
184 +1:
185 + BEGIN_FTR_SECTION_NESTED(70)
186 + mfspr r6, SPRN_FSCR
187 + or r6, r6, r8
188 + mtspr SPRN_FSCR, r6
189 + BEGIN_FTR_SECTION_NESTED(69)
190 + mfspr r6, SPRN_HFSCR
191 + or r6, r6, r8
192 + mtspr SPRN_HFSCR, r6
193 + END_FTR_SECTION_NESTED(CPU_FTR_HVMODE, CPU_FTR_HVMODE, 69)
194 + b 4f
195 + END_FTR_SECTION_NESTED(CPU_FTR_ARCH_207S, CPU_FTR_ARCH_207S, 70)
196 +3:
197 + BEGIN_FTR_SECTION_NESTED(70)
198 + mfspr r6, SPRN_FSCR
199 + andc r6, r6, r8
200 + mtspr SPRN_FSCR, r6
201 + BEGIN_FTR_SECTION_NESTED(69)
202 + mfspr r6, SPRN_HFSCR
203 + andc r6, r6, r8
204 + mtspr SPRN_HFSCR, r6
205 + END_FTR_SECTION_NESTED(CPU_FTR_HVMODE, CPU_FTR_HVMODE, 69)
206 + END_FTR_SECTION_NESTED(CPU_FTR_ARCH_207S, CPU_FTR_ARCH_207S, 70)
207 +4: cmpd r0,r25
208 beq 2f
209 mtspr SPRN_DSCR,r0
210 2:
211 diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
212 index 4e00d22..902ca3c 100644
213 --- a/arch/powerpc/kernel/exceptions-64s.S
214 +++ b/arch/powerpc/kernel/exceptions-64s.S
215 @@ -848,7 +848,7 @@ hv_facility_unavailable_relon_trampoline:
216 . = 0x4f80
217 SET_SCRATCH0(r13)
218 EXCEPTION_PROLOG_0(PACA_EXGEN)
219 - b facility_unavailable_relon_hv
220 + b hv_facility_unavailable_relon_hv
221
222 STD_RELON_EXCEPTION_PSERIES(0x5300, 0x1300, instruction_breakpoint)
223 #ifdef CONFIG_PPC_DENORMALISATION
224 @@ -1175,6 +1175,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX)
225 b .ret_from_except
226
227 STD_EXCEPTION_COMMON(0xf60, facility_unavailable, .facility_unavailable_exception)
228 + STD_EXCEPTION_COMMON(0xf80, hv_facility_unavailable, .facility_unavailable_exception)
229
230 .align 7
231 .globl __end_handlers
232 @@ -1188,7 +1189,7 @@ __end_handlers:
233 STD_RELON_EXCEPTION_PSERIES_OOL(0xf20, altivec_unavailable)
234 STD_RELON_EXCEPTION_PSERIES_OOL(0xf40, vsx_unavailable)
235 STD_RELON_EXCEPTION_PSERIES_OOL(0xf60, facility_unavailable)
236 - STD_RELON_EXCEPTION_HV_OOL(0xf80, facility_unavailable)
237 + STD_RELON_EXCEPTION_HV_OOL(0xf80, hv_facility_unavailable)
238
239 #if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV)
240 /*
241 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
242 index 076d124..7baa27b 100644
243 --- a/arch/powerpc/kernel/process.c
244 +++ b/arch/powerpc/kernel/process.c
245 @@ -600,6 +600,16 @@ struct task_struct *__switch_to(struct task_struct *prev,
246 struct ppc64_tlb_batch *batch;
247 #endif
248
249 + /* Back up the TAR across context switches.
250 + * Note that the TAR is not available for use in the kernel. (To
251 + * provide this, the TAR should be backed up/restored on exception
252 + * entry/exit instead, and be in pt_regs. FIXME, this should be in
253 + * pt_regs anyway (for debug).)
254 + * Save the TAR here before we do treclaim/trecheckpoint as these
255 + * will change the TAR.
256 + */
257 + save_tar(&prev->thread);
258 +
259 __switch_to_tm(prev);
260
261 #ifdef CONFIG_SMP
262 diff --git a/arch/powerpc/kernel/tm.S b/arch/powerpc/kernel/tm.S
263 index 2da67e7..1edd6c2 100644
264 --- a/arch/powerpc/kernel/tm.S
265 +++ b/arch/powerpc/kernel/tm.S
266 @@ -224,6 +224,16 @@ dont_backup_fp:
267 std r5, _CCR(r7)
268 std r6, _XER(r7)
269
270 +
271 + /* ******************** TAR, PPR, DSCR ********** */
272 + mfspr r3, SPRN_TAR
273 + mfspr r4, SPRN_PPR
274 + mfspr r5, SPRN_DSCR
275 +
276 + std r3, THREAD_TM_TAR(r12)
277 + std r4, THREAD_TM_PPR(r12)
278 + std r5, THREAD_TM_DSCR(r12)
279 +
280 /* MSR and flags: We don't change CRs, and we don't need to alter
281 * MSR.
282 */
283 @@ -338,6 +348,16 @@ dont_restore_fp:
284 mtmsr r6 /* FP/Vec off again! */
285
286 restore_gprs:
287 +
288 + /* ******************** TAR, PPR, DSCR ********** */
289 + ld r4, THREAD_TM_TAR(r3)
290 + ld r5, THREAD_TM_PPR(r3)
291 + ld r6, THREAD_TM_DSCR(r3)
292 +
293 + mtspr SPRN_TAR, r4
294 + mtspr SPRN_PPR, r5
295 + mtspr SPRN_DSCR, r6
296 +
297 /* ******************** CR,LR,CCR,MSR ********** */
298 ld r3, _CTR(r7)
299 ld r4, _LINK(r7)
300 diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
301 index e4f205a..88929b1 100644
302 --- a/arch/powerpc/kernel/traps.c
303 +++ b/arch/powerpc/kernel/traps.c
304 @@ -44,9 +44,7 @@
305 #include <asm/machdep.h>
306 #include <asm/rtas.h>
307 #include <asm/pmc.h>
308 -#ifdef CONFIG_PPC32
309 #include <asm/reg.h>
310 -#endif
311 #ifdef CONFIG_PMAC_BACKLIGHT
312 #include <asm/backlight.h>
313 #endif
314 @@ -1282,43 +1280,54 @@ void vsx_unavailable_exception(struct pt_regs *regs)
315 die("Unrecoverable VSX Unavailable Exception", regs, SIGABRT);
316 }
317
318 +#ifdef CONFIG_PPC64
319 void facility_unavailable_exception(struct pt_regs *regs)
320 {
321 static char *facility_strings[] = {
322 - "FPU",
323 - "VMX/VSX",
324 - "DSCR",
325 - "PMU SPRs",
326 - "BHRB",
327 - "TM",
328 - "AT",
329 - "EBB",
330 - "TAR",
331 + [FSCR_FP_LG] = "FPU",
332 + [FSCR_VECVSX_LG] = "VMX/VSX",
333 + [FSCR_DSCR_LG] = "DSCR",
334 + [FSCR_PM_LG] = "PMU SPRs",
335 + [FSCR_BHRB_LG] = "BHRB",
336 + [FSCR_TM_LG] = "TM",
337 + [FSCR_EBB_LG] = "EBB",
338 + [FSCR_TAR_LG] = "TAR",
339 };
340 - char *facility, *prefix;
341 + char *facility = "unknown";
342 u64 value;
343 + u8 status;
344 + bool hv;
345
346 - if (regs->trap == 0xf60) {
347 - value = mfspr(SPRN_FSCR);
348 - prefix = "";
349 - } else {
350 + hv = (regs->trap == 0xf80);
351 + if (hv)
352 value = mfspr(SPRN_HFSCR);
353 - prefix = "Hypervisor ";
354 + else
355 + value = mfspr(SPRN_FSCR);
356 +
357 + status = value >> 56;
358 + if (status == FSCR_DSCR_LG) {
359 + /* User is acessing the DSCR. Set the inherit bit and allow
360 + * the user to set it directly in future by setting via the
361 + * H/FSCR DSCR bit.
362 + */
363 + current->thread.dscr_inherit = 1;
364 + if (hv)
365 + mtspr(SPRN_HFSCR, value | HFSCR_DSCR);
366 + else
367 + mtspr(SPRN_FSCR, value | FSCR_DSCR);
368 + return;
369 }
370
371 - value = value >> 56;
372 + if ((status < ARRAY_SIZE(facility_strings)) &&
373 + facility_strings[status])
374 + facility = facility_strings[status];
375
376 /* We restore the interrupt state now */
377 if (!arch_irq_disabled_regs(regs))
378 local_irq_enable();
379
380 - if (value < ARRAY_SIZE(facility_strings))
381 - facility = facility_strings[value];
382 - else
383 - facility = "unknown";
384 -
385 pr_err("%sFacility '%s' unavailable, exception at 0x%lx, MSR=%lx\n",
386 - prefix, facility, regs->nip, regs->msr);
387 + hv ? "Hypervisor " : "", facility, regs->nip, regs->msr);
388
389 if (user_mode(regs)) {
390 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);
391 @@ -1327,6 +1336,7 @@ void facility_unavailable_exception(struct pt_regs *regs)
392
393 die("Unexpected facility unavailable exception", regs, SIGABRT);
394 }
395 +#endif
396
397 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
398
399 diff --git a/drivers/acpi/proc.c b/drivers/acpi/proc.c
400 index aa1227a..04a1378 100644
401 --- a/drivers/acpi/proc.c
402 +++ b/drivers/acpi/proc.c
403 @@ -311,6 +311,8 @@ acpi_system_wakeup_device_seq_show(struct seq_file *seq, void *offset)
404 dev->pnp.bus_id,
405 (u32) dev->wakeup.sleep_state);
406
407 + mutex_lock(&dev->physical_node_lock);
408 +
409 if (!dev->physical_node_count) {
410 seq_printf(seq, "%c%-8s\n",
411 dev->wakeup.flags.run_wake ? '*' : ' ',
412 @@ -338,6 +340,8 @@ acpi_system_wakeup_device_seq_show(struct seq_file *seq, void *offset)
413 put_device(ldev);
414 }
415 }
416 +
417 + mutex_unlock(&dev->physical_node_lock);
418 }
419 mutex_unlock(&acpi_device_lock);
420 return 0;
421 @@ -347,12 +351,16 @@ static void physical_device_enable_wakeup(struct acpi_device *adev)
422 {
423 struct acpi_device_physical_node *entry;
424
425 + mutex_lock(&adev->physical_node_lock);
426 +
427 list_for_each_entry(entry,
428 &adev->physical_node_list, node)
429 if (entry->dev && device_can_wakeup(entry->dev)) {
430 bool enable = !device_may_wakeup(entry->dev);
431 device_set_wakeup_enable(entry->dev, enable);
432 }
433 +
434 + mutex_unlock(&adev->physical_node_lock);
435 }
436
437 static ssize_t
438 diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
439 index 507ee2d..46283fd 100644
440 --- a/drivers/base/regmap/regcache.c
441 +++ b/drivers/base/regmap/regcache.c
442 @@ -644,7 +644,8 @@ static int regcache_sync_block_raw(struct regmap *map, void *block,
443 }
444 }
445
446 - return regcache_sync_block_raw_flush(map, &data, base, regtmp);
447 + return regcache_sync_block_raw_flush(map, &data, base, regtmp +
448 + map->reg_stride);
449 }
450
451 int regcache_sync_block(struct regmap *map, void *block,
452 diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
453 index 1b456fe..fc45567 100644
454 --- a/drivers/char/virtio_console.c
455 +++ b/drivers/char/virtio_console.c
456 @@ -272,9 +272,12 @@ static struct port *find_port_by_devt_in_portdev(struct ports_device *portdev,
457 unsigned long flags;
458
459 spin_lock_irqsave(&portdev->ports_lock, flags);
460 - list_for_each_entry(port, &portdev->ports, list)
461 - if (port->cdev->dev == dev)
462 + list_for_each_entry(port, &portdev->ports, list) {
463 + if (port->cdev->dev == dev) {
464 + kref_get(&port->kref);
465 goto out;
466 + }
467 + }
468 port = NULL;
469 out:
470 spin_unlock_irqrestore(&portdev->ports_lock, flags);
471 @@ -746,6 +749,10 @@ static ssize_t port_fops_read(struct file *filp, char __user *ubuf,
472
473 port = filp->private_data;
474
475 + /* Port is hot-unplugged. */
476 + if (!port->guest_connected)
477 + return -ENODEV;
478 +
479 if (!port_has_data(port)) {
480 /*
481 * If nothing's connected on the host just return 0 in
482 @@ -762,7 +769,7 @@ static ssize_t port_fops_read(struct file *filp, char __user *ubuf,
483 if (ret < 0)
484 return ret;
485 }
486 - /* Port got hot-unplugged. */
487 + /* Port got hot-unplugged while we were waiting above. */
488 if (!port->guest_connected)
489 return -ENODEV;
490 /*
491 @@ -932,13 +939,25 @@ static ssize_t port_fops_splice_write(struct pipe_inode_info *pipe,
492 if (is_rproc_serial(port->out_vq->vdev))
493 return -EINVAL;
494
495 + /*
496 + * pipe->nrbufs == 0 means there are no data to transfer,
497 + * so this returns just 0 for no data.
498 + */
499 + pipe_lock(pipe);
500 + if (!pipe->nrbufs) {
501 + ret = 0;
502 + goto error_out;
503 + }
504 +
505 ret = wait_port_writable(port, filp->f_flags & O_NONBLOCK);
506 if (ret < 0)
507 - return ret;
508 + goto error_out;
509
510 buf = alloc_buf(port->out_vq, 0, pipe->nrbufs);
511 - if (!buf)
512 - return -ENOMEM;
513 + if (!buf) {
514 + ret = -ENOMEM;
515 + goto error_out;
516 + }
517
518 sgl.n = 0;
519 sgl.len = 0;
520 @@ -946,12 +965,17 @@ static ssize_t port_fops_splice_write(struct pipe_inode_info *pipe,
521 sgl.sg = buf->sg;
522 sg_init_table(sgl.sg, sgl.size);
523 ret = __splice_from_pipe(pipe, &sd, pipe_to_sg);
524 + pipe_unlock(pipe);
525 if (likely(ret > 0))
526 ret = __send_to_port(port, buf->sg, sgl.n, sgl.len, buf, true);
527
528 if (unlikely(ret <= 0))
529 free_buf(buf, true);
530 return ret;
531 +
532 +error_out:
533 + pipe_unlock(pipe);
534 + return ret;
535 }
536
537 static unsigned int port_fops_poll(struct file *filp, poll_table *wait)
538 @@ -1019,14 +1043,14 @@ static int port_fops_open(struct inode *inode, struct file *filp)
539 struct port *port;
540 int ret;
541
542 + /* We get the port with a kref here */
543 port = find_port_by_devt(cdev->dev);
544 + if (!port) {
545 + /* Port was unplugged before we could proceed */
546 + return -ENXIO;
547 + }
548 filp->private_data = port;
549
550 - /* Prevent against a port getting hot-unplugged at the same time */
551 - spin_lock_irq(&port->portdev->ports_lock);
552 - kref_get(&port->kref);
553 - spin_unlock_irq(&port->portdev->ports_lock);
554 -
555 /*
556 * Don't allow opening of console port devices -- that's done
557 * via /dev/hvc
558 @@ -1498,14 +1522,6 @@ static void remove_port(struct kref *kref)
559
560 port = container_of(kref, struct port, kref);
561
562 - sysfs_remove_group(&port->dev->kobj, &port_attribute_group);
563 - device_destroy(pdrvdata.class, port->dev->devt);
564 - cdev_del(port->cdev);
565 -
566 - kfree(port->name);
567 -
568 - debugfs_remove(port->debugfs_file);
569 -
570 kfree(port);
571 }
572
573 @@ -1539,12 +1555,14 @@ static void unplug_port(struct port *port)
574 spin_unlock_irq(&port->portdev->ports_lock);
575
576 if (port->guest_connected) {
577 + /* Let the app know the port is going down. */
578 + send_sigio_to_port(port);
579 +
580 + /* Do this after sigio is actually sent */
581 port->guest_connected = false;
582 port->host_connected = false;
583 - wake_up_interruptible(&port->waitqueue);
584
585 - /* Let the app know the port is going down. */
586 - send_sigio_to_port(port);
587 + wake_up_interruptible(&port->waitqueue);
588 }
589
590 if (is_console_port(port)) {
591 @@ -1563,6 +1581,14 @@ static void unplug_port(struct port *port)
592 */
593 port->portdev = NULL;
594
595 + sysfs_remove_group(&port->dev->kobj, &port_attribute_group);
596 + device_destroy(pdrvdata.class, port->dev->devt);
597 + cdev_del(port->cdev);
598 +
599 + kfree(port->name);
600 +
601 + debugfs_remove(port->debugfs_file);
602 +
603 /*
604 * Locks around here are not necessary - a port can't be
605 * opened after we removed the port struct from ports_list
606 diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
607 index 0ceb2ef..f97cb3d 100644
608 --- a/drivers/cpufreq/cpufreq_conservative.c
609 +++ b/drivers/cpufreq/cpufreq_conservative.c
610 @@ -221,8 +221,8 @@ static ssize_t store_down_threshold(struct dbs_data *dbs_data, const char *buf,
611 return count;
612 }
613
614 -static ssize_t store_ignore_nice(struct dbs_data *dbs_data, const char *buf,
615 - size_t count)
616 +static ssize_t store_ignore_nice_load(struct dbs_data *dbs_data,
617 + const char *buf, size_t count)
618 {
619 struct cs_dbs_tuners *cs_tuners = dbs_data->tuners;
620 unsigned int input, j;
621 @@ -235,10 +235,10 @@ static ssize_t store_ignore_nice(struct dbs_data *dbs_data, const char *buf,
622 if (input > 1)
623 input = 1;
624
625 - if (input == cs_tuners->ignore_nice) /* nothing to do */
626 + if (input == cs_tuners->ignore_nice_load) /* nothing to do */
627 return count;
628
629 - cs_tuners->ignore_nice = input;
630 + cs_tuners->ignore_nice_load = input;
631
632 /* we need to re-evaluate prev_cpu_idle */
633 for_each_online_cpu(j) {
634 @@ -246,7 +246,7 @@ static ssize_t store_ignore_nice(struct dbs_data *dbs_data, const char *buf,
635 dbs_info = &per_cpu(cs_cpu_dbs_info, j);
636 dbs_info->cdbs.prev_cpu_idle = get_cpu_idle_time(j,
637 &dbs_info->cdbs.prev_cpu_wall, 0);
638 - if (cs_tuners->ignore_nice)
639 + if (cs_tuners->ignore_nice_load)
640 dbs_info->cdbs.prev_cpu_nice =
641 kcpustat_cpu(j).cpustat[CPUTIME_NICE];
642 }
643 @@ -279,7 +279,7 @@ show_store_one(cs, sampling_rate);
644 show_store_one(cs, sampling_down_factor);
645 show_store_one(cs, up_threshold);
646 show_store_one(cs, down_threshold);
647 -show_store_one(cs, ignore_nice);
648 +show_store_one(cs, ignore_nice_load);
649 show_store_one(cs, freq_step);
650 declare_show_sampling_rate_min(cs);
651
652 @@ -287,7 +287,7 @@ gov_sys_pol_attr_rw(sampling_rate);
653 gov_sys_pol_attr_rw(sampling_down_factor);
654 gov_sys_pol_attr_rw(up_threshold);
655 gov_sys_pol_attr_rw(down_threshold);
656 -gov_sys_pol_attr_rw(ignore_nice);
657 +gov_sys_pol_attr_rw(ignore_nice_load);
658 gov_sys_pol_attr_rw(freq_step);
659 gov_sys_pol_attr_ro(sampling_rate_min);
660
661 @@ -297,7 +297,7 @@ static struct attribute *dbs_attributes_gov_sys[] = {
662 &sampling_down_factor_gov_sys.attr,
663 &up_threshold_gov_sys.attr,
664 &down_threshold_gov_sys.attr,
665 - &ignore_nice_gov_sys.attr,
666 + &ignore_nice_load_gov_sys.attr,
667 &freq_step_gov_sys.attr,
668 NULL
669 };
670 @@ -313,7 +313,7 @@ static struct attribute *dbs_attributes_gov_pol[] = {
671 &sampling_down_factor_gov_pol.attr,
672 &up_threshold_gov_pol.attr,
673 &down_threshold_gov_pol.attr,
674 - &ignore_nice_gov_pol.attr,
675 + &ignore_nice_load_gov_pol.attr,
676 &freq_step_gov_pol.attr,
677 NULL
678 };
679 @@ -338,7 +338,7 @@ static int cs_init(struct dbs_data *dbs_data)
680 tuners->up_threshold = DEF_FREQUENCY_UP_THRESHOLD;
681 tuners->down_threshold = DEF_FREQUENCY_DOWN_THRESHOLD;
682 tuners->sampling_down_factor = DEF_SAMPLING_DOWN_FACTOR;
683 - tuners->ignore_nice = 0;
684 + tuners->ignore_nice_load = 0;
685 tuners->freq_step = DEF_FREQUENCY_STEP;
686
687 dbs_data->tuners = tuners;
688 diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
689 index 5af40ad..a86ff72 100644
690 --- a/drivers/cpufreq/cpufreq_governor.c
691 +++ b/drivers/cpufreq/cpufreq_governor.c
692 @@ -91,9 +91,9 @@ void dbs_check_cpu(struct dbs_data *dbs_data, int cpu)
693 unsigned int j;
694
695 if (dbs_data->cdata->governor == GOV_ONDEMAND)
696 - ignore_nice = od_tuners->ignore_nice;
697 + ignore_nice = od_tuners->ignore_nice_load;
698 else
699 - ignore_nice = cs_tuners->ignore_nice;
700 + ignore_nice = cs_tuners->ignore_nice_load;
701
702 policy = cdbs->cur_policy;
703
704 @@ -336,12 +336,12 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy,
705 cs_tuners = dbs_data->tuners;
706 cs_dbs_info = dbs_data->cdata->get_cpu_dbs_info_s(cpu);
707 sampling_rate = cs_tuners->sampling_rate;
708 - ignore_nice = cs_tuners->ignore_nice;
709 + ignore_nice = cs_tuners->ignore_nice_load;
710 } else {
711 od_tuners = dbs_data->tuners;
712 od_dbs_info = dbs_data->cdata->get_cpu_dbs_info_s(cpu);
713 sampling_rate = od_tuners->sampling_rate;
714 - ignore_nice = od_tuners->ignore_nice;
715 + ignore_nice = od_tuners->ignore_nice_load;
716 od_ops = dbs_data->cdata->gov_ops;
717 io_busy = od_tuners->io_is_busy;
718 }
719 diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_governor.h
720 index e16a961..0d9e6be 100644
721 --- a/drivers/cpufreq/cpufreq_governor.h
722 +++ b/drivers/cpufreq/cpufreq_governor.h
723 @@ -165,7 +165,7 @@ struct cs_cpu_dbs_info_s {
724
725 /* Per policy Governers sysfs tunables */
726 struct od_dbs_tuners {
727 - unsigned int ignore_nice;
728 + unsigned int ignore_nice_load;
729 unsigned int sampling_rate;
730 unsigned int sampling_down_factor;
731 unsigned int up_threshold;
732 @@ -175,7 +175,7 @@ struct od_dbs_tuners {
733 };
734
735 struct cs_dbs_tuners {
736 - unsigned int ignore_nice;
737 + unsigned int ignore_nice_load;
738 unsigned int sampling_rate;
739 unsigned int sampling_down_factor;
740 unsigned int up_threshold;
741 diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
742 index 93eb5cb..c087347 100644
743 --- a/drivers/cpufreq/cpufreq_ondemand.c
744 +++ b/drivers/cpufreq/cpufreq_ondemand.c
745 @@ -403,8 +403,8 @@ static ssize_t store_sampling_down_factor(struct dbs_data *dbs_data,
746 return count;
747 }
748
749 -static ssize_t store_ignore_nice(struct dbs_data *dbs_data, const char *buf,
750 - size_t count)
751 +static ssize_t store_ignore_nice_load(struct dbs_data *dbs_data,
752 + const char *buf, size_t count)
753 {
754 struct od_dbs_tuners *od_tuners = dbs_data->tuners;
755 unsigned int input;
756 @@ -419,10 +419,10 @@ static ssize_t store_ignore_nice(struct dbs_data *dbs_data, const char *buf,
757 if (input > 1)
758 input = 1;
759
760 - if (input == od_tuners->ignore_nice) { /* nothing to do */
761 + if (input == od_tuners->ignore_nice_load) { /* nothing to do */
762 return count;
763 }
764 - od_tuners->ignore_nice = input;
765 + od_tuners->ignore_nice_load = input;
766
767 /* we need to re-evaluate prev_cpu_idle */
768 for_each_online_cpu(j) {
769 @@ -430,7 +430,7 @@ static ssize_t store_ignore_nice(struct dbs_data *dbs_data, const char *buf,
770 dbs_info = &per_cpu(od_cpu_dbs_info, j);
771 dbs_info->cdbs.prev_cpu_idle = get_cpu_idle_time(j,
772 &dbs_info->cdbs.prev_cpu_wall, od_tuners->io_is_busy);
773 - if (od_tuners->ignore_nice)
774 + if (od_tuners->ignore_nice_load)
775 dbs_info->cdbs.prev_cpu_nice =
776 kcpustat_cpu(j).cpustat[CPUTIME_NICE];
777
778 @@ -461,7 +461,7 @@ show_store_one(od, sampling_rate);
779 show_store_one(od, io_is_busy);
780 show_store_one(od, up_threshold);
781 show_store_one(od, sampling_down_factor);
782 -show_store_one(od, ignore_nice);
783 +show_store_one(od, ignore_nice_load);
784 show_store_one(od, powersave_bias);
785 declare_show_sampling_rate_min(od);
786
787 @@ -469,7 +469,7 @@ gov_sys_pol_attr_rw(sampling_rate);
788 gov_sys_pol_attr_rw(io_is_busy);
789 gov_sys_pol_attr_rw(up_threshold);
790 gov_sys_pol_attr_rw(sampling_down_factor);
791 -gov_sys_pol_attr_rw(ignore_nice);
792 +gov_sys_pol_attr_rw(ignore_nice_load);
793 gov_sys_pol_attr_rw(powersave_bias);
794 gov_sys_pol_attr_ro(sampling_rate_min);
795
796 @@ -478,7 +478,7 @@ static struct attribute *dbs_attributes_gov_sys[] = {
797 &sampling_rate_gov_sys.attr,
798 &up_threshold_gov_sys.attr,
799 &sampling_down_factor_gov_sys.attr,
800 - &ignore_nice_gov_sys.attr,
801 + &ignore_nice_load_gov_sys.attr,
802 &powersave_bias_gov_sys.attr,
803 &io_is_busy_gov_sys.attr,
804 NULL
805 @@ -494,7 +494,7 @@ static struct attribute *dbs_attributes_gov_pol[] = {
806 &sampling_rate_gov_pol.attr,
807 &up_threshold_gov_pol.attr,
808 &sampling_down_factor_gov_pol.attr,
809 - &ignore_nice_gov_pol.attr,
810 + &ignore_nice_load_gov_pol.attr,
811 &powersave_bias_gov_pol.attr,
812 &io_is_busy_gov_pol.attr,
813 NULL
814 @@ -544,7 +544,7 @@ static int od_init(struct dbs_data *dbs_data)
815 }
816
817 tuners->sampling_down_factor = DEF_SAMPLING_DOWN_FACTOR;
818 - tuners->ignore_nice = 0;
819 + tuners->ignore_nice_load = 0;
820 tuners->powersave_bias = default_powersave_bias;
821 tuners->io_is_busy = should_io_be_busy();
822
823 diff --git a/drivers/cpufreq/loongson2_cpufreq.c b/drivers/cpufreq/loongson2_cpufreq.c
824 index d539127..f92b02a 100644
825 --- a/drivers/cpufreq/loongson2_cpufreq.c
826 +++ b/drivers/cpufreq/loongson2_cpufreq.c
827 @@ -118,11 +118,6 @@ static int loongson2_cpufreq_cpu_init(struct cpufreq_policy *policy)
828 clk_put(cpuclk);
829 return -EINVAL;
830 }
831 - ret = clk_set_rate(cpuclk, rate);
832 - if (ret) {
833 - clk_put(cpuclk);
834 - return ret;
835 - }
836
837 /* clock table init */
838 for (i = 2;
839 @@ -130,6 +125,12 @@ static int loongson2_cpufreq_cpu_init(struct cpufreq_policy *policy)
840 i++)
841 loongson2_clockmod_table[i].frequency = (rate * i) / 8;
842
843 + ret = clk_set_rate(cpuclk, rate);
844 + if (ret) {
845 + clk_put(cpuclk);
846 + return ret;
847 + }
848 +
849 policy->cur = loongson2_cpufreq_get(policy->cpu);
850
851 cpufreq_frequency_table_get_attr(&loongson2_clockmod_table[0],
852 diff --git a/drivers/gpu/drm/ast/ast_ttm.c b/drivers/gpu/drm/ast/ast_ttm.c
853 index 09da339..d5902e2 100644
854 --- a/drivers/gpu/drm/ast/ast_ttm.c
855 +++ b/drivers/gpu/drm/ast/ast_ttm.c
856 @@ -348,6 +348,7 @@ int ast_bo_create(struct drm_device *dev, int size, int align,
857
858 astbo->gem.driver_private = NULL;
859 astbo->bo.bdev = &ast->ttm.bdev;
860 + astbo->bo.bdev->dev_mapping = dev->dev_mapping;
861
862 ast_ttm_placement(astbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM);
863
864 diff --git a/drivers/gpu/drm/cirrus/cirrus_ttm.c b/drivers/gpu/drm/cirrus/cirrus_ttm.c
865 index 2ed8cfc..c18faff 100644
866 --- a/drivers/gpu/drm/cirrus/cirrus_ttm.c
867 +++ b/drivers/gpu/drm/cirrus/cirrus_ttm.c
868 @@ -353,6 +353,7 @@ int cirrus_bo_create(struct drm_device *dev, int size, int align,
869
870 cirrusbo->gem.driver_private = NULL;
871 cirrusbo->bo.bdev = &cirrus->ttm.bdev;
872 + cirrusbo->bo.bdev->dev_mapping = dev->dev_mapping;
873
874 cirrus_ttm_placement(cirrusbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM);
875
876 diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
877 index 8bcce78..f92da0a 100644
878 --- a/drivers/gpu/drm/drm_irq.c
879 +++ b/drivers/gpu/drm/drm_irq.c
880 @@ -708,7 +708,10 @@ int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, int crtc,
881 /* Subtract time delta from raw timestamp to get final
882 * vblank_time timestamp for end of vblank.
883 */
884 - etime = ktime_sub_ns(etime, delta_ns);
885 + if (delta_ns < 0)
886 + etime = ktime_add_ns(etime, -delta_ns);
887 + else
888 + etime = ktime_sub_ns(etime, delta_ns);
889 *vblank_time = ktime_to_timeval(etime);
890
891 DRM_DEBUG("crtc %d : v %d p(%d,%d)@ %ld.%ld -> %ld.%ld [e %d us, %d rep]\n",
892 diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
893 index f968590..17d9b0b 100644
894 --- a/drivers/gpu/drm/i915/i915_dma.c
895 +++ b/drivers/gpu/drm/i915/i915_dma.c
896 @@ -1514,6 +1514,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
897 spin_lock_init(&dev_priv->irq_lock);
898 spin_lock_init(&dev_priv->gpu_error.lock);
899 spin_lock_init(&dev_priv->rps.lock);
900 + spin_lock_init(&dev_priv->gt_lock);
901 mutex_init(&dev_priv->dpio_lock);
902 mutex_init(&dev_priv->rps.hw_lock);
903 mutex_init(&dev_priv->modeset_restore_lock);
904 diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
905 index 2cfe9f6..94ad6bc 100644
906 --- a/drivers/gpu/drm/i915/intel_pm.c
907 +++ b/drivers/gpu/drm/i915/intel_pm.c
908 @@ -4507,8 +4507,6 @@ void intel_gt_init(struct drm_device *dev)
909 {
910 struct drm_i915_private *dev_priv = dev->dev_private;
911
912 - spin_lock_init(&dev_priv->gt_lock);
913 -
914 if (IS_VALLEYVIEW(dev)) {
915 dev_priv->gt.force_wake_get = vlv_force_wake_get;
916 dev_priv->gt.force_wake_put = vlv_force_wake_put;
917 diff --git a/drivers/gpu/drm/mgag200/mgag200_ttm.c b/drivers/gpu/drm/mgag200/mgag200_ttm.c
918 index 401c989..d2cb32f 100644
919 --- a/drivers/gpu/drm/mgag200/mgag200_ttm.c
920 +++ b/drivers/gpu/drm/mgag200/mgag200_ttm.c
921 @@ -347,6 +347,7 @@ int mgag200_bo_create(struct drm_device *dev, int size, int align,
922
923 mgabo->gem.driver_private = NULL;
924 mgabo->bo.bdev = &mdev->ttm.bdev;
925 + mgabo->bo.bdev->dev_mapping = dev->dev_mapping;
926
927 mgag200_ttm_placement(mgabo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM);
928
929 diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
930 index 0f89ce3..687b421 100644
931 --- a/drivers/gpu/drm/radeon/evergreen.c
932 +++ b/drivers/gpu/drm/radeon/evergreen.c
933 @@ -4681,6 +4681,8 @@ static int evergreen_startup(struct radeon_device *rdev)
934 /* enable pcie gen2 link */
935 evergreen_pcie_gen2_enable(rdev);
936
937 + evergreen_mc_program(rdev);
938 +
939 if (ASIC_IS_DCE5(rdev)) {
940 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
941 r = ni_init_microcode(rdev);
942 @@ -4708,7 +4710,6 @@ static int evergreen_startup(struct radeon_device *rdev)
943 if (r)
944 return r;
945
946 - evergreen_mc_program(rdev);
947 if (rdev->flags & RADEON_IS_AGP) {
948 evergreen_agp_enable(rdev);
949 } else {
950 @@ -4854,10 +4855,10 @@ int evergreen_resume(struct radeon_device *rdev)
951 int evergreen_suspend(struct radeon_device *rdev)
952 {
953 r600_audio_fini(rdev);
954 + r600_uvd_stop(rdev);
955 radeon_uvd_suspend(rdev);
956 r700_cp_stop(rdev);
957 r600_dma_stop(rdev);
958 - r600_uvd_rbc_stop(rdev);
959 evergreen_irq_suspend(rdev);
960 radeon_wb_disable(rdev);
961 evergreen_pcie_gart_disable(rdev);
962 @@ -4988,6 +4989,7 @@ void evergreen_fini(struct radeon_device *rdev)
963 radeon_ib_pool_fini(rdev);
964 radeon_irq_kms_fini(rdev);
965 evergreen_pcie_gart_fini(rdev);
966 + r600_uvd_stop(rdev);
967 radeon_uvd_fini(rdev);
968 r600_vram_scratch_fini(rdev);
969 radeon_gem_fini(rdev);
970 diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
971 index 8458330..3bf43a1 100644
972 --- a/drivers/gpu/drm/radeon/ni.c
973 +++ b/drivers/gpu/drm/radeon/ni.c
974 @@ -1929,6 +1929,8 @@ static int cayman_startup(struct radeon_device *rdev)
975 /* enable pcie gen2 link */
976 evergreen_pcie_gen2_enable(rdev);
977
978 + evergreen_mc_program(rdev);
979 +
980 if (rdev->flags & RADEON_IS_IGP) {
981 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
982 r = ni_init_microcode(rdev);
983 @@ -1957,7 +1959,6 @@ static int cayman_startup(struct radeon_device *rdev)
984 if (r)
985 return r;
986
987 - evergreen_mc_program(rdev);
988 r = cayman_pcie_gart_enable(rdev);
989 if (r)
990 return r;
991 @@ -2133,7 +2134,7 @@ int cayman_suspend(struct radeon_device *rdev)
992 radeon_vm_manager_fini(rdev);
993 cayman_cp_enable(rdev, false);
994 cayman_dma_stop(rdev);
995 - r600_uvd_rbc_stop(rdev);
996 + r600_uvd_stop(rdev);
997 radeon_uvd_suspend(rdev);
998 evergreen_irq_suspend(rdev);
999 radeon_wb_disable(rdev);
1000 @@ -2265,6 +2266,7 @@ void cayman_fini(struct radeon_device *rdev)
1001 radeon_vm_manager_fini(rdev);
1002 radeon_ib_pool_fini(rdev);
1003 radeon_irq_kms_fini(rdev);
1004 + r600_uvd_stop(rdev);
1005 radeon_uvd_fini(rdev);
1006 cayman_pcie_gart_fini(rdev);
1007 r600_vram_scratch_fini(rdev);
1008 diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
1009 index b60004e..f19620b 100644
1010 --- a/drivers/gpu/drm/radeon/r600.c
1011 +++ b/drivers/gpu/drm/radeon/r600.c
1012 @@ -2675,12 +2675,29 @@ int r600_uvd_rbc_start(struct radeon_device *rdev)
1013 return 0;
1014 }
1015
1016 -void r600_uvd_rbc_stop(struct radeon_device *rdev)
1017 +void r600_uvd_stop(struct radeon_device *rdev)
1018 {
1019 struct radeon_ring *ring = &rdev->ring[R600_RING_TYPE_UVD_INDEX];
1020
1021 /* force RBC into idle state */
1022 WREG32(UVD_RBC_RB_CNTL, 0x11010101);
1023 +
1024 + /* Stall UMC and register bus before resetting VCPU */
1025 + WREG32_P(UVD_LMI_CTRL2, 1 << 8, ~(1 << 8));
1026 + WREG32_P(UVD_RB_ARB_CTRL, 1 << 3, ~(1 << 3));
1027 + mdelay(1);
1028 +
1029 + /* put VCPU into reset */
1030 + WREG32(UVD_SOFT_RESET, VCPU_SOFT_RESET);
1031 + mdelay(5);
1032 +
1033 + /* disable VCPU clock */
1034 + WREG32(UVD_VCPU_CNTL, 0x0);
1035 +
1036 + /* Unstall UMC and register bus */
1037 + WREG32_P(UVD_LMI_CTRL2, 0, ~(1 << 8));
1038 + WREG32_P(UVD_RB_ARB_CTRL, 0, ~(1 << 3));
1039 +
1040 ring->ready = false;
1041 }
1042
1043 @@ -2700,6 +2717,11 @@ int r600_uvd_init(struct radeon_device *rdev)
1044 /* disable interupt */
1045 WREG32_P(UVD_MASTINT_EN, 0, ~(1 << 1));
1046
1047 + /* Stall UMC and register bus before resetting VCPU */
1048 + WREG32_P(UVD_LMI_CTRL2, 1 << 8, ~(1 << 8));
1049 + WREG32_P(UVD_RB_ARB_CTRL, 1 << 3, ~(1 << 3));
1050 + mdelay(1);
1051 +
1052 /* put LMI, VCPU, RBC etc... into reset */
1053 WREG32(UVD_SOFT_RESET, LMI_SOFT_RESET | VCPU_SOFT_RESET |
1054 LBSI_SOFT_RESET | RBC_SOFT_RESET | CSM_SOFT_RESET |
1055 @@ -2729,10 +2751,6 @@ int r600_uvd_init(struct radeon_device *rdev)
1056 WREG32(UVD_MPC_SET_ALU, 0);
1057 WREG32(UVD_MPC_SET_MUX, 0x88);
1058
1059 - /* Stall UMC */
1060 - WREG32_P(UVD_LMI_CTRL2, 1 << 8, ~(1 << 8));
1061 - WREG32_P(UVD_RB_ARB_CTRL, 1 << 3, ~(1 << 3));
1062 -
1063 /* take all subblocks out of reset, except VCPU */
1064 WREG32(UVD_SOFT_RESET, VCPU_SOFT_RESET);
1065 mdelay(5);
1066 @@ -3206,6 +3224,8 @@ static int r600_startup(struct radeon_device *rdev)
1067 /* enable pcie gen2 link */
1068 r600_pcie_gen2_enable(rdev);
1069
1070 + r600_mc_program(rdev);
1071 +
1072 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
1073 r = r600_init_microcode(rdev);
1074 if (r) {
1075 @@ -3218,7 +3238,6 @@ static int r600_startup(struct radeon_device *rdev)
1076 if (r)
1077 return r;
1078
1079 - r600_mc_program(rdev);
1080 if (rdev->flags & RADEON_IS_AGP) {
1081 r600_agp_enable(rdev);
1082 } else {
1083 diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
1084 index f48240b..b9b1139 100644
1085 --- a/drivers/gpu/drm/radeon/r600_hdmi.c
1086 +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
1087 @@ -242,9 +242,15 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock)
1088 /* according to the reg specs, this should DCE3.2 only, but in
1089 * practice it seems to cover DCE3.0 as well.
1090 */
1091 - WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100);
1092 - WREG32(DCCG_AUDIO_DTO0_MODULE, clock * 100);
1093 - WREG32(DCCG_AUDIO_DTO_SELECT, 0); /* select DTO0 */
1094 + if (dig->dig_encoder == 0) {
1095 + WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100);
1096 + WREG32(DCCG_AUDIO_DTO0_MODULE, clock * 100);
1097 + WREG32(DCCG_AUDIO_DTO_SELECT, 0); /* select DTO0 */
1098 + } else {
1099 + WREG32(DCCG_AUDIO_DTO1_PHASE, base_rate * 100);
1100 + WREG32(DCCG_AUDIO_DTO1_MODULE, clock * 100);
1101 + WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */
1102 + }
1103 } else {
1104 /* according to the reg specs, this should be DCE2.0 and DCE3.0 */
1105 WREG32(AUDIO_DTO, AUDIO_DTO_PHASE(base_rate / 10) |
1106 diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
1107 index aad18e6..bdd9d56 100644
1108 --- a/drivers/gpu/drm/radeon/radeon.h
1109 +++ b/drivers/gpu/drm/radeon/radeon.h
1110 @@ -1146,7 +1146,6 @@ struct radeon_uvd {
1111 void *cpu_addr;
1112 uint64_t gpu_addr;
1113 void *saved_bo;
1114 - unsigned fw_size;
1115 atomic_t handles[RADEON_MAX_UVD_HANDLES];
1116 struct drm_file *filp[RADEON_MAX_UVD_HANDLES];
1117 struct delayed_work idle_work;
1118 @@ -1686,6 +1685,7 @@ struct radeon_device {
1119 const struct firmware *rlc_fw; /* r6/700 RLC firmware */
1120 const struct firmware *mc_fw; /* NI MC firmware */
1121 const struct firmware *ce_fw; /* SI CE firmware */
1122 + const struct firmware *uvd_fw; /* UVD firmware */
1123 struct r600_blit r600_blit;
1124 struct r600_vram_scratch vram_scratch;
1125 int msi_enabled; /* msi enabled */
1126 diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
1127 index a72759e..34223fc 100644
1128 --- a/drivers/gpu/drm/radeon/radeon_asic.h
1129 +++ b/drivers/gpu/drm/radeon/radeon_asic.h
1130 @@ -399,7 +399,7 @@ uint64_t r600_get_gpu_clock_counter(struct radeon_device *rdev);
1131 /* uvd */
1132 int r600_uvd_init(struct radeon_device *rdev);
1133 int r600_uvd_rbc_start(struct radeon_device *rdev);
1134 -void r600_uvd_rbc_stop(struct radeon_device *rdev);
1135 +void r600_uvd_stop(struct radeon_device *rdev);
1136 int r600_uvd_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
1137 void r600_uvd_fence_emit(struct radeon_device *rdev,
1138 struct radeon_fence *fence);
1139 diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
1140 index 7ddb0ef..ddb8f8e 100644
1141 --- a/drivers/gpu/drm/radeon/radeon_fence.c
1142 +++ b/drivers/gpu/drm/radeon/radeon_fence.c
1143 @@ -782,7 +782,7 @@ int radeon_fence_driver_start_ring(struct radeon_device *rdev, int ring)
1144
1145 } else {
1146 /* put fence directly behind firmware */
1147 - index = ALIGN(rdev->uvd.fw_size, 8);
1148 + index = ALIGN(rdev->uvd_fw->size, 8);
1149 rdev->fence_drv[ring].cpu_addr = rdev->uvd.cpu_addr + index;
1150 rdev->fence_drv[ring].gpu_addr = rdev->uvd.gpu_addr + index;
1151 }
1152 diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
1153 index 1b3a91b..97002a0 100644
1154 --- a/drivers/gpu/drm/radeon/radeon_uvd.c
1155 +++ b/drivers/gpu/drm/radeon/radeon_uvd.c
1156 @@ -55,7 +55,6 @@ static void radeon_uvd_idle_work_handler(struct work_struct *work);
1157 int radeon_uvd_init(struct radeon_device *rdev)
1158 {
1159 struct platform_device *pdev;
1160 - const struct firmware *fw;
1161 unsigned long bo_size;
1162 const char *fw_name;
1163 int i, r;
1164 @@ -105,7 +104,7 @@ int radeon_uvd_init(struct radeon_device *rdev)
1165 return -EINVAL;
1166 }
1167
1168 - r = request_firmware(&fw, fw_name, &pdev->dev);
1169 + r = request_firmware(&rdev->uvd_fw, fw_name, &pdev->dev);
1170 if (r) {
1171 dev_err(rdev->dev, "radeon_uvd: Can't load firmware \"%s\"\n",
1172 fw_name);
1173 @@ -115,7 +114,7 @@ int radeon_uvd_init(struct radeon_device *rdev)
1174
1175 platform_device_unregister(pdev);
1176
1177 - bo_size = RADEON_GPU_PAGE_ALIGN(fw->size + 8) +
1178 + bo_size = RADEON_GPU_PAGE_ALIGN(rdev->uvd_fw->size + 8) +
1179 RADEON_UVD_STACK_SIZE + RADEON_UVD_HEAP_SIZE;
1180 r = radeon_bo_create(rdev, bo_size, PAGE_SIZE, true,
1181 RADEON_GEM_DOMAIN_VRAM, NULL, &rdev->uvd.vcpu_bo);
1182 @@ -148,12 +147,6 @@ int radeon_uvd_init(struct radeon_device *rdev)
1183
1184 radeon_bo_unreserve(rdev->uvd.vcpu_bo);
1185
1186 - rdev->uvd.fw_size = fw->size;
1187 - memset(rdev->uvd.cpu_addr, 0, bo_size);
1188 - memcpy(rdev->uvd.cpu_addr, fw->data, fw->size);
1189 -
1190 - release_firmware(fw);
1191 -
1192 for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
1193 atomic_set(&rdev->uvd.handles[i], 0);
1194 rdev->uvd.filp[i] = NULL;
1195 @@ -177,33 +170,60 @@ void radeon_uvd_fini(struct radeon_device *rdev)
1196 }
1197
1198 radeon_bo_unref(&rdev->uvd.vcpu_bo);
1199 +
1200 + release_firmware(rdev->uvd_fw);
1201 }
1202
1203 int radeon_uvd_suspend(struct radeon_device *rdev)
1204 {
1205 unsigned size;
1206 + void *ptr;
1207 + int i;
1208
1209 if (rdev->uvd.vcpu_bo == NULL)
1210 return 0;
1211
1212 + for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i)
1213 + if (atomic_read(&rdev->uvd.handles[i]))
1214 + break;
1215 +
1216 + if (i == RADEON_MAX_UVD_HANDLES)
1217 + return 0;
1218 +
1219 size = radeon_bo_size(rdev->uvd.vcpu_bo);
1220 + size -= rdev->uvd_fw->size;
1221 +
1222 + ptr = rdev->uvd.cpu_addr;
1223 + ptr += rdev->uvd_fw->size;
1224 +
1225 rdev->uvd.saved_bo = kmalloc(size, GFP_KERNEL);
1226 - memcpy(rdev->uvd.saved_bo, rdev->uvd.cpu_addr, size);
1227 + memcpy(rdev->uvd.saved_bo, ptr, size);
1228
1229 return 0;
1230 }
1231
1232 int radeon_uvd_resume(struct radeon_device *rdev)
1233 {
1234 + unsigned size;
1235 + void *ptr;
1236 +
1237 if (rdev->uvd.vcpu_bo == NULL)
1238 return -EINVAL;
1239
1240 + memcpy(rdev->uvd.cpu_addr, rdev->uvd_fw->data, rdev->uvd_fw->size);
1241 +
1242 + size = radeon_bo_size(rdev->uvd.vcpu_bo);
1243 + size -= rdev->uvd_fw->size;
1244 +
1245 + ptr = rdev->uvd.cpu_addr;
1246 + ptr += rdev->uvd_fw->size;
1247 +
1248 if (rdev->uvd.saved_bo != NULL) {
1249 - unsigned size = radeon_bo_size(rdev->uvd.vcpu_bo);
1250 - memcpy(rdev->uvd.cpu_addr, rdev->uvd.saved_bo, size);
1251 + memcpy(ptr, rdev->uvd.saved_bo, size);
1252 kfree(rdev->uvd.saved_bo);
1253 rdev->uvd.saved_bo = NULL;
1254 - }
1255 + } else
1256 + memset(ptr, 0, size);
1257
1258 return 0;
1259 }
1260 @@ -218,8 +238,8 @@ void radeon_uvd_free_handles(struct radeon_device *rdev, struct drm_file *filp)
1261 {
1262 int i, r;
1263 for (i = 0; i < RADEON_MAX_UVD_HANDLES; ++i) {
1264 - if (rdev->uvd.filp[i] == filp) {
1265 - uint32_t handle = atomic_read(&rdev->uvd.handles[i]);
1266 + uint32_t handle = atomic_read(&rdev->uvd.handles[i]);
1267 + if (handle != 0 && rdev->uvd.filp[i] == filp) {
1268 struct radeon_fence *fence;
1269
1270 r = radeon_uvd_get_destroy_msg(rdev,
1271 diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
1272 index 30ea14e..bcc68ec 100644
1273 --- a/drivers/gpu/drm/radeon/rv770.c
1274 +++ b/drivers/gpu/drm/radeon/rv770.c
1275 @@ -813,7 +813,7 @@ int rv770_uvd_resume(struct radeon_device *rdev)
1276
1277 /* programm the VCPU memory controller bits 0-27 */
1278 addr = rdev->uvd.gpu_addr >> 3;
1279 - size = RADEON_GPU_PAGE_ALIGN(rdev->uvd.fw_size + 4) >> 3;
1280 + size = RADEON_GPU_PAGE_ALIGN(rdev->uvd_fw->size + 4) >> 3;
1281 WREG32(UVD_VCPU_CACHE_OFFSET0, addr);
1282 WREG32(UVD_VCPU_CACHE_SIZE0, size);
1283
1284 @@ -1829,6 +1829,8 @@ static int rv770_startup(struct radeon_device *rdev)
1285 /* enable pcie gen2 link */
1286 rv770_pcie_gen2_enable(rdev);
1287
1288 + rv770_mc_program(rdev);
1289 +
1290 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
1291 r = r600_init_microcode(rdev);
1292 if (r) {
1293 @@ -1841,7 +1843,6 @@ static int rv770_startup(struct radeon_device *rdev)
1294 if (r)
1295 return r;
1296
1297 - rv770_mc_program(rdev);
1298 if (rdev->flags & RADEON_IS_AGP) {
1299 rv770_agp_enable(rdev);
1300 } else {
1301 @@ -1983,6 +1984,7 @@ int rv770_resume(struct radeon_device *rdev)
1302 int rv770_suspend(struct radeon_device *rdev)
1303 {
1304 r600_audio_fini(rdev);
1305 + r600_uvd_stop(rdev);
1306 radeon_uvd_suspend(rdev);
1307 r700_cp_stop(rdev);
1308 r600_dma_stop(rdev);
1309 @@ -2098,6 +2100,7 @@ void rv770_fini(struct radeon_device *rdev)
1310 radeon_ib_pool_fini(rdev);
1311 radeon_irq_kms_fini(rdev);
1312 rv770_pcie_gart_fini(rdev);
1313 + r600_uvd_stop(rdev);
1314 radeon_uvd_fini(rdev);
1315 r600_vram_scratch_fini(rdev);
1316 radeon_gem_fini(rdev);
1317 diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
1318 index a1b0da6..1a96a16 100644
1319 --- a/drivers/gpu/drm/radeon/si.c
1320 +++ b/drivers/gpu/drm/radeon/si.c
1321 @@ -5270,6 +5270,8 @@ static int si_startup(struct radeon_device *rdev)
1322 struct radeon_ring *ring;
1323 int r;
1324
1325 + si_mc_program(rdev);
1326 +
1327 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
1328 !rdev->rlc_fw || !rdev->mc_fw) {
1329 r = si_init_microcode(rdev);
1330 @@ -5289,7 +5291,6 @@ static int si_startup(struct radeon_device *rdev)
1331 if (r)
1332 return r;
1333
1334 - si_mc_program(rdev);
1335 r = si_pcie_gart_enable(rdev);
1336 if (r)
1337 return r;
1338 @@ -5473,7 +5474,7 @@ int si_suspend(struct radeon_device *rdev)
1339 si_cp_enable(rdev, false);
1340 cayman_dma_stop(rdev);
1341 if (rdev->has_uvd) {
1342 - r600_uvd_rbc_stop(rdev);
1343 + r600_uvd_stop(rdev);
1344 radeon_uvd_suspend(rdev);
1345 }
1346 si_irq_suspend(rdev);
1347 @@ -5613,8 +5614,10 @@ void si_fini(struct radeon_device *rdev)
1348 radeon_vm_manager_fini(rdev);
1349 radeon_ib_pool_fini(rdev);
1350 radeon_irq_kms_fini(rdev);
1351 - if (rdev->has_uvd)
1352 + if (rdev->has_uvd) {
1353 + r600_uvd_stop(rdev);
1354 radeon_uvd_fini(rdev);
1355 + }
1356 si_pcie_gart_fini(rdev);
1357 r600_vram_scratch_fini(rdev);
1358 radeon_gem_fini(rdev);
1359 diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c
1360 index b83bf4b..5863735 100644
1361 --- a/drivers/hwmon/adt7470.c
1362 +++ b/drivers/hwmon/adt7470.c
1363 @@ -215,7 +215,7 @@ static inline int adt7470_write_word_data(struct i2c_client *client, u8 reg,
1364 u16 value)
1365 {
1366 return i2c_smbus_write_byte_data(client, reg, value & 0xFF)
1367 - && i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
1368 + || i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
1369 }
1370
1371 static void adt7470_init_client(struct i2c_client *client)
1372 diff --git a/drivers/i2c/busses/i2c-mxs.c b/drivers/i2c/busses/i2c-mxs.c
1373 index 2039f23..6d8094d 100644
1374 --- a/drivers/i2c/busses/i2c-mxs.c
1375 +++ b/drivers/i2c/busses/i2c-mxs.c
1376 @@ -494,7 +494,7 @@ static int mxs_i2c_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg,
1377 * based on this empirical measurement and a lot of previous frobbing.
1378 */
1379 i2c->cmd_err = 0;
1380 - if (msg->len < 8) {
1381 + if (0) { /* disable PIO mode until a proper fix is made */
1382 ret = mxs_i2c_pio_setup_xfer(adap, msg, flags);
1383 if (ret)
1384 mxs_i2c_reset(i2c);
1385 diff --git a/drivers/media/usb/em28xx/em28xx-i2c.c b/drivers/media/usb/em28xx/em28xx-i2c.c
1386 index 4851cc2..c4ff973 100644
1387 --- a/drivers/media/usb/em28xx/em28xx-i2c.c
1388 +++ b/drivers/media/usb/em28xx/em28xx-i2c.c
1389 @@ -726,7 +726,7 @@ static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned bus,
1390
1391 *eedata = data;
1392 *eedata_len = len;
1393 - dev_config = (void *)eedata;
1394 + dev_config = (void *)*eedata;
1395
1396 switch (le16_to_cpu(dev_config->chip_conf) >> 4 & 0x3) {
1397 case 0:
1398 diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
1399 index a60f6c1..50543f1 100644
1400 --- a/drivers/mtd/nand/Kconfig
1401 +++ b/drivers/mtd/nand/Kconfig
1402 @@ -95,7 +95,7 @@ config MTD_NAND_OMAP2
1403
1404 config MTD_NAND_OMAP_BCH
1405 depends on MTD_NAND && MTD_NAND_OMAP2 && ARCH_OMAP3
1406 - bool "Enable support for hardware BCH error correction"
1407 + tristate "Enable support for hardware BCH error correction"
1408 default n
1409 select BCH
1410 select BCH_CONST_PARAMS
1411 diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
1412 index 89178b8..9b60dc1 100644
1413 --- a/drivers/scsi/megaraid/megaraid_sas_base.c
1414 +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
1415 @@ -3508,11 +3508,21 @@ static int megasas_init_fw(struct megasas_instance *instance)
1416 break;
1417 }
1418
1419 - /*
1420 - * We expect the FW state to be READY
1421 - */
1422 - if (megasas_transition_to_ready(instance, 0))
1423 - goto fail_ready_state;
1424 + if (megasas_transition_to_ready(instance, 0)) {
1425 + atomic_set(&instance->fw_reset_no_pci_access, 1);
1426 + instance->instancet->adp_reset
1427 + (instance, instance->reg_set);
1428 + atomic_set(&instance->fw_reset_no_pci_access, 0);
1429 + dev_info(&instance->pdev->dev,
1430 + "megasas: FW restarted successfully from %s!\n",
1431 + __func__);
1432 +
1433 + /*waitting for about 30 second before retry*/
1434 + ssleep(30);
1435 +
1436 + if (megasas_transition_to_ready(instance, 0))
1437 + goto fail_ready_state;
1438 + }
1439
1440 /* Check if MSI-X is supported while in ready state */
1441 msix_enable = (instance->instancet->read_fw_status_reg(reg_set) &
1442 diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
1443 index 1e3879d..0665f9c 100644
1444 --- a/drivers/scsi/nsp32.c
1445 +++ b/drivers/scsi/nsp32.c
1446 @@ -2899,7 +2899,7 @@ static void nsp32_do_bus_reset(nsp32_hw_data *data)
1447 * reset SCSI bus
1448 */
1449 nsp32_write1(base, SCSI_BUS_CONTROL, BUSCTL_RST);
1450 - udelay(RESET_HOLD_TIME);
1451 + mdelay(RESET_HOLD_TIME / 1000);
1452 nsp32_write1(base, SCSI_BUS_CONTROL, 0);
1453 for(i = 0; i < 5; i++) {
1454 intrdat = nsp32_read2(base, IRQ_STATUS); /* dummy read */
1455 diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
1456 index 3b1ea34..eaa808e 100644
1457 --- a/drivers/scsi/scsi.c
1458 +++ b/drivers/scsi/scsi.c
1459 @@ -1031,6 +1031,9 @@ int scsi_get_vpd_page(struct scsi_device *sdev, u8 page, unsigned char *buf,
1460 {
1461 int i, result;
1462
1463 + if (sdev->skip_vpd_pages)
1464 + goto fail;
1465 +
1466 /* Ask for all the pages supported by this device */
1467 result = scsi_vpd_inquiry(sdev, buf, 0, buf_len);
1468 if (result)
1469 diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
1470 index 2168258..74b88ef 100644
1471 --- a/drivers/scsi/virtio_scsi.c
1472 +++ b/drivers/scsi/virtio_scsi.c
1473 @@ -751,7 +751,7 @@ static void __virtscsi_set_affinity(struct virtio_scsi *vscsi, bool affinity)
1474
1475 vscsi->affinity_hint_set = true;
1476 } else {
1477 - for (i = 0; i < vscsi->num_queues - VIRTIO_SCSI_VQ_BASE; i++)
1478 + for (i = 0; i < vscsi->num_queues; i++)
1479 virtqueue_set_affinity(vscsi->req_vqs[i].vq, -1);
1480
1481 vscsi->affinity_hint_set = false;
1482 diff --git a/drivers/staging/zcache/zcache-main.c b/drivers/staging/zcache/zcache-main.c
1483 index dcceed2..81972fa 100644
1484 --- a/drivers/staging/zcache/zcache-main.c
1485 +++ b/drivers/staging/zcache/zcache-main.c
1486 @@ -1811,10 +1811,12 @@ static int zcache_comp_init(void)
1487 #else
1488 if (*zcache_comp_name != '\0') {
1489 ret = crypto_has_comp(zcache_comp_name, 0, 0);
1490 - if (!ret)
1491 + if (!ret) {
1492 pr_info("zcache: %s not supported\n",
1493 zcache_comp_name);
1494 - goto out;
1495 + ret = 1;
1496 + goto out;
1497 + }
1498 }
1499 if (!ret)
1500 strcpy(zcache_comp_name, "lzo");
1501 diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
1502 index 1742ce5..a333d44 100644
1503 --- a/drivers/staging/zram/zram_drv.c
1504 +++ b/drivers/staging/zram/zram_drv.c
1505 @@ -432,7 +432,7 @@ static inline int valid_io_request(struct zram *zram, struct bio *bio)
1506 end = start + (bio->bi_size >> SECTOR_SHIFT);
1507 bound = zram->disksize >> SECTOR_SHIFT;
1508 /* out of range range */
1509 - if (unlikely(start >= bound || end >= bound || start > end))
1510 + if (unlikely(start >= bound || end > bound || start > end))
1511 return 0;
1512
1513 /* I/O request is valid */
1514 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1515 index b93fc88..da2905a 100644
1516 --- a/drivers/usb/core/hub.c
1517 +++ b/drivers/usb/core/hub.c
1518 @@ -4796,7 +4796,8 @@ static void hub_events(void)
1519 hub->ports[i - 1]->child;
1520
1521 dev_dbg(hub_dev, "warm reset port %d\n", i);
1522 - if (!udev) {
1523 + if (!udev || !(portstatus &
1524 + USB_PORT_STAT_CONNECTION)) {
1525 status = hub_port_reset(hub, i,
1526 NULL, HUB_BH_RESET_TIME,
1527 true);
1528 @@ -4806,8 +4807,8 @@ static void hub_events(void)
1529 usb_lock_device(udev);
1530 status = usb_reset_device(udev);
1531 usb_unlock_device(udev);
1532 + connect_change = 0;
1533 }
1534 - connect_change = 0;
1535 }
1536
1537 if (connect_change)
1538 diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
1539 index c276ac9..cf68596 100644
1540 --- a/fs/btrfs/tree-log.c
1541 +++ b/fs/btrfs/tree-log.c
1542 @@ -3728,8 +3728,9 @@ next_slot:
1543 }
1544
1545 log_extents:
1546 + btrfs_release_path(path);
1547 + btrfs_release_path(dst_path);
1548 if (fast_search) {
1549 - btrfs_release_path(dst_path);
1550 ret = btrfs_log_changed_extents(trans, root, inode, dst_path);
1551 if (ret) {
1552 err = ret;
1553 @@ -3746,8 +3747,6 @@ log_extents:
1554 }
1555
1556 if (inode_only == LOG_INODE_ALL && S_ISDIR(inode->i_mode)) {
1557 - btrfs_release_path(path);
1558 - btrfs_release_path(dst_path);
1559 ret = log_directory_changes(trans, root, inode, path, dst_path);
1560 if (ret) {
1561 err = ret;
1562 diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c
1563 index f59d0d5..5c807b2 100644
1564 --- a/fs/cifs/cifsencrypt.c
1565 +++ b/fs/cifs/cifsencrypt.c
1566 @@ -389,7 +389,7 @@ find_domain_name(struct cifs_ses *ses, const struct nls_table *nls_cp)
1567 if (blobptr + attrsize > blobend)
1568 break;
1569 if (type == NTLMSSP_AV_NB_DOMAIN_NAME) {
1570 - if (!attrsize)
1571 + if (!attrsize || attrsize >= CIFS_MAX_DOMAINNAME_LEN)
1572 break;
1573 if (!ses->domainName) {
1574 ses->domainName =
1575 diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
1576 index 4f07f6f..ea3a0b3 100644
1577 --- a/fs/cifs/cifsglob.h
1578 +++ b/fs/cifs/cifsglob.h
1579 @@ -44,6 +44,7 @@
1580 #define MAX_TREE_SIZE (2 + MAX_SERVER_SIZE + 1 + MAX_SHARE_SIZE + 1)
1581 #define MAX_SERVER_SIZE 15
1582 #define MAX_SHARE_SIZE 80
1583 +#define CIFS_MAX_DOMAINNAME_LEN 256 /* max domain name length */
1584 #define MAX_USERNAME_SIZE 256 /* reasonable maximum for current servers */
1585 #define MAX_PASSWORD_SIZE 512 /* max for windows seems to be 256 wide chars */
1586
1587 diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
1588 index e3bc39b..d6a5c5a 100644
1589 --- a/fs/cifs/connect.c
1590 +++ b/fs/cifs/connect.c
1591 @@ -1662,7 +1662,8 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
1592 if (string == NULL)
1593 goto out_nomem;
1594
1595 - if (strnlen(string, 256) == 256) {
1596 + if (strnlen(string, CIFS_MAX_DOMAINNAME_LEN)
1597 + == CIFS_MAX_DOMAINNAME_LEN) {
1598 printk(KERN_WARNING "CIFS: domain name too"
1599 " long\n");
1600 goto cifs_parse_mount_err;
1601 @@ -2288,8 +2289,8 @@ cifs_put_smb_ses(struct cifs_ses *ses)
1602
1603 #ifdef CONFIG_KEYS
1604
1605 -/* strlen("cifs:a:") + INET6_ADDRSTRLEN + 1 */
1606 -#define CIFSCREDS_DESC_SIZE (7 + INET6_ADDRSTRLEN + 1)
1607 +/* strlen("cifs:a:") + CIFS_MAX_DOMAINNAME_LEN + 1 */
1608 +#define CIFSCREDS_DESC_SIZE (7 + CIFS_MAX_DOMAINNAME_LEN + 1)
1609
1610 /* Populate username and pw fields from keyring if possible */
1611 static int
1612 diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
1613 index 770d5a9..036279c 100644
1614 --- a/fs/cifs/readdir.c
1615 +++ b/fs/cifs/readdir.c
1616 @@ -111,6 +111,14 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
1617 return;
1618 }
1619
1620 + /*
1621 + * If we know that the inode will need to be revalidated immediately,
1622 + * then don't create a new dentry for it. We'll end up doing an on
1623 + * the wire call either way and this spares us an invalidation.
1624 + */
1625 + if (fattr->cf_flags & CIFS_FATTR_NEED_REVAL)
1626 + return;
1627 +
1628 dentry = d_alloc(parent, name);
1629 if (!dentry)
1630 return;
1631 diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
1632 index f230571..8edc9eb 100644
1633 --- a/fs/cifs/sess.c
1634 +++ b/fs/cifs/sess.c
1635 @@ -198,7 +198,7 @@ static void unicode_domain_string(char **pbcc_area, struct cifs_ses *ses,
1636 bytes_ret = 0;
1637 } else
1638 bytes_ret = cifs_strtoUTF16((__le16 *) bcc_ptr, ses->domainName,
1639 - 256, nls_cp);
1640 + CIFS_MAX_DOMAINNAME_LEN, nls_cp);
1641 bcc_ptr += 2 * bytes_ret;
1642 bcc_ptr += 2; /* account for null terminator */
1643
1644 @@ -256,8 +256,8 @@ static void ascii_ssetup_strings(char **pbcc_area, struct cifs_ses *ses,
1645
1646 /* copy domain */
1647 if (ses->domainName != NULL) {
1648 - strncpy(bcc_ptr, ses->domainName, 256);
1649 - bcc_ptr += strnlen(ses->domainName, 256);
1650 + strncpy(bcc_ptr, ses->domainName, CIFS_MAX_DOMAINNAME_LEN);
1651 + bcc_ptr += strnlen(ses->domainName, CIFS_MAX_DOMAINNAME_LEN);
1652 } /* else we will send a null domain name
1653 so the server will default to its own domain */
1654 *bcc_ptr = 0;
1655 diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
1656 index 4888cb3..c7c83ff 100644
1657 --- a/fs/debugfs/inode.c
1658 +++ b/fs/debugfs/inode.c
1659 @@ -533,8 +533,7 @@ EXPORT_SYMBOL_GPL(debugfs_remove);
1660 */
1661 void debugfs_remove_recursive(struct dentry *dentry)
1662 {
1663 - struct dentry *child;
1664 - struct dentry *parent;
1665 + struct dentry *child, *next, *parent;
1666
1667 if (IS_ERR_OR_NULL(dentry))
1668 return;
1669 @@ -544,61 +543,37 @@ void debugfs_remove_recursive(struct dentry *dentry)
1670 return;
1671
1672 parent = dentry;
1673 + down:
1674 mutex_lock(&parent->d_inode->i_mutex);
1675 + list_for_each_entry_safe(child, next, &parent->d_subdirs, d_u.d_child) {
1676 + if (!debugfs_positive(child))
1677 + continue;
1678
1679 - while (1) {
1680 - /*
1681 - * When all dentries under "parent" has been removed,
1682 - * walk up the tree until we reach our starting point.
1683 - */
1684 - if (list_empty(&parent->d_subdirs)) {
1685 - mutex_unlock(&parent->d_inode->i_mutex);
1686 - if (parent == dentry)
1687 - break;
1688 - parent = parent->d_parent;
1689 - mutex_lock(&parent->d_inode->i_mutex);
1690 - }
1691 - child = list_entry(parent->d_subdirs.next, struct dentry,
1692 - d_u.d_child);
1693 - next_sibling:
1694 -
1695 - /*
1696 - * If "child" isn't empty, walk down the tree and
1697 - * remove all its descendants first.
1698 - */
1699 + /* perhaps simple_empty(child) makes more sense */
1700 if (!list_empty(&child->d_subdirs)) {
1701 mutex_unlock(&parent->d_inode->i_mutex);
1702 parent = child;
1703 - mutex_lock(&parent->d_inode->i_mutex);
1704 - continue;
1705 + goto down;
1706 }
1707 - __debugfs_remove(child, parent);
1708 - if (parent->d_subdirs.next == &child->d_u.d_child) {
1709 - /*
1710 - * Try the next sibling.
1711 - */
1712 - if (child->d_u.d_child.next != &parent->d_subdirs) {
1713 - child = list_entry(child->d_u.d_child.next,
1714 - struct dentry,
1715 - d_u.d_child);
1716 - goto next_sibling;
1717 - }
1718 -
1719 - /*
1720 - * Avoid infinite loop if we fail to remove
1721 - * one dentry.
1722 - */
1723 - mutex_unlock(&parent->d_inode->i_mutex);
1724 - break;
1725 - }
1726 - simple_release_fs(&debugfs_mount, &debugfs_mount_count);
1727 + up:
1728 + if (!__debugfs_remove(child, parent))
1729 + simple_release_fs(&debugfs_mount, &debugfs_mount_count);
1730 }
1731
1732 - parent = dentry->d_parent;
1733 + mutex_unlock(&parent->d_inode->i_mutex);
1734 + child = parent;
1735 + parent = parent->d_parent;
1736 mutex_lock(&parent->d_inode->i_mutex);
1737 - __debugfs_remove(dentry, parent);
1738 +
1739 + if (child != dentry) {
1740 + next = list_entry(child->d_u.d_child.next, struct dentry,
1741 + d_u.d_child);
1742 + goto up;
1743 + }
1744 +
1745 + if (!__debugfs_remove(child, parent))
1746 + simple_release_fs(&debugfs_mount, &debugfs_mount_count);
1747 mutex_unlock(&parent->d_inode->i_mutex);
1748 - simple_release_fs(&debugfs_mount, &debugfs_mount_count);
1749 }
1750 EXPORT_SYMBOL_GPL(debugfs_remove_recursive);
1751
1752 diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
1753 index fddf3d9..dc1e030 100644
1754 --- a/fs/ext4/extents.c
1755 +++ b/fs/ext4/extents.c
1756 @@ -4389,7 +4389,7 @@ void ext4_ext_truncate(handle_t *handle, struct inode *inode)
1757 retry:
1758 err = ext4_es_remove_extent(inode, last_block,
1759 EXT_MAX_BLOCKS - last_block);
1760 - if (err == ENOMEM) {
1761 + if (err == -ENOMEM) {
1762 cond_resched();
1763 congestion_wait(BLK_RW_ASYNC, HZ/50);
1764 goto retry;
1765 diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
1766 index 00a818d..3da3bf1 100644
1767 --- a/fs/ext4/ialloc.c
1768 +++ b/fs/ext4/ialloc.c
1769 @@ -734,11 +734,8 @@ repeat_in_this_group:
1770 ino = ext4_find_next_zero_bit((unsigned long *)
1771 inode_bitmap_bh->b_data,
1772 EXT4_INODES_PER_GROUP(sb), ino);
1773 - if (ino >= EXT4_INODES_PER_GROUP(sb)) {
1774 - if (++group == ngroups)
1775 - group = 0;
1776 - continue;
1777 - }
1778 + if (ino >= EXT4_INODES_PER_GROUP(sb))
1779 + goto next_group;
1780 if (group == 0 && (ino+1) < EXT4_FIRST_INO(sb)) {
1781 ext4_error(sb, "reserved inode found cleared - "
1782 "inode=%lu", ino + 1);
1783 @@ -768,6 +765,9 @@ repeat_in_this_group:
1784 goto got; /* we grabbed the inode! */
1785 if (ino < EXT4_INODES_PER_GROUP(sb))
1786 goto repeat_in_this_group;
1787 +next_group:
1788 + if (++group == ngroups)
1789 + group = 0;
1790 }
1791 err = -ENOSPC;
1792 goto out;
1793 diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
1794 index 9491ac0..c0427e2 100644
1795 --- a/fs/ext4/ioctl.c
1796 +++ b/fs/ext4/ioctl.c
1797 @@ -77,8 +77,10 @@ static void swap_inode_data(struct inode *inode1, struct inode *inode2)
1798 memswap(ei1->i_data, ei2->i_data, sizeof(ei1->i_data));
1799 memswap(&ei1->i_flags, &ei2->i_flags, sizeof(ei1->i_flags));
1800 memswap(&ei1->i_disksize, &ei2->i_disksize, sizeof(ei1->i_disksize));
1801 - memswap(&ei1->i_es_tree, &ei2->i_es_tree, sizeof(ei1->i_es_tree));
1802 - memswap(&ei1->i_es_lru_nr, &ei2->i_es_lru_nr, sizeof(ei1->i_es_lru_nr));
1803 + ext4_es_remove_extent(inode1, 0, EXT_MAX_BLOCKS);
1804 + ext4_es_remove_extent(inode2, 0, EXT_MAX_BLOCKS);
1805 + ext4_es_lru_del(inode1);
1806 + ext4_es_lru_del(inode2);
1807
1808 isize = i_size_read(inode1);
1809 i_size_write(inode1, i_size_read(inode2));
1810 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
1811 index 6681c03..3f7c39e 100644
1812 --- a/fs/ext4/super.c
1813 +++ b/fs/ext4/super.c
1814 @@ -1341,7 +1341,7 @@ static const struct mount_opts {
1815 {Opt_delalloc, EXT4_MOUNT_DELALLOC,
1816 MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1817 {Opt_nodelalloc, EXT4_MOUNT_DELALLOC,
1818 - MOPT_EXT4_ONLY | MOPT_CLEAR | MOPT_EXPLICIT},
1819 + MOPT_EXT4_ONLY | MOPT_CLEAR},
1820 {Opt_journal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
1821 MOPT_EXT4_ONLY | MOPT_SET},
1822 {Opt_journal_async_commit, (EXT4_MOUNT_JOURNAL_ASYNC_COMMIT |
1823 @@ -3445,7 +3445,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1824 }
1825 if (test_opt(sb, DIOREAD_NOLOCK)) {
1826 ext4_msg(sb, KERN_ERR, "can't mount with "
1827 - "both data=journal and delalloc");
1828 + "both data=journal and dioread_nolock");
1829 goto failed_mount;
1830 }
1831 if (test_opt(sb, DELALLOC))
1832 @@ -4646,6 +4646,21 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
1833 goto restore_opts;
1834 }
1835
1836 + if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
1837 + if (test_opt2(sb, EXPLICIT_DELALLOC)) {
1838 + ext4_msg(sb, KERN_ERR, "can't mount with "
1839 + "both data=journal and delalloc");
1840 + err = -EINVAL;
1841 + goto restore_opts;
1842 + }
1843 + if (test_opt(sb, DIOREAD_NOLOCK)) {
1844 + ext4_msg(sb, KERN_ERR, "can't mount with "
1845 + "both data=journal and dioread_nolock");
1846 + err = -EINVAL;
1847 + goto restore_opts;
1848 + }
1849 + }
1850 +
1851 if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED)
1852 ext4_abort(sb, "Abort forced by user");
1853
1854 @@ -5400,6 +5415,7 @@ static void __exit ext4_exit_fs(void)
1855 kset_unregister(ext4_kset);
1856 ext4_exit_system_zone();
1857 ext4_exit_pageio();
1858 + ext4_exit_es();
1859 }
1860
1861 MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
1862 diff --git a/fs/lockd/clntlock.c b/fs/lockd/clntlock.c
1863 index 01bfe76..41e491b 100644
1864 --- a/fs/lockd/clntlock.c
1865 +++ b/fs/lockd/clntlock.c
1866 @@ -64,12 +64,17 @@ struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init)
1867 nlm_init->protocol, nlm_version,
1868 nlm_init->hostname, nlm_init->noresvport,
1869 nlm_init->net);
1870 - if (host == NULL) {
1871 - lockd_down(nlm_init->net);
1872 - return ERR_PTR(-ENOLCK);
1873 - }
1874 + if (host == NULL)
1875 + goto out_nohost;
1876 + if (host->h_rpcclnt == NULL && nlm_bind_host(host) == NULL)
1877 + goto out_nobind;
1878
1879 return host;
1880 +out_nobind:
1881 + nlmclnt_release_host(host);
1882 +out_nohost:
1883 + lockd_down(nlm_init->net);
1884 + return ERR_PTR(-ENOLCK);
1885 }
1886 EXPORT_SYMBOL_GPL(nlmclnt_init);
1887
1888 diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c
1889 index 9760ecb..acd3947 100644
1890 --- a/fs/lockd/clntproc.c
1891 +++ b/fs/lockd/clntproc.c
1892 @@ -125,14 +125,15 @@ static void nlmclnt_setlockargs(struct nlm_rqst *req, struct file_lock *fl)
1893 {
1894 struct nlm_args *argp = &req->a_args;
1895 struct nlm_lock *lock = &argp->lock;
1896 + char *nodename = req->a_host->h_rpcclnt->cl_nodename;
1897
1898 nlmclnt_next_cookie(&argp->cookie);
1899 memcpy(&lock->fh, NFS_FH(file_inode(fl->fl_file)), sizeof(struct nfs_fh));
1900 - lock->caller = utsname()->nodename;
1901 + lock->caller = nodename;
1902 lock->oh.data = req->a_owner;
1903 lock->oh.len = snprintf(req->a_owner, sizeof(req->a_owner), "%u@%s",
1904 (unsigned int)fl->fl_u.nfs_fl.owner->pid,
1905 - utsname()->nodename);
1906 + nodename);
1907 lock->svid = fl->fl_u.nfs_fl.owner->pid;
1908 lock->fl.fl_start = fl->fl_start;
1909 lock->fl.fl_end = fl->fl_end;
1910 diff --git a/fs/reiserfs/procfs.c b/fs/reiserfs/procfs.c
1911 index 33532f7..1d48974 100644
1912 --- a/fs/reiserfs/procfs.c
1913 +++ b/fs/reiserfs/procfs.c
1914 @@ -19,12 +19,13 @@
1915 /*
1916 * LOCKING:
1917 *
1918 - * We rely on new Alexander Viro's super-block locking.
1919 + * These guys are evicted from procfs as the very first step in ->kill_sb().
1920 *
1921 */
1922
1923 -static int show_version(struct seq_file *m, struct super_block *sb)
1924 +static int show_version(struct seq_file *m, void *unused)
1925 {
1926 + struct super_block *sb = m->private;
1927 char *format;
1928
1929 if (REISERFS_SB(sb)->s_properties & (1 << REISERFS_3_6)) {
1930 @@ -66,8 +67,9 @@ static int show_version(struct seq_file *m, struct super_block *sb)
1931 #define DJP( x ) le32_to_cpu( jp -> x )
1932 #define JF( x ) ( r -> s_journal -> x )
1933
1934 -static int show_super(struct seq_file *m, struct super_block *sb)
1935 +static int show_super(struct seq_file *m, void *unused)
1936 {
1937 + struct super_block *sb = m->private;
1938 struct reiserfs_sb_info *r = REISERFS_SB(sb);
1939
1940 seq_printf(m, "state: \t%s\n"
1941 @@ -128,8 +130,9 @@ static int show_super(struct seq_file *m, struct super_block *sb)
1942 return 0;
1943 }
1944
1945 -static int show_per_level(struct seq_file *m, struct super_block *sb)
1946 +static int show_per_level(struct seq_file *m, void *unused)
1947 {
1948 + struct super_block *sb = m->private;
1949 struct reiserfs_sb_info *r = REISERFS_SB(sb);
1950 int level;
1951
1952 @@ -186,8 +189,9 @@ static int show_per_level(struct seq_file *m, struct super_block *sb)
1953 return 0;
1954 }
1955
1956 -static int show_bitmap(struct seq_file *m, struct super_block *sb)
1957 +static int show_bitmap(struct seq_file *m, void *unused)
1958 {
1959 + struct super_block *sb = m->private;
1960 struct reiserfs_sb_info *r = REISERFS_SB(sb);
1961
1962 seq_printf(m, "free_block: %lu\n"
1963 @@ -218,8 +222,9 @@ static int show_bitmap(struct seq_file *m, struct super_block *sb)
1964 return 0;
1965 }
1966
1967 -static int show_on_disk_super(struct seq_file *m, struct super_block *sb)
1968 +static int show_on_disk_super(struct seq_file *m, void *unused)
1969 {
1970 + struct super_block *sb = m->private;
1971 struct reiserfs_sb_info *sb_info = REISERFS_SB(sb);
1972 struct reiserfs_super_block *rs = sb_info->s_rs;
1973 int hash_code = DFL(s_hash_function_code);
1974 @@ -261,8 +266,9 @@ static int show_on_disk_super(struct seq_file *m, struct super_block *sb)
1975 return 0;
1976 }
1977
1978 -static int show_oidmap(struct seq_file *m, struct super_block *sb)
1979 +static int show_oidmap(struct seq_file *m, void *unused)
1980 {
1981 + struct super_block *sb = m->private;
1982 struct reiserfs_sb_info *sb_info = REISERFS_SB(sb);
1983 struct reiserfs_super_block *rs = sb_info->s_rs;
1984 unsigned int mapsize = le16_to_cpu(rs->s_v1.s_oid_cursize);
1985 @@ -291,8 +297,9 @@ static int show_oidmap(struct seq_file *m, struct super_block *sb)
1986 return 0;
1987 }
1988
1989 -static int show_journal(struct seq_file *m, struct super_block *sb)
1990 +static int show_journal(struct seq_file *m, void *unused)
1991 {
1992 + struct super_block *sb = m->private;
1993 struct reiserfs_sb_info *r = REISERFS_SB(sb);
1994 struct reiserfs_super_block *rs = r->s_rs;
1995 struct journal_params *jp = &rs->s_v1.s_journal;
1996 @@ -383,92 +390,24 @@ static int show_journal(struct seq_file *m, struct super_block *sb)
1997 return 0;
1998 }
1999
2000 -/* iterator */
2001 -static int test_sb(struct super_block *sb, void *data)
2002 -{
2003 - return data == sb;
2004 -}
2005 -
2006 -static int set_sb(struct super_block *sb, void *data)
2007 -{
2008 - return -ENOENT;
2009 -}
2010 -
2011 -struct reiserfs_seq_private {
2012 - struct super_block *sb;
2013 - int (*show) (struct seq_file *, struct super_block *);
2014 -};
2015 -
2016 -static void *r_start(struct seq_file *m, loff_t * pos)
2017 -{
2018 - struct reiserfs_seq_private *priv = m->private;
2019 - loff_t l = *pos;
2020 -
2021 - if (l)
2022 - return NULL;
2023 -
2024 - if (IS_ERR(sget(&reiserfs_fs_type, test_sb, set_sb, 0, priv->sb)))
2025 - return NULL;
2026 -
2027 - up_write(&priv->sb->s_umount);
2028 - return priv->sb;
2029 -}
2030 -
2031 -static void *r_next(struct seq_file *m, void *v, loff_t * pos)
2032 -{
2033 - ++*pos;
2034 - if (v)
2035 - deactivate_super(v);
2036 - return NULL;
2037 -}
2038 -
2039 -static void r_stop(struct seq_file *m, void *v)
2040 -{
2041 - if (v)
2042 - deactivate_super(v);
2043 -}
2044 -
2045 -static int r_show(struct seq_file *m, void *v)
2046 -{
2047 - struct reiserfs_seq_private *priv = m->private;
2048 - return priv->show(m, v);
2049 -}
2050 -
2051 -static const struct seq_operations r_ops = {
2052 - .start = r_start,
2053 - .next = r_next,
2054 - .stop = r_stop,
2055 - .show = r_show,
2056 -};
2057 -
2058 static int r_open(struct inode *inode, struct file *file)
2059 {
2060 - struct reiserfs_seq_private *priv;
2061 - int ret = seq_open_private(file, &r_ops,
2062 - sizeof(struct reiserfs_seq_private));
2063 -
2064 - if (!ret) {
2065 - struct seq_file *m = file->private_data;
2066 - priv = m->private;
2067 - priv->sb = proc_get_parent_data(inode);
2068 - priv->show = PDE_DATA(inode);
2069 - }
2070 - return ret;
2071 + return single_open(file, PDE_DATA(inode),
2072 + proc_get_parent_data(inode));
2073 }
2074
2075 static const struct file_operations r_file_operations = {
2076 .open = r_open,
2077 .read = seq_read,
2078 .llseek = seq_lseek,
2079 - .release = seq_release_private,
2080 - .owner = THIS_MODULE,
2081 + .release = single_release,
2082 };
2083
2084 static struct proc_dir_entry *proc_info_root = NULL;
2085 static const char proc_info_root_name[] = "fs/reiserfs";
2086
2087 static void add_file(struct super_block *sb, char *name,
2088 - int (*func) (struct seq_file *, struct super_block *))
2089 + int (*func) (struct seq_file *, void *))
2090 {
2091 proc_create_data(name, 0, REISERFS_SB(sb)->procdir,
2092 &r_file_operations, func);
2093 diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
2094 index f8a23c3..e2e202a 100644
2095 --- a/fs/reiserfs/super.c
2096 +++ b/fs/reiserfs/super.c
2097 @@ -499,6 +499,7 @@ int remove_save_link(struct inode *inode, int truncate)
2098 static void reiserfs_kill_sb(struct super_block *s)
2099 {
2100 if (REISERFS_SB(s)) {
2101 + reiserfs_proc_info_done(s);
2102 /*
2103 * Force any pending inode evictions to occur now. Any
2104 * inodes to be removed that have extended attributes
2105 @@ -554,8 +555,6 @@ static void reiserfs_put_super(struct super_block *s)
2106 REISERFS_SB(s)->reserved_blocks);
2107 }
2108
2109 - reiserfs_proc_info_done(s);
2110 -
2111 reiserfs_write_unlock(s);
2112 mutex_destroy(&REISERFS_SB(s)->lock);
2113 kfree(s->s_fs_info);
2114 diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
2115 index 4372658..44cdc11 100644
2116 --- a/include/linux/ftrace_event.h
2117 +++ b/include/linux/ftrace_event.h
2118 @@ -78,6 +78,11 @@ struct trace_iterator {
2119 /* trace_seq for __print_flags() and __print_symbolic() etc. */
2120 struct trace_seq tmp_seq;
2121
2122 + cpumask_var_t started;
2123 +
2124 + /* it's true when current open file is snapshot */
2125 + bool snapshot;
2126 +
2127 /* The below is zeroed out in pipe_read */
2128 struct trace_seq seq;
2129 struct trace_entry *ent;
2130 @@ -90,10 +95,7 @@ struct trace_iterator {
2131 loff_t pos;
2132 long idx;
2133
2134 - cpumask_var_t started;
2135 -
2136 - /* it's true when current open file is snapshot */
2137 - bool snapshot;
2138 + /* All new field here will be zeroed out in pipe_read */
2139 };
2140
2141 enum trace_iter_flags {
2142 diff --git a/include/linux/regmap.h b/include/linux/regmap.h
2143 index 02d84e2..f91bb41 100644
2144 --- a/include/linux/regmap.h
2145 +++ b/include/linux/regmap.h
2146 @@ -15,6 +15,7 @@
2147
2148 #include <linux/list.h>
2149 #include <linux/rbtree.h>
2150 +#include <linux/err.h>
2151
2152 struct module;
2153 struct device;
2154 diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h
2155 index 84ca436..9faf0f4 100644
2156 --- a/include/linux/sunrpc/sched.h
2157 +++ b/include/linux/sunrpc/sched.h
2158 @@ -130,6 +130,7 @@ struct rpc_task_setup {
2159 #define RPC_TASK_SOFTCONN 0x0400 /* Fail if can't connect */
2160 #define RPC_TASK_SENT 0x0800 /* message was sent */
2161 #define RPC_TASK_TIMEOUT 0x1000 /* fail with ETIMEDOUT on timeout */
2162 +#define RPC_TASK_NOCONNECT 0x2000 /* return ENOTCONN if not connected */
2163
2164 #define RPC_IS_ASYNC(t) ((t)->tk_flags & RPC_TASK_ASYNC)
2165 #define RPC_IS_SWAPPER(t) ((t)->tk_flags & RPC_TASK_SWAPPER)
2166 diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
2167 index f7bc3ce..06a5bce 100644
2168 --- a/kernel/trace/trace.c
2169 +++ b/kernel/trace/trace.c
2170 @@ -232,23 +232,43 @@ int filter_current_check_discard(struct ring_buffer *buffer,
2171 }
2172 EXPORT_SYMBOL_GPL(filter_current_check_discard);
2173
2174 -cycle_t ftrace_now(int cpu)
2175 +cycle_t buffer_ftrace_now(struct trace_buffer *buf, int cpu)
2176 {
2177 u64 ts;
2178
2179 /* Early boot up does not have a buffer yet */
2180 - if (!global_trace.trace_buffer.buffer)
2181 + if (!buf->buffer)
2182 return trace_clock_local();
2183
2184 - ts = ring_buffer_time_stamp(global_trace.trace_buffer.buffer, cpu);
2185 - ring_buffer_normalize_time_stamp(global_trace.trace_buffer.buffer, cpu, &ts);
2186 + ts = ring_buffer_time_stamp(buf->buffer, cpu);
2187 + ring_buffer_normalize_time_stamp(buf->buffer, cpu, &ts);
2188
2189 return ts;
2190 }
2191
2192 +cycle_t ftrace_now(int cpu)
2193 +{
2194 + return buffer_ftrace_now(&global_trace.trace_buffer, cpu);
2195 +}
2196 +
2197 +/**
2198 + * tracing_is_enabled - Show if global_trace has been disabled
2199 + *
2200 + * Shows if the global trace has been enabled or not. It uses the
2201 + * mirror flag "buffer_disabled" to be used in fast paths such as for
2202 + * the irqsoff tracer. But it may be inaccurate due to races. If you
2203 + * need to know the accurate state, use tracing_is_on() which is a little
2204 + * slower, but accurate.
2205 + */
2206 int tracing_is_enabled(void)
2207 {
2208 - return tracing_is_on();
2209 + /*
2210 + * For quick access (irqsoff uses this in fast path), just
2211 + * return the mirror variable of the state of the ring buffer.
2212 + * It's a little racy, but we don't really care.
2213 + */
2214 + smp_rmb();
2215 + return !global_trace.buffer_disabled;
2216 }
2217
2218 /*
2219 @@ -361,6 +381,23 @@ unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
2220 TRACE_ITER_GRAPH_TIME | TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE |
2221 TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS | TRACE_ITER_FUNCTION;
2222
2223 +void tracer_tracing_on(struct trace_array *tr)
2224 +{
2225 + if (tr->trace_buffer.buffer)
2226 + ring_buffer_record_on(tr->trace_buffer.buffer);
2227 + /*
2228 + * This flag is looked at when buffers haven't been allocated
2229 + * yet, or by some tracers (like irqsoff), that just want to
2230 + * know if the ring buffer has been disabled, but it can handle
2231 + * races of where it gets disabled but we still do a record.
2232 + * As the check is in the fast path of the tracers, it is more
2233 + * important to be fast than accurate.
2234 + */
2235 + tr->buffer_disabled = 0;
2236 + /* Make the flag seen by readers */
2237 + smp_wmb();
2238 +}
2239 +
2240 /**
2241 * tracing_on - enable tracing buffers
2242 *
2243 @@ -369,15 +406,7 @@ unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
2244 */
2245 void tracing_on(void)
2246 {
2247 - if (global_trace.trace_buffer.buffer)
2248 - ring_buffer_record_on(global_trace.trace_buffer.buffer);
2249 - /*
2250 - * This flag is only looked at when buffers haven't been
2251 - * allocated yet. We don't really care about the race
2252 - * between setting this flag and actually turning
2253 - * on the buffer.
2254 - */
2255 - global_trace.buffer_disabled = 0;
2256 + tracer_tracing_on(&global_trace);
2257 }
2258 EXPORT_SYMBOL_GPL(tracing_on);
2259
2260 @@ -571,6 +600,23 @@ void tracing_snapshot_alloc(void)
2261 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
2262 #endif /* CONFIG_TRACER_SNAPSHOT */
2263
2264 +void tracer_tracing_off(struct trace_array *tr)
2265 +{
2266 + if (tr->trace_buffer.buffer)
2267 + ring_buffer_record_off(tr->trace_buffer.buffer);
2268 + /*
2269 + * This flag is looked at when buffers haven't been allocated
2270 + * yet, or by some tracers (like irqsoff), that just want to
2271 + * know if the ring buffer has been disabled, but it can handle
2272 + * races of where it gets disabled but we still do a record.
2273 + * As the check is in the fast path of the tracers, it is more
2274 + * important to be fast than accurate.
2275 + */
2276 + tr->buffer_disabled = 1;
2277 + /* Make the flag seen by readers */
2278 + smp_wmb();
2279 +}
2280 +
2281 /**
2282 * tracing_off - turn off tracing buffers
2283 *
2284 @@ -581,26 +627,29 @@ EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
2285 */
2286 void tracing_off(void)
2287 {
2288 - if (global_trace.trace_buffer.buffer)
2289 - ring_buffer_record_off(global_trace.trace_buffer.buffer);
2290 - /*
2291 - * This flag is only looked at when buffers haven't been
2292 - * allocated yet. We don't really care about the race
2293 - * between setting this flag and actually turning
2294 - * on the buffer.
2295 - */
2296 - global_trace.buffer_disabled = 1;
2297 + tracer_tracing_off(&global_trace);
2298 }
2299 EXPORT_SYMBOL_GPL(tracing_off);
2300
2301 /**
2302 + * tracer_tracing_is_on - show real state of ring buffer enabled
2303 + * @tr : the trace array to know if ring buffer is enabled
2304 + *
2305 + * Shows real state of the ring buffer if it is enabled or not.
2306 + */
2307 +int tracer_tracing_is_on(struct trace_array *tr)
2308 +{
2309 + if (tr->trace_buffer.buffer)
2310 + return ring_buffer_record_is_on(tr->trace_buffer.buffer);
2311 + return !tr->buffer_disabled;
2312 +}
2313 +
2314 +/**
2315 * tracing_is_on - show state of ring buffers enabled
2316 */
2317 int tracing_is_on(void)
2318 {
2319 - if (global_trace.trace_buffer.buffer)
2320 - return ring_buffer_record_is_on(global_trace.trace_buffer.buffer);
2321 - return !global_trace.buffer_disabled;
2322 + return tracer_tracing_is_on(&global_trace);
2323 }
2324 EXPORT_SYMBOL_GPL(tracing_is_on);
2325
2326 @@ -1150,7 +1199,7 @@ void tracing_reset_online_cpus(struct trace_buffer *buf)
2327 /* Make sure all commits have finished */
2328 synchronize_sched();
2329
2330 - buf->time_start = ftrace_now(buf->cpu);
2331 + buf->time_start = buffer_ftrace_now(buf, buf->cpu);
2332
2333 for_each_online_cpu(cpu)
2334 ring_buffer_reset_cpu(buffer, cpu);
2335 @@ -1158,11 +1207,6 @@ void tracing_reset_online_cpus(struct trace_buffer *buf)
2336 ring_buffer_record_enable(buffer);
2337 }
2338
2339 -void tracing_reset_current(int cpu)
2340 -{
2341 - tracing_reset(&global_trace.trace_buffer, cpu);
2342 -}
2343 -
2344 /* Must have trace_types_lock held */
2345 void tracing_reset_all_online_cpus(void)
2346 {
2347 @@ -4060,7 +4104,7 @@ static int tracing_wait_pipe(struct file *filp)
2348 *
2349 * iter->pos will be 0 if we haven't read anything.
2350 */
2351 - if (!tracing_is_enabled() && iter->pos)
2352 + if (!tracing_is_on() && iter->pos)
2353 break;
2354 }
2355
2356 @@ -4121,6 +4165,7 @@ waitagain:
2357 memset(&iter->seq, 0,
2358 sizeof(struct trace_iterator) -
2359 offsetof(struct trace_iterator, seq));
2360 + cpumask_clear(iter->started);
2361 iter->pos = -1;
2362
2363 trace_event_read_lock();
2364 @@ -4437,7 +4482,7 @@ tracing_free_buffer_release(struct inode *inode, struct file *filp)
2365
2366 /* disable tracing ? */
2367 if (trace_flags & TRACE_ITER_STOP_ON_FREE)
2368 - tracing_off();
2369 + tracer_tracing_off(tr);
2370 /* resize the ring buffer to 0 */
2371 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS);
2372
2373 @@ -4602,12 +4647,12 @@ static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
2374 * New clock may not be consistent with the previous clock.
2375 * Reset the buffer so that it doesn't have incomparable timestamps.
2376 */
2377 - tracing_reset_online_cpus(&global_trace.trace_buffer);
2378 + tracing_reset_online_cpus(&tr->trace_buffer);
2379
2380 #ifdef CONFIG_TRACER_MAX_TRACE
2381 if (tr->flags & TRACE_ARRAY_FL_GLOBAL && tr->max_buffer.buffer)
2382 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func);
2383 - tracing_reset_online_cpus(&global_trace.max_buffer);
2384 + tracing_reset_online_cpus(&tr->max_buffer);
2385 #endif
2386
2387 mutex_unlock(&trace_types_lock);
2388 @@ -5771,15 +5816,10 @@ rb_simple_read(struct file *filp, char __user *ubuf,
2389 size_t cnt, loff_t *ppos)
2390 {
2391 struct trace_array *tr = filp->private_data;
2392 - struct ring_buffer *buffer = tr->trace_buffer.buffer;
2393 char buf[64];
2394 int r;
2395
2396 - if (buffer)
2397 - r = ring_buffer_record_is_on(buffer);
2398 - else
2399 - r = 0;
2400 -
2401 + r = tracer_tracing_is_on(tr);
2402 r = sprintf(buf, "%d\n", r);
2403
2404 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
2405 @@ -5801,11 +5841,11 @@ rb_simple_write(struct file *filp, const char __user *ubuf,
2406 if (buffer) {
2407 mutex_lock(&trace_types_lock);
2408 if (val) {
2409 - ring_buffer_record_on(buffer);
2410 + tracer_tracing_on(tr);
2411 if (tr->current_trace->start)
2412 tr->current_trace->start(tr);
2413 } else {
2414 - ring_buffer_record_off(buffer);
2415 + tracer_tracing_off(tr);
2416 if (tr->current_trace->stop)
2417 tr->current_trace->stop(tr);
2418 }
2419 diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c
2420 index b19d065..2aefbee 100644
2421 --- a/kernel/trace/trace_irqsoff.c
2422 +++ b/kernel/trace/trace_irqsoff.c
2423 @@ -373,7 +373,7 @@ start_critical_timing(unsigned long ip, unsigned long parent_ip)
2424 struct trace_array_cpu *data;
2425 unsigned long flags;
2426
2427 - if (likely(!tracer_enabled))
2428 + if (!tracer_enabled || !tracing_is_enabled())
2429 return;
2430
2431 cpu = raw_smp_processor_id();
2432 @@ -416,7 +416,7 @@ stop_critical_timing(unsigned long ip, unsigned long parent_ip)
2433 else
2434 return;
2435
2436 - if (!tracer_enabled)
2437 + if (!tracer_enabled || !tracing_is_enabled())
2438 return;
2439
2440 data = per_cpu_ptr(tr->trace_buffer.data, cpu);
2441 diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
2442 index 5a750b9..426f8fc 100644
2443 --- a/net/sunrpc/clnt.c
2444 +++ b/net/sunrpc/clnt.c
2445 @@ -1644,6 +1644,10 @@ call_connect(struct rpc_task *task)
2446 task->tk_action = call_connect_status;
2447 if (task->tk_status < 0)
2448 return;
2449 + if (task->tk_flags & RPC_TASK_NOCONNECT) {
2450 + rpc_exit(task, -ENOTCONN);
2451 + return;
2452 + }
2453 xprt_connect(task);
2454 }
2455 }
2456 diff --git a/net/sunrpc/netns.h b/net/sunrpc/netns.h
2457 index 74d948f..779742c 100644
2458 --- a/net/sunrpc/netns.h
2459 +++ b/net/sunrpc/netns.h
2460 @@ -23,6 +23,7 @@ struct sunrpc_net {
2461 struct rpc_clnt *rpcb_local_clnt4;
2462 spinlock_t rpcb_clnt_lock;
2463 unsigned int rpcb_users;
2464 + unsigned int rpcb_is_af_local : 1;
2465
2466 struct mutex gssp_lock;
2467 wait_queue_head_t gssp_wq;
2468 diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
2469 index 3df764d..1891a10 100644
2470 --- a/net/sunrpc/rpcb_clnt.c
2471 +++ b/net/sunrpc/rpcb_clnt.c
2472 @@ -204,13 +204,15 @@ void rpcb_put_local(struct net *net)
2473 }
2474
2475 static void rpcb_set_local(struct net *net, struct rpc_clnt *clnt,
2476 - struct rpc_clnt *clnt4)
2477 + struct rpc_clnt *clnt4,
2478 + bool is_af_local)
2479 {
2480 struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
2481
2482 /* Protected by rpcb_create_local_mutex */
2483 sn->rpcb_local_clnt = clnt;
2484 sn->rpcb_local_clnt4 = clnt4;
2485 + sn->rpcb_is_af_local = is_af_local ? 1 : 0;
2486 smp_wmb();
2487 sn->rpcb_users = 1;
2488 dprintk("RPC: created new rpcb local clients (rpcb_local_clnt: "
2489 @@ -238,6 +240,14 @@ static int rpcb_create_local_unix(struct net *net)
2490 .program = &rpcb_program,
2491 .version = RPCBVERS_2,
2492 .authflavor = RPC_AUTH_NULL,
2493 + /*
2494 + * We turn off the idle timeout to prevent the kernel
2495 + * from automatically disconnecting the socket.
2496 + * Otherwise, we'd have to cache the mount namespace
2497 + * of the caller and somehow pass that to the socket
2498 + * reconnect code.
2499 + */
2500 + .flags = RPC_CLNT_CREATE_NO_IDLE_TIMEOUT,
2501 };
2502 struct rpc_clnt *clnt, *clnt4;
2503 int result = 0;
2504 @@ -263,7 +273,7 @@ static int rpcb_create_local_unix(struct net *net)
2505 clnt4 = NULL;
2506 }
2507
2508 - rpcb_set_local(net, clnt, clnt4);
2509 + rpcb_set_local(net, clnt, clnt4, true);
2510
2511 out:
2512 return result;
2513 @@ -315,7 +325,7 @@ static int rpcb_create_local_net(struct net *net)
2514 clnt4 = NULL;
2515 }
2516
2517 - rpcb_set_local(net, clnt, clnt4);
2518 + rpcb_set_local(net, clnt, clnt4, false);
2519
2520 out:
2521 return result;
2522 @@ -376,13 +386,16 @@ static struct rpc_clnt *rpcb_create(struct net *net, const char *hostname,
2523 return rpc_create(&args);
2524 }
2525
2526 -static int rpcb_register_call(struct rpc_clnt *clnt, struct rpc_message *msg)
2527 +static int rpcb_register_call(struct sunrpc_net *sn, struct rpc_clnt *clnt, struct rpc_message *msg, bool is_set)
2528 {
2529 - int result, error = 0;
2530 + int flags = RPC_TASK_NOCONNECT;
2531 + int error, result = 0;
2532
2533 + if (is_set || !sn->rpcb_is_af_local)
2534 + flags = RPC_TASK_SOFTCONN;
2535 msg->rpc_resp = &result;
2536
2537 - error = rpc_call_sync(clnt, msg, RPC_TASK_SOFTCONN);
2538 + error = rpc_call_sync(clnt, msg, flags);
2539 if (error < 0) {
2540 dprintk("RPC: failed to contact local rpcbind "
2541 "server (errno %d).\n", -error);
2542 @@ -439,16 +452,19 @@ int rpcb_register(struct net *net, u32 prog, u32 vers, int prot, unsigned short
2543 .rpc_argp = &map,
2544 };
2545 struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
2546 + bool is_set = false;
2547
2548 dprintk("RPC: %sregistering (%u, %u, %d, %u) with local "
2549 "rpcbind\n", (port ? "" : "un"),
2550 prog, vers, prot, port);
2551
2552 msg.rpc_proc = &rpcb_procedures2[RPCBPROC_UNSET];
2553 - if (port)
2554 + if (port != 0) {
2555 msg.rpc_proc = &rpcb_procedures2[RPCBPROC_SET];
2556 + is_set = true;
2557 + }
2558
2559 - return rpcb_register_call(sn->rpcb_local_clnt, &msg);
2560 + return rpcb_register_call(sn, sn->rpcb_local_clnt, &msg, is_set);
2561 }
2562
2563 /*
2564 @@ -461,6 +477,7 @@ static int rpcb_register_inet4(struct sunrpc_net *sn,
2565 const struct sockaddr_in *sin = (const struct sockaddr_in *)sap;
2566 struct rpcbind_args *map = msg->rpc_argp;
2567 unsigned short port = ntohs(sin->sin_port);
2568 + bool is_set = false;
2569 int result;
2570
2571 map->r_addr = rpc_sockaddr2uaddr(sap, GFP_KERNEL);
2572 @@ -471,10 +488,12 @@ static int rpcb_register_inet4(struct sunrpc_net *sn,
2573 map->r_addr, map->r_netid);
2574
2575 msg->rpc_proc = &rpcb_procedures4[RPCBPROC_UNSET];
2576 - if (port)
2577 + if (port != 0) {
2578 msg->rpc_proc = &rpcb_procedures4[RPCBPROC_SET];
2579 + is_set = true;
2580 + }
2581
2582 - result = rpcb_register_call(sn->rpcb_local_clnt4, msg);
2583 + result = rpcb_register_call(sn, sn->rpcb_local_clnt4, msg, is_set);
2584 kfree(map->r_addr);
2585 return result;
2586 }
2587 @@ -489,6 +508,7 @@ static int rpcb_register_inet6(struct sunrpc_net *sn,
2588 const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sap;
2589 struct rpcbind_args *map = msg->rpc_argp;
2590 unsigned short port = ntohs(sin6->sin6_port);
2591 + bool is_set = false;
2592 int result;
2593
2594 map->r_addr = rpc_sockaddr2uaddr(sap, GFP_KERNEL);
2595 @@ -499,10 +519,12 @@ static int rpcb_register_inet6(struct sunrpc_net *sn,
2596 map->r_addr, map->r_netid);
2597
2598 msg->rpc_proc = &rpcb_procedures4[RPCBPROC_UNSET];
2599 - if (port)
2600 + if (port != 0) {
2601 msg->rpc_proc = &rpcb_procedures4[RPCBPROC_SET];
2602 + is_set = true;
2603 + }
2604
2605 - result = rpcb_register_call(sn->rpcb_local_clnt4, msg);
2606 + result = rpcb_register_call(sn, sn->rpcb_local_clnt4, msg, is_set);
2607 kfree(map->r_addr);
2608 return result;
2609 }
2610 @@ -519,7 +541,7 @@ static int rpcb_unregister_all_protofamilies(struct sunrpc_net *sn,
2611 map->r_addr = "";
2612 msg->rpc_proc = &rpcb_procedures4[RPCBPROC_UNSET];
2613
2614 - return rpcb_register_call(sn->rpcb_local_clnt4, msg);
2615 + return rpcb_register_call(sn, sn->rpcb_local_clnt4, msg, false);
2616 }
2617
2618 /**
2619 diff --git a/sound/usb/6fire/comm.c b/sound/usb/6fire/comm.c
2620 index 9e6e3ff..23452ee 100644
2621 --- a/sound/usb/6fire/comm.c
2622 +++ b/sound/usb/6fire/comm.c
2623 @@ -110,19 +110,37 @@ static int usb6fire_comm_send_buffer(u8 *buffer, struct usb_device *dev)
2624 static int usb6fire_comm_write8(struct comm_runtime *rt, u8 request,
2625 u8 reg, u8 value)
2626 {
2627 - u8 buffer[13]; /* 13: maximum length of message */
2628 + u8 *buffer;
2629 + int ret;
2630 +
2631 + /* 13: maximum length of message */
2632 + buffer = kmalloc(13, GFP_KERNEL);
2633 + if (!buffer)
2634 + return -ENOMEM;
2635
2636 usb6fire_comm_init_buffer(buffer, 0x00, request, reg, value, 0x00);
2637 - return usb6fire_comm_send_buffer(buffer, rt->chip->dev);
2638 + ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev);
2639 +
2640 + kfree(buffer);
2641 + return ret;
2642 }
2643
2644 static int usb6fire_comm_write16(struct comm_runtime *rt, u8 request,
2645 u8 reg, u8 vl, u8 vh)
2646 {
2647 - u8 buffer[13]; /* 13: maximum length of message */
2648 + u8 *buffer;
2649 + int ret;
2650 +
2651 + /* 13: maximum length of message */
2652 + buffer = kmalloc(13, GFP_KERNEL);
2653 + if (!buffer)
2654 + return -ENOMEM;
2655
2656 usb6fire_comm_init_buffer(buffer, 0x00, request, reg, vl, vh);
2657 - return usb6fire_comm_send_buffer(buffer, rt->chip->dev);
2658 + ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev);
2659 +
2660 + kfree(buffer);
2661 + return ret;
2662 }
2663
2664 int usb6fire_comm_init(struct sfire_chip *chip)
2665 @@ -135,6 +153,12 @@ int usb6fire_comm_init(struct sfire_chip *chip)
2666 if (!rt)
2667 return -ENOMEM;
2668
2669 + rt->receiver_buffer = kzalloc(COMM_RECEIVER_BUFSIZE, GFP_KERNEL);
2670 + if (!rt->receiver_buffer) {
2671 + kfree(rt);
2672 + return -ENOMEM;
2673 + }
2674 +
2675 urb = &rt->receiver;
2676 rt->serial = 1;
2677 rt->chip = chip;
2678 @@ -153,6 +177,7 @@ int usb6fire_comm_init(struct sfire_chip *chip)
2679 urb->interval = 1;
2680 ret = usb_submit_urb(urb, GFP_KERNEL);
2681 if (ret < 0) {
2682 + kfree(rt->receiver_buffer);
2683 kfree(rt);
2684 snd_printk(KERN_ERR PREFIX "cannot create comm data receiver.");
2685 return ret;
2686 @@ -171,6 +196,9 @@ void usb6fire_comm_abort(struct sfire_chip *chip)
2687
2688 void usb6fire_comm_destroy(struct sfire_chip *chip)
2689 {
2690 - kfree(chip->comm);
2691 + struct comm_runtime *rt = chip->comm;
2692 +
2693 + kfree(rt->receiver_buffer);
2694 + kfree(rt);
2695 chip->comm = NULL;
2696 }
2697 diff --git a/sound/usb/6fire/comm.h b/sound/usb/6fire/comm.h
2698 index 6a0840b..780d5ed 100644
2699 --- a/sound/usb/6fire/comm.h
2700 +++ b/sound/usb/6fire/comm.h
2701 @@ -24,7 +24,7 @@ struct comm_runtime {
2702 struct sfire_chip *chip;
2703
2704 struct urb receiver;
2705 - u8 receiver_buffer[COMM_RECEIVER_BUFSIZE];
2706 + u8 *receiver_buffer;
2707
2708 u8 serial; /* urb serial */
2709
2710 diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
2711 index 7a444b5..659950e 100644
2712 --- a/sound/usb/endpoint.c
2713 +++ b/sound/usb/endpoint.c
2714 @@ -591,17 +591,16 @@ static int data_ep_set_params(struct snd_usb_endpoint *ep,
2715 ep->stride = frame_bits >> 3;
2716 ep->silence_value = pcm_format == SNDRV_PCM_FORMAT_U8 ? 0x80 : 0;
2717
2718 - /* calculate max. frequency */
2719 - if (ep->maxpacksize) {
2720 + /* assume max. frequency is 25% higher than nominal */
2721 + ep->freqmax = ep->freqn + (ep->freqn >> 2);
2722 + maxsize = ((ep->freqmax + 0xffff) * (frame_bits >> 3))
2723 + >> (16 - ep->datainterval);
2724 + /* but wMaxPacketSize might reduce this */
2725 + if (ep->maxpacksize && ep->maxpacksize < maxsize) {
2726 /* whatever fits into a max. size packet */
2727 maxsize = ep->maxpacksize;
2728 ep->freqmax = (maxsize / (frame_bits >> 3))
2729 << (16 - ep->datainterval);
2730 - } else {
2731 - /* no max. packet size: just take 25% higher than nominal */
2732 - ep->freqmax = ep->freqn + (ep->freqn >> 2);
2733 - maxsize = ((ep->freqmax + 0xffff) * (frame_bits >> 3))
2734 - >> (16 - ep->datainterval);
2735 }
2736
2737 if (ep->fill_max)