Commit a73efd0a authored by Divy Le Ray's avatar Divy Le Ray Committed by David S. Miller

iw_cxgb3: handle chip reset notifications

Freeze activity when notified that the underlying chip
is getting reset on a EEH event or fatal error.
Signed-off-by: default avatarDivy Le Ray <divy@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cb0bc205
...@@ -701,6 +701,9 @@ static int __cxio_tpt_op(struct cxio_rdev *rdev_p, u32 reset_tpt_entry, ...@@ -701,6 +701,9 @@ static int __cxio_tpt_op(struct cxio_rdev *rdev_p, u32 reset_tpt_entry,
u32 stag_idx; u32 stag_idx;
u32 wptr; u32 wptr;
if (rdev_p->flags)
return -EIO;
stag_state = stag_state > 0; stag_state = stag_state > 0;
stag_idx = (*stag) >> 8; stag_idx = (*stag) >> 8;
......
...@@ -108,6 +108,8 @@ struct cxio_rdev { ...@@ -108,6 +108,8 @@ struct cxio_rdev {
struct gen_pool *pbl_pool; struct gen_pool *pbl_pool;
struct gen_pool *rqt_pool; struct gen_pool *rqt_pool;
struct list_head entry; struct list_head entry;
u32 flags;
#define CXIO_ERROR_FATAL 1
}; };
static inline int cxio_num_stags(struct cxio_rdev *rdev_p) static inline int cxio_num_stags(struct cxio_rdev *rdev_p)
......
...@@ -51,13 +51,15 @@ cxgb3_cpl_handler_func t3c_handlers[NUM_CPL_CMDS]; ...@@ -51,13 +51,15 @@ cxgb3_cpl_handler_func t3c_handlers[NUM_CPL_CMDS];
static void open_rnic_dev(struct t3cdev *); static void open_rnic_dev(struct t3cdev *);
static void close_rnic_dev(struct t3cdev *); static void close_rnic_dev(struct t3cdev *);
static void iwch_err_handler(struct t3cdev *, u32, u32);
struct cxgb3_client t3c_client = { struct cxgb3_client t3c_client = {
.name = "iw_cxgb3", .name = "iw_cxgb3",
.add = open_rnic_dev, .add = open_rnic_dev,
.remove = close_rnic_dev, .remove = close_rnic_dev,
.handlers = t3c_handlers, .handlers = t3c_handlers,
.redirect = iwch_ep_redirect .redirect = iwch_ep_redirect,
.err_handler = iwch_err_handler
}; };
static LIST_HEAD(dev_list); static LIST_HEAD(dev_list);
...@@ -160,6 +162,17 @@ static void close_rnic_dev(struct t3cdev *tdev) ...@@ -160,6 +162,17 @@ static void close_rnic_dev(struct t3cdev *tdev)
mutex_unlock(&dev_mutex); mutex_unlock(&dev_mutex);
} }
static void iwch_err_handler(struct t3cdev *tdev, u32 status, u32 error)
{
struct cxio_rdev *rdev = tdev->ulp;
if (status == OFFLOAD_STATUS_DOWN)
rdev->flags = CXIO_ERROR_FATAL;
return;
}
static int __init iwch_init_module(void) static int __init iwch_init_module(void)
{ {
int err; int err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment