diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-07-10 17:25:59 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-07-10 17:25:59 -0400 |
| commit | ac3f482236793c75caae2c2ebb3f3e5f8b7393e1 (patch) | |
| tree | f769225f9a77ae1e026b18d3d9260f5e5aefe99d | |
| parent | 85be928c4101670f99cdd7c927798aa4dcbb3168 (diff) | |
| parent | f39d1b9792881ce4eb982ec8cc65258bf95674b5 (diff) | |
Merge branch 'core-fixes-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'core-fixes-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
dma-debug: Fix the overlap() function to be correct and readable
oprofile: reset bt_lost_no_mapping with other stats
x86/oprofile: rename kernel parameter for architectural perfmon to arch_perfmon
signals: declare sys_rt_tgsigqueueinfo in syscalls.h
rcu: Mark Hierarchical RCU no longer experimental
dma-debug: Put all hash-chain locks into the same lock class
dma-debug: fix off-by-one error in overlap function
| -rw-r--r-- | Documentation/kernel-parameters.txt | 4 | ||||
| -rw-r--r-- | arch/x86/oprofile/nmi_int.c | 2 | ||||
| -rw-r--r-- | drivers/oprofile/oprofile_stats.c | 1 | ||||
| -rw-r--r-- | include/linux/syscalls.h | 2 | ||||
| -rw-r--r-- | kernel/rcutree.c | 3 | ||||
| -rw-r--r-- | lib/dma-debug.c | 26 |
6 files changed, 20 insertions, 18 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index d77fbd8b79ac..dd1a6d4bb747 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -1720,8 +1720,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 1720 | oprofile.cpu_type= Force an oprofile cpu type | 1720 | oprofile.cpu_type= Force an oprofile cpu type |
| 1721 | This might be useful if you have an older oprofile | 1721 | This might be useful if you have an older oprofile |
| 1722 | userland or if you want common events. | 1722 | userland or if you want common events. |
| 1723 | Format: { archperfmon } | 1723 | Format: { arch_perfmon } |
| 1724 | archperfmon: [X86] Force use of architectural | 1724 | arch_perfmon: [X86] Force use of architectural |
| 1725 | perfmon on Intel CPUs instead of the | 1725 | perfmon on Intel CPUs instead of the |
| 1726 | CPU specific event set. | 1726 | CPU specific event set. |
| 1727 | 1727 | ||
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index b07dd8d0b321..89b9a5cd63da 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c | |||
| @@ -390,7 +390,7 @@ static int __init p4_init(char **cpu_type) | |||
| 390 | static int force_arch_perfmon; | 390 | static int force_arch_perfmon; |
| 391 | static int force_cpu_type(const char *str, struct kernel_param *kp) | 391 | static int force_cpu_type(const char *str, struct kernel_param *kp) |
| 392 | { | 392 | { |
| 393 | if (!strcmp(str, "archperfmon")) { | 393 | if (!strcmp(str, "arch_perfmon")) { |
| 394 | force_arch_perfmon = 1; | 394 | force_arch_perfmon = 1; |
| 395 | printk(KERN_INFO "oprofile: forcing architectural perfmon\n"); | 395 | printk(KERN_INFO "oprofile: forcing architectural perfmon\n"); |
| 396 | } | 396 | } |
diff --git a/drivers/oprofile/oprofile_stats.c b/drivers/oprofile/oprofile_stats.c index e1f6ce03705e..3c2270a8300c 100644 --- a/drivers/oprofile/oprofile_stats.c +++ b/drivers/oprofile/oprofile_stats.c | |||
| @@ -33,6 +33,7 @@ void oprofile_reset_stats(void) | |||
| 33 | atomic_set(&oprofile_stats.sample_lost_no_mm, 0); | 33 | atomic_set(&oprofile_stats.sample_lost_no_mm, 0); |
| 34 | atomic_set(&oprofile_stats.sample_lost_no_mapping, 0); | 34 | atomic_set(&oprofile_stats.sample_lost_no_mapping, 0); |
| 35 | atomic_set(&oprofile_stats.event_lost_overflow, 0); | 35 | atomic_set(&oprofile_stats.event_lost_overflow, 0); |
| 36 | atomic_set(&oprofile_stats.bt_lost_no_mapping, 0); | ||
| 36 | } | 37 | } |
| 37 | 38 | ||
| 38 | 39 | ||
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index fa4242cdade8..80de7003d8c2 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -321,6 +321,8 @@ asmlinkage long sys_rt_sigtimedwait(const sigset_t __user *uthese, | |||
| 321 | siginfo_t __user *uinfo, | 321 | siginfo_t __user *uinfo, |
| 322 | const struct timespec __user *uts, | 322 | const struct timespec __user *uts, |
| 323 | size_t sigsetsize); | 323 | size_t sigsetsize); |
| 324 | asmlinkage long sys_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, | ||
| 325 | siginfo_t __user *uinfo); | ||
| 324 | asmlinkage long sys_kill(int pid, int sig); | 326 | asmlinkage long sys_kill(int pid, int sig); |
| 325 | asmlinkage long sys_tgkill(int tgid, int pid, int sig); | 327 | asmlinkage long sys_tgkill(int tgid, int pid, int sig); |
| 326 | asmlinkage long sys_tkill(int pid, int sig); | 328 | asmlinkage long sys_tkill(int pid, int sig); |
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index 0dccfbba6d26..7717b95c2027 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
| @@ -1533,7 +1533,7 @@ void __init __rcu_init(void) | |||
| 1533 | int j; | 1533 | int j; |
| 1534 | struct rcu_node *rnp; | 1534 | struct rcu_node *rnp; |
| 1535 | 1535 | ||
| 1536 | printk(KERN_WARNING "Experimental hierarchical RCU implementation.\n"); | 1536 | printk(KERN_INFO "Hierarchical RCU implementation.\n"); |
| 1537 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | 1537 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR |
| 1538 | printk(KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n"); | 1538 | printk(KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n"); |
| 1539 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | 1539 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ |
| @@ -1546,7 +1546,6 @@ void __init __rcu_init(void) | |||
| 1546 | rcu_cpu_notify(&rcu_nb, CPU_UP_PREPARE, (void *)(long)i); | 1546 | rcu_cpu_notify(&rcu_nb, CPU_UP_PREPARE, (void *)(long)i); |
| 1547 | /* Register notifier for non-boot CPUs */ | 1547 | /* Register notifier for non-boot CPUs */ |
| 1548 | register_cpu_notifier(&rcu_nb); | 1548 | register_cpu_notifier(&rcu_nb); |
| 1549 | printk(KERN_WARNING "Experimental hierarchical RCU init done.\n"); | ||
| 1550 | } | 1549 | } |
| 1551 | 1550 | ||
| 1552 | module_param(blimit, int, 0); | 1551 | module_param(blimit, int, 0); |
diff --git a/lib/dma-debug.c b/lib/dma-debug.c index 3b93129a968c..65b0d99b6d0a 100644 --- a/lib/dma-debug.c +++ b/lib/dma-debug.c | |||
| @@ -716,7 +716,7 @@ void dma_debug_init(u32 num_entries) | |||
| 716 | 716 | ||
| 717 | for (i = 0; i < HASH_SIZE; ++i) { | 717 | for (i = 0; i < HASH_SIZE; ++i) { |
| 718 | INIT_LIST_HEAD(&dma_entry_hash[i].list); | 718 | INIT_LIST_HEAD(&dma_entry_hash[i].list); |
| 719 | dma_entry_hash[i].lock = SPIN_LOCK_UNLOCKED; | 719 | spin_lock_init(&dma_entry_hash[i].lock); |
| 720 | } | 720 | } |
| 721 | 721 | ||
| 722 | if (dma_debug_fs_init() != 0) { | 722 | if (dma_debug_fs_init() != 0) { |
| @@ -856,22 +856,21 @@ static void check_for_stack(struct device *dev, void *addr) | |||
| 856 | "stack [addr=%p]\n", addr); | 856 | "stack [addr=%p]\n", addr); |
| 857 | } | 857 | } |
| 858 | 858 | ||
| 859 | static inline bool overlap(void *addr, u64 size, void *start, void *end) | 859 | static inline bool overlap(void *addr, unsigned long len, void *start, void *end) |
| 860 | { | 860 | { |
| 861 | void *addr2 = (char *)addr + size; | 861 | unsigned long a1 = (unsigned long)addr; |
| 862 | unsigned long b1 = a1 + len; | ||
| 863 | unsigned long a2 = (unsigned long)start; | ||
| 864 | unsigned long b2 = (unsigned long)end; | ||
| 862 | 865 | ||
| 863 | return ((addr >= start && addr < end) || | 866 | return !(b1 <= a2 || a1 >= b2); |
| 864 | (addr2 >= start && addr2 < end) || | ||
| 865 | ((addr < start) && (addr2 >= end))); | ||
| 866 | } | 867 | } |
| 867 | 868 | ||
| 868 | static void check_for_illegal_area(struct device *dev, void *addr, u64 size) | 869 | static void check_for_illegal_area(struct device *dev, void *addr, unsigned long len) |
| 869 | { | 870 | { |
| 870 | if (overlap(addr, size, _text, _etext) || | 871 | if (overlap(addr, len, _text, _etext) || |
| 871 | overlap(addr, size, __start_rodata, __end_rodata)) | 872 | overlap(addr, len, __start_rodata, __end_rodata)) |
| 872 | err_printk(dev, NULL, "DMA-API: device driver maps " | 873 | err_printk(dev, NULL, "DMA-API: device driver maps memory from kernel text or rodata [addr=%p] [len=%lu]\n", addr, len); |
| 873 | "memory from kernel text or rodata " | ||
| 874 | "[addr=%p] [size=%llu]\n", addr, size); | ||
| 875 | } | 874 | } |
| 876 | 875 | ||
| 877 | static void check_sync(struct device *dev, | 876 | static void check_sync(struct device *dev, |
| @@ -969,7 +968,8 @@ void debug_dma_map_page(struct device *dev, struct page *page, size_t offset, | |||
| 969 | entry->type = dma_debug_single; | 968 | entry->type = dma_debug_single; |
| 970 | 969 | ||
| 971 | if (!PageHighMem(page)) { | 970 | if (!PageHighMem(page)) { |
| 972 | void *addr = ((char *)page_address(page)) + offset; | 971 | void *addr = page_address(page) + offset; |
| 972 | |||
| 973 | check_for_stack(dev, addr); | 973 | check_for_stack(dev, addr); |
| 974 | check_for_illegal_area(dev, addr, size); | 974 | check_for_illegal_area(dev, addr, size); |
| 975 | } | 975 | } |
