]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.arch/s390-01-04-fcpperf-3-v2.patch
Imported linux-2.6.27.39 suse/xen patches.
[ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.arch / s390-01-04-fcpperf-3-v2.patch
diff --git a/src/patches/suse-2.6.27.31/patches.arch/s390-01-04-fcpperf-3-v2.patch b/src/patches/suse-2.6.27.31/patches.arch/s390-01-04-fcpperf-3-v2.patch
deleted file mode 100644 (file)
index 5a4314d..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-From: Gerald Schaefer <geraldsc@de.ibm.com>
-Subject:     (kernel):FCP - Performance Data colletion & analysis
-References:  bnc#417243
-
-This patch writes the channel and fabric latencies in nanoseconds per
-request via blktrace for later analysis. The utilization of the inbound
-and outbound adapter queue is also reported.
-
-Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
-Signed-off-by: Martin Peschke <mp3@de.ibm.com>
-Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
-
-Acked-by: John Jolly <jjolly@suse.de>
-
----
- drivers/s390/scsi/zfcp_def.h  |    2 ++
- drivers/s390/scsi/zfcp_fsf.c  |   34 ++++++++++++++++++++++++++++++++++
- drivers/s390/scsi/zfcp_fsf.h  |   12 ++++++++++++
- drivers/s390/scsi/zfcp_qdio.c |    1 +
- 4 files changed, 49 insertions(+)
-
---- a/drivers/s390/scsi/zfcp_fsf.c
-+++ b/drivers/s390/scsi/zfcp_fsf.c
-@@ -6,6 +6,7 @@
-  * Copyright IBM Corporation 2002, 2008
-  */
-+#include <linux/blktrace_api.h>
- #include "zfcp_ext.h"
- static void zfcp_fsf_request_timeout_handler(unsigned long data)
-@@ -834,6 +835,7 @@ static int zfcp_fsf_req_send(struct zfcp
-       list_add_tail(&req->list, &adapter->req_list[idx]);
-       spin_unlock(&adapter->req_list_lock);
-+      req->qdio_outb_usage = atomic_read(&req_q->count);
-       req->issued = get_clock();
-       if (zfcp_qdio_send(req)) {
-               /* Queues are down..... */
-@@ -2036,6 +2038,36 @@ static void zfcp_fsf_req_latency(struct 
-       spin_unlock_irqrestore(&unit->latencies.lock, flags);
- }
-+#ifdef CONFIG_BLK_DEV_IO_TRACE
-+static void zfcp_fsf_trace_latency(struct zfcp_fsf_req *fsf_req)
-+{
-+      struct fsf_qual_latency_info *lat_inf;
-+      struct scsi_cmnd *scsi_cmnd = (struct scsi_cmnd *)fsf_req->data;
-+      struct request *req = scsi_cmnd->request;
-+      struct zfcp_blk_drv_data trace;
-+      int ticks = fsf_req->adapter->timer_ticks;
-+
-+      trace.flags = 0;
-+      trace.magic = ZFCP_BLK_DRV_DATA_MAGIC;
-+      if (fsf_req->adapter->adapter_features & FSF_FEATURE_MEASUREMENT_DATA) {
-+              trace.flags |= ZFCP_BLK_LAT_VALID;
-+              lat_inf = &fsf_req->qtcb->prefix.prot_status_qual.latency_info;
-+              trace.channel_lat = lat_inf->channel_lat * ticks;
-+              trace.fabric_lat = lat_inf->fabric_lat * ticks;
-+      }
-+      if (fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR)
-+              trace.flags |= ZFCP_BLK_REQ_ERROR;
-+      trace.inb_usage = fsf_req->qdio_inb_usage;
-+      trace.outb_usage = fsf_req->qdio_outb_usage;
-+
-+      blk_add_driver_data(req->q, req, &trace, sizeof(trace));
-+}
-+#else
-+static inline void zfcp_fsf_trace_latency(struct zfcp_fsf_req *fsf_req)
-+{
-+}
-+#endif
-+
- static void zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *req)
- {
-       struct scsi_cmnd *scpnt = req->data;
-@@ -2068,6 +2100,8 @@ static void zfcp_fsf_send_fcp_command_ta
-       if (req->adapter->adapter_features & FSF_FEATURE_MEASUREMENT_DATA)
-               zfcp_fsf_req_latency(req);
-+      zfcp_fsf_trace_latency(req);
-+
-       if (unlikely(fcp_rsp_iu->validity.bits.fcp_rsp_len_valid)) {
-               if (fcp_rsp_info[3] == RSP_CODE_GOOD)
-                       set_host_byte(scpnt, DID_OK);
---- a/drivers/s390/scsi/zfcp_def.h
-+++ b/drivers/s390/scsi/zfcp_def.h
-@@ -638,6 +638,8 @@ struct zfcp_fsf_req {
-       unsigned long long     issued;         /* request sent time (STCK) */
-       struct zfcp_unit       *unit;
-       void                    (*handler)(struct zfcp_fsf_req *);
-+      u16                     qdio_outb_usage;/* usage of outbound queue */
-+      u16                     qdio_inb_usage; /* usage of inbound queue */
- };
- /* driver data */
---- a/drivers/s390/scsi/zfcp_qdio.c
-+++ b/drivers/s390/scsi/zfcp_qdio.c
-@@ -115,6 +115,7 @@ static void zfcp_qdio_reqid_check(struct
-       spin_unlock_irqrestore(&adapter->req_list_lock, flags);
-       fsf_req->sbal_response = sbal_idx;
-+      fsf_req->qdio_inb_usage = atomic_read(&adapter->resp_q.count);
-       zfcp_fsf_req_complete(fsf_req);
- }
---- a/drivers/s390/scsi/zfcp_fsf.h
-+++ b/drivers/s390/scsi/zfcp_fsf.h
-@@ -514,4 +514,16 @@ struct fsf_qtcb {
-       u8 log[FSF_QTCB_LOG_SIZE];
- } __attribute__ ((packed));
-+struct zfcp_blk_drv_data {
-+#define ZFCP_BLK_DRV_DATA_MAGIC                       0x1
-+      u32 magic;
-+#define ZFCP_BLK_LAT_VALID                    0x1
-+#define ZFCP_BLK_REQ_ERROR                    0x2
-+      u16 flags;
-+      u8 inb_usage;
-+      u8 outb_usage;
-+      u64 channel_lat;
-+      u64 fabric_lat;
-+} __attribute__ ((packed));
-+
- #endif                                /* FSF_H */