bcm_send_to_user(op, &msg_head, NULL, 0);
}
- }
-
- if (op->j_ival1 && (op->count > 0)) {
/* send (next) frame */
bcm_can_tx(op);
/* spec: send can_frame when starting timer */
op->flags |= TX_ANNOUNCE;
- if (op->j_ival1 && (op->count > 0)) {
+ /* only start timer when having more frames than sent below */
+ if (op->j_ival1 && (op->count > 1)) {
/* op->count-- is done in bcm_tx_timeout_handler */
mod_timer(&op->timer, jiffies + op->j_ival1);
} else
mod_timer(&op->timer, jiffies + op->j_ival2);
}
- if (op->flags & TX_ANNOUNCE)
+ if (op->flags & TX_ANNOUNCE) {
bcm_can_tx(op);
+ if (op->j_ival1 && (op->count > 0))
+ op->count--;
+ }
return msg_head->nframes * CFSIZ + MHSIZ;
}
.init = bcm_init,
};
-static struct can_proto bcm_can_proto __read_mostly = {
+static const struct can_proto bcm_can_proto = {
.type = SOCK_DGRAM,
.protocol = CAN_BCM,
.capability = -1,
.prot = &bcm_proto,
};
#else
-static struct can_proto bcm_can_proto __read_mostly = {
+static const struct can_proto bcm_can_proto = {
.type = SOCK_DGRAM,
.protocol = CAN_BCM,
.capability = -1,