Thanks for the info. Yes. we need to do this as our architecture manages everything from one of super privileged guest . Rest of the guest don't have access to these devices .
Let me check with hardware vendor to see if we can segregate SMBus device into separate iommu group. -Gokul On Fri, Nov 30, 2018 at 9:35 PM Alex Williamson <alex.william...@redhat.com> wrote: > On Fri, 30 Nov 2018 12:04:26 +0530 > gokul cg <gokulj...@gmail.com> wrote: > > > Thanks for info > > > > See inline > > On Wed, Nov 28, 2018 at 8:56 PM Alex Williamson < > alex.william...@redhat.com> > > wrote: > > > > > On Wed, 28 Nov 2018 20:21:02 +0530 > > > gokul cg <gokulj...@gmail.com> wrote: > > > > > > > Hi Folks, > > > > > > > > Please excuse me , I just writing to you as i could see you had made > > > > changes regarding iommu and I thought you could give help me here. > > > > > > > > We are testing visualization with QEMU-2.7.0 + Linux-4.8+, we are > facing > > > > issue while configuring pass through PCI devices in QEMU to pass it > to > > > > guest OS. > > > > We are using following QEMU argument to configure PCI device as > > > passthrough > > > > device to guest, which was working with Linux 3.10 distro > (hypervisor: > > > QEMU > > > > 1.7.2, Linux: 3.10+). > > > > > > > > /usr/bin/qemu-system-x86_64 -name guest_1 -S -machine > > > > pc-i440fx-1.7,accel=kvm,usb=off -m 49152 \ > > > > -device kvm-pci-assign,host=0000:00:1f.3 -device > > > > kvm-pci-assign,host=0000:09:0e.0 ..<etc..> > > > > > > Legacy KVM device assignment (aka kvm-pci-assign) has been deprecated > > > for some time now, you'll find it doesn't even exist in newer kernels > > > and QEMU. > > > > > > Understood . > > > > > > Here is the error message that we will get when we try to configure > PCI > > > > devices as passthrough using kvm pci assignment method in Linux 4.8+ > > > > (hypervisor: QEMU 2.7.0, Linux: 4.8+). > > > > > > > > which is shown below. > > > > > > > > ---log--- > > > > > > > > From QEMU: > > > > qemu-system-x86_64: -device kvm-pci-assign,host=0000:00:1f.3: Failed > to > > > > assign device "(null)": Invalid argument > > > > > > > > From dmesg: > > > > pci-stub 0000:00:1f.3: kvm assign device failed ret -22 > > > > > > > > ---end---- > > > > > > > > Info about devices (CPU: Intel(R) Xeon(R) CPU E5-2608L): > > > > > > > > root@shining-node:~# lspci -k -s 00:1f.3 > > > > 00:1f.3 SMBus: Intel Corporation C610/X99 series chipset SMBus > Controller > > > > (rev 05) > > > > Subsystem: Intel Corporation C610/X99 series chipset SMBus > > > > Controller > > > > Kernel driver in use: pci-stub > > > > Kernel modules: i2c_i801 > > > > > > Why are you trying to assign an SMBus controller to a VM? > > > > > > We want guest of to read out eprom and sensor devices and manage our > > chassis . > > Our i2c devices are connected to Intel SMbus controller > > It seems fundamentally unsafe to allow a user driver (where QEMU is > just a userspace driver exposing the device into a VM) to manage the > host chassis. Additionally since this set of multifunction devices do > not expose access control services, we must assume that untranslated > DMA between the function is possible and thus group them together. It > would be up to the hardware vendor whether the devices are in fact DMA > isolated to provide an ACS quirk to split this grouping. Otherwise > you'll need to provide that isolation as a downstream assumption. > > > > root@shining-node:~# > > > > root@shining-node:~# lspci -k -s 09:0e.0 > > > > 09:0e.0 Network controller: Broadcom Limited Device b680 (rev 12) > > > > root@shining-node:~# > > > > > > > > From the web search i could see that it is because there are multiple > > > > devices in same iommu_group that the passthrough device belongs to. > > > > When i check iommu_group , i have multiple devices in same group but > all > > > > those are intel devices under Wellsburg PCH. > > > > > > Nope, kvm-pci-assign doesn't make use of IOMMU groups, more likely just > > > some state of disrepair as it's deprecated and replaced by vfio-pci, > > > which does use iommu groups. So iommu groups will be a problem, but > > > not in the configuration you're attempting to use above. > > > > > > The error i had pasted above "< pci-stub 0000:00:1f.3: kvm assign > device > > failed ret -22 >" is comming as iommu attach device > > fails because of following check . > > 1094 int iommu_attach_device(struct iommu_domain *domain, struct device > > *dev) > > 1095 { > > 1096 struct iommu_group *group; > > 1097 int ret; > > 1098 > > 1099 group = iommu_group_get(dev); > > 1100 /* FIXME: Remove this when groups a mandatory for iommu > > drivers */ > > 1101 if (group == NULL) > > 1102 return __iommu_attach_device(domain, dev); > > 1103 > > Ah yes, I forget about this since legacy KVM device assignment has been > deprecated for so long. > > > > > root@shining-node:~# ls > > > > /sys/bus/pci/devices/0000\:00\:1f.3/iommu_group/devices/ > > > > 0000:00:1f.0 0000:00:1f.2 0000:00:1f.3 0000:00:1f.6 > > > > root@shining-node:~# > > > > root@shining-node:~# lspci -v -s 0000:00:1f > > > > 00:1f.0 ISA bridge: Intel Corporation C610/X99 series chipset LPC > > > > Controller (rev 05) > > > > Subsystem: Intel Corporation C610/X99 series chipset LPC Controller > > > > Flags: bus master, medium devsel, latency 0, NUMA node 0 > > > > Capabilities: [e0] Vendor Specific Information: Len=0c <?> > > > > Kernel driver in use: lpc_ich > > > > Kernel modules: lpc_ich > > > > > > > > 00:1f.2 SATA controller: Intel Corporation C610/X99 series chipset > 6-Port > > > > SATA Controller [AHCI mode] (rev 05) (prog-if 01 [AHCI 1.0]) > > > > Subsystem: Intel Corporation C610/X99 series chipset 6-Port SATA > > > Controller > > > > [AHCI mode] > > > > Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 35, NUMA > node 0 > > > > I/O ports at 3068 [size=8] > > > > I/O ports at 3074 [size=4] > > > > I/O ports at 3060 [size=8] > > > > I/O ports at 3070 [size=4] > > > > I/O ports at 3020 [size=32] > > > > Memory at 91d20000 (32-bit, non-prefetchable) [size=2K] > > > > Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit- > > > > Capabilities: [70] Power Management version 3 > > > > Capabilities: [a8] SATA HBA v1.0 > > > > Kernel driver in use: ahci > > > > > > > > 00:1f.3 SMBus: Intel Corporation C610/X99 series chipset SMBus > Controller > > > > (rev 05) > > > > Subsystem: Intel Corporation C610/X99 series chipset SMBus Controller > > > > Flags: medium devsel, IRQ 18, NUMA node 0 > > > > Memory at 180000600000 (64-bit, non-prefetchable) [size=4K] > > > > I/O ports at 3000 [size=32] > > > > Kernel driver in use: pci-stub > > > > Kernel modules: i2c_i801 > > > > > > > > 00:1f.6 Signal processing controller: Intel Corporation C610/X99 > series > > > > chipset Thermal Subsystem (rev 05) > > > > Subsystem: Intel Corporation C610/X99 series chipset Thermal > Subsystem > > > > Flags: bus master, fast devsel, latency 0, IRQ 255, NUMA node 0 > > > > Memory at 183fc0010000 (64-bit, non-prefetchable) [size=4K] > > > > Capabilities: [50] Power Management version 3 > > > > Capabilities: [80] MSI: Enable- Count=1/1 Maskable- 64bit- > > > > > > Again I have to ask, why are these things you'd want to pass to a VM? > > > The SATA controller is the only reasonable thing to assign here, but > > > can easily be replaced by a plugin card with proper isolation or the > > > performance can be nearly matched with virtio devices. These devices > > > do not provide isolation between them therefore the assignment group is > > > the full set of devices within the iommu group. > > > > > > This is our POC with one of our guest will have access to our sensor > > devices . So need to do this . > > Your use case seems unique and unsafe from a generic userspace drive > perspective. You could possibly use the vfio mediated device interface > to provide a host driver that polices userspace access to the device. > This might not be too difficult if the device primarily uses a PIO > rather than DMA interface. Potentially some sort of generic i2c > paravirtualization could also provide this. For direct assignment, the > grouping needs to be resolved, either upstream with hardware vendor > isolation guarantees or downstream with custom patches. > > > > root@shining-node:~# > > > > > > > > > > > > I have tried ACS override patch to rearrange these devices to > different > > > > iommu_group and its not working for these devices.I have tried to > > > > passthrough vfio method, vfio complains that it needs all driver to > be > > > vfio > > > > compatible. > > > > > > > > How can we achieve pci passthrough for Intel SMBus Controller > [00:1f.3 > > > > here] with latest kernel(We use 4.8+ now) > > > > > > The only theoretically supported mechanism would be to assign all of > > > the devices in the group to the VM, but you're putting the host system > > > at risk by assigning system management controllers to a VM. > > > > We don't wan't to do this . We just need only SMBUS controller to be > > passed to guest . > > > > Again, why > > > would you want to assign the SMBus controller to a VM? The unsupported > > > path is with the ACS override patch, using the multifunction option or > > > specific vendor and device IDs. Thanks, > > > > > > I tried "ACS override patch" with multifunction option and specific > vendor > > and device IDs. > > But it didn't works for us. I don't know whether this grouping is based > on > > DMAR/RMRR configuration in BIOS. > > RMRRs would be yet another compounding problem, but AFAIK it would be > unusual to have RMRRs on the SMBus device. The override patch can > certainly be made to work, but it's not upstream, not likely to ever > get upstream, and not supported. Thanks, > > Alex >
_______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu