Port-xen archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: PCI pass through Xen 4.1.x and NetBSD 6
Am 22.01.2013 22:04, schrieb Marcus Osdoba:
Unfortunatly I still got an error when starting the hvm domu with xl:
libxl: error: libxl_pci.c:750:libxl_device_pci_reset The kernel doesn't
support reset from sysfs for PCI device 0000:02:00.0
libxl: error: libxl_pci.c:750:libxl_device_pci_reset The kernel doesn't
support reset from sysfs for PCI device 0000:04:00.0
I have found the relevant function in xl and the following posts [0],[1] 
and [2].
Anyway, the patch in patch-libxl_libxl_internal.h leaves /sys/..
enabled ( #define SYSFS_PCI_DEV          "/sys/bus/pci/devices"), which 
is used by the pci reset function in xl.
/sys is not present by default in netbsd.
I didn't find any compatibility /sys in pkgsrc or sys/compat.
Does PCI pass through ought to work without /sys (which might NOT when 
verifying the relevant libxl_device_pci_reset function).
Do I need to wait for 4.2 as proposed in [2]?
Thanks for a short statement,
Marcus
[0] 
http://xen.markmail.org/message/vgkh5duv32ga4ruz?q=%22SYSFS_PCIBACK_DRIVER%22
[1] 
http://xen.1045712.n5.nabble.com/xen-unstable-libxl-support-reset-file-on-sysfs-td2617808.html
[2] http://choon.net/forum/read.php?22,1473076
static int libxl_device_pci_reset(libxl__gc *gc, unsigned int domain, 
unsigned int bus,
                         unsigned int dev, unsigned int func)
{
    libxl_ctx *ctx = libxl__gc_owner(gc);
    char *reset;
    int fd, rc;
    reset = libxl__sprintf(gc, "%s/pciback/do_flr", SYSFS_PCI_DEV);
    fd = open(reset, O_WRONLY);
    if (fd > 0) {
        char *buf = libxl__sprintf(gc, PCI_BDF, domain, bus, dev, func);
        rc = write(fd, buf, strlen(buf));
        if (rc < 0)
            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "write to %s returned 
%d", reset, rc);
        close(fd);
        return rc < 0 ? rc : 0;
    }
    if (errno != ENOENT)
        LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "Failed to access 
pciback path %s", reset);
    reset = libxl__sprintf(gc, "%s/"PCI_BDF"/reset", SYSFS_PCI_DEV, 
domain, bus, dev, func);
    fd = open(reset, O_WRONLY);
    if (fd > 0) {
        rc = write(fd, "1", 1);
        if (rc < 0)
            LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "write to %s 
returned %d", reset, rc);
        close(fd);
        return rc < 0 ? rc : 0;
    }
    if (errno == ENOENT) {
        LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "The kernel doesn't support 
reset from sysfs for PCI device "PCI_BDF, domain, bus, dev, func);
    } else {
        LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "Failed to access reset 
path %s", reset);
    }
    return -1;
}
Home |
Main Index |
Thread Index |
Old Index