SR-IOV enabling process failed in kernel 2.6.32

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Scott,
 
We are working on InfiniBand device that supports SR-IOV.
and lately (from version 2.6.32 ) we faced a problem:
When the driver tried to enable SR-IOV it failed to allocate resources
for the 2 BARS the device needs.
The situation is when there are 2 BARS (64 bits), the first asks for
little amount of memory and the second asks for much larger amount of
memory.
In the code I saw (drivers/pci/iov.c) that the order of the allocation
starts from the first BAR to the last.

The code:
for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
  res = iov->res + i;
  if (!res->flags)
      continue;
  rc = pci_assign_resource(dev, i + PCI_IOV_RESOURCES);

This process failed for the second BAR (The big one). (in the log: "not
enough MMIO resources for SR-IOV")
 
I think (IMHO) it because the allocation of the first BAR (the little)
one was from the allocated slot of the big one (the allocation from the
sriov_init function) and when the kernel tries to allocate the slot for
he second BAR (the big one) in the place of the little one it failed
(there is not enough memory there).
 
when I changed the code to start the allocation from the last to the
first: 
(for i = PCI_SRIOV_NUM_BARS; i >= 0; i--)

It works fine.
 
Is it a bug? 
 
Thanks, Erez
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux