rtnl_unlock();
 }
 
-/* Find netvsc by VMBus serial number.
- * The PCI hyperv controller records the serial number as the slot.
+/* Find netvsc by VF serial number.
+ * The PCI hyperv controller records the serial number as the slot kobj name.
  */
 static struct net_device *get_netvsc_byslot(const struct net_device *vf_netdev)
 {
        struct device *parent = vf_netdev->dev.parent;
        struct net_device_context *ndev_ctx;
        struct pci_dev *pdev;
+       u32 serial;
 
        if (!parent || !dev_is_pci(parent))
                return NULL; /* not a PCI device */
                return NULL;
        }
 
+       if (kstrtou32(pci_slot_name(pdev->slot), 10, &serial)) {
+               netdev_notice(vf_netdev, "Invalid vf serial:%s\n",
+                             pci_slot_name(pdev->slot));
+               return NULL;
+       }
+
        list_for_each_entry(ndev_ctx, &netvsc_dev_list, list) {
                if (!ndev_ctx->vf_alloc)
                        continue;
 
-               if (ndev_ctx->vf_serial == pdev->slot->number)
+               if (ndev_ctx->vf_serial == serial)
                        return hv_get_drvdata(ndev_ctx->device_ctx);
        }
 
        netdev_notice(vf_netdev,
-                     "no netdev found for slot %u\n", pdev->slot->number);
+                     "no netdev found for vf serial:%u\n", serial);
        return NULL;
 }