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: Divy Le Ray <divy@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
cb0bc20595
commit
a73efd0a85
@@ -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 {
|
|||||||
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];
|
|||||||
|
|
||||||
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)
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user