Annotation of /trunk/kernel26-alx/patches-3.10/0146-3.10.47-all-fixes.patch
Parent Directory | Revision Log
Revision 2672 -
(hide annotations)
(download)
Tue Jul 21 16:46:35 2015 UTC (9 years, 2 months ago) by niro
File size: 46364 byte(s)
Tue Jul 21 16:46:35 2015 UTC (9 years, 2 months ago) by niro
File size: 46364 byte(s)
-3.10.84-alx-r1
1 | niro | 2672 | diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches |
2 | index 6e97e73d87b5..4dbba7e100a1 100644 | ||
3 | --- a/Documentation/SubmittingPatches | ||
4 | +++ b/Documentation/SubmittingPatches | ||
5 | @@ -131,6 +131,20 @@ If you cannot condense your patch set into a smaller set of patches, | ||
6 | then only post say 15 or so at a time and wait for review and integration. | ||
7 | |||
8 | |||
9 | +If your patch fixes a bug in a specific commit, e.g. you found an issue using | ||
10 | +git-bisect, please use the 'Fixes:' tag with the first 12 characters of the | ||
11 | +SHA-1 ID, and the one line summary. | ||
12 | +Example: | ||
13 | + | ||
14 | + Fixes: e21d2170f366 ("video: remove unnecessary platform_set_drvdata()") | ||
15 | + | ||
16 | +The following git-config settings can be used to add a pretty format for | ||
17 | +outputting the above style in the git log or git show commands | ||
18 | + | ||
19 | + [core] | ||
20 | + abbrev = 12 | ||
21 | + [pretty] | ||
22 | + fixes = Fixes: %h (\"%s\") | ||
23 | |||
24 | 4) Style check your changes. | ||
25 | |||
26 | @@ -420,7 +434,7 @@ person it names. This tag documents that potentially interested parties | ||
27 | have been included in the discussion | ||
28 | |||
29 | |||
30 | -14) Using Reported-by:, Tested-by:, Reviewed-by: and Suggested-by: | ||
31 | +14) Using Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: and Fixes: | ||
32 | |||
33 | If this patch fixes a problem reported by somebody else, consider adding a | ||
34 | Reported-by: tag to credit the reporter for their contribution. Please | ||
35 | @@ -475,6 +489,12 @@ idea was not posted in a public forum. That said, if we diligently credit our | ||
36 | idea reporters, they will, hopefully, be inspired to help us again in the | ||
37 | future. | ||
38 | |||
39 | +A Fixes: tag indicates that the patch fixes an issue in a previous commit. It | ||
40 | +is used to make it easy to determine where a bug originated, which can help | ||
41 | +review a bug fix. This tag also assists the stable kernel team in determining | ||
42 | +which stable kernel versions should receive your fix. This is the preferred | ||
43 | +method for indicating a bug fixed by the patch. See #2 above for more details. | ||
44 | + | ||
45 | |||
46 | 15) The canonical patch format | ||
47 | |||
48 | diff --git a/Makefile b/Makefile | ||
49 | index c226f110181d..6a3b46d1863c 100644 | ||
50 | --- a/Makefile | ||
51 | +++ b/Makefile | ||
52 | @@ -1,6 +1,6 @@ | ||
53 | VERSION = 3 | ||
54 | PATCHLEVEL = 10 | ||
55 | -SUBLEVEL = 46 | ||
56 | +SUBLEVEL = 47 | ||
57 | EXTRAVERSION = | ||
58 | NAME = TOSSUG Baby Fish | ||
59 | |||
60 | diff --git a/arch/mips/kernel/irq-msc01.c b/arch/mips/kernel/irq-msc01.c | ||
61 | index fab40f7d2e03..ac9facc08694 100644 | ||
62 | --- a/arch/mips/kernel/irq-msc01.c | ||
63 | +++ b/arch/mips/kernel/irq-msc01.c | ||
64 | @@ -131,7 +131,7 @@ void __init init_msc_irqs(unsigned long icubase, unsigned int irqbase, msc_irqma | ||
65 | |||
66 | board_bind_eic_interrupt = &msc_bind_eic_interrupt; | ||
67 | |||
68 | - for (; nirq >= 0; nirq--, imp++) { | ||
69 | + for (; nirq > 0; nirq--, imp++) { | ||
70 | int n = imp->im_irq; | ||
71 | |||
72 | switch (imp->im_type) { | ||
73 | diff --git a/arch/mips/kvm/kvm_mips.c b/arch/mips/kvm/kvm_mips.c | ||
74 | index 426345ac6f6e..2c7b3ade8ec0 100644 | ||
75 | --- a/arch/mips/kvm/kvm_mips.c | ||
76 | +++ b/arch/mips/kvm/kvm_mips.c | ||
77 | @@ -149,9 +149,7 @@ void kvm_mips_free_vcpus(struct kvm *kvm) | ||
78 | if (kvm->arch.guest_pmap[i] != KVM_INVALID_PAGE) | ||
79 | kvm_mips_release_pfn_clean(kvm->arch.guest_pmap[i]); | ||
80 | } | ||
81 | - | ||
82 | - if (kvm->arch.guest_pmap) | ||
83 | - kfree(kvm->arch.guest_pmap); | ||
84 | + kfree(kvm->arch.guest_pmap); | ||
85 | |||
86 | kvm_for_each_vcpu(i, vcpu, kvm) { | ||
87 | kvm_arch_vcpu_free(vcpu); | ||
88 | @@ -384,12 +382,9 @@ void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu) | ||
89 | |||
90 | kvm_mips_dump_stats(vcpu); | ||
91 | |||
92 | - if (vcpu->arch.guest_ebase) | ||
93 | - kfree(vcpu->arch.guest_ebase); | ||
94 | - | ||
95 | - if (vcpu->arch.kseg0_commpage) | ||
96 | - kfree(vcpu->arch.kseg0_commpage); | ||
97 | - | ||
98 | + kfree(vcpu->arch.guest_ebase); | ||
99 | + kfree(vcpu->arch.kseg0_commpage); | ||
100 | + kfree(vcpu); | ||
101 | } | ||
102 | |||
103 | void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) | ||
104 | diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/asm/systbl.h | ||
105 | index 43523fe0d8b4..05fcdd826829 100644 | ||
106 | --- a/arch/powerpc/include/asm/systbl.h | ||
107 | +++ b/arch/powerpc/include/asm/systbl.h | ||
108 | @@ -190,7 +190,7 @@ SYSCALL_SPU(getcwd) | ||
109 | SYSCALL_SPU(capget) | ||
110 | SYSCALL_SPU(capset) | ||
111 | COMPAT_SYS(sigaltstack) | ||
112 | -COMPAT_SYS_SPU(sendfile) | ||
113 | +SYSX_SPU(sys_sendfile64,compat_sys_sendfile,sys_sendfile) | ||
114 | SYSCALL(ni_syscall) | ||
115 | SYSCALL(ni_syscall) | ||
116 | PPC_SYS(vfork) | ||
117 | diff --git a/arch/powerpc/include/uapi/asm/cputable.h b/arch/powerpc/include/uapi/asm/cputable.h | ||
118 | index 5b7657959faa..de2c0e4ee1aa 100644 | ||
119 | --- a/arch/powerpc/include/uapi/asm/cputable.h | ||
120 | +++ b/arch/powerpc/include/uapi/asm/cputable.h | ||
121 | @@ -41,5 +41,6 @@ | ||
122 | #define PPC_FEATURE2_EBB 0x10000000 | ||
123 | #define PPC_FEATURE2_ISEL 0x08000000 | ||
124 | #define PPC_FEATURE2_TAR 0x04000000 | ||
125 | +#define PPC_FEATURE2_VEC_CRYPTO 0x02000000 | ||
126 | |||
127 | #endif /* _UAPI__ASM_POWERPC_CPUTABLE_H */ | ||
128 | diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c | ||
129 | index 2a45d0f04385..b2dc45522850 100644 | ||
130 | --- a/arch/powerpc/kernel/cputable.c | ||
131 | +++ b/arch/powerpc/kernel/cputable.c | ||
132 | @@ -105,7 +105,8 @@ extern void __restore_cpu_e6500(void); | ||
133 | PPC_FEATURE_PSERIES_PERFMON_COMPAT) | ||
134 | #define COMMON_USER2_POWER8 (PPC_FEATURE2_ARCH_2_07 | \ | ||
135 | PPC_FEATURE2_HTM_COMP | PPC_FEATURE2_DSCR | \ | ||
136 | - PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR) | ||
137 | + PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \ | ||
138 | + PPC_FEATURE2_VEC_CRYPTO) | ||
139 | #define COMMON_USER_PA6T (COMMON_USER_PPC64 | PPC_FEATURE_PA6T |\ | ||
140 | PPC_FEATURE_TRUE_LE | \ | ||
141 | PPC_FEATURE_HAS_ALTIVEC_COMP) | ||
142 | diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c | ||
143 | index 5fc29ad7e26f..57fd5c1e8e89 100644 | ||
144 | --- a/arch/powerpc/kernel/time.c | ||
145 | +++ b/arch/powerpc/kernel/time.c | ||
146 | @@ -512,7 +512,7 @@ void timer_interrupt(struct pt_regs * regs) | ||
147 | |||
148 | __get_cpu_var(irq_stat).timer_irqs++; | ||
149 | |||
150 | -#if defined(CONFIG_PPC32) && defined(CONFIG_PMAC) | ||
151 | +#if defined(CONFIG_PPC32) && defined(CONFIG_PPC_PMAC) | ||
152 | if (atomic_read(&ppc_n_lost_interrupts) != 0) | ||
153 | do_IRQ(regs); | ||
154 | #endif | ||
155 | diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c | ||
156 | index e15c521846ca..08490ecc465e 100644 | ||
157 | --- a/arch/powerpc/lib/sstep.c | ||
158 | +++ b/arch/powerpc/lib/sstep.c | ||
159 | @@ -1395,7 +1395,7 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) | ||
160 | regs->gpr[rd] = byterev_4(val); | ||
161 | goto ldst_done; | ||
162 | |||
163 | -#ifdef CONFIG_PPC_CPU | ||
164 | +#ifdef CONFIG_PPC_FPU | ||
165 | case 535: /* lfsx */ | ||
166 | case 567: /* lfsux */ | ||
167 | if (!(regs->msr & MSR_FP)) | ||
168 | diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c | ||
169 | index b456b157d33d..68f97d5a4679 100644 | ||
170 | --- a/arch/powerpc/platforms/pseries/eeh_pseries.c | ||
171 | +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c | ||
172 | @@ -400,6 +400,7 @@ static int pseries_eeh_get_state(struct eeh_pe *pe, int *state) | ||
173 | } else { | ||
174 | result = EEH_STATE_NOT_SUPPORT; | ||
175 | } | ||
176 | + break; | ||
177 | default: | ||
178 | result = EEH_STATE_NOT_SUPPORT; | ||
179 | } | ||
180 | diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h | ||
181 | index 942a08623a1a..68e9f007cd4a 100644 | ||
182 | --- a/arch/x86/include/asm/ptrace.h | ||
183 | +++ b/arch/x86/include/asm/ptrace.h | ||
184 | @@ -232,6 +232,22 @@ static inline unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, | ||
185 | |||
186 | #define ARCH_HAS_USER_SINGLE_STEP_INFO | ||
187 | |||
188 | +/* | ||
189 | + * When hitting ptrace_stop(), we cannot return using SYSRET because | ||
190 | + * that does not restore the full CPU state, only a minimal set. The | ||
191 | + * ptracer can change arbitrary register values, which is usually okay | ||
192 | + * because the usual ptrace stops run off the signal delivery path which | ||
193 | + * forces IRET; however, ptrace_event() stops happen in arbitrary places | ||
194 | + * in the kernel and don't force IRET path. | ||
195 | + * | ||
196 | + * So force IRET path after a ptrace stop. | ||
197 | + */ | ||
198 | +#define arch_ptrace_stop_needed(code, info) \ | ||
199 | +({ \ | ||
200 | + set_thread_flag(TIF_NOTIFY_RESUME); \ | ||
201 | + false; \ | ||
202 | +}) | ||
203 | + | ||
204 | struct user_desc; | ||
205 | extern int do_get_thread_area(struct task_struct *p, int idx, | ||
206 | struct user_desc __user *info); | ||
207 | diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c | ||
208 | index 6e514583aa76..0d94e09221d9 100644 | ||
209 | --- a/drivers/block/mtip32xx/mtip32xx.c | ||
210 | +++ b/drivers/block/mtip32xx/mtip32xx.c | ||
211 | @@ -1493,6 +1493,37 @@ static inline void ata_swap_string(u16 *buf, unsigned int len) | ||
212 | be16_to_cpus(&buf[i]); | ||
213 | } | ||
214 | |||
215 | +static void mtip_set_timeout(struct driver_data *dd, | ||
216 | + struct host_to_dev_fis *fis, | ||
217 | + unsigned int *timeout, u8 erasemode) | ||
218 | +{ | ||
219 | + switch (fis->command) { | ||
220 | + case ATA_CMD_DOWNLOAD_MICRO: | ||
221 | + *timeout = 120000; /* 2 minutes */ | ||
222 | + break; | ||
223 | + case ATA_CMD_SEC_ERASE_UNIT: | ||
224 | + case 0xFC: | ||
225 | + if (erasemode) | ||
226 | + *timeout = ((*(dd->port->identify + 90) * 2) * 60000); | ||
227 | + else | ||
228 | + *timeout = ((*(dd->port->identify + 89) * 2) * 60000); | ||
229 | + break; | ||
230 | + case ATA_CMD_STANDBYNOW1: | ||
231 | + *timeout = 120000; /* 2 minutes */ | ||
232 | + break; | ||
233 | + case 0xF7: | ||
234 | + case 0xFA: | ||
235 | + *timeout = 60000; /* 60 seconds */ | ||
236 | + break; | ||
237 | + case ATA_CMD_SMART: | ||
238 | + *timeout = 15000; /* 15 seconds */ | ||
239 | + break; | ||
240 | + default: | ||
241 | + *timeout = MTIP_IOCTL_COMMAND_TIMEOUT_MS; | ||
242 | + break; | ||
243 | + } | ||
244 | +} | ||
245 | + | ||
246 | /* | ||
247 | * Request the device identity information. | ||
248 | * | ||
249 | @@ -1602,6 +1633,7 @@ static int mtip_standby_immediate(struct mtip_port *port) | ||
250 | int rv; | ||
251 | struct host_to_dev_fis fis; | ||
252 | unsigned long start; | ||
253 | + unsigned int timeout; | ||
254 | |||
255 | /* Build the FIS. */ | ||
256 | memset(&fis, 0, sizeof(struct host_to_dev_fis)); | ||
257 | @@ -1609,6 +1641,8 @@ static int mtip_standby_immediate(struct mtip_port *port) | ||
258 | fis.opts = 1 << 7; | ||
259 | fis.command = ATA_CMD_STANDBYNOW1; | ||
260 | |||
261 | + mtip_set_timeout(port->dd, &fis, &timeout, 0); | ||
262 | + | ||
263 | start = jiffies; | ||
264 | rv = mtip_exec_internal_command(port, | ||
265 | &fis, | ||
266 | @@ -1617,7 +1651,7 @@ static int mtip_standby_immediate(struct mtip_port *port) | ||
267 | 0, | ||
268 | 0, | ||
269 | GFP_ATOMIC, | ||
270 | - 15000); | ||
271 | + timeout); | ||
272 | dbg_printk(MTIP_DRV_NAME "Time taken to complete standby cmd: %d ms\n", | ||
273 | jiffies_to_msecs(jiffies - start)); | ||
274 | if (rv) | ||
275 | @@ -2156,36 +2190,6 @@ static unsigned int implicit_sector(unsigned char command, | ||
276 | } | ||
277 | return rv; | ||
278 | } | ||
279 | -static void mtip_set_timeout(struct driver_data *dd, | ||
280 | - struct host_to_dev_fis *fis, | ||
281 | - unsigned int *timeout, u8 erasemode) | ||
282 | -{ | ||
283 | - switch (fis->command) { | ||
284 | - case ATA_CMD_DOWNLOAD_MICRO: | ||
285 | - *timeout = 120000; /* 2 minutes */ | ||
286 | - break; | ||
287 | - case ATA_CMD_SEC_ERASE_UNIT: | ||
288 | - case 0xFC: | ||
289 | - if (erasemode) | ||
290 | - *timeout = ((*(dd->port->identify + 90) * 2) * 60000); | ||
291 | - else | ||
292 | - *timeout = ((*(dd->port->identify + 89) * 2) * 60000); | ||
293 | - break; | ||
294 | - case ATA_CMD_STANDBYNOW1: | ||
295 | - *timeout = 120000; /* 2 minutes */ | ||
296 | - break; | ||
297 | - case 0xF7: | ||
298 | - case 0xFA: | ||
299 | - *timeout = 60000; /* 60 seconds */ | ||
300 | - break; | ||
301 | - case ATA_CMD_SMART: | ||
302 | - *timeout = 15000; /* 15 seconds */ | ||
303 | - break; | ||
304 | - default: | ||
305 | - *timeout = MTIP_IOCTL_COMMAND_TIMEOUT_MS; | ||
306 | - break; | ||
307 | - } | ||
308 | -} | ||
309 | |||
310 | /* | ||
311 | * Executes a taskfile | ||
312 | @@ -4284,6 +4288,57 @@ static DEFINE_HANDLER(5); | ||
313 | static DEFINE_HANDLER(6); | ||
314 | static DEFINE_HANDLER(7); | ||
315 | |||
316 | +static void mtip_disable_link_opts(struct driver_data *dd, struct pci_dev *pdev) | ||
317 | +{ | ||
318 | + int pos; | ||
319 | + unsigned short pcie_dev_ctrl; | ||
320 | + | ||
321 | + pos = pci_find_capability(pdev, PCI_CAP_ID_EXP); | ||
322 | + if (pos) { | ||
323 | + pci_read_config_word(pdev, | ||
324 | + pos + PCI_EXP_DEVCTL, | ||
325 | + &pcie_dev_ctrl); | ||
326 | + if (pcie_dev_ctrl & (1 << 11) || | ||
327 | + pcie_dev_ctrl & (1 << 4)) { | ||
328 | + dev_info(&dd->pdev->dev, | ||
329 | + "Disabling ERO/No-Snoop on bridge device %04x:%04x\n", | ||
330 | + pdev->vendor, pdev->device); | ||
331 | + pcie_dev_ctrl &= ~(PCI_EXP_DEVCTL_NOSNOOP_EN | | ||
332 | + PCI_EXP_DEVCTL_RELAX_EN); | ||
333 | + pci_write_config_word(pdev, | ||
334 | + pos + PCI_EXP_DEVCTL, | ||
335 | + pcie_dev_ctrl); | ||
336 | + } | ||
337 | + } | ||
338 | +} | ||
339 | + | ||
340 | +static void mtip_fix_ero_nosnoop(struct driver_data *dd, struct pci_dev *pdev) | ||
341 | +{ | ||
342 | + /* | ||
343 | + * This workaround is specific to AMD/ATI chipset with a PCI upstream | ||
344 | + * device with device id 0x5aXX | ||
345 | + */ | ||
346 | + if (pdev->bus && pdev->bus->self) { | ||
347 | + if (pdev->bus->self->vendor == PCI_VENDOR_ID_ATI && | ||
348 | + ((pdev->bus->self->device & 0xff00) == 0x5a00)) { | ||
349 | + mtip_disable_link_opts(dd, pdev->bus->self); | ||
350 | + } else { | ||
351 | + /* Check further up the topology */ | ||
352 | + struct pci_dev *parent_dev = pdev->bus->self; | ||
353 | + if (parent_dev->bus && | ||
354 | + parent_dev->bus->parent && | ||
355 | + parent_dev->bus->parent->self && | ||
356 | + parent_dev->bus->parent->self->vendor == | ||
357 | + PCI_VENDOR_ID_ATI && | ||
358 | + (parent_dev->bus->parent->self->device & | ||
359 | + 0xff00) == 0x5a00) { | ||
360 | + mtip_disable_link_opts(dd, | ||
361 | + parent_dev->bus->parent->self); | ||
362 | + } | ||
363 | + } | ||
364 | + } | ||
365 | +} | ||
366 | + | ||
367 | /* | ||
368 | * Called for each supported PCI device detected. | ||
369 | * | ||
370 | @@ -4435,6 +4490,8 @@ static int mtip_pci_probe(struct pci_dev *pdev, | ||
371 | goto block_initialize_err; | ||
372 | } | ||
373 | |||
374 | + mtip_fix_ero_nosnoop(dd, pdev); | ||
375 | + | ||
376 | /* Initialize the block layer. */ | ||
377 | rv = mtip_block_initialize(dd); | ||
378 | if (rv < 0) { | ||
379 | @@ -4727,13 +4784,13 @@ static int __init mtip_init(void) | ||
380 | */ | ||
381 | static void __exit mtip_exit(void) | ||
382 | { | ||
383 | - debugfs_remove_recursive(dfs_parent); | ||
384 | - | ||
385 | /* Release the allocated major block device number. */ | ||
386 | unregister_blkdev(mtip_major, MTIP_DRV_NAME); | ||
387 | |||
388 | /* Unregister the PCI driver. */ | ||
389 | pci_unregister_driver(&mtip_pci_driver); | ||
390 | + | ||
391 | + debugfs_remove_recursive(dfs_parent); | ||
392 | } | ||
393 | |||
394 | MODULE_AUTHOR("Micron Technology, Inc"); | ||
395 | diff --git a/drivers/extcon/extcon-max77693.c b/drivers/extcon/extcon-max77693.c | ||
396 | index b56bdaa27d4b..9966fc0a527f 100644 | ||
397 | --- a/drivers/extcon/extcon-max77693.c | ||
398 | +++ b/drivers/extcon/extcon-max77693.c | ||
399 | @@ -1180,7 +1180,7 @@ static int max77693_muic_probe(struct platform_device *pdev) | ||
400 | |||
401 | |||
402 | /* Initialize MUIC register by using platform data or default data */ | ||
403 | - if (pdata->muic_data) { | ||
404 | + if (pdata && pdata->muic_data) { | ||
405 | init_data = pdata->muic_data->init_data; | ||
406 | num_init_data = pdata->muic_data->num_init_data; | ||
407 | } else { | ||
408 | @@ -1213,7 +1213,7 @@ static int max77693_muic_probe(struct platform_device *pdev) | ||
409 | = init_data[i].data; | ||
410 | } | ||
411 | |||
412 | - if (pdata->muic_data) { | ||
413 | + if (pdata && pdata->muic_data) { | ||
414 | struct max77693_muic_platform_data *muic_pdata = pdata->muic_data; | ||
415 | |||
416 | /* | ||
417 | diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c | ||
418 | index f0d588f8859e..1acb99100556 100644 | ||
419 | --- a/drivers/infiniband/core/user_mad.c | ||
420 | +++ b/drivers/infiniband/core/user_mad.c | ||
421 | @@ -98,7 +98,7 @@ struct ib_umad_port { | ||
422 | |||
423 | struct ib_umad_device { | ||
424 | int start_port, end_port; | ||
425 | - struct kref ref; | ||
426 | + struct kobject kobj; | ||
427 | struct ib_umad_port port[0]; | ||
428 | }; | ||
429 | |||
430 | @@ -134,14 +134,18 @@ static DECLARE_BITMAP(dev_map, IB_UMAD_MAX_PORTS); | ||
431 | static void ib_umad_add_one(struct ib_device *device); | ||
432 | static void ib_umad_remove_one(struct ib_device *device); | ||
433 | |||
434 | -static void ib_umad_release_dev(struct kref *ref) | ||
435 | +static void ib_umad_release_dev(struct kobject *kobj) | ||
436 | { | ||
437 | struct ib_umad_device *dev = | ||
438 | - container_of(ref, struct ib_umad_device, ref); | ||
439 | + container_of(kobj, struct ib_umad_device, kobj); | ||
440 | |||
441 | kfree(dev); | ||
442 | } | ||
443 | |||
444 | +static struct kobj_type ib_umad_dev_ktype = { | ||
445 | + .release = ib_umad_release_dev, | ||
446 | +}; | ||
447 | + | ||
448 | static int hdr_size(struct ib_umad_file *file) | ||
449 | { | ||
450 | return file->use_pkey_index ? sizeof (struct ib_user_mad_hdr) : | ||
451 | @@ -780,27 +784,19 @@ static int ib_umad_open(struct inode *inode, struct file *filp) | ||
452 | { | ||
453 | struct ib_umad_port *port; | ||
454 | struct ib_umad_file *file; | ||
455 | - int ret; | ||
456 | + int ret = -ENXIO; | ||
457 | |||
458 | port = container_of(inode->i_cdev, struct ib_umad_port, cdev); | ||
459 | - if (port) | ||
460 | - kref_get(&port->umad_dev->ref); | ||
461 | - else | ||
462 | - return -ENXIO; | ||
463 | |||
464 | mutex_lock(&port->file_mutex); | ||
465 | |||
466 | - if (!port->ib_dev) { | ||
467 | - ret = -ENXIO; | ||
468 | + if (!port->ib_dev) | ||
469 | goto out; | ||
470 | - } | ||
471 | |||
472 | + ret = -ENOMEM; | ||
473 | file = kzalloc(sizeof *file, GFP_KERNEL); | ||
474 | - if (!file) { | ||
475 | - kref_put(&port->umad_dev->ref, ib_umad_release_dev); | ||
476 | - ret = -ENOMEM; | ||
477 | + if (!file) | ||
478 | goto out; | ||
479 | - } | ||
480 | |||
481 | mutex_init(&file->mutex); | ||
482 | spin_lock_init(&file->send_lock); | ||
483 | @@ -814,6 +810,13 @@ static int ib_umad_open(struct inode *inode, struct file *filp) | ||
484 | list_add_tail(&file->port_list, &port->file_list); | ||
485 | |||
486 | ret = nonseekable_open(inode, filp); | ||
487 | + if (ret) { | ||
488 | + list_del(&file->port_list); | ||
489 | + kfree(file); | ||
490 | + goto out; | ||
491 | + } | ||
492 | + | ||
493 | + kobject_get(&port->umad_dev->kobj); | ||
494 | |||
495 | out: | ||
496 | mutex_unlock(&port->file_mutex); | ||
497 | @@ -852,7 +855,7 @@ static int ib_umad_close(struct inode *inode, struct file *filp) | ||
498 | mutex_unlock(&file->port->file_mutex); | ||
499 | |||
500 | kfree(file); | ||
501 | - kref_put(&dev->ref, ib_umad_release_dev); | ||
502 | + kobject_put(&dev->kobj); | ||
503 | |||
504 | return 0; | ||
505 | } | ||
506 | @@ -880,10 +883,6 @@ static int ib_umad_sm_open(struct inode *inode, struct file *filp) | ||
507 | int ret; | ||
508 | |||
509 | port = container_of(inode->i_cdev, struct ib_umad_port, sm_cdev); | ||
510 | - if (port) | ||
511 | - kref_get(&port->umad_dev->ref); | ||
512 | - else | ||
513 | - return -ENXIO; | ||
514 | |||
515 | if (filp->f_flags & O_NONBLOCK) { | ||
516 | if (down_trylock(&port->sm_sem)) { | ||
517 | @@ -898,17 +897,27 @@ static int ib_umad_sm_open(struct inode *inode, struct file *filp) | ||
518 | } | ||
519 | |||
520 | ret = ib_modify_port(port->ib_dev, port->port_num, 0, &props); | ||
521 | - if (ret) { | ||
522 | - up(&port->sm_sem); | ||
523 | - goto fail; | ||
524 | - } | ||
525 | + if (ret) | ||
526 | + goto err_up_sem; | ||
527 | |||
528 | filp->private_data = port; | ||
529 | |||
530 | - return nonseekable_open(inode, filp); | ||
531 | + ret = nonseekable_open(inode, filp); | ||
532 | + if (ret) | ||
533 | + goto err_clr_sm_cap; | ||
534 | + | ||
535 | + kobject_get(&port->umad_dev->kobj); | ||
536 | + | ||
537 | + return 0; | ||
538 | + | ||
539 | +err_clr_sm_cap: | ||
540 | + swap(props.set_port_cap_mask, props.clr_port_cap_mask); | ||
541 | + ib_modify_port(port->ib_dev, port->port_num, 0, &props); | ||
542 | + | ||
543 | +err_up_sem: | ||
544 | + up(&port->sm_sem); | ||
545 | |||
546 | fail: | ||
547 | - kref_put(&port->umad_dev->ref, ib_umad_release_dev); | ||
548 | return ret; | ||
549 | } | ||
550 | |||
551 | @@ -927,7 +936,7 @@ static int ib_umad_sm_close(struct inode *inode, struct file *filp) | ||
552 | |||
553 | up(&port->sm_sem); | ||
554 | |||
555 | - kref_put(&port->umad_dev->ref, ib_umad_release_dev); | ||
556 | + kobject_put(&port->umad_dev->kobj); | ||
557 | |||
558 | return ret; | ||
559 | } | ||
560 | @@ -995,6 +1004,7 @@ static int find_overflow_devnum(void) | ||
561 | } | ||
562 | |||
563 | static int ib_umad_init_port(struct ib_device *device, int port_num, | ||
564 | + struct ib_umad_device *umad_dev, | ||
565 | struct ib_umad_port *port) | ||
566 | { | ||
567 | int devnum; | ||
568 | @@ -1027,6 +1037,7 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, | ||
569 | |||
570 | cdev_init(&port->cdev, &umad_fops); | ||
571 | port->cdev.owner = THIS_MODULE; | ||
572 | + port->cdev.kobj.parent = &umad_dev->kobj; | ||
573 | kobject_set_name(&port->cdev.kobj, "umad%d", port->dev_num); | ||
574 | if (cdev_add(&port->cdev, base, 1)) | ||
575 | goto err_cdev; | ||
576 | @@ -1045,6 +1056,7 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, | ||
577 | base += IB_UMAD_MAX_PORTS; | ||
578 | cdev_init(&port->sm_cdev, &umad_sm_fops); | ||
579 | port->sm_cdev.owner = THIS_MODULE; | ||
580 | + port->sm_cdev.kobj.parent = &umad_dev->kobj; | ||
581 | kobject_set_name(&port->sm_cdev.kobj, "issm%d", port->dev_num); | ||
582 | if (cdev_add(&port->sm_cdev, base, 1)) | ||
583 | goto err_sm_cdev; | ||
584 | @@ -1138,7 +1150,7 @@ static void ib_umad_add_one(struct ib_device *device) | ||
585 | if (!umad_dev) | ||
586 | return; | ||
587 | |||
588 | - kref_init(&umad_dev->ref); | ||
589 | + kobject_init(&umad_dev->kobj, &ib_umad_dev_ktype); | ||
590 | |||
591 | umad_dev->start_port = s; | ||
592 | umad_dev->end_port = e; | ||
593 | @@ -1146,7 +1158,8 @@ static void ib_umad_add_one(struct ib_device *device) | ||
594 | for (i = s; i <= e; ++i) { | ||
595 | umad_dev->port[i - s].umad_dev = umad_dev; | ||
596 | |||
597 | - if (ib_umad_init_port(device, i, &umad_dev->port[i - s])) | ||
598 | + if (ib_umad_init_port(device, i, umad_dev, | ||
599 | + &umad_dev->port[i - s])) | ||
600 | goto err; | ||
601 | } | ||
602 | |||
603 | @@ -1158,7 +1171,7 @@ err: | ||
604 | while (--i >= s) | ||
605 | ib_umad_kill_port(&umad_dev->port[i - s]); | ||
606 | |||
607 | - kref_put(&umad_dev->ref, ib_umad_release_dev); | ||
608 | + kobject_put(&umad_dev->kobj); | ||
609 | } | ||
610 | |||
611 | static void ib_umad_remove_one(struct ib_device *device) | ||
612 | @@ -1172,7 +1185,7 @@ static void ib_umad_remove_one(struct ib_device *device) | ||
613 | for (i = 0; i <= umad_dev->end_port - umad_dev->start_port; ++i) | ||
614 | ib_umad_kill_port(&umad_dev->port[i]); | ||
615 | |||
616 | - kref_put(&umad_dev->ref, ib_umad_release_dev); | ||
617 | + kobject_put(&umad_dev->kobj); | ||
618 | } | ||
619 | |||
620 | static char *umad_devnode(struct device *dev, umode_t *mode) | ||
621 | diff --git a/drivers/infiniband/hw/ipath/ipath_diag.c b/drivers/infiniband/hw/ipath/ipath_diag.c | ||
622 | index e2f9a51f4a38..45802e97332e 100644 | ||
623 | --- a/drivers/infiniband/hw/ipath/ipath_diag.c | ||
624 | +++ b/drivers/infiniband/hw/ipath/ipath_diag.c | ||
625 | @@ -346,6 +346,10 @@ static ssize_t ipath_diagpkt_write(struct file *fp, | ||
626 | ret = -EFAULT; | ||
627 | goto bail; | ||
628 | } | ||
629 | + dp.len = odp.len; | ||
630 | + dp.unit = odp.unit; | ||
631 | + dp.data = odp.data; | ||
632 | + dp.pbc_wd = 0; | ||
633 | } else { | ||
634 | ret = -EINVAL; | ||
635 | goto bail; | ||
636 | diff --git a/drivers/infiniband/hw/qib/qib_mad.c b/drivers/infiniband/hw/qib/qib_mad.c | ||
637 | index ccb119143d20..1dd9fcbb7c9a 100644 | ||
638 | --- a/drivers/infiniband/hw/qib/qib_mad.c | ||
639 | +++ b/drivers/infiniband/hw/qib/qib_mad.c | ||
640 | @@ -1028,7 +1028,7 @@ static int set_pkeys(struct qib_devdata *dd, u8 port, u16 *pkeys) | ||
641 | |||
642 | event.event = IB_EVENT_PKEY_CHANGE; | ||
643 | event.device = &dd->verbs_dev.ibdev; | ||
644 | - event.element.port_num = 1; | ||
645 | + event.element.port_num = port; | ||
646 | ib_dispatch_event(&event); | ||
647 | } | ||
648 | return 0; | ||
649 | diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c | ||
650 | index 793ac5dcee71..1954daac0b59 100644 | ||
651 | --- a/drivers/infiniband/ulp/srp/ib_srp.c | ||
652 | +++ b/drivers/infiniband/ulp/srp/ib_srp.c | ||
653 | @@ -1409,6 +1409,12 @@ err_unmap: | ||
654 | err_iu: | ||
655 | srp_put_tx_iu(target, iu, SRP_IU_CMD); | ||
656 | |||
657 | + /* | ||
658 | + * Avoid that the loops that iterate over the request ring can | ||
659 | + * encounter a dangling SCSI command pointer. | ||
660 | + */ | ||
661 | + req->scmnd = NULL; | ||
662 | + | ||
663 | spin_lock_irqsave(&target->lock, flags); | ||
664 | list_add(&req->list, &target->free_reqs); | ||
665 | |||
666 | diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c | ||
667 | index 76f1d37ac0ff..1913301df08f 100644 | ||
668 | --- a/drivers/input/mouse/elantech.c | ||
669 | +++ b/drivers/input/mouse/elantech.c | ||
670 | @@ -473,8 +473,15 @@ static void elantech_report_absolute_v3(struct psmouse *psmouse, | ||
671 | input_report_key(dev, BTN_TOOL_FINGER, fingers == 1); | ||
672 | input_report_key(dev, BTN_TOOL_DOUBLETAP, fingers == 2); | ||
673 | input_report_key(dev, BTN_TOOL_TRIPLETAP, fingers == 3); | ||
674 | - input_report_key(dev, BTN_LEFT, packet[0] & 0x01); | ||
675 | - input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); | ||
676 | + | ||
677 | + /* For clickpads map both buttons to BTN_LEFT */ | ||
678 | + if (etd->fw_version & 0x001000) { | ||
679 | + input_report_key(dev, BTN_LEFT, packet[0] & 0x03); | ||
680 | + } else { | ||
681 | + input_report_key(dev, BTN_LEFT, packet[0] & 0x01); | ||
682 | + input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); | ||
683 | + } | ||
684 | + | ||
685 | input_report_abs(dev, ABS_PRESSURE, pres); | ||
686 | input_report_abs(dev, ABS_TOOL_WIDTH, width); | ||
687 | |||
688 | @@ -484,10 +491,17 @@ static void elantech_report_absolute_v3(struct psmouse *psmouse, | ||
689 | static void elantech_input_sync_v4(struct psmouse *psmouse) | ||
690 | { | ||
691 | struct input_dev *dev = psmouse->dev; | ||
692 | + struct elantech_data *etd = psmouse->private; | ||
693 | unsigned char *packet = psmouse->packet; | ||
694 | |||
695 | - input_report_key(dev, BTN_LEFT, packet[0] & 0x01); | ||
696 | - input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); | ||
697 | + /* For clickpads map both buttons to BTN_LEFT */ | ||
698 | + if (etd->fw_version & 0x001000) { | ||
699 | + input_report_key(dev, BTN_LEFT, packet[0] & 0x03); | ||
700 | + } else { | ||
701 | + input_report_key(dev, BTN_LEFT, packet[0] & 0x01); | ||
702 | + input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); | ||
703 | + } | ||
704 | + | ||
705 | input_mt_report_pointer_emulation(dev, true); | ||
706 | input_sync(dev); | ||
707 | } | ||
708 | @@ -805,7 +819,7 @@ static int elantech_set_absolute_mode(struct psmouse *psmouse) | ||
709 | if (etd->set_hw_resolution) | ||
710 | etd->reg_10 = 0x0b; | ||
711 | else | ||
712 | - etd->reg_10 = 0x03; | ||
713 | + etd->reg_10 = 0x01; | ||
714 | |||
715 | if (elantech_write_reg(psmouse, 0x10, etd->reg_10)) | ||
716 | rc = -1; | ||
717 | @@ -1306,7 +1320,8 @@ static int elantech_reconnect(struct psmouse *psmouse) | ||
718 | } | ||
719 | |||
720 | /* | ||
721 | - * Some hw_version 3 models go into error state when we try to set bit 3 of r10 | ||
722 | + * Some hw_version 3 models go into error state when we try to set | ||
723 | + * bit 3 and/or bit 1 of r10. | ||
724 | */ | ||
725 | static const struct dmi_system_id no_hw_res_dmi_table[] = { | ||
726 | #if defined(CONFIG_DMI) && defined(CONFIG_X86) | ||
727 | diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c | ||
728 | index 06311c5ada36..297cc10a26da 100644 | ||
729 | --- a/drivers/misc/mei/hw-me.c | ||
730 | +++ b/drivers/misc/mei/hw-me.c | ||
731 | @@ -164,6 +164,9 @@ static void mei_me_hw_reset_release(struct mei_device *dev) | ||
732 | hcsr |= H_IG; | ||
733 | hcsr &= ~H_RST; | ||
734 | mei_hcsr_set(hw, hcsr); | ||
735 | + | ||
736 | + /* complete this write before we set host ready on another CPU */ | ||
737 | + mmiowb(); | ||
738 | } | ||
739 | /** | ||
740 | * mei_me_hw_reset - resets fw via mei csr register. | ||
741 | @@ -186,7 +189,19 @@ static void mei_me_hw_reset(struct mei_device *dev, bool intr_enable) | ||
742 | dev->recvd_hw_ready = false; | ||
743 | mei_me_reg_write(hw, H_CSR, hcsr); | ||
744 | |||
745 | - if (dev->dev_state == MEI_DEV_POWER_DOWN) | ||
746 | + /* | ||
747 | + * Host reads the H_CSR once to ensure that the | ||
748 | + * posted write to H_CSR completes. | ||
749 | + */ | ||
750 | + hcsr = mei_hcsr_read(hw); | ||
751 | + | ||
752 | + if ((hcsr & H_RST) == 0) | ||
753 | + dev_warn(&dev->pdev->dev, "H_RST is not set = 0x%08X", hcsr); | ||
754 | + | ||
755 | + if ((hcsr & H_RDY) == H_RDY) | ||
756 | + dev_warn(&dev->pdev->dev, "H_RDY is not cleared 0x%08X", hcsr); | ||
757 | + | ||
758 | + if (intr_enable == false) | ||
759 | mei_me_hw_reset_release(dev); | ||
760 | |||
761 | dev_dbg(&dev->pdev->dev, "current HCSR = 0x%08x.\n", mei_hcsr_read(hw)); | ||
762 | @@ -202,6 +217,7 @@ static void mei_me_hw_reset(struct mei_device *dev, bool intr_enable) | ||
763 | static void mei_me_host_set_ready(struct mei_device *dev) | ||
764 | { | ||
765 | struct mei_me_hw *hw = to_me_hw(dev); | ||
766 | + hw->host_hw_state = mei_hcsr_read(hw); | ||
767 | hw->host_hw_state |= H_IE | H_IG | H_RDY; | ||
768 | mei_hcsr_set(hw, hw->host_hw_state); | ||
769 | } | ||
770 | @@ -494,19 +510,15 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id) | ||
771 | /* check if we need to start the dev */ | ||
772 | if (!mei_host_is_ready(dev)) { | ||
773 | if (mei_hw_is_ready(dev)) { | ||
774 | + mei_me_hw_reset_release(dev); | ||
775 | dev_dbg(&dev->pdev->dev, "we need to start the dev.\n"); | ||
776 | |||
777 | dev->recvd_hw_ready = true; | ||
778 | wake_up_interruptible(&dev->wait_hw_ready); | ||
779 | - | ||
780 | - mutex_unlock(&dev->device_lock); | ||
781 | - return IRQ_HANDLED; | ||
782 | } else { | ||
783 | - dev_dbg(&dev->pdev->dev, "Reset Completed.\n"); | ||
784 | - mei_me_hw_reset_release(dev); | ||
785 | - mutex_unlock(&dev->device_lock); | ||
786 | - return IRQ_HANDLED; | ||
787 | + dev_dbg(&dev->pdev->dev, "Spurious Interrupt\n"); | ||
788 | } | ||
789 | + goto end; | ||
790 | } | ||
791 | /* check slots available for reading */ | ||
792 | slots = mei_count_full_read_slots(dev); | ||
793 | diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c | ||
794 | index f30acaa84037..d6ceb2e45c59 100644 | ||
795 | --- a/drivers/pci/pci.c | ||
796 | +++ b/drivers/pci/pci.c | ||
797 | @@ -3659,7 +3659,7 @@ int pci_set_vga_state(struct pci_dev *dev, bool decode, | ||
798 | u16 cmd; | ||
799 | int rc; | ||
800 | |||
801 | - WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) & (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY))); | ||
802 | + WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) && (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY))); | ||
803 | |||
804 | /* ARCH specific VGA enables */ | ||
805 | rc = pci_set_vga_state_arch(dev, decode, command_bits, flags); | ||
806 | diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c | ||
807 | index df4655c5c138..4510279e28dc 100644 | ||
808 | --- a/drivers/pci/quirks.c | ||
809 | +++ b/drivers/pci/quirks.c | ||
810 | @@ -2930,6 +2930,7 @@ static void disable_igfx_irq(struct pci_dev *dev) | ||
811 | } | ||
812 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq); | ||
813 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); | ||
814 | +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq); | ||
815 | |||
816 | /* | ||
817 | * Some devices may pass our check in pci_intx_mask_supported if | ||
818 | diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c | ||
819 | index 72663ba228dc..799f84e686b5 100644 | ||
820 | --- a/drivers/target/iscsi/iscsi_target.c | ||
821 | +++ b/drivers/target/iscsi/iscsi_target.c | ||
822 | @@ -1313,7 +1313,7 @@ iscsit_check_dataout_hdr(struct iscsi_conn *conn, unsigned char *buf, | ||
823 | if (cmd->data_direction != DMA_TO_DEVICE) { | ||
824 | pr_err("Command ITT: 0x%08x received DataOUT for a" | ||
825 | " NON-WRITE command.\n", cmd->init_task_tag); | ||
826 | - return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, buf); | ||
827 | + return iscsit_dump_data_payload(conn, payload_length, 1); | ||
828 | } | ||
829 | se_cmd = &cmd->se_cmd; | ||
830 | iscsit_mod_dataout_timer(cmd); | ||
831 | diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c | ||
832 | index 77dad2474c8c..c9790f6fdd89 100644 | ||
833 | --- a/drivers/target/iscsi/iscsi_target_util.c | ||
834 | +++ b/drivers/target/iscsi/iscsi_target_util.c | ||
835 | @@ -1288,6 +1288,8 @@ int iscsit_tx_login_rsp(struct iscsi_conn *conn, u8 status_class, u8 status_deta | ||
836 | login->login_failed = 1; | ||
837 | iscsit_collect_login_stats(conn, status_class, status_detail); | ||
838 | |||
839 | + memset(&login->rsp[0], 0, ISCSI_HDR_LEN); | ||
840 | + | ||
841 | hdr = (struct iscsi_login_rsp *)&login->rsp[0]; | ||
842 | hdr->opcode = ISCSI_OP_LOGIN_RSP; | ||
843 | hdr->status_class = status_class; | ||
844 | diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c | ||
845 | index 8032917b6636..68398753eb82 100644 | ||
846 | --- a/drivers/target/target_core_device.c | ||
847 | +++ b/drivers/target/target_core_device.c | ||
848 | @@ -614,6 +614,7 @@ void core_dev_unexport( | ||
849 | dev->export_count--; | ||
850 | spin_unlock(&hba->device_lock); | ||
851 | |||
852 | + lun->lun_sep = NULL; | ||
853 | lun->lun_se_dev = NULL; | ||
854 | } | ||
855 | |||
856 | diff --git a/drivers/watchdog/ath79_wdt.c b/drivers/watchdog/ath79_wdt.c | ||
857 | index 37cb09b27b63..c97a47ca8971 100644 | ||
858 | --- a/drivers/watchdog/ath79_wdt.c | ||
859 | +++ b/drivers/watchdog/ath79_wdt.c | ||
860 | @@ -20,6 +20,7 @@ | ||
861 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
862 | |||
863 | #include <linux/bitops.h> | ||
864 | +#include <linux/delay.h> | ||
865 | #include <linux/errno.h> | ||
866 | #include <linux/fs.h> | ||
867 | #include <linux/init.h> | ||
868 | @@ -91,6 +92,15 @@ static inline void ath79_wdt_keepalive(void) | ||
869 | static inline void ath79_wdt_enable(void) | ||
870 | { | ||
871 | ath79_wdt_keepalive(); | ||
872 | + | ||
873 | + /* | ||
874 | + * Updating the TIMER register requires a few microseconds | ||
875 | + * on the AR934x SoCs at least. Use a small delay to ensure | ||
876 | + * that the TIMER register is updated within the hardware | ||
877 | + * before enabling the watchdog. | ||
878 | + */ | ||
879 | + udelay(2); | ||
880 | + | ||
881 | ath79_wdt_wr(WDOG_REG_CTRL, WDOG_CTRL_ACTION_FCR); | ||
882 | /* flush write */ | ||
883 | ath79_wdt_rr(WDOG_REG_CTRL); | ||
884 | diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c | ||
885 | index 8872642505c0..e42118213ba5 100644 | ||
886 | --- a/drivers/watchdog/sp805_wdt.c | ||
887 | +++ b/drivers/watchdog/sp805_wdt.c | ||
888 | @@ -60,7 +60,6 @@ | ||
889 | * @adev: amba device structure of wdt | ||
890 | * @status: current status of wdt | ||
891 | * @load_val: load value to be set for current timeout | ||
892 | - * @timeout: current programmed timeout | ||
893 | */ | ||
894 | struct sp805_wdt { | ||
895 | struct watchdog_device wdd; | ||
896 | @@ -69,7 +68,6 @@ struct sp805_wdt { | ||
897 | struct clk *clk; | ||
898 | struct amba_device *adev; | ||
899 | unsigned int load_val; | ||
900 | - unsigned int timeout; | ||
901 | }; | ||
902 | |||
903 | static bool nowayout = WATCHDOG_NOWAYOUT; | ||
904 | @@ -99,7 +97,7 @@ static int wdt_setload(struct watchdog_device *wdd, unsigned int timeout) | ||
905 | spin_lock(&wdt->lock); | ||
906 | wdt->load_val = load; | ||
907 | /* roundup timeout to closest positive integer value */ | ||
908 | - wdt->timeout = div_u64((load + 1) * 2 + (rate / 2), rate); | ||
909 | + wdd->timeout = div_u64((load + 1) * 2 + (rate / 2), rate); | ||
910 | spin_unlock(&wdt->lock); | ||
911 | |||
912 | return 0; | ||
913 | diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c | ||
914 | index c1c7a9d78722..cd4b9073dd20 100644 | ||
915 | --- a/fs/nfs/inode.c | ||
916 | +++ b/fs/nfs/inode.c | ||
917 | @@ -1382,18 +1382,20 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) | ||
918 | inode->i_version = fattr->change_attr; | ||
919 | } | ||
920 | } else if (server->caps & NFS_CAP_CHANGE_ATTR) | ||
921 | - invalid |= save_cache_validity; | ||
922 | + nfsi->cache_validity |= save_cache_validity; | ||
923 | |||
924 | if (fattr->valid & NFS_ATTR_FATTR_MTIME) { | ||
925 | memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime)); | ||
926 | } else if (server->caps & NFS_CAP_MTIME) | ||
927 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR | ||
928 | + nfsi->cache_validity |= save_cache_validity & | ||
929 | + (NFS_INO_INVALID_ATTR | ||
930 | | NFS_INO_REVAL_FORCED); | ||
931 | |||
932 | if (fattr->valid & NFS_ATTR_FATTR_CTIME) { | ||
933 | memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime)); | ||
934 | } else if (server->caps & NFS_CAP_CTIME) | ||
935 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR | ||
936 | + nfsi->cache_validity |= save_cache_validity & | ||
937 | + (NFS_INO_INVALID_ATTR | ||
938 | | NFS_INO_REVAL_FORCED); | ||
939 | |||
940 | /* Check if our cached file size is stale */ | ||
941 | @@ -1416,7 +1418,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) | ||
942 | (long long)new_isize); | ||
943 | } | ||
944 | } else | ||
945 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR | ||
946 | + nfsi->cache_validity |= save_cache_validity & | ||
947 | + (NFS_INO_INVALID_ATTR | ||
948 | | NFS_INO_REVAL_PAGECACHE | ||
949 | | NFS_INO_REVAL_FORCED); | ||
950 | |||
951 | @@ -1424,7 +1427,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) | ||
952 | if (fattr->valid & NFS_ATTR_FATTR_ATIME) | ||
953 | memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime)); | ||
954 | else if (server->caps & NFS_CAP_ATIME) | ||
955 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATIME | ||
956 | + nfsi->cache_validity |= save_cache_validity & | ||
957 | + (NFS_INO_INVALID_ATIME | ||
958 | | NFS_INO_REVAL_FORCED); | ||
959 | |||
960 | if (fattr->valid & NFS_ATTR_FATTR_MODE) { | ||
961 | @@ -1435,7 +1439,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) | ||
962 | invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; | ||
963 | } | ||
964 | } else if (server->caps & NFS_CAP_MODE) | ||
965 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR | ||
966 | + nfsi->cache_validity |= save_cache_validity & | ||
967 | + (NFS_INO_INVALID_ATTR | ||
968 | | NFS_INO_INVALID_ACCESS | ||
969 | | NFS_INO_INVALID_ACL | ||
970 | | NFS_INO_REVAL_FORCED); | ||
971 | @@ -1446,7 +1451,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) | ||
972 | inode->i_uid = fattr->uid; | ||
973 | } | ||
974 | } else if (server->caps & NFS_CAP_OWNER) | ||
975 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR | ||
976 | + nfsi->cache_validity |= save_cache_validity & | ||
977 | + (NFS_INO_INVALID_ATTR | ||
978 | | NFS_INO_INVALID_ACCESS | ||
979 | | NFS_INO_INVALID_ACL | ||
980 | | NFS_INO_REVAL_FORCED); | ||
981 | @@ -1457,7 +1463,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) | ||
982 | inode->i_gid = fattr->gid; | ||
983 | } | ||
984 | } else if (server->caps & NFS_CAP_OWNER_GROUP) | ||
985 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR | ||
986 | + nfsi->cache_validity |= save_cache_validity & | ||
987 | + (NFS_INO_INVALID_ATTR | ||
988 | | NFS_INO_INVALID_ACCESS | ||
989 | | NFS_INO_INVALID_ACL | ||
990 | | NFS_INO_REVAL_FORCED); | ||
991 | @@ -1470,7 +1477,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) | ||
992 | set_nlink(inode, fattr->nlink); | ||
993 | } | ||
994 | } else if (server->caps & NFS_CAP_NLINK) | ||
995 | - invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR | ||
996 | + nfsi->cache_validity |= save_cache_validity & | ||
997 | + (NFS_INO_INVALID_ATTR | ||
998 | | NFS_INO_REVAL_FORCED); | ||
999 | |||
1000 | if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) { | ||
1001 | diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c | ||
1002 | index 22d10623f5ee..b039f7f26d95 100644 | ||
1003 | --- a/fs/nfs/nfs4filelayout.c | ||
1004 | +++ b/fs/nfs/nfs4filelayout.c | ||
1005 | @@ -1300,7 +1300,7 @@ filelayout_alloc_layout_hdr(struct inode *inode, gfp_t gfp_flags) | ||
1006 | struct nfs4_filelayout *flo; | ||
1007 | |||
1008 | flo = kzalloc(sizeof(*flo), gfp_flags); | ||
1009 | - return &flo->generic_hdr; | ||
1010 | + return flo != NULL ? &flo->generic_hdr : NULL; | ||
1011 | } | ||
1012 | |||
1013 | static void | ||
1014 | diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c | ||
1015 | index ae6a50b7a617..bdff771057d3 100644 | ||
1016 | --- a/fs/nfsd/nfs4state.c | ||
1017 | +++ b/fs/nfsd/nfs4state.c | ||
1018 | @@ -3608,7 +3608,7 @@ nfsd4_free_lock_stateid(struct nfs4_ol_stateid *stp) | ||
1019 | * correspondance, and we have to delete the lockowner when we | ||
1020 | * delete the lock stateid: | ||
1021 | */ | ||
1022 | - unhash_lockowner(lo); | ||
1023 | + release_lockowner(lo); | ||
1024 | return nfs_ok; | ||
1025 | } | ||
1026 | |||
1027 | diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c | ||
1028 | index 5188a38fef06..d4890a96421e 100644 | ||
1029 | --- a/fs/nfsd/nfs4xdr.c | ||
1030 | +++ b/fs/nfsd/nfs4xdr.c | ||
1031 | @@ -2035,8 +2035,8 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, | ||
1032 | err = vfs_getattr(&path, &stat); | ||
1033 | if (err) | ||
1034 | goto out_nfserr; | ||
1035 | - if ((bmval0 & (FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL | | ||
1036 | - FATTR4_WORD0_MAXNAME)) || | ||
1037 | + if ((bmval0 & (FATTR4_WORD0_FILES_AVAIL | FATTR4_WORD0_FILES_FREE | | ||
1038 | + FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_MAXNAME)) || | ||
1039 | (bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | | ||
1040 | FATTR4_WORD1_SPACE_TOTAL))) { | ||
1041 | err = vfs_statfs(&path, &statfs); | ||
1042 | diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c | ||
1043 | index ec8d97ddc635..e5e4675b7e75 100644 | ||
1044 | --- a/fs/nfsd/nfscache.c | ||
1045 | +++ b/fs/nfsd/nfscache.c | ||
1046 | @@ -129,13 +129,6 @@ nfsd_reply_cache_alloc(void) | ||
1047 | } | ||
1048 | |||
1049 | static void | ||
1050 | -nfsd_reply_cache_unhash(struct svc_cacherep *rp) | ||
1051 | -{ | ||
1052 | - hlist_del_init(&rp->c_hash); | ||
1053 | - list_del_init(&rp->c_lru); | ||
1054 | -} | ||
1055 | - | ||
1056 | -static void | ||
1057 | nfsd_reply_cache_free_locked(struct svc_cacherep *rp) | ||
1058 | { | ||
1059 | if (rp->c_type == RC_REPLBUFF && rp->c_replvec.iov_base) { | ||
1060 | @@ -228,13 +221,6 @@ hash_refile(struct svc_cacherep *rp) | ||
1061 | hlist_add_head(&rp->c_hash, cache_hash + hash_32(rp->c_xid, maskbits)); | ||
1062 | } | ||
1063 | |||
1064 | -static inline bool | ||
1065 | -nfsd_cache_entry_expired(struct svc_cacherep *rp) | ||
1066 | -{ | ||
1067 | - return rp->c_state != RC_INPROG && | ||
1068 | - time_after(jiffies, rp->c_timestamp + RC_EXPIRE); | ||
1069 | -} | ||
1070 | - | ||
1071 | /* | ||
1072 | * Walk the LRU list and prune off entries that are older than RC_EXPIRE. | ||
1073 | * Also prune the oldest ones when the total exceeds the max number of entries. | ||
1074 | @@ -245,8 +231,14 @@ prune_cache_entries(void) | ||
1075 | struct svc_cacherep *rp, *tmp; | ||
1076 | |||
1077 | list_for_each_entry_safe(rp, tmp, &lru_head, c_lru) { | ||
1078 | - if (!nfsd_cache_entry_expired(rp) && | ||
1079 | - num_drc_entries <= max_drc_entries) | ||
1080 | + /* | ||
1081 | + * Don't free entries attached to calls that are still | ||
1082 | + * in-progress, but do keep scanning the list. | ||
1083 | + */ | ||
1084 | + if (rp->c_state == RC_INPROG) | ||
1085 | + continue; | ||
1086 | + if (num_drc_entries <= max_drc_entries && | ||
1087 | + time_before(jiffies, rp->c_timestamp + RC_EXPIRE)) | ||
1088 | break; | ||
1089 | nfsd_reply_cache_free_locked(rp); | ||
1090 | } | ||
1091 | @@ -402,22 +394,8 @@ nfsd_cache_lookup(struct svc_rqst *rqstp) | ||
1092 | |||
1093 | /* | ||
1094 | * Since the common case is a cache miss followed by an insert, | ||
1095 | - * preallocate an entry. First, try to reuse the first entry on the LRU | ||
1096 | - * if it works, then go ahead and prune the LRU list. | ||
1097 | + * preallocate an entry. | ||
1098 | */ | ||
1099 | - spin_lock(&cache_lock); | ||
1100 | - if (!list_empty(&lru_head)) { | ||
1101 | - rp = list_first_entry(&lru_head, struct svc_cacherep, c_lru); | ||
1102 | - if (nfsd_cache_entry_expired(rp) || | ||
1103 | - num_drc_entries >= max_drc_entries) { | ||
1104 | - nfsd_reply_cache_unhash(rp); | ||
1105 | - prune_cache_entries(); | ||
1106 | - goto search_cache; | ||
1107 | - } | ||
1108 | - } | ||
1109 | - | ||
1110 | - /* No expired ones available, allocate a new one. */ | ||
1111 | - spin_unlock(&cache_lock); | ||
1112 | rp = nfsd_reply_cache_alloc(); | ||
1113 | spin_lock(&cache_lock); | ||
1114 | if (likely(rp)) { | ||
1115 | @@ -425,7 +403,9 @@ nfsd_cache_lookup(struct svc_rqst *rqstp) | ||
1116 | drc_mem_usage += sizeof(*rp); | ||
1117 | } | ||
1118 | |||
1119 | -search_cache: | ||
1120 | + /* go ahead and prune the cache */ | ||
1121 | + prune_cache_entries(); | ||
1122 | + | ||
1123 | found = nfsd_cache_search(rqstp, csum); | ||
1124 | if (found) { | ||
1125 | if (likely(rp)) | ||
1126 | @@ -439,15 +419,6 @@ search_cache: | ||
1127 | goto out; | ||
1128 | } | ||
1129 | |||
1130 | - /* | ||
1131 | - * We're keeping the one we just allocated. Are we now over the | ||
1132 | - * limit? Prune one off the tip of the LRU in trade for the one we | ||
1133 | - * just allocated if so. | ||
1134 | - */ | ||
1135 | - if (num_drc_entries >= max_drc_entries) | ||
1136 | - nfsd_reply_cache_free_locked(list_first_entry(&lru_head, | ||
1137 | - struct svc_cacherep, c_lru)); | ||
1138 | - | ||
1139 | nfsdstats.rcmisses++; | ||
1140 | rqstp->rq_cacherep = rp; | ||
1141 | rp->c_state = RC_INPROG; | ||
1142 | diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c | ||
1143 | index f844533792ee..36166443bc45 100644 | ||
1144 | --- a/fs/reiserfs/inode.c | ||
1145 | +++ b/fs/reiserfs/inode.c | ||
1146 | @@ -3211,8 +3211,14 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) | ||
1147 | attr->ia_size != i_size_read(inode)) { | ||
1148 | error = inode_newsize_ok(inode, attr->ia_size); | ||
1149 | if (!error) { | ||
1150 | + /* | ||
1151 | + * Could race against reiserfs_file_release | ||
1152 | + * if called from NFS, so take tailpack mutex. | ||
1153 | + */ | ||
1154 | + mutex_lock(&REISERFS_I(inode)->tailpack); | ||
1155 | truncate_setsize(inode, attr->ia_size); | ||
1156 | - reiserfs_vfs_truncate_file(inode); | ||
1157 | + reiserfs_truncate_file(inode, 1); | ||
1158 | + mutex_unlock(&REISERFS_I(inode)->tailpack); | ||
1159 | } | ||
1160 | } | ||
1161 | |||
1162 | diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c | ||
1163 | index 14374530784c..881324c08430 100644 | ||
1164 | --- a/fs/ubifs/file.c | ||
1165 | +++ b/fs/ubifs/file.c | ||
1166 | @@ -1524,8 +1524,7 @@ static int ubifs_vm_page_mkwrite(struct vm_area_struct *vma, | ||
1167 | } | ||
1168 | |||
1169 | wait_for_stable_page(page); | ||
1170 | - unlock_page(page); | ||
1171 | - return 0; | ||
1172 | + return VM_FAULT_LOCKED; | ||
1173 | |||
1174 | out_unlock: | ||
1175 | unlock_page(page); | ||
1176 | diff --git a/fs/ubifs/shrinker.c b/fs/ubifs/shrinker.c | ||
1177 | index 9e1d05666fed..e0a7a764a903 100644 | ||
1178 | --- a/fs/ubifs/shrinker.c | ||
1179 | +++ b/fs/ubifs/shrinker.c | ||
1180 | @@ -128,7 +128,6 @@ static int shrink_tnc(struct ubifs_info *c, int nr, int age, int *contention) | ||
1181 | freed = ubifs_destroy_tnc_subtree(znode); | ||
1182 | atomic_long_sub(freed, &ubifs_clean_zn_cnt); | ||
1183 | atomic_long_sub(freed, &c->clean_zn_cnt); | ||
1184 | - ubifs_assert(atomic_long_read(&c->clean_zn_cnt) >= 0); | ||
1185 | total_freed += freed; | ||
1186 | znode = zprev; | ||
1187 | } | ||
1188 | diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h | ||
1189 | index 2e99b8e08770..bb980ae6d9d3 100644 | ||
1190 | --- a/include/linux/ptrace.h | ||
1191 | +++ b/include/linux/ptrace.h | ||
1192 | @@ -337,6 +337,9 @@ static inline void user_single_step_siginfo(struct task_struct *tsk, | ||
1193 | * calling arch_ptrace_stop() when it would be superfluous. For example, | ||
1194 | * if the thread has not been back to user mode since the last stop, the | ||
1195 | * thread state might indicate that nothing needs to be done. | ||
1196 | + * | ||
1197 | + * This is guaranteed to be invoked once before a task stops for ptrace and | ||
1198 | + * may include arch-specific operations necessary prior to a ptrace stop. | ||
1199 | */ | ||
1200 | #define arch_ptrace_stop_needed(code, info) (0) | ||
1201 | #endif | ||
1202 | diff --git a/include/trace/syscall.h b/include/trace/syscall.h | ||
1203 | index 84bc4197e736..0a5b4952aa30 100644 | ||
1204 | --- a/include/trace/syscall.h | ||
1205 | +++ b/include/trace/syscall.h | ||
1206 | @@ -4,6 +4,7 @@ | ||
1207 | #include <linux/tracepoint.h> | ||
1208 | #include <linux/unistd.h> | ||
1209 | #include <linux/ftrace_event.h> | ||
1210 | +#include <linux/thread_info.h> | ||
1211 | |||
1212 | #include <asm/ptrace.h> | ||
1213 | |||
1214 | @@ -31,4 +32,18 @@ struct syscall_metadata { | ||
1215 | struct ftrace_event_call *exit_event; | ||
1216 | }; | ||
1217 | |||
1218 | +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS) | ||
1219 | +static inline void syscall_tracepoint_update(struct task_struct *p) | ||
1220 | +{ | ||
1221 | + if (test_thread_flag(TIF_SYSCALL_TRACEPOINT)) | ||
1222 | + set_tsk_thread_flag(p, TIF_SYSCALL_TRACEPOINT); | ||
1223 | + else | ||
1224 | + clear_tsk_thread_flag(p, TIF_SYSCALL_TRACEPOINT); | ||
1225 | +} | ||
1226 | +#else | ||
1227 | +static inline void syscall_tracepoint_update(struct task_struct *p) | ||
1228 | +{ | ||
1229 | +} | ||
1230 | +#endif | ||
1231 | + | ||
1232 | #endif /* _TRACE_SYSCALL_H */ | ||
1233 | diff --git a/kernel/fork.c b/kernel/fork.c | ||
1234 | index 270c1dab674a..814363a69b80 100644 | ||
1235 | --- a/kernel/fork.c | ||
1236 | +++ b/kernel/fork.c | ||
1237 | @@ -1479,7 +1479,9 @@ static struct task_struct *copy_process(unsigned long clone_flags, | ||
1238 | |||
1239 | total_forks++; | ||
1240 | spin_unlock(¤t->sighand->siglock); | ||
1241 | + syscall_tracepoint_update(p); | ||
1242 | write_unlock_irq(&tasklist_lock); | ||
1243 | + | ||
1244 | proc_fork_connector(p); | ||
1245 | cgroup_post_fork(p); | ||
1246 | if (clone_flags & CLONE_THREAD) | ||
1247 | diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c | ||
1248 | index 6dbdf277c8fe..60f49637b4d5 100644 | ||
1249 | --- a/kernel/trace/trace.c | ||
1250 | +++ b/kernel/trace/trace.c | ||
1251 | @@ -1400,12 +1400,12 @@ static void tracing_stop_tr(struct trace_array *tr) | ||
1252 | |||
1253 | void trace_stop_cmdline_recording(void); | ||
1254 | |||
1255 | -static void trace_save_cmdline(struct task_struct *tsk) | ||
1256 | +static int trace_save_cmdline(struct task_struct *tsk) | ||
1257 | { | ||
1258 | unsigned pid, idx; | ||
1259 | |||
1260 | if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT)) | ||
1261 | - return; | ||
1262 | + return 0; | ||
1263 | |||
1264 | /* | ||
1265 | * It's not the end of the world if we don't get | ||
1266 | @@ -1414,7 +1414,7 @@ static void trace_save_cmdline(struct task_struct *tsk) | ||
1267 | * so if we miss here, then better luck next time. | ||
1268 | */ | ||
1269 | if (!arch_spin_trylock(&trace_cmdline_lock)) | ||
1270 | - return; | ||
1271 | + return 0; | ||
1272 | |||
1273 | idx = map_pid_to_cmdline[tsk->pid]; | ||
1274 | if (idx == NO_CMDLINE_MAP) { | ||
1275 | @@ -1439,6 +1439,8 @@ static void trace_save_cmdline(struct task_struct *tsk) | ||
1276 | memcpy(&saved_cmdlines[idx], tsk->comm, TASK_COMM_LEN); | ||
1277 | |||
1278 | arch_spin_unlock(&trace_cmdline_lock); | ||
1279 | + | ||
1280 | + return 1; | ||
1281 | } | ||
1282 | |||
1283 | void trace_find_cmdline(int pid, char comm[]) | ||
1284 | @@ -1480,9 +1482,8 @@ void tracing_record_cmdline(struct task_struct *tsk) | ||
1285 | if (!__this_cpu_read(trace_cmdline_save)) | ||
1286 | return; | ||
1287 | |||
1288 | - __this_cpu_write(trace_cmdline_save, false); | ||
1289 | - | ||
1290 | - trace_save_cmdline(tsk); | ||
1291 | + if (trace_save_cmdline(tsk)) | ||
1292 | + __this_cpu_write(trace_cmdline_save, false); | ||
1293 | } | ||
1294 | |||
1295 | void | ||
1296 | diff --git a/net/ipv4/netfilter/ipt_ULOG.c b/net/ipv4/netfilter/ipt_ULOG.c | ||
1297 | index 32b0e978c8e0..f8629c04f35b 100644 | ||
1298 | --- a/net/ipv4/netfilter/ipt_ULOG.c | ||
1299 | +++ b/net/ipv4/netfilter/ipt_ULOG.c | ||
1300 | @@ -220,6 +220,7 @@ static void ipt_ulog_packet(struct net *net, | ||
1301 | ub->qlen++; | ||
1302 | |||
1303 | pm = nlmsg_data(nlh); | ||
1304 | + memset(pm, 0, sizeof(*pm)); | ||
1305 | |||
1306 | /* We might not have a timestamp, get one */ | ||
1307 | if (skb->tstamp.tv64 == 0) | ||
1308 | @@ -238,8 +239,6 @@ static void ipt_ulog_packet(struct net *net, | ||
1309 | } | ||
1310 | else if (loginfo->prefix[0] != '\0') | ||
1311 | strncpy(pm->prefix, loginfo->prefix, sizeof(pm->prefix)); | ||
1312 | - else | ||
1313 | - *(pm->prefix) = '\0'; | ||
1314 | |||
1315 | if (in && in->hard_header_len > 0 && | ||
1316 | skb->mac_header != skb->network_header && | ||
1317 | @@ -251,13 +250,9 @@ static void ipt_ulog_packet(struct net *net, | ||
1318 | |||
1319 | if (in) | ||
1320 | strncpy(pm->indev_name, in->name, sizeof(pm->indev_name)); | ||
1321 | - else | ||
1322 | - pm->indev_name[0] = '\0'; | ||
1323 | |||
1324 | if (out) | ||
1325 | strncpy(pm->outdev_name, out->name, sizeof(pm->outdev_name)); | ||
1326 | - else | ||
1327 | - pm->outdev_name[0] = '\0'; | ||
1328 | |||
1329 | /* copy_len <= skb->len, so can't fail. */ | ||
1330 | if (skb_copy_bits(skb, 0, pm->payload, copy_len) < 0) | ||
1331 | diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c | ||
1332 | index 21a3a475d7cd..663042e84e81 100644 | ||
1333 | --- a/net/netfilter/ipvs/ip_vs_core.c | ||
1334 | +++ b/net/netfilter/ipvs/ip_vs_core.c | ||
1335 | @@ -1384,15 +1384,19 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum) | ||
1336 | |||
1337 | if (ipip) { | ||
1338 | __be32 info = ic->un.gateway; | ||
1339 | + __u8 type = ic->type; | ||
1340 | + __u8 code = ic->code; | ||
1341 | |||
1342 | /* Update the MTU */ | ||
1343 | if (ic->type == ICMP_DEST_UNREACH && | ||
1344 | ic->code == ICMP_FRAG_NEEDED) { | ||
1345 | struct ip_vs_dest *dest = cp->dest; | ||
1346 | u32 mtu = ntohs(ic->un.frag.mtu); | ||
1347 | + __be16 frag_off = cih->frag_off; | ||
1348 | |||
1349 | /* Strip outer IP and ICMP, go to IPIP header */ | ||
1350 | - __skb_pull(skb, ihl + sizeof(_icmph)); | ||
1351 | + if (pskb_pull(skb, ihl + sizeof(_icmph)) == NULL) | ||
1352 | + goto ignore_ipip; | ||
1353 | offset2 -= ihl + sizeof(_icmph); | ||
1354 | skb_reset_network_header(skb); | ||
1355 | IP_VS_DBG(12, "ICMP for IPIP %pI4->%pI4: mtu=%u\n", | ||
1356 | @@ -1400,7 +1404,7 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum) | ||
1357 | ipv4_update_pmtu(skb, dev_net(skb->dev), | ||
1358 | mtu, 0, 0, 0, 0); | ||
1359 | /* Client uses PMTUD? */ | ||
1360 | - if (!(cih->frag_off & htons(IP_DF))) | ||
1361 | + if (!(frag_off & htons(IP_DF))) | ||
1362 | goto ignore_ipip; | ||
1363 | /* Prefer the resulting PMTU */ | ||
1364 | if (dest) { | ||
1365 | @@ -1419,12 +1423,13 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum) | ||
1366 | /* Strip outer IP, ICMP and IPIP, go to IP header of | ||
1367 | * original request. | ||
1368 | */ | ||
1369 | - __skb_pull(skb, offset2); | ||
1370 | + if (pskb_pull(skb, offset2) == NULL) | ||
1371 | + goto ignore_ipip; | ||
1372 | skb_reset_network_header(skb); | ||
1373 | IP_VS_DBG(12, "Sending ICMP for %pI4->%pI4: t=%u, c=%u, i=%u\n", | ||
1374 | &ip_hdr(skb)->saddr, &ip_hdr(skb)->daddr, | ||
1375 | - ic->type, ic->code, ntohl(info)); | ||
1376 | - icmp_send(skb, ic->type, ic->code, info); | ||
1377 | + type, code, ntohl(info)); | ||
1378 | + icmp_send(skb, type, code, info); | ||
1379 | /* ICMP can be shorter but anyways, account it */ | ||
1380 | ip_vs_out_stats(cp, skb); | ||
1381 | |||
1382 | diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c | ||
1383 | index 80a6640f329b..b9aad4723a9d 100644 | ||
1384 | --- a/net/sunrpc/svc_xprt.c | ||
1385 | +++ b/net/sunrpc/svc_xprt.c | ||
1386 | @@ -730,6 +730,8 @@ static int svc_handle_xprt(struct svc_rqst *rqstp, struct svc_xprt *xprt) | ||
1387 | newxpt = xprt->xpt_ops->xpo_accept(xprt); | ||
1388 | if (newxpt) | ||
1389 | svc_add_new_temp_xprt(serv, newxpt); | ||
1390 | + else | ||
1391 | + module_put(xprt->xpt_class->xcl_owner); | ||
1392 | } else if (xprt->xpt_ops->xpo_has_wspace(xprt)) { | ||
1393 | /* XPT_DATA|XPT_DEFERRED case: */ | ||
1394 | dprintk("svc: server %p, pool %u, transport %p, inuse=%d\n", | ||
1395 | diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h | ||
1396 | index 9d1421e63ff8..49b582a225b0 100644 | ||
1397 | --- a/scripts/recordmcount.h | ||
1398 | +++ b/scripts/recordmcount.h | ||
1399 | @@ -163,11 +163,11 @@ static int mcount_adjust = 0; | ||
1400 | |||
1401 | static int MIPS_is_fake_mcount(Elf_Rel const *rp) | ||
1402 | { | ||
1403 | - static Elf_Addr old_r_offset; | ||
1404 | + static Elf_Addr old_r_offset = ~(Elf_Addr)0; | ||
1405 | Elf_Addr current_r_offset = _w(rp->r_offset); | ||
1406 | int is_fake; | ||
1407 | |||
1408 | - is_fake = old_r_offset && | ||
1409 | + is_fake = (old_r_offset != ~(Elf_Addr)0) && | ||
1410 | (current_r_offset - old_r_offset == MIPS_FAKEMCOUNT_OFFSET); | ||
1411 | old_r_offset = current_r_offset; | ||
1412 |