Message ID | 1475030915-9525-4-git-send-email-gwshan@linux.vnet.ibm.com |
---|---|
State | Changes Requested, archived |
Headers | show |
On Wed, 2016-09-28 at 12:48 +1000, Gavin Shan wrote: > This reworks request index allocation for: (A) @ndp->request_id > should > represent last allocated request index instead of accumulated request > indexes; (B) The request index (1) is reserved according to section > 6.3.1.1 in v1.1.0 NCSI spec. > > Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> The commit message could be clearer. Code makes sense though. Signed-off-by: Joel Stanley <joel@jms.id.au> > --- > net/ncsi/internal.h | 1 + > net/ncsi/ncsi-manage.c | 17 +++++++++-------- > 2 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/net/ncsi/internal.h b/net/ncsi/internal.h > index 0a5c580..821f1d3 100644 > --- a/net/ncsi/internal.h > +++ b/net/ncsi/internal.h > @@ -259,6 +259,7 @@ struct ncsi_dev_priv { > struct list_head packages; /* List of > packages */ > struct ncsi_request requests[256]; /* Request > table */ > unsigned int request_id; /* Last used request > ID */ > +#define NCSI_REQ_START_IDX 1 > unsigned int pending_req_num; /* Number of pending > requests */ > struct ncsi_package *active_package; /* Currently handled > package */ > struct ncsi_channel *active_channel; /* Currently handled > channel */ > diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c > index 8011d51..282be06 100644 > --- a/net/ncsi/ncsi-manage.c > +++ b/net/ncsi/ncsi-manage.c > @@ -415,30 +415,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; > } > > @@ -1121,7 +1122,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; >
diff --git a/net/ncsi/internal.h b/net/ncsi/internal.h index 0a5c580..821f1d3 100644 --- a/net/ncsi/internal.h +++ b/net/ncsi/internal.h @@ -259,6 +259,7 @@ struct ncsi_dev_priv { struct list_head packages; /* List of packages */ struct ncsi_request requests[256]; /* Request table */ unsigned int request_id; /* Last used request ID */ +#define NCSI_REQ_START_IDX 1 unsigned int pending_req_num; /* Number of pending requests */ struct ncsi_package *active_package; /* Currently handled package */ struct ncsi_channel *active_channel; /* Currently handled channel */ diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c index 8011d51..282be06 100644 --- a/net/ncsi/ncsi-manage.c +++ b/net/ncsi/ncsi-manage.c @@ -415,30 +415,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; } @@ -1121,7 +1122,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;
This reworks request index allocation for: (A) @ndp->request_id should represent last allocated request index instead of accumulated request indexes; (B) The request index (1) is reserved according to section 6.3.1.1 in v1.1.0 NCSI spec. Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> --- net/ncsi/internal.h | 1 + net/ncsi/ncsi-manage.c | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-)