SR-IOV的全程是single root I/O virtualization。物理的设备被叫做physical function(PV),一个PF 可以虚拟出virtual devices(VF)。当开启VF是,每一个VF都有自己的配置空间,VF 最后的作用就相当一个传统的PCI devices.
如果一个PCIe设备有SR-IOV的功能,则在PF的probe函数中调用pci_enable_sriov(dev, NR_VIRTFN); 就可以是能VF功能。下面是一个例子:
static int dev_probe(struct pci_dev *dev, const struct pci_device_id *id)
{
    pci_enable_sriov(dev, NR_VIRTFN);

...

return 0;
}

static void dev_remove(struct pci_dev *dev)
{
    pci_disable_sriov(dev);

...
}

static int dev_suspend(struct pci_dev *dev, pm_message_t state)
{
    ...

return 0;
}

static int dev_resume(struct pci_dev *dev)
{
    ...

return 0;
}

static void dev_shutdown(struct pci_dev *dev)
{
    ...
}

static int dev_sriov_configure(struct pci_dev *dev, int numvfs)
{
    if (numvfs > 0) {
        ...
        pci_enable_sriov(dev, numvfs);
        ...
        return numvfs;
    }
    if (numvfs == 0) {
        ....
        pci_disable_sriov(dev);
        ...
        return 0;
    }
}

static struct pci_driver dev_driver = {
    .name =        "SR-IOV Physical Function driver",
    .id_table =    dev_id_table,
    .probe =    dev_probe,
    .remove =    dev_remove,
    .suspend =    dev_suspend,
    .resume =    dev_resume,
    .shutdown =    dev_shutdown,
    .sriov_configure = dev_sriov_configure,
};

以82599为例的话ixgbe_probe->ixgbe_enable_sriov->ixgbe_enable_sriov
static struct pci_driver ixgbe_driver = {
    .name     = ixgbe_driver_name,
    .id_table = ixgbe_pci_tbl,
    .probe    = ixgbe_probe,
    .remove   = ixgbe_remove,
#ifdef CONFIG_PM
    .suspend  = ixgbe_suspend,
    .resume   = ixgbe_resume,
#endif
    .shutdown = ixgbe_shutdown,
    .sriov_configure = ixgbe_pci_sriov_configure,
    .err_handler = &ixgbe_err_handler
};

SR-IOV的简单理解相关推荐

  1. android 点击事件消费,Android View事件分发和消费源码简单理解

    Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...

  2. 【转载】Deep learning:十九(RBM简单理解)

    Deep learning:十九(RBM简单理解) 这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我 ...

  3. 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)

    双机热备.集群.负载均衡.SQL故障转移群集简单理解平常,大家常提到几个技术名词:双机热备.集群.负载均衡.SQL故障转移群集.这里,就我的理解,和大家简单探讨下,有不足或错误之处还请各位指出! 这些 ...

  4. 字符串匹配算法Java_如何简单理解字符串匹配算法?

    这篇文章来说说如何简单理解KMP,BM算法.之前看过一些文章说,KMP算法很难理解. 可我并不觉得. 我反而觉得它容易理解.平时我们写java代码的时候, 判断一个字符串是否存在包含另一个字符串都是直 ...

  5. python yield的简单理解

    2019独角兽企业重金招聘Python工程师标准>>> yield是个生成器,它可以使一个方法变成可迭代的方法,每次迭代返回yield后面的值 简单理解: >>>d ...

  6. linun——SElinux的简单理解

    SElinux简单理解 一.什么是SElinux? SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Co ...

  7. git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  8. c语言理解参数,c语言中对可变参数列表的简单理解

    函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现. 可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中.头 ...

  9. QGraphicsScene 的简单理解--关于手册的简要翻译

    文章目录 QGraphicsScene 的简单理解--关于手册的简要翻译 简介: 一般操作: 关于scene's bounding rect: the location of items. scene ...

  10. QTextStream 的简单理解

    文章目录 QTextStream 的简单理解 QTextStream类提供了使用QIODevice读写文本的基本功能. 还有一种通常的用法就是控制台命令的读写 除了QTextStream的构造函数,还 ...

最新文章

  1. 北大毕业典礼上,一男博士求婚女硕士成功,网友直呼:科研人的爱情太甜了!...
  2. 理解 QEMU/KVM 和 Ceph(2):QEMU 的 RBD 块驱动(block driver)
  3. 恶意软件 自动化规则提取工具 yargen 原理分析
  4. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?...
  5. nginx php 防止跨站,Nginx下多网站单独php-fpm进程目录权限防跨站
  6. JVM从入门到放弃——JVM内存模型
  7. #pragma onece
  8. PHP网页截图-网页快照实现
  9. html 有序无序列表
  10. vue添加定位功能_vue 实现Web端的定位功能 获取经纬度
  11. NASM环境搭建+创建虚拟软盘镜像
  12. 安丘妇幼保健院智能照明监控系统的设计与应用-安科瑞耿敏花
  13. 排水管网计算机模拟,基于SWMM的城市合流制排水管网计算机模拟方法.ppt
  14. 到了2020年,技术水平到底需要达到怎样的程度才能成为顶级的阿里P8架构师
  15. 汇哲培训——IT审计师轻叩中国大门--小球撬动大球
  16. GSM模块的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. Liferay porta 清理不需要的Portlet
  18. ecplise-Source Not Found的解决
  19. 迅歌点歌系统服务器过期或不信任怎么办,酷狗音乐验证码失效解决方法 酷狗音乐验证码失效怎么回事...
  20. 嵌入式 - 固件防复制系列【3】GD32读保护解除

热门文章

  1. 亚马逊主图视频时长多少合适
  2. wordpress网站同步微信小程序源码搭建(附源码,亲测)
  3. Python3语法笔记(前篇)
  4. 群晖Synology Drive同步规则中过滤指定文件夹
  5. XechWic工作室,视频会议,p2p开发库
  6. java毕业设计——基于Java+Javamail的邮件收发系统设计与实现(毕业论文+程序源码)——邮件收发系统
  7. 国内在线图表工具,你能说出几个?
  8. docker tag 详解
  9. 基于openEuler linux认证、授权、审计过程
  10. 构建中小企业的信息系统(一):致中小企业管理者