aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2010-08-02 02:29:56 -0400
committerIngo Molnar <mingo@elte.hu>2010-08-02 02:31:54 -0400
commit3772b734720e1a3f2dc1d95cfdfaa5332f4ccf01 (patch)
treea1a8cc85948c086aa12a1d8014151a7ca7c04ea8 /kernel
parent9fc3af467d0749989518a23f7289a6f44e5cb214 (diff)
parent9fe6206f400646a2322096b56c59891d530e8d51 (diff)
Merge commit 'v2.6.35' into perf/core
Conflicts: tools/perf/Makefile tools/perf/util/hist.c Merge reason: Resolve the conflicts and update to latest upstream. Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/cred.c25
-rw-r--r--kernel/debug/debug_core.c2
-rw-r--r--kernel/debug/gdbstub.c9
-rw-r--r--kernel/debug/kdb/kdb_main.c7
-rw-r--r--kernel/module.c4
5 files changed, 37 insertions, 10 deletions
diff --git a/kernel/cred.c b/kernel/cred.c
index a2d5504fbcc..60bc8b1e32e 100644
--- a/kernel/cred.c
+++ b/kernel/cred.c
@@ -209,6 +209,31 @@ void exit_creds(struct task_struct *tsk)
209 } 209 }
210} 210}
211 211
212/**
213 * get_task_cred - Get another task's objective credentials
214 * @task: The task to query
215 *
216 * Get the objective credentials of a task, pinning them so that they can't go
217 * away. Accessing a task's credentials directly is not permitted.
218 *
219 * The caller must also make sure task doesn't get deleted, either by holding a
220 * ref on task or by holding tasklist_lock to prevent it from being unlinked.
221 */
222const struct cred *get_task_cred(struct task_struct *task)
223{
224 const struct cred *cred;
225
226 rcu_read_lock();
227
228 do {
229 cred = __task_cred((task));
230 BUG_ON(!cred);
231 } while (!atomic_inc_not_zero(&((struct cred *)cred)->usage));
232
233 rcu_read_unlock();
234 return cred;
235}
236
212/* 237/*
213 * Allocate blank credentials, such that the credentials can be filled in at a 238 * Allocate blank credentials, such that the credentials can be filled in at a
214 * later date without risk of ENOMEM. 239 * later date without risk of ENOMEM.
diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c
index 5cb7cd1de10..8bc5eeffec8 100644
--- a/kernel/debug/debug_core.c
+++ b/kernel/debug/debug_core.c
@@ -605,13 +605,13 @@ cpu_master_loop:
605 if (dbg_kdb_mode) { 605 if (dbg_kdb_mode) {
606 kgdb_connected = 1; 606 kgdb_connected = 1;
607 error = kdb_stub(ks); 607 error = kdb_stub(ks);
608 kgdb_connected = 0;
608 } else { 609 } else {
609 error = gdb_serial_stub(ks); 610 error = gdb_serial_stub(ks);
610 } 611 }
611 612
612 if (error == DBG_PASS_EVENT) { 613 if (error == DBG_PASS_EVENT) {
613 dbg_kdb_mode = !dbg_kdb_mode; 614 dbg_kdb_mode = !dbg_kdb_mode;
614 kgdb_connected = 0;
615 } else if (error == DBG_SWITCH_CPU_EVENT) { 615 } else if (error == DBG_SWITCH_CPU_EVENT) {
616 dbg_cpu_switch(cpu, dbg_switch_cpu); 616 dbg_cpu_switch(cpu, dbg_switch_cpu);
617 goto cpu_loop; 617 goto cpu_loop;
diff --git a/kernel/debug/gdbstub.c b/kernel/debug/gdbstub.c
index 4b17b326952..e8fd6868682 100644
--- a/kernel/debug/gdbstub.c
+++ b/kernel/debug/gdbstub.c
@@ -621,10 +621,8 @@ static void gdb_cmd_query(struct kgdb_state *ks)
621 switch (remcom_in_buffer[1]) { 621 switch (remcom_in_buffer[1]) {
622 case 's': 622 case 's':
623 case 'f': 623 case 'f':
624 if (memcmp(remcom_in_buffer + 2, "ThreadInfo", 10)) { 624 if (memcmp(remcom_in_buffer + 2, "ThreadInfo", 10))
625 error_packet(remcom_out_buffer, -EINVAL);
626 break; 625 break;
627 }
628 626
629 i = 0; 627 i = 0;
630 remcom_out_buffer[0] = 'm'; 628 remcom_out_buffer[0] = 'm';
@@ -665,10 +663,9 @@ static void gdb_cmd_query(struct kgdb_state *ks)
665 pack_threadid(remcom_out_buffer + 2, thref); 663 pack_threadid(remcom_out_buffer + 2, thref);
666 break; 664 break;
667 case 'T': 665 case 'T':
668 if (memcmp(remcom_in_buffer + 1, "ThreadExtraInfo,", 16)) { 666 if (memcmp(remcom_in_buffer + 1, "ThreadExtraInfo,", 16))
669 error_packet(remcom_out_buffer, -EINVAL);
670 break; 667 break;
671 } 668
672 ks->threadid = 0; 669 ks->threadid = 0;
673 ptr = remcom_in_buffer + 17; 670 ptr = remcom_in_buffer + 17;
674 kgdb_hex2long(&ptr, &ks->threadid); 671 kgdb_hex2long(&ptr, &ks->threadid);
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
index 184cd8209c3..ebe4a287419 100644
--- a/kernel/debug/kdb/kdb_main.c
+++ b/kernel/debug/kdb/kdb_main.c
@@ -1820,9 +1820,8 @@ static int kdb_sr(int argc, const char **argv)
1820{ 1820{
1821 if (argc != 1) 1821 if (argc != 1)
1822 return KDB_ARGCOUNT; 1822 return KDB_ARGCOUNT;
1823 sysrq_toggle_support(1);
1824 kdb_trap_printk++; 1823 kdb_trap_printk++;
1825 handle_sysrq(*argv[1], NULL); 1824 __handle_sysrq(*argv[1], NULL, 0);
1826 kdb_trap_printk--; 1825 kdb_trap_printk--;
1827 1826
1828 return 0; 1827 return 0;
@@ -1883,6 +1882,7 @@ static int kdb_lsmod(int argc, const char **argv)
1883 kdb_printf(" (Loading)"); 1882 kdb_printf(" (Loading)");
1884 else 1883 else
1885 kdb_printf(" (Live)"); 1884 kdb_printf(" (Live)");
1885 kdb_printf(" 0x%p", mod->module_core);
1886 1886
1887#ifdef CONFIG_MODULE_UNLOAD 1887#ifdef CONFIG_MODULE_UNLOAD
1888 { 1888 {
@@ -2291,6 +2291,9 @@ static int kdb_ll(int argc, const char **argv)
2291 while (va) { 2291 while (va) {
2292 char buf[80]; 2292 char buf[80];
2293 2293
2294 if (KDB_FLAG(CMD_INTERRUPT))
2295 return 0;
2296
2294 sprintf(buf, "%s " kdb_machreg_fmt "\n", command, va); 2297 sprintf(buf, "%s " kdb_machreg_fmt "\n", command, va);
2295 diag = kdb_parse(buf); 2298 diag = kdb_parse(buf);
2296 if (diag) 2299 if (diag)
diff --git a/kernel/module.c b/kernel/module.c
index 5d2d28197c8..6c562828c85 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -787,7 +787,6 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
787 787
788 /* Store the name of the last unloaded module for diagnostic purposes */ 788 /* Store the name of the last unloaded module for diagnostic purposes */
789 strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module)); 789 strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module));
790 ddebug_remove_module(mod->name);
791 790
792 free_module(mod); 791 free_module(mod);
793 return 0; 792 return 0;
@@ -1550,6 +1549,9 @@ static void free_module(struct module *mod)
1550 remove_sect_attrs(mod); 1549 remove_sect_attrs(mod);
1551 mod_kobject_remove(mod); 1550 mod_kobject_remove(mod);
1552 1551
1552 /* Remove dynamic debug info */
1553 ddebug_remove_module(mod->name);
1554
1553 /* Arch-specific cleanup. */ 1555 /* Arch-specific cleanup. */
1554 module_arch_cleanup(mod); 1556 module_arch_cleanup(mod);
1555 1557