Re: [PATCH v2] arm64/debug: Fix registers on sleeping tasks
On Thu, Mar 08, 2018 at 08:41:59AM -0800, Doug Anderson wrote: > Hi, > > On Thu, Mar 8, 2018 at 8:19 AM, Daniel Thompson >wrote: > > On 05/03/18 23:43, Douglas Anderson wrote: > >> > >> This is the equivalent of commit 001bf455d206 ("ARM: 8428/1: kgdb: Fix > >> registers on sleeping tasks") but for arm64. Nuff said. > >> > >> ...well, perhaps I could also add that task_pt_regs are userspace > >> registers and that's not what kgdb is supposed to be reporting. We're > >> supposed to be reporting kernel registers. > >> > >> Signed-off-by: Douglas Anderson > > > > > > I hacked together a (still very immature) kgdb test suite[1] around the turn > > of the year. Whilst its not quite solid enough for me to recommend others > > deploy it except out of curiosity... so I haven't yet started yelling about > > test suite failures except in the privacy of my own head. > > > > However I can confirm that this patch fixes one of the test suite failures I > > haven't had time to blame allocate yet! > > > > So... > > Tested-by: Daniel Thompson > > Thanks for your testing! ...I'll have to check out your test suite soon. > > > > BTW is this something that should Cc: stable? > > It wouldn't hurt if this made it back to stable on a best-effort > approach. The problem has been there since the beginning, so it's not > like it's fixing a regression that cropped up in a specific version. > ...but it does fix a bug, so probably Cc stable makes sense. I guess > I'd leave it up to the maintainer that applies the patch? I've already put this into -next, so I don't really want to rebase just for this. If you think it's important, please send to sta...@vger.kernel.org once it's landed in mainline. Will
Re: [PATCH v2] arm64/debug: Fix registers on sleeping tasks
On Thu, Mar 08, 2018 at 08:41:59AM -0800, Doug Anderson wrote: > Hi, > > On Thu, Mar 8, 2018 at 8:19 AM, Daniel Thompson > wrote: > > On 05/03/18 23:43, Douglas Anderson wrote: > >> > >> This is the equivalent of commit 001bf455d206 ("ARM: 8428/1: kgdb: Fix > >> registers on sleeping tasks") but for arm64. Nuff said. > >> > >> ...well, perhaps I could also add that task_pt_regs are userspace > >> registers and that's not what kgdb is supposed to be reporting. We're > >> supposed to be reporting kernel registers. > >> > >> Signed-off-by: Douglas Anderson > > > > > > I hacked together a (still very immature) kgdb test suite[1] around the turn > > of the year. Whilst its not quite solid enough for me to recommend others > > deploy it except out of curiosity... so I haven't yet started yelling about > > test suite failures except in the privacy of my own head. > > > > However I can confirm that this patch fixes one of the test suite failures I > > haven't had time to blame allocate yet! > > > > So... > > Tested-by: Daniel Thompson > > Thanks for your testing! ...I'll have to check out your test suite soon. > > > > BTW is this something that should Cc: stable? > > It wouldn't hurt if this made it back to stable on a best-effort > approach. The problem has been there since the beginning, so it's not > like it's fixing a regression that cropped up in a specific version. > ...but it does fix a bug, so probably Cc stable makes sense. I guess > I'd leave it up to the maintainer that applies the patch? I've already put this into -next, so I don't really want to rebase just for this. If you think it's important, please send to sta...@vger.kernel.org once it's landed in mainline. Will
Re: [PATCH v2] arm64/debug: Fix registers on sleeping tasks
Hi, On Thu, Mar 8, 2018 at 8:19 AM, Daniel Thompsonwrote: > On 05/03/18 23:43, Douglas Anderson wrote: >> >> This is the equivalent of commit 001bf455d206 ("ARM: 8428/1: kgdb: Fix >> registers on sleeping tasks") but for arm64. Nuff said. >> >> ...well, perhaps I could also add that task_pt_regs are userspace >> registers and that's not what kgdb is supposed to be reporting. We're >> supposed to be reporting kernel registers. >> >> Signed-off-by: Douglas Anderson > > > I hacked together a (still very immature) kgdb test suite[1] around the turn > of the year. Whilst its not quite solid enough for me to recommend others > deploy it except out of curiosity... so I haven't yet started yelling about > test suite failures except in the privacy of my own head. > > However I can confirm that this patch fixes one of the test suite failures I > haven't had time to blame allocate yet! > > So... > Tested-by: Daniel Thompson Thanks for your testing! ...I'll have to check out your test suite soon. > BTW is this something that should Cc: stable? It wouldn't hurt if this made it back to stable on a best-effort approach. The problem has been there since the beginning, so it's not like it's fixing a regression that cropped up in a specific version. ...but it does fix a bug, so probably Cc stable makes sense. I guess I'd leave it up to the maintainer that applies the patch? -DougOn Thu, Mar 8, 2018 at 8:19 AM, Daniel Thompson mailto:daniel.thomp...@linaro.org; target="_blank">daniel.thomp...@linaro.org wrote:On 05/03/18 23:43, Douglas Anderson wrote: This is the equivalent of commit 001bf455d206 ("ARM: 8428/1: kgdb: Fix registers on sleeping tasks") but for arm64. Nuff said. ...well, perhaps I could also add that task_pt_regs are userspace registers and that's not what kgdb is supposed to be reporting. We're supposed to be reporting kernel registers. Signed-off-by: Douglas Anderson mailto:diand...@chromium.org; target="_blank">diand...@chromium.org I hacked together a (still very immature) kgdb test suite[1] around the turn of the year. Whilst its not quite solid enough for me to recommend others deploy it except out of curiosity... so I haven't yet started yelling about test suite failures except in the privacy of my own head. However I can confirm that this patch fixes one of the test suite failures I haven't had time to blame allocate yet! So... Tested-by: Daniel Thompson mailto:daniel.thomp...@linaro.org; target="_blank">daniel.thomp...@linaro.org BTW is this something that should Cc: stable? Daniel. [1] https://github.com/daniel-thompson/kgdbtest; rel="noreferrer" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=enq=https://github.com/daniel-thompson/kgdbtestsource=gmailust=152061344390usg=AFQjCNHzh_tGdP65DdFEQo-ofF_LCI5XBQ;>https://github.com/daniel-thompson/kgdbtest --- Changes in v2: - Init cpu_context in one line - Explain that task_pt_regs are userspace arch/arm64/kernel/kgdb.c | 21 - 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c index 2122cd187f19..a20de58061a8 100644 --- a/arch/arm64/kernel/kgdb.c +++ b/arch/arm64/kernel/kgdb.c @@ -138,14 +138,25 @@ int dbg_set_reg(int regno, void *mem, struct pt_regs *regs) void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task) { - struct pt_regs *thread_regs; + struct cpu_context *cpu_context = task-thread.cpu_context; /* Initialize to zero */ memset((char *)gdb_regs, 0, NUMREGBYTES); - thread_regs = task_pt_regs(task); - memcpy((void *)gdb_regs, (void *)thread_regs-regs, GP_REG_BYTES); - /* Special case for PSTATE (check comments in asm/kgdb.h for details) */ - dbg_get_reg(33, gdb_regs + GP_REG_BYTES, thread_regs); + + gdb_regs[19] = cpu_context-x19; + gdb_regs[20] = cpu_context-x20; + gdb_regs[21] = cpu_context-x21; + gdb_regs[22] = cpu_context-x22; + gdb_regs[23] = cpu_context-x23; + gdb_regs[24] = cpu_context-x24; + gdb_regs[25] = cpu_context-x25; + gdb_regs[26] = cpu_context-x26; + gdb_regs[27] = cpu_context-x27; + gdb_regs[28] = cpu_context-x28; + gdb_regs[29] = cpu_context-fp; + + gdb_regs[31] = cpu_context-sp; + gdb_regs[32] = cpu_context-pc; } void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc)
Re: [PATCH v2] arm64/debug: Fix registers on sleeping tasks
Hi, On Thu, Mar 8, 2018 at 8:19 AM, Daniel Thompson wrote: > On 05/03/18 23:43, Douglas Anderson wrote: >> >> This is the equivalent of commit 001bf455d206 ("ARM: 8428/1: kgdb: Fix >> registers on sleeping tasks") but for arm64. Nuff said. >> >> ...well, perhaps I could also add that task_pt_regs are userspace >> registers and that's not what kgdb is supposed to be reporting. We're >> supposed to be reporting kernel registers. >> >> Signed-off-by: Douglas Anderson > > > I hacked together a (still very immature) kgdb test suite[1] around the turn > of the year. Whilst its not quite solid enough for me to recommend others > deploy it except out of curiosity... so I haven't yet started yelling about > test suite failures except in the privacy of my own head. > > However I can confirm that this patch fixes one of the test suite failures I > haven't had time to blame allocate yet! > > So... > Tested-by: Daniel Thompson Thanks for your testing! ...I'll have to check out your test suite soon. > BTW is this something that should Cc: stable? It wouldn't hurt if this made it back to stable on a best-effort approach. The problem has been there since the beginning, so it's not like it's fixing a regression that cropped up in a specific version. ...but it does fix a bug, so probably Cc stable makes sense. I guess I'd leave it up to the maintainer that applies the patch? -DougOn Thu, Mar 8, 2018 at 8:19 AM, Daniel Thompson mailto:daniel.thomp...@linaro.org; target="_blank">daniel.thomp...@linaro.org wrote:On 05/03/18 23:43, Douglas Anderson wrote: This is the equivalent of commit 001bf455d206 ("ARM: 8428/1: kgdb: Fix registers on sleeping tasks") but for arm64. Nuff said. ...well, perhaps I could also add that task_pt_regs are userspace registers and that's not what kgdb is supposed to be reporting. We're supposed to be reporting kernel registers. Signed-off-by: Douglas Anderson mailto:diand...@chromium.org; target="_blank">diand...@chromium.org I hacked together a (still very immature) kgdb test suite[1] around the turn of the year. Whilst its not quite solid enough for me to recommend others deploy it except out of curiosity... so I haven't yet started yelling about test suite failures except in the privacy of my own head. However I can confirm that this patch fixes one of the test suite failures I haven't had time to blame allocate yet! So... Tested-by: Daniel Thompson mailto:daniel.thomp...@linaro.org; target="_blank">daniel.thomp...@linaro.org BTW is this something that should Cc: stable? Daniel. [1] https://github.com/daniel-thompson/kgdbtest; rel="noreferrer" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=enq=https://github.com/daniel-thompson/kgdbtestsource=gmailust=152061344390usg=AFQjCNHzh_tGdP65DdFEQo-ofF_LCI5XBQ;>https://github.com/daniel-thompson/kgdbtest --- Changes in v2: - Init cpu_context in one line - Explain that task_pt_regs are userspace arch/arm64/kernel/kgdb.c | 21 - 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c index 2122cd187f19..a20de58061a8 100644 --- a/arch/arm64/kernel/kgdb.c +++ b/arch/arm64/kernel/kgdb.c @@ -138,14 +138,25 @@ int dbg_set_reg(int regno, void *mem, struct pt_regs *regs) void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task) { - struct pt_regs *thread_regs; + struct cpu_context *cpu_context = task-thread.cpu_context; /* Initialize to zero */ memset((char *)gdb_regs, 0, NUMREGBYTES); - thread_regs = task_pt_regs(task); - memcpy((void *)gdb_regs, (void *)thread_regs-regs, GP_REG_BYTES); - /* Special case for PSTATE (check comments in asm/kgdb.h for details) */ - dbg_get_reg(33, gdb_regs + GP_REG_BYTES, thread_regs); + + gdb_regs[19] = cpu_context-x19; + gdb_regs[20] = cpu_context-x20; + gdb_regs[21] = cpu_context-x21; + gdb_regs[22] = cpu_context-x22; + gdb_regs[23] = cpu_context-x23; + gdb_regs[24] = cpu_context-x24; + gdb_regs[25] = cpu_context-x25; + gdb_regs[26] = cpu_context-x26; + gdb_regs[27] = cpu_context-x27; + gdb_regs[28] = cpu_context-x28; + gdb_regs[29] = cpu_context-fp; + + gdb_regs[31] = cpu_context-sp; + gdb_regs[32] = cpu_context-pc; } void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc)
Re: [PATCH v2] arm64/debug: Fix registers on sleeping tasks
On 05/03/18 23:43, Douglas Anderson wrote: This is the equivalent of commit 001bf455d206 ("ARM: 8428/1: kgdb: Fix registers on sleeping tasks") but for arm64. Nuff said. ...well, perhaps I could also add that task_pt_regs are userspace registers and that's not what kgdb is supposed to be reporting. We're supposed to be reporting kernel registers. Signed-off-by: Douglas AndersonI hacked together a (still very immature) kgdb test suite[1] around the turn of the year. Whilst its not quite solid enough for me to recommend others deploy it except out of curiosity... so I haven't yet started yelling about test suite failures except in the privacy of my own head. However I can confirm that this patch fixes one of the test suite failures I haven't had time to blame allocate yet! So... Tested-by: Daniel Thompson BTW is this something that should Cc: stable? Daniel. [1] https://github.com/daniel-thompson/kgdbtest --- Changes in v2: - Init cpu_context in one line - Explain that task_pt_regs are userspace arch/arm64/kernel/kgdb.c | 21 - 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c index 2122cd187f19..a20de58061a8 100644 --- a/arch/arm64/kernel/kgdb.c +++ b/arch/arm64/kernel/kgdb.c @@ -138,14 +138,25 @@ int dbg_set_reg(int regno, void *mem, struct pt_regs *regs) void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task) { - struct pt_regs *thread_regs; + struct cpu_context *cpu_context = >thread.cpu_context; /* Initialize to zero */ memset((char *)gdb_regs, 0, NUMREGBYTES); - thread_regs = task_pt_regs(task); - memcpy((void *)gdb_regs, (void *)thread_regs->regs, GP_REG_BYTES); - /* Special case for PSTATE (check comments in asm/kgdb.h for details) */ - dbg_get_reg(33, gdb_regs + GP_REG_BYTES, thread_regs); + + gdb_regs[19] = cpu_context->x19; + gdb_regs[20] = cpu_context->x20; + gdb_regs[21] = cpu_context->x21; + gdb_regs[22] = cpu_context->x22; + gdb_regs[23] = cpu_context->x23; + gdb_regs[24] = cpu_context->x24; + gdb_regs[25] = cpu_context->x25; + gdb_regs[26] = cpu_context->x26; + gdb_regs[27] = cpu_context->x27; + gdb_regs[28] = cpu_context->x28; + gdb_regs[29] = cpu_context->fp; + + gdb_regs[31] = cpu_context->sp; + gdb_regs[32] = cpu_context->pc; } void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc)
Re: [PATCH v2] arm64/debug: Fix registers on sleeping tasks
On 05/03/18 23:43, Douglas Anderson wrote: This is the equivalent of commit 001bf455d206 ("ARM: 8428/1: kgdb: Fix registers on sleeping tasks") but for arm64. Nuff said. ...well, perhaps I could also add that task_pt_regs are userspace registers and that's not what kgdb is supposed to be reporting. We're supposed to be reporting kernel registers. Signed-off-by: Douglas Anderson I hacked together a (still very immature) kgdb test suite[1] around the turn of the year. Whilst its not quite solid enough for me to recommend others deploy it except out of curiosity... so I haven't yet started yelling about test suite failures except in the privacy of my own head. However I can confirm that this patch fixes one of the test suite failures I haven't had time to blame allocate yet! So... Tested-by: Daniel Thompson BTW is this something that should Cc: stable? Daniel. [1] https://github.com/daniel-thompson/kgdbtest --- Changes in v2: - Init cpu_context in one line - Explain that task_pt_regs are userspace arch/arm64/kernel/kgdb.c | 21 - 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c index 2122cd187f19..a20de58061a8 100644 --- a/arch/arm64/kernel/kgdb.c +++ b/arch/arm64/kernel/kgdb.c @@ -138,14 +138,25 @@ int dbg_set_reg(int regno, void *mem, struct pt_regs *regs) void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task) { - struct pt_regs *thread_regs; + struct cpu_context *cpu_context = >thread.cpu_context; /* Initialize to zero */ memset((char *)gdb_regs, 0, NUMREGBYTES); - thread_regs = task_pt_regs(task); - memcpy((void *)gdb_regs, (void *)thread_regs->regs, GP_REG_BYTES); - /* Special case for PSTATE (check comments in asm/kgdb.h for details) */ - dbg_get_reg(33, gdb_regs + GP_REG_BYTES, thread_regs); + + gdb_regs[19] = cpu_context->x19; + gdb_regs[20] = cpu_context->x20; + gdb_regs[21] = cpu_context->x21; + gdb_regs[22] = cpu_context->x22; + gdb_regs[23] = cpu_context->x23; + gdb_regs[24] = cpu_context->x24; + gdb_regs[25] = cpu_context->x25; + gdb_regs[26] = cpu_context->x26; + gdb_regs[27] = cpu_context->x27; + gdb_regs[28] = cpu_context->x28; + gdb_regs[29] = cpu_context->fp; + + gdb_regs[31] = cpu_context->sp; + gdb_regs[32] = cpu_context->pc; } void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc)
[PATCH v2] arm64/debug: Fix registers on sleeping tasks
This is the equivalent of commit 001bf455d206 ("ARM: 8428/1: kgdb: Fix registers on sleeping tasks") but for arm64. Nuff said. ...well, perhaps I could also add that task_pt_regs are userspace registers and that's not what kgdb is supposed to be reporting. We're supposed to be reporting kernel registers. Signed-off-by: Douglas Anderson--- Changes in v2: - Init cpu_context in one line - Explain that task_pt_regs are userspace arch/arm64/kernel/kgdb.c | 21 - 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c index 2122cd187f19..a20de58061a8 100644 --- a/arch/arm64/kernel/kgdb.c +++ b/arch/arm64/kernel/kgdb.c @@ -138,14 +138,25 @@ int dbg_set_reg(int regno, void *mem, struct pt_regs *regs) void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task) { - struct pt_regs *thread_regs; + struct cpu_context *cpu_context = >thread.cpu_context; /* Initialize to zero */ memset((char *)gdb_regs, 0, NUMREGBYTES); - thread_regs = task_pt_regs(task); - memcpy((void *)gdb_regs, (void *)thread_regs->regs, GP_REG_BYTES); - /* Special case for PSTATE (check comments in asm/kgdb.h for details) */ - dbg_get_reg(33, gdb_regs + GP_REG_BYTES, thread_regs); + + gdb_regs[19] = cpu_context->x19; + gdb_regs[20] = cpu_context->x20; + gdb_regs[21] = cpu_context->x21; + gdb_regs[22] = cpu_context->x22; + gdb_regs[23] = cpu_context->x23; + gdb_regs[24] = cpu_context->x24; + gdb_regs[25] = cpu_context->x25; + gdb_regs[26] = cpu_context->x26; + gdb_regs[27] = cpu_context->x27; + gdb_regs[28] = cpu_context->x28; + gdb_regs[29] = cpu_context->fp; + + gdb_regs[31] = cpu_context->sp; + gdb_regs[32] = cpu_context->pc; } void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc) -- 2.16.2.395.g2e18187dfd-goog
[PATCH v2] arm64/debug: Fix registers on sleeping tasks
This is the equivalent of commit 001bf455d206 ("ARM: 8428/1: kgdb: Fix registers on sleeping tasks") but for arm64. Nuff said. ...well, perhaps I could also add that task_pt_regs are userspace registers and that's not what kgdb is supposed to be reporting. We're supposed to be reporting kernel registers. Signed-off-by: Douglas Anderson --- Changes in v2: - Init cpu_context in one line - Explain that task_pt_regs are userspace arch/arm64/kernel/kgdb.c | 21 - 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c index 2122cd187f19..a20de58061a8 100644 --- a/arch/arm64/kernel/kgdb.c +++ b/arch/arm64/kernel/kgdb.c @@ -138,14 +138,25 @@ int dbg_set_reg(int regno, void *mem, struct pt_regs *regs) void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task) { - struct pt_regs *thread_regs; + struct cpu_context *cpu_context = >thread.cpu_context; /* Initialize to zero */ memset((char *)gdb_regs, 0, NUMREGBYTES); - thread_regs = task_pt_regs(task); - memcpy((void *)gdb_regs, (void *)thread_regs->regs, GP_REG_BYTES); - /* Special case for PSTATE (check comments in asm/kgdb.h for details) */ - dbg_get_reg(33, gdb_regs + GP_REG_BYTES, thread_regs); + + gdb_regs[19] = cpu_context->x19; + gdb_regs[20] = cpu_context->x20; + gdb_regs[21] = cpu_context->x21; + gdb_regs[22] = cpu_context->x22; + gdb_regs[23] = cpu_context->x23; + gdb_regs[24] = cpu_context->x24; + gdb_regs[25] = cpu_context->x25; + gdb_regs[26] = cpu_context->x26; + gdb_regs[27] = cpu_context->x27; + gdb_regs[28] = cpu_context->x28; + gdb_regs[29] = cpu_context->fp; + + gdb_regs[31] = cpu_context->sp; + gdb_regs[32] = cpu_context->pc; } void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc) -- 2.16.2.395.g2e18187dfd-goog