qls_isr.c (98e0ffaefb0f241cda3a72395d3be04192ae0d47) qls_isr.c (6dd38b8716bd9c53029707749f00ced53c5ceb7c)
1/*
2 * Copyright (c) 2013-2014 Qlogic Corporation
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *

--- 218 unchanged lines hidden (view full) ---

227
228static void
229qls_cq_isr(qla_host_t *ha, uint32_t cq_idx)
230{
231 q81_cq_e_t *cq_e, *cq_b;
232 uint32_t i, cq_comp_idx;
233 int ret = 0, tx_comp_done = 0;
234 struct lro_ctrl *lro;
1/*
2 * Copyright (c) 2013-2014 Qlogic Corporation
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *

--- 218 unchanged lines hidden (view full) ---

227
228static void
229qls_cq_isr(qla_host_t *ha, uint32_t cq_idx)
230{
231 q81_cq_e_t *cq_e, *cq_b;
232 uint32_t i, cq_comp_idx;
233 int ret = 0, tx_comp_done = 0;
234 struct lro_ctrl *lro;
235 struct lro_entry *queued;
236
237 cq_b = ha->rx_ring[cq_idx].cq_base_vaddr;
238 lro = &ha->rx_ring[cq_idx].lro;
239
240 cq_comp_idx = *(ha->rx_ring[cq_idx].cqi_vaddr);
241
242 i = ha->rx_ring[cq_idx].cq_next;
243

--- 38 unchanged lines hidden (view full) ---

282 }
283
284 if (tx_comp_done) {
285 taskqueue_enqueue(ha->tx_tq, &ha->tx_task);
286 tx_comp_done = 0;
287 }
288 }
289
235
236 cq_b = ha->rx_ring[cq_idx].cq_base_vaddr;
237 lro = &ha->rx_ring[cq_idx].lro;
238
239 cq_comp_idx = *(ha->rx_ring[cq_idx].cqi_vaddr);
240
241 i = ha->rx_ring[cq_idx].cq_next;
242

--- 38 unchanged lines hidden (view full) ---

281 }
282
283 if (tx_comp_done) {
284 taskqueue_enqueue(ha->tx_tq, &ha->tx_task);
285 tx_comp_done = 0;
286 }
287 }
288
290 while((!SLIST_EMPTY(&lro->lro_active))) {
291 queued = SLIST_FIRST(&lro->lro_active);
292 SLIST_REMOVE_HEAD(&lro->lro_active, next);
293 tcp_lro_flush(lro, queued);
294 }
289 tcp_lro_flush_all(lro);
295
296 ha->rx_ring[cq_idx].cq_next = cq_comp_idx;
297
298 if (!ret) {
299 Q81_WR_CQ_CONS_IDX(cq_idx, (ha->rx_ring[cq_idx].cq_next));
300 }
301 if (tx_comp_done)
302 taskqueue_enqueue(ha->tx_tq, &ha->tx_task);

--- 99 unchanged lines hidden ---
290
291 ha->rx_ring[cq_idx].cq_next = cq_comp_idx;
292
293 if (!ret) {
294 Q81_WR_CQ_CONS_IDX(cq_idx, (ha->rx_ring[cq_idx].cq_next));
295 }
296 if (tx_comp_done)
297 taskqueue_enqueue(ha->tx_tq, &ha->tx_task);

--- 99 unchanged lines hidden ---