vlib: fix issues with PCI handling code

- PCI devices not properly discovered
- vlib_pci_bus_master_enable () not working

Change-Id: I7433ab1b19b890b8900635b43037b9a2017a1921
Signed-off-by: Damjan Marion <damarion@cisco.com>
diff --git a/src/vlib/pci/linux_pci.c b/src/vlib/pci/linux_pci.c
index 623737d..2d3c0a8 100644
--- a/src/vlib/pci/linux_pci.c
+++ b/src/vlib/pci/linux_pci.c
@@ -562,8 +562,6 @@
   hash_set (pm->pci_dev_index_by_pci_addr, dev->bus_address.as_u32,
 	    dev - pm->pci_devs);
 
-  error = init_device (vm, dev, &pdev);
-
   vec_reset_length (f);
   f = format (f, "%v/vpd%c", dev_dir_name, 0);
   fd = open ((char *) f, O_RDONLY);
@@ -601,10 +599,6 @@
       close (fd);
     }
 
-  vec_reset_length (f);
-  f = format (f, "%v/driver%c", dev_dir_name, 0);
-  dev->driver_name = vlib_sysfs_link_to_name ((char *) f);
-
   dev->numa_node = -1;
   vec_reset_length (f);
   f = format (f, "%v/numa_node%c", dev_dir_name, 0);
@@ -625,6 +619,12 @@
   vlib_sysfs_read ((char *) f, "0x%x", &tmp);
   dev->device_id = tmp;
 
+  error = init_device (vm, dev, &pdev);
+
+  vec_reset_length (f);
+  f = format (f, "%v/driver%c", dev_dir_name, 0);
+  dev->driver_name = vlib_sysfs_link_to_name ((char *) f);
+
 done:
   vec_free (f);
   return error;