Annotation of /trunk/kernel-alx/patches-3.14/0114-3.14.15-all-fixes.patch
Parent Directory | Revision Log
Revision 2506 -
(hide annotations)
(download)
Fri Oct 17 07:55:45 2014 UTC (9 years, 11 months ago) by niro
File size: 28288 byte(s)
Fri Oct 17 07:55:45 2014 UTC (9 years, 11 months ago) by niro
File size: 28288 byte(s)
-patches for 3.14
1 | niro | 2506 | diff --git a/Makefile b/Makefile |
2 | index 230c7f694ab7..188523e9e880 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 3 | ||
7 | PATCHLEVEL = 14 | ||
8 | -SUBLEVEL = 14 | ||
9 | +SUBLEVEL = 15 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Remembering Coco | ||
12 | |||
13 | @@ -639,6 +639,8 @@ KBUILD_CFLAGS += -fomit-frame-pointer | ||
14 | endif | ||
15 | endif | ||
16 | |||
17 | +KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments) | ||
18 | + | ||
19 | ifdef CONFIG_DEBUG_INFO | ||
20 | KBUILD_CFLAGS += -g | ||
21 | KBUILD_AFLAGS += -Wa,--gdwarf-2 | ||
22 | diff --git a/arch/parisc/include/uapi/asm/signal.h b/arch/parisc/include/uapi/asm/signal.h | ||
23 | index a2fa297196bc..f5645d6a89f2 100644 | ||
24 | --- a/arch/parisc/include/uapi/asm/signal.h | ||
25 | +++ b/arch/parisc/include/uapi/asm/signal.h | ||
26 | @@ -69,8 +69,6 @@ | ||
27 | #define SA_NOMASK SA_NODEFER | ||
28 | #define SA_ONESHOT SA_RESETHAND | ||
29 | |||
30 | -#define SA_RESTORER 0x04000000 /* obsolete -- ignored */ | ||
31 | - | ||
32 | #define MINSIGSTKSZ 2048 | ||
33 | #define SIGSTKSZ 8192 | ||
34 | |||
35 | diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c | ||
36 | index a48bc79a111f..184d305af3e7 100644 | ||
37 | --- a/arch/s390/kernel/ptrace.c | ||
38 | +++ b/arch/s390/kernel/ptrace.c | ||
39 | @@ -323,9 +323,14 @@ static int __poke_user(struct task_struct *child, addr_t addr, addr_t data) | ||
40 | unsigned long mask = PSW_MASK_USER; | ||
41 | |||
42 | mask |= is_ri_task(child) ? PSW_MASK_RI : 0; | ||
43 | - if ((data & ~mask) != PSW_USER_BITS) | ||
44 | + if ((data ^ PSW_USER_BITS) & ~mask) | ||
45 | + /* Invalid psw mask. */ | ||
46 | + return -EINVAL; | ||
47 | + if ((data & PSW_MASK_ASC) == PSW_ASC_HOME) | ||
48 | + /* Invalid address-space-control bits */ | ||
49 | return -EINVAL; | ||
50 | if ((data & PSW_MASK_EA) && !(data & PSW_MASK_BA)) | ||
51 | + /* Invalid addressing mode bits */ | ||
52 | return -EINVAL; | ||
53 | } | ||
54 | *(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr) = data; | ||
55 | @@ -661,9 +666,12 @@ static int __poke_user_compat(struct task_struct *child, | ||
56 | |||
57 | mask |= is_ri_task(child) ? PSW32_MASK_RI : 0; | ||
58 | /* Build a 64 bit psw mask from 31 bit mask. */ | ||
59 | - if ((tmp & ~mask) != PSW32_USER_BITS) | ||
60 | + if ((tmp ^ PSW32_USER_BITS) & ~mask) | ||
61 | /* Invalid psw mask. */ | ||
62 | return -EINVAL; | ||
63 | + if ((data & PSW32_MASK_ASC) == PSW32_ASC_HOME) | ||
64 | + /* Invalid address-space-control bits */ | ||
65 | + return -EINVAL; | ||
66 | regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) | | ||
67 | (regs->psw.mask & PSW_MASK_BA) | | ||
68 | (__u64)(tmp & mask) << 32; | ||
69 | diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S | ||
70 | index ec3b8ba68096..04da6c2194ba 100644 | ||
71 | --- a/arch/x86/boot/header.S | ||
72 | +++ b/arch/x86/boot/header.S | ||
73 | @@ -91,10 +91,9 @@ bs_die: | ||
74 | |||
75 | .section ".bsdata", "a" | ||
76 | bugger_off_msg: | ||
77 | - .ascii "Direct floppy boot is not supported. " | ||
78 | - .ascii "Use a boot loader program instead.\r\n" | ||
79 | + .ascii "Use a boot loader.\r\n" | ||
80 | .ascii "\n" | ||
81 | - .ascii "Remove disk and press any key to reboot ...\r\n" | ||
82 | + .ascii "Remove disk and press any key to reboot...\r\n" | ||
83 | .byte 0 | ||
84 | |||
85 | #ifdef CONFIG_EFI_STUB | ||
86 | @@ -108,7 +107,7 @@ coff_header: | ||
87 | #else | ||
88 | .word 0x8664 # x86-64 | ||
89 | #endif | ||
90 | - .word 3 # nr_sections | ||
91 | + .word 4 # nr_sections | ||
92 | .long 0 # TimeDateStamp | ||
93 | .long 0 # PointerToSymbolTable | ||
94 | .long 1 # NumberOfSymbols | ||
95 | @@ -250,6 +249,25 @@ section_table: | ||
96 | .word 0 # NumberOfLineNumbers | ||
97 | .long 0x60500020 # Characteristics (section flags) | ||
98 | |||
99 | + # | ||
100 | + # The offset & size fields are filled in by build.c. | ||
101 | + # | ||
102 | + .ascii ".bss" | ||
103 | + .byte 0 | ||
104 | + .byte 0 | ||
105 | + .byte 0 | ||
106 | + .byte 0 | ||
107 | + .long 0 | ||
108 | + .long 0x0 | ||
109 | + .long 0 # Size of initialized data | ||
110 | + # on disk | ||
111 | + .long 0x0 | ||
112 | + .long 0 # PointerToRelocations | ||
113 | + .long 0 # PointerToLineNumbers | ||
114 | + .word 0 # NumberOfRelocations | ||
115 | + .word 0 # NumberOfLineNumbers | ||
116 | + .long 0xc8000080 # Characteristics (section flags) | ||
117 | + | ||
118 | #endif /* CONFIG_EFI_STUB */ | ||
119 | |||
120 | # Kernel attributes; used by setup. This is part 1 of the | ||
121 | diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c | ||
122 | index 8e15b22391fc..3dafaeb9f549 100644 | ||
123 | --- a/arch/x86/boot/tools/build.c | ||
124 | +++ b/arch/x86/boot/tools/build.c | ||
125 | @@ -142,7 +142,7 @@ static void usage(void) | ||
126 | |||
127 | #ifdef CONFIG_EFI_STUB | ||
128 | |||
129 | -static void update_pecoff_section_header(char *section_name, u32 offset, u32 size) | ||
130 | +static void update_pecoff_section_header_fields(char *section_name, u32 vma, u32 size, u32 datasz, u32 offset) | ||
131 | { | ||
132 | unsigned int pe_header; | ||
133 | unsigned short num_sections; | ||
134 | @@ -163,10 +163,10 @@ static void update_pecoff_section_header(char *section_name, u32 offset, u32 siz | ||
135 | put_unaligned_le32(size, section + 0x8); | ||
136 | |||
137 | /* section header vma field */ | ||
138 | - put_unaligned_le32(offset, section + 0xc); | ||
139 | + put_unaligned_le32(vma, section + 0xc); | ||
140 | |||
141 | /* section header 'size of initialised data' field */ | ||
142 | - put_unaligned_le32(size, section + 0x10); | ||
143 | + put_unaligned_le32(datasz, section + 0x10); | ||
144 | |||
145 | /* section header 'file offset' field */ | ||
146 | put_unaligned_le32(offset, section + 0x14); | ||
147 | @@ -178,6 +178,11 @@ static void update_pecoff_section_header(char *section_name, u32 offset, u32 siz | ||
148 | } | ||
149 | } | ||
150 | |||
151 | +static void update_pecoff_section_header(char *section_name, u32 offset, u32 size) | ||
152 | +{ | ||
153 | + update_pecoff_section_header_fields(section_name, offset, size, size, offset); | ||
154 | +} | ||
155 | + | ||
156 | static void update_pecoff_setup_and_reloc(unsigned int size) | ||
157 | { | ||
158 | u32 setup_offset = 0x200; | ||
159 | @@ -202,9 +207,6 @@ static void update_pecoff_text(unsigned int text_start, unsigned int file_sz) | ||
160 | |||
161 | pe_header = get_unaligned_le32(&buf[0x3c]); | ||
162 | |||
163 | - /* Size of image */ | ||
164 | - put_unaligned_le32(file_sz, &buf[pe_header + 0x50]); | ||
165 | - | ||
166 | /* | ||
167 | * Size of code: Subtract the size of the first sector (512 bytes) | ||
168 | * which includes the header. | ||
169 | @@ -219,6 +221,22 @@ static void update_pecoff_text(unsigned int text_start, unsigned int file_sz) | ||
170 | update_pecoff_section_header(".text", text_start, text_sz); | ||
171 | } | ||
172 | |||
173 | +static void update_pecoff_bss(unsigned int file_sz, unsigned int init_sz) | ||
174 | +{ | ||
175 | + unsigned int pe_header; | ||
176 | + unsigned int bss_sz = init_sz - file_sz; | ||
177 | + | ||
178 | + pe_header = get_unaligned_le32(&buf[0x3c]); | ||
179 | + | ||
180 | + /* Size of uninitialized data */ | ||
181 | + put_unaligned_le32(bss_sz, &buf[pe_header + 0x24]); | ||
182 | + | ||
183 | + /* Size of image */ | ||
184 | + put_unaligned_le32(init_sz, &buf[pe_header + 0x50]); | ||
185 | + | ||
186 | + update_pecoff_section_header_fields(".bss", file_sz, bss_sz, 0, 0); | ||
187 | +} | ||
188 | + | ||
189 | #endif /* CONFIG_EFI_STUB */ | ||
190 | |||
191 | |||
192 | @@ -270,6 +288,9 @@ int main(int argc, char ** argv) | ||
193 | int fd; | ||
194 | void *kernel; | ||
195 | u32 crc = 0xffffffffUL; | ||
196 | +#ifdef CONFIG_EFI_STUB | ||
197 | + unsigned int init_sz; | ||
198 | +#endif | ||
199 | |||
200 | /* Defaults for old kernel */ | ||
201 | #ifdef CONFIG_X86_32 | ||
202 | @@ -343,7 +364,9 @@ int main(int argc, char ** argv) | ||
203 | put_unaligned_le32(sys_size, &buf[0x1f4]); | ||
204 | |||
205 | #ifdef CONFIG_EFI_STUB | ||
206 | - update_pecoff_text(setup_sectors * 512, sz + i + ((sys_size * 16) - sz)); | ||
207 | + update_pecoff_text(setup_sectors * 512, i + (sys_size * 16)); | ||
208 | + init_sz = get_unaligned_le32(&buf[0x260]); | ||
209 | + update_pecoff_bss(i + (sys_size * 16), init_sz); | ||
210 | |||
211 | #ifdef CONFIG_X86_64 /* Yes, this is really how we defined it :( */ | ||
212 | efi_stub_entry -= 0x200; | ||
213 | diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S | ||
214 | index 6491353cc9aa..c87810b1b557 100644 | ||
215 | --- a/arch/x86/kernel/entry_32.S | ||
216 | +++ b/arch/x86/kernel/entry_32.S | ||
217 | @@ -433,8 +433,8 @@ sysenter_do_call: | ||
218 | cmpl $(NR_syscalls), %eax | ||
219 | jae sysenter_badsys | ||
220 | call *sys_call_table(,%eax,4) | ||
221 | - movl %eax,PT_EAX(%esp) | ||
222 | sysenter_after_call: | ||
223 | + movl %eax,PT_EAX(%esp) | ||
224 | LOCKDEP_SYS_EXIT | ||
225 | DISABLE_INTERRUPTS(CLBR_ANY) | ||
226 | TRACE_IRQS_OFF | ||
227 | @@ -514,6 +514,7 @@ ENTRY(system_call) | ||
228 | jae syscall_badsys | ||
229 | syscall_call: | ||
230 | call *sys_call_table(,%eax,4) | ||
231 | +syscall_after_call: | ||
232 | movl %eax,PT_EAX(%esp) # store the return value | ||
233 | syscall_exit: | ||
234 | LOCKDEP_SYS_EXIT | ||
235 | @@ -683,12 +684,12 @@ syscall_fault: | ||
236 | END(syscall_fault) | ||
237 | |||
238 | syscall_badsys: | ||
239 | - movl $-ENOSYS,PT_EAX(%esp) | ||
240 | - jmp syscall_exit | ||
241 | + movl $-ENOSYS,%eax | ||
242 | + jmp syscall_after_call | ||
243 | END(syscall_badsys) | ||
244 | |||
245 | sysenter_badsys: | ||
246 | - movl $-ENOSYS,PT_EAX(%esp) | ||
247 | + movl $-ENOSYS,%eax | ||
248 | jmp sysenter_after_call | ||
249 | END(syscall_badsys) | ||
250 | CFI_ENDPROC | ||
251 | diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c | ||
252 | index dd0dd2d4ceca..d8f80e733cf8 100644 | ||
253 | --- a/block/blk-cgroup.c | ||
254 | +++ b/block/blk-cgroup.c | ||
255 | @@ -859,6 +859,13 @@ void blkcg_drain_queue(struct request_queue *q) | ||
256 | { | ||
257 | lockdep_assert_held(q->queue_lock); | ||
258 | |||
259 | + /* | ||
260 | + * @q could be exiting and already have destroyed all blkgs as | ||
261 | + * indicated by NULL root_blkg. If so, don't confuse policies. | ||
262 | + */ | ||
263 | + if (!q->root_blkg) | ||
264 | + return; | ||
265 | + | ||
266 | blk_throtl_drain(q); | ||
267 | } | ||
268 | |||
269 | diff --git a/block/blk-tag.c b/block/blk-tag.c | ||
270 | index 3f33d8672268..a185b86741e5 100644 | ||
271 | --- a/block/blk-tag.c | ||
272 | +++ b/block/blk-tag.c | ||
273 | @@ -27,18 +27,15 @@ struct request *blk_queue_find_tag(struct request_queue *q, int tag) | ||
274 | EXPORT_SYMBOL(blk_queue_find_tag); | ||
275 | |||
276 | /** | ||
277 | - * __blk_free_tags - release a given set of tag maintenance info | ||
278 | + * blk_free_tags - release a given set of tag maintenance info | ||
279 | * @bqt: the tag map to free | ||
280 | * | ||
281 | - * Tries to free the specified @bqt. Returns true if it was | ||
282 | - * actually freed and false if there are still references using it | ||
283 | + * Drop the reference count on @bqt and frees it when the last reference | ||
284 | + * is dropped. | ||
285 | */ | ||
286 | -static int __blk_free_tags(struct blk_queue_tag *bqt) | ||
287 | +void blk_free_tags(struct blk_queue_tag *bqt) | ||
288 | { | ||
289 | - int retval; | ||
290 | - | ||
291 | - retval = atomic_dec_and_test(&bqt->refcnt); | ||
292 | - if (retval) { | ||
293 | + if (atomic_dec_and_test(&bqt->refcnt)) { | ||
294 | BUG_ON(find_first_bit(bqt->tag_map, bqt->max_depth) < | ||
295 | bqt->max_depth); | ||
296 | |||
297 | @@ -50,9 +47,8 @@ static int __blk_free_tags(struct blk_queue_tag *bqt) | ||
298 | |||
299 | kfree(bqt); | ||
300 | } | ||
301 | - | ||
302 | - return retval; | ||
303 | } | ||
304 | +EXPORT_SYMBOL(blk_free_tags); | ||
305 | |||
306 | /** | ||
307 | * __blk_queue_free_tags - release tag maintenance info | ||
308 | @@ -69,28 +65,13 @@ void __blk_queue_free_tags(struct request_queue *q) | ||
309 | if (!bqt) | ||
310 | return; | ||
311 | |||
312 | - __blk_free_tags(bqt); | ||
313 | + blk_free_tags(bqt); | ||
314 | |||
315 | q->queue_tags = NULL; | ||
316 | queue_flag_clear_unlocked(QUEUE_FLAG_QUEUED, q); | ||
317 | } | ||
318 | |||
319 | /** | ||
320 | - * blk_free_tags - release a given set of tag maintenance info | ||
321 | - * @bqt: the tag map to free | ||
322 | - * | ||
323 | - * For externally managed @bqt frees the map. Callers of this | ||
324 | - * function must guarantee to have released all the queues that | ||
325 | - * might have been using this tag map. | ||
326 | - */ | ||
327 | -void blk_free_tags(struct blk_queue_tag *bqt) | ||
328 | -{ | ||
329 | - if (unlikely(!__blk_free_tags(bqt))) | ||
330 | - BUG(); | ||
331 | -} | ||
332 | -EXPORT_SYMBOL(blk_free_tags); | ||
333 | - | ||
334 | -/** | ||
335 | * blk_queue_free_tags - release tag maintenance info | ||
336 | * @q: the request queue for the device | ||
337 | * | ||
338 | diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c | ||
339 | index fbd5a67cb773..a0926a6094b2 100644 | ||
340 | --- a/block/compat_ioctl.c | ||
341 | +++ b/block/compat_ioctl.c | ||
342 | @@ -690,6 +690,7 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg) | ||
343 | case BLKROSET: | ||
344 | case BLKDISCARD: | ||
345 | case BLKSECDISCARD: | ||
346 | + case BLKZEROOUT: | ||
347 | /* | ||
348 | * the ones below are implemented in blkdev_locked_ioctl, | ||
349 | * but we call blkdev_ioctl, which gets the lock for us | ||
350 | diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c | ||
351 | index 9aa42998d757..b54f8b3c7924 100644 | ||
352 | --- a/drivers/ata/ahci.c | ||
353 | +++ b/drivers/ata/ahci.c | ||
354 | @@ -457,6 +457,7 @@ static const struct pci_device_id ahci_pci_tbl[] = { | ||
355 | |||
356 | /* Promise */ | ||
357 | { PCI_VDEVICE(PROMISE, 0x3f20), board_ahci }, /* PDC42819 */ | ||
358 | + { PCI_VDEVICE(PROMISE, 0x3781), board_ahci }, /* FastTrak TX8660 ahci-mode */ | ||
359 | |||
360 | /* Asmedia */ | ||
361 | { PCI_VDEVICE(ASMEDIA, 0x0601), board_ahci }, /* ASM1060 */ | ||
362 | diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c | ||
363 | index 62fda16c8377..f7616036663b 100644 | ||
364 | --- a/drivers/ata/libata-core.c | ||
365 | +++ b/drivers/ata/libata-core.c | ||
366 | @@ -4787,6 +4787,10 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words) | ||
367 | * ata_qc_new - Request an available ATA command, for queueing | ||
368 | * @ap: target port | ||
369 | * | ||
370 | + * Some ATA host controllers may implement a queue depth which is less | ||
371 | + * than ATA_MAX_QUEUE. So we shouldn't allocate a tag which is beyond | ||
372 | + * the hardware limitation. | ||
373 | + * | ||
374 | * LOCKING: | ||
375 | * None. | ||
376 | */ | ||
377 | @@ -4794,14 +4798,15 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words) | ||
378 | static struct ata_queued_cmd *ata_qc_new(struct ata_port *ap) | ||
379 | { | ||
380 | struct ata_queued_cmd *qc = NULL; | ||
381 | + unsigned int max_queue = ap->host->n_tags; | ||
382 | unsigned int i, tag; | ||
383 | |||
384 | /* no command while frozen */ | ||
385 | if (unlikely(ap->pflags & ATA_PFLAG_FROZEN)) | ||
386 | return NULL; | ||
387 | |||
388 | - for (i = 0; i < ATA_MAX_QUEUE; i++) { | ||
389 | - tag = (i + ap->last_tag + 1) % ATA_MAX_QUEUE; | ||
390 | + for (i = 0, tag = ap->last_tag + 1; i < max_queue; i++, tag++) { | ||
391 | + tag = tag < max_queue ? tag : 0; | ||
392 | |||
393 | /* the last tag is reserved for internal command. */ | ||
394 | if (tag == ATA_TAG_INTERNAL) | ||
395 | @@ -6103,6 +6108,7 @@ void ata_host_init(struct ata_host *host, struct device *dev, | ||
396 | { | ||
397 | spin_lock_init(&host->lock); | ||
398 | mutex_init(&host->eh_mutex); | ||
399 | + host->n_tags = ATA_MAX_QUEUE - 1; | ||
400 | host->dev = dev; | ||
401 | host->ops = ops; | ||
402 | } | ||
403 | @@ -6184,6 +6190,8 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht) | ||
404 | { | ||
405 | int i, rc; | ||
406 | |||
407 | + host->n_tags = clamp(sht->can_queue, 1, ATA_MAX_QUEUE - 1); | ||
408 | + | ||
409 | /* host must have been started */ | ||
410 | if (!(host->flags & ATA_HOST_STARTED)) { | ||
411 | dev_err(host->dev, "BUG: trying to register unstarted host\n"); | ||
412 | diff --git a/drivers/base/platform.c b/drivers/base/platform.c | ||
413 | index 3c51eb0bd659..9dbf4ef2b2a3 100644 | ||
414 | --- a/drivers/base/platform.c | ||
415 | +++ b/drivers/base/platform.c | ||
416 | @@ -89,8 +89,13 @@ int platform_get_irq(struct platform_device *dev, unsigned int num) | ||
417 | return dev->archdata.irqs[num]; | ||
418 | #else | ||
419 | struct resource *r; | ||
420 | - if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) | ||
421 | - return of_irq_get(dev->dev.of_node, num); | ||
422 | + if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) { | ||
423 | + int ret; | ||
424 | + | ||
425 | + ret = of_irq_get(dev->dev.of_node, num); | ||
426 | + if (ret >= 0 || ret == -EPROBE_DEFER) | ||
427 | + return ret; | ||
428 | + } | ||
429 | |||
430 | r = platform_get_resource(dev, IORESOURCE_IRQ, num); | ||
431 | |||
432 | diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c | ||
433 | index 270f68a6b724..7164045c06e4 100644 | ||
434 | --- a/drivers/gpu/drm/radeon/cik.c | ||
435 | +++ b/drivers/gpu/drm/radeon/cik.c | ||
436 | @@ -2219,6 +2219,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | ||
437 | gb_tile_moden = 0; | ||
438 | break; | ||
439 | } | ||
440 | + rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden; | ||
441 | WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); | ||
442 | } | ||
443 | } else if (num_pipe_configs == 8) { | ||
444 | @@ -7270,6 +7271,7 @@ static inline u32 cik_get_ih_wptr(struct radeon_device *rdev) | ||
445 | tmp = RREG32(IH_RB_CNTL); | ||
446 | tmp |= IH_WPTR_OVERFLOW_CLEAR; | ||
447 | WREG32(IH_RB_CNTL, tmp); | ||
448 | + wptr &= ~RB_OVERFLOW; | ||
449 | } | ||
450 | return (wptr & rdev->ih.ptr_mask); | ||
451 | } | ||
452 | diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c | ||
453 | index 64108dbc7d45..4b3c5f7ae63b 100644 | ||
454 | --- a/drivers/gpu/drm/radeon/evergreen.c | ||
455 | +++ b/drivers/gpu/drm/radeon/evergreen.c | ||
456 | @@ -4763,6 +4763,7 @@ static u32 evergreen_get_ih_wptr(struct radeon_device *rdev) | ||
457 | tmp = RREG32(IH_RB_CNTL); | ||
458 | tmp |= IH_WPTR_OVERFLOW_CLEAR; | ||
459 | WREG32(IH_RB_CNTL, tmp); | ||
460 | + wptr &= ~RB_OVERFLOW; | ||
461 | } | ||
462 | return (wptr & rdev->ih.ptr_mask); | ||
463 | } | ||
464 | diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c | ||
465 | index f28ab840cc23..788f602e8989 100644 | ||
466 | --- a/drivers/gpu/drm/radeon/r600.c | ||
467 | +++ b/drivers/gpu/drm/radeon/r600.c | ||
468 | @@ -3795,6 +3795,7 @@ static u32 r600_get_ih_wptr(struct radeon_device *rdev) | ||
469 | tmp = RREG32(IH_RB_CNTL); | ||
470 | tmp |= IH_WPTR_OVERFLOW_CLEAR; | ||
471 | WREG32(IH_RB_CNTL, tmp); | ||
472 | + wptr &= ~RB_OVERFLOW; | ||
473 | } | ||
474 | return (wptr & rdev->ih.ptr_mask); | ||
475 | } | ||
476 | diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c | ||
477 | index cb7508dc94f3..ea93393374df 100644 | ||
478 | --- a/drivers/gpu/drm/radeon/si.c | ||
479 | +++ b/drivers/gpu/drm/radeon/si.c | ||
480 | @@ -6098,6 +6098,7 @@ static inline u32 si_get_ih_wptr(struct radeon_device *rdev) | ||
481 | tmp = RREG32(IH_RB_CNTL); | ||
482 | tmp |= IH_WPTR_OVERFLOW_CLEAR; | ||
483 | WREG32(IH_RB_CNTL, tmp); | ||
484 | + wptr &= ~RB_OVERFLOW; | ||
485 | } | ||
486 | return (wptr & rdev->ih.ptr_mask); | ||
487 | } | ||
488 | diff --git a/drivers/hwmon/smsc47m192.c b/drivers/hwmon/smsc47m192.c | ||
489 | index efee4c59239f..34b9a601ad07 100644 | ||
490 | --- a/drivers/hwmon/smsc47m192.c | ||
491 | +++ b/drivers/hwmon/smsc47m192.c | ||
492 | @@ -86,7 +86,7 @@ static inline u8 IN_TO_REG(unsigned long val, int n) | ||
493 | */ | ||
494 | static inline s8 TEMP_TO_REG(int val) | ||
495 | { | ||
496 | - return clamp_val(SCALE(val, 1, 1000), -128000, 127000); | ||
497 | + return SCALE(clamp_val(val, -128000, 127000), 1, 1000); | ||
498 | } | ||
499 | |||
500 | static inline int TEMP_FROM_REG(s8 val) | ||
501 | @@ -384,6 +384,8 @@ static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, | ||
502 | err = kstrtoul(buf, 10, &val); | ||
503 | if (err) | ||
504 | return err; | ||
505 | + if (val > 255) | ||
506 | + return -EINVAL; | ||
507 | |||
508 | data->vrm = val; | ||
509 | return count; | ||
510 | diff --git a/drivers/input/input.c b/drivers/input/input.c | ||
511 | index 1c4c0db05550..29ca0bb4f561 100644 | ||
512 | --- a/drivers/input/input.c | ||
513 | +++ b/drivers/input/input.c | ||
514 | @@ -257,9 +257,10 @@ static int input_handle_abs_event(struct input_dev *dev, | ||
515 | } | ||
516 | |||
517 | static int input_get_disposition(struct input_dev *dev, | ||
518 | - unsigned int type, unsigned int code, int value) | ||
519 | + unsigned int type, unsigned int code, int *pval) | ||
520 | { | ||
521 | int disposition = INPUT_IGNORE_EVENT; | ||
522 | + int value = *pval; | ||
523 | |||
524 | switch (type) { | ||
525 | |||
526 | @@ -357,6 +358,7 @@ static int input_get_disposition(struct input_dev *dev, | ||
527 | break; | ||
528 | } | ||
529 | |||
530 | + *pval = value; | ||
531 | return disposition; | ||
532 | } | ||
533 | |||
534 | @@ -365,7 +367,7 @@ static void input_handle_event(struct input_dev *dev, | ||
535 | { | ||
536 | int disposition; | ||
537 | |||
538 | - disposition = input_get_disposition(dev, type, code, value); | ||
539 | + disposition = input_get_disposition(dev, type, code, &value); | ||
540 | |||
541 | if ((disposition & INPUT_PASS_TO_DEVICE) && dev->event) | ||
542 | dev->event(dev, type, code, value); | ||
543 | diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c | ||
544 | index ec772d962f06..ef9e0b8a9aa7 100644 | ||
545 | --- a/drivers/input/mouse/synaptics.c | ||
546 | +++ b/drivers/input/mouse/synaptics.c | ||
547 | @@ -132,7 +132,8 @@ static const struct min_max_quirk min_max_pnpid_table[] = { | ||
548 | 1232, 5710, 1156, 4696 | ||
549 | }, | ||
550 | { | ||
551 | - (const char * const []){"LEN0034", "LEN0036", "LEN2004", NULL}, | ||
552 | + (const char * const []){"LEN0034", "LEN0036", "LEN2002", | ||
553 | + "LEN2004", NULL}, | ||
554 | 1024, 5112, 2024, 4832 | ||
555 | }, | ||
556 | { | ||
557 | @@ -168,7 +169,7 @@ static const char * const topbuttonpad_pnp_ids[] = { | ||
558 | "LEN0049", | ||
559 | "LEN2000", | ||
560 | "LEN2001", /* Edge E431 */ | ||
561 | - "LEN2002", | ||
562 | + "LEN2002", /* Edge E531 */ | ||
563 | "LEN2003", | ||
564 | "LEN2004", /* L440 */ | ||
565 | "LEN2005", | ||
566 | diff --git a/drivers/media/dvb-frontends/tda10071.c b/drivers/media/dvb-frontends/tda10071.c | ||
567 | index 8ad3a57cf640..287b977862e2 100644 | ||
568 | --- a/drivers/media/dvb-frontends/tda10071.c | ||
569 | +++ b/drivers/media/dvb-frontends/tda10071.c | ||
570 | @@ -667,6 +667,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe) | ||
571 | struct dtv_frontend_properties *c = &fe->dtv_property_cache; | ||
572 | int ret, i; | ||
573 | u8 mode, rolloff, pilot, inversion, div; | ||
574 | + fe_modulation_t modulation; | ||
575 | |||
576 | dev_dbg(&priv->i2c->dev, "%s: delivery_system=%d modulation=%d " \ | ||
577 | "frequency=%d symbol_rate=%d inversion=%d pilot=%d " \ | ||
578 | @@ -701,10 +702,13 @@ static int tda10071_set_frontend(struct dvb_frontend *fe) | ||
579 | |||
580 | switch (c->delivery_system) { | ||
581 | case SYS_DVBS: | ||
582 | + modulation = QPSK; | ||
583 | rolloff = 0; | ||
584 | pilot = 2; | ||
585 | break; | ||
586 | case SYS_DVBS2: | ||
587 | + modulation = c->modulation; | ||
588 | + | ||
589 | switch (c->rolloff) { | ||
590 | case ROLLOFF_20: | ||
591 | rolloff = 2; | ||
592 | @@ -749,7 +753,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe) | ||
593 | |||
594 | for (i = 0, mode = 0xff; i < ARRAY_SIZE(TDA10071_MODCOD); i++) { | ||
595 | if (c->delivery_system == TDA10071_MODCOD[i].delivery_system && | ||
596 | - c->modulation == TDA10071_MODCOD[i].modulation && | ||
597 | + modulation == TDA10071_MODCOD[i].modulation && | ||
598 | c->fec_inner == TDA10071_MODCOD[i].fec) { | ||
599 | mode = TDA10071_MODCOD[i].val; | ||
600 | dev_dbg(&priv->i2c->dev, "%s: mode found=%02x\n", | ||
601 | diff --git a/drivers/media/usb/hdpvr/hdpvr-video.c b/drivers/media/usb/hdpvr/hdpvr-video.c | ||
602 | index 0500c4175d5f..6bce01a674f9 100644 | ||
603 | --- a/drivers/media/usb/hdpvr/hdpvr-video.c | ||
604 | +++ b/drivers/media/usb/hdpvr/hdpvr-video.c | ||
605 | @@ -82,7 +82,7 @@ static void hdpvr_read_bulk_callback(struct urb *urb) | ||
606 | } | ||
607 | |||
608 | /*=========================================================================*/ | ||
609 | -/* bufffer bits */ | ||
610 | +/* buffer bits */ | ||
611 | |||
612 | /* function expects dev->io_mutex to be hold by caller */ | ||
613 | int hdpvr_cancel_queue(struct hdpvr_device *dev) | ||
614 | @@ -926,7 +926,7 @@ static int hdpvr_s_ctrl(struct v4l2_ctrl *ctrl) | ||
615 | case V4L2_CID_MPEG_AUDIO_ENCODING: | ||
616 | if (dev->flags & HDPVR_FLAG_AC3_CAP) { | ||
617 | opt->audio_codec = ctrl->val; | ||
618 | - return hdpvr_set_audio(dev, opt->audio_input, | ||
619 | + return hdpvr_set_audio(dev, opt->audio_input + 1, | ||
620 | opt->audio_codec); | ||
621 | } | ||
622 | return 0; | ||
623 | @@ -1198,7 +1198,7 @@ int hdpvr_register_videodev(struct hdpvr_device *dev, struct device *parent, | ||
624 | v4l2_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops, | ||
625 | V4L2_CID_MPEG_AUDIO_ENCODING, | ||
626 | ac3 ? V4L2_MPEG_AUDIO_ENCODING_AC3 : V4L2_MPEG_AUDIO_ENCODING_AAC, | ||
627 | - 0x7, V4L2_MPEG_AUDIO_ENCODING_AAC); | ||
628 | + 0x7, ac3 ? dev->options.audio_codec : V4L2_MPEG_AUDIO_ENCODING_AAC); | ||
629 | v4l2_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops, | ||
630 | V4L2_CID_MPEG_VIDEO_ENCODING, | ||
631 | V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC, 0x3, | ||
632 | diff --git a/drivers/media/v4l2-core/v4l2-dv-timings.c b/drivers/media/v4l2-core/v4l2-dv-timings.c | ||
633 | index a2e257970fec..78d99b137d91 100644 | ||
634 | --- a/drivers/media/v4l2-core/v4l2-dv-timings.c | ||
635 | +++ b/drivers/media/v4l2-core/v4l2-dv-timings.c | ||
636 | @@ -595,10 +595,10 @@ struct v4l2_fract v4l2_calc_aspect_ratio(u8 hor_landscape, u8 vert_portrait) | ||
637 | aspect.denominator = 9; | ||
638 | } else if (ratio == 34) { | ||
639 | aspect.numerator = 4; | ||
640 | - aspect.numerator = 3; | ||
641 | + aspect.denominator = 3; | ||
642 | } else if (ratio == 68) { | ||
643 | aspect.numerator = 15; | ||
644 | - aspect.numerator = 9; | ||
645 | + aspect.denominator = 9; | ||
646 | } else { | ||
647 | aspect.numerator = hor_landscape + 99; | ||
648 | aspect.denominator = 100; | ||
649 | diff --git a/drivers/parport/Kconfig b/drivers/parport/Kconfig | ||
650 | index 2872ece81f35..44333bd8f908 100644 | ||
651 | --- a/drivers/parport/Kconfig | ||
652 | +++ b/drivers/parport/Kconfig | ||
653 | @@ -5,6 +5,12 @@ | ||
654 | # Parport configuration. | ||
655 | # | ||
656 | |||
657 | +config ARCH_MIGHT_HAVE_PC_PARPORT | ||
658 | + bool | ||
659 | + help | ||
660 | + Select this config option from the architecture Kconfig if | ||
661 | + the architecture might have PC parallel port hardware. | ||
662 | + | ||
663 | menuconfig PARPORT | ||
664 | tristate "Parallel port support" | ||
665 | depends on HAS_IOMEM | ||
666 | @@ -31,12 +37,6 @@ menuconfig PARPORT | ||
667 | |||
668 | If unsure, say Y. | ||
669 | |||
670 | -config ARCH_MIGHT_HAVE_PC_PARPORT | ||
671 | - bool | ||
672 | - help | ||
673 | - Select this config option from the architecture Kconfig if | ||
674 | - the architecture might have PC parallel port hardware. | ||
675 | - | ||
676 | if PARPORT | ||
677 | |||
678 | config PARPORT_PC | ||
679 | diff --git a/drivers/staging/media/omap4iss/Kconfig b/drivers/staging/media/omap4iss/Kconfig | ||
680 | index b9fe753969bd..15940f8fdd24 100644 | ||
681 | --- a/drivers/staging/media/omap4iss/Kconfig | ||
682 | +++ b/drivers/staging/media/omap4iss/Kconfig | ||
683 | @@ -1,6 +1,6 @@ | ||
684 | config VIDEO_OMAP4 | ||
685 | bool "OMAP 4 Camera support" | ||
686 | - depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && I2C && ARCH_OMAP4 | ||
687 | + depends on VIDEO_V4L2=y && VIDEO_V4L2_SUBDEV_API && I2C=y && ARCH_OMAP4 | ||
688 | select VIDEOBUF2_DMA_CONTIG | ||
689 | ---help--- | ||
690 | Driver for an OMAP 4 ISS controller. | ||
691 | diff --git a/fs/coredump.c b/fs/coredump.c | ||
692 | index 0b2528fb640e..a93f7e6ea4cf 100644 | ||
693 | --- a/fs/coredump.c | ||
694 | +++ b/fs/coredump.c | ||
695 | @@ -306,7 +306,7 @@ static int zap_threads(struct task_struct *tsk, struct mm_struct *mm, | ||
696 | if (unlikely(nr < 0)) | ||
697 | return nr; | ||
698 | |||
699 | - tsk->flags = PF_DUMPCORE; | ||
700 | + tsk->flags |= PF_DUMPCORE; | ||
701 | if (atomic_read(&mm->mm_users) == nr + 1) | ||
702 | goto done; | ||
703 | /* | ||
704 | diff --git a/fs/namei.c b/fs/namei.c | ||
705 | index 8274c8d39b03..bdea10963aa5 100644 | ||
706 | --- a/fs/namei.c | ||
707 | +++ b/fs/namei.c | ||
708 | @@ -2247,9 +2247,10 @@ done: | ||
709 | goto out; | ||
710 | } | ||
711 | path->dentry = dentry; | ||
712 | - path->mnt = mntget(nd->path.mnt); | ||
713 | + path->mnt = nd->path.mnt; | ||
714 | if (should_follow_link(dentry, nd->flags & LOOKUP_FOLLOW)) | ||
715 | return 1; | ||
716 | + mntget(path->mnt); | ||
717 | follow_mount(path); | ||
718 | error = 0; | ||
719 | out: | ||
720 | diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c | ||
721 | index 871d6eda8dba..8f854dde4150 100644 | ||
722 | --- a/fs/nfs/nfs3acl.c | ||
723 | +++ b/fs/nfs/nfs3acl.c | ||
724 | @@ -247,3 +247,46 @@ const struct xattr_handler *nfs3_xattr_handlers[] = { | ||
725 | &posix_acl_default_xattr_handler, | ||
726 | NULL, | ||
727 | }; | ||
728 | + | ||
729 | +static int | ||
730 | +nfs3_list_one_acl(struct inode *inode, int type, const char *name, void *data, | ||
731 | + size_t size, ssize_t *result) | ||
732 | +{ | ||
733 | + struct posix_acl *acl; | ||
734 | + char *p = data + *result; | ||
735 | + | ||
736 | + acl = get_acl(inode, type); | ||
737 | + if (!acl) | ||
738 | + return 0; | ||
739 | + | ||
740 | + posix_acl_release(acl); | ||
741 | + | ||
742 | + *result += strlen(name); | ||
743 | + *result += 1; | ||
744 | + if (!size) | ||
745 | + return 0; | ||
746 | + if (*result > size) | ||
747 | + return -ERANGE; | ||
748 | + | ||
749 | + strcpy(p, name); | ||
750 | + return 0; | ||
751 | +} | ||
752 | + | ||
753 | +ssize_t | ||
754 | +nfs3_listxattr(struct dentry *dentry, char *data, size_t size) | ||
755 | +{ | ||
756 | + struct inode *inode = dentry->d_inode; | ||
757 | + ssize_t result = 0; | ||
758 | + int error; | ||
759 | + | ||
760 | + error = nfs3_list_one_acl(inode, ACL_TYPE_ACCESS, | ||
761 | + POSIX_ACL_XATTR_ACCESS, data, size, &result); | ||
762 | + if (error) | ||
763 | + return error; | ||
764 | + | ||
765 | + error = nfs3_list_one_acl(inode, ACL_TYPE_DEFAULT, | ||
766 | + POSIX_ACL_XATTR_DEFAULT, data, size, &result); | ||
767 | + if (error) | ||
768 | + return error; | ||
769 | + return result; | ||
770 | +} | ||
771 | diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c | ||
772 | index a462ef0fb5d6..8a18b4a0a4ee 100644 | ||
773 | --- a/fs/nfs/nfs3proc.c | ||
774 | +++ b/fs/nfs/nfs3proc.c | ||
775 | @@ -926,7 +926,7 @@ static const struct inode_operations nfs3_dir_inode_operations = { | ||
776 | .getattr = nfs_getattr, | ||
777 | .setattr = nfs_setattr, | ||
778 | #ifdef CONFIG_NFS_V3_ACL | ||
779 | - .listxattr = generic_listxattr, | ||
780 | + .listxattr = nfs3_listxattr, | ||
781 | .getxattr = generic_getxattr, | ||
782 | .setxattr = generic_setxattr, | ||
783 | .removexattr = generic_removexattr, | ||
784 | @@ -940,7 +940,7 @@ static const struct inode_operations nfs3_file_inode_operations = { | ||
785 | .getattr = nfs_getattr, | ||
786 | .setattr = nfs_setattr, | ||
787 | #ifdef CONFIG_NFS_V3_ACL | ||
788 | - .listxattr = generic_listxattr, | ||
789 | + .listxattr = nfs3_listxattr, | ||
790 | .getxattr = generic_getxattr, | ||
791 | .setxattr = generic_setxattr, | ||
792 | .removexattr = generic_removexattr, | ||
793 | diff --git a/include/linux/libata.h b/include/linux/libata.h | ||
794 | index 3fee55e73e5e..e13b3aef0b0c 100644 | ||
795 | --- a/include/linux/libata.h | ||
796 | +++ b/include/linux/libata.h | ||
797 | @@ -593,6 +593,7 @@ struct ata_host { | ||
798 | struct device *dev; | ||
799 | void __iomem * const *iomap; | ||
800 | unsigned int n_ports; | ||
801 | + unsigned int n_tags; /* nr of NCQ tags */ | ||
802 | void *private_data; | ||
803 | struct ata_port_operations *ops; | ||
804 | unsigned long flags; | ||
805 | diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c | ||
806 | index 7e259b2bdf44..71136720ffa1 100644 | ||
807 | --- a/kernel/trace/trace.c | ||
808 | +++ b/kernel/trace/trace.c | ||
809 | @@ -811,7 +811,7 @@ static struct { | ||
810 | { trace_clock_local, "local", 1 }, | ||
811 | { trace_clock_global, "global", 1 }, | ||
812 | { trace_clock_counter, "counter", 0 }, | ||
813 | - { trace_clock_jiffies, "uptime", 1 }, | ||
814 | + { trace_clock_jiffies, "uptime", 0 }, | ||
815 | { trace_clock, "perf", 1 }, | ||
816 | ARCH_TRACE_CLOCKS | ||
817 | }; | ||
818 | diff --git a/kernel/trace/trace_clock.c b/kernel/trace/trace_clock.c | ||
819 | index 26dc348332b7..57b67b1f24d1 100644 | ||
820 | --- a/kernel/trace/trace_clock.c | ||
821 | +++ b/kernel/trace/trace_clock.c | ||
822 | @@ -59,13 +59,14 @@ u64 notrace trace_clock(void) | ||
823 | |||
824 | /* | ||
825 | * trace_jiffy_clock(): Simply use jiffies as a clock counter. | ||
826 | + * Note that this use of jiffies_64 is not completely safe on | ||
827 | + * 32-bit systems. But the window is tiny, and the effect if | ||
828 | + * we are affected is that we will have an obviously bogus | ||
829 | + * timestamp on a trace event - i.e. not life threatening. | ||
830 | */ | ||
831 | u64 notrace trace_clock_jiffies(void) | ||
832 | { | ||
833 | - u64 jiffy = jiffies - INITIAL_JIFFIES; | ||
834 | - | ||
835 | - /* Return nsecs */ | ||
836 | - return (u64)jiffies_to_usecs(jiffy) * 1000ULL; | ||
837 | + return jiffies_64_to_clock_t(jiffies_64 - INITIAL_JIFFIES); | ||
838 | } | ||
839 | |||
840 | /* | ||
841 | diff --git a/mm/hugetlb.c b/mm/hugetlb.c | ||
842 | index 30dd6265a141..923f38e62bcf 100644 | ||
843 | --- a/mm/hugetlb.c | ||
844 | +++ b/mm/hugetlb.c | ||
845 | @@ -2422,6 +2422,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src, | ||
846 | } else { | ||
847 | if (cow) | ||
848 | huge_ptep_set_wrprotect(src, addr, src_pte); | ||
849 | + entry = huge_ptep_get(src_pte); | ||
850 | ptepage = pte_page(entry); | ||
851 | get_page(ptepage); | ||
852 | page_dup_rmap(ptepage); | ||
853 | diff --git a/mm/slab_common.c b/mm/slab_common.c | ||
854 | index 1ec3c619ba04..f149e6724411 100644 | ||
855 | --- a/mm/slab_common.c | ||
856 | +++ b/mm/slab_common.c | ||
857 | @@ -56,7 +56,7 @@ static int kmem_cache_sanity_check(struct mem_cgroup *memcg, const char *name, | ||
858 | continue; | ||
859 | } | ||
860 | |||
861 | -#if !defined(CONFIG_SLUB) || !defined(CONFIG_SLUB_DEBUG_ON) | ||
862 | +#if !defined(CONFIG_SLUB) | ||
863 | /* | ||
864 | * For simplicity, we won't check this in the list of memcg | ||
865 | * caches. We have control over memcg naming, and if there | ||
866 | diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c | ||
867 | index 4fe2e6e2bc76..e6283464a8e6 100644 | ||
868 | --- a/net/wireless/nl80211.c | ||
869 | +++ b/net/wireless/nl80211.c | ||
870 | @@ -1450,18 +1450,17 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *dev, | ||
871 | } | ||
872 | CMD(start_p2p_device, START_P2P_DEVICE); | ||
873 | CMD(set_mcast_rate, SET_MCAST_RATE); | ||
874 | +#ifdef CONFIG_NL80211_TESTMODE | ||
875 | + CMD(testmode_cmd, TESTMODE); | ||
876 | +#endif | ||
877 | if (state->split) { | ||
878 | CMD(crit_proto_start, CRIT_PROTOCOL_START); | ||
879 | CMD(crit_proto_stop, CRIT_PROTOCOL_STOP); | ||
880 | if (dev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH) | ||
881 | CMD(channel_switch, CHANNEL_SWITCH); | ||
882 | + CMD(set_qos_map, SET_QOS_MAP); | ||
883 | } | ||
884 | - CMD(set_qos_map, SET_QOS_MAP); | ||
885 | - | ||
886 | -#ifdef CONFIG_NL80211_TESTMODE | ||
887 | - CMD(testmode_cmd, TESTMODE); | ||
888 | -#endif | ||
889 | - | ||
890 | + /* add into the if now */ | ||
891 | #undef CMD | ||
892 | |||
893 | if (dev->ops->connect || dev->ops->auth) { |