首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在vfio中由ioctl (VFIO_DEVICE_GET_REGION_INFO)返回的"num_regions“是什么?

在vfio中由ioctl (VFIO_DEVICE_GET_REGION_INFO)返回的"num_regions“是什么?
EN

Stack Overflow用户
提问于 2015-10-22 13:49:35
回答 1查看 1.1K关注 0票数 0

我正在努力理解vfio如何在pci上工作。我读过https://www.kernel.org/doc/Documentation/vfio.txt,我正在写一个基于它的测试。在某种程度上,我的代码如下所示:

代码语言:javascript
复制
/* Get pci device information (number of regions and interrupts...) */
ret = ioctl(vfio_dev_fd, VFIO_DEVICE_GET_INFO, &device_info);
if (ret) {
        printf("  %s cannot get device info, "
                        "error %i (%s)\n", pci_addr, errno, strerror(errno));
        close(vfio_dev_fd);
        return -1;
}
printf ("found %d regions in the device\n", device_info.num_regions);

我不明白的是,最后的打印结果显示了9个区域!看看我的PCI设备的配置空间,我可以看到:

代码语言:javascript
复制
cat /sys/bus/pci/devices/0000\:06\:00.0/config | hd
00000000  e4 14 81 16 00 04 10 00  10 00 00 02 10 00 00 00  |................|
00000010  04 00 de f3 00 00 00 00  04 00 df f3 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 28 10 6e 02  |............(.n.|
00000030  00 00 00 00 48 00 00 00  00 00 00 00 0a 01 00 00  |....H...........|
00000040

我是PCI的新手,但我对此的解释是,这个董事会上只有两个BARSs (0和2)。我认为最大的区域数(酒吧?)在PCI上为6。

不过,有一点迹象表明我误解了什么:上面提到的内核文档指出:

对于PCI设备,配置空间是一个区域。

所以我要找的董事会有三个区域.但上面写着9..。pci_vfio的PCI区域是什么?它们是如何编号和访问的?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-20 12:45:07

来自vfio.h:

代码语言:javascript
复制
/*
 * The VFIO-PCI bus driver makes use of the following fixed region and
 * IRQ index mapping.  Unimplemented regions return a size of zero.
 * Unimplemented IRQ types return a count of zero.
 */

enum {
    VFIO_PCI_BAR0_REGION_INDEX,
    VFIO_PCI_BAR1_REGION_INDEX,
    VFIO_PCI_BAR2_REGION_INDEX,
    VFIO_PCI_BAR3_REGION_INDEX,
    VFIO_PCI_BAR4_REGION_INDEX,
    VFIO_PCI_BAR5_REGION_INDEX,
    VFIO_PCI_ROM_REGION_INDEX,
    VFIO_PCI_CONFIG_REGION_INDEX,
    /*
     * Expose VGA regions defined for PCI base class 03, subclass 00.
     * This includes I/O port ranges 0x3b0 to 0x3bb and 0x3c0 to 0x3df
     * as well as the MMIO range 0xa0000 to 0xbffff.  Each implemented
     * range is found at it's identity mapped offset from the region
     * offset, for example 0x3b0 is region_info.offset + 0x3b0.  Areas
     * between described ranges are unimplemented.
     */
    VFIO_PCI_VGA_REGION_INDEX,
    VFIO_PCI_NUM_REGIONS
};

因此,这些附加区域可以提供对配置空间、选项ROM和特定于VGA的I/O的访问(端口和遗留框架缓冲区0xa0000.0 0xbffff窗口)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33282661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档