New upstream version 18.11.1
[deb_dpdk.git] / drivers / net / cxgbe / cxgbe_main.c
index 88dc851..5fa6cdd 100644 (file)
@@ -122,6 +122,7 @@ int setup_sge_ctrl_txq(struct adapter *adapter)
        int err = 0, i = 0;
 
        for_each_port(adapter, i) {
+               struct port_info *pi = adap2pinfo(adapter, i);
                char name[RTE_ETH_NAME_MAX_LEN];
                struct sge_ctrl_txq *q = &s->ctrlq[i];
 
@@ -135,16 +136,19 @@ int setup_sge_ctrl_txq(struct adapter *adapter)
                                err);
                        goto out;
                }
-               snprintf(name, sizeof(name), "cxgbe_ctrl_pool_%d", i);
+               snprintf(name, sizeof(name), "%s_ctrl_pool_%d",
+                        pi->eth_dev->device->driver->name,
+                        pi->eth_dev->data->port_id);
                q->mb_pool = rte_pktmbuf_pool_create(name, s->ctrlq[i].q.size,
                                                     RTE_CACHE_LINE_SIZE,
                                                     RTE_MBUF_PRIV_ALIGN,
                                                     RTE_MBUF_DEFAULT_BUF_SIZE,
                                                     SOCKET_ID_ANY);
                if (!q->mb_pool) {
-                       dev_err(adapter, "Can't create ctrl pool for port: %d",
-                               i);
-                       err = -ENOMEM;
+                       err = -rte_errno;
+                       dev_err(adapter,
+                               "Can't create ctrl pool for port %d. Err: %d\n",
+                               pi->eth_dev->data->port_id, err);
                        goto out;
                }
        }
@@ -157,18 +161,18 @@ out:
 /**
  * cxgbe_poll_for_completion: Poll rxq for completion
  * @q: rxq to poll
- * @us: microseconds to delay
+ * @ms: milliseconds to delay
  * @cnt: number of times to poll
  * @c: completion to check for 'done' status
  *
  * Polls the rxq for reples until completion is done or the count
  * expires.
  */
-int cxgbe_poll_for_completion(struct sge_rspq *q, unsigned int us,
+int cxgbe_poll_for_completion(struct sge_rspq *q, unsigned int ms,
                              unsigned int cnt, struct t4_completion *c)
 {
        unsigned int i;
-       unsigned int work_done, budget = 4;
+       unsigned int work_done, budget = 32;
 
        if (!c)
                return -EINVAL;
@@ -181,7 +185,7 @@ int cxgbe_poll_for_completion(struct sge_rspq *q, unsigned int us,
                        return 0;
                }
                t4_os_unlock(&c->lock);
-               udelay(us);
+               rte_delay_ms(ms);
        }
        return -ETIMEDOUT;
 }
@@ -411,7 +415,7 @@ static int tid_init(struct tid_info *t)
                return -ENOMEM;
 
        t->atid_tab = (union aopen_entry *)&t->tid_tab[t->ntids];
-       t->ftid_tab = (struct filter_entry *)&t->tid_tab[t->natids];
+       t->ftid_tab = (struct filter_entry *)&t->atid_tab[t->natids];
        t->ftid_bmap_array = t4_os_alloc(ftid_bmap_size);
        if (!t->ftid_bmap_array) {
                tid_free(t);
@@ -1339,18 +1343,22 @@ inline bool force_linkup(struct adapter *adap)
 int link_start(struct port_info *pi)
 {
        struct adapter *adapter = pi->adapter;
-       int ret;
+       u64 conf_offloads;
        unsigned int mtu;
+       int ret;
 
        mtu = pi->eth_dev->data->dev_conf.rxmode.max_rx_pkt_len -
              (ETHER_HDR_LEN + ETHER_CRC_LEN);
 
+       conf_offloads = pi->eth_dev->data->dev_conf.rxmode.offloads;
+
        /*
         * We do not set address filters and promiscuity here, the stack does
         * that step explicitly.
         */
-       ret = t4_set_rxmode(adapter, adapter->mbox, pi->viid, mtu, -1, -1,
-                           -1, 1, true);
+       ret = t4_set_rxmode(adapter, adapter->mbox, pi->viid, mtu, -1, -1, -1,
+                           !!(conf_offloads & DEV_RX_OFFLOAD_VLAN_STRIP),
+                           true);
        if (ret == 0) {
                ret = cxgbe_mpstcam_modify(pi, (int)pi->xact_addr_filt,
                                (u8 *)&pi->eth_dev->data->mac_addrs[0]);