Hello Chris Wilson, This is a semi-automatic email about new static checker warnings. The patch 50d16d44cce4: "drm/i915/selftests: Exercise context switching in parallel" from Sep 30, 2019, leads to the following Smatch complaint: drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c:349 live_parallel_switch() error: we previously assumed 'data' could be null (see line 263) drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c 257 } 258 259 engines = i915_gem_context_lock_engines(ctx); 260 count = engines->num_engines; 261 262 data = kcalloc(count, sizeof(*data), GFP_KERNEL); 263 if (!data) { 264 i915_gem_context_unlock_engines(ctx); 265 err = -ENOMEM; 266 goto out; ^^^^^^^^ goto out is always a sign of troubled times ahead... 267 } 268 269 m = 0; /* Use the first context as our template for the engines */ 270 for_each_gem_engine(ce, engines, it) { 271 err = intel_context_pin(ce); 272 if (err) { 273 i915_gem_context_unlock_engines(ctx); 274 goto out; 275 } 276 data[m++].ce[0] = intel_context_get(ce); 277 } 278 i915_gem_context_unlock_engines(ctx); 279 280 /* Clone the same set of engines into the other contexts */ 281 for (n = 1; n < ARRAY_SIZE(data->ce); n++) { 282 ctx = live_context(i915, file); 283 if (IS_ERR(ctx)) { 284 err = PTR_ERR(ctx); 285 goto out; 286 } 287 288 for (m = 0; m < count; m++) { 289 if (!data[m].ce[0]) 290 continue; 291 292 ce = intel_context_create(ctx, data[m].ce[0]->engine); 293 if (IS_ERR(ce)) 294 goto out; 295 296 err = intel_context_pin(ce); 297 if (err) { 298 intel_context_put(ce); 299 goto out; 300 } 301 302 data[m].ce[n] = ce; 303 } 304 } 305 306 for (fn = func; !err && *fn; fn++) { 307 struct igt_live_test t; 308 int n; 309 310 err = igt_live_test_begin(&t, i915, __func__, ""); 311 if (err) 312 break; 313 314 for (n = 0; n < count; n++) { 315 if (!data[n].ce[0]) 316 continue; 317 318 data[n].tsk = kthread_run(*fn, &data[n], 319 "igt/parallel:%s", 320 data[n].ce[0]->engine->name); 321 if (IS_ERR(data[n].tsk)) { 322 err = PTR_ERR(data[n].tsk); 323 break; 324 } 325 get_task_struct(data[n].tsk); 326 } 327 328 for (n = 0; n < count; n++) { 329 int status; 330 331 if (IS_ERR_OR_NULL(data[n].tsk)) 332 continue; 333 334 status = kthread_stop(data[n].tsk); 335 if (status && !err) 336 err = status; 337 338 put_task_struct(data[n].tsk); 339 data[n].tsk = NULL; 340 } 341 342 if (igt_live_test_end(&t)) 343 err = -EIO; 344 } 345 346 out: 347 for (n = 0; n < count; n++) { 348 for (m = 0; m < ARRAY_SIZE(data->ce); m++) { 349 if (!data[n].ce[m]) ^^^^^^^^ Toasted. 350 continue; 351 regards, dan carpenter _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx