Contents of /trunk/kernel-alx-legacy/patches-4.9/0367-4.9.268-all-fixes.patch
Parent Directory | Revision Log
Revision 3669 -
(show annotations)
(download)
Mon Oct 24 14:07:46 2022 UTC (23 months ago) by niro
File size: 33024 byte(s)
Mon Oct 24 14:07:46 2022 UTC (23 months 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() |