Skip to content

Commit

Permalink
media: ABS macro parameter parenthesization
Browse files Browse the repository at this point in the history
Replace usages of the locally defined ABS() macro with calls to the
canonical abs() from kernel.h and remove the old definitions of ABS()

This change was originally motivated by two local definitions of the
ABS (absolute value) macro that fail to parenthesize their parameter
properly. This can lead to a bad expansion for low-precedence
expression arguments.

For example: ABS(1-2) currently expands to ((1-2) < 0 ? (-1-2) : (1-2))
which evaluates to -3. But the correct expansion would be
((1-2) < 0 ? -(1-2) : (1-2)) which evaluates to 1.

Signed-off-by: Dan Gopstein <dgopstein@nyu.edu>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
  • Loading branch information
dgopstein authored and mchehab committed Mar 6, 2018
1 parent 6247466 commit 7aa92c4
Show file tree
Hide file tree
Showing 8 changed files with 10 additions and 16 deletions.
4 changes: 2 additions & 2 deletions drivers/media/dvb-frontends/dib0090.c
Expand Up @@ -1285,7 +1285,7 @@ int dib0090_gain_control(struct dvb_frontend *fe)
#endif #endif


if (*tune_state == CT_AGC_STEP_1) { /* quickly go to the correct range of the ADC power */ if (*tune_state == CT_AGC_STEP_1) { /* quickly go to the correct range of the ADC power */
if (ABS(adc_error) < 50 || state->agc_step++ > 5) { if (abs(adc_error) < 50 || state->agc_step++ > 5) {


#ifdef CONFIG_STANDARD_DAB #ifdef CONFIG_STANDARD_DAB
if (state->fe->dtv_property_cache.delivery_system == STANDARD_DAB) { if (state->fe->dtv_property_cache.delivery_system == STANDARD_DAB) {
Expand Down Expand Up @@ -1754,7 +1754,7 @@ static int dib0090_dc_offset_calibration(struct dib0090_state *state, enum front
*tune_state = CT_TUNER_STEP_1; *tune_state = CT_TUNER_STEP_1;
} else { } else {
/* the minimum was what we have seen in the step before */ /* the minimum was what we have seen in the step before */
if (ABS(state->adc_diff) > ABS(state->min_adc_diff)) { if (abs(state->adc_diff) > abs(state->min_adc_diff)) {
dprintk("Since adc_diff N = %d > adc_diff step N-1 = %d, Come back one step\n", state->adc_diff, state->min_adc_diff); dprintk("Since adc_diff N = %d > adc_diff step N-1 = %d, Come back one step\n", state->adc_diff, state->min_adc_diff);
state->step--; state->step--;
} }
Expand Down
2 changes: 1 addition & 1 deletion drivers/media/dvb-frontends/dib7000p.c
Expand Up @@ -809,7 +809,7 @@ static int dib7000p_set_dds(struct dib7000p_state *state, s32 offset_khz)
{ {
u32 internal = dib7000p_get_internal_freq(state); u32 internal = dib7000p_get_internal_freq(state);
s32 unit_khz_dds_val; s32 unit_khz_dds_val;
u32 abs_offset_khz = ABS(offset_khz); u32 abs_offset_khz = abs(offset_khz);
u32 dds = state->cfg.bw->ifreq & 0x1ffffff; u32 dds = state->cfg.bw->ifreq & 0x1ffffff;
u8 invert = !!(state->cfg.bw->ifreq & (1 << 25)); u8 invert = !!(state->cfg.bw->ifreq & (1 << 25));
if (internal == 0) { if (internal == 0) {
Expand Down
2 changes: 1 addition & 1 deletion drivers/media/dvb-frontends/dib8000.c
Expand Up @@ -2677,7 +2677,7 @@ static void dib8000_viterbi_state(struct dib8000_state *state, u8 onoff)
static void dib8000_set_dds(struct dib8000_state *state, s32 offset_khz) static void dib8000_set_dds(struct dib8000_state *state, s32 offset_khz)
{ {
s16 unit_khz_dds_val; s16 unit_khz_dds_val;
u32 abs_offset_khz = ABS(offset_khz); u32 abs_offset_khz = abs(offset_khz);
u32 dds = state->cfg.pll->ifreq & 0x1ffffff; u32 dds = state->cfg.pll->ifreq & 0x1ffffff;
u8 invert = !!(state->cfg.pll->ifreq & (1 << 25)); u8 invert = !!(state->cfg.pll->ifreq & (1 << 25));
u8 ratio; u8 ratio;
Expand Down
2 changes: 0 additions & 2 deletions drivers/media/dvb-frontends/dibx000_common.h
Expand Up @@ -223,8 +223,6 @@ struct dvb_frontend_parametersContext {


#define FE_CALLBACK_TIME_NEVER 0xffffffff #define FE_CALLBACK_TIME_NEVER 0xffffffff


#define ABS(x) ((x < 0) ? (-x) : (x))

#define DATA_BUS_ACCESS_MODE_8BIT 0x01 #define DATA_BUS_ACCESS_MODE_8BIT 0x01
#define DATA_BUS_ACCESS_MODE_16BIT 0x02 #define DATA_BUS_ACCESS_MODE_16BIT 0x02
#define DATA_BUS_ACCESS_MODE_NO_ADDRESS_INCREMENT 0x10 #define DATA_BUS_ACCESS_MODE_NO_ADDRESS_INCREMENT 0x10
Expand Down
8 changes: 3 additions & 5 deletions drivers/media/dvb-frontends/mb86a16.c
Expand Up @@ -31,8 +31,6 @@
static unsigned int verbose = 5; static unsigned int verbose = 5;
module_param(verbose, int, 0644); module_param(verbose, int, 0644);


#define ABS(x) ((x) < 0 ? (-x) : (x))

struct mb86a16_state { struct mb86a16_state {
struct i2c_adapter *i2c_adap; struct i2c_adapter *i2c_adap;
const struct mb86a16_config *config; const struct mb86a16_config *config;
Expand Down Expand Up @@ -1202,12 +1200,12 @@ static int mb86a16_set_fe(struct mb86a16_state *state)


signal_dupl = 0; signal_dupl = 0;
for (j = 0; j < prev_freq_num; j++) { for (j = 0; j < prev_freq_num; j++) {
if ((ABS(prev_swp_freq[j] - swp_freq)) < (swp_ofs * 3 / 2)) { if ((abs(prev_swp_freq[j] - swp_freq)) < (swp_ofs * 3 / 2)) {
signal_dupl = 1; signal_dupl = 1;
dprintk(verbose, MB86A16_INFO, 1, "Probably Duplicate Signal, j = %d", j); dprintk(verbose, MB86A16_INFO, 1, "Probably Duplicate Signal, j = %d", j);
} }
} }
if ((signal_dupl == 0) && (swp_freq > 0) && (ABS(swp_freq - state->frequency * 1000) < fcp + state->srate / 6)) { if ((signal_dupl == 0) && (swp_freq > 0) && (abs(swp_freq - state->frequency * 1000) < fcp + state->srate / 6)) {
dprintk(verbose, MB86A16_DEBUG, 1, "------ Signal detect ------ [swp_freq=[%07d, srate=%05d]]", swp_freq, state->srate); dprintk(verbose, MB86A16_DEBUG, 1, "------ Signal detect ------ [swp_freq=[%07d, srate=%05d]]", swp_freq, state->srate);
prev_swp_freq[prev_freq_num] = swp_freq; prev_swp_freq[prev_freq_num] = swp_freq;
prev_freq_num++; prev_freq_num++;
Expand Down Expand Up @@ -1381,7 +1379,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
dprintk(verbose, MB86A16_INFO, 1, "SWEEP Frequency = %d", swp_freq); dprintk(verbose, MB86A16_INFO, 1, "SWEEP Frequency = %d", swp_freq);
swp_freq += delta_freq; swp_freq += delta_freq;
dprintk(verbose, MB86A16_INFO, 1, "Adjusting .., DELTA Freq = %d, SWEEP Freq=%d", delta_freq, swp_freq); dprintk(verbose, MB86A16_INFO, 1, "Adjusting .., DELTA Freq = %d, SWEEP Freq=%d", delta_freq, swp_freq);
if (ABS(state->frequency * 1000 - swp_freq) > 3800) { if (abs(state->frequency * 1000 - swp_freq) > 3800) {
dprintk(verbose, MB86A16_INFO, 1, "NO -- SIGNAL !"); dprintk(verbose, MB86A16_INFO, 1, "NO -- SIGNAL !");
} else { } else {


Expand Down
1 change: 0 additions & 1 deletion drivers/media/dvb-frontends/stv0367_priv.h
Expand Up @@ -35,7 +35,6 @@
#endif #endif


/* MACRO definitions */ /* MACRO definitions */
#define ABS(X) ((X) < 0 ? (-1 * (X)) : (X))
#define MAX(X, Y) ((X) >= (Y) ? (X) : (Y)) #define MAX(X, Y) ((X) >= (Y) ? (X) : (Y))
#define MIN(X, Y) ((X) <= (Y) ? (X) : (Y)) #define MIN(X, Y) ((X) <= (Y) ? (X) : (Y))
#define INRANGE(X, Y, Z) \ #define INRANGE(X, Y, Z) \
Expand Down
1 change: 0 additions & 1 deletion drivers/media/dvb-frontends/stv0900_priv.h
Expand Up @@ -24,7 +24,6 @@


#include <linux/i2c.h> #include <linux/i2c.h>


#define ABS(X) ((X) < 0 ? (-1 * (X)) : (X))
#define INRANGE(X, Y, Z) ((((X) <= (Y)) && ((Y) <= (Z))) \ #define INRANGE(X, Y, Z) ((((X) <= (Y)) && ((Y) <= (Z))) \
|| (((Z) <= (Y)) && ((Y) <= (X))) ? 1 : 0) || (((Z) <= (Y)) && ((Y) <= (X))) ? 1 : 0)


Expand Down
6 changes: 3 additions & 3 deletions drivers/media/dvb-frontends/stv0900_sw.c
Expand Up @@ -1255,14 +1255,14 @@ fe_stv0900_signal_type stv0900_get_signal_params(struct dvb_frontend *fe)
else else
intp->freq[d] = stv0900_get_tuner_freq(fe); intp->freq[d] = stv0900_get_tuner_freq(fe);


if (ABS(offsetFreq) <= ((intp->srch_range[d] / 2000) + 500)) if (abs(offsetFreq) <= ((intp->srch_range[d] / 2000) + 500))
range = STV0900_RANGEOK; range = STV0900_RANGEOK;
else if (ABS(offsetFreq) <= else if (abs(offsetFreq) <=
(stv0900_carrier_width(result->symbol_rate, (stv0900_carrier_width(result->symbol_rate,
result->rolloff) / 2000)) result->rolloff) / 2000))
range = STV0900_RANGEOK; range = STV0900_RANGEOK;


} else if (ABS(offsetFreq) <= ((intp->srch_range[d] / 2000) + 500)) } else if (abs(offsetFreq) <= ((intp->srch_range[d] / 2000) + 500))
range = STV0900_RANGEOK; range = STV0900_RANGEOK;


dprintk("%s: range %d\n", __func__, range); dprintk("%s: range %d\n", __func__, range);
Expand Down

0 comments on commit 7aa92c4

Please sign in to comment.