diff options
author | Roland Dreier <rolandd@cisco.com> | 2005-10-27 14:03:38 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2005-10-27 14:03:38 -0400 |
commit | 3d155f8cd0d077938d271225d26ee52f8eb26082 (patch) | |
tree | 28f65ed2dc5e9f12884daf2a97f50367f145d8a0 /drivers/infiniband/hw/mthca/mthca_dev.h | |
parent | 7cc656efb560cda66b5ed48444cad7556ea4fe99 (diff) |
[IB] mthca: first pass at catastrophic error reporting
Add some initial support for detecting and reporting catastrophic
errors reported by Mellanox HCAs. We start a periodic timer which
polls the catastrophic error reporting buffer in device memory. If an
error is detected, we dump the contents of the buffer for port-mortem
debugging, and report a fatal asynchronous error to higher levels.
In the future we can try to recover from these errors by resetting the
device, but this will require some work in higher-level code as well.
Let's get this in now, so that we at least get catastrophic errors
reported in logs.
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/mthca/mthca_dev.h')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_dev.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_dev.h b/drivers/infiniband/hw/mthca/mthca_dev.h index f106bac0f925..7e68bd4a3780 100644 --- a/drivers/infiniband/hw/mthca/mthca_dev.h +++ b/drivers/infiniband/hw/mthca/mthca_dev.h | |||
@@ -258,6 +258,14 @@ struct mthca_mcg_table { | |||
258 | struct mthca_icm_table *table; | 258 | struct mthca_icm_table *table; |
259 | }; | 259 | }; |
260 | 260 | ||
261 | struct mthca_catas_err { | ||
262 | u64 addr; | ||
263 | u32 __iomem *map; | ||
264 | unsigned long stop; | ||
265 | u32 size; | ||
266 | struct timer_list timer; | ||
267 | }; | ||
268 | |||
261 | struct mthca_dev { | 269 | struct mthca_dev { |
262 | struct ib_device ib_dev; | 270 | struct ib_device ib_dev; |
263 | struct pci_dev *pdev; | 271 | struct pci_dev *pdev; |
@@ -318,6 +326,8 @@ struct mthca_dev { | |||
318 | struct mthca_av_table av_table; | 326 | struct mthca_av_table av_table; |
319 | struct mthca_mcg_table mcg_table; | 327 | struct mthca_mcg_table mcg_table; |
320 | 328 | ||
329 | struct mthca_catas_err catas_err; | ||
330 | |||
321 | struct mthca_uar driver_uar; | 331 | struct mthca_uar driver_uar; |
322 | struct mthca_db_table *db_tab; | 332 | struct mthca_db_table *db_tab; |
323 | struct mthca_pd driver_pd; | 333 | struct mthca_pd driver_pd; |
@@ -405,6 +415,9 @@ void mthca_cleanup_mcg_table(struct mthca_dev *dev); | |||
405 | int mthca_register_device(struct mthca_dev *dev); | 415 | int mthca_register_device(struct mthca_dev *dev); |
406 | void mthca_unregister_device(struct mthca_dev *dev); | 416 | void mthca_unregister_device(struct mthca_dev *dev); |
407 | 417 | ||
418 | void mthca_start_catas_poll(struct mthca_dev *dev); | ||
419 | void mthca_stop_catas_poll(struct mthca_dev *dev); | ||
420 | |||
408 | int mthca_uar_alloc(struct mthca_dev *dev, struct mthca_uar *uar); | 421 | int mthca_uar_alloc(struct mthca_dev *dev, struct mthca_uar *uar); |
409 | void mthca_uar_free(struct mthca_dev *dev, struct mthca_uar *uar); | 422 | void mthca_uar_free(struct mthca_dev *dev, struct mthca_uar *uar); |
410 | 423 | ||