Skip to contentSkip to conversation

kdb: kdb_main: mark expected switch fall-throughs

PATCH In review Gustavo A. R. Silva 2 participants 3 messages Aug 5, 2018 – Aug 15, 2018 KGDB / KDB /debug_core

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 kdb: kdb_main: mark expected switch fall-throughs

In preparation to enabling -Wimplicit-fallthrough, mark switch cases where we are expecting to fall through.

Addresses-Coverity-ID: 115090 ("Missing break in switch")
Addresses-Coverity-ID: 115091 ("Missing break in switch")
Addresses-Coverity-ID: 114700 ("Missing break in switch")

---
 kernel/debug/kdb/kdb_main.c | 3 +++
 1 file changed, 3 insertions(+)
kernel/debug/kdb/kdb_main.c +3 -0
index 2ddfce8..2249645 100644
@@ -1545,13 +1545,16 @@ static void kdb_md_line(const char *fmtstr, unsigned long addr,
 				*c++ = printable_char(*cp++);
 				*c++ = printable_char(*cp++);
 				addr += 4;
+				/* fall through */
 			case 4:
 				*c++ = printable_char(*cp++);
 				*c++ = printable_char(*cp++);
 				addr += 2;
+				/* fall through */
 			case 2:
 				*c++ = printable_char(*cp++);
 				addr++;
+				/* fall through */
 			case 1:
 				*c++ = printable_char(*cp++);
 				addr++;
Signature · 1 line
2.7.4
#1 lore raw
Quoted 7 lines · Gustavo A. R. Silva

In preparation to enabling -Wimplicit-fallthrough, mark switch cases where we are expecting to fall through.

Addresses-Coverity-ID: 115090 ("Missing break in switch")
Addresses-Coverity-ID: 115091 ("Missing break in switch")
Addresses-Coverity-ID: 114700 ("Missing break in switch")

Adding fall through isn't wrong but its reasonable to ask why there is a complex hand unrolled loop here in the first place (and doubly so without a comment). The whole switch statement would be much clear expressed as:

	for (j=0; j<bytesperword; j++)
		*c++ = printable_char(*cp++);
	addr += bytesperword;

Daniel.

Quoted 26 lines
---
  kernel/debug/kdb/kdb_main.c | 3 +++
  1 file changed, 3 insertions(+)
kernel/debug/kdb/kdb_main.c +3 -0
index 2ddfce8..2249645 100644
@@ -1545,13 +1545,16 @@ static void kdb_md_line(const char *fmtstr, unsigned long addr,
  				*c++ = printable_char(*cp++);
  				*c++ = printable_char(*cp++);
  				addr += 4;
+				/* fall through */
  			case 4:
  				*c++ = printable_char(*cp++);
  				*c++ = printable_char(*cp++);
  				addr += 2;
+				/* fall through */
  			case 2:
  				*c++ = printable_char(*cp++);
  				addr++;
+				/* fall through */
  			case 1:
  				*c++ = printable_char(*cp++);
  				addr++;
#2 lore raw

Hi Daniel,

Quoted 9 lines · Daniel Thompson
Quoted 7 lines · Gustavo A. R. Silva

In preparation to enabling -Wimplicit-fallthrough, mark switch cases where we are expecting to fall through.

Addresses-Coverity-ID: 115090 ("Missing break in switch")
Addresses-Coverity-ID: 115091 ("Missing break in switch")
Addresses-Coverity-ID: 114700 ("Missing break in switch")

Quoted 6 lines

Adding fall through isn't wrong but its reasonable to ask why there is a complex hand unrolled loop here in the first place (and doubly so without a comment). The whole switch statement would be much clear expressed as:

    for (j=0; j<bytesperword; j++)
        *c++ = printable_char(*cp++);
    addr += bytesperword;

Yeah, I agree. I can send a patch for that.

Thanks for the feedback.
--
Gustavo

Quoted 31 lines

Daniel.

Quoted 26 lines

---
  kernel/debug/kdb/kdb_main.c | 3 +++

  1 file changed, 3 insertions(+)
kernel/debug/kdb/kdb_main.c +1 -0
index 2ddfce8..2249645 100644
@@ -1545,13 +1545,16 @@ static void kdb_md_line(const char *fmtstr, unsigned long addr,
                   *c++ = printable_char(*cp++);
                   *c++ = printable_char(*cp++);
                   addr += 4;
+                /* fall through */

              case 4:
                  *c++ = printable_char(*cp++);
                  *c++ = printable_char(*cp++);
                  addr += 2;
+                /* fall through */
              case 2:
                  *c++ = printable_char(*cp++);
                  addr++;
+                /* fall through */
              case 1:
                  *c++ = printable_char(*cp++);
                  addr++;