CC: [email protected]
CC: [email protected]
TO: Julian Stecklina <[email protected]>
CC: Zhenyu Wang <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   dea8dcf2a9fa8cc540136a6cd885c3beece16ec3
commit: 06d63c48dd30b968d2a56e3ece02d6b635cf369a drm/i915/gvt: make gvt 
oblivious of kvmgt data structures
date:   10 months ago
:::::: branch date: 14 hours ago
:::::: commit date: 10 months ago
config: x86_64-randconfig-m031-20201229 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 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]>

New smatch warnings:
drivers/gpu/drm/i915/gvt/kvmgt.c:1447 intel_vgpu_ioctl() warn: potential 
spectre issue 'vdev->region' [r]

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

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

659643f7d814321 Jike Song           2016-12-08  1321  
659643f7d814321 Jike Song           2016-12-08  1322  static long 
intel_vgpu_ioctl(struct mdev_device *mdev, unsigned int cmd,
659643f7d814321 Jike Song           2016-12-08  1323                         
unsigned long arg)
659643f7d814321 Jike Song           2016-12-08  1324  {
659643f7d814321 Jike Song           2016-12-08  1325    struct intel_vgpu *vgpu 
= mdev_get_drvdata(mdev);
06d63c48dd30b96 Julian Stecklina    2020-02-17  1326    struct kvmgt_vdev *vdev 
= kvmgt_vdev(vgpu);
659643f7d814321 Jike Song           2016-12-08  1327    unsigned long minsz;
659643f7d814321 Jike Song           2016-12-08  1328  
659643f7d814321 Jike Song           2016-12-08  1329    gvt_dbg_core("vgpu%d 
ioctl, cmd: %d\n", vgpu->id, cmd);
659643f7d814321 Jike Song           2016-12-08  1330  
659643f7d814321 Jike Song           2016-12-08  1331    if (cmd == 
VFIO_DEVICE_GET_INFO) {
659643f7d814321 Jike Song           2016-12-08  1332            struct 
vfio_device_info info;
659643f7d814321 Jike Song           2016-12-08  1333  
659643f7d814321 Jike Song           2016-12-08  1334            minsz = 
offsetofend(struct vfio_device_info, num_irqs);
659643f7d814321 Jike Song           2016-12-08  1335  
659643f7d814321 Jike Song           2016-12-08  1336            if 
(copy_from_user(&info, (void __user *)arg, minsz))
659643f7d814321 Jike Song           2016-12-08  1337                    return 
-EFAULT;
659643f7d814321 Jike Song           2016-12-08  1338  
659643f7d814321 Jike Song           2016-12-08  1339            if (info.argsz 
< minsz)
659643f7d814321 Jike Song           2016-12-08  1340                    return 
-EINVAL;
659643f7d814321 Jike Song           2016-12-08  1341  
659643f7d814321 Jike Song           2016-12-08  1342            info.flags = 
VFIO_DEVICE_FLAGS_PCI;
659643f7d814321 Jike Song           2016-12-08  1343            info.flags |= 
VFIO_DEVICE_FLAGS_RESET;
b851adeac0858c7 Tina Zhang          2017-11-20  1344            
info.num_regions = VFIO_PCI_NUM_REGIONS +
06d63c48dd30b96 Julian Stecklina    2020-02-17  1345                            
vdev->num_regions;
659643f7d814321 Jike Song           2016-12-08  1346            info.num_irqs = 
VFIO_PCI_NUM_IRQS;
659643f7d814321 Jike Song           2016-12-08  1347  
659643f7d814321 Jike Song           2016-12-08  1348            return 
copy_to_user((void __user *)arg, &info, minsz) ?
659643f7d814321 Jike Song           2016-12-08  1349                    -EFAULT 
: 0;
659643f7d814321 Jike Song           2016-12-08  1350  
659643f7d814321 Jike Song           2016-12-08  1351    } else if (cmd == 
VFIO_DEVICE_GET_REGION_INFO) {
659643f7d814321 Jike Song           2016-12-08  1352            struct 
vfio_region_info info;
659643f7d814321 Jike Song           2016-12-08  1353            struct 
vfio_info_cap caps = { .buf = NULL, .size = 0 };
de5372da605d3bc Gustavo A. R. Silva 2018-08-02  1354            unsigned int i;
de5372da605d3bc Gustavo A. R. Silva 2018-08-02  1355            int ret;
659643f7d814321 Jike Song           2016-12-08  1356            struct 
vfio_region_info_cap_sparse_mmap *sparse = NULL;
659643f7d814321 Jike Song           2016-12-08  1357            int nr_areas = 
1;
659643f7d814321 Jike Song           2016-12-08  1358            int cap_type_id;
659643f7d814321 Jike Song           2016-12-08  1359  
659643f7d814321 Jike Song           2016-12-08  1360            minsz = 
offsetofend(struct vfio_region_info, offset);
659643f7d814321 Jike Song           2016-12-08  1361  
659643f7d814321 Jike Song           2016-12-08  1362            if 
(copy_from_user(&info, (void __user *)arg, minsz))
659643f7d814321 Jike Song           2016-12-08  1363                    return 
-EFAULT;
659643f7d814321 Jike Song           2016-12-08  1364  
659643f7d814321 Jike Song           2016-12-08  1365            if (info.argsz 
< minsz)
659643f7d814321 Jike Song           2016-12-08  1366                    return 
-EINVAL;
659643f7d814321 Jike Song           2016-12-08  1367  
659643f7d814321 Jike Song           2016-12-08  1368            switch 
(info.index) {
659643f7d814321 Jike Song           2016-12-08  1369            case 
VFIO_PCI_CONFIG_REGION_INDEX:
659643f7d814321 Jike Song           2016-12-08  1370                    
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
02d578e5edd980e Changbin Du         2017-08-23  1371                    
info.size = vgpu->gvt->device_info.cfg_space_size;
659643f7d814321 Jike Song           2016-12-08  1372                    
info.flags = VFIO_REGION_INFO_FLAG_READ |
659643f7d814321 Jike Song           2016-12-08  1373                            
     VFIO_REGION_INFO_FLAG_WRITE;
659643f7d814321 Jike Song           2016-12-08  1374                    break;
659643f7d814321 Jike Song           2016-12-08  1375            case 
VFIO_PCI_BAR0_REGION_INDEX:
659643f7d814321 Jike Song           2016-12-08  1376                    
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
659643f7d814321 Jike Song           2016-12-08  1377                    
info.size = vgpu->cfg_space.bar[info.index].size;
659643f7d814321 Jike Song           2016-12-08  1378                    if 
(!info.size) {
659643f7d814321 Jike Song           2016-12-08  1379                            
info.flags = 0;
659643f7d814321 Jike Song           2016-12-08  1380                            
break;
659643f7d814321 Jike Song           2016-12-08  1381                    }
659643f7d814321 Jike Song           2016-12-08  1382  
659643f7d814321 Jike Song           2016-12-08  1383                    
info.flags = VFIO_REGION_INFO_FLAG_READ |
659643f7d814321 Jike Song           2016-12-08  1384                            
     VFIO_REGION_INFO_FLAG_WRITE;
659643f7d814321 Jike Song           2016-12-08  1385                    break;
659643f7d814321 Jike Song           2016-12-08  1386            case 
VFIO_PCI_BAR1_REGION_INDEX:
659643f7d814321 Jike Song           2016-12-08  1387                    
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
659643f7d814321 Jike Song           2016-12-08  1388                    
info.size = 0;
659643f7d814321 Jike Song           2016-12-08  1389                    
info.flags = 0;
659643f7d814321 Jike Song           2016-12-08  1390                    break;
659643f7d814321 Jike Song           2016-12-08  1391            case 
VFIO_PCI_BAR2_REGION_INDEX:
659643f7d814321 Jike Song           2016-12-08  1392                    
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
659643f7d814321 Jike Song           2016-12-08  1393                    
info.flags = VFIO_REGION_INFO_FLAG_CAPS |
659643f7d814321 Jike Song           2016-12-08  1394                            
        VFIO_REGION_INFO_FLAG_MMAP |
659643f7d814321 Jike Song           2016-12-08  1395                            
        VFIO_REGION_INFO_FLAG_READ |
659643f7d814321 Jike Song           2016-12-08  1396                            
        VFIO_REGION_INFO_FLAG_WRITE;
659643f7d814321 Jike Song           2016-12-08  1397                    
info.size = gvt_aperture_sz(vgpu->gvt);
659643f7d814321 Jike Song           2016-12-08  1398  
cd3e05836fc6653 Gustavo A. R. Silva 2019-05-24  1399                    sparse 
= kzalloc(struct_size(sparse, areas, nr_areas),
cd3e05836fc6653 Gustavo A. R. Silva 2019-05-24  1400                            
         GFP_KERNEL);
659643f7d814321 Jike Song           2016-12-08  1401                    if 
(!sparse)
659643f7d814321 Jike Song           2016-12-08  1402                            
return -ENOMEM;
659643f7d814321 Jike Song           2016-12-08  1403  
dda01f787df9f9e Alex Williamson     2017-12-12  1404                    
sparse->header.id = VFIO_REGION_INFO_CAP_SPARSE_MMAP;
dda01f787df9f9e Alex Williamson     2017-12-12  1405                    
sparse->header.version = 1;
659643f7d814321 Jike Song           2016-12-08  1406                    
sparse->nr_areas = nr_areas;
659643f7d814321 Jike Song           2016-12-08  1407                    
cap_type_id = VFIO_REGION_INFO_CAP_SPARSE_MMAP;
659643f7d814321 Jike Song           2016-12-08  1408                    
sparse->areas[0].offset =
659643f7d814321 Jike Song           2016-12-08  1409                            
        PAGE_ALIGN(vgpu_aperture_offset(vgpu));
659643f7d814321 Jike Song           2016-12-08  1410                    
sparse->areas[0].size = vgpu_aperture_sz(vgpu);
659643f7d814321 Jike Song           2016-12-08  1411                    break;
659643f7d814321 Jike Song           2016-12-08  1412  
659643f7d814321 Jike Song           2016-12-08  1413            case 
VFIO_PCI_BAR3_REGION_INDEX ... VFIO_PCI_BAR5_REGION_INDEX:
659643f7d814321 Jike Song           2016-12-08  1414                    
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
659643f7d814321 Jike Song           2016-12-08  1415                    
info.size = 0;
659643f7d814321 Jike Song           2016-12-08  1416                    
info.flags = 0;
072ec93d50fd4c4 Pei Zhang           2017-12-08  1417  
659643f7d814321 Jike Song           2016-12-08  1418                    
gvt_dbg_core("get region info bar:%d\n", info.index);
659643f7d814321 Jike Song           2016-12-08  1419                    break;
659643f7d814321 Jike Song           2016-12-08  1420  
659643f7d814321 Jike Song           2016-12-08  1421            case 
VFIO_PCI_ROM_REGION_INDEX:
659643f7d814321 Jike Song           2016-12-08  1422            case 
VFIO_PCI_VGA_REGION_INDEX:
072ec93d50fd4c4 Pei Zhang           2017-12-08  1423                    
info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index);
072ec93d50fd4c4 Pei Zhang           2017-12-08  1424                    
info.size = 0;
072ec93d50fd4c4 Pei Zhang           2017-12-08  1425                    
info.flags = 0;
072ec93d50fd4c4 Pei Zhang           2017-12-08  1426  
659643f7d814321 Jike Song           2016-12-08  1427                    
gvt_dbg_core("get region info index:%d\n", info.index);
659643f7d814321 Jike Song           2016-12-08  1428                    break;
659643f7d814321 Jike Song           2016-12-08  1429            default:
659643f7d814321 Jike Song           2016-12-08  1430                    {
dda01f787df9f9e Alex Williamson     2017-12-12  1431                            
struct vfio_region_info_cap_type cap_type = {
dda01f787df9f9e Alex Williamson     2017-12-12  1432                            
        .header.id = VFIO_REGION_INFO_CAP_TYPE,
dda01f787df9f9e Alex Williamson     2017-12-12  1433                            
        .header.version = 1 };
659643f7d814321 Jike Song           2016-12-08  1434  
659643f7d814321 Jike Song           2016-12-08  1435                            
if (info.index >= VFIO_PCI_NUM_REGIONS +
06d63c48dd30b96 Julian Stecklina    2020-02-17  1436                            
                vdev->num_regions)
659643f7d814321 Jike Song           2016-12-08  1437                            
        return -EINVAL;
de5372da605d3bc Gustavo A. R. Silva 2018-08-02  1438                            
info.index =
de5372da605d3bc Gustavo A. R. Silva 2018-08-02  1439                            
        array_index_nospec(info.index,
de5372da605d3bc Gustavo A. R. Silva 2018-08-02  1440                            
                        VFIO_PCI_NUM_REGIONS +
06d63c48dd30b96 Julian Stecklina    2020-02-17  1441                            
                        vdev->num_regions);
659643f7d814321 Jike Song           2016-12-08  1442  
659643f7d814321 Jike Song           2016-12-08  1443                            
i = info.index - VFIO_PCI_NUM_REGIONS;
659643f7d814321 Jike Song           2016-12-08  1444  
659643f7d814321 Jike Song           2016-12-08  1445                            
info.offset =
659643f7d814321 Jike Song           2016-12-08  1446                            
        VFIO_PCI_INDEX_TO_OFFSET(info.index);
06d63c48dd30b96 Julian Stecklina    2020-02-17 @1447                            
info.size = vdev->region[i].size;
06d63c48dd30b96 Julian Stecklina    2020-02-17  1448                            
info.flags = vdev->region[i].flags;
659643f7d814321 Jike Song           2016-12-08  1449  
06d63c48dd30b96 Julian Stecklina    2020-02-17  1450                            
cap_type.type = vdev->region[i].type;
06d63c48dd30b96 Julian Stecklina    2020-02-17  1451                            
cap_type.subtype = vdev->region[i].subtype;
659643f7d814321 Jike Song           2016-12-08  1452  
659643f7d814321 Jike Song           2016-12-08  1453                            
ret = vfio_info_add_capability(&caps,
dda01f787df9f9e Alex Williamson     2017-12-12  1454                            
                        &cap_type.header,
dda01f787df9f9e Alex Williamson     2017-12-12  1455                            
                        sizeof(cap_type));
659643f7d814321 Jike Song           2016-12-08  1456                            
if (ret)
659643f7d814321 Jike Song           2016-12-08  1457                            
        return ret;
659643f7d814321 Jike Song           2016-12-08  1458                    }
659643f7d814321 Jike Song           2016-12-08  1459            }
659643f7d814321 Jike Song           2016-12-08  1460  
659643f7d814321 Jike Song           2016-12-08  1461            if ((info.flags 
& VFIO_REGION_INFO_FLAG_CAPS) && sparse) {
659643f7d814321 Jike Song           2016-12-08  1462                    switch 
(cap_type_id) {
659643f7d814321 Jike Song           2016-12-08  1463                    case 
VFIO_REGION_INFO_CAP_SPARSE_MMAP:
659643f7d814321 Jike Song           2016-12-08  1464                            
ret = vfio_info_add_capability(&caps,
cd3e05836fc6653 Gustavo A. R. Silva 2019-05-24  1465                            
        &sparse->header,
cd3e05836fc6653 Gustavo A. R. Silva 2019-05-24  1466                            
        struct_size(sparse, areas,
cd3e05836fc6653 Gustavo A. R. Silva 2019-05-24  1467                            
                    sparse->nr_areas));
7590ebb8b456464 Yi Wang             2018-08-08  1468                            
if (ret) {
659643f7d814321 Jike Song           2016-12-08  1469                            
        kfree(sparse);
659643f7d814321 Jike Song           2016-12-08  1470                            
        return ret;
7590ebb8b456464 Yi Wang             2018-08-08  1471                            
}
659643f7d814321 Jike Song           2016-12-08  1472                            
break;
659643f7d814321 Jike Song           2016-12-08  1473                    default:
7590ebb8b456464 Yi Wang             2018-08-08  1474                            
kfree(sparse);
659643f7d814321 Jike Song           2016-12-08  1475                            
return -EINVAL;
659643f7d814321 Jike Song           2016-12-08  1476                    }
659643f7d814321 Jike Song           2016-12-08  1477            }
659643f7d814321 Jike Song           2016-12-08  1478  
659643f7d814321 Jike Song           2016-12-08  1479            if (caps.size) {
b851adeac0858c7 Tina Zhang          2017-11-20  1480                    
info.flags |= VFIO_REGION_INFO_FLAG_CAPS;
659643f7d814321 Jike Song           2016-12-08  1481                    if 
(info.argsz < sizeof(info) + caps.size) {
659643f7d814321 Jike Song           2016-12-08  1482                            
info.argsz = sizeof(info) + caps.size;
659643f7d814321 Jike Song           2016-12-08  1483                            
info.cap_offset = 0;
659643f7d814321 Jike Song           2016-12-08  1484                    } else {
659643f7d814321 Jike Song           2016-12-08  1485                            
vfio_info_cap_shift(&caps, sizeof(info));
659643f7d814321 Jike Song           2016-12-08  1486                            
if (copy_to_user((void __user *)arg +
659643f7d814321 Jike Song           2016-12-08  1487                            
                  sizeof(info), caps.buf,
659643f7d814321 Jike Song           2016-12-08  1488                            
                  caps.size)) {
659643f7d814321 Jike Song           2016-12-08  1489                            
        kfree(caps.buf);
7590ebb8b456464 Yi Wang             2018-08-08  1490                            
        kfree(sparse);
659643f7d814321 Jike Song           2016-12-08  1491                            
        return -EFAULT;
659643f7d814321 Jike Song           2016-12-08  1492                            
}
659643f7d814321 Jike Song           2016-12-08  1493                            
info.cap_offset = sizeof(info);
659643f7d814321 Jike Song           2016-12-08  1494                    }
659643f7d814321 Jike Song           2016-12-08  1495  
659643f7d814321 Jike Song           2016-12-08  1496                    
kfree(caps.buf);
659643f7d814321 Jike Song           2016-12-08  1497            }
659643f7d814321 Jike Song           2016-12-08  1498  
7590ebb8b456464 Yi Wang             2018-08-08  1499            kfree(sparse);
659643f7d814321 Jike Song           2016-12-08  1500            return 
copy_to_user((void __user *)arg, &info, minsz) ?
659643f7d814321 Jike Song           2016-12-08  1501                    -EFAULT 
: 0;
659643f7d814321 Jike Song           2016-12-08  1502    } else if (cmd == 
VFIO_DEVICE_GET_IRQ_INFO) {
659643f7d814321 Jike Song           2016-12-08  1503            struct 
vfio_irq_info info;
659643f7d814321 Jike Song           2016-12-08  1504  
659643f7d814321 Jike Song           2016-12-08  1505            minsz = 
offsetofend(struct vfio_irq_info, count);
659643f7d814321 Jike Song           2016-12-08  1506  
659643f7d814321 Jike Song           2016-12-08  1507            if 
(copy_from_user(&info, (void __user *)arg, minsz))
659643f7d814321 Jike Song           2016-12-08  1508                    return 
-EFAULT;
659643f7d814321 Jike Song           2016-12-08  1509  
659643f7d814321 Jike Song           2016-12-08  1510            if (info.argsz 
< minsz || info.index >= VFIO_PCI_NUM_IRQS)
659643f7d814321 Jike Song           2016-12-08  1511                    return 
-EINVAL;
659643f7d814321 Jike Song           2016-12-08  1512  
659643f7d814321 Jike Song           2016-12-08  1513            switch 
(info.index) {
659643f7d814321 Jike Song           2016-12-08  1514            case 
VFIO_PCI_INTX_IRQ_INDEX:
659643f7d814321 Jike Song           2016-12-08  1515            case 
VFIO_PCI_MSI_IRQ_INDEX:
659643f7d814321 Jike Song           2016-12-08  1516                    break;
659643f7d814321 Jike Song           2016-12-08  1517            default:
659643f7d814321 Jike Song           2016-12-08  1518                    return 
-EINVAL;
659643f7d814321 Jike Song           2016-12-08  1519            }
659643f7d814321 Jike Song           2016-12-08  1520  
659643f7d814321 Jike Song           2016-12-08  1521            info.flags = 
VFIO_IRQ_INFO_EVENTFD;
659643f7d814321 Jike Song           2016-12-08  1522  
659643f7d814321 Jike Song           2016-12-08  1523            info.count = 
intel_vgpu_get_irq_count(vgpu, info.index);
659643f7d814321 Jike Song           2016-12-08  1524  
659643f7d814321 Jike Song           2016-12-08  1525            if (info.index 
== VFIO_PCI_INTX_IRQ_INDEX)
659643f7d814321 Jike Song           2016-12-08  1526                    
info.flags |= (VFIO_IRQ_INFO_MASKABLE |
659643f7d814321 Jike Song           2016-12-08  1527                            
       VFIO_IRQ_INFO_AUTOMASKED);
659643f7d814321 Jike Song           2016-12-08  1528            else
659643f7d814321 Jike Song           2016-12-08  1529                    
info.flags |= VFIO_IRQ_INFO_NORESIZE;
659643f7d814321 Jike Song           2016-12-08  1530  
659643f7d814321 Jike Song           2016-12-08  1531            return 
copy_to_user((void __user *)arg, &info, minsz) ?
659643f7d814321 Jike Song           2016-12-08  1532                    -EFAULT 
: 0;
659643f7d814321 Jike Song           2016-12-08  1533    } else if (cmd == 
VFIO_DEVICE_SET_IRQS) {
659643f7d814321 Jike Song           2016-12-08  1534            struct 
vfio_irq_set hdr;
659643f7d814321 Jike Song           2016-12-08  1535            u8 *data = NULL;
659643f7d814321 Jike Song           2016-12-08  1536            int ret = 0;
659643f7d814321 Jike Song           2016-12-08  1537            size_t 
data_size = 0;
659643f7d814321 Jike Song           2016-12-08  1538  
659643f7d814321 Jike Song           2016-12-08  1539            minsz = 
offsetofend(struct vfio_irq_set, count);
659643f7d814321 Jike Song           2016-12-08  1540  
659643f7d814321 Jike Song           2016-12-08  1541            if 
(copy_from_user(&hdr, (void __user *)arg, minsz))
659643f7d814321 Jike Song           2016-12-08  1542                    return 
-EFAULT;
659643f7d814321 Jike Song           2016-12-08  1543  
659643f7d814321 Jike Song           2016-12-08  1544            if (!(hdr.flags 
& VFIO_IRQ_SET_DATA_NONE)) {
659643f7d814321 Jike Song           2016-12-08  1545                    int max 
= intel_vgpu_get_irq_count(vgpu, hdr.index);
659643f7d814321 Jike Song           2016-12-08  1546  
659643f7d814321 Jike Song           2016-12-08  1547                    ret = 
vfio_set_irqs_validate_and_prepare(&hdr, max,
659643f7d814321 Jike Song           2016-12-08  1548                            
                VFIO_PCI_NUM_IRQS, &data_size);
659643f7d814321 Jike Song           2016-12-08  1549                    if 
(ret) {
695fbc08d80f93e Tina Zhang          2017-03-10  1550                            
gvt_vgpu_err("intel:vfio_set_irqs_validate_and_prepare failed\n");
659643f7d814321 Jike Song           2016-12-08  1551                            
return -EINVAL;
659643f7d814321 Jike Song           2016-12-08  1552                    }
659643f7d814321 Jike Song           2016-12-08  1553                    if 
(data_size) {
659643f7d814321 Jike Song           2016-12-08  1554                            
data = memdup_user((void __user *)(arg + minsz),
659643f7d814321 Jike Song           2016-12-08  1555                            
                   data_size);
659643f7d814321 Jike Song           2016-12-08  1556                            
if (IS_ERR(data))
659643f7d814321 Jike Song           2016-12-08  1557                            
        return PTR_ERR(data);
659643f7d814321 Jike Song           2016-12-08  1558                    }
659643f7d814321 Jike Song           2016-12-08  1559            }
659643f7d814321 Jike Song           2016-12-08  1560  
659643f7d814321 Jike Song           2016-12-08  1561            ret = 
intel_vgpu_set_irqs(vgpu, hdr.flags, hdr.index,
659643f7d814321 Jike Song           2016-12-08  1562                            
        hdr.start, hdr.count, data);
659643f7d814321 Jike Song           2016-12-08  1563            kfree(data);
659643f7d814321 Jike Song           2016-12-08  1564  
659643f7d814321 Jike Song           2016-12-08  1565            return ret;
659643f7d814321 Jike Song           2016-12-08  1566    } else if (cmd == 
VFIO_DEVICE_RESET) {
659643f7d814321 Jike Song           2016-12-08  1567            
intel_gvt_ops->vgpu_reset(vgpu);
659643f7d814321 Jike Song           2016-12-08  1568            return 0;
e546e281d33d1fc Tina Zhang          2017-11-23  1569    } else if (cmd == 
VFIO_DEVICE_QUERY_GFX_PLANE) {
e546e281d33d1fc Tina Zhang          2017-11-23  1570            struct 
vfio_device_gfx_plane_info dmabuf;
e546e281d33d1fc Tina Zhang          2017-11-23  1571            int ret = 0;
e546e281d33d1fc Tina Zhang          2017-11-23  1572  
e546e281d33d1fc Tina Zhang          2017-11-23  1573            minsz = 
offsetofend(struct vfio_device_gfx_plane_info,
e546e281d33d1fc Tina Zhang          2017-11-23  1574                            
    dmabuf_id);
e546e281d33d1fc Tina Zhang          2017-11-23  1575            if 
(copy_from_user(&dmabuf, (void __user *)arg, minsz))
e546e281d33d1fc Tina Zhang          2017-11-23  1576                    return 
-EFAULT;
e546e281d33d1fc Tina Zhang          2017-11-23  1577            if 
(dmabuf.argsz < minsz)
e546e281d33d1fc Tina Zhang          2017-11-23  1578                    return 
-EINVAL;
e546e281d33d1fc Tina Zhang          2017-11-23  1579  
e546e281d33d1fc Tina Zhang          2017-11-23  1580            ret = 
intel_gvt_ops->vgpu_query_plane(vgpu, &dmabuf);
e546e281d33d1fc Tina Zhang          2017-11-23  1581            if (ret != 0)
e546e281d33d1fc Tina Zhang          2017-11-23  1582                    return 
ret;
e546e281d33d1fc Tina Zhang          2017-11-23  1583  
e546e281d33d1fc Tina Zhang          2017-11-23  1584            return 
copy_to_user((void __user *)arg, &dmabuf, minsz) ?
e546e281d33d1fc Tina Zhang          2017-11-23  1585                            
                                -EFAULT : 0;
e546e281d33d1fc Tina Zhang          2017-11-23  1586    } else if (cmd == 
VFIO_DEVICE_GET_GFX_DMABUF) {
e546e281d33d1fc Tina Zhang          2017-11-23  1587            __u32 dmabuf_id;
e546e281d33d1fc Tina Zhang          2017-11-23  1588            __s32 dmabuf_fd;
e546e281d33d1fc Tina Zhang          2017-11-23  1589  
e546e281d33d1fc Tina Zhang          2017-11-23  1590            if 
(get_user(dmabuf_id, (__u32 __user *)arg))
e546e281d33d1fc Tina Zhang          2017-11-23  1591                    return 
-EFAULT;
e546e281d33d1fc Tina Zhang          2017-11-23  1592  
e546e281d33d1fc Tina Zhang          2017-11-23  1593            dmabuf_fd = 
intel_gvt_ops->vgpu_get_dmabuf(vgpu, dmabuf_id);
e546e281d33d1fc Tina Zhang          2017-11-23  1594            return 
dmabuf_fd;
e546e281d33d1fc Tina Zhang          2017-11-23  1595  
659643f7d814321 Jike Song           2016-12-08  1596    }
659643f7d814321 Jike Song           2016-12-08  1597  
9f591ae60e1be02 Gerd Hoffmann       2018-03-21  1598    return -ENOTTY;
659643f7d814321 Jike Song           2016-12-08  1599  }
659643f7d814321 Jike Song           2016-12-08  1600  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to