diff options
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/hw/cxgb3/cxio_hal.c | 3 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb3/cxio_hal.h | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch.c | 15 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_hw.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_nic.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_ib.c | 6 |
6 files changed, 24 insertions, 6 deletions
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c index 4dcf08b3fd8..11efd3528ce 100644 --- a/drivers/infiniband/hw/cxgb3/cxio_hal.c +++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c | |||
@@ -701,6 +701,9 @@ static int __cxio_tpt_op(struct cxio_rdev *rdev_p, u32 reset_tpt_entry, | |||
701 | u32 stag_idx; | 701 | u32 stag_idx; |
702 | u32 wptr; | 702 | u32 wptr; |
703 | 703 | ||
704 | if (rdev_p->flags) | ||
705 | return -EIO; | ||
706 | |||
704 | stag_state = stag_state > 0; | 707 | stag_state = stag_state > 0; |
705 | stag_idx = (*stag) >> 8; | 708 | stag_idx = (*stag) >> 8; |
706 | 709 | ||
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.h b/drivers/infiniband/hw/cxgb3/cxio_hal.h index 656fe47bc84..9ed65b05517 100644 --- a/drivers/infiniband/hw/cxgb3/cxio_hal.h +++ b/drivers/infiniband/hw/cxgb3/cxio_hal.h | |||
@@ -108,6 +108,8 @@ struct cxio_rdev { | |||
108 | struct gen_pool *pbl_pool; | 108 | struct gen_pool *pbl_pool; |
109 | struct gen_pool *rqt_pool; | 109 | struct gen_pool *rqt_pool; |
110 | struct list_head entry; | 110 | struct list_head entry; |
111 | u32 flags; | ||
112 | #define CXIO_ERROR_FATAL 1 | ||
111 | }; | 113 | }; |
112 | 114 | ||
113 | static inline int cxio_num_stags(struct cxio_rdev *rdev_p) | 115 | static inline int cxio_num_stags(struct cxio_rdev *rdev_p) |
diff --git a/drivers/infiniband/hw/cxgb3/iwch.c b/drivers/infiniband/hw/cxgb3/iwch.c index 4489c89d671..37a4fc264a0 100644 --- a/drivers/infiniband/hw/cxgb3/iwch.c +++ b/drivers/infiniband/hw/cxgb3/iwch.c | |||
@@ -51,13 +51,15 @@ cxgb3_cpl_handler_func t3c_handlers[NUM_CPL_CMDS]; | |||
51 | 51 | ||
52 | static void open_rnic_dev(struct t3cdev *); | 52 | static void open_rnic_dev(struct t3cdev *); |
53 | static void close_rnic_dev(struct t3cdev *); | 53 | static void close_rnic_dev(struct t3cdev *); |
54 | static void iwch_err_handler(struct t3cdev *, u32, u32); | ||
54 | 55 | ||
55 | struct cxgb3_client t3c_client = { | 56 | struct cxgb3_client t3c_client = { |
56 | .name = "iw_cxgb3", | 57 | .name = "iw_cxgb3", |
57 | .add = open_rnic_dev, | 58 | .add = open_rnic_dev, |
58 | .remove = close_rnic_dev, | 59 | .remove = close_rnic_dev, |
59 | .handlers = t3c_handlers, | 60 | .handlers = t3c_handlers, |
60 | .redirect = iwch_ep_redirect | 61 | .redirect = iwch_ep_redirect, |
62 | .err_handler = iwch_err_handler | ||
61 | }; | 63 | }; |
62 | 64 | ||
63 | static LIST_HEAD(dev_list); | 65 | static LIST_HEAD(dev_list); |
@@ -160,6 +162,17 @@ static void close_rnic_dev(struct t3cdev *tdev) | |||
160 | mutex_unlock(&dev_mutex); | 162 | mutex_unlock(&dev_mutex); |
161 | } | 163 | } |
162 | 164 | ||
165 | static void iwch_err_handler(struct t3cdev *tdev, u32 status, u32 error) | ||
166 | { | ||
167 | struct cxio_rdev *rdev = tdev->ulp; | ||
168 | |||
169 | if (status == OFFLOAD_STATUS_DOWN) | ||
170 | rdev->flags = CXIO_ERROR_FATAL; | ||
171 | |||
172 | return; | ||
173 | |||
174 | } | ||
175 | |||
163 | static int __init iwch_init_module(void) | 176 | static int __init iwch_init_module(void) |
164 | { | 177 | { |
165 | int err; | 178 | int err; |
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c index 5d139db1b77..53df9de2342 100644 --- a/drivers/infiniband/hw/nes/nes_hw.c +++ b/drivers/infiniband/hw/nes/nes_hw.c | |||
@@ -2541,7 +2541,7 @@ static void nes_nic_napi_ce_handler(struct nes_device *nesdev, struct nes_hw_nic | |||
2541 | { | 2541 | { |
2542 | struct nes_vnic *nesvnic = container_of(cq, struct nes_vnic, nic_cq); | 2542 | struct nes_vnic *nesvnic = container_of(cq, struct nes_vnic, nic_cq); |
2543 | 2543 | ||
2544 | netif_rx_schedule(&nesvnic->napi); | 2544 | napi_schedule(&nesvnic->napi); |
2545 | } | 2545 | } |
2546 | 2546 | ||
2547 | 2547 | ||
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c index 57a47cf7e51..f5484ad1279 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c | |||
@@ -111,7 +111,7 @@ static int nes_netdev_poll(struct napi_struct *napi, int budget) | |||
111 | nes_nic_ce_handler(nesdev, nescq); | 111 | nes_nic_ce_handler(nesdev, nescq); |
112 | 112 | ||
113 | if (nescq->cqes_pending == 0) { | 113 | if (nescq->cqes_pending == 0) { |
114 | netif_rx_complete(napi); | 114 | napi_complete(napi); |
115 | /* clear out completed cqes and arm */ | 115 | /* clear out completed cqes and arm */ |
116 | nes_write32(nesdev->regs+NES_CQE_ALLOC, NES_CQE_ALLOC_NOTIFY_NEXT | | 116 | nes_write32(nesdev->regs+NES_CQE_ALLOC, NES_CQE_ALLOC_NOTIFY_NEXT | |
117 | nescq->cq_number | (nescq->cqe_allocs_pending << 16)); | 117 | nescq->cq_number | (nescq->cqe_allocs_pending << 16)); |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index a1925810be3..da608273983 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c | |||
@@ -446,11 +446,11 @@ poll_more: | |||
446 | if (dev->features & NETIF_F_LRO) | 446 | if (dev->features & NETIF_F_LRO) |
447 | lro_flush_all(&priv->lro.lro_mgr); | 447 | lro_flush_all(&priv->lro.lro_mgr); |
448 | 448 | ||
449 | netif_rx_complete(napi); | 449 | napi_complete(napi); |
450 | if (unlikely(ib_req_notify_cq(priv->recv_cq, | 450 | if (unlikely(ib_req_notify_cq(priv->recv_cq, |
451 | IB_CQ_NEXT_COMP | | 451 | IB_CQ_NEXT_COMP | |
452 | IB_CQ_REPORT_MISSED_EVENTS)) && | 452 | IB_CQ_REPORT_MISSED_EVENTS)) && |
453 | netif_rx_reschedule(napi)) | 453 | napi_reschedule(napi)) |
454 | goto poll_more; | 454 | goto poll_more; |
455 | } | 455 | } |
456 | 456 | ||
@@ -462,7 +462,7 @@ void ipoib_ib_completion(struct ib_cq *cq, void *dev_ptr) | |||
462 | struct net_device *dev = dev_ptr; | 462 | struct net_device *dev = dev_ptr; |
463 | struct ipoib_dev_priv *priv = netdev_priv(dev); | 463 | struct ipoib_dev_priv *priv = netdev_priv(dev); |
464 | 464 | ||
465 | netif_rx_schedule(&priv->napi); | 465 | napi_schedule(&priv->napi); |
466 | } | 466 | } |
467 | 467 | ||
468 | static void drain_tx_cq(struct net_device *dev) | 468 | static void drain_tx_cq(struct net_device *dev) |