Annotation of /trunk/kernel-lts/patches-3.4/0139-3.4.40-all-fixes.patch
Parent Directory | Revision Log
Revision 2199 -
(hide annotations)
(download)
Thu Jun 13 10:34:56 2013 UTC (11 years, 3 months ago) by niro
File size: 27496 byte(s)
Thu Jun 13 10:34:56 2013 UTC (11 years, 3 months ago) by niro
File size: 27496 byte(s)
-linux-3.4.40
1 | niro | 2199 | 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/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c | ||
25 | index 5f3ef87..9cfdcc9 100644 | ||
26 | --- a/arch/powerpc/platforms/pseries/lpar.c | ||
27 | +++ b/arch/powerpc/platforms/pseries/lpar.c | ||
28 | @@ -187,7 +187,13 @@ static long pSeries_lpar_hpte_remove(unsigned long hpte_group) | ||
29 | (0x1UL << 4), &dummy1, &dummy2); | ||
30 | if (lpar_rc == H_SUCCESS) | ||
31 | return i; | ||
32 | - BUG_ON(lpar_rc != H_NOT_FOUND); | ||
33 | + | ||
34 | + /* | ||
35 | + * The test for adjunct partition is performed before the | ||
36 | + * ANDCOND test. H_RESOURCE may be returned, so we need to | ||
37 | + * check for that as well. | ||
38 | + */ | ||
39 | + BUG_ON(lpar_rc != H_NOT_FOUND && lpar_rc != H_RESOURCE); | ||
40 | |||
41 | slot_offset++; | ||
42 | slot_offset &= 0x7; | ||
43 | diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile | ||
44 | index 8a84501..5ef205c 100644 | ||
45 | --- a/arch/x86/boot/compressed/Makefile | ||
46 | +++ b/arch/x86/boot/compressed/Makefile | ||
47 | @@ -4,7 +4,7 @@ | ||
48 | # create a compressed vmlinux image from the original vmlinux | ||
49 | # | ||
50 | |||
51 | -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 | ||
52 | +targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.xz vmlinux.bin.lzo | ||
53 | |||
54 | KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 | ||
55 | KBUILD_CFLAGS += -fno-strict-aliasing -fPIC | ||
56 | @@ -29,7 +29,6 @@ VMLINUX_OBJS = $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o \ | ||
57 | $(obj)/piggy.o | ||
58 | |||
59 | $(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone | ||
60 | -$(obj)/efi_stub_$(BITS).o: KBUILD_CLFAGS += -fshort-wchar -mno-red-zone | ||
61 | |||
62 | ifeq ($(CONFIG_EFI_STUB), y) | ||
63 | VMLINUX_OBJS += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o | ||
64 | @@ -43,7 +42,7 @@ OBJCOPYFLAGS_vmlinux.bin := -R .comment -S | ||
65 | $(obj)/vmlinux.bin: vmlinux FORCE | ||
66 | $(call if_changed,objcopy) | ||
67 | |||
68 | -targets += vmlinux.bin.all vmlinux.relocs | ||
69 | +targets += $(patsubst $(obj)/%,%,$(VMLINUX_OBJS)) vmlinux.bin.all vmlinux.relocs | ||
70 | |||
71 | CMD_RELOCS = arch/x86/tools/relocs | ||
72 | quiet_cmd_relocs = RELOCS $@ | ||
73 | diff --git a/arch/x86/include/asm/syscall.h b/arch/x86/include/asm/syscall.h | ||
74 | index 386b786..1d82a11 100644 | ||
75 | --- a/arch/x86/include/asm/syscall.h | ||
76 | +++ b/arch/x86/include/asm/syscall.h | ||
77 | @@ -27,13 +27,13 @@ extern const unsigned long sys_call_table[]; | ||
78 | */ | ||
79 | static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs) | ||
80 | { | ||
81 | - return regs->orig_ax & __SYSCALL_MASK; | ||
82 | + return regs->orig_ax; | ||
83 | } | ||
84 | |||
85 | static inline void syscall_rollback(struct task_struct *task, | ||
86 | struct pt_regs *regs) | ||
87 | { | ||
88 | - regs->ax = regs->orig_ax & __SYSCALL_MASK; | ||
89 | + regs->ax = regs->orig_ax; | ||
90 | } | ||
91 | |||
92 | static inline long syscall_get_error(struct task_struct *task, | ||
93 | diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c | ||
94 | index cf15001..262ed81 100644 | ||
95 | --- a/block/blk-sysfs.c | ||
96 | +++ b/block/blk-sysfs.c | ||
97 | @@ -200,6 +200,8 @@ queue_store_##name(struct request_queue *q, const char *page, size_t count) \ | ||
98 | unsigned long val; \ | ||
99 | ssize_t ret; \ | ||
100 | ret = queue_var_store(&val, page, count); \ | ||
101 | + if (ret < 0) \ | ||
102 | + return ret; \ | ||
103 | if (neg) \ | ||
104 | val = !val; \ | ||
105 | \ | ||
106 | diff --git a/crypto/gcm.c b/crypto/gcm.c | ||
107 | index 1a25263..b97b186 100644 | ||
108 | --- a/crypto/gcm.c | ||
109 | +++ b/crypto/gcm.c | ||
110 | @@ -44,6 +44,7 @@ struct crypto_rfc4543_ctx { | ||
111 | |||
112 | struct crypto_rfc4543_req_ctx { | ||
113 | u8 auth_tag[16]; | ||
114 | + u8 assocbuf[32]; | ||
115 | struct scatterlist cipher[1]; | ||
116 | struct scatterlist payload[2]; | ||
117 | struct scatterlist assoc[2]; | ||
118 | @@ -1142,9 +1143,19 @@ static struct aead_request *crypto_rfc4543_crypt(struct aead_request *req, | ||
119 | scatterwalk_crypto_chain(payload, dst, vdst == req->iv + 8, 2); | ||
120 | assoclen += 8 + req->cryptlen - (enc ? 0 : authsize); | ||
121 | |||
122 | - sg_init_table(assoc, 2); | ||
123 | - sg_set_page(assoc, sg_page(req->assoc), req->assoc->length, | ||
124 | - req->assoc->offset); | ||
125 | + if (req->assoc->length == req->assoclen) { | ||
126 | + sg_init_table(assoc, 2); | ||
127 | + sg_set_page(assoc, sg_page(req->assoc), req->assoc->length, | ||
128 | + req->assoc->offset); | ||
129 | + } else { | ||
130 | + BUG_ON(req->assoclen > sizeof(rctx->assocbuf)); | ||
131 | + | ||
132 | + scatterwalk_map_and_copy(rctx->assocbuf, req->assoc, 0, | ||
133 | + req->assoclen, 0); | ||
134 | + | ||
135 | + sg_init_table(assoc, 2); | ||
136 | + sg_set_buf(assoc, rctx->assocbuf, req->assoclen); | ||
137 | + } | ||
138 | scatterwalk_crypto_chain(assoc, payload, 0, 2); | ||
139 | |||
140 | aead_request_set_tfm(subreq, ctx->child); | ||
141 | diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c | ||
142 | index 47bd6ab..f67fc41 100644 | ||
143 | --- a/drivers/ata/ata_piix.c | ||
144 | +++ b/drivers/ata/ata_piix.c | ||
145 | @@ -150,6 +150,7 @@ enum piix_controller_ids { | ||
146 | tolapai_sata, | ||
147 | piix_pata_vmw, /* PIIX4 for VMware, spurious DMA_ERR */ | ||
148 | ich8_sata_snb, | ||
149 | + ich8_2port_sata_snb, | ||
150 | }; | ||
151 | |||
152 | struct piix_map_db { | ||
153 | @@ -326,7 +327,7 @@ static const struct pci_device_id piix_pci_tbl[] = { | ||
154 | /* SATA Controller IDE (Lynx Point) */ | ||
155 | { 0x8086, 0x8c01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, | ||
156 | /* SATA Controller IDE (Lynx Point) */ | ||
157 | - { 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
158 | + { 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb }, | ||
159 | /* SATA Controller IDE (Lynx Point) */ | ||
160 | { 0x8086, 0x8c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
161 | /* SATA Controller IDE (DH89xxCC) */ | ||
162 | @@ -511,6 +512,7 @@ static const struct piix_map_db *piix_map_db_table[] = { | ||
163 | [ich8m_apple_sata] = &ich8m_apple_map_db, | ||
164 | [tolapai_sata] = &tolapai_map_db, | ||
165 | [ich8_sata_snb] = &ich8_map_db, | ||
166 | + [ich8_2port_sata_snb] = &ich8_2port_map_db, | ||
167 | }; | ||
168 | |||
169 | static struct ata_port_info piix_port_info[] = { | ||
170 | @@ -652,6 +654,15 @@ static struct ata_port_info piix_port_info[] = { | ||
171 | .port_ops = &piix_sata_ops, | ||
172 | }, | ||
173 | |||
174 | + [ich8_2port_sata_snb] = | ||
175 | + { | ||
176 | + .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR | ||
177 | + | PIIX_FLAG_PIO16, | ||
178 | + .pio_mask = ATA_PIO4, | ||
179 | + .mwdma_mask = ATA_MWDMA2, | ||
180 | + .udma_mask = ATA_UDMA6, | ||
181 | + .port_ops = &piix_sata_ops, | ||
182 | + }, | ||
183 | }; | ||
184 | |||
185 | static struct pci_bits piix_enable_bits[] = { | ||
186 | diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c | ||
187 | index 4b4caa3..02dd34c 100644 | ||
188 | --- a/drivers/ata/libata-core.c | ||
189 | +++ b/drivers/ata/libata-core.c | ||
190 | @@ -2408,6 +2408,9 @@ int ata_dev_configure(struct ata_device *dev) | ||
191 | dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128, | ||
192 | dev->max_sectors); | ||
193 | |||
194 | + if (dev->horkage & ATA_HORKAGE_MAX_SEC_LBA48) | ||
195 | + dev->max_sectors = ATA_MAX_SECTORS_LBA48; | ||
196 | + | ||
197 | if (ap->ops->dev_config) | ||
198 | ap->ops->dev_config(dev); | ||
199 | |||
200 | @@ -4064,6 +4067,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { | ||
201 | /* Weird ATAPI devices */ | ||
202 | { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 }, | ||
203 | { "QUANTUM DAT DAT72-000", NULL, ATA_HORKAGE_ATAPI_MOD16_DMA }, | ||
204 | + { "Slimtype DVD A DS8A8SH", NULL, ATA_HORKAGE_MAX_SEC_LBA48 }, | ||
205 | |||
206 | /* Devices we expect to fail diagnostics */ | ||
207 | |||
208 | diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c | ||
209 | index 92b779e..17aa318 100644 | ||
210 | --- a/drivers/base/regmap/regcache-rbtree.c | ||
211 | +++ b/drivers/base/regmap/regcache-rbtree.c | ||
212 | @@ -392,7 +392,7 @@ static int regcache_rbtree_sync(struct regmap *map, unsigned int min, | ||
213 | base = 0; | ||
214 | |||
215 | if (max < rbnode->base_reg + rbnode->blklen) | ||
216 | - end = rbnode->base_reg + rbnode->blklen - max; | ||
217 | + end = max - rbnode->base_reg + 1; | ||
218 | else | ||
219 | end = rbnode->blklen; | ||
220 | |||
221 | diff --git a/drivers/eisa/pci_eisa.c b/drivers/eisa/pci_eisa.c | ||
222 | index cdae207..6c3fca9 100644 | ||
223 | --- a/drivers/eisa/pci_eisa.c | ||
224 | +++ b/drivers/eisa/pci_eisa.c | ||
225 | @@ -19,10 +19,10 @@ | ||
226 | /* There is only *one* pci_eisa device per machine, right ? */ | ||
227 | static struct eisa_root_device pci_eisa_root; | ||
228 | |||
229 | -static int __init pci_eisa_init(struct pci_dev *pdev, | ||
230 | - const struct pci_device_id *ent) | ||
231 | +static int __init pci_eisa_init(struct pci_dev *pdev) | ||
232 | { | ||
233 | - int rc; | ||
234 | + int rc, i; | ||
235 | + struct resource *res, *bus_res = NULL; | ||
236 | |||
237 | if ((rc = pci_enable_device (pdev))) { | ||
238 | printk (KERN_ERR "pci_eisa : Could not enable device %s\n", | ||
239 | @@ -30,9 +30,30 @@ static int __init pci_eisa_init(struct pci_dev *pdev, | ||
240 | return rc; | ||
241 | } | ||
242 | |||
243 | + /* | ||
244 | + * The Intel 82375 PCI-EISA bridge is a subtractive-decode PCI | ||
245 | + * device, so the resources available on EISA are the same as those | ||
246 | + * available on the 82375 bus. This works the same as a PCI-PCI | ||
247 | + * bridge in subtractive-decode mode (see pci_read_bridge_bases()). | ||
248 | + * We assume other PCI-EISA bridges are similar. | ||
249 | + * | ||
250 | + * eisa_root_register() can only deal with a single io port resource, | ||
251 | + * so we use the first valid io port resource. | ||
252 | + */ | ||
253 | + pci_bus_for_each_resource(pdev->bus, res, i) | ||
254 | + if (res && (res->flags & IORESOURCE_IO)) { | ||
255 | + bus_res = res; | ||
256 | + break; | ||
257 | + } | ||
258 | + | ||
259 | + if (!bus_res) { | ||
260 | + dev_err(&pdev->dev, "No resources available\n"); | ||
261 | + return -1; | ||
262 | + } | ||
263 | + | ||
264 | pci_eisa_root.dev = &pdev->dev; | ||
265 | - pci_eisa_root.res = pdev->bus->resource[0]; | ||
266 | - pci_eisa_root.bus_base_addr = pdev->bus->resource[0]->start; | ||
267 | + pci_eisa_root.res = bus_res; | ||
268 | + pci_eisa_root.bus_base_addr = bus_res->start; | ||
269 | pci_eisa_root.slots = EISA_MAX_SLOTS; | ||
270 | pci_eisa_root.dma_mask = pdev->dma_mask; | ||
271 | dev_set_drvdata(pci_eisa_root.dev, &pci_eisa_root); | ||
272 | @@ -45,22 +66,26 @@ static int __init pci_eisa_init(struct pci_dev *pdev, | ||
273 | return 0; | ||
274 | } | ||
275 | |||
276 | -static struct pci_device_id pci_eisa_pci_tbl[] = { | ||
277 | - { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, | ||
278 | - PCI_CLASS_BRIDGE_EISA << 8, 0xffff00, 0 }, | ||
279 | - { 0, } | ||
280 | -}; | ||
281 | +/* | ||
282 | + * We have to call pci_eisa_init_early() before pnpacpi_init()/isapnp_init(). | ||
283 | + * Otherwise pnp resource will get enabled early and could prevent eisa | ||
284 | + * to be initialized. | ||
285 | + * Also need to make sure pci_eisa_init_early() is called after | ||
286 | + * x86/pci_subsys_init(). | ||
287 | + * So need to use subsys_initcall_sync with it. | ||
288 | + */ | ||
289 | +static int __init pci_eisa_init_early(void) | ||
290 | +{ | ||
291 | + struct pci_dev *dev = NULL; | ||
292 | + int ret; | ||
293 | |||
294 | -static struct pci_driver __refdata pci_eisa_driver = { | ||
295 | - .name = "pci_eisa", | ||
296 | - .id_table = pci_eisa_pci_tbl, | ||
297 | - .probe = pci_eisa_init, | ||
298 | -}; | ||
299 | + for_each_pci_dev(dev) | ||
300 | + if ((dev->class >> 8) == PCI_CLASS_BRIDGE_EISA) { | ||
301 | + ret = pci_eisa_init(dev); | ||
302 | + if (ret) | ||
303 | + return ret; | ||
304 | + } | ||
305 | |||
306 | -static int __init pci_eisa_init_module (void) | ||
307 | -{ | ||
308 | - return pci_register_driver (&pci_eisa_driver); | ||
309 | + return 0; | ||
310 | } | ||
311 | - | ||
312 | -device_initcall(pci_eisa_init_module); | ||
313 | -MODULE_DEVICE_TABLE(pci, pci_eisa_pci_tbl); | ||
314 | +subsys_initcall_sync(pci_eisa_init_early); | ||
315 | diff --git a/drivers/hwspinlock/hwspinlock_core.c b/drivers/hwspinlock/hwspinlock_core.c | ||
316 | index 1201a15..08e7e72 100644 | ||
317 | --- a/drivers/hwspinlock/hwspinlock_core.c | ||
318 | +++ b/drivers/hwspinlock/hwspinlock_core.c | ||
319 | @@ -416,6 +416,8 @@ static int __hwspin_lock_request(struct hwspinlock *hwlock) | ||
320 | ret = pm_runtime_get_sync(dev); | ||
321 | if (ret < 0) { | ||
322 | dev_err(dev, "%s: can't power on device\n", __func__); | ||
323 | + pm_runtime_put_noidle(dev); | ||
324 | + module_put(dev->driver->owner); | ||
325 | return ret; | ||
326 | } | ||
327 | |||
328 | diff --git a/drivers/net/wireless/mwifiex/init.c b/drivers/net/wireless/mwifiex/init.c | ||
329 | index f9d9aed..54bb483 100644 | ||
330 | --- a/drivers/net/wireless/mwifiex/init.c | ||
331 | +++ b/drivers/net/wireless/mwifiex/init.c | ||
332 | @@ -584,14 +584,6 @@ mwifiex_shutdown_drv(struct mwifiex_adapter *adapter) | ||
333 | return ret; | ||
334 | } | ||
335 | |||
336 | - /* cancel current command */ | ||
337 | - if (adapter->curr_cmd) { | ||
338 | - dev_warn(adapter->dev, "curr_cmd is still in processing\n"); | ||
339 | - del_timer(&adapter->cmd_timer); | ||
340 | - mwifiex_insert_cmd_to_free_q(adapter, adapter->curr_cmd); | ||
341 | - adapter->curr_cmd = NULL; | ||
342 | - } | ||
343 | - | ||
344 | /* shut down mwifiex */ | ||
345 | dev_dbg(adapter->dev, "info: shutdown mwifiex...\n"); | ||
346 | |||
347 | diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c | ||
348 | index 17148bb..10fe07d 100644 | ||
349 | --- a/drivers/net/wireless/rt2x00/rt2x00pci.c | ||
350 | +++ b/drivers/net/wireless/rt2x00/rt2x00pci.c | ||
351 | @@ -52,8 +52,8 @@ int rt2x00pci_regbusy_read(struct rt2x00_dev *rt2x00dev, | ||
352 | udelay(REGISTER_BUSY_DELAY); | ||
353 | } | ||
354 | |||
355 | - ERROR(rt2x00dev, "Indirect register access failed: " | ||
356 | - "offset=0x%.08x, value=0x%.08x\n", offset, *reg); | ||
357 | + printk_once(KERN_ERR "%s() Indirect register access failed: " | ||
358 | + "offset=0x%.08x, value=0x%.08x\n", __func__, offset, *reg); | ||
359 | *reg = ~0; | ||
360 | |||
361 | return 0; | ||
362 | diff --git a/drivers/spi/spi-mpc512x-psc.c b/drivers/spi/spi-mpc512x-psc.c | ||
363 | index 4c63f77..2e2b04f 100644 | ||
364 | --- a/drivers/spi/spi-mpc512x-psc.c | ||
365 | +++ b/drivers/spi/spi-mpc512x-psc.c | ||
366 | @@ -164,7 +164,7 @@ static int mpc512x_psc_spi_transfer_rxtx(struct spi_device *spi, | ||
367 | |||
368 | for (i = count; i > 0; i--) { | ||
369 | data = tx_buf ? *tx_buf++ : 0; | ||
370 | - if (len == EOFBYTE) | ||
371 | + if (len == EOFBYTE && t->cs_change) | ||
372 | setbits32(&fifo->txcmd, MPC512x_PSC_FIFO_EOF); | ||
373 | out_8(&fifo->txdata_8, data); | ||
374 | len--; | ||
375 | diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c | ||
376 | index 972a94c..486e864 100644 | ||
377 | --- a/drivers/spi/spi-s3c64xx.c | ||
378 | +++ b/drivers/spi/spi-s3c64xx.c | ||
379 | @@ -889,25 +889,30 @@ static irqreturn_t s3c64xx_spi_irq(int irq, void *data) | ||
380 | { | ||
381 | struct s3c64xx_spi_driver_data *sdd = data; | ||
382 | struct spi_master *spi = sdd->master; | ||
383 | - unsigned int val; | ||
384 | + unsigned int val, clr = 0; | ||
385 | |||
386 | - val = readl(sdd->regs + S3C64XX_SPI_PENDING_CLR); | ||
387 | + val = readl(sdd->regs + S3C64XX_SPI_STATUS); | ||
388 | |||
389 | - val &= S3C64XX_SPI_PND_RX_OVERRUN_CLR | | ||
390 | - S3C64XX_SPI_PND_RX_UNDERRUN_CLR | | ||
391 | - S3C64XX_SPI_PND_TX_OVERRUN_CLR | | ||
392 | - S3C64XX_SPI_PND_TX_UNDERRUN_CLR; | ||
393 | - | ||
394 | - writel(val, sdd->regs + S3C64XX_SPI_PENDING_CLR); | ||
395 | - | ||
396 | - if (val & S3C64XX_SPI_PND_RX_OVERRUN_CLR) | ||
397 | + if (val & S3C64XX_SPI_ST_RX_OVERRUN_ERR) { | ||
398 | + clr = S3C64XX_SPI_PND_RX_OVERRUN_CLR; | ||
399 | dev_err(&spi->dev, "RX overrun\n"); | ||
400 | - if (val & S3C64XX_SPI_PND_RX_UNDERRUN_CLR) | ||
401 | + } | ||
402 | + if (val & S3C64XX_SPI_ST_RX_UNDERRUN_ERR) { | ||
403 | + clr |= S3C64XX_SPI_PND_RX_UNDERRUN_CLR; | ||
404 | dev_err(&spi->dev, "RX underrun\n"); | ||
405 | - if (val & S3C64XX_SPI_PND_TX_OVERRUN_CLR) | ||
406 | + } | ||
407 | + if (val & S3C64XX_SPI_ST_TX_OVERRUN_ERR) { | ||
408 | + clr |= S3C64XX_SPI_PND_TX_OVERRUN_CLR; | ||
409 | dev_err(&spi->dev, "TX overrun\n"); | ||
410 | - if (val & S3C64XX_SPI_PND_TX_UNDERRUN_CLR) | ||
411 | + } | ||
412 | + if (val & S3C64XX_SPI_ST_TX_UNDERRUN_ERR) { | ||
413 | + clr |= S3C64XX_SPI_PND_TX_UNDERRUN_CLR; | ||
414 | dev_err(&spi->dev, "TX underrun\n"); | ||
415 | + } | ||
416 | + | ||
417 | + /* Clear the pending irq by setting and then clearing it */ | ||
418 | + writel(clr, sdd->regs + S3C64XX_SPI_PENDING_CLR); | ||
419 | + writel(0, sdd->regs + S3C64XX_SPI_PENDING_CLR); | ||
420 | |||
421 | return IRQ_HANDLED; | ||
422 | } | ||
423 | @@ -931,9 +936,13 @@ static void s3c64xx_spi_hwinit(struct s3c64xx_spi_driver_data *sdd, int channel) | ||
424 | writel(0, regs + S3C64XX_SPI_MODE_CFG); | ||
425 | writel(0, regs + S3C64XX_SPI_PACKET_CNT); | ||
426 | |||
427 | - /* Clear any irq pending bits */ | ||
428 | - writel(readl(regs + S3C64XX_SPI_PENDING_CLR), | ||
429 | - regs + S3C64XX_SPI_PENDING_CLR); | ||
430 | + /* Clear any irq pending bits, should set and clear the bits */ | ||
431 | + val = S3C64XX_SPI_PND_RX_OVERRUN_CLR | | ||
432 | + S3C64XX_SPI_PND_RX_UNDERRUN_CLR | | ||
433 | + S3C64XX_SPI_PND_TX_OVERRUN_CLR | | ||
434 | + S3C64XX_SPI_PND_TX_UNDERRUN_CLR; | ||
435 | + writel(val, regs + S3C64XX_SPI_PENDING_CLR); | ||
436 | + writel(0, regs + S3C64XX_SPI_PENDING_CLR); | ||
437 | |||
438 | writel(0, regs + S3C64XX_SPI_SWAP_CFG); | ||
439 | |||
440 | diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c | ||
441 | index 022bacb..5c26dda 100644 | ||
442 | --- a/drivers/thermal/thermal_sys.c | ||
443 | +++ b/drivers/thermal/thermal_sys.c | ||
444 | @@ -1383,6 +1383,7 @@ static int __init thermal_init(void) | ||
445 | idr_destroy(&thermal_cdev_idr); | ||
446 | mutex_destroy(&thermal_idr_lock); | ||
447 | mutex_destroy(&thermal_list_lock); | ||
448 | + return result; | ||
449 | } | ||
450 | result = genetlink_init(); | ||
451 | return result; | ||
452 | diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c | ||
453 | index 46fc1c2..048d990 100644 | ||
454 | --- a/fs/reiserfs/xattr.c | ||
455 | +++ b/fs/reiserfs/xattr.c | ||
456 | @@ -187,8 +187,8 @@ fill_with_dentries(void *buf, const char *name, int namelen, loff_t offset, | ||
457 | if (dbuf->count == ARRAY_SIZE(dbuf->dentries)) | ||
458 | return -ENOSPC; | ||
459 | |||
460 | - if (name[0] == '.' && (name[1] == '\0' || | ||
461 | - (name[1] == '.' && name[2] == '\0'))) | ||
462 | + if (name[0] == '.' && (namelen < 2 || | ||
463 | + (namelen == 2 && name[1] == '.'))) | ||
464 | return 0; | ||
465 | |||
466 | dentry = lookup_one_len(name, dbuf->xadir, namelen); | ||
467 | diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c | ||
468 | index 76e4e05..d867bd9 100644 | ||
469 | --- a/fs/ubifs/super.c | ||
470 | +++ b/fs/ubifs/super.c | ||
471 | @@ -1582,6 +1582,12 @@ static int ubifs_remount_rw(struct ubifs_info *c) | ||
472 | c->remounting_rw = 1; | ||
473 | c->ro_mount = 0; | ||
474 | |||
475 | + if (c->space_fixup) { | ||
476 | + err = ubifs_fixup_free_space(c); | ||
477 | + if (err) | ||
478 | + return err; | ||
479 | + } | ||
480 | + | ||
481 | err = check_free_space(c); | ||
482 | if (err) | ||
483 | goto out; | ||
484 | @@ -1698,12 +1704,6 @@ static int ubifs_remount_rw(struct ubifs_info *c) | ||
485 | err = dbg_check_space_info(c); | ||
486 | } | ||
487 | |||
488 | - if (c->space_fixup) { | ||
489 | - err = ubifs_fixup_free_space(c); | ||
490 | - if (err) | ||
491 | - goto out; | ||
492 | - } | ||
493 | - | ||
494 | mutex_unlock(&c->umount_mutex); | ||
495 | return err; | ||
496 | |||
497 | diff --git a/include/linux/ata.h b/include/linux/ata.h | ||
498 | index 32df2b6..5856c9e 100644 | ||
499 | --- a/include/linux/ata.h | ||
500 | +++ b/include/linux/ata.h | ||
501 | @@ -937,7 +937,7 @@ static inline int atapi_cdb_len(const u16 *dev_id) | ||
502 | } | ||
503 | } | ||
504 | |||
505 | -static inline bool atapi_command_packet_set(const u16 *dev_id) | ||
506 | +static inline int atapi_command_packet_set(const u16 *dev_id) | ||
507 | { | ||
508 | return (dev_id[ATA_ID_CONFIG] >> 8) & 0x1f; | ||
509 | } | ||
510 | diff --git a/include/linux/libata.h b/include/linux/libata.h | ||
511 | index 6e887c7..7e13eb4 100644 | ||
512 | --- a/include/linux/libata.h | ||
513 | +++ b/include/linux/libata.h | ||
514 | @@ -393,6 +393,7 @@ enum { | ||
515 | ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ | ||
516 | ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */ | ||
517 | ATA_HORKAGE_DUMP_ID = (1 << 16), /* dump IDENTIFY data */ | ||
518 | + ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */ | ||
519 | |||
520 | /* DMA mask for user DMA control: User visible values; DO NOT | ||
521 | renumber */ | ||
522 | diff --git a/include/linux/preempt.h b/include/linux/preempt.h | ||
523 | index 5a710b9..87a03c7 100644 | ||
524 | --- a/include/linux/preempt.h | ||
525 | +++ b/include/linux/preempt.h | ||
526 | @@ -93,14 +93,20 @@ do { \ | ||
527 | |||
528 | #else /* !CONFIG_PREEMPT_COUNT */ | ||
529 | |||
530 | -#define preempt_disable() do { } while (0) | ||
531 | -#define sched_preempt_enable_no_resched() do { } while (0) | ||
532 | -#define preempt_enable_no_resched() do { } while (0) | ||
533 | -#define preempt_enable() do { } while (0) | ||
534 | - | ||
535 | -#define preempt_disable_notrace() do { } while (0) | ||
536 | -#define preempt_enable_no_resched_notrace() do { } while (0) | ||
537 | -#define preempt_enable_notrace() do { } while (0) | ||
538 | +/* | ||
539 | + * Even if we don't have any preemption, we need preempt disable/enable | ||
540 | + * to be barriers, so that we don't have things like get_user/put_user | ||
541 | + * that can cause faults and scheduling migrate into our preempt-protected | ||
542 | + * region. | ||
543 | + */ | ||
544 | +#define preempt_disable() barrier() | ||
545 | +#define sched_preempt_enable_no_resched() barrier() | ||
546 | +#define preempt_enable_no_resched() barrier() | ||
547 | +#define preempt_enable() barrier() | ||
548 | + | ||
549 | +#define preempt_disable_notrace() barrier() | ||
550 | +#define preempt_enable_no_resched_notrace() barrier() | ||
551 | +#define preempt_enable_notrace() barrier() | ||
552 | |||
553 | #endif /* CONFIG_PREEMPT_COUNT */ | ||
554 | |||
555 | diff --git a/include/linux/spinlock_up.h b/include/linux/spinlock_up.h | ||
556 | index a26e2fb..e2369c1 100644 | ||
557 | --- a/include/linux/spinlock_up.h | ||
558 | +++ b/include/linux/spinlock_up.h | ||
559 | @@ -16,7 +16,10 @@ | ||
560 | * In the debug case, 1 means unlocked, 0 means locked. (the values | ||
561 | * are inverted, to catch initialization bugs) | ||
562 | * | ||
563 | - * No atomicity anywhere, we are on UP. | ||
564 | + * No atomicity anywhere, we are on UP. However, we still need | ||
565 | + * the compiler barriers, because we do not want the compiler to | ||
566 | + * move potentially faulting instructions (notably user accesses) | ||
567 | + * into the locked sequence, resulting in non-atomic execution. | ||
568 | */ | ||
569 | |||
570 | #ifdef CONFIG_DEBUG_SPINLOCK | ||
571 | @@ -25,6 +28,7 @@ | ||
572 | static inline void arch_spin_lock(arch_spinlock_t *lock) | ||
573 | { | ||
574 | lock->slock = 0; | ||
575 | + barrier(); | ||
576 | } | ||
577 | |||
578 | static inline void | ||
579 | @@ -32,6 +36,7 @@ arch_spin_lock_flags(arch_spinlock_t *lock, unsigned long flags) | ||
580 | { | ||
581 | local_irq_save(flags); | ||
582 | lock->slock = 0; | ||
583 | + barrier(); | ||
584 | } | ||
585 | |||
586 | static inline int arch_spin_trylock(arch_spinlock_t *lock) | ||
587 | @@ -39,32 +44,34 @@ static inline int arch_spin_trylock(arch_spinlock_t *lock) | ||
588 | char oldval = lock->slock; | ||
589 | |||
590 | lock->slock = 0; | ||
591 | + barrier(); | ||
592 | |||
593 | return oldval > 0; | ||
594 | } | ||
595 | |||
596 | static inline void arch_spin_unlock(arch_spinlock_t *lock) | ||
597 | { | ||
598 | + barrier(); | ||
599 | lock->slock = 1; | ||
600 | } | ||
601 | |||
602 | /* | ||
603 | * Read-write spinlocks. No debug version. | ||
604 | */ | ||
605 | -#define arch_read_lock(lock) do { (void)(lock); } while (0) | ||
606 | -#define arch_write_lock(lock) do { (void)(lock); } while (0) | ||
607 | -#define arch_read_trylock(lock) ({ (void)(lock); 1; }) | ||
608 | -#define arch_write_trylock(lock) ({ (void)(lock); 1; }) | ||
609 | -#define arch_read_unlock(lock) do { (void)(lock); } while (0) | ||
610 | -#define arch_write_unlock(lock) do { (void)(lock); } while (0) | ||
611 | +#define arch_read_lock(lock) do { barrier(); (void)(lock); } while (0) | ||
612 | +#define arch_write_lock(lock) do { barrier(); (void)(lock); } while (0) | ||
613 | +#define arch_read_trylock(lock) ({ barrier(); (void)(lock); 1; }) | ||
614 | +#define arch_write_trylock(lock) ({ barrier(); (void)(lock); 1; }) | ||
615 | +#define arch_read_unlock(lock) do { barrier(); (void)(lock); } while (0) | ||
616 | +#define arch_write_unlock(lock) do { barrier(); (void)(lock); } while (0) | ||
617 | |||
618 | #else /* DEBUG_SPINLOCK */ | ||
619 | #define arch_spin_is_locked(lock) ((void)(lock), 0) | ||
620 | /* for sched.c and kernel_lock.c: */ | ||
621 | -# define arch_spin_lock(lock) do { (void)(lock); } while (0) | ||
622 | -# define arch_spin_lock_flags(lock, flags) do { (void)(lock); } while (0) | ||
623 | -# define arch_spin_unlock(lock) do { (void)(lock); } while (0) | ||
624 | -# define arch_spin_trylock(lock) ({ (void)(lock); 1; }) | ||
625 | +# define arch_spin_lock(lock) do { barrier(); (void)(lock); } while (0) | ||
626 | +# define arch_spin_lock_flags(lock, flags) do { barrier(); (void)(lock); } while (0) | ||
627 | +# define arch_spin_unlock(lock) do { barrier(); (void)(lock); } while (0) | ||
628 | +# define arch_spin_trylock(lock) ({ barrier(); (void)(lock); 1; }) | ||
629 | #endif /* DEBUG_SPINLOCK */ | ||
630 | |||
631 | #define arch_spin_is_contended(lock) (((void)(lock), 0)) | ||
632 | diff --git a/kernel/panic.c b/kernel/panic.c | ||
633 | index 9ed023b..10b7685 100644 | ||
634 | --- a/kernel/panic.c | ||
635 | +++ b/kernel/panic.c | ||
636 | @@ -75,6 +75,14 @@ void panic(const char *fmt, ...) | ||
637 | int state = 0; | ||
638 | |||
639 | /* | ||
640 | + * Disable local interrupts. This will prevent panic_smp_self_stop | ||
641 | + * from deadlocking the first cpu that invokes the panic, since | ||
642 | + * there is nothing to prevent an interrupt handler (that runs | ||
643 | + * after the panic_lock is acquired) from invoking panic again. | ||
644 | + */ | ||
645 | + local_irq_disable(); | ||
646 | + | ||
647 | + /* | ||
648 | * It's possible to come here directly from a panic-assertion and | ||
649 | * not have preempt disabled. Some functions called from here want | ||
650 | * preempt to be disabled. No point enabling it later though... | ||
651 | diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c | ||
652 | index 62f3751..e539dfa 100644 | ||
653 | --- a/kernel/trace/ftrace.c | ||
654 | +++ b/kernel/trace/ftrace.c | ||
655 | @@ -4381,12 +4381,8 @@ ftrace_enable_sysctl(struct ctl_table *table, int write, | ||
656 | ftrace_startup_sysctl(); | ||
657 | |||
658 | /* we are starting ftrace again */ | ||
659 | - if (ftrace_ops_list != &ftrace_list_end) { | ||
660 | - if (ftrace_ops_list->next == &ftrace_list_end) | ||
661 | - ftrace_trace_function = ftrace_ops_list->func; | ||
662 | - else | ||
663 | - ftrace_trace_function = ftrace_ops_list_func; | ||
664 | - } | ||
665 | + if (ftrace_ops_list != &ftrace_list_end) | ||
666 | + update_ftrace_function(); | ||
667 | |||
668 | } else { | ||
669 | /* stopping ftrace calls (just send to ftrace_stub) */ | ||
670 | diff --git a/mm/mmap.c b/mm/mmap.c | ||
671 | index 848ef52..2add0a1 100644 | ||
672 | --- a/mm/mmap.c | ||
673 | +++ b/mm/mmap.c | ||
674 | @@ -1619,7 +1619,7 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) | ||
675 | if (mm) { | ||
676 | /* Check the cache first. */ | ||
677 | /* (Cache hit rate is typically around 35%.) */ | ||
678 | - vma = mm->mmap_cache; | ||
679 | + vma = ACCESS_ONCE(mm->mmap_cache); | ||
680 | if (!(vma && vma->vm_end > addr && vma->vm_start <= addr)) { | ||
681 | struct rb_node * rb_node; | ||
682 | |||
683 | diff --git a/mm/nommu.c b/mm/nommu.c | ||
684 | index bb8f4f0..b0956e3 100644 | ||
685 | --- a/mm/nommu.c | ||
686 | +++ b/mm/nommu.c | ||
687 | @@ -807,7 +807,7 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) | ||
688 | struct vm_area_struct *vma; | ||
689 | |||
690 | /* check the cache first */ | ||
691 | - vma = mm->mmap_cache; | ||
692 | + vma = ACCESS_ONCE(mm->mmap_cache); | ||
693 | if (vma && vma->vm_start <= addr && vma->vm_end > addr) | ||
694 | return vma; | ||
695 | |||
696 | diff --git a/net/can/gw.c b/net/can/gw.c | ||
697 | index 3d79b12..f78f898 100644 | ||
698 | --- a/net/can/gw.c | ||
699 | +++ b/net/can/gw.c | ||
700 | @@ -436,7 +436,7 @@ static int cgw_notifier(struct notifier_block *nb, | ||
701 | if (gwj->src.dev == dev || gwj->dst.dev == dev) { | ||
702 | hlist_del(&gwj->list); | ||
703 | cgw_unregister_filter(gwj); | ||
704 | - kfree(gwj); | ||
705 | + kmem_cache_free(cgw_cache, gwj); | ||
706 | } | ||
707 | } | ||
708 | } | ||
709 | @@ -850,7 +850,7 @@ static void cgw_remove_all_jobs(void) | ||
710 | hlist_for_each_entry_safe(gwj, n, nx, &cgw_list, list) { | ||
711 | hlist_del(&gwj->list); | ||
712 | cgw_unregister_filter(gwj); | ||
713 | - kfree(gwj); | ||
714 | + kmem_cache_free(cgw_cache, gwj); | ||
715 | } | ||
716 | } | ||
717 | |||
718 | @@ -903,7 +903,7 @@ static int cgw_remove_job(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | ||
719 | |||
720 | hlist_del(&gwj->list); | ||
721 | cgw_unregister_filter(gwj); | ||
722 | - kfree(gwj); | ||
723 | + kmem_cache_free(cgw_cache, gwj); | ||
724 | err = 0; | ||
725 | break; | ||
726 | } | ||
727 | diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c | ||
728 | index 28e070a..c72dce0 100644 | ||
729 | --- a/sound/pci/hda/hda_codec.c | ||
730 | +++ b/sound/pci/hda/hda_codec.c | ||
731 | @@ -165,7 +165,7 @@ const char *snd_hda_get_jack_type(u32 cfg) | ||
732 | "Line Out", "Speaker", "HP Out", "CD", | ||
733 | "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand", | ||
734 | "Line In", "Aux", "Mic", "Telephony", | ||
735 | - "SPDIF In", "Digitial In", "Reserved", "Other" | ||
736 | + "SPDIF In", "Digital In", "Reserved", "Other" | ||
737 | }; | ||
738 | |||
739 | return jack_types[(cfg & AC_DEFCFG_DEVICE) | ||
740 | diff --git a/sound/pci/hda/hda_eld.c b/sound/pci/hda/hda_eld.c | ||
741 | index 4c054f4..86f6468 100644 | ||
742 | --- a/sound/pci/hda/hda_eld.c | ||
743 | +++ b/sound/pci/hda/hda_eld.c | ||
744 | @@ -322,7 +322,7 @@ int snd_hdmi_get_eld(struct hdmi_eld *eld, | ||
745 | struct hda_codec *codec, hda_nid_t nid) | ||
746 | { | ||
747 | int i; | ||
748 | - int ret; | ||
749 | + int ret = 0; | ||
750 | int size; | ||
751 | unsigned char *buf; | ||
752 | |||
753 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
754 | index adb97d6..353b32a 100644 | ||
755 | --- a/sound/pci/hda/patch_realtek.c | ||
756 | +++ b/sound/pci/hda/patch_realtek.c | ||
757 | @@ -6629,7 +6629,8 @@ static int alc662_parse_auto_config(struct hda_codec *codec) | ||
758 | const hda_nid_t *ssids; | ||
759 | |||
760 | if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 || | ||
761 | - codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670) | ||
762 | + codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670 || | ||
763 | + codec->vendor_id == 0x10ec0671) | ||
764 | ssids = alc663_ssids; | ||
765 | else | ||
766 | ssids = alc662_ssids; | ||
767 | @@ -7056,6 +7057,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { | ||
768 | { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 }, | ||
769 | { .id = 0x10ec0668, .name = "ALC668", .patch = patch_alc662 }, | ||
770 | { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 }, | ||
771 | + { .id = 0x10ec0671, .name = "ALC671", .patch = patch_alc662 }, | ||
772 | { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 }, | ||
773 | { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, | ||
774 | { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 }, | ||
775 | diff --git a/sound/soc/sh/dma-sh7760.c b/sound/soc/sh/dma-sh7760.c | ||
776 | index 7da2018..312715f 100644 | ||
777 | --- a/sound/soc/sh/dma-sh7760.c | ||
778 | +++ b/sound/soc/sh/dma-sh7760.c | ||
779 | @@ -342,8 +342,8 @@ static int camelot_pcm_new(struct snd_soc_pcm_runtime *rtd) | ||
780 | return 0; | ||
781 | } | ||
782 | |||
783 | -static struct snd_soc_platform sh7760_soc_platform = { | ||
784 | - .pcm_ops = &camelot_pcm_ops, | ||
785 | +static struct snd_soc_platform_driver sh7760_soc_platform = { | ||
786 | + .ops = &camelot_pcm_ops, | ||
787 | .pcm_new = camelot_pcm_new, | ||
788 | .pcm_free = camelot_pcm_free, | ||
789 | }; |