kernel-janitors.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [bug report] cxgb4: Add support for dynamic allocation of resources for ULD
@ 2021-02-22 11:23 Dan Carpenter
  0 siblings, 0 replies; 2+ messages in thread
From: Dan Carpenter @ 2021-02-22 11:23 UTC (permalink / raw)
  To: hariprasad; +Cc: kernel-janitors

Hello Hariprasad Shenai,

The patch 94cdb8bb993a: "cxgb4: Add support for dynamic allocation of
resources for ULD" from Aug 17, 2016, leads to the following static
checker warning:

	drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c:7099 init_one()
	warn: 'adapter->msix_bmap.msix_bmap' double freed

drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
  7005                                   "could not offload tc matchall, continuing\n");
  7006                  if (cxgb4_init_ethtool_filters(adapter))
  7007                          dev_warn(&pdev->dev,
  7008                                   "could not initialize ethtool filters, continuing\n");
  7009          }
  7010  
  7011          /* See what interrupts we'll be using */
  7012          if (msi > 1 && enable_msix(adapter) == 0)
  7013                  adapter->flags |= CXGB4_USING_MSIX;
  7014          else if (msi > 0 && pci_enable_msi(pdev) == 0) {
  7015                  adapter->flags |= CXGB4_USING_MSI;
  7016                  if (msi > 1)
  7017                          free_msix_info(adapter);
                                ^^^^^^^^^^^^^^^^^^^^^^^^
free here

  7018          }
  7019  
  7020          /* check for PCI Express bandwidth capabiltites */
  7021          pcie_print_link_status(pdev);
  7022  
  7023          cxgb4_init_mps_ref_entries(adapter);
  7024  
  7025          err = init_rss(adapter);
  7026          if (err)
  7027                  goto out_free_dev;
                        ^^^^^^^^^^^^^^^^^
Assume we hit this goto

  7028  
  7029          err = setup_non_data_intr(adapter);
  7030          if (err) {
  7031                  dev_err(adapter->pdev_dev,
  7032                          "Non Data interrupt allocation failed, err: %d\n", err);
  7033                  goto out_free_dev;
  7034          }
  7035  
  7036          err = setup_fw_sge_queues(adapter);
  7037          if (err) {
  7038                  dev_err(adapter->pdev_dev,
  7039                          "FW sge queue allocation failed, err %d", err);
  7040                  goto out_free_dev;
  7041          }
  7042  
  7043  fw_attach_fail:
  7044          /*
  7045           * The card is now ready to go.  If any errors occur during device
  7046           * registration we do not fail the whole card but rather proceed only
  7047           * with the ports we manage to register successfully.  However we must
  7048           * register at least one net device.
  7049           */
  7050          for_each_port(adapter, i) {
  7051                  pi = adap2pinfo(adapter, i);
  7052                  adapter->port[i]->dev_port = pi->lport;
  7053                  netif_set_real_num_tx_queues(adapter->port[i], pi->nqsets);
  7054                  netif_set_real_num_rx_queues(adapter->port[i], pi->nqsets);
  7055  
  7056                  netif_carrier_off(adapter->port[i]);
  7057  
  7058                  err = register_netdev(adapter->port[i]);
  7059                  if (err)
  7060                          break;
  7061                  adapter->chan_map[pi->tx_chan] = i;
  7062                  print_port_info(adapter->port[i]);
  7063          }
  7064          if (i == 0) {
  7065                  dev_err(&pdev->dev, "could not register any net devices\n");
  7066                  goto out_free_dev;
  7067          }
  7068          if (err) {
  7069                  dev_warn(&pdev->dev, "only %d net devices registered\n", i);
  7070                  err = 0;
  7071          }
  7072  
  7073          if (cxgb4_debugfs_root) {
  7074                  adapter->debugfs_root = debugfs_create_dir(pci_name(pdev),
  7075                                                             cxgb4_debugfs_root);
  7076                  setup_debugfs(adapter);
  7077          }
  7078  
  7079          /* PCIe EEH recovery on powerpc platforms needs fundamental reset */
  7080          pdev->needs_freset = 1;
  7081  
  7082          if (is_uld(adapter))
  7083                  cxgb4_uld_enable(adapter);
  7084  
  7085          if (!is_t4(adapter->params.chip))
  7086                  cxgb4_ptp_init(adapter);
  7087  
  7088          if (IS_REACHABLE(CONFIG_THERMAL) &&
  7089              !is_t4(adapter->params.chip) && (adapter->flags & CXGB4_FW_OK))
  7090                  cxgb4_thermal_init(adapter);
  7091  
  7092          print_adapter_info(adapter);
  7093          return 0;
  7094  
  7095   out_free_dev:
  7096          t4_free_sge_resources(adapter);
  7097          free_some_resources(adapter);
  7098          if (adapter->flags & CXGB4_USING_MSIX)
  7099                  free_msix_info(adapter);
                        ^^^^^^^^^^^^^^^^^^^^^^^
Double free?

  7100          if (adapter->num_uld || adapter->num_ofld_uld)
  7101                  t4_uld_mem_free(adapter);
  7102   out_unmap_bar:
  7103          if (!is_t4(adapter->params.chip))
  7104                  iounmap(adapter->bar2);
  7105   out_free_adapter:
  7106          if (adapter->workq)
  7107                  destroy_workqueue(adapter->workq);
  7108  
  7109          kfree(adapter->mbox_log);
  7110          kfree(adapter);
  7111   out_unmap_bar0:
  7112          iounmap(regs);
  7113   out_disable_device:
  7114          pci_disable_pcie_error_reporting(pdev);
  7115          pci_disable_device(pdev);
  7116   out_release_regions:
  7117          pci_release_regions(pdev);
  7118          return err;
  7119  }

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [bug report] cxgb4: Add support for dynamic allocation of resources for ULD
@ 2016-10-14 14:15 Dan Carpenter
  0 siblings, 0 replies; 2+ messages in thread
From: Dan Carpenter @ 2016-10-14 14:15 UTC (permalink / raw)
  To: kernel-janitors

Hello Hariprasad Shenai,

The patch 94cdb8bb993a: "cxgb4: Add support for dynamic allocation of
resources for ULD" from Aug 17, 2016, leads to the following static
checker warning:

	drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c:176 alloc_uld_rxqs()
	warn: loop skips 'i' = zero

drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c
   153          for (i = 0; i < nq; i++, q++) {
   154                  if (msi_idx >= 0) {
   155                          bmap_idx = get_msix_idx_from_bmap(adap);
   156                          msi_idx = adap->msix_info_ulds[bmap_idx].idx;
   157                  }
   158                  err = t4_sge_alloc_rxq(adap, &q->rspq, false,
   159                                         adap->port[i / per_chan],
   160                                         msi_idx,
   161                                         q->fl.size ? &q->fl : NULL,
   162                                         uldrx_handler,
   163                                         lro ? uldrx_flush_handler : NULL,
   164                                         0);
   165                  if (err)
   166                          goto freeout;
   167                  if (msi_idx >= 0)
   168                          rxq_info->msix_tbl[i + offset] = bmap_idx;
   169                  memset(&q->stats, 0, sizeof(q->stats));
   170                  if (ids)
   171                          ids[i] = q->rspq.abs_id;
   172          }
   173          return 0;
   174  freeout:
   175          q = rxq_info->uldrxq + offset;
   176          for ( ; i; i--, q++) {
   177                  if (q->rspq.desc)
   178                          free_rspq_fl(adap, &q->rspq,
   179                                       q->fl.size ? &q->fl : NULL);
   180          }
   181  
   182          /* We need to free rxq also in case of ciq allocation failure */
   183          if (offset) {
   184                  q = rxq_info->uldrxq + offset;
   185                  for ( ; i; i--, q++) {


We exit the previous loop with i = 0 so we will never enter this loop.
This is the same loop as earlier as well...  I totally don't understand
what we are trying to do here.

   186                          if (q->rspq.desc)
   187                                  free_rspq_fl(adap, &q->rspq,
   188                                               q->fl.size ? &q->fl : NULL);
   189                  }
   190          }
   191          return err;
   192  }

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-02-22 11:24 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-22 11:23 [bug report] cxgb4: Add support for dynamic allocation of resources for ULD Dan Carpenter
  -- strict thread matches above, loose matches on Subject: below --
2016-10-14 14:15 Dan Carpenter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).