CC: [email protected]
CC: [email protected]
TO: Jason Gunthorpe <[email protected]>
CC: Alex Williamson <[email protected]>
CC: Christoph Hellwig <[email protected]>
CC: Cornelia Huck <[email protected]>
CC: "Greg Kroah-Hartman" <[email protected]>
CC: Kirti Wankhede <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   75acfdb6fd922598a408a0d864486aeb167c1a97
commit: af3ab3f9b986cdbc1b97b8a3341ce78851edb0dd vfio/mdev: Remove 
CONFIG_VFIO_MDEV_DEVICE
date:   7 months ago
:::::: branch date: 9 hours ago
:::::: commit date: 7 months ago
config: x86_64-randconfig-m001-20220105 
(https://download.01.org/0day-ci/archive/20220106/[email protected]/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
drivers/gpu/drm/i915/gvt/kvmgt.c:1496 intel_vgpu_ioctl() warn: potential 
spectre issue 'vgpu->cfg_space.bar' [r]
drivers/gpu/drm/i915/gvt/kvmgt.c:1566 intel_vgpu_ioctl() warn: potential 
spectre issue 'vdev->region' [r]

vim +1496 drivers/gpu/drm/i915/gvt/kvmgt.c

659643f7d81432 Jike Song           2016-12-08  1440  
659643f7d81432 Jike Song           2016-12-08  1441  static long 
intel_vgpu_ioctl(struct mdev_device *mdev, unsigned int cmd,
659643f7d81432 Jike Song           2016-12-08  1442                          
unsigned long arg)
659643f7d81432 Jike Song           2016-12-08  1443  {
659643f7d81432 Jike Song           2016-12-08  1444     struct intel_vgpu *vgpu 
= mdev_get_drvdata(mdev);
06d63c48dd30b9 Julian Stecklina    2020-02-17  1445     struct kvmgt_vdev *vdev 
= kvmgt_vdev(vgpu);
659643f7d81432 Jike Song           2016-12-08  1446     unsigned long minsz;
659643f7d81432 Jike Song           2016-12-08  1447  
659643f7d81432 Jike Song           2016-12-08  1448     gvt_dbg_core("vgpu%d 
ioctl, cmd: %d\n", vgpu->id, cmd);
659643f7d81432 Jike Song           2016-12-08  1449  
659643f7d81432 Jike Song           2016-12-08  1450     if (cmd == 
VFIO_DEVICE_GET_INFO) {
659643f7d81432 Jike Song           2016-12-08  1451             struct 
vfio_device_info info;
659643f7d81432 Jike Song           2016-12-08  1452  
659643f7d81432 Jike Song           2016-12-08  1453             minsz = 
offsetofend(struct vfio_device_info, num_irqs);
659643f7d81432 Jike Song           2016-12-08  1454  
659643f7d81432 Jike Song           2016-12-08  1455             if 
(copy_from_user(&info, (void __user *)arg, minsz))
659643f7d81432 Jike Song           2016-12-08  1456                     return 
-EFAULT;
659643f7d81432 Jike Song           2016-12-08  1457  
659643f7d81432 Jike Song           2016-12-08  1458             if (info.argsz 
< minsz)
659643f7d81432 Jike Song           2016-12-08  1459                     return 
-EINVAL;
659643f7d81432 Jike Song           2016-12-08  1460  
659643f7d81432 Jike Song           2016-12-08  1461             info.flags = 
VFIO_DEVICE_FLAGS_PCI;
659643f7d81432 Jike Song           2016-12-08  1462             info.flags |= 
VFIO_DEVICE_FLAGS_RESET;
b851adeac0858c Tina Zhang          2017-11-20  1463             
info.num_regions = VFIO_PCI_NUM_REGIONS +
06d63c48dd30b9 Julian Stecklina    2020-02-17  1464                             
vdev->num_regions;
659643f7d81432 Jike Song           2016-12-08  1465             info.num_irqs = 
VFIO_PCI_NUM_IRQS;
659643f7d81432 Jike Song           2016-12-08  1466  
659643f7d81432 Jike Song           2016-12-08  1467             return 
copy_to_user((void __user *)arg, &info, minsz) ?
659643f7d81432 Jike Song           2016-12-08  1468                     -EFAULT 
: 0;
659643f7d81432 Jike Song           2016-12-08  1469  
659643f7d81432 Jike Song           2016-12-08  1470     } else if (cmd == 
VFIO_DEVICE_GET_REGION_INFO) {
659643f7d81432 Jike Song           2016-12-08  1471             struct 
vfio_region_info info;
659643f7d81432 Jike Song           2016-12-08  1472             struct 
vfio_info_cap caps = { .buf = NULL, .size = 0 };
de5372da605d3b Gustavo A. R. Silva 2018-08-02  1473             unsigned int i;
de5372da605d3b Gustavo A. R. Silva 2018-08-02  1474             int ret;
659643f7d81432 Jike Song           2016-12-08  1475             struct 
vfio_region_info_cap_sparse_mmap *sparse = NULL;
659643f7d81432 Jike Song           2016-12-08  1476             int nr_areas = 
1;
659643f7d81432 Jike Song           2016-12-08  1477             int cap_type_id;
659643f7d81432 Jike Song           2016-12-08  1478  
659643f7d81432 Jike Song           2016-12-08  1479             minsz = 
offsetofend(struct vfio_region_info, offset);
659643f7d81432 Jike Song           2016-12-08  1480  
659643f7d81432 Jike Song           2016-12-08  1481             if 
(copy_from_user(&info, (void __user *)arg, minsz))
659643f7d81432 Jike Song           2016-12-08  1482                     return 
-EFAULT;
659643f7d81432 Jike Song           2016-12-08  1483  
659643f7d81432 Jike Song           2016-12-08  1484             if (info.argsz 
< minsz)
659643f7d81432 Jike Song           2016-12-08  1485                     return 
-EINVAL;
659643f7d81432 Jike Song           2016-12-08  1486  
659643f7d81432 Jike Song           2016-12-08  1487             switch 
(info.index) {
659643f7d81432 Jike Song           2016-12-08  1488             case 
VFIO_PCI_CONFIG_REGION_INDEX:
659643f7d81432 Jike Song           2016-12-08  1489                     
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
02d578e5edd980 Changbin Du         2017-08-23  1490                     
info.size = vgpu->gvt->device_info.cfg_space_size;
659643f7d81432 Jike Song           2016-12-08  1491                     
info.flags = VFIO_REGION_INFO_FLAG_READ |
659643f7d81432 Jike Song           2016-12-08  1492                             
     VFIO_REGION_INFO_FLAG_WRITE;
659643f7d81432 Jike Song           2016-12-08  1493                     break;
659643f7d81432 Jike Song           2016-12-08  1494             case 
VFIO_PCI_BAR0_REGION_INDEX:
659643f7d81432 Jike Song           2016-12-08  1495                     
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
659643f7d81432 Jike Song           2016-12-08 @1496                     
info.size = vgpu->cfg_space.bar[info.index].size;
659643f7d81432 Jike Song           2016-12-08  1497                     if 
(!info.size) {
659643f7d81432 Jike Song           2016-12-08  1498                             
info.flags = 0;
659643f7d81432 Jike Song           2016-12-08  1499                             
break;
659643f7d81432 Jike Song           2016-12-08  1500                     }
659643f7d81432 Jike Song           2016-12-08  1501  
659643f7d81432 Jike Song           2016-12-08  1502                     
info.flags = VFIO_REGION_INFO_FLAG_READ |
659643f7d81432 Jike Song           2016-12-08  1503                             
     VFIO_REGION_INFO_FLAG_WRITE;
659643f7d81432 Jike Song           2016-12-08  1504                     break;
659643f7d81432 Jike Song           2016-12-08  1505             case 
VFIO_PCI_BAR1_REGION_INDEX:
659643f7d81432 Jike Song           2016-12-08  1506                     
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
659643f7d81432 Jike Song           2016-12-08  1507                     
info.size = 0;
659643f7d81432 Jike Song           2016-12-08  1508                     
info.flags = 0;
659643f7d81432 Jike Song           2016-12-08  1509                     break;
659643f7d81432 Jike Song           2016-12-08  1510             case 
VFIO_PCI_BAR2_REGION_INDEX:
659643f7d81432 Jike Song           2016-12-08  1511                     
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
659643f7d81432 Jike Song           2016-12-08  1512                     
info.flags = VFIO_REGION_INFO_FLAG_CAPS |
659643f7d81432 Jike Song           2016-12-08  1513                             
        VFIO_REGION_INFO_FLAG_MMAP |
659643f7d81432 Jike Song           2016-12-08  1514                             
        VFIO_REGION_INFO_FLAG_READ |
659643f7d81432 Jike Song           2016-12-08  1515                             
        VFIO_REGION_INFO_FLAG_WRITE;
659643f7d81432 Jike Song           2016-12-08  1516                     
info.size = gvt_aperture_sz(vgpu->gvt);
659643f7d81432 Jike Song           2016-12-08  1517  
cd3e05836fc665 Gustavo A. R. Silva 2019-05-24  1518                     sparse 
= kzalloc(struct_size(sparse, areas, nr_areas),
cd3e05836fc665 Gustavo A. R. Silva 2019-05-24  1519                             
         GFP_KERNEL);
659643f7d81432 Jike Song           2016-12-08  1520                     if 
(!sparse)
659643f7d81432 Jike Song           2016-12-08  1521                             
return -ENOMEM;
659643f7d81432 Jike Song           2016-12-08  1522  
dda01f787df9f9 Alex Williamson     2017-12-12  1523                     
sparse->header.id = VFIO_REGION_INFO_CAP_SPARSE_MMAP;
dda01f787df9f9 Alex Williamson     2017-12-12  1524                     
sparse->header.version = 1;
659643f7d81432 Jike Song           2016-12-08  1525                     
sparse->nr_areas = nr_areas;
659643f7d81432 Jike Song           2016-12-08  1526                     
cap_type_id = VFIO_REGION_INFO_CAP_SPARSE_MMAP;
659643f7d81432 Jike Song           2016-12-08  1527                     
sparse->areas[0].offset =
659643f7d81432 Jike Song           2016-12-08  1528                             
        PAGE_ALIGN(vgpu_aperture_offset(vgpu));
659643f7d81432 Jike Song           2016-12-08  1529                     
sparse->areas[0].size = vgpu_aperture_sz(vgpu);
659643f7d81432 Jike Song           2016-12-08  1530                     break;
659643f7d81432 Jike Song           2016-12-08  1531  
659643f7d81432 Jike Song           2016-12-08  1532             case 
VFIO_PCI_BAR3_REGION_INDEX ... VFIO_PCI_BAR5_REGION_INDEX:
659643f7d81432 Jike Song           2016-12-08  1533                     
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
659643f7d81432 Jike Song           2016-12-08  1534                     
info.size = 0;
659643f7d81432 Jike Song           2016-12-08  1535                     
info.flags = 0;
072ec93d50fd4c Pei Zhang           2017-12-08  1536  
659643f7d81432 Jike Song           2016-12-08  1537                     
gvt_dbg_core("get region info bar:%d\n", info.index);
659643f7d81432 Jike Song           2016-12-08  1538                     break;
659643f7d81432 Jike Song           2016-12-08  1539  
659643f7d81432 Jike Song           2016-12-08  1540             case 
VFIO_PCI_ROM_REGION_INDEX:
659643f7d81432 Jike Song           2016-12-08  1541             case 
VFIO_PCI_VGA_REGION_INDEX:
072ec93d50fd4c Pei Zhang           2017-12-08  1542                     
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
072ec93d50fd4c Pei Zhang           2017-12-08  1543                     
info.size = 0;
072ec93d50fd4c Pei Zhang           2017-12-08  1544                     
info.flags = 0;
072ec93d50fd4c Pei Zhang           2017-12-08  1545  
659643f7d81432 Jike Song           2016-12-08  1546                     
gvt_dbg_core("get region info index:%d\n", info.index);
659643f7d81432 Jike Song           2016-12-08  1547                     break;
659643f7d81432 Jike Song           2016-12-08  1548             default:
659643f7d81432 Jike Song           2016-12-08  1549                     {
dda01f787df9f9 Alex Williamson     2017-12-12  1550                             
struct vfio_region_info_cap_type cap_type = {
dda01f787df9f9 Alex Williamson     2017-12-12  1551                             
        .header.id = VFIO_REGION_INFO_CAP_TYPE,
dda01f787df9f9 Alex Williamson     2017-12-12  1552                             
        .header.version = 1 };
659643f7d81432 Jike Song           2016-12-08  1553  
659643f7d81432 Jike Song           2016-12-08  1554                             
if (info.index >= VFIO_PCI_NUM_REGIONS +
06d63c48dd30b9 Julian Stecklina    2020-02-17  1555                             
                vdev->num_regions)
659643f7d81432 Jike Song           2016-12-08  1556                             
        return -EINVAL;
de5372da605d3b Gustavo A. R. Silva 2018-08-02  1557                             
info.index =
de5372da605d3b Gustavo A. R. Silva 2018-08-02  1558                             
        array_index_nospec(info.index,
de5372da605d3b Gustavo A. R. Silva 2018-08-02  1559                             
                        VFIO_PCI_NUM_REGIONS +
06d63c48dd30b9 Julian Stecklina    2020-02-17  1560                             
                        vdev->num_regions);
659643f7d81432 Jike Song           2016-12-08  1561  
659643f7d81432 Jike Song           2016-12-08  1562                             
i = info.index - VFIO_PCI_NUM_REGIONS;
659643f7d81432 Jike Song           2016-12-08  1563  
659643f7d81432 Jike Song           2016-12-08  1564                             
info.offset =
659643f7d81432 Jike Song           2016-12-08  1565                             
        VFIO_PCI_INDEX_TO_OFFSET(info.index);
06d63c48dd30b9 Julian Stecklina    2020-02-17 @1566                             
info.size = vdev->region[i].size;
06d63c48dd30b9 Julian Stecklina    2020-02-17  1567                             
info.flags = vdev->region[i].flags;
659643f7d81432 Jike Song           2016-12-08  1568  
06d63c48dd30b9 Julian Stecklina    2020-02-17  1569                             
cap_type.type = vdev->region[i].type;
06d63c48dd30b9 Julian Stecklina    2020-02-17  1570                             
cap_type.subtype = vdev->region[i].subtype;
659643f7d81432 Jike Song           2016-12-08  1571  
659643f7d81432 Jike Song           2016-12-08  1572                             
ret = vfio_info_add_capability(&caps,
dda01f787df9f9 Alex Williamson     2017-12-12  1573                             
                        &cap_type.header,
dda01f787df9f9 Alex Williamson     2017-12-12  1574                             
                        sizeof(cap_type));
659643f7d81432 Jike Song           2016-12-08  1575                             
if (ret)
659643f7d81432 Jike Song           2016-12-08  1576                             
        return ret;
659643f7d81432 Jike Song           2016-12-08  1577                     }
659643f7d81432 Jike Song           2016-12-08  1578             }
659643f7d81432 Jike Song           2016-12-08  1579  
659643f7d81432 Jike Song           2016-12-08  1580             if ((info.flags 
& VFIO_REGION_INFO_FLAG_CAPS) && sparse) {
659643f7d81432 Jike Song           2016-12-08  1581                     switch 
(cap_type_id) {
659643f7d81432 Jike Song           2016-12-08  1582                     case 
VFIO_REGION_INFO_CAP_SPARSE_MMAP:
659643f7d81432 Jike Song           2016-12-08  1583                             
ret = vfio_info_add_capability(&caps,
cd3e05836fc665 Gustavo A. R. Silva 2019-05-24  1584                             
        &sparse->header,
cd3e05836fc665 Gustavo A. R. Silva 2019-05-24  1585                             
        struct_size(sparse, areas,
cd3e05836fc665 Gustavo A. R. Silva 2019-05-24  1586                             
                    sparse->nr_areas));
7590ebb8b45646 Yi Wang             2018-08-08  1587                             
if (ret) {
659643f7d81432 Jike Song           2016-12-08  1588                             
        kfree(sparse);
659643f7d81432 Jike Song           2016-12-08  1589                             
        return ret;
7590ebb8b45646 Yi Wang             2018-08-08  1590                             
}
659643f7d81432 Jike Song           2016-12-08  1591                             
break;
659643f7d81432 Jike Song           2016-12-08  1592                     default:
7590ebb8b45646 Yi Wang             2018-08-08  1593                             
kfree(sparse);
659643f7d81432 Jike Song           2016-12-08  1594                             
return -EINVAL;
659643f7d81432 Jike Song           2016-12-08  1595                     }
659643f7d81432 Jike Song           2016-12-08  1596             }
659643f7d81432 Jike Song           2016-12-08  1597  
659643f7d81432 Jike Song           2016-12-08  1598             if (caps.size) {
b851adeac0858c Tina Zhang          2017-11-20  1599                     
info.flags |= VFIO_REGION_INFO_FLAG_CAPS;
659643f7d81432 Jike Song           2016-12-08  1600                     if 
(info.argsz < sizeof(info) + caps.size) {
659643f7d81432 Jike Song           2016-12-08  1601                             
info.argsz = sizeof(info) + caps.size;
659643f7d81432 Jike Song           2016-12-08  1602                             
info.cap_offset = 0;
659643f7d81432 Jike Song           2016-12-08  1603                     } else {
659643f7d81432 Jike Song           2016-12-08  1604                             
vfio_info_cap_shift(&caps, sizeof(info));
659643f7d81432 Jike Song           2016-12-08  1605                             
if (copy_to_user((void __user *)arg +
659643f7d81432 Jike Song           2016-12-08  1606                             
                  sizeof(info), caps.buf,
659643f7d81432 Jike Song           2016-12-08  1607                             
                  caps.size)) {
659643f7d81432 Jike Song           2016-12-08  1608                             
        kfree(caps.buf);
7590ebb8b45646 Yi Wang             2018-08-08  1609                             
        kfree(sparse);
659643f7d81432 Jike Song           2016-12-08  1610                             
        return -EFAULT;
659643f7d81432 Jike Song           2016-12-08  1611                             
}
659643f7d81432 Jike Song           2016-12-08  1612                             
info.cap_offset = sizeof(info);
659643f7d81432 Jike Song           2016-12-08  1613                     }
659643f7d81432 Jike Song           2016-12-08  1614  
659643f7d81432 Jike Song           2016-12-08  1615                     
kfree(caps.buf);
659643f7d81432 Jike Song           2016-12-08  1616             }
659643f7d81432 Jike Song           2016-12-08  1617  
7590ebb8b45646 Yi Wang             2018-08-08  1618             kfree(sparse);
659643f7d81432 Jike Song           2016-12-08  1619             return 
copy_to_user((void __user *)arg, &info, minsz) ?
659643f7d81432 Jike Song           2016-12-08  1620                     -EFAULT 
: 0;
659643f7d81432 Jike Song           2016-12-08  1621     } else if (cmd == 
VFIO_DEVICE_GET_IRQ_INFO) {
659643f7d81432 Jike Song           2016-12-08  1622             struct 
vfio_irq_info info;
659643f7d81432 Jike Song           2016-12-08  1623  
659643f7d81432 Jike Song           2016-12-08  1624             minsz = 
offsetofend(struct vfio_irq_info, count);
659643f7d81432 Jike Song           2016-12-08  1625  
659643f7d81432 Jike Song           2016-12-08  1626             if 
(copy_from_user(&info, (void __user *)arg, minsz))
659643f7d81432 Jike Song           2016-12-08  1627                     return 
-EFAULT;
659643f7d81432 Jike Song           2016-12-08  1628  
659643f7d81432 Jike Song           2016-12-08  1629             if (info.argsz 
< minsz || info.index >= VFIO_PCI_NUM_IRQS)
659643f7d81432 Jike Song           2016-12-08  1630                     return 
-EINVAL;
659643f7d81432 Jike Song           2016-12-08  1631  
659643f7d81432 Jike Song           2016-12-08  1632             switch 
(info.index) {
659643f7d81432 Jike Song           2016-12-08  1633             case 
VFIO_PCI_INTX_IRQ_INDEX:
659643f7d81432 Jike Song           2016-12-08  1634             case 
VFIO_PCI_MSI_IRQ_INDEX:
659643f7d81432 Jike Song           2016-12-08  1635                     break;
659643f7d81432 Jike Song           2016-12-08  1636             default:
659643f7d81432 Jike Song           2016-12-08  1637                     return 
-EINVAL;
659643f7d81432 Jike Song           2016-12-08  1638             }
659643f7d81432 Jike Song           2016-12-08  1639  
659643f7d81432 Jike Song           2016-12-08  1640             info.flags = 
VFIO_IRQ_INFO_EVENTFD;
659643f7d81432 Jike Song           2016-12-08  1641  
659643f7d81432 Jike Song           2016-12-08  1642             info.count = 
intel_vgpu_get_irq_count(vgpu, info.index);
659643f7d81432 Jike Song           2016-12-08  1643  
659643f7d81432 Jike Song           2016-12-08  1644             if (info.index 
== VFIO_PCI_INTX_IRQ_INDEX)
659643f7d81432 Jike Song           2016-12-08  1645                     
info.flags |= (VFIO_IRQ_INFO_MASKABLE |
659643f7d81432 Jike Song           2016-12-08  1646                             
       VFIO_IRQ_INFO_AUTOMASKED);
659643f7d81432 Jike Song           2016-12-08  1647             else
659643f7d81432 Jike Song           2016-12-08  1648                     
info.flags |= VFIO_IRQ_INFO_NORESIZE;
659643f7d81432 Jike Song           2016-12-08  1649  
659643f7d81432 Jike Song           2016-12-08  1650             return 
copy_to_user((void __user *)arg, &info, minsz) ?
659643f7d81432 Jike Song           2016-12-08  1651                     -EFAULT 
: 0;
659643f7d81432 Jike Song           2016-12-08  1652     } else if (cmd == 
VFIO_DEVICE_SET_IRQS) {
659643f7d81432 Jike Song           2016-12-08  1653             struct 
vfio_irq_set hdr;
659643f7d81432 Jike Song           2016-12-08  1654             u8 *data = NULL;
659643f7d81432 Jike Song           2016-12-08  1655             int ret = 0;
659643f7d81432 Jike Song           2016-12-08  1656             size_t 
data_size = 0;
659643f7d81432 Jike Song           2016-12-08  1657  
659643f7d81432 Jike Song           2016-12-08  1658             minsz = 
offsetofend(struct vfio_irq_set, count);
659643f7d81432 Jike Song           2016-12-08  1659  
659643f7d81432 Jike Song           2016-12-08  1660             if 
(copy_from_user(&hdr, (void __user *)arg, minsz))
659643f7d81432 Jike Song           2016-12-08  1661                     return 
-EFAULT;
659643f7d81432 Jike Song           2016-12-08  1662  
659643f7d81432 Jike Song           2016-12-08  1663             if (!(hdr.flags 
& VFIO_IRQ_SET_DATA_NONE)) {
659643f7d81432 Jike Song           2016-12-08  1664                     int max 
= intel_vgpu_get_irq_count(vgpu, hdr.index);
659643f7d81432 Jike Song           2016-12-08  1665  
659643f7d81432 Jike Song           2016-12-08  1666                     ret = 
vfio_set_irqs_validate_and_prepare(&hdr, max,
659643f7d81432 Jike Song           2016-12-08  1667                             
                VFIO_PCI_NUM_IRQS, &data_size);
659643f7d81432 Jike Song           2016-12-08  1668                     if 
(ret) {
695fbc08d80f93 Tina Zhang          2017-03-10  1669                             
gvt_vgpu_err("intel:vfio_set_irqs_validate_and_prepare failed\n");
659643f7d81432 Jike Song           2016-12-08  1670                             
return -EINVAL;
659643f7d81432 Jike Song           2016-12-08  1671                     }
659643f7d81432 Jike Song           2016-12-08  1672                     if 
(data_size) {
659643f7d81432 Jike Song           2016-12-08  1673                             
data = memdup_user((void __user *)(arg + minsz),
659643f7d81432 Jike Song           2016-12-08  1674                             
                   data_size);
659643f7d81432 Jike Song           2016-12-08  1675                             
if (IS_ERR(data))
659643f7d81432 Jike Song           2016-12-08  1676                             
        return PTR_ERR(data);
659643f7d81432 Jike Song           2016-12-08  1677                     }
659643f7d81432 Jike Song           2016-12-08  1678             }
659643f7d81432 Jike Song           2016-12-08  1679  
659643f7d81432 Jike Song           2016-12-08  1680             ret = 
intel_vgpu_set_irqs(vgpu, hdr.flags, hdr.index,
659643f7d81432 Jike Song           2016-12-08  1681                             
        hdr.start, hdr.count, data);
659643f7d81432 Jike Song           2016-12-08  1682             kfree(data);
659643f7d81432 Jike Song           2016-12-08  1683  
659643f7d81432 Jike Song           2016-12-08  1684             return ret;
659643f7d81432 Jike Song           2016-12-08  1685     } else if (cmd == 
VFIO_DEVICE_RESET) {
659643f7d81432 Jike Song           2016-12-08  1686             
intel_gvt_ops->vgpu_reset(vgpu);
659643f7d81432 Jike Song           2016-12-08  1687             return 0;
e546e281d33d1f Tina Zhang          2017-11-23  1688     } else if (cmd == 
VFIO_DEVICE_QUERY_GFX_PLANE) {
e546e281d33d1f Tina Zhang          2017-11-23  1689             struct 
vfio_device_gfx_plane_info dmabuf;
e546e281d33d1f Tina Zhang          2017-11-23  1690             int ret = 0;
e546e281d33d1f Tina Zhang          2017-11-23  1691  
e546e281d33d1f Tina Zhang          2017-11-23  1692             minsz = 
offsetofend(struct vfio_device_gfx_plane_info,
e546e281d33d1f Tina Zhang          2017-11-23  1693                             
    dmabuf_id);
e546e281d33d1f Tina Zhang          2017-11-23  1694             if 
(copy_from_user(&dmabuf, (void __user *)arg, minsz))
e546e281d33d1f Tina Zhang          2017-11-23  1695                     return 
-EFAULT;
e546e281d33d1f Tina Zhang          2017-11-23  1696             if 
(dmabuf.argsz < minsz)
e546e281d33d1f Tina Zhang          2017-11-23  1697                     return 
-EINVAL;
e546e281d33d1f Tina Zhang          2017-11-23  1698  
e546e281d33d1f Tina Zhang          2017-11-23  1699             ret = 
intel_gvt_ops->vgpu_query_plane(vgpu, &dmabuf);
e546e281d33d1f Tina Zhang          2017-11-23  1700             if (ret != 0)
e546e281d33d1f Tina Zhang          2017-11-23  1701                     return 
ret;
e546e281d33d1f Tina Zhang          2017-11-23  1702  
e546e281d33d1f Tina Zhang          2017-11-23  1703             return 
copy_to_user((void __user *)arg, &dmabuf, minsz) ?
e546e281d33d1f Tina Zhang          2017-11-23  1704                             
                                -EFAULT : 0;
e546e281d33d1f Tina Zhang          2017-11-23  1705     } else if (cmd == 
VFIO_DEVICE_GET_GFX_DMABUF) {
e546e281d33d1f Tina Zhang          2017-11-23  1706             __u32 dmabuf_id;
e546e281d33d1f Tina Zhang          2017-11-23  1707             __s32 dmabuf_fd;
e546e281d33d1f Tina Zhang          2017-11-23  1708  
e546e281d33d1f Tina Zhang          2017-11-23  1709             if 
(get_user(dmabuf_id, (__u32 __user *)arg))
e546e281d33d1f Tina Zhang          2017-11-23  1710                     return 
-EFAULT;
e546e281d33d1f Tina Zhang          2017-11-23  1711  
e546e281d33d1f Tina Zhang          2017-11-23  1712             dmabuf_fd = 
intel_gvt_ops->vgpu_get_dmabuf(vgpu, dmabuf_id);
e546e281d33d1f Tina Zhang          2017-11-23  1713             return 
dmabuf_fd;
e546e281d33d1f Tina Zhang          2017-11-23  1714  
659643f7d81432 Jike Song           2016-12-08  1715     }
659643f7d81432 Jike Song           2016-12-08  1716  
9f591ae60e1be0 Gerd Hoffmann       2018-03-21  1717     return -ENOTTY;
659643f7d81432 Jike Song           2016-12-08  1718  }
659643f7d81432 Jike Song           2016-12-08  1719  

:::::: The code at line 1496 was first introduced by commit
:::::: 659643f7d81432189c2c87230e2feee4c75c14c1 drm/i915/gvt/kvmgt: add 
vfio/mdev support to KVMGT

:::::: TO: Jike Song <[email protected]>
:::::: CC: Zhenyu Wang <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to