Print this page
MFV: illumos-gate@bbb9d5d65bf8372aae4b8821c80e218b8b832846
9994 cxgbe t4nex: Handle get_fl_payload() alloc failures
9995 cxgbe t4_devo_attach() should initialize ->sfl
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Approved by: Dan McDonald <danmcd@joyent.com>
Author: John Levon <john.levon@joyent.com>
9484 cxgbe should clean TX descriptors in timely manner
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Ryan Zezeski <rpz@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Approved by: Dan McDonald <danmcd@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/cxgbe/t4nex/t4_nexus.c
          +++ new/usr/src/uts/common/io/cxgbe/t4nex/t4_nexus.c
↓ open down ↓ 308 lines elided ↑ open up ↑
 309  309                      "failed to allocate soft state: %d", rc);
 310  310                  return (DDI_FAILURE);
 311  311          }
 312  312  
 313  313          sc = ddi_get_soft_state(t4_list, instance);
 314  314          sc->dip = dip;
 315  315          sc->dev = makedevice(ddi_driver_major(dip), instance);
 316  316          mutex_init(&sc->lock, NULL, MUTEX_DRIVER, NULL);
 317  317          cv_init(&sc->cv, NULL, CV_DRIVER, NULL);
 318  318          mutex_init(&sc->sfl_lock, NULL, MUTEX_DRIVER, NULL);
      319 +        TAILQ_INIT(&sc->sfl);
 319  320  
 320  321          mutex_enter(&t4_adapter_list_lock);
 321  322          SLIST_INSERT_HEAD(&t4_adapter_list, sc, link);
 322  323          mutex_exit(&t4_adapter_list_lock);
 323  324  
 324  325          sc->pf = getpf(sc);
 325  326          if (sc->pf > 8) {
 326  327                  rc = EINVAL;
 327  328                  cxgb_printf(dip, CE_WARN,
 328  329                      "failed to determine PCI PF# of device");
↓ open down ↓ 33 lines elided ↑ open up ↑
 362  363           * Initialize cpl handler.
 363  364           */
 364  365          for (i = 0; i < ARRAY_SIZE(sc->cpl_handler); i++) {
 365  366                  sc->cpl_handler[i] = cpl_not_handled;
 366  367          }
 367  368  
 368  369          for (i = 0; i < ARRAY_SIZE(sc->fw_msg_handler); i++) {
 369  370                  sc->fw_msg_handler[i] = fw_msg_not_handled;
 370  371          }
 371  372   
      373 +        for (i = 0; i < NCHAN; i++) {
      374 +                (void) snprintf(name, sizeof (name), "%s-%d",
      375 +                                "reclaim", i);
      376 +                sc->tq[i] = ddi_taskq_create(sc->dip,
      377 +                   name, 1, TASKQ_DEFAULTPRI, 0);
      378 +
      379 +                if (sc->tq[i] == NULL) {
      380 +                        cxgb_printf(dip, CE_WARN,
      381 +                                   "failed to create task queues");
      382 +                        rc = DDI_FAILURE;
      383 +                        goto done;
      384 +                }
      385 +        }
      386 +
 372  387          /*
 373  388           * Prepare the adapter for operation.
 374  389           */
 375  390          rc = -t4_prep_adapter(sc, false);
 376  391          if (rc != 0) {
 377  392                  cxgb_printf(dip, CE_WARN, "failed to prepare adapter: %d", rc);
 378  393                  goto done;
 379  394          }
 380  395  
 381  396          /*
↓ open down ↓ 447 lines elided ↑ open up ↑
 829  844                          if (pi && pi->flags & PORT_INIT_DONE)
 830  845                                  (void) port_full_uninit(pi);
 831  846                  }
 832  847                  (void) adapter_full_uninit(sc);
 833  848          }
 834  849  
 835  850          /* Safe to call no matter what */
 836  851          ddi_prop_remove_all(dip);
 837  852          ddi_remove_minor_node(dip, NULL);
 838  853  
      854 +        for (i = 0; i < NCHAN; i++) {
      855 +                if (sc->tq[i]) {
      856 +                        ddi_taskq_wait(sc->tq[i]);
      857 +                        ddi_taskq_destroy(sc->tq[i]);
      858 +                }
      859 +        }
      860 +
 839  861          if (sc->ksp != NULL)
 840  862                  kstat_delete(sc->ksp);
 841  863          if (sc->ksp_stat != NULL)
 842  864                  kstat_delete(sc->ksp_stat);
 843  865  
 844  866          s = &sc->sge;
 845  867          if (s->rxq != NULL)
 846  868                  kmem_free(s->rxq, s->nrxq * sizeof (struct sge_rxq));
 847  869  #ifdef TCP_OFFLOAD_ENABLE
 848  870          if (s->ofld_txq != NULL)
↓ open down ↓ 2048 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX