Hi Dennis, Thank you for the patch! Yet something to improve: [auto build test ERROR on block/for-next] [also build test ERROR on next-20180731] [cannot apply to v4.18-rc7] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Dennis-Zhou/block-make-iolatency-avg_lat-exponentially-decay/20180801-100533 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next config: i386-randconfig-i1-201830 (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): block/blk-iolatency.o: In function `iolatency_check_latencies': >> block/blk-iolatency.c:511: undefined reference to `__udivdi3' vim +511 block/blk-iolatency.c 478 479 static void iolatency_check_latencies(struct iolatency_grp *iolat, u64 now) 480 { 481 struct blkcg_gq *blkg = lat_to_blkg(iolat); 482 struct iolatency_grp *parent; 483 struct child_latency_info *lat_info; 484 struct blk_rq_stat stat; 485 unsigned long flags; 486 int cpu, exp_idx; 487 488 blk_rq_stat_init(&stat); 489 preempt_disable(); 490 for_each_online_cpu(cpu) { 491 struct blk_rq_stat *s; 492 s = per_cpu_ptr(iolat->stats, cpu); 493 blk_rq_stat_sum(&stat, s); 494 blk_rq_stat_init(s); 495 } 496 preempt_enable(); 497 498 parent = blkg_to_lat(blkg->parent); 499 if (!parent) 500 return; 501 502 lat_info = &parent->child_lat; 503 504 /* 505 * CALC_LOAD takes in a number stored in fixed point representation. 506 * Because we are using this for IO time in ns, the values stored 507 * are significantly larger than the FIXED_1 denominator (2048). 508 * Therefore, rounding errors in the calculation are negligible and 509 * can be ignored. 510 */ > 511 exp_idx = min_t(int, BLKIOLATENCY_NR_EXP_FACTORS - 1, 512 iolat->cur_win_nsec / BLKIOLATENCY_EXP_BUCKET_SIZE); 513 CALC_LOAD(iolat->total_lat_avg, iolatency_exp_factors[exp_idx], 514 stat.mean); 515 516 /* Everything is ok and we don't need to adjust the scale. */ 517 if (stat.mean <= iolat->min_lat_nsec && 518 atomic_read(&lat_info->scale_cookie) == DEFAULT_SCALE_COOKIE) 519 return; 520 521 /* Somebody beat us to the punch, just bail. */ 522 spin_lock_irqsave(&lat_info->lock, flags); 523 lat_info->nr_samples -= iolat->nr_samples; 524 lat_info->nr_samples += stat.nr_samples; 525 iolat->nr_samples = stat.nr_samples; 526 527 if ((lat_info->last_scale_event >= now || 528 now - lat_info->last_scale_event < BLKIOLATENCY_MIN_ADJUST_TIME) && 529 lat_info->scale_lat <= iolat->min_lat_nsec) 530 goto out; 531 532 if (stat.mean <= iolat->min_lat_nsec && 533 stat.nr_samples >= BLKIOLATENCY_MIN_GOOD_SAMPLES) { 534 if (lat_info->scale_grp == iolat) { 535 lat_info->last_scale_event = now; 536 scale_cookie_change(iolat->blkiolat, lat_info, true); 537 } 538 } else if (stat.mean > iolat->min_lat_nsec) { 539 lat_info->last_scale_event = now; 540 if (!lat_info->scale_grp || 541 lat_info->scale_lat > iolat->min_lat_nsec) { 542 WRITE_ONCE(lat_info->scale_lat, iolat->min_lat_nsec); 543 lat_info->scale_grp = iolat; 544 } 545 scale_cookie_change(iolat->blkiolat, lat_info, false); 546 } 547 out: 548 spin_unlock_irqrestore(&lat_info->lock, flags); 549 } 550 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip