Hi, Damjan,

The issue existing in the code is container fd is initialized as “-1”, and 
there is no code to update it before trying to read  iommu_group in pci.c, and 
container_fd is the condition required. See below code.


  if (lvm->container_fd != -1)
    {
      u8 *tmpstr;
      vec_reset_length (f);
      f = format (f, "%v/iommu_group%c", dev_dir_name, 0);
      tmpstr = clib_sysfs_link_to_name ((char *) f);
      if (tmpstr)
        {
          di->iommu_group = atoi ((char *) tmpstr);
          vec_free (tmpstr);
        }

From: Damjan Marion [mailto:dmar...@me.com]
Sent: Sunday, December 30, 2018 7:10 PM
To: Yu, Ping <ping...@intel.com>
Cc: vpp-dev@lists.fd.io
Subject: Re: [vpp-dev] found some issue in pci vfio


Fact that you can open vfio container doesn't actually mean that you can use 
vfio-pci module on specific PCI device.

vfio-pci module can be used in 2 cases:
 - when /sys/bus/pci/devices/<PCI ADDRESS>/iommu_group exists
 - when /sys/module/vfio/parameters/enable_unsafe_noiommu_mode is set to Y 
(introduced in kernel 4.4)

That code needs to be fixed, but I don't think your fix is the right one....



On 29 Dec 2018, at 04:46, Yu, Ping 
<ping...@intel.com<mailto:ping...@intel.com>> wrote:

I submitted a patch to fix it.

https://gerrit.fd.io/r/16640

Ping

From: Yu, Ping
Sent: Saturday, December 29, 2018 10:43 AM
To: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io>
Cc: Yu, Ping <ping...@intel.com<mailto:ping...@intel.com>>
Subject: found some issue in pci vfio

Hello, all

Recently I met some issue in vfio, and below is some root cause:

Before running vpp, I will use “dpdk-devbind.py” to bind the NIC to vfio-pci, 
and then use “uio-driver auto” configure, and it once worked well, but it has 
problem recently, so I took a look at this to resolve the problem.
I found that vpp has some problem to “auto” detect the uio-driver to be vfio, 
and the bug info is below:
1)      vlib_pci_bind_to_uio is dependent vlib_pci_get_device_info to tell 
iommu_group
2)      vlib_pci_get_device_info will check whether lvm->container_fd == -1

In my case, lvm->container_fd is initialized to be “-1”, and there is no chance 
to modify it, so in the eye of vlib_pci_bind_to_uio, iommu_group is -1, then it 
will try to enable noiommu mode. If some kernel enabled NOIOMMU, then vfio can 
continue work with noiommu mode, but if not, then this device will be rejected 
due to “no VFIO” support.  (pci.c # 411. )

The solution is to drop “auto” mode, and explicitly configure “vfio-pci” in the 
configuration, but I hope the default “auto” mode can be smarter.

Ping

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#11792): https://lists.fd.io/g/vpp-dev/message/11792
Mute This Topic: https://lists.fd.io/mt/28877871/675642
Group Owner: vpp-dev+ow...@lists.fd.io<mailto:vpp-dev+ow...@lists.fd.io>
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  
[dmar...@me.com<mailto:dmar...@me.com>]
-=-=-=-=-=-=-=-=-=-=-=-

--
Damjan

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#11812): https://lists.fd.io/g/vpp-dev/message/11812
Mute This Topic: https://lists.fd.io/mt/28877871/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to