[Bug 290793] iovctl on mlx5en won't work

[email protected]
Newsgroups gmane.os.freebsd.devel.net
Message-ID <[email protected]/bugzilla/>
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=290793

--- Comment #7 from David BOYER <[email protected]> ---
(In reply to David BOYER from comment #3)

What's the call graph into this?

I had answered yesterday but just gor a message reading that a collision
occured.

I can only find mlx5_core/mlx5_main.c::request_bar -> pci_request_regions()
which ends up at the end of a loop in lkpi_pci_request_region().
==> The same for me

You made me actually look at Linux code and there you end up in
__pci_request_region()
which has the same checks at the beginning it seems:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/pci/pci.c#n3935

So the problem is likely elsewhere in the LinuxKPI emulation or in mlx5.
My understanding is that pci_resource_len may return 0 on FreeBSD while linux
reports the right size.
Then, on FreeBSD, pci_request_region exits because pci_resource_len == 0,
bus_alloc_resource_any is not called and the memory is not allocated.
Why linux reports the right size ? 
https://wiki.osdev.org/PCI reads "To determine the amount of address space
needed by a PCI device, you must save the original value of the BAR, write a
value of all 1's to the register, then read it back. The amount of memory can
then be determined by masking the information bits, performing a bitwise NOT
('~' in C), and incrementing the value by 1. The original value of the BAR
should then be restored".
If I read correctly, this is done by pci_read_bases, found in
"drivers/pci/probe.c". It purpose is to find the BAR memory size.

Also the error logged:
mlx5_core2: lkpi_pci_request_region: failed to alloc bar 0 type 3 rid 16
comes from after that check?  So if it would fail and return we would not see
this?  Is that a secondary problem?
Yes, it comes after. Because the memory allocation step did not run
(pci_resource_len == 0).

If you say "On FreeBSD, the BAR size of VFs can temporarily be 0 and."
Would we assume mlx5core to only call pci_request_regions() once they are
properly initialized?
I guess we can say they are not properly initialized because it is done by the
kernel (on linux) not by the driver itself.

Please note that I am not an expert at all and had not read sourcecode of linux
and FreeBSD before, so I may be wrong somewhere, especially in my wording.

-- 
You are receiving this mail because:
You are the assignee for the bug.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.