Skip to contentSkip to conversation

scsi: Introduce a help function local_time_seconds() to simplify the getting time stamp operation

PATCH RESEND In review Gu Zheng 2 participants 3 messages Jun 10, 2013 – Jun 11, 2013

Subsystems (2)
lore
Share & tools
lore

Gu Zheng

author
#0 lore raw

PATCH RESEND 1/1 scsi: Introduce a help function local_time_seconds() to simplify the getting time stamp operation

There are four places convert system time in UTC to local time seconds as a time stamp in scsi-subsystem, so we introduce a help function local_time_seconds() to simplify these operations.

---
 drivers/scsi/3w-9xxx.c |   14 ++------------
 drivers/scsi/3w-sas.c  |   14 ++------------
 include/scsi/scsi.h    |    9 +++++++++
 3 files changed, 13 insertions(+), 24 deletions(-)
drivers/scsi/3w-9xxx.c +2 -12
index 5e1e12c..44b3ea8 100644
@@ -374,8 +374,6 @@ out:
 /* This function will queue an event */
 static void twa_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_Header *header)
 {
-	u32 local_time;
-	struct timeval time;
 	TW_Event *event;
 	unsigned short aen;
 	char host[16];
@@ -398,9 +396,7 @@ static void twa_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_H
 	memset(event, 0, sizeof(TW_Event));
 
 	event->severity = TW_SEV_OUT(header->status_block.severity__reserved);
-	do_gettimeofday(&time);
-	local_time = (u32)(time.tv_sec - (sys_tz.tz_minuteswest * 60));
-	event->time_stamp_sec = local_time;
+	event->time_stamp_sec = local_time_seconds();
 	event->aen_code = aen;
 	event->retrieved = TW_AEN_NOT_RETRIEVED;
 	event->sequence_id = tw_dev->error_sequence_id;
@@ -479,11 +475,9 @@ out:
 static void twa_aen_sync_time(TW_Device_Extension *tw_dev, int request_id)
 {
 	u32 schedulertime;
-	struct timeval utc;
 	TW_Command_Full *full_command_packet;
 	TW_Command *command_packet;
 	TW_Param_Apache *param;
-	u32 local_time;
 
 	/* Fill out the command packet */
 	full_command_packet = tw_dev->command_packet_virt[request_id];
@@ -503,11 +497,7 @@ static void twa_aen_sync_time(TW_Device_Extension *tw_dev, int request_id)
 	param->parameter_id = cpu_to_le16(0x3); /* SchedulerTime */
 	param->parameter_size_bytes = cpu_to_le16(4);
 
-	/* Convert system time in UTC to local time seconds since last 
-           Sunday 12:00AM */
-	do_gettimeofday(&utc);
-	local_time = (u32)(utc.tv_sec - (sys_tz.tz_minuteswest * 60));
-	schedulertime = local_time - (3 * 86400);
+	schedulertime = local_time_seconds() - (3 * 86400);
 	schedulertime = cpu_to_le32(schedulertime % 604800);
 
 	memcpy(param->data, &schedulertime, sizeof(u32));
drivers/scsi/3w-sas.c +2 -12
index c845bdb..69f1d8a 100644
@@ -236,8 +236,6 @@ out:
 /* This function will queue an event */
 static void twl_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_Header *header)
 {
-	u32 local_time;
-	struct timeval time;
 	TW_Event *event;
 	unsigned short aen;
 	char host[16];
@@ -256,9 +254,7 @@ static void twl_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_H
 	memset(event, 0, sizeof(TW_Event));
 
 	event->severity = TW_SEV_OUT(header->status_block.severity__reserved);
-	do_gettimeofday(&time);
-	local_time = (u32)(time.tv_sec - (sys_tz.tz_minuteswest * 60));
-	event->time_stamp_sec = local_time;
+	event->time_stamp_sec = local_time_seconds();
 	event->aen_code = aen;
 	event->retrieved = TW_AEN_NOT_RETRIEVED;
 	event->sequence_id = tw_dev->error_sequence_id;
@@ -444,11 +440,9 @@ out:
 static void twl_aen_sync_time(TW_Device_Extension *tw_dev, int request_id)
 {
 	u32 schedulertime;
-	struct timeval utc;
 	TW_Command_Full *full_command_packet;
 	TW_Command *command_packet;
 	TW_Param_Apache *param;
-	u32 local_time;
 
 	/* Fill out the command packet */
 	full_command_packet = tw_dev->command_packet_virt[request_id];
@@ -468,11 +462,7 @@ static void twl_aen_sync_time(TW_Device_Extension *tw_dev, int request_id)
 	param->parameter_id = cpu_to_le16(0x3); /* SchedulerTime */
 	param->parameter_size_bytes = cpu_to_le16(4);
 
-	/* Convert system time in UTC to local time seconds since last 
-           Sunday 12:00AM */
-	do_gettimeofday(&utc);
-	local_time = (u32)(utc.tv_sec - (sys_tz.tz_minuteswest * 60));
-	schedulertime = local_time - (3 * 86400);
+	schedulertime = local_time_seconds() - (3 * 86400);
 	schedulertime = cpu_to_le32(schedulertime % 604800);
 
 	memcpy(param->data, &schedulertime, sizeof(u32));
include/scsi/scsi.h +9 -0
index 66216c1..f3377ca 100644
@@ -574,4 +574,13 @@ static inline __u32 scsi_to_u32(__u8 *ptr)
 	return (ptr[0]<<24) + (ptr[1]<<16) + (ptr[2]<<8) + ptr[3];
 }
 
+/*
+ * Convert system time in UTC to local time seconds.
+ */
+static inline u32 local_time_seconds(void)
+{
+	struct timeval utc;
+	do_gettimeofday(&utc);
+	return (u32)(utc.tv_sec - (sys_tz.tz_minuteswest * 60));
+}
 #endif /* _SCSI_SCSI_H */
Signature · 1 line
1.7.7
maintainer
#1 lore raw
Quoted 8 lines · Gu Zheng
include/scsi/scsi.h +0 -0
index 66216c1..f3377ca 100644
@@ -574,4 +574,13 @@ static inline __u32 scsi_to_u32(__u8 *ptr)
        return (ptr[0]<<24) + (ptr[1]<<16) + (ptr[2]<<8) + ptr[3];
 }
 

include/scsi/scsi.h static inline __u32 scsi_to_u32(__u8 *ptr) · line 586

Quoted 10 lines
include/scsi/scsi.h +9 -0
+/*
+ * Convert system time in UTC to local time seconds.
+ */
+static inline u32 local_time_seconds(void)
+{
+       struct timeval utc;
+       do_gettimeofday(&utc);
+       return (u32)(utc.tv_sec - (sys_tz.tz_minuteswest * 60));
+}
 #endif /* _SCSI_SCSI_H */

This doesn't belong in SCSI.

It's not a common pattern, so just leave it open coded in the 3ware drivers. If there's a need for it to be a common pattern, John Stultz will add it to the timer code, but at the moment, he doesn't seem to see the need.

James

author
#2 lore raw
Quoted 22 lines · James Bottomley
Quoted 8 lines · Gu Zheng
include/scsi/scsi.h +0 -0
index 66216c1..f3377ca 100644
@@ -574,4 +574,13 @@ static inline __u32 scsi_to_u32(__u8 *ptr)
        return (ptr[0]<<24) + (ptr[1]<<16) + (ptr[2]<<8) + ptr[3];
 }
 

include/scsi/scsi.h static inline __u32 scsi_to_u32(__u8 *ptr) · line 586

Quoted 10 lines
include/scsi/scsi.h +9 -0
+/*
+ * Convert system time in UTC to local time seconds.
+ */
+static inline u32 local_time_seconds(void)
+{
+       struct timeval utc;
+       do_gettimeofday(&utc);
+       return (u32)(utc.tv_sec - (sys_tz.tz_minuteswest * 60));
+}
 #endif /* _SCSI_SCSI_H */

This doesn't belong in SCSI.

Quoted 4 lines

It's not a common pattern, so just leave it open coded in the 3ware drivers. If there's a need for it to be a common pattern, John Stultz will add it to the timer code, but at the moment, he doesn't seem to see the need.

Hi James,
OK...Thanks for your reminder.
As you mentioned in an old thread, what about using "jiffies to seconds" to replace the existed timestamps?

Best regards,
Gu

Quoted 5 lines

James