vlib: fix issues with PCI handling code 04/7504/2
authorDamjan Marion <damarion@cisco.com>
Mon, 10 Jul 2017 13:38:21 +0000 (15:38 +0200)
committerDamjan Marion <damarion@cisco.com>
Mon, 10 Jul 2017 13:42:27 +0000 (15:42 +0200)
- PCI devices not properly discovered
- vlib_pci_bus_master_enable () not working

Change-Id: I7433ab1b19b890b8900635b43037b9a2017a1921
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/vlib/pci/linux_pci.c
src/vlib/pci/pci.h

index 623737d..2d3c0a8 100644 (file)
@@ -562,8 +562,6 @@ scan_device (void *arg, u8 * dev_dir_name, u8 * ignored)
   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 @@ scan_device (void *arg, u8 * dev_dir_name, u8 * ignored)
       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 @@ scan_device (void *arg, u8 * dev_dir_name, u8 * ignored)
   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;
index 811a6ff..2141080 100644 (file)
@@ -215,7 +215,7 @@ vlib_pci_bus_master_enable (vlib_pci_device_t * dev)
   if (err)
     return err;
 
-  if (!(command & PCI_COMMAND_BUS_MASTER))
+  if (command & PCI_COMMAND_BUS_MASTER)
     return 0;
 
   command |= PCI_COMMAND_BUS_MASTER;