| 520 | } |
| 521 | |
| 522 | static inline void |
| 523 | calc_moving_average(struct cdg *cdg_data, long qdiff_max, long qdiff_min) |
| 524 | { |
| 525 | struct qdiff_sample *qds; |
| 526 | |
| 527 | ++cdg_data->num_samples; |
| 528 | if (cdg_data->num_samples > cdg_data->sample_q_size) { |
| 529 | /* Minimum RTT. */ |
| 530 | qds = STAILQ_FIRST(&cdg_data->qdiffmin_q); |
| 531 | cdg_data->min_qtrend = cdg_data->min_qtrend + |
| 532 | (qdiff_min - qds->qdiff) / cdg_data->sample_q_size; |
| 533 | STAILQ_REMOVE_HEAD(&cdg_data->qdiffmin_q, qdiff_lnk); |
| 534 | qds->qdiff = qdiff_min; |
| 535 | STAILQ_INSERT_TAIL(&cdg_data->qdiffmin_q, qds, qdiff_lnk); |
| 536 | |
| 537 | /* Maximum RTT. */ |
| 538 | qds = STAILQ_FIRST(&cdg_data->qdiffmax_q); |
| 539 | cdg_data->max_qtrend = cdg_data->max_qtrend + |
| 540 | (qdiff_max - qds->qdiff) / cdg_data->sample_q_size; |
| 541 | STAILQ_REMOVE_HEAD(&cdg_data->qdiffmax_q, qdiff_lnk); |
| 542 | qds->qdiff = qdiff_max; |
| 543 | STAILQ_INSERT_TAIL(&cdg_data->qdiffmax_q, qds, qdiff_lnk); |
| 544 | --cdg_data->num_samples; |
| 545 | } else { |
| 546 | qds = uma_zalloc(qdiffsample_zone, M_NOWAIT); |
| 547 | if (qds != NULL) { |
| 548 | cdg_data->min_qtrend = cdg_data->min_qtrend + |
| 549 | qdiff_min / cdg_data->sample_q_size; |
| 550 | qds->qdiff = qdiff_min; |
| 551 | STAILQ_INSERT_TAIL(&cdg_data->qdiffmin_q, qds, |
| 552 | qdiff_lnk); |
| 553 | } |
| 554 | |
| 555 | qds = uma_zalloc(qdiffsample_zone, M_NOWAIT); |
| 556 | if (qds) { |
| 557 | cdg_data->max_qtrend = cdg_data->max_qtrend + |
| 558 | qdiff_max / cdg_data->sample_q_size; |
| 559 | qds->qdiff = qdiff_max; |
| 560 | STAILQ_INSERT_TAIL(&cdg_data->qdiffmax_q, qds, |
| 561 | qdiff_lnk); |
| 562 | } |
| 563 | } |
| 564 | } |
| 565 | |
| 566 | static void |
| 567 | cdg_ack_received(struct cc_var *ccv, uint16_t ack_type) |
no test coverage detected