On Sat, Feb 06, 2016 at 11:44:22AM -0700, Sagar Dharia wrote:
+ spin_lock_irqsave(&ctrl->txn_lock, flags);
+ msg = ctrl->tid_tbl[tid];
+ if (msg == NULL || msg->rbuf == NULL) {
+ spin_unlock_irqrestore(&ctrl->txn_lock, flags);
+ dev_err(&ctrl->dev, "Got response to invalid TID:%d, len:%d\n",
+ tid, len);
+ return;
+ }
+ memcpy(msg->rbuf, reply, len);
+ ctrl->tid_tbl[tid] = NULL;
+ if (msg->comp_cb)
+ msg->comp_cb(msg->ctx, 0);
+ spin_unlock_irqrestore(&ctrl->txn_lock, flags);
Do we need to hold the lock for so long (especially with things like the
memcpy())? As far as I can tell we only need the lock for this:
+ msg = ctrl->tid_tbl[tid];
+ ctrl->tid_tbl[tid] = NULL;
+ if (mc == SLIM_MSG_MC_REQUEST_CHANGE_VALUE ||
+ mc == SLIM_MSG_MC_CHANGE_VALUE ||
+ mc == SLIM_MSG_MC_REQUEST_CLEAR_INFORMATION ||
+ mc == SLIM_MSG_MC_CLEAR_INFORMATION)
+ txn->rl += msg->num_bytes;
A switch statement might be nicer here.