diff options
author | Roland Dreier <rolandd@cisco.com> | 2007-10-14 23:40:27 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2007-10-15 23:17:27 -0400 |
commit | ab8403c424a35364a3a2c753f7c5917fcbb4d809 (patch) | |
tree | 9cbcfbc4ae9f15b05272be1fbdc7e028b86f297e /drivers/infiniband/hw/mthca/mthca_eq.c | |
parent | 744ea922c901b6557bffe8bff7af1ef18181f370 (diff) |
IB/mthca: Avoid alignment traps when writing doorbells
Architectures such as ia64 see alignment traps when doing a 64-bit
read from __be32 doorbell[2] arrays to do doorbell writes in
mthca_write64(). Fix this by just passing the two halves of the
doorbell value into mthca_write64(). This actually improves the
generated code by allowing the compiler to see what's going on better.
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/mthca/mthca_eq.c')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_eq.c | 21 |
1 files changed, 3 insertions, 18 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_eq.c b/drivers/infiniband/hw/mthca/mthca_eq.c index 8592b26dc4e1..b29de51b7f35 100644 --- a/drivers/infiniband/hw/mthca/mthca_eq.c +++ b/drivers/infiniband/hw/mthca/mthca_eq.c | |||
@@ -173,11 +173,6 @@ static inline u64 async_mask(struct mthca_dev *dev) | |||
173 | 173 | ||
174 | static inline void tavor_set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u32 ci) | 174 | static inline void tavor_set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u32 ci) |
175 | { | 175 | { |
176 | __be32 doorbell[2]; | ||
177 | |||
178 | doorbell[0] = cpu_to_be32(MTHCA_EQ_DB_SET_CI | eq->eqn); | ||
179 | doorbell[1] = cpu_to_be32(ci & (eq->nent - 1)); | ||
180 | |||
181 | /* | 176 | /* |
182 | * This barrier makes sure that all updates to ownership bits | 177 | * This barrier makes sure that all updates to ownership bits |
183 | * done by set_eqe_hw() hit memory before the consumer index | 178 | * done by set_eqe_hw() hit memory before the consumer index |
@@ -187,7 +182,7 @@ static inline void tavor_set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u | |||
187 | * having set_eqe_hw() overwrite the owner field. | 182 | * having set_eqe_hw() overwrite the owner field. |
188 | */ | 183 | */ |
189 | wmb(); | 184 | wmb(); |
190 | mthca_write64(doorbell, | 185 | mthca_write64(MTHCA_EQ_DB_SET_CI | eq->eqn, ci & (eq->nent - 1), |
191 | dev->kar + MTHCA_EQ_DOORBELL, | 186 | dev->kar + MTHCA_EQ_DOORBELL, |
192 | MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); | 187 | MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); |
193 | } | 188 | } |
@@ -212,12 +207,7 @@ static inline void set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u32 ci) | |||
212 | 207 | ||
213 | static inline void tavor_eq_req_not(struct mthca_dev *dev, int eqn) | 208 | static inline void tavor_eq_req_not(struct mthca_dev *dev, int eqn) |
214 | { | 209 | { |
215 | __be32 doorbell[2]; | 210 | mthca_write64(MTHCA_EQ_DB_REQ_NOT | eqn, 0, |
216 | |||
217 | doorbell[0] = cpu_to_be32(MTHCA_EQ_DB_REQ_NOT | eqn); | ||
218 | doorbell[1] = 0; | ||
219 | |||
220 | mthca_write64(doorbell, | ||
221 | dev->kar + MTHCA_EQ_DOORBELL, | 211 | dev->kar + MTHCA_EQ_DOORBELL, |
222 | MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); | 212 | MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); |
223 | } | 213 | } |
@@ -230,12 +220,7 @@ static inline void arbel_eq_req_not(struct mthca_dev *dev, u32 eqn_mask) | |||
230 | static inline void disarm_cq(struct mthca_dev *dev, int eqn, int cqn) | 220 | static inline void disarm_cq(struct mthca_dev *dev, int eqn, int cqn) |
231 | { | 221 | { |
232 | if (!mthca_is_memfree(dev)) { | 222 | if (!mthca_is_memfree(dev)) { |
233 | __be32 doorbell[2]; | 223 | mthca_write64(MTHCA_EQ_DB_DISARM_CQ | eqn, cqn, |
234 | |||
235 | doorbell[0] = cpu_to_be32(MTHCA_EQ_DB_DISARM_CQ | eqn); | ||
236 | doorbell[1] = cpu_to_be32(cqn); | ||
237 | |||
238 | mthca_write64(doorbell, | ||
239 | dev->kar + MTHCA_EQ_DOORBELL, | 224 | dev->kar + MTHCA_EQ_DOORBELL, |
240 | MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); | 225 | MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); |
241 | } | 226 | } |