[PATCH] kgdbts: fix hw_access_break_test

Florian Rommel posted 1 patch 1 year, 5 months ago
drivers/misc/kgdbts.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] kgdbts: fix hw_access_break_test
Posted by Florian Rommel 1 year, 5 months ago
The test for access watchpoints (hw_access_break_test) was broken
(always failed) because the compiler optimized out the write to the
static helper variable (hw_break_val2), as it is never read anywhere.
This resulted in the target variable (hw_break_val) not being accessed
and thus the breakpoint not being triggered.

Remove the helper variable (hw_break_val2), and use READ_ONCE to force
reading the target variable (hw_break_val).

Signed-off-by: Florian Rommel <mail@florommel.de>
---
 drivers/misc/kgdbts.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c
index 88b91ad8e541..0cf31164b470 100644
--- a/drivers/misc/kgdbts.c
+++ b/drivers/misc/kgdbts.c
@@ -95,6 +95,7 @@
 #include <linux/kallsyms.h>
 
 #include <asm/sections.h>
+#include <asm/rwonce.h>
 
 #define v1printk(a...) do {		\
 	if (verbose)			\
@@ -126,7 +127,6 @@ static int final_ack;
 static int force_hwbrks;
 static int hwbreaks_ok;
 static int hw_break_val;
-static int hw_break_val2;
 static int cont_instead_of_sstep;
 static unsigned long cont_thread_id;
 static unsigned long sstep_thread_id;
@@ -284,7 +284,7 @@ static void hw_rem_access_break(char *arg)
 
 static void hw_break_val_access(void)
 {
-	hw_break_val2 = hw_break_val;
+	READ_ONCE(hw_break_val);
 }
 
 static void hw_break_val_write(void)
-- 
2.46.0
Re: [PATCH] kgdbts: fix hw_access_break_test
Posted by Doug Anderson 1 year, 5 months ago
Hi,

On Mon, Aug 12, 2024 at 1:55 AM Florian Rommel <mail@florommel.de> wrote:
>
> The test for access watchpoints (hw_access_break_test) was broken
> (always failed) because the compiler optimized out the write to the
> static helper variable (hw_break_val2), as it is never read anywhere.
> This resulted in the target variable (hw_break_val) not being accessed
> and thus the breakpoint not being triggered.
>
> Remove the helper variable (hw_break_val2), and use READ_ONCE to force
> reading the target variable (hw_break_val).
>
> Signed-off-by: Florian Rommel <mail@florommel.de>
> ---
>  drivers/misc/kgdbts.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)

Reviewed-by: Douglas Anderson <dianders@chromium.org>
Re: [PATCH] kgdbts: fix hw_access_break_test
Posted by Daniel Thompson 1 year, 5 months ago
On Mon, Aug 12, 2024 at 01:04:22PM -0700, Doug Anderson wrote:
> Hi,
>
> On Mon, Aug 12, 2024 at 1:55 AM Florian Rommel <mail@florommel.de> wrote:
> >
> > The test for access watchpoints (hw_access_break_test) was broken
> > (always failed) because the compiler optimized out the write to the
> > static helper variable (hw_break_val2), as it is never read anywhere.
> > This resulted in the target variable (hw_break_val) not being accessed
> > and thus the breakpoint not being triggered.
> >
> > Remove the helper variable (hw_break_val2), and use READ_ONCE to force
> > reading the target variable (hw_break_val).
> >
> > Signed-off-by: Florian Rommel <mail@florommel.de>
> > ---
> >  drivers/misc/kgdbts.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
>
> Reviewed-by: Douglas Anderson <dianders@chromium.org>

Looks good. I pushed this through kgdbtest and it likes it too. I can
turn one of the XFAILs off (yay).

Acked-by: Daniel Thompson <daniel.thompson@linaro.org>
Tested-by: Daniel Thompson <daniel.thompson@linaro.org>

Arnd/Greg: Are you happy to pick this up or should I take it through the kgdb
tree? FWIW right now there are zero other patches for kgdb this cycle, although
that could change!


Daniel.
Re: [PATCH] kgdbts: fix hw_access_break_test
Posted by Greg Kroah-Hartman 1 year, 5 months ago
On Wed, Aug 14, 2024 at 04:38:43PM +0100, Daniel Thompson wrote:
> On Mon, Aug 12, 2024 at 01:04:22PM -0700, Doug Anderson wrote:
> > Hi,
> >
> > On Mon, Aug 12, 2024 at 1:55 AM Florian Rommel <mail@florommel.de> wrote:
> > >
> > > The test for access watchpoints (hw_access_break_test) was broken
> > > (always failed) because the compiler optimized out the write to the
> > > static helper variable (hw_break_val2), as it is never read anywhere.
> > > This resulted in the target variable (hw_break_val) not being accessed
> > > and thus the breakpoint not being triggered.
> > >
> > > Remove the helper variable (hw_break_val2), and use READ_ONCE to force
> > > reading the target variable (hw_break_val).
> > >
> > > Signed-off-by: Florian Rommel <mail@florommel.de>
> > > ---
> > >  drivers/misc/kgdbts.c | 4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > Reviewed-by: Douglas Anderson <dianders@chromium.org>
> 
> Looks good. I pushed this through kgdbtest and it likes it too. I can
> turn one of the XFAILs off (yay).
> 
> Acked-by: Daniel Thompson <daniel.thompson@linaro.org>
> Tested-by: Daniel Thompson <daniel.thompson@linaro.org>
> 
> Arnd/Greg: Are you happy to pick this up or should I take it through the kgdb
> tree? FWIW right now there are zero other patches for kgdb this cycle, although
> that could change!

I've already picked it up, thanks!

greg k-h