diff options
author | Swen Schillig <swen@vnet.ibm.com> | 2010-07-16 09:37:38 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-07-28 10:48:50 -0400 |
commit | 706eca49a044a1ea89352dcc4b96ffc1631b2cb5 (patch) | |
tree | f36692c277a38c051536e06272ade7ed759ab4cc /drivers/s390/scsi/zfcp_qdio.h | |
parent | 01b047599ade30051bf6c14fbe64181d1fec3dfa (diff) |
[SCSI] zfcp: Cleanup QDIO attachment and improve processing.
Some definitions and structures in the zfcp QDIO processing are
improved by the removal of not required variables and processing steps.
I addition the naming of some variables is changed to make their purpose
more clear.
Signed-off-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/s390/scsi/zfcp_qdio.h')
-rw-r--r-- | drivers/s390/scsi/zfcp_qdio.h | 57 |
1 files changed, 17 insertions, 40 deletions
diff --git a/drivers/s390/scsi/zfcp_qdio.h b/drivers/s390/scsi/zfcp_qdio.h index 8bb00545f19c..10d0df99dbf4 100644 --- a/drivers/s390/scsi/zfcp_qdio.h +++ b/drivers/s390/scsi/zfcp_qdio.h | |||
@@ -28,21 +28,11 @@ | |||
28 | (ZFCP_QDIO_MAX_SBALS_PER_REQ * ZFCP_QDIO_MAX_SBALES_PER_SBAL - 2) | 28 | (ZFCP_QDIO_MAX_SBALS_PER_REQ * ZFCP_QDIO_MAX_SBALES_PER_SBAL - 2) |
29 | 29 | ||
30 | /** | 30 | /** |
31 | * struct zfcp_qdio_queue - qdio queue buffer, zfcp index and free count | ||
32 | * @sbal: qdio buffers | ||
33 | * @first: index of next free buffer in queue | ||
34 | * @count: number of free buffers in queue | ||
35 | */ | ||
36 | struct zfcp_qdio_queue { | ||
37 | struct qdio_buffer *sbal[QDIO_MAX_BUFFERS_PER_Q]; | ||
38 | u8 first; | ||
39 | atomic_t count; | ||
40 | }; | ||
41 | |||
42 | /** | ||
43 | * struct zfcp_qdio - basic qdio data structure | 31 | * struct zfcp_qdio - basic qdio data structure |
44 | * @resp_q: response queue | 32 | * @res_q: response queue |
45 | * @req_q: request queue | 33 | * @req_q: request queue |
34 | * @req_q_idx: index of next free buffer | ||
35 | * @req_q_free: number of free buffers in queue | ||
46 | * @stat_lock: lock to protect req_q_util and req_q_time | 36 | * @stat_lock: lock to protect req_q_util and req_q_time |
47 | * @req_q_lock: lock to serialize access to request queue | 37 | * @req_q_lock: lock to serialize access to request queue |
48 | * @req_q_time: time of last fill level change | 38 | * @req_q_time: time of last fill level change |
@@ -52,8 +42,10 @@ struct zfcp_qdio_queue { | |||
52 | * @adapter: adapter used in conjunction with this qdio structure | 42 | * @adapter: adapter used in conjunction with this qdio structure |
53 | */ | 43 | */ |
54 | struct zfcp_qdio { | 44 | struct zfcp_qdio { |
55 | struct zfcp_qdio_queue resp_q; | 45 | struct qdio_buffer *res_q[QDIO_MAX_BUFFERS_PER_Q]; |
56 | struct zfcp_qdio_queue req_q; | 46 | struct qdio_buffer *req_q[QDIO_MAX_BUFFERS_PER_Q]; |
47 | u8 req_q_idx; | ||
48 | atomic_t req_q_free; | ||
57 | spinlock_t stat_lock; | 49 | spinlock_t stat_lock; |
58 | spinlock_t req_q_lock; | 50 | spinlock_t req_q_lock; |
59 | unsigned long long req_q_time; | 51 | unsigned long long req_q_time; |
@@ -73,7 +65,6 @@ struct zfcp_qdio { | |||
73 | * @sbale_curr: current sbale at creation of this request | 65 | * @sbale_curr: current sbale at creation of this request |
74 | * @sbal_response: sbal used in interrupt | 66 | * @sbal_response: sbal used in interrupt |
75 | * @qdio_outb_usage: usage of outbound queue | 67 | * @qdio_outb_usage: usage of outbound queue |
76 | * @qdio_inb_usage: usage of inbound queue | ||
77 | */ | 68 | */ |
78 | struct zfcp_qdio_req { | 69 | struct zfcp_qdio_req { |
79 | u32 sbtype; | 70 | u32 sbtype; |
@@ -84,22 +75,9 @@ struct zfcp_qdio_req { | |||
84 | u8 sbale_curr; | 75 | u8 sbale_curr; |
85 | u8 sbal_response; | 76 | u8 sbal_response; |
86 | u16 qdio_outb_usage; | 77 | u16 qdio_outb_usage; |
87 | u16 qdio_inb_usage; | ||
88 | }; | 78 | }; |
89 | 79 | ||
90 | /** | 80 | /** |
91 | * zfcp_qdio_sbale - return pointer to sbale in qdio queue | ||
92 | * @q: queue where to find sbal | ||
93 | * @sbal_idx: sbal index in queue | ||
94 | * @sbale_idx: sbale index in sbal | ||
95 | */ | ||
96 | static inline struct qdio_buffer_element * | ||
97 | zfcp_qdio_sbale(struct zfcp_qdio_queue *q, int sbal_idx, int sbale_idx) | ||
98 | { | ||
99 | return &q->sbal[sbal_idx]->element[sbale_idx]; | ||
100 | } | ||
101 | |||
102 | /** | ||
103 | * zfcp_qdio_sbale_req - return pointer to sbale on req_q for a request | 81 | * zfcp_qdio_sbale_req - return pointer to sbale on req_q for a request |
104 | * @qdio: pointer to struct zfcp_qdio | 82 | * @qdio: pointer to struct zfcp_qdio |
105 | * @q_rec: pointer to struct zfcp_qdio_req | 83 | * @q_rec: pointer to struct zfcp_qdio_req |
@@ -108,7 +86,7 @@ zfcp_qdio_sbale(struct zfcp_qdio_queue *q, int sbal_idx, int sbale_idx) | |||
108 | static inline struct qdio_buffer_element * | 86 | static inline struct qdio_buffer_element * |
109 | zfcp_qdio_sbale_req(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req) | 87 | zfcp_qdio_sbale_req(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req) |
110 | { | 88 | { |
111 | return zfcp_qdio_sbale(&qdio->req_q, q_req->sbal_last, 0); | 89 | return &qdio->req_q[q_req->sbal_last]->element[0]; |
112 | } | 90 | } |
113 | 91 | ||
114 | /** | 92 | /** |
@@ -120,8 +98,7 @@ zfcp_qdio_sbale_req(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req) | |||
120 | static inline struct qdio_buffer_element * | 98 | static inline struct qdio_buffer_element * |
121 | zfcp_qdio_sbale_curr(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req) | 99 | zfcp_qdio_sbale_curr(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req) |
122 | { | 100 | { |
123 | return zfcp_qdio_sbale(&qdio->req_q, q_req->sbal_last, | 101 | return &qdio->req_q[q_req->sbal_last]->element[q_req->sbale_curr]; |
124 | q_req->sbale_curr); | ||
125 | } | 102 | } |
126 | 103 | ||
127 | /** | 104 | /** |
@@ -142,25 +119,25 @@ void zfcp_qdio_req_init(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req, | |||
142 | unsigned long req_id, u32 sbtype, void *data, u32 len) | 119 | unsigned long req_id, u32 sbtype, void *data, u32 len) |
143 | { | 120 | { |
144 | struct qdio_buffer_element *sbale; | 121 | struct qdio_buffer_element *sbale; |
145 | int count = min(atomic_read(&qdio->req_q.count), | 122 | int count = min(atomic_read(&qdio->req_q_free), |
146 | ZFCP_QDIO_MAX_SBALS_PER_REQ); | 123 | ZFCP_QDIO_MAX_SBALS_PER_REQ); |
147 | 124 | ||
148 | q_req->sbal_first = q_req->sbal_last = qdio->req_q.first; | 125 | q_req->sbal_first = q_req->sbal_last = qdio->req_q_idx; |
149 | q_req->sbal_number = 1; | 126 | q_req->sbal_number = 1; |
150 | q_req->sbtype = sbtype; | 127 | q_req->sbtype = sbtype; |
128 | q_req->sbale_curr = 1; | ||
151 | q_req->sbal_limit = (q_req->sbal_first + count - 1) | 129 | q_req->sbal_limit = (q_req->sbal_first + count - 1) |
152 | % QDIO_MAX_BUFFERS_PER_Q; | 130 | % QDIO_MAX_BUFFERS_PER_Q; |
153 | 131 | ||
154 | sbale = zfcp_qdio_sbale_req(qdio, q_req); | 132 | sbale = zfcp_qdio_sbale_req(qdio, q_req); |
155 | sbale->addr = (void *) req_id; | 133 | sbale->addr = (void *) req_id; |
156 | sbale->flags |= SBAL_FLAGS0_COMMAND; | 134 | sbale->flags = SBAL_FLAGS0_COMMAND | sbtype; |
157 | sbale->flags |= sbtype; | ||
158 | 135 | ||
159 | q_req->sbale_curr = 1; | 136 | if (unlikely(!data)) |
137 | return; | ||
160 | sbale++; | 138 | sbale++; |
161 | sbale->addr = data; | 139 | sbale->addr = data; |
162 | if (likely(data)) | 140 | sbale->length = len; |
163 | sbale->length = len; | ||
164 | } | 141 | } |
165 | 142 | ||
166 | /** | 143 | /** |
@@ -232,7 +209,7 @@ static inline | |||
232 | void zfcp_qdio_sbal_limit(struct zfcp_qdio *qdio, | 209 | void zfcp_qdio_sbal_limit(struct zfcp_qdio *qdio, |
233 | struct zfcp_qdio_req *q_req, int max_sbals) | 210 | struct zfcp_qdio_req *q_req, int max_sbals) |
234 | { | 211 | { |
235 | int count = min(atomic_read(&qdio->req_q.count), max_sbals); | 212 | int count = min(atomic_read(&qdio->req_q_free), max_sbals); |
236 | 213 | ||
237 | q_req->sbal_limit = (q_req->sbal_first + count - 1) % | 214 | q_req->sbal_limit = (q_req->sbal_first + count - 1) % |
238 | QDIO_MAX_BUFFERS_PER_Q; | 215 | QDIO_MAX_BUFFERS_PER_Q; |