|
@@ -427,30 +427,31 @@ struct ncsi_request *ncsi_alloc_request(struct ncsi_dev_priv *ndp, bool driven)
|
|
|
|
|
|
/* Check if there is one available request until the ceiling */
|
|
|
spin_lock_irqsave(&ndp->lock, flags);
|
|
|
- for (i = ndp->request_id; !nr && i < limit; i++) {
|
|
|
+ for (i = ndp->request_id; i < limit; i++) {
|
|
|
if (ndp->requests[i].used)
|
|
|
continue;
|
|
|
|
|
|
nr = &ndp->requests[i];
|
|
|
nr->used = true;
|
|
|
nr->driven = driven;
|
|
|
- if (++ndp->request_id >= limit)
|
|
|
- ndp->request_id = 0;
|
|
|
+ ndp->request_id = i + 1;
|
|
|
+ goto found;
|
|
|
}
|
|
|
|
|
|
/* Fail back to check from the starting cursor */
|
|
|
- for (i = 0; !nr && i < ndp->request_id; i++) {
|
|
|
+ for (i = NCSI_REQ_START_IDX; i < ndp->request_id; i++) {
|
|
|
if (ndp->requests[i].used)
|
|
|
continue;
|
|
|
|
|
|
nr = &ndp->requests[i];
|
|
|
nr->used = true;
|
|
|
nr->driven = driven;
|
|
|
- if (++ndp->request_id >= limit)
|
|
|
- ndp->request_id = 0;
|
|
|
+ ndp->request_id = i + 1;
|
|
|
+ goto found;
|
|
|
}
|
|
|
- spin_unlock_irqrestore(&ndp->lock, flags);
|
|
|
|
|
|
+found:
|
|
|
+ spin_unlock_irqrestore(&ndp->lock, flags);
|
|
|
return nr;
|
|
|
}
|
|
|
|
|
@@ -1148,7 +1149,7 @@ struct ncsi_dev *ncsi_register_dev(struct net_device *dev,
|
|
|
/* Initialize private NCSI device */
|
|
|
spin_lock_init(&ndp->lock);
|
|
|
INIT_LIST_HEAD(&ndp->packages);
|
|
|
- ndp->request_id = 0;
|
|
|
+ ndp->request_id = NCSI_REQ_START_IDX;
|
|
|
for (i = 0; i < ARRAY_SIZE(ndp->requests); i++) {
|
|
|
ndp->requests[i].id = i;
|
|
|
ndp->requests[i].ndp = ndp;
|