mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
Merge branch 'feature/non-root' into feature/hw-testing
This commit is contained in:
commit
bb6d31a971
4 changed files with 48 additions and 5 deletions
|
@ -57,6 +57,9 @@ int pci_device_compare(const struct pci_device *d, const struct pci_device *f);
|
|||
|
||||
struct pci_device * pci_lookup_device(struct pci *p, struct pci_device *filter);
|
||||
|
||||
/** Get currently loaded driver for device */
|
||||
int pci_get_driver(struct pci_device *d, char *buf, size_t buflen);
|
||||
|
||||
/** Bind a new LKM to the PCI device */
|
||||
int pci_attach_driver(struct pci_device *d, const char *driver);
|
||||
|
||||
|
|
|
@ -254,10 +254,29 @@ struct pci_device * pci_lookup_device(struct pci *p, struct pci_device *f)
|
|||
return list_search(&p->devices, (cmp_cb_t) pci_device_compare, (void *) f);
|
||||
}
|
||||
|
||||
int pci_get_driver(struct pci_device *d, char *buf, size_t buflen)
|
||||
{
|
||||
int ret;
|
||||
char sysfs[1024], syml[1024];
|
||||
|
||||
snprintf(sysfs, sizeof(sysfs), "%s/bus/pci/devices/%04x:%02x:%02x.%x/driver", SYSFS_PATH,
|
||||
d->slot.domain, d->slot.bus, d->slot.device, d->slot.function);
|
||||
|
||||
ret = readlink(sysfs, syml, sizeof(syml));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
char *driver = basename(syml);
|
||||
|
||||
strncpy(buf, driver, buflen);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pci_attach_driver(struct pci_device *d, const char *driver)
|
||||
{
|
||||
FILE *f;
|
||||
char fn[256];
|
||||
char fn[1024];
|
||||
|
||||
/* Add new ID to driver */
|
||||
snprintf(fn, sizeof(fn), "%s/bus/pci/drivers/%s/new_id", SYSFS_PATH, driver);
|
||||
|
|
|
@ -229,10 +229,13 @@ int vfio_pci_attach(struct vfio_device *d, struct vfio_container *c, struct pci_
|
|||
if (kernel_module_load("vfio_pci"))
|
||||
error("Failed to load kernel driver: %s", "vfio_pci");
|
||||
|
||||
/* Bind PCI card to vfio-pci driver*/
|
||||
ret = pci_attach_driver(pdev, "vfio-pci");
|
||||
if (ret)
|
||||
error("Failed to attach device to driver");
|
||||
/* Bind PCI card to vfio-pci driver if not already bound */
|
||||
ret = pci_get_driver(pdev, name, sizeof(name));
|
||||
if (ret || strcmp(name, "vfio-pci")) {
|
||||
ret = pci_attach_driver(pdev, "vfio-pci");
|
||||
if (ret)
|
||||
error("Failed to attach device to driver");
|
||||
}
|
||||
|
||||
/* Get IOMMU group of device */
|
||||
int index = pci_get_iommu_group(pdev);
|
||||
|
|
18
fpga/scripts/non_root.sh
Normal file
18
fpga/scripts/non_root.sh
Normal file
|
@ -0,0 +1,18 @@
|
|||
#!/bin/bash
|
||||
|
||||
IOMMU_GROUP=24
|
||||
PCI_BDF="0000:03:00.0"
|
||||
|
||||
modprobe vfio
|
||||
modprobe vfio_pci
|
||||
|
||||
echo "10ee 7022" > /sys/bus/pci/drivers/vfio-pci/new_id
|
||||
echo ${PCI_BDF} > /sys/bus/pci/drivers/vfio-pci/bind
|
||||
|
||||
groupadd -f fpga
|
||||
usermod -G fpga -a svg
|
||||
|
||||
chgrp fpga /dev/vfio/${IOMMU_GROUP}
|
||||
chmod g+rw /dev/vfio/${IOMMU_GROUP}
|
||||
|
||||
|
Loading…
Add table
Reference in a new issue