RE: [PATCH] drivers: scsi: megaraid: Add "megaraid_sas_internal.h" for internal shared functions using

From: Sumit Saxena
Date: Mon Nov 17 2014 - 06:52:03 EST


>-----Original Message-----
>From: Chen Gang [mailto:gang.chen.5i5j@xxxxxxxxx]
>Sent: Monday, November 17, 2014 5:17 PM
>To: Sumit Saxena
>Cc: megaraidlinux@xxxxxxx; linux-scsi@xxxxxxxxxxxxxxx; linux-
>kernel@xxxxxxxxxxxxxxx
>Subject: RE: [PATCH] drivers: scsi: megaraid: Add "megaraid_sas_internal.h"
>for internal shared functions using
>
>
>OK, I will send patch v2 for it.
>
>I sent this patch based on Linux next tree, please tell me the tree
>location (git
>address) which I shall base on for sending patch v2.

I posted the patch series today, once the patches make it to scsi-next tree,
I will let you know.

Thanks
Sumit
>
>Thanks.
>
>Send from Lenovo A788t.
>
>Sumit Saxena <sumit.saxena@xxxxxxxxxxxxx> wrote:
>
>>>-----Original Message-----
>>>From: Chen Gang [mailto:gang.chen.5i5j@xxxxxxxxx]
>>>Sent: Sunday, November 09, 2014 3:47 PM
>>>To: megaraidlinux@xxxxxxx; JBottomley@xxxxxxxxxxxxx
>>>Cc: linux-scsi@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
>>>Subject: [PATCH] drivers: scsi: megaraid: Add "megaraid_sas_internal.h"
>>for
>>>internal shared functions using
>>>
>>>For shared inline functions crossed source files, better to let it as
>>"static inline"
>>>in a header file. For extern functions, better to declare them in
>>>header
>>file.
>>>
>>>For the latest upstream gcc/binutiles (gcc 5 with ld 2.25.51), it will
>>cause
>>>building break (although it might be the gcc's or ld's issue), the
>>related error
>>>(with allmodconfig under tile):
>>>
>>> MODPOST 4002 modules
>>> ERROR: "megasas_return_cmd" [drivers/scsi/megaraid/megaraid_sas.ko]
>>>undefined!
>>> ERROR: "megasas_is_ldio" [drivers/scsi/megaraid/megaraid_sas.ko]
>>>undefined!
>>>
>>>
>>>Signed-off-by: Chen Gang <gang.chen.5i5j@xxxxxxxxx>
>>>---
>>> drivers/scsi/megaraid/megaraid_sas_base.c | 65 +----------------
>>> drivers/scsi/megaraid/megaraid_sas_fusion.c | 38 +---------
>>> drivers/scsi/megaraid/megaraid_sas_internal.h | 100
>>>++++++++++++++++++++++++++
>>> 3 files changed, 102 insertions(+), 101 deletions(-) create mode
>>>100644 drivers/scsi/megaraid/megaraid_sas_internal.h
>>>
>>>diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c
>>>b/drivers/scsi/megaraid/megaraid_sas_base.c
>>>index f6a69a3..4a71c04 100644
>>>--- a/drivers/scsi/megaraid/megaraid_sas_base.c
>>>+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
>>>@@ -57,6 +57,7 @@
>>> #include <scsi/scsi_tcq.h>
>>> #include "megaraid_sas_fusion.h"
>>> #include "megaraid_sas.h"
>>>+#include "megaraid_sas_internal.h"
>>>
>>> /*
>>> * Number of sectors per IO command
>>>@@ -98,7 +99,6 @@ MODULE_VERSION(MEGASAS_VERSION);
>>>MODULE_AUTHOR("megaraidlinux@xxxxxxx");
>>> MODULE_DESCRIPTION("LSI MegaRAID SAS Driver");
>>>
>>>-int megasas_transition_to_ready(struct megasas_instance *instance,
>>>int ocr); static int megasas_get_pd_list(struct megasas_instance
>>>*instance); static int megasas_ld_list_query(struct megasas_instance
>*instance,
>>> u8 query_type);
>>>@@ -155,9 +155,6 @@ static u32 support_device_change;
>>> /* define lock for aen poll */
>>> spinlock_t poll_aen_lock;
>>>
>>>-void
>>>-megasas_complete_cmd(struct megasas_instance *instance, struct
>>>megasas_cmd *cmd,
>>>- u8 alt_status);
>>> static u32
>>> megasas_read_fw_status_reg_gen2(struct megasas_register_set
>__iomem
>>>*regs); static int @@ -170,26 +167,8 @@ u32
>>>megasas_build_and_issue_cmd(struct megasas_instance *instance,
>>> struct scsi_cmnd *scmd);
>>> static void megasas_complete_cmd_dpc(unsigned long instance_addr);
>>>-void -megasas_release_fusion(struct megasas_instance *instance); -int
>>>- megasas_ioc_init_fusion(struct megasas_instance *instance); -void -
>>>megasas_free_cmds_fusion(struct megasas_instance *instance);
>>>-u8
>>>-megasas_get_map_info(struct megasas_instance *instance); -int -
>>>megasas_sync_map_info(struct megasas_instance *instance); -int -
>>>wait_and_poll(struct megasas_instance *instance, struct megasas_cmd
>>>*cmd,
>>>- int seconds);
>>>-void megasas_reset_reply_desc(struct megasas_instance *instance);
>>>-int megasas_reset_fusion(struct Scsi_Host *shost, int iotimeout);
>>>-void megasas_fusion_ocr_wq(struct work_struct *work); static int
>>>megasas_get_ld_vf_affiliation(struct megasas_instance *instance,
>>> int initial);
>>>-int megasas_check_mpio_paths(struct megasas_instance *instance,
>>>- struct scsi_cmnd *scmd);
>>>
>>> void
>>> megasas_issue_dcmd(struct megasas_instance *instance, struct
>>>megasas_cmd *cmd) @@ -258,22 +237,6 @@
>__megasas_return_cmd(struct
>>>megasas_instance *instance, struct megasas_cmd *cmd) }
>>>
>>> /**
>>>- * megasas_return_cmd - Return a cmd to free command pool
>>>- * @instance: Adapter soft state
>>>- * @cmd: Command packet to be returned to free command
>>>pool
>>>- */
>>>-inline void
>>>-megasas_return_cmd(struct megasas_instance *instance, struct
>>>megasas_cmd *cmd) -{
>>>- unsigned long flags;
>>>-
>>>- spin_lock_irqsave(&instance->mfi_pool_lock, flags);
>>>- __megasas_return_cmd(instance, cmd);
>>>- spin_unlock_irqrestore(&instance->mfi_pool_lock, flags);
>>>-}
>>>-
>>>-
>>>-/**
>>> * The following functions are defined for xscale
>>> * (deviceid : 1064R, PERC5) controllers
>>> */
>>>@@ -1417,32 +1380,6 @@ megasas_build_ldio(struct megasas_instance
>>>*instance, struct scsi_cmnd *scp,
>>> return cmd->frame_count;
>>> }
>>>
>>>-/**
>>>- * megasas_is_ldio - Checks if the cmd is for logical drive
>>>- * @scmd: SCSI command
>>>- *
>>>- * Called by megasas_queue_command to find out if the command to be
>>>queued
>>>- * is a logical drive command
>>>- */
>>>-inline int megasas_is_ldio(struct scsi_cmnd *cmd) -{
>>>- if (!MEGASAS_IS_LOGICAL(cmd))
>>>- return 0;
>>>- switch (cmd->cmnd[0]) {
>>>- case READ_10:
>>>- case WRITE_10:
>>>- case READ_12:
>>>- case WRITE_12:
>>>- case READ_6:
>>>- case WRITE_6:
>>>- case READ_16:
>>>- case WRITE_16:
>>>- return 1;
>>>- default:
>>>- return 0;
>>>- }
>>>-}
>>>-
>>> /**
>>> * megasas_dump_pending_frames - Dumps the frame address of
>all
>>>pending cmds
>>> * in FW
>>>diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c
>>>b/drivers/scsi/megaraid/megaraid_sas_fusion.c
>>>index f37eed6..c2b8782 100644
>>>--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
>>>+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
>>>@@ -54,43 +54,7 @@
>>>
>>> #include "megaraid_sas_fusion.h"
>>> #include "megaraid_sas.h"
>>>-
>>>-extern void megasas_free_cmds(struct megasas_instance *instance); -
>>>extern struct megasas_cmd *megasas_get_cmd(struct megasas_instance
>>>- *instance);
>>>-extern void
>>>-megasas_complete_cmd(struct megasas_instance *instance,
>>>- struct megasas_cmd *cmd, u8 alt_status);
>>>-int megasas_is_ldio(struct scsi_cmnd *cmd); -int
>>>-wait_and_poll(struct megasas_instance *instance, struct megasas_cmd
>*cmd,
>>>- int seconds);
>>>-
>>>-void
>>>-megasas_return_cmd(struct megasas_instance *instance, struct
>>>megasas_cmd *cmd); -int megasas_alloc_cmds(struct megasas_instance
>>>*instance); -int -megasas_clear_intr_fusion(struct
>>>megasas_register_set __iomem *regs); -int -megasas_issue_polled(struct
>>>megasas_instance *instance,
>>>- struct megasas_cmd *cmd);
>>>-void
>>>-megasas_check_and_restore_queue_depth(struct megasas_instance
>>>*instance);
>>>-
>>>-int megasas_transition_to_ready(struct megasas_instance *instance,
>>>int ocr); -void megaraid_sas_kill_hba(struct megasas_instance
>>>*instance);
>>>-
>>>-extern u32 megasas_dbg_lvl;
>>>-void megasas_sriov_heartbeat_handler(unsigned long instance_addr);
>>>-int megasas_sriov_start_heartbeat(struct megasas_instance *instance,
>>>- int initial);
>>>-void megasas_start_timer(struct megasas_instance *instance,
>>>- struct timer_list *timer,
>>>- void *fn, unsigned long interval);
>>>-extern struct megasas_mgmt_info megasas_mgmt_info; -extern int
>>>resetwaittime;
>>>-
>>>-
>>>+#include "megaraid_sas_internal.h"
>>>
>>> /**
>>> * megasas_enable_intr_fusion - Enables interrupts
>>>diff --git a/drivers/scsi/megaraid/megaraid_sas_internal.h
>>>b/drivers/scsi/megaraid/megaraid_sas_internal.h
>>>new file mode 100644
>>>index 0000000..b2b0a55
>>>--- /dev/null
>>>+++ b/drivers/scsi/megaraid/megaraid_sas_internal.h
>>>@@ -0,0 +1,100 @@
>>>+#ifndef LSI_MEGARAID_SAS_INTERNAL_H
>>>+#define LSI_MEGARAID_SAS_INTERNAL_H
>>>+
>>>+/*
>>>+ * From base.
>>>+ */
>>>+
>>>+extern void megasas_free_cmds(struct megasas_instance *instance);
>>>+extern struct megasas_cmd *megasas_get_cmd(struct megasas_instance
>>>+ *instance);
>>>+
>>>+extern void
>>>+megasas_complete_cmd(struct megasas_instance *instance,
>>>+ struct megasas_cmd *cmd, u8 alt_status);
>>>+/**
>>>+ * megasas_is_ldio - Checks if the cmd is for logical drive
>>>+ * @scmd: SCSI command
>>>+ *
>>>+ * Called by megasas_queue_command to find out if the command to be
>>>+queued
>>>+ * is a logical drive command
>>>+ */
>>>+static inline int megasas_is_ldio(struct scsi_cmnd *cmd) {
>>>+ if (!MEGASAS_IS_LOGICAL(cmd))
>>>+ return 0;
>>>+ switch (cmd->cmnd[0]) {
>>>+ case READ_10:
>>>+ case WRITE_10:
>>>+ case READ_12:
>>>+ case WRITE_12:
>>>+ case READ_6:
>>>+ case WRITE_6:
>>>+ case READ_16:
>>>+ case WRITE_16:
>>>+ return 1;
>>>+ default:
>>>+ return 0;
>>>+ }
>>>+}
>>>+
>>>+/**
>>>+ * megasas_return_cmd - Return a cmd to free command pool
>>>+ * @instance: Adapter soft state
>>>+ * @cmd: Command packet to be returned to free command
>>>pool
>>>+ */
>>>+static inline void
>>>+megasas_return_cmd(struct megasas_instance *instance, struct
>>>+megasas_cmd *cmd) {
>>>+ unsigned long flags;
>>>+
>>>+ spin_lock_irqsave(&instance->mfi_pool_lock, flags);
>>>+ __megasas_return_cmd(instance, cmd);
>>>+ spin_unlock_irqrestore(&instance->mfi_pool_lock, flags); }
>>>+
>>>+int megasas_alloc_cmds(struct megasas_instance *instance);
>>>+
>>>+int
>>>+megasas_issue_polled(struct megasas_instance *instance,
>>>+ struct megasas_cmd *cmd);
>>>+void
>>>+megasas_check_and_restore_queue_depth(struct megasas_instance
>>>+*instance);
>>>+
>>>+int megasas_transition_to_ready(struct megasas_instance *instance,
>>>+int ocr); void megaraid_sas_kill_hba(struct megasas_instance
>>>+*instance);
>>>+
>>>+extern u32 megasas_dbg_lvl;
>>>+void megasas_sriov_heartbeat_handler(unsigned long instance_addr);
>>>+int megasas_sriov_start_heartbeat(struct megasas_instance *instance,
>>>+ int initial);
>>>+void megasas_start_timer(struct megasas_instance *instance,
>>>+ struct timer_list *timer,
>>>+ void *fn, unsigned long interval); extern struct
>>>+megasas_mgmt_info megasas_mgmt_info; extern int resetwaittime;
>>>+
>>>+/*
>>>+ * From fusion.
>>>+ */
>>>+
>>>+int megasas_check_mpio_paths(struct megasas_instance *instance,
>>>+ struct scsi_cmnd *scmd);
>>>+int
>>>+wait_and_poll(struct megasas_instance *instance, struct megasas_cmd
>>>*cmd,
>>>+ int seconds);
>>>+void
>>>+megasas_release_fusion(struct megasas_instance *instance); int
>>>+megasas_ioc_init_fusion(struct megasas_instance *instance); void
>>>+megasas_free_cmds_fusion(struct megasas_instance *instance);
>>>+u8
>>>+megasas_get_map_info(struct megasas_instance *instance); int
>>>+megasas_sync_map_info(struct megasas_instance *instance); void
>>>+megasas_reset_reply_desc(struct megasas_instance *instance); int
>>>+megasas_reset_fusion(struct Scsi_Host *shost, int iotimeout); void
>>>+megasas_fusion_ocr_wq(struct work_struct *work);
>>>+
>>>+#endif /* LSI_MEGARAID_SAS_INTERNAL_H */
>>
>>Patch looks good to me. Can you please rebase this patch on top of
>>latest patch series sent by me?
>>>--
>>>1.9.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/