Annotation of /trunk/kernel-alx/patches-3.8/0106-3.8.7-all-fixes.patch
Parent Directory | Revision Log
Revision 2155 -
(hide annotations)
(download)
Tue Apr 16 06:32:43 2013 UTC (11 years, 5 months ago) by niro
File size: 72843 byte(s)
Tue Apr 16 06:32:43 2013 UTC (11 years, 5 months ago) by niro
File size: 72843 byte(s)
-linux-3.8.7
1 | niro | 2155 | diff --git a/arch/alpha/kernel/sys_nautilus.c b/arch/alpha/kernel/sys_nautilus.c |
2 | index 4d4c046..1383f86 100644 | ||
3 | --- a/arch/alpha/kernel/sys_nautilus.c | ||
4 | +++ b/arch/alpha/kernel/sys_nautilus.c | ||
5 | @@ -188,6 +188,10 @@ nautilus_machine_check(unsigned long vector, unsigned long la_ptr) | ||
6 | extern void free_reserved_mem(void *, void *); | ||
7 | extern void pcibios_claim_one_bus(struct pci_bus *); | ||
8 | |||
9 | +static struct resource irongate_io = { | ||
10 | + .name = "Irongate PCI IO", | ||
11 | + .flags = IORESOURCE_IO, | ||
12 | +}; | ||
13 | static struct resource irongate_mem = { | ||
14 | .name = "Irongate PCI MEM", | ||
15 | .flags = IORESOURCE_MEM, | ||
16 | @@ -209,6 +213,7 @@ nautilus_init_pci(void) | ||
17 | |||
18 | irongate = pci_get_bus_and_slot(0, 0); | ||
19 | bus->self = irongate; | ||
20 | + bus->resource[0] = &irongate_io; | ||
21 | bus->resource[1] = &irongate_mem; | ||
22 | |||
23 | pci_bus_size_bridges(bus); | ||
24 | diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c | ||
25 | index 1a89824..3b6de7a 100644 | ||
26 | --- a/arch/arm/mach-exynos/common.c | ||
27 | +++ b/arch/arm/mach-exynos/common.c | ||
28 | @@ -299,6 +299,7 @@ void exynos4_restart(char mode, const char *cmd) | ||
29 | |||
30 | void exynos5_restart(char mode, const char *cmd) | ||
31 | { | ||
32 | + struct device_node *np; | ||
33 | u32 val; | ||
34 | void __iomem *addr; | ||
35 | |||
36 | @@ -306,8 +307,9 @@ void exynos5_restart(char mode, const char *cmd) | ||
37 | val = 0x1; | ||
38 | addr = EXYNOS_SWRESET; | ||
39 | } else if (of_machine_is_compatible("samsung,exynos5440")) { | ||
40 | - val = (0x10 << 20) | (0x1 << 16); | ||
41 | - addr = EXYNOS5440_SWRESET; | ||
42 | + np = of_find_compatible_node(NULL, NULL, "samsung,exynos5440-clock"); | ||
43 | + addr = of_iomap(np, 0) + 0xcc; | ||
44 | + val = (0xfff << 20) | (0x1 << 16); | ||
45 | } else { | ||
46 | pr_err("%s: cannot support non-DT\n", __func__); | ||
47 | return; | ||
48 | diff --git a/arch/mips/kernel/mcount.S b/arch/mips/kernel/mcount.S | ||
49 | index 1658676..33d0671 100644 | ||
50 | --- a/arch/mips/kernel/mcount.S | ||
51 | +++ b/arch/mips/kernel/mcount.S | ||
52 | @@ -46,10 +46,9 @@ | ||
53 | PTR_L a5, PT_R9(sp) | ||
54 | PTR_L a6, PT_R10(sp) | ||
55 | PTR_L a7, PT_R11(sp) | ||
56 | -#else | ||
57 | - PTR_ADDIU sp, PT_SIZE | ||
58 | #endif | ||
59 | -.endm | ||
60 | + PTR_ADDIU sp, PT_SIZE | ||
61 | + .endm | ||
62 | |||
63 | .macro RETURN_BACK | ||
64 | jr ra | ||
65 | @@ -68,7 +67,11 @@ NESTED(ftrace_caller, PT_SIZE, ra) | ||
66 | .globl _mcount | ||
67 | _mcount: | ||
68 | b ftrace_stub | ||
69 | - addiu sp,sp,8 | ||
70 | +#ifdef CONFIG_32BIT | ||
71 | + addiu sp,sp,8 | ||
72 | +#else | ||
73 | + nop | ||
74 | +#endif | ||
75 | |||
76 | /* When tracing is activated, it calls ftrace_caller+8 (aka here) */ | ||
77 | lw t1, function_trace_stop | ||
78 | diff --git a/arch/mips/lib/bitops.c b/arch/mips/lib/bitops.c | ||
79 | index 239a9c9..f3f7756 100644 | ||
80 | --- a/arch/mips/lib/bitops.c | ||
81 | +++ b/arch/mips/lib/bitops.c | ||
82 | @@ -90,12 +90,12 @@ int __mips_test_and_set_bit(unsigned long nr, | ||
83 | unsigned bit = nr & SZLONG_MASK; | ||
84 | unsigned long mask; | ||
85 | unsigned long flags; | ||
86 | - unsigned long res; | ||
87 | + int res; | ||
88 | |||
89 | a += nr >> SZLONG_LOG; | ||
90 | mask = 1UL << bit; | ||
91 | raw_local_irq_save(flags); | ||
92 | - res = (mask & *a); | ||
93 | + res = (mask & *a) != 0; | ||
94 | *a |= mask; | ||
95 | raw_local_irq_restore(flags); | ||
96 | return res; | ||
97 | @@ -116,12 +116,12 @@ int __mips_test_and_set_bit_lock(unsigned long nr, | ||
98 | unsigned bit = nr & SZLONG_MASK; | ||
99 | unsigned long mask; | ||
100 | unsigned long flags; | ||
101 | - unsigned long res; | ||
102 | + int res; | ||
103 | |||
104 | a += nr >> SZLONG_LOG; | ||
105 | mask = 1UL << bit; | ||
106 | raw_local_irq_save(flags); | ||
107 | - res = (mask & *a); | ||
108 | + res = (mask & *a) != 0; | ||
109 | *a |= mask; | ||
110 | raw_local_irq_restore(flags); | ||
111 | return res; | ||
112 | @@ -141,12 +141,12 @@ int __mips_test_and_clear_bit(unsigned long nr, volatile unsigned long *addr) | ||
113 | unsigned bit = nr & SZLONG_MASK; | ||
114 | unsigned long mask; | ||
115 | unsigned long flags; | ||
116 | - unsigned long res; | ||
117 | + int res; | ||
118 | |||
119 | a += nr >> SZLONG_LOG; | ||
120 | mask = 1UL << bit; | ||
121 | raw_local_irq_save(flags); | ||
122 | - res = (mask & *a); | ||
123 | + res = (mask & *a) != 0; | ||
124 | *a &= ~mask; | ||
125 | raw_local_irq_restore(flags); | ||
126 | return res; | ||
127 | @@ -166,12 +166,12 @@ int __mips_test_and_change_bit(unsigned long nr, volatile unsigned long *addr) | ||
128 | unsigned bit = nr & SZLONG_MASK; | ||
129 | unsigned long mask; | ||
130 | unsigned long flags; | ||
131 | - unsigned long res; | ||
132 | + int res; | ||
133 | |||
134 | a += nr >> SZLONG_LOG; | ||
135 | mask = 1UL << bit; | ||
136 | raw_local_irq_save(flags); | ||
137 | - res = (mask & *a); | ||
138 | + res = (mask & *a) != 0; | ||
139 | *a ^= mask; | ||
140 | raw_local_irq_restore(flags); | ||
141 | return res; | ||
142 | diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c | ||
143 | index 0da39fe..299731e 100644 | ||
144 | --- a/arch/powerpc/platforms/pseries/lpar.c | ||
145 | +++ b/arch/powerpc/platforms/pseries/lpar.c | ||
146 | @@ -186,7 +186,13 @@ static long pSeries_lpar_hpte_remove(unsigned long hpte_group) | ||
147 | (0x1UL << 4), &dummy1, &dummy2); | ||
148 | if (lpar_rc == H_SUCCESS) | ||
149 | return i; | ||
150 | - BUG_ON(lpar_rc != H_NOT_FOUND); | ||
151 | + | ||
152 | + /* | ||
153 | + * The test for adjunct partition is performed before the | ||
154 | + * ANDCOND test. H_RESOURCE may be returned, so we need to | ||
155 | + * check for that as well. | ||
156 | + */ | ||
157 | + BUG_ON(lpar_rc != H_NOT_FOUND && lpar_rc != H_RESOURCE); | ||
158 | |||
159 | slot_offset++; | ||
160 | slot_offset &= 0x7; | ||
161 | diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile | ||
162 | index 8a84501..5ef205c 100644 | ||
163 | --- a/arch/x86/boot/compressed/Makefile | ||
164 | +++ b/arch/x86/boot/compressed/Makefile | ||
165 | @@ -4,7 +4,7 @@ | ||
166 | # create a compressed vmlinux image from the original vmlinux | ||
167 | # | ||
168 | |||
169 | -targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.xz vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o | ||
170 | +targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.xz vmlinux.bin.lzo | ||
171 | |||
172 | KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 | ||
173 | KBUILD_CFLAGS += -fno-strict-aliasing -fPIC | ||
174 | @@ -29,7 +29,6 @@ VMLINUX_OBJS = $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o \ | ||
175 | $(obj)/piggy.o | ||
176 | |||
177 | $(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone | ||
178 | -$(obj)/efi_stub_$(BITS).o: KBUILD_CLFAGS += -fshort-wchar -mno-red-zone | ||
179 | |||
180 | ifeq ($(CONFIG_EFI_STUB), y) | ||
181 | VMLINUX_OBJS += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o | ||
182 | @@ -43,7 +42,7 @@ OBJCOPYFLAGS_vmlinux.bin := -R .comment -S | ||
183 | $(obj)/vmlinux.bin: vmlinux FORCE | ||
184 | $(call if_changed,objcopy) | ||
185 | |||
186 | -targets += vmlinux.bin.all vmlinux.relocs | ||
187 | +targets += $(patsubst $(obj)/%,%,$(VMLINUX_OBJS)) vmlinux.bin.all vmlinux.relocs | ||
188 | |||
189 | CMD_RELOCS = arch/x86/tools/relocs | ||
190 | quiet_cmd_relocs = RELOCS $@ | ||
191 | diff --git a/arch/x86/include/asm/syscall.h b/arch/x86/include/asm/syscall.h | ||
192 | index 1ace47b..2e188d6 100644 | ||
193 | --- a/arch/x86/include/asm/syscall.h | ||
194 | +++ b/arch/x86/include/asm/syscall.h | ||
195 | @@ -29,13 +29,13 @@ extern const unsigned long sys_call_table[]; | ||
196 | */ | ||
197 | static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs) | ||
198 | { | ||
199 | - return regs->orig_ax & __SYSCALL_MASK; | ||
200 | + return regs->orig_ax; | ||
201 | } | ||
202 | |||
203 | static inline void syscall_rollback(struct task_struct *task, | ||
204 | struct pt_regs *regs) | ||
205 | { | ||
206 | - regs->ax = regs->orig_ax & __SYSCALL_MASK; | ||
207 | + regs->ax = regs->orig_ax; | ||
208 | } | ||
209 | |||
210 | static inline long syscall_get_error(struct task_struct *task, | ||
211 | diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c | ||
212 | index 7881477..6d2f7c0 100644 | ||
213 | --- a/block/blk-sysfs.c | ||
214 | +++ b/block/blk-sysfs.c | ||
215 | @@ -229,6 +229,8 @@ queue_store_##name(struct request_queue *q, const char *page, size_t count) \ | ||
216 | unsigned long val; \ | ||
217 | ssize_t ret; \ | ||
218 | ret = queue_var_store(&val, page, count); \ | ||
219 | + if (ret < 0) \ | ||
220 | + return ret; \ | ||
221 | if (neg) \ | ||
222 | val = !val; \ | ||
223 | \ | ||
224 | diff --git a/crypto/gcm.c b/crypto/gcm.c | ||
225 | index 1a25263..b97b186 100644 | ||
226 | --- a/crypto/gcm.c | ||
227 | +++ b/crypto/gcm.c | ||
228 | @@ -44,6 +44,7 @@ struct crypto_rfc4543_ctx { | ||
229 | |||
230 | struct crypto_rfc4543_req_ctx { | ||
231 | u8 auth_tag[16]; | ||
232 | + u8 assocbuf[32]; | ||
233 | struct scatterlist cipher[1]; | ||
234 | struct scatterlist payload[2]; | ||
235 | struct scatterlist assoc[2]; | ||
236 | @@ -1142,9 +1143,19 @@ static struct aead_request *crypto_rfc4543_crypt(struct aead_request *req, | ||
237 | scatterwalk_crypto_chain(payload, dst, vdst == req->iv + 8, 2); | ||
238 | assoclen += 8 + req->cryptlen - (enc ? 0 : authsize); | ||
239 | |||
240 | - sg_init_table(assoc, 2); | ||
241 | - sg_set_page(assoc, sg_page(req->assoc), req->assoc->length, | ||
242 | - req->assoc->offset); | ||
243 | + if (req->assoc->length == req->assoclen) { | ||
244 | + sg_init_table(assoc, 2); | ||
245 | + sg_set_page(assoc, sg_page(req->assoc), req->assoc->length, | ||
246 | + req->assoc->offset); | ||
247 | + } else { | ||
248 | + BUG_ON(req->assoclen > sizeof(rctx->assocbuf)); | ||
249 | + | ||
250 | + scatterwalk_map_and_copy(rctx->assocbuf, req->assoc, 0, | ||
251 | + req->assoclen, 0); | ||
252 | + | ||
253 | + sg_init_table(assoc, 2); | ||
254 | + sg_set_buf(assoc, rctx->assocbuf, req->assoclen); | ||
255 | + } | ||
256 | scatterwalk_crypto_chain(assoc, payload, 0, 2); | ||
257 | |||
258 | aead_request_set_tfm(subreq, ctx->child); | ||
259 | diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c | ||
260 | index 7928d4d..eb73798 100644 | ||
261 | --- a/drivers/acpi/pci_root.c | ||
262 | +++ b/drivers/acpi/pci_root.c | ||
263 | @@ -454,7 +454,6 @@ static int acpi_pci_root_add(struct acpi_device *device) | ||
264 | acpi_handle handle; | ||
265 | struct acpi_device *child; | ||
266 | u32 flags, base_flags; | ||
267 | - bool is_osc_granted = false; | ||
268 | |||
269 | root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL); | ||
270 | if (!root) | ||
271 | @@ -525,60 +524,6 @@ static int acpi_pci_root_add(struct acpi_device *device) | ||
272 | flags = base_flags = OSC_PCI_SEGMENT_GROUPS_SUPPORT; | ||
273 | acpi_pci_osc_support(root, flags); | ||
274 | |||
275 | - /* Indicate support for various _OSC capabilities. */ | ||
276 | - if (pci_ext_cfg_avail()) | ||
277 | - flags |= OSC_EXT_PCI_CONFIG_SUPPORT; | ||
278 | - if (pcie_aspm_support_enabled()) { | ||
279 | - flags |= OSC_ACTIVE_STATE_PWR_SUPPORT | | ||
280 | - OSC_CLOCK_PWR_CAPABILITY_SUPPORT; | ||
281 | - } | ||
282 | - if (pci_msi_enabled()) | ||
283 | - flags |= OSC_MSI_SUPPORT; | ||
284 | - if (flags != base_flags) { | ||
285 | - status = acpi_pci_osc_support(root, flags); | ||
286 | - if (ACPI_FAILURE(status)) { | ||
287 | - dev_info(&device->dev, "ACPI _OSC support " | ||
288 | - "notification failed, disabling PCIe ASPM\n"); | ||
289 | - pcie_no_aspm(); | ||
290 | - flags = base_flags; | ||
291 | - } | ||
292 | - } | ||
293 | - if (!pcie_ports_disabled | ||
294 | - && (flags & ACPI_PCIE_REQ_SUPPORT) == ACPI_PCIE_REQ_SUPPORT) { | ||
295 | - flags = OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL | ||
296 | - | OSC_PCI_EXPRESS_NATIVE_HP_CONTROL | ||
297 | - | OSC_PCI_EXPRESS_PME_CONTROL; | ||
298 | - | ||
299 | - if (pci_aer_available()) { | ||
300 | - if (aer_acpi_firmware_first()) | ||
301 | - dev_dbg(&device->dev, | ||
302 | - "PCIe errors handled by BIOS.\n"); | ||
303 | - else | ||
304 | - flags |= OSC_PCI_EXPRESS_AER_CONTROL; | ||
305 | - } | ||
306 | - | ||
307 | - dev_info(&device->dev, | ||
308 | - "Requesting ACPI _OSC control (0x%02x)\n", flags); | ||
309 | - | ||
310 | - status = acpi_pci_osc_control_set(device->handle, &flags, | ||
311 | - OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL); | ||
312 | - if (ACPI_SUCCESS(status)) { | ||
313 | - is_osc_granted = true; | ||
314 | - dev_info(&device->dev, | ||
315 | - "ACPI _OSC control (0x%02x) granted\n", flags); | ||
316 | - } else { | ||
317 | - is_osc_granted = false; | ||
318 | - dev_info(&device->dev, | ||
319 | - "ACPI _OSC request failed (%s), " | ||
320 | - "returned control mask: 0x%02x\n", | ||
321 | - acpi_format_exception(status), flags); | ||
322 | - } | ||
323 | - } else { | ||
324 | - dev_info(&device->dev, | ||
325 | - "Unable to request _OSC control " | ||
326 | - "(_OSC support mask: 0x%02x)\n", flags); | ||
327 | - } | ||
328 | - | ||
329 | /* | ||
330 | * TBD: Need PCI interface for enumeration/configuration of roots. | ||
331 | */ | ||
332 | @@ -618,14 +563,66 @@ static int acpi_pci_root_add(struct acpi_device *device) | ||
333 | list_for_each_entry(child, &device->children, node) | ||
334 | acpi_pci_bridge_scan(child); | ||
335 | |||
336 | - /* ASPM setting */ | ||
337 | - if (is_osc_granted) { | ||
338 | - if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) | ||
339 | - pcie_clear_aspm(root->bus); | ||
340 | + /* Indicate support for various _OSC capabilities. */ | ||
341 | + if (pci_ext_cfg_avail()) | ||
342 | + flags |= OSC_EXT_PCI_CONFIG_SUPPORT; | ||
343 | + if (pcie_aspm_support_enabled()) | ||
344 | + flags |= OSC_ACTIVE_STATE_PWR_SUPPORT | | ||
345 | + OSC_CLOCK_PWR_CAPABILITY_SUPPORT; | ||
346 | + if (pci_msi_enabled()) | ||
347 | + flags |= OSC_MSI_SUPPORT; | ||
348 | + if (flags != base_flags) { | ||
349 | + status = acpi_pci_osc_support(root, flags); | ||
350 | + if (ACPI_FAILURE(status)) { | ||
351 | + dev_info(root->bus->bridge, "ACPI _OSC support " | ||
352 | + "notification failed, disabling PCIe ASPM\n"); | ||
353 | + pcie_no_aspm(); | ||
354 | + flags = base_flags; | ||
355 | + } | ||
356 | + } | ||
357 | + | ||
358 | + if (!pcie_ports_disabled | ||
359 | + && (flags & ACPI_PCIE_REQ_SUPPORT) == ACPI_PCIE_REQ_SUPPORT) { | ||
360 | + flags = OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL | ||
361 | + | OSC_PCI_EXPRESS_NATIVE_HP_CONTROL | ||
362 | + | OSC_PCI_EXPRESS_PME_CONTROL; | ||
363 | + | ||
364 | + if (pci_aer_available()) { | ||
365 | + if (aer_acpi_firmware_first()) | ||
366 | + dev_dbg(root->bus->bridge, | ||
367 | + "PCIe errors handled by BIOS.\n"); | ||
368 | + else | ||
369 | + flags |= OSC_PCI_EXPRESS_AER_CONTROL; | ||
370 | + } | ||
371 | + | ||
372 | + dev_info(root->bus->bridge, | ||
373 | + "Requesting ACPI _OSC control (0x%02x)\n", flags); | ||
374 | + | ||
375 | + status = acpi_pci_osc_control_set(device->handle, &flags, | ||
376 | + OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL); | ||
377 | + if (ACPI_SUCCESS(status)) { | ||
378 | + dev_info(root->bus->bridge, | ||
379 | + "ACPI _OSC control (0x%02x) granted\n", flags); | ||
380 | + if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) { | ||
381 | + /* | ||
382 | + * We have ASPM control, but the FADT indicates | ||
383 | + * that it's unsupported. Clear it. | ||
384 | + */ | ||
385 | + pcie_clear_aspm(root->bus); | ||
386 | + } | ||
387 | + } else { | ||
388 | + dev_info(root->bus->bridge, | ||
389 | + "ACPI _OSC request failed (%s), " | ||
390 | + "returned control mask: 0x%02x\n", | ||
391 | + acpi_format_exception(status), flags); | ||
392 | + pr_info("ACPI _OSC control for PCIe not granted, " | ||
393 | + "disabling ASPM\n"); | ||
394 | + pcie_no_aspm(); | ||
395 | + } | ||
396 | } else { | ||
397 | - pr_info("ACPI _OSC control for PCIe not granted, " | ||
398 | - "disabling ASPM\n"); | ||
399 | - pcie_no_aspm(); | ||
400 | + dev_info(root->bus->bridge, | ||
401 | + "Unable to request _OSC control " | ||
402 | + "(_OSC support mask: 0x%02x)\n", flags); | ||
403 | } | ||
404 | |||
405 | pci_acpi_add_bus_pm_notifier(device, root->bus); | ||
406 | diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c | ||
407 | index d2ba439..78283bb 100644 | ||
408 | --- a/drivers/ata/ata_piix.c | ||
409 | +++ b/drivers/ata/ata_piix.c | ||
410 | @@ -150,6 +150,7 @@ enum piix_controller_ids { | ||
411 | tolapai_sata, | ||
412 | piix_pata_vmw, /* PIIX4 for VMware, spurious DMA_ERR */ | ||
413 | ich8_sata_snb, | ||
414 | + ich8_2port_sata_snb, | ||
415 | }; | ||
416 | |||
417 | struct piix_map_db { | ||
418 | @@ -304,7 +305,7 @@ static const struct pci_device_id piix_pci_tbl[] = { | ||
419 | /* SATA Controller IDE (Lynx Point) */ | ||
420 | { 0x8086, 0x8c01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, | ||
421 | /* SATA Controller IDE (Lynx Point) */ | ||
422 | - { 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
423 | + { 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb }, | ||
424 | /* SATA Controller IDE (Lynx Point) */ | ||
425 | { 0x8086, 0x8c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
426 | /* SATA Controller IDE (Lynx Point-LP) */ | ||
427 | @@ -439,6 +440,7 @@ static const struct piix_map_db *piix_map_db_table[] = { | ||
428 | [ich8m_apple_sata] = &ich8m_apple_map_db, | ||
429 | [tolapai_sata] = &tolapai_map_db, | ||
430 | [ich8_sata_snb] = &ich8_map_db, | ||
431 | + [ich8_2port_sata_snb] = &ich8_2port_map_db, | ||
432 | }; | ||
433 | |||
434 | static struct pci_bits piix_enable_bits[] = { | ||
435 | @@ -1242,6 +1244,16 @@ static struct ata_port_info piix_port_info[] = { | ||
436 | .udma_mask = ATA_UDMA6, | ||
437 | .port_ops = &piix_sata_ops, | ||
438 | }, | ||
439 | + | ||
440 | + [ich8_2port_sata_snb] = | ||
441 | + { | ||
442 | + .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR | ||
443 | + | PIIX_FLAG_PIO16, | ||
444 | + .pio_mask = ATA_PIO4, | ||
445 | + .mwdma_mask = ATA_MWDMA2, | ||
446 | + .udma_mask = ATA_UDMA6, | ||
447 | + .port_ops = &piix_sata_ops, | ||
448 | + }, | ||
449 | }; | ||
450 | |||
451 | #define AHCI_PCI_BAR 5 | ||
452 | diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c | ||
453 | index 46cd3f4..501c209 100644 | ||
454 | --- a/drivers/ata/libata-core.c | ||
455 | +++ b/drivers/ata/libata-core.c | ||
456 | @@ -2329,7 +2329,7 @@ int ata_dev_configure(struct ata_device *dev) | ||
457 | * from SATA Settings page of Identify Device Data Log. | ||
458 | */ | ||
459 | if (ata_id_has_devslp(dev->id)) { | ||
460 | - u8 sata_setting[ATA_SECT_SIZE]; | ||
461 | + u8 *sata_setting = ap->sector_buf; | ||
462 | int i, j; | ||
463 | |||
464 | dev->flags |= ATA_DFLAG_DEVSLP; | ||
465 | @@ -2437,6 +2437,9 @@ int ata_dev_configure(struct ata_device *dev) | ||
466 | dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128, | ||
467 | dev->max_sectors); | ||
468 | |||
469 | + if (dev->horkage & ATA_HORKAGE_MAX_SEC_LBA48) | ||
470 | + dev->max_sectors = ATA_MAX_SECTORS_LBA48; | ||
471 | + | ||
472 | if (ap->ops->dev_config) | ||
473 | ap->ops->dev_config(dev); | ||
474 | |||
475 | @@ -4098,6 +4101,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { | ||
476 | /* Weird ATAPI devices */ | ||
477 | { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 }, | ||
478 | { "QUANTUM DAT DAT72-000", NULL, ATA_HORKAGE_ATAPI_MOD16_DMA }, | ||
479 | + { "Slimtype DVD A DS8A8SH", NULL, ATA_HORKAGE_MAX_SEC_LBA48 }, | ||
480 | |||
481 | /* Devices we expect to fail diagnostics */ | ||
482 | |||
483 | diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c | ||
484 | index e6732cf..79f4fca 100644 | ||
485 | --- a/drivers/base/regmap/regcache-rbtree.c | ||
486 | +++ b/drivers/base/regmap/regcache-rbtree.c | ||
487 | @@ -398,7 +398,7 @@ static int regcache_rbtree_sync(struct regmap *map, unsigned int min, | ||
488 | base = 0; | ||
489 | |||
490 | if (max < rbnode->base_reg + rbnode->blklen) | ||
491 | - end = rbnode->base_reg + rbnode->blklen - max; | ||
492 | + end = max - rbnode->base_reg + 1; | ||
493 | else | ||
494 | end = rbnode->blklen; | ||
495 | |||
496 | diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c | ||
497 | index f00b059..ab3a020 100644 | ||
498 | --- a/drivers/base/regmap/regmap.c | ||
499 | +++ b/drivers/base/regmap/regmap.c | ||
500 | @@ -662,12 +662,12 @@ struct regmap *regmap_init(struct device *dev, | ||
501 | } | ||
502 | } | ||
503 | |||
504 | + regmap_debugfs_init(map, config->name); | ||
505 | + | ||
506 | ret = regcache_init(map, config); | ||
507 | if (ret != 0) | ||
508 | goto err_range; | ||
509 | |||
510 | - regmap_debugfs_init(map, config->name); | ||
511 | - | ||
512 | /* Add a devres resource for dev_get_regmap() */ | ||
513 | m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL); | ||
514 | if (!m) { | ||
515 | diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c | ||
516 | index 7012ea8..41fc550 100644 | ||
517 | --- a/drivers/cpufreq/exynos-cpufreq.c | ||
518 | +++ b/drivers/cpufreq/exynos-cpufreq.c | ||
519 | @@ -222,8 +222,6 @@ static int exynos_cpufreq_cpu_init(struct cpufreq_policy *policy) | ||
520 | |||
521 | cpufreq_frequency_table_get_attr(exynos_info->freq_table, policy->cpu); | ||
522 | |||
523 | - locking_frequency = exynos_getspeed(0); | ||
524 | - | ||
525 | /* set the transition latency value */ | ||
526 | policy->cpuinfo.transition_latency = 100000; | ||
527 | |||
528 | @@ -288,6 +286,8 @@ static int __init exynos_cpufreq_init(void) | ||
529 | goto err_vdd_arm; | ||
530 | } | ||
531 | |||
532 | + locking_frequency = exynos_getspeed(0); | ||
533 | + | ||
534 | register_pm_notifier(&exynos_cpufreq_nb); | ||
535 | |||
536 | if (cpufreq_register_driver(&exynos_driver)) { | ||
537 | diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c | ||
538 | index 8bc5fef..22c9063 100644 | ||
539 | --- a/drivers/crypto/ux500/cryp/cryp_core.c | ||
540 | +++ b/drivers/crypto/ux500/cryp/cryp_core.c | ||
541 | @@ -1750,7 +1750,7 @@ static struct platform_driver cryp_driver = { | ||
542 | .shutdown = ux500_cryp_shutdown, | ||
543 | .driver = { | ||
544 | .owner = THIS_MODULE, | ||
545 | - .name = "cryp1" | ||
546 | + .name = "cryp1", | ||
547 | .pm = &ux500_cryp_pm, | ||
548 | } | ||
549 | }; | ||
550 | diff --git a/drivers/eisa/pci_eisa.c b/drivers/eisa/pci_eisa.c | ||
551 | index cdae207..6c3fca9 100644 | ||
552 | --- a/drivers/eisa/pci_eisa.c | ||
553 | +++ b/drivers/eisa/pci_eisa.c | ||
554 | @@ -19,10 +19,10 @@ | ||
555 | /* There is only *one* pci_eisa device per machine, right ? */ | ||
556 | static struct eisa_root_device pci_eisa_root; | ||
557 | |||
558 | -static int __init pci_eisa_init(struct pci_dev *pdev, | ||
559 | - const struct pci_device_id *ent) | ||
560 | +static int __init pci_eisa_init(struct pci_dev *pdev) | ||
561 | { | ||
562 | - int rc; | ||
563 | + int rc, i; | ||
564 | + struct resource *res, *bus_res = NULL; | ||
565 | |||
566 | if ((rc = pci_enable_device (pdev))) { | ||
567 | printk (KERN_ERR "pci_eisa : Could not enable device %s\n", | ||
568 | @@ -30,9 +30,30 @@ static int __init pci_eisa_init(struct pci_dev *pdev, | ||
569 | return rc; | ||
570 | } | ||
571 | |||
572 | + /* | ||
573 | + * The Intel 82375 PCI-EISA bridge is a subtractive-decode PCI | ||
574 | + * device, so the resources available on EISA are the same as those | ||
575 | + * available on the 82375 bus. This works the same as a PCI-PCI | ||
576 | + * bridge in subtractive-decode mode (see pci_read_bridge_bases()). | ||
577 | + * We assume other PCI-EISA bridges are similar. | ||
578 | + * | ||
579 | + * eisa_root_register() can only deal with a single io port resource, | ||
580 | + * so we use the first valid io port resource. | ||
581 | + */ | ||
582 | + pci_bus_for_each_resource(pdev->bus, res, i) | ||
583 | + if (res && (res->flags & IORESOURCE_IO)) { | ||
584 | + bus_res = res; | ||
585 | + break; | ||
586 | + } | ||
587 | + | ||
588 | + if (!bus_res) { | ||
589 | + dev_err(&pdev->dev, "No resources available\n"); | ||
590 | + return -1; | ||
591 | + } | ||
592 | + | ||
593 | pci_eisa_root.dev = &pdev->dev; | ||
594 | - pci_eisa_root.res = pdev->bus->resource[0]; | ||
595 | - pci_eisa_root.bus_base_addr = pdev->bus->resource[0]->start; | ||
596 | + pci_eisa_root.res = bus_res; | ||
597 | + pci_eisa_root.bus_base_addr = bus_res->start; | ||
598 | pci_eisa_root.slots = EISA_MAX_SLOTS; | ||
599 | pci_eisa_root.dma_mask = pdev->dma_mask; | ||
600 | dev_set_drvdata(pci_eisa_root.dev, &pci_eisa_root); | ||
601 | @@ -45,22 +66,26 @@ static int __init pci_eisa_init(struct pci_dev *pdev, | ||
602 | return 0; | ||
603 | } | ||
604 | |||
605 | -static struct pci_device_id pci_eisa_pci_tbl[] = { | ||
606 | - { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, | ||
607 | - PCI_CLASS_BRIDGE_EISA << 8, 0xffff00, 0 }, | ||
608 | - { 0, } | ||
609 | -}; | ||
610 | +/* | ||
611 | + * We have to call pci_eisa_init_early() before pnpacpi_init()/isapnp_init(). | ||
612 | + * Otherwise pnp resource will get enabled early and could prevent eisa | ||
613 | + * to be initialized. | ||
614 | + * Also need to make sure pci_eisa_init_early() is called after | ||
615 | + * x86/pci_subsys_init(). | ||
616 | + * So need to use subsys_initcall_sync with it. | ||
617 | + */ | ||
618 | +static int __init pci_eisa_init_early(void) | ||
619 | +{ | ||
620 | + struct pci_dev *dev = NULL; | ||
621 | + int ret; | ||
622 | |||
623 | -static struct pci_driver __refdata pci_eisa_driver = { | ||
624 | - .name = "pci_eisa", | ||
625 | - .id_table = pci_eisa_pci_tbl, | ||
626 | - .probe = pci_eisa_init, | ||
627 | -}; | ||
628 | + for_each_pci_dev(dev) | ||
629 | + if ((dev->class >> 8) == PCI_CLASS_BRIDGE_EISA) { | ||
630 | + ret = pci_eisa_init(dev); | ||
631 | + if (ret) | ||
632 | + return ret; | ||
633 | + } | ||
634 | |||
635 | -static int __init pci_eisa_init_module (void) | ||
636 | -{ | ||
637 | - return pci_register_driver (&pci_eisa_driver); | ||
638 | + return 0; | ||
639 | } | ||
640 | - | ||
641 | -device_initcall(pci_eisa_init_module); | ||
642 | -MODULE_DEVICE_TABLE(pci, pci_eisa_pci_tbl); | ||
643 | +subsys_initcall_sync(pci_eisa_init_early); | ||
644 | diff --git a/drivers/gpio/gpio-stmpe.c b/drivers/gpio/gpio-stmpe.c | ||
645 | index 770476a..3ce5bc3 100644 | ||
646 | --- a/drivers/gpio/gpio-stmpe.c | ||
647 | +++ b/drivers/gpio/gpio-stmpe.c | ||
648 | @@ -307,11 +307,15 @@ static const struct irq_domain_ops stmpe_gpio_irq_simple_ops = { | ||
649 | .xlate = irq_domain_xlate_twocell, | ||
650 | }; | ||
651 | |||
652 | -static int stmpe_gpio_irq_init(struct stmpe_gpio *stmpe_gpio) | ||
653 | +static int stmpe_gpio_irq_init(struct stmpe_gpio *stmpe_gpio, | ||
654 | + struct device_node *np) | ||
655 | { | ||
656 | - int base = stmpe_gpio->irq_base; | ||
657 | + int base = 0; | ||
658 | |||
659 | - stmpe_gpio->domain = irq_domain_add_simple(NULL, | ||
660 | + if (!np) | ||
661 | + base = stmpe_gpio->irq_base; | ||
662 | + | ||
663 | + stmpe_gpio->domain = irq_domain_add_simple(np, | ||
664 | stmpe_gpio->chip.ngpio, base, | ||
665 | &stmpe_gpio_irq_simple_ops, stmpe_gpio); | ||
666 | if (!stmpe_gpio->domain) { | ||
667 | @@ -346,6 +350,9 @@ static int stmpe_gpio_probe(struct platform_device *pdev) | ||
668 | stmpe_gpio->chip = template_chip; | ||
669 | stmpe_gpio->chip.ngpio = stmpe->num_gpios; | ||
670 | stmpe_gpio->chip.dev = &pdev->dev; | ||
671 | +#ifdef CONFIG_OF | ||
672 | + stmpe_gpio->chip.of_node = np; | ||
673 | +#endif | ||
674 | stmpe_gpio->chip.base = pdata ? pdata->gpio_base : -1; | ||
675 | |||
676 | if (pdata) | ||
677 | @@ -366,7 +373,7 @@ static int stmpe_gpio_probe(struct platform_device *pdev) | ||
678 | goto out_free; | ||
679 | |||
680 | if (irq >= 0) { | ||
681 | - ret = stmpe_gpio_irq_init(stmpe_gpio); | ||
682 | + ret = stmpe_gpio_irq_init(stmpe_gpio, np); | ||
683 | if (ret) | ||
684 | goto out_disable; | ||
685 | |||
686 | diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c | ||
687 | index 133b413..32d7775 100644 | ||
688 | --- a/drivers/gpu/drm/drm_fops.c | ||
689 | +++ b/drivers/gpu/drm/drm_fops.c | ||
690 | @@ -123,6 +123,7 @@ int drm_open(struct inode *inode, struct file *filp) | ||
691 | int retcode = 0; | ||
692 | int need_setup = 0; | ||
693 | struct address_space *old_mapping; | ||
694 | + struct address_space *old_imapping; | ||
695 | |||
696 | minor = idr_find(&drm_minors_idr, minor_id); | ||
697 | if (!minor) | ||
698 | @@ -137,6 +138,7 @@ int drm_open(struct inode *inode, struct file *filp) | ||
699 | if (!dev->open_count++) | ||
700 | need_setup = 1; | ||
701 | mutex_lock(&dev->struct_mutex); | ||
702 | + old_imapping = inode->i_mapping; | ||
703 | old_mapping = dev->dev_mapping; | ||
704 | if (old_mapping == NULL) | ||
705 | dev->dev_mapping = &inode->i_data; | ||
706 | @@ -159,8 +161,8 @@ int drm_open(struct inode *inode, struct file *filp) | ||
707 | |||
708 | err_undo: | ||
709 | mutex_lock(&dev->struct_mutex); | ||
710 | - filp->f_mapping = old_mapping; | ||
711 | - inode->i_mapping = old_mapping; | ||
712 | + filp->f_mapping = old_imapping; | ||
713 | + inode->i_mapping = old_imapping; | ||
714 | iput(container_of(dev->dev_mapping, struct inode, i_data)); | ||
715 | dev->dev_mapping = old_mapping; | ||
716 | mutex_unlock(&dev->struct_mutex); | ||
717 | diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c | ||
718 | index 7adf5a7..ba8805a 100644 | ||
719 | --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c | ||
720 | +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c | ||
721 | @@ -43,7 +43,7 @@ eb_create(int size) | ||
722 | { | ||
723 | struct eb_objects *eb; | ||
724 | int count = PAGE_SIZE / sizeof(struct hlist_head) / 2; | ||
725 | - BUILD_BUG_ON(!is_power_of_2(PAGE_SIZE / sizeof(struct hlist_head))); | ||
726 | + BUILD_BUG_ON_NOT_POWER_OF_2(PAGE_SIZE / sizeof(struct hlist_head)); | ||
727 | while (count > size) | ||
728 | count >>= 1; | ||
729 | eb = kzalloc(count*sizeof(struct hlist_head) + | ||
730 | diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c | ||
731 | index b52ed09..625b091 100644 | ||
732 | --- a/drivers/gpu/drm/i915/intel_crt.c | ||
733 | +++ b/drivers/gpu/drm/i915/intel_crt.c | ||
734 | @@ -45,6 +45,9 @@ | ||
735 | |||
736 | struct intel_crt { | ||
737 | struct intel_encoder base; | ||
738 | + /* DPMS state is stored in the connector, which we need in the | ||
739 | + * encoder's enable/disable callbacks */ | ||
740 | + struct intel_connector *connector; | ||
741 | bool force_hotplug_required; | ||
742 | u32 adpa_reg; | ||
743 | }; | ||
744 | @@ -81,29 +84,6 @@ static bool intel_crt_get_hw_state(struct intel_encoder *encoder, | ||
745 | return true; | ||
746 | } | ||
747 | |||
748 | -static void intel_disable_crt(struct intel_encoder *encoder) | ||
749 | -{ | ||
750 | - struct drm_i915_private *dev_priv = encoder->base.dev->dev_private; | ||
751 | - struct intel_crt *crt = intel_encoder_to_crt(encoder); | ||
752 | - u32 temp; | ||
753 | - | ||
754 | - temp = I915_READ(crt->adpa_reg); | ||
755 | - temp |= ADPA_HSYNC_CNTL_DISABLE | ADPA_VSYNC_CNTL_DISABLE; | ||
756 | - temp &= ~ADPA_DAC_ENABLE; | ||
757 | - I915_WRITE(crt->adpa_reg, temp); | ||
758 | -} | ||
759 | - | ||
760 | -static void intel_enable_crt(struct intel_encoder *encoder) | ||
761 | -{ | ||
762 | - struct drm_i915_private *dev_priv = encoder->base.dev->dev_private; | ||
763 | - struct intel_crt *crt = intel_encoder_to_crt(encoder); | ||
764 | - u32 temp; | ||
765 | - | ||
766 | - temp = I915_READ(crt->adpa_reg); | ||
767 | - temp |= ADPA_DAC_ENABLE; | ||
768 | - I915_WRITE(crt->adpa_reg, temp); | ||
769 | -} | ||
770 | - | ||
771 | /* Note: The caller is required to filter out dpms modes not supported by the | ||
772 | * platform. */ | ||
773 | static void intel_crt_set_dpms(struct intel_encoder *encoder, int mode) | ||
774 | @@ -135,6 +115,19 @@ static void intel_crt_set_dpms(struct intel_encoder *encoder, int mode) | ||
775 | I915_WRITE(crt->adpa_reg, temp); | ||
776 | } | ||
777 | |||
778 | +static void intel_disable_crt(struct intel_encoder *encoder) | ||
779 | +{ | ||
780 | + intel_crt_set_dpms(encoder, DRM_MODE_DPMS_OFF); | ||
781 | +} | ||
782 | + | ||
783 | +static void intel_enable_crt(struct intel_encoder *encoder) | ||
784 | +{ | ||
785 | + struct intel_crt *crt = intel_encoder_to_crt(encoder); | ||
786 | + | ||
787 | + intel_crt_set_dpms(encoder, crt->connector->base.dpms); | ||
788 | +} | ||
789 | + | ||
790 | + | ||
791 | static void intel_crt_dpms(struct drm_connector *connector, int mode) | ||
792 | { | ||
793 | struct drm_device *dev = connector->dev; | ||
794 | @@ -746,6 +739,7 @@ void intel_crt_init(struct drm_device *dev) | ||
795 | } | ||
796 | |||
797 | connector = &intel_connector->base; | ||
798 | + crt->connector = intel_connector; | ||
799 | drm_connector_init(dev, &intel_connector->base, | ||
800 | &intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA); | ||
801 | |||
802 | diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c | ||
803 | index e6e4df7..d3f834a 100644 | ||
804 | --- a/drivers/gpu/drm/i915/intel_display.c | ||
805 | +++ b/drivers/gpu/drm/i915/intel_display.c | ||
806 | @@ -8901,6 +8901,15 @@ static struct intel_quirk intel_quirks[] = { | ||
807 | |||
808 | /* Acer Aspire 4736Z */ | ||
809 | { 0x2a42, 0x1025, 0x0260, quirk_invert_brightness }, | ||
810 | + | ||
811 | + /* Acer/eMachines G725 */ | ||
812 | + { 0x2a42, 0x1025, 0x0210, quirk_invert_brightness }, | ||
813 | + | ||
814 | + /* Acer/eMachines e725 */ | ||
815 | + { 0x2a42, 0x1025, 0x0212, quirk_invert_brightness }, | ||
816 | + | ||
817 | + /* Acer/Packard Bell NCL20 */ | ||
818 | + { 0x2a42, 0x1025, 0x034b, quirk_invert_brightness }, | ||
819 | }; | ||
820 | |||
821 | static void intel_init_quirks(struct drm_device *dev) | ||
822 | diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c | ||
823 | index 4f50c40..2e7c949 100644 | ||
824 | --- a/drivers/gpu/drm/mgag200/mgag200_mode.c | ||
825 | +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c | ||
826 | @@ -751,8 +751,6 @@ static int mga_crtc_mode_set(struct drm_crtc *crtc, | ||
827 | int i; | ||
828 | unsigned char misc = 0; | ||
829 | unsigned char ext_vga[6]; | ||
830 | - unsigned char ext_vga_index24; | ||
831 | - unsigned char dac_index90 = 0; | ||
832 | u8 bppshift; | ||
833 | |||
834 | static unsigned char dacvalue[] = { | ||
835 | @@ -803,7 +801,6 @@ static int mga_crtc_mode_set(struct drm_crtc *crtc, | ||
836 | option2 = 0x0000b000; | ||
837 | break; | ||
838 | case G200_ER: | ||
839 | - dac_index90 = 0; | ||
840 | break; | ||
841 | } | ||
842 | |||
843 | @@ -852,10 +849,8 @@ static int mga_crtc_mode_set(struct drm_crtc *crtc, | ||
844 | WREG_DAC(i, dacvalue[i]); | ||
845 | } | ||
846 | |||
847 | - if (mdev->type == G200_ER) { | ||
848 | - WREG_DAC(0x90, dac_index90); | ||
849 | - } | ||
850 | - | ||
851 | + if (mdev->type == G200_ER) | ||
852 | + WREG_DAC(0x90, 0); | ||
853 | |||
854 | if (option) | ||
855 | pci_write_config_dword(dev->pdev, PCI_MGA_OPTION, option); | ||
856 | @@ -952,8 +947,6 @@ static int mga_crtc_mode_set(struct drm_crtc *crtc, | ||
857 | if (mdev->type == G200_WB) | ||
858 | ext_vga[1] |= 0x88; | ||
859 | |||
860 | - ext_vga_index24 = 0x05; | ||
861 | - | ||
862 | /* Set pixel clocks */ | ||
863 | misc = 0x2d; | ||
864 | WREG8(MGA_MISC_OUT, misc); | ||
865 | @@ -965,7 +958,7 @@ static int mga_crtc_mode_set(struct drm_crtc *crtc, | ||
866 | } | ||
867 | |||
868 | if (mdev->type == G200_ER) | ||
869 | - WREG_ECRT(24, ext_vga_index24); | ||
870 | + WREG_ECRT(0x24, 0x5); | ||
871 | |||
872 | if (mdev->type == G200_EV) { | ||
873 | WREG_ECRT(6, 0); | ||
874 | diff --git a/drivers/gpu/drm/nouveau/nouveau_abi16.c b/drivers/gpu/drm/nouveau/nouveau_abi16.c | ||
875 | index 4124192..b569fe8 100644 | ||
876 | --- a/drivers/gpu/drm/nouveau/nouveau_abi16.c | ||
877 | +++ b/drivers/gpu/drm/nouveau/nouveau_abi16.c | ||
878 | @@ -386,7 +386,7 @@ nouveau_abi16_ioctl_notifierobj_alloc(ABI16_IOCTL_ARGS) | ||
879 | struct nouveau_drm *drm = nouveau_drm(dev); | ||
880 | struct nouveau_device *device = nv_device(drm->device); | ||
881 | struct nouveau_abi16 *abi16 = nouveau_abi16_get(file_priv, dev); | ||
882 | - struct nouveau_abi16_chan *chan, *temp; | ||
883 | + struct nouveau_abi16_chan *chan = NULL, *temp; | ||
884 | struct nouveau_abi16_ntfy *ntfy; | ||
885 | struct nouveau_object *object; | ||
886 | struct nv_dma_class args = {}; | ||
887 | @@ -399,10 +399,11 @@ nouveau_abi16_ioctl_notifierobj_alloc(ABI16_IOCTL_ARGS) | ||
888 | if (unlikely(nv_device(abi16->device)->card_type >= NV_C0)) | ||
889 | return nouveau_abi16_put(abi16, -EINVAL); | ||
890 | |||
891 | - list_for_each_entry_safe(chan, temp, &abi16->channels, head) { | ||
892 | - if (chan->chan->handle == (NVDRM_CHAN | info->channel)) | ||
893 | + list_for_each_entry(temp, &abi16->channels, head) { | ||
894 | + if (temp->chan->handle == (NVDRM_CHAN | info->channel)) { | ||
895 | + chan = temp; | ||
896 | break; | ||
897 | - chan = NULL; | ||
898 | + } | ||
899 | } | ||
900 | |||
901 | if (!chan) | ||
902 | @@ -454,17 +455,18 @@ nouveau_abi16_ioctl_gpuobj_free(ABI16_IOCTL_ARGS) | ||
903 | { | ||
904 | struct drm_nouveau_gpuobj_free *fini = data; | ||
905 | struct nouveau_abi16 *abi16 = nouveau_abi16_get(file_priv, dev); | ||
906 | - struct nouveau_abi16_chan *chan, *temp; | ||
907 | + struct nouveau_abi16_chan *chan = NULL, *temp; | ||
908 | struct nouveau_abi16_ntfy *ntfy; | ||
909 | int ret; | ||
910 | |||
911 | if (unlikely(!abi16)) | ||
912 | return -ENOMEM; | ||
913 | |||
914 | - list_for_each_entry_safe(chan, temp, &abi16->channels, head) { | ||
915 | - if (chan->chan->handle == (NVDRM_CHAN | fini->channel)) | ||
916 | + list_for_each_entry(temp, &abi16->channels, head) { | ||
917 | + if (temp->chan->handle == (NVDRM_CHAN | fini->channel)) { | ||
918 | + chan = temp; | ||
919 | break; | ||
920 | - chan = NULL; | ||
921 | + } | ||
922 | } | ||
923 | |||
924 | if (!chan) | ||
925 | diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c | ||
926 | index 25ddf3e..811062c 100644 | ||
927 | --- a/drivers/hid/hid-magicmouse.c | ||
928 | +++ b/drivers/hid/hid-magicmouse.c | ||
929 | @@ -462,6 +462,21 @@ static int magicmouse_input_mapping(struct hid_device *hdev, | ||
930 | return 0; | ||
931 | } | ||
932 | |||
933 | +static void magicmouse_input_configured(struct hid_device *hdev, | ||
934 | + struct hid_input *hi) | ||
935 | + | ||
936 | +{ | ||
937 | + struct magicmouse_sc *msc = hid_get_drvdata(hdev); | ||
938 | + | ||
939 | + int ret = magicmouse_setup_input(msc->input, hdev); | ||
940 | + if (ret) { | ||
941 | + hid_err(hdev, "magicmouse setup input failed (%d)\n", ret); | ||
942 | + /* clean msc->input to notify probe() of the failure */ | ||
943 | + msc->input = NULL; | ||
944 | + } | ||
945 | +} | ||
946 | + | ||
947 | + | ||
948 | static int magicmouse_probe(struct hid_device *hdev, | ||
949 | const struct hid_device_id *id) | ||
950 | { | ||
951 | @@ -493,15 +508,10 @@ static int magicmouse_probe(struct hid_device *hdev, | ||
952 | goto err_free; | ||
953 | } | ||
954 | |||
955 | - /* We do this after hid-input is done parsing reports so that | ||
956 | - * hid-input uses the most natural button and axis IDs. | ||
957 | - */ | ||
958 | - if (msc->input) { | ||
959 | - ret = magicmouse_setup_input(msc->input, hdev); | ||
960 | - if (ret) { | ||
961 | - hid_err(hdev, "magicmouse setup input failed (%d)\n", ret); | ||
962 | - goto err_stop_hw; | ||
963 | - } | ||
964 | + if (!msc->input) { | ||
965 | + hid_err(hdev, "magicmouse input not registered\n"); | ||
966 | + ret = -ENOMEM; | ||
967 | + goto err_stop_hw; | ||
968 | } | ||
969 | |||
970 | if (id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE) | ||
971 | @@ -568,6 +578,7 @@ static struct hid_driver magicmouse_driver = { | ||
972 | .remove = magicmouse_remove, | ||
973 | .raw_event = magicmouse_raw_event, | ||
974 | .input_mapping = magicmouse_input_mapping, | ||
975 | + .input_configured = magicmouse_input_configured, | ||
976 | }; | ||
977 | |||
978 | static int __init magicmouse_init(void) | ||
979 | diff --git a/drivers/hwspinlock/hwspinlock_core.c b/drivers/hwspinlock/hwspinlock_core.c | ||
980 | index db713c0..461a0d7 100644 | ||
981 | --- a/drivers/hwspinlock/hwspinlock_core.c | ||
982 | +++ b/drivers/hwspinlock/hwspinlock_core.c | ||
983 | @@ -416,6 +416,8 @@ static int __hwspin_lock_request(struct hwspinlock *hwlock) | ||
984 | ret = pm_runtime_get_sync(dev); | ||
985 | if (ret < 0) { | ||
986 | dev_err(dev, "%s: can't power on device\n", __func__); | ||
987 | + pm_runtime_put_noidle(dev); | ||
988 | + module_put(dev->driver->owner); | ||
989 | return ret; | ||
990 | } | ||
991 | |||
992 | diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | ||
993 | index b3e3294..0d03d38 100644 | ||
994 | --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | ||
995 | +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | ||
996 | @@ -7858,12 +7858,19 @@ static int __init ixgbe_init_module(void) | ||
997 | ixgbe_dbg_init(); | ||
998 | #endif /* CONFIG_DEBUG_FS */ | ||
999 | |||
1000 | + ret = pci_register_driver(&ixgbe_driver); | ||
1001 | + if (ret) { | ||
1002 | +#ifdef CONFIG_DEBUG_FS | ||
1003 | + ixgbe_dbg_exit(); | ||
1004 | +#endif /* CONFIG_DEBUG_FS */ | ||
1005 | + return ret; | ||
1006 | + } | ||
1007 | + | ||
1008 | #ifdef CONFIG_IXGBE_DCA | ||
1009 | dca_register_notify(&dca_notifier); | ||
1010 | #endif | ||
1011 | |||
1012 | - ret = pci_register_driver(&ixgbe_driver); | ||
1013 | - return ret; | ||
1014 | + return 0; | ||
1015 | } | ||
1016 | |||
1017 | module_init(ixgbe_init_module); | ||
1018 | diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c | ||
1019 | index 998974f..2d849da 100644 | ||
1020 | --- a/drivers/net/ethernet/realtek/r8169.c | ||
1021 | +++ b/drivers/net/ethernet/realtek/r8169.c | ||
1022 | @@ -3819,6 +3819,30 @@ static void rtl_init_mdio_ops(struct rtl8169_private *tp) | ||
1023 | } | ||
1024 | } | ||
1025 | |||
1026 | +static void rtl_speed_down(struct rtl8169_private *tp) | ||
1027 | +{ | ||
1028 | + u32 adv; | ||
1029 | + int lpa; | ||
1030 | + | ||
1031 | + rtl_writephy(tp, 0x1f, 0x0000); | ||
1032 | + lpa = rtl_readphy(tp, MII_LPA); | ||
1033 | + | ||
1034 | + if (lpa & (LPA_10HALF | LPA_10FULL)) | ||
1035 | + adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full; | ||
1036 | + else if (lpa & (LPA_100HALF | LPA_100FULL)) | ||
1037 | + adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | | ||
1038 | + ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full; | ||
1039 | + else | ||
1040 | + adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | | ||
1041 | + ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | | ||
1042 | + (tp->mii.supports_gmii ? | ||
1043 | + ADVERTISED_1000baseT_Half | | ||
1044 | + ADVERTISED_1000baseT_Full : 0); | ||
1045 | + | ||
1046 | + rtl8169_set_speed(tp->dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL, | ||
1047 | + adv); | ||
1048 | +} | ||
1049 | + | ||
1050 | static void rtl_wol_suspend_quirk(struct rtl8169_private *tp) | ||
1051 | { | ||
1052 | void __iomem *ioaddr = tp->mmio_addr; | ||
1053 | @@ -3849,9 +3873,7 @@ static bool rtl_wol_pll_power_down(struct rtl8169_private *tp) | ||
1054 | if (!(__rtl8169_get_wol(tp) & WAKE_ANY)) | ||
1055 | return false; | ||
1056 | |||
1057 | - rtl_writephy(tp, 0x1f, 0x0000); | ||
1058 | - rtl_writephy(tp, MII_BMCR, 0x0000); | ||
1059 | - | ||
1060 | + rtl_speed_down(tp); | ||
1061 | rtl_wol_suspend_quirk(tp); | ||
1062 | |||
1063 | return true; | ||
1064 | diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c | ||
1065 | index cdb11b3..3eca710 100644 | ||
1066 | --- a/drivers/net/wireless/mwifiex/cfg80211.c | ||
1067 | +++ b/drivers/net/wireless/mwifiex/cfg80211.c | ||
1068 | @@ -1846,7 +1846,8 @@ mwifiex_cfg80211_scan(struct wiphy *wiphy, | ||
1069 | } | ||
1070 | } | ||
1071 | |||
1072 | - for (i = 0; i < request->n_channels; i++) { | ||
1073 | + for (i = 0; i < min_t(u32, request->n_channels, | ||
1074 | + MWIFIEX_USER_SCAN_CHAN_MAX); i++) { | ||
1075 | chan = request->channels[i]; | ||
1076 | priv->user_scan_cfg->chan_list[i].chan_number = chan->hw_value; | ||
1077 | priv->user_scan_cfg->chan_list[i].radio_type = chan->band; | ||
1078 | diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c | ||
1079 | index 8955a0e..771be26 100644 | ||
1080 | --- a/drivers/net/wireless/mwifiex/scan.c | ||
1081 | +++ b/drivers/net/wireless/mwifiex/scan.c | ||
1082 | @@ -1371,8 +1371,10 @@ int mwifiex_scan_networks(struct mwifiex_private *priv, | ||
1083 | queue_work(adapter->workqueue, &adapter->main_work); | ||
1084 | |||
1085 | /* Perform internal scan synchronously */ | ||
1086 | - if (!priv->scan_request) | ||
1087 | + if (!priv->scan_request) { | ||
1088 | + dev_dbg(adapter->dev, "wait internal scan\n"); | ||
1089 | mwifiex_wait_queue_complete(adapter, cmd_node); | ||
1090 | + } | ||
1091 | } else { | ||
1092 | spin_unlock_irqrestore(&adapter->scan_pending_q_lock, | ||
1093 | flags); | ||
1094 | @@ -1768,7 +1770,12 @@ check_next_scan: | ||
1095 | /* Need to indicate IOCTL complete */ | ||
1096 | if (adapter->curr_cmd->wait_q_enabled) { | ||
1097 | adapter->cmd_wait_q.status = 0; | ||
1098 | - mwifiex_complete_cmd(adapter, adapter->curr_cmd); | ||
1099 | + if (!priv->scan_request) { | ||
1100 | + dev_dbg(adapter->dev, | ||
1101 | + "complete internal scan\n"); | ||
1102 | + mwifiex_complete_cmd(adapter, | ||
1103 | + adapter->curr_cmd); | ||
1104 | + } | ||
1105 | } | ||
1106 | if (priv->report_scan_result) | ||
1107 | priv->report_scan_result = false; | ||
1108 | diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c | ||
1109 | index a0c8cae..b1c673e 100644 | ||
1110 | --- a/drivers/net/wireless/rt2x00/rt2x00pci.c | ||
1111 | +++ b/drivers/net/wireless/rt2x00/rt2x00pci.c | ||
1112 | @@ -52,8 +52,8 @@ int rt2x00pci_regbusy_read(struct rt2x00_dev *rt2x00dev, | ||
1113 | udelay(REGISTER_BUSY_DELAY); | ||
1114 | } | ||
1115 | |||
1116 | - ERROR(rt2x00dev, "Indirect register access failed: " | ||
1117 | - "offset=0x%.08x, value=0x%.08x\n", offset, *reg); | ||
1118 | + printk_once(KERN_ERR "%s() Indirect register access failed: " | ||
1119 | + "offset=0x%.08x, value=0x%.08x\n", __func__, offset, *reg); | ||
1120 | *reg = ~0; | ||
1121 | |||
1122 | return 0; | ||
1123 | diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c | ||
1124 | index 1af4008..21354bf 100644 | ||
1125 | --- a/drivers/pci/pci-acpi.c | ||
1126 | +++ b/drivers/pci/pci-acpi.c | ||
1127 | @@ -53,14 +53,15 @@ static void pci_acpi_wake_dev(acpi_handle handle, u32 event, void *context) | ||
1128 | return; | ||
1129 | } | ||
1130 | |||
1131 | - if (!pci_dev->pm_cap || !pci_dev->pme_support | ||
1132 | - || pci_check_pme_status(pci_dev)) { | ||
1133 | - if (pci_dev->pme_poll) | ||
1134 | - pci_dev->pme_poll = false; | ||
1135 | + /* Clear PME Status if set. */ | ||
1136 | + if (pci_dev->pme_support) | ||
1137 | + pci_check_pme_status(pci_dev); | ||
1138 | |||
1139 | - pci_wakeup_event(pci_dev); | ||
1140 | - pm_runtime_resume(&pci_dev->dev); | ||
1141 | - } | ||
1142 | + if (pci_dev->pme_poll) | ||
1143 | + pci_dev->pme_poll = false; | ||
1144 | + | ||
1145 | + pci_wakeup_event(pci_dev); | ||
1146 | + pm_runtime_resume(&pci_dev->dev); | ||
1147 | |||
1148 | if (pci_dev->subordinate) | ||
1149 | pci_pme_wakeup_bus(pci_dev->subordinate); | ||
1150 | diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c | ||
1151 | index 08c243a..ed4d094 100644 | ||
1152 | --- a/drivers/pci/pcie/portdrv_pci.c | ||
1153 | +++ b/drivers/pci/pcie/portdrv_pci.c | ||
1154 | @@ -185,14 +185,6 @@ static const struct dev_pm_ops pcie_portdrv_pm_ops = { | ||
1155 | #endif /* !PM */ | ||
1156 | |||
1157 | /* | ||
1158 | - * PCIe port runtime suspend is broken for some chipsets, so use a | ||
1159 | - * black list to disable runtime PM for these chipsets. | ||
1160 | - */ | ||
1161 | -static const struct pci_device_id port_runtime_pm_black_list[] = { | ||
1162 | - { /* end: all zeroes */ } | ||
1163 | -}; | ||
1164 | - | ||
1165 | -/* | ||
1166 | * pcie_portdrv_probe - Probe PCI-Express port devices | ||
1167 | * @dev: PCI-Express port device being probed | ||
1168 | * | ||
1169 | @@ -225,16 +217,11 @@ static int pcie_portdrv_probe(struct pci_dev *dev, | ||
1170 | * it by default. | ||
1171 | */ | ||
1172 | dev->d3cold_allowed = false; | ||
1173 | - if (!pci_match_id(port_runtime_pm_black_list, dev)) | ||
1174 | - pm_runtime_put_noidle(&dev->dev); | ||
1175 | - | ||
1176 | return 0; | ||
1177 | } | ||
1178 | |||
1179 | static void pcie_portdrv_remove(struct pci_dev *dev) | ||
1180 | { | ||
1181 | - if (!pci_match_id(port_runtime_pm_black_list, dev)) | ||
1182 | - pm_runtime_get_noresume(&dev->dev); | ||
1183 | pcie_port_device_remove(dev); | ||
1184 | pci_disable_device(dev); | ||
1185 | } | ||
1186 | diff --git a/drivers/platform/x86/msi-wmi.c b/drivers/platform/x86/msi-wmi.c | ||
1187 | index 2264331..b96766b 100644 | ||
1188 | --- a/drivers/platform/x86/msi-wmi.c | ||
1189 | +++ b/drivers/platform/x86/msi-wmi.c | ||
1190 | @@ -176,7 +176,7 @@ static void msi_wmi_notify(u32 value, void *context) | ||
1191 | pr_debug("Suppressed key event 0x%X - " | ||
1192 | "Last press was %lld us ago\n", | ||
1193 | key->code, ktime_to_us(diff)); | ||
1194 | - return; | ||
1195 | + goto msi_wmi_notify_exit; | ||
1196 | } | ||
1197 | last_pressed[key->code - SCANCODE_BASE] = cur; | ||
1198 | |||
1199 | @@ -195,6 +195,8 @@ static void msi_wmi_notify(u32 value, void *context) | ||
1200 | pr_info("Unknown key pressed - %x\n", eventcode); | ||
1201 | } else | ||
1202 | pr_info("Unknown event received\n"); | ||
1203 | + | ||
1204 | +msi_wmi_notify_exit: | ||
1205 | kfree(response.pointer); | ||
1206 | } | ||
1207 | |||
1208 | diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig | ||
1209 | index 96ce101..a936efb 100644 | ||
1210 | --- a/drivers/remoteproc/Kconfig | ||
1211 | +++ b/drivers/remoteproc/Kconfig | ||
1212 | @@ -5,7 +5,7 @@ config REMOTEPROC | ||
1213 | tristate | ||
1214 | depends on EXPERIMENTAL | ||
1215 | depends on HAS_DMA | ||
1216 | - select FW_CONFIG | ||
1217 | + select FW_LOADER | ||
1218 | select VIRTIO | ||
1219 | |||
1220 | config OMAP_REMOTEPROC | ||
1221 | diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c | ||
1222 | index dd3bfaf..752b507 100644 | ||
1223 | --- a/drivers/remoteproc/remoteproc_core.c | ||
1224 | +++ b/drivers/remoteproc/remoteproc_core.c | ||
1225 | @@ -370,10 +370,12 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc, | ||
1226 | /* it is now safe to add the virtio device */ | ||
1227 | ret = rproc_add_virtio_dev(rvdev, rsc->id); | ||
1228 | if (ret) | ||
1229 | - goto free_rvdev; | ||
1230 | + goto remove_rvdev; | ||
1231 | |||
1232 | return 0; | ||
1233 | |||
1234 | +remove_rvdev: | ||
1235 | + list_del(&rvdev->node); | ||
1236 | free_rvdev: | ||
1237 | kfree(rvdev); | ||
1238 | return ret; | ||
1239 | diff --git a/drivers/remoteproc/ste_modem_rproc.c b/drivers/remoteproc/ste_modem_rproc.c | ||
1240 | index a7743c0..fb95c42 100644 | ||
1241 | --- a/drivers/remoteproc/ste_modem_rproc.c | ||
1242 | +++ b/drivers/remoteproc/ste_modem_rproc.c | ||
1243 | @@ -240,6 +240,8 @@ static int sproc_drv_remove(struct platform_device *pdev) | ||
1244 | |||
1245 | /* Unregister as remoteproc device */ | ||
1246 | rproc_del(sproc->rproc); | ||
1247 | + dma_free_coherent(sproc->rproc->dev.parent, SPROC_FW_SIZE, | ||
1248 | + sproc->fw_addr, sproc->fw_dma_addr); | ||
1249 | rproc_put(sproc->rproc); | ||
1250 | |||
1251 | mdev->drv_data = NULL; | ||
1252 | @@ -297,10 +299,13 @@ static int sproc_probe(struct platform_device *pdev) | ||
1253 | /* Register as a remoteproc device */ | ||
1254 | err = rproc_add(rproc); | ||
1255 | if (err) | ||
1256 | - goto free_rproc; | ||
1257 | + goto free_mem; | ||
1258 | |||
1259 | return 0; | ||
1260 | |||
1261 | +free_mem: | ||
1262 | + dma_free_coherent(rproc->dev.parent, SPROC_FW_SIZE, | ||
1263 | + sproc->fw_addr, sproc->fw_dma_addr); | ||
1264 | free_rproc: | ||
1265 | /* Reset device data upon error */ | ||
1266 | mdev->drv_data = NULL; | ||
1267 | diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c | ||
1268 | index d38b267..b6469e2 100644 | ||
1269 | --- a/drivers/rtc/rtc-at91rm9200.c | ||
1270 | +++ b/drivers/rtc/rtc-at91rm9200.c | ||
1271 | @@ -44,7 +44,6 @@ static DECLARE_COMPLETION(at91_rtc_updated); | ||
1272 | static unsigned int at91_alarm_year = AT91_RTC_EPOCH; | ||
1273 | static void __iomem *at91_rtc_regs; | ||
1274 | static int irq; | ||
1275 | -static u32 at91_rtc_imr; | ||
1276 | |||
1277 | /* | ||
1278 | * Decode time/date into rtc_time structure | ||
1279 | @@ -109,11 +108,9 @@ static int at91_rtc_settime(struct device *dev, struct rtc_time *tm) | ||
1280 | cr = at91_rtc_read(AT91_RTC_CR); | ||
1281 | at91_rtc_write(AT91_RTC_CR, cr | AT91_RTC_UPDCAL | AT91_RTC_UPDTIM); | ||
1282 | |||
1283 | - at91_rtc_imr |= AT91_RTC_ACKUPD; | ||
1284 | at91_rtc_write(AT91_RTC_IER, AT91_RTC_ACKUPD); | ||
1285 | wait_for_completion(&at91_rtc_updated); /* wait for ACKUPD interrupt */ | ||
1286 | at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ACKUPD); | ||
1287 | - at91_rtc_imr &= ~AT91_RTC_ACKUPD; | ||
1288 | |||
1289 | at91_rtc_write(AT91_RTC_TIMR, | ||
1290 | bin2bcd(tm->tm_sec) << 0 | ||
1291 | @@ -145,7 +142,7 @@ static int at91_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm) | ||
1292 | tm->tm_yday = rtc_year_days(tm->tm_mday, tm->tm_mon, tm->tm_year); | ||
1293 | tm->tm_year = at91_alarm_year - 1900; | ||
1294 | |||
1295 | - alrm->enabled = (at91_rtc_imr & AT91_RTC_ALARM) | ||
1296 | + alrm->enabled = (at91_rtc_read(AT91_RTC_IMR) & AT91_RTC_ALARM) | ||
1297 | ? 1 : 0; | ||
1298 | |||
1299 | pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__, | ||
1300 | @@ -171,7 +168,6 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm) | ||
1301 | tm.tm_sec = alrm->time.tm_sec; | ||
1302 | |||
1303 | at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ALARM); | ||
1304 | - at91_rtc_imr &= ~AT91_RTC_ALARM; | ||
1305 | at91_rtc_write(AT91_RTC_TIMALR, | ||
1306 | bin2bcd(tm.tm_sec) << 0 | ||
1307 | | bin2bcd(tm.tm_min) << 8 | ||
1308 | @@ -184,7 +180,6 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm) | ||
1309 | |||
1310 | if (alrm->enabled) { | ||
1311 | at91_rtc_write(AT91_RTC_SCCR, AT91_RTC_ALARM); | ||
1312 | - at91_rtc_imr |= AT91_RTC_ALARM; | ||
1313 | at91_rtc_write(AT91_RTC_IER, AT91_RTC_ALARM); | ||
1314 | } | ||
1315 | |||
1316 | @@ -201,12 +196,9 @@ static int at91_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) | ||
1317 | |||
1318 | if (enabled) { | ||
1319 | at91_rtc_write(AT91_RTC_SCCR, AT91_RTC_ALARM); | ||
1320 | - at91_rtc_imr |= AT91_RTC_ALARM; | ||
1321 | at91_rtc_write(AT91_RTC_IER, AT91_RTC_ALARM); | ||
1322 | - } else { | ||
1323 | + } else | ||
1324 | at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ALARM); | ||
1325 | - at91_rtc_imr &= ~AT91_RTC_ALARM; | ||
1326 | - } | ||
1327 | |||
1328 | return 0; | ||
1329 | } | ||
1330 | @@ -215,10 +207,12 @@ static int at91_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) | ||
1331 | */ | ||
1332 | static int at91_rtc_proc(struct device *dev, struct seq_file *seq) | ||
1333 | { | ||
1334 | + unsigned long imr = at91_rtc_read(AT91_RTC_IMR); | ||
1335 | + | ||
1336 | seq_printf(seq, "update_IRQ\t: %s\n", | ||
1337 | - (at91_rtc_imr & AT91_RTC_ACKUPD) ? "yes" : "no"); | ||
1338 | + (imr & AT91_RTC_ACKUPD) ? "yes" : "no"); | ||
1339 | seq_printf(seq, "periodic_IRQ\t: %s\n", | ||
1340 | - (at91_rtc_imr & AT91_RTC_SECEV) ? "yes" : "no"); | ||
1341 | + (imr & AT91_RTC_SECEV) ? "yes" : "no"); | ||
1342 | |||
1343 | return 0; | ||
1344 | } | ||
1345 | @@ -233,7 +227,7 @@ static irqreturn_t at91_rtc_interrupt(int irq, void *dev_id) | ||
1346 | unsigned int rtsr; | ||
1347 | unsigned long events = 0; | ||
1348 | |||
1349 | - rtsr = at91_rtc_read(AT91_RTC_SR) & at91_rtc_imr; | ||
1350 | + rtsr = at91_rtc_read(AT91_RTC_SR) & at91_rtc_read(AT91_RTC_IMR); | ||
1351 | if (rtsr) { /* this interrupt is shared! Is it ours? */ | ||
1352 | if (rtsr & AT91_RTC_ALARM) | ||
1353 | events |= (RTC_AF | RTC_IRQF); | ||
1354 | @@ -297,7 +291,6 @@ static int __init at91_rtc_probe(struct platform_device *pdev) | ||
1355 | at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ACKUPD | AT91_RTC_ALARM | | ||
1356 | AT91_RTC_SECEV | AT91_RTC_TIMEV | | ||
1357 | AT91_RTC_CALEV); | ||
1358 | - at91_rtc_imr = 0; | ||
1359 | |||
1360 | ret = request_irq(irq, at91_rtc_interrupt, | ||
1361 | IRQF_SHARED, | ||
1362 | @@ -337,7 +330,6 @@ static int __exit at91_rtc_remove(struct platform_device *pdev) | ||
1363 | at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ACKUPD | AT91_RTC_ALARM | | ||
1364 | AT91_RTC_SECEV | AT91_RTC_TIMEV | | ||
1365 | AT91_RTC_CALEV); | ||
1366 | - at91_rtc_imr = 0; | ||
1367 | free_irq(irq, pdev); | ||
1368 | |||
1369 | rtc_device_unregister(rtc); | ||
1370 | @@ -350,35 +342,31 @@ static int __exit at91_rtc_remove(struct platform_device *pdev) | ||
1371 | |||
1372 | /* AT91RM9200 RTC Power management control */ | ||
1373 | |||
1374 | -static u32 at91_rtc_bkpimr; | ||
1375 | - | ||
1376 | +static u32 at91_rtc_imr; | ||
1377 | |||
1378 | static int at91_rtc_suspend(struct device *dev) | ||
1379 | { | ||
1380 | /* this IRQ is shared with DBGU and other hardware which isn't | ||
1381 | * necessarily doing PM like we are... | ||
1382 | */ | ||
1383 | - at91_rtc_bkpimr = at91_rtc_imr & (AT91_RTC_ALARM|AT91_RTC_SECEV); | ||
1384 | - if (at91_rtc_bkpimr) { | ||
1385 | - if (device_may_wakeup(dev)) { | ||
1386 | + at91_rtc_imr = at91_rtc_read(AT91_RTC_IMR) | ||
1387 | + & (AT91_RTC_ALARM|AT91_RTC_SECEV); | ||
1388 | + if (at91_rtc_imr) { | ||
1389 | + if (device_may_wakeup(dev)) | ||
1390 | enable_irq_wake(irq); | ||
1391 | - } else { | ||
1392 | - at91_rtc_write(AT91_RTC_IDR, at91_rtc_bkpimr); | ||
1393 | - at91_rtc_imr &= ~at91_rtc_bkpimr; | ||
1394 | - } | ||
1395 | -} | ||
1396 | + else | ||
1397 | + at91_rtc_write(AT91_RTC_IDR, at91_rtc_imr); | ||
1398 | + } | ||
1399 | return 0; | ||
1400 | } | ||
1401 | |||
1402 | static int at91_rtc_resume(struct device *dev) | ||
1403 | { | ||
1404 | - if (at91_rtc_bkpimr) { | ||
1405 | - if (device_may_wakeup(dev)) { | ||
1406 | + if (at91_rtc_imr) { | ||
1407 | + if (device_may_wakeup(dev)) | ||
1408 | disable_irq_wake(irq); | ||
1409 | - } else { | ||
1410 | - at91_rtc_imr |= at91_rtc_bkpimr; | ||
1411 | - at91_rtc_write(AT91_RTC_IER, at91_rtc_bkpimr); | ||
1412 | - } | ||
1413 | + else | ||
1414 | + at91_rtc_write(AT91_RTC_IER, at91_rtc_imr); | ||
1415 | } | ||
1416 | return 0; | ||
1417 | } | ||
1418 | diff --git a/drivers/rtc/rtc-at91rm9200.h b/drivers/rtc/rtc-at91rm9200.h | ||
1419 | index 5f940b6..da1945e 100644 | ||
1420 | --- a/drivers/rtc/rtc-at91rm9200.h | ||
1421 | +++ b/drivers/rtc/rtc-at91rm9200.h | ||
1422 | @@ -64,6 +64,7 @@ | ||
1423 | #define AT91_RTC_SCCR 0x1c /* Status Clear Command Register */ | ||
1424 | #define AT91_RTC_IER 0x20 /* Interrupt Enable Register */ | ||
1425 | #define AT91_RTC_IDR 0x24 /* Interrupt Disable Register */ | ||
1426 | +#define AT91_RTC_IMR 0x28 /* Interrupt Mask Register */ | ||
1427 | |||
1428 | #define AT91_RTC_VER 0x2c /* Valid Entry Register */ | ||
1429 | #define AT91_RTC_NVTIM (1 << 0) /* Non valid Time */ | ||
1430 | diff --git a/drivers/spi/spi-mpc512x-psc.c b/drivers/spi/spi-mpc512x-psc.c | ||
1431 | index cb3a310..41e21bf 100644 | ||
1432 | --- a/drivers/spi/spi-mpc512x-psc.c | ||
1433 | +++ b/drivers/spi/spi-mpc512x-psc.c | ||
1434 | @@ -164,7 +164,7 @@ static int mpc512x_psc_spi_transfer_rxtx(struct spi_device *spi, | ||
1435 | |||
1436 | for (i = count; i > 0; i--) { | ||
1437 | data = tx_buf ? *tx_buf++ : 0; | ||
1438 | - if (len == EOFBYTE) | ||
1439 | + if (len == EOFBYTE && t->cs_change) | ||
1440 | setbits32(&fifo->txcmd, MPC512x_PSC_FIFO_EOF); | ||
1441 | out_8(&fifo->txdata_8, data); | ||
1442 | len--; | ||
1443 | diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c | ||
1444 | index ad93231..6796a25 100644 | ||
1445 | --- a/drivers/spi/spi-s3c64xx.c | ||
1446 | +++ b/drivers/spi/spi-s3c64xx.c | ||
1447 | @@ -997,25 +997,30 @@ static irqreturn_t s3c64xx_spi_irq(int irq, void *data) | ||
1448 | { | ||
1449 | struct s3c64xx_spi_driver_data *sdd = data; | ||
1450 | struct spi_master *spi = sdd->master; | ||
1451 | - unsigned int val; | ||
1452 | + unsigned int val, clr = 0; | ||
1453 | |||
1454 | - val = readl(sdd->regs + S3C64XX_SPI_PENDING_CLR); | ||
1455 | + val = readl(sdd->regs + S3C64XX_SPI_STATUS); | ||
1456 | |||
1457 | - val &= S3C64XX_SPI_PND_RX_OVERRUN_CLR | | ||
1458 | - S3C64XX_SPI_PND_RX_UNDERRUN_CLR | | ||
1459 | - S3C64XX_SPI_PND_TX_OVERRUN_CLR | | ||
1460 | - S3C64XX_SPI_PND_TX_UNDERRUN_CLR; | ||
1461 | - | ||
1462 | - writel(val, sdd->regs + S3C64XX_SPI_PENDING_CLR); | ||
1463 | - | ||
1464 | - if (val & S3C64XX_SPI_PND_RX_OVERRUN_CLR) | ||
1465 | + if (val & S3C64XX_SPI_ST_RX_OVERRUN_ERR) { | ||
1466 | + clr = S3C64XX_SPI_PND_RX_OVERRUN_CLR; | ||
1467 | dev_err(&spi->dev, "RX overrun\n"); | ||
1468 | - if (val & S3C64XX_SPI_PND_RX_UNDERRUN_CLR) | ||
1469 | + } | ||
1470 | + if (val & S3C64XX_SPI_ST_RX_UNDERRUN_ERR) { | ||
1471 | + clr |= S3C64XX_SPI_PND_RX_UNDERRUN_CLR; | ||
1472 | dev_err(&spi->dev, "RX underrun\n"); | ||
1473 | - if (val & S3C64XX_SPI_PND_TX_OVERRUN_CLR) | ||
1474 | + } | ||
1475 | + if (val & S3C64XX_SPI_ST_TX_OVERRUN_ERR) { | ||
1476 | + clr |= S3C64XX_SPI_PND_TX_OVERRUN_CLR; | ||
1477 | dev_err(&spi->dev, "TX overrun\n"); | ||
1478 | - if (val & S3C64XX_SPI_PND_TX_UNDERRUN_CLR) | ||
1479 | + } | ||
1480 | + if (val & S3C64XX_SPI_ST_TX_UNDERRUN_ERR) { | ||
1481 | + clr |= S3C64XX_SPI_PND_TX_UNDERRUN_CLR; | ||
1482 | dev_err(&spi->dev, "TX underrun\n"); | ||
1483 | + } | ||
1484 | + | ||
1485 | + /* Clear the pending irq by setting and then clearing it */ | ||
1486 | + writel(clr, sdd->regs + S3C64XX_SPI_PENDING_CLR); | ||
1487 | + writel(0, sdd->regs + S3C64XX_SPI_PENDING_CLR); | ||
1488 | |||
1489 | return IRQ_HANDLED; | ||
1490 | } | ||
1491 | @@ -1039,9 +1044,13 @@ static void s3c64xx_spi_hwinit(struct s3c64xx_spi_driver_data *sdd, int channel) | ||
1492 | writel(0, regs + S3C64XX_SPI_MODE_CFG); | ||
1493 | writel(0, regs + S3C64XX_SPI_PACKET_CNT); | ||
1494 | |||
1495 | - /* Clear any irq pending bits */ | ||
1496 | - writel(readl(regs + S3C64XX_SPI_PENDING_CLR), | ||
1497 | - regs + S3C64XX_SPI_PENDING_CLR); | ||
1498 | + /* Clear any irq pending bits, should set and clear the bits */ | ||
1499 | + val = S3C64XX_SPI_PND_RX_OVERRUN_CLR | | ||
1500 | + S3C64XX_SPI_PND_RX_UNDERRUN_CLR | | ||
1501 | + S3C64XX_SPI_PND_TX_OVERRUN_CLR | | ||
1502 | + S3C64XX_SPI_PND_TX_UNDERRUN_CLR; | ||
1503 | + writel(val, regs + S3C64XX_SPI_PENDING_CLR); | ||
1504 | + writel(0, regs + S3C64XX_SPI_PENDING_CLR); | ||
1505 | |||
1506 | writel(0, regs + S3C64XX_SPI_SWAP_CFG); | ||
1507 | |||
1508 | diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c | ||
1509 | index 8c8ce80..bfbf9fb 100644 | ||
1510 | --- a/drivers/thermal/thermal_sys.c | ||
1511 | +++ b/drivers/thermal/thermal_sys.c | ||
1512 | @@ -1807,6 +1807,7 @@ static int __init thermal_init(void) | ||
1513 | idr_destroy(&thermal_cdev_idr); | ||
1514 | mutex_destroy(&thermal_idr_lock); | ||
1515 | mutex_destroy(&thermal_list_lock); | ||
1516 | + return result; | ||
1517 | } | ||
1518 | result = genetlink_init(); | ||
1519 | return result; | ||
1520 | diff --git a/drivers/tty/serial/8250/8250_pnp.c b/drivers/tty/serial/8250/8250_pnp.c | ||
1521 | index b3455a9..35d9ab9 100644 | ||
1522 | --- a/drivers/tty/serial/8250/8250_pnp.c | ||
1523 | +++ b/drivers/tty/serial/8250/8250_pnp.c | ||
1524 | @@ -429,7 +429,6 @@ serial_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) | ||
1525 | { | ||
1526 | struct uart_8250_port uart; | ||
1527 | int ret, line, flags = dev_id->driver_data; | ||
1528 | - struct resource *res = NULL; | ||
1529 | |||
1530 | if (flags & UNKNOWN_DEV) { | ||
1531 | ret = serial_pnp_guess_board(dev); | ||
1532 | @@ -440,12 +439,11 @@ serial_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) | ||
1533 | memset(&uart, 0, sizeof(uart)); | ||
1534 | if (pnp_irq_valid(dev, 0)) | ||
1535 | uart.port.irq = pnp_irq(dev, 0); | ||
1536 | - if ((flags & CIR_PORT) && pnp_port_valid(dev, 2)) | ||
1537 | - res = pnp_get_resource(dev, IORESOURCE_IO, 2); | ||
1538 | - else if (pnp_port_valid(dev, 0)) | ||
1539 | - res = pnp_get_resource(dev, IORESOURCE_IO, 0); | ||
1540 | - if (pnp_resource_enabled(res)) { | ||
1541 | - uart.port.iobase = res->start; | ||
1542 | + if ((flags & CIR_PORT) && pnp_port_valid(dev, 2)) { | ||
1543 | + uart.port.iobase = pnp_port_start(dev, 2); | ||
1544 | + uart.port.iotype = UPIO_PORT; | ||
1545 | + } else if (pnp_port_valid(dev, 0)) { | ||
1546 | + uart.port.iobase = pnp_port_start(dev, 0); | ||
1547 | uart.port.iotype = UPIO_PORT; | ||
1548 | } else if (pnp_mem_valid(dev, 0)) { | ||
1549 | uart.port.mapbase = pnp_mem_start(dev, 0); | ||
1550 | diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c | ||
1551 | index b28e66c..4a62e12 100644 | ||
1552 | --- a/drivers/vfio/pci/vfio_pci.c | ||
1553 | +++ b/drivers/vfio/pci/vfio_pci.c | ||
1554 | @@ -331,6 +331,7 @@ static long vfio_pci_ioctl(void *device_data, | ||
1555 | |||
1556 | if (!(hdr.flags & VFIO_IRQ_SET_DATA_NONE)) { | ||
1557 | size_t size; | ||
1558 | + int max = vfio_pci_get_irq_count(vdev, hdr.index); | ||
1559 | |||
1560 | if (hdr.flags & VFIO_IRQ_SET_DATA_BOOL) | ||
1561 | size = sizeof(uint8_t); | ||
1562 | @@ -340,7 +341,7 @@ static long vfio_pci_ioctl(void *device_data, | ||
1563 | return -EINVAL; | ||
1564 | |||
1565 | if (hdr.argsz - minsz < hdr.count * size || | ||
1566 | - hdr.count > vfio_pci_get_irq_count(vdev, hdr.index)) | ||
1567 | + hdr.start >= max || hdr.start + hdr.count > max) | ||
1568 | return -EINVAL; | ||
1569 | |||
1570 | data = memdup_user((void __user *)(arg + minsz), | ||
1571 | diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c | ||
1572 | index 2e9779b..c53189d 100644 | ||
1573 | --- a/fs/nfs/nfs4client.c | ||
1574 | +++ b/fs/nfs/nfs4client.c | ||
1575 | @@ -300,7 +300,7 @@ int nfs40_walk_client_list(struct nfs_client *new, | ||
1576 | struct rpc_cred *cred) | ||
1577 | { | ||
1578 | struct nfs_net *nn = net_generic(new->cl_net, nfs_net_id); | ||
1579 | - struct nfs_client *pos, *n, *prev = NULL; | ||
1580 | + struct nfs_client *pos, *prev = NULL; | ||
1581 | struct nfs4_setclientid_res clid = { | ||
1582 | .clientid = new->cl_clientid, | ||
1583 | .confirm = new->cl_confirm, | ||
1584 | @@ -308,10 +308,23 @@ int nfs40_walk_client_list(struct nfs_client *new, | ||
1585 | int status = -NFS4ERR_STALE_CLIENTID; | ||
1586 | |||
1587 | spin_lock(&nn->nfs_client_lock); | ||
1588 | - list_for_each_entry_safe(pos, n, &nn->nfs_client_list, cl_share_link) { | ||
1589 | + list_for_each_entry(pos, &nn->nfs_client_list, cl_share_link) { | ||
1590 | /* If "pos" isn't marked ready, we can't trust the | ||
1591 | * remaining fields in "pos" */ | ||
1592 | - if (pos->cl_cons_state < NFS_CS_READY) | ||
1593 | + if (pos->cl_cons_state > NFS_CS_READY) { | ||
1594 | + atomic_inc(&pos->cl_count); | ||
1595 | + spin_unlock(&nn->nfs_client_lock); | ||
1596 | + | ||
1597 | + if (prev) | ||
1598 | + nfs_put_client(prev); | ||
1599 | + prev = pos; | ||
1600 | + | ||
1601 | + status = nfs_wait_client_init_complete(pos); | ||
1602 | + spin_lock(&nn->nfs_client_lock); | ||
1603 | + if (status < 0) | ||
1604 | + continue; | ||
1605 | + } | ||
1606 | + if (pos->cl_cons_state != NFS_CS_READY) | ||
1607 | continue; | ||
1608 | |||
1609 | if (pos->rpc_ops != new->rpc_ops) | ||
1610 | @@ -423,16 +436,16 @@ int nfs41_walk_client_list(struct nfs_client *new, | ||
1611 | struct rpc_cred *cred) | ||
1612 | { | ||
1613 | struct nfs_net *nn = net_generic(new->cl_net, nfs_net_id); | ||
1614 | - struct nfs_client *pos, *n, *prev = NULL; | ||
1615 | + struct nfs_client *pos, *prev = NULL; | ||
1616 | int status = -NFS4ERR_STALE_CLIENTID; | ||
1617 | |||
1618 | spin_lock(&nn->nfs_client_lock); | ||
1619 | - list_for_each_entry_safe(pos, n, &nn->nfs_client_list, cl_share_link) { | ||
1620 | + list_for_each_entry(pos, &nn->nfs_client_list, cl_share_link) { | ||
1621 | /* If "pos" isn't marked ready, we can't trust the | ||
1622 | * remaining fields in "pos", especially the client | ||
1623 | * ID and serverowner fields. Wait for CREATE_SESSION | ||
1624 | * to finish. */ | ||
1625 | - if (pos->cl_cons_state < NFS_CS_READY) { | ||
1626 | + if (pos->cl_cons_state > NFS_CS_READY) { | ||
1627 | atomic_inc(&pos->cl_count); | ||
1628 | spin_unlock(&nn->nfs_client_lock); | ||
1629 | |||
1630 | @@ -440,18 +453,17 @@ int nfs41_walk_client_list(struct nfs_client *new, | ||
1631 | nfs_put_client(prev); | ||
1632 | prev = pos; | ||
1633 | |||
1634 | - nfs4_schedule_lease_recovery(pos); | ||
1635 | status = nfs_wait_client_init_complete(pos); | ||
1636 | - if (status < 0) { | ||
1637 | - nfs_put_client(pos); | ||
1638 | - spin_lock(&nn->nfs_client_lock); | ||
1639 | - continue; | ||
1640 | + if (status == 0) { | ||
1641 | + nfs4_schedule_lease_recovery(pos); | ||
1642 | + status = nfs4_wait_clnt_recover(pos); | ||
1643 | } | ||
1644 | - status = pos->cl_cons_state; | ||
1645 | spin_lock(&nn->nfs_client_lock); | ||
1646 | if (status < 0) | ||
1647 | continue; | ||
1648 | } | ||
1649 | + if (pos->cl_cons_state != NFS_CS_READY) | ||
1650 | + continue; | ||
1651 | |||
1652 | if (pos->rpc_ops != new->rpc_ops) | ||
1653 | continue; | ||
1654 | @@ -469,17 +481,18 @@ int nfs41_walk_client_list(struct nfs_client *new, | ||
1655 | continue; | ||
1656 | |||
1657 | atomic_inc(&pos->cl_count); | ||
1658 | - spin_unlock(&nn->nfs_client_lock); | ||
1659 | + *result = pos; | ||
1660 | + status = 0; | ||
1661 | dprintk("NFS: <-- %s using nfs_client = %p ({%d})\n", | ||
1662 | __func__, pos, atomic_read(&pos->cl_count)); | ||
1663 | - | ||
1664 | - *result = pos; | ||
1665 | - return 0; | ||
1666 | + break; | ||
1667 | } | ||
1668 | |||
1669 | /* No matching nfs_client found. */ | ||
1670 | spin_unlock(&nn->nfs_client_lock); | ||
1671 | dprintk("NFS: <-- %s status = %d\n", __func__, status); | ||
1672 | + if (prev) | ||
1673 | + nfs_put_client(prev); | ||
1674 | return status; | ||
1675 | } | ||
1676 | #endif /* CONFIG_NFS_V4_1 */ | ||
1677 | diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c | ||
1678 | index e61f68d..994fbe2 100644 | ||
1679 | --- a/fs/nfs/nfs4state.c | ||
1680 | +++ b/fs/nfs/nfs4state.c | ||
1681 | @@ -1877,7 +1877,13 @@ again: | ||
1682 | status = PTR_ERR(clnt); | ||
1683 | break; | ||
1684 | } | ||
1685 | - clp->cl_rpcclient = clnt; | ||
1686 | + /* Note: this is safe because we haven't yet marked the | ||
1687 | + * client as ready, so we are the only user of | ||
1688 | + * clp->cl_rpcclient | ||
1689 | + */ | ||
1690 | + clnt = xchg(&clp->cl_rpcclient, clnt); | ||
1691 | + rpc_shutdown_client(clnt); | ||
1692 | + clnt = clp->cl_rpcclient; | ||
1693 | goto again; | ||
1694 | |||
1695 | case -NFS4ERR_MINOR_VERS_MISMATCH: | ||
1696 | diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c | ||
1697 | index c196369..4cce1d9 100644 | ||
1698 | --- a/fs/reiserfs/xattr.c | ||
1699 | +++ b/fs/reiserfs/xattr.c | ||
1700 | @@ -187,8 +187,8 @@ fill_with_dentries(void *buf, const char *name, int namelen, loff_t offset, | ||
1701 | if (dbuf->count == ARRAY_SIZE(dbuf->dentries)) | ||
1702 | return -ENOSPC; | ||
1703 | |||
1704 | - if (name[0] == '.' && (name[1] == '\0' || | ||
1705 | - (name[1] == '.' && name[2] == '\0'))) | ||
1706 | + if (name[0] == '.' && (namelen < 2 || | ||
1707 | + (namelen == 2 && name[1] == '.'))) | ||
1708 | return 0; | ||
1709 | |||
1710 | dentry = lookup_one_len(name, dbuf->xadir, namelen); | ||
1711 | diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c | ||
1712 | index ddc0f6a..97f6875 100644 | ||
1713 | --- a/fs/ubifs/super.c | ||
1714 | +++ b/fs/ubifs/super.c | ||
1715 | @@ -1568,6 +1568,12 @@ static int ubifs_remount_rw(struct ubifs_info *c) | ||
1716 | c->remounting_rw = 1; | ||
1717 | c->ro_mount = 0; | ||
1718 | |||
1719 | + if (c->space_fixup) { | ||
1720 | + err = ubifs_fixup_free_space(c); | ||
1721 | + if (err) | ||
1722 | + return err; | ||
1723 | + } | ||
1724 | + | ||
1725 | err = check_free_space(c); | ||
1726 | if (err) | ||
1727 | goto out; | ||
1728 | @@ -1684,12 +1690,6 @@ static int ubifs_remount_rw(struct ubifs_info *c) | ||
1729 | err = dbg_check_space_info(c); | ||
1730 | } | ||
1731 | |||
1732 | - if (c->space_fixup) { | ||
1733 | - err = ubifs_fixup_free_space(c); | ||
1734 | - if (err) | ||
1735 | - goto out; | ||
1736 | - } | ||
1737 | - | ||
1738 | mutex_unlock(&c->umount_mutex); | ||
1739 | return err; | ||
1740 | |||
1741 | diff --git a/include/linux/ata.h b/include/linux/ata.h | ||
1742 | index 8f7a3d6..ee0bd95 100644 | ||
1743 | --- a/include/linux/ata.h | ||
1744 | +++ b/include/linux/ata.h | ||
1745 | @@ -954,7 +954,7 @@ static inline int atapi_cdb_len(const u16 *dev_id) | ||
1746 | } | ||
1747 | } | ||
1748 | |||
1749 | -static inline bool atapi_command_packet_set(const u16 *dev_id) | ||
1750 | +static inline int atapi_command_packet_set(const u16 *dev_id) | ||
1751 | { | ||
1752 | return (dev_id[ATA_ID_CONFIG] >> 8) & 0x1f; | ||
1753 | } | ||
1754 | diff --git a/include/linux/libata.h b/include/linux/libata.h | ||
1755 | index 649e5f8..0621bca 100644 | ||
1756 | --- a/include/linux/libata.h | ||
1757 | +++ b/include/linux/libata.h | ||
1758 | @@ -398,6 +398,7 @@ enum { | ||
1759 | ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ | ||
1760 | ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */ | ||
1761 | ATA_HORKAGE_DUMP_ID = (1 << 16), /* dump IDENTIFY data */ | ||
1762 | + ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */ | ||
1763 | |||
1764 | /* DMA mask for user DMA control: User visible values; DO NOT | ||
1765 | renumber */ | ||
1766 | diff --git a/include/linux/preempt.h b/include/linux/preempt.h | ||
1767 | index 5a710b9..87a03c7 100644 | ||
1768 | --- a/include/linux/preempt.h | ||
1769 | +++ b/include/linux/preempt.h | ||
1770 | @@ -93,14 +93,20 @@ do { \ | ||
1771 | |||
1772 | #else /* !CONFIG_PREEMPT_COUNT */ | ||
1773 | |||
1774 | -#define preempt_disable() do { } while (0) | ||
1775 | -#define sched_preempt_enable_no_resched() do { } while (0) | ||
1776 | -#define preempt_enable_no_resched() do { } while (0) | ||
1777 | -#define preempt_enable() do { } while (0) | ||
1778 | - | ||
1779 | -#define preempt_disable_notrace() do { } while (0) | ||
1780 | -#define preempt_enable_no_resched_notrace() do { } while (0) | ||
1781 | -#define preempt_enable_notrace() do { } while (0) | ||
1782 | +/* | ||
1783 | + * Even if we don't have any preemption, we need preempt disable/enable | ||
1784 | + * to be barriers, so that we don't have things like get_user/put_user | ||
1785 | + * that can cause faults and scheduling migrate into our preempt-protected | ||
1786 | + * region. | ||
1787 | + */ | ||
1788 | +#define preempt_disable() barrier() | ||
1789 | +#define sched_preempt_enable_no_resched() barrier() | ||
1790 | +#define preempt_enable_no_resched() barrier() | ||
1791 | +#define preempt_enable() barrier() | ||
1792 | + | ||
1793 | +#define preempt_disable_notrace() barrier() | ||
1794 | +#define preempt_enable_no_resched_notrace() barrier() | ||
1795 | +#define preempt_enable_notrace() barrier() | ||
1796 | |||
1797 | #endif /* CONFIG_PREEMPT_COUNT */ | ||
1798 | |||
1799 | diff --git a/include/linux/spinlock_up.h b/include/linux/spinlock_up.h | ||
1800 | index a26e2fb..e2369c1 100644 | ||
1801 | --- a/include/linux/spinlock_up.h | ||
1802 | +++ b/include/linux/spinlock_up.h | ||
1803 | @@ -16,7 +16,10 @@ | ||
1804 | * In the debug case, 1 means unlocked, 0 means locked. (the values | ||
1805 | * are inverted, to catch initialization bugs) | ||
1806 | * | ||
1807 | - * No atomicity anywhere, we are on UP. | ||
1808 | + * No atomicity anywhere, we are on UP. However, we still need | ||
1809 | + * the compiler barriers, because we do not want the compiler to | ||
1810 | + * move potentially faulting instructions (notably user accesses) | ||
1811 | + * into the locked sequence, resulting in non-atomic execution. | ||
1812 | */ | ||
1813 | |||
1814 | #ifdef CONFIG_DEBUG_SPINLOCK | ||
1815 | @@ -25,6 +28,7 @@ | ||
1816 | static inline void arch_spin_lock(arch_spinlock_t *lock) | ||
1817 | { | ||
1818 | lock->slock = 0; | ||
1819 | + barrier(); | ||
1820 | } | ||
1821 | |||
1822 | static inline void | ||
1823 | @@ -32,6 +36,7 @@ arch_spin_lock_flags(arch_spinlock_t *lock, unsigned long flags) | ||
1824 | { | ||
1825 | local_irq_save(flags); | ||
1826 | lock->slock = 0; | ||
1827 | + barrier(); | ||
1828 | } | ||
1829 | |||
1830 | static inline int arch_spin_trylock(arch_spinlock_t *lock) | ||
1831 | @@ -39,32 +44,34 @@ static inline int arch_spin_trylock(arch_spinlock_t *lock) | ||
1832 | char oldval = lock->slock; | ||
1833 | |||
1834 | lock->slock = 0; | ||
1835 | + barrier(); | ||
1836 | |||
1837 | return oldval > 0; | ||
1838 | } | ||
1839 | |||
1840 | static inline void arch_spin_unlock(arch_spinlock_t *lock) | ||
1841 | { | ||
1842 | + barrier(); | ||
1843 | lock->slock = 1; | ||
1844 | } | ||
1845 | |||
1846 | /* | ||
1847 | * Read-write spinlocks. No debug version. | ||
1848 | */ | ||
1849 | -#define arch_read_lock(lock) do { (void)(lock); } while (0) | ||
1850 | -#define arch_write_lock(lock) do { (void)(lock); } while (0) | ||
1851 | -#define arch_read_trylock(lock) ({ (void)(lock); 1; }) | ||
1852 | -#define arch_write_trylock(lock) ({ (void)(lock); 1; }) | ||
1853 | -#define arch_read_unlock(lock) do { (void)(lock); } while (0) | ||
1854 | -#define arch_write_unlock(lock) do { (void)(lock); } while (0) | ||
1855 | +#define arch_read_lock(lock) do { barrier(); (void)(lock); } while (0) | ||
1856 | +#define arch_write_lock(lock) do { barrier(); (void)(lock); } while (0) | ||
1857 | +#define arch_read_trylock(lock) ({ barrier(); (void)(lock); 1; }) | ||
1858 | +#define arch_write_trylock(lock) ({ barrier(); (void)(lock); 1; }) | ||
1859 | +#define arch_read_unlock(lock) do { barrier(); (void)(lock); } while (0) | ||
1860 | +#define arch_write_unlock(lock) do { barrier(); (void)(lock); } while (0) | ||
1861 | |||
1862 | #else /* DEBUG_SPINLOCK */ | ||
1863 | #define arch_spin_is_locked(lock) ((void)(lock), 0) | ||
1864 | /* for sched.c and kernel_lock.c: */ | ||
1865 | -# define arch_spin_lock(lock) do { (void)(lock); } while (0) | ||
1866 | -# define arch_spin_lock_flags(lock, flags) do { (void)(lock); } while (0) | ||
1867 | -# define arch_spin_unlock(lock) do { (void)(lock); } while (0) | ||
1868 | -# define arch_spin_trylock(lock) ({ (void)(lock); 1; }) | ||
1869 | +# define arch_spin_lock(lock) do { barrier(); (void)(lock); } while (0) | ||
1870 | +# define arch_spin_lock_flags(lock, flags) do { barrier(); (void)(lock); } while (0) | ||
1871 | +# define arch_spin_unlock(lock) do { barrier(); (void)(lock); } while (0) | ||
1872 | +# define arch_spin_trylock(lock) ({ barrier(); (void)(lock); 1; }) | ||
1873 | #endif /* DEBUG_SPINLOCK */ | ||
1874 | |||
1875 | #define arch_spin_is_contended(lock) (((void)(lock), 0)) | ||
1876 | diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c | ||
1877 | index b27052c..64bc5d8 100644 | ||
1878 | --- a/kernel/trace/ftrace.c | ||
1879 | +++ b/kernel/trace/ftrace.c | ||
1880 | @@ -4537,12 +4537,8 @@ ftrace_enable_sysctl(struct ctl_table *table, int write, | ||
1881 | ftrace_startup_sysctl(); | ||
1882 | |||
1883 | /* we are starting ftrace again */ | ||
1884 | - if (ftrace_ops_list != &ftrace_list_end) { | ||
1885 | - if (ftrace_ops_list->next == &ftrace_list_end) | ||
1886 | - ftrace_trace_function = ftrace_ops_list->func; | ||
1887 | - else | ||
1888 | - ftrace_trace_function = ftrace_ops_list_func; | ||
1889 | - } | ||
1890 | + if (ftrace_ops_list != &ftrace_list_end) | ||
1891 | + update_ftrace_function(); | ||
1892 | |||
1893 | } else { | ||
1894 | /* stopping ftrace calls (just send to ftrace_stub) */ | ||
1895 | diff --git a/mm/mmap.c b/mm/mmap.c | ||
1896 | index 8832b87..90db251 100644 | ||
1897 | --- a/mm/mmap.c | ||
1898 | +++ b/mm/mmap.c | ||
1899 | @@ -1922,7 +1922,7 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) | ||
1900 | |||
1901 | /* Check the cache first. */ | ||
1902 | /* (Cache hit rate is typically around 35%.) */ | ||
1903 | - vma = mm->mmap_cache; | ||
1904 | + vma = ACCESS_ONCE(mm->mmap_cache); | ||
1905 | if (!(vma && vma->vm_end > addr && vma->vm_start <= addr)) { | ||
1906 | struct rb_node *rb_node; | ||
1907 | |||
1908 | diff --git a/mm/nommu.c b/mm/nommu.c | ||
1909 | index 79c3cac..bbe1f3f 100644 | ||
1910 | --- a/mm/nommu.c | ||
1911 | +++ b/mm/nommu.c | ||
1912 | @@ -819,7 +819,7 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) | ||
1913 | struct vm_area_struct *vma; | ||
1914 | |||
1915 | /* check the cache first */ | ||
1916 | - vma = mm->mmap_cache; | ||
1917 | + vma = ACCESS_ONCE(mm->mmap_cache); | ||
1918 | if (vma && vma->vm_start <= addr && vma->vm_end > addr) | ||
1919 | return vma; | ||
1920 | |||
1921 | diff --git a/net/can/gw.c b/net/can/gw.c | ||
1922 | index 574dda78e..28e7bdc 100644 | ||
1923 | --- a/net/can/gw.c | ||
1924 | +++ b/net/can/gw.c | ||
1925 | @@ -436,7 +436,7 @@ static int cgw_notifier(struct notifier_block *nb, | ||
1926 | if (gwj->src.dev == dev || gwj->dst.dev == dev) { | ||
1927 | hlist_del(&gwj->list); | ||
1928 | cgw_unregister_filter(gwj); | ||
1929 | - kfree(gwj); | ||
1930 | + kmem_cache_free(cgw_cache, gwj); | ||
1931 | } | ||
1932 | } | ||
1933 | } | ||
1934 | @@ -829,7 +829,7 @@ static void cgw_remove_all_jobs(void) | ||
1935 | hlist_for_each_entry_safe(gwj, n, nx, &cgw_list, list) { | ||
1936 | hlist_del(&gwj->list); | ||
1937 | cgw_unregister_filter(gwj); | ||
1938 | - kfree(gwj); | ||
1939 | + kmem_cache_free(cgw_cache, gwj); | ||
1940 | } | ||
1941 | } | ||
1942 | |||
1943 | @@ -885,7 +885,7 @@ static int cgw_remove_job(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | ||
1944 | |||
1945 | hlist_del(&gwj->list); | ||
1946 | cgw_unregister_filter(gwj); | ||
1947 | - kfree(gwj); | ||
1948 | + kmem_cache_free(cgw_cache, gwj); | ||
1949 | err = 0; | ||
1950 | break; | ||
1951 | } | ||
1952 | diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c | ||
1953 | index 0479c64..49c48c6 100644 | ||
1954 | --- a/net/mac80211/cfg.c | ||
1955 | +++ b/net/mac80211/cfg.c | ||
1956 | @@ -2499,7 +2499,7 @@ static int ieee80211_cancel_roc(struct ieee80211_local *local, | ||
1957 | list_del(&dep->list); | ||
1958 | mutex_unlock(&local->mtx); | ||
1959 | |||
1960 | - ieee80211_roc_notify_destroy(dep); | ||
1961 | + ieee80211_roc_notify_destroy(dep, true); | ||
1962 | return 0; | ||
1963 | } | ||
1964 | |||
1965 | @@ -2539,7 +2539,7 @@ static int ieee80211_cancel_roc(struct ieee80211_local *local, | ||
1966 | ieee80211_start_next_roc(local); | ||
1967 | mutex_unlock(&local->mtx); | ||
1968 | |||
1969 | - ieee80211_roc_notify_destroy(found); | ||
1970 | + ieee80211_roc_notify_destroy(found, true); | ||
1971 | } else { | ||
1972 | /* work may be pending so use it all the time */ | ||
1973 | found->abort = true; | ||
1974 | @@ -2549,6 +2549,8 @@ static int ieee80211_cancel_roc(struct ieee80211_local *local, | ||
1975 | |||
1976 | /* work will clean up etc */ | ||
1977 | flush_delayed_work(&found->work); | ||
1978 | + WARN_ON(!found->to_be_freed); | ||
1979 | + kfree(found); | ||
1980 | } | ||
1981 | |||
1982 | return 0; | ||
1983 | diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h | ||
1984 | index 2ed065c..55d8f89 100644 | ||
1985 | --- a/net/mac80211/ieee80211_i.h | ||
1986 | +++ b/net/mac80211/ieee80211_i.h | ||
1987 | @@ -346,6 +346,7 @@ struct ieee80211_roc_work { | ||
1988 | struct ieee80211_channel *chan; | ||
1989 | |||
1990 | bool started, abort, hw_begun, notified; | ||
1991 | + bool to_be_freed; | ||
1992 | |||
1993 | unsigned long hw_start_time; | ||
1994 | |||
1995 | @@ -1363,7 +1364,7 @@ void ieee80211_offchannel_return(struct ieee80211_local *local); | ||
1996 | void ieee80211_roc_setup(struct ieee80211_local *local); | ||
1997 | void ieee80211_start_next_roc(struct ieee80211_local *local); | ||
1998 | void ieee80211_roc_purge(struct ieee80211_sub_if_data *sdata); | ||
1999 | -void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc); | ||
2000 | +void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc, bool free); | ||
2001 | void ieee80211_sw_roc_work(struct work_struct *work); | ||
2002 | void ieee80211_handle_roc_started(struct ieee80211_roc_work *roc); | ||
2003 | |||
2004 | diff --git a/net/mac80211/offchannel.c b/net/mac80211/offchannel.c | ||
2005 | index a3ad4c3..7acbdaa 100644 | ||
2006 | --- a/net/mac80211/offchannel.c | ||
2007 | +++ b/net/mac80211/offchannel.c | ||
2008 | @@ -299,10 +299,13 @@ void ieee80211_start_next_roc(struct ieee80211_local *local) | ||
2009 | } | ||
2010 | } | ||
2011 | |||
2012 | -void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc) | ||
2013 | +void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc, bool free) | ||
2014 | { | ||
2015 | struct ieee80211_roc_work *dep, *tmp; | ||
2016 | |||
2017 | + if (WARN_ON(roc->to_be_freed)) | ||
2018 | + return; | ||
2019 | + | ||
2020 | /* was never transmitted */ | ||
2021 | if (roc->frame) { | ||
2022 | cfg80211_mgmt_tx_status(&roc->sdata->wdev, | ||
2023 | @@ -318,9 +321,12 @@ void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc) | ||
2024 | GFP_KERNEL); | ||
2025 | |||
2026 | list_for_each_entry_safe(dep, tmp, &roc->dependents, list) | ||
2027 | - ieee80211_roc_notify_destroy(dep); | ||
2028 | + ieee80211_roc_notify_destroy(dep, true); | ||
2029 | |||
2030 | - kfree(roc); | ||
2031 | + if (free) | ||
2032 | + kfree(roc); | ||
2033 | + else | ||
2034 | + roc->to_be_freed = true; | ||
2035 | } | ||
2036 | |||
2037 | void ieee80211_sw_roc_work(struct work_struct *work) | ||
2038 | @@ -333,6 +339,9 @@ void ieee80211_sw_roc_work(struct work_struct *work) | ||
2039 | |||
2040 | mutex_lock(&local->mtx); | ||
2041 | |||
2042 | + if (roc->to_be_freed) | ||
2043 | + goto out_unlock; | ||
2044 | + | ||
2045 | if (roc->abort) | ||
2046 | goto finish; | ||
2047 | |||
2048 | @@ -372,7 +381,7 @@ void ieee80211_sw_roc_work(struct work_struct *work) | ||
2049 | finish: | ||
2050 | list_del(&roc->list); | ||
2051 | started = roc->started; | ||
2052 | - ieee80211_roc_notify_destroy(roc); | ||
2053 | + ieee80211_roc_notify_destroy(roc, !roc->abort); | ||
2054 | |||
2055 | if (started) { | ||
2056 | drv_flush(local, false); | ||
2057 | @@ -412,7 +421,7 @@ static void ieee80211_hw_roc_done(struct work_struct *work) | ||
2058 | |||
2059 | list_del(&roc->list); | ||
2060 | |||
2061 | - ieee80211_roc_notify_destroy(roc); | ||
2062 | + ieee80211_roc_notify_destroy(roc, true); | ||
2063 | |||
2064 | /* if there's another roc, start it now */ | ||
2065 | ieee80211_start_next_roc(local); | ||
2066 | @@ -462,12 +471,14 @@ void ieee80211_roc_purge(struct ieee80211_sub_if_data *sdata) | ||
2067 | list_for_each_entry_safe(roc, tmp, &tmp_list, list) { | ||
2068 | if (local->ops->remain_on_channel) { | ||
2069 | list_del(&roc->list); | ||
2070 | - ieee80211_roc_notify_destroy(roc); | ||
2071 | + ieee80211_roc_notify_destroy(roc, true); | ||
2072 | } else { | ||
2073 | ieee80211_queue_delayed_work(&local->hw, &roc->work, 0); | ||
2074 | |||
2075 | /* work will clean up etc */ | ||
2076 | flush_delayed_work(&roc->work); | ||
2077 | + WARN_ON(!roc->to_be_freed); | ||
2078 | + kfree(roc); | ||
2079 | } | ||
2080 | } | ||
2081 | |||
2082 | diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c | ||
2083 | index 507b5e8..716aa41 100644 | ||
2084 | --- a/net/sunrpc/clnt.c | ||
2085 | +++ b/net/sunrpc/clnt.c | ||
2086 | @@ -511,7 +511,7 @@ static struct rpc_clnt *__rpc_clone_client(struct rpc_create_args *args, | ||
2087 | new = rpc_new_client(args, xprt); | ||
2088 | if (IS_ERR(new)) { | ||
2089 | err = PTR_ERR(new); | ||
2090 | - goto out_put; | ||
2091 | + goto out_err; | ||
2092 | } | ||
2093 | |||
2094 | atomic_inc(&clnt->cl_count); | ||
2095 | @@ -524,8 +524,6 @@ static struct rpc_clnt *__rpc_clone_client(struct rpc_create_args *args, | ||
2096 | new->cl_chatty = clnt->cl_chatty; | ||
2097 | return new; | ||
2098 | |||
2099 | -out_put: | ||
2100 | - xprt_put(xprt); | ||
2101 | out_err: | ||
2102 | dprintk("RPC: %s: returned error %d\n", __func__, err); | ||
2103 | return ERR_PTR(err); | ||
2104 | diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c | ||
2105 | index e46b6a3..622f726 100644 | ||
2106 | --- a/sound/pci/hda/hda_codec.c | ||
2107 | +++ b/sound/pci/hda/hda_codec.c | ||
2108 | @@ -173,7 +173,7 @@ const char *snd_hda_get_jack_type(u32 cfg) | ||
2109 | "Line Out", "Speaker", "HP Out", "CD", | ||
2110 | "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand", | ||
2111 | "Line In", "Aux", "Mic", "Telephony", | ||
2112 | - "SPDIF In", "Digitial In", "Reserved", "Other" | ||
2113 | + "SPDIF In", "Digital In", "Reserved", "Other" | ||
2114 | }; | ||
2115 | |||
2116 | return jack_types[(cfg & AC_DEFCFG_DEVICE) | ||
2117 | diff --git a/sound/pci/hda/hda_eld.c b/sound/pci/hda/hda_eld.c | ||
2118 | index 4c054f4..86f6468 100644 | ||
2119 | --- a/sound/pci/hda/hda_eld.c | ||
2120 | +++ b/sound/pci/hda/hda_eld.c | ||
2121 | @@ -322,7 +322,7 @@ int snd_hdmi_get_eld(struct hdmi_eld *eld, | ||
2122 | struct hda_codec *codec, hda_nid_t nid) | ||
2123 | { | ||
2124 | int i; | ||
2125 | - int ret; | ||
2126 | + int ret = 0; | ||
2127 | int size; | ||
2128 | unsigned char *buf; | ||
2129 | |||
2130 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
2131 | index 47fb18d..ee975a2 100644 | ||
2132 | --- a/sound/pci/hda/patch_realtek.c | ||
2133 | +++ b/sound/pci/hda/patch_realtek.c | ||
2134 | @@ -6720,7 +6720,8 @@ static int alc662_parse_auto_config(struct hda_codec *codec) | ||
2135 | const hda_nid_t *ssids; | ||
2136 | |||
2137 | if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 || | ||
2138 | - codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670) | ||
2139 | + codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670 || | ||
2140 | + codec->vendor_id == 0x10ec0671) | ||
2141 | ssids = alc663_ssids; | ||
2142 | else | ||
2143 | ssids = alc662_ssids; | ||
2144 | @@ -7173,6 +7174,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { | ||
2145 | { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 }, | ||
2146 | { .id = 0x10ec0668, .name = "ALC668", .patch = patch_alc662 }, | ||
2147 | { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 }, | ||
2148 | + { .id = 0x10ec0671, .name = "ALC671", .patch = patch_alc662 }, | ||
2149 | { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 }, | ||
2150 | { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, | ||
2151 | { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 }, | ||
2152 | diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c | ||
2153 | index 3b48042..63e453f 100644 | ||
2154 | --- a/sound/soc/fsl/imx-ssi.c | ||
2155 | +++ b/sound/soc/fsl/imx-ssi.c | ||
2156 | @@ -496,6 +496,8 @@ static void imx_ssi_ac97_reset(struct snd_ac97 *ac97) | ||
2157 | |||
2158 | if (imx_ssi->ac97_reset) | ||
2159 | imx_ssi->ac97_reset(ac97); | ||
2160 | + /* First read sometimes fails, do a dummy read */ | ||
2161 | + imx_ssi_ac97_read(ac97, 0); | ||
2162 | } | ||
2163 | |||
2164 | static void imx_ssi_ac97_warm_reset(struct snd_ac97 *ac97) | ||
2165 | @@ -504,6 +506,9 @@ static void imx_ssi_ac97_warm_reset(struct snd_ac97 *ac97) | ||
2166 | |||
2167 | if (imx_ssi->ac97_warm_reset) | ||
2168 | imx_ssi->ac97_warm_reset(ac97); | ||
2169 | + | ||
2170 | + /* First read sometimes fails, do a dummy read */ | ||
2171 | + imx_ssi_ac97_read(ac97, 0); | ||
2172 | } | ||
2173 | |||
2174 | struct snd_ac97_bus_ops soc_ac97_ops = { | ||
2175 | diff --git a/sound/soc/sh/dma-sh7760.c b/sound/soc/sh/dma-sh7760.c | ||
2176 | index 19eff8f..1a8b03e 100644 | ||
2177 | --- a/sound/soc/sh/dma-sh7760.c | ||
2178 | +++ b/sound/soc/sh/dma-sh7760.c | ||
2179 | @@ -342,8 +342,8 @@ static int camelot_pcm_new(struct snd_soc_pcm_runtime *rtd) | ||
2180 | return 0; | ||
2181 | } | ||
2182 | |||
2183 | -static struct snd_soc_platform sh7760_soc_platform = { | ||
2184 | - .pcm_ops = &camelot_pcm_ops, | ||
2185 | +static struct snd_soc_platform_driver sh7760_soc_platform = { | ||
2186 | + .ops = &camelot_pcm_ops, | ||
2187 | .pcm_new = camelot_pcm_new, | ||
2188 | .pcm_free = camelot_pcm_free, | ||
2189 | }; | ||
2190 | diff --git a/sound/soc/spear/spear_pcm.c b/sound/soc/spear/spear_pcm.c | ||
2191 | index 9b76cc5..5e7aebe 100644 | ||
2192 | --- a/sound/soc/spear/spear_pcm.c | ||
2193 | +++ b/sound/soc/spear/spear_pcm.c | ||
2194 | @@ -149,9 +149,9 @@ static void spear_pcm_free(struct snd_pcm *pcm) | ||
2195 | |||
2196 | static u64 spear_pcm_dmamask = DMA_BIT_MASK(32); | ||
2197 | |||
2198 | -static int spear_pcm_new(struct snd_card *card, | ||
2199 | - struct snd_soc_dai *dai, struct snd_pcm *pcm) | ||
2200 | +static int spear_pcm_new(struct snd_soc_pcm_runtime *rtd) | ||
2201 | { | ||
2202 | + struct snd_card *card = rtd->card->snd_card; | ||
2203 | int ret; | ||
2204 | |||
2205 | if (!card->dev->dma_mask) | ||
2206 | @@ -159,16 +159,16 @@ static int spear_pcm_new(struct snd_card *card, | ||
2207 | if (!card->dev->coherent_dma_mask) | ||
2208 | card->dev->coherent_dma_mask = DMA_BIT_MASK(32); | ||
2209 | |||
2210 | - if (dai->driver->playback.channels_min) { | ||
2211 | - ret = spear_pcm_preallocate_dma_buffer(pcm, | ||
2212 | + if (rtd->cpu_dai->driver->playback.channels_min) { | ||
2213 | + ret = spear_pcm_preallocate_dma_buffer(rtd->pcm, | ||
2214 | SNDRV_PCM_STREAM_PLAYBACK, | ||
2215 | spear_pcm_hardware.buffer_bytes_max); | ||
2216 | if (ret) | ||
2217 | return ret; | ||
2218 | } | ||
2219 | |||
2220 | - if (dai->driver->capture.channels_min) { | ||
2221 | - ret = spear_pcm_preallocate_dma_buffer(pcm, | ||
2222 | + if (rtd->cpu_dai->driver->capture.channels_min) { | ||
2223 | + ret = spear_pcm_preallocate_dma_buffer(rtd->pcm, | ||
2224 | SNDRV_PCM_STREAM_CAPTURE, | ||
2225 | spear_pcm_hardware.buffer_bytes_max); | ||
2226 | if (ret) |