laforge has submitted this change. ( https://gerrit.osmocom.org/c/dahdi-linux/+/27910 )
Change subject: Fix -Wimplicit-fallthrough=5 warnings ......................................................................
Fix -Wimplicit-fallthrough=5 warnings
Modern Linux (since 5.4) builds with -Wimplicit-fallthrough=5. On some environments (notably Debian buster) this is even an error, so building dahdi-linux will fail.
Let's add the proper 'fallthrough' annotation of linux/compiler_attributes.h and add a backwards-compatibility definition for older kernels.
Change-Id: I3507876d90dd882b95c22ece51e8620ad6f0bd08 --- M drivers/dahdi/dahdi-base.c M drivers/dahdi/wcaxx-base.c M drivers/dahdi/wctdm24xxp/base.c M drivers/dahdi/xpp/card_global.c M include/dahdi/kernel.h 5 files changed, 19 insertions(+), 8 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved
diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c index 2b6256b..7bcbda6 100644 --- a/drivers/dahdi/dahdi-base.c +++ b/drivers/dahdi/dahdi-base.c @@ -7961,7 +7961,7 @@ memset(getlin, 0, DAHDI_CHUNKSIZE * sizeof(short)); txb[0] = DAHDI_LIN2X(0, ms); memset(txb + 1, txb[0], DAHDI_CHUNKSIZE - 1); - /* fall through to normal conf mode */ + fallthrough; case DAHDI_CONF_CONF: /* Normal conference mode */ if (is_pseudo_chan(ms)) /* if pseudo-channel */ { @@ -7985,7 +7985,7 @@ memset(txb + 1, txb[0], DAHDI_CHUNKSIZE - 1); break; } - /* fall through */ + fallthrough; case DAHDI_CONF_CONFMON: /* Conference monitor mode */ if (ms->confmode & DAHDI_CONF_LISTENER) { /* Subtract out last sample written to conf */ @@ -8524,7 +8524,7 @@ break; } #endif - /* fall through intentionally */ + fallthrough; case DAHDI_SIG_FXSGS: /* FXS Groundstart */ if (rxsig == DAHDI_RXSIG_ONHOOK) { chan->ringdebtimer = RING_DEBOUNCE_TIME; @@ -8543,7 +8543,7 @@ chan->gotgs = 1; } } - /* fall through intentionally */ + fallthrough; case DAHDI_SIG_FXOLS: /* FXO Loopstart */ case DAHDI_SIG_FXOKS: /* FXO Kewlstart */ switch(rxsig) { @@ -8643,7 +8643,7 @@ __dahdi_hooksig_pvt(chan, DAHDI_RXSIG_START); break; } - /* Fall through */ + fallthrough; case DAHDI_SIG_EM_E1: case DAHDI_SIG_FXOLS: /* FXO Loopstart */ case DAHDI_SIG_FXOKS: /* FXO Kewlstart */ @@ -8661,7 +8661,7 @@ break; case DAHDI_SIG_FXSKS: /* FXS Kewlstart */ case DAHDI_SIG_FXSGS: /* FXS Groundstart */ - /* Fall through */ + fallthrough; case DAHDI_SIG_FXSLS: if (!(cursig & DAHDI_BBIT)) { /* Check for ringing first */ @@ -9090,7 +9090,7 @@ memcpy(ss->putlin, putlin, DAHDI_CHUNKSIZE * sizeof(short)); break; } - /* fall through */ + fallthrough; case DAHDI_CONF_CONFANN: /* Conference with announce */ if (ms->confmode & DAHDI_CONF_TALKER) { /* Store temp value */ diff --git a/drivers/dahdi/wcaxx-base.c b/drivers/dahdi/wcaxx-base.c index 8467767..d3d0777 100644 --- a/drivers/dahdi/wcaxx-base.c +++ b/drivers/dahdi/wcaxx-base.c @@ -1445,6 +1445,7 @@ break; case BATTERY_UNKNOWN: mod_hooksig(wc, mod, DAHDI_RXSIG_ONHOOK); + fallthrough; case BATTERY_PRESENT: fxo->battery_state = BATTERY_DEBOUNCING_LOST; fxo->battdebounce_timer = wc->framecount + battdebounce; @@ -1553,6 +1554,7 @@ break; case BATTERY_UNKNOWN: mod_hooksig(wc, mod, DAHDI_RXSIG_OFFHOOK); + fallthrough; case BATTERY_LOST: /* intentional drop through */ fxo->battery_state = BATTERY_DEBOUNCING_PRESENT; fxo->battdebounce_timer = wc->framecount + battdebounce; diff --git a/drivers/dahdi/wctdm24xxp/base.c b/drivers/dahdi/wctdm24xxp/base.c index 6571f17..9baaea5 100644 --- a/drivers/dahdi/wctdm24xxp/base.c +++ b/drivers/dahdi/wctdm24xxp/base.c @@ -1954,6 +1954,7 @@ break; case BATTERY_UNKNOWN: mod_hooksig(wc, mod, DAHDI_RXSIG_ONHOOK); + fallthrough; case BATTERY_PRESENT: fxo->battery_state = BATTERY_DEBOUNCING_LOST; fxo->battdebounce_timer = wc->framecount + battdebounce; @@ -2062,6 +2063,7 @@ break; case BATTERY_UNKNOWN: mod_hooksig(wc, mod, DAHDI_RXSIG_OFFHOOK); + fallthrough; case BATTERY_LOST: /* intentional drop through */ fxo->battery_state = BATTERY_DEBOUNCING_PRESENT; fxo->battdebounce_timer = wc->framecount + battdebounce; diff --git a/drivers/dahdi/xpp/card_global.c b/drivers/dahdi/xpp/card_global.c index da1393e..434d3e8 100644 --- a/drivers/dahdi/xpp/card_global.c +++ b/drivers/dahdi/xpp/card_global.c @@ -148,7 +148,7 @@ XPD_NOTICE(xpd, "'I' is deprecated in register commands. " "Use 'S' instead.\n"); - /* fall through */ + fallthrough; case 'S': do_subreg = 1; num_args += 2; /* register + subreg */ diff --git a/include/dahdi/kernel.h b/include/dahdi/kernel.h index 7480904..778c2b2 100644 --- a/include/dahdi/kernel.h +++ b/include/dahdi/kernel.h @@ -58,6 +58,13 @@
#include <linux/poll.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0) +#include <linux/compiler_attributes.h> +#endif +#ifndef fallthrough +#define fallthrough do {} while (0) /* fallthrough */ +#endif + #ifdef CONFIG_PCI #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0) #include <linux/pci.h>