Magellan Linux

Annotation 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 - (hide annotations) (download)
Mon Oct 24 14:07:46 2022 UTC (19 months, 1 week ago) by niro
File size: 33024 byte(s)
-linux-4.9.268
1 niro 3669 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()