Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0367-4.9.268-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3669 - (show annotations) (download)
Mon Oct 24 14:07:46 2022 UTC (18 months, 1 week ago) by niro
File size: 33024 byte(s)
-linux-4.9.268
1 diff --git a/Makefile b/Makefile
2 index 790f3619772a8..642365d416be1 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 267
9 +SUBLEVEL = 268
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/arc/kernel/signal.c b/arch/arc/kernel/signal.c
14 index d347bbc086fed..16cdb471d3db6 100644
15 --- a/arch/arc/kernel/signal.c
16 +++ b/arch/arc/kernel/signal.c
17 @@ -97,7 +97,7 @@ stash_usr_regs(struct rt_sigframe __user *sf, struct pt_regs *regs,
18 sizeof(sf->uc.uc_mcontext.regs.scratch));
19 err |= __copy_to_user(&sf->uc.uc_sigmask, set, sizeof(sigset_t));
20
21 - return err;
22 + return err ? -EFAULT : 0;
23 }
24
25 static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf)
26 @@ -111,7 +111,7 @@ static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf)
27 &(sf->uc.uc_mcontext.regs.scratch),
28 sizeof(sf->uc.uc_mcontext.regs.scratch));
29 if (err)
30 - return err;
31 + return -EFAULT;
32
33 set_current_blocked(&set);
34 regs->bta = uregs.scratch.bta;
35 diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi
36 index 2008648b8c9f9..0a7600d06fb56 100644
37 --- a/arch/arm/boot/dts/omap3.dtsi
38 +++ b/arch/arm/boot/dts/omap3.dtsi
39 @@ -23,6 +23,9 @@
40 i2c0 = &i2c1;
41 i2c1 = &i2c2;
42 i2c2 = &i2c3;
43 + mmc0 = &mmc1;
44 + mmc1 = &mmc2;
45 + mmc2 = &mmc3;
46 serial0 = &uart1;
47 serial1 = &uart2;
48 serial2 = &uart3;
49 diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
50 index 4d6584f15b174..7e5a09c3d2a6b 100644
51 --- a/arch/arm/boot/dts/omap4.dtsi
52 +++ b/arch/arm/boot/dts/omap4.dtsi
53 @@ -22,6 +22,11 @@
54 i2c1 = &i2c2;
55 i2c2 = &i2c3;
56 i2c3 = &i2c4;
57 + mmc0 = &mmc1;
58 + mmc1 = &mmc2;
59 + mmc2 = &mmc3;
60 + mmc3 = &mmc4;
61 + mmc4 = &mmc5;
62 serial0 = &uart1;
63 serial1 = &uart2;
64 serial2 = &uart3;
65 diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi
66 index a76266f242a1f..586fe60b9921f 100644
67 --- a/arch/arm/boot/dts/omap5.dtsi
68 +++ b/arch/arm/boot/dts/omap5.dtsi
69 @@ -25,6 +25,11 @@
70 i2c2 = &i2c3;
71 i2c3 = &i2c4;
72 i2c4 = &i2c5;
73 + mmc0 = &mmc1;
74 + mmc1 = &mmc2;
75 + mmc2 = &mmc3;
76 + mmc3 = &mmc4;
77 + mmc4 = &mmc5;
78 serial0 = &uart1;
79 serial1 = &uart2;
80 serial2 = &uart3;
81 diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c
82 index 84613abf35a33..79ff5b9534313 100644
83 --- a/arch/arm/mach-keystone/keystone.c
84 +++ b/arch/arm/mach-keystone/keystone.c
85 @@ -65,7 +65,7 @@ static void __init keystone_init(void)
86 static long long __init keystone_pv_fixup(void)
87 {
88 long long offset;
89 - phys_addr_t mem_start, mem_end;
90 + u64 mem_start, mem_end;
91
92 mem_start = memblock_start_of_DRAM();
93 mem_end = memblock_end_of_DRAM();
94 @@ -78,7 +78,7 @@ static long long __init keystone_pv_fixup(void)
95 if (mem_start < KEYSTONE_HIGH_PHYS_START ||
96 mem_end > KEYSTONE_HIGH_PHYS_END) {
97 pr_crit("Invalid address space for memory (%08llx-%08llx)\n",
98 - (u64)mem_start, (u64)mem_end);
99 + mem_start, mem_end);
100 return 0;
101 }
102
103 diff --git a/arch/arm/probes/uprobes/core.c b/arch/arm/probes/uprobes/core.c
104 index d1329f1ba4e4c..b97230704b744 100644
105 --- a/arch/arm/probes/uprobes/core.c
106 +++ b/arch/arm/probes/uprobes/core.c
107 @@ -207,7 +207,7 @@ unsigned long uprobe_get_swbp_addr(struct pt_regs *regs)
108 static struct undef_hook uprobes_arm_break_hook = {
109 .instr_mask = 0x0fffffff,
110 .instr_val = (UPROBE_SWBP_ARM_INSN & 0x0fffffff),
111 - .cpsr_mask = MODE_MASK,
112 + .cpsr_mask = (PSR_T_BIT | MODE_MASK),
113 .cpsr_val = USR_MODE,
114 .fn = uprobe_trap_handler,
115 };
116 @@ -215,7 +215,7 @@ static struct undef_hook uprobes_arm_break_hook = {
117 static struct undef_hook uprobes_arm_ss_hook = {
118 .instr_mask = 0x0fffffff,
119 .instr_val = (UPROBE_SS_ARM_INSN & 0x0fffffff),
120 - .cpsr_mask = MODE_MASK,
121 + .cpsr_mask = (PSR_T_BIT | MODE_MASK),
122 .cpsr_val = USR_MODE,
123 .fn = uprobe_trap_handler,
124 };
125 diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c
126 index 8786268053693..3b0c892953ab4 100644
127 --- a/arch/ia64/mm/discontig.c
128 +++ b/arch/ia64/mm/discontig.c
129 @@ -99,7 +99,7 @@ static int __init build_node_maps(unsigned long start, unsigned long len,
130 * acpi_boot_init() (which builds the node_to_cpu_mask array) hasn't been
131 * called yet. Note that node 0 will also count all non-existent cpus.
132 */
133 -static int __meminit early_nr_cpus_node(int node)
134 +static int early_nr_cpus_node(int node)
135 {
136 int cpu, n = 0;
137
138 @@ -114,7 +114,7 @@ static int __meminit early_nr_cpus_node(int node)
139 * compute_pernodesize - compute size of pernode data
140 * @node: the node id.
141 */
142 -static unsigned long __meminit compute_pernodesize(int node)
143 +static unsigned long compute_pernodesize(int node)
144 {
145 unsigned long pernodesize = 0, cpus;
146
147 @@ -411,7 +411,7 @@ static void __init reserve_pernode_space(void)
148 }
149 }
150
151 -static void __meminit scatter_node_data(void)
152 +static void scatter_node_data(void)
153 {
154 pg_data_t **dst;
155 int node;
156 diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
157 index 771cfd2e1e6d8..708b8ee604d0a 100644
158 --- a/arch/s390/kernel/entry.S
159 +++ b/arch/s390/kernel/entry.S
160 @@ -902,6 +902,7 @@ ENTRY(ext_int_handler)
161 * Load idle PSW. The second "half" of this function is in .Lcleanup_idle.
162 */
163 ENTRY(psw_idle)
164 + stg %r14,(__SF_GPRS+8*8)(%r15)
165 stg %r3,__SF_EMPTY(%r15)
166 larl %r1,.Lpsw_idle_lpsw+4
167 stg %r1,__SF_EMPTY+8(%r15)
168 diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
169 index 650830e39e3a7..b3ac57f0e068e 100644
170 --- a/arch/x86/kernel/crash.c
171 +++ b/arch/x86/kernel/crash.c
172 @@ -23,6 +23,7 @@
173 #include <linux/export.h>
174 #include <linux/slab.h>
175 #include <linux/vmalloc.h>
176 +#include <linux/overflow.h>
177
178 #include <asm/processor.h>
179 #include <asm/hardirq.h>
180 @@ -564,7 +565,7 @@ int crash_setup_memmap_entries(struct kimage *image, struct boot_params *params)
181 struct crash_memmap_data cmd;
182 struct crash_mem *cmem;
183
184 - cmem = vzalloc(sizeof(struct crash_mem));
185 + cmem = vzalloc(struct_size(cmem, ranges, 1));
186 if (!cmem)
187 return -ENOMEM;
188
189 diff --git a/drivers/dma/dw/Kconfig b/drivers/dma/dw/Kconfig
190 index e00c9b0229647..6ea3e95c287bd 100644
191 --- a/drivers/dma/dw/Kconfig
192 +++ b/drivers/dma/dw/Kconfig
193 @@ -11,6 +11,7 @@ config DW_DMAC_BIG_ENDIAN_IO
194
195 config DW_DMAC
196 tristate "Synopsys DesignWare AHB DMA platform driver"
197 + depends on HAS_IOMEM
198 select DW_DMAC_CORE
199 select DW_DMAC_BIG_ENDIAN_IO if AVR32
200 default y if CPU_AT32AP7000
201 @@ -21,6 +22,7 @@ config DW_DMAC
202 config DW_DMAC_PCI
203 tristate "Synopsys DesignWare AHB DMA PCI driver"
204 depends on PCI
205 + depends on HAS_IOMEM
206 select DW_DMAC_CORE
207 help
208 Support the Synopsys DesignWare AHB DMA controller on the
209 diff --git a/drivers/hid/hid-alps.c b/drivers/hid/hid-alps.c
210 index ed9c0ea5b026e..1bc6ad0339d22 100644
211 --- a/drivers/hid/hid-alps.c
212 +++ b/drivers/hid/hid-alps.c
213 @@ -429,6 +429,7 @@ static int alps_input_configured(struct hid_device *hdev, struct hid_input *hi)
214 ret = input_register_device(data->input2);
215 if (ret) {
216 input_free_device(input2);
217 + ret = -ENOENT;
218 goto exit;
219 }
220 }
221 diff --git a/drivers/input/keyboard/nspire-keypad.c b/drivers/input/keyboard/nspire-keypad.c
222 index 7abfd34eb87ec..bcec72367c1d4 100644
223 --- a/drivers/input/keyboard/nspire-keypad.c
224 +++ b/drivers/input/keyboard/nspire-keypad.c
225 @@ -96,9 +96,15 @@ static irqreturn_t nspire_keypad_irq(int irq, void *dev_id)
226 return IRQ_HANDLED;
227 }
228
229 -static int nspire_keypad_chip_init(struct nspire_keypad *keypad)
230 +static int nspire_keypad_open(struct input_dev *input)
231 {
232 + struct nspire_keypad *keypad = input_get_drvdata(input);
233 unsigned long val = 0, cycles_per_us, delay_cycles, row_delay_cycles;
234 + int error;
235 +
236 + error = clk_prepare_enable(keypad->clk);
237 + if (error)
238 + return error;
239
240 cycles_per_us = (clk_get_rate(keypad->clk) / 1000000);
241 if (cycles_per_us == 0)
242 @@ -124,30 +130,6 @@ static int nspire_keypad_chip_init(struct nspire_keypad *keypad)
243 keypad->int_mask = 1 << 1;
244 writel(keypad->int_mask, keypad->reg_base + KEYPAD_INTMSK);
245
246 - /* Disable GPIO interrupts to prevent hanging on touchpad */
247 - /* Possibly used to detect touchpad events */
248 - writel(0, keypad->reg_base + KEYPAD_UNKNOWN_INT);
249 - /* Acknowledge existing interrupts */
250 - writel(~0, keypad->reg_base + KEYPAD_UNKNOWN_INT_STS);
251 -
252 - return 0;
253 -}
254 -
255 -static int nspire_keypad_open(struct input_dev *input)
256 -{
257 - struct nspire_keypad *keypad = input_get_drvdata(input);
258 - int error;
259 -
260 - error = clk_prepare_enable(keypad->clk);
261 - if (error)
262 - return error;
263 -
264 - error = nspire_keypad_chip_init(keypad);
265 - if (error) {
266 - clk_disable_unprepare(keypad->clk);
267 - return error;
268 - }
269 -
270 return 0;
271 }
272
273 @@ -155,6 +137,11 @@ static void nspire_keypad_close(struct input_dev *input)
274 {
275 struct nspire_keypad *keypad = input_get_drvdata(input);
276
277 + /* Disable interrupts */
278 + writel(0, keypad->reg_base + KEYPAD_INTMSK);
279 + /* Acknowledge existing interrupts */
280 + writel(~0, keypad->reg_base + KEYPAD_INT);
281 +
282 clk_disable_unprepare(keypad->clk);
283 }
284
285 @@ -215,6 +202,25 @@ static int nspire_keypad_probe(struct platform_device *pdev)
286 return -ENOMEM;
287 }
288
289 + error = clk_prepare_enable(keypad->clk);
290 + if (error) {
291 + dev_err(&pdev->dev, "failed to enable clock\n");
292 + return error;
293 + }
294 +
295 + /* Disable interrupts */
296 + writel(0, keypad->reg_base + KEYPAD_INTMSK);
297 + /* Acknowledge existing interrupts */
298 + writel(~0, keypad->reg_base + KEYPAD_INT);
299 +
300 + /* Disable GPIO interrupts to prevent hanging on touchpad */
301 + /* Possibly used to detect touchpad events */
302 + writel(0, keypad->reg_base + KEYPAD_UNKNOWN_INT);
303 + /* Acknowledge existing GPIO interrupts */
304 + writel(~0, keypad->reg_base + KEYPAD_UNKNOWN_INT_STS);
305 +
306 + clk_disable_unprepare(keypad->clk);
307 +
308 input_set_drvdata(input, keypad);
309
310 input->id.bustype = BUS_HOST;
311 diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
312 index ff0f3c3e2f804..3049bccf24227 100644
313 --- a/drivers/input/serio/i8042-x86ia64io.h
314 +++ b/drivers/input/serio/i8042-x86ia64io.h
315 @@ -579,6 +579,7 @@ static const struct dmi_system_id i8042_dmi_forcemux_table[] __initconst = {
316 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
317 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"),
318 },
319 + }, {
320 .matches = {
321 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
322 DMI_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible Notebook */
323 diff --git a/drivers/net/ethernet/amd/pcnet32.c b/drivers/net/ethernet/amd/pcnet32.c
324 index c22bf52d3320b..c3887ac3d04d5 100644
325 --- a/drivers/net/ethernet/amd/pcnet32.c
326 +++ b/drivers/net/ethernet/amd/pcnet32.c
327 @@ -1493,8 +1493,7 @@ pcnet32_probe_pci(struct pci_dev *pdev, const struct pci_device_id *ent)
328 }
329 pci_set_master(pdev);
330
331 - ioaddr = pci_resource_start(pdev, 0);
332 - if (!ioaddr) {
333 + if (!pci_resource_len(pdev, 0)) {
334 if (pcnet32_debug & NETIF_MSG_PROBE)
335 pr_err("card has no PCI IO resources, aborting\n");
336 return -ENODEV;
337 @@ -1506,6 +1505,8 @@ pcnet32_probe_pci(struct pci_dev *pdev, const struct pci_device_id *ent)
338 pr_err("architecture does not support 32bit PCI busmaster DMA\n");
339 return err;
340 }
341 +
342 + ioaddr = pci_resource_start(pdev, 0);
343 if (!request_region(ioaddr, PCNET32_TOTAL_SIZE, "pcnet32_probe_pci")) {
344 if (pcnet32_debug & NETIF_MSG_PROBE)
345 pr_err("io address range already allocated\n");
346 diff --git a/drivers/net/ethernet/cavium/liquidio/cn66xx_regs.h b/drivers/net/ethernet/cavium/liquidio/cn66xx_regs.h
347 index 5e3aff242ad38..3ab84d18ad3ac 100644
348 --- a/drivers/net/ethernet/cavium/liquidio/cn66xx_regs.h
349 +++ b/drivers/net/ethernet/cavium/liquidio/cn66xx_regs.h
350 @@ -417,7 +417,7 @@
351 | CN6XXX_INTR_M0UNWI_ERR \
352 | CN6XXX_INTR_M1UPB0_ERR \
353 | CN6XXX_INTR_M1UPWI_ERR \
354 - | CN6XXX_INTR_M1UPB0_ERR \
355 + | CN6XXX_INTR_M1UNB0_ERR \
356 | CN6XXX_INTR_M1UNWI_ERR \
357 | CN6XXX_INTR_INSTR_DB_OF_ERR \
358 | CN6XXX_INTR_SLIST_DB_OF_ERR \
359 diff --git a/drivers/net/ethernet/davicom/dm9000.c b/drivers/net/ethernet/davicom/dm9000.c
360 index f1e4cde963d8f..0fe4d89998230 100644
361 --- a/drivers/net/ethernet/davicom/dm9000.c
362 +++ b/drivers/net/ethernet/davicom/dm9000.c
363 @@ -1481,8 +1481,10 @@ dm9000_probe(struct platform_device *pdev)
364
365 /* Init network device */
366 ndev = alloc_etherdev(sizeof(struct board_info));
367 - if (!ndev)
368 - return -ENOMEM;
369 + if (!ndev) {
370 + ret = -ENOMEM;
371 + goto out_regulator_disable;
372 + }
373
374 SET_NETDEV_DEV(ndev, &pdev->dev);
375
376 diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
377 index 043b69b5843b0..40644657b1b74 100644
378 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
379 +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
380 @@ -8504,6 +8504,7 @@ static int i40e_sw_init(struct i40e_pf *pf)
381 {
382 int err = 0;
383 int size;
384 + u16 pow;
385
386 pf->msg_enable = netif_msg_init(I40E_DEFAULT_MSG_ENABLE,
387 (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK));
388 @@ -8531,6 +8532,11 @@ static int i40e_sw_init(struct i40e_pf *pf)
389 pf->rss_table_size = pf->hw.func_caps.rss_table_size;
390 pf->rss_size_max = min_t(int, pf->rss_size_max,
391 pf->hw.func_caps.num_tx_qp);
392 +
393 + /* find the next higher power-of-2 of num cpus */
394 + pow = roundup_pow_of_two(num_online_cpus());
395 + pf->rss_size_max = min_t(int, pf->rss_size_max, pow);
396 +
397 if (pf->hw.func_caps.rss) {
398 pf->flags |= I40E_FLAG_RSS_ENABLED;
399 pf->alloc_rss_size = min_t(int, pf->rss_size_max,
400 diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
401 index c4b4c2c347647..6ecccc737974c 100644
402 --- a/drivers/net/usb/hso.c
403 +++ b/drivers/net/usb/hso.c
404 @@ -626,7 +626,7 @@ static struct hso_serial *get_serial_by_index(unsigned index)
405 return serial;
406 }
407
408 -static int get_free_serial_index(void)
409 +static int obtain_minor(struct hso_serial *serial)
410 {
411 int index;
412 unsigned long flags;
413 @@ -634,8 +634,10 @@ static int get_free_serial_index(void)
414 spin_lock_irqsave(&serial_table_lock, flags);
415 for (index = 0; index < HSO_SERIAL_TTY_MINORS; index++) {
416 if (serial_table[index] == NULL) {
417 + serial_table[index] = serial->parent;
418 + serial->minor = index;
419 spin_unlock_irqrestore(&serial_table_lock, flags);
420 - return index;
421 + return 0;
422 }
423 }
424 spin_unlock_irqrestore(&serial_table_lock, flags);
425 @@ -644,15 +646,12 @@ static int get_free_serial_index(void)
426 return -1;
427 }
428
429 -static void set_serial_by_index(unsigned index, struct hso_serial *serial)
430 +static void release_minor(struct hso_serial *serial)
431 {
432 unsigned long flags;
433
434 spin_lock_irqsave(&serial_table_lock, flags);
435 - if (serial)
436 - serial_table[index] = serial->parent;
437 - else
438 - serial_table[index] = NULL;
439 + serial_table[serial->minor] = NULL;
440 spin_unlock_irqrestore(&serial_table_lock, flags);
441 }
442
443 @@ -2243,6 +2242,7 @@ static int hso_stop_serial_device(struct hso_device *hso_dev)
444 static void hso_serial_tty_unregister(struct hso_serial *serial)
445 {
446 tty_unregister_device(tty_drv, serial->minor);
447 + release_minor(serial);
448 }
449
450 static void hso_serial_common_free(struct hso_serial *serial)
451 @@ -2267,25 +2267,23 @@ static int hso_serial_common_create(struct hso_serial *serial, int num_urbs,
452 int rx_size, int tx_size)
453 {
454 struct device *dev;
455 - int minor;
456 int i;
457
458 tty_port_init(&serial->port);
459
460 - minor = get_free_serial_index();
461 - if (minor < 0)
462 + if (obtain_minor(serial))
463 goto exit2;
464
465 /* register our minor number */
466 serial->parent->dev = tty_port_register_device_attr(&serial->port,
467 - tty_drv, minor, &serial->parent->interface->dev,
468 + tty_drv, serial->minor, &serial->parent->interface->dev,
469 serial->parent, hso_serial_dev_groups);
470 - if (IS_ERR(serial->parent->dev))
471 + if (IS_ERR(serial->parent->dev)) {
472 + release_minor(serial);
473 goto exit2;
474 + }
475 dev = serial->parent->dev;
476
477 - /* fill in specific data for later use */
478 - serial->minor = minor;
479 serial->magic = HSO_SERIAL_MAGIC;
480 spin_lock_init(&serial->serial_lock);
481 serial->num_rx_urbs = num_urbs;
482 @@ -2678,9 +2676,6 @@ static struct hso_device *hso_create_bulk_serial_device(
483
484 serial->write_data = hso_std_serial_write_data;
485
486 - /* and record this serial */
487 - set_serial_by_index(serial->minor, serial);
488 -
489 /* setup the proc dirs and files if needed */
490 hso_log_port(hso_dev);
491
492 @@ -2737,9 +2732,6 @@ struct hso_device *hso_create_mux_serial_device(struct usb_interface *interface,
493 serial->shared_int->ref_count++;
494 mutex_unlock(&serial->shared_int->shared_int_lock);
495
496 - /* and record this serial */
497 - set_serial_by_index(serial->minor, serial);
498 -
499 /* setup the proc dirs and files if needed */
500 hso_log_port(hso_dev);
501
502 @@ -3123,8 +3115,7 @@ static void hso_free_interface(struct usb_interface *interface)
503 cancel_work_sync(&serial_table[i]->async_put_intf);
504 cancel_work_sync(&serial_table[i]->async_get_intf);
505 hso_serial_tty_unregister(serial);
506 - kref_put(&serial_table[i]->ref, hso_serial_ref_free);
507 - set_serial_by_index(i, NULL);
508 + kref_put(&serial->parent->ref, hso_serial_ref_free);
509 }
510 }
511
512 diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c
513 index 78788402edd8b..e6646c8a7bdbb 100644
514 --- a/drivers/net/xen-netback/xenbus.c
515 +++ b/drivers/net/xen-netback/xenbus.c
516 @@ -1040,11 +1040,15 @@ static void connect(struct backend_info *be)
517 xenvif_carrier_on(be->vif);
518
519 unregister_hotplug_status_watch(be);
520 - err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch, NULL,
521 - hotplug_status_changed,
522 - "%s/%s", dev->nodename, "hotplug-status");
523 - if (!err)
524 + if (xenbus_exists(XBT_NIL, dev->nodename, "hotplug-status")) {
525 + err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch,
526 + NULL, hotplug_status_changed,
527 + "%s/%s", dev->nodename,
528 + "hotplug-status");
529 + if (err)
530 + goto err;
531 be->have_hotplug_status_watch = 1;
532 + }
533
534 netif_tx_wake_all_queues(be->vif->dev);
535
536 diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
537 index b820c3a022eac..8800ff615bdd4 100644
538 --- a/drivers/scsi/libsas/sas_ata.c
539 +++ b/drivers/scsi/libsas/sas_ata.c
540 @@ -219,18 +219,17 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
541 memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len);
542 task->total_xfer_len = qc->nbytes;
543 task->num_scatter = qc->n_elem;
544 + task->data_dir = qc->dma_dir;
545 + } else if (qc->tf.protocol == ATA_PROT_NODATA) {
546 + task->data_dir = DMA_NONE;
547 } else {
548 for_each_sg(qc->sg, sg, qc->n_elem, si)
549 xfer += sg_dma_len(sg);
550
551 task->total_xfer_len = xfer;
552 task->num_scatter = si;
553 - }
554 -
555 - if (qc->tf.protocol == ATA_PROT_NODATA)
556 - task->data_dir = DMA_NONE;
557 - else
558 task->data_dir = qc->dma_dir;
559 + }
560 task->scatter = qc->sg;
561 task->ata_task.retry_count = 1;
562 task->task_state_flags = SAS_TASK_STATE_PENDING;
563 diff --git a/drivers/usb/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c
564 index 6b643e6c8f0bd..cec5805feb254 100644
565 --- a/drivers/usb/usbip/stub_dev.c
566 +++ b/drivers/usb/usbip/stub_dev.c
567 @@ -77,6 +77,7 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
568
569 dev_info(dev, "stub up\n");
570
571 + mutex_lock(&sdev->ud.sysfs_lock);
572 spin_lock_irq(&sdev->ud.lock);
573
574 if (sdev->ud.status != SDEV_ST_AVAILABLE) {
575 @@ -101,13 +102,13 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
576 tcp_rx = kthread_create(stub_rx_loop, &sdev->ud, "stub_rx");
577 if (IS_ERR(tcp_rx)) {
578 sockfd_put(socket);
579 - return -EINVAL;
580 + goto unlock_mutex;
581 }
582 tcp_tx = kthread_create(stub_tx_loop, &sdev->ud, "stub_tx");
583 if (IS_ERR(tcp_tx)) {
584 kthread_stop(tcp_rx);
585 sockfd_put(socket);
586 - return -EINVAL;
587 + goto unlock_mutex;
588 }
589
590 /* get task structs now */
591 @@ -126,6 +127,8 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
592 wake_up_process(sdev->ud.tcp_rx);
593 wake_up_process(sdev->ud.tcp_tx);
594
595 + mutex_unlock(&sdev->ud.sysfs_lock);
596 +
597 } else {
598 dev_info(dev, "stub down\n");
599
600 @@ -136,6 +139,7 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
601 spin_unlock_irq(&sdev->ud.lock);
602
603 usbip_event_add(&sdev->ud, SDEV_EVENT_DOWN);
604 + mutex_unlock(&sdev->ud.sysfs_lock);
605 }
606
607 return count;
608 @@ -144,6 +148,8 @@ sock_err:
609 sockfd_put(socket);
610 err:
611 spin_unlock_irq(&sdev->ud.lock);
612 +unlock_mutex:
613 + mutex_unlock(&sdev->ud.sysfs_lock);
614 return -EINVAL;
615 }
616 static DEVICE_ATTR(usbip_sockfd, S_IWUSR, NULL, store_sockfd);
617 @@ -309,6 +315,7 @@ static struct stub_device *stub_device_alloc(struct usb_device *udev)
618 sdev->ud.side = USBIP_STUB;
619 sdev->ud.status = SDEV_ST_AVAILABLE;
620 spin_lock_init(&sdev->ud.lock);
621 + mutex_init(&sdev->ud.sysfs_lock);
622 sdev->ud.tcp_socket = NULL;
623 sdev->ud.sockfd = -1;
624
625 diff --git a/drivers/usb/usbip/usbip_common.h b/drivers/usb/usbip/usbip_common.h
626 index 0b199a2664c00..3d47c681aea2f 100644
627 --- a/drivers/usb/usbip/usbip_common.h
628 +++ b/drivers/usb/usbip/usbip_common.h
629 @@ -278,6 +278,9 @@ struct usbip_device {
630 /* lock for status */
631 spinlock_t lock;
632
633 + /* mutex for synchronizing sysfs store paths */
634 + struct mutex sysfs_lock;
635 +
636 int sockfd;
637 struct socket *tcp_socket;
638
639 diff --git a/drivers/usb/usbip/usbip_event.c b/drivers/usb/usbip/usbip_event.c
640 index f8f7f3803a99c..01eaae1f265b2 100644
641 --- a/drivers/usb/usbip/usbip_event.c
642 +++ b/drivers/usb/usbip/usbip_event.c
643 @@ -84,6 +84,7 @@ static void event_handler(struct work_struct *work)
644 while ((ud = get_event()) != NULL) {
645 usbip_dbg_eh("pending event %lx\n", ud->event);
646
647 + mutex_lock(&ud->sysfs_lock);
648 /*
649 * NOTE: shutdown must come first.
650 * Shutdown the device.
651 @@ -104,6 +105,7 @@ static void event_handler(struct work_struct *work)
652 ud->eh_ops.unusable(ud);
653 unset_event(ud, USBIP_EH_UNUSABLE);
654 }
655 + mutex_unlock(&ud->sysfs_lock);
656
657 wake_up(&ud->eh_waitq);
658 }
659 diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
660 index 8bda6455dfcb2..fb7b03029b8e6 100644
661 --- a/drivers/usb/usbip/vhci_hcd.c
662 +++ b/drivers/usb/usbip/vhci_hcd.c
663 @@ -907,6 +907,7 @@ static void vhci_device_init(struct vhci_device *vdev)
664 vdev->ud.side = USBIP_VHCI;
665 vdev->ud.status = VDEV_ST_NULL;
666 spin_lock_init(&vdev->ud.lock);
667 + mutex_init(&vdev->ud.sysfs_lock);
668
669 INIT_LIST_HEAD(&vdev->priv_rx);
670 INIT_LIST_HEAD(&vdev->priv_tx);
671 diff --git a/drivers/usb/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c
672 index ca00d38d22afd..3496b402aa1b7 100644
673 --- a/drivers/usb/usbip/vhci_sysfs.c
674 +++ b/drivers/usb/usbip/vhci_sysfs.c
675 @@ -161,6 +161,8 @@ static int vhci_port_disconnect(struct vhci_hcd *vhci, __u32 rhport)
676
677 usbip_dbg_vhci_sysfs("enter\n");
678
679 + mutex_lock(&vdev->ud.sysfs_lock);
680 +
681 /* lock */
682 spin_lock_irqsave(&vhci->lock, flags);
683 spin_lock(&vdev->ud.lock);
684 @@ -171,6 +173,7 @@ static int vhci_port_disconnect(struct vhci_hcd *vhci, __u32 rhport)
685 /* unlock */
686 spin_unlock(&vdev->ud.lock);
687 spin_unlock_irqrestore(&vhci->lock, flags);
688 + mutex_unlock(&vdev->ud.sysfs_lock);
689
690 return -EINVAL;
691 }
692 @@ -181,6 +184,8 @@ static int vhci_port_disconnect(struct vhci_hcd *vhci, __u32 rhport)
693
694 usbip_event_add(&vdev->ud, VDEV_EVENT_DOWN);
695
696 + mutex_unlock(&vdev->ud.sysfs_lock);
697 +
698 return 0;
699 }
700
701 @@ -309,30 +314,36 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,
702 vhci = hcd_to_vhci(hcd);
703 vdev = &vhci->vdev[rhport];
704
705 + mutex_lock(&vdev->ud.sysfs_lock);
706 +
707 /* Extract socket from fd. */
708 socket = sockfd_lookup(sockfd, &err);
709 if (!socket) {
710 dev_err(dev, "failed to lookup sock");
711 - return -EINVAL;
712 + err = -EINVAL;
713 + goto unlock_mutex;
714 }
715 if (socket->type != SOCK_STREAM) {
716 dev_err(dev, "Expecting SOCK_STREAM - found %d",
717 socket->type);
718 sockfd_put(socket);
719 - return -EINVAL;
720 + err = -EINVAL;
721 + goto unlock_mutex;
722 }
723
724 /* create threads before locking */
725 tcp_rx = kthread_create(vhci_rx_loop, &vdev->ud, "vhci_rx");
726 if (IS_ERR(tcp_rx)) {
727 sockfd_put(socket);
728 - return -EINVAL;
729 + err = -EINVAL;
730 + goto unlock_mutex;
731 }
732 tcp_tx = kthread_create(vhci_tx_loop, &vdev->ud, "vhci_tx");
733 if (IS_ERR(tcp_tx)) {
734 kthread_stop(tcp_rx);
735 sockfd_put(socket);
736 - return -EINVAL;
737 + err = -EINVAL;
738 + goto unlock_mutex;
739 }
740
741 /* get task structs now */
742 @@ -353,7 +364,8 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,
743 kthread_stop_put(tcp_tx);
744
745 dev_err(dev, "port %d already used\n", rhport);
746 - return -EINVAL;
747 + err = -EINVAL;
748 + goto unlock_mutex;
749 }
750
751 dev_info(dev, "pdev(%u) rhport(%u) sockfd(%d)\n",
752 @@ -378,7 +390,15 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,
753
754 rh_port_connect(vdev, speed);
755
756 + dev_info(dev, "Device attached\n");
757 +
758 + mutex_unlock(&vdev->ud.sysfs_lock);
759 +
760 return count;
761 +
762 +unlock_mutex:
763 + mutex_unlock(&vdev->ud.sysfs_lock);
764 + return err;
765 }
766 static DEVICE_ATTR(attach, S_IWUSR, NULL, store_attach);
767
768 diff --git a/drivers/usb/usbip/vudc_dev.c b/drivers/usb/usbip/vudc_dev.c
769 index 7091848df6c8b..d61b22bb1d8bb 100644
770 --- a/drivers/usb/usbip/vudc_dev.c
771 +++ b/drivers/usb/usbip/vudc_dev.c
772 @@ -582,6 +582,7 @@ static int init_vudc_hw(struct vudc *udc)
773 init_waitqueue_head(&udc->tx_waitq);
774
775 spin_lock_init(&ud->lock);
776 + mutex_init(&ud->sysfs_lock);
777 ud->status = SDEV_ST_AVAILABLE;
778 ud->side = USBIP_VUDC;
779
780 diff --git a/drivers/usb/usbip/vudc_sysfs.c b/drivers/usb/usbip/vudc_sysfs.c
781 index f44d98eeb36ac..0a4482ced945e 100644
782 --- a/drivers/usb/usbip/vudc_sysfs.c
783 +++ b/drivers/usb/usbip/vudc_sysfs.c
784 @@ -125,6 +125,7 @@ static ssize_t store_sockfd(struct device *dev,
785 dev_err(dev, "no device");
786 return -ENODEV;
787 }
788 + mutex_lock(&udc->ud.sysfs_lock);
789 spin_lock_irqsave(&udc->lock, flags);
790 /* Don't export what we don't have */
791 if (!udc->driver || !udc->pullup) {
792 @@ -187,7 +188,7 @@ static ssize_t store_sockfd(struct device *dev,
793
794 udc->ud.tcp_socket = socket;
795 udc->ud.tcp_rx = tcp_rx;
796 - udc->ud.tcp_rx = tcp_tx;
797 + udc->ud.tcp_tx = tcp_tx;
798 udc->ud.status = SDEV_ST_USED;
799
800 spin_unlock_irq(&udc->ud.lock);
801 @@ -200,6 +201,8 @@ static ssize_t store_sockfd(struct device *dev,
802
803 wake_up_process(udc->ud.tcp_rx);
804 wake_up_process(udc->ud.tcp_tx);
805 +
806 + mutex_unlock(&udc->ud.sysfs_lock);
807 return count;
808
809 } else {
810 @@ -220,6 +223,7 @@ static ssize_t store_sockfd(struct device *dev,
811 }
812
813 spin_unlock_irqrestore(&udc->lock, flags);
814 + mutex_unlock(&udc->ud.sysfs_lock);
815
816 return count;
817
818 @@ -229,6 +233,7 @@ unlock_ud:
819 spin_unlock_irq(&udc->ud.lock);
820 unlock:
821 spin_unlock_irqrestore(&udc->lock, flags);
822 + mutex_unlock(&udc->ud.sysfs_lock);
823
824 return ret;
825 }
826 diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
827 index bbda3ea7039f3..4d9901a18b975 100644
828 --- a/fs/ext4/namei.c
829 +++ b/fs/ext4/namei.c
830 @@ -3621,7 +3621,7 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
831 ext4_encrypted_inode(new.dir) &&
832 !fscrypt_has_permitted_context(new.dir, old.inode)) {
833 retval = -EXDEV;
834 - goto end_rename;
835 + goto release_bh;
836 }
837
838 new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
839 diff --git a/net/core/neighbour.c b/net/core/neighbour.c
840 index d267dc04d9f74..2aa5c231560d2 100644
841 --- a/net/core/neighbour.c
842 +++ b/net/core/neighbour.c
843 @@ -1230,7 +1230,7 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
844 * we can reinject the packet there.
845 */
846 n2 = NULL;
847 - if (dst) {
848 + if (dst && dst->obsolete != DST_OBSOLETE_DEAD) {
849 n2 = dst_neigh_lookup_skb(dst, skb);
850 if (n2)
851 n1 = n2;
852 diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
853 index f07a208ae21fe..cfc01314958f7 100644
854 --- a/net/ieee802154/nl802154.c
855 +++ b/net/ieee802154/nl802154.c
856 @@ -1531,6 +1531,11 @@ nl802154_dump_llsec_key(struct sk_buff *skb, struct netlink_callback *cb)
857 if (err)
858 return err;
859
860 + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) {
861 + err = skb->len;
862 + goto out_err;
863 + }
864 +
865 if (!wpan_dev->netdev) {
866 err = -EINVAL;
867 goto out_err;
868 @@ -1703,6 +1708,11 @@ nl802154_dump_llsec_dev(struct sk_buff *skb, struct netlink_callback *cb)
869 if (err)
870 return err;
871
872 + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) {
873 + err = skb->len;
874 + goto out_err;
875 + }
876 +
877 if (!wpan_dev->netdev) {
878 err = -EINVAL;
879 goto out_err;
880 @@ -1790,6 +1800,9 @@ static int nl802154_add_llsec_dev(struct sk_buff *skb, struct genl_info *info)
881 struct wpan_dev *wpan_dev = dev->ieee802154_ptr;
882 struct ieee802154_llsec_device dev_desc;
883
884 + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
885 + return -EOPNOTSUPP;
886 +
887 if (ieee802154_llsec_parse_device(info->attrs[NL802154_ATTR_SEC_DEVICE],
888 &dev_desc) < 0)
889 return -EINVAL;
890 @@ -1876,6 +1889,11 @@ nl802154_dump_llsec_devkey(struct sk_buff *skb, struct netlink_callback *cb)
891 if (err)
892 return err;
893
894 + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) {
895 + err = skb->len;
896 + goto out_err;
897 + }
898 +
899 if (!wpan_dev->netdev) {
900 err = -EINVAL;
901 goto out_err;
902 @@ -1933,6 +1951,9 @@ static int nl802154_add_llsec_devkey(struct sk_buff *skb, struct genl_info *info
903 struct ieee802154_llsec_device_key key;
904 __le64 extended_addr;
905
906 + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
907 + return -EOPNOTSUPP;
908 +
909 if (!info->attrs[NL802154_ATTR_SEC_DEVKEY] ||
910 nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX,
911 info->attrs[NL802154_ATTR_SEC_DEVKEY],
912 @@ -2042,6 +2063,11 @@ nl802154_dump_llsec_seclevel(struct sk_buff *skb, struct netlink_callback *cb)
913 if (err)
914 return err;
915
916 + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) {
917 + err = skb->len;
918 + goto out_err;
919 + }
920 +
921 if (!wpan_dev->netdev) {
922 err = -EINVAL;
923 goto out_err;
924 @@ -2127,6 +2153,9 @@ static int nl802154_add_llsec_seclevel(struct sk_buff *skb,
925 struct wpan_dev *wpan_dev = dev->ieee802154_ptr;
926 struct ieee802154_llsec_seclevel sl;
927
928 + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
929 + return -EOPNOTSUPP;
930 +
931 if (llsec_parse_seclevel(info->attrs[NL802154_ATTR_SEC_LEVEL],
932 &sl) < 0)
933 return -EINVAL;
934 diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
935 index a4a5863e482cd..157358a15d599 100644
936 --- a/net/ipv6/sit.c
937 +++ b/net/ipv6/sit.c
938 @@ -1799,9 +1799,9 @@ static void __net_exit sit_destroy_tunnels(struct net *net,
939 if (dev->rtnl_link_ops == &sit_link_ops)
940 unregister_netdevice_queue(dev, head);
941
942 - for (prio = 1; prio < 4; prio++) {
943 + for (prio = 0; prio < 4; prio++) {
944 int h;
945 - for (h = 0; h < IP6_SIT_HASH_SIZE; h++) {
946 + for (h = 0; h < (prio ? IP6_SIT_HASH_SIZE : 1); h++) {
947 struct ip_tunnel *t;
948
949 t = rtnl_dereference(sitn->tunnels[prio][h]);
950 diff --git a/net/sctp/socket.c b/net/sctp/socket.c
951 index c0fe647dd4acb..029ec12c77bd7 100644
952 --- a/net/sctp/socket.c
953 +++ b/net/sctp/socket.c
954 @@ -1582,11 +1582,9 @@ static void sctp_close(struct sock *sk, long timeout)
955
956 /* Supposedly, no process has access to the socket, but
957 * the net layers still may.
958 - * Also, sctp_destroy_sock() needs to be called with addr_wq_lock
959 - * held and that should be grabbed before socket lock.
960 */
961 - spin_lock_bh(&net->sctp.addr_wq_lock);
962 - bh_lock_sock_nested(sk);
963 + local_bh_disable();
964 + bh_lock_sock(sk);
965
966 /* Hold the sock, since sk_common_release() will put sock_put()
967 * and we have just a little more cleanup.
968 @@ -1595,7 +1593,7 @@ static void sctp_close(struct sock *sk, long timeout)
969 sk_common_release(sk);
970
971 bh_unlock_sock(sk);
972 - spin_unlock_bh(&net->sctp.addr_wq_lock);
973 + local_bh_enable();
974
975 sock_put(sk);
976
977 @@ -4262,9 +4260,6 @@ static int sctp_init_sock(struct sock *sk)
978 sk_sockets_allocated_inc(sk);
979 sock_prot_inuse_add(net, sk->sk_prot, 1);
980
981 - /* Nothing can fail after this block, otherwise
982 - * sctp_destroy_sock() will be called without addr_wq_lock held
983 - */
984 if (net->sctp.default_auto_asconf) {
985 spin_lock(&sock_net(sk)->sctp.addr_wq_lock);
986 list_add_tail(&sp->auto_asconf_list,
987 @@ -4299,7 +4294,9 @@ static void sctp_destroy_sock(struct sock *sk)
988
989 if (sp->do_auto_asconf) {
990 sp->do_auto_asconf = 0;
991 + spin_lock_bh(&sock_net(sk)->sctp.addr_wq_lock);
992 list_del(&sp->auto_asconf_list);
993 + spin_unlock_bh(&sock_net(sk)->sctp.addr_wq_lock);
994 }
995 sctp_endpoint_free(sp->ep);
996 local_bh_disable();
997 diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
998 index fa64cc2b1729f..94bf497092b20 100644
999 --- a/sound/soc/fsl/fsl_esai.c
1000 +++ b/sound/soc/fsl/fsl_esai.c
1001 @@ -495,11 +495,13 @@ static int fsl_esai_startup(struct snd_pcm_substream *substream,
1002 ESAI_SAICR_SYNC, esai_priv->synchronous ?
1003 ESAI_SAICR_SYNC : 0);
1004
1005 - /* Set a default slot number -- 2 */
1006 + /* Set slots count */
1007 regmap_update_bits(esai_priv->regmap, REG_ESAI_TCCR,
1008 - ESAI_xCCR_xDC_MASK, ESAI_xCCR_xDC(2));
1009 + ESAI_xCCR_xDC_MASK,
1010 + ESAI_xCCR_xDC(esai_priv->slots));
1011 regmap_update_bits(esai_priv->regmap, REG_ESAI_RCCR,
1012 - ESAI_xCCR_xDC_MASK, ESAI_xCCR_xDC(2));
1013 + ESAI_xCCR_xDC_MASK,
1014 + ESAI_xCCR_xDC(esai_priv->slots));
1015 }
1016
1017 return 0;
1018 diff --git a/tools/arch/ia64/include/asm/barrier.h b/tools/arch/ia64/include/asm/barrier.h
1019 index e4422b4b634e6..94ae4a333a35f 100644
1020 --- a/tools/arch/ia64/include/asm/barrier.h
1021 +++ b/tools/arch/ia64/include/asm/barrier.h
1022 @@ -38,9 +38,6 @@
1023 * sequential memory pages only.
1024 */
1025
1026 -/* XXX From arch/ia64/include/uapi/asm/gcc_intrin.h */
1027 -#define ia64_mf() asm volatile ("mf" ::: "memory")
1028 -
1029 #define mb() ia64_mf()
1030 #define rmb() mb()
1031 #define wmb() mb()