gdbstub doesnt connect if an engine already exists.  Such an existing
engine may not be related to gdbstub.

Currently if we trace a process using gdb, insert breakpoints, disconnect
and reattach to that same process, gdb fails.

What gdbstub probably needs is an exclusive gdbstub engine.  i.e If a
gdbstub connection exists for a process, we shouldnt be creating a new
gdbstub connection.
    
Signed-off-by: Srikar Dronamraju <sri...@linux.vnet.ibm.com>
---
 kernel/utrace-gdb.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/kernel/utrace-gdb.c b/kernel/utrace-gdb.c
index 21bf995..29e9c05 100644
--- a/kernel/utrace-gdb.c
+++ b/kernel/utrace-gdb.c
@@ -1180,10 +1180,11 @@ static int proc_gdb_open(struct inode *inode, struct 
file *filp)
         p->at_quiesce_do = UTRACE_RESUME;
 
         p->engine = utrace_attach_task(task,
-                                       UTRACE_ATTACH_CREATE |
-                                       UTRACE_ATTACH_EXCLUSIVE,
-                                       &gdb_utrace_ops, 
-                                       p);
+                                       UTRACE_ATTACH_CREATE |
+                                       UTRACE_ATTACH_EXCLUSIVE |
+                                       UTRACE_ATTACH_MATCH_OPS,
+                                       &gdb_utrace_ops,
+                                       p);
         if (IS_ERR(p->engine) || p->engine==NULL) {
                 ret = -EBUSY;
                 goto out_free;

Reply via email to