diff options
Diffstat (limited to 'drivers/net/enic/vnic_rq.c')
-rw-r--r-- | drivers/net/enic/vnic_rq.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/net/enic/vnic_rq.c b/drivers/net/enic/vnic_rq.c index 45cfc79f9f98..061a26fbbbfb 100644 --- a/drivers/net/enic/vnic_rq.c +++ b/drivers/net/enic/vnic_rq.c | |||
@@ -146,6 +146,11 @@ void vnic_rq_init(struct vnic_rq *rq, unsigned int cq_index, | |||
146 | /* Use current fetch_index as the ring starting point */ | 146 | /* Use current fetch_index as the ring starting point */ |
147 | fetch_index = ioread32(&rq->ctrl->fetch_index); | 147 | fetch_index = ioread32(&rq->ctrl->fetch_index); |
148 | 148 | ||
149 | if (fetch_index == 0xFFFFFFFF) { /* check for hardware gone */ | ||
150 | /* Hardware surprise removal: reset fetch_index */ | ||
151 | fetch_index = 0; | ||
152 | } | ||
153 | |||
149 | vnic_rq_init_start(rq, cq_index, | 154 | vnic_rq_init_start(rq, cq_index, |
150 | fetch_index, fetch_index, | 155 | fetch_index, fetch_index, |
151 | error_interrupt_enable, | 156 | error_interrupt_enable, |
@@ -187,8 +192,6 @@ void vnic_rq_clean(struct vnic_rq *rq, | |||
187 | u32 fetch_index; | 192 | u32 fetch_index; |
188 | unsigned int count = rq->ring.desc_count; | 193 | unsigned int count = rq->ring.desc_count; |
189 | 194 | ||
190 | BUG_ON(ioread32(&rq->ctrl->enable)); | ||
191 | |||
192 | buf = rq->to_clean; | 195 | buf = rq->to_clean; |
193 | 196 | ||
194 | while (vnic_rq_desc_used(rq) > 0) { | 197 | while (vnic_rq_desc_used(rq) > 0) { |
@@ -201,6 +204,12 @@ void vnic_rq_clean(struct vnic_rq *rq, | |||
201 | 204 | ||
202 | /* Use current fetch_index as the ring starting point */ | 205 | /* Use current fetch_index as the ring starting point */ |
203 | fetch_index = ioread32(&rq->ctrl->fetch_index); | 206 | fetch_index = ioread32(&rq->ctrl->fetch_index); |
207 | |||
208 | if (fetch_index == 0xFFFFFFFF) { /* check for hardware gone */ | ||
209 | /* Hardware surprise removal: reset fetch_index */ | ||
210 | fetch_index = 0; | ||
211 | } | ||
212 | |||
204 | rq->to_use = rq->to_clean = | 213 | rq->to_use = rq->to_clean = |
205 | &rq->bufs[fetch_index / VNIC_RQ_BUF_BLK_ENTRIES(count)] | 214 | &rq->bufs[fetch_index / VNIC_RQ_BUF_BLK_ENTRIES(count)] |
206 | [fetch_index % VNIC_RQ_BUF_BLK_ENTRIES(count)]; | 215 | [fetch_index % VNIC_RQ_BUF_BLK_ENTRIES(count)]; |