Commit ac3f4822 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'core-fixes-for-linus-2' of...

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
parents 85be928c f39d1b97
...@@ -1720,8 +1720,8 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -1720,8 +1720,8 @@ and is between 256 and 4096 characters. It is defined in the file
oprofile.cpu_type= Force an oprofile cpu type oprofile.cpu_type= Force an oprofile cpu type
This might be useful if you have an older oprofile This might be useful if you have an older oprofile
userland or if you want common events. userland or if you want common events.
Format: { archperfmon } Format: { arch_perfmon }
archperfmon: [X86] Force use of architectural arch_perfmon: [X86] Force use of architectural
perfmon on Intel CPUs instead of the perfmon on Intel CPUs instead of the
CPU specific event set. CPU specific event set.
......
...@@ -390,7 +390,7 @@ static int __init p4_init(char **cpu_type) ...@@ -390,7 +390,7 @@ static int __init p4_init(char **cpu_type)
static int force_arch_perfmon; static int force_arch_perfmon;
static int force_cpu_type(const char *str, struct kernel_param *kp) static int force_cpu_type(const char *str, struct kernel_param *kp)
{ {
if (!strcmp(str, "archperfmon")) { if (!strcmp(str, "arch_perfmon")) {
force_arch_perfmon = 1; force_arch_perfmon = 1;
printk(KERN_INFO "oprofile: forcing architectural perfmon\n"); printk(KERN_INFO "oprofile: forcing architectural perfmon\n");
} }
......
...@@ -33,6 +33,7 @@ void oprofile_reset_stats(void) ...@@ -33,6 +33,7 @@ void oprofile_reset_stats(void)
atomic_set(&oprofile_stats.sample_lost_no_mm, 0); atomic_set(&oprofile_stats.sample_lost_no_mm, 0);
atomic_set(&oprofile_stats.sample_lost_no_mapping, 0); atomic_set(&oprofile_stats.sample_lost_no_mapping, 0);
atomic_set(&oprofile_stats.event_lost_overflow, 0); atomic_set(&oprofile_stats.event_lost_overflow, 0);
atomic_set(&oprofile_stats.bt_lost_no_mapping, 0);
} }
......
...@@ -321,6 +321,8 @@ asmlinkage long sys_rt_sigtimedwait(const sigset_t __user *uthese, ...@@ -321,6 +321,8 @@ asmlinkage long sys_rt_sigtimedwait(const sigset_t __user *uthese,
siginfo_t __user *uinfo, siginfo_t __user *uinfo,
const struct timespec __user *uts, const struct timespec __user *uts,
size_t sigsetsize); size_t sigsetsize);
asmlinkage long sys_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig,
siginfo_t __user *uinfo);
asmlinkage long sys_kill(int pid, int sig); asmlinkage long sys_kill(int pid, int sig);
asmlinkage long sys_tgkill(int tgid, int pid, int sig); asmlinkage long sys_tgkill(int tgid, int pid, int sig);
asmlinkage long sys_tkill(int pid, int sig); asmlinkage long sys_tkill(int pid, int sig);
......
...@@ -1533,7 +1533,7 @@ void __init __rcu_init(void) ...@@ -1533,7 +1533,7 @@ void __init __rcu_init(void)
int j; int j;
struct rcu_node *rnp; struct rcu_node *rnp;
printk(KERN_WARNING "Experimental hierarchical RCU implementation.\n"); printk(KERN_INFO "Hierarchical RCU implementation.\n");
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR #ifdef CONFIG_RCU_CPU_STALL_DETECTOR
printk(KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n"); printk(KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n");
#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
...@@ -1546,7 +1546,6 @@ void __init __rcu_init(void) ...@@ -1546,7 +1546,6 @@ void __init __rcu_init(void)
rcu_cpu_notify(&rcu_nb, CPU_UP_PREPARE, (void *)(long)i); rcu_cpu_notify(&rcu_nb, CPU_UP_PREPARE, (void *)(long)i);
/* Register notifier for non-boot CPUs */ /* Register notifier for non-boot CPUs */
register_cpu_notifier(&rcu_nb); register_cpu_notifier(&rcu_nb);
printk(KERN_WARNING "Experimental hierarchical RCU init done.\n");
} }
module_param(blimit, int, 0); module_param(blimit, int, 0);
......
...@@ -716,7 +716,7 @@ void dma_debug_init(u32 num_entries) ...@@ -716,7 +716,7 @@ void dma_debug_init(u32 num_entries)
for (i = 0; i < HASH_SIZE; ++i) { for (i = 0; i < HASH_SIZE; ++i) {
INIT_LIST_HEAD(&dma_entry_hash[i].list); INIT_LIST_HEAD(&dma_entry_hash[i].list);
dma_entry_hash[i].lock = SPIN_LOCK_UNLOCKED; spin_lock_init(&dma_entry_hash[i].lock);
} }
if (dma_debug_fs_init() != 0) { if (dma_debug_fs_init() != 0) {
...@@ -856,22 +856,21 @@ static void check_for_stack(struct device *dev, void *addr) ...@@ -856,22 +856,21 @@ static void check_for_stack(struct device *dev, void *addr)
"stack [addr=%p]\n", addr); "stack [addr=%p]\n", addr);
} }
static inline bool overlap(void *addr, u64 size, void *start, void *end) static inline bool overlap(void *addr, unsigned long len, void *start, void *end)
{ {
void *addr2 = (char *)addr + size; unsigned long a1 = (unsigned long)addr;
unsigned long b1 = a1 + len;
unsigned long a2 = (unsigned long)start;
unsigned long b2 = (unsigned long)end;
return ((addr >= start && addr < end) || return !(b1 <= a2 || a1 >= b2);
(addr2 >= start && addr2 < end) ||
((addr < start) && (addr2 >= end)));
} }
static void check_for_illegal_area(struct device *dev, void *addr, u64 size) static void check_for_illegal_area(struct device *dev, void *addr, unsigned long len)
{ {
if (overlap(addr, size, _text, _etext) || if (overlap(addr, len, _text, _etext) ||
overlap(addr, size, __start_rodata, __end_rodata)) overlap(addr, len, __start_rodata, __end_rodata))
err_printk(dev, NULL, "DMA-API: device driver maps " err_printk(dev, NULL, "DMA-API: device driver maps memory from kernel text or rodata [addr=%p] [len=%lu]\n", addr, len);
"memory from kernel text or rodata "
"[addr=%p] [size=%llu]\n", addr, size);
} }
static void check_sync(struct device *dev, 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,7 +968,8 @@ void debug_dma_map_page(struct device *dev, struct page *page, size_t offset,
entry->type = dma_debug_single; entry->type = dma_debug_single;
if (!PageHighMem(page)) { if (!PageHighMem(page)) {
void *addr = ((char *)page_address(page)) + offset; void *addr = page_address(page) + offset;
check_for_stack(dev, addr); check_for_stack(dev, addr);
check_for_illegal_area(dev, addr, size); check_for_illegal_area(dev, addr, size);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment