Re: [PATCH v5 10/34] cxlflash: Make functions static

2015-10-02 Thread Tomas Henzl
On 1.10.2015 17:55, Matthew R. Ochs wrote:
> Found during code inspection, that the following functions are not
> being used outside of the file where they are defined. Make them static.
>
> int cxlflash_send_cmd(struct afu *, struct afu_cmd *);
> void cxlflash_wait_resp(struct afu *, struct afu_cmd *);
> int cxlflash_afu_reset(struct cxlflash_cfg *);
> struct afu_cmd *cxlflash_cmd_checkout(struct afu *);
> void cxlflash_cmd_checkin(struct afu_cmd *);
> void init_pcr(struct cxlflash_cfg *);
> int init_global(struct cxlflash_cfg *);
>
> Signed-off-by: Matthew R. Ochs 
> Signed-off-by: Manoj N. Kumar 
> Reviewed-by: Brian King 

Reviewed-by: Tomas Henzl 

Tomas

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

[PATCH v5 10/34] cxlflash: Make functions static

2015-10-01 Thread Matthew R. Ochs
Found during code inspection, that the following functions are not
being used outside of the file where they are defined. Make them static.

int cxlflash_send_cmd(struct afu *, struct afu_cmd *);
void cxlflash_wait_resp(struct afu *, struct afu_cmd *);
int cxlflash_afu_reset(struct cxlflash_cfg *);
struct afu_cmd *cxlflash_cmd_checkout(struct afu *);
void cxlflash_cmd_checkin(struct afu_cmd *);
void init_pcr(struct cxlflash_cfg *);
int init_global(struct cxlflash_cfg *);

Signed-off-by: Matthew R. Ochs 
Signed-off-by: Manoj N. Kumar 
Reviewed-by: Brian King 
---
 drivers/scsi/cxlflash/common.h |5 -
 drivers/scsi/cxlflash/main.c   | 1018 
 2 files changed, 509 insertions(+), 514 deletions(-)

diff --git a/drivers/scsi/cxlflash/common.h b/drivers/scsi/cxlflash/common.h
index 11318de..b038ac7 100644
--- a/drivers/scsi/cxlflash/common.h
+++ b/drivers/scsi/cxlflash/common.h
@@ -192,11 +192,6 @@ static inline u64 lun_to_lunid(u64 lun)
return swab64(lun_id);
 }
 
-int cxlflash_send_cmd(struct afu *, struct afu_cmd *);
-void cxlflash_wait_resp(struct afu *, struct afu_cmd *);
-int cxlflash_afu_reset(struct cxlflash_cfg *);
-struct afu_cmd *cxlflash_cmd_checkout(struct afu *);
-void cxlflash_cmd_checkin(struct afu_cmd *);
 int cxlflash_afu_sync(struct afu *, ctx_hndl_t, res_hndl_t, u8);
 void cxlflash_list_init(void);
 void cxlflash_term_global_luns(void);
diff --git a/drivers/scsi/cxlflash/main.c b/drivers/scsi/cxlflash/main.c
index 8940336..226cefe 100644
--- a/drivers/scsi/cxlflash/main.c
+++ b/drivers/scsi/cxlflash/main.c
@@ -36,7 +36,7 @@ MODULE_LICENSE("GPL");
 
 
 /**
- * cxlflash_cmd_checkout() - checks out an AFU command
+ * cmd_checkout() - checks out an AFU command
  * @afu:   AFU to checkout from.
  *
  * Commands are checked out in a round-robin fashion. Note that since
@@ -47,7 +47,7 @@ MODULE_LICENSE("GPL");
  *
  * Return: The checked out command or NULL when command pool is empty.
  */
-struct afu_cmd *cxlflash_cmd_checkout(struct afu *afu)
+static struct afu_cmd *cmd_checkout(struct afu *afu)
 {
int k, dec = CXLFLASH_NUM_CMDS;
struct afu_cmd *cmd;
@@ -70,7 +70,7 @@ struct afu_cmd *cxlflash_cmd_checkout(struct afu *afu)
 }
 
 /**
- * cxlflash_cmd_checkin() - checks in an AFU command
+ * cmd_checkin() - checks in an AFU command
  * @cmd:   AFU command to checkin.
  *
  * Safe to pass commands that have already been checked in. Several
@@ -79,7 +79,7 @@ struct afu_cmd *cxlflash_cmd_checkout(struct afu *afu)
  * to avoid clobbering values in the event that the command is checked
  * out right away.
  */
-void cxlflash_cmd_checkin(struct afu_cmd *cmd)
+static void cmd_checkin(struct afu_cmd *cmd)
 {
cmd->rcb.scp = NULL;
cmd->rcb.timeout = 0;
@@ -238,7 +238,7 @@ static void cmd_complete(struct afu_cmd *cmd)
 
resid = cmd->sa.resid;
cmd_is_tmf = cmd->cmd_tmf;
-   cxlflash_cmd_checkin(cmd); /* Don't use cmd after here */
+   cmd_checkin(cmd); /* Don't use cmd after here */
 
pr_debug("%s: calling scsi_set_resid, scp=%p "
 "result=%X resid=%d\n", __func__,
@@ -260,6 +260,146 @@ static void cmd_complete(struct afu_cmd *cmd)
 }
 
 /**
+ * context_reset() - timeout handler for AFU commands
+ * @cmd:   AFU command that timed out.
+ *
+ * Sends a reset to the AFU.
+ */
+static void context_reset(struct afu_cmd *cmd)
+{
+   int nretry = 0;
+   u64 rrin = 0x1;
+   u64 room = 0;
+   struct afu *afu = cmd->parent;
+   ulong lock_flags;
+
+   pr_debug("%s: cmd=%p\n", __func__, cmd);
+
+   spin_lock_irqsave(>slock, lock_flags);
+
+   /* Already completed? */
+   if (cmd->sa.host_use_b[0] & B_DONE) {
+   spin_unlock_irqrestore(>slock, lock_flags);
+   return;
+   }
+
+   cmd->sa.host_use_b[0] |= (B_DONE | B_ERROR | B_TIMEOUT);
+   spin_unlock_irqrestore(>slock, lock_flags);
+
+   /*
+* We really want to send this reset at all costs, so spread
+* out wait time on successive retries for available room.
+*/
+   do {
+   room = readq_be(>host_map->cmd_room);
+   atomic64_set(>room, room);
+   if (room)
+   goto write_rrin;
+   udelay(nretry);
+   } while (nretry++ < MC_ROOM_RETRY_CNT);
+
+   pr_err("%s: no cmd_room to send reset\n", __func__);
+   return;
+
+write_rrin:
+   nretry = 0;
+   writeq_be(rrin, >host_map->ioarrin);
+   do {
+   rrin = readq_be(>host_map->ioarrin);
+   if (rrin != 0x1)
+   break;
+   /* Double delay each time */
+   udelay(2 ^ nretry);
+   } while (nretry++ < MC_ROOM_RETRY_CNT);
+}
+
+/**
+ * send_cmd() - sends an AFU command
+ * @afu:   AFU associated with the