mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-27 09:11:49 +00:00
1094 lines
33 KiB
Diff
1094 lines
33 KiB
Diff
diff --git a/Makefile b/Makefile
|
|
index b19d508..efa1453 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -1,6 +1,6 @@
|
|
VERSION = 3
|
|
PATCHLEVEL = 4
|
|
-SUBLEVEL = 58
|
|
+SUBLEVEL = 59
|
|
EXTRAVERSION =
|
|
NAME = Saber-toothed Squirrel
|
|
|
|
diff --git a/arch/alpha/Makefile b/arch/alpha/Makefile
|
|
index 4759fe7..2cc3cc5 100644
|
|
--- a/arch/alpha/Makefile
|
|
+++ b/arch/alpha/Makefile
|
|
@@ -12,7 +12,7 @@ NM := $(NM) -B
|
|
|
|
LDFLAGS_vmlinux := -static -N #-relax
|
|
CHECKFLAGS += -D__alpha__ -m64
|
|
-cflags-y := -pipe -mno-fp-regs -ffixed-8 -msmall-data
|
|
+cflags-y := -pipe -mno-fp-regs -ffixed-8
|
|
cflags-y += $(call cc-option, -fno-jump-tables)
|
|
|
|
cpuflags-$(CONFIG_ALPHA_EV4) := -mcpu=ev4
|
|
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
|
|
index a99ed7a..ac73066 100644
|
|
--- a/arch/arm/kernel/perf_event.c
|
|
+++ b/arch/arm/kernel/perf_event.c
|
|
@@ -109,7 +109,12 @@ armpmu_map_cache_event(const unsigned (*cache_map)
|
|
static int
|
|
armpmu_map_event(const unsigned (*event_map)[PERF_COUNT_HW_MAX], u64 config)
|
|
{
|
|
- int mapping = (*event_map)[config];
|
|
+ int mapping;
|
|
+
|
|
+ if (config >= PERF_COUNT_HW_MAX)
|
|
+ return -ENOENT;
|
|
+
|
|
+ mapping = (*event_map)[config];
|
|
return mapping == HW_OP_UNSUPPORTED ? -ENOENT : mapping;
|
|
}
|
|
|
|
@@ -319,6 +324,9 @@ validate_event(struct pmu_hw_events *hw_events,
|
|
struct hw_perf_event fake_event = event->hw;
|
|
struct pmu *leader_pmu = event->group_leader->pmu;
|
|
|
|
+ if (is_software_event(event))
|
|
+ return 1;
|
|
+
|
|
if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF)
|
|
return 1;
|
|
|
|
diff --git a/arch/cris/arch-v10/lib/Makefile b/arch/cris/arch-v10/lib/Makefile
|
|
index 36e9a9c..725153e 100644
|
|
--- a/arch/cris/arch-v10/lib/Makefile
|
|
+++ b/arch/cris/arch-v10/lib/Makefile
|
|
@@ -2,8 +2,5 @@
|
|
# Makefile for Etrax-specific library files..
|
|
#
|
|
|
|
-
|
|
-EXTRA_AFLAGS := -traditional
|
|
-
|
|
lib-y = checksum.o checksumcopy.o string.o usercopy.o memset.o csumcpfruser.o
|
|
|
|
diff --git a/arch/cris/include/asm/posix_types.h b/arch/cris/include/asm/posix_types.h
|
|
index 72b3cd6..234891c 100644
|
|
--- a/arch/cris/include/asm/posix_types.h
|
|
+++ b/arch/cris/include/asm/posix_types.h
|
|
@@ -33,4 +33,6 @@ typedef int __kernel_ptrdiff_t;
|
|
typedef unsigned short __kernel_old_dev_t;
|
|
#define __kernel_old_dev_t __kernel_old_dev_t
|
|
|
|
+#include <asm-generic/posix_types.h>
|
|
+
|
|
#endif /* __ARCH_CRIS_POSIX_TYPES_H */
|
|
diff --git a/arch/cris/kernel/vmlinux.lds.S b/arch/cris/kernel/vmlinux.lds.S
|
|
index a6990cb..a68b983 100644
|
|
--- a/arch/cris/kernel/vmlinux.lds.S
|
|
+++ b/arch/cris/kernel/vmlinux.lds.S
|
|
@@ -52,6 +52,7 @@ SECTIONS
|
|
|
|
EXCEPTION_TABLE(4)
|
|
|
|
+ _sdata = .;
|
|
RODATA
|
|
|
|
. = ALIGN (4);
|
|
diff --git a/arch/frv/include/asm/thread_info.h b/arch/frv/include/asm/thread_info.h
|
|
index 92d83ea..aaea388 100644
|
|
--- a/arch/frv/include/asm/thread_info.h
|
|
+++ b/arch/frv/include/asm/thread_info.h
|
|
@@ -21,8 +21,6 @@
|
|
|
|
#define THREAD_SIZE 8192
|
|
|
|
-#define __HAVE_ARCH_TASK_STRUCT_ALLOCATOR
|
|
-
|
|
/*
|
|
* low level task data that entry.S needs immediate access to
|
|
* - this struct should fit entirely inside of one cache line
|
|
diff --git a/arch/frv/kernel/process.c b/arch/frv/kernel/process.c
|
|
index 3941cbc..c4dc7a4 100644
|
|
--- a/arch/frv/kernel/process.c
|
|
+++ b/arch/frv/kernel/process.c
|
|
@@ -44,21 +44,6 @@ asmlinkage void ret_from_fork(void);
|
|
void (*pm_power_off)(void);
|
|
EXPORT_SYMBOL(pm_power_off);
|
|
|
|
-struct task_struct *alloc_task_struct_node(int node)
|
|
-{
|
|
- struct task_struct *p = kmalloc_node(THREAD_SIZE, GFP_KERNEL, node);
|
|
-
|
|
- if (p)
|
|
- atomic_set((atomic_t *)(p+1), 1);
|
|
- return p;
|
|
-}
|
|
-
|
|
-void free_task_struct(struct task_struct *p)
|
|
-{
|
|
- if (atomic_dec_and_test((atomic_t *)(p+1)))
|
|
- kfree(p);
|
|
-}
|
|
-
|
|
static void core_sleep_idle(void)
|
|
{
|
|
#ifdef LED_DEBUG_SLEEP
|
|
diff --git a/arch/m68k/emu/natfeat.c b/arch/m68k/emu/natfeat.c
|
|
index 2291a7d..fa277ae 100644
|
|
--- a/arch/m68k/emu/natfeat.c
|
|
+++ b/arch/m68k/emu/natfeat.c
|
|
@@ -18,9 +18,11 @@
|
|
#include <asm/machdep.h>
|
|
#include <asm/natfeat.h>
|
|
|
|
+extern long nf_get_id2(const char *feature_name);
|
|
+
|
|
asm("\n"
|
|
-" .global nf_get_id,nf_call\n"
|
|
-"nf_get_id:\n"
|
|
+" .global nf_get_id2,nf_call\n"
|
|
+"nf_get_id2:\n"
|
|
" .short 0x7300\n"
|
|
" rts\n"
|
|
"nf_call:\n"
|
|
@@ -29,12 +31,25 @@ asm("\n"
|
|
"1: moveq.l #0,%d0\n"
|
|
" rts\n"
|
|
" .section __ex_table,\"a\"\n"
|
|
-" .long nf_get_id,1b\n"
|
|
+" .long nf_get_id2,1b\n"
|
|
" .long nf_call,1b\n"
|
|
" .previous");
|
|
-EXPORT_SYMBOL_GPL(nf_get_id);
|
|
EXPORT_SYMBOL_GPL(nf_call);
|
|
|
|
+long nf_get_id(const char *feature_name)
|
|
+{
|
|
+ /* feature_name may be in vmalloc()ed memory, so make a copy */
|
|
+ char name_copy[32];
|
|
+ size_t n;
|
|
+
|
|
+ n = strlcpy(name_copy, feature_name, sizeof(name_copy));
|
|
+ if (n >= sizeof(name_copy))
|
|
+ return 0;
|
|
+
|
|
+ return nf_get_id2(name_copy);
|
|
+}
|
|
+EXPORT_SYMBOL_GPL(nf_get_id);
|
|
+
|
|
void nfprint(const char *fmt, ...)
|
|
{
|
|
static char buf[256];
|
|
diff --git a/arch/m68k/include/asm/div64.h b/arch/m68k/include/asm/div64.h
|
|
index 444ea8a..ef881cf 100644
|
|
--- a/arch/m68k/include/asm/div64.h
|
|
+++ b/arch/m68k/include/asm/div64.h
|
|
@@ -15,16 +15,17 @@
|
|
unsigned long long n64; \
|
|
} __n; \
|
|
unsigned long __rem, __upper; \
|
|
+ unsigned long __base = (base); \
|
|
\
|
|
__n.n64 = (n); \
|
|
if ((__upper = __n.n32[0])) { \
|
|
asm ("divul.l %2,%1:%0" \
|
|
- : "=d" (__n.n32[0]), "=d" (__upper) \
|
|
- : "d" (base), "0" (__n.n32[0])); \
|
|
+ : "=d" (__n.n32[0]), "=d" (__upper) \
|
|
+ : "d" (__base), "0" (__n.n32[0])); \
|
|
} \
|
|
asm ("divu.l %2,%1:%0" \
|
|
- : "=d" (__n.n32[1]), "=d" (__rem) \
|
|
- : "d" (base), "1" (__upper), "0" (__n.n32[1])); \
|
|
+ : "=d" (__n.n32[1]), "=d" (__rem) \
|
|
+ : "d" (__base), "1" (__upper), "0" (__n.n32[1])); \
|
|
(n) = __n.n64; \
|
|
__rem; \
|
|
})
|
|
diff --git a/arch/microblaze/configs/mmu_defconfig b/arch/microblaze/configs/mmu_defconfig
|
|
index b3f5eec..a470f57 100644
|
|
--- a/arch/microblaze/configs/mmu_defconfig
|
|
+++ b/arch/microblaze/configs/mmu_defconfig
|
|
@@ -1,25 +1,22 @@
|
|
CONFIG_EXPERIMENTAL=y
|
|
CONFIG_SYSVIPC=y
|
|
+CONFIG_POSIX_MQUEUE=y
|
|
+CONFIG_FHANDLE=y
|
|
+CONFIG_AUDIT=y
|
|
+CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
|
|
CONFIG_IKCONFIG=y
|
|
CONFIG_IKCONFIG_PROC=y
|
|
+CONFIG_SYSFS_DEPRECATED=y
|
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
|
-CONFIG_BLK_DEV_INITRD=y
|
|
-CONFIG_INITRAMFS_SOURCE="rootfs.cpio"
|
|
-CONFIG_INITRAMFS_COMPRESSION_GZIP=y
|
|
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
|
-CONFIG_EXPERT=y
|
|
CONFIG_KALLSYMS_ALL=y
|
|
-CONFIG_KALLSYMS_EXTRA_PASS=y
|
|
-# CONFIG_HOTPLUG is not set
|
|
# CONFIG_BASE_FULL is not set
|
|
-# CONFIG_FUTEX is not set
|
|
-# CONFIG_EPOLL is not set
|
|
-# CONFIG_SIGNALFD is not set
|
|
-# CONFIG_SHMEM is not set
|
|
+CONFIG_EMBEDDED=y
|
|
CONFIG_SLAB=y
|
|
CONFIG_MODULES=y
|
|
CONFIG_MODULE_UNLOAD=y
|
|
# CONFIG_BLK_DEV_BSG is not set
|
|
+CONFIG_PARTITION_ADVANCED=y
|
|
+# CONFIG_EFI_PARTITION is not set
|
|
CONFIG_OPT_LIB_ASM=y
|
|
CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1
|
|
CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR=1
|
|
@@ -37,33 +34,53 @@ CONFIG_UNIX=y
|
|
CONFIG_INET=y
|
|
# CONFIG_INET_LRO is not set
|
|
# CONFIG_IPV6 is not set
|
|
+CONFIG_MTD=y
|
|
CONFIG_PROC_DEVICETREE=y
|
|
CONFIG_BLK_DEV_RAM=y
|
|
CONFIG_BLK_DEV_RAM_SIZE=8192
|
|
CONFIG_NETDEVICES=y
|
|
-CONFIG_NET_ETHERNET=y
|
|
CONFIG_XILINX_EMACLITE=y
|
|
+CONFIG_XILINX_LL_TEMAC=y
|
|
# CONFIG_INPUT is not set
|
|
# CONFIG_SERIO is not set
|
|
# CONFIG_VT is not set
|
|
+CONFIG_SERIAL_8250=y
|
|
+CONFIG_SERIAL_8250_CONSOLE=y
|
|
CONFIG_SERIAL_UARTLITE=y
|
|
CONFIG_SERIAL_UARTLITE_CONSOLE=y
|
|
# CONFIG_HW_RANDOM is not set
|
|
+CONFIG_XILINX_HWICAP=y
|
|
+CONFIG_I2C=y
|
|
+CONFIG_I2C_XILINX=y
|
|
+CONFIG_SPI=y
|
|
+CONFIG_SPI_XILINX=y
|
|
+CONFIG_GPIOLIB=y
|
|
+CONFIG_GPIO_SYSFS=y
|
|
+CONFIG_GPIO_XILINX=y
|
|
# CONFIG_HWMON is not set
|
|
+CONFIG_WATCHDOG=y
|
|
+CONFIG_XILINX_WATCHDOG=y
|
|
+CONFIG_FB=y
|
|
+CONFIG_FB_XILINX=y
|
|
# CONFIG_USB_SUPPORT is not set
|
|
+CONFIG_UIO=y
|
|
+CONFIG_UIO_PDRV=y
|
|
+CONFIG_UIO_PDRV_GENIRQ=y
|
|
+CONFIG_UIO_DMEM_GENIRQ=y
|
|
CONFIG_EXT2_FS=y
|
|
# CONFIG_DNOTIFY is not set
|
|
+CONFIG_CRAMFS=y
|
|
+CONFIG_ROMFS_FS=y
|
|
CONFIG_NFS_FS=y
|
|
-CONFIG_NFS_V3=y
|
|
CONFIG_CIFS=y
|
|
CONFIG_CIFS_STATS=y
|
|
CONFIG_CIFS_STATS2=y
|
|
-CONFIG_PARTITION_ADVANCED=y
|
|
-CONFIG_DEBUG_KERNEL=y
|
|
CONFIG_DETECT_HUNG_TASK=y
|
|
CONFIG_DEBUG_SLAB=y
|
|
CONFIG_DEBUG_SPINLOCK=y
|
|
CONFIG_DEBUG_INFO=y
|
|
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
|
CONFIG_EARLY_PRINTK=y
|
|
+CONFIG_KEYS=y
|
|
+CONFIG_ENCRYPTED_KEYS=y
|
|
+CONFIG_KEYS_DEBUG_PROC_KEYS=y
|
|
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
|
diff --git a/arch/microblaze/configs/nommu_defconfig b/arch/microblaze/configs/nommu_defconfig
|
|
index 0249e4b..5454a6d 100644
|
|
--- a/arch/microblaze/configs/nommu_defconfig
|
|
+++ b/arch/microblaze/configs/nommu_defconfig
|
|
@@ -1,41 +1,40 @@
|
|
CONFIG_EXPERIMENTAL=y
|
|
CONFIG_SYSVIPC=y
|
|
CONFIG_POSIX_MQUEUE=y
|
|
+CONFIG_FHANDLE=y
|
|
+CONFIG_AUDIT=y
|
|
+CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
|
|
CONFIG_BSD_PROCESS_ACCT=y
|
|
CONFIG_BSD_PROCESS_ACCT_V3=y
|
|
CONFIG_IKCONFIG=y
|
|
CONFIG_IKCONFIG_PROC=y
|
|
+CONFIG_SYSFS_DEPRECATED=y
|
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
|
-CONFIG_EXPERT=y
|
|
CONFIG_KALLSYMS_ALL=y
|
|
-CONFIG_KALLSYMS_EXTRA_PASS=y
|
|
-# CONFIG_HOTPLUG is not set
|
|
# CONFIG_BASE_FULL is not set
|
|
+CONFIG_EMBEDDED=y
|
|
CONFIG_SLAB=y
|
|
CONFIG_MODULES=y
|
|
CONFIG_MODULE_UNLOAD=y
|
|
# CONFIG_BLK_DEV_BSG is not set
|
|
-# CONFIG_OPT_LIB_FUNCTION is not set
|
|
+CONFIG_PARTITION_ADVANCED=y
|
|
+# CONFIG_EFI_PARTITION is not set
|
|
CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1
|
|
CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR=1
|
|
CONFIG_XILINX_MICROBLAZE0_USE_BARREL=1
|
|
CONFIG_XILINX_MICROBLAZE0_USE_DIV=1
|
|
CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL=2
|
|
CONFIG_XILINX_MICROBLAZE0_USE_FPU=2
|
|
-CONFIG_HIGH_RES_TIMERS=y
|
|
CONFIG_HZ_100=y
|
|
CONFIG_CMDLINE_BOOL=y
|
|
-CONFIG_BINFMT_FLAT=y
|
|
+CONFIG_CMDLINE_FORCE=y
|
|
CONFIG_NET=y
|
|
CONFIG_PACKET=y
|
|
CONFIG_UNIX=y
|
|
CONFIG_INET=y
|
|
# CONFIG_INET_LRO is not set
|
|
# CONFIG_IPV6 is not set
|
|
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
|
CONFIG_MTD=y
|
|
-CONFIG_MTD_CONCAT=y
|
|
-CONFIG_MTD_PARTITIONS=y
|
|
CONFIG_MTD_CMDLINE_PARTS=y
|
|
CONFIG_MTD_CHAR=y
|
|
CONFIG_MTD_BLOCK=y
|
|
@@ -45,41 +44,55 @@ CONFIG_MTD_CFI_AMDSTD=y
|
|
CONFIG_MTD_RAM=y
|
|
CONFIG_MTD_UCLINUX=y
|
|
CONFIG_PROC_DEVICETREE=y
|
|
-CONFIG_BLK_DEV_NBD=y
|
|
CONFIG_BLK_DEV_RAM=y
|
|
+CONFIG_BLK_DEV_RAM_SIZE=8192
|
|
CONFIG_NETDEVICES=y
|
|
-CONFIG_NET_ETHERNET=y
|
|
+CONFIG_XILINX_EMACLITE=y
|
|
+CONFIG_XILINX_LL_TEMAC=y
|
|
# CONFIG_INPUT is not set
|
|
# CONFIG_SERIO is not set
|
|
# CONFIG_VT is not set
|
|
+CONFIG_SERIAL_8250=y
|
|
+CONFIG_SERIAL_8250_CONSOLE=y
|
|
CONFIG_SERIAL_UARTLITE=y
|
|
CONFIG_SERIAL_UARTLITE_CONSOLE=y
|
|
-CONFIG_HW_RANDOM=y
|
|
+# CONFIG_HW_RANDOM is not set
|
|
+CONFIG_XILINX_HWICAP=y
|
|
+CONFIG_I2C=y
|
|
+CONFIG_I2C_XILINX=y
|
|
+CONFIG_SPI=y
|
|
+CONFIG_SPI_XILINX=y
|
|
+CONFIG_GPIOLIB=y
|
|
+CONFIG_GPIO_SYSFS=y
|
|
+CONFIG_GPIO_XILINX=y
|
|
# CONFIG_HWMON is not set
|
|
-CONFIG_VIDEO_OUTPUT_CONTROL=y
|
|
+CONFIG_WATCHDOG=y
|
|
+CONFIG_XILINX_WATCHDOG=y
|
|
+CONFIG_FB=y
|
|
+CONFIG_FB_XILINX=y
|
|
+# CONFIG_USB_SUPPORT is not set
|
|
+CONFIG_UIO=y
|
|
+CONFIG_UIO_PDRV=y
|
|
+CONFIG_UIO_PDRV_GENIRQ=y
|
|
+CONFIG_UIO_DMEM_GENIRQ=y
|
|
CONFIG_EXT2_FS=y
|
|
# CONFIG_DNOTIFY is not set
|
|
CONFIG_CRAMFS=y
|
|
CONFIG_ROMFS_FS=y
|
|
CONFIG_NFS_FS=y
|
|
-CONFIG_NFS_V3=y
|
|
CONFIG_NFS_V3_ACL=y
|
|
-CONFIG_UNUSED_SYMBOLS=y
|
|
-CONFIG_DEBUG_FS=y
|
|
-CONFIG_DEBUG_KERNEL=y
|
|
-CONFIG_DEBUG_SHIRQ=y
|
|
+CONFIG_NLS=y
|
|
CONFIG_DETECT_HUNG_TASK=y
|
|
-CONFIG_SCHEDSTATS=y
|
|
-CONFIG_TIMER_STATS=y
|
|
-CONFIG_DEBUG_OBJECTS=y
|
|
-CONFIG_DEBUG_OBJECTS_SELFTEST=y
|
|
-CONFIG_DEBUG_OBJECTS_FREE=y
|
|
-CONFIG_DEBUG_OBJECTS_TIMERS=y
|
|
+CONFIG_DEBUG_SLAB=y
|
|
+CONFIG_DEBUG_SPINLOCK=y
|
|
CONFIG_DEBUG_INFO=y
|
|
-CONFIG_DEBUG_LIST=y
|
|
-CONFIG_DEBUG_SG=y
|
|
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
|
-CONFIG_SYSCTL_SYSCALL_CHECK=y
|
|
CONFIG_EARLY_PRINTK=y
|
|
+CONFIG_KEYS=y
|
|
+CONFIG_ENCRYPTED_KEYS=y
|
|
+CONFIG_KEYS_DEBUG_PROC_KEYS=y
|
|
+CONFIG_CRYPTO_ECB=y
|
|
+CONFIG_CRYPTO_MD4=y
|
|
+CONFIG_CRYPTO_MD5=y
|
|
+CONFIG_CRYPTO_ARC4=y
|
|
+CONFIG_CRYPTO_DES=y
|
|
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
|
-# CONFIG_CRC32 is not set
|
|
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
|
|
index ce30e2f..7d36f6e 100644
|
|
--- a/arch/mips/Kconfig
|
|
+++ b/arch/mips/Kconfig
|
|
@@ -24,6 +24,7 @@ config MIPS
|
|
select HAVE_GENERIC_HARDIRQS
|
|
select GENERIC_IRQ_PROBE
|
|
select GENERIC_IRQ_SHOW
|
|
+ select GENERIC_PCI_IOMAP
|
|
select HAVE_ARCH_JUMP_LABEL
|
|
select IRQ_FORCED_THREADING
|
|
select HAVE_MEMBLOCK
|
|
@@ -2356,7 +2357,6 @@ config PCI
|
|
bool "Support for PCI controller"
|
|
depends on HW_HAS_PCI
|
|
select PCI_DOMAINS
|
|
- select GENERIC_PCI_IOMAP
|
|
select NO_GENERIC_PCI_IOPORT_MAP
|
|
help
|
|
Find out whether you have a PCI motherboard. PCI is the name of a
|
|
diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
|
|
index a58f229..f7b3e1c 100644
|
|
--- a/arch/mips/include/asm/io.h
|
|
+++ b/arch/mips/include/asm/io.h
|
|
@@ -168,6 +168,11 @@ static inline void * isa_bus_to_virt(unsigned long address)
|
|
extern void __iomem * __ioremap(phys_t offset, phys_t size, unsigned long flags);
|
|
extern void __iounmap(const volatile void __iomem *addr);
|
|
|
|
+#ifndef CONFIG_PCI
|
|
+struct pci_dev;
|
|
+static inline void pci_iounmap(struct pci_dev *dev, void __iomem *addr) {}
|
|
+#endif
|
|
+
|
|
static inline void __iomem * __ioremap_mode(phys_t offset, unsigned long size,
|
|
unsigned long flags)
|
|
{
|
|
diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h
|
|
index da9bd7d..0913b4f 100644
|
|
--- a/arch/mips/include/asm/page.h
|
|
+++ b/arch/mips/include/asm/page.h
|
|
@@ -175,14 +175,15 @@ typedef struct { unsigned long pgprot; } pgprot_t;
|
|
|
|
#ifdef CONFIG_FLATMEM
|
|
|
|
-#define pfn_valid(pfn) \
|
|
-({ \
|
|
- unsigned long __pfn = (pfn); \
|
|
- /* avoid <linux/bootmem.h> include hell */ \
|
|
- extern unsigned long min_low_pfn; \
|
|
- \
|
|
- __pfn >= min_low_pfn && __pfn < max_mapnr; \
|
|
-})
|
|
+#ifndef __ASSEMBLY__
|
|
+static inline int pfn_valid(unsigned long pfn)
|
|
+{
|
|
+ /* avoid <linux/mm.h> include hell */
|
|
+ extern unsigned long max_mapnr;
|
|
+
|
|
+ return pfn >= ARCH_PFN_OFFSET && pfn < max_mapnr;
|
|
+}
|
|
+#endif
|
|
|
|
#elif defined(CONFIG_SPARSEMEM)
|
|
|
|
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
|
|
index 6130719..4ec32a6 100644
|
|
--- a/arch/powerpc/mm/numa.c
|
|
+++ b/arch/powerpc/mm/numa.c
|
|
@@ -639,7 +639,7 @@ static void __init parse_drconf_memory(struct device_node *memory)
|
|
unsigned int n, rc, ranges, is_kexec_kdump = 0;
|
|
unsigned long lmb_size, base, size, sz;
|
|
int nid;
|
|
- struct assoc_arrays aa;
|
|
+ struct assoc_arrays aa = { .arrays = NULL };
|
|
|
|
n = of_get_drconf_memory(memory, &dm);
|
|
if (!n)
|
|
diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile
|
|
index a3fc437..4961516 100644
|
|
--- a/arch/sparc/lib/Makefile
|
|
+++ b/arch/sparc/lib/Makefile
|
|
@@ -40,7 +40,7 @@ lib-$(CONFIG_SPARC64) += copy_in_user.o user_fixup.o memmove.o
|
|
lib-$(CONFIG_SPARC64) += mcount.o ipcsum.o xor.o hweight.o ffs.o
|
|
|
|
obj-y += iomap.o
|
|
-obj-$(CONFIG_SPARC32) += atomic32.o
|
|
+obj-$(CONFIG_SPARC32) += atomic32.o ucmpdi2.o
|
|
obj-y += ksyms.o
|
|
obj-$(CONFIG_SPARC64) += PeeCeeI.o
|
|
obj-y += usercopy.o
|
|
diff --git a/arch/sparc/lib/ucmpdi2.c b/arch/sparc/lib/ucmpdi2.c
|
|
new file mode 100644
|
|
index 0000000..1e06ed5
|
|
--- /dev/null
|
|
+++ b/arch/sparc/lib/ucmpdi2.c
|
|
@@ -0,0 +1,19 @@
|
|
+#include <linux/module.h>
|
|
+#include "libgcc.h"
|
|
+
|
|
+word_type __ucmpdi2(unsigned long long a, unsigned long long b)
|
|
+{
|
|
+ const DWunion au = {.ll = a};
|
|
+ const DWunion bu = {.ll = b};
|
|
+
|
|
+ if ((unsigned int) au.s.high < (unsigned int) bu.s.high)
|
|
+ return 0;
|
|
+ else if ((unsigned int) au.s.high > (unsigned int) bu.s.high)
|
|
+ return 2;
|
|
+ if ((unsigned int) au.s.low < (unsigned int) bu.s.low)
|
|
+ return 0;
|
|
+ else if ((unsigned int) au.s.low > (unsigned int) bu.s.low)
|
|
+ return 2;
|
|
+ return 1;
|
|
+}
|
|
+EXPORT_SYMBOL(__ucmpdi2);
|
|
diff --git a/arch/xtensa/kernel/Makefile b/arch/xtensa/kernel/Makefile
|
|
index 2d2728b..491bd9a 100644
|
|
--- a/arch/xtensa/kernel/Makefile
|
|
+++ b/arch/xtensa/kernel/Makefile
|
|
@@ -24,6 +24,7 @@ obj-$(CONFIG_MODULES) += xtensa_ksyms.o module.o
|
|
# Replicate rules in scripts/Makefile.build
|
|
|
|
sed-y = -e 's/\*(\(\.[a-z]*it\|\.ref\|\)\.text)/*(\1.literal \1.text)/g' \
|
|
+ -e 's/\.text\.unlikely/.literal.unlikely .text.unlikely/g' \
|
|
-e 's/\*(\(\.text\.[a-z]*\))/*(\1.literal \1)/g'
|
|
|
|
quiet_cmd__cpp_lds_S = LDS $@
|
|
diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S
|
|
index 88ecea3..ee2e208 100644
|
|
--- a/arch/xtensa/kernel/vmlinux.lds.S
|
|
+++ b/arch/xtensa/kernel/vmlinux.lds.S
|
|
@@ -83,7 +83,6 @@ SECTIONS
|
|
|
|
_text = .;
|
|
_stext = .;
|
|
- _ftext = .;
|
|
|
|
.text :
|
|
{
|
|
@@ -112,7 +111,7 @@ SECTIONS
|
|
EXCEPTION_TABLE(16)
|
|
/* Data section */
|
|
|
|
- _fdata = .;
|
|
+ _sdata = .;
|
|
RW_DATA_SECTION(XCHAL_ICACHE_LINESIZE, PAGE_SIZE, THREAD_SIZE)
|
|
_edata = .;
|
|
|
|
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
|
|
index ba150e5..c82af58 100644
|
|
--- a/arch/xtensa/mm/init.c
|
|
+++ b/arch/xtensa/mm/init.c
|
|
@@ -29,7 +29,7 @@
|
|
|
|
/* References to section boundaries */
|
|
|
|
-extern char _ftext, _etext, _fdata, _edata, _rodata_end;
|
|
+extern char _stext, _etext, _sdata, _edata, _rodata_end;
|
|
extern char __init_begin, __init_end;
|
|
|
|
/*
|
|
@@ -197,8 +197,8 @@ void __init mem_init(void)
|
|
reservedpages++;
|
|
}
|
|
|
|
- codesize = (unsigned long) &_etext - (unsigned long) &_ftext;
|
|
- datasize = (unsigned long) &_edata - (unsigned long) &_fdata;
|
|
+ codesize = (unsigned long) &_etext - (unsigned long) &_stext;
|
|
+ datasize = (unsigned long) &_edata - (unsigned long) &_sdata;
|
|
initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin;
|
|
|
|
printk("Memory: %luk/%luk available (%ldk kernel code, %ldk reserved, "
|
|
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
|
|
index ab4d990..dc7c5f6 100644
|
|
--- a/drivers/gpu/drm/i915/intel_lvds.c
|
|
+++ b/drivers/gpu/drm/i915/intel_lvds.c
|
|
@@ -408,13 +408,7 @@ static void intel_lvds_prepare(struct drm_encoder *encoder)
|
|
{
|
|
struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
|
|
|
|
- /*
|
|
- * Prior to Ironlake, we must disable the pipe if we want to adjust
|
|
- * the panel fitter. However at all other times we can just reset
|
|
- * the registers regardless.
|
|
- */
|
|
- if (!HAS_PCH_SPLIT(encoder->dev) && intel_lvds->pfit_dirty)
|
|
- intel_lvds_disable(intel_lvds);
|
|
+ intel_lvds_disable(intel_lvds);
|
|
}
|
|
|
|
static void intel_lvds_commit(struct drm_encoder *encoder)
|
|
diff --git a/drivers/hid/hid-microsoft.c b/drivers/hid/hid-microsoft.c
|
|
index 3899989..259b9f4 100644
|
|
--- a/drivers/hid/hid-microsoft.c
|
|
+++ b/drivers/hid/hid-microsoft.c
|
|
@@ -47,9 +47,9 @@ static __u8 *ms_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
|
rdesc[559] = 0x45;
|
|
}
|
|
/* the same as above (s/usage/physical/) */
|
|
- if ((quirks & MS_RDESC_3K) && *rsize == 106 &&
|
|
- !memcmp((char []){ 0x19, 0x00, 0x29, 0xff },
|
|
- &rdesc[94], 4)) {
|
|
+ if ((quirks & MS_RDESC_3K) && *rsize == 106 && rdesc[94] == 0x19 &&
|
|
+ rdesc[95] == 0x00 && rdesc[96] == 0x29 &&
|
|
+ rdesc[97] == 0xff) {
|
|
rdesc[94] = 0x35;
|
|
rdesc[96] = 0x45;
|
|
}
|
|
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
|
|
index b424a20..ce5f044 100644
|
|
--- a/drivers/md/raid1.c
|
|
+++ b/drivers/md/raid1.c
|
|
@@ -812,17 +812,17 @@ static void allow_barrier(struct r1conf *conf)
|
|
wake_up(&conf->wait_barrier);
|
|
}
|
|
|
|
-static void freeze_array(struct r1conf *conf)
|
|
+static void freeze_array(struct r1conf *conf, int extra)
|
|
{
|
|
/* stop syncio and normal IO and wait for everything to
|
|
* go quite.
|
|
* We increment barrier and nr_waiting, and then
|
|
- * wait until nr_pending match nr_queued+1
|
|
+ * wait until nr_pending match nr_queued+extra
|
|
* This is called in the context of one normal IO request
|
|
* that has failed. Thus any sync request that might be pending
|
|
* will be blocked by nr_pending, and we need to wait for
|
|
* pending IO requests to complete or be queued for re-try.
|
|
- * Thus the number queued (nr_queued) plus this request (1)
|
|
+ * Thus the number queued (nr_queued) plus this request (extra)
|
|
* must match the number of pending IOs (nr_pending) before
|
|
* we continue.
|
|
*/
|
|
@@ -830,7 +830,7 @@ static void freeze_array(struct r1conf *conf)
|
|
conf->barrier++;
|
|
conf->nr_waiting++;
|
|
wait_event_lock_irq(conf->wait_barrier,
|
|
- conf->nr_pending == conf->nr_queued+1,
|
|
+ conf->nr_pending == conf->nr_queued+extra,
|
|
conf->resync_lock,
|
|
flush_pending_writes(conf));
|
|
spin_unlock_irq(&conf->resync_lock);
|
|
@@ -1432,8 +1432,8 @@ static int raid1_add_disk(struct mddev *mddev, struct md_rdev *rdev)
|
|
* we wait for all outstanding requests to complete.
|
|
*/
|
|
synchronize_sched();
|
|
- raise_barrier(conf);
|
|
- lower_barrier(conf);
|
|
+ freeze_array(conf, 0);
|
|
+ unfreeze_array(conf);
|
|
clear_bit(Unmerged, &rdev->flags);
|
|
}
|
|
md_integrity_add_rdev(rdev, mddev);
|
|
@@ -1481,11 +1481,11 @@ static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev)
|
|
*/
|
|
struct md_rdev *repl =
|
|
conf->mirrors[conf->raid_disks + number].rdev;
|
|
- raise_barrier(conf);
|
|
+ freeze_array(conf, 0);
|
|
clear_bit(Replacement, &repl->flags);
|
|
p->rdev = repl;
|
|
conf->mirrors[conf->raid_disks + number].rdev = NULL;
|
|
- lower_barrier(conf);
|
|
+ unfreeze_array(conf);
|
|
clear_bit(WantReplacement, &rdev->flags);
|
|
} else
|
|
clear_bit(WantReplacement, &rdev->flags);
|
|
@@ -2100,7 +2100,7 @@ static void handle_read_error(struct r1conf *conf, struct r1bio *r1_bio)
|
|
* frozen
|
|
*/
|
|
if (mddev->ro == 0) {
|
|
- freeze_array(conf);
|
|
+ freeze_array(conf, 1);
|
|
fix_read_error(conf, r1_bio->read_disk,
|
|
r1_bio->sector, r1_bio->sectors);
|
|
unfreeze_array(conf);
|
|
@@ -2855,7 +2855,7 @@ static int raid1_reshape(struct mddev *mddev)
|
|
return -ENOMEM;
|
|
}
|
|
|
|
- raise_barrier(conf);
|
|
+ freeze_array(conf, 0);
|
|
|
|
/* ok, everything is stopped */
|
|
oldpool = conf->r1bio_pool;
|
|
@@ -2887,7 +2887,7 @@ static int raid1_reshape(struct mddev *mddev)
|
|
mddev->delta_disks = 0;
|
|
|
|
conf->last_used = 0; /* just make sure it is in-range */
|
|
- lower_barrier(conf);
|
|
+ unfreeze_array(conf);
|
|
|
|
set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
|
|
md_wakeup_thread(mddev->thread);
|
|
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
|
|
index 54ba531..f7febd8 100644
|
|
--- a/drivers/md/raid10.c
|
|
+++ b/drivers/md/raid10.c
|
|
@@ -952,17 +952,17 @@ static void allow_barrier(struct r10conf *conf)
|
|
wake_up(&conf->wait_barrier);
|
|
}
|
|
|
|
-static void freeze_array(struct r10conf *conf)
|
|
+static void freeze_array(struct r10conf *conf, int extra)
|
|
{
|
|
/* stop syncio and normal IO and wait for everything to
|
|
* go quiet.
|
|
* We increment barrier and nr_waiting, and then
|
|
- * wait until nr_pending match nr_queued+1
|
|
+ * wait until nr_pending match nr_queued+extra
|
|
* This is called in the context of one normal IO request
|
|
* that has failed. Thus any sync request that might be pending
|
|
* will be blocked by nr_pending, and we need to wait for
|
|
* pending IO requests to complete or be queued for re-try.
|
|
- * Thus the number queued (nr_queued) plus this request (1)
|
|
+ * Thus the number queued (nr_queued) plus this request (extra)
|
|
* must match the number of pending IOs (nr_pending) before
|
|
* we continue.
|
|
*/
|
|
@@ -970,7 +970,7 @@ static void freeze_array(struct r10conf *conf)
|
|
conf->barrier++;
|
|
conf->nr_waiting++;
|
|
wait_event_lock_irq(conf->wait_barrier,
|
|
- conf->nr_pending == conf->nr_queued+1,
|
|
+ conf->nr_pending == conf->nr_queued+extra,
|
|
conf->resync_lock,
|
|
flush_pending_writes(conf));
|
|
|
|
@@ -1619,8 +1619,8 @@ static int raid10_add_disk(struct mddev *mddev, struct md_rdev *rdev)
|
|
* we wait for all outstanding requests to complete.
|
|
*/
|
|
synchronize_sched();
|
|
- raise_barrier(conf, 0);
|
|
- lower_barrier(conf);
|
|
+ freeze_array(conf, 0);
|
|
+ unfreeze_array(conf);
|
|
clear_bit(Unmerged, &rdev->flags);
|
|
}
|
|
md_integrity_add_rdev(rdev, mddev);
|
|
@@ -2410,7 +2410,7 @@ static void handle_read_error(struct mddev *mddev, struct r10bio *r10_bio)
|
|
r10_bio->devs[slot].bio = NULL;
|
|
|
|
if (mddev->ro == 0) {
|
|
- freeze_array(conf);
|
|
+ freeze_array(conf, 1);
|
|
fix_read_error(conf, mddev, r10_bio);
|
|
unfreeze_array(conf);
|
|
} else
|
|
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c
|
|
index 25723d8..925ab8e 100644
|
|
--- a/drivers/net/can/usb/peak_usb/pcan_usb.c
|
|
+++ b/drivers/net/can/usb/peak_usb/pcan_usb.c
|
|
@@ -649,7 +649,7 @@ static int pcan_usb_decode_data(struct pcan_usb_msg_context *mc, u8 status_len)
|
|
if ((mc->ptr + rec_len) > mc->end)
|
|
goto decode_failed;
|
|
|
|
- memcpy(cf->data, mc->ptr, rec_len);
|
|
+ memcpy(cf->data, mc->ptr, cf->can_dlc);
|
|
mc->ptr += rec_len;
|
|
}
|
|
|
|
diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c
|
|
index 9aa4807..409ed06 100644
|
|
--- a/drivers/net/wireless/iwlegacy/4965-mac.c
|
|
+++ b/drivers/net/wireless/iwlegacy/4965-mac.c
|
|
@@ -4411,12 +4411,12 @@ il4965_irq_tasklet(struct il_priv *il)
|
|
* is killed. Hence update the killswitch state here. The
|
|
* rfkill handler will care about restarting if needed.
|
|
*/
|
|
- if (!test_bit(S_ALIVE, &il->status)) {
|
|
- if (hw_rf_kill)
|
|
- set_bit(S_RFKILL, &il->status);
|
|
- else
|
|
- clear_bit(S_RFKILL, &il->status);
|
|
+ if (hw_rf_kill) {
|
|
+ set_bit(S_RFKILL, &il->status);
|
|
+ } else {
|
|
+ clear_bit(S_RFKILL, &il->status);
|
|
wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill);
|
|
+ il_force_reset(il, true);
|
|
}
|
|
|
|
handled |= CSR_INT_BIT_RF_KILL;
|
|
@@ -5285,6 +5285,9 @@ il4965_alive_start(struct il_priv *il)
|
|
|
|
il->active_rate = RATES_MASK;
|
|
|
|
+ il_power_update_mode(il, true);
|
|
+ D_INFO("Updated power mode\n");
|
|
+
|
|
if (il_is_associated(il)) {
|
|
struct il_rxon_cmd *active_rxon =
|
|
(struct il_rxon_cmd *)&il->active;
|
|
@@ -5315,9 +5318,6 @@ il4965_alive_start(struct il_priv *il)
|
|
D_INFO("ALIVE processing complete.\n");
|
|
wake_up(&il->wait_command_queue);
|
|
|
|
- il_power_update_mode(il, true);
|
|
- D_INFO("Updated power mode\n");
|
|
-
|
|
return;
|
|
|
|
restart:
|
|
diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c
|
|
index 2ab6b96..ae4befa 100644
|
|
--- a/drivers/net/wireless/iwlegacy/common.c
|
|
+++ b/drivers/net/wireless/iwlegacy/common.c
|
|
@@ -4659,6 +4659,7 @@ il_force_reset(struct il_priv *il, bool external)
|
|
|
|
return 0;
|
|
}
|
|
+EXPORT_SYMBOL(il_force_reset);
|
|
|
|
int
|
|
il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
|
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
|
|
index f88ad63..8659cd9 100644
|
|
--- a/drivers/usb/core/quirks.c
|
|
+++ b/drivers/usb/core/quirks.c
|
|
@@ -100,6 +100,12 @@ static const struct usb_device_id usb_quirk_list[] = {
|
|
{ USB_DEVICE(0x04d8, 0x000c), .driver_info =
|
|
USB_QUIRK_CONFIG_INTF_STRINGS },
|
|
|
|
+ /* CarrolTouch 4000U */
|
|
+ { USB_DEVICE(0x04e7, 0x0009), .driver_info = USB_QUIRK_RESET_RESUME },
|
|
+
|
|
+ /* CarrolTouch 4500U */
|
|
+ { USB_DEVICE(0x04e7, 0x0030), .driver_info = USB_QUIRK_RESET_RESUME },
|
|
+
|
|
/* Samsung Android phone modem - ID conflict with SPH-I500 */
|
|
{ USB_DEVICE(0x04e8, 0x6601), .driver_info =
|
|
USB_QUIRK_CONFIG_INTF_STRINGS },
|
|
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
|
|
index 77d974d..cdde45d 100644
|
|
--- a/drivers/usb/serial/mos7720.c
|
|
+++ b/drivers/usb/serial/mos7720.c
|
|
@@ -97,6 +97,7 @@ struct urbtracker {
|
|
struct list_head urblist_entry;
|
|
struct kref ref_count;
|
|
struct urb *urb;
|
|
+ struct usb_ctrlrequest *setup;
|
|
};
|
|
|
|
enum mos7715_pp_modes {
|
|
@@ -279,6 +280,7 @@ static void destroy_urbtracker(struct kref *kref)
|
|
struct mos7715_parport *mos_parport = urbtrack->mos_parport;
|
|
dbg("%s called", __func__);
|
|
usb_free_urb(urbtrack->urb);
|
|
+ kfree(urbtrack->setup);
|
|
kfree(urbtrack);
|
|
kref_put(&mos_parport->ref_count, destroy_mos_parport);
|
|
}
|
|
@@ -363,7 +365,6 @@ static int write_parport_reg_nonblock(struct mos7715_parport *mos_parport,
|
|
struct urbtracker *urbtrack;
|
|
int ret_val;
|
|
unsigned long flags;
|
|
- struct usb_ctrlrequest setup;
|
|
struct usb_serial *serial = mos_parport->serial;
|
|
struct usb_device *usbdev = serial->dev;
|
|
dbg("%s called", __func__);
|
|
@@ -382,14 +383,20 @@ static int write_parport_reg_nonblock(struct mos7715_parport *mos_parport,
|
|
kfree(urbtrack);
|
|
return -ENOMEM;
|
|
}
|
|
- setup.bRequestType = (__u8)0x40;
|
|
- setup.bRequest = (__u8)0x0e;
|
|
- setup.wValue = get_reg_value(reg, dummy);
|
|
- setup.wIndex = get_reg_index(reg);
|
|
- setup.wLength = 0;
|
|
+ urbtrack->setup = kmalloc(sizeof(*urbtrack->setup), GFP_KERNEL);
|
|
+ if (!urbtrack->setup) {
|
|
+ usb_free_urb(urbtrack->urb);
|
|
+ kfree(urbtrack);
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+ urbtrack->setup->bRequestType = (__u8)0x40;
|
|
+ urbtrack->setup->bRequest = (__u8)0x0e;
|
|
+ urbtrack->setup->wValue = get_reg_value(reg, dummy);
|
|
+ urbtrack->setup->wIndex = get_reg_index(reg);
|
|
+ urbtrack->setup->wLength = 0;
|
|
usb_fill_control_urb(urbtrack->urb, usbdev,
|
|
usb_sndctrlpipe(usbdev, 0),
|
|
- (unsigned char *)&setup,
|
|
+ (unsigned char *)urbtrack->setup,
|
|
NULL, 0, async_complete, urbtrack);
|
|
kref_init(&urbtrack->ref_count);
|
|
INIT_LIST_HEAD(&urbtrack->urblist_entry);
|
|
diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c
|
|
index aca1790..d0b8f98 100644
|
|
--- a/fs/ext4/ext4_jbd2.c
|
|
+++ b/fs/ext4/ext4_jbd2.c
|
|
@@ -109,10 +109,10 @@ int __ext4_handle_dirty_metadata(const char *where, unsigned int line,
|
|
|
|
if (ext4_handle_valid(handle)) {
|
|
err = jbd2_journal_dirty_metadata(handle, bh);
|
|
- if (err) {
|
|
- /* Errors can only happen if there is a bug */
|
|
- handle->h_err = err;
|
|
- __ext4_journal_stop(where, line, handle);
|
|
+ /* Errors can only happen if there is a bug */
|
|
+ if (WARN_ON_ONCE(err)) {
|
|
+ ext4_journal_abort_handle(where, line, __func__, bh,
|
|
+ handle, err);
|
|
}
|
|
} else {
|
|
if (inode)
|
|
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
|
|
index 7faaf2a..8df7fd2 100644
|
|
--- a/fs/proc/task_mmu.c
|
|
+++ b/fs/proc/task_mmu.c
|
|
@@ -679,14 +679,14 @@ typedef struct {
|
|
} pagemap_entry_t;
|
|
|
|
struct pagemapread {
|
|
- int pos, len;
|
|
+ int pos, len; /* units: PM_ENTRY_BYTES, not bytes */
|
|
pagemap_entry_t *buffer;
|
|
};
|
|
|
|
#define PAGEMAP_WALK_SIZE (PMD_SIZE)
|
|
#define PAGEMAP_WALK_MASK (PMD_MASK)
|
|
|
|
-#define PM_ENTRY_BYTES sizeof(u64)
|
|
+#define PM_ENTRY_BYTES sizeof(pagemap_entry_t)
|
|
#define PM_STATUS_BITS 3
|
|
#define PM_STATUS_OFFSET (64 - PM_STATUS_BITS)
|
|
#define PM_STATUS_MASK (((1LL << PM_STATUS_BITS) - 1) << PM_STATUS_OFFSET)
|
|
@@ -913,8 +913,8 @@ static ssize_t pagemap_read(struct file *file, char __user *buf,
|
|
if (!count)
|
|
goto out_task;
|
|
|
|
- pm.len = PM_ENTRY_BYTES * (PAGEMAP_WALK_SIZE >> PAGE_SHIFT);
|
|
- pm.buffer = kmalloc(pm.len, GFP_TEMPORARY);
|
|
+ pm.len = (PAGEMAP_WALK_SIZE >> PAGE_SHIFT);
|
|
+ pm.buffer = kmalloc(pm.len * PM_ENTRY_BYTES, GFP_TEMPORARY);
|
|
ret = -ENOMEM;
|
|
if (!pm.buffer)
|
|
goto out_task;
|
|
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
|
|
index 2c36a71..6baa73d 100644
|
|
--- a/include/linux/hugetlb.h
|
|
+++ b/include/linux/hugetlb.h
|
|
@@ -293,6 +293,17 @@ static inline unsigned hstate_index_to_shift(unsigned index)
|
|
return hstates[index].order + PAGE_SHIFT;
|
|
}
|
|
|
|
+pgoff_t __basepage_index(struct page *page);
|
|
+
|
|
+/* Return page->index in PAGE_SIZE units */
|
|
+static inline pgoff_t basepage_index(struct page *page)
|
|
+{
|
|
+ if (!PageCompound(page))
|
|
+ return page->index;
|
|
+
|
|
+ return __basepage_index(page);
|
|
+}
|
|
+
|
|
#else /* CONFIG_HUGETLB_PAGE */
|
|
struct hstate {};
|
|
#define alloc_huge_page_node(h, nid) NULL
|
|
@@ -311,6 +322,11 @@ static inline unsigned int pages_per_huge_page(struct hstate *h)
|
|
return 1;
|
|
}
|
|
#define hstate_index_to_shift(index) 0
|
|
+
|
|
+static inline pgoff_t basepage_index(struct page *page)
|
|
+{
|
|
+ return page->index;
|
|
+}
|
|
#endif
|
|
|
|
#endif /* _LINUX_HUGETLB_H */
|
|
diff --git a/kernel/futex.c b/kernel/futex.c
|
|
index 8879430..f0ee318 100644
|
|
--- a/kernel/futex.c
|
|
+++ b/kernel/futex.c
|
|
@@ -60,7 +60,8 @@
|
|
#include <linux/pid.h>
|
|
#include <linux/nsproxy.h>
|
|
#include <linux/ptrace.h>
|
|
+#include <linux/hugetlb.h>
|
|
#include <linux/freezer.h>
|
|
|
|
#include <asm/futex.h>
|
|
|
|
@@ -363,7 +364,7 @@ again:
|
|
} else {
|
|
key->both.offset |= FUT_OFF_INODE; /* inode-based key */
|
|
key->shared.inode = page_head->mapping->host;
|
|
- key->shared.pgoff = page_head->index;
|
|
+ key->shared.pgoff = basepage_index(page);
|
|
}
|
|
|
|
get_futex_key_refs(key);
|
|
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
|
|
index a692439..af20b77 100644
|
|
--- a/mm/hugetlb.c
|
|
+++ b/mm/hugetlb.c
|
|
@@ -679,6 +679,23 @@ int PageHuge(struct page *page)
|
|
}
|
|
EXPORT_SYMBOL_GPL(PageHuge);
|
|
|
|
+pgoff_t __basepage_index(struct page *page)
|
|
+{
|
|
+ struct page *page_head = compound_head(page);
|
|
+ pgoff_t index = page_index(page_head);
|
|
+ unsigned long compound_idx;
|
|
+
|
|
+ if (!PageHuge(page_head))
|
|
+ return page_index(page);
|
|
+
|
|
+ if (compound_order(page_head) >= MAX_ORDER)
|
|
+ compound_idx = page_to_pfn(page) - page_to_pfn(page_head);
|
|
+ else
|
|
+ compound_idx = page - page_head;
|
|
+
|
|
+ return (index << compound_order(page_head)) + compound_idx;
|
|
+}
|
|
+
|
|
static struct page *alloc_fresh_huge_page_node(struct hstate *h, int nid)
|
|
{
|
|
struct page *page;
|
|
diff --git a/mm/nommu.c b/mm/nommu.c
|
|
index b0956e3..d3afb47 100644
|
|
--- a/mm/nommu.c
|
|
+++ b/mm/nommu.c
|
|
@@ -1856,6 +1856,16 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
|
|
}
|
|
EXPORT_SYMBOL(remap_pfn_range);
|
|
|
|
+int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)
|
|
+{
|
|
+ unsigned long pfn = start >> PAGE_SHIFT;
|
|
+ unsigned long vm_len = vma->vm_end - vma->vm_start;
|
|
+
|
|
+ pfn += vma->vm_pgoff;
|
|
+ return io_remap_pfn_range(vma, vma->vm_start, pfn, vm_len, vma->vm_page_prot);
|
|
+}
|
|
+EXPORT_SYMBOL(vm_iomap_memory);
|
|
+
|
|
int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
|
|
unsigned long pgoff)
|
|
{
|
|
diff --git a/net/key/af_key.c b/net/key/af_key.c
|
|
index 60109f4..2f3ce93 100644
|
|
--- a/net/key/af_key.c
|
|
+++ b/net/key/af_key.c
|
|
@@ -2687,6 +2687,7 @@ static int key_notify_policy_flush(const struct km_event *c)
|
|
hdr->sadb_msg_pid = c->pid;
|
|
hdr->sadb_msg_version = PF_KEY_V2;
|
|
hdr->sadb_msg_errno = (uint8_t) 0;
|
|
+ hdr->sadb_msg_satype = SADB_SATYPE_UNSPEC;
|
|
hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t));
|
|
hdr->sadb_msg_reserved = 0;
|
|
pfkey_broadcast(skb_out, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net);
|
|
diff --git a/sound/oss/Kconfig b/sound/oss/Kconfig
|
|
index 5849b12..1a96402 100644
|
|
--- a/sound/oss/Kconfig
|
|
+++ b/sound/oss/Kconfig
|
|
@@ -250,6 +250,7 @@ config MSND_FIFOSIZE
|
|
menuconfig SOUND_OSS
|
|
tristate "OSS sound modules"
|
|
depends on ISA_DMA_API && VIRT_TO_BUS
|
|
+ depends on !GENERIC_ISA_DMA_SUPPORT_BROKEN
|
|
help
|
|
OSS is the Open Sound System suite of sound card drivers. They make
|
|
sound programming easier since they provide a common API. Say Y or
|