diff mbox

[v4.7,4/7] net/ncsi: Rework request index allocation

Message ID 1475030915-9525-4-git-send-email-gwshan@linux.vnet.ibm.com
State Changes Requested, archived
Headers show

Commit Message

Gavin Shan Sept. 28, 2016, 2:48 a.m. UTC
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(-)

Comments

Joel Stanley Sept. 28, 2016, 5:34 a.m. UTC | #1
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 mbox

Patch

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;