Skip to content

Commit ede4cd4

Browse files
committed
MINOR: mux-quic: encapsulate QCC tasklet wakeup
QUIC MUX will be responsible to drive emission with pacing. This will be implemented via setting TASK_F_USR1 before I/O tasklet wakeup. To prepare this, encapsulate each I/O tasklet wakeup into a new function qcc_wakeup(). This commit is purely refactoring prior to pacing implementation into QUIC MUX.
1 parent 4a94a01 commit ede4cd4

File tree

3 files changed

+23
-16
lines changed

3 files changed

+23
-16
lines changed

include/haproxy/mux_quic.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ static inline void qcs_wait_http_req(struct qcs *qcs)
124124

125125
void qcc_show_quic(struct qcc *qcc);
126126

127+
void qcc_wakeup(struct qcc *qcc);
128+
127129
#endif /* USE_QUIC */
128130

129131
#endif /* _HAPROXY_MUX_QUIC_H */

src/mux_quic.c

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,11 @@ static void qcc_refresh_timeout(struct qcc *qcc)
396396
TRACE_LEAVE(QMUX_EV_QCS_NEW, qcc->conn);
397397
}
398398

399+
void qcc_wakeup(struct qcc *qcc)
400+
{
401+
tasklet_wakeup(qcc->wait_event.tasklet);
402+
}
403+
399404
/* Mark a stream as open if it was idle. This can be used on every
400405
* successful emission/reception operation to update the stream state.
401406
*/
@@ -721,7 +726,7 @@ void qcc_set_error(struct qcc *qcc, int err, int app)
721726
* is too tedious too not forget a wakeup outside of this function for
722727
* the moment.
723728
*/
724-
tasklet_wakeup(qcc->wait_event.tasklet);
729+
qcc_wakeup(qcc);
725730
}
726731

727732
/* Increment glitch counter for <qcc> connection by <inc> steps. If configured
@@ -1075,7 +1080,7 @@ static void qcs_consume(struct qcs *qcs, uint64_t bytes)
10751080
frm->max_stream_data.max_stream_data = qcs->rx.msd;
10761081

10771082
LIST_APPEND(&qcc->lfctl.frms, &frm->list);
1078-
tasklet_wakeup(qcc->wait_event.tasklet);
1083+
qcc_wakeup(qcc);
10791084
}
10801085

10811086
conn_fctl:
@@ -1093,7 +1098,7 @@ static void qcs_consume(struct qcs *qcs, uint64_t bytes)
10931098
frm->max_data.max_data = qcc->lfctl.md;
10941099

10951100
LIST_APPEND(&qcs->qcc->lfctl.frms, &frm->list);
1096-
tasklet_wakeup(qcs->qcc->wait_event.tasklet);
1101+
qcc_wakeup(qcc);
10971102
}
10981103

10991104
TRACE_LEAVE(QMUX_EV_QCS_RECV, qcc->conn, qcs);
@@ -1353,7 +1358,7 @@ void qcc_reset_stream(struct qcs *qcs, int err)
13531358
}
13541359

13551360
qcc_send_stream(qcs, 1, 0);
1356-
tasklet_wakeup(qcc->wait_event.tasklet);
1361+
qcc_wakeup(qcc);
13571362
}
13581363

13591364
/* Register <qcs> stream for emission of STREAM, STOP_SENDING or RESET_STREAM.
@@ -1401,7 +1406,7 @@ void qcc_abort_stream_read(struct qcs *qcs)
14011406
qcs->flags |= (QC_SF_TO_STOP_SENDING|QC_SF_READ_ABORTED);
14021407

14031408
qcc_send_stream(qcs, 1, 0);
1404-
tasklet_wakeup(qcc->wait_event.tasklet);
1409+
qcc_wakeup(qcc);
14051410

14061411
end:
14071412
TRACE_LEAVE(QMUX_EV_QCC_NEW, qcc->conn, qcs);
@@ -1434,7 +1439,7 @@ int qcc_install_app_ops(struct qcc *qcc, const struct qcc_app_ops *app_ops)
14341439
TRACE_ERROR("app ops finalize error", QMUX_EV_QCC_NEW, qcc->conn);
14351440
goto err;
14361441
}
1437-
tasklet_wakeup(qcc->wait_event.tasklet);
1442+
qcc_wakeup(qcc);
14381443
}
14391444

14401445
TRACE_LEAVE(QMUX_EV_QCC_NEW, qcc->conn);
@@ -1613,7 +1618,7 @@ int qcc_recv_max_data(struct qcc *qcc, uint64_t max)
16131618
TRACE_DATA("increase remote max-data", QMUX_EV_QCC_RECV, qcc->conn);
16141619

16151620
if (unblock_real)
1616-
tasklet_wakeup(qcc->wait_event.tasklet);
1621+
qcc_wakeup(qcc);
16171622

16181623
if (unblock_soft)
16191624
qcc_notify_fctl(qcc);
@@ -1659,7 +1664,7 @@ int qcc_recv_max_stream_data(struct qcc *qcc, uint64_t id, uint64_t max)
16591664
TRACE_DATA("increase remote max-stream-data", QMUX_EV_QCC_RECV|QMUX_EV_QCS_RECV, qcc->conn, qcs);
16601665
if (unblock_real) {
16611666
/* TODO optim: only wakeup IO-CB if stream has data to sent. */
1662-
tasklet_wakeup(qcc->wait_event.tasklet);
1667+
qcc_wakeup(qcc);
16631668
}
16641669

16651670
if (unblock_soft) {
@@ -1909,7 +1914,7 @@ static int qcc_release_remote_stream(struct qcc *qcc, uint64_t id)
19091914
frm->max_streams_bidi.max_streams = qcc->lfctl.ms_bidi +
19101915
qcc->lfctl.cl_bidi_r;
19111916
LIST_APPEND(&qcc->lfctl.frms, &frm->list);
1912-
tasklet_wakeup(qcc->wait_event.tasklet);
1917+
qcc_wakeup(qcc);
19131918

19141919
qcc->lfctl.ms_bidi += qcc->lfctl.cl_bidi_r;
19151920
qcc->lfctl.cl_bidi_r = 0;
@@ -2416,7 +2421,7 @@ static int qcc_io_send(struct qcc *qcc)
24162421
}
24172422

24182423
if (!qfctl_rblocked(&qcc->tx.fc))
2419-
tasklet_wakeup(qcc->wait_event.tasklet);
2424+
qcc_wakeup(qcc);
24202425
}
24212426

24222427
out:
@@ -2959,7 +2964,7 @@ static int qmux_init(struct connection *conn, struct proxy *prx,
29592964
LIST_APPEND(&mux_stopping_data[tid].list, &conn->stopping_list);
29602965

29612966
/* init read cycle */
2962-
tasklet_wakeup(qcc->wait_event.tasklet);
2967+
qcc_wakeup(qcc);
29632968

29642969
TRACE_LEAVE(QMUX_EV_QCC_NEW, conn);
29652970
return 0;
@@ -3105,7 +3110,7 @@ static size_t qmux_strm_rcv_buf(struct stconn *sc, struct buffer *buf,
31053110

31063111
qcs->flags &= ~QC_SF_DEM_FULL;
31073112
if (!(qcc->flags & QC_CF_ERRL))
3108-
tasklet_wakeup(qcc->wait_event.tasklet);
3113+
qcc_wakeup(qcc);
31093114
}
31103115

31113116
TRACE_LEAVE(QMUX_EV_STRM_RECV, qcc->conn, qcs);
@@ -3169,7 +3174,7 @@ static size_t qmux_strm_snd_buf(struct stconn *sc, struct buffer *buf,
31693174
if (data || fin)
31703175
qcc_send_stream(qcs, 0, data);
31713176
if (!(qcs->qcc->wait_event.events & SUB_RETRY_SEND))
3172-
tasklet_wakeup(qcs->qcc->wait_event.tasklet);
3177+
qcc_wakeup(qcs->qcc);
31733178
}
31743179

31753180
end:
@@ -3290,7 +3295,7 @@ static size_t qmux_strm_done_ff(struct stconn *sc)
32903295
if (data || qcs->flags & QC_SF_FIN_STREAM)
32913296
qcc_send_stream(qcs, 0, data);
32923297
if (!(qcs->qcc->wait_event.events & SUB_RETRY_SEND))
3293-
tasklet_wakeup(qcc->wait_event.tasklet);
3298+
qcc_wakeup(qcc);
32943299

32953300
end:
32963301
TRACE_LEAVE(QMUX_EV_STRM_SEND, qcs->qcc->conn, qcs);
@@ -3388,7 +3393,7 @@ static void qmux_strm_shut(struct stconn *sc, unsigned int mode, struct se_abort
33883393
qcc_reset_stream(qcs, 0);
33893394
}
33903395

3391-
tasklet_wakeup(qcc->wait_event.tasklet);
3396+
qcc_wakeup(qcc);
33923397
}
33933398

33943399
out:

src/quic_conn.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1807,7 +1807,7 @@ void qc_notify_err(struct quic_conn *qc)
18071807
* is made between MUX and quic-conn layer, wake up could be
18081808
* conducted only with qc.subs.
18091809
*/
1810-
tasklet_wakeup(qc->qcc->wait_event.tasklet);
1810+
qcc_wakeup(qc->qcc);
18111811
}
18121812

18131813
TRACE_LEAVE(QUIC_EV_CONN_CLOSE, qc);

0 commit comments

Comments
 (0)