This is a test to be sure my replacement is equivalent:
--------------------
#include <stdio.h>
#define MODINC(x,y) (x = x++ % y)
#define MODULO_INC(x,y) ((x) = ((x)%(y))+1)
int main() {
int x1=1;
int x2=1;
int y=7;
int i;
for(i=0;i<22;i++) {
printf("%d,%d -> ",x1,x2);
MODINC(x1,y);
MODULO_INC(x2,y);
printf("%d,%d\n",x1,x2);
}
}
Patch is below
-- vda
--- i2o_config.c.new Mon Oct 22 13:39:56 2001 +++ i2o_config.c.orig Tue Nov 27 16:03:19 2001 @@ -45,7 +45,7 @@ static spinlock_t i2o_config_lock = SPIN_LOCK_UNLOCKED; struct wait_queue *i2o_wait_queue;
-#define MODINC(x,y) (x = x++ % y) +#define MODULO_INC(x,y) ((x) = ((x)%(y))+1)
struct i2o_cfg_info { @@ -144,10 +144,10 @@ inf->event_q[inf->q_in].data_size);
spin_lock(&i2o_config_lock); - MODINC(inf->q_in, I2O_EVT_Q_LEN); + MODULO_INC(inf->q_in, I2O_EVT_Q_LEN); if(inf->q_len == I2O_EVT_Q_LEN) { - MODINC(inf->q_out, I2O_EVT_Q_LEN); + MODULO_INC(inf->q_out, I2O_EVT_Q_LEN); inf->q_lost++; } else @@ -803,7 +803,7 @@ }
memcpy(&kget.info, &p->event_q[p->q_out], sizeof(struct i2o_evt_info)); - MODINC(p->q_out, I2O_EVT_Q_LEN); + MODULO_INC(p->q_out, I2O_EVT_Q_LEN); spin_lock_irqsave(&i2o_config_lock, flags); p->q_len--; kget.pending = p->q_len; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/