Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -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;


+2 −0
Original line number Original line Diff line number Diff line
@@ -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)
+14 −1
Original line number Original line Diff line number Diff line
@@ -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;