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]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
