Merge branch 'kvm-arm/vgic-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git...
[firefly-linux-kernel-4.4.55.git] / drivers / net / vmxnet3 / vmxnet3_drv.c
index dc8913c6238c965b0905ef7ad6784bf669f06388..eae7a03d4f9bb7a5b69414d9c161bb7b0f777b77 100644 (file)
@@ -43,11 +43,7 @@ static DEFINE_PCI_DEVICE_TABLE(vmxnet3_pciid_table) = {
 
 MODULE_DEVICE_TABLE(pci, vmxnet3_pciid_table);
 
-static atomic_t devices_found;
-
-#define VMXNET3_MAX_DEVICES 10
 static int enable_mq = 1;
-static int irq_share_mode;
 
 static void
 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac);
@@ -152,10 +148,9 @@ vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue)
 
        adapter->link_speed = ret >> 16;
        if (ret & 1) { /* Link is up. */
-               printk(KERN_INFO "%s: NIC Link is Up %d Mbps\n",
-                      adapter->netdev->name, adapter->link_speed);
-               if (!netif_carrier_ok(adapter->netdev))
-                       netif_carrier_on(adapter->netdev);
+               netdev_info(adapter->netdev, "NIC Link is Up %d Mbps\n",
+                           adapter->link_speed);
+               netif_carrier_on(adapter->netdev);
 
                if (affectTxQueue) {
                        for (i = 0; i < adapter->num_tx_queues; i++)
@@ -163,10 +158,8 @@ vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue)
                                                 adapter);
                }
        } else {
-               printk(KERN_INFO "%s: NIC Link is Down\n",
-                      adapter->netdev->name);
-               if (netif_carrier_ok(adapter->netdev))
-                       netif_carrier_off(adapter->netdev);
+               netdev_info(adapter->netdev, "NIC Link is Down\n");
+               netif_carrier_off(adapter->netdev);
 
                if (affectTxQueue) {
                        for (i = 0; i < adapter->num_tx_queues; i++)
@@ -510,8 +503,7 @@ vmxnet3_tq_create(struct vmxnet3_tx_queue *tq,
                           * sizeof(struct Vmxnet3_TxDesc),
                           &tq->tx_ring.basePA);
        if (!tq->tx_ring.base) {
-               printk(KERN_ERR "%s: failed to allocate tx ring\n",
-                      adapter->netdev->name);
+               netdev_err(adapter->netdev, "failed to allocate tx ring\n");
                goto err;
        }
 
@@ -520,8 +512,7 @@ vmxnet3_tq_create(struct vmxnet3_tx_queue *tq,
                             sizeof(struct Vmxnet3_TxDataDesc),
                             &tq->data_ring.basePA);
        if (!tq->data_ring.base) {
-               printk(KERN_ERR "%s: failed to allocate data ring\n",
-                      adapter->netdev->name);
+               netdev_err(adapter->netdev, "failed to allocate data ring\n");
                goto err;
        }
 
@@ -530,8 +521,7 @@ vmxnet3_tq_create(struct vmxnet3_tx_queue *tq,
                             sizeof(struct Vmxnet3_TxCompDesc),
                             &tq->comp_ring.basePA);
        if (!tq->comp_ring.base) {
-               printk(KERN_ERR "%s: failed to allocate tx comp ring\n",
-                      adapter->netdev->name);
+               netdev_err(adapter->netdev, "failed to allocate tx comp ring\n");
                goto err;
        }
 
@@ -580,15 +570,14 @@ vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,
 
                if (rbi->buf_type == VMXNET3_RX_BUF_SKB) {
                        if (rbi->skb == NULL) {
-                               rbi->skb = dev_alloc_skb(rbi->len +
-                                                        NET_IP_ALIGN);
+                               rbi->skb = __netdev_alloc_skb_ip_align(adapter->netdev,
+                                                                      rbi->len,
+                                                                      GFP_KERNEL);
                                if (unlikely(rbi->skb == NULL)) {
                                        rq->stats.rx_buf_alloc_failure++;
                                        break;
                                }
-                               rbi->skb->dev = adapter->netdev;
 
-                               skb_reserve(rbi->skb, NET_IP_ALIGN);
                                rbi->dma_addr = pci_map_single(adapter->pdev,
                                                rbi->skb->data, rbi->len,
                                                PCI_DMA_FROMDEVICE);
@@ -629,12 +618,10 @@ vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,
                num_allocated++;
                vmxnet3_cmd_ring_adv_next2fill(ring);
        }
-       rq->uncommitted[ring_idx] += num_allocated;
 
-       dev_dbg(&adapter->netdev->dev,
-               "alloc_rx_buf: %d allocated, next2fill %u, next2comp "
-               "%u, uncommitted %u\n", num_allocated, ring->next2fill,
-               ring->next2comp, rq->uncommitted[ring_idx]);
+       netdev_dbg(adapter->netdev,
+               "alloc_rx_buf: %d allocated, next2fill %u, next2comp %u\n",
+               num_allocated, ring->next2fill, ring->next2comp);
 
        /* so that the device can distinguish a full ring and an empty ring */
        BUG_ON(num_allocated != 0 && ring->next2fill == ring->next2comp);
@@ -691,7 +678,7 @@ vmxnet3_map_pkt(struct sk_buff *skb, struct vmxnet3_tx_ctx *ctx,
                tbi = tq->buf_info + tq->tx_ring.next2fill;
                tbi->map_type = VMXNET3_MAP_NONE;
 
-               dev_dbg(&adapter->netdev->dev,
+               netdev_dbg(adapter->netdev,
                        "txd[%u]: 0x%Lx 0x%x 0x%x\n",
                        tq->tx_ring.next2fill,
                        le64_to_cpu(ctx->sop_txd->txd.addr),
@@ -731,7 +718,7 @@ vmxnet3_map_pkt(struct sk_buff *skb, struct vmxnet3_tx_ctx *ctx,
                gdesc->dword[2] = cpu_to_le32(dw2);
                gdesc->dword[3] = 0;
 
-               dev_dbg(&adapter->netdev->dev,
+               netdev_dbg(adapter->netdev,
                        "txd[%u]: 0x%Lx 0x%x 0x%x\n",
                        tq->tx_ring.next2fill, le64_to_cpu(gdesc->txd.addr),
                        le32_to_cpu(gdesc->dword[2]), gdesc->dword[3]);
@@ -771,7 +758,7 @@ vmxnet3_map_pkt(struct sk_buff *skb, struct vmxnet3_tx_ctx *ctx,
                        gdesc->dword[2] = cpu_to_le32(dw2);
                        gdesc->dword[3] = 0;
 
-                       dev_dbg(&adapter->netdev->dev,
+                       netdev_dbg(adapter->netdev,
                                "txd[%u]: 0x%llu %u %u\n",
                                tq->tx_ring.next2fill, le64_to_cpu(gdesc->txd.addr),
                                le32_to_cpu(gdesc->dword[2]), gdesc->dword[3]);
@@ -871,7 +858,7 @@ vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
        tdd = tq->data_ring.base + tq->tx_ring.next2fill;
 
        memcpy(tdd->data, skb->data, ctx->copy_size);
-       dev_dbg(&adapter->netdev->dev,
+       netdev_dbg(adapter->netdev,
                "copy %u bytes to dataRing[%u]\n",
                ctx->copy_size, tq->tx_ring.next2fill);
        return 1;
@@ -977,7 +964,7 @@ vmxnet3_tq_xmit(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
 
        if (count > vmxnet3_cmd_ring_desc_avail(&tq->tx_ring)) {
                tq->stats.tx_ring_full++;
-               dev_dbg(&adapter->netdev->dev,
+               netdev_dbg(adapter->netdev,
                        "tx queue stopped on %s, next2comp %u"
                        " next2fill %u\n", adapter->netdev->name,
                        tq->tx_ring.next2comp, tq->tx_ring.next2fill);
@@ -1060,7 +1047,7 @@ vmxnet3_tq_xmit(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
                           (struct Vmxnet3_TxDesc *)ctx.sop_txd);
        gdesc = ctx.sop_txd;
 #endif
-       dev_dbg(&adapter->netdev->dev,
+       netdev_dbg(adapter->netdev,
                "txd[%u]: SOP 0x%Lx 0x%x 0x%x\n",
                (u32)(ctx.sop_txd -
                tq->tx_ring.base), le64_to_cpu(gdesc->txd.addr),
@@ -1213,7 +1200,7 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
                        if (unlikely(rcd->len == 0)) {
                                /* Pretend the rx buffer is skipped. */
                                BUG_ON(!(rcd->sop && rcd->eop));
-                               dev_dbg(&adapter->netdev->dev,
+                               netdev_dbg(adapter->netdev,
                                        "rxRing[%u][%u] 0 length\n",
                                        ring_idx, idx);
                                goto rcd_done;
@@ -1221,7 +1208,8 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
 
                        skip_page_frags = false;
                        ctx->skb = rbi->skb;
-                       new_skb = dev_alloc_skb(rbi->len + NET_IP_ALIGN);
+                       new_skb = netdev_alloc_skb_ip_align(adapter->netdev,
+                                                           rbi->len);
                        if (new_skb == NULL) {
                                /* Skb allocation failed, do not handover this
                                 * skb to stack. Reuse it. Drop the existing pkt
@@ -1236,11 +1224,14 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
                        pci_unmap_single(adapter->pdev, rbi->dma_addr, rbi->len,
                                         PCI_DMA_FROMDEVICE);
 
+#ifdef VMXNET3_RSS
+                       if (rcd->rssType != VMXNET3_RCD_RSS_TYPE_NONE &&
+                           (adapter->netdev->features & NETIF_F_RXHASH))
+                               ctx->skb->rxhash = le32_to_cpu(rcd->rssHash);
+#endif
                        skb_put(ctx->skb, rcd->len);
 
                        /* Immediate refill */
-                       new_skb->dev = adapter->netdev;
-                       skb_reserve(new_skb, NET_IP_ALIGN);
                        rbi->skb = new_skb;
                        rbi->dma_addr = pci_map_single(adapter->pdev,
                                                       rbi->skb->data, rbi->len,
@@ -1333,7 +1324,6 @@ rcd_done:
                        VMXNET3_WRITE_BAR0_REG(adapter,
                                               rxprod_reg[ring_idx] + rq->qid * 8,
                                               ring->next2fill);
-                       rq->uncommitted[ring_idx] = 0;
                }
 
                vmxnet3_comp_ring_adv_next2proc(&rq->comp_ring);
@@ -1378,7 +1368,6 @@ vmxnet3_rq_cleanup(struct vmxnet3_rx_queue *rq,
                rq->rx_ring[ring_idx].gen = VMXNET3_INIT_GEN;
                rq->rx_ring[ring_idx].next2fill =
                                        rq->rx_ring[ring_idx].next2comp = 0;
-               rq->uncommitted[ring_idx] = 0;
        }
 
        rq->comp_ring.gen = VMXNET3_INIT_GEN;
@@ -1396,8 +1385,8 @@ vmxnet3_rq_cleanup_all(struct vmxnet3_adapter *adapter)
 }
 
 
-void vmxnet3_rq_destroy(struct vmxnet3_rx_queue *rq,
-                       struct vmxnet3_adapter *adapter)
+static void vmxnet3_rq_destroy(struct vmxnet3_rx_queue *rq,
+                              struct vmxnet3_adapter *adapter)
 {
        int i;
        int j;
@@ -1459,7 +1448,6 @@ vmxnet3_rq_init(struct vmxnet3_rx_queue *rq,
        /* reset internal state and allocate buffers for both rings */
        for (i = 0; i < 2; i++) {
                rq->rx_ring[i].next2fill = rq->rx_ring[i].next2comp = 0;
-               rq->uncommitted[i] = 0;
 
                memset(rq->rx_ring[i].base, 0, rq->rx_ring[i].size *
                       sizeof(struct Vmxnet3_RxDesc));
@@ -1518,8 +1506,8 @@ vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter)
                rq->rx_ring[i].base = pci_alloc_consistent(adapter->pdev, sz,
                                                        &rq->rx_ring[i].basePA);
                if (!rq->rx_ring[i].base) {
-                       printk(KERN_ERR "%s: failed to allocate rx ring %d\n",
-                              adapter->netdev->name, i);
+                       netdev_err(adapter->netdev,
+                                  "failed to allocate rx ring %d\n", i);
                        goto err;
                }
        }
@@ -1528,8 +1516,7 @@ vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter)
        rq->comp_ring.base = pci_alloc_consistent(adapter->pdev, sz,
                                                  &rq->comp_ring.basePA);
        if (!rq->comp_ring.base) {
-               printk(KERN_ERR "%s: failed to allocate rx comp ring\n",
-                      adapter->netdev->name);
+               netdev_err(adapter->netdev, "failed to allocate rx comp ring\n");
                goto err;
        }
 
@@ -1821,9 +1808,10 @@ vmxnet3_request_irqs(struct vmxnet3_adapter *adapter)
                                          adapter->rx_queue[i].name,
                                          &(adapter->rx_queue[i]));
                        if (err) {
-                               printk(KERN_ERR "Failed to request irq for MSIX"
-                                      ", %s, error %d\n",
-                                      adapter->rx_queue[i].name, err);
+                               netdev_err(adapter->netdev,
+                                          "Failed to request irq for MSIX, "
+                                          "%s, error %d\n",
+                                          adapter->rx_queue[i].name, err);
                                return err;
                        }
 
@@ -1852,8 +1840,9 @@ vmxnet3_request_irqs(struct vmxnet3_adapter *adapter)
 #endif
        intr->num_intrs = vector + 1;
        if (err) {
-               printk(KERN_ERR "Failed to request irq %s (intr type:%d), error"
-                      ":%d\n", adapter->netdev->name, intr->type, err);
+               netdev_err(adapter->netdev,
+                          "Failed to request irq (intr type:%d), error %d\n",
+                          intr->type, err);
        } else {
                /* Number of rx queues will not change after this */
                for (i = 0; i < adapter->num_rx_queues; i++) {
@@ -1874,9 +1863,9 @@ vmxnet3_request_irqs(struct vmxnet3_adapter *adapter)
                        adapter->rx_queue[0].comp_ring.intr_idx = 0;
                }
 
-               printk(KERN_INFO "%s: intr type %u, mode %u, %u vectors "
-                      "allocated\n", adapter->netdev->name, intr->type,
-                      intr->mask_mode, intr->num_intrs);
+               netdev_info(adapter->netdev,
+                           "intr type %u, mode %u, %u vectors allocated\n",
+                           intr->type, intr->mask_mode, intr->num_intrs);
        }
 
        return err;
@@ -2042,8 +2031,8 @@ vmxnet3_set_mc(struct net_device *netdev)
                                rxConf->mfTablePA = cpu_to_le64(virt_to_phys(
                                                    new_table));
                        } else {
-                               printk(KERN_INFO "%s: failed to copy mcast list"
-                                      ", setting ALL_MULTI\n", netdev->name);
+                               netdev_info(netdev, "failed to copy mcast list"
+                                           ", setting ALL_MULTI\n");
                                new_mode |= VMXNET3_RXM_ALL_MULTI;
                        }
                }
@@ -2171,6 +2160,14 @@ vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter)
 
        if (adapter->rss) {
                struct UPT1_RSSConf *rssConf = adapter->rss_conf;
+               static const uint8_t rss_key[UPT1_RSS_MAX_KEY_SIZE] = {
+                       0x3b, 0x56, 0xd1, 0x56, 0x13, 0x4a, 0xe7, 0xac,
+                       0xe8, 0x79, 0x09, 0x75, 0xe8, 0x65, 0x79, 0x28,
+                       0x35, 0x12, 0xb9, 0x56, 0x7c, 0x76, 0x4b, 0x70,
+                       0xd8, 0x56, 0xa3, 0x18, 0x9b, 0x0a, 0xee, 0xf3,
+                       0x96, 0xa6, 0x9f, 0x8f, 0x9e, 0x8c, 0x90, 0xc9,
+               };
+
                devRead->misc.uptFeatures |= UPT1_F_RSS;
                devRead->misc.numRxQueues = adapter->num_rx_queues;
                rssConf->hashType = UPT1_RSS_HASH_TYPE_TCP_IPV4 |
@@ -2180,7 +2177,8 @@ vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter)
                rssConf->hashFunc = UPT1_RSS_HASH_FUNC_TOEPLITZ;
                rssConf->hashKeySize = UPT1_RSS_MAX_KEY_SIZE;
                rssConf->indTableSize = VMXNET3_RSS_IND_TABLE_SIZE;
-               get_random_bytes(&rssConf->hashKey[0], rssConf->hashKeySize);
+               memcpy(rssConf->hashKey, rss_key, sizeof(rss_key));
+
                for (i = 0; i < rssConf->indTableSize; i++)
                        rssConf->indTable[i] = ethtool_rxfh_indir_default(
                                i, adapter->num_rx_queues);
@@ -2218,7 +2216,7 @@ vmxnet3_activate_dev(struct vmxnet3_adapter *adapter)
        u32 ret;
        unsigned long flags;
 
-       dev_dbg(&adapter->netdev->dev, "%s: skb_buf_size %d, rx_buf_per_pkt %d,"
+       netdev_dbg(adapter->netdev, "%s: skb_buf_size %d, rx_buf_per_pkt %d,"
                " ring sizes %u %u %u\n", adapter->netdev->name,
                adapter->skb_buf_size, adapter->rx_buf_per_pkt,
                adapter->tx_queue[0].tx_ring.size,
@@ -2228,15 +2226,15 @@ vmxnet3_activate_dev(struct vmxnet3_adapter *adapter)
        vmxnet3_tq_init_all(adapter);
        err = vmxnet3_rq_init_all(adapter);
        if (err) {
-               printk(KERN_ERR "Failed to init rx queue for %s: error %d\n",
-                      adapter->netdev->name, err);
+               netdev_err(adapter->netdev,
+                          "Failed to init rx queue error %d\n", err);
                goto rq_err;
        }
 
        err = vmxnet3_request_irqs(adapter);
        if (err) {
-               printk(KERN_ERR "Failed to setup irq for %s: error %d\n",
-                      adapter->netdev->name, err);
+               netdev_err(adapter->netdev,
+                          "Failed to setup irq for error %d\n", err);
                goto irq_err;
        }
 
@@ -2253,8 +2251,8 @@ vmxnet3_activate_dev(struct vmxnet3_adapter *adapter)
        spin_unlock_irqrestore(&adapter->cmd_lock, flags);
 
        if (ret != 0) {
-               printk(KERN_ERR "Failed to activate dev %s: error %u\n",
-                      adapter->netdev->name, ret);
+               netdev_err(adapter->netdev,
+                          "Failed to activate dev: error %u\n", ret);
                err = -EINVAL;
                goto activate_err;
        }
@@ -2369,23 +2367,22 @@ vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
 
        err = pci_enable_device(pdev);
        if (err) {
-               printk(KERN_ERR "Failed to enable adapter %s: error %d\n",
-                      pci_name(pdev), err);
+               dev_err(&pdev->dev, "Failed to enable adapter: error %d\n", err);
                return err;
        }
 
        if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) {
                if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) {
-                       printk(KERN_ERR "pci_set_consistent_dma_mask failed "
-                              "for adapter %s\n", pci_name(pdev));
+                       dev_err(&pdev->dev,
+                               "pci_set_consistent_dma_mask failed\n");
                        err = -EIO;
                        goto err_set_mask;
                }
                *dma64 = true;
        } else {
                if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) {
-                       printk(KERN_ERR "pci_set_dma_mask failed for adapter "
-                              "%s\n",  pci_name(pdev));
+                       dev_err(&pdev->dev,
+                               "pci_set_dma_mask failed\n");
                        err = -EIO;
                        goto err_set_mask;
                }
@@ -2395,8 +2392,8 @@ vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
        err = pci_request_selected_regions(pdev, (1 << 2) - 1,
                                           vmxnet3_driver_name);
        if (err) {
-               printk(KERN_ERR "Failed to request region for adapter %s: "
-                      "error %d\n", pci_name(pdev), err);
+               dev_err(&pdev->dev,
+                       "Failed to request region for adapter: error %d\n", err);
                goto err_set_mask;
        }
 
@@ -2406,8 +2403,7 @@ vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
        mmio_len = pci_resource_len(pdev, 0);
        adapter->hw_addr0 = ioremap(mmio_start, mmio_len);
        if (!adapter->hw_addr0) {
-               printk(KERN_ERR "Failed to map bar0 for adapter %s\n",
-                      pci_name(pdev));
+               dev_err(&pdev->dev, "Failed to map bar0\n");
                err = -EIO;
                goto err_ioremap;
        }
@@ -2416,8 +2412,7 @@ vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
        mmio_len = pci_resource_len(pdev, 1);
        adapter->hw_addr1 = ioremap(mmio_start, mmio_len);
        if (!adapter->hw_addr1) {
-               printk(KERN_ERR "Failed to map bar1 for adapter %s\n",
-                      pci_name(pdev));
+               dev_err(&pdev->dev, "Failed to map bar1\n");
                err = -EIO;
                goto err_bar1;
        }
@@ -2524,12 +2519,14 @@ vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size,
                err = vmxnet3_rq_create(rq, adapter);
                if (err) {
                        if (i == 0) {
-                               printk(KERN_ERR "Could not allocate any rx"
-                                      "queues. Aborting.\n");
+                               netdev_err(adapter->netdev,
+                                          "Could not allocate any rx queues. "
+                                          "Aborting.\n");
                                goto queue_err;
                        } else {
-                               printk(KERN_INFO "Number of rx queues changed "
-                                      "to : %d.\n", i);
+                               netdev_info(adapter->netdev,
+                                           "Number of rx queues changed "
+                                           "to : %d.\n", i);
                                adapter->num_rx_queues = i;
                                err = 0;
                                break;
@@ -2642,15 +2639,17 @@ vmxnet3_change_mtu(struct net_device *netdev, int new_mtu)
                vmxnet3_adjust_rx_ring_size(adapter);
                err = vmxnet3_rq_create_all(adapter);
                if (err) {
-                       printk(KERN_ERR "%s: failed to re-create rx queues,"
-                               " error %d. Closing it.\n", netdev->name, err);
+                       netdev_err(netdev,
+                                  "failed to re-create rx queues, "
+                                  " error %d. Closing it.\n", err);
                        goto out;
                }
 
                err = vmxnet3_activate_dev(adapter);
                if (err) {
-                       printk(KERN_ERR "%s: failed to re-activate, error %d. "
-                               "Closing it\n", netdev->name, err);
+                       netdev_err(netdev,
+                                  "failed to re-activate, error %d. "
+                                  "Closing it\n", err);
                        goto out;
                }
        }
@@ -2678,10 +2677,6 @@ vmxnet3_declare_features(struct vmxnet3_adapter *adapter, bool dma64)
        netdev->vlan_features = netdev->hw_features &
                                ~(NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX);
        netdev->features = netdev->hw_features | NETIF_F_HW_VLAN_FILTER;
-
-       netdev_info(adapter->netdev,
-               "features: sg csum vlan jf tso tsoIPv6 lro%s\n",
-               dma64 ? " highDMA" : "");
 }
 
 
@@ -2724,7 +2719,7 @@ vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter,
                        adapter->intr.num_intrs = vectors;
                        return 0;
                } else if (err < 0) {
-                       netdev_err(adapter->netdev,
+                       dev_err(&adapter->netdev->dev,
                                   "Failed to enable MSI-X, error: %d\n", err);
                        vectors = 0;
                } else if (err < vector_threshold) {
@@ -2733,15 +2728,16 @@ vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter,
                        /* If fails to enable required number of MSI-x vectors
                         * try enabling minimum number of vectors required.
                         */
-                       netdev_err(adapter->netdev,
-                                  "Failed to enable %d MSI-X, trying %d instead\n",
+                       dev_err(&adapter->netdev->dev,
+                               "Failed to enable %d MSI-X, trying %d instead\n",
                                    vectors, vector_threshold);
                        vectors = vector_threshold;
                }
        }
 
-       netdev_info(adapter->netdev,
-                   "Number of MSI-X interrupts which can be allocated are lower than min threshold required.\n");
+       dev_info(&adapter->pdev->dev,
+                "Number of MSI-X interrupts which can be allocated "
+                "is lower than min threshold required.\n");
        return err;
 }
 
@@ -2796,7 +2792,8 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
                        if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE
                            || adapter->num_rx_queues != 1) {
                                adapter->share_intr = VMXNET3_INTR_TXSHARE;
-                               printk(KERN_ERR "Number of rx queues : 1\n");
+                               netdev_err(adapter->netdev,
+                                          "Number of rx queues : 1\n");
                                adapter->num_rx_queues = 1;
                                adapter->intr.num_intrs =
                                                VMXNET3_LINUX_MIN_MSIX_VECT;
@@ -2807,9 +2804,9 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
                        return;
 
                /* If we cannot allocate MSIx vectors use only one rx queue */
-               netdev_info(adapter->netdev,
-                           "Failed to enable MSI-X, error %d . Limiting #rx queues to 1, try MSI.\n",
-                           err);
+               dev_info(&adapter->pdev->dev,
+                        "Failed to enable MSI-X, error %d. "
+                        "Limiting #rx queues to 1, try MSI.\n", err);
 
                adapter->intr.type = VMXNET3_IT_MSI;
        }
@@ -2826,7 +2823,8 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
 #endif /* CONFIG_PCI_MSI */
 
        adapter->num_rx_queues = 1;
-       printk(KERN_INFO "Using INTx interrupt, #Rx queues: 1.\n");
+       dev_info(&adapter->netdev->dev,
+                "Using INTx interrupt, #Rx queues: 1.\n");
        adapter->intr.type = VMXNET3_IT_INTX;
 
        /* INT-X related setting */
@@ -2852,7 +2850,7 @@ vmxnet3_tx_timeout(struct net_device *netdev)
        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
        adapter->tx_timeout_count++;
 
-       printk(KERN_ERR "%s: tx hang\n", adapter->netdev->name);
+       netdev_err(adapter->netdev, "tx hang\n");
        schedule_work(&adapter->work);
        netif_wake_queue(adapter->netdev);
 }
@@ -2872,12 +2870,12 @@ vmxnet3_reset_work(struct work_struct *data)
        /* if the device is closed, we must leave it alone */
        rtnl_lock();
        if (netif_running(adapter->netdev)) {
-               printk(KERN_INFO "%s: resetting\n", adapter->netdev->name);
+               netdev_notice(adapter->netdev, "resetting\n");
                vmxnet3_quiesce_dev(adapter);
                vmxnet3_reset_dev(adapter);
                vmxnet3_activate_dev(adapter);
        } else {
-               printk(KERN_INFO "%s: already closed\n", adapter->netdev->name);
+               netdev_info(adapter->netdev, "already closed\n");
        }
        rtnl_unlock();
 
@@ -2936,8 +2934,9 @@ vmxnet3_probe_device(struct pci_dev *pdev,
        num_tx_queues = rounddown_pow_of_two(num_tx_queues);
        netdev = alloc_etherdev_mq(sizeof(struct vmxnet3_adapter),
                                   max(num_tx_queues, num_rx_queues));
-       printk(KERN_INFO "# of Tx queues : %d, # of Rx queues : %d\n",
-              num_tx_queues, num_rx_queues);
+       dev_info(&pdev->dev,
+                "# of Tx queues : %d, # of Rx queues : %d\n",
+                num_tx_queues, num_rx_queues);
 
        if (!netdev)
                return -ENOMEM;
@@ -2952,14 +2951,14 @@ vmxnet3_probe_device(struct pci_dev *pdev,
                                               sizeof(struct Vmxnet3_DriverShared),
                                               &adapter->shared_pa);
        if (!adapter->shared) {
-               printk(KERN_ERR "Failed to allocate memory for %s\n",
-                      pci_name(pdev));
+               dev_err(&pdev->dev, "Failed to allocate memory\n");
                err = -ENOMEM;
                goto err_alloc_shared;
        }
 
        adapter->num_rx_queues = num_rx_queues;
        adapter->num_tx_queues = num_tx_queues;
+       adapter->rx_buf_per_pkt = 1;
 
        size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues;
        size += sizeof(struct Vmxnet3_RxQueueDesc) * adapter->num_rx_queues;
@@ -2967,8 +2966,7 @@ vmxnet3_probe_device(struct pci_dev *pdev,
                                                  &adapter->queue_desc_pa);
 
        if (!adapter->tqd_start) {
-               printk(KERN_ERR "Failed to allocate memory for %s\n",
-                      pci_name(pdev));
+               dev_err(&pdev->dev, "Failed to allocate memory\n");
                err = -ENOMEM;
                goto err_alloc_queue_desc;
        }
@@ -2998,8 +2996,8 @@ vmxnet3_probe_device(struct pci_dev *pdev,
        if (ver & 1) {
                VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_VRRS, 1);
        } else {
-               printk(KERN_ERR "Incompatible h/w version (0x%x) for adapter"
-                      " %s\n", ver, pci_name(pdev));
+               dev_err(&pdev->dev,
+                       "Incompatible h/w version (0x%x) for adapter\n", ver);
                err = -EBUSY;
                goto err_ver;
        }
@@ -3008,8 +3006,8 @@ vmxnet3_probe_device(struct pci_dev *pdev,
        if (ver & 1) {
                VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1);
        } else {
-               printk(KERN_ERR "Incompatible upt version (0x%x) for "
-                      "adapter %s\n", ver, pci_name(pdev));
+               dev_err(&pdev->dev,
+                       "Incompatible upt version (0x%x) for adapter\n", ver);
                err = -EBUSY;
                goto err_ver;
        }
@@ -3017,11 +3015,9 @@ vmxnet3_probe_device(struct pci_dev *pdev,
        SET_NETDEV_DEV(netdev, &pdev->dev);
        vmxnet3_declare_features(adapter, dma64);
 
-       adapter->dev_number = atomic_read(&devices_found);
-
-       adapter->share_intr = irq_share_mode;
-       if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE &&
-           adapter->num_tx_queues != adapter->num_rx_queues)
+       if (adapter->num_tx_queues == adapter->num_rx_queues)
+               adapter->share_intr = VMXNET3_INTR_BUDDYSHARE;
+       else
                adapter->share_intr = VMXNET3_INTR_DONTSHARE;
 
        vmxnet3_alloc_intr_resources(adapter);
@@ -3030,7 +3026,9 @@ vmxnet3_probe_device(struct pci_dev *pdev,
        if (adapter->num_rx_queues > 1 &&
            adapter->intr.type == VMXNET3_IT_MSIX) {
                adapter->rss = true;
-               printk(KERN_INFO "RSS is enabled.\n");
+               netdev->hw_features |= NETIF_F_RXHASH;
+               netdev->features |= NETIF_F_RXHASH;
+               dev_dbg(&pdev->dev, "RSS is enabled.\n");
        } else {
                adapter->rss = false;
        }
@@ -3061,16 +3059,15 @@ vmxnet3_probe_device(struct pci_dev *pdev,
        netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues);
        netif_set_real_num_rx_queues(adapter->netdev, adapter->num_rx_queues);
 
+       netif_carrier_off(netdev);
        err = register_netdev(netdev);
 
        if (err) {
-               printk(KERN_ERR "Failed to register adapter %s\n",
-                      pci_name(pdev));
+               dev_err(&pdev->dev, "Failed to register adapter\n");
                goto err_register;
        }
 
        vmxnet3_check_link(adapter, false);
-       atomic_inc(&devices_found);
        return 0;
 
 err_register:
@@ -3312,7 +3309,7 @@ static struct pci_driver vmxnet3_driver = {
 static int __init
 vmxnet3_init_module(void)
 {
-       printk(KERN_INFO "%s - version %s\n", VMXNET3_DRIVER_DESC,
+       pr_info("%s - version %s\n", VMXNET3_DRIVER_DESC,
                VMXNET3_DRIVER_VERSION_REPORT);
        return pci_register_driver(&vmxnet3_driver);
 }