Hi Daniele, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on drm-intel/for-linux-next] [cannot apply to drm-tip/drm-tip v5.5-rc7 next-20200124] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Daniele-Ceraolo-Spurio/Commit-early-to-GuC/20200116-112105 base: git://anongit.freedesktop.org/drm-intel for-linux-next reproduce: # apt-get install sparse # sparse version: v0.6.1-153-g47b6dfef-dirty make ARCH=x86_64 allmodconfig make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' If you fix the issue, kindly add following tag Reported-by: kbuild test robot <lkp@xxxxxxxxx> sparse warnings: (new ones prefixed by >>) >> drivers/gpu/drm/i915/gem/i915_gem_context.c:1457:51: sparse: sparse: dereference of noderef expression vim +1457 drivers/gpu/drm/i915/gem/i915_gem_context.c 1440 1441 static int 1442 set_engines__load_balance(struct i915_user_extension __user *base, void *data) 1443 { 1444 struct i915_context_engines_load_balance __user *ext = 1445 container_of_user(base, typeof(*ext), base); 1446 const struct set_engines *set = data; 1447 struct intel_engine_cs *stack[16]; 1448 struct intel_engine_cs **siblings; 1449 struct intel_context *ce; 1450 u16 num_siblings, idx; 1451 unsigned int n; 1452 int err; 1453 1454 if (!HAS_EXECLISTS(set->ctx->i915)) 1455 return -ENODEV; 1456 > 1457 if (intel_uc_uses_guc_submission(&set->ctx->vm->gt->uc)) 1458 return -ENODEV; /* not implement yet */ 1459 1460 if (get_user(idx, &ext->engine_index)) 1461 return -EFAULT; 1462 1463 if (idx >= set->engines->num_engines) { 1464 DRM_DEBUG("Invalid placement value, %d >= %d\n", 1465 idx, set->engines->num_engines); 1466 return -EINVAL; 1467 } 1468 1469 idx = array_index_nospec(idx, set->engines->num_engines); 1470 if (set->engines->engines[idx]) { 1471 DRM_DEBUG("Invalid placement[%d], already occupied\n", idx); 1472 return -EEXIST; 1473 } 1474 1475 if (get_user(num_siblings, &ext->num_siblings)) 1476 return -EFAULT; 1477 1478 err = check_user_mbz(&ext->flags); 1479 if (err) 1480 return err; 1481 1482 err = check_user_mbz(&ext->mbz64); 1483 if (err) 1484 return err; 1485 1486 siblings = stack; 1487 if (num_siblings > ARRAY_SIZE(stack)) { 1488 siblings = kmalloc_array(num_siblings, 1489 sizeof(*siblings), 1490 GFP_KERNEL); 1491 if (!siblings) 1492 return -ENOMEM; 1493 } 1494 1495 for (n = 0; n < num_siblings; n++) { 1496 struct i915_engine_class_instance ci; 1497 1498 if (copy_from_user(&ci, &ext->engines[n], sizeof(ci))) { 1499 err = -EFAULT; 1500 goto out_siblings; 1501 } 1502 1503 siblings[n] = intel_engine_lookup_user(set->ctx->i915, 1504 ci.engine_class, 1505 ci.engine_instance); 1506 if (!siblings[n]) { 1507 DRM_DEBUG("Invalid sibling[%d]: { class:%d, inst:%d }\n", 1508 n, ci.engine_class, ci.engine_instance); 1509 err = -EINVAL; 1510 goto out_siblings; 1511 } 1512 } 1513 1514 ce = intel_execlists_create_virtual(siblings, n); 1515 if (IS_ERR(ce)) { 1516 err = PTR_ERR(ce); 1517 goto out_siblings; 1518 } 1519 1520 intel_context_set_gem(ce, set->ctx); 1521 1522 if (cmpxchg(&set->engines->engines[idx], NULL, ce)) { 1523 intel_context_put(ce); 1524 err = -EEXIST; 1525 goto out_siblings; 1526 } 1527 1528 out_siblings: 1529 if (siblings != stack) 1530 kfree(siblings); 1531 1532 return err; 1533 } 1534 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx Intel Corporation _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx