vga passthrough correct but zero subsystem id

Hi (salam) all
First sorry for my English.
I have laptop with integrated Intel VGA and GTX850m NVIDIA. I successfully boot my windows VM with passthrough NVIDIA but my subsystem id of NVIDIA is zero.
The driver fail to install in VM (I think because of it) but not sure.
I don`t know the problem.

  • I saw in /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 the rom size is 524.3k but i cant copy it(for use in vm rom).
  • I extract the NVIDIA rom from bios eith mmtool but the size I can get was 102.4k and not use it now.
  • I passthroug my gigabit lan too for comparison the situation. it worked perfect.
  • First when I run lspci the susbsystem for them is correct but when i run the vm lspci does not show the subssystem.
    Outputs for them at first :

[i]01:00.0 0302: 10de:1391 (rev a2)
Subsystem: 1043:14ad
Flags: bus master, fast devsel, latency 0, IRQ 255
Memory at f6000000 (32-bit, non-prefetchable)
Memory at e0000000 (64-bit, prefetchable)
Memory at f0000000 (64-bit, prefetchable)
I/O ports at e000
Expansion ROM at f7000000
Capabilities: [60] Power Management version 3
Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [78] Express Endpoint, MSI 00
Capabilities: [100] Virtual Channel
Capabilities: [250] Latency Tolerance Reporting
Capabilities: [258] L1 PM Substates
Capabilities: [128] Power Budgeting <?> Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>
Capabilities: [900] #19
Kernel driver in use: pci-stub
Kernel modules: nouveau

04:00.0 0200: 10ec:8168 (rev 10)
Subsystem: 1043:200f
Flags: bus master, fast devsel, latency 0, IRQ 36
I/O ports at d000
Memory at f7904000 (64-bit, non-prefetchable)
Memory at f7900000 (64-bit, non-prefetchable)
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [70] Express Endpoint, MSI 01
Capabilities: [b0] MSI-X: Enable- Count=4 Masked-
Capabilities: [d0] Vital Product Data
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Virtual Channel
Capabilities: [160] Device Serial Number 04-96-95-33-68-4c-e0-00
Capabilities: [170] Latency Tolerance Reporting
Capabilities: [178] L1 PM Substates
Kernel driver in use: r8169
Kernel modules: r8169[/i]

Outputs for them when run VM:

[i]01:00.0 0302: 10de:1391 (rev a2)
Flags: fast devsel, IRQ 16
Memory at f6000000 (32-bit, non-prefetchable)
Memory at e0000000 (64-bit, prefetchable)
Memory at f0000000 (64-bit, prefetchable)
I/O ports at e000
Expansion ROM at f7000000
Capabilities: [60] Power Management version 3
Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [78] Express Endpoint, MSI 00
Capabilities: [100] Virtual Channel
Capabilities: [250] Latency Tolerance Reporting
Capabilities: [258] L1 PM Substates
Capabilities: [128] Power Budgeting <?> Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>
Capabilities: [900] #19
Kernel driver in use: vfio-pci
Kernel modules: nouveau

04:00.0 0200: 10ec:8168 (rev 10)
Subsystem: 1043:200f
Flags: bus master, fast devsel, latency 0, IRQ 19
I/O ports at d000
Memory at f7904000 (64-bit, non-prefetchable)
Memory at f7900000 (64-bit, non-prefetchable)
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [70] Express Endpoint, MSI 01
Capabilities: [b0] MSI-X: Enable- Count=4 Masked-
Capabilities: [d0] Vital Product Data
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Virtual Channel
Capabilities: [160] Device Serial Number 04-96-95-33-68-4c-e0-00
Capabilities: [170] Latency Tolerance Reporting
Capabilities: [178] L1 PM Substates
Kernel driver in use: vfio-pci
Kernel modules: r8169[/i]

1- Is there any tool for communicate with nvidia chipset that i run it in VM and see the results?
2- Is there any generic driver for nvidia or specific chipset (gtx850m) but not subsystem id that maybe it can be installed in vm?
3- How can i grab or dumb the rom of NVIDIA or extract it from bios?

Thanx

I’ve used following code to get the right PCI bus ID of my GPU and dump its ROM, however I had to use a Live CD to be able to dump it successfully.

lspci -k |grep -A 3 -i nvidia
cd /sys/bus/pci/devices/0000:01:00.0/
echo 1 > rom
cat rom > /home/celmor/GM200.rom
echo 0 > rom

I have a Windows VM working on an Arch-Linux host via Qemu/KVM and pass through of my GTX 980 Ti.
The only reason I dumped the ROM is to look up if it supports EFI booting and not for an attempt to use it inside the VM. The only thing the VM should need is an apropriate driver which Windows usually comes with. The ROM should stay on the GPU, it doesn’t get ‘used’ in the sense you’re trying to use it, the OS communicates with the GPU via a driver, the code inside the ROM is being run on the GPU itself.
You should try to follow some guides on how to do this PCI-pass through for VMs properly.

From what I gather, your GPU is not showing up correctly inside the VM and you were trying to fix that by somehow using the ROM inside the VM (which isn’t possible).
However there is an issue in nVidias drivers (for non-Quadro cards) which has been around for quite a while now: If the nVidia driver detects that it is being run inside a hypervisor environment (VM) it stops working. I’m not sure of the exact card you’re using but I guess it is a consumer versionand not a Quadro. Also depending on the Virtualization Software you’re using that problem can be circumvented. In my case I’m using QEMU with a options which hide the fact from at least the nVidia driver that it is being run inside a VM (options for Qemu I sued is ‘-cpu host,kvm=off’).
I would recommencd you read into a like this one which explains how the pass through works and the necessary steps:
https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF

Hope this helps.

null