Magellan Linux

Contents of /trunk/kernel-lts/patches-3.4/0158-3.4.59-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2275 - (show annotations) (download)
Mon Sep 2 08:09:55 2013 UTC (10 years, 8 months ago) by niro
File size: 33439 byte(s)
-linux-3.4.59
1 diff --git a/arch/alpha/Makefile b/arch/alpha/Makefile
2 index 4759fe7..2cc3cc5 100644
3 --- a/arch/alpha/Makefile
4 +++ b/arch/alpha/Makefile
5 @@ -12,7 +12,7 @@ NM := $(NM) -B
6
7 LDFLAGS_vmlinux := -static -N #-relax
8 CHECKFLAGS += -D__alpha__ -m64
9 -cflags-y := -pipe -mno-fp-regs -ffixed-8 -msmall-data
10 +cflags-y := -pipe -mno-fp-regs -ffixed-8
11 cflags-y += $(call cc-option, -fno-jump-tables)
12
13 cpuflags-$(CONFIG_ALPHA_EV4) := -mcpu=ev4
14 diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
15 index a99ed7a..ac73066 100644
16 --- a/arch/arm/kernel/perf_event.c
17 +++ b/arch/arm/kernel/perf_event.c
18 @@ -109,7 +109,12 @@ armpmu_map_cache_event(const unsigned (*cache_map)
19 static int
20 armpmu_map_event(const unsigned (*event_map)[PERF_COUNT_HW_MAX], u64 config)
21 {
22 - int mapping = (*event_map)[config];
23 + int mapping;
24 +
25 + if (config >= PERF_COUNT_HW_MAX)
26 + return -ENOENT;
27 +
28 + mapping = (*event_map)[config];
29 return mapping == HW_OP_UNSUPPORTED ? -ENOENT : mapping;
30 }
31
32 @@ -319,6 +324,9 @@ validate_event(struct pmu_hw_events *hw_events,
33 struct hw_perf_event fake_event = event->hw;
34 struct pmu *leader_pmu = event->group_leader->pmu;
35
36 + if (is_software_event(event))
37 + return 1;
38 +
39 if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF)
40 return 1;
41
42 diff --git a/arch/cris/arch-v10/lib/Makefile b/arch/cris/arch-v10/lib/Makefile
43 index 36e9a9c..725153e 100644
44 --- a/arch/cris/arch-v10/lib/Makefile
45 +++ b/arch/cris/arch-v10/lib/Makefile
46 @@ -2,8 +2,5 @@
47 # Makefile for Etrax-specific library files..
48 #
49
50 -
51 -EXTRA_AFLAGS := -traditional
52 -
53 lib-y = checksum.o checksumcopy.o string.o usercopy.o memset.o csumcpfruser.o
54
55 diff --git a/arch/cris/include/asm/posix_types.h b/arch/cris/include/asm/posix_types.h
56 index 72b3cd6..234891c 100644
57 --- a/arch/cris/include/asm/posix_types.h
58 +++ b/arch/cris/include/asm/posix_types.h
59 @@ -33,4 +33,6 @@ typedef int __kernel_ptrdiff_t;
60 typedef unsigned short __kernel_old_dev_t;
61 #define __kernel_old_dev_t __kernel_old_dev_t
62
63 +#include <asm-generic/posix_types.h>
64 +
65 #endif /* __ARCH_CRIS_POSIX_TYPES_H */
66 diff --git a/arch/cris/kernel/vmlinux.lds.S b/arch/cris/kernel/vmlinux.lds.S
67 index a6990cb..a68b983 100644
68 --- a/arch/cris/kernel/vmlinux.lds.S
69 +++ b/arch/cris/kernel/vmlinux.lds.S
70 @@ -52,6 +52,7 @@ SECTIONS
71
72 EXCEPTION_TABLE(4)
73
74 + _sdata = .;
75 RODATA
76
77 . = ALIGN (4);
78 diff --git a/arch/frv/include/asm/thread_info.h b/arch/frv/include/asm/thread_info.h
79 index 92d83ea..aaea388 100644
80 --- a/arch/frv/include/asm/thread_info.h
81 +++ b/arch/frv/include/asm/thread_info.h
82 @@ -21,8 +21,6 @@
83
84 #define THREAD_SIZE 8192
85
86 -#define __HAVE_ARCH_TASK_STRUCT_ALLOCATOR
87 -
88 /*
89 * low level task data that entry.S needs immediate access to
90 * - this struct should fit entirely inside of one cache line
91 diff --git a/arch/frv/kernel/process.c b/arch/frv/kernel/process.c
92 index 3941cbc..c4dc7a4 100644
93 --- a/arch/frv/kernel/process.c
94 +++ b/arch/frv/kernel/process.c
95 @@ -44,21 +44,6 @@ asmlinkage void ret_from_fork(void);
96 void (*pm_power_off)(void);
97 EXPORT_SYMBOL(pm_power_off);
98
99 -struct task_struct *alloc_task_struct_node(int node)
100 -{
101 - struct task_struct *p = kmalloc_node(THREAD_SIZE, GFP_KERNEL, node);
102 -
103 - if (p)
104 - atomic_set((atomic_t *)(p+1), 1);
105 - return p;
106 -}
107 -
108 -void free_task_struct(struct task_struct *p)
109 -{
110 - if (atomic_dec_and_test((atomic_t *)(p+1)))
111 - kfree(p);
112 -}
113 -
114 static void core_sleep_idle(void)
115 {
116 #ifdef LED_DEBUG_SLEEP
117 diff --git a/arch/m68k/emu/natfeat.c b/arch/m68k/emu/natfeat.c
118 index 2291a7d..fa277ae 100644
119 --- a/arch/m68k/emu/natfeat.c
120 +++ b/arch/m68k/emu/natfeat.c
121 @@ -18,9 +18,11 @@
122 #include <asm/machdep.h>
123 #include <asm/natfeat.h>
124
125 +extern long nf_get_id2(const char *feature_name);
126 +
127 asm("\n"
128 -" .global nf_get_id,nf_call\n"
129 -"nf_get_id:\n"
130 +" .global nf_get_id2,nf_call\n"
131 +"nf_get_id2:\n"
132 " .short 0x7300\n"
133 " rts\n"
134 "nf_call:\n"
135 @@ -29,12 +31,25 @@ asm("\n"
136 "1: moveq.l #0,%d0\n"
137 " rts\n"
138 " .section __ex_table,\"a\"\n"
139 -" .long nf_get_id,1b\n"
140 +" .long nf_get_id2,1b\n"
141 " .long nf_call,1b\n"
142 " .previous");
143 -EXPORT_SYMBOL_GPL(nf_get_id);
144 EXPORT_SYMBOL_GPL(nf_call);
145
146 +long nf_get_id(const char *feature_name)
147 +{
148 + /* feature_name may be in vmalloc()ed memory, so make a copy */
149 + char name_copy[32];
150 + size_t n;
151 +
152 + n = strlcpy(name_copy, feature_name, sizeof(name_copy));
153 + if (n >= sizeof(name_copy))
154 + return 0;
155 +
156 + return nf_get_id2(name_copy);
157 +}
158 +EXPORT_SYMBOL_GPL(nf_get_id);
159 +
160 void nfprint(const char *fmt, ...)
161 {
162 static char buf[256];
163 diff --git a/arch/m68k/include/asm/div64.h b/arch/m68k/include/asm/div64.h
164 index 444ea8a..ef881cf 100644
165 --- a/arch/m68k/include/asm/div64.h
166 +++ b/arch/m68k/include/asm/div64.h
167 @@ -15,16 +15,17 @@
168 unsigned long long n64; \
169 } __n; \
170 unsigned long __rem, __upper; \
171 + unsigned long __base = (base); \
172 \
173 __n.n64 = (n); \
174 if ((__upper = __n.n32[0])) { \
175 asm ("divul.l %2,%1:%0" \
176 - : "=d" (__n.n32[0]), "=d" (__upper) \
177 - : "d" (base), "0" (__n.n32[0])); \
178 + : "=d" (__n.n32[0]), "=d" (__upper) \
179 + : "d" (__base), "0" (__n.n32[0])); \
180 } \
181 asm ("divu.l %2,%1:%0" \
182 - : "=d" (__n.n32[1]), "=d" (__rem) \
183 - : "d" (base), "1" (__upper), "0" (__n.n32[1])); \
184 + : "=d" (__n.n32[1]), "=d" (__rem) \
185 + : "d" (__base), "1" (__upper), "0" (__n.n32[1])); \
186 (n) = __n.n64; \
187 __rem; \
188 })
189 diff --git a/arch/microblaze/configs/mmu_defconfig b/arch/microblaze/configs/mmu_defconfig
190 index b3f5eec..a470f57 100644
191 --- a/arch/microblaze/configs/mmu_defconfig
192 +++ b/arch/microblaze/configs/mmu_defconfig
193 @@ -1,25 +1,22 @@
194 CONFIG_EXPERIMENTAL=y
195 CONFIG_SYSVIPC=y
196 +CONFIG_POSIX_MQUEUE=y
197 +CONFIG_FHANDLE=y
198 +CONFIG_AUDIT=y
199 +CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
200 CONFIG_IKCONFIG=y
201 CONFIG_IKCONFIG_PROC=y
202 +CONFIG_SYSFS_DEPRECATED=y
203 CONFIG_SYSFS_DEPRECATED_V2=y
204 -CONFIG_BLK_DEV_INITRD=y
205 -CONFIG_INITRAMFS_SOURCE="rootfs.cpio"
206 -CONFIG_INITRAMFS_COMPRESSION_GZIP=y
207 -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
208 -CONFIG_EXPERT=y
209 CONFIG_KALLSYMS_ALL=y
210 -CONFIG_KALLSYMS_EXTRA_PASS=y
211 -# CONFIG_HOTPLUG is not set
212 # CONFIG_BASE_FULL is not set
213 -# CONFIG_FUTEX is not set
214 -# CONFIG_EPOLL is not set
215 -# CONFIG_SIGNALFD is not set
216 -# CONFIG_SHMEM is not set
217 +CONFIG_EMBEDDED=y
218 CONFIG_SLAB=y
219 CONFIG_MODULES=y
220 CONFIG_MODULE_UNLOAD=y
221 # CONFIG_BLK_DEV_BSG is not set
222 +CONFIG_PARTITION_ADVANCED=y
223 +# CONFIG_EFI_PARTITION is not set
224 CONFIG_OPT_LIB_ASM=y
225 CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1
226 CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR=1
227 @@ -37,33 +34,53 @@ CONFIG_UNIX=y
228 CONFIG_INET=y
229 # CONFIG_INET_LRO is not set
230 # CONFIG_IPV6 is not set
231 +CONFIG_MTD=y
232 CONFIG_PROC_DEVICETREE=y
233 CONFIG_BLK_DEV_RAM=y
234 CONFIG_BLK_DEV_RAM_SIZE=8192
235 CONFIG_NETDEVICES=y
236 -CONFIG_NET_ETHERNET=y
237 CONFIG_XILINX_EMACLITE=y
238 +CONFIG_XILINX_LL_TEMAC=y
239 # CONFIG_INPUT is not set
240 # CONFIG_SERIO is not set
241 # CONFIG_VT is not set
242 +CONFIG_SERIAL_8250=y
243 +CONFIG_SERIAL_8250_CONSOLE=y
244 CONFIG_SERIAL_UARTLITE=y
245 CONFIG_SERIAL_UARTLITE_CONSOLE=y
246 # CONFIG_HW_RANDOM is not set
247 +CONFIG_XILINX_HWICAP=y
248 +CONFIG_I2C=y
249 +CONFIG_I2C_XILINX=y
250 +CONFIG_SPI=y
251 +CONFIG_SPI_XILINX=y
252 +CONFIG_GPIOLIB=y
253 +CONFIG_GPIO_SYSFS=y
254 +CONFIG_GPIO_XILINX=y
255 # CONFIG_HWMON is not set
256 +CONFIG_WATCHDOG=y
257 +CONFIG_XILINX_WATCHDOG=y
258 +CONFIG_FB=y
259 +CONFIG_FB_XILINX=y
260 # CONFIG_USB_SUPPORT is not set
261 +CONFIG_UIO=y
262 +CONFIG_UIO_PDRV=y
263 +CONFIG_UIO_PDRV_GENIRQ=y
264 +CONFIG_UIO_DMEM_GENIRQ=y
265 CONFIG_EXT2_FS=y
266 # CONFIG_DNOTIFY is not set
267 +CONFIG_CRAMFS=y
268 +CONFIG_ROMFS_FS=y
269 CONFIG_NFS_FS=y
270 -CONFIG_NFS_V3=y
271 CONFIG_CIFS=y
272 CONFIG_CIFS_STATS=y
273 CONFIG_CIFS_STATS2=y
274 -CONFIG_PARTITION_ADVANCED=y
275 -CONFIG_DEBUG_KERNEL=y
276 CONFIG_DETECT_HUNG_TASK=y
277 CONFIG_DEBUG_SLAB=y
278 CONFIG_DEBUG_SPINLOCK=y
279 CONFIG_DEBUG_INFO=y
280 -# CONFIG_RCU_CPU_STALL_DETECTOR is not set
281 CONFIG_EARLY_PRINTK=y
282 +CONFIG_KEYS=y
283 +CONFIG_ENCRYPTED_KEYS=y
284 +CONFIG_KEYS_DEBUG_PROC_KEYS=y
285 # CONFIG_CRYPTO_ANSI_CPRNG is not set
286 diff --git a/arch/microblaze/configs/nommu_defconfig b/arch/microblaze/configs/nommu_defconfig
287 index 0249e4b..5454a6d 100644
288 --- a/arch/microblaze/configs/nommu_defconfig
289 +++ b/arch/microblaze/configs/nommu_defconfig
290 @@ -1,41 +1,40 @@
291 CONFIG_EXPERIMENTAL=y
292 CONFIG_SYSVIPC=y
293 CONFIG_POSIX_MQUEUE=y
294 +CONFIG_FHANDLE=y
295 +CONFIG_AUDIT=y
296 +CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
297 CONFIG_BSD_PROCESS_ACCT=y
298 CONFIG_BSD_PROCESS_ACCT_V3=y
299 CONFIG_IKCONFIG=y
300 CONFIG_IKCONFIG_PROC=y
301 +CONFIG_SYSFS_DEPRECATED=y
302 CONFIG_SYSFS_DEPRECATED_V2=y
303 -CONFIG_EXPERT=y
304 CONFIG_KALLSYMS_ALL=y
305 -CONFIG_KALLSYMS_EXTRA_PASS=y
306 -# CONFIG_HOTPLUG is not set
307 # CONFIG_BASE_FULL is not set
308 +CONFIG_EMBEDDED=y
309 CONFIG_SLAB=y
310 CONFIG_MODULES=y
311 CONFIG_MODULE_UNLOAD=y
312 # CONFIG_BLK_DEV_BSG is not set
313 -# CONFIG_OPT_LIB_FUNCTION is not set
314 +CONFIG_PARTITION_ADVANCED=y
315 +# CONFIG_EFI_PARTITION is not set
316 CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1
317 CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR=1
318 CONFIG_XILINX_MICROBLAZE0_USE_BARREL=1
319 CONFIG_XILINX_MICROBLAZE0_USE_DIV=1
320 CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL=2
321 CONFIG_XILINX_MICROBLAZE0_USE_FPU=2
322 -CONFIG_HIGH_RES_TIMERS=y
323 CONFIG_HZ_100=y
324 CONFIG_CMDLINE_BOOL=y
325 -CONFIG_BINFMT_FLAT=y
326 +CONFIG_CMDLINE_FORCE=y
327 CONFIG_NET=y
328 CONFIG_PACKET=y
329 CONFIG_UNIX=y
330 CONFIG_INET=y
331 # CONFIG_INET_LRO is not set
332 # CONFIG_IPV6 is not set
333 -# CONFIG_PREVENT_FIRMWARE_BUILD is not set
334 CONFIG_MTD=y
335 -CONFIG_MTD_CONCAT=y
336 -CONFIG_MTD_PARTITIONS=y
337 CONFIG_MTD_CMDLINE_PARTS=y
338 CONFIG_MTD_CHAR=y
339 CONFIG_MTD_BLOCK=y
340 @@ -45,41 +44,55 @@ CONFIG_MTD_CFI_AMDSTD=y
341 CONFIG_MTD_RAM=y
342 CONFIG_MTD_UCLINUX=y
343 CONFIG_PROC_DEVICETREE=y
344 -CONFIG_BLK_DEV_NBD=y
345 CONFIG_BLK_DEV_RAM=y
346 +CONFIG_BLK_DEV_RAM_SIZE=8192
347 CONFIG_NETDEVICES=y
348 -CONFIG_NET_ETHERNET=y
349 +CONFIG_XILINX_EMACLITE=y
350 +CONFIG_XILINX_LL_TEMAC=y
351 # CONFIG_INPUT is not set
352 # CONFIG_SERIO is not set
353 # CONFIG_VT is not set
354 +CONFIG_SERIAL_8250=y
355 +CONFIG_SERIAL_8250_CONSOLE=y
356 CONFIG_SERIAL_UARTLITE=y
357 CONFIG_SERIAL_UARTLITE_CONSOLE=y
358 -CONFIG_HW_RANDOM=y
359 +# CONFIG_HW_RANDOM is not set
360 +CONFIG_XILINX_HWICAP=y
361 +CONFIG_I2C=y
362 +CONFIG_I2C_XILINX=y
363 +CONFIG_SPI=y
364 +CONFIG_SPI_XILINX=y
365 +CONFIG_GPIOLIB=y
366 +CONFIG_GPIO_SYSFS=y
367 +CONFIG_GPIO_XILINX=y
368 # CONFIG_HWMON is not set
369 -CONFIG_VIDEO_OUTPUT_CONTROL=y
370 +CONFIG_WATCHDOG=y
371 +CONFIG_XILINX_WATCHDOG=y
372 +CONFIG_FB=y
373 +CONFIG_FB_XILINX=y
374 +# CONFIG_USB_SUPPORT is not set
375 +CONFIG_UIO=y
376 +CONFIG_UIO_PDRV=y
377 +CONFIG_UIO_PDRV_GENIRQ=y
378 +CONFIG_UIO_DMEM_GENIRQ=y
379 CONFIG_EXT2_FS=y
380 # CONFIG_DNOTIFY is not set
381 CONFIG_CRAMFS=y
382 CONFIG_ROMFS_FS=y
383 CONFIG_NFS_FS=y
384 -CONFIG_NFS_V3=y
385 CONFIG_NFS_V3_ACL=y
386 -CONFIG_UNUSED_SYMBOLS=y
387 -CONFIG_DEBUG_FS=y
388 -CONFIG_DEBUG_KERNEL=y
389 -CONFIG_DEBUG_SHIRQ=y
390 +CONFIG_NLS=y
391 CONFIG_DETECT_HUNG_TASK=y
392 -CONFIG_SCHEDSTATS=y
393 -CONFIG_TIMER_STATS=y
394 -CONFIG_DEBUG_OBJECTS=y
395 -CONFIG_DEBUG_OBJECTS_SELFTEST=y
396 -CONFIG_DEBUG_OBJECTS_FREE=y
397 -CONFIG_DEBUG_OBJECTS_TIMERS=y
398 +CONFIG_DEBUG_SLAB=y
399 +CONFIG_DEBUG_SPINLOCK=y
400 CONFIG_DEBUG_INFO=y
401 -CONFIG_DEBUG_LIST=y
402 -CONFIG_DEBUG_SG=y
403 -# CONFIG_RCU_CPU_STALL_DETECTOR is not set
404 -CONFIG_SYSCTL_SYSCALL_CHECK=y
405 CONFIG_EARLY_PRINTK=y
406 +CONFIG_KEYS=y
407 +CONFIG_ENCRYPTED_KEYS=y
408 +CONFIG_KEYS_DEBUG_PROC_KEYS=y
409 +CONFIG_CRYPTO_ECB=y
410 +CONFIG_CRYPTO_MD4=y
411 +CONFIG_CRYPTO_MD5=y
412 +CONFIG_CRYPTO_ARC4=y
413 +CONFIG_CRYPTO_DES=y
414 # CONFIG_CRYPTO_ANSI_CPRNG is not set
415 -# CONFIG_CRC32 is not set
416 diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
417 index ce30e2f..7d36f6e 100644
418 --- a/arch/mips/Kconfig
419 +++ b/arch/mips/Kconfig
420 @@ -24,6 +24,7 @@ config MIPS
421 select HAVE_GENERIC_HARDIRQS
422 select GENERIC_IRQ_PROBE
423 select GENERIC_IRQ_SHOW
424 + select GENERIC_PCI_IOMAP
425 select HAVE_ARCH_JUMP_LABEL
426 select IRQ_FORCED_THREADING
427 select HAVE_MEMBLOCK
428 @@ -2356,7 +2357,6 @@ config PCI
429 bool "Support for PCI controller"
430 depends on HW_HAS_PCI
431 select PCI_DOMAINS
432 - select GENERIC_PCI_IOMAP
433 select NO_GENERIC_PCI_IOPORT_MAP
434 help
435 Find out whether you have a PCI motherboard. PCI is the name of a
436 diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
437 index a58f229..f7b3e1c 100644
438 --- a/arch/mips/include/asm/io.h
439 +++ b/arch/mips/include/asm/io.h
440 @@ -168,6 +168,11 @@ static inline void * isa_bus_to_virt(unsigned long address)
441 extern void __iomem * __ioremap(phys_t offset, phys_t size, unsigned long flags);
442 extern void __iounmap(const volatile void __iomem *addr);
443
444 +#ifndef CONFIG_PCI
445 +struct pci_dev;
446 +static inline void pci_iounmap(struct pci_dev *dev, void __iomem *addr) {}
447 +#endif
448 +
449 static inline void __iomem * __ioremap_mode(phys_t offset, unsigned long size,
450 unsigned long flags)
451 {
452 diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h
453 index da9bd7d..0913b4f 100644
454 --- a/arch/mips/include/asm/page.h
455 +++ b/arch/mips/include/asm/page.h
456 @@ -175,14 +175,15 @@ typedef struct { unsigned long pgprot; } pgprot_t;
457
458 #ifdef CONFIG_FLATMEM
459
460 -#define pfn_valid(pfn) \
461 -({ \
462 - unsigned long __pfn = (pfn); \
463 - /* avoid <linux/bootmem.h> include hell */ \
464 - extern unsigned long min_low_pfn; \
465 - \
466 - __pfn >= min_low_pfn && __pfn < max_mapnr; \
467 -})
468 +#ifndef __ASSEMBLY__
469 +static inline int pfn_valid(unsigned long pfn)
470 +{
471 + /* avoid <linux/mm.h> include hell */
472 + extern unsigned long max_mapnr;
473 +
474 + return pfn >= ARCH_PFN_OFFSET && pfn < max_mapnr;
475 +}
476 +#endif
477
478 #elif defined(CONFIG_SPARSEMEM)
479
480 diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
481 index 6130719..4ec32a6 100644
482 --- a/arch/powerpc/mm/numa.c
483 +++ b/arch/powerpc/mm/numa.c
484 @@ -639,7 +639,7 @@ static void __init parse_drconf_memory(struct device_node *memory)
485 unsigned int n, rc, ranges, is_kexec_kdump = 0;
486 unsigned long lmb_size, base, size, sz;
487 int nid;
488 - struct assoc_arrays aa;
489 + struct assoc_arrays aa = { .arrays = NULL };
490
491 n = of_get_drconf_memory(memory, &dm);
492 if (!n)
493 diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile
494 index a3fc437..4961516 100644
495 --- a/arch/sparc/lib/Makefile
496 +++ b/arch/sparc/lib/Makefile
497 @@ -40,7 +40,7 @@ lib-$(CONFIG_SPARC64) += copy_in_user.o user_fixup.o memmove.o
498 lib-$(CONFIG_SPARC64) += mcount.o ipcsum.o xor.o hweight.o ffs.o
499
500 obj-y += iomap.o
501 -obj-$(CONFIG_SPARC32) += atomic32.o
502 +obj-$(CONFIG_SPARC32) += atomic32.o ucmpdi2.o
503 obj-y += ksyms.o
504 obj-$(CONFIG_SPARC64) += PeeCeeI.o
505 obj-y += usercopy.o
506 diff --git a/arch/sparc/lib/ucmpdi2.c b/arch/sparc/lib/ucmpdi2.c
507 new file mode 100644
508 index 0000000..1e06ed5
509 --- /dev/null
510 +++ b/arch/sparc/lib/ucmpdi2.c
511 @@ -0,0 +1,19 @@
512 +#include <linux/module.h>
513 +#include "libgcc.h"
514 +
515 +word_type __ucmpdi2(unsigned long long a, unsigned long long b)
516 +{
517 + const DWunion au = {.ll = a};
518 + const DWunion bu = {.ll = b};
519 +
520 + if ((unsigned int) au.s.high < (unsigned int) bu.s.high)
521 + return 0;
522 + else if ((unsigned int) au.s.high > (unsigned int) bu.s.high)
523 + return 2;
524 + if ((unsigned int) au.s.low < (unsigned int) bu.s.low)
525 + return 0;
526 + else if ((unsigned int) au.s.low > (unsigned int) bu.s.low)
527 + return 2;
528 + return 1;
529 +}
530 +EXPORT_SYMBOL(__ucmpdi2);
531 diff --git a/arch/xtensa/kernel/Makefile b/arch/xtensa/kernel/Makefile
532 index 2d2728b..491bd9a 100644
533 --- a/arch/xtensa/kernel/Makefile
534 +++ b/arch/xtensa/kernel/Makefile
535 @@ -24,6 +24,7 @@ obj-$(CONFIG_MODULES) += xtensa_ksyms.o module.o
536 # Replicate rules in scripts/Makefile.build
537
538 sed-y = -e 's/\*(\(\.[a-z]*it\|\.ref\|\)\.text)/*(\1.literal \1.text)/g' \
539 + -e 's/\.text\.unlikely/.literal.unlikely .text.unlikely/g' \
540 -e 's/\*(\(\.text\.[a-z]*\))/*(\1.literal \1)/g'
541
542 quiet_cmd__cpp_lds_S = LDS $@
543 diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S
544 index 88ecea3..ee2e208 100644
545 --- a/arch/xtensa/kernel/vmlinux.lds.S
546 +++ b/arch/xtensa/kernel/vmlinux.lds.S
547 @@ -83,7 +83,6 @@ SECTIONS
548
549 _text = .;
550 _stext = .;
551 - _ftext = .;
552
553 .text :
554 {
555 @@ -112,7 +111,7 @@ SECTIONS
556 EXCEPTION_TABLE(16)
557 /* Data section */
558
559 - _fdata = .;
560 + _sdata = .;
561 RW_DATA_SECTION(XCHAL_ICACHE_LINESIZE, PAGE_SIZE, THREAD_SIZE)
562 _edata = .;
563
564 diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
565 index ba150e5..c82af58 100644
566 --- a/arch/xtensa/mm/init.c
567 +++ b/arch/xtensa/mm/init.c
568 @@ -29,7 +29,7 @@
569
570 /* References to section boundaries */
571
572 -extern char _ftext, _etext, _fdata, _edata, _rodata_end;
573 +extern char _stext, _etext, _sdata, _edata, _rodata_end;
574 extern char __init_begin, __init_end;
575
576 /*
577 @@ -197,8 +197,8 @@ void __init mem_init(void)
578 reservedpages++;
579 }
580
581 - codesize = (unsigned long) &_etext - (unsigned long) &_ftext;
582 - datasize = (unsigned long) &_edata - (unsigned long) &_fdata;
583 + codesize = (unsigned long) &_etext - (unsigned long) &_stext;
584 + datasize = (unsigned long) &_edata - (unsigned long) &_sdata;
585 initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin;
586
587 printk("Memory: %luk/%luk available (%ldk kernel code, %ldk reserved, "
588 diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
589 index ab4d990..dc7c5f6 100644
590 --- a/drivers/gpu/drm/i915/intel_lvds.c
591 +++ b/drivers/gpu/drm/i915/intel_lvds.c
592 @@ -408,13 +408,7 @@ static void intel_lvds_prepare(struct drm_encoder *encoder)
593 {
594 struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
595
596 - /*
597 - * Prior to Ironlake, we must disable the pipe if we want to adjust
598 - * the panel fitter. However at all other times we can just reset
599 - * the registers regardless.
600 - */
601 - if (!HAS_PCH_SPLIT(encoder->dev) && intel_lvds->pfit_dirty)
602 - intel_lvds_disable(intel_lvds);
603 + intel_lvds_disable(intel_lvds);
604 }
605
606 static void intel_lvds_commit(struct drm_encoder *encoder)
607 diff --git a/drivers/hid/hid-microsoft.c b/drivers/hid/hid-microsoft.c
608 index 3899989..259b9f4 100644
609 --- a/drivers/hid/hid-microsoft.c
610 +++ b/drivers/hid/hid-microsoft.c
611 @@ -47,9 +47,9 @@ static __u8 *ms_report_fixup(struct hid_device *hdev, __u8 *rdesc,
612 rdesc[559] = 0x45;
613 }
614 /* the same as above (s/usage/physical/) */
615 - if ((quirks & MS_RDESC_3K) && *rsize == 106 &&
616 - !memcmp((char []){ 0x19, 0x00, 0x29, 0xff },
617 - &rdesc[94], 4)) {
618 + if ((quirks & MS_RDESC_3K) && *rsize == 106 && rdesc[94] == 0x19 &&
619 + rdesc[95] == 0x00 && rdesc[96] == 0x29 &&
620 + rdesc[97] == 0xff) {
621 rdesc[94] = 0x35;
622 rdesc[96] = 0x45;
623 }
624 diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
625 index b424a20..ce5f044 100644
626 --- a/drivers/md/raid1.c
627 +++ b/drivers/md/raid1.c
628 @@ -812,17 +812,17 @@ static void allow_barrier(struct r1conf *conf)
629 wake_up(&conf->wait_barrier);
630 }
631
632 -static void freeze_array(struct r1conf *conf)
633 +static void freeze_array(struct r1conf *conf, int extra)
634 {
635 /* stop syncio and normal IO and wait for everything to
636 * go quite.
637 * We increment barrier and nr_waiting, and then
638 - * wait until nr_pending match nr_queued+1
639 + * wait until nr_pending match nr_queued+extra
640 * This is called in the context of one normal IO request
641 * that has failed. Thus any sync request that might be pending
642 * will be blocked by nr_pending, and we need to wait for
643 * pending IO requests to complete or be queued for re-try.
644 - * Thus the number queued (nr_queued) plus this request (1)
645 + * Thus the number queued (nr_queued) plus this request (extra)
646 * must match the number of pending IOs (nr_pending) before
647 * we continue.
648 */
649 @@ -830,7 +830,7 @@ static void freeze_array(struct r1conf *conf)
650 conf->barrier++;
651 conf->nr_waiting++;
652 wait_event_lock_irq(conf->wait_barrier,
653 - conf->nr_pending == conf->nr_queued+1,
654 + conf->nr_pending == conf->nr_queued+extra,
655 conf->resync_lock,
656 flush_pending_writes(conf));
657 spin_unlock_irq(&conf->resync_lock);
658 @@ -1432,8 +1432,8 @@ static int raid1_add_disk(struct mddev *mddev, struct md_rdev *rdev)
659 * we wait for all outstanding requests to complete.
660 */
661 synchronize_sched();
662 - raise_barrier(conf);
663 - lower_barrier(conf);
664 + freeze_array(conf, 0);
665 + unfreeze_array(conf);
666 clear_bit(Unmerged, &rdev->flags);
667 }
668 md_integrity_add_rdev(rdev, mddev);
669 @@ -1481,11 +1481,11 @@ static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev)
670 */
671 struct md_rdev *repl =
672 conf->mirrors[conf->raid_disks + number].rdev;
673 - raise_barrier(conf);
674 + freeze_array(conf, 0);
675 clear_bit(Replacement, &repl->flags);
676 p->rdev = repl;
677 conf->mirrors[conf->raid_disks + number].rdev = NULL;
678 - lower_barrier(conf);
679 + unfreeze_array(conf);
680 clear_bit(WantReplacement, &rdev->flags);
681 } else
682 clear_bit(WantReplacement, &rdev->flags);
683 @@ -2100,7 +2100,7 @@ static void handle_read_error(struct r1conf *conf, struct r1bio *r1_bio)
684 * frozen
685 */
686 if (mddev->ro == 0) {
687 - freeze_array(conf);
688 + freeze_array(conf, 1);
689 fix_read_error(conf, r1_bio->read_disk,
690 r1_bio->sector, r1_bio->sectors);
691 unfreeze_array(conf);
692 @@ -2855,7 +2855,7 @@ static int raid1_reshape(struct mddev *mddev)
693 return -ENOMEM;
694 }
695
696 - raise_barrier(conf);
697 + freeze_array(conf, 0);
698
699 /* ok, everything is stopped */
700 oldpool = conf->r1bio_pool;
701 @@ -2887,7 +2887,7 @@ static int raid1_reshape(struct mddev *mddev)
702 mddev->delta_disks = 0;
703
704 conf->last_used = 0; /* just make sure it is in-range */
705 - lower_barrier(conf);
706 + unfreeze_array(conf);
707
708 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
709 md_wakeup_thread(mddev->thread);
710 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
711 index 54ba531..f7febd8 100644
712 --- a/drivers/md/raid10.c
713 +++ b/drivers/md/raid10.c
714 @@ -952,17 +952,17 @@ static void allow_barrier(struct r10conf *conf)
715 wake_up(&conf->wait_barrier);
716 }
717
718 -static void freeze_array(struct r10conf *conf)
719 +static void freeze_array(struct r10conf *conf, int extra)
720 {
721 /* stop syncio and normal IO and wait for everything to
722 * go quiet.
723 * We increment barrier and nr_waiting, and then
724 - * wait until nr_pending match nr_queued+1
725 + * wait until nr_pending match nr_queued+extra
726 * This is called in the context of one normal IO request
727 * that has failed. Thus any sync request that might be pending
728 * will be blocked by nr_pending, and we need to wait for
729 * pending IO requests to complete or be queued for re-try.
730 - * Thus the number queued (nr_queued) plus this request (1)
731 + * Thus the number queued (nr_queued) plus this request (extra)
732 * must match the number of pending IOs (nr_pending) before
733 * we continue.
734 */
735 @@ -970,7 +970,7 @@ static void freeze_array(struct r10conf *conf)
736 conf->barrier++;
737 conf->nr_waiting++;
738 wait_event_lock_irq(conf->wait_barrier,
739 - conf->nr_pending == conf->nr_queued+1,
740 + conf->nr_pending == conf->nr_queued+extra,
741 conf->resync_lock,
742 flush_pending_writes(conf));
743
744 @@ -1619,8 +1619,8 @@ static int raid10_add_disk(struct mddev *mddev, struct md_rdev *rdev)
745 * we wait for all outstanding requests to complete.
746 */
747 synchronize_sched();
748 - raise_barrier(conf, 0);
749 - lower_barrier(conf);
750 + freeze_array(conf, 0);
751 + unfreeze_array(conf);
752 clear_bit(Unmerged, &rdev->flags);
753 }
754 md_integrity_add_rdev(rdev, mddev);
755 @@ -2410,7 +2410,7 @@ static void handle_read_error(struct mddev *mddev, struct r10bio *r10_bio)
756 r10_bio->devs[slot].bio = NULL;
757
758 if (mddev->ro == 0) {
759 - freeze_array(conf);
760 + freeze_array(conf, 1);
761 fix_read_error(conf, mddev, r10_bio);
762 unfreeze_array(conf);
763 } else
764 diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c
765 index 25723d8..925ab8e 100644
766 --- a/drivers/net/can/usb/peak_usb/pcan_usb.c
767 +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c
768 @@ -649,7 +649,7 @@ static int pcan_usb_decode_data(struct pcan_usb_msg_context *mc, u8 status_len)
769 if ((mc->ptr + rec_len) > mc->end)
770 goto decode_failed;
771
772 - memcpy(cf->data, mc->ptr, rec_len);
773 + memcpy(cf->data, mc->ptr, cf->can_dlc);
774 mc->ptr += rec_len;
775 }
776
777 diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c
778 index 9aa4807..409ed06 100644
779 --- a/drivers/net/wireless/iwlegacy/4965-mac.c
780 +++ b/drivers/net/wireless/iwlegacy/4965-mac.c
781 @@ -4411,12 +4411,12 @@ il4965_irq_tasklet(struct il_priv *il)
782 * is killed. Hence update the killswitch state here. The
783 * rfkill handler will care about restarting if needed.
784 */
785 - if (!test_bit(S_ALIVE, &il->status)) {
786 - if (hw_rf_kill)
787 - set_bit(S_RFKILL, &il->status);
788 - else
789 - clear_bit(S_RFKILL, &il->status);
790 + if (hw_rf_kill) {
791 + set_bit(S_RFKILL, &il->status);
792 + } else {
793 + clear_bit(S_RFKILL, &il->status);
794 wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill);
795 + il_force_reset(il, true);
796 }
797
798 handled |= CSR_INT_BIT_RF_KILL;
799 @@ -5285,6 +5285,9 @@ il4965_alive_start(struct il_priv *il)
800
801 il->active_rate = RATES_MASK;
802
803 + il_power_update_mode(il, true);
804 + D_INFO("Updated power mode\n");
805 +
806 if (il_is_associated(il)) {
807 struct il_rxon_cmd *active_rxon =
808 (struct il_rxon_cmd *)&il->active;
809 @@ -5315,9 +5318,6 @@ il4965_alive_start(struct il_priv *il)
810 D_INFO("ALIVE processing complete.\n");
811 wake_up(&il->wait_command_queue);
812
813 - il_power_update_mode(il, true);
814 - D_INFO("Updated power mode\n");
815 -
816 return;
817
818 restart:
819 diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c
820 index 2ab6b96..ae4befa 100644
821 --- a/drivers/net/wireless/iwlegacy/common.c
822 +++ b/drivers/net/wireless/iwlegacy/common.c
823 @@ -4659,6 +4659,7 @@ il_force_reset(struct il_priv *il, bool external)
824
825 return 0;
826 }
827 +EXPORT_SYMBOL(il_force_reset);
828
829 int
830 il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
831 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
832 index f88ad63..8659cd9 100644
833 --- a/drivers/usb/core/quirks.c
834 +++ b/drivers/usb/core/quirks.c
835 @@ -100,6 +100,12 @@ static const struct usb_device_id usb_quirk_list[] = {
836 { USB_DEVICE(0x04d8, 0x000c), .driver_info =
837 USB_QUIRK_CONFIG_INTF_STRINGS },
838
839 + /* CarrolTouch 4000U */
840 + { USB_DEVICE(0x04e7, 0x0009), .driver_info = USB_QUIRK_RESET_RESUME },
841 +
842 + /* CarrolTouch 4500U */
843 + { USB_DEVICE(0x04e7, 0x0030), .driver_info = USB_QUIRK_RESET_RESUME },
844 +
845 /* Samsung Android phone modem - ID conflict with SPH-I500 */
846 { USB_DEVICE(0x04e8, 0x6601), .driver_info =
847 USB_QUIRK_CONFIG_INTF_STRINGS },
848 diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
849 index 77d974d..cdde45d 100644
850 --- a/drivers/usb/serial/mos7720.c
851 +++ b/drivers/usb/serial/mos7720.c
852 @@ -97,6 +97,7 @@ struct urbtracker {
853 struct list_head urblist_entry;
854 struct kref ref_count;
855 struct urb *urb;
856 + struct usb_ctrlrequest *setup;
857 };
858
859 enum mos7715_pp_modes {
860 @@ -279,6 +280,7 @@ static void destroy_urbtracker(struct kref *kref)
861 struct mos7715_parport *mos_parport = urbtrack->mos_parport;
862 dbg("%s called", __func__);
863 usb_free_urb(urbtrack->urb);
864 + kfree(urbtrack->setup);
865 kfree(urbtrack);
866 kref_put(&mos_parport->ref_count, destroy_mos_parport);
867 }
868 @@ -363,7 +365,6 @@ static int write_parport_reg_nonblock(struct mos7715_parport *mos_parport,
869 struct urbtracker *urbtrack;
870 int ret_val;
871 unsigned long flags;
872 - struct usb_ctrlrequest setup;
873 struct usb_serial *serial = mos_parport->serial;
874 struct usb_device *usbdev = serial->dev;
875 dbg("%s called", __func__);
876 @@ -382,14 +383,20 @@ static int write_parport_reg_nonblock(struct mos7715_parport *mos_parport,
877 kfree(urbtrack);
878 return -ENOMEM;
879 }
880 - setup.bRequestType = (__u8)0x40;
881 - setup.bRequest = (__u8)0x0e;
882 - setup.wValue = get_reg_value(reg, dummy);
883 - setup.wIndex = get_reg_index(reg);
884 - setup.wLength = 0;
885 + urbtrack->setup = kmalloc(sizeof(*urbtrack->setup), GFP_KERNEL);
886 + if (!urbtrack->setup) {
887 + usb_free_urb(urbtrack->urb);
888 + kfree(urbtrack);
889 + return -ENOMEM;
890 + }
891 + urbtrack->setup->bRequestType = (__u8)0x40;
892 + urbtrack->setup->bRequest = (__u8)0x0e;
893 + urbtrack->setup->wValue = get_reg_value(reg, dummy);
894 + urbtrack->setup->wIndex = get_reg_index(reg);
895 + urbtrack->setup->wLength = 0;
896 usb_fill_control_urb(urbtrack->urb, usbdev,
897 usb_sndctrlpipe(usbdev, 0),
898 - (unsigned char *)&setup,
899 + (unsigned char *)urbtrack->setup,
900 NULL, 0, async_complete, urbtrack);
901 kref_init(&urbtrack->ref_count);
902 INIT_LIST_HEAD(&urbtrack->urblist_entry);
903 diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c
904 index aca1790..d0b8f98 100644
905 --- a/fs/ext4/ext4_jbd2.c
906 +++ b/fs/ext4/ext4_jbd2.c
907 @@ -109,10 +109,10 @@ int __ext4_handle_dirty_metadata(const char *where, unsigned int line,
908
909 if (ext4_handle_valid(handle)) {
910 err = jbd2_journal_dirty_metadata(handle, bh);
911 - if (err) {
912 - /* Errors can only happen if there is a bug */
913 - handle->h_err = err;
914 - __ext4_journal_stop(where, line, handle);
915 + /* Errors can only happen if there is a bug */
916 + if (WARN_ON_ONCE(err)) {
917 + ext4_journal_abort_handle(where, line, __func__, bh,
918 + handle, err);
919 }
920 } else {
921 if (inode)
922 diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
923 index 7faaf2a..8df7fd2 100644
924 --- a/fs/proc/task_mmu.c
925 +++ b/fs/proc/task_mmu.c
926 @@ -679,14 +679,14 @@ typedef struct {
927 } pagemap_entry_t;
928
929 struct pagemapread {
930 - int pos, len;
931 + int pos, len; /* units: PM_ENTRY_BYTES, not bytes */
932 pagemap_entry_t *buffer;
933 };
934
935 #define PAGEMAP_WALK_SIZE (PMD_SIZE)
936 #define PAGEMAP_WALK_MASK (PMD_MASK)
937
938 -#define PM_ENTRY_BYTES sizeof(u64)
939 +#define PM_ENTRY_BYTES sizeof(pagemap_entry_t)
940 #define PM_STATUS_BITS 3
941 #define PM_STATUS_OFFSET (64 - PM_STATUS_BITS)
942 #define PM_STATUS_MASK (((1LL << PM_STATUS_BITS) - 1) << PM_STATUS_OFFSET)
943 @@ -913,8 +913,8 @@ static ssize_t pagemap_read(struct file *file, char __user *buf,
944 if (!count)
945 goto out_task;
946
947 - pm.len = PM_ENTRY_BYTES * (PAGEMAP_WALK_SIZE >> PAGE_SHIFT);
948 - pm.buffer = kmalloc(pm.len, GFP_TEMPORARY);
949 + pm.len = (PAGEMAP_WALK_SIZE >> PAGE_SHIFT);
950 + pm.buffer = kmalloc(pm.len * PM_ENTRY_BYTES, GFP_TEMPORARY);
951 ret = -ENOMEM;
952 if (!pm.buffer)
953 goto out_task;
954 diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
955 index 2c36a71..6baa73d 100644
956 --- a/include/linux/hugetlb.h
957 +++ b/include/linux/hugetlb.h
958 @@ -293,6 +293,17 @@ static inline unsigned hstate_index_to_shift(unsigned index)
959 return hstates[index].order + PAGE_SHIFT;
960 }
961
962 +pgoff_t __basepage_index(struct page *page);
963 +
964 +/* Return page->index in PAGE_SIZE units */
965 +static inline pgoff_t basepage_index(struct page *page)
966 +{
967 + if (!PageCompound(page))
968 + return page->index;
969 +
970 + return __basepage_index(page);
971 +}
972 +
973 #else /* CONFIG_HUGETLB_PAGE */
974 struct hstate {};
975 #define alloc_huge_page_node(h, nid) NULL
976 @@ -311,6 +322,11 @@ static inline unsigned int pages_per_huge_page(struct hstate *h)
977 return 1;
978 }
979 #define hstate_index_to_shift(index) 0
980 +
981 +static inline pgoff_t basepage_index(struct page *page)
982 +{
983 + return page->index;
984 +}
985 #endif
986
987 #endif /* _LINUX_HUGETLB_H */
988 diff --git a/kernel/futex.c b/kernel/futex.c
989 index 8879430..f0ee318 100644
990 --- a/kernel/futex.c
991 +++ b/kernel/futex.c
992 @@ -60,6 +60,7 @@
993 #include <linux/pid.h>
994 #include <linux/nsproxy.h>
995 #include <linux/ptrace.h>
996 +#include <linux/hugetlb.h>
997
998 #include <asm/futex.h>
999
1000 @@ -363,7 +364,7 @@ again:
1001 } else {
1002 key->both.offset |= FUT_OFF_INODE; /* inode-based key */
1003 key->shared.inode = page_head->mapping->host;
1004 - key->shared.pgoff = page_head->index;
1005 + key->shared.pgoff = basepage_index(page);
1006 }
1007
1008 get_futex_key_refs(key);
1009 diff --git a/mm/hugetlb.c b/mm/hugetlb.c
1010 index a692439..af20b77 100644
1011 --- a/mm/hugetlb.c
1012 +++ b/mm/hugetlb.c
1013 @@ -679,6 +679,23 @@ int PageHuge(struct page *page)
1014 }
1015 EXPORT_SYMBOL_GPL(PageHuge);
1016
1017 +pgoff_t __basepage_index(struct page *page)
1018 +{
1019 + struct page *page_head = compound_head(page);
1020 + pgoff_t index = page_index(page_head);
1021 + unsigned long compound_idx;
1022 +
1023 + if (!PageHuge(page_head))
1024 + return page_index(page);
1025 +
1026 + if (compound_order(page_head) >= MAX_ORDER)
1027 + compound_idx = page_to_pfn(page) - page_to_pfn(page_head);
1028 + else
1029 + compound_idx = page - page_head;
1030 +
1031 + return (index << compound_order(page_head)) + compound_idx;
1032 +}
1033 +
1034 static struct page *alloc_fresh_huge_page_node(struct hstate *h, int nid)
1035 {
1036 struct page *page;
1037 diff --git a/mm/nommu.c b/mm/nommu.c
1038 index b0956e3..d3afb47 100644
1039 --- a/mm/nommu.c
1040 +++ b/mm/nommu.c
1041 @@ -1856,6 +1856,16 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
1042 }
1043 EXPORT_SYMBOL(remap_pfn_range);
1044
1045 +int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)
1046 +{
1047 + unsigned long pfn = start >> PAGE_SHIFT;
1048 + unsigned long vm_len = vma->vm_end - vma->vm_start;
1049 +
1050 + pfn += vma->vm_pgoff;
1051 + return io_remap_pfn_range(vma, vma->vm_start, pfn, vm_len, vma->vm_page_prot);
1052 +}
1053 +EXPORT_SYMBOL(vm_iomap_memory);
1054 +
1055 int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
1056 unsigned long pgoff)
1057 {
1058 diff --git a/net/key/af_key.c b/net/key/af_key.c
1059 index 60109f4..2f3ce93 100644
1060 --- a/net/key/af_key.c
1061 +++ b/net/key/af_key.c
1062 @@ -2687,6 +2687,7 @@ static int key_notify_policy_flush(const struct km_event *c)
1063 hdr->sadb_msg_pid = c->pid;
1064 hdr->sadb_msg_version = PF_KEY_V2;
1065 hdr->sadb_msg_errno = (uint8_t) 0;
1066 + hdr->sadb_msg_satype = SADB_SATYPE_UNSPEC;
1067 hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t));
1068 hdr->sadb_msg_reserved = 0;
1069 pfkey_broadcast(skb_out, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net);
1070 diff --git a/sound/oss/Kconfig b/sound/oss/Kconfig
1071 index 5849b12..1a96402 100644
1072 --- a/sound/oss/Kconfig
1073 +++ b/sound/oss/Kconfig
1074 @@ -250,6 +250,7 @@ config MSND_FIFOSIZE
1075 menuconfig SOUND_OSS
1076 tristate "OSS sound modules"
1077 depends on ISA_DMA_API && VIRT_TO_BUS
1078 + depends on !GENERIC_ISA_DMA_SUPPORT_BROKEN
1079 help
1080 OSS is the Open Sound System suite of sound card drivers. They make
1081 sound programming easier since they provide a common API. Say Y or